我读了几篇关于共享内存的好文章;但我有关于银行冲突的初步问题据说如果线程 1 和线程 2 从银行 0 访问字 0,则没有银行冲突,但如果他们访问不同的字,则会出现银行冲突;但我的问题是,不同的词如何可以存在于一个银行中?由于 bank 0 大小为 32 位,字大小为 32 位;最多可以有 1 个字/库。
问问题
872 次
1 回答
8
使用计算能力为 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 |...
+--------+---------+---------+-
如果每个人都在访问单词 0,那么就有“广播”功能;但是如果线程 0 正在访问字 0,线程 1 正在访问字 32,等等,那么这些访问将被序列化。
于 2012-11-23T19:27:21.023 回答