《超标量处理器》-分支预测

📅 2026/6/20 14:46:25
《超标量处理器》-分支预测
分支预测主要预测什么要不要跳转跳转的offset是多少预测是否跳转预测是否跳转主要分为两种方式静态预测和动态预测静态预测对于一个流水线较短的简单处理器一般采用静态预测的方式静态预测就是遇到分支指令的时候就默认一直是take或者一直是not take的。假如默认一直是take的。那么如果真实decode出来的是要take 的那没有什么影响。但是如果真实情况和预测的相反则要flush 掉预测的以及预测后取的所有指令重新从真实的地址取指。动态预测静态预测的方式比较简单粗暴对于流水线比较深的处理器预测错误的代价比较大因此要采用动态预测。动态预测方式有很多这里举两个简单的last-outcome prediction根据最后一次的结果进行预测比如for(i0;i1000;i) {循环体}如果用最后一次的结果预测那么执行1000次只会发生两次预测失败第一次和最后一次。但是遇到执行的分支指令是间隔着take和not take的则完全预测不准基于两位饱和计数器的分支预测根据一条分支前两次的执行的结果来预测本次的方向状态机处于饱和状态时有两次的预测失败才会改变预测的结果跳转的目标地址跳转的目标地址一般是两种存在方式立即数好处是decode的时候即可获得跳转的目标地址但是立即数作为指令的一部分出现因此bit位宽有限能跳转的范围有限间接跳转好处是能跳转的范围更广阔但是这个目标地址是存在寄存器里的寄存器可能受其他指令比如的hazard影响会延迟目标地址取出的时间