文章目录
论文地址:TAGE
1. GEometric history length prediction
预测器有M个不同的预测表 T i T_i Ti, 0 ≤ i < M 0\leq i<M 0≤i<M. T i T_i Ti 被分支指令地址和全局分支历史的哈希值寻址(索引)。
寻址每个预测表的分支历史长度 L i L_i Li 遵循几何级数: L ( i ) = α i − 1 ⋅ L ( 1 ) L(i)=\alpha^{i-1}\cdot L(1) L(i)=αi−1⋅L(1). L i L_i Li 实际上是整数,即, L ( i ) = ( i n t ) ( α i − 1 ⋅ L ( 1 ) + 0.5 ) L(i)=(int)(\alpha^{i-1}\cdot L(1)+0.5) L(i)=(int)(αi−1⋅L(1)+0.5).
寻址不同预测表的分支历史长度不同。
2. The TAGE predictor
TAGE设计源于 PPM-like tag-based 分支预测器。TAGE预测器由基础预测器 T 0 T_0 T0 以及一系列 tagged 的预测器 T i T_i Ti 组成。
论文中
T
0
T_0
T0 是双峰分支预测表。
T
i
T_i
Ti 中包括一个3-bit signed counter
c
t
r
ctr
ctr 提供预测方向, 一个tag,一个2-bit unsigned useful counter
u
u
u.
2.1 prediction computation
预测时, T 0 T_0 T0 和 T i T_i Ti 同时被访问。 T 0 T_0 T0 提供默认预测,当tag match时, T i T_i Ti 提供预测。如果匹配到tag,预测由使用最长分支历史的 T i T_i Ti 提供。如果没有匹配到,就使用 T 0 T_0 T0 的默认预测值。
这里给出一些定义和注解。假如 T 2 T_2 T2 和 T 4 T_4 T4 匹配到了tag,那么我们称 T 4 T_4 T4 为 provider component , T 2 T_2 T2 提供了altpred (the alternative prediction)。如果只有 T 4 T_4 T4 匹配到tag, T 0 T_0 T0 提供 altpred.
2.2 updating the TAGE predictor
2.2.1 更新 useful counter u
当 altpred 和 pred 不同的时候更新 u。当 pred 正确时增加u,错误时减小。
同时,u 也会被周期性 reset,先reset MSB,然后reset LSB。也就是,entry不会无限被标记为useful。
2.2.2 正确预测的更新
provider component 的 pred 位会被更新。
2.2.3 整体预测错误时
- 更新 provider component T i T_i Ti 的pred。
- 如果
T
i
T_i
Ti 的
i
<
M
i <M
i<M,那么就在
T
k
T_k
Tk 上分配一个entry,其中
i
<
k
<
M
i<k<M
i<k<M。
令 T j , i < j < M T_j, i<j<M Tj,i<j<M。
A. 分配的优先级
\space \space (1). 如果存在 u k = 0 u_k = 0 uk=0,那么 T k T_k Tk 被分配。
\space \space (2). 否则:所有 T j T_j Tj 的 u 都减1,并且没有新的entry被分配。
B. 避免ping-phenomenon:如果 T j T_j Tj 和 T k T_k Tk 的 u 都是0,且 j < k j<k j<k, T j T_j Tj 有两倍的可能被选中分配。可以用简单的线性反馈寄存器实现。
C. 被分配entry的初始化: pred 被设置为 weak correct. u 被初始化为0(即 strong not useful)。
2.3 更新策略的原理
更新策略要最小化单一分支指令的扰动。
- 错误预测时最多一个entry被分配。
- 分配策略实际上是基于useful counter u 的。只有之前的分配有积极作用,u才为正数。A保证了最近有用的entry不会被分配。A.2的减小u值和周期性reset实际上是一种pseudo least recently useful policy。因为u被初始化为0,B可以避免初始化为0带来的ping-pang效应。
3. 代码
代码没看,论文没看完,PPM-like和O-GEHL细节还没太清楚原理,留坑待补。