(57)【要約】      （修正有）【課題】１つの弱いメモリ順序モデルを有するプロセサにおける複数の順序付きメモリ操作の性能改善。【解決手段】１つの第１メモリ操作に対応する操作順序キュー内の第１エントリに対応する１つの第１順序ベクトルを発生する工程と、第１メモリ操作が完了するまで、１つの後のメモリ操作を完了させないようにする工程とを含む。この方法では、操作順序キューを、例えば１つのロードキューまたは１つのストアキューとすることができる。同様に、１つの第１操作順序キューの１つのエントリに対する順序ベクトルを、１つの第２操作順序キュー内の複数のエントリに基づいて発生できる。更に、このような１つのエントリは、第２操作順序キュー内の１つのエントリを識別する１つの領域を含むことができる。１つの結合バッファを第１操作順序キューに結合でき、複数のあらゆる先の書き込みが視認可能になった時に結合バッファは１つの信号を発生できる。【選択図】図１
2006048696.tif 000002
【特許請求の範囲】
【請求項１】
１つの操作順序キュー内の１つのエントリであって、１つのシステムの１つの操作に対応する前記エントリに関連付けられた１つの順序ベクトルを発生する工程と、
前記順序ベクトルに基づいて前記操作の処理を阻止する工程と
を具える１つの方法。
【請求項２】
請求項１の方法において、前記順序ベクトルが、前記操作順序キュー内の１つの関連のエントリに各々対応する複数のビットを有する当該方法。
【請求項３】
請求項２の方法であって、未完成の複数の先の操作を表す前記順序ベクトル内の複数のビットに基づいて処理を阻止する工程を更に具える当該方法。
【請求項４】
請求項２の方法であって、１つの対応の先の操作が完了する時に前記順序ベクトルの１つの所定のビットを消去する工程を更に具える当該方法。
【請求項５】
請求項１の方法において、前記順序ベクトルが、前記操作順序キュー内の各エントリと関連付けられた１つの順序ビットを有する当該方法。
【請求項６】
請求項５の方法であって、解除の意味に関する複数のメモリ操作に対応する前記操作順序キュー内の複数のエントリに対して前記順序ビットを設定する工程を更に具える当該方法。
【請求項７】
請求項５の方法において、前記順序ベクトルを発生する工程が、先の未完成の複数の先のメモリ操作に対応する前記複数の順序ビットを前記順序ベクトル内へコピーする工程を有する当該方法。
【請求項８】
請求項１の方法であって、１つのデータキャッシュでミスするように１つの後のメモリ操作に強要する工程を更に具える当該方法。
【請求項９】
請求項１の方法であって、前記操作に対応する１つの第１順序ビットを設定する工程を更に具える当該方法。
【請求項１０】
請求項９の方法であって、前記操作が完了する時に前記第１順序ビットを消去する工程を更に具える当該方法。
【請求項１１】
請求項９の方法であって、１つの後の操作に対応し、前記第１順序ビットを含む１つの別の順序ベクトルを発生する工程を更に具える当該方法。
【請求項１２】
１つの第１操作順序キュー内の１つのエントリであって、１つのメモリ操作に対応する前記エントリと関連付けられた１つの順序ベクトルであって、１つの第２操作順序キュー内の１つのエントリに各々対応する複数のビットを有する前記順序ベクトルを発生する工程と、
前記順序ベクトルに基づいて前記メモリ操作の処理を阻止する工程と
を具える１つの方法。
【請求項１３】
請求項１２の方法であって、前記第２操作順序キュー内の未完成の複数の先のメモリ操作を表す前記順序ベクトル内の複数のビットに基づいて前記処理を阻止する工程を更に具える当該方法。
【請求項１４】
請求項１３の方法であって、１つの対応の先のメモリ操作が完了する時に前記順序ベクトルの１つの所定のビットを消去する工程を更に具える当該方法。
【請求項１５】
請求項１２の方法において、前記第１操作順序キューが１つのストアキューを有し、前記第２操作順序キューが１つのロードキューを有する当該方法。
【請求項１６】
請求項１５の方法において、前記順序ベクトルが、前記ロードキュー内の各エントリに関連付けられた１つの順序ビットを有する当該方法。
【請求項１７】
請求項１６の方法であって、解除の意味に関する複数の操作に対応する前記ロードキュー内の複数のエントリに対して前記順序ビットを設定する工程を更に具える当該方法。
【請求項１８】
複数の命令を含む１つのマシンアクセス可能記憶媒体を有する１つの物品であって、前記複数の命令が実行されたなら、少なくとも１つの先のメモリ操作が完了していないということを、１つのメモリ操作に対応する１つの順序ベクトルが示す場合に、前記メモリ操作が１つの最初の時点で生じるのを阻止するように前記複数の命令が１つのシステムを有効にする当該物品。
【請求項１９】
請求項１８の物品であって、複数の命令を更に有する前記物品において、前記複数の命令が実行されたなら、前記少なくとも１つの先のメモリ操作の完了時に前記順序ベクトルを更新するように前記複数の命令が前記システムを有効にするようになっている当該物品。
【請求項２０】
請求項１８の物品であって、複数の命令を更に有する前記物品において、前記複数の命令が実行されたなら、１つのキャッシュでミスするように複数の後のメモリ操作に強要するように前記複数の命令が前記システムを有効にするようになっている当該物品。
【請求項２１】
請求項１８の物品であって、複数の命令を更に有する前記物品において、前記複数の命令が実行されたなら、前記メモリ操作に対して１つの順序ビットを設定するように前記複数の命令が前記システムを有効にするようになっている当該物品。
【請求項２２】
１つのメモリ操作に各々対応する複数のエントリをストアする１つの第１バッファであって、前記複数のエントリの各々が、前記対応するメモリ操作の相対的な順序付けを示すように各エントリと関連付けられた１つの順序ベクトルを有する前記第１バッファを具える１つの装置。
【請求項２３】
請求項２２の装置であって、１つのメモリ操作に各々対応する複数のエントリをストアする１つの第２バッファを更に含む前記装置において、前記複数のエントリの各々が、前記対応するメモリ操作の相対的な順序付けを示すように各エントリと関連付けられた１つの順序ベクトルを有する当該装置。
【請求項２４】
請求項２２の装置であって、複数の先のメモリ操作が視認可能であれば、１つの信号を発生するように前記第１バッファに結合された１つの結合バッファを更に含む当該装置。
【請求項２５】
請求項２２の装置において、複数の後のメモリ操作が、前記対応するメモリ操作に対して順序付けられるべきかを示すために前記複数のエントリの各々が１つの順序ビットを有する当該装置。
【請求項２６】
１つのメモリ操作に各々対応する複数のエントリをストアする１つの第１バッファであって、前記複数のエントリの各々が、前記対応するメモリ操作の相対的な順序付けを示すように各エントリと関連付けられた１つの順序ベクトルを持つ前記第１バッファを有する１つのプロセッサと、
前記プロセッサに結合された１つのダイナミックランダムアクセスメモリと
を具える１つのシステム。
【請求項２７】
請求項２６のシステムであって、１つのメモリ操作に各々対応する複数のエントリをストアする１つの第２バッファを更に具える前記システムにおいて、前記複数のエントリの各々が、前記対応するメモリ操作の相対的な順序付けを示すように各エントリと関連付けられた１つの順序ベクトルを有する当該システム。
【請求項２８】
請求項２６のシステムであって、複数の先のメモリ操作が視認可能であれば、１つの信号を発生するように前記第１バッファに結合された１つの結合バッファを更に含む当該システム。
【請求項２９】
請求項２６のシステムにおいて、前記プロセッサが、１つの順序付けられていないやり方で複数のロード命令を処理する１つの命令セットアーキテクチャを有する当該システム。
【請求項３０】
請求項２６のシステムにおいて、前記プロセッサが、１つの順序付けられていないやり方で複数のストア命令を処理する１つの命令セットアーキテクチャを有する当該システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ順序付けに関し、特に、１つのメモリ順序モデルに従う複数のメモリ操作の処理に関する。 
【背景技術】
【０００２】
メモリ命令処理は、１つの対象の命令セットアーキテクチャ（ＩＳＡ）メモリ順序モデルに従って動作しなければならない。参考を目的として、インテル社の２つの主なＩＳＡ、すなわち、Ｉｎｔｅｌ（インテル）（登録商標）アーキテクチャ（ＩＡ‐３２またはｘ８６）並びにインテルＩＴＡＮＩＵＭ（アイテニアム）（登録商標）プロセッサファミリ（ＩＰＦ）は、極めて異なる複数のメモリ順序モデルを有する。ＩＡ‐３２では、複数のロード及びストア操作がプログラム順に視認可能とならなければならない。ＩＰＦアーキテクチャでは、一般にこれらロード及びストア操作がそうなる必要はないが、複数の特別な命令が存在し、これら命令により、あるプログラマが、必要な場合（例えば、（ここで「ロード獲得」と称する）ロード獲得、（ここで「ストア解除」と称する）ストア解除、メモリフェンス及び複数のセマフォ）に順序付けを実施できる。 
【発明の開示】
【発明が解決しようとする課題】
【０００３】
複数のメモリ操作を順序正しく保つ１つの簡単ではあるが、低性能な戦略は、（１つのロードに対して、）１つの先のメモリ命令がそのデータを獲得するまで、または、（１つのストアに対して、）１つのキャッシュコヒーレンスプロトコルを介してオーナー権の確認を得るまで、１つのメモリ階層にアクセスすることを１つのメモリ命令に許可しないことである。 
【０００４】
しかし、複数のソフトウェアアプリケーションは、複数の順序付きメモリ操作に、すなわち、複数のメモリ操作であって、これらメモリ操作が、その他の複数のメモリ操作及びそれら自体の１つの順序付けを課す前記複数のメモリ操作にますます依存してきている。１つのチップマルチプロセッサ（ＣＭＰ）内で複数の並列スレッドを実行する間、複数の順序付きメモリ命令が、１つの単独アプリケーションの異なる複数のソフトウェアスレッドまたは複数のプロセス間で同期し、交信するように用いられる。複数のトランザクション処理及びマネージドランタイム環境は、効果的に機能するために複数の順序付きメモリ命令に依存する。更に、１つの強力なメモリ順序モデルＩＳＡ（例えば、ｘ８６）から１つの弱いメモリ順序ＩＳＡ（例えば、ＩＰＦ）へ変換する複数のバイナリトランスレータは、変換されるアプリケーションが、強力なメモリ順序モデルにより実施された順序付けに依存すると仮定する。従って、複数のバイナリが変換される場合、これらは、複数のロード及び複数のストアを、順序付けられた複数のロード及び複数のストアと置き換えてプログラム正当性を保証しなければならない。 
【０００５】
複数の順序付きメモリ操作の利用を増すにつれて、複数の順序付きメモリ操作の性能がより一層重要になってくる。現在の複数のｘ８６プロセッサでは、複数のあらゆるメモリ操作が複数の順序付き操作であるので、無秩序な順序で複数の順序付きメモリ操作を処理することは、性能に関して既に致命的である。１つの強力なメモリ順序モデルを実施する複数のアウトオブオーダプロセッサは、複数のロードを無秩序な順序で投機的に実行し、次に、マシンステートに対するロード命令をコミットする前にいかなる順序違反も生じなかったことを確実にするために検査する場合がある。このことを、実行されたが、まだコミットされていない１つのロードキュー内の複数のロードアドレスを追跡し、複数の書き込みを別の複数の中央処理ユニット（ＣＰＵ）または複数のキャッシュコヒーレントエージェントにより監視することによって行うことができる。別のＣＰＵが、ロードキュー内の１つのロードと同じアドレスに書き込む場合、このＣＰＵは、適合しているロードをトラップまたはリプレイし、（複数のあらゆる後のコミットされていないロードを根絶し、）その後、このロード及び複数のあらゆる後のロードを再実行して、１つの古いロードより前に、いかなる新しいロードも満足しないことを確実にできる。 
【０００６】
しかし、複数のロード命令がそれらのデータをレジスタファイルへ戻す前にインオーダＣＰＵは複数のロード命令をコミットできる。このような１つのＣＰＵでは、複数のロードが複数のあらゆる違反検査（例えば、データ変換バッファ（ＤＴＢ）ミス及び不整列アクセス）に合格すると直ちに、且つ、データが取り出される前に、複数のロードはコミットできる。複数のロード命令がリタイアした後、これらを再実行できない。それ故、複数のロードがリタイアした後、上述したように複数の別のＣＰＵからの複数の書き込みを監視することに基づいて複数のロードをトラップ及び再フェッチするか、または再実行することは１つの選択肢ではない。 
【０００７】
従って、特に、１つの弱いメモリ順序モデルを有する１つのプロセッサにおいて複数の順序付きメモリ操作の性能を改善する必要がある。 
【発明を実施するための最良の形態】
【０００８】
図１を参照する。図１には、本発明の一実施形態による１つのシステムの一部分を表す１つのブロック図を示す。特に、図１に示すように、システム１０を、１つのパーソナルコンピュータ（例えば、１つのデスクトップコンピュータ、ノートブックコンピュータ、サーバーコンピュータなど）のような１つの情報処理システムとすることができる。図１に示すように、システム１０は、１つのロードキュー２０、１つのストアキュー３０及び１つの結合（すなわち、１つのライトコンバイニング）バッファ４０のような様々な複数のプロセッサ資源を含むことができる。ある複数の実施形態では、これらキュー及びバッファが、１つの中央処理ユニット（ＣＰＵ）のようなシステムの１つのプロセッサ内に存在できる。例えば、ある複数の実施形態では、このような１つのＣＰＵは、１つのＩＡ−３２または１つのＩＰＦアーキテクチャに従って存在できるとはいえ、本発明の範囲がそのように限定されるものではない。別の複数の実施形態では、ロードキュー２０及びストアキュー３０を１つの単独のバッファ内に結合できる。 
【０００９】
このような複数のプロセッサ資源を含む１つのプロセッサは、これらプロセッサ資源を、システム内で実行できる様々な複数のメモリ操作に対する一時記憶装置として用いることができる。例えば、複数のロード操作のような複数の特定のメモリ操作の複数のエントリを一時的にストアするように、そして、所定のメモリ操作自体が完了できる前に完了しなければならない複数の先のロードまたは複数のその他のメモリ操作を追跡するようにロードキュー２０を用いることができる。同様に、複数のメモリ操作例えば複数のストア操作をストアするために、そして、１つの所定のメモリ操作自体がコミットできる前に完了しなければならない複数の先のメモリ操作（通常、複数のロード）を追跡するためにストアキュー３０を用いることができる。様々な複数の実施形態では、メモリ操作（例えば、１つのストアまたはセマフォ）が完了またはコミットできるような時まで、１つのメモリ操作に対応するデータを一時的にストアする１つのバッファとして１つの結合バッファ４０を用いることができる。 
【００１０】
最も規則正しい複数のロード及び複数のストアは厳しいメモリ順序付けを課さないが、（複数のＩＰＦプロセッサのように）１つの弱いメモリ順序モデルを有する１つのＩＳＡは、厳しいメモリ順序付けを必要とする複数の明示的な命令（例えば、ロード獲得、ストア解除、メモリフェンス及び複数のセマフォ）を含むことができる。１つの強力なメモリ順序モデルを有する１つのＩＳＡ（例えば、１つのＩＡ−３２ＩＳＡ）では、あらゆるロードまたはストア命令は、複数の厳しいメモリ順序付け規則に追随できる。従って、例えば、１つのＩＡ−３２環境から１つのＩＰＦ環境へ変換される１つのプログラムは、複数のあらゆるロードを複数のロード獲得と置き換え、複数のあらゆるストアを複数のストア解除と置き換えることにより適切なプログラム動作を確実にする強力なメモリ順序付けを課すことができる。 
【００１１】
本発明の一実施形態による１つのプロセッサが１つのロード獲得を処理する場合、このプロセッサは、後の複数のロード及び複数のストアが処理される前にロード獲得が大域的な視認性を獲得していることを確実にする。従って、ロード獲得が１つの第１レベルデータキャッシュでミスしたら、後の複数のロードが第１レベルデータキャッシュでヒットした場合であっても、レジスタファイルを更新することを後の複数のロードに禁じることができ、ロード獲得がそのデータをレジスタファイルへ戻した後だけに複数の後のロードが書き込むブロックのオーナー権を後の複数のストアが検査しなければならない。このことを達成することを目的として、プロセッサは、１つの未完成のロード獲得よりも新しい複数のあらゆるロードをデータキャッシュでミスし、１つのロードキューすなわち１つのミスリクエストキュー（ＭＲＱ）に入るように強制して適切な順序付けを確実にすることができる。 
【００１２】
本発明の一実施形態による１つのプロセッサが１つのストア解除を処理する場合、このプロセッサは、あらゆる先の複数のロード及び複数のストアが大域的な視認性を獲得していることを確実にする。従って、ストア解除がその書き込みを大域的に視認可能にさせることができる前に、複数のあらゆる先のロードはデータをレジスタへ戻さなければならず、複数のあらゆる先のストアは、１つのキャッシュコヒーレンスプロトコルを介してオーナー権の視認性を獲得しなければならない。 
【００１３】
複数のメモリフェンス及びセマフォ操作は、ロード獲得意味及びストア解除意味の双方の複数の要素を有する。 
【００１４】
やはり図１を参照する。（ここでは、「ＭＲＱ２０」とも称する）ロードキュー２０が示されている。このロードキュー２０は、１つの特定のメモリ操作（例えば、１つのロード）に対応する１つのエントリである１つのＭＲＱエントリ２５を含む。例示目的のためにただ１つのエントリ２５を含むように示すが、複数のこのようなエントリが存在できる。複数のビットにより形成された１つの順序ベクトル２６はＭＲＱエントリ２５と関連付けられている。順序ベクトル２６の各ビットは、複数の先のメモリ操作が完了したかを示すためにロードキュー２０内の１つのエントリに対応できる。従って、順序ベクトル２６は、１つの関連のメモリ操作が完了できる前に完了すべき複数の先のロードを追跡できる。 
【００１５】
ロードキュー２０内にストアされた続いて起こる複数のメモリ操作をＭＲＱエントリ２５に対して順序付けるべきであることを示すのに用いることができる１つの順序ビット（Ｏビット）２７もＭＲＱエントリ２５と関連付けられている。更に、１つの有効ビット２８も存在できる。図１に更に示すように、ＭＲＱエントリ２５は、このＭＲＱエントリのメモリ操作に対応する１つのストアバッファ内の１つのエントリを識別するのに用いることができる１つの順序ストアバッファ識別子（ＩＤ）２９を含むこともできる。 
【００１６】
同様に、（ここでは、「ＳＴＢ３０」とも称する）ストアキュー３０は複数のエントリを含むことができる。例示目的を達成するため、ただ１つのＳＴＢエントリ３５を図１に示す。ＳＴＢエントリ３５は、１つの所定のメモリ操作（すなわち、１つのストア）に対応できる。図１に示すように、ＳＴＢエントリ３５は、これと関連する１つの順序ベクトル３６を有することができる。このような１つの順序ベクトルは、ロードキュー２０内の、幾つかの実施形態では選択的にストアキュー３０内の複数の先のメモリ操作に対するＳＴＢエントリ３５に対応のメモリ操作の相対的な順序付けを示すことができる。従って、順序ベクトル３６は、１つの関連のメモリ操作がコミットできる前に完了しなければならないＭＲＱ２０内の複数の先のメモリ操作（通常、複数のロード）を追跡できる。図１に示されていないが、ある複数の実施形態では、１つの先のメモリ操作（通常、ＳＴＢ内の１つのストア）が、今はコミットされていることを示すためにＳＴＢ３０は１つのＳＴＢコミット通知を（例えば、ＭＲＱへ）供給できる。 
【００１７】
様々な複数の実施形態では、結合バッファ４０は、複数のあらゆる書き込み操作が視認性を獲得したことを示すのに用いることができる１つの信号４５（すなわち、１つの「全先行書き込み視認可能」信号）を送信できる。このような１つの実施形態では、コミットすることを遅らしたＳＴＢ３０内の、解除の意味に関する１つのメモリ操作（通常、１つのストア解除、メモリフェンスまたはセマフォ解除）が、今はコミットできることを信号４５の受信時に通知するように信号４５を用いることができる。信号４５の使用を以下に更に論ずる。 
【００１８】
総合して、これら複数の機構は、発生された複数のメモリ操作の意味により、必要に応じてメモリ順序付けを実施できる。ある複数の実施形態による１つのプロセッサが、１つの弱いメモリ順序モデルを用いる複数のネイティブバイナリを活用することを目的として、所望であれば、複数の順序付け制約だけを実施できるので、これら複数の機構は高性能を促進できる。 
【００１９】
更に、様々な複数の実施形態では、複数のロードのための複数の順序ベクトル検査を、可能な限り遅く、延期できる。このことは、２つの含みを持つ。第１に、複数のパイプラインメモリアクセスに関して、複数の順序付け制約を必要とする複数のロードは、（１次データキャッシュをミスすることを余儀なくされることを除いて）キャッシュ階層に正常にアクセスする。これにより、複数の順序付け制約が検査される前に１つのロードが、複数の２次及び３次レベルキャッシュ並びにその他の複数のプロセッサソケットキャッシュ及びメモリにアクセスできる。ロードデータがレジスタファイルに書き込もうとしている時にだけ、複数のあらゆる制約を満足することを確実にするように順序ベクトルが検査される。１つのロード獲得が１次データキャッシュをミスすると、例えば、（完了のためにロード獲得を待つ必要がある）１つの後のロードは、ロード獲得のシャドウ内の要求に着手できる。後のロードがデータを戻す前にロード獲得がデータを戻せば、後のロードは、順序付け制約によるいかなる性能ペナルティも受けない。従って、最良の場合では、複数のロード操作が完全にパイプライン処理されるが、順序付けを実施できる。 
【００２０】
第２に、データのプリフェッチに関して、１つの後のロードが１つの先のロード獲得の前にデータを戻そうと試みる場合、ＣＰＵキャッシュ内のアクセスされたブロックを効果的にプリフェッチする。ロード獲得がデータを戻した後、後のロードはロードキューから再試行し、キャッシュからデータを獲得できる。１つの介在する大域的に視認可能な書き込みがキャッシュラインを無効にさせ、この結果、１つの更新されたコピーを獲得するのにキャッシュブロックが再フェッチされるので、順序付けを維持できる。 
【００２１】
図２を次に参照する。図２には、本発明の一実施形態により１つのロード命令を処理する一方法を表す１つの流れ図を示す。このような１つのロード命令を、１つのロードまたは１つのロード獲得命令とすることができる。図２に示すように、１つのロード命令を受信すること（ステップ１０２）により方法１００を開始できる。複数のいかなる後のロードまたはストア操作も大域的に視認可能になる前に１つのロード獲得命令が大域的に視認可能になる複数のメモリ順序付け規則を用いる１つのプロセッサで、このような１つの命令を実行できる。あるいはまた、ある複数のプロセッサ環境では、１つのロード命令を順序付けする必要がない。図２の方法を用いて複数のロード命令を処理できるが、複数の別の実施形態では、複数の後のメモリ操作の前に１つの最初のメモリ操作が視認可能になる必要がある複数の別のプロセッサの複数のメモリ順序付け規則に適合する複数の別のメモリ操作を処理するために、１つの類似の流れを用いることができる。 
【００２２】
やはり図２を参照する。次に、いずれかの複数の先の順序付き操作が１つのロードキュー内で未完成であるかを決定できる（ステップ１０５）。このような複数の操作は、複数のロード獲得命令や複数のメモリフェンスなどを含むことができる。このような複数の操作が未完成であれば、ロードを１つのロードキュー内にストアできる（ステップ１７０）。更に、ロードキュー内のエントリに対応する１つの順序ベクトルを、複数の先のエントリの複数の順序ビットに基づいて発生できる（ステップ１８０）。すなわち、発生された順序ベクトル内の複数の順序ビットは、複数のロード獲得や複数のメモリフェンスなどのような複数の順序付け可能な操作のために存在できる。一実施形態では、ＭＲＱエントリは、複数のあらゆるＭＲＱエントリの複数のＯビットを複製してその順序ベクトルを発生できる。例えば、５つの先のＭＲＱエントリが存在し、各々が、まだ大域的に視認可能になっていなければ、６番目のエントリに対する順序ベクトルは、５つの先のＭＲＱエントリの各々に対して１つのある値を含むことができる。その後、制御は、以下に更に論ずるひし形１１５へ移動できる。図２は、１つの現在のエントリがストアキュー内の複数の先の順序付け操作に依存できることを示しているが、現在のエントリは、ストアキュー内の複数の先の順序付け操作にも依存でき、従って、いずれかのこのような複数の操作がストアキュー内に存在するかどうかをも決定できる。 
【００２３】
代わりに、ステップ１０５において、いずれの複数の先の順序付き操作もロードキュー内で未完成でないことを決定すれば、データが１つのデータキャッシュに存在するかを決定できる（ステップ１１０）。存在すれば、データをデータキャッシュから獲得でき（ステップ１１８）、通常処理を続けることができる。 
【００２４】
ひし形１１５では、命令が１つのロード獲得操作であるかを決定できる。ロード獲得操作でなければ、データを獲得するために制御は図３へ移動できる（ステップ１９５）。代わりに、ひし形１１５において、命令が１つのロード獲得操作であることを決定すれば、制御はステップ１２０へ移動でき、ここでは、データキャッシュでミスするように複数の後のロードに強要できる（ステップ１２０）。次に、発生された時にＭＲＱエントリはそれ自体のＯビットを設定することもできる（ステップ１５０）。複数の後のＭＲＱエントリはこのような１つの順序ビットを用いて、それらの順序ベクトルを、現在存在する複数のＭＲＱエントリに対して設定する仕方を決定できる。言い換えれば、１つの後のロードは、１つの対応のビットをそれに応じて順序ベクトル内に設定することにより１つのＭＲＱエントリのＯビットに気付くことができる。次に、制御は、以下に論ずる図３に対応するステップ１９５へ移動できる。 
【００２５】
図２に示されていないが、ある複数の実施形態では、複数の後のロード命令を１つのＭＲＱエントリ内にストアし、１つのＯビットと、これに対応する１つの順序ベクトルとを発生できる。すなわち、複数の後のロードは、現存の複数のＭＲＱエントリの複数のＯビットを複製することにより順序ベクトルを設定する仕方を決定できる（すなわち、１つの後のロードは、対応のビットをそのＭＲＱエントリの順序ベクトル内に設定することによりロード獲得のＯビットに気付く）。図２に示されていないが、当然のことながら、複数の後の（すなわち、非解除）ストアは、ＭＲＱエントリの複数のＯビットに基づいて複数のロードが決定したように、順序ベクトルを設定する仕方を決定できる。 
【００２６】
図３を次に参照する。図３には、本発明の一実施形態によりデータをロードする一方法を表す１つの流れ図を示す。図３に示すように、１つのロードデータ操作からプロセス２００を開始できる（ステップ２０５）。次に、ロード命令に対応するメモリ階層からデータを受信できる（ステップ２１０）。このようなデータは、システムメモリまたは、これと関連する１つのキャッシュのような、あるいは、１つのプロセッサと関連する１つのオンまたはオフチップキャッシュのような１つのメモリ階層の様々な複数の位置に存在できる。データがメモリ階層から受信されると、データをデータキャッシュまたはその他の一次記憶場所に記憶できる。 
【００２７】
次に、ロード命令に対応する１つの順序ベクトルを分析できる（ステップ２２０）。例えば、ロード命令に対応する１つのロードキュー内の１つのＭＲＱエントリは、関連の１つの順序ベクトルを有することができる。順序ベクトルがクリアであるかを決定するために順序ベクトルを分析できる（ステップ２３０）。図３の実施形態では、順序ベクトルの複数のあらゆるビットがクリアであれば、このことは、複数のあらゆる先のメモリ操作が完了されていることを示すことができる。順序ベクトルがクリアでなければ、このことは、複数のこのような先の操作が完了されておらず、従って、データが戻されていないことを示す。代わりに、ロード操作はロードキュー内でスリープ状態に入り（ステップ２４０）、複数の先のロード獲得操作のような複数の先のメモリ操作からの進展を待つ。 
【００２８】
代わりに、ステップ２３０において順序ベクトルがクリアであると決定されると、制御をステップ２５０へ移動でき、ここでは、データを１つのレジスタファイルへ書き込むことができる。次に、ロード命令に対応するエントリを割り当て解除できる（ステップ２６０）。最後に、ステップ２７０において、完了された（すなわち、割り当て解除された）ロード操作に対応する順序ビットを、ロードキュー及びストアキュー内の複数のあらゆる後のエントリから列消去できる。このように、これら複数の順序ベクトルを、現在の操作の完了された状態で更新できる。 
【００２９】
１つのストア操作が、大域的な視認性を獲得しようと試みようとしていれば（例えば、ストアバッファから結合バッファへコピーアウトし、キャッシュブロックに対するオーナー権を要求しようとしていれば）、順序ベクトルがクリアであることを確実にするために最初に検査できる。クリアでなければ、順序ベクトルが完全にクリアになるまで操作を保留できる。 
【００３０】
図４を次に参照する。図４には、本発明の一実施形態により１つのストア命令を処理する一方法を表す１つの流れ図を示す。このような１つのストア命令を、１つのストアまたは１つのストア解除命令とすることができる。ある複数の実施形態では、１つのストア命令を順序付ける必要がある。しかし、ある複数のプロセッサで用いる複数の実施形態では、複数のメモリ順序付け規則は、１つのストア解除操作自体が大域的に視認可能になる前に複数のあらゆる先のロードまたはストア操作が大域的に視認可能となっているということを決定付けることができる。複数のストア命令に関して図４の実施形態で論ずるが、当然のことながら、このような１つの流れまたは１つの類似の流れを用いて、所定の操作の視認性より前に視認可能になる複数の先のメモリ操作を必要とする複数の類似のメモリ順序付け操作を処理できる。 
【００３１】
やはり図４を参照する。１つのストア命令を受信することによりプロセス４００を開始できる（ステップ４０５）。ステップ４１０では、ストア命令をストアキューの１つのエントリ内に挿入できる。次に、操作が１つのストア解除操作であるかを決定できる（ステップ４１５）。ストア解除操作でなければ、エントリに対する１つの順序ベクトルを、（順序ビットセットを有する）ロードキュー内の複数のあらゆる先の未完成の順序付き操作に基づいて発生できる（ステップ４２５）。ストア命令が１つの順序付き命令でないので、このような順序ベクトルを、順序ビットセットなしに発生できる。次に、以下に更に論ずるステップ４３０へ制御が移動できる。 
【００３２】
代わりに、ステップ４１５において１つのストア解除操作が存在することを決定すれば、次に、エントリに対する１つの順序ベクトルを、ロードキュー内の複数のあらゆる先の未完成の順序付け可能な操作に関する情報に基づいて発生できる（ステップ４２０）。上述したように、このような１つの順序ベクトルは、目下の複数のメモリ操作（例えば、１つのＭＲＱ内の複数の未完成のロード、並びに、複数のメモリフェンス及びその他のこのような複数の操作）に対応する複数のビットを含むことができる。 
【００３３】
ステップ４３０では、順序ベクトルがクリアであるかを決定できる。順序ベクトルがクリアでなければ、順序ベクトルがクリアになるまで１つのループを実行できる。順序ベクトルがクリアになると、操作が１つの解除操作であるかを決定できる（ステップ４３５）。解除操作でなければ、以下に論ずるブロック４４５へ制御は直接に移動できる。代わりに、１つの解除操作が存在することを決定すれば、複数のあらゆる先の書き込みが視認性を獲得しているかを決定できる（ステップ４４０）。例えば、一実施形態では、命令に対応するデータが１つの所定のバッファまたはその他の記憶場所内に存在する時に複数のストアを視認可能とすることができる。獲得していなければ、複数のあらゆる先の書き込みが視認性を獲得するまで、ステップ４４０はそれ自体に関してループバックできる。このような視認性を獲得すると、制御はステップ４４５へ移動できる。 
【００３４】
そこで、ストアは、キャッシュブロックへの書き込みに対する視認性を要求できる（ステップ４４５）。図４に示されていないが、ストアが、視認性を要求することを許可される時にデータを結合バッファ内にストアできる。一実施形態では、複数のあらゆる先のストアが視認性を獲得すれば、１つの結合バッファ視認性信号をアサートできる。このような１つの信号は、結合バッファによる確認時に、複数のあらゆる先のストア操作が大域的な視認性を獲得したことを示すことができる。一実施形態では、このような視認性を獲得するために１つのキャッシュ階層プロトコルに問い合わせできる。キャッシュ階層プロトコルが１つの肯定応答をストアバッファへ戻す時に、このような視認性を獲得できる。 
【００３５】
ある複数の実施形態では、１つのストア解除操作に対する１つのキャッシュブロックは、ストア解除が視認性を獲得する状態にある時に所有される結合バッファ（ＭＧＢ）内に既に存在できる。１つの適正な量のマージングがこれら複数のブロックに対するＭＧＢ内に存在すれば、ＭＧＢは、（例えば、複数のあらゆるストアが複数のストア解除である複数のコードセグメント内で）複数のストア解除の複数のストリームに対して高性能を維持できる。 
【００３６】
ストアが視認性を獲得すれば、１つの肯定応答ビットを結合バッファ内のストアデータに設定できる。ＭＧＢは、各有効キャッシュブロックに対して、１つのオーナー権またはダーティビットとも称するこの肯定応答ビットを含むことができる。このような複数の実施形態では、ＭＧＢは次に、複数の有効エントリのすべてにわたって１つのＯＲ操作を実行できる。いずれかの有効エントリが承認されなければ、「全先行書き込み視認可能」信号をデアサートできる。この肯定応答ビットが設定された後、エントリは大域的に視認可能になることができる。このように、ストアまたはストア解除命令に対して視認性を獲得できる（ステップ４６０）。当然のことながら、図４に説明した少なくとも幾つかの動作を、異なる複数の実施形態において別の順序で実行できる。例えば、一実施形態では、命令に対応するデータが１つの所定のバッファまたはその他の記憶場所内に存在する時に、複数の先の書き込みを視認可能にできる。 
【００３７】
図５を次に参照する。図５には、本発明の一実施形態により１つのメモリフェンス（ＭＦ）操作を処理する一方法を表す１つの流れ図を示す。図５の実施形態では、いずれかの後の複数のロード及び複数のストアを視認可能にさせることができる前に１つのメモリフェンスに対してあらゆる先の複数のロード及び複数のストアが視認可能になっているということを決定付ける複数のメモリ順序付け規則を有する１つのプロセッサ内で１つのメモリフェンスを処理できる。一実施形態では、このような１つのプロセッサを１つのＩＰＦプロセッサ、１つのＩＡ−３２プロセッサまたはその他のこのようなプロセッサとすることができる。 
【００３８】
図５に示すように、１つのメモリフェンス命令を１つのプロセッサにより発生できる（ステップ５０５）。次に、１つのエントリを、このエントリに対応する複数の順序ベクトルを有する１つのロードキュー及び１つのストアキューの双方で発生できる（ステップ５１０）。特に、複数の順序ベクトルは、ロードキュー内の複数のあらゆる先の動作可能な操作に対応できる。ＭＲＱエントリを形成する際、ストアキューエントリに対応する１つのエントリ番号をロードキューエントリの１つのストア順序識別子（ＩＤ）領域に挿入できる（ステップ５２０）。特に、ＭＲＱは、メモリフェンスにより占められたＳＴＢエントリを１つの「順序ＳＴＢＩＤ」領域内に記録できる。次に、ロードキューエントリに対して順序ビットを設定できる（ステップ５３０）。後の複数のロード及び複数のストアが順序ベクトルにメモリフェンスを記録するように、メモリフェンスに対するＭＲＱエントリはＯビットを設定できる。 
【００３９】
その後、複数のあらゆる先のストアが視認可能であるか、そして、ストアキュー内のエントリに対する順序ベクトルが現在クリアであるかを決定できる（ステップ５３５）。否定応答であれば、このような複数のストアが視認可能となり、順序ベクトルがクリアになるまで１つのループを実行できる。このことが生じていれば、制御はステップ５５０へ移動でき、ここでは、メモリフェンスエントリをストアキューから割り当て解除できる。 
【００４０】
ストア解除処理でのように、順序ベクトルがクリアになり、１つの「全先行書き込み視認可能」信号を結合バッファから受信するまで、ＳＴＢはＭＦを割り当て解除から阻止できる。メモリフェンスがＳＴＢから割り当てを解除するとすぐ、メモリフェンスのストア順序キューＩＤをロードキューへ送信できる（ステップ５６０）。従って、ロードキューは、割り当て解除されたストアのストアキューＩＤを確認し、１つのコンテントアドレッサブルメモリ（ＣＡＭ）操作を複数のあらゆるエントリの複数の順序ストアキューＩＤ領域にわたって実行できる。更に、ロードキュー内のメモリフェンスエントリを１つのスリープ状態から呼び起こすことができる。 
【００４１】
次に、複数のロード及びキューエントリに対応する順序ビットを、ロードキュー及びストアキュー内のあらゆるその他の複数のエントリ（すなわち、後の複数のロード及び複数のストア）から列消去でき（ブロック５７０）、これによりこれらを完了させ、メモリフェンスをロードキューから割り当て解除できる。 
【００４２】
本発明の一実勢形態による順序付けハードウェアも、その他の複数の理由で、メモリまたはその他の複数のプロセッサ操作の順序を制御できる。例えば、１つのロードを、このロードのデータのすべてではないが幾つか（部分的なヒット）を生じることができる１つの先のストアで順序付けることに用いることができる。複数のリードアフターライト（ＲＡＷ）、ライトアフターリード（ＷＡＲ）及びライトアフターライト（ＷＡＷ）データ依存性ハザードを、メモリを通じて実施することに用いることができる。そして、ある複数の操作からその他の複数の操作へ（例えば、１つのセマフォから１つのロードへ、または、１つのストアから１つのセマフォへ）データを局部的にバイパスすることを阻止するのに用いることができる。更に、ある複数の実施形態では、複数のセマフォは、同一のハードウェアを用いて適切な順序付けを実施できる。 
【００４３】
図６を次に参照する。図６には、本発明の一実施形態による１つの典型的なコンピュータシステム６００を表す１つのブロック図を示す。図６に示すように、コンピュータシステム６００は、１つのプロセッサ６０１ａを含む。一実施形態では、プロセッサ６０１ａを１つのメモリシステム相互接続部６２０を超えて１つのキャッシュコヒーレント共有メモリサブシステム（「コヒーレントメモリ６３０」）６３０に結合できる。一実施形態では、コヒーレントメモリ６３０は１つのダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含むことができ、プロセッサ６０１ａとプロセッサ６０１ｂとの間でコヒーレントメモリ６３０を共有するのにコヒーレントメモリコントローラロジックを更に含むことができる。 
【００４４】
当然のことながら、別の複数の実施形態では、追加の複数のこのようなプロセッサをコヒーレントメモリ６３０に結合できる。更に、ある複数の実施形態では、システム６００内の複数のプロセッサの一部がコヒーレントメモリ６３０の幾つかの部分に通じ、その他の複数のプロセッサがコヒーレントメモリ６３０のその他の複数の部分に通じるようにコヒーレントメモリ６３０を部分ごとに散開して実装できる。 
【００４５】
図６に示すように、本発明の一実施形態によれば、プロセッサ６０１ａは１つのストアキュー３０ａ、１つのロードキュー２０ａ及び１つの結合バッファ４０ａを含むことができる。また、ある複数の実施形態では、結合バッファ４０ａからストアキュー３０ａへ供給できる１つの視認信号４５ａも示す。更に、１つのレベル２（Ｌ２）キャッシュ６０７をプロセッサ６０１ａに結合できる。図６に更に示すように、類似の複数のプロセッサ部品は、１つの多重プロセッサシステムのもう１つのコアプロセッサとすることができるプロセッサ６０１ｂ内に存在できる。 
【００４６】
コヒーレントメモリ６３０を（１つのハブリングを介して）１つの入力／出力（Ｉ／Ｏ）ハブ６３５にも結合でき、このＩ／Ｏハブ６３５は、１つのＩ／Ｏ拡張バス６５５及び１つの周辺バス６５０に結合されている。様々な複数の実施形態では、Ｉ／Ｏ拡張バス６５５を、その他の複数の装置のうちで１つのキーボード及びマウスのような様々な複数のＩ／Ｏ装置に結合できる。周辺バス６５０を、１つのフラッシュメモリやアドインカードなどのような１つのメモリ装置とすることができる周辺装置６７０のような様々な複数の部品に結合できる。この記述は、システム６００の特定の複数の部品について言及するが、図に示した複数の実施形態の多数の変形が実現可能である。 
【００４７】
複数の実施形態を実行するように１つのコンピュータシステムをプログラムする複数の命令を有する１つの記憶媒体に記憶できる１つのコンピュータプログラムで複数の実施形態を実施できる。記憶媒体は、複数のフロッピー（登録商標）ディスク、複数の光ディスク、複数のコンパクトディスク読み取り専用メモリ（ＣＤ‐ＲＯＭ）、複数のコンパクトディスクリライタブル（ＣＤ−ＲＷ）及び複数の光磁気ディスクを含むいかなる種類のディスクや、複数の読み取り専用メモリ（ＲＯＭ）、複数のランダムアクセスメモリ（ＲＡＭ）例えばダイナミックＲＡＭ及びスタティックＲＡＭ、複数の消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、複数の電気的に消去可能なプログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、複数のフラッシュメモリのような複数の半導体装置や、複数の磁気または光カードや、あるいは、複数の電子命令を記憶するのに適するいかなる種類の記憶媒体をも含むことができるが、これらに限定されない。１つのプログラム可能な制御装置により実行される複数のソフトウェアモジュールとして別の複数の実施形態を実施できる。 
【００４８】
本発明を、限られた数の実施形態について説明したが、当業者は、これら実施形態から多数の修正形態及び変更形態を理解するであろう。請求の範囲は、本発明の真の精神及び範囲に含まれるこのような複数の修正形態及び変更形態のすべてに及ぶものとする。 
【図面の簡単な説明】
【００４９】
【図１】本発明の一実施形態による１つのシステムの一部分を示す１つのブロック図である。
【図２】本発明の一実施形態により１つのロード命令を処理する一方法を示す１つの流れ図である。
【図３】本発明の一実施形態によりデータをロードする一方法を示す１つの流れ図である。
【図４】本発明の一実施形態により１つのストア命令を処理する一方法を示す１つの流れ図である。
【図５】本発明の一実施形態により１つのメモリフェンスを処理する一方法を示す１つの流れ図である。
【図６】本発明の一実施形態による１つのシステムを示す１つのブロック図である。
【符号の説明】
【００５０】
１０  システム
２０  ロードキュー
３０  ストアキュー
４０  バッファ
【図１】
2006048696.tif 000003
【図２】
2006048696.tif 000004
【図３】
2006048696.tif 000005
【図４】
2006048696.tif 000006
【図５】
2006048696.tif 000007
【図６】
2006048696.tif 000008
【外国語明細書】
2006048696000001.pdf
2006048696000002.pdf
2006048696000003.pdf
2006048696000004.pdf