银行冲突是不是发生在非 GPU 硬件上?

Posted

技术标签:

【中文标题】银行冲突是不是发生在非 GPU 硬件上?【英文标题】:Do bank conflicts occur on non-GPU hardware?银行冲突是否发生在非 GPU 硬件上? 【发布时间】:2014-08-10 02:43:35 【问题描述】:

blog post 解释了内存库冲突如何影响转置函数的性能。

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

【问题讨论】:

GPU 和 CPU 以相同的方式访问内存,缓存并不神奇。在 CPU 上转置也会很慢。 是的,CPU 也存在缓存库冲突。即使数据适合 L1 缓存,我个人也观察到 AMD Piledriver 写入 5 个按临界步幅间隔开的流的速度降低了 > 10 倍。 我承认缓存库冲突和假别名是不同的,但很难区分。所以我可能遇到了错误的别名而不是银行冲突。 他们肯定会遭受银行冲突的困扰,尽管这是所讨论的确切微架构的产物。参见here,例如关于 Haswell 与 SandyBridge 的银行业务变化 @rubenvb:我从这个问题中删除了 CUDA 标签是有原因的——它与 CUDA 编程无关。为什么重新添加它? 【参考方案1】:

自 1960 年代最早的矢量处理 CPU 以来就一直存在存储库冲突 这是由交错内存或多通道内存访问引起的。

交错内存访问或 MCMA 解决了 RAM 访问速度变慢的问题,方法是分阶段访问 来自不同银行或通过不同渠道的记忆中的每个单词。但是有一个副作用,从同一个bank访问内存比从相邻bank访问内存要长。

来自 1980 年代的 Cray 2 http://en.wikipedia.org/wiki/Cray-2 ***

“主内存库被安排在象限中以同时访问,允许程序员将他们的数据分散到内存中以获得更高的并行度。这种方法的缺点是在设置分散/收集单元的成本前台处理器相当高。与内存库数量相对应的步幅冲突遭受性能损失(延迟),这在基于 2 次方 FFT 的算法中偶尔会发生。由于 Cray 2 的内存比 Cray 1 大得多,或者X-MPs,这个问题很容易通过在数组中添加一个额外的未使用元素来分散工作来解决”

【讨论】:

以上是关于银行冲突是不是发生在非 GPU 硬件上?的主要内容,如果未能解决你的问题,请参考以下文章

AMD 硬件上的银行冲突和通道冲突有啥区别?

随机内存访问和银行冲突

CUDA:不同经线之间的银行冲突?

使用内核参数会导致银行冲突吗? [关闭]

为啥 Cuda/OpenCL 的全局内存中没有银行冲突?

将数据从全局加载到共享内存时如何避免银行冲突