Cuda NvLink或PCIe,如何指定互连?

Cuda NvLink或PCIe,如何指定互连?,cuda,nvidia,Cuda,Nvidia,我的群集同时配备Nvlink和PCIe。所有GPU(V100)都可以通过PCIe或NvLink直接通信。据我所知,PCIe交换机和Nvlink都可以通过使用CUDA支持直接链路 现在,我想比较PCIe和NvLink的点对点通信性能。但是,我不知道如何指定一个,似乎CUDA总是自动指定一个。有人能帮我吗 如果CUDA中的两个GPU之间有直接的NVLink连接,并且您启用了对等传输,那么这些传输将通过NVLink进行。CUDA中没有任何方法可以改变这种行为 如果不启用对等传输,则这两个设备之间的数据

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


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

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

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


这两种方法都是使用CUDA示例代码演示的。

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

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


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

如果您在2个GPU之间具有NVLink连接,并且将这2个GPU置于P2P关系中,并在它们之间进行传输,则这些传输将通过NVLink进行。不可能强制这些传输通过PCIe进行。如果希望传输通过PCIe,则需要禁用这两个设备之间的P2P模式。在这种情况下,传输将通过PCIe,一直通过CPU插槽。它不会直接通过PCIe(交换机)仅限。这是您仅有的两种选择。
p2pB和widthLatencyTest
CUDA示例代码演示了两种操作模式(启用P2P,禁用P2P)。您可能希望研究它。非常感谢,您验证了我的猜测。我是HPC开发人员,对GPU不熟悉。如果我仍然想将P2P与PCIe一起使用,我想:首先,我可以编辑群集的配置,并且我已经尝试联系技术支持。其次,我可以稍微重写CUDA以使NvLink排名第二吗?这有困难吗?您可以不能执行其中任何一项。修改此行为的功能不会向最终用户公开。NVLink是更好的GPU-GPU通信路径(更快)比PCIE慢,因此没有理由允许最终用户选择较慢的路径。这不是一个可配置的选项。没有可以更改的配置文件,也没有可以在CUDA中重写的内容来实现这一点。如果您在2个GPU之间具有NVLink连接,并且您将这2个GPU置于P2P关系中,并且n在它们之间传输时,这些传输将通过NVLink传输。不可能强制这些传输通过PCIe传输。如果您希望这些传输通过PCIe传输,则需要禁用这两个设备之间的P2P模式。在这种情况下,传输将通过PCIe传输,一直通过CPU插槽。这不会影响低直接跨PCIe(交换机)仅限。这是您仅有的两种选择。
p2pBandwidthLatencyTest
CUDA示例代码演示了两种操作模式(启用P2P,禁用P2P)。您可能希望研究它。非常感谢,您验证了我的猜测。我是HPC开发人员,对GPU不熟悉。如果我仍然想将P2P与PCIe一起使用,我想:首先,我可以编辑群集的配置,并且我已经尝试联系技术支持。其次,我可以稍微重写CUDA以使NvLink排名第二吗?这有困难吗?您可以不能执行其中任何一项。修改此行为的功能不会向最终用户公开。NVLink是更好的GPU-GPU通信路径(更快)因此,没有理由允许最终用户选择较慢的路径。这不是一个可配置的选项。没有可以更改的配置文件,也没有可以在CUDA中重写的内容可以实现这一点。有关如何使用TensorFlow.contrib.nccl.all\u sum编写TensorFlow测试的任何指导。“nvidia smi nvlink-g 0-i 0”未表示任何字节传输。有关如何使用TensorFlow.contrib.nccl.all_sum编写TensorFlow测试的任何指导。“nvidia smi nvlink-g 0-i 0”未表示任何字节传输。