TAGE predictor

“时间久了,日子似乎变成了一种很单调的东西,就在这每天的日出与日落里,我可以清楚地听到我的生命在渐渐枯萎”

简介

TAGE 是连续几届分支预测器比赛的冠军,本文将针对TAGE预测器进行介绍,重点涉及TAGE的原理,TAGE的结构以及TAGE中重要的行为模型。

分支历史

History length计算

Tage的分支历史可以使用如下公式进行计算

选$\alpha = 2$,$L(1)=2$,$M=7$,可以得到分支历史的几何级数为${2,4,8,16,32,64,128}$

Folded history计算

TAGE结构

Storage components

本文设计的Tage预测器storage components如下表所示:

base predictor T1 T2 T3 T4 T5 T6 T7
History Length 0 2 4 8 16 32 64 128
Entry number 1K 1K 1K 2K 2K 1K 1K 0.5K
index length 10 10 10 11 11 10 10 9
Width 3bits 12 12 13 13 14 14 15
Tag width 7 7 8 8 9 9 10
useful count 2 2 2 2 2 2 2
predict count 3 3 3 3 3 3 3
Total bits 1K*3 bits 1K*12 bits 1K*12 bits 2K*13 bits 2K * 13 bits 1K * 14 bits 1K * 14 bits 0.5K * 15 bits

TAGE更新策略

TAGE表项更新策略

TAGE在retire阶段进行更新,以避免错误路径造成的污染(由于乱序执行,因此不能认为从BJU中执行的分支一定是正确的path,有可能会存在分支抢跑的情况,即错误地执行了可能完全不会走到的分支),关于路径污染,可以参考下面的例子:

1
2
3
4
if (cond1)
if (cond2)
else
...

有两条分支语句cond1和cond2,由于乱序执行机制,完全可能存在先执行cond2再执行cond1的情况,如果cond2在执行后对表进行更新,而后续执行时发现cond1根本执行不到,那么对于cond2则进行了一个虚假的更新,产生了污染。

但是从retire阶段进行更新就引入了另外一个问题,更新延迟,一条指令虽然已经执行,但是直到retire才会被更新,TAGE中使用了IUM(Immediate update mimicker),来解决这个问题,后面会重点讲到。

Useful bit更新

Boom TAGE与BHT信号映射

Xuantie Signal Boom signal 备注
pcgen_bht_ifpc io_f0_pc 目前BHT只用到了PC一部分
pcgen_bht_pcindex
vghr io_f1_ghist 关于history,xuantie在BHT中自己维护,可能需要将History这一段逻辑拆分出来
iu_ifu_chk_idx update_bits_meta 关于meta信号的具体内容再看下
iu_ifu_bht_condbr_taken cfi_taken
iu_ifu_chgflw_vld cfi_mispredicted

TAGE设计

本节将给出一个完整的TAGE设计,用于替换玄铁中的BHT。

Signal List

Direction Width Name Function
input 1 cp0_ifu_tage_en tage enable
input 1 cp0_ifu_icg_en inner clk gate?
input 1 cp0_yy_clk_en clk enable
input 1 cpurst_b cpu reset
input 1 forever_cpuclk cpu clk
input 1 ifctrl_tage_inv invalidate singal
input 1 ifctrl_tage_pipedown 流水线推进
input 1 ifctrl_tage_stall 流水线stall
input 1 ipctrl_tage_con_br_gateclk_en gate clk enable
input 1 ipctrl_tage_con_br_taken bht预测的结果,用作history 更新
input 1 ipctrl_tage_con_br_vld 分支有效
input 1 ipctrl_tage_more_br 分支中存在多条语句(在第一条不跳转的情况下处理)
ipctrl_tage_vld tage是否有效
ipdp_bht_h0_con_br 上一条block中是否存在分支

参考文献

0%