CUDA host端内存分配模式
平时我们使用的内存都是Pageable(交换页)的,而另一个模式就是Pinned(Page-locked),实质是强制让系统在物理内存中完成内存申请和释放的工作,不参与页交换,从而提高系统效率。
一、分页内存(Pageable)
主机端的分页内存是用calloc或者malloc函数进行一维空间的分配。分页内存空间的释放采用free。
二、页锁定内存(Pinned)
锁页就是将内存页面标记为不可被操作系统换出的内存。所以设备驱动程序给这些外设编程时,可以使用页面的物理地址直接访问内存(DMA),从而避免从外存到内存的复制操作。CPU 仍然可以访问上述锁页内存,但是此内存是不能移动或换页到磁盘上的。CUDA 中把锁页内存称为pinned host memory 或者page-locked host memory。需要使用cudaHostAlloc和cudaFreeHost来分配和释放。
优点
- 带宽更高
- 内核处理和内存拷贝可同时进行,异步并发执行
- 可以内存映射(mapped),从主机地址空间映射到CUDA地址空间,免去了拷贝开销。
缺点
锁页主机存储器是稀缺资源,所以锁页内存分配得多的话,分配会失败。另外由于减少了系统可分页的物理存储器数量,分配太多的分页锁定内存会降低系统的整体性能
使用锁页内存
在GPU 上分配的内存默认都是锁页内存,这