以下の内容はhttps://msyksphinz.hatenablog.com/entry/2026/03/12/040000より取得しました。


TAGEについて学ぶ(3. lookupの方法を理解する)

前回の続き:msyksphinz.hatenablog.com

更新則に入る前に、まず「予測時に何が起きているか」を整理する。これは TAGE の理解に必須である。

1. 入力:PCとGHR

  • PC:予測対象分岐のアドレス(通常は下位のアラインメントビットを除く)
  • GHR:過去の分岐結果列(グローバル履歴)

2. テーブルごとの index / tag 生成

各テーブル $T_i$ は履歴長 $L_i$ を持つ(幾何級数)。まず履歴を固定幅に圧縮し、PCと混ぜて index と tag を作る。

  • $G_i=\text{fold}(GHR,L_i)$(圧縮履歴)
  • $idx_i = \text{hash}(PC, G_i)$
  • $tag_i = \text{hash2}(PC, G_i)$

圧縮履歴(fold)は、長い履歴をそのまま利用できないための実装上の工夫である。

3. テーブル参照とヒット判定

テーブル $T_i$ から idx_i のエントリを読み出し、タグ一致を確認する。

  • 読み出し:Ti[idx_i] -> {stored_tag, pred_ctr, u}
  • ヒット:stored_tag == tag_i

ヒットしたテーブルは「このPC+履歴文脈に対応するエントリが存在する」と解釈される。

4. provider / alternate の選択

TAGEの合成の要点は “選択” である。

  • provider:ヒットした中で最長履歴(最大 i)
  • alternate:次点のヒット(無ければ base=T0)

予測は原則 provider の pred_ctr で決めるが、実用実装では provider が弱い場合や新規割当直後などに alternate を選ぶ規則を持つことがある。ここが更新則の設計と密接に結びつく。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2026/03/12/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14