本明細書において開示されるのは、複数の命令、複数の命令を実行する複数のプロセッサ、複数の命令を処理または実行する場合に複数のプロセッサによって実行される複数の方法、および複数の命令を処理または実行する1または複数のプロセッサを組み込む複数のシステムである。以下の記載において、多数の具体的な詳細(例えば、複数の具体的な命令オペレーション、複数の命令の組み合わせ、複数のプロセッサ構成、複数のマイクロアーキテクチャ詳細、複数のオペレーションのシーケンス等)が、説明される。しかしながら、複数の実施形態は、これらの具体的な詳細を用いずに実施されてよい。複数の他の例において、複数の既知回路、複数の構造および技術は、記載の理解を不明瞭にすることを回避するべく、詳細に示されなかった。
図1は、プロセッサ100の実施形態のブロック図である。プロセッサは、命令セット102を有する。命令セットは、プロセッサが実行するように動作する複数の命令のセットを含む。命令セットの複数の命令は、デコードされている命令セットの複数の命令から結果としてもたらされる複数のマイクロ命令、複数のマイクロオプス、または複数の他のデコードされた命令とは対照的に、実行のために複数のマクロ命令、またはプロセッサに提供される複数のマシンレベルの命令を表す。
示されるように、いくつかの実施形態において、命令セットは、永続コミット区分命令104を含み得る。永続コミット区分命令は、送信先レジスタ、または他の送信先記憶位置を示してよい。いくつかの実施形態において、永続コミット区分命令は、もし実行される場合、プロセッサに、少なくとも全てのストア(all store)を区分または区別する区分値を、格納させるように動作し得る。区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも、永続的に格納されていなかった、複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合に少なくとも1または複数のプロセッサによって実行されていなかった、またはメモリにまだ受諾されていなかった複数の永続メモリオペレーションへの少なくとも全てのストアから分離する。
示されるように、いくつかの実施形態において、命令セットは、永続コミットブロック命令106を含んでよい。永続コミットブロック命令は、先行する永続コミット区分命令の区分値を格納することになっているレジスタまたは他の発信元記憶位置を示してよい。いくつかの実施形態において、永続コミットブロック命令は、もし実行される場合、プロセッサに、区分値によって区分される複数の永続メモリオペレーションへの少なくとも全てのストア(例えば、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことにはなっていない)が、永続コミットブロック命令の実行後に、複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されてきたことを保証させるように動作し得る。
示されるように、いくつかの実施形態において、命令セットは、必要とされないものの、永続コミットチェック命令108をオプションとして含んでよい。いくつかの実施形態において、永続コミットチェック命令は、送信先記憶位置を示してよい。いくつかの実施形態において、永続コミットチェック命令は、もし実行される場合、プロセッサに、送信先記憶位置に値を格納させるように動作し得る。いくつかの実施形態において、値は、先行する永続コミット区分命令によって区分される複数の永続メモリオペレーションへの少なくとも全てのストア(例えば、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも、永続的に格納されたことにはなっていない複数の永続メモリオペレーションへのストア)が、ここで永続的に格納されたかどうかを示してよい。いくつかの実施形態において、格納された値は、複数の永続メモリオペレーションへのこれらの区分されたストアの全てを永続的に格納することの進捗のレベルを示してよい。いくつかの実施形態において、そのような値またはステータスは、必ずしも、つい最近の区分値に適用する必要はないが、むしろ、様々な前の区分値に適用可能であってよい。複数の他の実施形態において、命令は、送信先において格納された値またはステータスがおそらく適用する特定の区分値を提供するべく、発信元レジスタまたはオペランドをオプションとして有してよい。
複数の他の実施形態において、命令セットは、複数の例示された命令のサブセット(例えば、これらの命令のうち任意のわずか単一のもの)をオプションとして含んでよい。さらに複数の他の実施形態において、命令セットは、複数の他の命令または複数の全く異なる命令(例えば、図9に関連して以下で検討される複数の命令)をオプションとして含んでよい。
図2は、本発明の複数の実施形態が実装され得るシステム210の実施形態のブロック図である。システムは、プロセッサ200およびプロセッサに結合されたシステムメモリ226を含む。様々な実施形態において、システムは、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ、スイッチ等)、スマートテレビ、ネットトップ、セットトップボックス、ビデオゲームコントローラ、メディアプレイヤ、または他のタイプの電子デバイスを表してよい。
プロセッサは、少なくとも1つの論理プロセッサ216を含む。簡略化のため、プロセッサは、オプションとして他の論理プロセッサを含んでよいことは理解されるものの、単一の論理プロセッサのみが示される。複数の適切な論理プロセッサの複数の例は、限定はされないが、コア、ハードウェアスレッド、スレッドユニット、スレッドスロット、および他の論理プロセッサを含む。複数の論理プロセッサの各々は、複数の命令(例えば、複数のストア命令、複数の算術命令、複数の論理命令等)を処理する命令実行パイプラインを含んでよい。例として、各パイプラインは、複数の命令をフェッチする命令フェッチユニット、複数の命令をデコードする命令デコードユニット、複数の命令を実行する実行ユニット、および複数の他のパイプラインコンポーネントを含んでよい。本発明の範囲は、如何なる既知のタイプのパイプラインにも限定はされない。
論理プロセッサは、1または複数のキャッシュ218に結合されている。いくつかの実施形態において、1または複数のキャッシュは、複数の異なるキャッシュレベルで複数のキャッシュを含むキャッシュ階層を含んでよい。複数の異なるキャッシュレベルは、論理プロセッサおよび/またはシステムメモリに対するそれらの相対的な近さが異なってもよい。1つの実例的な例として、論理プロセッサは、専用の第1のレベルまたはレベル1(L1)キャッシュ、および共有の第2のレベルまたはレベル2(L2)キャッシュを有してよい。別の実例的な例として、論理プロセッサは、専用のL1キャッシュおよび専用L2キャッシュ、および共有の第3のレベルまたはレベル3(L3)キャッシュを有してよい。本発明の範囲は、如何なる既知のタイプのキャッシュ階層にも限定はされない。さらに、複数の他の実施形態において、プロセッサは、キャッシュ階層の代わりに単一のキャッシュレベルを有してもよい。
1または複数のキャッシュ218は、特定の実装例に所望される複数の命令および/またはデータを格納するために用いられ得る。複数のキャッシュは、システムメモリ226よりも比較的小さく、且つ高速アクセスのストレージを表してよい。更に、複数のキャッシュは、システムメモリより複数の命令パイプラインに比較的近くてよい。複数のキャッシュは、データへのより高速な連続アクセスを提供するべく、システムメモリからプロセッサにもたらされたデータをキャッシュする、または一時的に格納するために用いられ得る。代表的に、複数のキャッシュにおけるデータへの複数のアクセスは、一般に、2、3プロセッサクロックサイクルしかかからず、他方、システムメモリにおけるデータへの複数のアクセスは、しばしば、はるかにより多くのサイクルがかかる。プロセッサが、システムメモリからデータを読み取りたい場合、プロセッサは、データのコピーが既に複数のキャッシュにおいて格納されているかどうかまず確認してよい。データが複数のキャッシュにおいて見られる場合、プロセッサは、複数のキャッシュからデータにアクセスしてよく、それは、一般に、データが代わりにシステムメモリからアクセスされた場合より高速である。同様に、プロセッサがシステムメモリにデータを書き込みたい場合、データは、しばしば、複数のキャッシュにおいてまず格納され得る。
プロセッサは、1または複数のキャッシュ218において格納されたデータが、コヒーレントに管理され、複数の適切な時期にシステムメモリ226に格納されていることを保証するよう援助するキャッシュコヒーレンシメカニズムまたはキャッシュコヒーレンシプロトコルを実装してよく、発信元ることにより、システムにおける全ての関連するエンティティが、正確且つ最新の複数のバージョンのデータをコヒーレントに見ることができる。複数の適切なキャッシュコヒーレンシプロトコルの複数の例は、限定はされないが、MESI、MOSI、MOESI等を含む。MESIプロトコルは、4つの状態、すなわち、2つのMESIビットによって示される、変更(M)、排他(E)、共有(S)、および無効(I)状態を含む。MOSIプロトコルは、所有(O)状態を、排他(E)状態の代わりに利用する。MOESIプロトコルは、排他(E)および所有(O)状態の両方を利用する。そのような複数のキャッシュコヒーレンシプロトコルは、以下において更に検討されるだろうデータの永続性または耐久性を考慮しない。
図2を再び参照すると、プロセッサは、メモリコントローラ222を含むメモリインタフェースユニット220を有する。いくつかの実施形態において、システムは、単一のメモリコントローラのみを含んでよい。複数の他の実施形態において、システムは、2またはそれよりも多くのメモリコントローラを含んでよい。簡略化のため、単一のメモリコントローラのみが、図に示される。本実施形態において、メモリコントローラは、プロセッサ上に位置する(例えば、オンダイメモコントローラである)。別の実施形態において、メモリコントローラは、オプションとして、プロセッサの外に(例えば、チップセットコンポーネント内のオフダイメモリコントローラである)位置され得る。メモリインタフェースユニットおよび/またはメモリコントローラは、システムメモリ226に結合されるように動作し得る。例えば、結合は、1または複数のバスまたは他の相互接続を介してよい。メモリコントローラは、システムメモリに格納されたまたはシステムメモリに書き込まれるデータを、一時的にバッファリングする書き込み保留バッファを有する。
いくつかの実施形態において、システムメモリ226は、少なくとも何らかの永続メモリ228を含んでよい。永続メモリは、永続的または耐久的にデータを格納するように動作し得る。永続的または耐久的に格納されたデータは、たとえ電力損失、オペレーティングシステム故障、システムクラッシュ、システム再起動等の場合においても、失われないかもしれない。永続メモリの複数の適切な形態の複数の例は、限定はされないが、不揮発性メモリおよびストレージ、バッテリでバックアップされる(または他の電源でバックアップされる)揮発性メモリおよびストレージ等、およびそれらの複数の組み合わせを含む。通常、揮発性メモリは、電力が比較的短い期間、供給されない場合、その格納されたデータまたはコンテンツを失う。しかしながら、揮発性メモリをバッテリまたは他のバックアップ電源でバックアップすることにより、揮発性メモリが永続メモリになるよう援助されてよい。不揮発性メモリおよびストレージデバイスは、電力が加えられなかった比較的長い期間(例えば、典型的には、電力無しの少なくとも一週間)の後でさえ、それらの格納されたデータまたはコンテンツを保持するように自然に動作する。
適切なタイプのメモリおよび/または永続メモリ228にストレージの複数の具体例は、2,3例のみを挙げると、限定はされないが、バッテリでバックアップされる(または他の電源でバックアップされる)ダイナミックランダムアクセスメモリ(DRAM)および複数の他の形態のRAM、相変化メモリ(PCM)に基づく不揮発性メモリまたはストレージ、メモリスタ(例えば、電荷および磁束リンケージに関連する非線形受動2端子電気コンポーネント)、およびスピントランスファートルク(例えば、磁気トンネリング接合における磁気層の方向性またはスピン値が、スピン偏極電流を用いて変更され得る効果を利用するもの)、およびそれらの複数の組み合わせを含む。これらの技術の延長または改良のいずれかである、将来開発される複数の他の技術、または複数の全く異なる技術もまた、適切である可能性がある。また、複数のコンピュータシステムにおいて二次的な補助メモリとして一般に用いられる不揮発性メモリの複数の他の形態もまた、潜在的に適切である。複数の例は、限定はされないが、ハードディスク、磁気テープ、複数の他のタイプの磁気ストレージデバイス、様々なタイプのリードオンリメモリ(ROM)、光ディスク、強誘電体RAM(F−RAM)、および磁気抵抗RAMを含む。一般に、そのような複数の形態のメモリは、前述の複数のタイプのメモリを優先する速度または他の複数の特性を有するが、本発明の範囲は、この観点に限定はされない。本発明の範囲は、如何なる特定のタイプの永続メモリにも限定はされない。
いくつかの実施形態において、システムメモリ226は、永続メモリ228のみから成ってよい。複数の他の実施形態において、システムメモリは、永続メモリ並びに非永続メモリ(例えば、DRAMまたはメインまたは一次メモリに従来用いられている複数の他のタイプのメモリ)の両方を含んでよい。いくつかの実施形態において、永続メモリは、物理アドレス空間をアドレス可能な複数のプロセッサでの一部であってよい。ソフトウェアは、プロセッサの命令セットの複数のロード命令、複数のストア(store)命令、および複数の他の命令を実行することによって、永続メモリにアクセスすることが可能であってよい。いくつかの実施形態において、永続メモリは、ページ/ブロックアドレス可能であるのみとは対照的に、バイトアドレス可能であってよい。いくつかの実施形態において、永続メモリは、プロセッサメモリバスに直接結合され得る。いくつかの実施形態において、永続メモリへの複数のアクセスは、従来のメイン/一次メモリ(例えば、DRAM)への複数のアクセスとほぼ同一(例えば、キャッシュ可能性、コヒーレンシ、プロセッサメモリ順序付け、複数のメモリタイプ等に関して)のプロセッサメモリモデルに従ってよい。
データを永続的または耐久的に永続メモリ228において格納する能力は、いくつかの特定の用途および/または実装に対して非常に有益である。例えば、いくつかの特定のデータベースアプリケーションおよび/またはデータトランザクションにおいて、データを失わないことが非常に重要である。しかしながら、データが永続的または耐久的に永続メモリ228において格納されることを保証することにより、ソフトウェアに対し複数の追加的課題がもたらされる傾向があってよい。一つには、複数の格納または書き込みタイプの命令に関連しているデータが、それが永続メモリへ進む途中で一時的に格納され得る、様々な中間揮発性マイクロアーキテクチャコンポーネントおよび/またはストレージをプロセッサが有してよい。そのような複数の揮発性コンポーネントおよび/またはストレージの複数の可能な例は、限定はされないが、メモリコントローラ222における1または複数のキャッシュ218、複数のキューまたはバッファ(例えば、書き込み保留バッファ224)、非コアおよび/または相互接続の複数のキューもしくは複数のバッファ、複数のメモリ側キャッシュ等を含む。そのような複数の揮発性要素またはストレージは、一般に、電源障害、オペレーティングシステム故障、システムクラッシュ、再起動または同様のものが発生した場合に、それらのデータまたはコンテンツを保持することは可能でない。永続メモリに向かって格納されようとしているデータは、永続メモリ(または中間電源障害保護ストレージデバイスもしくはバッファ)に実際に到着し、格納されるまで、実際には永続的または耐久的にならなくてよい。本明細書において用いられるように、永続メモリにデータを格納することは、そのような中間の電源障害保護ストレージデバイスまたはバッファにおいてデータを格納することを包含し、それもまた永続的または耐久的である。結果として、データが、そのような複数の揮発性要素またはストレージにおいて(例えば、メモリコントローラ222における書き込み保留バッファ224において)格納される間に、電源障害、システムクラッシュ、オペレーティングシステム故障、または再起動が起こる場合、データは、通常、所望される永続性または耐久性を達成せずに失われるであろう。
示されるように、いくつかの実施形態において、論理プロセッサは、本明細書において開示されるような1または複数の永続コミット命令204を実行するように動作し得る。いくつかの実施形態において、これらの永続コミット命令は、永続メモリ212への複数のストア(例えば、永続メモリ228に対応する複数のアドレス範囲を示す複数のストア命令)が、永続メモリにコミットされる、且つ/または永続的に格納される順序を測定し、制御することを援助するのに用いられ得る。
図3は、永続コミット区分命令および永続コミットブロック命令の実施形態が用いられ得る、プロセッサで実行される方法330の1つの可能な例のブロックフロー図である。この図において、永続コミット区分および永続コミットブロック命令が用いられ得る例示的状況を更に図示するべく、いくつかのオプションのブロックが破線において示される。これらの破線で示されたボックスの複数のオペレーションは、オプションとしてあって、必須ではない。
ブロック331において、永続メモリ命令への1または複数の前のストアが、オプションとして実行され得る。例えば、これらの命令は、永続メモリ(例えば、永続メモリ228)に対応するアドレス範囲をそれぞれ示してよい。すでに言及されたように、そのようなストアのデータは、永続メモリに即座に格納されなくてよい、または永続性にコミットされなくてよいが、むしろ、1または複数の揮発性プロセッサキャッシュ(例えば、1または複数のキャッシュ218)においてまずキャッシュに格納されてよく、次に、場合によってはメモリインタフェースユニットにおいてその後に一時的に格納されてよい(例えば、メモリコントローラ222の書き込み保留バッファ224に格納されてよい)。
ブロック332において、複数のストアが、オプションとしてフェンスされ得る。例えば、これは、プロセッサに、全てのより古いストア(例えば、元のプログラム順序においてストアフェンス命令に先行する)が、全てのより新しいストア(例えば、元のプログラム順序においてストアフェンス命令に続く)の前に全体的に見えるようになることを保証させるように動作するストアフェンス命令を実行することを含んでよい。
ブロック333において、永続メモリへの複数の前のストア(例えば、ブロック331で実行された複数のストア)が、オプションとしてフラッシュされてよく、または他の場合、複数の任意の揮発性コヒーレンシキャッシュ(例えば、1または複数のキャッシュ218)から追い出され得る。例えば、これは、複数の特定のインテル(登録商標)アーキテクチャ互換のプロセッサにおいてCLFLUSHまたはCLFLUSHOPTまたはCLWB命令を実行することを含んでよい。これは、データが複数の揮発性キャッシュから追い出されることを保証し得る一方、それは、一般に、データが永続メモリに対して実際に格納されることは保証しない。例えば、CLFLUSHおよびCLFLUSHOPTまたはCLWBは、複数のキャッシュから追い出されたデータが、メモリに受諾され、例えば、メモリインタフェースユニットへとプッシュされ、または書き込まれる(例えば、メモリコントローラ222における書き込み保留バッファ224において格納される)ときに、完了し得る。しかしながら、そのようなデータは、永続メモリに格納される(例えば、実際に永続メモリに格納されるか、または、本明細書において、永続メモリの一部であると考慮して用いられるように中間電源障害保護バッファに格納される)まで、実際に永続的にならないであろう。
ブロック334において、複数のストアが、再びオプションとしてフェンスされ得る。そのようなフェンスは、特定の実装例に応じて(例えば、メモリ順序付けモデルおよび複数の命令が、互いに対してどのように順序付けられるかに部分的に応じて)必要とされてよく、または必要とされなくてもよい。
ブロック335において、永続コミット区分命令の実施形態が、実行され得る。いくつかの実施形態において、永続コミット区分命令は、実行される場合、プロセッサに、永続コミット区分命令によって示される送信先記憶位置に区分値を格納させるように動作し得る。いくつかの実施形態において、区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも永続的に格納されてきたことになっていない(例えば、必ずしも、少なくとも1つのメモリコントローラから抜け出していなかった)複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合、メモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくとも全てのストアから区分してよい。例えば、いくつかの実施形態において、区分値は、永続コミット区分命令が実行される前に1または複数のメモリコントローラで時々受信されたことになっている複数の永続メモリオペレーションへの少なくとも全てのストア(例えば、潜在的に、ブロック331において実行され、ブロック333において複数のキャッシュからフラッシュされた複数のストアのいくつか)を、永続コミット区分命令が実行される後に1または複数のメモリコントローラで時々受信されたことになっている複数の永続メモリオペレーションへの少なくともオールセカンドストア(例えば、ブロック339において実行されるであろう複数のストア)から区分してよい。
以下で更におそらく説明されるように、いくつかの実施形態において、区分値は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、必ずしも永続的に格納されたことになっていない(例えば、書き込み保留バッファ224にいまだにある可能性がある)複数の永続メモリオペレーションへの少なくとも全てのストアを、永続コミット区分命令が実行される場合、メモリに受諾されたことにまだなっていない複数の永続メモリオペレーションへの少なくとも全てのストアから区別し、且つ/または分離し、且つ/または差別化するように動作する単調増加値(例えば、メモリコントローラの到着カウンタの到着カウンタ値、到着クロックの到着時間値またはメモリコントローラの他のタイマ)、または他の境界画定、境界表示、境界線、または他のインジケーションを表してよい。
複数のメモリオペレーションへのストアが、複数の異なる実施形態において様々な異なる態様で、メモリに受諾され得る。いくつかの実施形態において、複数のストアオペレーションは、複数の書き込み保留バッファ(例えば、書き込み保留バッファ224)において格納される場合、または他の場合、メモリコントローラおよび/またはメモリインタフェースユニットに格納される場合、メモリに受諾されてよい。いくつかの実施形態において、複数のストアオペレーションは、それらが、全体的に可視となる、ライトバックメモリへの複数の非一時的なストアである、または、キャッシュに格納することが不可能な、ライトコンバイン(write‐combining)、且つライトスルー(write‐through)のメモリへの複数のストアである場合、メモリに受諾されてよい。いくつかの実施形態において、先行する複数のストアオペレーションは、ライトバックメモリに対して先行するストアとして、キャッシュラインのために実行されるキャッシュラインフラッシュ命令(例えばCLFLUSH、CLFLUSHOPTまたはCLWB命令)が全体的に可視になる場合、メモリに受諾されてよい。
ブロック336において、非依存性ワークは、永続コミット区分命令が、永続コミットブロック命令がブロック337で実行される前に、ブロック335で実行された後、オプションとして実行され得る。「非依存性」のワークという用語は、実行され得るワーク、コード、または任意の複数の命令のセットの中で、永続コミット区分命令および/または区分値が適用する複数のストアに依存する複数の命令を含まないものを指す。例えば、非依存性ワークは、永続コミット区分命令が実行された場合、メモリに受諾された全てのストアとは異なる複数のメモリ位置にアクセスする複数の命令のみを含んでよい。概念上、ソフトウェアは、状態の誤りのあるまたは不正確な複数の修正を引き起こさずに行うことができると知っている任意のワークを実行してよく、ソフトウェアが、後にソフトウェアからのアクションを完了することによって確認されるまで、一時的または推測的としてマークすることができると知っている複数の効果を持つワークを含む。
ブロック337において、永続コミットブロック命令の実施形態が実行され得る。いくつかの実施形態において、永続コミットブロック命令は、永続コミット区分命令によって取得されるまたは格納される区分値であってよい値、または少なくともそれに等しい値を有してよい発信元記憶位置を示してよい。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、区分値によって区分される(例えば、1または複数のメモリコントローラの複数の書き込み保留バッファ224を必ずしも抜け出していなかった、またはそこを出ていなかった)複数の永続メモリオペレーションへの少なくともオールストアが、永続コミットブロック命令の実行後に、複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを、保証させるように動作し得る。例えば、永続コミットブロック命令は、実行される場合、先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことにはなっていない(例えば、必ずしも1または複数のメモリコントローラを抜け出していなかった、または出ていなかった)複数の永続メモリオペレーションへの少なくともオールストアが、永続コミットブロック命令の実行後に実行される前に、複数の永続メモリ命令への少なくとも任意のストアが永続的に格納されたことを、プロセッサに保証させるように動作し得る。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、複数の永続メモリオペレーションへの少なくとも全てのそのような区分されたストアが、永続コミットブロック命令がリタイアする、または他の場合にコミットする前に、永続的に格納されてきたことを保証させるように動作し得る。
いくつかの実施形態において、永続コミットブロック命令の確証または保証は、データの永続性または耐久性に関している。これは、電源障害および/または特定の他の複数のイべントの場合、データが失われ得る非永続メモリ(例えば、従来のメインメモリ)に関する保証をすることと同じものではない。いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに如何なるデータも、プロセッサから直接またはアクティブに、強制して出すようにさせなくてよい(例えば、「フラッシュ」オペレーションを有していなくてよい)。むしろ、いくつかの実施形態において、永続コミットブロック命令は、実行される場合、プロセッサに、少なくとも1つのタイプの追加的な複数の後続する命令を実行することを停止させ、または中断させ、いつ確証または保証が達成されたかをモニタリングさせ、次にプロセッサが少なくとも1つのタイプの追加的な複数の後続する命令を実行することを再開することを許可させるように動作し得る。いくつかの実施形態において、プロセッサは、複数の永続メモリ命令へのストアを実行することを停止または中断のみし得る。複数の他の実施形態において、プロセッサは、複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方を実行することを停止または中断し得る。さらに複数の他の実施形態において、プロセッサは、複数の永続メモリ命令へのストア、複数の非永続メモリ命令へのストア、および複数の他のタイプの命令(例えば、複数のレジスタ命令へのストア、全ての命令等)を実行することを停止または中断し得る。いくつかの実施形態において、永続コミットブロック命令は、永続メモリへの複数のバイト粒度またはキャッシュライン粒度(例えば、プロセッサのキャッシュラインのキャッシュラインサイズへの)ストアに関して確証または保証し得る。
ブロック338で、複数のストアは、再びフェンスされ得る。そのようなフェンスは、特定の実装例に応じて必要であってよく、または必要でなくてもよい。
ブロック339において、1または複数の後のストアが、永続メモリに対して実行され得る。これらの「後」のストアは、ブロック331で実行された複数の「前」のストアよりも後のものである。その上、ブロック331で実行された複数の前のストアは、ブロック335における永続コミット区分命令の実行の前に起こり、他方、ブロック339で実行された複数の後のストアは、永続コミット区分命令の実行の後に起こる。
図4は、永続コミット区分命令404の実施形態および永続コミットブロック命令406の実施形態を実行するように動作するプロセッサ400の実施形態のブロック図である。いくつかの実施形態において、プロセッサ400は、図3の方法330を実行し得る。本明細書において、プロセッサ400について記載される複数のコンポーネント、複数の特徴および特定のオプションの詳細は、また、方法300にオプションとして適用する。あるいは、方法330は、類似のまたは異なるプロセッサもしくは装置によって、且つ/または類似のまたは異なるプロセッサもしくは装置内において、オプションとして実行され得る。その上、プロセッサ400は、方法330とは異なる複数の方法をオプションとして実行し得る。いくつかの実施形態において、プロセッサ400は、図2のシステム210において含まれてよい。あるいは、プロセッサ400は、異なるシステムにおいて含まれてよい。
いくつかの実施形態において、プロセッサ400は、汎用プロセッサ(例えば、デスクトップ、ラップトップ、または他の複数のコンピュータにおいて用いられるタイプの汎用マイクロプロセッサまたは中央処理ユニット(CPU))であってよい。あるいは、プロセッサは、特定用途用プロセッサであってよい。複数の適切な特定用途用プロセッサの複数の例は、限定はされないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ、(DSP)、およびコントローラ(例えば、マイクロコントローラ)を含む。プロセッサは、様々な複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、複数の他のタイプのアーキテクチャのうちのいずれかを有してよく、または複数の異なるアーキテクチャの組み合わせを有してよい(例えば、複数の異なるコアは、複数の異なるアーキテクチャを有してよい)。
動作中、プロセッサは、永続コミット区分命令404を受信し得る。その後に、プロセッサは、永続コミットブロック命令406を受信し得る。例えば、これらの命令は、バスまたは他の相互接続を介してメモリから受信され得る。プロセッサは、デコードユニットまたはデコーダ442を含む。デコードユニットは、永続コミット区分命令404および永続コミットブロック命令406のそれぞれを受信し、デコードし得る。デコードユニットは、受信された複数の比較的より高レベルの命令を反映し、表し、且つ/またはそれらから導出される、1または複数の比較的低レベルの命令または制御信号(例えば、1または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコード命令、または制御信号等)を出力し得る。いくつかの実施形態において、デコードユニットは、複数の命令を受信する1または複数の入力構造(例えば、1または複数のポート、1または複数の相互接続、インタフェース)、それに結合された、複数の命令を認識しデコードする命令認識およびデコードロジック、それに結合された1または複数の、低レベルの命令または1または複数の制御信号を出力する1または複数の出力構造(例えば、1または複数のポート、1または複数の相互接続、インタフェース)を含んでよい。デコードユニットは、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、およびデコードユニットを実装するのに適切な他のメカニズムを含むが、これらに限定はされない様々な異なるメカニズムを用いて実装されてよい。
プロセッサは、また、レジスタ452のセットも含む。いくつかの実施形態において、レジスタは、汎用レジスタであってよい。複数のレジスタのそれぞれは、データを格納するように動作するオンダイストレージ位置を表してよい。複数のレジスタは、複数のアーキテクチャ的に可視である、またはアーキテクチャ的なレジスタを表してよく、これらは、ソフトウェアおよび/またはプログラマに可視である、且つ/または、複数のオペランドを識別するべくプロセッサの命令セットの複数の命令によって示される複数のレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ(例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等)における複数の他の非アーキテクチャレジスタに比較される。複数のレジスタは、異なる複数のマイクロアーキテクチャにおいて複数の異なる態様で実装されてよく、如何なる特定のタイプの設計にも限定はされない。適切なタイプのレジスタの複数の例は、限定はされないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられた複数の物理レジスタ、およびそれらの複数の組み合わせを含む。
いくつかの実施形態において、永続コミット区分命令404は、区分値が格納されるべきである送信先レジスタまたは他のストレージ位置を明確に(例えば、1または複数のフィールドまたはビットのセットを介して)指定し得る、または他の場合は、示し得る(例えば、黙示的に示す)。いくつかの実施形態において、永続コミットブロック命令406は、値(例えば、先行する永続コミット区分命令の区分値)が格納されるべきである発信元レジスタまたは他のストレージ位置を(例えば、1または複数のフィールドまたはビットのセットを介して)明確に指定し得る、または他の場合は指し示し得る(例えば、黙示的に示す)。一例として、これらの命令のそれぞれは、レジスタ(例えば、複数のレジスタ452のうち1つ)、メモリ位置、または他のストレージを指定する記憶位置指定フィールドをオプションとして有してよい。あるいは、記憶位置は、命令に対してオプションとして黙示的(例えば、そのオペコードに対して黙示的)であってよい。1つの特定の実施形態において、永続コミット区分命令は、区分値が格納されるべきである送信先記憶位置に対する特定の固定された汎用レジスタをオプションとして黙示的に示してよい(しかし、明確には指定しない)が、本発明の範囲は、そのように限定されない。1つの特定の実施形態において、永続コミットブロック命令は、区分値が取得されるべきであるその発信元(source)記憶位置に対する同じ特定の固定された汎用レジスタをオプションとして黙示的に示してよい(しかし、明確には指定しない)が、本発明の範囲はそのように限定されない。
図4を再び参照し、実行ユニット444は、デコードユニット442、複数のレジスタ452および1または複数のメモリコントローラ422に結合されている。メモリコントローラは、いくつかの実施形態において、それがプロセッサ(例えば、オンダイ)の一部であってよく、他方、複数の他の実施形態において、プロセッサの外(例えば、チップセットコンポーネント上)にあってよいことから、メモリコントローラはオプション的である。実行ユニットは、複数の永続コミット区分および永続コミットブロック命令を表し、且つ/またはそれらから導出される1または複数のデコードされたもしくは他の場合は変換された命令もしくは制御信号を順に受信し得る。実行ユニットは、複数の永続コミット区分および永続コミットブロック命令に応答し、且つ/またはそれらの結果として(例えば、それぞれの命令からデコードされた1つまたは複数の命令もしくは制御信号に応答して)、それぞれの命令を実装する複数のオペレーションを実行するように動作する。
いくつかの実施形態において、実行ユニット444は、永続コミット区分命令に応答し、且つ/またはその結果として、区分値454を指定されたまたは他の場合、示された送信先記憶位置(例えば、複数のレジスタ452のうち1つ)において格納する458ように動作し得る。いくつかの実施形態において、区分値454は、永続コミット区分命令が実行される場合、メモリに受諾されたことになっているが、永続的に格納されたことに必ずしもなっていない複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合、メモリに受諾されてきたことにまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分し得る。
いくつかの実施形態において、実行ユニットは、1または複数のメモリコントローラ422からの区分値を受信してよい456。いくつかの実施形態において、複数のメモリコントローラのうち1つは、メモリに受諾されたが実際にはまだメモリに格納されていなかった(例えば、永続メモリ428に格納されなかった)複数の保留書き込みを、バッファリングまたは格納する書き込み保留バッファ424を有してよい。システムに採用される場合、プロセッサおよび永続メモリ428は、(例えば、バスまたは他の相互接続によって)結合され得る。図示される例において示されるように、ストアオペレーションS1からS5は、バッファにおいて格納され得る。例として、ストアオペレーションS1は、最初にバッファにおいて格納されたかもしれなく、ストアオペレーションS5は、最後にバッファにおいて格納されたかもしれない。必須ではないが先入れ先出し(FIFO)バッファの場合、S1は、最初にバッファを出てよく、次にS2、次にS3、等が出てよい。例として、ストアオペレーションS1からS4のみが、永続コミット区分命令が実行された時間にバッファに格納され、その後、新たなストアオペレーションS5がストアバッファにおいて格納された場合、区分454は、複数の前のストアオペレーションS1からS4を後のストアオペレーションS5から区分し、示し、または区別するのに十分な情報を含んでよい。例えば、タイムスタンプ、カウンタタグ、フラグ、トークン等の様々な異なるタイプの区分が可能である。示されるように、実行ユニットは、区分値を取得し格納する区分ユニット446を含んでもよい。
いくつかの実施形態において、実行ユニット444は、永続コミットブロック命令の結果に応答し、且つ/または永続コミットブロック命令の結果として、指定された、または他の場合は示された発信元記憶位置(例えば、複数のレジスタ452のうち1つ)から値を受信460するように動作し得る。いくつかの実施形態において、値は、対応する先行している永続コミット区分命令404の区分値454であってよい。例として、両方の命令は同一のレジスタを示してよく、永続コミット区分命令は、最初にレジスタに区分値を格納するように実行されてよく、次に、永続コミットブロック命令は、レジスタから区分値を読み取るように実行されてよい。
いくつかの実施形態において、実行ユニットは、また、永続コミットブロック命令に応答して、且つ/またはその結果として、区分値によって区分される、および/または、対応する永続コミット区分命令404が実行された前に1または複数のメモリコントローラ422に到達した、複数の永続メモリオペレーションへの少なくとも全てのストアが、複数の永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に(例えば、永続メモリ428において)格納されたことを保証するように動作し得る。いくつかの実施形態において、区分値は、先行する対応する永続コミット区分命令404が実行される場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行される場合、必ずしも永続的に格納されたことにはなっていない(例えば、未だに書き込み保留バッファ424にあってよい)複数の永続メモリオペレーションへの少なくとも全てのストアを区分し得る。
示されるように、実行ユニットは、ブロックおよびチェックユニット450を含んでよい。いくつかの実施形態において、ブロックおよびチェックユニットは、複数の永続メモリオペレーションへの区分されたストアの全て(例えば、より前の永続コミット区分命令404が実行された前にメモリコントローラに到達した)が、永続的に格納された(例えば、永続メモリ428に格納された)かどうかを反映する現在のステータスについて、少なくとも1つのメモリコントローラ(または場合によっては複数の他の実施形態においての複数の他のメモリシステムユニット)を繰り返しチェック462するように動作し得る。いくつかの実施形態において、ブロックおよびチェックユニットおよび/または実行ユニットは、永続コミットブロック命令の実行後に実行されることになっている1または複数のタイプの他の命令(例えば、複数の永続メモリ命令へのストアのみ、または複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方、または全ての命令)の実行をブロックまたは停止または中断するべく、複数の永続メモリオペレーションへの区分されたストアの全てが永続的に格納されたことをチェックが示すまで、ブロック信号464を他のパイプラインロジック467(例えば、特定の実装例に応じて、様々な異なるタイプであってよい)に提供するように動作し得る。いくつかの実施形態において、ブロック信号は、複数の追加のストアオペレーションが、メモリコントローラ422に入り、潜在的に永続的に格納されてしまうことを阻止し得る。いくつかの実施形態において、これは、複数の永続メモリオペレーションへの単なるストアのために行われてよい。複数の他の実施形態において、これは、複数の永続メモリオペレーションへのストアおよび複数の非永続メモリオペレーションへのストアの両方のために行われてよい。このように複数の命令の性能をブロックすることにより、プロセッサは、それが起こしたいこと(例えば、複数の区分されたストアが永続的になる)が実際に起こるまで停止して待機し、次に、それが起こった後に複数の命令の実行を再開することが、効果的に可能になり得る。永続コミットブロック命令に応答して実行される良好なチェック(例えば、複数の区分されたストアが永続になったことを示すこと)は、プロセッサが待機していたことが起こり、プロセッサが応答可能に再開し得ることを示すインジケーションとして機能し得る。
実行ユニットおよび/またはプロセッサは、複数の永続コミット区分および永続コミットブロック命令を実行するように動作する、特有または特定のロジック(例えば、複数のトランジスタ、集積回路、またはファームウェア(例えば、不揮発性メモリに格納された複数の命令)および/またはソフトウェアと潜在的に組み合わされた他のハードウェア)を含んでよい。複数の他の実施形態において、複数の異なる実行ユニットがオプションとして用いられ得るが、例示された実施形態においては、簡略化のため、同一の実行ユニットが永続コミット区分およびブロック命令の両方を処理するとして、示され記載される。
記載を不明瞭することを回避するべく、比較的単純なプロセッサが、示され記載されてきた。しかしながら、プロセッサは、複数の他のプロセッサコンポーネントをオプションとして含んでよい。例えば、様々な異なる実施形態は、様々な異なる組み合わせ、および図10A,10B,11,12のいずれかについて示され記載される複数のコンポーネントの構成を含んでよい。プロセッサの全てのコンポーネントは、それらが意図されたように動作することが可能であるように、共に結合され得る。
有利に、ソフトウェアは、永続コミットブロック命令がコミットされる場合、先行する永続コミット区分命令の実行時にメモリシステムによって受諾された永続的な状態に対する変化を制御することはいずれも、より前のこれらの永続的な状態に対する変化を制御することに依存する永続コミットブロック命令に続く複数の後続のストアが、電源障害安全領域に達した前に、永続的または耐久的に格納されたという保証を得るべく、永続コミット区分および永続コミットブロック命令を用いてよい。これらの命令は、永続メモリへの複数のストアを順序付けるために用いてられてよく、発信元ることにより、制御されていない且つ/または不適切に順序付けられた永続メモリへの複数のストアは起こらず、永続的な状態の破損を引き起こさない。そのような保証をする能力が無ければ、ソフトウェアは、電源障害の時点で、複数のより前のストア(例えば、図3のブロック331における複数のより前のストア)が、永続的に格納されていたという保証は全くできないかもしれず、それは、永久的なデータの損失、破損した永続メモリ状態または同様のものをもたらす可能性がある。また、複数の依存するストアまたは複数の他のオペレーションが、メモリに受諾されたが区分時においてまだ永続的に格納されていない複数の区分されたストアまで進むのを防ぐことによって、ソフトウェアは、永続区分命令と永続ブロック命令との間のインターバルの間に複数の独立したオペレーションを自由に実行してよい。
特定の実装例に応じて、永続コミットブロック命令は、複数の比較的長い完了時間を有する傾向があってもよく、且つ/または、複数の完了時間は、比較的可変である傾向があってもよい。例として、1つの実装において、複数の完了時間は、一般におよそ百から数百クロックサイクル(例えば、潜在的に数百ナノ秒)であってよく、時折およそ数千クロックサイクル(例えば、潜在的におよそマイクロ秒)のより長い継続時間が起こり得ると推定される。そのような比較的長く、且つ/または比較的変わりやすい完了時間に対する1つの要因となる理由は、永続メモリへの複数のストアが、永続コミット区分命令が実行される時間にメモリに受諾された複数のストアの数、永続メモリに対する複数の典型的なアクセスレイテンシ、永続メモリへの複数のストアの時間分布および/または空間分布(例えば、永続メモリ範囲が重複する)、複数の永続メモリモジュール(使用される場合)における複数のパワーセーフキューの深さ、複数の書き込み増幅、永続メモリにおいて修正されている特定のラインが上書きまたは読み取りの対象であるか否か、および他の複数の要因等、複数の要因に部分的に依存し得るからである。その上、そのような比較的長く、且つ/または比較的変わりやすい完了時間に対する要因となる他の理由は、いくつかの実施形態において、これらの命令がグローバル永続性保証を実装するために用いられてよいことであり、それは、従って、永続コミット区分命令が実行される時に1つのメモリコントローラからだけでなく、潜在的に複数の異なるメモリコントローラから永続メモリへの複数のストアに部分的に依存し得る。
いくつかの実施形態において、永続コミット区分および永続コミットブロック命令は、永続メモリへの複数のストアをコミットするべく共に実行されてよい2つの異なる命令を表してよい。いくつかの実施形態において、2つの命令は、永続メモリへの複数のストアをコミットさせ、意図される保証を実現するべく、プロセッサ(例えば、メモリインタフェースユニットおよび/またはメモリコントローラ)のハードウェアを用いてスプリットハンドシェイクを実装するように共に実行されてよい。スプリットハンドシェイクは、区分値を得るべく、ハードウェアと連携するように永続コミット区分命令を実行することを含んでよい。しかしながら、永続コミット区分命令は、複数のストアオペレーションが永続的となることを阻止するべく、プロセッサに任意の複数のタイプの複数の命令を実行することを停止させなくてもよい。次に、スプリットハンドシェイクの第2の部分は、永続コミットブロック命令を実行し、それに続く1または複数の異なるタイプの命令(例えば、複数の永続メモリ命令へのストア、または複数の永続メモリ命令へのストアおよび複数の非永続メモリ命令へのストアの両方、または全ての命令)の実行をブロックするようにハードウェアと相互作用し、複数の区分命令は、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に(例えば、そうでなければそれらは正反対の順序で永続的に格納される可能性があることから)、永続的に格納されたことを保証する。
永続メモリへの複数のストアをコミットするためのこれらの2つの異なる命令をこのように用いることにより、ブロックすることがある期間延期され、または遅れることがオプションとして可能になる。ブロックまたは待機動作は延期されている間、他の非依存性ワーク(例えば、図3のブロック336で実行された非依存性ワーク)が、オプションとして非同期的に実行されてもよい。そのような非依存性ワークは、永続コミット区分命令の複数の区分されたストアオペレーションが永続的に格納されているまで同期的に待機する必要はないが(すなわち、ロックステップオペレーションは全く必要でない)、むしろ非依存性ワークは、これらのストアが永続的に格納されるようになる間に、非同期的および同時に実行されてよい。永続コミットブロック命令に関連するブロックまたは待機オペレーションは、実行ペナルティ(例えば、いくつかの実施形態において、少なくとも複数の永続メモリ命令へのストアの実行が保留される)を引き起こすことから、そのような無関係な、または少なくとも非依存性のワークが実行されることを許可する一方で、それを延期することにより、これらの命令を実行するために必要とされる全体的な実行ペナルティを低減することを援助してよい。例として、これは、ソフトウェアが、同一のコードの領域内からの永続メモリへの複数の異なる書き込みストリームを重複させ、不必要な全部の順序の代わりに複数の永続メモリコミットの間で必要な部分的順序を保証することをオプションとして可能にしてよい。さらに、ブロックまたは待機オペレーションが最終的に実行される場合(例えば、永続コミットブロック命令が実行される場合)、ブロックまたは待機時間は、区分永続コミットのいくつかが、永続コミット区分およびブロック命令が実行された複数の時期の間に起こることが可能であったことから、通常、より短い時間(平均で)であるだろう。
これらの命令は、ブロックする同期的待機を延期する能力を持つ、永続メモリへの複数のストアをコミットする軽量アーキテクチャメカニズムをソフトウェアに与えてよく、2つの命令が実行される複数の時期の間にプロセッサが非依存性ワークを非同期的に実行することを可能にしてよい。これは、ループの1つのイタレーションにおける複数の計算が、前方向のイタレーションにおいてコミットされるべきである複数の値を作成し、各イタレーションにおける複数の計算は、前の複数のイタレーションの複数の非同期的永続メモリコミットを収集し、より新たな複数の依存性の値を永続メモリにフローさせることを継続する、永続メモリのためのソフトウェアパイプラインを実現することを潜在的に且つオプションとして援助し得る。これは、インテル(登録商標)トランザクショナルシンクロナイゼーションエクステンション(インテル(登録商標)TSX)を、潜在的に且つオプションとして十分に利用することを援助し得る。例えば、インテル(登録商標)TSXは、永続コミット区分の後に複数の依存性の将来の値を自由に生じさせ得るが、対応する永続コミットブロックが実行されるまで、それらが永続メモリに向かってフローしないようにする。複数の特定のコンセプトを更に図示するべく、以下の実施例コードを考慮されたい。ライン1 mov memX,4 //永続メモリにおけるメモリ位置Xに4を書き込む。ライン2 mov memY,9 //永続メモリにおけるメモリ位置Yに9を書き込む。ライン3 sfence //複数のストアをフェンスする。ライン4 clwb memX //複数のキャッシュからXを追い出す。ライン5 clwb memY //複数のキャッシュからYを追い出す。ライン6 sfence //複数のストアをフェンスする。ライン7 pc_demarcate R //永続コミット区分命令ライン8 add reg2,12 //レジスタ2に12を加算する。ライン9 mov memZ,18 //永続メモリにおけるメモリ位置Zに18を書き込む。ライン10 add memW,28 //非永続メモリにおけるメモリ位置Wに28を加算する。ライン11 pc_block R //永続コミットブロック命令ライン12 add reg2,17 //レジスタ2に12を加算する。ライン13 mov memW,14 //非永続メモリにおけるメモリ位置Wに18を書き込む。ライン14 mov memX,16 //永続メモリにおけるメモリ位置Xに16を書き込む。
このコードにおいて、pc_demarcateは永続コミット区分命令の実施形態であり、pc_blockは永続コミットブロック命令の実施形態である。いくつかの実施形態において、pc_demarcateまたはpc_blockは、いずれもライン8−10の複数の命令の実行をブロックまたは阻止しない。いくつかの実施形態において、ライン8−10の複数の命令が実行されてよく、ライン9の命令は、ライン1−2の複数の命令の複数のストアが永続的になったということが保証される前であっても、永続性にさらに格納し得る。
ライン11のpc_block命令が実行された後、いくつかの実施形態において、ライン11の命令に続く1または複数のタイプの命令の実行は、そこから結果として生じるであろう永続メモリへの任意の複数のストアと同様に、停止されてよい。複数の異なるタイプの命令は、複数の異なる実施形態において実行されることを阻止されてよい。いくつかの実施形態において、永続メモリへの複数のストアの実行は、停止されてよい(例えば、ライン14の命令が停止されてよい)。複数の他の実施形態において、永続メモリへの複数のストアの実行が停止されてよく(例えば、ライン14の命令が停止されてよい)、また、非永続メモリへの複数のストアの実行もオプションとして停止されてよい(例えば、ライン13の命令もまた停止されてよい)。例として、プロセッサのパイプラインロジックは、永続メモリへの複数のストアおよび非永続メモリへの複数のストアのアドレス範囲を検査してよく(例えば、プロセッサの複数のレンジレジスタ(range register)によって構成されるように)、複数の命令を適宜に選択的に実行してよい、または実行しなくてもよい。さらなる複数の他の実施形態において、永続メモリへの複数のストアの実行は、停止されてよく(例えば、ライン14の命令が停止されてよい)、非永続メモリへの複数のストアの実行はオプションとして停止されてよく(例えば、ライン13の命令もまた停止されてよい)、複数のプロセッサアーキテクチャレジスタの複数のストアの実行は、オプションとして停止されてよく(例えば、ライン12の命令もまた停止されてよい)、あるいは、全てでなくてもほとんどのタイプの複数の命令がオプションとして停止されてよい。これらの命令の実行のそのような停止は、ライン11のpc_block命令に応答して、pc_demarcate命令の前に複数の永続メモリオペレーションへの全てのストアが、永続性に対してコミットされた(例えば、ライン1−2の複数の命令の複数のストアが永続的に格納された)と判断された場合、終了してよい。
図5は、メモリコントローラ522に到着するストアオペレーション568(例えば、S1、S2、S3、S4)に付されている単調増加値(V1、V2、V3、V4)を、複数の区分値554を決定するために用いるように動作するプロセッサの例示的実施形態500のブロック図である。メモリコントローラは、複数の到着するストアオペレーション568を受信してよい。複数の到着するストアオペレーションは、複数の永続メモリオペレーションへの少なくとも何らかのストアを含んでよい。示されるように、複数の到着するストアオペレーションは、ストアオペレーションS1、S2、S3、およびS4を含んでよい。
メモリコントローラは、到着ストア値付加ユニット570を有する。到着ストア値付加ユニットは、単調増加値ジェネレータ572に結合されている。単調増加値ジェネレータは、メモリコントローラの一部であってよく、または一部でなくてもよい。単調増加値ジェネレータは、時間と共に単調増加値を生成するように動作する。適切な単調増加値ジェネレータの一例は、複数の到着するストアオペレーションをカウントする(例えば、新たなストアオペレーションが到着するたびにカウンタをインクリメントする)ように動作するストアオペレーション到着カウンタである。例えば、3つのストアオペレーションが順に到着する場合、最初のものには、カウントXが与えられ、次のものにはカウント(X+1)が与えられ、その次のものにはカウント(X+2)が与えられてよい。適切な単調増加値ジェネレータの他の例は、時間値を増やし続けるように動作する自走クロックまたは他のタイマである。それぞれの到着するストアオペレーションは、そのストアオペレーションが到着したときを示すタイムスタンプ値でタグ付されてよい。単調増加値ジェネレータの複数の他の例もまた、企図される。
到着ストア値付加ユニット570は、単調増加値ジェネレータから現在値をそれぞれの到着するストアオペレーションにタグ付けする、または他の場合は付加するように動作し得る。例えば、第1の値(V1)は、第1の到着するストアオペレーション(S1)に付されてよく、第2の増加値(V2)は、その後に到着するストアオペレーション(S2)に付されてよい、等である。複数の付された値を持つ複数の到着するストアオペレーションは、書き込み保留バッファ524において格納されてよい。複数の付された値は、それらが書き込み保留バッファの中を移動するとき、複数のストアオペレーションと共に留まってよい。
メモリコントローラは、複数のストアオペレーションが複数のデパーティングストアオペレーション(departing store operation)としてメモリコントローラを出る(例えば、バスで永続メモリへ送信される)前に、複数の付された値を抽出するように動作し得るデパーティングストアオペレーションの値抽出ユニット574を含む。示されるように、ストアオペレーションS1、S2、S3、およびS4は、値V1、V2、V3、およびV4無しで出て行ってよい。それぞれのストアオペレーションが順番にメモリコントローラを出ると、抽出ユニットは、最後の抽出値ストレージ580(例えば、スクラッチパッド、一時的なレジスタ等)に対応する抽出値を保存してよい。例として、複数の値が複数の対応するストアオペレーションがメモリコントローラに到着した複数の相対時間を示す複数のタイムスタンプである特定の場合に、FIFOキューにおいて、抽出された最後の(対応するストアオペレーションが到着した時間を示す)タイムスタンプが保存されてよい。メモリコントローラは、また、書き込み保留バッファが空になるときを示すように動作する空インジケータ576をオプションとして有してもよい。
区分ユニット546は、メモリコントローラ522および/または単調増加値ジェネレータ572に結合されている。区分ユニットは、永続コミット区分命令504(例えば、1または複数のそこからデコードされた制御信号)に応答して、および/または永続コミット区分命令504の結果として、単調増加値ジェネレータから現在値を受信し556、受信した値を区分値としてレジスタ552に格納する558ように動作し得る。例として、ストアオペレーションS3がメモリコントローラについ最近到着したストアオペレーションであったときに永続コミット区分命令が実行された場合、到着値V3(例えば、到着カウンタ値、到着タイムスタンプ値等)は、単調増加値ジェネレータから受信され、区分値として格納されてよい。
ブロックおよびチェックユニット550は、レジスタ552およびメモリコントローラ522に結合されている。様々な実施形態において、ブロックおよびチェックユニットは、メモリコントローラの一部であるか、またはメモリコントローラから離れているがそれに結合されているかのいずれかであってよい。(例えば、別個の実行ユニットであってよい)。区分ユニットは、永続コミットブロック命令506(例えば、1または複数のそこからデコードされた制御信号)に応答して、且つ/または永続コミットブロック命令506の結果として、レジスタから区分値を受信する560ように動作し得る。ブロックおよびチェックユニットは、実行ユニットを出た、複数のデパーティングストアオペレーションから抽出された最終または最大値を決定するべく、最後の抽出値ストレージ562を繰り返しチェックする562ように動作し得る。ブロックおよびチェックユニットは、最後の抽出値ストレージからの最終または最大値が、区分値より大きい(または別の実施形態において、区分値より大きいかそれに等しい)かどうか、あるいは、空インジケータが、書き込み保留バッファが空であるかを示すかどうかを決定するように動作し得る。これらのいずれかが真であると判断される場合、ブロックおよびチェックユニットは、停止ブロック信号565を提供し得る。いくつかの実施形態において、停止ブロック信号は、最終または最大値が区分値未満である間に、永続コミットブロック命令に応答して実行が停止された1または複数のタイプの命令を実行することを再開させてよい。停止ブロック信号は、プロセッサが、起こるのを待機していたものが起こったことを示してよく、ここでプロセッサは、それがすでに実行を停止した1または複数のタイプの命令の実行を再開してよい。例として、最後の抽出値ストレージが到着カウンタ値V4(例えば、数57456)を有し、区分値が値V3(例えば、57455)を有する場合、ブロックおよびチェックユニットは、(例えば、V4に対する単調増加値がV3に対する単調増加値より大きいであろうことから)ブロックを停止することを決定してよい。他の場合、ブロックおよびチェックユニットは、最終または最大値が区分値未満である間、1または複数のタイプの命令の実行または遂行を停止させられるのをやめさせるべくブロック信号564を提供し続けるように動作し得る。
いくつかの実施形態において、区分値は、時間順序(例えば、メモリコントローラにおける複数のストアオペレーションの到着の時間順序)に関してよいが、他方、永続コミットブロック命令は、プログラム順序に関するブロックを実行してよい。システムに1または複数のキャッシュがある場合、メモリ順序(例えば、メモリコントローラにおける複数のストアオペレーションの到着の時間順序)とプログラム順序との間において直接的な相関はなくてよい。複数のキャッシュは、複数のキャッシュを介してされる複数のストアがメモリコントローラに到着する順序を変えてよい。例えば、これは、複数のストアがライトバック、ライトスルー、または複数のライトコンバインのタイプのストアであるかどうか、複数のキャッシュエビクションのタイミング等の複数の因子に依存してよい。
図6は、最大値セレクタ682の例示の実施形態のブロック図である。最大値セレクタは、単調増加クロックまたはタイマ672(例えば、自走クロックまたはタイマ)に結合されている。クロックまたはタイマは、到着するストア値付加ユニット570に複数の値を提供するために用いられてよい。これらの値は、最大値セレクタのANDロジック684に入力されてよい。空インジケータ676もまた、ANDロジックに入力されてよい。ANDロジックは、空インジケータが、書き込み保留バッファキュー空であることを示す場合、クロックまたはタイマからの値を出力するように動作可能である。ANDロジックおよび最後の抽出値ストレージ580からの最後の抽出値の出力は、最大値ストレージ686に入力される。空インジケータが、書き込み保留バッファキューが空であることを示さない限り、最大値ストレージは、最後の抽出値580を格納するように動作する。しかしながら、空インジケータが、書き込み保留バッファキューが空であることを示す場合、最大値ストレージは、通常、クロックまたはタイマ値672(例えば、通常増加し続ける)からの値であるだろう最大値を格納する。これは、空インジケータを明確にチェックしなければいけない必要性の回避を援助してよい。なぜならば、最大値ストレージの出力がそれを自動的に反映するからである。最大値ストレージの出力は、ブロックおよびチェックユニット550に提供される。
記載を単純化するべく、図5におけるアプローチの上記の検討は、単一のメモリコントローラという状況において記載された。しかしながら、このアプローチは、複数のメモリコントローラである場合も機能する。
図7は、複数のメモリコントローラ722を有するプロセッサの例示的実施形態700のブロック図である。例示された実施形態において、プロセッサは、類似の態様で用いられる他の数のメモリコントローラをオプションとして有してもよいが、簡略化のため、第1のメモリコントローラ722−1および第2のメモリコントローラ722−2のみが示される。複数のメモリコントローラのそれぞれは、到着するストアオペレーション768−1、768−2を受信してよい。複数のメモリコントローラのそれぞれは、図5に関連してすでに記載されたように、複数の区分値を決定するために有用な複数の単調増加値を複数の到着するストアオペレーションに付加するための到着ストア値付加ユニット770−1、770−2を有する。
示されるように、いくつかの実施形態において、複数のメモリコントローラのそれぞれは、共通のクロック、タイマまたはカウンタ772を共有してよい。単一の共有される共通クロック、タイマ、またはカウンタは、複数の単調増加値を生成するように動作してよい。代替的実施形態において、単一の共有されるクロック、タイマ、またはカウンタを有する代わりに、複数のメモリコントローラのそれぞれは、異なる対応するクロック、タイマ、またはカウンタをオプションとして有してよく、これらの異なるクロック、タイマ、またはカウンタは、同期されてよく、あるいは他の場合、複数の相互に一貫性のある値を生じるようにさせられてよい。例えば、複数のストアオペレーションが2つの異なるメモリコントローラに同時に到着する場合、同期されたまたは相互に一貫性のある複数のクロックまたはタイマは、複数の同一のタイムスタンプ値を生成するであろう。クロック、タイマまたはカウンタを同期するための既知の複数のアプローチが適切である。1つの可能な例として、複数のクロックまたはタイマは、インテル(登録商標)クイックパスインターコネクトに基づくクロック交換および同期アプローチを用いてオプションとして同期され得る。
そのような複数の単調増加する同期された、またはそうでなければ相互に一貫性のある複数の値は、全てのメモリコントローラにわたってグローバルな関連性を有してよい。言い換えると、任意の第1の値が任意の第2の値より小さい場合、それは、第1の値に対応するストアオペレーションが、どのメモリコントローラに到着したかに関わらず、第2の値に対応するストアオペレーションの前に到着したことを意味する。これは、単一の区分値が決定され、全てのメモリコントローラにわたって複数の区分命令に従う複数の永続コミットを順序付けるのに用いられることを可能にするのに役立ち得る。
図7を再び参照すると、複数のメモリコントローラのそれぞれは、デパーティングストア値抽出ユニット774−1、774−2を、複数の抽出値780を抽出し出力するために有する。複数のメモリコントローラのそれぞれは、最大値セレクタ782−1、782−2を有する。いくつかの実施形態において、複数の最大値セレクタは、図6の最大値セレクタ682と同一であってよく、または類似してよい。示されるように、各メモリコントローラは、また、対応するストア保留バッファまたはキューが空であるときを示す空インジケータ776−1、776−2を有する。複数の空のインジケーションは、それぞれの最大値セレクタを提供されてよい。複数の単調増加する、相互に一貫性のある値(例えば、共通クロック、タイマ、またはカウンタ772からの、あるいはそうでなければ同期された、もしくは他の場合は相互に一貫性のある複数のクロック、複数のタイマ、または複数のカウンタからの)は、また、複数の最大値セレクタに提供され得る。複数の最大値セレクタは、複数の抽出値または空インジケータがバッファまたはキューが空であると示す場合には単調増加する相互に一貫性のある値(例えば、図6についてすでに記載されたように)のいずれかの最大値を選択するように動作し得る。最小値ストレージ788は、複数の最大値セレクタのそれぞれの出力と結合する。最小値ストレージは、全ての最大値セレクタの出力の最小値を格納し得る。この格納された最小値は、ブロックおよびチェックユニット550に提供され得る。全ての異なるメモリコントローラの最小値は、永続コミット区分命令によって取得された区分値が、出て行く最も小さい値を持つストアオペレーションに比較されることを保証する。そのような最小値を全ての異なるメモリコントローラをわたって使用することにより、最小値が、必要とされる全ての先行する、区分値によって差異化される永続性への永続コミットが、全ての異なるメモリコントローラにわたって永続性に関して完了したことを示す区分値より大きいかまたはそれに等しくなるまで、永続コミットブロック命令がブロックすることを可能にするのに役立ち得る。
いくつかの実施形態において、複数のメモリコントローラからの非FIFO永続性コミットの場合、スライドするビットマップウィンドウがオプションとして用いられ得る。スライドするビットマップウィンドウは、永続性にまだコミットされていなかった最小値、およびメモリコントローラもしくは複数のメモリコントローラのいずれかで発行された最大値まで及んでよい。ビットマップウィンドウの右端部を表し得る値Rは、ビットマップにおける最小値を表すとする。次に、値Rが区分値より大きいか、またはビットマップウィンドウに対して区分値と値Rとの間の差がゼロに等しいかのいずれかの場合、複数の待機されたストアオペレーションは、既に永続性にコミットされている。
図1に示されるように、いくつかの実施形態において命令セットは、必須ではないものの、永続コミットチェック命令108もまたオプションとして含んでよいことを思い出されたい。永続コミットチェック命令は、本明細書で開示される複数の他の命令に類似して、(例えば、デコードユニット442によって)デコードされてよく、(例えば、実行ユニット444または異なる実行ユニットによって)実行されてよい。
いくつかの実施形態において、永続コミットチェック命令は、現在のステータスまたは値が格納されるべきである送信先記憶位置を、(例えば、1または複数のフィールドまたは一組のビットを介して)明確に特定するか、または他の場合はそれを示してよい(例えば、黙示的に示す)。一例として、永続コミットチェック命令は、レジスタ(例えば、複数のレジスタ452のうち1つ)、メモリ位置、または他の送信先記憶位置を特定する記憶位置特定フィールドをオプションとして有してよい。あるいは、送信先記憶位置は、オプションとして命令に対して黙示的であってよい(例えば、それらのオペコードに対して黙示的である)。1つの特定の実施形態において、永続コミットチェック命令は、永続コミット区分命令の実施形態および/または永続コミットブロック命令の実施形態によって黙示的に示される汎用レジスタとは異なる汎用レジスタである、送信先記憶位置のための特定の一定の汎用レジスタをオプションとして黙示的に示してよい(しかし、明確に特定はしない)。そのような異なる複数のレジスタの黙示的な使用は、それぞれの永続コミット区分およびブロック命令によって用いられ得る区分値を上書きする必要性を回避することに役立ち得る。
いくつかの実施形態において、永続コミットチェック命令は、実行される場合、関連する実行ユニットおよび/またはプロセッサに、示された送信先記憶位置に値を格納させるように動作し得る。いくつかの実施形態において、値は、先行する対応する永続コミット区分命令によって区分された永続メモリオペレーションへの少なくとも全てのストア(例えば、示された複数の先行する対応する永続コミット区分命令が実行された場合、メモリに受諾されたことになっているが、先行する対応する永続コミット区分命令が実行された場合、必ずしも永続的に格納されたことになっていない複数の永続メモリオペレーションへのストア)が、ここで永続的に格納されたかどうかを示してよい。値は、いずれの特定区分値に必ずしも適用する必要はなく、むしろ、様々な区分値に適用してよい(例えば、複数のデパーティングストアオペレーションの現在のステータスを反映する単調増加値が、複数の区分値を表す複数の前のそのような単調増加値に適用してよい)。
いくつかの実施形態において、格納された値は、複数の永続メモリオペレーションへの区分されたストアがここで永続的に格納されたかどうかを示すだけでなく、複数の区分されたストアオペレーションの現在のレベルもしくはステータスまたは完了の指標もまた示してよい。完了の複数の異なる指標が、複数の異なる実施形態に適切である。完了の複数の適切な指標の例は、限定はされないものの、区分された永続的ストアの完了に必要とされる推定時間、永続的に格納された区分された永続的ストアの推定割合、区分値と、つい最近出て行った永続メモリへのストアオペレーションを反映する値との間の差、等を含む。例として、様々な実施形態において、永続コミットチェック命令は、実行される場合、関連する実行ユニットおよび/またはプロセッサに、図5における最後の抽出値ストレージ580、図6における最大値ストレージ686、図7の最小値ストレージ788、または同様のもののうち1つを読み取らせるように動作し得る。いくつかの実施形態において、すでに記載された複数の永続コミットブロック命令とは対照的に、永続コミットチェック命令は、実行される場合、任意の複数のタイプの命令の実行を、ブロック、停止または中断しなくてよい。
永続コミットチェック命令の1つの具体例の実施形態は、区分値を有する発信元レジスタおよび完了値のレベルを格納するように用いられる送信先レジスタを示してよい。区分値によって区別される複数の永続メモリオペレーションへの全ての区分されたストアが、永続的に格納された場合、完全完了を示す値(例えば、ゼロ値)が送信先において格納され得る。他の場合、進捗度またはステータスの現在のレベルを示す値が格納され得る。このステータスまたは進捗度のレベルは、ソフトウェアが、複数の永続メモリオペレーションへの区分されたストアが完了したまでの時間を推定するために用いてよい(ソフトウェアが様々な方式で限定無く行ってよい)ヒントとして機能してよい。これは、適切な永続コミットチェック命令の単なる1つの実例的な例である。
いくつかの実施形態において、永続コミットチェック命令は、永続コミット区分命令および永続コミットブロック命令と併せて用いられてよい。例えば、いくつかの実施形態において、永続コミットチェック命令の1または複数の例は、ソフトウェアが、永続コミット区分命令に先行し、区分値によって区分された複数のストアオペレーションの永続的ストレージを完了することに向かって進捗またはステータスの現在のレベルを測定もしくは決定することを可能にするべく、永続コミット区分命令の後にオプションとして用いられてよい。発信元ることにより、ソフトウェアは、後続の永続コミットブロック命令の実行を延期することを継続するか否かを決定し得る。上記のように、永続コミットブロック命令は、ブロックオペレーションを実行してよく、従って関連する実行ペナルティを有してよい。さらに、全ての先行するストアが永続性に対してコミットされるために必要な時間は、潜在的に長く、且つ/または潜在的に可変であり得る。それに応じて、永続コミットチェック命令の考えられる利点は、ソフトウェアがそのような潜在的に長く、且つ/または潜在的に可変である複数の時間を測定しそれに適応し、適切な且つオプションとして最大に延期された時間まで永続コミットブロック命令を実行することをオプションとして延期することを可能にするのに役立つことである。
図8は、永続コミットチェック命令の実施形態が、永続コミット区分命令の実施形態および永続コミットブロック命令の実施形態と共に用いられてよいプロセッサで実行される方法890の1つの可能な例のブロックフロー図である。方法は、ブロック891で永続コミット区分命令を実行することを含む。これは、本明細書の他の箇所において記載されるように行われてよい。方法は、ブロック892で非依存性ワークを実行することをオプションとして含む。本明細書において他の箇所で記載されるように、これは、永続コミット区分命令に関連する区分値によって区分される永続メモリへの複数のストアに依存しないワークを表してよい。
ブロック893において、永続コミットチェック命令が実行されてよい。いくつかの実施形態において、これは、複数の永続メモリオペレーションへの全ての区分されたストアが完了したか否かを示す値を読み取ること、または他の場合、決定し格納することを含んでよい。いくつかの実施形態において、値は、これらの区分されたストアオペレーションを、任意の複数の命令の実行をブロックまたは阻止せずに永続的に格納することに向けて、現在のステータスもしくはレベルを示してよい。例として、様々な実施形態において、これは、図5における最後の抽出値ストレージ580、図6における最大値ストレージ686、図7における最小値ストレージ788、または同様のもののうち1つを、任意の複数の永続ストアオペレーションをブロックまたは阻止せずに読み取りレジスタに格納することを含んでよい。
ブロック894において、非依存性のワークをさらに行う時間があるか否かについての決定がされてよい。例えば、ソフトウェアは、永続コミットチェック命令によって読み取られて格納された値にアクセスし、それを永続コミット区分命令によって格納された区分値と比較してよい。違いが十分に大きい場合、例えば、違いが設定可能な閾値を超える場合、非依存性のワークをさらに行うための十分な時間があるという決定であってよい(すなわち、「yes」が決定であってよい)。そのような場合、ソフトウェアは、非依存性のワークをさらにオプションとして実行されてよいブロック892を再び訪れることをオプションとして決めてよい。逆に、違いが十分に大きいとソフトウェアによって認識されない場合、例えば、違いが設定可能な閾値を超えない場合、非依存性のワークをさらに行う十分な時間が無いという決定であってよい(すなわち、「no」が決定であってよい)。そのような場合、方法は、ブロック895へ進んでよい。例として、これは、言語レベルコルーチンでオプションとして実行されてよい。この構成概念は、複数の独立変数に影響を与えるトランザクションのグループが、複数の恒久性のコミットが達成されるインターバルで制御を前後に渡し、プロセッサ使用に重複し得る、複数のソフトウェアパイプラインのトランザクションのより容易な構造をオプションとして可能にし得る。
ブロック895において、永続コミットブロック命令が実行されてよい。すでに記載されたように、永続コミットブロック命令は、実行される場合、1または複数のタイプの永続コミットブロック命令に続く複数の後続の命令(例えば、複数の永続メモリ命令へのストア、永続メモリへのストアおよび非永続メモリ命令へのストアの両方、全ての命令等)の実行を、先行する永続コミット区分命令によって区分される複数の永続メモリオペレーションへの全てのストアが永続的に格納されるまで、ブロックまたは停止するように動作し得る。これは、実行ペナルティを引き起こし得る。しかしながら、別個の命令において永続コミット区分命令からのブロックオペレーションを有することによって、この実行ペナルティを低減することを助ける。さらに、非ブロック永続コミットチェック命令を有することによって、ソフトウェアは、進捗度を測定し、永続コミットブロック命令がどのくらい長く延期され得るかを知的に決定してよく、それにより、更に実行ペナルティを縮小することに役立つ。ソフトウェアは、永続コミットブロック命令が、永続コミットチェック命令の複数の指標に基づいて再び何度も繰り返して延期され(例えば、最大にさえも延期され)、次にそれが必要とされる前に実行されてよい完了オペレーションのポールリング(polled‐for‐completion‐operation)を実装するべく、異なる時期に連続して実行される永続コミットチェック命令の複数の例を用いてよい。あるいは、ソフトウェアは、それが永続コミットブロック命令を全く実行する必要がないことを保証するべく、永続コミットチェック命令を用いてよい。有利に、そのような複数の命令は、ソフトウェアが、メモリに受諾されたが、1または複数のメモリコントローラをまだ出ていなかった複数のストアを永続的に順序付けるのに必要とされる潜在的に長い、および/または潜在的に可変である複数の時間を効率的に処理することが許可することを援助してよい。
図9は、プロセッサ900の実施形態のブロック図である。プロセッサは、命令セット902を有する。示されるように、いくつかの実施形態において、必須ではないものの、命令セットは、単一のドメイン永続コミット区分命令904、単一のドメイン永続コミットブロック命令906、およびオプションとしてある単一のドメイン永続コミットチェック命令908を含んでよい。あるいは、複数の他の実施形態において、命令セットは、複数の例示された命令の(例えば、これらの命令のうち任意の単一のものほど僅かである)サブセットをオプションとして含んでよい。
いくつかの実施形態において、これらの命令のそれぞれは、複数のメモリコントローラ領域の代わりに単一のメモリコントローラ領域に適用し得ることを除けば、上記で開示された対応してネーミングされた複数の命令に類似してよい。いくつかの実施形態において、複数の命令は、その領域を特定し、または他の場合は示し得る(例えば、論理プロセッサ識別子を示し得る)。いくつかの実施形態において、これらの命令のそれぞれは、複数のメモリコントローラのそれぞれに対して独立して動作し得る。ソフトウェアは、複数のメモリコントローラの全てまたはいくつかのいずれかに対して、これらの命令を順に用いてその依存性がそれぞれのメモリコントローラにおいて並行して満たされていることを保証してよい。例えば、ソフトウェアは、別々のメモリコントローラ毎のハンドシェイク(例えば、各メモリコントローラ領域において別々の複数の区分値)を持つマルチメモリコントローラ永続性ハンドシェイクを総合的に扱ってよい。これは、ソフトウェアが、特にその全てのオペレーションが単一の不均等メモリアクセス(NUMA)領域に設計によって限定される場合、効率的に作用することを許可する。そのような場合、ソフトウェアは、単一のNUMA領域において順序付けを実行する必要があるだけでよい。
これらの単一領域命令の1つの可能性のある利点は、柔軟性およびメモリコントローラのサブセットのみとのハンドシェイクを必要とする永続コミットブロック命令をストール(stall)させなくてもよいことから得られる潜在的なパフォーマンス利益(例えば、特定のトランザクションのための全てのキャッシュラインが同一のNUMA領域にあることが既知である場合)である。このスキームは、1つのメモリコントローラにおける待機もまた、他の複数のメモリコントローラがドレインするために取る時間をカバーし得ることから、より多くの命令を用いる一方、それは、対応してより多い数のストールを必ずしも有していない。
図7および図9は、複数のメモリコントローラに対して適切な2つの異なる実施形態を示す。これらの異なる実施形態は、相互に排他的ではないが、むしろオプションとして一緒に用いられてよい。そのような単調増加値の使用は、実施形態が実装され得る1つの可能な態様である。しかしながら、複数の他の形態もまた熟慮される。例えば、1つの可能なアプローチは、複数の任意の新しい値が区分およびブロック命令の間に行くことを許可せずに、全てのメモリコントローラが完全にドレインし、空になるように強制することである。さらに、複数の他の形態は、当技術分野における、本開示の利益を有する当業者らにとって明らかになるだろう。例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
複数のプロセッサコアは、複数の異なる目的のために、複数の異なる態様で実装されてよく、複数の異なるプロセッサにおいて実装されてよい。例えば、そのような複数のコアの複数の実装は、1)汎用コンピューティングを対象とした汎用インオーダコア、2)汎用コンピューティングを対象とした高性能の汎用アウトオブオーダコア、3)主にグラフィクスおよび/または科学的用途(スループット)コンピューティングを対象とした特定用途向けコアを含んでもよい。複数の異なるプロセッサの複数の実装は、1)汎用計算を対象とした1または複数の汎用インオーダコアおよび/または汎用計算を対象とした1または複数の汎用アウトオブオーダコアを含むCPU、並びに2)主にグラフィクスおよび/または科学的用途(スループット)を対象とした1または複数の特定用途用コアを含むコプロセッサを含んでもよい。そのような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージにおいての別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、統合グラフィクスおよび/または科学的用途(スループット)ロジックのような特定用途向けロジック、または特定用途用コア等と呼ばれる)、および4)同じダイ上に、記載されたCPU(場合によっては、1または複数のアプリケーションコアまたは1または複数のアプリケーションプロセッサと呼ばれる)、上に記載されたコプロセッサ、および追加の機能性を含み得るシステムオンチップを含んでもよい。複数の例示的なコアアーキテクチャが、次に記載され、例示的な複数のプロセッサおよび複数のコンピュータアーキテクチャが次に記載される。例示的なコアアーキテクチャインオーダおよびアウトオブオーダコアブロック図
図10Aは、本発明の複数の実施形態に従って例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図10Bは、本発明の複数の実施形態に従って、プロセッサ内に含まれるべきインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図10A−Bにおける複数の実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方、複数の破線のボックスで示されるオプションの追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が記載される。
図10Aにおいて、プロセッサパイプライン1000は、フェッチステージ1002、長さデコードステージ1004、デコードステージ1006、割り当てステージ1008、リネーミングステージ1010、スケジューリング(ディスパッチまたは発行としても既知の)ステージ1012、レジスタ読み取り/メモリ読み取りステージ1014、実行ステージ1016、ライトバック/メモリ書き込みステージ1018、例外ハンドリングステージ1022、およびコミットステージ1024を含む。
図10Bは、実行エンジンユニット1050に結合されるフロントエンドユニット1030を含むプロセッサコア1090を示し、両方ともメモリユニット1070に結合されている。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別のオプションとして、コア1090は例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU)コア、グラフィクスコア等の特定用途のコアであってよい。
フロントエンドユニット1030は、命令キャッシュユニット1034に結合された分岐予測ユニット1032を含み、命令キャッシュユニット1034は、命令トランスレーションルックアサイドバッファ(TLB)1036に結合される。TLB1036は、命令フェッチユニット1038に結合される。命令フェッチユニット1038は、デコードユニット1040に結合される。デコードユニット1040(またはデコーダ)は、複数の命令をデコードし、出力として、1または複数のマイクロオペレーション、複数のマイクロコードエントリポイント、複数のマイクロ命令、複数のその他の命令、または複数の元の命令からデコードされる、そうでなければそれらを反映する、またはそれらから導出されるその他の複数の制御信号を生成してよい。デコードユニット1040は、様々な異なるメカニズムを用いて実装されてよい。複数の好適なメカニズムの例は、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア1090はマイクロコードROMまたはある特定の複数のマクロ命令のためのマイクロコード(例えばデコードユニット1040内またはそうでなければフロントエンドユニット1030内)を格納する他の媒体を含む。デコードユニット1040は、実行エンジンユニット1050内のリネーム/アロケータユニット1052に結合されている。
実行エンジンユニット1050は、リタイアメントユニット1054および1または複数のスケジューラユニット1056のセットに結合されたリネーム/アロケータユニット1052を含む。1または複数のスケジューラユニット1056は、複数の予約ステーション、中央の命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。1または複数のスケジューラユニット1056は、1または複数の物理レジスタファイルユニット1058に結合されている。複数の物理レジスタファイルユニット1058のそれぞれは、1または複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のそれぞれが1または複数の異なるデータタイプを格納する複数の異なるものを表す。一実施形態において、1または複数の物理レジスタファイルユニット1058は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供してよい。1または複数の物理レジスタファイルユニット1058は、リタイアメントユニット1054によって重ねられ、(例えば、1または複数のリオーダバッファおよび1または複数のリタイアメントレジスタファイルを用いて、1または複数の将来のファイル、1または複数のヒストリバッファ、および1または複数のリタイアメントレジスタファイルを用いて、レジスタマップおよび複数のレジスタのプールを用いる等)レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい様々な方式を示す。リタイアメントユニット1054および1または複数の物理レジスタファイルユニット1058は1または複数の、実行クラスタ1060に結合される。1または複数の実行クラスタ1060は、1または複数の実行ユニット1062のセットおよび1または複数のメモリアクセスユニット1064のセットを含む。実行ユニット1062は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、複数の特定の機能または複数の機能の複数のセットに専用の多数の実行ユニットを含んでよい一方で、複数の他の実施形態は、全ての機能を全て実行する1つのみの実行ユニットまたは複数の実行ユニットを含んでよい。1または複数のスケジューラユニット1056、1または複数の物理レジスタファイルユニット1058および実行クラスタ1060は、場合によっては複数であるとして示される。その理由は、複数の特定の実施形態が、複数の特定のタイプのデータ/複数のオペレーションに対する複数の別個のパイプライン(例えば、それぞれがそれら自体のスケジューラユニットを有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン、1または複数の物理レジスタファイルユニット、および/または実行クラスタ、および、別個のメモリアクセスパイプラインの場合、複数の特定の実施形態は、このパイプラインの実行クラスタのみが1または複数のメモリアクセスユニット1064を有するように実装される)を生成するからである。複数の別個のパイプラインが用いられる場合、これらのパイプラインのうち1または複数がアウトオブオーダ発行/実行され、残りがインオーダ発行/実行されてよいことは、また、理解されるべきである。
複数のメモリアクセスユニット1064のセットは、メモリユニット1070に結合される。メモリユニット1070は、データキャッシュユニット1074に結合されたデータTLBユニット1072を含み、データキャッシュユニット1074は、レベル2(L2)キャッシュユニット1076に結合されている。例示的な一実施形態において、複数のメモリアクセスユニット1064は、ロードユニット、ストアアドレスユニット、および、ストアデータユニットを含み得、これらの各々は、メモリユニット1070内のデータTLBユニット1072に結合されている。命令キャッシュユニット1034は、メモリユニット1070内のレベル2(L2)キャッシュユニット1076に更に結合される。L2キャッシュユニット1076は、1または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
例として、例示的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1000を実装してよい。1)命令フェッチ1038が、フェッチおよび長さデコーディングステージ1002および1004を実行する。2)デコードユニット1040が、デコードステージ1006を実行する。3)リネーム/アロケータユニット1052が、割り当てステージ1008およびリネーミングステージ1010を実行する。4)1または複数のスケジューラユニット1056が、スケジュールステージ1012を実行する。5)1または複数の物理レジスタファイルユニット1058およびメモリユニット1070が、レジスタ読み取り/メモリ読み取りステージ1014を実行する。実行クラスタ1060が、実行ステージ1016を実行する。6)メモリユニット1070および1または複数の物理レジスタファイルユニット1058が、ライトバック/メモリ書き込みステージ1018を実行する。7)様々なユニットが、例外ハンドリングステージ1022に関与してよい。8)リタイアメントユニット1054および1または複数の物理レジスタファイルユニット1058が、コミットステージ1024を実行する。
コア1090は、本明細書において記載される1または複数の命令を含め、1または複数の命令セット(例えば、x86命令セット(より新しい複数のバージョンと共に追加されたいくつかの拡張を有する))、カリフォルニア州サニーベール(Sunnyvale)のMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等のオプションの追加の複数の拡張を有する))をサポートしてよい。一実施形態において、コア1090は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される複数のオペレーションがパックドデータを使用して実行されることを許可する。
コアは、マルチスレッディング(複数のオペレーションまたは複数のスレッドの2またはそれよりも多くの並列セットを実行)をサポートしてよく、時間スライスされたマルチスレッディング、同時マルチスレッディング(単一物理コアは、物理コアが同時にマルチスレッディングする複数のスレッドのそれぞれに対して論理コアを提供する)、またはそれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング技術等におけるように時間スライスされたフェッチおよびデコードおよびその後の同時マルチスレッディング)を含む様々な態様において、そうしてよいことが理解されるべきである。
レジスタリネーミングは、アウトオブオーダ実行の文脈において記載されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられ得ることが理解されるべきである。プロセッサの例示された実施形態が、別個の命令およびデータキャッシュユニット1034/1074および共有L2キャッシュユニット1076も含む一方、複数の代替的な実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュ等の複数の命令およびデータの両方に対する単一の内部キャッシュを有してよい。いつかの実施形態において、システムは、内部キャッシュとコアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコアおよび/またはプロセッサの外部にあってもよい。具体的な例示的インオーダコアアーキテクチャ
図11A−Bは、コアが、チップ内のいくつかのロジックブロック(同じタイプおよび/または複数の異なるタイプの複数の他のコアを含む)のうち1つになるであろう、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して何らかの固定機能ロジック、複数のメモリI/Oインタフェース、および他の必要なI/Oロジックと通信する。
図11Aは、本発明の複数の実施形態による、オンダイ相互接続ネットワーク1102、およびそのレベル2(L2)キャッシュ1104のローカルサブセットへのその接続を伴う単一のプロセッサコアのブロック図である。一実施形態において、命令デコーダ1100が、パックドデータ命令セット拡張を持つx86命令セットをサポートする。L1キャッシュ1106は、スカラおよびベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを許可する。一実施形態では(設計を単純化するべく)、スカラユニット1108およびベクトルユニット1110は、複数の個別のレジスタセット(それぞれ、スカラレジスタ1112およびベクトルレジスタ1114)を用い、それらの間で転送されたデータがメモリに書き込まれ、次に、レベル1(L1)キャッシュ1106からリードバックされるが、本発明の複数の代替的な実施形態は、異なるアプローチを用いてもよい(例えば、単一のレジスタセットを用いるか、またはデータが、書き込まれてリードバックされずに、2つのレジスタファイルの間で転送されることを許可する通信経路を含む)。
L2キャッシュ1104のローカルサブセットは、プロセッサコア毎に1つの、複数の別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1104のそれ自身のローカルサブセットへの直接的なアクセス経路を有する。プロセッサコアによって読み取られたデータは、そのL2キャッシュサブセット1104内に格納され、複数の他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスするのと同時に迅速にアクセスされ得る。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のL2キャッシュサブセット1104内に格納され、複数の他のサブセットからフラッシュされる。リングネットワークは、共有されるデータに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、L2キャッシュ、および複数の他のロジックブロック等の複数のエージェントが、チップ内で互いに通信することを許可する。それぞれのリングデータパスは、1方向あたり1012ビット幅である。
図11Bは、本発明の複数の実施形態による、図11Aにおけるプロセッサコアの一部の拡大図である。図11Bは、L1キャッシュ1104の一部であるL1データキャッシュ1106A、並びにベクトルユニット1110および複数のベクトルレジスタ1114に関する更なる詳細を含む。具体的には、ベクトルユニット1110は、整数、単精度浮動小数、および倍精度浮動小数命令のうちの1または複数を実行する、16幅ベクトル処理ユニット(VPU)(16幅ALU1128を参照)である。VPUは、スウィズルユニット1120によるレジスタ入力のスウィズル、数値変換ユニット1122A−Bによる数値変換、及び複製ユニット1124によるメモリ入力における複製をサポートする。複数の書き込みマスクレジスタ1126は、結果として生じる複数のベクトル書き込みのプレディケイティング(predicating)を許可する。統合メモリコントローラを有するプロセッサおよびグラフィクス
図12は、本発明の複数の実施形態に従って、1つより多くのコアを有し、統合メモリコントローラを有し、また統合グラフィクスを有してよいプロセッサ1200のブロック図である。図12における複数の実線のボックスは、単一のコア1202A、システムエージェント1210、および1または複数のバスコントローラユニット1216のセットを有するプロセッサ1200を示す一方、オプションである追加の破線のボックスは、複数のコア1202A−N、システムエージェントユニット1210内の1または複数の統合メモリコントローラユニット1214のセット、および特定用途用ロジック1208を有する代替例のプロセッサ1200を示す。
従って、プロセッサ1200の複数の異なる実装は、1)統合グラフィクスおよび/または科学的(スループット)ロジック(1または複数のコアを含み得る)である特定用途用ロジック1208、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)である複数のコア1202A−Nを有するCPU、2)主にグラフィクスおよび/または科学的(スループット)を対象としたかなり多くの数の特定用途用コアである複数のコア1202A−Nを有するコプロセッサ、および3)かなり多くの数の汎用インオーダコアである複数のコア1202A−Nを有するコプロセッサを含み得る。従って、プロセッサ1200は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、高スループットの多集積コア(MIC)コプロセッサ(30またはそれより多くのコアを含む)、組み込みプロセッサ等の、汎用プロセッサ、コプロセッサまたは特定用途用プロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1200は、例えばBiCMOS、CMOSまたはNMOS等の多数の処理技術のいずれかを用いる1または複数の回路基板の一部であってよく、および/またはその上に実装されてもよい。
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、複数の共有キャッシュユニット1206のセットまたはこれらの1または複数、および複数の統合メモリコントローラユニット1214のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット1206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他の複数のレベルのキャッシュ、最後のレベルのキャッシュ(LLC)、および/またはそれらの組み合わせ等の1または複数の中間レベルキャッシュを含んでよい。一実施形態において、リングベースの相互接続ユニット1212は、統合グラフィクスロジック1208、共有キャッシュユニット1206のセット、およびシステムエージェントユニット1210/統合メモリコントローラユニット1214を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続する任意の数の既知の技術を用いてもよい。一実施形態において、コヒーレンシが、1または複数のキャッシュユニット1206および複数のコア1202A−Nの間で維持される。
いくつかの実施形態において、コア1202A−Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント1210は、複数のコア1202A−Nを調整し操作するそれらのコンポーネントを含む。システムエージェントユニット1210は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUはコア1202Aから1202Nおよび統合グラフィクスロジック1208の電力状態を調整するのに必要なロジックおよび複数のコンポーネントであってよい、あるいはそれらを含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
複数のコア1202A−Nは、アーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア1202A−Nのうちの2またはそれよりも多くのコアは、同一の命令セットを実行可能であってもよいが、他のものは、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。例示的なコンピュータアーキテクチャ
図13−21は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの当技術分野において既知の他のシステム設計および構成もまた適切である。一般的に、本明細書において開示されるようなプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般に適切である。
ここで図13を参照すると、本発明の一実施形態によるシステム1300のブロック図が示される。システム1300は、コントローラハブ1320に結合される1または複数のプロセッサ1310、1315を含んでよい。一実施形態において、コントローラハブ1320はグラフィクスメモリコントローラハブ(GMCH)1390および入出力ハブ(IOH)1350(個別の複数のチップ上にあってよい)を含む。GMCH1390はメモリ1340およびコプロセッサ1345が結合された複数のメモリおよびグラフィクスコントローラを含む。IOH1350は複数の入出力(I/O)デバイス1360をGMCH1390に結合させる。あるいは、メモリおよびグラフィクスコントローラのうちの一方または両方は、プロセッサに(本明細書において記載されるように)統合され、メモリ1340およびコプロセッサ1345は、IOH1350を有する単一チップ内でプロセッサ1310およびコントローラハブ1320に直接結合される。
複数の追加のプロセッサ1315のオプションの性質は、図13内で複数の破線で示される。各プロセッサ1310、1315は、本明細書において記載される処理コアの1または複数を含んでよく、またプロセッサ1200の何らかのバージョンであってよい。
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、または2つの組み合わせであってよい。少なくとも1つの実施形態に対して、コントローラハブ1320は、フロントサイドバス(FSB)等のマルチドロップバス、クイックパスインターコネクト(QPI)等のポイントツーポイントインタフェース、または同様の接続1395を介して1または複数のプロセッサ1310、1315と通信する。
一実施形態において、コプロセッサ1345は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ1320は、統合グラフィクスアクセラレータを含んでよい。
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の複数の特性等を含む、様々な利点の基準の範囲に関して、物理リ発信元1310、1315の間には様々な違いが存在し得る。
一実施形態において、プロセッサ1310は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に埋め込まれているものは、複数のコプロセッサ命令であってよい。プロセッサ1310はこれらのコプロセッサ命令を、取り付けられたコプロセッサ1345によって実行されるべきタイプであると認識する。従って、プロセッサ1310はコプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令(または複数のコプロセッサ命令を表わす複数の制御信号)をコプロセッサ1345に対して発行する。コプロセッサ1345は、複数の受信されたコプロセッサ命令を受諾し実行する。
ここで図14を参照すると、本発明の実施形態による、第1のより具体的な例示的システム1400のブロック図を示す。図14に示される通り、マルチプロセッサシステム1400はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1450を介して結合された第1のプロセッサ1470および第2のプロセッサ1480を含む。プロセッサ1470および1480のそれぞれは、プロセッサ1200の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ1470および1480はそれぞれプロセッサ1310および1315である一方、コプロセッサ1438はコプロセッサ1345である。別の実施形態において、プロセッサ1470および1480はそれぞれプロセッサ1310およびコプロセッサ1345である。
プロセッサ1470および1480は、統合メモリコントローラ(IMC)ユニット1472および1482をそれぞれ含むことが示される。プロセッサ1470は、また、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1476および1478も含み、同様に第2のプロセッサ1480はP−Pインタフェース1486および1488を含む。プロセッサ1470、1480は、P―Pインタフェース回路1478、1488を用い、ポイントツーポイント(P―P)インタフェース1450を介して情報を交換してよい。図14に示されるように、IMC1472および1482は、複数のプロセッサをそれぞれのメモリ、すなわちメモリ1432およびメモリ1434に結合し、メモリ1432およびメモリ1434は複数のそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ1470、1480は各々、ポイントツーポイントインタフェース回路1476、1494、1486、1498を用い、個々のP−Pインタフェース1452、1454を介してチップセット1490と情報を交換してよい。チップセット1490は、高性能インタフェース1439を介してコプロセッサ1438と情報をオプションとして交換してよい。一実施形態において、コプロセッサ1438は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサ等の特定用途用プロセッサである。
共有キャッシュ(図示せず)は、いずれかのプロセッサ内または両方のプロセッサの外に含まれ得るが、プロセッサが低電力モードに配置された場合に、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、P−P相互接続を介して複数のプロセッサとそれでも接続されてよい。
チップセット1490は、インタフェース1496を介して第1のバス1416に結合され得る。本発明の範囲は限定されないものの、一実施形態において、第1のバス1416はPCI(Peripheral Component Interconnect)バス、あるいはPCIエクスプレスバスまたは別の第3世代I/O相互接続バス等のバスであってよい。
図14に示されるように、様々なI/Oデバイス1414が、第1のバス1416を第2のバス1420に結合するバスブリッジ1418と共に、第1のバス1416に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等の1または複数の追加のプロセッサ1415が、第1のバス1416に結合される。一実施形態において、第2のバス1420はローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス1422、複数の通信デバイス1427、および命令/コードおよびデータ1430を含んでよいディスクドライブまたは他の大容量ストレージデバイス等のストレージユニット1428を含む様々なデバイスが、第2のバス1420に結合されてよい。更に、オーディオI/O 1424が第2のバス1420に結合されてもよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図14のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
ここで図15を参照すると、本発明の実施形態による、第2のより具体的な例示的システム1500のブロック図が示される。図14および図15における同様の複数の要素は、同様の参照番号を有し、図14の複数の特定の態様は、図15の複数の他の態様を不明瞭にするのを回避するべく図15から省略されている。
図15は、プロセッサ1470、1480が統合メモリおよびI/O制御ロジック(「CL」)1472および1482をそれぞれ含んでよいことを示す。従って、CL1472、1482は、複数の統合メモリコントローラユニットおよびI/O制御ロジックを含む。図15は、メモリ1432、1434がCL1472、CL1482に結合されるだけでなく、I/Oデバイス1514もまた、制御ロジック1472、1482に結合されることを図示する。レガシI/Oデバイス1515は、チップセット1490に結合されている。
ここで図16を参照すると、本発明の実施形態によるSoC1600のブロック図が示される。図12における同様の複数の要素は、同様の参照番号を有する。また、複数の破線のボックスは、より進化したSoCにおけるオプションの複数の特徴である。図16において、1または複数の相互接続ユニット1602は、1または複数のコア1202A−Nおよび1または複数の共有キャッシュユニット1206のセットを含むアプリケーションプロセッサ1610、システムエージェントユニット1210、1または複数のバスコントローラユニット1216、1または複数の統合メモリコントローラユニット1214、統合グラフィクスロジックを含んでよい1または複数のコプロセッサ1620のセット、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサ、スタティックランダムアクセスメモリ(SRAM)ユニット1630、ダイレクトメモリアクセス(DMA)ユニット1632、および1または複数の外部ディスプレイに結合するためのディスプレイユニット1640、に結合される。一実施形態において、1または複数のコプロセッサ1620は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ等の特定用途用プロセッサまたは同様のものを含む。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/または複数のストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラマブルシステムにおいて実行される複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
図14で図示されるコード1430等のプログラムコードは、本明細書において記載される複数の機能を実行し、出力情報を生成するべく複数の入力命令に適用されてよい。出力情報は、既知の様式で1または複数の出力デバイスに適用されてよい。本出願の複数の目的において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するべく、高レベル手順型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリまたはマシン言語で実装されてもよい。実際には、本明細書において記載される複数のメカニズムは、範囲において、いずれの特定のプログラミング言語にも限定されない。いずれの場合も、言語は、コンパイル型またはインタープリタ型言語であってよい。
少なくとも1つの実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体上に格納された複数の代表的命令によって実装されてよく、複数の代表的命令は、マシンによって読み取られるとき、マシンに、本明細書において記載される複数の技術を実行するロジックを作成させる。複数の「IPコア」として既知のそのような複数の表現が、有形の機械可読媒体上に格納されてよく、様々な顧客または実際にロジックまたはプロセッサを作成する複数の製造機械にロードする製造施設に供給されてよい。
そのような機械可読記憶媒体は、これらに限定されないが、ハードディスク、フロッピー(登録商標)ディスクを含む任意の他のタイプのディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスク等のストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)等のランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気または光カード等の半導体デバイス、または複数の電子命令を格納するのに適切な任意の他のタイプの媒体を含む、機械またはデバイスによって製造または形成される複数の非一時的で有形の構成の物品を含んでよい。
従って、本発明の複数の実施形態は、本明細書において記載される複数の構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、ハードウェア記述言語(HDL)等の複数の命令または設計データを含む、非一時的で有形の機械可読媒体もまた含む。そのような複数の実施形態はまた、プログラムプロダクトとも呼ばれることもある。エミュレーション(バイナリ変換、コード、モーフィング等を含む)
いくつかの場合において、発信元命令セットからターゲット命令セットへ命令を変換するべく、命令変換器が使用されてよい。例えば、命令変換器は、命令をコアによって処理される1または複数の他の命令に、トランスレート(例えば、スタティックバイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレート、またはそうでなければ変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェアまたはそれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上またはプロセッサ外にあってよく、あるいは、一部がプロセッサ上または一部がプロセッサ外にあってもよい。
図17は、本発明の複数の実施形態による、発信元命令セットにおける複数のバイナリ命令を変換するソフトウェア命令変換器の使用と、ターゲット命令セットにおける複数のバイナリ命令とを対比するブロック図を図示する。例示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器はソフトウェア、ファームウェア、ハードウェアまたはそれらの様々な組み合わせで実装されてよい。図17は、少なくとも1つのx86命令セットコアを有するプロセッサ1716によってネイティブに実行され得るx86バイナリコード1706を生成すべく、x86コンパイラ1704を使用して高レベル言語1702のプログラムがコンパイルされ得ることを示す。少なくとも1つのx86命令セットコア1716を有するプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同じ結果を達成するべく、(1)インテル(登録商標)x86命令セットコアの命令セットのかなりの部分、または(2)少なくとも1つのx86命令セットコアを用いてインテル(登録商標)プロセッサ上で実行することを目標とした複数のアプリケーションまたは他のソフトウェアのオブジェクトコードの複数のバージョンを、互換を有した状態で実行する、またはそうでなければ処理することによって、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同じ機能を達成できる任意のプロセッサを表す。x86コンパイラ1704は、追加のリンケージ処理を用い、またはそれを用いずに、少なくとも1つのx86命令セットコア1716を用いるプロセッサ上で実行され得るx86バイナリコード1706(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図17は、高レベル言語1702のプログラムが代替の命令セットコンパイラ1708を使用してコンパイルされることによって、少なくとも1つのx86命令セットコアを有さないプロセッサ1714(例えば、カリフォルニア州サニーベール(Sunnyvale)のMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベール(Sunnyvale)のARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード1710が生成され得ることを示す。命令変換器1712は、x86バイナリコード1706を、x86命令セットコアを有さないプロセッサ1714によってネイティブに実行され得るコードに変換するのに用いられる。この変換が可能な命令変換器を作成することは難しいので、この変換されたコードは代替の命令セットバイナリコード1710と同一でない可能性がある。しかしながら、変換されたコードは一般的なオペレーションを実現し、代替の命令セットからの複数の命令から成るであろう。従って、命令変換器1712は、エミュレーション、シミュレーション、または任意の他の処理を介して、プロセッサまたはx86命令セットプロセッサもしくはコアを有さない他の電子デバイスがx86バイナリコード1706を実行することを許可するソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
図2および図5−7のいずれかに関して記載された複数のコンポーネント、複数の特徴および詳細もまた、図4のいずれにもオプションとして適用されてよい。その上、装置のいずれかに関して記載される複数のコンポーネント、複数の特徴および詳細は、また、複数の方法のいずれにもオプションとして適用してよく、複数の実施形態では、そのような装置によって、および/またはそのような装置を用いて実行されてよい。本明細書において記載された複数のプロセッサはいずれも、本明細書において開示された複数のコンピュータシステム(例えば、図13−16)のいずれかに含まれてよい。いくつかの実施形態において、コンピュータシステムは、ダイナミックランダムアクセスメモリ(DRAM)を含んでよい。あるいは、コンピュータシステムは、リフレッシュされる必要がないタイプの揮発性メモリまたはフラッシュメモリを含んでよい。本明細書において開示された複数の命令は、本明細書で示される複数のマイクロアーキテクチャのいずれかを有し、本明細書で示される複数のシステムのいずれかにおいて、本明細書で示される複数のプロセッサのいずれかを用いて実行されてよい。
本記載および特許請求の範囲では、用語「結合された」および/または「接続された」は、それらの派生語と共に使用されることもあった。これらの用語は、互いに同義語であることは意図されていない。むしろ、複数の実施形態において、「接続された」は、2つまたはそれより多くの要素が互いに直接物理的および/または電気的に接触していることを示すために用いられてよい。「結合された」は、2つまたはそれより多くの要素が互いに直接物理的および/または電気的に接触していることを意味してよい。しかしながら、「結合された」はまた、2つまたはそれより多くの要素が互いに直接接触していないが、それでもまだ互いに協働し、または相互作用することも意味してよい。例えば、実行ユニットは、1または複数の介在するコンポーネントを介してレジスタおよび/またはデコードユニットに結合されてよい。複数の図において、複数の矢印が複数の接続および結合を示すのに用いられる。
用語「および/または」が用いられることがあった。本明細書において用いられるように、用語「および/または」は、一方または他方または両方を意味する(例えば、Aおよび/またはBはAまたはBまたはAおよびBの両方を意味する)。
上の記載では、具体的な詳細が複数の実施形態の完全な理解を提供するべく説明された。しかしながら、複数の他の実施形態は、これらの具体的な詳細のいくつかを用いずに実施されてよい。本発明の範囲は、上記で提供された複数の具体例によってではなく、以下の特許請求の範囲のみによって決定される。他の複数の例では、既知回路、構造、デバイスおよびオペレーションは、記載の理解を不明瞭にするのを回避するべくブロック図の形態および/または詳細を用いずに示された。適切と考えられる場合、参照番号、または参照番号の末尾部分は、複数の対応するまたは類似の要素を示すべく図間で繰り返された。そのような要素は、特定されるかまたは他の方法で明らかに明白でない限り、複数の同様または同一の特徴をオプションとして有してよい。
複数の特定のオペレーションは、複数のハードウェア要素によって実行されてよく、またはマシン実行可能なもしくは回路実行可能な複数の命令で実施されてよく、それらのコンポーネントまたは命令は、複数のオペレーションを実行する複数の命令を用いてプログラミングされたマシン、回路、またはハードウェア要素(例えば、プロセッサ、プロセッサの一部、回路等)を与えてよい、および/または結果としてもたらしてよい。複数のオペレーションはまた、ハードウェアおよびソフトウェアの組み合わせによってオプションとして実行されてよい。プロセッサ、機械、回路、またはハードウェアは、特有または特定の回路を含んでよく、または他のロジック(例えば、ファームウェアおよび/またはソフトウェアと組み合わされる可能性のあるハードウェア)が、命令を実行および/または処理し、命令に応答して結果を格納するように動作する。
いくつかの実施形態は、機械可読媒体を含む製造物品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって読み取り可能な形態で情報を提供する、例えば記憶するメカニズムを含んでよい。機械可読媒体は、機械によって実行された場合および/または実行されたときに、機械に、本明細書において開示されたオペレーション、方法または技術を実行させ、および/またはそれらを実行する機械を結果としてもたらすように動作する命令または複数の命令のシーケンスを提供するか、またはそこに記憶されていてもよい。
いくつかの実施形態において、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピー(登録商標)ディスク、光記憶媒体、光ディスク、光学データストレージデバイス、CD‐ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、動的RAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データ記憶装置等を含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号で構成されない。いくつかの実施形態において、記憶媒体は固形物を含む有形の媒体を含んでよい。
複数の適切なマシンの複数の例は、限定はされないが、汎用プロセッサ、特定用途用プロセッサ、デジタル論理回路、集積回路等を含む。さらに、複数の適切なマシンの他の例は、プロセッサ、デジタル論理回路、または集積回路を含むコンピュータシステムまたは他の電子デバイスを含む。そのような複数のコンピュータシステムまたは複数の電子デバイスの例は、限定はされないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレット型コンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータおよびスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤ、スマートテレビ、ネットトップス、セットトップボックス、およびビデオゲームコントローラを含む。
例えば「一実施形態」、「実施形態」、「1または複数の実施形態」、「いくつかの実施形態」に対する、本明細書全体にわたる参照は、特定の特徴が本発明の実施に含まれてよいが必ずしも含まれる必要はないことを示す。同様に、記載において様々な特徴は、本開示を簡素化し、様々な発明の態様の理解を援助する目的で、単一の実施形態、図、またはそれらの記載で時々一緒にグループ化される。しかしながら、本開示の方法は、本発明が各請求項で明示的に列挙されるよりも多くの特徴を必要とするという意図を反映しているとして解釈されるべきではない。むしろ、以下の特許請求の範囲は、発明の複数の態様が単一の開示された実施形態の全ての特徴より少ないままでとどまることを反映する。従って、これにより、詳細な説明に続く特許請求の範囲は、この詳細な説明に明示的に組み込まれ、各請求項は、本発明の別個の実施形態として自立している。例示的実施形態
以下の複数の例は、更なる複数の実施形態に関する。複数の例における具体的事柄は、1または複数の実施形態のいずれの箇所で用いられてもよい。
例1は、少なくとも1つのメモリコントローラ、および永続コミット区分命令をデコードするデコードユニットを含むプロセッサである。永続コミット区分命令は送信先記憶位置を示す。プロセッサは、また、デコードユニットおよび少なくとも1つのメモリコントローラに結合された実行ユニットも含む。実行ユニットは、永続コミット区分命令に応答して、送信先記憶位置に区分値を格納するべきである。区分値は、永続コミット区分命令が実行される場合メモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合にメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
例2は、上記複数の永続メモリオペレーションへの少なくともオールファーストストアの少なくとも1つが、プロセッサのキャッシュラインに対応する、バイト粒度およびキャッシュライン粒度のうち1つで永続メモリに対してアドレスされることになっている、例1のプロセッサを含む。
例3は、複数の汎用レジスタを更に含み、永続コミット区分命令は複数の汎用レジスタのうち1つにおいて送信先記憶位置を示すものである、例1のプロセッサを含む。
例4は、プロセッサが、永続コミット区分命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールセカンドストアが、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的に格納される前に永続的に格納されることを阻止しないことになっている、例1のプロセッサを含む。
例5は、例1のプロセッサを含み、例1のプロセッサにおいて、実行ユニットは、永続コミット区分命令に応答して区分値を格納することになっており、当該区分値は、永続コミット区分命令が実行される前に少なくとも1つのメモリコントローラで時々受信されたことになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行された後に少なくとも1つのメモリコントローラで時々受信されることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分することになっている。
例6は、複数のメモリオペレーションへのストアのために複数の単調増加値を、複数のメモリオペレーションが少なくとも1つのメモリコントローラのうちの第1のメモリコントローラに到着するときに生成する単調増加値ジェネレータを更に含む、例1のプロセッサを含む。実行ユニットは、永続コミット区分命令に応答して、永続コミット区分が実行される前につい最近第1のメモリコントローラに到着したことになっているメモリオペレーションへのストアのために生成されたことになっている単調増加値を格納することになっている。
例7は、単調増加値ジェネレータが到着カウンタを含む、例6のプロセッサを含む。
例8は、単調増加値ジェネレータがタイマおよびクロックのうち1つを含む、例6のプロセッサを含む。
例9は、少なくとも1つのメモリコントローラが複数のメモリコントローラを含む、例1のプロセッサを含む。プロセッサは、また、複数のメモリオペレーションへのストアにために、複数のメモリオペレーションが複数のメモリコントローラのそれぞれに到着するときに、単調増加し相互に一貫性のある複数の値を生成することになっている少なくとも1つの単調増加値ジェネレータをオプションとして含む。
例10は、少なくとも1つのメモリコントローラが複数のメモリコントローラを含む、例1のプロセッサを含む。実行ユニットは、永続コミット区分命令に応答して、区分値をオプションとして格納することになっており、当該区分値は、複数のメモリコントローラの複数のドメイン内にあることになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、複数のメモリコントローラの複数の領域内にまたあることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分することになっている。
例11は、例1のプロセッサを含み、例1のプロセッサにおいて、実行ユニットは、永続コミット区分命令に応答して、区分値を格納することになっており、当該区分値は、単一のメモリコントローラの領域内のみにあることになっている上記複数の永続メモリオペレーションへの少なくともオールファーストストアを、単一のメモリコントローラの領域内のみにまたあることになっている上記複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分することになっている。
例12は、デコードユニットが、永続コミットブロック命令をデコードすることになっている例1から11のうちいずれか1つのプロセッサを含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示すことになっている。プロセッサは、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することになっている。
例13は、複数のレジスタを更に含む、例12のプロセッサを含む。永続コミット区分命令は、複数のレジスタの所定のレジスタを、送信先記憶位置として黙示的に示すものである。永続コミットブロック命令は、オプションとして所定のレジスタを発信元記憶位置として黙示的に示すものである。
例14は、プロセッサが永続コミットブロック命令に応答して、永続コミットブロック命令の実行後に実行されることになっている上記複数の永続メモリ命令への少なくとも任意のストアの実行を、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的に格納されてしまうまで中断することになっている、例12のプロセッサを含む。
例15は、プロセッサが、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への上記任意のストアが実行される前に、永続的にストアされたことを保証するが、必ずしも、永続コミットブロック命令の実行後に複数の永続メモリ命令への上記任意のストアが実行される前に、複数の非永続メモリ命令への任意のストアが永続的に格納されたことを保証しない、例12のプロセッサを含む。
例16は、プロセッサが、永続コミットブロック命令に応答して、永続コミットブロック命令の実行後に上記複数の永続メモリ命令への任意のストアが実行される前であり、且つ永続コミットブロック命令の実行後に複数の非永続メモリ命令への任意のストアが実行される前に、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続的に格納されたことを保証することになっている、例12のプロセッサを含む。
例17は、プロセッサが、永続コミットブロック命令に応答して、区分値を、複数のメモリオペレーションが少なくとも1つのメモリコントローラから出て行くときに複数のメモリオペレーションへのデパーティングストアから取得された複数の値と比較する、例12のプロセッサを含む。
例18は、デコードユニットが永続コミットチェック命令をデコードすることになっている、例1から11のうちいずれか1つのプロセッサを含む。永続コミットチェック命令は、送信先記憶位置を示すものである。プロセッサは、永続コミットチェック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが永続的格納されたかどうかを示すことになっている永続コミットチェック命令によって示される送信先記憶位置に値を格納することになっている。
例19は、永続コミットチェック命令が区分値を有することになっている発信元記憶位置を示す、例18のプロセッサを含む。
例20は、プロセッサが、永続コミットチェック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアを永続的に格納する進捗度のレベルを示すことになっている永続コミットチェック命令によって示される送信先記憶位置に値を格納することになっている、例18のプロセッサを含む。
例21は、永続コミット区分命令を受信する段階を含む、プロセッサにおける方法である。永続コミット区分命令は、送信先記憶位置を示す。方法は、また、永続コミット区分命令に応答して、送信先記憶位置において区分値を格納する段階を含む。区分値は、永続コミット区分命令が実行されるときにメモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行されるときにメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
例22は、永続コミットブロック命令を受信する段階を更に含む、例21の方法を含む。永続コミットブロック命令は、区分値を格納する発信元記憶位置を示している。方法は、また、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続コミットブロック命令に応答して、永続的に格納されたことを保証する段階も含む。
例23は、永続コミットチェック命令を受信する段階を更に含む、例21の方法を含む。永続コミットチェック命令は、送信先記憶位置を示している。方法は、また、永続コミットチェック命令に応答して永続コミットチェック命令によって示された送信先記憶位置において、値を格納する段階を含む。永続コミットチェック命令に応答して格納されるべき値は、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続的に格納されたかどうかを示すものである。
例24は、相互接続を含む複数の命令を処理するシステム、および相互接続に結合されたプロセッサである。プロセッサは、永続コミット区分命令を受信するものである。永続コミット区分命令は、送信先記憶位置を示すものである。プロセッサは、永続コミット区分命令に応答して、送信先記憶位置において区分値を格納することになっている。区分値は、永続コミット区分命令が実行されるときにメモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行されるときにメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。システムは、また、相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)も含む。DRAMは、複数の命令のセットを格納する。複数の命令のセットは、プロセッサによって実行されるとき、(1)上記複数の永続メモリオペレーションへの少なくともオールファーストストアに依存しない非依存性ワークを実行することを決定する段階と、(2)永続コミット区分命令を実行した後にワークを実行する段階とを含む複数のオペレーションをプロセッサに実行させる。
例25は、プロセッサが永続コミットブロック命令を受信することになっている、例24のシステムを含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示す。プロセッサは、永続コミットブロック命令に応答して、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することになっている。
例26は、非一時的機械可読記憶媒体を含む製造物である。非一時的機械可読記憶媒体は、永続コミット区分命令を格納する。永続コミット区分命令は、送信先記憶位置を示すものである。永続コミット区分命令は、マシンによって実行される場合、マシンに、送信先記憶位置において区分値を格納することを含む複数のオペレーションを実行させるものである。区分値は、永続コミット区分命令が実行される場合メモリに受諾されたことになっているが、必ずしも永続的に格納されたことにはなっていない、複数の永続メモリオペレーションへの少なくともオールファーストストアを、永続コミット区分命令が実行される場合にメモリに受諾されたことにはまだなっていない複数の永続メモリオペレーションへの少なくともオールセカンドストアから、区分する。
例27は、非一時的機械可読記憶媒体がまた、永続コミットブロック命令も格納する、例26の製造物を含む。永続コミットブロック命令は、区分値を格納することになっている発信元記憶位置を示すものである。永続コミットブロック命令は、マシンによって実行される場合、マシンに、上記複数の永続メモリオペレーションへの少なくともオールファーストストアが、永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、永続的に格納されたことを保証することを含む複数のオペレーションを実行させるものである。
例28は、例1から20のうちいずれか1つのプロセッサを含み、複数の分岐を予測するオプションの分岐予測ユニット、および分岐予測ユニットに結合されたオプションの命令プリフェッチユニットを更に含み、命令プリフェッチユニットは、命令を含む複数の命令をプリフェッチするものである。プロセッサは、また、命令プリフェッチユニットに結合された、複数の命令を格納するオプションのレベル1(L1)命令キャッシュ、データを格納するオプションのL1データキャッシュ、およびデータおよび複数の命令を格納するオプションのレベル2(L2)キャッシュをオプションとして含んでよい。プロセッサは、また、デコードユニットに結合された命令フェッチユニット、L1命令キャッシュ、およびL2キャッシュを、L1命令キャッシュおよびL2キャッシュのうち1つから命令をフェッチし、命令をデコードユニットへ提供するいくつかの場合において、オプションとして含んでよい。プロセッサは、また、複数のレジスタをリネームするレジスタリネームユニット、実行のために命令からデコードされた1または複数のオペレーションをスケジューリングするオプションのスケジューラ、および命令の複数の実行結果をコミットするオプションのコミットユニットもオプションとして含んでよい。
例29は、例21から23のうちいずれか1つの方法を実行するまたは実行するように動作するプロセッサまたは他の装置である。
例30は、例21から23のうちいずれか1つの方法を実行するための手段を含むプロセッサまたは他の装置である。
例31は、命令をオプションとして格納し、またはそうでなければ提供し、プロセッサ、コンピュータシステム、電子デバイスまたは他のマシンによって実行される場合および/または実行されるとき、マシンに例21から23のうちいずれか1つの方法を実行させるように動作する、非一時的マシン可読媒体をオプションとして含む製造物である。例32は、実質的に本明細書において記載されたようなプロセッサまたは他の装置である。
例33は、実質的に本明細書において記載されたような任意の方法を実行するように動作するプロセッサまたは他の装置である。
例34は、実質的に本明細書において記載されたような任意の命令を実行する(例えば、実行する、または実行するように動作する複数のコンポーネントを有する)プロセッサまたは他の装置である。
例35は、第1の命令セットの複数の命令をデコードするデコードユニットを有するプロセッサを含むコンピュータシステムまたは他の電子デバイスである。
プロセッサは、また、1または複数実行ユニットを有する。
電子デバイスは、また、プロセッサに結合されたストレージデバイスも含む。
ストレージデバイスは、実質的に本明細書において開示されたような複数の命令のいずれかであってよい第1の命令を格納するものであり、第2の命令セットのものである。
ストレージデバイスは、また、第1の命令を第1の命令セットの1つまたは複数の命令へと変換する複数の命令を格納するものでもある。
第1の命令セットの1つまたは複数の命令は、プロセッサによって実行される場合、プロセッサに第1の命令をエミュレートさせるものである。
[項目1]
少なくとも1つのメモリコントローラと、
送信先記憶位置を示す永続コミット区分命令をデコードするデコードユニットと、
上記デコードユニットおよび上記少なくとも1つのメモリコントローラに結合された実行ユニットであって、上記実行ユニットは、上記永続コミット区分命令に応答して上記送信先記憶位置に区分値を格納し、上記区分値は、上記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、上記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分する、上記実行ユニットと、を備える、プロセッサ。
[項目2]
複数の永続メモリオペレーションへの上記少なくともオールファーストストアのうち少なくとも1つは、上記プロセッサのキャッシュラインに対応するバイト粒度およびキャッシュライン粒度のうち1つで永続メモリにアドレスされる、項目1に記載のプロセッサ。
[項目3]
複数の汎用レジスタを更に備え、上記永続コミット区分命令が、上記複数の汎用レジスタのうち1つにおいて上記送信先記憶位置を示す、項目1に記載のプロセッサ。
[項目4]
上記プロセッサは、上記永続コミット区分命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールセカンドストアが、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納される前に永続的に格納されることを阻止しない、項目1に記載のプロセッサ。
[項目5]
上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、上記永続コミット区分命令が実行される前に、上記少なくとも1つのメモリコントローラで時々受信された複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記永続コミット区分命令が実行された後に、上記少なくとも1つのメモリコントローラで時々受信される複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目1に記載のプロセッサ。
[項目6]
複数のメモリオペレーションへのストアのために、それらが上記少なくとも1つのメモリコントローラのうちの第1のメモリコントローラに到着すると複数の単調増加値を生成する単調増加値ジェネレータを更に備え、上記実行ユニットは、上記永続コミット区分命令に応答して、上記永続コミット区分が実行される前に上記第1のメモリコントローラでつい最近到着したメモリオペレーションへのストアのために生成された単調増加値を格納する、項目1に記載のプロセッサ。
[項目7]
上記単調増加値ジェネレータは、到着カウンタを有する、項目6に記載のプロセッサ。
[項目8]
上記単調増加値ジェネレータは、タイマおよびクロックのうち1つを有する、項目6に記載のプロセッサ。
[項目9]
上記少なくとも1つのメモリコントローラは、複数のメモリコントローラを有し、複数のメモリオペレーションが上記複数のメモリコントローラのそれぞれに到着すると、複数のメモリオペレーションへのストアのために単調増加し相互に一 貫性のある複数の値を生成する少なくとも1つの単調増加値ジェネレータを更に備える、項目1に記載のプロセッサ。
[項目10]
上記少なくとも1つのメモリコントローラは、複数のメモリコントローラを有し、上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、上記複数のメモリコントローラの複数のドメイン内にある複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記複数のメモリコントローラの上記複数のドメイン内にまたある複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目1に記載のプロセッサ。
[項目11]
上記実行ユニットは、上記永続コミット区分命令に応答して、上記区分値を格納し、上記区分値は、単一のメモリコントローラの領域内のみにある複数の永続メモリオペレーションへの上記少なくともオールファーストストアを、上記単一のメモリコントローラの領域内のみにまたある複数の永続メモリオペレーションへの上記少なくともオールセカンドストアから区分する、項目1に記載のプロセッサ。
[項目12]
上記デコードユニットは、永続コミットブロック命令をデコードし、上記永続コミットブロック命令は、上記区分値を格納するソースストレージ位置を示し、上記プロセッサは、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたことを保証する、項目1から11のうちいずれか1項に記載のプロセッサ。
[項目13]
複数のレジスタを更に備え、上記永続コミット区分命令が、上記複数のレジスタのうちの所定のレジスタを上記送信先記憶位置として黙示的に示し、上記永続コミットブロック命令が、上記所定のレジスタを上記ソースストレージ位置として黙示的に示す、項目12に記載のプロセッサ。
[項目14]
上記プロセッサは、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に実行される複数の永続メモリ命令への上記少なくとも任意のストアの実行を、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されてしまうまで中断する、項目12に記載のプロセッサ。
[項目15]
上記プロセッサは、上記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、必ずしも上記永続コミットブロック命令の上記実行後に複数の非永続メモリ命令への任意のストアが実行される前でないが、上記永続コミットブロック命令の上記実行後に複数の永続メモリ命令への上記任意のストアが実行される前に永続的に格納されたことを保証する、項目12に記載のプロセッサ。
[項目16]
上記プロセッサは、上記永続コミットブロック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、上記永続コミットブロック命令の上記実行後に複数の永続メモリ命令への上記任意のストアが実行される前であり、且つ上記永続コミットブロック命令の上記実行後に複数の非永続メモリ命令への任意のストアが実行される前に、永続的に格納されたことを保証する、項目12に記載のプロセッサ。
[項目17]
上記プロセッサは、上記永続コミットブロック命令に応答して、複数のメモリオペレーションが上記少なくとも1つのメモリコントローラから出て行く場合に、上記区分値を、複数のメモリオペレーションへのデパーティングストアから取得される複数の値と比較する、項目12に記載のプロセッサ。
[項目18]
上記デコードユニットは、永続コミットチェック命令をデコードし、上記永続コミットチェック命令は、送信先記憶位置を示し、上記プロセッサは、上記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたかどうかを示す上記永続コミットチェック命令によって示される上記送信先記憶位置に値を格納する、項目1から11のいずれか1項に記載のプロセッサ。
[項目19]
上記永続コミットチェック命令は、上記区分値を有するソース記憶位置を示し、上記プロセッサは、上記永続コミットチェック命令に応答して、複数の永続メモリオペレーションへの上記少なくともオールファーストストアを永続的に格納することの進捗のレベルを示す上記永続コミットチェック命令によって示される上記送信先記憶位置に上記値を格納する、項目18に記載のプロセッサ。
[項目20]
プロセッサにおいて、
送信先記憶位置を示す永続コミット区分命令を受信する段階と、
上記永続コミット区分命令に応答して、上記送信先記憶位置に区分値を格納する段階であって、上記区分値は、上記永続コミット区分命令が実行される場合にメモリに受諾されたが、必ずしも永続的に格納されなかった複数の永続メモリオペレーションへの少なくともオールファーストストアを、上記永続コミット区分命令が実行される場合にメモリにまだ受諾されなかった複数の永続メモリオペレーションへの少なくともオールセカンドストアから区分する、段階と、を備える、方法。
[項目21]
上記区分値を格納するソースストレージ位置を示す永続コミットブロック命令を受信する段階と、
複数の永続メモリオペレーションへの上記少なくともオールファーストストアが、上記永続コミットブロック命令に応答して、上記永続コミットブロック命令の実行後に複数の永続メモリ命令への少なくとも任意のストアが実行される前に永続的に格納されたことを保証する段階と、
を更に備える、項目20に記載の方法。
[項目22]
送信先記憶位置を示す永続コミットチェック命令を受信する段階と、
上記永続コミットチェック命令に応答して上記永続コミットチェック命令によって示される上記送信先記憶位置に値を格納する段階であって、上記永続コミットチェック命令に応答して格納される値が、複数の永続メモリオペレーションへの上記少なくともオールファーストストアが永続的に格納されたかどうかを示す、段階と、を更に備える、項目20に記載の方法。
[項目23]
項目20から22のうちいずれか1項に記載の方法を実行するための手段を備える装置。
[項目24]
マシンによって実行される場合、上記マシンに項目20から22のいずれか1項の方法を実行させるように動作する少なくとも1つの命令を格納する非一時的マシン可読媒体を備える、製造物。
[項目25]
相互接続と、
上記相互接続で結合された項目1から11のいずれか1項のプロセッサと、
上記相互接続で結合された、複数の命令のセットを格納しているダイナミックランダムアクセスメモリ(DRAM)であって、上記複数の命令のセットは、上記プロセッサによって実行される場合、上記プロセッサに、
複数の永続メモリオペレーションへの上記少なくともオールファーストストアに依存しない、実行するべき非依存性ワークを決定することと、上記永続コミット区分命令を実行した後に上記ワークを実行することと、を有する、複数のオペレーションを実行させる、ダイナミックランダムアクセスメモリ(DRAM)と、を備える、電子デバイス。