(57)【特許請求の範囲】
【請求項１】
メインメモリ装置と、
前記メインメモリ装置に接続された１以上のキャッシュメモリ装置と、
ＣＰＵと
を有するコンピュータシステムであって、
前記ＣＰＵは、
１つ以上のレジスタと、
前記レジスタのそれぞれの可用性の状態を保持するデータ構造であって、前期可用性の状態は、前記レジスタの中にオペランドをロードしている間に、特定のレジスタを読み取ろうとしている命令が停止するか否かを示すデータ構造と、
１つ以上の前記レジスタの可用性の状態をテストし、前記可用性の状態に基づいて、プログラム実行の経路を変更する１つ以上の命令を復号し、実行することにより、レジスタロード操作の待ち時間を明らかにして、コンパイラに、レジスタの内容の可用性に基づいて、代替のプログラム実行の経路の変更を可能とさせる命令復号および実行回路と
を有するコンピュータシステム。
【請求項２】
前記データ構造は、１つ以上の使用不能フラグを有し、各使用不能フラグは１つのレジスタに対応する
請求項１に記載のコンピュータシステム。
【請求項３】
選択したレジスタおよび選択した使用不能フラグを指定する第１の命令が定義され、
前記命令復号および実行回路は、
選択した使用不能フラグの前記可用性の状態を、選択したレジスタにルーティングするマルチプレクサ
を含む、
請求項２に記載のコンピュータシステム。
【請求項４】
前記データ構造は、ソースレジスタと一連の宛先レジスタとの間の比較を含む、
請求項１に記載のコンピュータシステム。
【請求項５】
プログラム内で代替の実行スレッドを選択する方法であって、
レジスタを読み取ろうとしている第２の命令の実行が、前記レジスタの中にオペランドをロードしている間に停止するか否かを判定するため、データ構造を照会する前記プログラムの第１の命令を実行するステップと、
前記第２の命令の実行が停止しない場合には、前記第２の命令を含む第１の実行スレッドを選択するステップと、
前記レジスタの中に前記オペランドをロードしている間に前記第２の命令の実行が停止する場合には、前記第２の命令を含まない第２の実行スレッドを選択することにより、レジスタロード操作の待ち時間を明らかにして、コンパイラに、レジスタの内容の可用性に基づいて、代替のプログラム実行の経路の変更を可能とさせる第２の実行スレッドを選択するステップと
を含む方法。
【請求項６】
レジスタを読み取ろうとしている第２の命令の実行が、前記レジスタの中にオペランドをロードしている間に停止するか否かを判定するため、データ構造を照会する前記プログラムの第１の命令を実行するステップは、
第１のレジスタの可用性の状態を、前記第１のレジスタに関連する使用不能フラグから第２のレジスタに転送する第１の命令を実行するステップを含む、
請求項５に記載の方法。
【請求項７】
第１の実行スレッドを選択するステップおよび第２の実行スレッドを選択するステップは、
前記第２のレジスタの内容に基づいて、前記第１もしくは第２の実行スレッドのいずれかに実行の経路を定める条件分岐命令を実行するステップを共に含む、
請求項６に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・システムの中で実行されるコンピュータ命令に関するものである。より詳細には、本発明は、レジスタの内容へのアクセスがコンピュータ・システム上のプログラム実行を停止する原因となるかどうかを判定し、それによってメモリの待ち時間を示すコンピュータ命令に関するものである。
【０００２】
【従来の技術】
一般的なコンピュータ・システムには、１つまたは複数のプロセッサ、メモリ・システム、および記憶媒体が含まれる。メモリ・システムには、一般にメイン・メモリ、およびメイン・メモリとプロセッサの間に接続された、１つまたは複数のキャッシュ・メモリが含まれる。記憶媒体は、ハードディスク装置、フロッピー・ディスク装置、ＣＤ−ＲＯＭ装置、および同様の物を備える。
【０００３】
コンピュータ・システムは、連続する命令から構成されるコンピュータ・プログラムを実行することによってタスクを実行する。コンピュータ・システムの性能は、命令を実行する速度に著しく影響される。
【０００４】
１つの一般的なタイプの命令は、メモリからオペランドを検索しそのオペランドをプロセッサのレジスタ中に格納するロード命令である。オペランドをキャッシュ・メモリの中に格納した場合、それは迅速に検索される。これは当業者には「キャッシュ・ヒット(cache hit)」として周知である。しかしながら、オペランドがメイン・メモリの中でのみ使用可能である場合、オペランドをレジスタの中にロードするのにかなり長い時間がかかることもある。これは当業者には「キャッシュ・ミス(cache miss)」として周知である。キャッシュ・ミスの後、オペランドをメモリからレジスタにロードすることを必要とする命令に出会うまで、多くのコンピュータ・システムでは命令を実行し続ける。このような命令に出会った時、プロセッサはその命令の実行を停止し、ロードが終了するのを待つ。この技術は当業者には「ストール・オン・ユーズ(stall on use)」として周知であり、この方式をサポートするキャッシュ・メモリは、「非ブロッキング・キャッシュ(non-blocking cache)」として周知である。
【０００５】
プロセッサの性能はメイン・メモリ・システムの性能よりも急速に向上している。現在のコンピュータ・システムでは、メイン・メモリからオペランドを検索するのに１００プロセッサ・サイクルまでも必要であり、将来のコンピュータ・システムでは１０００以上のプロセッサ・サイクルが必要になるだろうと予測される。従って、最適なシステム性能を達成するため、プロセッサが、オペランドをメイン・メモリから読み出している間に、実行することのできる他の命令を有することを保証することが重要である。理想的には、ロードが完了するのを待つ間プロセッサは停止してはならない。
【０００６】
いくつかのコンピュータ・システムでは順序を入れ替えてすなわちアウト・オブ・オーダ(out-of-order)で命令を実行することができ、従ってロードが完了するのを待つ間に他の命令を実行することによって停止を延期することができる。しかしながら、アウト・オブ・オーダの実行は複雑なハードウェアを必要とし、アウト・オブ・オーダで実行することに適した命令ウィンドウは比較的小さい（２００〜３００命令以下）。さらに、ＣＰＵのより多くの論理素子がアウト・オブ・オーダ実行のサポートに占有されるので、命令（インストラクション）によって指定される機能を遂行するために使用可能な論理素子はより少なくなる。
【０００７】
他の技術では、オペランドが使用不能なため現在のストリームの命令を続行することができないと判定した時、プロセッサがコンテキストを切り換えることができる。例えば、ＣＰＵ内部で複数のコンテキストを保持することができ、停止時には他のコンテキストに単に切り換える。しかしながらこの方法は、複数のコンテキストを保持するための追加のハードウェアを必要とし、従ってアウト・オブ・オーダの実行のように命令が指定する機能を実行するのに使用可能なハードウェアを減少させる。また停止時に割り込みが発生し、ソフトウェアが何か他のスレッドもしくはプロセスに切り換わることもあり得る。ディスクからのデータの検索などのより長い待ち時間に関してこの方法がうまく動作する一方、メイン・メモリからのデータのアクセスなどより短い待ち時間を取り扱う際起こるオーバヘッドによって、この方法は不可能になる。
【０００８】
他の技術は、コンピュータ・プログラムのコンパイル時、実行する命令に関する様々なオペランドの待ち時間をモデル化することである。待ち時間モデルに基づいて命令をスケジュールすることによって、コンパイラは停止をかなり削減することができる。例えば、キャッシュ・ミスが３０ＣＰＵサイクルを必要とするだろうと待ち時間モデルが示し、特定のロード命令がキャッシュ・ミスを派生するだろうとコンパイラが判定することができた場合、コンパイラはそのオペランドが必要になる少なくとも３０サイクル前にそのオペランドを検索するためのメモリ・プリフェッチ・オペレーションをスケジュールすることができる。
【０００９】
不幸にも、コンパイル時に待ち時間を予測することは、多くの場合困難である。コンパイラが、特定のロードがキャッシュ・ミスもしくはキャッシュ・ヒットを引き起こすかどうかを判定することができない場合もある。さらに、多くの場合、単一バージョンの「収縮包装（シュリンク・ラップ：shrink wrup）」のソフトウェアが特定の命令セットのために市販される。しかしながら、性能およびアーキテクチャにおいて実質的に異なる広く多様なコンピュータ・システム上でこのようなソフトウェアを実行することもできる。例えば、Ｐｅｎｔｉｕｍ（Ｒ）（ペンティアム（商標））ＣＰＵを搭載し、外部Ｌ２キャッシュを持たず、高速ページ・モードＤＲＡＭメモリを持つラップトップ・コンピュータから、（各ＣＰＵがＬ１およびＬ２キャッシュを持つ）複数のＰｅｎｔｉｕｍ（Ｒ）ＩＩ（ペンティアム（商標）ツー）ＣＰＵ、および同期式ＤＲＡＭメモリを持つコンピュータ・ワークステーションまでの範囲にわたるコンピュータ・システム上で、Ｉｎｔｅｌ  ｘ８６（インテル  ｘ８６シリーズ）命令セットで書かれたプログラムを実行することもできる。
【００１０】
Mark Horowitz、Margaret Martonosi、Todd Mowry、およびMichael Smithによる「Informing Loads: Enabling Software to Observe and React to Memory Behavior（通知ロード：ソフトウェアがメモリ動作に対して監視し反応することができるようにすること）」という題名の１９９５年７月に出版された第１の論文と、「Informing Memory Operations: Providing Memory Performance Feedback in Modern Processors（通知メモリ・オペレーション：現代のプロセッサにおけるメモリ・パフォーマンス・フィードバックの提供）」という題名の第２の論文に、ダイナミックで多様な待ち時間について説明している。本明細書ではこれら両方の論文を参照する。これらの論文では、「informing load instructions（通知ロード命令）」と呼ばれる命令のクラスを提案している。ロード・オペレーションがキャッシュ・ヒットを引き起こす場合、通知ロード命令によって、スキップされる通知ロード命令の直後の命令が実行され、ロード・オペレーションがキャッシュ・ミスを引き起こす場合、通知ロード命令の直後の命令が実行される。通知ロードは実行を停止させない非ブロッキング・ロードである。通知ロード・オペレーションの直後に分岐命令をスケジュールすることによって、通知ロード・オペレーションが原因であるキャッシュ・ミスを保守する間、通知ロード命令によってコンパイラが代替の動作をスケジュールすることができる。
【００１１】
通知ロード・オペレーションは、特定のオペランドが第１レベルのキャッシュの中にあるかどうかを示すが、待ち時間の量を示さない。オペランドがＬ２キャッシュの中にあることもあり、メイン・メモリの中にあることもあり、あるいは他のＣＰＵのキャッシュの中にダーティ・ラインとして存在することもある。従って通知ロード・オペレーションは、コンパイラに待ち時間の量に基づいて代替のコード・スレッドをスケジュールする方法を提供しない。また、通知ロードそれ自体の実行後レジスタの内容が使用可能であることを確認するプログラムのためのメカニズムも、通知ロードは提供しない。
【００１２】
【発明が解決しようとする課題および課題を解決するための手段】
本発明は、コンピュータ・システムのプロセッサのレジスタについての使用可能状態を保持するデータ構造を含むコンピュータ・システムであって、この使用可能状態は特定のレジスタを読み取ろうとする命令が停止するかどうかを示す。このコンピュータ・システムはまた、１つまたは複数のレジスタの使用可能状態に基づいて、プログラム実行のパスを変更する１つまたは複数の命令を復号し実行することができる命令復号／実行回路も含む。
【００１３】
一実施形態において、待ち時間調査命令はそのデータ構造からレジスタの使用可能状態を検索し、レジスタの中にこの使用可能状態を格納する。その後、条件分岐命令が、レジスタの中に格納された使用可能状態に基づいて、プログラム実行パスを決定する。別の実施形態では、条件分岐命令がレジスタの使用可能状態を判定するため直接データ構造を照会し、使用可能状態に基づいて実行パスを決定する。
【００１４】
本発明は、メモリ・オペレーションの待ち時間をプログラムに公開し、従ってコンパイラが変化する待ち時間に基づいて代替の実行スレッドをスケジュールすることができる。レジスタの内容の使用可能性に基づいて代替の実行スレッドをスケジュールすることによって、停止が最小限になる。コンパイラが、キャッシュ・ヒットおよびキャッシュ・ミスが引き起こす待ち時間を正確にモデル化することができる場合、予測されるキャッシュ・イベントに対応する定義済の時間間隔でレジスタ内容の使用可能性をチェックするようコードをスケジュールすることができる。あるいは、コンパイラが待ち時間を正確にモデル化することができない場合、コンパイラは、定期的にレジスタ内容の使用可能性に関してチェックするようコードをスケジュールすることができる。
【００１５】
さらにまた、コンパイラはコードを最適化するために本発明を使用することもできる。本発明は、プログラム実行中にデータを収集するための強力な方法を提供する。プログラムの再コンパイル時、実行ファイルを最適化するためこの収集したデータを使用することができる。また、コンパイラは、パフォーマンスを監視し、基本的には実行時に「オン・ザ・フライ(on-the-fly)で」それ自体を再コンパイルするコードをスケジュールするため、本発明を使用することもできる。
【００１６】
本発明の最も推進する特徴の１つは、多数の現代のコンピュータ・アーキテクチャの中で実施するのが容易なことである。「ストール・オン・ユーズ」技術をサポートし、「非ブロッキング・キャッシュ」を含むプロセッサは一般に、プロセッサのレジスタについての使用可能状態を提供することができるデータ構造を含む。このようなプロセッサ設計において、条件分岐命令がレジスタの使用可能状態をテストすることができるようにする命令をコード化するのは、比較的容易な設計の仕事である。
【００１７】
【発明の実施の形態】
本発明は、オペランドがレジスタの中で使用可能かどうかを判定するコンピュータ命令を実行することができる、コンピュータ・システムである。様々な時間間隔で本発明の命令を実行することによって、メモリ・ロード・オペレーションの待ち時間を調査することができる。
【００１８】
図１は、従来技術のコンピュータ・システム１０のブロック図である。コンピュータ・システム１０は、中央処理装置（ＣＰＵ）１２、レベル１（Ｌ１）キャッシュ・メモリ装置１４、レベル２（Ｌ２）キャッシュ・メモリ装置１６、およびメイン・メモリ装置１８を含む。Ｌ１キャッシュ・メモリ装置１４は、ＣＰＵ１２に密接に接続する比較的少量の高速で高価なメモリを備え、メイン・メモリ装置１８のメモリ内容のサブセットを格納する。多数の従来技術のＣＰＵは、ＣＰＵそれ自体と同一の集積回路上にＬ１キャッシュを含む。一般に、１または２命令クロック・サイクル内で、Ｌ１キャッシュ・メモリ装置１４からＣＰＵ１２のレジスタの中にメモリ・オペランドをロードすることができる。
【００１９】
Ｌ１キャッシュ・メモリ装置１４と比較すると、Ｌ２キャッシュ・メモリ装置１６は、比較的大きな（かつ比較的遅い）量のメモリを備える。Ｌ２キャッシュ・メモリ装置１６もまた、メイン・メモリ装置１８の内容のサブセットを格納する。一般に、数命令クロック・サイクル内でＬ２キャッシュ・メモリ装置１６からメモリ・オペランドをロードすることができる。
【００２０】
メイン・メモリ装置１８は、大量で比較的遅いメモリを備える。メイン・メモリ装置１８からＣＰＵ１２のレジスタの中にメモリ・オペランドをロードするのに、１００以上の命令クロック・サイクルを要することもある。
【００２１】
コンピュータ・システム１０が多数の従来技術の構成を表す一方、もちろん多数の他の構成もある。例えば、より多数のもしくはより少数のキャッシュ・メモリを持つことが一般的である。また、数個のキャッシュを共用し他のキャッシュに排他的アクセスを行うことができる、複数のプロセッサを持つことも一般的である。
【００２２】
メモリ・オペレーションの待ち時間が、特定のメモリ・オペランドを特定のキャッシュ・メモリ装置の中に格納するかどうかによって異なることに留意されたい。コンパイラが、オペランドは特定のキャッシュ・メモリ装置の中にあるかどうかを予測し、それに従ってコードをスケジュールすることができることが頻繁にある。しかしながら、コンパイラが、キャッシュ・メモリのいずれかにオペランドがあるかどうかを判定することができないこともまた一般的である。
【００２３】
多数の従来技術のコンピュータ・システムにおいて、オペランドをメモリからレジスタの中にロードするロード命令がキャッシュ・ミスを派生した時、ＣＰＵは停止しない。むしろ、ＣＰＵは、そのレジスタの内容を必要とする後の命令に到達するまで命令の実行を続行する。オペランドをメモリからロードし終っていたら、この後の命令を実行する。オペランドがメモリからまだロードされていなかった場合、キャッシュ・ミスへの手当てが済むまで、（少なくとも後の命令の）実行を中断する。キャッシュ・ミスに対する手当てが済んだところで、この後の命令から実行が再開される。この技術は当業者には「ストール・オン・ユーズ」として周知であり、この方式をサポートするキャッシュ・メモリは「非ブロッキング・キャッシュ」として周知である。
【００２４】
図２は、レジスタの内容が使用可能でない時にプロセッサが実行を中断すべきかどうかを判定するための一般的な従来技術の技法の簡略図である。図２において、ＣＰＵ１２はレジスタ２０、使用不能フラグ２２、および停止信号装置２４を含む。命令復号装置、浮動小数点実行装置、整数実行装置、メモリ・アクセス装置、および相当物が提供する機能など他のＣＰＵ機能をボックス２６で包括的に表現する。
【００２５】
ＣＰＵ１２が実行を中断すべきかどうかを判定する方法を理解するため、ＣＰＵ１２がレジスタ１（ｒ1）の内容で指定されたメモリ位置の内容をレジスタ０（ｒ0）の中にロードするロード命令の実行を開始したと仮定されたい。この命令は下記のように表現することができる。
【００２６】
ｌｄ  ｒ0＝［ｒ1］
【００２７】
さらに、ｒ1の内容によって指定されたメモリ位置の内容がＬ１キャッシュ・メモリ装置１４の中にあると仮定されたい。命令の実行時、ｒ0の内容が使用不能であることを示すため、ｒ0に関連する使用不能フラグ２２を「１」にセットする。次の命令クロック・サイクルで、ｒ0をＬ１キャッシュ・メモリ装置１４よりロードし、ｒ0の内容が使用可能であることを示すため、ｒ0に関連する使用不能フラグ２２を「０」にクリアする。
【００２８】
ここで、次の命令が下記のものであると仮定されたい。
【００２９】
ａｄｄ  ｒ3＝ｒ0，ｒ2
【００３０】
この命令は、ｒ0およびｒ2の内容を加算し、その結果をｒ3の中に格納する。ｒ2の内容が使用可能であり、従ってｒ2に関連する使用不能フラグ２２を「０」にクリアしたと仮定されたい。命令の実行開始時、停止信号装置２４はｒ0およびｒ2に関連する使用不能フラグ２２に基づいて停止信号を生成する。両方のレジスタの内容が使用可能であるため、停止信号を表明せず加算命令を実行する。
【００３１】
次に、ｒ1の内容によって指定されたメモリ位置の内容を、キャッシュ・メモリ装置１４もしくは１６ではなく、メイン・メモリ１８の中に格納することを除いて、同一順の命令を実行すると仮定されたい。従って、次の命令クロック・サイクルで加算命令を実行する時、ｒ0の内容は使用可能ではない。停止信号装置２４が停止信号を表明（アサート）し、それをＣＰＵ１２がメイン・メモリ装置１８からｒ0の中にそのメモリの内容をロードするまで実行を停止するために使用する。メモリの内容がロードされた時、加算命令の実行が完了する。
【００３２】
もちろん、図２を参照して上記で述べた例は簡略化されている。パイプライン実行をサポートするＣＰＵでは、より複雑なメカニズムによって使用不能フラグ２２が提供する機能が提供される。命令フェッチ（ＩＦ）の段階と、命令復号およびレジスタ・フェッチ（ＲＤ）の段階と、実行（ＥＸ）の段階と、データ・メモリ・アクセス（ＭＥ）の段階と、レジスタ書き戻し（ＷＢ）の段階から構成される、５段階パイプラインを持つＣＰＵについて考察されたい。また、かかるプロセッサが、トランザクションの結果を受け取る宛先レジスタを指定するレジスタ・アドレスを含むテーブルの中に各アクティブ・エントリを持つ、未解決メモリ読取トランザクション・テーブルを有すると仮定されたい。レジスタの内容が使用可能でないため命令が停止する場合、ＲＤ段階で停止する。ＲＤ段階で停止信号を生成するため、パイプラインの後の段階中の任意の命令、または未解決メモリ読取トランザクション・テーブル中の任意のトランザクションが、ＲＤ段階で読み取るレジスタの中にデータを格納するかどうかを判定しなければならない。従って、このようなプロセッサの中では、ＲＤ段階の命令のソース・レジスタを、後の段階の命令の宛先レジスタ、および未解決メモリ読取トランザクション・テーブルのアクティブ・エントリの中に格納する宛先レジスタと比較する一連の比較装置およびＯＲゲートが、全ての比較装置からの結果を共にＯＲすることによって生成した停止信号を使って、図２の中の使用不能フラグ２２および停止信号装置２４が実行する機能を実行する。もちろん、当業者には、レジスタの内容が使用可能であるかどうかを追跡するため、多様に異なるデータ構造および技術を使用することもできることを認識するであろう。さらに、当業者はまた、使用不能であるレジスタの内容を必要とする命令に対してのみ実行を停止する必要があることを認識するであろう。他の命令の実行、および他の無関係のＣＰＵ機能は続行してもよい。
【００３３】
本発明は、レジスタの内容が使用可能であるかどうか、またはそのレジスタにアクセスすることによって実行の停止を引き起こすかどうかを、コンピュータ・プログラムが確認することができるようにするためのメカニズムを提供する。図３はＣＰＵ２８の簡略化したブロック図である。図３は、本発明を実施するため図１のＣＰＵ１２をどのように修正するかを示す。ＣＰＵ１２と同様に、ＣＰＵ２８はレジスタ３０、使用不能フラグ３２、および停止信号装置３４を含む。ＣＰＵ２８はまた、任意の使用不能フラグ３２の内容を任意のレジスタ３０の中に発送あるいはルーティングすることができるマルチプレクサ３６も含む。最後に、ボックス３８が表すＣＰＵ機能は、本発明に従って命令を復号し（下記に述べる）、マルチプレクサ３６を制御することができる回路を含む。
【００３４】
マルチプレクサ３６は、使用不能フラグをレジスタの中にリンクすることができる任意のメカニズムを表す。本発明を理解するため、マルチプレクサ３６を使用不能フラグ３２およびレジスタ３０とリンクする別々のデータ・パスを示す。しかしながら、当業者は、レジスタの中に至る１ビットの共通データ・パスを使用不能フラグの１つに格納された値まで延ばすことによって、マルチプレクサ３６が表す機能を実施することがよくあることを認識するであろう。さらに図２を参照して上記で述べたように、パイプライン・プロセッサでは、パイプラインの後の段階および未解決メモリ読取トランザクション・テーブルの中で、ソース・レジスタ・アドレスを宛先レジスタ・アドレスと比較する比較装置が、使用不能フラグ３２が実行する機能を実行することもできる。本明細書で使用するように、「使用不能フラグ」という用語はこのような方法で生成された使用可能状態を含む。
【００３５】
本発明によるコンピュータ命令を復号するため必要とされる回路をボックス３８で表現する。当従来技術の技術者は、本発明による命令に関してオペレーション・コードを適正に定義し、その命令を復号するための適正な復号論理を設計し、本明細書で述べた機能を実施するようマルチプレクサ３６を操作するため、本明細書の教示をどのように適合させるかを認識するであろう。
【００３６】
待ち時間調査命令と呼ばれる本発明による命令について考察されたい。このような命令の１つの書式（フォーマット）は、次の通りである。
【００３７】
ｌｐｒｏｂｅ  ｒi=ｒj
【００３８】
ｌｐｒｏｂｅ命令の実行時、ｒjに関連する使用不能フラグ３２をｒiの中に格納する。従って、ｒjの内容が使用可能である場合ｒiの内容は「０」であり、ｒjの内容が使用不能である場合、ｒiの内容は「１」である。次に、レジスタｒjにアクセスする命令を実行すべきかどうかを判定するため、条件分岐命令を介してｒiの内容をテストする。もちろん、本発明による他の命令もまた可能である。例えば一実施形態では、プロセッサが動作の分岐を制御するために使用する条件（または属性あるいは述語（predicate)）レジスタを含むこともあり、指定された使用不能フラグ３２を指定された条件レジスタに転送するよう、ｌｐｒｏｂｅ命令を定義することもできる。別の実施形態では、条件分岐が基づくこともできるレジスタとして使用不能フラグを取り扱うよう、分岐命令のクラスを定義することもできる。このような命令に関する１つの書式は、次の通りである。
【００３９】
ｂr  ｒjｕｆ，ｍｉｓｓ
【００４０】
このような命令は、ｒjに関連する使用不能フラグが使用不能である場合のみ、アドレスｍｉｓｓに分岐する。
【００４１】
もちろん、多数の他の命令コード化が可能である。本発明の鍵は、コンピュータ命令が、レジスタをアクセスする命令が停止するかどうかを判定するため、レジスタの内容が使用可能であるかどうかを判定するのに使用するデータ構造もしくは技術を照会することもでき、その照会結果に基づいて実行スレッドを変更することができることである。従って、本発明はレジスタ・ロード・オペレーションの待ち時間をコンパイラに公開し、それによってコンパイラが、レジスタの内容が使用可能であるかどうかに基づいて代替のスレッドをスケジュールすることができる。
【００４２】
図４は、本発明のコンピュータ命令の簡単な応用例を示す。図３の中のＣＰＵ２８などの本発明によるＣＰＵが、図１の中のコンピュータ・システム１０などのＬ１およびＬ２キャッシュ装置とメイン・メモリ装置を有するコンピュータ・システムの中に存在すると仮定されたい。さらに、コンパイラがＬ１およびＬ２のキャッシュ・ヒットおよびキャッシュ・ミスの待ち時間を予測する正確な待ち時間モデルを持ち、ｒ1の内容で指定されたメモリの内容をｒ0の中にロードし、ｒ0の内容とｒ2の内容を加算し、その結果をｒ3の中に格納するコードを、コンパイラがスケジュールしなければならないと仮定されたい。また、このコンパイラがｒ2の内容が使用可能であることを予測することができることも仮定されたい。
【００４３】
最初に、コンパイラはコード・セグメント４０をスケジュールする。コード・セグメント４０の最初の命令がｒ1の内容で指定されたメモリの内容をｒ0の中にロードする。次の命令は、ｒ0に関連する使用不能フラグ３２の内容と一緒にレジスタｒ4をロードするｌｐｒｏｂｅ命令である。次の命令は、レジスタｒ4の内容をテストする分岐命令である。ｒ0の内容が使用可能である場合、ｒ4は「０」となり分岐は失敗し、これはＬ１キャッシュ・ヒットと一致する。次の命令は、ｒ0の内容とｒ2の内容を加算しその結果をｒ3の中に格納する。セグメント４０中の残りのコードは、Ｌ１キャッシュ・ヒットの仮定に基づいて最適化されたコードである。ｒ0の内容が使用不能である場合、ｒ4は「１」となり、分岐はアドレスあるいはラベルｍｉｓｓ＿１にあるコード・セグメント４２に実行を誘導する。
【００４４】
最初にコード・セグメント４２は、Ｌ１キャッシュ・ミスの仮定に基づいて最適化した一連の命令を実行する。コンパイラは、ｒ0の中にロードしたメモリの内容をＬ２キャッシュの中に格納すると仮定し、ｒ1の内容によって指定されたメモリの内容をＬ２キャッシュから検索することができるとコンパイラが予測する時間の間に、実行することもできる他の命令を識別しスケジュールする。これらの命令の実行後、ｒ0に関連する使用不能フラグ３２と一緒にｒ4をロードする他のｌｐｒｏｂｅ命令を実行する。次の命令はｒ4の内容をテストする分岐命令である。ｒ0の内容が使用可能である場合、この分岐は失敗し、これはＬ２キャッシュ・ヒットと一致する。次に、加算命令およびＬ２キャッシュ・ヒットに基づいてスケジュールした他の命令によって実行が続行される。しかしながら、ｒ0の内容が使用可能でない場合、分岐はアドレスｍｉｓｓ＿２にあるコード・セグメント４４に行く。
【００４５】
コード・セグメント４４の中で、コンパイラはＬ２キャッシュ・ミスのために最適化したコードの最初の部分をスケジュールしている。コンパイラの待ち時間モデルは、最初の部分を実行した後、Ｌ２キャッシュ・ミスを保守することができるのに十分な時間が経過し、ｒ0の内容が使用可能になるだろうと予測する。その後、Ｌ２キャッシュ・ミスの仮定に基づいて実行するようコンパイラがスケジュールした他の命令と共に、加算命令を実行する。
【００４６】
前述の例は、未知であるが限定された定義済の待ち時間セットを有するレジスタ・ロードの周辺のコードをスケジュールするため、コンパイラが本発明の命令をどのように使用することができるかを示す。ｌｐｒｏｂｅ命令を定期的な時間間隔でスケジュールすることによって、ロードしたデータが他のＣＰＵのダーティ・キャッシュ・ラインの中に保持されている時など、待ち時間セットを定義することができない時もまたコードをスケジュールすることができる。
【００４７】
さらにまた、コンパイラがコードを最適化するのにも本発明を使用することができる。例えば、プロファイル・ベースの最適化（ＰＢＯ:profile-based optimization）実行セッションの間にデータを収集することは、当業者には周知である。その場合、最適化実行可能版プログラムを作るため、この収集したデータを使用してプログラムを再コンパイルする。キャッシュ・ミスを検出しメモリ待ち時間を計測するためにｌｐｒｏｂｅ命令を使用することもできるので、本発明は、ＰＢＯセッションの間にデータを収集するための強力な方法を提供する。
【００４８】
本発明の別の応用例は、連続実行時最適化である。コンピュータ・システム構成の数は急増し続けると予想される。将来、異なるメモリ構成やＣＰＵの数を持つ様々なコンピュータ・システム上で、１つのコンパイル済コンピュータ・プログラムが効果的に実行されることが一般的になるであろう。プログラムのコンパイル時、可能な構成をすべて予測するのは実用的ではない。従って、パフォーマンスを監視し、基本的に実行時「直接」再コンパイルするコードをプログラムが含むことが期待される。本発明は、プログラムがそのパフォーマンスを監視し、それによってコードを再スケジュールするためのメカニズムを提供する。従来技術と異なり、本発明によって、プログラムがレジスタ・ロードよりキャッシュ・ヒットを派生するかどうかを判定することができるだけでなく、プログラムがまた、レジスタの内容が使用可能になる間どのくらいの時間がかかるかを計測することもできる。
【００４９】
レジスタの内容が使用可能でない時プログラムの実行パスを変更するため、本発明を使用することができる一方、アウト・オブ・オーダの命令実行が可能なコンピュータ・システムにおいてキャッシュ・プリフェッチ・オペレーションを制御するためにもまた、本発明を使用することができる。例えば、メモリからロードした値に基づいて分岐条件を決定すると仮定されたい。ロードした値がキャッシュの中にある場合、プロセッサがその結果を計算し分岐条件を解析する前に長い時間はかからない。従って、プリフェッチを必要とするロード命令が実行パス上にあるかどうかがすぐに分かるため、投機的キャッシュ・プリフェッチ・オペレーションを開始する潜在的な利益は小さい。利益が小さいため、不要なデータでキャッシュを汚染しないようにプリフェッチ・オペレーションを避けるのが望ましい。一方、分岐条件を決定するため必要なロードがキャッシュ・ミスを派生する場合、プロセッサがその分岐条件を解析するのに多少時間がかかる。この状況では、予想される（しかし未確認の）実行パスに沿うロード命令に対する投機的プリフェッチ・オペレーションを実行する利益は、より大きい。本発明は、コンパイラが、分岐条件を迅速に解析するかどうかを判定するコードをスケジュールし、それによって投機的プリフェッチ・オペレーションを含む実行パスをたどるべきかどうかを決定することができる、オーバヘッドの少ないメカニズムを提供する。
【００５０】
本発明の最も大きな利益の１つは、実施するのが比較的簡単であることと、「ストール・オン・ユーズ」技術をサポートし、「非ブロッキング」キャッシュを含むプロセッサ・アーキテクチャの中に追加の回路をほとんど必要としないことである。このようなプロセッサは既に停止信号を生成する実質的回路を含んでいる。本発明によると、このようなプロセッサに追加すべきものは、特定のレジスタに関する停止信号を生成する回路を活動化し、その停止信号の結果を他のレジスタに格納する（もしくは停止信号に基づいて分岐する）命令だけである。従って、その命令を復号し、宛先レジスタのデータ・パスの中へ既に存在する停止信号の進路を変更する少数のゲートによって、本発明を実施することができる。
【００５１】
本発明について好ましい実施形態を参照して述べたが、当業者は、本発明の精神と範囲を超えることなく形式もしくは詳細において変更することもできることを認識するであろう。
【００５２】
以上、本発明の実施例について詳述したが、以下、本発明の各実施態様の例を示す。
【００５３】
（実施態様１）
メイン・メモリ装置と、
前記メイン・メモリ装置に接続された１以上のキャッシュ・メモリ装置と、
ＣＰＵと
を有するコンピュータ・システムにおいて、
前記ＣＰＵは、
１以上のレジスタと、
前記レジスタの各々の使用可能状態を保持するデータ構造であって、前期使用可能状態とは、特定のレジスタを読み取ろうとしている命令が停止するかどうかを示す、と、
１以上の前記レジスタの前記使用可能状態に基づいてプログラム実行パスを変更する１以上の命令を復号し実行することができる、命令復号および実行回路と
を含むことを特徴とするコンピュータ・システム。
【００５４】
（実施態様２）
前記データ構造は、１以上の使用不能フラグを有し、各使用不能フラグは１つのレジスタに対応する実施態様１に記載のコンピュータ・システム。
【００５５】
（実施態様３）
選択したレジスタおよび選択した使用不能フラグを指定する第１の命令が定義され、前記命令復号／実行回路は、選択した使用不能フラグの前記使用可能状態を選択したレジスタにルーティングすることができるマルチプレクサを含む、実施態様２に記載のコンピュータ・システム。
【００５６】
（実施態様４）
前記データ構造は、ソース・レジスタと一連の宛先レジスタとの間の比較を含む、実施態様１に記載のコンピュータ・システム。
【００５７】
（実施態様５）
レジスタ中の内容の使用可能性に基づいてプログラム内で代替の実行スレッドを選択する方法において、
前記レジスタの内容が使用可能であるかどうかを判定するため、データ構造を照会する前記プログラムの命令を実行するステップと、
前記レジスタの内容が使用可能である場合、第１の実行スレッドを選択するステップと、
前記レジスタの前記内容が使用不能である場合、第２の実行スレッドを選択するステップと
を含む方法。
【００５８】
（実施態様６）
前記レジスタの内容が使用可能であるかどうかを判定するためにデータ構造を照会するステップは、
第１のレジスタの使用可能状態を、前記第１のレジスタに関連する使用不能フラグから第２のレジスタに転送する命令を実行するステップを含む、
実施態様５に記載の方法。
【００５９】
（実施態様７）
前記レジスタの内容が使用可能である場合は、第１の実行スレッドを選択するステップが、また前記レジスタの前記内容が使用不能である場合は、第２の実行スレッドを選択するステップが、
前記第２のレジスタの内容に基づいて前記第１もしくは第２の実行スレッドのいずれかに実行の経路を定める、条件分岐命令を実行するステップを共に含む、実施態様５に記載の方法。
【００６０】
（実施態様８）
命令が読み取るために検索しているレジスタの内容がまだ使用可能でない時、前記命令の実行を停止することができる停止回路を有するコンピュータ・システムにおいて、
前記停止回路の実質的部分を使用して前記レジスタの内容の使用可能状態を判定し、前記レジスタの前記使用可能状態に基づいてプログラム実行パスを変更する、１以上の命令を復号し実行することができる、命令復号／実行回路
を備えることを特徴とするコンピュータ・システム。
【００６１】
【発明の効果】
以上のように、本発明を用いると、コンピュータ・システムのプロセッサのレジスタについて、特定のレジスタを読み取ろうとする命令が停止するかどうかを示す使用可能状態を保持するデータ構造を含むコンピュータ・システムを提供することができる。
【００６２】
また、本発明の利益の１つは、実施するのが比較的簡単であることと、「ストール・オン・ユーズ」技術をサポートし、「非ブロッキング」キャッシュを含むプロセッサ・アーキテクチャの中に追加の回路をほとんど必要としないことである。
【図面の簡単な説明】
【図１】中央処理装置（ＣＰＵ）、レベル１（Ｌ１）キャッシュ・メモリ装置、レベル２（Ｌ２）キャッシュ・メモリ装置、およびメイン・メモリ装置を含む、従来技術のコンピュータ・システムのブロック図である。
【図２】レジスタの内容が使用可能でないためプロセッサが実行を中断すべきかどうかを判定するための、一般的な従来技術の技法の簡略図である。
【図３】本発明によるＣＰＵの簡略ブロック図である。
【図４】本発明が提供するコンピュータ命令の簡単な応用例を示す図である。
【符号の説明】
２８：ＣＰＵ
３０：レジスタ
３２：使用不能フラグ
３４：停止信号装置
３６：マルチプレクサ
３８：他のＣＰＵ機能
【図１】
0003871458.tif 000002
【図２】
0003871458.tif 000003
【図３】
0003871458.tif 000004
【図４】
0003871458.tif 000005