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

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

Info

Publication number
JP5451579B2
JP5451579B2 JP2010249856A JP2010249856A JP5451579B2 JP 5451579 B2 JP5451579 B2 JP 5451579B2 JP 2010249856 A JP2010249856 A JP 2010249856A JP 2010249856 A JP2010249856 A JP 2010249856A JP 5451579 B2 JP5451579 B2 JP 5451579B2
Authority
JP
Japan
Prior art keywords
instruction
cache line
compare
exchange
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010249856A
Other languages
English (en)
Other versions
JP2011129104A (ja
Inventor
ビー. フライマン、ジョシュア
トーマス フォアシス、アンドリュー
グロチョウスキ、エドワード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2011129104A publication Critical patent/JP2011129104A/ja
Application granted granted Critical
Publication of JP5451579B2 publication Critical patent/JP5451579B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、コンピュータプロセッサによって実行されるコードに実装されるコンペア‐エクスチェンジ(比較/交換)オペレーションに関する。
CMPXCHG(Compare-Exchange:比較/交換)オペレーションは、コード領域(すなわち、命令、オペレーション等)周辺のクリティカルな部分を形成する命令シーケンスのうちの1つの命令として広く使用されている。このオペレーションでは、コード領域を不可分で実行することが可能である。1つの命令セットは、次のような2つの条件に合った場合に、不可分(アトミック)であると考えることができる。1つ目の条件は、命令セット全体が完了するまで、他のプロセスは、行われた変更について知り得ないことであり、2つ目の条件は、命令セットのうちある命令が失敗した場合に、命令セット全体が失敗するということである。命令セット全体が失敗となった場合、その命令を実行しているコンピュータシステムの状態は、命令が実行される前の状態に戻される。ある実施形態では、CMPXCHG命令は、クリティカルな部分を持ったコード領域のソフトウェアで規定されたラッパー(wrapper)として考えることができる。すなわち、このラッパーは、ソフトウェアコードに組み込むことが可能であるが、ハードウェアによって実行されるという意味では、ラッパーではない。
CMPXCHG命令は、不可分命令セットの開始時にメモリから取得した値が、命令セットの実行中に他のプロセスによって変更されていないことを確認することにより、この命令セットが不可分に実行されるのを補助する役目をする。例えば、不可分命令セットの開始時に、メモリの特定の位置(ロケーション)における値をレジスタに読み込む場合、命令セットが完了した後に、新たな(すなわち、変更された)値を元のメモリ位置に再読み込みする要求が発行される場合がある(ここで、変更された値が、命令セットの実行結果である)。
CMPXCHG命令は、不可分命令セットの終わりに使用され、特定のメモリ位置から元々読み出された値が、依然として、そのメモリ内の位置に存在するかを確認するのに利用される(すなわち、不可分命令セットの実行の間のある時点で、他のプロセス又はスレッドにより変更されていないかを確認する)。元の値が依然として存在している場合には、CMPXCHG命令は、新たな値を、古い値が保存されていた特定のメモリ位置に読み込み、不可分命令セットが無事に完了する。元の値がそこに存在していない場合には、不可分命令セットの実行の間に、他のプロセス又はスレッドによって値が変更されたことを意味し、CMPXCHG命令は、新たな値を特定のメモリ位置に読み込むことはせず、システムにこの事を通知し、通知の結果によっては、コードにおける条件付ジャンプが実行される場合がある、すなわち、命令を無事に完了させることを再度試みるため、不可分命令セットの始めまでジャンプする。
本発明を図面を参照して説明するが、本発明はこれら図面に限定されない。また、添付の図面では、同一の要素には、同一の参照符号を付して説明する。
CLMARKコマンドに使用されるキャッシュラインタグのセットの実施形態を示した図である。 全CMPXCHGマイクロオペレーションシーケンスを実行すべきか、又はCMPXCHGオペレーションのSTORE部分のみを実行すべきかを判断するFASTCMPXCHG命令の決定木の実施形態を示したフローチャートである。 CLMARK及びFASTCMPXCHG命令を実行可能な1つ以上のCPUコアを含むコンピュータシステムの実施形態を示したものである。
適応型の最適化されたコンペア‐エクスチェンジオペレーションを実装する機械可読媒体、プロセッサ及びシステムの実施形態を記載する。
まず、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のマイクロオペレーションは、実行を必要とせず、省略することができ、プロセッサにおける実行効率をスピードアップさせることができる場合がある。
以下の記載及び特許請求の範囲において、本開示技術の「一実施形態」又は「ある実施形態」と呼ぶものは、実施形態に関連する特定の特徴、構造及び特性が、少なくとも本開示技術の実施形態の一つに含まれていることを意味する。したがって、本明細書中の様々な箇所で使用されている「一実施形態において」という表現は、必ずしも同一の実施形態を示していない。また、以下の記載及び特許請求の範囲において、"含む(include)"、"〜からなる(comprise)"及びこれらの派生語が使用されるが、これらは、同義語として扱われることを意図している。
今日のマルチスレッド環境では、不可分命令セットは、実行の途中で中断されることがある。この場合、他のスレッドにメモリの制御が引き渡され、格納されている値の幾つか又は多くを変更することが可能である。これは、不可分命令セットによって使用されるメモリ位置における値が、同じメモリ位置に新たな値が書き込まれる前に変更されてしまっている例の1つである。
実際のCMPXCHG命令は、実質的に、"lock CMPXCHG [mem], rdx"という基本的なフォーマットを含む。
特に、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に読み込まれる。
lockは、CMPXCHG命令自身を、不可分命令に変える。CMPXCHG命令は、上述したようなマイクロオペレーションのLOAD、COMPARE及びSTOREの組み合わせに分解できてしまうことから、このように不可分命令にすることが望ましい。
CMPXCHG命令全体が、成功するか失敗するかは、上述の実行フローの2)のCOMPARE命令の結果に依存する。CMPXCHGが成功したか否かを確認する単純な方法としては、成功した場合にはゼロフラグ(ZF)を設定し、失敗したらゼロフラグを解除するということが挙げられる。CMPXCHG命令に先立つある時点で、マイクロオペレーションのセット(LOAD-COMPARE-STORE)を付加的なLOAD命令と共に開始させる。これは、不可分命令の開始時に、CMPXCHG命令は、[mem]における値のeax/raxレジスタへの最初のLOADを必要とするからである。不可分命令セット全体の例として、例えば次のようなコードとして表される。
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として、ゼロ命令がもう一度トライを引き起こさない場合には、ジャンプする。
CMPXCHG命令が使用される場合、使用されるLOAD-COMPARE-STOREの組み合わせのマイクロオペレーションは、シリアル的に依存したフローとなる。このシリアルフロー依存性により、CMPXCHG命令を完了させるのに必要なマイクロオペレーションの数は、膨大となり得る。
上述したように、CMPXCHG命令は、一般的に、1つの命令シーケンスのうちの1つの命令として使用され、コード領域周辺でクリティカルな部分を形成し、特に、他のプロセス/スレッドが、対象となるメモリ位置の値を変更していないかを判断するのに使用される。対象のコア内の他のプロセス/スレッドが、不可分命令セットのコードのフローを中断させていない場合、及び別のコードを実行している他のコアが、対象のキャッシュラインをスヌープし終えている場合には、そのメモリ位置おける値に変更がないはずである。したがって、メモリ位置における値を調べることなく、同じコア内又は他のコア内の他のプロセス/スレッドがメモリ位置のメモリ内容を変更していないことを前もって知ることができれば、CMPXCHG命令のLOAD及びCOMPARE部分を実行する必要がないと言える。すなわち、メモリ位置における値に外部からの影響(すなわち、他のプロセス/スレッド/コア)がなかったと判断された場合には、CMPXCHG命令の必要な部分は、そのメモリ位置に新たな値を読み込む最後のSTOREマイクロオペレーションのみであると言える。
したがって、多くの実施形態では、2つの新規の命令を実装して、多くの場合実行する必要のない標準的なCMPXCHG組み合わせのマイクロオペレーションのうちのCOMPARE-STORE部分を実行させる。すなわち、多くの場合、ここに記載する新規の命令により、単に、組み合わせのSTORE部分のみの実行すればよくなる。
多くの実施形態では、この2つの命令は、CLMARK命令及びFASTCMPXCHG命令と呼ばれる。1番目の新規の命令はCLMARKである。CLMARK命令は、CLMARK8B memといった特定のフォーマットを有してもよい。
memフィールドは、1つのキャッシュライン内に収まる基本メモリアドレス情報を含む。8Bフィールドは、memアドレスで始まる何バイトを、FASTCMPXCHGとして考えるべきかを示す。多くの実施形態の場合、CPU(Central Processing Unit)のキャッシュラインの大きさに至るまでの全ての2の累乗のバイトサイズをサポートする8Bフィールドを持った様々なCLMARK命令バージョンが存在していてもよい。
CLMARKオペレーションが、必要となる一意的に特定するためのタグを、memロケーションが参照する対象のキャッシュラインに設定し、不可分シーケンスのための意図的オーナーシップを示す。例えば、"有効(valid)"ビットを、一意的に特定するタグで使用して、memロケーションのためのキャッシュラインにおけるデータが、以前として有効であることを示してもよい。また、CPUが1つのコアにつき複数のハードウェアコンテキストをサポートしている場合には、一意的に特定するタグが、ハードウェアコンテキストIDを含んでもよい。また、一意的に特定するタグが、各キャッシュラインに対するビットマスク(又は、CPU内に格納される専用スモールテーブルにおけるビットマスク)を含んでもよい。ビットマスクは、キャッシュラインにおける各バイトにつき、1つのビットを使用してもよい。このビットマスクは、共有データ構造において、失敗共有(false sharing)のコンフリクトを最小化するのに使用される。
CPUが、CLMARK命令をサポートしていない場合、コア内の実行論理は、単に、各CLMARKを"no operation (ノー・オペレーション)"(NOP)命令で置き換えるだけでもよい。このCLMARKからNOPへの置き換えは、CLMARKタグビットが、ヒントビットと見なされる所以である。また、CLMARK/FASTCMPXCHG命令を実装するシステムも、CLMARKからNOPへの置き換えを、いかなる時に行ってもよい。CLMARK/FASTCMPXCHGを利用可能なシステムが、CMPXCHGを利用すると判断する理由として、多くの例を挙げることができる。例えば、内部の共有リソースを使い果たし、特定のイベントが実行され、他の複数のリソースのうち、デバッグ/テストレジスタが設定される場合などが挙げられる。
図1は、CLMARKコマンドのために使用されるキャッシュラインタグのセットの実施形態を示したものである。
上述したように、各タグは、キャッシュラインタグID、有効ビット102、HWコンテキストID104及びビットマスク106のような構造的要素を1つ又は複数含んでもよい。図1に示されている全てのタグ情報全体を、タグID構造と称する場合もある。多くの実施形態において、ビットマスクは、キャッシュラインを各バイトベースでマスクし、各バイトは、マスクのための独自のビットを持つ。したがって、キャッシュラインにNバイト存在する場合には、バイト0からN−1に対するビットマスクにおいて複数のビットが存在する。CLMARK命令が実行されると、memベースアドレス及び8Bフィールドを利用して適切なビットマスク値が設定され、次のFASTCMPXCHGシーケンスに関係するキャッシュラインにおけるこれらのバイトにフラグを付ける。
別の実施形態では、バイト毎のビットマスクフィールドは利用しなくてもよい。バイト毎のビットマスクフィールドが使用されない場合には、キャッシュライン全体に対して1つのビットを使用して、そのキャッシュラインがCLMARK/FASTCMPXCHG命令に関与していることを示すようにしてもよい。
FASTCMPXCHGは、上述した新規の命令の、2番目の命令である。FASTCMPXCHG命令は、lock FASTCMPXCHG8B [mem], testval, newvalのような特定のフォーマットを有してもよい。
FASTCMPXCHG命令は、レガシーコード問題を避けるために、元のCMPXCHG命令とは異なる表現がなされている。すなわち、CMPXCHG命令がFASTCMPXCHG命令のように動作するよう更新されている場合には、CMPXCHGを使用したレガシーコードは、正確なフォーマット又は付随した条件を含んでいなくてもよく、2つの異なる命令が利用される。レガシー命令及び新規の命令は、実行ユニットを共有してもよいし、共有しなくてもよい。2つの命令の間での機能複製の量を考えると、レガシー命令と新規の命令との間で、実行ユニットを共有するのが効率的であると言えるかもしれない。
FASTCMPXCHG [mem]フィールドは、コンペア/エクスチェンジ目的に使用される値を格納するキャッシュラインに対応する、メモリ位置のベースメモリアドレスを示す。8Bフィールドは、上述の目的におけるCLMARK 8Bフィールドの写しであり、[mem]アドレスから始まる何バイトを、FASTCMPXCHGとして考えるべきかを示す。多くの実施形態において、CPUのキャッシュラインの大きさに至るまでの2の累乗全てのバイトサイズをサポートする8Bフィールドを持った様々なFASTCMPXCHG命令バージョンが存在していてもよい。
FASTCMPXCHG命令は、先に詳述したように、LOAD、COMPARE及びSTOREのマイクロオペレーション(μop)フェーズに分解できるが、LOADに先立って、分岐が存在する。内部分岐では、全LOAD-COMPARE-STOREマイクロオペレーションシーケンスが、順番に実行された否かを判断する、又はLOAD-COMPARE部分がスキップされ、STORE部分のみが実際には実行されたのかを判断する。FASTCMPXCHG命令内のブランチでは、決定の数に基づいてどのパスを選択するべきかを判断する。したがって、コードを実行するハードウェアにおいて、いずれのケースであっても、FASTCMPXCHGオペレーションを採用可能である。
図2は、全CMPXCHGマイクロオペレーションシーケンスを実行すべきか、又はCMPXCHGオペレーションのSTORE(ストア)部分のみを実行すべきかを判断するFASTCMPXCHG命令の決定木の実施形態を示したものである。
決定木内のいずれの方向に進むべきかを判断する処理論理は、ハードウェア(例えば、実行ユニット回路)、ファームウェア(例えば、一般的なCPUマイクロコード)、又はハードウェア及びファームウェア両方の組み合わせを含んでもよい。図2に示すように、処理論理は、まず初めに、実行パイプラインにおいてFASTCMPXCHGオペレーションを受信する(処理ブロック200)。次いで処理論理は、FASTCMPXCHG命令に関連付けられたマイクロアーキテクチャヒントビットを含むキャッシュラインタグを探す(処理ブロック202)。ハードウェアがFASTCMPXCHGを処理する能力を有する場合には、先行するCLMARKが利用可能なタグが、各キャッシュラインについて提示される。ハードウェアがタグを持っていない場合は、CLMARK及びFASTCMPXCHGは、サポートされない。その場合には、処理論理は、コードのリストに載っているFASTCMPXCHG命令の代わりに、[mem]、testval、及びnewvalパラメータを使用して標準的なCMPXCHG命令を実行する(処理ブロック212)。
マイクロアーキテクチャヒントビットを含むタグが存在する場合には、処理論理は、ヒントビットがその[mem]アドレスについて有効であるかを確認する(処理ブロック204)。処理論理は、[mem]アドレスに合致するキャッシュラインの"有効"ビット(図1を参照)を確認することにより、ビットが有効かの判断を行うことができる。CLMARK命令は、ビットを"有効"に設定することができる。"有効"ビットが設定されない場合には、そのキャッシュラインのデータは、FASTCMPXCHG命令に対して有効なデータではなく、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。"有効"ビットが、[mem]アドレスにのキャッシュラインにおけるデータが有効であることを示すように設定される場合、処理論理は、現在のハードウェアコンテキストが、キャッシュラインタグ内のマイクロアーキテクチャヒントビット(すなわち、図1のヒントビット104)におけるハードウェア(HW)コンテキストID'dと合致する(処理ブロック206)。ハードウェアが、複数のハードウェアコンテキストをサポートしていない場合には、HWコンテキストID104ヒントビットは、常に同じものとなり、プロセスのこの部分は常に成功することになる。複数のハードウェアコンテキストがサポートされている場合には、プロセスのこの部分を成功させるために、HWコンテキストID104が合致する必要がある。
HWコンテキストIDが合致しない場合には、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。反対に、HWコンテキストIDが合致する、又はハードウェアが複数のコンテキストをサポートしていない場合には、処理論理は、ビットマスクが正しく設定されていると判断する(処理ブロック208)。処理論理は、CLMARKビットマスクと、FASTCMPXCHGビットマスクとを比較する。これらのビットマスクが合致しない場合には、処理論理は、[mem]、testval、及びnewvalパラメータを使用した通常のCMPXCHG命令を実行する(処理ブロック212)。ビットマスクが合致する場合には、処理論理は次のステップに進み、CMPXCHG命令のLOAD-COMPARE部分を実行することなく直接新たな値を格納(STORE)する新規なFASTCMPXCHG命令を実行する(処理ブロック210)。
上述したように、図2の決定木のある分岐点において失敗した場合には、予備として通常のCMPXCHGが常に実行される。このようにすることで、コードの進行を確実にすることができる。
次に示す条件のうち、いずれか1つを満たすキャッシュラインについては、(図1で詳述した)マイクロアーキテクチャヒントビットを消去して、無効を設定してもよい。
1)そのキャッシュラインにおいてFASTCMPXCHG命令の実行が成功した。
2)ヒントビットを持つキャッシュラインが、キャッシュから追い出しされた。
3)他のハードウェアコンテキストによって実行されたCLMARKが、そのキャッシュラインを対象としていた。
4)他のハードウェアコンテキストによってそのキャッシュラインが書き込まれた。
5)割り込みが起きた。
6)CLMARK発生から、FASTCMPXCHG命令の完了までの間に、ハードウェア故障が発生した。
他の実施形態では、マイクロアーキテクチャヒントビットを、FASTCMPXCHG命令の実行に伴って、消去しなくてもよい。次に続くFASTCMPXCHGが、同じデータについてオペレーションを行う場合には、CLMARK命令に関連したオーバーヘッドなしにオペレーションを実行できることから、ヒントビットを消去しない方が効率的であると言える場合もある。
ビットマスクフィールドが使用される多くの実施形態では、上記で列挙したようなキャッシュラインヒントビットを消去及び無効化する規則は、キャッシュラインは影響を受けるかもしれないが、CLMARKによってフラグを付けられたバイトのいずれも特に影響を受けていないといったキャッシュの状況の因子となるものに応じて変更してもよい。
また、lockをFASTCMPXCHG命令にも利用して、FASTCMPXCHG命令を不可分命令としてもよい。これは、FASTCMPXCHG命令が、CMPXCHG命令のLOAD-COMPARE部分を消去したがために成功しなかった場合には、マイクロオペレーションのLOAD-COMPARE-STORE組み合わせの全てが実行されることになるので、元のCMPXCHG命令と同様に、lockが必要となる。
次に、CLMARK-FASTCMPXCHG命令を実行するCPUの実施形態を説明する。この実施形態では、CPUが、キャッシュに必須のマイクロアーキテクチャヒントビットをタグ付けすることができる1つ以上のコアを含む。サンプルコードの全てを以下に示す。
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とし、ゼロでない命令がもう一度トライを引き起こさなければジャンプする。
図3は、CLMARK及びFASTCMPXCHG命令を実行可能な1つ以上のCPUコアを含むコンピュータシステムの実施形態を示したものである。
図には、コンピュータシステム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)を含む。
他の実施形態では、CPU302及び304はそれぞれ、図3に示したコアの数4つよりも多い又は少ない数のコアを有していてもよい。多くの実施形態において、各コア(例えば、コアA0(306)のような)は、1つ以上の実行ユニット、リタイアメントユニット、汎用レジスタ及び特定レジスタの組等を含む。図3に示すコアが、マルチスレッド又はハイパースレッドである場合には、各ハードウェアスレッドを、1つのコアとして見なすこともできる。
また、CPU302及び304はそれぞれ、ラストレベルキャッシュ(LLC)322及び324のような1つ以上のキャッシュを含む。図示しない多くの実施形態において、キャッシュ322及び324以外に他のキャッシュを実装してもよく、各コア及びメモリにおける実行ユニット間には、複数レベルのキャッシュが存在する。他の実施形態において、複数のキャッシュが、様々な方法で分配されていてもよい。様々な実施形態において、キャッシュ322及び324はそれぞれ、異なるサイズのキャッシュのうちの1つであってもよい。例えば、キャッシュ322及び324はそれぞれ、8メガバイト(MB)キャッシュ、16MBキャッシュ等であってもよい。また、様々な実施形態において、キャッシュは、ダイレクトマップキャッシュ、フルアソシエイティブキャッシュ、マルチウェイセットアソシエイティブキャッシュ、又は他の種類のマップ方式のキャッシュであってもよい。各キャッシュは、それぞれのCPUにおいて全てのコアが共有する1つの大きな部分を含んでもよいし、又は、別々に機能する複数のスライス(例えば、1つのコアにつき、1つのスライスといったように)に分割されていてもよい。また、各キャッシュは、全てのコアによって共有される1つの部分と、各コアに対応して別々に機能するスライス部分とを含んでもよい。
多くの実施形態において、CPU302及び304はそれぞれ、自身のシステムメモリコントローラ(326及び328)を含み、それぞれシステムメモリ330及び332と通信するインターフェースを提供してもよい。図示しない他の実施形態では、コンピュータシステム300において、メモリコントローラ330及び332は、個別の素子である又は、他のデバイス内に集積されていてもよい。
システムメモリ330及び332は、ダブルデータレート(DDR)DRAMのようなダイナミック・ランダム・アクセス・メモリ(DRAM)、フラッシュメモリのような不揮発性メモリ、相変化メモリ(PCM)、又は他の種類のメモリ技術を含んでもよい。システムメモリ330及び332は、それぞれCPU302及び304によって実行されるべき命令及びデータを格納する実行汎用メモリであってもよい。また、コンピュータシステム300内に、システムメモリに対して読み込み及び書き込みを行うことが可能な、ダイレクトメモリアクセル(DMA)可能な入出力(I/O)デバイスのような他のデバイスを設けてもよい。
対応するシステムメモリと各CPUとを連結するリンク(すなわち、バス、相互接続等)は、データ、アドレス、制御及びクロック情報を転送可能な1つ以上の光学配線、金属配線又は他の配線(すなわち、ライン)を含んでもよい。
また、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と通信してもよい。
高性能インターフェースコンプレックス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は、異なるプロトコルを使用してもよい。
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と連結される相互接続/バスのプロトコルを翻訳するプロトコルを提供してもよい。
コンピュータシステム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に示すようなデバイス全体に分配されていてもよい。
図示していないが、CPU、バス、メモリ等の異なるレイアウトを利用したコンピュータシステムの他の実装形態も、本発明を実装するのに適用可能である。
また、CLMARK及びFASTCMPXCHG命令を含むコードが、オペレーションの間、異なる時間にコンピュータシステム300の1つ又は複数の場所に存在してもよい。例えば、新規の命令を実装するコード416は、システムメモリ330若しくは332(コード416A若しくはコード416B)、キャッシュ322若しくは324(コード416C若しくはコード416D)、大容量記憶デバイス368(コード416E)、又はコンピュータシステム300内部のその他の場所若しくは外部に存在して(すなわち、格納されて)いてもよい。
以上、適応型の最適化されたコンペア‐エクスチェンジオペレーションを実装する機械可読媒体、プロセッサ及びシステムの実施形態を説明した。特定の例を示す実施形態を参照して、実施形態が説明されたが、ここに記載された実施形態の範囲内において、様々な改良及び変更が可能であることは、当業者にとって明らかである。したがって、本明細書及び添付の図面は、発明を限定するためのものではなく、例示するためのものと見なすべきである。

