gpt4 book ai didi

multithreading - 当我使用 x86_64 CAS 指令时,仅锁定一个缓存行或完全锁定 L3 缓存?

转载 作者:行者123 更新时间:2023-12-01 22:54:38 24 4
gpt4 key购买 nike

当我使用x86_64 CAS指令LOCK CMPXCHG,即whileatomic(读取值,比较并写回结果)时,此时锁定的内容:

  1. L3 缓存中只有一个缓存行? (此时没有一个核心无法从 L3 中的该缓存行读取/写入)
  2. 或者完全是 L3 缓存?(此时没有一个核心无法读取/写入L3-cache)

x86_64 Intel CPU 使用的是真的吗?

  • 缓存行独占状态的第一种方法 (MOESI/MESIF)
  • 适用于除 Exclusive 之外的任何状态的第二种方法

最佳答案

两者都不准确。第二个类似于总线锁上实际发生的情况,在现代 x86 CPU 中,当常规锁无法工作时,这种情况(希望如此)是罕见的病态情况。它曾经在旧的 486/早期 Pentium 上很常见,但在较新的产品上,常见情况要简单得多 - 您将行锁定在缓存中,但因为您希望尽可能快地执行读取-修改-写入 -在 L3 中这样做也是没有意义的。相反,您将选择最接近操作核心的缓存 - 可能是 L1 或某些等效的内部结构。

即使使用简单的 MESI,您也可以保证原子 RMW 在缓存中安全地完成 - 您首先获得该行的所有权(就像任何正常写入所需的那样),然后您可以在知道时执行原子流确保没有其他核心有这条线。唯一的问题是,理论上窥探可能会出现在中间,因此解决方案通常是简单地阻止该行的窥探,直到 RMW 完成为止。但是,在此期间允许任何其他事件(例如来自同一核心的其他请求或进入的窥探)没有问题。唯一的其他限制是关于内存排序,但这通常在内存单元中处理(其中有仍然是顺序的概念)而不是在缓存中。

另请参阅此答案中的手册部分 - x86 LOCK question on multi-core CPUs

关于multithreading - 当我使用 x86_64 CAS 指令时,仅锁定一个缓存行或完全锁定 L3 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024068/

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