我们知道,直接映射缓存在缓存命中时间方面优于组关联缓存,因为不涉及对特定标签的搜索。另一方面,组关联缓存通常显示出比直接映射缓存更好的命中率。
我读到现代处理器试图通过使用一种称为方式预测的技术来结合两者的优点。他们预测给定集合中最有可能发生命中的行并仅在该行中搜索。如果尝试导致未命中,请在集合的所有缓存行中使用正常的集合关联搜索。
我想了解这种方式预测是如何工作的。预测硬件/逻辑的延迟如何小于完整集的搜索延迟?
我们知道,直接映射缓存在缓存命中时间方面优于组关联缓存,因为不涉及对特定标签的搜索。另一方面,组关联缓存通常显示出比直接映射缓存更好的命中率。
我读到现代处理器试图通过使用一种称为方式预测的技术来结合两者的优点。他们预测给定集合中最有可能发生命中的行并仅在该行中搜索。如果尝试导致未命中,请在集合的所有缓存行中使用正常的集合关联搜索。
我想了解这种方式预测是如何工作的。预测硬件/逻辑的延迟如何小于完整集的搜索延迟?
AMD Bulldozer 和 Ryzen 系列的方式预测机制是基于 µtag 的,并记录在“Take A Way: Exploring the Security Implications of AMD's Cache Way Predictors”(Moritz Lipp 等人,2020,PDF)中。
基于 µtag 的方式预测匹配虚拟地址的散列而不是完整的虚拟地址,因此它不仅避免了像虚拟标记缓存那样的地址转换开销,而且通过使用更少的存储空间,可以以更低的延迟访问预测数组,并且标签检查的延迟略低。“Take A Way”逆向工程,AMD 的 Bulldozer 系列和 Ryzen 系列都使用第 12 到 27 位作为散列函数,并且使用单个 xor (⊕) 层,从而减少延迟。推土机家族使用12⊕21、13⊕22:、14⊕23、15⊕24、16⊕25、17⊕26、18⊕27;锐龙家族使用了12⊕27、13⊕26、14⊕25、15⊕20、16⊕21、17⊕22、18⊕23、19⊕24。
这些 µtag 哈希函数的两个方面值得注意。首先,通过使用较低有效位而不是完整的 48 个有效虚拟地址位,哈希函数中使用的所有位都可以更早地使用,因为进位传播延迟减少(地址生成涉及加法,尽管高性能加法器具有 log(n ) 延迟较低有效位仍将更早提供)。(这种效果也意味着用于确定缓存集的 12 个最低有效位甚至更早可用,因此可以在计算 µtag 之前对预测表进行索引。)其次,在 Ryzen 系列中,通常变量最少(大多数重要)位与散列的三位通常最可变(最低有效)位进行异或运算;这应该会减少错误匹配的可能性。错误匹配通过替换匹配来处理,而不是使用普通的(面向 LRU 的)替换策略;这通常会导致更高的未命中率。
(最近的 Intel x86 处理器也已知使用基于 µtag 的方式预测。)
方式预测不是一项新技术。POWER6 使用 11 位标记为 [14:17].([16:23]⊕[24:31]) 的 µtag 预测器,用于具有 128 B 高速缓存行的 64 KiB 8 路高速缓存。(“IBM POWER6 微架构”,HQ Le 等人,2007 年)。每个硬件线程还包括一个有效位,以避免同音异义(不同地址空间的有效地址匹配)。与 Ryzen 一样,人们清楚地认识到最低有效位变化更频繁,因此两个最低有效位与任何其他位进行异或运算。
Pentium4 还使用了 µtag 预测器。根据“基于 90nm 技术的 Intel® Pentium® 4 处理器的微架构”(Darrell Boggs 等人,2004 年),90nm 实现“显着增加了部分地址匹配的大小,从而减少了错误的数量。别名案例”。细节似乎尚未公布。
MIPS R10000 使用一个简单的基于 MRU 的方式预测器用于其片外双向关联 L2 缓存。提供了 8Ki 单比特预测条目以指示一组中最近使用的缓存块。如果提供了超过 8 个 Ki 集(对于具有 64 B 块的 16 MiB L2 高速缓存,最多支持 128 个 Ki 集),不同的集将使用相同的预测位(预测器混叠)。这种方式预测用于减少引脚数;一次只能读取一个标签,并且只能从一种方式读取数据块的一部分。替代方案将是直接映射缓存(HP PA-RISC 使用大型片外、直接映射 L1 缓存)或用于处理标签比较的专用(更昂贵)芯片(MIPS R8000 使用包含标签比较逻辑和使用比较结果来寻址保存数据的普通 SRAM)。
Alpha 21264 指令高速缓存使用了集合和路径预测器,可以将其视为分支目标缓冲区的变体。对于四个 4 字节指令的每个对齐块,包括对下一行(索引)和方式的预测。如果一大块指令包括上次执行时采用的分支,则该分支的目标行和方式将是该行的预测。具有可变目标(包括调用返回)的控制流指令和改变它们是否被采用的分支会导致错误预测,但这个预测器的准确性通常很高。
现代高性能处理器主要使用方式预测来减少访问能量,同时保持快速访问。由于支持 32 字节缓存访问(例如,对于 AVX)和快速未对齐负载(这实际上使访问大小翻倍),并行读取八路数据和(通常)仅读取一种数据之间的能量差异很大. 由于需要读取和比较 µtag,因此节省的标签读取和比较能量有所减少。(请注意,放宽 TLB 的延迟约束——使用物理标签和权限标签的命中确认可以发生在执行单元已经使用预测的数据方式之后——也可以用来减少访问能量或增加 TLB 容量。)
直接映射缓存由于不必在将数据转发到执行单元之前选择正确的方式而获得了延迟优势。选择正确的方式包括标签比较和多路复用器选择本身。但是,如果方式确定(或预测)延迟小于数据访问延迟,则组关联性的唯一增加延迟是“预热”多路复用器的传递延迟。由于标签数组比数据数组小得多,因此它们的访问延迟要小得多,因此在数据本身可用之前确定路径更容易(尤其是使用虚拟地址标签)。(在早期的处理器中,