当我使用钉住内存的方式进行CUDA数据传输时,我观察到数据传输速度大幅提高。在Linux中,实现这一点的底层系统调用是mlock。从mlock的手册页中可以看到,锁定页面可防止它被交换出:
mlock()锁定从addr开始并持续len字节的地址范围内的页面。包含指定地址范围部分的所有页面在调用成功返回时都将保证驻留在RAM中;
在我的测试中,我的系统上有几个GB的空闲内存,因此从未存在过内存页面会被交换出的风险,但我仍然观察到速度提升。请问有人能解释这里的真正原因吗?非常感谢任何洞见或信息。
mlock()
中受益。 - osgx