L1和L2缓存的行大小

pra*_*kar 64 caching memory-management computer-architecture

从以前的问题,在这个论坛上,我了解到,在大多数存储系统中,L1缓存L2缓存的子集,是指从L2删除任何条目也从L1删除.

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

该体系结构是否真的打扰了两条线路,或者它只是保持具有相同线路大小的L1和L2缓存.

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

Axe*_*rja 70

高速缓存行大小(通常)为64字节.

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

您将找到以下章节:

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

  • +1链接.我通常不会遵循SO的答案中的链接并优先进行内联冷凝.幸运的是,这次我确实遵循了它,这绝对值得! (18认同)

Neh*_*kar 67

在核心i7中,L1,L2和L3中的线路大小相同:即64字节.我想这简化了维护包容性和连贯性.

参见第28页:https://www.scss.tcd.ie/Jeremy.Jones/CS3021/5%20caches.pdf


Pau*_*ton 21

在严格包含的高速缓存层次结构中处理高速缓存块大小的最常用技术是对强制包含属性的所有高速缓存级别使用相同大小的高速缓存块.与更高级别的高速缓存使用更大的块相比,这导致更大的标签开销,这不仅使用芯片面积而且还可以增加等待时间,因为更高级别的高速缓存通常使用分阶段访问(其中在访问数据部分之前检查标签).但是,它还在一定程度上简化了设计,并减少了未使用数据部分的浪费容量.在128字节高速缓存块中不占用大部分未使用的64字节块来补偿额外32位标记的区域代价.此外,通过相对简单的预取可以提供利用更广泛的空间局部性的更大的高速缓存块效果,其优点是如果没有加载附近的块,则没有未使用的容量(以节省存储器带宽或减少冲突存储器上的等待时间)读取)并且邻接预取不必限于更大的对齐块.

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

当标签位于处理器芯片上但数据是片外时,扇区缓存块的面积节省尤为显着.显然,如果数据存储占用的面积与处理器芯片的大小相当(这不是不合理的),那么具有64字节块的32位标签将占用处理器区域的大约16(~6%),而128-字节块占用的一半.(IBM的POWER6 +,于2009年推出,可能是使用处理器芯片标签和处理器外数据的最新处理器.如IBM所做的那样,将数据存储在较高密度的嵌入式DRAM和低密度SRAM中的标签中,夸大了这一点.影响.)

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

(严格排除通常使用更高级别的缓存作为受害者缓存,其中来自较低级别缓存的驱逐被插入到更高级别的缓存中.显然,如果块大小不同并且未使用扇区,则驱逐将需要其余的较大的块要从某处读取并且如果存在于较低级别的高速缓存中则无效.[ 理论上,严格的排除可以用于不灵活的高速缓存绕过,其中L1驱逐将绕过L2并且转到L3并且L1/L2高速缓存未命中将仅分配给无论是 L1 L2范,绕过L1某些访问最接近这个正在实施的是我所知道的是安腾的浮点L1的旁路访问;但是,如果我没有记错,在L2具有包容性L1的. )