使用nsight"开始CUDA调试"

时间:2015-08-30 11:02:06

标签: visual-studio visual-studio-2013 cuda nsight

使用"本地Windows调试器"时,Visual Studio 2013中.cu文件中的断点可正常工作。但是当使用nsight"开始CUDA调试"断点被忽略了。这怎么可能?在nsight的网站上,他们说:"使用熟悉的Visual Studio Locals,Watches,Memory和Breakpoints窗口"。所以我猜可以使用正常的断点吗?

编辑:

  • Enable CUDA Memory Checker:开/关没有区别
  • Generate GPU Debug Information:否/是(-G0)没有区别
  • Start CUDA/Graphics debugging:忽略断点

1 个答案:

答案 0 :(得分:4)

  • “启动CUDA调试”调试设备(内核)代码,即用nvcc编译的内容 - > bunch of preprocessing - > cudafe++ - > cicc工具链路径。
  • “本地Windows调试器”调试主机代码,使用nvcc编译的内容 - > bunch of preprocessing - > clcl

您的代码位于哪个文件.cpp.cu.h无关紧要。唯一重要的是,您的代码是否注明为__device____global__

从CUDA 7.5 RC(2015年8月)开始,在Windows上,您一次只能调试其中一个。在Linux和OSX上,您可以使用cuda-gdb同时调试两者。

另请参阅:NVIDIA CUDA Compiler Driver NVCC

在Windows上调试期间可能导致挫折的其他因素:

  • 您正在为一个配置/平台对设置属性,但正在运行另一个
  • 主机和设备模块的.pdb文件出错了。查看nvccclnvlinklink选项。例如,主机和设备调试信息可以写在同一个文件中,相互覆盖。
  • 积极的优化:内联,优化本地等等。发布代码几乎不可能为人类调试。调试器也可以被愚弄。
  • 存在未定义的行为和/或内存访问冲突。它们很容易导致调试程序崩溃,从而导致意外结果,例如断点没有被击中。
  • 您忘记检查其中一个CUDA API或内核调用的错误,出现错误,CUDA上下文已经死亡,内核将不再运行。但你还不知道。您的主机代码继续运行,并且您希望内核断点命中,但它永远不会发生,因为内核将不会被调用。
  • 上面描述的所有错误都可能在库中。不要指望库没有错误。
  • 编译器,调试器和驱动程序也有错误。但是你应该首先假设你的代码出了问题,如果没有任何帮助,请调查并向供应商提交错误报告。