参考《超标量处理器设计》
超标量处理器根据去指令的地址,从I-Cache中取出多条指令,这些指令组成指令组(fetch group),处理器根据指令组中指令的个数,调整取指令的地址,进行下个周期的取指令。
超标量处理器中的取指令的地址不连续,每次增加的值等于指令组的字长,所以如果使用取指令的地址进行分支预测,就只对指令组的第一条指令进行了分支预测。
BTB需要几下分支指令在四条指令中的位置(4way超标量处理器)
当前周期取出的质量不包括分支指令,BTB记录下01即分支指令的偏移值,若四字对齐的四条指令中存在多于一条的分支指令,它们会互相干扰。
上述局限于指令出现在四字对齐的边界内,如果可以对一个周期的所有指令做分支预测,情况如下
这种情况BTB需要四个读端口,硬件利用效率低,不采用上述方法。
1.目标地址预测
对于RISC指令集,可以在取指阶段马上进行目标地址的计算不必进行目标地址的预测,需要在I-Cache取出时马上识别出分支指令,可以在进入I-Cache之前进行预解码,如果遇到间接跳转的指令,此时无法对目标地址进行预测。
2.分支方向预测
基于局部历史的分支预测,需要PHT和BHT支持多端口,可以通过交叠的方式模拟多端口
基于全局历史的分支预测,考虑多条指令的GHR不一样,所以不能简单的模拟。
3.交叠
使用但端口存储器模拟多端口的结构
若寻址PHT的地址由哈希运算产生,要保证每周期寻址PHT的四个地址落在不同的bank上,否则会产生bank冲突。
可以将每条指令PC值的[3:2](PC需要字对齐)作为寻址的低位部分,这样可以保证四个地址寻址到四个不同的bank。
交叠的优点:避免真正使用多端口存储器而对芯片面积、功耗和延迟造成负面的影响。
大部分多端口功能部件如ROB、发射队列(Issue Queue)和指令缓存(Instruction Buffer)等部件。