ITTAGE分支预测

1. 什么是ITTAGE分支预测

   在分支目标预测中,如果分支指令是直接跳转指令,其目标地址根据当前PC和偏移值确定,偏移值以立即数的形式编码在指令中,因此其目标地址固定,只需使用分支目标缓存BTB(Branch Target Buffer)记录下它的目标地址,当下一次预测该分支指令时,根据指令 PC 检索这个表就可获得预测的目标地址。
   对于间接分支指令,通常会存在一个或多个跳转目标地址,仅采用指令 PC 索引的BTB 一般难以达到很好的预测效果。ITTAGE(Indirect Target TAgged GEnometric legnth)分支预测器便是当前最主流的间接分支预测器之一。

2. ITTAGE分支预测器结构

   ITTAGE 预测器的组成结构和工作机制与 TAGE 预测器相类似。主要由 1 个无标签的组件 I T 0 IT_0 IT0 、N 个 带标签的组件( I T 1 IT_1 IT1 ~ I T N IT_N ITN)和 1 个全局历史寄存器(GHR)构成。这些tagged预测器组件使用不同长度的分支历史进行索引,形成一个几何级数,即 L ( i ) = ( i n t ) ( a i − 1 ∗ L ( 1 ) + 0.5 ) L(i) = (int)(a^{i-1}*L(1)+0.5) L(i)=(int)(ai1L(1)+0.5)
   I T 0 IT_0 IT0是由pc索引的基础预测器,可以是BTB。 I T i IT_i ITi的entry包含目标地址Targ、2bit的置信位c、分支指令的标签tag,以及2bit的无符号useful计数器 u 。在TAGE中表示预测的计数器被完整的目标地址Targ和置信位c所取代了,c的作用是获得预测器上的一些迟滞(如何理解)
在这里插入图片描述

3. ITTAGE预测原理

   预测选择算法直接继承了TAGE的算法。 选择tag命中的具有最长历史的组件的预测结果,如果没有tag命中则采用基础预测器的预测结果。
   同样遵循了对弱置信度组件的选择规则:当tag匹配的项的置信度计数器为0时,altpred有时比正常预测更准确。因此在实现中使用一个4-bit计数器(USE ALT ON NA)动态监测这一点[2011文献](TAGE原文中对TAGE算法的处理是根据u为0/null且预测计数器的值为weak(weak not taken或者weak taken)判断)。
   总结就是:

  1. 找到最长匹配的组件和替代组件;
  2. 如果置信度计数器为非null或Use ALT ON NA为负,则使用provider组件提供的预测结果,否则使用替代组件提供的结果。

4. ITTAGE更新算法

   预测器更新算法也继承自TAGE更新算法,不过在命中但错误预测的情况下,对基础预测器和带标签组件的目标地址的替换是通过单个置信度bit来控制的。

  1. 正确预测时更新
       提供正确预测结果的组件的置信度计数器增加。
  2. 错误预测时更新
       首先会更新提供预测结果的组件。如果置信度计数器为非null,则将其递减;如果置信度计数器为null,则用分支的有效target替换预测器entry中的target。
       第二步,如果提供预测的 T i T_i Ti不是使用最长历史的组件(即i<M),就尝试分配使用比 T i T_i Ti更长历史的预测器组件 T k T_k Tk的条目(即i<k<M)。因为,可分配的组件所需的存储可能是很大的,设定最多分配其中3个条目。对于较小的预测器,可以尝试通过分配单个预测器条目来限制应用在预测器上的扰动。读取 T i + 1 T_{i+1} Ti+1 T M − 1 T_{M-1} TM1的对应项(M-i-1个)的 u值,分配算法选择最多四个有用位为0/null的条目,并且保证这些条目不在连续的表中。在分配的条目上,置信度计数器设置为weak,有用位设置为null。(与TAGE一致)
  3. 更新有用位u
       当实际预测正确并且altpred预测不正确时,提供预测结果的组件的有用位u就会更新TAGE中是当altpred与最终的预测结果pred不同时,provider组件的useful计数器会被更新,2011文献中表示似乎不合理)。为了避免u永远处于设置状态(条目永远被标记为useful),实施以下复位策略。
       分配新项时,动态监测在错误预测后试图分配新项时成功和失败的次数。该监测由一个8-bit计数器(TICK)表征(u=1,递增,u=0,递减)如何理解?在选择的M-i-1个组件中,成功分配次数和失败分配次数?——应该是在错误预测时尝试寻找组件 T k T_k Tk分配条目,但是如果没有找到满足条件的条目(u=0),就算是分配失败),当失败的次数超过成功的次数时,计数器饱和,重置该预测器的所有u值。通常,当预测器的条目中有平均一半被设置为useful时,就会发生这样的全局复位。这种简单的策略比TAGE原文提出的对TAGE预测器的useful计数器的更新更有效。[2011文献]

参考资料:
1.《A case for (partially) TAgged GEometric history length branch prediction—2006
2.《A 64-Kbytes ITTAGE indirect branch predictor—2011》(2011文献)
3.《基于 RISC-V 处理器的分支预测研究与设计—2022

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值