Caching 缓存包含属性-多级缓存

Caching 缓存包含属性-多级缓存,caching,cpu-cache,Caching,Cpu Cache,我无法理解多级缓存中缓存包含属性的概念。根据我的理解,如果我们有两级缓存,L1和L2,那么L1的内容必须是L2的子集。这意味着L2必须至少与L1一样大。此外,当L1中的块被修改时,我们必须在L2和内存两个位置进行更新。这些概念正确吗?一般来说,我们可以说添加更多级别的缓存就是在内存层次结构中添加更多级别的访问。它总是在访问时间和延迟之间进行权衡。缓存越大,我们可以存储的数据就越多,但搜索时间就越长。正如您所说,二级缓存必须大于一级缓存。否则,它就无法达到同样的基本目的 现在来看看L1是否是L2的

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

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

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

有关更多详细信息,请查看此演示文稿


现在更新不同的级别是一个缓存一致性问题&级别的数量越多,问题就越大。您可以在此处检查各种协议:

您正确地认为包容性二级缓存大于一级缓存。但是,您关于包容性缓存需要在一级中进行修改,同时也需要在二级和内存中进行修改的说法是不正确的。您描述的系统称为“直写”缓存,其中私有缓存中的所有写入操作也会写入下一级缓存。Inclusive cache Hierarchies并不意味着直写缓存

大多数具有包容性继承人架构的架构都使用“写回”缓存。“回写”缓存与直写缓存的不同之处在于,它不需要对当前缓存级别进行修改就可以急切地将其分配到下一个缓存级别(例如,一级缓存中的写入不必立即写入二级缓存)。相反,回写缓存只更新当前级别的缓存,并使数据“脏”(描述其最新值位于当前级别且所有更高级别都具有过时值的缓存线)。回写会在逐出时将脏缓存线刷新到下一级缓存(当需要在当前缓存中创建空间以服务冲突未命中时)

这些概念在Baer和Wang的开创性工作《关于多级缓存继承人体系结构的包含性》中进行了总结,ISCA 1988。这篇论文解释了你在最初令人困惑的陈述中的困惑:

A 多级 隐藏物 等级制度 有 这个 包含 财产(ML1) 如果 这个 目录 属于 A. 隐藏物 在 水平仪 C_(i+1), 是 A. 超集 属于 这个 目录 属于 全部的 它的 儿童 储藏室, 库伊, 在 水平仪 i、 " 这 定义 暗示 那个 这个 写完 政策 必须 是 使用 对于 降低 水平仪 储藏室。 作为 我们 意志 假定 回信 贮藏 在里面 这 纸张 这个 ML1 是 事实上 A. “空间” 姆利, 即。, 空间 是 假如 对于 包含 但是 A. 回信 政策 是 执行


“相反,直写缓存只更新当前级别的缓存,并使数据“脏”。这不是回写缓存吗?+1,我花了很长时间才发现Intel的共享包容性三级缓存(通过Skylake客户端在Nehalem中)对于在单个核心的专用缓存中被独占或修改的行,只有标记包含。因此,根据该论文的术语,它是一个“space MLI”缓存。这本质上是的副本。虽然该缓存是较新的,但它有更好/正确的答案。ppt无效