bank conflict分析
Bank Conflict 分析详解
Bank Conflict 的定义
N-way bank conflict:在同一个 bank 上,有 N 个线程同时请求访问不同地址。
关键:
- 同一 bank,同一地址 → 广播(broadcast),不是 conflict
- 同一 bank,不同地址 → conflict
分析 int4 加载的 Bank Conflict
访问模式
// local_tid = 0, 1, 2, ..., 511
// topk = 4
int4 expts = *reinterpret_cast<int4*>(indices_ptr + local_tid * topk);
每个线程读取 16 bytes = 4 个连续 int32:

在一个 Warp(32 threads)中统计 Bank 0 的访问

4 个线程访问同一个 Bank 的不同地址 → 4-way conflict
同理,Bank 1, 2, 3 也各有 4-way conflict。
N-way Conflict = N Cycles ?
是的,对于 shared memory 读取
Shared memory 硬件:
每个 bank 每 cycle 只能服务 1 个地址
如果 N 个线程访问同一 bank 的 N 个不同地址,需要串行化
N-way conflict → N cycles 完成该 warp 的请求

可视化 4-way Conflict
一个 warp 的 32 个线程访问 shared memory:
Cycle 1: Thread 0,1,2,3,4,5,6,7 完成
(每个访问不同的 bank 组)
Cycle 2: Thread 8,9,10,11,12,13,14,15 完成
(它们访问的 bank 与 0-7 相同,但需要等待)
Cycle 3: Thread 16,17,18,19,20,21,22,23 完成
Cycle 4: Thread 24,25,26,27,28,29,30,31 完成
总共: 4 cycles
本文来自博客园,作者:ijpq,转载请注明原文链接:https://www.cnblogs.com/ijpq/p/19539875

浙公网安备 33010602011771号