分支预测怎么知道自己猜错了


分支预测如果猜对了可以调高执行效率,如果猜错了要回滚,我的问题是机器是如何知道自己猜错了?

组成原理 体系结构 深入理解计算机系统 编译器

月刊酱油君 10 years, 7 months ago

分支预测 并不是说不预测的那个分支就扔了!!!

理解分支预测就需要理解 流水线技术 。宏观上看做单元操作的一条CPU指令,事实上需要经过n个过程来完成(举例:读取、解码、执行、写回)。如果一个命令有n个操作,而真的一个命令完全执行了,再去开始下一条命令……则同时只有1个硬件动作,硬件的利用率和时间效率都是1/n。

所以流水线技术就是说第1条命令的动作2开始的时候,第2条命令的动作1也同步开始,以此类推。这样硬件可以全部被同时利用。

这种操作在顺序执行的时候没说的,但在遇到条件判断时,由于跳转指令没做完, 不知道下一条语句是什么 ,本来流水线是没法继续的(必须等待)。分支预测器就是在此时赌一个分支,按照这个分支跑下去,哪怕暂时牺牲后边语句的正确性,也要让流水线一直保证占满。

但是此时流水线最前边的 判断语句,仍然是在运行中的 !当判断语句运行完毕之后,分支预测器比较自己的预测和语句实际运行的结果,当然就知道自己猜错了。

此时清空流水线把错误的执行结果全部扔掉(倒车操作),就可以让程序继续执行下去。

大致如此,定性回答。

Basho answered 10 years, 7 months ago

Your Answer