有四种支持CUDA的设备可用:
teslabot$ ./deviceQuery | grep -i "device [0-9]|capability"
Device 0: "Tesla C2050 / C2070"
CUDA Capability Major/Minor version number: 2.0
Device 1: "Tesla C2050 / C2070"
CUDA Capability Major/Minor version number: 2.0
Device 2: "GeForce GTX 295"
CUDA Capability Major/Minor version number: 1.3
Device 3: "GeForce GTX 295"
CUDA Capability Major/Minor version number: 1.3
cuda-dbg
只看到其中一个:
teslabot$ cuda-gdb vector_add
NVIDIA (R) CUDA Debugger
4.0 release
Portions Copyright (C) 2007-2011 NVIDIA Corporation
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
[...]
(cuda-gdb) break vector_add_gpu
Breakpoint 1 at 0x400ddb: file vector_add.cu, line 7.
(cuda-gdb) run
[...]
(cuda-gdb) info cuda devices
Dev Description SM Type SMs Warps/SM Lanes/Warp Max Regs/Lane Active SMs Mask
* 0 gt200 sm_13 30 32 32 128 0x00000001
我已经检查了使用-gencode arch=compute_20,code=sm_20
构建的代码在所述机器上编译时没有错误,并且当为sm_20
编译时,在CUDA内核中使用printf
可以正常工作。
我如何让cuda-gdb
看到所有设备(可能除了一个用于图形的设备……尽管在这种情况下,我通过SSH远程登录),或者至少看到一个Tesla/sm_20设备?
当Michael Foukarakis响应中通过将CUDA_VISIBLE_DEVICES
环境变量设置为仅包含"0,1"(即仅显示Teslas)来遵循建议时,在运行info cuda devices
后我得到以下错误:
(cuda-gdb) info cuda devices
fatal: All CUDA devices are used for X11 and cannot be used while debugging. (error code = 24)
如何检查X11(X.Org)使用了哪些设备,以及如何使X Window系统使用GeForce而不是特斯拉?
您能确保CUDA_VISIBLE_DEVICES
环境变量包含您想要使用的所有设备吗,例如:
$ ./deviceQuery -noprompt | egrep "^Device"
Device 0: "Tesla C2050"
Device 1: "Tesla C1060"
Device 2: "Quadro FX 3800"
通过设置变量,您可以使它们中的一个子集对运行时可见:
$ export CUDA_VISIBLE_DEVICES="0,2"
$ ./deviceQuery -noprompt | egrep "^Device"
Device 0: "Tesla C2050"
Device 1: "Quadro FX 3800"