performance - 分支指令如何被错误预测和停用?

标签 performance optimization x86 cpu cpu-architecture

英特尔有一个硬件事件计数器,称为:

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 将清除任何不需要的状态并将执行返回到该指令,以便可以采用正确的路径。

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

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

关于performance - 分支指令如何被错误预测和停用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28258274/

相关文章:

c - 了解以下程序的程序集转储

Python - 如何有效地迭代字典的子集?

sql-server - T-SQL 的 CTE 性能不佳

javascript - 在 JavaScript 中将字符串高效解析为 float 组

c++ - 使用不同方法的置换函数的运行速度导致意外结果

assembly - ASM - 推/弹出

c - 什么是 "write to read-only page"故障?

c - 如何避免为此操作在 C 中分支

linux - 需要性能计数器信息

c - 为什么 gcc 使用 -O0 进行一些优化