JP5186488B2 - 多形的分岐予測子を実装するための方法および装置 - Google Patents

多形的分岐予測子を実装するための方法および装置 Download PDF

Info

Publication number
JP5186488B2
JP5186488B2 JP2009510049A JP2009510049A JP5186488B2 JP 5186488 B2 JP5186488 B2 JP 5186488B2 JP 2009510049 A JP2009510049 A JP 2009510049A JP 2009510049 A JP2009510049 A JP 2009510049A JP 5186488 B2 JP5186488 B2 JP 5186488B2
Authority
JP
Japan
Prior art keywords
predictor
bit
branch
prediction
polymorphic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009510049A
Other languages
English (en)
Other versions
JP2009535750A (ja
Inventor
ゲスビント、マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2009535750A publication Critical patent/JP2009535750A/ja
Application granted granted Critical
Publication of JP5186488B2 publication Critical patent/JP5186488B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

Description

本発明は、一般に、マイクロプロセッサにおける分岐命令の処理に関し、とりわけ、多形的分岐予測子(polymorphic branch predictor)を実装するための方法および装置に関する。
現在のプロセッサは、分岐動作などのパイプライン分散イベントに対処するための予測技法を適用することによって、パフォーマンスを達成している。従来技術により、多様な分岐処理技法が提供されてきた。分岐予測子とは、プログラムの命令フローにおいて、条件付分岐が分岐される可能性があるか否かを判別する、プロセッサの一部である。これが分岐予測と呼ばれる。分岐予測子は、現在の最新のスーパースケーラ型プロセッサにおいて、高性能を実現するために極めて重要である。分岐予測子は、分岐が解決されるのを待つことなく、プロセッサが命令をフェッチして実行できるようにするものである。
RISCアーキテクチャの初期の実装では単純な分岐予測を実行しており、たとえばアーキテクチャは、常に、分岐(または条件なしジャンプ)が実行されないであろうと予測したため、必ず次の順次命令をフェッチした。分岐またはジャンプが評価された場合にのみ、命令フェッチ・ポインタは非順次アドレスに設定される。これらのCPUは、デコード段階で分岐を評価し、単一サイクルで命令をフェッチするものであった。結果として、分岐ターゲットの循環は2サイクル長さとなり、マシンは常に、いずれかの分岐を進んだ直後に命令をフェッチすることになった。一部のアーキテクチャは、これらのフェッチされた命令を利用するために、分岐遅延スロットを定義した。
「静的予測」を実施するプロセッサは、逆方向指示分岐が分岐されること(逆方向分岐はプログラム・ループの最下位であるものと想定)、および順方向指示分岐が分岐されないこと(これらはループまたは他の処理コードから早期に出るものと想定)を予測する。何度も実行されるループの場合、ループの最後の分岐を誤予測する(mispredict)だけである。静的予測は、動的分岐予測を使用するほとんどのプロセッサにおいて、フォールバック技法(動的予測子に使用されるいかなる情報もない場合)として使用される。
一部のスーパースケーラ・プロセッサは、命令の各ラインで、次のラインを指すポインタをフェッチする。次ライン予測子は、分岐ターゲット予測ならびに分岐方向予測を処理するため、この次ライン予測子は、ここで列挙される他の予測子と単純に比較することはできない。次ライン予測子が2個、4個、または8個の位置合わせされた命令グループを指す場合、分岐ターゲットは、通常、フェッチされた最初の命令とはならないため、フェッチされた初期命令は無駄である。話を簡単にするために、分岐ターゲットが均一に分散すると想定すると、フェッチされた0.5個、1.5個、および3.5個の命令がそれぞれ廃棄される。
分岐自体は、一般に、位置合わせされたグループ内の最後の命令とはならないため、分岐(またはその遅延スロット)後の命令は廃棄されることになる。ここでも、分岐命令の配置が均一に分散すると想定すると、フェッチされた0.5個、1.5個、および3.5個の命令がそれぞれ廃棄される。分岐および宛先ラインで廃棄された命令は、たとえ単一サイクルの次ライン予測子の場合であっても、ほぼ完全なフェッチ・サイクルまで追加される。
2モード(bimodal)分岐予測子は、命令アドレスの最下位ビットでインデックス付けされた、2ビット飽和カウンタ(saturating counter)のテーブルを有する。命令キャッシュとは異なり、通常、2モード予測子エントリはタグを持たないため、特定のカウンタが異なる分岐命令にマッピングされる可能性があり(これは、分岐干渉または分岐エイリアシング(branch aliasing)と呼ばれる)、この場合、精度が低くなる可能性がある。各カウンタは、1)高い確率で(Strongly)非分岐、2)低い確率で(Weakly)非分岐、3)低い確率で分岐、および4)高い確率で分岐、という、4つの状態のうちの1つを有する。
分岐が評価された場合、対応するカウンタが更新される。非分岐と評価された分岐は、高い確率で非分岐の方向へと、状態を減分し、分岐と評価された分岐は、高い確率で分岐の方向へと、状態を増分する。この2ビット飽和カウンタ・スキームの主な利点は、ループ最後の分岐が常に分岐されると予測されることである。1ビット・スキームは、ループの最初および最後の両方の分岐を誤予測する。2ビット・スキームは、最後の分岐のみを誤予測する。同様に、ほぼ常に1方向に進む極度にバイアスをかけられた分岐では、1ビット・スキームは、奇数分岐ごとに誤予測は2回であり、2ビット・スキームでは誤予測は1回である。
2モード・カウンタ・テーブルは命令アドレス・ビットでインデックス付けされるため、スーパースケーラ・プロセッサは、フェッチされた命令ごとに別々のSRAMにテーブルを分割すること、および、命令のフェッチと並行して、命令ごとに予測をフェッチすることが可能であり、その結果、分岐がデコードされるとすぐに分岐予測を使用することができる。2ビット予測子に加えて、nビットを使用する多様な同様の飽和カウンタ・ベースの予測子が可能である。
2モード分岐予測は、あらゆるループの終了を誤予測する。毎回同じループ・カウントを有する傾向があるループの場合(および、反復的振る舞いを伴う多くの他の分岐の場合)、一部の予測子はより良好に実行することができる。局所分岐予測子は、2つのテーブルを維持する。第1のテーブルは局所分岐履歴テーブルである。これは、分岐命令アドレスの低位ビットによってインデックス付けされ、最近のn回の分岐実行の、分岐した/分岐しなかったの履歴を記録する。他方のテーブルは、パターン履歴テーブルである。このテーブルは実際の予測子を含むが、そのインデックスは第1のテーブル内の分岐履歴から生成される。分岐を予測するために分岐履歴が検索され、次にその履歴を使用して、予測を実行するために予測子を検索する。この手法は、単一ビット予測子またはnビット予測子(2モード予測子など)のいずれかを使用することができる。
局所予測は各予測について2つの順次テーブル検索を必要とするため、2モード予測よりも遅い。高速の実装では、フェッチされた命令ごとに別々の2モード・カウンタ・アレイを使用することになるため、第2のアレイのアクセスを命令フェッチと並行して進めることができる。各カウンタが単一の分岐の振る舞いを格納するように意図されているため、これらのアレイは冗長ではない。広域分岐予測子は、多くの分岐の振る舞いが、最近実行された他の分岐の履歴と強く相関されるという事実を利用する。一実装では、予測子は、実行されたあらゆる分岐の最近の履歴で更新された単一のシフト・レジスタを維持すること、および、この値を使用して予測子のテーブルにインデックス付けすること(たとえば、単一ビット予測子または2モード・カウンタ予測子)ができる。
gselect予測子は、数ビットの分岐命令アドレスと連結された最近の履歴で、予測子テーブルにインデックス付けする。gselectは、テーブル・サイズの小さな局所予測よりも良好な働きをし、局所予測は1KBよりも大きなテーブル・ストレージの場合に、わずかに良好なだけである。他の実装は、分岐命令アドレスと広域履歴とを連結するのではなく、それらのXORを取ることによって、単純な連結の代わりにXORに費やして、gselectよりも正確な予測を提供する。この予測子はgshareと呼ばれ、256バイトよりも大きなテーブルに対してはgselectよりもわずかに良好である。
gselectおよびgshareは、分岐ごとに単一のテーブル検索でよいため、局所予測よりも高速にすることが容易である。2モード予測と同様に、フェッチされた命令ごとに並行検索を実行することが可能であるため、テーブルを分割することが可能であり、その結果、テーブル検索は命令ロードと並列に進行することができる。Scott McFarlingは、1993年の「Combining Branch Predictors」、WRL Technical Note 36で、統合分岐予測を提案した。以下の説明では、こうした統合予測子を複数構成要素予測子と呼ぶ。統合分岐予測は、局所予測とほぼ同様に正確であり、広域予測とほぼ同様に高速である。
統合分岐予測は、たとえば局所2モード予測子、gshare予測子、および、分岐ごとに2モードまたはgshareのどちらを使用するかを選択するための2モード様予測子の、3つの予測子を並行して使用する。選択予測子は、使用する予測を選択するために使用される、単一ビット予測子、または飽和nビット・カウンタとすることが可能である。このケースでは、2モード予測とgshare予測が合致しない場合、どちらの結果を選択するかを決定するために必ずカウンタが更新される。他の統合分岐予測の方法は、たとえば3つの異なる分岐予測を有すること、およびそれらの結果を多数決によってマージすることである。gshareなどの予測子は、複数のテーブル・エントリを使用して任意の特定の分岐の振る舞いを追跡する。このエントリの増加によって、2つの分岐が同じテーブル・エントリにマッピングされることになる可能性(エイリアシングと呼ばれる状況)がさらに高くなり、それによって、それらの分岐に関する予測の正確さが損なわれることになる。複数の予測子が採用された場合、その各予測子が異なるエイリアシング・パターンを有し、少なくとも1つの予測子がエイリアシングを持たない確率が高くなるように、配置構成することが有利である。異なる予測子に対して異なるインデックス付け機能を備える統合予測子は、gskew予測子と呼ばれ、データおよび命令のキャッシュに使用されるスキュード・キャッシュ(skewed cache)に類似している。
パターン履歴テーブル内での破壊的エイリアシングを減らすための他の技法は、一致予測(agree predictor)である。分岐に関して比較的静的な予測を確立するために、おそらくは、2モード予測子または分岐命令内のヒント・ビットという方法が使用される。他の予測子(たとえばgskew予測子)も予測を実行するが、分岐/非分岐の予測ではなく、基本予測との一致/不一致を予測する。gskew予測子によってカバーされている分岐が、おそらく70%/30%の、1方向にバイアスをかけられたビットであるという傾向がある場合、gskewパターン履歴テーブルが不一致エントリよりも多くの一致エントリを有する傾向になるため、それらすべてのバイアスを位置合わせすることができることを意図する。これにより、最善なことに2つのエイリアシング分岐が予測履歴テーブル(PHT)内に反対の値を有することになる確率が減少する。
通常、統合予測子は一致予測子の基本として使用可能な予測子を有するため、一致予測子は統合予測子との組み合わせで良好に動作する。一致予測子は、基本予測子の予測を変化させる場合、1方向にバイアスをかけられていない分岐とはあまり良好に動作しない。したがって一致予測子は、1つが一致予測子であり、他方が非一致タイプの予測子である、3予測子方式の一部として、最も良い働きをする可能性がある。
ほとんどすべてのパイプライン化プロセッサは、現在の命令が実行される前に、フェッチするために次の命令のアドレスを推測しなければならないため、何らかの形の分岐予測を実行する。分岐予測技法を設計する際の主要なパラメータは、分岐予測エントリの数、および、単一ビット予測子または飽和nビット予測子などの分岐予測アルゴリズムである。これらの決定事項を、局所または広域の予測子について、多様な分岐予測方法に適用しなければならない。
従来技術では、多様な予測子の組み合わせが可能であったが、マイクロプロセッサ設計者にとっての主要な決定事項は、分岐予測アルゴリズムの選択であった。従来技術によれば、kビットの固定メモリ割り振りを使用する場合、設計者は、k個の単一ビット予測子、またはk/2個の2モード予測子、あるいはより一般的には、nビット・カウンタでのk/n個の予測子の、いずれかを有するように、各予測テーブルを実装することができた。これは、各予測についてさらに多くのビットを使用することによって単一予測の品質を向上させることができる予測子を提供すること、またはより単純な構造の予測子を提供することの間の、兼ね合いを示す。他の兼ね合いにおいて、設計者は待ち時間のより長い局所予測子、あるいは待ち時間のより短い2モードまたは単一ビットの予測子を選ぶことができる。
最良の予測品質は、異なるプログラムに対して異なるか、またはプログラム間で異なる可能性のある、作業負荷特有の特性などの、多様な要因に依存する。したがって、最先端技術では予測子の組み合わせは可能であるが、予測の最適化は、特定アプリケーションに対して、またはあるアプリケーション内の段階に対してさえも許可されていない。その代わりに、構造(トーナメント予測子などの)、広域または局所予測の使用、および1ビットまたは2モード予測子の選択を、設計時に確定しなければならず、実装者は特定構成をいったん選択する必要があり、この構成はすべてのアプリケーションに使用されるものであった。
1993年の「Combining Branch Predictors」、WRL Technical Note 36
予測子の設計は良好な平均パフォーマンスを可能にするが、従来技術では、特定アプリケーションに対して予測子を最適化することができなかった。
本明細書では、特定アプリケーションに対する構造またはアルゴリズムのうちの少なくとも1つを選択するために、アプリケーション実行時に構成可能な多形的分岐予測子を実装するための、方法および装置が開示されている。
多形的分岐の予測子および方法は、複数の分岐予測方法を含む。この方法は、選択的に分岐予測を実行することができる。現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの1つまたは複数を選択するように、ある選択メカニズムが構成される。
多形的分岐予測子は複数の分岐予測方法を含み、そのそれぞれの方法が分岐予測を選択的に実行することができる。現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの1つまたは複数を選択するように、ある選択メカニズムが構成される。
代替実施形態では、多形的分岐予測子設定はパフォーマンス・メトリックを含むことができる。選択メカニズムは、結果を提供するように協働するための、少なくとも2つの分岐予測方法を選択するように構成することができる。選択メカニズムは、あらかじめ指定されたように、またはランタイムの振る舞いの分析に基づいて、特定アプリケーションまたはアプリケーションのセットに対して1つまたは複数の分岐予測方法を選択することができる。
さらに他の実施形態では、選択メカニズムは、1つまたは複数の分岐予測方法を選択するために、コンパイラおよびランタイム構成要素のうちの1つから情報を受け取るように構成することができる。選択メカニズムは、アプリケーションの実行中に更新されるか、あるいは、論理機能、アドレス・ビット、スレッド指定子、およびいくつかのアドレスまたはスレッド・ビットのハッシュからの出力のうちの少なくとも1つに基づいて更新されることが可能である。
多形的分岐予測子は、アレイ内に格納された予測子エントリが、いくつかのおよびわずかな情報、アレイへの書き込み動作を可能にするための、1ビット書き込みイネーブル信号、または複数ビット書き込みイネーブル信号に関して構成される、予測子エントリのアレイをさらに備えることができる。
各分岐予測方法は、効率性のために論理要素が分岐予測方法間で共有される、論理要素を含むことができる。分岐予測方法間で共有される論理要素は、アレイ、予測子更新論理、およびアドレス生成論理のうちの少なくとも1つを含むことができる。多形的分岐予測子は、予測子エントリのアレイおよび分岐情報キューを含むことが可能であり、アレイから事前に読み取られた情報を書き直すために分岐情報キューからの情報が使用される。多形的分岐予測子は、統一テーブルと複数構成要素予測子のテーブルとの間で共有されるように構成された、アドレス指定論理を含むことができる。複数構成要素アレイのうちの1つを選択するためにアドレス・ビットまたはアドレス・ハッシングによって予測子エントリが選択される、予測子エントリの複数構成要素アレイを提供することができる。分岐予測方法を動的に選択するための方法は、動的に構成可能な複数の分岐予測方法を提供すること、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために動的設定に従って分岐予測方法のうちの1つまたは複数を選択すること、および、改善された予測結果を提供するために1つまたは複数の分岐予測方法の構成を更新することを含む。
これらおよび他の目的、特徴、および利点は、添付の図面に関連して読まれることになるそれらの例示的諸実施形態についての以下の詳細な説明から明らかとなろう。
次に本開示では、以下の図面に関連して、好ましい諸実施形態について詳細に説明する。
本発明の諸実施形態は、多形的分岐予測子の実装と、ソフトウェアによるそれらの使用および選択を対象とする。本発明の諸実施形態は、全体としてハードウェア実施形態の形、全体としてソフトウェア実施形態の形、または、ハードウェア要素およびソフトウェア要素の両方を含む実施形態の形を取ることができる。好ましい実施形態では、多形的予測子は集積回路として実装される。構成の選択は、マイクロコード、ファームウェア、常駐ソフトウェア、ハイパーバイザ、オペレーティング・システム、システム・ツール、アプリケーション・プログラムなどを含むが、これらに限定されない、ソフトウェア内で実施することができる。
さらに本発明は、コンピュータまたは任意の命令実行システムによって、あるいはそれらに関連して使用するための、プログラム・コードを提供する、コンピュータ使用可能媒体またはコンピュータ読み取り可能媒体からアクセス可能な、コンピュータ・プログラム製品の形を取ることができる。この説明では、コンピュータ使用可能またはコンピュータ読み取り可能媒体は、命令実行システム、装置、またはデバイスによって、あるいはそれらに関連して使用するためのプログラムを含む、格納する、通信する、伝播する、または移送することが可能な、任意の装置とすることができる。媒体は、電子、磁気、光、電磁、赤外線、または半導体の、システム(あるいは装置またはデバイス)、あるいは伝播媒体とすることができる。コンピュータ読み取り可能媒体の例には、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ(RAM)読み取り専用メモリ(ROM)、剛体磁気ディスク、および光ディスクが含まれる。現行の光ディスクの例には、コンパクト・ディスク−読み取り専用メモリ(CD−ROM)、コンパクト・ディスク−読み取り/書き込み(CD−R/W)、およびDVDが含まれる。
プログラム・コードを格納あるいは実行する、またはその両方を行うのに好適な、データ処理システムは、システム・バスを介してメモリ要素に直接または間接的に結合された、少なくとも1つのプロセッサを含むことができる。メモリ要素は、プログラム・コードの実際の実行中に使用されるローカル・メモリ、大容量ストレージ、および、実行中に大容量ストレージからコードが取り出される回数を減らすために少なくともいくつかのプログラム・コードの一時ストレージを提供するキャッシュ・メモリを、含むことができる。入力/出力またはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない)は、直接、または、介在するI/Oコントローラを通じて、システムに結合することができる。
データ処理システムを、介在する専用ネットワークまたは公衆ネットワークを通じて、他のデータ処理システムに、あるいはリモートのプリンタまたはストレージ・デバイスに、結合できるようにするために、ネットワーク・アダプタをシステムに結合することもできる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なネットワーク・アダプタ・タイプのほんの一例である。
本明細書で説明する多形的分岐予測子は、集積回路チップに関する設計の一部とすることができる。チップ設計は、グラフィカル・コンピュータ・プログラミング言語で作成すること、およびコンピュータ記憶媒体(ディスク、テープ、物理ハード・ドライブ、または、ストレージ・アクセス・ネットワークなどにある仮想ハード・ドライブなど)に格納することが可能である。設計者が、チップまたはチップを製造する際に使用されるフォトリソグラフィック・マスクを製造しない場合、設計者は、結果として生じる設計を、物理手段によって(たとえば設計を格納している記憶媒体のコピーを提供することによって)、または電子的に(たとえばインターネットを介して)、こうしたエンティティに直接または間接的に伝送する。次に、格納された設計は、通常、ウェハ上に形成されることになる当該チップ設計の複数のコピーを含む、フォトリソグラフィック・マスクを製造するために、適切なフォーマット(たとえばGDSII)に変換される。フォトリソグラフィック・マスクは、エッチングまたはその他の方法で処理されることになるウェハの領域(あるいはその上の層またはその両方)を画定するために使用される。
結果として生じる集積回路チップは、裸ダイ(bare die)などの、未加工ウェハの(すなわち、複数の未パッケージング・チップを有する単一のウェハのような)形で、または、パッケージングされた形で、製造者によって配布することが可能である。後者の場合、チップは、単一チップ・パッケージ(マザーボードまたは他の高水準キャリアに取り付けられたリード線を備えたプラスチック・キャリアなど)内に、あるいはマルチチップ・パッケージ(表面配線または埋め込み配線のいずれかまたは両方を有するセラミック・キャリアなど)内に、載置される。いずれの場合も、その後チップは、(a)マザーボードなどの中間製品または(b)最終製品の、いずれかの一部として、他のチップ、ディスクリート回路要素、あるいは他の信号処理デバイス、またはそれらすべてと、一体化される。最終製品は、玩具および他の低価格アプリケーションから、ディスプレイ、キーボードまたは他の入力デバイス、および中央処理装置を有する高度なコンピュータ製品にまで及ぶ、集積回路チップを含む任意の製品とすることができる。
次に同じ番号が同じかまたは同様の要素を表す諸図面を参照するが、最初に図1では、本発明を実装するプロセッサに従って分岐予測を実施することができる、例示的な高性能マイクロプロセッサ・パイプライン10が例示されている。命令は、命令フェッチ論理IFを使用して命令キャッシュICからフェッチされる。命令は、分岐予測論理BPによって処理されると同時に、デコーディング論理D0、D1、D2、D3に渡される。分岐予測は、予測された分岐に遭遇した場合、命令フェッチ論理IF内に維持される命令フェッチ・アドレスを更新することによって、フェッチ方向に変化をもたらす。
デコード済み命令(分岐命令および非分岐命令の両方)は、転送機構XFERを介してディスパッチ論理GDに転送される。ディスパッチされた個々の命令は、レジスタ・マップ・テーブルMPを使用して改名され、命令タイプに応じて発行論理ISS内に維持されている発行キュー内に入力され、適切な実行パイプラインBR、LD/ST、FX、およびFPに発行される。命令は、発行論理ISSによって、発行論理内に維持されている発行キューから互いに順不同(out of order)で発行される。
次に、計算パイプラインLD/ST、FX、およびFP内での実行を参照すると、命令は、1つまたは複数のレジスタ・ファイルRFへのレジスタ・ファイル・アクセスを実行し、実行段階に入る。LD/ST命令の場合、実行段階は第1のアドレス生成段階EAと、それに続くデータ・キャッシュ・アクセスおよびデータ・フォーマット化を含む。FX命令の場合、実行は、EXによって実装される論理機能を含む。FP命令の場合、実行は1つまたは複数の論理機能F1からF6を含む。次にBRパイプライン内の分岐命令の実行を参照すると、分岐命令は、レジスタ・ファイル・アクセス論理RF内の条件、分岐カウンタ、および分岐ターゲット・オペランドのうちの1つまたは複数を取り出すために、オプションで1つまたは複数のレジスタ・ファイル・アクセスを実行する。BRパイプライン内の分岐実行論理EXは、ターゲット・アドレスおよび分岐条件を計算し、予測されるターゲットおよび条件と比較する。たとえば、条件が不正確に計算されること、または誤ったターゲットが供給されることのいずれかなどの、誤予測が検出された場合、分岐リダイレクト処置が取られる。誤予測された命令は、フラッシュまたは他の適切なメカニズムを使用して、実行パイプラインから除去され、命令フェッチ論理IF内に維持されているフェッチ・アドレスが更新される。
すべての実行パイプラインは、計算された結果のライトバックWB、およびコミット・ステージCPへの転送XFERを実行することによって競い合う。
命令は、それらの順番どおりのコミット・ポイントで、すべての他の命令に対して順番どおりのコミット・ステージCPごとにコミットされる。割り込み条件、例外、および他の特殊な実行条件により、コミット・ステージごとにフラッシュおよびリフェッチが実行されることになり、命令フェッチ論理IF内の命令フェッチ・アドレスが、再実行あるいは割り込みまたは例外ハンドラ・アドレスのうちの1つに設定される。
図2および図3を参照すると、2つの例示的分岐予測子エントリ・タイプが示されている。各予測子は、分岐アドレス、gshare、gselect、または局所予測子の使用結果と関連する、特定の分岐に関連付けられている。選択および関連付けメカニズムの制御の下で予測子が取り出される場合、予測子の状態が識別され、この状態に基づいて予測が実行される。
次に、より具体的に図2を参照すると、単一ビット予測子202は、次に実行される予測に対応する2つの状態(分岐205および非分岐210)のうちの1つを表すために、単一情報ビットを使用している。予測子が分岐状態205にある場合、予測は、分岐が実行されることになる旨のインジケーションを戻す。予測子が非分岐状態210にある場合、予測は、分岐が実行されないことになる旨のインジケーションを戻す。例示的BRパイプラインでの分岐実行中に予測がチェックされた場合、誤予測により状態遷移が生じることになり、たとえば、分岐結果がラベル表示された状態遷移弧206によって示されるように、最新の分岐結果の方向を反映するように予測が変更されることになる。
図3を参照すると、次に実行される予測に対応する4つの状態のうちの1つを表すために2つの情報ビットを使用する、例示的2モード予測子が図示されている。4つの状態には、高い確率で分岐250、低い確率で分岐255、低い確率で分岐しない260、高い確率で分岐しない265が含まれる。予測子が2つの「分岐」状態250および255のうちの1つにある場合、予測は、分岐が実行されることになる旨のインジケーションを戻す。予測子が2つの「非分岐」状態のうちの1つにある場合、予測は、分岐が実行されないことになる旨のインジケーションを戻す。例示的BRパイプラインでの分岐実行中に予測がチェックされた場合、図3に従って状態遷移が実行される。具体的に言えば、正しい予測により、適切な方向の「高い確率」状態が選択されることになる。誤予測が検出された場合、予測子が以前に高い確率状態250または265にあった場合は、低い確率状態255または260への予測子の更新が実行されることになる。予測子が低い確率状態にあった場合、分岐結果がラベル表示された図3の遷移弧257によって示されるように、予測方向は状態255と260との間で変更されることになる。
図4を参照すると、たとえば局所予測子310、広域予測子320、および選択予測子330という、3つの例示的構成要素予測子を含む、例示的トーナメント予測子300が示される。選択メカニズム340は、選択予測子330の制御の下で、局所予測子310および広域予測子320のうちの1つによって実行された予測を選択する。
図5を参照すると、モード制御選択メカニズム430(たとえば、「1ビット/2ビット・モード」)の制御の下での多形的分岐予測子400の実装態様が、例示的に示される。制御選択メカニズム430は、予測アレイ410内で、n個のエントリを備えた1ビット予測子として予測子400を使用する第1のモード、または、数の削減されたエントリ(たとえば、n/2エントリ)を備えた2ビット予測子として予測子400を使用する第2のモードの、いずれかを採用する。
好ましい実施形態によれば、アレイ410は、入力405で(Id n)/2アドレス・ビットを使用して、アレイ410の読み出しのために2ビットを有する単一エントリをアドレス指定する。分岐予測子の一実装によれば、分岐予測ビット、たとえばアレイ410から取り出されたb0およびb1は、BR実行パイプラインによる使用のために、biq_b0およびbiq_b1として分岐情報キューBIQ 415に格納される。
予測は、第1の動作モードでは、取り出された2ビット情報に基づいて実行することが可能であり、2ビット予測子が実装され、選択要素420および425の制御の下で、それぞれ方向出力440および信用出力445として2ビットが提供される。選択要素420および425は、多形的構成情報430の制御の下で構成される。第2の動作モードでは、予測子400は単一ビット予測の提供側として動作する。選択メカニズム420は、多形的構成情報430の制御の下で、アレイ410によって提供された2つのビットのうちの1つを単一ビット方向予測出力440として選択する。
多形的予測子400の一実装によれば、以下のように、追加予測子アドレス・ビット(たとえばアドレス・ビット422)で選択が実装される。2ビット・モードの場合、またはアドレス422が0に等しい場合、方向440はb0になる。そうでない場合、方向440はb1に等しい。この条件を記述するために標準化されたVHDL表記法を使用するが、本明細書に含まれる教示の諸態様に対応して、記号名で条件および信号を記述することが可能であり、この論理動作は以下のように示すことができる。
D_Out≦bit0 when(mode=2bit OR address_bit=‘0’)else bit1
上式で、address_bitは、たとえば図面では「msb」と示される(選択可能な1つの可能ビットである、最上位ビットの場合)。
一実装によれば、オプションで信用ビットを単一ビット予測子の「低い確率」状態に再設定することによって、共通データフローにおける共有処理のために、単一ビット予測子を2モード予測子としてフォーマット化することができる。これには、信用445を、2ビット・モードの場合はb1に、そうでない場合は0にすることが含まれる可能性がある。この条件を記述するために標準化されたVHDL表記法を使用するが、本明細書に含まれる教示の諸態様に対応して、記号名による条件および信号の記述を可能にすることで、論理を以下のように示すことができる。
C_Out≦bit1 when(mode=2bit)else ‘0’
この実施形態例は例示的であり、制限的ではない。当業者であれば、単一ビット予測子を実装する場合(たとえば、アドレス・ビットの代わりにスレッド指定子を使用することができる)、他のメカニズムを使用して2つのビットのうちの1つを選択することが可能であり、最下位ビット、最上位ビット、いくつかのアドレス・ビットのハッシュ、スレッド・ビットなどを含むが、これらに限定されることのないような、多様な異なるアドレス・ビットを使用することができることを理解されよう。さらに当業者であれば、多形的分岐予測子をスレッドごとに維持し、1つのスレッドが、ある予測子を単一ビット予測子として使用する一方で、同時にアプリケーションを実行している他のスレッドは、ストレージ要素および論理を使用して2ビット予測を実行できることも理解されよう。
少なくとも1つの実施形態では、広い読み取りポートを備えた単一アレイから、または予測子アレイの複数の並列コピーを使用して、複数の分岐に関する複数の予測が同時に取り出される。それらの実施形態では、予測子ストレージから同時に取り出されるビット数を反映するように、アドレス・ビットの数を好適に適合あるいは削減する、またはその両方を実行することになる。他の実施形態では、異なるビット幅が選択され、例示的な1ビットおよび2ビット予測子以外のビット幅の、第1および第2の予測子のサポートを可能にする。さらに他の実施形態では、2ビットのそれぞれが別々のアレイから取り出され、予測子アドレス・ビットの制御の下で、アレイのうちの1つを遮断する(de-energize)ことを可能にするか、または、他のそうしたビットを使用して選択論理420を制御することができる。
図6および図7を参照すると、多形的予測メカニズムに従った、予測子ストレージ・アレイ510への書き込み動作を実行するための実装が例示的に示されている。図6では、2つのビット(b0およびb1)の同時ストレージをサポートし、各ビットについて別々の書き込み可能機構を有する、予測子ストレージ・アレイ510への予測子メモリ書き込みが、例示的に示されている。この機構によれば、ストレージ・アレイ510は、入力505での(Id n)アドレス・ビットを備えるアドレスと、第1のデータ・ビットb0および第2のデータ・ビットb1と、アドレスによって指定されたエントリの第1ビットb0および第2ビットb1の書き込みに対応する第1および第2の書き込みイネーブル信号であるwe_b0 511およびwe_b1 512とを、受信する。
この例示的実施形態によれば、選択メカニズム520を使用することによって、1ビット予測子を更新することができるか、または2ビット予測子を更新することができる。2ビット予測子の更新を実行するための第1の動作モードの場合、方向値530がビットb0に供給され、多形的構成情報520の制御の下に、信用値535がビットb1に供給される。加えて、ビットb0およびビットb1の両方を更新するために、書き込みイネーブル信号we_b0 511およびwe_b1 512の両方が選択される。単一ビット予測子の更新を実行するための第2の動作モードでは、選択論理515の制御の下で、方向値530がビットb0およびb1のうちの1つに、また、書き込みイネーブルwe_b0 511およびwe_b1 512のうちの1つに、書き込まれる。
例示的一実施形態では、ビットは(標準化されたVHDL表記法を使用して)以下のように計算される。
b0≦direction;
b1≦confidence when(mode=2bit)else
direction;we_b0≦2_bit_update when(mode=2bit)else
1_bit_update and address_bit=‘0’;we_b1
≦2_bit_update when(mode−2bit)else
1_bit_update and address_bit=‘1’;
図7を参照すると、2つのビットの同時ストレージをサポートし、両方のビットについて共通の書き込み可能機構を有する、予測子ストレージ・アレイ560への予測子メモリ書き込みが、例示的に示されている。この機構によれば、ストレージ・アレイ560は、入力505での(Id n)アドレス・ビットを備えるアドレスと、第1および第2のデータ・ビットb0およびb1と、アドレスによって指定されたエントリの両方のビットの書き込みに対応する単一の書き込みイネーブルwe 563とを、受信する。この例示的実施形態によれば、1ビット予測子を更新することができるか、または2ビット予測子を更新することができるかの、いずれかである。
2ビット予測子の更新を実行するための第1の動作モードでは、多形的構成情報570、ならびに選択(sel)信号によって制御された選択論理562および565の制御の下に、方向値530がビットb0に供給され、信用値535がビットb1に供給される。加えて、方向530および信用535の情報によってアドレス・エントリを更新するために、書き込みイネーブル信号we 563が選択される。単一ビット予測子の更新を実行するための第2の動作モードでは、選択論理562の制御の下で、方向値530がビットb0およびb1のうちの1つに書き込まれ、オリジナル・エントリ・コンテンツ(例示的分岐情報キューBIQ 415に格納されている情報)に関する情報(biq_b0およびbiq_b1)を使用して、選択子ビット(sel)ならびに論理562および565の制御の下で以前の情報と、多形的構成情報570とが、再格納される。例示的一実施形態では、ビットは、(標準化されたVHDL表記法を使用して)以下のように計算される。
b0≦direction when(mode=2bit OR address_bit=‘0’)else
biq_b0;b1≦confidence when(mode=2bit)else
direction when(address_bit=‘1’)else
biq_b1;we≦2_bit_update when(mode−2bit)else
1_bit_update;
当業者であれば、図7に示された実施形態が、アレイ560内のストレージ密度の上昇と、BIQ情報が取り出された時点と取り出された情報の再格納との間に発生した可能性のある予測子更新の上書きにつながる偽従属とを、交換するものであることを理解されよう。さらに当業者であれば、こうした偽従属の更新の影響を低減または消去するために、1つまたは複数の最近更新された値の連想バイパス(associative bypass)を提供できることも理解されよう。図6および図7は例示的であり、限定的ではない。当業者であれば、単一ビット予測子を実装する場合(たとえば、アドレス・ビットの代わりにスレッド指定子を使用することができる)、他のメカニズムを使用して2つのビットのうちの1つを選択することが可能であり、最下位ビット、最上位ビット、いくつかのアドレス・ビットのハッシュ、スレッド・ビットなどを含むが、これらに限定されることのないような、多様な異なるアドレス・ビットを使用することができることを理解されよう。さらに当業者であれば、多形的分岐予測子をスレッドごとに維持し、1つのスレッドが、ある予測子を単一ビット予測子として使用する一方で、同時にアプリケーションを実行している他のスレッドは、ストレージ要素および論理を使用して2ビット予測を実行できることも理解されよう。
図8を参照すると、多形的機能をサポートしても論理がそれほど複雑にならない、低オーバヘッドの多形的予測子の実装が示されている。したがって、すべての構成可能な多形的モードに対して、予測更新論理を実装するための共通論理機能を使用することが望ましい。本発明に従って単一ビットまたは2ビット(2モード)予測子の両方を更新するために使用される、新規な多形的予測子に従った分岐予測更新論理600が示されている。biq_b0およびbiq_b1などの分岐情報キューBIQ 415のコンテンツ、ならびに、図1に示されたような例示的マイクロプロセッサのBR実行パイプラインの論理EXによって計算された「分岐結果」が提供される。本発明によれば、多形的予測子更新は、更新済み方向情報650、更新済み信用情報655、および、予測子ストレージ内で1ビット(657)または2ビット(2モード)(656)のいずれの予測子が更新されるべきであるかの指示を提供する。
具体的に言えば、分岐予測を計算するための論理610は、図3の2モード予測子(2ビット予測子)の未修正機能に対応する。図8の実施形態によれば、第1の動作モードでは、図3に従って、多形的構成670の制御の下で2ビット予測更新656の結果が計算され、更新済み方向650、信用情報655、および、予測子ストレージ内の2ビット予測子を更新するかどうかの更新済み情報656が提供される。第2の動作モードでは、図2に従って、更新済み方向650、および予測子ストレージ内の2ビット予測子を更新するかどうかの更新情報657を提供する、単一ビット予測結果が提供される。
一実施形態例では、更新は(標準化されたVHDL表記法を使用して)以下のように計算される。
b0≦biq_b0 when(mode=2bit OR address_bit=‘0’)else
biq_b1;b1≦biq_b1 when(mode=2bit)else
‘0’;1_bit_update≦b0/=direction;2bit_update≦b0/−direction OR b1/=confidence
図8に示された論理および動作は制限的ではなく、本明細書の教示に従った他のタイプの予測子更新共有も実施可能である。幅、機能、および他の修正が使用可能である。当業者であれば、特定の技術に関して、および一般に知られる変形を使用して、論理コーン(cone)のサイズおよび深さなどを減少させるための、論理の最適化および変形を見つけるであろう。これらについては、話を簡単にするために省略している。
次に図9および図10を参照すると、予測子をそれらの組織構造に関して多形的に構成するための方法が示されている。これらの方法は例示的に示されており、単一レベルの統一予測子またはトーナメント予測子のいずれかを実装するように構成可能である。さらに各予測子710、720、730は、予測子エントリのストレージおよび動作に関して図5、図6、および図7に提示された教示に従って構成可能な場合がある。
図9を参照すると、大規模な単一の統一予測子またはトーナメント予測子のうちの1つであることを含む、多形的予測子に関する第1の例示的な読み取り方法および装置が、例示的に示されている。この例示的実施形態によれば、アドレス指定論理781からの多形的構成情報780を使用して、構成をトーナメント予測子または統一アレイ予測子として制御する。トーナメント予測子は、第1のサイズ(または第1の複数サイズ)の複数アレイを構築する。単一の大規模な統一アレイは、より多数のエントリを備えた単一予測子に対応する。
第1の動作モードによれば、例示的実施形態は、選択子740に対して選択ソースを選択する構成情報780の制御の下で、トーナメント予測子として選択子750の制御の下で動作する。選択論理740は、選択予測子730の制御の下で、例示的構成要素予測子710および720の複数の予測のうちの1つを選択するように構成される。第2の動作モードによれば、例示的実施形態は、選択子740を使用して選択ソースを選択する構成情報780の制御の下で、単一の大規模な統一予測子として選択子750の制御の下で動作する。選択論理740は、アドレス・ビット、ハッシュ済みアドレス・ビット、スレッド・ビット、または他の適切なアドレス指定手段のうちの1つを含むことができる、入力755の制御の下で、複数のサブアレイの結果のうちの1つを選択するように構成される。
次に図10を参照すると、大規模な単一の統一予測子またはトーナメント予測子のうちの1つであることに関して、多形的予測子の第2の例示的読み取り方法および装置が示されている。この例示的実施形態によれば、多形的構成情報780を使用して、第1のサイズ(または第1の複数サイズ)の複数のアレイ、または、より多数のエントリを備えた単一予測子に対応する単一の大規模な統一アレイを含む、トーナメント予測子として、構成を制御する。
第1の動作モードによれば、例示的実施形態はトーナメント予測子として動作する。選択子790は、2つの例示的構成要素予測子710および720のうちの1つから予測子を選択する。選択子796は、構成780の制御の下で、選択子790によって生成されたトーナメント予測の結果を選択する。第2の動作モードによれば、例示的実施形態は、ハッシュ論理794によって生成されたアドレスの制御の下で選択子792を使用する、単一の大規模な統一予測子として動作する。この例示的論理794では、1つおよび複数のアドレス・ビットのハッシュ機能を使用して、複数のアレイにまたがって使用量を分配する。具体的に言えば、アレイ数が2の累乗でない場合、構成要素アレイをより大規模な論理アレイのサブアレイとして使用する際に、構成要素アレイの不均衡な使用を生み出すことなくアドレス・ビットを直接使用することは不可能である。選択子796は、構成780の制御の下で、サブアレイ選択子792によって生成された予測の結果を選択する。
例示的論理では、1つおよび複数のアドレス・ビットのハッシュ機能794を使用して、複数のアレイにまたがって使用量を分配する。当業者であれば、本発明に従ってサブアレイを選択する際に使用可能な、たとえば多様な選択ソースを使用すること、ビット文字列を連結すること、多様なビットの論理機能を使用することなどの、サブアレイを選択する代替方法が使用可能であることを理解されよう。
さらに他の実施形態では、本発明の範囲内で、第1の動作モードでは、たとえば単一ビット予測子エントリを使用する複数構成要素予測子として、および、第2の動作モードでは、複数ビット予測子エントリ(たとえば2モード予測子)を使用する単一の統一予測子として、動作する予測子を表すために、第1の構成要素テーブルを使用して、第1のビット(方向予測ビットなど)および第2のビット(信用(confidence)ビットなど)が生成される。当業者であれば、本明細書の教示の範囲に基づき、他の構成の機会は、n個の構成要素テーブルを備えた第1のトーナメント予測子を、k<nのk個の構成要素テーブルを備えた予測子に再構成することであり、ここで、当該k個の構成要素テーブルのうちの少なくとも1つが、n個の構成要素テーブルからの少なくとも2つのアレイの組み合わせに対応することを理解されよう。構成要素テーブルは、当分野で知られている。
複数構成要素テーブル予測子の例示的構成におけるトーナメント予測子の使用は例示的であり、限定的ではない。さらに当業者であれば、クロック・ゲーティング(clock gating)論理のタイミング制約に従って、構成要素アレイが選択子によって選択されない場合、構成要素アレイのうちの1つまたは複数で選択的クロック・ゲーティングが実行可能であることを理解されよう。
次に図11を参照すると、図9および図10における多形的読み取り論理に対応する、複数構成要素予測子(例示的トーナメント予測子など)または単一の統一予測子のいずれかとしての構成が可能な、多形的予測子に関する予測子更新論理850が示される。予測子850は、3つの構成要素予測子テーブル810、820、および830が含まれる。
第1の動作モードでは、多形的構成780の制御の下で、複数構成要素予測子に関する更新仕様に従って、複数構成要素予測子850の1つまたは複数の構成要素予測子が更新される。(局所予測子アレイの例示的使用において)第1の予測子アレイ810に対して更新イネーブルが示された場合、選択子814によって多形的構成780の制御の下で局所予測更新(局所更新)が選択され、選択子812によって局所予測更新イネーブル(局所更新イネーブル)が選択される。(広域予測子アレイの例示的使用において)第2の予測子アレイ820に対して更新イネーブルが示された場合、選択子824によって多形的構成780の制御の下で広域予測更新(広域更新)が選択され、選択子822によって広域予測更新イネーブル(広域更新イネーブル)が選択される。(選択予測子アレイの例示的使用において)第3の予測子アレイ820に対して更新イネーブルが示された場合、選択子834によって多形的構成780の制御の下で選択予測更新(選択更新)が選択され、選択子832によって選択予測更新イネーブル(選択更新イネーブル)が選択される。
第2の動作モードでは、単一の大規模アレイとして使用するために、少なくとも2つのアレイ810、820、および830が統合される。好ましい実施形態によれば、大規模論理予測子アレイにおけるエントリの更新のために少なくとも1つのサブアレイを選択するために、1つまたは複数のハッシュ機能840が(たとえば図10のハッシュ機能794に対応して)計算され、大規模な予測子構成のために更新イネーブルと統合される。
第2の動作モードでは、選択子814、824、834が、多形的構成情報780の制御の下で、共通大規模予測子エントリ更新から予測子更新を選択し、選択子812、822、832が、生成されたハッシュ関数および更新イネーブルに基づいて、アレイ書き込みイネーブル情報を選択する。当業者であれば、ハッシュ・ブロック内のアドレス・ビットに加えて、たとえばスレッド・ビットなどの追加の情報が使用可能であることを理解されよう。さらに本発明の範囲内で、ビットのハッシュの代わりに(および図9の読み取り実施形態に従って)ビットのサブセットを使用することができる。
図12を参照すると、図9、図10、および図11に従った多形的予測子の第1および第2の動作モードに関して、共有更新アドレス計算論理を有する例示的実施形態が例示的に示されている。この実施形態によれば、更新アドレス計算論理950を使用して、追加のアドレス・ビットを提供することにより、第1の動作モードにおける複数構成要素予測子内の広域予測子920に関するアドレス、または、単一のより大規模なアレイを備える統一予測子に関する更新アドレスの、両方が計算される。(一般に、図11のハッシュ機能840に対応する)ハッシュ論理940の制御の下で、単一の論理アレイ予測子の1つまたは複数のサブアレイ910、920、930を選択するためにも、アドレス・ビットが使用される。
効率性のために分岐予測方法間で論理要素が共有されるように、多形的分岐予測子は論理要素(たとえば更新アドレス論理950)を含むことができる。他の論理要素または構成要素も、分岐予測方法間で共有可能であり、アレイ、予測子更新論理、アドレス生成論理などのうちの少なくとも1つを含むことができる。
次に図13および図14を具体的に参照すると、アプリケーション・パフォーマンスを最適化するために多形的予測子を使用するための方法が例示的に示されている。好ましい実施形態によれば、この機能はソフトウェア内に実装されるが、他の諸実施形態も可能である。
図13をより具体的に参照すると、方法1000は好ましくはコンパイラ内に実装される。この方法はステップ1010で開始される。ステップ1010では、多形的予測子にとって好ましい構成が導出される。ステップ1020では、多形的予測子の好ましい構成を選択するためにコードが生成される。その後、この方法は終了する。一実施形態によれば、この方法は、アプリケーション全体にとって好ましい構成を選択するために、コンパイラによって1回実行される。他の実施形態によれば、この選択は、たとえば異なるプログラム段階に対して複数回実行される。選択は、コマンド行フラグ、アプリケーション・コードに挿入されたプラグマ(pragma)または他のコンパイラ指示、プログラム・プロパティのコンパイラ・ヒューリスティックスまたはモデリング、およびプロファイル指示フィードバックなどの、ユーザ指定の指示に基づくものとすることができる。
図14を参照すると、方法1050は好ましくはアプリケーション・ライブラリ、動的コンパイラ、連続プログラム最適化モジュール、ファームウェア、またはマイクロコード内に実装され、プログラム・ランタイムに実行される。方法はステップ1060で開始される。ステップ1060では、アプリケーション・ランタイムの振る舞いが分析される。構成の試行および測定などを含むが、これらに限定されることのない、多様なプログラム分析技法が知られており、本発明に関して使用可能である。ステップ1070では、アプリケーション分析(またはアプリケーション段階分析)に基づいて好ましい構成が選択される。その後、この方法は終了する。
一実施形態によれば、方法1050は、アプリケーション全体にとって好ましい構成を選択するために1回実行することができる。他の実施形態によれば、この選択はアプリケーション・ランタイム中に、たとえば異なるプログラム段階に対して、複数回実行される。再実行は、固定間隔で、または(パフォーマンス監視インフラストラクチャによって示されるなどの)主要アプリケーション・メトリックが変更された際に、アプリケーションによって(たとえば、動的構成選択機能を呼び出すことによって)示された明示的ポイントで、行うことができる。動的アプリケーション分析は、好ましくは、分岐実行および予測情報などのアプリケーション統計を提供する、パフォーマンス監視インフラストラクチャのサポートを使用して実行される。
次に、図15を参照すると、オペレーティング・システム・コンテキストまたはハイパーバイザ・パーティションの間の切り替えを実行するための方法1100が示されている。方法1100はステップ1110で開始される。ステップ1110では、アプリケーションまたは以前にスケジューリングされたパーティションに関する構成が格納される。一実施形態では、プロセスまたはパーティションがスケジューリング解除された場合に構成が格納される。代替実施形態では、この構成情報は、プロセスまたはパーティション特有の構造内で更新または維持される場合に、格納される。ステップ1120では、次のプロセスまたはパーティションに関する構成情報が、ステップ1110の以前に格納された情報から読み取られ、多形的構成が更新される。方法は終了する。
本明細書では、特定のアプリケーションに対して構造またはアルゴリズムのうちの少なくとも1つを選択するために、アプリケーションの実行時に構成可能な、多形的分岐予測子を実装するための方法および装置が開示されている。多形的分岐予測子は、複数の分岐予測方法を含む。この方法は、分岐予測を選択的に実行することができる。選択メカニズムは、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの1つまたは複数を選択するように構成される。各方法は、分岐予測を選択的に実行できるものとすることができる。選択メカニズムは、現行のタスクに従って動作時に分岐予測子のパフォーマンスを最適化するために、動的設定に従って分岐予測方法のうちの1つまたは複数の選択するように構成される。
多形的分岐予測子(例示的であり、限定的でないことが意図される)を実装するための方法および装置に関する好ましい諸実施形態について説明してきたが、当業者であれば、前述の教示に鑑みて修正および変形が実行できることに留意されたい。したがって、添付の特許請求の範囲によって概説された本発明の範囲および趣旨の中で開示された特定の諸実施形態において、変更が可能であることを理解されよう。以上、本発明の諸態様について、特許法が要求する細部および詳細事項と共に説明してきたが、特許証によって保護された請求および所望の内容は、添付の特許請求の範囲に記載されている。
本発明に従って使用可能な、分岐予測子を含む例示的パイプラインを示す図である。 単一ビット予測子状態を示す図である。 2モード予測子状態を示す図である。 例示的トーナメント予測子を示す図である。 例示的実施形態に従った、分岐情報キューを備えた単一ビットおよび2モードの分岐予測子モードを使用する、多形的予測子への読み取りアクセスを示す図である。 例示的実施形態に従った、単一ストレージ・ビットの書き込み更新機能を有するメモリ・アレイを使用した、多形的1ビット/2モード予測子を更新するための実装を示す図である。 例示的実施形態に従った、2重ビットを備えるエントリの書き込み更新機能を有するメモリ・アレイを使用した、多形的1ビット/2モード予測子を更新するための実装を示す図である。 例示的実施形態に従った、単一ビットおよびnビットの予測を実行するために予測子を共有するための回路を示す概略図である。 例示的実施形態に従った、単一の統一大規模予測子またはトーナメント予測子のいずれかを実装するように構成可能な、多形的分岐予測子のための読み取りパスを示す概略図である。 例示的実施形態に従った、単一の統一大規模予測子またはトーナメント予測子のいずれかを実装するように構成可能な、多形的分岐予測子のための他の読み取りパスを示す概略図である。 他の例示的実施形態に従った、トーナメントまたは統一アレイとして構成可能な例示的多形的予測子のための書き込み更新パスを示す概略図である。 例示的実施形態に従った、トーナメント/非トーナメント分岐予測に関する更新論理の共有を示す概略図である。 例示的実施形態に従った、分岐予測を構成するための構成コードを生成するコンパイラを示すブロック/流れ図である。 他の例示的実施形態に従った、たとえば連続プロファイリング最適化を使用する、分岐予測方法の動的選択を示すブロック/流れ図である。 例示的実施形態に従った、オペレーティング・システム(OS)スケジューリング(またはハイパーバイザ・パーティション・スケジューリング)を示すブロック/流れ図である。

