CUDA多GPU编程要点

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

多GPU的要点包括使用多GPU的原因、GPU间通信模式、设备选择、64位应用程序的点对点通信、点对点访问的启用与关闭、点对点内存复制以及多GPU的同步机制。流和事件在多GPU应用中适用,内存复制无需显式设置当前设备。

🎯

关键要点

  • 使用多GPU的原因包括提高计算性能和效率。
  • 常见的GPU间通信模式包括通过CUDA P2P API进行点对点传输。
  • 64位应用程序在计算能力4.0以上的情况下,可以直接在同一PCIe根节点上的GPU之间进行通信。
  • 启用点对点访问需要检查设备支持情况,并通过相应的CUDA API进行设置。
  • 点对点内存复制可以使用cudaMemcpyPeerAsync进行异步操作。
  • 多GPU间的同步可以通过流和事件实现,流中的内核启动和事件记录需要与当前设备关联。
  • 跨设备的内存复制不需要显式设置当前设备,内存复制的行为不受设备指定的影响。
  • 每个流和事件与单一设备相关联,但同步时不需要该设备为当前设备。

延伸问答

为什么要使用多GPU?

使用多GPU可以提高计算性能和效率。

如何在多GPU之间进行点对点通信?

可以通过CUDA P2P API进行点对点传输,允许在同一PCIe根节点上的GPU之间直接通信。

如何启用点对点访问?

需要检查设备支持情况,并使用相应的CUDA API显式启用点对点访问。

点对点内存复制的异步操作如何实现?

可以使用cudaMemcpyPeerAsync函数进行异步的点对点内存复制。

多GPU间的同步机制是怎样的?

多GPU间的同步可以通过流和事件实现,流中的内核启动和事件记录需要与当前设备关联。

跨设备的内存复制需要设置当前设备吗?

跨设备的内存复制不需要显式设置当前设备,内存复制的行为不受设备指定的影响。

➡️

继续阅读