在多 GPU 计算机中,如何指定 CUDA 作业应在哪个 GPU 上运行?
例如,在安装 CUDA 时,我选择安装NVIDIA_CUDA-<#.#>_Samples
然后运行了几个实例nbody
模拟,但它们都运行在一个 GPU 0 上; GPU 1 完全空闲(使用watch -n 1 nvidia-dmi
)。检查CUDA_VISIBLE_DEVICES
using
echo $CUDA_VISIBLE_DEVICES
我发现这个没有设置。我尝试使用设置它
CUDA_VISIBLE_DEVICES=1
然后运行nbody
再次,但它也转到 GPU 0。
我看了相关问题,如何选择指定GPU来运行CUDA程序?, but deviceQuery
命令不在 CUDA 8.0 bin 目录中。此外$CUDA_VISIBLE_DEVICES$
,我看到其他帖子提到了环境变量$CUDA_DEVICES
但这些都没有设置,我也没有找到如何使用它的信息。
虽然与我的问题没有直接关系,但使用nbody -device=1
我能够让应用程序在 GPU 1 上运行,但使用nbody -numdevices=2
未在 GPU 0 和 1 上运行。
我正在使用 bash shell、CentOS 6.8、CUDA 8.0、2 个 GTX 1080 GPU 和 NVIDIA 驱动程序 367.44 运行的系统上对此进行测试。
我知道使用 CUDA 编写时,您可以管理和控制要使用的 CUDA 资源,但是在运行编译的 CUDA 可执行文件时,如何从命令行管理它?
该问题是由于没有设置CUDA_VISIBLE_DEVICES
shell 中的变量正确。
指定 CUDA 设备1
例如,您可以设置CUDA_VISIBLE_DEVICES
using
export CUDA_VISIBLE_DEVICES=1
or
CUDA_VISIBLE_DEVICES=1 ./cuda_executable
前者为当前 shell 的生命周期设置变量,后者仅为该特定可执行调用的生命周期设置变量。
如果您想指定多个设备,请使用
export CUDA_VISIBLE_DEVICES=0,1
or
CUDA_VISIBLE_DEVICES=0,1 ./cuda_executable
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)