现代缓存中的方式预测

jha*_*agk 5 caching processor cpu-architecture cpu-cache micro-architecture

我们知道,就缓存命中时间而言,直接映射缓存优于集合关联缓存,因为不涉及特定标签的搜索。另一方面,组关联缓存通常比直接映射缓存具有更好的命中率。

我读到,现代处理器试图通过使用一种称为路径预测的技术来结合两者的优点。他们预测给定集合中最有可能发生命中的行,并仅在该行中进行搜索。如果尝试导致未命中,请在该组的所有缓存行中使用正常的组关联搜索。

我想了解这种路径预测是如何工作的。预测硬件/逻辑的延迟如何小于整套的搜索延迟?

小智 3

AMD 的 Bulldozer 和 Ryzen 系列的路预测机制是基于 \xc2\xb5tag 的,并记录在“Take A Way:探索 AMD\xe2\x80\x99s 缓存路预测器的安全影响”中(Moritz Lipp 等人,2015)。 ,2020,PDF)。

\n

基于 \xc2\xb5tag 的方式预测匹配虚拟地址的哈希值而不是完整的虚拟地址,因此它不仅避免了像虚拟标记缓存那样的地址转换开销,而且通过使用更少的存储,可以用更低的存储访问预测数组。延迟和标签检查延迟稍低。“Take A Way”逆向工程表明,AMD 的 Bulldozer 系列和 Ryzen 系列都使用第 12 位到第 27 位作为哈希函数,并使用单个异或 (\xe2\x8a\x95) 层,从而减少延迟。推土机系列使用 12\xe2\x8a\x9521、13\xe2\x8a\x9522:、14\xe2\x8a\x9523、15\xe2\x8a\x9524、16\xe2\x8a\x9525、17\xe2\x8a \x9526, 18\xe2\x8a\x9527; Ryzen 系列使用 12\xe2\x8a\x9527、13\xe2\x8a\x9526、14\xe2\x8a\x9525、15\xe2\x8a\x9520、16\xe2\x8a\x9521、17\xe2\x8a\ x9522、18\xe2\x8a\x9523、19\xe2\x8a\x9524。

\n

这些 \xc2\xb5tag 哈希函数有两个方面值得注意。首先,通过使用较低有效位而不是完整的 48 个有效虚拟地址位,哈希函数中使用的所有位都可以更早地使用,因为减少了进位传播延迟(地址生成涉及加法,尽管高性能加法器具有 log(n )延迟,较低有效位仍将更早可用)。(这种效果还意味着用于确定缓存集的 12 个最低有效位甚至更早可用,因此可以在计算 \xc2\xb5tag 之前对预测器表进行索引。)其次,在 Ryzen 系列中,通常是最低有效位可变(最高有效)位与哈希的三位通常最可变(最低有效)位进行异或;这应该会减少错误匹配的可能性。错误匹配是通过替换匹配来处理的,而不是使用普通的(面向LRU的)替换策略;这通常会导致更高的失误率。

\n

(最近的 Intel x86 处理器也使用基于 \xc2\xb5tag 的方式预测。)

\n

其他方式预测示例

\n

路径预测并不是一项新技术。POWER6 使用 \xc2\xb5tag 预测器,11 位标签为 [14:17].([16:23]\xe2\x8a\x95[24:31]),用于 128 B 的 64 KiB 8 路缓存缓存行。(“IBM POWER6 微架构”,HQ Le 等人,2007 年)。每个硬件线程还包含一个有效位,以避免同音异义词(不同地址空间的有效地址匹配)的混乱。与 Ryzen 一样,人们清楚地认识到最低有效位变化更频繁,因此两个最低有效位与任何其他位进行异或。

\n

Pentium4 还使用了 \xc2\xb5tag 预测器。根据“The Microarchitecture of the Intel\xc2\xae Pentium\xc2\xae 4 Processor on 90nm Technology”(Darrell Boggs et al., 2004),90nm 实现“与之前的实现相比显着增加了部分地址匹配的大小,从而减少假混叠情况的数量”。细节似乎尚未公布。

\n

MIPS R10000 使用一个简单的基于 MRU 的路预测器来实现其片外双向关联 L2 缓存。提供 8Ki 单比特预测条目来指示一组中最近使用的缓存块。如果提供超过 8 个 Ki 集(具有 64 B 块的 16 MiB L2 缓存最多支持 128 个 Ki 集),则不同的集将使用相同的预测位(预测器混叠)。这种方式的预测被用来减少引脚数;一次只能读取一个标签,并且只能从一种方式读取部分数据块。替代方案是直接映射缓存(HP PA-RISC 使用大型片外直接映射 L1 缓存)或用于处理标签比较的专用(更昂贵)芯片(MIPS R8000 使用特殊标签 SRAM,其中包括标签比较逻辑和使用比较结果来寻址保存数据的普通 SRAM)。

\n

Alpha 21264 指令高速缓存使用集合和路径预测器,可以将其视为分支目标缓冲区的变体。对于四个 4 字节指令的每个对齐块,包括对下一行(索引)和方式的预测。如果指令块包含上次执行时采用的分支,则该分支的目标行和路径将是该行的预测。具有可变目标(包括调用返回)和分支的控制流指令(无论它们是否被执行)都会发生变化,这会导致错误预测,但该预测器的准确性通常很高。

\n

延迟和功耗考虑因素

\n

现代高性能处理器主要使用方式预测来减少访问能量,同时保持快速访问。通过支持 32 字节缓存访问(例如,AVX)和快速未对齐加载(这实际上使访问大小加倍),并行读取八路数据和(通常)仅读取一种数据路之间的能量差异很大。由于需要读取和比较 \xc2\xb5tags,因此在某种程度上减少了标签读取和比较能量的节省。(请注意,在执行单元已使用预测方式的数据之后,可以利用物理标签和权限标签放宽对 TLB \xe2\x80\x94 命中确认的延迟约束 \xe2\x80\x94 也可用于减少获取能量或增加 TLB 容量。)

\n

直接映射缓存无需在将数据转发到执行单元之前选择正确的方式,从而获得了延迟优势。选择正确的方式包括标签比较和多路复用器选择本身。然而,如果路确定(或预测)延迟小于数据访问延迟,则组关联性唯一增加的延迟是“预热”多路复用器的直通延迟。由于标记数组比数据数组小得多,因此它们的访问延迟也小得多,因此更容易(特别是使用虚拟地址标记)在数据本身可用之前确定路径。(在早期的处理器中,较小的缓存块 \xe2\x80\x94 标记数组大小更接近数据数组大小 \xe2\x80\x94 以及与逻辑延迟相比相对较低的线路延迟将使在数据可用之前完成路径确定变得更加困难,并且会适度增加选择延迟的影响。)

\n