上一节介绍分支预测的作用和相关指令分类。本节主要介绍常用的分支预测算法
(一)预测算法分类:
当CPU碰到跳转指令时,可以选择以下三种方法:
-
不预测,将流水线停滞,等到方向确定了再取接下来的指令;
-
固定往左或者往右,如果走错了,则返回岔路口; 简称静态预测
-
将岔路口信息记下来,以后就可以预测它大概率往哪儿走;简称动态预测
这三种方法都是CPU常用的一些手段,在流水线和超标量CPU诞生前,通常采用方法1将流水线停滞;在一些微控制器领域,通常为了节省功耗,采用方法2静态预测方式;在高性能CPU领域,通常以动态预测为主,并结合静态预测,以达到较高的准确度,提升cpu性能。接下来部分主要介绍动态预测算法。
(二)动态预测方法
上一节讲述到,预测的核心问题有两个:跳不跳?跳到哪里?下面介绍2-bit饱和计数器和Gshare,tage来解决跳不跳问题,btb来解决跳到哪里的问题。
2- bit 饱和计数器:
所谓2-bit计数器,即每条指令PC,通过一个2-bit的计数器,记录历史跳转情况:
(1)2-bit所能记录的数字包含00/01/10/11。
(2)分支实际跳转一次,计数器+1,不跳转,则-1。