我可以将现有的可分页内存转换为固定内存吗?

san*_*age 2 cuda gpgpu

每当我在CUDA中使用固定内存时,这个问题就会浮现在我的脑海中.我已经在这个主题上搜索了很多,但没有找到任何东西.基本上我们必须执行两次数据传输才能使用固定内存:

Step1 - >可分页内存到固定内存

步骤2 - >将内存固定到设备内存

我也可以通过输入数据直接初始化固定内存并将其传输到GPU,这样可以节省Step1的传输时间.在我的情况下,我在GPU上处理非常大量的输入数据.过多的页面锁定内存可能会降低整体系统性能.所以我不能只在固定内存上进行整个分配.我必须迭代地进行Step1和Step2(上面)的转移.

CUDA中是否有任何规定将您现有的主机内存(可分页)转换为固定内存?如下:

步骤1 - >按输入数据初始化可分页存储器

步骤2 - >将上述内存转换为固定内存

步骤3 - >转移到设备并执行执行

我希望我所要求的是有道理的.

tal*_*ies 6

是的你可以.

运行时API包括cudaHostRegister允许现有的可分页内存分配在CUDA上下文中注册.这可以包括固定内存,映射到虚拟地址空间或两者.您的CUDA上下文必须是使用cudaMapHost标志创建的(如果在运行时API中创建了上下文,则这是默认的),并且内存必须满足一些对齐要求,具体取决于您使用的驱动程序版本和平台.但原则上它可以完成.