然后获取猜测为最有可能的分支,然后提取并 投机性地执行。如果后来检测到猜测是 错误然后推测执行或部分执行 指令被丢弃,管道以 正确的分支,导致延迟。
引文来自维基百科。
为什么总是可以丢弃已执行的指令?例如,错误预测的分支中的第一条指令syscall 0x60
的情况如何(在 Linux 上是中断:"退出程序")。我知道如果预测错误,该程序不会退出,但是CPU如何能够丢弃?
我知道每条指令(拆分为微操作)都必须停用才能完成。也许这对投机执行很重要?
推测执行通常适用于加载寄存器和分支。这些很容易被CPU使用寄存器重命名等技术绕回。
并非所有指令都可以可靠地回滚。正如您已经识别的那样,像syscall
这样的东西不能。例如,如果您进行了系统调用以删除文件,则 CPU 将无法回滚该文件!这里发生的情况是,当推测执行处于活动状态时,某些指令会导致执行"停滞",而 CPU 等待确定分支的实际结果。