gpt4 book ai didi

cuda - CUDA 中更好或相同的 : CPU memcpy() vs device cudaMemcpy() on pinned, 映射内存?

转载 作者:行者123 更新时间:2023-12-03 01:51:19 25 4
gpt4 key购买 nike

我有:

  • 已使用 cudaHostAlloc(..., cudaHostAllocMapped)cudaHostRegister(..., cudaHostRegisterMapped) 成功固定和映射主机内存;
  • 已使用 cudaHostGetDevicePointer(...) 获取设备指针。

我在 src 和 dest 设备指针上启动 cudaMemcpy(..., cudaMemcpyDeviceToDevice),这些指针指向通过上述技术获得的固定+映射内存的两个不同区域。一切正常。

问题:我应该继续这样做还是只使用传统的 CPU 风格的 memcpy() 因为所有内容都在系统内存中? ...或者它们相同(即,当 src 和 dest 都固定时,cudaMemcpy 映射到直接 memcpy)吗?

(我仍在使用 cudaMemcpy 方法,因为以前所有内容都在设备全局内存中,但由于 gmem 大小限制已切换到固定内存)

最佳答案

使用cudaMemcpy,CUDA 驱动程序会检测到您正在从主机指针复制到主机指针,并且复制是在 CPU 上完成的。如果您愿意,当然可以自己在 CPU 上使用 memcpy。

如果您使用cudaMemcpy,则在进行复制之前可能会执行额外的流同步(您可能会在分析器中看到,但我猜在那里 - 测试并查看)。

在 UVA 系统上,您可以使用 cudaMemcpyDefault,正如 talonmies 在他的回答中所说。但如果您没有 UVA(sm_20+ 和 64 位操作系统),则必须调用正确的副本(例如 cudaMemcpyDeviceToDevice)。如果您cudaHostRegister()您感兴趣的所有内容,那么cudaMemcpyDeviceToDevice最终将根据内存所在的位置执行以下操作:

  • 主机<->主机:由CPU执行(memcpy)
  • 主机<->设备:DMA(设备复制引擎)
  • 设备 <-> 设备:Memcpy CUDA 内核(在 SM 上运行,由驱动程序启动)

关于cuda - CUDA 中更好或相同的 : CPU memcpy() vs device cudaMemcpy() on pinned, 映射内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com