CUDA 4.0点对点访问混乱
我有两个与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,
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变量)我怀疑这就是问题所在。来自即将发布的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中解决了吗?