Bank conflict分析解决

 
Category: C_C++

写在前面

cuda 硬件: 存储视角

https://zhuanlan.zhihu.com/p/4746910252 写的真好

warp是SM的基本执行单元,一个block内相邻的32个线程划分为一个warp,一个warp内的32个线程按照SIMT的模式来执行指令。

Cuda shared memory按照4字节一个bank,总共32个bank(128字节)来组织,其store和load操作在一定情况下存在bank conflict的情况:

  • 不同的线程访问同一bank的不同address时就会出现bank conflict。
  • bank conflict只发生在同一个warp的不同线程间。
  • 如果多个线程访问shared memory的相同bank的相同address,实际效果是broadcast,非bank conflict。
  • bank conflict只发生在shared memory的读写操作上,global memory的读写操作不会有bank conflict产生。