Claims (22)

  1. コンピュータに、
    キャッシュラインにヒントビットをタグ付けするキャッシュラインマーク命令を実行する段階と、
    前記ヒントビットを確認した結果に基づいて、コンペア‐エクスチェンジ・オペレーション、または、ファスト・コンペア‐エクスチェンジ・オペレーションとして結果を格納するストア・オペレーションを実行するファスト・コンペア‐エクスチェンジ命令を実行する段階と、
    を備える方法を実行させるためのプログラム。
  2. 前記ファスト・コンペア‐エクスチェンジ命令を実行する段階は、
    前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能と判断した場合に、前記ファスト・コンペア‐エクスチェンジ命令の第1マイクロオペレーションで、前記結果の前記格納を実行する請求項1に記載のプログラム。
  3. 前記ファスト・コンペア‐エクスチェンジ命令を実行する段階は、
    前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能でないと判断した場合に、コンペア‐エクスチェンジ・オペレーションを実行する請求項1または2に記載のプログラム。
  4. 前記キャッシュラインマーク命令は、メモリアドレス位置パラメータを含む請求項1から3のいずれか一項に記載のプログラム。
  5. 前記キャッシュラインマーク命令を実行する段階は、
    前記メモリアドレス位置のメモリから読み出したキャッシュライン格納データのタグID構造に、前記ヒントビットおよび有効ビットを設定する請求項に記載のプログラム。
  6. 前記キャッシュラインマーク命令を実行する段階は、
    前記タグID構造にビットマスクを更に設定し、
    前記ビットマスクは、前記キャッシュラインのいずれのビットが、前記キャッシュラインマーク命令と関連しているかを示す請求項5に記載のプログラム。
  7. 前記キャッシュラインマーク命令を実行する段階は、
    前記タグID構造にハードウェアコンテキストID値を前記ヒントビットとして設定し、
    前記ハードウェアコンテキストID値は、前記キャッシュラインマーク命令を実行した特定のハードウェアコンテキストを示す請求項に記載のプログラム。
  8. 前記ファスト・コンペア‐エクスチェンジ命令を実行する段階は、
    前記有効ビットが設定されたことが確認され、前記キャッシュラインマーク命令のビットマスクと前記ファスト・コンペア‐エクスチェンジ命令のビットマスクとの間に前記ビットマスクが正しく設定されたことが確認され、且つ前記キャッシュラインマーク命令のハードウェアIDコンテキストが、前記ファスト・コンペア‐エクスチェンジ命令のハードウェアIDコンテキストと合致することが確認された場合に、
    ファスト・コンペア‐エクスチェンジオペレーションを実行する請求項に記載のプログラム。
  9. 前記実行される方法は、
    前記コンピュータが前記キャッシュラインマーク命令をサポートしていないと確認された場合には、前記キャッシュラインマーク命令をノー・オペレーション命令で置き換える段階をさらに備える請求項1から8のいずれか一項に記載のプログラム。
  10. 前記実行される方法は、
    ファスト・コンペア‐エクスチェンジ命令の実行が成功したとき、前記キャッシュラインが追い出しされたとき、他のハードウェアコンテキストからのキャッシュラインマーク命令が前記キャッシュラインについて行われたとき、ハードウェアコンテキストによって前記キャッシュラインに書き込みが行われたとき、割り込みが発生したとき、および、前記キャッシュラインマーク命令のシーケンスの間にハードウェア障害が発生したときの少なくとも1つにおいて、前記有効ビットを消去する段階をさらに含む請求項5から8のいずれか一項に記載のプログラム。
  11. キャッシュラインにヒントビットをタグ付けするキャッシュラインマーク命令、および、前記ヒントビットを確認した結果に基づいて、コンペア‐エクスチェンジ・オペレーション、または、ファスト・コンペア‐エクスチェンジ・オペレーションとして結果を格納するストア・オペレーションを実行するファスト・コンペア‐エクスチェンジ命令をデコードするデコード論理と、
    前記キャッシュラインマーク命令および前記ファスト・コンペア‐エクスチェンジ命令を実行する実行論理と
    を備えるプロセッサ。
  12. 前記実行論理は、前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能と判断した場合に、前記ファスト・コンペア‐エクスチェンジ命令の第1のマイクロオペレーションとしてストア・マイクロオペレーションを使用して、前記結果を格納する請求項11に記載のプロセッサ。
  13. 前記実行論理は、前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能でないと判断した場合に、前記ファスト・コンペア‐エクスチェンジ命令をコンペア‐エクスチェンジ命令として実行する請求項11または12に記載のプロセッサ。
  14. 前記プロセッサは、メモリアドレス位置を格納するレジスタを備える請求項11から13のいずれか一項に記載のプロセッサ。
  15. 前記実行論理は、前記キャッシュラインマーク命令の実行において、前記メモリアドレス位置のメモリから読み出されたキャッシュライン格納データのタグID構造に、前記ヒントビットおよび有効ビットを設定する請求項14に記載のプロセッサ。
  16. 前記実行論理は、前記キャッシュラインマーク命令の実行において、
    前記タグID構造にビットマスクを更に設定し、
    前記ビットマスクは、前記キャッシュラインのいずれのビットが、前記キャッシュラインマーク命令と関連しているかを示す請求項15に記載のプロセッサ。
  17. 前記実行論理は、前記キャッシュラインマーク命令の実行において、
    前記タグID構造にハードウェアコンテキストID値を前記ヒントビットとして設定し、
    前記ハードウェアコンテキストID値は、前記キャッシュラインマーク命令を実行した特定のハードウェアコンテキストを示す請求項16に記載のプロセッサ。
  18. 前記実行論理は、前記ファスト・コンペア‐エクスチェンジ命令の実行において、
    前記有効ビットが設定されたかを判断し、
    前記キャッシュラインマーク命令のビットマスクと前記ファスト・コンペア‐エクスチェンジ命令のビットマスクとの間に前記ビットマスクが正しく設定されたかを判断し、
    前記キャッシュラインマーク命令のハードウェアIDコンテキストが、前記ファスト・コンペア‐エクスチェンジ命令のハードウェアIDコンテキストと合致するかを判断し、
    全ての前記判断の結果が肯定的であった場合に、ファスト・コンペア‐エクスチェンジ・オペレーションを実行する請求項17に記載のプロセッサ。
  19. 前記実行論理は、前記キャッシュラインマーク命令の実行において、
    前記プロセッサが、前記キャッシュラインマーク命令をサポートしていないと確認された場合には、前記キャッシュラインマーク命令をノー・オペレーション命令で置き換える請求項11から18のいずれか一項に記載のプロセッサ。
  20. キャッシュラインにヒントビットをタグ付けするキャッシュラインマーク命令、および、前記ヒントビットを確認した結果に基づいて、コンペア‐エクスチェンジ・オペレーション、または、ファスト・コンペア‐エクスチェンジ・オペレーションとして結果を格納するストア・オペレーションを実行するファスト・コンペア‐エクスチェンジ命令を格納するメモリと、
    前記キャッシュラインマーク命令、及び、前記ファスト・コンペア‐エクスチェンジ命令を実行するプロセッサと、
    を備え、
    前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジ・オペレーションが実行可能と判断した場合に、前記ファスト・コンペア‐エクスチェンジ・オペレーションの実行により、結果が生成されるシステム。
  21. 前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能と判断した場合に、前記ファスト・コンペア‐エクスチェンジ命令の第1のマイクロオペレーションとしてストア・マイクロオペレーションを使用して、前記結果を格納する請求項20に記載のシステム。
  22. 前記ヒントビットを確認した結果、ファスト・コンペア‐エクスチェンジオペレーションが実行可能でないと判断した場合に、前記ファスト・コンペア‐エクスチェンジ命令をコンペア‐エクスチェンジ命令として実行する請求項20または21に記載のシステム。
