(57)【要約】【課題】複数の分岐予測方法を含む多形的分岐の予測子および方法を提供する。【解決手段】この方法は、分岐予測を選択的に実行することができる。選択メカニズムは、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの１つまたは複数を選択するように構成される。【選択図】図３
2009535750.tif 000002
【特許請求の範囲】
【請求項１】
複数の分岐予測方法であって、各方法が分岐予測を選択的に実行可能である、分岐予測方法と、
現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って前記分岐予測方法のうちの１つまたは複数を選択するように構成された、選択メカニズムと、
を備える、多形的分岐予測子。
【請求項２】
前記設定がパフォーマンス・メトリックを含む、請求項１に記載の多形的分岐予測子。
【請求項３】
前記選択メカニズムが、結果を提供するように協働するための少なくとも２つの分岐予測方法を選択するように構成される、請求項１に記載の多形的分岐予測子。
【請求項４】
前記選択メカニズムが、あらかじめ指定されたように、特定アプリケーションまたはアプリケーションのセットに対して前記１つまたは複数の分岐予測方法を選択する、請求項１に記載の多形的分岐予測子。
【請求項５】
前記選択メカニズムが、ランタイムの振る舞いの分析に基づいて、前記１つまたは複数の分岐予測方法を選択する、請求項１に記載の多形的分岐予測子。
【請求項６】
前記選択メカニズムが、前記１つまたは複数の分岐予測方法を選択するために、コンパイラおよびランタイム構成要素のうちの１つから情報を受け取るように構成される、請求項１に記載の多形的分岐予測子。
【請求項７】
前記選択メカニズムが、アプリケーションのランタイム中に更新されるように構成される、請求項１に記載の多形的分岐予測子。
【請求項８】
前記選択メカニズムが、論理機能、アドレス・ビット、スレッド指定子、およびいくつかのアドレスまたはスレッド・ビットのハッシュからの出力のうちの少なくとも１つに基づいて更新されるように構成される、請求項１に記載の多形的分岐予測子。
【請求項９】
アレイ内に格納された予測子エントリが、いくつかのおよびわずかな情報に関して構成される、予測子エントリのアレイをさらに備える、請求項１に記載の多形的分岐予測子。
【請求項１０】
前記アレイ内のストレージが、前記アレイへの書き込み動作を可能にするための、１ビット書き込みイネーブル信号、および複数ビット書き込みイネーブル信号のうちの１つを使用して実装される、予測子エントリのアレイをさらに備える、請求項１に記載の多形的分岐予測子。
【請求項１１】
各分岐予測方法が、効率性のために論理要素が前記分岐予測方法間で共有されるような、論理要素を含む、請求項１に記載の多形的分岐予測子。
【請求項１２】
分岐予測方法間で共有される論理要素が、アレイ、予測子更新論理、およびアドレス生成論理のうちの少なくとも１つを含む、請求項１１に記載の多形的分岐予測子。
【請求項１３】
予測子エントリのアレイおよび分岐情報キューをさらに備え、前記アレイから事前に読み取られた情報を書き直すために前記分岐情報キューからの情報が使用される、請求項１に記載の多形的分岐予測子。
【請求項１４】
統一テーブルと複数構成要素予測子のテーブルとの間で共有されるように構成された、アドレス指定論理をさらに備える、請求項１に記載の多形的分岐予測子。
【請求項１５】
アドレス・ビットによって予測子エントリが選択される、予測子エントリの複数構成要素アレイをさらに備える、請求項１に記載の多形的分岐予測子。
【請求項１６】
前記複数構成要素アレイのうちの１つを選択するためにアドレス・ハッシングによって予測子エントリが選択される、予測子エントリの複数構成要素アレイをさらに備える、請求項１に記載の多形的分岐予測子。
【請求項１７】
動的に構成可能な複数の分岐予測方法を提供するステップと、
現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って前記分岐予測方法のうちの１つまたは複数を選択するステップと、
改善された予測結果を提供するために前記１つまたは複数の分岐予測方法の構成を更新するステップと、
を有する、分岐予測方法を動的に選択するための方法。
【請求項１８】
前記分岐予測方法のうちの１つまたは複数を選択するステップが、実行中のアプリケーション、実行中のアプリケーションの段階、ランタイムの振る舞い、および動作メトリックのうちの１つに基づいて、前記分岐予測方法のうちの１つまたは複数を選択するステップを含む、請求項１７に記載の方法。
【請求項１９】
前記１つまたは複数の分岐予測方法の再構成を実行するためのプログラム・コードを生成するステップをさらに有する、請求項１７に記載の方法。
【請求項２０】
コンピュータ読み取り可能プログラムを含むコンピュータ使用可能媒体であって、前記コンピュータ読み取り可能プログラムは、コンピュータ上で実行された場合、前記コンピュータに請求項１９のステップを実行させる、コンピュータ使用可能媒体を備えるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マイクロプロセッサにおける分岐命令の処理に関し、とりわけ、多形的分岐予測子（polymorphic branch predictor）を実装するための方法および装置に関する。
【背景技術】
【０００２】
現在のプロセッサは、分岐動作などのパイプライン分散イベントに対処するための予測技法を適用することによって、パフォーマンスを達成している。従来技術により、多様な分岐処理技法が提供されてきた。分岐予測子とは、プログラムの命令フローにおいて、条件付分岐が分岐される可能性があるか否かを判別する、プロセッサの一部である。これが分岐予測と呼ばれる。分岐予測子は、現在の最新のスーパースケーラ型プロセッサにおいて、高性能を実現するために極めて重要である。分岐予測子は、分岐が解決されるのを待つことなく、プロセッサが命令をフェッチして実行できるようにするものである。
【０００３】
ＲＩＳＣアーキテクチャの初期の実装では単純な分岐予測を実行しており、たとえばアーキテクチャは、常に、分岐（または条件なしジャンプ）が実行されないであろうと予測したため、必ず次の順次命令をフェッチした。分岐またはジャンプが評価された場合にのみ、命令フェッチ・ポインタは非順次アドレスに設定される。これらのＣＰＵは、デコード段階で分岐を評価し、単一サイクルで命令をフェッチするものであった。結果として、分岐ターゲットの循環は２サイクル長さとなり、マシンは常に、いずれかの分岐を進んだ直後に命令をフェッチすることになった。一部のアーキテクチャは、これらのフェッチされた命令を利用するために、分岐遅延スロットを定義した。
【０００４】
「静的予測」を実施するプロセッサは、逆方向指示分岐が分岐されること（逆方向分岐はプログラム・ループの最下位であるものと想定）、および順方向指示分岐が分岐されないこと（これらはループまたは他の処理コードから早期に出るものと想定）を予測する。何度も実行されるループの場合、ループの最後の分岐を誤予測する（mispredict）だけである。静的予測は、動的分岐予測を使用するほとんどのプロセッサにおいて、フォールバック技法（動的予測子に使用されるいかなる情報もない場合）として使用される。
【０００５】
一部のスーパースケーラ・プロセッサは、命令の各ラインで、次のラインを指すポインタをフェッチする。次ライン予測子は、分岐ターゲット予測ならびに分岐方向予測を処理するため、この次ライン予測子は、ここで列挙される他の予測子と単純に比較することはできない。次ライン予測子が２個、４個、または８個の位置合わせされた命令グループを指す場合、分岐ターゲットは、通常、フェッチされた最初の命令とはならないため、フェッチされた初期命令は無駄である。話を簡単にするために、分岐ターゲットが均一に分散すると想定すると、フェッチされた０．５個、１．５個、および３．５個の命令がそれぞれ廃棄される。
【０００６】
分岐自体は、一般に、位置合わせされたグループ内の最後の命令とはならないため、分岐（またはその遅延スロット）後の命令は廃棄されることになる。ここでも、分岐命令の配置が均一に分散すると想定すると、フェッチされた０．５個、１．５個、および３．５個の命令がそれぞれ廃棄される。分岐および宛先ラインで廃棄された命令は、たとえ単一サイクルの次ライン予測子の場合であっても、ほぼ完全なフェッチ・サイクルまで追加される。
【０００７】
２モード（bimodal）分岐予測子は、命令アドレスの最下位ビットでインデックス付けされた、２ビット飽和カウンタ（saturating counter）のテーブルを有する。命令キャッシュとは異なり、通常、２モード予測子エントリはタグを持たないため、特定のカウンタが異なる分岐命令にマッピングされる可能性があり（これは、分岐干渉または分岐エイリアシング（branch aliasing）と呼ばれる）、この場合、精度が低くなる可能性がある。各カウンタは、１）高い確率で（Strongly）非分岐、２）低い確率で（Weakly）非分岐、３）低い確率で分岐、および４）高い確率で分岐、という、４つの状態のうちの１つを有する。
【０００８】
分岐が評価された場合、対応するカウンタが更新される。非分岐と評価された分岐は、高い確率で非分岐の方向へと、状態を減分し、分岐と評価された分岐は、高い確率で分岐の方向へと、状態を増分する。この２ビット飽和カウンタ・スキームの主な利点は、ループ最後の分岐が常に分岐されると予測されることである。１ビット・スキームは、ループの最初および最後の両方の分岐を誤予測する。２ビット・スキームは、最後の分岐のみを誤予測する。同様に、ほぼ常に１方向に進む極度にバイアスをかけられた分岐では、１ビット・スキームは、奇数分岐ごとに誤予測は２回であり、２ビット・スキームでは誤予測は１回である。
【０００９】
２モード・カウンタ・テーブルは命令アドレス・ビットでインデックス付けされるため、スーパースケーラ・プロセッサは、フェッチされた命令ごとに別々のＳＲＡＭにテーブルを分割すること、および、命令のフェッチと並行して、命令ごとに予測をフェッチすることが可能であり、その結果、分岐がデコードされるとすぐに分岐予測を使用することができる。２ビット予測子に加えて、ｎビットを使用する多様な同様の飽和カウンタ・ベースの予測子が可能である。
【００１０】
２モード分岐予測は、あらゆるループの終了を誤予測する。毎回同じループ・カウントを有する傾向があるループの場合（および、反復的振る舞いを伴う多くの他の分岐の場合）、一部の予測子はより良好に実行することができる。局所分岐予測子は、２つのテーブルを維持する。第１のテーブルは局所分岐履歴テーブルである。これは、分岐命令アドレスの低位ビットによってインデックス付けされ、最近のｎ回の分岐実行の、分岐した／分岐しなかったの履歴を記録する。他方のテーブルは、パターン履歴テーブルである。このテーブルは実際の予測子を含むが、そのインデックスは第１のテーブル内の分岐履歴から生成される。分岐を予測するために分岐履歴が検索され、次にその履歴を使用して、予測を実行するために予測子を検索する。この手法は、単一ビット予測子またはｎビット予測子（２モード予測子など）のいずれかを使用することができる。
【００１１】
局所予測は各予測について２つの順次テーブル検索を必要とするため、２モード予測よりも遅い。高速の実装では、フェッチされた命令ごとに別々の２モード・カウンタ・アレイを使用することになるため、第２のアレイのアクセスを命令フェッチと並行して進めることができる。各カウンタが単一の分岐の振る舞いを格納するように意図されているため、これらのアレイは冗長ではない。広域分岐予測子は、多くの分岐の振る舞いが、最近実行された他の分岐の履歴と強く相関されるという事実を利用する。一実装では、予測子は、実行されたあらゆる分岐の最近の履歴で更新された単一のシフト・レジスタを維持すること、および、この値を使用して予測子のテーブルにインデックス付けすること（たとえば、単一ビット予測子または２モード・カウンタ予測子）ができる。
【００１２】
ｇｓｅｌｅｃｔ予測子は、数ビットの分岐命令アドレスと連結された最近の履歴で、予測子テーブルにインデックス付けする。ｇｓｅｌｅｃｔは、テーブル・サイズの小さな局所予測よりも良好な働きをし、局所予測は１ＫＢよりも大きなテーブル・ストレージの場合に、わずかに良好なだけである。他の実装は、分岐命令アドレスと広域履歴とを連結するのではなく、それらのＸＯＲを取ることによって、単純な連結の代わりにＸＯＲに費やして、ｇｓｅｌｅｃｔよりも正確な予測を提供する。この予測子はｇｓｈａｒｅと呼ばれ、２５６バイトよりも大きなテーブルに対してはｇｓｅｌｅｃｔよりもわずかに良好である。
【００１３】
ｇｓｅｌｅｃｔおよびｇｓｈａｒｅは、分岐ごとに単一のテーブル検索でよいため、局所予測よりも高速にすることが容易である。２モード予測と同様に、フェッチされた命令ごとに並行検索を実行することが可能であるため、テーブルを分割することが可能であり、その結果、テーブル検索は命令ロードと並列に進行することができる。Ｓｃｏｔｔ  ＭｃＦａｒｌｉｎｇは、１９９３年の「Ｃｏｍｂｉｎｉｎｇ  Ｂｒａｎｃｈ  Ｐｒｅｄｉｃｔｏｒｓ」、ＷＲＬ  Ｔｅｃｈｎｉｃａｌ  Ｎｏｔｅ  ３６で、統合分岐予測を提案した。以下の説明では、こうした統合予測子を複数構成要素予測子と呼ぶ。統合分岐予測は、局所予測とほぼ同様に正確であり、広域予測とほぼ同様に高速である。
【００１４】
統合分岐予測は、たとえば局所２モード予測子、ｇｓｈａｒｅ予測子、および、分岐ごとに２モードまたはｇｓｈａｒｅのどちらを使用するかを選択するための２モード様予測子の、３つの予測子を並行して使用する。選択予測子は、使用する予測を選択するために使用される、単一ビット予測子、または飽和ｎビット・カウンタとすることが可能である。このケースでは、２モード予測とｇｓｈａｒｅ予測が合致しない場合、どちらの結果を選択するかを決定するために必ずカウンタが更新される。他の統合分岐予測の方法は、たとえば３つの異なる分岐予測を有すること、およびそれらの結果を多数決によってマージすることである。ｇｓｈａｒｅなどの予測子は、複数のテーブル・エントリを使用して任意の特定の分岐の振る舞いを追跡する。このエントリの増加によって、２つの分岐が同じテーブル・エントリにマッピングされることになる可能性（エイリアシングと呼ばれる状況）がさらに高くなり、それによって、それらの分岐に関する予測の正確さが損なわれることになる。複数の予測子が採用された場合、その各予測子が異なるエイリアシング・パターンを有し、少なくとも１つの予測子がエイリアシングを持たない確率が高くなるように、配置構成することが有利である。異なる予測子に対して異なるインデックス付け機能を備える統合予測子は、ｇｓｋｅｗ予測子と呼ばれ、データおよび命令のキャッシュに使用されるスキュード・キャッシュ（skewed cache）に類似している。
【００１５】
パターン履歴テーブル内での破壊的エイリアシングを減らすための他の技法は、一致予測（agree predictor）である。分岐に関して比較的静的な予測を確立するために、おそらくは、２モード予測子または分岐命令内のヒント・ビットという方法が使用される。他の予測子（たとえばｇｓｋｅｗ予測子）も予測を実行するが、分岐／非分岐の予測ではなく、基本予測との一致／不一致を予測する。ｇｓｋｅｗ予測子によってカバーされている分岐が、おそらく７０％／３０％の、１方向にバイアスをかけられたビットであるという傾向がある場合、ｇｓｋｅｗパターン履歴テーブルが不一致エントリよりも多くの一致エントリを有する傾向になるため、それらすべてのバイアスを位置合わせすることができることを意図する。これにより、最善なことに２つのエイリアシング分岐が予測履歴テーブル（ＰＨＴ）内に反対の値を有することになる確率が減少する。
【００１６】
通常、統合予測子は一致予測子の基本として使用可能な予測子を有するため、一致予測子は統合予測子との組み合わせで良好に動作する。一致予測子は、基本予測子の予測を変化させる場合、１方向にバイアスをかけられていない分岐とはあまり良好に動作しない。したがって一致予測子は、１つが一致予測子であり、他方が非一致タイプの予測子である、３予測子方式の一部として、最も良い働きをする可能性がある。
【００１７】
ほとんどすべてのパイプライン化プロセッサは、現在の命令が実行される前に、フェッチするために次の命令のアドレスを推測しなければならないため、何らかの形の分岐予測を実行する。分岐予測技法を設計する際の主要なパラメータは、分岐予測エントリの数、および、単一ビット予測子または飽和ｎビット予測子などの分岐予測アルゴリズムである。これらの決定事項を、局所または広域の予測子について、多様な分岐予測方法に適用しなければならない。
【００１８】
従来技術では、多様な予測子の組み合わせが可能であったが、マイクロプロセッサ設計者にとっての主要な決定事項は、分岐予測アルゴリズムの選択であった。従来技術によれば、ｋビットの固定メモリ割り振りを使用する場合、設計者は、ｋ個の単一ビット予測子、またはｋ／２個の２モード予測子、あるいはより一般的には、ｎビット・カウンタでのｋ／ｎ個の予測子の、いずれかを有するように、各予測テーブルを実装することができた。これは、各予測についてさらに多くのビットを使用することによって単一予測の品質を向上させることができる予測子を提供すること、またはより単純な構造の予測子を提供することの間の、兼ね合いを示す。他の兼ね合いにおいて、設計者は待ち時間のより長い局所予測子、あるいは待ち時間のより短い２モードまたは単一ビットの予測子を選ぶことができる。
【００１９】
最良の予測品質は、異なるプログラムに対して異なるか、またはプログラム間で異なる可能性のある、作業負荷特有の特性などの、多様な要因に依存する。したがって、最先端技術では予測子の組み合わせは可能であるが、予測の最適化は、特定アプリケーションに対して、またはあるアプリケーション内の段階に対してさえも許可されていない。その代わりに、構造（トーナメント予測子などの）、広域または局所予測の使用、および１ビットまたは２モード予測子の選択を、設計時に確定しなければならず、実装者は特定構成をいったん選択する必要があり、この構成はすべてのアプリケーションに使用されるものであった。
【非特許文献１】１９９３年の「Ｃｏｍｂｉｎｉｎｇ  Ｂｒａｎｃｈ  Ｐｒｅｄｉｃｔｏｒｓ」、ＷＲＬ  Ｔｅｃｈｎｉｃａｌ  Ｎｏｔｅ  ３６
【発明の開示】
【発明が解決しようとする課題】
【００２０】
予測子の設計は良好な平均パフォーマンスを可能にするが、従来技術では、特定アプリケーションに対して予測子を最適化することができなかった。
【課題を解決するための手段】
【００２１】
本明細書では、特定アプリケーションに対する構造またはアルゴリズムのうちの少なくとも１つを選択するために、アプリケーション実行時に構成可能な多形的分岐予測子を実装するための、方法および装置が開示されている。
【００２２】
多形的分岐の予測子および方法は、複数の分岐予測方法を含む。この方法は、選択的に分岐予測を実行することができる。現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの１つまたは複数を選択するように、ある選択メカニズムが構成される。
【００２３】
多形的分岐予測子は複数の分岐予測方法を含み、そのそれぞれの方法が分岐予測を選択的に実行することができる。現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの１つまたは複数を選択するように、ある選択メカニズムが構成される。
【００２４】
代替実施形態では、多形的分岐予測子設定はパフォーマンス・メトリックを含むことができる。選択メカニズムは、結果を提供するように協働するための、少なくとも２つの分岐予測方法を選択するように構成することができる。選択メカニズムは、あらかじめ指定されたように、またはランタイムの振る舞いの分析に基づいて、特定アプリケーションまたはアプリケーションのセットに対して１つまたは複数の分岐予測方法を選択することができる。
【００２５】
さらに他の実施形態では、選択メカニズムは、１つまたは複数の分岐予測方法を選択するために、コンパイラおよびランタイム構成要素のうちの１つから情報を受け取るように構成することができる。選択メカニズムは、アプリケーションの実行中に更新されるか、あるいは、論理機能、アドレス・ビット、スレッド指定子、およびいくつかのアドレスまたはスレッド・ビットのハッシュからの出力のうちの少なくとも１つに基づいて更新されることが可能である。
【００２６】
多形的分岐予測子は、アレイ内に格納された予測子エントリが、いくつかのおよびわずかな情報、アレイへの書き込み動作を可能にするための、１ビット書き込みイネーブル信号、または複数ビット書き込みイネーブル信号に関して構成される、予測子エントリのアレイをさらに備えることができる。
【００２７】
各分岐予測方法は、効率性のために論理要素が分岐予測方法間で共有される、論理要素を含むことができる。分岐予測方法間で共有される論理要素は、アレイ、予測子更新論理、およびアドレス生成論理のうちの少なくとも１つを含むことができる。多形的分岐予測子は、予測子エントリのアレイおよび分岐情報キューを含むことが可能であり、アレイから事前に読み取られた情報を書き直すために分岐情報キューからの情報が使用される。多形的分岐予測子は、統一テーブルと複数構成要素予測子のテーブルとの間で共有されるように構成された、アドレス指定論理を含むことができる。複数構成要素アレイのうちの１つを選択するためにアドレス・ビットまたはアドレス・ハッシングによって予測子エントリが選択される、予測子エントリの複数構成要素アレイを提供することができる。分岐予測方法を動的に選択するための方法は、動的に構成可能な複数の分岐予測方法を提供すること、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために動的設定に従って分岐予測方法のうちの１つまたは複数を選択すること、および、改善された予測結果を提供するために１つまたは複数の分岐予測方法の構成を更新することを含む。
【００２８】
これらおよび他の目的、特徴、および利点は、添付の図面に関連して読まれることになるそれらの例示的諸実施形態についての以下の詳細な説明から明らかとなろう。
【００２９】
次に本開示では、以下の図面に関連して、好ましい諸実施形態について詳細に説明する。
【発明を実施するための最良の形態】
【００３０】
本発明の諸実施形態は、多形的分岐予測子の実装と、ソフトウェアによるそれらの使用および選択を対象とする。本発明の諸実施形態は、全体としてハードウェア実施形態の形、全体としてソフトウェア実施形態の形、または、ハードウェア要素およびソフトウェア要素の両方を含む実施形態の形を取ることができる。好ましい実施形態では、多形的予測子は集積回路として実装される。構成の選択は、マイクロコード、ファームウェア、常駐ソフトウェア、ハイパーバイザ、オペレーティング・システム、システム・ツール、アプリケーション・プログラムなどを含むが、これらに限定されない、ソフトウェア内で実施することができる。
【００３１】
さらに本発明は、コンピュータまたは任意の命令実行システムによって、あるいはそれらに関連して使用するための、プログラム・コードを提供する、コンピュータ使用可能媒体またはコンピュータ読み取り可能媒体からアクセス可能な、コンピュータ・プログラム製品の形を取ることができる。この説明では、コンピュータ使用可能またはコンピュータ読み取り可能媒体は、命令実行システム、装置、またはデバイスによって、あるいはそれらに関連して使用するためのプログラムを含む、格納する、通信する、伝播する、または移送することが可能な、任意の装置とすることができる。媒体は、電子、磁気、光、電磁、赤外線、または半導体の、システム（あるいは装置またはデバイス）、あるいは伝播媒体とすることができる。コンピュータ読み取り可能媒体の例には、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）読み取り専用メモリ（ＲＯＭ）、剛体磁気ディスク、および光ディスクが含まれる。現行の光ディスクの例には、コンパクト・ディスク−読み取り専用メモリ（ＣＤ−ＲＯＭ）、コンパクト・ディスク−読み取り／書き込み（ＣＤ−Ｒ／Ｗ）、およびＤＶＤが含まれる。
【００３２】
プログラム・コードを格納あるいは実行する、またはその両方を行うのに好適な、データ処理システムは、システム・バスを介してメモリ要素に直接または間接的に結合された、少なくとも１つのプロセッサを含むことができる。メモリ要素は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量ストレージ、および、実行中に大容量ストレージからコードが取り出される回数を減らすために少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリを、含むことができる。入力／出力またはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接、または、介在するＩ／Ｏコントローラを通じて、システムに結合することができる。
【００３３】
データ処理システムを、介在する専用ネットワークまたは公衆ネットワークを通じて、他のデータ処理システムに、あるいはリモートのプリンタまたはストレージ・デバイスに、結合できるようにするために、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なネットワーク・アダプタ・タイプのほんの一例である。
【００３４】
本明細書で説明する多形的分岐予測子は、集積回路チップに関する設計の一部とすることができる。チップ設計は、グラフィカル・コンピュータ・プログラミング言語で作成すること、およびコンピュータ記憶媒体（ディスク、テープ、物理ハード・ドライブ、または、ストレージ・アクセス・ネットワークなどにある仮想ハード・ドライブなど）に格納することが可能である。設計者が、チップまたはチップを製造する際に使用されるフォトリソグラフィック・マスクを製造しない場合、設計者は、結果として生じる設計を、物理手段によって（たとえば設計を格納している記憶媒体のコピーを提供することによって）、または電子的に（たとえばインターネットを介して）、こうしたエンティティに直接または間接的に伝送する。次に、格納された設計は、通常、ウェハ上に形成されることになる当該チップ設計の複数のコピーを含む、フォトリソグラフィック・マスクを製造するために、適切なフォーマット（たとえばＧＤＳＩＩ）に変換される。フォトリソグラフィック・マスクは、エッチングまたはその他の方法で処理されることになるウェハの領域（あるいはその上の層またはその両方）を画定するために使用される。
【００３５】
結果として生じる集積回路チップは、裸ダイ（bare die）などの、未加工ウェハの（すなわち、複数の未パッケージング・チップを有する単一のウェハのような）形で、または、パッケージングされた形で、製造者によって配布することが可能である。後者の場合、チップは、単一チップ・パッケージ（マザーボードまたは他の高水準キャリアに取り付けられたリード線を備えたプラスチック・キャリアなど）内に、あるいはマルチチップ・パッケージ（表面配線または埋め込み配線のいずれかまたは両方を有するセラミック・キャリアなど）内に、載置される。いずれの場合も、その後チップは、（ａ）マザーボードなどの中間製品または（ｂ）最終製品の、いずれかの一部として、他のチップ、ディスクリート回路要素、あるいは他の信号処理デバイス、またはそれらすべてと、一体化される。最終製品は、玩具および他の低価格アプリケーションから、ディスプレイ、キーボードまたは他の入力デバイス、および中央処理装置を有する高度なコンピュータ製品にまで及ぶ、集積回路チップを含む任意の製品とすることができる。
【００３６】
次に同じ番号が同じかまたは同様の要素を表す諸図面を参照するが、最初に図１では、本発明を実装するプロセッサに従って分岐予測を実施することができる、例示的な高性能マイクロプロセッサ・パイプライン１０が例示されている。命令は、命令フェッチ論理ＩＦを使用して命令キャッシュＩＣからフェッチされる。命令は、分岐予測論理ＢＰによって処理されると同時に、デコーディング論理Ｄ０、Ｄ１、Ｄ２、Ｄ３に渡される。分岐予測は、予測された分岐に遭遇した場合、命令フェッチ論理ＩＦ内に維持される命令フェッチ・アドレスを更新することによって、フェッチ方向に変化をもたらす。
【００３７】
デコード済み命令（分岐命令および非分岐命令の両方）は、転送機構ＸＦＥＲを介してディスパッチ論理ＧＤに転送される。ディスパッチされた個々の命令は、レジスタ・マップ・テーブルＭＰを使用して改名され、命令タイプに応じて発行論理ＩＳＳ内に維持されている発行キュー内に入力され、適切な実行パイプラインＢＲ、ＬＤ／ＳＴ、ＦＸ、およびＦＰに発行される。命令は、発行論理ＩＳＳによって、発行論理内に維持されている発行キューから互いに順不同（out of order）で発行される。
【００３８】
次に、計算パイプラインＬＤ／ＳＴ、ＦＸ、およびＦＰ内での実行を参照すると、命令は、１つまたは複数のレジスタ・ファイルＲＦへのレジスタ・ファイル・アクセスを実行し、実行段階に入る。ＬＤ／ＳＴ命令の場合、実行段階は第１のアドレス生成段階ＥＡと、それに続くデータ・キャッシュ・アクセスおよびデータ・フォーマット化を含む。ＦＸ命令の場合、実行は、ＥＸによって実装される論理機能を含む。ＦＰ命令の場合、実行は１つまたは複数の論理機能Ｆ１からＦ６を含む。次にＢＲパイプライン内の分岐命令の実行を参照すると、分岐命令は、レジスタ・ファイル・アクセス論理ＲＦ内の条件、分岐カウンタ、および分岐ターゲット・オペランドのうちの１つまたは複数を取り出すために、オプションで１つまたは複数のレジスタ・ファイル・アクセスを実行する。ＢＲパイプライン内の分岐実行論理ＥＸは、ターゲット・アドレスおよび分岐条件を計算し、予測されるターゲットおよび条件と比較する。たとえば、条件が不正確に計算されること、または誤ったターゲットが供給されることのいずれかなどの、誤予測が検出された場合、分岐リダイレクト処置が取られる。誤予測された命令は、フラッシュまたは他の適切なメカニズムを使用して、実行パイプラインから除去され、命令フェッチ論理ＩＦ内に維持されているフェッチ・アドレスが更新される。
【００３９】
すべての実行パイプラインは、計算された結果のライトバックＷＢ、およびコミット・ステージＣＰへの転送ＸＦＥＲを実行することによって競い合う。
【００４０】
命令は、それらの順番どおりのコミット・ポイントで、すべての他の命令に対して順番どおりのコミット・ステージＣＰごとにコミットされる。割り込み条件、例外、および他の特殊な実行条件により、コミット・ステージごとにフラッシュおよびリフェッチが実行されることになり、命令フェッチ論理ＩＦ内の命令フェッチ・アドレスが、再実行あるいは割り込みまたは例外ハンドラ・アドレスのうちの１つに設定される。
【００４１】
図２および図３を参照すると、２つの例示的分岐予測子エントリ・タイプが示されている。各予測子は、分岐アドレス、ｇｓｈａｒｅ、ｇｓｅｌｅｃｔ、または局所予測子の使用結果と関連する、特定の分岐に関連付けられている。選択および関連付けメカニズムの制御の下で予測子が取り出される場合、予測子の状態が識別され、この状態に基づいて予測が実行される。
【００４２】
次に、より具体的に図２を参照すると、単一ビット予測子２０２は、次に実行される予測に対応する２つの状態（分岐２０５および非分岐２１０）のうちの１つを表すために、単一情報ビットを使用している。予測子が分岐状態２０５にある場合、予測は、分岐が実行されることになる旨のインジケーションを戻す。予測子が非分岐状態２１０にある場合、予測は、分岐が実行されないことになる旨のインジケーションを戻す。例示的ＢＲパイプラインでの分岐実行中に予測がチェックされた場合、誤予測により状態遷移が生じることになり、たとえば、分岐結果がラベル表示された状態遷移弧２０６によって示されるように、最新の分岐結果の方向を反映するように予測が変更されることになる。
【００４３】
図３を参照すると、次に実行される予測に対応する４つの状態のうちの１つを表すために２つの情報ビットを使用する、例示的２モード予測子が図示されている。４つの状態には、高い確率で分岐２５０、低い確率で分岐２５５、低い確率で分岐しない２６０、高い確率で分岐しない２６５が含まれる。予測子が２つの「分岐」状態２５０および２５５のうちの１つにある場合、予測は、分岐が実行されることになる旨のインジケーションを戻す。予測子が２つの「非分岐」状態のうちの１つにある場合、予測は、分岐が実行されないことになる旨のインジケーションを戻す。例示的ＢＲパイプラインでの分岐実行中に予測がチェックされた場合、図３に従って状態遷移が実行される。具体的に言えば、正しい予測により、適切な方向の「高い確率」状態が選択されることになる。誤予測が検出された場合、予測子が以前に高い確率状態２５０または２６５にあった場合は、低い確率状態２５５または２６０への予測子の更新が実行されることになる。予測子が低い確率状態にあった場合、分岐結果がラベル表示された図３の遷移弧２５７によって示されるように、予測方向は状態２５５と２６０との間で変更されることになる。
【００４４】
図４を参照すると、たとえば局所予測子３１０、広域予測子３２０、および選択予測子３３０という、３つの例示的構成要素予測子を含む、例示的トーナメント予測子３００が示される。選択メカニズム３４０は、選択予測子３３０の制御の下で、局所予測子３１０および広域予測子３２０のうちの１つによって実行された予測を選択する。
【００４５】
図５を参照すると、モード制御選択メカニズム４３０（たとえば、「１ビット／２ビット・モード」）の制御の下での多形的分岐予測子４００の実装態様が、例示的に示される。制御選択メカニズム４３０は、予測アレイ４１０内で、ｎ個のエントリを備えた１ビット予測子として予測子４００を使用する第１のモード、または、数の削減されたエントリ（たとえば、ｎ／２エントリ）を備えた２ビット予測子として予測子４００を使用する第２のモードの、いずれかを採用する。
【００４６】
好ましい実施形態によれば、アレイ４１０は、入力４０５で（Ｉｄ  ｎ）／２アドレス・ビットを使用して、アレイ４１０の読み出しのために２ビットを有する単一エントリをアドレス指定する。分岐予測子の一実装によれば、分岐予測ビット、たとえばアレイ４１０から取り出されたｂ０およびｂ１は、ＢＲ実行パイプラインによる使用のために、ｂｉｑ＿ｂ０およびｂｉｑ＿ｂ１として分岐情報キューＢＩＱ  ４１５に格納される。
【００４７】
予測は、第１の動作モードでは、取り出された２ビット情報に基づいて実行することが可能であり、２ビット予測子が実装され、選択要素４２０および４２５の制御の下で、それぞれ方向出力４４０および信用出力４４５として２ビットが提供される。選択要素４２０および４２５は、多形的構成情報４３０の制御の下で構成される。第２の動作モードでは、予測子４００は単一ビット予測の提供側として動作する。選択メカニズム４２０は、多形的構成情報４３０の制御の下で、アレイ４１０によって提供された２つのビットのうちの１つを単一ビット方向予測出力４４０として選択する。
【００４８】
多形的予測子４００の一実装によれば、以下のように、追加予測子アドレス・ビット（たとえばアドレス・ビット４２２）で選択が実装される。２ビット・モードの場合、またはアドレス４２２が０に等しい場合、方向４４０はｂ０になる。そうでない場合、方向４４０はｂ１に等しい。この条件を記述するために標準化されたＶＨＤＬ表記法を使用するが、本明細書に含まれる教示の諸態様に対応して、記号名で条件および信号を記述することが可能であり、この論理動作は以下のように示すことができる。
【００４９】
Ｄ＿Ｏｕｔ≦ｂｉｔ０  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ  ＯＲ  ａｄｄｒｅｓｓ＿ｂｉｔ＝‘０’）ｅｌｓｅ  ｂｉｔ１
【００５０】
上式で、ａｄｄｒｅｓｓ＿ｂｉｔは、たとえば図面では「ｍｓｂ」と示される（選択可能な１つの可能ビットである、最上位ビットの場合）。
【００５１】
一実装によれば、オプションで信用ビットを単一ビット予測子の「低い確率」状態に再設定することによって、共通データフローにおける共有処理のために、単一ビット予測子を２モード予測子としてフォーマット化することができる。これには、信用４４５を、２ビット・モードの場合はｂ１に、そうでない場合は０にすることが含まれる可能性がある。この条件を記述するために標準化されたＶＨＤＬ表記法を使用するが、本明細書に含まれる教示の諸態様に対応して、記号名による条件および信号の記述を可能にすることで、論理を以下のように示すことができる。
【００５２】
Ｃ＿Ｏｕｔ≦ｂｉｔ１  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ）ｅｌｓｅ  ‘０’
【００５３】
この実施形態例は例示的であり、制限的ではない。当業者であれば、単一ビット予測子を実装する場合（たとえば、アドレス・ビットの代わりにスレッド指定子を使用することができる）、他のメカニズムを使用して２つのビットのうちの１つを選択することが可能であり、最下位ビット、最上位ビット、いくつかのアドレス・ビットのハッシュ、スレッド・ビットなどを含むが、これらに限定されることのないような、多様な異なるアドレス・ビットを使用することができることを理解されよう。さらに当業者であれば、多形的分岐予測子をスレッドごとに維持し、１つのスレッドが、ある予測子を単一ビット予測子として使用する一方で、同時にアプリケーションを実行している他のスレッドは、ストレージ要素および論理を使用して２ビット予測を実行できることも理解されよう。
【００５４】
少なくとも１つの実施形態では、広い読み取りポートを備えた単一アレイから、または予測子アレイの複数の並列コピーを使用して、複数の分岐に関する複数の予測が同時に取り出される。それらの実施形態では、予測子ストレージから同時に取り出されるビット数を反映するように、アドレス・ビットの数を好適に適合あるいは削減する、またはその両方を実行することになる。他の実施形態では、異なるビット幅が選択され、例示的な１ビットおよび２ビット予測子以外のビット幅の、第１および第２の予測子のサポートを可能にする。さらに他の実施形態では、２ビットのそれぞれが別々のアレイから取り出され、予測子アドレス・ビットの制御の下で、アレイのうちの１つを遮断する（de-energize）ことを可能にするか、または、他のそうしたビットを使用して選択論理４２０を制御することができる。
【００５５】
図６および図７を参照すると、多形的予測メカニズムに従った、予測子ストレージ・アレイ５１０への書き込み動作を実行するための実装が例示的に示されている。図６では、２つのビット（ｂ０およびｂ１）の同時ストレージをサポートし、各ビットについて別々の書き込み可能機構を有する、予測子ストレージ・アレイ５１０への予測子メモリ書き込みが、例示的に示されている。この機構によれば、ストレージ・アレイ５１０は、入力５０５での（Ｉｄ  ｎ）アドレス・ビットを備えるアドレスと、第１のデータ・ビットｂ０および第２のデータ・ビットｂ１と、アドレスによって指定されたエントリの第１ビットｂ０および第２ビットｂ１の書き込みに対応する第１および第２の書き込みイネーブル信号であるｗｅ＿ｂ０  ５１１およびｗｅ＿ｂ１  ５１２とを、受信する。
【００５６】
この例示的実施形態によれば、選択メカニズム５２０を使用することによって、１ビット予測子を更新することができるか、または２ビット予測子を更新することができる。２ビット予測子の更新を実行するための第１の動作モードの場合、方向値５３０がビットｂ０に供給され、多形的構成情報５２０の制御の下に、信用値５３５がビットｂ１に供給される。加えて、ビットｂ０およびビットｂ１の両方を更新するために、書き込みイネーブル信号ｗｅ＿ｂ０  ５１１およびｗｅ＿ｂ１  ５１２の両方が選択される。単一ビット予測子の更新を実行するための第２の動作モードでは、選択論理５１５の制御の下で、方向値５３０がビットｂ０およびｂ１のうちの１つに、また、書き込みイネーブルｗｅ＿ｂ０  ５１１およびｗｅ＿ｂ１  ５１２のうちの１つに、書き込まれる。
【００５７】
例示的一実施形態では、ビットは（標準化されたＶＨＤＬ表記法を使用して）以下のように計算される。
ｂ０≦ｄｉｒｅｃｔｉｏｎ；
ｂ１≦ｃｏｎｆｉｄｅｎｃｅ  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ）ｅｌｓｅ
ｄｉｒｅｃｔｉｏｎ；ｗｅ＿ｂ０≦２＿ｂｉｔ＿ｕｐｄａｔｅ  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ）ｅｌｓｅ
１＿ｂｉｔ＿ｕｐｄａｔｅ  ａｎｄ  ａｄｄｒｅｓｓ＿ｂｉｔ＝‘０’；ｗｅ＿ｂ１
≦２＿ｂｉｔ＿ｕｐｄａｔｅ  ｗｈｅｎ（ｍｏｄｅ−２ｂｉｔ）ｅｌｓｅ
１＿ｂｉｔ＿ｕｐｄａｔｅ  ａｎｄ  ａｄｄｒｅｓｓ＿ｂｉｔ＝‘１’；
【００５８】
図７を参照すると、２つのビットの同時ストレージをサポートし、両方のビットについて共通の書き込み可能機構を有する、予測子ストレージ・アレイ５６０への予測子メモリ書き込みが、例示的に示されている。この機構によれば、ストレージ・アレイ５６０は、入力５０５での（Ｉｄ  ｎ）アドレス・ビットを備えるアドレスと、第１および第２のデータ・ビットｂ０およびｂ１と、アドレスによって指定されたエントリの両方のビットの書き込みに対応する単一の書き込みイネーブルｗｅ  ５６３とを、受信する。この例示的実施形態によれば、１ビット予測子を更新することができるか、または２ビット予測子を更新することができるかの、いずれかである。
【００５９】
２ビット予測子の更新を実行するための第１の動作モードでは、多形的構成情報５７０、ならびに選択（ｓｅｌ）信号によって制御された選択論理５６２および５６５の制御の下に、方向値５３０がビットｂ０に供給され、信用値５３５がビットｂ１に供給される。加えて、方向５３０および信用５３５の情報によってアドレス・エントリを更新するために、書き込みイネーブル信号ｗｅ  ５６３が選択される。単一ビット予測子の更新を実行するための第２の動作モードでは、選択論理５６２の制御の下で、方向値５３０がビットｂ０およびｂ１のうちの１つに書き込まれ、オリジナル・エントリ・コンテンツ（例示的分岐情報キューＢＩＱ  ４１５に格納されている情報）に関する情報（ｂｉｑ＿ｂ０およびｂｉｑ＿ｂ１）を使用して、選択子ビット（ｓｅｌ）ならびに論理５６２および５６５の制御の下で以前の情報と、多形的構成情報５７０とが、再格納される。例示的一実施形態では、ビットは、（標準化されたＶＨＤＬ表記法を使用して）以下のように計算される。
ｂ０≦ｄｉｒｅｃｔｉｏｎ  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ  ＯＲ  ａｄｄｒｅｓｓ＿ｂｉｔ＝‘０’）ｅｌｓｅ
ｂｉｑ＿ｂ０；ｂ１≦ｃｏｎｆｉｄｅｎｃｅ  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ）ｅｌｓｅ
ｄｉｒｅｃｔｉｏｎ  ｗｈｅｎ（ａｄｄｒｅｓｓ＿ｂｉｔ＝‘１’）ｅｌｓｅ
ｂｉｑ＿ｂ１；ｗｅ≦２＿ｂｉｔ＿ｕｐｄａｔｅ  ｗｈｅｎ（ｍｏｄｅ−２ｂｉｔ）ｅｌｓｅ
１＿ｂｉｔ＿ｕｐｄａｔｅ；
【００６０】
当業者であれば、図７に示された実施形態が、アレイ５６０内のストレージ密度の上昇と、ＢＩＱ情報が取り出された時点と取り出された情報の再格納との間に発生した可能性のある予測子更新の上書きにつながる偽従属とを、交換するものであることを理解されよう。さらに当業者であれば、こうした偽従属の更新の影響を低減または消去するために、１つまたは複数の最近更新された値の連想バイパス（associative bypass）を提供できることも理解されよう。図６および図７は例示的であり、限定的ではない。当業者であれば、単一ビット予測子を実装する場合（たとえば、アドレス・ビットの代わりにスレッド指定子を使用することができる）、他のメカニズムを使用して２つのビットのうちの１つを選択することが可能であり、最下位ビット、最上位ビット、いくつかのアドレス・ビットのハッシュ、スレッド・ビットなどを含むが、これらに限定されることのないような、多様な異なるアドレス・ビットを使用することができることを理解されよう。さらに当業者であれば、多形的分岐予測子をスレッドごとに維持し、１つのスレッドが、ある予測子を単一ビット予測子として使用する一方で、同時にアプリケーションを実行している他のスレッドは、ストレージ要素および論理を使用して２ビット予測を実行できることも理解されよう。
【００６１】
図８を参照すると、多形的機能をサポートしても論理がそれほど複雑にならない、低オーバヘッドの多形的予測子の実装が示されている。したがって、すべての構成可能な多形的モードに対して、予測更新論理を実装するための共通論理機能を使用することが望ましい。本発明に従って単一ビットまたは２ビット（２モード）予測子の両方を更新するために使用される、新規な多形的予測子に従った分岐予測更新論理６００が示されている。ｂｉｑ＿ｂ０およびｂｉｑ＿ｂ１などの分岐情報キューＢＩＱ  ４１５のコンテンツ、ならびに、図１に示されたような例示的マイクロプロセッサのＢＲ実行パイプラインの論理ＥＸによって計算された「分岐結果」が提供される。本発明によれば、多形的予測子更新は、更新済み方向情報６５０、更新済み信用情報６５５、および、予測子ストレージ内で１ビット（６５７）または２ビット（２モード）（６５６）のいずれの予測子が更新されるべきであるかの指示を提供する。
【００６２】
具体的に言えば、分岐予測を計算するための論理６１０は、図３の２モード予測子（２ビット予測子）の未修正機能に対応する。図８の実施形態によれば、第１の動作モードでは、図３に従って、多形的構成６７０の制御の下で２ビット予測更新６５６の結果が計算され、更新済み方向６５０、信用情報６５５、および、予測子ストレージ内の２ビット予測子を更新するかどうかの更新済み情報６５６が提供される。第２の動作モードでは、図２に従って、更新済み方向６５０、および予測子ストレージ内の２ビット予測子を更新するかどうかの更新情報６５７を提供する、単一ビット予測結果が提供される。
【００６３】
一実施形態例では、更新は（標準化されたＶＨＤＬ表記法を使用して）以下のように計算される。
ｂ０≦ｂｉｑ＿ｂ０  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ  ＯＲ  ａｄｄｒｅｓｓ＿ｂｉｔ＝‘０’）ｅｌｓｅ
ｂｉｑ＿ｂ１；ｂ１≦ｂｉｑ＿ｂ１  ｗｈｅｎ（ｍｏｄｅ＝２ｂｉｔ）ｅｌｓｅ
‘０’；１＿ｂｉｔ＿ｕｐｄａｔｅ≦ｂ０／＝ｄｉｒｅｃｔｉｏｎ；２ｂｉｔ＿ｕｐｄａｔｅ≦ｂ０／−ｄｉｒｅｃｔｉｏｎ  ＯＲ  ｂ１／＝ｃｏｎｆｉｄｅｎｃｅ
【００６４】
図８に示された論理および動作は制限的ではなく、本明細書の教示に従った他のタイプの予測子更新共有も実施可能である。幅、機能、および他の修正が使用可能である。当業者であれば、特定の技術に関して、および一般に知られる変形を使用して、論理コーン（cone）のサイズおよび深さなどを減少させるための、論理の最適化および変形を見つけるであろう。これらについては、話を簡単にするために省略している。
【００６５】
次に図９および図１０を参照すると、予測子をそれらの組織構造に関して多形的に構成するための方法が示されている。これらの方法は例示的に示されており、単一レベルの統一予測子またはトーナメント予測子のいずれかを実装するように構成可能である。さらに各予測子７１０、７２０、７３０は、予測子エントリのストレージおよび動作に関して図５、図６、および図７に提示された教示に従って構成可能な場合がある。
【００６６】
図９を参照すると、大規模な単一の統一予測子またはトーナメント予測子のうちの１つであることを含む、多形的予測子に関する第１の例示的な読み取り方法および装置が、例示的に示されている。この例示的実施形態によれば、アドレス指定論理７８１からの多形的構成情報７８０を使用して、構成をトーナメント予測子または統一アレイ予測子として制御する。トーナメント予測子は、第１のサイズ（または第１の複数サイズ）の複数アレイを構築する。単一の大規模な統一アレイは、より多数のエントリを備えた単一予測子に対応する。
【００６７】
第１の動作モードによれば、例示的実施形態は、選択子７４０に対して選択ソースを選択する構成情報７８０の制御の下で、トーナメント予測子として選択子７５０の制御の下で動作する。選択論理７４０は、選択予測子７３０の制御の下で、例示的構成要素予測子７１０および７２０の複数の予測のうちの１つを選択するように構成される。第２の動作モードによれば、例示的実施形態は、選択子７４０を使用して選択ソースを選択する構成情報７８０の制御の下で、単一の大規模な統一予測子として選択子７５０の制御の下で動作する。選択論理７４０は、アドレス・ビット、ハッシュ済みアドレス・ビット、スレッド・ビット、または他の適切なアドレス指定手段のうちの１つを含むことができる、入力７５５の制御の下で、複数のサブアレイの結果のうちの１つを選択するように構成される。
【００６８】
次に図１０を参照すると、大規模な単一の統一予測子またはトーナメント予測子のうちの１つであることに関して、多形的予測子の第２の例示的読み取り方法および装置が示されている。この例示的実施形態によれば、多形的構成情報７８０を使用して、第１のサイズ（または第１の複数サイズ）の複数のアレイ、または、より多数のエントリを備えた単一予測子に対応する単一の大規模な統一アレイを含む、トーナメント予測子として、構成を制御する。
【００６９】
第１の動作モードによれば、例示的実施形態はトーナメント予測子として動作する。選択子７９０は、２つの例示的構成要素予測子７１０および７２０のうちの１つから予測子を選択する。選択子７９６は、構成７８０の制御の下で、選択子７９０によって生成されたトーナメント予測の結果を選択する。第２の動作モードによれば、例示的実施形態は、ハッシュ論理７９４によって生成されたアドレスの制御の下で選択子７９２を使用する、単一の大規模な統一予測子として動作する。この例示的論理７９４では、１つおよび複数のアドレス・ビットのハッシュ機能を使用して、複数のアレイにまたがって使用量を分配する。具体的に言えば、アレイ数が２の累乗でない場合、構成要素アレイをより大規模な論理アレイのサブアレイとして使用する際に、構成要素アレイの不均衡な使用を生み出すことなくアドレス・ビットを直接使用することは不可能である。選択子７９６は、構成７８０の制御の下で、サブアレイ選択子７９２によって生成された予測の結果を選択する。
【００７０】
例示的論理では、１つおよび複数のアドレス・ビットのハッシュ機能７９４を使用して、複数のアレイにまたがって使用量を分配する。当業者であれば、本発明に従ってサブアレイを選択する際に使用可能な、たとえば多様な選択ソースを使用すること、ビット文字列を連結すること、多様なビットの論理機能を使用することなどの、サブアレイを選択する代替方法が使用可能であることを理解されよう。
【００７１】
さらに他の実施形態では、本発明の範囲内で、第１の動作モードでは、たとえば単一ビット予測子エントリを使用する複数構成要素予測子として、および、第２の動作モードでは、複数ビット予測子エントリ（たとえば２モード予測子）を使用する単一の統一予測子として、動作する予測子を表すために、第１の構成要素テーブルを使用して、第１のビット（方向予測ビットなど）および第２のビット（信用(confidence)ビットなど）が生成される。当業者であれば、本明細書の教示の範囲に基づき、他の構成の機会は、ｎ個の構成要素テーブルを備えた第１のトーナメント予測子を、ｋ＜ｎのｋ個の構成要素テーブルを備えた予測子に再構成することであり、ここで、当該ｋ個の構成要素テーブルのうちの少なくとも１つが、ｎ個の構成要素テーブルからの少なくとも２つのアレイの組み合わせに対応することを理解されよう。構成要素テーブルは、当分野で知られている。
【００７２】
複数構成要素テーブル予測子の例示的構成におけるトーナメント予測子の使用は例示的であり、限定的ではない。さらに当業者であれば、クロック・ゲーティング（clock gating）論理のタイミング制約に従って、構成要素アレイが選択子によって選択されない場合、構成要素アレイのうちの１つまたは複数で選択的クロック・ゲーティングが実行可能であることを理解されよう。
【００７３】
次に図１１を参照すると、図９および図１０における多形的読み取り論理に対応する、複数構成要素予測子（例示的トーナメント予測子など）または単一の統一予測子のいずれかとしての構成が可能な、多形的予測子に関する予測子更新論理８５０が示される。予測子８５０は、３つの構成要素予測子テーブル８１０、８２０、および８３０が含まれる。
【００７４】
第１の動作モードでは、多形的構成７８０の制御の下で、複数構成要素予測子に関する更新仕様に従って、複数構成要素予測子８５０の１つまたは複数の構成要素予測子が更新される。（局所予測子アレイの例示的使用において）第１の予測子アレイ８１０に対して更新イネーブルが示された場合、選択子８１４によって多形的構成７８０の制御の下で局所予測更新（局所更新）が選択され、選択子８１２によって局所予測更新イネーブル（局所更新イネーブル）が選択される。（広域予測子アレイの例示的使用において）第２の予測子アレイ８２０に対して更新イネーブルが示された場合、選択子８２４によって多形的構成７８０の制御の下で広域予測更新（広域更新）が選択され、選択子８２２によって広域予測更新イネーブル（広域更新イネーブル）が選択される。（選択予測子アレイの例示的使用において）第３の予測子アレイ８２０に対して更新イネーブルが示された場合、選択子８３４によって多形的構成７８０の制御の下で選択予測更新（選択更新）が選択され、選択子８３２によって選択予測更新イネーブル（選択更新イネーブル）が選択される。
【００７５】
第２の動作モードでは、単一の大規模アレイとして使用するために、少なくとも２つのアレイ８１０、８２０、および８３０が統合される。好ましい実施形態によれば、大規模論理予測子アレイにおけるエントリの更新のために少なくとも１つのサブアレイを選択するために、１つまたは複数のハッシュ機能８４０が（たとえば図１０のハッシュ機能７９４に対応して）計算され、大規模な予測子構成のために更新イネーブルと統合される。
【００７６】
第２の動作モードでは、選択子８１４、８２４、８３４が、多形的構成情報７８０の制御の下で、共通大規模予測子エントリ更新から予測子更新を選択し、選択子８１２、８２２、８３２が、生成されたハッシュ関数および更新イネーブルに基づいて、アレイ書き込みイネーブル情報を選択する。当業者であれば、ハッシュ・ブロック内のアドレス・ビットに加えて、たとえばスレッド・ビットなどの追加の情報が使用可能であることを理解されよう。さらに本発明の範囲内で、ビットのハッシュの代わりに（および図９の読み取り実施形態に従って）ビットのサブセットを使用することができる。
【００７７】
図１２を参照すると、図９、図１０、および図１１に従った多形的予測子の第１および第２の動作モードに関して、共有更新アドレス計算論理を有する例示的実施形態が例示的に示されている。この実施形態によれば、更新アドレス計算論理９５０を使用して、追加のアドレス・ビットを提供することにより、第１の動作モードにおける複数構成要素予測子内の広域予測子９２０に関するアドレス、または、単一のより大規模なアレイを備える統一予測子に関する更新アドレスの、両方が計算される。（一般に、図１１のハッシュ機能８４０に対応する）ハッシュ論理９４０の制御の下で、単一の論理アレイ予測子の１つまたは複数のサブアレイ９１０、９２０、９３０を選択するためにも、アドレス・ビットが使用される。
【００７８】
効率性のために分岐予測方法間で論理要素が共有されるように、多形的分岐予測子は論理要素（たとえば更新アドレス論理９５０）を含むことができる。他の論理要素または構成要素も、分岐予測方法間で共有可能であり、アレイ、予測子更新論理、アドレス生成論理などのうちの少なくとも１つを含むことができる。
【００７９】
次に図１３および図１４を具体的に参照すると、アプリケーション・パフォーマンスを最適化するために多形的予測子を使用するための方法が例示的に示されている。好ましい実施形態によれば、この機能はソフトウェア内に実装されるが、他の諸実施形態も可能である。
【００８０】
図１３をより具体的に参照すると、方法１０００は好ましくはコンパイラ内に実装される。この方法はステップ１０１０で開始される。ステップ１０１０では、多形的予測子にとって好ましい構成が導出される。ステップ１０２０では、多形的予測子の好ましい構成を選択するためにコードが生成される。その後、この方法は終了する。一実施形態によれば、この方法は、アプリケーション全体にとって好ましい構成を選択するために、コンパイラによって１回実行される。他の実施形態によれば、この選択は、たとえば異なるプログラム段階に対して複数回実行される。選択は、コマンド行フラグ、アプリケーション・コードに挿入されたプラグマ（pragma）または他のコンパイラ指示、プログラム・プロパティのコンパイラ・ヒューリスティックスまたはモデリング、およびプロファイル指示フィードバックなどの、ユーザ指定の指示に基づくものとすることができる。
【００８１】
図１４を参照すると、方法１０５０は好ましくはアプリケーション・ライブラリ、動的コンパイラ、連続プログラム最適化モジュール、ファームウェア、またはマイクロコード内に実装され、プログラム・ランタイムに実行される。方法はステップ１０６０で開始される。ステップ１０６０では、アプリケーション・ランタイムの振る舞いが分析される。構成の試行および測定などを含むが、これらに限定されることのない、多様なプログラム分析技法が知られており、本発明に関して使用可能である。ステップ１０７０では、アプリケーション分析（またはアプリケーション段階分析）に基づいて好ましい構成が選択される。その後、この方法は終了する。
【００８２】
一実施形態によれば、方法１０５０は、アプリケーション全体にとって好ましい構成を選択するために１回実行することができる。他の実施形態によれば、この選択はアプリケーション・ランタイム中に、たとえば異なるプログラム段階に対して、複数回実行される。再実行は、固定間隔で、または（パフォーマンス監視インフラストラクチャによって示されるなどの）主要アプリケーション・メトリックが変更された際に、アプリケーションによって（たとえば、動的構成選択機能を呼び出すことによって）示された明示的ポイントで、行うことができる。動的アプリケーション分析は、好ましくは、分岐実行および予測情報などのアプリケーション統計を提供する、パフォーマンス監視インフラストラクチャのサポートを使用して実行される。
【００８３】
次に、図１５を参照すると、オペレーティング・システム・コンテキストまたはハイパーバイザ・パーティションの間の切り替えを実行するための方法１１００が示されている。方法１１００はステップ１１１０で開始される。ステップ１１１０では、アプリケーションまたは以前にスケジューリングされたパーティションに関する構成が格納される。一実施形態では、プロセスまたはパーティションがスケジューリング解除された場合に構成が格納される。代替実施形態では、この構成情報は、プロセスまたはパーティション特有の構造内で更新または維持される場合に、格納される。ステップ１１２０では、次のプロセスまたはパーティションに関する構成情報が、ステップ１１１０の以前に格納された情報から読み取られ、多形的構成が更新される。方法は終了する。
【産業上の利用可能性】
【００８４】
本明細書では、特定のアプリケーションに対して構造またはアルゴリズムのうちの少なくとも１つを選択するために、アプリケーションの実行時に構成可能な、多形的分岐予測子を実装するための方法および装置が開示されている。多形的分岐予測子は、複数の分岐予測方法を含む。この方法は、分岐予測を選択的に実行することができる。選択メカニズムは、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの１つまたは複数を選択するように構成される。各方法は、分岐予測を選択的に実行できるものとすることができる。選択メカニズムは、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの１つまたは複数の選択するように構成される。
【００８５】
多形的分岐予測子（例示的であり、限定的でないことが意図される）を実装するための方法および装置に関する好ましい諸実施形態について説明してきたが、当業者であれば、前述の教示に鑑みて修正および変形が実行できることに留意されたい。したがって、添付の特許請求の範囲によって概説された本発明の範囲および趣旨の中で開示された特定の諸実施形態において、変更が可能であることを理解されよう。以上、本発明の諸態様について、特許法が要求する細部および詳細事項と共に説明してきたが、特許証によって保護された請求および所望の内容は、添付の特許請求の範囲に記載されている。
【図面の簡単な説明】
【００８６】
【図１】本発明に従って使用可能な、分岐予測子を含む例示的パイプラインを示す図である。
【図２】単一ビット予測子状態を示す図である。
【図３】２モード予測子状態を示す図である。
【図４】例示的トーナメント予測子を示す図である。
【図５】例示的実施形態に従った、分岐情報キューを備えた単一ビットおよび２モードの分岐予測子モードを使用する、多形的予測子への読み取りアクセスを示す図である。
【図６】例示的実施形態に従った、単一ストレージ・ビットの書き込み更新機能を有するメモリ・アレイを使用した、多形的１ビット／２モード予測子を更新するための実装を示す図である。
【図７】例示的実施形態に従った、２重ビットを備えるエントリの書き込み更新機能を有するメモリ・アレイを使用した、多形的１ビット／２モード予測子を更新するための実装を示す図である。
【図８】例示的実施形態に従った、単一ビットおよびｎビットの予測を実行するために予測子を共有するための回路を示す概略図である。
【図９】例示的実施形態に従った、単一の統一大規模予測子またはトーナメント予測子のいずれかを実装するように構成可能な、多形的分岐予測子のための読み取りパスを示す概略図である。
【図１０】例示的実施形態に従った、単一の統一大規模予測子またはトーナメント予測子のいずれかを実装するように構成可能な、多形的分岐予測子のための他の読み取りパスを示す概略図である。
【図１１】他の例示的実施形態に従った、トーナメントまたは統一アレイとして構成可能な例示的多形的予測子のための書き込み更新パスを示す概略図である。
【図１２】例示的実施形態に従った、トーナメント／非トーナメント分岐予測に関する更新論理の共有を示す概略図である。
【図１３】例示的実施形態に従った、分岐予測を構成するための構成コードを生成するコンパイラを示すブロック／流れ図である。
【図１４】他の例示的実施形態に従った、たとえば連続プロファイリング最適化を使用する、分岐予測方法の動的選択を示すブロック／流れ図である。
【図１５】例示的実施形態に従った、オペレーティング・システム（ＯＳ）スケジューリング（またはハイパーバイザ・パーティション・スケジューリング）を示すブロック／流れ図である。
【図１】
2009535750.tif 000003
【図２】
2009535750.tif 000004
【図３】
2009535750.tif 000005
【図４】
2009535750.tif 000006
【図５】
2009535750.tif 000007
【図６】
2009535750.tif 000008
【図７】
2009535750.tif 000009
【図８】
2009535750.tif 000010
【図９】
2009535750.tif 000011
【図１０】
2009535750.tif 000012
【図１１】
2009535750.tif 000013
【図１２】
2009535750.tif 000014
【図１３】
2009535750.tif 000015
【図１４】
2009535750.tif 000016
【図１５】
2009535750.tif 000017
【国際調査報告】
2009535750.tif 000018