结构特点
- 由多个预测表组成,每个表由PC和不同长度的历史和指令地址共同索引。其中历史长度呈几何级数,即。
- 最终的预测通过加法树得出。
- 在GEHL的基础上增加动态历史长度自适应和阈值调整
预测
- 预测器表将预测结果存储为符号饱和计数器 。
- 预测跳转取决于计数器之和S的符号,若S≥0则跳转,否则不跳转。
预测器更新
- 在预测错误或|S|小于阈值时更新 。
- 预测正确时 递增,否则递减。
动态历史长度自适应
基于对表 T7 上更新时的混叠率的粗略估计,采取动态选择历史长度以索引预测器的算法。
例如,一个O-GEHL有8个表,11种历史长度,使其中三个表对应两种可用的历史长度,即T2:L(2),L(8);T4:L(4),L(9);T6:L(6),L(10)。表 T7 是除了 L(8)、L(9) 和 L(10) 以外使用最长历史间隔的预测器组件。 直观地说,如果表 T7 出现高度混叠,则应在表 2、4 和 6 上使用短历史; 另一方面,如果表 T7 遇到低度混叠,则应使用长历史记录。
动态估计T7的混叠率:在T7的某些项上增加 tag-bit,用一个单独的9-bit 饱和计数器AC,
在预测器更新时,tag-bit 记录分支pc的一位(最低位),然后执行以下算法:
if((p!=out)&(|S|≤θ))
{
if((PC&1)==Tag[indexT[7]])
AC++;
else AC=AC-4;
if(AC==SaturatedPositive) Use Long Histories
if(AC==SaturatedNegative) Use Short Histories
Tag[indexT[7]]=(PC&1);
}
当使用相同的(分支,历史)对对执行表 T7 中相应条目最后更新时,AC 递增。 当最后一次更新由另一个(分支,历史)对执行时,AC 减少 4。
自适应阈值
对于不同的应用阈值不同,且对于大多数benchmark,阈值的质量与错误预测的更新次数和正确预测的更新次数的相对比率之间存在很强的相关性:当二者在同一范围内时,是基准的最佳可能阈值之一。
基于此,采用一个7-bit 饱和计数器TC,提出如下阈值自适应算法(没太懂):
if((p!=out))
{
TC=TC+1;
if(TC==SaturatedPositive)
θ=θ+1;TC=0;
}
if((p==out)&(|s|≤θ))
{
TC=TC-1;
if(TC==SaturatedNegative)
θ=θ-1;TC=0;
}
预测时间和硬件逻辑复杂度
预测器响应时间 = 计算索引时间 + 读取预测表时间 + 预测计算逻辑
由于预测计算逻辑更为复杂,因此相比传统预测器,O-GEHL预测器的预测响应时间更长。
由于维护推测性局部历史的硬件设计和实现在深度流水线处理器上是非常复杂的,因此只利用了全局历史。
性能评估
4-组件 O-GEHL、8-组件 O-GEHL、2bcgskew、基于路径的神经预测器