2012-05-18 22 views
3

与非锁定内存相比,固定或页面锁定内存传输速度更快。 CUDA提供了cudaHostAlloccudaHostRegister调用来分配或注册页面锁定内存。如果主机内存被锁定,Nvidia驱动程序会检查内存传输,并根据复制代码路径发出问题。cudaHostRegister是否等同于mlock()系统调用?

是否有可能与系统调用mlock()正是实现(关于传输速度)相同的效果cudaHostRegister页锁内存?或者相应的CUDA调用是否更新驱动程序查询的内部数据库?

+0

更新可能会添加为答案 – pQB

回答

2

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

因此,cudaHostRegister相当于mlock(),因为它对页面锁定内存,但并不意味着它受限于资源限制。而不是从某种意义上说,cudaMemcpy是加速的。

1

它们不等价。 cuMemHostRegister()页面锁定内存,但也将其映射到GPU的页表(或者,如果可移植的话,GPU),以便GPU可以直接访问它。如果您在未将内存映射到GPU的情况下对内存进行页面锁定,则与其他任何内存一样,它将在GPU上进行查看。