JP2010249856A 2009-12-18 2010-11-08 適応的最適化された比較/交換オペレーション Expired - Fee Related JP5451579B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/653,800 US8601242B2 (en) 2009-12-18 2009-12-18 Adaptive optimized compare-exchange operation
US12/653,800 2009-12-18

Publications (2)

Publication Number Publication Date
JP2011129104A JP2011129104A (ja) 2011-06-30
JP5451579B2 true JP5451579B2 (ja) 2014-03-26

Family

ID=44152793

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010249856A Expired - Fee Related JP5451579B2 (ja) 2009-12-18 2010-11-08 適応的最適化された比較/交換オペレーション

Country Status (5)

Country Link
US (1) US8601242B2 (ja)
JP (1) JP5451579B2 (ja)
CN (2) CN102103482B (ja)
DE (1) DE102010053095A1 (ja)
TW (1) TWI608412B (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8447934B2 (en) * 2010-06-30 2013-05-21 Advanced Micro Devices, Inc. Reducing cache probe traffic resulting from false data sharing
US8832505B2 (en) 2012-06-29 2014-09-09 Intel Corporation Methods and apparatus to provide failure detection
US9256466B2 (en) 2013-06-07 2016-02-09 Arm Limited Data processing systems
US9092345B2 (en) * 2013-08-08 2015-07-28 Arm Limited Data processing systems
US10380593B2 (en) 2014-11-10 2019-08-13 Mastercard International Incorporated Systems and methods for detecting compromised automated teller machines
CN105988774A (zh) * 2015-02-20 2016-10-05 上海芯豪微电子有限公司 一种多发射处理器系统和方法
US10223002B2 (en) * 2017-02-08 2019-03-05 Arm Limited Compare-and-swap transaction
CN110515656B (zh) * 2019-08-28 2021-07-16 中国人民解放军国防科技大学 一种casp指令的执行方法、微处理器及计算机设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2500101B2 (ja) 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
US5889983A (en) * 1997-01-21 1999-03-30 Intel Corporation Compare and exchange operation in a processing system
US6128706A (en) * 1998-02-03 2000-10-03 Institute For The Development Of Emerging Architectures, L.L.C. Apparatus and method for a load bias--load with intent to semaphore
US6671792B1 (en) * 2000-04-28 2003-12-30 Hewlett-Packard Development Company, L.P. Share masks and alias for directory coherency
EP1363188B1 (en) * 2002-05-15 2007-08-29 Broadcom Corporation Load-linked/store conditional mechanism in a cc-numa (cache-coherent nonuniform memory access) system
US7266587B2 (en) * 2002-05-15 2007-09-04 Broadcom Corporation System having interfaces, switch, and memory bridge for CC-NUMA operation
US8607241B2 (en) * 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US7596738B2 (en) 2004-11-17 2009-09-29 Sun Microsystems, Inc. Method and apparatus for classifying memory errors
US7917698B2 (en) * 2007-10-26 2011-03-29 Oracle America, Inc. Method and apparatus for tracking load-marks and store-marks on cache lines

Also Published As

Publication number Publication date
TW201131472A (en) 2011-09-16
CN102103482B (zh) 2015-01-28
US20110154000A1 (en) 2011-06-23
TWI608412B (zh) 2017-12-11
DE102010053095A1 (de) 2011-06-30
CN104657109B (zh) 2017-09-15
CN102103482A (zh) 2011-06-22
JP2011129104A (ja) 2011-06-30
CN104657109A (zh) 2015-05-27
US8601242B2 (en) 2013-12-03

Similar Documents

Publication Publication Date Title
JP5451579B2 (ja) 適応的最適化された比較/交換オペレーション
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US7552290B2 (en) Method for maintaining atomicity of instruction sequence to access a number of cache lines during proactive synchronization within a computer system
US20180011748A1 (en) Post-retire scheme for tracking tentative accesses during transactional execution
JP5118652B2 (ja) アウトオブオーダープロセッサにおけるトランザクショナルメモリ
JP4388916B2 (ja) 複数の順序ベクトルで複数のメモリ順序モデルを実施する方法及び装置
KR101025354B1 (ko) 가상 트랜잭션 메모리를 위한 글로벌 오버플로우 방법
US8190859B2 (en) Critical section detection and prediction mechanism for hardware lock elision
TWI483180B (zh) 重疊原子區域執行的方法
BRPI1005259A2 (pt) vetores simd sincronizadores
US9280349B2 (en) Decode time instruction optimization for load reserve and store conditional sequences
US11119925B2 (en) Apparatus and method for managing capability metadata
JP2015158936A (ja) データ処理装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120912

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120925

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121225

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121228

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130124

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130222

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130227

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130604

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130903

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130906

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131004

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131105

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131204

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131210

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131226

R150 Certificate of patent or registration of utility model

Ref document number: 5451579

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees