混合预测器:包括 X 个预测器和一个元预测器,每个预测器组件提供一个预测,元预测器选择一个作为最终预测。理想情况下,一个混合预测器应由于其所有组件。
2bc-gskew branch predictor:将e-gskew和一个双模态分支预测器相结合,包括四个同样的 bank,即e-gskew中的3个bank加上一个元预测器。
1 分支别名/混叠(aliasing)
1.1 什么是分支别名/混叠(aliasing)
多组分支信息向量共享预测表中的同一项,导致这些分支预测相互干扰。
1.2 分支别名分类:
【1】中根据其结果分为:destructive、harmless、constructive,其中destructive和harmless别名占绝大多数;
【2】中根据其来源分为:compulsory、conflict、capacity,其中conflict是主要来源。
- compulsory aliasing:当一个分支第一次出现时发生;
- capacity aliasing:类似于capacity cache miss,可以通过扩大预测表大小来减少。
- conflict aliasing:当两个分支映射到同一预测表项时发生。
- capacity aliasing:类似于capacity cache miss,可以通过扩大预测表大小来减少。
1.3 减少分支别名的方法
根据分类【1】减少destructive混叠的预测器:The Agree predictior、Bi-Mode predictor
根据分类【2】减少capacity混叠的预测器:The Filter mechanism
根据分类【2】减少conflict混叠的预测器:The Skewed Branch Predictor(即gskew)、e-gskew
e-gskew:在gskew的基础上,为了限制capacity混叠的影响,将其中一个表只由分支地址索引(而非地址和全局历史哈希索引)。
同时减少上述混叠的方法:带有双模态表的混合预测器(YGAS预测器其实也是一种混合预测器),其中双模态表的必要性在于:(1)在上下文切换时两级自适应预测器预热期间,双模态表的预测比两级自适应预测器更准确;(2)对于具有偏置性的分支,双模态表用于选择出正确的预测结果,该表出现破坏性混叠的可能性低于两级预测器。
2 2bc-gskew:结合e-gskew 和一个双模态预测器
为什么提出该预测器?
同等硬件预算下,混合预测器相比单一预测器可获得更高的预测准确率,上述那些“de-aliased”的预测器则是组件首选。
2.1 结构
2bc-gskew 共包括四个 2-bit 计数器 bank:BIM、G0、G1、Meta。
bank BIM:双模态预测器,也是e-gskew预测器的一部分;
bank G0/G1:e-gskew的另外两个bank;
bank Meta:元预测器。对于较小的预测器,使用分支地址索引;对于中型/大型预测器,使用分支历史和分支地址共同索引更有效。
2.2 部分更新
1. 预测错误时,e-gskew 预测器的三个 bank 都需要更新;
2. 预测正确时,只有参与正确预测的 bank 被更新。即,如果被选择的预测器是双模态预测器,则只更新 bank BIM ;如果被选择的预测器是e-gskew预测器,则只更新提供了正确预测的bank。
3. 元预测器只有当两个预测器预测结果不同时更新。
参考文献
【1】A comparative analysis of schemes for correlated branch prediction.
【2】Trading conflict and capacity aliasing in conditional branch predictors.