(57)【要約】プロセッサ・パイプラインは、プログラム順序を外れる命令より前の上位部分と、上位部分より後の１つ又は複数の下位部分とにセグメント化される。分岐命令が誤予測されたことが検出されると、上位パイプラインはフラッシュされ、正しい分岐ターゲット・アドレスから命令をフェッチする際における遅延を最小化する。下位パイプラインは、誤予測された分岐命令がコンファームし、その時点でコミットされていない命令全てが下位パイプラインからフラッシュされるまで実行を継続することができる。誤予測された分岐識別子を追加することによって、既存の例外パイプライン・フラッシュ・メカニズムが用いられ、下位パイプラインをフラッシュする複雑さ及びハードウェア・コストを低減することができる。
2010517183.tif 000002
【特許請求の範囲】
【請求項１】
順不同実行を可能とするパイプライン化されたプロセッサにおいて命令を実行する方法であって、
分岐命令誤予測を検出すると、命令がプログラム順序を外れる時点より前に、上位パイプラインをフラッシュすることと、
前記誤予測された分岐命令を実行のためにコミットすると、前記命令がプログラム順序を外れる時点より後に、コミットされていない命令全てを下位パイプラインからフラッシュすることと
を備えた方法。
【請求項２】
前記誤予測された分岐命令をコンファームすると、前記誤予測された分岐命令を、命令順序付けメカニズムにおけるように示すことを更に備えた請求項１に記載の方法。
【請求項３】
前記コミットされていない命令全てを下位パイプラインからフラッシュすることは、前記誤予測された分岐命令が、コミットされた最も新しい命令である場合、前記命令順序付けメカニズムにおける誤予測された分岐命令インジケータに応答して命令をフラッシュすることを備えた請求項２に記載の方法。
【請求項４】
前記プロセッサは２つ以上のパイプラインを含み、分岐命令を実行する各パイプラインは、前記命令順序付けメカニズムにおける誤予測された分岐命令インジケータを設定するように動作可能なコンファーム・ステージを含む請求項２に記載の方法。
【請求項５】
前記上位パイプラインのフラッシュ後、正しい分岐ターゲット・アドレスから命令をフェッチすることを備えた請求項１に記載の方法。
【請求項６】
前記上位パイプラインのフラッシュ後、コミットされていない命令全てが前記下位パイプラインからフラッシュされるまで、命令がプログラム順序を外れる時点以前の上位パイプラインを停止することを更に備えた請求項５に記載の方法。
【請求項７】
推測的に割り当てられた前記リソースが、レジスタ再命名リソースを含む請求項６に記載の方法。
【請求項８】
コミットされていない命令を前記下位パイプラインからフラッシュすると、コミットされていない命令に推測的に割り当てられたリソースの割当を解除する請求項１に記載の方法。
【請求項９】
コミットされていない命令に推測的に割り当てられたリソースの割当を解除することは、コミット済レジスタ再命名テーブルの内容を、推測的レジスタ再命名テーブルにコピーすることを含む請求項８に記載の方法。
【請求項１０】
制御論理と、
命令がプログラム順序を外れることができるポイントより前の上位パイプラインと、前記命令が順序を外れることができるポイントより後の１つ又は複数の下位パイプラインとを備えた、セグメント化された命令実行パイプラインとを備え、
前記制御論理は、誤予測された分岐を検出すると、前記上位パイプラインから全ての命令をフラッシュするように動作可能であり、更に、前記誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てを前記下位パイプラインからフラッシュするように動作可能であるプロセッサ。
【請求項１１】
前記制御論理は更に、前記上位パイプラインをフラッシュした後のサイクルにおいて、正しい分岐ターゲット・アドレスから命令をフェッチするように動作可能である請求項１０に記載のプロセッサ。
【請求項１２】
前記制御論理は更に、前記上位パイプラインのフラッシュ後、前記上位パイプラインの終点に保留を設置し、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記保留を除去するように動作可能である請求項１１に記載のプロセッサ。
【請求項１３】
前記制御論理は、コンファーム及びコミットされた状態の命令をトラックするように動作可能な命令順序付けメカニズムであり、前記誤予測された分岐命令が、コンファームされた最も新しい命令である場合、コミットされていない命令全てを前記下位パイプラインからフラッシュするように更に動作可能な命令順序付けメカニズムを含む請求項１０に記載のプロセッサ。
【請求項１４】
前記命令順序付けメカニズム内の各エントリは、関連付けられた命令が、誤予測された分岐命令であるかを示すインジケーションを含む。
【請求項１５】
分岐命令を実行する下位パイプラインの各々は、分岐命令が誤予測されたと判定されると、誤予測された分岐インジケーションを前記命令順序付けメカニズム内に設定するように動作可能なコンファーム状態を含む請求項１４に記載のプロセッサ。
【請求項１６】
汎用レジスタ（ＧＰＲ）論理識別子を物理レジスタに動的に関連付けるように動作可能なＧＰＲを更に備え、前記ＧＰＲは、
複数の物理レジスタと、
現在のＧＰＲ論理識別子全ての物理レジスタへのマッピングを含む推測的再命名テーブル（ＳＲＴ）と、
コミットされた命令のみについて、ＧＰＲ論理識別子の物理レジスタへのマッピングを含むコミット済再命名テーブル（ＣＲＴ）とを備え、
前記制御論理は、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記ＣＲＴの内容を前記ＳＲＴにコピーするように動作可能である請求項１０に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、パイプライン化されたプロセッサにおける分岐予測に関し、特に、性能を最大化し、誤予測された分岐命令を効率的に訂正するために、同じパイプラインの２つのセグメントを異なる時間に個々にフラッシュするシステム及び方法に関する。
【背景技術】
【０００２】
現代のプロセッサは、各々が複数の実行ステップを有する連続命令が、実行中オーバラップされる、パイプライン化されたアーキテクチャを用いる。最大性能のために、命令は、パイプラインを絶え間なくフローしなければならない。しかし、命令はしばしば、例えば命令間のデータ依存、メモリ・アクセスに関する遅延、十分なパイプライン・リソースを命令に割り当てることの不可能性等のような様々な理由によってパイプライン内でストール状態となる。パイプラインのストールを最小化し、それらを効率的に解決することが、改善されたプロセッサ性能を達成するための重要要件である。
【０００３】
現代の現実世界プログラムは、条件付分岐命令を含み、その実際の分岐挙動は、命令がパイプラインの深部で評価されるまで知られない。昨今のプロセッサは、条件付分岐命令の分岐挙動がパイプライン内で早期に予測され、分岐予測に基づいて、プロセッサが命令をフェッチしてそれを推測的に実行し、それらに推測的にパイプライン・リソースを割り当てる、様々な形式の分岐予測を用いる。実際の分岐挙動が決定されると、分岐が誤予測されていた場合、推測的にフェッチされた命令はパイプラインからフラッシュされなければならず、推測的に割り当てられたリソースは割当を解除され、分岐予測以前の状態に戻されなければならず、新たな命令が正しい分岐ターゲット・アドレスからフェッチされなければならない。
【０００４】
一方では、正しい命令がフェッチされ、パイプライン内にランチされ、分岐誤予測によって生じる遅延が最小化されるように、パイプラインは理想的には、誤予測を検出すると直ちにフラッシュされるべきである。他方では、誤った分岐経路からフェッチされた命令は、推測的実行の様々なステージにあり、様々なプロセッサ・リソースを推測的に割り当てられていることがある。リソースを分岐予測前の状態に復元するために、これらの割当を直ちに「解く」ことは困難であり、多くのプロセッサ・サイクルをもたらし、及び／又は、推測的に割り当てられたリソースの多くの複写コピーを必要としうる。パイプラインを直ちにフラッシュすることによって生じるペナルティは、例えばスーパースカラ・プロセッサのような、順不同命令実行をサポートするプロセッサにおいて、関連する命令エイジ（instruction age）のトラッキングという更なる試練によって更に悪化する。この命令エイジのトラッキングは、（プログラム順序において）誤予測された分岐命令より後にフェッチされた命令のみがフラッシュされることと、（プログラム順序において）分岐命令より前の命令は、それらがパイプライン内で分岐命令より後であっても全て実行されることとを確実にする必要がある。
【発明の概要】
【０００５】
分岐誤予測を判定すると、プロセッサは、（理想的には）数サイクルしか通常の実行を継続しないことによって、誤ってフェッチされ推測的に実行された命令を自身のパイプラインからフラッシュし、例外のイベントにおいてパイプラインのフラッシュを処理する既存のハードウェアを用いるタスクを容易にすることができる。この処理は、分岐誤予測に応じてパイプラインをフラッシュすることの複雑さ及びコストを劇的に低減することができる。しかし、それによって生じる更なる遅延は、パイプラインを直ちにフラッシュし、正しい分岐ターゲット・アドレスから迅速に命令をフェッチするという目標に反する。
【０００６】
１つ又は複数の実施形態によると、（プログラム順序を外れる命令より前の）上位パイプラインは、分岐命令が誤予測されたことを検出すると直ちにフラッシュされ、正しい分岐ターゲット・アドレスから命令を直ちにフェッチすることを可能とする。パイプラインの下位部分の各々は、誤予測された分岐命令がコンファームするまで実行を継続することができ、その時点で、コミットされていない命令全てが下位パイプラインからフラッシュされる。既存の例外パイプライン・フラッシュ・メカニズムは、誤予測された分岐識別子を追加することによって、下位パイプラインをフラッシュすることの複雑さ及びハードウェア・コストを低減することができる。
【０００７】
１つの実施形態は、順不同実行を可能とする、パイプライン化されたプロセッサにおいて命令を実行する方法に関する。分岐誤予測を検出すると、上位パイプライン、すなわち、命令がプログラム順序を外れることができるポイントより前の部分のパイプラインがフラッシュされる。誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てが、下位パイプライン、すなわち、命令がプログラム順序を外れることができるポイントより後の部分のパイプラインからフラッシュされる。
【０００８】
別の実施形態は、プロセッサに関する。このプロセッサは、命令が順不同となりうるポイントより前の上位パイプライン、及び命令が順不同となりうるポイントを越えた１つ又は複数の下位パイプラインを備えたセグメント化命令実行パイプラインと、制御論理とを含む。制御論理は、誤予測された分岐を検出すると、上位パイプラインから全ての命令をフラッシュするように動作可能であり、更に、誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てを下位パイプラインからフラッシュするように動作可能である。
【図面の簡単な説明】
【０００９】
【図１】図１は、分岐誤予測のためにフラッシュするセグメント化されたパイプラインを有する、パイプライン化されたスーパースカラ・プロセッサの１つの実施形態の機能ブロック図である。
【図２】図２は、図１のプロセッサにおける命令実行の方法のフロー図である。
【発明を実施する形態】
【００１０】
図１は、分岐誤予測のためにフラッシュするセグメント化されたパイプラインを有するプロセッサ１０の機能ブロック図を示す。プロセッサ１０は、命令順序付けメカニズム（ＩＯＭ）１３を含む制御論理１１に従って、命令実行パイプライン１２内の命令を実行する。パイプライン１２は、本明細書において更に詳細に説明されるように、上位部分１４と下位部分１６とに論理的に分割される。パイプライン１２は、複数の並行な下位パイプライン１６ａ、１６ｂを有するスーパースカラ設計であることができる。パイプライン１４、１６は、パイプ・ステージ内に構成された様々なレジスタすなわちラッチ１８、及び、例えば算術論理演算ユニット（ＡＬＵ）（図示せず）のような論理回路及び計算回路を含む。汎用レジスタ（ＧＰＲ）ファイル２０は、メモリ階層の最上位を備えるレジスタを提供する。本明細書で説明されるように、ＧＰＲ２０は、ＧＰＲリソースを推測的に命令に割り当てるための推測的再命名テーブル（Speculative Renaming Table）（ＳＲＴ）２２及びコミット再命名テーブル（Committed Renaming Table）（ＣＴＲ）２４を含むことができる。
【００１１】
上位パイプライン１４は、命令側変換索引バッファ（ＩＴＬＢ）２８によって管理されるメモリ・アドレス指定及び許可によって、命令キャッシュ（Ｉキャッシュ、すなわちＩ＄）２６から命令をフェッチする。データは、主要変換索引バッファ（ＴＬＢ）３２によって管理されるメモリ・アドレス指定及び許可によって、データ・キャッシュ（Ｄキャッシュ、すなわちＤ＄）３０からアクセスされる。様々な実施形態において、ＩＴＬＢ２８は、ＴＬＢ３２の一部のコピーを備えることができる。あるいは、ＩＴＬＢ２８及びＴＬＢ３２は統合されうる。同様に、プロセッサ１０の様々な実施形態において、Ｉキャッシュ２６及びＤキャッシュ３０は一体化されうる。
【００１２】
Ｉキャッシュ２８及び／又はＤキャッシュ３０は、メモリ・インタフェース３６の制御下で、主（オフチップ）メモリ３４へのアクセスをもたらす（図示されないが、プロセッサ１０と主メモリ３４との間に他のキャッシュが挿入されうる）。プロセッサ１０は、入力／出力（Ｉ／Ｏ）インタフェース３８を含み、様々な周辺デバイス４０、４２へのアクセスを制御することができる。当業者は、プロセッサ１０の多くの変形例が可能であることを理解するであろう。例えばプロセッサ１０は、Ｉキャッシュ２６及びＤキャッシュ３０の何れか又は両方について、第２レベル（Ｌ２）キャッシュを含むことができる。更に、プロセッサ１０内に示された機能ブロックのうちの１つ又は複数が、特定の実施形態から省略されうる。
【００１３】
上位パイプライン１４と、１つ又は複数の下位パイプライン１６とへのパイプライン１２の論理分割は、命令の順序とは無関係に、何れの命令が上位パイプライン１４から直ちにフラッシュされうるかによる確実性によって決定される。特に、上位パイプライン１４は、命令がプログラム順序を外れる時点より前に、パイプライン１２の一部として定められる。同様に、下位パイプライン１６は、上位パイプライン１４の後に、パイプライン１２の一部として定められる。順不同実行をサポートするプロセッサにおいて、下位パイプライン１６内の命令は、それらのプログラム順序以外でパイプ・ステージへディスパッチされうる。ほとんどの実施形態において、上位パイプライン１４は、フェッチ・ステージ及び復号ステージ全てを備え、下位パイプライン１６は、（スーパースカラ・パイプラインの場合）命令発行ステージ及び１つ又は複数の実行パイプラインを含むであろう。
【００１４】
パイプライン１２の論理分割によって、分岐誤予測が検出されると上位パイプライン１４が直ちにフラッシュされ、正しい分岐ターゲット・アドレスから命令をフェッチするために必要な時間を最小化することが可能となる。更に、下位パイプライン１４は実行を継続するので、誤予測された分岐より後に推測的にフェッチされた命令全てを下位パイプライン１４から効率的にフラッシュするという利点を、既存の例外フラッシュ・メカニズムに対して有することも可能となる。
【００１５】
上位パイプライン１４のフラッシュは簡単である。上位パイプライン１４は、命令がプログラム順序を外れる時点より前に定められ、誤予測された分岐の判定は、下位パイプライン１６内の実行ステージにおいて起こるので、誤予測判定の時点では、上位パイプライン４０内の命令は全て、誤予測された分岐命令よりも新しいことが知られる。すなわち、それらは全て分岐予測を信頼してフェッチされており、誤予測された分岐の検出後のサイクルにおけるように、全て安全にフラッシュされうる。これにより、プロセッサ１０は、可能な限り早く正しい分岐ターゲット・アドレスからの命令のフェッチを開始することができ、パイプライン・ストール持続時間は最小化される。
【００１６】
下位パイプライン１６のフラッシュは問題を含む。命令はプログラム順序外で実行しているので、パイプライン内の誤予測された分岐より後の命令は全て、誤予測された分岐命令より新しく、安全にフラッシュすることを想定することができない。例えば、以下の命令ＬＤ、ＡＤＤ、ＢＲを考慮されたい。ここでＬＤはＡＤＤのためのオペランドを提供するが、ＢＲは何れからも独立している。ＬＤの動作は、メモリ・アクセスを必要とし、これは特にＤキャッシュ３０のミスの場合、パイプライン１６をストールさせる可能性がある。ＡＤＤは無論、ＬＤが完了するのを待たなければならない。しかし、独立したＢＲ命令は、ＬＤ及びＡＤＤより前に、実行のために下位パイプライン１６内へディスパッチされうる。ＢＲ条件評価が、それが誤予測されたことを検出すると、プロセッサは、ＢＲ命令より後に下位パイプライン１６を単純にフラッシュすることができない。プロセッサは、何れもプログラム順序がＢＲより前であり実行されなければならないＬＤ及びＡＤＤをフラッシュするであろう。
【００１７】
多くのスーパースカラ・プロセッサ１０は、命令順序付けマネージャ（ＩＯＭ）をパイプライン制御論理１１の一部として含む。ＩＯＭは、例えばサーキュラ・バッファ、ＦＩＦＯ等におけるように、真のプログラム順序での命令の表現を保持することによって、パイプラインを通した命令実行の順序、つまり、どの命令が、与えられた命令よりも古いか、又は新しいかをトラックする。命令表現に関連するフラグ又は属性によって、ＩＯＭは更に、命令依存性をトラックし、例外処理における手段となる。１つ又は複数の実施形態によると、プロセッサ１０内のＩＯＭ１３は、誤予測された分岐命令が発見されると、下位パイプラインを効率的にフラッシュすることを容易にする追加の回路及び論理を含む。例外処理におけるＩＯＭ１３の役割の簡略な概観は、本明細書において開示され主張された実施形態に従う下位パイプライン１６の誤予測された分岐のフラッシュを明らかにするであろう。
【００１８】
例外は、パイプ・ステージが、自身の命令ステップの実行を完了することが不可能である場合常に生じる。例えば、メモリにデータを書き込む格納命令は、ＴＬＢ３２のルックアップが、メモリ・ページが読取専用であることを示した場合、例外をもたらしうる。他のタイプの例外は、当該技術において周知である。例外が発生すると、プロセッサ１０は、パイプライン１２内の、例外より前、すなわち古い命令全てを実行し、例外の原因である命令及び新たな命令全てをパイプライン１２からフラッシュし、その後、割込み処理コードを実行しなければならない。ＩＯＭ１３は、何れの命令が「コンファーム（confirm）」され、何れの命令が「コミット（commit）」されたかをトラックすることによって、この処理を支援する。
【００１９】
命令は、自身の実行を妨げるパイプライン・ハザードがない、すなわち、命令がストールしないであろうことが判定された場合、コンファームされる。例えば、算術又は論理演算を実行する命令は、どちらのオペランドも、前の命令から生成されているか、メモリからフェッチされたか、又はそうでない場合利用可能である、と知られている場合、コンファームされうる。命令は、その命令（及びそれより古い命令全て）がコンファームされた場合、コミットされる。コミットされた命令は、（その命令自身がコンファームされた場合）その命令、又は（それより古い命令全てがコンファームされた場合）それより前の任意の命令の何れかを妨げるパイプライン・ハザードがないので、実行を完了することができることを知られる。コミットされた命令は全て、実行しなければならない。
【００２０】
例外処理中の従来のルールは、例外の原因である命令が「コミットされていない最後の命令」である場合、コミットされていない命令全てがパイプライン１２からフラッシュされることである。すなわち、例外の原因である命令より前の命令全てが実行のためにコミットされているが、例外の原因である命令及びそれより新しい命令全てはコミットされていない。（例外の原因である命令を含む）コミットされていない命令がフラッシュされ、コミットされた命令は実行を継続する。新たな命令が、割込みハンドラ・アドレスからフェッチされる。
【００２１】
例外の原因である命令とは異なり、誤予測された分岐命令は、実行されなければならず、フラッシュされてはならない。誤っているのは分岐予測のみであり、分岐命令自体は実行しなければならず、プログラム・フローを適切な分岐ターゲット・アドレスへ向けなければならない。従って、誤予測された分岐命令が「コミットされた最も新しい命令」である場合、コミットされていない命令は全て、下位パイプライン１６ａ、１６ｂからフラッシュされる。すなわち、誤予測された分岐命令及びそれより前の命令は全て実行のためにコミットされているが、（誤予測された分岐ターゲット・アドレスからフェッチされた）分岐より後の命令は全てコミットされていない。コミットされていない命令はフラッシュされ、（誤予測された分岐命令を含む）コミットされた命令は、実行を継続する。
【００２２】
１つ又は複数の実施形態において、ＩＯＭ１３内の各エントリは、ＩＯＭ１３のエントリが生成されるとアサートされていない状態に初期化される、誤予測された分岐（ＭＰＢ）フラグ又はビット・フィールドを含む。分岐命令は通常、他のデータ依存を有さないので、自身の分岐評価の直後にコンファームするであろう。コンファーム・パイプ・ステージは、分岐命令が実行される、各パイプライン１６ａ、１６ｂ内の分岐条件評価ステージに後続し、コンファームされたフラグをＩＯＭ１３内にセットする。コンファーム・パイプ・ステージは更に、分岐評価と自身の予測された値とを比較し、分岐が誤予測された場合、ＭＰＢフラグをＩＯＭ１３内にセットする。実行のために命令をコミットしている時、ＭＰＢフラグに遭遇すると、ＩＯＭ１３及び関連する制御論理１１は、上述された「コミットされた最も新しい命令」のルールに従って、下位パイプライン１６のフラッシュを実施することができる。
【００２３】
ＩＯＭ１３において、誤予測の検出から、誤予測された分岐命令のコンファーム及びコミットまでの遅延は通常、ほんの数サイクルしかかからないはずである。一方、上位パイプライン１４の瞬時のフラッシュは、正しい分岐ターゲット・アドレスからの命令のフェッチが既に開始したことを意味する。例えば上述したＬＤ、ＡＤＤ、ＢＲの例のようないくつかの場合、分岐誤予測の検出と、分岐命令のコンファームとの間には、下位パイプライン１６のフラッシュを可能とする著しい遅延がありうる。下位パイプライン１６のフラッシュが、例えば上位パイプライン１４の深部といった、その後の更なるサイクルを要する可能性に対する予防措置として、上位パイプライン１４と下位パイプライン１６との境界に、あるいはそれより前に、パイプライン保留が構成されうる。下位パイプライン１６のフラッシュが完了すると除去されるこの保留は、正しい分岐ターゲット・アドレスからフェッチされた任意の命令を誤ってフラッシュすることを防ぐ。条件付パイプラインの保留は当該技術において周知であり、本明細書における更なる説明なしでも当業者によって容易に実施されうる。
【００２４】
下位パイプライン１６をフラッシュすることの別の困難性は、フラッシュ後に推測的に割り当てられたプロセッサ・リソースの正しい状態を再格納することである。例えばレジスタの再命名は、論理ＧＰＲ識別子（ｒ０、ｒ１、ｒ２・・・）が、再命名テーブル内のマッピングを介して物理レジスタの大きなセットに動的にマップされる、ＧＰＲ２０管理の周知の方法である。レジスタ再命名システムは、順不同命令実行に内在するデータ・ハザードの多くを回避する。動作中、ＧＰＲ２０レジスタに書き込む命令毎に、新たな物理レジスタが割り当てられ、新たな論理対物理「再命名」が再命名テーブル内に記録される。ＧＰＲ２０を読み取る命令は、再命名テーブルのルックアップを介して、自身の論理ＧＰＲ識別子を物理レジスタ番号に変換する。物理レジスタ番号は、パイプライン１６を介して、自身の保持期間（tenure）中ずっと、レジスタ読取命令に関連付けられたままである。
【００２５】
レジスタ再命名システムにおいて、ＧＰＲ２０は、同一の論理ＧＰＲ識別子に書き込まれた前の値を「損なう（corrupt）」ことがない。この書込みは、新たな未使用の物理レジスタに向けられる。プログラム順序において書込み命令より後の命令は、新たな物理レジスタへ向けられ、書き込まれた値を取得する。プログラム順序において書込み命令より前の命令は、再命名テーブルによって（再命名動作前に）異なる物理レジスタへマップされており、その物理レジスタにアクセスし続けるであろう。従って、与えられたＧＰＲ識別子を書き込む命令は、そのＧＰＲ識別子から前の値を読み取る命令（読取ハザード後の書込み、すなわちＷａＲ）、あるいはそのＧＰＲ識別子へ前の結果を書き込む命令（書込みハザード後の書込み、すなわちＷａＷ）より前に実行されうる。このように、ＷａＲデータ・ハザード及びＷａＷデータ・ハザードが回避される。
【００２６】
論理ＧＰＲ識別子の物理レジスタへの再命名は、プロセッサ・リソースの推測的な割当である。命令は順不同で実行することができるので、プログラム順序において書き込み命令より前の別の命令の実行より前に、論理ＧＰＲ識別子を書き込むことができる（そして、新たな物理レジスタを割り当てられうる）。他の命令が例外をもたらすか、又は誤予測された分岐命令であった場合、書き込み命令はパイプライン１６からフラッシュされることができ、その物理レジスタは割当を解除される。一方、書込み命令より前のレジスタ再命名は、保存されなければならない。
【００２７】
任意の時間に（例えば誤予測された分岐を検出すると直ちに）下位パイプライン１６をフラッシュし、復元することができるように、論理ＧＰＲ識別子が物理レジスタに再命名される度に、すなわち、レジスタ書込み命令がパイプライン１６内にランチする度に、再命名テーブルの別々のコピーが生成されなければならず、そのコピーは、レジスタ書込み命令が実行のためにコミットするまで保持されなければならない。これらのレジスタ・テーブルはその後、何れの命令がパイプライン１６からフラッシュされるかに基づいて選択的に破棄されうる。このアプローチは、再命名テーブルの多数のコピーを保持することにおいても、パイプライン１６をフラッシュすると再命名テーブルが破棄されなければならない論理トラッキングにおいても高価である。
【００２８】
１つ又は複数の実施形態において、推測的再命名テーブル（ＳＲＴ）２２及びコミット済再命名テーブル（ＣＲＴ）２４の再命名テーブルの２つのコピーのみが保持される。ＳＲＴ２２は、論理ＧＰＲ識別子が新たな物理レジスタに再命名される度に更新される。ＣＲＴ２４におけるレジスタ再命名マッピングは、関連するレジスタ書込み命令が実行のためにコミットされた場合しか更新されない。下位パイプライン１６が、誤予測された分岐によってフラッシュされた場合、誤予測された分岐命令はコミットされた最も新しい命令であるので、（プログラム順序において）分岐より前にコミットされたレジスタ書込み命令は全て、ＣＲＴ２４に記録された自身のレジスタ再命名マッピングを有することが知られる。更に、（プログラム順序において）誤予測された分岐命令より後のレジスタ書込み命令によって実行された任意のレジスタ再命名は、ＳＲＴ２２にしか記録されず、ＣＲＴ２４には記録されないことが知られる。これらのレジスタ再命名は破棄されなければならず、下位パイプライン１６の一部として割当を解除された関連する物理レジスタはフラッシュする。
【００２９】
１つ又は複数の実施形態において、誤予測された分岐命令がコミットされた最も新しい命令である場合、誤予測された分岐によって下位パイプライン１６がフラッシュされると、ＣＲＴ２４はＳＲＴ２２へコピーされる。これにより、ＳＲＴ２２は、誤予測された分岐命令の時点での正しい状態となり、フラッシュされたレジスタ書込み命令に推測的に割り当てられた物理レジスタは割当を解除される。２つの再命名テーブルのみを保持し、誤予測された分岐命令がコミットするまで下位パイプライン１６のフラッシュを遅延させることによって、推測的に割り当てられたプロセッサ・リソースの割当を解除するタスクは格段に簡略化される。
【００３０】
図２は、１つ又は複数の実施形態に従う、順不同実行を可能とするパイプライン化されたプロセッサ１０において命令を実行する方法を示す。関連する方法は、プロセッサ１０が誤予測された分岐（ＭＰＢ）を検出すると開始する（ブロック１００）。これは通常、下位パイプライン１６ａ、１６ｂ内の実行（ＥＸＥ）ステージにおいて起こるであろう。ＭＰＢを検出すると直ちに、プロセッサ１０は、後続するサイクルにおけるように、上位パイプライン１４をフラッシュし（１０２）、正しい分岐ターゲット・アドレスからの命令のフェッチを開始する（ブロック１１４）。プロセッサ１０はその後、下位パイプライン１６がフラッシュされるまで上位パイプライン１４を保留する（ブロック１１６）。この保留が解除されると、通常のプロセッサ１０の実行が継続する（ブロック１１８）。
【００３１】
同時に、プロセッサ１０は、ＭＰＢ命令がコンファームするまで下位パイプライン１６において実行を継続する（ブロック１２０）。このコンファームは通常、分岐誤予測の検出の直後、パイプ・ステージ内で起こるであろう。ＭＰＢ命令がコンファームすると（ブロック１２０）、コンファームされたフラグ及びＭＰＢフラグがＩＯＭ１３内に設定される（ブロック１２２）。通常の処理が、ＭＰＢ命令がコミットするまで継続する。ＭＰＢ命令が、コミットされた最も新しい命令である場合（ブロック１２４）、ＩＯＭ１３は、コミットされていない命令全ての下位パイプライン１６からのフラッシュをトリガする（ブロック１２６）。プロセッサ１０はその後、ＣＲＴ２４をＳＲＴ２２へコピーし、通常の実行を継続する（ブロック１１８）。
【００３２】
このように、実施形態は、上位パイプライン１４を直ちにフラッシュすることによって、正しい分岐ターゲット・アドレスから命令をフェッチする際における遅延を最小化することと、下位パイプライン１６を効率的にフラッシュすることによって、誤った分岐ターゲット・アドレスからフェッチされた命令のみを正しくフラッシュし、それらに推測的に割り当てられたプロセッサ・リソースの割当を解除するための複雑な計算及び重複したハードウェアを回避することとの両方を達成する。実施形態は本明細書において例外のフラッシュを実施するＩＯＭ１３に関して説明されたが、本発明はそれらの実施形態に限定されない。特に、本明細書で説明された、誤予測された分岐命令がコミットされた最も新しい命令となる場合、コミットされていない命令全てを下位パイプライン１６からフラッシュする命令トラッキング・メカニズムは、例外のフラッシュを実行する必要はない。更に、プロセッサ・リソース１０の推測的割当は本明細書においてレジスタ再命名スキームに関連して説明されたが、例えば再命名バッファ等のようなその他多くの形式の推測的リソース割当が当該技術において周知である。
【００３３】
本発明は、本発明の本質的特徴から逸脱することなく、本明細書に具体的に記載された方法以外の方法で実行されることができる。本実施形態は、全ての観点において、限定的ではなく例示的であるように見なされ、特許請求の範囲の意味および均等物の範囲内で実現する変形例全ては、特許請求の範囲に包含されることが意図される。
【図１】
2010517183.tif 000003
【図２】
2010517183.tif 000004
【国際調査報告】
2010517183.tif 000005
2010517183.tif 000006
2010517183.tif 000007