非GPU硬件上是否存在银行冲突?

rub*_*nvb 10 c opencl cpu-cache bank-conflict

这篇博客文章解释了内存库冲突如何破坏转置函数的性能.

现在我不禁要问:在"普通"cpu(在多线程上下文中)是否会发生同样的情况?或者这是特定于CUDA/OpenCL?或者它甚至没有出现在现代CPU中,因为它们的缓存大小相对较大?

Tim*_*ild 3

自 20 世纪 60 年代最早的矢量处理 CPU 以来,一直存在存储体冲突,这是由交错内存或多通道内存访问引起的。

交错内存访问或 MCMA 通过从不同存储体或通过不同通道分阶段访问内存的每个字,解决了 RAM 访问速度变慢的问题。但有一个副作用,从同一存储体访问内存比从相邻存储体访问内存需要更长的时间。

来自 Wikipedia 关于 1980 年代 Cray 2 的内容http://en.wikipedia.org/wiki/Cray-2

“主存储体按象限排列以便同时访问,允许程序员将数据分散在内存中以获得更高的并行性。这种方法的缺点是在前台处理器中设置分散/聚集单元的成本相当高。与内存库数量相对应的跨步冲突会遭受性能损失(延迟),这在基于 2 次方 FFT 的算法中偶尔会发生。由于 Cray 2 的内存比 Cray 1 或 X-MP 大得多,通过向数组中添加额外的未使用元素来分散工作,可以轻松解决此问题”