关联预测器
一个[m,n]预测器表示使用前m个分支行为去从2^m个分支预测中进行选择,每一个预测是对应于单个分支的n位预测器。这种相关分支预测器的吸引人之处,即在于它与两位预测器相比可以取得更高的预测率,并且只需要少量的额外硬件支持。其硬件的简单性表现在:最近m个分支的全局历史记录可以记录在一个m位移位寄存器中,每一位记录着该分支是被执行还是未被执行。对分支预测缓冲站的访问可由分支地址的低位拼接上m位全局历史记录而得到。以下是一个[2,2]预测器及如何访问预测器的例子。
下面具体实现一个[10,2]的关联预测器
[10,2]关联预测器表示使用前10个分支行为去从2^10个分支预测中进行选择,每一个预测是对应于单个分支的2位预测器。最近10个分支的全局历史可以记录在一个10位移位寄存器中,每一位记录着该分支是被执行还是未被执行。实验要求限制30K空间,即2^10*2*分支选择的入口数目=30K,得到分支选择的入口数目是15,为方便编程,近似使用16bit入口数目,即用低4位地址作为入口地址。于是,对分支预测缓冲站可由分支地址的低4位拼接上10位全局历史记录而得到。[10,2]关联预测器设计如下图所示。
2位预测期可以表示4种状态,计数器在分支执行时加1,不执行时减1;计数器在00或11时处于饱和状态。2位预测器状态转移情况如下图。
所设计的[10,2]关联预测器大小为: 2^10×2 ×16=32K bit。
Tournament预测器
Tournament预测器使用两个预测期:一个基于全局信息的Global Predictor,以及一个基于局部信息的Local Predictor,并使用一个选择器在局部预测器与全局预测器中做出选择。具体设计如下:全局预测器:使用最后12个分支跳转情况进行索引,即全局预测器也有2^12=4K个入口,每个入口都是一个标准的两位预测器。
局部预测器:设计为两层,上面一层是一个局部历史记录,使用指令地址的低10位进行地址索引,即有2^10=1K个入口,每个入口10位,分别对应这个入口最近的10个分支,即最近10次分支的跳转情况,这种10位历史记录允许对10个分支进行记录和预测,从局部历史记录选择出的入口对一个1K的入口表进行索引,这些入口由3位计数器构成,以提供本地预测。
选择器:使用分支局部地址的低12位分支局部地址索引,即有2^12=4K个选择器,每个索引得到一个两位计数器,用来选择使用局部预测器还是使用全局预测器的预测结果。在设计时默认使用局部预测器,当两个预测器都正确或都不正确时,不改变计数器;当全局预测器正确