具有相同缓存行大小的多级CPU缓存如何工作?

时间:2017-11-15 01:07:36

标签: caching cpu-architecture

注意:我不确定StackOverflow是否是该问题的正确位置,或者是否有更合适的StackExchange子

我在一本书中读过,对于多级CPU缓存,缓存行大小会根据级别的总内存大小而增加。当与非常简单的架构一起使用时,我可以完全动摇并且它是如何工作的(或者至少我是这么认为的)。然后我来到这个question。问题是同一缓存线的缓存存储器如何协作?

这就是我如何使用不同的缓存行大小工作来缓存高速缓存的方式。为简单起见,假设数据和指令没有不同的高速缓存,我们只有L1和L2高速缓存(L3和L4不存在)。 如果L1具有64字节的高速缓存行大小和128字节的L2,当我们在L2上有高速缓存未命中并且我们需要从主存储器获取所需的字节或字时,我们还带来其最接近的字节或字以便填充128 L2缓存行的字节数。然后,由于处理器产生的对存储器位置的引用的局部性,我们在L1上缺少L2的命中的概率更高。但是如果我们有相同的缓存行大小,这当然不会发生,使用前面的算法。你能解释一下现有CPU如何利用具有相同线路大小的高速缓存的某种/简单算法或实现吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

我在一本书中读到,对于多级CPU缓存,缓存行大小会根据级别的总内存大小而增加。

大多数CPU都不是这样。通常,大小在所有缓存中都是相同的,但总大小会增加。通常也是相关性,但通常不会与总大小一样多,因此套数通常会增加。

The point of multi-level caches是为了获得低延迟和大尺寸而不需要同时具有大延迟和低延迟的缓存(因为这在物理上是不可能的)。

硬件预取到L2和/或L1是使顺序读取工作良好的原因,而不是在缓存级别中的较大行大小。 (在多核CPU中,专用L1 / L2 +共享L3为内存工作负载提供专用延迟+带宽过滤器,但是你可以将L3作为一致性支持,而不是为内核之间共享的数据命中DRAM。 )

在不同的缓存中使用不同的行大小会更复杂,尤其是在多核系统中,缓存必须保持彼此的一致性using MESI。在缓存之间传输整个缓存效果很好。

但是如果L1D线路是64B而私有L2 /共享L3线路是128B,那么一个核心上的负载可能会强制L2高速缓存分别请求两个半部分,以防单独的核心具有128B线路的两半中的每一个改性。听起来很复杂,并且将更多逻辑放入外层缓存中。

Paul Clayton's answer on the question you linked points表示该问题的可能解决方案是较大缓存行的两半的单独有效位,或者甚至是单独的MESI一致性状态。但仍然共享相同的标记,因此如果它们都是有效然后他们必须缓存同一个128B块的两半。)