【问题标题】:CUDA - transferring a buffer to multiple devicesCUDA - 将缓冲区传输到多个设备
【发布时间】:2013-07-25 19:55:13
【问题描述】:

如果我有 3 个 gpu,并且需要向所有这三个 gpus 传输一个巨大的缓冲区,如果我为每个 gpus 使用一个 CUDA 流以便它们的复制引擎可以同时执行传输,会有什么不同吗?我的意思是:到达它们三个的 PCI-E 总线是一样的,不是吗?

【问题讨论】:

  • 这至少应该回答你的一个问题:on-demand.gputechconf.com/gtc-express/2011/presentations/…
  • 问题的最后一部分完全取决于主机的PCI-e拓扑。没有一般的答案。
  • @sj755 也许我错过了一些东西。您链接的演示文稿解释了用于利用 streamsP2P memcpy 的说明。我认为用户的主要问题是:如果所有这些 GPU 都在异步交换数据(也许用户已经知道如何去做),它们将通过哪些机制竞争 PCI-E 总线的带宽,可能取决于主机的 PCI-E 拓扑,正如 talonmies 所指出的那样?
  • sj 的演示对我有所帮助,因为我看到从 CPU 到“IOH”芯片的单一总线,即使它们下面有多个 GPU。我敢假设同一总线是从如果它们属于同一个 IOH 芯片,则主机可以访问多个 gpu。如果它们属于不同的 IOH 芯片,则可能不是...这是正确的吗?
  • 实际上 PCIE 通道并没有在任何设备之间共享。 PCIE 是一种点对点的“总线”。从理论上讲,PCIE 根复合体(IOH/CPU 内所有 PCIE 通道上游的逻辑实体)同时支持多个传输是可能的。但其他系统瓶颈可能会出现。正如 talonmies 所说,您确实需要知道自己的特定拓扑和能力,没有通用的答案。

标签: cuda nvidia pci-e


【解决方案1】:

PCIe 使用多种不同的处理器架构在 CUDA 上扩展 this text book 中涵盖的领域之一。

是的,您需要为每次传输使用单独的流,因为这会使您远离默认的序列化流零。您还会遇到各种带宽限制,但是是的,它们会同时运行,而且您确实会比按顺序进行传输更快。

但是,您将受到处理器/内存/pcie 控制器提供并发 (PCIe 2) 5GB/s 流的能力的限制。在添加更多卡不会减少可用 PCIe 通道数量的情况下,您通常会看到显着的好处。通常,对于 2 个卡,这工作得很好,但在超过 3 个卡时会迅速下降,因为在添加更多卡时会出现带宽问题。尤其是使用超过 2 个卡时,您不太可能在许多系统上拥有完整的 16 个 PCIe 通道。

Nsight 工具非常擅长显示时间线,显示传输的情况,以及显示达到的实际传输率,所以我建议您尝试一下,让您了解实际情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2015-12-13
    • 2013-06-19
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多