【发布时间】:2012-09-17 05:42:55
【问题描述】:
我有:
- 已使用
cudaHostAlloc(..., cudaHostAllocMapped)或cudaHostRegister(..., cudaHostRegisterMapped)成功固定和映射的主机内存; - 已使用
cudaHostGetDevicePointer(...)获取设备指针。
我在 src 和 dest 设备指针上启动cudaMemcpy(..., cudaMemcpyDeviceToDevice),这些指针指向通过上述技术获得的两个不同的固定+映射内存区域。
一切正常。
问题:我应该继续这样做还是只使用传统的 CPU 风格的memcpy(),因为一切都在系统内存中? ...或者它们是相同(即,当 src 和 dest 都被固定时,cudaMemcpy 是否映射到直接的 memcpy)?
(我仍在使用cudaMemcpy 方法,因为以前所有内容都在设备全局内存中,但由于 gmem 大小限制,后来切换到固定内存)
【问题讨论】:
-
这是一个有趣的问题。如果您使用优化的 memcpy,CPU 可能会更好 - 毕竟内存属于它 - 并且离散 GPU 执行 host->host memcpy 的能力仅限于 PCIe 带宽。但如果 GPU 会闲置,为什么不呢?
-
我希望 GPU 不会进行复制。我希望运行时会看到指针都是主机指针并调用主机 memcpy。我已要求了解实际发生的情况。