(57)【要約】本発明は、プログラムの分岐目標を予測する方法、プロセッサ、及びコンパイラに関する。暗示オペレーションは、やがて現れる間接分岐についての分岐予測を暗示するために、プログラムに設けられる。間接分岐の分岐目標のテーブルは、間接分岐の予測精度を向上させるために使用され得る。分岐目標は、暗示オペレーションから導き出されるキー情報を基礎として決定される。
2004533695.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの分岐目標を予測する方法であって、
複数の分岐目標を有する分岐目標テーブルを準備するステップと、
キー情報を導き出すために、前記プログラムにおいて、暗示オペレーションを使用するステップと、
前記キー情報に基づいて、前記分岐目標テーブルから前記分岐目標を選択するステップと、
を有する分岐目標を予測する方法。
【請求項２】
前記請求項１に記載の分岐目標を予測する方法であって、
前記キー情報は、前記分岐の原因となるスイッチ文のスイッチ値から導き出されること、
を特徴とする分岐目標を予測する方法。
【請求項３】
前記請求項１又は請求項２に記載の方法であって、
前記キー情報は、前記分岐の原因となる仮想関数呼出の仮想関数テーブルのアドレスから導き出されること、
を特徴とする分岐目標を予測する方法。
【請求項４】
前記請求項１から請求項３のいずれか一項に記載の方法であって、
前記暗示オペレーションは、ＶＬＩＷ命令に組み込まれていること、
を特徴とする分岐目標を予測する方法。
【請求項５】
前記請求項１から請求項４のいずれか一項に記載の方法であって、
前記キー情報は、前記分岐目標テーブルへアクセスするために使用する索引を得るために、前記分岐命令又は前記暗示オペレーションを組み込んだ命令のアドレスによりハッシュされること、
を特徴とする分岐目標を予測する方法。
【請求項６】
前記請求項１から請求項５のいずれか一項に記載の方法であって、
前記分岐目標テーブルは、間接分岐のための分岐目標を有する間接分岐目標バッファであること、
を特徴とする分岐目標を予測する方法。
【請求項７】
前記請求項１から請求項６のいずれか一項に記載の方法であって、
前記暗示オペレーションは、前記プログラムの予め定められた位置に設けられ、
該予め定められた位置は、
前記対応する分岐命令が、命令実行サイクルのフェッチ・フェーズにあるときに、前記暗示オペレーションが命令実行サイクルの実行フェーズにあるように選択されること、
を特徴とする分岐目標を予測する方法。
【請求項８】
前記請求項１から請求項７のいずれか一項に記載の方法であって、
前記予測方法は、関数ポインタから生じる間接分岐の分岐目標を予測するために使用されること、
を特徴とする分岐目標を予測する方法。
【請求項９】
前記請求項１から請求項８のいずれか一項に記載の方法であって、
更に、前記分岐目標テーブルに、ジャンプ・テーブル及び／又は仮想関数テーブルの、一番最近使用したエントリを記憶するステップを有すること、
を特徴とする分岐目標を予測する方法。
【請求項１０】
前記請求項１から請求項９のいずれか一項に記載の方法であって、
前記予測方法は、コンパイラに統合された動的分岐予測方法であること、
を特徴とする分岐目標を予測する方法。
【請求項１１】
プログラムの分岐目標を予測するプロセッサであって、
複数の分岐目標を記憶する分岐目標バッファ手段と、
前記プログラムの暗示オペレーションを検出し、該暗示オペレーションからキー情報を導き出すデコード手段と、
前記分岐目標を選択するために、前記キー情報を使用して前記分岐目標バッファ手段にアクセスするアクセス手段と、
を有するプロセッサ。
【請求項１２】
前記請求項１１に記載のプロセッサであって、
前記分岐目標バッファ手段は、間接分岐目標を記憶するよう構成されており、
更に、分岐目標バッファ手段は、直接分岐目標を記憶するために設けられること、
を特徴とするプロセッサ。
【請求項１３】
前記請求項１１又は請求項１２に記載のプロセッサであって、
前記アクセス手段は、前記プロセッサの実行ステージ又はフェッチ・ステージのアドレスで、前記キー情報をハッシュするハッシング手段を有すること、
を特徴とするプロセッサ。
【請求項１４】
プログラムの暗示オペレーションを検出し、
該暗示オペレーションからキー情報を導き出し、
該キー情報に基づいて該分岐目標を決定するよう構成される、
プログラムの分岐目標を予測するコンパイラ。
【請求項１５】
前記請求項１４に記載のコンパイラであって、
前記分岐目標は、関数ポインタの間接分岐から生じること、
を特徴とするコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的分岐予測における分岐目標を予測するための方法、プロセッサ、及びコンパイラに関する。
【背景技術】
【０００２】
高性能スーパスカラ・プロッセサの発行速度及びパイプライン深度が増加するにつれ、発行される推論的作業の量もまた増加する。推論的作業は、分岐ミス予測の場合に捨てなければならないので、深くパイプライン化されたプロセッサは、性能の潜在能力を効果的に活用するために、正確な分岐予測器を採用しなければならない。
【０００３】
プログラムの分岐は、条件付の又は無条件の、及び直接の又は間接の、というように、分類され得る。無条件分岐が常に命令ストリームを目標に向け直すのに対して、条件付の分岐は、条件付で、命令ストリームを目標に向け直す。間接分岐が、プログラムの如何なる数の位置も示す、動的に特定された目標を有するのに対し、直接分岐は、プログラムの中の、たった一つの位置を示す、静的に特定された目標を有する。間接分岐は、現代の実行形プログラミング言語から生じる４つのタイプに分類され得る。これら４つのタイプは、関数リターン、スイッチから生じるテーブル・ジャンプ、仮想関数呼出、及び関数ポインタを介しての関数呼出である。
動的分岐予測は、一般に、分岐が存在する場合に、命令の安定したストリームを命令パイプラインに供給するために使用される。安定した命令の流れを達成するために、プロセッサのフェッチ・フェーズは分岐を検出し、分岐の方向（分岐成立又は分岐不成立）を予測し、分岐目標を提供しなければならない。分岐目標バッファ（ＢＴＢ）は、一般に、分岐目標を提供するために使用される。分岐が解明されるとき、すなわち分岐の方向及び分岐目標が分かるときはいつでも、その分岐目標は、本質的に命令アドレスによって索引付けられた分岐目標のキャッシュであるＢＴＢに入れられる。ＢＴＢは、命令キャッシュをアクセスするために使用されるものと同一のアドレスによって、パイプラインのフェッチ・フェーズでアクセスされる。もし、ＢＴＢがヒットすると、命令キャッシュからフェッチされた命令は分岐であるはずであり、ＢＴＢによって返された分岐目標は、該分岐の目標であると予想される。この予測は、目標アドレスが静的である直接分岐、すなわち、即値オペランドにより特定される目標をともなう分岐、にとっては、正しくなるだろう。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、ＢＴＢによって成される目標予測は、間接分岐、すなわち分岐目標アドレスが動的でありレジスタによって特定された目標を有する分岐、にとっては、しばしば適切でない。間接分岐は、直接分岐よりも使用頻度は低いが、間接分岐は予測が非常に困難であるので重要である。シミュレーションの結果は、間接分岐のより良い予測が、大幅に精度を向上させることを示す。
【０００５】
間接分岐のための目標予測器は、ポ・ヤン・チャン等によって、「間接ジャンプのための目標予測」、第２４回コンピュータ・アーキテクチャ国際シンポジューム会報、デンバー、１９９７年６月、及び、カレル・ドライセン等によって、「正確な間接分岐予測」、第２５回コンピュータ・アーキテクチャ国際シンポジューム年報、バルセロナ、スペイン、１９９８年６月、の中で提案されている。これらの予測器は、ＢＴＢが分岐のアドレスに基づいてのみ目標を提供するのに対し、分岐のアドレス及び分岐へと導く実行経路に基づいて目標を提供する。これらの予測器の背景の考え方は、間接分岐へと導く経路と該間接分岐の目標との間に存在する相関関係を使用するということである。この技術の結果は、間接分岐毎に多くの目標が記憶されるということである。
【０００６】
更に、動的分岐予測が統合されたコンパイラ（ＣＤ-ＤＢＰ）プロシージャは米国特許明細書第５８５７１０４号で知られており、コンパイラは、動的に計算された値を分岐予測器に伝達し、これが分岐予測器に予測を向上させることを許す。しかしながら、知られているＣＳ-ＤＢＰプロシージャは、単に、分岐の方向又は分岐方向と相関する値が予測される、蓋然論のアプローチを提供する。
【０００７】
ゆえに、間接分岐の予測精度が向上され得る分岐予測のための方法、プロセッサ及びコンパイラを提供することが、本発明の目的である。
【課題を解決するための手段】
【０００８】
本発明の目的は、請求項１で規定されるような予測方法、請求項１１で規定されるようなプロセッサ、及び請求項１４で規定されるようなコンパイラ、によって達成される。
【０００９】
本発明によれば、やがて現れる間接分岐について、前記分岐予測を暗示するオペレーションが提供され、間接分岐の分岐目標のテーブルも、コンパイラの決定も、間接分岐の予測精度を向上させるために使用され得る。特に、暗示は、やがて現れる間接分岐について、ハードウェアに与えられ、そこで、前記分岐の前記目標に関連するキー情報が導き出される。
【００１０】
この技術の適用は、ある方向への前記分岐の最初の実行を除いて、間接分岐の前記目標予測精度を大幅に向上させる。よって、十分大きな分岐目標バッファ又はテーブルが備えられた、正しい目標へ導く目標予測のほとんど全てが提供される。
【００１１】
前記コンパイラは、関数ポインタから生じる間接分岐の予測に有益である。この場合、該コンパイラによって決定された分岐目標は、ちょうど良いときに利用できる。
【００１２】
前記キー情報は、前記分岐の起因となるスイッチ文のスイッチの値から導き出されても良い。更に、前記キー情報は、前記分岐の起因となる仮想関数呼出の仮想関数テーブルのアドレスから導き出されても良い。分岐の殆ど全ては関数リターン及びスイッチ文から生じているという事実のために、効率の良い、かつ正確な分岐予測が適用され得る。もし、前記プロセッサ（例えばＶＬＩＷプロセッサ）のロード・レイテンシがフロントエンド・パイプライン・ステージの数と等しくなるように選択されると、前記暗示オペレーションは該ロード処理と平行してスケジュールされる。望ましくは、前記暗示オペレーションは、前記プログラムの前記予め定められた位置で提供されることが良く、該予め定められた位置は、前記対応する分岐命令が、前記命令実行サイクルのフェッチ・フェーズにあるときに、当該暗示オペレーションが命令実行サイクルの実行フェーズにあるように選択されている。従って、前記暗示オペレーションは、前記間接分岐がフェッチされるときに、前記プロセッサの前記実行ステージに到達するだろう。それによって、前記フェッチ・ステージにおける前記分岐予測への直接フィードバックが与えられ得る。
【００１３】
前記キー情報は、前記分岐目標テーブルをアクセスするために使用される索引を得るために、前記分岐命令又は前記暗示オペレーションを組み込んでいる前記命令の前記アドレスでハッシュされても良い。前記分岐目標テーブルは、間接分岐のための分岐目標を有している間接分岐目標バッファであっても良い。前記分岐目標テーブルに記憶された前記分岐目標は、ジャンプ・テーブル及び／又は仮想関数テーブルの、一番最近使用されたエントリであれば良い。それによって、前記データキャッシュへの長いアクセスの場合に、時間的優位が達成され得る。
【００１４】
前記プロセッサのアクセス手段は、該プロセッサの実行ステージ又はフェッチ・ステージのアドレスで前記キー情報をハッシングするハッシング手段を有していても良い。それによって、前記間接分岐目標バッファをアクセスするために使用される索引は、簡単かつ素早い方法で生成され得る。
【発明を実施するための最良の形態】
【００１５】
以下に、本発明の好適な実施例が、添付している図面を参照しながら、非常に詳細に開示されるだろう。
【実施例１】
【００１６】
好適な実施例は、ここで、図１に示されているような、ＶＬＩＷ（超長命令語）プロセッサのアーキテクチャを基本として、説明されるだろう。
【００１７】
図１から判断され得るように、分岐決定機能５０はプロセッサの実行ステージに提供され、プログラム・カウンタ生成ステージのマルチプレクサ１０へ正しい分岐目標を供給するよう、構成されている。マルチプレクサ１０は、ネクスト・プログラム・カウンタ機能性７０により生成される次の連続したプログラム・カウンタ、及び分岐予測器１００によって生成される予測された分岐目標が供給される。更に、割り込みベクタ又は他の例外ベクタは、前記マルチプレクサ１０に供給され得、その際、フェッチ・ステージの命令キャッシュメモリ２０へ供給されるべき選択されたプログラム・カウンタを出力する。前記プログラム・カウンタは、更に、前記分岐予測器１００に供給される。前記プログラム・カウンタに基づいて、前記命令キャッシュ２０は、命令語を生成するために、解凍ステージの解凍器３０へ供給される圧縮された命令を出力する。前記解凍ステージは、ＶＬＩＷプロセッサ内に提供されるべき必要は無い。前記命令ステージは、それから、デコード・ステージの命令デコーダ４０に供給され、そこで、前記ＶＬＩＷ命令はデコードされ、かつ分岐決定ユニットに供給される。更に、前記実行ステージは、前記分岐予測器１００内に提供される分岐目標バッファを更新するための、キュー更新ユニット６０を有する。この更新は、前記分岐予測器１００からの予測器更新情報出力信号を基礎として実行される。更に、前記分岐予測器１００は、前記実行ステージの前記分岐決定ユニット５０へ供給される予測分岐成立情報を出力する。
【００１８】
好適な実施例によれば、暗示オペレーションは、やがて現れる間接分岐について、プロセッサ・ハードウェアへキーを渡すために、命令に加えられ又は命令に組み込まれる。そして、間接分岐がフェッチされ、かつ分岐の目標が予測されなければならないとき、キー情報が分岐予測器１００へ供給されるので、暗示オペレーションは実行ステージで有効である又は有効になる。図１に示されているように、デコードされた命令の一部は、デコードされた命令から分岐予測器１００の入力部ｆへ向いている矢印によって示されているように、分岐予測器１００に供給される。このように、分岐予測器１００は、対応する分岐目標バッファをアクセスするために、間接分岐への暗示が与えられることに気づいても良いし、供給されるキー情報を受け取っても良い。
【００１９】
図２は、図１で示されている分岐予測器１００の概略ブロック図を示す。図２によれば、分岐予測器１００は、命令アドレスが分岐目標と関連付けられているキャッシュである分岐目標バッファ（ＢＴＢ）１０８を有している。もし、命令アドレスがＢＴＢ１０８でヒットしたら、該アドレスが分岐命令に関連しており、予測が目標選択器１１４を経由して生成され出力されるであろうことが分かる。
【００２０】
更に、分岐履歴テーブル（１１０）が備えられ、それは分岐の方向を予測する。ＢＨＴ１１０は、条件付分岐の方向、すなわち分岐が分岐成立か否か、を予測する。これは、典型的に、プログラム・カウンタの下位によって指し示された２ビットの飽和型カウンタのテーブルによって実現される。このようなカウンタは、決定された分岐が分岐成立のときに増やされ、分岐が分岐不成立のときに減らされる。分岐は、もし、関連する２ビットカウンタの最も重要なビットがセットされていたら、分岐成立として予測される。２ビットカウンタは、分岐予測器１００に履歴現象の幾つかの型を伝えるために、弱い及び強い状態を有していても良い。ある方向の状態にある分岐が誤って予測されるときはいつでも、予測を変更する前に、２度目の機会が与えられる。これは、強いから弱い状態へ移行することによって達成されるが、同一の予測を維持する。分岐が、再び誤って予測されると、予測は変更される。正しい予測の場合には、状態は、強い状態へ戻される。ＢＨＴ１１０がタグなしテーブルであるという事実のために、同一のカウンタへの複数の分岐のマッピングのコンフリクトは検出されない。図１の解凍ステージによって予測が許可されたときは、アンドゲート１１２は、予測分岐成立情報を出力するためにオープンする。
【００２１】
加えて、関数リターンの予測は、リターンアドレススタック（ＲＡＳ）１０６を維持することによって、改善され得る。関数呼出分岐はリターンアドレスをＲＡＳ１０６にプッシュし、関数リターン分岐はＲＡＳ１０６の値をポップする。フェッチ・ステージで、関数リターンを検出するために必要な分岐の型を決定するために、ＢＴＢ１０８は、通常、型情報を命令アドレスに関連付ける。代替として、型情報は、命令キャッシュ２０で、予め符号化されることが可能である。
【００２２】
好適な実施例では、もし、暗示オペレーションがデコード・ステージで検出されると、暗示検出情報は、分岐予測器１００の入力部ｆへ加えられる。暗示検出情報は、分岐予測器１００に備えられている追加の間接分岐目標バッファ（ＩＢＴＢ）１０４の出力信号を選択するように、分岐予測器１００の目標選択器１１４へ供給される。更に、暗示オペレーションから導き出されるキー情報は、分岐予測器１００の入力部ｆに供給され、そこから内部ハッシュユニット１０２へ供給され、該キー情報は、入力部ｂ経由でフェッチ・ステージから供給される現在のプログラム・カウンタでハッシュされる。そのため、やがて現れる間接分岐は、分岐の目標に関連するキーにより暗示される。スイッチ文に関連する命令の場合、キーは、スイッチ文のスイッチ値であれば良い。更に、仮想関数呼出に関連する命令の場合、キーは、仮想関数呼出の仮想関数テーブルのアドレスであれば良い。キー情報又はキーは、その後、ＩＢＴＢ１０４の分岐目標のタグなしテーブルで索引を得るために、暗示オペレーションを有する命令のアドレス（プログラム・カウンタ）により、ハッシュユニット１０２でハッシュされる。
【００２３】
ＩＢＴＢ１０４は、分岐決定ユニット５０の出力信号に基づいた実行ステージの更新キューユニット６０、及び分岐予測器１００から出力されるＩＢＴＢ索引を有する予測更新情報によって更新されても良い。
【００２４】
図３及び図４は、スイッチ文及び仮想関数呼出が、どのように実装されているのかを示す。両方の場合で、「ｂｐｈｉｎｔ」と呼ばれる操作が、やがて現れる間接分岐について、キーをハードウェアに渡すために使用される。図３について言えば、一般的な表現「ｌｄ３２ｘ  ａ，ｉ  →  ｖ」は、「ｖ＝ａ［ｉ］」を意味し、図４について言えば、一般的な表現「ｌｄ３２ｄ（０）ａ  →  ｖ」は、「ｖ＝ａ［０］」を意味する。間接分岐「ｐｊｍｐｔ」がフェッチされ、その目標が、分岐予測器１００によって予測されなければならないとき、ｂｐｈｉｎｔ操作は、図５に示すように、実行ステージにあり、ＶＬＩＷプロセッサの連続するステージの同一時の内容は、正しいテンポで、異なる位置における縦の列で示されている。
【００２５】
分岐予測器１００は、入力部ｆにおける信号によって、間接分岐がフェッチされたことを知らされ、そして、前記導き出されたキー情報は、ＩＢＴＢ１０４をアクセスするための索引を生成するためにハッシュされ、それは、目標選択器１１４経由の分岐目標及び分岐予測器１００の出力信号ａを生成し、出力するためである。ＩＢＴＢ索引は、出力部ｃ経由で出力され、フェッチ・ステージから、ＩＢＴＢ１０４を更新するために使用される実行ステージへ、パイプラインを通って渡される。
【００２６】
図３及び図４では、各行は、一つのＶＬＩＷ命令に対応し、図３のスイッチ文は、間接分岐によって続けられるテーブル・ルック・アップで構成されており、図４の仮想関数呼出実装は、このテーブル及び間接分岐からメソッドへのメソッド・ポインタによって続けられる仮想関数テーブルポインタのロードで構成されている。
【００２７】
図５は、図４の仮想関数呼出に関連しており、その結果、間接分岐のための改善された分岐予測を提供するために、情報が、どのように、実行ステージの暗示オペレーションからフェッチ・ステージに渡されるのかということを、矢印は示している。図５では、各ラインは、図５の左側に示されている命令の連続する処理ステージを示しており、ラインのずれは、命令のパイプライン処理を示している。ｂｐｈｉｎｔオペレーションを有するロード命令が最初の実行ステージに配置されたとき、ｐｊｍｐｔ分岐命令は、フェッチ・ステージに配置される。
【００２８】
開示される技術は、関数ポインタから生じる間接分岐の予測のためにもまた、有益であり得る、ということに留意されたい。この場合、コンパイラは、正しいテンポで有効にするための、決定され又は計算された分岐目標に基づいて、キーとして使用される値を検出しなければならない。特に、コンパイラは、検出された暗示オペレーションから、キー情報を導き出す（例えば、抽出する又はデコードする）。導き出されたキー情報は、分岐目標を決定するために、コンパイラによって直接使用されても良い。代替として、コンパイラは、分岐目標を得るために、ＩＢＴＢ１０４をアクセスしても良い。
【００２９】
もし、ロード・レイテンシがＶＬＩＷプロセッサのフロントエンド・パイプライン・ステージの数と等しければ、前述したように、暗示オペレーションは、ロード処理と平行してスケジュールされることができる。暗示オペレーションは、間接分岐がフェッチされたときに実行ステージに到達する。ロード・レイテンシがパイプラインのフロント・エンドより長い場合、暗示オペレーションは、ロード処理よりも後にスケジュールされることができる。ロード・レイテンシがフロントエンドステージの数より短い場合、間接分岐は、暗示オペレーションによって提供されるキーを使用することを可能とするために、後でスケジュールされなければならないだろう。後のスケジュールは、命令総数を増やすだろうし、従って、暗示する処理の有用性を減らす。
【００３０】
代替としては、提案された技術は、ジャンプ・テーブル及び仮想関数テーブルのエントリのためにキャッシュとして実装されても良い。従って、これらのテーブルの、一番最近使用されたエントリがＩＢＴＢ１０４に記憶される。そのようなキャッシュ機能は、もし通常のデータキャッシュへのアクセスが時間を食うのであれば、有用であるかもしれない。
【００３１】
従って、冒頭で説明した、知られているＣＳ−ＤＢＴ技術と比較して、本発明は、分岐目標を予測し、分岐目標に直接関連する分岐予測器へキーを提供することを提唱する。その結果、決定論アプローチが成し遂げられる。
【００３２】
如何なる種類の暗示オペレーションも、索引又は間接分岐目標バッファ若しくは他の目標テーブルへの他の種類のアクセス、を提供するためにふさわしい如何なる種類のキー情報、を導くためにも提供され得る、ということに留意されたい。更に、如何なる種類のハッシング・スキームが、キー情報から索引情報を生成するために使用されても良い。幾つかの種類のタグなし間接目標キャッシュが実装され得る。それらキャッシュは、キー情報及び命令アドレス情報が、ＩＢＴＢ１０４にハッシュされるという態様とは異なっても良い。その結果として、本発明は、前述した好適な実施例に制限されず、分岐予測機能を有するいずれのプロッセッサ構成にも適用可能である。本発明は、添付した請求項の範囲内における、如何なる変形をもカバーすることを意図している。
【図面の簡単な説明】
【００３３】
【図１】図１は、好適な実施例によるプロセッサの概略ブロック図を示す。
【図２】図２は、好適な実施例による、プロセッサ内に備えられる分岐予測器の概略ブロック図を示す。
【図３】図３は、暗示オペレーションを有するスイッチ文の実行を示す。
【図４】図４は、暗示オペレーションを有する仮想関数呼出の実行を示す。
【図５】図５は、暗示オペレーションを有するロードオペレーションの、パイプライン化された実行、及び間接分岐操作を示す。
【図１】
2004533695.tif 000003
【図２】
2004533695.tif 000004
【図５】
2004533695.tif 000005
【国際公開パンフレット】
2004533695.tif 000006
2004533695.tif 000007
2004533695.tif 000008
2004533695.tif 000009
2004533695.tif 000010
2004533695.tif 000011
2004533695.tif 000012
2004533695.tif 000013
2004533695.tif 000014
2004533695.tif 000015
2004533695.tif 000016
2004533695.tif 000017
2004533695.tif 000018
2004533695.tif 000019
【国際調査報告】
2004533695.tif 000020
2004533695.tif 000021
2004533695.tif 000022