有关SO的一些问题,例如this one,关于当数组或矩阵恰好与高速缓存大小一致时性能下降。关于如何solve it in hardware已经存在了几十年的想法。为什么现代计算机不交错缓存以减少超对齐的后果?
答案 0 :(得分:2)
大多数现代缓存已经存储,但是(如链接状态下的内存库)意味着改善访问时序和顺序访问带宽,而不是解决其他问题。
你链接的问题被解决为错误的编码(遍历行而不是逐列),但总的来说 - 如果你想解决缓存中错误对齐产生的问题 - 你正在寻找缓存偏斜 - 共同性(example paper)。根据这种方法,设置映射不是基于简单的设置比特,而是基于标记比特涉及一些混洗 - 这允许在其他情况下在相同集合上冲突的情况下更好地传播数据。请注意,如果您的整个缓存耗尽,这对您来说真的没有帮助,只是在您有一些" hot set"过度使用,而其他人则基本上没有受到影响。
然而,据我所知,这不是一种常见的做法,因为它是一个非常具体的问题,可以很容易地在代码中(或通过编译器)解决,因此可能不值得一个硬件解决方案。 / p>
修改强>
在保罗的问题之后再做了一些搜索 - 似乎更接近延迟的缓存并不是使用它(或者至少它没有被发布,但我想如果它已经完成它会出现在优化指南中,因为它对性能调整很重要并且易于检测)。这可能包括在任何内存访问时必须查询的L1和TLB。
然而,根据这个链接,它至少在一些英特尔芯片的L3缓存中完成:http://www.realworldtech.com/sandy-bridge/8/
每个核心都有一个L3缓存片,每个片段都可以 每个周期为数据环提供半个高速缓存行(32B)。所有 物理地址分布在缓存切片上 单哈希函数。在缓存切片之间分区数据 简化一致性,增加可用带宽并减少 热点和争用缓存地址。
因此,它至少用于大规模,低延迟的关键缓存。
答案 1 :(得分:0)
交错解决了另一个问题(内存访问延迟)。由于缓存很快,交错并没有真正帮助。对于缓存对齐问题,传统的解决方案是increase the associativity。