【发布时间】:2013-10-16 14:23:11
【问题描述】:
我了解当主机和设备之间的复制操作开始使用 cudaMemcpy 时,主机指针会自动固定。那么有一个单独的 API cudAHostAlloc() 来分配固定的主机内存的意义和必要性是什么?
【问题讨论】:
-
我认为你的理解是错误的。复制到未固定的内存涉及中间驱动程序管理的缓冲区,这就是它较慢的原因。
-
所以你的意思是从主机,数据首先放入驱动管理(固定)缓冲区,然后从那里传输到设备?
-
@gpuguy:是的。您可以使用 cudaMallocHost() 分配您自己的暂存缓冲区并使用 CUDA 事件来编写您自己的可分页 memcpy 例程 - 参见例如cudahandbook.to/GH9evr
-
@ArchaeaSoftware 但驱动程序如何访问 MMU 以在主机上分配暂存缓冲区?这不是操作系统的工作吗?
-
必须为 CPU 和 GPU 映射固定内存。为 CPU 映射它由操作系统完成,但为 GPU 映射它由驱动程序完成。