计算机体系结构--条件分支预测

静态条件分支预测

支路预测方案可分为静态方案和动态方案。静态方法通常由编译器执行。它们是静态的,因为预测在程序执行之前就已经知道了。一些静态预测方案包括:

  • 预测所有要采取的分支。这利用了大多数分支被取走的观察结果。这种原始的机制产生60%到70%的精确度。
  • 使用分支的方向来进行预测。预测要采取的向后分支(减少PC的分支)和不采取的向前分支(增加PC的分支)。在一些商用处理器中可以发现这种机制作为一种次要机制。
  • 分析也可以用来预测分支的结果。如果给定的分支可能被采取或不采取,则程序的先前运行用于收集信息,并且该信息被包括在分支的操作码中(一位分支方向hint)。

动态条件分支预测

动态分支预测方案不同于静态机制,因为它们使用分支的运行时行为来做出比使用静态预测可能做出的更精确的预测。
通常,关于给定分支(分支历史)以前发生的结果的信息被用来预测当前发生的结果。提出的一些动态分支预测机制包括:

  • 一级二元:使用分支历史表(BHT),这是一个通常由两位饱和计数器组成的表,由分支地址的一部分(地址的低位)索引。

  • 两级自适应分支预测。

  • McFarlings共享二级预测(gshare)。

  • 混合或锦标赛预测器:使用两个或更多(通常是两个)分支预测机制的组合。
    为了将正确预测的已取分支所产生的停滞周期减少到零周期,将包括已取的条件分支及其目标的地址的分支目标缓冲器(BTB)添加到取址阶段。

Branch Target Buffer

  • 高效的转移预测需要尽早知道转移目标
  • 一旦分支指令被解码,就可以使用额外的加法器来计算目标。这将意味着必须等待到ID阶段,才能获取分支的目标,获取的分支将具有一个周期的惩罚
  • 为了避免这个问题,可以使用分支目标缓冲区(BTB)。典型的BTB是一种关联存储器,其中所取分支指令的地址与它们的目标地址一起存储。
  • 一些设计也存储n个预测位,实现组合的BTB和分支历史表(BHT)。
  • 从存储在BTB中的目标中提取指令,以防在BTB中预测并找到分支。在分支被解析之后,BTB被更新。如果第一次遇到分支,则会在解析分支后创建一个新条目。
  • 分支目标指令高速缓存(BTIC):BTB的一种变体,它除了缓存地址外,还缓存分支目标指令的代码。这消除了从指令高速缓存或从存储器中获取目标指令的需要。

硬件动态分支预测

最简单的方法:

  • 由分支指令的低位地址位索引的分支预测缓冲器或分支历史表(BHT)。

  • 每个缓冲区位置(或BHT条目)包含一个位,指示分支最近是否被取走。

  • 在第一次和最后一次循环迭代中总是错误预测。

为了提高预测精度,使用两位预测:

  • 预测必须错过两次才能更改。

  • 二位预测是N位饱和计数器在取支路时递增,否则递减的一种特殊情况。

  • 基于两位BHT预测的性能与N位预测器的性能相当的观察,通常总是使用两位预测计数器。

一级二元分支预测

一级二元分支预测仅使用分支历史的一个级别。
这些机制通常采用由分支地址的低位索引的表。
表项由n个历史位组成,它们形成一个n位自动机或饱和计数器。
Smith提出了这样一种方案,称为Smith算法,它使用一个两位饱和计数器表。
在文献中很少发现超过3个历史位元的使用。
这种机制有两种变化:

  • 解码历史表:由直接映射的条目组成。
  • 分支历史表(BHT):将分支地址存储为标记。它是关联的,通过将指令地址与表中存储的分支地址进行比较(类似于BTB),可以在中频期间识别分支指令。

解码历史表(DHT)

分支历史表(BHT)

两位分支预测

相关分支(Correlating Branches)

最近的分支可能是相关的:最近执行的分支的行为影响当前分支的预测。

分支B3与分支B1,B2相关。如果B1,B2都不取,则取B3。仅使用一个分支的行为无法检测到此行为。

两级相关动态GAp分支预测

通过使用两个层次的分支历史记录,不仅查看相关问题的分支的历史记录,而且查看其他分支的历史记录,改进分支预测。
使用两个级别的分支历史记录:
第一级(全局):

  • 记录最近执行的m个分支的全局模式或历史记录,作为采取或不采取。通常是M位移位寄存器。
    第二级(每个分行地址):
  • 2的m次方个预测表,每个表项具有n位饱和计数器。
  • 利用第一级的分支历史模式在第二级中选择合适的分支预测表。
  • 分支地址的低N位用于选择所选表内的正确预测条目,因此2的m次方个表中的每个表具有2的N次方个条目,并且每个条目是2位计数器。
  • 第二级的大小为2的m次方n2的N次方 ,n为二级表中有多少位,2的N次方表示二级表有多少个入口项,m表示有多少位用于第一级
    使用GAp(m,n)来表示

MCFarling’s gshare Predictor

McFarling指出,使用全局历史信息可能比简单地使用分支指令的地址效率低,特别是对于小型预测器。
他建议通过将全局历史和分支地址散列在一起来同时使用它们。他建议使用全局分支历史和分支地址的异或,因为他希望这个值比它的任何一个组件具有更多的信息。结果是,这种机制比GAp方案的性能要好得多。
这种机制使用的硬件比GAp少,因为分支(第一级)和模式历史(第二级)都是全局保存的。
k个历史位的硬件成本为k+2 x 2^k位,忽略逻辑成本。

Hybrid or Tournament Predictors

混合预测器是两个或更多分支预测机制的简单组合。
这种方法考虑到不同的机制对于不同的分支场景可能执行得最好。
McFarling提出了两种分支预测机制的多种不同组合。
他建议使用额外的2位计数器选择器阵列,用于为每个分支选择适当的预测器。
为较高的两个计数选择一个预测器,为较低的两个计数选择第二个预测器。
如果第一个预测器是错误的,而第二个预测器是正确的,则计数器递减;如果第一个预测器是正确的,而第二个预测器是错误的,则计数器递增。如果两个预测器都正确或错误,则不执行任何更改。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值