hsimyu's diary

ゲームなどをします。

10/30 穏やか

10/30 (火)

ごはん

朝: バターロール3つ、コーヒー

昼: お弁当、ミネストローネ、サラダ

夜: お好み焼き、ごはん、豆腐としらたきと白菜のすき焼き風

仕事

リファクタが大体終わって、先月取りこぼしてたり後回しにしてた細かい調整・不具合修正。あとは今後の予定検討とか。明日はレビューをお願いしていたやつのフィードバックが来たので、それを受けてのブラッシュアップと、細かいやつの続き。

穏やかな一日だった。

分岐予測の簡単な歴史 Part2

postd.cc

2bit飽和カウンタ方式: 前の前まで記憶することで低確率の別分岐に惑わされないようにする

  • 90%, 1.38 cycle
  • ただしビット数を 3,4,...,n ビットに増やしても(保持できるテーブルサイズに比べて) 効果があまり見込めない。

グローバル履歴2レベル適応型: 簡単なパターン記憶

  • 分岐予測テーブル自体は 2bit 飽和カウンタを使うが「どのインデックスを使うか」に分岐履歴を利用する方式。同じパターンの繰り返しに入った時に、そのパターンに対応した 2bit 飽和カウンタを参照していくことになるので予測精度が高い。
  • ただし、分岐履歴テーブルがグローバルなので他の分岐の結果汚染されやすい。
  • 93%, 1.27 cycle

ローカル履歴2レベル適応型: 完全な分岐ごとのパターン記憶

  • 分岐履歴を、分岐ごとに保存する。
  • 94%, 1.23 cycle

gshare (xor 化グローバル履歴2レベル適応型):

  • 分岐履歴とアドレスからインデックスを作る時に、単純に連結せずに xor を取る方式。これによって、ローカル履歴テーブルを保持していないのに分岐間の汚染がかなり抑えられ、ローカル履歴2レベル適応型と同程度の精度が得られる。
  • 94%, 1.23 cycle

agree (gshare + バイアスビット):

  • 分岐アドレスに対応するバイアスビットを保持するテーブルを別に持つ。それ以外は gshare と同一だが、予測結果を保持するテーブルではなくて「バイアスビットと一致したかどうか」をメタ予測テーブルとして保持する。「大抵の分岐は大きく偏りやすい(例外ケースに分岐するのは少ない)」という分岐の性質に着目し、なんかうまくいく。
  • 95%, 1.19 cycle

ハイブリッド方式:

  • ローカルな履歴と、グローバルな履歴を持つ2つの予測器を用意し、どちらを使うべきかを予測するメタ予測器を持つ。メタ予測器は例えば 2bit 飽和ビットを使う方式が考えられる。
  • ローカルなメタ予測器とグローバルなメタ予測器を用意して、どちらを使うべきかを予測するためにローカルなメタメタ予測器と、グローバルなメタメタ予測器を用意して、…
  • 3つ以上の予測器を使うことも勿論可能。
  • 96%, 1.15 cycle

計算機アーキテクチャ