(57)【特許請求の範囲】
【請求項１】
中央処理装置によって実行中のプログラムコードのセグメントに含まれる分岐命令に関連した分岐予測を調整する分岐予測調整方法において、
前記中央処理装置による前記分岐命令の実行が待ち状態の時に前記プログラムコードの実行に割り込むことと、
前記分岐予測を更新する予測調整ルーチンを実行することと、
前記プログラムコードの実行を再開することと、
を含むことを特徴とする分岐予測調整方法。
【請求項２】
前記中央処理装置による前記分岐命令の実行が待ち状態の時に前記プログラムコードの実行に割り込むことは、
タイマーを所定の時間間隔に初期設定することと、
前記時間間隔の終了を待つことと、
前記時間間隔が終了したとき前記プログラムコードの実行に割り込むことと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項３】
前記時間間隔が終了した後に前記分岐命令を待つことをさらに含むことを特徴とする請求項２に記載の分岐予測調整方法。
【請求項４】
タイマーを所定の時間間隔に初期設定することは、タイマーをランダムな時間間隔に初期設定することであることを特徴とする請求項２に記載の分岐予測調整方法。
【請求項５】
前記中央処理装置による前記分岐命令の実行が待ち状態の時に前記プログラムコードの実行に割り込むことは、
命令カウンタを所定の命令カウント値に初期設定することと、
命令の実行時に該命令をカウントすることと、
実行された命令の数が前記命令カウント値に等しくなったとき前記プログラムコードの実行に割り込むことと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項６】
実行された命令の数が前記命令カウント値に達した後に前記分岐命令を待つことをさらに含むことを特徴とする請求項５に記載の分岐予測調整方法。
【請求項７】
命令カウンタを所定の命令カウント値に初期設定することは、命令カウンタをランダムな命令カウント値に初期設定することであることを特徴とする請求項５に記載の分岐予測調整方法。
【請求項８】
前記中央処理装置による前記分岐命令の実行が待ち状態の時に前記プログラムコードの実行に割り込むことは、
前記プログラムコードの実行に割り込む中断命令を実行することと、
前記中断命令を前記分岐命令に置き換えることと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項９】
前記中央処理装置による前記分岐命令の実行が待ち状態の時に前記プログラムコードの実行に割り込むことは、
前記分岐命令に割り込みを発生させるフラグをセットすることと、
前記フラグがセットされた後、前記第１の中断命令が現われたとき、前記プログラムコードの実行に割り込むことと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項１０】
前記分岐予測を更新する予測調整ルーチンを実行することは、
前記分岐命令の分岐条件を評価して前記分岐命令が分岐するか否かを判定することと、
前記分岐命令に関連する分岐予測を評価することと、
前記分岐予測の正誤を判定することと、
前記分岐予測が誤っている場合には前記分岐予測をトグルすることと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項１１】
前記分岐予測を更新する予測調整ルーチンを実行することは、
前記分岐命令の分岐条件を評価して前記分岐命令が分岐するかどうかを判定することと、
前記分岐命令に関連する分岐予測を評価することと、
前記分岐予測の正誤を判定することと、
前記分岐予測の正誤を分岐履歴として保管することと、
分岐履歴に基づいて前記分岐予測を更新し、前記分岐予測の正誤を判定することと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項１２】
分岐履歴に基づいて前記分岐予測を更新し、前記分岐予測の正誤を判定することは、２回連続して前記分岐予測を評価したとき前記分岐予測が誤っている場合には前記分岐予測をトグルすることであることを特徴とする請求項１１に記載の分岐予測調整方法。
【請求項１３】
前記分岐予測を更新する予測調整ルーチンを実行することは、
待ち状態の命令を調べて前記待ち状態の命令が分岐命令であるか否かを判定することと、
前記待ち状態の命令が分岐命令でない場合には前記プログラムコードの実行を再開することと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【請求項１４】
前記分岐予測を更新する予測調整ルーチンを実行することは、
待ち状態の命令を調べて前記待ち状態の命令が分岐命令であるか否かを判定することと、
前記待ち状態の命令が分岐命令でない場合には、分岐命令に達するまで前記プログラムコードからの命令の実行をエミュレートすることと、
を含むことを特徴とする請求項１に記載の分岐予測調整方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はコンピュータシステムにおけるコンピュータ命令の実行に係り、とりわけ、処理装置に割り込み、保留中（ペンディング）の分岐命令を観察することによってコンピュータ分岐命令の分岐予測を生成する技術に関する。
【０００２】
【従来の技術】
初期のコンピュータシステムでは一度に１つのコンピュータ命令を逐次実行し、前の命令が完了するまでは命令の実行が開始されることはなかった。しかしながら、コンピュータ設計技術が進歩するにつれて、コンピュータ設計者はコンピュータシステムに各種の並行処理を組み込むようになった。
【０００３】
並行処理の１つにパイプライン処理がある。パイプライン処理はコンピュータ命令の実行を様々なステップに分解し、それらのステップを重複させることによって複数の命令を同時に処理する。他の種類の並行処理としてスーパースケーリングがある。スーパースケーリングは、複数の実行単位を用いて別の命令を同時に処理する。
【０００４】
並行設計技術は分岐命令に対する問題を生じさせる。分岐命令の実行時に、その分岐命令がテストしなければならない条件が、まだ判定されていないという状態が多く発生する。初期のコンピュータシステムは、かかる条件が判定されるまでかかる分岐命令（およびそれに続く命令）の実行を停止するだけであった。パイプライン処理されたコンピュータにおいては、条件が判定されるまでパイプラインを空にしておかなければならないことが多く、これはパイプライン処理の利点を制約するものである。
【０００５】
この問題の対策として、コンピュータ設計者は分岐挙動（branch behavior）を予測するメカニズムを設けるようになった。分岐命令が発生すると、その分岐命令の分岐挙動が予測される。後に、条件が評価可能となったとき、その予測が正しいかどうかも評価される。予測が正しい場合、実行が継続され、並列実行の利点が維持される。予測が誤っている場合、暫定的に実行された命令をパイプラインからパージし、正しい分岐からの命令を実行しなければならない。しかし、通常、誤った分岐に対するペナルティが実行を停止し、条件の判定を待つ場合に比べ大きくなることはない。
【０００６】
分岐予測によって得られる性能の向上が、予測の精度に大きく関係することはいうまでもない。したがって、正確な分岐予測を行なう多くの技術が開発されてきた。初期の技術の１つとして、ある分岐が常に選択されることを単に予測するというものがある。統計的には、ほとんどの分岐が選択されるため、この技術はある程度有効であることがわかった。同様の技術では、逆方向の分岐が常に選択され、順方法の分岐は決して選択されないものと予測する。
【０００７】
他の技術では、最近分岐命令の分岐先となったアドレスのアドレステーブルが用いられる。通常、このテーブルは４から８のエントリを有する連想メモリからなる。ある分岐命令中のアドレスがこのテーブルにある場合、そのアドレスが予測実行経路として用いられる。
【０００８】
より高度な方法がＥ．  Ｓｍｉｔｈ氏の米国特許第４，３７０，７１１号に開示されている。Ｓｍｉｔｈ氏は、例えばそれぞれが＋１、０、−１および−２の値を取りうる２ビットカウント値を有する１６のエントリを有するランダムアクセスメモリ（ＲＡＭ）を開示している。ハッシュ機構（hash mechanism）が分岐命令アドレスをこのＲＡＭにアクセスする４ビットアドレスに変換する。ある分岐命令に対応するエントリに記憶された値が＋１あるいは０である場合、その分岐が選択されるものと予測される。そうでない場合、その分岐は選択されないものと予測される。その分岐命令が選択された場合、実行後そのカウントメモリエントリが＋１の限度までインクリメントされる。選択されない場合、カウントメモリアドレスが−２の限度までデクリメントされる。Ｓｍｉｔｈ氏の開示した予測法では分岐予測の公式化に分岐履歴が組み込まれる。例えば、分岐が数回選択されていた場合、予測を変更するために２回続けて選択されてはならない。多くのコンピュータシステムに、予測を記憶するテーブルおよび分岐命令と予測とを関係付けるハッシュ関数を用いる、この方法になんらかの変形を加えたものが用いられている。
【０００９】
別の方法がＨａｎａｎ  Ｐｏｔａｓｈ氏の米国特許第４，４３５，７５６号に開示されている。Ｐｏｔａｓｈ氏は、分岐条件の真偽が評価される確率が高いかどうかに基づいて各分岐命令の分岐予測を符号化することを開示している。他の実施形態では、Ｐｏｔａｓｈ氏は分岐命令の分岐履歴および分岐予測の符号化を開示している。この実施形態では、予測が２回続けて誤っていた場合、その予測は変更され、それにはその分岐命令中への新たな予測の符号化と、その分岐命令のメモリへの書き戻しが必要である。また、分岐命令は、予測が変更されなくとも分岐履歴が変化した場合、常にメモリに書き戻さなければならないことも指摘しておく。これによって大量の書き込みデータが生じ、Ｉ／Ｏスループットが低下する。例えば、２つの分岐経路を交互に取る分岐命令は実行されるたびにメモリに書き戻さねばならない。
【００１０】
ヒューレット・パッカード社の製造するコンピュータシステムには２種類の分岐予測が用いられてきた。すなわち、予測テーブルを用いて動的に生成された分岐予測をＣＰＵの近くに記憶するハードウェア型分岐予測法およびコンピュータプログラムのコンパイル時に静的な分岐予測を各分岐命令中に符号化するソフトウェア型予測法である。ソフトウェア型予測法の場合、予測は比較関数中のオペランドの順序に基づいて分岐命令中に符号化される。例えば、次の比較および分岐（ＣＯＭＢ）命令について考察する。
第１の命令は、
ＣＯＭＢ，＜    Ｒ５，Ｒ３，Ａｄｄｒｅｓｓ  である。
また、第２の命令は、
ＣＯＭＢ，＞＝  Ｒ３，Ｒ５，Ａｄｄｒｅｓｓ  である。
【００１１】
これらの命令は論理的には同一であるが、第１の命令中に符号化された分岐予測は第２の命令中に符号化された分岐予測の逆である。
【００１２】
有効な予測を生成するためには、通常のコンピューティング環境におけるアプリケーションの実行時に分岐挙動を観察する「プロファイルに基づく最適化（ＰＢＯ）」を実行しなければならない。ＰＢＯの実行が完了した後、ＰＢＯの実行中に観察された分岐挙動に基づく更新された分岐予測を組み込むようにユーザのアプリケーションがコンパイルされる。
【００１３】
【発明が解決しようとする課題】
ソフトウェア型の分岐予測法の利点は、最後の１つあるいは２つの分岐ではなくある長い期間にわたって観察された挙動に基づいた予測が可能であることである。また、ソフトウェア型の予測法は複雑性およびコストの低いハードウェアしか必要としない。予測精度の判定とそれに応じた予測の更新とをも行なわなければならないハードウェアに比べ、分岐予測のみを実行するハードウェアの設計ははるかに容易である。
【００１４】
ソフトウェア型分岐予測法の問題点は、予測が静的であり、プログラムデータあるいはコンピューティング環境の変化に適応しないことである。一旦分岐命令にコンパイルされた予測が変更されることはない。また、ユーザは高い分岐予測性能を得るために必要なＰＢＯを実行したがらない。
【００１５】
ハードウェア型分岐予測法の利点は、それがコンピュータシステムのユーザに対して完全に透明であり、分岐に影響するコンピューティング環境の変化（データベースに記憶された情報の変化等）に動的に適応し、また予測テーブルが大型である場合、あるいはＰｏｔａｓｈ氏が開示するように予測を各命令に関係付けることができる場合、非常に精度が高いことである。
【００１６】
ハードウェア型分岐予測法の問題点は、実施コストが高く、また現在のところハードウェア分岐予測を用いるように構成されたコンピュータが多くないことである。効率を上げかつ論理ゲートの数を低減するために、予測テーブルには通常限られた数の分岐命令しか記憶されず、分岐命令のアドレスの一部しか記憶されなかったり、あるいはかかるアドレスが全く記憶されないことが多い。その結果、この予測法にはエイリアシング（aliasing）が生じ、実際に実行される分岐命令に基づかない予測が生成される。エイリアシングはデータベースプログラム等の実行頻度の高い分岐命令を多数有するプログラムにおいては重大な問題となる。
【００１７】
【課題を解決するための手段】
本発明は、分岐命令に関係付けられた分岐予測を、コンピュータの中央処理装置に周期的に割り込んで保留中の分岐命令を観察する予測調整ルーチンを実行することによって動的に調整する技術である。ある分岐命令が保留中でない場合、この予測調整ルーチンは終了し、中断された命令ストリームの実行が再開される。分岐命令が保留中である場合、その分岐命令が評価され、その分岐命令に関係付けられた分岐予測と比較される。その予測が正しい場合、中断された命令ストリームの実行が再開される。予測が誤っている場合、その予測を評価してそれを変更すべきかどうかが判定される。一実施形態においては、かかる分岐予測の変更が必要かどうかの判定にその分岐命令の過去の分岐履歴がさらに用いられる。
【００１８】
【発明の実施の形態】
図１はコンピュータシステム１０の概略ブロック図である。コンピュータシステム１０は中央処理装置（ＣＰＵ）１２、レベル１（Ｌ１）キャッシュ１４、レベル２（Ｌ２）キャッシュ１６、メインメモリ（主記憶装置）１８、永久記憶ディスク２０および仮想メモリ記憶ディスク２２を有する。多くのコンピュータシステムにおいて、永久記憶ディスク２０および仮想メモリ記憶ディスク２２は同じ物理的ハードドライブに組み込まれる。
【００１９】
図１には、実行前、実行中および実行後にプログラムコードが記憶される、様々な位置を示す。あるプログラムが最初に実行されるとき、そのプログラムコードは永久記憶ディスク２０から検索され、メインメモリ１８に記憶される。プログラムコードの各部が実行されると、それらの部分はＬ２キャッシュ１６およびＬ１キャッシュ１４に記憶される。当該技術分野において周知の通り、Ｌ１キャッシュ１４は通常ＣＰＵ１２に近い非常に高速のメモリとして実施される。これはＣＰＵと同じ集積回路上に設けられることが多い。Ｌ２キャッシュ１６はこれより多少低速で大型である。最後に、メインメモリ１８は非常に大型で、Ｌ２キャッシュ１６より低速である。
【００２０】
メインメモリ１８にプログラムおよびデータが記憶されるとき、そのプログラムおよびデータのサイズがメインメモリ１８の物理的サイズを超える場合がある。この場合、メインメモリ１８からのメモリページ（memory pages）が仮想メモリ記憶ディスク２２に記憶され、これによってメインメモリ１８内に利用可能なメモリスペースが追加される。プログラムが仮想メモリ記憶ディスク２２に記憶されたメモリページを参照すると、そのメモリページが検索され、必要な場合、他のページが仮想メモリ記憶ディスク２２にスワップアウトされる。
【００２１】
図１にはコンピュータの分野において一般的な代表的コンピュータアーキテクチャを示す。以下に本発明を図１を参照して説明するが、当業者には本発明はより少数あるいはより多数のキャッシュメモリを有するコンピュータシステム、複数のＣＰＵを有するコンピュータ等の他の様々なコンピュータアーキテクチャにおいて実施可能であることが理解されよう。
【００２２】
図２は図１のＣＰＵ１２の一部のブロック図である。ＣＰＵ１２は論理演算装置（ＡＬＵ）２４、プログラムカウンタ（ＰＣ）２６、状態レジスタ（ＳＴＲ）２７、命令レジスタ（ＩＲ）２８、レジスタ３０群、後入れ先出し（ＬＩＦＯ）スタック３２および割り込みユニット３４を有する。ＡＬＵ２４は加算、減算、乗算、桁送り、比較等の各種の数学的な動作を実行する。レジスタ３０はＡＬＵ２４の使用するデータを記憶し、ＰＣ２６は現在実行中の命令の記憶場所を指示するアドレスを記憶し、ＩＲ２８は現在実行中の命令を記憶し、ＬＩＦＯスタック３２はＣＰＵ１２の一時的記憶領域を供給し、割り込みユニット３４は割り込みを処理する。状態レジスタ２７はＣＰＵ１２の様々なモードを制御および決定する状態ビットを有する。
【００２３】
割り込みユニット３４は割り込みに応答し、また割り込みを発生させることができる。例えば、ＩＲＱライン３６はネットワークアダプタによるバス上へのハードウェア割り込みの表明といった、外部で生成されたハードウェア割り込みを表わす。中断命令３８はプログラムコードに配置することのできるＢＲＥＡＫあるいはＴＲＡＰ命令等のソフトウェア割り込みを表わす。タイマー４２は周期的な間隔でＣＰＵ１２に割り込むリアルライムクロック等のタイマー値に基づいて生成される割り込みを表わす。最後に、命令カウンタ４０はある特定の数の命令の後に生成される割り込みを表わす。命令カウンタ４０およびタイマー４２の使用する値はオペレーティングシステムによって変更することができる。
【００２４】
割り込みユニット３４が割り込みを処理するとき、レジスタ３０、ＰＣ２６、ＳＴＲ２７およびＩＲ２８に記憶された数がＬＩＦＯスタック３２に記憶される。図２にはこれをＬＩＦＯスタック３２に記憶されるそれぞれの値にラベル「（Ｉｎｔ）」を付して示している。これらの値がＬＩＦＯスタック３２に記憶された後、処理される特定の割り込みに関係付けられた割り込みサービスルーチン（ＩＳＲ）が実行される。そのＩＳＲが処理された後、これらの値はＬＩＦＯスタック３２から除去され、元の場所に戻される。
【００２５】
ＩＳＲの実行中、ＩＳＲはＬＩＦＯスタック３２に記憶された値へのアクセスを有する。したがって、ＩＳＲは割り込み発生時に実行中であった命令、その命令が記憶されているメインメモリ内のアドレス、および割り込み発生時のレジスタの内容を調べることができる。
【００２６】
図１および図２は、コンピュータの分野で知られている最近のＣＰＵアーキテクチャよりはるかに簡単なＣＰＵアーキテクチャを示すものである。最近のＣＰＵはアウトオブオーダ（out-of-order）実行を支援するための複数の実行ユニット、パイプライン、回路等を有する。しかし、図１および図２に示すアーキテクチャは本発明を説明するには十分である。以下に本発明を図１および図２を参照して説明するが、当業者には本発明は他の様々なコンピュータアーキテクチャにおいて実施可能であることは明らかであろう。
【００２７】
本発明はＣＰＵに割り込んで保留中の分岐予測を観察することによって分岐予測を動的に調整する方法および装置である。ここでは、「分岐命令」という用語は一般的にある条件に基づいて分岐する分岐命令を指すものとする。分岐命令が常に同じ場所に分岐する無条件分岐命令である場合、その分岐が選択されるかどうかの予測が不要であることはいうまでもない。一方、多くのコンピュータシステムが無条件分岐命令のある種の側面（例えば、パイプラインを一杯にしておくこと）を分岐命令の一般的枠組みの中で管理している。したがって、無条件分岐命令の分岐挙動の予測は本発明の範囲に含まれる。
【００２８】
図３は本発明に係る割り込み型予測調整ルーチン４４のフローチャートである。割り込み型予測調整ルーチン４４はＩＳＲとしてソフトウェアで実施可能であるが、本発明はまた部分的にあるいは全てハードウェアで実施することも可能である。
【００２９】
ブロック４６において、割り込み型予測調整ルーチン４４が開始される。図２において、割り込み型予測調整ルーチン４４を開始するための割り込みはいくつかの方法を用いて生成することができる。タイマー４２は周期的な間隔で割り込みを生成するように構成することができる。あるいは、命令カウンタ４０はある特定の数の命令の後に割り込みを生成するように構成することができる。この時間間隔および命令カウント値はいずれも、処理装置がプログラムコードの異なる場所で割り込みを受けるようにランダムに変更することができる。
【００３０】
タイマー４２に比べて命令カウンタ４０が優れている点は、コンピュータアーキテクチャによっては、命令カウンタ４０が全ての分岐命令にわたってより均一に分散された予測評価を生成することができることである。例えば、ＰＡ−ＲＩＳＣアーキテクチャのある種の実施態様においては、本発明の使用に適したレベルの割り込みは実行中の命令が完了するまで延期され、その後その割り込みがサービスされる。キャッシュミスを発生させ、また完了までに比較的長時間を要することの多いロード命令について考察すると、タイマー４２が割り込みを生成する場合、ロード命令４０の直後に続く分岐命令は加算命令の直後に続く分岐命令より頻繁に評価される。これは、分岐命令およびロード命令の両方の実行に要する総時間のうちキャッシュミスが多くを占めるためである。したがって、キャッシュミス中にタイマー割り込みが発生する確率が高くなり、かかる割り込みは次の命令時に処理されることになる。命令カウンタ４０にはこの問題が生じない。
【００３１】
割り込み頻度が高いほど予測の精度は上がるが、頻繁な割り込みはオーバーヘッドを増大させる。割り込み間隔が約０．０１秒である場合、すなわち命令カウント値が１５００万の命令につき１割り込みである場合、最小限のオーバーヘッドで比較的高い予測精度が得られることがわかっている。
【００３２】
割り込み型予測調整ルーチン４４を開始させる、割り込みを生成する他の方法として、各種の条件付き分岐命令を中断命令に置き換える方法がある。ＣＰＵ１２が中断命令３８を受けると、割り込みユニット３４が割り込み型予測調整ルーチン４４を開始させ、中断命令３８は適当な分岐命令に置き換えられ、その分岐命令が次に説明するように評価される。この方法を用いると、分岐命令は最初に異なる割り込みサービスルーチン（割り込み型予測調整ルーチン４４）あるいは他のなんらかのプログラムによって中断命令に置き換えることができる。
【００３３】
最後に、他の実施形態では、図２のＣＰＵ１２を状態レジスタ２７内の状態フラグに基づいて分岐命令を選択的に中断命令として取り扱うように構成することができる。この実施形態では、状態フラグがセットされているとき、分岐命令は割り込み型予測調整ルーチン４４によってサービスされるソフトウェア割り込みを生成する。また、この実施形態を命令カウンタ４０あるいはタイマー４２と併用して、ある特定の期間あるいはある特定の数の命令の後に状態フラグをセットし、それによってある期間あるいは命令カウント値の後に分岐命令が最初に発生したとき上述したようにソフトウェア割り込みを生成するようにすることができる。
【００３４】
図３に戻って、ブロック４６で割り込み型予測調整ルーチン４４が開始された後、判断ブロック４８で保留中の命令が分岐命令であるかどうかが判定される。ＣＰＵ１２が上述したように、ある分岐命令が保留中であるとき割り込みを生成するように構成されている場合、判断ブロック４８は不要であることを指摘しておく。しかし、分岐命令に基づいて割り込みを生成することのできないコンピュータシステムに用いる場合、その割り込みによって条件付き分岐命令が「捕まった（caught）」かどうかを判定するために判断ブロック４８のステップが必要である。コンピュータ命令の通常のインストラクションミックスでは、条件付き分岐命令は全命令の約１５％を占める。
【００３５】
保留中の命令が条件付き分岐命令ではない場合、割り込み型予測調整ルーチン４４はブロック５０に分岐し、割り込み型予測調整ルーチン４４は終了し、元のプログラムコードが割り込まれたポイントでプログラムの実行が再開される。しかし、保留中の命令が分岐命令である場合、ブロック５２でその命令が評価され、その分岐が選択されるかどうかが判定される。図２において、これは上述したように、ＬＩＦＯスタック３２に記憶された値を調べることによって実行することができる。本発明をある特定のコンピュータシステムに用いるように適応させた場合に、当業者にはそのコンピュータシステムにおいて保留中の分岐命令を評価する方法が容易に理解されるであろうことはいうまでもない。
【００３６】
他の実施形態では、判断ブロック４８においてまず保留中の命令が分岐命令であるかどうかが判定される。分岐命令である場合、上述したようにブロック５２への「ＹＥＳ」分岐が選択される。分岐命令でない場合、判断ブロック４８は分岐命令に達するまで命令をエミュレートすることによって命令を実行する。この方法を上述した方法と比べた場合、どちらの方法がより効率的であるかの判断においては、両者には本発明の実施者によって評価すべき長所と短所がある。上述したように、命令の約１５％は分岐命令であり、したがって平均的には６回または７回の割り込みが行なわれるたびに分岐命令が捕らえられる。一方、エミュレーションの性能は命令の直接的実行より２０倍から１００倍悪く、命令の通常のインストラクションミックス（instruction mix）では分岐命令は平均すると５つあるいは６つの命令について１つ現われる。いずれの割り込みにおいても、結局分岐命令が評価されることはいうまでもない。分岐命令自体は割り込み型予測調整ルーチン４４の終了後直接実行されるため、エミュレートする必要はないことを指摘しておく。実施者が分岐命令が出て来るまで命令をエミュレートしていくか、あるいは分岐命令が「捕まる」まで割り込みを行なうかは割り込み型予測調整ルーチン４４の効率、エミュレーションの効率、およびインストラクションミックスにおける分岐命令と他の命令との比率等のいくつかの要因によって決まる。環境によっては、実行されるプログラムの混合状態に基づいて同じシステム上で両方の方法を用いることが望ましい場合があり、かかる使用方法も本発明の範囲に含まれる。
【００３７】
ブロック５２で分岐条件が評価された後、ブロック５４で分岐予測が評価される。ヒューレット・パッカード社のＰＡ−ＲＩＳＣ命令集合にしたがって命令を実行するコンピュータシステムにおいては、分岐予測はオペランドの順序に基づいて分岐命令中に符号化される。
【００３８】
判断ブロック５６において分岐予測はその分岐予測をブロック５２で実行された分岐予測の評価にしたがって選択しなければならない実際の分岐と比較することによって修正される。予測が正しい場合、割り込み型予測調整ルーチン４４はブロック５８に分岐し、ブロック５８は分岐履歴を更新し、ブロック５０で割り込み型予測調整ルーチン４４は終了する。分岐が誤っている場合、ブロック６０で分岐履歴に基づいて予測を更新し、その後分岐履歴を更新する場合がある。
【００３９】
分岐履歴はより精度の高い分岐予測を行なうために用いられる。しかし、分岐履歴は本発明においては必須ではない。例えば、分岐予測が誤っている場合、単にそれを変更するだけでよい。必要なのは、ブロック５４からの予測（これは分岐命令中に符号化することができる）とブロック５２における分岐条件の評価のみである。
【００４０】
ある簡単な分岐履歴アルゴリズムでは２つの連続する評価の結果、予測が誤っている場合には単にその予測を変更する。分岐履歴によって分岐予測がいかに増大するかを説明するために、１００回ループし、その後ループしないプログラムループを考察する。分岐履歴がない場合、ループする分岐命令が最後のループで評価されて、予測が「分岐」からこの分岐命令にとっては良い予測ではない「非分岐」に変化する可能性は１００分の１である。上述した分岐履歴アルゴリズムによれば、予測を変更するにはループする分岐命令を最後のループで２回連続して評価しなければならない。これが起こる可能性は１０，０００分の１である。したがって、このループする分岐命令に関する予測の精度は分岐履歴によって増大する。
【００４１】
予測の修正時に分岐履歴を組み込むためには、分岐履歴を保管しなければならない。分岐命令への分岐履歴の符号化がＨａｎａｎ  Ｐｏｔａｓｈ氏の米国特許第４，４３５，７５６号に開示されている。しかし、分岐履歴を分岐命令に記憶するとき、分岐命令はその分岐が評価されるときには予測が正しい場合であっても常にメモリに書き戻さなければならない。
【００４２】
ヒューレット・パッカード社のＰＡ−ＲＩＳＣ命令集合には命令への分岐予測の符号化方法が規定されているが、分岐履歴を分岐命令に符号化する方法については規定されていない。本発明によれば、一実施形態では分岐予測は３２Ｋビットであるプログラムメモリ内の履歴テーブルに記憶され、その分岐命令のアドレスにハッシュ関数を適用することによってアドレス指定され、それによってテーブル中のある特定の分岐命令を表わす位置が判定される。従来のハードウェア型分岐予測法では、約０．５Ｋビット〜２．０Ｋビットの大きさの履歴テーブルを設けるのが一般的である。本発明の利点の１つは、ソフトウェアで実施可能であるため、履歴テーブルの大きさが最大限の性能を得られるように容易に調整可能であることである。
【００４３】
分岐履歴は様々な方法で符号化することができる。例えば、履歴テーブル中の参照されるビットは、その分岐が選択された場合の第１の値とその分岐が選択されなかった場合の第２の値として定義することができる。あるいは、参照されるビットは、前回の予測が正しかった場合の第１の値と前回の予測が誤っていた場合の第２の値として定義することもできる。後者の符号化法にはエイリアシングに関わる問題が低減されるという利点がある。エイリアシングのために分岐履歴テーブルの同じエントリに関係付けられる２つの分岐命令について考察する。大部分の分岐命令は正しいため、これらの分岐命令がいずれもそのテーブルエントリを「前回の予測は正」として符号化する確率が高い。一方、前者の符号化方法が用いられ、一方の命令の予測が「選択」であり、他方の命令の予測が「非選択」である場合、分岐履歴テーブルへのアクセス時にこれら２つの分岐命令が互いに干渉し合う可能性がはるかに高い。さらに、後者の方法には、テーブルの全てのエントリを「前回の予測は正」と初期設定することができるため、分岐履歴テーブルの最初の初期設定時に利点がある。
【００４４】
また、本発明の範囲内で、より高度な分岐履歴アルゴリズムを使用することができる。例えば、分岐履歴テーブルはある特定の分岐命令の分岐挙動の実行時平均を追跡し、その実行時平均に基づいて予測を更新するように形成することができる。当業者には、様々なアルゴリズムを用いて、分岐履歴の追跡と分岐履歴に基づく分岐予測の調整とを行なうことができることは明らかであろう。本発明はソフトウェアで実施可能であるため、プログラマは様々なアルゴリズムを試して、ある特定の環境でどのアルゴリズムが最も良好に機能するかを容易に判定することができる。さらに、複合予測アルゴリズムを使用することも可能であり、これはハードウェアでは実現できないものである。
【００４５】
上述したように、ブロック５８では予測が正しい場合に履歴テーブルが更新され、ブロック６０では予測が誤っている場合に履歴テーブルが更新され、またあるいは予測が更新される場合もある。ほとんどの予測／履歴アルゴリズムにおいて、予測が正しいとわかった場合にはそれが変更されることはなく、本発明の実施にあたってそれが行なわれるとも考えられない。しかし、特定のアルゴリズムにおいて、必要である場合にブロック５８で予測を変更することも本発明の範囲内である。
【００４６】
ブロック６０では分岐履歴が更新され、また予測が更新される場合もある。例えば、上述したように、予測が誤っているがその分岐命令の前回の実行時には正しかった場合、その予測は変更されない場合がある。ある分岐命令を変更すべきかどうかの判定に分岐履歴を用いることが有益であるもう一つの理由は、分岐予測の変更の頻度が低くなることにある。ヒューレット・パッカード社のＰＡ−ＲＩＳＣ命令集合を用いる場合、予測が変更されるたびにその分岐命令をメモリに書き戻さねばならない。したがって、全体的な予測精度に重大な影響がでない範囲で、予測の変更の頻度を最小限とすることが望ましい。
【００４７】
予測の更新が必要である場合、ブロック６０でも予測が更新される。ＰＡ−ＲＩＳＣ命令集合は分岐命令中に予測を含むが、予測テーブル等の当該技術分野において、周知の他の任意の方法を用いた予測の符号化も本発明の範囲に含まれる。
【００４８】
命令中に符号化された予測を更新する際には、その命令の演算コードを更新し、その命令をメモリに書き戻さなければならない。図１に示すように、分岐命令はＬ１キャッシュ１４、Ｌ２キャッシュ１６、メインメモリ１８、仮想メモリ記憶ディスク２２および永久記憶ディスク２０に記憶することができる。プログラマは分岐命令をこれらの記憶装置のそれぞれに書き戻すことを望まないかもしれないが、これも本発明の範囲に含まれる。
【００４９】
本発明の一実施形態において、分岐命令はＬ１キャッシュ１４、Ｌ２キャッシュ１６およびメインメモリ１８に書き戻されるが、永久記憶ディスク２０や仮想メモリ記憶ディスク２２には書き戻されない。永久記憶ディスク２０への書き戻しを行なうと、最小限の性能の向上しか得られず、また実行可能なコードの管理に関係する多くの問題が発生する可能性がある。また、複数のユーザがプログラムファイルを共用することが一般的であり、したがってそれぞれのユーザに共通のファイルへの分岐履歴の記憶を行なわせることは不可能である。しかし、状況によっては更新された分岐予測を永久記憶ディスク２０に記憶することが有益である場合もある。
【００５０】
仮想メモリ記憶ディスク２２への分岐命令の書き戻しによって生じる問題はこれより少ないが、これを行なうと性能の改善が小さくなり、かなりのオーバーヘッドを生じる。これに対して、分岐命令をＬ１キャッシュ１４、Ｌ２キャッシュ１６およびメインメモリ１８に書き戻すと大きな性能の改善が得られる。
【００５１】
コンピュータシステムにおいては様々な技術を用いてメモリの管理が行なわれる。例えば、ダーティビット（dirty bit）をキャッシュ内のメモリブロックに関係付けて、そのキャッシュが不要になったときそのブロックを単純に破棄することができるか、あるいはメモリブロック内の変更を反映させるためにメインメモリに書き戻す必要があるかどうかを示すのが一般的である。当業者には、これらの技術を用いて本発明を実施する方法は自明であろう。例えば、変更された分岐命令をＬ１キャッシュ１４とＬ２キャッシュ１６のみに書き戻し、メインメモリ１８には書き戻さないことが望ましい場合、変更された分岐命令を含むブロックのダーティビットをＬ２キャッシュ１６上で明らかにしておき、そのブロックは破棄してもよく、メインメモリ１８への書き戻しは不要であることを示すようにすることができる。あるいは、ダーティビットがセットされている場合、そのブロック（および更新された予測を有する変更された分岐命令）を、その分岐命令を含むメモリブロックが排除される前にメインメモリ１８に書き戻しされなければならず、これによって更新された分岐予測が保存されるが、計算資源（computing resources）がさらに消費されることになる。
【００５２】
また、各種のコードを異なる態様で処理することが望ましい場合がある。例えば、分岐予測をカーネルコードについては調整したいが、ユーザコードについては調整したくない場合がある。同様に、プログラマがプログラムのデバッグ中に分岐予測をオフして、プログラムの実行中の分岐命令の変更を防止したい場合がある。当業者には本発明の使用が望ましい状況とそうでない状況は明らかであり、またプログラマやコンピュータユーザにそれを行なうための適当なインターフェースを供給することも可能であろう。
【００５３】
ブロック６０で分岐履歴の更新、および場合によっては分岐予測の更新が行なわれた後、割り込み型予測調整ルーチン４４はブロック５０に分岐し、このルーチンが終了する。
【００５４】
本発明はＣＰＵに割り込んで保留中の分岐命令を調べることによって、分岐予測を動的に調整する技術を提供する。本発明は、従来のソフトウェア技術とハードウェア技術の利点を組み合わせたものである。
【００５５】
本発明をここではソフトウェアを用いて実施するものとして説明したが、ハードウェアあるいはマイクロコードを用いて実施することも可能である。ソフトウェアで実施する場合、本発明を構成することは容易である。割り込み期間や履歴テーブルの大きさ等のパラメータの調整は容易であり、また性能の変化を観察して本発明を最適の性能が得られるように適合させることができる。通常、これは従来のハードウェア型分岐予測では不可能である。
【００５６】
従来のソフトウェア型分岐予測では予測を分岐命令中に符号化するが、予測は静的である。本発明は静的なソフトウェア符号化分岐予測を解釈するように設計されたシステム上で実施して、かかるシステムに動的な分岐予測を提供することができる。また、本発明は従来の分岐予測に比べてより大きな履歴および予測メモリを提供する。これは、これらのメモリをソフトウェアデータ構造として画成することができるためである。
【００５７】
本発明の他の大きな利点は、本発明は予測を時間の経過につれて動的に調整するものであるが、かかる調整を従来の予測法に比べてはるかに低い頻度で実行できることである。従来技術においては、分岐予測は両極端に別れていた。従来のソフトウェア型分岐予測では、予測が一度生成されるとこれは命令の符号化に固定され、実行時に予測が変更されることはなかった。一方、従来のハードウェア型分岐予測では分岐命令が実行されるたびにその分岐命令を評価していた。性能を低下させずにこの機能を実行するには大量のハードウェアが必要である。さらに、予測が安定している場合（ほとんどの予測は安定している）、分岐命令の実行のたびに予測を評価することによる利益はほとんどなく、また予測が頻繁に変化する場合、予測を絶えず変更することもやはり大きな性能の改善にはつながらない。
【００５８】
本発明は、予測の更新を全く行なわない場合と分岐命令の実行のたびに予測を更新する場合との中間をとったものである。上述した実施形態の１つにおいて、ＣＰＵは１，５００万回の命令について１回の割り込みを受ける。分岐命令の分岐予測が評価される頻度がこのように低いため、大きなオーバーヘッドを生じることなく、予測の更新に用いる時間を大きくすることができる。このため、本発明はソフトウェアで実施する場合きわめて有効である。
【００５９】
評価を行なう頻度が相対的に低いことは、本発明をハードウェアで実施する場合にも有益である。かかる実施態様は、従来のハードウェア分岐予測技術よりはるかに簡単である。これは、システム全体の性能に影響を与えることなく予測の評価および更新に時間をかけることができるためである。分岐予測に専用のハードウェアが少ないため、ＣＰＵの他の機能の速度を上げるためにより多くのハードウェアを用いることができる。
【００６０】
本発明は、従来の分岐予測法に対して大きな性能の改善をもたらすものである。シミュレーションの結果、従来のハードウェア予測法に比べ４％から８％の改善が得られ、また従来のソフトウェア予測法に比べ１０％から１５％の改善が得られる。
【００６１】
本発明をその実施形態を参照して説明したが、当業者には本発明の精神と範囲を逸脱することなくその形態および細部に変更を加えうることは明らかであろう。
【００６２】
以下に発明の実施の形態を要約する。
１．  中央処理装置によって実行中のプログラムコードのセグメントに含まれる分岐命令に関連した分岐予測を調整する分岐予測調整方法であって、
前記中央処理装置による前記分岐命令の実行の保留時に前記プログラムコードの実行に割り込み、
前記分岐予測を更新する予測調整ルーチンを実行し、
前記プログラムコードの実行を再開する分岐予測調整方法。
【００６３】
２．  前記中央処理装置による前記分岐命令の実行の保留時における前記プログラムコードの実行への割り込みにおいて、
タイマーをある時間間隔に初期設定し、
前記時間間隔の終了を待ち、
前記時間間隔が終了したとき前記プログラムコードの実行に割り込む上記１記載の分岐予測調整方法。
【００６４】
３．  上記２においてさらに前記時間間隔が終了した後前記分岐命令を待つ上記２記載の分岐予測調整方法。
【００６５】
４．  タイマーのある時間間隔への初期設定において、
タイマーをランダムな時間間隔に初期設定する上記２記載の分岐予測調整方法。
【００６６】
５．  前記中央処理装置による前記分岐命令の実行の保留時における前記プログラムコードの実行への割り込みにおいて、
命令カウンタをある命令カウント値に初期設定し、
命令の実行時に該命令をカウントし、
実行された命令の数が前記命令カウント値に等しくなったとき前記プログラムコードの実行に割り込む上記１記載の分岐予測調整方法。
【００６７】
６．  上記５においてさらに前記命令カウント値に達した後前記分岐命令を待つ上記５記載の分岐予測調整方法。
【００６８】
７．  命令カウンタの命令カウント値への初期設定において、命令カウンタをランダムな命令カウント値に初期設定する上記５記載の分岐予測調整方法。
【００６９】
８．  前記中央処理装置による前記分岐命令の実行の保留時における前記プログラムコードの実行への割り込みにおいて、
前記プログラムコードの実行に割り込む中断命令を実行し、
前記中断命令を前記分岐命令に置き換える上記１記載の分岐予測調整方法。
【００７０】
９．  前記中央処理装置による前記分岐命令の実行の保留時における前記プログラムコードの実行への割り込みにおいて、
前記分岐命令に割り込みを発生させるフラグをセットし、
前記フラグがセットされた後前記第１の中断命令が現われたとき、前記プログラムコードの実行に割り込む上記１記載の分岐予測調整方法。
【００７１】
１０．  前記分岐予測を更新する予測調整ルーチンの実行において、
前記分岐命令の分岐条件を評価して前記分岐命令が分岐するかどうかを判定し、
前記分岐命令に関連する分岐予測を評価し、
前記分岐予測の正誤を判定し、
前記分岐命令が誤っている場合前記分岐予測をトグルする上記１記載の分岐予測調整方法。
【００７２】
１１．  前記分岐予測を更新する予測調整ルーチンの実行において、
前記分岐命令の分岐条件を評価して前記分岐命令が分岐するかどうかを判定し、
前記分岐命令に関連する分岐予測を評価し、
前記分岐予測の正誤を判定し、
前記分岐予測の正誤を分岐履歴として保管し、
分岐履歴に基づいて前記分岐予測を更新し、前記分岐予測の正誤を判定する上記１記載の分岐予測調整方法。
【００７３】
１２．  分岐履歴に基づく前記分岐予測の更新および前記分岐予測の正誤の判定において、  ２回連続して評価したとき前記予測が誤っている場合前記分岐予測をトグルする上記１１記載の分岐予測調整方法。
【００７４】
１３．  前記分岐予測を更新する予測調整ルーチンの実行において、
保留中の命令を調べて前記保留中の命令が分岐命令であるかどうかを判定し、前記保留中の命令が分岐命令ではない場合前記プログラムコードの実行を再開する上記１記載の分岐予測調整方法。
【００７５】
１４．  前記分岐予測を更新する予測調整ルーチンの実行において、
保留中の命令を調べて前記保留中の命令が分岐命令であるかどうかを判定し、前記保留中の命令が分岐命令ではない場合、分岐命令に達するまで前記プログラムコードからの命令の実行をエミュレートする上記１記載の分岐予測調整方法。
【００７６】
１５．  コンピュータ命令を実行する中央処理装置であって、
割り込みに応答して分岐予測調整ルーチンを起動する割り込みユニットを有し、前記分岐予測調整ルーチンは保留中の分岐命令を評価し、前記保留中の分岐命令に関連する分岐予測を前記分岐予測が正しいかどうかに基づいて更新する中央処理装置。
【００７７】
１６．  前記割り込みユニットは、ある時間間隔を測定し、前記時間間隔が終了したとき前記割り込みを生成するタイマーを含む上記１５記載の中央処理装置。
【００７８】
１７．  前記割り込みユニットは、ある命令カウント値に初期設定することができ、実行された命令の数が前記命令カウント値に等しくなったとき前記割り込みを生成する命令カウンタを含む上記１５記載の中央処理装置。
【００７９】
１８．  前記割り込みユニットは中断命令を受けたとき前記割り込みを生成する上記１５記載の中央処理装置。
【００８０】
１９．  上記１５においてさらに前記分岐命令が保留中であるとき前記割り込みユニットに前記割り込みを生成させる状態フラグを含む上記１５記載の中央処理装置。
【００８１】
２０．  前記分岐予測調整ルーチンは保留中の分岐命令を評価し、前記保留中の分岐命令に関連する分岐予測を前記分岐予測が正しいかどうかに基づき、また分岐履歴に基づいて更新する上記１５記載の中央処理装置。
【００８２】
２１．  前記分岐予測調整ルーチンは、２回連続して評価したとき前記分岐予測が誤っている場合前記分岐予測をトグルする上記２０記載の中央処理装置。
【００８３】
２２．  分岐命令に関連する分岐予測を調整するコンピュータシステムにおいて実施されるデータ構造であって、
割り込みに応答して起動される分岐予測調整ルーチンを有し、前記分岐予測調整ルーチンは保留中の分岐命令を評価し、前記保留中の分岐命令に関連する分岐予測を前記分岐予測が正しいかどうかに基づいて更新するデータ構造。
【００８４】
２３．  中央処理装置によって実行中の実行可能なプログラムコードのセグメントに含まれる分岐命令に関連する分岐予測を調整するためのコンピュータ読取可能プログラムコードを有するプログラム記憶媒体であって、
前記中央処理装置による前記分岐命令の実行が保留中であるとき、前記実行可能なプログラムコードの実行への割り込みを発生させる前記コンピュータ読取可能プログラムコードの第１のセグメントと、
前記分岐命令に関連する前記分岐予測を調整するための前記コンピュータ読取可能コードの第２のセグメントと、
前記コンピュータ読取可能コードの前記第１のセグメントによって発生した割り込みに応答して前記コンピュータ読取可能コードの前記第２のセグメントを実行するための前記コンピュータ読取可能プログラムコードの第３のセグメントと、
前記実行可能なプログラムコードの実行を再開する前記コンピュータ読取可能プログラムコードの第４のセグメントと、からなるプログラム記憶媒体。
【００８５】
２４．  中央処理装置によって実行中のプログラムコードのセグメントに含まれる分岐命令に関連する分岐予測を調整する方法を実施するための前記コンピュータによって実行可能なプログラム命令を含むコンピュータ読取可能なプログラム記憶媒体であって、
前記中央処理装置による前記分岐命令の実行が保留中であるとき前記プログラムコードの実行に割り込み、
前記分岐予測を更新する予測調整ルーチンを実行し、
前記プログラムコードの実行を再開する、プログラム記憶媒体。
【００８６】
【発明の効果】
上述のように本発明によれば、予測を時間の経過につれて動的に調整し、この調整を従来の予測法と比較してはるかに低い頻度で実行できる。このため、大きなオーバーヘッドを生じることなく予測の更新に用いる時間を大きくすることができる。これは、ソフトウェアで実施する場合においてきわめて有効である。
【図面の簡単な説明】
【図１】コンピュータシステムの概略を示すブロック図である。
【図２】図１に示すコンピュータシステムを構成するＣＰＵの一部を示すブロック図である。
【図３】本発明に係る割り込み型予測調整ルーチンを示すフローチャートである。
【符号の説明】
１０  コンピュータシステム
１２  中央処理装置（ＣＰＵ）
１４  Ｌ１キャッシュ
１６  Ｌ２キャッシュ
１８  メインメモリ
２０  永久記憶ディスク
２２  仮想メモリ記憶ディスク
２４  論理演算装置（ＡＬＵ）
２６  プログラムカウンタ（ＰＣ）
２７  状態レジスタ（ＳＴＲ）
２８  命令レジスタ（ＩＲ）
３０  レジスタ
３２  ＬＩＦＯスタック
３４  割り込みユニット
３６  ＩＲＱライン
３８  中断命令
４０  命令カウンタ
４２  タイマー
４４  割り込み型予測調整ルーチン
【図１】
0003790039.tif 000002
【図２】
0003790039.tif 000003
【図３】
0003790039.tif 000004