JP2017532643A - 永続ストアフェンスプロセッサ、方法、システム、及び命令 - Google Patents

永続ストアフェンスプロセッサ、方法、システム、及び命令 Download PDF

Info

Publication number
JP2017532643A
JP2017532643A JP2017510898A JP2017510898A JP2017532643A JP 2017532643 A JP2017532643 A JP 2017532643A JP 2017510898 A JP2017510898 A JP 2017510898A JP 2017510898 A JP2017510898 A JP 2017510898A JP 2017532643 A JP2017532643 A JP 2017532643A
Authority
JP
Japan
Prior art keywords
persistent
instruction
store
processor
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017510898A
Other languages
English (en)
Inventor
ワン、チェン
ウー、ヨウフェン
エム. サンカラン、ラジェシュ
エム. サンカラン、ラジェシュ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2017532643A publication Critical patent/JP2017532643A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

ある態様のプロセッサは、永続ストアフェンス命令をデコードするデコードユニットを含む。プロセッサはまた、デコードユニットに結合されたメモリサブシステムモジュールを含む。メモリサブシステムモジュールは、永続ストアフェンス命令に応答して、全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する。後続のストア命令が、元のプログラム順序において永続ストアフェンス命令の後に発生する。他のプロセッサ、方法、システム、及び製造物品もまた開示されている。

Description

