FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

アウトオブオーダのCPUを作ろう - 性能向上作戦あれこれ(分岐予測構成2) -

最終的に搭載した分岐予測の構成は一般的な二段階の分岐予測だ。4つのステートマシンを持ってるやつな。

f:id:msyksphinz:20150215035232j:plain

これについては、一般的なので別に何も言及することはない。まあ、それ相応に性能向上するよね、という感じだ。 ちょっと悩んだのだが、ステートのどこを初期値にしようか、というところだ。基本的に、一発目でループに入った場合は、すぐに分岐成立方向に予測を変えた方が良い。 現在、ステートマシンは2ビットで管理している。

  • 分岐成立、不成立の予測ビット
  • 次回分岐成立、不成立で予測を変更するかを示すビット

だ、ここでは、基本的にループ内に入ることを前提に

  • 分岐不成立と予測, 次回分岐成立時は分岐成立と予測

にしている。が、ブログを書きなが考えてみると、もう少し複合させるとさらに予測精度が上げられそうな気がする。

基本的に、分岐予測テーブルを作りたくないときは、静的分岐予測として、 * 分岐先PCが自PCよりも前だったら成立と予測、そうでないときは不成立と予測

とする方法がある。これを複合させ、

  • 分岐予測テーブル内に当該PCが登録されていないときは、上記静的分岐予測を利用する

としておけば、ループの1回目でもヒットさせることができるだろう。そうだ、こうすると分岐予測率はさらに上がるかも。(別の部分で性能向上させるための方法はまだあるだろうが...)