问题标签 [mesi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
98 浏览

concurrency - MESI 协议 - 在原子操作期间保持高速缓存行处于独占模式的原因

我正在阅读一些关于缓存一致性的 MESI 协议。我已经读过 x86-64 中的原子操作(例如 XCHG)以独占模式获取缓存行。

但是根据协议,如果另一个内核读取或写入该缓存行中的内存位置,则该缓存行可以转换为共享或无效状态。那么在核心执行原子操作时会发生这种情况吗?以及如何预防?

0 投票
1 回答
68 浏览

multithreading - 为什么缓存一致性在多处理器系统中很重要?

多处理器系统中内置了某种缓存一致性协议,例如 MSI、MESI 等。缓存一致性很重要的唯一情况是当在两个不同处理器中执行的指令尝试写入/读取共享数据时。为了使共享数据实际上有效,程序员无论如何都必须引入内存屏障。如果没有内存屏障,那么无论底层处理器是否实现缓存一致性,共享数据都将是“错误的”。那么为什么需要硬件级别的缓存一致性机制呢?

0 投票
0 回答
78 浏览

caching - 缓存一致性状态机

假设我们有一台多核机器。核心 1 尝试写入变量 X,它的 L1d 缓存中没有该变量缓存行,因此它广播了一个 RFO 。同时,它将存储写入核心 1 中的存储缓冲区,因为它没有从每个核心获得对包含 X 的缓存行的独占所有权的确认。

现在,Core 1 获得了对 X 所在的缓存行所有权的请求。

(想象一下,现在核心 2 正在尝试修改变量 X - 也许这是线程正在执行的共享计数器x+=local_count

核心会确认这个请求并将其存储在失效队列中,还是核心不会响应它,因为它仍处于阶段转换到独占模式的中间?我觉得解决这两种情况都可能涉及一些开销和簿记,除非我遗漏了一些非常基本的东西。

0 投票
0 回答
43 浏览

caching - 从时序的角度来看缓存一致性系统

在阅读有关缓存一致性系统(例如 MESI)的信息时,我对所涉及的时间并不清楚。

考虑 Core1 想要写入其本地缓存上状态为 MESI S 的缓存行的情况。本地缓存控制器必须启动 RFO 以使缓存一致性域中所有其他缓存上的该行无效。

我相信所有缓存事务实际上都基于时钟间隔,因此在 RFO 发生的时钟间隔内,其他核心(例如 Cores2)不允许从其本地缓存中读取该缓存行(即使在 RFO 发生之前线在本地处于 S MESI 状态)。

您能从时钟时序的角度帮助我理解事物的工作原理吗?

0 投票
0 回答
36 浏览

x86-64 - cpu存储缓冲区导致数据不一致的问题如何解决?

假设在 x86-64 架构中,有 2 个核心,每个核心都有一个线程在做这样的事情:比较并交换一个共享值(测试共享值,如果它是 0,则更改为 1),然后做其他事情,之后,再次将值设置为 0(在循环中),就像一个简单的自旋锁。我有一个问题,如果core-1将值设置为1,core-2等待忙(测试值),然后core-1将值设置为0,cpu可能会在时间轴上做这样的事情(当core-1 将 val 设置为 0):

所以如果在 0.5 时间,core-1 再次读取了这个值,所以它可以得到更新的数据,但是 core 2 仍然得到了脏数据,这是我的猜测,那么它会不会像这样发生呢?如果“是”,如何解决问题?我认为内存屏障或 LOCK 总线不会有任何帮助,此外,c++11 std::atomic 值是否有这样的问题?

0 投票
0 回答
39 浏览

caching - 缓存一致性 - 不确定这是如何工作的

鉴于这个前奏:

考虑一个使用回写和写分配方案的具有 2 个内核 P1 和 P2 的系统。

地址 A1 和 A2 映射到同一个高速缓存块,但 A1 不等于 A2。初始缓存无效。在此处使用 MESI 协议。

采取以下步骤:

  1. P1 将值 10 写入 A1
  2. P1 读取 A1 处的值
  3. P2 读取 A1 处的值
  4. P2 将值 20 写入 A1
  5. P2 将值 40 写入 A2
  6. P1 读取 A1 处的值

我想知道,在第 1 步中,为什么 P1 写入 A1 的动作被认为是“排他性的”?考虑到我们正在写信给地址,我会认为它会被“修改”?

此示例取自此来源http://people.eecs.berkeley.edu/~pattrsn/252F96/Lecture18.pdf

这是结束状态表:缓存表

有人可以解释为什么第 1 步和第 4 步被认为是“专有的”而不是修改吗?谢谢!