c - 非 GPU 硬件上是否会发生 Bank 冲突?

标签 c opencl cpu-cache bank-conflict

blog post解释内存库冲突如何破坏转置函数的性能。

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

最佳答案

自从 1960 年代最早的 vector 处理 CPU 以来,就一直存在库冲突 这是由交错内存或多 channel 内存访问引起的。

交错内存访问或 MCMA 通过分阶段访问来解决 RAM 访问速度慢的问题 来自不同银行或通过不同 channel 的内存的每个单词。但是有一个副作用,从同一个 bank 访问内存比从相邻的 bank 访问内存需要更长的时间。

来自 1980 年代 Cray 2 的维基百科 http://en.wikipedia.org/wiki/Cray-2

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

关于c - 非 GPU 硬件上是否会发生 Bank 冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308668/

相关文章:

c - 将 stdout 提供给子进程,该子进程将执行 execv() 排序

c++ - 使用 socketpair 时 SO_SNDBUF 的行为

python - 无法加载OpenCL运行时-OpenCV3 Python

c - 在自定义内存分配器中分配地址 w.r.t.缓存冲突

c++ - 问题 : "error LNK2019: unresolved external symbol"

c - 为什么我的代码返回 0.00?

python - 用于 Python 的 OpenCL

memory - 如何缓解 OpenCL/CUDA 中的主机 + 设备内存传输瓶颈

multithreading - 我有一个看起来像cpu缓存一致性的问题,我不知道该如何解决。两个cpus看到同一个内存的不同内容

algorithm - 存储在缓存中的算法应该多小? (需要线索)