问题标签 [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 回答
178 浏览

caching - MESI 协议。写入缓存未命中,但缓存行副本存在于另一个 CPU 上。为什么需要从主存中获取?

根据此,如果写入缓存未命中并在另一个 CPU 缓存中复制(例如共享/独占状态)。步骤是:

1. Snooping cores (with cache line copy) 将 state 设置为Invalid

2.当前缓存存储新的主存值。

为什么其中一个监听内核一开始不能将其缓存线值放在总线上?然后进入无效状态。相同的算法用于现有副本的读取未命中。谢谢你。

0 投票
0 回答
55 浏览

algorithm - 为什么 MESI 算法会将不正确的数据写回 RAM?

我的教授拒绝回答这个问题,我开始怀疑他不知道答案。

我得到了以下MESI算法

假设我们有两个线程在并行 CPU 上运行(从 RAM 中的同一数据块写入和读取)第一个缓存处于状态 M;第二个处于未知状态(根据我的理解必须处于I状态)

问题是:如果 BusWrite 是从第二个缓存发送的,是否有可能将第一个缓存写回 RAM,肯定不是最新更新但第二个缓存中最新修改的值被写回 RAM?

我的教授说是的,我的问题是为什么我们要将未更新的数据写回 RAM?

0 投票
1 回答
504 浏览

caching - 将相同值再次写入缓存行的性能

我有时会看到这样的优化代码:

与此代码相反:

我想这段代码是以这种方式编写的,以减少 CPU 中的内存带宽。这是对典型 CPU 的良好优化(当值可能已经为 0 时),为什么?

这对 MESI 状态意味着什么:如果我将相同的值写回高速缓存行(写入但不修改),是否存在从共享到修改的状态转换?或者这对于 CPU 来说是否太复杂而无法检测到?

典型的 CPU(或至少一些)是否针对这种情况进行了优化?

0 投票
2 回答
207 浏览

cpu-architecture - 缓存一致性 - MESI 协议

在使用 MESI 协议(使用 l1 和 l2 包容性)的缓存中是否存在这样的情况,其中 l2 可以将无效指令发送到 l1 中已经无效的行。

0 投票
2 回答
993 浏览

assembly - 缓存操作是原子的吗?

我正在学习 CPU 缓存,现在我仍然对缓存一致性协议 (MESI) 有误解。想象一下,我们有 2 个内核有一个处于共享状态的缓存线。其中一个执行读取,另一个执行写入:

核心 1 可以观察到一些中间状态吗?我的意思是这样的:

  1. Core 2将缓存行标记L1D为已修改并将更改写入其中。
  2. core 1的缓存中的缓存行L1D仍然处于Shared状态,因此读取恰好读取了陈旧的值。
  3. 在读取过时值之后,缓存中的行已core 1L1D标记为无效。

在英特尔的 MESI/MESIF 实施中是否可能出现这种情况?

0 投票
2 回答
811 浏览

caching - 英特尔 64 和 IA-32 上的 MESI 有何意义

  • MESI 的重点是保留共享内存系统的概念。
  • 然而,使用存储缓冲区,事情变得复杂了:
  • 一旦数据到达 MESI 实现的缓存,内存就会在下游保持一致。
  • 但是,在此之前,每个内核可能不同意内存位置 X 中的内容,具体取决于每个内核的本地存储缓冲区中的内容。
  • 因此,从每个核心的角度来看,内存的状态似乎是不同的——它是不连贯的。
  • 那么,为什么我们要“部分”地执行与 MESI 的一致性呢?

编辑:在进一步缩小了真正让我困惑的地方之后,进行了实质性的编辑。我试图保持问题的一般概念不变,以保持收到的重要答案的相关性。

0 投票
1 回答
265 浏览

cpu - 存储缓冲区是否发送读取无效消息或无效请求消息?

我认为,为了让 CPU 继续执行后续指令,存储缓冲区必须做部分 MESI 处理以获得缓存一致性,因为最新的值存储在存储缓冲区而不是缓存中。因此,存储缓冲区发送读取无效或无效 REQ 消息,并在 ACK 到达后刷新最新值到缓存。
而 Cache 做不到。

我的分析和结果对吗?
还是所有MESI处理都由缓存完成?

0 投票
0 回答
283 浏览

caching - MSI、MESI、MOSI、MOESI 和 MESIF 有哪些缓存一致性协议?

我想知道我上面提到的是什么样的协议。更准确地说,我的问题是:它们是写更新还是写无效?还是取决于他们的实施?谢谢

0 投票
1 回答
194 浏览

atomic - 当 CPU 将 storebuffer 中的值刷新到 L1 Cache 时?

Core A 将值 x 写入 storebuffer,等待无效的 ack,然后将 x 刷新到缓存。它是只等待一个 ack 还是等待所有 ack ?它如何知道所有 CPU 中有多少 ack?

0 投票
1 回答
420 浏览

performance - x86 MESI 无效缓存线延迟问题

我有以下进程,我尝试使 ProcessB 的延迟非常低,所以我一直使用紧密循环并隔离 cpu core 2。

共享内存中的全局变量:

ProcessA(在核心 1 中)

ProcessB(在核心 2 中)

ProcessC(在核心 3 中)

在这些简单的伪代码进程中,当 ProcessesA 将 bDOIT 修改为 1 时,它将使 Core 2 中的缓存行无效,然后在 ProcessB 获得 bDOIT=1 之后,ProcessB 将执行 memcpy(localxyz,glbXYZ) 。

由于 evry 1000 usec ProcessC 将使 Core2 中的 glbXYZ 无效,我想这会影响 ProcessB 尝试执行 memcpy(localxyz,glbXYZ) 时的延迟,因为当 ProcessB 将 bDOIT 扫描到 1 时,glbXYZ 已经被 ProcessC 无效,

glbXYZ 的新值仍在核心 3 L1$ 或 L2$ 中,在 ProcessB 实际得到 bDOIT=1 后,此时 core2 知道它的 glbXYZ 无效,所以此时它询问 glbXYZ 的新值,ProcessB 延迟受等待glbXYZ 的新值。

我的问题 :

如果我有一个 processD(在核心 4 中),它会:

这个 ProcessD 是否会让 glbXYZ 更早地刷新到 L3$,这样当核心 2 中的 ProcessB 知道它的 glbXYZ 无效时,它会询问 glbXYZ 的新值,这个 ProcessD 会帮助 PrcoessB 更早地获得 glbXYZ 吗?!由于 ProcessD 一直帮助将 glbXYZ 变为 L3$。