【发布时间】:2011-08-01 23:12:45
【问题描述】:
我有两个与 CUDA 4.0 Peer access 相关的问题:
有什么方法可以复制来自
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 Westmere,带有 4 个 GPU - Nvidia Tesla C2050。
编辑: HtoD和DtoH之间的带宽测试,以及两个GPU之间的SimpleP2P结果(DtoD):
【问题讨论】:
-
你得到什么错误?请注意,您使用
cudaDeviceEnablePeerAccess()启用对等访问,而不是cudaDeviceCanAccessPeer- 后者用于查询。 -
我首先通过
cudaDeviceCanAccessPeer检查两台设备是否可以成为peer,然后通过cudaDeviceEnablePeerAccess()启用peer访问。cudaDeviceCanAccessPeer在我尝试检查时返回一个错误,比如在检查 0,1 之后说设备 1,2....当我只坚持两个设备时一切都很好,但是当我包含更多设备时,我被标记出来。 -
我刚刚在这里找到了您的帖子:forums.nvidia.com/index.php?showtopic=206809 从您的 deviceQuery 结果看来,您的系统中只有一个 GPU。
-
不,这是一个不同的问题(与simpleP2P未在其中一台机器上运行有关),我会检查具体的错误代码并报告。
-
cudaDeviceCanAccessPeer(&can_access_peer_0_2, device#0, device#2)返回 false,我的程序正在退出。我的系统中总共有 5 个 GPU,我不包括一个,所以设备枚举就像 {0,2,3,4}...我认为这个函数只返回 1 成功或 0 失败。
标签: cuda