JP4764430B2 - マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション - Google Patents

マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション Download PDF

Info

Publication number
JP4764430B2
JP4764430B2 JP2007549621A JP2007549621A JP4764430B2 JP 4764430 B2 JP4764430 B2 JP 4764430B2 JP 2007549621 A JP2007549621 A JP 2007549621A JP 2007549621 A JP2007549621 A JP 2007549621A JP 4764430 B2 JP4764430 B2 JP 4764430B2
Authority
JP
Japan
Prior art keywords
transaction
access
execution
address
invalidation
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.)
Active
Application number
JP2007549621A
Other languages
English (en)
Other versions
JP2008525923A (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 JP2008525923A publication Critical patent/JP2008525923A/ja
Application granted granted Critical
Publication of JP4764430B2 publication Critical patent/JP4764430B2/ja
Active 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Description

本発明は、集積回路の分野に関し、詳細には、複数の集積回路、コア、及びスレッドの間の共有データオペレーションに関する。
半導体処理及び論理設計の進歩によって、集積回路デバイス上に存在できるロジックの量を増加させることが可能になった。その結果、コンピュータシステム構成は、集積回路がシステムに単一又は複数ある状態から、複数のコア及び複数の論理プロセッサが個々の集積回路上に存在する状態に発展した。集積回路は、通常、単一のプロセッサダイを備える。この場合、プロセッサダイは、任意の個数のコア又は論理プロセッサを含むことができる。
一例として、単一の集積回路は、1つ又は複数のコアを有することができる。コアという用語は、通例、集積回路上のロジックが、独立したアーキテクチャ状態を保持する能力を指す。この場合、各独立したアーキテクチャ状態は、専用実行資源に関連付けられている。したがって、2つのコアを有する集積回路は、通常、2つの別個で且つ独立したアーキテクチャ状態を保持するためにロジックを備え、各アーキテクチャ状態は、低レベルキャッシュ、実行ユニット、及び制御ロジック等のそれ自身の実行資源に関連付けられている。各コアは、高レベルキャッシュ、バスインターフェース、及びフェッチ/デコードユニット等のいくつかの資源を共有することができる。
別の例として、単一の集積回路又は単一のコアは、複数のソフトウェアスレッドを実行するための複数の論理プロセッサを有することができる。この単一の集積回路又は単一のコアは、マルチスレッディング集積回路又はマルチスレッディングコアとも呼ばれる。複数の論理プロセッサは、各論理プロセッサの固有のアーキテクチャ状態を保持する一方、通例、共通のデータキャッシュ、命令キャッシュ、実行ユニット、分岐予測器、制御ロジック、バスインターフェース、及び他のプロセッサ資源を共有する。マルチスレッディング技術の一例は、カリフォルニア州サンタクララ所在のIntel(登録商標)社が提供しているハイパースレッディング(Hyper-Threading)技術(HT)である。このHTは、信号物理プロセッサを使用して並列のスレッド実行を可能にする。
現在のソフトウェアは、複数のコア又は論理プロセッサの並列実行をスケジューリングできる個々のソフトウェアスレッドを実行する能力を有する。集積回路上のコア及び論理プロセッサの個数が増加の一途をたどることによって、より多くのソフトウェアスレッドを実行することが可能になる。しかしながら、同時に実行できるソフトウェアスレッドの個数の増加によって、ソフトウェアスレッド間で共有されるデータの同期に関する問題が引き起こされている。
複数のコアシステム又は複数の論理プロセッサシステムで共有データにアクセスする1つの一般的な解決策は、共有データへの複数のアクセス全体にわたって相互排除を保証するロックの使用を含む。一例として、第1のソフトウェアスレッドが或る共有メモリロケーションにアクセスしている場合、その共有メモリロケーションを保護するセマフォがロックされて、そのメモリロケーションを保護するセマフォがロック解除されるまで、システムの他のどのソフトウェアスレッドも、その共有メモリロケーションにアクセスすることが排除される。
しかしながら、上述したように、複数のソフトウェアスレッドを実行する能力が増加の一途をたどることによって、フォールスコンテンション(false contention)及び実行のシリアル化がもたらされる可能性がある。フォールスコンテンションは、セマフォが、データの集まりを保護するように一般に配列されることに起因して起こる。これは、ソフトウェアによってサポートされる共有の粒度に応じて、非常に大量のデータを覆う場合がある。この理由により、たとえソフトウェアスレッドが全体として独立したデータアイテムにアクセスしている場合であっても、セマフォは、それらのセマフォについて複数のソフトウェアスレッドによるコンテンションが存在し得るという点で、コンテンション「増幅器」として働く。これによって、第2のソフトウェアスレッドが第1のソフトウェアスレッドの実行を妨げることなく安全にアクセスできるデータロケーションを保護するセマフォを、第1のソフトウェアスレッドがロックする状況がもたらされる。しかし、第1のソフトウェアスレッドがセマフォをロックしたので、第2のスレッドは、セマフォがロック解除されるまで待たなければならず、その結果、通常ならば並列実行であるものがシリアル化されることになる。
本発明を、添付図面の図によって、限定のためではなく一例として説明する。
以下の説明では、本発明の完全な理解を提供するために、具体的な個数の物理/論理プロセッサ、具体的なトランザクションバッファフィールド、具体的なプロセッサロジック及び実施態様等、多数の具体的な詳細を述べる。しかしながら、本発明を実施するのに、これらの具体的な詳細を使用する必要はないことが当業者には明らかであろう。それ以外の場合には、マイクロプロセッサの既知の機能ブロック等、既知のコンポーネント又は方法は、本説明を不必要に分かりにくくすることを回避するために詳細に説明されていない。
本明細書で説明する装置及び方法は、トランザクショナル実行によるロックのない同期を利用して、複数のソフトウェアスレッド間の共有メモリアクセスをハンドリングするためのものである。本明細書で開示する方法及び装置は、携帯情報端末、モバイルプラットフォーム、デスクトッププラットフォーム、及びサーバプラットフォーム等のあらゆるレベルのコンピュータシステム、並びに、任意の個数の集積回路、コア、又は論理プロセッサを用いて実施できることが当業者には容易に明らかであろう。たとえば、4つの集積回路を有するマルチプロセッサシステムは、本明細書で説明する方法及び装置を使用して、集積回路のいずれか4つによって共有されるメモリへの共有アクセスを管理することができる。
図1には、集積回路105が示されている。この集積回路105は、トランザクショナル実行を実施することができる。一実施形態では、集積回路105は、他のマイクロプロセッサとは独立に動作できる1つのマイクロプロセッサである。代替的に、集積回路105は、複数の処理エレメントと共に動作する1つの処理エレメントである。
集積回路105は、第1のコア110、第2のコア115、及び第Nのコア120を示している。コアは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置されるあらゆるロジックを指し、独立して保持される各アーキテクチャ状態は、少なくともいくつかの専用実行資源に関連付けられている。実行資源は、単一又は複数の整数データオペランド及び/又は浮動小数点データオペランドに対して直列又は並列に処理を行うための算術論理演算ユニット(ALU)、浮動小数点演算ユニット(FPU)、レジスタファイル、オペランドレジスタ、並びにコードを実行するための他のロジックを含むことができる。その上、複数のコアは、高レベルキャッシュ、バスインターフェース並びに制御ロジック及びフェッチ/デコードロジック等の他の資源へのアクセスを共有することもできる。
1つの例示的な説明として、集積回路105は8つのコアを有し、各コアは、汎用レジスタ、制御レジスタ、アドバンストプログラマブル割り込み制御(APIC)レジスタ、マシン状態レジスタ(MSR)、又は命令ポインタの状態を記憶するためのレジスタ等、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタに関連付けられている。さらに、各一組のアーキテクチャ状態レジスタは、個々の実行ユニットにも排他的に関連付けられている。
また、集積回路105は、第1の論理プロセッサ125、第2の論理プロセッサ130、及び第Mの論理プロセッサ135を備えるコア110も示している。論理プロセッサは、本明細書で使用されるように、独立したアーキテクチャ状態を保持できる集積回路上に配置される任意のロジックを指し、独立して保持されるアーキテクチャ状態は、実行資源へのアクセスを共有する。上記のように、各論理プロセッサは、独立したアーキテクチャ状態を保持する一組のアーキテクチャ状態レジスタを有する。一方、アーキテクチャ状態のそれぞれは、実行資源へのアクセスを共有する。その結果、どの単一の集積回路上にも、任意の個数のコア及び/又は任意の個数の論理プロセッサが存在することができる。例示の目的で、トランザクショナル実行に使用される装置及び方法を解説する際のコア及び/又は論理プロセッサのオペレーションの解説では、プロセッサという用語が引用される。
図2を参照して、集積回路の一実施形態が、トランザクショナル実行の具体的な一実施態様を示すために図示されている。しかしながら、図2に関して説明する方法及び装置は、図5に図示するシステム等、あらゆるレベルのシステムで実施できることは容易に明らかである。一実施形態では、集積回路205は、アウトオブオーダの投機的なものとすることができ、この場合、命令は、プログラムで与えられたものとは異なる順序で実行することができる。代替的に、プロセッサ205は、インオーダ実行とすることもでき、この場合、命令は、当初のプログラムの順序で発行されて実行される。
集積回路205は、任意の個数のプロセッサを備えることができる。これらのプロセッサは、コア又は論理プロセッサとすることができる。たとえば、集積回路205は8つのコアを有し、各コアは2つの論理プロセッサを有し、これによって、集積回路205上では、同時に16個のソフトウェアスレッドの実行が可能になる。その結果、集積回路205は、通常、マルチスレッディングマルチコアプロセッサと呼ばれる。図2では、集積回路205は、本発明を分かりにくくしないように単独で図示されている。しかし、集積回路205は、単独で動作することもできるし、又は他のプロセッサと協調して動作することもできる。
また、集積回路205は、以下のもののいずれか1つ又はそれらの任意の組み合わせを含むこともできるが、含むように要求されるものではない。以下のものとは、具体的に図示されていないが、データパス、命令パス、仮想メモリアドレス変換ユニット(変換バッファ)、算術論理演算ユニット(ALU)、単一の命令又は複数の命令を実行できるだけでなく、単一又は複数のデータオペランドに対して直列又は並列に処理を行うことができる浮動小数点計算ユニット、レジスタ、割り込みコントローラ、アドバンストプログラマブル割り込みコントローラ(APIC)、プリフェッチユニット、命令再配列ユニット、及び、命令をフェッチ又は実行してデータに対して処理を行うのに使用される他のあらゆるロジックである。
集積回路205は、フロントエンド210を示している。フロントエンド210は、命令フェッチ215、命令デコード220、及び分岐予測225を含むものとして示されている。フロントエンド210は、図示するロジックを含むもののみに限定されず、外部データインターフェース265及び低レベル命令キャッシュ等の他のロジックも含むことができる。フロントエンド210は、集積回路205によって実行される命令をフェッチしてデコードする。図示するように、フロントエンド210は、フェッチされてデコードされる命令を予測する分岐予測ロジック225も含む。フロントエンド210は、固定長命令、可変長命令、マクロ命令、又は個々のオペレーションを有する命令をフェッチしてデコードすることができる。
命令は、通例、データオペランドに対して実行される複数のオペレーションを含み、一般に、マクロ命令と呼ばれるのに対して、実行される個々のオペレーションは、一般に、マイクロオペレーションと呼ばれる。一方、命令は、シングルオペレーションと呼ばれる場合もある。したがって、マイクロオペレーションは、本明細書で使用されるように、集積回路205によって実行されるあらゆるシングルオペレーションを指すのに対して、命令は、マクロ命令、シングルオペレーション命令、又はその両方を指す。一例として、加算マクロ命令は、第1の関連アドレスから第1のデータオペランドを読み出す第1のマイクロオペレーションと、第2の関連アドレスから第2のデータオペランドを読み出す第2のマイクロオペレーションと、第1のデータオペランド及び第2のデータオペランドを加算して結果を得る第3のマイクロオペレーションと、その結果をレジスタロケーションに記憶する第4のマイクロオペレーションとを含む。
トランザクショナル実行は、通常、複数の命令又はオペレーションをトランザクション又はクリティカルコードセクションにグループ化することを含む。一実施形態では、集積回路205のハードウェアが、複数のマクロオペレーションをトランザクションにグループ化する。ハードウェアにおいてトランザクションを特定することは、いくつかの要素を含み、ロック獲得及びロック解放の使用、トランザクションのネスティング、非投機的メモリオペレーションの相互排除、及びトランザクションを組み立てるのに使用される構成体についてのメモリ順序付け要件のオーバレイ等を含む。別の実施形態では、トランザクションはソフトウェアで境界設定される。トランザクションのソフトウェア境界設定は、図5に関してより詳細に解説する。
集積回路205は、トランザクション及びクリティカルセクションとも呼ばれる数群のマクロオペレーションを実行する実行ユニット275及びレジスタファイル270をさらに備える。従来のロック技法と異なり、トランザクショナル実行は、通例、トランザクション/クリティカルセクションを投機的に実行すること、及び、トランザクションの最終ステータスを決定する場合に、投機的実行の終了まで状態更新を延期することを伴う。一例として、クリティカルセクションは、フロントエンド210により特定されて、投機的に実行され、その後、別のコアや論理プロセッサ等のリモートエージェントが、クリティカルセクションの実行中にアクセスされたメモリロケーションに対する無効要求を行っていなかった場合に限り、リタイヤロジック235によってリタイヤされる。
例示的な説明として、リモートエージェントはメモリ更新デバイスを含む。このメモリ更新デバイスは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の集積回路、処理エレメント、コア、論理プロセッサ、又は任意のプロセッサ/デバイスである。通常、無効要求は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションへのリモートエージェントによる要求/アクセス、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションを保護するセマフォをロックする要求、又は、トランザクション内のマイクロオペレーションにより操作されるメモリロケーションの所有権のリモートエージェントによる要求を含む。無効要求は、図3に関してより詳細に解説する。
トランザクション/クリティカルセクションの実行終了時に、結果が一致していないか又は無効であるとみなされる場合、トランザクション/クリティカルセクションは、リタイヤされず、状態更新は、レジスタにもメモリにもコミットされない。加えて、トランザクションがリタイヤされない場合、トランザクションを再実行するための2つの選択肢として、(1)トランザクションを前に実行されたように投機的に再実行すること、又は、(2)ロック/セマフォを利用してトランザクションを非投機的に再実行することが含まれる。
トランザクションの投機的実行は、メモリ更新及びレジスタ状態更新を含むことができる。一実施形態では、集積回路205は、メモリ及びレジスタファイルを更新する前に、トランザクションの実行結果が確実に有効であり且つ一致しているようにするために、投機的なメモリ更新及びレジスタファイル状態更新を保持して融合することができる。1つの例示的な説明として、集積回路205は、同じトランザクションの一部として特定されたすべての命令/マイクロオペレーションの結果を、任意の期間の間、投機的/一時的な状態に保持する。投機的なメモリ更新及びレジスタファイル状態更新の保持及び融合を行うために、特別なレジスタチェックポイントハードウェア及びオペランドバイパスロジックが使用されて、投機的な結果が一時レジスタに記憶される。
別の実施形態では、集積回路205は、レジスタ状態更新及び命令リタイヤをメモリ更新から切り離すことができる。この実施形態では、投機的な更新は、投機が解消される前にレジスタファイル370にコミットされる。一方、メモリ更新は、トランザクションがリタイヤされた後になるまでバッファリングされる。したがって、1つのあり得る利点は、トランザクション内の個々の各命令又は各マイクロオペレーションを実行直後にリタイヤさせることができるということである。さらに、レジスタ状態更新及びメモリ更新を切り離すことによって、アーキテクチャレジスタファイル270にコミットする前に投機的な結果を記憶するための余分なレジスタが削減される可能性がある。
一方、この実施形態では、レジスタファイル270を投機的に更新することは、レジスタファイル270に対する各更新を投機的更新として取り扱うことを伴う。レジスタの再利用及びアロケーションのポリシーは、レジスタファイル270に対する更新を投機的更新として考慮することができる。1つの例示的な説明では、トランザクションのデータのバッファリングに使用される入力レジスタは、トランザクションのコミットの保留中に新しいデータを受信することに対してバイアスがかけられている。この例では、トランザクションの期間中に使用される入力レジスタは、新しいデータを受信することに対してバイアスがかけられている。したがって、投機的実行が失敗するか、又は、再起動する必要がある場合、入力レジスタセットは、通例、入力レジスタセットの一部でない他のレジスタが最初に使用されるように、再初期化することなく再利用することができる。
別の例では、入力レジスタが、トランザクションの投機的実行中又はトランザクションのコミットの保留中に新しいデータを受信した場合、再利用された入力レジスタの状態は、別のレジスタ等の別個のストレージエリアに記憶される。入力レジスタの元の内容を記憶することによって、実行が失敗した場合又は再実行が開始した場合に入力レジスタの元の内容を入力レジスタに再ロードすることが可能になる。レジスタの内容を一時的に記憶し、その後、再実行時に再ロードするプロセッサは、通常、スピリング/リフィリングと呼ばれる。
トランザクション/クリティカルセクション内におけるキャッシュ240等の共有メモリへのメモリアクセスの一致を追跡して、読み出されたメモリロケーションがまだ同じ情報を有し、更新される/書き込まれるメモリロケーションが別のエージェントによって読み出されたことも更新されたこともないことを確実にすることができる。第1の例として、メモリアクセスは、メモリロケーションのデータ、データオペランド、データライン、又は任意のコンテンツを読み出す/ロードするロードオペレーションである。第2の例として、メモリアクセスは、メモリ更新オペレーション、記憶オペレーション、又は書き込みオペレーションを含む。
一実施形態では、トランザクションバッファ265が、キャッシュ240等の共有キャッシュにおける、キャッシュライン245、250、255等のデータラインへのアクセスを追跡する。1つの例示的な説明として、キャッシュライン245〜255は、データライン、関連する物理アドレス、及びタグを含む。関連する物理アドレスは、集積回路205の外部のメモリロケーション又は集積回路205に位置するメモリロケーションを参照する。
図3に移って、トランザクションバッファ265の一実施形態が示されている。トランザクションバッファ265は、トランザクション内で共有メモリからロードされた各アドレス及び共有メモリに書き込まれる各アドレスに対するリモートエージェントによる無効要求/アクセスを追跡するトランザクション追跡ロジックを含むことができる。例示的な説明として、リモートエージェントは他の処理エレメントを含む。この他の処理エレメントは、保留トランザクションを実行するようにスケジューリングされていないか又は保留トランザクションを実行していない別の論理プロセッサ、コア、集積回路、処理エレメント、又は任意のプロセッサ/デバイス等である。
一実施形態では、トランザクションバッファ265は、保留トランザクションの実行中に、ロード/読み出しを追跡するロード表305及び記憶/書き込みを追跡する記憶/書き込みバッファ325をそれぞれ含む。ここで、ロード表305は、保留トランザクション/クリティカルセクションの実行中に共有メモリからロードされた/読み出された各データラインに対応するロードエントリ307等のロードエントリを記憶する。一実施形態では、ロードエントリは、物理アドレス310の表示及び無効化アクセスフィールド(IAF)315を含む。第1の例として、物理アドレス310の表示は、メモリロケーションを参照するのに使用される実際の物理アドレスを含む。第2の例として、この表示は、長さ/サイズ情報と共に、ロードされたデータラインを参照するタグ値等の、物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。ロードされたデータの長さは、設計において暗黙的な場合がある。したがって、ロードされたデータの長さ/サイズの具体的な参照子は必要とされない。一実施形態では、ロードされたデータの暗黙的な長さ/サイズは単一のキャッシュラインである。
1つの例示的な説明では、IAF315は、ロードエントリ307がロード表305に最初に記憶された時に第1の値を有し、リモートエージェントが、物理アドレス310により参照されるメモリロケーションに対して無効化アクセス又は無効化アクセス要求を行った時に第2の値に変更される。たとえば、無効要求/アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス310によって参照されるメモリロケーションに書き込みを行うことに相当する。ここで、物理アドレス310は、保留クリティカルセクションの実行中に読み出されたメモリロケーションを表す。単純化された一例として、IAF315は、ロードエントリ307の記憶時に第1の論理値1に初期化される。ロードエントリ307は物理アドレス310を備える。物理アドレス310は、クリティカルセクションの実行中にロードされたメモリロケーションを参照する。リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス310によって参照されるメモリロケーションに書き込みを行った場合、IAF315フィールドは、第2の値0に変更される。この第2の値0は、リモートエージェントが、ロードエントリ307によって参照されるメモリロケーションに対して無効化アクセスを行ったことを表す。
一実施形態では、ロード表305は、リモートエージェントが行った無効ロック/セマフォ要求を追跡するのにも使用することもできる。トランザクションが実行されると、ロードエントリ307等のセマフォロードエントリ又は別個のロードエントリが、トランザクションのセマフォを追跡するのに使用される。セマフォ変数は、そのセマフォ変数の共通のロードオペレーションを使用して追跡することができる。このロードオペレーションは、上述したのと同様の方法で追跡される。実際には、セマフォに対する無効要求を追跡するロードエントリ307等のセマフォロードエントリは、物理アドレスフィールド310及びIAF315を含む。物理アドレスフィールド310は、セマフォ値が記憶される物理アドレスの表示を含むことができる。
上述したロードエントリを作成するオペレーションと類似して、現在のトランザクションのロック変数/セマフォを追跡するためにセマフォロードエントリ307をロード表305に記憶する時に、IAF315には第1の値がロードされる。リモートエージェントが、保留トランザクションの実行中に、物理アドレス310によって参照されるセマフォでロックを要求又は獲得した場合、IAF315は第2の値に設定される。この第2の値は、リモートエージェントが実行中のトランザクションにおいてロックを要求/取得したことを表す。複数のエージェントがロックを追跡できることは明らかである。一方、無効は、それらのエージェントのうちの1つが実際のロックを獲得した時に実行される。
ロード表305は、図4に示す実施形態に限定されない。一例として、トランザクションバッファ265は、ロードエントリ307等のどのロードエントリが空(エントリが現在のトランザクションにより使用されておらず、デフォルトデータ又はガベージデータを有する場合がある)であるか、及び、どのロードエントリがフル(エントリが現在のトランザクションによって作成されている)であるかを判断する。ここで、カウンタを使用して、現在のロードエントリを参照するアロケーションポインタの経過を追跡することができる。代替的に、アロケーション追跡フィールド(ATF)等の別のフィールドが各ロードエントリ内に存在し、そのロードエントリが空であるのか、又はフルであるのかを追跡する。一例として、ロードエントリ307は、論理1等の第1の値を備えたATFを有する。この第1の値は、現在のトランザクションによって作成されていない空のロードエントリを表す。ロードエントリ307のATFは、ロードエントリ307が現在のトランザクションによって作成されると、論理0等の第2の値に変更される。
別の実施形態では、ロードされた/読み出されたデータラインのサイズ/長さは暗黙的ではなく、逆に、長さフィールド等の別のフィールドがロード表305内に存在し、ロードされたデータの長さ/サイズを設定する。ロード表305は、投機的ロードを追跡するための、この技術分野で既知のアドバンストロードアドレス表(advanced load address table)(ALAT)とすることができる。
図3を再び参照して、記憶書き込みバッファ325は、保留トランザクション/クリティカルセクションの実行中に共有メモリ内で書き込み/更新が行われる各データライン又は部分的なデータラインに対応する、書き込みエントリ327等の書き込みエントリを記憶する。たとえば、書き込みエントリ327は、物理アドレス330の表示、無効化アクセスフィールド(IAF)335、及びデータ保持フィールド340を備える。第1の例として、物理アドレス330の表示は、保留クリティカルセクションの終了時又は実行中に書き込まれるメモリロケーションを参照するのに使用される実際の物理アドレスを含む。第2の例として、この表示は、保留クリティカルセクションの実行終了時に書き込まれるデータラインを参照するタグ値等の物理アドレスのコード化されたバージョン又は物理アドレスの一部を含む。
上記例について、IAF335は、書き込みエントリ327が書き込み表325に最初に記憶された時に第1の値を有し、物理アドレス330によるメモリロケーション参照に対する無効化アクセスがリモートエージェントによって行われた時に第2の値に変更される。一実施形態では、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス330によって参照されるメモリロケーションに書き込みを行うことに相当する。加えて、無効化アクセスは、リモートエージェントが、保留クリティカルセクションの実行中に物理アドレス330から読み出しを行うことに相当する。もう1つの無効化アクセスは、リモートエージェントが物理アドレス330によって参照されるメモリロケーションの所有権を得ることに相当し得る。単純化された一例として、IAF335は、書き込みエントリ327の記憶時に第1の論理値1に初期化される。リモートエージェントが、保留クリティカルセクションの実行中に、物理アドレス330によって参照されるメモリロケーションの読み出し又は書き込みを行う場合、IAF325は、第2の論理値0に変更される。この第2の論理値は、リモートエージェントが、書き込みエントリ327によって参照されるメモリロケーションに対する無効化アクセスを行ったことを表す。
書き込みエントリ327は、書き込まれる投機的データをバッファリング/保持するデータ保持フィールド340をさらに示している。データ保持フィールド340は、どの部分が投機的記憶によって対象とされていなかったかということに対して追跡されたデータラインのどの部分が新しいデータを含むかを追跡するのにも使用することができる。変更された部分を追跡することによって、後のコミットプロセス中に実際のメモリロケーションに投機的データを融合することを助けることができる。
一実施形態では、記憶オペレーションからの、書き込まれるラインの所有権は、トランザクション内の個々のオペレーションの実行時及びリタイヤ時に得られる。各個々の書き込み/記憶マイクロオペレーションのリタイヤ時に所有権をプリフェッチする一代替案として、書き込まれる物理アドレスの所有権は、トランザクションのリタイヤ前においてトランザクションが終了するまで得られない。いずれの実施形態でも、トランザクションの終了時に、所有権がトランザクションの実行中に放棄された場合、無効化アクセスが行われたので、トランザクションはリタイヤされない(失敗する)。トランザクションがリタイヤされることになると、書き込まれる各ラインの所有権は、メモリ更新のすべてがコミットされた後になるまで放棄されない。リモートエージェントが、リタイヤ中にラインの所有権を要求する場合、メモリ更新/書き込みのすべてがコミットされるまで、その要求をキューに入れて、保留状態にすることができる。
書き込み表325は、図4に示したものに限定されない。書き込み表325は、たとえば、図示しないピニングフィールド(pinning field)を含むことができる。このピニングフィールドは、設定された時に、リモートエージェントからキャッシュ等の共有メモリへのスヌープをブロックする。書き込みエントリのピニングフィールドは、対応する物理アドレスに対するスヌープを可能にするために第1の値に設定され、キャッシュラインがピニングされた時は、リモートエージェントによるそのキャッシュラインに対するスヌープをブロックするために第2に値に設定される。ピニングフィールドは、コミットプロセス中に、スヌープをブロックしてどの所有権の変更も認めないようにするのに特に有益となり得る。上述したように、リモートエージェントからの所有権のどの要求も、トランザクションがコミットされた後になるまでキューに入れておくことができる。ピニングフィールドを実施する1つの例示的な方法は、ピニングフィールドが設定されている場合、所定の長さの時間の間、スヌープをブロックすることである。この所定の長さの時間は、存在する記憶バッファの個数に基づく。
書き込み表325は、上記ロード表305に関して解説した長さフィールドのような、書き込まれる投機的データの長さを記憶するための長さフィールドも含むことができる。任意の個数の他のフィールド又はフィールドの組み合わせを記憶表/バッファ325に含めることができる。たとえば、無効化アクセスを行ったリモートエージェントを特定するプロセッサID又は他のIDを追跡するのに、リモートエージェントフィールドが使用される。
トランザクションバッファ265は、ハードウェア又はファームウェアで実施することができる。別の例では、トランザクションバッファ365は、ソフトウェアで実施され、集積回路205によって実行される。さらに別の例では、トランザクションバッファはマイクロコードで実施される。
クリティカルセクション/トランザクション内のすべてのマイクロオペレーションを実行した後、無効化アクセスが保留クリティカルセクションの実行中に行われていなかった場合、トランザクションは通常コミットされる。リタイヤの後、トランザクションは、通常、アトミックな方法(atomic manner)でコミットされる。一例として、保留クリティカルセクションをアトミックに書き込むこと/コミットすることは、クリティカルセクションの実行中にバッファリングされた1つ1つのデータラインを共有メモリに書き込むことを含む。
一実施形態では、保留クリティカルセクションの実行中に追跡された無効化アクセスについてトランザクションバッファ265をチェックした後、保留トランザクションは、図2に示すリタイヤロジック235によってリタイヤされる。一例として、保留トランザクションをリタイヤさせるために、ロード表305に記憶された各ロードエントリIAF及び記憶表/バッファ325に記憶された各書き込みエントリIAFがチェックされる。これらのIAFは、保留トランザクションに関連付けられている。加えて、無効化アクセスが、ロック又はセマフォを要求するリモートエージェントによって行われていなかったことを確実にするために、保留トランザクションのロック変数又はセマフォを追跡するために作成されたあらゆるロードエントリもチェックされる。無効化アクセスが発見されなかった場合、トランザクションのリタイヤは許可され、記憶バッファはピニングされる。ピニングが行われ、リタイヤが許可されると、メモリ更新を直列に行うことができる。なお、ピニング及びリタイヤの許可は同時に行われる。メモリ更新が完了すると、「ピン」ステータスが取り除かれ、ラインは放棄され、トランザクションはコミットされたものとみなされる。
単純化された一例として、トランザクションは、ロケーション0001から読み出すマイクロオペレーション及び値1010をロケーション0002に書き込むマイクロオペレーションを含む。第1のマイクロオペレーションが実行されると、ロード表305は、ロケーション0001を表す物理アドレスフィールド310と、第1の値1を有するIAF315とを含むロードエントリ307を記憶する。第2のマイクロオペレーションが実行されると、記憶表325は、ロケーション0002を表す物理アドレス330と、第1の値1を有するIAF335と、データフィールド340の1010とを含む書き込みエントリ327を記憶する。加えて、ロードエントリ及び書き込みエントリは、上述したサイズ/長さ情報又は他のフィールドをさらに含むこともできる。リモートエージェントが、実行中又はトランザクションがまだ保留中にロケーション0001に書き込みを行った場合、IAF315は、無効化アクセスが行われたことを表す第2の値0に設定される。トランザクションをリタイヤさせようと試みた時、IAF315は、無効化アクセスを表しており、したがって、トランザクションはリタイヤされず、値1010はロケーション0002に書き込まれない。一方、IAF315及び335で1によって表されるように、リモートエージェントがロケーション0001に書き込みを行わず、且つ、リモートエージェントがロケーション0002に対する読み出し/書き込みを行わない場合、トランザクションはリタイヤされ、値1010はロケーション0002に書き込まれる。
無効化アクセスが保留トランザクションの期間中に行われたと判断され、したがって、トランザクションがリタイヤされなかった後、多数の選択肢が存在する。第1の選択肢は、トランザクションを再実行することを含む。上述したように、入力レジスタは、(1)入力レジスタがトランザクションの保留中に新しいデータを受信した場合に、その元の状態に再初期化されるか、又は、(2)入力レジスタがトランザクションの保留中に新しいデータを受信しなかった場合に、入力レジスタの元の状態ですでに存在するかのいずれかである。その結果、トランザクションは、上記と同じ方法で投機的に再実行される。第2の選択肢は、無効化アクセスを行ったリモートエージェントと共にバックオフアルゴリズムを使用してトランザクションを投機的に再実行することを含む。一例として、指数バックオフアルゴリズムが使用されて、リモートエージェントが同じデータを求めて競合することなくトランザクションの完了が試みられる。別の選択肢は、この技術分野で既知のソフトウェア非ブロックメカニズム(software non-blocking mechanism)を使用することであって、それによって、トランザクションを再実行する、使用することを含む。第4の選択肢は、所定の回数だけ投機的にトランザクションを再実行した後、ロック/セマフォで非投機的にトランザクションを再実行することを含む。セマフォは、トランザクション中に読み出されるアドレス及び書き込まれるアドレスを有効にロックする。
第4の選択肢は、失敗メカニズムとしてロック/セマフォを利用するものであるが、ハードウェア、ソフトウェア、又はソフトウェアを実行するためのハードウェアの組み合わせで実施することができる。たとえば、ソフトウェアによって実施されるロックアウトメカニズムでは、セマフォは、あらゆる粒度のメモリロケーションに対するアクセスをロックするのに利用される。一定のメモリロケーションにアクセスしたい各プロセッサは、そのロケーションを保護するセマフォを求めて競合する。セマフォが、ロックがないことを表す第1の値に設定されている場合、第1のプロセッサは、そのアドレス/メモリロケーションがロックされていることを表す第2の値にセマフォを切り換える。セマフォを第2の値に切り換えることにより、セマフォを切り換えたプロセッサは、そのメモリロケーションと、おそらく、そのセマフォによって保護されるメモリロケーションの範囲とに対する排他的なアクセスをソフトウェアを通じて確実に得る。集積回路205は、ソフトウェアでセマフォを起動/実行する別個のロックアウトロジック260を有することもできるし、単に既存の実行ロジックを使用してソフトウェアロックアウトを実行/起動することもできる。セマフォは、ソフトウェアで実施することができ、したがって、セマフォはシステムメモリ(図示せず)内に存在する場合がある。
図2に示すロックアウトロジック260を実施する別の例として、ロックアウトロジック260又はロックアウトロジック260で実行されるソフトウェアは、少なくとも1つのリモートエージェントが、共有メモリの指定されたラインにアクセスすることを阻止するためのロックアウトメカニズムを使用する。一実施形態では、ロックアウトロジックはロックビットを含む。第1の例として、ハードウェアにおいて、ロックビットは、レジスタ又はキャッシュライン内に存在する。第2の例として、ロックビットは、ロックアウトロジック260で実行され且つシステムメモリ内に存在するソフトウェアで表される。
ロックビットが第1の値を有する場合、共有メモリの所定のライン又は指定されたラインへのアクセスが許可される。一方、ロックビットが第2の値を有する場合、共有メモリの指定されたラインへのアクセスは阻止される。ロックビットは、キャッシュ240、ロックアウトロジック260、プロセッサ205の他の任意のメモリ、又はシステムメモリ内に存在することができる。単一のセマフォにより、又は、単一のビットを設定することにより、あらゆる粒度のデータラインをロックすることができる。一例として、2個のラインが、単一のロックビットの設定によってロックされる。
フェイルセーフメカニズムとしてセマフォを使用する一例として、トランザクションが、5回等の第1の回数だけ実行されるが、各実行中、リモートエージェントが、例示のアドレス0001等、そのトランザクションの実行中に読み出されたアドレスに対して無効化アクセスを行う。トランザクションコードの6回目のループで、6の実行しきい値が満たされる。実行のしきい値又は所定の回数が満たされると、セマフォが、トランザクションを実行するのに使用される。
ソフトウェアの実施態様では、アドレス0001を保護するセマフォを求めて競合が起こる。アドレス0001が、現在セマフォによってロックされていない場合、セマフォは、現在ロックされていることを表す値に切り換えられる。トランザクションはその後非投機的に再実行される。
一代替形態として、ハードウェアの実施態様では、ロック回路263等のロック回路が、トランザクションの6回目の実行中に、アドレス0001に関連付けられるロックビットを第2の値に設定し、リモートエージェントが、少なくともアドレス0001にアクセスすることを阻止する。ロック回路263は、単一のトランジスタ又は任意の個数のトランジスタから構成することができる。
データラインのロックは、セマフォ又はロックビットの使用に限定されるものではなく、ハードウェアで実施されようとソフトウェアで実施されようと、データラインに対するアクセスを阻止するためのあらゆる方法又は装置を含む。別の例として、トライステートデバイスが、データラインの相互接続アクセスを阻止するのに使用される。
図4に移って、ソフトウェアで境界設定されたトランザクションの一例が示されている。上述したように、トランザクションは、通常、実行される一群の命令/マイクロオペレーションを含む。したがって、トランザクション宣言は、トランザクションを境界設定する任意の方法とすることができる。図4では、トランザクション410は、メモリ読み出し、実行オペレーション、メモリ更新/書き込み等のいくつかのオペレーションの例を有する。トランザクション410は、トランザクション宣言/識別子405によって境界設定される。トランザクション宣言/識別子405は、Atomic {…}として図示されている。しかしながら、トランザクション宣言は、そのように限定されるものではない。簡単な例として、複数のオペレーション又は命令をグループ化する一対の括弧が、トランザクション/クリティカルセクションの境界を特定するトランザクション宣言/識別子となる。
トランザクション宣言405がコンパイルされた一例が、コンパイル例415に示されている。トランザクション430の境界は、トランザクション識別子425によって特定される。したがって、トランザクションを実行するプロセッサは、この識別子からトランザクション/クリティカルセクションを構成するマイクロオペレーションを特定することができる。トランザクション宣言405がコンパイルされた別の例は、コンパイル例425に示されている。この例では、トランザクション宣言435が、トランザクション440の境界を特定する。
この例を1ステップずつ進めていって、ライン1〜3は、トランザクショナル実行を特定し、述語Pxを1に設定し、述語Pyを0に設定し、Rmにおいてカウント変数を0に初期化し、Rnにおいてカウントのしきい値を設定する。述語は、通常、その述語が或る値を有する場合に或るタイプ又は或る実行パスを含み、その述語が別の値を有する場合に別のタイプ又は別の実行パスを含む。ライン4〜9において、カウント変数が、トランザクションが投機的に実行される回数を表す数値に初期化され、次に、カウント変数が、しきい値と比較されるか、又は、そうでない場合には、ロック述語がロック/セマフォ(非投機的)でトランザクションを実行するように設定されるべきかどうかを調べるために評価され、カウント変数は、設計に応じて、トランザクションが実行される回数を表すためにディクリメント又はインクリメントされ、そして、トランザクションが開始される。ライン10〜12は、トランザクション440のクリティカルセクション内の任意の数のオペレーションを含む。最後に、ライン14は、トランザクションの実行中にリモートエージェントによって行われた無効化アクセスの、上述したトランザクション追跡ロジック/バッファを調べるためのチェック命令を含む。
図5に移って、トランザクショナル実行を使用するシステムの一実施形態が示されている。マイクロプロセッサ505及び510が示されているが、システムは、任意の個数の物理的なマイクロプロセッサを有することができ、各物理的なマイクロプロセッサは、トランザクショナル実行を利用する任意の個数のコア又は任意の個数の論理プロセッサを有する。一例として、マイクロプロセッサ505及び510はそれぞれ、そのダイ内に存在する複数のコアを有する。各コアは、複数のスレッドを有し、その結果、マルチスレッディングコアとなる。一実施形態では、マイクロプロセッサ505及び510は、アウトオブオーダの投機的実行及び非投機的実行を行うことができる。別の実施形態では、マイクロプロセッサ505及び510は、インオーダ実行のみを行うことができる。
マイクロプロセッサ505及び510は、キャッシュ507及び512を有する。一実施形態では、キャッシュ507及び512は、システムメモリ530から近時にフェッチされたデータ及び/又は命令を記憶する。この実施形態では、キャッシュ507及びキャッシュ512は、それらのキャッシュの各マイクロプロセッサに私的なデータをキャッシュする。メモリ530は、トランザクショナル実行がアクセスするのに使用される共有メモリとすることができる。別の実施形態では、トランザクション中にアクセスされたシステム内に存在するあらゆるメモリが共有メモリである。たとえば、マイクロプロセッサ505及び510が、図5には図示しない高レベル共有キャッシュにアクセスした場合。
マイクロプロセッサ505及び510は、相互接続515によりメモリコントローラ520に接続されて示されている。メモリコントローラは、それぞれ、相互接続535によりグラフィックスデバイス540に接続されている。一実施形態では、グラフィックスデバイス540は、メモリコントローラ520に統合されている。メモリコントローラは、相互接続525によってシステムメモリ530にも接続されている。システムメモリ530は、システムで使用される任意のタイプのアクセスメモリとすることができる。一実施形態では、システムメモリ530は、ランダムアクセスメモリ(RAM)デバイスとすることができる。ランダムアクセスメモリ(RAM)デバイスには、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、シングルデータレート(SDR)RAM、ダブルデータレート(DDR)RAM、他の任意のマルチデータレートRAM、又は他の任意のタイプのアクセスメモリ等がある。
入出力(I/O)コントローラ550は、相互接続545を通じてメモリコントローラ545に接続されている。I/Oコントローラ550は、相互接続555によって、ストレージ560、ネットワークインターフェース565、及びI/Oデバイス570に接続されている。一実施形態では、ストレージ560はハードドライブである。別の実施形態では、ストレージ560はディスクドライブである。さらに別の実施形態では、ストレージ560は、システムにおける任意の静的ストレージデバイスである。一実施形態では、ネットワークインターフェース565は、ローカルエリアネットワーク(LAN)とインターフェースしている。別の実施形態では、ネットワークインターフェース565は、インターネット等のより大きなネットワークとインターフェースしている。入出力デバイス570は、キーボード、マウス、モニタ、プリンタ等のあらゆるユーザ入力デバイス又はシステム関連出力デバイスを含むことができる。
次に図6を参照して、トランザクションを実行する方法のフロー図の一実施形態が示されている。ブロック605において、第1のトランザクションの実行中、第1のトランザクションによって参照される共有メモリの複数のラインに対する無効化アクセスが追跡される。
一例では、トランザクションバッファが、無効化アクセスを追跡するのに使用される。このトランザクションバッファは、ロード表及び記憶表/バッファを含む。ロード表は、第1のトランザクションの実行中にロードされたアドレスに対する無効化アクセスを追跡する。ロードされたアドレス/メモリロケーションに対する無効化アクセスは、第1のトランザクションを実行するようにスケジューリングされていないプロセッサ、コア、スレッド、論理プロセッサ等のリモートエージェントが、第1のトランザクションの実行中にロードされたアドレス又はメモリロケーションに書き込みを行うことを含む。加えて、ロード表は、トランザクションの実行中のセマフォ又は他のロックアウトメカニズムに対する無効化アクセスを追跡するロックアウトメカニズムエントリも含むことができる。この例では、ロックアウトメカニズムに対する無効化アクセスは、リモートエージェントが、ロックアウトメカニズムによって保護/ロックされたアドレスのロックを要求するか又は得ることを含む。
ロード表と同様に機能する記憶表/バッファは、トランザクションのコミット時に書き込まれるアドレス又はメモリロケーションに対する無効化アクセスを追跡する。ここでの無効化アクセスは、リモートエージェントが、上記アドレス若しくはメモリロケーションから読み出しを行うこと、又はそれらのアドレス若しくはメモリロケーションに書き込みを行うことのいずれかを含むことができる。
ブロック610において、無効化アクセスが追跡された場合、第1のトランザクションは、第1の回数だけ再実行される。したがって、無効化アクセスが第1のトランザクションの実行中に追跡された場合、第1のトランザクションは、単に再実行されるだけである。一方、第1のトランザクションが、所定の回数だけ再実行された場合、第1のトランザクションによって参照される共有メモリの複数のラインがロックされる。この所定の回数は、ソフトウェアのカウント変数又はプロセッサ内のロジックによって表すことができる。ロックは、セマフォ等のソフトウェアによって実施されるロックアウトメカニズムを通じて行うことができる。このロックアウトメカニズムは、1つのプロセッサ複数のラインに対する排他的アクセスをロックアウトするか又は与える。また、ロックは、ロックアウトロジックを利用して、第1のトランザクションにより参照される複数のラインへのアクセスを物理的にロックアウトするハードウェアを通じて行うこともできる。
ブロック620において、複数のラインに対するアクセスがロックされた後、トランザクションが再び再実行される。したがって、プロセッサは、第1のトランザクションによって参照される複数のラインに対する排他的アクセスを有する。なお、プロセッサは、トランザクションを投機的に再実行していたが、無効化アクセスが追跡されたために結果をコミットできなかったコア又は論理プロセッサとすることができる。その結果、排他的アクセスが実行プロセッサに利用可能であるので、第1のトランザクションを非投機的に実行することができる。
次に図7に移って、トランザクショナル実行のコードフローの一実施形態が示されている。ブロック705において、一群のマイクロオペレーションが実行される。この一群のマイクロオペレーションは、共にグループ化された時に、複数の命令又はマクロオペレーションに及ぶ場合がある。上記のように、ブロック710において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連付けられた共有メモリロケーションに対する無効化アクセスが追跡される。
ブロック715において、第1の群のマイクロオペレーションの実行が、(1)無効化アクセスが追跡されなくなるまで、又は、(2)第1の群のマイクロオペレーションが第1の回数だけ実行されるまで、ループされる。したがって、コードにおける新たなロケーションにジャンプしなければならない代わりに、同じ入力レジスタセットを使用でき、トランザクションは単に再びループすることができる。上述したように、これは、入力レジスタセットが、トランザクションの保留中に新しいデータを受信することに対してバイアスをかけられること、及び、入力レジスタの再利用時に入力レジスタの内容をスピリング/アンドリフィリングすることによって行われる。再度、ブロック720において、各ロードマイクロオペレーション及び各記憶マイクロオペレーションに関連した共有メモリロケーションがロックされ、第1の群のマイクロオペレーションが再実行される。
上述したようなトランザクショナル実行は、トランザクションの実行中のメモリロケーションに対する無効化アクセスを追跡することによって、ロックアーキテクチャに起こる可能性のあるフォールスコンテンションを回避し、コンテンションを実際のコンテンションに限定する。さらに、トランザクションが所定の回数だけ再実行された場合、実際のコンテンションは発生し続けるので、トランザクションを所定の回数だけ投機的に実行することを試みた後、トランザクションは、ロック/セマフォを利用して非投機的に実行され、トランザクションが確実に実行されてコミットされるようにする。代替的に、非投機的実行方法の代わりに、ソフトウェア非ブロックメカニズムを使用することもできる。上述したように、投機的なレジスタ状態更新/コミットは、トランザクションの「存在する」(live-in)データが元の入力レジスタに確実に保存されるようにすることによるか、又は、入力データ値を保存ロケーションにコピーすることによって、ソフトウェアでサポートすることができる。保存ロケーションは、他のレジスタ又はメモリのいずれかとすることができ、トランザクションをリタイヤさせなければならない場合、この保存ロケーションから、入力データ値を元の状態に戻すことができる。また、プロセッサは、場合によっては、アウトオブオーダ実行をサポートするのに通常使用されるメカニズムを使用して、レジスタ状態をバッファリングするハードウェアメカニズムも含むことができる。
上記明細書では、本発明を、その具体的な例示の実施形態に関して説明してきた。しかしながら、添付の特許請求の範囲で述べられるような本発明のより広い精神及び範囲から逸脱することなく、それらの実施形態にさまざまな修正及び変更を行えることが明らかであろう。したがって、本明細書及び図面は、限定的な意味ではなく例示の意味で考慮されるべきである。
N個のコアを有し、且つ、N個のコアのそれぞれにM個の論理プロセッサを有する集積回路である。 トランザクショナル実行を実施するための集積回路の一実施形態である。 図3に示すトランザクションバッファの一実施形態である。 コンパイルされたコードの第1の実施形態及び第2の実施形態にコンパイルされて示されるソフトウェアコードで境界設定されたトランザクションである。 システムにおけるトランザクショナル実行の一実施形態である。 トランザクションを実行する方法のフロー図の一実施形態である。 トランザクショナル実行のコードフローの一実施形態である。

Claims (18)

  1. 投機的または非投機的にトランザクションを実行可能な装置であって、
    少なくとも第1のエージェントによって共有される共有メモリと、
    複数の命令を含むトランザクションを、前記トランザクションにより参照される前記共有メモリの複数のラインをロックせずに第1の回数だけ投機的に実行する実行ロジックと、
    前記複数の命令の実行中にトランザクショナルアクセスされる前記共有メモリにおける各アドレスに対するリモートエージェントにより行われる無効化アクセスを追跡するソフトウェア管理の追跡表を保持するメモリと、
    (1)トランザクショナルアクセスされる前記共有メモリにおける各アドレスに対する無効化アクセスが、前記トランザクションの実行中に前記ソフトウェア管理の追跡表によって追跡されなかった場合に、前記トランザクションをリタイヤさせ、(2)トランザクショナルアクセスされる前記共有メモリにおけるアドレスに対する無効化アクセスが、前記トランザクションの実行中に前記ソフトウェア管理の追跡表によって追跡された場合に、前記トランザクションにより参照される前記共有メモリの前記複数のラインをロックして前記トランザクションの非投機的再実行を開始する、トランザクションリタイヤロジックと
    を備え
    前記メモリは、複数のマクロオペレーションの実行中に、前記共有メモリからロードされた各アドレスを追跡するロード表と、該共有メモリに書き込まれる各アドレスを追跡する書き込みバッファとを記憶するように動作可能なロジックを備え、
    前記ロード表は、前記共有メモリからロードされた各アドレスのロードエントリを記憶するように動作可能であり、各ロードエントリは、前記共有メモリからロードされた前記アドレスの表示と無効化アクセスフィールドとを含み、前記書き込みバッファは、前記共有メモリに書き込まれる各アドレスの書き込みエントリを記憶するように動作可能であり、各書き込みエントリは、書き込まれる前記アドレスと、書き込むデータラインと、無効化アクセスフィールドとを含み、
    前記無効化アクセスフィールドは、無効化アクセスが前記トランザクションの投機的実行中に行われなかったことを表す第1の値を、前記ロード表に前記ロードエントリを記憶する時に保持し、且つ、(2)無効化アクセスが前記トランザクションの投機的実行中に行われた場合に第2の値を保持する、装置。
  2. 前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ投機的に再実行され場合、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する前記リモートエージェントのアクセスを拒否するロックアウトメカニズムをさらに備える、請求項1に記載の装置。
  3. 前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ投機的に再実行され場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも1つのリモートエージェントのアクセスを拒否するロックアウトビットを設定するように動作可能なロックアウト回路を備える、請求項2に記載の装置。
  4. 前記トランザクションが、該トランザクションをリタイヤさせることなく第1の回数だけ投機的に再実行され場合、前記ロックアウトメカニズムは、前記トランザクションの実行中に、前記共有メモリからロードされた各アドレス及び該共有メモリに書き込まれる各アドレスに対する少なくとも1つのリモートエージェントのアクセスを拒否するセマフォを起動するコードを実行するように動作可能なロジックを備える、請求項2に記載の装置。
  5. ロード表を記憶するように動作可能なロジックは、アドバンストロードアドレス表(ALAT)を含む、請求項1から請求項4のいずれか1つに記載の装置。
  6. 前記ロード表は、ロックメカニズムロードエントリをさらに含み、該ロックメカニズムロードエントリは、ソフトウェアによって実施されるロックアウトメカニズムに対するリモートエージェントのアクセスを追跡する、請求項から請求項のいずれか1つに記載の装置。
  7. 無効化アクセスは、(1)前記リモートエージェントが、前記複数の命令の実行中に前記共有メモリからロードされたアドレスに書き込みを行うこと、又は、(2)前記リモートエージェントが、複数のマイクロオペレーションの実行中に前記共有メモリに書き込まれるアドレスから読み出すこと、若しくは、該アドレスに書き込むことを含む、請求項1から請求項のいずれか1つに記載の装置。
  8. 前記リモートエージェントは、前記エージェントを含む集積回路上のコア、該エージェントを含む集積回路上のスレッド、該エージェントを含む集積回路上の論理プロセッサ、物理プロセッサ、及び前記エージェントを含む集積回路に接続されるプロセッサから成る群から選択される、請求項に記載の装置。
  9. 前記共有メモリはキャッシュであり、前記エージェント及び前記リモートエージェントは、前記キャッシュを共有する論理プロセッサである、請求項1から請求項のいずれか1つに記載の装置。
  10. トランザクションをコミットまたは再実行する方法であって、
    第1のトランザクションによりアクセスされる共有のデータロケーションへのアクセスをロックせずに実行される第1のトランザクションの投機的実行中にソフトウェア管理のアクセス追跡表における前記共有のデータロケーションから前記第1のトランザクションのトランザクショナルロードを追跡すること、
    前記第1のトランザクションの投機的実行中に前記ソフトウェア管理のアクセス追跡表における前記共有のデータロケーションに対する無効化アクセスを追跡すること、
    前記第1のトランザクションの投機的実行中に無効化アクセスを追跡したことに対応して前記第1のトランザクションを投機的に再実行すること、
    前記第1のトランザクションの投機的実行中に無効化アクセスを追跡しなかったことに対応して前記第1のトランザクションをコミットすること、
    前記第1のトランザクションを第1の回数だけ投機的に再実行した後、前記ソフトウェア管理のアクセス追跡表における共有のデータロケーションに対するアクセスをロックすること、及び
    前記共有のデータロケーションに対するアクセスがロックアウトしたことに対応して前記第1のトランザクションを非投機的に再実行すること
    を含み、
    無効化アクセスを追跡することは、前記第1のトランザクションの投機的実行中に共有メモリのラインにロードしたことに対応して前記ソフトウェア管理のアクセス追跡表におけるロードエントリを格納すべくロード追跡オペレーションを実行することを含み、前記ロードエントリは、ロードされた前記ラインに関連付けられた物理アドレスの表示と、(1)無効化アクセスが前記第1のトランザクションの実行中に行われなかったことを表す第1の値を、ロード表に前記ロードエントリを記憶する時に保持し、且つ、(2)無効化アクセスが前記第1のトランザクションの実行中に行われた場合に第2の値を保持する、無効化アクセスフィールドとを含む、方法。
  11. 無効化アクセスは、(1)リモートエージェントが、前記第1のトランザクションの投機的実行中にロードされた共有メモリの複数のラインの1つに書き込みを行うことを含む、請求項10に記載の方法。
  12. 前記ロードエントリは、前記ロードされたラインの長さを保持するための長さフィールドをさらに含む、請求項10または請求項11に記載の方法。
  13. ロードされた前記ラインの長さは、プロセッサの設計において暗黙的である、請求項10から請求項12のいずれか1つに記載の方法。
  14. 前記第1のトランザクションの保留中に、前記第1のトランザクションの投機的実行中に使用される入力レジスタが新しいデータを受信することにバイアスをかける(biasing)ことをさらに含む、請求項10から請求項13のいずれか1つに記載の方法。
  15. 第1の入力レジスタが前記第1のトランザクションの実行中に再利用されることに対応して、該第1の入力レジスタの内容を第2のレジスタにスピリングすることをさらに含む、請求項14に記載の方法。
  16. 前記トランザクションを投機的に再実行する時に、前記第2のレジスタに記憶された前記内容で前記第1の入力レジスタをリフィリングすることをさらに含む、請求項15に記載の方法。
  17. 第1のトランザクションによりアクセスされる共有のデータロケーションへのアクセスをロックせずに実行される第1のトランザクションの投機的実行中にソフトウェア管理のアクセス追跡表における共有のデータロケーションから前記第1のトランザクションのトランザクショナルロードを追跡すること、
    前記第1のトランザクションの投機的実行中に前記ソフトウェア管理のアクセス追跡表における前記共有のデータロケーションに対する無効化アクセスを追跡すること、
    前記第1のトランザクションの投機的実行中に無効化アクセスを追跡したことに対応して前記第1のトランザクションを投機的に再実行すること、
    前記第1のトランザクションの投機的実行中に無効化アクセスを追跡しなかったことに対応して前記第1のトランザクションをコミットすること、
    前記第1のトランザクションを第1の回数だけ投機的に再実行した後、前記ソフトウェア管理のアクセス追跡表における共有のデータロケーションに対するアクセスをロックすること、及び
    前記共有のデータロケーションに対するアクセスがロックアウトしたことに対応して前記第1のトランザクションを非投機的に再実行すること
    をコンピュータに実行させ
    無効化アクセスは、(1)リモートエージェントが、前記第1のトランザクションの投機的実行中にロードされた共有メモリの複数のラインの1つに書き込みを行うことを含み、
    無効化アクセスを追跡することは、前記第1のトランザクションの投機的実行中に共有メモリのラインにロードしたことに対応して前記ソフトウェア管理のアクセス追跡表におけるロードエントリを格納すべくロード追跡オペレーションを実行することを含み、
    前記ロードエントリは、ロードされた前記ラインに関連付けられた物理アドレスの表示と、(1)無効化アクセスが前記第1のトランザクションの実行中に行われなかったことを表す第1の値を、ロード表に前記ロードエントリを記憶する時に保持し、且つ、(2)無効化アクセスが前記第1のトランザクションの実行中に行われた場合に第2の値を保持する、無効化アクセスフィールドとを含む、プログラム。
  18. 前記第1のトランザクションの保留中に、前記第1のトランザクションの投機的実行中に使用される入力レジスタが新しいデータを受信することにバイアスをかけること、
    第1の入力レジスタが前記第1のトランザクションの実行中に再利用されることに対応して、該第1の入力レジスタの内容を第2のレジスタにスピリングすること、
    前記第1のトランザクションを投機的に再実行する時に、前記第2のレジスタに記憶された前記内容で前記第1の入力レジスタをリフィリングすること
    をさらに前記コンピュータに実行させる請求項17に記載のプログラム。
JP2007549621A 2004-12-29 2005-12-23 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション Active JP4764430B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/027,623 US7984248B2 (en) 2004-12-29 2004-12-29 Transaction based shared data operations in a multiprocessor environment
US11/027,623 2004-12-29
PCT/US2005/047376 WO2006071969A1 (en) 2004-12-29 2005-12-23 Transaction based shared data operations in a multiprocessor environment

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP2010217663A Division JP5255614B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
JP2010217662A Division JP5404574B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション

Publications (2)

Publication Number Publication Date
JP2008525923A JP2008525923A (ja) 2008-07-17
JP4764430B2 true JP4764430B2 (ja) 2011-09-07

Family

ID=36116231

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2007549621A Active JP4764430B2 (ja) 2004-12-29 2005-12-23 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
JP2010217662A Active JP5404574B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
JP2010217663A Active JP5255614B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2010217662A Active JP5404574B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
JP2010217663A Active JP5255614B2 (ja) 2004-12-29 2010-09-28 マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション

Country Status (6)

Country Link
US (3) US7984248B2 (ja)
JP (3) JP4764430B2 (ja)
CN (2) CN102622276B (ja)
DE (3) DE112005003861A5 (ja)
GB (3) GB2451200B (ja)
WO (1) WO2006071969A1 (ja)

Families Citing this family (136)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7752181B2 (en) * 2004-11-08 2010-07-06 Oracle International Corporation System and method for performing a data uniqueness check in a sorted data set
US7984248B2 (en) 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US7421544B1 (en) * 2005-04-04 2008-09-02 Sun Microsystems, Inc. Facilitating concurrent non-transactional execution in a transactional memory system
US7882339B2 (en) * 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US8001538B2 (en) 2005-12-07 2011-08-16 Microsoft Corporation Software accessible cache metadata
US8813052B2 (en) 2005-12-07 2014-08-19 Microsoft Corporation Cache metadata for implementing bounded transactional memory
US8225297B2 (en) 2005-12-07 2012-07-17 Microsoft Corporation Cache metadata identifiers for isolation and sharing
US8683143B2 (en) * 2005-12-30 2014-03-25 Intel Corporation Unbounded transactional memory systems
US8898652B2 (en) * 2006-03-23 2014-11-25 Microsoft Corporation Cache metadata for accelerating software transactional memory
US8180967B2 (en) * 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US8180977B2 (en) * 2006-03-30 2012-05-15 Intel Corporation Transactional memory in out-of-order processors
US7647454B2 (en) * 2006-06-12 2010-01-12 Hewlett-Packard Development Company, L.P. Transactional shared memory system and method of control
US20080005504A1 (en) * 2006-06-30 2008-01-03 Jesse Barnes Global overflow method for virtualized transactional memory
US9798590B2 (en) * 2006-09-07 2017-10-24 Intel Corporation Post-retire scheme for tracking tentative accesses during transactional execution
US8190859B2 (en) 2006-11-13 2012-05-29 Intel Corporation Critical section detection and prediction mechanism for hardware lock elision
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US7802136B2 (en) 2006-12-28 2010-09-21 Intel Corporation Compiler technique for efficient register checkpointing to support transaction roll-back
US8132158B2 (en) * 2006-12-28 2012-03-06 Cheng Wang Mechanism for software transactional memory commit/abort in unmanaged runtime environment
US8185698B2 (en) * 2007-04-09 2012-05-22 Bratin Saha Hardware acceleration of a write-buffering software transactional memory
US8068114B2 (en) * 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
US8458724B2 (en) * 2007-06-15 2013-06-04 Microsoft Corporation Automatic mutual exclusion
US8266387B2 (en) * 2007-06-27 2012-09-11 Microsoft Corporation Leveraging transactional memory hardware to accelerate virtualization emulation
US9043553B2 (en) * 2007-06-27 2015-05-26 Microsoft Technology Licensing, Llc Leveraging transactional memory hardware to accelerate virtualization and emulation
US8140773B2 (en) 2007-06-27 2012-03-20 Bratin Saha Using ephemeral stores for fine-grained conflict detection in a hardware accelerated STM
US9280397B2 (en) * 2007-06-27 2016-03-08 Intel Corporation Using buffered stores or monitoring to filter redundant transactional accesses and mechanisms for mapping data to buffered metadata
US8176253B2 (en) * 2007-06-27 2012-05-08 Microsoft Corporation Leveraging transactional memory hardware to accelerate virtualization and emulation
CN101452400B (zh) * 2007-11-29 2011-12-28 国际商业机器公司 处理多处理器系统中事务缓冲器溢出的方法和系统
US8122195B2 (en) 2007-12-12 2012-02-21 International Business Machines Corporation Instruction for pre-fetching data and releasing cache lines
US7966453B2 (en) 2007-12-12 2011-06-21 International Business Machines Corporation Method and apparatus for active software disown of cache line's exlusive rights
US8015380B2 (en) * 2008-02-01 2011-09-06 International Business Machines Corporation Launching multiple concurrent memory moves via a fully asynchronoous memory mover
US8327101B2 (en) * 2008-02-01 2012-12-04 International Business Machines Corporation Cache management during asynchronous memory move operations
US8095758B2 (en) * 2008-02-01 2012-01-10 International Business Machines Corporation Fully asynchronous memory mover
US8245004B2 (en) * 2008-02-01 2012-08-14 International Business Machines Corporation Mechanisms for communicating with an asynchronous memory mover to perform AMM operations
US8356151B2 (en) * 2008-02-01 2013-01-15 International Business Machines Corporation Reporting of partially performed memory move
US8275963B2 (en) * 2008-02-01 2012-09-25 International Business Machines Corporation Asynchronous memory move across physical nodes with dual-sided communication
US7941627B2 (en) * 2008-02-01 2011-05-10 International Business Machines Corporation Specialized memory move barrier operations
US8479166B2 (en) * 2008-08-25 2013-07-02 International Business Machines Corporation Detecting locking discipline violations on shared resources
JP5195212B2 (ja) * 2008-09-17 2013-05-08 株式会社リコー 管理システム、管理装置、管理方法、管理プログラム、および記録媒体
US9639392B2 (en) * 2013-12-17 2017-05-02 Intel Corporation Unbounded transactional memory with forward progress guarantees using a hardware global lock
US8751748B2 (en) * 2010-01-15 2014-06-10 International Business Machines Corporation Reader set encoding for directory of shared cache memory in multiprocessor system
US8832415B2 (en) * 2010-01-08 2014-09-09 International Business Machines Corporation Mapping virtual addresses to different physical addresses for value disambiguation for thread memory access requests
US8739164B2 (en) * 2010-02-24 2014-05-27 Advanced Micro Devices, Inc. Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof
US8473952B2 (en) * 2010-06-30 2013-06-25 Oracle International Corporation System and method for communication between concurrent transactions using transaction communicator objects
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US20120079245A1 (en) * 2010-09-25 2012-03-29 Cheng Wang Dynamic optimization for conditional commit
WO2012136766A1 (en) * 2011-04-06 2012-10-11 Telefonaktiebolaget L M Ericsson (Publ) Multi-core processors
US8782352B2 (en) * 2011-09-29 2014-07-15 Oracle International Corporation System and method for supporting a self-tuning locking mechanism in a transactional middleware machine environment
US10387324B2 (en) 2011-12-08 2019-08-20 Intel Corporation Method, apparatus, and system for efficiently handling multiple virtual address mappings during transactional execution canceling the transactional execution upon conflict between physical addresses of transactional accesses within the transactional execution
US10286148B2 (en) * 2012-01-23 2019-05-14 Fenwal, Inc. Using physiological data in a medical device
WO2013115816A1 (en) 2012-02-02 2013-08-08 Intel Corporation A method, apparatus, and system for speculative abort control mechanisms
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9367323B2 (en) 2012-06-15 2016-06-14 International Business Machines Corporation Processor assist facility
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
KR102248470B1 (ko) * 2012-06-15 2021-05-06 인텔 코포레이션 메모리로부터 순차적으로 판독하는 load들을 구성하는 메모리 일관성 모델에서 비순차 load들을 갖는 세마포어 방법 및 시스템
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9317460B2 (en) 2012-06-15 2016-04-19 International Business Machines Corporation Program event recording within a transactional environment
US8966324B2 (en) 2012-06-15 2015-02-24 International Business Machines Corporation Transactional execution branch indications
US9442737B2 (en) * 2012-06-15 2016-09-13 International Business Machines Corporation Restricting processing within a processor to facilitate transaction completion
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US8880959B2 (en) 2012-06-15 2014-11-04 International Business Machines Corporation Transaction diagnostic block
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
CN105760140B (zh) * 2012-06-29 2019-09-13 英特尔公司 用于测试事务性执行状态的指令和逻辑
US8943278B2 (en) 2012-07-31 2015-01-27 Advanced Micro Devices, Inc. Protecting large regions without operating-system support
US8914586B2 (en) * 2012-07-31 2014-12-16 Advanced Micro Devices, Inc. TLB-walk controlled abort policy for hardware transactional memory
US9430166B2 (en) * 2012-08-10 2016-08-30 International Business Machines Corporation Interaction of transactional storage accesses with other atomic semantics
US9892063B2 (en) * 2012-11-27 2018-02-13 Advanced Micro Devices, Inc. Contention blocking buffer
US9032152B2 (en) 2013-03-22 2015-05-12 Applied Micro Circuits Corporation Cache miss detection filter
US9535744B2 (en) * 2013-06-29 2017-01-03 Intel Corporation Method and apparatus for continued retirement during commit of a speculative region of code
US9524195B2 (en) 2014-02-27 2016-12-20 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
CA2830605A1 (en) * 2013-10-22 2015-04-22 Ibm Canada Limited - Ibm Canada Limitee Code versioning for enabling transactional memory region promotion
JP6021112B2 (ja) * 2013-11-28 2016-11-02 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 複数のスレッドで順序付きトランザクションを実行する方法、並びに、当該トランザクションを実行するためのコンピュータ及びそのコンピュータ・プログラム
CN105378652B (zh) * 2013-12-24 2018-02-06 华为技术有限公司 线程共享资源分配方法及装置
US9207967B2 (en) 2014-01-07 2015-12-08 Red Hat, Inc. Using nonspeculative operations for lock elision
US9465673B2 (en) 2014-02-27 2016-10-11 International Business Machines Corporation Deferral instruction for managing transactional aborts in transactional memory computing environments to complete transaction by deferring disruptive events handling
US9442853B2 (en) * 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging lock elision transactions with instructions to change execution type
US9442775B2 (en) * 2014-02-27 2016-09-13 International Business Machines Corporation Salvaging hardware transactions with instructions to transfer transaction execution control
US9575890B2 (en) 2014-02-27 2017-02-21 International Business Machines Corporation Supporting atomic accumulation with an addressable accumulator
US9411729B2 (en) 2014-02-27 2016-08-09 International Business Machines Corporation Salvaging lock elision transactions
US9361041B2 (en) 2014-02-27 2016-06-07 International Business Machines Corporation Hint instruction for managing transactional aborts in transactional memory computing environments
US9262206B2 (en) 2014-02-27 2016-02-16 International Business Machines Corporation Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
US9471371B2 (en) 2014-02-27 2016-10-18 International Business Machines Corporation Dynamic prediction of concurrent hardware transactions resource requirements and allocation
US9645879B2 (en) 2014-02-27 2017-05-09 International Business Machines Corporation Salvaging hardware transactions with instructions
US9336097B2 (en) 2014-02-27 2016-05-10 International Business Machines Corporation Salvaging hardware transactions
US20150242216A1 (en) 2014-02-27 2015-08-27 International Business Machines Corporation Committing hardware transactions that are about to run out of resource
US9430273B2 (en) 2014-02-27 2016-08-30 International Business Machines Corporation Suppressing aborting a transaction beyond a threshold execution duration based on the predicted duration
US9424072B2 (en) 2014-02-27 2016-08-23 International Business Machines Corporation Alerting hardware transactions that are about to run out of space
US9329946B2 (en) 2014-02-27 2016-05-03 International Business Machines Corporation Salvaging hardware transactions
US9311178B2 (en) 2014-02-27 2016-04-12 International Business Machines Corporation Salvaging hardware transactions with instructions
US9524187B2 (en) 2014-03-02 2016-12-20 International Business Machines Corporation Executing instruction with threshold indicating nearing of completion of transaction
US9720742B2 (en) * 2014-05-15 2017-08-01 GM Global Technology Operations LLC Service and system supporting coherent data access on multicore controller
CN105874439A (zh) * 2014-05-28 2016-08-17 联发科技股份有限公司 不同计算单元共享内存池的内存池管理方法和相关的计算机可读介质和内存池管理装置
US9454313B2 (en) * 2014-06-10 2016-09-27 Arm Limited Dynamic selection of memory management algorithm
US9448939B2 (en) * 2014-06-30 2016-09-20 International Business Machines Corporation Collecting memory operand access characteristics during transactional execution
US9710271B2 (en) 2014-06-30 2017-07-18 International Business Machines Corporation Collecting transactional execution characteristics during transactional execution
US9501411B2 (en) * 2014-08-29 2016-11-22 International Business Machines Corporation Cache backing store for transactional memory
US9904645B2 (en) * 2014-10-31 2018-02-27 Texas Instruments Incorporated Multicore bus architecture with non-blocking high performance transaction credit system
US9864708B2 (en) * 2014-12-16 2018-01-09 Vmware, Inc. Safely discovering secure monitors and hypervisor implementations in systems operable at multiple hierarchical privilege levels
US10324768B2 (en) * 2014-12-17 2019-06-18 Intel Corporation Lightweight restricted transactional memory for speculative compiler optimization
GB2533414B (en) * 2014-12-19 2021-12-01 Advanced Risc Mach Ltd Apparatus with shared transactional processing resource, and data processing method
US10732865B2 (en) * 2015-09-23 2020-08-04 Oracle International Corporation Distributed shared memory using interconnected atomic transaction engines at respective memory interfaces
US9998284B2 (en) * 2015-09-24 2018-06-12 Intel Corporation Methods and apparatus to provide isolated execution environments
GB2548845B (en) 2016-03-29 2019-11-27 Imagination Tech Ltd Handling memory requests
US10169106B2 (en) * 2016-06-30 2019-01-01 International Business Machines Corporation Method for managing control-loss processing during critical processing sections while maintaining transaction scope integrity
US10095637B2 (en) * 2016-09-15 2018-10-09 Advanced Micro Devices, Inc. Speculative retirement of post-lock instructions
US11868818B2 (en) 2016-09-22 2024-01-09 Advanced Micro Devices, Inc. Lock address contention predictor
US10423446B2 (en) * 2016-11-28 2019-09-24 Arm Limited Data processing
US10339060B2 (en) * 2016-12-30 2019-07-02 Intel Corporation Optimized caching agent with integrated directory cache
US10664306B2 (en) * 2017-01-13 2020-05-26 Arm Limited Memory partitioning
US11119923B2 (en) * 2017-02-23 2021-09-14 Advanced Micro Devices, Inc. Locality-aware and sharing-aware cache coherence for collections of processors
US11727997B2 (en) * 2017-07-07 2023-08-15 Micron Technology, Inc. RPMB improvements to managed NAND
CN109726017B (zh) * 2017-10-30 2023-05-26 阿里巴巴集团控股有限公司 一种应用程序之间共享缓存的方法及装置
US11018850B2 (en) 2017-12-26 2021-05-25 Akamai Technologies, Inc. Concurrent transaction processing in a high performance distributed system of record
US10514969B2 (en) * 2018-01-09 2019-12-24 Microsoft Technology Licensing, Llc Bit-accurate-tracing analysis with applied memory region lifetimes
GB2570110B (en) * 2018-01-10 2020-04-15 Advanced Risc Mach Ltd Speculative cache storage region
US10558572B2 (en) * 2018-01-16 2020-02-11 Microsoft Technology Licensing, Llc Decoupling trace data streams using cache coherence protocol data
KR102504332B1 (ko) 2018-02-21 2023-02-28 삼성전자주식회사 서로 이격되어 배치되는 범프 어레이들을 포함하는 메모리 장치 및 이를 포함하는 전자 장치
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
US10949210B2 (en) * 2018-05-02 2021-03-16 Micron Technology, Inc. Shadow cache for securing conditional speculative instruction execution
US11204773B2 (en) 2018-09-07 2021-12-21 Arm Limited Storing a processing state based on confidence in a predicted branch outcome and a number of recent state changes
CN109614220B (zh) 2018-10-26 2020-06-30 阿里巴巴集团控股有限公司 一种多核系统处理器和数据更新方法
CN109725943B (zh) * 2018-12-27 2022-05-17 龙芯中科技术股份有限公司 一种程序跳转方法、装置、电子设备及存储介质
US10977038B2 (en) * 2019-06-19 2021-04-13 Arm Limited Checkpointing speculative register mappings
US20220014598A1 (en) * 2020-07-09 2022-01-13 Ge Aviation Systems Llc Data service tracker module for a communication system and method of determining a set of data couplings
CN111913810B (zh) * 2020-07-28 2024-03-19 阿波罗智能技术(北京)有限公司 多线程场景下的任务执行方法、装置、设备和存储介质
KR20220056986A (ko) 2020-10-29 2022-05-09 삼성전자주식회사 메모리 확장기, 이종 컴퓨팅 장치, 및 이종 컴퓨팅 장치의 동작 방법
EP4206918A3 (en) * 2021-12-30 2023-11-15 Rebellions Inc. Neural processing device and transaction tracking method thereof
CN114510271B (zh) * 2022-02-09 2023-08-15 海飞科(南京)信息技术有限公司 用于在单指令多线程计算系统中加载数据的方法和装置
CN115757196B (zh) * 2022-11-09 2023-09-01 超聚变数字技术有限公司 内存、访问内存方法及计算设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0944402A (ja) * 1995-07-27 1997-02-14 Nec Software Ltd キャッシュメモリの記憶一致制御装置及び方法
JPH09231124A (ja) * 1996-02-20 1997-09-05 Ricoh Co Ltd メモリロック装置及びメモリロック方法
US5809503A (en) * 1993-07-08 1998-09-15 Fujitsu Limited Locking mechanism for check in/check out model which maintains data consistency amongst transactions
JP2000267815A (ja) * 1999-03-17 2000-09-29 Hitachi Ltd ディスクアレイ制御装置
WO2004075051A1 (en) * 2003-02-13 2004-09-02 Sun Microsystems Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
WO2004075044A2 (en) * 2003-02-13 2004-09-02 Sun Microsystems Inc. Method and apparatus for selective monitoring of store instructions during speculative thread execution

Family Cites Families (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428761A (en) * 1992-03-12 1995-06-27 Digital Equipment Corporation System for achieving atomic non-sequential multi-word operations in shared memory
JP3158364B2 (ja) * 1992-10-13 2001-04-23 ソニー株式会社 電子機器
JP2936036B2 (ja) 1992-10-27 1999-08-23 富士通株式会社 メモリアクセス装置
US5848241A (en) * 1996-01-11 1998-12-08 Openframe Corporation Ltd. Resource sharing facility functions as a controller for secondary storage device and is accessible to all computers via inter system links
US5758183A (en) * 1996-07-17 1998-05-26 Digital Equipment Corporation Method of reducing the number of overhead instructions by modifying the program to locate instructions that access shared data stored at target addresses before program execution
US6108757A (en) * 1997-02-28 2000-08-22 Lucent Technologies Inc. Method for locking a shared resource in multiprocessor system
JPH1173329A (ja) * 1997-06-24 1999-03-16 Matsushita Electric Ind Co Ltd ソフトウエア開発支援システム
US6076126A (en) * 1997-06-30 2000-06-13 Emc Corporation Software locking mechanism for locking shared resources in a data processing system
US5987550A (en) * 1997-06-30 1999-11-16 Emc Corporation Lock mechanism for shared resources in a data processing system
US6240413B1 (en) * 1997-12-22 2001-05-29 Sun Microsystems, Inc. Fine-grained consistency mechanism for optimistic concurrency control using lock groups
US6078981A (en) * 1997-12-29 2000-06-20 Intel Corporation Transaction stall technique to prevent livelock in multiple-processor systems
US6460119B1 (en) * 1997-12-29 2002-10-01 Intel Corporation Snoop blocking for cache coherency
US6101568A (en) * 1998-08-25 2000-08-08 Stmicroelectronics, Inc. Bus interface unit having dual purpose transaction buffer
US6282637B1 (en) 1998-12-02 2001-08-28 Sun Microsystems, Inc. Partially executing a pending atomic instruction to unlock resources when cancellation of the instruction occurs
US6665708B1 (en) * 1999-11-12 2003-12-16 Telefonaktiebolaget Lm Ericsson (Publ) Coarse grained determination of data dependence between parallel executed jobs in an information processing system
US6324624B1 (en) * 1999-12-28 2001-11-27 Intel Corporation Read lock miss control and queue management
US6684398B2 (en) 2000-05-31 2004-01-27 Sun Microsystems, Inc. Monitor entry and exit for a speculative thread during space and time dimensional execution
US6725341B1 (en) * 2000-06-28 2004-04-20 Intel Corporation Cache line pre-load and pre-own based on cache coherence speculation
US6460124B1 (en) 2000-10-20 2002-10-01 Wisconsin Alumni Research Foundation Method of using delays to speed processing of inferred critical program portions
US6463511B2 (en) 2000-12-29 2002-10-08 Intel Corporation System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model
US6725337B1 (en) 2001-05-16 2004-04-20 Advanced Micro Devices, Inc. Method and system for speculatively invalidating lines in a cache
JP4050226B2 (ja) 2001-06-26 2008-02-20 サン・マイクロシステムズ・インコーポレイテッド マルチプロセッサシステムにおける推測的な格納を容易にするl2ディレクトリの利用
KR100567099B1 (ko) 2001-06-26 2006-03-31 썬 마이크로시스템즈, 인코포레이티드 L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치
WO2004001527A2 (en) 2001-06-26 2003-12-31 Sun Microsystems, Inc. Method and apparatus for facilitating speculative loads in a multiprocessor system
JP3661614B2 (ja) * 2001-07-12 2005-06-15 日本電気株式会社 キャッシュメモリ制御方法及びマルチプロセッサシステム
US7120762B2 (en) 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US6981108B1 (en) * 2001-10-23 2005-12-27 P-Cube Ltd. Method for locking shared resources connected by a PCI bus
US7908441B2 (en) 2002-01-11 2011-03-15 Oracle America, Inc. Value recycling facility for multithreaded computations
US6839816B2 (en) * 2002-02-26 2005-01-04 International Business Machines Corporation Shared cache line update mechanism
US7328316B2 (en) 2002-07-16 2008-02-05 Sun Microsystems, Inc. Software transactional memory for dynamically sizable shared data structures
US7120746B2 (en) * 2002-09-09 2006-10-10 International Business Machines Corporation Technique for data transfer
US7062636B2 (en) * 2002-09-19 2006-06-13 Intel Corporation Ordering scheme with architectural operation decomposed into result producing speculative micro-operation and exception producing architectural micro-operation
US7269694B2 (en) 2003-02-13 2007-09-11 Sun Microsystems, Inc. Selectively monitoring loads to support transactional program execution
US7103880B1 (en) * 2003-04-30 2006-09-05 Hewlett-Packard Development Company, L.P. Floating-point data speculation across a procedure call using an advanced load address table
US20050086446A1 (en) 2003-10-04 2005-04-21 Mckenney Paul E. Utilizing software locking approach to execute code upon failure of hardware transactional approach
US7260746B2 (en) * 2003-10-21 2007-08-21 Massachusetts Institute Of Technology Specification based detection and repair of errors in data structures
US7340569B2 (en) 2004-02-10 2008-03-04 Wisconsin Alumni Research Foundation Computer architecture providing transactional, lock-free execution of lock-based programs
US7529914B2 (en) 2004-06-30 2009-05-05 Intel Corporation Method and apparatus for speculative execution of uncontended lock instructions
US7685365B2 (en) 2004-09-30 2010-03-23 Intel Corporation Transactional memory execution utilizing virtual memory
US7856537B2 (en) * 2004-09-30 2010-12-21 Intel Corporation Hybrid hardware and software implementation of transactional memory access
US7689778B2 (en) * 2004-11-30 2010-03-30 Intel Corporation Preventing system snoop and cross-snoop conflicts
US7984248B2 (en) 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US9268710B1 (en) * 2007-01-18 2016-02-23 Oracle America, Inc. Facilitating efficient transactional memory and atomic operations via cache line marking

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809503A (en) * 1993-07-08 1998-09-15 Fujitsu Limited Locking mechanism for check in/check out model which maintains data consistency amongst transactions
JPH0944402A (ja) * 1995-07-27 1997-02-14 Nec Software Ltd キャッシュメモリの記憶一致制御装置及び方法
JPH09231124A (ja) * 1996-02-20 1997-09-05 Ricoh Co Ltd メモリロック装置及びメモリロック方法
JP2000267815A (ja) * 1999-03-17 2000-09-29 Hitachi Ltd ディスクアレイ制御装置
WO2004075051A1 (en) * 2003-02-13 2004-09-02 Sun Microsystems Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
WO2004075044A2 (en) * 2003-02-13 2004-09-02 Sun Microsystems Inc. Method and apparatus for selective monitoring of store instructions during speculative thread execution
JP2006518077A (ja) * 2003-02-13 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド 臨界領域を投機的に実行することによりロックを回避するための方法および装置

Also Published As

Publication number Publication date
US20110055493A1 (en) 2011-03-03
US8458412B2 (en) 2013-06-04
JP5404574B2 (ja) 2014-02-05
GB2437211A8 (ja) 2007-10-15
DE112005003874B3 (de) 2021-04-01
CN101095113B (zh) 2012-05-23
GB0818235D0 (en) 2008-11-12
JP2011044161A (ja) 2011-03-03
GB0714433D0 (en) 2007-09-05
DE112005003339T5 (de) 2007-11-22
GB2437211A (en) 2007-10-17
GB2451200A (en) 2009-01-21
GB2437211B (en) 2008-11-19
CN101095113A (zh) 2007-12-26
US7984248B2 (en) 2011-07-19
CN102622276A (zh) 2012-08-01
GB0818238D0 (en) 2008-11-12
JP2008525923A (ja) 2008-07-17
US20060161740A1 (en) 2006-07-20
DE112005003861A5 (de) 2014-06-05
JP2011028774A (ja) 2011-02-10
GB2451199A (en) 2009-01-21
GB2451200B (en) 2009-05-20
US8176266B2 (en) 2012-05-08
WO2006071969A1 (en) 2006-07-06
US20110252203A1 (en) 2011-10-13
JP5255614B2 (ja) 2013-08-07
GB2451199B (en) 2009-05-27
CN102622276B (zh) 2015-09-23

Similar Documents

Publication Publication Date Title
JP4764430B2 (ja) マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
US10228943B2 (en) Prefetching of discontiguous storage locations in anticipation of transactional execution
TWI476595B (zh) 用於交易式記憶體事件處置之硬體中使用者處置器的登錄
US9262173B2 (en) Critical section detection and prediction mechanism for hardware lock elision
EP2562642B1 (en) Hardware acceleration for a software transactional memory system
US8627048B2 (en) Mechanism for irrevocable transactions
US8627030B2 (en) Late lock acquire mechanism for hardware lock elision (HLE)
US20110208921A1 (en) Inverted default semantics for in-speculative-region memory accesses
US10127155B2 (en) Memory performance when speculation control is enabled, and instruction therefor
US20100162247A1 (en) Methods and systems for transactional nested parallelism
US20180136966A1 (en) Dynamic releasing of cache lines
US9658961B2 (en) Speculation control for improving transaction success rate, and instruction therefor

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100615

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100914

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100922

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100928

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20101109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110309

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20110310

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20110401

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: 20110524

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110610

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140617

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4764430

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

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

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250