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