- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对缓存行有一些误解。我正在使用 Haswell
和 Ubuntu
.现在假设我们有 2 线程应用程序,其中会发生以下情况。
mov [addr], dword 0xAC763F
;starting Thread 1 and Thread 2
Thread 1 Thread 2
mov rax, [addr] mov rax, [addr]
mov [addr], dword 1 mov [addr], dword 2
addr
)并将其标记为 Exclusive
. Thread 1
和 Thread 2
在开始写入之前完成读取,则缓存行的状态为 Shared
在所有缓存中。 Invalid
的行如果两个
mov [addr], dword 1
在
Thread 1
和
mov [addr], dword 2
在
Thread 2
“同时”发生。
MESI
如何协议(protocol)实现解决了这个“同时从不同线程写入的问题”。
最佳答案
I think of this as "during the same CPU clock cycle"
Before starting the main thread writes to the corresponding cache line (addr) and marks it as Exclusive.
lock add [mem], eax
.据推测,仲裁对同一行的多个只写访问的机制完全相同,因为唯一的区别是
lock
ed 操作在操作期间保留线路,在此期间不响应无效请求。
关于assembly - 内核如何决定在 MESI 中使哪个缓存行无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48969113/
在并发读取和写入行中(仅读取和存储)。当一行在修改或读取模式下由核心拥有时会发生什么,以及一些其他核心问题存储在该行上的操作(假设这些读取和写入是 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 插槽中的所有内核
我是一名优秀的程序员,十分优秀!