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

是否可以通过系统调用mlock()来对内存进行页锁,从而达到与cudaHostRegister完全相同的效果(关于传输速度)?还是相应的CUDA调用会更新驱动程序查询的内部数据库?

最佳答案

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

因此,就页面锁定内存的意义而言,cudaHostRegister等同于mlock(),但就其绑定(bind)资源限制而言,它并不等同于cudaMemcpy。从某种意义上说,ojit_code是加速的。

08-16 23:48