2017-10-09 60 views
1

有几个高速缓存一致性协议在附近,如MSI,MESI,MOSI,MOESI是否可以从一个不同的核心中的L1缓存线协议获取状态信息?

让我们假设这样的场景:一个CPU包含四核与L1专用高速缓存(L1高速缓存大小在这里并不重要)。这里的内存地址是说明性的。

  1. 核 - 0请求的存储器访问处理0x1111,从而该值将被加载到从主存储器其L1高速缓存行。

  2. 核心-1请求存储器访问,以解决0x2222,从而该值将被加载到从主存储器其L1高速缓存行。

  3. 核 - 2请求存储器访问,以解决0x1111(由核 - 0先前访问)。该引用已经加载到Core-0的缓存行中,因此,缓存一致性协议将复制包含引用的Core-0的缓存行,并最终将其存储到Core-2的缓存行中。

问题1:是否核心2知道,内存访问已经被内核-0的缓存行,而不是主内存提供?或者高速缓存一致性协议对于检索数据的位置是透明的?

问题2:核 - 0,和芯2有步骤3。但是在后其高速缓存线的共享状态,能够核 - 2从获取当前状态从不同的内核给出内存参考?在这种情况下,有可能Core-2知道对于此内存引用0x1111 Core-0缓存行在共享状态?

回答

1

core-2知道内存访问是由Core-0的缓存行代替主内存吗?

是的,在所描述的场景中,高速缓存线应该处于“共享”状态(即高速缓存线在少数内核之间共享)。但请参阅下面的内容......

Cache Coherence Protocol对于检索数据的位置是透明的吗?

是的,高速缓存一致性协议对于内核是透明的,高速缓存行状态是内部的。一些体系结构可能有直接缓存状态访问的说明,但我很怀疑。大多数体系结构只是预取/清零/清空/无效指令......

那么下一个问题的答案是显而易见的:

核心-0,和Core-2有步骤3后,但在共享状态的高速缓存行,可睿2获取当前来自不同内核的给定内存引用的状态?

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

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

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

总的来说,它看起来像XY Problem。你想用cache-line-state-aware核心实现什么?

相关问题