【TAGE】分支预测

文章目录

  • 1. GEometric history length prediction
  • 2. The TAGE predictor
    • 2.1 prediction computation
    • 2.2 updating the TAGE predictor
      • 2.2.1 更新 useful counter *u*
      • 2.2.2 正确预测的更新
      • 2.2.3 整体预测错误时
    • 2.3 更新策略的原理
  • 3. 代码

论文地址:TAGE

1. GEometric history length prediction

预测器有M个不同的预测表 T i T_i Ti 0 ≤ i < M 0\leq i0i<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)=αi1L(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)(αi1L(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.【TAGE】分支预测_第1张图片

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 T4provider 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

altpredpred 不同的时候更新 u。当 pred 正确时增加u,错误时减小。

同时,u 也会被周期性 reset,先reset MSB,然后reset LSB。也就是,entry不会无限被标记为useful。

2.2.2 正确预测的更新

provider componentpred 位会被更新。

2.2.3 整体预测错误时

  1. 更新 provider component T i T_i Tipred
  2. 如果 T i T_i Ti i < M i i<M,那么就在 T k T_k Tk 上分配一个entry,其中 i < k < M ii<k<M
    T j , i < j < M T_j, iTj,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 Tju 都减1,并且没有新的entry被分配。
    B. 避免ping-phenomenon:如果 T j T_j Tj T k T_k Tku 都是0,且 j < k jj<k T j T_j Tj 有两倍的可能被选中分配。可以用简单的线性反馈寄存器实现。
    C. 被分配entry的初始化: pred 被设置为 weak correct. u 被初始化为0(即 strong not useful)。

2.3 更新策略的原理

更新策略要最小化单一分支指令的扰动。

  1. 错误预测时最多一个entry被分配。
  2. 分配策略实际上是基于useful counter u 的。只有之前的分配有积极作用,u才为正数。A保证了最近有用的entry不会被分配。A.2的减小u值和周期性reset实际上是一种pseudo least recently useful policy。因为u被初始化为0,B可以避免初始化为0带来的ping-pang效应。

3. 代码

verilog
systemverilog

代码没看,论文没看完,PPM-like和O-GEHL细节还没太清楚原理,留坑待补。

你可能感兴趣的:(硬件架构)