cuda-gdb видит только одно наименее способное устройство из четырех доступных устройств с поддержкой CUDA - PullRequest
3 голосов
/ 11 января 2012

Доступно четыре устройства с поддержкой 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 использование printf в ядре CUDA работает корректно.

Как заставить cuda-gdb видеть все устройства (возможно, кроме одного, используемого для графики ...хотя в указанном случае я регистрируюсь удаленно через SSH) или хотя бы одно устройство Tesla / sm_20?


При следующих рекомендациях в ответ Михаила Фукаракиса путем установки 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 System использовать GeForce, а не Tesla?

1 Ответ

2 голосов
/ 11 января 2012

Можете ли вы убедиться, что переменная окружения 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"
...