CUDA 4.0 Peer to Peer Access混淆

时间:2011-08-01 23:12:46

标签: cuda

我有两个与CUDA 4.0同行访问相关的问题:

  1. 我有什么方法可以复制来自GPU#0 ---> GPU#1 ---> GPU#2 ---> GPU#3的数据。目前在我的代码中,当我一次只使用两个GPU时它工作正常,但是当我使用cudaDeviceCanAccessPeer检查第三个GPU上的对等访问时失败。那么,以下工作 - cudaDeviceCanAccessPeer(&flag_01, dev0, dev1),但当我有两个这样的陈述: cudaDeviceCanAccessPeer(&flag_01, dev0, dev1)cudaDeviceCanAccessPeer(&flag_12, dev1, dev2),后者失败(0返回到flag_12变量)。

  2. 它是否仅适用于通过公共PCIe连接的GPU,还是Peer副本取决于底层PCIe互连?我不懂PCIe,但在做nvidia-smi时,我发现GPU的PCIe总线分别为2,3,83和84.

  3. 测试平台是双插槽6核Intel Westmere,带有4个GPU - Nvidia Tesla C2050。

    编辑: HtoD和DtoH之间的带宽测试,以及两个GPU(DtoD)之间的SimpleP2P结果: enter image description here

1 个答案:

答案 0 :(得分:5)

我怀疑这是问题所在。来自即将发布的NVIDIA文档:

NVIDIA GPU旨在充分利用PCI-e Gen2标准,包括点对点通信,但IOH芯片组不支持与其他IOH芯片组进行P2P通信的完整PCI-e Gen2规范< / p>

如果应用程序尝试在需要通过QPI进行P2P通信的两个GPU之间建立P2P关系,则cudaPeerEnable()API调用将返回错误代码。 P2P直接传输的cudaMemcopy()函数自动回退到使用设备到主机到设备的路径,但P2P直接访问没有自动回退(设备代码中的P2P加载/存储指令)。

一个已知的示例系统是具有双IOH芯片组的HP Z800工作站,它可以运行simpleP2P示例,但由于回退路径,带宽非常低(100s of MB / s而不是几GB / s)。

NVIDIA正在调查是否可以通过为未来的GPU架构添加功能来支持跨越QPI的GPU P2P。

参考:英特尔®5520芯片组和英特尔®5500芯片组数据表,表7-4:入站内存地址解码: “IOH不支持PCI Express的非连续字节使能,用于远程点对点MMIO事务。这是对PCI Express标准要求的额外限制,以防止与英特尔QuickPath互连不兼容“。 - http://www.intel.com/Assets/PDF/datasheet/321328.pdf

总的来说,我们建议构建多GPU工作站和集群,这些工作站和集群具有用于连接到单个IOH的GPU的所有PCI-express插槽。