Es stehen vier CUDA-fähige Geräte zur Verfügung:
teslabot$ ./deviceQuery | grep -i "device [0-9]\|capability"
Gerät 0: "Tesla C2050 / C2070"
CUDA-Fähigkeits-Haupt-/Nebenversion: 2.0
Gerät 1: "Tesla C2050 / C2070"
CUDA-Fähigkeits-Haupt-/Nebenversion: 2.0
Gerät 2: "GeForce GTX 295"
CUDA-Fähigkeits-Haupt-/Nebenversion: 1.3
Gerät 3: "GeForce GTX 295"
CUDA-Fähigkeits-Haupt-/Nebenversion: 1.3
cuda-dbg
sieht nur eines von ihnen:
teslabot$ cuda-gdb vector_add
NVIDIA (R) CUDA Debugger
4.0 release
Teile 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
Ich habe überprüft, dass der mit -gencode arch=compute_20,code=sm_20
erstellte Code ohne Fehler auf genannter Maschine kompiliert wird, und wenn er für sm_20
kompiliert wird, funktioniert printf
im CUDA-Kernel korrekt.
Wie kann ich cuda-gdb
dazu bringen, alle Geräte zu sehen (vielleicht mit Ausnahme des für die Grafik verwendeten... obwohl ich in diesem Fall remote über SSH angemeldet bin), oder zumindest ein Tesla/sm_20-Gerät?
Wenn ich dem Rat in Michael Foukarakis Antwort folge, indem ich die Umgebungsvariable CUDA_VISIBLE_DEVICES
so setze, dass nur "0,1" sichtbar sind, also nur die Teslas sichtbar sind, erhalte ich nach Ausführung von info cuda devices
den folgenden Fehler:
(cuda-gdb) info cuda devices
fatal: Alle CUDA-Geräte werden für X11 verwendet und können während des Debuggens nicht verwendet werden. (Fehlercode = 24)
Wie kann man überprüfen, welche Geräte von X11 (X.Org) verwendet werden, und wie kann man das X Window System dazu bringen, die GeForce und nicht Tesla zu verwenden?