我正在使用 CUDA-GDB 来探索一个大型 CUDA 项目。我可以使用以下命令发现第一个 CUDA 内核:
set cuda break_on_launch application
然后我可以通过内核进行单步调试,GDB 的
continue
将方便地带我到下一个内核启动。
如此处所解释的那样我还可以禁用这些中断,返回到默认行为:
set cuda break_on_launch none
我想退出内核,并返回到主机代码。 GDB
finish
命令在这里没有帮助,报告:
(cuda-gdb) finish
"finish" not meaningful in the outermost frame.
是否可以退出 CUDA 内核并返回到主机代码的后续行?
由于内核启动通常是异步的,因此“主机代码的后续行”不一定有明确的定义。
可以使用
thread
命令将焦点切换到任何主机线程,与普通 gdb 相同,这在 docs 中提到:
(cuda-gdb) info threads (cuda-gdb) thread 1
CUDA_LAUNCH_BLOCKING
设置为1
以获得CPU和GPU之间的同步操作,这应该有助于探索(和调试)。