説明

適応的最適化された比較/交換オペレーション

【課題】適応型の最適化されたコンペア‐エクスチェンジオペレーションを実装する。
【解決手段】処理論理は、実行パイプラインにおいてFASTCMPXCHGオペレーションを受信する(200)。次いで、FASTCMPXCHG命令に関連付けられたマイクロアーキテクチャヒントビットを含むキャッシュラインタグを探す(202)。ハードウェアがFASTCMPXCHGを処理する能力を有する場合には、先行するCLMARKが利用可能なタグが、各キャッシュラインについて提示される。ハードウェアがタグを持っていない場合は、CLMARK及びFASTCMPXCHGは、サポートされない。その場合には、コードのリストに載っているFASTCMPXCHG命令の代わりに、[mem]、testval、及びnewvalパラメータを使用して標準的なCMPXCHG命令を実行する(212)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータプロセッサによって実行されるコードに実装されるコンペア‐エクスチェンジ(比較/交換)オペレーションに関する。
【背景技術】
【0002】
CMPXCHG(Compare-Exchange:比較/交換)オペレーションは、コード領域(すなわち、命令、オペレーション等)周辺のクリティカルな部分を形成する命令シーケンスのうちの1つの命令として広く使用されている。このオペレーションでは、コード領域を不可分で実行することが可能である。1つの命令セットは、次のような2つの条件に合った場合に、不可分(アトミック)であると考えることができる。1つ目の条件は、命令セット全体が完了するまで、他のプロセスは、行われた変更について知り得ないことであり、2つ目の条件は、命令セットのうちある命令が失敗した場合に、命令セット全体が失敗するということである。命令セット全体が失敗となった場合、その命令を実行しているコンピュータシステムの状態は、命令が実行される前の状態に戻される。ある実施形態では、CMPXCHG命令は、クリティカルな部分を持ったコード領域のソフトウェアで規定されたラッパー(wrapper)として考えることができる。すなわち、このラッパーは、ソフトウェアコードに組み込むことが可能であるが、ハードウェアによって実行されるという意味では、ラッパーではない。
【0003】
CMPXCHG命令は、不可分命令セットの開始時にメモリから取得した値が、命令セットの実行中に他のプロセスによって変更されていないことを確認することにより、この命令セットが不可分に実行されるのを補助する役目をする。例えば、不可分命令セットの開始時に、メモリの特定の位置(ロケーション)における値をレジスタに読み込む場合、命令セットが完了した後に、新たな(すなわち、変更された)値を元のメモリ位置に再読み込みする要求が発行される場合がある(ここで、変更された値が、命令セットの実行結果である)。
【0004】
CMPXCHG命令は、不可分命令セットの終わりに使用され、特定のメモリ位置から元々読み出された値が、依然として、そのメモリ内の位置に存在するかを確認するのに利用される(すなわち、不可分命令セットの実行の間のある時点で、他のプロセス又はスレッドにより変更されていないかを確認する)。元の値が依然として存在している場合には、CMPXCHG命令は、新たな値を、古い値が保存されていた特定のメモリ位置に読み込み、不可分命令セットが無事に完了する。元の値がそこに存在していない場合には、不可分命令セットの実行の間に、他のプロセス又はスレッドによって値が変更されたことを意味し、CMPXCHG命令は、新たな値を特定のメモリ位置に読み込むことはせず、システムにこの事を通知し、通知の結果によっては、コードにおける条件付ジャンプが実行される場合がある、すなわち、命令を無事に完了させることを再度試みるため、不可分命令セットの始めまでジャンプする。
【0005】
本発明を図面を参照して説明するが、本発明はこれら図面に限定されない。また、添付の図面では、同一の要素には、同一の参照符号を付して説明する。
【図面の簡単な説明】
【0006】
【図1】CLMARKコマンドに使用されるキャッシュラインタグのセットの実施形態を示した図である。
【図2】全CMPXCHGマイクロオペレーションシーケンスを実行すべきか、又はCMPXCHGオペレーションのSTORE部分のみを実行すべきかを判断するFASTCMPXCHG命令の決定木の実施形態を示したフローチャートである。
【図3】CLMARK及びFASTCMPXCHG命令を実行可能な1つ以上のCPUコアを含むコンピュータシステムの実施形態を示したものである。
【発明を実施するための形態】
【0007】
適応型の最適化されたコンペア‐エクスチェンジオペレーションを実装する機械可読媒体、プロセッサ及びシステムの実施形態を記載する。
【0008】
まず、2つの命令、CLMARK(Cache Line Mark:キャッシュラインマーク)及びFASTCMPXCHG(Fast Compare-Exchange:ファスト・コンペア‐エクスチェンジ(高速比較/交換))について説明する。CLMARK命令は、タグID構造において、特定のキャッシュラインに、マイクロアーキテクチャのヒント(hint)ビットをタグ付けする。ヒントビットは、確認された時に、2つの方法のうちの1つである、FASTCMPXCHGを実行する準備がプロセッサ内で整ったことを、実行論理に知らせる。特に、キャッシュから読み出され、不可分命令シーケンスで使用されるデータが、変更されているか否かを知らせる。不可分命令シーケンスの間に、データが変更(修正)されていた場合、FASTCMPXCHG命令は、マイクロオペレーションのLOAD-COMPARE-STOREシーケンスを含む標準的なCMPXCHG(コンペア‐エクスチェンジ)命令へと戻る。一方、タグID構造におけるヒントビットを確認することにより、実行論理が、その特定のキャッシュラインにおけるデータが完全に修正されていないと判断可能な場合、唯一使用されるマイクロオペレーションが最後のSTOREである"高速"バージョンのCMPXCHGを実行可能である。したがって、多くの実施形態では、LOAD及びCOMPAREのマイクロオペレーションは、実行を必要とせず、省略することができ、プロセッサにおける実行効率をスピードアップさせることができる場合がある。
【0009】
以下の記載及び特許請求の範囲において、本開示技術の「一実施形態」又は「ある実施形態」と呼ぶものは、実施形態に関連する特定の特徴、構造及び特性が、少なくとも本開示技術の実施形態の一つに含まれていることを意味する。したがって、本明細書中の様々な箇所で使用されている「一実施形態において」という表現は、必ずしも同一の実施形態を示していない。また、以下の記載及び特許請求の範囲において、"含む(include)"、"〜からなる(comprise)"及びこれらの派生語が使用されるが、これらは、同義語として扱われることを意図している。
【0010】
今日のマルチスレッド環境では、不可分命令セットは、実行の途中で中断されることがある。この場合、他のスレッドにメモリの制御が引き渡され、格納されている値の幾つか又は多くを変更することが可能である。これは、不可分命令セットによって使用されるメモリ位置における値が、同じメモリ位置に新たな値が書き込まれる前に変更されてしまっている例の1つである。
【0011】
実際のCMPXCHG命令は、実質的に、"lock CMPXCHG [mem], rdx"という基本的なフォーマットを含む。
【0012】
特に、CMPXCHGの実行フローは、次のように行われる。
1)[mem](memアドレスによって指定されたメモリ位置)に格納された値が、第1レジスタに読み込まれる(LOAD命令)(第1レジスタは、CMPXCHG内に組み込まれたLOADマイクロオペレーションのための実行論理によって利用される特定のレジスタを含む)。
2)第1レジスタ内の値が、eax/raxレジスタ(eaxかraxかは、オペランドのサイズによる)と比較される(COMPAREマイクロオペレーション)。
3)比較の結果、2つの値が等しい場合(すなわち、メモリ内の値が変わっていなかった場合)は、rdxレジスタ内の値が書き込まれる([mem]へのSTOREマイクロオペレーション)。
4)比較の結果、2つの値が異なる場合(すなわち、メモリ内の値が変わっていた場合)は、[mem]に格納されている現在の値が、eax/raxに読み込まれる。
【0013】
lockは、CMPXCHG命令自身を、不可分命令に変える。CMPXCHG命令は、上述したようなマイクロオペレーションのLOAD、COMPARE及びSTOREの組み合わせに分解できてしまうことから、このように不可分命令にすることが望ましい。
【0014】
CMPXCHG命令全体が、成功するか失敗するかは、上述の実行フローの2)のCOMPARE命令の結果に依存する。CMPXCHGが成功したか否かを確認する単純な方法としては、成功した場合にはゼロフラグ(ZF)を設定し、失敗したらゼロフラグを解除するということが挙げられる。CMPXCHG命令に先立つある時点で、マイクロオペレーションのセット(LOAD-COMPARE-STORE)を付加的なLOAD命令と共に開始させる。これは、不可分命令の開始時に、CMPXCHG命令は、[mem]における値のeax/raxレジスタへの最初のLOADを必要とするからである。不可分命令セット全体の例として、例えば次のようなコードとして表される。
【0015】
try_again:
mov rax, [mem] ;メモリのロケーション[mem]の値をraxに読み込む。
mov rdx, rax ;raxにおける値をrdxに読み込む。
**rdxを新たな値にする(可能性のある)操作を行うコードを挿入する**
lock cmpxchg [mem], rdx ;raxにおける値が依然としてメモリの[mem]ロケーションの値と等しい場合、rdxをメモリのロケーション[mem]に読み込む。
jnz try_again ;cmpxchgが成功した場合は、ZF = 1とし、失敗した場合はZF = 0として、ゼロ命令がもう一度トライを引き起こさない場合には、ジャンプする。
【0016】
CMPXCHG命令が使用される場合、使用されるLOAD-COMPARE-STOREの組み合わせのマイクロオペレーションは、シリアル的に依存したフローとなる。このシリアルフロー依存性により、CMPXCHG命令を完了させるのに必要なマイクロオペレーションの数は、膨大となり得る。
【0017】
上述したように、CMPXCHG命令は、一般的に、1つの命令シーケンスのうちの1つの命令として使用され、コード領域周辺でクリティカルな部分を形成し、特に、他のプロセス/スレッドが、対象となるメモリ位置の値を変更していないかを判断するのに使用される。対象のコア内の他のプロセス/スレッドが、不可分命令セットのコードのフローを中断させていない場合、及び別のコードを実行している他のコアが、対象のキャッシュラインをスヌープし終えている場合には、そのメモリ位置おける値に変更がないはずである。したがって、メモリ位置における値を調べることなく、同じコア内又は他のコア内の他のプロセス/スレッドがメモリ位置のメモリ内容を変更していないことを前もって知ることができれば、CMPXCHG命令のLOAD及びCOMPARE部分を実行する必要がないと言える。すなわち、メモリ位置における値に外部からの影響(すなわち、他のプロセス/スレッド/コア)がなかったと判断された場合には、CMPXCHG命令の必要な部分は、そのメモリ位置に新たな値を読み込む最後のSTOREマイクロオペレーションのみであると言える。
【0018】
したがって、多くの実施形態では、2つの新規の命令を実装して、多くの場合実行する必要のない標準的なCMPXCHG組み合わせのマイクロオペレーションのうちのCOMPARE-STORE部分を実行させる。すなわち、多くの場合、ここに記載する新規の命令により、単に、組み合わせのSTORE部分のみの実行すればよくなる。
【0019】
多くの実施形態では、この2つの命令は、CLMARK命令及びFASTCMPXCHG命令と呼ばれる。1番目の新規の命令はCLMARKである。CLMARK命令は、CLMARK8B memといった特定のフォーマットを有してもよい。
【0020】
memフィールドは、1つのキャッシュライン内に収まる基本メモリアドレス情報を含む。8Bフィールドは、memアドレスで始まる何バイトを、FASTCMPXCHGとして考えるべきかを示す。多くの実施形態の場合、CPU(Central Processing Unit)のキャッシュラインの大きさに至るまでの全ての2の累乗のバイトサイズをサポートする8Bフィールドを持った様々なCLMARK命令バージョンが存在していてもよい。
【0021】
CLMARKオペレーションが、必要となる一意的に特定するためのタグを、memロケーションが参照する対象のキャッシュラインに設定し、不可分シーケンスのための意図的オーナーシップを示す。例えば、"有効(valid)"ビットを、一意的に特定するタグで使用して、memロケーションのためのキャッシュラインにおけるデータが、以前として有効であることを示してもよい。また、CPUが1つのコアにつき複数のハードウェアコンテキストをサポートしている場合には、一意的に特定するタグが、ハードウェアコンテキストIDを含んでもよい。また、一意的に特定するタグが、各キャッシュラインに対するビットマスク(又は、CPU内に格納される専用スモールテーブルにおけるビットマスク)を含んでもよい。ビットマスクは、キャッシュラインにおける各バイトにつき、1つのビットを使用してもよい。このビットマスクは、共有データ構造において、失敗共有(false sharing)のコンフリクトを最小化するのに使用される。
【0022】
CPUが、CLMARK命令をサポートしていない場合、コア内の実行論理は、単に、各CLMARKを"no operation (ノー・オペレーション)"(NOP)命令で置き換えるだけでもよい。このCLMARKからNOPへの置き換えは、CLMARKタグビットが、ヒントビットと見なされる所以である。また、CLMARK/FASTCMPXCHG命令を実装するシステムも、CLMARKからNOPへの置き換えを、いかなる時に行ってもよい。CLMARK/FASTCMPXCHGを利用可能なシステムが、CMPXCHGを利用すると判断する理由として、多くの例を挙げることができる。例えば、内部の共有リソースを使い果たし、特定のイベントが実行され、他の複数のリソースのうち、デバッグ/テストレジスタが設定される場合などが挙げられる。
【0023】
図1は、CLMARKコマンドのために使用されるキャッシュラインタグのセットの実施形態を示したものである。
【0024】
上述したように、各タグは、キャッシュラインタグID、有効ビット102、HWコンテキストID104及びビットマスク106のような構造的要素を1つ又は複数含んでもよい。図1に示されている全てのタグ情報全体を、タグID構造と称する場合もある。多くの実施形態において、ビットマスクは、キャッシュラインを各バイトベースでマスクし、各バイトは、マスクのための独自のビットを持つ。したがって、キャッシュラインにNバイト存在する場合には、バイト0からN−1に対するビットマスクにおいて複数のビットが存在する。CLMARK命令が実行されると、memベースアドレス及び8Bフィールドを利用して適切なビットマスク値が設定され、次のFASTCMPXCHGシーケンスに関係するキャッシュラインにおけるこれらのバイトにフラグを付ける。
【0025】
別の実施形態では、バイト毎のビットマスクフィールドは利用しなくてもよい。バイト毎のビットマスクフィールドが使用されない場合には、キャッシュライン全体に対して1つのビットを使用して、そのキャッシュラインがCLMARK/FASTCMPXCHG命令に関与していることを示すようにしてもよい。
【0026】
FASTCMPXCHGは、上述した新規の命令の、2番目の命令である。FASTCMPXCHG命令は、lock FASTCMPXCHG8B [mem], testval, newvalのような特定のフォーマットを有してもよい。
【0027】
FASTCMPXCHG命令は、レガシーコード問題を避けるために、元のCMPXCHG命令とは異なる表現がなされている。すなわち、CMPXCHG命令がFASTCMPXCHG命令のように動作するよう更新されている場合には、CMPXCHGを使用したレガシーコードは、正確なフォーマット又は付随した条件を含んでいなくてもよく、2つの異なる命令が利用される。レガシー命令及び新規の命令は、実行ユニットを共有してもよいし、共有しなくてもよい。2つの命令の間での機能複製の量を考えると、レガシー命令と新規の命令との間で、実行ユニットを共有するのが効率的であると言えるかもしれない。
【0028】
FASTCMPXCHG [mem]フィールドは、コンペア/エクスチェンジ目的に使用される値を格納するキャッシュラインに対応する、メモリ位置のベースメモリアドレスを示す。8Bフィールドは、上述の目的におけるCLMARK 8Bフィールドの写しであり、[mem]アドレスから始まる何バイトを、FASTCMPXCHGとして考えるべきかを示す。多くの実施形態において、CPUのキャッシュラインの大きさに至るまでの2の累乗全てのバイトサイズをサポートする8Bフィールドを持った様々なFASTCMPXCHG命令バージョンが存在していてもよい。
【0029】
FASTCMPXCHG命令は、先に詳述したように、LOAD、COMPARE及びSTOREのマイクロオペレーション(μop)フェーズに分解できるが、LOADに先立って、分岐が存在する。内部分岐では、全LOAD-COMPARE-STOREマイクロオペレーションシーケンスが、順番に実行された否かを判断する、又はLOAD-COMPARE部分がスキップされ、STORE部分のみが実際には実行されたのかを判断する。FASTCMPXCHG命令内のブランチでは、決定の数に基づいてどのパスを選択するべきかを判断する。したがって、コードを実行するハードウェアにおいて、いずれのケースであっても、FASTCMPXCHGオペレーションを採用可能である。
【0030】
図2は、全CMPXCHGマイクロオペレーションシーケンスを実行すべきか、又はCMPXCHGオペレーションのSTORE(ストア)部分のみを実行すべきかを判断するFASTCMPXCHG命令の決定木の実施形態を示したものである。
【0031】
決定木内のいずれの方向に進むべきかを判断する処理論理は、ハードウェア(例えば、実行ユニット回路)、ファームウェア(例えば、一般的なCPUマイクロコード)、又はハードウェア及びファームウェア両方の組み合わせを含んでもよい。図2に示すように、処理論理は、まず初めに、実行パイプラインにおいてFASTCMPXCHGオペレーションを受信する(処理ブロック200)。次いで処理論理は、FASTCMPXCHG命令に関連付けられたマイクロアーキテクチャヒントビットを含むキャッシュラインタグを探す(処理ブロック202)。ハードウェアがFASTCMPXCHGを処理する能力を有する場合には、先行するCLMARKが利用可能なタグが、各キャッシュラインについて提示される。ハードウェアがタグを持っていない場合は、CLMARK及びFASTCMPXCHGは、サポートされない。その場合には、処理論理は、コードのリストに載っているFASTCMPXCHG命令の代わりに、[mem]、testval、及びnewvalパラメータを使用して標準的なCMPXCHG命令を実行する(処理ブロック212)。
【0032】
マイクロアーキテクチャヒントビットを含むタグが存在する場合には、処理論理は、ヒントビットがその[mem]アドレスについて有効であるかを確認する(処理ブロック204)。処理論理は、[mem]アドレスに合致するキャッシュラインの"有効"ビット(図1を参照)を確認することにより、ビットが有効かの判断を行うことができる。CLMARK命令は、ビットを"有効"に設定することができる。"有効"ビットが設定されない場合には、そのキャッシュラインのデータは、FASTCMPXCHG命令に対して有効なデータではなく、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。"有効"ビットが、[mem]アドレスにのキャッシュラインにおけるデータが有効であることを示すように設定される場合、処理論理は、現在のハードウェアコンテキストが、キャッシュラインタグ内のマイクロアーキテクチャヒントビット(すなわち、図1のヒントビット104)におけるハードウェア(HW)コンテキストID'dと合致する(処理ブロック206)。ハードウェアが、複数のハードウェアコンテキストをサポートしていない場合には、HWコンテキストID104ヒントビットは、常に同じものとなり、プロセスのこの部分は常に成功することになる。複数のハードウェアコンテキストがサポートされている場合には、プロセスのこの部分を成功させるために、HWコンテキストID104が合致する必要がある。
【0033】
HWコンテキストIDが合致しない場合には、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。反対に、HWコンテキストIDが合致する、又はハードウェアが複数のコンテキストをサポートしていない場合には、処理論理は、ビットマスクが正しく設定されていると判断する(処理ブロック208)。処理論理は、CLMARKビットマスクと、FASTCMPXCHGビットマスクとを比較する。これらのビットマスクが合致しない場合には、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。ビットマスクが合致する場合には、処理論理は次のステップに進み、CMPXCHG命令のLOAD-COMPARE部分を実行することなく直接新たな値を格納(STORE)する新規なFASTCMPXCHG命令を実行する(処理ブロック210)。
【0034】
上述したように、図2の決定木のある分岐点において失敗した場合には、予備として通常のCMPXCHGが常に実行される。このようにすることで、コードの進行を確実にすることができる。
【0035】
次に示す条件のうち、いずれか1つを満たすキャッシュラインについては、(図1で詳述した)マイクロアーキテクチャヒントビットを消去して、無効を設定してもよい。
1)そのキャッシュラインにおいてFASTCMPXCHG命令の実行が成功した。
2)ヒントビットを持つキャッシュラインが、キャッシュから追い出しされた。
3)他のハードウェアコンテキストによって実行されたCLMARKが、そのキャッシュラインを対象としていた。
4)他のハードウェアコンテキストによってそのキャッシュラインが書き込まれた。
5)割り込みが起きた。
6)CLMARK発生から、FASTCMPXCHG命令の完了までの間に、ハードウェア故障が発生した。
【0036】
他の実施形態では、マイクロアーキテクチャヒントビットを、FASTCMPXCHG命令の実行に伴って、消去しなくてもよい。次に続くFASTCMPXCHGが、同じデータについてオペレーションを行う場合には、CLMARK命令に関連したオーバーヘッドなしにオペレーションを実行できることから、ヒントビットを消去しない方が効率的であると言える場合もある。
【0037】
ビットマスクフィールドが使用される多くの実施形態では、上記で列挙したようなキャッシュラインヒントビットを消去及び無効化する規則は、キャッシュラインは影響を受けるかもしれないが、CLMARKによってフラグを付けられたバイトのいずれも特に影響を受けていないといったキャッシュの状況の因子となるものに応じて変更してもよい。
【0038】
また、lockをFASTCMPXCHG命令にも利用して、FASTCMPXCHG命令を不可分命令としてもよい。これは、FASTCMPXCHG命令が、CMPXCHG命令のLOAD-COMPARE部分を消去したがために成功しなかった場合には、マイクロオペレーションのLOAD-COMPARE-STORE組み合わせの全てが実行されることになるので、元のCMPXCHG命令と同様に、lockが必要となる。
【0039】
次に、CLMARK-FASTCMPXCHG命令を実行するCPUの実施形態を説明する。この実施形態では、CPUが、キャッシュに必須のマイクロアーキテクチャヒントビットをタグ付けすることができる1つ以上のコアを含む。サンプルコードの全てを以下に示す。
【0040】
try_again:
clmark [mem] ;[mem]のキャッシュラインについてヒントビットを設定する。
mov rax, [mem] ;[mem]位置のメモリにおける値をraxに読み込む。
mov rdx, rax ;raxの値をrdxに読み込む。
inc rdx ;rdxを変更する
lock fastcmpxchg [mem], rdx ;[mem]のキャッシュラインのヒントビットについて、図2における処理ブロック202、204、206及び208が全て真である場合は、rdxが[mem]のメモリに格納される、真でない場合は、標準的cmpxchgが実行される。
jnz try_again ;fastcmpxchgが成功すれば、ZF = 1とする、成功しなかった場合にはZF = 0とし、ゼロでない命令がもう一度トライを引き起こさなければジャンプする。
【0041】
図3は、CLMARK及びFASTCMPXCHG命令を実行可能な1つ以上のCPUコアを含むコンピュータシステムの実施形態を示したものである。
【0042】
図には、コンピュータシステム300が描かれている。コンピュータシステムは、デスクトップ、サーバー、ラップトップ、ハンドヘルド、テレビのセットトップ、メディアセンター、ゲーム機、(車内に設けられるような)統合システム、又はその他の種類のコンピュータシステムであってもよい。幾つかの実施形態では、コンピュータシステム300は、1つ以上の中央演算処理装置(CPU)を含む。多くの実施形態において、より多くのCPUが設けられる可能性があるが、図示を簡略化するため、図3においては2つのCPU(302及び304)のみが示されている。CPU302及び304は、インテル(登録商標)社製のCPUであってもよいし、他社製のCPUであってもよい。各CPUは、1つ以上のコアを含む。図に示した実施形態では、CPU302は、コアA0(306)、コアA1(308)、コアA2(310)及びコアA3(312)を含み、CPU304は、コアB0(314)、コアB1(316)、コアB2(318)及びコアB3(320)を含む。
【0043】
他の実施形態では、CPU302及び304はそれぞれ、図3に示したコアの数4つよりも多い又は少ない数のコアを有していてもよい。多くの実施形態において、各コア(例えば、コアA0(306)のような)は、1つ以上の実行ユニット、リタイアメントユニット、汎用レジスタ及び特定レジスタの組等を含む。図3に示すコアが、マルチスレッド又はハイパースレッドである場合には、各ハードウェアスレッドを、1つのコアとして見なすこともできる。
【0044】
また、CPU302及び304はそれぞれ、ラストレベルキャッシュ(LLC)322及び324のような1つ以上のキャッシュを含む。図示しない多くの実施形態において、キャッシュ322及び324以外に他のキャッシュを実装してもよく、各コア及びメモリにおける実行ユニット間には、複数レベルのキャッシュが存在する。他の実施形態において、複数のキャッシュが、様々な方法で分配されていてもよい。様々な実施形態において、キャッシュ322及び324はそれぞれ、異なるサイズのキャッシュのうちの1つであってもよい。例えば、キャッシュ322及び324はそれぞれ、8メガバイト(MB)キャッシュ、16MBキャッシュ等であってもよい。また、様々な実施形態において、キャッシュは、ダイレクトマップキャッシュ、フルアソシエイティブキャッシュ、マルチウェイセットアソシエイティブキャッシュ、又は他の種類のマップ方式のキャッシュであってもよい。各キャッシュは、それぞれのCPUにおいて全てのコアが共有する1つの大きな部分を含んでもよいし、又は、別々に機能する複数のスライス(例えば、1つのコアにつき、1つのスライスといったように)に分割されていてもよい。また、各キャッシュは、全てのコアによって共有される1つの部分と、各コアに対応して別々に機能するスライス部分とを含んでもよい。
【0045】
多くの実施形態において、CPU302及び304はそれぞれ、自身のシステムメモリコントローラ(326及び328)を含み、それぞれシステムメモリ330及び332と通信するインターフェースを提供してもよい。図示しない他の実施形態では、コンピュータシステム300において、メモリコントローラ330及び332は、個別の素子である又は、他のデバイス内に集積されていてもよい。
【0046】
システムメモリ330及び332は、ダブルデータレート(DDR)DRAMのようなダイナミック・ランダム・アクセス・メモリ(DRAM)、フラッシュメモリのような不揮発性メモリ、相変化メモリ(PCM)、又は他の種類のメモリ技術を含んでもよい。システムメモリ330及び332は、それぞれCPU302及び304によって実行されるべき命令及びデータを格納する実行汎用メモリであってもよい。また、コンピュータシステム300内に、システムメモリに対して読み込み及び書き込みを行うことが可能な、ダイレクトメモリアクセル(DMA)可能な入出力(I/O)デバイスのような他のデバイスを設けてもよい。
【0047】
対応するシステムメモリと各CPUとを連結するリンク(すなわち、バス、相互接続等)は、データ、アドレス、制御及びクロック情報を転送可能な1つ以上の光学配線、金属配線又は他の配線(すなわち、ライン)を含んでもよい。
【0048】
また、CPU302及び304は、ポイント・ツー・ポイント(P2P)インターフェース回路334及び336をそれぞれ使用したP2Pインターフェースを通じて、互いに通信してもよい。P2Pインターフェースは、高速双方向シリアルリンク、別個の一方向シリアルリンクの組、又は他のリンクと平行して実装されるリンクを含んでもよい。相互に通信するのとは別に、CPU302及び304は、同様な種類のP2Pインターフェースを通じて、構成のインターフェースコンプレックス338とインターフェースしてもよい。具体的には、CPU302は、CPU側のP2Pインターフェース回路340及びコンプレックス338側のP2Pインターフェース回路342を通じてコンプレックス338と通信してもよく、CPU304は、CPU側のP2Pインターフェース回路344及びコンプレックス338側のP2Pインターフェース回路346を通じてコンプレックス338と通信してもよい。
【0049】
高性能インターフェースコンプレックス338は、高いデータスループットを必要とするサブシステムとのインターフェースを提供してもよい。例えば、高性能グラフィックサブシステム348は、I/Oインターフェース350を通じてCPUと通信してもよく、高性能通信サブシステム352は、I/Oインターフェース354を通じて通信を行ってもよい。また、高性能インターフェースコンプレックス338は、I/Oインターフェース360を使用するI/Oハブコンプレックス358と通信するために、I/Oインターフェース356を含んでもよい。コンピュータシステム300に示されている各I/Oインターフェースの回路は、同じものであってもよいし、異なるものであってもよい。例えば、高性能グラフィックサブシステム348をコンプレックス338と連結するI/Oインターフェース350は、16レーン・ペリフェラル・コンポーネント・インターフェース(PCI)エクスプレス・プロトコルリンクを含んでもよく、また、高性能インターフェースコンプレックス338をI/Oコンプレックス358に連結するI/Oインターフェース356は、異なるプロトコルを使用してもよい。
【0050】
I/Oハブコンプレックス358は、1つ又は複数のI/O相互接続(すなわち、バス)及びCPU302、304と連結されているデバイス間の通常の通信インターフェースを提供してもよい。例えば、I/Oハブコンプレックス358は、ホストコントローラ362及び364を含んでもよい。各ホストコントローラは、コンピュータシステム300の残りの構成とI/Oデバイスとを通信可能に連結するインターフェースを提供してもよい。例えば、1つのI/Oハブコンプレックスが、ユニバーサル・シリアル・バス(USB)ハブコンプレックスであって、他のI/Oハブコンプレックスが、レガシーPCIハブコンプレックスであってもよい。また、I/Oデバイス366及び370が、それぞれI/Oホストコントローラ362及び364と連結されている。多くの実施形態において、I/Oホストコントローラ362のようなI/Oホストコントローラに連結される大容量記憶デバイス368が配置されていてもよい。大容量記憶デバイス368は、ハードディスクドライブ、ソリッドステートドライブ、相変化メモリアレイ、又は他の種類の大容量記憶装置であってもよい。また、他のレガシーバスとインターフェースする1つ又は複数のブリッジが存在してもよい。例えば、ブリッジ372は、I/Oホストコントローラインターフェースと連結されていてもよく、このブリッジが、I/Oデバイス374と連結される相互接続/バスのプロトコルを翻訳するプロトコルを提供してもよい。
【0051】
コンピュータシステム300のコアそれぞれにおいて、CLMARK及びFASTCMPXCHG命令を実行可能な処理論理の少なくとも1つの実施形態が設けられる。この論理は、コアA0(306)、A1(308)、A2(310)及びA3(312)ではそれぞれ、処理論理400、402、404及び406として表されており、コアB0(314)、B1(316)、B2(318)及びB3(320)ではそれぞれ、処理論理408、410、412及び414として表されている。また、他の実施形態では、CLMARK及びFASTCMPXCHG命令を実行可能な処理論理は、複数の回路、論理ユニット又は図3に示すようなデバイス全体に分配されていてもよい。
【0052】
図示していないが、CPU、バス、メモリ等の異なるレイアウトを利用したコンピュータシステムの他の実装形態も、本発明を実装するのに適用可能である。
【0053】
また、CLMARK及びFASTCMPXCHG命令を含むコードが、オペレーションの間、異なる時間にコンピュータシステム300の1つ又は複数の場所に存在してもよい。例えば、新規の命令を実装するコード416は、システムメモリ330若しくは332(コード416A若しくはコード416B)、キャッシュ322若しくは324(コード416C若しくはコード416D)、大容量記憶デバイス368(コード416E)、又はコンピュータシステム300内部のその他の場所若しくは外部に存在して(すなわち、格納されて)いてもよい。
【0054】
以上、適応型の最適化されたコンペア‐エクスチェンジオペレーションを実装する機械可読媒体、プロセッサ及びシステムの実施形態を説明した。特定の例を示す実施形態を参照して、実施形態が説明されたが、ここに記載された実施形態の範囲内において、様々な改良及び変更が可能であることは、当業者にとって明らかである。したがって、本明細書及び添付の図面は、発明を限定するためのものではなく、例示するためのものと見なすべきである。