Claims (8)

  1. 1ビット予測子を分岐予測に用いる第1の予測モードと、2ビット予測子を分岐予測に用いる第2の予測モードのいずれにも利用することができる多形的分岐予測子であって、 ストレージ・アレイと、第1の選択要素と、第2の選択要素を備え、
    第1の予測モードの際には、
    ストレージ・アレイは、ストレージ・アレイ内の1ビット予測子の位置を特定するのに要するアドレス・ビット群のうちの所定の1アドレス・ビット以外のアドレス・ビット群が入力され、入力されたアドレス・ビット群に応じてビットb0とビットb1を出力するものであり、
    第1の選択要素は、ストレージ・アレイ内の1ビット予測子の位置を特定するのに要するアドレス・ビット群のうちの所定の1アドレス・ビットの値に応じて、ビットb0とビットb1のいずれか一方を1ビット予測子として出力するものであり、
    第2の予測モードの際には、
    ストレージ・アレイは、ストレージ・アレイ内の2ビット予測子の位置を特定するのに要するアドレス・ビット群が入力され、入力されたアドレス・ビット群に応じてビットb0とビットb1を出力するものであり、
    第1の選択要素は、ビットb0を2ビット予測子のうちの一方のビットとして出力するものであり、
    第2の選択要素は、ビットb1を2ビット予測子のうちの他方のビットとして出力するものである、
    多形的分岐予測子。
  2. 動作時に分岐予測子の性能を最適化するための動的設定に応じて、予測モードを動的に選択するためのメカニズムをさらに備える、
    請求項1に記載の多形的分岐予測子。
  3. メカニズムは、あらかじめ指定されたように、特定アプリケーションに対して、予測モードを選択するものである、
    請求項2に記載の多形的分岐予測子。
  4. メカニズムは、アプリケーションまたはパーティションについて、以前にスケジューリングされた際に格納されていた構成情報に基づいて、予測モードを選択するものである、
    請求項2に記載の多形的分岐予測子。
  5. メカニズムは、ランタイムの振る舞いの分析に基づいて、予測モードを選択するものである、
    請求項2に記載の多形的分岐予測子。
  6. メカニズムは、コンパイラまたはランタイム・コンポーネントからの情報に基づいて、予測モードを選択するものである、
    請求項2に記載の多形的分岐予測子。
  7. メカニズムは、アプリケーションのランタイム中に、予測モードの選択を更新するものである、
    請求項2に記載の多形的分岐予測子。
  8. ストレージ・アレイから出力されたビットb0とビットb1を格納する分岐情報キューをさらに備え、
    分岐情報キューから出力される情報は、ストレージ・アレイから前もって読み取られた情報を書き直すために使用されるものであり、
    書き直される情報は、ストレージ・アレイからビットb0及びビットb1として分岐情報キューに入力されてから、ストレージ・アレイに書き直されるまで、分岐情報キューにおいて変更されないように維持されるものである、
    請求項1乃至7のいずれかに記載の多形的分岐予測子。
