内层缓存是否可以写回外层缓存?
Can an inner level of cache be write back inside an inclusive outer-level cache?
我问过类似的问题:
假设我们有二级缓存。 (L1最接近CPU(内部/下层),L2在外面,最接近主存)L1缓存可以写回吗?
我的尝试)
我认为我们必须只能通过缓存写入,而不能在 L1 中使用回写缓存。如果一个块在 L1 缓存中被替换,那么它必须被写回 L2 和主内存以保持包含。因此它必须被写通而不是写回。
所有这些疑问都来自下面的试题。 :P
Question) For inclusion to hold between two cache levels L1 and L2 in
a multi-level cache hierarchy which of the following are necessary?
I) L1 must be write-through cache
II) L2 must be a write-through cache
III) The associativity of L2 must be greater than that of L1
IV) The L2 cache must be at least as large as the L1 cache
A) IV only
B) I and IV only
C) I, II and IV only
D) I, II, III and IV
根据我的理解,答案应该是选项(B)
现实生活中的反例:Intel i7 系列(自 Nehalem 以来)有一个包含大量共享(内核之间)的 L3。并且所有级别都是回写的(包括每个核心的专用 L2 和 L1d)以减少外部缓存的带宽需求。
Inclusive 仅表示外部缓存标记对于任何内部缓存中处于有效状态的每一行都具有 Invalid 以外的状态。不一定数据也保持同步。 https://en.wikipedia.org/wiki/Cache_inclusion_policy 调用 "value inclusion",是的,它确实需要直写(或只读)内部缓存。那是选项 B,甚至比 "inclusive".
更强大
我对常规包含的理解,特别是在 Intel i7 中,是数据可能会过时,但 标签 始终包含在内。此外,由于这是一个多核 CPU,L3 标签会告诉您 哪个 核心的私有 L2/L1d 缓存拥有处于独占或修改状态的行(如果有)。因此,如果另一个核心想要读取或写入该行,您就知道该与哪个核心交谈。即它作为那些多核 CPUs.
的监听过滤器
相反,如果包含的 L3 缓存中没有标签匹配,则该行肯定不存在于芯片上的任何位置。 (因此不需要将无效消息传递到每个核心。)另请参阅 了解更多详细信息。
要写入一行,内部缓存必须通过外部缓存获取/RFO 它以便它有机会在处理来自 L1d/L2 的 RFO(为所有权而读取)时以这种方式保持包含写入未命中(不处于独占或修改状态)。
显然这是 不 "tag-inclusive";该术语可能具有其他技术含义。我想我看到它被使用并对它的含义做出了错误的(?)假设。 What is tag-only forced cache inclusion called? 表示 "tag-inclusive" 不是标签,也不是数据。
在内部缓存 (L1) 中有一条处于修改状态的行意味着包容性外部缓存将有一个与该行匹配的标记,即使外部缓存中的实际数据是陈旧的。 (我不确定在这种情况下通常使用什么状态缓存;根据@Hadi 在评论中的说法,它不是无效的。我假设它也不是共享的,因为它需要避免使用这个陈旧的数据来满足来自其他核心的读取请求。)
当数据最终确实从 L1 写回时,它只能在外部缓存中处于修改状态,从 L1 中逐出。
你的问题的答案将是1V)L2只需要更大。即选项 A
包含仅表示 L1 中的行需要出现在 L2 中。可以在 L1 中进一步修改该行,L1 中的状态将反映相同。
当其他内核查找 L2 时,它可以窥探 L1 中的线路状态,并在需要时强制执行 WB。
我问过类似的问题:
假设我们有二级缓存。 (L1最接近CPU(内部/下层),L2在外面,最接近主存)L1缓存可以写回吗?
我的尝试)
我认为我们必须只能通过缓存写入,而不能在 L1 中使用回写缓存。如果一个块在 L1 缓存中被替换,那么它必须被写回 L2 和主内存以保持包含。因此它必须被写通而不是写回。
所有这些疑问都来自下面的试题。 :P
Question) For inclusion to hold between two cache levels L1 and L2 in a multi-level cache hierarchy which of the following are necessary?
I) L1 must be write-through cache
II) L2 must be a write-through cache
III) The associativity of L2 must be greater than that of L1
IV) The L2 cache must be at least as large as the L1 cacheA) IV only
B) I and IV only
C) I, II and IV only
D) I, II, III and IV
根据我的理解,答案应该是选项(B)
现实生活中的反例:Intel i7 系列(自 Nehalem 以来)有一个包含大量共享(内核之间)的 L3。并且所有级别都是回写的(包括每个核心的专用 L2 和 L1d)以减少外部缓存的带宽需求。
Inclusive 仅表示外部缓存标记对于任何内部缓存中处于有效状态的每一行都具有 Invalid 以外的状态。不一定数据也保持同步。 https://en.wikipedia.org/wiki/Cache_inclusion_policy 调用 "value inclusion",是的,它确实需要直写(或只读)内部缓存。那是选项 B,甚至比 "inclusive".
更强大我对常规包含的理解,特别是在 Intel i7 中,是数据可能会过时,但 标签 始终包含在内。此外,由于这是一个多核 CPU,L3 标签会告诉您 哪个 核心的私有 L2/L1d 缓存拥有处于独占或修改状态的行(如果有)。因此,如果另一个核心想要读取或写入该行,您就知道该与哪个核心交谈。即它作为那些多核 CPUs.
的监听过滤器相反,如果包含的 L3 缓存中没有标签匹配,则该行肯定不存在于芯片上的任何位置。 (因此不需要将无效消息传递到每个核心。)另请参阅
要写入一行,内部缓存必须通过外部缓存获取/RFO 它以便它有机会在处理来自 L1d/L2 的 RFO(为所有权而读取)时以这种方式保持包含写入未命中(不处于独占或修改状态)。
显然这是 不 "tag-inclusive";该术语可能具有其他技术含义。我想我看到它被使用并对它的含义做出了错误的(?)假设。 What is tag-only forced cache inclusion called? 表示 "tag-inclusive" 不是标签,也不是数据。
在内部缓存 (L1) 中有一条处于修改状态的行意味着包容性外部缓存将有一个与该行匹配的标记,即使外部缓存中的实际数据是陈旧的。 (我不确定在这种情况下通常使用什么状态缓存;根据@Hadi 在评论中的说法,它不是无效的。我假设它也不是共享的,因为它需要避免使用这个陈旧的数据来满足来自其他核心的读取请求。)
当数据最终确实从 L1 写回时,它只能在外部缓存中处于修改状态,从 L1 中逐出。
你的问题的答案将是1V)L2只需要更大。即选项 A
包含仅表示 L1 中的行需要出现在 L2 中。可以在 L1 中进一步修改该行,L1 中的状态将反映相同。 当其他内核查找 L2 时,它可以窥探 L1 中的线路状态,并在需要时强制执行 WB。