我想了解intel Broadwell中MESI的更多细节。
假设一个cpu插槽有6个核心 core 0 到 core 5 ,
他们每个人都有自己的 L1$ 和 L2$ 并共享 L3$ ,
共享内存中有一个var X,x位于cache line
称为 XCacheL ,以下是我的问题的详细信息:
T1:核心 0、核心 4 和核心 5 具有 x = 100 和 XCacheL
是S共享状态,因为 3 个核心具有 XCacheL 的副本。
T2:Core 0需要修改x,因此Core 0广播无效信号,Core 4和Core 5接收信号
,使它们的 XCacheL 副本无效,Core 0 将 x 修改为 200
XCacheL 现在的状态是M修改的 。
T3:核心 4 需要读取 x,但其 XCacheL 副本在 T2 中无效,因此会触发读取未命中,将发生以下情况:
● Processor makes bus request to memory
● Snooping cache puts copy value on the bus
● Memory access is abandoned
● Local processor caches value
● Local copy tagged S
● Source (M) value copied back to memory
● Source value M -> S
所以在T3之后,XCacheL是核心0和核心4状态:S哈雷德 , 和I在 core 5 中已验证,并且
L3$ 和主存具有最新的有效 XCacheL 。
T4:核心5需要读取x,因为它的XCacheL副本是I在 T2 中无效,但此时 RacheL 拥有
L3$ 中的正确副本,核心 5 是否需要像核心 4 那样触发读取未命中?!
我的猜测是:不需要,因为 L3$ 具有有效的 XCacheL,
因此,核心 5 可以到达 L3$,并在核心 5 中获得从 L3$ 到 L1$ 的正确 XCacheL,因此核心 5 不会触发读取未命中。