银行在字数方面存在冲突

rob*_*bot 2 cuda

我读了几篇关于共享内存的好文章; 但我有关于银行冲突的初步问题据说,如果线程1和线程2从银行0访问字0,那么就没有银行冲突,但如果他们访问不同的话,那么就会出现银行冲突; 但我的问题是不同的单词如何存在于一个银行?由于bank 0的大小是32位,字大小是32位; 最多可以有一个字/银行.

Jon*_*rsi 7

使用具有2.*或3.*的计算能力的GPU,共有32个共享存储体; 但是共享内存中的数据可能超过32个字(= 128B).每个银行b负责地址中的所有数据(比如说)A % nbanks == b:

        +--------+---------+---------+-
Bank 0  | word 0 | word 32 | word 64 |...
        +--------+---------+---------+-
Bank 1  | word 1 | word 33 | word 65 |...
        +--------+---------+---------+-
Bank 2  | word 2 | word 34 | word 66 |...
        +--------+---------+---------+-
 ...    |  ..... |         |         |
        +--------+---------+---------+-
Bank 30 | word 30| word 62 | word 94 |...
        +--------+---------+---------+-
Bank 31 | word 31| word 63 | word 95 |...
        +--------+---------+---------+-
Run Code Online (Sandbox Code Playgroud)

如果每个人都在访问字0,那么就有"广播"功能; 但是如果线程0访问字0,线程1正在访问字32等,那么这些访问将被序列化.

  • 我花时间为那些在14.75英寸宽greenbar纸上打印的行式打印机制作ascii艺术的时间并没有完全浪费。 (2认同)
  • 该银行是32位"宽" - 每个银行负责处理一个字的共享内存请求.但它比一个项目"更深".例如,Fermi每个SM有48KB的共享内存; 这并不意味着有48KB/32b = 12,288共享存储体; 只有32个,每个负责访问384个单独的32位字.所以说银行的"大小"是32位是不对的. (2认同)