(57)【要約】  ある態様のプロセッサは、永続ストアフェンス命令をデコードするデコードユニットを含む。プロセッサはまた、デコードユニットに結合されたメモリサブシステムモジュールを含む。メモリサブシステムモジュールは、永続ストアフェンス命令に応答して、全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する。後続のストア命令が、元のプログラム順序において永続ストアフェンス命令の後に発生する。他のプロセッサ、方法、システム、及び製造物品もまた開示されている。
2017532643.tif 000002
【特許請求の範囲】
【請求項１】
永続ストアフェンス命令をデコードするデコードユニットと、
前記デコードユニットに結合されたメモリサブシステムモジュールと
を備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する
プロセッサ。
【請求項２】
前記永続ストアフェンス命令は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を含む
請求項１に記載のプロセッサ。
【請求項３】
前記所定のデータは、ストア命令のソースオペランドに含まれ、暗黙的に前記永続ストアフェンス命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある、
請求項1に記載のプロセッサ。
【請求項４】
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、前記後続のストア命令の前記データの前に前記永続ストレージに永続的に格納されることを保証しない、
請求項１に記載のプロセッサ。
【請求項５】
１つ又は複数のキャッシュのセットを更に備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータに前記１つ又は複数のキャッシュの前記セットをバイパスさせる、
請求項１に記載のプロセッサ。
【請求項６】
永続ストアフェンスバッファを更に備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータを前記永続ストアフェンスバッファに格納されるようにさせる、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
キャッシュラインをキャッシュから移す意図を示す信号に基づき、前記キャッシュラインが前記キャッシュから移される前に、少なくとも１つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する永続ストアフェンスバッファ管理ユニットを更に備える
請求項６に記載のプロセッサ。
【請求項８】
前記永続ストアフェンスバッファは、第２の永続ストアフェンス命令に対応する第２のデータが、前記所定のデータと同じ前記永続ストアフェンスバッファのキャッシュラインに格納されることを可能にするライトコンバインバッファを含む
請求項６に記載のプロセッサ。
【請求項９】
前記プロセッサの命令セットは、前記永続ストアフェンスバッファからデータを読み出すユーザレベルのロード命令を含まない
請求項６に記載のプロセッサ。
【請求項１０】
前記永続ストアフェンスバッファは、キャッシュコヒーレンシプロトコルを実装しない
請求項６に記載のプロセッサ。
【請求項１１】
前記プロセッサは、前記プロセッサを前記永続ストレージに結合するのに用いられる相互接続上に送信される１つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを前記永続ストレージに格納する
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項１２】
プロセッサにおける方法であって、
永続ストアフェンス命令を受信する段階と、
前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する段階と
を備える
方法。
【請求項１３】
前記永続ストアフェンス命令を受信する段階は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を受信する段階を含む
請求項１２に記載の方法。
【請求項１４】
前記所定のデータを有するソースオペランドを示すストア命令を受信する段階を更に備え、
前記ストア命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある
請求項１２に記載の方法。
【請求項１５】
前記永続ストアフェンス命令に応答して、前記所定のデータに前記プロセッサの１つ又は複数のキャッシュのセットをバイパスさせる段階を更に備える
請求項１２に記載の方法。
【請求項１６】
保証する段階は、前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する段階を含み、全ての前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが前記永続ストレージに永続的に格納されることを保証することはない
請求項１２に記載の方法。
【請求項１７】
相互接続上に送信される１つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを前記永続ストレージに格納する段階を更に備える
請求項１２に記載の方法。
【請求項１８】
前記永続ストアフェンス命令に応答して、前記所定のデータを永続ストアフェンスバッファに格納する段階を更に備え、
前記プロセッサの命令セットは、データを前記永続ストアフェンスバッファからロードするユーザレベルのロード命令を含まない
請求項１２に記載の方法。
【請求項１９】
キャッシュラインをキャッシュから移す意図を示す信号を受信する段階と、
前記信号を受信した後、且つ前記キャッシュラインが前記キャッシュから前記永続ストレージに移される前に、少なくとも１つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する段階と
を更に備える
請求項１８に記載の方法。
【請求項２０】
前記所定のデータを前記永続ストレージのログ先行書き込みに格納する段階を更に備える
請求項１２に記載の方法。
【請求項２１】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に結合された永続ストレージと、
前記相互接続に結合されたプロセッサと
を備え、
前記永続ストレージはログ先行書き込みアルゴリズムの命令のセットを格納し、前記命令のセットは、前記永続ストレージにおける位置を示し、且つ前記ログ先行書き込みアルゴリズムにより所定のデータを前記永続ストレージのログ先行書き込みに格納するのに用いられるストア及び永続ストアフェンス命令を含み、
前記プロセッサは、前記ストア及び永続ストアフェンス命令を受信し、前記ストア及び永続ストアフェンス命令に応答して、元のプログラム順序において前記ログ先行書き込みアルゴリズムの前記ストア及び永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する
システム。
【請求項２２】
前記ストア及び永続ストアフェンス命令は、前記所定のデータに前記プロセッサの１つ又は複数のキャッシュのセットをバイパスさせる非一時的命令を含む
請求項２１に記載のシステム。
【請求項２３】
請求項１２から２０のいずれか一項に記載の方法を実行するための手段を備える
装置。
【請求項２４】
機械により実行されると、請求項１２から２０のいずれか一項に記載の方法を前記機械に実行させるよう動作可能な命令を格納する非一時的機械可読媒体を備える
製造物品。
【請求項２５】
相互接続と、
前記相互接続に結合された請求項１から１１のいずれか一項に記載のプロセッサと、
前記相互接続に結合された永続ストレージと
を備え、
前記永続ストレージは、前記永続ストアフェンス命令を含むログ先行書き込みアルゴリズムを格納し、データを前記永続ストレージのログ先行書き込みに格納するのに前記永続ストアフェンス命令を用いる
電子デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に説明される複数の実施形態は概して、データのストレージに関する。特に、本明細書に説明される複数の実施形態は概して、永続メモリにおけるデータのストレージに関する。
【背景技術】
【０００２】
プロセッサは一般に、メモリにアクセスするための複数の命令を実行するよう動作可能である。例えば、プロセッサは、メインメモリからデータをロードするか読み出すための複数のロード命令、及び／又は、メインメモリにデータを書き込こむか別な方法でデータを格納するための複数ストア命令を実行し得る。
【０００３】
カリフォルニア州サンタクララのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎにより２０１４年６月に公開されたＩｎｔｅｌ（登録商標）６４及びＩＡ−３２アーキテクチャのソフトウェア開発者マニュアル（１版、２Ａ版、２Ｂ版、２Ｃ版、３Ａ版、３Ｂ版、及び３Ｃ版の合併版：注文番号３２５４６２−０５１ＵＳ）は、ストアオペレーションをシリアル化するためのＳＦＥＮＣＥ（ストアフェンス）命令を説明している。ＳＦＥＮＣＥ命令は、ＳＦＥＮＣＥ命令の前に出された全てのメモリストア命令にシリアル化オペレーションを実行し得る。このシリアル化オペレーションは、プログラム順序においてＳＦＥＮＣＥ命令に先行するあらゆるストア命令が、ＳＦＥＮＣＥ命令に続く任意のストア命令の前に全体に可視化されるようになることを保証し得る。
【図面の簡単な説明】
【０００４】
本発明は、以下の説明及び複数の実施形態を図示するのに用いられる添付図面を参照することで最も良く理解され得る。これらの図面は以下の通りである。
【図１】本発明の複数の実施形態が実装され得るコンピュータシステムの一実施形態のブロック図である。
【図２】永続ストアフェンス命令の一実施形態を実行するよう動作可能なプロセッサの一実施形態のブロック図である。
【図３】永続ストアフェンス命令の一実施形態を実行する方法の一実施形態のブロックフロー図である。
【図４】永続ストアフェンスバッファの例示的な一実施形態を有するメモリサブシステムモジュールの例示的な一実施形態のブロック図である。
【図５】異なる複数の永続ストアフェンス命令に対応するデータを有する永続ストアフェンスバッファ用のキャッシュラインの例示的な一実施形態のブロック図である。
【図６】データ及びログ先行書き込みを有する永続メモリの一実施形態のブロック図である。
【図７】本明細書に開示されるような永続ストアフェンス命令を用いずに実行されるログ先行書き込みの１つの可能な方法のブロックフロー図である。
【図８】永続ストアフェンス命令の一実施形態を用いて実行されるログ先行書き込みの方法の例示的な一実施形態のブロックフロー図である。
【図９】永続ストアフェンスバッファの一実施形態に適した様々な位置を図示するブロック図である。
【図１０Ａ】インオーダパイプラインの一実施形態と、レジスタリネーミングするアウトオブオーダ発行／実行パイプラインの一実施形態とを図示するブロック図である。
【図１０Ｂ】実行エンジンユニットに結合されたフロントエンドユニットを含み、両者がメモリユニットに結合されたプロセッサコアの一実施形態のブロック図である。
【図１１Ａ】シングルプロセッサコアの一実施形態のブロック図であり、オンダイ相互接続ネットワークへの接続に加え、レベル２（Ｌ２）キャッシュのローカルサブセットを有する。
【図１１Ｂ】図１１Ａのプロセッサコアの一部の拡大図の一実施形態のブロック図である。
【図１２】複数のコアを有し得る、統合メモリコントローラを有し得る、及び統合グラフィクスを有し得るプロセッサの一実施形態のブロック図である。
【図１３】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１４】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図１５】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図１６】システムオンチップアーキテクチャの一実施形態のブロック図である。
【図１７】本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用法についてのブロック図である。
【発明を実施するための形態】
【０００５】
本明細書に開示されるのは、永続ストアフェンス命令、その命令を実行するためのプロセッサ、その命令を処理又は実行するとプロセッサにより実行される方法、及びその命令を処理又は実行するための１つ又は複数のプロセッサを組み込むシステムである。以下の説明には、複数の具体的な詳細（例えば、特定の命令オペレーション、プロセッサ構成、マイクロアーキテクチャ的な詳細、オペレーションのシーケンス、命令の使用法など）が説明されている。しかし、複数の実施形態はこれらの具体的な詳細を用いずに実施され得る。他の複数の例では、よく知られた回路、構造、及び技術は、本明細書の理解を不明瞭にするのを回避するために、詳細に示されてはいない。
【０００６】
図１は、本発明の複数の実施形態が実装され得るコンピュータシステム１００の一実施形態のブロック図である。コンピュータシステムは、プロセッサ１０２と、任意的に揮発性又はそうでなければ非永続ストレージ１２２と、不揮発性又はそうでなければ永続ストレージ１２４とを含む。非永続ストレージ１２２は任意的であり必要ではない。プロセッサは、１つ又は複数の相互接続構造１２０、例えば、１つ又は複数のバスあるいは他の複数の相互接続、１つ又は複数のハブあるいは他のチップセットコンポーネント、それらの組み合わせなどにより、非永続ストレージ１２２及び永続ストレージ１２４に結合されてよい。当技術分野で知られている複数の揮発性メモリ及び不揮発性メモリとプロセッサを結合する様々な方法が適している。
【０００７】
揮発性メモリは、電力が印可されないとその内容を失うメモリ又はストレージのタイプを表す。それに対して、不揮発性メモリは、電力が印可されなくても、その内容を長期間保持することが可能なメモリ又はストレージのタイプを表す。例えば、電力なしで数週間、数か月、又は数年後でも、データは不揮発性メモリから読み出され得る。非永続ストレージの適切なタイプの例には、限定されないが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、及び今後開発されるタイプを含む他の形態のＲＡＭが含まれる。永続ストレージの適切なタイプの例には、限定されないが、ハードディスク、磁気テープ、他のタイプの磁気ストレージデバイス、フラッシュメモリ、様々なタイプのリードオンリメモリ（ＲＯＭ）、光ディスク、強誘電体ＲＡＭ（Ｆ−ＲＡＭ）、磁気抵抗ＲＡＭ、及び今後開発される他のタイプが含まれる。
【０００８】
いくつかの実施形態において、非永続ストレージ１２２及び永続ストレージ１２４の両方は、一次ストレージとして一緒に又は集合的に任意に用いられてよく、両方ともプロセッサにアクセス可能（例えば、プロセッサによってアドレス指定可能）であってよい。他の複数の実施形態において、非永続ストレージ１２２は任意に省略されてよく、永続ストレージ１２４がプロセッサにアクセス可能（例えば、プロセッサによってアドレス指定可能）な一次ストレージとして用いられてよい。さらに他の複数の実施形態において、非永続ストレージ１２２は一次ストレージ（例えば、メインメモリ）として利用されてよく、永続ストレージは二次ストレージ又は補助ストレージとして利用されてよいが、永続ストレージはプロセッサにアクセス可能（例えば、プロセッサによってアドレス指定可能）であってよい。
【０００９】
プロセッサ１０２は命令セット１０４を有する。命令セットはプロセッサの命令セットアーキテクチャ（ＩＳＡ）の一部であり、プロセッサが実行するよう動作可能な複数のネイティブ命令を含む。命令セットの複数の命令は、命令セットのこのような命令からデコードされたマイクロ命令又は他の命令とは対照的に、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、又は機械レベルの命令を表す。示されるように、命令セットは、非永続ストレージ及び／又は永続ストレージからデータをロードする又は読み出すための１つ又は複数のロード命令１０６を含んでよい。命令セットはまた、非永続ストレージ及び／又は永続ストレージにデータを移す、書き込む、又はそうでなければ格納するための１つ又は複数のストア命令１０８を含んでよい。
【００１０】
プロセッサは命令セットの複数の命令を処理するためのパイプライン１１２を有する。例として、パイプラインは、命令をフェッチするための命令フェッチユニット、命令をデコードするためのデコードユニット、デコードされた命令を実行するための１つ又は複数の実行ユニットなどを含んでよい。当技術分野で知られている様々な異なるプロセッサパイプライン設計が適している。本発明の範囲は、知られているいかなるパイプライン設計にも限定されない。プロセッサはまた、非永続ストレージ及び／又は永続ストレージとインタフェースするためのメモリサブシステム１１４を有する。メモリサブシステムは、１つ又は複数のキャッシュ１１８（例えば、１つ又は複数のレベルのキャッシュ）を含んでよい。例えば、特定のプロセッサは、パイプラインに相対的により近く及び／又は永続ストレージからより遠いレベル１（Ｌ１）命令・データ結合キャッシュと、パイプラインから相対的により遠く、及び／又は永続ストレージにより近いレベル２（Ｌ２）データキャッシュとを有する。他の複数のプロセッサは、単一レベルのキャッシュ、あるいは３つ又はそれより多くの異なるレベルのキャッシュを有してよい。各キャッシュは、特定の実装例に所望される命令及び／又はデータを保持してよい。
【００１１】
キャッシュ１１８を用いる1つの理由は、非永続ストレージ及び／又は永続ストレージのデータにプロセッサがアクセスする際のレイテンシを削減するのに役立つことである。非永続ストレージ及び／又は永続ストレージのデータへのアクセスは概して、キャッシュのデータへのアクセスより著しく遅いという傾向がある。例えば一般に、キャッシュのデータへのアクセスは、数回のプロセッサクロックサイクルしかかからないが、それに対して一次ストレージのデータへのアクセスは、典型的に数十回から数百回のクロックサイクルがかかり得る。結果として、性能改善に役立つために、プロセッサは特定のデータ（例えば、空間的及び／又は時間的に位置するデータ）を非永続ストレージ及び／又は永続ストレージからキャッシュに持ってきてよく、これにより、近いうちに再度同じデータが必要とされる場合に、データは非永続ストレージ及び／又は永続ストレージからより低速でアクセスされる代わりに、キャッシュから高速でアクセスされ得る。
【００１２】
さらに、ストア命令１０８は、プロセッサから非永続ストレージ及び／又は永続ストレージにデータを直接及び／又はすぐに格納しなくてよい。むしろ、データは最初にキャッシュされてよい、つまりキャッシュ１１８に格納されてよい。ここでも、データが近いうちに再度必要とされる場合に、このことがプロセッサの近くにデータを保持するのに役立ち得る、及び／又は、ストレージへのより長いレイテンシのアクセスを回避するのに役立ち得る。プロセッサのメモリサブシステムは、データが適切な時に非永続ストレージ及び／又は永続ストレージとコヒーレントに格納されることを保証するのに役立つキャッシュコヒーレンシメカニズム又はモジュール１１６を有してよく、これによりシステムの全てのエンティティ（例えば、別のプロセッサ）は、正確且つ最新版のデータを見る。例として、キャッシュコヒーレンシメカニズム又はモジュールは、各キャッシュラインが４つの状態、つまり変更、排他、共有、又は無効のうち１つであるＭＥＳＩプロトコルを実装するのに役立ち得る。
【００１３】
データを永続ストレージ１２４（例えば、不揮発性メモリ）に格納する１つの利点は、データの永続性又は耐久性である。永続性又は耐久性は概して、電力損失、オペレーティングシステムの故障、システムクラッシュ、プロセッサの故障、又は大部分の他のタイプのエラー（例えば、コンピュータシステムが再起動を必要とするもの）の場合に、格納されたデータが失われないことを意味する。データが永続ストレージに格納されると、電力損失、オペレーティングシステムの故障などがあっても、データは通常保持される。さらに、プロセッサが故障しても、又はコンピュータシステムがハードウェア故障に起因して違ったふうに故障しても、永続ストレージが残っている限り、データをリカバリすることは一般に可能であり得る。それに対して、非永続ストレージ１２２（例えば、揮発性メモリ）に格納されたデータは概して、永続性又は耐久性があるとみなされない。同様に、キャッシュ１１８、並びにロード／ストアバッファ、及び／又は様々な他の一時キャッシュ、及び／又はプロセッサのバッファ構造（簡略化のために図には示されない）に格納されたデータもまた、概して、永続性又は耐久性があるとみなされない。非永続ストレージ、キャッシュなどに格納されたそのようなデータは、電力損失、オペレーティングシステムの故障、システムクラッシュ、プロセッサの故障、及び特定の他のタイプのエラーの場合に失われ得る。
【００１４】
さらに、特定のアプリケーション及び／又は実装が、永続的に又は耐久的に格納されるデータを必要とする。例えば、特定のデータベースアプリケーション及び／又はデータトランザクションでは、データを失わないことが非常に重要である。また、いくつかのアプリケーション及び／又は実装において、データを永続的に及び／又は耐久的に特定の順序で格納する（例えば、１つのデータを別のデータの前に永続的に及び／又は耐久的に格納する）ことは有用であり得る。例として、ログ先行書き込み、他の順次格納アルゴリズムなどの実装の場合にはそうかもしれない。いくつかの実施形態において、プロセッサの命令セット１０４は、後続のデータ格納が永続ストレージ１２４に実行される前に、関連したデータ格納が永続ストレージ１２４に実行されることを生じさせる又は保証する永続ストアフェンス命令１１０の一実施形態を含んでよい。
【００１５】
図２は、永続ストアフェンス命令２１０の一実施形態を実行するよう動作可能なプロセッサ２０２の一実施形態のブロック図である。いくつかの実施形態において、プロセッサは汎用プロセッサ（例えば、デスクトップ、ラップトップ、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理ユニット（ＣＰＵ））であってよい。あるいは、プロセッサは専用プロセッサであってよい。適切な専用プロセッサの例には、限定されないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラ（例えば、マイクロコントローラ）が含まれる。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピューティング（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのうちいずれを有してよく、又は異なるアーキテクチャの組み合わせを有してもよい（例えば、複数の異なるコアが複数の異なるアーキテクチャを有してよい）。
【００１６】
動作中に、プロセッサ２０２はコード２３０（例えば、プログラム）を実行（ｅｘｅｃｕｔｅ、ｒｕｎ、ｐｅｒｆｏｒｍ）してよい。例えば、コードは、永続ストレージ２２４及び／又は任意的に非永続メモリ（不図示）からプロセッサにフェッチされ、読み込まれ、又は別な方法で受信されてよい。永続ストレージ２２４は、それが概してプロセッサの一部ではないことを示すために破線で示されている。コードは、様々な異なるタイプの命令を含んでよい。これらの命令の中で、コードは永続ストアフェンス命令２１０を含む。いくつかの実施形態において、永続ストアフェンス命令はそれ自体が任意に永続ストア命令であってよく、永続ストレージ２２４にデータを移す、書き込む、又はそうでなければ格納する（例えば、命令２１０は永続ストア及び永続ストアフェンス命令であってよい）。そのような永続ストア及び永続ストアフェンス命令２１０は、任意的に関連永続ストアオペレーション２２８を有し、関連データを永続ストレージ２２４に格納してよい。このような実施形態において、命令２１０は、永続ストレージに格納されるデータを有するソースオペランドを明示的に指定してよく（例えば、１つ又は複数のフィールド、あるいはビットのセットによって）、又は別な方法で示してもよい（例えば、暗黙的に示す）。命令２１０は、データが格納される永続ストレージ２２４のアドレス又は他の位置を明示的に指定してよく（例えば、１つ又は複数のフィールド、あるいはビットのセットによって）、又は別な方法で示してもよい（例えば、暗黙的に示す）。いくつかの実施形態において、永続ストレージ２２４はプロセッサの命令セットの命令によってアドレス指定可能であり得ることに留意されたい。あるいは、他の複数の実施形態において、永続ストアフェンス命令は関連永続ストアオペレーション２２８を有さなくてよい。例えば、永続ストアフェンス命令は、データを永続ストレージ２２４に格納するよう動作する別個であるが関連した永続ストア命令２０８Ｅとともに動作するよう設計されてよく、又はそう意図されてもよい。例えば、別個の永続ストア命令２０８Ｅは、元のプログラム又はコードの順序において、永続ストアフェンス命令２１０の（例えばすぐ）前に（又は代替的に（例えばすぐ）後に）あるよう設計されてよく、又は暗黙的にそう理解されてもよい。コードはまた、プログラム順序において永続ストアフェンス命令２１０より後に、及び／又はその後に発生する１つ又は複数の永続ストア命令２０８Ｌのセットを含んでよい。前の永続ストア命令２０８Ｅはまた、元のプログラム又はコードの順序において、後の全ての永続ストア命令２０８Ｌより早く及び／又はその前に発生し得る。
【００１７】
再度図２を参照すると、プロセッサはデコードユニット又はデコーダ２２６を含む。デコードユニットは、永続ストアフェンス命令２１０を受信してデコードし得る。永続ストアフェンス命令は、マクロ命令、アセンブリ言語命令、マシンコード命令、あるいはプロセッサの命令セットの他の命令又は制御信号を表してよい。デコードユニットは、１つ又は複数の相対的に低水準の命令又は制御信号（例えば、１つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令又は制御信号など）を出力してよく、これは相対的により高水準の永続ストアフェンス命令を反映し、表し、及び／又はそこから導出される。いくつかの実施形態において、デコードユニットは、命令を受信するための１つ又は複数の入力構造（例えば、ポート、相互接続、インタフェース）と、それに結合されて命令を認識し且つデコードするための命令認識・デコードロジックと、それに結合されて低水準命令又は制御信号を出力するための１つ又は複数の出力構造（例えば、ポート、相互接続、インタフェース）とを含んでよい。デコードユニットは、限定されないが、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び当技術分野で知られているデコードユニットを実装するのに用いられる他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
【００１８】
いくつかの実施形態において、デコードユニットに直接提供されている永続ストアフェンス命令の代わりに、命令エミュレータ、変換器、モーファ、インタープリタ、又は他の命令変換モジュールが任意に用いられてよい。様々なタイプの命令変換モジュールは当技術分野で知られており、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせで実装されてよい。いくつかの実施形態において、命令変換モジュールはプロセッサの外に、例えば、別のダイ上、及び／又はメモリ内などに（例えば、スタティック、ダイナミック、又はランタイムエミュレーションモジュールとして）位置してよい。例として、命令変換モジュールは、第１の命令セットであり得る永続ストアフェンス命令を受信してよく、永続ストアフェンス命令を、第２の異なる命令セットであり得る１つ又は複数の対応する中間命令又は制御信号にエミュレート、トランスレート、モーフィング、解釈、又は別な方法で変換してよい。第２の命令セットの１つ又は複数の中間命令又は制御信号は、これらをプロセッサのネイティブハードウェア（例えばメモリサブシステムモジュール）によって実行可能な１つ又は複数の低水準命令又は制御信号にデコードし得るデコードユニット（例えば、デコードユニット２２６）に提供されてよい。
【００１９】
再度図２を参照すると、メモリサブシステムモジュール２１４はデコードユニット２２６に結合されている。メモリサブシステムモジュールは、永続ストアフェンス命令を表す及び／又はそこから導出される１つ又は複数のデコードされた又は別な方法で変換された命令又は制御信号を受信してよい。複数の実施形態において、永続ストアフェンス命令は永続ストア命令及び永続ストアフェンス命令であり、メモリサブシステムモジュールはまた、命令２１０によって指定された又は示されたソースオペランドに関するデータ、又は命令２１０によって指定された又は示された、データが格納される永続ストレージ２２４のアドレス又は位置のインジケーションを受信してよい。メモリサブシステムモジュールは、永続ストアフェンス命令に応答して及び／又はその結果として（例えば、命令からデコードされた１つ又は複数の命令又は制御信号に応答して）動作し、全ての後の又は後続のストアオペレーション及び／又は命令のデータ（すなわち、元のプログラム順序において所定のストアオペレーションの後に発生するもの）が、永続ストレージに永続的に及び／又は耐久的に格納される前に、永続ストアフェンス命令に対応する所定のストアオペレーション（例えば、ストアオペレーション２２８又はストア命令２０８Ｅ）のデータは、永続的に及び／又は耐久的に永続ストレージ２２４に格納されることを生じさせる及び／又は保証する。いくつかの実施形態において、永続ストアフェンス命令は、全ての後の又は後続のストアオペレーション及び／又は命令のデータの前に、全ての先行するストアオペレーション及び／又は命令のデータが永続的に及び／又は耐久的に永続ストレージに格納されることを生じさせない及び／又は保証しなくてよいが、むしろこうしたフェンスは所定のストアオペレーションだけのために選択的に実行されてよい。すなわち、全ての先行するストア命令及び／又はオペレーションをフェンスする必要はなく、むしろ、所定のストア命令及び／又はオペレーションだけをフェンスする。このことは、全ての先行するストア命令及び／又はオペレーションをフェンスするためのより高性能なコストを回避するのに役立ち得る。いくつかの実施形態において、これらの他のフェンスされないストア命令及び／又はオペレーションのデータは、プロセッサキャッシュに格納されてよいが、それに対して所定のフェンスされたストア命令及び／又はオペレーションのデータは非一時的であってよく、キャッシュをバイパスして別の永続ストアフェンスバッファ（例えば、バッファ４４６）に格納されてよい。
【００２０】
いくつかの実施形態において、永続ストアフェンス命令は、所定のストアオペレーション（例えば、ストアオペレーション２２８）を有する永続ストア命令及び永続ストアフェンス命令である。このような実施形態では、いくつかの場合において、永続ストア及び永続ストアフェンス命令は非一時的命令であってよく、その実行によって、データはプロセッサの１つ又は複数のキャッシュ（不図示）をバイパスして、そこに格納されることなく永続メモリ２２４に格納させられるよう動作する。他の複数の実施形態において、所定のストアオペレーションは、永続ストアフェンス命令（例えば、ストア命令２０８Ｅ）の（例えばすぐ）前又は後の、別個であるが関連した命令に対応してよい。いくつかの実施形態において、永続ストアフェンス命令は、所定のストアオペレーションの対応するデータが新たな専用の永続ストアフェンスバッファ（例えば、図４のバッファ４４６）に格納されるようにさせる。いくつかの実施形態において、バッファは任意に書き込みのみであってよく、及び／又はプロセッサの１つ又は複数のキャッシュによって用いられるキャッシュコヒーレンシプロトコルを実装しなくてよい（例えば、プロセッサによって実装されるＭＥＳＩプロトコルを用いなくてよい）。いくつかの実施形態において、更に以下に説明されるように、永続ストアフェンスバッファは、異なる永続ストアフェンス命令に対応するデータが同じキャッシュラインに格納される又は結合されることを可能にするためのライトコンバインを実装してよい。いくつかの実施形態において、更に以下に説明されるように、永続ストアフェンス命令は、ログ先行書き込みの性能を改善するために、データをログ先行書き込みに格納するのに用いられてよい。
【００２１】
メモリサブシステムモジュール及び／又はプロセッサは、固有の又は特定のロジック（例えば、トランジスタ、集積回路、あるいはファームウェア（例えば、不揮発性メモリに格納された命令）及び／又はソフトウェアと可能性として組み合わされる他のハードウェア）を含んでよく、このロジックは、永続ストアフェンス命令を実行する、及び／又は永続ストアフェンス命令に応答して及び／又はその結果として（例えば、永続ストアフェンス命令からデコードされた１つ又は複数の命令又は制御信号に応答して）結果を格納するよう動作可能である。１つの態様において、メモリサブシステムモジュールはまた、概して、デコードされた永続ストアフェンス命令を実行するための実行ユニット、及び／又はデコードされた永続ストアフェンス命令を実行するためのユニットとみなされてよい。いくつかの実施形態において、メモリサブシステムモジュールは、図４〜図５のうち１つ又は複数のために示され説明された回路又はロジックを含んでよく、これらの図は適切な実装についての例示的な例であるが、本発明の範囲はそのように限定されるものではない。
【００２２】
有利なことに、永続ストアフェンスオペレーションは、所定のストアオペレーションのデータが、全ての後続のストアオペレーションのデータの前に永続ストレージに格納されることを生じさせる、保証する、又は確約するのに用いられてよい。データが永続ストレージにあると、データは永続的及び／又は耐久的である。このことが、特定の実装に特定の利点を提供し得る。例えば、このことが以下に更に論じられるように、ログ先行書き込みを実行する際の効率性を高めるのに役立ち得るが、本発明の範囲はそのように限定されるものではない。他の複数の例において、このことが、様々な他のタイプのアルゴリズムのために及び／又は他の理由のために、複数の永続ストアをシリアル化するのに用いられ得る。
【００２３】
背景技術のセクションで論じられたＳＦＥＮＣＥ命令と比較すると、ＳＦＥＮＣＥ命令は永続ストレージへの複数のストアをシリアル化しない、及び／又は、永続性又は耐久性をシリアル化しない。むしろ、ＳＦＥＮＣＥ命令は、メインメモリ（例えば、ＤＲＡＭ又は他の揮発性メモリ）に対して複数のストアの全体的な可視性をフェンスする又はシリアル化するのに用いられてよいが、そのようなデータは特定の状態（例えば、電源障害、オペレーティングシステムの故障、プロセッサの故障、システムクラッシュなど）の場合に失われ得る。結果として、このような命令は、データストレージオペレーションの永続性又は耐久性をシリアル化することができない。さらに、ＳＦＥＮＣＥ命令は、全ての先行するストア命令を全ての後続のストア命令に対してフェンス又はシリアル化するが、それに対していくつかの実施形態においては、永続ストアフェンス命令は全ての後続のストア命令及び／又はオペレーションに対して、１つの所定の対応するストア命令及び／又はオペレーションだけをシリアル化し得る。
【００２４】
本明細書を不明瞭にすることを回避するために、比較的簡単なプロセッサ２０２が示され説明されている。しかし、プロセッサは任意に他のよく知られたプロセッサコンポーネントを含んでよい。そのようなコンポーネントの可能な例には、限定されないが、汎用レジスタ、ステータスレジスタ（フラグレジスタと呼ばれることもある）、システム制御レジスタ、命令フェッチユニット、プリフェッチバッファ、命令トランスレーションルックアサイドバッファ（ＴＬＢ）、データＴＬＢ、分岐予測ユニット、浮動小数点実行ユニット、ＳＩＭＤ又はベクトル実行ユニット、アウトオブオーダ実行サポートユニット（例えば、命令スケジューリングユニット、レジスタリネーム及び／又は割り当てユニット、命令ディスパッチユニット、リオーダバッファ（ＲＯＢ）、予約ステーション、メモリオーダバッファ、リタイアメントユニットなど）、バスインタフェースユニット、アドレス生成ユニット、デバッグユニット、性能モニタユニット、電力管理ユニット、プロセッサに含まれる他のコンポーネント、及びこれらの様々な組み合わせが含まれる。そのようなコンポーネントは一緒に、当技術分野において知られる様々な異なる適切な組み合わせ及び／又は構成に結合されてよい。複数の実施形態は、任意の知られたそのような組み合わせ又は構成に限定されない。さらに、複数の実施形態は複数のコアを有するプロセッサに含まれてよく、複数のコアのうち少なくとも１つは永続ストアフェンス命令を実行するよう動作する。
【００２５】
図３は、永続ストアフェンス命令の一実施形態を実行する方法３４０の一実施形態のブロックフロー図である。様々な実施形態において、本方法はプロセッサ、命令処理装置、又は他のデジタルロジックデバイスによって実行されてよい。いくつかの実施形態において、本方法３４０は、図１のプロセッサ１０２及び／又は図２のプロセッサ２０２によって、及び／又はその中で実行されてよい。プロセッサ１０２、２０２のために本明細書で説明される複数のコンポーネント、特徴、及び特定の任意的な詳細はまた、本方法３４０に任意に適用される。あるいは、本方法３４０は、類似又は異なるプロセッサあるいは装置によって、及び／又はその中で実行されてよい。さらに、プロセッサ１０２、２０２は、本方法３４０と同じ方法、類似する方法、又は異なる方法を実行してよい。
【００２６】
本方法は、ブロック３４１で永続ストアフェンス命令を受信する段階を含む。様々な態様において、命令はプロセッサ又はその一部（例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニットなど）で受信されてよい。様々な態様において、命令は、オフプロセッサ及び／又はオフダイソースから（例えば、メモリ、相互接続などから）、あるいはオンプロセッサ及び／又はオンダイソースから（例えば、命令キャッシュ、命令キューなどから）受信されてよい。
【００２７】
本方法は、ブロック３４２において、永続ストアフェンス命令に対応する又は関連する所定のデータは、全ての後続のストア命令のデータ（すなわち、元のプログラム順序において永続ストア命令の後にある）が永続ストレージに永続的に格納される前に、永続ストレージに永続的に格納されることを確約する、保証する、そうなるよう強制する、又は別な方法でそうさせる段階を含む。いくつかの実施形態において、本方法はまた、永続ストア命令に応答して所定のデータを格納する段階を含んでよい（例えば、永続ストア及び永続ストアフェンス命令の場合）が、これは必要ではない。いくつかの実施形態において、命令は、非一時的にプロセッサキャッシュをバイパスして所定のデータを永続ストアフェンスバッファ（例えば、バッファ４４６）に格納させてよいが、本発明の範囲はそのように限定されるものではない。
【００２８】
図４は、メモリサブシステムモジュール４１４の例示的な一実施形態のブロック図であり、永続ストアフェンスバッファ４４６の例示的な一実施形態を図示している。永続ストレージ４２４がメモリサブシステムモジュールに結合されている。永続ストレージは、前述されたものに類似であってよく、又はそれと同じであってもよい。
【００２９】
１つ又は複数のデコードされた永続ストアフェンス命令及び／又はオペレーション４１１のセットが、メモリサブシステムモジュール４１４に提供されてよい。この例では簡略化のために、デコードされた永続ストアフェンス命令は永続ストアオペレーション（例えば、ストアオペレーション２２８）を組み込んでいることが仮定されるが、本発明の範囲はそのように限定されるものではない。メモリサブシステムモジュールは、永続ストアフェンスバッファ４４６と、対応する永続ストアフェンスバッファ管理ユニット４４４とを含む。バッファ管理ユニットは、永続ストアフェンスバッファを管理するよう、例えば、バッファへのデータのストレージ、及びバッファからのデータのフラッシュ又は他の移動を管理するよう動作する。管理ユニットは、ハードウェア（例えば、集積回路、トランジスタ、又は他の回路要素など）、ファームウェア（例えば、ＲＯＭ、ＥＰＲＯＭ、フラッシュメモリ、あるいは他の永続メモリ又は不揮発性メモリ、及びそこに格納されたマイクロコード、マイクロ命令、又は他の低水準命令）、ソフトウェア（例えば、メモリに格納されたより高水準の命令）、又はこれらの組み合わせ（例えば、ファームウェア及び／又はソフトウェアのうち１つ又は複数と可能性として結合されるハードウェア）で実装されてよい。
【００３０】
永続ストアフェンスバッファ４４６は、永続ストアフェンス命令に関連したデータ（例えば、ストアオペレーション２２８又はストア命令２０８Ｅのデータ）を一時的にバッファ又は格納するよう動作する。本発明の範囲は、永続ストアフェンスバッファ用のいかなる特定のタイプのメモリにも限定されない。例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、プロセッサキャッシュを実装するのに用いられるメモリのタイプなど、様々なタイプの揮発性メモリが適切である。ダイ上にプロセッサとともに製造され得る実質的にいかなるタイプのメモリ又はデータストレージデバイスも、可能性として適切である。いくつかの実施形態において、永続ストアフェンスバッファは、任意にプロセッサキャッシュと同様に編成されてよく、複数のキャッシュライン４４８を有してよい。示されるように、永続ストアフェンスバッファはキャッシュライン０（４４８−０）、キャッシュラインL（４４８−L）、キャッシュラインN（４４８−N）まで有してよく、Nは特定の実装例に適した任意の所望の数を表してよい。いくつかの実施形態において、およそ約４つから約数百個のキャッシュライン、又は約８つから約１２８個のキャッシュラインがあり得るが、本発明の範囲はそのように限定されるものではない。
【００３１】
いくつかの実施形態において、プロセッサキャッシュと対照的に、永続ストアフェンスバッファは任意に書き込みのみであってよいが、通常は可読ではない。例えば、プロセッサ（例えば、コア）は、永続ストアフェンスバッファからデータをロード又は読み出すメモリ命令からの通常のユーザレベルのロードを通常は実行できなくてよい。特定の限定された状況の下で、プロセッサは、永続ストアフェンスバッファの内容を、例えば、デバッグ又はテストの間に（例えば、ビルトインセルフテスト（ＢＩＳＴ）の間に）読み出すことができてよいことが理解されるべきである。いくつかの実施形態において、永続ストアフェンスを実装するのに用いられ得るキャッシュ４１８においてキャッシュコヒーレンシを維持することに関連したこれらのオペレーション以外に、キャッシュコヒーレンシが永続ストアフェンスバッファにおいて維持されなくてよい。例えば、キャッシュはＭＥＳＩプロトコルを実装してよい（例えば、キャッシュの複数のキャッシュラインはそれぞれ、２つのＭＥＳＩビットを持ち得る）が、永続ストアフェンスバッファは実装しなくてよい（例えば、バッファの複数のキャッシュラインは２つのＭＥＳＩビットを持たなくてよい）。
【００３２】
キャッシュコヒーレンシモジュール４１６は、永続ストアフェンスバッファ管理ユニット４４４に結合されている。いくつかの実施形態において、キャッシュコヒーレンシモジュールが、プロセッサの１つ又は複数のキャッシュ４１８からキャッシュラインを追い出す、フラッシュする、又は別な方法で移すことを決定した場合、キャッシュコヒーレンシモジュールは、キャッシュからキャッシュラインを実際にフラッシュする又は移す前に、あるインジケーション、通知、又は他の信号４５０（例えば、キャッシュラインのフラッシュを意図する信号）を永続ストアフェンスバッファ管理ユニットに提供してよい。信号４５０は、キャッシュラインがキャッシュからフラッシュされようとしている、又は別な方法で移されようとしていることを管理ユニットに示す、通知する、通信する、又はそうでなければ信号で伝えてよく、キャッシュからのキャッシュラインがフラッシュされて永続的になる前に、管理ユニットが１つ又は複数のキャッシュラインをバッファから永続メモリにフラッシュする、又は別な方法で移す又は格納することを可能にするのに役立ち得る。いくつかの実施形態において、永続ストアフェンスを維持するために、永続ストアフェンスバッファ管理ユニットはバッファフラッシュ、追い出し、又は他の移動オペレーション４５２を実行して、キャッシュライン（例えば、キャッシュラインL（４４８−L））を永続ストアフェンスバッファから永続ストレージにフラッシュする、追い出す、又は別な方法で移す、又は格納してよい。いくつかの実施形態において、信号４５０に関連したキャッシュフラッシュ又は他のキャッシュライン移動オペレーション４５４が実行されて、キャッシュ４１８から永続ストレージにキャッシュラインをフラッシュする前に、プロセッサ及び／又はメモリサブシステムモジュールは、関連した永続ストアフェンス命令に応答して、これが発生することを確約する、及び／又は保証する、及び／又はこれを発生させてよい。キャッシュラインが追い出される又はフラッシュされるというキャッシュコヒーレンシモジュールからの信号に基づき、バッファはバックグラウンドでトランスペアレントに永続メモリにフラッシュしてよい。いくつかの実施形態において、任意のキャッシュラインがキャッシュから永続ストレージにフラッシュされる場合、永続ストアフェンスバッファ全体は、任意に永続ストレージにフラッシュされてよい。このことは、相対的により簡単な実装を提供するのに役立ち得る。他の複数の実施形態において、追加情報が任意に永続ストアフェンスバッファに格納され、キャッシュからフラッシュされる個々の対応するキャッシュラインに基づき、バッファの個々のキャッシュラインが永続ストレージに選択的にフラッシュされることを可能にしてよい。
【００３３】
いくつかの実施形態において、キャッシュラインがキャッシュから永続ストレージにフラッシュされる又は移される直前まで、及び／又は後続のストアオペレーションが永続ストレージに永続的に格納される直前まで、永続ストアフェンスバッファのデータはフラッシュされる必要がなくてよく、又は永続ストレージに移される必要がなくてもよい。概して、必要な場合を除いてバッファをフラッシュするのを回避することは、比較的長いレイテンシのメモリアクセスを回避するのに役立つ。有利なことに、永続ストアフェンスバッファは、永続ストアフェンス命令に対応するデータが永続ストレージに格納されて永続的になるのを待つ必要がないようにするのに役立ち得る。そのようなデータが永続ストレージに直接格納された場合、一般にはるかに長いレイテンシのオペレーションが概して必要とされるであろう（例えば、データを永続メモリに格納するのに、およそ数十から数百のクロックサイクルがかかることが多い）。いくつかの実施形態において、データはせいぜい数クロックサイクル（例えば、多くても約５クロックサイクル）で永続ストアフェンスバッファに格納され得る。
【００３４】
いくつかの実施形態において、任意に、別の複数の永続ストアフェンス命令の間に永続的な順序要件がなくてよい。いくつかの実施形態において、このことは任意に、複数の異なる永続ストアフェンス命令に対応するデータが永続ストアフェンスバッファの同じキャッシュラインに格納されることを可能にすることで、さらにより効率的な永続ストアフェンス命令の実行を可能にするのに役立ち得る。
【００３５】
図５は、異なる永続ストアフェンス命令５１１−１、５１１−２に対応するデータ５６０−１、５６０−２を有する永続ストアフェンスバッファ用のキャッシュライン５４８の例示的な一実施形態と、１つ又は複数の相互接続５２０の同じ信号又はサイクルにおける永続メモリ５２４へのキャッシュラインのキャッシュラインストレージオペレーション５５２の例示的な一実施形態とのブロック図である。第１の永続ストアフェンス命令５１１−１は、キャッシュラインに格納され得る第１の関連データ又は対応するデータ５６０−１を有してよい。同様に、第２の永続ストアフェンス命令５１１−２は、データ５６０−１と同じキャッシュラインにデータ５６０−１と同時に格納され得る第２の関連データ又は対応するデータ５６０−２を有してよい。いくつかの実施形態において、これは、ライトコンバインオペレーションを通じて永続ストアフェンスバッファで実行されてよい。すなわち、永続ストアフェンスバッファはライトコンバインバッファを表し得る。
【００３６】
後で適切な時に（例えば、キャッシュコヒーレンシモジュールから受信したキャッシュラインのフラッシュを意図する信号に基づいて）、キャッシュライン５４８は、キャッシュラインストレージオペレーション５５２を通じて永続ストレージ５２４にフラッシュされ、追い出され、あるいは別な方法で移され、又は格納されてよい。キャッシュラインストレージオペレーションは、異なる永続ストアフェンス命令５１１−１、５１１−２に対応する第１のデータ５６０−１及び第２のデータ５６０−２を有するキャッシュラインを格納してよい。いくつかの実施形態において、キャッシュラインストレージオペレーションは、１つ又は複数の相互接続５２０の１つ又は複数のサイクル又は信号の単一及び／又は共通セットで実行されてよい（例えば、データ５６０−１及び５６０−２の両方は、１つ又は複数のバスサイクルの同じセットで進んでよい）。すなわち、複数の異なる永続ストアフェンス命令に対応するデータは、同じバス又は相互接続サイクルで永続メモリに書き込まれてよく、又はそうでなければ格納されてよい。簡略化のために、２つの異なる永続ストアフェンス命令からのデータがこの例で説明されるが、いくつかの場合において、３つ又はそれより多くの異なる永続ストアフェンス命令からのデータが、可能性として同じキャッシュラインで結合されてよい。有利なことに、異なる永続ストアフェンス命令に対応するデータを同じキャッシュラインで結合し、永続メモリへの単一キャッシュライン書き込みを実行するそのような能力は、永続メモリへの１つ又は複数の比較的長いレイテンシストアを回避する又は排除するのに役立ち得る。さらに、これはまた、永続メモリにつながる１つ又は複数の相互接続の帯域幅の量を削減するのに役立ち得る。
【００３７】
プロセッサ及び／又はメモリサブシステムユニットは、永続ストアフェンスバッファへのデータのインオーダストアを実行してよく、その後にデータが永続ストアフェンスバッファからフラッシュされた場合又は移された場合、同じキャッシュラインの全てのデータは永続ストレージに原子的に書き込まれてよい。インオーダは、対応する永続ストアフェンス命令の元のプログラム順序と同じ順序で、データが永続ストアフェンスバッファに格納され得ることを意味する。いくつかの実施形態において、基本的な永続メモリシステムにおけるメモリ並列処理を十分に活用するために、異なる複数のキャッシュラインは永続ストアフェンスバッファからアウトオブオーダでフラッシュされてよく、又は移されてよい。アウトオブオーダは、対応する永続ストアフェンス命令の元のプログラム順序と異なる順序で、データが永続ストアフェンスバッファからフラッシュされ得る又は移され得ることを意味する。
【００３８】
いくつかの実施形態において、本明細書に開示される命令及びプロセッサは、ログ先行書き込みの効率性を改善するのに用いられてよい。ログ先行書き込みは、データを変更する場合に、原子性及び耐久性／永続性を実現するための周知の技術である。図６は、データ６６４及びログ先行書き込み６６２を有する永続メモリ６２４の一実施形態のブロック図である。永続メモリは、前述されたタイプの永続メモリのいずれを表してもよい。データは、コンピュータシステム、データベースなどで用いられる様々な異なるタイプのデータを表してよい。適切なデータの例には、限定されないが、ファイル、レコード、データ構造、テーブル、データベースレコード、画像、動画などが含まれる。ログ先行書き込みは、概してデータと異なる永続メモリの領域に位置している。図において、ログ先行書き込みが任意に別の永続ストレージデバイス（例えば、データと異なるディスク）に位置してよい又は格納されてよいことを示すのに破線が用いられている。これは、（例えば、ディスクが故障した場合に）データの耐久性／永続性を保証するのに更に役立ち得るが、必要ではない。
【００３９】
ログ先行書き込みでは、データへの変更が永続メモリのデータの上に実際に格納される前に、データ及び／又はデータへの変更はログ先行書き込みに書き込まれてよい。例えば、所定のデータ６７０が変更又は修正される前に、所定のデータの未変更のコピー６６８がログ先行書き込み６６２に格納されてよい。このように、所定のデータがプロセッサ内で変更されている間に、所定のデータを非永続（例えば、揮発性）メモリ（例えば、プロセッサキャッシュ）から失わさせ得る電力損失又は他のイベントが発生しても、そのイベントが発生した後に所定のデータのコピーがログ先行書き込みからリカバリされ得る。有利なことに、これは、電源障害又は様々な他の可能性のある破滅的なエラーに直面しても、変更している間に所定のデータが失われることを防止するのに役立ち得る。プログラムがデータのセットを変更するオペレーションを実行している最中に、コンピュータシステムが電力損失又は破滅的なエラーに遭遇した場合を更に説明する。プログラムは再始動及び再起動すると、一般に、オペレーションが完全に完了したのか、部分的に完了したのか、又は全く失敗したのかを知る必要がある。ログ先行書き込みが用いられた場合、プログラムはログ先行書き込みを調査し、エラー発生前にオペレーションのどの部分が実際に完了したのかを判断し得る。プログラムはこの情報を用いて、オペレーションをどのように進めるか、及び／又はどのように継続又は再始動するかを決めてよい。例えば、プログラムは、ログ先行書き込みから決定された第１の未完了変更から開始するオペレーションを再試行してよい。
【００４０】
ログ先行書き込みは、複数の異なるデータが同じトランザクション内で変更されるトランザクションとして実行されることが多い。異なるデータの全てがログに記録され及び変更されることに成功し、且つ変更されたデータが永続メモリに格納された後に初めて、トランザクションは問題なく完了する。一般に、トランザクションが完全に問題なく完了したときに初めて、トランザクションは「コミット」される。トランザクションをコミットするとは基本的に、トランザクション全体が問題なく完了したと宣言すること、及び／又は、試みた変更の全てが問題なく完了して永続メモリに格納されたと示すことである。この時点では、ログ先行書き込みに格納された又は保存されたデータはもはや必要ではない。それは、破滅的なイベントが発生しても、変更済みデータの全ては既に永続メモリに格納されているからである。ログ先行書き込みは、変更又は修正の全体にわたり、所定のセットのデータに永続性及び／又は耐久性を提供する。それは、所定のセットのデータのコピーが、所定のセットのデータに任意の変更が行われる前に永続メモリに格納されているからである。さらに、ログ先行書き込みは原子性を提供する。それは、トランザクション全体をコミットする又はコミットしないことで、トランザクションの間に、所定のセットのデータが完全に更新されるか又は更新されないかのどちらかであるためである。
【００４１】
ログ先行書き込みでは、２つの永続性順序が一般に維持されなければならない。最初に、ログ永続性順序が一般に維持されなければならない。ログ永続性順序に従って、変更される元のデータは、対応する変更済みデータが永続ストレージに格納される前に、永続ストレージのログ先行書き込みに永続的に格納されなければならない。そうでなければ、変更済みデータが永続ストレージにおいて元のデータの上に格納され、変更される元のデータがキャッシュにあって永続ストレージのログ先行書き込みにまだ格納されていない場合に、破滅的なイベント（例えば、電源障害）が発生するならば、変更される元のデータは保存されず、それにより失われる場合があり、トランザクションの完了に失敗した場合のリカバリを妨げる。一般に維持されなければならない２つ目の永続性順序は、コミット永続性順序である。コミット永続性順序に従って、トランザクションの全ての変更済みデータは、コミットインジケーションが永続ストレージのログ先行書き込みに永続的に格納される前に、永続ストレージに永続的に格納されなければならない。そうでなければ、いくつかの変更済みデータがキャッシュに格納されている間に、コミットインジケーションが永続ストレージのログ先行書き込みに永続的に格納される場合、トランザクションが問題なく完了したとログ先行書き込みのコミットインジケーションが示していたとしても、この変更済みデータは破滅的なイベントの間に失われ得る。１つの課題は、適切な予防措置が講じられなければ、１つ又は複数のプロセッサキャッシュのデータをキャッシュすることは、これら２つの永続性順序のうち１つ又は複数に違反し得ることである。キャッシュは概して、揮発性ストレージ又はそうでなければ非永続ストレージで実装され、破滅的なイベントに影響されやすい。
【００４２】
図７は、本明細書に開示される永続ストアフェンス命令を用いずに実行されるログ先行書き込みの１つの可能な方法７７２のブロックフロー図である。ブロック７７３において、永続ストレージの修正される又は変更されるデータは、永続ストレージのログ先行書き込みに格納される。プロセッサに存在する１つ又は複数のキャッシュに起因して、変更されるデータは実際にログ先行書き込みに直接格納されなくてよく、むしろこれら１つ又は複数のキャッシュにキャッシュされてよい。これらのプロセッサキャッシュは非永続ストレージを表し、特定のイベント（例えば、電力損失など）が発生した場合、その内容を失い得る。
【００４３】
ブロック７７４において、変更されるデータは、１つ又は複数のキャッシュから永続ストレージに移される（例えば、フラッシュされる）。例えば、これは、キャッシュラインフラッシュタイプの命令で実行され得る。これは概して、ログ永続性順序を満たすために必要とされる。この手法の１つの欠点は、概して多くの時間がかかること、及び／又は永続メモリに書き込む又は格納するのに必要な時間（例えば、およそ数十から数百のクロックサイクル）に起因して高レイテンシを有することである。
【００４４】
次に、変更されるデータは、ブロック７７５において実際に変更され得る。ブロック７７５でのデータの変更は、変更されるデータがブロック７７４において１つ又は複数のキャッシュから永続ストレージに移された後に行われ、それにより、変更されるデータのコピーが非永続的なプロセッサキャッシュの代わりに永続ストレージに永続的に格納されることが保証されることに留意されたい。これは、前述されたように、データの永続性／耐久性を保証するのに役立つ。
【００４５】
ブロック７７６において、変更されるデータがさらにあるかどうかの判断が行われる。変更されるデータがさらにある場合（すなわち、ブロック７７６での判断が「はい」である）、本方法はブロック７７３〜７７５を再実行し得る。逆に、このトランザクションにこれ以上変更されるデータがない場合（すなわち、ブロック７７６での判断が「いいえ」である）、本方法はブロック７７７に進んでよい。変更されるデータごとに、変更されるデータがブロック７７３においてログ先行書き込みに格納される時間と、データがブロック７７５において実際に変更される時間との間で、変更されるデータはブロック７７５においてキャッシュから永続ストレージにフラッシュされる（すなわち、キャッシュの代わりに永続ストレージのログ先行書き込みに実際に格納される）必要があることに留意されたい。これら全てのフラッシュに伴う欠点は、実行に多くの時間がかかることである。
【００４６】
ブロック７７７において、全ての変更済みデータが、キャッシュから永続ストレージに移される（例えば、フラッシュされる）。これが実行されるのは、ブロック７７５におけるデータの変更が、変更済みデータを永続ストレージに実際に格納するのではなく、むしろキャッシュに格納し得るからである。これは概して、コミット永続性順序を満たすために、コミットインジケーションが永続ストレージのログ先行書き込みに格納される前に行われる必要がある。
【００４７】
次に、ブロック７７８において、コミットインジケーションは、ログ先行書き込みに格納されてよい。前述されたように、コミットインジケーションは、トランザクションが問題なく完了したことを示してよい。ブロック７７９において、コミットインジケーションはキャッシュから永続ストレージに移されてよい（例えば、フラッシュされてよい）。
【００４８】
コミットインジケーションがログ先行書き込みに格納される前に破滅的なイベントが発生した場合、トランザクションの全ての不完全なデータ更新がそれらの元のデータに、ログ先行書き込みにある元のデータを用いてリカバリされ得る。逆に、コミットインジケーションがログ先行書き込みに格納された後に破滅的なイベントが発生した場合、全てのデータ更新が問題なく完了しているので、リカバリの必要はない。
【００４９】
前述されたように、ブロック７７５における各データ更新の前に、変更されるデータをブロック７７４においてキャッシュから移す（例えば、フラッシュする）ことは、過大な時間がかかる傾向がある。いくつかの実施形態において、通常、更新済みデータはキャッシュにとどまるので、変更済みデータがキャッシュから永続ストレージに実際に格納されるまで、変更されるデータをキャッシュから永続ストレージに移す（例えば、フラッシュする）必要はなくてよい。これは、多くの実装において、（例えば、プログラムのデータ位置に起因して）比較的まれである。そのような実装において、著しくより効率的なログ先行書き込みが、ブロック７７４におけるデータのそうような移動（例えば、フラッシュ）を省略することで実現され得る。残念ながら、キャッシュから永続ストレージへの変更済みデータの書き戻しは概して、ハードウェアによって（例えば、キャッシュコヒーレンシモジュールによって）実行されるので、多くの実装ではソフトウェアの制御下にはない。いくつかの適切な実装は、代替的にソフトウェアに制御されたキャッシュコヒーレンシを実行し得ることに留意されたい。
【００５０】
図８は、永続ストアフェンス命令の一実施形態を用いて実行されるログ先行書き込みの方法８８０の例示的な一実施形態のブロックフロー図である。いくつかの実施形態において、永続ストレージの修正される又は変更されるデータは、ブロック８８１において永続ストアフェンス命令の一実施形態を用いて（又はこれと併せて）永続ストレージのログ先行書き込みに格納されてよい。前述されたように、永続ストアフェンス命令自体はデータを格納してよい、又は対応する別個のストア命令がデータを格納してもよい。いくつかの実施形態において、データは最初に及び／又は一時的に永続ストアフェンスバッファ（例えば、バッファ４４６）に格納されてよい。いくつかの実施形態において、永続ストアフェンス命令は非一時的命令であってよく、データはプロセッサキャッシュをバイパスしてよい。これは、データがキャッシュの領域を占有する、及び／又はキャッシュをだめにすることを回避するのに役立ち得る。
【００５１】
変更されるデータは、ブロック８８２において実際に変更され得る。この変更済みデータは、最初に及び／又は一時的にプロセッサキャッシュにキャッシュされてよい。
【００５２】
重要なことには、ブロック８８３において、永続ストアフェンス命令に応答するプロセッサは、変更済みデータがキャッシュから移され（例えば、フラッシュされる、追い出されるなど）、永続ストレージに永続的に格納される前に、変更されるデータが移され（例えば、フラッシュされる、追い出されるなど）、永続ストレージに永続的に格納されることを保証、確約、又は強制し得る。有利なことに、図７のブロック７７４において実行されたように、変更されるデータをキャッシュから永続ストレージにフラッシュする又は別な方法で移すことは必要ない。重要なことには、これは、変更されるデータごとに比較的高いレイテンシのメモリアクセスオペレーション（例えば、数十から数百のクロックサイクル）を回避するのに役立ち得る。永続フェンス命令は、ログ永続性順序が依然として維持されていることを保証し得る。多くの場合、変更済みデータが永続ストレージに永続的に格納される場合を除き、又はその直前まで、変更されるデータは実際には永続ストレージに永続的に格納されなくてよいことは注目に値する。変更済みデータが永続ストレージに格納されない場合、変更されるデータが永続ストレージに格納されることを命令は確約しない。
【００５３】
ブロック８８４において、変更されるデータがさらにあるかどうかの判断が行われる。変更されるデータがさらにある場合（すなわち、ブロック８８４での判断が「はい」である）、本方法はブロック８８１〜８８３を再実行し得る。逆に、このトランザクションにこれ以上変更されるデータがない場合（すなわち、ブロック８８４での判断が「いいえ」である）、本方法はブロック８８５に進んでよい。
【００５４】
ブロック８８５において、全ての変更済みデータが、キャッシュから永続ストレージに移される（例えば、フラッシュされる）。これが実行されるのは、ブロック８８２におけるデータの変更が、変更済みデータを永続ストレージに実際に格納するのではなく、むしろキャッシュに格納し得るからである。次に、ブロック８８６において、コミットインジケーションは、ログ先行書き込みに格納されてよい。ブロック８８７において、コミットインジケーションはキャッシュから永続ストレージに移され得る（例えば、フラッシュされ得る）。
【００５５】
有利なことに、永続ストアフェンス命令を用いることは、変更されるデータごとに比較的高いレイテンシのメモリアクセスオペレーションを回避するのに役立ち得る。いくつかの実施形態において、変更済みデータの全てが、キャッシュに適合する又は格納されることができる場合、コミット時に全ての変更済みデータをキャッシュから永続ストレージにフラッシュする前に、アルゴリズムはデータを永続ストアフェンスバッファから永続ストレージに一旦フラッシュする又は移すだけでよい。更に、いくつかの実施形態において、永続ストアフェンスバッファが、同じキャッシュラインの異なる永続ストアフェンス命令に対応するデータをライトコンバインすることができる場合、これは、何らかの長いレイテンシのデータが永続ストレージに書き込まれないようにするのに更に役立ち得る。
【００５６】
いくつかの実施形態において、ソフトウェアはキャッシュラインユニットにシーケンス番号を搬送するログ先行書き込みを実装し得る。キャッシュラインを永続ストアフェンスバッファからフラッシュする又は移す間にシステムクラッシュがあった場合、正しいシーケンス番号を有する連続したログだけが、データをリカバリするのに用いられてよい。例えば、シーケンス番号１、２、３、及び５は存在し得るが、シーケンス番号４が欠落し得る。リカバリを行う場合、シーケンス番号は、どれがリカバリに必要でどれが必要でないかに関する情報を有する。
【００５７】
上記明細書はログ先行書き込みを強調しているが、本発明の範囲はそのように限定されるものではないことが理解されるべきである。本明細書に説明される永続ストアフェンス命令は汎用命令であり、様々な異なる目的に用いられてよい。さらに、ログ先行書き込みの類似又は関連技術はまた、本明細書に説明される永続ストアフェンス命令から恩恵を受け得る。例えば、データが変更される前にデータのコピーを異なる永続メモリ位置に格納する他の技術、更新の間にデータの原子性及び耐久性を提供する他の技術などが、可能性として利益を得てよい。利益を得てもよい他の技術の例には、限定されないが、ファイルシステム更新におけるシャドウページング、ジャーナリングなどが含まれる。
【００５８】
図９は、永続ストアフェンスバッファの一実施形態に適した位置の様々な例を図示するブロック図である。コンピュータシステムは通常、大量のデータが永続ストレージに向かう途中で通過する複数の異なるタイプのコンポーネントを有する。図示された例において、これらのコンポーネントは、ストアバッファ９９２、１つ又は複数のレベルのキャッシュ又はキャッシュ階層９１８（例えば、Ｌ１キャッシュ９９３及びＬ２キャッシュ９９４を含む）、メモリコントローラ９９６、及び最終的な永続ストレージ９２４を含む。プロセッサパイプラインと永続ストレージとの間のこれらのコンポーネント又は他のコンポーネントあるいはハードウェア構造のいずれにおいても、ストアが可能性としてキャッシュ又はバッファされ得る。
【００５９】
永続ストアフェンスバッファが、これらのコンポーネント又はハードウェア構造の間に様々に位置してよく、及び／又はプロセッサパイプラインと永続ストレージとの間で様々な異なる距離にあってよい。特定の位置に応じて、そのハードウェア構造からフラッシュ又は移されたデータは、永続ストアフェンスバッファからのデータのフラッシュ又は移動を引き起こし得る。一般に、永続ストアフェンスバッファがプロセッサパイプラインに近いほど、プログラム順序において後続の非永続ストアフェンス命令がデータをキャッシュに格納できる前に、データが永続ストアフェンスバッファに格納されるのに必要な永続ストアフェンス命令のレイテンシは低くなる。一方、永続ストアフェンスバッファがプロセッサパイプラインに近いほど、永続ストアフェンスバッファフラッシュオペレーションが頻繁になり（例えば、バッファの前にキャッシュすることが少ないので）、そのような永続ストアフェンスバッファフラッシュオペレーションのレイテンシは高くなる（例えば、永続ストアフェンスバッファから永続ストレージまでの経路がより長いので）。
【００６０】
いくつかの実施形態において、参照記号Ａで示されるように、永続ストアフェンスバッファは、ストアバッファ９９２の出力と永続ストレージ９２４への入力との間の様々な場所に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Bで示されるように、永続ストアフェンスバッファは任意に、プロセッサパイプラインに最も近い第１レベルのキャッシュ（例えば、Ｌ１キャッシュ９９３）の出力と、メモリコントローラ９９６の出力との間の様々な場所に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Ｃで示されるように、永続ストアフェンスバッファは任意に、最終レベルのキャッシュ（例えば、Ｌ２キャッシュ９９４、又は代替的にＬ３キャッシュ）の出力と、メモリコントローラの入力との間に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Dで示されるように、永続ストアフェンスバッファは任意に、２つの異なるレベルのキャッシュの間（例えば、Ｌ１キャッシュとＬ２キャッシュとの間）に位置してよく、又は配置されてよい。１つの態様において、Ｌ１キャッシュは第１のコア９９０−１専用であってよく、それに対してＬ２キャッシュは第１のコア及び第２のコア９９０−２により共有されてよい。いくつかの実施形態において、参照記号Eで示されるように、永続ストアフェンスバッファは任意に、メモリコントローラ内に位置してよく、又は配置されてよい。本発明の範囲は、永続ストアフェンスバッファのいかなる任意の既知の位置にも限定されない。永続ストアフェンスバッファの所望の位置は、本開示の利益を有する当業者による過度の実験なしに決定され、永続ストアフェンス命令のレイテンシ、永続ストアフェンスバッファのフラッシュオーバヘッド、又は他の考慮事項の相対的なトレードオフに基づき特定の実装のニーズを満たし得る。
【００６１】
マルチコアシステムでは、共有のコンポーネント又はハードウェア構造、あるいはコアごとの個人用／専用のコンポーネント又はハードウェア構造の永続ストアフェンスバッファに、別の設計選択が配置される。個人用／専用のハードウェア構造はプロセスパイプラインに近く、共有のハードウェア構造は永続ストレージに近い。永続ストアフェンスバッファを共有のハードウェア構造に配置することは、異なるソフトウェアスレッドからのデータ更新変更に起因して、さらに多くの永続ストアフェンスバッファフラッシュを発生させる傾向があり得る。一方、永続ストアフェンスバッファを個人用のハードウェア構造に配置することは、ソフトウェアスレッドのオペレーティングシステムコンテキストスイッチにおける永続ストアフェンスバッファを別のコアにフラッシュすることを含む傾向があり得る。これは、オペレーティングシステムコンテキストスイッチにつながり得る全てのハードウェア割り込み及び／又は例外に基づいて永続ストアフェンスバッファをフラッシュするハードウェアを含んでよい。いくつかの実施形態において、永続ストアフェンスバッファは任意に、キャッシュラインアドレスのハッシュに基づき、複数のスライスに区切られてよい。これにより、キャッシュデータを任意のキャッシュスライスに追い出す場合、永続ストアフェンスバッファは全てのキャッシュスライスにフラッシュされることが可能になり得る。
【００６２】
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
プロセッサコアは異なる態様で、異なる目的のために、異なるプロセッサで実装されてよい。例えば、そのようなコアの実装は、１）汎用計算向けの汎用インオーダコア、２）汎用計算向けの高性能汎用アウトオブオーダコア、３）主にグラフィックス及び／又は科学（スループット）計算向けの専用コアを含んでよい。複数の異なるプロセッサの実装は、１）１つ又は複数の汎用計算向け汎用インオーダコア、及び／又は、１つ又は複数の汎用計算向け汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主にグラフィックス及び／又は科学（スループット）向けの１つ又は複数の専用コアを含むコプロセッサを含んでよい。そのような複数の異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、それは、１）ＣＰＵと別のチップにあるコプロセッサ、２）ＣＰＵと同じパッケージ内の別のダイにあるコプロセッサ、３）ＣＰＵと同じダイにあるコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィクス及び／又は科学（スループット）ロジックなどの専用ロジック、又は専用コアと呼ばれることがある）、及び４）説明されたＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述されたコプロセッサ、及び追加機能を同じダイに含み得るシステムオンチップを含んでよい。例示的なコアアーキテクチャが次に説明され、その後に例示的プロセッサ及びコンピュータアーキテクチャの説明が続く。
【００６３】
［例示的なコアアーキテクチャ］
［インオーダコア及びアウトオブオーダコアのブロック図］
図１０Ａは、本発明の複数の実施形態に従って、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインとの両方を図示するブロック図である。図１０Ｂは、本発明の複数の実施形態に従って、インオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアとの両方を図示するブロック図である。図１０Ａ及び図１０Ｂの実線で示されたボックスは、インオーダパイプライン及びインオーダコアを図示する。一方、破線で示されたボックスの任意の追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【００６４】
図１０Ａにおいて、プロセッサパイプライン１０００は、フェッチステージ１００２、レングスデコードステージ１００４、デコードステージ１００６、割り当てステージ１００８、リネーミングステージ１０１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ１０１２、レジスタ読み出し／メモリ読み出しステージ１０１４、実行ステージ１０１６、ライトバック／メモリ書き込みステージ１０１８、例外処理ステージ１０２２、及びコミットステージ１０２４を含む。
【００６５】
図１０Ｂは、実行エンジンユニット１０５０に結合されたフロントエンドユニット１０３０を含むプロセッサコア１０９０を示し、両方ともメモリユニット１０７０に結合されている。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア１０９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの専用コアであってよい。
【００６６】
フロントエンドユニット１０３０は、命令キャッシュユニット１０３４に結合された分岐予測ユニット１０３２を含み、命令キャッシュユニット１０３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１０３６に結合され、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１０３６は命令フェッチユニット１０３８に結合され、命令フェッチユニット１０３８はデコードユニット１０４０に結合されている。デコードユニット１０４０（又はデコーダ）は、複数の命令をデコードし、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令からデコードされ、又はそうでなければ元の命令を反映し、又は元の命令から導出される。デコードユニット１０４０は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）などが含まれる。１つの実施形態において、コア１０９０は、マイクロコードＲＯＭ、又は特定のマクロ命令用のマイクロコードを格納する他の媒体を（例えば、デコードユニット１０４０に、又はそうでなければフロントエンドユニット１０３０の中に）含む。デコードユニット１０４０は、実行エンジンユニット１０５０のリネーム／アロケータユニット１０５２に結合されている。
【００６７】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４と、１つ又は複数のスケジューラユニット１０５６のセットとに結合されたリネーム／アロケータユニット１０５２を含む。スケジューラユニット１０５６は、任意の数の異なるスケジューラを表し、予約ステーション、中央命令ウィンドウなどを含む。スケジューラユニット１０５６は物理レジスタファイルユニット１０５８に結合されている。それぞれの物理レジスタファイルユニット１０５８は、１つ又は複数の物理レジスタファイルを表し、それらのうちの異なるものが、１つ又は複数の異なるデータタイプ、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）などを格納する。１つの実施形態において、物理レジスタファイルユニット１０５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット１０５８は、リタイアメントユニット１０５４によりオーバーラップされて様々な態様を示し、そこにレジスタリネーミング及びアウトオブオーダ実行が実装され得る（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリーバッファ、リタイアメントレジスタファイルを用いて、レジスタマップ、レジスタのプールを用いてなど）。リタイアメントユニット１０５４及び物理レジスタファイルユニット１０５８は、実行クラスタ１０６０に結合されている。実行クラスタ１０６０は、１つ又は複数の実行ユニット１０６２のセットと、１つ又は複数のメモリアクセスユニット１０６４のセットとを含む。実行ユニット１０６２は、様々な演算（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に実行し得る。いくつかの実施形態は、特定の複数の関数又は複数の関数の複数のセットに専用の複数の実行ユニットを含んでよいが、他の複数の実施形態は、１つの実行ユニットだけ又は複数の実行ユニットを含んでよく、これらはどれも全ての関数を実行する。スケジューラユニット１０５６、物理レジスタファイルユニット１０５８．及び実行クラスタ１０６０は、場合により複数として示される。これは、特定の複数の実施形態が、特定のタイプのデータ／オペレーションのための別個のパイプラインを作成するからである（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又は、メモリアクセスパイプラインであり、それぞれが独自のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有する。また、別個のメモリアクセスパイプラインの場合、特定の複数の実施形態が実装され、そこにおいて、このパイプラインの実行クラスタだけがメモリアクセスユニット１０６４を有する）。別個の複数のパイプラインが用いられる場合、これらのパイプラインのうち１つ又は複数はアウトオブオーダ発行／実行であり、残りのものがインオーダであってよいこともまた理解されなければならない。
【００６８】
複数のメモリアクセスユニット１０６４のセットがメモリユニット１０７０に結合され、メモリユニット１０７０は、レベル２（Ｌ２）キャッシュユニット１０７６に結合されたデータキャッシュユニット１０７４に結合されたデータＴＬＢユニット１０７２を含む。１つの例示的な実施形態において、メモリアクセスユニット１０６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらはそれぞれ、メモリユニット１０７０のデータＴＬＢユニット１０７２に結合されている。命令キャッシュユニット１０３４は、メモリユニット１０７０のレベル２（Ｌ２）キャッシュユニット１０７６に更に結合されている。Ｌ２キャッシュユニット１０７６は、１つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【００６９】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアのアーキテクチャは、以下のようにパイプライン１０００を実装し得る。１）命令フェッチ１０３８は、フェッチステージ１００２及びレングスデコードステージ１００４を実行する。２）デコードユニット１０４０はデコードステージ１００６を実行する。３）リネーム／アロケータユニット１０５２は、割り当てステージ１００８及びリネーミングステージ１０１０を実行する。４）スケジューラユニット１０５６はスケジューリングステージ１０１２を実行する。５）物理レジスタファイルユニット１０５８及びメモリユニット１０７０は、レジスタ読み出し／メモリ読み出しステージ１０１４を実行し、実行クラスタ１０６０は実行ステージ１０１６を実行する。６）メモリユニット１０７０及び物理レジスタファイルユニット１０５８は、ライトバック／メモリ書き込みステージ１０１８を実行する。７）様々なユニットが例外処理ステージ１０２２に関与し得る。８）リタイアメントユニット１０５４及び物理レジスタファイルユニット１０５８は、コミットステージ１０２４を実行する。
【００７０】
コア１０９０は、本明細書に説明される命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されているいくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどの任意的な追加拡張を有する））をサポートし得る。１つの実施形態において、コア１０９０はパックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
【００７１】
コアはマルチスレッディング（オペレーション又はスレッドの２つ又はそれより多くの並列セットを実行）をサポートしてよく、タイムスライスマルチスレッディング、同期マルチスレッディング（単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドごとに論理コアを提供する）、又はこれらの組み合わせ（例えば、タイムスライスフェッチ及びデコード、並びにその後のＩｎｔｅｌ（登録商標）ハイパースレッディング・テクノロジーなどの同期マルチスレッディング）を含む様々な態様でサポートしてよいことが理解されるべきである。
【００７２】
レジスタリネーミングがアウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことが理解されるべきである。プロセッサの例示された実施形態はまた、別個の命令キャッシュユニット１０３４及びデータキャッシュユニット１０７４、並びに共有Ｌ２キャッシュユニット１０７６を含み得るが、複数の代替的な実施形態が命令及びデータの両方用に、例えば、レベル１（L１）内部キャッシュ又は複数のレベルの内部キャッシュなどの単一の内部キャッシュを有してよい。いくつかの実施形態においてシステムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、全てのキャッシュがコア及び／又はプロセッサの外部にあってよい。
【００７３】
［具体的な例示的インオーダコアアーキテクチャ］
図１１Ａ及び図１１Ｂは、具体的な例示的インオーダコアアーキテクチャのブロック図を示し、コアはチップ内のいくつかのロジックブロック（同じタイプ及び／又は別のタイプの他の複数のコアを含む）の１つであってよい。複数のロジックブロックは、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通じて、何らかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックとアプリケーションに応じて通信する。
【００７４】
図１１Ａは、本発明の複数の実施形態によるシングルプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク１１０２への接続に加え、レベル２（Ｌ２）キャッシュ１１０４のローカルサブセットを有する。１つの実施形態において、命令デコーダ１１００はパックドデータ命令セット拡張を用いてｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能とする。１つの実施形態において（設計を単純化するために）、スカラユニット１１０８及びベクトルユニット１１１０は別個のレジスタセット（それぞれ、スカラレジスタ１１１２及びベクトルレジスタ１１１４）を用い、それらの間で転送されるデータがメモリに書き込まれ、レベル１（L１）キャッシュ１１０６から読み戻されるが、本発明の代替的な複数の実施形態は別の手法を用いてよい（例えば、単一のレジスタセットを用いる、又はデータが書き込まれることも読み戻されることもなく２つのレジスタファイルの間で転送されることを可能にする通信経路を含む）。
【００７５】
Ｌ２キャッシュのローカルサブセット１１０４は、複数の別個のローカルサブセットに分割される全体的なＬ２キャッシュの一部であり、プロセッサコアごとに１つである。各プロセッサコアは、独自のＬ２キャッシュのローカルサブセット１１０４に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、そのＬ２キャッシュサブセット１１０４に格納され、他の複数のプロセッサコアが独自のローカルＬ２キャッシュサブセットにアクセスするのと並列に、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のＬ２キャッシュサブセット１１０４に格納され、必要に応じて他の複数のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であり、複数のプロセッサコア、複数のＬ２キャッシュ、及び他の複数のロジックブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、１方向あたり１０１２ビット幅である。
【００７６】
図１１Ｂは、本発明の複数の実施形態による図１１Ａのプロセッサコアの一部の拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０４のＬ１データキャッシュ１１０６Ａ部分、並びにベクトルユニット１１１０及びベクトルレジスタ１１１４に関するより詳細を含む。具体的には、ベクトルユニット１１１０は１６幅のベクトル処理ユニット（ＶＰＵ）（１６幅のＡＬＵ１１２８を参照）であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち１つ又は複数を実行する。ＶＰＵは、スウィズルユニット１１２０を用いるレジスタ入力のスウィズル、数値変換ユニット１１２２Ａ及び１１２２Ｂを用いる数値変換、並びにメモリ入力上の複製ユニット１１２４を用いる複製をサポートする。複数の書き込みマスクレジスタ１１２６は、結果として生じる複数のベクトル書き込みを予測（ｐｒｅｄｉｃａｔｉｎｇ）することを可能にする。
【００７７】
［統合メモリコントローラ及び統合グラフィックスを有するプロセッサ］
図１２は、本発明の複数の実施形態によるプロセッサ１２００のブロック図であり、これは複数のコアを有してよく、統合メモリコントローラを有してよく、統合グラフィクスを有してよい。図１２の実線で示されたボックスは、単一のコア１２０２Ａ、システムエージェント１２１０、１つ又は複数のバスコントローラユニット１２１６のセットを有するプロセッサ１２００を示す。一方、破線で示されたボックスの任意の追加は、複数のコア１２０２Ａ〜１２０２Ｎ、システムエージェントユニット１２１０内の１つ又は複数の統合メモリコントローラユニット１２１４のセット、及び専用ロジック１２０８を有する代替のプロセッサ１２００を示す。
【００７８】
従って、プロセッサ１２００の異なる実装は、１）統合グラフィクス及び／又は科学（スループット）ロジックである専用ロジック１２０８（１つ又は複数のコアを含んでよい）と、１つ又は複数の汎用コアであるコア１２０２Ａ〜１２０２Ｎ（例えば、汎用インオーダコア、汎用アウトオブオーダコア、その２つの組み合わせ）を有するＣＰＵ、２）主にグラフィックス及び／又は科学（スループット）向けの多数の専用コアであるコア１２０２Ａ〜１２０２Ｎを有するコプロセッサ、並びに３）多数の汎用インオーダコアであるコア１２０２Ａ〜１２０２Ｎを有するコプロセッサを含んでよい。従って、プロセッサ１２００は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットの多数統合コア（ＭＩＣ）コプロセッサ（３０個又はそれより多くのコアを含む）、組み込みプロセッサなどであってもよい。プロセッサは１つ又は複数のチップ上に実装されてよい。プロセッサ１２００は１つ又は複数の基板の一部であってよく、及び／又は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳなどの複数のプロセス技術のいずれかを用いて１つ又は複数の基板上に実装されてもよい。
【００７９】
メモリ階層は、複数のコア内の１つ又は複数のレベルのキャッシュと、共有キャッシュユニット１２０６のセットあるいは１つ又は複数の共有キャッシュユニット１２０６と、統合メモリコントローラユニット１２１４のセットに結合された外部メモリ（不図示）とを含む。共有キャッシュユニット１２０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、あるいは他のレベルのキャッシュなどの１つ又は複数の中間レベルのキャッシュ、最終レベルのキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。１つの実施形態において、リングベースの相互接続ユニット１２１２が、統合グラフィクスロジック１２０８、共有キャッシュユニット１２０６のセット、及びシステムエージェントユニット１２１０／統合メモリコントローラユニット１２１４を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するのに任意の数の周知の技術を用いてよい。１つの実施形態において、１つ又は複数のキャッシュユニット１２０６と、コア１２０２Ａ〜１２０２Ｎとの間でコヒーレンシが維持される。
【００８０】
いくつかの実施形態において、コア１２０２Ａ〜１２０２Ｎのうち１つ又は複数は、マルチスレッディングが可能である。システムエージェント１２１０は、コア１２０２Ａ〜１２０２Ｎを調整し操作するこれらのコンポーネントを含む。システムエージェントユニット１２１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１２０２Ａ〜１２０２Ｎ及び統合グラフィクスロジック１２０８の電力状態を調整するのに必要とされるロジック及び複数のコンポーネントであってよく、又はこれらを含んでもよい。ディスプレイユニットは、１つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【００８１】
コア１２０２Ａ〜１２０２Ｎは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア１２０２Ａ〜１２０２Ｎのうち２つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってよい。
【００８２】
［例示的なコンピュータアーキテクチャ］
図１３〜図１６は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の、当技術分野で知られている他のシステム設計及び構成もまた適している。概して、本明細書に開示されるような、プロセッサ及び／又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが一般に適している。
【００８３】
ここで図１３を参照すると、本発明の１つの実施形態に従って、システム１３００のブロック図が示されている。システム１３００は、コントローラハブ１３２０に結合されている１つ又は複数のプロセッサ１３１０、１３１５を含んでよい。１つの実施形態において、コントローラハブ１３２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）１３９０と、入出力ハブ（ＩＯＨ）１３５０（これは別のチップ上にあってよい）とを含み、ＧＭＣＨ１３９０は、メモリ１３４０及びコプロセッサ１３４５が結合されているメモリコントローラ及びグラフィクスコントローラを含み、ＩＯＨ１３５０は、入出力（Ｉ／Ｏ）デバイス１３６０をＧＭＣＨ１３９０に結合する。代替的に、メモリコントローラ及びグラフィクスコントローラのうち一方又は両方は、（本明細書に説明されるように）プロセッサ内に統合され、メモリ１３４０及びコプロセッサ１３４５は、プロセッサ１３１０と、単一チップにＩＯＨ１３５０を有するコントローラハブ１３２０とに直接結合される。
【００８４】
任意的構成として、追加の複数のプロセッサ１３１５が図１３に破線で示されている。各プロセッサ１３１０、１３１５は、本明細書で説明される複数の処理コアのうち１つ又は複数を含んでよく、プロセッサ１２００の何らかのバージョンであってよい。
【００８５】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はその２つの組み合わせであってよい。少なくとも１つの実施形態では、コントローラハブ１３２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈ相互接続（ＱＰＩ）などのポイントツーポイントインタフェース、又は類似の接続１３９５を介してプロセッサ１３１０、１３１５と通信する。
【００８６】
１つの実施形態において、コプロセッサ１３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。１つの実施形態において、コントローラハブ１３２０は統合グラフィクスアクセラレータを含んでよい。
【００８７】
物理リソース１３１０、１３１５の間には、アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱特性、電力消費特性などを含む幅広い価値基準に関して、様々な違いが存在し得る。
【００８８】
１つの実施形態において、プロセッサ１３１０は、一般的タイプのデータ処理オペレーションを制御する複数の命令を実行する。その複数の命令内に複数のコプロセッサ命令が組み込まれてよい。プロセッサ１３１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ１３４５により実行されるべきタイプのものであると認識する。従って、プロセッサ１３１０はこれらのコプロセッサ命令（又はコプロセッサ命令を表す制御信号）をコプロセッサバス又は他の相互接続によってコプロセッサ１３４５に発行する。コプロセッサ１３４５は受信したコプロセッサ命令を承諾し実行する。
【００８９】
ここで図１４を参照すると、本発明の一実施形態に従って、第１のより具体的な例示的システム１４００のブロック図が示されている。図１４に示されるように、マルチプロセッサシステム１４００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１４５０を介して結合された第１のプロセッサ１４７０及び第２のプロセッサ１４８０を含む。プロセッサ１４７０及び１４８０のそれぞれは、何らかのバージョンのプロセッサ１２００であってよい。本発明の１つの実施形態において、プロセッサ１４７０及び１４８０は、それぞれプロセッサ１３１０及び１３１５であり、コプロセッサ１４３８はコプロセッサ１３４５である。別の実施形態において、プロセッサ１４７０及び１４８０は、それぞれプロセッサ１３１０及びコプロセッサ１３４５である。
【００９０】
プロセッサ１４７０及び１４８０は、統合メモリコントローラ（ＩＭＣ）ユニット１４７２及び１４８２をそれぞれ含むことが示されている。プロセッサ１４７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４７６及び１４７８を含み、同様に、第２のプロセッサ１４８０はＰ―Ｐインタフェース１４８６及び１４８８を含む。プロセッサ１４７０、１４８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４５０を介し、Ｐ−Ｐインタフェース回路１４７８、１４８８を用いて情報を交換してよい。図１４に示されるように、ＩＭＣ１４７２及び１４８２はそれぞれのメモリ、すなわちメモリ１４３２及びメモリ１４３４にプロセッサを結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【００９１】
プロセッサ１４７０、１４８０はそれぞれ、個々のＰ―Ｐインタフェース１４５２、１４５４を介し、ポイントツーポイントインタフェース回路１４７６、１４９４、１４８６、１４９８を用いてチップセット１４９０と情報を交換してよい。チップセット１４９０は任意に、高性能インタフェース１４３９を介し、コプロセッサ１４３８と情報を交換してよい。１つの実施形態において、コプロセッサ１４３８は、例えば高スループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサなどの専用プロセッサである。
【００９２】
共有キャッシュ（不図示）が、どちらかのプロセッサに含まれても両方のプロセッサの外部にあってもよいが、Ｐ−Ｐ相互接続を介して両方のプロセッサに接続されている。これにより、プロセッサが低電力モードに置かれている場合に、どちらか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
【００９３】
チップセット１４９０は、インタフェース１４９６を介して第１のバス１４１６に結合されてよい。１つの実施形態において、第１のバス１４１６は、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）バス、あるいはＰＣＩエクスプレスバス又は別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されるものではない。
【００９４】
図１４に示されるように、第１のバス１４１６を第２のバス１４２０に結合するバスブリッジ１４１８と共に、様々なＩ／Ｏデバイス１４１４が第１のバス１４１６に結合されてよい。１つの実施形態において、１つ又は複数の追加のプロセッサ１４１５、例えば、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えばグラフィックスアクセラレータ、デジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサなどが第１のバス１４１６に結合される。１つの実施形態において、第２のバス１４２０は、ローピンカウント（ＬＰＣ）バスであってよい。１つの実施形態において、例えば、キーボード及び／又はマウス１４２２、通信デバイス１４２７、及びストレージユニット１４２８などを含む様々なデバイスが第２のバス１４２０に結合されてよく、ストレージユニット１４２８は、複数の命令／コード及びデータ１４３０を含み得るディスクドライブ又は他の大容量ストレージデバイスなどである。更に、オーディオＩ／Ｏ１４２４が第２のバス１４２０に結合されてよい。他に複数のアーキテクチャが可能であることに留意されたい。例えば、図１４のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバス又は他のそのようなアーキテクチャを実装してよい。
【００９５】
ここで図１５を参照すると、本発明の一実施形態に従って、第２のより具体的な例示的システム１５００のブロック図が示されている。図１４及び図１５の複数の同じ要素は同じ参照番号を有し、図１４の特定の態様が図１５から省略されているのは、図１５の他の態様を不明瞭にするのを回避するためである。
【００９６】
図１５は、プロセッサ１４７０、１４８０は統合メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１４７２及び１４８２をそれぞれ含んでよいことを図示する。従って、ＣＬ１４７２、１４８２は統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１５は、メモリ１４３２、１４３４がＣＬ１４７２、１４８２に結合されるだけでなく、Ｉ／Ｏデバイス１５１４もまた制御ロジック１４７２、１４８２に結合されることを図示する。レガシーＩ／Ｏデバイス１５１５がチップセット１４９０に結合されている。
【００９７】
ここで図１６を参照すると、本発明の一実施形態に従って、ＳｏＣ１６００のブロック図が示されている。図１２の類似の複数の要素は同じ参照番号を有している。また、破線で示されたボックスは、より高度なＳｏＣの任意的機能である。図１６において、１つ又は複数のコア１２０２Ａ〜１２０２Ｎのセット及び共有キャッシュユニット１２０６を含むアプリケーションプロセッサ１６１０と、システムエージェントユニット１２１０と、バスコントローラユニット１２１６と、統合メモリコントローラユニット１２１４と、統合グラフィクスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得るコプロセッサ１６２０のセットあるいは１つ又は複数のコプロセッサ１６２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１６３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１６３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１６４０とに、相互接続ユニット１６０２が結合されている。１つの実施形態において、コプロセッサ１６２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
【００９８】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性メモリ及び不揮発性メモリ及び／又はストレージ要素を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
【００９９】
図１４に図示されるコード１４３０などのプログラムコードが、本明細書に説明される複数の機能を実行して出力情報を生成するための複数の命令を入力するのに適用されてよい。出力情報は、既知の様式で、１つ又は複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１００】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際に、本明細書に説明される複数のメカニズムは、いかなるプログラミング言語にも範囲を限定されない。いずれの場合も、言語はコンパイラ型言語又はインタープリタ型言語であってよい。
【０１０１】
少なくとも１つの実施形態の１つ又は複数の態様が、機械可読媒体に格納された、プロセッサ内の様々なロジックを表す代表的な複数の命令により実行されてよい。これらの命令は、機械により読み出されると、本明細書に説明される複数の技術を実行するロジックを機械に作成させる。「ＩＰコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードするために様々な顧客又は製造施設に供給されてよい。
【０１０２】
そのような機械可読記憶媒体は、限定しないが、機械又はデバイスにより製造された又は形成された非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスク、任意の他のタイプのディスク（フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、及び光磁気ディスクを含む）、半導体デバイス（リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）・スタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）など）、磁気又は光カード、あるいは電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体が含まれる。
【０１０３】
従って、本発明の複数の実施形態はまた、非一時的な有形の機械可読媒体を含み、その非一時的な有形の機械可読媒体は複数の命令を含む、あるいは本明細書に説明される構造、回路、装置、プロセッサ、及び／又はシステム機能を規定するハードウェア記述言語（ＨＤＬ）などの設計データを含む。このような複数の実施形態はまた、プログラム製品と呼ばれ得る。
【０１０４】
［エミュレーション（バイナリ変換、コードモーフィングなどを含む）］
いくつかの場合において、命令変換器が、ソース命令セットからターゲット命令セットに命令を変換するのに用いられてよい。例えば、命令変換器は命令をコアにより処理される１つ又は複数の他の命令にトランスレート（例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を用いる）、モーフィング、エミュレート、又は別な方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器はプロセッサ上に、プロセッサから離れて、又は一部がプロセッサ上に且つ一部がプロセッサから離れて存在してよい。
【０１０５】
図１７は、本発明の複数の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図である。例示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に命令変換器はソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図１７は、高水準言語１７０２のプログラムがｘ８６コンパイラ１７０４を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６がネイティブに実行し得るｘ８６バイナリコード１７０６を生成し得ることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６は、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を実現するために、（１）Ｉｎｔｅｌのｘ８６命令セットコアの命令セットの大部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で起動することに狙いを定めたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを矛盾なく実行する又は別な方法で処理することで、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。ｘ８６コンパイラ１７０４は、追加のリンケージ処理があってもなくても、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６上で実行され得るｘ８６バイナリコード１７０６（例えば、オブジェクトコード）を生成するよう動作可能なコンパイラを表す。同様に、図１７は、高水準言語１７０２のプログラムが、代替の命令セットコンパイラ１７０８を用いてコンパイルされ、少なくとも１つのｘ８６命令セットコアを持たないプロセッサ１７１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、及び／又は、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）がネイティブに実行し得る代替の命令セットのバイナリコード１７１０を生成し得ることを示す。命令変換器１７１２は、ｘ８６命令セットコアを持たないプロセッサ１７１４がネイティブに実行し得るコードに、ｘ８６バイナリコード１７０６を変換するのに用いられる。この変換済みコードは、代替の命令セットのバイナリコード１７１０と同じではない可能性がある。なぜなら、このことが可能な命令変換器は作るのが難しいからである。しかし、変換済みコードは一般的なオペレーションを実現し、代替の命令セットの命令で構成される。従って、命令変換器１７１２は、エミュレーション、シミュレーション、又は任意の他プロセスによって、ｘ８６命令セットのプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスが、ｘ８６バイナリコード１７０６を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【０１０６】
図１、図４〜図６、及び図９のいずれかに説明された複数のコンポーネント、特徴、及び詳細はまた、任意に図２〜図３のいずれかに適用してよい。さらに、複数の装置のいずれかに説明された複数のコンポーネント、特徴、及び詳細はまた、任意に複数の方法のいずれかに適用してよく、このことは、複数の実施形態においてそのような装置により実行されてよく、及び／又は、そのような装置とともに実行されてよい。本明細書に説明された複数のプロセッサのいずれも、本明細書に開示される複数のコンピュータシステムのいずれかに含まれてよい。
【０１０７】
本明細書及び特許請求の範囲において、用語「結合された（ｃｏｕｐｌｅｄ）」及び／又は「接続された（ｃｏｎｎｅｃｔｅｄ）」は、それらの派生語と共に用いられたことがあるかもしれない。これらの用語は互いの同義語として意図されるものではない。むしろ、複数の実施形態において、「接続された」は２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを示すのに用いられてよい。「結合された」は、２つ又はそれより多くの要素が互いに直接物理的及び／又は電気的に接触していることを意味してよい。しかし、「結合された」はまた、２つ又はそれより多くの要素が互いに直接接触していないが、それでもなお互いに協同する又は相互作用することを意味してよい。例えば、あるユニットは１つ又は複数の介在するコンポーネントを通じてデコードユニットに結合されてよい。複数の図において、接続及び結合を示すのに矢印が用いられている。
【０１０８】
用語「及び／又は」が用いられたことがあるかもしれない。本明細書に用いられるとき、用語「及び／又は」は、一方又は他方又は両方を意味する（例えば、Ａ及び／又はＢは、Ａ又はＢ又はＡ及びＢの両方を意味する）。
【０１０９】
上記明細書では、複数の実施形態の完全な理解を提供するために、具体的な詳細が説明されている。しかし、他の複数の実施形態は、これらの具体的な詳細のいくつかを用いることなく実施されてよい。本発明の範囲は、以上に提供された複数の具体例によって決定されるのではなく、以下の特許請求の範囲によってのみ決定される。複数の他の例において、本明細書の理解を不明瞭にすることを回避するために、よく知られた回路、構造、デバイス、及び／又はオペレーションは、ブロック図の形で示されている、及び／又は詳細には示されていない。適切と考えられる場合、参照番号、又は参照番号の末尾部分は、複数の対応する又は類似の要素を示すために複数の図の間で繰り返されている。そのような要素は、明記されるか又は別な方法で明らかに明白でない限り、複数の類似した又は同じ特性を任意に有してよい。
【０１１０】
複数の特定のオペレーションは、複数のハードウェア要素によって実行されてよく、あるいは機械実行可能又は回路実行可能な複数の命令で具体化されてよい。これにより、複数のオペレーションを実行する複数の命令を用いてプログラミングされた機械、回路、又はハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路など）がもたらされてよく、及び／又は、結果としてそうなってもよい。複数のオペレーションはまた、任意に、ハードウェア及びソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路、又はハードウェアが具体的な又は特定の回路を含んでよく、あるいは他のロジック（例えば、ファームウェア及び／又はソフトウェアと組み合わされる可能性のあるハードウェア）が、命令を実行及び／又は処理し、命令に応答して結果を格納するよう動作可能である。
【０１１１】
いくつかの実施形態は、機械可読媒体を含む製造物品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって可読な形で情報を提供する、例えば格納するメカニズムを含んでよい。機械可読媒体は、命令又は命令のシーケンスを提供してよく、又はこれらを機械可読媒体上に格納していてもよい。命令又は命令のシーケンスは、機械によって実行された場合及び／又は実行されたときに、本明細書に開示されるオペレーション、方法、又は技術を機械に実行させる、及び／又はそれらを実行する機械をもたらすよう動作可能である。
【０１１２】
いくつかの実施形態において、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスク、光記憶媒体、光ディスク、光データストレージデバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイスなどを含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号で構成されるものではない。いくつかの実施形態において、記憶媒体は固体物質を含む有形の媒体を含んでよい。
【０１１３】
複数の適切な機械の複数の例には、限定されないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路などが含まれる。複数の適切な機械のさらに他の複数の例には、プロセッサ、デジタル論理回路、又は集積回路を含むコンピュータシステム又は他の電子デバイスが含まれる。そのようなコンピュータシステム又は電子デバイスの例には、限定されないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラが含まれる。
【０１１４】
本明細書の全体にわたる「１つの実施形態」、「一実施形態」、「１つ又は複数の実施形態」、「いくつかの実施形態」への言及は、例えば、特定の特徴が本発明の実施に含まれてよいが、必ずしも含まれることが必要とされるものではないことを示す。同様に、本明細書では、本開示を簡素化すること及び様々な発明の態様の理解を助けることを目的に、様々な特徴が単一の実施形態、図、又はその説明において一緒にグループ化されることがある。しかし、この開示の方法は、本発明が各請求項において明確に説明されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映するように、発明の複数の態様は、開示された単一の実施形態の全ての特徴より少ない特徴にある。従って、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれ、各請求項は本発明の別個の実施形態として独立している。
【０１１５】
［例示的な実施形態］
以下の複数の例は、更なる実施形態に関する。複数の例における詳細は、１つ又は複数の実施形態のどこでも用いられてよい。
【０１１６】
例１は、永続ストアフェンス命令をデコードするデコードユニットを含むプロセッサ又は他の装置である。本装置はまた、デコードユニットに結合されたメモリサブシステムモジュールを含む。元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、メモリサブシステムモジュールは永続ストアフェンス命令に応答して、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する。
【０１１７】
例２は例１のプロセッサを含み、任意に、永続ストアフェンス命令は、所定のデータを有するソースオペランドを示し、且つ所定のデータが格納される永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を含む。
【０１１８】
例３は例１のプロセッサを含み、任意に、所定のデータはストア命令のソースオペランドに含まれ、暗黙的に永続ストアフェンス命令は元のプログラム順序において永続ストアフェンス命令の直前及び直後のうち一方にある。
【０１１９】
例４は例１から例３のいずれか１つのプロセッサを含み、任意にメモリサブシステムモジュールは、永続ストアフェンス命令に応答して、元のプログラム順序において永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、後続のストア命令のデータの前に永続ストレージに永続的に格納されることを保証しない。
【０１２０】
例５は例１から例３のいずれか１つのプロセッサを含み、１つ又は複数のキャッシュのセットを更に含む。また任意に、メモリサブシステムモジュールは、永続ストアフェンス命令に応答して、所定のデータに１つ又は複数のキャッシュのセットをバイパスさせる。
【０１２１】
例６は例１から例５のいずれか１つのプロセッサを含み、永続ストアフェンスバッファを更に含み、任意にメモリサブシステムモジュールは、永続ストアフェンス命令に応答して、所定のデータを永続ストアフェンスバッファに格納させる。
【０１２２】
例７は例６のプロセッサを含み、キャッシュラインをキャッシュから移す意図を示す信号に基づき、キャッシュラインがキャッシュから移される前に、少なくとも１つのキャッシュラインを永続ストアフェンスバッファから永続ストレージに格納する永続ストアフェンスバッファ管理ユニットを更に含む。
【０１２３】
例８は例６から例７のいずれか１つのプロセッサを含み、任意に永続ストアフェンスバッファは、第２の永続ストアフェンス命令に対応する第２のデータが、所定のデータと同じ永続ストアフェンスバッファのキャッシュラインに格納されることを可能にするライトコンバインバッファを含む。
【０１２４】
例９は例６から例８のいずれか１つのプロセッサを含み、任意にプロセッサの命令セットは、永続ストアフェンスバッファからデータを読み出すユーザレベルのロード命令を含まない。
【０１２５】
例１０は例６から例９のいずれか１つのプロセッサを含み、任意に永続ストアフェンスバッファは、キャッシュコヒーレンシプロトコルを実装しない。
【０１２６】
例１１は例１から例６のいずれか１つのプロセッサを含み、任意にプロセッサは、プロセッサを永続ストレージに結合するのに用いられる相互接続上に送信される１つ又は複数のサイクルの共通セットを使って、所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを永続ストレージに格納する。
【０１２７】
例１２は、永続ストアフェンス命令を受信する段階を含む、プロセッサにおける方法である。本方法はまた、永続ストアフェンス命令に応答して、元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する段階を含む。
【０１２８】
例１３は例１２の方法を含み、任意に、命令を受信する段階は、所定のデータを有するソースオペランドを示し、且つ所定のデータが格納される永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を受信する段階を含む。
【０１２９】
例１４は例１２の方法を含み、所定のデータを有するソースオペランドを示すストア命令を受信する段階を更に含み、任意に、ストア命令は、元のプログラム順序において永続ストアフェンス命令の直前及び直後のうち一方にある。
【０１３０】
例１５は例１２から例１４のいずれか１つの方法を含み、永続ストアフェンス命令に応答して、所定のデータにプロセッサの１つ又は複数のキャッシュのセットをバイパスさせる段階を更に含む。
【０１３１】
例１６は例１２から例１５のいずれか１つの方法を含み、任意に、保証する段階は、後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証する段階を含み、全ての上記後続のストア命令のデータが永続ストレージに永続的に格納される前に、全ての以前のストア命令のデータが永続ストレージに永続的に格納されることを保証することはない。以前のストア命令は、元のプログラム順序において永続ストアフェンス命令の前に発生する。
【０１３２】
例１７は例１２から例１６のいずれか１つの方法を含み、所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを、相互接続上に送信される１つ又は複数のサイクルの共通セットにおいて永続ストレージに格納する段階を更に含む。
【０１３３】
例１８は例１２から例１７のいずれか１つの方法を含み、永続ストアフェンス命令に応答して、永続ストアフェンスバッファに所定のデータを格納する段階を更に含む。また任意に、プロセッサの命令セットは、永続ストアフェンスバッファからデータをロードするユーザレベルのロード命令を含まない。
【０１３４】
例１９は例１８の方法を含み、キャッシュラインをキャッシュから移す意図を示す信号を受信する段階と、信号を受信した後、且つキャッシュラインがキャッシュから永続ストレージに移される前に、少なくとも１つのキャッシュラインを永続ストアフェンスバッファから永続ストレージに格納する段階とを更に含む。
【０１３５】
例２０は例１８から例１９のいずれか１つの方法を含み、任意に、所定のデータを永続ストアフェンスバッファに格納する段階は、第２の永続ストアフェンス命令に対応する第２のデータを有する永続ストアフェンスバッファのキャッシュラインに所定のデータを格納する段階を含む。
【０１３６】
例２１は例１２から例２０のいずれか１つの方法を含み、所定のデータを永続メモリのログ先行書き込みに格納する段階を更に含む。
【０１３７】
例２２は複数の命令を処理するシステムであり、相互接続と、相互接続に結合された永続ストレージとを含む。永続ストレージは、ログ先行書き込みアルゴリズムの命令のセットを格納する。命令のセットは、永続ストレージにおける位置を示し、且つ所定のデータを永続ストレージのログ先行書き込みに格納するのにログ先行書き込みアルゴリズムによって用いられるストア及び永続ストアフェンス命令を含む。本システムはまた、相互接続に結合されるプロセッサを含む。プロセッサは、ストア及び永続ストアフェンス命令を受信する。プロセッサはストア及び永続ストアフェンス命令に応答して、元のプログラム順序においてログ先行書き込みアルゴリズムのストア及び永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証する。
【０１３８】
例２３は例２２のシステムを含み、任意に、永続ストア及び永続ストアフェンス命令は、所定のデータにプロセッサの１つ又は複数のキャッシュのセットをバイパスさせる非一時的命令を含む。
【０１３９】
例２４は、非一時的機械可読記憶媒体を含む製造物品である。非一時的機械可読記憶媒体は、ストア及び永続ストアフェンス命令を格納する。ストア及び永続ストアフェンス命令は、所定のデータを有し、且つ所定のデータが格納される永続ストレージにおける位置を示すソースオペランドを示す。ストア及び永続ストアフェンス命令は、機械により実行された場合、元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証することを含む複数のオペレーションを機械に実行させる。
【０１４０】
例２５は例２４の製造物品を含み、任意に、ストア及び永続ストアフェンス命令は、機械により実行された場合、元のプログラム順序においてストア及び永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、後続のストア命令のデータの前に永続ストレージに永続的に格納されることを機械に保証させない。
【０１４１】
例２６は、例１２から例２１のいずれか１つの方法を実行するよう動作するプロセッサ又は他の装置である。
【０１４２】
例２７は、例１２から例２１のいずれか１つの方法を実行するための手段を含むプロセッサ又は他の装置である。
【０１４３】
例２８は、例１２から例２１のいずれか１つの方法を実行する複数のモジュールを含むプロセッサ又は他の装置である。
【０１４４】
例２９は、例１２から例２１のいずれか１つの方法を実行するモジュール及び／又はユニット及び／又はロジック及び／又は回路及び／又は手段からなる任意の組み合わせを含むプロセッサである。
【０１４５】
例３０は、任意に非一時的機械可読媒体を含む製造物品であり、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合及び／又は実行されると、任意に、例１２から例２１のいずれか１つの方法を機械に実行させるよう動作する命令を格納する又はそうでなければ提供する。
【０１４６】
例３１はコンピュータシステム、他の電子デバイス、又は他の装置であり、バス又は他の相互接続と、相互接続に結合された例１から例１１の何れか1つのプロセッサと、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ネットワークインタフェース、グラフィックスチップ、無線通信チップ、移動通信用グローバルシステム（ＧＳＭ（登録商標））アンテナ、相変化メモリ、及びビデオカメラから選択される、相互接続に結合された少なくとも１つのコンポーネントとを含む。例３２は、実質的に本明細書に説明されるようなプロセッサ又は他の装置である。
【０１４７】
例３３は、実質的に本明細書に説明されるような任意の方法を実行するよう動作するプロセッサ又は他の装置である。
【０１４８】
例３４は、実質的に本明細書に説明されるような任意の永続ストアフェンス命令を実行するよう動作するプロセッサ又は他の装置である。
【図１】
2017532643.tif 000003
【図２】
2017532643.tif 000004
【図３】
2017532643.tif 000005
【図４】
2017532643.tif 000006
【図５】
2017532643.tif 000007
【図６】
2017532643.tif 000008
【図７】
2017532643.tif 000009
【図８】
2017532643.tif 000010
【図９】
2017532643.tif 000011
【図１０Ａ】
2017532643.tif 000012
【図１０Ｂ】
2017532643.tif 000013
【図１１Ａ】
2017532643.tif 000014
【図１１Ｂ】
2017532643.tif 000015
【図１２】
2017532643.tif 000016
【図１３】
2017532643.tif 000017
【図１４】
2017532643.tif 000018
【図１５】
2017532643.tif 000019
【図１６】
2017532643.tif 000020
【図１７】
2017532643.tif 000021
【手続補正書】
【提出日】平成29年3月13日(2017.3.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
永続ストアフェンス命令をデコードするデコードユニットと、
前記デコードユニットに結合されたメモリサブシステムモジュールと
を備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する
プロセッサ。
【請求項２】
前記永続ストアフェンス命令は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を含む
請求項１に記載のプロセッサ。
【請求項３】
前記所定のデータは、ストア命令のソースオペランドに含まれ、暗黙的に前記永続ストアフェンス命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある、
請求項1に記載のプロセッサ。
【請求項４】
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、前記後続のストア命令の前記データの前に前記永続ストレージに永続的に格納されることを保証しない、
請求項１に記載のプロセッサ。
【請求項５】
１つ又は複数のキャッシュのセットを更に備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータに前記１つ又は複数のキャッシュの前記セットをバイパスさせる、
請求項１に記載のプロセッサ。
【請求項６】
永続ストアフェンスバッファを更に備え、
前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータを前記永続ストアフェンスバッファに格納されるようにさせる、
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
キャッシュラインをキャッシュから移す意図を示す信号に基づき、前記キャッシュラインが前記キャッシュから移される前に、少なくとも１つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する永続ストアフェンスバッファ管理ユニットを更に備える
請求項６に記載のプロセッサ。
【請求項８】
前記永続ストアフェンスバッファは、第２の永続ストアフェンス命令に対応する第２のデータが、前記所定のデータと同じ前記永続ストアフェンスバッファのキャッシュラインに格納されることを可能にするライトコンバインバッファを含む
請求項６に記載のプロセッサ。
【請求項９】
前記プロセッサの命令セットは、前記永続ストアフェンスバッファからデータを読み出すユーザレベルのロード命令を含まない
請求項６に記載のプロセッサ。
【請求項１０】
前記永続ストアフェンスバッファは、キャッシュコヒーレンシプロトコルを実装しない
請求項６に記載のプロセッサ。
【請求項１１】
前記プロセッサは、前記プロセッサを前記永続ストレージに結合するのに用いられる相互接続上に送信される１つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを前記永続ストレージに格納する
請求項１から５のいずれか一項に記載のプロセッサ。
【請求項１２】
プロセッサにおける方法であって、
永続ストアフェンス命令を受信する段階と、
前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する段階と
を備える
方法。
【請求項１３】
前記永続ストアフェンス命令を受信する段階は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を受信する段階を含む
請求項１２に記載の方法。
【請求項１４】
前記所定のデータを有するソースオペランドを示すストア命令を受信する段階を更に備え、
前記ストア命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある
請求項１２に記載の方法。
【請求項１５】
前記永続ストアフェンス命令に応答して、前記所定のデータに前記プロセッサの１つ又は複数のキャッシュのセットをバイパスさせる段階を更に備える
請求項１２に記載の方法。
【請求項１６】
保証する段階は、前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する段階を含み、全ての前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが前記永続ストレージに永続的に格納されることを保証することはない
請求項１２に記載の方法。
【請求項１７】
相互接続上に送信される１つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第２の永続ストアフェンス命令に対応する第２のデータとを前記永続ストレージに格納する段階を更に備える
請求項１２に記載の方法。
【請求項１８】
前記永続ストアフェンス命令に応答して、前記所定のデータを永続ストアフェンスバッファに格納する段階を更に備え、
前記プロセッサの命令セットは、データを前記永続ストアフェンスバッファからロードするユーザレベルのロード命令を含まない
請求項１２に記載の方法。
【請求項１９】
キャッシュラインをキャッシュから移す意図を示す信号を受信する段階と、
前記信号を受信した後、且つ前記キャッシュラインが前記キャッシュから前記永続ストレージに移される前に、少なくとも１つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する段階と
を更に備える
請求項１８に記載の方法。
【請求項２０】
前記所定のデータを前記永続ストレージのログ先行書き込みに格納する段階を更に備える
請求項１２に記載の方法。
【請求項２１】
複数の命令を処理するシステムであって、
相互接続と、
前記相互接続に結合された永続ストレージと、
前記相互接続に結合されたプロセッサと
を備え、
前記永続ストレージはログ先行書き込みアルゴリズムの命令のセットを格納し、前記命令のセットは、前記永続ストレージにおける位置を示し、且つ前記ログ先行書き込みアルゴリズムにより所定のデータを前記永続ストレージのログ先行書き込みに格納するのに用いられるストア及び永続ストアフェンス命令を含み、
前記プロセッサは、前記ストア及び永続ストアフェンス命令を受信し、前記ストア及び永続ストアフェンス命令に応答して、元のプログラム順序において前記ログ先行書き込みアルゴリズムの前記ストア及び永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する
システム。
【請求項２２】
前記ストア及び永続ストアフェンス命令は、前記所定のデータに前記プロセッサの１つ又は複数のキャッシュのセットをバイパスさせる非一時的命令を含む
請求項２１に記載のシステム。
【請求項２３】
請求項１２から２０のいずれか一項に記載の方法を実行するための手段を備える
装置。
【請求項２４】
請求項１２から２０のいずれか一項に記載の方法をコンピュータに実行させる
プログラム。
【請求項２５】
相互接続と、
前記相互接続に結合された請求項１から１１のいずれか一項に記載のプロセッサと、
前記相互接続に結合された永続ストレージと
を備え、
前記永続ストレージは、前記永続ストアフェンス命令を含むログ先行書き込みアルゴリズムを格納し、データを前記永続ストレージのログ先行書き込みに格納するのに前記永続ストアフェンス命令を用いる
電子デバイス。
【請求項２６】
請求項２４に記載のプログラムを格納する
コンピュータ可読記録媒体。
【国際調査報告】
2017532643.tif 000022
2017532643.tif 000023