cudaMemcpy是否从主机到设备并行执行?

Pro*_*mer 5 cuda gpgpu nvidia

我很好奇当我们从主机复制到设备时是否在CPU或GPU上执行cudaMemcpy?

换句话说,它是复制一个顺序过程还是并行完成?

让我解释一下为什么我这样问:我有一个包含500万个元素的数组.现在,我想从数组的不同部分复制2组50,000个元素.所以,我想在第一次形成我想在CPU上复制的所有元素的大量数组然后只进行一次大转移或者我应该只调用2个cudaMemcpy,每组一个.

如果cudaMemcpy并行完成,那么我认为第二种方法会更快,因为你不必先在CPU上顺序复制100000个元素

tal*_*ies 3

我很好奇当我们从主机复制到设备时,cudaMemcpy 是在 CPU 还是 GPU 上执行?

对于使用常规可分页用户分配内存进行同步 API 调用的情况,答案是它在两个. 驱动程序必须首先将数据从源内存复制到主机上的 DMA 映射源缓冲区,然后向 GPU 发出数据正在等待传输的信号。然后 GPU 执行传输。为了从源内存到 GPU 的完整复制,该过程会根据需要重复多次。

可以通过使用固定内存来提高进程的吞吐量,驱动程序可以直接通过 DMA 访问或从中读取内存,而无需中间复制(尽管固定内存具有较大的初始化/分配开销,也需要分摊)。

至于问题的其余部分,我怀疑直接从源内存复制两个内存副本比替代方案更有效,但这种问题只能通过基准测试才能最终回答。