linux c 多显卡编程,在NUMA机器上使用CUDA进行多GPU编程

正如我在评论中提到的,这是一种CPU GPU亲和力。这是一个我一起入侵的bash脚本。我相信它会在RHEL/CentOS 6.x OS上提供有用的结果。它可能无法在许多旧的或其他Linux发行版上正常工作。您可以运行这样的脚本:

./gpuaffinity > out.txt

然后,您可以在您的程序读取out.txt,以确定哪些逻辑CPU内核对应的GPU哪个。例如,NUMA桑迪桥系统具有两个6核处理器和4个GPU上,示例输出可能看起来像这样:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值