(57)【要約】【課題】  実行中のプログラムに関してオペランド活性情報を維持する方法を提供する。【解決手段】        コンテキスト切替え中に、実行中のプログラムの現行アーキテクチャ化オペランドのオペランド活性状態情報が維持され、この現行オペランド状態情報は、対応する現行オペランドが第１のプログラム・モジュールによる使用のために有効化されているか又は無効化されているかのいずれかを示し、この第１のプログラム・モジュールは、現行アーキテクチャ化オペランドを無効化するための命令セット・アーキテクチャ（ＩＳＡ）の機械語命令を含み、ここで現行オペランドは、第１のプログラム・モジュールの機械語命令によってアクセスされ、このアクセスすることは、現行オペランド状態情報を用いて、以前にストアされた現行オペランド値が第１のプログラム・モジュールによってアクセス可能であるかどうか判断することを含む。【選択図】      図９
2015501019.tif 000002
【特許請求の範囲】
【請求項１】
実行中のプログラムに関して活性情報を維持するための、コンピュータ実施の方法であって、
プロセッサによって現行オペランド状態情報を維持することであって、前記現行オペランド状態情報は、対応する現行オペランドが第１のプログラム・モジュールによる使用のために有効化されているか又は無効化されているかのいずれであるかを示し、前記第１のプログラム・モジュールは、命令セット・アーキテクチャ（ＩＳＡ）の機械語命令を含み、前記第１のプログラム・モジュールは、前記プロセッサによって現在実行中である、維持することと、
前記第１のプログラム・モジュールの機械語命令によって現行オペランドにアクセスすることであって、前記アクセスすることは、前記現行オペランド状態情報を用いて、以前にストアされた現行オペランド値が前記第１のプログラム・モジュールによってアクセス可能であるかどうか判断することを含む、アクセスすることと、
を含む方法。
【請求項２】
前記現行オペランドが無効化されていることに応答して、前記アクセスすることが、
ａ）アーキテクチャ指定値を返すことであって、前記アーキテクチャ指定値が、未定義値、ゼロ値、全て「１」から成る値、又はプログラム指定デフォルト値のうちのいずれかである、アーキテクチャ指定値を返すことと、
ｂ）通知を行うことであって、前記通知ステップが、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生し抑制すること、デバッグ情報を提供すること、及び無効化オペランドへのアクセスの発生を示すように少なくとも１つのレジスタを設定すること、のうちのいずれかである、通知を行うことと、
を含む、ａ）及びｂ）のうちの少なくとも１つを含むこと、をさらに含む、請求項１に記載の方法。
【請求項３】
プログラム実行を前記第１のプログラム・モジュールから第２のプログラム・モジュールに移行することをさらに含み、前記移行することは、
ａ）前記第１のプログラム・モジュールの前記現行オペランド状態情報をコンテキスト切替え退避領域にセーブすることと、
ｂ）前記コンテキスト切替え退避領域から、新しいオペランド状態情報を、実行される第２のプログラムの現行オペランド状態情報としてロードすることと、
前記ロードされたオペランド状態情報を用いて前記第２のプログラムの実行を開始することと、
を含むａ）からｂ）を実施することを含む、
請求項１に記載の方法。
【請求項４】
前記実行を移行することは、コンテキスト切替え操作であり、前記現行オペランドは、命令によって識別される一般レジスタのアーキテクチャ化された一般レジスタ値、又は命令によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のうちのいずれかで構成され、ここで前記実行を移行することは、
ｃ）前記第１のプログラム・モジュールのプログラム・カウンタ値及び有効化現行オペランドの現行オペランド値を、前記コンテキスト切替え退避領域にセーブすることと、
ｄ）前記コンテキスト切替え退避領域から、新しい有効化オペランドの新しいオペランド値を、実行される前記第２のプログラムの現行オペランドの現行オペランド値としてロードすることと、
をさらに含み、開始される前記第２のプログラムの実行は、前記ロードされた現行オペランドを使用する、
請求項３に記載の方法。
【請求項５】
前記現行オペランド状態情報は、前記現行オペランド状態情報が現行プログラムによって有効化状態と無効化状態の間で変えることができるかどうかを制御するためのオペランド有効化制御をさらに含む、請求項４に記載の方法。
【請求項６】
第１のオペランド無効化命令を実行することであって、前記実行は、第１のオペランドの現行オペランド状態情報により前記第１のオペランドを無効化させ、ここで無効化オペランドの読み出しは、アーキテクチャ依存デフォルト値を返す、前記第１のオペランド無効化命令を実行することと、
第２のオペランド有効化命令を実行することであって、前記実行は、第２のオペランドの現行オペランド状態情報により前記第２のオペランドを有効化させ、ここで有効化オペランドの読み出しは、前記有効化オペランドに以前にストアされた値を返す、前記第２のオペランド有効化命令を実行することと、
をさらに含む、請求項４に記載の方法。
【請求項７】
前記デフォルト値は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタ内に以前にストアされた値、全て「１」、全て「０」、インクリメント値又はディクリメント値のうちのいずれかで構成され、ここで前記インクリメント値は、読み出しアクセス毎にインクリメントされ、前記ディクリメント値は、読み出しアクセス毎にディクリメントされる、請求項６に記載の方法。
【請求項８】
前記第１のオペランド無効化命令は、プリフィックス命令であり、前記プリフィックス命令の実行は、プログラム順序において前記プリフィックス命令に続く次順命令による使用の後で前記第１のオペランドが無効化されることを前記プロセッサに示す、請求項６に記載の方法。
【請求項９】
無効化オペランドに対する書込み操作は、前記無効化オペランドを有効化させ、ここで前記第２のオペランド有効化命令は、前記第２のオペランドに書込むための書込み命令である、請求項６に記載の方法。
【請求項１０】
実行中のプログラムに関して活性情報を維持するためのコンピュータ・システムであって、
主記憶装置と通信するように構成されたプロセッサを含み、前記プロセッサは、命令フェッチャ、命令オプティマイザ、及びオプティマイズされた命令を実行するための１つ又は複数の実行ユニットを含み、前記プロセッサは、請求項１から請求項９までのいずれかに記載の方法を実施するように構成される、
コンピュータ・システム。
【請求項１１】
実行中のプログラムに関して活性情報を維持するためのコンピュータ・プログラムであって、請求項１から請求項９までのいずれかに記載の方法を実施するための、処理回路による実行のための命令をストアする、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサの分野に関し、より具体的にはコンピュータ・システム内のオペランド活性（ｏｐｅｒａｎｄ  ｌｉｖｅｎｅｓｓ）に基づく操作の実行に関する。
【背景技術】
【０００２】
ワールド・ワイド・ウェブ上で２０１１年８月１日に公開されたウィキペディア（Ｗｉｋｉｐｅｄｉａ）によると、「マルチスレッド・コンピュータ」は、効率的に複数のスレッドを実行するためのハードウェア・サポートを有する。これらは、シングル・コアのリソース、即ち、コンピューティング・ユニット、ＣＰＵキャッシュ及び変換索引バッファ（ＴＬＢ）をスレッドが共有する必要がある点で、マルチプロセッシング・システム（例えば、マルチコア・システム）と区別される。マルチプロセッシング・システムが複数の完全な処理ユニットを含むのに対して、マルチスレッドは、スレッド・レベル並びに命令レベルの並列を用いることによりシングル・コアの稼働率を高めることを目ざすものである。これら２つの技術は相補的であるので、それらは、ときには、複数のマルチスレッドＣＰＵを有するシステム内で、及び複数のマルチスレッド・コアを有するＣＰＵ内で組み合せられる。
【０００３】
マルチスレッドのパラダイムは、１９９０年代後半以降、命令レベルの並列をそれ以上活用する取組みが行き詰まったために、ますます普及してきた。これにより、スループット・コンピューティングの概念が、より特化した分野であるトランザクション処理から再び浮上して注目されるようになった。
【０００４】
単一スレッド又は単一プログラムをさらにスピードアップすることは非常に難しいが、大部分のコンピュータ・システムは、実際には複数のスレッド又はプログラムの間でマルチタスクを行っている。
【０００５】
全タスクのシステム全体のスループットのスピードアップを可能にすることになる技術は、有意義な性能向上をもたらすであろう。
【０００６】
スループット・コンピューティングの２つの主要な技術は、マルチプロセッシングとマルチスレッディングである。
【０００７】
幾つかの利点としては、以下が挙げられる。
あるスレッドが多数のキャッシュ・ミスを起こす場合、使用されていないコンピューティング・リソースを利用して他のスレッドを継続することができ、これらのリソースは単一のスレッドのみが実行された場合には遊休状態になることになるので、より高速の全体的実行をもたらすことができる。
あるスレッドがＣＰＵのコンピューティング・リソースの全てを使用することができない（命令が互いの結果に依存するため）場合、別のスレッドを実行することでこれらを遊休状態のままにしないことが可能になる。
幾つかのスレッドが同じデータセットを処理する場合、それらスレッドはそのキャッシュを実際に共有することができ、より良好なキャッシュ使用率又はその値に対する同期化をもたらす。
【０００８】
マルチスレッディングに対する幾つかの批判としては、以下が挙げられる。
複数のスレッドは、キャッシュ又は変換索引バッファ（ＴＬＢ）などのハードウェア・リソースを共有したときに互いに干渉する可能性がある。
単一スレッドの実行時間は、１つのスレッドだけが実行されるときでさえ、改善されるどころか低下することがある。これは、スレッド切替えハードウェアに対応するために必要な、より遅い周波数及び／又は付加的なパイプライン・ステージのためである。
マルチスレッディングのためのハードウェア・サポートはソフトウェアに対してより可視となるので、アプリケーション・プログラム及びオペレーティング・システムの両方に対してマルチプロセッシングよりも多くの変更を必要とする。
【０００９】
下記のマルチスレッディングを含む多くの異なる型式のマルチスレッディングが存在する。
【００１０】
ブロック型マルチスレッディング
最も簡単な型式のマルチスレッディングは、１つのスレッドが、通常長い待ち時間ストールを発生させることになるイベントによってブロックされるまで走り続けるときに生じる。そのようなストールは、チップの外にあるメモリにアクセスする必要があるキャッシュ・ミスの可能性があり、これはデータを返すのに数百ＣＰＵサイクルを要することがある。ストールが解決するのを待つ代りに、スレッド化されたプロセッサは、実行準備ができている別のスレッドに実行を切り替える。以前のスレッドのデータが到着した場合にのみ、以前のスレッドが、実行準備ができた（ｒｅａｄｙ−ｔｏ−ｒｕｎ）スレッドのリスト上に戻されることになる。
【００１１】
例えば、
１．サイクルｉ：スレッドＡからの命令ｊが発行される
２．サイクルｉ＋１：スレッドＡからの命令ｊ＋１が発行される
３．サイクルｉ＋２：スレッドＡからの命令ｊ＋２が発行され、全てのキャッシュでミスとなるロード命令である
４．サイクルｉ＋３：スレッド・スケジューラが起動され、スレッドＢに切替える
５．サイクルｉ＋４：スレッドＢからの命令ｋが発行される
６．サイクルｉ＋５：スレッドＢからの命令ｋ＋１が発行される
【００１２】
これは、概念的には、タスクがある種のタイプのイベントを待つ必要がある場合に自発的に実行時間を明け渡す、実時間オペレーティング・システムで使用される協調型マルチタスキングに類似している。
【００１３】
この型式のマルチスレッディングは、ブロック型又は協調型又は粗粒度マルチスレッディングとして知られている。
【００１４】
ハードウェアのコスト：
マルチスレッディングのハードウェア・サポートの目標は、ブロックされたスレッドと実行準備ができている別のスレッドとの間の迅速な切替えを可能にすることである。この目標を達成するためのハードウェアのコストは、プログラム可視レジスタ並びに幾つかのプロセッサ制御レジスタ（プログラム・カウンタなど）を複製することである。１つのスレッドから別のスレッドへの切替えは、ハードウェアが１つのレジスタ・セットの使用から別のレジスタ・セットの使用へと切替えることを意味する。
【００１５】
そのような追加ハードウェアは以下の利益を有する：
スレッド切替えを１ＣＰＵサイクル内で行うことができる。
それは、各スレッドにとっては、単独で実行されており、他のいずれのスレッドとも何らハードウェア・リソースを共有していないように見える。このことは、アプリケーション及びオペレーティング・システム内でマルチスレッディングをサポートするために必要なソフトウェアの変更量を最小にする。
アクティブ・スレッド間で効率的に切替えるためには、各々のアクティブ・スレッドがそれぞれの独自のレジスタ・セットを有する必要がある。例えば、２つのスレッド間で迅速に切替えるためには、レジスタ・ハードウェアは２回インスタンス化される必要がある。
【００１６】
例：
マイクロコントローラ及び組み込みプロセッサの多くのファミリは、割り込み用に高速コンテキスト切替えを可能にする複数のレジスタ・バンクを有する。そのようなスキームは、ユーザ・プログラム・スレッドと割り込みスレッドとの間のブロック型マルチスレッディングの一種と考えることができる。
【００１７】
インターリーブ型マルチスレッディング
１．サイクルｉ＋１：スレッドＢからの命令が発行される
２．サイクルｉ＋２：スレッドＣからの命令が発行される
【００１８】
この型式のマルチスレッディングの目的は、全てのデータ依存ストールを実行パイプラインから除去することである。１つのスレッドが他のスレッドから比較的独立しているので、１つのパイプラインのステージ内の１つの命令がパイプライン内の古い命令からの出力を必要とする可能性が小さい。
【００１９】
これは、概念的には、オペレーティング・システムで使用されるプリエンプティブ・マルチタスキングに類似している。各アクティブ・スレッドに与えられるタイム・スライスを、１ＣＰＵサイクルに例えることができる。
【００２０】
この型式のマルチスレッディングは、初めバレル処理と呼ばれたが、この場合、樽（バレル）の樽板（ｓｔａｖｅ）がパイプラインのステージ及びその実行スレッドを表す。インターリーブ型又はプリエンプティブ又は細粒度又はタイム・スライス型マルチスレッディングが、より現代的な用語である。
【００２１】
ハードウェアのコスト：
ブロック型マルチスレッディングにおいて論じたハードウェア・コストに加えて、インターリーブ型マルチスレッディングは、各パイプライン・ステージが処理中の命令のスレッドＩＤを追跡する追加コストを有する。また、パイプライン内でより多くのスレッドが同時に実行されるので、異なるスレッド間のスラッシングを回避するためにキャッシュ及びＴＬＢなどの共有リソースをより大きくする必要がある。
【００２２】
同時マルチスレッディング
最先端型のマルチスレッディングは、スーパースカラ・プロセッサに適用される。通常のスーパースカラ・プロセッサは、ＣＰＵサイクル毎に、単一のスレッドから複数の命令を発行する。同時マルチスレッディング（ＳＭＴ）では、スーパースカラ・プロセッサは、ＣＰＵサイクル毎に複数のスレッドからの命令を発行することができる。いずれの単一スレッドも限られた量の命令レベル並列性しか有していないことを認識することで、この型式のマルチスレッディングは、使用されていない発行スロットに関連した無駄を減らすために、複数のスレッドにわたって使用可能な並列性の活用を試みる。
【００２３】
例えば：
１．サイクルｉ：スレッドＡからの命令ｊ及びｊ＋１、スレッドＢからの命令ｋが、全て同時に発行される。
２．サイクルｉ＋１：スレッドＡからの命令ｊ＋２、スレッドＢからの命令ｋ＋１、スレッドＣからの命令ｍが、全て同時に発行される。
３．サイクルｉ＋２：スレッドＡからの命令ｊ＋３、スレッドＣからの命令ｍ＋１及びｍ＋２が、全て同時に発行される。
【００２４】
他の型式のマルチスレッディングをＳＭＴから区別するために、一度に１つのスレッドのみからの命令しか発行することができない場合を示すために一時的マルチスレッディングという用語が用いられる。
【００２５】
ハードウェアのコスト：
インターリーブ型マルチスレッディングに関して論じたハードウェア・コストに加えて、ＳＭＴは、各パイプライン・ステージが、処理中の各命令のスレッドＩＤを追跡する追加コストを有する。やはり、キャッシュ及びＴＬＢなどの共有リソースを、多数のアクティブ・スレッド用のサイズにする必要がある。
【００２６】
ＩＢＭに譲渡され、引用により本明細書に組み入れられる、２０１０年１１月２日に発行された「Ａｐｐａｒａｔｕｓ  ｆｏｒ  ａｄｊｕｓｔｉｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｔｈｒｅａｄ  ｐｒｉｏｒｉｔｙ  ｉｎ  ａ  ｍｕｌｔｉ−ｔｈｒｅａｄ  ｐｒｏｃｅｓｓｏｒ」と題する特許文献１によれば、データ・プロセッサがソフトウェア・プログラムを実行する速度を向上させるために多くの技術が用いられている。これらの技術には、プロセッサのクロック速度を高めること、キャッシュ・メモリを用いること、及び予測分岐を用いることが含まれる。プロセッサのクロック速度を高めることは、プロセッサが任意の所与の時間内で相対的により多くの操作を実行することを可能にする。キャッシュ・メモリは、プロセッサに近接して配置され、且つ主メモリより高速で動作するので、プロセッサがデータ及び命令にアクセスするのに要する時間を削減する。予測分岐は、プロセッサが以前の命令の結果に関する予測に基づいて特定の命令を実行することを可能にすることにより、実際の結果を待機する必要をなくし、それにより処理速度を高める。
【００２７】
ある種のプロセッサはさらに、システム性能を強化するためにパイプライン型命令実行を採用している。パイプライン型命令実行においては、処理タスクは多数のパイプライン・ステップ又はステージに分解される。パイプライン化は、以前に発行された命令が特定のプロセスを終了する前に次の命令の処理を開始することを可能にすることによって、処理速度を高めることができる。プロセッサは、シーケンス内の次の命令の処理を開始する前にある１つの命令が完全に処理されるのを待つ必要が無い。
【００２８】
パイプライン型処理を用いるプロセッサは、プロセッサ内の種々異なる作業に振り向けられた多数の異なるパイプライン・ステージを含むことができる。例えば、プロセッサは、逐次的な命令をフェッチ・ステージ、デコード／デスパッチ・ステージ、発行ステージ、実行ステージ、終了（ｆｉｎｉｓｈ）ステージ、及び完了（ｃｏｍｐｌｅｔｉｏｎ）ステージで処理することができる。これら個々のステージの各々は、パイプライン・ステージのそれぞれ独自のセットを使用して所望の処理タスクを遂行することができる。
【００２９】
マルチスレッド命令処理は、処理速度を高めるためパイプライン化と共に用いることができる付加的な技術である。マルチスレッド命令処理は、一組みのプログラム命令を２つ又はそれ以上の別個の命令グループ又は命令スレッドに分割することを伴う。このマルチスレッディング技術は、１つのスレッドからの命令を、別のスレッドが何らかの理由で処理不能である間に、パイプラインを通して処理することを可能にする。これは、特定の命令を実行することができない間、例えば、特定の命令を実行するために必要なデータが直ぐには利用できないキャッシュ・ミス状態の間、全ての命令が停滞してしまうという、単一スレッド形式の命令処理で遭遇する状況を回避する。複数の命令スレッドを処理することが可能なデータ・プロセッサは、同時マルチスレッディング（ＳＭＴ）プロセッサと呼ばれることが多い。
【００３０】
この点で、ソフトウェア業界が用語「マルチスレッディング」を使用する仕方と、コンピュータ・アーキテクチャ業界が用語「マルチスレッディング」を使用する仕方の間に違いがあることに留意されたい。ソフトウェア業界は、複数の関連するスレッドに細分化された単一タスクを指すのに用語「マルチスレッディング」を使用する。コンピュータ・アーキテクチャにおいては、用語「マルチスレッディング」は、互いに独立であり得る複数スレッドを指すのに使用される。本明細書においては、用語「マルチスレッディング」は、コンピュータ・アーキテクチャ業界によって使用されるのと同じ意味で用いる。
【００３１】
マルチスレッディングを促進するために、異なるスレッドからの命令が、全体としてのプロセッサのパイプライン内のどこかの点において何らかの方式でインターリーブされる。一般に、ＳＭＴプロセッサ内での処理のために命令をインターリーブするための２つの異なる技術がある。１つの技術は、１つのスレッドを処理するのに遅延を生じるキャッシュ・ミスのような待ち時間が長い何らかのイベントに基づいて、スレッドをインターリーブすることを伴う。この技術では、全てのプロセッサ・リソースは、待ち時間が長い何らかのイベントによってスレッドの処理が遅延するまでは、単一のスレッドに割り当てられている。待ち時間が長いイベントが発生すると、プロセッサは直ちに別のスレッドに切替え、そのスレッドに待ち時間が長い何らかのイベントが発生するまで、又は他方のスレッドをストールさせた事情が解決されるまで、そのスレッドを進行させる。
【００３２】
ＳＭＴプロセッサ内で複数の命令スレッドからの命令をインターリーブするためのその他の一般的な技術は、何らかのインターリービング規則（本明細書ではインターリーブ規則と呼ぶこともある）に従ってサイクル毎（ｃｙｃｌｅ−ｂｙ−ｃｙｃｌｅ  ｂａｓｉｓ）に命令をインターリーブすることを伴う。簡単なサイクル毎インターリービング技術では、異なるスレッドからの命令を単に１対１の関係でインターリーブすることができる。例えば、２スレッド型ＳＭＴプロセッサは、第１のスレッドからの命令を第１のクロックサイクルにおいて取り込み、第２のスレッドからの命令を第２のクロックサイクルにおいて取り込み、第１のスレッドからの別の命令を第３のクロックサイクルにおいて取り込み、以下同様にして、２つの命令スレッド間を行き来することができる。より複雑なサイクル毎インターリービング技術では、各命令スレッドに優先度を割当てるソフトウェア命令を使用すること、そして次に異なるスレッドからの命令を、相対的なスレッド優先度に基づく何らかの規則に従うようにインターリーブすることを伴うものとすることができる。例えば、２スレッド型ＳＭＴプロセッサにおいて、１つのスレッドに対して他方のスレッドより高い優先度が割り当てられた場合、簡単なインターリービング規則は、高い優先度のスレッドからの命令を低い優先度のスレッドからの命令に比べて２倍多くインターリーブ・ストリームに含めるよう要求することができる。
【００３３】
現在使用されている、より複雑なサイクル毎のインターリービング規則は、各スレッドに「１」から「７」までの優先度を割当てて、優先度が低いスレッドからの命令を関数１／（２｜Ｘ−Ｙ｜＋１）に基づいてインターリーブ・ストリーム内に配置し、式中、Ｘ＝ソフトウェアによって割り当てられた第１のスレッドの優先度、Ｙ＝ソフトウェアによって割り当てられた第２のスレッドの優先度とする。２つのスレッドが等しい優先度、例えば、Ｘ＝３及びＹ＝３、を有する場合、関数は１／２の比を与え、２つのスレッドの各々からの命令は、２クロックサイクル毎に１回、インターリーブ命令ストリームに含められることになる。スレッドの優先度が２だけ異なる、例えば、Ｘ＝２及びＹ＝４の場合、関数は１／８の比を与え、優先度の低いスレッドからの命令は、８クロックサイクル毎に１回、インターリーブ命令ストリームに含められることになる。
【００３４】
優先度規則を用いて、特定のスレッドからの命令を含める頻度を選択することは、一般に、ソフトウェアによって割り当てられた各スレッドの優先度に基づいてプロセッサ・リソースが割り当てられることを保証することを意図したものである。しかし、単にソフトウェアによって割り当てられた優先度に依拠することではプロセッサ・リソースの最適な割当てをもたらし得ない状況が存在する。具体的には、ソフトウェアによって割り当てられたスレッドの優先度は、命令の特定のスレッドがプロセッサ・パイプラインを通して進行する機能に影響を与えることがある例えばキャッシュ・ミスのようなプロセッサ・イベントを考慮に入れることができない。従って、プロセッサ内でのある種のイベントの発生は、マルチスレッド・プロセッサにおいてプロセッサ・リソースを異なる命令スレッド間に効率的に割り当てるという目標を完全に又は少なくとも部分的に挫折させることがある。
【００３５】
例えば、２スレッド型システムにおいて、第１の命令スレッドにソフトウェアによって優先度５を割り当てることができ、他方、第２の命令スレッドにソフトウェアによって優先度２を割り当てることができる。上記の優先度規則１／（２｜Ｘ−Ｙ｜＋１）を用いると、ソフトウェアによって割り当てられたこれらの優先度は、優先度が低いスレッドからの命令は１６クロックサイクル毎に１回だけインターリーブ命令ストリームにインターリーブされ、他方、優先度が高い命令スレッドからの命令は１６クロックサイクル毎に１５回インターリーブされることを命ずることになる。優先度が高い命令スレッドからの命令がキャッシュ・ミスに遭遇した場合、キャッシュ・ミスの発生により、その命令のためのデータが利用可能になるまでそれぞれの命令スレッドの実行が事実上ストールする可能性がある場合でも、優先度規則は依然として、１６個の命令のうち１５個の命令が、優先度が高い命令スレッドからの命令を含むことを要求することになる。
【００３６】
一実施形態において、ＳＭＴプロセッサ内の各命令スレッドには、ソフトウェアによって割り当てられた基本入力処理優先度が関連付けられる。処理中の命令又は処理される命令に関して何らかの所定のイベント又は事情が発生しない限り、それぞれのスレッドの基本入力処理優先度を用いて、何らかの命令インターリーブ規則に従って、スレッド間のインターリーブ頻度が決められる。しかし、プロセッサ内で特定の命令に関連した何らかの所定のイベント又は事情が発生すると、１つ又は複数の命令スレッドの基本入力処理優先度が調整されて１つ又は複数の調整された優先度値が生成される。次いで、命令インターリーブ規則は、調整されていない基本入力処理優先度値と共に、調整された１つ又は複数の優先度値に従って実施される。
【００３７】
引用により本明細書に組み入れられるインテル（Ｉｎｔｅｌ）（登録商標）社の非特許文献１には、インテル（登録商標）ハイパー・スレッディングが説明されている。この非特許文献１によれば、単一プロセッサ・システム上のシステム性能を向上させるための努力は、伝統的にプロセッサをより高機能にすることに集中されてきた。プロセッサ設計に対するこれらのアプローチは、より高いクロック速度、命令レベル並列度（ＩＬＰ）及びキャッシュを通じて、プロセッサがより多くの命令をより速く処理することができるようにすることに集中されてきた。より高いクロック速度を達成するための技術は、マイクロ・アーキテクチャをより微細な粒度にパイプライン化することを含み、これはスーパー・パイプライン化とも呼ばれている。クロック周波数が高いほど、秒毎に実行できる命令の数が増加することにより、性能を大きく向上させることができる。しかし、スーパー・パイプライン化マイクロ・アーキテクチャでは、実行される命令が遙かに多いので、パイプラインを中断するキャッシュ・ミス、割り込み、及び分岐誤予測などのイベントを処理することは、より一層重要になり、且つ、障害は、よりコストが高くつくことになる。ＩＬＰは、クロックサイクル毎に実行される命令の数を増やす技術を指す。例えば、多くのスーパースカラ・プロセッサの実装は、命令を同時に処理することができる複数の実行ユニットを有する。これらのスーパースカラ実装においては、幾つかの命令を各クロックサイクルで実行することができる。しかし、簡単なイン・オーダ実行の場合、単に複数の実行ユニットを有するだけでは十分ではない。課題は、実行するのに十分な命令を見出すことである。１つの技術は、プログム順序ではなく命令依存関係に基づいて大きなウィンドウの命令が同時に評価されて実行ユニットに送られる、アウト・オブ・オーダ実行である。システム・メモリへのアクセスは遅く、ハード・ディスクへのアクセスよりも速いとはいえ、プロセッサの実行速度と比較すると何桁も遅い。システム・メモリへのアクセスによって導入される遅延（待ち時間と呼ばれる）を減らすための１つの方法は、プロセッサの近くに高速キャッシュを追加することである。キャッシュは、頻繁にアクセスされるデータ又は命令への高速メモリ・アクセスを提供する。しかし、キャッシュ速度が高まるにつれて、熱放散及びコストの問題も大きくなる。この理由により、プロセッサはキャッシュ階層を伴って設計されることが多く、このキャッシュ階層においては、高速の小さいキャッシュがプロセッサ・コアの近傍に配置され、プロセッサ・コアのアクセス待ち時間に近いアクセス待ち時間で動作する。アクセス頻度がより少ないデータ又は命令を取り扱う、順次に大きくなるキャッシュが、より長いアクセス待ち時間で実装される。とはいえ、必要なデータがどのプロセッサ・キャッシュ内にも存在しない事態が生じることがある。そのようなキャッシュ・ミスを処理するには、システム・メモリ又はハード・ディスクにアクセスすることを必要とし、それらの時間中、プロセッサは、メモリ・トランザクションが終了するのを待つ間ストールする可能性が高い。プロセッサ性能を１つの世代から次世代へ向上させるための大部分の技法は、複雑であり、相当なダイ・サイズ及び電力コストを付加することが多い。これらの技法のいずれも、命令フローにおける並列度が限られているので１００パーセントの効率では機能しない。その結果、プロセッサ内の実行ユニットの数を２倍にしても、プロセッサの性能は２倍にはならない。同様に、クロック速度を単に２倍にしても、より遅いメモリ・サブシステムによって失われるプロセッサ・サイクルの数のため、性能は２倍にはならない。
【００３８】
マルチスレッディング
プロセッサの能力が向上するにつれて性能に対する要求も増し、そのことが、最大効率に関してプロセッサ・リソースに対する圧力を高めてきた。プロセッサが単一タスクの実行中に特定のイベントが完了するのを待つ間の無駄な時間に注目して、ソフトウェア開発者は、プロセッサが同じ時間に何か他の仕事を行うことができないかを考え始めた。
【００３９】
解決策を導き出すために、ソフトウェア設計者は、スレッドと呼ばれるプログラムの実行ピースをサポートする、オペレーティング・システムを書き始めた。スレッドは独立に走ることができる小さいタスクである。各スレッドはそれぞれのタイム・スライスを確保し、それゆえに各スレッドはプロセッサ利用の１つの基本単位を表す。スレッドが編成されてプロセスとなり、プロセスは、１つ又は複数のスレッドから構成される。あるプロセス内の全てのスレッドが、プロセス・リソースへのアクセスを共有する。
【００４０】
これらのマルチスレッディング・オペレーティング・システムは、別のスレッドが何かが起るのを待っている間に、１つのスレッドが走ることを可能にする。インテル・プロセッサをベースとするパーソナル・コンピュータ及びサーバ上で、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）ウィンドウズ（Ｗｉｎｄｏｗｓ）＊２０００及びウィンドウズ＊ＸＰといった今日のオペレーティング・システムは、全てマルチスレッディングをサポートする。実際、オペレーティング・システム自体がマルチスレッド化されている。それらの一部分は、他の部分がストールしている間に走ることができる。
【００４１】
マルチスレッディングから利益を得るためには、プログラムは並列に走ることができる実行可能セクションを有することが必要である。即ち、プログラムは、長い単一の命令シーケンスとして展開されるのではなく、論理演算セクションに分解される。このようにして、アプリケーションが互いに独立に走る操作を実行する場合、それらの操作はスレッドに分解され、それらスレッドの実行はオペレーティング・システムによってスケジューリングされ、制御される。これらのセクションは、異なることを実行するように、例えば、マイクロソフト・ワード（Ｍｉｃｒｏｓｏｆｔ  Ｗｏｒｄ）＊が、ユーザがタイプ入力している間に文書の改ページ位置修正（ｒｅｐａｇｅｎａｔｅ）を可能にするように、作成することができる。改ページ位置修正は１つのスレッド上で行われ、キーストロークの処理は別のスレッド上で行われる。単一プロセッサ・システム上では、これらのスレッドは逐次的に実行され、同時には実行されない。プロセッサは、キーストローク・スレッドと改ページ位置修正スレッドとの間で、両方のプロセスが同時に行われているように見えるほど十分に速く交互に切り替える。これは機能的分解マルチスレッディング（ｆｕｎｃｔｉｏｎａｌｌｙ  ｄｅｃｏｍｐｏｓｅｄ  ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）と呼ばれる。
【００４２】
マルチスレッド・プログラムは、並列スレッド上で同じタスクを実行するように書くこともできる。これはデータ分解マルチスレッド化と呼ばれ、この場合、スレッドは処理されるデータだけが異なる。例えば、グラフィック・アプリケーションにおけるシーンを、各スレッドがシーンの半分に対して作業するように描くことができる。典型的には、データ分解アプリケーションは、スループット性能のためにスレッド化され、他方、機能的分解アプリケーションは、ユーザ応答性又は機能性の問題のためにスレッド化される。
【００４３】
マルチスレッド・プログラムが単一プロセッサ機械上で実行されるとき、スレッド間でコンテキストを切替えるときに多少のオーバーヘッドが発生する。スレッドの間の切替えは時間がかかるので、このように２つのスレッドを実行するのは、２つのスレッドを逐次的に実行するよりも効率が悪いように見える。しかし、どちらかのスレッドがシステム・デバイス上でユーザを待つ必要がある場合、他のスレッドに操作を続けさせる機能は、切替えのオーバーヘッドの全てを直ちに補償する。グラフィック・アプリケーションの例における１つのスレッドは、ユーザ入力を扱うので、待機しているだけの頻繁な期間が確実に生じる。スレッド間で切替えることにより、マルチスレッド・プログラムをサポートするオペレーティング・システムは、それらが単一プロセッサ・システム上で走っている場合でも、性能及びユーザ応答性を向上させることができる。
【００４４】
実世界では、マルチスレッディングを用いる大きいプログラムは、２つよりも遥かに多数のスレッドを走らせることが多い。データベース・エンジンのようなソフトウェアは、受け取った記録に対する要求毎に新しい処理スレッドを作成する。こうすることで、どの単一のＩ／Ｏ操作も新たな要求が実行されることを妨げず、且つ、ボトルネックを防ぐことができる。ある種のサーバ上では、この手法は、数千のスレッドが同じ機械上で同時に走っていること意味するものであり得る。
【００４５】
マルチプロセッシング
マルチプロセッシング・システムは、同時に走る複数のプロセッサを有する。伝統的なインテル（登録商標）アーキテクチャ・マルチプロセッシング・システムは、２個から約５１２個までのいずれかの個数のプロセッサを有する。マルチプロセッシング・システムは異なるスレッドを異なるプロセッサ上で走らせる。この機能は、プログラム性能を著しく加速する。それで、２つのスレッドは互いにおおよそ独立に、プロセッサのリソースを得るためのスレッド切替えを必要とせずに、走ることができる。マルチプロセッサ・オペレーティング・システムはそれ自体マルチスレッド化されており、スレッドは最も有利に別々のプロセッサを使用することができる。
【００４６】
当初は、非対称型及び対称型の２種類のマルチプロセッシングがあった。非対称型システム上では、１つ又は複数のプロセッサが、もっぱら特定のタスク、例えばオペレーティング・システムの実行専用にされる。残りのプロセッサは、他の全てのタスク（一般に、ユーザ・アプリケーション）用に使用可能である。この構成は最適ではないことが直ぐに明らかになった。あるマシン上では、オペレーティング・システム・プロセッサは１００パーセントの容量で走っているのに対し、その一方で、ユーザ割当てプロセッサは何も実行していなかった。短期間のうちに、システム設計者等は、より上手く処理負荷のバランスを取るアーキテクチャ、即ち対称型マルチプロセッシング（ＳＭＰ）を好むようになった。「対称」は、いずれのスレッドも、それがオペレーティング・システムからのスレッドであってもユーザ・アプリケーションからのスレッドであっても、いずれのプロセッサ上でも走ることができることを意味する。このようにすることで、全コンピューティング負荷が全てのコンピューティング・リソースにわたって一様に分散する。今日、対称型マルチプロセッシング・システムが標準となり、非対称型設計は殆ど姿を消した。
【００４７】
ＳＭＰシステムは、２倍の数のプロセッサを使用するが、性能は２倍にはならない。性能が単純に２倍になるのを妨げる２つの因子は、作業負荷をいかに上手く並列化することができるかということ、及び、システム・オーバーヘッドである。２つの因子はスレッド間の相互作用の効率、即ち、同じリソースに対していかに競合するか、及び他のスレッドといかに交信するかを支配する。
【００４８】
マルチプロセッサ・システム
今日のサーバ・アプリケーションは、並列に実行されることができる複数のスレッド又はプロセスで構成される。オンライン・トランザクション処理及びウェブ・サービスは、高速処理性能のために同時に実行することができる多数のソフトウェア・スレッドを有する。デスクトップ・アプリケーションでさえもますます並列になってきている。インテルの設計者等は、スレッド・レベルの並列化（ＴＬＰ）を実装して、トランジスタ数及び電力消費に対する性能を向上させた。
【００４９】
高級及び中級サーバの両方の市場において、システムからより高い性能を得るためにマルチプロセッサが普通に使用されている。より多くのプロセッサを付加することにより、アプリケーションは、複数のプロセッサ上で複数のスレッドを同時に実行することにより潜在的に相当な性能向上を得ることになる。これらのスレッドは、同じアプリケーションからのもの、同時に走っている異なるアプリケーションからのもの、オペレーティング・システム・サービスからのもの、又はバックグランド・メンテナンスを行っているオペレーティング・システム・スレッドからのものであり得る。マルチプロセッサ・システムは長年にわたって用いられており、プログラマは、高性能レベルでマルチプロセッサを利用する技術に精通している。
【００５０】
引用により本明細書に組み入れられる、Ｂａｒｒｉｃｋ他による２０１１年４月１４日に公開された「Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｇｉｓｔｅｒ  Ｍａｐｐｅｒ」と題する特許文献２は、レジスタ・リネーム機構において中間レジスタ・マッパを使用する方法、プロセッサ、及びコンピュータ・プログラム製品を開示する。論理レジスタ・ルックアップは、ディスパッチされた命令に関連する論理レジスタへのヒットが生じたかどうかを判断する。この点について、論理レジスタ・ルックアップは、アーキテクチャ化レジスタ・マッパ、統合メイン・マッパ、及び中間レジスタ・マッパを含むレジスタ・マッパ群からの少なくとも１つのレジスタ・マッパ内を検索する。論理レジスタに対する単一のヒットがレジスタ・マッパ群の中から選択される。統合メイン・マッパ内のマッパ・エントリを有する命令が終了したが完了していない場合、統合メイン・マッパ内のレジスタ・マッパ・エントリのマッピング・コンテンツは中間レジスタ・マッパに移動され、統合レジスタ・マッパ・エントリは解放され、それにより再使用のために利用可能な統合メイン・マッパ・エントリの数を増やす。
【００５１】
引用により本明細書に組み入れられる、Ｌｅｖｙ他による１９９８年４月２日出願の「Ｍｅｃｈａｎｉｓｍ  ｆｏｒ  ｆｒｅｅｉｎｇ  ｒｅｇｉｓｔｅｒｓ  ｏｎ  ｐｒｏｃｅｓｓｏｒｓ  ｔｈａｔ  ｐｅｒｆｏｒｍ  ｄｙｎａｍｉｃ  ｏｕｔ−ｏｆ−ｏｒｄｅｒ  ｅｘｅｃｕｔｉｏｎ  ｏｆ  ｉｎｓｔｒｕｃｔｉｏｎｓ  ｕｓｉｎｇ  ｒｅｎａｍｉｎｇ  ｒｅｇｉｓｔｅｒｓ」と題する特許文献３は、別の命令がアーキテクチャ・レジスタを再定義する前に、アーキテクチャ・レジスタに割り当てられたリネーム・レジスタを解放することを開示している。リネーム・レジスタは、命令をアウト・オブ・オーダで実行するシングル又はマルチスレッド・プロセッサのいずれかにおいて、アウト・オブ・オーダで命令を動的に実行するためにプロセッサによって用いられる。リネーム・レジスタを解放するための機構が説明されており、この機構は、特定のアーキテクチャ・レジスタに割り当てられる物理（リネーム）レジスタを解放することができるときをプロセッサに示すための、コンパイラによって使用される一組の命令から構成される。この機構は、リネーム・レジスタが、アーキテクチャ・レジスタへの割当てのため必要でなくなるとすぐに、リネーム・レジスタを再配置又は再割当てして別の値をストアすることを可能にする。割当てから解放されるリネーム・レジスタを識別する命令を有するプロセッサを有効化する少なくとも３つの方式があり、即ち、（１）ユーザが、特定のリネーム・レジスタを参照する命令をプロセッサに明示的に与えることができる方式、（２）オペレーティング・システムが、スレッドが遊休状態のときにそのスレッドに関連したレジスタの組を参照する命令を与えることができる方式、及び（３）コンパイラが、プロセッサに定時された複数の命令を有する命令を含むことができる方式である。アーキテクチャ・レジスタに割り当てられたリネーム・レジスタを解放するためにプロセッサに与えられる命令の少なくとも５つの実施形態は、（１）フリー・レジスタ・ビット、（２）フリー・レジスタ、（３）フリー・マスク、（４）フリー・オプコード、及び（５）フリー・オプコード／マスクである。フリー・レジスタ・ビット命令は、アウト・オブ・オーダ・プロセッサに対して最大のスピードアップをもたらし、フリー・レジスタ命令は最小のスピードアップをもたらす。
【００５２】
引用により本明細書に組み入れられる非特許文献２（「Ｐｏｗｅｒ  ＩＳＡＴＭ  Ｖｅｒｓｉｏｎ  ２．０６  Ｒｅｖｉｓｉｏｎ  Ｂ」）は、例示的なＲＩＳＣ（縮小命令セット・コンピュータ）命令セット・アーキテクチャを開示している。本明細書では、例示的な実施形態を実証するためにＰｏｗｅｒ  ＩＳＡが用いられるが、本発明はＰｏｗｅｒ  ＩＳＡにもＲＩＳＣアーキテクチャにも限定されない。当業者であれば、様々なアーキテクチャにおける本発明の使用を容易に理解するであろう。
【００５３】
引用により本明細書に組み入れられる非特許文献３は、例示的なＣＩＳＣ（複雑命令セット・コンピュータ）命令セット・アーキテクチャを開示している。
【先行技術文献】
【特許文献】
【００５４】
【特許文献１】米国特許第７，８２７，３８８号明細書
【特許文献２】米国特許出願公開第２０１１／００８７８６５号
【特許文献３】米国特許第６，３１４，５１１号明細書
【特許文献４】米国特許第６，１８９，０８８号明細書
【非特許文献】
【００５５】
【非特許文献１】「Ｉｎｔｅｌ（登録商標）  Ｈｙｐｅｒ−Ｔｈｒｅａｄｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ，  Ｔｅｃｈｎｉｃａｌ  Ｕｓｅｒ’ｓ  Ｇｕｉｄｅ」Ｉｎｔｅｌ（登録商標）ｃｏｒｐｏｒａｔｉｏｎ、２００３年
【非特許文献２】「Ｐｏｗｅｒ  ＩＳＡＴＭ  Ｖｅｒｓｉｏｎ  ２．０６  Ｒｅｖｉｓｉｏｎ  Ｂ」ＩＢＭ（登録商標）、２０１０年７月２３日。
【非特許文献３】「ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｉｎｃｉｐｌｅｓ  ｏｆ  Ｏｐｅｒａｔｉｏｎ」ＳＡ２２−７８３２−０８、第９版、ＩＢＭ（登録商標）、２０１０年８月
【発明の概要】
【発明が解決しようとする課題】
【００５６】
本発明の課題は、実行中のプログラムに関するオペランド活性情報を維持する方法を提供することである。
【課題を解決するための手段】
【００５７】
オペランド活性は、プログラム実行、オペランド活性の変更を指示する機械語命令の実行、及びオペレーティング・システム制御によって制御することができる。一実施形態において、ある特定の機械語命令は、アーキテクチャ化レジスタのレジスタ・オペランドの最終使用（ｌａｓｔ−ｕｓｅ）を示す。最終使用レジスタは、その後は、機械後命令によってアクセス可能ではなくなり、いずれかの物理レジスタによってバックアップされる必要がないものとなり得る。有効化命令により、後でそのアーキテクチャ化レジスタを再確立して、物理レジスタがそのアーキテクチャ化レジスタに割り当てられるようにすることができる。１つ又は複数のアーキテクチャ化レジスタをいつでも無効化することができる。１つの実施形態において、オペレーティング・システムは、所与のアプリケーション・プログラムに対してアーキテクチャ化レジスタのサブセットのみを有効化する。アプリケーション・プログラムは、サブセットのアーキテクチャ化レジスタを有効化及び無効化することができるが、サブセット中にはないアーキテクチャ化レジスタは有効化することはできない。
【００５８】
本発明の一態様において、実行中のプログラムに関して活性情報が維持され、方法は、プロセッサによって現行オペランド状態情報を維持することを含み、現行オペランド状態情報は、対応する現行オペランドが第１のプログラム・モジュールによる使用のために有効化されているか又は無効化されているかのいずれであるかを示すものであり、第１のプログラム・モジュールは、命令セット・アーキテクチャ（ＩＳＡ）の機械語命令を含み、第１のプログラム・モジュールは、プロセッサによって現在実行中である。現行オペランドは、第１のプログラム・モジュールの機械語命令によってアクセスされ、このアクセスすることは、現行オペランド状態情報を用いて、以前にストアされた現行オペランド値が第１のプログラム・モジュールによってアクセス可能であるかどうかを判断することを含む。
【００５９】
一実施形態において、現行オペランドが無効化されていることに応答して、上記のアクセスすることは、ａ）アーキテクチャ指定値を返すことであって、アーキテクチャ指定値が、未定義値、ゼロ値、全て「１」から成る値、又はプログラム指定デフォルト値のいずれかである、アーキテクチャ指定値を返すことと、ｂ）通知を行うことであって、通知ステップが、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生及び抑制すること、デバッグ情報を与えること、及び無効化オペランドへのアクセスの発生を示すように少なくとも１つのレジスタを設定することのうちのいずれかである、通知を行うことと、を含むａ）及びｂ）のうちの少なくとも１つを含む。
【００６０】
一実施形態において、プログラム実行は、第１のプログラム・モジュールから第２のプログラム・モジュールに移行され、ａ）第１のプログラム・モジュールの現行オペランド状態情報をコンテキスト切替え退避領域内にセーブすることと、ｂ）コンテキスト切替え退避領域から、新しいオペランド状態情報を、実行される第２のプログラムの現行オペランド状態情報としてロードすることと、ロードされた現行オペランド状態情報を用いて第２のプログラムの実行を開始することとを含む、ａ）からｂ）が実施される。
【００６１】
一実施形態において、実行を移行することは、コンテキスト切替え操作であり、ここで現行オペランドは、命令によって識別される一般レジスタのアーキテクチャ化された（ａｒｃｈｉｔｅｃｔｅｄ）一般レジスタ値、又は、命令によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のいずれかで構成され、ここで実行を移行することは、第１のプログラム・モジュールのプログラム・カウンタ値及び有効化現行オペランドの現行オペランド値をコンテキスト切替え退避領域にセーブすることと、コンテキスト切替え退避領域から、新しい有効化オペランドの新しいオペランド値を、実行される第２のプログラムの現行オペランドの現行オペランド値としてロードすることとをさらに含み、ここで開始される第２のプログラムの実行は、ロードされた現行オペランドを使用する。
【００６２】
一実施形態において、現行オペランド状態情報は、現行オペランド状態情報を現行プログラムによって有効化状態と無効化状態との間で変えることができるかどうかを制御するための、オペランド有効化制御をさらに含む。
【００６３】
一実施形態において、第１のオペランド無効化命令が実行されるとき、この実行は、第１のオペランドの現行オペランド状態情報により第１のオペランドを無効化させ、ここで無効化オペランドの読み出しは、アーキテクチャ依存デフォルト値を返し、第２のオペランド有効化命令が実行されるとき、この実行は、第２のオペランドの現行オペランド状態情報により第２のオペランドを有効化させ、ここで有効化オペランドの読み出しは、有効化オペランドに以前にストアされた値を返す。
【００６４】
一実施形態において、デフォルト値は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタ内に以前にストアされた値、全て１、全て０、インクリメント値又はディクリメント値のいずれかで構成され、ここでインクリメント値は読み出しアクセス毎にインクリメントされ、ディクリメント値は読み出しアクセス毎にディクリメントされる。
【００６５】
一実施形態において、第１のオペランド無効化命令はプリフィックス命令であり、プリフィックス命令の実行は、プログラム順序においてプリフィックス命令に続く次順命令による使用の後で第１のオペランドが無効化されることをプロセッサに示す。
【００６６】
一実施形態において、無効化オペランドに対する書込み操作は、無効化オペランドを有効化させ、ここで第２のオペランド有効化命令は、第２のオペランドに書込むための書込み命令である。
【００６７】
上で要約した方法に対応するシステム及びコンピュータ・プログラム製品もまた本明細書で説明され、特許請求される。
【００６８】
更なる特徴及び利点が、本発明の技術を通じて実現される。本発明の他の実施形態及び態様は、本明細書で詳細に説明され、特許請求される本発明の一部分とみなされる。
【００６９】
次に本発明の実施形態を、添付の図面を参照しながら、例示のみを目的として説明する。
【図面の簡単な説明】
【００７０】
【図１】例示的なプロセッサ・システム構成を示す。
【図２】第１の例示的なプロセッサ・パイプラインを示す。
【図３】第２の例示的なプロセッサ・パイプラインを示す。
【図４】例示的なアーキテクチャ化レジスタ機構の実装を示す。
【図５】例示的なアーキテクチャ化レジスタ機構の実装を示す。
【図６】例示的なアーキテクチャ化レジスタ機構の実装を示す。
【図７】例示的なアーキテクチャ化レジスタ有効化／無効化の実装を示す
【図８】第１のプログラム・フロー図からの例示的な移行を示す。
【図９】第２のプログラム・フロー図への例示的な移行を示す。
【図１０】アーキテクチャ化レジスタを有効化及び無効化する命令の例示的なフロー図を示す。
【発明を実施するための形態】
【００７１】
アウト・オブ・オーダ（ＯｏＯ）プロセッサは、典型的には複数の実行パイプラインを含み、この複数の実行パイプラインは、データ依存性を減らして、種々の命令型に対して割り当てられる実行パイプラインの稼働率を最大にすることによってサイクル毎の平均命令速度を最大にするために、プログラム・シーケンス（又は「プログラム順序」）が指定するのとは異なる順序で日和見的に命令を実行することができる。命令実行の結果は、典型的には、限定的な深さの１つ又は複数のレジスタ・ファイルの物理レジスタ内に一時的に保持される。ＯｏＯプロセッサは、典型的には、プログラム順序内の次の命令による所与のアーキテクチャ化レジスタの再使用に起因する命令の不必要なシリアル化を避けるために、レジスタ・リネームを用いる。
【００７２】
前述の特許文献２に記載されているように、レジスタ・リネーム操作の下で、命令によってターゲットにされる各々のアーキテキチャ化（即ち、論理）レジスタが、レジスタ・ファイル内の一意の物理レジスタにマップされる。現在の高性能ＯｏＯプロセッサにおいては、複数のレジスタ・ファイル内の物理レジスタを管理するために統合メイン・マッパが利用されている。論理−物理レジスタ変換をストアする（即ち、マッパ・エントリ内に）ことに加えて、統合メイン・マッパはまた、依存性データ（即ち、キュー位置データ）をストアする役割も担い、これは完了による命令順序付けのために重要である。
【００７３】
統合メイン・マッパに基づくリネーム・スキームでは、ＯｏＯプロセッサによる再使用のためにできる限り早くマッパ・エントリを解放することが望ましい。しかし、従来技術では、マッパ・エントリによってマップされたレジスタに書込む命令が完了するまで、統合メイン・マッパ・エントリを解放することができない。この制約は強制的であり、その理由は、完了まで、「終了した」（即ち、特定の実行ユニット（ＥＵ）が成功裏に命令を実行した）命令が、その命令が「完了する」ことができる前且つアーキテクチャ化されたレジスタのコヒーレント状態が更新される前に、依然としてバッファ消去（ｆｌｕｓｈ）される可能性があるためである。
【００７４】
現在の実装において、統合メイン・マッパにおけるリソース制約は、一般に統合メイン・マッパのエントリの数を増すことによって対処されてきた。しかし、統合メイン・マッパのサイズを大きくすることは、付随して、ダイ面積、複雑さ、電力消費、及びアクセス時間に関する不利益がある。
【００７５】
特許文献２には、データ処理システム内の１つ又は複数の物理レジスタの組を管理する方法が提示されている。このデータ処理システムは、命令をアウト・オブ・オーダで処理するプロセッサを有し、ここで命令は論理レジスタを参照し、各々の論理レジスタは１つ又は複数の物理レジスタの組にマップされる。１つ又は複数の命令のディスパッチに応答して、レジスタ管理ユニットは論理レジスタ・ルックアップを実行し、これにより、１つ又は複数のレジスタ・マッパ内で、ディスパッチされた命令に関連した論理レジスタに対するヒットが生じたかどうかが判断される。この点について、論理レジスタ・ルックアップは、アーキテクチャ化レジスタ・マッパ、統合メイン・マッパ、及び中間レジスタ・マッパを含むレジスタ・マッパ群からの少なくとも１つのレジスタ・マッパ内を検索する。レジスタ管理ユニットは、レジスタ・マッパ群の中の論理レジスタに対する単一のヒットを選択する。統合メイン・マッパ内のマッパ・エントリを有する命令が終了したがまだ完了していない場合、レジスタ管理ユニットは、統合メイン・マッパ内の統合メイン・マッピング・エントリの論理−物理レジスタ・リネーム・データを中間レジスタ・マッパに移動させ、統合メイン・マッパは、統合メイン・マッピング・エントリを命令の完了の前に解放する。統合メイン・マッピング・エントリの解放は、再使用のために利用可能な統合メイン・マッピング・エントリの数を増やす。
【００７６】
次に図を参照し、特に図１を参照すると、図２を参照しながら以下で説明する中間レジスタ・マッパを使用するＯｏＯプロセッサを含むことができるデータ処理システム１００の例が示されている。図１に示すように、データ処理システム１００は、中央処理ユニット（ＣＰＵ）１１０を含み、これは図２のプロセッサ２００によって実装することができる。ＣＰＵ１１０は、種々の他の構成要素に相互接続１１２によって結合される。読み出し専用メモリ（ＲＯＭ）１１６は、相互接続１１２に結合され、データ処理システム１００の特定の基本機能を制御する基本入力／出力システム（ＢＩＯＳ）を含む。ランダム・アクセス・メモリ（ＲＡＭ）１１４、Ｉ／Ｏアダプタ１１８、及び通信アダプタ１３４もまた、システム・バス１１２に結合される。Ｉ／Ｏアダプタ１１８は、記憶デバイス１２０と通信する小型コンピュータ・システム・インタフェース（ＳＣＳＩ）アダプタとすることができる。通信アダプタ１３４は、相互接続１１２をネットワーク１４２にインターフェース接続し、データ処理システム１００が遠隔コンピュータ１４０のような他のシステムと通信することを可能にする。入力／出力デバイスもまた、ユーザ・インタフェース・アダプタ１２２及びディスプレイ・アダプタ１３６を介して相互接続１１２に接続される。キーボード１２４、トラックボール１３２、マウス１２６及びスピーカ１２８は全て、ユーザ・インタフェース・アダプタ１２２を介してバス１１２に相互接続される。ディスプレイ１３８は、ディスプレイ・アダプタ１３６によってシステム・バス１１２に接続される。このようにして、データ処理システム１００は、例えば、キーボード１２４、トラックボール１３２、及び／又はマウス１２６を通して入力を受取り、そして、例えばネットワーク１４２を介して、記憶デバイス１２０、スピーカ１２８、及び／又はディスプレイ１３８に出力を供給する。データ処理システム１００内に示したハードウェア要素は網羅的であることを意図したものではなく、１つの実施形態におけるデータ処理システムの主要な構成要素を表すものである。
【００７７】
データ処理システム１００の操作は、ファームウェア及び／又はソフトウェアなどのプログラム・コードによって制御することができ、これには、典型的には、例えば、ＡＩＸ（登録商標）（「ＡＩＸ」はＩＢＭ社の商標である）のようなオペレーティング・システム並びに１つ又は複数のアプリケーション又はミドルウェア・プログラムが含まれる。
【００７８】
次に図２を参照すると、スーパースカラ・プロセッサ２００が描かれている。命令は、メモリ（例えば、図１のＲＡＭ１１４）から取出され、レベル１命令キャッシュ（Ｌ１  Ｉキャッシュ）２０６と、フェッチ−デコード・ユニット２０８と、命令キュー２１０と、ディスパッチ・ユニット２１２とを含む命令順序付け論理（ＩＳＬ）２０４にロードされる。具体的には、命令は、ＩＳＬ２０４のＬ１  １キャッシュ２０６にロードされる。この命令は、要求されるまでＬ１  １キャッシュ２０６内に保持され、又は必要とされない場合には置き換えられる。命令はＬ１  １キャッシュ２０６から取出され、フェッチ−デコード・ユニット２０８によってデコードされる。現行の命令がデコードされた後、現行の命令は命令キュー２１０にロードされる。ディスパッチ・ユニット２１２は、命令を命令キュー２１０からレジスタ管理ユニット２１４並びに完了ユニット２２１にディスパッチする。完了ユニット２２１は、一般実行ユニット２２４及びレジスタ管理ユニット２１４に結合され、発行された命令がいつ完了したかをモニタする。
【００７９】
ディスパッチ・ユニット２１２が現行の命令をディスパッチすると、レジスタ管理ユニット２１４の統合メイン・マッパ２１８が、宛先論理レジスタ番号を、論理レジスタに現在割り当てられていない物理レジスタ・ファイル２３２ａ−２３２ｎ内の物理レジスタに割当ててマップする。宛先は、物理レジスタ・ファイル２３２ａ−２３２ｎの中の指定された物理レジスタにリネームされたと言われる。統合メイン・マッパ２１８は、割り当てられた物理レジスタを、統合メイン・マッパ２１８内にストアされたフリー物理レジスタのリスト２１９から除去する。その宛先論理レジスタへのその後の全ての参照は、フェッチ−デコード・ユニット２０８が同じ論理レジスタに書込む別の命令をデコードするまでは、同じ物理レジスタに向かうことになる。次に、統合メイン・マッパ２１８は、論理レジスタをフリー・リスト２１９から選択された異なる物理的位置にリネームし、マッパが更新されて新しい論理−物理レジスタ・マッパ・データが入力される。論理−物理レジスタ・マッパ・データがもはや必要でなくなると、古いマッピングの物理レジスタがフリー・リスト２１９に戻される。フリー物理レジスタ・リスト２１９が十分な物理レジスタを有していない場合、ディスパッチ・ユニット２１２は、必要な物理レジスタが使用可能になるまで命令ディスパッチを一時停止する。
【００８０】
レジスタ管理ユニット２１４が現行の命令をマップした後、発行キュー２２２が、現行の命令を、実行ユニット（ＥＵ）２３０ａ−２３０ｎを含む一般実行エンジン２２４に発行する。実行ユニット２３０ａ−２３０ｎは、例えば、浮動小数点（ＦＰ）、固定小数点（ＦＸ）、及びロード／ストア（ＬＳ）などの種々の型式のものである。一般実行エンジン２２４は、データ・キャッシュ２３４を介してデータ・メモリ（例えば、図１のＲＡＭ１１４、ＲＯＭ１１６）とデータを交換する。さらに発行キュー２２２は、ＦＰ型、ＦＸ型の命令、及びＬＳ命令を含むことができる。しかし、任意の数及び型式の命令を用いることができることを認識されたい。実行中、ＥＵ２３０ａ−２３０ｎはレジスタ・ファイル２３２ａ−２３２ｎ内の物理的位置からソース・オペランド値を取得し、結果データがあれば、それをレジスタ・ファイル２３２ａ−２３２ｎ及び／又はデータ・キャッシュ２３４内にストアする。
【００８１】
さらに図２を参照すると、レジスタ管理ユニット２１４は、（ｉ）アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、中間レジスタ・マッパ２２０を含むマッパ・クラスタ２１５と、（ｉｉ）発行キュー２２２とを含む。マッパ・クラスタ２１５は、種々の命令の論理レジスタに割り当てられた物理レジスタを追跡する。例示的な一実施形態において、アーキテクチャ化レジスタ・マッパ２１６は、論理−物理レジスタ・マッパ・データの最新の有効な（即ち、チェックポイントされた）状態をストアする各々の型式の１６個の論理（即ち、物理的にマップされていない）レジスタを有する。しかし、種々異なるプロセッサ・アーキテクチャは、例示的な実施形態において説明するように、より多数の又はより少数の論理レジスタを有することができることを認識されたい。アーキテクチャ化レジスタ・マッパ２１６は、チェックポイントされた状態を記述する物理レジスタを識別するポインタ・リストを含む。物理レジスタ・ファイル２３２ａ−２３２ｎは、典型的には、アーキテクチャ化レジスタ・マッパ２１６内のエントリの数より多くのレジスタを含むことになる。リネーム・マッピング・スキームに用いられる物理及び論理レジスタの具体的な数は様々であり得ることに留意されたい。
【００８２】
対照的に、統合メイン・マッパ２１８は、通常、アーキテクチャ化レジスタ・マッパ２１６よりも大きい（典型的には２０エントリまで含む）。統合メイン・マッパ２１８は、論理−物理レジスタ・マッピングの過渡状態の追跡を容易にする。用語「過渡」は、統合メイン・マッパ２１８が、命令がアウト・オブ・オーダで実行される際に仮の論理−物理レジスタ・マッピング・データの追跡を続けることを意味する。ＯｏＯ実行は、典型的には、パイプライン内に新しい命令よりも実行するのに長くかかる（即ち、より多くのクロックサイクルを使用する）古い命令が存在するときに行われる。しかし、ＯｏＯ命令の実行結果が特定の理由（例えば、分岐予測間違え）でバッファ消去される必要があれば、プロセッサは、アーキテクチャ化レジスタ・マッパ２１６によって維持されているチェックポイント状態に戻り、最新の有効状態から実行を再開することができる。
【００８３】
統合メイン・マッパ２１８は、物理レジスタ・ファイル２３２ａ−２３２ｎ内の物理レジスタとアーキテクチャ化レジスタ・マッパ２１６との間の関係を付ける。「統合」という修飾語は、統合メイン・マッパ２１８が、各々のレジスタ・ファイル２３２（例えば、汎用レジスタ（ＧＰＲ）、浮動小数点レジスタ（ＦＰＲ）、固定小数点レジスタ（ＦＸＰ）、例外レジスタ（ＸＥＲ）、条件レジスタ（ＣＲ）、など）専用のマッパをカスタム設計することの複雑さを不要にすることを意味する。
【００８４】
ＯｏＯ命令の過渡的論理−物理レジスタ・マッパ・エントリを作成することに加えて、統合メイン・マッパ２１８は、命令を順序付けるのに重要な依存性データ（即ち、パイプライン中の古い命令の終了に依存する命令）の追跡も続ける。慣例的に、ひとたび統合メイン・マッパ２１８が命令の論理−物理レジスタ変換に入ると、その命令は発行キュー２２２に移動する。発行キュー２２２は、命令が実行のために実行ユニット２３０に対して発行される前のゲートキーパとして機能する。一般規則として、命令は、その命令が、古い命令が終了することに依存する場合には、発行キューを出ることができない。このため、統合メイン・マッパ２１８は、マップされた各々の命令のための発行キュー位置データをストアすることによって依存性データを追跡する。ひとたび命令が一般実行エンジン２２４によって実行されると、命令は「終了した」と言われ、発行キュー２２２からリタイアする。
【００８５】
レジスタ管理ユニット２１４は、満たされた単一発行パイプラインを維持するように、ディスパッチ・ユニット２１２から単一サイクル内で複数の命令を受取ることができる。命令のディスパッチは、統合メイン・マッパ２１８内の使用可能エントリの数によって制限される。中間レジスタ・マッパ２２０がない従来のマッパ・システムにおいては、統合メイン・マッパ２１８が全部で２０のマッパ・エントリを有する場合、同時にイン・フライトとなり得る（即ち、チェックポイントされていない）のは最大で２０の命令である。従って、従来のマッパ・システムのディスパッチ・ユニット２１２は、統合メイン・マッパ２１８から実際にリタイアすることができるより多くの命令を「ディスパッチ」する可能性があることが考えられる。統合メイン・マッパ２１８におけるこのボットルネックの理由は、慣例的に、命令マッパ・エントリが、その命令が「完了する」（即ち、全ての古い命令が実行を「終了する」）まで統合メイン・マッパ２１８からリタイアすることができないためである。
【００８６】
一実施形態により、中間レジスタ・マッパ２２０は、統合メイン・マッパ２１８からの「終了した」が「未完了」である命令が、その命令の最終的な完了の前にリタイアする（即ち、統合メイン・マッパ２１８から除去する）ことができる非タイミング・クリティカル・レジスタとして機能する。ひとたび命令が「完了する」と、完了ユニット２２１が中間レジスタ・マッパ２２０に完了を通知する。次に中間レジスタ・マッパ２２０内のマッパ・エントリが、アーキテクチャ化レジスタ・マッパ２１６内に現在までストアされていた対応するエントリを置き換えることによってアーキテクチャ化レジスタ・マッパ２１６のアーキテクチャ化されたコヒーレント状態を更新することができる。
【００８７】
ディスパッチ・ユニット２１２が命令をディスパッチすると、レジスタ管理ユニット２１４は、命令に関連付けられた論理レジスタ番号を、アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、及び中間レジスタ・マッパ２２０内のマッピングに対して評価して、アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、及び／又は中間レジスタ・マッパ２２０内に一致（一般に「ヒット」と呼ばれる）が存在するかどうか判断する。この評価は、論理レジスタ・ルックアップと呼ばれる。ルックアップが１つより多くのレジスタ・マッパ（即ち、アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、及び／又は中間レジスタ・マッパ２２０）において同時に行われるとき、ルックアップは並列論理レジスタ・ルックアップと呼ばれる。
【００８８】
特定のターゲット論理レジスタの値を更新する各命令が、新しい物理レジスタに割り当てられる。論理レジスタのこの新しいインスタンスが何らかの他の命令によってソースとして用いられるときは、いつも同じ物理レジスタが使用されなければならない。１つの論理レジスタの複数のインスタンスが存在し得るので、その論理レジスタに対応する複数の物理レジスタもまた存在し得る。レジスタ管理ユニット２１４は、（ｉ）特定の命令によって使用される論理レジスタにどの物理レジスタが対応するかを分析すること、（ｉｉ）その論理レジスタに対する参照を適切な物理レジスタに対する参照で置換えること（即ち、レジスタ・リネーム）、及び（ｉｉｉ）いずれかの論理レジスタの新しいインスタンスが作成されるときはいつでも新しい物理レジスタを割り当てること（即ち、物理レジスタ割当て）というタスクを実行する。
【００８９】
最初、何らかの命令がディスパッチされる前には、統合メイン・マッパ２１８は、現在イン・フライトの命令が存在しないので、ヒット／マッチを受取らないことになる。そのようなイベントにおいて、統合メイン・マッパ２１８は、マッピング・エントリを作成する。その後の命令がディスパッチされると、同じ論理レジスタ番号の論理レジスタ・マッチがアーキテクチャ化レジスタ・マッパ２１６と統合メイン・マッパ２１８の両方において見出された場合、現在ＯｏＯで実行中の命令が存在する（即ち、マッピングが過渡状態にある）可能性があるので、統合メイン・マッパ２１８の論理−物理レジスタ・マッピングを選択することが優先される。
【００９０】
統合メイン・マッパ２１８がそのマッパ内にヒット／マッチを見出した後、命令は発行キュー２２２に進み、実行ユニット２３０の１つによる実行のための発行を待つ。一般実行エンジン２２４が命令を実行して「終了」した後、しかし命令が「完了」する前に、レジスタ管理ユニット２１４が、統合メイン・マッパ２１８内に現在見出されるマッピング・エントリを統合メイン・マッパ２１８からリタイアさせ、そのマッピング・エントリを中間レジスタ・マッパ２２０に移動させる。その結果、統合メイン・マッパ２１８内のスロットは、次にディスパッチされる命令をマッピングするために使用可能になる。統合メイン・マッパ２１８とは異なり、中間レジスタ・マッパ２２０は依存性データをストアしない。従って、中間レジスタ・マッパ２２０に移行されたマッピングは、そのソース・マッピングに関連する命令のキュー位置に依存しない（及び追跡しない）。この理由は、発行キュー２２２が、成功した実行の後で「終了したが、完了していない」命令をリタイアさせるからである。対照的に、中間レジスタ・マッパを持たない従来のリネーム・マッピング・スキームのもとでは、統合メイン・マッパは、命令が完了するまでソース・リネーム・エントリをストアし続ける。本発明の実施形態のもとでは、中間レジスタ・マッパ２２０は、統合メイン・マッパ２１８とは異なり、その動作がタイミング・クリティカルではないため、他のクリティカル・パス要素から離して配置することができる。
【００９１】
ひとたび、統合メイン・マッパ２１８がマッピング・エントリを統合メイン・マッパ２１８からリタイアさせ、中間レジスタ・マッパ２２０に移動させると、マッパ・クラスタ２１５は、その後にディスパッチされる命令について並列論理レジスタ・ルックアップを実行して、その後の命令が、アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、及び中間レジスタ・マッパ２２０のいずれかの中にヒット／マッチを含むかどうかを判断する。同じ宛先論理レジスタ番号に対するヒット／マッチが、アーキテクチャ化レジスタ・マッパ２１６、統合メイン・マッパ２１８、及び中間レジスタ・マッパ２２０のうちの少なくとも２つの中に見出された場合、発行キュー２２２内のマルチプレクサ２２３は、統合メイン・マッパ２１８の論理−物理レジスタ・マッピングを選択することによって中間レジスタ・マッパ２２０の論理−物理レジスタ・マッピングに対する優先権を与え、その中間レジスタ・マッパ２２０自体は、アーキテクチャ化レジスタ・マッパ２１６に対する選択優先権を有する。
【００９２】
特許文献２に提案されている選択優先権を決定する機構は以下のように説明される。一実施形態による、命令を実行するのにどのマッピング・データ値を用いるかを決定する例示的な方法の高レベルの論理フローチャート。一実施形態において、ディスパッチ・ユニット２１２は、１つ又は複数の命令をレジスタ管理ユニット２１４にディスパッチする。命令のディスパッチに応答して、レジスタ管理ユニット２１４は、並列論理レジスタ・ルックアップによって、各々のディスパッチされた命令に関連付けられた論理レジスタに対する「ヒット」（アーキテクチャ化レジスタ・マッパ２１６に対する「ヒット」に加えて）が生じたかどうか判断する。この点に関して、アーキテクチャ化レジスタ・マッパ２１６は、論理−物理レジスタ・マッパ・データのチェックポイント状態をストアしているので、常にヒット／マッチを有することが想定されていることを理解されたい。レジスタ管理ユニット２１４が、統合メイン・マッパ２１８及び／又は中間レジスタ・マッパ２２０内にヒット／マッチを検出しない場合、マルチプレクサ２２３は、アーキテクチャ化レジスタ・マッパ２１６から論理−物理レジスタ・リネーム・データを選択する。レジスタ管理ユニット２１４が、統合メイン・マッパ２１８及び／又は中間レジスタ・マッパ２２０内にヒット／マッチを検出した場合、レジスタ管理ユニット２１４は、ヒット／マッチが統合メイン・マッパ２１８と中間レジスタ・マッパ２２０の両方において生じたものであるかどうかを判定ブロックにおいて判断する。ヒット／マッチがマッパ２１８及び２２０の両方にあると判断された場合、レジスタ管理ユニット２１４は、統合メイン・マッパ２１８内のマッピング・エントリが中間レジスタ・マッパ２２０内のマッピング・エントリ「より若い」（即ち、マッピング・エントリの作成がより最近である）かどうか判断する。統合メイン・マッパ２１８内のエントリが中間レジスタ・マッパ２２０内のエントリより若い場合、マルチプレクサ２２３は、統合メイン・マッパ２１８から論理−物理レジスタ・リネーム・データを選択する。統合メイン・マッパ２１８内のエントリが中間レジスタ・マッパ２２０内のエントリより若くない場合、マルチプレクサ２２３は、中間レジスタ・マッパ２２０から論理−物理レジスタ・リネーム・データを選択する。
【００９３】
マッチ／ヒットが統合メイン・マッパ２１８と中間レジスタ・マッパ２２０の両方において生じたものでない場合、統合メイン・マッパ２１８に対する排他ヒット／マッチが生じたかどうかが判断される。統合メイン・マッパ２１８に対する排他ヒットが生じた場合、マルチプレクサ２２３は、統合メイン・マッパ２１８から論理−物理レジスタ・リネーム・データを選択する。しかし、統合メイン・マッパ２１８においてヒット／マッチが生じない（従って、ヒット／マッチがもっぱら中間レジスタ・マッパ２２０で生じる）場合、マルチプレクサ２２３は、中間レジスタ・マッパ２２０から論理−物理レジスタ・リネーム・データを選択する（ブロック３２０）。一般実行エンジン２２４は、実行のために論理レジスタ・ルックアップの出力データを用いる。
【００９４】
例示的な一実施形態において、ディスパッチ・ユニット２１２は、１つ又は複数の命令をレジスタ管理ユニット２１４に対してディスパッチする。統合メイン・マッパは、新しい論理−物理レジスタ・マッピング・エントリを作成する。発行キュー２２２は、ディスパッチされた命令の発行キュー位置データを維持し、この命令は、論理レジスタ・ルックアップにより選択されたマッピング・エントリを使用する（図３に示す）。一般実行エンジン２２４は、実行中の命令のいずれかが終了した（即ち、Ｕ１３０の１つが命令の実行を終了した）かどうかを検出する。発行された命令が終了していない場合、方法は、命令が終了するのを待つ。一般実行エンジン２２４が、命令が終了したことを検出したことに応答して、統合メイン・マッパ２１８は、論理−物理レジスタ・リネーム・データを統合メイン・マッパ２１８から中間レジスタ・マッパ２２０に移動させる。統合メイン・マッパ２１８は、終了した命令に関係する統合メイン・マッピング・エントリをリタイアさせる。完了ユニット２２１は、終了した命令が完了したかどうか判断する。終了した命令が完了していない場合、完了ユニット２２１は、一般実行ユニット２２４が全ての古い命令を終了したのを検出するまで待ち続ける。しかし、完了ユニット２２１が、終了した命令が完了したことを検出した場合、中間レジスタ・マッパ２２０は、アーキテクチャ化レジスタ・マッパ２１６のアーキテクチャ化されたたコヒーレント状態を更新し、中間レジスタ・マッパ２２０は、そのマッピング・エントリをリタイアさせる。
【００９５】
引用により本明細書に組み入れられる、Ｇｓｈｗｉｎｄによる２００１年２月１３日出願の「Ｆｏｒｗａｒｄｉｎｇ  ｓｔｏｒｅｄ  ｄａｔａ  ｆｅｔｃｈｅｄ  ｆｏｒ  ｏｕｔ−ｏｆ−ｏｒｄｅｒ  ｌｏａｄ／ｒｅａｄ  ｏｐｅｒａｔｉｏｎ  ｔｏ  ｏｖｅｒ−ｔａｋｅｎ  ｏｐｅｒａｔｉｏｎ  ｒｅａｄ−ａｃｃｅｓｓｉｎｇ  ｓａｍｅ  ｍｅｍｏｒｙ  ｌｏｃａｔｉｏｎ」と題する特許文献４は、例示的なアウト・オブ・オーダ（ＯｏＯ）プロセッサを説明している。
【００９６】
Ｇｓｈｗｉｎｄ（特許文献４）によれば、図３は、メモリ操作の動的並べ替え、並びに干渉テスト及びデータ・バイパス・シーケンスのハードウェア・ベースの実装をサポートする従来のコンピュータ処理システム（例えば、スーパースカラ・プロセッサを含む）の機能ブロック図である。即ち、図３のシステムは、上で列挙した機構を用いた命令の並べ替えをサポートするのに必要なハードウェア・リソースを含むが、イン・オーダ・ロード操作の前のアウト・オブ・オーダ・ロード操作の実行をサポートするのに必要なハードウェア・リソースは含まない。このシステムは、メモリ・サブシステム３０１、データ・キャッシュ３０２、命令キャッシュ３０４、及びプロセッサ・ユニット３００から構成される。プロセッサ・ユニット３００は、命令キュー３０３、ロード及びストア操作を行うための幾つかのメモリ・ユニット（ＭＵ）３０５、整数、論理及び浮動小数点演算を行うための幾つかの関数ユニット（ＦＵ）３０７、分岐ユニット（ＢＵ）３０９、レジスタ・ファイル３１１、レジスタ・マップ・テーブル３２０、フリー・レジスタ・キュー３２２、ディスパッチ・テーブル３２４、リタイアメント・キュー３２６、及びイン・オーダ・マップ・テーブル３２８を含む。
【００９７】
図３に示すプロセスにおいて、命令は、分岐ユニット３０９の制御のもとで命令キャッシュ３０４から（又は命令が命令キャッシュ３０４内に存在しないときにはメモリ・サブシステム３０１から）フェッチされ、命令キュー３０３内に配置され、その後、命令キュー３０３からディスパッチされる。オペランドを指定するために命令によって使用されるレジスタ名は、アーキテクチャ化レジスタ名から物理レジスタへの現行のマッピングを指定するレジスタ・マップ・テーブル３２０のコンテンツに従ってリネームされる。結果の宛先を指定するために命令によって使用されるアーキテクチャ化レジスタ名は、プロセッサによって現在使用されていない物理レジスタの名前を含むフリー・レジスタ・キュー３２２から抽出された物理レジスタに割り当てられる。レジスタ・マップ・テーブル３２０は、命令によって指定されたアーキテクチャ化された宛先レジスタ名に対する物理レジスタの割当てによって更新される。その全てのレジスタがリネームされた命令は、ディスパッチ・テーブル３２４内に配置される。命令はまた、それらのアドレス、並びにそれらの物理レジスタ名及びアーキテクチャ化レジスタ名を含めて、プログラム順にリタイアメント・キュー３２６内に配置される。命令は、その命令によって使用されることになる全てのリソースが使用可能（物理レジスタに所定のオペランドが割り当てられており、機能ユニットがフリー）であるときにディスパッチ・テーブル３２４からディスパッチされる。命令によって使用されるオペランドは、典型的には汎用レジスタ（ＧＰＲ）、浮動小数点レジスタ（ＦＰＲ）及び条件レジスタ（ＣＲ）を含むレジスタ・ファイル３１１から読み出される。命令は、場合によってはアウト・オブ・オーダで、対応するメモリ・ユニット３０５、関数ユニット３０７、又は分岐ユニット３０９内で実行される。実行が完了すると、命令からの結果はレジスタ・ファイル３１１内に配置される。実行を完了した命令によって設定された物理レジスタを待機しているディスパッチ・テーブル３２４内の命令が通知される。リタイアメント・キュー３２６は、命令が実行を完了したことを、それら命令が何らかの例外を発生したかどうかを含めて通知される。完了した命令はリタイアメント・キューから、プログラム順に（キューの先頭から）除去される。リタイアメントの時点で、命令によって例外が何ら発生していなかった場合、イン・オーダ・マップ・テーブル３２８は、アーキテクチャ化レジスタ名が、リタイアする命令からの結果を含むレジスタ・ファイル３１１内の物理レジスタを指示するように更新され、以前のレジスタ名がイン・オーダ・マップ・テーブル３２８からフリー・レジスタ・キュー３２２に戻される。
【００９８】
他方、命令が例外を発生させた場合、プログラム制御は、リタイアメント・キュー３２６からリタイアしている命令のアドレスに設定される。さらにリタイアメント・キュー３２６がクリアされ（バッファ消去され）、従って全てのリタイアしていない命令がキャンセルされる。さらに、レジスタ・マップ・テーブル３２０がイン・オーダ・マップ・テーブル３２８のコンテンツに対して設定され、且つ、イン・オーダ・マップ・テーブル３２８中に存在しないあらゆるレジスタがフリー・レジスタ・キューに追加される。
【００９９】
先行のロード命令に対するロード命令の並べ替えをサポートする従来のスーパースカラ・プロセッサ（図３に示すような）は、以下を用いて強化することができる。
１．先行のロード命令に対してアウト・オブ・オーダに発行されるロード命令をマーク付けするための機構。
２．命令がフェッチされるときに番号付けし、ある命令が命令ストリーム中でより早く又はより遅く生じたかどうかを判断する機構。ある命令が別の命令より早く又はより遅く生じたかどうか判断する代替的機構で置き換えることができる。
３．アウト・オブ・オーダで実行されたロード操作に関する、プログラム順序中のそれらのアドレス、それらのアクセスのアドレス、ロード・データを含む最大保証微小ユニット（ａｔｏｍｉｃ  ｕｎｉｔ）に関して読み出されたデータ値を含む情報をストアする機構。
４．ロード命令が、１つ又は複数のアウト・オブ・オーダ命令に対してイン・オーダで実行されるときに干渉テストを実行するため、及び複数の命令がロード命令と干渉するとき優先度エンコーディングを実行するための機構。
５．干渉するロード命令に関連するデータを迂回するための機構。
６．アウト・オブ・オーダ状態がリタイアメント・キュー３２６からプログラム順序でレジスタ・ファイル３１１にリタイアしたポイントにおいて（３）で生成された記録を削除するための機構。
【０１００】
Ｇｓｃｈｗｉｎｄ（特許文献４）によって開示された機構は、図３に示す従来のアウト・オブ・オーダ・プロセッサにおいて使用可能な機構と併せて以下のように用いられる。各命令は、命令キュー３０３に入る際に命令番号で番号付けされる。ロード命令を、先行のロード命令より早く、ディスパッチ・テーブル３２４からディスパッチすることができる。そのようなロード命令は、以下で「アウト・オブ・オーダ」ロード操作と呼ばれる。そのような場合、そのロード命令に対応するリタイアメント・キュー３２６内のエントリは、アウト・オブ・オーダ・ロードとマーク付けされる。
【０１０１】
ディスパッチ・テーブル３２４から実行用のメモリ・ユニット３０５へのアウト・オブ・オーダ・ロード操作のディスパッチの検出は、２つのカウンタ、即ち「ロード・フェッチ・カウンタ」及び「ロード・ディスパッチ・カウンタ」を用いて行われることが好ましい。ロード・フェッチ・カウンタは、ロード操作がディスパッチ・テーブル３２４に加えられるときにインクリメントされる。ロード・ディスパッチ・カウンタは、ロード操作が実行用のメモリ・ユニット３０５に送られるときにインクリメントされる。ロード・フェッチ・カウンタの現行コンテンツは、ロード命令がディスパッチ・テーブル３２４に加えられるときにロード命令に添付される。ロード命令がディスパッチ・テーブル３２４から実行用のメモリ・ユニット３０５にディスパッチされるとき、ディスパッチ・テーブル３２４内でロード命令に添付された値が、その時点でのロード・ディスパッチ・カウンタのコンテンツと異なる場合、そのロード命令はアウト・オブ・オーダ・ロード操作として識別される。２つのカウンタ値の間の差異は、ロード命令がそれに対してアウト・オブ・オーダで発行されたロード操作の正確な数に対応することに留意されたい。アウト・オブ・オーダ・ロード命令は、ロード・オーダ・テーブル内にエントリを追加するスペースが使用可能である場合にのみ、メモリ・ユニット３０５にディスパッチされる。
【０１０２】
ロード・オーダ・テーブルは、全てのメモリ・ユニット３０５によって同時にアクセスされる単一のテーブルである（即ち、単一の論理コピーのみが維持されるが、処理を加速するために複数の物理コピーが維持されてもよい）。複数の物理コピーが用いられる場合、複数コピーの論理コンテンツは、常に全てのメモリ・ユニット３０５に対して同じ状態を反映する必要がある。
【０１０３】
実行中の命令の命令番号、及び命令が推測的に実行されるかどうかという事実が、各ロード操作が発行される毎にメモリ・ユット３０５に伝達される。
【０１０４】
プロセッサによって実装される命令セット・アークテクチャ（ＩＳＡ）は、通常、ＩＳＡの命令のレジスタ・フィールドに基づいて、アクセス可能な固定数のアーキテクチャ化された汎用レジスタを定義する。アウト・オブ・オーダ実行プロセッサにおいて、リネーム・レジスタは、推測的に実行された命令のレジスタ結果を保持するように割り当てられる。リネーム・レジスタの値は、対応する推測的命令実行が「コミットされる」又は「完了される」とき、アーキテクチャ化レジスタ値としてコミットされる。従って、どの時点においても、そしてプロセッサ上で実行中のプログラムによって観測されるように、レジスタ・リネームの実施形態において、アーキテクチャ化レジスタより遥かに多くのリネーム・レジスタが存在する。
【０１０５】
リネーム・レジスタの一実施形態において、別々のレジスタがアーキテクチャ化レジスタ及びリネーム・レジスタに割り当てられる。別の実施形態において、リネーム・レジスタ及びアーキテクチャ化レジスタは、マージ・レジスタとなる。マージ・レジスタは、そのマージ・レジスタの状態を示すためのタグを含み、１つの状態においてマージ・レジスタはリネーム・レジスタであり、別の状態においてマージ・レジスタはアーキテクチャ化レジスタである。
【０１０６】
マージ・レジスタの一実施形態において、初期化の一部として（例えば、コンテキスト切替えの間、又はパーティションを初期化するとき）、初めのｎ個の物理レジスタがアーキテクチャ・レジスタとして割り当てられ、ここでｎは命令セット・アークテクチャ（ＩＳＡ）によって宣言されるレジスタの数である。これらのレジスタは、アーキテクチャ化レジスタ（ＡＲ）状態になるように設定され、残りの物理レジスタは、使用可能状態を引き受ける。発行される命令が宛先レジスタを含む場合は、新しいリネーム・バッファが必要となる。このために、１つの物理レジスタが、使用可能レジスタのプールから選択され、宛先レジスタに割り当てられる。従って、選択されたレジスタ状態は、リネーム・バッファ無効状態（ＮＶ）に設定され、その有効ビットがリセットされる。関連する命令が実行を終了した後、生成された結果は選択されたレジスタに書込まれ、その有効ビットが設定され、そしてその状態はリネーム・バッファ（ＲＢ）有効状態に変化する。その後、関連する命令が完了すると、割り当てられたリネーム・バッファは、丁度完了した命令内で指定された宛先レジスタを実装するアーキテクチャ・レジスタであると宣言されることになる。その状態は次にアーキテクチャ・レジスタ状態（ＡＲ）に変化して、このことを反映する。
【０１０７】
レジスタは性能に対する殆ど普遍的な解決策であるが、欠点を有する。コンピュータ・プログラムの種々異なる部分は、それら独自の一時的な値を使用するので、レジスタの使用に関して競合する。実行時におけるプログラム・フローの性質を十分に理解することは非常に難しいので、予め、開発者が、何個のレジスタを使用すべきか、及び、プログラムの他の部分のために何個を取り置きしておくべきかを知る簡単な方法はない。一般にこれらの類いの考慮事項は無視され、開発者は、そして恐らく彼らが使用するコンパイラは、それらに対して可視のレジスタ全てを用いようと試みる。初めにごく少数のレジスタで開始するプロセッサの場合、これは唯一の合理的な手順でもある。
【０１０８】
レジスタ・ウィンドウは、この問題を解決しようとするものである。プログラムのあらゆる部分がそれら自体での使用のためのレジスタを所望するので、幾組ものレジスタがプログラムの異なる部分に対して与えられる。これらのレジスタが可視であったとすると、より多くの競合するレジスタが存在することになり、即ち、それらを不可視にする必要がある。
【０１０９】
レジスタを不可視にすることは効率的に実施することができ、ＣＰＵは、手続き呼び出し中に、プログラムの一部分から別の部分への移動を認識する。これは、少数の命令（プロローグ）のうちの１つによって遂行され、同じく少数の命令（エピローグ）のうちの１つによって終了する。Ｂｅｒｋｅｌｅｙ設計において、これらの呼び出しは、そのポイントでレジスタの新しい組が「スワップ・イン」されること、又は呼び出しが終了したときに「デッド」（又は「再使用可能」）とマーク付けされることを生じさせる。
【０１１０】
ＰｏｗｅｒＰＣのようなプロセッサは、事前定義され予約された機械レジスタに対する状態をセーブする。プロセッサが既に現行ウィンドウのコンテンツを使用して別の例外を処理している間に例外が発生すると、プロセッサはこの状況でダブル・フォールトを発生することになる。
【０１１１】
例示的なＲＩＳＣの実施形態において、全部で６４個のうちの８個のレジスタだけがプログラムに対して可視となる。レジスタの完全セットはレジスタ・ファイルとして知られ、任意の特定の８個のセットがウィンドウとして知られる。このファイルは、８個までの手続き呼び出しがそれら自体のレジスタ・セットを有することを可能にする。プログラムが８個分の呼び出し深さより長いチェインを呼び出さない限り、レジスタは決してスピルすることはなく、即ち、レジスタ・アクセスに比べると遅いプロセスである主メモリ又はキャッシュにセーブされることはない。多くのプログラムにとって、６つのチェインは、プログラムが進むことになるのと同じ深さである。
【０１１２】
比較すると、別のアークテクチャは、各々８個のレジスタの４つの組の各々に同時の可視性を与える。各々８個のレジスタの３つの組が、「ウィンドウ化される（ｗｉｎｄｏｗｅｄ）」。８個のレジスタ（ｉ０からｉ７まで）が、現在のプロシージャ・レベルの入力レジスタを形成する。８個のレジスタ（Ｌ０からＬ７まで）が現在のプロシージャ・レベルに対してローカルであり、８個のレジスタ（ｏ０から０７まで）が現在のプロシージャ・レベルから次に呼び出されるレベルへの出力である。プロシージャが呼び出されると、レジスタ・ウィンドウはレジスタ１６個分シフトし、古い入力レジスタ及び古いローカル・レジスタを隠し、古い出力レジスタを新しい入力レジスタにする。共通レジスタ（古い出力レジスタ及び新しい入力レジスタ）は、パラメータを渡すために使用される。最後に、８個のレジスタ（ｇ０からｇ７まで）は、全てのプロシージャ・レベルに対してグローバルに可視となる。
【０１１３】
改善された設計は、可変サイズのウィンドウを割当て、このことは、呼び出しに必要とされるレジスタが８個より少ない一般的な事例での利用に役立つ。これはまた、レジスタを６４のグローバル・セットとウィンドウ用の追加の１２８とに分離した。
【０１１４】
レジスタ・ウィンドウはまた、容易なアップグレード・パスを与える。追加のレジスタはプログラムに対して不可視であるので、追加のウィンドウは、任意の時点で追加することができる。例えば、オブジェクト指向プログラミングの使用は、しばしば多数の「小さい」呼び出しをもたらす結果となり、これはウィンドウを８から例えば１６に大きくすることによって受け入れることができる。最終結果として、レジスタ・ウィンドウが頻繁にはオーバーフローしないので、レジスタ・ウィンドウのスピル（ｓｐｉｌｌ）及びフィル（ｆｉｌｌ）操作はより少なくなる。
【０１１５】
命令セット・アーキテクチャ（ＩＳＡ）プロセッサのアウト・オブ・オーダ命令実装は、アーキテクチャ化された命令を、直接に、又はハードウェア命令デコード・ユニットによって起動されるファームウェアを使用して、実行することができる。しかし、多くのプロセッサは、アーキテクチャ化された命令をプロセッサ内のハードウェア・ユニットに向けられるマイクロ操作（ｍｉｃｒｏ−ｏｐｓ）に「分割する（ｃｒａｃｋ）」。さらに、複雑命令セット・コンピュータ（ＣＩＳＣ）アーキテクチャ・プロセッサは、ＣＩＳＣ命令を縮小命令セット・コンピュータ（ＲＩＳＣ）アーキテクチャ命令に翻訳することができる。本発明の態様を説明するために、ＩＳＡ機械語命令が説明され、内部操作（ｉｏｐｓ）は、ＩＳＡ機械語命令として、又はより小さいユニット（ｍｉｃｒｏ−ｏｐｓ）として、又はマイクロコードとして、又は当該技術分野で周知の任意の手段によって、内部に配備することができ、それでもなお本明細書では機械語命令を呼ばれる。ＩＳＡの機械語命令は、ＩＳＡによって定義される形式及び機能を有し、ひとたびＩＳＡ機械語命令がフェッチされデコードされると、プロセッサ内で使用するためのｉｏｐｓに変換することができる。
【０１１６】
一実施形態において、命令セット・アーキテクチャ（ＩＳＡ）は、オペランド「活性」を示す機能を有する。オペランド「活性」は、例えば、そのオペランド値が再度使用されることがないことの指標、あと何回読出しアクセス、書込みアクセス又はその両方が行われるかの指標、オペランドが所定の期間（命令の数、経過時間など）にわたってアクセスされることがないことの指標、オペランドに対するパフォーマンス・アクセスに対してどれほど重要であるか（低、中間、高）の指標を含むことができる。記憶キャッシュ階層において、オペランド活性は、あるストア操作がそのラインに対する最終ストアであってキャッシュ・ラインへのストアが主記憶装置（スクラッチ・パッド）内に維持される必要がないことを示すものであり得る。あるオペランド値が最後に用いられることを示すことは、ソフト・エラー回復、マルチレベル・レジスタ・ファイル、主記憶キャッシュ及びレジスタ・リネーム論理を管理するための改善された性能を約束する。
【０１１７】
実施形態において、コンパイラには、オペランド活性（例えば、どの値が再度使用されないか）を識別する情報をプロセッサに提供するために、トラック情報が提供される。一実施形態において、コンパイラは、コンパイルされた命令を実行するプロセッサに活性情報を示すために活性命令を挿入する。
【０１１８】
一実施形態において、コンテキスト切替えを実行する機能は、特定のソフトウェア・モジュールに対してどの値が使用されないかを含む活性に関する情報をセーブし復元する機能を含む。ソフトウェア・モジュールは、例えば、サブルーチン、スレッド、プロセス、又はシステム内のパーティション（イメージ）とすることができる。
【０１１９】
プログラムＡが、プログラムＢを実行するために割込みをかけられるとき、コンテキスト切替えが実行される。アーキテクチャ化ファシリティ（例えば、レジスタ値、条件コード値、次の命令アドレス（ＮＩ）を指示するプログラム・カウンタ値を含む）のコンテキスト（現行状態）がプログラムＡのためにセーブされ、プログラムＢのためのコンテキストがロードされる。プログラムＡに戻るとき、セーブされたプログラムＡのコンテキストがロードされ、プログラムＡは、セーブされたＮＩにおいて実行を開始する。
【０１２０】
一実施形態において、アクティブ・プログラムは、アーキテクチャ化ファシリティ値を「最後に使用される」値として指定することができる。例えば、プログラムは、レジスタ３の中の値が再度使用されることがないことを知り、ＩＳＡのアーキテクチャ化された６４個の一般レジスタのうちのレジスタ３を無効化する命令を実行する。すると、プロセッサは、もはやレジスタ３の現行の状態を保持する必要がなく、デフォルト値が使用されるように指定することができる。プロセッサがコンテキスト切替えを行うとき、レジスタ３をセーブ又は復元する必要はない。一実施形態において、コンテキストが復元されプログラムが再開されるとき、レジスタ３が非活性であることを示す情報がセーブされる。
【０１２１】
一実施形態において、命令実行中に一時的障害が生じたとき、「レジスタ活性」情報を用いてエラー回復及び／又はエラー通知を抑制することができる。エラー回復は性能を低下させることになり、エラー通知は、プロセス、パーティション又はシステムが回復不能エラーによって停止する場合に、機械停止をもたらしかねない。
【０１２２】
一実施形態において、あるプログラムによって「デッド値」（無効化レジスタ）へのアクセスが提供され、そのプログラムはあるオペランドに関する「最終使用」情報を提供する（そのオペランド値がもはやプログラムによって必要とされない場合）。最終使用情報は、不使用値を保持する必要をなくすことにより、又は最終使用されたオペランドに対するエラー通知を抑制することによって、システムが操作を最適化することを可能にすることができる。しかし、「最終使用」指標は、最終使用として示された値が再び読出しアクセスされないことを保証するものではない。具体的には、コード・モジュール境界において、値は、新しいモジュールに入るときにセーブされ、モジュールから出て以前のモジュールに戻るときに復元されることが多い。
【実施例】
【０１２３】
・  関数の間の遷移の際に、呼ばれる側でセーブされる（ｃａｌｌｅｅ−ｓａｖｅｄ）（「不揮発性」）関数が、呼び出された関数によって関数の入口でセーブされ、関数の出口で復元される。
・  アプリケーション（プロセス又はスレッド）からオペレーティング・システム・カーネル（又はハイパバイザ）への遷移が行われるとき、全てのレジスタはセーブされ、制御がアプリケーションに戻るときに復元される。
・  システム・パーティション（例えば、そのパーティション内のオペレーティング・システム）から仮想機械モニタ（ＶＭＭ）又はハイパバイザへの遷移が行われるとき、全てのレジスタはセーブされ、制御がアプリケーションに戻るときに復元される。
・  オペレーティング・システムが１つのスレッドから別のスレッドへ実行を切替えるとき、スレッドに関連する全てのレジスタがストアされ、別のスレッドに関連するストアされたレジスタがロードされる。
・  ハイパバイザ又は仮想機械モニタ（ＶＭＭ）システムが１つのパーティションから別のパーティションへ実行を切替えるとき、パーティションに関連する全てのレジスタがストアされ、別のパーティションに関連するストアされたレジスタがロードされる。
・  システムｚのもとでのＣＡＬＬ  ＰＲＯＧＲＡＭの実行中、状態がセーブされる。
・  １つの第１のモジュールから別のモジュールへの切替えの間、別のモジュールは、第１のモジュールがどのレジスタを使用している可能性があるかを知らないので、このモジュールは全てのレジスタをセーブし復元することになる。
・  これらのアクセスの間、一時的障害が、モジュールの状態の将来の復元のためにモジュール状態をセーブするように登録されているとき、非使用状態がアクセスされる。
・  エラー回復及びエラー通知を避けるために、エラー回復及び通知のうちの少なくとも１つを抑制することが好ましい。
・  これらの偽エラーの処理中の性能低下を減らすために、そのような状況の間、エラー通知を抑制することが重要である。
【０１２４】
一実施形態において、各レジスタに対して、そのレジスタがもはや活性でない（即ち、最終使用が既に示された）ことを示されたかどうかを追跡する手段が設けられる。
【０１２５】
一実施形態において、活性情報レジスタ（ＬＩＲ）専用レジスタ（ＳＰＲ）が設けられる。活性レジスタは、ハードウェア・ラッチ内に維持されることが好ましく、レジスタが活性であるかどうかを示す１ビットを各レジスタに対して含む。ＬＩＲ値は、一実施形態においてプログラムのコンテキストであり、コンテキスト切替えの間セーブされ復元される。別の実施形態において、ＬＩＲ値は、ＬＩＲに関連するコンテキスト又はスレッドを識別する識別子を含む。
【０１２６】
図４を参照すると、プロセッサは、推測的実行のためのリネーム・レジスタ４０４、及びＩＳＡアーキテクチャ化レジスタ４０３として動的に割り当てられる物理レジスタのプール４０２を有することができる。動的割当ては、アーキテクチャ化レジスタ・マッパ４０５によって実行され、その場合、リネーム・レジスタは、対応するアウト・オブ・オーダ（ＯｏＯ）命令実行の完了によって、アーキテクチャ化レジスタとなる。
【０１２７】
ＩＳＡのアーキテクチャ化機械語命令４００は、例えば、命令を実行することによって実施されるべき機能を示すオペコード（ＯＰ１）と、即値フィールド（Ｉ１）と、レジスタ・フィールドによって指定されるアーキテクチャ化レジスタ位置にソース・オペランドを配置するためのソース・レジスタ・フィールド（ＲＡ１）と、命令の実行に用いられるソース・オペランドと、命令の実行の結果のオペランドをストアするためのアーキテクチャ化レジスタを配置するターゲット・レジスタ・フィールド（ＲＴ１）と、を含む。
【０１２８】
実行ユニット４０１は、プロセッサによって生成された命令４００（又は内部操作「マイクロｏｐｓ」（ｉｏｐｓ））を受取り、アーキテクチャ化レジスタ位置（ＲＡ１又はＲＡ２）にあるオペランドにアクセスすることが必要であると判断する。実行ユニット４０１は、レジスタ・フィールド値をアーキテクチャ化レジスタ・マッパ４０５に送り、このマッパが、アクセスされるアーキテクチャ化レジスタにどの物理レジスタが関連付けられるかを決定し、アクセスをそのアーキテクチャ化レジスタに向ける。
【０１２９】
図５を参照すると、アーキテクチャ化レジスタ有効化／無効化レジスタ（ＡＲＥＤＲ）４１０が導入される。ＡＲＥＤＲ４１０は、アーキテクチャ化レジスタのアクセス（実行ユニット４０１による）が許可されるか否かを判断する。一実施形態において、アーキテクチャ化レジスタのアクセスが無効化される場合、ＡＲＥＤＲ４１０は、以前にストアされたアーキテクチャ化レジスタ・オペランド値を返すか又はアーキテクチャ化レジスタ・オペランドをストアする以外の応答を行う。応答は、例えば、デフォルト値４１１を返すこと、全て１又は全て０を返すこと、インクリメントされた値を返すこと、ディクリメントされた値を返すこと、エラーを抑制すること、又はプログラム例外イベント信号を返すことを含むことができる。
【０１３０】
図６を参照すると、コンテキスト切替えの間（又は実行中の呼び出し命令に応答して）、ＡＲＥＤＲ４１０内に保持されたアーキテクチャ化レジスタの有効化状態が、例えば主記憶装置４２１の、退避領域４２０にセーブされ復元される。一実施形態において、アーキテクチャ化レジスタの現行の値もまた、現行のプログラム・カウンタ値及び現行の条件コード（フラグ）値を含むプログラム状態語（ＰＳＷ）の状態といった他の状態情報と共にセーブされ復元される。
【０１３１】
図７を参照すると、ＡＲＥＤＡＲ４１０は一実施形態において、それぞれのアーキテクチャ化レジスタに対応するビットを有する有効化レジスタ５０１を含み、ここで「０」であるビットはレジスタが無効化されていることを示し、「１」であるビットはレジスタが有効化されていることを示す。有効化レジスタ５０１は、有効化セット／リセット論理５００によってセット又はリセットされる。一実施形態において、最終使用命令は、アーキテクチャ化レジスタの最終使用を指定するものであり、実行されたとき、対応する有効化レジスタ５０１のビットを「０」にセットする。一実施形態において、アーキテクチャ化レジスタへの書込みを指定する命令は、対応する有効化レジスタ５０１のビットを「１」にセットする。一実施形態において、有効化レジスタ５０１は、オペレーティング・システム（ＯＳ）によって使用される命令によって読出すことができ又は書込むことができる。
【０１３２】
命令があるアーキテクチャ化レジスタへのアクセスを要求するとき、アーキテクチャ化レジスタ・アドレス５０７がコンパレータ５０４によって有効化レジスタ５０１と比較されて、そのアーキテクチャ化レジスタが有効化状態５０５であるか又は無効化状態５０６であるかが判断される。
【０１３３】
一実施形態において、マスク・レジスタ５０３が設けられる。マスク・レジスタ５０３は、実行中のオペレーティング・システム命令に応答するマスク・セット／リセット論理５０２によりセット又はリセットされる。マスク・レジスタ５０３の各ビットは、アーキテクチャ化レジスタに対応し、プログラムが対応するレジスタを有効化できるかどうかを制御する。マスク・レジスタ５０３は、コンパレータによって有効化レジスタ５０１と比較され、あるアーキテクチャ化レジスタ・アドレス５０７が有効化状態５０５であるか又は無効化状態５０６であるかが判断される。
【０１３４】
アーキテクチャ化レジスタ有効化論理５０５は、アーキテクチャ化レジスタの使用を許可する。アーキテクチャ化レジスタ無効化動作論理５０６は、上記で説明したようにアーキテクチャ化レジスタを使用すること以外の動作を引き起す。
【０１３５】
一実施形態において、コンテキスト切替え中に、マスク・レジスタ５０３の状態が有効化レジスタ５０１の状態とともにセーブされ復元される。
【０１３６】
一実施形態において、レジスタ活性は、暗黙的に、例えばレジスタ・リネーム論理の状態の一部分として維持され、スレッド又はプログラムに関連付けられる。例えば、レジスタ・リネーム・テーブル内に維持される。
【０１３７】
一実施形態において、コンテキスト切替えを実行するために、活性情報値が、レジスタ・リネーム・テーブルといった状態管理構造から抽出される。マッピング情報にアクセスすることにより、各アーキテクチャ化レジスタに対して、そのレジスタが物理レジスタに結合されており活性であるかどうかの判断がなされ、活性である場合、「１」が、コンテキスト状態保持用の記憶装置内の（例えば、活性情報レジスタ（ＬＩＲ）内の）そのレジスタの活性情報値位置に挿入されることになる。別の態様において、アーキテクチャ化レジスタが活性であると示されず、物理レジスタに結合されていないとき、「０」が対応する位置に挿入される。一実施形態によれば、ＬＩＲレジスタが明示的に維持されない場合であっても、アーキテクチャはＬＩＲレジスタを含むように指定され、そのＬＩＲレジスタに対する読出しは、活性指示値を生成させ、それをこのレジスタからの読出しの結果として返させる。本明細書で説明したのとは別のコード化を本明細書に含まれる教示と併せて使用することができることが、当業者には認識されるであろう。
【０１３８】
活性情報は、一実施形態において、信頼性動作と関連して用いられる。データ・アクセスは、Ｒユニット機能に関連して行うことができる。Ｒユニットは、レジスタ活性インジケータ・レジスタを含むことが好ましい。一時的障害を示すエラー条件に遭遇したとき、そのエラー条件が活性又は非活性レジスタ（又は他のデータ・ストア）におけるエラーに対応するかどうかの判断がなされる。データ・エラーが活性値に対して示されたとき、信頼性動作が実行され、ここで信頼性動作はエラー通知及びエラー修正のうちの１つであることが好ましい。データ・エラーが非活性レジスタに対して示されたとき、信頼性動作を抑制することができる。エラー修正を抑制することは、不必要な値を修正するためのエネルギーを節約し、性能損失を改善する。非活性値に関するエラー通知を抑制することは、回復不能エラーに対するシステム信頼性を高めることになり、その理由はアーキテクチャかされた状態の一時的破損は、通常、プロセス、パーティション及びシステムのうちの１つにおける実行を強制終了するためである。一実施形態において、あるエラーが信頼性動作を必要としないことを示した場合でも、劣化したシステムを検出してサービス動作を開始し、又は頻繁に故障する構成要素を事前に非稼働にするために、「ロギング」通知は依然として記録される。
【０１３９】
エラーを抑制する非活性レジスタ・アクセスに関する一実施形態において、あるエラーが信頼性動作を必要としないことを示した場合でも「ロギング」通知は依然として記録される。ログは、低下したシステムを検出してサービス動作を開始するため、又は頻繁に故障する構成要素を事前に非稼働にするために用いることができる。
【０１４０】
一実施形態により、少なくとも１つのシナリオにおいて、非活性なレジスタにアクセスする条件は、プログラミング・エラーに対応する場合がある。そのため、マイクロプロセッサの実装を、可能性のあるプログラミング・エラーを示すために通知イベント（例えば、デバッガ、オペレーティング・システム、ハイパバイザ、又は他の監視プログラムのうちの１つに対する例外）を発生させるように適合させることができる。
【０１４１】
フリー（無効化）レジスタに対する参照の全てがプログラミング・エラーの結果ではない。プログラムは、レジスタが使用中であるかどうか知らないときにそれらのレジスタをセーブすることを必要とすることがあり、これらのレジスタをメモリにセーブし（「スピル」）、後で再ロード（「フィル」）するように進行することができる（コンテキスト切替え又は関数呼び出し／戻りの間）。１つの実施形態において、フリー・アーキテクチャ化レジスタにアクセスしたときに、可能性のある例外を取消し、デフォルト値を返すことを強制するために、構成レジスタ及びモード・スイッチのうちの１つが設けられる。本発明の別の態様において、制御ビット（例えば、アーキテクチャ化プログラム状態語（ＰＳＷ）、アーキテクチャ化制御レジスタ（ＣＲ）、又はアーキテクチャ化機械状態レジスタ（ＭＳＲ）状態レジスタにおいて、又は実装制御ＨＩＤビットにおいて）が設定されて、アプリケーションによって挙動が選択される。別の態様において、シーケンシャル命令に対するプリフィックスが、未使用参照が起こり得ることを示す能力をもたらす。さらに別の態様において、明確なオペコードを有する命令は、フリーにされ割り当てを解除されたレジスタにアクセスする能力を有する。
【０１４２】
別の実施形態において、非活性の無効化オペランドに対応する通知を発生又は抑制する通知発生命令及び非通知発生命令が設けられる。コンパイラは、コンテキスト切替え（又は呼ばれる側でセーブするスピル／フィル・レジスタ・シーケンス）が行われるときに、プログラミング・エラー指示イベント（例えば、前記の例外）を発生させないでデフォルト値を返す命令を生成する。一態様により、コンパイラは、コンテキスト作成／コンテキスト取得操作中、又はセット・ジャンプ／ロング・ジャンプ操作中に、既述の手段（制御を設定する、プリフィックスを使用する、又は特別なオペコードを用いる）の１つを用いて、未使用レジスタを参照する可能性があるキー操作、例えば、関数のプロローグ及びエピローグにおいて呼ばれる側でセーブされる（不揮発性）レジスタに関するレジスタ・セーブ及び復元、を実行することができる。別の実施形態において、コンパイラ・ライブラリ又は関数はまた、レジスタ活性情報のダイジェストをセーブし（「ＳＴＯＲＥ  ＬＩＶＥＮＥＳＳ」）、レジスタが再ロードされるときその情報を復元する（「ＬＯＡＤ  ＬＩＶＥＮＥＳＳ」）ためのコードを発し及び／又は使用し及び／又は実行するように随意に適合されることになる。
【０１４３】
他の態様において、オペレーティング・システム及びハイパバイザは、類似の命令シーケンスを用いてコンテキスト切替えにおいてコンテキストをセーブし復元する。そのような使用法の一態様において、オペレーティング・システム及びハイパバイザは、プログラミング・エラーがないこと、及び、プログラミング・エラー通知を決して発生させず、むしろ常にデフォルト値を置換えることが期待される。これは、ｚＯＳ及びＡＩＸのような信頼性の高い既知のオペレーティング・システムにとって望ましいことであろう。別の態様において、オペレーティング・システムの製造元（ｍａｋｅ）が、オペレーティング・システム内に多くのプログラミング・エラーが存在すると予想する場合、製造元はアプリケーション・プログラムと類似の、ＯＳ及びハイパバイザがプログラミング・エラーを示す（例えば、通知方法を用いて）ように適合された、且つ、未使用／フリー／割当て解除レジスタを参照していることが既知のコンテキスト切替えのような操作に対してプログラミング・エラー通知を発生しないように適合された命令を使用する、方法を用いる。これらの方法は、「マイクロソフト・ウィンドウズ（Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ）」の名称で一般に知られているオペレーティング・システムの製造元にとって望ましいであろう。また、ｚＯＳ及びＡＩＸのような非常に安定なオペレーティング・システムの製造者は、デバッグを補助して、ｚＯＳ及びＡＩＸオペレーティング・システムにおける既知の業界をリードする安定性を維持するために、その長い品質保証サイクルの間の通知を可能にするよう選択することができる。別の態様において、モードは、例えばリナックス・オペレーティング・システムにおいて切替えることができ、ここで、より安定な基本リナックス・オペレーティング・システムは、そのＯＳ環境において実行される外部モジュール及びドライバを呼び出すことができ、オペレーティング・システムは、前記のドライバ又はモジュールの実行中にプログラミング・エラー通知が有効化されるモードに切替わることができる。
【０１４４】
一実施形態において、活性情報のセーブ及び復元は、活性指示レジスタの読出し及び書込みによって提供される。１つの実施形態により、ＳＰＲ（専用レジスタ）命令又は制御（ＣＯＮＴＲＯＬ）命令からの移動又はそれへの移動を提供することができる。一実施形態により、システムは、活性命令からの移動を用いて、活性情報をメモリ内に（又はレジスタ内に）セーブすることができる。別の実施形態により、活性情報は、スーパバイザ・モードへのコンテキスト切替えが行われるときに、活性指示レジスタから状態セーブ／復元レジスタ（ＳＲＲ）にコピーすることができる。活性情報は、スーパバイザ・モードからのコンテキスト切替えが行われるときに、状態セーブ／復元レジスタ（ＳＲＲ）から活性指示レジスタにコピーすることができる（ｒｆｉ／ｈｒｆｉ）。
【０１４５】
活性情報をサーブするための一実施形態において、明示的な活性指示レジスタは何ら維持されない。その代り、暗黙状態から情報を取得し、活性インジケータ命令からの移動が行われるときに活性指示レジスタを構築するための論理が含まれる。
【０１４６】
好ましくは、中断されているプログラム（Ｘ）に関してどのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの指標が退避領域にセーブされ、コンテキスト切替え中にフェッチされる新しいプログラム（Ｙ）に関して、どのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの指標が退避領域から取得され、ここで退避領域は、オペレーティング・システム（ＯＳ）にとって使用可能なアーキテクチャ化レジスタの場所又は主記憶装置の場所として実装することができる。指標は、各ビットがアーキテクチャ化レジスタ・エントリ又は範囲に対応するビット有効フィールド（
ｂｉｔ  ｓｉｇｎｉｆｉｃａｎｔ  ｆｉｅｌｄ）、又それ以外に有効化された／アクティブなアーキテクチャ化レジスタを指示するものとすることができる。一実施形態において、ＯＳによって決定されたサブセットのみを有効化することができる。一実施形態において、マルチスレッド・プロセッサの各スレッドが、それぞれの有効化、無効化インジケータのセットを有する。別の実施形態において、アクティブなプログラム又はスレッドのアクティブ・インジケータの値は、アクティブ・プログラム又はスレッドが使用可能な機械語命令によって明示的に設定することができる。
【０１４７】
一実施形態において、コンテキスト切替えは、完全にハードウェアによって実行することができる。ＩＳＡは、セーブし復元する必要があるアーキテクチャ化状態情報を指定する。退避領域はハードウェアに対して指定される。コンテキスト切替えが行われるときにはいつでも、現行状態が退避領域にセーブされ、新しい状態が退避領域から取得される。一例において、アーキテクチャ的に指定された退避領域、又は退避領域のレベルが存在し、指定されたレベルにおいてプログラムが実行される。例えばタイマー・イベントによって起動される割り込みは、プログラムに関する状態情報をセーブさせ、且つ、別のレベルにおけるオペレーティング・システム（ＯＳ）を、セーブされたその別のレベルに関する状態情報を取得して次にＯＳの実行を開始することによって起動させる。
【０１４８】
一実施形態において、コンテキスト切替えは、少なくとも部分的にソフトウェアによって実行される。コンテキスト切替えが実行されると、現在のレベルの状態情報がソフトウェアによってセーブされ、新しいレベルに関する状態情報がソフトウェアによって取得される。
【０１４９】
状態をセーブし復元するソフトウェアを支援するために、ときには特別な命令がＩＳＡによって与えられることがある。一実施形態において、ＩＳＡの一般レジスタの活性の指標を保持するための特別なレジスタをＰｏｗｅｒＰＣ  ＩＳＡのために設けることができる。この特別なレジスタは新しいＭＦＳＰＲ命令によってメモリにセーブすることができ、この特別なレジスタは新しいＭＴＳＰＲ命令によってメモリからロードすることができる。
【０１５０】
ｍｆｓｐｒ
専用レジスタ（ｘ’７Ｃ００  ０２Ａ６’）からの移動
【表１】
2015501019.tif 000003
注：  ＊これは分割フィールドである。
ｎ  ←  ｓｐｒ［５−９］  ｜｜  ｓｐｒ［０−４］
ｒＤ  ←  ＳＰＲ（ｎ）
【０１５１】
ＰｏｗｅｒＰＣ  ＵＩＳＡにおいて、ＳＰＲフィールドは、表８−９に示されるようにコード化された専用レジスタであることを示す。指定された専用レジスタのコンテンツはｒＤ内に配置される。新しいＬＩＲ  ＳＰＲフィールド（ＬＲ）は、活性専用レジスタを識別する。
【表２】
2015501019.tif 000004
＊＊注：ＳＰＲ数の２つの５ビットの半部分の順序は、実際の命令コード化と比べて逆である。
ＳＰＲフィールドが表８−９に示す値以外の任意の値を含む（且つプロセッサがユーザ・モードにある）場合、以下のうちの１つが起る。
・システムの不正命令エラー・ハンドラが起動される。
・システムのスーパバイザ・レベルの命令エラー・ハンドラが起動される。
・結果が境界未定義になる。
他の変更されたレジスタ：
・なし
簡略化ニーモニックス：
ｍｆｘｅｒ  ｒＤは、ｍｆｓｐｒ  ｒＤ，１に等価である
ｍｆｌｒ  ｒＤは、ｍｆｓｐｒ  ｒＤ，８に等価である
ｍｆｃｔｒ  ｒＤは、ｍｆｓｐｒ  ｒＤ，９に等価である。
【０１５２】
ダブルワードをストアする      ＤＳ形式
【表３】
2015501019.tif 000005
Ｉｆ  ＲＡ  ＝  ０  ｔｈｅｎ  ｂ  ←  ０
ｅｌｓｅ                      ｂ  ←  （ＲＡ）
ＥＡ  ←  ｂ  ＋  ＥＸＴＳ（ＤＳ  ｜｜  ０ｂ００）
ＭＥＭ（ＥＡ，  ８）  ←  （ＲＳ）
有効アドレス（ＥＡ）を和（ＲＡ｜０）＋（ＤＳ｜｜０ｂ００）とする。（ＲＳ）はＥＡでアドレス指定された記憶装置内のダブルワードにストアされる。
変更された特別なレジスタ：
なし
【０１５３】
専用レジスタからの移動
ＸＦＸ形式
【表４】
2015501019.tif 000006
ｎ  ←  ｓｐｒ５：９  ｜｜  ｓｐｒ０：４
ｉｆ  ｌｅｎｇｔｈ（ＳＰＲ（ｎ））  ＝  ６４  ｔｈｅｎ
ＲＴ  ←  ＳＰＲ（ｎ）
ｅｌｓｅ
ＲＴ  ←  ３２０  ｜｜  ＳＰＲ（ｎ）
【０１５４】
ＳＰＲフィールドは、以下の表に示すようにコード化された専用レジスタを表す。指定された専用レジスタのコンテンツはレジスタＲＴ内に配置される。３２ビット長の専用レジスタに関して、ＲＴの下位３２ビットが専用レジスタのコンテンツを受取り、ＲＴの上位３２ビットがゼロに設定される。新しいＬＩＲ  ＳＰＲフィールド（ＬＲ）を追加して、現行のアーキテクチャ化レジスタ活性指標を保持するＳＰＲを指定することができ、ここで、例えば、１である各ビットは、そのアーキテクチャ化レジスタが有効化されていないことを示す。
【表５】
2015501019.tif 000007
【０１５５】
専用レジスタへの移動      ＸＦＸ形式
【表６】
2015501019.tif 000008
ｎ  ←  ｓｐｒ５：９｜｜ｓｐｒ０：４
ｉｆ  ｎ  ＝  １３  ｔｈｅｎ  ｓｅｅ  Ｂｏｏｋ  ＩＩＩ−Ｓ（Ｐｏｗｅｒ  ＩＳＭＴＭ  Ｖｅｒｓｉｏｎ  ２．０６  Ｒｅｖｉｓｉｏｎ  Ｂ）
ｅｌｓｅ
ｉｆ  ｌｅｎｇｔｈ（ＳＰＲ（ｎ））  ＝  ６４  ｔｈｅｎ
ＳＰＲ（ｎ）  ←  （ＲＳ）
ｅｌｓｅ
ＳＰＲ（ｎ）  ←  （ＲＳ）３２：６３
【０１５６】
ＳＰＲフィールドは、以下の表に示すようにコード化された専用レジスタを表す。ＳＰＲフィールドが１３（ＡＭＲ＜Ｓ＞を表す）を含まない限り、レジスタＲＳのコンテンツは指定された専用レジスタ内に配置される。３２ビット長の専用レジスタに関して、ＲＳの下位３２ビットがＳＰＲ内に配置される。ＡＭＲ（オーソリティ・マスク・レジスタ）がサーバ環境における「記憶保護」のために用いられる。新しいＬＩＲ  ＳＰＲフィールド（ＬＲ）を追加して、新しいアーキテクチャ化レジスタ活性指標を保持するＳＰＲを指定することができ、ここで、例えば、１である各ビットは、そのアーキテクチャ化レジスタが有効化されていないことを示す。
【表７】
2015501019.tif 000009
【０１５７】
１つの実施形態により、ＬＩＲ（ＳＲＲ０＿ＬＩＶＥＮＥＳＳ）レジスタが書込まれるとき、書込まれたＬＩＲ値において活性でないと指示される全てのレジスタはもはや活性ではないとの指示が行われ、活性ではないと指示されたアーキテクチャ化レジスタに対応するいずれの物理レジスタも随意に割当てを解除することができる。
【０１５８】
１）書込みの実行の前には活性でなく、且つ２）ＬＩＲレジスタに書込まれた値で活性であると指示されるレジスタを指示する書込み操作は、１つの実施形態においては対応するＬＩＲエントリを変更せず、又は、別の実施形態においてはプログラミング・エラーを示す通知イベントを生じさせる。
【０１５９】
制御操作のコンテキスト切替え又は移行は、ソフトウェア、ファームウェア、又はハードウェア回路で実装することができる。ハードウェア実装は、無効化されたアーキテクチャ化レジスタの物理レジスタを、アーキテクチャ化レジスタ及びリネーム・レジスタの両方のための、他のスレッドによる使用のための使用可能物理レジスタのプールに戻すために最終使用情報を有利に利用することができるばかりでなく、コンテキスト切替え中に、有効化されたハードウェア・レジスタを、コンテキスト切り替え中に、セーブし復元することのみを行う。ＰｏｗｅｒＰＣ  ＩＳＡに基づくプログラムＡからプログラムＢへの移行（コンテキスト切替え）に関する実施例Ａ１では、初めにプログラムＡの状態情報が以下のようにセーブされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ  ｆｏｒ  ｍｏｄｕｌｅ  １  ｉｎ  ｒ１１
Ｔｈｅｎ
ｓｔｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｓｔｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｓｔｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｓｔｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｓｔｗ  ｒ９，ＧＰＲ９（ｒ１１）；
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｓｔｗ  ｒ１０，ＧＰＲ１０（ｒ１１）；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｓｔｗ  ｒ１２，ＧＰＲ１１（ｒ１１）；
【０１６０】
次に、プログラムＢの状態情報が以下のようにロードされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ  ｆｏｒ  ｍｏｄｕｌｅ  ２  ｉｎ  ｒ１１
Ｔｈｅｎ
ｌｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｌｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｌｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｌｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｌｗ  ｒ９，ＧＰＲ９（ｒ１１）；  
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｒｆｉ
【０１６１】
実施例Ａ２において、プログラムＢからプログラムＡに戻る遷移は以下のように遂行される。
初めにプログラムＢに関する状態情報が以下のようにセーブされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ  ｆｏｒ  ｍｏｄｕｌｅ  ２  ｉｎ  ｒ１１
Ｔｈｅｎ
ｓｔｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｓｔｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｓｔｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｓｔｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｓｔｗ  ｒ９，ＧＰＲ９（ｒ１１）；  
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｓｔｗ  ｒ１０，ＧＰＲ１０（ｒ１１）；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｓｔｗ  ｒ１２，ＧＰＲ１１（ｒ１１）；
【０１６２】
次に、プログラムＡに関する状態情報が以下のようにロードされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ  ｆｏｒ  ｍｏｄｕｌｅ  ２  ｉｎ  ｒ１１
Ｔｈｅｎ
ｌｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｌｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｌｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｌｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｌｗ  ｒ９，ＧＰＲ９（ｒ１１）；  
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｒｆｉ
【０１６３】
プログラムＡからプログラムＢへの移行（コンテキスト切替え）に関する実施例Ａ１、Ａ２において、アーキテクチャ化レジスタの各々に関して、そのアーキテクチャ化レジスタが有効化されているか又は無効化されているかの状態情報がセーブされた。しかし、ＬＩＲに基づくと、以下のように実施例Ａ２に示すようにＬＩＲが活性を発見するために問い合わせたので、コンテキスト切替えは無効化レジスタをセーブする必要がない
【０１６４】
プログラムＡからプログラムＢへの移行（コンテキスト切替え）に関する実施例Ｂ１では、初めにプログラムＡの状態情報が以下のようにセーブされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ
ｆｏｒ  ｍｏｄｕｌｅ  １  ｉｎ  ｒ１１
ｓｔｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｓｔｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｓｔｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｓｔｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｓｔｗ  ｒ９，ＧＰＲ９（ｒ１１）；  
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｓｔｗ  ｒ１０，ＧＰＲ１０（ｒ１１）；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｓｔｗ  ｒ１２，ＧＰＲ１１（ｒ１１）；
ｍｆｓｐｒ  ｒ１２，  ＳＲＲ＿ＬＩＶＥＮＥＳＳ
ｓｔｗ  ｒ１２，  ＳＲＲ＿ＬＩＶＥＮＥＳＳ（ｒ１１）
【０１６５】
この実施例において、活性情報は、ｍｆｓｐｒ１２命令によって取得され、ｓｔｗ  ｒ１２命令によってストアされるので、プログラムＡへの最終的な戻りに対して使用可能となる。次にプログラムＢの状態情報が以下のようにロードされる。
Ｓｅｔ  ｕｐ  ｃｏｎｔｅｘｔ  ｓａｖｅ  ｂａｓｅ  ａｄｄｒｅｓｓ  ｆｏｒ  ｍｏｄｕｌｅ  ２  ｉｎ  ｒ１１
Ｔｈｅｎ
ｌｗ  ｒ１２，ＧＰＲ１３（ｒ１１）；
Ｍｔｓｐｒ  ＳＲＲ＿ＬＩＶＥＮＥＳＳ
ｌｗ  ｒ１３，ＧＰＲ１３（ｒ１１）；
ｌｗ  ｒ１４，ＧＰＲ１４（ｒ１１）；
ｌｗ  ｒ１５，ＧＰＲ１５（ｒ１１）；
ｌｗ  ｒ１２，ＧＰＲ１２（ｒ１１）；
ｌｗ  ｒ９，ＧＰＲ９（ｒ１１）；  
ｍｆｓｐｒ  ｒ１０，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ０；
ｍｆｓｐｒ  ｒ１２，ＳＰＲＮ＿ＳＰＲＧ＿ＳＣＲＡＴＣＨ１；
ｒｆｉ
【０１６６】
状態情報のロードにおいて、ｌｗ  ｒ１２が、プログラムＢに関するセーブされたＬＩＲ状態情報のアドレスを与え、Ｍｔｓｐｒ命令が、退避領域からＬＩＲをロードする。
【０１６７】
ハードウェア実装において、移行は、論理回路によって行うことができる。１つの実施形態において、初めにターゲット・プログラムに関するＬＩＲがロードされ、活性レジスタのみがロードされる。一実施形態において、移行されるプログラムに対しては活性レジスタのみがセーブされる。
【０１６８】
一実施形態において、実行中のプログラムに関して活性情報５０１が維持され（４１０）、この方法は、プロセッサによって現行オペランド状態情報５０１、５０３を維持すること（４１０）を含み、この現行オペランド状態情報は、対応する現行オペランド５０７が第１のプログラム・モジュール６００による使用のために有効化５０５されているか又は無効化５０６されているかのいずれであるかを示すものであり、第１のプログラム・モジュール６００は、命令セット・アーキテクチャ（ＩＳＡ）の機械語命令を含み、第１のプログラム・モジュール６００は、プロセッサによって現在実行中である（６０２）。現行オペランドは、第１のプログラム・モジュールの機械語命令によってアクセスされ（６０５）、このアクセスすることは、現行オペランド状態情報５０１、５０３を用いて（５０４）、以前にストアされた現行オペランド値が第１のプログラム・モジュールによってアクセス可能であるかどうか（５０５、５０６）を判断することを含む。
【０１６９】
一実施形態において、現行オペランド５０７が無効化５０６されていることに応答して、上記のアクセスすることは、アーキテクチャ指定値４１１を返すこと、及び通知動作５０８を行うことのうちの少なくとも１つを含み、ここで、アーキテクチャ指定値４１１は、未定義値、ゼロ値、全て「１」から成る値、又はプログラム指定デフォルト値のうちのいずれかであり、通知動作５０８は、例外を発生すること、例外を抑制すること、機械状態の制御下で例外を発生及び抑制すること、デバッグ情報を与えること、及び無効化オペランドへのアクセスの発生を示すように少なくとも１つのレジスタを設定することのうちのいずれか１つである。
【０１７０】
一実施形態において、プログラム実行６０２は、第１のプログラム・モジュール６００から第２のプログラム・モジュール６０１へ移行され（６０３）、第１のプログラム・モジュール６００の現行オペランド状態情報５０１、５０３をコンテキスト切替え退避領域４２０内にセーブすること（６０４）と、コンテキスト切替え退避領域４２０から、新しいオペランド状態情報を、実行される第２のプログラムの現行オペランド状態情報としてロードすること（７０１、７０２）と、ロードされた現行オペランド状態情報５０１、５０３を用いて第２のプログラム６０１の実行を開始すること（７０３）と、を含む。
【０１７１】
一実施形態において、実行を移行すること（６０３、７０３）は、コンテキスト切替え操作であり、ここで現行オペランドは、命令４００によって識別される一般レジスタ４０３のアーキテクチャ化された一般レジスタ値、又は命令６００によって識別される浮動小数点レジスタのアーキテクチャ化された浮動小数点レジスタ値のうちのいずれかで構成され、ここで実行を移行することは、第１のプログラム・モジュール６００のプログラム・カウンタ値及び有効化現行オペランド４０３の現行オペランド値をコンテキスト切替え退避領域４２０内にセーブすることと、コンテキスト切替え退避領域４２０から、新しい有効オペランドの新しいオペランド値を、実行される第２のプログラム６０１の現行オペランド４０３の現行オペランド値としてロードすること（７０１、７０２）とをさらに含み、ここで、開始される第２のプログラム６０１の実行（６０２）は、ロードされた現行オペランド４０３を使用する。
【０１７２】
一実施形態において、現行オペランド状態情報５０１、５０３は、現行オペランド状態情報５０１を現行プログラム６００、６０１によって有効化状態と無効化状態との間で変えることができるかどうかを制御するためのオペランド有効化制御５０３をさらに含む。
【０１７３】
一実施形態において、第１のオペランド無効化命令８０１が実行されるとき、この実行は、第１のオペランド４０３の現行オペランド状態情報５０１により第１のオペランドを無効化させ、ここで無効化オペランド４０３の読み出しは、アークテクチャ依存デフォルト値４１１を返し、第２のオペランド有効化命令８０６が実行されるとき、この実行は、第２のオペランドの現行オペランド状態情報５０１により第２のオペランド４０３を有効化（５０５）させ（８０７）、ここで有効化オペランドの読み出しは、以前にストアされた値を有効化オペランド４０３に返す。
【０１７４】
一実施形態において、デフォルト値４１１は、アーキテクチャ未定義値、アーキテクチャ定義デフォルト値レジスタに以前にストアされた値、全て「１」、全て「０」、インクリメント値又はディクリメント値のうちのいずれかで構成され、ここでインクリメント値は読み出しアクセス毎にインクリメントされ、ディクリメント値は読み出しアクセス毎にディクリメントされる。
【０１７５】
一実施形態において、第１のオペランド無効化命令はプリフィックス命令８００であり、プリフィックス命令８００の実行は、第１のオペランドがプログラム順序においてプリフィックス命令に続く次の順次命令８０１による使用の後で無効化されることをプロセッサに示す。
【０１７６】
一実施形態において、無効化オペランドに対する書込み操作は、無効化オペランドを有効化させ、ここで第２のオペランド有効化命令８０６は、第２のオペランド５０３に書込むための書込み命令である。
【０１７７】
一実施形態において、無効化アーキテクチャ化レジスタに対するアクセスにより、プログラム例外が示されるようにされる。
【０１７８】
一実施形態において、無効化アーキテクチャ化レジスタは、無効化アーキテクチャ化レジスタに書込みを行わないレジスタ有効化命令によって有効化される。
【０１７９】
オペレーティング・システムのプログラマがアセンブラ言語で書くような、関数及び命令の商業的実装において、記憶媒体１１４（主記憶装置又は主メモリとしても知られる）内にストアされるこれらの命令形式は、ｚ／アーキテクチャＩＢＭサーバ、ＰｏｗｅｒＰＣ  ＩＢＭサーバにおいて、又は代替的に他のアーキテクチャを実行する機械においてネイティブに実行することができる。これらは、既存の及び将来のＩＢＭサーバにおいて、及びＩＢＭの他の機械（例えば、ｐＳｅｒｉｅｓ（登録商標）サーバ及びｘＳｅｒｉｅｓ（登録商標）サーバ）上で、エミュレートすることができる。これらは、一般に実行がエミュレーション・モードで行われる機械において実行することができる。
【０１８０】
エミュレーション・モードでは、エミュレートされる特定の命令がデコードされ、サブルーチン又はドライバの場合のように個々の命令を実装するサブルーチンがＣ構築され、又は、本発明の実施形態の説明を理解した後の当業者の技能の範囲内で、特定のハードウェアのためのドライバを準備するためにその他の何らかの技術が用いられる。
【０１８１】
さらに、上述の種々の実施形態は単なる例である。これらの実施形態に対して、本発明の趣旨から逸脱しない多くのバリエーションが存在し得る。例えば、本明細書では論理的に分割された環境を説明することができるが、これは１つの例に過ぎない。本発明の態様は、複数のゾーンを有する他の環境、及び分割型環境を含む多くの型式の環境に対して有益である。さらに、中央プロセッサ複合体が存在せずに、互いに結合された複数のプロセッサが存在してもよい。さらに、本発明の１つ又は複数の態様は、単一プロセッサ環境にも適用可能である。
【０１８２】
本明細書では特定の環境を説明したが、やはり、これらの環境に対する多くのバリエーションを、本発明の趣旨から逸脱せずに実装することができる。例えば、環境が論理的に分割される場合、より多数の又はより少数のパーティションを環境に含めることができる。さらに、互いに結合された複数の中央処理複合体が存在してもよい。これらは、本発明の趣旨から逸脱せずに実装することができるバリエーションの幾つかに過ぎない。さらに他のバリエーションも可能である。例えば、本明細書で説明したコントローラは、命令をシリアル化して一度に１つのＩＤＴＥ命令を実行するが、別の実施形態においては、一度に複数の命令を実行することができる。さらに、この環境は複数のコントローラを含むことができる。さらにまた、システム内で複数の静止要求（１つ又は複数のコントローラから）が同時に未処理であってもよい。さらなるバリエーションもまた可能である。
【０１８３】
本明細書で用いる場合、「処理ユニット」という用語は、ページング可能エンティティ、例えば、ゲスト、プロセッサ、エミュレータ、及び／又は他の同様の構成要素を含む。さらに、「処理ユニットによって」という用語は、処理ユニットの代わりに、を含む。「バッファ」という用語は、記憶装置の領域、並びに、アレイを含むがそれに限定されない異なる型式のデータ構造体を含み、「テーブル」という用語は、テーブル型以外のデータ構造体を含むことができる。さらに、命令は、レジスタ以外の、情報を指定するためのものを含むことができる。さらに、ページ、セグメント及び／又は領域は、本明細書で説明したのとは異なるサイズにすることができる。
【０１８４】
本発明の１つ又は複数の機能は、ソフトウェア、ファームウェア、又はそれらのいくつかの組合せで実装することができる。さらに、１つ又は複数の機能をエミュレートすることができる。
【０１８５】
本発明の１つ又は複数の態様は、例えば、コンピュータ使用可能媒体を有する製品（例えば、１つ又は複数のコンピュータ・プログラム製品）に含めることができる。その媒体は、内部に具体化された、例えば、本発明の機能を提供し促進するコンピュータ可読プログラム・コード手段又は論理（例えば、命令、コード、コマンドなど）を有する。製品はコンピュータ・システムの一部分として含めることができ、又は単独で販売することができる。媒体（有形記憶媒体としても知られる）は、固定又は携帯媒体として記憶装置１２０上に実装することができ、読み出し専用メモリ（ＲＯＭ）１１６内、ランダム・アクセス・メモリ（ＲＡＭ）１１４内に実装することができ、又は、例えば、ＣＰＵ（１１０）、Ｉ／Ｏアダプタ１１８上のコンピュータ・チップにストアすることができる。
【０１８６】
さらに、本発明の機能を実施するための、機械によって実行可能な命令の少なくとも１つのプログラムを具体化した、機械によって可読な記憶媒体を含む少なくとも１つのプログラム記憶装置１２０を提供することができる。
【０１８７】
本明細書で示したフロー図は単なる例である。それらの中で説明したこれらの図又はステップ（又は操作）に対して、本発明の趣旨から逸脱しない多くのバリエーションが存在し得る。例えば、ステップは異なる順序で実行することができ、又はステップを追加し、削除し又は修正することができる。これらのバリエーションの全ては、特許請求される本発明の一部分と見なされる。
【０１８８】
本明細書において、好ましい実施形態を示し詳しく説明したが、本発明の趣旨から逸脱せずに種々の修正、付加、置換などを行うことができ、従って、これらは添付の特許請求の範囲において定められる本発明の範囲に入るものと見なされることが、当業者には明らかとなろう。
【符号の説明】
【０１８９】
１００：データ処理システム
１１２：相互接続（システム・バス）
１２０：記憶装置
１３４：通信アダプタ
２００：スーパースカラ・プロセッサ
２０４：命令順序付け論理（ＩＳＬ）
２１４：レジスタ管理ユニット
２１５：マッパ・クラスタ
２２３：マルチプレクサ
２２４：一般実行ユニット（一般実行エンジン）
３００：プロセッサ・ユニット
３０５：メモリ・ユニット
３０７：関数ユニット
３０９：分岐ユニット
４００：設計機械語命令
５０４：コンパレータ
【図１】
2015501019.tif 000010
【図２】
2015501019.tif 000011
【図３】
2015501019.tif 000012
【図４】
2015501019.tif 000013
【図５】
2015501019.tif 000014
【図６】
2015501019.tif 000015
【図７】
2015501019.tif 000016
【図８】
2015501019.tif 000017
【図９】
2015501019.tif 000018
【図１０】
2015501019.tif 000019
【国際調査報告】
2015501019.tif 000020
2015501019.tif 000021