是否可以从不同内核中的 L1 缓存行协议获取状态信息?

Is possible to get the state information from L1 cache line protocol in a different core?

有几种缓存一致性协议,例如MSI、MESI、MOSI、MOESI

假设这种情况:CPU 包含 4 核 和 L1 私有缓存(L1 缓存大小在这里无关紧要).这里的内存地址是说明性的。

  1. Core-0 请求对地址 0x1111 的内存访问,因此该值将被加载到其 L1来自主内存的缓存行。

  2. Core-1 请求对地址 0x2222 的内存访问,因此该值将被加载到其 L1来自主内存的缓存行。

  3. Core-2 请求内存访问地址 0x1111(之前由 Core 访问-0)。该引用已经加载到Core-0的缓存行中,因此,缓存一致性协议将复制包含该引用的Core-0的缓存行,最后将其存储到Core-2的缓存行中。

问题 1: core-2 是否知道内存访问是由 Core-0 的缓存行而不是主内存提供的?还是缓存一致性协议对于检索数据的位置是透明的?

问题2:Core-0Core-2有他们的缓存行在第 3 步之后处于 Shared 状态。但是,Core-2 是否可以从不同内核的给定内存引用中获取当前状态?在这种情况下,Core-2 可能知道此内存引用 0x1111 Core-0 缓存行位于 Shared状态?

Does core-2 knows that the memory access has been served by Core-0's cache line instead of main memory?

是的,在描述的场景中,缓存行应该处于 "shared" 状态(即缓存行在几个核心之间共享)。但是请看下面...

The Cache Coherence Protocol is transparent to where the data has been retrieved?

是的,缓存一致性协议对核心是透明的,缓存行状态是内部的。一些架构可能有直接访问缓存状态的指令,但我对此表示怀疑。大多数架构只有 prefetch/zero/flush/invalidate 条指令...

所以下一个问题的答案是显而易见的:

Core-0, and Core-2 have their cache line in Shared state after step 3. However, is possible to Core-2 gets the currently state from a given memory reference from a different core?

在某些体系结构上可能是可行的,但在 x86 上是不可能的。

In this case, is possible Core-2 knows that for this memory reference 0x1111 Core-0 cache line is in Shared state?

同上。缓存是连贯的,因此在大多数架构上缓存的指令级接口都非常简单。

总的来说,它看起来像 XY Problem。你想用缓存行状态感知核心实现什么?