【问题标题】:How to compute cache bit widths for tags, indices and offsets in a set-associative cache and TLB如何计算集合关联缓存和 TLB 中标签、索引和偏移量的缓存位宽
【发布时间】:2017-12-11 06:54:11
【问题描述】:

以下是问题:

我们有 64 位虚拟和物理内存系统 48位地址。 L1 TLB 与 64 个条目完全关联。 虚拟内存中的页面大小为 16KB。 L1 缓存为 32KB 和 2-way set associative,L2 缓存为 2MB 和 4-way set associative。堵塞 L1 和 L2 缓存的大小均为 64B。 L1 缓存实际上正在使用 索引物理标记 (VIPT) 方案。

我们需要计算标签、索引和偏移量。这是我目前制定的解决方案:

  • 页面偏移 = 日志基数 2(页面大小)=14 位
  • 块偏移=日志基数 2(块大小)= 6 位
  • 虚拟页码=虚拟地址-pageoffset=64-14=50位
  • L1 缓存索引 = 页偏移量 - 块偏移量 = 8 位
  • L1 标签=物理地址-L1 索引块偏移= 50 位
  • TLB index= log base 2 (64/64)=0 bits {因为它是完全关联的,整个缓存可以被认为是一个集合。}
  • TLBtag= 虚拟页码 - 索引=50 位
  • L2 缓存索引 = 日志基数 2(缓存大小/(块大小 * 路数))13 位
  • L2 标签= 21 位

供参考:

这是我计算出来的解,如有错误请指正。 在此先感谢:)

【问题讨论】:

  • 页偏移量是地址的低14位:16kiB = 2^14字节。
  • 你应该留下如何你计算出每个缓存参数的值;这样一来,人们就可以更轻松地了解您是否正确,而无需真正在他们的脑海中完成所有工作。
  • @PeterCordes 刚刚添加了完整的计算。希望这有助于更好地理解它:)

标签: computer-science cpu-architecture virtual-memory cpu-cache


【解决方案1】:

看起来不错。

你真的应该像计算 L2 一样计算 L1D 索引位:log2(32KiB / (64B * 2)) = log2(256) = 8 位。

将 L1 索引位计算为 page offset - block offset 是可能的,因为您的图表显示您的缓存具有所有索引位都是页面偏移位的理想属性。 (所以对于别名行为,它就像一个 PIPT 缓存:同音词和同义词是不可能的。 因此,您可以获得 VIPT 速度,而没有虚拟缓存的任何别名缺点。)

所以我想真正计算两种方式并检查是一个很好的健全性检查。即检查它是否与图表匹配,或者图表是否与其他参数匹配。

也不需要 L1D 索引+偏移位“用完”所有页面偏移位:例如增加 L1D 关联性将留下 1 个或多个页面偏移位作为标记的一部分。 (这很好,并且不会引入混叠问题,它只是意味着您的 L1D 没有给定的关联性和页面大小可能的那么大。)

但是,以这种方式构建缓存很常见,尤其是对于较小的页面大小。例如,x86 有 4k 页,而 Intel CPU 使用 32kiB / 8-way L1D 已有十多年了。 (32k / 8 = 4k)。使其更大(64kiB)还需要使其具有 16 路关联,因为更改页面大小不是一种选择。对于具有并行标签+数据获取的低延迟高吞吐量缓存来说,这将开始变得过于昂贵。像 Pentium III 这样的早期 CPU 有 16kiB / 4 路,他们能够将其扩展到 32kiB / 8 路,但我认为我们不应该期待更大的 L1D,除非发生根本性的变化。但是对于您假设的具有 16kiB 页面的 CPU 架构,具有更多关联性的小型+快速 L1D 肯定是合理的。 (您的图表非常清楚,索引一直到页面拆分,但其他设计也可以在不放弃 VIPT 优势的情况下进行。)

另请参阅Why is the size of L1 cache smaller than that of the L2 cache in most of the processors?,了解有关“VIPT hack”的更多信息以及为什么在实际设计中需要多级缓存来获得低延迟和大容量的组合。 (请注意,当前的 Intel L1D 缓存是流水线和多端口的(每个时钟 2 次读取和 1 次写入),访问宽度可达 32 字节,甚至 AVX512 的行的所有 64 字节。How can cache be that fast?。所以制作 L1D更大和更高的关联性会消耗大量的能量。)

【讨论】:

  • 更新:Ice Lake 通过将 L1d 设置为 12 路组关联,确实将 L1d 增加到 48kiB。 (How does the indexing of the Ice Lake's 48KiB L1 data cache work?) 关联性不必是 2 的幂,这与集合数或行大小不同(否则您必须实际划分地址,而不是只取位范围)。此外,显然有一些 CPU 架构设计技巧可以用于其他方式,但不会使其更具关联性。
猜你喜欢
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 2014-10-22
相关资源
最近更新 更多