(57)【要約】  本発明の実施の形態は、長い待ち時間のオペレーションに依存する命令をプロセッサパイプラインフローから逸らし、長い待ち時間のオペレーションが完了すると、それらの命令をフローに再び導入することによって、プロセッサのスループットを比較的増加させ、プロセッサのスケジューラ及びレジスタファイルに対する圧力を取り除くためのシステム及び方法に関する。このように、これらの命令は資源を拘束せず、パイプラインの全体的な命令スループットは比較的増加する。【選択図】なし【特許請求の範囲】
【請求項１】
プロセッサパイプラインにおける命令を、長い待ち時間のオペレーションに依存する命令として特定すること、
該特定に基づいて、前記命令を実行するのに必要とされる情報の少なくとも一部と共に、前記命令をデータストレージエリアに置くこと、及び
前記命令によって割り当てられている物理レジスタを解放すること
を含む方法。
【請求項２】
前記命令によって占有されるスケジューラエントリーを解放することをさらに含む、請求項１に記載の方法。
【請求項３】
前記長い待ち時間のオペレーションが完了した後、前記命令を前記パイプラインに再挿入すること
をさらに含む、請求項１に記載の方法。
【請求項４】
前記情報の前記少なくとも一部は、前記命令のソースレジスタの値を含む、請求項１に記載の方法。
【請求項５】
前記情報の前記少なくとも一部は、前記命令の物理レジスタマッピングを含む、請求項１に記載の方法。
【請求項６】
前記命令は、長い待ち時間のオペレーションに依存する、前記パイプラインにおける複数の命令の１つであり、該複数の命令は、該複数の命令のスケジューリング順序で前記データストレージエリアに置かれる、請求項１に記載の方法。
【請求項７】
前記長い待ち時間のオペレーションが完了した後、前記複数の命令を前記スケジューリング順序で前記パイプラインに再挿入すること
をさらに含む、請求項６に記載の方法。
【請求項８】
長い待ち時間のオペレーションに依存するものとして特定された命令を記憶するためのデータストレージエリアであって、各命令について、該命令のフィールドと、該命令のソースレジスタの値のフィールドと、該命令のレジスタの物理レジスタマッピングのフィールドとを備える、データストレージエリア
を備えるプロセッサ。
【請求項９】
前記データストレージエリアに接続されて、物理レジスタを、前記データストレージエリアの前記物理レジスタマッピングの物理レジスタ識別子にマッピングするためのリマッパ
をさらに備える、請求項８に記載のプロセッサ。
【請求項１０】
前記リマッパの、チェックポインティングされた物理レジスタを特定するためのフィルタをさらに備える、請求項８に記載のプロセッサ。
【請求項１１】
命令を記憶するためのメモリと、
該メモリに接続されて、前記命令を実行するためのプロセッサであって、該プロセッサは、長い待ち時間のオペレーションに依存するものとして特定された命令を記憶するためのデータストレージエリアを含み、該データストレージエリアは、各命令について、該命令のフィールドと、該命令のソースレジスタの値のフィールドと、該命令のレジスタの物理レジスタマッピングのフィールドとを備える、プロセッサと
を備えるシステム。
【請求項１２】
前記プロセッサは、
前記データストレージエリアに接続されて、物理レジスタを、前記データストレージエリアの前記物理レジスタマッピングの物理レジスタ識別子にマッピングするためのリマッパ
をさらに備える、請求項１１に記載のシステム。
【請求項１３】
前記プロセッサは、前記リマッパの、チェックポインティングされた物理レジスタを特定するためのフィルタをさらに備える、請求項１１に記載のシステム。
【請求項１４】
キャッシュミスを発生するロード命令を実行すること、
該ロード命令が長い待ち時間のオペレーションに依存することを示すように、該ロード命令に割り当てられるデスティネーションレジスタの指示子をセットすること、
前記ロード命令を実行するのに必要とされる情報の少なくとも一部と共に、前記ロード命令をデータストレージエリアに移動させること、及び
前記ロード命令に割り当てられた前記デスティネーションレジスタを解放すること
を含む方法。
【請求項１５】
前記ロード命令の前記デスティネーションレジスタにセットされた前記指示子に基づいて、別の命令のデスティネーションレジスタの指示子をセットすること、
前記他の命令を実行するのに必要とされる情報の少なくとも一部と共に、前記他の命令を前記データストレージエリアに移動させること、及び
前記別の命令に割り当てられた物理レジスタを解放すること
をさらに含む、請求項１４に記載の方法。
【請求項１６】
前記ロード命令及び前記他の命令によって割り当てられたスケジューラエントリーを解放することをさらに含む、請求項１５に記載の方法。
【請求項１７】
前記情報の前記少なくとも一部は、前記他の命令の物理レジスタマッピングを含む、請求項１５に記載の方法。
【請求項１８】
前記長い待ち時間のオペレーションが完了した後、前記ロード命令及び前記他の命令をスケジューリング順序でプロセッサパイプラインに再挿入すること
をさらに含む、請求項１５に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
マイクロプロセッサは、シングルチップ上で複数のコアをサポートするようにますます要求されている。設計努力及び設計コストを低く抑え、且つ、今後の用途に適合させるために、設計者は、多くの場合、モバイルラップトップからハイエンドサーバに至る全製品の範囲のニーズを満たすことができるマルチコアマイクロプロセッサを設計しようと試みている。この設計目標は、プロセッサ設計者に、ラップトップコンピュータ及びデスクトップコンピュータのマイクロプロセッサにとって重要なシングルスレッド性能を維持すると同時に、サーバのマイクロプロセッサにとって重要なシステムスループットを提供するという困難なジレンマを与える。従来、設計者は、大きく複雑な単一のコアを有するチップを使用して、シングルスレッド性能を高くするという目標を満たそうと試みてきた。他方、設計者は、複数の比較的小さく単純なコアをシングルチップに設けることによってシステムスループットを高くするという目標を満たそうと試みてきた。しかしながら、設計者は、チップサイズ及び電力消費の限界に直面しているので、高いシングルスレッド性能及び高いシステムスループットの双方を同じチップに同時に提供することは、重大な課題を提示する。より具体的には、シングルチップは、多数の大きなコアに対応しておらず、小さなコアは、従来、高いシングルスレッド性能を提供していない。
【０００２】
スループットに強い影響を与える１つの要因は、キャッシュミスの修復等、長い待ち時間のオペレーションに依存する命令を実行する必要があるということである。プロセッサの命令は、「スケジューラ」として知られている論理構造体で実行を待つことができる。スケジューラでは、デスティネーションレジスタが割り当てられている命令は、それらのソースオペランドが利用可能になるのを待ち、利用可能になると、命令は、スケジューラを離れ、実行されて、リタイヤすることができる。
【０００３】
プロセッサのどの構造でも同様に、スケジューラは、面積制約を受け、したがって、有限個のエントリーを有する。キャッシュミスの修復に依存する命令は、そのミスが修復されるまで数百サイクルを待たなければならない場合がある。命令が待っている間、それらの命令のスケジューラエントリーは、割り当てられた状態に保たれ、したがって、他の命令に利用可能ではない。この状況は、スケジューラに対する圧力を生み出し、その結果、性能損失となる可能性がある。
【０００４】
同様に、スケジューラで待っている命令は、それらのデスティネーションレジスタが割り当てられた状態に保たれ、したがって、他の命令に利用可能でないので、圧力はレジスタファイルに対しても生み出される。この状況も、特に、レジスタファイルが数千個の命令を維持することが必要な場合があり、通常、大量の電力を消費して、サイクルが決定的に影響する（cycle-critical）連続クロック制御構造であるということを考慮すると、性能に有害になる可能性がある。
【発明を実施するための最良の形態】
【０００５】
本発明の実施の形態は、長い待ち時間のオペレーションに依存する命令をプロセッサパイプラインフローから逸らし、長い待ち時間のオペレーションが完了すると、それらの命令をフローに再び導入することによって、プロセッサのスループット及びメモリ待ち時間の許容範囲を比較的増加させ、スケジューラ及びレジスタファイルに対する圧力を取り除くためのシステム及び方法に関する。このように、これらの命令は資源を拘束せず、パイプラインの全体的な命令スループットは比較的増加する。
【０００６】
より具体的には、本発明の実施の形態は、本明細書では「スライス」命令と呼ばれる、長い待ち時間のオペレーションに依存する命令を特定し、スライス命令を実行するのに必要とされる情報の少なくとも一部と共にスライス命令をパイプラインから「スライスデータバッファ」へ移動させることに関する。スライス命令のスケジューラエントリー及びデスティネーションレジスタは、その後、他の命令による使用のために再利用することができる。長い待ち時間のオペレーションから独立した命令は、これらの資源を使用することができ、プログラムの実行を継続することができる。スライスデータバッファにおけるスライス命令が依存する長い待ち時間のオペレーションが完了すると、スライス命令をパイプラインに再導入して、実行し、リタイヤさせることができる。本発明の実施の形態は、それによって、妨害されることのない連続フロープロセッサパイプラインを達成する。
【０００７】
図１は、本発明の実施の形態によるシステムの一例を示している。このシステムは、本発明の実施の形態による「スライス処理ユニット」１００を備えることができる。スライス処理ユニット１００は、スライスデータバッファ１０１、スライスリネームフィルタ１０２、及びスライスリマッパ１０３を備えることができる。これらの構成要素に関連付けられるオペレーションを以下でさらに詳述する。
【０００８】
スライス処理ユニット１００は、プロセッサパイプラインに関連付けることができる。パイプラインは、割り当て／レジスタリネームロジック１０５に接続されている、命令をデコードする命令デコーダ１０４を備えることができる。既知のように、プロセッサは、命令に物理レジスタを割り当てて、命令の論理レジスタを物理レジスタにマッピングする割り当て／レジスタリネームロジック１０５等のロジックを含むことができる。本明細書で使用される場合、「マッピング」は、両者の間の対応を定義又は指定することを意味する（概念的に言えば、論理レジスタ識別子が、物理レジスタ識別子に「リネーム」される）。より具体的には、パイプラインにおける命令の短期間の寿命の間、命令のソースオペランド及びデスティネーションオペランドは、プロセッサの一組の論理レジスタ（「アーキテクチャ」レジスタも）のレジスタの識別子の点で指定されると、命令をプロセッサで実際に実行できるように物理レジスタを割り当てられる。物理レジスタセットは、通常、論理レジスタセットよりもはるかに多く、したがって、複数の異なる物理レジスタを同じ論理レジスタにマッピングすることができる。
【０００９】
割り当て／レジスタリネームロジック１０５は、実行用の命令をキューに入れるμｏｐ（「マイクロ」オペレーション、すなわち命令）キュー１０６に接続することができ、μｏｐキュー１０６は、実行用の命令をスケジューリングするスケジューラ１０７に接続することができる。割り当て／レジスタリネームロジック１０５によって実行される、論理レジスタの物理レジスタへのマッピング（以下では、「物理レジスタマッピング」という）は、実行を待っている命令用のリオーダバッファ（ＲＯＢ）（図示せず）又はスケジューラ１０７に記録することができる。本発明の実施の形態によれば、物理レジスタマッピングは、以下でさらに詳述するように、スライス命令として特定された命令用のスライスデータバッファ１０１にコピーすることができる。
【００１０】
スケジューラ１０７は、ブロック１０８のバイパスロジックとともに図１に示される、プロセッサの物理レジスタを含むレジスタファイルに接続することができる。レジスタファイル／バイパスロジック１０８は、実行用にスケジューリングされた命令を実行するデータキャッシュ／機能ユニットロジック１０９とインターフェースすることができる。Ｌ２キャッシュ１１０は、データキャッシュ／機能ユニットロジック１０９とインターフェースして、メモリインターフェース１１１を介してメモリサブシステム（図示せず）から取り出されたデータを提供することができる。
【００１１】
前述したように、Ｌ２キャッシュでミスするロードについてのキャッシュミスの修復は、長い待ち時間のオペレーションとみなすことができる。長い待ち時間のオペレーションの他の例には、浮動小数点演算及び浮動小数点演算の依存チェーンが含まれる。命令がパイプラインによって処理される時、本発明の実施の形態に従って、長い待ち時間のオペレーションに依存する命令をスライス命令として分類して、特別な処置を行い、それによって、それらのスライス命令がパイプラインスループットを妨害又は低速化することを防止することができる。スライス命令は、キャッシュミスを発生するロード等の独立命令、又は、ロード命令によってロードされるレジスタを読み出す命令等、別のスライス命令に依存する命令である場合がある。
【００１２】
スライス命令がパイプラインに出現すると、そのスライス命令は、スケジューラ１０７によって決定されるような命令のスケジューリング順序にする代わりに、スライスデータバッファ１０１に記憶することができる。スケジューラは、通常、データ依存順序で命令をスケジューリングする。スライス命令は、その命令を実行するのに必要な情報の少なくとも一部と共に、スライスデータバッファに記憶することができる。たとえば、この情報には、利用可能な場合にソースオペランドの値と、命令の物理レジスタマッピングとが含まれ得る。物理レジスタマッピングは、命令に関連付けられているデータ依存情報を保持する。利用可能なあらゆるソース値及び物理レジスタマッピングをスライス命令と共にスライスデータバッファに記憶することによって、たとえスライス命令が完了する前であっても、対応するレジスタを他の命令のために解放して再利用することができる。さらに、スライス命令が、その後、パイプライン内に再導入されてその実行が完了すると、そのソースオペランドの少なくとも１つを再評価することを不要とすることができる一方、物理レジスタマッピングは、命令がスライス命令シーケンスの正しい場所で実行されることを保証する。
【００１３】
本発明の実施の形態によれば、スライス命令の特定は、長い待ち時間のオペレーションのレジスタ依存状態及びメモリ依存状態を追跡することによって動的に行うことができる。より具体的には、スライス命令は、物理レジスタ及びストアキューエントリーを介してスライス命令指示子を伝えることによって特定することができる。ストアキューは、メモリに書き込むためにキューに入れられたストア命令を保持するための、プロセッサにおける構造体（図１に図示せず）である。ロード命令は、ストアキューエントリーのフィールドを読み出すことができ、ストア命令は、ストアキューエントリーのフィールドを書き込むことができる。スライス命令指示子は、各物理レジスタ及び各ストアキューエントリーに関連付けられる、本明細書では「非値（Not a Value）」（ＮＡＶ）ビットと呼ばれるビットとすることができる。このビットは、最初にセットすることができない（たとえば、このビットは、論理「０」の値を有する）が、関連付けられている命令が、長い待ち時間のオペレーションに依存する場合には、（たとえば、論理「１」に）セットすることができる。
【００１４】
このビットは、最初に、独立スライス命令についてセットすることができ、その後、その独立命令に直接的又は間接的に依存する命令に伝えることができる。より具体的には、キャッシュをミスするロード等、スケジューラにおける独立スライス命令のデスティネーションレジスタのＮＡＶビットをセットすることができる。そのデスティネーションレジスタをソースとして有する後続の命令は、それらの命令の各デスティネーションレジスタのＮＡＶビットもセットできるという点で、ＮＡＶビットを「継承」することができる。ストア命令のソースオペランドのＮＡＶビットがセットされている場合、そのストアに対応するストアキューエントリーのＮＡＶビットをセットすることができる。そのストアキューエントリーから読み出しを行う後続のロード命令又はそのストアキューエントリーから今後予測される後続のロード命令について、それらの各デスティネーションのＮＡＶビットをセットすることができる。スケジューラの命令エントリーにも、物理レジスタファイル及びストアキューエントリーのＮＡＶビットに対応する、それらの命令エントリーのソースオペランド及びデスティネーションオペランドについて、ＮＡＶビットを設けることができる。スケジューラエントリーにおけるＮＡＶビットは、物理レジスタ及びストアキューエントリーにおける対応するＮＡＶビットがセットされるのと同様にセットされて、スケジューラエントリーを、スライス命令を包含するものとして特定することができる。スライス命令の依存チェーンは、上記プロセスによってスケジューラに形成することができる。
【００１５】
パイプラインにおけるオペレーションの通常の過程では、命令は、そのソースレジスタが準備できた時、すなわち、その命令を実行して正当な結果を与えるのに必要とされる値をそのソースレジスタが含む時に、スケジューラを離れて実行することができる。ソースレジスタは、たとえば、ソース命令が実行されて、レジスタに値を書き込んだ時に準備できた状態になることができる。このようなレジスタは、本明細書では、「完成ソースレジスタ」と呼ばれる。本発明の実施の形態によれば、ソースレジスタは、完成ソースレジスタである時又はそのＮＡＶビットがセットされている時のいずれかに準備できたものとみなすことができる。したがって、スライス命令のソースレジスタのいずれかが完成ソースレジスタであり、且つ、完成ソースレジスタでないあらゆるソースレジスタがセットされたＮＡＶビットを有する時に、スライス命令は、スケジューラを離れることができる。スライス命令及び非スライス命令は、したがって、長い待ち時間のオペレーションに対する依存によって遅延が引き起こされることなく、連続フローでパイプラインから「排出」を行うことができ、それによって、後続の命令は、スケジューラエントリーを獲得することが可能になる。
【００１６】
スライス命令がスケジューラを離れる時に実行されるオペレーションは、その命令自体と共に、その命令のあらゆる完成ソースレジスタの値をスライスデータバッファに記録すること、及び、あらゆる完成ソースレジスタを読み出されたものとしてマーキングすることとを含む。これによって、完成ソースレジスタを、他の命令による使用のために再利用することが可能になる。命令の物理レジスタマッピングも、スライスデータバッファに記録することができる。複数のスライス命令（「スライス」）を、対応する完成ソースレジスタ値及び物理レジスタマッピングと共に、スライスデータバッファに記録することができる。上記を考慮すると、スライスは、そのスライスが依存する長い待ち時間のオペレーションが完了した時に、パイプライン内に再導入可能な自己完結型のプログラムであって、スライスを実行するのに必要とされる唯一の外部入力はロードからのデータであるので、効率的に実行することができる（長い待ち時間のオペレーションが、キャッシュミスの修復であると仮定する）自己完結型のプログラム、とみなすことができる。他の入力は、完成ソースレジスタの値としてスライスデータバッファにすでにコピーされているか、又は、スライスの内部で生成される。
【００１７】
さらに、前述したように、スライス命令のデスティネーションレジスタは、他の命令による再利用及び使用のために解放することができ、それによって、レジスタファイルに対する圧力が取り除かれる。
【００１８】
実施の形態では、スライスデータバッファは、複数のエントリーを備えることができる。各エントリーは、スライス命令自体のフィールドと、完成ソースレジスタ値のフィールドと、スライス命令のソースレジスタ及びデスティネーションレジスタの物理レジスタマッピングのフィールドとを含む、各スライス命令に対応する複数のフィールドを備えることができる。スライスデータバッファエントリーは、スライス命令がスケジューラを離れる時に割り当てることができ、スライス命令は、前述したように、それらのスライス命令がスケジューラにおいて有する順序でスライスデータバッファに記憶することができる。スライス命令は、やがて同じ順序でパイプラインに戻すことができる。たとえば、実施の形態では、μｏｐキュー１０７を介して命令をパイプラインに再挿入することができるが、他の設定も可能である。実施の形態では、スライスデータバッファは、Ｌ２キャッシュと同様に、長い待ち時間で高帯域幅のアレイを実施する高密度ＳＲＡＭ（スタティックランダムアクセスメモリ）とすることができる。
【００１９】
次に図１を再び参照する。図１に示し、前述したように、本発明の実施の形態によるスライス処理ユニット１００は、スライスリネームフィルタ１０２とスライスリマッパ１０３とを備えることができる。スライスリマッパ１０３は、割り当て／レジスタリネームロジック１０５が論理レジスタを物理レジスタにマッピングする方法と類似した方法で、新しい物理レジスタを、スライスデータバッファの物理レジスタマッピングの物理レジスタ識別子にマッピングすることができる。このオペレーションは、元の物理レジスタマッピングのレジスタが上述したように解放されていることから必要とされる場合がある。これらのレジスタは、スライスをパイプラインに再導入する準備ができた時に、他の命令によってすでに再利用されている可能性があり、他の命令によって使用中である可能性もある。
【００２０】
スライスリネームフィルタ１０２は、推測式プロセッサでは既知のプロセスであるチェックポインティングに関連付けられるオペレーションに使用することができる。チェックポインティングは、所与のポイントで所与のスレッドのアーキテクチャレジスタの状態を保持するのに実行することができ、その結果、必要に応じて、その状態を容易に回復することができる。たとえば、チェックポインティングは、信頼性の低い分岐で実行することができる。
【００２１】
スライス命令が、チェックポインティングされた物理レジスタに書き込む場合、リマッパ１０３はその命令に新しい物理レジスタを割り当てるべきではない。その代わり、チェックポインティングされた物理レジスタは、割り当て／レジスタリネームロジック１０５によって最初に割り当てられたのと同じ物理レジスタにマッピングされなければならない。そうでない場合、チェックポイントは、破損／無効になる。スライスリネームフィルタ１０２は、どの物理レジスタがチェックポインティングされているかに関する情報をスライスリマッパ１０３に提供し、その結果、スライスリマッパ１０２は、チェックポインティングされた物理レジスタにそれらの物理レジスタの元のマッピングを割り当てることができる。チェックポインティングされたレジスタに書き込みを行うスライス命令の結果が利用可能である場合、それらの結果は、先に完了した、チェックポインティングされたレジスタに書き込みを行う独立命令の結果と融合又は統合することができる。
【００２２】
本発明の実施の形態によれば、スライスリマッパ１０３は、スライスリマッパ１０３に利用可能な物理レジスタであって、スライス命令の物理レジスタマッピングに割り当てるための物理レジスタとして、割り当て／レジスタリネームロジック１０５が有するよりも多くの物理レジスタを有することができる。これは、チェックポインティングによるデッドロックを防止するためのものとすることができる。より具体的には、物理レジスタはチェックポイントによって拘束されるので、スライス命令にリマッピングされる物理レジスタが利用不能になる場合がある。他方、スライス命令が完了する場合にのみ、チェックポイントによって拘束された物理レジスタを解放できる場合もあり得る。この状況は、デッドロックにつながる可能性がある。
【００２３】
したがって、上述したように、スライスリマッパは、割り当て／レジスタリネームロジック１０５に利用可能な範囲を上回る、マッピングに利用可能な物理レジスタの範囲を有することができる。たとえば、プロセッサには、１９２個の実際の物理レジスタが存在することがある。これらのレジスタの１２８個は、命令へのマッピングを行うための割り当て／レジスタリネームロジック１０５に利用可能とすることができる一方、１９２個の全範囲が、スライスリマッパに利用可能である。このように、この例では、余分の６４個の物理レジスタがスライスリマッパに利用可能であり、それによって、レジスタが１２８個の基本セットで利用不能であることによるデッドロック状況が確実に発生しないようにされる。
【００２４】
次に、図１の構成要素を参照して、一例を与える。以下の命令シーケンス（１）及び（２）の各命令には、スケジューラ１０７における対応するスケジューラエントリーが割り当てられているものと仮定する。簡単にするために、さらに、示されたレジスタ識別子は物理レジスタマッピングを表すものと仮定する。すなわち、それらのレジスタ識別子は、命令によって割り当てられた物理レジスタを指し、それらの物理レジスタには、命令の論理レジスタがマッピングされている。このように、対応する論理レジスタは、物理レジスタ識別子のそれぞれには暗黙的である。
（１）  Ｒ１←Ｍｘ
（アドレスがＭｘであるメモリロケーションの内容を物理レジスタＲ１にロードする）
（２）  Ｒ２←Ｒ１＋Ｒ３
（物理レジスタＲ１の内容及びＲ３の内容を加算し、その結果を物理レジスタＲ２に置く）
【００２５】
スケジューラ１０７では、命令（１）及び（２）が実行を待っている。それらの命令のソースオペランドが利用可能になると、命令（１）及び（２）は、スケジューラを離れて実行することができ、それによって、スケジューラ１０７におけるそれらの命令の各エントリーは、他の命令に利用可能になる。ロード命令（１）のソースオペランドは、メモリロケーションであり、したがって、命令（１）は、Ｌ１キャッシュ（図示せず）又はＬ２キャッシュ１１０に存在するメモリロケーションに正しいデータを要求する。命令（２）は、正しいデータがレジスタＲ１に存在するには、命令（１）の実行が成功する必要があるという点で、命令（１）に依存する。レジスタＲ３は、完成ソースレジスタであるものと仮定する。
【００２６】
次に、ロード命令である命令（１）がＬ２キャッシュ１１０でミスするものとさらに仮定する。通常、キャッシュミスを修復するには数百サイクルを要する可能性がある。その時間の間、従来のプロセッサでは、命令（１）及び（２）によって占有されたスケジューラエントリーは、他の命令に利用不能であり、それによって、スループットが抑制され、性能が低下していた。その上、キャッシュミスが修復されている間、物理レジスタＲ１、Ｒ２、及びＲ３は、引き続き割り当てられた状態にあり、それによって、レジスタファイルに対する圧力が生み出されていた。
【００２７】
これとは対照的に、本発明の実施の形態によれば、命令（１）及び（２）をスライス処理ユニット１００へ逸らすことができ、それらの命令の対応するスケジューラ及びレジスタファイルの資源を、パイプラインの他の命令による使用のために自由にすることができる。より具体的には、命令（１）がキャッシュをミスする時に、ＮＡＶビットをＲ１にセットすることができ、次に、命令（２）がＲ１を読み出すことに基づいて、Ｒ２にもＮＡＶビットをセットすることができる。図示しないが、Ｒ１又はＲ２をソースとして有する後続の命令も、そのＮＡＶビットが、それらの各デスティネーションレジスタにセットされる。それらの命令に対応するスケジューラエントリーのＮＡＶビットもセットされ、それによって、それらの命令はスライス命令として特定される。
【００２８】
命令（１）は、より詳細には、ソースとしてレジスタもストアキューエントリーも有さないので、独立スライス命令である。他方、命令（２）は、ソースとしてＮＡＶビットがセットされたレジスタを有するので、依存スライス命令である。
【００２９】
ＮＡＶビットがＲ１にセットされているので、命令（１）は、スケジューラ１０７を出ることができる。命令（１）は、スケジューラ１０７を出ることに続いて、（或る論理レジスタへの）その物理レジスタマッピングＲ１と共に、スライスデータバッファ１０１に書き込まれる。同様に、ＮＡＶビットがＲ１にセットされ、且つ、Ｒ３が完成ソースレジスタであるので、命令（２）はスケジューラ１０７を出ることができ、出る時、命令（２）、Ｒ３の値、並びに（或る論理レジスタへの）物理レジスタマッピングＲ１、（或る論理レジスタへの）物理レジスタマッピングＲ２、及び（或る論理レジスタへの）物理レジスタマッピングＲ３は、スライスデータバッファ１０１に書き込まれる。命令（２）は、スケジューラにおける場合と同様に、スライスデータバッファにおいても命令（１）の後に続く。命令（１）及び（２）によってそれまで占有されていたスケジューラエントリー並びにレジスタＲ１、Ｒ２、及びＲ３は、今やすべて、再利用可能であり、他の命令による使用のために利用可能にすることができる。
【００３０】
命令（１）によって発生したキャッシュミスが修復されると、スライスリマッパ１０３によって実行された新しい物理レジスタマッピングと共に、命令（１）及び（２）をそれらの元のスケジューリング順序でパイプラインに挿入して戻すことができる。完成ソースレジスタ値は、即値オペランドとして命令と共に運ぶことができる。命令はその後実行することができる。
【００３１】
上記説明を考慮して、図２は、本発明の実施の形態によるプロセスフローを示している。ブロック２００に示すように、プロセスは、プロセッサパイプラインにおける命令を、長い待ち時間のオペレーションに依存するものとして特定することを含むことができる。たとえば、この命令は、キャッシュミスを発生するロード命令とすることができる。
【００３２】
ブロック２０１に示すように、この特定に基づいて、命令を実行することなく、命令にパイプラインを離れさせることができ、命令を実行するのに必要とされる情報の少なくとも一部と共に、命令をスライスデータバッファに置くことができる。情報のこの少なくとも一部は、ソースレジスタの値及び物理レジスタマッピングを含むことができる。この命令によって割り当てられたスケジューラエントリー及び物理レジスタ（複数可）は、ブロック２０２に示すように、他の命令による使用のために解放して再利用することができる。
【００３３】
長い待ち時間のオペレーションが完了した後、命令は、ブロック２０３に示すように、パイプラインに再挿入することができる。命令は、長い待ち時間のオペレーションに依存する命令として特定されたことに基づいて、パイプラインからスライスデータバッファへ移動された複数の命令の１つの場合がある。これらの複数の命令は、スケジューリング順序でスライスデータバッファに移動させることができ、その同じ順序でパイプラインに再挿入することができる。その１つの命令は、その後ブロック２０４に示すように実行することができる。
【００３４】
連続フローパイプラインを実施するチェックポイント処理及び回復のアーキテクチャにおける正確な例外処置及び分岐回復を可能にするために、チェックポイントがもはや必要とされなくなるまで、２つのタイプのレジスタは解放されるべきではないことに留意されたい。この２つのタイプのレジスタは、チェックポイントのアーキテクチャ状態に属するレジスタ、及び、アーキテクチャ「リブアウト」に対応するレジスタである。リブアウトレジスタは、既知のように、プログラムの現在の状態を反映する論理レジスタ及び対応する物理レジスタである。より具体的には、リブアウトレジスタは、プロセッサの論理命令セットの所与の論理レジスタに書き込みを行うプログラムの最後の命令又は最も近時の命令に対応する。しかしながら、リブアウトレジスタ及びチェックポインティングされたレジスタは、物理レジスタファイルと比較すると、数が少ない（論理レジスタと同程度である）。
【００３５】
他の物理レジスタは、（１）それらのレジスタを読み出すすべての後続の命令が、それらのレジスタをすでに読み出しており、且つ、（２）それらの物理レジスタが、その後すでに再マッピングされている、すなわち上書きされている場合に再利用することができる。本発明の実施の形態による連続フローパイプラインは、条件（１）を保証する。その理由は、スライス命令が完了する前であっても、スライス命令が完成ソースレジスタの値を読み出した後であれば、それらのスライス命令の完成ソースレジスタは、読み出されたものとしてマーキングされるからである。条件（２）は、通常処理それ自体の期間中に満たされる。すなわち、Ｌ個の論理レジスタの場合、新しい物理レジスタマッピングを必要とする（Ｌ＋１）番目の命令が、前の物理レジスタマッピングを上書きする。したがって、パイプラインを離れる、デスティネーションレジスタを有するどのＮ個の命令についても、Ｎ−Ｌ個の物理レジスタが上書きされ、したがって、条件（２）は満たされる。
【００３６】
このように、完成ソースレジスタの値及び物理レジスタマッピング情報がスライスについて確実に記録されるようにすることによって、命令が物理レジスタを必要とするごとに、このようなレジスタが常に利用可能であるようなペースで、レジスタを再利用することができる。したがって、連続フロー特性が達成される。
【００３７】
さらに、スライスデータバッファは、複数の独立したロードによる複数のスライスを含むことができることに留意されたい。前述したように、スライスは、基本的に、実行準備を整えるために、ロードミスのデータ値が復帰することのみを待っている自己完結型のプログラムである。ロードミスのデータ値が利用可能になると、スライスを任意の順序で排出（パイプラインに再挿入）することができる。ロードミスの修復は、順序どおりに完了しない場合があり、したがって、たとえば、スライスデータバッファにおける後のミスに属するスライスが、スライスデータバッファにおける先のスライスよりも前にパイプラインに再挿入される準備ができる場合がある。この状況を処置するための複数の選択肢が存在する。すなわち、（１）最も古いスライスの準備ができるまで待ち、先入れ先出し順序でスライスデータバッファの排出を行う、（２）スライスデータバッファのあらゆるミスが復帰した時に、先入れ先出し順序でスライスデータバッファの排出を行う、及び、（３）修復されたミスから順次スライスデータバッファの排出を行う（必ずしも、最も古いスライスが最初に排出されることになるとは限らない）、といった選択肢が存在する。
【００３８】
図３は、コンピュータシステムのブロック図である。このコンピュータシステムは、本発明の一実施の形態に従って使用するための１つ又は複数のプロセッサパッケージ及びメモリを含むアーキテクチャ状態を含むことができる。図３では、コンピュータシステム３００は、プロセッサバス３２０に接続される１つ又は複数のプロセッサパッケージ３１０（１）〜３１０（ｎ）を含むことができる。プロセッサバス３２０は、システムロジック３３０に接続することができる。１つ又は複数のプロセッサパッケージ３１０（１）〜３１０（ｎ）のそれぞれは、Ｎビットプロセッサパッケージとすることができ、デコーダ（図示せず）及び１つ又は複数のＮビットレジスタ（図示せず）を含むことができる。システムロジック３３０は、バス３５０を通じてシステムメモリ３４０に接続することができ、周辺バス３６０を通じて不揮発性メモリ３７０及び１つ又は複数の周辺機器３８０（１）〜３８０（ｍ）に接続することができる。周辺バス３６０は、たとえば、１つ又は複数の、１９９８年１２月１８日に公表された周辺コンポーネント相互接続（ＰＣＩ）スペシャルインタレストグループ（Special Interest Group）（ＳＩＧ）のＰＣＩローカルバス仕様改定第２．２版のＰＣＩバス；業界標準アーキテクチャ（ＩＳＡ）バス；１９９２年に公表されたBCPR Services社の拡張ＩＳＡ（ＥＩＳＡ）仕様第３．１２版、１９９２のＥＩＳＡバス；１９９８年９月２３日に公表されたユニバーサルシリアルバス（ＵＳＢ）仕様第１．１版のＵＳＢ；及び同等の周辺バスを表すことができる。不揮発性メモリ３７０は、読み出し専用メモリ（ＲＯＭ）又はフラッシュメモリ等のスタティックメモリデバイスとすることができる。周辺デバイス３８０（１）〜３８０（ｍ）には、たとえば、キーボード；マウス又は他のポインティングデバイス；ハードディスクドライブ、コンパクトディスク（ＣＤ）ドライブ、光ディスク、デジタルビデオディスク（ＤＶＤ）ドライブ等のマスストレージデバイス；ディスプレイ等が含まれ得る。
【００３９】
本発明のいくつかの実施の形態が、本明細書で具体的に図示及び／又は説明されている。しかしながら、本発明の変更及び変形が、本発明の精神及び意図した範囲から逸脱することなく、上記教示によってカバーされ、添付の特許請求の範囲の範囲内にあることが理解されよう。
【図面の簡単な説明】
【００４０】
【図１】本発明の実施の形態によるスライス処理ユニットを備えるプロセッサの構成要素を示す図である。
【図２】本発明の実施の形態によるプロセスフローを示す図である。
【図３】本発明の実施の形態によるプロセッサを備えるシステムを示す図である。
【図１】
2008513908.tif 000002
【図２】
2008513908.tif 000003
【図３】
2008513908.tif 000004
【国際調査報告】
2008513908.tif 000005
2008513908.tif 000006
2008513908.tif 000007