4 Rocket处理器分支预测机制性能评估
4.1 评估环境
Rocket使用Chisel编写,所以可以很容易得到对应的C++模拟器,本文使用得到的C++模拟器,运行RISC-V提供的benchmark,以测试分支预测性能。默认的Rocket编译后并不会输出分支预测有关的信息,需要在rocket.scala添加如下代码。
val counter0 = WideCounter(64, mem_reg_valid && !take_pc_wb && mem_ctrl.branch)
val counter1 = WideCounter(64, mem_reg_valid && !take_pc_wb && mem_ctrl.branch && mem_wrong_npc)
printf("branch inst number[%x]\n ", counter0)
printf("misprediction branch inst number[%x]\n ", counter1)
上述代码定义了两个计数器,第一个计数器counter0,当访存阶段是分支指令的时候加1,第二个计数器counter1,当访存阶段是分支指令,且分支预测错误的时候加1,所以,上述两个计数器可以分别输出分支指令数、分支预