该平台通过对n条指令进行预测,来分析并统计分支预测器对于n条指令的预测情况,也就是一个周期取出n条指令的情况,这里相当于是使用了n个分支预测器来对n条指令进行预测,那么针对这一情况的仿真,首先是想到了两个思路。
首先将TAGE分支预测器的预测表复制了n份,然后根据分支指令的PC来确定其使用哪个预测表进行预测,预测后进行统计,然后再处理下一条分支指令,这就相当于是串行化了仿真的过程,根据这一思路我编写了master节点的程序。
由于取值是n条指令,那么就根据trace的PC按顺序地确定一次最多可以放进同一个预测周期的所有分支指令,例如这里有连续的两条分支指令的地址是在这n条指令的范围之内的,那么就同时将这两条指令送入相应的TAGE预测表进行预测,然后根据指令执行的顺序看第一条分支指令是否发生了跳转,倘若发生了跳转,则进入跳转的地址进行预测,然后必然会执行回同一个地方的第二条分支指令,那么在这个地址的下一次预测时,第一条分支指令所在分支指令的更新跳转值应当为不跳转,以此递进,直到预测完这n条指令中的所有分支指令之后,继续预测最后一条分支指令到trace中的下一条分支指令之间的普通指令,执行完后判断从下一条分支指令开始有几条分支指令可以在同一个周期中进行预测,一次递推完成所有的分支指令的预测。
这一方法相比于思路一的方案更加地贴近于实际的执行情况,但是也并不能完全地说其模拟了实际的情况,因为在实际的处理器中,会存在预测错误后的时间惩罚,以及各种中断和错误造成的延迟,这一方案只是演示了其按照完全预测正确的情况下的执行路径下进行预测的情况,以及统计了该情况下的预测结果,因此相比于思路一,虽然其更加贴近实际情况,但是其也更加复杂,由于程序较为复杂,所以暂时不能保证其程序的正确性。在该仓库中,其为名为simultaneous的分支。