你所不知道的cpu分支预测

CPU执行一条指令的简单流程

  • 取指令
  • 分析指令
  • 执行程序

我们看一下整个流程,A部件进行取指令,把指令交给B部件去分析,B部件分析完交给C部件去执行。

这里就会引发一个问题,A取完指令之后就只能等B、C去分析和执行吗?

不是的,这时A会顺序的取下一条指令,此时A、B、C部件是一个并行的运作模式。

分支预测

既然A取完一条指令会马上取下一条指令,那么如果在一个分支语句中(if-else),cpu如何知道下一条语句是什么?这时虽然cpu不知道,但是cpu会猜,如果猜对了,那么程序运行就会很顺利,否则就得重来。

分支预测优化

#define likely(x)    __builtin_expect(!!(x), 1) //x经常成立
#define unlikely(x)  __builtin_expect(!!(x), 0) //x经常不成立

c语言下的宏,主要是影响生成的汇编代码,尽可能在分支预测上选择正确的分支,以及减少跳转次数。

你可能感兴趣的:(你所不知道的cpu分支预测)