如何确定缓存一致性中的正确/错误共享丢失?

时间:2019-11-17 14:51:45

标签: multithreading caching concurrency

我对缓存一致性中的真/假共享缺失有疑问。

X1和X2在块B中。块B最初在处理器P1和P2的专用高速缓存中。系统使用MSI协议。给出了以下事件顺序

  1. P2写Xl,
  2. P2读取X2,
  3. Pl读取X2,
  4. P2写Xl,
  5. P1写X2,
  6. P2读取X2。

我发现(3)将是错误的共享缺失,因为(1)即使X2的值没有变化,也会使P1中的B副本无效。并且(6)应该是True分享未命中,因为(5)更新了X2,并且需要将其传达给P2。

如何对其他人进行分类(如“真/假”分享失误)?赞赏对每个分类的很好的解释。

我真的对True分享小姐的概念感到困惑。错误的共享缺失很容易理解。

如果需要更多信息,请发表评论。

1 个答案:

答案 0 :(得分:0)

我对您的术语不熟悉。在错误共享中, false 的含义是不正确,而不是布尔或逻辑谬误。通常,要对其进行分析,请查看每次操作后该块将位于的 state ;以及实现该状态的交易。例如,假设MESI缓存协议:

op#  P1   P2   Trans
 0    I    I   0          -- assume invalid to start
 1    I    M   R+I
 2    I    M   0
 3    S    S   r  
 4    I    M   X
 5    M    I   r+I
 6    S    S   r

事务是R =系统读取,I =无效,r =本地读取。如果您是手臂型,则认为system =外部,local =内部。所以我们看到1 * Read + 3 * cacheread + 2 * Invalidate;或压缩的3个系统,3个本地。

现在,如果我们假设X1和X2位于不同的块中

op#   P1     P2       Trans
 0    I,I    I,I       
 1    I,I    M,I      R+I
 2    I,I    M,S      R
 3    I,S    M,S      r
 4    I,S    M,S      0
 5    I,M    M,I      R+I             
 6    I,S    M,S      r

我们看到3 *读取2 *读取2 *无效;或5个系统,2个本地。 由此看来,将X1,X2放在单独的块中并不会明显改善此工作量。即使Invalidate + Read已折叠,