最終的に搭載した分岐予測の構成は一般的な二段階の分岐予測だ。4つのステートマシンを持ってるやつな。
これについては、一般的なので別に何も言及することはない。まあ、それ相応に性能向上するよね、という感じだ。 ちょっと悩んだのだが、ステートのどこを初期値にしようか、というところだ。基本的に、一発目でループに入った場合は、すぐに分岐成立方向に予測を変えた方が良い。 現在、ステートマシンは2ビットで管理している。
- 分岐成立、不成立の予測ビット
- 次回分岐成立、不成立で予測を変更するかを示すビット
だ、ここでは、基本的にループ内に入ることを前提に
- 分岐不成立と予測, 次回分岐成立時は分岐成立と予測
にしている。が、ブログを書きなが考えてみると、もう少し複合させるとさらに予測精度が上げられそうな気がする。
基本的に、分岐予測テーブルを作りたくないときは、静的分岐予測として、 * 分岐先PCが自PCよりも前だったら成立と予測、そうでないときは不成立と予測
とする方法がある。これを複合させ、
- 分岐予測テーブル内に当該PCが登録されていないときは、上記静的分岐予測を利用する
としておけば、ループの1回目でもヒットさせることができるだろう。そうだ、こうすると分岐予測率はさらに上がるかも。(別の部分で性能向上させるための方法はまだあるだろうが...)