ベクトルキャッシュラインライトバック命令、この命令を実行するプロセッサ、命令を処理または実行するときにプロセッサによって実行される方法、および命令を処理または実行するために1または複数のプロセッサを組み込むシステムが本明細書において開示される。以下の説明において、多数の具体的な詳細(例えば、具体的な命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションのシーケンス等)が記載される。しかし、実施形態は、これらの具体的な詳細がなくても実施され得る。他の例において、説明の理解を不明瞭にするのを避けるべく、周知の回路、構造、および技術は詳細に示されていない。
図1は、プロセッサ102、および1もしくは複数のメモリならびに/またはストレージデバイス124を含むシステム100(例えば、コンピュータシステムまたは他の電子デバイス)の実施形態のブロック図である。プロセッサは、1または複数のコア104を含み得る。示されるように、図示例において、プロセッサは、任意選択で第1のコア(コア1)104‐1〜第Nのコア(コアN)104‐Nを含み、コアNの数は、任意の所望のコア数を表し得る。典型的には、コアの数は、1〜数百程度の範囲であり、多くの場合に1〜数十程度である。
コアの各々は、命令パイプライン106を含む。例えば、コア1は第1の命令パイプライン106‐1を含み、コアNは第Nの命令パイプライン106‐Nを含む。命令パイプラインの各々は、命令セットの命令を処理することができる。命令セットは、コアおよび/またはプロセッサが実行するように動作するネイティブな命令を含む。命令セットの命令とは、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、または機械レベル命令のことをいう。示されるように、いくつかの実施形態において、少なくとも1つのコア(例えば、この場合にはコア1 104‐1)の命令セット115は、任意選択でインデックス付きベクトルストア命令またはスキャター命令118を含み得る。更に示されるように、いくつかの実施形態において、少なくとも1つのコア(例えば、この場合にはコア1 104‐1)の命令セットは、任意選択でベクトルキャッシュラインライトバック命令120の実施形態を含み得る。勿論、命令セットは、他の命令(例えば、スカラロード命令、スカラストア命令、スカラ演算命令およびパックド演算命令等)を含み得る。一般に、命令パイプラインは、命令をフェッチするフェッチユニットと、命令をデコードするデコーダと、デコードされた命令を実行する実行ユニットまたは実行ロジックとを含み得る。任意選択のアウトオブオーダコアの場合、命令パイプラインは、任意選択でアロケーションユニット、リネームユニット、スケジューリングユニット、およびコミットユニット、ロジック、またはパイプラインステージも含み得るが、これは必須ではない。本発明の範囲は、いずれの特定のタイプの命令パイプラインにも限定されない。
プロセッサは、1または複数のキャッシュ110、112を含み得る。示されるように、図示されるプロセッサは、任意選択で異なるキャッシュレベルの複数のキャッシュを含むキャッシュ階層108を有する。キャッシュレベルは、コアおよび/または命令パイプラインに対する相対的な近さにおいて異なる。具体的には、コア1は、1または複数のレベルの1または複数の専用キャッシュ110‐1を有する。同様に、コアNは、1または複数のレベルの1または複数の専用キャッシュ110‐Nを有する。1または複数の専用キャッシュ110の各々は、それを用い、および/または含む、対応するコアの専用である。一般に、1または複数の専用キャッシュ110のセットの各々は、第1のレベルまたはレベル1(L1)キャッシュを含み得る。L1キャッシュは、命令パイプライン(例えば、実行ユニット)に最も近いキャッシュレベルを表し得る。いくつかの場合において、1または複数の専用キャッシュ110のセットの各々は、第2のレベルまたはレベル2(L2)キャッシュも任意選択で/潜在的には含み得るが、これは必須ではない。L2キャッシュは、命令パイプライン(例えば、実行ユニット)の2番目に近いキャッシュレベルを表し得る。
示されるように、プロセッサは、任意選択で1または複数のレベルの1または複数の共有キャッシュ112も含み得る。1または複数の共有キャッシュは、任意のある特定のコアの専用であるものとは異なり、コアの各々(例えば、コアの各々のためのキャッシュデータ)によって共有され得る。例として、1または複数の専用キャッシュ110が単一レベルのキャッシュまたはL1キャッシュのみを含む場合、1または複数の共有キャッシュ112は、L2共有キャッシュ、および任意選択で/潜在的には第3のレベルの共有キャッシュまたはレベル3(L3)キャッシュを含み得るが、これは必須ではない。あるいは、1または複数の専用キャッシュ110がL1キャッシュおよびL2キャッシュの両方を含む場合、1または複数の共有キャッシュ112は、L3共有キャッシュ、および任意選択で/潜在的には第4のレベルの共有キャッシュまたはレベル4(L4)キャッシュを含み得るが、これは必須ではない。これらは、いくつかの例示に過ぎない。広くは、様々な実施形態において、プロセッサは、1または複数のキャッシュレベルの1または複数の専用キャッシュまたは共有キャッシュを有し得る。
プロセッサは、システム内の全ての関連するエンティティが正しい現在のバージョンのデータをコヒーレントに見るように、プロセッサの1または複数のキャッシュ110、112内に格納されたデータがコヒーレントに管理され、適切な時点でメモリ/ストレージデバイスに格納されることを保証するのを支援するキャッシュコヒーレンシメカニズムまたはキャッシュコヒーレンシプロトコルを実装し得る。例えば、キャッシュコヒーレンシメカニズムは、全てのコアが正しいバージョンのデータをコヒーレントに見ること、およびプロセッサ102のキャッシュ110、112と同一のコヒーレンシドメインにおいて1または複数のキャッシュ111を有する任意選択の追加の(例えば、外部)キャッシュコンポーネント103が正しいバージョンのデータをコヒーレントに見ることを保証するのに役立ち得る。例として、追加のキャッシュコンポーネントは、各々が異なるキャッシュ階層を有する1または複数の追加のプロセッサ、そのコヒーレンシドメインにおけるキャッシュを用いる入出力デバイス等を含み得る。外部キャッシュコンポーネント103は、例えば、ポイントツーポイント相互接続、マルチドロップバス等を介するなどしてプロセッサ102のバスインタフェースユニット126と結合され得る。好適なキャッシュコヒーレンシプロトコルの例としては、MESI、MOSI、MOESI等が挙げられるが、これらに限定されない。MESIプロトコルは、4つの状態、すなわち、変更(M)、排他(E)、共有(S)、および無効(I)を含み、これらはMESIの2ビットで示される。MOSIプロトコルは、排他(E)状態に代えて所有(O)状態を使用する。MOESIプロトコルは、排他(E)状態および所有(O)状態の両方を使用する。変更状態は、ダーティキャッシュラインを指定する。
再び図1を参照すると、プロセッサ102および1もしくは複数のメモリ、ならびに/またはストレージデバイス124は、介在する結合メカニズム122を介して結合される。プロセッサは、介在する結合メカニズムを介してプロセッサをメモリ/ストレージデバイスに結合することができるメモリサブシステムユニット114を含む。結合メカニズムは、プロセッサをメモリ/ストレージデバイスと結合する様々な異なるタイプの結合メカニズムを広く含むものとして解釈される。様々な実施形態において、結合メカニズム122は、1または複数の相互接続、1または複数のメモリコントローラ、チップセットの1または複数のコンポーネント等、およびこれらの様々な組み合わせを含み得る。例えば、いくつかの実施形態において、プロセッサは、内部メモリコントローラを有してもよく、介在するバスまたは相互接続を介してメモリ/ストレージデバイス(またはそれらの一部)と直接に結合されてもよい。別の例として、プロセッサおよびメモリ/ストレージデバイス(またはそれらの一部)は、介在チップセットコンポーネント(例えば、メモリコントローラハブ)および相互接続のセットを介して互いに結合され得る。
特定のコンセプトを更に示すべく、任意選択のインデックス付きベクトルストア命令またはスキャター命令118の実行を検討する。スキャター命令は、複数のパックドデータ要素を有する(例えば、示されないプロセッサの第1のパックドデータレジスタにおける)第1のソースパックドデータオペランドを示し得、複数のパックドメモリインデックスを有する(例えば、示されないプロセッサの第1のパックドデータレジスタにおける)第2のソースパックドメモリインデックスオペランドを示し得る。スキャター命令は、実行コア(例えば、コア1)に、第1のソースパックドデータオペランドにおけるデータ要素の各々を、第2のソースパックドメモリインデックスオペランドの対応するメモリインデックスによって示されたメモリ/ストレージデバイス124における異なる対応するメモリ位置にスキャターし、書き込み、または格納させるように動作し得る。特定のフレキシブルな値のメモリインデックスに応じて、メモリ位置は、潜在的に/任意選択で非連続的メモリ位置であってもよい。しかし、最初に、スキャターされたデータ要素は、プロセッサの1または複数のキャッシュ110、112内に格納され得る。その後、適切な時点に(例えば、キャッシュコヒーレンシプロトコルに基づいて)、スキャター命令のデータ要素は、1または複数のキャッシュ110、112からメモリ/ストレージデバイス124にライトバックされ得る。やはり特定のフレキシブルな値のメモリインデックスに応じて、メモリ位置は、潜在的に/任意選択でメモリ/ストレージデバイスにおける非シーケンシャなキャッシュラインに対応し得る。そのようなスキャター命令は、例えば、テーブルまたは他のデータ構造体の異なる行または列におけるデータを更新し、スパースアレイまたはデータ構造体、スパース線形代数オペレーション等におけるデータを更新する等の様々な異なる目的に有用である。スキャター命令は、任意選択で必須ではない。
いくつかの実施形態において、ベクトルキャッシュラインライトバック命令120は、スキャター命令のデータ要素をキャッシュ110、112からメモリ/ストレージデバイスにライトバックするために、任意選択のスキャター命令118と併せて用いられ得るが、本発明の範囲はそのように限定されない。上述のように、スキャター命令に関連付けられたデータは、メモリ/ストレージデバイス内に代えて、プロセッサのキャッシュ内に最初に格納され得る。ベクトルキャッシュラインライトバック命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックスオペランドを示し得る。スキャター命令のデータをライトバックするために用いられる場合に、ベクトルキャッシュラインライトバック命令は、スキャター命令と同一のメモリインデックスを用いてもよい(例えば、既に生成された同一のパックドメモリインデックスオペランドを示してもよい)。ベクトルキャッシュラインライトバック命令は、プロセッサ102によって実行され得、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示されたメモリアドレスのセットのいずれかのデータを格納する、コヒーレンシドメイン内のプロセッサの任意のキャッシュレベルにおける任意のキャッシュ(例えば、キャッシュ110、112)の任意のダーティキャッシュラインを、メモリ/ストレージデバイス124にライトバックする。また、いくつかの実施形態において、ベクトルキャッシュラインライトバック命令は、バスまたは相互接続上で、同一のコヒーレンシドメインに1または複数のキャッシュを有する他のエンティティまたはコンポーネント(例えば、外部キャッシュコンポーネント103)に、信号をブロードキャストさせ、送信させ、または別の方法で提供させ、それらのキャッシュにメモリアドレスを格納し、または当該メモリアドレスによって関連付けられた任意のダーティキャッシュラインをライトバックさせ得る。
いくつかの実施形態において、ライトバックされるデータは、任意選択で1または複数のキャッシュにおいて無効にされ得る。更に、ソースパックドメモリインデックスオペランドのメモリインデックスによって示されるメモリアドレスのデータを格納するキャッシュラインは、ダーティであるか否かに関係なく(例えば、クリーン、未変更、共有、排他等の場合に)無効にされ得る。あるいは、他の実施形態において、ライトバックされるデータは、任意選択でキャッシュ内に保持され、未変更状態にされ得る。いくつかの実施形態において、1つの単一データ要素のみではなく、複数のデータ要素(例えば、全てダーティである場合、最大でベクトルの量まで)がベクトルキャッシュラインライトバック命令に応答してライトバックされ得る。スキャター命令におけるように、やはりメモリインデックスのフレキシブル値に応じて、ベクトルキャッシュラインライトバック命令に対応するメモリアドレスは、潜在的に/任意選択で非連続メモリアドレスを表し得、および/または潜在的に/任意選択でメモリ/ストレージデバイスにおける非シーケンシャルなキャッシュラインに対応し得る。
ベクトルキャッシュラインライトバック命令120は、スキャター命令118とは別個の、および/または命令セット115が任意選択でスキャター命令118を省略した場合の有用性も有する。例えば、ベクトルキャッシュラインライトバック命令は、複数の別個のスカラストア命令またはライト・トゥー・メモリ(write to memory)命令によって既に書き込まれた複数のメモリアドレスに対応する(例えば、これらのメモリアドレスのデータを格納する)ダーティキャッシュラインをライトバックするために、任意選択で用いられ得る。別の例として、ベクトルキャッシュラインライトバック命令は、任意選択で、キャッシュラインに対して変更がどのように行われたか(例えば、ソフトウェアプログラマの裁量で)に関係なく複数のダーティキャッシュラインをライトバックするために用いられ得る。
1または複数のメモリおよび/またはストレージデバイス124のセットを実装する異なる態様が企図される。図2A〜図2Bは、永続性メモリを有するか、または有しない1または複数のメモリおよび/またはストレージデバイス124のセットを実装するための2つの異なる好適な実施形態を示す。他の実施形態は、本開示の利益を有する当業者には明らかであろう。
図2Aは、1もしくは複数のメモリおよび/またはストレージデバイスのセット224Aの第1の実施形態のブロック図である。メモリ/ストレージデバイス224Aは、プライマリまたはメインの揮発性メモリ228と、セカンダリまたは補助の不揮発性メモリまたはストレージ230とを含む。電力が印加されない場合、揮発性メモリは、そのデータまたは内容を失う。対照的に、不揮発性メモリまたは不揮発性ストレージは、比較的長い期間、電力が印加されなくともそのデータまたは内容を保持することができる。コンピュータシステムにおいて一般に用いられる1つの例示的なタイプの揮発性メモリは、ダイナミックランダムアクセスメモリ(DRAM)である。コンピュータシステムにおいて一般に用いられる2つの例示的なタイプの不揮発性メモリまたは不揮発性ストレージは、磁気ディスクおよびフラッシュメモリである。従来、DRAMまたは他のタイプの揮発性メモリは、レイテンシおよび帯域幅の両方の観点においてセカンダリストレージまたは補助ストレージに用いられる磁気ディスクおよび特定の他のタイプの不揮発性メモリまたは不揮発性ストレージよりも著しく高速であった。しかし、DRAMまたは他のタイプの揮発性メモリは一般に、磁気ディスクおよび特定の他のタイプの不揮発性大容量ストレージより1ビット毎のコストも高く、これに対応して低い容量を有する。そのような構成において、プライマリまたはメインの揮発性メモリは、多くの場合、(例えば、メモリバスを介して)より直接的またはより近くにプロセッサに結合され、プロセッサ命令セットのロード命令および/またはストア命令によって直接にアクセス可能であった。逆に、セカンダリまたは補助の不揮発性メモリまたは不揮発性大容量ストレージは、多くの場合、入出力(I/O)コントローラ(例えば、SCSI、SATA、PCI Express等)を介してプロセッサと結合されており、通常は命令セットのロード命令/ストア命令によらず、ファイルシステムのアプリケーションプログラミングインタフェース(API)を介してオペレーティングシステム(OS)の呼出しによってアクセスされている。
図2Bは、1もしくは複数のメモリおよび/またはストレージデバイスのセット224Bの第2の実施形態のブロック図である。メモリ/ストレージデバイス224は、プライマリメモリもしくはメインメモリ232と、1もしくは複数のセカンダリもしくは補助のメモリおよび/またはストレージデバイスの任意選択のセットとを含む。プライマリメモリ/メインメモリ232は、いわゆる永続性メモリ234を含み、任意選択で/潜在的には非永続性(例えば、揮発性)メモリ236を含む。セカンダリ/補助メモリ/ストレージは、非永続性(例えば、揮発性)メモリ236および/または永続性メモリ234を補助し得る。例として、セカンダリ/補助メモリ/ストレージとは、補助フラッシュメモリまたは不揮発性デュアルインラインメモリモジュール(NVDIMM)のことをいう場合がある。NVDIMMは、例えば、予期しない電力損失、システムクラッシュ、または通常のシステムシャットダウンにより電力がなくなった場合であっても、データを保持し得るコンピュータメモリDRAM DIMMのことをいう場合がある。
永続性メモリは、ストレージクラスメモリ(SCM)として呼ばれる場合がある。様々な実施形態において、永続性メモリは、不揮発性メモリもしくはストレージ、バッテリ補助揮発性メモリ、またはこれらの組み合わせと共に実装され得る。メインメモリまたはプライマリメモリに用いられるDRAMまたは他のタイプの揮発性メモリとは異なり、永続性メモリは、電源障害および/またはシステム障害、ならびに再起動の間に喪失しないようにデータを永続的に、または耐久的に格納するために用いられ得る。データが永続性メモリ内に格納されると、通常は電力損失、オペレーティングシステムの障害、システムクラッシュ等があっても保持される。いくつかの場合には、データは、プロセッサまたはコンピュータシステムハードウェアの障害においてさえも喪失しないことがある。損傷を受けなければ、永続性メモリ内のデータを回復することがなおも可能であり得るからである。データのそのような耐久性または永続性は、特定の用途および/または実装(例えば、データベースアプリケーション、トランザクション等)には非常に貴重なものとなる傾向がある。
永続性メモリは、ページ/ブロックのアドレス指定能力を必要とするのではなく、バイトでアドレス指定可能であり得、これにより永続性メモリがプロセッサメモリバスと直接に結合されることを可能にするのに役立ち得る。いくつかの実施形態において、永続性メモリ234は単独で、または非永続性(例えば、揮発性)メモリ236と組み合わせて、コンピュータシステムのプライマリメモリまたはメインメモリを実装するために用いられ得る。いくつかの実施形態において、永続性メモリは単独、または非永続性メモリと組み合わせて、プロセッサのアドレス指定可能な物理アドレス空間の一部となり得る。システムのソフトウェアおよびアプリケーションは、ユーザレベル命令(例えば、ロード命令、ストア命令、スキャター命令等)を実行することによって永続性メモリにアクセスすることができる場合がある。永続性メモリへのアクセスは、(例えば、キャッシュ能力、コヒーレンシ、プロセッサメモリオーダリング、メモリタイプ等に関する)DRAMメイン/プライマリメモリへのアクセスと概ね同じプロセッサメモリモデルに従い得る。
異なるタイプの永続性メモリ234が好適である。いくつかの例のみを挙げるならば、好適なタイプの永続性メモリの例としては、相変化メモリ(PCM)に基づくもの、メモリスタに基づくもの(例えば、電荷と磁束の関係を結びつける非線形の2端子受動電気コンポーネント)、(例えば、スピン偏極電流を用いて磁気トンネル接合またはスピンバルブにおける磁性層の向きが変更され得る効果を利用する)スピン・トランスファ・トルクに基づくものが挙げられるが、これらに限定されない。これらの技術の拡張または改良である、将来開発される他の技術、または全く異なる技術も潜在的には好適である。本発明の範囲は、いずれの特定のタイプの永続性メモリにも限定されない。更に、永続性メモリを用いない実施形態も用いられ得る(例えば、DRAMメインメモリおよびハードディスクセカンダリメモリの構成で用いられ得る)。
データが永続性メモリ234内に永続的または耐久的に格納されることを保証するには、ソフトウェアに対する更なる課題が課される嫌いがある場合がある。一つには、プロセッサ(例えば、プロセッサ102)は、ストア命令、スキャター命令等に関連付けられたデータが永続性メモリの途中で一時的に格納され得る中間の様々な揮発性マイクロアーキテクチャ構造体またはコンポーネントを有し得る。そのような揮発性構造体またはコンポーネントの例としては、1または複数のコヒーレンシキャッシュ(例えば、キャッシュ110、112)、プロセッサストアバッファ、ライトバックバッファ、フィルバッファ、アンコアおよび/または相互接続キューもしくはバッファ、メモリコントローラライトペンディングバッファ、メモリサイドキャッシュ等が挙げられるが、これらに限定されない。しかし、これらの構造体またはコンポーネントは揮発性であり、一般には電源障害、システムクラッシュ等の場合にはデータ内容を喪失する。一般に、ストア命令またはスキャター命令に関連付けられたデータは、永続性メモリまたは中間電源障害保護ストレージデバイス、あるいはバッファ内に実際に格納されるまで永続性、または耐久性がない。結果として、揮発性構造体またはコンポーネントのうちの1つにデータが格納される間に電源障害、システムクラッシュ等が生じると、データは、喪失する場合があり、所望の永続性または耐久性が実現されない。いくつかの実施形態において、本明細書に開示されるベクトルキャッシュラインライトバック命令は、データの永続性または耐久性を実現するのを支援するべく、任意の関連ダーティキャッシュラインをキャッシュコヒーレンシドメインから永続性メモリへとライトバックするのを支援するために用いられ得る。いくつかの実施形態において、更なる永続性コミット命令も任意選択で用いられ、ライトバックデータが永続的または耐久的に格納されることを保証するのに役立ち得る。あるいは、以下に更に説明されるように、ベクトルキャッシュラインライトバック命令は、任意選択でそのような永続コミット機能を組み込み得る。
図3は、ベクトルキャッシュラインライトバック命令320の実施形態を実行するように動作するプロセッサ302の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、または他のコンピュータにおいて用いられるタイプの汎用マイクロプロセッサまたは中央処理装置(CPU))であってもよい。あるいは、プロセッサは、専用プロセッサであってもよい。好適な専用プロセッサの例としては、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラ(例えば、マイクロコントローラ)が挙げられるが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれかを有し得、または異なるアーキテクチャの組み合わせを有し得る(例えば、異なるコアは、異なるアーキテクチャを有し得る)。
動作中に、プロセッサ302は、ベクトルキャッシュラインライトバック命令320を受信し得る。例えば、命令は、バスまたは他の相互接続を介して1もしくは複数のメモリおよび/またはストレージデバイス324から受信され得る。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、もしくは他の命令、またはプロセッサの命令セットの制御信号を表し得る。いくつかの実施形態において、ベクトルキャッシュラインライトバック命令は、複数のパックドメモリインデックスを有するソースパックドメモリインデックスオペランド348を、(例えば、1もしくは複数のフィールドまたはビットのセットによって)明示的に指定し、または別の方法で示し得る(例えば、暗黙的に示す)。一例として、命令は、ソースパックドメモリインデックスオペランドの指定フィールドまたはパックドデータレジスタ346のパックドデータレジスタを指定するビットのセット、あるいは他の格納位置を有してもよく、これはソースパックドメモリインデックスを格納するために用いられる。あるいは、ソースパックドメモリインデックスオペランドを格納するために用いられるパックドデータレジスタまたは他の格納位置は、任意選択で命令に対して暗黙的(例えば、命令のオペコードに対して暗黙的)であってもよい。
プロセッサは、デコードユニットまたはデコーダ336を含む。デコードユニットは、ベクトルキャッシュラインライトバック命令を受信してデコードし得る。デコードユニットは、1または複数の比較的低水準の命令または制御信号(例えば、1または複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令または制御信号等)を出力し得、これらは、比較的高水準のベクトルキャッシュラインライトバック命令を反映し、表し、および/またはこれから派生する。いくつかの実施形態において、デコードユニットは、命令を受信する1または複数の入力構造体(例えば、ポート、相互接続、インタフェース)と、命令を認識およびデコードするために入力構造体と結合された命令認識・デコードロジックと、低水準命令または制御信号を出力するために命令認識・デコードロジックと結合された1または複数の出力構造体(例えば、ポート、相互接続、インタフェース)とを含み得る。デコードユニットは、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、およびデコードユニットを実装するために用いられる他のメカニズムを含むが、これらに限定されない様々な異なるメカニズムを用いて実装され得る。
プロセッサ302は、パックドデータレジスタ346のセットも含む。いくつかの実施形態において、ソースパックドメモリインデックスオペランド348は、任意選択でパックドデータレジスタのセットにおけるパックドデータレジスタ内に格納され得る。あるいは、別の格納位置が任意選択でソースパックドメモリインデックスオペランドに用いられ得る。パックドデータレジスタの各々は、パックドデータ、ベクトルデータ、または単一命令多重データ(SIMD)のデータを格納するように動作するオンダイ格納位置を表し得る。パックドデータレジスタは、ソフトウェアおよび/またはプログラマに可視のアーキテクチャ的に可視な、またはアーキテクチャレジスタを表し得、および/またはオペランドを識別するためにプロセッサの命令セットの命令によって示されたレジスタである。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ(例えば、一時的レジスタ、リオーダバッファ、リタイアメントレジスタ等)と対比される。パックドデータレジスタは、好適な技術を用いて異なるマイクロアーキテクチャに異なる態様で実装され得、いずれの特定のタイプの設計にも限定されない。好適なタイプのレジスタの例としては、専用物理レジスタ、レジスタリネームを用いて動的に割り当てられた物理レジスタ、およびこれらの組み合わせが挙げられるが、これらに限定されない。
プロセッサは、1または複数のキャッシュレベルの1または複数のキャッシュ340も含み得る。これらのキャッシュは、キャッシュコヒーレンシドメインにあってもよい。1または複数の対応するキャッシュコントローラ342は、対応するキャッシュ340を制御するように動作し得、キャッシュコヒーレンシメカニズムまたはキャッシュコヒーレンシプロトコルを実装するのを支援するために用いられ得る。好適なキャッシュコヒーレンシプロトコルの例としては、MESI、MOSI、MOESI等が挙げられるが、これらに限定されない。MESIプロトコルは、4つの状態、すなわち、変更(M)、排他(E)、共有(S)、および無効(I)を含み、これらはMESIの2ビットで表される。MOSIプロトコルは、排他(E)状態に代えて所有(O)状態を使用する。MOESIプロトコルは、排他(E)状態および所有(O)状態の両方を使用する。任意選択で、プロセッサ302は、1または複数の他の任意選択のプロセッサ303、または他のエンティティと結合され得、これらは、やはり同一のキャッシュコヒーレンシドメイン内にある1または複数のキャッシュ311を有する。1または複数の任意選択の他のプロセッサ303、または他のエンティティは、バス、相互接続、または他の結合メカニズム354によってプロセッサ302と結合され得る。
プロセッサは、ベクトルキャッシュラインライト命令を実行または実装するように動作するキャッシュコヒーレンシシステム338も含む。キャッシュコヒーレンシシステムは、ベクトルキャッシュラインライトバックユニットもしくはベクトルキャッシュラインライトバックロジック、および/または実行ロジックともみなされ得る。キャッシュコヒーレンシシステムは、デコードユニット336の出力部およびパックドデータレジスタ346と結合される。キャッシュコヒーレンシシステムは、ベクトルキャッシュラインライトバック命令を表し、および/またはこれから派生した1または複数のデコードされ、または別の方法で変換された命令または制御信号を受信し得る。キャッシュコヒーレンシシステムは、ソースパックドメモリインデックスオペランド348も受信し得る。いくつかの実施形態において、キャッシュコヒーレンシシステムは、任意選択で例えば、メモリインデックスをメモリアドレスに変換するために用いられるべき情報を受信するべく、汎用レジスタのセット(図示せず)とも結合され得る。例として、メモリインデックスは、共通のスケールおよび共通のベースを用いてメモリアドレスに変換され得る(例えば、memory address=memory index*scale+base)。インデックスをアドレスに変換する他の態様も企図される。いくつかの実施形態において、キャッシュコヒーレンシシステムは、ベクトルキャッシュラインライトバック命令に応答して、および/またはこの結果として(例えば、命令からデコードされた1または複数の命令もしくは制御信号に応答して)、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを内部に格納したコヒーレンシドメインの任意のキャッシュにおける任意のダーティキャッシュラインを、1または複数のメモリ/ストレージデバイスにライトバックさせるように動作し得る。
いくつかの実施形態において、キャッシュコヒーレンシシステム338は、命令に応答して、ソースパックドメモリインデックスオペランド348のメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを内部に格納した、コヒーレンシドメインにおけるプロセッサ302の任意のキャッシュレベルにおける任意のキャッシュ340内の任意のダーティキャッシュラインのメモリ/ストレージデバイス324へのライトバック350を実行し得る。一態様において、ダーティキャッシュラインは、変更されたキャッシュコヒーレンシプロトコル状態にあるものであってもよい(例えば、キャッシュラインに格納された実際の値が大きさにおいて変化しないように、同一の値がそれ自体に再度書き込まれる場合でさえあり得る)。示されるように、いくつかの実施形態において、キャッシュコヒーレンシシステムは、メモリインデックスによって関連付けられたダーティキャッシュラインのライトバックを開始するための、1または複数のキャッシュコントローラ342、またはその各々の1または複数のキャッシュ340を含み得、および/またはこれを制御し得る。あるいは、プロセッサの他のユニットまたはロジックは、任意選択で特定のマイクロアーキテクチャに所望される通りにライトバックを開始し、および/または実行し得る。
示されるように、図示される実施形態において、ベクトルキャッシュラインライトバック命令は、潜在的には、ライトバックに、キャッシュからのデータをメモリサブシステムユニット314におけるストアバッファ348に格納させてもよく、命令は次に、キャッシュからのデータがメモリ/ストレージデバイス324に実際に格納される前に、完了してもよい。そのような実施形態において、メモリサブシステムユニットは、書き込み済みデータの後での読み出しをライトバッファからサービス提供する等の適切なメモリオーダリングルールが満たされることを保証するように動作し得、従って書き込みのこのポスティッド動作は、揮発性メモリへのアクセスには可視ではない。メモリ/ストレージデバイス(例えば、永続性メモリ)への書き込みが永続性メモリに実際に書き込まれる(例えば、永続性へのコミット)ことを保証することが望まれる永続性メモリ実装において、任意の揮発性バッファまたは他のマイクロアーキテクチャ構造体は、空になり得る。一態様において、永続性コミット命令は、任意選択で書き込みをコミットし、またはメモリサブシステム(例えば、メモリサブシステムユニット314)にキューイングされたデータを永続性メモリに格納するために用いられ得る。永続性コミット命令は、内部で受け取られたストアをメモリ/ストレージデバイスに適用し得る。あるいは、様々な他の実施形態において、ベクトルキャッシュラインライトバック命令は、ライトバックに、適切なメモリオーダリングルールが満たされることを保証することができる、プロセッサ内の他の位置またはコンポーネントに、または中間のバッテリ補助揮発性ストレージもしくはバッファに、またはシステムメモリまで、キャッシュからのデータを格納させ得る。すなわち、ベクトルキャッシュラインライトバック命令の様々な実施形態は、ダーティキャッシュラインを、メモリ/ストレージデバイス324に至る、またはいくつかの場合にメモリ/ストレージデバイス324における様々な異なる位置に、キャッシュからライトバックさせ得る。
いくつかの実施形態において、キャッシュコヒーレンシシステム338は、命令に応答して1または複数のキャッシュラインライトバック信号352をバス、相互接続、または他の結合メカニズム354にブロードキャストし、送信し、または別の方法で提供し得る。これらの信号は、同一のコヒーレンシドメイン内にある任意のキャッシュレベルの任意の他のプロセッサ303の任意の他のキャッシュ311、または他のコンポーネントにシグナリングし、メモリ/ストレージデバイス324(例えば、各メモリサブシステムユニット)に、ソースパックドメモリインデックスオペランド348のメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを内部に格納した任意のダーティキャッシュラインをライトバックするように動作し得る。
いくつかの実施形態において、信号352は、メモリアドレスが命令を実行するプロセッサ302のキャッシュ340内でキャッシュされているか否かに関係なくメモリアドレスに提供され得る。いくつかの実施形態において、信号352は、命令を実行するプロセッサ302のキャッシュ340内におけるキャッシュラインの状態に関係なくメモリアドレスに提供され得る。例えば、信号352は、キャッシュラインがキャッシュ340内で変更状態にあるか、または未変更状態にあるかに関係なく提供され得る。いくつかの実施形態において、信号352は、メモリアドレスがプロセッサ302のキャッシュ340内でキャッシュされているか否か、およびプロセッサ302のキャッシュ340内におけるキャッシュラインの状態の両方に関係なくメモリアドレスに提供され得る。示されるように、いくつかの実施形態において、キャッシュコヒーレンシシステムは、1または複数のキャッシュラインライトバック信号をバスまたは他の相互接続に送信し、または別の方法で提供するバスインタフェースユニット344内にロジックを含み得、および/またはバスインタフェースユニット344を制御し得る。あるいは、他のユニットまたはロジックが、信号352を特定の設計またはマイクロアーキテクチャ実装に所望のバスまたは他の相互接続に送信し、または別の方法で提供し得る。
ここで、その名称が暗示するように、ベクトルキャッシュラインライトバック命令は、スカラ命令ではなくベクトル命令であり、複数のメモリアドレスの(例えば、最大でベクトルの量までの)ライトバックをさせることができる。また、ベクトルキャッシュラインライトバック命令は、単一のスカラメモリインデックスのみをではなく、複数のメモリインデックスを有するソースパックドメモリインデックスオペランドを指定し、または別の方法で示す。いくつかの実施形態において、ソースパックドメモリインデックスオペランドは、パックドデータオペランド(例えば、汎用レジスタ)を格納するためには用いられないレジスタに代えて、パックドデータレジスタ内に格納され得る。典型的に、様々な実施形態において、ソースパックドメモリインデックスオペランドは、64ビット、128ビット、256ビット、512ビット、1024ビット、またはより大きい幅のオペランドであってもよく、少なくとも2個、4個、8個、16個、32個、または32個より多いメモリインデックスを有してもよい。いくつかの実施形態において、メモリインデックスは、32ビットのダブルワードまたは64ビットのクワッドワードのメモリインデックスであってもよいが、本発明の範囲はそのように限定されない。様々な実施形態において、メモリインデックスは、アドレス変換が有効にされた場合に、線形メモリアドレス、仮想メモリアドレス、または論理メモリアドレスに対応し得る。あるいは、他の実施形態において、メモリインデックスは、例えば、リアルモードにおける、および/またはアドレス変換が無効にされた場合の物理アドレスに対応し得る。いくつかの実施形態において、メモリアドレスは、バイトメモリ位置に対応し得るが、これは必須ではない。いくつかの実施形態において、メモリアドレスは、潜在的に/任意選択で連続しないメモリアドレスを表し得、および/または潜在的に/任意選択でメモリ/ストレージデバイスにおける非シーケンシャルなキャッシュライン内にあってもよい。
いくつかの実施形態において、キャッシュラインは、任意選択で(例えば、ダーティであるか、クリーンであるかを問わず)プロセッサキャッシュからフラッシュされ、および/または無効にされ得る。あるいは、他の実施形態において、キャッシュラインは、任意選択でプロセッサキャッシュ内に保持され、未変更状態に変更され得る。キャッシュラインをキャッシュに保持することは、(プロセッサロジックによってヒントとして処理され得る)性能の最適化を表し、その後のアクセスにおけるキャッシュミスの可能性を低減し得る。一態様において、プロセッサは、キャッシュラインをキャッシュ階層におけるキャッシュレベルに保持し得、いくつかの場合にはキャッシュ階層のラインを無効にし得る。キャッシュラインから1もしくは複数のメモリ、および/またはストレージデバイスへと変更データをライトバックすることのみを必要とするが、ラインが無効にされることを必要とせず、データへのその後のアクセスが予期される用途においては、性能の向上は、キャッシュラインをプロセッサキャッシュに保持することによって実現され得る。
ベクトルキャッシュラインライトバック命令の1つの考えられる利点は、ベクトル化を促進するのに役立ち得、および/または複数のライトバックオペレーションを実行するべく、コードがデータ処理のベクトルモードから抜けてデータ処理のスカラモードに入る必要性を回避するのに役立ち得る。例として、コードは、所与の数のデータ要素(例えば、ベクトルの量)を所与の数のメモリインデックスによって示された所与の数のメモリアドレスに格納する、スキャターまたは他のベクトルストア命令を用いてもよい。ベクトルキャッシュラインライトバック命令が利用可能でない場合、所与の数の別個のスカラキャッシュラインフラッシュまたは他のキャッシュラインライトバック命令が各々、所与の数のデータ要素の対応する異なる1つを別個または個々にライトバックするために必要とされ得る。このように、所与の数のデータ要素、および/またはスキャター命令のメモリインデックスに応じて、複数のスカラキャッシュラインライトバック命令から潜在的には多くの別個のスカラキャッシュラインライトバック命令が必要とされ得る。更に、パックドオペランド(例えば、先行するスキャター命令によって用いられたパックドメモリインデックスオペランド)から個々のメモリインデックスを抽出し、および/または(例えば、パックドデータレジスタから1または複数の汎用レジスタへと)抽出されたメモリインデックスを移動させるために、更なる命令が概して必要とされる。しかし、ベクトルキャッシュラインライトバック命令を含めることによって、ベクトルモードから脱する必要がない場合がある。むしろ、単一のベクトルキャッシュラインライトバック命令が単一命令の実行の範囲内で所与の数のデータ要素の各々をライトバックするために用いられ得る。更に、個々のメモリインデックスを抽出し、および/またはこれらをパックドデータレジスタから他のレジスタ(例えば、汎用レジスタ)へと移動させるための更なる命令の必要性がない場合がある。従って、ベクトルキャッシュラインライトバック命令は、実行する必要がある命令の総数を低減するのに役立ち得(例えば、コードにおける命令の量の肥大を低減するのに役立ち得る)、これにより性能の向上に役立つ傾向もあり得る。
ベクトルキャッシュラインライトバック命令の別の考えられる利点は、プログラミングおよび/またはコンパイルを簡略化するのを支援し得るということである。ベクトルキャッシュラインライトバック命令が利用可能でない場合、データ処理のベクトルモードから抜けてデータ処理のスカラモードに入り、および/または複数のスカラキャッシュラインフラッシュ命令または他のキャッシュラインライトバック命令を用いる必要性により、プログラミングおよびコンパイルを概して複雑なものにしやすい。命令の数が増加し、および/またはベクトルオペレーションおよびスカラオペレーションをインタリーブする必要がある場合、アルゴリズムを複雑なものにする嫌いがあり得る。スカラキャッシュラインライトバック命令を実行する場合、これをスキャター命令のパックドメモリインデックスと相関させるために煩雑な管理作業を伴う嫌いがあり得る。これは、プログラミングおよび/またはコンパイルの複雑性を増大させる嫌いがあり得る。複雑性の量は、プレディケートされ、またはマスクされたスキャター命令が他のデータ要素(例えば、マスクをかけられたデータ要素)をスキャターすることなく、データ要素のうちのいくつかのみ(例えば、非マスクデータ要素)を選択的にスキャターするために用いられる場合、更に増加し得る。この場合、プログラマまたはコンパイラは、別個または個々のスカラキャッシュラインフラッシュ命令を実行するべく、マスクされたスキャター命令のマスクを更に解釈する必要があり得る。また、これによって命令数の増加が結果として生じ得、潜在的には分岐の量も増加し、性能を低下させる嫌いがあり得る。
これらの欠点は、例えば、データが永続的になり得るように、データをキャッシュから永続性メモリにフラッシュし、または別の方法で書き込む量が増加することによって、特に永続性メモリを用いる実装において観察され得る。しかし、ベクトルキャッシュラインライトバック命令は、永続性メモリが用いられるか否かに関わらず有用であることが理解される。例えば、永続性メモリがプライマリストレージに用いられず、および/またはプロセッサによって直接にアドレス指定可能でない実装においてさえも、ベクトルキャッシュラインライトバック命令は、プロセッサキャッシュ内のデータを管理するのを支援するのに(例えば、キャッシュの効率性または使用率を向上させるのを支援するのに)有用である。1つの例示において、スレッドは、スパースデータ構造体におけるいくつかの値を計算するために数回反復し得る。最終的な値が計算されると、スレッドは、キャッシュ階層から値に関連付けられたキャッシュラインをエビクトする必要があり得る。これは、キャッシュを管理し、キャッシュの使用率または効率性を向上させるべく、または他の目的のために行われ得る。例えば、これは、他のより関連性があるデータにキャッシュを解放するように支援するために行われ得る。別の例として、これは、将来の変更(M)から無効(I)へのライトバックバーストおよび/または変更(M)から共有(S)へのライトバックバーストを回避するのにも役立ち得る。従って、ベクトルキャッシュラインライトバック命令は、永続性メモリを用いるか否かに関わらず、キャッシュ階層からキャッシュラインをフラッシュし、または別の方法でライトバックすることは有用である。これらは実現され得る、考えられる利点のうちのいくつかの例示に過ぎず、実施形態はこれらの利点の実現に限定されるものではないことが理解される。
キャッシュコヒーレンシシステム、キャッシュコントローラ、バスインタフェースユニット、および/またはプロセッサは、ベクトルキャッシュラインライトバック命令を実行し、および/またはベクトルキャッシュラインライトバック命令に応答し、および/またはベクトルキャッシュラインライトバック命令の結果として(例えば、ベクトルキャッシュラインライトバック命令からデコードされた1または複数の命令もしくは制御信号に応答して)結果を格納するように動作する特定または具体的なロジック(例えば、トランジスタ、集積回路、または潜在的にはファームウェアと組み合わされた他のハードウェア(例えば、不揮発性メモリ内に格納された命令)および/またはソフトウェア)を含み得る。
説明を不明瞭にするのを避けるべく、比較的簡単なプロセッサ302が示され、説明されている。しかし、プロセッサは、任意選択で他のプロセッサコンポーネントを含んでもよい。例えば、様々な異なる実施形態は、図9のいずれか、および/または図13〜図16のいずれかについて示され、説明されるコンポーネントの様々な異なる組み合わせおよび構成を含み得る。意図されるように動作することを可能にするべく、プロセッサのコンポーネントの全てが互いに結合され得る。
図4は、ベクトルキャッシュラインライトバック命令の実施形態を実行する方法460の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、または他のデジタルロジックデバイスによって実行され得る。いくつかの実施形態において、図4の方法は、図3のプロセッサによって、および/またはその内部で実行され得る。図3のプロセッサについて本明細書に説明されるコンポーネント、特徴、および任意選択の具体的な詳細は、任意選択で図4の方法にも適用される。あるいは、図4の方法は、類似もしくは異なるプロセッサまたは装置によって、および/またはその内部で実行され得る。更に、図3のプロセッサは、図4のものと同一であるか、類似するか、または異なる方法を実行し得る。
方法は、ブロック461においてベクトルキャッシュラインライトバック命令を受信する段階を備える。様々な態様において、命令は、プロセッサまたはその一部(例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニット等)において受信され得る。様々な態様において、命令は、オフプロセッサソースおよび/もしくはオフダイソース(例えば、メモリ、相互接続等)、またはオンプロセッサソースおよび/もしくはオンダイソース(例えば、命令キャッシュ、命令キュー等)から受信され得る。ベクトルキャッシュラインライトバック命令は、複数のメモリインデックスを有するソースパックドメモリインデックスオペランドを指定し、または別の方法で示し得る。
方法は、ブロック462においてベクトルキャッシュラインライトバック命令に応答して、コヒーレンシドメイン内の任意のキャッシュにおける、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを格納する任意のダーティキャッシュラインを1もしくは複数のメモリおよび/またはストレージデバイスにライトバックさせる段階を備える。いくつかの実施形態において、方法は、任意の関連キャッシュライン(例えば、ダーティでライトバックされたもの、ならびに未変更であるもの等)を無効にする段階も備え得る。いくつかの実施形態において、方法は、未変更状態にライトバックされたダーティキャッシュラインの状態を変更する段階も備え得る。
図5は、ベクトルキャッシュラインライトバック命令の実施形態に好適なソースパックドメモリインデックスオペランド548の例示的な実施形態のブロック図である。ソースパックドメモリインデックスオペランドは、N個のパックドメモリインデックスI1〜INを有する。様々な実施形態において、メモリインデックスの数(N)は、少なくとも2個、少なくとも4個、少なくとも8個、少なくとも16個、少なくとも32個、または32個より多くてもよい。様々な実施形態において、ソースパックドメモリインデックスオペランドの幅は、64ビット、128ビット、256ビット、512ビット、1024ビット、または1024ビットより多くてもよい。あるいは、これに代えてより大きいか、より小さいか、または全く異なる幅のオペランドが任意選択で用いられてもよい。様々な実施形態において、各メモリインデックスの幅は、16ビット、32ビット、または64ビットであってもよい。あるいは、これに代えてより大きいか、より小さいか、または全く異なる幅のメモリインデックスが任意選択で用いられてもよい。
図6は、ベクトルキャッシュラインライトバック命令の実施形態に好適なソースパックドメモリインデックスオペランド648、および対応するソースパックドデータオペレーションマスクオペランド668の例示的な実施形態のブロック図である。ソースパックドメモリインデックスオペランド648は、図5のソースパックドメモリインデックスオペランド548について上記したのと同一の特性および変形形態を有し得る。
ソースパックドデータオペレーションマスクオペランド668は、本明細書において単にオペレーションマスク、プレディケートマスク、またはマスクとも称され得る。マスクは、対応するオペレーション(例えば、対応するメモリアドレス関連ダーティキャッシュラインライトバックオペレーション)が実行されるべきか否かをマスクし、プレディケートし、または条件付きで制御するために用いられ得るプレディケートオペランドまたは条件付き制御オペランドを表し得る。いくつかの実施形態において、マスキングまたはプレディケーションは、メモリインデックス粒度当たりのものであってもよく、従って異なるメモリインデックスに対するオペレーションが別個に、および/または他とは独立してプレディケートされ、または条件付きで制御され得る。マスクは、プレディケート要素または条件付き制御要素を表し得る複数のマスク要素(M)を含み得る。一態様において、マスク要素(M)は、ソースパックドメモリインデックスオペランドの対応するメモリインデックス(I)を用いた1対1の対応関係の中に含まれ得る。示されるように、ソースパックドデータオペレーションマスクオペランド668は、N個の対応するマスク要素M1〜MNを有し得る。各マスク要素は、オペランド内の対応する位置、または相対位置におけるメモリインデックスのうちの異なる1つに対応し得る。例えば、M1はI1に対応し得、M2はI2に対応し得る等である。
いくつかの実施形態において、各マスク要素は、単一のマスクビットであってもよい。そのような場合に、マスクは、各メモリインデックスに対するビットを有し得る。各マスクビットまたは各要素の値により、対応するオペレーション(例えば、対応するメモリアドレス関連ダーティキャッシュラインライトバックオペレーション)が実行されるべきか否かを制御し得る。各マスクビットは、対応するメモリインデックスを用いてオペレーションが実行されることを可能にする第1の値を有し得、あるいは対応するメモリインデックスを用いてオペレーションが実行されることを可能にしない第2の異なる値を有し得る。1つの可能な従来方式によれば、2進数のゼロ(すなわち0)にクリアされたマスクビットは、実行されるべきでない、マスクをかけられた、またはプレディケートされたオペレーションを表し得るが、2進数の1(すなわち1)にセットされたマスクビットは、実行されるべき非マスクまたは非プレディケートオペレーションを表し得る。示された例において、マスクビット値は、左から右に0、1、1、0であるが、これは一例に過ぎない。この例によれば、メモリインデックスI1およびINを格納し、またはこれらによって関連付けられたキャッシュコヒーレンシドメインにおけるダーティキャッシュラインのライトバックがプレディケートされ、実行される必要はない。しかし、メモリインデックスI2およびI3を格納し、またはこれらによって関連付けられたキャッシュコヒーレンシドメインにおけるダーティキャッシュラインのライトバックはプレディケートされず、実行される必要がある。他の実施形態において、2またはそれより多いビットは、任意選択で各マスク要素(例えば、各マスク要素は各々の対応するメモリインデックスと同じビットの数を有し得る)に用いられ得、全てのビットまたは少なくとも1ビット(例えば、最上位ビットまたは最下位ビット)は、マスキングまたはプレディケーションに用いられ得る。
図7は、任意選択でマスクされたベクトルキャッシュラインライトバック命令の実施形態に応答して実行され得る任意選択でマスクされたベクトルキャッシュラインライトバックオペレーション770の実施形態を示すブロック図である。命令は、複数のパックドメモリインデックス(I)を有するソースパックドメモリインデックスオペランド748を指定し、または別の方法でこれを示し得る。図示において、ソースパックドメモリインデックスオペランドは、N個のメモリインデックスI1〜INを有する。ソースパックドメモリインデックスオペランドおよびメモリインデックスは、図5のソースパックドメモリインデックスオペランド548およびインデックスについて上記したのと同一の特性および変形形態を有し得る。図示するいくつかの例示的な実施形態において、ソースパックドメモリインデックスオペランドの幅は、64ビット、128ビット、256ビット、512ビット、または1024ビットであってもよく、各メモリインデックスの幅は、16ビット、32ビット、または64ビットであってもよいが、本発明の範囲はそのように限定されない。
いくつかの実施形態において、命令は、複数のマスク要素(M)を有する任意選択のソースパックドデータオペレーションマスクオペランド768も任意選択で指定し、または別の方法で示し得るが、これは必須ではない。命令の他の実施形態は、任意選択でそのようなマスクを示し、または用いる必要がない。図示において、マスクはN個のマスク要素M1〜MNを有する。各々の対応するメモリインデックスに1つのマスク要素が存在し得る。一態様において、対応するマスク要素およびメモリインデックスは、オペランド内の同じ相対位置に存在し得る。例えば、I1およびM1が対応し得、I2およびM2が対応し得る等である。マスク要素の数は、メモリインデックスの数が変わり得るのと全く同様に、変わる場合がある。マスクおよびマスク要素は、図6のマスク668およびマスク要素(M)について上記したのと同一の特性および変形形態を有し得る。1つの可能な従来方式によれば、図示に示されるように、2進数のゼロ(すなわち0)にクリアされたマスクビットは、実行される必要がないマスクをかけられたオペレーションを表し得るが、2進数の1(すなわち1)にセットされたマスクビットは、実行されるべき非マスクオペレーションを表し得る。示された例において、M1、M2、およびMNに対応するマスクビットまたはマスク要素は、対応するオペレーションが実行されるようにマスクされないが、M3に対応するマスクビットまたは要素は、対応するオペレーションが実行されないようにマスクをかけられる。
任意選択でマスクされたベクトルキャッシュラインライトバックオペレーションは、命令に応答して、および/または命令の結果として実行され得る。任意選択でマスクされたオペレーションは、(1または複数のキャッシュ740を含む)キャッシュコヒーレンシドメイン内にある任意のプロセッサまたは他のエンティティ内の任意のキャッシュレベルにおける任意のキャッシュ内で任意のダーティキャッシュライン(CL)用のメモリ/ストレージデバイス724へのキャッシュラインライトバック776を実行させ得る。任意のキャッシュは、任意選択のマスク768の対応する任意選択のマスク要素(M)のマスキングまたはプレディケーションに従って、ソースパックドメモリインデックスオペランド748内のメモリインデックス(I)によって示され、および/またはこれから派生した任意のメモリアドレスのデータをに格納し、または別の方法で任意のメモリアドレスに対応する。示された例において、メモリインデックスI1、I2、およびINは、対応するライトバックオペレーションが実行されるように、対応するマスク要素M1、M2、およびMNによってマスクされない。示されるように、任意のダーティキャッシュライン(CL)は、メモリインデックスI1、I2、およびINから示され、またはこれから派生したメモリ/ストレージデバイス724におけるメモリ位置にライトバックされ得る。逆に、この例においてメモリインデックスI3は、対応するライトバックオペレーションが実行されないように、対応するマスクをかけられたマスク要素M3によってマスクをかけられる。アスタリスク(*)によって示されるように、ダーティキャッシュラインは、メモリインデックスI3によって示されるメモリ位置にライトバックされるのではなく、このメモリ位置における最初のキャッシュラインは、依然として変更されない場合がある。
いくつかの実施形態において、最初に、ダーティキャッシュラインライトバック776は、命令に応答してメモリ/ストレージデバイス724まで行われない場合がある。むしろ、ライトバックは、最初に一時的に中間位置に対して行われ得る。示されるように、いくつかの実施形態において、中間位置は、プロセッサのメモリサブシステムユニットにおけるストアバッファ748であってもよい。参照775において示されるように、ストアバッファは、メモリインデックスI1、I2、およびINに対応するが、マスクをかけられているのでI3に対応しない任意のダーティキャッシュラインを一時的にバッファ処理し、または別の方法でこれを格納し得る。メモリサブシステムユニットは、適切なメモリオーダリングルールが満されることを保証するように動作し得る。あるいは、任意選択で、ライトバックは、いくつかの例を挙げれば、例えば、メモリ/ストレージデバイス724までの、中間電源障害セーフバッファに対する、中間のバッテリ補助中間位置に対する、または適切なメモリオーダリングルールが満されることを保証することができる別のコンポーネントまたはストレージのような他の位置に対するものであってもよい。次に、メモリ/ストレージデバイス724に対するストア778は、ライトバックを完了するための命令の実行外で実行され得る。
いくつかの実施形態において、参照771に示されるように、メモリインデックスによって示され、またはこれに対応するメモリアドレスのデータを格納する任意のダーティキャッシュラインをライトバックすることに加えて、これらのキャッシュラインは任意選択で、キャッシュラインが格納されたコヒーレンシドメインにおける任意のキャッシュ内で無効にされてもよい。これらのダーティキャッシュラインをライトバックするオペレーション770に加えて、これらのダーティキャッシュラインは、これらのキャッシュラインを同時または同期間に無効にすることもできる(例えば、キャッシュコヒーレンシプロトコル状態を無効に変更する)。これは、キャッシュコヒーレンシドメイン内の任意のキャッシュからこれらのキャッシュラインをフラッシュすることを表し得る。キャッシュ内の無効にしたデータは、速やかに他のデータと置き換えられ得る。ダーティキャッシュラインに加えて、メモリインデックスによって関連付けられた他のキャッシュライン(例えば、未変更のキャッシュライン)も無効にされ得る。
他の実施形態において、参照773において示されるように、メモリインデックスによって示されたメモリアドレスのデータを格納するダーティキャッシュラインをライトバックすることに加えて、これらのキャッシュラインは任意選択で、キャッシュラインが格納されたコヒーレンシドメインにおける任意のキャッシュ内に格納された状態で保持され、または保たれ得るが、これらのキャッシュラインのキャッシュコヒーレンシプロトコル状態は、未変更状態に変更され得る。これらのダーティキャッシュラインをライトバックするオペレーション770に加えて、これらのダーティキャッシュラインを、同時または同期間に未変更のキャッシュコヒーレンシプロトコル状態に変更することもできる。データをキャッシュに保持することにより、データがその次にキャッシュから再び読み出されて利用されることを可能にする。
他の実施形態において、命令は、任意選択でインデックス付きベクトルストアまたはスキャターオペレーションをベクトルキャッシュラインライトバックオペレーションと組み合わせてもよい。典型的には、メモリインデックスのセットに基づいて、スキャターオペレーションが最初に実行され、キャッシュコヒーレンシドメインにおけるキャッシュ内にデータ要素をスキャターまたは格納し得、次にベクトルキャッシュラインライトバックオペレーションが同じメモリインデックスを用いてキャッシュコヒーレンシドメインからメモリ/ストレージデバイスへとダーティキャッシュラインをライトバックし得る。
図8は、任意選択でマスクされたインデックス付きベクトルストアおよびキャッシュラインライトバック命令の実施形態に応答して実行され得る任意選択でマスクされたインデックス付きベクトルストアおよびキャッシュラインライトバックオペレーション880の実施形態を示すブロック図である。命令は、複数のパックドメモリインデックス(I)を有するソースパックドメモリインデックスオペランド848を指定し、または別の方法でこれを示し得る。図示において、ソースパックドメモリインデックスオペランドは、N個のメモリインデックスI1〜INを有する。ソースパックドメモリインデックスオペランドおよびメモリインデックスは、図5のソースパックドメモリインデックスオペランド548およびインデックスについて上記したのと同一の特性および変形形態を有し得る。図示するいくつかの例示的な実施形態において、ソースパックドメモリインデックスオペランドの幅は、64ビット、128ビット、256ビット、512ビット、または1024ビットであってもよく、各メモリインデックスの幅は、16ビット、32ビット、または64ビットであってもよいが、本発明の範囲はそのように限定されない。
命令は、複数のパックドデータ要素(B)を有するソースパックドデータ要素オペランド881も指定し、または別の方法でこれを示し得る。図示において、ソースパックドデータ要素オペランドは、N個のメモリインデックスB1〜BNを有する。各々の対応するメモリインデックスに1つのデータ要素が存在し得、データ要素の数は、メモリインデックスの数が変わり得るのと全く同様に変わり得る。図示するいくつかの例示的な実施形態において、データ要素は、32ビットの単精度浮動小数点データ要素または64ビットの倍精度浮動小数点データ要素であり得るが、本発明の範囲はそのように限定されない。データ要素のサイズまたは幅が対応するメモリインデックスのサイズまたは幅と同じにし、またはソースパックドデータ要素オペランドのサイズまたは幅がソースパックドメモリインデックスオペランドのサイズまたは幅と同じにするという要求はない。
いくつかの実施形態において、命令は、複数のマスク要素(M)を有する任意選択のソースパックドデータオペレーションマスクオペランド868も任意選択で指定し、または別の方法で示し得るが、これは必須ではない。命令の他の実施形態は、任意選択でそのようなマスクを用いる必要がない。図示において、マスクはN個のマスク要素M1〜MNを有する。各々の対応するメモリインデックスおよび/または各々の対応するデータ要素に1つのマスク要素が存在し得る。一態様において、対応するマスク要素、メモリインデックス、およびデータ要素は、オペランド内の同じ相対位置に存在し得る。例えば、I1、B1、およびM1が全て対応し得、I2、B2、およびM2が全て対応し得る等である。マスク要素の数は、メモリインデックスおよび/またはデータ要素の数が変わり得るのと全く同様に、変わる場合がある。マスクおよびマスク要素は、図6のマスク668およびマスク要素(M)について上記したのと同一の特性および変形形態を有し得る。1つの可能な従来方式によれば、図示に示されるように、2進数のゼロ(すなわち0)にクリアされたマスクビットは、実行される必要がないマスクをかけられたオペレーションを表し得るが、2進数の1(すなわち1)にセットされたマスクビットは、実行されるべき非マスクオペレーションを表し得る。示された例において、M1、M2、およびMNに対応するマスクビットまたはマスク要素は、対応するオペレーションが実行されるようにマスクされないが、M3に対応するマスクビットまたはマスク要素は、対応するオペレーションが実行されないようにマスクをかけられる。
任意選択でマスクされたインデックス付きベクトルストアおよびキャッシュラインライトバックオペレーションは、命令に応答して、および/または命令の結果として実行され得る。任意選択でマスクされたオペレーションは、878で任意選択のマスク868の対応する任意選択のマスク要素(M)のマスクまたはプレディケーションに従って、ソースパックドメモリインデックスオペランド848における対応するメモリインデックス(I)によって示された1もしくは複数のメモリおよび/またはストレージデバイス824におけるメモリ位置へと、データ要素(B)をソースパックドデータ要素オペランド881からスキャターし、書き込み、または格納し得る。いくつかの実施形態において、データ要素(B)は、メモリインデックス(I)の特定のフレキシブルな値に応じて、メモリ/ストレージデバイス824における任意選択による/潜在的には非連続的メモリ位置、および/または任意選択による/潜在的には非シーケンシャルなキャッシュラインにスキャターまたは格納され得る。例えば、例示に示されるように、データ要素B1は、メモリインデックスI1によって示されるメモリ位置に格納され得、データ要素B2は、メモリインデックスI2によって示されたメモリ位置に格納され得、データ要素BNは、メモリインデックスINによって示されたメモリ位置に格納され得る。逆に、この例において、オペレーションは、マスクをかけられたマスク要素M3によってデータ要素B3についてマスクをかけられる。アスタリスク(*)によって示されるように、データ要素B3は、このメモリ位置に格納されない場合があるが、このメモリ位置における初期値は、依然として変更されない場合がある。いくつかの実施形態において、データ要素(B)のメモリ/ストレージデバイスへの格納は、シーケンシャルに実行されてもよく、オペランドにわたって順序を付けられてもよい。例えば、最下位の非マスクデータ要素(例えばB1)が格納されてもよく、その後に、2番目に下位のデータ要素(例えばB2)が格納されてもよく、という具合に最上位の非マスクデータ要素(例えばBN)が格納されるにまで続く。
最初に、命令を実装するためのストア874は、メモリ/ストレージデバイス824まで完全には行われない場合があり、キャッシュコヒーレンシドメインにおける1または複数のキャッシュ840に一時的に行われ得る。任意選択でマスクされたオペレーションは、(1または複数のキャッシュ840を含む)キャッシュコヒーレンシドメインにおける任意のプロセッサまたは他のエンティティ内の任意のキャッシュレベルにおける任意のキャッシュ内の任意のダーティキャッシュラインのメモリ/ストレージデバイス824へと、キャッシュ840からキャッシュラインライトバック876を実行する段階も備え得、任意のダーティキャッシュラインは、任意選択のマスク868の対応する任意選択のマスク要素(M)のマスキングまたはプレディケーションに従って、ソースパックドメモリインデックスオペランド848内のメモリインデックス(I)によって示されたメモリアドレスに対応するデータを格納する。示されるように、いくつかの実施形態において、キャッシュラインライトバックは、命令に応答してメモリ/ストレージデバイスまで完全に実行されない場合がある。むしろ、いくつかの実施形態において、キャッシュラインライトバックは、メモリサブシステムユニットのストアバッファ848に対して実行され得、これにより適切なメモリオーダリングルールが満されることを保証することができる。最初に、後でメモリ/ストレージデバイス824に格納される前に、データ要素B1、B2、およびBNは、キャッシュ840からこれらのストアバッファ848へとライトバックされ得る。他の実施形態において、任意選択で、ライトバックは、いくつかの例を挙げれば、例えば、メモリ/ストレージデバイス824までの、中間電源障害セーフバッファに対する、中間のバッテリ補助中間位置に対する、または適切なメモリオーダリングルールが満されることを保証することができる別のコンポーネントもしくはストレージのような他の位置に対するものであってもよい。
いくつかの実施形態において、メモリインデックスによって示されたメモリアドレスに対応するデータを格納するダーティキャッシュラインをライトバックすることに加えて、これらのキャッシュラインは任意選択で、キャッシュラインが格納されたコヒーレンシドメインにおける任意のキャッシュ内で無効にされてもよい。例えば、これらのキャッシュラインのキャッシュコヒーレンシプロトコル状態は、無効状態に変更され得る。これは、キャッシュコヒーレンシドメイン内の任意のキャッシュからこれらのキャッシュラインをフラッシュすることを表し得る。参照882に示されるように、いくつかの実施形態において、オペレーションは、B1、B2、およびBNをキャッシュ840に格納し、B1、B2、およびBNを有する対応するキャッシュラインを同時または同期間に無効にし得る(例えば、キャッシュコヒーレンシプロトコル状態を無効に変更する)。このアプローチは、キャッシュを純粋にバイパスするものではないが、キャッシュを完全にバイパスする非一時的格納と全く同じ効果をキャッシュに対して有する傾向が一般にある。なぜなら、キャッシュ内の無効にしたデータは、速やかに他のデータと置き換えられ得るからである。
他の実施形態において、メモリインデックスによって示されたメモリアドレスに関するデータを格納するダーティキャッシュラインをライトバックすることに加えて、これらのキャッシュラインは任意選択で、キャッシュラインが格納されたコヒーレンシドメインにおける任意のキャッシュ内に格納された状態で保持され、または保たれ得るが、これらのキャッシュラインのキャッシュコヒーレンシプロトコル状態は、未変更状態に変更され得る。参照884に示されるように、いくつかの実施形態において、オペレーションは、B1、B2、およびBNをキャッシュ840に格納し、B1、B2、およびBNを有する対応するキャッシュラインのキャッシュコヒーレンシプロトコル状態を同時または同期間に未変更状態に変更し得る。データをキャッシュに保持することにより、データがその次にキャッシュから再び読み出されて利用されることを可能にする。
有利なことに、ベクトルキャッシュラインライトバックオペレーションとスキャターまたはインデックス付きベクトルストアオペレーションをそのように組み合わせることにより、プログラミングおよびコンパイルを簡略化するのに役立ち得る。後続の別個のベクトルキャッシュラインライトバック命令、または別個のスカラキャッシュラインフラッシュ命令のセットをスキャター命令にマッピングする必要はない場合がある。むしろ、単一の命令が両方のオペレーションを共生的にマージングし得、不正確なマッピングに起因するプログラミングエラーの可能性を低減する。これにより、実行される必要がある命令の全体的な数も減少させ得、性能を向上させるのに役立ち得る。
一態様において、そのような命令オペレーションは、ベクトルスキャターフラッシュ/ライトバックオペレーションによるマイクロアーキテクチャの最適化の機会を提供し得る。スキャターオペレーションを実行するプロセスにおいて、コアは、スキャターオペレーションがカバーする様々なキャッシュラインの排他的オーナシップを取得し得る。当該同一コアは、もう少し多いクロックサイクル用のそれらのキャッシュラインの排他的オーナシップを保持するための貪欲なヒューリスティックアルゴリズムを実装し得る。このように、スキャターフラッシュオペレーションが十分速やかに進行するし、一般にそうであると予期される場合、スキャターフラッシュオペレーションは、全体的ハンドシェイクを実行する必要はない。なぜなら、他のコアは、その場合、現在のコアが取得して数サイクルの間保持したオーナシップにより変更(M)状態、排他(E)状態、または共有(S)状態におけるそれらのラインを有することができないからである。このように、そのようなベクトルスキャターフラッシュ/ライトバックオペレーションの限界費用は、これらのオペレーションが影響を受けたキャッシュラインをエビクトするための全体的調整を必要としないので、無視できるものであるはずである。
特定のプロセッサは、命令がオリジナルのプログラムまたはコードにおいて現れるオリジナルのプログラム順序に対してアウトオブオーダ(OoO)に命令を実行することができる。OoO実行に加えて、ウィークオーダリング(weakly ordered)のメモリタイプは、投機的読み出し、ライトコンバイニング、およびライトコラプシング等の技術によってより高いプロセッサ性能を実現するために用いられ得る。そのような態様は、1または複数のメモリにおける位置がロードおよび/またはストアによってアクセスされる場合に、一定の課題を課す場合がある。データがウィークオーダリングされていることをデータの消費者が理解し、あるいは分かる程度は、アプリケーション間で異なり、このデータの作成者は知らない場合がある。典型的に、ストア命令の結果は、ストア命令を実行するプロセッサには直ちに可視になり得る(例えば、当該プロセッサキャッシュ内に格納され得る)が、同じシステム内の他のプロセッサまたは他のエンティティには直ちに可視にならない場合がある。同じシステム内の別のプロセッサは、同じメモリ位置(例えば、そのキャッシュのうちの1つ)に書き込むことができるが、これらのストアオペレーションの結果がメモリにコミットされるのにしばらくの時間が掛かり得る。キャッシュにより、両方のプロセッサにストアオペレーションが最初に実行されたように見え得る。
いくつかの実施形態において、1または複数のメモリアクセスフェンス命令は、ダーティキャッシュラインライトバックに対してメモリアクセスをシリアル化するのを支援するベクトルキャッシュラインライトバック命令の前および/または後に含まれ得る。1つの好適なタイプのフェンス命令は、ロードオペレーションおよびストアオペレーションの両方をシリアル化するように動作するフルメモリアクセスフェンス命令である。例えば、いくつかの実施形態において、フルメモリフェンス命令は、メモリフェンス命令の前に発行された全てのロード・フロム・メモリ命令およびストア・トゥー・メモリ命令に対してシリアル化オペレーションを実行するように動作し得る。このシリアル化オペレーションは、プログラム順序におけるメモリフェンス命令に先行する各ロード命令およびストア命令が、プログラム順序におけるメモリフェンス命令の後に続く任意のロード命令またはストア命令の前に、全面的に可視となることを保証し得る。別の好適なタイプのフェンス命令は、ストアオペレーションをシリアル化するように動作するストアフェンス命令である。例えば、いくつかの実施形態において、ストアフェンス命令は、ストアフェンス命令の前に発行された全てのストア・トゥー・メモリ命令に対してシリアル化オペレーションを実行するように動作し得る。このシリアル化オペレーションは、プログラム順序におけるストアフェンス命令に先行する各ストア命令が、ストアフェンス命令の後に続く任意のストア命令の前に、全面的に可視となることを保証し得る。そのようなメモリアクセスフェンス命令は、ウィークオーダリングされた結果を生成するルーチンと当該データを消費するルーチンとの間のメモリアクセスのオーダリングを保証するのに役立ち得る。
他の実施形態において、ベクトルキャッシュラインライトバック命令は、任意選択でメモリアクセスフェンス機能を組み込み、または統合し得る。例えば、いくつかの実施形態において、ベクトルキャッシュラインライトバック命令は、命令がストア命令/オペレーションをシリアル化することを可能にするストアフェンス機能または属性を組み込み、または統合し得る。いくつかの実施形態において、上記のようにダーティキャッシュラインをライトバックさせることに加えて、ベクトルキャッシュラインライトバック命令は、プロセッサに、ベクトルキャッシュラインライトバック命令の前に発行された全てのストア・トゥー・メモリ命令に対してシリアル化オペレーションも実行させ得る。このシリアル化オペレーションは、プログラム順序におけるベクトルキャッシュラインライトバック命令に先行する各ストア命令が、ベクトルキャッシュラインライトバック命令の後に続く任意のストア命令の前に、全面的に可視となることを保証し得る。あるいは、ベクトルキャッシュラインライトバック命令は、命令がロード命令/オペレーションおよびストア命令/オペレーションの両方をシリアル化することを可能にするフルメモリアクセスフェンス機能または属性を組み込み、または統合し得る。いくつかの実施形態において、上記のようにダーティキャッシュラインをライトバックさせることに加えて、ベクトルキャッシュラインライトバック命令は、プロセッサに、ベクトルキャッシュラインライトバック命令の前に発行された全てのロード・フロム・メモリ命令およびストア・トゥー・メモリ命令に対してシリアル化オペレーションも実行させ得る。このシリアル化オペレーションは、プログラム順序におけるベクトルキャッシュラインライトバック命令に先行する各ロード命令およびストア命令が、プログラム順序におけるベクトルキャッシュラインライトバック命令の後に続く任意のロード命令またはストア命令の前に、全面的に可視となることを保証し得る。これらのフェンス属性または機能は、例えば、キャッシュ内で示されたキャッシュラインを無効にするもの、キャッシュ内で示されるが未変更状態のキャッシュラインを保持するもの、およびスキャターオペレーションを更に組み込むもの等、本明細書に開示されるベクトルキャッシュラインライトバック命令の様々な異なる実施形態と共に用いられ得る。そのようなフェンス属性または機能は、ウィークオーダリングされた結果を生成するルーチンと当該データを消費するルーチンとの間のメモリアクセスのオーダリングを保証するのに役立ち得る。更に、そのようなフェンス属性または機能は、命令の数を低減し(例えば、別個のフェンス命令をなくす)、および/または不正確なメモリアクセスのオーダリングによって生じるプログラミングエラーの可能性を低減するのに役立ち得る。
永続性メモリを任意選択で用いる実装において、永続性メモリへの格納は、ストアデータが永続性メモリ、または中間電源障害保護バッファもしくはストレージに到達するまでは概して永続的でない。ベクトルキャッシュラインライトバック命令は、データが揮発性キャッシュからライトバックされることを保証するのに役立ち得るが、データは、実際にそのようなデスティネーションに到着していない場合がある。例えば、上記のように、命令はいくつかの実施形態において、ライトバックデータがメモリサブシステムユニットライトバッファに到達し次第、完了し得る。これは、永続性メモリへの書き込みが確実に永続性にコミットされることを保証するべく、そのような揮発性ライトバッファまたはプロセッサの他の非永続性構造体からのデータのライトバックが永続性または耐久性に至るまで完了していることを、ソフトウェアが保証する必要が更にあり得ることを暗に示す。
いくつかの実施形態において、別個の永続性コミット命令は、任意選択で本明細書に開示されるベクトルキャッシュラインライトバック命令と共に用いられ得る。永続性コミット命令は、永続性メモリへのストアをコミットするように動作し得る。一態様において、永続性コミット命令は、永続性メモリレンジに対する特定のストア・トゥー・メモリ命令がメモリに受け付けられたストアを適用することによって永続的(電源障害に対して保護される)なものとするように動作し得る。一態様において、永続性メモリレンジへのストアがメモリに受け付けられた後に永続性コミット命令が実行される場合、永続性コミット命令が全面的に可視となったときに、ストアは永続的になることを保証され得る。
他の実施形態において、ストアまたはフルメモリアクセスフェンス属性または機能を統合し、または組み込むベクトルキャッシュラインライトバック命令は、任意選択で永続性コミット属性または機能を更に統合し、または組み込み得る。いくつかの実施形態において、上記のようにダーティキャッシュラインをライトバックさせることに加え、かつ上記のメモリアクセスフェンスに加えて、ベクトルキャッシュラインライトバック命令は、プロセッサに、ダーティキャッシュラインのライトバックを含むストアも永続性メモリにコミットさせ得る。
そのようなベクトルキャッシュラインライトバック命令は、永続性メモリレンジに対するダーティキャッシュラインライトバックオペレーションを含む特定のストア・トゥー・メモリ命令を、永続性メモリに受け付けられたストアを適用することによって永続的(電源障害に対して保護される)なものとするように動作し得る。一態様において、永続性コミット属性または機能を用いるベクトルキャッシュラインライトバック命令は、メモリに受け付けられた永続性メモリレンジに対する任意のダーティキャッシュラインライトバック、ならびにメモリに受け付けられた永続性メモリレンジに対する任意の先行するストアが、ベクトルキャッシュラインライトバック命令が全面的に可視となった場合に永続性となることを保証させ得る。いくつかの実施形態において、そのようなベクトルキャッシュラインライトバック命令の後に続く命令は、ベクトルキャッシュラインライトバック命令のライトバックが完了してパワーセーフ状態になったときのみ、完了することが可能とされ得る。
図9は、本発明の実施形態を実装するのに好適なプロセッサ902の詳細な例示的実施形態のブロック図である。プロセッサは、ベクトルキャッシュラインライトバック命令の実施形態を実行することができる少なくとも1つのコア903を含む。コアは、プログラムフローにおける分岐を予測する分岐予測ユニット986を含む。分岐予測ユニットは、命令プリフェッチユニット987と結合される。命令プリフェッチユニットは、(例えば、メモリユニット993を介して)ベクトルキャッシュラインライトバック命令を含む命令をメモリからプリフェッチし、または別の方法で受信し得る。レベル1(L1)命令キャッシュ910‐1は、命令プリフェッチユニットに結合される。L1命令キャッシュは、ベクトルキャッシュラインライトバック命令を含む命令をキャッシュし、または別の方法で格納し得る。プロセッサは、命令のためのデータ要素および/またはオペランドを含むデータをキャッシュし、または別の方法で格納するL1データキャッシュ910‐2も含む。プロセッサは、任意選択でレベル2(L2)キャッシュ912も含む。L2キャッシュは、コアの専用であってもよく、またはコアおよび1または複数の他の任意選択のコア(図示せず)によって共有されてもよい。L2キャッシュは、ベクトルキャッシュラインライトバック命令を含むデータおよび命令を格納し得る。命令フェッチユニット988は、L1命令キャッシュ、L2キャッシュ、およびデコードユニット936と結合される。命令フェッチユニットは、(例えば、L1命令キャッシュまたはL2キャッシュから)ベクトルキャッシュラインライトバック命令を含む命令をフェッチし、または別の方法で受信し得、命令をデコードユニットに提供し得る。デコードユニットは、本明細書の他の箇所で説明されるように、ベクトルキャッシュラインライトバック命令を含む命令をデコードし得る。
プロセッサは、1または複数のレジスタファイルユニット991も含む。レジスタファイルユニットは、例えば、パックドデータレジスタ、汎用レジスタ、状態またはフラグレジスタ、制御または構成レジスタ等の様々な異なるタイプのレジスタを含み得る。コアが任意選択でアウトオブオーダ(OOO)実行をサポートする実施形態において、コアは、リソースを割り当て、レジスタ(例えば、ベクトルキャッシュラインライトバック命令に関連付けられたパックドデータレジスタ)に対してレジスタリネームを実行するためにレジスタファイルユニットに結合されたレジスタリネーム/アロケータユニット989も任意選択で含み得る。更に、OOO実行において、コアは、デコードユニット、リネーム/アロケータユニットと結合された1または複数のスケジューラユニット990と、1または複数の実行ユニット938A/Bとを任意選択で含み得る。スケジューラユニットは、実行ユニットにおいて実行するためにベクトルキャッシュラインライトバック命令からデコードされた1または複数のオペレーションを含むデコード済み命令に関連付けられた1または複数のオペレーションをスケジューリングし得る。コアは、例えば、整数実行ユニット、浮動小数点実行ユニット、ベクトル実行ユニット、1または複数のメモリアクセスユニット938B等の複数の異なるタイプの実行ユニットを任意選択で有し得る。OOO実行のために、コアは、実行ユニット、レジスタファイルユニット、およびリネーム/アロケータユニットと結合されたリタイアメントまたはコミットユニット992を任意選択で含み得る。リタイアメントまたはコミットユニットは、命令をリタイアまたはコミットするように動作し得る。
これは、好適なプロセッサの1つの例示に過ぎないことを理解されたい。代替的な実施形態において、プロセッサは、より少ないか、またはより多くのコンポーネントを含み得る。任意選択で含まれ得る他のコンポーネントの例は、1または複数の命令および/またはデータトランスレーションルックアサイドバッファ(TLB)、1または複数のリオーダバッファ(ROB)、リザベーションステーション、アドレス生成ユニット、デバッグユニット、性能モニタユニット、電力管理ユニットである。更に、プロセッサは、複数のコア(例えば、少なくとも2個、少なくとも4個、少なくとも8個、少なくとも30個等)を任意選択で有し得る。いくつかの場合、コアの全てが同一のコンポーネントを有し、コア980と同じ命令セットをサポートし得る。あるいは、コアのうちの少なくともいくつかは、異なるコンポーネントを有し得、および/または異なる命令セットをサポートし得る。
命令セットは、1または複数の命令フォーマットを含む。所与の命令フォーマットは、とりわけ、実行されるオペレーション(オペコード)および当該オペレーションが実行されるオペランドを指定する様々なフィールド(ビットの数、ビットの位置)を定義する。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義により更に分類される。例えば、所与の命令フォーマットの命令テンプレートは、異なるサブセットの命令フォーマットのフィールドを有するものと定義され(含まれるフィールドは、通常は同じ順序であるが、少なくともいくつかは、より少ないフィールドが含まれているので、異なるビット位置を有する)、および/または異なる解釈をされる所与のフィールドを有するものと定義され得る。従って、ISAの各命令は、所与の命令フォーマットを用いて(および定義される場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つで)表され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーション、およびソース2)を選択するオペランドフィールドを含む命令フォーマットを有する。命令ストリームにおけるこのADD命令が生じることにより、特定のオペランドを選択するオペランドフィールドに特定の内容を有する。Advanced Vector Extensions(AVX)(AVX1およびAVX2)と呼ばれ、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットが、リリースおよび/または公開されている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developers Manual,October 2011およびIntel(登録商標)Advanced Vector Extensions Programming Reference,June 2011を参照されたい)。
例示的な命令フォーマット
本明細書に説明される命令の実施形態は、異なるフォーマットで実施され得る。更に、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行され得るが、詳述されるものに限定されない。
VEX命令フォーマット
VEXエンコードは、命令が3つ以上のオペランドを有することを可能にし、SIMDベクトルレジスタが128ビットより長くなることを可能にする。VEXプレフィックスを用いることにより、3つの(またはそれより多い)オペランドの構文を提供する。例えば、以前の2オペランド命令は、A=A+Bのようなオペレーションを実行し、これによりソースオペランドに上書きする。VEXプレフィックスを用いると、オペランドがA=B+Cのような非破壊オペレーションを実行することを可能にする。
図10Aは、VEXプレフィックス1002、リアルオペコードフィールド1030、Mod R/Mバイト1040、SIBバイト1050、変位フィールド1062、およびIMM8 1072を含む例示的なAVX命令フォーマットを示す。図10Bは、図10Aのどのフィールドがフルオペコードフィールド1074およびベースオペレーションフィールド1042を構成するかを示す。図10Cは、図10Aのどのフィールドがレジスタインデックスフィールド1044を構成するかを示す。
VEXプレフィックス(バイト0〜2)1002は、3バイト形式でエンコードされる。第1のバイトは、フォーマットフィールド1040(VEXバイト0、ビット[7:0])であり、明示的なC4バイト値(C4命令フォーマットを区別するために用いられる一意な値)を含む。第2〜第3のバイト(VEXバイト1〜2)は、特定の機能を提供するいくつかのビットフィールドを含む。具体的には、REXフィールド1005(VEXバイト1、ビット[7−5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]− R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)、およびVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)からなる。命令の他のフィールドは、当技術分野で既知であるレジスタインデックスの下位3ビット(rrr、xxx、およびbbb)をエンコードし、従ってRrrr、Xxxx、およびBbbbは、VEX.R、VEX.X、およびVEX.Bを加えることによって形成され得る。オペコードマップフィールド1015(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙に示される先頭オペコードバイトをエンコードする内容を含む。Wフィールド1064(VEXバイト2、ビット[7]−W)は、VEX.Wの表記で表され、命令に応じて異なる機能を提供する。VEX.vvvv1020(VEXバイト2、ビット[6:3]−vvvv)の役割は、以下を含み得る。1)VEX.vvvvは、反転された(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを有する命令について有効である。2)VEX.vvvvは、特定のベクトルシフトに対する1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または、3)VEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1011bを含むはずである。VEX.L1068のサイズフィールド(VEXバイト2、ビット[2]−L)=0である場合、128ビットのベクトルを示す。VEX.L=1である場合、256ビットのベクトルを示す。プレフィックスエンコードフィールド1025(VEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドの更なるビットを提供する。
リアルオペコードフィールド1030(バイト3)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド1040(バイト4)は、MODフィールド1042(ビット[7−6])、Regフィールド1044(ビット[5−3])、およびR/Mフィールド1046(ビット[2−0])を含む。Regフィールド1044の役割は、以下を含み得る。すなわち、ティネーションレジスタオペランドもしくはソースレジスタオペランド(Rrrrのrrr)をエンコードすること、またはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするためにも用いられないことである。R/Mフィールド1046の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
スケール、インデックス、ベース(SIB)。スケールフィールド1050(バイト5)の内容は、SS1052(ビット[7−6])を含み、SS1052は、メモリアドレス生成に用いられる。SIB.xxx1054(ビット[5−3])およびSIB.bbb1056(ビット[2−0])の内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。変位フィールド1062および即値フィールド(IMM8)1072は、アドレスデータを含む。
一般的ベクトル向け命令フォーマット
ベクトル向け命令フォーマットは、ベクトル命令に好適な命令フォーマットである。(例えば、ベクトルオペレーションに固有の一定のフィールドが存在する)。ベクトルおよびスカラオペレーションの両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトルオペレーションのみを用いる。
図11A〜図11Bは、本発明の実施形態による一般的ベクトル向け命令フォーマットおよびその命令テンプレートを示すブロック図である。図11Aは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスA命令テンプレートを示すブロック図である。図11Bは、本発明の実施形態による、一般的ベクトル向け命令フォーマット、およびそのクラスB命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートは、一般的ベクトル向け命令フォーマット1100に対して定義され、これらの両方は、非メモリアクセス1105の命令テンプレートおよびメモリアクセス1120の命令テンプレートを含む。ベクトル向け命令フォーマットの文脈における一般的という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(従って、64バイトのベクトルは、16ダブルワードサイズの要素、または代替的に8クワッドワードサイズの要素のいずれかからなる)、16ビット(2バイト)または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートする本発明の実施形態が説明されるが、代替的な実施形態は、より多い、より少ない、または異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有するより多い、より少ない、および/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートし得る。
図11AにおけるクラスA命令テンプレートは、1)非メモリアクセス1105の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプオペレーション1110の命令テンプレート、および非メモリアクセス、データ変換タイプオペレーション1115の命令テンプレート、ならびに2)メモリアクセス1120の命令テンプレート中に示されるメモリアクセス、一時的1125の命令テンプレート、およびメモリアクセス、非一時的1130の命令テンプレートを含む。図11BのクラスB命令テンプレートは、1)非メモリアクセス1105の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1112の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1117の命令テンプレート、ならびに2)メモリアクセス1120の命令テンプレート中に示されるメモリアクセス、ライトマスク制御1127の命令テンプレートを含む。
一般的ベクトル向け命令フォーマット1100は、図11A〜図11Bにおいて示される順序で以下に列挙される、次のフィールドを含む。
フォーマットフィールド1140。このフィールドにおける特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマット、従って、命令ストリーム中のベクトル向け命令フォーマットにおける命令の発生を一意に識別する。従って、このフィールドは、一般的ベクトル向け命令フォーマットのみを有する命令セットに必要とされないという意味で任意選択である。
ベースオペレーションフィールド1142。その内容は、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1144。その内容は、レジスタ内であれ、メモリ内であれ、直接に、またはアドレス生成により、ソースオペランドおよびデスティネーションオペランドの位置を指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態においては、Nは、最大で3つのソースおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、より多いかまたはより少ないソースおよびデスティネーションレジスタをサポートし得る(例えば、最大で2つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で3つのソースをサポートし得、この場合、これらのソースのうちの1つは、デスティネーションとしても機能し、最大で2つのソースおよび1つのデスティネーションをサポートし得る)。
修飾子フィールド1146。その内容は、一般的ベクトル命令フォーマット中におけるメモリアクセスを指定する命令の発生とメモリアクセスを指定しない命令の発生とを、すなわち、非メモリアクセス1105の命令テンプレートとメモリアクセス1120の命令テンプレートを区別する。メモリアクセスオペレーションは、メモリ階層を読み出し、および/またはこれに書き込むが(いくつかの場合には、レジスタにおける値を用いて、ソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセスオペレーションは、これを行わない(例えば、ソースおよびデスティネーションは、レジスタである)。また、一実施形態において、このフィールドは、3つの異なる態様を選択し、メモリアドレス計算を実行するが、代替的な実施形態は、より多い、より少ない、または異なる態様をサポートし、メモリアドレス計算を実行し得る。
追加オペレーションフィールド1150。その内容は、ベースオペレーションに加えて、種々様々な異なるオペレーションのうちのどれが実行されるかを区別する。このフィールドは、コンテキストに固有である。本発明の一実施形態において、このフィールドは、クラスフィールド1168、アルファフィールド1152、およびベータフィールド1154に分割される。追加オペレーションフィールド1150は、オペレーションの共通グループが2、3、または4つの命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド1160。その内容は、メモリアドレス生成のための(例えば、2scale*index+baseを用いるアドレス生成のための)インデックスフィールドの内容のスケーリングを可能にする。
変位フィールド1162A。その内容は、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成に)用いられる。
変位係数フィールド1162B(変位係数フィールド1162Bの直ぐ上に変位フィールド1162Aを並置することにより、一方または他方が使用されることを示すことに留意されたい)。その内容は、アドレス生成の一部として用いられる。変位係数フィールド1162Bは、メモリアクセス(N)のサイズに対して調整される変位係数を指定する。Nは、(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のための)メモリアクセスにおけるバイトの数である。冗長下位ビットは、無視され、従って、変位係数フィールドの内容は、有効なアドレスを計算するときに使用される最終的変位を生成するべく、メモリオペランドの合計サイズ(N)で乗算される。Nの値は、フルオペコードフィールド1174(本明細書において後述される)およびデータ操作フィールド1154Cに基づいて、ランタイムでプロセッサハードウェアにより決定される。変位フィールド1162Aおよび変位係数フィールド1162Bは、非メモリアクセス1105の命令テンプレートに用いられず、および/または異なる実施形態が1つのみまたは2つのうちいずれも実装しない場合があるという意味で任意選択である。
データ要素幅フィールド1164。その内容は、(いくつかの実施形態において全ての命令に対して、他の実施形態において命令のうちいくつかのみに対して)いくつかのデータ要素幅のうちのどれが用いられるかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされ、および/またはオペコードのいくつかの態様を用いて、データ要素幅がサポートされる場合には必要とされないという意味で任意選択である。
ライトマスクフィールド1170。その内容は、データ要素位置ベースで、デスティネーションベクトルオペランドにおける当該データ要素位置がベースオペレーションおよび追加オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージング・ライトマスキングをサポートするが、クラスB命令テンプレートは、マージングおよびゼロ書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保持する。対照的に、ゼロ書き込みする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベースオペレーションおよび追加オペレーションにより指定された)任意のオペレーションの実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長を制御する能力である(すなわち、要素のスパンは、最初のものから最後のものに変更される)。しかし、変更される要素が連続している必要はない。従って、ライトマスクフィールド1170は、ロード、ストア、演算、論理等を含む部分的ベクトルオペレーションを可能にする。本発明の実施形態は、ライトマスクフィールド1170の内容が、用いられるべきライトマスクを含むいくつかのライトマスクレジスタのうちの1つを選択する(従って、ライトマスクフィールド1170の内容が実行されるべき当該マスキングを間接的に識別する)ものとして説明されているが、代替的な実施形態はこれに代えて、または更に、マスクライトフィールド1170の内容が実行されるべきマスキングを直接に指定することを可能にする。
即値フィールド1172。その内容は、即値の指定を可能にする。このフィールドは、即値をサポートしない一般的ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド1168。その内容は、命令の異なるクラスを区別する。図11A〜図11Bを参照すると、このフィールドの内容は、クラスA命令またはクラスB命令を選択する。図11A〜図11Bにおいて、角が丸い四角形は、特定の値がフィールド内に存在することを示すべく用いられる(例えば、図11Aおよび図11Bにおけるクラスフィールド1168のクラスA1168AおよびクラスB1168Bの各々)。
クラスAの命令テンプレート
クラスAの非メモリアクセス1105の命令テンプレートの場合に、アルファフィールド1152は、RSフィールド1152Aとして解釈され、その内容は、異なる追加オペレーションタイプのうちのどれが実行されるかを区別するが(例えば、ラウンド1152A.1およびデータ変換1152A.2は、各々、非メモリアクセス、ラウンドタイプオペレーション1110、および非メモリアクセス、データ変換タイプオペレーション1115の命令テンプレートに対して指定される)、ベータフィールド1154は、指定されたタイプのオペレーションのうちいずれが実行されるかを区別する。非メモリアクセス1105の命令テンプレートにおいて、スケールフィールド1160、変位フィールド1162A、および変位スケールフィールド1162Bは、存在しない。
非メモリアクセス命令テンプレート‐フルラウンド制御タイプオペレーション 非メモリアクセスのフルラウンド制御タイプオペレーション1110の命令テンプレートにおいて、ベータフィールド1154は、ラウンド制御フィールド1154Aとして解釈され、その内容は、静的ラウンドを提供する。本発明の説明される実施形態において、ラウンド制御フィールド1154Aは、抑圧全浮動小数点例外(SAE)フィールド1156およびラウンドオペレーション制御フィールド1158を含み、代替的な実施形態は、これら両方のコンセプトをサポートおよびエンコードして同一のフィールドとすることができ、またはこれらのコンセプト/フィールドのうち一方または他方のみを有し得る(例えば、ラウンドオペレーション制御フィールド1158のみを有し得る)。
SAEフィールド1156。その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド1156の内容が、抑圧が有効にされたことを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない。
ラウンドオペレーション制御フィールド1158。その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1158は、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1150の内容は、当該レジスタの値を上書きする。
非メモリアクセス命令テンプレート‐データ変換タイプオペレーション 非メモリアクセスのデータ変換タイプオペレーション1115の命令テンプレートにおいて、ベータフィールド1154は、データ変換フィールド1154Bとして解釈され、その内容は、いくつかのデータ変換のうちのどれが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1120の命令テンプレートの場合、アルファフィールド1152は、エビクションヒントフィールド1152Bとして解釈され、その内容は、エビクションヒントのうちのどれが用いられるかを区別するが(図11Aにおいて、一時的1152B.1および非一時的1152B.2は、各々、メモリアクセス、一時的1125の命令テンプレート、およびメモリアクセス、非一時的1130の命令テンプレートに対して指定される)、ベータフィールド1154は、データ操作フィールド1154Cとして解釈され、その内容は、いくつかのデータ操作オペレーション(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス1120の命令テンプレートは、スケールフィールド1160を含み、変位フィールド1162Aまたは変位スケールフィールド1162Bを任意選択で含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合のように、ベクトルメモリ命令は、データ要素の様式で、メモリから/にデータを転送し、実際に転送される要素は、ライトマスクとして選択されるベクトルマスクの内容により規定される。
メモリアクセス命令テンプレート‐一時的 一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で一時的データを実装してもよい。
メモリアクセス命令テンプレート‐非一時的 非一時的データは、レベル1のキャッシュにおけるキャッシュから利益を得るのに十分なほど速やかに再利用される可能性が低いデータであり、エビクションの優先権を与えられるべきである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、異なる態様で非一時的データを実装してもよい。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1152は、ライトマスク制御(Z)フィールド1152Cとして解釈され、その内容は、ライトマスクフィールド1170により制御されるライトマスキングがマージングであるべきか、またはゼロ書き込みであるべきかを区別する。
クラスBの非メモリアクセス1105の命令テンプレートの場合、ベータフィールド1154の一部は、RLフィールド1157Aとして解釈され、その内容は、異なる追加オペレーションタイプのどれが実行されるかを区別するが(例えば、ラウンド1157A.1およびベクトル長(VSIZE)1157A.2は各々、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1112の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1117の命令テンプレートに対して指定される)、ベータフィールド1154の残りは、指定されたタイプのどのオペレーションが実行されるかを区別する。非メモリアクセス1105の命令テンプレートにおいて、スケールフィールド1160、変位フィールド1162A、および変位スケールフィールド1162Bは、存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプオペレーション1110の命令テンプレートにおいて、ベータフィールド1154の残りは、ラウンドオペレーションフィールド1159Aとして解釈され、例外イベント報告は、無効にされる(所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外ハンドラも立ち上げない)。
ラウンドオペレーション制御フィールド1159A。ちょうどラウンドオペレーション制御フィールド1158のように、その内容は、ラウンドオペレーション(例えば、ラウンドアップ、ラウンドダウン、ゼロへのラウンド、および近似値へのラウンド)のグループのうちのどれが実行されるべきかを区別する。このように、ラウンドオペレーション制御フィールド1159Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の一実施形態において、ラウンドオペレーション制御フィールド1150の内容は、そのレジスタの値を上書きする。
非メモリアクセス、ライトマスク制御、VSIZEタイプオペレーション1117の命令テンプレートにおいて、ベータフィールド1154の残りは、ベクトル長フィールド1159Bとして解釈され、その内容は、いくつかのデータベクトル長のうちのどれが実行されるかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス1120の命令テンプレートの場合、ベータフィールド1154の一部は、ブロードキャストフィールド1157Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるべきか否かを区別するが、ベータフィールド1154の残りは、ベクトル長フィールド1159Bとして解釈される。メモリアクセス1120の命令テンプレートは、スケールフィールド1160を含み、変位フィールド1162Aまたは変位スケールフィールド1162Bを任意選択で含む。
一般的ベクトル向け命令フォーマット1100に関連して、フォーマットフィールド1140、ベースオペレーションフィールド1142、およびデータ要素幅フィールド1164を含む、フルオペコードフィールド1174が示される。一実施形態として、フルオペコードフィールド1174がこれらのフィールドの全てを含むものが示されているが、これら全てをサポートしない実施形態において、フルオペコードフィールド1174は、これらのフィールド全てより少ないものを含む。フルオペコードフィールド1174は、オペレーションコード(オペコード)を提供する。
追加オペレーションフィールド1150、データ要素幅フィールド1164、およびライトマスクフィールド1170は、一般的ベクトル向け命令フォーマットにおける命令ベースで、これらの機能が指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドを組み合わせることで、マスクが異なるデータ要素幅に基づいて適用されることを可能にするように、型付き命令を生成する。
クラスAおよびクラスB内に見出される様々な命令テンプレートは、異なる状況において有益である。本発明のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートし得る。例えば、汎用演算用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートし得、主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用のコアは、クラスAのみをサポートし得、両方用のコアは、両方をサポートし得る(勿論、両方のクラスの全てのテンプレートおよび命令ではないが、両方のクラスのテンプレートおよび命令のいくつかのミックスを有するコアは、本発明の範囲内である)。また、シングルプロセッサは、複数のコアを含み得、これらの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックスおよび/またはサイエンティフィック演算用のグラフィックスコアのうちの1つは、クラスAのみをサポートし得るが、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用演算用のアウトオブオーダ実行およびレジスタリネームを用いる高性能汎用コアであり得る。別個のグラフィックスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする、もう1つの汎用インオーダまたはアウトオブオーダのコアを含み得る。勿論、本発明の異なる実施形態において、あるクラスの機能は、他のクラスにおいても実装され得る。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを用いて書かれた代替的なルーチンを有し、現在、コードを実行しているプロセッサによりサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式を含む、種々様々な実行可能な形式にされる(例えば、実行時コンパイルまたは静的コンパイル)。
例示的な特定ベクトル向け命令フォーマット
図12A〜図12Dは、本発明の実施形態による例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図12A〜図12Dは、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのいくつかに対する値を指定するという意味で具体的な特定ベクトル向け命令フォーマット1200を示す。特定ベクトル向け命令フォーマット1200は、x86命令セットを拡張するために用いられ得、従ってフィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えば、AVX)において用いられるものと類似するか、または同じである。このフォーマットは、拡張された既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を保つ。図12A〜図12Dがフィールドにマッピングされる図11A〜図11Bのフィールドが示される。
本発明の実施形態は、例示目的で一般的ベクトル向け命令フォーマット1100の文脈において、特定ベクトル向け命令フォーマット1200を参照して説明されるが、本発明は、特許請求される場合を除き、特定ベクトル向け命令フォーマット1200に限定されないことを理解されたい。例えば、一般的ベクトル向け命令フォーマット1100は、様々なフィールドのために考えられる様々なサイズを企図するが、特定ベクトル向け命令フォーマット1200は、特定サイズのフィールドを有するものとして示される。具体的な例として、データ要素幅フィールド1164は、特定ベクトル向け命令フォーマット1200における1つのビットフィールドとして示されるが、本発明は、そのようには限定されない(すなわち、一般的ベクトル向け命令フォーマット1100は、他のサイズのデータ要素幅フィールド1164を企図する)。
一般的ベクトル向け命令フォーマット1100は、図12Aにおいて示される順序で以下に列挙される、次のフィールドを含む。
EVEXプレフィックス(バイト0〜3)1202。4バイト形式でエンコードされる。
フォーマットフィールド1140(EVEXバイト0、ビット[7:0])。最初のバイト(EVEXバイト0)は、フォーマットフィールド1140であり、0x62を含む(本発明の一実施形態において、ベクトル向け命令フォーマットを区別するべく用いられる一意な値)。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の能力を提供するいくつかのビットフィールドを含む。
REXフィールド1205(EVEXバイト1、ビット[7−5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、およびEVEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、およびEVEX.Bのビットフィールドは、対応するVEXビットフィールドと同一の機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は、1011Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のレジスタインデックスの下位の3つのビット(rrr、xxx、およびbbb)をエンコードし、従って、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成され得る。
REX'フィールド1110。これはREX'フィールド1110の第1の部分であり、拡張された32個のレジスタセットの上位の16個または下位の16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の一実施形態において、このビットは、以下に示される他のものと共に、(周知のx86の32ビットモードで)BOUND命令から区別するべく、ビット反転フォーマットで格納される。BOUND命令のリアルオペコードバイトは62であるが、MOD R/Mフィールド(下記)にはMODフィールドにおける11の値をを受け付けない。本発明の代替的な実施形態は、これおよび以下に示される他のビットを反転フォーマットで格納しない。1の値は、下位の16個のレジスタをエンコードするべく用いられる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドの他のRRRを組み合わせることにより形成される。
オペコードマップフィールド1215(EVEXバイト1、ビット[3:0]−mmmm)。その内容は、暗黙に示される先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
データ要素幅フィールド1164(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットのデータ要素または64ビットのデータ要素のいずれか)を定義するべく用いられる。
EVEX.vvvv1220(EVEXバイト2、ビット[6:3]−vvvv)。EVEX.vvvvの役割は、以下を含み得る。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2またはそれより多いソースオペランドを用いる命令に対して有効である。2)EVEX.vvvvは、一定の複数のベクトルシフトに対して1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または3)EVEX.vvvvは、いずれのオペランドもエンコードせず、フィールドは予約され、1011bを含むはずである。従って、EVEX.vvvvフィールド1220は、反転(1の補数)形式で格納された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32個のレジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。
EVEX.U1168クラスフィールド(EVEXバイト2、ビット[2]−U)。EVEX.U=0である場合、クラスAまたはEVEX.U0を示す。EVEX.U=1である場合、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド1225(EVEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドのために追加ビットを提供する。EVEXプレフィックスフォーマットでレガシSSE命令のためのサポートを提供することに加えて、これは、SIMDプレフィックスを圧縮するという利益も有する(EVEXプレフィックスは、SIMDプレフィックスを表すバイトを必要とするのではなく、2ビットのみを必要とする)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でSIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするべく、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドへとエンコードされ、(PLAが変更なしにレガシフォーマットおよびこれらのレガシ命令のEVEXフォーマットの両方を実行し得るように)ランタイム時にデコーダのPLAに提供される前にレガシSIMDプレフィックスへと拡張される。より新しい命令は、EVEXプレフィックスエンコードフィールドの内容をオペコード拡張として直接に用い得るが、ある実施形態は、整合のために同様に拡張されるが、これらのレガシSIMDプレフィックスにより指定される異なる意味を可能にする。代替的な実施形態は、2ビットのSIMDプレフィックスエンコードをサポートするようにPLAを再設計し得、従って拡張を必要としない。
アルファフィールド1152(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御、およびEVEX.Nとしても知られる。αでも示される)。上記のように、このフィールドは、コンテキストに固有である。
ベータフィールド1154(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる。βββでも示される)。上記のように、このフィールドは、コンテキストに固有である。
REX'フィールド1110。これは、REX'フィールドの残りであり、拡張された32個のレジスタセットの上位の16個または下位の16個をエンコードするべく用いられ得るEVEX.V'ビットフィールドのいずれかである(EVEXバイト3、ビット[3]−V')。このビットは、ビット反転フォーマットで格納される。1の値は、下位の16個のレジスタをエンコードするべく用いられる。換言すると、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることにより形成される。
ライトマスクフィールド1170(EVEXバイト3、ビット[2:0]−kkk)。その内容は、上記のようにライトマスクレジスタにおけるレジスタのインデックスを指定する。本発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令のために非ライトマスクが用いられることを暗に示す、特別な動作を有する(これは、全ての1に対するハードワイヤされたライトマスクの使用、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な態様で実装され得る)。
リアルオペコードフィールド1230(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールド内に指定される。
MOD R/Mフィールド1240(バイト5)は、MODフィールド1242、Regフィールド1244、およびR/Mフィールド1246を含む。上記のように、MODフィールド1242の内容は、メモリアクセスオペレーションおよび非メモリアクセスオペレーションを区別する。Regフィールド1244の役割は、2つの状況に要約され得る。すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし、またはオペコード拡張として扱われ、任意の命令オペランドをエンコードするためには用いられない。R/Mフィールド1246の役割は、メモリアドレスを参照する命令オペランドをエンコードし、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)。上記のように、スケールフィールド1150の内容は、メモリアドレス生成に用いられる。SIB.xxx1254およびSIB.bbb1256。これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
変位フィールド1162A(バイト7〜10)。MODフィールド1242が10を含む場合、バイト7〜10は、変位フィールド1162Aであり、これはレガシ32ビット変位(disp32)と同様に機能し、バイト粒度で機能する。
変位係数フィールド1162B(バイト7)。MODフィールド1242が01を含む場合、バイト7は、変位係数フィールド1162Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は、符号拡張されるので、−128〜117バイトのオフセットのみをアドレス指定し得る。64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値である−128、−64、0、および64のみに設定され得る8ビットを用いる。多くの場合に、より広いレンジが必要とされるので、disp32が用いられる。しかし、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド1162Bは、disp8の再解釈である。変位係数フィールド1162Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)で乗算される変位係数フィールドの内容により決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長(単一バイトだが、はるかに広いレンジの変位に用いられる)を小さくする。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという前提に基づく。換言すると、変位係数フィールド1162Bは、レガシx86命令セットの8ビット変位に置き換わる。従って、disp8がdisp8*Nにオーバーロードされることのみを例外として、変位係数フィールド1162Bは、x86命令セットの8ビット変位と同じ態様でエンコードされる(従って、ModRM/SIBエンコードルールに変更はない)。換言すると、エンコードルールまたはエンコードの長さに変更はないが、(バイト的アドレスオフセットを得るべく、メモリオペランドのサイズにより変位を調節する必要がある)ハードウェアによる変位値の解釈のみには変更がある。
即値フィールド1172は、上記のように動作する。
フルオペコードフィールド
図12Bは、本発明の一実施形態による、フルオペコードフィールド1174を構成する特定ベクトル向け命令フォーマット1200のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1174は、フォーマットフィールド1140、ベースオペレーションフィールド1142、およびデータ要素幅(W)フィールド1164を含む。ベースオペレーションフィールド1142は、プレフィックスエンコードフィールド1225、オペコードマップフィールド1215、およびリアルオペコードフィールド1230を含む。
レジスタインデックスフィールド
図12Cは、本発明の一実施形態による、レジスタインデックスフィールド1144を構成する特定ベクトル向け命令フォーマット1200のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1144は、REXフィールド1205、REX'フィールド1210、MODR/M.regフィールド1244、MODR/M.r/mフィールド1246、VVVVフィールド1220、xxxフィールド1254、およびbbbフィールド1256を含む。
追加オペレーションフィールド
図12Dは、本発明の一実施形態による、追加オペレーションフィールド1150を構成する特定ベクトル向け命令フォーマット1200のフィールドを示すブロック図である。クラス(U)フィールド1168が0を含む場合、EVEX.U0(クラスA1168A)を意味する。1を含む場合、EVEX.U1(クラスB1168B)を意味する。U=0、かつMODフィールド1242が11を含む場合(非メモリアクセスオペレーションを意味する)、アルファフィールド1152(EVEXバイト3、ビット[7]−EH)は、RSフィールド1152Aとして解釈される。RSフィールド1152Aが1(ラウンド1152A.1)を含む場合、ベータフィールド1154(EVEXバイト3、ビット[6:4]‐SSS)は、ラウンド制御フィールド1154Aとして解釈される。ラウンド制御フィールド1154Aは、1ビットのSAEフィールド1156および2ビットのラウンドオペレーションフィールド1158を含む。RSフィールド1152Aが0(データ変換1152A.2)を含む場合、ベータフィールド1154(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド1154Bとして解釈される。U=0であり、かつMODフィールド1242が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、アルファフィールド1152(EVEXバイト3、ビット[7]‐EH)は、エビクションヒント(EH)フィールド1152Bとして解釈され、ベータフィールド1154(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ操作フィールド1154Cとして解釈される。
U=1である場合、アルファフィールド1152(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド1152Cとして解釈される。U=1であり、かつMODフィールド1242が11を含む場合(非メモリアクセスオペレーションを意味する)、ベータフィールド1154(EVEXバイト3、ビット[4]−S0)の一部は、RLフィールド1157Aとして解釈される。1(ラウンド1157A.1)を含む場合、ベータフィールド1154(EVEXバイト3、ビット[6−5]‐S2−1)の残りは、ラウンドオペレーションフィールド1159Aとして解釈されるが、RLフィールド1157Aが0(VSIZE1157.A2)を含む場合、ベータフィールド1154(EVEXバイト3、ビット[6‐5]‐S2−1)の残りは、ベクトル長フィールド1159B(EVEXバイト3、ビット[6‐5]‐L1−0)として解釈される。U=1であり、MODフィールド1242が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド1154(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1159B(EVEXバイト3、ビット[6‐5]‐L1−0)およびブロードキャストフィールド1157B(EVEXバイト3、ビット[4]‐B)として解釈される。
例示的なレジスタアーキテクチャ
図13は、本発明の一実施形態による、レジスタアーキテクチャ1300のブロック図である。示される実施形態において、512ビット幅の32個のベクトルレジスタ1310が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの下位の256ビットは、レジスタymm0〜15上にオーバーレイされる下位の16個のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表に示されるように、特定ベクトル向け命令フォーマット1200は、これらのオーバーレイされたレジスタファイルで動作する。
換言すると、ベクトル長フィールド1159Bは、最大長、および1もしくは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。ベクトル長フィールド1159Bを用いない命令テンプレートは、最大ベクトル長で動作する。更に、一実施形態において、特定ベクトル向け命令フォーマット1200のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データおよびパックドもしくはスカラ整数データで動作する。スカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素位置で実行されるオペレーションである。より上位のデータ要素位置は、命令前と同じままであるか、または実施形態に応じてゼロにされる。
ライトマスクレジスタ1315。示される実施形態において、8つのライトマスクレジスタ(k0〜k7)が存在し、各々は64ビットのサイズである。代替的な実施形態において、ライトマスクレジスタ1315は16ビットのサイズである。上記のように、本発明の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして使用され得ない。通常、k0を示すエンコードがライトマスクに用いられる場合、これは、0xFFFFのハードワイヤされたライトマスクを選択し、その命令に対するライトマスキングを実質的に無効にする。
汎用レジスタ1325。示される実施形態において、メモリオペランドをアドレス指定する既存のx86のアドレス指定モードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名称により参照される。
スカラ浮動小数点スタックレジスタファイル(x87スタック)1345上に、MMXパックド整数フラットレジスタファイル1350がエイリアスされ、示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビット浮動小数点データにスカラ浮動小数点オペレーションを実行するべく用いられる8つの要素のスタックである。MMXレジスタは、64ビットパックド整数データにオペレーションを実行すると共に、MMXレジスタとXMMレジスタとの間で実行されるいくつかのオペレーションのためのオペランドを保持するべく用いられる。
本発明の代替的な実施形態は、より広いか、またはより狭いレジスタを用い得る。更に、本発明の代替的な実施形態は、より多いか、より少ないか、または異なるレジスタファイルおよびレジスタを用い得る。
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる態様で異なる目的のために異なるプロセッサに実装され得る。例えば、そのようなコアの実装は、1)汎用演算用の汎用インオーダコア、2)汎用演算用の高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/またはサイエンティフィック(スループット)演算用の専用コアを含み得る。異なるプロセッサの実装は、1)汎用演算用の1もしくは複数の汎用インオーダコア、および/または汎用演算用の1もしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の1もしくは複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャは、1)CPUの別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック等の専用ロジック、または専用コアとして言及される)、および4)同一のダイ上に、説明されたCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサとして言及される)、上記のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。例示的なコアアーキテクチャが次に説明され、その次に例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
例示的なコアアーキテクチャ
インオーダコアおよびアウトオブオーダコアのブロック図
図14Aは、本発明の実施形態による、例示的なインオーダパイプラインおよび例示的なレジスタリネーム、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図14Bは、本発明の実施形態によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーム、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図14A〜図14Bにおける実線ボックスは、インオーダパイプラインおよびインオーダコアを示すが、破線ボックスの任意選択の追加は、レジスタリネーム、アウトオブオーダ発行/実行のパイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであることを考慮して、アウトオブオーダの態様が説明される。
図14Aにおいて、プロセッサパイプライン1400は、フェッチステージ1402、長さデコードステージ1404、デコードステージ1406、アロケーションステージ1408、リネームステージ1410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1412、レジスタ読み出し/メモリ読み出しステージ1414、実行ステージ1416、ライトバック/メモリライトステージ1418、例外処理ステージ1422、およびコミットステージ1424を含む。
図14Bは、実行エンジンユニット1450に結合されたフロントエンドユニット1430を含むプロセッサコア1490を示し、これら両方はメモリユニット1470に結合されている。コア1490は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであり得る。なおも別の選択肢として、コア1490は、例えば、ネットワークコアもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアであってもよい。
フロントエンドユニット1430は、命令キャッシュユニット1434に結合された分岐予測ユニット1432を含み、命令キャッシュユニット1434は、命令トランスレーションルックアサイドバッファ(TLB)1436に結合され、TLB1436は、命令フェッチユニット1438に結合され、命令フェッチユニット1438は、デコードユニット1440に結合される。デコードユニット1440(もしくはデコーダ)は、命令をデコードして、出力として1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、もしくは別の方法で元の命令を反映し、もしくは元の命令から派生した他の制御信号を生成し得る。デコードユニット1440は、様々な異なるメカニズムを用いて実装され得る。好適なメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が挙げられるが、これらに限定されない。一実施形態において、コア1490は、特定のマクロ命令用のマイクロコードを(例えば、デコードユニット1440内、またはそうでなければフロントエンドユニット1430内に)格納するマイクロコードROMまたは他のメディアを含む。デコードユニット1440は、実行エンジンユニット1450におけるリネーム/アロケータユニット1452に結合される。
実行エンジンユニット1450は、リタイアメントユニット1454に結合されたリネーム/アロケータユニット1452と、1または複数のスケジューラユニット1456のセットとを含む。スケジューラユニット1456は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1456は、物理レジスタファイルユニット1458に結合される。物理レジスタファイルユニット1458の各々は、1または複数の物理レジスタファイルを表し、これらの異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等のような1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット1458は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用い、フューチャーファイル、履歴バッファ、およびリタイアメントレジスタファイルを用い、レジスタマップおよびレジスタのプールを用いる等して)レジスタリネームおよびアウトオブオーダ実行が実装され得る様々な態様を示すべく、物理レジスタファイルユニット1458は、リタイアメントユニット1454と重ね合わされている。リタイアメントユニット1454および物理レジスタファイルユニット1458は、実行クラスタ1460に結合される。実行クラスタ1460は、1または複数の実行ユニット1462のセット、および1または複数のメモリアクセスユニット1464のセットを含む。実行ユニット1462は、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行し得る。いくつかの実施形態は、特定の関数または関数のセットに専用のいくつかの実行ユニットを含み得るが、他の実施形態は、1つの実行ユニットのみ、または全てがあらゆる関数を実行する複数の実行ユニットを含み得る。スケジューラユニット1456、物理レジスタファイルユニット1458、および実行クラスタ1460は、場合によっては複数のものとして示される。なぜなら、ある実施形態は、一定のタイプのデータ/オペレーションのための別個のパイプライン(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合に、このパイプラインの実行クラスタのみがメモリアクセスユニット1464を有する一定の実施形態が実装される)スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインを生成するからである。また、別個のパイプラインが用いられる場合に、これらのパイプラインのうちの1または複数は、アウトオブオーダ発行/実行であり、残りはインオーダであり得ることを理解されたい。
メモリアクセスユニット1464のセットは、メモリユニット1470に結合される。メモリユニット1470は、データキャッシュユニット1474に結合されたデータTLBユニット1472を含み、データキャッシュユニット1474は、レベル2(L2)キャッシュユニット1476に結合される。例示的な一実施形態において、メモリアクセスユニット1464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、これらの各々は、メモリユニット1470内のデータTLBユニット1472に結合される。命令キャッシュユニット1434は、メモリユニット1470内のレベル2(L2)キャッシュユニット1476に更に結合される。L2キャッシュユニット1476は、1つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーム、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1400を以下のように実装し得る。1)命令フェッチ1438は、フェッチステージ1402および長さデコードステージ1404を実行する。2)デコードユニット1440はデコードステージ1406を実行する。3)リネーム/アロケータユニット1452は、アロケーションステージ1408およびリネームステージ1410を実行する。4)スケジューラユニット1456は、スケジューリングステージ1412を実行する。5)物理レジスタファイルユニット1458およびメモリユニット1470は、レジスタ読み出し/メモリ読み出しステージ1414を実行し、実行クラスタ1460は、実行ステージ1416を実行する。6)メモリユニット1470および物理レジスタファイルユニット1458は、ライトバック/メモリライトステージ1418を実行する。7)様々なユニットは、例外処理ステージ1422に関与してもよい。8)リタイアメントユニット1454および物理レジスタファイルユニット1458は、コミットステージ1424を実行する。
コア1490は、本明細書において説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEON等の任意選択の追加拡張を伴う)をサポートし得る。一実施形態において、コア1490は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするためのロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられるオペレーションが、パックドデータを用いて実行されることを可能にする。
コアは、(オペレーションまたはスレッドの2またはそれより多い並列セットを実行する)マルチスレッディングをサポートし得、時分割マルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドの各々のための論理コアを、単一の物理コアが提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよびデコードを行い、その後にインテル(登録商標)ハイパースレッディング技術等の同時マルチスレッディングを行う)を含む様々な態様でこれを実行し得ることを理解されたい。
レジスタリネームは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネームは、インオーダアーキテクチャにおいて用いられ得ることを理解されたい。プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット1434/1474、ならびに共有L2キャッシュユニット1476も含むが、代替的な実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等の命令およびデータの両方に対する単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュ、ならびにコアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的インオーダコアアーキテクチャ
図15A〜図15Bは、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示し、このコアは、チップにおける(同じタイプの他のコアおよび/または異なるタイプを含む)いくつかの論理ブロックのうちの1つである。アプリケーションに応じて、論理ブロックは、ある固定機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックを用いる高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図15Aは、本発明の実施形態によるシングルプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク1502への接続に加え、レベル2(L2キャッシュ1504のローカルサブセットを有する。一実施形態において、命令デコーダ1500は、パックドデータ命令セット拡張を用いるx86命令セットをサポートする。L1キャッシュ1506は、スカラユニットおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において(設計を簡略化するべく)、スカラユニット1508およびベクトルユニット1510は、別個のレジスタセット(各々、スカラレジスタ1512およびベクトルレジスタ1514)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次にレベル1(L1)キャッシュ1506からリードバックされる。本発明の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用い、またはライトバックおよびリードバックされることなく、2つのレジスタファイルの間で、データが転送されることを可能にする通信パスを含む)を用い得る。
L2キャッシュ1504のローカルサブセットは、プロセッサコア毎に1つずつ、別個のローカルサブセットに分割される全体的なL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1504の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、そのL2キャッシュサブセット1504に格納され、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並列して迅速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット1504に格納され、必要であれば他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ、および他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にする。各リングのデータパスは、1方向毎に1012ビット幅である。
図15Bは、本発明の実施形態による図15Aのプロセッサコアの一部の拡大図である。図15Bは、L1キャッシュ1504のL1データキャッシュ1506A部分、ならびにベクトルユニット1510およびベクトルレジスタ1514に関する更なる詳細を含む。具体的には、ベクトルユニット1510は、16ワイドのベクトル処理ユニット(VPU)(16ワイドのALU1528を参照)であり、これは整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1または複数を実行する。VPUは、スウィズルユニット1520によるレジスタ入力のスウィズル、数値変換ユニット1522A〜Bによる数値変換、およびメモリ入力時のレプリケーションユニット1524によるレプリケーションをサポートする。ライトマスクレジスタ1526は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
統合メモリコントローラおよびグラフィックスを用いるプロセッサ
図16は、本発明の実施形態による、2つ以上のコアを有し得、統合メモリコントローラを有し得、統合グラフィックスを有し得るプロセッサ1600のブロック図である。図16の実線ボックスは、シングルコア1602A、システムエージェント1610、1または複数のバスコントローラユニット1616のセットを有するプロセッサ1600を示すが、破線ボックスの任意選択の追加は、複数のコア1602A〜N、システムエージェントユニット1610における1または複数の統合メモリコントローラユニット1614のセット、および専用ロジック1608を有する代替的なプロセッサ1600を示す。
従って、プロセッサ1600の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジック(1または複数のコアを含み得る)である専用ロジック1608、および1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)であるコア1602A〜Nを用いるCPU、2)主にグラフィックスおよび/またはサイエンティフィック(スループット)用の多数の専用コアであるコア1602A〜Nを有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア1602A〜Nを用いるコプロセッサを含み得る。従って、プロセッサ1600は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、(30またはそれより多いコアを含む)高スループット多集積コア(MIC)コプロセッサ、エンベデッドプロセッサ等のような汎用プロセッサ、コプロセッサもしくは専用プロセッサであってもよい。プロセッサは、1または複数のチップ上に実装され得る。プロセッサ1600は、1または複数の基板の一部であり得、および/または例えば、BiCMOS、CMOS、またはNMOS等のいくつかの処理技術のいずれかを用いてこれらの基板上に実装され得る。
メモリ階層は、コア内の1または複数のレベルのキャッシュ、1セットまたは1もしくは複数の共有キャッシュユニット1606、および統合メモリコントローラユニット1614のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット1606のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。一実施形態において、リングベースの相互接続ユニット1612は、統合グラフィックスロジック1608、共有キャッシュユニット1606のセット、およびシステムエージェントユニット1610/統合メモリコントローラユニット1614を相互接続し、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技術を用い得る。一実施形態において、コヒーレンシは、1または複数のキャッシュユニット1606とコア1602A〜Nとの間で保持される。
いくつかの実施形態において、コア1602A〜Nのうちの1または複数は、マルチスレッディングすることができる。システムエージェント1610は、コア1602A〜Nを調整および動作させるそれらのコンポーネントを含む。システムエージェントユニット1610は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア1602A〜Nおよび統合グラフィックスロジック1608の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1または複数の外部接続ディスプレイを駆動するためのものである。
コア1602A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア1602A〜Nのうちの2またはそれより多くのものは、同じ命令セットを実行することができる場合があるが、他のものは、当該命令セットまたは異なる命令セットのサブセットのみを実行することができる場合がある。
例示的なコンピュータアーキテクチャ
図17〜図21は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、情報携帯端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスの技術分野で既知の他のシステム設計および構成も好適である。一般に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
ここで図17を参照すると、本発明の一実施形態によるシステム1700のブロック図が示される。システム1700は、1または複数のプロセッサ1710、1715を含み得、これらは、コントローラハブ1720に結合される。一実施形態において、コントローラハブ1720は、グラフィックスメモリコントローラハブ(GMCH)1790および入出力ハブ(IOH)1750(別個のチップ上にあり得る)を含む。GMCH1790は、メモリコントローラおよびグラフィックスコントローラを含み、これらにメモリ1740およびコプロセッサ1745が結合される。IOH1750は、入出力(I/O)デバイス1760をGMCH1790に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が(本明細書に説明される)プロセッサ内に集積され、メモリ1740およびコプロセッサ1745は、プロセッサ1710と、IOH1750を有する単一のチップのコントローラハブ1720とに直接に結合される。
追加のプロセッサ1715の任意選択の性質が図17に破線を用いて示されている。各プロセッサ1710、1715は、本明細書に説明される処理コアのうちの1または複数を含み得、プロセッサ1600のいくつかのバージョンであり得る。
メモリ1740は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも一実施形態においては、コントローラハブ1720は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath相互接続(QPI)等のポイントツーポイントインタフェース、または類似の接続1795を介してプロセッサ1710、1715と通信する。
一実施形態において、コプロセッサ1745は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。一実施形態において、コントローラハブ1720は、統合グラフィックスアクセラレータを含み得る。
物理リソース1710と物理リソース1715との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む幅広い価値基準に関して様々な違いが存在し得る。
一実施形態において、プロセッサ1710は、一般なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ1710は、取り付けられたコプロセッサ1745により実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ1710は、コプロセッサバスまたは他の相互接続においてこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1745に発する。コプロセッサ1745は、受信したコプロセッサ命令を受け取って実行する。
ここで図18を参照すると、本発明の実施形態による第1のより具体的な例示的システム1800のブロック図が示される。図18に示されるように、マルチプロセッサシステム1800はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1850を介して結合される第1のプロセッサ1870および第2のプロセッサ1880を含む。プロセッサ1870および1880の各々は、プロセッサ1600のいくつかのバージョンであり得る。本発明の一実施形態において、プロセッサ1870および1880は各々、プロセッサ1710および1715であるが、コプロセッサ1838は、コプロセッサ1745である。別の実施形態において、プロセッサ1870および1880は各々、プロセッサ1710およびコプロセッサ1745である。
統合メモリコントローラ(IMC)ユニット1872および1882を各々含むプロセッサ1870および1880が示される。プロセッサ1870は、そのバスコントローラユニットの一部としてポイントツーポイント(P‐P)インタフェース1876および1878も含む。同様に、第2のプロセッサ1880は、P‐Pインタフェース1886および1888を含む。プロセッサ1870、1880は、P‐Pインタフェース回路1878、1888を用いて、ポイントツーポイント(P‐P)インタフェース1850を介して情報を交換し得る。図18に示されるように、IMC1872および1882は、プロセッサを各メモリ、すなわち、各プロセッサにローカルに取り付けられたメインメモリの一部であり得るメモリ1832およびメモリ1834に結合する。
プロセッサ1870、1880は各々、ポイントツーポイントインタフェース回路1876、1894、1886、1898を用い、個々のP‐Pインタフェース1852、1854を介してチップセット1890と情報を交換し得る。任意選択で、チップセット1890は、高性能インタフェース1839を介してコプロセッサ1838と情報を交換し得る。一実施形態において、コプロセッサ1838は、例えば、高スループットMICプロセッサ、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサに含まれ、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされると、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介してプロセッサとなおも接続され得る。
チップセット1890は、インタフェース1896を介して第1のバス1816に結合され得る。一実施形態において、第1のバス1816は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバス等のバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
図18に示されるように、様々なI/Oデバイス1814が、第1のバス1816を第2のバス1820に結合するバスブリッジ1818と共に、第1のバス1816に結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサ等、1または複数の追加のプロセッサ1815は、第1のバス1816に結合される。一実施形態において、第2のバス1820は、低ピンカウント(LPC)バスであり得る。様々なデバイスは、一実施形態において、例えば、キーボードおよび/またはマウス1822、通信デバイス1827、ならびに命令/コードおよびデータ1830を含み得るディスクドライブもしくは他の大容量ストレージデバイス等のストレージユニット1828を含む第2のバス1820に結合され得る。更に、オーディオI/O1824は、第2のバス1820に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図18のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
ここで図19を参照すると、本発明の実施形態による第2のより具体的な例示的システム1900のブロック図を示す。図18および図19の同一の要素は、同一の参照番号を有し、図19の他の態様を不明瞭にするのを避けるべく、図18の特定の態様は、図19から省略されている。
図19は、プロセッサ1870、1880が統合メモリおよびI/O制御ロジック(「CL」)1872および1882を各々含み得ることを示す。従って、CL1872、1882は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図19は、メモリ1832、1834がCL1872、1882に結合されていることのみならず、I/Oデバイス1914も制御ロジック1872、1882に結合されていることを示す。レガシI/Oデバイス1915は、チップセット1890に結合される。
ここで図20を参照すると、本発明の実施形態によるSoC2000のブロック図が示される。図16における類似の要素は、同一の参照番号を有する。また、破線ボックスは、より高度なSoCの任意選択の特徴である。図20において、相互接続ユニット2002は、1もしくは複数のコア1602A〜Nおよび共有キャッシュユニット1606のセットを含むアプリケーションプロセッサ2010、システムエージェントユニット1610、バスコントローラユニット1616、統合メモリコントローラユニット1614、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1もしくは複数のコプロセッサ2020のセット、スタティックランダムアクセスメモリ(SRAM)ユニット2030、ダイレクトメモリアクセス(DMA)ユニット2032、および1または複数の外部ディスプレイを結合するディスプレイユニット2040に結合される。一実施形態において、コプロセッサ2020は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ等のような専用プロセッサを含む。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装され得る。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
図18に示されるコード1830等のプログラムコードは、本明細書に説明される機能を実行して出力情報を生成するべく、入力命令に適用され得る。出力情報は、既知の様式で1または複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装され、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書に説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書に説明される技術を実行するためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形機械可読媒体上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作成する製造機械にロードされ得る。
そのような機械可読ストレージ媒体としては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、書き換え可能コンパクトディスク(CD‐RW)、および光磁気ディスク等、その他のタイプのディスクを含むストレージ媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、および相変化メモリ(PCM)等の半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適なその他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品が挙げられ得るが、これらに限定されない。
従って、本発明の実施形態は、命令を含み、または本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的有形機械可読媒体も含む。そのような実施形態は、プログラム製品と称され得る。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
いくつかの場合に、命令コンバータは、ソース命令セットからターゲット命令セットへと命令を変換するべく用いられ得る。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)命令を、コアにより処理されるべき1または複数の他の命令に翻訳し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装され得る。命令コンバータは、プロセッサにあり、プロセッサから離れ、またはプロセッサ上の一部であり、プロセッサから離れた一部であり得る。
図21は、本発明の実施形態による、ソース命令セットのバイナリ命令を、ターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用と対比するブロック図である。示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装され得る。図21は、高水準言語2102によるプログラムが、少なくとも1つのx86命令セットコア2116を有するプロセッサによりネイティブに実行され得るx86バイナリコード2106を生成するべく、x86コンパイラ2104を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコア2116を有するプロセッサは、少なくとも1つのx86命令セットコアを用いるインテル(登録商標)プロセッサと実質的に同一の結果を実現するべく、(1)インテル(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で起動することを目的とする、オブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを互換的に実行し、または別の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同一の機能を実行し得る任意のプロセッサを表す。x86コンパイラ2104は、x86バイナリコード2106(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。x86バイナリコード2106は、追加のリンク処理を用いるか、または用いることなく少なくとも1つのx86命令セットコア2116を有するプロセッサにおいて実行され得る。同様に、図21は、高水準言語2102によるプログラムが、少なくとも1つのx86命令セットコア2114を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行し、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード2110を生成するべく、代替的な命令セットコンパイラ2108を用いてコンパイルされ得ることを示す。命令コンバータ2112は、x86バイナリコード2106を、x86命令セットコア2114を有しないプロセッサによりネイティブに実行され得るコードに変換するべく用いられる。この変換済みコードは、代替的な命令セットバイナリコード2110と同じである可能性が低い。なぜなら、これが可能な命令コンバータは、作成することが困難だからである。しかし、変換済みコードは、一般的なオペレーションを実現し、代替的な命令セットの命令から構成される。従って、命令コンバータ2112は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表し、これらは、エミュレーション、シミュレーション、またはその他の処理により、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード2106を実行することを可能にする。
図1、図2A/図2B、および図5〜図9のいずれかについて説明されたコンポーネント、特徴、および詳細は、任意選択で図3〜図4のいずれかにも適用され得る。更に、装置のいずれかについて説明されるコンポーネント、機能、および詳細は、任意選択で方法のいずれかにも適用され得、方法は実施形態において、そのような装置によっておよび/または装置を用いて実行され得る。本明細書に説明されるプロセッサのいずれかは、本明細書(例えば、図17〜図20)に開示されるコンピュータシステムのいずれかに含まれ得る。いくつかの実施形態において、命令は、本明細書(例えば、図10A〜図12D)に開示される命令フォーマットの機能または詳細を有し得るが、これは必須ではない。
明細書および特許請求の範囲において、「結合される」および/または「接続される」という用語は、それらの派生語と共に用いられ得る。これらの用語は、互いに類義語として意図されない。むしろ、実施形態において、「接続される」は、2またはそれより多くの要素が物理的および/または電気的に直に互いに接触することを示すために用いられ得る。「結合される」は、2またはそれより多くの要素が物理的および/または電気的に直に互いに接触することを意味し得る。しかし、「結合される」は、2またはそれより多くの要素が互いに直に接触していないが、なおも互いに協働または相互作用することも意味し得る。例えば、実行ユニットは、1または複数の介在コンポーネントを介してレジスタおよび/またはデコードユニットと結合され得る。図面において、接続および結合を示すべく、矢印が用いられる。
「および/または」という用語が用いられる場合がある。本明細書において用いられるように、「および/または」という用語は、一方もしくは他方、または両方を意味する(例えば、Aおよび/またはBは、AもしくはB、またはAおよびBの両方を意味する)。
上記において、実施形態の完全な理解を提供するべく、具体的な詳細が記載されている。しかし、他の実施形態は、これらの具体的な詳細のうちのいくつかを用いることなく実施され得る。本発明の範囲は、上記で提供された具体的な例によってではなく、以下の特許請求の範囲のみによって決定される。他の例において、本明細書の理解を不明瞭にするのを避けるべく、周知の回路、構造体、デバイス、および動作は、ブロック図の形式で、および/または詳細なしで示されている。適切と考えられる場合、別途指定され、または明白に明らかではない限り、類似または同一の特性を任意選択で有し得る、対応または類似する要素を示すべく、符号または符号の末尾が図面間で反復される。
特定のオペレーションは、ハードウェアコンポーネントによって実行され得、またはオペレーションを実行する命令でプログラミングされた機械、回路、またはハードウェアコンポーネント(例えば、プロセッサ、プロセッサの一部、回路等)を生じさせ、および/またはもたらすために用いられ得る機械実行可能命令、もしくは回路実行可能命令で実施され得る。オペレーションは、任意選択で、ハードウェアおよびソフトウェアの組み合わせによっても実行され得る。プロセッサ、機械、回路、またはハードウェアは、特定または具体的な回路を備み得、または他のロジック(例えば、ファームウェアおよび/またはソフトウェアと潜在的に組み合わされるハードウェア)は、命令を実行および/または処理し、当該命令に応答して結果を格納するように動作する。
いくつかの実施形態は、機械可読媒体を含む製造物品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって可読な形式の情報を提供し、例えば、これを格納するメカニズムを含み得る。機械可読媒体は、機械によって実行されるとき、および/または場合に、機械に本明細書に開示される1または複数のオペレーション、方法、または技術を実行させ、および/またはこれらを実行する機械をもたらすように動作する命令または命令のシーケンスを提供し、または格納し得る。
いくつかの実施形態において、機械可読媒体は、非一時的機械可読ストレージ媒体を含み得る。例えば、非一時的機械可読ストレージ媒体としては、フロッピー(登録商標)ディスケット、光ストレージ媒体、光ディスク、光データストレージデバイス、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または複数の内部キャッシュのいずれかにおける、複数のメモリアドレスのいずれかのデータを内部に格納した任意のダーティキャッシュラインの1または複数のメモリへのライトバックを開始する1または複数のキャッシュコントローラを含む。キャッシュコヒーレンシシステムは、ベクトルキャッシュラインライトバック命令に応答して、相互接続上で1または複数のキャッシュラインライトバック信号を送信し、コヒーレンシドメインにおけるプロセッサの外部の任意のキャッシュにおける、複数のメモリアドレスのいずれかのデータを内部に格納した任意のダーティキャッシュラインを、1または複数のメモリにライトバックさせるバスインタフェースユニットも含む。
例5は、例4のプロセッサを含み、バスインタフェースユニットは、たとえ所与のメモリアドレスのデータがプロセッサの1または複数の内部キャッシュのいずれかに格納されなくとも、任意選択で、相互接続上で1または複数のキャッシュラインライトバック信号を送信し、コヒーレンシドメインにおけるプロセッサの外部の任意のキャッシュにおける、所与のメモリインデックスによって示される所与のメモリアドレスのデータを内部に格納した任意のダーティキャッシュラインを、1または複数のメモリにライトバックさせる。
例6は、例4〜5のうちのいずれか1つのプロセッサを含み、バスインタフェースユニットは、任意選択で、相互接続上で1または複数のキャッシュラインライトバック信号を送信し、コヒーレンシドメインにおけるプロセッサの外部の任意のキャッシュにおける、所与のメモリインデックスによって示される所与のメモリアドレスのデータを内部に格納した任意のダーティキャッシュラインを、プロセッサの1または複数の内部キャッシュのいずれかに所与のメモリアドレスのデータを格納する任意のキャッシュラインの状態に関係なく、1または複数のメモリにライトバックさせる。
例7は、例1〜6のうちのいずれか1つのプロセッサを含み、デコードユニットは、複数のマスク要素を含むソースパックドデータオペレーションマスクオペランドを任意選択で示すベクトルキャッシュラインライトバック命令をデコードする。
例8は、例7のプロセッサを含み、キャッシュコヒーレンシシステムは、ベクトルキャッシュラインライトバック命令に応答して、ソースパックドデータオペレーションマスクオペランドに従い、コヒーレンシドメインの任意のキャッシュにおける、ソースパックドデータオペレーションマスクオペランドの対応するマスク要素によってマスクをかけられない複数のメモリインデックスの任意の非マスクメモリインデックスのみによって示される複数のメモリアドレスのいずれかのデータを内部に格納した任意のダーティキャッシュラインを選択的に、1または複数のメモリにライトバックさせる。
例9は、例1〜8のうちのいずれか1つのプロセッサを含み、ベクトルキャッシュラインライトバック命令は、1または複数のメモリに格納される複数のデータ要素を含むソースパックドデータ要素オペランドを示すインデックス付きベクトルストアおよびベクトルキャッシュラインライトバック命令を任意選択で含む。
例10は、例9のプロセッサを含み、インデックス付きベクトルストアおよびベクトルキャッシュラインライトバック命令に応答して、ソースパックドデータ要素オペランドの複数のデータ要素の各々を、ソースパックドメモリインデックスオペランドの対応するメモリインデックスによって示される1または複数のメモリにおける対応するメモリアドレスに格納する、実行ユニットを更に含む。
例11は、例1〜10のうちのいずれか1つのプロセッサを含み、ベクトルキャッシュラインライトバック命令に応答して、ベクトルキャッシュラインライトバック命令に先行する全てのストア命令が全面的に可視になるまで、プログラム順序においてベクトルキャッシュラインライトバック命令の後に続く全てのストア命令が、全面的に可視になることを任意選択で阻止するメモリアクセス順序付けロジックを更に含む。
例12は、例11のプロセッサを含み、ベクトルキャッシュラインライトバック命令に応答して、任意のダーティキャッシュラインが永続性ストレージにライトバックされるまで、プログラム順序においてベクトルキャッシュラインライトバック命令の後に続く全ての命令が完了することを任意選択で阻止するユニットを更に含む。
例13は、例1〜12のうちのいずれか1つのプロセッサを含み、任意選択で、分岐を予測する分岐予測ユニットと、任意選択で、分岐予測ユニットと結合され、ベクトルキャッシュラインライトバック命令を含む命令をプリフェッチする命令プリフェッチユニットとを更に含む。プロセッサは、任意選択で、命令プリフェッチユニットと結合され、命令を格納するレベル1(L1)命令キャッシュと、任意選択で、データを格納するL1データキャッシュとを更に含み得る。プロセッサは、データおよび命令を格納するレベル2(L2)キャッシュと、デコードユニット、L1命令キャッシュ、およびL2キャッシュと結合された命令フェッチユニットとを任意選択で更に含み得る。命令フェッチユニットは、L1命令キャッシュおよびL2キャッシュのうちの1つから、ベクトルキャッシュラインライトバック命令をフェッチし、ベクトルキャッシュラインライトバック命令をデコードユニットに提供し得る。プロセッサは、複数のパックドデータレジスタと結合され、複数のパックドデータレジスタをリネームするレジスタリネームユニットと、キャッシュコヒーレンシシステムによる実行のためにベクトルキャッシュラインライトバック命令からデコードされた1または複数のオペレーションをスケジューリングするスケジューラとを任意選択で更に含み得る。
例14は、ベクトルキャッシュラインライトバック命令を受信する段階を有するプロセッサにおける方法を含む。ベクトルキャッシュラインライトバック命令は、複数のメモリインデックスを有するソースパックドメモリインデックスオペランドを示し得る。方法は、ベクトルキャッシュラインライトバック命令に応答して、コヒーレンシドメインの任意のキャッシュにおける、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを格納する任意のダーティキャッシュラインを、1または複数のメモリにライトバックさせる段階を備える。
例15は、例14の方法を含み、ライトバックさせる段階は、ベクトルキャッシュラインライトバック命令に応答して、コヒーレンシドメインの任意のキャッシュにおける、複数のメモリアドレスのいずれかのデータを格納する任意のキャッシュラインの任意選択の無効化を生じさせる段階を有する。
例16は、例14の方法を含み、ライトバックさせる段階は、ベクトルキャッシュラインライトバック命令に応答して、コヒーレンシドメインの任意のキャッシュにおける、複数のメモリアドレスのいずれかのデータを格納する任意のダーティキャッシュラインの状態を、任意選択で未変更状態に変更させる段階を有する。
例17は、例14〜16のうちのいずれか1つの方法を含み、ライトバックさせる段階は、コヒーレンシドメインにおけるプロセッサの1または複数の内部キャッシュのいずれかにおける、複数のメモリアドレスのいずれかのデータを格納する任意のダーティキャッシュラインの1または複数のメモリへのライトバックを開始する段階を有する。ライトバックさせる段階は、相互接続上で1または複数のキャッシュラインライトバック信号を送信して、コヒーレンシドメインにおけるプロセッサの外部の任意のキャッシュにおける、複数のメモリアドレスのいずれかのデータを格納する任意のダーティキャッシュラインを、1または複数のメモリにライトバックさせる段階も任意選択で含み得る。
例18は、例14〜17のうちのいずれか1つの方法を含み、受信する段階は、複数のマスク要素を含むソースパックドデータオペレーションマスクオペランドを任意選択で示すマスク命令であるベクトルキャッシュラインライトバック命令を受信する段階を有する。
例19は、例14〜18のうちのいずれか1つの方法を含み、受信する段階は、複数のデータ要素を含むソースパックドデータ要素オペランドを任意選択で示すベクトルキャッシュラインライトバック命令を受信する段階を有し、複数のデータ要素を、複数のメモリインデックスの対応するメモリインデックスによって示される1または複数のメモリにおけるメモリ位置に任意選択で格納する段階を更に有する。
例20は、例14〜19のうちのいずれか1つの方法を含み、ベクトルキャッシュラインライトバック命令に応答して、プログラム順序においてベクトルキャッシュラインライトバック命令に先行する全てのストア命令が全面的に可視になるまで、プログラム順序におけるベクトルキャッシュラインライトバック命令の後に続く全てのストア命令が、全面的に可視になることを任意選択で阻止する段階を更に含む。
例21は、相互接続と、相互接続と結合されたプロセッサとを含む、命令を処理するためのシステムである。プロセッサは、ベクトルキャッシュラインライトバック命令および永続性コミット命令を含む命令セットを有する。システムは、相互接続と結合された永続性メモリも含む。永続性メモリは、プロセッサによって実行されると、プロセッサにオペレーションのセットを実行させる命令のセットを格納する。オペレーションのセットは、ソースパックドメモリインデックスオペランドの対応するメモリインデックスによって示される永続性メモリにおけるメモリアドレスに、ソースパックドデータ要素オペランドの複数のデータ要素を格納することを含む。オペレーションは、ベクトルキャッシュラインライトバック命令に応答して、コヒーレンシドメインの任意のキャッシュにおける、ベクトルキャッシュラインライトバック命令によって示されるソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示されるメモリアドレスのいずれかのデータを内部に格納した任意のダーティキャッシュラインを、永続性メモリにライトバックさせることも含む。オペレーションは、永続性コミット命令に応答して、ダーティキャッシュラインのいずれかが永続性メモリにライトバックされるまで、プログラム順序においてベクトルキャッシュラインライトバック命令の後に続く全ての命令が、完了することを阻止することも含む。
例22は、例21のシステムを含み、ベクトルキャッシュラインライトバック命令は、複数のマスク要素を含むソースパックドデータオペレーションマスクオペランドを示す。
例23は、非一時的機械可読ストレージ媒体を含む製造物品であり、非一時的機械可読ストレージ媒体は、ベクトルキャッシュラインライトバック命令を格納する。ベクトルキャッシュラインライトバック命令は、複数のメモリインデックスを有するソースパックドメモリインデックスオペランドを示す。ベクトルキャッシュラインライトバック命令は、機械によって実行されると、機械に、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを格納する、コヒーレンシドメイン内の任意のキャッシュにおける任意のダーティキャッシュラインを1または複数のメモリにライトバックさせることを含むオペレーションを実行させる。
例24は、例23の製造物品を含み、ベクトルキャッシュラインライトバック命令は、機械によって実行されると、機械に、メモリアドレスのいずれかのデータを内部に格納した、コヒーレンシドメインにおけるキャッシュのいずれかにおける任意のキャッシュラインを任意選択で更に無効にさせる。
例25は、例23の製造物品を含み、ベクトルキャッシュラインライトバック命令は、機械によって実行されると、更に機械に、メモリアドレスのいずれかのデータを内部に格納した、コヒーレンシドメインにおけるキャッシュのいずれかにおけるダーティキャッシュラインのいずれかの状態を、未変更状態に任意選択で変更させる。
例26は、例14〜20のうちのいずれか1つの方法を実行し、または実行するように動作するプロセッサまたは他の装置である。
例27は、例14〜20のうちのいずれか1つの方法を実行するための手段を含むプロセッサまたは他の装置である。
例28は、例14〜20のうちのいずれか1つの方法を実行するためのモジュールおよび/またはユニットおよび/またはロジックおよび/または回路および/または手段のいずれかの組み合わせを含むプロセッサである。
例29は、プロセッサ、コンピュータシステム、電子デバイス、または他の機械によって実行される場合および/またはときに、機械に例14〜20のうちのいずれか1つの方法を実行させるように動作する命令を任意選択で格納し、または別の方法で提供する、非一時的機械可読媒体を任意選択で含む製造物品である。
例30は、バスまたは他の相互接続と、相互接続と結合された、例1〜13のうちのいずれか1つのプロセッサと、任意選択のダイナミックランダムアクセスメモリ(DRAM)、任意選択のスタティックRAM、任意選択のフラッシュメモリ、任意選択のグラフィックスコントローラまたはチップ、任意選択のビデオカード、任意選択の無線通信チップ、任意選択の無線トランシーバ、任意選択の汎ヨーロッパデジタル移動通信システム(GSM(登録商標))アンテナ、任意選択のコプロセッサ(例えば、CISCコプロセッサ)、任意選択のオーディオデバイス、任意選択のオーディオ入力デバイス、任意選択のオーディオ出力デバイス、任意選択のビデオ入力デバイス(例えば、ビデオカメラ)、任意選択のネットワークインタフェース、任意選択の通信インタフェース、任意選択の永続性メモリ(例えば、任意選択の相変化メモリ、メモリスタ等)、およびこれらの組み合わせから選択される、相互接続と結合された1または複数のコンポーネントを含むコンピュータシステムまたは他の電子デバイスである。
例31は、本明細書において実質的に説明されるプロセッサまたは他の装置である。
例32は、本明細書において実質的に説明されるいずれかの方法を実行するように動作するプロセッサまたは他の装置である。
例33は、本明細書において実質的に説明されるいずれかのベクトルキャッシュラインライトバック命令を実行する(例えば、実行するように構成され、または実行するように動作し、または実行するコンポーネントを有する)プロセッサまたは他の装置である。
例34は、第1の命令セットの命令をデコードするデコードユニットを含むプロセッサまたは他の装置である。デコードユニットは、ベクトルキャッシュラインライトバック命令をエミュレートする第1の命令セットの1または複数の命令を受信する。ベクトルキャッシュラインライトバック命令は、本明細書に実質的に開示される命令のいずれかであってもよく、また、第2の命令セットである。プロセッサまたは他の装置は、デコードユニットに結合され、第1の命令セットの1または複数の命令を実行または実施する1または複数の実行ユニットも含む。1または複数の実行ユニットは、第1の命令セットの1または複数の命令に応答して、ベクトルキャッシュラインライトバック命令によって指定されたアーキテクチャ的効果を有する。
例35は、第1の命令セットの命令をデコードするデコードユニットを有するプロセッサを含む、コンピュータシステムまたは他の電子デバイスである。プロセッサは、1または複数の実行ユニットも有する。電子デバイスは、プロセッサと結合されたストレージデバイスも含む。ストレージデバイスは、本明細書に実質的に開示されるベクトルキャッシュラインライトバック命令のいずれかであり得、第2の命令セットである、ベクトルキャッシュラインライトバック命令を格納する。ストレージデバイスは、ベクトルキャッシュラインライトバック命令を第1の命令セットの1または複数の命令に変換する命令を格納する。第1の命令セットの1または複数の命令は、プロセッサによって実行されると、プロセッサに、ベクトルキャッシュラインライトバック命令によって指定されたアーキテクチャ的効果を有するようにさせる。
例36は、ベクトルキャッシュラインライトバック命令を受信するための手段を有するプロセッサを含む。ベクトルキャッシュラインライトバック命令は、複数のメモリインデックスを有するソースパックドメモリインデックスオペランドを示す。プロセッサは、ベクトルキャッシュラインライトバック命令に応答して、ソースパックドメモリインデックスオペランドのメモリインデックスのいずれかによって示される複数のメモリアドレスのいずれかのデータを格納する、コヒーレンシドメイン内の任意のキャッシュにおける任意のダーティキャッシュラインを1または複数のメモリにライトバックさせるための手段を備える。