非GPU硬件会发生银行冲突吗?

10

这篇博客文章解释了内存 bank 冲突如何影响矩阵转置函数的性能。

现在我不禁想问:在“普通”的多线程CPU上会发生同样的情况吗?还是这只是针对CUDA / OpenCL的?或者在现代CPU中由于其相对较大的缓存大小而根本不会出现这种情况?


2
GPU和CPU以相同的方式访问内存,缓存也不是神奇的。在CPU上进行转置也会很慢。 - Mark Ransom
2
是的,CPU 也会出现缓存冲突。我个人观察到,在 AMD Piledriver 上写入 5 个间隔为关键步幅的流时,即使数据适合 L1 缓存,也会出现超过 10 倍的减速。 - Mysticial
2
我承认缓存银行冲突和虚假别名是不同的,但很难区分。因此,我可能是在遇到虚假别名而不是银行冲突。 - Mysticial
它们确实会受到银行冲突的影响,尽管这是所讨论的具体微架构的产物。请参见此处,了解Haswell与SandyBridge中银行更改的示例。 - Leeor
1
@rubenvb:我之前删掉了这个问题的CUDA标签,因为它与CUDA编程无关。你为什么要重新添加它呢? - talonmies
显示剩余2条评论
1个回答

3
自20世纪60年代早期的向量处理CPU以来,就存在银行冲突问题。这是由于交错内存或多通道内存访问引起的。
交错内存访问或MCMA通过从不同的银行或通过不同的通道分阶段访问内存中的每个单词,解决了缓慢RAM访问的问题。但是会有一个副作用,即从同一银行访问内存所需的时间比从相邻银行访问内存所需的时间更长。
来自维基百科关于1980年代Cray 2 http://en.wikipedia.org/wiki/Cray-2的描述:
“主存储器银行被排列在四个象限中,可以同时访问,允许程序员将数据分散到内存中以获得更高的并行性。这种方法的缺点是在前台处理器中设置分散/聚集单元的成本相当高。与内存银行数量相对应的步幅冲突会遭受性能惩罚(延迟),这在2的幂FFT算法中偶尔会发生。由于Cray 2的内存比Cray 1或X-MP大得多,因此可以通过向数组添加一个额外的未使用元素来扩展工作量来轻松解决此问题。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接