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