本明細書に説明される複数の実施形態は概して、データのストレージに関する。特に、本明細書に説明される複数の実施形態は概して、永続メモリにおけるデータのストレージに関する。
プロセッサは一般に、メモリにアクセスするための複数の命令を実行するよう動作可能である。例えば、プロセッサは、メインメモリからデータをロードするか読み出すための複数のロード命令、及び/又は、メインメモリにデータを書き込こむか別な方法でデータを格納するための複数ストア命令を実行し得る。
カリフォルニア州サンタクララのIntel Corporationにより2014年6月に公開されたIntel(登録商標)64及びIA−32アーキテクチャのソフトウェア開発者マニュアル(1版、2A版、2B版、2C版、3A版、3B版、及び3C版の合併版:注文番号325462−051US)は、ストアオペレーションをシリアル化するためのSFENCE(ストアフェンス)命令を説明している。SFENCE命令は、SFENCE命令の前に出された全てのメモリストア命令にシリアル化オペレーションを実行し得る。このシリアル化オペレーションは、プログラム順序においてSFENCE命令に先行するあらゆるストア命令が、SFENCE命令に続く任意のストア命令の前に全体に可視化されるようになることを保証し得る。
本発明は、以下の説明及び複数の実施形態を図示するのに用いられる添付図面を参照することで最も良く理解され得る。これらの図面は以下の通りである。
本発明の複数の実施形態が実装され得るコンピュータシステムの一実施形態のブロック図である。 永続ストアフェンス命令の一実施形態を実行するよう動作可能なプロセッサの一実施形態のブロック図である。 永続ストアフェンス命令の一実施形態を実行する方法の一実施形態のブロックフロー図である。 永続ストアフェンスバッファの例示的な一実施形態を有するメモリサブシステムモジュールの例示的な一実施形態のブロック図である。 異なる複数の永続ストアフェンス命令に対応するデータを有する永続ストアフェンスバッファ用のキャッシュラインの例示的な一実施形態のブロック図である。 データ及びログ先行書き込みを有する永続メモリの一実施形態のブロック図である。 本明細書に開示されるような永続ストアフェンス命令を用いずに実行されるログ先行書き込みの1つの可能な方法のブロックフロー図である。 永続ストアフェンス命令の一実施形態を用いて実行されるログ先行書き込みの方法の例示的な一実施形態のブロックフロー図である。 永続ストアフェンスバッファの一実施形態に適した様々な位置を図示するブロック図である。 インオーダパイプラインの一実施形態と、レジスタリネーミングするアウトオブオーダ発行/実行パイプラインの一実施形態とを図示するブロック図である。 実行エンジンユニットに結合されたフロントエンドユニットを含み、両者がメモリユニットに結合されたプロセッサコアの一実施形態のブロック図である。 シングルプロセッサコアの一実施形態のブロック図であり、オンダイ相互接続ネットワークへの接続に加え、レベル2(L2)キャッシュのローカルサブセットを有する。 図11Aのプロセッサコアの一部の拡大図の一実施形態のブロック図である。 複数のコアを有し得る、統合メモリコントローラを有し得る、及び統合グラフィクスを有し得るプロセッサの一実施形態のブロック図である。 コンピュータアーキテクチャの第1の実施形態のブロック図である。 コンピュータアーキテクチャの第2の実施形態のブロック図である。 コンピュータアーキテクチャの第3の実施形態のブロック図である。 システムオンチップアーキテクチャの一実施形態のブロック図である。 本発明の複数の実施形態による、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用法についてのブロック図である。
本明細書に開示されるのは、永続ストアフェンス命令、その命令を実行するためのプロセッサ、その命令を処理又は実行するとプロセッサにより実行される方法、及びその命令を処理又は実行するための1つ又は複数のプロセッサを組み込むシステムである。以下の説明には、複数の具体的な詳細(例えば、特定の命令オペレーション、プロセッサ構成、マイクロアーキテクチャ的な詳細、オペレーションのシーケンス、命令の使用法など)が説明されている。しかし、複数の実施形態はこれらの具体的な詳細を用いずに実施され得る。他の複数の例では、よく知られた回路、構造、及び技術は、本明細書の理解を不明瞭にするのを回避するために、詳細に示されてはいない。
図1は、本発明の複数の実施形態が実装され得るコンピュータシステム100の一実施形態のブロック図である。コンピュータシステムは、プロセッサ102と、任意的に揮発性又はそうでなければ非永続ストレージ122と、不揮発性又はそうでなければ永続ストレージ124とを含む。非永続ストレージ122は任意的であり必要ではない。プロセッサは、1つ又は複数の相互接続構造120、例えば、1つ又は複数のバスあるいは他の複数の相互接続、1つ又は複数のハブあるいは他のチップセットコンポーネント、それらの組み合わせなどにより、非永続ストレージ122及び永続ストレージ124に結合されてよい。当技術分野で知られている複数の揮発性メモリ及び不揮発性メモリとプロセッサを結合する様々な方法が適している。
揮発性メモリは、電力が印可されないとその内容を失うメモリ又はストレージのタイプを表す。それに対して、不揮発性メモリは、電力が印可されなくても、その内容を長期間保持することが可能なメモリ又はストレージのタイプを表す。例えば、電力なしで数週間、数か月、又は数年後でも、データは不揮発性メモリから読み出され得る。非永続ストレージの適切なタイプの例には、限定されないが、ダイナミックランダムアクセスメモリ(DRAM)、及び今後開発されるタイプを含む他の形態のRAMが含まれる。永続ストレージの適切なタイプの例には、限定されないが、ハードディスク、磁気テープ、他のタイプの磁気ストレージデバイス、フラッシュメモリ、様々なタイプのリードオンリメモリ(ROM)、光ディスク、強誘電体RAM(F−RAM)、磁気抵抗RAM、及び今後開発される他のタイプが含まれる。
いくつかの実施形態において、非永続ストレージ122及び永続ストレージ124の両方は、一次ストレージとして一緒に又は集合的に任意に用いられてよく、両方ともプロセッサにアクセス可能(例えば、プロセッサによってアドレス指定可能)であってよい。他の複数の実施形態において、非永続ストレージ122は任意に省略されてよく、永続ストレージ124がプロセッサにアクセス可能(例えば、プロセッサによってアドレス指定可能)な一次ストレージとして用いられてよい。さらに他の複数の実施形態において、非永続ストレージ122は一次ストレージ(例えば、メインメモリ)として利用されてよく、永続ストレージは二次ストレージ又は補助ストレージとして利用されてよいが、永続ストレージはプロセッサにアクセス可能(例えば、プロセッサによってアドレス指定可能)であってよい。
プロセッサ102は命令セット104を有する。命令セットはプロセッサの命令セットアーキテクチャ(ISA)の一部であり、プロセッサが実行するよう動作可能な複数のネイティブ命令を含む。命令セットの複数の命令は、命令セットのこのような命令からデコードされたマイクロ命令又は他の命令とは対照的に、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、又は機械レベルの命令を表す。示されるように、命令セットは、非永続ストレージ及び/又は永続ストレージからデータをロードする又は読み出すための1つ又は複数のロード命令106を含んでよい。命令セットはまた、非永続ストレージ及び/又は永続ストレージにデータを移す、書き込む、又はそうでなければ格納するための1つ又は複数のストア命令108を含んでよい。
プロセッサは命令セットの複数の命令を処理するためのパイプライン112を有する。例として、パイプラインは、命令をフェッチするための命令フェッチユニット、命令をデコードするためのデコードユニット、デコードされた命令を実行するための1つ又は複数の実行ユニットなどを含んでよい。当技術分野で知られている様々な異なるプロセッサパイプライン設計が適している。本発明の範囲は、知られているいかなるパイプライン設計にも限定されない。プロセッサはまた、非永続ストレージ及び/又は永続ストレージとインタフェースするためのメモリサブシステム114を有する。メモリサブシステムは、1つ又は複数のキャッシュ118(例えば、1つ又は複数のレベルのキャッシュ)を含んでよい。例えば、特定のプロセッサは、パイプラインに相対的により近く及び/又は永続ストレージからより遠いレベル1(L1)命令・データ結合キャッシュと、パイプラインから相対的により遠く、及び/又は永続ストレージにより近いレベル2(L2)データキャッシュとを有する。他の複数のプロセッサは、単一レベルのキャッシュ、あるいは3つ又はそれより多くの異なるレベルのキャッシュを有してよい。各キャッシュは、特定の実装例に所望される命令及び/又はデータを保持してよい。
キャッシュ118を用いる1つの理由は、非永続ストレージ及び/又は永続ストレージのデータにプロセッサがアクセスする際のレイテンシを削減するのに役立つことである。非永続ストレージ及び/又は永続ストレージのデータへのアクセスは概して、キャッシュのデータへのアクセスより著しく遅いという傾向がある。例えば一般に、キャッシュのデータへのアクセスは、数回のプロセッサクロックサイクルしかかからないが、それに対して一次ストレージのデータへのアクセスは、典型的に数十回から数百回のクロックサイクルがかかり得る。結果として、性能改善に役立つために、プロセッサは特定のデータ(例えば、空間的及び/又は時間的に位置するデータ)を非永続ストレージ及び/又は永続ストレージからキャッシュに持ってきてよく、これにより、近いうちに再度同じデータが必要とされる場合に、データは非永続ストレージ及び/又は永続ストレージからより低速でアクセスされる代わりに、キャッシュから高速でアクセスされ得る。
さらに、ストア命令108は、プロセッサから非永続ストレージ及び/又は永続ストレージにデータを直接及び/又はすぐに格納しなくてよい。むしろ、データは最初にキャッシュされてよい、つまりキャッシュ118に格納されてよい。ここでも、データが近いうちに再度必要とされる場合に、このことがプロセッサの近くにデータを保持するのに役立ち得る、及び/又は、ストレージへのより長いレイテンシのアクセスを回避するのに役立ち得る。プロセッサのメモリサブシステムは、データが適切な時に非永続ストレージ及び/又は永続ストレージとコヒーレントに格納されることを保証するのに役立つキャッシュコヒーレンシメカニズム又はモジュール116を有してよく、これによりシステムの全てのエンティティ(例えば、別のプロセッサ)は、正確且つ最新版のデータを見る。例として、キャッシュコヒーレンシメカニズム又はモジュールは、各キャッシュラインが4つの状態、つまり変更、排他、共有、又は無効のうち1つであるMESIプロトコルを実装するのに役立ち得る。
データを永続ストレージ124(例えば、不揮発性メモリ)に格納する1つの利点は、データの永続性又は耐久性である。永続性又は耐久性は概して、電力損失、オペレーティングシステムの故障、システムクラッシュ、プロセッサの故障、又は大部分の他のタイプのエラー(例えば、コンピュータシステムが再起動を必要とするもの)の場合に、格納されたデータが失われないことを意味する。データが永続ストレージに格納されると、電力損失、オペレーティングシステムの故障などがあっても、データは通常保持される。さらに、プロセッサが故障しても、又はコンピュータシステムがハードウェア故障に起因して違ったふうに故障しても、永続ストレージが残っている限り、データをリカバリすることは一般に可能であり得る。それに対して、非永続ストレージ122(例えば、揮発性メモリ)に格納されたデータは概して、永続性又は耐久性があるとみなされない。同様に、キャッシュ118、並びにロード/ストアバッファ、及び/又は様々な他の一時キャッシュ、及び/又はプロセッサのバッファ構造(簡略化のために図には示されない)に格納されたデータもまた、概して、永続性又は耐久性があるとみなされない。非永続ストレージ、キャッシュなどに格納されたそのようなデータは、電力損失、オペレーティングシステムの故障、システムクラッシュ、プロセッサの故障、及び特定の他のタイプのエラーの場合に失われ得る。
さらに、特定のアプリケーション及び/又は実装が、永続的に又は耐久的に格納されるデータを必要とする。例えば、特定のデータベースアプリケーション及び/又はデータトランザクションでは、データを失わないことが非常に重要である。また、いくつかのアプリケーション及び/又は実装において、データを永続的に及び/又は耐久的に特定の順序で格納する(例えば、1つのデータを別のデータの前に永続的に及び/又は耐久的に格納する)ことは有用であり得る。例として、ログ先行書き込み、他の順次格納アルゴリズムなどの実装の場合にはそうかもしれない。いくつかの実施形態において、プロセッサの命令セット104は、後続のデータ格納が永続ストレージ124に実行される前に、関連したデータ格納が永続ストレージ124に実行されることを生じさせる又は保証する永続ストアフェンス命令110の一実施形態を含んでよい。
図2は、永続ストアフェンス命令210の一実施形態を実行するよう動作可能なプロセッサ202の一実施形態のブロック図である。いくつかの実施形態において、プロセッサは汎用プロセッサ(例えば、デスクトップ、ラップトップ、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理ユニット(CPU))であってよい。あるいは、プロセッサは専用プロセッサであってよい。適切な専用プロセッサの例には、限定されないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィクスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラ(例えば、マイクロコントローラ)が含まれる。プロセッサは、様々な複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのうちいずれを有してよく、又は異なるアーキテクチャの組み合わせを有してもよい(例えば、複数の異なるコアが複数の異なるアーキテクチャを有してよい)。
動作中に、プロセッサ202はコード230(例えば、プログラム)を実行(execute、run、perform)してよい。例えば、コードは、永続ストレージ224及び/又は任意的に非永続メモリ(不図示)からプロセッサにフェッチされ、読み込まれ、又は別な方法で受信されてよい。永続ストレージ224は、それが概してプロセッサの一部ではないことを示すために破線で示されている。コードは、様々な異なるタイプの命令を含んでよい。これらの命令の中で、コードは永続ストアフェンス命令210を含む。いくつかの実施形態において、永続ストアフェンス命令はそれ自体が任意に永続ストア命令であってよく、永続ストレージ224にデータを移す、書き込む、又はそうでなければ格納する(例えば、命令210は永続ストア及び永続ストアフェンス命令であってよい)。そのような永続ストア及び永続ストアフェンス命令210は、任意的に関連永続ストアオペレーション228を有し、関連データを永続ストレージ224に格納してよい。このような実施形態において、命令210は、永続ストレージに格納されるデータを有するソースオペランドを明示的に指定してよく(例えば、1つ又は複数のフィールド、あるいはビットのセットによって)、又は別な方法で示してもよい(例えば、暗黙的に示す)。命令210は、データが格納される永続ストレージ224のアドレス又は他の位置を明示的に指定してよく(例えば、1つ又は複数のフィールド、あるいはビットのセットによって)、又は別な方法で示してもよい(例えば、暗黙的に示す)。いくつかの実施形態において、永続ストレージ224はプロセッサの命令セットの命令によってアドレス指定可能であり得ることに留意されたい。あるいは、他の複数の実施形態において、永続ストアフェンス命令は関連永続ストアオペレーション228を有さなくてよい。例えば、永続ストアフェンス命令は、データを永続ストレージ224に格納するよう動作する別個であるが関連した永続ストア命令208Eとともに動作するよう設計されてよく、又はそう意図されてもよい。例えば、別個の永続ストア命令208Eは、元のプログラム又はコードの順序において、永続ストアフェンス命令210の(例えばすぐ)前に(又は代替的に(例えばすぐ)後に)あるよう設計されてよく、又は暗黙的にそう理解されてもよい。コードはまた、プログラム順序において永続ストアフェンス命令210より後に、及び/又はその後に発生する1つ又は複数の永続ストア命令208Lのセットを含んでよい。前の永続ストア命令208Eはまた、元のプログラム又はコードの順序において、後の全ての永続ストア命令208Lより早く及び/又はその前に発生し得る。
再度図2を参照すると、プロセッサはデコードユニット又はデコーダ226を含む。デコードユニットは、永続ストアフェンス命令210を受信してデコードし得る。永続ストアフェンス命令は、マクロ命令、アセンブリ言語命令、マシンコード命令、あるいはプロセッサの命令セットの他の命令又は制御信号を表してよい。デコードユニットは、1つ又は複数の相対的に低水準の命令又は制御信号(例えば、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令又は制御信号など)を出力してよく、これは相対的により高水準の永続ストアフェンス命令を反映し、表し、及び/又はそこから導出される。いくつかの実施形態において、デコードユニットは、命令を受信するための1つ又は複数の入力構造(例えば、ポート、相互接続、インタフェース)と、それに結合されて命令を認識し且つデコードするための命令認識・デコードロジックと、それに結合されて低水準命令又は制御信号を出力するための1つ又は複数の出力構造(例えば、ポート、相互接続、インタフェース)とを含んでよい。デコードユニットは、限定されないが、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び当技術分野で知られているデコードユニットを実装するのに用いられる他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
いくつかの実施形態において、デコードユニットに直接提供されている永続ストアフェンス命令の代わりに、命令エミュレータ、変換器、モーファ、インタープリタ、又は他の命令変換モジュールが任意に用いられてよい。様々なタイプの命令変換モジュールは当技術分野で知られており、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組み合わせで実装されてよい。いくつかの実施形態において、命令変換モジュールはプロセッサの外に、例えば、別のダイ上、及び/又はメモリ内などに(例えば、スタティック、ダイナミック、又はランタイムエミュレーションモジュールとして)位置してよい。例として、命令変換モジュールは、第1の命令セットであり得る永続ストアフェンス命令を受信してよく、永続ストアフェンス命令を、第2の異なる命令セットであり得る1つ又は複数の対応する中間命令又は制御信号にエミュレート、トランスレート、モーフィング、解釈、又は別な方法で変換してよい。第2の命令セットの1つ又は複数の中間命令又は制御信号は、これらをプロセッサのネイティブハードウェア(例えばメモリサブシステムモジュール)によって実行可能な1つ又は複数の低水準命令又は制御信号にデコードし得るデコードユニット(例えば、デコードユニット226)に提供されてよい。
再度図2を参照すると、メモリサブシステムモジュール214はデコードユニット226に結合されている。メモリサブシステムモジュールは、永続ストアフェンス命令を表す及び/又はそこから導出される1つ又は複数のデコードされた又は別な方法で変換された命令又は制御信号を受信してよい。複数の実施形態において、永続ストアフェンス命令は永続ストア命令及び永続ストアフェンス命令であり、メモリサブシステムモジュールはまた、命令210によって指定された又は示されたソースオペランドに関するデータ、又は命令210によって指定された又は示された、データが格納される永続ストレージ224のアドレス又は位置のインジケーションを受信してよい。メモリサブシステムモジュールは、永続ストアフェンス命令に応答して及び/又はその結果として(例えば、命令からデコードされた1つ又は複数の命令又は制御信号に応答して)動作し、全ての後の又は後続のストアオペレーション及び/又は命令のデータ(すなわち、元のプログラム順序において所定のストアオペレーションの後に発生するもの)が、永続ストレージに永続的に及び/又は耐久的に格納される前に、永続ストアフェンス命令に対応する所定のストアオペレーション(例えば、ストアオペレーション228又はストア命令208E)のデータは、永続的に及び/又は耐久的に永続ストレージ224に格納されることを生じさせる及び/又は保証する。いくつかの実施形態において、永続ストアフェンス命令は、全ての後の又は後続のストアオペレーション及び/又は命令のデータの前に、全ての先行するストアオペレーション及び/又は命令のデータが永続的に及び/又は耐久的に永続ストレージに格納されることを生じさせない及び/又は保証しなくてよいが、むしろこうしたフェンスは所定のストアオペレーションだけのために選択的に実行されてよい。すなわち、全ての先行するストア命令及び/又はオペレーションをフェンスする必要はなく、むしろ、所定のストア命令及び/又はオペレーションだけをフェンスする。このことは、全ての先行するストア命令及び/又はオペレーションをフェンスするためのより高性能なコストを回避するのに役立ち得る。いくつかの実施形態において、これらの他のフェンスされないストア命令及び/又はオペレーションのデータは、プロセッサキャッシュに格納されてよいが、それに対して所定のフェンスされたストア命令及び/又はオペレーションのデータは非一時的であってよく、キャッシュをバイパスして別の永続ストアフェンスバッファ(例えば、バッファ446)に格納されてよい。
いくつかの実施形態において、永続ストアフェンス命令は、所定のストアオペレーション(例えば、ストアオペレーション228)を有する永続ストア命令及び永続ストアフェンス命令である。このような実施形態では、いくつかの場合において、永続ストア及び永続ストアフェンス命令は非一時的命令であってよく、その実行によって、データはプロセッサの1つ又は複数のキャッシュ(不図示)をバイパスして、そこに格納されることなく永続メモリ224に格納させられるよう動作する。他の複数の実施形態において、所定のストアオペレーションは、永続ストアフェンス命令(例えば、ストア命令208E)の(例えばすぐ)前又は後の、別個であるが関連した命令に対応してよい。いくつかの実施形態において、永続ストアフェンス命令は、所定のストアオペレーションの対応するデータが新たな専用の永続ストアフェンスバッファ(例えば、図4のバッファ446)に格納されるようにさせる。いくつかの実施形態において、バッファは任意に書き込みのみであってよく、及び/又はプロセッサの1つ又は複数のキャッシュによって用いられるキャッシュコヒーレンシプロトコルを実装しなくてよい(例えば、プロセッサによって実装されるMESIプロトコルを用いなくてよい)。いくつかの実施形態において、更に以下に説明されるように、永続ストアフェンスバッファは、異なる永続ストアフェンス命令に対応するデータが同じキャッシュラインに格納される又は結合されることを可能にするためのライトコンバインを実装してよい。いくつかの実施形態において、更に以下に説明されるように、永続ストアフェンス命令は、ログ先行書き込みの性能を改善するために、データをログ先行書き込みに格納するのに用いられてよい。
メモリサブシステムモジュール及び/又はプロセッサは、固有の又は特定のロジック(例えば、トランジスタ、集積回路、あるいはファームウェア(例えば、不揮発性メモリに格納された命令)及び/又はソフトウェアと可能性として組み合わされる他のハードウェア)を含んでよく、このロジックは、永続ストアフェンス命令を実行する、及び/又は永続ストアフェンス命令に応答して及び/又はその結果として(例えば、永続ストアフェンス命令からデコードされた1つ又は複数の命令又は制御信号に応答して)結果を格納するよう動作可能である。1つの態様において、メモリサブシステムモジュールはまた、概して、デコードされた永続ストアフェンス命令を実行するための実行ユニット、及び/又はデコードされた永続ストアフェンス命令を実行するためのユニットとみなされてよい。いくつかの実施形態において、メモリサブシステムモジュールは、図4〜図5のうち1つ又は複数のために示され説明された回路又はロジックを含んでよく、これらの図は適切な実装についての例示的な例であるが、本発明の範囲はそのように限定されるものではない。
有利なことに、永続ストアフェンスオペレーションは、所定のストアオペレーションのデータが、全ての後続のストアオペレーションのデータの前に永続ストレージに格納されることを生じさせる、保証する、又は確約するのに用いられてよい。データが永続ストレージにあると、データは永続的及び/又は耐久的である。このことが、特定の実装に特定の利点を提供し得る。例えば、このことが以下に更に論じられるように、ログ先行書き込みを実行する際の効率性を高めるのに役立ち得るが、本発明の範囲はそのように限定されるものではない。他の複数の例において、このことが、様々な他のタイプのアルゴリズムのために及び/又は他の理由のために、複数の永続ストアをシリアル化するのに用いられ得る。
背景技術のセクションで論じられたSFENCE命令と比較すると、SFENCE命令は永続ストレージへの複数のストアをシリアル化しない、及び/又は、永続性又は耐久性をシリアル化しない。むしろ、SFENCE命令は、メインメモリ(例えば、DRAM又は他の揮発性メモリ)に対して複数のストアの全体的な可視性をフェンスする又はシリアル化するのに用いられてよいが、そのようなデータは特定の状態(例えば、電源障害、オペレーティングシステムの故障、プロセッサの故障、システムクラッシュなど)の場合に失われ得る。結果として、このような命令は、データストレージオペレーションの永続性又は耐久性をシリアル化することができない。さらに、SFENCE命令は、全ての先行するストア命令を全ての後続のストア命令に対してフェンス又はシリアル化するが、それに対していくつかの実施形態においては、永続ストアフェンス命令は全ての後続のストア命令及び/又はオペレーションに対して、1つの所定の対応するストア命令及び/又はオペレーションだけをシリアル化し得る。
本明細書を不明瞭にすることを回避するために、比較的簡単なプロセッサ202が示され説明されている。しかし、プロセッサは任意に他のよく知られたプロセッサコンポーネントを含んでよい。そのようなコンポーネントの可能な例には、限定されないが、汎用レジスタ、ステータスレジスタ(フラグレジスタと呼ばれることもある)、システム制御レジスタ、命令フェッチユニット、プリフェッチバッファ、命令トランスレーションルックアサイドバッファ(TLB)、データTLB、分岐予測ユニット、浮動小数点実行ユニット、SIMD又はベクトル実行ユニット、アウトオブオーダ実行サポートユニット(例えば、命令スケジューリングユニット、レジスタリネーム及び/又は割り当てユニット、命令ディスパッチユニット、リオーダバッファ(ROB)、予約ステーション、メモリオーダバッファ、リタイアメントユニットなど)、バスインタフェースユニット、アドレス生成ユニット、デバッグユニット、性能モニタユニット、電力管理ユニット、プロセッサに含まれる他のコンポーネント、及びこれらの様々な組み合わせが含まれる。そのようなコンポーネントは一緒に、当技術分野において知られる様々な異なる適切な組み合わせ及び/又は構成に結合されてよい。複数の実施形態は、任意の知られたそのような組み合わせ又は構成に限定されない。さらに、複数の実施形態は複数のコアを有するプロセッサに含まれてよく、複数のコアのうち少なくとも1つは永続ストアフェンス命令を実行するよう動作する。
図3は、永続ストアフェンス命令の一実施形態を実行する方法340の一実施形態のブロックフロー図である。様々な実施形態において、本方法はプロセッサ、命令処理装置、又は他のデジタルロジックデバイスによって実行されてよい。いくつかの実施形態において、本方法340は、図1のプロセッサ102及び/又は図2のプロセッサ202によって、及び/又はその中で実行されてよい。プロセッサ102、202のために本明細書で説明される複数のコンポーネント、特徴、及び特定の任意的な詳細はまた、本方法340に任意に適用される。あるいは、本方法340は、類似又は異なるプロセッサあるいは装置によって、及び/又はその中で実行されてよい。さらに、プロセッサ102、202は、本方法340と同じ方法、類似する方法、又は異なる方法を実行してよい。
本方法は、ブロック341で永続ストアフェンス命令を受信する段階を含む。様々な態様において、命令はプロセッサ又はその一部(例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニットなど)で受信されてよい。様々な態様において、命令は、オフプロセッサ及び/又はオフダイソースから(例えば、メモリ、相互接続などから)、あるいはオンプロセッサ及び/又はオンダイソースから(例えば、命令キャッシュ、命令キューなどから)受信されてよい。
本方法は、ブロック342において、永続ストアフェンス命令に対応する又は関連する所定のデータは、全ての後続のストア命令のデータ(すなわち、元のプログラム順序において永続ストア命令の後にある)が永続ストレージに永続的に格納される前に、永続ストレージに永続的に格納されることを確約する、保証する、そうなるよう強制する、又は別な方法でそうさせる段階を含む。いくつかの実施形態において、本方法はまた、永続ストア命令に応答して所定のデータを格納する段階を含んでよい(例えば、永続ストア及び永続ストアフェンス命令の場合)が、これは必要ではない。いくつかの実施形態において、命令は、非一時的にプロセッサキャッシュをバイパスして所定のデータを永続ストアフェンスバッファ(例えば、バッファ446)に格納させてよいが、本発明の範囲はそのように限定されるものではない。
図4は、メモリサブシステムモジュール414の例示的な一実施形態のブロック図であり、永続ストアフェンスバッファ446の例示的な一実施形態を図示している。永続ストレージ424がメモリサブシステムモジュールに結合されている。永続ストレージは、前述されたものに類似であってよく、又はそれと同じであってもよい。
1つ又は複数のデコードされた永続ストアフェンス命令及び/又はオペレーション411のセットが、メモリサブシステムモジュール414に提供されてよい。この例では簡略化のために、デコードされた永続ストアフェンス命令は永続ストアオペレーション(例えば、ストアオペレーション228)を組み込んでいることが仮定されるが、本発明の範囲はそのように限定されるものではない。メモリサブシステムモジュールは、永続ストアフェンスバッファ446と、対応する永続ストアフェンスバッファ管理ユニット444とを含む。バッファ管理ユニットは、永続ストアフェンスバッファを管理するよう、例えば、バッファへのデータのストレージ、及びバッファからのデータのフラッシュ又は他の移動を管理するよう動作する。管理ユニットは、ハードウェア(例えば、集積回路、トランジスタ、又は他の回路要素など)、ファームウェア(例えば、ROM、EPROM、フラッシュメモリ、あるいは他の永続メモリ又は不揮発性メモリ、及びそこに格納されたマイクロコード、マイクロ命令、又は他の低水準命令)、ソフトウェア(例えば、メモリに格納されたより高水準の命令)、又はこれらの組み合わせ(例えば、ファームウェア及び/又はソフトウェアのうち1つ又は複数と可能性として結合されるハードウェア)で実装されてよい。
永続ストアフェンスバッファ446は、永続ストアフェンス命令に関連したデータ(例えば、ストアオペレーション228又はストア命令208Eのデータ)を一時的にバッファ又は格納するよう動作する。本発明の範囲は、永続ストアフェンスバッファ用のいかなる特定のタイプのメモリにも限定されない。例えば、スタティックランダムアクセスメモリ(SRAM)、プロセッサキャッシュを実装するのに用いられるメモリのタイプなど、様々なタイプの揮発性メモリが適切である。ダイ上にプロセッサとともに製造され得る実質的にいかなるタイプのメモリ又はデータストレージデバイスも、可能性として適切である。いくつかの実施形態において、永続ストアフェンスバッファは、任意にプロセッサキャッシュと同様に編成されてよく、複数のキャッシュライン448を有してよい。示されるように、永続ストアフェンスバッファはキャッシュライン0(448−0)、キャッシュラインL(448−L)、キャッシュラインN(448−N)まで有してよく、Nは特定の実装例に適した任意の所望の数を表してよい。いくつかの実施形態において、およそ約4つから約数百個のキャッシュライン、又は約8つから約128個のキャッシュラインがあり得るが、本発明の範囲はそのように限定されるものではない。
いくつかの実施形態において、プロセッサキャッシュと対照的に、永続ストアフェンスバッファは任意に書き込みのみであってよいが、通常は可読ではない。例えば、プロセッサ(例えば、コア)は、永続ストアフェンスバッファからデータをロード又は読み出すメモリ命令からの通常のユーザレベルのロードを通常は実行できなくてよい。特定の限定された状況の下で、プロセッサは、永続ストアフェンスバッファの内容を、例えば、デバッグ又はテストの間に(例えば、ビルトインセルフテスト(BIST)の間に)読み出すことができてよいことが理解されるべきである。いくつかの実施形態において、永続ストアフェンスを実装するのに用いられ得るキャッシュ418においてキャッシュコヒーレンシを維持することに関連したこれらのオペレーション以外に、キャッシュコヒーレンシが永続ストアフェンスバッファにおいて維持されなくてよい。例えば、キャッシュはMESIプロトコルを実装してよい(例えば、キャッシュの複数のキャッシュラインはそれぞれ、2つのMESIビットを持ち得る)が、永続ストアフェンスバッファは実装しなくてよい(例えば、バッファの複数のキャッシュラインは2つのMESIビットを持たなくてよい)。
キャッシュコヒーレンシモジュール416は、永続ストアフェンスバッファ管理ユニット444に結合されている。いくつかの実施形態において、キャッシュコヒーレンシモジュールが、プロセッサの1つ又は複数のキャッシュ418からキャッシュラインを追い出す、フラッシュする、又は別な方法で移すことを決定した場合、キャッシュコヒーレンシモジュールは、キャッシュからキャッシュラインを実際にフラッシュする又は移す前に、あるインジケーション、通知、又は他の信号450(例えば、キャッシュラインのフラッシュを意図する信号)を永続ストアフェンスバッファ管理ユニットに提供してよい。信号450は、キャッシュラインがキャッシュからフラッシュされようとしている、又は別な方法で移されようとしていることを管理ユニットに示す、通知する、通信する、又はそうでなければ信号で伝えてよく、キャッシュからのキャッシュラインがフラッシュされて永続的になる前に、管理ユニットが1つ又は複数のキャッシュラインをバッファから永続メモリにフラッシュする、又は別な方法で移す又は格納することを可能にするのに役立ち得る。いくつかの実施形態において、永続ストアフェンスを維持するために、永続ストアフェンスバッファ管理ユニットはバッファフラッシュ、追い出し、又は他の移動オペレーション452を実行して、キャッシュライン(例えば、キャッシュラインL(448−L))を永続ストアフェンスバッファから永続ストレージにフラッシュする、追い出す、又は別な方法で移す、又は格納してよい。いくつかの実施形態において、信号450に関連したキャッシュフラッシュ又は他のキャッシュライン移動オペレーション454が実行されて、キャッシュ418から永続ストレージにキャッシュラインをフラッシュする前に、プロセッサ及び/又はメモリサブシステムモジュールは、関連した永続ストアフェンス命令に応答して、これが発生することを確約する、及び/又は保証する、及び/又はこれを発生させてよい。キャッシュラインが追い出される又はフラッシュされるというキャッシュコヒーレンシモジュールからの信号に基づき、バッファはバックグラウンドでトランスペアレントに永続メモリにフラッシュしてよい。いくつかの実施形態において、任意のキャッシュラインがキャッシュから永続ストレージにフラッシュされる場合、永続ストアフェンスバッファ全体は、任意に永続ストレージにフラッシュされてよい。このことは、相対的により簡単な実装を提供するのに役立ち得る。他の複数の実施形態において、追加情報が任意に永続ストアフェンスバッファに格納され、キャッシュからフラッシュされる個々の対応するキャッシュラインに基づき、バッファの個々のキャッシュラインが永続ストレージに選択的にフラッシュされることを可能にしてよい。
いくつかの実施形態において、キャッシュラインがキャッシュから永続ストレージにフラッシュされる又は移される直前まで、及び/又は後続のストアオペレーションが永続ストレージに永続的に格納される直前まで、永続ストアフェンスバッファのデータはフラッシュされる必要がなくてよく、又は永続ストレージに移される必要がなくてもよい。概して、必要な場合を除いてバッファをフラッシュするのを回避することは、比較的長いレイテンシのメモリアクセスを回避するのに役立つ。有利なことに、永続ストアフェンスバッファは、永続ストアフェンス命令に対応するデータが永続ストレージに格納されて永続的になるのを待つ必要がないようにするのに役立ち得る。そのようなデータが永続ストレージに直接格納された場合、一般にはるかに長いレイテンシのオペレーションが概して必要とされるであろう(例えば、データを永続メモリに格納するのに、およそ数十から数百のクロックサイクルがかかることが多い)。いくつかの実施形態において、データはせいぜい数クロックサイクル(例えば、多くても約5クロックサイクル)で永続ストアフェンスバッファに格納され得る。
いくつかの実施形態において、任意に、別の複数の永続ストアフェンス命令の間に永続的な順序要件がなくてよい。いくつかの実施形態において、このことは任意に、複数の異なる永続ストアフェンス命令に対応するデータが永続ストアフェンスバッファの同じキャッシュラインに格納されることを可能にすることで、さらにより効率的な永続ストアフェンス命令の実行を可能にするのに役立ち得る。
図5は、異なる永続ストアフェンス命令511−1、511−2に対応するデータ560−1、560−2を有する永続ストアフェンスバッファ用のキャッシュライン548の例示的な一実施形態と、1つ又は複数の相互接続520の同じ信号又はサイクルにおける永続メモリ524へのキャッシュラインのキャッシュラインストレージオペレーション552の例示的な一実施形態とのブロック図である。第1の永続ストアフェンス命令511−1は、キャッシュラインに格納され得る第1の関連データ又は対応するデータ560−1を有してよい。同様に、第2の永続ストアフェンス命令511−2は、データ560−1と同じキャッシュラインにデータ560−1と同時に格納され得る第2の関連データ又は対応するデータ560−2を有してよい。いくつかの実施形態において、これは、ライトコンバインオペレーションを通じて永続ストアフェンスバッファで実行されてよい。すなわち、永続ストアフェンスバッファはライトコンバインバッファを表し得る。
後で適切な時に(例えば、キャッシュコヒーレンシモジュールから受信したキャッシュラインのフラッシュを意図する信号に基づいて)、キャッシュライン548は、キャッシュラインストレージオペレーション552を通じて永続ストレージ524にフラッシュされ、追い出され、あるいは別な方法で移され、又は格納されてよい。キャッシュラインストレージオペレーションは、異なる永続ストアフェンス命令511−1、511−2に対応する第1のデータ560−1及び第2のデータ560−2を有するキャッシュラインを格納してよい。いくつかの実施形態において、キャッシュラインストレージオペレーションは、1つ又は複数の相互接続520の1つ又は複数のサイクル又は信号の単一及び/又は共通セットで実行されてよい(例えば、データ560−1及び560−2の両方は、1つ又は複数のバスサイクルの同じセットで進んでよい)。すなわち、複数の異なる永続ストアフェンス命令に対応するデータは、同じバス又は相互接続サイクルで永続メモリに書き込まれてよく、又はそうでなければ格納されてよい。簡略化のために、2つの異なる永続ストアフェンス命令からのデータがこの例で説明されるが、いくつかの場合において、3つ又はそれより多くの異なる永続ストアフェンス命令からのデータが、可能性として同じキャッシュラインで結合されてよい。有利なことに、異なる永続ストアフェンス命令に対応するデータを同じキャッシュラインで結合し、永続メモリへの単一キャッシュライン書き込みを実行するそのような能力は、永続メモリへの1つ又は複数の比較的長いレイテンシストアを回避する又は排除するのに役立ち得る。さらに、これはまた、永続メモリにつながる1つ又は複数の相互接続の帯域幅の量を削減するのに役立ち得る。
プロセッサ及び/又はメモリサブシステムユニットは、永続ストアフェンスバッファへのデータのインオーダストアを実行してよく、その後にデータが永続ストアフェンスバッファからフラッシュされた場合又は移された場合、同じキャッシュラインの全てのデータは永続ストレージに原子的に書き込まれてよい。インオーダは、対応する永続ストアフェンス命令の元のプログラム順序と同じ順序で、データが永続ストアフェンスバッファに格納され得ることを意味する。いくつかの実施形態において、基本的な永続メモリシステムにおけるメモリ並列処理を十分に活用するために、異なる複数のキャッシュラインは永続ストアフェンスバッファからアウトオブオーダでフラッシュされてよく、又は移されてよい。アウトオブオーダは、対応する永続ストアフェンス命令の元のプログラム順序と異なる順序で、データが永続ストアフェンスバッファからフラッシュされ得る又は移され得ることを意味する。
いくつかの実施形態において、本明細書に開示される命令及びプロセッサは、ログ先行書き込みの効率性を改善するのに用いられてよい。ログ先行書き込みは、データを変更する場合に、原子性及び耐久性/永続性を実現するための周知の技術である。図6は、データ664及びログ先行書き込み662を有する永続メモリ624の一実施形態のブロック図である。永続メモリは、前述されたタイプの永続メモリのいずれを表してもよい。データは、コンピュータシステム、データベースなどで用いられる様々な異なるタイプのデータを表してよい。適切なデータの例には、限定されないが、ファイル、レコード、データ構造、テーブル、データベースレコード、画像、動画などが含まれる。ログ先行書き込みは、概してデータと異なる永続メモリの領域に位置している。図において、ログ先行書き込みが任意に別の永続ストレージデバイス(例えば、データと異なるディスク)に位置してよい又は格納されてよいことを示すのに破線が用いられている。これは、(例えば、ディスクが故障した場合に)データの耐久性/永続性を保証するのに更に役立ち得るが、必要ではない。
ログ先行書き込みでは、データへの変更が永続メモリのデータの上に実際に格納される前に、データ及び/又はデータへの変更はログ先行書き込みに書き込まれてよい。例えば、所定のデータ670が変更又は修正される前に、所定のデータの未変更のコピー668がログ先行書き込み662に格納されてよい。このように、所定のデータがプロセッサ内で変更されている間に、所定のデータを非永続(例えば、揮発性)メモリ(例えば、プロセッサキャッシュ)から失わさせ得る電力損失又は他のイベントが発生しても、そのイベントが発生した後に所定のデータのコピーがログ先行書き込みからリカバリされ得る。有利なことに、これは、電源障害又は様々な他の可能性のある破滅的なエラーに直面しても、変更している間に所定のデータが失われることを防止するのに役立ち得る。プログラムがデータのセットを変更するオペレーションを実行している最中に、コンピュータシステムが電力損失又は破滅的なエラーに遭遇した場合を更に説明する。プログラムは再始動及び再起動すると、一般に、オペレーションが完全に完了したのか、部分的に完了したのか、又は全く失敗したのかを知る必要がある。ログ先行書き込みが用いられた場合、プログラムはログ先行書き込みを調査し、エラー発生前にオペレーションのどの部分が実際に完了したのかを判断し得る。プログラムはこの情報を用いて、オペレーションをどのように進めるか、及び/又はどのように継続又は再始動するかを決めてよい。例えば、プログラムは、ログ先行書き込みから決定された第1の未完了変更から開始するオペレーションを再試行してよい。
ログ先行書き込みは、複数の異なるデータが同じトランザクション内で変更されるトランザクションとして実行されることが多い。異なるデータの全てがログに記録され及び変更されることに成功し、且つ変更されたデータが永続メモリに格納された後に初めて、トランザクションは問題なく完了する。一般に、トランザクションが完全に問題なく完了したときに初めて、トランザクションは「コミット」される。トランザクションをコミットするとは基本的に、トランザクション全体が問題なく完了したと宣言すること、及び/又は、試みた変更の全てが問題なく完了して永続メモリに格納されたと示すことである。この時点では、ログ先行書き込みに格納された又は保存されたデータはもはや必要ではない。それは、破滅的なイベントが発生しても、変更済みデータの全ては既に永続メモリに格納されているからである。ログ先行書き込みは、変更又は修正の全体にわたり、所定のセットのデータに永続性及び/又は耐久性を提供する。それは、所定のセットのデータのコピーが、所定のセットのデータに任意の変更が行われる前に永続メモリに格納されているからである。さらに、ログ先行書き込みは原子性を提供する。それは、トランザクション全体をコミットする又はコミットしないことで、トランザクションの間に、所定のセットのデータが完全に更新されるか又は更新されないかのどちらかであるためである。
ログ先行書き込みでは、2つの永続性順序が一般に維持されなければならない。最初に、ログ永続性順序が一般に維持されなければならない。ログ永続性順序に従って、変更される元のデータは、対応する変更済みデータが永続ストレージに格納される前に、永続ストレージのログ先行書き込みに永続的に格納されなければならない。そうでなければ、変更済みデータが永続ストレージにおいて元のデータの上に格納され、変更される元のデータがキャッシュにあって永続ストレージのログ先行書き込みにまだ格納されていない場合に、破滅的なイベント(例えば、電源障害)が発生するならば、変更される元のデータは保存されず、それにより失われる場合があり、トランザクションの完了に失敗した場合のリカバリを妨げる。一般に維持されなければならない2つ目の永続性順序は、コミット永続性順序である。コミット永続性順序に従って、トランザクションの全ての変更済みデータは、コミットインジケーションが永続ストレージのログ先行書き込みに永続的に格納される前に、永続ストレージに永続的に格納されなければならない。そうでなければ、いくつかの変更済みデータがキャッシュに格納されている間に、コミットインジケーションが永続ストレージのログ先行書き込みに永続的に格納される場合、トランザクションが問題なく完了したとログ先行書き込みのコミットインジケーションが示していたとしても、この変更済みデータは破滅的なイベントの間に失われ得る。1つの課題は、適切な予防措置が講じられなければ、1つ又は複数のプロセッサキャッシュのデータをキャッシュすることは、これら2つの永続性順序のうち1つ又は複数に違反し得ることである。キャッシュは概して、揮発性ストレージ又はそうでなければ非永続ストレージで実装され、破滅的なイベントに影響されやすい。
図7は、本明細書に開示される永続ストアフェンス命令を用いずに実行されるログ先行書き込みの1つの可能な方法772のブロックフロー図である。ブロック773において、永続ストレージの修正される又は変更されるデータは、永続ストレージのログ先行書き込みに格納される。プロセッサに存在する1つ又は複数のキャッシュに起因して、変更されるデータは実際にログ先行書き込みに直接格納されなくてよく、むしろこれら1つ又は複数のキャッシュにキャッシュされてよい。これらのプロセッサキャッシュは非永続ストレージを表し、特定のイベント(例えば、電力損失など)が発生した場合、その内容を失い得る。
ブロック774において、変更されるデータは、1つ又は複数のキャッシュから永続ストレージに移される(例えば、フラッシュされる)。例えば、これは、キャッシュラインフラッシュタイプの命令で実行され得る。これは概して、ログ永続性順序を満たすために必要とされる。この手法の1つの欠点は、概して多くの時間がかかること、及び/又は永続メモリに書き込む又は格納するのに必要な時間(例えば、およそ数十から数百のクロックサイクル)に起因して高レイテンシを有することである。
次に、変更されるデータは、ブロック775において実際に変更され得る。ブロック775でのデータの変更は、変更されるデータがブロック774において1つ又は複数のキャッシュから永続ストレージに移された後に行われ、それにより、変更されるデータのコピーが非永続的なプロセッサキャッシュの代わりに永続ストレージに永続的に格納されることが保証されることに留意されたい。これは、前述されたように、データの永続性/耐久性を保証するのに役立つ。
ブロック776において、変更されるデータがさらにあるかどうかの判断が行われる。変更されるデータがさらにある場合(すなわち、ブロック776での判断が「はい」である)、本方法はブロック773〜775を再実行し得る。逆に、このトランザクションにこれ以上変更されるデータがない場合(すなわち、ブロック776での判断が「いいえ」である)、本方法はブロック777に進んでよい。変更されるデータごとに、変更されるデータがブロック773においてログ先行書き込みに格納される時間と、データがブロック775において実際に変更される時間との間で、変更されるデータはブロック775においてキャッシュから永続ストレージにフラッシュされる(すなわち、キャッシュの代わりに永続ストレージのログ先行書き込みに実際に格納される)必要があることに留意されたい。これら全てのフラッシュに伴う欠点は、実行に多くの時間がかかることである。
ブロック777において、全ての変更済みデータが、キャッシュから永続ストレージに移される(例えば、フラッシュされる)。これが実行されるのは、ブロック775におけるデータの変更が、変更済みデータを永続ストレージに実際に格納するのではなく、むしろキャッシュに格納し得るからである。これは概して、コミット永続性順序を満たすために、コミットインジケーションが永続ストレージのログ先行書き込みに格納される前に行われる必要がある。
次に、ブロック778において、コミットインジケーションは、ログ先行書き込みに格納されてよい。前述されたように、コミットインジケーションは、トランザクションが問題なく完了したことを示してよい。ブロック779において、コミットインジケーションはキャッシュから永続ストレージに移されてよい(例えば、フラッシュされてよい)。
コミットインジケーションがログ先行書き込みに格納される前に破滅的なイベントが発生した場合、トランザクションの全ての不完全なデータ更新がそれらの元のデータに、ログ先行書き込みにある元のデータを用いてリカバリされ得る。逆に、コミットインジケーションがログ先行書き込みに格納された後に破滅的なイベントが発生した場合、全てのデータ更新が問題なく完了しているので、リカバリの必要はない。
前述されたように、ブロック775における各データ更新の前に、変更されるデータをブロック774においてキャッシュから移す(例えば、フラッシュする)ことは、過大な時間がかかる傾向がある。いくつかの実施形態において、通常、更新済みデータはキャッシュにとどまるので、変更済みデータがキャッシュから永続ストレージに実際に格納されるまで、変更されるデータをキャッシュから永続ストレージに移す(例えば、フラッシュする)必要はなくてよい。これは、多くの実装において、(例えば、プログラムのデータ位置に起因して)比較的まれである。そのような実装において、著しくより効率的なログ先行書き込みが、ブロック774におけるデータのそうような移動(例えば、フラッシュ)を省略することで実現され得る。残念ながら、キャッシュから永続ストレージへの変更済みデータの書き戻しは概して、ハードウェアによって(例えば、キャッシュコヒーレンシモジュールによって)実行されるので、多くの実装ではソフトウェアの制御下にはない。いくつかの適切な実装は、代替的にソフトウェアに制御されたキャッシュコヒーレンシを実行し得ることに留意されたい。
図8は、永続ストアフェンス命令の一実施形態を用いて実行されるログ先行書き込みの方法880の例示的な一実施形態のブロックフロー図である。いくつかの実施形態において、永続ストレージの修正される又は変更されるデータは、ブロック881において永続ストアフェンス命令の一実施形態を用いて(又はこれと併せて)永続ストレージのログ先行書き込みに格納されてよい。前述されたように、永続ストアフェンス命令自体はデータを格納してよい、又は対応する別個のストア命令がデータを格納してもよい。いくつかの実施形態において、データは最初に及び/又は一時的に永続ストアフェンスバッファ(例えば、バッファ446)に格納されてよい。いくつかの実施形態において、永続ストアフェンス命令は非一時的命令であってよく、データはプロセッサキャッシュをバイパスしてよい。これは、データがキャッシュの領域を占有する、及び/又はキャッシュをだめにすることを回避するのに役立ち得る。
変更されるデータは、ブロック882において実際に変更され得る。この変更済みデータは、最初に及び/又は一時的にプロセッサキャッシュにキャッシュされてよい。
重要なことには、ブロック883において、永続ストアフェンス命令に応答するプロセッサは、変更済みデータがキャッシュから移され(例えば、フラッシュされる、追い出されるなど)、永続ストレージに永続的に格納される前に、変更されるデータが移され(例えば、フラッシュされる、追い出されるなど)、永続ストレージに永続的に格納されることを保証、確約、又は強制し得る。有利なことに、図7のブロック774において実行されたように、変更されるデータをキャッシュから永続ストレージにフラッシュする又は別な方法で移すことは必要ない。重要なことには、これは、変更されるデータごとに比較的高いレイテンシのメモリアクセスオペレーション(例えば、数十から数百のクロックサイクル)を回避するのに役立ち得る。永続フェンス命令は、ログ永続性順序が依然として維持されていることを保証し得る。多くの場合、変更済みデータが永続ストレージに永続的に格納される場合を除き、又はその直前まで、変更されるデータは実際には永続ストレージに永続的に格納されなくてよいことは注目に値する。変更済みデータが永続ストレージに格納されない場合、変更されるデータが永続ストレージに格納されることを命令は確約しない。
ブロック884において、変更されるデータがさらにあるかどうかの判断が行われる。変更されるデータがさらにある場合(すなわち、ブロック884での判断が「はい」である)、本方法はブロック881〜883を再実行し得る。逆に、このトランザクションにこれ以上変更されるデータがない場合(すなわち、ブロック884での判断が「いいえ」である)、本方法はブロック885に進んでよい。
ブロック885において、全ての変更済みデータが、キャッシュから永続ストレージに移される(例えば、フラッシュされる)。これが実行されるのは、ブロック882におけるデータの変更が、変更済みデータを永続ストレージに実際に格納するのではなく、むしろキャッシュに格納し得るからである。次に、ブロック886において、コミットインジケーションは、ログ先行書き込みに格納されてよい。ブロック887において、コミットインジケーションはキャッシュから永続ストレージに移され得る(例えば、フラッシュされ得る)。
有利なことに、永続ストアフェンス命令を用いることは、変更されるデータごとに比較的高いレイテンシのメモリアクセスオペレーションを回避するのに役立ち得る。いくつかの実施形態において、変更済みデータの全てが、キャッシュに適合する又は格納されることができる場合、コミット時に全ての変更済みデータをキャッシュから永続ストレージにフラッシュする前に、アルゴリズムはデータを永続ストアフェンスバッファから永続ストレージに一旦フラッシュする又は移すだけでよい。更に、いくつかの実施形態において、永続ストアフェンスバッファが、同じキャッシュラインの異なる永続ストアフェンス命令に対応するデータをライトコンバインすることができる場合、これは、何らかの長いレイテンシのデータが永続ストレージに書き込まれないようにするのに更に役立ち得る。
いくつかの実施形態において、ソフトウェアはキャッシュラインユニットにシーケンス番号を搬送するログ先行書き込みを実装し得る。キャッシュラインを永続ストアフェンスバッファからフラッシュする又は移す間にシステムクラッシュがあった場合、正しいシーケンス番号を有する連続したログだけが、データをリカバリするのに用いられてよい。例えば、シーケンス番号1、2、3、及び5は存在し得るが、シーケンス番号4が欠落し得る。リカバリを行う場合、シーケンス番号は、どれがリカバリに必要でどれが必要でないかに関する情報を有する。
上記明細書はログ先行書き込みを強調しているが、本発明の範囲はそのように限定されるものではないことが理解されるべきである。本明細書に説明される永続ストアフェンス命令は汎用命令であり、様々な異なる目的に用いられてよい。さらに、ログ先行書き込みの類似又は関連技術はまた、本明細書に説明される永続ストアフェンス命令から恩恵を受け得る。例えば、データが変更される前にデータのコピーを異なる永続メモリ位置に格納する他の技術、更新の間にデータの原子性及び耐久性を提供する他の技術などが、可能性として利益を得てよい。利益を得てもよい他の技術の例には、限定されないが、ファイルシステム更新におけるシャドウページング、ジャーナリングなどが含まれる。
図9は、永続ストアフェンスバッファの一実施形態に適した位置の様々な例を図示するブロック図である。コンピュータシステムは通常、大量のデータが永続ストレージに向かう途中で通過する複数の異なるタイプのコンポーネントを有する。図示された例において、これらのコンポーネントは、ストアバッファ992、1つ又は複数のレベルのキャッシュ又はキャッシュ階層918(例えば、L1キャッシュ993及びL2キャッシュ994を含む)、メモリコントローラ996、及び最終的な永続ストレージ924を含む。プロセッサパイプラインと永続ストレージとの間のこれらのコンポーネント又は他のコンポーネントあるいはハードウェア構造のいずれにおいても、ストアが可能性としてキャッシュ又はバッファされ得る。
永続ストアフェンスバッファが、これらのコンポーネント又はハードウェア構造の間に様々に位置してよく、及び/又はプロセッサパイプラインと永続ストレージとの間で様々な異なる距離にあってよい。特定の位置に応じて、そのハードウェア構造からフラッシュ又は移されたデータは、永続ストアフェンスバッファからのデータのフラッシュ又は移動を引き起こし得る。一般に、永続ストアフェンスバッファがプロセッサパイプラインに近いほど、プログラム順序において後続の非永続ストアフェンス命令がデータをキャッシュに格納できる前に、データが永続ストアフェンスバッファに格納されるのに必要な永続ストアフェンス命令のレイテンシは低くなる。一方、永続ストアフェンスバッファがプロセッサパイプラインに近いほど、永続ストアフェンスバッファフラッシュオペレーションが頻繁になり(例えば、バッファの前にキャッシュすることが少ないので)、そのような永続ストアフェンスバッファフラッシュオペレーションのレイテンシは高くなる(例えば、永続ストアフェンスバッファから永続ストレージまでの経路がより長いので)。
いくつかの実施形態において、参照記号Aで示されるように、永続ストアフェンスバッファは、ストアバッファ992の出力と永続ストレージ924への入力との間の様々な場所に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Bで示されるように、永続ストアフェンスバッファは任意に、プロセッサパイプラインに最も近い第1レベルのキャッシュ(例えば、L1キャッシュ993)の出力と、メモリコントローラ996の出力との間の様々な場所に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Cで示されるように、永続ストアフェンスバッファは任意に、最終レベルのキャッシュ(例えば、L2キャッシュ994、又は代替的にL3キャッシュ)の出力と、メモリコントローラの入力との間に位置してよく、又は配置されてよい。いくつかの実施形態において、参照記号Dで示されるように、永続ストアフェンスバッファは任意に、2つの異なるレベルのキャッシュの間(例えば、L1キャッシュとL2キャッシュとの間)に位置してよく、又は配置されてよい。1つの態様において、L1キャッシュは第1のコア990−1専用であってよく、それに対してL2キャッシュは第1のコア及び第2のコア990−2により共有されてよい。いくつかの実施形態において、参照記号Eで示されるように、永続ストアフェンスバッファは任意に、メモリコントローラ内に位置してよく、又は配置されてよい。本発明の範囲は、永続ストアフェンスバッファのいかなる任意の既知の位置にも限定されない。永続ストアフェンスバッファの所望の位置は、本開示の利益を有する当業者による過度の実験なしに決定され、永続ストアフェンス命令のレイテンシ、永続ストアフェンスバッファのフラッシュオーバヘッド、又は他の考慮事項の相対的なトレードオフに基づき特定の実装のニーズを満たし得る。
マルチコアシステムでは、共有のコンポーネント又はハードウェア構造、あるいはコアごとの個人用/専用のコンポーネント又はハードウェア構造の永続ストアフェンスバッファに、別の設計選択が配置される。個人用/専用のハードウェア構造はプロセスパイプラインに近く、共有のハードウェア構造は永続ストレージに近い。永続ストアフェンスバッファを共有のハードウェア構造に配置することは、異なるソフトウェアスレッドからのデータ更新変更に起因して、さらに多くの永続ストアフェンスバッファフラッシュを発生させる傾向があり得る。一方、永続ストアフェンスバッファを個人用のハードウェア構造に配置することは、ソフトウェアスレッドのオペレーティングシステムコンテキストスイッチにおける永続ストアフェンスバッファを別のコアにフラッシュすることを含む傾向があり得る。これは、オペレーティングシステムコンテキストスイッチにつながり得る全てのハードウェア割り込み及び/又は例外に基づいて永続ストアフェンスバッファをフラッシュするハードウェアを含んでよい。いくつかの実施形態において、永続ストアフェンスバッファは任意に、キャッシュラインアドレスのハッシュに基づき、複数のスライスに区切られてよい。これにより、キャッシュデータを任意のキャッシュスライスに追い出す場合、永続ストアフェンスバッファは全てのキャッシュスライスにフラッシュされることが可能になり得る。
[例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ]
プロセッサコアは異なる態様で、異なる目的のために、異なるプロセッサで実装されてよい。例えば、そのようなコアの実装は、1)汎用計算向けの汎用インオーダコア、2)汎用計算向けの高性能汎用アウトオブオーダコア、3)主にグラフィックス及び/又は科学(スループット)計算向けの専用コアを含んでよい。複数の異なるプロセッサの実装は、1)1つ又は複数の汎用計算向け汎用インオーダコア、及び/又は、1つ又は複数の汎用計算向け汎用アウトオブオーダコアを含むCPU、並びに2)主にグラフィックス及び/又は科学(スループット)向けの1つ又は複数の専用コアを含むコプロセッサを含んでよい。そのような複数の異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、それは、1)CPUと別のチップにあるコプロセッサ、2)CPUと同じパッケージ内の別のダイにあるコプロセッサ、3)CPUと同じダイにあるコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィクス及び/又は科学(スループット)ロジックなどの専用ロジック、又は専用コアと呼ばれることがある)、及び4)説明されたCPU(アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある)、上述されたコプロセッサ、及び追加機能を同じダイに含み得るシステムオンチップを含んでよい。例示的なコアアーキテクチャが次に説明され、その後に例示的プロセッサ及びコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャ]
[インオーダコア及びアウトオブオーダコアのブロック図]
図10Aは、本発明の複数の実施形態に従って、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインとの両方を図示するブロック図である。図10Bは、本発明の複数の実施形態に従って、インオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアとの両方を図示するブロック図である。図10A及び図10Bの実線で示されたボックスは、インオーダパイプライン及びインオーダコアを図示する。一方、破線で示されたボックスの任意の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
図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に結合され、命令トランスレーションルックアサイドバッファ(TLB)1036は命令フェッチユニット1038に結合され、命令フェッチユニット1038はデコードユニット1040に結合されている。デコードユニット1040(又はデコーダ)は、複数の命令をデコードし、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令からデコードされ、又はそうでなければ元の命令を反映し、又は元の命令から導出される。デコードユニット1040は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれる。1つの実施形態において、コア1090は、マイクロコードROM、又は特定のマクロ命令用のマイクロコードを格納する他の媒体を(例えば、デコードユニット1040に、又はそうでなければフロントエンドユニット1030の中に)含む。デコードユニット1040は、実行エンジンユニット1050のリネーム/アロケータユニット1052に結合されている。
実行エンジンユニット1050は、リタイアメントユニット1054と、1つ又は複数のスケジューラユニット1056のセットとに結合されたリネーム/アロケータユニット1052を含む。スケジューラユニット1056は、任意の数の異なるスケジューラを表し、予約ステーション、中央命令ウィンドウなどを含む。スケジューラユニット1056は物理レジスタファイルユニット1058に結合されている。それぞれの物理レジスタファイルユニット1058は、1つ又は複数の物理レジスタファイルを表し、それらのうちの異なるものが、1つ又は複数の異なるデータタイプ、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などを格納する。1つの実施形態において、物理レジスタファイルユニット1058は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット1058は、リタイアメントユニット1054によりオーバーラップされて様々な態様を示し、そこにレジスタリネーミング及びアウトオブオーダ実行が実装され得る(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリーバッファ、リタイアメントレジスタファイルを用いて、レジスタマップ、レジスタのプールを用いてなど)。リタイアメントユニット1054及び物理レジスタファイルユニット1058は、実行クラスタ1060に結合されている。実行クラスタ1060は、1つ又は複数の実行ユニット1062のセットと、1つ又は複数のメモリアクセスユニット1064のセットとを含む。実行ユニット1062は、様々な演算(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行し得る。いくつかの実施形態は、特定の複数の関数又は複数の関数の複数のセットに専用の複数の実行ユニットを含んでよいが、他の複数の実施形態は、1つの実行ユニットだけ又は複数の実行ユニットを含んでよく、これらはどれも全ての関数を実行する。スケジューラユニット1056、物理レジスタファイルユニット1058.及び実行クラスタ1060は、場合により複数として示される。これは、特定の複数の実施形態が、特定のタイプのデータ/オペレーションのための別個のパイプラインを作成するからである(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又は、メモリアクセスパイプラインであり、それぞれが独自のスケジューラユニット、物理レジスタファイルユニット及び/又は実行クラスタを有する。また、別個のメモリアクセスパイプラインの場合、特定の複数の実施形態が実装され、そこにおいて、このパイプラインの実行クラスタだけがメモリアクセスユニット1064を有する)。別個の複数のパイプラインが用いられる場合、これらのパイプラインのうち1つ又は複数はアウトオブオーダ発行/実行であり、残りのものがインオーダであってよいこともまた理解されなければならない。
複数のメモリアクセスユニット1064のセットがメモリユニット1070に結合され、メモリユニット1070は、レベル2(L2)キャッシュユニット1076に結合されたデータキャッシュユニット1074に結合されたデータTLBユニット1072を含む。1つの例示的な実施形態において、メモリアクセスユニット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)スケジューラユニット1056はスケジューリングステージ1012を実行する。5)物理レジスタファイルユニット1058及びメモリユニット1070は、レジスタ読み出し/メモリ読み出しステージ1014を実行し、実行クラスタ1060は実行ステージ1016を実行する。6)メモリユニット1070及び物理レジスタファイルユニット1058は、ライトバック/メモリ書き込みステージ1018を実行する。7)様々なユニットが例外処理ステージ1022に関与し得る。8)リタイアメントユニット1054及び物理レジスタファイルユニット1058は、コミットステージ1024を実行する。
コア1090は、本明細書に説明される命令を含む1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加されているいくつかの拡張を有する)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意的な追加拡張を有する))をサポートし得る。1つの実施形態において、コア1090はパックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアはマルチスレッディング(オペレーション又はスレッドの2つ又はそれより多くの並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同期マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドごとに論理コアを提供する)、又はこれらの組み合わせ(例えば、タイムスライスフェッチ及びデコード、並びにその後のIntel(登録商標)ハイパースレッディング・テクノロジーなどの同期マルチスレッディング)を含む様々な態様でサポートしてよいことが理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行の文脈で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてよいことが理解されるべきである。プロセッサの例示された実施形態はまた、別個の命令キャッシュユニット1034及びデータキャッシュユニット1074、並びに共有L2キャッシュユニット1076を含み得るが、複数の代替的な実施形態が命令及びデータの両方用に、例えば、レベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュなどの単一の内部キャッシュを有してよい。いくつかの実施形態においてシステムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、全てのキャッシュがコア及び/又はプロセッサの外部にあってよい。
[具体的な例示的インオーダコアアーキテクチャ]
図11A及び図11Bは、具体的な例示的インオーダコアアーキテクチャのブロック図を示し、コアはチップ内のいくつかのロジックブロック(同じタイプ及び/又は別のタイプの他の複数のコアを含む)の1つであってよい。複数のロジックブロックは、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通じて、何らかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックとアプリケーションに応じて通信する。
図11Aは、本発明の複数の実施形態によるシングルプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク1102への接続に加え、レベル2(L2)キャッシュ1104のローカルサブセットを有する。1つの実施形態において、命令デコーダ1100はパックドデータ命令セット拡張を用いてx86命令セットをサポートする。L1キャッシュ1106は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能とする。1つの実施形態において(設計を単純化するために)、スカラユニット1108及びベクトルユニット1110は別個のレジスタセット(それぞれ、スカラレジスタ1112及びベクトルレジスタ1114)を用い、それらの間で転送されるデータがメモリに書き込まれ、レベル1(L1)キャッシュ1106から読み戻されるが、本発明の代替的な複数の実施形態は別の手法を用いてよい(例えば、単一のレジスタセットを用いる、又はデータが書き込まれることも読み戻されることもなく2つのレジスタファイルの間で転送されることを可能にする通信経路を含む)。
L2キャッシュのローカルサブセット1104は、複数の別個のローカルサブセットに分割される全体的なL2キャッシュの一部であり、プロセッサコアごとに1つである。各プロセッサコアは、独自のL2キャッシュのローカルサブセット1104に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット1104に格納され、他の複数のプロセッサコアが独自のローカルL2キャッシュサブセットにアクセスするのと並列に、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のL2キャッシュサブセット1104に格納され、必要に応じて他の複数のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であり、複数のプロセッサコア、複数のL2キャッシュ、及び他の複数のロジックブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、1方向あたり1012ビット幅である。
図11Bは、本発明の複数の実施形態による図11Aのプロセッサコアの一部の拡大図である。図11Bは、L1キャッシュ1104のL1データキャッシュ1106A部分、並びにベクトルユニット1110及びベクトルレジスタ1114に関するより詳細を含む。具体的には、ベクトルユニット1110は16幅のベクトル処理ユニット(VPU)(16幅のALU1128を参照)であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち1つ又は複数を実行する。VPUは、スウィズルユニット1120を用いるレジスタ入力のスウィズル、数値変換ユニット1122A及び1122Bを用いる数値変換、並びにメモリ入力上の複製ユニット1124を用いる複製をサポートする。複数の書き込みマスクレジスタ1126は、結果として生じる複数のベクトル書き込みを予測(predicating)することを可能にする。
[統合メモリコントローラ及び統合グラフィックスを有するプロセッサ]
図12は、本発明の複数の実施形態によるプロセッサ1200のブロック図であり、これは複数のコアを有してよく、統合メモリコントローラを有してよく、統合グラフィクスを有してよい。図12の実線で示されたボックスは、単一のコア1202A、システムエージェント1210、1つ又は複数のバスコントローラユニット1216のセットを有するプロセッサ1200を示す。一方、破線で示されたボックスの任意の追加は、複数のコア1202A〜1202N、システムエージェントユニット1210内の1つ又は複数の統合メモリコントローラユニット1214のセット、及び専用ロジック1208を有する代替のプロセッサ1200を示す。
従って、プロセッサ1200の異なる実装は、1)統合グラフィクス及び/又は科学(スループット)ロジックである専用ロジック1208(1つ又は複数のコアを含んでよい)と、1つ又は複数の汎用コアであるコア1202A〜1202N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)を有するCPU、2)主にグラフィックス及び/又は科学(スループット)向けの多数の専用コアであるコア1202A〜1202Nを有するコプロセッサ、並びに3)多数の汎用インオーダコアであるコア1202A〜1202Nを有するコプロセッサを含んでよい。従って、プロセッサ1200は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多数統合コア(MIC)コプロセッサ(30個又はそれより多くのコアを含む)、組み込みプロセッサなどであってもよい。プロセッサは1つ又は複数のチップ上に実装されてよい。プロセッサ1200は1つ又は複数の基板の一部であってよく、及び/又は、例えば、BiCMOS、CMOS、又はNMOSなどの複数のプロセス技術のいずれかを用いて1つ又は複数の基板上に実装されてもよい。
メモリ階層は、複数のコア内の1つ又は複数のレベルのキャッシュと、共有キャッシュユニット1206のセットあるいは1つ又は複数の共有キャッシュユニット1206と、統合メモリコントローラユニット1214のセットに結合された外部メモリ(不図示)とを含む。共有キャッシュユニット1206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、あるいは他のレベルのキャッシュなどの1つ又は複数の中間レベルのキャッシュ、最終レベルのキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。1つの実施形態において、リングベースの相互接続ユニット1212が、統合グラフィクスロジック1208、共有キャッシュユニット1206のセット、及びシステムエージェントユニット1210/統合メモリコントローラユニット1214を相互接続するが、複数の代替的な実施形態は、そのような複数のユニットを相互接続するのに任意の数の周知の技術を用いてよい。1つの実施形態において、1つ又は複数のキャッシュユニット1206と、コア1202A〜1202Nとの間でコヒーレンシが維持される。
いくつかの実施形態において、コア1202A〜1202Nのうち1つ又は複数は、マルチスレッディングが可能である。システムエージェント1210は、コア1202A〜1202Nを調整し操作するこれらのコンポーネントを含む。システムエージェントユニット1210は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1202A〜1202N及び統合グラフィクスロジック1208の電力状態を調整するのに必要とされるロジック及び複数のコンポーネントであってよく、又はこれらを含んでもよい。ディスプレイユニットは、1つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
コア1202A〜1202Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア1202A〜1202Nのうち2つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってよい。
[例示的なコンピュータアーキテクチャ]
図13〜図16は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の、当技術分野で知られている他のシステム設計及び構成もまた適している。概して、本明細書に開示されるような、プロセッサ及び/又は他の実行ロジックを組み込むことができる多様なシステム又は電子デバイスが一般に適している。
ここで図13を参照すると、本発明の1つの実施形態に従って、システム1300のブロック図が示されている。システム1300は、コントローラハブ1320に結合されている1つ又は複数のプロセッサ1310、1315を含んでよい。1つの実施形態において、コントローラハブ1320は、グラフィックスメモリコントローラハブ(GMCH)1390と、入出力ハブ(IOH)1350(これは別のチップ上にあってよい)とを含み、GMCH1390は、メモリ1340及びコプロセッサ1345が結合されているメモリコントローラ及びグラフィクスコントローラを含み、IOH1350は、入出力(I/O)デバイス1360をGMCH1390に結合する。代替的に、メモリコントローラ及びグラフィクスコントローラのうち一方又は両方は、(本明細書に説明されるように)プロセッサ内に統合され、メモリ1340及びコプロセッサ1345は、プロセッサ1310と、単一チップにIOH1350を有するコントローラハブ1320とに直接結合される。
任意的構成として、追加の複数のプロセッサ1315が図13に破線で示されている。各プロセッサ1310、1315は、本明細書で説明される複数の処理コアのうち1つ又は複数を含んでよく、プロセッサ1200の何らかのバージョンであってよい。
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はその2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1320は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath相互接続(QPI)などのポイントツーポイントインタフェース、又は類似の接続1395を介してプロセッサ1310、1315と通信する。
1つの実施形態において、コプロセッサ1345は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。1つの実施形態において、コントローラハブ1320は統合グラフィクスアクセラレータを含んでよい。
物理リソース1310、1315の間には、アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱特性、電力消費特性などを含む幅広い価値基準に関して、様々な違いが存在し得る。
1つの実施形態において、プロセッサ1310は、一般的タイプのデータ処理オペレーションを制御する複数の命令を実行する。その複数の命令内に複数のコプロセッサ命令が組み込まれてよい。プロセッサ1310は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1345により実行されるべきタイプのものであると認識する。従って、プロセッサ1310はこれらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)をコプロセッサバス又は他の相互接続によってコプロセッサ1345に発行する。コプロセッサ1345は受信したコプロセッサ命令を承諾し実行する。
ここで図14を参照すると、本発明の一実施形態に従って、第1のより具体的な例示的システム1400のブロック図が示されている。図14に示されるように、マルチプロセッサシステム1400は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1450を介して結合された第1のプロセッサ1470及び第2のプロセッサ1480を含む。プロセッサ1470及び1480のそれぞれは、何らかのバージョンのプロセッサ1200であってよい。本発明の1つの実施形態において、プロセッサ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)インタフェース1450を介し、P−Pインタフェース回路1478、1488を用いて情報を交換してよい。図14に示されるように、IMC1472及び1482はそれぞれのメモリ、すなわちメモリ1432及びメモリ1434にプロセッサを結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ1470、1480はそれぞれ、個々のP―Pインタフェース1452、1454を介し、ポイントツーポイントインタフェース回路1476、1494、1486、1498を用いてチップセット1490と情報を交換してよい。チップセット1490は任意に、高性能インタフェース1439を介し、コプロセッサ1438と情報を交換してよい。1つの実施形態において、コプロセッサ1438は、例えば高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
共有キャッシュ(不図示)が、どちらかのプロセッサに含まれても両方のプロセッサの外部にあってもよいが、P−P相互接続を介して両方のプロセッサに接続されている。これにより、プロセッサが低電力モードに置かれている場合に、どちらか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
チップセット1490は、インタフェース1496を介して第1のバス1416に結合されてよい。1つの実施形態において、第1のバス1416は、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、あるいはPCIエクスプレスバス又は別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されるものではない。
図14に示されるように、第1のバス1416を第2のバス1420に結合するバスブリッジ1418と共に、様々なI/Oデバイス1414が第1のバス1416に結合されてよい。1つの実施形態において、1つ又は複数の追加のプロセッサ1415、例えば、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えばグラフィックスアクセラレータ、デジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサなどが第1のバス1416に結合される。1つの実施形態において、第2のバス1420は、ローピンカウント(LPC)バスであってよい。1つの実施形態において、例えば、キーボード及び/又はマウス1422、通信デバイス1427、及びストレージユニット1428などを含む様々なデバイスが第2のバス1420に結合されてよく、ストレージユニット1428は、複数の命令/コード及びデータ1430を含み得るディスクドライブ又は他の大容量ストレージデバイスなどである。更に、オーディオI/O1424が第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、1482に結合されるだけでなく、I/Oデバイス1514もまた制御ロジック1472、1482に結合されることを図示する。レガシーI/Oデバイス1515がチップセット1490に結合されている。
ここで図16を参照すると、本発明の一実施形態に従って、SoC1600のブロック図が示されている。図12の類似の複数の要素は同じ参照番号を有している。また、破線で示されたボックスは、より高度なSoCの任意的機能である。図16において、1つ又は複数のコア1202A〜1202Nのセット及び共有キャッシュユニット1206を含むアプリケーションプロセッサ1610と、システムエージェントユニット1210と、バスコントローラユニット1216と、統合メモリコントローラユニット1214と、統合グラフィクスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得るコプロセッサ1620のセットあるいは1つ又は複数のコプロセッサ1620と、スタティックランダムアクセスメモリ(SRAM)ユニット1630と、ダイレクトメモリアクセス(DMA)ユニット1632と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1640とに、相互接続ユニット1602が結合されている。1つの実施形態において、コプロセッサ1620は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の複数の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性メモリ及び不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを備えるプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
図14に図示されるコード1430などのプログラムコードが、本明細書に説明される複数の機能を実行して出力情報を生成するための複数の命令を入力するのに適用されてよい。出力情報は、既知の様式で、1つ又は複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際に、本明細書に説明される複数のメカニズムは、いかなるプログラミング言語にも範囲を限定されない。いずれの場合も、言語はコンパイラ型言語又はインタープリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様が、機械可読媒体に格納された、プロセッサ内の様々なロジックを表す代表的な複数の命令により実行されてよい。これらの命令は、機械により読み出されると、本明細書に説明される複数の技術を実行するロジックを機械に作成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードするために様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体は、限定しないが、機械又はデバイスにより製造された又は形成された非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスク、任意の他のタイプのディスク(フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び光磁気ディスクを含む)、半導体デバイス(リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)・スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)など)、磁気又は光カード、あるいは電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体が含まれる。
従って、本発明の複数の実施形態はまた、非一時的な有形の機械可読媒体を含み、その非一時的な有形の機械可読媒体は複数の命令を含む、あるいは本明細書に説明される構造、回路、装置、プロセッサ、及び/又はシステム機能を規定するハードウェア記述言語(HDL)などの設計データを含む。このような複数の実施形態はまた、プログラム製品と呼ばれ得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
いくつかの場合において、命令変換器が、ソース命令セットからターゲット命令セットに命令を変換するのに用いられてよい。例えば、命令変換器は命令をコアにより処理される1つ又は複数の他の命令にトランスレート(例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を用いる)、モーフィング、エミュレート、又は別な方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器はプロセッサ上に、プロセッサから離れて、又は一部がプロセッサ上に且つ一部がプロセッサから離れて存在してよい。
図17は、本発明の複数の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図である。例示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に命令変換器はソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図17は、高水準言語1702のプログラムがx86コンパイラ1704を用いてコンパイルされ、少なくとも1つのx86命令セットコアを有するプロセッサ1716がネイティブに実行し得るx86バイナリコード1706を生成し得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1716は、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を実現するために、(1)Intelのx86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で起動することに狙いを定めたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを矛盾なく実行する又は別な方法で処理することで、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1704は、追加のリンケージ処理があってもなくても、少なくとも1つのx86命令セットコアを有するプロセッサ1716上で実行され得るx86バイナリコード1706(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図17は、高水準言語1702のプログラムが、代替の命令セットコンパイラ1708を用いてコンパイルされ、少なくとも1つのx86命令セットコアを持たないプロセッサ1714(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、及び/又は、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)がネイティブに実行し得る代替の命令セットのバイナリコード1710を生成し得ることを示す。命令変換器1712は、x86命令セットコアを持たないプロセッサ1714がネイティブに実行し得るコードに、x86バイナリコード1706を変換するのに用いられる。この変換済みコードは、代替の命令セットのバイナリコード1710と同じではない可能性がある。なぜなら、このことが可能な命令変換器は作るのが難しいからである。しかし、変換済みコードは一般的なオペレーションを実現し、代替の命令セットの命令で構成される。従って、命令変換器1712は、エミュレーション、シミュレーション、又は任意の他プロセスによって、x86命令セットのプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスが、x86バイナリコード1706を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図1、図4〜図6、及び図9のいずれかに説明された複数のコンポーネント、特徴、及び詳細はまた、任意に図2〜図3のいずれかに適用してよい。さらに、複数の装置のいずれかに説明された複数のコンポーネント、特徴、及び詳細はまた、任意に複数の方法のいずれかに適用してよく、このことは、複数の実施形態においてそのような装置により実行されてよく、及び/又は、そのような装置とともに実行されてよい。本明細書に説明された複数のプロセッサのいずれも、本明細書に開示される複数のコンピュータシステムのいずれかに含まれてよい。
本明細書及び特許請求の範囲において、用語「結合された(coupled)」及び/又は「接続された(connected)」は、それらの派生語と共に用いられたことがあるかもしれない。これらの用語は互いの同義語として意図されるものではない。むしろ、複数の実施形態において、「接続された」は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は、永続ストアフェンス命令をデコードするデコードユニットを含むプロセッサ又は他の装置である。本装置はまた、デコードユニットに結合されたメモリサブシステムモジュールを含む。元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、メモリサブシステムモジュールは永続ストアフェンス命令に応答して、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する。
例2は例1のプロセッサを含み、任意に、永続ストアフェンス命令は、所定のデータを有するソースオペランドを示し、且つ所定のデータが格納される永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を含む。
例3は例1のプロセッサを含み、任意に、所定のデータはストア命令のソースオペランドに含まれ、暗黙的に永続ストアフェンス命令は元のプログラム順序において永続ストアフェンス命令の直前及び直後のうち一方にある。
例4は例1から例3のいずれか1つのプロセッサを含み、任意にメモリサブシステムモジュールは、永続ストアフェンス命令に応答して、元のプログラム順序において永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、後続のストア命令のデータの前に永続ストレージに永続的に格納されることを保証しない。
例5は例1から例3のいずれか1つのプロセッサを含み、1つ又は複数のキャッシュのセットを更に含む。また任意に、メモリサブシステムモジュールは、永続ストアフェンス命令に応答して、所定のデータに1つ又は複数のキャッシュのセットをバイパスさせる。
例6は例1から例5のいずれか1つのプロセッサを含み、永続ストアフェンスバッファを更に含み、任意にメモリサブシステムモジュールは、永続ストアフェンス命令に応答して、所定のデータを永続ストアフェンスバッファに格納させる。
例7は例6のプロセッサを含み、キャッシュラインをキャッシュから移す意図を示す信号に基づき、キャッシュラインがキャッシュから移される前に、少なくとも1つのキャッシュラインを永続ストアフェンスバッファから永続ストレージに格納する永続ストアフェンスバッファ管理ユニットを更に含む。
例8は例6から例7のいずれか1つのプロセッサを含み、任意に永続ストアフェンスバッファは、第2の永続ストアフェンス命令に対応する第2のデータが、所定のデータと同じ永続ストアフェンスバッファのキャッシュラインに格納されることを可能にするライトコンバインバッファを含む。
例9は例6から例8のいずれか1つのプロセッサを含み、任意にプロセッサの命令セットは、永続ストアフェンスバッファからデータを読み出すユーザレベルのロード命令を含まない。
例10は例6から例9のいずれか1つのプロセッサを含み、任意に永続ストアフェンスバッファは、キャッシュコヒーレンシプロトコルを実装しない。
例11は例1から例6のいずれか1つのプロセッサを含み、任意にプロセッサは、プロセッサを永続ストレージに結合するのに用いられる相互接続上に送信される1つ又は複数のサイクルの共通セットを使って、所定のデータを有するキャッシュラインと、第2の永続ストアフェンス命令に対応する第2のデータとを永続ストレージに格納する。
例12は、永続ストアフェンス命令を受信する段階を含む、プロセッサにおける方法である。本方法はまた、永続ストアフェンス命令に応答して、元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、永続ストアフェンス命令に対応する所定のデータが永続ストレージに永続的に格納されることを保証する段階を含む。
例13は例12の方法を含み、任意に、命令を受信する段階は、所定のデータを有するソースオペランドを示し、且つ所定のデータが格納される永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を受信する段階を含む。
例14は例12の方法を含み、所定のデータを有するソースオペランドを示すストア命令を受信する段階を更に含み、任意に、ストア命令は、元のプログラム順序において永続ストアフェンス命令の直前及び直後のうち一方にある。
例15は例12から例14のいずれか1つの方法を含み、永続ストアフェンス命令に応答して、所定のデータにプロセッサの1つ又は複数のキャッシュのセットをバイパスさせる段階を更に含む。
例16は例12から例15のいずれか1つの方法を含み、任意に、保証する段階は、後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証する段階を含み、全ての上記後続のストア命令のデータが永続ストレージに永続的に格納される前に、全ての以前のストア命令のデータが永続ストレージに永続的に格納されることを保証することはない。以前のストア命令は、元のプログラム順序において永続ストアフェンス命令の前に発生する。
例17は例12から例16のいずれか1つの方法を含み、所定のデータを有するキャッシュラインと、第2の永続ストアフェンス命令に対応する第2のデータとを、相互接続上に送信される1つ又は複数のサイクルの共通セットにおいて永続ストレージに格納する段階を更に含む。
例18は例12から例17のいずれか1つの方法を含み、永続ストアフェンス命令に応答して、永続ストアフェンスバッファに所定のデータを格納する段階を更に含む。また任意に、プロセッサの命令セットは、永続ストアフェンスバッファからデータをロードするユーザレベルのロード命令を含まない。
例19は例18の方法を含み、キャッシュラインをキャッシュから移す意図を示す信号を受信する段階と、信号を受信した後、且つキャッシュラインがキャッシュから永続ストレージに移される前に、少なくとも1つのキャッシュラインを永続ストアフェンスバッファから永続ストレージに格納する段階とを更に含む。
例20は例18から例19のいずれか1つの方法を含み、任意に、所定のデータを永続ストアフェンスバッファに格納する段階は、第2の永続ストアフェンス命令に対応する第2のデータを有する永続ストアフェンスバッファのキャッシュラインに所定のデータを格納する段階を含む。
例21は例12から例20のいずれか1つの方法を含み、所定のデータを永続メモリのログ先行書き込みに格納する段階を更に含む。
例22は複数の命令を処理するシステムであり、相互接続と、相互接続に結合された永続ストレージとを含む。永続ストレージは、ログ先行書き込みアルゴリズムの命令のセットを格納する。命令のセットは、永続ストレージにおける位置を示し、且つ所定のデータを永続ストレージのログ先行書き込みに格納するのにログ先行書き込みアルゴリズムによって用いられるストア及び永続ストアフェンス命令を含む。本システムはまた、相互接続に結合されるプロセッサを含む。プロセッサは、ストア及び永続ストアフェンス命令を受信する。プロセッサはストア及び永続ストアフェンス命令に応答して、元のプログラム順序においてログ先行書き込みアルゴリズムのストア及び永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証する。
例23は例22のシステムを含み、任意に、永続ストア及び永続ストアフェンス命令は、所定のデータにプロセッサの1つ又は複数のキャッシュのセットをバイパスさせる非一時的命令を含む。
例24は、非一時的機械可読記憶媒体を含む製造物品である。非一時的機械可読記憶媒体は、ストア及び永続ストアフェンス命令を格納する。ストア及び永続ストアフェンス命令は、所定のデータを有し、且つ所定のデータが格納される永続ストレージにおける位置を示すソースオペランドを示す。ストア及び永続ストアフェンス命令は、機械により実行された場合、元のプログラム順序において永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、所定のデータが永続ストレージに永続的に格納されることを保証することを含む複数のオペレーションを機械に実行させる。
例25は例24の製造物品を含み、任意に、ストア及び永続ストアフェンス命令は、機械により実行された場合、元のプログラム順序においてストア及び永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、後続のストア命令のデータの前に永続ストレージに永続的に格納されることを機械に保証させない。
例26は、例12から例21のいずれか1つの方法を実行するよう動作するプロセッサ又は他の装置である。
例27は、例12から例21のいずれか1つの方法を実行するための手段を含むプロセッサ又は他の装置である。
例28は、例12から例21のいずれか1つの方法を実行する複数のモジュールを含むプロセッサ又は他の装置である。
例29は、例12から例21のいずれか1つの方法を実行するモジュール及び/又はユニット及び/又はロジック及び/又は回路及び/又は手段からなる任意の組み合わせを含むプロセッサである。
例30は、任意に非一時的機械可読媒体を含む製造物品であり、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合及び/又は実行されると、任意に、例12から例21のいずれか1つの方法を機械に実行させるよう動作する命令を格納する又はそうでなければ提供する。
例31はコンピュータシステム、他の電子デバイス、又は他の装置であり、バス又は他の相互接続と、相互接続に結合された例1から例11の何れか1つのプロセッサと、ダイナミックランダムアクセスメモリ(DRAM)、ネットワークインタフェース、グラフィックスチップ、無線通信チップ、移動通信用グローバルシステム(GSM(登録商標))アンテナ、相変化メモリ、及びビデオカメラから選択される、相互接続に結合された少なくとも1つのコンポーネントとを含む。例32は、実質的に本明細書に説明されるようなプロセッサ又は他の装置である。
例33は、実質的に本明細書に説明されるような任意の方法を実行するよう動作するプロセッサ又は他の装置である。
例34は、実質的に本明細書に説明されるような任意の永続ストアフェンス命令を実行するよう動作するプロセッサ又は他の装置である。

Claims (25)

  1. 永続ストアフェンス命令をデコードするデコードユニットと、
    前記デコードユニットに結合されたメモリサブシステムモジュールと
    を備え、
    前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する
    プロセッサ。
  2. 前記永続ストアフェンス命令は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を含む
    請求項1に記載のプロセッサ。
  3. 前記所定のデータは、ストア命令のソースオペランドに含まれ、暗黙的に前記永続ストアフェンス命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある、
    請求項1に記載のプロセッサ。
  4. 前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが、前記後続のストア命令の前記データの前に前記永続ストレージに永続的に格納されることを保証しない、
    請求項1に記載のプロセッサ。
  5. 1つ又は複数のキャッシュのセットを更に備え、
    前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータに前記1つ又は複数のキャッシュの前記セットをバイパスさせる、
    請求項1に記載のプロセッサ。
  6. 永続ストアフェンスバッファを更に備え、
    前記メモリサブシステムモジュールは、前記永続ストアフェンス命令に応答して、前記所定のデータを前記永続ストアフェンスバッファに格納されるようにさせる、
    請求項1から5のいずれか一項に記載のプロセッサ。
  7. キャッシュラインをキャッシュから移す意図を示す信号に基づき、前記キャッシュラインが前記キャッシュから移される前に、少なくとも1つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する永続ストアフェンスバッファ管理ユニットを更に備える
    請求項6に記載のプロセッサ。
  8. 前記永続ストアフェンスバッファは、第2の永続ストアフェンス命令に対応する第2のデータが、前記所定のデータと同じ前記永続ストアフェンスバッファのキャッシュラインに格納されることを可能にするライトコンバインバッファを含む
    請求項6に記載のプロセッサ。
  9. 前記プロセッサの命令セットは、前記永続ストアフェンスバッファからデータを読み出すユーザレベルのロード命令を含まない
    請求項6に記載のプロセッサ。
  10. 前記永続ストアフェンスバッファは、キャッシュコヒーレンシプロトコルを実装しない
    請求項6に記載のプロセッサ。
  11. 前記プロセッサは、前記プロセッサを前記永続ストレージに結合するのに用いられる相互接続上に送信される1つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第2の永続ストアフェンス命令に対応する第2のデータとを前記永続ストレージに格納する
    請求項1から5のいずれか一項に記載のプロセッサ。
  12. プロセッサにおける方法であって、
    永続ストアフェンス命令を受信する段階と、
    前記永続ストアフェンス命令に応答して、元のプログラム順序において前記永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが永続ストレージに永続的に格納される前に、前記永続ストアフェンス命令に対応する所定のデータが前記永続ストレージに永続的に格納されることを保証する段階と
    を備える
    方法。
  13. 前記永続ストアフェンス命令を受信する段階は、前記所定のデータを有するソースオペランドを示し、且つ前記所定のデータが格納される前記永続ストレージにおける位置を示すストア及び永続ストアフェンス命令を受信する段階を含む
    請求項12に記載の方法。
  14. 前記所定のデータを有するソースオペランドを示すストア命令を受信する段階を更に備え、
    前記ストア命令は、前記元のプログラム順序において前記永続ストアフェンス命令の直前及び直後のうち一方にある
    請求項12に記載の方法。
  15. 前記永続ストアフェンス命令に応答して、前記所定のデータに前記プロセッサの1つ又は複数のキャッシュのセットをバイパスさせる段階を更に備える
    請求項12に記載の方法。
  16. 保証する段階は、前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する段階を含み、全ての前記後続のストア命令の前記データが前記永続ストレージに永続的に格納される前に、前記元のプログラム順序において前記永続ストアフェンス命令の前に発生する全ての以前のストア命令のデータが前記永続ストレージに永続的に格納されることを保証することはない
    請求項12に記載の方法。
  17. 相互接続上に送信される1つ又は複数のサイクルの共通セットにおいて、前記所定のデータを有するキャッシュラインと、第2の永続ストアフェンス命令に対応する第2のデータとを前記永続ストレージに格納する段階を更に備える
    請求項12に記載の方法。
  18. 前記永続ストアフェンス命令に応答して、前記所定のデータを永続ストアフェンスバッファに格納する段階を更に備え、
    前記プロセッサの命令セットは、データを前記永続ストアフェンスバッファからロードするユーザレベルのロード命令を含まない
    請求項12に記載の方法。
  19. キャッシュラインをキャッシュから移す意図を示す信号を受信する段階と、
    前記信号を受信した後、且つ前記キャッシュラインが前記キャッシュから前記永続ストレージに移される前に、少なくとも1つのキャッシュラインを前記永続ストアフェンスバッファから前記永続ストレージに格納する段階と
    を更に備える
    請求項18に記載の方法。
  20. 前記所定のデータを前記永続ストレージのログ先行書き込みに格納する段階を更に備える
    請求項12に記載の方法。
  21. 複数の命令を処理するシステムであって、
    相互接続と、
    前記相互接続に結合された永続ストレージと、
    前記相互接続に結合されたプロセッサと
    を備え、
    前記永続ストレージはログ先行書き込みアルゴリズムの命令のセットを格納し、前記命令のセットは、前記永続ストレージにおける位置を示し、且つ前記ログ先行書き込みアルゴリズムにより所定のデータを前記永続ストレージのログ先行書き込みに格納するのに用いられるストア及び永続ストアフェンス命令を含み、
    前記プロセッサは、前記ストア及び永続ストアフェンス命令を受信し、前記ストア及び永続ストアフェンス命令に応答して、元のプログラム順序において前記ログ先行書き込みアルゴリズムの前記ストア及び永続ストアフェンス命令の後に発生する全ての後続のストア命令のデータが前記永続ストレージに永続的に格納される前に、前記所定のデータが前記永続ストレージに永続的に格納されることを保証する
    システム。
  22. 前記ストア及び永続ストアフェンス命令は、前記所定のデータに前記プロセッサの1つ又は複数のキャッシュのセットをバイパスさせる非一時的命令を含む
    請求項21に記載のシステム。
  23. 請求項12から20のいずれか一項に記載の方法を実行するための手段を備える
    装置。
  24. 機械により実行されると、請求項12から20のいずれか一項に記載の方法を前記機械に実行させるよう動作可能な命令を格納する非一時的機械可読媒体を備える
    製造物品。
  25. 相互接続と、
    前記相互接続に結合された請求項1から11のいずれか一項に記載のプロセッサと、
    前記相互接続に結合された永続ストレージと
    を備え、
    前記永続ストレージは、前記永続ストアフェンス命令を含むログ先行書き込みアルゴリズムを格納し、データを前記永続ストレージのログ先行書き込みに格納するのに前記永続ストアフェンス命令を用いる
    電子デバイス。
JP2017510898A 2014-09-26 2015-08-31 永続ストアフェンスプロセッサ、方法、システム、及び命令 Pending JP2017532643A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/498,178 US10489158B2 (en) 2014-09-26 2014-09-26 Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores
US14/498,178 2014-09-26
PCT/US2015/047741 WO2016048592A1 (en) 2014-09-26 2015-08-31 Persistent store fence processors, methods, systems, and instructions

Publications (1)

Publication Number Publication Date
JP2017532643A true JP2017532643A (ja) 2017-11-02

Family

ID=55581784

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017510898A Pending JP2017532643A (ja) 2014-09-26 2015-08-31 永続ストアフェンスプロセッサ、方法、システム、及び命令

Country Status (7)

Country Link
US (1) US10489158B2 (ja)
EP (1) EP3198403A4 (ja)
JP (1) JP2017532643A (ja)
KR (1) KR102282135B1 (ja)
CN (1) CN106575218B (ja)
TW (1) TWI598821B (ja)
WO (1) WO2016048592A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022518351A (ja) * 2019-01-31 2022-03-15 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
US11762659B2 (en) 2019-01-31 2023-09-19 International Business Machines Corporation Handling an input/output store instruction

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489158B2 (en) 2014-09-26 2019-11-26 Intel Corporation Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores
US9971686B2 (en) 2015-02-23 2018-05-15 Intel Corporation Vector cache line write back processors, methods, systems, and instructions
US10303477B2 (en) 2015-06-26 2019-05-28 Intel Corporation Persistent commit processors, methods, systems, and instructions
JP6674085B2 (ja) * 2015-08-12 2020-04-01 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10127243B2 (en) * 2015-09-22 2018-11-13 International Business Machines Corporation Fast recovery using self-describing replica files in a distributed storage system
US9747174B2 (en) * 2015-12-11 2017-08-29 Microsoft Technology Licensing, Llc Tail of logs in persistent main memory
US10254967B2 (en) * 2016-01-13 2019-04-09 Sandisk Technologies Llc Data path control for non-volatile memory
US10324650B2 (en) * 2016-09-23 2019-06-18 Advanced Micro Devices, Inc. Scoped persistence barriers for non-volatile memories
US11216396B2 (en) 2016-09-29 2022-01-04 Intel Corporation Persistent memory write semantics on PCIe with existing TLP definition
CN107885671B (zh) * 2016-09-30 2021-09-14 华为技术有限公司 一种非易失性内存的持久化方法和计算设备
US10528267B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Command queue for storage operations
US10528286B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10528255B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10409603B2 (en) * 2016-12-30 2019-09-10 Intel Corporation Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory
US11106468B2 (en) * 2017-05-23 2021-08-31 Eta Scale Ab System and method for non-speculative reordering of load accesses
US11436087B2 (en) * 2017-05-31 2022-09-06 Everspin Technologies, Inc. Systems and methods for implementing and managing persistent memory
US10282298B2 (en) 2017-06-13 2019-05-07 Microsoft Technology Licensing, Llc Store buffer supporting direct stores to a coherence point
US10303603B2 (en) * 2017-06-13 2019-05-28 Microsoft Technology Licensing, Llc Low power multi-core coherency
US10936441B2 (en) 2017-12-15 2021-03-02 Microsoft Technology Licensing, Llc Write-ahead style logging in a persistent memory device
US11016669B2 (en) * 2018-05-01 2021-05-25 Qualcomm Incorporated Persistent write data for energy-backed memory
CN110647480B (zh) * 2018-06-26 2023-10-13 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
US10915404B2 (en) * 2018-11-02 2021-02-09 Arm Limited Persistent memory cleaning
US20200210186A1 (en) * 2018-12-27 2020-07-02 Intel Corporation Apparatus and method for non-spatial store and scatter instructions
US11106370B2 (en) * 2019-07-02 2021-08-31 Micron Technology, Inc. Changing of memory components to be used for a stripe based on an endurance condition
US11416397B2 (en) * 2019-10-14 2022-08-16 Intel Corporation Global persistent flush
US11392380B2 (en) * 2019-12-28 2022-07-19 Intel Corporation Apparatuses, methods, and systems to precisely monitor memory store accesses
CN111857825A (zh) 2020-07-20 2020-10-30 北京百度网讯科技有限公司 指令执行方法、装置、电子设备和计算机可读存储介质
US11847048B2 (en) * 2020-09-24 2023-12-19 Advanced Micro Devices, Inc. Method and apparatus for providing persistence to remote non-volatile memory
US11853605B2 (en) 2021-09-17 2023-12-26 Micron Technology, Inc. Database persistence

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008512785A (ja) * 2004-09-10 2008-04-24 カビウム・ネットワークス マルチコアプロセッサの格納命令の順序づけ
JPWO2008155829A1 (ja) * 2007-06-20 2010-08-26 富士通株式会社 情報処理装置,キャッシュメモリ制御装置およびメモリアクセス順序保証方法
US20140281240A1 (en) * 2013-03-15 2014-09-18 Thomas Willhalm Instructions To Mark Beginning and End Of Non Transactional Code Region Requiring Write Back To Persistent Storage
US20140281196A1 (en) * 2013-03-15 2014-09-18 Martin G. Dixon Processors, methods, and systems to relax synchronization of accesses to shared memory

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996017291A1 (en) 1994-12-02 1996-06-06 Intel Corporation Microprocessor with packing operation of composite operands
US6073210A (en) 1998-03-31 2000-06-06 Intel Corporation Synchronization of weakly ordered write combining operations using a fencing mechanism
US6678810B1 (en) * 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US6708269B1 (en) 1999-12-30 2004-03-16 Intel Corporation Method and apparatus for multi-mode fencing in a microprocessor system
US6546462B1 (en) 1999-12-30 2003-04-08 Intel Corporation CLFLUSH micro-architectural implementation method and system
US6978360B2 (en) 2001-05-11 2005-12-20 International Business Machines Corporation Scalable processor
US7243200B2 (en) 2004-07-15 2007-07-10 International Business Machines Corporation Establishing command order in an out of order DMA command queue
US8909871B2 (en) 2006-08-03 2014-12-09 International Business Machines Corporation Data processing system and method for reducing cache pollution by write stream memory access patterns
US8219741B2 (en) 2008-10-24 2012-07-10 Microsoft Corporation Hardware and operating system support for persistent memory on a memory bus
US10430298B2 (en) 2010-10-28 2019-10-01 Microsoft Technology Licensing, Llc Versatile in-memory database recovery using logical log records
US10949415B2 (en) * 2011-03-31 2021-03-16 International Business Machines Corporation Logging system using persistent memory
WO2013147820A1 (en) 2012-03-29 2013-10-03 Intel Corporation System and method for managing persistence with a multi-level memory hierarchy including non-volatile memory
US9081606B2 (en) 2012-11-13 2015-07-14 International Business Machines Corporation Asynchronous persistent stores for transactions
US9535836B2 (en) * 2013-03-13 2017-01-03 Hewlett Packard Enterprise Development Lp Non-volatile memory update tracking
US9367472B2 (en) * 2013-06-10 2016-06-14 Oracle International Corporation Observation of data in persistent memory
US9423959B2 (en) 2013-06-29 2016-08-23 Intel Corporation Method and apparatus for store durability and ordering in a persistent memory architecture
CN105339908B (zh) * 2013-07-26 2018-09-11 英特尔公司 用于支持持久存储器的方法和装置
US20150095578A1 (en) * 2013-09-27 2015-04-02 Kshitij Doshi Instructions and logic to provide memory fence and store functionality
US10489158B2 (en) 2014-09-26 2019-11-26 Intel Corporation Processors, methods, systems, and instructions to selectively fence only persistent storage of given data relative to subsequent stores

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008512785A (ja) * 2004-09-10 2008-04-24 カビウム・ネットワークス マルチコアプロセッサの格納命令の順序づけ
JPWO2008155829A1 (ja) * 2007-06-20 2010-08-26 富士通株式会社 情報処理装置,キャッシュメモリ制御装置およびメモリアクセス順序保証方法
US20140281240A1 (en) * 2013-03-15 2014-09-18 Thomas Willhalm Instructions To Mark Beginning and End Of Non Transactional Code Region Requiring Write Back To Persistent Storage
US20140281196A1 (en) * 2013-03-15 2014-09-18 Martin G. Dixon Processors, methods, and systems to relax synchronization of accesses to shared memory

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022518351A (ja) * 2019-01-31 2022-03-15 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
US11762659B2 (en) 2019-01-31 2023-09-19 International Business Machines Corporation Handling an input/output store instruction
JP7479373B2 (ja) 2019-01-31 2024-05-08 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム

Also Published As

Publication number Publication date
TW201624279A (zh) 2016-07-01
CN106575218B (zh) 2020-06-26
EP3198403A4 (en) 2018-05-30
WO2016048592A1 (en) 2016-03-31
US10489158B2 (en) 2019-11-26
CN106575218A (zh) 2017-04-19
KR102282135B1 (ko) 2021-07-26
EP3198403A1 (en) 2017-08-02
KR20170039237A (ko) 2017-04-10
US20160092223A1 (en) 2016-03-31
TWI598821B (zh) 2017-09-11

Similar Documents

Publication Publication Date Title
KR102282135B1 (ko) 영구적 저장 펜스 프로세서, 방법, 시스템, 및 명령어
US11494194B2 (en) Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
CN108292221B (zh) 事务结束加上持续性提交指令、处理器、方法和系统
US10409603B2 (en) Processors, methods, systems, and instructions to check and store indications of whether memory addresses are in persistent memory
US9870209B2 (en) Instruction and logic for reducing data cache evictions in an out-of-order processor
US20170097826A1 (en) System, Method, and Apparatus for Improving Throughput of Consecutive Transactional Memory Regions
US9471494B2 (en) Method and apparatus for cache line write back operation
US10768680B2 (en) Hardware apparatuses and methods to perform transactional power management
US20150134932A1 (en) Structure access processors, methods, systems, and instructions
KR20170001568A (ko) 영구 커밋 프로세서들, 방법들, 시스템들 및 명령어들
TW202314486A (zh) 原子式儲存至寬於原生支援資料寬度之記憶體資料的處理器、方法、系統與指令

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180313

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180612

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180810

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180913

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20190305