O-GEHL预测器 “Analysis of the O-GEometric History Length branch predictor”

结构特点

  • 由多个预测表组成,每个表由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。 

自适应阈值

对于不同的应用阈值\theta不同,且对于大多数benchmark,阈值的质量与错误预测的更新次数NU_{miss}正确预测的更新次数NU_{correct}的相对比率之间存在很强的相关性:当二者在同一范围内时,\theta是基准的最佳可能阈值之一。

 基于此,采用一个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、基于路径的神经预测器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值