Inkonsistenz der IDs zwischen 'nvidia-smi -L' und cuDeviceGetName ()

8

Ich führe diesen Befehl in eine Shell und hole:

%Vor%

Aber in meinem Code, wenn ich cuDeviceGetName (.., ID) verwende, wobei ID die ID ist, die von der nvidia-smi-Ausgabe ausgegeben wird, wurden die Geräte invertiert : GPU 0 wird Quadro 2000 und GPU 1 wird Quadro K2000.

Ist das ein erwartetes Verhalten oder ein Fehler? Kennt jemand einen Workaround, damit nvidia-smi die 'echte' ID von GPUs bekommt? Ich könnte die UUID verwenden, um das richtige Gerät mit nvmlDeviceGetUUID () zu erhalten, aber die Verwendung der nvml-API erscheint mir etwas zu kompliziert für das, was ich erreichen möchte.

Diese Frage diskutiert wie CUDA weist Geräten ohne eindeutige Schlussfolgerung IDs zu.

Ich benutze CUDA 6.5.

EDIT: Ich habe mir die Nvidia-smi-Manpage angeschaut (hätte das früher machen sollen ...). Es heißt:

  

"Benutzern, die Konsistenz wünschen, wird empfohlen, entweder UUDI oder PCI-Bus-ID zu verwenden, da die Reihenfolge der Geräteauflistung nicht garantiert ist."

Suche immer noch nach einem Klud ...

    
GaTTaCa 30.09.2014, 14:24
quelle

3 Antworten

9

Es ist erwartetes Verhalten.

nvidia-smi zählt in PCI-Reihenfolge auf.

Standardmäßig werden der CUDA-Treiber und die Laufzeit-APIs nicht verwendet.

Die von Ihnen verknüpfte Frage zeigt deutlich, wie die beiden Nummerierungs- / Ordnungsschemata zugeordnet werden.

Es gibt keine Möglichkeit, nvidia-smi zu veranlassen, sein Ordnungsschema so zu ändern, dass es mit dem übereinstimmt, was von den CUDA Laufzeit- oder Treiber-APIs erzeugt wird. Sie können jedoch die CUDA-Laufzeitauflistungsreihenfolge mithilfe einer Umgebungsvariablen ändern in CUDA 8.

    
Robert Crovella 30.09.2014, 14:43
quelle
3

Sie können die Geräte-Reihenfolge für die CUDA-Umgebung in Ihrer Shell so einstellen, dass sie der Bus-ID anstelle der Vorgabe der schnellsten Karte folgt. Benötigt CUDA 7 und höher.

  

export CUDA_DEVICE_ORDER = PCI_BUS_ID

    
Teshy 31.10.2017 14:32
quelle
2

Es ist das erwartete Verhalten.

nvidia-smi manpage sagt das

  

der 0-basierte Index der GPU / Unit in der vom Treiber zurückgegebenen natürlichen Enumeration,

Die CUDA-API führt in absteigender Reihenfolge der Rechenfähigkeiten gemäß "Programmierhandbuch" 3.2.6.1 Geräteaufzählung auf.

Ich hatte dieses Problem und habe ein Programm geschrieben, das analog zu nvidia-smi ist, aber mit aufgezählten Geräten in einer Reihenfolge, die mit der CUDA API übereinstimmt. Weiter im Text Ref auf dem Programm

Ссылка

Ich habe das Programm geschrieben, weil nvidia-smi das Gerät nicht in einer Reihenfolge aufzählen kann, die mit der CUDA-API übereinstimmt.

    
AlexanderKomarov 20.12.2014 07:52
quelle

Tags und Links