NvLink还是PCIe,如何指定互连?

Js *_* Du 3 cuda nvidia

我的集群同时配备了 Nvlink 和 PCIe。所有GPU(V100)都可以通过PCIe或NvLink直接通信。据我所知,PCIe交换机和Nvlink都可以支持使用CUDA的直接链接。

现在,我想比较 PCIe 和 NvLink 的点对点通信性能。但是,我不知道如何指定一个,似乎CUDA总是会自动指定一个。有人可以帮助我吗?

Rob*_*lla 7

如果 CUDA 中的两个 GPU 之间有直接 NVLink 连接,并且您启用点对点传输,则这些传输将通过 NVLink 进行。CUDA 中没有任何方法可以改变这种行为。

如果您不启用点对点传输,那么这两个设备之间的数据传输(例如cudaMemcpy,,,)将从源 GPU 通过 PCIE 流到 CPU 插槽(可能穿过中间 PCIE 交换机,也可能流过插槽cudaMemcpyAsynccudaMemcpyPeerAsync级链路(例如 QPI),然后通过 PCIE 从 CPU 插槽连接到另一个 GPU。即使 PCIE 结构中存在较短的直接路径,也始终会涉及至少一个 CPU 插槽。此行为也不能以程序员可用的任何方式进行修改。

这两种方法均使用p2pBandwidthLatencyTestCUDA 示例代码进行演示。