我有两张NVIDIA卡:
$ ls /dev/nv*
/dev/nvidia0 /dev/nvidia1 /dev/nvidiactl /dev/nvidia-uvm
使用pgcc,如何定位特定的卡?我如何确保为nvidia0(device = 0)或nvidia1(device = 1)生成代码?
提前感谢您的帮助。
答案 0 :(得分:3)
还有OpenACC环境变量“ACC_DEVICE_NUM”,可用于设置要使用的设备号。
答案 1 :(得分:2)
target a particular device的OpenACC API例程是:
acc_set_device_num( i, acc_device_nvidia );
如果你打电话一次,在你的程序开始时,i
设置为你想要使用的设备序号,那么你可以通过编程方式定位该设备。
但是,根据您的使用情况,您可能会发现在没有此类API例程的情况下编写代码更容易,而是使用CUDA_VISIBLE_DEVICES
environment variable。例如,你可以这样做:
CUDA_VISIBLE_DEVICES="0" ./my_app
在设备0上运行代码,或
CUDA_VISIBLE_DEVICES="1" ./my_app
在设备1上运行相同的代码。
要确保为特定设备类型生成代码,您可以在编译期间将该设备的计算功能附加到-ta
开关,例如:
pgcc -ta=tesla:cc30 ...
将为cc3.0设备生成代码。如果您使用pgcc
的命令行帮助:
pgcc -help
它将列出其他支持的选项。例如,我的pgcc(15.7)显示:
...
-ta=tesla:{cc20|cc30|cc35|cc50|cuda6.5|cuda7.0|fastmath|[no]flushz|[no]fma|keepbin|keepgpu|keepptx|[no]lineinfo|[no]llvm|loadcache:{L1|L2}|maxregcount:<n>|pin|[no]rdc|[no]unroll|beta}|nvidia|radeon:{keep|[no]llvm|[no]unroll|tahiti|capeverde|spectre|buffercount:<n>}|host
Choose target accelerator
tesla Select NVIDIA Tesla accelerator target
cc20 Compile for compute capability 2.0
cc30 Compile for compute capability 3.0
cc35 Compile for compute capability 3.5
cc50 Compile for compute capability 5.0
...