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语言下的宏,主要是影响生成的汇编代码,尽可能在分支预测上选择正确的分支,以及减少跳转次数。
网友评论