c - cudaHostRegister 是否等同于 mlock() 系统调用?

标签 c linux memory cuda

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

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

最佳答案

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

因此,cudaHostRegister 在页面锁定内存的意义上等同于 mlock(),但在它受限于资源限制的意义上则不是。从某种意义上说,cudaMemcpy 是加速的。

关于c - cudaHostRegister 是否等同于 mlock() 系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648849/

相关文章:

java - Linux下Java的虚拟内存使用率,使用的内存过多

c - 如何使用 C 中的重定向计算 txt 文件中的元音、辅音和数字

c - 套接字未绑定(bind)() ing - 无效参数

python - 我们可以在 Python 中使用 C 代码吗?

linux - 如何读取逗号分隔的变量并将它们附加到 unix 中的字符串缓冲区中

C++迭代器需要删除吗?

c++ - OpenCV:内存位置问题

c - getter 函数如何知道 setter 函数是否被调用?

c - 使用 char 数组作为 switch 语句

python - Python 和 C 的单一源文件