我想将一堆数据从主机一次或作为一系列块依次复制到设备,这会影响我的算法。我的问题是哪个有更多的开销?我认为,调用一个以上的复制操作比另一个有更多的开销;但是我只想更详细地了解这个概念(想法通常与现实不符:))。如果您可以显示对某种文档的引用,将不胜感激!
亲切的问候,伊尔克
如果副本是同步的(默认),它们确实会产生更多的开销,因为每个复制函数都会等到 GPU 空闲后再返回。如果副本是异步的,则开销为几微秒,这仅对小型 memcpy 可见。
请注意,您可以使用 NULL 流指定异步 memcpy,您仍将获得 CPU/GPU 并发的好处。(即 CPU 可以在 GPU 处理前一个 memcpy 时启动下一个 memcpy。)
CUDA 手册(为了全面披露,我应该说是我写的)在第 6 章中讨论了这个问题,源代码包括一个测量 memcpy 大小的应用程序,它隐藏了调用 memcpy 的开销。查看存储库中的 breakevenMemcpyHtoD.cu:
https://github.com/ArchaeaSoftware/cudahandbook/tree/master/concurrency