方向预测包括静态预测(见带条件的分支预测(一))和动态预测,下面将对动态预测进行进行介绍。
动态预测是指依赖已经执行过的历史信息和分支指令本身的信息综合进行“方向”预测。
最简单的分支方向动态预测器为一位饱和计数器(1-bit saturating counter),每次分支指令执行之后,便使用此计数器记录上次的方向。其预测机制是下一次分支指令永远采用上一次记录的“方向”作为本次预测的方向。
一位饱和计数器的结构最简单,但是预测精度不如两位饱和计数器。
两位饱和计数器是最常见的分支方向动态预测器,每次分支指令执行之后,其对应的状态机转换如下图所示:
当目前状态为强不需要跳转或者弱不需要跳转时,预测该指令的方向为不需要跳转;当目前状态为弱需要跳转或者强需要跳转时,预测该指令的方向为需要跳转。
每次预测出错之后便会向着相反的方向更改状态机状态,例如:如果当前状