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

时间:2015-09-02 12:21:32

标签: cuda gpgpu

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

步骤1 - >可分页内存到固定内存

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

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

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

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

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

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

我希望我所要求的是有意义的。

1 个答案:

答案 0 :(得分:6)

是的,你可以。

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