3.3 利用先进的分支预测降低分支开销
3.3 利用先进的分支预测降低分支开销
前置知识:分支预测缓冲Brach-Prediction Buffer(BPB,最简单的动态分支预测)
1bit准确率不够,4K-entry 2-bits BPB准确率能够达到80%以上,且与无限entry的准确率相当。
BPB的典型实现为cache,在IF阶段PC更新后就计算目标地址,如果taken直接跳转,否则顺序执行。这也叫局部分支预测器(Local Branch Predictor),因为每条分支指令只能看到自己的历史情况。
关联分支预测器Correlating Branch Predictor
简单的BPB方案仅使用单个分支的最近行为来预测该分支的未来行为,不能联系其他分支的行为来共同预测(特别是当分支之间还有相互关联的时候,见例子“SPEC benchmark” (Hennessy 和 Patterson, p. 162))。如果我们也观察其他分支的近期行为,这可能会提高预测的准确性。因此提出了关联分支预测器(两级预测器),即使用其他分支的行为进行预测的分支预测器。
(m,n)预测器使用最后m个分支的行为从2m个分支预测器中进行选择(所以也叫全局预测器),每个分支预测器是单个分支的n位预测器。相关分支预测器的优势在于,它只需要增加少量硬件就能够可以产生比2bit BPB方案更高的预测率。
硬件开销低的分析:最近m个分支的全局历史记录在一个m位移位寄存器中,其中每bit记录该分支是否taken。然后可以使用分支指令PC低位截取与m位全局历史记录的来索引BPB。以(2,2)的预测器为例,分支指令PC截取k bits+2 bits的选择位,共同组成k+2 bits进行索引,如下图所示。
Tournament Predictors: 局部预测器与全局预测器的结合
仅使用本地信息的标准2位预测器会在一些重要分支上失败,而添加全局信息,性能可以得到改善。Tournament预测器通过使用多个预测器(通常一个基于全局,另一个基于本地)并将它们与选择器结合起来,将性能提升到了一个新的水平,可以在中等大小(8K-32Kb)下实现更好的准确性。
典型的例子是FP测试集和Int测试集对于分支的情况是不一样的,Int有40%的情况选择全局,FP有15%的情况选择全局。
全局预测与局部预测独立进行,由选择器选择其中一个方法的预测结果作为最终预测结果,对于选择器中的一个状态,如果全局预测和局部预测结果一致,状态不变;否则:对于该状态,如果局部预测正确就+1,全局预测正确就-1;
-
优点:综合全局和局部历史信息,精度较高;
-
缺点:Tournament预测器的空间占用是比较大的,因为不仅有两个预测器,还有一个选择器;