我试图从cuda-gdb获得内存痕迹。但是,我无法进入内核代码。我使用nvcc标志-g -g和-keep,但没有效果。我可以在内核函数上设置一个断点,但是当我试图访问下一条指令时,它会跳转到内核函数的末尾。我已经在sdk示例上尝试了这一点,我观察到同样的行为。我正在开发cuda 5工具包。有什么建议吗?谢谢!
这个行为是典型的内核启动失败。确保您检查了CUDA调用的返回代码。请注意,为了调试,您可能希望在内核调用之后立即添加额外的调用cudaDeviceSynchronize
,并检查该调用的返回代码——这是获得异步内核启动失败原因的最精确方法。
Update:代码在调试器外运行,而不是在cuda-gdb中运行,最常见的是由于试图从图形化环境在单gpu系统上调试而导致的。cuda-gdb不能与Xwindows共享GPU,因为这会挂起操作系统。
如果你的系统只有一个GPU,你需要退出图形环境(例如退出X窗口)并从控制台调试。
如果你有一个多GPU系统,那么你应该检查你的Xwindow配置(Xorg.conf),这样它就不会使用你为调试预留的GPU。