cudaHostRegister和mlock()系统调用是否等效?

4
锁页内存(Pinned or page-locked memory)相较于未锁定内存可以更快地传输到GPU。CUDA提供了cudaHostAlloccudaHostRegister调用来分配或注册锁页内存。然后,Nvidia驱动程序会在内存传输时检查主机内存是否已锁定,并发出相应的复制代码路径。
通过系统调用mlock()是否可能像cudaHostRegister一样实现锁页内存以达到完全相同的效果(关于传输速度)?还是相应的CUDA调用会更新驱动程序查询的内部数据库?

更新可能会作为一个回答被添加。 - pQB
2个回答

2
我认为NVIDIA驱动程序通过cudaHostAlloc等方式维护自己的页面锁定内存。系统调用mlock使用内核锁定,从技术上讲与驱动程序所做的相当,但内核页面锁定受到非常严格的资源限制RLIMIT_MEMLOCK的限制,这是非常小的。因此,NVIDIA驱动程序使用自己的页面锁定机制。他们警告过度使用,因为它会窃取很多内核其余部分可以访问的内存。
因此,cudaHostRegister在页面锁定内存方面等同于mlock(),但不等同于受到资源限制的约束。并且不等同于cudaMemcpy被加速的意义。

2

它们并不相等。cuMemHostRegister()将内存锁定在页上,但也将其映射到GPU的页表中(或者,如果可移植,映射到多个GPU),以便GPU可以直接访问它。如果您锁定内存而没有为GPU映射它,则对于GPU来说,它就像任何其他内存一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接