【发布时间】:2013-04-28 11:22:06
【问题描述】:
我有一个连接了 2 个 cuda 卡的桌面,我尝试通过在内核行中放置一些断点来调试 cuda 代码。但是调试器只显示内核函数的入口和结束括号。它没有提供踩到内核函数体的能力。它只是忽略。我已经读过,要调试 GPU 内核,您需要将代码运行到系统当前未使用的显卡上。在此基础上,我还尝试通过将活动 GPU 设置为我的第二个(系统未使用)来运行调试器,但调试器仍然忽略内核主体。拥有功能正常的 CUDA 调试器,我该如何解决这个问题?否则编写复杂的 cuda 内核会很痛苦。
可能与大黄蜂 Optimus 卡上的 304 驱动程序版本相关联?
【问题讨论】:
-
你在使用 cuda-gdb 吗?还是 Nsight EE?您是否使用 -G 开关进行编译?尝试在内核入口处设置断点(即发出命令
break mykernel或任何您的内核名称),然后查看在击中该断点后是否可以在内核代码中设置断点。 cuda-gdb 手册也有示例练习,您可以尝试。 -
在 Nsight 的默认设置中使用 cuda-gdb。我也尝试直接在终端上使用 cuda-gdb 调试它,但仍然是同样的问题。
-
如果您尝试了我的建议,我无法从您的回复中看出。您是否尝试在内核名称处设置断点,然后运行直到命中该断点,然后在内核中设置断点?我建议在不驱动显示器的 GPU 上执行此操作,并配置该 GPU 以使 X 不使用它(即它不会出现在您的
xorg.conf文件中)。