推测和预测之间的差异

时间:2012-08-13 07:55:20

标签: cpu-architecture prediction speculative-execution

在计算机架构中,

(分支)预测和推测之间有什么区别?

这些似乎非常相似,但我认为它们之间有一个微妙的区别。

3 个答案:

答案 0 :(得分:20)

分支预测由处理器完成,以尝试确定在条件跳转后执行将继续的位置,以便它可以从内存中读取下一条指令。

推测执行更进一步,确定执行下一条指令的结果。如果分支预测正确,则使用结果,否则将其丢弃。

请注意,即使代码中没有实际的条件分支,也可以应用推测执行。处理器可以确定通常会连续执行的几条指令的结果,但执行可以通过例如算术溢出中断来停止。

答案 1 :(得分:2)

如果你想推测性地做某事,你可以通过准确预测要推测的路径来增加它有用的机会。

在某些情况下,预测是微不足道的(例如预测加载/存储赢得了段错误)。在其他情况下,它很难(分支预测)。

在任何一种情况下,如果发生异常,您需要能够恢复/丢弃推测计算。

可以通过从分支的两个方向推测性地执行指令来推测没有预测,并且仅保留后来发现的路径的结果是正确的路径。

当前的硬件并没有将它用于分支,但是对于像x86指令的并行解码这样的东西,在相当小的局部范围内发生同样的事情。解码器在每个可能的指令边界开始解码,只有在前一条指令的解码确定长度后才能找出哪个起始位置是正确的。

答案 2 :(得分:0)

我是编程和计算机科学的小伙子,但这是我的结论。这两种“技术”的目的是保持管道填充,防止资源浪费。当处理器遇到条件测试指令时,通常你会期望它等到条件测试完毕后再继续下一条指令。

在推测性执行中,你执行指令仍然“希望”条件测试为TRUE,而不是拖延管道并损害资源。否则你只是丢弃结果。

在分支预测中,您更进一步,根据条件测试的过去结果预测条件是否为真。(您预测程序将分支的方向)。

希望能够解决问题。从这里得到了信息,这是我本学期的课程。 http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html