CUDA全局内存-对齐与合并

CUDA执行模型的特征之一指令都是以线程束为单位进行发布和执行,存储操作也是如此。

通常情况下,如图所示,全局内存是通过缓存进行加载,而加载请求是通过所谓“内存事务”来实现的,“内存事务”分为32字节和128字节两种。要么一次性加载32字节,要么一次性加载128字节,这主要取决于设备的缓存路径。

如果对全局内存的访问使用L1/L2缓存存储(路径1),那么访问必须由128字节的“内存事务”完成,因此一行L1的缓存的大小是128字节。

如果对全局内存的访问仅使用L2缓存存储(路径2),那么访问则由32字节的“内存事务”完成,因此一行L1的缓存的大小是32字节。


对齐访问:

对齐访问含义就是如果”内存事务“(32和128字节两种)的访问首地址是缓存粒度(L1的128字节或L2缓存的32字节)的偶数倍,即实现了对齐访问。

合并访问:

在L1缓存的情况下,由”128字节内存事务“完成访问,如果恰好一个线程束访问的地址是连续的128字节,且首地址恰好又是128的倍数。那么这种访问就说所谓合并访问。

如图分别是对齐和非对齐合并访问的示意图,由于对齐且连续访问128字节,出现了合并访问。

内存优化的目标在于,通过更少的”内存事务“获得更多的内存请求,因此需要尽量进行对齐合并访问。
注意:在Fermi架构的机器上,L1缓存是默认参与对全局的加载。后面的架构默认是不启用L1缓存的,如果要使用,使用编译指令:-Xptxas -dlcm=ca. 禁用则使用-Xptxas -dlcm=cg
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值