【发布时间】:2020-04-08 08:30:28
【问题描述】:
刚刚完成了我系统的编程讲座材料,我偶然发现了内存模型和缓存一致性协议的关键概念。尽管它们作为独立的概念是有意义的,但它们如何结合在一起并不十分清楚。具体来说,在查看 x86 时,我正在使用执行 TSO 内存模型的 ISA,以及使用 MESIF 缓存一致性协议的 CPU(在 Intel 的情况下)。
一开始,教授引入了缓存一致性协议,以确保对于芯片中的任何内核,它们似乎都访问一个大的、单片的内存块。然后,在完成缓存一致性之后,他继续研究内存模型,特别是 TSO(我们已经在并行编程类中介绍了线性化/顺序一致性)。以下直接引用x86内存模型的讲座材料:
- 64 位 x86 处理器的标准
- 有时称为总商店订购 (TSO)
- 早期的 32 位 x86 实现的 PRAM - 更弱!
- 写到读放宽:以后的读可以绕过以前的写
- 所有处理器都按发出顺序查看来自一个处理器的写入。
- 处理器可以看到来自不同处理器的不同写入交错。
似乎我们通过在缓存层次结构中引入(又一个)层,即(有序)存储缓冲区,“解决了”缓慢的顺序一致性问题。 对我来说,TSO 似乎与缓存一致性原则正交。我们非常努力地使我们的缓存匹配,只是在两者之间添加了另一个不受缓存一致性覆盖的层。
问题:
- 为什么缓存一致性协议没有覆盖存储缓冲区?是否假设从存储缓冲区回写到 L1 的速度如此之快,以至于在大多数情况下中间回写导致的不一致不会成为问题? (即我认为存储缓冲区 -> L1 传输只需要几个周期,所以一旦 L1 接收到数据,它就会通过总线发送一个事务,告诉其他核心使其副本无效)
- 应该如何看待缓存一致性和内存模型这两个概念?我的理解是,内存模型是我们想要的理论概念,而缓存一致性是实现所述模型的实际实现的一部分。
非常感谢您的澄清!
最好, 费利克斯
【问题讨论】:
标签: caching architecture system memory-model