3

与非锁定内存相比,固定或页面锁定内存传输到 GPU 的速度更快。CUDA 提供cudaHostAlloccudaHostRegister调用来分配或注册页面锁定内存。然后,Nvidia 驱动程序检查内存传输是否已锁定主机内存并根据复制代码路径发出。

是否有可能通过系统调用mlock()实现与 完全相同的效果(关于传输速度)对内存进行页面锁定cudaHostRegister?还是相应的 CUDA 调用会更新驱动程序查询的内部数据库?

4

2 回答 2

2

我认为 NVIDIA 驱动程序维护自己的页面锁定内存,可通过cudaHostAllocetc 访问。系统调用mlock使用内核锁定,这在技术上等同于驱动程序所做的,但内核页面锁定非常受资源限制RLIMIT_MEMLOCK,非常小。因此 NVIDIA 驱动程序使用它自己的页面锁定机制。他们警告过度使用,因为它窃取了内核其余部分可访问的大量内存。

因此,在它对内存进行页面锁定的意义上cudaHostRegister是等价mlock()的,而不是在它受资源限制的意义上。而不是从某种意义上说,这cudaMemcpy是加速的。

于 2012-05-18T14:17:23.763 回答
2

它们不是等价的。cuMemHostRegister() 页面锁定内存,但也将其映射到 GPU(或者,如果是可移植的,GPU)的页表中,以便 GPU 可以直接访问它。如果您在不为 GPU 映射的情况下对内存进行页面锁定,那么它在 GPU 中的外观就像任何其他内存一样。

于 2012-05-19T23:41:34.927 回答