我的集群配备了 Nvlink 和 PCIe。所有 GPU(V100) 都可以通过 PCIe 或 NvLink 直接通信。据我所知,PCIe switch 和 Nvlink 都可以通过使用 CUDA 来支持直接链接。
现在,我想比较一下PCIe和NvLink的点对点通信性能。但是,我不知道如何指定一个,CUDA 似乎总是会自动指定一个。谁能帮帮我?
最佳答案
如果 CUDA 中的两个 GPU 之间有直接的 NVLink 连接,并且您启用了点对点传输,这些传输将通过 NVLink 传输。 CUDA 中没有任何方法可以改变这种行为。
如果您不启用点对点传输,则数据传输(例如 cudaMemcpy
、cudaMemcpyAsync
、cudaMemcpyPeerAsync
)在这两者之间设备将通过 PCIE 从源 GPU 流向 CPU 插槽(可能遍历中间 PCIE 开关,也可能通过插槽级链路(例如 QPI)流动),然后通过 PCIE 从 CPU 插槽流向另一个 GPU。至少会涉及一个 CPU 插槽,即使在 PCIE 架构中存在较短的直接路径。此行为也不能以程序员可用的任何方式进行修改。
这两种方法都使用 p2pBandwidthLatencyTest
CUDA 示例代码进行了演示。
关于cuda - NvLink 或 PCIe,如何指定互连?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53174224/