静态分支预测
即总是假定分支指令跳转或不跳转,这种分支预测技术实现简单,但是命中率低。 更复杂的静态分支预测技术还包括:
- BTFN(Backward Taken,Forward Not-taken):即对于向后的指令跳转预测为跳,向前的跳转则预测为不跳。向后跳转指跳转的目标地址(PC值)比当前分支指令的PC值要小。
- Profile based(likely direction):编译器使用profile运行方式确定可能的分支方向,并编码到指令中。
- Program based (likely direction):根据ISA指令特定,对不同指令采用不同的预测方向。
- Programmer based:程序员提供静态预测,通过编译器指令指示方向。 if (likely(x)) {…} 指示较大概率是跳转 if (unlikyly(error)) {…} 指示较大概率是不跳转
定义:在程序运行时,根据分支指令过去的表现来预测其将来的行为(动态一词的由来)。 目的:预测分支是否成功,尽快找到分支目标地址(或指令),避免控制相关造成流水线停顿。在预测错误时,要作废已经预取和分析的指令,恢复现场,并从另一条分支路径重新取指令。
分支历史表BHT