[go: up one dir, main page]

JP5442765B2 - ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張 - Google Patents

ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張 Download PDF

Info

Publication number
JP5442765B2
JP5442765B2 JP2011542350A JP2011542350A JP5442765B2 JP 5442765 B2 JP5442765 B2 JP 5442765B2 JP 2011542350 A JP2011542350 A JP 2011542350A JP 2011542350 A JP2011542350 A JP 2011542350A JP 5442765 B2 JP5442765 B2 JP 5442765B2
Authority
JP
Japan
Prior art keywords
buffered
state
coherence
transaction
cache line
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
JP2011542350A
Other languages
English (en)
Other versions
JP2012512493A (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 JP2012512493A publication Critical patent/JP2012512493A/ja
Application granted granted Critical
Publication of JP5442765B2 publication Critical patent/JP5442765B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F9/467Transactional memory

Landscapes

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

Description

本発明は、プロセッサ実行分野に係り、より詳しくは、一群の命令の実行に係る。
半導体処理およびロジック設計が進化することにより、集積回路デバイスに設けられてよいロジックの量が増えてもよくなっている。この結果、コンピュータシステム構成は、システム内の単一の、または複数の集積回路から、個々の集積回路に設けられる複数のコアおよび複数の論理プロセッサへと進化した。プロセッサまたは集積回路は通常、単一のプロセッサダイを含み、ここでプロセッサダイは任意の数のコアまたは論理プロセッサを含むことができる。
集積回路上のコアおよび論理プロセッサの数が増加し続けていることにより、より多くのソフトウェアスレッドをコンカレントに実行することができるようになった。しかし、同時に実行可能なソフトウェアスレッドの数が増えたので、ソフトウェアスレッド間で共有されるデータの同期が難しくなってきている。マルチコアまたは複数の論理プロセッサシステムにおける共有データにアクセスするためによく利用されている解決法は、ロックを利用して、共有データに対する複数のアクセスに対して相互排除を保証する、というものである。しかし、複数のソフトウェアスレッドを実行する機能が増加の一途を辿っているために、誤ったコンテンションになったり、実行がシリアル化されてしまったりする可能性もある。
例えば、共有データを保持しているハッシュテーブルを例にとる。ロックシステムを利用することで、プログラマは、ハッシュテーブル全体をロックして、1つのスレッドがハッシュテーブル全体にアクセスできるようにする。しかしこうすると、他のスレッドは、ロックが解除されるまでハッシュテーブルのエントリいずれにもアクセスすることができないため、これら他のスレッドのスループットおよび実行に悪影響がでる可能性がある。この代わりに、ハッシュテーブルの各エントリをロックする、という方法もある。しかしいずれにしても、この単純な例から大きなスケーラブルプログラムのことを推定すると、ロックのコンテンションの複雑性、シリアル化、細かい粒度の同期、およびデッドロックの回避がプログラマにとっては非常に大きな負担となることは明らかである。
別の最近のデータ同期技術に、トランザクションメモリ(TM)の利用がある。多くの場合トランザクションの実行には、複数のマイクロオペレーション、処理、または命令のグループを実行することが含まれる。上述した例では、両方のスレッドがハッシュテーブル内で実行され、それらのメモリアクセスが監視/トレースされている。両方のスレッドが同じエントリに/を、アクセス/変更するときには、コンフリクトの解決を実行して、データを有効にしておく必要がある。あるタイプのトランザクションの実行には、ソフトウェアトランザクションメモリ(STM)が含まれ、この方法では、メモリアクセスのトレース、コンフリクトの解決、アボートタスク、およびその他のトランザクションタスクが、しばしばハードウェアの助けを借りずにソフトウェアで実行される。
別のタイプのトランザクションの実行には、ハードウェアトランザクションメモリ(HTM)システムが含まれ、この方法では、ハードウェアを利用することにより、アクセストレース、コンフリクトの解決、その他のトランザクションタスクがサポートされている。今までのHTMは、メモリの位置へのバッファトランザクション書き込みに別個の書き込みバッファ構造を利用していた。しかし、別個のバッファの追加により、潜在的にプロセッサのコストおよび複雑性が増すことが想定され、ひいてはトランザクションコミット処理が遅くなることが考えられる。
添付図面を参照しながら本発明を説明するが、添付図面は例示であって限定は意図しない。
複数のソフトウェアスレッドをコンカレントに実行可能な複数の処理エレメントを含むプロセッサの一実施形態を示す。 キャッシュメモリに保持されているデータアイテムにコヒーレンス状態を関連付ける一実施形態を示す。 バッファ状態を含む状態遷移ダイアグラムの一実施形態を示す。 アクセス処理をバッファリングするかを決定する方法を示すフローダイアグラムの一実施形態を示す。 バッファリングされたデータをサポートする方法を示すフローダイアグラムの一実施形態を示す。
以下の記載において、トランザクション実行の特定のハードウェア構造、アクセスモニタの特定のタイプおよび実装例、特定のキャッシュ実装、特定のタイプのキャッシュコヒーレンスモデル、特定のデータ粒度、および特定のタイプのメモリアクセスおよび位置等の複数の詳細を示すことで、本発明の完全な理解を提供している。しかし、当業者にはこれら特定の詳細が必ずしも本発明を実行に必要ではないことが明らかである。また、公知のコンポーネントまたは方法については(例えばソフトウェアのトランザクションの符号化、トランザクションのデマケーション、特定の、その他のマルチコアおよびマルチスレッドのプロセッサアーキテクチャ、特定のコンパイラ方法/実装、および、マイクロプロセッサの特定の処理に関する詳細等)、詳述しないことにより、本発明を不当に曖昧にしないようにしている箇所もある。
ここに記載する方法および装置は、キャッシュコヒーレンスを拡張してバッファリングされたデータをサポートするものである。具体的には、キャッシュコヒーレンスの拡張は、ハードウェアトランザクションメモリシステムに関した説明を行う。しかしこれに限られず、バッファリングされたデータをサポートする方法および装置は、バッファリングされたデータをサポートする任意の実行スタイルについて実装可能である。
図1は、複数のスレッドをコンカレントに実行可能なプロセッサの一実施形態を示す。プロセッサ100は、ハードウェアトランザクション実行のハードウェアサポートを含みうる。ハードウェアトランザクション実行と組み合わせた実装あるいは別個の実装のいずれにおいても、プロセッサ100は、ソフトウェアトランザクションメモリ(STM)のハードウェアアクセラレーション、STMの別個の実行、またはこれらの組み合わせ(例えばハイブリッドトランザクションメモリ(TM)システム等)に対するハードウェアサポートを提供することができる。プロセッサ100には、任意のプロセッサ(マイクロプロセッサ、エンべデッドプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、その他の、コードを実行するためのデバイス等)が含まれてよい。図示されているプロセッサ100は、複数の処理エレメントを含む。
一実施形態では、処理エレメントとは、スレッドユニット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、および/または、プロセッサの状態(実行状態またはアーキテクチャ状態等)を保持することのできる任意の他のエレメントのことである。つまり、一実施形態における処理エレメントは、コード(例えばソフトウェアスレッド、オペレーティングシステム、アプリケーション、その他のコード)と独立して関連付けることのできる任意のハードウェアのことである。通常、物理プロセッサとは、任意の数の他の処理エレメント(例えばコアまたはハードウェアスレッド)を潜在的に含む集積回路のことである。
コアとは、しばしば、各々が独立して維持されるアーキテクチャ状態が少なくとも一部の専用実行リソースと関連付けられるような、独立したアーキテクチャ状態を維持することのできる集積回路上に配置されるロジックのことである。コアに対して、ハードウェアスレッドとは、通常、独立して維持されるアーキテクチャ状態が実行リソースに対するアクセスを共有するような、独立したアーキテクチャ状態を維持することのできる集積回路上に配置される任意のロジックのことを示す。ここから分かるように、一定のリソースが共有され、他のリソースをアーキテクチャ状態専用とする場合には、ハードウェアスレッドとコアとの間の名前における境界線が重なる。しかしオペレーティングシステムは、各論理プロセッサ上で個別に処理をスケジュールするために、コアおよびハードウェアスレッドをそれぞれ個別の論理プロセッサとしてみる場合が多い。
図1に示す物理プロセッサ100は、コア101および102という2つのコアを含み、これらコアは、高レベルのキャッシュ110へのアクセスを共有している。プロセッサ100は非対称コア(つまり、それぞれが異なる構成、機能ユニット、および/または、ロジックを有するコアのこと)を含むこともできるが、示されているのは対称コアである。この結果、コア101と同一であるとして示されているコア102については詳述を避けることで記載の繰り返しを避ける。加えて、コア101は、2つのハードウェアスレッド101aおよび101bを含み、コア102も2つのハードウェアスレッド102aおよび102bを含む。従って、オペレーティングシステム等のソフトウェア実体は、プロセッサ100を、潜在的に4つの別個のプロセッサ(つまり、4つのソフトウェアスレッドをコンカレントに実行可能な4つの論理プロセッサまたは処理エレメント)としてみることができる。
ここで第1のスレッドは、アーキテクチャ状態レジスタ101aと関連付けられており、第2のスレッドは、アーキテクチャ状態レジスタ101bと関連付けられており、第3のスレッドは、アーキテクチャ状態レジスタ102aと関連付けられており、第4のスレッドは、アーキテクチャ状態レジスタ102bと関連付けられている。アーキテクチャ状態レジスタ101aは、アーキテクチャ状態レジスタ101bに複製されており、個々のアーキテクチャ状態/コンテキストを論理プロセッサ101aおよび論理プロセッサ101bに格納できるようになっている。他の、これより小さいリソース(リネーム割り当てロジック130の命令ポインタおよびリネームロジック等)も、スレッド101aおよび101bに複製されてよい。一部のリソース(例えば、リオーダ/リタイヤユニット135のリオーダバッファ、ILTB120、ロード/格納バッファ、およびキュー)も、分割により共有可能である。他のリソース(例えば汎用内部レジスタ、ページテーブルベースレジスタ、低レベルデータキャッシュおよびデータTLB115、実行ユニット(1または複数)140、およびアウトオブオーダユニット135の部分等)も潜在的に完全に共有することができる。
プロセッサ100は多くの場合、完全に共有される、分割により共有される、または処理エレメント専用であってよい、他のリソースを含む。図1では、プロセッサの例示的な機能ユニット/リソースを含む純粋に例示的なプロセッサの一実施形態が示されている。プロセッサは、これら機能ユニットの任意のものを含んでも含まなくてもよく、且つ、図示されていない任意の他の公知の機能ユニット、ロジック、またはファームウェアを含むこともできる。
図示されているように、プロセッサ100は、システムメモリ175、チップセット、ノースブリッジ、その他の集積回路等の、プロセッサ100の外部のデバイスと通信するためにバスインタフェースモジュール105を含む。メモリ175は、プロセッサ100専用であっても、システム内の他のデバイスと共有されてもよい。より高レベルまたはさらに外のキャッシュ110は、高レベルのキャッシュ110から最近フェッチされたエレメントをキャッシュする。(より)高レベルのまたはさらに外の、という用語は、実行ユニット以上の、またはこれらから離れる方向のキャッシュレベルのことを意味する。一実施形態では、高レベルのキャッシュ110は、二次レベルのデータキャッシュである。しかし、高レベルのキャッシュ110はこれに限定はされず、命令キャッシュと関連付けられても、命令キャッシュを含んでもよい。最近復号したトレースを格納するためのトレースキャッシュ(命令キャッシュの一種)を、デコーダ125の後に連結することもできる。モジュール120はさらに、実行する/される分岐を予測する分岐対象バッファ、および、命令用のアドレス変換エントリを格納する命令変換バッファ(I−TLB)をも潜在的に含む。
復号モジュール125は、フェッチされたエレメントを復号するフェッチユニット120に連結される。一実施形態では、プロセッサ100は、プロセッサ100上で実効可能な命令を定義/特定する命令セットアーキテクチャ(ISA)と関連付けられている。ここで、ISAが認識する機械コード命令は、しばしば、実行する命令または処理を参照/特定する、オペコードと称される命令の一部を含む。
一例では、アロケータおよびリネームブロック130は、命令処理の結果を格納する、レジスタファイル等のリソースをリザーブするアロケータを含む。しかし、スレッド101aおよび101bは、潜在的にアウトオブオーダ実行をする機能を有してよく、この場合、アロケータおよびリネームブロック130は、命令の結果をトラックするリオーダバッファ等の他のリソースもリザーブする。ユニット130は、さらに、プログラム/命令参照レジスタをプロセッサ100の内部の他のレジスタへリネームするレジスタリネーム部を含んでよい。リオーダ/リタイヤユニット135は、上述したリオーダバッファ、ロードバッファ、および格納バッファ等のコンポーネントを含むことで、アウトオブオーダ実行、ひいては、後にアウトオブオーダで実行されるインオーダの命令のリタイヤをサポートする。
スケジューラおよび実行ユニットブロック140は、一実施形態では、実行ユニット上に命令/処理をスケジュールするスケジューラユニットを含む。例えば浮動小数点命令は、利用可能な浮動小数点実行ユニットを有する実行ユニットのポート上にスケジュールされる。実行ユニットに関連付けられるレジスタファイルもさらに含められて、情報命令処理の結果を格納する。実行ユニットの例としては、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、格納実行ユニット、およびその他の公知の実行ユニットが含まれる。
(より)低レベルのデータキャッシュおよびデータ変換バッファ(D−TLB)150が実行ユニット(一または複数)140に連結されている。データキャッシュは、潜在的にメモリコヒーレンス状態に保持される、データオペランド等の、最近利用/処理されたエレメントを格納するものである。D−TLBは、最近の仮想/線形アドレスからの物理アドレスへの変換を格納する。具体例では、プロセッサは、物理メモリを複数の仮想ページに分割するページテーブル構造を含んでよい。
一実施形態では、プロセッサ100は、ハードウェアによるトランザクション実行、ソフトウェアによるトランザクション実行、またはこれらの組み合わせまたはハイブリッドの実行機能を有してよい。ここではコードのクリティカルセクションまたはアトミックセクションとも称されうる「トランザクション」という概念には、アトミックグループとして実行される命令、処理、またはマイクロオペレーションの一群が含まれる。例えば命令または処理は、トランザクションまたはクリティカルセクションの境界を定めるときに利用することができる。一実施形態では、以下で詳述するように、これら命令を、上述したデコーダ等のプロセッサ100のハードウェアにより認識可能な、命令セットアーキテクチャ(ISA)等の一式の命令の一部としてよい。多くの場合、これらの命令は、高レベル言語からハードウェアにより認識可能なアセンブリ言語へとコンパイルされると、デコーダが復号段階において認識するオペレーションコード(オペコード)または命令のその他の部分等を含む。
通常、トランザクションの実行中は、メモリに対する更新は、トランザクションがコミットされるまではグローバルに可視状態とはならない。例えば、ある位置へのトランザクション書き込みは、潜在的にローカルスレッドにとって可視状態であるが、別のスレッドから読み出しされると、書き込みデータは、トランザクション書き込みを含むトランザクションがコミットされるまでは転送されない。トランザクションが未完了である間は、メモリからロードされたり、メモリへ書き込まれたりするデータアイテム/エレメントはトラックされるが、これに関して後述する。ひとたびトランザクションがコミット点に到達し、このトランザクションについてコンフリクトが検知されていない場合には、トランザクションにコミットして、トランザクション中に行われた更新をグローバルに可視状態とする。
しかし未完了である間にトランザクションが無効となった場合には、このトランザクションをアボートして、更新をグローバルに可視状態とすることなく、潜在的に再開する。従って本明細書においてトランザクションが未完了である、というコンセプトは、実行が開始されたが、コミットがまだである、またはアボートされた(つまり未完了状態)トランザクションのことを示す。
ソフトウェアトランザクションメモリ(STM)システムは、多くの場合、ソフトウェア内の、または部分的にソフトウェア内の、アクセスのトラック、コンフリクト解決、その他のトランザクションメモリタスクを行う。一実施形態では、プロセッサ100は、プログラムコードをコンパイルしてトランザクション実行をサポートするコンパイラを実行することができる。ここでコンパイラは、トランザクションを実行させる処理、呼び出し、関数、その他のコードを挿入することができる。
しばしばコンパイラは、ソーステキスト/コードをターゲットテキスト/コードに変換する、1つのプログラムまたは一式のプログラムを含む。通常は、プログラム/アプリケーションコードのコンパイラによるコンパイルは、複数の段階またはパスで行われ、高レベルプログラミング言語コードから低レベルの機械またはアセンブリ言語コードに変換される。しかし単一のパスを利用するコンパイラも単純なコンパイルには利用することができる。コンパイラは任意の公知のコンパイル技術を利用して任意の公知のコンパイラ処理(語彙解析、前処理、パーズ、セマンティックス解析、コード生成、コード変換、およびコードの最適化)を実行することができる。
より大きなコンパイラは複数の段階を含むことが多く、特に、これらの段階は、2つの汎用段階(つまり、(1)シンタックス処理、セマンティックス処理、および一部の変換/最適化処理が行われるフロントエンド、(2)概して解析、変換、最適化、およびコード生成が行われるバックエンド)に含まれている場合が多い。一部のコンパイラにはミドルエンドと称されるものがあり、これはコンパイラにおいてフロントエンドとバックエンドとの間の境界が曖昧なもののことである。従って、コンパイラの挿入、関連付け、生成その他の処理は、上述した段階またはパスのいずれにおいても行うことができ、且つ、コンパイラの他の公知の段階またはパスにおいて行うこともできる。一例としては、コンパイラが潜在的に、1以上のコンパイル段階にトランザクション処理、呼び出し、関数等を挿入する(例えば、コンパイルのフロントエンド段階における呼び出し/処理の挿入等)ことができ、この後のトランザクションメモリ変換段階において、呼び出し/処理を、より低レベルのコードへ変換することができる。
しかしながら、コンパイラの実行環境および動的または静的な性質にも関らず、一実施形態ではコンパイラが、プログラムコードを、トランザクション実行を可能とようにコンパイルする場合もある。従って一実施形態においてプログラムコードの実行、といった場合には、(1)主要なプログラムコードをコンパイルするための、トランザクション構造を維持するための、または、他のトランザクション関連の処理を実行するためのコンパイラプログラム(1または複数)の動的または静的な実行、(2)トランザクション処理/呼び出しを含む主要なプログラムコードの実行、(3)主要なプログラムコードに関連付けられたライブラリ等の他のプログラムコードの実行、または(4)これらの組み合わせのことを示してよい。
一実施形態では、プロセッサ100は、ハードウェアトランザクションメモリ(HTM)システム内のハードウェア/ロジックを利用してトランザクションを実行することができる。HTMを実装する場合、アーキテクチャおよびマイクロアーキテクチャ両方の観点から複数の特定の実装の詳細が公知であるが、これら殆どに関しては記載しないことで、本発明を不当に曖昧にしないことにする。しかし、一部の構造および実装例については後述して例示を行う。また、これら構造および実装例は、必須ではなく、これに対して、異なる実装詳細を有する他の構造で増強を加えたり、これらで置き換えたりすることもできる点に留意されたい。
ローカル処理エレメントにより、および、潜在的に他の処理エレメントにより、データアイテムに対してアクセスおよび要求を行うことができる。トランザクションメモリシステムに安全機構がない場合、これらアクセスの一部が潜在的に無効なデータおよび実行となってしまうことがある(つまり、あるデータへの書き込みによって読み出しが無効となったり、無効なデータを読み出したりしてしまうことがある)。この結果、プロセッサ100は、潜在的なコンフリクトを特定するために、データアイテムへの、またはデータアイテムからのメモリアクセスをトラックまたは監視するロジックを潜在的に含むことができる。
データアイテムまたはデータエレメントは、ハードウェア、ソフトウェア、またはこれらの組み合わせにより定義される任意の粒度のデータを含んでよい。データ、データエレメント、データアイテム、またはそれらへの参照のほんの数例を挙げると、メモリアドレス、データオブジェクト、クラス、動的言語コードの一タイプのフィールド、動的言語コードの一タイプ、変数、オペランド、データ構造、およびメモリアドレスへの間接的参照等がある。しかし、任意のデータグループを、データエレメントまたはデータアイテムと称することができる。動的言語コードのあるタイプのフィールド、動的言語コードのあるタイプ等について上述した例は、動的言語コードのデータ構造のことである。一例としては、Sun Microsystems,Inc.から入手可能なJava(登録商標)等の動的言語コードは、強く型付けされた(strongly typed)言語である。各変数が、コンパイルタイムで知られているタイプを有する。このタイプは、プリミティブタイプ(int、floatといったブールおよび数値)および参照タイプ(クラス、インタフェースおよびアレイ)という2つのカテゴリに分類される。参照タイプの値は、オブジェクトへの参照である。Java(登録商標)ではオブジェクトは、フィールドからなり、クラスのインスタンスまたはアレイであってよい。クラスAのオブジェクトaが与えられると、通常は記述A::xでタイプAのフィールドxを示し、a.xでクラスAのオブジェクトaのフィールドxを示すことができる。例えば、a.x=a.y+a.z.といった表現が可能である。ここでフィールドyおよびフィールドzをロードして追加して、この結果をフィールドxに書き込むことができる。
従ってデータアイテムへのメモリアクセスの監視/バッファリングは、任意のデータレベル粒度で実行することができる。例えば一実施形態では、データへのメモリアクセスは、タイプレベルで監視される。ここでフィールドA::xへのトランザクション書き込みおよびフィールドA::yの非トランザクションロードは、同じデータアイテムへのアクセスとして監視してよい(タイプA)。別の実施形態では、メモリアクセスの監視/バッファリングは、フィールドレベルの粒度で実行される。ここでは、A::xへのトランザクション書き込み、および、A::yの非トランザクションロードは、それぞれ別個のフィールドへの参照であるので、同じデータアイテムへのアクセスとしての監視を行わない。なお、データアイテムへのメモリアクセスのトラックには、他のデータ構造またはプログラミングを考慮に入れていない。一例としては、クラスAのオブジェクトのフィールドxおよびy(A::xおよびA::y)、クラスBのオブジェクトへのポイントを、新たに割り当てられたオブジェクトに対して初期化して、初期化後には書き込みを行わない。一実施形態では、A::xが指し示すオブジェクトのフィールドB::zへのトランザクション書き込みは、A::yが指し示すオブジェクトのフィールドB::zの非トランザクションロードに関して同じデータアイテムへのメモリアクセスとしては監視しない。モニタは、任意のデータ粒度レベルで監視/バッファリングを行うと決定することができることがこれらの例から推定されよう。
一実施形態では、モニタには、監視すると決定されるロードおよび格納をトラックする、読み出しモニタおよび書き込みモニタが含まれてよい。一例としては、ハードウェア読み出しモニタおよび書き込みモニタが、基礎にある格納構造の粒度に関らずデータアイテムの粒度でデータアイテムを監視することができる。一実施形態では、データアイテムは、格納構造の粒度で関連付けられて、少なくとも1つのデータアイテム全体が適切に監視されるようにされているトラックメカニズムにより境界付けされてよい。データアイテムの監視に読み出しモニタ/属性を利用する一例は、代理人整理番号P29130としてGad Sheaffer等を発明者とする同一出願人による「トランザクションメモリ(TM)システムの属性の読み出しおよび書き込み監視」なる名称の出願番号第XX/XXX,XXX号明細書に詳述されており、これをここに提出する。しかし、モニタ、属性、注釈、その他のトラックメカニズムも、任意のデータ粒度およびデータ保持構造を利用するトランザクション実行に関してコンフリクトを検出するために利用可能である。
従来のMESI状態は、監視されていないバッファリングされた状態、書き込み監視されたバッファリングされた状態、読み出し監視されたバッファリングされた状態、その他のバッファリングされた状態等のバッファリングされた状態で増強されたり、および/または、これらと置き換えたりすることもできる。この結果、既存の公知のコヒーレンスおよび通信/スヌーププロトコルは、ハードウェアモニタ/属性と組み合わせて利用することで、コンフリクトを検出することができる。従来のMESIコヒーレンス状態を拡張してバッファリングデータを保持することを後述する。
設計に基づき、キャッシュラインのキャッシュコヒーレンス要求および監視されたコヒーレンス状態の異なる様々な組み合わせによって、データアイテムを保持するキャッシュラインが共有読み出し状態にある、および、スヌープがデータアイテムに対する書き込み要求を示している、等の潜在的なコンフリクトが生じる。逆に、データアイテムを保持するキャッシュラインがバッファリングされた書き込み状態にある、および、外部スヌープが、データアイテムに対する読み出し要求を示す、といった場合には、潜在的なコンフリクトと考えることができる。一実施形態では、アクセス要求および属性状態スヌープロジックのこのような組み合わせを検出することを、コンフリクト検出/報告のためのモニタおよび/またはロジック等のコンフリクト検出/報告ロジックに連結させることができる。
一実施形態では、キャッシュコヒーレンスプロトコルを拡張して、ローカルバッファリングされたデータをサポートするバッファリングされた状態を含んでよい。このようにすることでトランザクション格納を、複雑な外部書き込みバッファリング回路を利用するのではなく、既存のキャッシュ構造を利用してバッファリングされた様式で実行することができる。実装設計の選択肢の1例として、HTMはバッファリングされた置き換え更新(update-in-place)で動作することができる。更新が配置されたHTMでは、トランザクション書き込みを、参照したメモリアドレスに行うことで、保持されている前のデータを修正することができる。しかしこの修正されるデータは、外部の要求スレッドには提供されない(つまり、データはグローバルに可視状態とはされず、ローカルメモリの順序付けのためにローカル読み出しに提供される)。加えて、前のデータの「ログをとる」場合が多く、トランザクションをアボートすると、前のデータが復元されて、トランザクションの実行が始まる前のスレッドの状態にすることができる。
一例を示すと、図1のプロセッサ100のデータキャッシュ150が、キャッシュ110およびシステムメモリ175等の、より高レベルのメモリからのデータを保持する第1のレベルのデータキャッシュを含む。従って、データキャッシュ150へのトランザクション書き込みに遭遇すると、ライトバックキャッシュの一実施形態では、高レベルのキャッシュ110へと、前に修正されたデータアイテムのライトバックが行われる。または、プロセッサ100内または外部の別のメモリで前のデータのログをとることもできる。ここでバッファリングされたラインは失われる場合もあるので、前の修正されたラインを維持しておく。ライトバックが行われると、一実施形態では、高レベルのキャッシュに対してデータアイテムがまだ利用されていることを通知して、より高レベルのメモリがキャッシュ150へスヌープ要求の転送をやめないようにする。前のデータアイテムのログをとった後で、トランザクション書き込みを「バッファリングされた」様式で行って、キャッシュ150のデータアイテムを更新する。この結果、データアイテムを保持している1つのキャッシュラインまたは複数のキャッシュラインがバッファリングされた状態に移動される。
従ってローカルスレッド(ローカルスレッド101a等であって、トランザクション書き込みと関連付けられたもののこと)は、キャッシュ150から、修正されたデータアイテムを読み出すことができる。言い換えると、バッファリングされた、プライベートなアイテムは、ローカルスレッド(つまりローカルスレッド101a)には内部的に可視状態とされて、順序の一貫性を保つことができる。しかし、別のスレッド(例えばスレッド102b)にはバッファリングされたデータが提供されない。バッファリングされた書き込みが、トランザクションがコミットされるまでは他のスレッドに対して外部的に可視状態とならない、ということが重要である。トランザクションがコミットされると、ログがとられたデータが無効化または破棄されて、バッファリングされたデータを修正状態に遷移させる。この遷移によって、データアイテムは他のスレッドに対してグローバルに可視状態となり、データアイテムが修正されたコヒーレンス状態に保持されることによって、データアイテムに対する後続する外部アクセス要求には、HIT修正された(HITM)応答が与えられる。一方で、トランザクションがアボートされた場合には、前のデータが有効なデータとして復元され、バッファリングされたデータが無効化される。
データアイテムを、バッファリングされた状態においてキャッシュ150から追い出す場合には、プライベートに保持されているデータアイテムは潜在的に失われる。データアイテムをより高レベルのメモリにライトバックしないことが重要である。(例えば追い出されたことで失われた、または他のイベントによって)データが破損している場合には、上述したように潜在的なアクセスのコンフリクトの検出と類似した方法で潜在的なコンフリクトがトリガされる場合がある。
一実施形態では、ハードウェアにハンドラをレジスタして、コンフリクトまたは容量によるバッファリングされたデータの損失の効率的な処理をサポートすることができる。例えばレジスタは、トランザクションハンドラのアドレスを登録するために、トランザクションランタイムまたはアプリケーションコード等のソフトウェアにより修正可能であってよい。対象となるイベント(例えば上述した情報の損失)が検出されると、一実施形態では、制御フローをオペレーティングシステム(OS)等の特権を有するソフトウェアの介入なしにレジスタに登録されたトランザクションハンドラにベクタ化する。ハードウェアにハンドラを登録するケースは、代理人整理番号P29129としてGad Sheaffer等を発明者とする「トランザクションメモリイベント処理のためのユーザ−ハンドラのハードウェアへの登録」なる名称の関連出願に詳述されており、これをここに提出する。
図2は、キャッシュメモリに保持されているデータアイテムにコヒーレンス状態を関連付ける一実施形態を示す。プロセッサ250は、トランザクション実行可能な任意の数の処理エレメントを含む任意のタイプの公知のプロセッサを含む。図示されてはいないが、プロセッサ205は、チップセット(つまり、メモリコントローラハブおよび入出力(I/O)コントローラハブ)およびシステムメモリ等の他のシステムコンポーネントに連結されてよい。コンピュータシステムにおけるI/Oデバイスのよく利用される例としては、ネットワークコントローラ、ビデオ表示アダプタ、グラフィックスプロセッサ、オーディオコントローラ、または他の入出力デバイスが挙げられる。
一実施形態では、プロセッサ250がキャッシュメモリを含む。最も関連性の高いキャッシュの例としては、データキャッシュ(例えば図1に示す第1レベルのキャッシュまたは第2レベルのキャッシュ)が含まれる。しかし、キャッシュはさらに、命令キャッシュ、トレースキャッシュ、その他の公知のキャッシュを含む。キャッシュアーキテクチャについては詳述しないことで本記載が不当に曖昧になることを回避するが、キャッシュは複数の方法でオーガナイズすることができる。例えばキャッシュを完全に関連付けることができる(つまり、メモリアドレスを、一定の範囲のメモリアドレスが特定のキャッシュセットに制限されるような一式の関連キャッシュ、または、複数のアドレスをキャッシュ内の単一の位置に保持するような直接マッピングキャッシュ、といったキャッシュのなかの何処かに保持しておくことができる)。ここで記載する方法および装置は、任意のキャッシュオーガニゼーションで実装することができる。
図示されているように、キャッシュは、キャッシュメモリまたはデータアレイと称されることもあるデータの部分205、および、キャッシュメモリ205に関連付けられる制御ロジック230を含む。キャッシュメモリ205は、ライン210、215、220、および225を含む。制御ロジック230は、キャッシュライン210、215、220、および225にそれぞれ関連付けられた/対応しているエントリ211、216、221および226を有するアレイ235を含む。さらにハードウェア読み出しおよび書き込みモニタ211r、211w、216r、216w、221r、221w、226r、および226wも同様に、キャッシュライン210、215、220、および225に関連付けられている。ハードウェアモニタおよびそれらの実施形態は、代理人整理番号P29130としてGad Sheaffer等を発明者とする同一出願人による「トランザクションメモリ(TM)システムの属性の読み出しおよび書き込み監視」なる名称の出願に詳述されており、これをここに提出するが、以下では、バッファリングされた状態をさらに説明するために、読み出しおよび書き込みモニタの実施形態について説明する。
一実施形態では、読み出しモニタおよび書き込みモニタが、データを保持する物理構造の粒度に関らず、データアイテム201等のデータの監視の境界を定める。上述した説明からは、データアイテムは任意の粒度を有することができ、開始アドレスは、このデータアイテムのサイズに整列されていなくてよい。実際、プログラマは、開始アドレスを提供して、その後、データアイテムを構成するさらなる複数のバイトを提供することでデータアイテムを定義することができる。この結果、データアイテムは、キャッシュ205のライン、キャッシュ205のキャッシュラインのサイズより小さく、または、キャッシュ205のキャッシュラインより大きくなる可能性があり、潜在的に、キャッシュ205のキャッシュラインの開始境界線および終了境界線とは配列しない可能性がある。
図2の例においては、データアイテム201は、2つのキャッシュラインにまたがっており、キャッシュライン210の全てと、キャッシュライン215の半分とに相当するデータを含んでいる。P29130には、監視属性の潜在的な動的割り当てが説明されているが、属性211r、211w、216r、216w、221r、221w、226r、および226wはキャッシュラインベースで提供される。従ってデータアイテム201が書き込みを監視される場合には、読み出しモニタ211rおよび216rの両方を、監視されている状態へと更新して、対応するキャッシュライン210および215の読み出しが監視されていることを示す。ライン215はデータアイテム201の一部のみを保持しているが、モニタ216rを更新してライン215のデータアイテム201のその一部を監視するのではなくて、216rを全てのライン215を監視するよう設定する(つまり、データアイテム201の一貫性を保証するべくより多くのデータを含める)。言い換えると、データアイテム201は、図2に示すモニタのキャッシュライン粒度に関らず監視による境界付けが行われる。
一実施形態では、アレイ235は、エントリ211、216、221、および226を含むコヒーレンス状態アレイを含む。示されているように、モニタ211r、211w、216r、216w、221r、221w、226r、および226wは、状態アレイ235の一部であり、基本的にエントリ211、216、221、および226に保持されるコヒーレンス状態の拡張となって、読み出し監視状態、書き込み監視状態、および監視されない状態をそれぞれ含む。状態アレイ235に読み出しモニタおよび書き込みモニタを含める例が示されているが、以下の記載を簡略化する目的から、バッファリングされた状態を含めるコヒーレンス状態の拡張は、読み出し監視状態および書き込み監視状態とは別個に説明する。実際のところ別の例では、読み出しモニタおよび書き込みモニタが状態アレイ235に含まれておらず、各キャッシュライン内で例えば注釈を付けられる、別のアレイで保持される、またはデータアイテムに動的に割り当てられる等の別の方法によりデータと関連付けられている。
従って一実施形態では、エントリ211、216、221、および226を含むアレイ235は、キャッシュライン210、215、220、および225にそれぞれ対応するキャッシュコヒーレンス状態値を保持する。共通のキャッシュコヒーレンス状態には、MESI(Modified Exclusive Shared and Invalid:イリノイ・プロトコル)キャッシュコヒーレンス状態を含む。ここで、バッファリングされた状態をMESI状態に追加することでMESIBプロトコルを形成する。状態を表す任意の公知の値を状態エントリ(例えばエントリ211および216)に保持することができる。例えばビットベクトルを各状態エントリに含め、各ビットがコヒーレンス状態に対応するようにする。別の例では、状態エントリが、コヒーレンス状態を表す符号化された値を保持する。
また別の例では、バッファリングモニタ/属性は、上述した読み出しモニタおよび書き込みモニタと同様の方法で追加することができ、これにより、基本的に新たなバッファリングされたコヒーレンス状態が生じる。さらに一実施形態では、バッファリングは、新たなバッファリングコヒーレンス規則を有する読み出し監視および書き込み監視とは独立してこれに直交していてよい。例えば、バッファリングは書き込み共有を許可しない(つまり、外部書き込みによりバッファリングされたラインが無効化されるが、バッファリングにより読み出し共有は行うことができる、つまり、1つのキャッシュでバッファリングされたラインが、異なるキャッシュの共有ラインと衝突しない)。読み出し共有を許可するこのケースでは、コミットされる前に読み出しが有効となることを保証するために何らかのコヒーレンス動作(例えば、他のキャッシュの全ての共有データコピーを無効化する、等)が必要となる。
トランザクションバッファリングされた格納動作、または、バッファリングについて特定される他の格納動作に遭遇した場合には、バッファリングされた格納処理を実行する。格納処理(例えばトランザクション格納処理)をバッファリングするかを判断することについては、図4を参照して後述する。しかし、格納に加えて、関連ラインのコヒーレンス状態を、バッファリングすると判断した格納についてバッファリングされた状態へと更新する。一実施形態では、データアイテムは、基礎となる格納構造の粒度に関らず、境界付けされた状態でバッファリングされる。
一例として、データエレメント201用のトランザクション格納に遭遇した場合を考える。MESIプロトコルに従って制御ロジック230が、通常の書き込み処理に類似した、所有権を得るための読み出し(read-for-ownership)要求を実行する。所有権が得られている場合には、データエレメント201を書き込み、バッファリングされたコヒーレンス状態と関連付ける。本例では、両方のライン210および215が、データエレメント201の少なくとも一部を保持して、これらラインをバッファリングされたコヒーレンス状態へ遷移させている。キャッシュライン215を特に例にとると、対応する状態エントリ216を、キャッシュライン215を示すように、バッファリングされた状態の値に更新して、保持されているデータアイテム201の部分を、バッファリングされたコヒーレンス状態とする。さらに、このデータアイテム201および/またはライン215を、バッファリングされたコヒーレンス状態に関連付ける。
上述したように、キャッシュライン215に関連付けられた書き込みモニタも、キャッシュラインが書き込みを監視されていることを示すように更新されてよい。一実施形態では、属性216w等のハードウェア書き込み属性は、トランザクション格納処理に呼応して別途適用される。言い換えると、これら更新を、書き込みを監視されバッファリングされている更新(つまり、バッファリングされた様式で更新され、書き込み監視が適用されているアドレス/データ)と呼ぶことができる。多くの場合、外部エージェントが書き込みを監視されたバッファリングされたデータの更新を試みるのと同時に、コンフリクトを検出する。
同様に、キャッシュライン215のトランザクション読み出しに呼応して、ハードウェア読み出しモニタ216rを、キャッシュライン215が読み出しを監視されていることを示すよう設定することができる。ここでも、これら更新のことを読み出し監視されバッファリングされた更新(つまり、読み出し監視が適用されたバッファリング様式で更新されること)と呼ぶことができる。ここではアドレスはローカルに並列に更新され、もしあればコンフリクトの解決を、コミットが試みられるまで(つまり、アドレスのバッファリングが終わり、グローバルな可視状態になるよう試みられるまで)遅らせる。別の実施形態では、本例では定義によってキャッシュラインがバッファリングされた状態にあり、読み出しも書き込みも監視されていることが示唆されているので、明示的な属性(例えば属性216wおよび216r)が設定されていない。
上述した例では監視されバッファリングされている状態について言及したが、バッファリングされ監視されない更新が行われてもよい。例えば、後にコミットされないトランザクションの一時的な、またはローカルの値は、それらの性質上グローバルに観察はされないので、監視せずにバッファリングされた様式で更新することができる。
通常、制御ロジック230は、スヌープロジック、置き換えロジック、状態ロジック、およびその他の、任意の公知のキャッシュ処理を行うためのキャッシュ関連ロジックを含む。例えば、制御ロジックは、バッファリングされたコヒーレンス状態をサポートするプロトコルを含むコヒーレンスプロトコルを実装して、これには、さらに、図3を参照して後述するMESIB状態間の遷移が含まれうる。一実施形態では、制御ロジック230は、個々に、またはプロセッサ250内の他のロジックとの組み合わせにおいて、コンフリクトを検出する。一例では、コンフリクトにはアクセスコンフリクト(例えばバッファリングした状態におけるあるラインへの外部アクセス要求等)を含む。
外部アクセスまたは非ローカルアクセス要求は、バッファリングおよび/または監視するラインを生じたスレッドまたはトランザクションに関連付けられていない処理エレメントに関連付けられたアクセスを含む。例えば図1の処理エレメント101aが、バッファリングされた状態の値に状態エントリ211を更新させたトランザクション格納を含むトランザクションの実行に関連付けられている、と仮定する。この結果、処理エレメント102aからキャッシュライン210へのアクセス要求は、スレッド101aの実行の外部からの観点からの外部アクセスを含む。この結果、この例では、外部アクセス要求が、別の物理プロセッサからのアクセス要求のみならず、同じプロセッサ上で実行されている異なるスレッドからのアクセスをも含みうることが重要な点である。加えて、モニタが共有キャッシュのスレッドベースで複製される場合には、共有キャッシュ内であってもスレッドレベルで外部アクセスを検出することができる。
逆に、外部アクセス要求がキャッシュラインのバッファリングされた、または監視された状態に関連付けられていない処理エレメントからのものではなくて、ローカルまたは内部アクセス要求が、キャッシュラインのバッファリングされた、または監視された状態に関連付けられた処理エレメントからのアクセス要求を含む。本例の説明を続けると、処理エレメント101aと関連付けられたトランザクション内のトランザクション格納により、エントリ211がバッファリングされた値から更新された。次に、処理エレメント101aと関連付けられた同じトランザクションからのロード処理は、ライン210からの読み出しである。このロードは、バッファリングされたデータを読み出すものであり、処理エレメント101aおよびトランザクションの両方からの観点からみると、内部アクセスまたはローカルアクセスとみなされる。
コンフリクトの検出についてのさらなる考察には、外部アクセスタイプおよびハードウェアモニタの状態を比較することが含まれてよい。例えば、トランザクション内のトランザクション格納処理に呼応して、状態エントリ216を、バッファリングされた状態の値に設定して、キャッシュライン215がバッファリングされた状態およびハードウェア属性216wであることを示す場合を仮定する。Wは、キャッシュライン215が書き込み監視されていることを示すように設定される。ライン215への外部アクセス要求が制御ロジック230により受信/検出されると、外部アクセス要求の検出と同時にコンフリクトを検出する。ここでライン215へのバッファリングされた格納は、トランザクションがコミットされるまでグローバルに可視状態にはならず、これにより潜在的なコンフリクト状態が生じ、前に保持されているデータが、今潜在的に更新された、または共有されているグローバルデータと矛盾してしまいうる。言い換えると、キャッシュライン215が書き込みを監視されバッファリングされた状態にあり、この結果、ライン215が外部エージェント/処理エレメントにより並列に更新されなくなる。
これとは対照的に、一実施形態では、読み出しを監視されバッファリングされたラインを、複数のスレッド/処理エレメントにより並列に更新して、もしあればコンフリクトを、制御ロジック230によって、試みられるトランザクションのコミットにおける通常のコヒーレンスプロトコルにより検出する。一例としては、エントリ211が、バッファリングされた状態の値を保持して、そのライン210がバッファリングされたコヒーレンス状態と関連付けられていることを示す。次に、キャッシュライン210と関連付けられた外部アクセス要求を受信する。この例では、コンフリクトがこの時点では検出されていない。そうではなくて、トランザクションは通常処理を続けており、トランザクションがコミットされると、データをグローバルに観察される状態に遷移させる。一例では、後述するが、この遷移には、バッファリングされた状態から修正されたコヒーレンス状態へのライン210のコヒーレンス状態遷移が含まれる。ライン210のバッファリングされた状態から修正されたコヒーレンス状態への遷移には、ここで記載する2段階の遷移が含まれてよい。ただしこのようなタスクを実行する場合には、制御ロジック230は、ライン210をこのように遷移させる意向を示すスヌープメッセージを生成する。この時点では、並列である外部スレッド更新ライン215の別のキャッシュの他の制御ロジックは、そのキャッシュにおけるライン215のコヒーレンス状態遷移に基づきコンフリクトを検出することができる。言い換えると、読み出しを監視されるバッファリングされたラインのコンフリクトは、この例においては、コミット処理の準備として、書き込み監視の入手を試みるときに検知される。
制御ロジック230は、他の制御ロジックまたは報告ロジックとの組み合わせにおいて、または単独で、他のタイプのコンフリクトまたは潜在的なコンフリクトを検出することができる。例えば一実施形態では、制御ロジック230は、バッファリングされたデータまたはハードウェア属性情報の損失時にコンフリクトを検出する。データまたは属性情報の損失は、追い出しまたはその他の損失イベント時に発生する可能性がある。これは、バッファリングされたデータまたは属性情報がローカルであり、潜在的に、追い出されたときにより高レベルのメモリにライトバックされないからである。
制御ロジックも、他のプロトコルを実装して、データのバッファリングをサポートする他の処理を実行することができる。例えば制御ロジックは、バッファリングされたデータが、トランザクションの実行に内在する特性をサポートするようグローバルに観察される状態とされないように(つまり、更新されたデータが、コミットまではグローバルに観察される状態とならないように)することができる。ここで一実施形態では、制御ロジックが、キャッシュラインおよびバッファリングされたコヒーレンス状態と関連付けられたキャッシュラインを参照する外部スヌープ要求に対してミスレスポンスを提供する。
一例としては、ここでもまた、バッファリングされたコヒーレンス状態にあるライン215(つまり状態エントリ216)が、バッファリングされたコヒーレンス状態値を保持すると仮定する。データアイテム201およびキャッシュライン215に関連付けられたアドレスを参照する外部アクセス要求を受信する。制御ロジック230は、ライン215がバッファリングされたコヒーレンス状態に保持されていることに呼応して、要求を発行する外部エージェントに対してミスレスポンスを提供する。通常は、ミスレスポンスには、要求を発行してきたエージェントに対して、データがキャッシュに保持されていない、または無効状態にある旨を通知する応答が含まれる。しかしここで、キャッシュライン215は、データアイテム201用の更新値を保持するが、この更新値はバッファリングされた状態にあり、これにより、関連するトランザクションがコミットされていないことを示す。この結果、外部の要求を発行してきたエージェントに対してデータを転送せず、トランザクションのコミットまで適切なトランザクションの順序を適切に維持し、データをグローバルな非観察状態とする。スヌープ応答は、MISS、または、HITMに類似しているが応答がラインのバッファリングされた状態(修正された状態ではなくて)を通信する新たなタイプの応答(HITバッファリングされた(HITB)応答)であってよい。
一実施形態では、制御ロジック230は、キャッシュライン215を、キャッシュラインがバッファリングされたコヒーレンス状態に保持されている場合キャッシュライン215に関連付けられた外部アクセス要求を受信することに呼応して、バッファリングされたコヒーレンス状態から無効のコヒーレンス状態へと遷移させてよい。上述したように、一実施形態では、バッファリングされたライン215が外部からアクセスされる場合、データが古くなってしまっている場合がある(つまり、外部の要求を発行してきたエージェントが更新している場合がある)。従ってデータの一貫性を保証するために、この例では、ミスレスポンスを提供することに加えて、ライン215が、もしバッファリングされており、読み出しを監視されている場合には、これを無効状態に遷移させる。一例では、状態エントリ216をバッファリングされた状態の値から無効状態の値に更新する。
プロトコル応答の別の例では、制御ロジック230が、内部的/ローカルにバッファリングされたデータがローカルエージェントから可視状態にあることを保証する。一例では、トランザクションを実行する第1のスレッドが、データアイテム201へのトランザクション格納処理および、後続するデータアイテム201の読み出し処理を含む。トランザクション格納処理に呼応して、エントリ211および216を、バッファリングされたコヒーレンス状態に更新して、データアイテム201がバッファリングされた状態に保持されていることを示す。内部で順序の連続を保証するために、後続する内部読み出し要求に呼応して、制御ロジック230は、ローカルな第1のスレッドに対して、修正されたデータアイテム201を提供する。言い換えると、ローカルにバッファリングされたデータをローカル読み出しに提供するが、外部アクセスには提供しない。
一実施形態では、制御ロジック230は、ハードウェアにおけるトランザクションを効率的にコミットする方法をサポートする。一例では、制御ロジック230は、修正された状態へ、トランザクションと関連付けられたバッファリングされたキャッシュラインを遷移させる。重要なことは、修正された状態への遷移が、MESIプロトコルの構成により、キャッシュラインに保持されるデータがプロセッサにより修正されていないこと、つまり、データがグローバルに観察される状態にあることを示すことである。一例としては、ひとたび修正された状態になると、キャッシュラインへの外部アクセス要求にHITM応答が提供される。一例として、トランザクション内のトランザクション格納の実行により、データアイテム201がライン210および215内にバッファリングされた状態で保持される、と仮定する。トランザクションに対する暗黙の終了または明示的な終了(ユーザレベルのコミットの命令の実行等)のいずれかに呼応して、ライン210および215を、バッファリングされたコヒーレンス状態から、修正されたコヒーレンス状態に遷移させる。
一実施形態では、バッファリングされたコヒーレンス状態から修正されたコヒーレンス状態への遷移には2段階の遷移が含まれる。ここで制御ロジック230は、キャッシュライン210および215を、バッファリングされたコヒーレンス状態に対する関連付けから、中間の、バッファリングされ修正されたコヒーレンス状態へと遷移させ(つまり、エントリ211および216を中間の、バッファリングされ修正されたコヒーレンス状態へと更新して)、バッファリングされた状態をクリアして、修正された状態に関連付けられているキャッシュラインを退出させる(つまり、バッファリングされた値を、エントリ211および216の中間の、バッファリングされ修正されたコヒーレンス値からクリアして、エントリ211および216の修正されたコヒーレンス値を退出させる)。
さらなる例としては、MESIB状態が、無効(0000)、共有(0001)、排他的(0010)、修正(0100)、およびバッファリングされている(1000)を表していると仮定する。これらの表現を上述した例に挿入することにより、(1)制御ロジック230がエントリ211よび216をバッファリングされた値1000から、1100の中間の、バッファリングされ修正された値に遷移させ、その後、バッファリングされたビット1000をクリアして、エントリ211および216の修正されたコヒーレンス値0100を退出する。ここで制御ロジック230は、コミットに呼応して2段階の遷移を実行する回路等のロジックを含む。
一実施形態では、制御ロジック230は、さらに、ユーザレベルの命令に呼応してコヒーレンス状態にアクセスすることができる。例えばプロセッサ250のハードウェア(例えばデコーダ)は、バッファリングされたコヒーレンス状態のアクセス、操作、または報告に関するユーザ命令を認識することができる。これら命令の例には、設定命令、クリア命令、またはテスト命令が含まれる。設定命令(例えばSetB.sizeAdress)は、Adressから始まりAdressに終わり、sizeを含むデータを、バッファリングされた状態に遷移させる。一例では、データアイテム201およびデータエレメント201のサイズに関連付けられた開始アドレスを参照する類似した設定命令が、データアイテム201を保持するキャッシュライン210および215をバッファリングされた状態に遷移させる。同様に、テスト命令は、アドレスとサイズとに関連付けられたコヒーレンス状態を報告することができ、クリア命令は、バッファリングされたコヒーレンス状態をアドレスおよびサイズからクリアすることができる(つまり、無効状態に遷移させることができる)。
示されているプロセッサ250は、制御レジスタまたはモデル特定レジスタ(MSR)等の任意の公知のレジスタを含みうるレジスタ250を含んでよい。レジスタ250は一実施形態では、ユーザが修正可能なデータを保持するようユーザによるアクセスが可能であってよい。一例としては、レジスタ250は、格納がバッファリングされるかを判断するために選択値情報を保持する。選択値情報は、選択または非選択値を選択基準とともに含んでよい。格納をバッファリングするかを判断することについては、図4を参照して後述する。
図3は、バッファリングされた状態を含むMESI状態の状態遷移ダイアグラムの一実施形態を示す。上述したように、制御ロジック(図2に示す制御ロジック230等)は、一実施形態では、ハードウェアロジック、ファームウェア、格納、および/または、回路を含み、記載された状態両方を表し、示されているイベントに対して定義されたプロトコル応答に基づいて、示されている遷移を実行する。また、図3に示す遷移ダイアグラムを修正することで、監視状態および非監視状態(例えば、読み出し監視されたバッファリングされた状態、書き込み監視されバッファリングされた状態、非監視のバッファリングされた状態、読み出し監視された共有状態、または、読み出しおよび書き込み属性を状態アレイで保持した実施形態における他の状態)を挿入することができる。バッファリングされた状態を含まない、監視MESIコヒーレンス状態および非監視MESIコヒーレンス状態の例については、代理人整理番号P29130としてGad Sheaffer等を発明者とする「トランザクションメモリ(TM)システムの属性の読み出しおよび書き込み監視」なる名称の出願に詳述されている。
バッファリングされた状態を、MESIプロトコルについてのレガシー遷移の一部(例えば、排他的305へのロックヒットを格納またはロードして、排他的コヒーレンス状態から修正されたコヒーレンス状態へ遷移すること、等)により説明する。説明を曖昧にしないために、バッファリングされた状態への、またはこの状態からの遷移に焦点をあてて説明する。無効状態、共有状態、または排他的状態から開始されて、メモリラインへの遷移格納210は、ラインをバッファリングされた状態へ遷移させる。別の実施形態では、バッファリングについて選択される任意の格納が、トランザクション格納と同等の概念であってよい(つまり、関連するラインをバッファリングされた状態に移動させることができる)。バッファリングする格納部の選択については図4を参照して後述する。同様に、修正されたコヒーレンス状態においては、修正されたラインへのトランザクション格納により、修正されたラインがバッファリングされた状態へ移動させられる。
ひとたびラインがバッファリングされた状態になると、破棄311により、ラインが無効状態に遷移させられる。一例では、破棄311は、バッファリングされた状態のラインに対する外部書き込み要求を受信することに呼応して生じる。外部要求エージェントに対してミスレスポンスを提供して、ラインを、破棄処理に呼応して無効状態に移動させる。別の例としては、破棄311が、第一にバッファリングされた状態にする責任のあったトランザクション格納を含むトランザクションのアボートに呼応して生じる。また、コミット312に呼応して、バッファリングされた状態のラインを修正された状態に遷移させる。上述したように、修正された状態への遷移には2段階遷移が含まれてよい。
図4は、アクセス処理をバッファリングするかを決定する方法を示すフローダイアグラムの一実施形態を示す。図4および図5のフローダイアグラムは、実質的にシリアル形式で示されている。しかし、これら図面に示されている方法はこの形式に限定はされず、任意の順序で行うことができ、さらには少なくとも一部を並列に実行することもできる。
フロー405においては、データエレメントを参照するメモリアクセスをバッファリングするかを判断する。殆どの基本アーキテクチャにおいては、一実施形態でトランザクション格納処理をバッファリングする。トランザクション格納処理をバッファリングするかを決定するためには任意の公知の方法を利用することができる。例えば、トランザクション格納は、プロセッサの復号ロジックにより認識されるオペコードにより特定することもできる。基本的にはユーザがトランザクション格納言語処理を利用する。コンパイルにおいてこの言語を、プロセッサのハードウェアがバッファリングするためのトランザクションの格納として認識するアセンブリコードに変換する。
別の例としては、プロセッサまたは処理エレメントのあるモードを設定して、格納をバッファリングするかを示すことができる。例えばトランザクションが開始されると、モードを更新して、トランザクション実行を示すようにする。ここで、実行する格納は、トランザクションとしてデコーダにより選出されるのではなくて、処理のトランザクションモードに基づいて、格納がバッファリングされる。同様に、ひとたびコミットされると、モードはデフォルトのモードに戻り、そこでは格納をバッファリングしない、または、選択基準に基づいて選択的にバッファリングしない。
一実施形態においては、複数のバッファリングモード(例えばバッファリングしない、非選択的なバッファリング、および選択的バッファリングといったモード)を提供する。一例として、ソフトウェアは、バッファリングモードを設定することができてよい。例えばユーザ命令は、例えば図2のレジスタ250等のレジスタをアドレスして、バッファリングモードを示すことができる。ソフトウェアはバッファリングする格納(例えばトランザクション格納または他の非トランザクション格納)を決定してよい。一例としては、この決定は、コンパイラ等のソフトウェアコードによって、静的に、またはランタイム中に、アプリケーションコードにより、または、トランザクションランタイムコードにより行うことができる。ここでコンパイラは潜在的に、トランザクション格納を、バッファリングする格納として、通常の格納をバッファリングされた格納へと変換するプレフィックスを特定すること等により、特定してもよい。
一実施形態では、ユーザアクセス可能制御レジスタ(図2のレジスタ250等)が、プロセッサが選択モードで動作するときに選択値および潜在的に選択基準を保持する。同様に、レジスタ250は、処理の非選択モードを示す非選択モードを保持する。非選択バッファリングモードにおいては、全てのメモリ更新処理をバッファリングされた形式で実行する。
選択バッファリングモードでは、一実施形態では、任意の方法で定義されてよい特定の基準に基づいてメモリ更新をバッファリングする。選択は2つの方法で実行可能な基準(つまり、肯定的な基準または否定的な基準)に基づいて行うことができる。一例としては、バッファリングの選択を否定的に行うことができる場合(つまり、バッファリングを、処理が一定のアドレス範囲にあるアドレスを参照してない場合には行わない、という意味で否定的選択、または、バッファリングを、一定のアドレス範囲に含まれるものを除く全ての処理について実行する、という意味で否定的選択)のアドレスの範囲を例にとる。基準は、ユーザによりユーザアクセス可能レジスタ(例えばレジスタ250)で、特権を有するレベルのソフトウェアアクセス可能レジスタにより、またはそれらの組み合わせにより特定されてよい。
バッファリングされなくてよいメモリアドレスへのメモリアクセスの選択基準のほんの一例には、ある範囲に含まれる、または、マスクに整合する仮想アドレス、ある範囲に含まれる、またはマスクに整合する物理アドレス、特定のメモリタイプに属するアドレス、入出力(I/O)スペース内のアドレス、別の保護ドメインの処理の代わりのある保護ドメインで実行されるアドレス、特定のオペコードまたはプレフィックス、および特定のデータタイプ(例えば浮動小数点またはベクトル演算)により特定される命令によりアクセスされるアドレスが含まれる。加えて、バッファリングは、特定の認識される命令に呼応して(例えば、ユーザにより特定され、プロセッサ250のハードウェアにより認識されるトランザクション格納処理のみに対して、または特殊なバッファリング命令(例えば図2を参照して上述した設定、テスト、およびクリア命令)に呼応して)実行されてよい。さらに他の処理(例えばローカルスタックへのアクセス)については、一部の実装例では非バッファリングとしてデフォルト化しておくこともできる。
フロー405でバッファリングを適用すると判断すると、バッファリングを利用する(つまり、フロー415で、通常の格納をバッファリングされたコヒーレンス状態に関連付けることによりバッファリングされた格納を実行する)、または、フロー410でバッファリングを行わず、格納を通常に行うこともできる。
図5は、バッファリングされたデータをサポートする方法を示すフローダイアグラムの一実施形態を示す。フロー505で、データアイテムに関連付けられたアドレスを参照するトランザクション格納に遭遇する。プロセッサ内の処理に遭遇することには、プロセッサの任意の段階(フェッチ、復号、実行、リタイヤ、その他の段階)の処理に遭遇することが含まれてよい。
フロー510で、トランザクション格納をバッファリングするかを判断する。格納をバッファリングするかの判断については図3を参照して上述した。しかしここでも、トランザクションの格納をバッファリングするかの判断の数例を提供する。第1の例では、デコーダロジックが、格納がトランザクションのものであると示す格納のオペコードを認識する。別の例としては、プロセッサが、非選択バッファリングモードで動作しており、全ての格納処理がバッファリングされた形式で行われる。また別の例としては、プロセッサが選択処理モードで動作しており、トランザクション格納が、実装に基づいて特定の選択基準に合致している、または合致していない場合である。格納をバッファリングしない場合には、フロー515で通常実行を行う。
格納をバッファリングする場合には、トランザクション格納をバッファリングされた形式で行う。一例としては、格納を1つのキャッシュラインに実行する、または複数のキャッシュラインに実行してよく、関連コヒーレンス状態を、フロー525でバッファリングされた状態に更新して、データアイテムがバッファリングされたコヒーレンス状態に関連付けられていることを示す。上述した例から、1つのラインがデータアイテムの一部のみを含みうることに留意されたい。一部分を更新する場合、境界付けられた監視によって、キャッシュライン全体に対するバッファリングが行われる。一実施形態では、バッファリングされた状態におけるラインの暗示的な指定を用いることで、コンフリクトを検出する。しかし別の実施形態では、フロー525で参照されたデータアイテムと関連付けられたモニタを、データアイテムをバッファリングすることを示すように設定する。
フロー530で、データアイテムに関連付けられたアドレスに対してローカルアクセスを行うかを判断する。上述したように、ローカルアクセスは、バッファリングされた状態へ遷移させた、またはトランザクション格納を含むトランザクションからの遷移を生じさせたトランザクション格納を実行したスレッドからのアクセスを含んでよい。ローカルアクセスを受信すると、フロー535で、ローカル要求エージェントに対してヒットレスポンスを提供する。言い換えると、ローカルエージェントの観点からは、最近修正されたデータを提供して、ローカル実行内で連続した順序を保つ。
フロー540において外部アクセスを検出した場合には、フロー545で外部要求エージェントにミスレスポンスを提供する。基本的に、バッファリングされたデータは、ローカルエージェントには可視状態であるが、外部のグローバルエージェントには可視状態とされないことで、バッファリングしたデータを利用する際の効率的なトランザクション実行を適切にサポートすることができる。さらに一実施形態では、バッファリングされたデータアイテムを、外部アクセス要求に呼応して無効状態に遷移させて、グローバルなデータの一貫性を保証する。
フロー555で、トランザクションをコミットするかを判断する。上述したように、読み出しを監視されバッファリングされたラインは、コミットが試みられる際に(つまり、コヒーレンスプロトコルに基づいて、バッファリングされた状態から修正された状態へ遷移を試みる際に)コンフリクトを検出することができる。従ってトランザクションをアボートする場合には、フロー550で、データアイテムを無効状態に遷移させてデータアイテムを破棄して、外部エージェントが現在無効であるデータアイテムを観察することがないようにする。しかし、トランザクションにコミットする場合には、フロー560で、データアイテムを修正された状態に遷移させる。一実施形態では、バッファリングされた状態から修正された状態への遷移は、2段階の遷移(バッファリングされた状態からバッファリングされ修正された状態への第1の遷移と、バッファリングされ修正された状態から修正された状態への第2の遷移)を含んでよい。
ここで利用される「モジュール」という用語は、任意のハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせのことであってよい。多くの場合、別個のものとして示されたモジュールの境界は、変化し、潜在的に重なることがある。例えば第1のモジュールおよび第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせを共有することができ、潜在的には一部の独立したハードウェア、ソフトウェア、またはファームウェアを維持することができる。一実施形態では、ロジックという用語は、トランジスタ、レジスタ、または、その他のハードウェア(例えばプログラマブルロジックデバイス等)のハードウェアを含む。別の実施形態では、ロジックは、さらに、ハードウェアに集積されたソフトウェアまたはコード(例えばファームウェアまたはマイクロコード)を含むこともできる。
ここで利用する「値」という用語は、数、状態、論理状態、またはバイナリの論理状態等の任意の公知の表現を含んでよい。多くの場合、論理レベル、論理値、またはロジック値といった用語の利用は、1または0で表され、これは単にバイナリ値の論理状態を表している。例えば1は高論理レベルを表し、0は低論理レベルを表す。一実施形態では、格納セル(例えばトランジスタ、フラッシュセル等)は、単一の論理値または複数の論理値を保持することができてよい。しかしコンピュータシステムにおいては値の他の表現も利用されてきた。例えば十進法における10も、バイナリ値の1010として表され、16進法のAで表すことができる。従って値には、コンピュータシステムで保持可能な任意の情報の表現法が含まれてよい。
さらに、状態は、値または値の一部で表されてよい。一例としては、第1の値(例えば論理値1)がデフォルトまたは初期状態を表し、第2の値(例えば論理値0)が非デフォルト状態を表してよい。加えて、リセットおよび設定/セットといった用語は、一実施形態では、デフォルトの値または状態、または、更新された値または状態をそれぞれ表してよい。例えばデフォルト値は潜在的に高論理値(リセット)を含み、更新された値は潜在的に低論理値(設定/セット)を含む。値を任意の組み合わせで利用して、任意の数の状態を表すこともできる。
上述した方法、ハードウェア、ソフトウェア、ファームウェア、またはコードの実施形態は、処理エレメントにより実行可能な機械アクセス可能、または機械可読媒体上に格納される命令またはコードにより実装可能である。機械アクセス可能/可読媒体には、コンピュータまたは電子システム等の機械が読み取ることのできる形態で情報を提供する(格納および/または送信する)任意のメカニズムが含まれてよい。例えば、機械アクセス可能媒体には、ランダムアクセスメモリ(RAM)(静的RAM(SRAM)または動的RAM(DRAM))、ROM、磁気または光学格納媒体、フラッシュメモリデバイス、電気格納デバイス、光学格納デバイス、音声格納デバイス、その他の形態の伝播信号(搬送波、赤外線信号、デジタル信号)の格納デバイス等が含まれてよい。例えば機械は、伝播信号(搬送波等)を搬送波信号に送信される情報を保持することのできる媒体から受信することで格納デバイスにアクセスすることができる。
本明細書における「一実施形態」「1つの実施形態」といった言い回しは、特定の実施形態との関連で示される特定の特徴、構造、または特性が、本発明の少なくとも1つの実施形態に含まれることを示している。従って「一実施形態」「1つの実施形態」といった言い回しは明細書の随所に登場するが、これらは必ずしも同じ実施形態のことを言及しているわけではない。さらに、特定の特徴、構造、または特性は、1以上の実施形態において任意の適切な方法で組み合わせることができる。
前述した明細書では、特定の例示的な実施形態を参照しながら詳しい記載を述べてきた。しかし、添付請求項に述べられた本発明の広義の精神および範囲を逸脱せずに様々な変更例および変形例が可能である。明細書および図面は、制限的ではなく例示的な意味で捉えられるべきである。さらに前述した実施形態その他の例示的な言語の利用は、必ずしも同じ実施形態または同じ例についてのことではなく、異なる、または別個の実施形態のことを言っている場合もあり、同じ実施形態のことを潜在的に示している場合もある。

Claims (31)

  1. データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納処理を実行する実行リソースと、
    前記実行リソースに連結されて、前記実行リソースが前記トランザクション格納処理を実行することに呼応して前記データアイテムをバッファリングされたコヒーレンス状態に保持するキャッシュメモリを有するメモリと
    前記キャッシュメモリに関連付けられた制御ロジックと
    を備え
    前記トランザクションは、アトミックグループとして実行される命令、処理、マイクロオペレーションのうちのいずれかの一群を含み、
    前記キャッシュメモリは、前記データアイテムの少なくとも一部を、前記バッファリングされたコヒーレンス状態に関連付けて保持するキャッシュラインを含み、
    前記制御ロジックは、前記制御ロジックが前記キャッシュラインを参照する外部アクセス要求を受信して、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に関連付けられていることに呼応して、ミスレスポンスを提供し、前記バッファリングされたコヒーレンス状態に保持されている前記キャッシュラインを無効コヒーレンス状態に遷移させる
    装置。
  2. 前記データアイテムの少なくとも一部を前記バッファリングされたコヒーレンス状態に関連付けて保持する前記キャッシュメモリのキャッシュラインは、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に維持されていることを示す、バッファリングされた状態の値を保持する、前記キャッシュラインと関連付けられた状態エントリを含む請求項に記載の装置。
  3. 前記キャッシュラインに関連付けられたハードウェアモニタがさらに、前記実行リソースが前記トランザクション格納処理を実行することに呼応して前記キャッシュラインがバッファリングされたことを示す請求項1または2に記載の装置。
  4. 前記制御ロジックは、前記制御ロジックが外部アクセス要求を受信して、前記ハードウェアモニタが前記キャッシュラインのバッファリングを示すことに呼応して、前記外部アクセス要求時のコンフリクトを検出する請求項に記載の装置。
  5. 前記キャッシュラインに関連付けられたハードウェア読み出しモニタがさらに、前記実行リソースが前記トランザクション内のローカルトランザクション読み出し処理を実行することに呼応して前記キャッシュラインが読み出し監視されていることを示す請求項1から4のいずれか1項に記載の装置。
  6. 前記制御ロジックは、前記制御ロジックが前記キャッシュラインを参照するローカルアクセス要求を受信して、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に関連付けられることに呼応して、ヒットレスポンスを提供する請求項1から5のいずれか1項に記載の装置。
  7. 前記制御ロジックは、前記トランザクションがコミットされたことに呼応して、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させる請求項1から6のいずれか1項に記載の装置。
  8. 前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから前記修正されたコヒーレンス状態への関連付けに直接遷移させることを含む請求項に記載の装置。
  9. 前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから、中間の、バッファリングされ修正されたコヒーレンス状態へ遷移させて、その後で、前記バッファリングされた状態をクリアして、前記修正されたコヒーレンス状態と関連付けられた前記キャッシュラインを退出させることを含む請求項に記載の装置。
  10. 前記制御ロジックは、ユーザレベルの命令に呼応して前記キャッシュラインと関連付けられるよう前記バッファリングされたコヒーレンス状態にアクセスして、
    前記ユーザレベルの命令は、コヒーレンス状態設定命令、コヒーレンス状態クリア命令、およびコヒーレンス状態テスト命令からなる群から選択される請求項1から9のいずれか1項に記載の装置。
  11. データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納処理の実行に呼応して、前記データアイテムを参照してバッファリング用に選択される前記データアイテムの少なくとも一部を、キャッシュラインにおいてバッファリングされたコヒーレンス状態に保持するキャッシュメモリと、
    前記キャッシュメモリに関連付けられて、前記キャッシュラインが前記バッファリングされたコヒーレンス状態に保持されている場合に、前記キャッシュラインと関連付けられている外部アクセス要求を受信することに呼応して、ミスレスポンスを提供し、前記バッファリングされたコヒーレンス状態に保持されている前記キャッシュラインを無効コヒーレンス状態に遷移させる制御ロジックと
    を備えるプロセッサ。
  12. 前記格納処理に関連付けられる第1の処理エレメントと、前記格納処理に関連付けられていない第2の処理エレメントとさらに備え、
    前記キャッシュラインに関連付けられている前記外部アクセス要求は、前記第2の処理エレメントに関連付けられている前記データアイテムにアクセスするアクセス要求を含む請求項11に記載のプロセッサ。
  13. デコーダロジックをさらに備え、
    バッファリング用に選択される前記格納処理は、前記デコーダロジックが、前記格納処理を、バッファリング用に選択されるトランザクション格納処理を含むものとして認識することを含む請求項11または12に記載のプロセッサ。
  14. バッファリングの選択モードを示す選択値と、バッファリングの非選択モードを示す非選択値とを保持するユーザアクセス可能制御レジスタをさらに備える請求項11から13のいずれか1項に記載のプロセッサ。
  15. バッファリング用に選択される前記格納処理は、前記ユーザアクセス可能制御レジスタが、前記選択値と、選択基準に整合する前記格納処理に関連付けられた基準とを保持すること、または、前記ユーザアクセス可能制御レジスタが前記非選択値を保持することを含む請求項14に記載のプロセッサ。
  16. 前記キャッシュラインに関連付けられているコヒーレンス状態エントリをさらに備え、
    前記キャッシュラインが前記バッファリングされたコヒーレンス状態に保持されることは、前記状態エントリがバッファリングされたコヒーレンス値を保持することを含む請求項11から15のいずれか1項に記載のプロセッサ。
  17. キャッシュライン内のデータアイテムの少なくとも一部を、前記データアイテムがトランザクション内でトランザクション的にアクセスされることに呼応して、バッファリングされたコヒーレンス状態に関連付けて保持する前記キャッシュメモリと、
    前記キャッシュメモリに関連付けられて、前記キャッシュラインを、前記トランザクションがコミットされることに呼応して、前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させる前記制御ロジックと
    を備える請求項1から10のいずれか1項に記載の装置。
  18. バッファリングされたコヒーレンス状態に関連付けられるキャッシュラインは、前記キャッシュラインに関連付けられてバッファリングされたコヒーレンス値を保持するコヒーレンスエントリを含む請求項17に記載の装置。
  19. 前記制御ロジックが、前記キャッシュラインを前記バッファリングされたコヒーレンス状態への関連付けから修正されたコヒーレンス状態に遷移させることは、前記バッファリングされたコヒーレンス値を保持することから、修正されたコヒーレンス値を保持するように前記コヒーレンスエントリを更新することを含む請求項18に記載の装置。
  20. 前記バッファリングされたコヒーレンス値を保持することから、修正されたコヒーレンス値を保持するように前記コヒーレンスエントリを更新することは、前記コヒーレンスエントリを、前記バッファリングされたコヒーレンス値を保持することから、バッファリングされ修正された中間コヒーレンス値を保持することへと更新して、その後で、前記バッファリングされたコヒーレンス値を前記バッファリングされ修正された中間コヒーレンス値からクリアして、前記修正されたコヒーレンス値を形成することを含む請求項19に記載の装置。
  21. 前記コヒーレンスエントリは、ビットベクトルを含み、
    前記コヒーレンスエントリを、前記バッファリングされたコヒーレンス値を保持することから、バッファリングされ修正された中間コヒーレンス値を保持することへと更新して、その後で、前記バッファリングされたコヒーレンス値を前記バッファリングされ修正された中間コヒーレンス値からクリアして、前記修正されたコヒーレンス値を退出することは、前記コヒーレンスエントリの修正されたビットを設定することで、前記バッファリングされたコヒーレンス値を保持することから、前記バッファリングされ修正された中間コヒーレンス値を保持することへと前記コヒーレンスエントリを更新して、その後で、前記コヒーレンスエントリのバッファリングされたビットをクリアして、前記修正されたコヒーレンス値についての前記修正されたビットセットを退出することを含む請求項20に記載の装置。
  22. 前記トランザクションのコミットは、ユーザレベルのトランザクションコミット命令が実行されることに呼応して行われる請求項17から21のいずれか1項に記載の装置。
  23. 前記トランザクションのコミットは、トランザクション関連のコンフリクトが検出されない間に、前記トランザクションの終了に達することに呼応して行われる請求項17から22のいずれか1項に記載の装置。
  24. データアイテムに関連付けられているアドレスを参照するトランザクション内において、前記データアイテムの少なくとも一部を、前記データアイテムがトランザクション的に書き込まれることに呼応してバッファリングされた状態に保持するラインを含むメモリと、前記メモリに連結されて、前記バッファリングされた状態の前記ラインに対するローカルアクセス要求に呼応してヒットレスポンスを提供し、前記バッファリングされた状態の前記ラインに対する非ローカルのアクセス要求に呼応してミスレスポンスを提供する制御ロジックとを有するプロセッサと、
    前記プロセッサに連結された入出力(I/O)デバイスと
    を備え
    前記制御ロジックはさらに、前記バッファリングされた状態の前記ラインに対する前記非ローカルのアクセス要求に呼応して、前記ラインを前記バッファリングされた状態から無効状態に遷移させる
    システム。
  25. 前記制御ロジックはさらに、前記ラインに対するコミット処理の実行に呼応して、前記ラインを前記バッファリングされた状態から修正された状態に遷移させる請求項24に記載のシステム。
  26. 前記プロセッサはさらに、前記データアイテムがトランザクション的に書き込まれることに呼応して前記ラインが書き込み監視されていることを示すよう設定されるハードウェア書き込みモニタと、前記データアイテムがトランザクション的に読み出されることに呼応して前記ラインが読み出し監視されていることを示すハードウェア読み出しモニタとを有する請求項24または25に記載のシステム。
  27. データアイテムに関連付けられているアドレスを参照するトランザクション内のトランザクション格納に遭遇する段階と、
    前記トランザクション格納に遭遇することに呼応して、前記データアイテムと関連付けられている前記アドレスに関連付けられているキャッシュメモリ内のキャッシュラインに対して、前記データアイテムの少なくとも一部のバッファリングされた格納を実行し、前記キャッシュラインに対応するコヒーレンス状態エントリを、バッファリングされた状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を前記バッファリングされた状態に関連付ける段階と、
    前記データアイテムが前記バッファリングされた状態に関連付けられることに呼応して、前記データアイテムへのローカルアクセスに対してヒットレスポンスを提供し、前記データアイテムへの外部アクセスに対してミスレスポンスを提供する段階と
    前記データアイテムが前記バッファリングされた状態に関連付けられ、前記データアイテムに対する前記外部アクセスに対してミスレスポンスを提供することに呼応して、前記コヒーレンス状態エントリを無効状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を無効状態に関連付ける段階と
    を備え
    前記トランザクションは、アトミックグループとして実行される命令、処理、マイクロオペレーションのうちのいずれかの一群を含む
    方法。
  28. 前記トランザクション格納が前記アドレスを参照することは、プロセッサのデコーダロジックにより認識可能なオペレーションコード(オペコード)が、前記トランザクション格納をバッファリングされた格納として実行するべきであることを示すことを含む請求項27に記載の方法。
  29. 前記データアイテムの少なくとも前記一部の前記バッファリングされた格納を前記キャッシュラインに対して実行することに呼応して、前記キャッシュラインに関連付けられている書き込みモニタを監視されている状態に更新して前記キャッシュラインが書き込み監視されていることを示す段階をさらに備える請求項27または28に記載の方法。
  30. 前記データアイテムが前記バッファリングされた状態に関連付けられ、前記データアイテムに関するコミットを実行することに呼応して、前記コヒーレンス状態エントリを修正された状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を修正された状態に関連付ける段階をさらに備える請求項27から29のいずれか1項に記載の方法。
  31. 前記コヒーレンス状態エントリを修正された状態の値に更新して、前記キャッシュラインに保持されている前記データアイテムの少なくとも前記一部を修正された状態に関連付ける段階は、
    前記コヒーレンス状態エントリを修正されたバッファリングされた状態の値に更新して、その後で、前記バッファリングされた状態の値を前記修正されバッファリングされた状態の値からクリアして、前記修正された状態の値を退出させる段階を有する請求項30に記載の方法。
JP2011542350A 2008-12-30 2009-12-15 ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張 Expired - Fee Related JP5442765B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/346,543 2008-12-30
US12/346,543 US8799582B2 (en) 2008-12-30 2008-12-30 Extending cache coherency protocols to support locally buffered data
PCT/US2009/068121 WO2010077885A2 (en) 2008-12-30 2009-12-15 Extending cache coherency protocols to support locally buffered data

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2013261057A Division JP5860450B2 (ja) 2008-12-30 2013-12-18 ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張

Publications (2)

Publication Number Publication Date
JP2012512493A JP2012512493A (ja) 2012-05-31
JP5442765B2 true JP5442765B2 (ja) 2014-03-12

Family

ID=42286304

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2011542350A Expired - Fee Related JP5442765B2 (ja) 2008-12-30 2009-12-15 ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張
JP2013261057A Expired - Fee Related JP5860450B2 (ja) 2008-12-30 2013-12-18 ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2013261057A Expired - Fee Related JP5860450B2 (ja) 2008-12-30 2013-12-18 ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張

Country Status (5)

Country Link
US (1) US8799582B2 (ja)
JP (2) JP5442765B2 (ja)
CN (1) CN101770397B (ja)
TW (1) TWI434214B (ja)
WO (1) WO2010077885A2 (ja)

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8799582B2 (en) * 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
US9785462B2 (en) 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
US20100332768A1 (en) * 2009-06-26 2010-12-30 Microsoft Corporation Flexible read- and write-monitored and buffered memory blocks
US8812796B2 (en) 2009-06-26 2014-08-19 Microsoft Corporation Private memory regions and coherence optimizations
US9092253B2 (en) * 2009-12-15 2015-07-28 Microsoft Technology Licensing, Llc Instrumentation of hardware assisted transactional memory system
US8402218B2 (en) 2009-12-15 2013-03-19 Microsoft Corporation Efficient garbage collection and exception handling in a hardware accelerated transactional memory system
US9798548B2 (en) 2011-12-21 2017-10-24 Nvidia Corporation Methods and apparatus for scheduling instructions using pre-decode data
CN107220029B (zh) 2011-12-23 2020-10-27 英特尔公司 掩码置换指令的装置和方法
US9946540B2 (en) * 2011-12-23 2018-04-17 Intel Corporation Apparatus and method of improved permute instructions with multiple granularities
CN111831335A (zh) 2011-12-23 2020-10-27 英特尔公司 经改进的插入指令的装置和方法
US20130268735A1 (en) * 2011-12-29 2013-10-10 Enric Gibert Codina Support for speculative ownership without data
CN104137060B (zh) * 2011-12-30 2018-03-06 英特尔公司 高速缓存协处理单元
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US9262320B2 (en) * 2012-06-15 2016-02-16 International Business Machines Corporation Tracking transactional execution footprint
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US9442737B2 (en) 2012-06-15 2016-09-13 International Business Machines Corporation Restricting processing within a processor to facilitate transaction completion
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US9298631B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Managing transactional and non-transactional store observability
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9015419B2 (en) 2012-06-15 2015-04-21 International Business Machines Corporation Avoiding aborts due to associativity conflicts in a transactional environment
US9223687B2 (en) 2012-06-15 2015-12-29 International Business Machines Corporation Determining the logical address of a transaction abort
US9772854B2 (en) 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US9367323B2 (en) 2012-06-15 2016-06-14 International Business Machines Corporation Processor assist facility
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US8966324B2 (en) 2012-06-15 2015-02-24 International Business Machines Corporation Transactional execution branch indications
US8880959B2 (en) 2012-06-15 2014-11-04 International Business Machines Corporation Transaction diagnostic block
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US9317460B2 (en) 2012-06-15 2016-04-19 International Business Machines Corporation Program event recording within a transactional environment
US9298469B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Management of multiple nested transactions
WO2014004222A1 (en) * 2012-06-29 2014-01-03 Intel Corporation Instruction and logic to test transactional execution status
US9418035B2 (en) * 2012-10-22 2016-08-16 Intel Corporation High performance interconnect physical layer
CN102904779B (zh) * 2012-10-26 2015-07-22 广东电网公司电力科学研究院 通信协议一致性检测方法与系统
US9251073B2 (en) 2012-12-31 2016-02-02 Intel Corporation Update mask for handling interaction between fills and updates
US9292444B2 (en) 2013-09-26 2016-03-22 International Business Machines Corporation Multi-granular cache management in multi-processor computing environments
US9329890B2 (en) 2013-09-26 2016-05-03 Globalfoundries Inc. Managing high-coherence-miss cache lines in multi-processor computing environments
US9298626B2 (en) 2013-09-26 2016-03-29 Globalfoundries Inc. Managing high-conflict cache lines in transactional memory computing environments
US9086974B2 (en) * 2013-09-26 2015-07-21 International Business Machines Corporation Centralized management of high-contention cache lines in multi-processor computing environments
US9298623B2 (en) 2013-09-26 2016-03-29 Globalfoundries Inc. Identifying high-conflict cache lines in transactional memory computing environments
CN104951240B (zh) * 2014-03-26 2018-08-24 阿里巴巴集团控股有限公司 一种数据处理方法及处理器
US9740614B2 (en) * 2014-06-27 2017-08-22 International Business Machines Corporation Processor directly storing address range of co-processor memory accesses in a transactional memory where co-processor supplements functions of the processor
US9891916B2 (en) 2014-10-20 2018-02-13 Via Technologies, Inc. Dynamically updating hardware prefetch trait to exclusive or shared in multi-memory access agent system
CN104407989B (zh) * 2014-11-25 2019-02-12 上海兆芯集成电路有限公司 具有统一标签和片化数据的高速缓冲存储器
CN104579837A (zh) * 2015-01-05 2015-04-29 北京邮电大学 一种OpenFlow协议一致性测试的方法和系统
GB2539641B (en) * 2015-06-11 2019-04-03 Advanced Risc Mach Ltd Coherency between a data processing device and interconnect
US10176096B2 (en) * 2016-02-22 2019-01-08 Qualcomm Incorporated Providing scalable dynamic random access memory (DRAM) cache management using DRAM cache indicator caches
US10901940B2 (en) 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
US10275250B2 (en) * 2017-03-06 2019-04-30 Arm Limited Defer buffer
US10482015B2 (en) * 2017-05-18 2019-11-19 International Business Machines Corporation Ownership tracking updates across multiple simultaneous operations
US10866890B2 (en) * 2018-11-07 2020-12-15 Arm Limited Method and apparatus for implementing lock-free data structures
TWI737189B (zh) * 2019-02-23 2021-08-21 國立清華大學 易於從固態儲存裝置之故障中還原的方法、電腦系統,及固態儲存裝置
US11720495B2 (en) * 2019-05-24 2023-08-08 Texas Instmments Incorporated Multi-level cache security
US10896135B1 (en) * 2019-09-03 2021-01-19 Microsoft Technology Licensing, Llc Facilitating page table entry (PTE) maintenance in processor-based devices
CN111813839B (zh) * 2020-05-20 2023-09-22 北京元心科技有限公司 多终端任务结果展示冲突的处理方法、系统及相应设备
US11461040B2 (en) * 2020-09-24 2022-10-04 Atlassian Pty Ltd. Asynchronous write request management
US12056374B2 (en) * 2021-02-03 2024-08-06 Alibaba Group Holding Limited Dynamic memory coherency biasing techniques
US11550716B2 (en) 2021-04-05 2023-01-10 Apple Inc. I/O agent
US11934313B2 (en) 2021-08-23 2024-03-19 Apple Inc. Scalable system on a chip
US12293090B2 (en) 2022-07-14 2025-05-06 Samsung Electronics Co., Ltd. Systems and methods for managing bias mode switching

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272602B1 (en) * 1999-03-08 2001-08-07 Sun Microsystems, Inc. Multiprocessing system employing pending tags to maintain cache coherence
US6356983B1 (en) * 2000-07-25 2002-03-12 Src Computers, Inc. System and method providing cache coherency and atomic memory operations in a multiprocessor computer architecture
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US7587615B2 (en) 2003-09-12 2009-09-08 International Business Machines Corporation Utilizing hardware transactional approach to execute code after initially utilizing software locking by employing pseudo-transactions
US20050086446A1 (en) 2003-10-04 2005-04-21 Mckenney Paul E. Utilizing software locking approach to execute code upon failure of hardware transactional approach
US20050091459A1 (en) 2003-10-23 2005-04-28 Nhon Quach Flexible mechanism for enforcing coherency among caching structures
US7237131B2 (en) * 2003-12-30 2007-06-26 Intel Corporation Transaction-based power management in a computer system
US7395374B2 (en) 2004-01-20 2008-07-01 Hewlett-Packard Company, L.P. System and method for conflict responses in a cache coherency protocol with ordering point migration
US7177987B2 (en) 2004-01-20 2007-02-13 Hewlett-Packard Development Company, L.P. System and method for responses between different cache coherency protocols
US7395382B1 (en) 2004-08-10 2008-07-01 Sun Microsystems, Inc. Hybrid software/hardware transactional memory
US8180967B2 (en) 2006-03-30 2012-05-15 Intel Corporation Transactional memory virtualization
US20080005504A1 (en) * 2006-06-30 2008-01-03 Jesse Barnes Global overflow method for virtualized transactional memory
US8924653B2 (en) * 2006-10-31 2014-12-30 Hewlett-Packard Development Company, L.P. Transactional cache memory system
US7937535B2 (en) 2007-02-22 2011-05-03 Arm Limited Managing cache coherency in a data processing apparatus
US8095741B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory computing system with support for chained transactions
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
US8078807B2 (en) * 2007-12-27 2011-12-13 Intel Corporation Accelerating software lookups by using buffered or ephemeral stores
US20100122073A1 (en) * 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
US8555016B2 (en) * 2008-12-17 2013-10-08 Intel Corporation Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system
US9785462B2 (en) 2008-12-30 2017-10-10 Intel Corporation Registering a user-handler in hardware for transactional memory event handling
US8799582B2 (en) * 2008-12-30 2014-08-05 Intel Corporation Extending cache coherency protocols to support locally buffered data
US8095824B2 (en) * 2009-12-15 2012-01-10 Intel Corporation Performing mode switching in an unbounded transactional memory (UTM) system

Also Published As

Publication number Publication date
TW201101178A (en) 2011-01-01
CN101770397A (zh) 2010-07-07
JP5860450B2 (ja) 2016-02-16
US8799582B2 (en) 2014-08-05
WO2010077885A3 (en) 2010-10-07
US20100169581A1 (en) 2010-07-01
JP2012512493A (ja) 2012-05-31
TWI434214B (zh) 2014-04-11
JP2014089733A (ja) 2014-05-15
CN101770397B (zh) 2017-07-11
WO2010077885A2 (en) 2010-07-08

Similar Documents

Publication Publication Date Title
JP5442765B2 (ja) ローカルにバッファリングされたデータをサポートするためのキャッシュコヒーレンスプロトコルの拡張
JP6342970B2 (ja) トランザクショナルメモリ(tm)システムにおける読み出し及び書き込み監視属性
JP5944417B2 (ja) トランザクショナル・メモリ・イベントの処理のためのハードウェアにおけるユーザハンドラの登録
US8769212B2 (en) Memory model for hardware attributes within a transactional memory system
JP5608738B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化
JP5451776B2 (ja) ハードウェアフィールドにロッシーなメタデータを保持するためのメタフィジカルアドレス空間
US20090172305A1 (en) Efficient non-transactional write barriers for strong atomicity
US20120179875A1 (en) Using ephemeral stores for fine-grained conflict detection in a hardware accelerated stm
JP6023765B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化
JP6318440B2 (ja) 無制限トランザクショナルメモリ(utm)システムの最適化

Legal Events

Date Code Title Description
A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130910

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130918

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131011

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131218

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees