以下の説明において、多数の具体的な詳細を記載する。しかしながら、本発明の実施形態は、これらの具体的な詳細を伴うことなく実施されてよいことを理解されたい。他の例では、この説明の理解を妨げることのないよう、周知の回路、構造および技法は詳細には示されていない。
本明細書における「1つの実施形態」、「一実施形態」、「例示的な実施形態」等の記載は、説明されている実施形態が特定の特徴、構造、または特性を含んでよいが、必ずしも全ての実施形態がその特定の特徴、構造、または特性を含まなくてもよいことを示す。また、そのような文言は、必ずしも同じ実施形態を指すものではない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明される場合、明示的な説明の有無によらず、そのような特徴、構造、または特性を他の実施形態に関連して実施することは当業者の知識の範囲内であると考えられる。
本明細書に開示の実施形態は、複数のRAO命令を空間的および/または時間的に組み合わせる機会を検出および利用することにより、RAO命令を実行する効率を向上し、コストを低減する。本明細書で用いる場合、空間的に組み合わせるとは、同じキャッシュライン内の異なるアドレスに対する複数のRAO命令を組み合わせる、例えば、キャッシュラインの第2の要素にアクセスする第1のRAO命令をキャッシュラインの第10の要素にアクセスする第2のRAO命令と組み合わせることを指す。時間的に組み合わせるとは、可能な場合に、同じキャッシュラインロケーションに連続的にアクセスする複数のRAO命令を組み合わせる、例えば、アドレス指定ロケーションに「33」を加算する第1のRAO命令を、当該アドレス指定ロケーションに「11」を加算する第2のRAO命令と組み合わせて、当該アドレス指定ロケーションに「44」を加算する単一のRAO命令とすることを指す。
本明細書に開示の実施形態は、x86プロセッサと互換性のあるアトミックメモリ命令のファミリをサポートする。本明細書で用いる場合、x86プロセッサとは、いくつかの異なる企業のうちの1つにより製造され、x86命令セットアーキテクチャ(ISA)と互換性のあるプロセッサを指す。各命令は、メモリロケーションに対してアトミックな更新オペレーション(例えばリード・モディファイ・ライト)を行う。これらのメモリアクセスは、x86のノンテンポラル(NT)・ストアと同様に、同じスレッドからの他の命令に関して弱く順序付けられることがある。しかしながら、これらの命令は、同じスレッドからの命令との、リード・アフター・ライト、ライト・アフター・リードおよびライト・アフターライトの依存関係といった従来のデータハザードをこうむる。これらの命令は、プロセッサコア、プライベートキャッシュ、共有キャッシュもしくはキャッシングアンドホームエージェント(caching and home agent)(CHA)、メモリコントローラ、または遠隔コアなど、多様なロケーションにおいて実行される場合がある。いくつかの実施形態において、各命令は、メモリに格納されたベクトルの複数の要素に対して並列オペレーションを行うためのものである。
開示の実施形態は、処理コアが、RAO命令をキャッシュ制御回路による実行対象としてディスパッチし、キャッシュ制御回路がRAO命令を行っている間に有用な作業を継続して行うことを可能とするという利点を供する。コアは、少なくともスレッド内のフェンスおよび依存関係(例えば、同じメモリロケーションに対するリード・アフター・ライト)を実効化するべく、依然として処理中のRAO命令をトラッキングしなければならない。しかし、コアが複数の異なるキャッシュラインに対してRAO命令を行っていれば、コアがそのトラッキング能力を使い切る、またはキャッシュ制御回路部をリクエストで飽和させるまでは/そうしない限り、コアは、これらのRAO命令を非常に高いスループットで実行することができる。個々のRAO命令は高レイテンシを有する場合がある(コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない)ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
開示の実施形態は、複数のRAO命令のシリアル化の抑制を図り、アプリケーションが、同じキャッシュラインに対する複数のアトミックオペレーションを、バックツーバックで(back-to-back)、または立て続けに(in quick succession)、より効率的に行うことを可能とする。開示の実施形態は、同じキャッシュラインに対する複数のRAO命令がシリアル化されることで、コアがRAO命令ごとにキャッシュ制御回路部からの応答を待機しなければならなくなり、可能性として数十または数百サイクルにわたり実行がストールしてしまう事態を抑制する。RAO命令は、ローカルキャッシュにあるデータについても、はるばる中央エージェント(キャッシュ制御回路部など)まで進んでから戻って来ることがあるので、これらをシリアル化するのは損失が大きい場合がある。開示の実施形態は、同じキャッシュラインに対するRAO命令を自動的に組み合わせるハードウェアを含むという利点を有する。
いくつかの実施形態は、同じキャッシュライン上のいくつかの異なるロケーションに対する複数のRAO更新を空間的に組み合わせる。これは、偶発的に(例えば特定の入力パターンに起因して)起こるものであってよく、またはアルゴリズムに本来固有のものであってもよい。例えば、ソフトウェアは、Cプログラミング言語における構造体などの単一オブジェクトの複数のフィールドを更新するための複数のRAO命令を発行する場合がある。具体例として、物理シミュレーションアプリケーションが、C構造体の配列、
として表される、オブジェクトのセットにかかる合力を計算する場合がある。これは多くの場合、以下のパターンに従う。
なお、x、y、およびzに対する個々の更新は独立である(すなわち、これらは弱い順序付けで実行することができ、構造体全体をロックする必要はない)。開示の実施形態は、個々の更新をシリアル化することを避け、代わりにこれらのアトミックオペレーションのうち2つ以上を共に空間的に組み合わせる機会を捉える。
関連するシナリオにおいては、何らかのソフトウェアが、厳密に同じロケーションに対して複数のアトミックな更新を立て続けに行う場合がある。いくつかの開示の実施形態は、例えば同じロケーションのアトミックなインクリメントを20回行うことを20のアトミックな加算を1回行うことに変換することにより、これらのオペレーションを機会的に(opportunistically)時間的に組み合わせる。
より具体的には、開示の実施形態は、同じキャッシュラインに対するRAO命令の空間的および/または時間的な組み合わせを利用するハードウェアを含む。いくつかの実施形態は、RAO命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。
いくつかの実施形態において、コア内のRAO命令キューは、保留中のRAO命令をキャッシュラインごとの単位でトラッキングする。いくつかの実施形態において、キャッシュラインは、64バイト幅を有し、4バイト幅のデータパスを介してアクセスされる。他の実施形態において、キャッシュラインおよびアクセスデータパスのサイズは、限定されることなく、様々であり得る。いくつかの実施形態においては、キャッシュライン全体が、読み込みまたは書き込みのバーストを用いて実質的に一度にアクセスされる。よって、保留中のエンキュー済みRAO命令の各キャッシュラインが、バースト読み込みまたは書き込みを用いて読み込まれまたは書き込まれ得る。64バイトキャッシュラインの4バイト要素ごとにアクセスする場合、16回の読み込みまたは書き込みの一バーストを用いてキャッシュライン全体にアクセスすることができる。キャッシュラインの一部のみにアクセスする必要がある場合は、16よりも少ない数のアクセスを用いることができる。
いくつかの実施形態において、RAO命令キューは、プロセッサの既存のライト・コンバイニング・バッファ(WCB)を用いる。WCBは、データのキャッシュライン(64B)およびキャッシュラインアドレスを含むバッファエントリを介したストリーミング・ストアのトラッキングなどのいくつかの有用な機能を既に含んでいる。いくつかの実施形態は、WCB(または相当する構造)を用いて、ポストされたRAO命令をバッファする。これは、ポストされたRAO命令が、ストリーミング・ストアと非常に類似のメモリオーダリング(弱い順序付け)を有するためである。
ただし、開示の実施形態は、キャッシュラインにおけるどの要素にRAO命令が適用されるべきかを示すための有効マスク、RAO命令を指定するオペコード(例えば整数加算)、RAO命令のためのデータ要素サイズ、および、予め定められたサイクル数の経過後にバッファエントリを無効にするタイムアウトカウンタ(または現在のサイクルカウントが満了タイムスタンプに達したときにバッファエントリを無効にする満了タイムスタンプ)といったいくつかの追加的なフィールドを含むよう、各バッファエントリを拡張する。
いくつかの実施形態において、コアは、ポストされたRAO命令を実行するときに、RAO命令キューをスキャンして、ポストされたRAO命令がそのキャッシュラインについて既に処理中であるか否かを判定する。否である場合は、組み合わせの機会がなく、代わりにコアは新たなバッファエントリを割り当ててそのフィールドを埋める。コアは、RAO命令をアンコア(uncore)に即座には送らない。そうしてしまうと、今後のオペレーションをこの命令と組み合わせる全ての機会を妨げることになるからである。代わりに、コアは、サイクルごとに小さくなる何らかの初期値(例えば20サイクル)にタイムアウト値を設定し、カウンタが満了したときにのみ、コアがRAO命令をアンコアに送る。
一方、同じアドレス指定キャッシュラインについてのバッファエントリが存在する場合、コアは、新たなRAO命令と既存のエンキュー済みRAO命令と間のオーバーラップを判定する。オーバーラップの度合いは、これら2つのRAO命令のオペコード、データ要素サイズ、および有効マスクを比較することにより評価される。(有効マスクは、種々の形式をとり得る。例えば、いくつかの実施形態は、要素サイズを明示的にエンコードし、各マスクビットが1つの要素に対応し得る。あるいは、各マスクビットが最小データ要素サイズを指してもよく、これはバイト、ワード、ダブルワードであり得る。)
オーバーラップがない場合、空間的組み合わせをサポートする実施形態は、新たなRAO命令オペランドを、当該新たなRAO命令のオペコード、ソースデータ、データ要素サイズ、デスティネーションアドレス、有効マスク、および満了タイムスタンプを含め、既存のRAO命令キューエントリ内の適切な位置に書き込む。
オーバーラップがある場合、例えば新たなRAO命令と既存のRAO命令とが、同じオペコード(例えばADD)を同じキャッシュライン要素(例えば4番目の要素)に対してかつ同じデータ要素サイズ(例えば4バイト)で指定するとき、時間的組み合わせをサポートする実施形態は、RAO命令キューの適切な部分を読み込み、RAO命令により指定される指定の算術または論理オペレーションをバッファからのデータおよび新たなRAO命令からのデータに対して行い、結果をデータバッファに書き込む(例えば、RAO_ADD 33をRAO_ADD 11と組み合わせ、RAO_ADD 44をRAO命令キューに格納する)。このプロセスの間、ハードウェアは、コアが(当該コア上の同じスレッドまたは異なるハイパースレッドについて)同じキャッシュラインに対して他のオペレーションを同時に行うことを試みる場合に備えて、バッファのコンテンツのアトミック性を保証する。別の例として、新たなRAO命令と既存のRAO命令とが同じオペコードおよび同じデータ要素サイズを指定し、しかしこれが異なるキャッシュライン要素に対するものである場合、空間的組み合わせをサポートする実施形態は、RAOリクエストキューから既存のRAOリクエストを含むキャッシュラインエントリを読み込み、新たなRAOオペレーションをキャッシュラインエントリの適切な要素に追加し、更新されたキャッシュラインエントリをRAOリクエストキューにライトバックする。
部分的なオーバーラップ(例えば、20のインクリメントリクエストに続いて5の整数加算リクエストなど、異なるが対応性のあるオペコードを有するRAO命令)がある場合、いくつかの実施形態は、異なるオペコードおよび/またはオペランドサイズを有するRAO命令をより積極的に組み合わせるなどの特別な処理を行う。いくつかの実施形態は、特定のオペコードを、他のより一般的なものに変換する。例えば、整数加算は、インクリメントのより一般的な形式であるので、バッファ内のRAO命令がインクリメントであり、新たなオペレーションが整数加算である場合、いくつかの実施形態におけるハードウェアは、バッファエントリを整数加算オペレーションに変換し、1のデータ値をバッファエントリのデータ部分における適切な位置に挿入し、それにより当該新たなオペレーションがバッファエントリとマージすることを可能とする。
いくつかの実施形態は、ワードサイズのRAO命令をダブルワードサイズのRAO命令と組み合わせる。これは、これら2つのRAO命令がいかなる同じキャッシュライン要素にもアクセスしないことを条件とする。
より複雑な実施形態は、複数のオペコード、データ要素サイズ、および/または有効マスクを含むバッファエントリを含んでよく、ワードの単精度浮動小数点加算および整数デクリメントなどの複数の異なるRAO命令を組み合わせることが可能であってよい。
キャッシュ制御回路において(またはRAO命令が実際にメモリに作用する任意の場所において)、基本的なRAO実装の場合、コアからリクエストを受け取る論理は、RAO命令をデコードし、指定されたアドレスをローカルメモリ/キャッシュから読み込み、RAO命令からのオペランドを用いて、指定されたオペレーションをそのアドレスに対して行い、結果をメモリにライトバックし、完了の信号をリクエスト元のコアに送り返す。
いくつかの実施形態において、キャッシュ制御回路部は、空間的および/または時間的に組み合わされたRAO命令をコアから受け取ってデコードすることができるように高度化される。空間的に組み合わされたRAO命令をサポートするべく、キャッシュ制御回路部は、キャッシュラインデータ要素の単一のアドレスを受け取るのではなく、キャッシュラインアドレスと、どのキャッシュライン要素が更新されるべきかを示す有効マスクとを含むRAO命令をコアから受け付ける。キャッシュ制御回路部は、キャッシュラインを一度読み込み、指定された1または複数のオペレーション(例えば、ADD 5)を全ての有効化された要素に対して反復的に(または並列に)行い、結果をキャッシュにライトバックし、完了の信号をリクエスト元のコアに送り返す。いくつかの実施形態において、キャッシュ制御回路部は、有効マスクに加え、デスティネーションキャッシュラインの各要素を更新するときに用いられるべきソースオペランドを含むソースデータベクトルも受け付ける。
いくつかの実施形態においては、2つ以上のプロセッサコアが、本明細書で説明するような、最適化回路部のインスタンスおよびRAO命令キューのインスタンスを組み込む、中レベルキャッシュ(例えば、L1、L2、およびL3キャッシュを含む階層におけるL2キャッシュ)制御回路を共有する。実施形態で説明するような、最適化回路部の組み込みインスタンスは、入来するRAO命令を空間的および/または時間的に組み合わせる機会を特定して利用するためのものである。そのような実施形態における当該回路部は、上記および本明細書において説明するようなコアおよびキャッシュ制御回路部の内部に含まれる組み合わせ回路部と同様に動作する。組み合わせの機会が検出されない場合、中レベルキャッシュ制御回路は、自身のRAOリクエストキューのインスタンスにそれらをバッファし、数タイムアウトサイクルにわたってそれらの送出を遅延させることで、同じラインに別のリクエストが入って来るためのいくらかの時間を取ることを可能とし、当該回路部がそれらのリクエストを時間的および/または空間的に組み合わせるようにする。
図1は、RAO命令を処理するハードウェアの一実施形態を示す。図示するように、ストレージ103は、実行されるべきRAOOPMEMREG命令101を格納する。当該命令は、デコード回路105により受け取られる。例えば、デコード回路105は、フェッチ回路104からこの命令を受け取る。命令101は、オペコード、メモリデスティネーションを指定するデスティネーションメモリ識別子、レジスタデスティネーションを指定するデスティネーションレジスタ識別子、およびソースロケーションを指定するソースデータのためのフィールドを含む。デコード回路105は、当該命令を1または複数のオペレーションにデコードする。いくつかの実施形態において、このデコードは、実行回路(実行回路109など)により行われるべき複数のマイクロオペレーションを生成することを含む。デコード回路105はまた、命令プリフィックス(使用される場合)をデコードする。
いくつかの実施形態において、レジスタリネーミング、レジスタ割り当て、および/またはスケジューリング回路107は、1)論理オペランド値を物理オペランド値にリネームすること(例えば、いくつかの実施形態ではレジスタエイリアステーブル)、2)ステータスビットおよびフラグをデコードされた命令に割り当てること、および3)デコードされた命令を命令プール外部の実行回路での実行のために(例えば、いくつかの実施形態ではリザベーションステーションを用いて)スケジューリングすること、のうちの1または複数のための機能性を提供する。
レジスタ(レジスタファイル)および/またはメモリ108は、データを、実行回路によるオペレーションの対象となる命令のオペランドとして格納する。例示的なレジスタのタイプとしては、パックドデータレジスタ、汎用レジスタ、および浮動小数点レジスタが挙げられる。
実行回路109は、デコードされたRAOOPMEMREG命令を実行する。実行回路の一実施形態が、図5および図10A~図10Bとの関連を含め以下で図示および説明されており、これを実行回路109の1つの実施形態とする。ライトバック回路111は、デコードされたRAOOPMEMREG命令の実行の結果をコミットする。
図2は、RAO命令を行うのに用いることができるマルチコアプロセッサの部分を示すブロック図である。図示のとおり、プロセッサ200はコアクラスタ202を含み、コアクラスタ202は回路部204を含み、回路部204は、フェッチ、デコード、スケジューリング、実行、算術論理演算装置(ALU)、およびレジスタを含む。コアクラスタ202はまた、ロード/ストアユニット(LSU)206、レベル1/レベル2(L1/L2)キャッシュ208、およびバスインタフェースユニット210(BIU)を含む。プロセッサ200はまた、キャッシングアンドホームエージェント(CHA)214を含み、CHA214は、イングレス216、ストアデータバッファ(SD)218、テーブルオブリクエスト(TOR)220、ホームエージェント(HA)222、コールパイプ224、およびホームエージェント(HA)パイプ226を含む。イントラダイインターコネクト(IDI)212は、コアクラスタ202をCHA214に結合する。また、RAO命令をサービスするべくCHA214が通信するスヌープフィルタ(SF)/最終レベルキャッシュ(LLC)228も示されている。
図3は、いくつかの実施形態に係る、遠隔アトミックオペレーションの命令を実行するためのマルチプロセッサシステムの部分を示す。図示のとおり、プロセッサ370および380はそれぞれ、内蔵メモリ・I/O制御論理(「IMC」)372および382を含む。プロセッサ370およびプロセッサ380は各々、1または複数のコア374および384、キャッシングアンドホームエージェント(CHA)375および385、最終レベルキャッシュ(LLC)377および387、ならびにポイントツーポイントインタフェース376、378、388および386を含む。システム300は、チップセット390をさらに含み、チップセット390は、バス316および任意選択的なコプロセッサ338と通信するポイントツーポイントインタフェース394および398ならびに高性能インタフェース392および396を含む。
本明細書に開示の実施形態に係る、入来するRAO命令を処理するRAO命令キューおよび最適化回路部399も示されている。入来RAO命令390は、最適化回路391によりアクセスされるバッファ、レジスタ、または他の中間メモリロケーションに保持される。動作中、最適化回路391は、例えば図4A~図4Jおよび図5に関して図示および説明するように、入来RAO命令390を処理する。図示のとおり、RAO命令キュー393は、キャッシュライン単位で整理され、オペコード、デスティネーション、および任意選択的なソースデータを各々が有する複数のRAO命令を格納する。いくつかの実施形態において、各RAO命令キューエントリは、以下で論じるいくつかの開示の実施形態に従って用いられる有効マスクおよび満了タイムスタンプをさらに含む。
いくつかの実施形態において、図示のとおり、RAO命令キューおよび最適化回路部399はまた、例えば図4A~図4Jおよび図5に関して本明細書に開示の様々な実施形態において用いられる、規則的にインクリメントするシステムカウンタ392を含む。
図示するように、システム300は、RAO命令キューおよび最適化回路部399の複数の任意選択的なインスタンス399A~Dを含み、各インスタンスは、入来RAO命令を処理し、入来RAO命令をエンキュー済みRAO命令と空間的および/または時間的に組み合わせることによりシステム性能を向上する機会を利用するためのものである。命令キューおよび最適化回路部インスタンス399Aは、いくつかの実装ではそのうちの1または複数が含まれ得ない限りにおいて、破線の枠で示すように、任意選択的なものである。図示するように、RAO命令キューおよび最適化回路部399の全てのインスタンス399A~Dが、RAO命令キューおよび最適化回路部を含む。ただし、インスタンス399A~Dの各々は、RAO命令を空間的および時間的に組み合わせる機会を利用するように、実装される場所に応じてカスタマイズされるべきであることを理解されたい。
入来RAO命令およびエンキュー済みRAO命令のフォーマットについては、図6、図7A~図7B、および図8A~図8Dに関してさらに下で論じる。
システム300は、明確性のために図3には示していないが、例えば図12から図15に関して図示および議論するような追加的なコンポーネントを含む。
本明細書に開示の実施形態において、RAO命令は、システム内の複数の異なる回路において実行することができる。いくつかの実施形態において、RAO命令は、CHA214(図2)、CHA375もしくはCHA385(図3)内の回路部、チップセット390(図3)などのチップセット内の回路部、またはコプロセッサ338(図3)などの遠隔プロセッサ内の回路部などのキャッシュ制御回路により実行される。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、例えば選択回路部107(図1)により選択される。
いくつかの実施形態において、選択される実行回路は、例えばシステム300を設計するハードウェア設計者によって選択されるように、静的な選択を反映する。複数のプロセッサコア374および384の各々は、遠隔アトミック命令を実行するキャッシングホームエージェント(CHA)、例えばCHA375およびCHA385と関連付けられることがある。
換言すると、いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ハードウェア設計者により静的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ソフトウェアにより静的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ソフトウェアにより動的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、命令を実行すべき場所を示す即値を含む各命令によって制御されるとおりに、静的に選ばれる。
いくつかの実施形態において、プロセッサは、RAO命令が実行されるべき場所を示すようソフトウェアにより設定されるソフトウェアプログラミング可能な制御レジスタを含む。
いくつかの実施形態において、プロセッサは、複数の異なる命令(例えば、ADDおよびCMPXCHG)または複数の異なる命令グループについて、RAO命令が実行される場所を示すようソフトウェアにより設定される、複数の別個のソフトウェアプログラミング可能な制御レジスタを含む。
いくつかの実施形態において、プロセッサは、ハードウェアからの何らかの情報を用いて、RAO命令を実行するための最良のロケーションを予測する。そのような実施形態において、プロセッサは、(例えば、命令の一部として、制御レジスタとして、またはページテーブルエントリの一部として)ソフトウェアにより提供される制御およびハードウェアから受け取った情報の両方を用いて、RAO命令を実行すべき場所を判定する。そのような実施形態において、ソフトウェアにより提供される制御は、ディレクティブというよりもヒントに近いものである。いくつかの実施形態において、それらのアドレスに向けられるRAO命令が実行されるべき場所を示すプロパティがページテーブルエントリに追加される。
本明細書に開示の実施形態に係る遠隔アトミックオペレーションを実行するためのマルチプロセッサシステムについて、図13から図17に関して以下でさらに図示および議論する。
図4Aは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令のエンキューを示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー401は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。タイムアウトカウンタは、満了タイムスタンプとも称されることがあり、ここでエンキュー済みRAO命令は、規則的にインクリメントするシステムカウンタが満了タイムスタンプに達してこれを超過する時間までは、組み合わせの機会の恩恵を得ることができる。いくつかの実施形態において、所与のキャッシュラインについてRAO命令キューエントリに関連付けられた満了タイムスタンプは、当該所与のキャッシュラインの任意の一部に対する変更があると、例えば、特定のキャッシュライン要素に対するエンキュー済みRAO命令が当該特定のキャッシュラインに対する入来RAO命令と組み合わされたときに、予め定められた値にセットされる。
RAO命令キュー401は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。いくつかの実施形態において、RAO命令キュー401は、各キャッシュライン要素について別個のRAOオペコードを保持し、異なるオペレーションが異なる要素に対して生じることを可能とする。いくつかの実施形態において、各キャッシュライン要素について別個のタイムアウトカウンタが保持される。RAO命令キュー401の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー421は、キュー内に、キャッシュラインアドレス「g」に対するいかなるRAOリクエストもまだ有していない。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー401は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー401が連想メモリ(content-addressable memory)に格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図4Aに示すように、入来RAO命令402は、ベースアドレスが「g」に等しいキャッシュラインのバイト44の要素に「55」の値がADDされることを指定する。404において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。キャッシュライン「g」に対する保留中のRAO命令が存在しないので、RAO命令を組み合わせる機会が存在しない。408におけるエンキュー回路は、即座に入来RAO命令402をキャッシュ制御回路部へ転送するのではなく、入来リクエストをキューに追加し、組み合わせ機会を待機するためのいくらかの時間を取ることが可能となるようタイムアウトカウンタを設定する。409におけるエンキュー後の更新済みRAO命令キューは、キューに追加された入来リクエストを示す。RAO命令キュー409の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー422は、キャッシュラインg、オフセット44、13のタイムアウトカウンタに対する、55に等しいソースデータ、および0x0800に等しい有効マスクによるRAO ADD命令を保持する。その後、オペレーションは、時間的および空間的なRAO命令マージの機会の待機を継続する。
図4Bは、いくつかの実施形態に係る、入来RAO命令をRAO命令キューの既存のエンキュー済みエントリと空間的に組み合わせるエンキュー回路部を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー411は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー411は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー411は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー411が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令412は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24に「33」の値がADDされることを指定する。414において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、416において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令412と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。入来RAO命令と、合致するRAO命令との間にオーバーラップが見つからない場合、418におけるエンキュー回路部は、キャッシュライン「g」に対する入来RAO命令と既存のRAO命令とを空間的に組み合わせる。キャッシュライン「g」はここで、保留中の「オフセット44に対するADD 55」のRAO命令と、保留中の「オフセット24に対するADD 33」のRAO命令とを有するものとして示されている。いくつかの実施形態において、418におけるエンキュー回路は、即座にキャッシュライン「g」に対するエンキュー済みRAO命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「24」のRAOキューエントリについてタイムアウトカウンタを設定し、オフセット「44」のRAOキューエントリのタイムアウトカウンタを新たな値に再設定する。419におけるエンキュー後の更新済みRAO命令キューは、キューに追加された入来リクエストを示す。RAO命令キュー419の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー423は、0x0840に等しい有効マスクによるキャッシュラインアドレス「g」のオフセット44に対するADD「55」および併せてオフセット24に対するADD「33」を保持するものとして示されている。その後、オペレーションは、時間的および空間的なRAO命令マージの機会の待機を継続する。
よって、図4Bに開示する最適化回路部の実施形態は、複数のRAO命令を空間的に組み合わせる機会を検出および利用することにより、RAO命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、RAO命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のRAO命令は高レイテンシを有する場合がある(コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない)ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
図4Cは、いくつかの実施形態に係る、遠隔アトミックオペレーションを格納するリクエストキューを示すブロック図である。RAO命令キュー401(図4A)の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー421は、キュー内に、キャッシュラインアドレス「g」に対するいかなるRAOリクエストもまだ有していない。RAO命令キュー409(図4A)の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー422は、オフセット44、13のタイムアウトカウンタに対する、55に等しいソースデータ、および0x0800に等しい有効マスクによるRAO ADD命令を保持する。RAO命令キュー419(図4B)の可能な一実装を、図4Cにおいて図示および説明する。ここで、RAO命令キュー423は、0x0840に等しい有効マスクによるキャッシュラインアドレス「g」のオフセット44に対するADD「55」および併せてオフセット24に対するADD「33」を保持することが示されている。RAO命令キュー421、422、および423の各々は、限定されることなく、レジスタに、またはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー421、422、および423のうちの1または複数が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図4Dは、いくつかの実施形態に係る、入来RAO命令をRAO命令キューの既存のエンキュー済みエントリと空間的に組み合わせるエンキュー回路部を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー431は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー431は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー431は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー431が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令432は、0x3333に等しい書き込みマスクによるベースアドレスが「g」に等しいキャッシュライン全体に対する「3」の値のベクトルワイドブロードキャストADD(vector-wide broadcast-ADD)を指定する(すなわち、書き込みマスクにおける対応するビットが「1」に設定されたキャッシュライン上の各要素に値「3」が加算される)。434において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、436において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令432と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。入来RAO命令と、合致するRAO命令との間にオーバーラップが見つからない場合、438におけるエンキュー回路部は、キャッシュライン「g」に対する入来RAO命令と既存のRAO命令とを空間的に組み合わせる。キャッシュライン「g」はここで、保留中の「オフセット44に対するADD 55」と、保留中の「オフセット24に対するADD 33」と、「1」に等しいマスクビットに対応するオフセット0、4、16、20、32、36、48、および52に対する新たに追加された「ADD 3」とを有するものとして示されている。いくつかの実施形態において、エンキュー回路は、即座にキャッシュライン「g」に対するエンキュー済みRAO命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、オフセット0、4、16、20、32、36、48、および52におけるRAOキューエントリについてタイムアウトカウンタを新たな値に設定する。439におけるエンキュー後の更新済みRAO命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なRAO命令マージの機会の待機を継続する。
よって、図4Dに開示する最適化回路部の実施形態は、複数のRAO命令を空間的に組み合わせる機会を検出および利用することにより、RAO命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、RAO命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のRAO命令は高レイテンシを有する場合がある(コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない)ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
図4Eは、いくつかの実施形態に係る、入来した遠隔アトミックオペレーション命令を既存のキュー入れ済みエントリと時間的に組み合わせることを示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー441は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー441は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー441は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー441が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令442は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24に「11」の値がADDされることを指定する。444において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、446において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令442と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。キャッシュライン「g」のオフセット24に対するADDという厳密なオーバーラップが見つかった場合、448におけるエンキュー回路部は、キャッシュライン「g」に対する入来RAO命令(Add「11」)と既存のRAO命令(Add「33」)とを時間的に組み合わせる。キャッシュライン「g」はここで、保留中の「キャッシュライン「g」のオフセット24に対するADD 44」を有するものとして示されている。いくつかの実施形態において、448におけるエンキュー回路は、即座にキャッシュライン「g」に対するエンキュー済みRAO命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「24」のRAOキューエントリについてタイムアウトカウンタを設定し、オフセット「44」のRAOキューエントリのタイムアウトカウンタを新たな値に再設定する。449におけるエンキュー後の更新済みRAO命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なRAO命令マージの機会の待機を継続する。
よって、図4Eに開示する最適化回路部の実施形態は、複数のRAO命令を時間的に組み合わせる機会を検出および利用することにより、RAO命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、RAO命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のRAO命令は高レイテンシを有する場合がある(コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない)ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
図4Fは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー451は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー451は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー451は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー451が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令452は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24における値がインクリメントされることを指定する。454において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、456において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令452と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。ここで、入来RAO命令と既存のRAO命令とが部分的にオーバーラップしている。これらは、同じキャッシュラインの同じオフセットに対する、しかしADDとINCという異なるオペコードによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、458におけるエンキュー回路部は、ADDのRAO命令とINCのRAO命令とを単一のRAO命令として組み合わせる機会を捉える。特に、キャッシュライン「g」のオフセット24に対する既存の「ADD 44」のRAO命令が、同じキャッシュライン要素に対する入来した「INC」のRAO命令と組み合わされ、「ADD 45」がキャッシュライン「g」のオフセット24に書き込まれる。いくつかの実施形態において、458におけるエンキュー回路は、即座にキャッシュライン「g」に対するエンキュー済みRAO命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「24」のRAOキューエントリについてタイムアウトカウンタを設定し、オフセット「44」のRAOキューエントリのタイムアウトカウンタを新たな値に再設定する。459におけるエンキュー後の更新済みRAO命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なRAO命令マージの機会の待機を継続する。
よって、図4Fに開示する最適化回路部の実施形態は、複数のRAO命令を時間的に組み合わせる機会を検出および利用することにより、RAO命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、RAO命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のRAO命令は高レイテンシを有する場合がある(コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない)ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
図4Gは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー461は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー461は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー461は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー461が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令462は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24の値が、その値の平方根で置き換えられることを指定する。464において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、466において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令462と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。ここで、入来RAO命令と既存のRAO命令とが部分的にオーバーラップしている。これらは、同じキャッシュライン「g」の同じオフセット24に対する、しかしADDとSQRTという異なるオペコードによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、468におけるエンキュー回路部は、ADDおよびSQRTをシリアル化する。特に、キュー内に配置する場所がないので、まず命令462をストールする。次に、エンキュー回路は、既存のエンキュー済みRAO命令のタイムアウトカウンタ値に関わらず、オフセット24に対する「ADD 45」およびオフセット44に対する「ADD 55」を含む、キャッシュライン「g」に対する全てのRAO命令を即座にキャッシュ制御回路へ送る。これに応答して、キャッシュ制御回路は、アドレス「g」のキャッシュラインを読み込んで加算を行うことによりそれらのRAO命令を実行する。エンキュー回路は、キャッシュ制御回路から確認応答を受け取ると、キャッシュライン「g」のエントリをクリアアウトし、命令462を挿入する。
図4Hは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー471は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー471は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー471は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー471が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令472は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24におけるクワッドワード値に対する「ADD 999」を指定する。474において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、476において、エンキュー回路部は、キャッシュライン「g」に対する入来RAO命令472と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。ここで、入来RAO命令と既存のRAO命令とが部分的にオーバーラップしている。これらは、同じキャッシュライン「g」の同じオフセット24に対する、しかしクワッドワードとダブルワードという異なるデータ要素サイズによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、エンキュー回路部478は、これら2つのADD命令をシリアル化する。特に、キュー内に配置する場所がないので、まず命令472をストールする。次に、エンキュー回路は、既存のエンキュー済みRAO命令のタイムアウトカウンタ値に関わらず、オフセット24に対する「ADD 45」およびオフセット44に対する「ADD 55」を含む、キャッシュライン「g」に対する全てのRAO命令を即座にキャッシュ制御回路へ送る。これに応答して、キャッシュ制御回路は、アドレス「g」のキャッシュラインを読み込んで加算を行うことによりそれらのRAO命令を実行する。エンキュー回路は、キャッシュ制御回路から確認応答を受け取ると、キャッシュライン「g」のエントリをクリアアウトし、命令472を挿入する。
図4Iは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー481は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
各要素は、RAO命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ(または満了タイムスタンプ)をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
RAO命令キュー481は、表形式で整理されるものとして示されており、各行が64バイトキャッシュラインを表し、各列が4バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。RAO命令キュー481は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、RAO命令キュー481が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
図示のとおり、入来RAO命令482は、ベースアドレスが「g」に等しいキャッシュラインのオフセット24における値に対する「ADD 11」を指定する。484において、エンキュー回路部は、キャッシュライン「g」に対する任意のRAO命令がキュー内で既に保留中であるか否かを判定する。しかしながら、ここで、「ADD 45」のRAO命令がRAO命令キュー内で保留中であるが、そのタイムアウトカウンタは満了しており、これはキャッシュライン「g」の命令が既にキャッシュ制御回路へ送られたことを示す。484における判定に関して、エンキュー回路部は、既存の「ADD 45」のRAO命令を無効として扱い、入来RAO命令と既存のRAO命令とを空間的または時間的に組み合わせることを控える。この部分的なオーバーラップのシナリオにおいて、488におけるエンキュー回路部は、RAO命令482をキャッシュライン「g」に対する以前の命令とシリアル化する。エンキュー回路は、キャッシュライン「g」に対する以前の命令について確認応答をキャッシュ制御回路から受け取ると、キャッシュライン「g」のエントリをクリアアウトし、命令482を挿入する。
図4Jは、いくつかの実施形態に係る、中央キャッシュ制御回路に転送される遠隔アトミックオペレーション命令を示すブロックフロー図である。図示のとおり、エンキュー前のRAO命令キュー491は、エンキュー済みRAO命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたRAO命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたRAOオペコード、およびソースデータが存在する場合、これらをさらに含む。
キャッシュライン「g」に対するエンキュー済みRAO命令に関して、エンキュー回路は、何らかの時点で、例えばそのキャッシュラインについてエンキューされているRAO命令のタイムアウトカウンタのうち1または複数が満了すると、RAO命令を、それらが行われることになるキャッシュ制御回路へ送る。いくつかの実施形態において、エンキュー回路部は、492に示すように、RAO命令のサブセットを1つのメッセージでキャッシュ制御回路へ送る。いくつかの実施形態において、このサブセットは常に、当該キャッシュラインについてのエンキュー済み命令の完全なセットである。いくつかの実施形態において、エンキュー回路部は、命令のサブセットを複数のメッセージでキャッシュ制御回路へ送る。このとき、最後のメッセージを除く全てのメッセージに「この後も継続(MORE ON THE WAY)」信号を含める。
図5は、いくつかの実施形態に係る、受け取った遠隔アトミックオペレーション命令の処理を示すブロック図である。開始後、502において、エンキュー回路部は、オペコード、デスティネーション識別子、およびソースデータを含む命令を受け取る。504において、エンキュー回路部は、各エントリが命令および満了タイムスタンプを保持する、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューをスキャンする。506において、エンキュー回路部は、受け取ったRAO命令と同じデスティネーションキャッシュラインを特定する、何らかの合致するRAO命令を検出する。508において、エンキュー回路部は、合致する既存のRAO命令が存在しない場合、受け取ったRAO命令を命令キューにエンキューし、関連付けられた満了タイムスタンプを初期化する。510において、エンキュー回路部は、エンキュー済みの合致するRAO命令が存在する場合、受け取ったRAO命令と既存のエンキュー済みRAO命令との間のオーバーラップの度合いを判定する。いくつかの実施形態において、オーバーラップ判定を行うべく、エンキュー回路部は、受け取ったRAO命令および既存のRAO命令のオペコード、要素サイズ、キャッシュラインアドレス、およびキャッシュラインオフセットを比較する。512において、エンキュー回路は、オーバーラップが存在しない場合、例えば図4B~図4Cに関して図示および説明するように、受け取った命令と合致する命令とを空間的に組み合わせる。514において、エンキュー回路は、厳密なオーバーラップが存在する場合、例えば図4Dに関して図示および説明するように、受け取った命令と合致する命令とを時間的に組み合わせる。516において、エンキュー回路部は、部分的なオーバーラップが存在する場合、例えば図4E~図4Hに関して図示および説明するように、特別な処理を行う。
遠隔アトミックオペレーション命令を実行するための例示的な実行回路について、以下で図10Aから図12に関してさらに議論および図示する。
[RAO命令が実行される場所]
本明細書の様々な実施形態において命令として定義される遠隔アトミックオペレーションは、マルチプロセッサのコアのうちの1または複数、プライベートキャッシュ、共有キャッシュもしくはキャッシングアンドホームエージェント(CHA)、メモリコントローラ、または遠隔コアなど、プロセッサ内の多様なロケーションにおいて行われ得るものとして定義される。RAO命令は、シングルソケットシステムおよびマルチソケットシステムの両方を対象とする。
[RAO命令のタイプ]
いくつかの実施形態において、命令の実行は、プロセッサがメモリロケーションのコンテンツを読み込み、読み込んだデータを変更し、結果を当該メモリロケーションにライトバックする、リード・モディファイ・ライトを伴う。任意選択的なパラメータを、変更ステージの間に行われるオペレーションを変更するように機能させることができる。
RAO命令には、アトミックに更新されたメモリロケーションを唯一の出力とするものと、デスティネーションレジスタも有するものとの、2つの異なるクラスが存在する。この差異には、マイクロアーキテクチャ上の影響がある。
アトミックに更新されたメモリロケーションを唯一の出力とするRAO命令は、弱く順序付けられる場合がある。この弱い順序付けに起因して、そのようなRAO命令は、オペレーションがメモリシステムに発行されると、オペレーションの完了を待機することなく速やかにリタイアされる。一方、レジスタデスティネーションを有する命令は、同様にオペレーションがメモリシステムに発行されると速やかに完了する場合があるが、いずれのコンシューマに対してもデータ依存関係を実効化するべく、コアは依然として、命令がそのデスティネーションレジスタの値を生成していることをトラッキングしなければならない。この理由から、いくつかの実施形態において、レジスタデスティネーションを有する命令は、強く順序付けられるものとして扱われる。
全てのRAO命令は、メモリデスティネーションおよび汎用レジスタオペランドを取る。それに加えて、(例えばRAXにおいて)追加の暗黙的なオペランドを取るものもある。
本明細書に開示の実施形態は、以下の特定のオペレーションを包含し、またその他のものにも拡張可能である。
[レジスタデスティネーションなし(すなわち、OP memdest, reg)]
RAO_ADD:整数加算
RAO_SUB:整数減算
RAO_ADD_SAT:整数飽和加算
RAO_SUB_FLR:床ありの整数減算
RAO_AND:論理積
RAO_OR:論理和
RAO_XOR:排他的論理和
[レジスタデスティネーションありのRAO命令(すなわち、OP memdest, regdest, reg)]
RAO_ADD_THR:閾値ありの整数加算(regデスティネーションは単一のビットフラグ)
RAO_SUB_THR:閾値ありの整数減算(regデスティネーションは単一のビットフラグ)
RAO_XADD:整数交換および加算
RAO_XINC:整数交換およびインクリメント
RAO_XDEC:整数交換およびデクリメント
RAO_XCHG:交換
RAO_CMPXCHG:比較および交換
[RAO命令フォーマット]
図6は、いくつかの実施形態に係る、遠隔アトミックオペレーションの命令のフォーマットを示すブロック図である。図示のとおり、RAO命令600は、オペコード602、任意選択的なサイズ識別子608および618(任意選択的な命令フィールドを破線で囲ったボックスに示す)、デスティネーション識別子612、ならびにソースデータ614を含む。
いくつかの実施形態において、任意選択的なサイズ識別子608および618は、1バイト、2バイト、4バイト、または8バイトといった各ソースベクトル要素のサイズに対応する、それぞれ「B」、「W」、「D」、および「Q」といったプリフィックスまたはサフィックスなど、オペコードに含まれる。いくつかの実施形態において、任意選択的なサイズ識別子608は、半精度(2バイト)、単精度(4バイト)、倍精度(8バイト)、四倍精度(16バイト)といった各ソースベクトル要素の精度レベルに対応する、それぞれ「H」、「S」、「D」、「Q」、および「E」といったプリフィックスまたはサフィックスなど、オペコードに含まれる。他の実施形態において、任意選択的なサイズ識別子6018は、ソースベクトル要素のサイズおよび/または精度レベルを指定する命令パラメータまたはオペランドである。
いくつかの実施形態において、ソースデータ614は、プロセッサのレジスタファイルに含まれる複数のレジスタのうちの1つなどのソースレジスタを指定する。図9およびさらに下の関連する説明により、プロセッサのレジスタファイルの一実施形態を説明する。いくつかの実施形態において、ソースデータ614は、メモリロケーションを特定する。いくつかの実施形態において、ソースデータ614は、即値を特定する。
デスティネーション識別子612は、例えば図5に関連して以下で説明するいくつかの実施形態に係る実行結果を書き込む先であるプロセッサのレジスタファイルのベクトルレジスタまたはメモリロケーションのいずれかを特定する。
遠隔アトミックオペレーション命令の例示的な命令フォーマットについて、以下で図7Aから図8Dに関してさらに議論および図示する。
[命令セット]
命令セットは、1または複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、行われるオペレーション(例えばオペコード)および当該オペレーションが行われる対象となるオペランド、および/または他のデータフィールド(例えばマスク)を指定する様々なフィールド(例えばビットの数、ビットのロケーション)を定義してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義付けによって、さらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、当該命令フォーマットのフィールドの種々のサブセットを有するものとして定義されてよく(含まれるフィールドは通常同じ順序であるが、少なくともいくつかは、含まれるフィールドの数がより少ないために異なるビット位置を有する)、および/または、異なって解釈される所与のフィールドを有するものとして定義されてよい。よって、ISAの各命令は、所与の命令フォーマットを用いて(また、定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つにおいて)表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、当該オペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有する。命令ストリーム内でのこのADD命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定のコンテンツを有することになる。アドバンスト・ベクトル・エクステンション(AVX)(AVX1およびAVX2)と称されるSIMD拡張のセット、およびベクトル・エクステンション(VEX)のコーディング方式の使用が、リリースおよび/または公開されている(例えば、2014年9月のIntel(登録商標) 64 and IA-32 Architectures Software Developer's Manual、および2014年10月のIntel(登録商標) Advanced Vector Extensions Programming Referenceを参照)。
[例示的な命令フォーマット]
本明細書で説明する命令の実施形態は、種々のフォーマットにおいて具現化されてよい。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてよいが、詳述されているものに限定されない。
[汎用ベクトルフレンドリ命令フォーマット]
ベクトルフレンドリ命令フォーマットとは、ベクトル命令に適した命令フォーマットである(例えば、ベクトルオペレーションに特有の特定のフィールドが存在する)。ベクトルオペレーションおよびスカラオペレーションの両方がベクトルフレンドリ命令フォーマットによってサポートされる実施形態が説明されているが、代替的な実施形態は、ベクトルフレンドリ命令フォーマットでのベクトルオペレーションのみを用いる。
図7A~図7Bは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。 図7Aは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、一方で図7Bは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトルフレンドリ命令フォーマット700について、クラスA命令テンプレートおよびクラスB命令テンプレートが定義され、これらの両方が、メモリアクセスなし705命令テンプレートおよびメモリアクセス720命令テンプレートを含む。ベクトルフレンドリ命令フォーマットの文脈における汎用という用語は、いずれの特定の命令セットにも拘束されない命令フォーマットを指す。
ベクトルフレンドリ命令フォーマットが、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バイトのベクトルオペランド)をサポートしてよい。
図7AのクラスA命令テンプレートは、1)メモリアクセスなし705命令テンプレート内に示す、メモリアクセスなし・フル丸め制御タイプオペレーション710命令テンプレート、およびメモリアクセスなし・データ変換タイプオペレーション715命令テンプレート、ならびに2)メモリアクセス720命令テンプレート内に示す、メモリアクセス・テンポラル725命令テンプレート、およびメモリアクセス・ノンテンポラル730命令テンプレートを含む。図7BのクラスB命令テンプレートは、1)メモリアクセスなし705命令テンプレート内に示す、メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション712命令テンプレート、およびメモリアクセスなし・書き込みマスク制御・vsizeタイプオペレーション717命令テンプレート、ならびに2)メモリアクセス720命令テンプレート内に示す、メモリアクセス・書き込みマスク制御727命令テンプレートを含む。
汎用ベクトルフレンドリ命令フォーマット700は、図7A~図7Bに示す順序で次に列挙する以下のフィールドを含む。
フォーマットフィールド740:このフィールドの特定の値(命令フォーマット識別子の値)は、ベクトルフレンドリ命令フォーマットを一意に特定し、よって命令ストリームにおける当該ベクトルフレンドリ命令フォーマットでの命令の発生を特定する。したがって、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには不要であるという点で、任意選択的である。
ベースオペレーションフィールド742:そのコンテンツは、異なるベースオペレーションを区別する。
レジスタインデックスフィールド744:そのコンテンツは、直接的にまたはアドレス生成を介して、ソースおよびデスティネーションオペランドがレジスタ内にあるかまたはメモリ内にあるかを問わず、それらのロケーションを指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。1つの実施形態において、Nは3つのソースおよび1つのデスティネーションレジスタまでであってよいが、代替的な実施形態は、より多数またはより少数のソースおよびデスティネーションレジスタをサポートしてよい(例えば、2つのソースまでをサポートしてもよく、このときこれらのソースのうち1つはデスティネーションとしても働き、3つのソースまでをサポートしてもよく、このときこれらのソースのうち1つはデスティネーションとしても働き、2つのソースおよび1つのデスティネーションまでをサポートしてもよい。)
変更子フィールド746:そのコンテンツは、メモリアクセスを指定する汎用ベクトル命令フォーマットでの命令の発生を、そうでないものと区別する、すなわち、メモリアクセスなし705命令テンプレートとメモリアクセス720命令テンプレートとを区別する。メモリアクセスオペレーションは、(場合によってはレジスタ内の値を用いてソースおよび/またはデスティネーションアドレスを指定して)メモリ階層に対して読み込みおよび/または書き込みを行い、一方で非メモリアクセスオペレーションはこれを行わない(例えば、ソースおよびデスティネーションがレジスタである)。1つの実施形態において、このフィールドはまた、メモリアドレス算出を行うための3つの異なる態様の別を選択するが、代替的な実施形態は、メモリアドレス算出を行うための、より多数の、より少数の、または異なる態様をサポートしてよい。
オーグメンテーション(augmentation)オペレーションフィールド750:そのコンテンツは、ベースオペレーションに加えて、多様な異なるオペレーションのうちどれが行われるべきかを区別する。このフィールドは、コンテキスト固有である。本発明の1つの実施形態において、このフィールドは、クラスフィールド768、アルファフィールド752、およびベータフィールド754に分割される。オーグメンテーションオペレーションフィールド750は、共通グループの複数のオペレーションを、2つ、3つ、または4つの命令ではなく、単一の命令で行うことを可能とする。
スケールフィールド760:そのコンテンツは、メモリアドレス生成のためのインデックスフィールドのコンテンツのスケーリングを可能とする(例えば、2スケール×インデックス+ベースを用いるアドレス生成について)。
変位フィールド762A:そのコンテンツは、メモリアドレス生成の一部として用いられる(例えば、2スケール×インデックス+ベース+変位を用いるアドレス生成について)。
変位ファクタフィールド762B(なお、変位フィールド762Aが変位ファクタフィールド762Bの直上に並置されているが、これはその一方または他方が用いられることを示す):そのコンテンツは、アドレス生成の一部として用いられ、メモリアクセスのサイズ(N)によりスケーリングされるべき変位ファクタを指定し、ここでNは、当該メモリアクセスにおけるバイト数である(例えば、2スケール×インデックス+ベース+スケーリングされた変位を用いるアドレス生成について)。冗長の下位ビットは無視され、したがって、変位ファクタフィールドのコンテンツにメモリオペランド合計サイズ(N)を乗算することで、実効アドレスの算出に用いられる最終的な変位を生成する。Nの値は、フルオペコードフィールド774(本明細書で後述)およびデータ操作フィールド754Cに基づいて、ランタイムでプロセッサハードウェアによって決定される。変位フィールド762Aおよび変位ファクタフィールド762Bは、これらがメモリアクセスなし705命令テンプレートについては用いられないという点で任意選択的であり、および/または、異なる実施形態は、これら2つのうち一方のみを実装してよく、またはいずれも実装しなくてもよい。
データ要素幅フィールド764:そのコンテンツは、複数のデータ要素幅のうちどれが用いられるべきかを区別する(いくつかの実施形態では全ての命令について、他の実施形態では一部の命令のみについて)。このフィールドは、1つのデータ要素幅のみがサポートされる、および/または複数のデータ要素幅が何らかの態様のオペコードを用いてサポートされる場合は不要であるという点で、任意選択的である。
書き込みマスクフィールド770:そのコンテンツは、データ要素位置ごとの単位で、デスティネーションベクトルオペランドにおけるそのデータ要素位置がベースオペレーションおよびオーグメンテーションオペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージ式書き込みマスキングをサポートし、一方でクラスB命令テンプレートは、マージ式書き込みマスキングおよびゼロ化式書き込みマスキングの両方をサポートする。マージ式の場合、ベクトルマスクは、デスティネーションにおける任意の要素セットが、(ベースオペレーションおよびオーグメンテーションオペレーションにより指定される)任意のオペレーションの実行中に更新から保護されることを可能とし、他の1つの実施形態においては、対応するマスクビットが0を有するデスティネーションの各要素の古い値が保たれる。これに対し、ゼロ化式の場合、ベクトルマスクは、デスティネーションにおける任意の要素セットが、(ベースオペレーションおよびオーグメンテーションオペレーションにより指定される)任意のオペレーションの実行中にゼロ化されることを可能とし、1つの実施形態においては、対応するマスクビットが0値を有する場合にデスティネーションの要素が0に設定される。この機能性のサブセットとして、行われているオペレーションのベクトル長(すなわち、変更されている複数の要素の、最初の要素から最後の要素までのスパン)を制御する機能がある。ただし、変更されるこれらの要素は連続したものである必要はない。よって、書き込みマスクフィールド770は、ロード、ストア、算術的なもの、論理的なもの等を含む部分的なベクトルオペレーションを可能とする。書き込みマスクフィールド770のコンテンツが、複数の書き込みマスクレジスタのうち、用いられるべき書き込みマスクを含むものを選択する(よって、書き込みマスクフィールド770のコンテンツが、行われるべきそのマスキングを間接的に特定する)本発明の実施形態が説明されているが、代替的な実施形態は、これに代えてまたは加えて、マスク書き込みフィールド770のコンテンツが、行われるべきマスキングを直接的に指定することを可能とする。
即値フィールド772:そのコンテンツは、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装では存在せず、即値を用いない命令には存在しないという点で、任意選択的である。
クラスフィールド768:そのコンテンツは、異なるクラスの命令を区別する。図7A~図7Bに関連して、このフィールドのコンテンツは、クラスA命令とクラスB命令との別を選択する。図7A~図7Bにおいて、角の丸い四角形を用いて、特定の値がフィールド(例えば、図7A~図7Bにおける、クラスフィールド768のそれぞれクラスA 768AおよびクラスB 768B)に存在することを示す。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス705命令テンプレートの場合において、アルファフィールド752は、RSフィールド752Aとして解釈され、そのコンテンツは、複数の異なるオーグメンテーションオペレーションタイプのうちどれが行われるべきかを区別し(例えば、丸め752A.1およびデータ変換752A.2が、それぞれ、メモリアクセスなし・丸めタイプオペレーション710命令テンプレートおよびメモリアクセスなし・データ変換タイプオペレーション715命令テンプレートについて指定される)、一方でベータフィールド754は、指定されたタイプのオペレーションのうちどれが行われるべきかを区別する。メモリアクセスなし705命令テンプレートにおいては、スケールフィールド760、変位フィールド762A、および変位スケールフィールド762Bが存在しない。
[メモリアクセスなし命令テンプレート:フル丸め制御タイプオペレーション]
メモリアクセスなし・フル丸め制御タイプオペレーション710命令テンプレートにおいて、ベータフィールド754は、丸め制御フィールド754Aとして解釈され、そのコンテンツは、静的な丸めを提供する。説明されている本発明の実施形態において、丸め制御フィールド754Aは、全浮動小数点例外抑制(SAE)フィールド756および丸めオペレーション制御フィールド758を含むが、代替的な実施形態は、これらのコンセプトの両方をサポートしてよく、同じフィールドにエンコードしてよく、またはこれらのコンセプト/フィールドの一方または他方のみを有してよい(例えば、丸めオペレーション制御フィールド758のみを有してよい)。
SAEフィールド756:そのコンテンツは、例外イベントレポートを無効化するか否かを区別する。SAEフィールド756のコンテンツが、抑制が有効化されていることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも起こさない。
丸めオペレーション制御フィールド758:そのコンテンツは、一群の丸めオペレーションのうちどれを行うべきか(例えば、切り上げ、切り捨て、0への丸めおよび最近接丸め)を区別する。よって、丸めオペレーション制御フィールド758は、命令ごとの単位で丸めモードを変えることを可能とする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の1つの実施形態では、丸めオペレーション制御フィールド750のコンテンツが、そのレジスタ値をオーバーライドする。
[メモリアクセスなし命令テンプレート:データ変換タイプオペレーション]
メモリアクセスなしデータ変換タイプオペレーション715命令テンプレートにおいて、ベータフィールド754は、データ変換フィールド754Bとして解釈され、そのコンテンツは、複数のデータ変換のうちどれが行われるべきか(例えば、データ変換なし、スウィズル、ブロードキャスト)を区別する。
クラスAのメモリアクセス720命令テンプレートの場合において、アルファフィールド752は、追い出しヒントフィールド752Bとして解釈され、そのコンテンツは、追い出しヒントのうちどれが用いられるべきかを区別し(図7Aにおいて、テンポラル752B.1およびノンテンポラル752B.2が、それぞれ、メモリアクセス・テンポラル725命令テンプレートおよびメモリアクセス・ノンテンポラル730命令テンプレートについて指定される)、一方でベータフィールド754は、データ操作フィールド754Cとして解釈され、そのコンテンツは、複数のデータ操作オペレーション(プリミティブとしても知られる)のうちどれが行われるべきか(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)を区別する。メモリアクセス720命令テンプレートは、スケールフィールド760、および任意選択的に変位フィールド762Aまたは変位スケールフィールド762Bを含む。
ベクトルメモリ命令は、変換サポートによってメモリからのベクトルロードおよびメモリへのベクトルストアを行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データをデータ要素単位でメモリから/メモリへ移送し、ここで実際に移送される要素は、書き込みマスクとして選択されたベクトルマスクのコンテンツによって規定される。
[メモリアクセス命令テンプレート:テンポラル]
テンポラルデータとは、キャッシュによる恩恵を得るのに十分早く再使用される可能性が高いデータである。ただし、これはヒントであり、種々のプロセッサが、このヒントを全く無視することを含めて、これを種々の態様で実装してよい。
[メモリアクセス命令テンプレート:ノンテンポラル]
ノンテンポラルデータとは、一次キャッシュでキャッシュすることによる恩恵を得るのに十分早く再使用される可能性が低いデータであり、これには追い出しの優先度が与えられるべきである。ただし、これはヒントであり、種々のプロセッサが、このヒントを全く無視することを含めて、これを種々の態様で実装してよい。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合において、アルファフィールド752は、書き込みマスク制御(Z)フィールド752Cとして解釈され、そのコンテンツは、書き込みマスクフィールド770によって制御される書き込みマスキングがマージ式であるべきかまたはゼロ化式であるべきかを区別する。
クラスBの非メモリアクセス705命令テンプレートの場合において、ベータフィールド754の一部は、RLフィールド757Aとして解釈され、そのコンテンツは、複数の異なるオーグメンテーションオペレーションタイプのうちどれが行われるべきかを区別し(例えば、丸め757A.1およびベクトル長(VSIZE)757A.2が、それぞれ、メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション712命令テンプレートおよびメモリアクセスなし・書き込みマスク制御・VSIZEタイプオペレーション717命令テンプレートについて指定される)、一方でベータフィールド754の残りは、指定されたタイプのオペレーションのうちどれが行われるべきかを区別する。メモリアクセスなし705命令テンプレートにおいては、スケールフィールド760、変位フィールド762A、および変位スケールフィールド762Bが存在しない。
メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション710命令テンプレートにおいて、ベータフィールド754の残りは、丸めオペレーションフィールド759Aとして解釈され、例外イベントレポートは無効化される(所与の命令は、いかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも起こさない)。
丸めオペレーション制御フィールド759A:丸めオペレーション制御フィールド758と同様に、そのコンテンツは、一群の丸めオペレーションのうちどれを行うべきか(例えば、切り上げ、切り捨て、0への丸めおよび最近接丸め)を区別する。よって、丸めオペレーション制御フィールド759Aは、命令ごとの単位で丸めモードを変えることを可能とする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の1つの実施形態では、丸めオペレーション制御フィールド750のコンテンツが、そのレジスタ値をオーバーライドする。
メモリアクセスなし・書き込みマスク制御・VSIZEタイプオペレーション717命令テンプレートにおいて、ベータフィールド754の残りは、ベクトル長フィールド759Bとして解釈され、そのコンテンツは、複数のデータベクトル長のうちどれに対して行われるべきか(例えば、128、256、または512バイト)を区別する。
クラスBのメモリアクセス720命令テンプレートの場合において、ベータフィールド754の一部は、ブロードキャストフィールド757Bとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが行われるべきか否かを区別し、一方でベータフィールド754の残りは、ベクトル長フィールド759Bとして解釈される。メモリアクセス720命令テンプレートは、スケールフィールド760、および任意選択的に変位フィールド762Aまたは変位スケールフィールド762Bを含む。
汎用ベクトルフレンドリ命令フォーマット700に関して、フルオペコードフィールド774は、フォーマットフィールド740と、ベースオペレーションフィールド742と、データ要素幅フィールド764とを含むものとして示されている。フルオペコードフィールド774がこれらのフィールドの全てを含む1つの実施形態が示されているが、これらの全てをサポートしない実施形態においては、フルオペコードフィールド774は、これらのフィールドの全てよりも少数のフィールドを含む。フルオペコードフィールド774は、オペレーションコード(オペコード)を提供する。
オーグメンテーションオペレーションフィールド750、データ要素幅フィールド764、および書き込みマスクフィールド770は、これらの特徴が汎用ベクトルフレンドリ命令フォーマットにおいて命令ごとの単位で指定されることを可能とする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、複数の異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、分類された命令を形成する。
クラスAおよびクラスBの範囲内に見出される様々な命令テンプレートは、種々の状況において有利である。本発明のいくつかの実施形態において、種々のプロセッサまたはプロセッサ内の種々のコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートするものであってよい。例として、汎用コンピューティングを用途とする高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、グラフィクスおよび/または科学技術(スループット)コンピューティングを主な用途とするコアは、クラスAのみをサポートしてよく、これら両方を用途とするコアは、両方をサポートしてよい(勿論、両方のクラスに属するテンプレートおよび命令の何らかの混合を有するが、両方のクラスに属する全てのテンプレートおよび命令を有しないコアも、本発明の範囲内である)。また、単一のプロセッサは複数のコアを含んでよく、その全てが同じクラスをサポートする、または異なるコアは異なるクラスをサポートする。例として、別個のグラフィクスコアおよび汎用コアを有するプロセッサにおいて、グラフィクスおよび/または科学技術コンピューティングを主な用途とするグラフィクスコアのうちの1つは、クラスAのみをサポートしてよく、一方で汎用コアのうちの1または複数は、クラスBのみをサポートする、汎用コンピューティングを用途とするアウトオブオーダ実行およびレジスタリネーミングを伴う高性能汎用コアであってよい。別個のグラフィクスコアを有さない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。勿論、本発明の種々の実施形態において、一方のクラスに属する特徴が、他方のクラスに実装されてもよい。高水準言語で記述されるプログラムは、1)実行用のターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または2)全クラスの命令の種々の組み合わせを用いて記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによりサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、種々多様な実行可能な形式にされる(例えば、ジャストインタイム方式でコンパイルされる、または静的にコンパイルされる)こととなる。
[例示的な特定ベクトルフレンドリ命令フォーマット]
図8Aは、本発明の実施形態に係る、例示的な特定ベクトルフレンドリ命令フォーマットを示すブロック図である。図8Aは、フィールドのロケーション、サイズ、解釈、および順序、ならびにそれらのフィールドのうちのいくつかにおける値を指定するという点で特定のものである、特定ベクトルフレンドリ命令フォーマット800を示す。特定ベクトルフレンドリ命令フォーマット800は、x86命令セットを拡張するよう用いられてよく、よってこれらのフィールドのうちのいくつかは、既存のx86命令セットおよびその拡張(例えばAVX)で用いられるものと同様または同じである。このフォーマットは、拡張を伴う既存のx86命令セットのプリフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと整合性を保っている。図7Aまたは図7Bの各フィールドに図8Aの各フィールドをマッピングしたものを示す。
本発明の実施形態は、例示の目的で、汎用ベクトルフレンドリ命令フォーマット700の文脈において特定ベクトルフレンドリ命令フォーマット800に関連して説明されているが、本発明は、それが要請される場合を除き、特定ベクトルフレンドリ命令フォーマット800に限定されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット700は、様々なフィールドについて多様なあり得るサイズを想定しており、一方で特定ベクトルフレンドリ命令フォーマット800は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド764が特定ベクトルフレンドリ命令フォーマット800における1ビットフィールドとして示されているが、本発明はこれに限定されるものではない(すなわち、汎用ベクトルフレンドリ命令フォーマット700は、その他のサイズのデータ要素幅フィールド764も想定する)。
汎用ベクトルフレンドリ命令フォーマット700は、図8Aに示す順序で次に列挙する以下のフィールドを含む。
EVEXプリフィックス(バイト0~3)802:4バイト形式でエンコードされる。
フォーマットフィールド740(EVEXバイト0、ビット[7:0]):第1のバイト(EVEXバイト0)は、フォーマットフィールド740であり、0x62(本発明の1つの実施形態における、ベクトルフレンドリ命令フォーマットを区別するのに用いられる固有の値)を含む。
第2~第4のバイト(EVEXバイト1~3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド805(EVEXバイト1、ビット[7-5]):EVEX.Rビットフィールド(EVEXバイト1、ビット[7]―R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]―X)、および757BEXバイト1、ビット[5]―B)からなる。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のようにレジスタインデックスの下位3ビットをエンコードし(rrr、xxx、およびbbb)、それにより、EVEX.R、EVEX.XおよびEVEX.Bを加算することによってRrrr、Xxxx、およびBbbbが形成されてよい。
REX'フィールド710:これは、REX'フィールド710の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]―R')である。本発明の1つの実施形態において、このビットは、以下に示す他のものと併せて、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードにおいて)区別するよう、ビット反転フォーマットで格納されるが、MOD R/Mフィールド(以下で説明)においてMODフィールドにおける11の値を受け付けない。本発明の代替的な実施形態は、このビットおよび以下の他に示されるビットを反転フォーマットで格納しない。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせることにより、R'Rrrrが形成される。
オペコードマップフィールド815(EVEXバイト1、ビット[3:0]―mmmm):そのコンテンツは、暗黙的に示される先頭オペコードバイト(0F、0F 38、または0F 3)をエンコードする。
データ要素幅フィールド764(EVEXバイト2、ビット[7]―W):表記EVEX.Wにより表される。EVEX.Wは、データ型の粒度(サイズ)を定義するのに用いられる(32ビットデータ要素または64ビットデータ要素のいずれか)。
EVEX.vvvv820(EVEXバイト2、ビット[6:3]―vvvv):EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令について有効である。2)EVEX.vvvvは、特定のベクトルシフトについて1の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、当該フィールドは予約されており、1111bを含むはずである。よって、EVEX.vvvvフィールド820は、反転(1の補数)形式で格納される第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、指定子サイズを32個のレジスタに拡張するべく、追加の異なるEVEXビットフィールドが用いられる。
EVEX.U768クラスフィールド(EVEXバイト2、ビット[2]―U):EVEX.U=0である場合、これはクラスAまたはEVEX.U0を示し、EVEX.U=1である場合、これはクラスBまたはEVEX.U1を示す。
プリフィックスエンコードフィールド825(EVEXバイト2、ビット[1:0]―pp):ベースオペレーションフィールドの追加的なビットを提供する。EVEXプリフィックスフォーマットにおけるレガシSSE命令のサポートを提供することに加え、これはまた、SIMDプリフィックスをコンパクト化するという利点を有する(EVEXプリフィックスは、SIMDプリフィックスを表現するのに1バイトを必要とするのではなく、2ビットのみを必要とする)。1つの実施形態において、レガシフォーマットおよびEVEXプリフィックスフォーマットの両方においてSIMDプリフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするべく、これらのレガシSIMDプリフィックスは、SIMDプリフィックスエンコードフィールドにエンコードされ、ランタイムで、デコーダのPLAに提供される前にレガシSIMDプリフィックスに展開される(これによりPLAは、これらのレガシ命令のレガシフォーマットおよびEVEXフォーマットの両方を変更なしで実行することができる)。より新たな命令は、EVEXプリフィックスエンコードフィールドのコンテンツをオペコード拡張として直接的に用いることができるであろうが、特定の実施形態は、整合のために同様に展開を行うが、これらのレガシSIMDプリフィックスが異なる意味を指定することを可能とする。代替的な実施形態は、2ビットSIMDプリフィックスのエンコードをサポートするよう、よって展開を必要としなくなるよう、PLAを再設計してよい。
アルファフィールド752(EVEXバイト3、ビット[7]―EH、またEVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、およびEVEX.Nとしても知られ、またαで示される):前述のとおり、このフィールドはコンテキスト固有である。
ベータフィールド754(EVEXバイト3、ビット[6:4]―SSS、またEVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、またβββで示される):前述のとおり、このフィールドはコンテキスト固有である。
REX'フィールド710:これは、REX'フィールドの残部であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]―V')である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
書き込みマスクフィールド770(EVEXバイト3、ビット[2:0]―kkk):そのコンテンツは、前述のとおり、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の1つの実施形態において、特定の値EVEX.kkk=000は、書き込みマスクが特定の命令に用いられないことを示唆する特別な挙動を有する(これは、全て1にハードワイヤード接続された書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの使用を含む多様な態様で実装されてよい)。
リアルオペコードフィールド830(バイト4)は、オペコードバイトとしても知られる。オペコードの一部が、このフィールドで指定される。
MOD R/Mフィールド840(バイト5)は、MODフィールド842、Regフィールド844、およびR/Mフィールド846を含む。前述のとおり、MODフィールド842のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Regフィールド844の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする、またはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられないという2つの状況に要約することができる。R/Mフィールド846の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含んでよい。
スケール・インデックス・ベース(SIB)バイト(バイト6):前述のとおり、スケールフィールド750のコンテンツは、メモリアドレス生成に用いられる。SIB.xxx854およびSIB.bbb856:これらのフィールドのコンテンツは、レジスタインデックスXxxxおよびBbbbに関して既に言及した。
変位フィールド762A(バイト7-10):MODフィールド842が10を含む場合、バイト7-10は、変位フィールド762Aであり、これはレガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位ファクタフィールド762B(バイト7):MODフィールド842が01を含む場合、バイト7は変位ファクタフィールド762Bである。このフィールドのロケーションは、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は符号拡張されるので、-128から127バイトのオフセットの間でのみアドレス指定が可能である。64バイトキャッシュラインに関しては、disp8は、-128、-64、0、および64という4つの実際に有用な値にのみ設定可能な8ビットを用いる。より大きな範囲が多くの場合必要となるので、disp32が用いられるが、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位ファクタフィールド762Bは、disp8の再解釈であり、変位ファクタフィールド762Bを用いる場合、実際の変位は、変位ファクタフィールドのコンテンツをメモリオペランドアクセスのサイズ(N)で乗算したものによって決定される。このタイプの変位は、disp8*Nと称される。これにより、平均命令長が小さくなる(変位に用いられる単一バイトであるが、範囲がはるかに広くなる)。このように圧縮された変位により、実効的な変位がメモリアクセスの粒度の倍数となり、したがってアドレスオフセットの冗長の下位ビットがエンコードされる必要がなくなることが想定される。換言すると、変位ファクタフィールド762Bが、レガシx86命令セットの8ビット変位と置き換わる。よって、変位ファクタフィールド762Bは、disp8がdisp8*Nにオーバーロードされる点のみを除けば、x86命令セットの8ビット変位と同じようにエンコードされる(ゆえに、ModRM/SIBのエンコードルールに変更はない)。換言すると、エンコードルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを得るには、メモリオペランドのサイズによって変位をスケーリングする必要がある)。即値フィールド772は、前述のとおりに機能する。
[フルオペコードフィールド]
図8Bは、本発明の1つの実施形態に係る、フルオペコードフィールド774を構成する特定ベクトルフレンドリ命令フォーマット800のフィールドを示すブロック図である。具体的には、フルオペコードフィールド774は、フォーマットフィールド740、ベースオペレーションフィールド742、およびデータ要素幅(W)フィールド764を含む。ベースオペレーションフィールド742は、プリフィックスエンコードフィールド825、オペコードマップフィールド815、およびリアルオペコードフィールド830を含む。
[レジスタインデックスフィールド]
図8Cは、本発明の1つの実施形態に係る、レジスタインデックスフィールド744を構成する特定ベクトルフレンドリ命令フォーマット800のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド744は、REXフィールド805、REX'フィールド810、MODR/M.regフィールド844、MODR/M.r/mフィールド846、VVVVフィールド820、xxxフィールド854、およびbbbフィールド856を含む。
[オーグメンテーションオペレーションフィールド]
図8Dは、本発明の1つの実施形態に係る、オーグメンテーションオペレーションフィールド750を構成する特定ベクトルフレンドリ命令フォーマット800のフィールドを示すブロック図である。クラス(U)フィールド768は、0を含む場合はEVEX.U0(クラスA 768A)を表し、1を含む場合はEVEX.U1(クラスB 768B)を表す。U=0であり、かつMODフィールド842が11を含む(メモリアクセスなしオペレーションを表す)場合、アルファフィールド752(EVEXバイト3、ビット[7]―EH)は、rsフィールド752Aとして解釈される。rsフィールド752Aが1を含む場合(丸め752A.1)、ベータフィールド754(EVEXバイト3、ビット[6:4]―SSS)は丸め制御フィールド754Aとして解釈される。丸め制御フィールド754Aは、1ビットのSAEフィールド756および2ビットの丸めオペレーションフィールド758を含む。rsフィールド752Aが0を含む場合(データ変換752A.2)、ベータフィールド754(EVEXバイト3、ビット[6:4]―SSS)は、3ビットのデータ変換フィールド754Bとして解釈される。U=0であり、かつMODフィールド842が00、01、または10を含む(メモリアクセスオペレーションを表す)場合、アルファフィールド752(EVEXバイト3、ビット[7]―EH)は、追い出しヒント(EH)フィールド752Bとして解釈され、ベータフィールド754(EVEXバイト3、ビット[6:4]―SSS)は、3ビットのデータ操作フィールド754Cとして解釈される。
U=1である場合、アルファフィールド752(EVEXバイト3、ビット[7]―EH)は、書き込みマスク制御(Z)フィールド752Cとして解釈される。U=1であり、かつMODフィールド842が11を含む(メモリアクセスなしオペレーションを表す)場合、ベータフィールド754の一部(EVEXバイト3、ビット[4]―S0)は、RLフィールド757Aとして解釈される。これが1を含む場合(丸め757A.1)、ベータフィールド754の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、丸めオペレーションフィールド759Aとして解釈され、一方でRLフィールド757Aが0を含む場合(VSIZE 757.A2)、ベータフィールド754の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、ベクトル長フィールド759B(EVEXバイト3、ビット[6‐5]‐L1-0)として解釈される。U=1であり、かつMODフィールド842が00、01、または10を含む(メモリアクセスオペレーションを表す)場合、ベータフィールド754(EVEXバイト3、ビット[6:4]―SSS)は、ベクトル長フィールド759B(EVEXバイト3、ビット[6‐5]―L1-0)およびブロードキャストフィールド757B(EVEXバイト3、ビット[4]―B)として解釈される。
[例示的なレジスタアーキテクチャ]
図9は、本発明の1つの実施形態に係る、レジスタアーキテクチャ900のブロック図である。示されている実施形態において、幅512ビットの32個のベクトルレジスタ910が存在し、これらのレジスタにzmm0からzmm31の参照符号を付す。下位16個のzmmレジスタの下位256ビットは、レジスタymm0~16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0~15にオーバーレイされる。特定ベクトルフレンドリ命令フォーマット800は、以下の表に示すような、これらのオーバーレイされたレジスタファイルに対して機能する。
換言すると、ベクトル長フィールド759Bは、最大の長さから1または複数の他のより短い長さまでの間から選択し、ここで、そのようなより短い長さの各々は、先行する長さの半分の長さであり、ベクトル長フィールド759Bを有さない命令テンプレートは、最大のベクトル長に対して機能する。さらに、1つの実施形態において、特定ベクトルフレンドリ命令フォーマット800のクラスB命令テンプレートは、パックドまたはスカラの単精度/倍精度浮動小数点データおよびパックドまたはスカラの整数データに対して機能する。スカラオペレーションは、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置に対して行われるオペレーションであり、より上位のデータ要素位置は、実施形態に応じて、命令以前のまま残されるか、またはゼロ化されるかのいずれかである。
書き込みマスクレジスタ915:示されている実施形態において、8個の書き込みマスクレジスタ(k0からk7)が存在し、その各々が64ビットのサイズである。代替的実施形態において、書き込みマスクレジスタ915は、16ビットのサイズである。前述のとおり、本発明の1つの実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして使用することができない。通常であればk0を示すであろうエンコードが書き込みマスクに用いられる場合、これは0xFFFFのハードワイヤード書き込みマスクを選択し、その命令について書き込みマスキングを実効的に無効化する。
汎用レジスタ925:示されている実施形態において、メモリオペランドをアドレス指定するために、既存のx86アドレッシングモードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15という名称により参照される。
MMXパックド整数フラットレジスタファイル950がエイリアス化されるスカラ浮動小数点スタックレジスタファイル(x87スタック)945:示されている実施形態において、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(アプリケーションコアまたはアプリケーションプロセッサと称されることがある)、上述のコプロセッサ、および追加的な機能性を同じダイ上に含み得るシステムオンチップを含み得る、種々のコンピュータシステムアーキテクチャをもたらす。次に例示的なコアアーキテクチャについて説明し、続いて例示的なプロセッサおよびコンピュータアーキテクチャについて説明する。
[例示的なコアアーキテクチャ]
[インオーダコアおよびアウトオブオーダコアのブロック図]
図10Aは、本発明の実施形態に係る、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図10Bは、本発明の実施形態に係る、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的実施形態および例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図10A~図10Bにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方で任意選択的な追加の破線のボックスは、レジスタリネーミング・アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであるとして、アウトオブオーダの態様を説明する。
図10Aにおいて、プロセッサパイプライン1000は、フェッチステージ1002、長さデコードステージ1004、デコードステージ1006、割り当てステージ1008、リネームステージ1010、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1012、レジスタ読み込み/メモリ読み込みステージ1014、実行ステージ1016、ライトバック/メモリ書き込みステージ1018、例外処理ステージ1022、およびコミットステージ1024を含む。
図10Bは、両方がメモリユニット1070に結合された、実行エンジンユニット1050に結合されたフロントエンドユニット1030を含むプロセッサコア1090を示す。コア1090は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドのまたは代替的なコアタイプであってよい。さらに別の選択肢として、コア1090は例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU)コア、またはグラフィクスコア等のような専用コアであってよい。
フロントエンドユニット1030は、デコードユニット1040に結合された命令フェッチユニット1038に結合された命令トランスレーション・ルックアサイド・バッファ(TLB)1036に結合された命令キャッシュユニット1034に結合された分岐予測ユニット1032を含む。デコードユニット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のセットは、レベル2(L2)キャッシュユニット1076に結合されたデータキャッシュユニット1074に結合されたデータTLBユニット1072を含むメモリユニット1070に結合される。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(登録商標) Hyperthreading technologyのように、タイムスライスのフェッチおよびデコードを行い、続いて同時マルチスレッディングを行う)を含む多様な態様において、マルチスレッディングをサポートしてよいことを理解されたい。
レジスタリネーミングをアウトオブオーダ実行の文脈において説明しているが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことを理解されたい。示されているプロセッサの実施形態はまた、別個の命令およびデータキャッシュユニット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は、プロセッサコアごとに1つずつの別個のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュのローカルサブセット1104への直接的なアクセスパスを有する。プロセッサコアにより読み込まれたデータは、そのL2キャッシュサブセット1104に格納され、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並列して速やかにアクセスできるようになる。プロセッサコアによって書き込まれたデータは、必要に応じて、自身のL2キャッシュサブセット1104に格納され、他のサブセットからフラッシュされる。リング型ネットワークは、共有データの一貫性を保証する。リング型ネットワークは、双方向性であり、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能とする。各リングデータパスは、一方向当たり1012ビット幅である。
図11Bは、本発明の実施形態に係る、図11Aのプロセッサコアの一部の拡大図である。図11Bは、L1キャッシュ1104のL1データキャッシュ1106A部分、および併せてベクトルユニット1110およびベクトルレジスタ1114に関するさらなる詳細を含む。具体的には、ベクトルユニット1110は16幅ベクトル処理ユニット(VPU)(16幅ALU1128を参照)であり、これは、整数、単精度浮動、および倍精度浮動の命令のうちの1または複数を実行する。VPUは、メモリ入力に対する、スウィズルユニット1120によるレジスタ入力のスウィズル、数値変換ユニット1122A~Bによる数値変換、およびレプリケーションユニット1124によるレプリケーションをサポートする。書き込みマスクレジスタ1126は、得られたベクトル書き込みのプレディケートを可能とする。
図12は、本発明の実施形態に係る、1つよりも多くのコアを有し得、内蔵メモリコントローラを有し得、内蔵グラフィクスを有し得るプロセッサ1200のブロック図である。図12における実線のボックスは、単一のコア1202A、システムエージェント1210、1または複数のバスコントローラユニット1216のセットを有するプロセッサ1200を示し、一方で任意選択的な追加の破線のボックスは、複数のコア1202A~N、システムエージェントユニット1210内の1または複数の内蔵メモリコントローラユニット1214のセット、および専用論理1208を有する代替的なプロセッサ1200を示す。
よって、プロセッサ1200の異なる実装としては、1)専用論理1208を内蔵グラフィクスおよび/または科学技術(スループット)論理(これは、1または複数のコアを含んでよい)とし、コア1202A~Nを1または複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら2つの組み合わせ)としたCPU、2)コア1202A~Nをグラフィクスおよび/または科学技術(スループット)を主な用途とする多数の専用コアとしたコプロセッサ、および3)コア1202A~Nを多数の汎用インオーダコアとしたコプロセッサが挙げられてよい。よって、プロセッサ1200は、汎用プロセッサ、コプロセッサ、または、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30個またはより多数のコアを含む)、または埋め込みプロセッサ等のような専用プロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1200は、例えば、BiCMOS、CMOS、またはNMOSなどの複数のプロセス技術のいずれかを用いて、1または複数の基板の一部であってもよく、および/または当該基板上に実装されてもよい。
メモリ階層は、コア、1または複数の共有キャッシュユニット1206のセット、および内蔵メモリコントローラユニット1214のセットに結合された外部メモリ(不図示)の内部に、1または複数のレベルのキャッシュを含む。共有キャッシュユニット1206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ、最終レベルキャッシュ(LLC)、および/またはそれらの組み合わせなどの1または複数の中レベルキャッシュを含んでよい。1つの実施形態において、リング型相互接続ユニット1212は、内蔵グラフィクス論理1208(内蔵グラフィクス論理1208は、専用論理の一例であり、本明細書において専用論理とも称される)、共有キャッシュユニット1206のセット、およびシステムエージェントユニット1210/内蔵メモリコントローラユニット1214を相互接続するが、代替的な実施形態は、そのようなユニットの相互接続に任意の数の周知の技法を用いてよい。1つの実施形態において、1または複数のキャッシュユニット1206とコア1202A~Nとの間には一貫性が保たれる。
いくつかの実施形態において、コア1202A~Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント1210は、コア1202A~Nを協調させ動作させるそれらのコンポーネントを含む。システムエージェントユニット1210は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでもよい。PCUは、コア1202A~Nおよび内蔵グラフィクス論理1208の電力状態を調整するのに必要な論理およびコンポーネントであってよく、またはこれを含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア1202A~Nは、アーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア1202A~Nのうちの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に直接的に結合され、コントローラハブ1320はIOH1350と共に単一のチップ内に存在する。
追加的なプロセッサ1315の任意選択的な性質が、図13において破線で示されている。各プロセッサ1310、1315は、本明細書で説明する処理コアのうちの1または複数を含んでよく、プロセッサ1200の何らかのバージョンであってよい。
メモリ1340は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはそれら2つの組み合わせであってよい。少なくとも1つの実施形態について、コントローラハブ1320は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPath Interconnect(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は、任意選択的に、高性能インタフェース1492を介してコプロセッサ1438と情報を交換してよい。1つの実施形態において、コプロセッサ1438は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、または埋め込みプロセッサ等のような専用プロセッサである。
共有キャッシュ(不図示)が、一方のプロセッサ内にまたは両方のプロセッサの外部に含まれてよく、ただしP-P相互接続を介してこれらのプロセッサに接続される。これにより、一方または両方のプロセッサのローカルキャッシュ情報は、プロセッサが低電力モードとなった場合、共有キャッシュに格納されてよい。
チップセット1490は、インタフェース1496を介して第1のバス1416に結合されてよい。1つの実施形態において、第1のバス1416は、ペリフェラルコンポーネントインターコネクト(PCI)バス、または、PCIエクスプレスバスもしくは別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はこれに限定されるものではない。
図14に示すように、様々なI/Oデバイス1414が、第1のバス1416を第2のバス1420に結合するバスブリッジ1418と共に、第1のバス1416に結合されてよい。1つの実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1または複数の追加的なプロセッサ1415が、第1のバス1416に結合される。1つの実施形態において、第2のバス1420は、ローピンカウント(LPC)バスであってよい。1つの実施形態において、例えば、キーボードおよび/またはマウス1422、通信デバイス1427、および、命令/コードおよびデータ1430を含んでよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット1428を含む様々なデバイスが、第2のバス1420に結合されてよい。さらに、オーディオ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は、CL1472、1482に結合されるものがメモリ1432、1434のみではなく、I/Oデバイス1514もまた制御論理1472、1482に結合されることを示す。レガシI/Oデバイス1515は、チップセット1490に結合される。
ここで図16を参照すると、本発明の一実施形態に係るSoC1600のブロック図が示されている。図12における類似の要素は、同様の参照番号を有する。また、破線のボックスは、より高度なSoCにおける任意選択的な特徴である。図16において、相互接続ユニット1602は、キャッシュユニット1204A~Nおよび共有キャッシュユニット1206を含む1または複数のコア1202A~Nのセットを含むアプリケーションプロセッサ1610と、システムエージェントユニット1210と、バスコントローラユニット1216と、内蔵メモリコントローラユニット1214と、内蔵グラフィクス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1または複数のコプロセッサ1620のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット1630と、ダイレクトメモリアクセス(DMA)ユニット1632と、1または複数の外部ディスプレイに結合するためのディスプレイユニット1640とに結合される。1つの実施形態において、コプロセッサ1620は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサ等のような専用プロセッサを含む。
本明細書に開示のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにおいて実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含むプログラミング可能なシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
図14に示すコード1430などのプログラムコードは、本明細書で説明する機能を行わせて出力情報を生成させる入力命令に適用されてよい。出力情報は、既知の方式で1または複数の出力デバイスに適用されてよい。本願において、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するよう、高水準の手続き型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械語で実装されてもよい。実際、本明細書で説明するメカニズムは、いかなる特定のプログラミング言語にもその範囲が限定されるものではない。いずれの場合でも、当該言語は、コンパイラ型またはインタプリタ型の言語であってよい。
少なくとも1つの実施形態の1または複数の態様が、プロセッサ内の様々な論理を代表する機械可読媒体に格納された代表的な命令によって実装されてよく、これは、機械によって読み込まれると、本明細書で説明する技法を行うための論理を当該機械に作成させる。「IPコア」として知られるそのような代表物は、有形の機械可読媒体に格納され、論理またはプロセッサを実際に作製する製造機械にロードするよう様々な顧客または製造施設に供給されてよい。
そのような機械可読記憶媒体は、限定されることなく、ハードディスクや、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光カードなどの半導体デバイス、または電子的命令を格納するのに好適な任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスにより製造または形成された非一時的な有形の構成をした物品を含んでよい。
したがって、本発明の実施形態は、本明細書で説明する構造、回路、装置、プロセッサ、および/またはシステムの特徴を定義する、命令を含むまたはハードウェア記述言語(HDL)などの設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品とも称される場合がある。
[エミュレーション(バイナリトランスレーション、コードモーフィング等を含む)]
場合によって、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアにより処理されるべき1または複数の他の命令に(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)翻訳、モーフィング、エミュレート、または他の方法で変換してよい。命令コンバータは、少なくとも1つのx86命令セットコアを有するプロセッサ内のソフトウェアまたはファームウェアにおいて実装されてよく、それにより、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を実現する。x86コンパイラ1704は、追加的なリンケージ処理があってもなくても、少なくとも1つのx86命令セットコア1716を有するプロセッサ上で実行されることができるx86バイナリコード1706(例えばオブジェクトコード)を生成するよう動作可能であるコンパイラを表す。同様に、図17は、高水準言語1702におけるプログラムが、少なくとも1つのx86命令セットコア1714を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替的な命令セットバイナリコード1710を生成するべく、代替的な命令セットコンパイラ1708を用いてコンパイルされてよいことを示す。命令コンバータ1712は、x86バイナリコード1706を、x86命令セットコア1714を有しないプロセッサによってネイティブに実行され得るコードに変換するよう用いられる。この変換されたコードは、代替的な命令セットバイナリコード1710と同じものにはなりにくい。なぜなら、これが可能な命令コンバータを作るのが難しいからである。ただし、変換されたコードは、一般的なオペレーションを遂行し、代替的な命令セットに属する命令で構成されることとなる。よって、命令コンバータ1712は、エミュレーション、シミュレーションまたは任意の他のプロセスによって、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1706を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
[さらなる例]
例1は、遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行するためのシステムであって、メモリに格納され、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む1または複数のRAO命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有する、RAO命令キューと、入来RAO命令を受け取り、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出するべく上記RAO命令キューをスキャンする、最適化回路部とを備え、上記最適化回路部はさらに、エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、システムを提供する。
例2は、例1の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う。
例3は、例1の例示的システムの内容を含み、上記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる。
例4は、例1の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例5は、例1の例示的システムの内容を含み、上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例6は、例1の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号(to-be-continued signal)をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例7は、例1から6のいずれか1つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタをさらに備え、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である。
例8は、例7の例示的システムの内容を含み、各々が上記RAO命令キューのインスタンスおよび上記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、RAO命令をコードストレージからフェッチするフェッチ回路部と、上記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、自身のRAO命令キューのインスタンスをスキャンし、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちからエンキュー済みRAO命令を選択し、上記選択されたRAO命令を、上記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する。
例9は、例1から6のいずれか1つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である、システムカウンタと、上記RAO命令キューおよび上記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、上記キャッシュ制御回路は、RAO命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部とをさらに含む。
例10は、例1から6のいずれか1つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である、システムカウンタと、上記RAO命令キューおよび上記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、上記中レベル共有キャッシュ制御回路は、RAO命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部とをさらに含む。
例11は、遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行するための方法であって、最適化回路部が、入来RAO命令を受け取る段階と、上記最適化回路部が、各RAO命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューをスキャンし、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出する段階とを備え、上記最適化回路部はさらに、エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、方法を提供する。
例12は、例11の例示的方法の内容を含み、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う段階をさらに備える。
例13は、例11の例示的方法の内容を含み、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる段階をさらに備える。
例14は、例11の例示的方法の内容を含み、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える。
例15は、例11の例示的方法の内容を含み、上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例16は、例11の例示的方法の内容を含み、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える。
例17は、例11から16のいずれか1つの例示的方法の内容を含み、上記入来RAO命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタより予め定められた時間量の後の値に初期化する段階をさらに備え、上記満了タイムスタンプは、上記入来RAO命令と共に上記RAO命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも後である限り、上記入来RAO命令を他の入来RAO命令と組み合わせることを可能とする。
例18は、例17の例示的方法の内容を含み、スケジューリング回路部が、上記RAO命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちからエンキュー済みRAO命令を選択する段階と、上記スケジューリング回路部が、上記選択されたRAO命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する。
例19は、例18の例示的方法の内容を含み、キャッシュ制御回路が、上記ディスパッチされたRAO命令を受け取る段階であって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記RAO命令キューのインスタンスを組み込む、段階と、上記キャッシュ制御回路が、上記受け取ったRAO命令を自身の最適化回路部のインスタンスに提供する段階と、最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったRAO命令を既にエンキュー済みのRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、段階と、キャッシュ制御回路スケジューリング回路部が、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択する段階と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する段階とをさらに備える。
例20は、例18のいずれか1つの例示的方法の内容を含み、中レベルキャッシュ制御回路が、上記ディスパッチされたRAO命令を受け取る段階であって、上記中レベルキャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記RAO命令キューのインスタンスを組み込む、段階と、最適化回路部の上記インスタンスが、RAO命令を空間的に組み合わせる機会がある場合に、上記受け取ったRAO命令を既にエンキュー済みのRAO命令と組み合わせ、機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、段階と、中レベルキャッシュ制御回路のスケジューリング回路部が、自身のRAO命令キューのインスタンスをスキャンして、1または複数のエンキュー済みRAO命令のうちでRAO命令を選択する段階と、上記中レベルキャッシュ制御回路が、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を中レベルキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、上記キャッシュラインを上記中レベルキャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する段階とをさらに備える。
例21は、遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行するための装置であって、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む1または複数のRAO命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューと、入来RAO命令を受け取り、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出するべく上記RAO命令キューをスキャンするための最適化手段とを備え、上記最適化手段はさらに、エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、装置を提供する。
例22は、例21の例示的装置の内容を含み、上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う。
例23は、例21の例示的装置の内容を含み、上記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる。
例24は、例21の例示的装置の内容を含み、上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例25は、例21の例示的装置の内容を含み、上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例26は、例21の例示的装置の内容を含み、上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例27は、例21から26のいずれか1つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタをさらに備え、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記装置カウンタよりも後である限り、他の命令と組み合わせることが可能である。
例28は、例27の例示的装置の内容を含み、各々が上記RAO命令キューのインスタンスおよび上記最適化手段のインスタンスを組み込む複数のコアをさらに備え、各コアは、RAO命令をコードストレージからフェッチするフェッチ回路部と、上記フェッチされた命令をデコードし、自身の最適化手段のインスタンスに提供するデコード回路部と、自身のRAO命令キューのインスタンスをスキャンし、満了タイムスタンプが上記装置カウンタを超過する1または複数のエンキュー済みRAO命令のうちからRAO命令を選択し、上記選択されたRAO命令を、上記装置における複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する。
例29は、例21から26のいずれか1つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記装置カウンタよりも後である限り、他の命令と組み合わせることが可能である、装置カウンタと、上記RAO命令キューおよび上記最適化手段のインスタンスを組み込むキャッシュ制御回路とをさらに備え、上記キャッシュ制御回路は、RAO命令を受け取って自身の最適化手段のインスタンスに提供するインタフェース回路部であって、上記最適化手段は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記装置カウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部とをさらに含む。
例30は、例21から26のいずれか1つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記装置カウンタよりも後である限り、他の命令と組み合わせることが可能である、装置カウンタと、上記RAO命令キューおよび上記最適化手段のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、上記中レベル共有キャッシュ制御回路は、RAO命令を受け取って自身の最適化手段のインスタンスに提供するインタフェース回路部であって、上記最適化手段は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部とをさらに含む。
例31は、命令を格納する非一時的機械可読媒体であって、上記命令は、プロセッサによって実行されると、上記プロセッサに、最適化回路部が、入来RAO命令を受け取ることと、上記最適化回路部が、各RAO命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューをスキャンし、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出することであって、上記最適化回路部はさらに、エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、こととによって、遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行させる、非一時的機械可読媒体を提供する。
例32は、例31の例示的非一時的機械可読媒体の内容を含み、上記格納された命令は、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行うことによって、上記プロセッサに上記RAO命令をさらに実行させる。
例33は、例31の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせることによって、上記プロセッサに上記RAO命令をさらに実行させる。
例34は、例31の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記RAO命令をさらに実行させる。
例35は、例31の例示的非一時的機械可読媒体の内容を含み、上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う。
例36は、例31の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記RAO命令をさらに実行させる。
例37は、例31から36のいずれか1つの例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記入来RAO命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタより予め定められた時間量の後の値に初期化することによって、上記プロセッサに上記RAO命令をさらに実行させ、上記満了タイムスタンプは、上記入来RAO命令と共に上記RAO命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも後である限り、上記入来RAO命令を他の入来RAO命令と組み合わせることを可能とする。
例38は、例37の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、スケジューリング回路部が、上記RAO命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちからエンキュー済みRAO命令を選択することと、上記スケジューリング回路部が、上記選択されたRAO命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチすることとによって、上記プロセッサに上記RAO命令をさらに実行させ、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する。
例39は、例38の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、キャッシュ制御回路が、上記ディスパッチされたRAO命令を受け取ることであって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記RAO命令キューのインスタンスを組み込む、ことと、上記キャッシュ制御回路が、上記受け取ったRAO命令を自身の最適化回路部のインスタンスに提供することと、最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったRAO命令を既にエンキュー済みのRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、ことと、キャッシュ制御回路スケジューリング回路部が、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択することと、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行することとによって、上記プロセッサに上記RAO命令をさらに実行させる。
例40は、例38の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、中レベルキャッシュ制御回路が、上記ディスパッチされたRAO命令を受け取ることであって、上記中レベルキャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記RAO命令キューのインスタンスを組み込む、ことと、最適化回路部の上記インスタンスが、RAO命令を空間的に組み合わせる機会がある場合に、上記受け取ったRAO命令を既にエンキュー済みのRAO命令と組み合わせ、機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、ことと、中レベルキャッシュ制御回路のスケジューリング回路部が、自身のRAO命令キューのインスタンスをスキャンして、1または複数のエンキュー済みRAO命令のうちでRAO命令を選択することと、上記中レベルキャッシュ制御回路が、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を中レベルキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、上記キャッシュラインを上記中レベルキャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行することとによって、上記プロセッサに上記RAO命令をさらに実行させる。
[項目1]
遠隔アトミックオペレーション(RAO)命令をアトミックに実行するためのシステムであって、
メモリに格納され、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む1または複数のRAO命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有する、RAO命令キューと、
入来RAO命令を受け取り、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出するべく上記RAO命令キューをスキャンする、最適化回路部とを備え、
上記最適化回路部はさらに、
エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、
エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、
システム。
[項目2]
上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う、項目1に記載のシステム。
[項目3]
上記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる、項目1に記載のシステム。
[項目4]
上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目1に記載のシステム。
[項目5]
上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目1に記載のシステム。
[項目6]
上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目1に記載のシステム。
[項目7]
規則的にインクリメントするシステムカウンタをさらに備え、
各RAO命令キューエントリは、満了タイムスタンプをさらに含み、
上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である、
項目1に記載のシステム。
[項目8]
各々が上記RAO命令キューのインスタンスおよび上記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、
RAO命令をコードストレージからフェッチするフェッチ回路部と、
上記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、
自身のRAO命令キューのインスタンスをスキャンし、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちからエンキュー済みRAO命令を選択し、上記選択されたRAO命令を、上記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、
上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、
項目7に記載のシステム。
[項目9]
規則的にインクリメントするシステムカウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である、システムカウンタと、
上記RAO命令キューおよび上記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、
上記キャッシュ制御回路は、
RAO命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、
自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部と
をさらに含む、
項目1に記載のシステム。
[項目10]
規則的にインクリメントするシステムカウンタであって、各RAO命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来RAO命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタより予め定められた時間量の後の値に初期化し、上記エンキュー済みRAO命令は、上記満了タイムスタンプが上記システムカウンタよりも後である限り、他の命令と組み合わせることが可能である、システムカウンタと、
上記RAO命令キューおよび上記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、
上記中レベル共有キャッシュ制御回路は、
RAO命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューされたRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、インタフェース回路部と、
自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する1または複数の追加的なエンキュー済みRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する実行回路部と
をさらに含む、
項目1に記載のシステム。
[項目11]
遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行するための方法であって、
最適化回路部が、入来RAO命令を受け取る段階と、
上記最適化回路部が、各RAO命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューをスキャンし、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出する段階とを備え、
上記最適化回路部はさらに、
エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、
エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、
方法。
[項目12]
上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる段階をさらに備える、項目11に記載の方法。
[項目13]
上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、項目11に記載の方法。
[項目14]
上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目11に記載の方法。
[項目15]
上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をTRUEに設定した状態で上記合致するRAO命令を実行対象としてディスパッチし、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、項目11に記載の方法。
[項目16]
上記入来RAO命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタより予め定められた時間量の後の値に初期化する段階をさらに備え、上記満了タイムスタンプは、上記入来RAO命令と共に上記RAO命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも後である限り、上記入来RAO命令を他の入来RAO命令と組み合わせることを可能とする、
項目11に記載の方法。
[項目17]
スケジューリング回路部が、上記RAO命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちからエンキュー済みRAO命令を選択する段階と、
上記スケジューリング回路部が、上記選択されたRAO命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、
上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも1つを最適化するように選択される順序で、上記RAO命令を他のエンキュー済みRAO命令に関してアウトオブオーダで選択する、
項目16に記載の方法。
[項目18]
キャッシュ制御回路が、上記ディスパッチされたRAO命令を受け取る段階であって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記RAO命令キューのインスタンスを組み込む、段階と、
上記キャッシュ制御回路が、上記受け取ったRAO命令を自身の最適化回路部のインスタンスに提供する段階と、
最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったRAO命令を既にエンキュー済みのRAO命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったRAO命令を自身のRAO命令キューにエンキューする、段階と、
キャッシュ制御回路スケジューリング回路部が、自身のRAO命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する1または複数のエンキュー済みRAO命令のうちでRAO命令を選択する段階と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたRAO命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を1または複数のリクエスト元の処理コアに送ることにより、上記選択されたRAO命令を実行する段階と
をさらに備える、
項目17に記載の方法。
[項目19]
遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行するための装置であって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む1または複数のRAO命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューと、
入来RAO命令を受け取り、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出するべく上記RAO命令キューをスキャンするための最適化手段とを備え、
上記最適化手段はさらに、
エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、
エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、
装置。
[項目20]
上記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせる、項目19に記載の装置。
[項目21]
上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目19に記載の装置。
[項目22]
上記入来RAO命令および上記エンキュー済みRAO命令は、各々が要素サイズ識別子をさらに含み、上記最適化手段はさらに、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目19に記載の装置。
[項目23]
命令を格納する非一時的機械可読媒体であって、上記命令は、プロセッサによって実行されると、上記プロセッサに、
最適化回路部が、入来RAO命令を受け取ることと、
上記最適化回路部が、各RAO命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するRAO命令キューをスキャンし、上記入来RAO命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するRAO命令を検出することであって、
上記最適化回路部はさらに、
エンキュー済みの合致するRAO命令が検出されないことに応答して、上記入来RAO命令を上記RAO命令キューにエンキューし、
エンキュー済みの合致するRAO命令が検出されたことに応答して、上記入来RAO命令および上記合致するRAO命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来RAO命令および上記合致するRAO命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインRAO命令の同じグループにエンキューすることにより、上記入来RAO命令および上記合致するRAO命令を空間的に組み合わせる、ことと
によって、遠隔アトミックオペレーション(RAO)命令を弱い順序付けでアトミックに実行させる、非一時的機械可読媒体。
[項目24]
上記格納された命令はさらに、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するRAO命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来RAO命令および上記合致するRAO命令を時間的に組み合わせることによって、上記プロセッサに上記RAO命令をさらに実行させる、項目23に記載の非一時的機械可読媒体。
[項目25]
上記格納された命令はさらに、上記最適化回路部が、上記入来RAO命令および上記合致するRAO命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するRAO命令が完了するまで上記入来RAO命令を遅延させ、続いて上記入来RAO命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記RAO命令をさらに実行させる、項目23に記載の非一時的機械可読媒体。