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