1

我有一个关于 MESI 协议的问题。

(1)考虑以下代码片段,它运行在实现 MESI 缓存一致性协议的单处理器系统上:

I1: 加载 $s1, [A] I2: 加载 $s2, [B] I3: 添加 $s1, $s2, $s3 I4: 存储 $s3, [C] I5: sub $s3, 1, $s4 I6:商店 $s3, [A]

假设直写缓存策略。如果内存块 A、B 和 C 被加载(如果需要)到单个处理器上的两个不同的缓存块(最初为空),请完成下表以识别包含 A、B、C 的块的缓存状态,每个之后指令执行。

我对此的回答是:

Step/State                A                   B               C
I1                        E                   I               I
I2                        E                   E               I
I3                        E                   E               I
I4                        I                   I               E
I5                        I                   I               E
I6                        E                   I               I

(2) 在下面的 RTL

I1: R1 <-[6] 
I2: R2 <-[4] 
I3: R3 <- R1 + R2 
I4: [6]<- R3 
I5: R4 <- R4 - 1 
I6: [4]<- R4 

假设直写缓存策略。如果内存块 4 和 6 被加载到单个处理器上的两个不同的缓存块(最初为空)上

我的回答是

Step/state            Block 4                Block 6
Initial                 I                      I
I1                      I                      E
I2                      E                      E
I3                      E                      E
I4                      I                      E(write miss, AOW)
I5                      I                      E
I6                      E(write miss, AOW)     I

请问我的回答正确吗?非常感谢您提前。

4

1 回答 1

0

第一个问题的答案取决于您的写入策略以及您的层次结构中是否有多个缓存级别。您使用的是 write-allocate 还是 No-write-allocate?假设您拥有可回写的 L2 是否公平?

如果您假设 NO-write-allocate,则存储(I4)将写入缓存并且根本不请求该行,因此它将保持无效。

如果您假设写入分配策略,那么高速缓存行 C 将在 M 状态下被请求(至少在高速缓存级别之一中,并且肯定在 LLC 中)。因此,这里的答案将取决于您拥有的缓存数量以及写入策略。

但是 I4 不应该使 A 或 B 无效,因此它们都处于独占模式。它们无效的唯一方法是另一个处理器要写入它们或者您有冲突。我不清楚您的内存位置 A、B 和 C 是如何映射到缓存行的。如果它们是一对一的并且缓存中没有冲突,那么 A 和 B 将保持独占模式,如果存在冲突则需要根据替换策略来决定。

第二个问题的答案还取决于缓存的数量以及您的 LLC 是否是回写的。当 I4 写入块 6 时,它已经在缓存中,这意味着它会同时修改这个缓存和低级缓存,这将被标记为 M(假设低级缓存是回写的)。同时,Block 4 没有失效。

当 I6 写入块 4 时会发生完全相同的事情。该块将被写入此缓存以及较低级别的缓存中。低级缓存将被标记为 M(同样,假设低级缓存是回写的)

如果您澄清所有这些假设,我可以为您绘制正确的(在我看来)图表。

希望这可以帮助!

于 2014-07-25T16:52:08.767 回答