【问题标题】:Cache Inclusion Property- Multilevel Caching缓存包含属性 - 多级缓存
【发布时间】:2014-02-10 11:06:03
【问题描述】:

我无法理解多级缓存中缓存包含属性的概念。根据我的理解,如果我们有 2 级缓存,L1 和 L2,那么 L1 的内容必须是 L2 的子集。这意味着 L2 必须至少与 L1 一样大。此外,当 L1 中的一个块被修改时,我们必须在 L2 和 Memory 两个地方进行更新。这些概念正确吗?

【问题讨论】:

标签: caching cpu-cache


【解决方案1】:

一般来说,我们可以说添加更多级别的缓存就是在内存层次结构中添加更多级别的访问。它总是在访问时间和延迟之间进行权衡。缓存越大,我们可以存储的越多,但搜索时间越长。正如您所说,L2 缓存必须大于 L1 缓存。否则它的基本目的就失败了。

现在来看看 L1 是否是 L2 的子集。它并不总是必要的。有包含缓存层次结构和独占缓存层次结构。在包容性方面,正如您所说,最后一级是所有其他缓存的超集。

您可以查看此演示文稿以获取更多详细信息 PPT.

现在更新不同的关卡,是一个缓存一致性问题,关卡数量越大,越让人头疼。您可以在这里查看各种协议:cache coherence

【讨论】:

【解决方案2】:

关于包容性 L2 缓存大于 L1 缓存,您是正确的。但是,您关于需要在 L1 中修改的包容性缓存也需要在 L2 和内存中进行修改的说法是不正确的。您描述的系统称为“直写”缓存,其中私有缓存中的所有写入也写入下一级缓存。包含性缓存层次结构并不意味着直写缓存。

大多数具有包容性层次结构的架构都使用“回写”缓存。 “回写”缓存与直写缓存的不同之处在于,它不需要对当前级别的缓存进行修改即可急切地传播到下一级缓存(例如,L1 缓存中的写入不需要立即写 L2)。相反,回写缓存仅更新当前级别的缓存并使数据“脏”(描述一个缓存行,其最新值在当前级别,并且所有上层都有 stale 值)。回写在逐出时将脏缓存行刷新到下一级缓存(当需要在当前缓存中创建空间以服务冲突未命中

这些概念在 Baer 和 Wang 的开创性著作“关于多级缓存层次结构的包含属性”中进行了总结,ISCA 1988 paper_link。该论文在最初令人困惑的陈述中解释了您的困惑:

一个 多级 缓存 等级制度 拥有 这 包容 属性(ML1) 如果 这 内容 的 一种 缓存 在 等级 C_(i+1), 是 一种 超集 的 这 内容 的 全部 它的 孩子们 缓存, C_i, 在 等级 一世。” 这 定义 暗示 那 这 直写 政策 必须 是 用过的 为了 降低 等级 缓存。 作为 我们 将要 认为 回写 缓存 在 这 纸, 这 ML1 是 实际上 一种 “空间” MLI, IE。, 空间 是 假如 为了 包容 但 一种 回写 政策 是 实施的。

【讨论】:

  • "相反,直写式缓存仅更新当前级别的缓存并使数据“脏”。这不应该是回写式缓存吗?
  • +1,我花了很长时间才意识到英特尔的共享包含 L3 缓存(在 Nehalem 通过 Skylake-client 中)仅包含标记包含在私有缓存中独占或修改的行个别核心。所以根据那篇论文的术语,它是一个“空间 MLI”缓存。
猜你喜欢
  • 2012-04-29
  • 1970-01-01
  • 2011-03-27
  • 2015-07-09
  • 1970-01-01
  • 2018-04-04
  • 2013-08-30
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多