我有个关于MESI协议的问题。
(1)考虑在实现MESI缓存一致性协议的单处理器系统上运行的以下代码片段:
I1: load $s1,A I2: load $s2,B I3: add $s1,$s2,$s3 I4: store $s3,C I5: Sub$s3,1,$s4 I6: store $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我的答案正确吗?先谢谢你。
发布于 2014-07-25 16:52:08
第一个问题的答案取决于您的写策略,以及您的层次结构中是否有多个缓存级别。您是使用写分配还是不写分配?而且,假设您拥有的是L2,这是公平的吗?
如果假设没有写分配,那么存储(I4)将在缓存周围写入,而根本不请求行,因此它仍然无效。
如果您假设写分配策略,那么缓存行C将在M状态下被请求(至少在一个缓存级别上,并且肯定在LLC中)。因此,这里的答案将取决于缓存的数量以及写策略。
但I4不应使A或B失效,因此它们都处于独占模式。唯一使它们失效的方法是,如果另一个处理器给它们写信,或者您有冲突。我不清楚您的内存位置A、B和C是如何映射到缓存行的。如果它们是一对一且缓存中没有冲突,则A和B将保持独占模式,如果存在冲突,则需要根据替换策略来决定。
第二个问题的答案也取决于缓存的数量和你的LLC是否是回写的。当I4写入块6时,它已经在缓存中了,这意味着它将同时修改这个缓存和较低级别的缓存,后者将被标记为M(假设较低级别的缓存是写回的)。同时,第4块没有失效。
当I6写入块4时,同样的情况也会发生。该块将被写入此缓存中,也将写入较低级别的缓存中。较低级别的缓存将标记为M(同样,假设较低级别的缓存是写回的)。
如果你澄清所有这些假设,我可以画出正确的(在我看来)的图表。
希望这能有所帮助!
https://stackoverflow.com/questions/24811880
复制相似问题