JP2019530120A - ロックアドレス競合予測器 - Google Patents

ロックアドレス競合予測器 Download PDF

Info

Publication number
JP2019530120A
JP2019530120A JP2019536456A JP2019536456A JP2019530120A JP 2019530120 A JP2019530120 A JP 2019530120A JP 2019536456 A JP2019536456 A JP 2019536456A JP 2019536456 A JP2019536456 A JP 2019536456A JP 2019530120 A JP2019530120 A JP 2019530120A
Authority
JP
Japan
Prior art keywords
lock
memory
speculative
memory entry
contention
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.)
Pending
Application number
JP2019536456A
Other languages
English (en)
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2019530120A publication Critical patent/JP2019530120A/ja
Priority to JP2022161419A priority Critical patent/JP2022191340A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • 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
    • 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0637Permissions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • 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]
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6042Allocation of cache space to multiple users or processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)

Abstract

ロックアドレス予測及び/又は時間的ロック予測に基づいてロック命令を投機的又は非投機的に選択的に実行する技術は、メモリデバイス内のエントリをロックする方法及びデバイスを含む。いくつかの技術では、メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令が検出される。ロック命令が投機的ロック命令を含むことを条件に、以前の投機的ロック中に特定のメモリエントリについて競合が発生したかどうかが検出される。以前の投機的ロック中に特定のメモリエントリについて競合が発生した場合、ロックが非投機的に実行される。以前の投機的ロック中に特定のメモリエントリについて競合が発生しなかった場合、ロックが投機的に実行される。【選択図】図4

Description

