【问题标题】:Is possible to get the state information from L1 cache line protocol in a different core?是否可以从不同内核中的 L1 缓存线协议获取状态信息?
【发布时间】:2017-10-09 02:59:15
【问题描述】:

那里有几种缓存一致性协议,例如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 的缓存线而不是主内存提供的?或者缓存一致性协议对数据的检索位置是透明的?

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

【问题讨论】:

    标签: performance memory cpu-cache


    【解决方案1】:

    core-2 是否知道内存访问是由 Core-0 的缓存线而不是主内存提供的?

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

    缓存一致性协议对检索数据的位置是透明的?

    是的,缓存一致性协议对内核是透明的,缓存行状态是内部的。一些架构可能有直接缓存状态访问的指令,但我对此表示怀疑。大多数架构只有预取/归零/刷新/无效指令...

    那么接下来的问题的答案就很明显了:

    在第 3 步之后,Core-0 和 Core-2 的缓存线处于共享状态。但是,Core-2 是否可以从不同内核的给定内存引用中获取当前状态?

    在某些架构上可能是可能的,但在 x86 上是不可能的。

    在这种情况下,Core-2 是否可能知道对于此内存引用 0x1111 Core-0 缓存行处于共享状态?

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

    总的来说,它看起来像XY Problem。您想通过缓存线状态感知内核实现什么目标?

    【讨论】:

      猜你喜欢
      • 2022-06-23
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2017-09-24
      • 2021-06-18
      • 2014-11-23
      • 2016-02-10
      • 2012-02-18
      相关资源
      最近更新 更多