JP2009510049A 2006-05-04 2007-05-02 多形的分岐予測子を実装するための方法および装置 Expired - Fee Related JP5186488B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/417,847 US7523298B2 (en) 2006-05-04 2006-05-04 Polymorphic branch predictor and method with selectable mode of prediction
US11/417,847 2006-05-04
PCT/US2007/068027 WO2007131032A2 (en) 2006-05-04 2007-05-02 Methods and apparatus for implementing polymorphic branch predictors

Publications (2)

Publication Number Publication Date
JP2009535750A JP2009535750A (ja) 2009-10-01
JP5186488B2 true JP5186488B2 (ja) 2013-04-17

Family

ID=38668509

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009510049A Expired - Fee Related JP5186488B2 (ja) 2006-05-04 2007-05-02 多形的分岐予測子を実装するための方法および装置

Country Status (5)

Country Link
US (2) US7523298B2 (ja)
EP (1) EP2024815B1 (ja)
JP (1) JP5186488B2 (ja)
CN (1) CN101427213B (ja)
WO (1) WO2007131032A2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080209190A1 (en) * 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
US7962724B1 (en) * 2007-09-28 2011-06-14 Oracle America, Inc. Branch loop performance enhancement
US20100332812A1 (en) * 2009-06-24 2010-12-30 Doug Burger Method, system and computer-accessible medium for low-power branch prediction
US8612731B2 (en) 2009-11-06 2013-12-17 International Business Machines Corporation Branch target buffer for emulation environments
US9122486B2 (en) * 2010-11-08 2015-09-01 Qualcomm Incorporated Bimodal branch predictor encoded in a branch instruction
US9778934B2 (en) * 2010-11-16 2017-10-03 Advanced Micro Devices, Inc. Power efficient pattern history table fetch in branch predictor
US9495136B2 (en) * 2011-01-28 2016-11-15 International Business Machines Corporation Using aliasing information for dynamic binary optimization
WO2012127589A1 (ja) * 2011-03-18 2012-09-27 富士通株式会社 マルチコアプロセッサシステム、および分岐予測方法
WO2012127666A1 (ja) * 2011-03-23 2012-09-27 富士通株式会社 演算処理装置、情報処理装置及び演算処理方法
US8959320B2 (en) * 2011-12-07 2015-02-17 Apple Inc. Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US9032191B2 (en) * 2012-01-23 2015-05-12 International Business Machines Corporation Virtualization support for branch prediction logic enable / disable at hypervisor and guest operating system levels
CN102608518A (zh) * 2012-02-29 2012-07-25 华为技术有限公司 一种芯片测试方法及装置
US20130283023A1 (en) * 2012-04-18 2013-10-24 Qualcomm Incorporated Bimodal Compare Predictor Encoded In Each Compare Instruction
US9229723B2 (en) * 2012-06-11 2016-01-05 International Business Machines Corporation Global weak pattern history table filtering
US9395984B2 (en) * 2012-09-12 2016-07-19 Qualcomm Incorporated Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods
US9389868B2 (en) 2012-11-01 2016-07-12 International Business Machines Corporation Confidence-driven selective predication of processor instructions
US10795683B2 (en) 2014-06-11 2020-10-06 International Business Machines Corporation Predicting indirect branches using problem branch filtering and pattern cache
CN108062236A (zh) * 2016-11-07 2018-05-22 杭州华为数字技术有限公司 一种软硬件协同分支指令预测方法及装置
US10747539B1 (en) 2016-11-14 2020-08-18 Apple Inc. Scan-on-fill next fetch target prediction
CN107688468B (zh) * 2016-12-23 2020-05-15 北京国睿中数科技股份有限公司 推测执行处理器中分支指令与分支预测功能的验证方法
US10642621B2 (en) * 2017-12-29 2020-05-05 Intel Corporation System, apparatus and method for controlling allocations into a branch prediction circuit of a processor
US10740104B2 (en) * 2018-08-16 2020-08-11 International Business Machines Corporation Tagging target branch predictors with context with index modification and late stop fetch on tag mismatch
US11086629B2 (en) * 2018-11-09 2021-08-10 Arm Limited Misprediction of predicted taken branches in a data processing apparatus
US11163577B2 (en) 2018-11-26 2021-11-02 International Business Machines Corporation Selectively supporting static branch prediction settings only in association with processor-designated types of instructions
US10963260B2 (en) * 2019-01-18 2021-03-30 Arm Limited Branch predictor
CN110348250B (zh) * 2019-06-26 2020-12-29 中国科学院信息工程研究所 多链式哈希栈的硬件开销优化方法及系统
CN111459549B (zh) * 2020-04-07 2022-11-01 上海兆芯集成电路有限公司 具有高度领先分支预测器的微处理器
US11803386B2 (en) * 2021-09-16 2023-10-31 International Business Machines Corporation Neuron cache-based hardware branch prediction
US20230315469A1 (en) * 2022-03-30 2023-10-05 Advanced Micro Devices, Inc. Hybrid parallelized tagged geometric (tage) branch prediction

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
JPH04245334A (ja) * 1991-01-31 1992-09-01 Hitachi Ltd 情報処理装置の命令先読み制御方式
US5758142A (en) * 1994-05-31 1998-05-26 Digital Equipment Corporation Trainable apparatus for predicting instruction outcomes in pipelined processors
JPH10240526A (ja) * 1997-02-27 1998-09-11 Fujitsu Ltd 分岐予測装置
US6550004B1 (en) * 1999-11-05 2003-04-15 Ip-First, Llc Hybrid branch predictor with improved selector table update mechanism
US7203825B2 (en) * 2001-10-03 2007-04-10 Intel Corporation Sharing information to reduce redundancy in hybrid branch prediction
US7120784B2 (en) * 2003-04-28 2006-10-10 International Business Machines Corporation Thread-specific branch prediction by logically splitting branch history tables and predicted target address cache in a simultaneous multithreading processing environment
KR100785723B1 (ko) * 2004-04-21 2007-12-18 후지쯔 가부시끼가이샤 분기 예측 장치, 그 방법 및 프로세서
KR100630702B1 (ko) * 2004-10-05 2006-10-02 삼성전자주식회사 명령어 캐쉬와 명령어 변환 참조 버퍼의 제어기, 및 그제어방법

