主机内存
系统中被CPU访问的内存,分为两种类型:可分页内存(pageable memory,一般应用中默认使用)和页锁定内存(page-locked或者pinned)。
可分页内存即为通过操作系统api(malloc(), new())分配的存储器空间;而页锁定内存始终不会被分配到低速的虚拟内存中,能够保证存在于物理内存中,并且能够通过DMA加速与设备端的通信。
为了让硬件使用DMA,操作系统允许主机内存进行页锁定,并且因为性能原因,CUDA包含了开发者使用这些操作系统工具的API。页锁定后的且映射为cuda直接访问的锁定的内存允许以下几点:
- 更快的传输性能;
- 异步的复制操作(在必要的内存复制结束之前内存复制返回控制给调用者;GPU复制操作与cpu并行的执行);
- 映射锁页内存可以被cuda内核直接访问
主机端锁页内存
使用pinned memory有很多好处:可以达到更高的主机-设备端的数据传送带宽,如果页锁定内存以write-commbined方式分配,带宽更高;某些设备支持DMA功能,在执行内核函数的同时利用pinned memory进行主机端与设备端之间的通信;在某些设备上,pinned memory还可以通过zero-copy功能映射到设备地址空间,从GPU直接访问,这样就不用在主存和显存之间进行数据传输。
分配锁页内存
通过cudaHostAlloc
()和cudaFreeHost
()来分配和释放pinned memo