gpt4 book ai didi

cpu-architecture - 在 MESI 缓存一致性协议(protocol)中,如果需要从内存中获取数据,缓存行的状态究竟何时发生变化?

转载 作者:行者123 更新时间:2023-12-04 10:59:39 27 4
gpt4 key购买 nike

在 MESI 协议(protocol)中当一个 CPU:

  • 执行读操作
  • 发现缓存行处于无效状态
  • 其他缓存中没有其他非无效副本

它需要从内存中获取数据。这将需要一定数量的周期来执行此操作。那么缓存行的状态是立即从(I)变为(E)还是仅在从内存中获取数据后才发生变化?

最佳答案

我认为缓存通常会等待数据到达当它还不存在时,您实际上无法在缓存中命中同一行的其他请求,只能命中实际存在的其他行(未命中时命中)。因此,该行的状态仍然无效;该标签的数据无效,因此您还不能将其设置为有效状态。

您希望同一行的另一个未命中(未命中下未命中)注意到该行已经有未完成的请求并将其自身附加到该行请求缓冲区。 (例如 Intel x86 LFB = 行填充缓冲区)。由于发现 Invalid 触发器会查看填充缓冲区,而 Exclusive 不会,因此您也需要基于此推理的 Invalid。

例如Skylake 性能计数器事件 mem_load_retired.fb_hit 计数,来自 perf list 输出:

[Retired load instructions which data sources were load missed L1 but hit FB due to preceding miss to the same cache line with data not ready.
Supports address when precise (Precise event)]

在没有内存级并行性的非常老式/简单或玩具 CPU 的缓存中(整个管道或内存访问完全停止执行,直到数据到达),这种区别是没有意义的;当请求的数据在传输中时,不会发生任何其他缓存。

在这样的 CPU 中,它只是一个实现细节。 (除非它仍然应该在负载运行时处理来自其他内核的 MESI 请求,因此标签需要再次反射(reflect)正确的状态,否则在决定如何回复时需要检查额外的东西。)

关于cpu-architecture - 在 MESI 缓存一致性协议(protocol)中,如果需要从内存中获取数据,缓存行的状态究竟何时发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58913560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com