cuda 共享内存bank conflict详解

在cuda并行计算中,共享内存在GPU速度优化上扮演着重要作用,但是如果共享内存使用不当,也会导致速度不快反降或者提速效果不佳,如发生bank conflict;

bank的中文翻译为存储体,GPU 共享内存是基于存储体切换的架构(bank-switched-architecture),一般现在的GPU都包含32个存储体,即共享内存被分成了32个bank;根据GPU计算能力的不同(Compute Capability),每个共享内存存储体的宽可以是32位(CC2.x)或64位(CC3.x以上),即连续的32-bits(或64-bits)字被分配到连续的32个bank中(计算能力不是描述GPU设备计算能力强弱的绝对指标,他是相对的,准确的说他是一个架构的版本号,他可以通过cudaDeviceSetSharedMemConfig() 配置成 cudaSharedMemBankSizeFourByte 四个字节或者 cudaSharedMemBankSizeEightByte(CC3.x以上) 。设置成8字节可以有效避免双精度数据的bank conflicts,默认是4字节), 但是这又遇到一个问题,以Telsa P100为例,我们切换bank的宽为32bit,即4个字节,那么32个bank仅仅为128B的内存,而Telsa P100的共享内存为48KB,那么多余的内存呢?

我们看到这32bit我们定义为宽,那么有宽就有高,在这个博客中https://segmentfault.com/a/1190000007533157,博主进行了这样的比喻:

在共享内存中࿰

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值