Write Allocate cache policy 为什么要从主存取数据

Why data is fetched from main memory in Write Allocate cache policy

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

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

在命中 L1d 缓存的商店中,您不需要获取或 RFO 任何东西,因为该行已经是专有的。

通常你只存储整行的一部分,因此你需要整行的副本以使其处于修改状态。你需要做一个如果您还没有行的有效共享副本,请阅读所有权 (RFO)。 (您可以将其提升为独占,然后通过使其他副本无效来进行修改。MESI)。

全行存储(如 x86 AVX-512 vmovdqa [rdi], zmm0 64 字节存储)可以直接失效而不是读取所有权,只需等待确认没有其他内核具有有效副本线。 IDK 如果这实际上发生在当前 x86 微体系结构中的 AVX-512 存储上。

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

另见