Ubuntu 所有CUDA设备都用于显示:无法在桌面环境中调试我的CUDA代码
从上周开始,我的CUDA开发设置出现了一个大问题。我有一个集成的GPU,我还附加了我的显示器和一个额外的NVIDIA卡来运行我的CUDA内核。 但是,我不能再调试我的代码了,因为它说:Ubuntu 所有CUDA设备都用于显示:无法在桌面环境中调试我的CUDA代码,ubuntu,cuda,cuda-gdb,Ubuntu,Cuda,Cuda Gdb,从上周开始,我的CUDA开发设置出现了一个大问题。我有一个集成的GPU,我还附加了我的显示器和一个额外的NVIDIA卡来运行我的CUDA内核。 但是,我不能再调试我的代码了,因为它说: fatal: All CUDA devices are used for display and cannot be used while debugging. (error code = CUDBG_ERROR_ALL_DEVICES_WATCHDOGGED(0x18) 不知何故,我的X-Server似乎阻
fatal: All CUDA devices are used for display and cannot be used while debugging. (error code = CUDBG_ERROR_ALL_DEVICES_WATCHDOGGED(0x18)
不知何故,我的X-Server似乎阻止了我的NVIDIA GPU,因为如果我切换到另一个虚拟控制台(CTRL+ALT+F1),我就可以使用cuda gdb运行我的代码。没有显示器电缆插入NVIDIA卡
“lsof/dev/nvidia*”不提供任何输出。我使用的是Xubuntu 14.04
有人知道如何解决这个问题吗?对我来说,这有助于改变现状
Section "ServerLayout"
Identifier "layout"
Screen 0 "intel"
EndSection
从“nvidia”到“intel”的标识符。在计算能力至少为SM35的设备中,我们显然可以通过设置环境变量来解决这个问题
CUDA_DEBUGGER_SOFTWARE_PREEMPTION=1
我们可以在cuda gdb文档页面上看到:
这是测试。我在Maxwell Quadro GPU上运行:
nvidia-smi
Fri Jun 17 10:59:47 2016
+------------------------------------------------------+
| NVIDIA-SMI 352.63 Driver Version: 352.63 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro M4000M Off | 0000:01:00.0 On | N/A |
| N/A 37C P8 9W / 100W | 158MiB / 4087MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 2981 G /usr/bin/X 57MiB |
| 0 9186 G ...ves-passed-by-fd --v8-snapshot-passed-by- 85MiB |
+-----------------------------------------------------------------------------+
构建并运行应用程序
nvcc -g -G foo.cu
cuda-gdb ./a.out
...
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
fatal: All CUDA devices are used for display and cannot be used while debugging. (error code = CUDBG_ERROR_ALL_DEVICES_WATCHDOGGED(0x18)
现在设置环境变量
export CUDA_DEBUGGER_SOFTWARE_PREEMPTION=1
cuda-gdb ./a.out
(cuda-gdb) r
...
warning: Cuda API error detected: cudaMemcpy returned (0xb)
warning: Cuda API error detected: cudaFree returned (0x11)
[Thread 0x7fffed3ff700 (LWP 10302) exited]
[Thread 0x7ffff7fc6780 (LWP 10293) exited]
从NVIDIA GPU中卸下X-server。如果X-server由一个xorg.conf文件控制,那么这样做相对简单。谢谢,我现在就这么做了。我在xorg.conf中有5个块;1个服务器布局、2个屏幕和2个设备。我花了一段时间才弄明白要在那里做些什么…@kain:请加上一个简短的回答,描述一下你是如何解决问题的。这个街区在哪里?