分支预测怎么知道自己猜错了
分支预测如果猜对了可以调高执行效率,如果猜错了要回滚,我的问题是机器是如何知道自己猜错了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
分支预测如果猜对了可以调高执行效率,如果猜错了要回滚,我的问题是机器是如何知道自己猜错了?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
分支预测并不是说不预测的那个分支就扔了!!!
理解分支预测就需要理解流水线技术。宏观上看做单元操作的一条CPU指令,事实上需要经过n个过程来完成(举例:读取、解码、执行、写回)。如果一个命令有n个操作,而真的一个命令完全执行了,再去开始下一条命令……则同时只有1个硬件动作,硬件的利用率和时间效率都是1/n。
所以流水线技术就是说第1条命令的动作2开始的时候,第2条命令的动作1也同步开始,以此类推。这样硬件可以全部被同时利用。
这种操作在顺序执行的时候没说的,但在遇到条件判断时,由于跳转指令没做完,不知道下一条语句是什么,本来流水线是没法继续的(必须等待)。分支预测器就是在此时赌一个分支,按照这个分支跑下去,哪怕暂时牺牲后边语句的正确性,也要让流水线一直保证占满。
但是此时流水线最前边的判断语句,仍然是在运行中的!当判断语句运行完毕之后,分支预测器比较自己的预测和语句实际运行的结果,当然就知道自己猜错了。
此时清空流水线把错误的执行结果全部扔掉(倒车操作),就可以让程序继续执行下去。
大致如此,定性回答。