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:

image

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

image

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 的请求

image
可视化 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
posted @ 2026-01-27 17:29  ijpq  阅读(4)  评论(0)    收藏  举报