cuda-gdb 在遇到内核调用时以"[1] stopped"退出



我对 CUDA 很陌生,在这里的裤子座位上飞了一下......

我正在尝试在没有管理员权限的远程计算机上调试我的 CUDA 程序。我用nvcc -g -G编译我的程序,然后尝试用cuda-gdb调试它。但是,一旦 gdb 点击对内核的调用(甚至不必输入它,并且不会在主机代码中发生),我就会得到:

(cuda-gdb) run
Starting program: /path/to/my/binary/cuda_clustered_tree 
[Thread debugging using libthread_db enabled]
[1]+  Stopped                 cuda-gdb cuda_clustered_tree

然后 cuda-gdb 将我转储回我的终端。如果我尝试再次运行 cuda-gdb,我会得到

An instance of cuda-gdb (pid 4065) is already using device 0. If you believe
you are seeing this message in error, try deleting /tmp/cuda-dbg/cuda-gdb.lock.

恢复的唯一方法是kill -9 cuda-gdb 和 cuda_clustered_(我假设后者是我的二进制文件的一部分)。

这台机器有两个GPU,正在运行CUDA 4.1(我相信 - 安装了很多,但这是我设置PATHLD_LIBRARY_PATH的那个)并编译+运行deviceQuery和带宽测试很好。

如果需要,我可以提供更多信息。我在网上搜索了所有可以找到的地方,但没有找到任何帮助。

想通了!事实证明,cuda-gdb讨厌csh。

如果您正在运行 csh,则会导致 cuda-gdb 表现出上述异常行为。即使从 csh 中运行 bash,然后运行 cuda-gdb,我仍然看到了这种行为。你需要从 bash 开始你的外壳,而且只有 bash。

在机器上,默认的外壳是csh,但我使用bash。我不允许直接更改它,所以我在我的 .login 脚本中添加了"exec/bin/bash --login"。

因此,即使我正在运行bash,因为它是由csh启动的,cuda-gdb也会表现出上述异常行为。摆脱了"exec"命令,所以我直接运行 csh,上面什么都没有,仍然表现出行为。

最后,我不得不让 IT 部门将我的外壳更改为直接 bash (在他们耐心地排除故障之后)。现在它按预期工作。

最新更新