【问题标题】:How to determine true/false sharing misses in cache coherence?如何确定缓存一致性中的真/假共享未命中?
【发布时间】:2019-11-17 14:51:45
【问题描述】:

我有一个关于缓存一致性中 True/False 共享缺失的问题。

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) 使 P1 中的 B 副本无效,即使 X2 的值没有变化。并且 (6) 应该是真正的共享未命中,因为 (5) 更新了 X2,并且需要将其传达给 P2。

如何对他人进行分类(如真/假分享未命中)?对每个分类的一个很好的解释表示赞赏。

我真的对真正的分享小姐概念感到困惑。虚假分享错过很容易理解。

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

【问题讨论】:

    标签: multithreading caching concurrency


    【解决方案1】:

    我不熟悉您的术语。在假分享中,的意思是不正确,而不是布尔或逻辑谬误。通常,要对其进行分析,您会查看每个操作后块将处于的 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=本地读取。如果您是手臂型,请认为系统=外部,本地=内部。所以我们看到 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*Read 2*cread 2*Invalidate;或 5 个系统,2 个本地。 由此看来,将 X1、X2 放在单独的块中似乎不会显着改善这种工作量。即使 Invalidate + Read 被折叠,

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2011-03-05
      • 2010-09-14
      • 2012-06-05
      • 2021-04-06
      • 2020-11-17
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多