L1和L2高速caching的行大小

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

所以现在我的问题是如何确定在一级caching中的对应条目在二级caching中的条目。 存储在L2条目中的唯一信息是标签信息。 基于这个标签信息,如果我重新创buildaddr,那么如果L1和L2高速caching的行大小不相同,它可能会跨越L1高速caching中的多行。

体系结构是否真的担心会冲洗这两条线,还是维持相同线宽的L1和L2caching。

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

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

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

caching行大小(通常)是64个字节。

此外,看看这个关于处理器caching的非常有趣的文章: 处理器caching效果库

你会发现以下章节:

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

在严格包含的caching层次结构中处理caching块大小的最常见技术是对所有包含属性的caching级别使用相同大小的caching块。 由于更高级别的caching通常使用分阶段访问(在数据部分被访问之前检查标签),这导致比较高级caching使用更大的块更大的标签开销,这不仅使用了芯片区域,而且也增加了延迟。 但是,它也可以简化devise,并减less未使用部分数据浪费的容量。 它不占用128字节高速caching块中未使用的64字节块的大部分,以补偿额外32位标记的面积损失。 另外,利用较宽空间局部性的更大caching块效应可以通过相对简单的预取来提供,其优点在于,如果附近块未被加载,则没有容量被闲置(为了节省存储器带宽或减less冲突存储器上的延迟读取)并且邻接预取不需要被限制到较大的alignment块。

一种不太常见的技术将高速caching块划分为扇区。 由于扇区大小与低级高速caching的块大小相同,所以避免了由于高级高速caching中的每个扇区具有其自己的有效位而导致的过度失效的问题。 (为每个扇区提供所有的一致性状态元数据而不仅仅是有效性可以避免当块中至less有一个扇区没有脏/修改和一些连贯性开销时过度的回写带宽使用[例如,如果一个扇区处于共享状态而另一个扇区处于共享状态在独占状态下,如果使用监听而不是目录一致性,那么对独占状态的扇区的写入可能不涉及一致性stream量。

当标签位于处理器芯片上但数据在片外时,扇区caching块节省的面积尤其显着。 显然,如果数据存储的面积与处理器芯片的尺寸相当(这不是不合理的),那么具有64字节块的32位标签将占据处理器面积的大约16(〜6%),而128-字节块将花费一半。 (IBM在2009年推出的POWER6 +也许是最新的使用片上处理器芯片标签和处理器外数据的处理器,如同IBM所做的那样,将数据存储在更高密度的embedded式DRAM和低密度SRAM中的标签中,夸大了这一点影响。)

应该注意的是,英特尔使用“caching行”来表示较大的单位,较小的单位和“caching行业”。 (这是我为什么在我的解释中使用“caching块”的一个原因。)使用英特尔的术语,caching行在caching级别上的大小会有所不同,无论级别是严格包含,严格排他还是使用其他一些包容政策。

(严格的排除通常使用较高级别的caching作为受害者caching,其中从较低级别的caching驱逐到更高级别的caching中。显然,如果块大小不同且不使用扇区,则驱逐需要剩余的如果在较低级别的caching中存在较大的块, 并且如果存在于较低级别的caching中则无效。[ 理论上 ,严格排除可以用于不灵活的caching绕过,其中L1逐出将绕过L2并转到L3,并且L1 / L2caching未命中只会是分配给L1 L2,绕过L1进行某些访问,而我所知道的最接近这一点的是Itanium绕过L1进行浮点访问;但是,如果我正确记得,L2包含L1。 )

通常,在一次访问主存储器的64个字节的数据和8个字节的奇偶校验/ ECC(我不记得是哪个)被访问。 在不同的内存级别维护不同的高速caching行大小相当复杂。 您必须注意,caching行的大小将更多地与该架构上的单词alignment大小相关。 基于此,高速caching行大小不可能与内存访问大小不同。 现在,奇偶校验位用于内存控制器 – 所以高速caching行的大小通常是64字节。 除了寄存器之外,处理器真的很less控制。 计算机上的其他一切都是关于让硬件来优化CPU性能。 从这个意义上说,通过在不同级别的内存中使caching行大小不同,导入额外的复杂性是没有任何意义的。