如何使用 GPU-DMA 从 GPU-CUDA 代码来复制数据

How can I use GPU-DMA from GPU-CUDA code to copying data?

本文关键字:复制 数据 代码 GPU-CUDA 何使用 GPU-DMA      更新时间:2023-10-16

使用 CUDA SDK 5.5,我可以用来复制数据:

  • 从主机:如果内存固定,cudaMemcpy();使用 GPU-DMA
  • 从主机:如果内存未固定,则memcpy();cudaMemcpy();使用 CPU 内核
  • 从 GPU:for() { dst[i] = src[i]; }memcpy();使用 GPU 内核
  • 从 GPU:使用 GPU-DMA ???

如何在 GPU-CUDA 代码的内核功能中使用 GPU-DMA 来复制数据?

如果设备端不支持计算能力 3.5,则无法从设备端尝试执行的操作。如果您有这样的卡片,请参阅编辑。

是的,您可以通过将另一台设备上分配的设备指针传递给内核来从另一台设备访问 GPU RAM。执行运行时会将请求的数据提供给正确的 GPU。但是,这不是很有效,因为每次访问另一个设备内存都会导致对等或设备主机设备之间的内存复制操作。

您可以做的是从主机代码中执行预取数据,并使用不同的流进行memcopy操作(cudaMemcpy_async(和内核执行。但是,这仅在您有一个带有一个单独复制单元的体面卡并且您必须进行显式锁定时才有效,因为没有内置结构可以容纳您的内核,直到数据传输完成。

编辑:

如果您有计算能力 3.5 设备,则可以使用 cuda 设备运行时在设备代码中从一个设备复制到另一个设备。请参阅此处的动态并行性文档:http://docs.nvidia.com/cuda/pdf/cuda_dynamic_parallelism_programming_guide.pdf 请注意,设备上的所有内存拷贝操作也是异步的。您将再次自行保持数据一致性。