(関連出願の相互参照)
本願は、2016年9月22日に出願された米国特許出願第15/273,304号の利益を主張し、その内容は、完全に記載されているかのように、言及したことによって本明細書に組み込まれる。
共有メモリコンピューティングアーキテクチャでは、複数のスレッドが、例えばキャッシュメモリ又は他のレベルのメモリ階層等の同じメモリにアクセスするのを可能にする。例えば、単一のプロセッサ又はプロセッサコアは、複数のスレッド又はプロセスを実行することができ、各スレッド又はプロセスは、スレッド及び/又はプロセスによって共有される例えばキャッシュ等の共有メモリにアクセスすることができる。同様に、複数のプロセッサ又はマルチプロセッサのコアは、複数のスレッド又はプロセスを実行することができ、各スレッド及び/又はプロセスは、プロセッサ又はコア並びにスレッド及び/又はプロセスによって共有される例えばキャッシュ等のメモリにアクセスすることができる。
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができるであろう。
1つ以上の開示された実施形態を実施することができる例示的なデバイスのブロック図である。 図1のデバイスと共に使用可能であり、これを用いて1つ以上の開示された実施形態を実施することができる例示的なマルチコアプロセッサを示すブロック図である。 投機的ロックを実行する例示的な方法を示すフローチャートである。 ロックアドレス競合予測を使用して投機的ロックを実行する例示的な方法を示すフローチャートである。 例示的なロックアドレス競合予測書き込み要求監視回路の機能を示すブロック図である。 例示的なロックアドレス競合予測メカニズムを示すブロック図である。 時間的ロック競合予測を使用して投機的ロックを実行する例示的な方法を示すフローチャートである。 時間的ロック競合予測を使用して投機的ロックを実行する例示的な方法を示すフローチャートである。
いくつかの実施形態は、メモリデバイス内のエントリをロックする方法を提供する。メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令が検出される。以前の投機的ロックの間に特定のメモリエントリについて競合が発生したかどうかは、ロック命令が投機的ロック命令を含むことを条件に検出される。以前の投機的ロックの間に特定のメモリエントリについて競合が発生した場合、ロックが非投機的に実行される。以前の投機的ロックの間に特定のメモリエントリについて競合が発生しなかった場合、ロックが投機的に実行される。
いくつかの実施形態は、メモリデバイス内のエントリをロックする方法を提供する。メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令が検出される。特定の期間中に競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかは、ロック命令が投機的ロック命令を含むことを条件に検出される。この数が閾値を超えると、ロックが非投機的に実行される。この数が閾値を超えない場合、ロックが投機的に実行される。
いくつかの実施形態は、投機的ロック用に構成された処理デバイスを提供する。このデバイスは、実行パイプラインを有するプロセッサコアと、メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されたロック命令検出回路と、ロック命令が投機的ロック命令を含むことを条件に、以前の投機的ロックの間に特定のメモリエントリについて競合が発生したかどうかを検出するように構成された競合検出回路と、以前の投機的ロックの間に特定のメモリエントリについて競合が発生した場合に、ロックを非投機的に実行するように構成されたロック回路と、以前の投機的ロックの間に特定のメモリエントリについて競合が発生しなかった場合に、ロックを投機的に実行するようにさらに構成されたロック回路と、を含む。
いくつかの実施形態は、投機的ロック用に構成された処理デバイスを提供する。このデバイスは、実行パイプラインを有するプロセッサコアと、メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されたロック命令検出回路と、ロック命令が投機的ロック命令を含むことを条件に、特定の期間中に競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出するように構成された競合検出回路と、この数が閾値を超えた場合に、ロックを非投機的に実行するように構成されたロック回路と、この数が閾値を超えない場合に、ロックを投機的に実行するようにさらに構成されたロック回路と、を含む。
図1は、1つ以上の開示された実施形態を実施することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス100は、プロセッサ102と、メモリ104と、ストレージ106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。また、デバイス100は、入力ドライバ112及び出力ドライバ114をオプションで含むことができる。デバイス100は、図1に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
プロセッサ102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサを含むことができ、各プロセッサコアはCPU又はGPUとすることができる。メモリ104は、プロセッサ102と同じダイ上に配置されてもよいし、プロセッサ102とは別に配置されてもよい。メモリ104は、例えば、ランダムアクセスメモリ(RAM)、ダイナミックRAM若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
ストレージ106は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含むことができる。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含むことができる。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、1つ以上のライト、アンテナ又はネットワーク接続(例えば、無線IEEE802信号を送信及び/若しくは受信するための無線ローカルエリアネットワークカード)を含むことができる。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションのコンポーネントであり、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合であっても同様に動作することに留意されたい。
図2は、2つの処理コア210,220を含む例示的なマルチコアプロセッサ200を示す概略図である。プロセッサ200は、例えばプロセッサ102として、デバイス100と共に使用することができる。コア210,220は、CPUコア、GPUコア、又は、1つずつのCPUコア及びGPUコア等のように、任意の適切なコンピューティングコアとすることができる。コア210,220は、キャッシュメモリ230へのアクセスを共有する。コア210,220の各々は、キャッシュ230内の同じキャッシュエントリ240の少なくともいくつかにアクセスすることの可能なスレッドを実行することができる。いくつかの実装形態では、コア210,220の何れか又は両方は、キャッシュメモリ230内の同じキャッシュエントリ240の少なくともいくつかにアクセスする複数のスレッドを実行することができる。本明細書で説明する例は、キャッシュメモリに関するものであるが、本明細書で説明する原理は、図1に関して示し及び説明した別のキャッシュ層(図示省略)又はメモリ104等の任意の適切なメモリ又はメモリ階層の一部に適用可能である。プロセッサ200は例示的なものであり、本明細書で説明する原理は、単一のコアプロセッサ又は3つ以上のコアを有するプロセッサにも適用可能である。
共有メモリアーキテクチャで発生する可能性がある1つの問題は、アトミックアクセスに関連する。例えば、第1スレッドが共有メモリ内の特定のメモリ位置(例えば、図2のキャッシュエントリ250)内のデータに関して動作している場合(例えば、当該データの読み書きを行っている場合)であって、第2スレッドが同じメモリ位置で同時に動作する場合に、データが破損する可能性がある。
この問題は、ロックを使用して解決することができる。ロックは、ロックが解除されるまで、1つのスレッドのみが特定のメモリ位置にアクセスするのを可能にする相互排除(mutex)メカニズムである。ロックを取得したスレッドは、通常、ロックを解除するまで、ロックされたメモリ位置へのアトミックアクセスが保証されている。
スレッドは、例えばストア命令等のようにメモリ位置に記憶されたデータに影響を及ぼす他の命令を実行する前にロック命令を実行することによって、特定のメモリ位置に対するロックを取得することができる。ここでの例示目的のために、ロックは、スレッドによって実行されたロック命令によって取得され、スレッドによって実行された命令によって解除される。しかしながら、いくつかの実施形態では、スレッドによって実行された命令へのプレフィックスによって、特定のタイプ若しくはバージョンの命令によって、又は、他の適切な方法で、ロックを取得及び/又は解除することができる。これらの何れも、これらが個別のロック命令を含むかどうか、又は、ロック命令が、例えば、フラグ、ビット若しくはプレフィックスとして別の命令若しくは動作と組み合わされるかどうかに関わらず、ロック命令と呼ばれ得る。概して、特定のメモリ位置がスレッド又はプロセスによってロックされている場合には、当該メモリ位置にアクセスしようとする異なるスレッド又はプロセスは、当該メモリ位置にアクセスすることを許可されず、通常、否定応答(NAK)信号又は他の適切な信号を受信する。しかしながら、本明細書で説明する様々な技術及びデバイスは、ロックの特定の実施形態に限定されない。
ロックは、ロックを保持するスレッド又はプロセスを遅延させる可能性があり、処理時間の観点でコストがかかる可能性がある。プロセッサキャッシュ内のメモリ位置をロックすることによってアトミック性を保証するロック命令は、当該キャッシュ内のラインをロックする前に、スレッド内の全ての古い命令が完了するのを待機するロック命令を必要とする。古い命令が完了するのをロック命令が待機する間、プロセッサ内のバッファをバックアップすることが可能になり(すなわち、フルになるかフルに近づく)、プロセッサをストールさせる。
これらの考えられる不利益を軽減又は回避する1つの方法は、アトミック性やフェンシング性等のロックの1つ以上の特性を緩和することである。例えば、アトミックアクセスを強制又は厳密に強制しないことによって、ロックを緩和することができる。このような場合、第2スレッドは、第1スレッドによってロックされたメモリ位置にアクセスすることが許可される。しかしながら、緩和されたアトミックアクセスが機能するためには、ロックが第1スレッドによって保持されている間に、第2スレッドがメモリ位置にアクセスしなかったこと、又は、ロックの間に、第2スレッドによるアクセスが第1スレッドの実行に悪影響を及ぼさなかったこと(例えば、緩和されたロックの下で第2スレッドによって行われた計算が、厳密なロックの下で行われた場合と同じ結果を生じさせる)の何れかが確立される必要がある。ロック特性を緩和すると、ロックされたメモリ位置に有効なデータが生成されるかどうかが必ずしも事前にわかっているわけではないので、緩和されたロックを保持するスレッドは、投機的に実行されている、又は、投機的ロックの下で実行されていると言える。
アトミック性が緩和された投機的ロックの単純な例では、第2スレッドは、データを変更しない、ロックされたメモリ位置への読み出しアクセスのみが許可される。この場合、ロックは、読み出しに関して緩和され、第1スレッドがロックを解除するのを待機する代わりに、第2スレッドがかかる読み出しを実行できるようになる。
アトミック性が緩和された投機的ロックのより複雑な例では、第2スレッドは、ロックされたメモリ位置に書き込むこと、又は、ロックされたメモリ位置を変更することが許可される。これは、例えば、ロックが第1スレッドによって保持されている間に、第2スレッドがロックされたメモリ位置に実際にアクセスしない場合において、第1スレッドの実行に悪影響を及ぼさない。しかしながら、このタイプの投機的ロックは、第2スレッドによって変更される前にロックされたメモリから第1スレッドが読み出し、第2スレッドによって変更された後にロックされたメモリに第1スレッドが書き込む場合に、第1スレッドの実行に悪影響を及ぼすことがある。
別の例では、フェンシング性を厳密に適用しないことによって、ロックを緩和することができる。このような場合、第1スレッドは、特定のメモリ位置に対してロックを保持しながら順不同で実行することが許可される。これは、状況によっては、フェンシング性の違反につながる可能性がある。例えば、ロック命令よりも「若い」(すなわち、遅い)第1スレッドからの読み出し命令が、投機的ロックが完了する前に実行される場合に、当該読み出し命令が、古いデータを読み出すことがある。これは、投機的ロックが完了する前に、第2スレッドからの書き込み命令が、読み出し命令のメモリ位置に書き込む場合に発生することがある。ロックされた位置のデータの有効性は、緩和されたロック特性によって危険に晒される可能性があるので、読み出し命令のデータの有効性を検査する必要がある。
データが有効であるかどうかを判別するための1つの考えられる検査は、投機的ロックが第1スレッドによって保持されている間に、第2スレッドがロックされた位置にアクセスしたか否かを判別することである。他のスレッドによる読み出しは、ロック特性に違反しない。しかしながら、他のスレッドによって書き込まれる投機的ロックの露出のウィンドウが存在する。このウィンドウは、投機的ロックがそのメモリ位置を読み出す場合に開始し、投機的ロックが完了する場合に終了する。スレッドが投機的ロックの露出のウィンドウにある間、スレッドは、他のスレッドによる書き込みを監視する必要があり、これにより、投機的ロックのロック特性の違反を引き起こす。投機的ロックされたメモリ位置、及び、投機的ロックされたメモリ位置が書き込まれる前に完了した投機的ロックよりも若い全ての読み出しを、検査又は監視することができる。ロックされた位置に他のスレッドが書き込んでいない場合、データが有効であると推定することができる。
ロックされた位置に記憶されたデータが有効であると判別した場合、実行を通常通り継続することができ、厳密なロックに関連する時間的なペナルティを回避することができる。しかしながら、ロックされた位置に記憶されたデータが無効であると判別した(又は、推定した)場合、実行パイプライン(例えば、スレッドを実行するコア及び/又はプロセッサ)をフラッシュする必要があり、投機的ロックを保持したスレッドは、有効な結果が得られるように再実行する必要がある。よって、投機的ロックのロック特性の違反によって、プロセッサキャッシュ内のロックされた位置に記憶された(又は、ロックが解除された後の)データが無効であると判別した例では、実行パイプラインがフラッシュされ、無効なデータをもたらす緩和状況を回避するために、第1スレッドが、厳密なロックを使用して(すなわち、非投機的ロックを使用して)再実行される。非投機的ロックの下でスレッドを再実行した後、ロックされた位置内のデータは、別のスレッドによって上書きされていないと推定することができる。
図3は、投機的ロックを実行する例示的な方法300を示すフローチャートである。第1スレッドがロック命令を実行することを条件に(310)、ステップ320において、スレッドは、特定のメモリ位置で投機的ロックを実行する。ステップ320における投機的ロックの実行の間に、メモリ位置のデータは、上述したように有効性について検査される。ロック特性に違反していないことを条件に(340)、条件330において投機的ロックが完了していない限り、ロックが投機的に実行され続ける。条件340においてロック特性に違反していることを判別した場合、ステップ350において、実行パイプラインがフラッシュされ、ステップ360において、スレッドが再開し、ステップ370において、ロックが完了するために非投機的に実行される。
しかしながら、実行パイプラインをフラッシュしてスレッドを再実行すると、関連する時間的なペナルティが発生する。これは、ロック特性を緩和することによって実現される時間的な利得を相殺する可能性がある。よって、ロック特性を緩和すると、特定の状況において利益が減少する可能性がある。言い換えると、特定の状況下では、失敗した投機的ロックによって実行パイプラインをフラッシュしスレッドを再実行することは、最初の時点で非投機的ロックを単に実行するよりも時間(及び、回路面積)の観点でよりコストがかかる可能性がある。したがって、関連する時間的なペナルティを回避するために、緩和されたロック特性が、メモリをフラッシュし、実行を再開することをもたらす可能性のある状況を予測することが望ましい場合がある。
緩和されたロック特性が、無効なデータをもたらす可能性のある状況を予測する1つのアプローチは、ロックアドレス競合を追跡することである。このような予測は、特定のアドレスに対する投機的ロックが過去にフラッシュ及び再開をもたらした場合、又は、他のスレッドが、当該アドレスが過去にロックされていた間に、当該アドレスにアクセスしようとしていた(すなわち、当該アドレスについて競合していた)場合に、当該アドレスに対する投機的ロックがフラッシュ及び再開をもたらす可能性がある(又は、一定の確率で生じる)という考えに基づいている。このような予測は、ロックアドレス競合予測と呼ぶことができる。例えば、特定のメモリアドレスに対する投機的ロックによってフラッシュ及び再開が発生した場合、この発生を追跡することができる。その結果、このメモリアドレスに対する将来のロックは、非投機的に実行させられる可能性がある。このストラテジーを変更することが可能である。
1つの例では、ロックアドレス競合予測器(LACP)は、フラッシュ及び再開を引き起こした投機的ロックによってアクセスされたプロセッサキャッシュラインを追跡する。
図4は、ロックアドレス競合予測を使用して投機的ロックを実行する例示的な方法400を示すフローチャートである。LACP回路は、第1スレッドがロック命令を実行することを条件に(405)、過去に、投機的ロックの後にターゲットアドレスにおいてロック特性に違反したかどうか、及び、ロックされたアドレスがプロセッサのローカルキャッシュに存在しないかどうかを検査する。過去にロック特性に違反しており、ロックされたアドレスがプロセッサのローカルキャッシュに存在しことを条件に(410)、ステップ415において、ロックが非投機的に実行される。そうでない場合、ステップ420において、ロックが投機的に実行される。
ステップ420での投機的実行の間に、LACP回路は、ロックされたアドレスについてロック特性に違反したかどうかを検査する。いくつかの実施形態では、投機的実行の間に別のスレッドがメモリ位置にアクセスした場合、ロック特性に違反したと推定される。ロック特性に違反してないことを条件に(425)、条件427において投機的ロックが完了していない限り、ロックが投機的に実行され続ける。
ロック特性に違反したことを条件に(425)、ステップ430において、LACPが更新される。LACPを更新することは、ロックされたアドレスをLACPに追加すること、又は、ロックされたアドレスが既にLACPに記録されている場合に、LACPエントリエイジ(entry age)を更新すること(本実施形態におけるLACPは、ロックされたアドレスがLACPに記録された「期間」又は時間長を追跡する回路を含む)及びそのヒットビットをクリアすることを伴う。何れの場合も、LACPエントリに関連するヒットビット(又は、他のインジケータ)は、そのアドレスでのロックの投機的実行を抑制するためにクリアされる(又は、他の方法で構成される)。ステップ435において、実行パイプラインがフラッシュされ、ステップ440,415において、スレッドが再開され、非投機的に実行される。
必要に応じて、特定のアドレスを投機的にロックすることの禁止が満了してもよいことに留意されたい。いくつかの実施形態では、満了は、所望の期間、いくつかの命令、いくつかのロック、又は、その他の後に明示的に発生してもよい。いくつかの実施形態では、満了は、別のアドレスのための場所を開けるためにアドレスがLACPからエビクトされることによって発生してもよい。
図5は、例示的なLACP書き込み要求監視回路500の機能を示すブロック図である。いくつかの実施形態では、回路500は、図4に関して示され説明された方法400、及び/又は、本明細書で論じられる他の実施形態と共に使用可能であり、図6に関して示され説明されるように、LACPデバイス600に組み込まれてもよいし、LACPデバイス600と共に使用されてもよい。
回路500は、LACPエントリへの書き込み要求を監視するように構成されている。ステップ510において、回路500は、何れかのLACPエントリについて、別のスレッドがLACPエントリに記憶されたアドレスに書き込もうとしているかどうかを検出する。このように書き込もうとしていることが検出されたことを条件に(520)、回路500は、ステップ530において、対応するLACPエントリのエイジフィールド及びヒットビット(又は、他のインジケータ)を更新する。そうでない場合、回路500は、ステップ510において、他のスレッドによる書き込み要求を監視し続ける。
図5に示すステップは、本明細書で論じられる他の実施形態(図4等)と組み合わされると、これらのメカニズムと非同期的に実行されることに留意されたい。よって、この例では、LACP書き込み要求監視回路500は、LACPエントリのエイジフィールド及びヒットビットを更新する前に投機的ロック又は非投機的ロックが完了することを待機せず、プロセッサキャッシュエントリへの書き込み要求を検査する前に投機的ロック又は非投機的ロックが開始することを待機しない。他の実施形態では、図5に示すステップが同期して実行可能であることに留意されたい。
この例示的な実施形態では、LACPエントリのアドレスは、そのアドレスに関連するキャッシュラインがプロセッサのローカルキャッシュにある間に追跡される。他の実施形態では、LACPエントリのアドレスが常に追跡されてもよいことに留意されたい。そのような実施形態では、LACPは、ラインが競合を検出していないことを示す。本実施形態では、ヒットビットは、LACPが追跡したアドレスが依然としてプロセッサのローカルキャッシュにキャッシュされているか否かを示す。
図6は、本明細書で説明する様々な実施形態による例示的なLACPメカニズム600を示すブロック図である。例示的なLACPメカニズム600は、いくつかのメモリエントリ610を含むが、任意の適切な数のエントリを使用できることに留意されたい。これらのメモリエントリ610は、過去に投機的にロックされている間にロック特性に違反したプロセッサキャッシュ670のメモリ位置のアドレスを記憶するように構成されている。いくつかの実施形態では、メモリエントリ610は、さらに又は代わりに、ロック中に他のスレッドがアクセスを競合しているプロセッサキャッシュ670のメモリ位置のアドレスを記憶するように構成されてもよい。
LACPメモリエントリの数は、所望の置換ストラテジーに基づくことができる(例えば、エントリを実装するのに必要とされる論理回路の数と、後に有用な情報を提供する可能性があるエントリを置換することと、のトレードオフに基づく)。この例では、LACPメモリエントリ610は、LACPのキャッシュ内のエントリである。各エントリ610を使用して、投機的ロックのロック特性に違反したプロセッサキャッシュ670のキャッシュラインを追跡することができる。各エントリ610は、ヒットビット650と、エイジフィールド660と、を含む。
スレッドの実行中に、プロセッサキャッシュ670のキャッシュエントリ630に対してロック命令が実行される場合であって、キャッシュエントリ630のアドレスが1つのLACPエントリ610に記憶されたアドレスと一致しない場合、ロックを投機的に実行することができる。キャッシュエントリ630のアドレスが1つのLACPエントリ610に記憶されたアドレスと一致する場合には、特定のLACPエントリ610に対するキャッシュヒットビット650がアサートされる場合に、ロックを投機的に実行することができる。しかしながら、特定のLACPエントリ610に対するキャッシュヒットビット650がアサートされない場合、ロックを非投機的に実行する必要がある。アサーション/非アサーションは、ビット、フラグ又はフィールド等の任意の適切な方法で表現できることに留意されたい。
投機的ロックのロック特性に違反していることによって新たなLACPエントリ610が生成された場合に、ヒットビット650がクリアされ、投機的にロックされたプロセッサキャッシュアドレスは、LACPに未だ記憶されていない。既存のLACPエントリ610のヒットビット650は、別のスレッド(すなわち、LACPエントリを生成したスレッド以外のスレッド)からの書き込みアクセスがLACPエントリ610と一致する場合に、クリアされる。LACPエントリを生成したスレッドの非投機的ロックが完了すると(非投機的ロックが完了することは、キャッシュラインがローカルキャッシュにあることを保証する)、ヒットビットがアサートされる。
例えば、プロセッサキャッシュ670のキャッシュエントリ630に対してロックが投機的に実行される場合であって、キャッシュエントリ630上の投機的ロックのロック特性に違反した場合(例えば、投機的ロックを保持するスレッド以外のスレッドからの書き込みアクセスによって)、キャッシュエントリ630のアドレスは、コンパレータ620を使用して各エントリ610と比較される。
キャッシュエントリ630が既存のLACPエントリ610と一致しない場合、1つのLACPエントリ610が、投機的ロックのキャッシュライン630を追跡するために選択され、キャッシュエントリ630のアドレスは、所望の置換ストラテジーに従って1つのLACPエントリ610に記憶される。LACPエントリは、任意の適切なキャッシュ置換アルゴリズムを使用して(例えば、必要な論理回路の数及び/又は発生する遅延の量と、後に有用な情報を提供する可能性があるエントリを置換することと、のトレードオフに基づいて)、エビクト及び置換することができる。例えば、空のLACPエントリを使用することができ、又は、空のLACPエントリが存在しない場合には、(例えば、エイジフィールド660に従って決定されるように)最も直近に使用されたLACPエントリを置換することができる。
投機的ロックのロック特性に違反した場合、LACPエントリ610のヒットビット650は、このアドレスに対してロックが投機的に実行されるのを抑制することを示すためにクリアされ、LACPエントリ610のエイジフィールド660がリセットされる。LACPエントリ610が生成された後に、スレッドが再開され、ロックが非投機的に実行される。
プロセッサキャッシュエントリ630への別のスレッドの書き込みアクセスが既存のLACPエントリ610と一致する場合、このアドレスに対してロックが投機的に実行されるのを抑制することを示すようにヒットビット650がクリアされ、LACPエントリ610のエイジフィールド660がリセットされる。
非投機的ロックがプロセッサキャッシュエントリ630でアサートされた場合、エントリ630のアドレスは、コンパレータ620を使用してLACPエントリ610と比較される。プロセッサキャッシュエントリ630が既存のLACPエントリ610と一致する場合、エントリのヒットビットは、ロックが完了したとき又はロックが完了した後にアサートされ、LACPエントリのアドレスが、プロセッサのローカルキャッシュに現在存在するメモリ位置に関連付けられていることを示す。アサートされたヒットビットは、LACPエントリと一致する後続のロック命令が投機的に実行され得ることを示す。しかしながら、後のロック命令が実行される前に別のスレッドがメモリアクセスについてエントリ630をプローブする場合、エントリ630のアドレスは、コンパレータ620を使用してエントリ610と比較される。キャッシュエントリ630が既存のLACPエントリ610と一致する場合、エントリのヒットビットは、キャッシュエントリ630に対してロックが投機的に実行されなくてもよいことを示すために、クリアされる。
上述したことから理解できるように、LACPキャッシュヒットビット650は、動作の2つのケースを区別することができる。第1ケースでは、LACPエントリ610は、プロセッサローカルキャッシュ670の非投機的ロックについて記録される。このケースでは、LACPキャッシュヒットビット650は、キャッシュエントリ630についてロックが投機的に実行され続けてもよいことを示すために、アサートされる。このケースでは、投機的ロックは、キャッシュエントリ630のアドレスがLACPエントリ610にヒットしたとしても許可される。第2ケースでは、別のスレッドによるアクセスは、プロセッサローカルキャッシュ670からキャッシュエントリ630を削除する。したがって、このケースでは、LACPエントリ610のヒットビットは、キャッシュエントリ630についてロック命令が投機的に実行されるのを抑制するために、クリアされる。これは、第2スレッドがキャッシュエントリ630のロック特性に違反する機会に対処する。
緩和されたロック特性が実行パイプラインをフラッシュし、非投機的ロックを使用して実行を再開することになる可能性がある状況を予測する別のアプローチは、時間的ロック競合を追跡することである。このような予測は、任意のアドレスに対する所定数の投機的ロックが過去にフラッシュ及び再開をもたらした場合、又は、所定数の他のスレッドが、任意のアドレスが過去にロックされていた間に当該アドレスへのアクセスを競合した場合に、任意のアドレスに対する投機的ロックがフラッシュ及び再開をもたらす可能性があるという考えに基づいている。所定の期間内に、ある割合で、又は、時間に基づいて、所定数のフラッシュ及び再開又は競合イベントが任意のアドレスに対して行われた場合、何れかのアドレスに対する投機的ロックの可能性があると考えられる。このような予測は、時間的ロック競合予測と呼ばれることがある。
1つの例では、時間的ロック競合予測器は、最後のX個のキャッシュ可能ロック命令の競合履歴を追跡する。ここで、Xは、任意の適切な数であってもよい。例えば、Xは、必要なロジックの数と、後に有用な情報を提供する可能性があるエントリを置換することと、のトレードオフに基づいて選択することができる。キャッシュ可能ロックが投機的であり、フラッシュ及び再開を引き起こした場合、それは、時間的ロック競合予測器によってロック競合イベントとして記録される。ロック競合イベントの数が所望の閾値Yを超えると、後続のロック命令が投機的に実行されるのが抑制される。この例では、投機的ロックの頻繁な失敗は、後の投機的ロックの失敗の予測因子とみなされる。
図7は、時間的ロック競合予測(TLCP)を使用して投機的ロックを実行する例示的な方法700を示すフローチャートである。第1スレッドがロック命令を実行することを条件に(705)、TLCP回路は、過去のX個のキャッシュ可能ロック命令において投機的ロックの間にロック特性がY回以上違反したかどうかを検査する。この例では、TLCP回路は、過去のX個のキャッシュ可能ロック命令において発生したロック特性の違反の数を追跡するカウンタを含むが、TLCP回路は、この実施形態に限定されない。例えば、TLCP回路は、代わりに、過去のキャッシュ可能ロック命令の絶対数を追跡してもよい(過去のX個のキャッシュ可能ロック命令内だけではない)。様々な実施形態では、TLCPは、特定のロックされたアドレスに対するロックの違反の数、又は、任意のアドレスに対する全てのロックの違反の数を追跡してもよいことに留意されたい。
ロック特性が過去のX個のキャッシュ可能ロック命令においてY回以上違反したことを条件に(710)、ステップ715において、ロックが非投機的に実行され、ステップ750において、TLCPは、成功したロックの実行に対して更新される。ロック特性が過去のX個のキャッシュ可能ロック命令においてY回以上違反していない場合、ステップ720において、ロックが投機的に実行される。投機的実行の間、TLCP回路は、投機的ロックのロック特性が違反したかどうかを検査する。
投機的ロックのロック特性が違反していないことを条件に(725)、及び、ロックが完了したことを条件に(727)、ステップ760において、TLCPは、成功したロックの実行に対して更新される。ロック特性が違反していることが判別されたことを条件に(725)、ステップ730において、TLCP内のデータが、失敗したロックの実行に対して更新され、ステップ735において、実行パイプラインがフラッシュされ、ステップ740において、スレッドが再開され、ステップ715において、非投機的に実行され、ステップ750において、TLCPは、成功したロックの実行に対して更新される。
別の例では、TLCP回路は、最後のX個のキャッシュ可能ロック命令の競合履歴を追跡する。この例では、キャッシュ可能ロックが、そのロック特性に違反した投機的ロックである場合、ロックされたアドレスは、TLCP回路によって記録される。ロック競合イベントの数が所望の数Yを超えた場合、後続のロック命令が投機的に実行されるのが抑制される。この実施形態は例示的である。例えば、TLCP回路は、代わりに、最後のX個のキャッシュ可能ロック命令等のように、特定の時間ウィンドウ内のフラッシュ/再開及びNAKの数を追跡してもよい。この例では、投機的ロックの頻繁な失敗及び(投機的に又は非投機的に)ロックされたメモリに対する他のスレッドによる競合は、後の投機的ロックの失敗の予測因子とみなされる。
図8は、時間的ロック競合予測(TLCP)を使用して投機的ロックを実行する例示的な方法800を示すフローチャートである。第1スレッドがロック命令を実行することを条件に(805)、TLCP回路は、過去のX個のキャッシュ可能ロック命令において投機的ロック後にロック特性がY回以上違反したかどうか(例えば、ロックを保持するスレッド以外のスレッドが、ロックされたアドレスにおいてプロセッサキャッシュへの書き込みアクセスについて競合したこと、又は、ロックのフェンシング性が違反したこと)を検査する。この例では、TLCP回路は、過去のX個のキャッシュ可能ロック命令において発生したロック特性の違反の数を追跡するカウンタを含むが、TLCP回路は、この実施形態に限定されない。
メモリ(この例では、任意のメモリエントリ)の投機的ロックのロック特性が過去のX個のキャッシュ可能ロック命令においてY回以上違反したことを条件に(810)、ステップ815においてロックが非投機的に実行される。ステップ815においてロックが非投機的に実行されている間、非投機的にロックされたメモリエントリに書き込むための書き込み要求が別のスレッドによって行われたかどうかが判別される。何れの場合も、条件887においてロックが完了していない限り、ステップ815においてロックが非投機的に実行され続ける。
このような要求がロック中の任意の時点で行われたことを条件に(850)、ステップ855において、TLCPは、ロック競合を示すように更新される。このような要求が行われなかったことを条件に(850)、ステップ880において、TLCPは、ロック競合がないことを示すように更新される。TLCPが既に適切な状態を反映している場合には、明示的な更新が必要とされなくてもよいことに留意されたい。いくつかの実施形態では、TLCPの更新は、ロックが完了したとき又はロックが完了した後に行われてもよいことに留意されたい。
ロック特性が過去のX個のキャッシュ可能ロック命令においてY回以上違反していない場合、ステップ820においてロックが投機的に実行される。投機的実行の後、TLCP回路は、投機的ロックのロック特性に違反したかどうかを検査する。いくつかの実施形態では、投機的実行中に別のスレッドがメモリ位置にアクセスした場合、データが無効であると推定される。
投機的ロックのロック特性が別のスレッドからのロック競合によって違反していないことを条件に(825)、及び、ロックが完了したことを条件に(827)、ステップ890において、TLCPは、ロック競合がないことに対して更新される。投機的ロックのロック特性が別のスレッドからのロック競合によって違反したことを条件に(825)、ステップ830において、TLCPは、ロック競合が発生したことを示すように更新され、ステップ835において、実行パイプラインがフラッシュされ、ステップ840において、スレッドが再開され、ステップ815において、非投機的に実行される。
いくつかの実施形態では、これらの概念が組み合わされてもよい。例えば、特定のメモリ位置への特定の数のロック命令がフラッシュ/再開をもたらし、特定の期間内の当該メモリ位置への特定の数のロック命令がフラッシュ/再開をもたらし、当該メモリ位置への特定の数のロック命令が特定の割合で又は時間に基づいてフラッシュ/再開をもたらした場合に、当該メモリ位置に対するロック命令の投機的な実行が抑制されてもよい。
メモリデバイス内のエントリをロックする方法が本明細書で開示される。メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令が検出される。ロック命令が検出された場合、以前の投機的ロック中に特定のメモリエントリについて競合が発生したかどうかが検出される。以前の投機的ロック中に特定のメモリエントリについて競合が発生した場合、ロック命令が非投機的に実行される。以前の投機的ロック中に特定のメモリエントリについて競合が発生しなかった場合、ロック命令が投機的に実行される。
いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかは、ロック命令が投機的に実行されたことを条件に検出される。いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生した場合、スレッドが実行している実行パイプラインがフラッシュされ、スレッドが、ロック命令から開始して非投機的に再実行される。
いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、特定のメモリエントリが無効なデータを含むかどうかを検出することを含む。いくつかの例では、競合は、メモリエントリのロック中の別のスレッドによるメモリエントリへのアクセス、メモリエントリの変更、メモリエントリへのアクセス要求、又は、メモリエントリの変更要求のうち何れかを含む。いくつかの例では、以前の投機的ロック中に特定のメモリエントリについて競合が発生したかどうかを検出することは、以前の投機的ロック中に、別のスレッドが特定のメモリエントリへのアクセスを要求したかどうか、特定のメモリエントリにアクセスしたかどうか、特定のメモリエントリの変更を要求したかどうか、又は、特定のメモリエントリを変更したかどうかを検出することを含む。いくつかの例では、ロックを投機的に実行することは、ロックの制約を緩和することを含む。いくつかの例では、ロックを投機的に実行することは、ロックのアトミックアクセス性又はフェンシング性を緩和することを含む。
メモリデバイス内のエントリをロックする方法が本明細書で開示される。メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令が検出される。ロック命令が検出された場合、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかが検出される。この数が閾値を超えた場合、ロック命令が非投機的に実行される。この数が閾値を超えない場合、ロック命令が投機的に実行される。
いくつかの例では、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、特定の期間中に、競合が発生した特定のメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む。いくつかの例では、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、特定の期間中に、競合が発生したメモリデバイス内の何れかのメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む。
いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかは、ロック命令が投機的に実行されることを条件に検出される。いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生した場合、スレッドが実行している実行パイプラインがフラッシュされ、スレッドが、ロック命令から開始して非投機的に再実行される。
いくつかの例では、投機的ロック中の特定のメモリエントリについて競合が発生したかどうかを検出することは、特定のメモリエントリが無効なデータを含むかどうかを検出することを含む。いくつかの例では、競合は、メモリエントリのロック中のスレッドによるメモリエントリへのアクセス、メモリエントリの変更、メモリエントリへのアクセス要求、又は、メモリエントリの変更要求のうち何れかを含む。いくつかの例では、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、以前の投機的ロック中に、別のスレッドがメモリへのアクセスを要求したかどうか、メモリにアクセスしたかどうか、メモリの変更を要求したかどうか、又は、メモリを変更したかどうかを検出することを含む。いくつかの例では、ロックを投機的に実行することは、ロックの制約を緩和することを含む。いくつかの例では、ロックを投機的に実行することは、ロックのアトミックアクセス性又はフェンシング性を緩和することを含む。
投機的ロック用に構成された処理デバイスが本明細書で開示される。プロセッサコアは、実行パイプラインを含む。ロック命令検出回路は、メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されている。競合検出回路は、ロック命令が検出された場合、以前の投機的ロック中に特定のメモリエントリについて競合が発生したかどうかを検出するように構成されている。ロック回路は、以前の投機的ロック中に特定のメモリエントリについて競合が発生した場合、ロック命令を非投機的に実行するように構成されている。ロック回路は、以前の投機的ロック中に特定のメモリエントリについて競合が発生しなかった場合、ロック命令を投機的に実行するように構成されている。
いくつかの例では、競合検出回路は、ロック命令が投機的に実行されたことを条件に、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出するように構成されている。いくつかの例では、投機的ロック中に特定のメモリエントリについて競合が発生した場合、スレッドが実行している実行パイプラインをフラッシュし、スレッドをロック命令から開始して非投機的に再実行するように構成された再実行回路を含む。
いくつかの例では、投機的ロック中に特定のメモリエントリについて競合が発生したかどうかを検出することは、特定のメモリエントリが無効なデータを含むかどうかを検出することを含む。いくつかの例では、競合は、メモリエントリのロック中の別のスレッドによるメモリエントリへのアクセス、メモリエントリの変更、メモリエントリへのアクセス要求、又は、メモリエントリの変更要求のうち何れかを含む。いくつかの例では、以前の投機的ロック中に特定のメモリエントリについて競合が発生したかどうかを検出することは、以前の投機的ロック中に、別のスレッドが特定のメモリエントリへのアクセスを要求したかどうか、特定のメモリエントリにアクセスしたかどうか、特定のメモリエントリの変更を要求したかどうか、又は、特定のメモリエントリを変更したかどうかを検出することを含む。いくつかの例では、ロックを投機的に実行することは、ロックの制約を緩和することを含む。いくつかの例では、ロックを投機的に実行することは、ロックのアトミックアクセス性又はフェンシング性を緩和することを含む。
投機的ロック用に構成された処理デバイスが本明細書で開示される。プロセッサコアは、実行パイプラインを含む。ロック命令検出回路は、メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されている。競合検出回路は、ロック命令が検出された場合、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出するように構成されている。ロック回路は、この数が閾値を超えた場合、ロックを非投機的に実行するように構成されている。ロック回路は、この数が閾値を超えない場合、ロックを投機的に実行するように構成されている。
いくつかの例では、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、特定の期間中に、競合が発生した特定のメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む。いくつかの例では、特定の期間中に競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、特定の期間中に競合が発生したメモリデバイス内の何れかのメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む。いくつかの例では、競合検出回路は、ロック命令が投機的に実行されたことを条件に、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出するように構成されている。
いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生した場合、スレッドが実行している実行パイプラインをフラッシュし、スレッドをロック命令から開始して非投機的に再実行するように構成された再実行回路を含む。いくつかの例では、投機的ロック中に特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、特定のメモリエントリが無効なデータを含むかどうかを検出することを含む。いくつかの例では、競合は、メモリエントリのロック中のスレッドによるメモリエントリへのアクセス、メモリエントリの変更、メモリエントリのアクセス要求、又は、メモリエントリの変更要求を含む。
いくつかの例では、特定の期間中に競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、以前の投機的ロック中に、別のスレッドがメモリへのアクセスを要求したかどうか、メモリにアクセスしたかどうか、メモリの変更を要求したかどうか、又は、メモリを変更したかどうかの何れかを検出することを含む。いくつかの例では、ロックを投機的に実行することは、ロックの制約を緩和することを含む。いくつかの例では、ロックを投機的に実行することは、ロックのアトミックアクセス性又はフェンシング性を緩和することを含む。
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令(このような命令は、コンピュータ可読媒体に記憶することが可能である)の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の形態を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばCD−ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体が含まれる。

