'nvidia-smi -L'和cuDeviceGetName()之间ID的不一致

GaT*_*aCa 10 cuda

我正在将此命令运行到shell中并获取:

C:\Users\me>nvidia-smi -L    
GPU 0: Quadro K2000 (UUID: GPU-b1ac50d1-019c-58e1-3598-4877fddd3f17)    
GPU 1: Quadro 2000 (UUID: GPU-1f22a253-c329-dfb7-0db4-e005efb6a4c7)
Run Code Online (Sandbox Code Playgroud)

但是在我的代码中,当我运行cuDeviceGetName(..,ID),其中ID是nvidia-smi输出给出的ID时,设备已被反转:GPU 0变为Quadro 2000,GPU 1变为Quadro K2000.

这是预期的行为还是错误?有没有人知道一个解决方法,让nvidia-smi获得GPU的"真实"ID?我可以使用UUID来获取具有nvmlDeviceGetUUID()的正确设备,但是使用nvml API对于我正在尝试实现的内容似乎有点过于复杂.

这个问题讨论了CUDA如何在没有明确结论的情况下为设备分配ID.

我正在使用CUDA 6.5.

编辑:我看过nvidia-smi手册页(应该早点完成...).它指出:

"建议希望使用UUDI或PCI总线ID的用户,因为设备枚举排序不能保证一致"

仍在寻找一个kludge ...

Rob*_*lla 13

这是预期的行为.

nvidia-smi 按PCI顺序列举.

默认情况下,CUDA驱动程序和运行时API不会.

您链接的问题清楚地显示了如何关联两个编号/排序方案.

无法使nvidia-smi修改其排序方案以匹配CUDA运行时或驱动程序API生成的任何内容.但是,您可以通过在CUDA 8中使用环境变量来修改CUDA运行时枚举顺序.


小智 12

您可以在shell中为CUDA环境设置设备顺序,以遵循总线ID而不是默认的最快卡.需要CUDA 7及以上.

export CUDA_DEVICE_ORDER = PCI_BUS_ID