在计算机架构中,
(分支)预测和推测之间有什么区别?
这些似乎非常相似,但我认为它们之间有一个微妙的区别。
分支预测由处理器完成,以试图确定在条件跳转之后执行将继续的位置,以便它可以从存储器读取下一条指令。
推测执行更进一步,并确定执行下一条指令的结果。如果分支预测是正确的,则使用结果,否则将其丢弃。
请注意,即使代码中没有实际的条件分支,也可以应用推测执行。处理器可以从通常将连续执行的若干指令确定结果,但是可以例如通过算术溢出中断来停止执行。
如果你想推测性地做某事,你可以通过准确地预测要推测的路径来增加它有用的机会。
在某些情况下,预测是微不足道的(例如,预测加载/存储不会发生段错误)。在其他情况下,它很难(分支预测)。
在任何一种情况下,如果发生异常,您需要能够恢复/丢弃推测计算。
可以在没有预测的情况下推测,通过从分支的两个方向推测性地执行指令,并且仅保留来自稍后被发现为正确路径的线的结果。
当前的硬件并没有将它用于分支,但是同样的事情发生在更小的本地规模上,例如x86指令的并行解码。解码器在每个可能的指令边界处开始解码,并且只有在前一指令的解码确定长度时才找出哪个开始位置是正确的。
我是编程和计算机科学的小伙子,但这是我的结论。这两种“技术”的目的是保持管道填充,防止资源浪费。当处理器遇到条件测试指令时,通常您会期望它等到条件测试完毕后再继续执行下一条指令。
在推测性执行中,你执行指令反正“希望”条件测试为TRUE,而不是拖延管道并损害资源。否则你只是丢弃结果。
在分支预测中,您更进一步,根据条件测试的过去结果预测条件是否为TRUE。(您预测程序将分支的方向)。
希望这能说明问题。从这里得到了信息,这是我本学期的课程。 http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html