【问题标题】:Why data is fetched from main memory in Write Allocate cache policy为什么在写入分配缓存策略中从主内存中获取数据
【发布时间】:2021-03-04 15:21:15
【问题描述】:

对于缓存的写入分配策略,当发生写入未命中时,会从主内存中获取数据,然后通过写入命中进行更新。

我的问题是,假设写命中的回写策略,如果 CPU 立即更新数据,为什么要从主内存读取数据?难道我们不能直接写入缓存而不从主存中获取数据吗?

【问题讨论】:

    标签: cpu-architecture cpu-cache


    【解决方案1】:

    在命中 L1d 缓存的商店中,您无需获取或 RFO 任何内容,因为该行已经独占。

    通常您只存储到整行的一部分,因此您需要整行的副本以使其处于修改状态。您需要执行 Read For Ownership (RFO ) 如果您还没有该行的有效共享副本。 (您可以通过使其他副本无效来提升为 Exclusive 然后修改。MESI)。

    全行存储(如 x86 AVX-512 vmovdqa [rdi], zmm0 64 字节存储)可以只是无效而不是读取所有权,并且只需等待确认没有其他内核具有该行的有效副本。 IDK 如果这真的发生在 AVX-512 商店,特别是在当前的 x86 微架构中。

    跳过读取(并且只是使任何其他副本无效)肯定确实在某些情况下在某些 CPU 中发生。例如在微码实现x86所使用的store协议中rep stosrep movs,基本都是memset/memcpy。因此,对于大量数据,它们肯定会存储完整的行,并且避免首先读取的内存流量是值得的。请参阅我在What setup does REP do? 中引用的 Andy Glew 的 cmets - 他在英特尔工作时设计了 P6 (Pentium Pro) 快速字符串微码,并表示其中包含无 RFO 存储协议。

    另见Enhanced REP MOVSB for memcpy

    【讨论】:

      猜你喜欢
      • 2017-01-12
      • 1970-01-01
      • 2018-06-24
      • 2019-09-23
      • 2017-01-03
      • 2020-07-29
      • 2020-04-06
      • 2022-01-15
      相关资源
      最近更新 更多