C 非GPU硬件上是否发生银行冲突?

C 非GPU硬件上是否发生银行冲突?,c,opencl,cpu-cache,bank-conflict,C,Opencl,Cpu Cache,Bank Conflict,这解释了内存库冲突如何破坏转置函数的性能 现在我不禁要问:在“普通”cpu上(在多线程上下文中)也会发生同样的情况吗?或者这是针对CUDA/OpenCL的?或者,它甚至没有出现在现代CPU中,因为它们的缓存相对较大?自从20世纪60年代最早的向量处理CPU以来,就出现了内存冲突 这是由交错内存或多通道内存访问引起的 交错存储器访问(MCMA)通过分阶段访问内存解决了降低RAM访问速度的问题 每个字的内存来自不同的银行或通过不同的渠道。但也有一个副作用,从同一银行访问内存比从相邻银行访问内存需要更

这解释了内存库冲突如何破坏转置函数的性能


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

自从20世纪60年代最早的向量处理CPU以来,就出现了内存冲突 这是由交错内存或多通道内存访问引起的

交错存储器访问(MCMA)通过分阶段访问内存解决了降低RAM访问速度的问题 每个字的内存来自不同的银行或通过不同的渠道。但也有一个副作用,从同一银行访问内存比从相邻银行访问内存需要更长的时间

20世纪80年代的维基百科克雷2


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

GPU和CPU以相同的方式访问内存,而缓存并不神奇。CPU上的转置也会很慢。是的,CPU也有缓存库冲突。我个人观察到,AMD Piledriver在写入5个以临界跨距间隔的流时,速度减慢了10倍以上,即使数据适合一级缓存。我承认缓存组冲突和假别名是不同的,但很难区分。所以我可能是在打假别名,而不是银行冲突。他们肯定会受到银行冲突的影响,尽管这是所讨论的确切微观架构的产物。有关Haswell vs。SandyBridge@rubenvb:我从这个问题中删除CUDA标记是有原因的-它与CUDA编程无关。你为什么要重新添加它?