多核中的片外高速缓存一致性和二级高速缓存分区(程序员的观点)

时间:2014-01-25 02:41:15

标签: caching parallel-processing multicore computer-architecture

我最近研究过,为了节省芯片面积,多核处理器在L1级别没有高速缓存一致性硬件。而是对L2高速缓存进行分区(分区数量=超线程数量等等)以实现片外高速缓存一致性。至少这是我从讲座中解释的。它是否正确?

如果是,那么我无法想象这是怎么回事。你如何忽略L1级的一致性?如果我的解释不正确,请详细说明片外高速缓存的一致性以及为什么要对L2进行分区。

谢谢!

1 个答案:

答案 0 :(得分:2)

讲座可能表明多核处理器中的L1缓存通常不会被窥探以保持一致性。相反,更高级别的缓存层次结构会过滤一致性流量。利用完全包含(仅标签或标签和数据)级别的高速缓存,额外位可以提供本地一致性目录 - 例如,所有核心或更大节点的位向量,指示该节点是否具有高速缓存块。 (该目录可以用作过滤器而不是精确跟踪,例如,以避免在较低级别的高速缓存驱逐上进行缓冲。)其他形式的过滤也是可能的。主要要求是检测到数据存在于较低级别缓存中的所有情况,适度的误报部分只会适度增加流向较低级别缓存的侦听流量。

如果没有这样的过滤器,另一个核心/节点上的每个未命中都必须探测所有其他L1高速缓存。除了使用更多的互连带宽之外,这种额外的标签探测要求通常通过复制L1标签来处理,因为L1高速缓存针对延迟和接入带宽进行了高度优化(使得更加希望避免来自相干探测的不必要干扰)。

在具有片上L3的通用多核处理器中,L2高速缓存对于一个或少量核心的节点是“私有的”。 (在此上下文中为私有意味着分配由节点内的核心驱动。其他节点不使用此L2容量。)这样的私有L2过滤器访问在命中时到达共享L3(只要它不需要对独占/修改状态的更新)。通过仅在少数(通常是一个)核心之间共享L2缓存,通过更直接地连接到核心并且通过要求更低的容量来保持较低的访问延迟。 (在两个甚至四个核心之间共享L2可以减少更高级别网络中的节点数量并平衡L2容量的利用率。)

最后(片上)级别的缓存(LLC)通常是分区的。将切片附加到每个较低级别节点允许该切片具有较低的与该节点通信的等待时间。由该节点访问的高速缓存块可以优先放置在该片中或附近(通过网络拓扑)片中,以允许较低等待时间(和可能更高带宽)的本地访问。 (这是非统一缓存架构优化。由于块不依赖于基于地址或访问节点的特定片,因此可以迁移甚至复制块。)

或者,对LLC切片的分配可以严格地基于地址,可能将每个LLC切片与存储器控制器相关联。这仅需要探测一个切片以确定命中或未命中,并且适合使用较低级节点和LLC切片之间的交叉条互连。这种安排的缺点是存储器控制器-LLC连接的延迟关键性较小,并且利用率与基于地址的平衡需求相关。然而,它可以更快地确定L3命中/未命中,并且可以(如果切片与存储器控制器相关联)减少用于从存储器预取和急切写回的开销。 (当缺失更常见和/或块经常被多个节点共享时,基于地址的分配变得更有吸引力,因为缺少只需要探测一个片[除了可能支持更积极的预取之外更可能是内存带宽有限而不是比LLC容量有限 - 因此内存控制器使用的不平衡无论如何都会很糟糕]并且所有使用它的节点都可以更直接地访问共享块而无需复制。)

(显然可以使用这两种分配方法的组合。即使只是基于地址的偏差分配也可以减少对互连带宽的需求。)

分区倾向于减少延迟(特别是使用NUCA安排)和设计复杂性,以及利用不同数量的分区(以及可能的缺陷隔离)促进设计重用,以便具有制造缺陷的芯片可以更容易地用作产品分区较少)。