我的集群同时配备了 Nvlink 和 PCIe。所有GPU(V100)都可以通过PCIe或NvLink直接通信。据我所知,PCIe交换机和Nvlink都可以支持使用CUDA的直接链接。
现在,我想比较 PCIe 和 NvLink 的点对点通信性能。但是,我不知道如何指定一个,似乎CUDA总是会自动指定一个。有人可以帮助我吗?
如果 CUDA 中的两个 GPU 之间有直接 NVLink 连接,并且您启用点对点传输,则这些传输将通过 NVLink 进行。CUDA 中没有任何方法可以改变这种行为。
如果您不启用点对点传输,那么这两个设备之间的数据传输(例如cudaMemcpy
,,,)将从源 GPU 通过 PCIE 流到 CPU 插槽(可能穿过中间 PCIE 交换机,也可能流过插槽cudaMemcpyAsync
)cudaMemcpyPeerAsync
级链路(例如 QPI),然后通过 PCIE 从 CPU 插槽连接到另一个 GPU。即使 PCIE 结构中存在较短的直接路径,也始终会涉及至少一个 CPU 插槽。此行为也不能以程序员可用的任何方式进行修改。
这两种方法均使用p2pBandwidthLatencyTest
CUDA 示例代码进行演示。
归档时间: |
|
查看次数: |
4404 次 |
最近记录: |