【问题标题】:Memory models-/Cache coherence protocols: How TSO goes together with MESIF内存模型-/缓存一致性协议:TSO 如何与 MESIF 结合使用
【发布时间】:2020-04-08 08:30:28
【问题描述】:

刚刚完成了我系统的编程讲座材料,我偶然发现了内存模型和缓存一致性协议的关键概念。尽管它们作为独立的概念是有意义的,但它们如何结合在一起并不十分清楚。具体来说,在查看 x86 时,我正在使用执行 TSO 内存模型的 ISA,以及使用 MESIF 缓存一致性协议的 CPU(在 Intel 的情况下)。

一开始,教授引入了缓存一致性协议,以确保对于芯片中的任何内核,它们似乎都访问一个大的、单片的内存块。然后,在完成缓存一致性之后,他继续研究内存模型,特别是 TSO(我们已经在并行编程类中介绍了线性化/顺序一致性)。以下直接引用x86内存模型的讲座材料:

  • 64 位 x86 处理器的标准
    • 有时称为总商店订购 (TSO)
    • 早期的 32 位 x86 实现的 PRAM - 更弱!
  • 写到读放宽:以后的读可以绕过以前的写
    • 所有处理器都按发出顺序查看来自一个处理器的写入。
    • 处理器可以看到来自不同处理器的不同写入交错。

似乎我们通过在缓存层次结构中引入(又一个)层,即(有序)存储缓冲区,“解决了”缓慢的顺序一致性问题。 对我来说,TSO 似乎与缓存一致性原则正交。我们非常努力地使我们的缓存匹配,只是在两者之间添加了另一个不受缓存一致性覆盖的层。

问题:

  1. 为什么缓存一致性协议没有覆盖存储缓冲区?是否假设从存储缓冲区回写到 L1 的速度如此之快,以至于在大多数情况下中间回写导致的不一致不会成为问题? (即我认为存储缓冲区 -> L1 传输只需要几个周期,所以一旦 L1 接收到数据,它就会通过总线发送一个事务,告诉其他核心使其副本无效)
  2. 应该如何看待缓存一致性和内存模型这两个概念?我的理解是,内存模型是我们想要的理论概念,而缓存一致性是实现所述模型的实际实现的一部分。

非常感谢您的澄清!

最好, 费利克斯

【问题讨论】:

    标签: caching architecture system memory-model


    【解决方案1】:

    顺序一致性模型是共享内存并行编程最常用的内存模型。包含多个任务或线程的并行程序,顺序一致性需要以下两个条件。

    1. 程序顺序执行:每个任务中的所有内存操作似乎都按照该任务的程序顺序执行。
    2. 内存访问原子性:内存操作(在并行程序的所有任务中)似乎一次执行一个。

    每个程序员都假设这些条件来推理他们的并行程序。 不幸的是,顺序一致性是一个没有想象的那么有用的模型。主要原因是这两个属性的实现成本。执行这些 属性禁止许多基本的编译器和硬件优化[1]。 提出了其他弱/松弛内存模型来放松这些属性并允许编译器和硬件优化。这些弱记忆模型交易 性能的可编程性。

    为什么缓存一致性协议没有覆盖存储缓冲区?

    出于性能原因,这是 TSO 的设计选择。为来自存储缓冲区的负载提供服务或在其先前的存储(不同地址的)仍在存储缓冲区中时为负载提供服务,可减少存储延迟。为了保持存储缓冲区的一致性,加载必须等到所有其他处理器都确认接收到存储生成的无效。而且,大多数时候,其他缓存中可能没有存储地址的任何副本(该变量是任务本地的),然后等待确认是浪费时间。如果其他任务共享此变量,则可以使用原子指令或栅栏指令显式强制执行等待确认。

    我应该如何看待缓存一致性和内存模型这两个概念?

    缓存一致性协议涉及将存储序列化到相同的内存位置,并确保加载将最近存储的值返回到相同的内存位置。只有当同一内存位置存在缓存或多个副本时才需要缓存一致性协议,并且它的工作是保持所有副本的一致性。

    内存一致性模型关注的是(同一任务的)加载和存储到不同内存位置的相对顺序。任何涉及执行共享内存并行程序(多个任务或线程通过共享内存进行通信)的系统都必须定义其内存一致性模型。

    从广义上讲,缓存一致性协议实现了内存一致性模型的一部分。更准确地说,它是核心流水线和缓存一致性协议(以及内存指令遍历的所有其他组件)的组合,必须遵守内存模型规范。 [1]:Shared memory consistency models: a tutorial

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多