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

Akasha
  • 65

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

回复
阅读 3.6k
1 个回答
✓ 已被采纳

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

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

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

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

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

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

大致如此,定性回答。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