【特許請求の範囲】
【請求項1】
第1の命令を記憶する機械可読媒体であって、
前記第1の命令は、機械によって実行されると前記機械に、
ファスト・コンペア‐エクスチェンジのオペレーションを実行する段階と
前記ファスト・コンペア‐エクスチェンジのオペレーションの結果を格納する段階と
を備える方法を実行させる機械可読媒体。
【請求項2】
前記実行される方法は、
前記ファスト・コンペア‐エクスチェンジのオペレーションを実行する段階の前に、キャッシュラインマークのオペレーションを実行する段階をさらに備える請求項1に記載の機械可読媒体。
【請求項3】
前記実行される方法は、
前記ファスト・コンペア‐エクスチェンジのオペレーションが成功した場合に、前記ファスト・コンペア‐エクスチェンジのオペレーションの第1マイクロオペレーションで、前記結果の前記格納を実行する段階をさらに備える請求項2に記載の機械可読媒体。
【請求項4】
前記実行される方法は、
前記ファスト・コンペア‐エクスチェンジのオペレーションが失敗した場合に、コンペア‐エクスチェンジオペレーションを実行する段階をさらに備える請求項2に記載の機械可読媒体。
【請求項5】
前記キャッシュラインマークのオペレーションは、メモリアドレス位置パラメータを含む請求項2に記載の機械可読媒体。
【請求項6】
前記キャッシュラインマークのオペレーションは、
前記メモリアドレス位置のメモリから読み出したキャッシュライン格納データのタグID構造に、有効ビットを設定する段階をさらに有する請求項5に記載の機械可読媒体。
【請求項7】
前記キャッシュラインマークのオペレーションは、
前記タグID構造にビットマスクを設定する段階をさらに有し、
前記ビットマスクは、前記キャッシュラインのいずれのビットが、前記キャッシュラインマークのオペレーションと関連しているかを示す請求項6に記載の機械可読媒体。
【請求項8】
前記キャッシュラインマークのオペレーションは、
前記タグID構造にハードウェアコンテキストID値を設定する段階をさらに有し、
前記ハードウェアコンテキストID値は、前記キャッシュラインマークのオペレーションを実行した特定のハードウェアコンテキストを示す請求項7に記載の機械可読媒体。
【請求項9】
前記有効ビットが設定されたことが確認され、前記キャッシュラインマークのビットマスクとファスト・コンペア‐エクスチェンジのビットマスクとの間に前記ビットマスクが正しく設定されたことが確認され、且つ前記キャッシュラインマークのハードウェアIDコンテキストが、ファスト・コンペア‐エクスチェンジのハードウェアIDコンテキストと合致することが確認された場合に、
前記ファスト・コンペア‐エクスチェンジのオペレーションを実行する段階を備える請求項8に記載の機械可読媒体。
【請求項10】
前記実行される方法は、
前記機械が前記キャッシュラインマークの命令をサポートしていないと確認された場合には、前記キャッシュラインマークの命令をノー・オペレーション命令で置き換える段階をさらに備える請求項2に記載の機械可読媒体。
【請求項11】
前記実行される方法は、
1つのファスト・コンペア‐エクスチェンジのオペレーションの実行が成功し、前記キャッシュラインが追い出しされ、他のハードウェアコンテキストからのキャッシュラインマークのオペレーションが前記キャッシュラインについて行われ、ハードウェアコンテキストによって前記キャッシュラインに書き込みが行われ、割り込みが発生し、前記キャッシュラインマークのシーケンスの間にハードウェア障害が発生したときに、前記有効ビットを消去する段階をさらに含む請求項6に記載の機械可読媒体。
【請求項12】
ファスト・コンペア‐エクスチェンジの命令をデコードするデコード論理と、
前記ファスト・コンペア‐エクスチェンジの命令をデコードした後に、前記ファスト・コンペア‐エクスチェンジの命令を実行する実行論理と
を備えるプロセッサ。
【請求項13】
キャッシュラインマークの命令をデコードするデコード論理と
前記キャッシュラインマークの命令をデコードした後に前記キャッシュラインマークの命令を実行する実行論理とをさらに備える請求項12に記載のプロセッサ。
【請求項14】
前記実行論理はさらに、前記ファスト・コンペア‐エクスチェンジのオペレーションの結果を格納する請求項13に記載のプロセッサ。
【請求項15】
前記ファスト・コンペア‐エクスチェンジのオペレーションが成功した場合に、前記ファスト・コンペア‐エクスチェンジのオペレーションの一部として実行される第1のマイクロオペレーションとしてストア・マイクロオペレーションを使用して、前記結果が格納される請求項14に記載のプロセッサ。
【請求項16】
前記実行論理はさらに、前記ファスト・コンペア‐エクスチェンジのオペレーションが失敗した場合に、前記ファスト・コンペア‐エクスチェンジの命令をコンペア‐エクスチェンジ命令として実行する請求項13に記載のプロセッサ。
【請求項17】
前記プロセッサは、メモリアドレス位置を格納するレジスタを備える請求項13に記載のプロセッサ。
【請求項18】
前記実行論理はさらに、前記メモリアドレス位置のメモリから読み出されたキャッシュライン格納データのタグID構造に、有効ビットを設定する請求項17に記載のプロセッサ。
【請求項19】
前記実行論理はさらに、
前記タグID構造にビットマスクを設定し、
前記ビットマスクは、前記キャッシュラインのいずれのビットが、前記キャッシュラインマークのオペレーションと関連しているかを示す請求項18に記載のプロセッサ。
【請求項20】
前記実行論理はさらに、
前記タグID構造にハードウェアコンテキストID値を設定し、
前記ハードウェアコンテキストID値は、前記キャッシュラインマークのオペレーションを実行した特定のハードウェアコンテキストを示す請求項19に記載のプロセッサ。
【請求項21】
前記実行論理はさらに、
前記有効ビットが設定されたかを判断し、
前記キャッシュラインマークのビットマスクとファスト・コンペア‐エクスチェンジのビットマスクとの間に前記ビットマスクが正しく設定されたかを判断し、
前記キャッシュラインマークのハードウェアIDコンテキストが、ファスト・コンペア‐エクスチェンジのハードウェアIDコンテキストと合致するかを判断し、
全ての前記判断の結果が肯定的であった場合に、ファスト・コンペア‐エクスチェンジのオペレーションを実行する請求項20に記載のプロセッサ。
【請求項22】
前記実行論理はさらに、
前記プロセッサが、前記キャッシュラインマークの命令をサポートしていないと確認された場合には、前記キャッシュラインマークの命令をノー・オペレーション命令で置き換える請求項13に記載のプロセッサ。
【請求項23】
キャッシュラインマークの命令を格納するメモリと、
前記キャッシュラインマークの命令及びファスト・コンペア‐エクスチェンジの命令を実行するプロセッサと、
前記ファスト・コンペア‐エクスチェンジの命令を実行するメモリと
を備え、
前記ファスト・コンペア‐エクスチェンジの命令が成功した場合に、前記ファスト・コンペア‐エクスチェンジの命令の実行により、結果が生成されるシステム。
【請求項24】
前記ファスト・コンペア‐エクスチェンジのオペレーションが成功した場合に、前記ファスト・コンペア‐エクスチェンジのオペレーションの一部として実行される第1のマイクロオペレーションとしてストア・マイクロオペレーションを使用して、前記結果を格納する請求項23に記載のシステム。
【請求項25】
前記ファスト・コンペア‐エクスチェンジの命令が失敗した場合に、前記ファスト・コンペア‐エクスチェンジの命令をコンペア‐エクスチェンジ命令として実行する請求項23に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate