如果我有三个 gpus 并且我需要向所有三个 gpus 传输一个巨大的缓冲区,如果我为每个 gpus 使用一个 CUDA 流以便它们的复制引擎可以同时执行传输,会有什么不同吗?我的意思是:到达它们三个的 PCI-E 总线是相同的,不是吗?
问问题
217 次
1 回答
1
PCIe使用多种不同的处理器架构扩展本教科书所涵盖的 CUDA 领域之一。
是的,您需要为每次传输使用单独的流,因为这会使您远离默认的序列化流零。您还将达到各种带宽限制,但是是的,它们将同时运行,并且您确实可以加快按顺序进行传输的速度。
但是,您将受到处理器/内存/pcie 控制器提供并发 (PCIe 2) 5GB/s 流的能力的限制。在添加更多卡不会减少可用 PCIe 通道数量的情况下,您通常会看到显着的好处。通常,对于 2 个卡,这工作得很好,但在超过 3 个卡时会迅速下降,因为在添加更多卡时带宽问题会阻碍。尤其是使用超过 2 个卡时,您不太可能在许多系统上拥有完整的 16 个 PCIe 通道。
Nsight 工具非常擅长显示时间线,显示传输发生了什么,以及显示达到的实际传输速率,因此我建议您尝试一下,让您了解实际发生的情况。
于 2013-07-31T16:33:09.860 回答