大佬教程收集整理的这篇文章主要介绍了在NUMA机器上使用CUDA进行多GPU编程,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
>两个cpu作为NUMA系统,因此主存储器分为两个NUMA
节点.
>每个GPU物理连接到其中一个GPU. (每个PCIe控制器都有一个GPU)
我在主机上创建了两个线程来控制GPU.线程每个都绑定到NUMA节点,即两个线程中的每一个都在一个cpu插槽上运行.如何确定GPU的数量,以便我可以使用cudaSetDevice()选择直接连接的GPU?
./gpuaffinity > out.txt
然后,您可以在程序中读取out.txt,以确定哪些逻辑cpu核心对应于哪些GPU.例如,在具有两个6核处理器和4个GPU的NUMA SAndy Bridge系统上,示例输出可能如下所示:
0 03f 1 03f 2 fc0 3 fc0
该系统有4个GPU,编号从0到3.每个GPU编号后跟一个“核心掩码”.核心掩码对应于与该特定GPU“接近”的核心,表示为二进制掩码.因此对于GPU 0和1,系统中的前6个逻辑核(03f二进制掩码)最接近.对于GPU 2和3,系统中的第二个6个逻辑核心(fc0二进制掩码)最接近.
您可以在程序中读取文件,也可以使用脚本中说明的逻辑在程序中执行相同的功能.
您也可以像这样调用脚本:
./gpuaffinity -v
这会产生稍微冗长的输出.
这是bash脚本:
#!/bin/bash #this script will output a lisTing of each GPU and it's cpu core affinity mask file="/proc/driver/nvidia/gpus/0/information" if [ ! -e $file ]; then echo "Unable to locate any GPUs!" else gpu_num=0 file="/proc/driver/nvidia/gpus/$gpu_num/information" if [ "-v" == "$1" ]; then echo "GPU: cpu CORE AFFINITY MASK: PCI:"; fi while [ -e $file ] do line=`grep "Bus LOCATIOn" $file | { read line; echo $line; }` pcibdf=${line:14} pcibd=${line:14:7} file2="/sys/class/pci_bus/$pcibd/cpuaffinity" read line2 < $file2 if [ "-v" == "$1" ]; then echo " $gpu_num $line2 $pcibdf" else echo " $gpu_num $line2 " fi gpu_num=`expr $gpu_num + 1` file="/proc/driver/nvidia/gpus/$gpu_num/information" done fi
以上是大佬教程为你收集整理的在NUMA机器上使用CUDA进行多GPU编程全部内容,希望文章能够帮你解决在NUMA机器上使用CUDA进行多GPU编程所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。