【发布时间】:2020-05-12 23:36:05
【问题描述】:
我的集群配备了 Nvlink 和 PCIe。所有 GPU (V100) 都可以通过 PCIe 或 NvLink 直接通信。据我所知,PCIe 交换机和 Nvlink 都可以通过使用 CUDA 支持直接链接。
现在,我想比较一下 PCIe 和 NvLink 的点对点通信性能。但是,我不知道如何指定一个,似乎 CUDA 总是会自动指定一个。有人可以帮我吗?
【问题讨论】:
-
如果您在 2 个 GPU 之间具有 NVLink 连接,并且您将这 2 个 GPU 置于 P2P 关系中,并在它们之间进行传输,则这些传输将通过 NVLink 进行。无法强制这些传输通过 PCIe 进行。如果您希望传输通过 PCIe 进行,则需要禁用这两个设备之间的 P2P 模式。在这种情况下,传输将流经 PCIe,一直通过 CPU 插槽。它不会仅直接流经 PCIe(交换机)。这是您仅有的两个选择。
-
p2pBandwidthLatencyTestCUDA 示例代码演示了两种操作模式(启用 P2P,禁用 P2P)。你不妨研究一下。 -
非常感谢,您验证了我的猜测。我是一名 HPC 开发人员,并且是 GPU 新手。如果我还想在PCIe上使用P2P,我猜:首先我可以编辑集群的配置,我已经尝试联系技术支持。其次,我可以稍微重写 CUDA 以使 NvLink 排名第二吗?有那么难吗?
-
你不能做其中任何一个。
-
修改此行为的能力不会暴露给最终用户。 NVLink 是比 PCIE 更好的 GPU-GPU 通信路径(更快),因此没有理由让最终用户选择更慢的路径。这不是一个可配置的选项。没有可以更改的配置文件,也没有可以在 CUDA 中重写的任何内容。