CUDA 4.0点对点访问混乱

CUDA 4.0点对点访问混乱,cuda,Cuda,我有两个与CUDA 4.0对等访问相关的问题: 有没有什么方法可以从GPU#0-->GPU#1-->GPU#2-->GPU#3复制数据。目前在我的代码中,当我一次只使用两个GPU时,它工作正常,但当我使用cudaDeviceCanAccessPeer检查第三个GPU上的对等访问时,它失败。因此,以下工作: cudaDeviceCanAccessPeer(&flag_01,dev0,dev1),但当我有两个这样的语句时: cudaDeviceCanAccessPeer(&flag_01,dev0,

我有两个与CUDA 4.0对等访问相关的问题:

  • 有没有什么方法可以从
    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变量)

  • 它是否仅适用于通过公共PCIe连接的GPU,或者对等副本是否依赖于基础PCIe互连?我不了解PCIe,但在执行nvidia smi时,我看到GPU的PCIe总线为2、3、83和84

  • 该测试台是一个双插槽6核Intel Westmile,带有4个GPU-Nvidia Tesla C2050

    编辑: HtoD和DtoH之间的带宽测试,以及两个GPU(DtoD)之间的SimpleP2P结果:
    我怀疑这就是问题所在。来自即将发布的NVIDIA文档:

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

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

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

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

    参考:英特尔5520芯片组和英特尔5500芯片组数据表,表7-4:入站内存地址解码: “IOH不支持从PCI Express为远程对等MMIO事务启用非连续字节。这是对PCI Express标准要求的额外限制,以防止与Intel QuickPath Interconnect不兼容。”——


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

    你有什么错误?请注意,您使用
    cudadeviceenableepeeraccess()
    启用对等访问,而不是
    cudaDeviceCanAccessPeer
    ——后者用于查询。我首先通过
    cudaDeviceCanAccessPeer
    检查两个设备是否可以成为对等,然后通过
    cudadeviceenableeraccess()
    启用对等访问
    cudaDeviceCanAccessPeer
    在我尝试检查时返回一个错误,例如检查0,1后返回设备1,2…当我只使用两个设备时,一切正常,但当我包括更多设备时,我被标记出去了。我刚刚在这里找到了你的帖子:从你的设备查询结果来看,你的系统中似乎只有一个GPU。不,这是另一个问题(与simpleP2P没有在其中一台机器上运行有关),我会检查具体的错误代码并报告。
    cudaDeviceCanAccessPeer(&can_access_peer_0_2,设备#0,设备#2)
    返回false,我的程序正在退出。我的系统中总共有5个GPU,我不包括其中一个,所以设备枚举类似于{0,2,3,4}…我认为这个函数在成功时只返回1,在失败时返回0。我注意到,即使这样,通过单个IOH连接的GPU之间的带宽也非常少。我的另一位同事也证实了这一点。请参考上述问题更新部分的图表。我只是针对不同的数据大小运行simpleP2P程序…@harrism请告诉我,现在这个问题(GPU1 CPU1 QPI/HT CPU2 GPU2)在开普勒CC3.0(3.5)和CUDA5.5中解决了吗?