Also Published As

Publication number Publication date
CN101427213B (zh) 2010-08-25
EP2024815B1 (en) 2012-11-28
EP2024815A4 (en) 2009-07-22
WO2007131032A2 (en) 2007-11-15
CN101427213A (zh) 2009-05-06
US20080005542A1 (en) 2008-01-03
US7523298B2 (en) 2009-04-21
EP2024815A2 (en) 2009-02-18
US20080307209A1 (en) 2008-12-11
WO2007131032B1 (en) 2008-10-30
JP2009535750A (ja) 2009-10-01
WO2007131032A3 (en) 2008-09-18

Similar Documents

Publication Publication Date Title
JP5186488B2 (ja) 多形的分岐予測子を実装するための方法および装置
US8166281B2 (en) Implementing instruction set architectures with non-contiguous register file specifiers
US8918623B2 (en) Implementing instruction set architectures with non-contiguous register file specifiers
US8572358B2 (en) Meta predictor restoration upon detecting misprediction
US10664280B2 (en) Fetch ahead branch target buffer
EP2864868A1 (en) Methods and apparatus to extend software branch target hints
JP2004326752A (ja) 同時マルチスレッド化プロセッサ
US11074080B2 (en) Apparatus and branch prediction circuitry having first and second branch prediction schemes, and method
KR100986375B1 (ko) 피연산자의 빠른 조건부 선택
US11294684B2 (en) Indirect branch predictor for dynamic indirect branches
US7130991B1 (en) Method and apparatus for loop detection utilizing multiple loop counters and a branch promotion scheme
TWI788912B (zh) 可調整分支預測方法和微處理器
US11379240B2 (en) Indirect branch predictor based on register operands
CN113515311A (zh) 微处理器和预取指调整方法
US20180267803A1 (en) Computer Processor Employing Phases of Operations Contained in Wide Instructions
TWI786691B (zh) 微處理器和分支處理方法
US10990403B1 (en) Predicting an outcome of an instruction following a flush
US11157284B1 (en) Predicting an outcome of an instruction following a flush
TW202344988A (zh) 用於最佳化迴路重放性能的處理器中捕獲迴路的最佳化
US20160239312A1 (en) Computer Processor Employing Phases of Operations Contained in Wide Instructions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120918

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121017

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121120

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130121

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160125

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees