cuda - NvLink 或 PCIe,如何指定互连?

标签 cuda nvidia

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

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

最佳答案

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

如果您不启用点对点传输,则数据传输(例如 cudaMemcpycudaMemcpyAsynccudaMemcpyPeerAsync)在这两者之间设备将通过 PCIE 从源 GPU 流向 CPU 插槽(可能遍历中间 PCIE 开关,也可能通过插槽级链路(例如 QPI)流动),然后通过 PCIE 从 CPU 插槽流向另一个 GPU。至少会涉及一个 CPU 插槽,即使在 PCIE 架构中存在较短的直接路径。此行为也不能以程序员可用的任何方式进行修改。

这两种方法都使用 p2pBandwidthLatencyTest CUDA 示例代码进行了演示。

关于cuda - NvLink 或 PCIe,如何指定互连?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53174224/

相关文章:

cuda - CUDA 中的二维数组

c++ - 将 C++ 异步函数转换为 GPU 计算

cuda - 是否可以在映射数组上使用 Thrust::device_ptr?

gpu - 用于 nvidia gpu 的 gstreamer 自定义插件

stream - cudaStreamWaitEvent 似乎没有等待

c++ Cuda代码不运行内核

cuda - 是否有正确的 CUDAatomicLoad 函数?

opencl - clGetPlatformIDs调用中出现错误-1001!

ubuntu - NVRM : RmInitAdapter failed: Xid: 79, GPU 已经脱离总线

分配给设备内存的 CUDA 全局(如在 C 中)动态数组