【问题标题】:CUDA 4.0 Peer to Peer Access confusionCUDA 4.0 点对点访问混乱
【发布时间】:2011-08-01 23:12:45
【问题描述】:

我有两个与 CUDA 4.0 Peer access 相关的问题:

  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,或者对等副本是否依赖于底层 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


【解决方案1】:

我怀疑这是问题所在。来自即将发布的 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 标准要求的额外限制,以防止与英特尔 QuickPath 互连不兼容”。 -- http://www.intel.com/Assets/PDF/datasheet/321328.pdf

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

【讨论】:

  • 我注意到,即便如此,通过单个 IOH 连接的 GPU 之间的带宽也非常少。我的另一位同事也证实了这一点。请参阅上述问题更新部分中的图表。我只是针对不同的数据大小运行 simpleP2P 程序....
  • @harrism 请告诉我,此刻,这个问题(GPU1 CPU1 QPI / HT CPU2 GPU2)在 Kepler CC3.0 中解决了吗( 3.5) 和 CUDA5.5?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多