(57)【特許請求の範囲】
【請求項１】
少なくとも１つのメモリコントローラと、
送信先記憶位置を示す永続コミット区分命令及びソース記憶位置を示す永続コミットブロック命令をデコードするデコードユニットと、
前記デコードユニットおよび前記少なくとも１つのメモリコントローラに結合された実行ユニットであって、前記実行ユニットは、前記永続コミット区分命令に応答して前記送信先記憶位置に区分値を格納し、前記区分値は、前記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、前記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分し、前記実行ユニットは、さらに、前記永続コミットブロック命令に応答して、前記区分値を格納する前記ソース記憶位置から区分値を読み取る、前記実行ユニットと、
を備え、前記永続コミットブロック命令に応答して、前記区分値によって区分される複数の永続メモリオペレーションへの前記少なくともオールファーストストアが、複数の永続メモリ命令への少なくとも任意のストアが前記永続コミットブロック命令の実行後に実行される前に、永続的に格納されたことを保証する、プロセッサ。
【請求項２】
複数の永続メモリオペレーションへの前記少なくともオールファーストストアのうち少なくとも１つは、前記プロセッサのキャッシュラインに対応するバイト粒度およびキャッシュライン粒度のうち１つで永続メモリにアドレスされる、請求項１に記載のプロセッサ。
【請求項３】
複数の汎用レジスタを更に備え、前記永続コミット区分命令が、前記複数の汎用レジスタのうち１つにおいて前記送信先記憶位置を示す、請求項１に記載のプロセッサ。
【請求項４】
前記プロセッサは、前記永続コミット区分命令に応答して、複数の永続メモリオペレーションへの前記少なくともオールセカンドストアが、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが永続的に格納される前に永続的に格納されることを阻止しない、請求項１に記載のプロセッサ。
【請求項５】
前記実行ユニットは、前記永続コミット区分命令に応答して、前記区分値を格納し、前記区分値は、前記永続コミット区分命令が実行される前に、前記少なくとも１つのメモリコントローラで時々受信された複数の永続メモリオペレーションへの前記少なくともオールファーストストアを、前記永続コミット区分命令が実行された後に、前記少なくとも１つのメモリコントローラで時々受信される複数の永続メモリオペレーションへの前記少なくともオールセカンドストアから区分する、請求項１に記載のプロセッサ。
【請求項６】
複数のメモリオペレーションへのストアのために、それらが前記少なくとも１つのメモリコントローラのうちの第１のメモリコントローラに到着すると複数の単調増加値を生成する単調増加値ジェネレータを更に備え、前記実行ユニットは、前記永続コミット区分命令に応答して、前記永続コミット区分命令が実行される前に前記第１のメモリコントローラでつい最近到着したメモリオペレーションへのストアのために生成された単調増加値を格納する、請求項１に記載のプロセッサ。
【請求項７】
前記単調増加値ジェネレータは、到着カウンタを有する、請求項６に記載のプロセッサ。
【請求項８】
前記単調増加値ジェネレータは、タイマおよびクロックのうち１つを有する、請求項６に記載のプロセッサ。
【請求項９】
前記少なくとも１つのメモリコントローラは、複数のメモリコントローラを有し、複数のメモリオペレーションが前記複数のメモリコントローラのそれぞれに到着すると、複数のメモリオペレーションへのストアのために単調増加し相互に一貫性のある複数の値を生成する少なくとも１つの単調増加値ジェネレータを更に備える、請求項１に記載のプロセッサ。
【請求項１０】
前記少なくとも１つのメモリコントローラは、複数のメモリコントローラを有し、前記実行ユニットは、前記永続コミット区分命令に応答して、前記区分値を格納し、前記区分値は、前記複数のメモリコントローラの複数のドメイン内にある複数の永続メモリオペレーションへの前記少なくともオールファーストストアを、前記複数のメモリコントローラの前記複数のドメイン内にもある複数の永続メモリオペレーションへの前記少なくともオールセカンドストアから区分する、請求項１に記載のプロセッサ。
【請求項１１】
前記実行ユニットは、前記永続コミット区分命令に応答して、前記区分値を格納し、前記区分値は、単一のメモリコントローラの領域内のみにある複数の永続メモリオペレーションへの前記少なくともオールファーストストアを、前記単一のメモリコントローラの領域内のみにある複数の永続メモリオペレーションへの前記少なくともオールセカンドストアから区分する、請求項１に記載のプロセッサ。
【請求項１２】
複数のレジスタを更に備え、前記永続コミット区分命令が、前記複数のレジスタのうちの所定のレジスタを前記送信先記憶位置として黙示的に示し、前記永続コミットブロック命令が、前記所定のレジスタを前記ソース記憶位置として黙示的に示す、請求項１に記載のプロセッサ。
【請求項１３】
前記プロセッサは、前記永続コミットブロック命令に応答して、前記永続コミットブロック命令の実行後に実行される複数の永続メモリ命令への前記少なくとも任意のストアの実行を、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが永続的に格納されてしまうまで中断する、請求項１に記載のプロセッサ。
【請求項１４】
前記プロセッサは、前記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが、前記永続コミットブロック命令の前記実行後に複数の永続メモリ命令への前記任意のストアが実行される前に永続的に格納されたことを保証するが、必ずしも、前記永続コミットブロック命令の前記実行後に複数の非永続メモリ命令への任意のストアが実行される前に永続的に格納されたことは保証しない、請求項１に記載のプロセッサ。
【請求項１５】
前記プロセッサは、前記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが、前記永続コミットブロック命令の前記実行後に複数の永続メモリ命令への前記任意のストアが実行される前であり、且つ前記永続コミットブロック命令の前記実行後に複数の非永続メモリ命令への任意のストアが実行される前に永続的に格納されたことを保証する、請求項１に記載のプロセッサ。
【請求項１６】
前記プロセッサは、前記永続コミットブロック命令に応答して、複数のメモリオペレーションが前記少なくとも１つのメモリコントローラから出て行く場合に、前記区分値を、複数のメモリオペレーションへのデパーティングストアから取得される複数の値と比較する、請求項１に記載のプロセッサ。
【請求項１７】
前記デコードユニットは、永続コミットチェック命令をデコードし、前記永続コミットチェック命令は、送信先記憶位置を示し、前記プロセッサは、前記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが永続的に格納されたかどうかを示す前記永続コミットチェック命令によって示される前記送信先記憶位置に値を格納する、請求項１から１１のいずれか１項に記載のプロセッサ。
【請求項１８】
前記永続コミットチェック命令は、前記区分値を有するソース記憶位置を示し、前記プロセッサは、前記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの前記少なくともオールファーストストアを永続的に格納することの進捗のレベルを示す前記永続コミットチェック命令によって示される前記送信先記憶位置に前記値を格納する、請求項１７に記載のプロセッサ。
【請求項１９】
プロセッサにおいて、
送信先記憶位置を示す永続コミット区分命令を受信する段階と、
前記永続コミット区分命令に応答して、前記送信先記憶位置に区分値を格納する段階であって、前記区分値は、前記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、前記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分する、段階と、
前記区分値を格納するソースストレージ位置を示す永続コミットブロック命令を受信する段階と、
前記区分値によって区分される複数の永続メモリオペレーションへの前記少なくともオールファーストストアが、前記永続コミットブロック命令に応答して、前記永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に永続的に格納されたことを保証する段階と、
を備える、方法。
【請求項２０】
送信先記憶位置を示す永続コミットチェック命令を受信する段階と、
前記永続コミットチェック命令に応答して前記永続コミットチェック命令によって示される前記送信先記憶位置に値を格納する段階であって、前記永続コミットチェック命令に応答して格納される前記値が、複数の永続メモリオペレーションへの前記少なくともオールファーストストアが永続的に格納されたかどうかを示す、段階と、を更に備える、請求項１９に記載の方法。
【請求項２１】
請求項１９または２０に記載の方法を実行するための手段を備える装置。
【請求項２２】
請求項１９または２０に記載の方法をコンピュータに実行させるプログラム。
【請求項２３】
相互接続と、
前記相互接続で結合された請求項１から１１のいずれか１項に記載のプロセッサと、
前記相互接続で結合された、命令のセットを格納しているダイナミックランダムアクセスメモリ（ＤＲＡＭ）であって、前記命令のセットは、前記プロセッサによって実行される場合、
複数の永続メモリオペレーションへの前記少なくともオールファーストストアに依存しない、実行するべき非依存性ワークを決定することと、前記永続コミット区分命令を実行した後に前記非依存性ワークを実行することと、を有する複数のオペレーションを前記プロセッサに実行させる、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、を備える、電子デバイス。
【請求項２４】
請求項２２に記載のプログラムを格納しているコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書において記載される実施形態は、一般に、プロセッサに関する。特に、本明細書において記載される実施形態は、一般に、プロセッサにおけるストアオペレーションに関する。
【背景技術】
【０００２】
複数のプロセッサは、データを格納するメインメモリを有する複数のコンピュータシステムおよび複数の他の電子デバイスにおいて、しばしば用いられる。複数のプロセッサは、メインメモリにおけるデータをアクセスするべく、複数の命令を実行してよい。例えば、複数のプロセッサは、メインメモリからデータをロードするか、またはデータを読み取る複数のロード命令を実行してよく、且つ／または、メインメモリにデータを書き込む、または他の場合、データを格納する複数の命令を格納してよい。
【０００３】
複数のコンピュータシステムおよび複数の他の電子デバイスにおける１つの課題は、電源障害、システムクラッシュおよび他の複数のエラーが起こり得ることである。しばしば、そのような複数のエラーは、失われている複数の格納命令に関連しているデータを結果としてもたらす。
【図面の簡単な説明】
【０００４】
本発明は、以下の記載および複数の実施形態を図示するために用いられる複数の添付の図面を参照することによって、最も良く理解され得る。複数の図面において：
【図１】複数の永続コミット命令の複数の実施形態を持つ命令セットを有するプロセッサの実施形態のブロック図である。
【図２】本発明の複数の実施形態が実装され得るシステムの実施形態のブロック図である。
【図３】永続コミット区分命令および永続コミットブロック命令の実施形態が用いられ得る方法の１つの可能な例のブロックフロー図である。
【図４】永続コミット区分命令の実施形態および永続コミットブロック命令の実施形態を実行するように動作するプロセッサの実施形態のブロック図である。
【図５】複数の区分値を決定するべくメモリコントローラにおいて複数の到着するストアオペレーションに付された複数の単調増加値を用いるように動作する、プロセッサの例示的実施形態のブロック図である。
【図６】最大値セレクタの例示的実施形態のブロック図である。
【図７】複数のメモリコントローラで永続コミットブロック命令を実行するように動作するプロセッサの例示的実施形態のブロック図である。
【図８】永続コミットチェック命令の実施形態が、永続コミット区分命令の実施形態および永続コミットブロック命令の実施形態と共に用いられ得る、プロセッサで実行される方法の１つの可能な例のブロックフロー図である。
【図９】複数の領域特定の永続コミット命令の複数の実施形態を持つ命令セットを有するプロセッサの実施形態のブロック図である。
【図１０Ａ】インオーダパイプラインの実施形態およびレジスタリネーミングアウトオブオーダ発行／実行パイプラインの実施形態を図示するブロック図である。
【図１０Ｂ】実行エンジンユニットに結合されたフロントエンドユニットおよびメモリユニットに結合された両方を含むプロセッサコアの実施形態のブロック図である。
【図１１Ａ】単一のプロセッサコアと、そのオンダイ相互接続ネットワークへの接続およびそのレベル２（Ｌ２）キャッシュのローカルサブセットとを併せた実施形態のブロック図である。
【図１１Ｂ】図１１Ａのプロセッサコアの一部の拡大図の実施形態のブロック図である。
【図１２】１つより多くのコアを有し得、統合メモリコントローラを有し得、且つ統合グラフィクスを有し得るプロセッサの実施形態のブロック図である。
【図１３】コンピュータアーキテクチャの第１の実施形態のブロック図である。
【図１４】コンピュータアーキテクチャの第２の実施形態のブロック図である。
【図１５】コンピュータアーキテクチャの第３の実施形態のブロック図である。
【図１６】コンピュータアーキテクチャの第４の実施形態のブロック図である。
【図１７】本発明の複数の実施形態に従って、発信元命令セットにおける複数のバイナリ命令をターゲット命令セットにおける複数のバイナリ命令に変換するためのソフトウェア命令変換器の使用のブロック図である。
【発明を実施するための形態】
【０００５】
本明細書において開示されるのは、複数の命令、複数の命令を実行する複数のプロセッサ、複数の命令を処理または実行する場合に複数のプロセッサによって実行される複数の方法、および複数の命令を処理または実行する１または複数のプロセッサを組み込む複数のシステムである。以下の記載において、多数の具体的な詳細（例えば、複数の具体的な命令オペレーション、複数の命令の組み合わせ、複数のプロセッサ構成、複数のマイクロアーキテクチャ詳細、複数のオペレーションのシーケンス等）が、説明される。しかしながら、複数の実施形態は、これらの具体的な詳細を用いずに実施されてよい。複数の他の例において、複数の既知回路、複数の構造および技術は、記載の理解を不明瞭にすることを回避するべく、詳細に示されなかった。
【０００６】
図１は、プロセッサ１００の実施形態のブロック図である。プロセッサは、命令セット１０２を有する。命令セットは、プロセッサが実行するように動作する複数の命令のセットを含む。命令セットの複数の命令は、デコードされている命令セットの複数の命令から結果としてもたらされる複数のマイクロ命令、複数のマイクロオプス、または複数の他のデコードされた命令とは対照的に、実行のために複数のマクロ命令、またはプロセッサに提供される複数のマシンレベルの命令を表す。
【０００７】
示されるように、いくつかの実施形態において、命令セットは、永続コミット区分命令１０４を含み得る。永続コミット区分命令は、送信先レジスタ、または他の送信先記憶位置を示してよい。いくつかの実施形態において、永続コミット区分命令は、もし実行される場合、プロセッサに、少なくとも全てのストア（ａｌｌ  ｓｔｏｒｅ）を区分または区別する区分値を、格納させるように動作し得る。区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも、永続的に格納されていなかった、複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合に少なくとも１または複数のプロセッサによって実行されていなかった、またはメモリにまだ受諾されていなかった複数の永続メモリオペレーションへの少なくとも全てのストアから分離する。
【０００８】
示されるように、いくつかの実施形態において、命令セットは、永続コミットブロック命令１０６を含んでよい。永続コミットブロック命令は、先行する永続コミット区分命令の区分値を格納することになっているレジスタまたは他の発信元記憶位置を示してよい。いくつかの実施形態において、永続コミットブロック命令は、もし実行される場合、プロセッサに、区分値によって区分される複数の永続メモリオペレーションへの少なくとも全てのストア（例えば、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことにはなっていない）が、永続コミットブロック命令の実行後に、複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されてきたことを保証させるように動作し得る。
【０００９】
示されるように、いくつかの実施形態において、命令セットは、必要とされないものの、永続コミットチェック命令１０８をオプションとして含んでよい。いくつかの実施形態において、永続コミットチェック命令は、送信先記憶位置を示してよい。いくつかの実施形態において、永続コミットチェック命令は、もし実行される場合、プロセッサに、送信先記憶位置に値を格納させるように動作し得る。いくつかの実施形態において、値は、先行する永続コミット区分命令によって区分される複数の永続メモリオペレーションへの少なくとも全てのストア（例えば、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも、永続的に格納されたことにはなっていない複数の永続メモリオペレーションへのストア）が、ここで永続的に格納されたかどうかを示してよい。いくつかの実施形態において、格納された値は、複数の永続メモリオペレーションへのこれらの区分されたストアの全てを永続的に格納することの進捗のレベルを示してよい。いくつかの実施形態において、そのような値またはステータスは、必ずしも、つい最近の区分値に適用する必要はないが、むしろ、様々な前の区分値に適用可能であってよい。複数の他の実施形態において、命令は、送信先において格納された値またはステータスがおそらく適用する特定の区分値を提供するべく、発信元レジスタまたはオペランドをオプションとして有してよい。
【００１０】
複数の他の実施形態において、命令セットは、複数の例示された命令のサブセット（例えば、これらの命令のうち任意のわずか単一のもの）をオプションとして含んでよい。さらに複数の他の実施形態において、命令セットは、複数の他の命令または複数の全く異なる命令（例えば、図９に関連して以下で検討される複数の命令）をオプションとして含んでよい。
【００１１】
図２は、本発明の複数の実施形態が実装され得るシステム２１０の実施形態のブロック図である。システムは、プロセッサ２００およびプロセッサに結合されたシステムメモリ２２６を含む。様々な実施形態において、システムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータ、スイッチ等）、スマートテレビ、ネットトップ、セットトップボックス、ビデオゲームコントローラ、メディアプレイヤ、または他のタイプの電子デバイスを表してよい。
【００１２】
プロセッサは、少なくとも１つの論理プロセッサ２１６を含む。簡略化のため、プロセッサは、オプションとして他の論理プロセッサを含んでよいことは理解されるものの、単一の論理プロセッサのみが示される。複数の適切な論理プロセッサの複数の例は、限定はされないが、コア、ハードウェアスレッド、スレッドユニット、スレッドスロット、および他の論理プロセッサを含む。複数の論理プロセッサの各々は、複数の命令（例えば、複数のストア命令、複数の算術命令、複数の論理命令等）を処理する命令実行パイプラインを含んでよい。例として、各パイプラインは、複数の命令をフェッチする命令フェッチユニット、複数の命令をデコードする命令デコードユニット、複数の命令を実行する実行ユニット、および複数の他のパイプラインコンポーネントを含んでよい。本発明の範囲は、如何なる既知のタイプのパイプラインにも限定はされない。
【００１３】
論理プロセッサは、１または複数のキャッシュ２１８に結合されている。いくつかの実施形態において、１または複数のキャッシュは、複数の異なるキャッシュレベルで複数のキャッシュを含むキャッシュ階層を含んでよい。複数の異なるキャッシュレベルは、論理プロセッサおよび／またはシステムメモリに対するそれらの相対的な近さが異なってもよい。１つの実例的な例として、論理プロセッサは、専用の第１のレベルまたはレベル１（Ｌ１）キャッシュ、および共有の第２のレベルまたはレベル２（Ｌ２）キャッシュを有してよい。別の実例的な例として、論理プロセッサは、専用のＬ１キャッシュおよび専用Ｌ２キャッシュ、および共有の第３のレベルまたはレベル３（Ｌ３）キャッシュを有してよい。本発明の範囲は、如何なる既知のタイプのキャッシュ階層にも限定はされない。さらに、複数の他の実施形態において、プロセッサは、キャッシュ階層の代わりに単一のキャッシュレベルを有してもよい。
【００１４】
１または複数のキャッシュ２１８は、特定の実装例に所望される複数の命令および／またはデータを格納するために用いられ得る。複数のキャッシュは、システムメモリ２２６よりも比較的小さく、且つ高速アクセスのストレージを表してよい。更に、複数のキャッシュは、システムメモリより複数の命令パイプラインに比較的近くてよい。複数のキャッシュは、データへのより高速な連続アクセスを提供するべく、システムメモリからプロセッサにもたらされたデータをキャッシュする、または一時的に格納するために用いられ得る。代表的に、複数のキャッシュにおけるデータへの複数のアクセスは、一般に、２、３プロセッサクロックサイクルしかかからず、他方、システムメモリにおけるデータへの複数のアクセスは、しばしば、はるかにより多くのサイクルがかかる。プロセッサが、システムメモリからデータを読み取りたい場合、プロセッサは、データのコピーが既に複数のキャッシュにおいて格納されているかどうかまず確認してよい。データが複数のキャッシュにおいて見られる場合、プロセッサは、複数のキャッシュからデータにアクセスしてよく、それは、一般に、データが代わりにシステムメモリからアクセスされた場合より高速である。同様に、プロセッサがシステムメモリにデータを書き込みたい場合、データは、しばしば、複数のキャッシュにおいてまず格納され得る。
【００１５】
プロセッサは、１または複数のキャッシュ２１８において格納されたデータが、コヒーレントに管理され、複数の適切な時期にシステムメモリ２２６に格納されていることを保証するよう援助するキャッシュコヒーレンシメカニズムまたはキャッシュコヒーレンシプロトコルを実装してよく、発信元ることにより、システムにおける全ての関連するエンティティが、正確且つ最新の複数のバージョンのデータをコヒーレントに見ることができる。複数の適切なキャッシュコヒーレンシプロトコルの複数の例は、限定はされないが、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ等を含む。ＭＥＳＩプロトコルは、４つの状態、すなわち、２つのＭＥＳＩビットによって示される、変更（Ｍ）、排他（Ｅ）、共有（Ｓ）、および無効（Ｉ）状態を含む。ＭＯＳＩプロトコルは、所有（Ｏ）状態を、排他（Ｅ）状態の代わりに利用する。ＭＯＥＳＩプロトコルは、排他（Ｅ）および所有（Ｏ）状態の両方を利用する。そのような複数のキャッシュコヒーレンシプロトコルは、以下において更に検討されるだろうデータの永続性または耐久性を考慮しない。
【００１６】
図２を再び参照すると、プロセッサは、メモリコントローラ２２２を含むメモリインタフェースユニット２２０を有する。いくつかの実施形態において、システムは、単一のメモリコントローラのみを含んでよい。複数の他の実施形態において、システムは、２またはそれよりも多くのメモリコントローラを含んでよい。簡略化のため、単一のメモリコントローラのみが、図に示される。本実施形態において、メモリコントローラは、プロセッサ上に位置する（例えば、オンダイメモコントローラである）。別の実施形態において、メモリコントローラは、オプションとして、プロセッサの外に（例えば、チップセットコンポーネント内のオフダイメモリコントローラである）位置され得る。メモリインタフェースユニットおよび／またはメモリコントローラは、システムメモリ２２６に結合されるように動作し得る。例えば、結合は、１または複数のバスまたは他の相互接続を介してよい。メモリコントローラは、システムメモリに格納されたまたはシステムメモリに書き込まれるデータを、一時的にバッファリングする書き込み保留バッファを有する。
【００１７】
いくつかの実施形態において、システムメモリ２２６は、少なくとも何らかの永続メモリ２２８を含んでよい。永続メモリは、永続的または耐久的にデータを格納するように動作し得る。永続的または耐久的に格納されたデータは、たとえ電力損失、オペレーティングシステム故障、システムクラッシュ、システム再起動等の場合においても、失われないかもしれない。永続メモリの複数の適切な形態の複数の例は、限定はされないが、不揮発性メモリおよびストレージ、バッテリでバックアップされる（または他の電源でバックアップされる）揮発性メモリおよびストレージ等、およびそれらの複数の組み合わせを含む。通常、揮発性メモリは、電力が比較的短い期間、供給されない場合、その格納されたデータまたはコンテンツを失う。しかしながら、揮発性メモリをバッテリまたは他のバックアップ電源でバックアップすることにより、揮発性メモリが永続メモリになるよう援助されてよい。不揮発性メモリおよびストレージデバイスは、電力が加えられなかった比較的長い期間（例えば、典型的には、電力無しの少なくとも一週間）の後でさえ、それらの格納されたデータまたはコンテンツを保持するように自然に動作する。
【００１８】
適切なタイプのメモリおよび／または永続メモリ２２８にストレージの複数の具体例は、２，３例のみを挙げると、限定はされないが、バッテリでバックアップされる（または他の電源でバックアップされる）ダイナミックランダムアクセスメモリ（ＤＲＡＭ）および複数の他の形態のＲＡＭ、相変化メモリ（ＰＣＭ）に基づく不揮発性メモリまたはストレージ、メモリスタ（例えば、電荷および磁束リンケージに関連する非線形受動２端子電気コンポーネント）、およびスピントランスファートルク（例えば、磁気トンネリング接合における磁気層の方向性またはスピン値が、スピン偏極電流を用いて変更され得る効果を利用するもの）、およびそれらの複数の組み合わせを含む。これらの技術の延長または改良のいずれかである、将来開発される複数の他の技術、または複数の全く異なる技術もまた、適切である可能性がある。また、複数のコンピュータシステムにおいて二次的な補助メモリとして一般に用いられる不揮発性メモリの複数の他の形態もまた、潜在的に適切である。複数の例は、限定はされないが、ハードディスク、磁気テープ、複数の他のタイプの磁気ストレージデバイス、様々なタイプのリードオンリメモリ（ＲＯＭ）、光ディスク、強誘電体ＲＡＭ（Ｆ−ＲＡＭ）、および磁気抵抗ＲＡＭを含む。一般に、そのような複数の形態のメモリは、前述の複数のタイプのメモリを優先する速度または他の複数の特性を有するが、本発明の範囲は、この観点に限定はされない。本発明の範囲は、如何なる特定のタイプの永続メモリにも限定はされない。
【００１９】
いくつかの実施形態において、システムメモリ２２６は、永続メモリ２２８のみから成ってよい。複数の他の実施形態において、システムメモリは、永続メモリ並びに非永続メモリ（例えば、ＤＲＡＭまたはメインまたは一次メモリに従来用いられている複数の他のタイプのメモリ）の両方を含んでよい。いくつかの実施形態において、永続メモリは、物理アドレス空間をアドレス可能な複数のプロセッサでの一部であってよい。ソフトウェアは、プロセッサの命令セットの複数のロード命令、複数のストア（ｓｔｏｒｅ）命令、および複数の他の命令を実行することによって、永続メモリにアクセスすることが可能であってよい。いくつかの実施形態において、永続メモリは、ページ／ブロックアドレス可能であるのみとは対照的に、バイトアドレス可能であってよい。いくつかの実施形態において、永続メモリは、プロセッサメモリバスに直接結合され得る。いくつかの実施形態において、永続メモリへの複数のアクセスは、従来のメイン／一次メモリ（例えば、ＤＲＡＭ）への複数のアクセスとほぼ同一（例えば、キャッシュ可能性、コヒーレンシ、プロセッサメモリ順序付け、複数のメモリタイプ等に関して）のプロセッサメモリモデルに従ってよい。
【００２０】
データを永続的または耐久的に永続メモリ２２８において格納する能力は、いくつかの特定の用途および／または実装に対して非常に有益である。例えば、いくつかの特定のデータベースアプリケーションおよび／またはデータトランザクションにおいて、データを失わないことが非常に重要である。しかしながら、データが永続的または耐久的に永続メモリ２２８において格納されることを保証することにより、ソフトウェアに対し複数の追加的課題がもたらされる傾向があってよい。一つには、複数の格納または書き込みタイプの命令に関連しているデータが、それが永続メモリへ進む途中で一時的に格納され得る、様々な中間揮発性マイクロアーキテクチャコンポーネントおよび／またはストレージをプロセッサが有してよい。そのような複数の揮発性コンポーネントおよび／またはストレージの複数の可能な例は、限定はされないが、メモリコントローラ２２２における１または複数のキャッシュ２１８、複数のキューまたはバッファ（例えば、書き込み保留バッファ２２４）、非コアおよび／または相互接続の複数のキューもしくは複数のバッファ、複数のメモリ側キャッシュ等を含む。そのような複数の揮発性要素またはストレージは、一般に、電源障害、オペレーティングシステム故障、システムクラッシュ、再起動または同様のものが発生した場合に、それらのデータまたはコンテンツを保持することは可能でない。永続メモリに向かって格納されようとしているデータは、永続メモリ（または中間電源障害保護ストレージデバイスもしくはバッファ）に実際に到着し、格納されるまで、実際には永続的または耐久的にならなくてよい。本明細書において用いられるように、永続メモリにデータを格納することは、そのような中間の電源障害保護ストレージデバイスまたはバッファにおいてデータを格納することを包含し、それもまた永続的または耐久的である。結果として、データが、そのような複数の揮発性要素またはストレージにおいて（例えば、メモリコントローラ２２２における書き込み保留バッファ２２４において）格納される間に、電源障害、システムクラッシュ、オペレーティングシステム故障、または再起動が起こる場合、データは、通常、所望される永続性または耐久性を達成せずに失われるであろう。
【００２１】
示されるように、いくつかの実施形態において、論理プロセッサは、本明細書において開示されるような１または複数の永続コミット命令２０４を実行するように動作し得る。いくつかの実施形態において、これらの永続コミット命令は、永続メモリ２１２への複数のストア（例えば、永続メモリ２２８に対応する複数のアドレス範囲を示す複数のストア命令）が、永続メモリにコミットされる、且つ／または永続的に格納される順序を測定し、制御することを援助するのに用いられ得る。
【００２２】
図３は、永続コミット区分命令および永続コミットブロック命令の実施形態が用いられ得る、プロセッサで実行される方法３３０の１つの可能な例のブロックフロー図である。この図において、永続コミット区分および永続コミットブロック命令が用いられ得る例示的状況を更に図示するべく、いくつかのオプションのブロックが破線において示される。これらの破線で示されたボックスの複数のオペレーションは、オプションとしてあって、必須ではない。
【００２３】
ブロック３３１において、永続メモリ命令への１または複数の前のストアが、オプションとして実行され得る。例えば、これらの命令は、永続メモリ（例えば、永続メモリ２２８）に対応するアドレス範囲をそれぞれ示してよい。すでに言及されたように、そのようなストアのデータは、永続メモリに即座に格納されなくてよい、または永続性にコミットされなくてよいが、むしろ、１または複数の揮発性プロセッサキャッシュ（例えば、１または複数のキャッシュ２１８）においてまずキャッシュに格納されてよく、次に、場合によってはメモリインタフェースユニットにおいてその後に一時的に格納されてよい（例えば、メモリコントローラ２２２の書き込み保留バッファ２２４に格納されてよい）。
【００２４】
ブロック３３２において、複数のストアが、オプションとしてフェンスされ得る。例えば、これは、プロセッサに、全てのより古いストア（例えば、元のプログラム順序においてストアフェンス命令に先行する）が、全てのより新しいストア（例えば、元のプログラム順序においてストアフェンス命令に続く）の前に全体的に見えるようになることを保証させるように動作するストアフェンス命令を実行することを含んでよい。
【００２５】
ブロック３３３において、永続メモリへの複数の前のストア（例えば、ブロック３３１で実行された複数のストア）が、オプションとしてフラッシュされてよく、または他の場合、複数の任意の揮発性コヒーレンシキャッシュ（例えば、１または複数のキャッシュ２１８）から追い出され得る。例えば、これは、複数の特定のインテル（登録商標）アーキテクチャ互換のプロセッサにおいてＣＬＦＬＵＳＨまたはＣＬＦＬＵＳＨＯＰＴまたはＣＬＷＢ命令を実行することを含んでよい。これは、データが複数の揮発性キャッシュから追い出されることを保証し得る一方、それは、一般に、データが永続メモリに対して実際に格納されることは保証しない。例えば、ＣＬＦＬＵＳＨおよびＣＬＦＬＵＳＨＯＰＴまたはＣＬＷＢは、複数のキャッシュから追い出されたデータが、メモリに受諾され、例えば、メモリインタフェースユニットへとプッシュされ、または書き込まれる（例えば、メモリコントローラ２２２における書き込み保留バッファ２２４において格納される）ときに、完了し得る。しかしながら、そのようなデータは、永続メモリに格納される（例えば、実際に永続メモリに格納されるか、または、本明細書において、永続メモリの一部であると考慮して用いられるように中間電源障害保護バッファに格納される）まで、実際に永続的にならないであろう。
【００２６】
ブロック３３４において、複数のストアが、再びオプションとしてフェンスされ得る。そのようなフェンスは、特定の実装例に応じて（例えば、メモリ順序付けモデルおよび複数の命令が、互いに対してどのように順序付けられるかに部分的に応じて）必要とされてよく、または必要とされなくてもよい。
【００２７】
ブロック３３５において、永続コミット区分命令の実施形態が、実行され得る。いくつかの実施形態において、永続コミット区分命令は、実行される場合、プロセッサに、永続コミット区分命令によって示される送信先記憶位置に区分値を格納させるように動作し得る。いくつかの実施形態において、区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも永続的に格納されてきたことになっていない（例えば、必ずしも、少なくとも１つのメモリコントローラから抜け出していなかった）複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合、メモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくとも全てのストアから区分してよい。例えば、いくつかの実施形態において、区分値は、永続コミット区分命令が実行される前に１または複数のメモリコントローラで時々受信されたことになっている複数の永続メモリオペレーションへの少なくとも全てのストア（例えば、潜在的に、ブロック３３１において実行され、ブロック３３３において複数のキャッシュからフラッシュされた複数のストアのいくつか）を、永続コミット区分命令が実行される後に１または複数のメモリコントローラで時々受信されたことになっている複数の永続メモリオペレーションへの少なくともオールセカンドストア（例えば、ブロック３３９において実行されるであろう複数のストア）から区分してよい。
【００２８】
以下で更におそらく説明されるように、いくつかの実施形態において、区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも永続的に格納されたことになっていない（例えば、書き込み保留バッファ２２４にいまだにある可能性がある）複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合、メモリに受諾されたことにまだなっていない複数の永続メモリオペレーションへの少なくとも全てのストアから区別し、且つ／または分離し、且つ／または差別化するように動作する単調増加値（例えば、メモリコントローラの到着カウンタの到着カウンタ値、到着クロックの到着時間値またはメモリコントローラの他のタイマ）、または他の境界画定、境界表示、境界線、または他のインジケーションを表してよい。
【００２９】
複数のメモリオペレーションへのストアが、複数の異なる実施形態において様々な異なる態様で、メモリに受諾され得る。いくつかの実施形態において、複数のストアオペレーションは、複数の書き込み保留バッファ（例えば、書き込み保留バッファ２２４）において格納される場合、または他の場合、メモリコントローラおよび／またはメモリインタフェースユニットに格納される場合、メモリに受諾されてよい。いくつかの実施形態において、複数のストアオペレーションは、それらが、全体的に可視となる、ライトバックメモリへの複数の非一時的なストアである、または、キャッシュに格納することが不可能な、ライトコンバイン（ｗｒｉｔｅ‐ｃｏｍｂｉｎｉｎｇ）、且つライトスルー（ｗｒｉｔｅ‐ｔｈｒｏｕｇｈ）のメモリへの複数のストアである場合、メモリに受諾されてよい。いくつかの実施形態において、先行する複数のストアオペレーションは、ライトバックメモリに対して先行するストアとして、キャッシュラインのために実行されるキャッシュラインフラッシュ命令（例えばＣＬＦＬＵＳＨ、ＣＬＦＬＵＳＨＯＰＴまたはＣＬＷＢ命令）が全体的に可視になる場合、メモリに受諾されてよい。
【００３０】
ブロック３３６において、非依存性ワークは、永続コミット区分命令が、永続コミットブロック命令がブロック３３７で実行される前に、ブロック３３５で実行された後、オプションとして実行され得る。「非依存性」のワークという用語は、実行され得るワーク、コード、または任意の複数の命令のセットの中で、永続コミット区分命令および／または区分値が適用する複数のストアに依存する複数の命令を含まないものを指す。例えば、非依存性ワークは、永続コミット区分命令が実行された場合、メモリに受諾された全てのストアとは異なる複数のメモリ位置にアクセスする複数の命令のみを含んでよい。概念上、ソフトウェアは、状態の誤りのあるまたは不正確な複数の修正を引き起こさずに行うことができると知っている任意のワークを実行してよく、ソフトウェアが、後にソフトウェアからのアクションを完了することによって確認されるまで、一時的または推測的としてマークすることができると知っている複数の効果を持つワークを含む。
【００３１】
ブロック３３７において、永続コミットブロック命令の実施形態が実行され得る。いくつかの実施形態において、永続コミットブロック命令は、永続コミット区分命令によって取得されるまたは格納される区分値であってよい値、または少なくともそれに等しい値を有してよい発信元記憶位置を示してよい。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、区分値によって区分される（例えば、１または複数のメモリコントローラの複数の書き込み保留バッファ２２４を必ずしも抜け出していなかった、またはそこを出ていなかった）複数の永続メモリオペレーションへの少なくともオールストアが、永続コミットブロック命令の実行後に、複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを、保証させるように動作し得る。例えば、永続コミットブロック命令は、実行される場合、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことにはなっていない（例えば、必ずしも１または複数のメモリコントローラを抜け出していなかった、または出ていなかった）複数の永続メモリオペレーションへの少なくともオールストアが、永続コミットブロック命令の実行後に実行される前に、複数の永続メモリ命令への少なくとも任意のストアが永続的に格納されたことを、プロセッサに保証させるように動作し得る。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、複数の永続メモリオペレーションへの少なくとも全てのそのような区分されたストアが、永続コミットブロック命令がリタイアする、または他の場合にコミットする前に、永続的に格納されてきたことを保証させるように動作し得る。
【００３２】
いくつかの実施形態において、永続コミットブロック命令の確証または保証は、データの永続性または耐久性に関している。これは、電源障害および／または特定の他の複数のイべントの場合、データが失われ得る非永続メモリ（例えば、従来のメインメモリ）に関する保証をすることと同じものではない。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに如何なるデータも、プロセッサから直接またはアクティブに、強制して出すようにさせなくてよい（例えば、「フラッシュ」オペレーションを有していなくてよい）。むしろ、いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、少なくとも１つのタイプの追加的な複数の後続する命令を実行することを停止させ、または中断させ、いつ確証または保証が達成されたかをモニタリングさせ、次にプロセッサが少なくとも１つのタイプの追加的な複数の後続する命令を実行することを再開することを許可させるように動作し得る。いくつかの実施形態において、プロセッサは、複数の永続メモリ命令へのストアを実行することを停止または中断のみし得る。複数の他の実施形態において、プロセッサは、複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方を実行することを停止または中断し得る。さらに複数の他の実施形態において、プロセッサは、複数の永続メモリ命令へのストア、複数の非永続メモリ命令へのストア、および複数の他のタイプの命令（例えば、複数のレジスタ命令へのストア、全ての命令等）を実行することを停止または中断し得る。いくつかの実施形態において、永続コミットブロック命令は、永続メモリへの複数のバイト粒度またはキャッシュライン粒度（例えば、プロセッサのキャッシュラインのキャッシュラインサイズへの）ストアに関して確証または保証し得る。
【００３３】
ブロック３３８で、複数のストアは、再びフェンスされ得る。そのようなフェンスは、特定の実装例に応じて必要であってよく、または必要でなくてもよい。
【００３４】
ブロック３３９において、１または複数の後のストアが、永続メモリに対して実行され得る。これらの「後」のストアは、ブロック３３１で実行された複数の「前」のストアよりも後のものである。その上、ブロック３３１で実行された複数の前のストアは、ブロック３３５における永続コミット区分命令の実行の前に起こり、他方、ブロック３３９で実行された複数の後のストアは、永続コミット区分命令の実行の後に起こる。
【００３５】
図４は、永続コミット区分命令４０４の実施形態および永続コミットブロック命令４０６の実施形態を実行するように動作するプロセッサ４００の実施形態のブロック図である。いくつかの実施形態において、プロセッサ４００は、図３の方法３３０を実行し得る。本明細書において、プロセッサ４００について記載される複数のコンポーネント、複数の特徴および特定のオプションの詳細は、また、方法３００にオプションとして適用する。あるいは、方法３３０は、類似のまたは異なるプロセッサもしくは装置によって、且つ／または類似のまたは異なるプロセッサもしくは装置内において、オプションとして実行され得る。その上、プロセッサ４００は、方法３３０とは異なる複数の方法をオプションとして実行し得る。いくつかの実施形態において、プロセッサ４００は、図２のシステム２１０において含まれてよい。あるいは、プロセッサ４００は、異なるシステムにおいて含まれてよい。
【００３６】
いくつかの実施形態において、プロセッサ４００は、汎用プロセッサ（例えば、デスクトップ、ラップトップ、または他の複数のコンピュータにおいて用いられるタイプの汎用マイクロプロセッサまたは中央処理ユニット（ＣＰＵ））であってよい。あるいは、プロセッサは、特定用途用プロセッサであってよい。複数の適切な特定用途用プロセッサの複数の例は、限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ、（ＤＳＰ）、およびコントローラ（例えば、マイクロコントローラ）を含む。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）アーキテクチャ、縮小命令セットコンピューティング（ＲＩＳＣ）アーキテクチャ、超長命令語（ＶＬＩＷ）アーキテクチャ、ハイブリッドアーキテクチャ、複数の他のタイプのアーキテクチャのうちのいずれかを有してよく、または複数の異なるアーキテクチャの組み合わせを有してよい（例えば、複数の異なるコアは、複数の異なるアーキテクチャを有してよい）。
【００３７】
動作中、プロセッサは、永続コミット区分命令４０４を受信し得る。その後に、プロセッサは、永続コミットブロック命令４０６を受信し得る。例えば、これらの命令は、バスまたは他の相互接続を介してメモリから受信され得る。プロセッサは、デコードユニットまたはデコーダ４４２を含む。デコードユニットは、永続コミット区分命令４０４および永続コミットブロック命令４０６のそれぞれを受信し、デコードし得る。デコードユニットは、受信された複数の比較的より高レベルの命令を反映し、表し、且つ／またはそれらから導出される、１または複数の比較的低レベルの命令または制御信号（例えば、１または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコード命令、または制御信号等）を出力し得る。いくつかの実施形態において、デコードユニットは、複数の命令を受信する１または複数の入力構造（例えば、１または複数のポート、１または複数の相互接続、インタフェース）、それに結合された、複数の命令を認識しデコードする命令認識およびデコードロジック、それに結合された１または複数の、低レベルの命令または１または複数の制御信号を出力する１または複数の出力構造（例えば、１または複数のポート、１または複数の相互接続、インタフェース）を含んでよい。デコードユニットは、マイクロコードリードオンリメモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、およびデコードユニットを実装するのに適切な他のメカニズムを含むが、これらに限定はされない様々な異なるメカニズムを用いて実装されてよい。
【００３８】
プロセッサは、また、レジスタ４５２のセットも含む。いくつかの実施形態において、レジスタは、汎用レジスタであってよい。複数のレジスタのそれぞれは、データを格納するように動作するオンダイストレージ位置を表してよい。複数のレジスタは、複数のアーキテクチャ的に可視である、またはアーキテクチャ的なレジスタを表してよく、これらは、ソフトウェアおよび／またはプログラマに可視である、且つ／または、複数のオペランドを識別するべくプロセッサの命令セットの複数の命令によって示される複数のレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ（例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等）における複数の他の非アーキテクチャレジスタに比較される。複数のレジスタは、異なる複数のマイクロアーキテクチャにおいて複数の異なる態様で実装されてよく、如何なる特定のタイプの設計にも限定はされない。適切なタイプのレジスタの複数の例は、限定はされないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた複数の物理レジスタ、およびそれらの複数の組み合わせを含む。
【００３９】
いくつかの実施形態において、永続コミット区分命令４０４は、区分値が格納されるべきである送信先レジスタまたは他のストレージ位置を明確に（例えば、１または複数のフィールドまたはビットのセットを介して）指定し得る、または他の場合は、示し得る（例えば、黙示的に示す）。いくつかの実施形態において、永続コミットブロック命令４０６は、値（例えば、先行する永続コミット区分命令の区分値）が格納されるべきである発信元レジスタまたは他のストレージ位置を（例えば、１または複数のフィールドまたはビットのセットを介して）明確に指定し得る、または他の場合は指し示し得る（例えば、黙示的に示す）。一例として、これらの命令のそれぞれは、レジスタ（例えば、複数のレジスタ４５２のうち１つ）、メモリ位置、または他のストレージを指定する記憶位置指定フィールドをオプションとして有してよい。あるいは、記憶位置は、命令に対してオプションとして黙示的（例えば、そのオペコードに対して黙示的）であってよい。１つの特定の実施形態において、永続コミット区分命令は、区分値が格納されるべきである送信先記憶位置に対する特定の固定された汎用レジスタをオプションとして黙示的に示してよい（しかし、明確には指定しない）が、本発明の範囲は、そのように限定されない。１つの特定の実施形態において、永続コミットブロック命令は、区分値が取得されるべきであるその発信元（ｓｏｕｒｃｅ）記憶位置に対する同じ特定の固定された汎用レジスタをオプションとして黙示的に示してよい（しかし、明確には指定しない）が、本発明の範囲はそのように限定されない。
【００４０】
図４を再び参照し、実行ユニット４４４は、デコードユニット４４２、複数のレジスタ４５２および１または複数のメモリコントローラ４２２に結合されている。メモリコントローラは、いくつかの実施形態において、それがプロセッサ（例えば、オンダイ）の一部であってよく、他方、複数の他の実施形態において、プロセッサの外（例えば、チップセットコンポーネント上）にあってよいことから、メモリコントローラはオプション的である。実行ユニットは、複数の永続コミット区分および永続コミットブロック命令を表し、且つ／またはそれらから導出される１または複数のデコードされたもしくは他の場合は変換された命令もしくは制御信号を順に受信し得る。実行ユニットは、複数の永続コミット区分および永続コミットブロック命令に応答し、且つ／またはそれらの結果として（例えば、それぞれの命令からデコードされた１つまたは複数の命令もしくは制御信号に応答して）、それぞれの命令を実装する複数のオペレーションを実行するように動作する。
【００４１】
いくつかの実施形態において、実行ユニット４４４は、永続コミット区分命令に応答し、且つ／またはその結果として、区分値４５４を指定されたまたは他の場合、示された送信先記憶位置（例えば、複数のレジスタ４５２のうち１つ）において格納する４５８ように動作し得る。いくつかの実施形態において、区分値４５４は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、永続的に格納されたことに必ずしもなっていない複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合、メモリに受諾されてきたことにまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分し得る。
【００４２】
いくつかの実施形態において、実行ユニットは、１または複数のメモリコントローラ４２２からの区分値を受信してよい４５６。いくつかの実施形態において、複数のメモリコントローラのうち１つは、メモリに受諾されたが実際にはまだメモリに格納されていなかった（例えば、永続メモリ４２８に格納されなかった）複数の保留書き込みを、バッファリングまたは格納する書き込み保留バッファ４２４を有してよい。システムに採用される場合、プロセッサおよび永続メモリ４２８は、（例えば、バスまたは他の相互接続によって）結合され得る。図示される例において示されるように、ストアオペレーションＳ１からＳ５は、バッファにおいて格納され得る。例として、ストアオペレーションＳ１は、最初にバッファにおいて格納されたかもしれなく、ストアオペレーションＳ５は、最後にバッファにおいて格納されたかもしれない。必須ではないが先入れ先出し（ＦＩＦＯ）バッファの場合、Ｓ１は、最初にバッファを出てよく、次にＳ２、次にＳ３、等が出てよい。例として、ストアオペレーションＳ１からＳ４のみが、永続コミット区分命令が実行された時間にバッファに格納され、その後、新たなストアオペレーションＳ５がストアバッファにおいて格納された場合、区分４５４は、複数の前のストアオペレーションＳ１からＳ４を後のストアオペレーションＳ５から区分し、示し、または区別するのに十分な情報を含んでよい。例えば、タイムスタンプ、カウンタタグ、フラグ、トークン等の様々な異なるタイプの区分が可能である。示されるように、実行ユニットは、区分値を取得し格納する区分ユニット４４６を含んでもよい。
【００４３】
いくつかの実施形態において、実行ユニット４４４は、永続コミットブロック命令の結果に応答し、且つ／または永続コミットブロック命令の結果として、指定された、または他の場合は示された発信元記憶位置（例えば、複数のレジスタ４５２のうち１つ）から値を受信４６０するように動作し得る。いくつかの実施形態において、値は、対応する先行している永続コミット区分命令４０４の区分値４５４であってよい。例として、両方の命令は同一のレジスタを示してよく、永続コミット区分命令は、最初にレジスタに区分値を格納するように実行されてよく、次に、永続コミットブロック命令は、レジスタから区分値を読み取るように実行されてよい。
【００４４】
いくつかの実施形態において、実行ユニットは、また、永続コミットブロック命令に応答して、且つ／またはその結果として、区分値によって区分される、および／または、対応する永続コミット区分命令４０４が実行された前に１または複数のメモリコントローラ４２２に到達した、複数の永続メモリオペレーションへの少なくとも全てのストアが、複数の永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に（例えば、永続メモリ４２８において）格納されたことを保証するように動作し得る。いくつかの実施形態において、区分値は、先行する対応する永続コミット区分命令４０４が実行される場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行される場合、必ずしも永続的に格納されたことにはなっていない（例えば、未だに書き込み保留バッファ４２４にあってよい）複数の永続メモリオペレーションへの少なくとも全てのストアを区分し得る。
【００４５】
示されるように、実行ユニットは、ブロックおよびチェックユニット４５０を含んでよい。いくつかの実施形態において、ブロックおよびチェックユニットは、複数の永続メモリオペレーションへの区分されたストアの全て（例えば、より前の永続コミット区分命令４０４が実行された前にメモリコントローラに到達した）が、永続的に格納された（例えば、永続メモリ４２８に格納された）かどうかを反映する現在のステータスについて、少なくとも１つのメモリコントローラ（または場合によっては複数の他の実施形態においての複数の他のメモリシステムユニット）を繰り返しチェック４６２するように動作し得る。いくつかの実施形態において、ブロックおよびチェックユニットおよび／または実行ユニットは、永続コミットブロック命令の実行後に実行されることになっている１または複数のタイプの他の命令（例えば、複数の永続メモリ命令へのストアのみ、または複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方、または全ての命令）の実行をブロックまたは停止または中断するべく、複数の永続メモリオペレーションへの区分されたストアの全てが永続的に格納されたことをチェックが示すまで、ブロック信号４６４を他のパイプラインロジック４６７（例えば、特定の実装例に応じて、様々な異なるタイプであってよい）に提供するように動作し得る。いくつかの実施形態において、ブロック信号は、複数の追加のストアオペレーションが、メモリコントローラ４２２に入り、潜在的に永続的に格納されてしまうことを阻止し得る。いくつかの実施形態において、これは、複数の永続メモリオペレーションへの単なるストアのために行われてよい。複数の他の実施形態において、これは、複数の永続メモリオペレーションへのストアおよび複数の非永続メモリオペレーションへのストアの両方のために行われてよい。このように複数の命令の性能をブロックすることにより、プロセッサは、それが起こしたいこと（例えば、複数の区分されたストアが永続的になる）が実際に起こるまで停止して待機し、次に、それが起こった後に複数の命令の実行を再開することが、効果的に可能になり得る。永続コミットブロック命令に応答して実行される良好なチェック（例えば、複数の区分されたストアが永続になったことを示すこと）は、プロセッサが待機していたことが起こり、プロセッサが応答可能に再開し得ることを示すインジケーションとして機能し得る。
【００４６】
実行ユニットおよび／またはプロセッサは、複数の永続コミット区分および永続コミットブロック命令を実行するように動作する、特有または特定のロジック（例えば、複数のトランジスタ、集積回路、またはファームウェア（例えば、不揮発性メモリに格納された複数の命令）および／またはソフトウェアと潜在的に組み合わされた他のハードウェア）を含んでよい。複数の他の実施形態において、複数の異なる実行ユニットがオプションとして用いられ得るが、例示された実施形態においては、簡略化のため、同一の実行ユニットが永続コミット区分およびブロック命令の両方を処理するとして、示され記載される。
【００４７】
記載を不明瞭することを回避するべく、比較的単純なプロセッサが、示され記載されてきた。しかしながら、プロセッサは、複数の他のプロセッサコンポーネントをオプションとして含んでよい。例えば、様々な異なる実施形態は、様々な異なる組み合わせ、および図１０Ａ，１０Ｂ，１１，１２のいずれかについて示され記載される複数のコンポーネントの構成を含んでよい。プロセッサの全てのコンポーネントは、それらが意図されたように動作することが可能であるように、共に結合され得る。
【００４８】
有利に、ソフトウェアは、永続コミットブロック命令がコミットされる場合、先行する永続コミット区分命令の実行時にメモリシステムによって受諾された永続的な状態に対する変化を制御することはいずれも、より前のこれらの永続的な状態に対する変化を制御することに依存する永続コミットブロック命令に続く複数の後続のストアが、電源障害安全領域に達した前に、永続的または耐久的に格納されたという保証を得るべく、永続コミット区分および永続コミットブロック命令を用いてよい。これらの命令は、永続メモリへの複数のストアを順序付けるために用いてられてよく、発信元ることにより、制御されていない且つ／または不適切に順序付けられた永続メモリへの複数のストアは起こらず、永続的な状態の破損を引き起こさない。そのような保証をする能力が無ければ、ソフトウェアは、電源障害の時点で、複数のより前のストア（例えば、図３のブロック３３１における複数のより前のストア）が、永続的に格納されていたという保証は全くできないかもしれず、それは、永久的なデータの損失、破損した永続メモリ状態または同様のものをもたらす可能性がある。また、複数の依存するストアまたは複数の他のオペレーションが、メモリに受諾されたが区分時においてまだ永続的に格納されていない複数の区分されたストアまで進むのを防ぐことによって、ソフトウェアは、永続区分命令と永続ブロック命令との間のインターバルの間に複数の独立したオペレーションを自由に実行してよい。
【００４９】
特定の実装例に応じて、永続コミットブロック命令は、複数の比較的長い完了時間を有する傾向があってもよく、且つ／または、複数の完了時間は、比較的可変である傾向があってもよい。例として、１つの実装において、複数の完了時間は、一般におよそ百から数百クロックサイクル（例えば、潜在的に数百ナノ秒）であってよく、時折およそ数千クロックサイクル（例えば、潜在的におよそマイクロ秒）のより長い継続時間が起こり得ると推定される。そのような比較的長く、且つ／または比較的変わりやすい完了時間に対する１つの要因となる理由は、永続メモリへの複数のストアが、永続コミット区分命令が実行される時間にメモリに受諾された複数のストアの数、永続メモリに対する複数の典型的なアクセスレイテンシ、永続メモリへの複数のストアの時間分布および／または空間分布（例えば、永続メモリ範囲が重複する）、複数の永続メモリモジュール（使用される場合）における複数のパワーセーフキューの深さ、複数の書き込み増幅、永続メモリにおいて修正されている特定のラインが上書きまたは読み取りの対象であるか否か、および他の複数の要因等、複数の要因に部分的に依存し得るからである。その上、そのような比較的長く、且つ／または比較的変わりやすい完了時間に対する要因となる他の理由は、いくつかの実施形態において、これらの命令がグローバル永続性保証を実装するために用いられてよいことであり、それは、従って、永続コミット区分命令が実行される時に１つのメモリコントローラからだけでなく、潜在的に複数の異なるメモリコントローラから永続メモリへの複数のストアに部分的に依存し得る。
【００５０】
いくつかの実施形態において、永続コミット区分および永続コミットブロック命令は、永続メモリへの複数のストアをコミットするべく共に実行されてよい２つの異なる命令を表してよい。いくつかの実施形態において、２つの命令は、永続メモリへの複数のストアをコミットさせ、意図される保証を実現するべく、プロセッサ（例えば、メモリインタフェースユニットおよび／またはメモリコントローラ）のハードウェアを用いてスプリットハンドシェイクを実装するように共に実行されてよい。スプリットハンドシェイクは、区分値を得るべく、ハードウェアと連携するように永続コミット区分命令を実行することを含んでよい。しかしながら、永続コミット区分命令は、複数のストアオペレーションが永続的となることを阻止するべく、プロセッサに任意の複数のタイプの複数の命令を実行することを停止させなくてもよい。次に、スプリットハンドシェイクの第２の部分は、永続コミットブロック命令を実行し、それに続く１または複数の異なるタイプの命令（例えば、複数の永続メモリ命令へのストア、または複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方、または全ての命令）の実行をブロックするようにハードウェアと相互作用し、複数の区分命令は、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に（例えば、そうでなければそれらは正反対の順序で永続的に格納される可能性があることから）、永続的に格納されたことを保証する。
【００５１】
永続メモリへの複数のストアをコミットするためのこれらの２つの異なる命令をこのように用いることにより、ブロックすることがある期間延期され、または遅れることがオプションとして可能になる。ブロックまたは待機動作は延期されている間、他の非依存性ワーク（例えば、図３のブロック３３６で実行された非依存性ワーク）が、オプションとして非同期的に実行されてもよい。そのような非依存性ワークは、永続コミット区分命令の複数の区分されたストアオペレーションが永続的に格納されているまで同期的に待機する必要はないが（すなわち、ロックステップオペレーションは全く必要でない）、むしろ非依存性ワークは、これらのストアが永続的に格納されるようになる間に、非同期的および同時に実行されてよい。永続コミットブロック命令に関連するブロックまたは待機オペレーションは、実行ペナルティ（例えば、いくつかの実施形態において、少なくとも複数の永続メモリ命令へのストアの実行が保留される）を引き起こすことから、そのような無関係な、または少なくとも非依存性のワークが実行されることを許可する一方で、それを延期することにより、これらの命令を実行するために必要とされる全体的な実行ペナルティを低減することを援助してよい。例として、これは、ソフトウェアが、同一のコードの領域内からの永続メモリへの複数の異なる書き込みストリームを重複させ、不必要な全部の順序の代わりに複数の永続メモリコミットの間で必要な部分的順序を保証することをオプションとして可能にしてよい。さらに、ブロックまたは待機オペレーションが最終的に実行される場合（例えば、永続コミットブロック命令が実行される場合）、ブロックまたは待機時間は、区分永続コミットのいくつかが、永続コミット区分およびブロック命令が実行された複数の時期の間に起こることが可能であったことから、通常、より短い時間（平均で）であるだろう。
【００５２】
これらの命令は、ブロックする同期的待機を延期する能力を持つ、永続メモリへの複数のストアをコミットする軽量アーキテクチャメカニズムをソフトウェアに与えてよく、２つの命令が実行される複数の時期の間にプロセッサが非依存性ワークを非同期的に実行することを可能にしてよい。これは、ループの１つのイタレーションにおける複数の計算が、前方向のイタレーションにおいてコミットされるべきである複数の値を作成し、各イタレーションにおける複数の計算は、前の複数のイタレーションの複数の非同期的永続メモリコミットを収集し、より新たな複数の依存性の値を永続メモリにフローさせることを継続する、永続メモリのためのソフトウェアパイプラインを実現することを潜在的に且つオプションとして援助し得る。これは、インテル（登録商標）トランザクショナルシンクロナイゼーションエクステンション（インテル（登録商標）ＴＳＸ）を、潜在的に且つオプションとして十分に利用することを援助し得る。例えば、インテル（登録商標）ＴＳＸは、永続コミット区分の後に複数の依存性の将来の値を自由に生じさせ得るが、対応する永続コミットブロックが実行されるまで、それらが永続メモリに向かってフローしないようにする。複数の特定のコンセプトを更に図示するべく、以下の実施例コードを考慮されたい。ライン１    ｍｏｖ  ｍｅｍＸ，４  ／／永続メモリにおけるメモリ位置Ｘに４を書き込む。ライン２    ｍｏｖ  ｍｅｍＹ，９  ／／永続メモリにおけるメモリ位置Ｙに９を書き込む。ライン３    ｓｆｅｎｃｅ          ／／複数のストアをフェンスする。ライン４    ｃｌｗｂ  ｍｅｍＸ  ／／複数のキャッシュからＸを追い出す。ライン５    ｃｌｗｂ  ｍｅｍＹ  ／／複数のキャッシュからＹを追い出す。ライン６    ｓｆｅｎｃｅ      ／／複数のストアをフェンスする。ライン７    ｐｃ_ｄｅｍａｒｃａｔｅ  Ｒ    ／／永続コミット区分命令ライン８    ａｄｄ  ｒｅｇ２，１２  ／／レジスタ２に１２を加算する。ライン９    ｍｏｖ  ｍｅｍＺ，１８  ／／永続メモリにおけるメモリ位置Ｚに１８を書き込む。ライン１０    ａｄｄ  ｍｅｍＷ，２８  ／／非永続メモリにおけるメモリ位置Ｗに２８を加算する。ライン１１  ｐｃ_ｂｌｏｃｋ  Ｒ    ／／永続コミットブロック命令ライン１２  ａｄｄ  ｒｅｇ２，１７  ／／レジスタ２に１２を加算する。ライン１３  ｍｏｖ  ｍｅｍＷ，１４  ／／非永続メモリにおけるメモリ位置Ｗに１８を書き込む。ライン１４  ｍｏｖ  ｍｅｍＸ，１６  ／／永続メモリにおけるメモリ位置Ｘに１６を書き込む。
【００５３】
このコードにおいて、ｐｃ_ｄｅｍａｒｃａｔｅは永続コミット区分命令の実施形態であり、ｐｃ_ｂｌｏｃｋは永続コミットブロック命令の実施形態である。いくつかの実施形態において、ｐｃ_ｄｅｍａｒｃａｔｅまたはｐｃ_ｂｌｏｃｋは、いずれもライン８−１０の複数の命令の実行をブロックまたは阻止しない。いくつかの実施形態において、ライン８−１０の複数の命令が実行されてよく、ライン９の命令は、ライン１−２の複数の命令の複数のストアが永続的になったということが保証される前であっても、永続性にさらに格納し得る。
【００５４】
ライン１１のｐｃ_ｂｌｏｃｋ命令が実行された後、いくつかの実施形態において、ライン１１の命令に続く１または複数のタイプの命令の実行は、そこから結果として生じるであろう永続メモリへの任意の複数のストアと同様に、停止されてよい。複数の異なるタイプの命令は、複数の異なる実施形態において実行されることを阻止されてよい。いくつかの実施形態において、永続メモリへの複数のストアの実行は、停止されてよい（例えば、ライン１４の命令が停止されてよい）。複数の他の実施形態において、永続メモリへの複数のストアの実行が停止されてよく（例えば、ライン１４の命令が停止されてよい）、また、非永続メモリへの複数のストアの実行もオプションとして停止されてよい（例えば、ライン１３の命令もまた停止されてよい）。例として、プロセッサのパイプラインロジックは、永続メモリへの複数のストアおよび非永続メモリへの複数のストアのアドレス範囲を検査してよく（例えば、プロセッサの複数のレンジレジスタ（ｒａｎｇｅ  ｒｅｇｉｓｔｅｒ）によって構成されるように）、複数の命令を適宜に選択的に実行してよい、または実行しなくてもよい。さらなる複数の他の実施形態において、永続メモリへの複数のストアの実行は、停止されてよく（例えば、ライン１４の命令が停止されてよい）、非永続メモリへの複数のストアの実行はオプションとして停止されてよく（例えば、ライン１３の命令もまた停止されてよい）、複数のプロセッサアーキテクチャレジスタの複数のストアの実行は、オプションとして停止されてよく（例えば、ライン１２の命令もまた停止されてよい）、あるいは、全てでなくてもほとんどのタイプの複数の命令がオプションとして停止されてよい。これらの命令の実行のそのような停止は、ライン１１のｐｃ_ｂｌｏｃｋ命令に応答して、ｐｃ_ｄｅｍａｒｃａｔｅ命令の前に複数の永続メモリオペレーションへの全てのストアが、永続性に対してコミットされた（例えば、ライン１−２の複数の命令の複数のストアが永続的に格納された）と判断された場合、終了してよい。
【００５５】
図５は、メモリコントローラ５２２に到着するストアオペレーション５６８（例えば、Ｓ１、Ｓ２、Ｓ３、Ｓ４）に付されている単調増加値（Ｖ１、Ｖ２、Ｖ３、Ｖ４）を、複数の区分値５５４を決定するために用いるように動作するプロセッサの例示的実施形態５００のブロック図である。メモリコントローラは、複数の到着するストアオペレーション５６８を受信してよい。複数の到着するストアオペレーションは、複数の永続メモリオペレーションへの少なくとも何らかのストアを含んでよい。示されるように、複数の到着するストアオペレーションは、ストアオペレーションＳ１、Ｓ２、Ｓ３、およびＳ４を含んでよい。
【００５６】
メモリコントローラは、到着ストア値付加ユニット５７０を有する。到着ストア値付加ユニットは、単調増加値ジェネレータ５７２に結合されている。単調増加値ジェネレータは、メモリコントローラの一部であってよく、または一部でなくてもよい。単調増加値ジェネレータは、時間と共に単調増加値を生成するように動作する。適切な単調増加値ジェネレータの一例は、複数の到着するストアオペレーションをカウントする（例えば、新たなストアオペレーションが到着するたびにカウンタをインクリメントする）ように動作するストアオペレーション到着カウンタである。例えば、３つのストアオペレーションが順に到着する場合、最初のものには、カウントＸが与えられ、次のものにはカウント（Ｘ＋１）が与えられ、その次のものにはカウント（Ｘ＋２）が与えられてよい。適切な単調増加値ジェネレータの他の例は、時間値を増やし続けるように動作する自走クロックまたは他のタイマである。それぞれの到着するストアオペレーションは、そのストアオペレーションが到着したときを示すタイムスタンプ値でタグ付されてよい。単調増加値ジェネレータの複数の他の例もまた、企図される。
【００５７】
到着ストア値付加ユニット５７０は、単調増加値ジェネレータから現在値をそれぞれの到着するストアオペレーションにタグ付けする、または他の場合は付加するように動作し得る。例えば、第１の値（Ｖ１）は、第１の到着するストアオペレーション（Ｓ１）に付されてよく、第２の増加値（Ｖ２）は、その後に到着するストアオペレーション（Ｓ２）に付されてよい、等である。複数の付された値を持つ複数の到着するストアオペレーションは、書き込み保留バッファ５２４において格納されてよい。複数の付された値は、それらが書き込み保留バッファの中を移動するとき、複数のストアオペレーションと共に留まってよい。
【００５８】
メモリコントローラは、複数のストアオペレーションが複数のデパーティングストアオペレーション（ｄｅｐａｒｔｉｎｇ  ｓｔｏｒｅ  ｏｐｅｒａｔｉｏｎ）としてメモリコントローラを出る（例えば、バスで永続メモリへ送信される）前に、複数の付された値を抽出するように動作し得るデパーティングストアオペレーションの値抽出ユニット５７４を含む。示されるように、ストアオペレーションＳ１、Ｓ２、Ｓ３、およびＳ４は、値Ｖ１、Ｖ２、Ｖ３、およびＶ４無しで出て行ってよい。それぞれのストアオペレーションが順番にメモリコントローラを出ると、抽出ユニットは、最後の抽出値ストレージ５８０（例えば、スクラッチパッド、一時的なレジスタ等）に対応する抽出値を保存してよい。例として、複数の値が複数の対応するストアオペレーションがメモリコントローラに到着した複数の相対時間を示す複数のタイムスタンプである特定の場合に、ＦＩＦＯキューにおいて、抽出された最後の（対応するストアオペレーションが到着した時間を示す）タイムスタンプが保存されてよい。メモリコントローラは、また、書き込み保留バッファが空になるときを示すように動作する空インジケータ５７６をオプションとして有してもよい。
【００５９】
区分ユニット５４６は、メモリコントローラ５２２および／または単調増加値ジェネレータ５７２に結合されている。区分ユニットは、永続コミット区分命令５０４（例えば、１または複数のそこからデコードされた制御信号）に応答して、および／または永続コミット区分命令５０４の結果として、単調増加値ジェネレータから現在値を受信し５５６、受信した値を区分値としてレジスタ５５２に格納する５５８ように動作し得る。例として、ストアオペレーションＳ３がメモリコントローラについ最近到着したストアオペレーションであったときに永続コミット区分命令が実行された場合、到着値Ｖ３（例えば、到着カウンタ値、到着タイムスタンプ値等）は、単調増加値ジェネレータから受信され、区分値として格納されてよい。
【００６０】
ブロックおよびチェックユニット５５０は、レジスタ５５２およびメモリコントローラ５２２に結合されている。様々な実施形態において、ブロックおよびチェックユニットは、メモリコントローラの一部であるか、またはメモリコントローラから離れているがそれに結合されているかのいずれかであってよい。（例えば、別個の実行ユニットであってよい）。区分ユニットは、永続コミットブロック命令５０６（例えば、１または複数のそこからデコードされた制御信号）に応答して、且つ／または永続コミットブロック命令５０６の結果として、レジスタから区分値を受信する５６０ように動作し得る。ブロックおよびチェックユニットは、実行ユニットを出た、複数のデパーティングストアオペレーションから抽出された最終または最大値を決定するべく、最後の抽出値ストレージ５６２を繰り返しチェックする５６２ように動作し得る。ブロックおよびチェックユニットは、最後の抽出値ストレージからの最終または最大値が、区分値より大きい（または別の実施形態において、区分値より大きいかそれに等しい）かどうか、あるいは、空インジケータが、書き込み保留バッファが空であるかを示すかどうかを決定するように動作し得る。これらのいずれかが真であると判断される場合、ブロックおよびチェックユニットは、停止ブロック信号５６５を提供し得る。いくつかの実施形態において、停止ブロック信号は、最終または最大値が区分値未満である間に、永続コミットブロック命令に応答して実行が停止された１または複数のタイプの命令を実行することを再開させてよい。停止ブロック信号は、プロセッサが、起こるのを待機していたものが起こったことを示してよく、ここでプロセッサは、それがすでに実行を停止した１または複数のタイプの命令の実行を再開してよい。例として、最後の抽出値ストレージが到着カウンタ値Ｖ４（例えば、数５７４５６）を有し、区分値が値Ｖ３（例えば、５７４５５）を有する場合、ブロックおよびチェックユニットは、（例えば、Ｖ４に対する単調増加値がＶ３に対する単調増加値より大きいであろうことから）ブロックを停止することを決定してよい。他の場合、ブロックおよびチェックユニットは、最終または最大値が区分値未満である間、１または複数のタイプの命令の実行または遂行を停止させられるのをやめさせるべくブロック信号５６４を提供し続けるように動作し得る。
【００６１】
いくつかの実施形態において、区分値は、時間順序（例えば、メモリコントローラにおける複数のストアオペレーションの到着の時間順序）に関してよいが、他方、永続コミットブロック命令は、プログラム順序に関するブロックを実行してよい。システムに１または複数のキャッシュがある場合、メモリ順序（例えば、メモリコントローラにおける複数のストアオペレーションの到着の時間順序）とプログラム順序との間において直接的な相関はなくてよい。複数のキャッシュは、複数のキャッシュを介してされる複数のストアがメモリコントローラに到着する順序を変えてよい。例えば、これは、複数のストアがライトバック、ライトスルー、または複数のライトコンバインのタイプのストアであるかどうか、複数のキャッシュエビクションのタイミング等の複数の因子に依存してよい。
【００６２】
図６は、最大値セレクタ６８２の例示の実施形態のブロック図である。最大値セレクタは、単調増加クロックまたはタイマ６７２（例えば、自走クロックまたはタイマ）に結合されている。クロックまたはタイマは、到着するストア値付加ユニット５７０に複数の値を提供するために用いられてよい。これらの値は、最大値セレクタのＡＮＤロジック６８４に入力されてよい。空インジケータ６７６もまた、ＡＮＤロジックに入力されてよい。ＡＮＤロジックは、空インジケータが、書き込み保留バッファキュー空であることを示す場合、クロックまたはタイマからの値を出力するように動作可能である。ＡＮＤロジックおよび最後の抽出値ストレージ５８０からの最後の抽出値の出力は、最大値ストレージ６８６に入力される。空インジケータが、書き込み保留バッファキューが空であることを示さない限り、最大値ストレージは、最後の抽出値５８０を格納するように動作する。しかしながら、空インジケータが、書き込み保留バッファキューが空であることを示す場合、最大値ストレージは、通常、クロックまたはタイマ値６７２（例えば、通常増加し続ける）からの値であるだろう最大値を格納する。これは、空インジケータを明確にチェックしなければいけない必要性の回避を援助してよい。なぜならば、最大値ストレージの出力がそれを自動的に反映するからである。最大値ストレージの出力は、ブロックおよびチェックユニット５５０に提供される。
【００６３】
記載を単純化するべく、図５におけるアプローチの上記の検討は、単一のメモリコントローラという状況において記載された。しかしながら、このアプローチは、複数のメモリコントローラである場合も機能する。
【００６４】
図７は、複数のメモリコントローラ７２２を有するプロセッサの例示的実施形態７００のブロック図である。例示された実施形態において、プロセッサは、類似の態様で用いられる他の数のメモリコントローラをオプションとして有してもよいが、簡略化のため、第１のメモリコントローラ７２２−１および第２のメモリコントローラ７２２−２のみが示される。複数のメモリコントローラのそれぞれは、到着するストアオペレーション７６８−１、７６８−２を受信してよい。複数のメモリコントローラのそれぞれは、図５に関連してすでに記載されたように、複数の区分値を決定するために有用な複数の単調増加値を複数の到着するストアオペレーションに付加するための到着ストア値付加ユニット７７０−１、７７０−２を有する。
【００６５】
示されるように、いくつかの実施形態において、複数のメモリコントローラのそれぞれは、共通のクロック、タイマまたはカウンタ７７２を共有してよい。単一の共有される共通クロック、タイマ、またはカウンタは、複数の単調増加値を生成するように動作してよい。代替的実施形態において、単一の共有されるクロック、タイマ、またはカウンタを有する代わりに、複数のメモリコントローラのそれぞれは、異なる対応するクロック、タイマ、またはカウンタをオプションとして有してよく、これらの異なるクロック、タイマ、またはカウンタは、同期されてよく、あるいは他の場合、複数の相互に一貫性のある値を生じるようにさせられてよい。例えば、複数のストアオペレーションが２つの異なるメモリコントローラに同時に到着する場合、同期されたまたは相互に一貫性のある複数のクロックまたはタイマは、複数の同一のタイムスタンプ値を生成するであろう。クロック、タイマまたはカウンタを同期するための既知の複数のアプローチが適切である。１つの可能な例として、複数のクロックまたはタイマは、インテル（登録商標）クイックパスインターコネクトに基づくクロック交換および同期アプローチを用いてオプションとして同期され得る。
【００６６】
そのような複数の単調増加する同期された、またはそうでなければ相互に一貫性のある複数の値は、全てのメモリコントローラにわたってグローバルな関連性を有してよい。言い換えると、任意の第１の値が任意の第２の値より小さい場合、それは、第１の値に対応するストアオペレーションが、どのメモリコントローラに到着したかに関わらず、第２の値に対応するストアオペレーションの前に到着したことを意味する。これは、単一の区分値が決定され、全てのメモリコントローラにわたって複数の区分命令に従う複数の永続コミットを順序付けるのに用いられることを可能にするのに役立ち得る。
【００６７】
図７を再び参照すると、複数のメモリコントローラのそれぞれは、デパーティングストア値抽出ユニット７７４−１、７７４−２を、複数の抽出値７８０を抽出し出力するために有する。複数のメモリコントローラのそれぞれは、最大値セレクタ７８２−１、７８２−２を有する。いくつかの実施形態において、複数の最大値セレクタは、図６の最大値セレクタ６８２と同一であってよく、または類似してよい。示されるように、各メモリコントローラは、また、対応するストア保留バッファまたはキューが空であるときを示す空インジケータ７７６−１、７７６−２を有する。複数の空のインジケーションは、それぞれの最大値セレクタを提供されてよい。複数の単調増加する、相互に一貫性のある値（例えば、共通クロック、タイマ、またはカウンタ７７２からの、あるいはそうでなければ同期された、もしくは他の場合は相互に一貫性のある複数のクロック、複数のタイマ、または複数のカウンタからの）は、また、複数の最大値セレクタに提供され得る。複数の最大値セレクタは、複数の抽出値または空インジケータがバッファまたはキューが空であると示す場合には単調増加する相互に一貫性のある値（例えば、図６についてすでに記載されたように）のいずれかの最大値を選択するように動作し得る。最小値ストレージ７８８は、複数の最大値セレクタのそれぞれの出力と結合する。最小値ストレージは、全ての最大値セレクタの出力の最小値を格納し得る。この格納された最小値は、ブロックおよびチェックユニット５５０に提供され得る。全ての異なるメモリコントローラの最小値は、永続コミット区分命令によって取得された区分値が、出て行く最も小さい値を持つストアオペレーションに比較されることを保証する。そのような最小値を全ての異なるメモリコントローラをわたって使用することにより、最小値が、必要とされる全ての先行する、区分値によって差異化される永続性への永続コミットが、全ての異なるメモリコントローラにわたって永続性に関して完了したことを示す区分値より大きいかまたはそれに等しくなるまで、永続コミットブロック命令がブロックすることを可能にするのに役立ち得る。
【００６８】
いくつかの実施形態において、複数のメモリコントローラからの非ＦＩＦＯ永続性コミットの場合、スライドするビットマップウィンドウがオプションとして用いられ得る。スライドするビットマップウィンドウは、永続性にまだコミットされていなかった最小値、およびメモリコントローラもしくは複数のメモリコントローラのいずれかで発行された最大値まで及んでよい。ビットマップウィンドウの右端部を表し得る値Ｒは、ビットマップにおける最小値を表すとする。次に、値Ｒが区分値より大きいか、またはビットマップウィンドウに対して区分値と値Ｒとの間の差がゼロに等しいかのいずれかの場合、複数の待機されたストアオペレーションは、既に永続性にコミットされている。
【００６９】
図１に示されるように、いくつかの実施形態において命令セットは、必須ではないものの、永続コミットチェック命令１０８もまたオプションとして含んでよいことを思い出されたい。永続コミットチェック命令は、本明細書で開示される複数の他の命令に類似して、（例えば、デコードユニット４４２によって）デコードされてよく、（例えば、実行ユニット４４４または異なる実行ユニットによって）実行されてよい。
【００７０】
いくつかの実施形態において、永続コミットチェック命令は、現在のステータスまたは値が格納されるべきである送信先記憶位置を、（例えば、１または複数のフィールドまたは一組のビットを介して）明確に特定するか、または他の場合はそれを示してよい（例えば、黙示的に示す）。一例として、永続コミットチェック命令は、レジスタ（例えば、複数のレジスタ４５２のうち１つ）、メモリ位置、または他の送信先記憶位置を特定する記憶位置特定フィールドをオプションとして有してよい。あるいは、送信先記憶位置は、オプションとして命令に対して黙示的であってよい（例えば、それらのオペコードに対して黙示的である）。１つの特定の実施形態において、永続コミットチェック命令は、永続コミット区分命令の実施形態および／または永続コミットブロック命令の実施形態によって黙示的に示される汎用レジスタとは異なる汎用レジスタである、送信先記憶位置のための特定の一定の汎用レジスタをオプションとして黙示的に示してよい（しかし、明確に特定はしない）。そのような異なる複数のレジスタの黙示的な使用は、それぞれの永続コミット区分およびブロック命令によって用いられ得る区分値を上書きする必要性を回避することに役立ち得る。
【００７１】
いくつかの実施形態において、永続コミットチェック命令は、実行される場合、関連する実行ユニットおよび／またはプロセッサに、示された送信先記憶位置に値を格納させるように動作し得る。いくつかの実施形態において、値は、先行する対応する永続コミット区分命令によって区分された永続メモリオペレーションへの少なくとも全てのストア（例えば、示された複数の先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことになっていない複数の永続メモリオペレーションへのストア）が、ここで永続的に格納されたかどうかを示してよい。値は、いずれの特定区分値に必ずしも適用する必要はなく、むしろ、様々な区分値に適用してよい（例えば、複数のデパーティングストアオペレーションの現在のステータスを反映する単調増加値が、複数の区分値を表す複数の前のそのような単調増加値に適用してよい）。
【００７２】
いくつかの実施形態において、格納された値は、複数の永続メモリオペレーションへの区分されたストアがここで永続的に格納されたかどうかを示すだけでなく、複数の区分されたストアオペレーションの現在のレベルもしくはステータスまたは完了の指標もまた示してよい。完了の複数の異なる指標が、複数の異なる実施形態に適切である。完了の複数の適切な指標の例は、限定はされないものの、区分された永続的ストアの完了に必要とされる推定時間、永続的に格納された区分された永続的ストアの推定割合、区分値と、つい最近出て行った永続メモリへのストアオペレーションを反映する値との間の差、等を含む。例として、様々な実施形態において、永続コミットチェック命令は、実行される場合、関連する実行ユニットおよび／またはプロセッサに、図５における最後の抽出値ストレージ５８０、図６における最大値ストレージ６８６、図７の最小値ストレージ７８８、または同様のもののうち１つを読み取らせるように動作し得る。いくつかの実施形態において、すでに記載された複数の永続コミットブロック命令とは対照的に、永続コミットチェック命令は、実行される場合、任意の複数のタイプの命令の実行を、ブロック、停止または中断しなくてよい。
【００７３】
永続コミットチェック命令の１つの具体例の実施形態は、区分値を有する発信元レジスタおよび完了値のレベルを格納するように用いられる送信先レジスタを示してよい。区分値によって区別される複数の永続メモリオペレーションへの全ての区分されたストアが、永続的に格納された場合、完全完了を示す値（例えば、ゼロ値）が送信先において格納され得る。他の場合、進捗度またはステータスの現在のレベルを示す値が格納され得る。このステータスまたは進捗度のレベルは、ソフトウェアが、複数の永続メモリオペレーションへの区分されたストアが完了したまでの時間を推定するために用いてよい（ソフトウェアが様々な方式で限定無く行ってよい）ヒントとして機能してよい。これは、適切な永続コミットチェック命令の単なる１つの実例的な例である。
【００７４】
いくつかの実施形態において、永続コミットチェック命令は、永続コミット区分命令および永続コミットブロック命令と併せて用いられてよい。例えば、いくつかの実施形態において、永続コミットチェック命令の１または複数の例は、ソフトウェアが、永続コミット区分命令に先行し、区分値によって区分された複数のストアオペレーションの永続的ストレージを完了することに向かって進捗またはステータスの現在のレベルを測定もしくは決定することを可能にするべく、永続コミット区分命令の後にオプションとして用いられてよい。発信元ることにより、ソフトウェアは、後続の永続コミットブロック命令の実行を延期することを継続するか否かを決定し得る。上記のように、永続コミットブロック命令は、ブロックオペレーションを実行してよく、従って関連する実行ペナルティを有してよい。さらに、全ての先行するストアが永続性に対してコミットされるために必要な時間は、潜在的に長く、且つ／または潜在的に可変であり得る。それに応じて、永続コミットチェック命令の考えられる利点は、ソフトウェアがそのような潜在的に長く、且つ／または潜在的に可変である複数の時間を測定しそれに適応し、適切な且つオプションとして最大に延期された時間まで永続コミットブロック命令を実行することをオプションとして延期することを可能にするのに役立つことである。
【００７５】
図８は、永続コミットチェック命令の実施形態が、永続コミット区分命令の実施形態および永続コミットブロック命令の実施形態と共に用いられてよいプロセッサで実行される方法８９０の１つの可能な例のブロックフロー図である。方法は、ブロック８９１で永続コミット区分命令を実行することを含む。これは、本明細書の他の箇所において記載されるように行われてよい。方法は、ブロック８９２で非依存性ワークを実行することをオプションとして含む。本明細書において他の箇所で記載されるように、これは、永続コミット区分命令に関連する区分値によって区分される永続メモリへの複数のストアに依存しないワークを表してよい。
【００７６】
ブロック８９３において、永続コミットチェック命令が実行されてよい。いくつかの実施形態において、これは、複数の永続メモリオペレーションへの全ての区分されたストアが完了したか否かを示す値を読み取ること、または他の場合、決定し格納することを含んでよい。いくつかの実施形態において、値は、これらの区分されたストアオペレーションを、任意の複数の命令の実行をブロックまたは阻止せずに永続的に格納することに向けて、現在のステータスもしくはレベルを示してよい。例として、様々な実施形態において、これは、図５における最後の抽出値ストレージ５８０、図６における最大値ストレージ６８６、図７における最小値ストレージ７８８、または同様のもののうち１つを、任意の複数の永続ストアオペレーションをブロックまたは阻止せずに読み取りレジスタに格納することを含んでよい。
【００７７】
ブロック８９４において、非依存性のワークをさらに行う時間があるか否かについての決定がされてよい。例えば、ソフトウェアは、永続コミットチェック命令によって読み取られて格納された値にアクセスし、それを永続コミット区分命令によって格納された区分値と比較してよい。違いが十分に大きい場合、例えば、違いが設定可能な閾値を超える場合、非依存性のワークをさらに行うための十分な時間があるという決定であってよい（すなわち、「ｙｅｓ」が決定であってよい）。そのような場合、ソフトウェアは、非依存性のワークをさらにオプションとして実行されてよいブロック８９２を再び訪れることをオプションとして決めてよい。逆に、違いが十分に大きいとソフトウェアによって認識されない場合、例えば、違いが設定可能な閾値を超えない場合、非依存性のワークをさらに行う十分な時間が無いという決定であってよい（すなわち、「ｎｏ」が決定であってよい）。そのような場合、方法は、ブロック８９５へ進んでよい。例として、これは、言語レベルコルーチンでオプションとして実行されてよい。この構成概念は、複数の独立変数に影響を与えるトランザクションのグループが、複数の恒久性のコミットが達成されるインターバルで制御を前後に渡し、プロセッサ使用に重複し得る、複数のソフトウェアパイプラインのトランザクションのより容易な構造をオプションとして可能にし得る。
【００７８】
ブロック８９５において、永続コミットブロック命令が実行されてよい。すでに記載されたように、永続コミットブロック命令は、実行される場合、１または複数のタイプの永続コミットブロック命令に続く複数の後続の命令（例えば、複数の永続メモリ命令へのストア、永続メモリへのストアおよび非永続メモリ命令へのストアの両方、全ての命令等）の実行を、先行する永続コミット区分命令によって区分される複数の永続メモリオペレーションへの全てのストアが永続的に格納されるまで、ブロックまたは停止するように動作し得る。これは、実行ペナルティを引き起こし得る。しかしながら、別個の命令において永続コミット区分命令からのブロックオペレーションを有することによって、この実行ペナルティを低減することを助ける。さらに、非ブロック永続コミットチェック命令を有することによって、ソフトウェアは、進捗度を測定し、永続コミットブロック命令がどのくらい長く延期され得るかを知的に決定してよく、それにより、更に実行ペナルティを縮小することに役立つ。ソフトウェアは、永続コミットブロック命令が、永続コミットチェック命令の複数の指標に基づいて再び何度も繰り返して延期され（例えば、最大にさえも延期され）、次にそれが必要とされる前に実行されてよい完了オペレーションのポールリング（ｐｏｌｌｅｄ‐ｆｏｒ‐ｃｏｍｐｌｅｔｉｏｎ‐ｏｐｅｒａｔｉｏｎ）を実装するべく、異なる時期に連続して実行される永続コミットチェック命令の複数の例を用いてよい。あるいは、ソフトウェアは、それが永続コミットブロック命令を全く実行する必要がないことを保証するべく、永続コミットチェック命令を用いてよい。有利に、そのような複数の命令は、ソフトウェアが、メモリに受諾されたが、１または複数のメモリコントローラをまだ出ていなかった複数のストアを永続的に順序付けるのに必要とされる潜在的に長い、および／または潜在的に可変である複数の時間を効率的に処理することが許可することを援助してよい。
【００７９】
図９は、プロセッサ９００の実施形態のブロック図である。プロセッサは、命令セット９０２を有する。示されるように、いくつかの実施形態において、必須ではないものの、命令セットは、単一のドメイン永続コミット区分命令９０４、単一のドメイン永続コミットブロック命令９０６、およびオプションとしてある単一のドメイン永続コミットチェック命令９０８を含んでよい。あるいは、複数の他の実施形態において、命令セットは、複数の例示された命令の（例えば、これらの命令のうち任意の単一のものほど僅かである）サブセットをオプションとして含んでよい。
【００８０】
いくつかの実施形態において、これらの命令のそれぞれは、複数のメモリコントローラ領域の代わりに単一のメモリコントローラ領域に適用し得ることを除けば、上記で開示された対応してネーミングされた複数の命令に類似してよい。いくつかの実施形態において、複数の命令は、その領域を特定し、または他の場合は示し得る（例えば、論理プロセッサ識別子を示し得る）。いくつかの実施形態において、これらの命令のそれぞれは、複数のメモリコントローラのそれぞれに対して独立して動作し得る。ソフトウェアは、複数のメモリコントローラの全てまたはいくつかのいずれかに対して、これらの命令を順に用いてその依存性がそれぞれのメモリコントローラにおいて並行して満たされていることを保証してよい。例えば、ソフトウェアは、別々のメモリコントローラ毎のハンドシェイク（例えば、各メモリコントローラ領域において別々の複数の区分値）を持つマルチメモリコントローラ永続性ハンドシェイクを総合的に扱ってよい。これは、ソフトウェアが、特にその全てのオペレーションが単一の不均等メモリアクセス（ＮＵＭＡ）領域に設計によって限定される場合、効率的に作用することを許可する。そのような場合、ソフトウェアは、単一のＮＵＭＡ領域において順序付けを実行する必要があるだけでよい。
【００８１】
これらの単一領域命令の１つの可能性のある利点は、柔軟性およびメモリコントローラのサブセットのみとのハンドシェイクを必要とする永続コミットブロック命令をストール（ｓｔａｌｌ）させなくてもよいことから得られる潜在的なパフォーマンス利益（例えば、特定のトランザクションのための全てのキャッシュラインが同一のＮＵＭＡ領域にあることが既知である場合）である。このスキームは、１つのメモリコントローラにおける待機もまた、他の複数のメモリコントローラがドレインするために取る時間をカバーし得ることから、より多くの命令を用いる一方、それは、対応してより多い数のストールを必ずしも有していない。
【００８２】
図７および図９は、複数のメモリコントローラに対して適切な２つの異なる実施形態を示す。これらの異なる実施形態は、相互に排他的ではないが、むしろオプションとして一緒に用いられてよい。そのような単調増加値の使用は、実施形態が実装され得る１つの可能な態様である。しかしながら、複数の他の形態もまた熟慮される。例えば、１つの可能なアプローチは、複数の任意の新しい値が区分およびブロック命令の間に行くことを許可せずに、全てのメモリコントローラが完全にドレインし、空になるように強制することである。さらに、複数の他の形態は、当技術分野における、本開示の利益を有する当業者らにとって明らかになるだろう。例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
【００８３】
複数のプロセッサコアは、複数の異なる目的のために、複数の異なる態様で実装されてよく、複数の異なるプロセッサにおいて実装されてよい。例えば、そのような複数のコアの複数の実装は、１）汎用コンピューティングを対象とした汎用インオーダコア、２）汎用コンピューティングを対象とした高性能の汎用アウトオブオーダコア、３）主にグラフィクスおよび／または科学的用途（スループット）コンピューティングを対象とした特定用途向けコアを含んでもよい。複数の異なるプロセッサの複数の実装は、１）汎用計算を対象とした１または複数の汎用インオーダコアおよび／または汎用計算を対象とした１または複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主にグラフィクスおよび／または科学的用途（スループット）を対象とした１または複数の特定用途用コアを含むコプロセッサを含んでもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージにおいての別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合によっては、統合グラフィクスおよび／または科学的用途（スループット）ロジックのような特定用途向けロジック、または特定用途用コア等と呼ばれる）、および４）同じダイ上に、記載されたＣＰＵ（場合によっては、１または複数のアプリケーションコアまたは１または複数のアプリケーションプロセッサと呼ばれる）、上に記載されたコプロセッサ、および追加の機能性を含み得るシステムオンチップを含んでもよい。複数の例示的なコアアーキテクチャが、次に記載され、例示的な複数のプロセッサおよび複数のコンピュータアーキテクチャが次に記載される。例示的なコアアーキテクチャインオーダおよびアウトオブオーダコアブロック図 
【００８４】
図１０Ａは、本発明の複数の実施形態に従って例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１０Ｂは、本発明の複数の実施形態に従って、プロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１０Ａ−Ｂにおける複数の実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方、複数の破線のボックスで示されるオプションの追加は、レジスタリネーミング、アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が記載される。
【００８５】
図１０Ａにおいて、プロセッサパイプライン１０００は、フェッチステージ１００２、長さデコードステージ１００４、デコードステージ１００６、割り当てステージ１００８、リネーミングステージ１０１０、スケジューリング（ディスパッチまたは発行としても既知の）ステージ１０１２、レジスタ読み取り／メモリ読み取りステージ１０１４、実行ステージ１０１６、ライトバック／メモリ書き込みステージ１０１８、例外ハンドリングステージ１０２２、およびコミットステージ１０２４を含む。
【００８６】
図１０Ｂは、実行エンジンユニット１０５０に結合されるフロントエンドユニット１０３０を含むプロセッサコア１０９０を示し、両方ともメモリユニット１０７０に結合されている。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別のオプションとして、コア１０９０は例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット（ＧＰＧＰＵ）コア、グラフィクスコア等の特定用途のコアであってよい。
【００８７】
フロントエンドユニット１０３０は、命令キャッシュユニット１０３４に結合された分岐予測ユニット１０３２を含み、命令キャッシュユニット１０３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１０３６に結合される。ＴＬＢ１０３６は、命令フェッチユニット１０３８に結合される。命令フェッチユニット１０３８は、デコードユニット１０４０に結合される。デコードユニット１０４０（またはデコーダ）は、複数の命令をデコードし、出力として、１または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、複数のその他の命令、または複数の元の命令からデコードされる、そうでなければそれらを反映する、またはそれらから導出されるその他の複数の制御信号を生成してよい。デコードユニット１０４０は、様々な異なるメカニズムを用いて実装されてよい。複数の好適なメカニズムの例は、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア１０９０はマイクロコードＲＯＭまたはある特定の複数のマクロ命令のためのマイクロコード（例えばデコードユニット１０４０内またはそうでなければフロントエンドユニット１０３０内）を格納する他の媒体を含む。デコードユニット１０４０は、実行エンジンユニット１０５０内のリネーム／アロケータユニット１０５２に結合されている。
【００８８】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４および１または複数のスケジューラユニット１０５６のセットに結合されたリネーム／アロケータユニット１０５２を含む。１または複数のスケジューラユニット１０５６は、複数の予約ステーション、中央の命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。１または複数のスケジューラユニット１０５６は、１または複数の物理レジスタファイルユニット１０５８に結合されている。複数の物理レジスタファイルユニット１０５８のそれぞれは、１または複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等のそれぞれが１または複数の異なるデータタイプを格納する複数の異なるものを表す。一実施形態において、１または複数の物理レジスタファイルユニット１０５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供してよい。１または複数の物理レジスタファイルユニット１０５８は、リタイアメントユニット１０５４によって重ねられ、（例えば、１または複数のリオーダバッファおよび１または複数のリタイアメントレジスタファイルを用いて、１または複数の将来のファイル、１または複数のヒストリバッファ、および１または複数のリタイアメントレジスタファイルを用いて、レジスタマップおよび複数のレジスタのプールを用いる等）レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な方式を示す。リタイアメントユニット１０５４および１または複数の物理レジスタファイルユニット１０５８は１または複数の、実行クラスタ１０６０に結合される。１または複数の実行クラスタ１０６０は、１または複数の実行ユニット１０６２のセットおよび１または複数のメモリアクセスユニット１０６４のセットを含む。実行ユニット１０６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態は、複数の特定の機能または複数の機能の複数のセットに専用の多数の実行ユニットを含んでよい一方で、複数の他の実施形態は、全ての機能を全て実行する１つのみの実行ユニットまたは複数の実行ユニットを含んでよい。１または複数のスケジューラユニット１０５６、１または複数の物理レジスタファイルユニット１０５８および実行クラスタ１０６０は、場合によっては複数であるとして示される。その理由は、複数の特定の実施形態が、複数の特定のタイプのデータ／複数のオペレーションに対する複数の別個のパイプライン（例えば、それぞれがそれら自体のスケジューラユニットを有するスカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン、１または複数の物理レジスタファイルユニット、および／または実行クラスタ、および、別個のメモリアクセスパイプラインの場合、複数の特定の実施形態は、このパイプラインの実行クラスタのみが１または複数のメモリアクセスユニット１０６４を有するように実装される）を生成するからである。複数の別個のパイプラインが用いられる場合、これらのパイプラインのうち１または複数がアウトオブオーダ発行／実行され、残りがインオーダ発行／実行されてよいことは、また、理解されるべきである。
【００８９】
複数のメモリアクセスユニット１０６４のセットは、メモリユニット１０７０に結合される。メモリユニット１０７０は、データキャッシュユニット１０７４に結合されたデータＴＬＢユニット１０７２を含み、データキャッシュユニット１０７４は、レベル２（Ｌ２）キャッシュユニット１０７６に結合されている。例示的な一実施形態において、複数のメモリアクセスユニット１０６４は、ロードユニット、ストアアドレスユニット、および、ストアデータユニットを含み得、これらの各々は、メモリユニット１０７０内のデータＴＬＢユニット１０７２に結合されている。命令キャッシュユニット１０３４は、メモリユニット１０７０内のレベル２（Ｌ２）キャッシュユニット１０７６に更に結合される。Ｌ２キャッシュユニット１０７６は、１または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【００９０】
例として、例示的なレジスタリネーミングアウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１０００を実装してよい。１）命令フェッチ１０３８が、フェッチおよび長さデコーディングステージ１００２および１００４を実行する。２）デコードユニット１０４０が、デコードステージ１００６を実行する。３）リネーム／アロケータユニット１０５２が、割り当てステージ１００８およびリネーミングステージ１０１０を実行する。４）１または複数のスケジューラユニット１０５６が、スケジュールステージ１０１２を実行する。５）１または複数の物理レジスタファイルユニット１０５８およびメモリユニット１０７０が、レジスタ読み取り／メモリ読み取りステージ１０１４を実行する。実行クラスタ１０６０が、実行ステージ１０１６を実行する。６）メモリユニット１０７０および１または複数の物理レジスタファイルユニット１０５８が、ライトバック／メモリ書き込みステージ１０１８を実行する。７）様々なユニットが、例外ハンドリングステージ１０２２に関与してよい。８）リタイアメントユニット１０５４および１または複数の物理レジスタファイルユニット１０５８が、コミットステージ１０２４を実行する。
【００９１】
コア１０９０は、本明細書において記載される１または複数の命令を含め、１または複数の命令セット（例えば、ｘ８６命令セット（より新しい複数のバージョンと共に追加されたいくつかの拡張を有する））、カリフォルニア州サニーベール（Ｓｕｎｎｙｖａｌｅ）のＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加の複数の拡張を有する））をサポートしてよい。一実施形態において、コア１０９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される複数のオペレーションがパックドデータを使用して実行されることを許可する。
【００９２】
コアは、マルチスレッディング（複数のオペレーションまたは複数のスレッドの２またはそれよりも多くの並列セットを実行）をサポートしてよく、時間スライスされたマルチスレッディング、同時マルチスレッディング（単一物理コアは、物理コアが同時にマルチスレッディングする複数のスレッドのそれぞれに対して論理コアを提供する）、またはそれらの組み合わせ（例えば、インテル（登録商標）ハイパースレッディング技術等におけるように時間スライスされたフェッチおよびデコードおよびその後の同時マルチスレッディング）を含む様々な態様において、そうしてよいことが理解されるべきである。
【００９３】
レジスタリネーミングは、アウトオブオーダ実行の文脈において記載されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることが理解されるべきである。プロセッサの例示された実施形態が、別個の命令およびデータキャッシュユニット１０３４／１０７４および共有Ｌ２キャッシュユニット１０７６も含む一方、複数の代替的な実施形態は、例えばレベル１（Ｌ１）内部キャッシュまたは複数レベルの内部キャッシュ等の複数の命令およびデータの両方に対する単一の内部キャッシュを有してよい。いつかの実施形態において、システムは、内部キャッシュとコアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコアおよび／またはプロセッサの外部にあってもよい。具体的な例示的インオーダコアアーキテクチャ
【００９４】
図１１Ａ−Ｂは、コアが、チップ内のいくつかのロジックブロック（同じタイプおよび／または複数の異なるタイプの複数の他のコアを含む）のうち１つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を介して何らかの固定機能ロジック、複数のメモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏロジックと通信する。
【００９５】
図１１Ａは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク１１０２、およびそのレベル２（Ｌ２）キャッシュ１１０４のローカルサブセットへのその接続を伴う単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ１１００が、パックドデータ命令セット拡張を持つｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６は、スカラおよびベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを許可する。一実施形態では（設計を単純化するべく）、スカラユニット１１０８およびベクトルユニット１１１０は、複数の個別のレジスタセット（それぞれ、スカラレジスタ１１１２およびベクトルレジスタ１１１４）を用い、それらの間で転送されたデータがメモリに書き込まれ、次に、レベル１（Ｌ１）キャッシュ１１０６からリードバックされるが、本発明の複数の代替的な実施形態は、異なるアプローチを用いてもよい（例えば、単一のレジスタセットを用いるか、またはデータが、書き込まれてリードバックされずに、２つのレジスタファイルの間で転送されることを許可する通信経路を含む）。
【００９６】
Ｌ２キャッシュ１１０４のローカルサブセットは、プロセッサコア毎に１つの、複数の別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１１０４のそれ自身のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアによって読み取られたデータは、そのＬ２キャッシュサブセット１１０４内に格納され、複数の他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスするのと同時に迅速にアクセスされ得る。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のＬ２キャッシュサブセット１１０４内に格納され、複数の他のサブセットからフラッシュされる。リングネットワークは、共有されるデータに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、Ｌ２キャッシュ、および複数の他のロジックブロック等の複数のエージェントが、チップ内で互いに通信することを許可する。それぞれのリングデータパスは、１方向あたり１０１２ビット幅である。
【００９７】
図１１Ｂは、本発明の複数の実施形態による、図１１Ａにおけるプロセッサコアの一部の拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０４の一部であるＬ１データキャッシュ１１０６Ａ、並びにベクトルユニット１１１０および複数のベクトルレジスタ１１１４に関する更なる詳細を含む。具体的には、ベクトルユニット１１１０は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの１または複数を実行する、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１１２８を参照）である。ＶＰＵは、スウィズルユニット１１２０によるレジスタ入力のスウィズル、数値変換ユニット１１２２Ａ−Ｂによる数値変換、及び複製ユニット１１２４によるメモリ入力における複製をサポートする。複数の書き込みマスクレジスタ１１２６は、結果として生じる複数のベクトル書き込みのプレディケイティング（ｐｒｅｄｉｃａｔｉｎｇ）を許可する。統合メモリコントローラを有するプロセッサおよびグラフィクス
【００９８】
図１２は、本発明の複数の実施形態に従って、１つより多くのコアを有し、統合メモリコントローラを有し、また統合グラフィクスを有してよいプロセッサ１２００のブロック図である。図１２における複数の実線のボックスは、単一のコア１２０２Ａ、システムエージェント１２１０、および１または複数のバスコントローラユニット１２１６のセットを有するプロセッサ１２００を示す一方、オプションである追加の破線のボックスは、複数のコア１２０２Ａ−Ｎ、システムエージェントユニット１２１０内の１または複数の統合メモリコントローラユニット１２１４のセット、および特定用途用ロジック１２０８を有する代替例のプロセッサ１２００を示す。
【００９９】
従って、プロセッサ１２００の複数の異なる実装は、１）統合グラフィクスおよび／または科学的（スループット）ロジック（１または複数のコアを含み得る）である特定用途用ロジック１２０８、および１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、２つの組み合わせ）である複数のコア１２０２Ａ−Ｎを有するＣＰＵ、２）主にグラフィクスおよび／または科学的（スループット）を対象としたかなり多くの数の特定用途用コアである複数のコア１２０２Ａ−Ｎを有するコプロセッサ、および３）かなり多くの数の汎用インオーダコアである複数のコア１２０２Ａ−Ｎを有するコプロセッサを含み得る。従って、プロセッサ１２００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、高スループットの多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多くのコアを含む）、組み込みプロセッサ等の、汎用プロセッサ、コプロセッサまたは特定用途用プロセッサであってよい。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ１２００は、例えばＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳ等の多数の処理技術のいずれかを用いる１または複数の回路基板の一部であってよく、および／またはその上に実装されてもよい。
【０１００】
メモリ階層は、複数のコア内の１または複数のレベルのキャッシュ、複数の共有キャッシュユニット１２０６のセットまたはこれらの１または複数、および複数の統合メモリコントローラユニット１２１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュユニット１２０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他の複数のレベルのキャッシュ、最後のレベルのキャッシュ（ＬＬＣ）、および／またはそれらの組み合わせ等の１または複数の中間レベルキャッシュを含んでよい。一実施形態において、リングベースの相互接続ユニット１２１２は、統合グラフィクスロジック１２０８、共有キャッシュユニット１２０６のセット、およびシステムエージェントユニット１２１０／統合メモリコントローラユニット１２１４を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続する任意の数の既知の技術を用いてもよい。一実施形態において、コヒーレンシが、１または複数のキャッシュユニット１２０６および複数のコア１２０２Ａ−Ｎの間で維持される。
【０１０１】
いくつかの実施形態において、コア１２０２Ａ−Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント１２１０は、複数のコア１２０２Ａ−Ｎを調整し操作するそれらのコンポーネントを含む。システムエージェントユニット１２１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでよい。ＰＣＵはコア１２０２Ａから１２０２Ｎおよび統合グラフィクスロジック１２０８の電力状態を調整するのに必要なロジックおよび複数のコンポーネントであってよい、あるいはそれらを含んでよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０１０２】
複数のコア１２０２Ａ−Ｎは、アーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア１２０２Ａ−Ｎのうちの２またはそれよりも多くのコアは、同一の命令セットを実行可能であってもよいが、他のものは、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。例示的なコンピュータアーキテクチャ
【０１０３】
図１３−２１は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの当技術分野において既知の他のシステム設計および構成もまた適切である。一般的に、本明細書において開示されるようなプロセッサおよび／または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般に適切である。
【０１０４】
ここで図１３を参照すると、本発明の一実施形態によるシステム１３００のブロック図が示される。システム１３００は、コントローラハブ１３２０に結合される１または複数のプロセッサ１３１０、１３１５を含んでよい。一実施形態において、コントローラハブ１３２０はグラフィクスメモリコントローラハブ（ＧＭＣＨ）１３９０および入出力ハブ（ＩＯＨ）１３５０（個別の複数のチップ上にあってよい）を含む。ＧＭＣＨ１３９０はメモリ１３４０およびコプロセッサ１３４５が結合された複数のメモリおよびグラフィクスコントローラを含む。ＩＯＨ１３５０は複数の入出力（Ｉ／Ｏ）デバイス１３６０をＧＭＣＨ１３９０に結合させる。あるいは、メモリおよびグラフィクスコントローラのうちの一方または両方は、プロセッサに（本明細書において記載されるように）統合され、メモリ１３４０およびコプロセッサ１３４５は、ＩＯＨ１３５０を有する単一チップ内でプロセッサ１３１０およびコントローラハブ１３２０に直接結合される。
【０１０５】
複数の追加のプロセッサ１３１５のオプションの性質は、図１３内で複数の破線で示される。各プロセッサ１３１０、１３１５は、本明細書において記載される処理コアの１または複数を含んでよく、またプロセッサ１２００の何らかのバージョンであってよい。
【０１０６】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、または２つの組み合わせであってよい。少なくとも１つの実施形態に対して、コントローラハブ１３２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、クイックパスインターコネクト（ＱＰＩ）等のポイントツーポイントインタフェース、または同様の接続１３９５を介して１または複数のプロセッサ１３１０、１３１５と通信する。
【０１０７】
一実施形態において、コプロセッサ１３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ１３２０は、統合グラフィクスアクセラレータを含んでよい。
【０１０８】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の複数の特性等を含む、様々な利点の基準の範囲に関して、物理リ発信元１３１０、１３１５の間には様々な違いが存在し得る。
【０１０９】
一実施形態において、プロセッサ１３１０は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に埋め込まれているものは、複数のコプロセッサ命令であってよい。プロセッサ１３１０はこれらのコプロセッサ命令を、取り付けられたコプロセッサ１３４５によって実行されるべきタイプであると認識する。従って、プロセッサ１３１０はコプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令（または複数のコプロセッサ命令を表わす複数の制御信号）をコプロセッサ１３４５に対して発行する。コプロセッサ１３４５は、複数の受信されたコプロセッサ命令を受諾し実行する。
【０１１０】
ここで図１４を参照すると、本発明の実施形態による、第１のより具体的な例示的システム１４００のブロック図を示す。図１４に示される通り、マルチプロセッサシステム１４００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１４５０を介して結合された第１のプロセッサ１４７０および第２のプロセッサ１４８０を含む。プロセッサ１４７０および１４８０のそれぞれは、プロセッサ１２００の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０および１３１５である一方、コプロセッサ１４３８はコプロセッサ１３４５である。別の実施形態において、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０およびコプロセッサ１３４５である。
【０１１１】
プロセッサ１４７０および１４８０は、統合メモリコントローラ（ＩＭＣ）ユニット１４７２および１４８２をそれぞれ含むことが示される。プロセッサ１４７０は、また、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４７６および１４７８も含み、同様に第２のプロセッサ１４８０はＰ−Ｐインタフェース１４８６および１４８８を含む。プロセッサ１４７０、１４８０は、Ｐ―Ｐインタフェース回路１４７８、１４８８を用い、ポイントツーポイント（Ｐ―Ｐ）インタフェース１４５０を介して情報を交換してよい。図１４に示されるように、ＩＭＣ１４７２および１４８２は、複数のプロセッサをそれぞれのメモリ、すなわちメモリ１４３２およびメモリ１４３４に結合し、メモリ１４３２およびメモリ１４３４は複数のそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【０１１２】
プロセッサ１４７０、１４８０は各々、ポイントツーポイントインタフェース回路１４７６、１４９４、１４８６、１４９８を用い、個々のＰ−Ｐインタフェース１４５２、１４５４を介してチップセット１４９０と情報を交換してよい。チップセット１４９０は、高性能インタフェース１４３９を介してコプロセッサ１４３８と情報をオプションとして交換してよい。一実施形態において、コプロセッサ１４３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等の特定用途用プロセッサである。 
【０１１３】
共有キャッシュ（図示せず）は、いずれかのプロセッサ内または両方のプロセッサの外に含まれ得るが、プロセッサが低電力モードに配置された場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、Ｐ−Ｐ相互接続を介して複数のプロセッサとそれでも接続されてよい。
【０１１４】
チップセット１４９０は、インタフェース１４９６を介して第１のバス１４１６に結合され得る。本発明の範囲は限定されないものの、一実施形態において、第１のバス１４１６はＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、あるいはＰＣＩエクスプレスバスまたは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよい。
【０１１５】
図１４に示されるように、様々なＩ／Ｏデバイス１４１４が、第１のバス１４１６を第２のバス１４２０に結合するバスブリッジ１４１８と共に、第１のバス１４１６に結合され得る。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等の１または複数の追加のプロセッサ１４１５が、第１のバス１４１６に結合される。一実施形態において、第２のバス１４２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボードおよび／またはマウス１４２２、複数の通信デバイス１４２７、および命令／コードおよびデータ１４３０を含んでよいディスクドライブまたは他の大容量ストレージデバイス等のストレージユニット１４２８を含む様々なデバイスが、第２のバス１４２０に結合されてよい。更に、オーディオＩ／Ｏ  １４２４が第２のバス１４２０に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図１４のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【０１１６】
ここで図１５を参照すると、本発明の実施形態による、第２のより具体的な例示的システム１５００のブロック図が示される。図１４および図１５における同様の複数の要素は、同様の参照番号を有し、図１４の複数の特定の態様は、図１５の複数の他の態様を不明瞭にするのを回避するべく図１５から省略されている。
【０１１７】
図１５は、プロセッサ１４７０、１４８０が統合メモリおよびＩ／Ｏ制御ロジック（「ＣＬ」）１４７２および１４８２をそれぞれ含んでよいことを示す。従って、ＣＬ１４７２、１４８２は、複数の統合メモリコントローラユニットおよびＩ／Ｏ制御ロジックを含む。図１５は、メモリ１４３２、１４３４がＣＬ１４７２、ＣＬ１４８２に結合されるだけでなく、Ｉ／Ｏデバイス１５１４もまた、制御ロジック１４７２、１４８２に結合されることを図示する。レガシＩ／Ｏデバイス１５１５は、チップセット１４９０に結合されている。
【０１１８】
ここで図１６を参照すると、本発明の実施形態によるＳｏＣ１６００のブロック図が示される。図１２における同様の複数の要素は、同様の参照番号を有する。また、複数の破線のボックスは、より進化したＳｏＣにおけるオプションの複数の特徴である。図１６において、１または複数の相互接続ユニット１６０２は、１または複数のコア１２０２Ａ−Ｎおよび１または複数の共有キャッシュユニット１２０６のセットを含むアプリケーションプロセッサ１６１０、システムエージェントユニット１２１０、１または複数のバスコントローラユニット１２１６、１または複数の統合メモリコントローラユニット１２１４、統合グラフィクスロジックを含んでよい１または複数のコプロセッサ１６２０のセット、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサ、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１６３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１６３２、および１または複数の外部ディスプレイに結合するためのディスプレイユニット１６４０、に結合される。一実施形態において、１または複数のコプロセッサ１６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ等の特定用途用プロセッサまたは同様のものを含む。
【０１１９】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える複数のプログラマブルシステムにおいて実行される複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１２０】
図１４で図示されるコード１４３０等のプログラムコードは、本明細書において記載される複数の機能を実行し、出力情報を生成するべく複数の入力命令に適用されてよい。出力情報は、既知の様式で１または複数の出力デバイスに適用されてよい。本出願の複数の目的において、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０１２１】
プログラムコードは、処理システムと通信するべく、高レベル手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリまたはマシン言語で実装されてもよい。実際には、本明細書において記載される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合も、言語は、コンパイル型またはインタープリタ型言語であってよい。
【０１２２】
少なくとも１つの実施形態の１または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令によって実装されてよく、複数の代表的命令は、マシンによって読み取られるとき、マシンに、本明細書において記載される複数の技術を実行するロジックを作成させる。複数の「ＩＰコア」として既知のそのような複数の表現が、有形の機械可読媒体上に格納されてよく、様々な顧客または実際にロジックまたはプロセッサを作成する複数の製造機械にロードする製造施設に供給されてよい。
【０１２３】
そのような機械可読記憶媒体は、これらに限定されないが、ハードディスク、フロッピー（登録商標）ディスクを含む任意の他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスク等のストレージ媒体、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光カード等の半導体デバイス、または複数の電子命令を格納するのに適切な任意の他のタイプの媒体を含む、機械またはデバイスによって製造または形成される複数の非一時的で有形の構成の物品を含んでよい。
【０１２４】
従って、本発明の複数の実施形態は、本明細書において記載される複数の構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義する、ハードウェア記述言語（ＨＤＬ）等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体もまた含む。そのような複数の実施形態はまた、プログラムプロダクトとも呼ばれることもある。エミュレーション（バイナリ変換、コード、モーフィング等を含む）
【０１２５】
いくつかの場合において、発信元命令セットからターゲット命令セットへ命令を変換するべく、命令変換器が使用されてよい。例えば、命令変換器は、命令をコアによって処理される１または複数の他の命令に、トランスレート（例えば、スタティックバイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）、モーフィング、エミュレート、またはそうでなければ変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上またはプロセッサ外にあってよく、あるいは、一部がプロセッサ上または一部がプロセッサ外にあってもよい。
【０１２６】
図１７は、本発明の複数の実施形態による、発信元命令セットにおける複数のバイナリ命令を変換するソフトウェア命令変換器の使用と、ターゲット命令セットにおける複数のバイナリ命令とを対比するブロック図を図示する。例示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器はソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてよい。図１７は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６によってネイティブに実行され得るｘ８６バイナリコード１７０６を生成すべく、ｘ８６コンパイラ１７０４を使用して高レベル言語１７０２のプログラムがコンパイルされ得ることを示す。少なくとも１つのｘ８６命令セットコア１７１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同じ結果を達成するべく、（１）インテル（登録商標）ｘ８６命令セットコアの命令セットのかなりの部分、または（２）少なくとも１つのｘ８６命令セットコアを用いてインテル（登録商標）プロセッサ上で実行することを目標とした複数のアプリケーションまたは他のソフトウェアのオブジェクトコードの複数のバージョンを、互換を有した状態で実行する、またはそうでなければ処理することによって、少なくとも１つのｘ８６命令セットコアを用いるインテル（登録商標）プロセッサと実質的に同じ機能を達成できる任意のプロセッサを表す。ｘ８６コンパイラ１７０４は、追加のリンケージ処理を用い、またはそれを用いずに、少なくとも１つのｘ８６命令セットコア１７１６を用いるプロセッサ上で実行され得るｘ８６バイナリコード１７０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１７は、高レベル言語１７０２のプログラムが代替の命令セットコンパイラ１７０８を使用してコンパイルされることによって、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１７１４（例えば、カリフォルニア州サニーベール（Ｓｕｎｎｙｖａｌｅ）のＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベール（Ｓｕｎｎｙｖａｌｅ）のＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブに実行され得る代替の命令セットバイナリコード１７１０が生成され得ることを示す。命令変換器１７１２は、ｘ８６バイナリコード１７０６を、ｘ８６命令セットコアを有さないプロセッサ１７１４によってネイティブに実行され得るコードに変換するのに用いられる。この変換が可能な命令変換器を作成することは難しいので、この変換されたコードは代替の命令セットバイナリコード１７１０と同一でない可能性がある。しかしながら、変換されたコードは一般的なオペレーションを実現し、代替の命令セットからの複数の命令から成るであろう。従って、命令変換器１７１２は、エミュレーション、シミュレーション、または任意の他の処理を介して、プロセッサまたはｘ８６命令セットプロセッサもしくはコアを有さない他の電子デバイスがｘ８６バイナリコード１７０６を実行��ることを許可するソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
【０１２７】
図２および図５−７のいずれかに関して記載された複数のコンポーネント、複数の特徴および詳細もまた、図４のいずれにもオプションとして適用されてよい。その上、装置のいずれかに関して記載される複数のコンポーネント、複数の特徴および詳細は、また、複数の方法のいずれにもオプションとして適用してよく、複数の実施形態では、そのような装置によって、および／またはそのような装置を用いて実行されてよい。本明細書において記載された複数のプロセッサはいずれも、本明細書において開示された複数のコンピュータシステム（例えば、図１３−１６）のいずれかに含まれてよい。いくつかの実施形態において、コンピュータシステムは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）を含んでよい。あるいは、コンピュータシステムは、リフレッシュされる必要がないタイプの揮発性メモリまたはフラッシュメモリを含んでよい。本明細書において開示された複数の命令は、本明細書で示される複数のマイクロアーキテクチャのいずれかを有し、本明細書で示される複数のシステムのいずれかにおいて、本明細書で示される複数のプロセッサのいずれかを用いて実行されてよい。
【０１２８】
本記載および特許請求の範囲では、用語「結合された」および／または「接続された」は、それらの派生語と共に使用されることもあった。これらの用語は、互いに同義語であることは意図されていない。むしろ、複数の実施形態において、「接続された」は、２つまたはそれより多くの要素が互いに直接物理的および／または電気的に接触していることを示すために用いられてよい。「結合された」は、２つまたはそれより多くの要素が互いに直接物理的および／または電気的に接触していることを意味してよい。しかしながら、「結合された」はまた、２つまたはそれより多くの要素が互いに直接接触していないが、それでもまだ互いに協働し、または相互作用することも意味してよい。例えば、実行ユニットは、１または複数の介在するコンポーネントを介してレジスタおよび／またはデコードユニットに結合されてよい。複数の図において、複数の矢印が複数の接続および結合を示すのに用いられる。
【０１２９】
用語「および／または」が用いられることがあった。本明細書において用いられるように、用語「および／または」は、一方または他方または両方を意味する（例えば、Ａおよび／またはＢはＡまたはＢまたはＡおよびＢの両方を意味する）。
【０１３０】
上の記載では、具体的な詳細が複数の実施形態の完全な理解を提供するべく説明された。しかしながら、複数の他の実施形態は、これらの具体的な詳細のいくつかを用いずに実施されてよい。本発明の範囲は、上記で提供された複数の具体例によってではなく、以下の特許請求の範囲のみによって決定される。他の複数の例では、既知回路、構造、デバイスおよびオペレーションは、記載の理解を不明瞭にするのを回避するべくブロック図の形態および／または詳細を用いずに示された。適切と考えられる場合、参照番号、または参照番号の末尾部分は、複数の対応するまたは類似の要素を示すべく図間で繰り返された。そのような要素は、特定されるかまたは他の方法で明らかに明白でない限り、複数の同様または同一の特徴をオプションとして有してよい。
【０１３１】
複数の特定のオペレーションは、複数のハードウェア要素によって実行されてよく、またはマシン実行可能なもしくは回路実行可能な複数の命令で実施されてよく、それらのコンポーネントまたは命令は、複数のオペレーションを実行する複数の命令を用いてプログラミングされたマシン、回路、またはハードウェア要素（例えば、プロセッサ、プロセッサの一部、回路等）を与えてよい、および／または結果としてもたらしてよい。複数のオペレーションはまた、ハードウェアおよびソフトウェアの組み合わせによってオプションとして実行されてよい。プロセッサ、機械、回路、またはハードウェアは、特有または特定の回路を含んでよく、または他のロジック（例えば、ファームウェアおよび／またはソフトウェアと組み合わされる可能性のあるハードウェア）が、命令を実行および／または処理し、命令に応答して結果を格納するように動作する。
【０１３２】
いくつかの実施形態は、機械可読媒体を含む製造物品（例えば、コンピュータプログラム製品）を含む。媒体は、機械によって読み取り可能な形態で情報を提供する、例えば記憶するメカニズムを含んでよい。機械可読媒体は、機械によって実行された場合および／または実行されたときに、機械に、本明細書において開示されたオペレーション、方法または技術を実行させ、および／またはそれらを実行する機械を結果としてもたらすように動作する命令または複数の命令のシーケンスを提供するか、またはそこに記憶されていてもよい。
【０１３３】
いくつかの実施形態において、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピー（登録商標）ディスク、光記憶媒体、光ディスク、光学データストレージデバイス、ＣＤ‐ＲＯＭ、磁気ディスク、光磁気ディスク、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データ記憶装置等を含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号で構成されない。いくつかの実施形態において、記憶媒体は固形物を含む有形の媒体を含んでよい。
【０１３４】
複数の適切なマシンの複数の例は、限定はされないが、汎用プロセッサ、特定用途用プロセッサ、デジタル論理回路、集積回路等を含む。さらに、複数の適切なマシンの他の例は、プロセッサ、デジタル論理回路、または集積回路を含むコンピュータシステムまたは他の電子デバイスを含む。そのような複数のコンピュータシステムまたは複数の電子デバイスの例は、限定はされないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス（例えば、ルータおよびスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤ、スマートテレビ、ネットトップス、セットトップボックス、およびビデオゲームコントローラを含む。
【０１３５】
例えば「一実施形態」、「実施形態」、「１または複数の実施形態」、「いくつかの実施形態」に対する、本明細書全体にわたる参照は、特定の特徴が本発明の実施に含まれてよいが必ずしも含まれる必要はないことを示す。同様に、記載において様々な特徴は、本開示を簡素化し、様々な発明の態様の理解を援助する目的で、単一の実施形態、図、またはそれらの記載で時々一緒にグループ化される。しかしながら、本開示の方法は、本発明が各請求項で明示的に列挙されるよりも多くの特徴を必要とするという意図を反映しているとして解釈されるべきではない。むしろ、以下の特許請求の範囲は、発明の複数の態様が単一の開示された実施形態の全ての特徴より少ないままでとどまることを反映する。従って、これにより、詳細な説明に続く特許請求の範囲は、この詳細な説明に明示的に組み込まれ、各請求項は、本発明の別個の実施形態として自立している。例示的実施形態
【０１３６】
以下の複数の例は、更なる複数の実施形態に関する。複数の例における具体的事柄は、１または複数の実施形態のいずれの箇所で用いられてもよい。
【０１３７】
例１は、少なくとも１つのメモリコントローラ、および永続コミット区分命令をデコードするデコードユニットを含むプロセッサである。永続コミット区分命令は送信先記憶位置を示す。プロセッサは、また、デコードユニットおよび少なくとも１つのメモリコントローラに結合された実行ユニットも含む。実行ユニットは、永続コミット区分命令に応答して、送信先記憶位置に区分値を格納するべきである。区分値は、永続コミット区分命令が実行される場合メモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合にメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
【０１３８】
例２は、上記複数の永続メモリオペレーションへの少なくともオールファーストストアの少なくとも１つが、プロセッサのキャッシュラインに対応する、バイト粒度およびキャッシュライン粒度のうち１つで永続メモリに対してアドレスされることになっている、例１のプロセッサを含む。
【０１３９】
例３は、複数の汎用レジスタを更に含み、永続コミット区分命令は複数の汎用レジスタのうち１つにおいて送信先記憶位置を示すものである、例１のプロセッサを含む。
【０１４０】
例４は、プロセッサが、永続コミット区分命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールセカンドストアが、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的に格納される前に永続的に格納されることを阻止しないことになっている、例１のプロセッサを含む。
【０１４１】
例５は、例１のプロセッサを含み、例１のプロセッサにおいて、実行ユニットは、永続コミット区分命令に応答して区分値を格納することになっており、当該区分値は、永続コミット区分命令が実行される前に少なくとも１つのメモリコントローラで時々受信されたことになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行された後に少なくとも１つのメモリコントローラで時々受信されることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分することになっている。
【０１４２】
例６は、複数のメモリオペレーションへのストアのために複数の単調増加値を、複数のメモリオペレーションが少なくとも１つのメモリコントローラのうちの第１のメモリコントローラに到着するときに生成する単調増加値ジェネレータを更に含む、例１のプロセッサを含む。実行ユニットは、永続コミット区分命令に応答して、永続コミット区分が実行される前につい最近第１のメモリコントローラに到着したことになっているメモリオペレーションへのストアのために生成されたことになっている単調増加値を格納することになっている。
【０１４３】
例７は、単調増加値ジェネレータが到着カウンタを含む、例６のプロセッサを含む。
【０１４４】
例８は、単調増加値ジェネレータがタイマおよびクロックのうち１つを含む、例６のプロセッサを含む。
【０１４５】
例９は、少なくとも１つのメモリコントローラが複数のメモリコントローラを含む、例１のプロセッサを含む。プロセッサは、また、複数のメモリオペレーションへのストアにために、複数のメモリオペレーションが複数のメモリコントローラのそれぞれに到着するときに、単調増加し相互に一貫性のある複数の値を生成することになっている少なくとも１つの単調増加値ジェネレータをオプションとして含む。
【０１４６】
例１０は、少なくとも１つのメモリコントローラが複数のメモリコントローラを含む、例１のプロセッサを含む。実行ユニットは、永続コミット区分命令に応答して、区分値をオプションとして格納することになっており、当該区分値は、複数のメモリコントローラの複数のドメイン内にあることになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、複数のメモリコントローラの複数の領域内にまたあることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分することになっている。
【０１４７】
例１１は、例１のプロセッサを含み、例１のプロセッサにおいて、実行ユニットは、永続コミット区分命令に応答して、区分値を格納することになっており、当該区分値は、単一のメモリコントローラの領域内のみにあることになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、単一のメモリコントローラの領域内のみにまたあることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分することになっている。
【０１４８】
例１２は、デコードユニットが、永続コミットブロック命令をデコードすることになっている例１から１１のうちいずれか１つのプロセッサを含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示すことになっている。プロセッサは、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することになっている。
【０１４９】
例１３は、複数のレジスタを更に含む、例１２のプロセッサを含む。永続コミット区分命令は、複数のレジスタの所定のレジスタを、送信先記憶位置として黙示的に示すものである。永続コミットブロック命令は、オプションとして所定のレジスタを発信元記憶位置として黙示的に示すものである。
【０１５０】
例１４は、プロセッサが永続コミットブロック命令に応答して、永続コミットブロック命令の実行後に実行されることになっている上記複数の永続メモリ命令への少なくとも任意のストアの実行を、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的に格納されてしまうまで中断することになっている、例１２のプロセッサを含む。
【０１５１】
例１５は、プロセッサが、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への上記任意のストアが実行される前に、永続的にストアされたことを保証するが、必ずしも、永続コミットブロック命令の実行後に複数の永続メモリ命令への上記任意のストアが実行される前に、複数の非永続メモリ命令への任意のストアが永続的に格納されたことを保証しない、例１２のプロセッサを含む。
【０１５２】
例１６は、プロセッサが、永続コミットブロック命令に応答して、永続コミットブロック命令の実行後に上記複数の永続メモリ命令への任意のストアが実行される前であり、且つ永続コミットブロック命令の実行後に複数の非永続メモリ命令への任意のストアが実行される前に、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続的に格納されたことを保証することになっている、例１２のプロセッサを含む。
【０１５３】
例１７は、プロセッサが、永続コミットブロック命令に応答して、区分値を、複数のメモリオペレーションが少なくとも１つのメモリコントローラから出て行くときに複数のメモリオペレーションへのデパーティングストアから取得された複数の値と比較する、例１２のプロセッサを含む。
【０１５４】
例１８は、デコードユニットが永続コミットチェック命令をデコードすることになっている、例１から１１のうちいずれか１つのプロセッサを含む。永続コミットチェック命令は、送信先記憶位置を示すものである。プロセッサは、永続コミットチェック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的格納されたかどうかを示すことになっている永続コミットチェック命令によって示される送信先記憶位置に値を格納することになっている。
【０１５５】
例１９は、永続コミットチェック命令が区分値を有することになっている発信元記憶位置を示す、例１８のプロセッサを含む。
【０１５６】
例２０は、プロセッサが、永続コミットチェック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアを永続的に格納する進捗度のレベルを示すことになっている永続コミットチェック命令によって示される送信先記憶位置に値を格納することになっている、例１８のプロセッサを含む。
【０１５７】
例２１は、永続コミット区分命令を受信する段階を含む、プロセッサにおける方法である。永続コミット区分命令は、送信先記憶位置を示す。方法は、また、永続コミット区分命令に応答して、送信先記憶位置において区分値を格納する段階を含む。区分値は、永続コミット区分命令が実行されるときにメモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行されるときにメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
【０１５８】
例２２は、永続コミットブロック命令を受信する段階を更に含む、例２１の方法を含む。永続コミットブロック命令は、区分値を格納する発信元記憶位置を示している。方法は、また、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続コミットブロック命令に応答して、永続的に格納されたことを保証する段階も含む。
【０１５９】
例２３は、永続コミットチェック命令を受信する段階を更に含む、例２１の方法を含む。永続コミットチェック命令は、送信先記憶位置を示している。方法は、また、永続コミットチェック命令に応答して永続コミットチェック命令によって示された送信先記憶位置において、値を格納する段階を含む。永続コミットチェック命令に応答して格納されるべき値は、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続的に格納されたかどうかを示すものである。
【０１６０】
例２４は、相互接続を含む複数の命令を処理するシステム、および相互接続に結合されたプロセッサである。プロセッサは、永続コミット区分命令を受信するものである。永続コミット区分命令は、送信先記憶位置を示すものである。プロセッサは、永続コミット区分命令に応答して、送信先記憶位置において区分値を格納することになっている。区分値は、永続コミット区分命令が実行されるときにメモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行されるときにメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。システムは、また、相互接続に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）も含む。ＤＲＡＭは、複数の命令のセットを格納する。複数の命令のセットは、プロセッサによって実行されるとき、（１）上記複数の永続メモリオペレーションへの少なくともオールファーストストアに依存しない非依存性ワークを実行することを決定する段階と、（２）永続コミット区分命令を実行した後にワークを実行する段階とを含む複数のオペレーションをプロセッサに実行させる。
【０１６１】
例２５は、プロセッサが永続コミットブロック命令を受信することになっている、例２４のシステムを含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示す。プロセッサは、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することになっている。
【０１６２】
例２６は、非一時的機械可読記憶媒体を含む製造物である。非一時的機械可読記憶媒体は、永続コミット区分命令を格納する。永続コミット区分命令は、送信先記憶位置を示すものである。永続コミット区分命令は、マシンによって実行される場合、マシンに、送信先記憶位置において区分値を格納することを含む複数のオペレーションを実行させるものである。区分値は、永続コミット区分命令が実行される場合メモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合にメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
【０１６３】
例２７は、非一時的機械可読記憶媒体がまた、永続コミットブロック命令も格納する、例２６の製造物を含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示すものである。永続コミットブロック命令は、マシンによって実行される場合、マシンに、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することを含む複数のオペレーションを実行させるものである。
【０１６４】
例２８は、例１から２０のうちいずれか１つのプロセッサを含み、複数の分岐を予測するオプションの分岐予測ユニット、および分岐予測ユニットに結合されたオプションの命令プリフェッチユニットを更に含み、命令プリフェッチユニットは、命令を含む複数の命令をプリフェッチするものである。プロセッサは、また、命令プリフェッチユニットに結合された、複数の命令を格納するオプションのレベル１（Ｌ１）命令キャッシュ、データを格納するオプションのＬ１データキャッシュ、およびデータおよび複数の命令を格納するオプションのレベル２（Ｌ２）キャッシュをオプションとして含んでよい。プロセッサは、また、デコードユニットに結合された命令フェッチユニット、Ｌ１命令キャッシュ、およびＬ２キャッシュを、Ｌ１命令キャッシュおよびＬ２キャッシュのうち１つから命令をフェッチし、命令をデコードユニットへ提供するいくつかの場合において、オプションとして含んでよい。プロセッサは、また、複数のレジスタをリネームするレジスタリネームユニット、実行のために命令からデコードされた１または複数のオペレーションをスケジューリングするオプションのスケジューラ、および命令の複数の実行結果をコミットするオプションのコミットユニットもオプションとして含んでよい。
【０１６５】
例２９は、例２１から２３のうちいずれか１つの方法を実行するまたは実行するように動作するプロセッサまたは他の装置である。
【０１６６】
例３０は、例２１から２３のうちいずれか１つの方法を実行するための手段を含むプロセッサまたは他の装置である。
【０１６７】
例３１は、命令をオプションとして格納し、またはそうでなければ提供し、プロセッサ、コンピュータシステム、電子デバイスまたは他のマシンによって実行される場合および／または実行されるとき、マシンに例２１から２３のうちいずれか１つの方法を実行させるように動作する、非一時的マシン可読媒体をオプションとして含む製造物である。例３２は、実質的に本明細書において記載されたようなプロセッサまたは他の装置である。
【０１６８】
例３３は、実質的に本明細書において記載されたような任意の方法を実行するように動作するプロセッサまたは他の装置である。
【０１６９】
例３４は、実質的に本明細書において記載されたような任意の命令を実行する（例えば、実行する、または実行するように動作する複数のコンポーネントを有する）プロセッサまたは他の装置である。
【０１７０】
例３５は、第１の命令セットの複数の命令をデコードするデコードユニットを有するプロセッサを含むコンピュータシステムまたは他の電子デバイスである。
プロセッサは、また、１または複数実行ユニットを有する。
電子デバイスは、また、プロセッサに結合されたストレージデバイスも含む。
ストレージデバイスは、実質的に本明細書において開示されたような複数の命令のいずれかであってよい第１の命令を格納するものであり、第２の命令セットのものである。
ストレージデバイスは、また、第１の命令を第１の命令セットの１つまたは複数の命令へと変換する複数の命令を格納するものでもある。
第１の命令セットの１つまたは複数の命令は、プロセッサによって実行される場合、プロセッサに第１の命令をエミュレートさせるものである。
［項目１］
少なくとも１つのメモリコントローラと、
送信先記憶位置を示す永続コミット区分命令をデコードするデコードユニットと、
上記デコードユニットおよび上記少なくとも１つのメモリコントローラに結合された実行ユニットであって、上記実行ユニットは、上記永続コミット区分命令に応答して上記送信先記憶位置に区分値を格納し、上記区分値は、上記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、上記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分する、上記実行ユニットと、を備える、プロセッサ。
［項目２］
複数の永続メモリオペレーションへの上記少なくともオールファーストストアのうち少なくとも１つは、上記プロセッサのキャッシュラインに対応するバイト粒度およびキャッシュライン粒度のうち１つで永続メモリにアドレスされる、項目１に記載のプロセッサ。
［項目３］
複数の汎用レジスタを更に備え、上記永続コミット区分命令が、上記複数の汎用レジスタのうち１つにおいて上記送信先記憶位置を示す、項目１に記載のプロセッサ。
［項目４］
上記プロセッサは、上記永続コミット区分命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールセカンドストアが、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納される前に永続的に格納されることを阻止しない、項目１に記載のプロセッサ。
［項目５］
上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、上記永続コミット区分命令が実行される前に、上記少なくとも１つのメモリコントローラで時々受信された複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記永続コミット区分命令が実行された後に、上記少なくとも１つのメモリコントローラで時々受信される複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目１に記載のプロセッサ。
［項目６］
複数のメモリオペレーションへのストアのために、それらが上記少なくとも１つのメモリコントローラのうちの第１のメモリコントローラに到着すると複数の単調増加値を生成する単調増加値ジェネレータを更に備え、上記実行ユニットは、上記永続コミット区分命令に応答して、上記永続コミット区分が実行される前に上記第１のメモリコントローラでつい最近到着したメモリオペレーションへのストアのために生成された単調増加値を格納する、項目１に記載のプロセッサ。
［項目７］
上記単調増加値ジェネレータは、到着カウンタを有する、項目６に記載のプロセッサ。
［項目８］
上記単調増加値ジェネレータは、タイマおよびクロックのうち１つを有する、項目６に記載のプロセッサ。
［項目９］
上記少なくとも１つのメモリコントローラは、複数のメモリコントローラを有し、複数のメモリオペレーションが上記複数のメモリコントローラのそれぞれに到着すると、複数のメモリオペレーションへのストアのために単調増加し相互に一 貫性のある複数の値を生成する少なくとも１つの単調増加値ジェネレータを更に備える、項目１に記載のプロセッサ。
［項目１０］
上記少なくとも１つのメモリコントローラは、複数のメモリコントローラを有し、上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、上記複数のメモリコントローラの複数のドメイン内にある複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記複数のメモリコントローラの上記複数のドメイン内にまたある複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目１に記載のプロセッサ。
［項目１１］
上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、単一のメモリコントローラの領域内のみにある複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記単一のメモリコントローラの領域内のみにまたある複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目１に記載のプロセッサ。
［項目１２］
上記デコードユニットは、永続コミットブロック命令をデコードし、上記永続コミットブロック命令は、上記区分値を格納するソースストレージ位置を示し、上記プロセッサは、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたことを保証する、項目１から１１のうちいずれか１項に記載のプロセッサ。
［項目１３］
複数のレジスタを更に備え、上記永続コミット区分命令が、上記複数のレジスタのうちの所定のレジスタを上記送信先記憶位置として黙示的に示し、上記永続コミットブロック命令が、上記所定のレジスタを上記ソースストレージ位置として黙示的に示す、項目１２に記載のプロセッサ。
［項目１４］
上記プロセッサは、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に実行される複数の永続メモリ命令への上記少なくとも任意のストアの実行を、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されてしまうまで中断する、項目１２に記載のプロセッサ。
［項目１５］
上記プロセッサは、上記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、必ずしも上記永続コミットブロック命令の上記実行後に複数の非永続メモリ命令への任意のストアが実行される前でないが、上記永続コミットブロック命令の上記実行後に複数の永続メモリ命令への上記任意のストアが実行される前に永続的に格納されたことを保証する、項目１２に記載のプロセッサ。
［項目１６］
上記プロセッサは、上記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、上記永続コミットブロック命令の上記実行後に複数の永続メモリ命令への上記任意のストアが実行される前であり、且つ上記永続コミットブロック命令の上記実行後に複数の非永続メモリ命令への任意のストアが実行される前に、永続的に格納されたことを保証する、項目１２に記載のプロセッサ。
［項目１７］
上記プロセッサは、上記永続コミットブロック命令に応答して、複数のメモリオペレーションが上記少なくとも１つのメモリコントローラから出て行く場合に、上記区分値を、複数のメモリオペレーションへのデパーティングストアから取得される複数の値と比較する、項目１２に記載のプロセッサ。
［項目１８］
上記デコードユニットは、永続コミットチェック命令をデコードし、上記永続コミットチェック命令は、送信先記憶位置を示し、上記プロセッサは、上記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたかどうかを示す上記永続コミットチェック命令によって示される上記送信先記憶位置に値を格納する、項目１から１１のいずれか１項に記載のプロセッサ。
［項目１９］
上記永続コミットチェック命令は、上記区分値を有するソース記憶位置を示し、上記プロセッサは、上記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアを永続的に格納することの進捗のレベルを示す上記永続コミットチェック命令によって示される上記送信先記憶位置に上記値を格納する、項目１８に記載のプロセッサ。
［項目２０］
プロセッサにおいて、
送信先記憶位置を示す永続コミット区分命令を受信する段階と、
上記永続コミット区分命令に応答して、上記送信先記憶位置に区分値を格納する段階であって、上記区分値は、上記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、上記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分する、段階と、を備える、方法。
［項目２１］
上記区分値を格納するソースストレージ位置を示す永続コミットブロック命令を受信する段階と、
複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に永続的に格納されたことを保証する段階と、
を更に備える、項目２０に記載の方法。
［項目２２］
送信先記憶位置を示す永続コミットチェック命令を受信する段階と、
上記永続コミットチェック命令に応答して上記永続コミットチェック命令によって示される上記送信先記憶位置に値を格納する段階であって、上記永続コミットチェック命令に応答して格納される値が、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたかどうかを示す、段階と、を更に備える、項目２０に記載の方法。
［項目２３］
項目２０から２２のうちいずれか１項に記載の方法を実行するための手段を備える装置。
［項目２４］
マシンによって実行される場合、上記マシンに項目２０から２２のいずれか１項の方法を実行させるように動作する少なくとも１つの命令を格納する非一時的マシン可読媒体を備える、製造物。
［項目２５］
相互接続と、
上記相互接続で結合された項目１から１１のいずれか１項のプロセッサと、
上記相互接続で結合された、複数の命令のセットを格納しているダイナミックランダムアクセスメモリ（ＤＲＡＭ）であって、上記複数の命令のセットは、上記プロセッサによって実行される場合、上記プロセッサに、
複数の永続メモリオペレーションへの上記少なくともオールファーストストアに依存しない、実行するべき非依存性ワークを決定することと、上記永続コミット区分命令を実行した後に上記ワークを実行することと、を有する、複数のオペレーションを実行させる、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）と、を備える、電子デバイス。
【図１】
0006450705.tif 000002
【図２】
0006450705.tif 000003
【図３】
0006450705.tif 000004
【図４】
0006450705.tif 000005
【図５】
0006450705.tif 000006
【図６】
0006450705.tif 000007
【図７】
0006450705.tif 000008
【図８】
0006450705.tif 000009
【図９】
0006450705.tif 000010
【図１０Ａ】
0006450705.tif 000011
【図１０Ｂ】
0006450705.tif 000012
【図１１Ａ】
0006450705.tif 000013
【図１１Ｂ】
0006450705.tif 000014
【図１２】
0006450705.tif 000015
【図１３】
0006450705.tif 000016
【図１４】
0006450705.tif 000017
【図１５】
0006450705.tif 000018
【図１６】
0006450705.tif 000019
【図１７】
0006450705.tif 000020