概念
bank冲突:同一wave不同线程同时访问同一bank
当一个wave中的不同线程同时访问一个bank中的不同的字地址时(访问同一个地址则会发生广播,不会发生bank冲突),就会发生bank冲突。
注意的点
-
一个事务(transaction)内才可能会有bank冲突,不同transaction之间没有bank冲突
-
事务的大小和位宽有关
-
bank冲突发生在对LDS的读/写操作中
举例说明
位宽:128B
wave大小:64线程
32 bank
一个线程访问32B数据,一个cycle可以有4个线程(即,一个事务是128B,可以有4线程)。64线程的wave可以分为64 / 4 = 16组(16个事务),组内(事务内)可能发生bank冲突。
Reference
-
AMD Developer guider
-
Nvidia How to understand the bank conflict of shared_mem
Note
位宽:每个时钟周期(cycle)传输的数据量
LDS分bank的目的:是为了让不同线程能够并行访问不同的bank,确保高效的并行访问。
当一个wave中的多个线程同时访问一个bank中的不同字地址时,会发生bank冲突,因为访问的这些不同字地址的这些操作会被序列化(串行读取)
word(字:设计计算机时给定的自然存储单位;字长:一个字的二进制位数)通常是16bit。字是计算机存储、传送或操作时的基本单位