X86 microarchitecture(branch predictor)
(The microarchitecture of Intel, AMD and VIA CPUs https://www.agner.org/optimize/)
-
转移预测器
-
loop counter:如果循环次数很多,使用传统的两级预测器需要记录很长的历史信息,因此单独设计loop/switch counter。PM和Core2设计了一个6位的loop counter。
-
indirect jump/control transfer instruction:目标跳转地址超过了两个。生成indirect jump/call的情况:switch语句,函数指令,虚函数等。BTB中需要考虑到一条间接跳转指令会有多个跳转目标地址,只记录上一次的跳转目标地址已经不够使用。(switch语句的汇编讲解:https://www.cnblogs.com/ye-ming/articles/7942472.html)
-
转移预测的未来的可能方法:
- 剔除无用的转移指令,减少GHR中的噪声
- 同时译码分支的部分或者全部路径
- 神经网络。(转移预测器的存储开销随着n呈指数增长,预热时间也可能是随n指数增加)
- 减少上下文切换带来的影响
-
P1中的转移预测(Intel Pentium)
-
BTB:256表项,四路组相联,伪随机替换算法。每个表项包含一个饱和计数器,其中一个状态用于表示该表项尚未
-
-