我最近在家里的机器上安装了第二个GPU(Tesla K40),我的搜索建议第一个PCI插槽成为为CUDA作业选择的默认GPU。一个很好的链接正在解释它可以在这里找到:
我的原始GPU是TITAN X,也支持CUDA,但它最适合单精度计算,特斯拉更适合双精度。我对该小组的问题是,是否有办法将我的默认CUDA编程设备设置为第二个?显然我每次都可以在代码中指定使用哪个设备,但我希望我可以配置我的设置,以便它始终默认使用特斯拉卡。
或者是打开盒子和物理交换设备位置的唯一方法吗?不知怎的,这对我来说似乎不对......
非常感谢任何建议或相关的后续跟进链接。
干杯,
老爹
答案 0 :(得分:5)
正如您已经指出的那样,cuda运行时具有its own heuristic用于订购GPU并为其分配设备索引。
CUDA_VISIBLE_DEVICES
environment variable将允许您修改此排序。
例如,假设在正常使用中,我的显示设备被枚举为设备0,我首选的CUDA GPU被枚举为设备1.例如,在没有使用cudaSetDevice
的情况下编写的应用程序将默认为使用枚举为0的设备。如果我想改变它,在linux下我可以使用类似的东西:
CUDA_VISIBLE_DEVICES="1" ./my_app
使cuda运行时枚举通常将设备1作为此应用程序运行的设备0的设备(并且在这种情况下普通设备0将从CUDA“隐藏”)。您可以通过导出该变量(例如,bash)来使会话成为“永久性”:
export CUDA_VISIBLE_DEVICES="1"
./my_app
如果我只想反转默认的CUDA运行时顺序,但仍然可以使应用程序使用这两个GPU,我可以这样做:
CUDA_VISIBLE_DEVICES="1,0" ./deviceQuery
还有其他规范选项,例如使用nvidia-smi
提供的GPU UUID标识符(而不是设备索引)。