我读了一些关于共享内存的好文章,但是我有一个关于bank conflicts的初步问题。据说如果线程1和线程2从bank 0访问单词0,则不会发生bank conflict,但如果它们访问不同的单词,则会出现bank conflict; 但我的问题是如何在一个单一的bank中容纳不同的单词?由于bank 0的大小为32位,而单词大小也为32位,因此最多只能有1个单词/ bank。
我读了一些关于共享内存的好文章,但是我有一个关于bank conflicts的初步问题。据说如果线程1和线程2从bank 0访问单词0,则不会发生bank conflict,但如果它们访问不同的单词,则会出现bank conflict; 但我的问题是如何在一个单一的bank中容纳不同的单词?由于bank 0的大小为32位,而单词大小也为32位,因此最多只能有1个单词/ bank。
如果您拥有一个计算能力为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 |...
+--------+---------+---------+-