分支指令如何会被错误预测并退出?

use*_*112 5 cpu optimization performance x86 cpu-architecture

Intel 有一个硬件事件计数器,称为:

BR_MISP_RETIRED.ALL_BRANCHES

其中描述说:

错误预测的宏分支指令已停用。

已退役的指令是那些正确要求的指令:

现代处理器执行程序流程所需的更多指令。这称为“推测执行”。

然后,那些被“证明”为流程确实需要的指令将被“淘汰”。

https://software.intel.com/en-us/forums/topic/311170

那么如何才能按需证明分支预测错误指令呢?

gsg*_*gsg 4

无序机器通过同时推测过去的多个分支来工作。当发现分支被错误预测时,CPU 将清除任何不需要的状态并将执行返回到该指令,以便可以采取正确的路径。

因此,虽然许多推测执行的指令(包括分支)被丢弃,但导致错误预测分支的单个指令却没有被丢弃。该分支指令生效并在被错误预测后被停用。

这个计数器似乎记录了这样的指令。