分支指令如何被错误预测并退役?
How can a branch instruction be mispredicted AND retired?
Intel 有一个名为:
的硬件事件计数器
BR_MISP_RETIRED.ALL_BRANCHES
描述中说:
Mispredicted macro branch instructions retired.
但是 已停用 说明是正确需要的说明:
Modern processors execute much more instructions that the program flow
needs. This is called "speculative execution".
Then the instructions that were "proven" as indeed needed by flow are
"retired".
https://software.intel.com/en-us/forums/topic/311170
那么分支 错误预测 指令如何也被证明是需要的?
无序机器通过同时推测过去的多个分支来工作。当发现分支被错误预测时,CPU 将清除任何不需要的状态并 return 执行该指令,以便采用正确的路径。
因此,虽然许多推测执行的指令(包括分支)被丢弃,但导致 错误预测分支的单个指令却没有。该分支指令在预测错误后生效并退出。
这个计数器好像记录了这样的指令。
Intel 有一个名为:
的硬件事件计数器BR_MISP_RETIRED.ALL_BRANCHES
描述中说:
Mispredicted macro branch instructions retired.
但是 已停用 说明是正确需要的说明:
Modern processors execute much more instructions that the program flow needs. This is called "speculative execution".
Then the instructions that were "proven" as indeed needed by flow are "retired".
https://software.intel.com/en-us/forums/topic/311170
那么分支 错误预测 指令如何也被证明是需要的?
无序机器通过同时推测过去的多个分支来工作。当发现分支被错误预测时,CPU 将清除任何不需要的状态并 return 执行该指令,以便采用正确的路径。
因此,虽然许多推测执行的指令(包括分支)被丢弃,但导致 错误预测分支的单个指令却没有。该分支指令在预测错误后生效并退出。
这个计数器好像记录了这样的指令。