Claims (36)

  1. メモリデバイス内のエントリをロックする方法であって、
    前記メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出することと、
    前記ロック命令が検出されたことを条件に、以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したかどうかを検出することと、
    前記以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したことを条件に、前記ロック命令を非投機的に実行することと、
    前記以前の投機的ロック中に前記特定のメモリエントリについて競合が発生しなかったことを条件に、前記ロック命令を投機的に実行することと、を含む、
    方法。
  2. 前記ロック命令が投機的に実行されることを条件に、前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することを含む、
    請求項1の方法。
  3. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したことを条件に、前記スレッドが実行している実行パイプラインをフラッシュし、前記スレッドを前記ロック命令から開始して非投機的に再実行することを含む、
    請求項2の方法。
  4. 前記投機的中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、前記特定のメモリエントリが無効なデータを含むかどうかを検出することを含む、
    請求項2の方法。
  5. 競合は、メモリエントリのロック中の別のスレッドによる前記メモリエントリへのアクセス、前記メモリエントリの変更、前記メモリエントリへのアクセス要求、又は、前記メモリエントリの変更要求のうち何れかを含む、
    請求項1の方法。
  6. 以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したかどうかを検出することは、前記以前の投機的ロック中に、別のスレッドが前記特定のメモリエントリへのアクセスを要求したかどうか、前記特定のメモリエントリにアクセスしたかどうか、前記特定のメモリエントリの変更を要求したかどうか、又は、前記特定のメモリエントリを変更したかどうかを検出することを含む、
    請求項1の方法。
  7. 前記ロックを投機的に実行することは、前記ロックの制約を緩和することを含む、
    請求項1の方法。
  8. 前記ロックを投機的に実行することは、前記ロックのアトミックアクセス性又はフェンシング性を緩和することを含む、
    請求項1の方法。
  9. メモリデバイス内のエントリをロックする方法であって、
    メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出することと、
    前記ロック命令が検出されたことを条件に、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することと、
    前記数が前記閾値を超えたことを条件に、前記ロック命令を非投機的に実行することと、
    前記数が前記閾値を超えないことを条件に、前記ロック命令を投機的に実行することと、を含む、
    方法。
  10. 前記特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、
    前記特定の期間中に、競合が発生した前記特定のメモリエントリの以前の投機的ロックの数が前記閾値数を超えたかどうかを検出することを含む、
    請求項9の方法。
  11. 前記特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、
    前記特定の期間中に、競合が発生した前記メモリデバイス内の何れかのメモリエントリの以前の投機的ロックの数が前記閾値を超えたかどうかを検出することを含む、
    請求項9の方法。
  12. 前記ロック命令が投機的に実行されることを条件に、前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することを含む、
    請求項9の方法。
  13. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したことを条件に、前記スレッドが実行している実行パイプラインをフラッシュし、前記スレッドを前記ロック命令から開始して非投機的に再実行することを含む、
    請求項12の方法。
  14. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、前記特定のメモリエントリが無効なデータを含むかどうかを検出することを含む、
    請求項12の方法。
  15. 競合は、メモリエントリのロック中のスレッドによる前記メモリエントリへのアクセス、前記メモリエントリの変更、前記メモリエントリへのアクセス要求、又は、前記メモリエントリの変更要求のうち何れかを含む、
    請求項9の方法。
  16. 特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、前記以前の投機的ロック中に、別のスレッドが前記メモリへのアクセスを要求したかどうか、前記メモリにアクセスしたかどうか、前記メモリの変更を要求したかどうか、又は、前記メモリを変更したかどうかを検出することを含む、
    請求項9の方法。
  17. 前記ロックを投機的に実行することは、前記ロックの制約を緩和することを含む、
    請求項9の方法。
  18. 前記ロックを投機的に実行することは、前記ロックのアトミックアクセス性又はフェンシング性を緩和することを含む、
    請求項9の方法。
  19. 投機的ロック用に構成された処理デバイスであって、
    実行パイプライン含むプロセッサコアと、
    メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されたロック命令検出回路と、
    前記ロック命令が検出されたことを条件に、以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したかどうかを検出するように構成された競合検出回路と、
    以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したことを条件に、前記ロック命令を非投機的に実行するように構成されたロック回路であって、以前の投機的ロック中に前記特定のメモリエントリについて競合が発生しなかったことを条件に、前記ロック命令を投機的に実行するように構成されたロック回路と、を備える、
    処理デバイス。
  20. 前記競合検出回路は、前記ロック命令が投機的に実行されたことを条件に、前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出するように構成されている、
    請求項19の処理デバイス。
  21. 前記投機的中に前記特定のメモリエントリについて競合が発生したことを条件に、前記スレッドが実行している実行パイプラインをフラッシュし、前記スレッドを前記ロック命令から開始して非投機的に再実行するように構成された再実行回路を備える、
    請求項20の処理デバイス。
  22. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、前記特定のメモリエントリが無効なデータを含むかどうかを検出することを含む、
    請求項20の処理デバイス。
  23. 競合は、メモリエントリのロック中の別のスレッドによる前記メモリエントリへのアクセス、前記メモリエントリの変更、前記メモリエントリへのアクセス要求、又は、前記メモリエントリの変更要求のうち何れかを含む、
    請求項19の処理デバイス。
  24. 以前の投機的ロック中に前記特定のメモリエントリについて競合が発生したかどうかを検出することは、前記以前の投機的ロック中に、別のスレッドが前記特定のメモリエントリへのアクセスを要求したかどうか、前記特定のメモリエントリにアクセスしたかどうか、前記特定のメモリエントリの変更を要求したかどうか、又は、前記特定のメモリエントリを変更したかどうかを検出することを含む、
    請求項19の処理デバイス。
  25. 前記ロックを投機的に実行することは、前記ロックの制約を緩和することを含む、
    請求項19の処理デバイス。
  26. 前記ロックを投機的に実行することは、前記ロックのアトミックアクセス性又はフェンシング性を緩和することを含む、
    請求項19の処理デバイス。
  27. 投機的ロック用に構成された処理デバイスであって、
    実行パイプラインを含むプロセッサコアと、
    メモリデバイスの特定のメモリエントリに対してスレッドによって実行されたロック命令を検出するように構成されたロック命令検出回路と、
    前記ロック命令が検出されたことを条件に、特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出するように構成された競合検出回路と、
    前記数が前記閾値を超えたことを条件に、前記ロック命令を非投機的に実行するように構成されたロック回路であって、前記数が前記閾値を超えていないことを条件に、前記ロック命令を投機的に実行するように構成されたロック回路と、を備える、
    処理デバイス。
  28. 前記特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、
    前記特定の期間中に、競合が発生した前記特定のメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む、
    請求項27の処理デバイス。
  29. 前記特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、
    前記特定の期間中に、競合が発生した前記メモリデバイス内の何れかのメモリエントリの以前の投機的ロックの数が閾値を超えたかどうかを検出することを含む、
    請求項27の処理デバイス。
  30. 前記競合検出回路は、前記ロック命令が投機的に実行されたことを条件に、前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出するように構成されている、
    請求項27の処理デバイス。
  31. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したことを条件に、前記スレッドが実行している実行パイプラインをフラッシュし、前記スレッドを前記ロック命令から開始して非投機的に再実行するように構成された再実行回路を備える、
    請求項28の処理デバイス。
  32. 前記投機的ロック中に前記特定のメモリエントリについて別のスレッドからの競合が発生したかどうかを検出することは、前記特定のメモリエントリが無効なデータを包むかどうかを検出することを含む、
    請求項28の処理デバイス。
  33. 競合は、メモリエントリのロック中のスレッドによる、前記メモリエントリへのアクセス、前記メモリエントリの変更、前記メモリエントリへのアクセス要求、又は、前記メモリエントリの変更要求のうち何れかを含む、
    請求項27の処理デバイス。
  34. 特定の期間中に、競合が発生したメモリの以前の投機的ロックの数が閾値を超えたかどうかを検出することは、前記以前の投機的ロック中に、別のスレッドが前記メモリへのアクセスを要求したかどうか、前記メモリにアクセスしたかどうか、前記メモリの変更を要求したかどうか、又は、前記メモリを変更したかどうかを検出することを含む、
    請求項27の処理デバイス。
  35. 前記ロックを投機的に実行することは、前記ロックの制約を緩和することを含む、
    請求項27の処理デバイス。
  36. 前記ロックを投機的に実行することは、前記ロックのアトミックアクセス性又はフェンシング性を緩和することを含む、
    請求項27の処理デバイス。
