L1和L2缓存的行大小


77

从该论坛上的上一个问题中,我了解到,在大多数内存系统中,L1缓存是L2缓存的子集,这意味着从L2删除的所有条目也将从L1删除。

所以现在我的问题是我如何确定L1缓存中对应于L2缓存中的条目的条目。L2条目中存储的唯一信息是标签信息。基于此标签信息,如果L1和L2缓存的行大小不同,则如果我重新创建addr,它可能会跨越L1缓存中的多行。

该体系结构是否真的要对两条线进行刷新,还是只是将L1和L2高速缓存保持为相同的线大小?

我知道这是一项政策决定,但我想知道常用的技术。


是否有针对L1和L2的线大小不同的处理器?
奥利弗·查尔斯沃思

3
显然,原始奔腾4具有64字节的L1高速缓存行和128字节的L2高速缓存行。
Paul R

有人可以评论nehalem体系结构吗?我浏览了一篇有关“英特尔Nehalem计算机体系结构的缓存组织和内存管理”的论文。在这里,他们只提到一次缓存行大小(64字节)?
prathmesh.kallurkar,2013年

1
@PaulR:奔腾4具有独立的L1和L2缓存。我可以想象那些要求L1缓存是L2缓存的子集的设计将使行大小保持不变。
大卫·史瓦兹

如果您在x86上运行,则CPUID指令返回确定的缓存行大小信息。Google提供了一些CPUID和缓存行大小的示例。
发呆

Answers:


78

在核心i7中,L1,L2和L3中的行大小相同:即64字节。我想这简化了维护包容性和一致性的过程。

参见第10页:https : //www.aristeia.com/TalkNotes/ACCU2011_CPUCaches.pdf


1
仍然需要知道什么是缓存的关联性。
Felix Crazzolara


81

高速缓存行的大小通常为64个字节。

此外,请看一下有关处理器缓存的非常有趣的文章: 处理器缓存效果库

您将找到以下章节:

  1. 内存访问和性能
  2. 缓存行的影响
  3. L1和L2缓存大小
  4. 指令级并行
  5. 缓存关联性
  6. 错误的缓存行共享
  7. 硬件复杂度

22
+1的链接。我通常不遵循SO的答案中的链接,而是倾向于使用在线缩合。幸运的是,这次我确实遵循了它,绝对值得!
戴维(Davide)2015年

25

在严格包含的高速缓存层次结构中,处理高速缓存块大小的最常用技术是对所有实施了包含属性的高速缓存级别使用相同大小的高速缓存块。与更高级别的高速缓存使用较大的块相比,这会导致更大的标签开销,这不仅占用芯片面积,而且还会增加延迟,因为更高级别的高速缓存通常使用分阶段访问(在访问数据部分之前先检查标签)。但是,这也稍微简化了设计,并减少了数据未使用部分造成的浪费容量。它不需要占用128字节高速缓存块中大部分未使用的64字节块来补偿额外的32位标记的面积损失。另外,可以通过相对简单的预取来提供更大的缓存块效果,以利用更广泛的空间局部性,

不太常用的技术将高速缓存块划分为多个扇区。扇区大小与低级高速缓存的块大小相同可以避免过多的反向无效问题,因为高级高速缓存中的每个扇区都有自己的有效位。(为每个扇区提供所有一致性状态元数据,而不仅仅是有效性,可以避免在块中的至少一个扇区未被弄脏/修改且某些一致性开销(例如,如果一个扇区处于共享状态而另一个扇区处于共享状态)时,避免过度使用写回带宽。在互斥状态下,以互斥状态写入扇区可能不涉及一致性流量(如果使用窥探而不是目录一致性)。)

当标签在处理器芯片上但数据在芯片外时,扇区缓存块节省的面积尤其重要。显然,如果数据存储区的面积与处理器芯片的大小相当(这是不合理的),则具有64字节块的32位标签将占用大约16%(〜6%)的处理器空间,而128-字节块将花费一半的时间。(2009年推出的IBM POWER6 +可能是使用处理器上芯片标签和处理器外数据的最新处理器。像IBM那样,将数据存储在较高密度的嵌入式DRAM中以及将标签存储在较低密度的SRAM中,可能会夸大其词。影响。)

应该注意的是,英特尔使用“缓存行”来指代较小的单元,使用“缓存扇区”来指代较大的单元。(这就是为什么我在解释中使用“缓存块”的原因之一。)使用Intel的术语,无论缓存级别是严格包含,严格排他还是使用,缓存行的大小在不同的缓存级别之间都是非常不寻常的其他一些包容政策。

(严格排除通常使用较高级别的高速缓存作为受害者高速缓存,其中将来自较低级别的高速缓存的逐出插入较高级别的高速缓存。显然,如果块大小不同且未使用扇区,则逐出将需要其余的较大的块从某处被读取无效如果存在于低级高速缓存。[理论上,严格排除可以与不灵活的高速缓存旁路用在一个L1逐出将旁路L2和去L3和L1 / L2高速缓存未命中将只分配给任一L1L2,绕过L1进行某些访问。我所知道的最接近实现的是Itanium绕过L1进行浮点访问。但是,如果我没记错的话,L2包括L1。]]


2

通常,一次访问主存储器将访问64字节的数据和8字节的奇偶校验/ ECC(我不记得确切)。在各种内存级别上保持不同的缓存行大小相当复杂。您必须注意,缓存行大小与该体系结构上的字对齐大小相关性最高。基于此,高速缓存行的大小与内存访问大小的可能性极小。现在,奇偶校验位供存储控制器使用-因此缓存行大小通常为64字节。处理器实际上只控制寄存器之外的东西。计算机中发生的所有其他事情都与获取硬件以优化CPU性能有关。从这个意义上讲,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.