- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 intel Broadwell 中了解 MESI 的更多细节。
假设一个 cpu 插槽有 6 个核心 core 0 到 core 5 ,
他们每个人都有自己的 L1$ 和 L2$ 并共享 L3$ ,
共享内存中有一个 var X , x 位于缓存行中
称为 XCacheL ,以下是我的问题的详细信息:
T1:核心 0 和核心 4 和核心 5 有 x = 100 和 XCacheL
是 小号 由于 3 核具有 XCacheL 的副本,因此处于 Hared 状态。
T2 : 核心 0 需要修改 x ,所以核心 0 广播无效信号,核心 4 和核心 5 接收到信号
,使他们的 XCacheL 副本无效,Core 0 将 x 修改为 200
XCacheL 状态现在是 手机 修改。
T3:核心 4 需要读取 x,但其 XCacheL 副本在 T2 中无效,因此它会触发读取未命中,将发生以下情况:
● Processor makes bus request to memory
● Snooping cache puts copy value on the bus
● Memory access is abandoned
● Local processor caches value
● Local copy tagged S
● Source (M) value copied back to memory
● Source value M -> S
最佳答案
没错,在您的 T4 步骤中,核心 #5 的负载将在 L3 中达到,因此不会发生内存访问。核心#5 获得该行的另一个副本,处于共享状态。
对于像 Broadwell 这样所有内核共享对片上 DRAM Controller 的访问的 CPU,您的步骤顺序是零意义的。
环形总线连接核心(每个核心都有一片 L3 缓存)和系统代理(PCIe 链接和与其他核心的连接)和归属代理(内存 Controller )。见 https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_(client)#Die_Stats有关显示环形总线的框图。
单个内核不直接驱动“内存总线”,甚至不驱动 2 或 4 条 DRAM 总线之一。内存 Controller 仲裁对 DRAM 的访问,并有一些缓冲来重新排序/组合访问。 (所有访问内存的东西都经过它,包括 DMA,所以它可以做任何它喜欢做的事情,只要它给出以某种合理的顺序发生的加载/存储的外观。)
加载请求在 L3 缓存未命中之前不会发送到系统代理。见 https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198有关四核桌面的说明(它更简单,只是将内存 Controller 连接到系统代理,使其与 CPU 集成内存 Controller 之前的北桥完全一样。)
由于 Broadwell 使用包含 L3 缓存,L3 标签可以告诉它哪个(如果有)核心具有修改或独占副本,即使 L3 本身中的行不可共享。 (即一行的数据在 L3 中可能是无效的,但标签仍在跟踪哪个核心有私有(private)副本)。见 Which cache mapping technique is used in intel core i7 processor?
这让 L3 标签充当窥探过滤器以减少广播。
关于caching - MESI 协议(protocol)中的 L3$ 角色部分是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54282246/
在并发读取和写入行中(仅读取和存储)。当一行在修改或读取模式下由核心拥有时会发生什么,以及一些其他核心问题存储在该行上的操作(假设这些读取和写入是 std::atomic::load 和 std::a
我对缓存行有一些误解。我正在使用 Haswell和 Ubuntu .现在假设我们有 2 线程应用程序,其中会发生以下情况。 mov [addr], dword 0xAC763F ;starting T
MESI(修改、独占、共享、无效)协议(protocol)用于 CPU 缓存进行通信并确保它们都使用缓存行的最新值。当一个 CPU 修改高速缓存行值时,订阅此高速缓存行的所有其他 CPU 都会在高速缓
如果核心写入但缓存线不在其 L1 中,则它写入存储缓冲区。另一个 Core 请求缓存行,MESI 看不到 Store Buffer 更新并返回未修改的缓存行。 Store Buffer 很快就会被刷新
在下面显示的伊利诺斯 MESI 协议(protocol)的状态转换图中,为什么在从状态 S 转换到状态 I 时有一个 Flush' 信号,在从状态 E 转换到状态 I 时有一个 Flush 信号,观察
我知道 MESI 协议(protocol)用于在多处理器系统中实现缓存一致性。但我不知道它是如何实现的。非常感谢您对此的任何帮助。 最佳答案 缓存一致性协议(protocol)通常在硬件中实现(在 C
如果 MESI 协议(protocol)阻止其他内核写入“独占”拥有的数据,那么 x86 LOCK 前缀的目的是什么? 我对 LOCK 提供的内容和 MESI 提供的内容感到有些困惑? 我了解 MES
我想知道 MOESI 相对于 MESI 缓存一致性协议(protocol)有什么好处,以及目前哪种协议(protocol)更受现代架构的青睐。如果成本不允许, yield 通常不会转化为实现。 MOE
我正在做一个项目,该项目是在 VHDL 中实现具有某种缓存一致性(我选择 MESI)的双处理器系统。我只想确认这一件事:共享缓存行上的写入命中应该会导致缓存 Controller 在共享总线上发送无效
我想在 intel Broadwell 中了解 MESI 的更多细节。 假设一个 cpu 插槽有 6 个核心 core 0 到 core 5 , 他们每个人都有自己的 L1$ 和 L2$ 并共享 L3
我在阅读有关缓存一致性协议(protocol)的讲座的幻灯片时遇到了以下问题:如果使用具有直写策略的缓存,哪些 MESI 状态是相关的? 也给出了答案:I(无效)和S(Shared Unmodifie
我发现了一个英特尔文档,其中指出使用字符串(不是 std::string ,而是汇编字符串指令)时需要内存屏障,以防止 CPU 重新排序它们。 但是,当两个线程(在两个不同的内核上)访问同一个内存时,
在 MESI 协议(protocol)中当一个 CPU: 执行读操作 发现缓存行处于无效状态 其他缓存中没有其他非无效副本 它需要从内存中获取数据。这将需要一定数量的周期来执行此操作。那么缓存行的状态
这是关于跨cache 不同层的缓存一致性协议(protocol)。 .我对L1的理解(X86_64)就是说,它由一个核心和 L2 独家拥有。介于 2 个内核和 L3 之间用于 CPU 插槽中的所有内核
我是一名优秀的程序员,十分优秀!