大家好,我们团队的名字是 真芯为你,参赛编号是CICC2886。本次分享内容为基于全局分支历史的ghare分支预测器。
分支目标缓冲器BTB
分支历史寄存器BHR
方式历史寄存器PHT
对于某个条件分支指令而言,其全局历史是相对恒定的,让PHT同时保存全局历史的所有组合过于浪费,因此将指令地址的中部与全局历史记录进行异或运算,而当指令地址的中部相同时,指令地址下部对应的指令共用几个PHT项,这样兼顾了长全局历史表与PHT大小,改良了传统分支历史分支预测方法中PHT利用效率太差的问题。上图中12bit的全局历史记录与6bit的指令地址下部作为PHT的索引使用。这种方法虽然使用了全局历史记录,但由于多个条件分支指令共享了一个PHT,因此该方法被称作“Gshare方法”。
分支目标缓冲器(Branch Target Buffer,BTB)是一个用于存储分支指令地址和目标地址的高速缓存,其常见于超标量处理器中,主要用于提高分支预测器的性能,因为它可以在分支指令的地址与BTB中存储的地址匹配时,直接从BTB中获取目标地址,从而避免了访问内存的开销
每一位存储历史分支跳转指令的跳转方向,用于与PC部分位结合,作为地址索引PHT.
储存2的十次方个2-bit饱和计数器。
饱和计数器(saturating counter)或者称双模态预测器(bimodal predictor)是一种有4个状态的状态机:
当一个分支命令被求值,对应的状态机被修改。分支不采纳,则向“强不选择”方向降低状态值;如果分支被采纳,则向“强选择”方向提高状态值。这种方法的优点是,该条件分支指令必须连续选择某条分支两次,才能从强状态翻转,从而改变了预测的分支。
根据上述的GShare分支预测原理,我们可以大致将GShare分支预测器分为两个部分,一个模块用于预测分支跳转的方向,另一个模块则用于预测分支跳转的目标地址。若要在蜂鸟E203内核中完整地插入这一分支预测器,需要修改e203_ifu_ifetch模块与e203_ifu_litebpu模块。
上图为gshare结构框图
如图,我们在预测器中添加了两个计数寄存器,分别用于记录条件分支指令个数branch_num和预测失败次数prmiss_num。
上图为运行coremark测试程序的波形图,最后预测成功率超过百分之九十。而初始版本的E203处理器预测成功率仅46%。
可见采用基于全局分支历史的ghare分支预测器对分支预测成功率有极大的提升。