如果使用具有直写策略的缓存,哪些 MESI 协议状态是相关的?
Which MESI protocol states are relevant if cache with write-through policy is used?
我在阅读有关缓存一致性协议的讲座的幻灯片时遇到了以下问题:
如果使用具有直写策略的缓存,哪些 MESI 状态是相关的?
也给出了答案:I (Invalid) and S (Shared Unmodified).
我知道状态 M(修改后的独占) 不相关,因为具有直写策略的缓存无论如何都会将更改传播到主内存。
状态 E(独家未修改) 不相关,因为它仅在发生替换的独占读取未命中时发出(并与进一步的读取命中保持一致)。
谁能解释给定的答案?
正如您提到的,M 状态显然是无用的,因为您永远不会在缓存中保留修改后的数据。
至于独占状态:请记住,在某种意义上它比共享状态 "stronger",因为在 WB 缓存中,它保证对该行的写入不需要获得所有权并使其他行无效首先复制,然后可以直接写入该行而不必离开本地缓存。换句话说,从E到M的转换很简单,而S到M比较复杂,需要先使所有其他复制无效。
另一方面,在 WT 缓存中,你已经可以保证没有其他人持有该行的修改版本,更重要的是 - 你没有在你的中进行简单转换的好处本地缓存(因为无论如何你都必须在外部写入数据),所以真的不需要独占状态 - 你不会从中获得任何好处。事实上,你实际上可能会因此而失败,因为拥有 E 状态会迫使你向读取同一行的任何其他内核发送监听(E -> S 转换),
当然,在外面写东西时,你仍然需要使所有其他副本无效,但你不需要区分 E 和 S 来告诉你它们是否存在,通常有一个窥探过滤器或一些其他列表告诉您要窥探哪些内核。
我在阅读有关缓存一致性协议的讲座的幻灯片时遇到了以下问题: 如果使用具有直写策略的缓存,哪些 MESI 状态是相关的?
也给出了答案:I (Invalid) and S (Shared Unmodified).
我知道状态 M(修改后的独占) 不相关,因为具有直写策略的缓存无论如何都会将更改传播到主内存。
状态 E(独家未修改) 不相关,因为它仅在发生替换的独占读取未命中时发出(并与进一步的读取命中保持一致)。
谁能解释给定的答案?
正如您提到的,M 状态显然是无用的,因为您永远不会在缓存中保留修改后的数据。
至于独占状态:请记住,在某种意义上它比共享状态 "stronger",因为在 WB 缓存中,它保证对该行的写入不需要获得所有权并使其他行无效首先复制,然后可以直接写入该行而不必离开本地缓存。换句话说,从E到M的转换很简单,而S到M比较复杂,需要先使所有其他复制无效。
另一方面,在 WT 缓存中,你已经可以保证没有其他人持有该行的修改版本,更重要的是 - 你没有在你的中进行简单转换的好处本地缓存(因为无论如何你都必须在外部写入数据),所以真的不需要独占状态 - 你不会从中获得任何好处。事实上,你实际上可能会因此而失败,因为拥有 E 状态会迫使你向读取同一行的任何其他内核发送监听(E -> S 转换),
当然,在外面写东西时,你仍然需要使所有其他副本无效,但你不需要区分 E 和 S 来告诉你它们是否存在,通常有一个窥探过滤器或一些其他列表告诉您要窥探哪些内核。