You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUDA共享内存Bank冲突计算解析:GPU Gems前缀和图39-5疑问

理解GPU Gems 3中并行前缀和的共享内存Bank冲突映射

要理解图中thid 8-15的bank访问逻辑,我们结合代码上下文、共享内存bank的分配规则拆解如下:

1. 代码上下文与ai值的由来

你给出的代码片段来自并行前缀和的down-sweep(向下扫描)阶段,其中offset对应算法中的步长d。当d=1(即算法的最底层扫描)时,代入公式:

int ai = offset*(2*thid + 1) - 1;

计算得ai = 1*(2*thid +1) -1 = 2*thid,这与图中给出的ai值完全匹配:

  • thid 0-7 → ai=0,2,4,...,14
  • thid 8-15 → ai=16,18,20,...,30

2. 共享内存Bank的分配规则(Compute Capability 1.x)

在16个bank的共享内存配置中,CUDA会将连续的32位(4字节)字依次分配到bank 0到15,循环往复。对于共享内存数组的字索引(即ai,假设数组为int类型,每个元素占4字节),bank索引的计算公式为:

bank索引 = ai % 16

3. thid 8-15的Bank计算逻辑

按照上述公式计算:

  • thid8的ai=16 → 16%16=0
  • thid9的ai=18 →18%16=2
  • thid10的ai=20 →20%16=4
  • ...
  • thid15的ai=30 →30%16=14

你提供的图中thid15的bank标注为15是笔误,这实际是bi的bank索引(bi=1*(2*15+2)-1=31,31%16=15)。

4. Bank冲突分析

此时同一warp内:

  • bank 0被thid0和thid8访问
  • bank 2被thid1和thid9访问
  • ...
  • bank14被thid7和thid15访问

每个偶数编号的bank都有2个线程同时访问,冲突度为2,这正是图39-5要展示的down-sweep阶段的bank冲突情况。

内容的提问来源于stack exchange,提问作者user8469759

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:37:02