投机与预测的区别

22
在计算机体系结构中,分支预测和乱序执行有何区别?
这两个概念看起来非常相似,但它们之间存在微妙的区别。分支预测是一种技术,用于在程序执行过程中猜测下一个指令是否需要进行跳转操作,从而提高指令执行效率。而乱序执行是通过对指令进行重排列,以最大化指令级并行度,从而实现更高的性能。
请注意保留原文的HTML标签格式。
3个回答

26

分支预测是处理器尝试确定在条件跳转之后执行会继续到哪里,以便它可以从内存中读取下一条指令。

而投机执行则更进一步,确定执行下一条指令的结果将会是什么。如果分支预测是正确的,则使用该结果,否则将被舍弃。

需要注意的是,即使代码中没有实际的条件分支,也可以应用投机执行。处理器可以从通常会连续执行的几条指令中确定结果,但执行可能会因算术溢出中断而停止。


3
如果你想要推测性地做一些事情,通过准确预测需要推测的方向,可以增加推测行为成功的概率。在某些情况下,预测是微不足道的(例如预测负载/存储不会出现段错误)。在其他情况下,预测则比较困难(如分支预测)。无论哪种情况,当出现异常时,你都需要能够恢复/放弃推测计算。
可以通过同时从分支的两个方向上推测执行指令,并仅保留找到正确路径后的结果来进行推测,而不进行预测。目前的硬件尚未利用此方法用于分支,但对于类似并行解码x86指令等较小规模的东西,同样会发生这种情况。解码器从每个可能的指令边界开始解码,只有在上一个指令的解码确定其长度后,才会找到正确的起始位置。

0

虽然我是编程和计算机科学的新手,但这是我的结论。这两种“技术”的目的都是保持流水线填充,防止资源浪费。当处理器遇到条件测试指令时,通常您会期望它在继续执行下一条指令之前等待条件被测试。

在推测执行中,您无论如何都会执行该指令,希望条件测试为TRUE,而不是停滞流水线并损害资源。否则,您只需丢弃结果。

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

希望这能澄清事情。我从这里和我这个学期参加的课程中获得了信息。 http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接