【问题标题】:MESI protocol. Write with cache miss. Why needs main memory value fetch?MESI 协议。写入缓存未命中。为什么需要获取主存值?
【发布时间】:2017-01-03 23:44:55
【问题描述】:

我想知道 MESI 协议使用 写入未命中分配策略 的写入协议实现。假设我们有写请求并且没有其他缓存行副本的缓存未命中。这个diagram 表示下一步是从主存(或二级缓存)中获取值,将其存储并将缓存行标记为 M(已修改)。我想然后新值存储在缓存块中。问题是:为什么我们需要从主存中获取数据的步骤? 为什么我们不能简单地将新值写入 I(无效)状态的第一个找到的缓存行/替换最旧的缓存行并将其标记为 M(修改)?

感谢您的帮助!

【问题讨论】:

    标签: caching cpu-cache mesi


    【解决方案1】:

    假设您有 64 字节的高速缓存行,并且您写入了一个字节。不能将“1/64ths of a cache line”放入缓存中,那么剩下的 63 个字节从何而来?它们必须来自主内存(或下一级缓存)。

    【讨论】:

    • 好的,我明白了。谢谢你。还有一个问题。相同的情况,但其他(非本地)缓存具有请求的缓存行的副本。例如,在 M(修改的)缓存行复制的情况下,步骤是:写回主存,无效,从主存获取数据到本地缓存行,更新本地缓存行。写入主内存然后读取本地缓存有什么意义?为什么不将缓存线的副本放在总线上并将其保存在本地缓存中。与现有副本的读取缺失中使用的算法相同。
    • 实际上,可以为 64 字节的高速缓存行提供 64 个有效位,并且如果整行在高速缓存中没有被覆盖,则只需要在回写时读取内存。 (这是一个很大的开销。)一个因素是空间局部性的假设,即商店附近的物品将在不久的将来被读取。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多