JP2019536456A 2016-09-22 2017-09-06 ロックアドレス競合予測器 Pending JP2019530120A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2022161419A JP2022191340A (ja) 2016-09-22 2022-10-06 ロックアドレス競合予測器

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/273,304 US11868818B2 (en) 2016-09-22 2016-09-22 Lock address contention predictor
US15/273,304 2016-09-22
PCT/US2017/050240 WO2018057293A2 (en) 2016-09-22 2017-09-06 Lock address contention predictor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2022161419A Division JP2022191340A (ja) 2016-09-22 2022-10-06 ロックアドレス競合予測器

Publications (1)

Publication Number Publication Date
JP2019530120A true JP2019530120A (ja) 2019-10-17

Family

ID=61621027

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019536456A Pending JP2019530120A (ja) 2016-09-22 2017-09-06 ロックアドレス競合予測器
JP2022161419A Pending JP2022191340A (ja) 2016-09-22 2022-10-06 ロックアドレス競合予測器

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2022161419A Pending JP2022191340A (ja) 2016-09-22 2022-10-06 ロックアドレス競合予測器

Country Status (6)

Country Link
US (1) US11868818B2 (ja)
EP (1) EP3516495A4 (ja)
JP (2) JP2019530120A (ja)
KR (1) KR102594618B1 (ja)
CN (1) CN109791470A (ja)
WO (1) WO2018057293A2 (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030079094A1 (en) * 2001-10-19 2003-04-24 Ravi Rajwar Concurrent execution of critical sections by eliding ownership of locks
JP2008504603A (ja) * 2004-06-30 2008-02-14 インテル コーポレイション 競合しないロック命令の投機実行のための方法及び装置
JP2008525923A (ja) * 2004-12-29 2008-07-17 インテル・コーポレーション マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
WO2015055083A1 (en) * 2013-10-14 2015-04-23 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
WO2016139446A1 (en) * 2015-03-04 2016-09-09 Arm Limited An apparatus and method to generate trace data in response to transactional execution

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6487652B1 (en) * 1998-12-08 2002-11-26 Sun Microsystems, Inc. Method and apparatus for speculatively locking objects in an object-based system
US6862664B2 (en) * 2003-02-13 2005-03-01 Sun Microsystems, Inc. Method and apparatus for avoiding locks by speculatively executing critical sections
US7930694B2 (en) * 2004-09-08 2011-04-19 Oracle America, Inc. Method and apparatus for critical section prediction for intelligent lock elision
US20090125519A1 (en) * 2007-11-13 2009-05-14 Intel Corporation Device, system, and method for regulating software lock elision mechanisms
US8914620B2 (en) 2008-12-29 2014-12-16 Oracle America, Inc. Method and system for reducing abort rates in speculative lock elision using contention management mechanisms
US8539168B2 (en) * 2009-06-26 2013-09-17 Oracle America, Inc. Concurrency control using slotted read-write locks
US8453122B2 (en) 2009-11-10 2013-05-28 International Business Machines Corporation Symmetric multi-processor lock tracing
US8769434B2 (en) * 2010-08-11 2014-07-01 Nike, Inc. Intelligent display of information in a user interface
US8719828B2 (en) 2011-10-14 2014-05-06 Intel Corporation Method, apparatus, and system for adaptive thread scheduling in transactional memory systems
WO2013115818A1 (en) * 2012-02-02 2013-08-08 Intel Corporation A method, apparatus, and system for transactional speculation control instructions
WO2013115816A1 (en) * 2012-02-02 2013-08-08 Intel Corporation A method, apparatus, and system for speculative abort control mechanisms
US9524195B2 (en) * 2014-02-27 2016-12-20 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
BR112016012299B1 (pt) * 2013-12-02 2021-09-28 Basf Se Processo para produção de poliuretanos, poliuretano e uso do mesmo
US9971627B2 (en) 2014-03-26 2018-05-15 Intel Corporation Enabling maximum concurrency in a hybrid transactional memory system
KR102261591B1 (ko) 2014-08-29 2021-06-04 삼성전자주식회사 반도체 장치, 반도체 시스템 및 시스템 온 칩
US9471397B2 (en) * 2014-10-03 2016-10-18 International Business Machines Corporation Global lock contention predictor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030079094A1 (en) * 2001-10-19 2003-04-24 Ravi Rajwar Concurrent execution of critical sections by eliding ownership of locks
JP2008504603A (ja) * 2004-06-30 2008-02-14 インテル コーポレイション 競合しないロック命令の投機実行のための方法及び装置
JP2008525923A (ja) * 2004-12-29 2008-07-17 インテル・コーポレーション マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
WO2015055083A1 (en) * 2013-10-14 2015-04-23 International Business Machines Corporation Adaptive process for data sharing with selection of lock elision and locking
WO2016139446A1 (en) * 2015-03-04 2016-09-09 Arm Limited An apparatus and method to generate trace data in response to transactional execution

Also Published As

Publication number Publication date
US11868818B2 (en) 2024-01-09
CN109791470A (zh) 2019-05-21
KR20190045225A (ko) 2019-05-02
WO2018057293A2 (en) 2018-03-29
JP2022191340A (ja) 2022-12-27
US20180081544A1 (en) 2018-03-22
EP3516495A4 (en) 2020-06-17
KR102594618B1 (ko) 2023-10-26
EP3516495A2 (en) 2019-07-31
WO2018057293A3 (en) 2019-01-31

Similar Documents

Publication Publication Date Title
US9696928B2 (en) Memory transaction having implicit ordering effects
US9244725B2 (en) Management of transactional memory access requests by a cache memory
US8327188B2 (en) Hardware transactional memory acceleration through multiple failure recovery
US9244846B2 (en) Ensuring causality of transactional storage accesses interacting with non-transactional storage accesses
US9798577B2 (en) Transactional storage accesses supporting differing priority levels
US10108464B2 (en) Managing speculative memory access requests in the presence of transactional storage accesses
KR102421670B1 (ko) 잠금 후 명령의 추정적 퇴거
JP7403541B2 (ja) メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
US8898401B2 (en) Methods and apparatuses for improving speculation success in processors
KR102594618B1 (ko) 락 어드레스 경합 예측자
US11630772B1 (en) Suppressing cache line modification
US11822479B2 (en) History-based selective cache line invalidation requests
US20230101748A1 (en) Weak cache line invalidation requests for speculatively executing instructions
CN118056192A (zh) 将特定数据模式的指示存储在备用目录条目中

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200904

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210907

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210928

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20211228

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20220228

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220315

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20220607