问题标签 [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 投票
1 回答
1109 浏览

multicore - MESI 缓存一致性协议在哪里以及如何实现?

我知道 MESI 协议用于在多处理器系统中实现缓存一致性。但我不知道它是如何实现的。非常感谢您对此的任何帮助。

0 投票
5 回答
1191 浏览

multithreading - MESI 缓存协议

我正在阅读MESI snooping cache coherence protocol,我猜这是现代多核 x86 处理器中使用的协议(如果我错了,请纠正我)。现在那篇文章在一个地方说了这一点。

保持处于修改状态的行的高速缓存必须侦听(拦截)相应主内存位置的所有尝试读取(来自系统中的所有其他高速缓存)并插入它所拥有的数据。这通常通过强制读取后退(即稍后重试),然后将数据写入主存储器并将高速缓存行更改为共享状态来完成。

现在我不明白的是为什么需要将数据写入主存储器。缓存一致性不能在不进入内存的情况下保持缓存中的内容同步(除非缓存行确实被驱逐了)?我的意思是,如果一个内核不断读取,另一个内核不断写入,为什么不将数据保留在缓存中,并不断更新缓存中的数据。为什么会产生回写到主存的性能?

换句话说,读取数据的核心不能直接从写入核心的缓存中读取并相应地修改他们的缓存吗?

0 投票
1 回答
1370 浏览

caching - MESI 协议理解状态转换

在下面显示的伊利诺伊 MESI 协议的状态转换图中,为什么在观察 BusRdX 信号时从状态 S 转换到状态 I 时会出现 Flush 信号,而当从状态 E 转换到状态 I 时会出现 Flush 信号。这些状态下处理器的缓存内容会不会与主内存中的内容相同?如果是这样,这些缓存将状态 I 刷新其数据的意义何在?另外,Flush和Flush'之间到底有什么区别。只是在Flush'中,数据交换由一个缓存传输吗?

过渡图:

在此处输入图像描述

0 投票
1 回答
164 浏览

caching - mesi 缓存一致性协议是否适用于具有 2 个逻辑内核的单处理器?

我正在使用 Intel Atom 处理器(正版 Intel (R) CPU)。我已经完成了 cat/proc/cpuinfo。它显示了两个处理器,但对于物理和核心 ID,它显示为 0。我做了 grep "^core id" /proc/cpuinfo | 排序-u | wc -l 查找没有 cpu 核心。它显示 1。这是什么意思?它只有一个物理核心和两个逻辑核心吗?mesi 缓存一致性协议是否适用于这种情况?

0 投票
1 回答
338 浏览

caching - 缓存一致性中的 MESI 协议

我有一个关于 MESI 协议的问题。

(1)考虑以下代码片段,它运行在实现 MESI 缓存一致性协议的单处理器系统上:

I1: 加载 $s1, [A] I2: 加载 $s2, [B] I3: 添加 $s1, $s2, $s3 I4: 存储 $s3, [C] I5: sub $s3, 1, $s4 I6:商店 $s3, [A]

假设直写缓存策略。如果内存块 A、B 和 C 被加载(如果需要)到单个处理器上的两个不同的缓存块(最初为空),请完成下表以识别包含 A、B、C 的块的缓存状态,每个之后指令执行。

我对此的回答是:

(2) 在下面的 RTL

假设直写缓存策略。如果内存块 4 和 6 被加载到单个处理器上的两个不同的缓存块(最初为空)上

我的回答是

请问我的回答正确吗?非常感谢您提前。

0 投票
1 回答
163 浏览

multithreading - MESI 协议和 LRU 策略

我已经阅读了很多关于 MESI 协议及其用于保持缓存一致的应用的文献,但有两个细节我不太清楚:

当使用 MESI 协议保持多个缓存同步并为缓存行应用 LRU 策略时,缓存中的行是仅通过读访问还是通过写访问保存的?

另外,我看对了吗:缓存 A 中共享行上的缓存命中不会按照缓存 B 的 LRU 顺序显示该行?

0 投票
2 回答
617 浏览

multithreading - MESI 协议的性能成本?

MESI(修改、独占、共享、无效)协议用于 CPU 缓存进行通信并确保它们都使用缓存行的最新值。当一个 CPU 修改高速缓存行值时,订阅此高速缓存行的所有其他 CPU 都会在高速缓存行发生更改时保持警报。

但是,在我读过的所有关于 MESI 的文献中,我没有看到在协议通信时是否有任何性能成本?这个成本是否只是 x86LOCK前缀成本的一部分?我相当确定即使 x86LOCK前缀不是,也可以使用 MESI?

注意英特尔实际上使用 MESIF 协议——其中 F 是附加的“转发”状态。

0 投票
1 回答
151 浏览

cpu - 对 MESI 引发的消息写入缓冲区反应

假设我们有以下情况:2 个 CPU 和写入缓冲区,MESI 用作缓存一致性协议。我们在 CPU 之间有一个共享缓存线:

CPU1 缓存:|I|I|S|I|I|

CPU2缓存:|I|I|S|I|I|

现在 CPU1 决定修改共享线路。它将更改记录放入其写入缓冲区,并向 CPU2 发送无效消息。CPU2 接收到它并发送一个确认:

CPU1 缓存:|I|I|S|I|I|,CPU1 写缓冲区:change for the 3rd cache line

CPU2缓存:|I|I|I|I|I|

CPU1 在收到确认后不必刷新写缓冲区并将高速缓存行状态更改为 M(modified) 是否正确?如果不是,让我们走得更远。

假设现在 CPU2 想要再次读取这个缓存行。侦听 CPU1 是否应该拦截此读取请求,并且flush buffer->flush cache line->send the last value of the cache line to CPU2?或者它可能会忽略它并且 CPU2 通过询问 RAM(尚未更改)仍然具有旧值?

0 投票
2 回答
1152 浏览

multithreading - LOCK 前缀与 MESI 协议?

如果 MESI 协议阻止其他内核写入“独占”拥有的数据,x86 LOCK 前缀的目的是什么?

我对 LOCK 提供的内容和 MESI 提供的内容感到有些困惑?

我了解 MESI 协议是关于确保所有内核都看到一致的内存状态,但据我了解,它还可以防止内核写入另一个内核已经写入的内存?

0 投票
1 回答
156 浏览

caching - 使用 MESI 协议,写入命中也会使处理器停止,对吗?

我正在做一个项目,该项目是在 VHDL 中实现具有某种高速缓存一致性(为此我选择了 MESI)的双处理器系统。我只想确认一件事:对共享缓存行的写入命中应该会导致缓存控制器在共享总线上发送无效消息,并且根据争用情况,它应该让处理器停止一段时间,对吧?

我正在考虑这种情况;假设一个处理器做这样的事情:

如果该数组完全驻留在缓存中,并且与其他处理器共享,则每次写入都会生成一条失效消息,每条消息都需要多个周期才能完成;为了让处理器继续执行,所有这些失效消息都必须被缓冲,并且缓冲区不会被限制,因此写入命中将不得不让 CPU 停顿一段时间。我是对的吗?

编辑:愿意解释否决票吗?这个问题的哪一部分不清楚?或者,如果您认为这是一个愚蠢而可怕的问题,那么我认为您一定有答案吗?