计算机体系结构中的投机执行是什么?
处理器会扩展执行指令,直到条件得到解决为止。条件执行开始到等效条件解决之间的时间间隔可能会发生显著变化。条件在紧接着的周期内得到解决。
当指定的条件定义一个简单操作的结果时,就会出现这种情况,包括整数加法、减法或逻辑运算。对于长操作(包括FX或FP除法),在条件可以解决之前,将有多个周期过去。
超标量处理器可以在每个周期发出多个指令。因此,在指定的条件变得可评估之前,在投机执行过程中会执行大量指令。
有两个主要方面,例如投机的级别和程度,如图所示。通过**投机的级别**,可以理解可以顺序地投机执行多个条件分支。如果第二个、第三个等等未解决的条件分支不终止投机执行,则对性能有利。对于能够发出每个周期多个指令的超标量处理器来说,这一要求更加强制。
Power2允许两个,PowerPC 620和R10000四个,α 21164多达六个挂起的条件分支。只允许一个挂起条件分支的处理器类似于基本块调度程序,该调度程序将指令调度到当前基本块结束之前的并行执行,而允许多个挂起条件分支的处理器类似于全局调度程序,超越基本块边界。
第二种方法是**投机的程度**。这个概念与在猜测的条件分支之后实现多少指令(而不是未解决的条件分支)相关。在这里,处理器采用不同的方案,如图所示。在最简单的情况下,投机执行不会超过获取属于预测路径的一些指令,例如Power1。
当预测路径上的指令被获取和解码,或者被获取、解码和调度时,就会发现更高的投机程度,例如在PowerPC 601中。即使具有高度投机性的处理器也会在挂起的条件分支之后获取、解码、调度和执行指令,尽管没有完成它们,例如在MC 88110或PowerPC 603中。
例如,MC 88110允许投机执行指令,并提供一种机制在预测错误时撤消它们。这种机制旨在为乱序执行保持顺序一致性。它基于历史缓冲区,并且可以每个周期撤消两条指令。