(57)【特許請求の範囲】
【請求項１】
監視されるロケーションのＩＤとデッドラインの時刻又は前記デッドラインまでの時間を指定するためのタイマ値とを規定する命令を第１アプリケーションから受信し、当該命令をデコードするデコードロジック、及び、前記デコードロジックと結合され前記タイマ値に関してカウントを実行するタイマを有するコアと、
前記コアと結合され、前記タイマ値に少なくとも一部基づいて、プロセッサの低電力状態の一種類を決定し、前記監視されるロケーションの値について前記命令の条件が満たされず且つ前記デッドラインが過ぎていない場合には、オペレーティングシステム（ＯＳ）の介入なしに、前記プロセッサを前記決定に応答した前記低電力状態にする電力管理ユニットと、
を備え、
前記命令は、前記プロセッサに、第１の値を読み込ませ、前記第１の値と宛先ロケーションに格納されたデータとの間のマスクオペレーションを実行させるユーザーレベル命令であって、前記マスクオペレーションの結果が第１結果である場合には、前記プロセッサに、前記低電力状態に入らせ、前記マスクオペレーションの結果が前記第１結果でない場合には、前記プロセッサに、前記第１の値を前記宛先ロケーションへ読み込ませるためのものである、
プロセッサ。
【請求項２】
キャッシュメモリと結合され、前記監視されるロケーションのコピーを含む前記キャッシュメモリのラインが更新されたかを判断する監視エンジンを更に備える請求項１に記載のプロセッサ。
【請求項３】
前記監視エンジンは、更新された前記コピー及びウェイクアップ信号を、前記コアに伝達する請求項２に記載のプロセッサ。
【請求項４】
前記コアは、更新された前記コピーについて前記命令の条件が満たされているかを判断し、
満たされている場合には、前記低電力状態から抜け出し、
満たされていない場合には、新たな低電力状態を決定し、当該低電力状態に入る請求項３に記載のプロセッサ。
【請求項５】
前記マスクオペレーションの結果がゼロに等しい場合には、前記プロセッサは、フラグレジスタのゼロインジケータを設定する請求項１から４のいずれか１項に記載のプロセッサ。
【請求項６】
前記タイマは、タイムスタンプカウンタ値と前記デッドラインの時刻を示す前記タイマ値との間の差分に対応する値に設定される請求項１から５のいずれか１項に記載のプロセッサ。
【請求項７】
前記プロセッサは、前記コア及び第２コアを含むマルチコアプロセッサを含み、
前記命令が属する第１スレッド及び前記監視されるロケーションを更新するための命令が属する第２スレッドは、互いに異なるスレッドである、
請求項１から６のいずれか１項に記載のプロセッサ。
【請求項８】
前記コアは、前記監視されるロケーションの前記更新に応答して、前記低電力状態を抜ける請求項７に記載のプロセッサ。
【請求項９】
前記コアは、前記低電力状態を抜けた後に、前記第２スレッドによって更新されたデータを使用して前記第１スレッドの少なくとも１つのオペレーションを実行する請求項８に記載のプロセッサ。
【請求項１０】
監視されるロケーションのＩＤとデッドラインの時刻又は前記デッドラインまでの時間を指定するためのタイマ値とを規定する命令を、プロセッサ内の第１アプリケーションから受信しデコードする段階と、
前記命令に応答して、前記プロセッサにおいて、前記プロセッサの低電力状態の一種類を前記タイマ値に少なくとも一部基づいて決定する段階と、
前記監視されるロケーションの値について前記命令の条件が満たされず且つ前記デッドラインが過ぎていない場合に、前記決定に応答した前記プロセッサの前記低電力状態に入る段階と、
を備え、
前記命令は、前記プロセッサに、第１の値を読み込ませ、前記第１の値と宛先ロケーションに格納されたデータとの間のマスクオペレーションを実行させるユーザーレベル命令であって、前記マスクオペレーションの結果が第１結果である場合には、前記プロセッサに、前記低電力状態に入らせ、前記マスクオペレーションの結果が前記第１結果でない場合には、前記プロセッサに、前記第１の値を前記宛先ロケーションへ読み込ませるためのものである、
方法。
【請求項１１】
前記デッドラインを過ぎたことに応答して、前記低電力状態を抜け出す段階を更に備える請求項１０に記載の方法。
【請求項１２】
前記プロセッサのキャッシュメモリの監視エンジンからウェイクアップ信号を受信することを含む、前記監視されるロケーションの値について前記命令の条件が満たされている時に、前記低電力状態を抜け出す段階を更に備え、
前記監視エンジンは、前記監視されるロケーションのコピーを含むキャッシュラインの格納値が変化した時に、前記ウェイクアップ信号を送信する請求項１０または１１に記載の方法。
【請求項１３】
前記プロセッサの電力管理ユニット（ＰＭＵ）を使用して、それぞれが一の低電力状態と一のタイマ値とを関連付けている複数のエントリを有するテーブルにおける情報に基づいて、複数の低電力状態から前記低電力状態の前記一種類を選択する段階と、
前記プロセッサのコアを前記低電力状態にするべく、前記ＰＭＵから少なくとも１つの制御信号を前記コアに送信する段階とを更に備える請求項１０から１２のいずれか１項に記載の方法。
【請求項１４】
前記プロセッサに結合された第２プロセッサからウェイクアップ信号を受信する段階と、
前記ウェイクアップ信号に応答して、前記低電力状態を抜け出す段階とを更に備える請求項１０から１３のいずれか１項に記載の方法。
【請求項１５】
マルチコアプロセッサと、
前記マルチコアプロセッサと結合されたダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）とを備え、
前記マルチコアプロセッサは、
待機状態を発生させるべく、監視されるロケーションとデッドラインの時刻又は前記デッドラインまでの時間を指定するためのタイマ値とを規定するユーザーレベル命令をデコードするデコードロジックを含む第１コア、及び、第２コアを含むマルチプロセッサと、
前記デコードロジックと結合され、前記タイマ値に対してカウントを実行するタイマと、
前記第１コア及び前記第２コアと結合され、オペレーティングシステム（ＯＳ）が介入することなく、前記タイマ値に少なくとも一部基づいて複数の低電力状態のうちの一つを選択し、前記監視されるロケーションの値について前記命令の条件が満たされていない場合に、前記選択に応答して前記第１コアを選択された前記低電力状態にする電力管理ロジックと、
を有し、
前記第１コアは、前記ユーザーレベル命令に応答して、第１オペランドと第２オペランドとの間のマスクオペレーションを実行し、前記マスクオペレーションの結果が前記命令の条件に対応する値でない場合に、前記選択された低電力状態に入るシステム。
【請求項１６】
前記第１コアに結合される監視ロジックを更に備え、
前記監視ロジックは、前記監視されるロケーションの更新に応答して、前記第１コアを前記低電力状態から抜け出させる請求項１５に記載のシステム。
【請求項１７】
前記監視されるロケーションと関連付けられているキャッシュラインが更新された時又は前記キャッシュラインのコヒーレンシ状態が更新された時には、前記監視ロジックは、ウェイクアップ信号を前記第１コアに送信する請求項１６に記載のシステム。
【請求項１８】
システムに、
第１スレッドの実行の間に、マルチコアプロセッサの第１コアにおいて、監視されるロケーションとデッドラインの時刻又は前記デッドラインまでの時間を指定するためのタイマ値とを規定するユーザーレベルプロセッサ待機命令を受信する段階、
前記第１コアにおいて、前記ユーザーレベルプロセッサ待機命令の条件が満たされたかを判断し、満たされていない場合には、前記マルチコアプロセッサの電力管理ロジックによって選択される低電力状態に入る段階、
前記マルチコアプロセッサの第２コアにおける第２スレッドの実行の間に、値を更新する段階、
前記値の更新に応答して、前記第１コアの前記低電力状態を抜け出させ、前記条件が満たされたかを判断する段階、
前記条件が満たされた場合には、前記第１コアにおける前記第１スレッドの実行を継続する段階、
を実行させ、
前記ユーザーレベルプロセッサ待機命令は、前記マルチコアプロセッサに、第１の値を読み込ませ、前記第１の値と宛先ロケーションに格納されたデータとの間のマスクオペレーションを実行させ、前記マスクオペレーションの結果が第１結果である場合には、前記低電力状態に入らせ、前記マスクオペレーションの結果が前記第１結果でない場合には、前記マルチコアプロセッサに、前記第１の値を前記宛先ロケーションへ読み込ませるためのものである、
プログラム。
【請求項１９】
前記監視されるロケーションの更新に応答して、前記第１コアについて前記低電力状態を抜け出させ、前記値の更新を利用して前記条件をテストする段階を更に実行させる請求項１８に記載のプログラム。
【請求項２０】
前記監視されるロケーションと関連付けられるキャッシュラインが更新された時、又は、前記キャッシュラインのコヒーレンシ状態が更新された時に、前記監視されるロケーションに対する前記更新を検知し、前記検知に応答して、前記第１コアについて前記低電力状態を抜け出させる段階を更に実行させる請求項１９に記載のプログラム。
【請求項２１】
前記電力管理ロジックを使用して、それぞれが一の低電力状態を一のタイマ値と関連付けている複数のエントリを有するテーブルにおける情報に基づいて、複数の低電力状態から前記低電力状態を選択する段階、
前記第１コアを前記低電力状態にするべく、少なくとも１つの制御信号を送信する段階を更に実行させる請求項１８から２０のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
プロセッサの技術が発展し、多数のコアを有するプロセッサの利用が可能となってきている。ソフトウェアを効率よく実行するためには、複数のコアは、１つのアプリケーションの異なるスレッドを実行するように命じられてもよい。このような構成は、協調型スレッドソフトウェア（cooperative threaded software）と称される。現在の協調型スレッドソフトウェアでは、１のスレッドは、別のスレッドの完了を待つのが通常である。一般的に、待ちスレッドが実行されているプロセッサは、待機の間に有効電力を消費する。また、待機の時間は予測できない場合があり、したがって、プロセッサは、どの位の時間待てばよいのか知らない場合がある。
【０００２】
コアを待たせることを可能にする別のメカニズムとしては、コアを低電力状態のような待機状態にすることが挙げられる。このタスクを実装するには、オペレーティングシステム（ＯＳ）を呼び出す。ＯＳは、ＭＯＮＩＴＯＲ命令及びＭＷＡＩＴ命令と称される１組の命令を実行してもよい。これらの命令は、アプリケーションレベルのソフトウェアは利用できない。替わりに、これらの命令は、監視するアドレス範囲を設定し、監視されるアドレス範囲が更新されるまでプロセッサを低電力状態にすることを可能とするべく、ＯＳ特権レベルにおいてのみ使用される。しかしながら、これらの命令を実行するべくＯＳに入るには、大きなオーバーヘッドが存在する。このオーバーヘッドは、大きなレイテンシ（遅延）の形態であり、ＯＳのスケジューリングに関して、待ちスレッドが待機状態を脱しても、次にスケジュールされるスレッドにならないという複雑性を増すことにつながる可能性がある。
【図面の簡単な説明】
【０００３】
【図１】本発明の一実施形態に係る方法を示したフローチャートである。
【図２】本発明の一実施形態に係る、ターゲット値のテストを示したフローチャートである。
【図３】本発明の一実施形態に係る、プロセッサコアのブロック図である。
【図４】本発明の一実施形態に係る、プロセッサのブロック図である。
【図５】本発明の別の実施形態に係る、プロセッサのブロック図である。
【図６】本発明の一実施形態に係る、協調型スレッド間のやり取りを示したフローチャートである。
【図７】本発明の一実施形態に係る、システムのブロック図である。
【発明を実施するための形態】
【０００４】
様々な実施形態において、ユーザーレベル命令（すなわち、アプリケーションレベル命令）を提供及び使用して、アプリケーションに１以上の条件の発生を待たせることができる。アプリケーションが待機している間、アプリケーションが実行されているプロセッサ（すなわち、マルチコアプロセッサの１コア）は、低電力状態であってもよいし、別のスレッドの実行に切り替えられてもよい。この点に関して本発明の範囲は限定されないが、プロセッサが待機する条件には、値の検出、タイマ（timer）のタイムアウト、又は、例えば、別のプロセッサからの割り込み信号の受信が含まれてもよい。
【０００５】
このように、アプリケーションは、オペレーティングシステム（ＯＳ）又はその他のスーパーバイザ・ソフトウェアに制御を渡す必要なく、例えば、別のスレッドにおいて、１以上のオペレーションの発生を待つことができる、また、命令に提供された命令情報に基づいて、待機状態を制限時間を有する態様で発生させてもよく、プロセッサは適切な低電力状態を選択することができる。すなわち、プロセッサ自身の制御ロジックは、提供される命令情報及びプロセッサで実行される様々な計算に基づいて、入るべき適切な低電力状態を決定することができる。その結果、低電力状態に入るのに、ＯＳが関わることによって発生するオーバーヘッドを避けることができる。プロセッサは、別のピアプロセッサを待つ必要はないが、浮動小数点コプロセッサ又はその他の固定機能デバイスのようなコプロセッサを待つ場合がある。
【０００６】
様々な実施形態において、ユーザーレベル命令は、命令に関係する様々な情報を有してもよく、例えば、監視（モニタ）するロケーション、検索する値及びタイムアウト値が含まれる。この点に関して本発明の範囲は限定されないが、説明を簡単にするために、このユーザーレベル命令は、プロセッサ待機命令と称されてもよい。このようなユーザーレベル命令の様々な特色が提供されてもよいが、特色はそれぞれ、例えば、特定の値、特定の値のセット及び特定の範囲を待つこと、又は、例えば、値が真（true）となったことに応じるカウンタのインクリメントのようなオペレーションと待機を組み合わせることを指示してもよい。
【０００７】
一般的に、プロセッサは、プロセッサ待機命令に応答して様々なアクションを発生させることができ、命令は、テストされる値のロケーションを示すソースフィールド、待機状態を終了すべき点を示すタイムアウト値又はデッドラインタイマ値（テストされる値が達成されていない場合）、及び、取得される値を示す結果フィールドのような命令情報と関連付けられていてもよい。その他のアプリケーションでは、これらのフィールドに加えて、ソース値がマスクされて所定の値に対してテストされるような実装形態（例えば、マスクした結果のマスク値が、ゼロでないかゼロであるか）では、宛先フィールド又はマスクフィールドが存在してもよい。
【０００８】
上記したように、プロセッサは、命令に応答して様々なオペレーションを実行してもよい。一般的に、これらのオペレーションは、監視されているロケーションの値が、目的の値であるかテストすること（例えば、"真（true）"条件をテストするブール演算を実行すること）、及び、デッドラインタイマ値に到達したか否かのテストを含んでもよい。これらの条件のどちらかが満たされた場合（例えば、真であった場合）、又は、別のエンティティからの割り込みが受信された場合には、命令が完了とされてもよい。それ以外の場合には、メカニズムは、値が変更されているかを確認するべく、ロケーションの監視を開始してもよい。この時、待機状態に入る。この待機状態では、プロセッサは低電力状態に入る、又は、別のプロセッサハードウェアスレッドの実行を開始させてもよい。低電力状態が望ましい場合には、プロセッサは、デッドラインタイマに到達するまでの残り時間に少なくとも一部基づいて、適切な低電力状態を選択してもよい。そして、低電力状態に入り、プロセッサは、上記のような条件のうちの１つによって起動されるまで、この低電力状態に留まっていてもよい。上記では、一般的なオペレーションを用いて説明を行ったが、様々な異なる実装形態では、様々な特徴及びオペレーションが異なる態様で発生してもよい。
【０００９】
図１には、本発明の一実施形態に係る方法のフローチャートが示されている。図１に示すように、方法１００は、プロセッサ待機オペレーションを扱うユーザーレベル命令を実行するプロセッサによって実装される。図に示すように、方法１００は、受信された命令をデコードする段階から開始してもよい（ブロック１１０）。一例として、命令は、協調型スレッドアプリケーションの実行において一定の相互依存性を有してもよい命令をそれぞれ含む複数のスレッドを使用して実装されたアプリケーションによって提供されるユーザーレベル命令であってもよい。このような命令をデコードした後、プロセッサは、メモリの値をキャッシュ及びレジスタにロードしてもよい（ブロック１２０）。具体的には、命令のソースオペランドは、例えば、値が取得されるメモリ内におけるロケーションを特定してもよい。例えば、プライベートキャッシュのような命令を実行するコアと関連付けられたローレベル（low-level）キャッシュであるキャッシュメモリに、値がロードされてもよい。また、値は、コアのレジスタに格納されてもよい。一例として、このレジスタは、スレッドの論理プロセッサの汎用レジスタであってもよい。次に、制御がブロック１３０に移る。ブロック１３０において、命令情報に応じて、デッドライン（期限）が計算されてもよい。具体的には、デッドラインは、条件を満足しない場合（例えば、所望の値が更新されない場合）に、待機状態を発生させる時間の長さである。一実施形態において、命令のフォーマットは、デッドラインタイマ値を提供する情報を含んでもよい。このデッドラインに達するまでの適切な時間を決定するべく、ある実装形態では、受信されたデッドラインタイマ値を、プロセッサに存在する現在のタイムカウンタ値、例えば、タイムスタンプカウンタ（ＴＳＣ）値と比較してもよい。比較して得られた差分が、ある実施形態ではカウンタ又はレジスタを使用して実装されているデッドラインタイマに読み込まれてもよい。一実施形態では、デッドラインタイマは、カウントダウンを開始するカウントダウンタイマであってもよい。この実装形態の場合、デッドラインは、現在のＴＳＣ値から差し引かれて、カウントダウンタイマは、デッドライン向けて複数周期の時を刻む。ＴＳＣ値が、デッドラインを超えると、プロセッサの再開がトリガされる。すなわち、以下で説明するように、デッドラインタイマが０になるまでデクリメントされると、その時まで待機状態が続いている場合には、待機状態を終了させてもよい。レジスタの実装形態では、比較器によって、ＴＳＣカウンタの値と各周期におけるデッドラインとを比較してもよい。
【００１０】
上記のオペレーションにより、待機状態の間に、様々な構造へのアクセス及びテストを適切にセットアップすることができる。そして、待機状態に入ってもよい。待機状態は、一般的に、複数条件のうちの１つが発生するまで繰り返し実行されるループ１５５の一部であってもよい。図に示すように、命令情報からの目的の値が、レジスタに格納されている値と一致するかの判断が行われてもよい（ひし形１４０）。命令情報が目的の値を含む実装形態では、メモリから取得されレジスタに格納されたデータは、格納された値が目的の値と一致しているか判断するべくテストされてもよい。一致する場合には、条件が満たされたとして、制御がブロック１９５に移り、待機命令の実行が完了してもよい。命令の完了によって、待機状態を抜け出す理由のコードに対する指示を可能とするべく、様々なフラグ又はその他の値が設定されるようにしてもよい。命令が完了すると、待機状態を要求したスレッドのオペレーションが継続してもよい。ひし形１４０において、条件が満たされていないと判断された場合には、制御はひし形１５０に移り、デッドラインが発生したかの判断がなされる。発生した場合には、上記したように命令は完了となる。発生していない場合には、制御はひし形１６０に移り、プロセッサのウェイクアップ（wake up）を求めているその他のハードウェア構成要素が存在するかを判断してもよい。存在する場合には、上記のように命令が完了する。存在しない場合には、制御はブロック１７０に移り、デッドラインタイマの値に少なくとも一部基づいて、低電力状態が決定される。すなわち、ＯＳが介入することなく、プロセッサ自身が、デッドラインが発生するまでの残り時間の長さに基づいて、適切な低電力状態を決定する。この決定を行うのに、ある実施形態では、例えば、プロセッサのアンコア（uncore）のロジックを使用してもよい。このロジックは、様々な低電力状態とデッドラインタイマ値とを関係付けるテーブルを含んでもよい又は関連付けられていてもよく、これについては以下で説明する。ブロック１７０の決定に基づいて、プロセッサは、低電力状態へと入る（ブロック１８０）。低電力状態では、プロセッサの様々な構造、命令が実行されるコア及びその他の構成要素の両方が、低電力状態に置かれてもよい。実装形態によって、低電力状態に置かれる具体的な構造及び低電力状態のレベルは、様々に異なる。限られた長さの時間しか残されていない場合には特定の低電力状態（例えば、深いスリープ状態）に入ることは適切でない場合があることから、更新される値が目的の値でないためにループが止まってしまう場合には、新しい低電力状態の決定は、更新されたデッドラインタイマの値に基づいて実行されてもよい。
【００１１】
コアを低電力状態にする様々なイベントが発生してもよい。特に、キャッシュされたデータ（すなわち、監視されるロケーションに対応する）が更新された場合（ひし形１９０）には、低電力状態が実行されてもよい。この場合には、制御がひし形１４０に戻される。同様に、デッドラインを過ぎた場合及び／又はウェイク信号が別のハードウェア構成要素から受信された場合には、制御が低電力状態から、ひし形１５０及び１６０のうちの一方に渡される。図１の実施形態では、ハイレベル実装形態が示されたが、本発明の範囲はこの点に関して限定されない。
【００１２】
別の実装形態では、目的の値に対してマスクベースのテストが行われてもよい。すなわち、ユーザーレベル命令は、明示的に、取得すべき目的の値を指示してもよい。一例として、この目的の値は、メモリから取得されたソース値と命令のソース／宛先オペランドに存在するマスク値との間のマスク演算の非ゼロ値であってもよい。一実施形態において、ユーザーレベル命令は、プロセッサＩＳＡの、ロード、マスク、ゼロウェイト（ＬＤＭＷＺ）命令であってもよい。一実施形態では、命令は、ＬＤＭＷＺ  ｒ３２／６４、Ｍ３２／６４の形式であってもよい。この形式では、第１オペランド（ｒ３２／６４）はマスクを格納し、第２オペランド（Ｍ３２／６４）は、ソース値（すなわち、監視されるロケーション）を特定してもよい。そして、タイムアウト値が、第３レジスタに格納されてもよい。例えば、デッドラインは、明示的でないレジスタ（implicit register）に存在してもよい。具体的には、ＥＤＸ：ＥＡＸレジスタを使用してもよく、このレジスタは、ＴＳＣカウンタが読み出されたときに書き込まれるレジスタと同じセットである。一般的に、命令は、セマフォ（semaphore）値のビジーでないポーリングを実行してもよく、セマフォが利用可能でない場合には、低電力状態に入る。異なる実装形態では、ゼロ（０）が待機状態の構成要素が存在しないことを示す、ビット毎のセマフォ及びカウンティングセマフォの両方を扱ってもよい。タイムアウト値は、無条件でオペレーションを再開する前の、プロセッサが待つべきＴＳＣサイクルにおいて測定される時間の長さを、非ゼロ値結果で示してもよい。一実施形態において、どの物理的プロセッサが低電力状態にあるかの情報を、メモリマップドレジスタ（例えば、設定及びステータスレジスタ（ＣＳＲ））を介してソフトウェアに提供することができる。
【００１３】
この実施形態では、ＬＤＭＷＺ命令は、ソースメモリロケーションからデータを読み込んで、そのデータをソース／宛先値でマスクし、生成された値がゼロであるかをテストする。マスクされた値がゼロでない場合には、メモリから読み込まれた値は、マスクされていないソース／宛先レジスタに配置される。ゼロである場合には、プロセッサは低電力待機状態に入る。この低電力状態は、Advanced Configuration and Power Interface (ACPI)規格バージョン４（２００９年６月１６日）に規定されているいわゆるＣステートのような現在規定されている低電力状態に対応していてもよいし、対応していなくてもよい。規定の期間が満了した、外部からの例外（例えば、一般的な割り込み（interrupt：ＩＮＴＲ）、マスク可能でない割り込み（non-maskable interrupt：ＮＭＩ）又はシステム管理割り込み（system management interrupt：ＳＭＩ））が通知された時、又は、マスクがゼロでない場合の値でソースメモリロケーションが書き込まれた時まで、プロセッサは低電力状態にあり続けてもよい。この待機状態に入る一部として、プロセッサは、プロセッサが現在待機状態であることを示すメモリマップドレジスタ（ＣＳＲ）ビットをクリアしてもよい。
【００１４】
マスクされた場合にゼロでない値が生成されるような値が、監視されているロケーションに書き込まれたことに応答して、待機状態から抜ける際に、フラグレジスタのゼロ値インジケータがクリアされて、マスクされていない値の読み込み値が、宛先レジスタに配置されてもよい。タイマが満了になると、低電力状態から脱し、この状態をソフトウェアが検出可能なようにフラグレジスタのゼロ値インジケータが設定されてもよい。外部例外によって低電力状態からの脱出が行われる場合には、プロセッサ及びメモリのステートは、命令が実行されたとは見なされないようなステートであってもよい。そして、通常の実行フローに戻ると、同じＬＤＭＷＺ命令が再び実行される。
【００１５】
図２には、本発明の別の実施形態に従って実行されるターゲット値のテストを示したフローチャートである。図２に示すように、方法２００は、ソースデータを第１レジスタにロードすることによって開始されてもよい（ブロック２１０）。このソースデータは、第２レジスタに存在するマスクでマスクされてもよい（ブロック２２０）。様々な実施形態において、第１及び第２レジスタは、命令によって規定されてもよく、それぞれソースデータ及び宛先データの記憶場所に対応していてもよい。そして、マスクオペレーションの結果がゼロであるかの判断がなされてもよい（ひし形２３０）。ゼロである場合は、所望の条件が満たされ、プロセッサは低電力状態に入る（ブロック２４０）。ゼロでない場合は、ソースデータは、第２レジスタに格納されてもよく（ブロック２５０）、命令実行が完了する（ブロック２６０）。
【００１６】
待機状態の間に、ひし形２６５において目的のロケーションが更新されたと判断された場合には、制御はブロック２２０に戻り、マスクオペレーションが実行される。待機状態の間に、（ひし形２７０において判断される）別の条件が発生したと判断された場合には、制御はブロック２６０に移り、命令が完了する。図２の実施形態が、特定の実装例を示して説明されたが、本発明の範囲は、この点に関して限定されない。
【００１７】
図３は、本発明の一実施形態に係るプロセッサコアのブロック図である。図３に示すように、プロセッサコア３００は、マルチステージ・パイプライン・アウトオブオーダ・プロセッサであってもよい。図３では、プロセッサコア３００は、本発明の一実施形態に係るプロセッサ待機状態に関係して使用される様々な構成を示すべく、相対的に簡略化して図示されている。
【００１８】
図３に示すように、コア３００は、実行すべき命令をフェッチし、プロセッサにおける後の使用に備えて命令を準備するのに使用されてもよいフロントエンドユニット３１０を含む。例えば、フロントエンドユニット３１０は、フェッチユニット３０１、命令キャッシュ３０３及び命令デコーダ３０５を含んでもよい。ある実装形態では、フロントエンドユニット３１０は更に、マイクロオペレーション記憶装置及びマイクロコード記憶装置と共に、トレースキャッシュを含んでもよい。フェッチユニット３０１は、例えば、メモリ又は命令キャッシュ３０３からマクロ命令をフェッチしてもよく、命令をプリミティブ、すなわち、プロセッサが実行するマイクロオペレーションへとデコードするべく、命令を命令デコーダ３０５に供給してもよい。フロントエンドユニット３１０において扱われるこのような命令の１つが、本発明の一実施形態に係るユーザーレベルプロセッサ待機命令であってもよい。この命令は、フロントエンドユニットを、待機命令に関連する上記のようなオペレーションの実行を可能とする様々なマイクロオペレーションにアクセス可能としてもよい。
【００１９】
フロントエンドユニット３１０と実行ユニット３２０との間には、マイクロ命令を受信して実行に備えるアウトオブオーダ（ＯＯＯ）エンジン３１５が結合されてもよい。具体的には、ＯＯＯエンジン３１５は、マイクロ命令フローを並び替えて、実行に必要な様々なリソースを割り当てると同時に、レジスタファイル３３０及びベクトルレジスタファイル３３５のような様々なレジスタファイル内の記憶ロケーションにおける論理的レジスタのリネームを提供する様々なバッファを含んでもよい。レジスタファイル３３０は、整数及び浮動小数点オペレーションに対して、別のレジスタファイルを含んでもよい。拡張レジスタファイル３３５は、ベクトルサイズ単位の記憶場所を提供してもよく、例えば、１レジスタにつき２５６又は５１２ビットであってもよい。
【００２０】
実行ユニット３２０内には様々なリソースが存在してもよく、例えば、様々な整数、浮動小数点及び単一命令複数データ（ＳＩＭＤ）ロジックユニット、その他の専用ハードウェアが存在してもよい。例えば、このような実行ユニットは、１以上の算術論理演算ユニット（ＡＬＵ）３２２を含んでもよい。また、本発明の一実施形態に係るウェイクアップロジック３２４が存在してもよい。ウェイクアップロジックは、ユーザーレベル命令に応答してプロセッサ待機モードを実行することに関係する特定のオペレーションを実行するのに使用されてもよい。以下に詳細に説明するように、このような待機状態を扱うための更なるロジックが、アンコアのようなプロセッサの別の部分に存在してもよい。図３には、複数のタイマ３２６のセットが示されている。分析を行う関係のあるタイマには、ＴＳＣタイマと、その他の条件が満たされない場合であってプロセッサが待機状態を離れるまでのデッドラインに対応する値を設定することができるデッドラインタイマが含まれる。ウェイクアップロジック３２４は、デッドラインタイマが特定のカウント値に達した時に（ある実施形態では、カウントダウンが０に達した時であってもよい）、特定のオペレーションをアクティブにしてもよい。結果が、リタイアメントロジック、すなわちリオーダバッファ（ＲＯＢ）３４０に提供されてもよい。具体的には、ＲＯＢ３４０は、実行される命令と関連付けられた情報を受信するための様々なアレイ及びロジックを含んでもよい。情報は、ＲＯＢ３４０によって調べられて、命令が有効にリタイアされて、得られたデータがプロセッサのアーキテクチャ状態にコミットされるか否か、又は、命令の適切なリタイアメントを阻む１以上の例外が発生したかが判断される。無論、ＲＯＢ３４０は、リタイアメントに関するその他のオペレーションを扱ってもよい。本発明の一実施形態に係るプロセッサ待機命令において、リタイアメントにより、ＲＯＢ３４０に、プロセッサが待機状態を脱する理由を示すことができるフラグレジスタ又はその他のステータスレジスタの１以上のインジケータのステートを設定させてもよい。
【００２１】
図３に示すように、ＲＯＢ３４０は、一実施形態ではローレベルキャッシュ（例えば、Ｌ１キャッシュ）であるキャッシュ３５０と結合されるが、この点に関して、本発明の範囲は限定されない。また、実行ユニット３２０は、キャッシュ３５０と直接結合することができる。図に示すように、キャッシュ３５０は、特定のキャッシュライン、すなわち、監視ロケーションを監視する監視エンジン３５２を含み、値が更新された時、ラインのコヒーレンシ状態に変化があった時、及び／又はラインが失われた時に、ウェイクアップロジック３２４（及び／又はアンコア構成要素）にフィードバックを提供する。監視エンジン３５２は、所定のラインを取得し、取得したラインを共有状態に保持する。共有状態からラインを失った場合には、監視エンジンは、プロセッサのウェイクアップを開始する。キャッシュ３５０から、ハイレベルキャッシュ、システムメモリ等へのデータ伝送が発生してもよい。図３の実施形態では、このようなハイレベル構成が示されているが、本発明の範囲はこの点に関して限定されない。
【００２２】
図４は、本発明の一実施形態に係るプロセッサのブロック図である。図４に示すように、プロセッサ４００は、複数のコア４１０ａ〜４１０ｎを含むマルチコアプロセッサであってもよい。一実施形態において、このようなコアはそれぞれ、図３を参照して説明したコア３００のように構成されていてもよい。様々なコアは、インターコネクト４１５を介して、様々な構成要素を含むアンコア（uncore）４２０と結合されてもよい。図に示すように、アンコア４２０は、ラストレベルキャッシュであってもよい共有キャッシュ４３０を含んでもよい。加えて、アンコアは、集積メモリコントローラ４４０、様々なインターフェース４５０及び電力管理ユニット４５５を含んでもよい。様々な実施形態において、プロセッサ待機命令の実行と関連する機能の少なくとも一部は、電力管理ユニット４５５に実装されてもよい。例えば、命令と共に受信された情報、例えば、デッドラインタイマ値に基づいて、電力管理ユニット４５５は、待機命令を実行する所定のコアが置かれる適切な低電力状態を決定してもよい。一実施形態において、電力管理ユニット４５５は、タイマ値を低電力状態と関連付けるテーブルを含んでもよい。ユニット４５５は、命令と関係付けられており決定されたデッドライン値に基づいてテーブルを参照し、対応する待機状態を選択してもよい。そして、電力管理ユニット４５５は、複数の制御信号を生成して、様々な構成要素、所定のコア及びその他のプロセッサユニットの両方を、低電力状態に入らせてもよい。図に示すように、プロセッサ４００は、例えば、メモリバスを介して、システムメモリ４６０と通信を行ってもよい。また、インターフェース４５０により、周辺デバイス、マスストレージ等の様々なオフチップ構成要素との接続を行うことができる。図４の実施形態では特定の実装形態が示されているが、本発明の範囲はこの点に関して限定されない。
【００２３】
別の実施形態では、プロセッサアーキテクチャは、プロセッサが、ソースＩＳＡと称される第１のＩＳＡの命令を実行することができるエミュレーション機能を含んでもよく、アーキテクチャは、ターゲットＩＳＡと称される第２のＩＳＡに従う。一般的に、ＯＳ及びアプリケーションプログラムの両方を含むソフトウェアは、ソースＩＳＡにコンパイルされ、ハードウェアが、特別な性能及び／又はエネルギー効率機能を有する所定のハードウェア実装のために特に設計されたターゲットＩＳＡを実装する。
【００２４】
図５には、本発明の別の実施形態に係る、プロセッサのブロック図が示されている。図５に示すように、システム５００は、プロセッサ５１０及びメモリ５２０を含む。メモリ５２０は、システム及びアプリケーションソフトウェアの両方を保持するコンベンショナルメモリ５２２、及び、ターゲットＩＳＡ用に装備されたソフトウェアを有する隠しメモリ（concealed memory）５２４を含む。図に示すように、プロセッサ５１０は、ソースコードをターゲットコードへと変換するエミュレーションエンジン５３０を含む。エミュレーションは、解釈（Interpretation）又はバイナリ変換を使用して行われてもよい。解釈は、最初に出会うコードに対して多くの場合適用される。そして、ダイナミックプロファイリングにより、頻繁に実行されるコード領域（例えば、ホットスポット）が発見されると、そのコード領域が、ターゲットＩＳＡに変換されて、隠しメモリ５２４におけるコードキャッシュに格納される。変換プロセスの一部として最適化が行われ、非常に高い頻度で使用されるコードについては、後で更に最適化を行ってもよい。コードの変換されたブロックは、コードキャッシュ５２４に保持されて、繰り返し使用されてもよい。
【００２５】
また、図５に示すように、マルチコアプロセッサの１つのコアであってもよいプロセッサ５１０は、命令ポインタアドレスを命令キャッシュ（Ｉ−キャッシュ）５５０に提供するプログラムカウンタ５４０を含む。図に示すように、Ｉキャッシュ５５０は更に、所定の命令アドレスのミスが発生した場合に、隠しメモリ部分５２４から直接ターゲットＩＳＡ命令を受信してもよい。そして、Ｉキャッシュ５５０は、入力される命令を受信するべく、ターゲットＩＳＡのデコーダであってもよいデコード５６０に提供されてもよいターゲットＩＳＡ命令を格納してもよく、入力される命令は、マクロ命令レベルであってもよく、命令は、プロセッサパイプライン５７０内で実行するためのマイクロ命令へと変換される。本発明はこの点に関して限定されないが、パイプライン５７０は、命令を実行及びリタイアする様々なステージを含むアウトオブオーダーパイプラインであってもよい。本発明の一実施形態に係るプロセッサ待機命令を実行するべく、上記したような様々な実行ユニット、タイマ、カウンタ、記憶場所及び監視装置（モニタ）が、パイプライン５７０に存在してもよい。すなわち、プロセッサ５１０が、ユーザーレベルプロセッサの待機命令が提供されるマイクロアーキテクチャとは異なるマイクロアーキテクチャである実装形態であっても、下に位置するハードウェアにおいて命令を実行することができる。
【００２６】
図６は、本発明の一実施形態に係る、協調型スレッド間のやり取りを示したフローチャートである。図６に示すように、方法６００は、例えば、マルチスレッド型プロセッサにおいて、複数のスレッドを実行するのに使用されてもよい。図６に示すように、２つのスレッド、スレッド１及びスレッド２は、１つのアプリケーションのスレッドであり、第１のスレッドによって使用されるデータが、最初に第２のスレッドによって更新されなければならないような態様で実装されている。したがって、スレッド１は、実行の間に、プロセッサ待機命令を受信してもよい（ブロック６１０）。この待機命令の実行の間に、テスト条件が満たされたか否かが判断されてもよい（ひし形６２０）。満たされていない場合には、スレッドが、低電力状態に入ってもよい（ブロック６３０）。図６には示されていないが、様々な条件のうちの１つが発生した場合には、この状態を脱することができる。テスト条件が満たされていた場合には、制御がブロック６４０に移り、第１スレッドにおける継続コード実行が発生してもよい。テスト条件が、監視されるロケーションに関するものであり、第２スレッドによっていつ更新が完了したかを示してもよい。スレッド２に示されるコードの実行の前に、テスト条件が満たされておらず、プロセッサが低電力状態に入る。
【００２７】
そして、図６に示すように、スレッド２は、第１スレッドに実装されているコードを実行してもよい（ブロック６５０）。例えば、第１スレッドの実行の間に使用されてもよい１以上の値を更新するべく、第２スレッドがコードを実行してもよい。第１スレッドが、更新された値を使用して実行を行うことを確かにするべく、第２スレッドによってデータが更新されるまで、第１スレッドが低電力状態に入るように、アプリケーションが書かれていてもよい。第２スレッドの実行の間、相互依存コードの実行が完了したかの判断が行われてもよい（ひし形６６０）。行われていない場合には、相互依存コードの実行の継続が発生してもよい。相互依存コード部分が完了してる場合には、制御がブロック６７０に移り、監視されているロケーションに所定の値が書き込まれてもよい（ブロック６７０）。例えば、この所定の値が、プロセッサ待機命令と関連付けられたテスト値に対応していてもよい。別の実施形態では、所定の値は、マスクされた時、又は、監視ロケーションにおける値のマスクとして使用された時に、結果がゼロとならない、テスト条件が満たされ第１スレッドが実行を継続可能であることを示す値であってもよい。スレッド２に示すように、所定の値を書き込んだ後、第２スレッドの継続コード実行が発生してもよい（ブロック６８０）。図６の実施形態では、特定の実装形態が示されたが、本発明の範囲はこの点に関して限定されない。
【００２８】
実施形態は、プロセッサが、ＯＳの介入の必要なしに、１以上の所定の条件の発生を待つストールを可能とする軽量ストールメカニズムを実行可能としてもよい。この場合、プロセッサが電力を消費し、ハイパースレッド化されている機械が、テスト、一時停止及びジャンプオペレーションを含むループにおいて、セマフォ／値が真になったかをアプリケーションがポーリングする必要がない。したがって、オーバーヘッド及びスケジューリングの両方における制限をＯＳが監視する必要がなくなる（待機アプリケーションが、スケジュールされる次のスレッドでなくてもよい）。したがって、協調型スレッド間において軽量通信とすることができ、更に、プロセッサは、ユーザーが示した時間パラメータに基づいて柔軟にスリープ状態を選択することができる。
【００２９】
実施形態は、様々な種類のシステムに実装されてもよい。図７は、本発明の一実施形態に係る、システムのブロック図である。図７に示すように、マルチプロセッサシステム７００は、ポイント・ツー・ポイントインターコネクトシステムであり、ポイント・ツー・ポイントインターコネクト７５０を介して結合される第１プロセッサ７７０及び第２プロセッサ７８０を含む。図７に示すように、プロセッサ７７０及び７８０のそれぞれは、第１及び第２プロセッサコア（すなわち、プロセッサコア７７４ａ及び７７４ｂ及びプロセッサコア７８４ａ及び７８４ｂ）を含むマルチコアプロセッサであってもよく、プロセッサ内には、更に多くのコアが存在していてもよい。プロセッサコアは、ユーザーレベルプロセッサ待機命令を含む様々な命令を実行してもよい。
【００３０】
また、図７に示すように、第１プロセッサ７７０は、メモリコントローラハブ（ＭＣＨ）７７２及びポイント・ツー・ポイント（Ｐ−Ｐ）インターフェース７７６及び７７８を含む。同様に、第２プロセッサ７８０は、ＭＣＨ７８２及びＰ−Ｐインターフェース７８６及び７８８を含む。図７に示すように、ＭＣＨ７７２及び７８２は、プロセッサをそれぞれのメモリ、すなわちメモリ７３２及びメモリ７３４に結合させ、これらメモリは、メインメモリ（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ））のプロセッサとローカルに接続されている部分であってもよい。第１プロセッサ７７０及び第２プロセッサ７８０は、Ｐ−Ｐインターコネクト７５２及び７５４を介して、チップセット７９０にそれぞれ結合されていてもよい。図７に示すように、チップセット７９０は、Ｐ−Ｐインターフェース７９４及び７９８を含む。
【００３１】
さらに、チップセット７９０は、Ｐ−Ｐインターコネクト７３９によって高性能グラフィックスエンジン７３８にチップセット７９０を結合させるインターフェース７９２を含む。そして、チップセット７９０は、インターフェース７９６を介して、第１バス７１６に接続されてもよい。図７に示すように、様々な入出力（Ｉ／Ｏ）デバイス７１４が、第１バス７１６を第２バス７２０に結合するバスブリッジ７１８と共に、第１バス７１６と結合されていてもよい。様々なデバイスを、第２バス７２０に結合させてもよく、例えば、キーボード／マウス７２２、通信デバイス７２６、ディスクドライブ又は一実施形態ではコード７３０を含んでもよいマスストレージデバイスのようなデータ記憶ユニット７２８を含むデバイスを結合させてもよい。更に、オーディオＩ／Ｏ７２４を、第２バス７２０と結合させてもよい。
【００３２】
実施形態はコードに実装されてもよく、命令を実行するシステムをプログラムするのに使用される命令を格納する記憶媒体に格納されてもよい。これに限定するわけではないが、記憶媒体としては、フロッピー（登録商標）ディスク、光ディスク、ソリッドステートドライブ（ＳＳＤ）、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ）、再書き込み可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光学ディスクを含むあらゆるディスク、並びに、リードオンリーメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）及びスタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能−プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能−プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、磁気又は光学カードのような半導体デバイス、又は、電気的命令を格納するのに適したその他の種類の媒体が含まれる。
【００３３】
本発明が、限られた数の実施形態を参照して説明されたが、数多くの改良及び変更が可能であることは、当業者にとって明らかである。添付の特許請求の範囲は、本発明の精神及び範囲におけるこのような改良及び変更も含むことを意図している。
【図１】
0005571784.tif 000002
【図２】
0005571784.tif 000003
【図３】
0005571784.tif 000004
【図４】
0005571784.tif 000005
【図５】
0005571784.tif 000006
【図６】
0005571784.tif 000007
【図７】
0005571784.tif 000008