gpt4 book ai didi

concurrency - 缓存一致性文献一般只指存储缓冲区而不是读取缓冲区。然而,不知何故,两者都需要?

转载 作者:行者123 更新时间:2023-12-04 02:38:22 27 4
gpt4 key购买 nike

在阅读一致性模型(即 x86 TSO)时,作者通常会求助于有一堆 CPU、它们关联的存储缓冲区和它们的私有(private)缓存的模型。

如果我的理解是正确的,存储缓冲区可以被描述为 CPU 可以将它们想要提交到内存的任何存储指令的队列。顾名思义,它们是 store缓冲区。

但是当我阅读这些论文时,他们倾向于谈论加载和存储的交互,诸如“稍后的加载可以通过更早的存储”之类的语句有点令人困惑,因为他们似乎在谈论存储缓冲区将有加载和存储,当它没有时——对吗?

因此,还必须有一个他们没有(至少明确地)谈论的负载存储。另外,这两者必须以某种方式同步,所以两者都知道什么时候可以从内存中加载并提交到内存中——或者我错过了什么?

任何人都可以对此有所了解吗?

编辑:

让我们看一下“内存一致性和缓存一致性入门”中的一段:

To understand the implementation of atomic RMWs in TSO, we consider the RMW as a load immediately followed by a store. The load part of the RMW cannot pass earlier loads due to TSO’s ordering rules. It might at first appear that the load part of the RMW could pass earlier stores in the write buffer, but this is not legal. If the load part of the RMW passes an earlier store, then the store part of the RMW would also have to pass the earlier store because the RMW is an atomic pair. But because stores are not allowed to pass each other in TSO, the load part of the RMW cannot pass an earlier store either



进一步来说,

The load part of the RMW cannot pass earlier loads due to TSO’s ordering rules. It might at first appear that the load part of the RMW could pass earlier stores in the write buffer



所以他们指的是在写缓冲区中相互交叉的加载/存储(我认为这与存储缓冲区相同?)

谢谢

最佳答案

是的,写缓冲区=存储缓冲区。

他们在谈论是否将原子 RMW 拆分为单独的加载和存储,并且存储缓冲区延迟了另一个存储(到单独的地址),因此它在加载之后但仍然在存储之前。

显然,这会使它成为非原子的,并且违反了所有 x86 原子 RMW 操作也是完全障碍的要求。 (lock 前缀也暗示了这一点。)

通常,读者很难检测到这一点,但如果“单独地址”与原子 RMW 连续,那么例如一个 dword 存储 + 一个 dword RMW 可以被另一个线程作为一个原子操作执行 64 位 qword 加载来观察。

回复:标题问题:

加载缓冲区不会导致重新排序。他们等待尚未到达的数据;负载在读取数据时完成“执行”。

存储缓冲区根本不同;他们在数据变得全局可见之前将数据保存一段时间。

x86 的 TSO 内存模型可以描述为顺序一致性 + 存储缓冲区(带有存储转发)。另见 x86 mfence and C++ memory barrier并对该答案进行评论以进行更多讨论,即仅允许 StoreLoad 重新排序对于线程重新加载它刚刚存储的数据的情况是不够的,特别是如果加载与最近的存储部分重叠,因此硬件会合并来自存储的数据使用来自 L1d 的数据的缓冲区,以在存储全局可见之前完成加载。

另请注意,x86 CPU 会推测性地重新排序负载(至少 Intel 会这样做),但消除错误推测以保留没有 LoadLoad 或 LoadStore 重新排序的 TSO 内存模型。因此,CPU 必须跟踪负载与存储顺序。英特尔将组合存储+加载缓冲区跟踪结构称为“内存顺序缓冲区”(MOB)。 Size of store buffers on Intel hardware? What exactly is a store buffer?更多。

关于concurrency - 缓存一致性文献一般只指存储缓冲区而不是读取缓冲区。然而,不知何故,两者都需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com