2014-02-20 28 views
-1

我有调试CUDA内核的问题。一些变量不能在调试器中进行评估。经过很多调查和简化项目和代码我在调用内核的DLL中有一个非常简单的项目包含主应用程序调用宿主函数。 使用Visual Studio的项目向导实际创建的内核代码。 另外我有EMPTY .cu文件。当它包含来建立我有一个问题。 当这个文件排除构建 - 一切正常。 空文件的DLL调试版本的大小是92 kb,没有90kb。调试CUDA内核时无法解析名称

我的设置是 的Windows 7专业版64位 VS2010临 NVIDIA Nsight VS版3.2.2 CUDA SDK 5.5 NVIDIA驱动程序331.82

+1

什么确切你的问题?我只看到你的问题列表?另请提供更多信息,例如您的简单项目。 – hubs

+0

我的问题是调试代码。如果不调试代码并评估变量,我无法转发我的项目。我可以分享完整的解决方案(12KB 5kb zip)。链接到谷歌驱动器是好的? – BaraBashkaD

+1

不要在你的问题中放置外部链接。当这些链接失效时,这个问题对于未来的读者将变得没有用处。相反,将问题简化为可以完全发布在问题中的简短内容。在减少的过程中,您可能会发现自己的问题或关键问题。 –

回答

0

尽管这个问题被downvoted,我遇到了同样的问题,以及和后一些调查发现,当我将“Configuration Properties | CUDA C/C++ | Common | Generate Relocatable Device Code”设置为“Yes”时发生了这种情况,这对我来说非常重要。设置为“否”解决了这个问题,但我不知道为什么。

3

最后我发现问题的根源和解决方法。 当解决方案非常复杂并且包含几个cpp和cu文件时,会出现问题。 因为这需要“可重定位设备代码”。否则,GPU代码不能被分成几个CU文件。

CU file passed for compilation to NVCC that perform preprocessing and divide code to host and gpu. After that host code compiled with VC compiler and gpu continue with nvcc.

当CU文件不又名包括任何GPU代码__device__功能的调试信息被打破。 所以解决方法是添加虚拟函数在这类CU文件:

__device__ void dummy1() 
{ 
} 
+0

这也适用于我。 –

+0

尽管这个问题有点尴尬,但我在使用nSight调试CUDA时遇到了同样的问题,但是使用rdc标志进行编译, 我通过将所有编译文件合并为一个文件并排除rdc标志来解决该问题。 – TripleS