在超标量的流水线架构上,我们得知,CPU 在运行指令的时候,会在一个时钟上做多个操作,也就是涉及到调用前后相关的指令,比如我们在一个简单的判断语句中。
if(n > 0)
{
n = 5;
}
else
{
n = -5;
}
在执行 if 语句的时候,一定会对判断语句执行结果后的下一条语句进行取址和译码,那么在还没有判断结果之前应该对哪一个语句进行取址呢?这就是分支预测要解决的问题。
简单说,分支预测就像我们铁路分叉口上的操作员,操作员在没有看到火车上面的转向旗帜的情况下,到底应该往哪边搬动扳手呢?
对于 CPU 来说,他做不到铁路系统中的提前通信告知,因此他只能根据历史来进行推测,提前做选择,如果选择错了,咱就让列车停下,倒回来,重新开。
因此,分支预测会出现预测失败的情况,而失败后的回滚操作非常占用时间,所以我们需要避免分支预测失败概率过大,或者说是把具有分支预测失败情况的判断放到循环内部,让失败回滚多次循环。
全部0条评论
快来发表一下你的评论吧 !