(57)【特許請求の範囲】
【請求項１】
過去の分岐命令の履歴を保持する履歴レジスタと、
該履歴レジスタが保持する該履歴と命令アドレスとから異なった分岐命令間で同一のインデックスを共有可能な第１のインデックスを生成するインデックス生成回路と、
各第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、
該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレス又は予測分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファと、
該第１の値及び該第２の値の何れかを選択することで分岐予測を行う選択ユニット
を含むことを特徴とする分岐予測装置。
【請求項２】
過去の分岐命令の履歴を保持する履歴レジスタと、
該履歴レジスタが保持する該履歴と命令アドレスとから第１のインデックスを生成するインデックス生成回路と、
各第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、
該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレス又は予測分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファと、
該第１の値及び該第２の値の何れかを選択することで分岐予測を行う選択ユニット
を含み、
該選択ユニットは、現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在する場合には該第１の値を選択し、該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在しない場合には該第2の値を選択することを特徴とする分岐予測装置。
【請求項３】
該選択ユニットは、該現在の命令アドレスに対して該分岐先バッファにエントリが存在しない場合には分岐しないと予測することを特徴とする請求項２記載の分岐予測装置。
【請求項４】
該インデックス生成回路は、該履歴レジスタが保持する該履歴と該命令アドレスとの排他的論理和として該第１のインデックスを生成することを特徴とする請求項１乃至３のいずれか一項に記載の分岐予測装置。
【請求項５】
該履歴テーブルは該第１のインデックスの各々に対して複数のエントリが登録できるように複数個設けられることを特徴とする請求項１乃至４のいずれか一項に記載の分岐予測装置。
【請求項６】
過去の分岐命令の履歴を保持する履歴レジスタと、
該履歴レジスタが保持する該履歴と命令アドレスとから異なった分岐命令間で同一のインデックスを共有可能な第１のインデックスを生成するインデックス生成回路と、
各第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、
該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファと、
該第１の値及び該第２の値の何れかを選択することで分岐予測を行う選択ユニットと、
命令の実行を制御する実行制御ユニットと、
該命令を実行する演算実行ユニット
を含むことを特徴とするプロセッサ。
【請求項７】
過去の分岐命令の履歴を保持する履歴レジスタと、
該履歴レジスタが保持する該履歴と命令アドレスとから第１のインデックスを生成するインデックス生成回路と、
各第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、
該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファと、
該第１の値及び該第２の値の何れかを選択することで分岐予測を行う選択ユニットと、
命令の実行を制御する実行制御ユニットと、
該命令を実行する演算実行ユニット
を含み、
該選択ユニットは、現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在する場合には該第１の値を選択し、該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在しない場合には該第2の値を選択することを特徴とするプロセッサ。
【請求項８】
該選択ユニットは、該現在の命令アドレスに対して該分岐先バッファにエントリが存在しない場合には分岐しないと予測することを特徴とする請求項７記載のプロセッサ。
【請求項９】
該インデックス生成回路は、該履歴レジスタが保持する該履歴と該命令アドレスとの排他的論理和として該第１のインデックスを生成することを特徴とする請求項６乃至８のいずれか一項に記載のプロセッサ。
【請求項１０】
該履歴テーブルは該第１のインデックスの各々に対して複数のエントリが登録できるように複数個設けられることを特徴とする請求項６乃至９のいずれか一項に記載のプロセッサ。
【請求項１１】
過去の分岐命令の履歴と命令アドレスとから異なった分岐命令間で同一のインデックスを共有可能に生成する第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファとを設けた構成において、
該第１の値及び該第２の値の何れかを選択し、
選択した値に応じて分岐予測を行う
各段階を含むことを特徴とする分岐予測方法。
【請求項１２】
過去の分岐命令の履歴と命令アドレスとから生成する第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファとを設けた構成において、
該第１の値及び該第２の値の何れかを選択し、
選択した値に応じて分岐予測を行う
各段階を含み、
該選択する段階は、現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在する場合には該第１の値を選択し、該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在しない場合には該第2の値を選択することを特徴とする分岐予測方法。
【請求項１３】
該現在の命令アドレスに対して該分岐先バッファにエントリが存在しない場合に該分岐先バッファに該現在の命令アドレスを登録し、
該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在せず且つ該第２の値に基づく予測結果が誤りである場合に該履歴テーブルに該現在の命令アドレスに関する登録を行う
各段階を含むことを特徴とする請求項１２記載の分岐予測方法。
【請求項１４】
該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在せず且つ該第２の値に基づく予測結果が正しい場合に該履歴テーブルに該現在の命令アドレスに関する登録を行わないことを特徴とする請求項１２又は１３記載の分岐予測方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般に分岐命令の分岐予測方式及びプロセッサに関し、詳しくは、ＰＨＴ（Pattern History Table）を用いた分岐予測方式及びプロセッサに関する。
【０００２】
【従来の技術】
パイプライン動作を実行するプロセッサにおいては、分岐命令の分岐結果を待ってから分岐先アドレスに分岐するのでは、命令フェッチのタイミングが遅くなりパイプライン動作に乱れが生じる。従って、分岐命令を実行する前に分岐予測をし、パイプライン動作の流れに沿った一連の命令フェッチを可能にする必要がある。
【０００３】
分岐命令には、その分岐命令自体が分岐し易い或いは分岐し難いといったように、ローカルな意味で分岐方向に偏りが存在する場合が多い。また最近実行された分岐命令の分岐結果に依存してある分岐命令が分岐し易い或いは分岐し難いといったように、グローバルな意味で分岐方向に偏りが存在する場合も多い。ＰＨＴ（Pattern History Table）は、このような分岐傾向のローカル性及びグローバル性を考慮して、高い精度で分岐を予測する方式である。
【０００４】
図１は、従来のＰＨＴを利用した分岐予測方式の構成図である。
【０００５】
図１の分岐予測装置は、ＸＯＲ回路１１、ＧＨＲユニット１２、及びＰＨＴユニット１３を含む。ＧＨＲ（Global History Register）１２は、最近実行した分岐命令について分岐したか否かに関する履歴を記録しておくレジスタである。分岐命令が分岐した場合にはレジスタ内部を左に１ビットシフトしながら最下位ビットに１を格納し、分岐命令が分岐しなかった場合にはレジスタ内部を左に１ビットシフトしながら最下位ビットに０を格納する。例えば、ＧＨＲ１２が６ビット長であり、現在の内容が“011001”であるとする。この状態で、ある分岐命令を実行した結果が「分岐」であったとすると、ＧＨＲ１２の内容を左に１ビットシフトし更に１を最下位ビットに挿入する。結果として、ＧＨＲ１２の内容は“110011”となる。この“110011”は、６回前の分岐命令が分岐、５回前の分岐命令が分岐、４回前の分岐命令が非分岐、３回前の分岐命令が非分岐、２回前の分岐命令が分岐、最も最近の分岐命令が分岐であったことを示す。
【０００６】
ＸＯＲ回路１１は、プログラムカウンタ１０が示す実行する分岐命令アドレスとＧＨＲユニット１２の内容との排他的論理和を計算する。計算された排他的論理和は、ＰＨＴユニット１３にインデックスとして供給される。
【０００７】
ＰＨＴ１３は、各インデックスに対して例えば２ビットのカウントを格納するＲＡＭである。ここでインデックスは、上述のようにプログラムカウンタ１０の示す実行する分岐命令アドレスとＧＨＲユニット１２の内容との排他的論理和である。また、インデックスの内容である２ビットのカウント値は、そのインデックスをヒットした場合の予測結果である。カウント値が０及び１の場合には分岐しないと予測し、カウント値が２及び３の場合には分岐すると予測する。
【０００８】
例えば、ＧＨＲ１２の内容が“110011”であり、分岐命令アドレスが“001000”である場合、インデックスは“111011”となる。このインデックス“111011”の内容の２ビットカウント値を参照して、例えばカウント値が２であるとする。上述のように２或いは３のカウント値は分岐予測を意味するので、命令アドレスが“001000”である現在実行しようとしている分岐命令は、分岐すると予測する。実際に命令を実行した結果として分岐すれば、カウント値に１を加算する。また実際に命令を実行した結果として分岐しない場合には、カウント値から１を減算する。従って、例えば実際の実行結果として分岐したとすると、カウント値は３に設定される。
【０００９】
その後、例えば、ＧＨＲユニット１２が全く同一の内容“110011”である状態で、同じ分岐命令アドレス“001000”の分岐命令を再度実行する場合、インデックスは前回と同一の“111011”となる。この場合のカウント値は３であり、分岐命令は分岐すると予測する。前述のように、ＧＨＲユニット１２の内容は、最近実行した分岐命令の分岐結果の履歴である。従って、最近の分岐傾向が同一の条件で同一の分岐命令を実行した場合には、その分岐結果は同一のインデックスに蓄積されていく。次回同一のインデックスを参照したときには、そのカウント値が分岐予測に用いられる。
【００１０】
最近実行した分岐命令の分岐結果の履歴が、上記の履歴と若干異なる場合として、例えばＧＨＲユニット１２の内容が“110010”であるとする。これは上記の場合“110011”と比較して、最後の分岐命令の結果が異なっていた場合である。この場合、上記と同一の分岐命令アドレス“001000”の分岐命令を実行するとすると、インデックスは“111010”となる。従って、このインデックスには、過去の分岐の履歴が“110010”である条件で分岐命令アドレス“001000”の分岐命令を実行した場合について、分岐結果が蓄積されていくことになる。
【００１１】
従って、仮に分岐命令がプログラム中に１つしか存在しない場合には、各インデックスは、この分岐命令の分岐の結果を種々の分岐履歴に対して蓄積することになり、分岐履歴を反映した非常に高い精度での分岐予測が可能となる。しかし分岐命令がプログラム中に複数個存在する場合には、ＰＨＴユニット１３内で互いの分岐命令の結果が干渉し合うことになり、予測精度が低下する。例えば、ＧＨＲユニット１２の内容が“111010”の場合に分岐命令アドレス“000001”の分岐命令を実行するとすると、インデックスは“111011”となり、上記のようにＧＨＲ１２の内容が“110011”であり分岐命令アドレスが“001000”である場合と同一のインデックスとなってしまう。このようにＸＯＲ回路１１でインデックスを計算する方式では、異なった分岐命令間で同一のインデックスを共有することになり、分岐結果の記録が干渉してしまい予測精度が低下する。
【００１２】
予測精度を低下させないためには、ＧＨＲユニット１２の内容とプログラムカウンタ１０の内容とを繋ぎ合わせてインデックスを作成すればよい。例えば、ＧＨＲ１２の内容が“110011”であり分岐命令アドレスが“001000”である場合には、インデックスを“110011001000”とすればよい。しかしこの場合には、インデックスが長くなることで、ＰＨＴユニット１３のＲＡＭのエントリ数が大幅に増大してしまう。実際、この場合のエントリ数は６４倍（＝２6）に増大することになる。
【００１３】
【発明が解決しようとする課題】
上述のように、分岐予測に使用するＰＨＴにおいてエントリが干渉する構成においては、分岐予測の精度が低下してしまうという問題がある。しかし予測精度を向上させるために、ＰＨＴのメモリ容量を必要以上に増大させることは望ましくない。可能な限り小さなメモリ容量で可能な限り予測精度を向上させることが望ましい。
【００１４】
従って本発明は、ＰＨＴを使用する分岐予測方式において、可能な限り小さなメモリ容量を使用しながらエントリ干渉を回避して分岐予測の精度を向上させた分岐予測方式を提供することを目的とする。
【００１５】
【課題を解決するための手段】
本発明による分岐予測装置は、過去の分岐命令の履歴を保持する履歴レジスタと、該履歴レジスタが保持する該履歴と命令アドレスとから異なった分岐命令間で同一のインデックスを共有可能な第１のインデックスを生成するインデックス生成回路と、各第１のインデックスに対して該命令アドレスの一部であるタグと分岐のし易さを示す第１の値とを格納する履歴テーブルと、該命令アドレスの少なくとも一部を第２のインデックスとして該命令アドレスが示す命令の分岐先アドレスと分岐のし易さを示す第２の値とを格納する分岐先バッファと、該第１の値及び該第２の値の何れかを選択することで分岐予測を行う選択ユニットを含むことを特徴とする。
【００１６】
上記分岐予測装置において、該選択ユニットは、現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在する場合には該第１の値を選択し、該現在の命令アドレスに対して該分岐先バッファにエントリが存在し且つ該現在の命令アドレスと現在の履歴とに対して該履歴テーブルにエントリが存在しない場合には該第2の値を選択することを特徴とする。
【００１７】
上記分岐予測装置においては、履歴テーブル（ＰＨＴ）のエントリに命令の一部をタグとして設けることで、異なった分岐命令間でのＰＨＴエントリの干渉を避けることが可能になる。しかしながらあるインデックスを参照しても、タグが現在の命令に一致しない場合には、当該履歴状況での当該命令に関する情報は登録されていないことになる。このような場合には、分岐先バッファ（ＢＴＢ）を分岐予測に使用する。即ち、履歴テーブルがヒットした場合（タグが一致）には、履歴テーブルの第１の値を分岐予測に使用し、履歴テーブルがミスした場合（タグが不一致）には、分岐先バッファの第２の値を分岐予測に使用する。
【００１８】
このように本発明による分岐予測方式では、エントリ干渉を回避して高精度な分岐予測が可能になるので、実際の分岐方向が確定する前に予測に基づいて命令フェッチしても、予測がはずれる可能性は小さく、パイプライン動作の乱れを避けることが出来る。
【００１９】
また本発明による分岐予測方式では、分岐先バッファの第２の値を予測に併用することにより、従来のようにＰＨＴ単体で分岐予測を実行する場合と比較して、分岐結果を学習させるまでの時間が短くてすむ。従って、本発明による分岐予測方式は、コンテキストスイッチによる状況変化に短時間で対応できる。
【００２０】
【発明の実施の形態】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００２１】
図２は、本発明によるＰＨＴを利用した分岐予測装置の構成図である。
【００２２】
本発明による分岐予測装置は、ＸＯＲ回路２１、ＧＨＲユニット２２、タグ付きＰＨＴユニット２３、比較ユニット２４、ＢＴＢ（Branch Target Buffer）２５、比較ユニット２６、及び選択ユニット２７を含む。
【００２３】
ＧＨＲ（Global History Register）２２は、最近実行した分岐命令について分岐したか否かに関する履歴を記録しておくレジスタである。分岐命令が分岐した場合にはレジスタ内部を左に１ビットシフトしながら最下位ビットに１を格納し、分岐命令が分岐しなかった場合にはレジスタ内部を左に１ビットシフトしながら最下位ビットに０を格納する。ＸＯＲ回路２１は、プログラムカウンタ２０が示す実行する分岐命令アドレスとＧＨＲユニット２２の内容との排他的論理和を計算する。計算された排他的論理和は、タグ付きＰＨＴユニット２３にインデックスとして供給される。
【００２４】
タグ付きＰＨＴユニット２３は、ＸＯＲ回路２１の出力である各インデックスに対して、タグ２３ａとカウント値２３ｂとを格納するＲＡＭである。またＢＴＢユニット２５は、命令アドレスの一部をインデックスとして、タグ（命令アドレスの一部）２５ａと、分岐命令の分岐先アドレス２５ｂと、バイアスビット２５ｃとを格納するＲＡＭである。
【００２５】
ＢＴＢユニット２５は、従来の分岐予測方式においても使用されるユニットであり、分岐命令が分岐すると予測されると、その分岐先アドレスを直ちに提供するために設けられる。通常分岐先アドレスは、フェッチした分岐命令をデコードして命令を実行する時に算出する必要があるために、分岐先アドレスの特定には時間を要する。ＢＴＢを設けておき各分岐命令に対して分岐先アドレスを格納しておくことで、分岐命令が分岐すると予測される時に、分岐先アドレスを直ちにＢＴＢから読み出すことが出来る。ここでＢＴＢのメモリ容量を小さくするために、命令アドレスの一部をインデックスとし、残りの部分をタグとして、当該インデックスのエントリの一部としてタグを格納しておく。
【００２６】
プログラムカウンタ２０から命令アドレスが入力されると、この命令アドレスに対応するインデックスからタグ２５ａを読み出し、読み出したタグ２５ａと入力命令アドレスの対応部分とを比較する。この比較は、比較ユニット２６によって実行される。比較結果が一致を示す場合（ヒットした場合）には、この命令アドレスの分岐命令が登録されていることになり、当該インデックスに格納されている分岐先アドレス２５ｂをプリフェッチアドレスとして使用する。
【００２７】
バイアスビット２５ｃは、その分岐命令が分岐し易いが分岐し難いかを示す。１ビットで構成される場合には、例えば“１”が分岐し易いことを示し、“０”が分岐し難いことを示す。このバイアスビット２５ｃは、その分岐命令自体が分岐し易いか分岐し難いかを示す、ローカルな意味での分岐方向の偏りに関する情報である。
【００２８】
タグ付きＰＨＴユニット２３は、ＸＯＲ回路２１が求めた命令アドレスの一部とＧＨＲユニット２２との排他的論理和をインデックスとして、過去に実行した分岐結果の情報をカウント値２３ｂとして保持する。本発明においては、タグ付きＰＨＴユニット２３は、カウント値２３ｂだけでなく、命令アドレスの一部をタグ２３ａとして保持している。
【００２９】
プログラムカウンタ２０の命令アドレスとＧＨＲユニット２２の内容とからＸＯＲ回路２１によりインデックスが求められると、タグ付きＰＨＴユニット２３からタグ２３ａを読み出し、読み出したタグ２３ａと入力命令アドレスの対応部分とを比較する。この比較は、比較ユニット２４によって実行される。比較結果が一致を示す場合（ヒットした場合）には、ＧＨＲユニット２２の内容が示す履歴状態での当該命令アドレスの分岐命令の情報が登録されていることになる。この場合には、このインデックスに格納されているカウント値２３ｂを、分岐予測に使用する。カウント値２３ｂは、例えば２ビットカウンタのカウントであり、０及び１の場合には分岐しないと予測し、２及び３の場合には分岐すると予測する。
【００３０】
タグ２３ａを設けることで、異なった分岐命令間でのＰＨＴエントリの干渉を避けることが可能になる。しかしながら、あるインデックスを参照しても、タグ２３ａが現在の命令に一致しない場合（ミスした場合）には、当該履歴状況での当該命令に関する情報は登録されていないことになる。本発明では、このような場合には、ＢＴＢユニット２５のバイアスビット２５ｃを分岐予測に使用する。
【００３１】
即ち、タグ付きＰＨＴユニット２３がヒットした場合（タグが一致）には、タグ付きＰＨＴユニット２３のカウント値２３ｂを分岐予測に使用し、タグ付きＰＨＴユニット２３がミスした場合（タグが不一致）には、ＢＴＢユニット２５のバイアスビット２５ｃを分岐予測に使用する。この選択は、選択ユニット２７によって実行される。選択ユニット２７は、比較ユニット２４からの比較結果によって、タグ付きＰＨＴユニット２３がヒットしたか否かを検出する。この検出に基づいて、比較ユニット２４は、タグ付きＰＨＴユニット２３からのカウント値２３ｂ或いはＢＴＢユニット２５からのバイアスビット２５ｃの何れかを選択し、選択したデータに基づいて分岐予測をして分岐予測結果を出力する。なおＢＴＢユニット２５がヒットしていない場合には、分岐先アドレス２５ｂが利用できないので、一律に「分岐しない」と予測して予測結果を出力する。
【００３２】
図３は、本発明による分岐予測のフローチャートである。
【００３３】
ステップＳ１で、ＢＴＢユニット２５がヒットしたか否かを判断する。ヒットした場合にはステップＳ３に進み、ミスした場合にはステップＳ２に進む。
【００３４】
ステップＳ２で、ＢＴＢユニット２５がヒットしておらず分岐先アドレス２５ｂが利用できないので、一律に「分岐しない」と予測する。
【００３５】
ステップＳ３で、タグ付きＰＨＴユニット２３がヒットしたか否かを判断する。ヒットした場合にはステップＳ５に進み、ミスした場合にはステップＳ４に進む。
【００３６】
ステップＳ４で、ＢＴＢユニット２５のバイアスビット２５ｃに基づいて分岐予測を行う。
【００３７】
ステップＳ５で、タグ付きＰＨＴユニット２３のカウント値２３ｂに基づいて分岐予測を行う。
【００３８】
図４は、本発明によるデータ更新処理のフローチャートである。
【００３９】
ステップＳ１で、ＢＴＢユニット２５がヒットしたか否かを判断する。ヒットした場合にはステップＳ３に進み、ミスした場合にはステップＳ２に進む。
【００４０】
ステップＳ２で、ヒットしなかった対象命令アドレスを、その分岐先アドレスと共にＢＴＢユニット２５に登録する。この際、実際に命令を実行した分岐結果を、ＢＴＢユニット２５のバイアスビット２５ｃとして格納する。即ち、実際の命令実行の結果、分岐をしたのであれば１をバイアスビット２５ｃに格納し、分岐しなかったのであれば０をバイアスビット２５ｃに格納する。
【００４１】
ステップＳ３では、ＢＴＢユニット２５がヒットしているので、ＢＴＢユニット２５の対象命令アドレスを更新する。
【００４２】
ステップＳ４で、タグ付きＰＨＴユニット２３がヒットしたか否かを判断する。ヒットした場合にはステップＳ８に進み、ミスした場合にはステップＳ５に進む。
【００４３】
ステップＳ 5で、対象命令を実際に実行した結果、実際の分岐方向が分岐予測と一致したか否かを判断する。ここで判断対象の分岐予測は、タグ付きＰＨＴユニット２３がミスした場合であるので、ＢＴＢユニット２５のバイアスビット２５ｃに基づいて行われたものである。判断の結果、一致する場合にはステップＳ６に進み、一致しない場合にはステップＳ７に進む。
【００４４】
ステップＳ６で、何もせずに処理を終了する。これは、分岐予測の結果と実際の分岐の結果とが一致する場合には、現状の分岐予測が適切であると判断できるからである。
【００４５】
ステップＳ７で、タグ付きＰＨＴユニット２３に当該履歴状況での当該命令に関する情報を登録する。即ち、対象となるインデックスに、対象となる命令アドレスのタグ２３ａを格納すると共に、カウント値２３ｂに実際の分岐結果を格納する。例えば、分岐した場合には２（“10”）を格納し、分岐しなかった場合には１（“01”）を格納する。これは、分岐予測の結果と実際の分岐の結果とが一致しない場合には、ＢＴＢユニット２５のバイアスビット２５ｃに基づく現状の分岐予測が不適切であると判断できるからである。
【００４６】
ステップＳ８では、タグ付きＰＨＴユニット２３がヒットしているので、タグ付きＰＨＴユニット２３のカウント値２３ｂを更新する。具体的には、実際の分岐結果が分岐の場合にカウント値２３ｂを１増加させ、分岐結果が分岐でない場合にカウント値２３ｂを１減少させる。なおカウント値２３ｂが既に最大値（例えば２ビットカウンタなら３）の場合には、実際の分岐結果が分岐であってもカウント値２３ｂはそのままである。またカウント値２３ｂが既に最小値（例えば０）の場合には、実際の分岐結果が非分岐であってもカウント値２３ｂはそのままである。
【００４７】
ステップＳ９で、ＢＴＢユニット２５のバイアスビット２５ｃとタグ付きＰＨＴユニット２３のカウント値２３ｂとについて、夫々の値をチェックする。バイアスビット２５ｃとカウント値２３ｂとが、夫々０と０（“00”）であるか或いは夫々１と３（“11”）である場合に、ステップＳ１１に進む。それ以外の場合には、ステップＳ１０に進む。
【００４８】
ステップＳ１０で、ＬＲＵビット等を更新する。ここでＬＲＵ（Least Recently Used）ビットとは、タグ付きＰＨＴユニット２３の各エントリに付加され、参照されてから最も使われなかったエントリを特定するためのビットである。タグ付きＰＨＴユニット２３を分岐予測に使用する毎に、このＬＲＵビットを更新する。ＬＲＵビットの意味については後述する。
【００４９】
ステップＳ１１で、タグ付きＰＨＴユニット２３の対象エントリを無効にする。即ち、タグ付きＰＨＴユニット２３の当該対象エントリを実質的に削除する。これは、タグ付きＰＨＴユニット２３のカウント値２３ｂが特定の分岐方向を強く示唆しており且つＢＴＢユニット２５のバイアスビット２５ｃがそれと同一の分岐方向を示している場合には、ＢＴＢユニット２５のバイアスビット２５ｃで分岐を予測しても同一の予測結果が得られるので、タグ付きＰＨＴユニット２３から登録を抹消することで、タグ付きＰＨＴユニット２３のＲＡＭのメモリ空間を有効に使用するためである。
【００５０】
以上が、本発明によるデータ更新処理である。
【００５１】
以下に、本発明におけるセットアソシアティブ方式について説明する。
【００５２】
本発明においては、図２に示されるように、タグ付きＰＨＴユニット２３が複数個設けられていてもよい。このように複数のタグ付きＰＨＴユニット２３を設けることで、同一インデックスに対して複数のエントリを格納可能になる。例えば、４セットのＰＨＴが設けられる４−ウェイセットアソシアティブ方式においては、同一インデックスに対して、４つまでのエントリを格納可能である。
【００５３】
このようにセットアソシアティブ方式を使用した場合には、データ更新時にどのエントリを削除するかを決定する必要がある。例えば４−ウェイセットアソシアティブにおいて既に４つのエントリを使用している状況で、５つめのエントリを格納する必要があるとすると、既存の４つのエントリの何れかを選択して削除する必要がある。例えば、図４のステップＳ７では、タグ付きＰＨＴユニット２３に当該履歴状況での当該命令に関する情報を登録するが、既に同一のインデックスに対するエントリが満杯である場合には、既存の登録の何れかを削除して新規登録に置き換える必要がある。
【００５４】
図４のステップＳ１０に関連して説明したＬＲＵビットは、既存エントリを新規エントリで置き換える際に、置き換え対象のエントリを特定するために使用される。ＬＲＵビットは、各エントリに対して保持され、各エントリの参照順序を示すビットである。このＬＲＵビットを調べることで、参照されてから最も長期間使われなかったエントリを特定して、新規エントリと置き換えることが出来る。
【００５５】
ＬＲＵ方式は置き換え対象のエントリを特定する方式の１つに過ぎず、他の方式として、最も使用されなかった最低使用頻度のエントリを置換するＬＦＵ（Least Frequently Used）方式、最も過去に登録されたエントリを置換するＦＩＦＯ（First-In First-Out）方式、任意に選択したエントリを置換するランダム方式などがある。
【００５６】
なおセットアソシアティブ方式を使用せずタグ付きＰＨＴユニット２３が一つだけ設けられる場合には、各インデックスに対して１つのエントリしか格納することは出来ない。この場合、タグ付きＰＨＴユニット２３に新規の情報を登録する際に、既に同一のインデックスに対して別の命令アドレスの登録がなされている場合には、この既存の登録を削除して、新規登録に置き換えることになる。
【００５７】
また図２に示されるように、ＢＴＢユニット２５に対してもセットアソシアティブ方式を用いても良い。
【００５８】
以下に、本発明による分岐予測を具体的なプログラムの例を用いて説明する。
【００５９】
図５は、分岐命令を含むプログラムの一例である。
【００６０】
ＧＨＲユニット２２の長さは６であり、その初期値を000000とする。
【００６１】
命令アドレス000001において、ＢＴＢユニット２５に0001をインデックスとしてアクセスすると、タグミスが検出され「分岐しない」と予測する。これは図３のステップＳ２に対応する。実際の命令実行の結果、分岐命令が分岐するので予測がはずれる。ＢＴＢユニット２５のインデックス0001のエントリにタグ00、バイアス1、分岐先アドレス000011を登録する。これは図４のステップＳ２に対応する。
【００６２】
ＧＨＲユニット２２は、左に１ビットシフトしながら最下位ビットに分岐を表す1を格納し、結果として000001となる。この状態で、予測結果と各レジスタ／メモリの内容は、
PC=000001, 予測失敗, BTB[0001]=00-1-000011, GHR:000001
となる。ここでPCはプログラムカウンタを示し、ＢＴＢの内容は、タグ00、バイアス1、及び分岐先アドレス000011の順に示される。
【００６３】
次に命令アドレス000100において、ＢＴＢユニット２５に0100をインデックスとしてアクセスすると、タグミスが検出され「分岐しない」と予測する。実際の命令実行の結果、分岐命令が分岐しないので予測があたる。ＢＴＢユニット２５のインデックス0100のエントリにタグ00、バイアス0を登録する。
【００６４】
ＧＨＲユニット２２は、左に１ビットシフトしながら最下位ビットに非分岐を表す0を格納し、結果として000010となる。この状態で、予測結果と各レジスタ／メモリの内容は、
PC=000001, 予測成功, BTB[0100]=00-0- ******, GHR:000010
となる。
【００６５】
更に命令アドレス0005、0006、0007、及び0008の分岐命令が分岐しない。結果として、上記と同様に,
PC=000101, 予測成功, BTB[0101]=00-0- ******, GHR=000100
PC=000110, 予測成功, BTB[0110]=00-0- ******, GHR:001000
PC=000111, 予測成功, BTB[0111]=00-0- ******, GHR=010000
PC=001000, 予測成功, BTB[1000]=00-0- ******, GHR=100000
となる。
【００６６】
更に命令アドレス001100において、ＢＴＢユニット２５に1100をインデックスとしてアクセスすると,タグミスが検出され「分岐しない」と予測する。実際の命令実行の結果、分岐命令が分岐するので予測がはずれる。ＢＴＢユニット２５のインデックス1100のエントリに、タグ00、バイアス1、分岐先アドレス001001を登録する。
【００６７】
ＧＨＲユニット２２は、左に１ビットシフトしながら最下位ビットに分岐を表す1を格納し、結果として000001となる。この状態で、予測結果と各レジスタ／メモリの内容は、
PC=001100, 予測失敗, BTB[1100]=00-1-001001, GHR=000001
となる。
【００６８】
ここで命令アドレス001001に分岐したので、再び命令アドレス001100において、ＢＴＢユニット２５に1100をインデックスとしてアクセスを行う。今回はタグヒットが検出され、分岐先アドレス001001を得る。ＢＴＢユニット２５がタグヒットしたので、タグ付きＰＨＴユニット２３がタグヒットするか否かをチェックする。これは図３のステップＳ３に対応する。
【００６９】
具体的には、アドレス001100とＧＨＲの内容000001との排他的論理和001101をインデックスとして、タグ付きＰＨＴユニット２３にアクセスする。タグ判定結果はミスなので、ＢＴＢユニット２５のバイアスビットに基づいて、「アドレス001001に分岐する」と予測する。これは図３のステップＳ４に対応する。実際の命令実行の結果、分岐命令が001001に分岐し予測が的中する。従って、図４のステップＳ６にあるように、ＢＴＢユニット２５及びタグ付きＰＨＴユニット２３の更新はしない。この状態で、予測結果と各レジスタ／メモリの内容は、
PC=001100, 予測成功, BTB[1100]=00-1-001001(更新無し), GHR=000011
である。命令アドレス001100の分岐命令によって、ループが更に３回実行されると、
PC=001100, 予測成功, BTB[1100]=00-1-001001(更新無し), GHR=000111
PC=001100, 予測成功, BTB[1100]=00-1-001001(更新無し), GHR=001111
PC=001100, 予測成功, BTB[1100]=00-1-001001(更新無し), GHR=011111
となる。
【００７０】
ループが６回実行（５回分岐）された後に、命令アドレス001100において、上記と同様に「アドレス001001に分岐する」と予測する。この場合、ループは６回目で終了するので、分岐命令は分岐せず予測がはずれる。従って、図４のステップＳ７に示されるように、命令アドレス001100とＧＨＲの内容011111との排他的論理和010011をタグ付きＰＨＴユニット２３のインデックスとし、タグ1100とカウント値0を登録する。この状態で、予測結果と各レジスタ／メモリの内容は、
PC=001100, 予測失敗, PHT[010011]=1100-0, GHR=111110
となる。
【００７１】
その後、命令アドレス001111において命令アドレス000010に分岐すると、
PC=001111, 予測失敗, BTB[1111]=00-1-000010, GHR=111101
となる。
【００７２】
命令アドレス000010以降の命令を再度実行すると、
PC=000100, 予測成功（非分岐）, BTB及びPHT更新なし, GHR=111010
PC=000101, 予測成功（非分岐）, BTB及びPHT更新なし, GHR=110100
PC=000110, 予測成功（非分岐）, BTB及びPHT更新なし, GHR=101000
PC=000111, 予測成功（非分岐）, BTB及びPHT更新なし, GHR=010000
PC=001000, 予測成功（非分岐）, BTB及びPHT更新なし, GHR=100000
PC=001100, 予測成功（分岐）, BTB及びPHT更新なし, GHR=000001
PC=001100, 予測成功（分岐）, BTB及びPHT更新なし, GHR=000011
PC=001100, 予測成功（分岐）, BTB及びPHT更新なし, GHR=000111
PC=001100, 予測成功（分岐）, BTB及びPHT更新なし, GHR=001111
PC=001100, 予測成功（分岐）, BTB及びPHT更新なし, GHR=011111
PC=001100, 予測成功（非分岐）, PHT[010011]=1100-0, GHR=111110
となる。ここで、ループの最後の繰り返しにおける命令アドレス001100の実行においては、ＢＴＢユニット２５及びタグ付きＰＨＴユニット２３が双方共にヒットし、タグ付きＰＨＴユニット２３のカウント値２３ｂは０なので、非分岐を予測する。最後に、
PC=001111, 予測成功（分岐）, BTB及びPHT更新なし, GHR=111101
となる。従って、今回は分岐予測が全て的中することになる。
【００７３】
このプログラムの実行において、本発明による分岐予測方式では、タグ付きＰＨＴユニット２３では１つのエントリしか使用していない。このように、本発明の分岐予測方式は、ＲＡＭの使用容量が少なくても、高い予測精度を実現することが出来る方式である。
【００７４】
なお図１に示される従来技術の分岐予測方式では、上記プログラムを実行した場合に、命令アドレス000010以降の命令を２度目に実行した際であっても、ＰＨＴエントリの干渉により全ての予測を的中させることは出来ない。
【００７５】
図６は、本発明による分岐予測装置を採用したプロセッサの構成例を示す。
【００７６】
図６のプロセッサ１００は、命令キャッシュ１０１、データキャッシュ１０２、命令フェッチユニット１０３、命令実行制御部１０４、レジスタ１０５、レジスタ１０６、演算部１０７乃至１１０を含む。
【００７７】
命令キャッシュ１０１及びデータキャッシュ１０２は、それぞれ命令及びデータを一時的に格納する。命令フェッチユニット１０３は、プログラムカウンタの示すアドレスの命令を、命令キャッシュ１０１から順次フェッチする。命令実行制御部１０４は、命令フェッチユニット１０３がフェッチした命令を順次デコードして、デコード結果に基づいて命令実行動作を制御する。レジスタ１０５、レジスタ１０６、及び演算部１０７乃至１１０は、演算実行ユニットを構成する。この演算実行ユニットは、命令実行制御部１０４の制御の下で動作して、命令に基づいた演算を実行する。ここで演算部１０７乃至１１０は、夫々命令０乃至３を独立に実行する形となっており、パイプライン動作を高速に実行可能な構成となっている。
【００７８】
図２に示される本発明による分岐予測装置は、命令フェッチユニット１０３に設けられ、分岐命令があるときにその分岐方向を予測して、予測分岐方向に対応したアドレスの命令をフェッチする。本発明による分岐予測方式ではエントリ干渉を回避して高精度な分岐予測が可能になるので、実際の分岐方向が確定する前に予測に基づいて命令フェッチしても、予測がはずれる可能性は小さく、パイプライン動作の乱れを避けることが出来る。
【００７９】
また本発明による分岐予測方式では、ＢＴＢユニット２５のバイアスビット２５ｃを使用することにより、従来のようにＰＨＴ単体で分岐予測を実行する場合と比較して、分岐結果を学習させるまでの時間が短くてすむ。従って、本発明による分岐予測方式は、コンテキストスイッチによる状況変化に短時間で対応できる。８ＫＢのＲＡＭを使用したベンチマークjpeg, jbig, mpeg4, ghostscriptにおいて、本発明による分岐予測方式は、平均で９６％の予測精度を実現した。
【００８０】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【００８１】
【発明の効果】
本発明による分岐予測方式では、エントリ干渉を回避して高精度な分岐予測が可能になるので、実際の分岐方向が確定する前に予測に基づいて命令フェッチしても、予測がはずれる可能性は小さく、パイプライン動作の乱れを避けることが出来る。
【００８２】
また本発明による分岐予測方式では、ＢＴＢのバイアスビットを予測に併用することにより、従来のようにＰＨＴ単体で分岐予測を実行する場合と比較して、分岐結果を学習させるまでの時間が短くてすむ。従って、本発明による分岐予測方式は、コンテキストスイッチによる状況変化に短時間で対応できる。
【図面の簡単な説明】
【図１】従来のＰＨＴを利用した分岐予測方式の構成図である。
【図２】本発明によるＰＨＴを利用した分岐予測装置の構成図である。
【図３】本発明による分岐予測のフローチャートである。
【図４】本発明によるデータ更新処理のフローチャートである。
【図５】分岐命令を含むプログラムの一例である。
【図６】本発明による分岐予測装置を採用したプロセッサの構成図である。
【符号の説明】
２１  ＸＯＲ回路
２２  ＧＨＲユニット
２３  タグ付きＰＨＴユニット
２４  比較ユニット
２５  ＢＴＢ（Branch Target Buffer）
２６  比較ユニット
２７  選択ユニット２７
【図１】
0004027620.tif 000002
【図２】
0004027620.tif 000003
【図３】
0004027620.tif 000004
【図４】
0004027620.tif 000005
【図５】
0004027620.tif 000006
【図６】
0004027620.tif 000007