Answers
分支预测 并不是说不预测的那个分支就扔了!!!
理解分支预测就需要理解 流水线技术 。宏观上看做单元操作的一条CPU指令,事实上需要经过n个过程来完成(举例:读取、解码、执行、写回)。如果一个命令有n个操作,而真的一个命令完全执行了,再去开始下一条命令……则同时只有1个硬件动作,硬件的利用率和时间效率都是1/n。
所以流水线技术就是说第1条命令的动作2开始的时候,第2条命令的动作1也同步开始,以此类推。这样硬件可以全部被同时利用。
这种操作在顺序执行的时候没说的,但在遇到条件判断时,由于跳转指令没做完, 不知道下一条语句是什么 ,本来流水线是没法继续的(必须等待)。分支预测器就是在此时赌一个分支,按照这个分支跑下去,哪怕暂时牺牲后边语句的正确性,也要让流水线一直保证占满。
但是此时流水线最前边的 判断语句,仍然是在运行中的 !当判断语句运行完毕之后,分支预测器比较自己的预测和语句实际运行的结果,当然就知道自己猜错了。
此时清空流水线把错误的执行结果全部扔掉(倒车操作),就可以让程序继续执行下去。
大致如此,定性回答。
Basho
answered 11 years, 2 months ago