先看一张图,感受一下
Bank conflict 原理
想象一下学校组织跳大绳比赛,8个班级(block),每个班级32个同学(32个thread)并排准备跳绳,每个同学对应一个位置(bank),如图
当游戏开始后,32个同学按照同一个节奏跳绳,并不会因为位置发生冲突,那如果最不理想的情况发生,即32个thread访问shared memory中的同一个bank,即bank conflict最大化,那就要32个时钟周期才能跑完,也就是说要抡32次绳子,同学们才能依次跳过,这个延时我们是无法接受的;
解决方法
32bank conflict: 我们添加一个列padding即可
代码对比
静态制造bank conflict
静态conflict前后对比
静态解决conflict:
参考
NVIDIA
自动驾驶之心
写东西,讲究一个随心所欲