(57)【要約】【課題】アウト・オブ・オーダプロセッサで投機的にロック命令を実行する方法及び装置の提供。【解決手段】１実施の形態では、所与のロック命令が実際に競合するかについて予測が行われる。競合しない場合、ロック命令は投機的に実行された通常のロードマイクロ動作を有するとして扱われる。モニタロジックは、ロック命令が実際に競合することの示唆を探す。かかる示唆が発見されない場合、投機的なロードマイクロ動作及びロック命令に対応する他のマイクロ動作がリタイアとなる。しかし、かかる示唆が実際に発見された場合、ロック命令が再始動され、予測メカニズムがアップデートされる。【選択図】図４
2011175669.tif 000002
【特許請求の範囲】
【請求項１】
ロック命令が競合するかに関する予測を発生する予測手段と、
前記予測が前記ロック命令が競合しないことを示すとき、前記ロック命令に対応するload_with_lockマイクロ動作を有するマイクロ動作のセットを投機的に発生するスケジュール手段と、
投機的に発生されたload_with_lockマイクロ動作がリタイアとなる準備がされたとき、store_unlockマイクロ動作を発生する手段と、
前記store_unlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたload_with_lockマイクロ動作をリタイアさせる手段と、
競合することの示唆が生じたかを判定するモニタ手段と、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、
前記モニタ手段が前記競合することの示唆が生じたことを判定したとき、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続する実行手段と、
を有することを特徴とするアウト・オブ・オーダ実行プロセッサ。
【請求項２】
前記競合することの示唆は割り込みである、
請求項１記載のプロセッサ。
【請求項３】
前記モニタ手段は、前記unlockマイクロ動作によるストア動作が最も古いリタイアされていないstoreマイクロ動作となる前に、前記競合することの示唆を判定する、
請求項１記載のプロセッサ。
【請求項４】
前記モニタ手段は、前記unlockマイクロ動作によるストア動作の結果がグローバルに観察可能になる前に、前記競合することの示唆を判定する、
請求項１記載のプロセッサ。
【請求項５】
前記ロック命令を前記load_without_lockマイクロ動作にデコードするデコーダを更に有する、
請求項１記載のプロセッサ。
【請求項６】
アウト・オブ・オーダ実行プロセッサでロック命令を実行する方法であって、
当該方法は、
ロック命令が競合するかに関して予測手段が予測するステップと、
前記予測が前記ロック命令が競合しないことを示すとき、前記ロック命令に対応するload_with_lockマイクロ動作を有するマイクロ動作のセットをスケジュール手段が投機的に発生するステップと、
投機的に発生されたload_with_lockマイクロ動作がリタイアとなる準備がされたとき、store_unlockマイクロ動作を発生手段が発生するステップと、
前記store_unlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたload_with_lockマイクロ動作をリタイア手段がリタイアさせるステップと、
競合することの示唆をモニタ手段によりモニタするステップと、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、
前記競合することの示唆が生じたことを前記モニタ手段が検出したとき、実行手段が、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続するステップと、
を含むことを特徴とする方法。
【請求項７】
前記競合することの示唆は割り込みである、
請求項６記載の方法。
【請求項８】
前記発生するステップは、load_without_lockマイクロ動作をバッファから送出するステップを含む、
請求項６記載の方法。
【請求項９】
前記load_without_lockマイクロ動作は、load_with_lockマイクロ動作として前記バッファに記憶される、
請求項８記載の方法。
【請求項１０】
前記発生するステップは、前記ロック命令からの前記load_without_lockマイクロ命令をデコードするステップを含む、
請求項９記載の方法。
【請求項１１】
アウト・オブ・オーダ実行プロセッサでロック命令を実行する装置であって、
当該装置は、
ロック命令が競合するかを予測する手段と、
前記予測手段が前記ロック命令が競合しないことを予測したとき、前記ロック命令に対応するload_with_lockマイクロ動作を発生する手段と、
投機的に発生されたload_with_lockマイクロ動作がリタイアとなる準備がされたとき、store_unlockマイクロ動作を発生する手段と、
前記store_unlockマイクロ動作がリタイアとなる準備がされたとき、前記投機的に発生されたload_with_lockマイクロ動作をリタイアさせる手段と、
競合することの示唆をモニタする手段と、前記競合することの示唆は、unlockマイクロ動作によるストア動作についてキャッシュミスが生じたときに生じ、
前記モニタ手段が前記競合することの示唆を検出したとき、前記ロック命令の実行を再開し、ストアバッファに存在する全てのリタイアされていない命令について前記ストアバッファがフラッシュされた後に前記ロック命令の実行を非投機的に継続する手段と、
を備えることを特徴とする装置。
【請求項１２】
前記発生手段は、バッファからload_without_lockマイクロ動作を送出する手段を含む、
請求項１１記載の装置。
【請求項１３】
前記load_without_lockマイクロ動作は、前記バッファに前記load_with_lockマイクロ動作として記憶される、
請求項１２記載の装置。
【請求項１４】
前記発生手段は、前記ロック命令から前記load_without_lockマイクロ動作をデコードする手段を含む、
請求項１３記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、（アトミックに、メモリから値を読み込み，変更し，その値を同じアドレスに書き戻す）メモリロック命令を利用するマイクロプロセッサ全般に関し、より詳細には、アウト・オブ・オーダ実行アーキテクチャで実行されるメモリロック命令を利用することを望むマイクロプロセッサに関する。
【背景技術】
【０００２】
現代のマイクロプロセッサは、それらのアーキテクチャにおいてアウト・オブ・オーダ実行の使用をサポートする。個々の命令は、対応するマイクロ動作（micro-operation）のセットにそれぞれデコードされ、次いで、このマイクロ動作のセットは、実行前にリオーダバッファに記憶される。スケジューラは、どのマイクロ動作が実際に実行の準備ができているかを判定し、厳密なプログラムオーダー以外、すなわち「アウト・オブ・オーダ」でマイクロ動作を発する。マイクロ動作がリタイアとなる準備がされたとき、そのマイクロ動作はプログラムオーダーでリタイアとなり、したがってプログラムオーダーで実行されていない外観を有する。
【０００３】
先のアウト・オブ・オーダプロセッサにおいて問題を提起する１つの命令のファミリは、ロック命令ファミリである。ロック命令は、一般に信号をアサートするか、又はアトミックなメモリトランザクションを実行する幾つかの手順を利用する。すなわち、ロック命令は、他のプロセッサ、又は同じプロセッサ上の他のスレッドが構成要素のロードの間に使用されるメモリロケーション（又は等価なキャッシュライン）にアクセスするのを防止し、マイクロ命令を記憶するため、メモリにおける特定の位置をロックする。異なる実施の形態では、信号は、バス信号又はキャッシュコヒーレンシープロトコルロックを含む。ロック命令の特定の実現は、ロック命令が実行され始める前に（プログラムオーダーでの）全ての前の命令がリタイアとなることが必要とされる。ロック命令のロード及びストアマイクロ動作は、プロセッサがロック命令により使用されるメモリアドレス及びキャッシュラインをプロテクトしなければならない時間を制限するため、それらができるだけ互いに近くで実行及びリタイアされるように、一般に遅延される。しかし、これは、ロードマイクロ動作及び何れか他の介入するマイクロ動作が投機実行するのを妨げ、それらの遅延をプログラムのクリティカルパスに付加する。また、特定の実現は、後続するロード動作又は他の後続する動作が投機実行するのを妨げ、これにより後続する動作の遅延が増加される。実際に、これは、アウト・オブ・オーダ処理をサポートするために使用されるリオーダバッファがパイプラインを満たして失速し、アプリケーションのパフォーマンスを更に低下させる。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明は、例示を通して説明され、添付図面の図において制限されるものではない。図において、同じ参照符号は同様のエレメントを参照する。
【０００５】
以下の説明は、ロック命令のアウト・オブ・オーダ実行を可能にする記述を説明するものであり、この技術は、それらのロック命令が競合しないときに利益を与えるものである。ロック命令は、１を超えるプロセッサ、又は同じプロセッサにおける１を超えるスレッドが本質的に同時にメモリにおける同じロケーションをロックするのを試みたときに競合される、といわれる。ロック命令は、別のプロセッサ、又は同じプロセッサにおける別のスレッドが別のプロセッサ又はスレッドによりロックされたメモリにおけるロケーションにアクセスするのを試みたときに競合されるとして扱われる。これは、他のプロセッサ（又は他のスレッド）のメモリアクセスがロックアテンプト又は単なるシンプルメモリアクセスであるかを判定するのが可能ではないためである。
【０００６】
以下の記載では、ロジックインプルメンテーション、ソフトウェアモジュールアロケーション、バス及び他のインタフェースシグナリング技術のような様々な特定の詳細、及び動作の詳細は、本発明の更に全体的な理解を提供するために述べられる。しかし、当業者によれば、本発明はかかる特定の詳細なしに実施さてる場合があることを理解されるであろう。他の例では、制御構造、ゲートレベル回路、フルソフトウェア命令シーケンスは、本発明を曖昧にすることのないように、詳細に示されない。当業者であれば、包含される記載により、過度の実験なしに適切な機能を実現することができる。所定の実施の形態では、本発明は、Ｉｎｔｅｌ（登録商標）社により製造されるプロセッサのようなＰｅｎｔｉｕｍ（登録商標）コンパチブルプロセッサ用の定量化した属性値を予測する形式で開示される。しかし、本発明は、アウト・オブ・オーダで命令を実行する、Ｉｔａｎｉｕｍプロセッサファミリコンパチブルプロセッサ、又はＸ−Ｓｃａｌｅ（登録商標）ファミリコンパチブルプロセッサのような他の種類のプロセッサで実施される場合がある。
【図面の簡単な説明】
【０００７】
【図１】１実施の形態に係る、パイプラインの終了近くで動作するロック競合予測器を示す、プロセッサ及びその実行パイプラインの概念的な図である。
【図２】１実施の形態に係る、パイプラインの開始近くで動作するロック競合予測器を示す、プロセッサ及びその実行パイプラインの概念的な図である。
【図３】１実施の形態に係る、パイプラインの終了近くで動作するロック競合予測器を示す、プロセッサ及びその実行パイプラインの概念的な図である。
【図４】本発明の実施の形態に係る、ロック命令の実行の状態図である。
【図５Ａ】本発明の１実施の形態に係る、ロック命令の投機的な実行のロック競合予測器をサポートするプロセッサを含むシステムの概念図である。
【図５Ｂ】本発明の１実施の形態に係る、ロック命令の投機的な実行のロック競合予測器をサポートするプロセッサを含むシステムの概念図である。
【発明を実施するための形態】
【０００８】
図１を参照して、１実施の形態に係る、パイプラインの終了近くで動作するロック競合予測器を示す、プロセッサ１００及びその実行パイプラインの概念図が示されている。図１の実施の形態では、フロントエンドステージ１０２、デコードステージ１０４、トレースキャッシュ１０６、リオーダバッファ（ＲＯＢ）１０８、実行ステージ１１２及びリタイアメントステージ１１４が示されている。他の実施の形態では、他のステージは、パイプラインで使用され、ステージのオーダリングが変化する場合がある。
【０００９】
マクロ命令は、フロントエンドステージ１０２によりレベル１（Ｌ１）のキャッシュ１２４から引き出され、デコーダステージ１０４によりマイクロ動作の対応するセットにデコードされる。これらのマイクロ動作のセットは、トレースキャッシュ１０６におけるトレースの形式で記憶される。他の実施の形態では、トレースは、別の形式のバッファに記憶される。更なる実施の形態では、マイクロ動作のセットは、トレースの形式ではなく、他の形式のバッファに記憶される。マイクロ動作のセットが実行の準備がされたとき、ＲＯＢ１０８にロードされる。ＲＯＢ１０８は、一連のストレージロケーション１５０〜１６６を含み、それぞれは、マイクロ動作、そのソース及び目的地レジスタのアイデンティフィケーション、及び利用可能なときには実行結果を含む。他の実施の形態では、異なるストレージロケーションの番号が提供され、ストレージロケーションのコンテンツの正確なフォーマットが異なる場合がある。
【００１０】
スケジューラ１１０は、ストレージロケーション１５０〜１６６におけるどのマイクロ動作が、利用可能な、すなわち実行を可能にするそれらのソースオペランドの値を有するか、を判定するために使用される。１実施の形態では、スケジューラ１１０は、トレージロケーション１５０〜１６６におけるそれぞれのマイクロ動作のソースレジスタの状態を調べる。次いで、スケジューラ１１０は、それらのマイクロ動作を発生し、そのソースレジスタは、書かれたソフトウェアでのそれらの順序（すなわち、潜在的に「アウト・オブ・オーダ」）に関わらず、（実行ステージ１１２における）実行のための有効データを含む。かかるマイクロ動作の実行からの結果は、対応するストレージロケーションにおける実行結果として一時的に記憶される。
【００１１】
ストレージロケーション１５０〜１６６のそれぞれは、関連される「終了」ビット１３０〜１４６を有し、このビットは、対応するマイクロ動作が実行を完了し、実行からの結果が対応するストレージロケーション１５０〜１６６における実行結果として一時的に記憶されることを示す。１実施の形態では、終了ビット１３０〜１４６は、（プログラムオーダーで）前の命令に対応するマイクロ動作がひとたびリタイアされると、対応するマイクロ動作がリタイアの準備がされることを示す。（マクロ命令から生成されたマイクロ動作は、オリジナルのプログラムオーダーでなお使われない）  リタイアメントの準備がされたマイクロ動作は、リタイアメントステージ１１４に送出される場合がある。メモリの参照を発するマイクロ動作は、メモリオーダバッファ（ＭＯＢ）１２２に配置される。ＭＯＢ１２２は、幾つかのペンディングになっているメモリ参照の動作を記憶する。
【００１２】
図１のプロセッサは、ロック命令を実行可能である。１つのロック命令の形式は、プロセッサがロックされているメモリで動作を実行している間、他のプロセッサ、又はマルチスレッドプロセッサにおける他のスレッドが所与のメモリロケーション又はキャッシュにアクセスするのを妨げる。実際に、命令を実行している間、これは、他のアクセスを妨げるために特定のメモリ位置又はキャッシュラインを「ロックする」。別の観点は、このロッキングの形式により、命令が特定のメモリロケーション又はキャッシュラインをアトミックに変更する（文献では、アトミックな読取り、変更、書込み命令“atomic  read-modify-write  instruction”と呼ぶことがある）のを可能にすることである。対照的に、これらロッキング命令は、拡張された数の命令にわたり他のメモリロケーションを意味的にロックするためのソフトウェアセマフォとして使用される。これら拡張された数の命令は、クリティカルセクションとして文献において参照される。
【００１３】
１実施の形態では、ロック命令は、通常の命令に添付されるロックプレフィックスとして実現される。Ｐｅｎｔｉｕｍ（登録商標）コンパチブルアーキテクチャでは、ロックプレフィックスは、目的地オペランドがメモリオペランドである、以下の種類を含む命令に付加される。ＡＤＤ（add）、ＡＤＣ（add  with  carry）、ＡＮＤ（logical  and）、ＢＴＣ（bit  test  and  complement）、ＢＴＲ（bit  test  and  reset）、ＢＴＳ（bit  test  and  set）、ＣＭＰＸＣＨＧ（compare  and  exchange）、ＣＭＰＸＣＨ８Ｂ（compare  and  exchange  8  bytes）、ＤＥＣ（decrement）、ＩＮＣ（increment）、ＮＥＧ（two’s  complement  negation）、ＮＯＴ（one’s  complement  negation）、ＯＲ（logical  or）、ＳＢＢ（integer  subtraction  with  borrow）、ＳＵＢ（subtract）、ＸＯＲ（exclusive  or）、ＸＡＤＤ（exchange  and  add）、及びＸＣＨＧ（exchange  memory  with  register）。
【００１４】
他のプロセッサ又はスレッドが、これらの命令により規定される読取り・変更・書込み機能の部分間の目的地のメモリロケーションの値を変えないことが絶対に必要なとき、ロックプレフィックスは、（１つのシングルパートに見える）その部分をアトミックにするために使用される。
【００１５】
１実施の形態では、ロック命令は、“load_with_store_intent_lock”マイクロ動作及び“store_unlock”マイクロ動作を含む、幾つかのマイクロ動作にデコードされる。他のマイクロ動作は、先のパラグラフで記載された様々な命令について存在する。議論の容易さのため、“load_with_store_intent_lock”マイクロ動作を“load_with_lock”マイクロ動作として示し、それをload_lockで書くことにする。load_lockマイクロ動作は、実行ユニット１１２に入るとき、ロック状態を始める。store_unlockマイクロ動作は、ＭＯＢ１２２から発せられるときロック状態を除く。
【００１６】
先の実施の形態は、２つの条件が満たされるまでload_lockマイクロ動作を発しない。第一の条件は、オリジナルプログラムオーダーにおける全ての前の命令が実行され、リタイアされている必要があることである。言い換えれば、load_lockマイクロ命令は、ＲＯＢ１０８において最も古いマイクロ命令である。第二の条件は、ＭＯＢ１２２における前にペンディングにされているstoreマイクロ動作が終了されている必要があり、ＭＯＢ１２２と関連付けされたストアバッファがドレインしている必要がある（言い換えれば、全てのストア動作は、それらのデータをメモリシステムに書き込んでいる必要がある）ことである。これら２つの条件は、アウト・オブ・オーダ実行と互換性がない。
【００１７】
ロック命令は厳密に必須ではないことが多いことが知られている。かなりのパーセンテージのケースでは、メモリロケーション又はキャッシュラインは、ロックの期間で競合されない状態のままであり、すなわち他のプロセッサ又はスレッドは、ロックの下で特定のメモリロケーション又はキャッシュラインにアクセスするのを試みることはなく、他のプロセッサのイベントは、そのメモリロケーションの保全性に脅威を与えない。プロセッサ１００は、ロック競合予測器１１８及びモニタロジック１１６を更に含む。ロック競合予測器１１８は、特定のロック命令がロック期間の間に競合されるか否かに関する予測を発する。予測が、特定のロック命令が実際に競合されることを示す場合、ロック命令のための前の実行方法に従う。
【００１８】
しかし、予測が、特定のロック命令が実際に競合しないことを示す場合、投機的に発せられた通常のloadマイクロ動作に進み、いずれか競合することの示唆が生じるかを判定するためにモニタロジック１１６で関与されるメモリロケーションをモニタすることが可能である。したがって、アトミック性（atomicity）を強制するために命令の読取り・変更・書込み部分を実行しつつ、メモリロケーションを実際にロックしないが、代わりに、別のプロセッサ又はスレッドがアトミック性の知覚を破壊したことを示す状態を監視しつつ、その部分を個別に実行する。かかる競合することの示唆は、ロード命令のターゲットアドレスを含むキャッシュラインへのスヌープ（snoop）、割り込み、又はその後のstore_unlockマイクロ動作がキャッシュで抜けた場合を含む。
【００１９】
モニタロジック１１６は、幾つかの実施の形態では、プロセッサに存在する幾つかの既存のロジック信号を監視する。競合しない示唆が等価なロック条件を表す時間の間に生じない場合、投機的に発せられた通常のloadマイクロ動作は、正常にリタイアとなる。これは、ロック命令のアウト・オブ・オーダ実行を可能にし、プロセッサパフォーマンスをエンハンスする。しかし、競合することの示唆が生じた場合、パイプラインがフラッシュされ、ロック命令が再び実行される必要がある。この際実行の間、ロック命令は、フォワードプログレスにおいて支援するために従来の実現におけるように非投機的に実行される。
【００２０】
別の実施の形態では、プロセッサは、数回にわたり投機的にロック命令を実行するのを試み、非投機的に命令を実行する前にそれぞれで競合を検出する。（従来の実現におけるように）プロセッサが非投機的に命令を実行するとき、信号をアサートするか、又は他のスレッド（又はプロセッサ）が問題のあるメモリロケーションにアクセスするのを妨げる手順を採用する。これは、プロセッサが実行を終了し、その後の再始動なしにロック命令をリタイアとすることを保証する。固定された数の投機的な実行の試みの後、プロセッサが非投機的な実行に戻らない場合、プロセッサがそれぞれの実行で競合することの示唆に遭遇し、ロック命令を繰り返し強制的に再始動され、フォワードプログレスを禁止するケースである。
【００２１】
ロック競合予測器１１８は、ローカル予測器及び代替的にグローバル予測器の回路及び理論を含めて、様々な公知のブランチ予測器のうちの１つの動作の回路及び理論を利用する。１実施の形態では、ロック競合予測器１１８は、競合することが過去において発見されているそれらロック命令のリニアな命令ポインタを記憶するためのテーブルである。１実施の形態では、テーブルは、プロセッサの初期化に応じて空にされ、全てのロック命令は、競合しないことが想定される。所与のロック命令の予測が誤っていることが発見されたとき、そのロック命令のリニアな命令ポインタは、将来の使用のためにテーブルに書き込まれる。
【００２２】
ロック競合予測器１１８が所与のロック命令が競合しないことを予測したとき、スケジューラ１１０は、ＲＯＢ１０８から対応するload_lockマイクロ動作を投機的に発生する。１実施の形態では、対応するload_lockマイクロ動作は、投機的なload_without_lockマイクロ動作としてＲＯＢ１０８から発せられる。いずれかの種類のloadマイクロ動作は、幾つかの実施の形態では、（modified/exclusive/shared/invalid  “MEST”  キャッシュコヒーレンシープロトコルを使用したキャッシュにおいて）排他的“Ｅ”状態に遷移するキャッシュラインを始動する、対応するキャッシュラインのオーナシップの要求を発生する。loadマイクロ動作が最も低いキャッシュを失った場合、フィルバッファが割り当てられ、ロードはＭＯＢ１２２におけるペンディング動作として「スリープ」する。
【００２３】
load_lockマイクロ動作がキャッシュでヒットした場合、又は眠っているload_lockマイクロ動作が対応するキャッシュラインフィルによりＭＯＢ１２２で目覚めたとき、以下が行われる。幾つかの実施の形態では、ロック変数を含むキャッシュラインがload_lockの実行とstore_unlockのリタイアメントとの間で置き換えられるのを防止することが必要である。１実施の形態では、置き換えを防止するため、更にメモリのオーダリングプロトコルにより必要とされるときにスヌープするのを可能にするため、キャッシュラインのタグにビットを設定することができる。しかし、これら投機的なload_lockのセットについて古いロードの前に実行することができ、したがって、キャッシュセットにおける方法の全てが消費される。これは、次のレベルのキャッシュからそのデータを満たすため、古いロードのセットにおける方法を残さず、古いロードのリタイアメントは、終了することができないので防止される。投機的なload_lockは、最も古くないのでリタイアすることができず、したがってヘッドロックを有することになる。このシナリオを防止するため、load_lockは、古い命令について少なくとも幾つかを利用可能なままにするため、セットにおいて十分なロックされていない方法が存在する場合にのみ投機的に発する。十分にロックされていない方法が存在しない場合、（従来の実現におけるように）全ての前の命令がリタイアとなったときにのみ、load_lockが発生される。１実施の形態では、発すべき投機的なload_lockについて少なくとも２つの利用可能な方法が存在する必要がある。
【００２４】
load_lockマイクロ動作又はload_without_lockマイクロ動作がＲＯＢ１０８から発せられたかは、対応するstore_unlockマイクロ動作及び何れか介入するマイクロ動作が、ロードマイクロ動作の前後のいずれかでＲＯＢ１０８から発する。しかし、store_unlockマイクロ動作がロードマイクロ動作までにＭＯＢ１２２でペンディングされた状態に留まり、何れか介入するマイクロ動作は、リタイアメントのポイントにあり、そのポイントで、ＭＯＢ１２２がstore_unlockマイクロ動作を発する。
【００２５】
ロードマイクロ動作及び対応するstore_unlockマイクロ動作は、競合する示唆が発生したことをモニタロジック１１６が判定した場合にリタイアすることが許可されない。これは、ロック命令が競合しないという予測が誤っていることを意味する。この競合された示唆が考慮される時間は、異なる実施の形態で変わる場合がある。１実施の形態では、この時間は、（store_unlockに対応する）メモリストアがグローバルに観察可能となるときに終了する。ここで、「グローバルに観察可能」とは、キャッシュコヒーレンシードメインにおける全てのエージェントがこのメモリロケーションの最後の値を見ることを意味する。別の実施の形態では、この時間は、store_unlockがＭＯＢ１２２で最も古いストアとなったときに終了する。この第二の実施の形態では、実際のロック条件は、store_unlockがＭＯＢ１２２における最も古いストアとなった時間とstore_unlockがグローバルに観察可能になった時間との間の短い期間について必要とされる。
【００２６】
前の実現では、store_unlockマイクロ動作は、メモリストアがグローバルに観察可能となったとき、ＲＯＢ１０８における最も古いリタイアされていないマイクロ動作である。しかし、１実施の形態では、store_unlockマイクロ動作は、メモリストアがグローバルに観察可能となったとき、ＲＯＢ１０８における最も古いリタイアとなっていないマイクロ動作ではない。これは、メモリストアがグローバルに観察可能となるまで、（ロックを持つか、ロックを持たない）loadマイクロ動作がリタイアとなっていないためである。したがって、ロードは、コンピュータにおいて最も古いリタイアとなっていないマイクロ動作である。
【００２７】
別の実施の形態では、ロック競合予測器１１８が省略される。代わりに、ロック命令が競合しない全てのケースで想定される。対応するロードマイクロ動作は、それぞれのケースにおいて、はじめに投機的に実行される。ロック命令が実際に競合しないことが分かっているケースでは、モニタロジック１１６は、競合することの示唆を検出し、実行パイプラインを再始動する。競合することの示唆を生じたロック命令のみが非投機的な方式で再実行される。
【００２８】
別の実施の形態では、モニタロジック１１６が省略される場合がある。この実施の形態では、キャッシュシステムは、ロック命令に対する関心のあるアドレスに向けられるスヌープを拒否するためのロジックを含む。これは、正式なロックが発せられることなしに関心のあるアドレスでのコンテンツの保全性を保持する。スヌープを発生した他のエージェントは、そのスヌープの拒否を短時間の後に再びスヌープをトライする示唆として受ける。
【００２９】
ここで図２を参照して、１実施の形態に係る、パイプラインの開始近くで動作するロック競合予測器を示す、プロセッサ及びその実行パイプラインの概念図が示される。図２で示される回路の多くは、図１の回路に類似するが、ロック競合予測器２１８は、代わりに、デコードステージ２０４の動作を変更するために使用される。ロック命令をload_lockマイクロ動作及びstore_lockマイクロ動作に常にデコードするよりはむしろ、ロック命令が競合しないことをロック競合予測器２１８が判定したとき、デコードステージ２０４は、規則的なロードのマイクロ動作及びstore_unlockマイクロ動作を含むマイクロ動作にロック命令をデコードする。規則的なロードのマイクロ動作は、幾つかの実施の形態では、ヒント又は他のステータスビットが添付されて、load_lockマイクロ動作として現れる。これらのマイクロ動作は、トレースキャッシュ２０６でトレースを構築するために使用される。他の実施の形態では、マイクロ動作は、別の形式のバッファに一時的に記憶される。
【００３０】
モニタロジック２１６は、図１のモニタロジック１１６により実行される機能と同様の機能を実行する。さらに、loadマイクロ動作及び対応するstore_unlockマイクロ動作は、競合することの示唆が生じたことをモニタロジック２１６が判定した場合にリタイアとなることが許可されない。これは、ロック命令が競合しないという予測が誤りであったことを意味する。この競合することの示唆が考慮される期間は、異なる実施の形態で変わる場合がある。１実施の形態では、（store_unlockに対応する）メモリストアがグローバルに観察可能であるときに期間が終了する。別の実施の形態では、この期間は、store_unlockがＭＯＢ２２２において最も古い記憶となったときに終了する場合がある。
【００３１】
競合することの示唆が判定された場合、回復プロセスは、先の図１とともに説明されたプロセスと異なる。再始動に応じたロック命令は、トレースキャッシュ２０６から再び発生することが不可能である。これは、トレースキャッシュ２０６がload_without_lockマイクロ動作によるトレースを含むためである。ロック命令は、デコードステージで再びデコードされる必要があり、このとき、load_lockマイクロ動作及び対応するstore_unlockマイクロ動作を含むマイクロ動作にデコードする。これらのマイクロ動作は、新たなトレースがトレースキャッシュ２０６で構築されるのを必要とする。
【００３２】
図３を参照して、１実施の形態に係る、パイプラインの終わり近くで動作するロック競合予測器を示すプロセッサ及びその実行パイプラインの概念図が示されている。図３の実施の形態は、Ｐｅｎｔｉｕｍ（登録商標）４コンパチブルプロセッサでのリプレイ動作をサポートするため、リプレイキュー３２２で示される変更されたＭＯＢを含む。リプレイ動作は、データの投機（data  speculation）が正しくなるまで、投機的に発せられたマイクロ動作を再実行することで誤ったデータの投機を修復する。１実施の形態では、load_lock及びstore_unlockマイクロ動作は、パイプラインをフラッシュするか、又はロック命令を再始動することなしに、モニタロジック３１６が競合を示唆する場合にリプレイされる。
【００３３】
別の実施の形態では、チェックポイントの修復は、チェックポイント回復ロジック３７０を使用して実行される。１実施の形態では、チェックポイント回復ロジック３７０は、load_lockマイクロ動作の前に全てのマイクロ動作がリタイアされるとき、プロセッサ状態のスナップショットを記憶する。チェックポイントが取られた後、投機的に実行されたロック命令の全ての構成のマイクロ動作、及びある実施の形態では、プログラムにおける後続する命令は、それらが終了したときに順序においてリタイアとなる。プロセッサパイプラインがフラッシュされる必要があることを示唆して、（store_unlockに対応する）メモリストアがグローバルに観察可能である前に、モニタロジック３１６が競合を示唆する場合、load_lockの直前にマイクロ命令のリタイアメントでのプロセッサ状態は、（チェックポイント回復ロジック３７０から）回復される。load_lock、store_unlock、及びロック命令のいずれか他の構成要素のマイクロ動作は、再実行される。この再実行の間、構成要素のマイクロ動作は、従来の実現として扱われ、非投機的に実行される。チェックポイント回復ロジック３７０は、他の実施の形態では、先の図１及び図２で示されるプロセッサのような他のプロセッサで使用される。
【００３４】
１実施の形態では、ロック命令が競合しないことをロック競合予測器３１８が判定したとき、load_lockマイクロ動作又はload_without_lockマイクロ動作は、ＲＯＢ３０８から投機的に発せられる。load_lockマイクロ動作又はload_without_lockマイクロ動作がＲＯＢ３０８から発せられるかで、対応するstore_unlockマイクロ動作、及び介入するマイクロ動作は、loadマイクロ動作の前又は後のいずれかでＲＯＢ３０８から発せられる。誤ったデータの投機が間違ったアドレスを生成したケースでは、１以上のデータチェッカーロジック３６８は、無効なアドレス信号３７２をリプレイキュー３２２に発する。無効なアドレス信号３７２は、投機的なloadマイクロ動作及び対応するstore_unlockマイクロ動作の処理を判定するため、モニタロジック３１６とともに使用される。
【００３５】
無効なアドレス信号３７２がＦＡＬＳＥであり、モニタロジック３１６が競合することの示唆を検出しないとき、storeマイクロ動作及びstore_unlockマイクロ動作は、正常にリタイアとなる。無効なアドレス信号３７２がＦＡＬＳＥであり、モニタロジック３１６が競合することの示唆を検出するとき、パイプラインはフラッシュされ、ロック命令が再始動される。別の実施の形態では、モニタロジック３１６が競合の示唆を検出した場合、loadマイクロ動作がリプレイされる。しかし、無効なアドレス信号３７２がＴＲＵＥであるとき、何れか競合することの示唆が誤ったアドレスに関するので、モニタロジック３１６の状態は無関係である。したがって、無効なアドレス信号３７２がＴＲＵＥであるとき、リプレイが生じ、モニタロジック３１６からの何れか競合することの示唆は、ロック競合予測器３１８を更新しない。
【００３６】
図４を参照して、この開示の１実施の形態によれば、ロック命令の実行の状態図が示される。ブロック４１０では、ロック命令が競合するか否かに関する予測が行われる。ロック命令が競合するという予測である場合、プロセスは、競合するパス４１４に沿って存在し、ブロック４６０に入る。ブロック４６０では、load_lockマイクロ動作は、リタイアとなる準備がされたとき、及び全てのペンディングにされているストアバッファがデータを排出した後にのみ、メモリシステムに発せられる。
【００３７】
ブロック４１０でなされた予測が、ロック命令が競合しない場合、プロセスは、競合しないパス４１２に沿って存在し、load_lockマイクロ動作（又はある実施の形態では、ロック動作が競合しない幾つかのヒントが添付されたload_lockマイクロ動作、又はある実施の形態では、load_with_uncontended_lockマイクロ動作又はload_without_lockマイクロ動作のような幾つかの新たなマイクロ動作に変形されるload_lockマイクロ動作）は、実行のために投機的に発せられる。次いで、ブロック４３０では、load_lockマイクロ動作がリタイアメントであるとき、store_unlockマイクロ動作がメモリに発せられる。store_unlockマイクロ動作は、リタイアメントとなる準備をする。１実施の形態では、store_unlockマイクロ動作は、メモリストアがグローバルに観察可能であるとき、リタイアとなるために準備される。また、これは、load_lockマイクロ動作がリタイアするのを可能にする。別の実施の形態では、store_unlockマイクロ動作は、メモリストアがメモリオーダリングバッファで最も古いペンディングにされているstoreマイクロ動作となるときに、リタイアとなる準備がされる。つぎに、これにより、load_lockマイクロ動作がリタイアとなるのが可能となる。
【００３８】
競合することの示唆なしで（１実施の形態では、グローバルに観察可能となったときである）store_unlockマクロ動作がリタイアとなる準備がされた場合、プロセスはパス４３２に沿って存在し、ブロック４４０で、load_lockマイクロ動作がリタイアとなり、予測ロジックはＴＲＵＥ（真の）予測結果でアップデートされる。しかし、store_unlockマイクロ動作がリタイアとなる準備がされる前に、競合することの示唆が生じた場合、プロセスはパス４３４に沿って存在し、ブロック４５０で、ロック命令が再始動され、予測ロジックは、ＦＡＬＳＥ（偽の）予測結果でアップデートされる。この再実行の間、ロック命令は、フォワードプログレスで支援するために従来の実現におけるように、非投機的に実行される。
【００３９】
別の実施の形態では、ブロック４１０，４６０及び４７０が省略される場合がある。かわりに、ロック命令が競合しないことが全てのケースで想定される。対応するロードマイクロ動作は、それぞれのケースで、はじめに投機的に実行される（ブロック４２０）。ロック命令が実際の競合することが分かっているケースでは、モニタロジック１６０は、競合することの示唆を検出し、実行パイプラインをフラッシュし、ロック命令を再始動する（ブロック４５０）。競合することの示唆を生じているロック命令のみが非投機的な方式で再実行される。
【００４０】
ここで図５Ａ及び図５Ｂを参照して、この開示の２つの実施の形態に係る、ロック競合予測器及びモニタロジックをサポートするプロセッサを含むシステムの概念図が示される。図５Ａのシステムは、プロセッサ、メモリ、及び入力／出力装置がシステムバスにより相互接続されるシステムを一般的に示し、図５Ｂのシステムは、プロセッサ、メモリ、及び入力／出力装置が多数のポイント・ツー・ポイントインタフェースにより相互接続されるシステムを一般的に示している。
【００４１】
図５Ａのシステムは、幾つかのプロセッサを含み、このうち２つのプロセッサ４０，６０のみが明確さのために示される。プロセッサ４０，６０は、レベル１のキャッシュ４２，６２を含む。図５Ａのシステムは、システムバス６とバスインタフェース４４，６４，１２を介して接続される幾つかの機能を有する。１実施の形態では、システムバス６は、Ｉｎｔｅｌ（登録商標）社により製造されるＰｅｎｔｉｕｍ（登録商標）クラスのマイクロプロセッサで利用されるフロントサイドバス（ＦＳＢ）である。他の実施の形態では、他のバスが使用される場合もある。ある実施の形態では、メモリコントローラ３４及びバスブリッジ３２は、チップセットと集合的に呼ばれる。ある実施の形態では、チップセットの機能は、図５Ａの実施の形態で示されるのとは異なる物理的なチップのなかで分割される。
【００４２】
メモリコントローラ３４は、プロセッサ４０，６０がシステムメモリ１０との間で、及びＢＩＯＳ（basic  input/output  system）消去可能なプログラマブルリードオンリメモリ（ＥＰＲＯＭ）との間で読み取り、書き込みするのを可能にする。ある実施の形態では、ＢＩＯＳ  ＥＰＲＯＭ３６は、フラッシュメモリを利用する。メモリコントローラ３４は、メモリ読み取り及び書き込みデータがシステムバス６のバスエージェントに送出され、バスエージェントから送出されるのを可能にするバスインタフェース８を含む。また、メモリコントローラ３４は、高性能グラフィックインタフェース３９を通して高性能グラフィック回路３８と接続する。所定の実施の形態では、高性能グラフィックインタフェース３９は、最新のグラフィックスポートＡＧＰインタフェースである。メモリコントローラ３４は、高性能グラフィックスインタフェース３９にわたりシステムメモリ１０から高性能グラフィックス回路３８にデータを送出する。
【００４３】
図５Ｂのシステムは、幾つかのプロセッサを含み、このうち２つのプロセッサ７０，８０のみが明確さのために示されている。プロセッサ７０，８０は、メモリ２，４との接続するため、ローカルメモリコントローラハブ（ＭＣＨ）７２，８２をそれぞれ含んでいる。プロセッサ７０，８０は、ポイント・ツー・ポイントインタフェース回路７８，８８を使用して、ポイント・ツー・ポイントインタフェース５０を介してデータをやり取りする。プロセッサ７０，８０は、ポイント・ツー・ポイントインタフェース回路７６，９４，８６，９８を使用して、個々のポイント・ツー・ポイントインタフェース５２，５４を介してチップセット９０とデータをやり取りする。チップセット９０は、高性能グラフィックスインタフェース９２を介して高性能グラフィックス回路３８とデータをやり取りする。
【００４４】
図５Ａのシステムでは、バスブリッジ３２は、システムバス６とバス１６との間でのデータのやり取りを可能にし、このブリッジは、ある実施の形態では、ＩＳＡ（industry  standard  architecture）バス又はＰＣＩ（peripheral  component  interconnect）バスである。図５Ｂのシステムでは、チップセット９０は、バスインタフェース９６を介してバス１６とのデータをやり取りする。いずれのシステムであっても、ある実施の形態では低性能グラフィックスコントローラ、ビデオコントローラ、及びネットワークコントローラを含む、バス１６に様々な入力／出力Ｉ／Ｏ装置１４が存在する。別のバスブリッジ１８は、ある実施の形態では、バス１６とバス２０との間でのデータのやり取りを可能にするために使用される。バス２０は、ある実施の形態では、ＳＣＳＩ（small  computer  system  interface）バス、ＩＤＥ（integrated  drive  electronics）バス、又はＵＳＢ（universal  serial  bus）バスである。更なるＩ／Ｏ装置は、バス２０と接続される。これらは、マウス、オーディオＩ／Ｏ２４、通信装置２６を含み、モデム及びネットワークインタフェース及びデータストレージ装置２８を含む、キーボード及びカーソル制御装置２２を含む。ソフトウェアコード３０は、データストレージ装置２８に記憶される。ある実施の形態では、データストレージ装置２８は、固定された磁気ディスク、フロプティカルディスクドライブ、光ディスクドライブ、光磁気ディスクドライブ、磁気テープ、フラッシュメモリを含む不揮発性メモリである。
【００４５】
上述された明細書では、本発明は、その特定の実施の形態を参照して記載された。しかし、様々な変更及び変形が特許請求の範囲で述べたように本発明の広義の精神及び範囲から逸脱することなしになされることが明らかである。したがって、明細書及び図面は、限定的な意味よりはむしろ例示的な意味であると考えられる。
【図１】
2011175669.tif 000003
【図２】
2011175669.tif 000004
【図３】
2011175669.tif 000005
【図４】
2011175669.tif 000006
【図５Ａ】
2011175669.tif 000007
【図５Ｂ】
2011175669.tif 000008