CudaHosterRegister是否等同于mlock()系统调用?

CudaHosterRegister是否等同于mlock()系统调用?,c,linux,memory,cuda,C,Linux,Memory,Cuda,与未锁定内存相比,固定内存或页面锁定内存传输到GPU的速度更快。 CUDA提供cudaHostAlloc和cudahostaregister调用来分配或注册页面锁定内存。英伟达驱动程序然后检查内存传输,如果主机内存被锁定,并根据复制代码路径发布。 是否可以使用系统调用mlock()对内存进行分页锁定,以获得与cudahorstregister完全相同的效果(关于传输速度)?或者CUDA调用更新内部的数据库,驱动程序查询?< /P> < P>我认为英伟达驱动程序通过代码> CUADSHOSTOLL

与未锁定内存相比,固定内存或页面锁定内存传输到GPU的速度更快。 CUDA提供
cudaHostAlloc
cudahostaregister
调用来分配或注册页面锁定内存。英伟达驱动程序然后检查内存传输,如果主机内存被锁定,并根据复制代码路径发布。
是否可以使用系统调用
mlock()
对内存进行分页锁定,以获得与
cudahorstregister
完全相同的效果(关于传输速度)?或者CUDA调用更新内部的数据库,驱动程序查询?< /P> < P>我认为英伟达驱动程序通过代码> CUADSHOSTOLLC/<代码>访问它自己的页面锁定内存。但是内核页面锁定是非常资源受限的
RLIMIT_MEMLOCK
,非常小。因此,NVIDIA驱动程序使用自己的页面锁定机制。他们警告过多的使用,因为它窃取了内核其余部分可以访问的大量内存


因此,
cudaHostRegister
相当于
mlock()。而不是从某种意义上说,cudaMemcpy被加速了。

它们是不等价的。cuMemHostRegister()页锁定内存,但也将其映射到GPU(或者,如果可移植,GPU)的页表中,以便GPU可以直接访问它。如果页面锁定内存而不映射到GPU,则GPU会将其视为与任何其他内存一样。

更新可能会作为答案添加