分支预测技术是CPU体系结构(architecture)中的知识点,用于提高指令(instruction)的执行效率。本篇博文是对网络上相关信息的总结,以备后续查阅使用。

1 为什么要采用分支预测

CPU的指令流水线(instruction pipeline)会假设程序运行时有一连串指令要被运行,将程序运行划分成几个阶段,按照一定的顺序并行处理,这样能够加速指令的通过速度。

分支预测器(branch predictor)是一种数字电路,在分支执行前,猜测哪一个分支会被执行,能明显提高流水线的性能。

2 分支预测的具体表现

对于分支预测的性能比较,stackoverflow 上有一个很好的例子,可以在 stackoverflow - why sorted array is faster 查看。

由于使用了分支预测,由此带来的性能损耗主要出现在分支预测出错的情况。分支预测的错误次数越多,程序的效率损耗越大。

if else 语句会产生分支预测。而 switch 语句实际上是索引行为,并不会进行分支预测。某些switch条件如果概率比较高,可以考虑单独提前 if 判断,充分利用 CPU 的分支预测机制。