[CUDA] CUDA下在Host端分配的几种内存模式

本文深入探讨了Pinned内存模式及其在CUDA编程中的应用。详细解释了Pinned内存相较于Pageable内存的优势,包括更高的带宽、内核处理与内存拷贝并行及内存映射等特性。同时介绍了Pinned内存的不同属性,如Write-combining和Portable,并讨论了它们各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pageable VS Pinned

 

平时我们使用的内存都是Pageable(交换页)的,而另一个模式就是Pinned(Page-locked),实质是强制让系统在物理内存中完成内存申请和释放的工作,不参与页交换,从而提高系统效率,需要使用cudaHostAlloc和cudaFreeHost来分配和释放。

 

    优点
        1、带宽更高
        2、内核处理和内存拷贝可同时进行
        3、可以内存映射(mapped)
    缺点
        使用pinned会减少系统内存的可用量,进而影响系统性能。

 

 

在Pinned模式下又有以下几种属性:

 

Write-combining

 

缺省的话pinned拥有cacheable属性,可以用cudaHostAllocWriteCombined标志替代

 

    优点
        1、可以释放L1和L2资源,让缓存应用于别的地方
        2、write-combining在通过PCIE总线传输时不会被检测,大约可提高

             40%的性能

    缺点
        无法读取或读取极慢。

 

 

Portable

 

对于多线程,只能分配pinned的线程可以得到好处,如果想让别的线程也共享,需要cudaHostAllocPortable标志。

 

Mapped

 

传入cudaHostAllocMapped标识可以让宿主与设备内存映射(某些设备支持),这样设备和宿主共用一块内存,在内核函数中可以用cudaHostGetDevicePointer得到指针,不同的宿主线程得到的指针是不同的。

 

    优点
        不用在设备中分配和拷贝内存,数据在需要的时候被内核隐式传输

        不需要用Stream来异步执行,内核函数自动在执行的同时异步传输

 

    缺点

        由于内存共享,内存访问必须同步

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值