JP2006031691A - スリープ‐起動機構を用いた比較および交換動作 - Google Patents
スリープ‐起動機構を用いた比較および交換動作 Download PDFInfo
- Publication number
- JP2006031691A JP2006031691A JP2005178287A JP2005178287A JP2006031691A JP 2006031691 A JP2006031691 A JP 2006031691A JP 2005178287 A JP2005178287 A JP 2005178287A JP 2005178287 A JP2005178287 A JP 2005178287A JP 2006031691 A JP2006031691 A JP 2006031691A
- Authority
- JP
- Japan
- Prior art keywords
- lock
- processor
- instruction
- instructions
- sleep
- 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
Links
- 230000007246 mechanism Effects 0.000 title claims abstract description 41
- 238000000034 method Methods 0.000 claims abstract description 32
- 230000007958 sleep Effects 0.000 claims abstract description 31
- 230000008859 change Effects 0.000 claims description 20
- 239000000872 buffer Substances 0.000 claims description 12
- 230000004913 activation Effects 0.000 claims description 5
- 238000012544 monitoring process Methods 0.000 claims 13
- 239000012536 storage buffer Substances 0.000 claims 8
- 238000001514 detection method Methods 0.000 claims 2
- 230000003213 activating effect Effects 0.000 claims 1
- 239000002699 waste material Substances 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 238000012545 processing Methods 0.000 description 9
- 230000001960 triggered effect Effects 0.000 description 6
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 5
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 238000005192 partition Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 description 3
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 101000602926 Homo sapiens Nuclear receptor coactivator 1 Proteins 0.000 description 2
- 101000651467 Homo sapiens Proto-oncogene tyrosine-protein kinase Src Proteins 0.000 description 2
- 102100027384 Proto-oncogene tyrosine-protein kinase Src Human genes 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000004622 sleep time Effects 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 102100023882 Endoribonuclease ZC3H12A Human genes 0.000 description 1
- 101710112715 Endoribonuclease ZC3H12A Proteins 0.000 description 1
- 101100120298 Rattus norvegicus Flot1 gene Proteins 0.000 description 1
- 101100412401 Rattus norvegicus Reg3a gene Proteins 0.000 description 1
- 101100412403 Rattus norvegicus Reg3b gene Proteins 0.000 description 1
- 206010000210 abortion Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/521—Atomic
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Power Sources (AREA)
- Memory System (AREA)
- Hardware Redundancy (AREA)
- Exchange Systems With Centralized Control (AREA)
- Advance Control (AREA)
Abstract
【課題】複数のプロセッサ(または複数のスレッド)間での共有リソースのロックが利用可能になるのを待つ場合に発生する複数のリソースのボトルネックならびにメモリ帯域、計算帯域、マイクロアーキテクチャ上の複数のリソース、および電力の無駄を改善する。
【解決手段】方法、装置、およびシステムが、1つのスリープ‐起動機構を用いて比較および交換動作を行うために提供される。一実施形態によれば、1つのプロセッサにおける1つの命令を実行して、プロセッサのためにロックを取得するのを助ける。プロセッサによってロックを取得することができない場合には、命令は、1つのイベントが生じるまでスリープされる。
【選択図】図7
【解決手段】方法、装置、およびシステムが、1つのスリープ‐起動機構を用いて比較および交換動作を行うために提供される。一実施形態によれば、1つのプロセッサにおける1つの命令を実行して、プロセッサのためにロックを取得するのを助ける。プロセッサによってロックを取得することができない場合には、命令は、1つのイベントが生じるまでスリープされる。
【選択図】図7
Description
本発明の複数の実施形態は、プロセッサに関する。より特定的には、一実施形態は、1つのスリープ‐起動機構を用いて比較および交換動作を行うことに関する。
典型的には、1つのマルチスレッドのプロセッサまたは1つのマルチプロセッサシステムは、複数の命令シーケンスを同時並行に処理することができる。複数の命令ストリームの実行を行わせる主な動機要因の1つは、その結果生じる処理利用における改善にある。マルチスレッドプロセッサは、異なる実行リソースにおいて、それらのリソースをよりよく利用することを試行して、複数の命令ストリームを同時並行に実行することを可能にする。さらに、マルチスレッドプロセッサは、高い待ち遅延が生じるか、または複数のイベントが生じるのを待つことの多い複数のプログラムについて、用いることができる。
典型的には、コンピュータシステムは、すべての複数のスレッドまたはプロセッサによって共有されるべき1つの単一リソースセットアップを有する。充分なリソースがないと、複数のプロセッサ(または複数のスレッド)間に重大な競合が生じる理由は、例えば、複数のプロセッサは、バスおよびメモリ帯域をを共有しているからである。この競合が特に明らかなのは、1つまたはそれ以上のプロセッサが1つのセマフォまたはロック(1つの単一プロセッサの他のデータ構造に対する排他的アクセスを許可するのみしばしば用いられるデータ構造のことを指す)が利用可能になるのを待つ場合である。これにより、複数のリソースのボトルネックならびにメモリ帯域、計算帯域、マイクロアーキテクチャ上の複数のリソース、および電力の無駄が生じる。また、複数のプロセッサの「占有待ち」は、システム内の他の複数のプロセッサの性能に対して悪影響を与えうる。
図1は、1つの共有メモリ空間114をアクセスする複数のプロセッサ102〜106を有するコンピュータシステムの一例を示すブロック図である。セマフォ(ロック)110は、共有空間114に対するアクセス112を取得することに関連した値を含むように割り当てられたメモリ108における1つの特定の場所である。プロセッサ102〜106のうちの1つが共有空間114にアクセスするためには、まずロック110にアクセスして、ロック位置110に記憶されたデータの状態(値)をテストし、最も単純な形式では、2つの値のいずれかをロック110に割り当てる。第1の値は、アクセス対象の共有空間114の利用可能性を示し、第2の値は、共有空間114の現在の利用を示すので、現在はアクセスのための利用はできない。また、ビット状態1および0を、ロック110のロックおよびロック解除状態のために用いることができる。
メモリ108をプロセッサ102〜106によってアクセスしてデータ転送を行うことは、典型的には、ロードおよび記憶動作の使用を伴う。ロード動作は、メモリ108内でアクセスされた1つの位置からメモリの内容を転送するのに対し、記憶動作は、メモリ108内でアクセスされたメモリ位置へデータを転送する。よって、ロード/記憶動作を用いて、メモリ108およびロック110をアクセスして、プロセッサ102〜106とメモリ108との間のデータ転送を行う。ロードおよび記憶アクセスは、それぞれ、読み出しおよび書き込みアクセスとも称される。読み出しを行う場合、キャッシュラインは修正、排他、共有、無効(MESI)プロトコルなどの1つのプロトコルに従って、「共有未修正」または「排他」または「修正」のいずれかでプロセッサのキャッシュ内に存在する。キャッシュラインがこれらの複数の状態(例えば、無効)のうちの1つの状態で存在しない場合は、プロセッサ102〜106は、メモリ108からラインを取り出して、「共有未修正」または「排他」の状態にする。書き込みを行うためには、プロセッサ102〜106は、そのキャッシュ内でラインを「排他」または「修正」状態にするか、またはそれを取り出してキャッシュ内に入れて「排他」状態にする。「共有状態」は、同時並行読み出しに利用可能であるが、1つのプロセッサ102〜106だけが、読み出しまたは書き込みのためにラインを「排他」状態にすることができる。
セマフォの利用可能性を調査してセマフォを使用状態にするための1つの技法の一例は、アトミック読み出し‐修正‐書き込みシーケンス(例えば「テスト&セット(TS)機構」)である。同期を実施するための1つの機構は、「比較および交換命令」であって、これは比較的効率的であるが、メモリ位置のキャッシュラインの排他的所有を要求するので、充分に効率的ではない。これにより、他の複数のプロセッサがメモリ位置を同時並行に読み出すことを防止する。
他の例には、「テスト&テスト&セット(TTS)機構」が含まれる。TTS機構は、比較的より効率的であるが、それは、セマフォがフリーでない間、プロセッサが第1のテストについて変数の共有状態の1つのローカルキャッシュコピーをアクセスするからである。しかしながら、1つのプロセッサがロックを取得しており、複数の他のプロセッサがロックを取り合って(例えば、セマフォがフリーかどうか確認するための同時試行読み取り)いる場合、TTS機構は、複数の他のプロセッサの阻止またはボトルネックの防止に失敗する。ロック取得プロセッサは、他の全てのキャッシュから強制的に出される「排他」状態のロックのキャッシュラインを取得する。ロックを書き込むことが行われると、複数の他のプロセッサは、読み出しを試みて、それにより、取得プロセッサがその修正されたロック値をメモリに戻して、バストランザクションの1つのシーケンスにおいて、今度は共有されたデータを複数の他のプロセッサに転送する。
以下に説明するのは、1つのスリープ‐起動機構を用いた比較および交換動作を行うための1つのシステムおよび方法である。以下の説明では、本発明の様々な実施形態のより完全理解を提供するために、論理の実施、操作符号、リソース分割、リソース共有、ならびにリソース二重実施、システム構成要素の型および相関性、および論理分割/統合選択肢などの数多くの特定の詳細を説明するであろう。しかしながら、本発明の実施形態は、そのような特定の詳細がなくとも、提供した開示に基づいて実施されるであろうことが、当業者にとって理解されるであろう。本発明を不明瞭にしないために、他のインスタンス、制御構造、ゲートレベル回路、および完全なソフトウェア命令シーケンスは、詳細に示していない。添付の説明で、通常の当業者は、必要以上の実験を行わずに適切な機能性を実現することができるであろう。
本発明の様々な実施形態を以下に説明する。様々な実施形態は、ハードウェア構成要素によって実施されてもよく、または複数の機械実行可能な命令で具体化されてもよく、当該命令は、1つの汎用または専用のプロセッサまたは機械または当該命令がプログラムされた論理回路に様々な実施形態を実施させるために用いられてもよい。代わりに、様々な実施形態は、ハードウェアおよびソフトウェアの1つの組み合わせによって実施されてもよい。
本発明の様々な実施形態は、1つのコンピュータプログラム製品として提供されてもよく、当該コンピュータプログラム製品は、複数の命令を記憶した1つの機械読み取り可能な媒体を含んでもよく、当該命令は、1つのコンピュータに本発明の様々な実施形態に従った1つの処理を実行させるために用いられてもよい。機械読み取り可能な媒体には、フロッピーディスケット、光ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能なプログラム可能読み取り専用メモリ(EPROM)、電気消去可能なプログラム可能読み取り専用メモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または電気的命令を記憶するために適した他の型の媒体/機械読み取り可能媒体が含まれるが、これに限定されない。さらに、本発明の様々実施形態は、1つのコンピュータプログラム製品としてダウンロードされてもよく、プログラムは、1つの遠隔コンピュータから1つの要求元コンピュータへ、搬送波または他の伝播媒体において実現された複数のデータ信号によって、1つの通信リンク(例えば、1つのモデムまたはネットワーク接続)を介して転送されてもよい。
図2は、命令200のための1つの符号化手法の一実施形態を示すブロック図である。読み出し‐修正‐書き込み動作を行うための1つの命令(例えば、比較および交換(CMPXCHG))200を示す。命令200は、1つの第1のソースデータを読み出し、それを他のソースデータと比較し、比較が所定の基準または条件に適合する場合(例えば、1つの比較が真である場合)、何らかの修正された値が1つの位置に書き込まれる。位置には、第1のソースデータの元の位置が含まれる。所定の条件に適合しない場合、当該位置の元データは変更されない。以下のような他の位置が、元データを除く位置のうち1つを含み、ステータスと共に更新されてもよい。
cmpxchg,src(暗黙アキュムレータレジスタと共に)
アキュムレータレジスタRAXは、期待ロック解除値を含む
if accumulator = dest then
zero−flag = 1
dest = src
else
zero_flag = 0
accumulator = dest
endif
cmpxchg,src(暗黙アキュムレータレジスタと共に)
アキュムレータレジスタRAXは、期待ロック解除値を含む
if accumulator = dest then
zero−flag = 1
dest = src
else
zero_flag = 0
accumulator = dest
endif
命令200には、命令200をCMPXCHG命令として識別するために用いられる1つの操作符号オペランド202と、ソースおよび宛先に対応するSRC1,SRC2,SRC3,およびDEST204〜210に関連した複数のオペランドとを含む1つの単一アトミック命令を含む。
図3は、1つの命令200を実施するための1つの処理アーキテクチャ300の一実施形態を示すブロック図である。プロセッサ302は、1つの実行部304と、1つのレジスタファイル306(複数のレジスタ308を含む)と、1つのバス316によって共に結合された1つのデコーダ314とを有する中央処理装置(CPU)を示す。レジスタファイル306には、複数の命令200を実行するために実行部304によってアクセスされる複数のレジスタ308の1つの組が含まれる。命令200には、図2の1つのCMPXCHG_SW命令またはスリープ‐起動機構を有する1つの比較および交換命令(CMPXCHG_SW命令)の一実施形態が含まれる。
命令200は、実行部304内に常駐するように示されており、複数の点線が、命令200のオペランド202〜210からレジスタファイル306内の複数の対応するレジスタ308へと示されており。デコーダ314を用いて、命令200をデコードして実行する。メモリ320は、1つのバス318を介して、バスインターフェイス部(BIU)312と通信する。BIU312を用いて、メモリ320およびプロセッサ302間でデータを転送する。命令200についてのプログラムルーチン(動作シーケンス)は、メモリ320内に常駐することが意図されている。命令200の実行前に、SRC1、SRC2、およびSRC3が複数のレジスタ308にロードされてもよい。一実施形態において、1つの処理‐比較‐オペランド(PCO)レジスタ(図示せず)を用いて、命令200の実行中の互いに異なる期間でのSRC2および/またはDESTについての1つのレジスタとして機能してもよい。別の言い方をすれば、実行前に、SRC1およびSRC3が複数のレジスタ308にロードされる一方で、SRC2の情報がPCOレジスタにロードされ、SRC2情報についての専用レジスタとしての役割を果たす。
一実施形態において、命令200には、CMPXCHG_SW命令が含まれ、それについて、スリープ‐起動機構を伴う比較および交換動作(CMPXCHG_SW機構)が処理アーキテクチャ300によって実施および実行される。そのような機構は、(例えば、プロセッサ302において実施された)ハードウェアおよび/またはソフトウェア(例えば、機構の様々な機能を実施および実行するための同期符号)を用いて実施されてもよい。一実施形態において、(共有メモリ空間326に対するアクセスを得るための)所望のロック322が他のプロセッサによって取得されるなどで利用可能でない場合に、CMPXCHG_SW機構を用いて、1つのCMPXCHG_SW命令をスリープさせる。その次に、取得プロセッサが共有メモリ空間326に対するアクセスを完了した場合、その後、今度は他のプロセッサが共有メモリ空間326に対するアクセス制御をすることができるように、ロック322を開放(またはロック解除)状態に再設定する必要がある場合がある。システムが共有メモリ326に対する制御をどのように解除するかは、1つの設計上の選択である(例えば、システムアーキテクチャによって要求されたようにする)。例えば、1つのロック解除されたステータス値が、直接ロック322に書き込まれてもよいし、または1つのレジスタ308に書き込み/セーブされてもよい。CMPXCHG_SW機構は、図7〜9を参照して、さらに開示される。
図4は、本発明の1つまたはそれ以上の実施形態を実施するのに用いられるコンピュータシステム400の一例を示すブロック図である。コンピュータシステム(システム)は、1つまたはそれ以上のプロセッサ402〜406を含む。プロセッサ402〜406は、1つまたはそれ以上の単一スレッドまたは多スレッドプロセッサを含んでもよい。1つの典型的な多スレッドプロセッサは、複数のスレッドまたは複数の論理プロセッサを含んでもよく、複数の命令シーケンスをその複数のスレッドを用いて同時並行に処理できてもよい。また、プロセッサ402〜406は、1つまたはそれ以上のキャッシュ内部レベル(図示せず)と、プロセッサバス412と直接対話する1つのバスコントローラまたはバスインターフェイス部とを含んでもよい。
プロセッサバス412は、ホストバスまたはフロント側バスとしても知られるが、プロセッサ402〜406をシステムインターフェイス414に結合するために用いられてもよい。プロセッサバス412は、1つの制御バス432と、1つのアドレスバス434と、1つのデータバス436とを含んでもよい。制御バス432、アドレスバス434、およびデータバス436は、マルチドロップの双方向バスであってもよく、例えば、1つの2地点間バスに対向して3つまたはそれ以上のバスエージェントに接続されており、当該2地点間バスは、2つのバスエージェント間だけに接続されていてもよい。
システムインターフェイス414(またはチップセット)は、プロセッサバス412に接続されて、システム400の複数の他の構成要素をプロセッサバス412にインターフェイスで連結させてもよい。例えば、システムインターフェイス414は、1つのメインメモリ416をプロセッサバス412にインタフェースで連結させるための1つのメモリコントローラ418を含んでもよい。メインメモリ416は、典型的には、1つまたはそれ以上のメモリカードと、1つの制御回路(図示せず)とを含む。また、システムインターフェイス414は、1つの入力/出力(I/O)インターフェイス420を含んでもよく、1つまたはそれ以上のI/OブリッジまたはI/O装置をプロセッサバス412にインターフェイスで連結させる。例えば、図示のように、I/Oインターフェイス420は、1つのI/Oブリッジ424をプロセッサバス412にインターフェイスで連結してもよい。I/Oブリッジ424は、システムインターフェイス414および1つのI/Oバス426の間のインタフェースする1つのバスブリッジとして動作してもよい。1つまたはそれ以上のI/Oコントローラおよび/またはI/O装置が、I/Oバス426に接続されて、図示のように、I/Oコントローラ428およびI/O装置430のようなものに接続されてもよい。I/Oバス426は、1つの周辺構成要素相互接続(PCI)バスまたは他の型のI/Oバスを含んでもよい。
システム400は、メインメモリ416と称される、1つのダイナミック記憶装置、もしくは1つのランダムアクセスメモリ(RAM)またはプロセッサバス412に結合されて情報およびプロセッサ402〜406によって実行されるべき複数の命令を記憶するための他の装置を含んでもよい。また、メインメモリ416は、プロセッサ402〜406による複数の命令の実行中に複数の一時的な変数または他の中間情報を記憶するために用いられてもよい。システム400は、プロセッサバス412に結合されて静的情報および複数の命令をプロセッサ402〜406のために記憶するための1つの読み取り専用メモリ(ROM)および/または他の静的記憶装置(図示せず)を含んでもよい。
メインメモリ416またはダイナミック記憶装置は、情報および複数の命令を記憶するための1つの磁気ディスクまたは1つの光学ディスクを含んでもよい。I/O装置430は、1つの陰極線管(CRT)または液晶ディスプレイ(LCD)のような、1人のエンドユーザに対して情報を表示するための1つの表示装置(図示せず)を含んでもよい。例えば、インストールステータス、施行期間における残り時間、および他の情報の図および/またはテキストによる複数の表示を、見込み購買客に対して表示装置上に提示してもよい。また、I/O装置430は、1つの英数字入力装置のような、情報および/または複数のコマンド選択をプロセッサ402〜406に対して通信するための複数の英数字および他のキーを含む1つの入力装置(図示せず)を含んでもよい。他の型のユーザ入力装置としては、1つのマウス、1つのトラックボール、または複数のカーソル方向キーなどの、プロセッサ402〜406に対する方向情報および複数のコマンド選択を通信して、表示装置上におけるカーソルの動きを制御するためのカーソル制御器が含まれる。
また、システム400は、例えば1つのローカルまたはワイドエリアネットワークをサポートする1つの通信リンクを提供するためにイーサネット、トークンリング、または複数の他の型の物理的接続機構に結合するための、1つのモデム、1つのネットワークインターフェイスカード、もしくは、複数の他の周知のインターフェイス装置のような、1つの通信装置(図示せず)を含んでもよい。別の言い方をすれば、システム400は、数多くのクライアントおよび/またはサーバに対して、例えば1つの会社のイントラネットまたはインターネットのような1つの従来のネットワークインフラストラクチャを介して結合されてもよい。
上述の例より少なくまたは多く装備された1つのシステムが、ある実施については望ましい場合もあることが理解される。したがって、システム400の構成は、価格上の制約、性能要件、技術上の改良、および/または他の状況などの数多くの要因によっては、実施毎に異なる場合がある。
注意すべきなのは、本明細書において説明されている複数の実施形態は、プロセッサ402〜406などの1つのプログラムされたプロセッサの制御下で実施されるが、代替実施形態においては、実施形態は、複数のフィールドプログラム可能ゲートアレイ(FPGA)、複数のトランジスタトランジスタ論理(TTL)、または複数の特定用途向け集積回路(ASIC)などの任意のプログラム可能またはハードコードによる論理によって、全体的または部分的に実施されてもよい。加えて、本発明の複数の実施形態は、複数のプログラムされた汎用コンピュータ構成要素および/または複数のカスタム化されたハードウェア構成要素によって実施されてもよい。したがって、本明細書に開示された事項は、列挙された複数の実施形態が複数のハードウェア構成要素の1つの特定の組み合わせによって実施されるといった、本発明の様々な実施形態を1つの特定の実施形態に限定するように解釈されるものではない。
図5は、本発明の1つまたはそれ以上の実施形態を実施するのに用いられる1つのマルチスレッドプロセッサ500の一実施形態を示すブロック図である。一実施形態によれば、1つのプロセッサ500は、1つの単一集積回路として形成されてもよい。他の実施形態によれば、複数の集積回路が共に1つのプロセッサ500を形成してもよく、また別の実施形態によれば、複数のハードウェアおよびソフトウェアルーチン(例えば、複数のバイナリ変換ルーチン)が共にプロセッサ500を形成してもよい。プロセッサ500は、図4のプロセッサ402〜406のうちの1つまたはそれ以上を含んでもよい。図示のように、1つのバス/メモリコントローラ520は、1つのフロントエンド530に対して実行するための複数の命令を提供してもよい。フロントエンド530は、複数の命令ポインタ570に従って、様々なスレッドから複数の命令の取り出しを導いてもよい。命令ポインタ論理は、再現されて、複数のスレッドをサポートしてもよい。
一実施形態によれば、フロントエンド530は、複数の命令を複数のスレッド/プロセッサ分割可能リソース540に対してさらなる実行のために与えてもよい。複数のスレッド/プロセッサ分割可能リソース540は、複数のスレッドがプロセッサ500内でアクティブの場合に、複数の特定のスレッド専用の論理的に別個の複数の区画を含んでもよい。複数のスレッド/プロセッサ分割可能リソース540は、例えば、複数の命令キューを含んでもよい。1つの単一スレッドモードの場合、複数のスレッド/プロセッサ分割可能リソース540の複数の区画を組み合わせて、1つのスレッド専用の1つの単一の大きな区画を形成してもよい。
一実施形態によれば、プロセッサ500は、再現状態580をも含んでもよい。再現状態580は、1つの論理プロセッサについてコンテキストを維持するのに充分な複数の状態変数を含んでもよい。再現状態580で、複数のスレッドが状態変数記憶の競合なしに実行してもよい。加えて、レジスタ割り当て論理が各スレッドについて再現されてもよい。再現状態関連論理は、複数の入力命令を実行のために準備するための適切なリソース区画と共に動作してもよい。
一実施形態によれば、複数のスレッド/プロセッサ分割可能リソース540は、複数の共有リソース550に対して複数の命令を渡してもよい。複数の共有リソース550は、複数の命令の出所に関係なく、複数の命令で動作してもよい。例えば、複数のスケジューラおよび実行部が、スレッドを意識しない複数の共有リソースであってもよい。複数の分割可能リソース540は、各アクティブスレッドにおいて継続的な進行を提供する1つの公平なやり方で、複数のスレッド間で交互に行うことによって、複数の命令を複数のスレッドから複数の共有リソース550に対して与えてもよい。
一実施形態によれば、複数の共有リソース550の後に、複数のスレッド/プロセッサ分割可能リソース560の別の組が続いてもよい。複数のスレッド/プロセッサ分割可能リソース560は、1つの再順序付けバッファなどの複数の廃棄リソースを含んでもよい。したがって、複数のスレッド/プロセッサ分割可能リソース560は、各スレッドからの複数の命令の実行が適切に終了し、かつ当該スレッドについて適切な状態が適切に更新されることを確実にしてもよい。
一実施形態によれば、1つのメモリ位置の一定のポーリングまたは複数の命令の実行すら必要とせずに、スリープ‐起動比較および交換を介して効率的な同期機能を実施する1つの機構が、複数のプログラマに対して提供されてもよい。例えば、メモリアクセスモニタ510は、メモリアクセスモニタ510が監視を許可されるであろう1つのメモリアクセス位置についての情報をプログラム可能であってもよい。従って、メモリアクセスモニタ510は、1つのモニタ位置情報レジスタ512を含んでもよく、モニタ位置情報レジスタは、比較論理514を用いてバス/メモリコントローラ520から受信したメモリ位置情報に対して比較される。
モニタ位置情報レジスタ512は、命令を再開または呼び起こさせるであろう周期の型および/またはアドレスを規定する詳細含んでもよい。モニタ510は、レジューム信号を開始する1つのタイムアウトカウンタを含んでもよい。また、モニタ510は、1つのバスを渡る情報に対応するアドレスを含む1つのレジスタ512を含んでもよい。バスおよび(例えば、タイムアウトカウンタを有する)レジスタ512間の1つの比較が行われる。任意の周期は、1つの明示的な書き込み周期の形式であってもよく、または所有のための1つの読み出し(例えば、キャッシュラインの排他的所有となる行為)または1つのキャッシュ可能なラインの排他的所有を得ようと試みる他のエージェントによる1つの無効化周期であってもよい。
図6は、CMPXCHG_SW機構614〜618を用いた複数のプロセッサ602〜606を有する1つのシステム600の一実施形態を示すブロック図である。図示のように、システム600は、1つのロック634を取り合う複数のプロセッサ602〜606を含み、ロックは、メモリ632内の共有空間/変数636に対する(矢印638によって示すような)複数のアクセスを制御するように割り当てられる。示された実施形態において、各プロセッサ602〜606は、CMPXCHG_SW機構614〜616を用い、当該機構は、各プロセッサ602〜606上で実施されたハードウェアであってもよく、ソフトウェアベースの1つの同期符号を用いて実行される。また、命令シーケンス例620〜624は、各プロセッサ602〜606について、一実施形態の明確性およびよりよい理解のために示されている。
図示のように、CMPXCHG_SW命令608は、プロセッサ602上で実行され、共有メモリ空間636に対するアクセスのためのロック634を取得するのに成功する。メモリ632の共有空間636は、プロセッサ602がセマフォを所有している期間、用いられてもよいが、プロセッサ602は、取得処理の間、排他状態のロック634を取得して、ロック634に対する複数の他の行為を防止してもよい。その後、共有状態を用いて、ロック634の1つのコピーを共有してもよい。一実施形態において、他のプロセッサ604〜606は、フリーでないロック634を試行する場合、プロセッサ604〜606におけるCMPXCHG_SW命令610〜612をスリープにする。別の言い方をすれば、例えば、プロセッサ604が取得したロック634を得ようとシークする場合、ロック634はプロセッサ602によって使用中であることを示す1つの値がメモリ632から返されて、一実施形態において、ロック634が利用可能になるまでプロセッサ604を1つの連続する「while」ループに入れる代わりに、プロセッサ604におけるCMPXCHG_SW命令610をスリープさせる。同様に、プロセッサ606がシークしていて取り合いとなっているロック634がふさがっている場合、プロセッサ606におけるCMPXCHG_SW命令612をもスリープさせる。
一実施形態において、CMPXCHG_SW命令610〜612を1つのスリープ状態にすることは、CMPXCHG_SW命令610〜612はアイドルであり、それを起動またはトリガする1つのイベントを待っていることを示す。CMPXCHG_SW命令610〜612がアイドルまたはスリープ状態である間、CMPXCHG_SW命令610〜612が起動、実行、および廃棄されるまで、プロセッサ606〜608は、複数の他の命令628〜630の実行などといった複数の他のタスクの実行を継続していてもよい。但し、命令628〜630は、廃棄されることはないであろう。別の言い方をすれば、任意の後続のロード(例えば、命令628または630)はその値を得て、複数の所定のタスクおよび計算を行うことができるが、プロセッサ604〜606において1つの一時的または投機的な状態で待機しうる。再順序バッファ(ROB)からの任意の命令を順不同で実行できるが、最も古いCMPXCHG_SW命令610〜612が起動されて廃棄されるまでは、まだ投機的段階にある新規またはより若い命令628〜630は、廃棄されなくてもよい。
プロセッサ604〜606に様々なタスクを行わせて、ローカルの共有コピー上で継続的にスピン待ち(ロードおよび比較)する代わりに、CMPXCHG_SW命令610〜612がスリープである間、プロセッサ604〜606がブロックまたはボトルネックしないようにするのに役立つ。この技法により、電力および時間の節約、ならびに性能の向上に役立つ。さらに、本技法は、同期している複数の処理の間で動的なデータ共有のない、同時並行進行に役立つ。例えば、1つのハッシュテーブルを1つのロック634によって保護して、複数の処理が同時にそれを更新しないようにすると想定すると、2つの処理がハッシュテーブルの互いに異なる部分の更新を必要とした場合(例えば、互いに異なるビンに要素を追加する)、本技法は、当該2つの処理が同時に進行することを許可しうる。これは、たとえ任意の他のプロセッサを動的に妨害しなくても、任意の他のプロセッサ上の全ての有益なワークを完全にブロックするという犠牲の上で、1つのプロセッサに更新を行わせるということと区別される。例えば、プロセッサ602は、ロックを所有して、適切なハッシュテーブルビンを見つけて、それをその値で更新してもよい。ところで、ロックを所有していないプロセッサ604も、適切なビンを見つけ、書き込まれるべき値および位置を準備してもよいが、プロセッサ604がロックおよび廃棄CMPXCHG_SW命令608を取得できるまでは、ハッシュテーブルを更新する複数の命令を破棄しなくてもよい。
一実施形態において、CMPXCHG_SW命令610〜612の起動は、1つのイベントの発生でトリガされうる。イベントは、例えば、ロック634が解除される(そして、利用可能になる)こと、または(命令シーケンス例620において)ロック634を有するプロセッサ602によって1つの試行がなされて、ロック634の潜在的な利用可能性を示すロック値を書き換えることである。例えば、命令610がスリープ状態にある間、プロセッサ604は、1つの新たなロック値(例えば、ロックが解除される)をシークするか、または1つのプロセッサによるロック値を変更しようとする1つの試行(例えば、ロックが場合によっては解除され、共有空間636を含むキャッシュラインが無効化され、ロック634を含むキャッシュラインが無効化される)を観測することによって、ロック634の利用可能性を監視してもよい。1つのプロセッサによってロック値を変更しようとする試みがなされると(例えば、プロセッサ602が、ロック変数に書き込みを行う排他的所有を得るために、プロセッサ604〜606の(図示しない)複数のキャッシュ内の変数を無効化する)、CMPXCHG_SW命令610の起動がトリガされる。その後、プロセッサ604は、新たな値を読み出し、再び、共有空間636内のロック634(例えば、ロック変数)を要求して、要求に応答してロック変数634を受信し、CMPXCHG_SW命令610が実行および廃棄され、(CMPXCHG_SW610命令がスリープしている間に実行された)複数の任意の他の命令628も、その後廃棄される。プロセッサ610をスリープさせることによって、プロセッサ604は、典型的なロード、比較、および分岐シーケンスを通る継続的なストリーミングを回避することで、効率性を高めかつ電力を節約するのに役立つ。
一実施形態において、待ち(「While」ループ)がハードウェアにおいて実施されてもよいので、CMPXCHG_SW機構614〜618は、1つのソフトウェアベースのスピンループを回避するのに役立つ。一実施形態において、CMPXCHG_SW機構614〜616はハードウェアおよび/またはソフトウェアに基づいており、「While」ループをMPXCHG_SW命令610〜612のスリープに統合することで、「While」ループの継続的な実行を回避するのに役立つ。機構614〜616を実施および同期させるための同期符号の一例には、以下のものが含まれる。
eax(accumulator)=0 // 0はフリーを示す
ecx = 1 // 1はロック済みを示す
label: cmpxchg [lock_var],ecx;
// lock_var = 0であれば、1 zfに設定、lock_var = 1を設定
//それ以外はsleep
jne label // 取得に失敗したら、再試行
instr1; // 複数の臨界領域命令
instr2; // 複数の臨界領域命令
lock_var = 0; // ロック解除
eax(accumulator)=0 // 0はフリーを示す
ecx = 1 // 1はロック済みを示す
label: cmpxchg [lock_var],ecx;
// lock_var = 0であれば、1 zfに設定、lock_var = 1を設定
//それ以外はsleep
jne label // 取得に失敗したら、再試行
instr1; // 複数の臨界領域命令
instr2; // 複数の臨界領域命令
lock_var = 0; // ロック解除
符号中、eaxおよびecx(また、ebx,edxなど)は、様々なレジスタを指し、また、総称して、R1またはReg1,R2またはReg2,R3またはReg3,などとして知られ、zfは、プロセッサのゼロフラグ状態レジスタを指し、および、jne(等しくなければジャンプ)は、試行が成功したかどうかを判断することを指し、試行が成功なかった場合は、ラベル(例えば、jneラベル)に分岐して戻って、1つの命令を実行する。
図7は、CMPXCHG_SW機構を実行するための1つの処理の一実施形態を示すフロー図である。まず、処理ブロック702において、1つのマルチプロセッサシステムにおける1つのプロセッサは、1つのロックを取得するためにシークする。シークは、ロックの1つの排他的所有を必要としなくともよく、代わりに、ロックは1つの共有状態で取得されてもよいことが意図されている。判断ブロック704において、ロックが利用可能かどうかについての判断がなされる。ロックが利用可能な場合、プロセッサは、処理ブロック706において、従来の比較および交換動作を用いてそれを取得する。
一実施形態において、ロックが利用可能でない場合、処理ブロック708において、プロセッサにおけるCMPXCHG_SW命令は、例えばロック値の1つの変化(または1つの試行済み変化)で起動されるまで、スリープされる。別の言い方をすれば、ロックが利用できない旨を示すメモリからの値がプロセッサに一旦返されると、CMPXCHG_SW命令を「While」ループ内で継続的にスピンさせて各ループでロックを再要求する代わりに、ロックをシークしているプロセッサにおけるCMPXCHG_SW命令は、スリープされる。処理ブロック710において、プロセッサのメモリシステムは、ロックの利用可能性または潜在的な利用可能性を示しうるロック値のいかなる変化をも監視する。例えば、ロックにアクセスするプロセッサは、ロック値を変更しようと試行して、複数の他のプロセッサについてのロックを解除して、シークおよび取得を行ってもよい。そのような行為は、メモリシステムによって観測されてもよいし、スリープしているCMPXCHG_SW命令を起動して、生じうるロック利用可能性を見守ってもよい。
一実施形態において、CMPXCHG_SW命令がスリープ中に、プロセッサのメモリシステムは、ロック値の変化を監視する。さらに、ROB内の複数の他のCMPXCHG_SWおよびロード命令を含む複数の他の命令をロードおよび実行して、プロセッサが処理ブロック712において複数の他のタスクの実行を継続してもよい。言い換えれば、プロセッサにおけるCMPXCHG_SW命令のスリープは、プロセッサを1つの継続スピンまたは「While」ループに入れさせないだけでなく、プロセッサをブロックまたは無能にしない。代わりに、順不同ではあるが、任意の数の後続の命令を臨界領域内にロードおよび投機的に実行してもよいが、最も古い命令(例えば、スリープしているCMPXCHG_SW命令)が廃棄されるまでは、スリープしているCMPXCHG_SW命令より若い命令は、廃棄されないようにしてもよい。どのプロセッサもブロックされず、複数の有益なタスクの実行を継続するので、電力時間の節約および性能の改善となる。
判断ブロック714において、ロック値が変化したか、または値を書き換えようとする試行がなされたかについての判断がなされる。もしそうでなければ、処理ブロック712において、複数の他の命令を実行する処理が継続する。しかしながら、ロック値を変更しようとする試行がなされたか、または値が変更された場合には、スリープしているCMPXCHG_SW命令の起動が、処理ブロック716においてトリガされる。CMPXCHG_SW命令がいったん起動されて、ロックが利用可能となると、ロックは、処理ブロック706においてプロセッサによって取得される。CMPXCHG_SW命令の起動の一部として、その後、CMPXCHG_SW命令は廃棄されてもよい。また、臨界領域における、投機的に実行が行われた任意の後続の命令も、廃棄されてもよい。
図8は、CMPXCHG_SW機構を実施するための1つの状態機械800の一実施形態を示すブロック図である。キャッシュラインがプロセッサ内で利用可能で、かつロックが利用可能である場合、初期ソフトウェア「While」ループが渡されて、命令(例えば、CMPXCHG_SW命令)が実行される。図示のように、ロードが802で発行される。キャッシュラインについて1つのヒット804があり、かつ、値を読み出した後に、ロックが利用可能である(ロックが「ロック解除された」)と判断された場合には、キャッシュラインの所有のための読み出し(RFO)806を求める1つの要求が発行される。その後、ロックをアトミックに取得するための機構が開始されることにより、ロードなどの様々なマイクロ命令(uops)が開始されることとなる。
一実施形態において、ロードが802で発行されるが、810でキャッシュラインがミスされるかまたは他のプロセッサがそれを保持(例えば、ロックされる)か、もしくは単に、読み出しまたはロックされているか否かを知るのに充分なデータがキャッシュ内にない、ということなる。これには、バスを介して得るには多少時間がかかる場合があり、実行するのに数クロックかかる場合がある。これにより、812でメモリ順序バッファ(MOB)内のロードがスリープすることになる。812でMOBを用いて、ロードを含みかつバッファを記憶して、メモリ動作の適切な順序付けが保持されることを確実なものとする。また、MOBを用いて、1つのキャッシュミス、メモリ順序依存性、スリープ条件など、何らかの理由で完了しなかった複数のロードを再発行する。さらに、MOBは、複数のロードが完了しなかった複数の理由を追跡して、完了を妨げて条件に対処した後に、それらを起動する。一実施形態において、データはキャッシュ内にあり、値を読み出した後、810で、ロックされているか(例えば、他のプロセッサが所有しているか)が判断される。これにより、812でMOB内でロードがスリープすることとなる。一実施形態において、(1)キャッシュラインが利用可能になる場合(例えば、プロセッサのキャッシュ内にある場合)または(2)他のプロセッサが変数内の値を書き換えようとする場合のいずれかである場合、キャッシュラインを潜在的に利用可能にすると、ロードが814で起動するようにしてもよい。ロードが816で再発行され、818でキャッシュラインが利用可能である場合(例えば、1つのヒットがある場合)でかつロックが利用可能な(ロック解除された)場合、806で所有の要求が発行される。しかしながら、820でさらなるミスがある場合、812でロードはスリープに戻る。
一実施形態において、1つのタイムアウトカウンタを導入して、スリープ時間に対して1つの制約を提供してもよい。例えば、タイムアウトカウンタ822の開始で、プロセッサが812でスリープを開始してから所定の時間量が経過した後、スリープ時間は終了する。別の言い方をすれば、プロセッサは、他のプロセッサまたは1つのイベントによる起動を諦めて、代わりに、他のタスクを行う(例えば、処理ステップ806へ進む)。例えば、タイムアウトカウンタが必要となるのは、1つのロックが1つのイナクティブなプロセッサによって所有される場合であって、それにより、複数の他のプロセッサがロックを取得することがほとんどまたは全くできない状態で待つこととなりうる場合である。一実施形態において、タイムアウトカウンタによって起動されると、命令はロックを取得しようと試行して、1つの失敗条件で廃棄となってもよい。他の実施形態において、起動されると、命令はロック取得の試行を風刺して、単に1つの失敗条件で廃棄となってもよい。また、ロックを待つプロセッサ(例えば、スリープモードのCMPXCHG_SW命令を有するプロセッサ)は、824でタイムアウトして、特定のロックを取得するのを諦め、複数の他のタスクを行って、効率的であることを継続する。また、824のタイムアウトにより、812のスリープ状態から抜け出すことになり、プロセッサが当分の間ロック取得をシークすることを示すこととなりうるが、他のプロセッサがラインを書き込んでいることを示すキャッシュの無効化を証明することはできなかった。
CMPXCHG機構は、インテルのペンティアムプロセッサのような、任意の数のマイクロプロセッサアーキテクチャにおいて実施されてもよいし、かつそれらとの互換性があってもよい。そのようなアーキテクチャにおける変化は、プロセッサのMOBおよびデータキャッシュ部(DCU)とっては些細なものであってもよく、「スリープ」モードを実施するための状態機械800をDCU内に設置してもよい。例えば、メモリシステム内の3ビットのデータを用いて、ロック済みまたはロック解除を示してもよく、それによって、1つのレジスタ(例えば、eax)の最下位の3ビットに対して比較を行うことができる。しかしながら、任意の数のビット(例えば、32)をメモリシステムにおいて用いて、ロック済み/ロック解除状態を示すことができ、数は必要なまたは所望の方法で分割することができる(例えば、ロックおよびロック解除のビットは、必ずしも等しくなくてもよい)。さらに、CMPXCHG_SW機構は、0および1の値をそれぞれロック解除およびロック値に用いて、3つの最下位ビットが充分であるようにしてもよい。一実施形態において、1つのスレッドが、1および0の代わりに、1つの識別(ID)値を挿入して、状態を示すことができる。また、任意のゼロでない値がロックを示す一方で、0がフリーを示すこともできる。一実施形態において、3ビットの期待フリー値と、メモリからロードされた複数のビットの値とが異なる場合、ロックはフリーでないとみなされるが、値が一致したら、ロックはフリーとみなされてもよいし、またはみなされなくてもよい。例えば、比較によって、現在の値と、ロック解除された値との1つの部分的な一致を示してもよい。部分的な比較によって、ロック取得の1つの試行を開始する1つの動作(例えば、処理ブロック806および808)を開始してもよい。しかしながら、すべてのビットをCMPXCHG_SW機構を用いて比較する場合は、動作により、ロックが他のプロセッサによって取得されていることがわかる場合があり、符号内の分岐を取って再試行する場合がある。
一実施形態において、例えば、比較器がeax[2:0]の値(例えば、eaxの下位3ビット)を保持し、データがload_with_store_intent uopのための1つのキャッシュ(例えば、L1キャッシュ)から返された場合は、eax比較器に対して比較される。load_with_store_intent uopは、cmpxchg_sw命令の1つの構成uopであり、使用中のメモリ位置の値を、1つのロック変数としてロードする。2つが等しい場合、値はライトバックバス上に書き戻される。2つが等しくない場合、DCUはライトバックを打ち切って、ロードをMOB内でスリープさせ、タイムアウトカウンタを開始する。MOBがロックキャッシュラインについて1つの無効化スヌープを検出する場合、load_with_store_intent uopを起動および再発信する。その後、タイムアウトカウンタは、クロック毎に減分されてもよい。0に等しい場合、DCUは、1つのタイムアウト信号をMOBに送ってもよい。MOBは、タイムアウト信号を受信するときに、load_with_store_intent uopを発信する。この発信中に、load_with_store_intent uopは実行完了し、比較結果に関係なく、廃棄となる。
本発明の実施形態例の上述の説明において、様々な進歩的な局面の1つまたはそれ以上を理解する助けとなる開示を効率的に行う目的で、本発明の様々な特徴が共に1つの単一実施形態、図面、またはその説明にグループ化されることがあることが、理解されるべきである。複数の所定の実施形態例が複数の添付図面において説明されかつ示されてきたが、そのような複数の実施形態は例示にすぎず、限定的ではないこと、および本発明の複数の実施形態は、図示および説明された複数の特定の構成および仕組みに限定されるべきものではないことが理解されるべきである。なぜなら、本開示を検討した当業者にとって様々な修正が生じうるからである。
添付の複数のクレームは、本発明の複数の特徴を詳細に説明する。本発明の複数の実施形態およびその複数の利点は、添付の複数の図面と共に以下の詳細な説明から、最もよく理解されるであろう。
1つの共有メモリ空間をアクセスする複数のプロセッサを有するコンピュータシステムの一例を示すブロック図である。
1つの命令についての1つの符号化手法の一実施形態を示すブロック図である。
スリープ‐起動機構を用いた比較および交換動作を有する1つの処理アーキテクチャの一実施形態を示すブロック図である。
本発明の1つまたはそれ以上の実施形態を実施するのに用いられるコンピュータシステムの一例を示すブロック図である。
本発明の1つまたはそれ以上の実施形態を実施するのに用いられるマルチスレッドプロセッサの一例を示すブロック図である。
スリープ‐起動機構を用いた比較および交換動作を行う複数のプロセッサを有する1つのシステムの一実施形態を示すブロック図である。
スリープ‐起動機構を用いた比較および交換動作を行うための1つの処理の一実施形態を示すフロー図である。
スリープ‐起動機構を用いた比較および交換動作のための状態機械の一実施形態を示すブロック図である。
Claims (24)
- 1つの方法であって、1つのプロセッサにおける1つの命令を実行して、前記プロセッサのために1つのロックを取得するのに役立つことと、前記ロックが利用可能でない場合、前記プロセッサにおける前記命令をスリープさせることとを含み、前記命令は、1つのイベントが生じるまでスリープすることを特徴とする方法。
- 請求項1に記載の前記方法であって、前記ロックに対応する1つのメモリアドレスを監視することをさらに備え、前記ロックは、1つのメモリの1つの共有メモリ空間に対するプロセッサアクセスを制御するためのものであることを特徴とする方法。
- 請求項1に記載の前記方法であって、前記命令は、前記プロセッサによる前記ロック取得のための1つの比較および交換動作を行う1つの比較および交換命令を備え、前記比較および交換動作は、1つのアトミック比較および交換動作を含むことを特徴とする方法。
- 請求項1に記載の前記方法であって、前記イベントが生じたかを決定するための1つのロック値を有する1つの宛先を監視することであって、前記宛先の前記監視は、以下の、前記ロック値における1つの変更と、前記ロック値を変更する試行とのうち、1つまたはそれ以上を観測することを含み、前記宛先は、1つのレジスタまたは1つのメモリ位置を含む、監視と、前記イベントの前記発生を検出することと、前記イベントが発生した場合、前記命令を起動することであって、前記イベントは、以下の、前記ロック値が変化した場合は前記ロックが利用可能になったことと、前記ロック値を変更する前記試行が発生した場合は前記ロックが潜在的に利用可能になったこととのうち、1つまたはそれ以上を備る、起動と、前記プロセッサが前記利用可能なロックを取得することとをさらに含むことを特徴とする方法。
- 請求項1に記載の前記方法であって、前記命令の前記スリープ化は、以下の、複数の命令をロードすることと、前記複数の命令を実行することとのうち、1つまたそれ以上を含む複数の他のタスクを行うために、前記プロセッサのための複数のリソースを用いることを放棄することを含むことを特徴とする方法。
- 請求項5に記載の前記方法であって、前記複数のリソースの前記放棄は、
1つのレジスタプール内の複数のレジスタを放棄することと、
1つの命令キュー内の複数の命令キュー入力を放棄することと、
1つの記憶バッファ内の複数の記憶バッファ入力を放棄することと、
1つの再順序付けバッファ内の複数の再順序付けバッファ入力を放棄することとを含むことを特徴とする方法。 - 1つのプロセッサであって、1つの命令を実行して、前記プロセッサのために1つのロックを取得することが可能な1つの実行部と、前記プロセッサが前記ロックを取得できなかった場合、前記命令をスリープさせる1つのスリープ‐起動機構とを備え、前記命令は、1つのイベントが生じるまでスリープすることを特徴とするプロセッサ。
- 請求項7に記載の前記プロセッサであって、前記命令は、前記プロセッサによる前記ロック取得のための1つの比較および交換動作を行う1つの比較および交換命令を備え、前記比較および交換動作は、1つのアトミック比較および交換動作を含むことを特徴とするプロセッサ。
- 請求項7に記載の前記プロセッサであって、前記イベントが生じたかを決定するための1つのロック値を有する1つの宛先を監視する監視論理であって、前記宛先の前記監視は、以下の、前記ロック値における1つの変更と、前記ロック値を変更する1つの試行とのうち、1つまたはそれ以上を観測することを含み、前記宛先は、1つの専用レジスタまたは1つのメモリ位置を含む、監視論理と、前記イベントの前記発生を検出する検出論理と、前記イベントが発生した場合、前記命令を起動する前記スリープ‐起動機構であって、前記イベントは、以下の、前記ロック値が変化した場合は前記ロックが利用可能になったことと、前記ロック値を変更する前記試行が発生した場合は前記ロックが潜在的に利用可能になったこととのうち、1つまたはそれ以上を備える、前記スリープ‐起動機構とをさらに備えることを特徴とするプロセッサ。
- 請求項7に記載の前記プロセッサであって、前記命令の前記スリープ化は、以下の、複数の命令をロードすることと、前記複数の命令を実行することとのうち、1つまたそれ以上を含む複数の他のタスクを行うために、前記プロセッサのための複数のリソースを用いることを放棄することを含むことを特徴とするプロセッサ。
- 請求項10に記載の前記プロセッサであって、前記複数のリソースの前記放棄は、
1つのレジスタプール内の複数のレジスタを放棄することと、
1つの命令キュー内の複数の命令キュー入力を放棄することと、
1つの記憶バッファ内の複数の記憶バッファ入力を放棄することと、
1つの再順序付けバッファ内の複数の再順序付けバッファ入力を放棄することとを含むことを特徴とするプロセッサ。 - 請求項7に記載の前記プロセッサであって、前記プロセッサを1つのメモリに結合させる1つのバスインターフェイスをさらに備え、前記バスインターフェイスは、前記専用のレジスタをさらに備えることを特徴とするプロセッサ。
- 請求項7に記載の前記プロセッサであって、前記比較および交換命令を含む複数の命令を有する1つの命令の組をさらに備えることを特徴とするプロセッサ。
- 1つのシステムであって、1つの第1のプロセッサを含む複数のプロセッサであって、1つの命令を実行して、前記第1のプロセッサのために1つのロックを取得することが可能な1つの実行部と、前記第1のプロセッサが前記ロックを取得できなかった場合、前記命令をスリープさせる1つのスリープ‐起動機構であって、前記命令は、1つのイベントが生じるまでスリープする、スリープ‐起動機構とを有する、第1のプロセッサと、前記複数のプロセッサに結合され、前記複数のプロセッサによって共有された、1つのメモリ空間を有する1つのメモリと、前記メモリおよび前記複数のプロセッサに結合され、前記メモリ空間に対するアクセスを制御する前記ロックを有する1つのロック記憶位置とを備えることを特徴とするシステム。
- 請求項14に記載の前記システムであって、前記命令は、1つの論理プロセッサまたはスレッドを有する前記第1のプロセッサによる前記ロック取得のための1つの比較および交換動作を行う1つの比較および交換命令を備えることを特徴とするシステム。
- 請求項14に記載の前記システムであって、前記イベントが生じたかを決定するための1つのロック値を有する1つの宛先を監視する監視論理であって、前記宛先の前記監視は、以下の、前記ロック値における1つの変更と、前記ロック値を変更する1つの試行とのうち、1つまたはそれ以上を観測することを含み、前記宛先は、1つの専用レジスタまたは1つのメモリ位置を含む、監視論理と、前記イベントの前記発生を検出する検出論理と、前記イベントが発生した場合、前記命令を起動する前記スリープ‐起動機構であって、前記イベントは、以下の、前記ロック値が変化した場合は前記ロックが利用可能になったことと、前記ロック値を変更する前記試行が発生した場合は前記ロックが潜在的に利用可能になったこととのうち、1つまたはそれ以上を備える、前記スリープ‐起動機構とをさらに備えることを特徴とするシステム。
- 請求項14に記載の前記システムであって、前記命令の前記スリープ化は、以下の、複数の命令をロードすることと、前記複数の命令を実行することとのうち、1つまたそれ以上を含む複数の他のタスクを行うために、前記第1のプロセッサのための複数のリソースを用いることを放棄することを含むことを特徴とするシステム。
- 請求項17に記載の前記システムであって、前記複数のリソースの前記放棄は、
1つのレジスタプール内の複数のレジスタを放棄することと、
1つの命令キュー内の複数の命令キュー入力を放棄することと、
1つの記憶バッファ内の複数の記憶バッファ入力を放棄することと、
1つの再順序付けバッファ内の複数の再順序付けバッファ入力を放棄することとを含むことを特徴とするシステム。 - 複数の命令の複数の組を表すデータを記憶する1つの機械読み取り可能媒体であって、複数の命令の前記複数の組は、機械によって実行される場合、以下の、1つのプロセッサにおける1つの命令を実行して、前記プロセッサのために1つのロックを取得するのに役立つことと、前記ロックが利用可能でない場合、前記プロセッサにおける前記命令をスリープさせることとを含み、前記命令は、1つのイベントが生じるまでスリープすることとを前記機械に対して行わせることを特徴とする媒体。
- 請求項19に記載の前記機械読み取り可能媒体であって、複数の命令の前記複数の組は、前記機械によって実行されると、前記ロックに対応する1つのメモリアドレスを監視することを前記機械に対してさらに行わせ、前記ロックは、1つのメモリの1つの共有メモリ空間に対するプロセッサアクセスを制御するためのものであることを特徴とする媒体。
- 請求項19に記載の前記機械読み取り可能媒体であって、前記命令は、前記プロセッサによる前記ロック取得のための1つの比較および交換動作を行う1つの比較および交換命令を備え、前記比較および交換動作は、1つのアトミック比較および交換動作を含むことを特徴とする媒体。
- 請求項19に記載の前記機械読み取り可能媒体であって、複数の命令の前記複数の組は、前記機械によって実行されると、前記イベントが生じたかを決定するための1つのロック値を有する1つの宛先を監視することであって、前記宛先の前記監視は、以下の、前記ロック値における1つの変更と、前記ロック値を変更する試行とのうち、1つまたはそれ以上を観測することを含み、前記宛先は、1つのレジスタまたは1つのメモリ位置を含む、監視と、前記イベントの前記発生を検出することと、前記イベントが発生した場合、前記命令を起動することであって、前記イベントは、以下の、前記ロック値が変化した場合は前記ロックが利用可能になったことと、前記ロック値を変更する前記試行が発生した場合は前記ロックが潜在的に利用可能になったこととのうち、1つまたはそれ以上を備える、起動と、前記プロセッサのために前記利用可能なロックを取得することとを前記機械に対してさらに行わせることを特徴とする媒体。
- 請求項19に記載の前記機械読み取り可能媒体であって、前記命令の前記スリープ化は、以下の、複数の命令をロードすることと、前記複数の命令を実行することとのうち、1つまたそれ以上を含む複数の他のタスクを行うために、前記プロセッサのための複数のリソースを用いることを放棄することを含むことを特徴とする媒体。
- 請求項23に記載の前記機械読み取り可能媒体であって、前記複数のリソースの前記放棄は、
1つのレジスタプール内の複数のレジスタを放棄することと、
1つの命令キュー内の複数の命令キュー入力を放棄することと、
1つの記憶バッファ内の複数の記憶バッファ入力を放棄することと、
1つの再順序付けバッファ内の複数の再順序付けバッファ入力を放棄することとを含むことを特徴とする媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/880,638 US8607241B2 (en) | 2004-06-30 | 2004-06-30 | Compare and exchange operation using sleep-wakeup mechanism |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008324669A Division JP5054665B2 (ja) | 2004-06-30 | 2008-12-19 | スリープ‐起動機構を用いた比較および交換動作 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006031691A true JP2006031691A (ja) | 2006-02-02 |
JP2006031691A5 JP2006031691A5 (ja) | 2008-01-31 |
Family
ID=34941754
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005178287A Pending JP2006031691A (ja) | 2004-06-30 | 2005-06-17 | スリープ‐起動機構を用いた比較および交換動作 |
JP2008324669A Expired - Fee Related JP5054665B2 (ja) | 2004-06-30 | 2008-12-19 | スリープ‐起動機構を用いた比較および交換動作 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008324669A Expired - Fee Related JP5054665B2 (ja) | 2004-06-30 | 2008-12-19 | スリープ‐起動機構を用いた比較および交換動作 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8607241B2 (ja) |
EP (1) | EP1612661A3 (ja) |
JP (2) | JP2006031691A (ja) |
KR (1) | KR100829638B1 (ja) |
CN (1) | CN100407136C (ja) |
TW (1) | TWI285332B (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012527042A (ja) * | 2009-05-13 | 2012-11-01 | アップル インコーポレイテッド | 電力管理型ロック最適化 |
JP2012531681A (ja) * | 2009-12-18 | 2012-12-10 | インテル・コーポレーション | プロセッサの待機状態をイネーブルする命令 |
EP2610747A2 (en) | 2011-12-28 | 2013-07-03 | Fujitsu Limited | Information processing apparatus and method of controlling information processing apparatus |
JP2015530679A (ja) * | 2012-10-04 | 2015-10-15 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | 高効率アトミック演算を使用した方法および装置 |
Families Citing this family (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8099538B2 (en) | 2006-03-29 | 2012-01-17 | Intel Corporation | Increasing functionality of a reader-writer lock |
US20070271450A1 (en) * | 2006-05-17 | 2007-11-22 | Doshi Kshitij A | Method and system for enhanced thread synchronization and coordination |
US8468526B2 (en) * | 2006-06-30 | 2013-06-18 | Intel Corporation | Concurrent thread execution using user-level asynchronous signaling |
KR101205323B1 (ko) * | 2006-09-28 | 2012-11-27 | 삼성전자주식회사 | 리텐션 입/출력 장치를 이용하여 슬립모드를 구현하는시스템 온 칩 |
US20100241812A1 (en) * | 2007-10-18 | 2010-09-23 | Nxp B.V. | Data processing system with a plurality of processors, cache circuits and a shared memory |
US8312458B2 (en) | 2008-02-01 | 2012-11-13 | International Business Machines Corporation | Central repository for wake-and-go mechanism |
US8725992B2 (en) | 2008-02-01 | 2014-05-13 | International Business Machines Corporation | Programming language exposing idiom calls to a programming idiom accelerator |
US8015379B2 (en) * | 2008-02-01 | 2011-09-06 | International Business Machines Corporation | Wake-and-go mechanism with exclusive system bus response |
US8145849B2 (en) * | 2008-02-01 | 2012-03-27 | International Business Machines Corporation | Wake-and-go mechanism with system bus response |
US8452947B2 (en) * | 2008-02-01 | 2013-05-28 | International Business Machines Corporation | Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms |
US8225120B2 (en) | 2008-02-01 | 2012-07-17 | International Business Machines Corporation | Wake-and-go mechanism with data exclusivity |
US8171476B2 (en) | 2008-02-01 | 2012-05-01 | International Business Machines Corporation | Wake-and-go mechanism with prioritization of threads |
US8880853B2 (en) * | 2008-02-01 | 2014-11-04 | International Business Machines Corporation | CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock |
US8640141B2 (en) | 2008-02-01 | 2014-01-28 | International Business Machines Corporation | Wake-and-go mechanism with hardware private array |
US8612977B2 (en) * | 2008-02-01 | 2013-12-17 | International Business Machines Corporation | Wake-and-go mechanism with software save of thread state |
US8341635B2 (en) | 2008-02-01 | 2012-12-25 | International Business Machines Corporation | Hardware wake-and-go mechanism with look-ahead polling |
US8316218B2 (en) * | 2008-02-01 | 2012-11-20 | International Business Machines Corporation | Look-ahead wake-and-go engine with speculative execution |
US8127080B2 (en) | 2008-02-01 | 2012-02-28 | International Business Machines Corporation | Wake-and-go mechanism with system address bus transaction master |
US8386822B2 (en) * | 2008-02-01 | 2013-02-26 | International Business Machines Corporation | Wake-and-go mechanism with data monitoring |
US8250396B2 (en) * | 2008-02-01 | 2012-08-21 | International Business Machines Corporation | Hardware wake-and-go mechanism for a data processing system |
US8732683B2 (en) | 2008-02-01 | 2014-05-20 | International Business Machines Corporation | Compiler providing idiom to idiom accelerator |
US8516484B2 (en) | 2008-02-01 | 2013-08-20 | International Business Machines Corporation | Wake-and-go mechanism for a data processing system |
US8788795B2 (en) * | 2008-02-01 | 2014-07-22 | International Business Machines Corporation | Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors |
US8145931B2 (en) * | 2008-05-27 | 2012-03-27 | Sharp Laboratories Of America, Inc. | Imaging device with adaptive power saving behavior and method for use thereon |
US8555292B2 (en) * | 2008-06-27 | 2013-10-08 | Microsoft Corporation | Synchronizing communication over shared memory |
EP2144163A1 (en) * | 2008-07-09 | 2010-01-13 | Software AG | Method and system for synchronizing the execution of a critical code section |
US7792916B2 (en) * | 2008-10-20 | 2010-09-07 | International Business Machines Corporation | Management of cluster-wide resources with shared variables |
US20100146169A1 (en) * | 2008-12-05 | 2010-06-10 | Nuvoton Technology Corporation | Bus-handling |
US8230201B2 (en) * | 2009-04-16 | 2012-07-24 | International Business Machines Corporation | Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system |
US8082315B2 (en) * | 2009-04-16 | 2011-12-20 | International Business Machines Corporation | Programming idiom accelerator for remote update |
US8145723B2 (en) * | 2009-04-16 | 2012-03-27 | International Business Machines Corporation | Complex remote update programming idiom accelerator |
US8886919B2 (en) | 2009-04-16 | 2014-11-11 | International Business Machines Corporation | Remote update programming idiom accelerator with allocated processor resources |
US8266383B1 (en) * | 2009-09-28 | 2012-09-11 | Nvidia Corporation | Cache miss processing using a defer/replay mechanism |
US8601242B2 (en) * | 2009-12-18 | 2013-12-03 | Intel Corporation | Adaptive optimized compare-exchange operation |
US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
US8516577B2 (en) * | 2010-09-22 | 2013-08-20 | Intel Corporation | Regulating atomic memory operations to prevent denial of service attack |
US8732496B2 (en) * | 2011-03-24 | 2014-05-20 | Nvidia Corporation | Method and apparatus to support a self-refreshing display device coupled to a graphics controller |
TWI646422B (zh) | 2012-06-15 | 2019-01-01 | 英特爾股份有限公司 | 在處理器中之免消歧義失序載入/儲存佇列方法、微處理器、和非暫態性電腦可讀取儲存媒體 |
KR101996351B1 (ko) | 2012-06-15 | 2019-07-05 | 인텔 코포레이션 | 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐 |
WO2013188701A1 (en) | 2012-06-15 | 2013-12-19 | Soft Machines, Inc. | A method and system for implementing recovery from speculative forwarding miss-predictions/errors resulting from load store reordering and optimization |
CN104583936B (zh) * | 2012-06-15 | 2019-01-04 | 英特尔公司 | 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统 |
WO2013188306A1 (en) | 2012-06-15 | 2013-12-19 | Soft Machines, Inc. | Reordered speculative instruction sequences with a disambiguation-free out of order load store queue |
EP2862069A4 (en) | 2012-06-15 | 2016-12-28 | Soft Machines Inc | DEFINING INSTRUCTIONS TO REORDER AND OPTIMIZE LOADING AND STORAGE |
KR20170102576A (ko) | 2012-06-15 | 2017-09-11 | 인텔 코포레이션 | 분산된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐 |
US8719504B2 (en) * | 2012-09-14 | 2014-05-06 | International Business Machines Corporation | Efficient processing of cache segment waiters |
CN103885824B (zh) * | 2012-12-21 | 2017-06-20 | 华为技术有限公司 | 接口控制电路、设备和标识切换方法 |
TWI573015B (zh) | 2013-06-19 | 2017-03-01 | 祥碩科技股份有限公司 | 防超時方法及資料處理系統 |
US9465432B2 (en) * | 2013-08-28 | 2016-10-11 | Via Technologies, Inc. | Multi-core synchronization mechanism |
US9466091B2 (en) | 2013-09-26 | 2016-10-11 | Imagination Technologies Limited | Atomic memory update unit and methods |
US11257271B2 (en) | 2013-09-26 | 2022-02-22 | Imagination Technologies Limited | Atomic memory update unit and methods |
GB2520603B (en) * | 2013-09-26 | 2016-04-06 | Imagination Tech Ltd | Atomic memory update unit and methods |
US9817703B1 (en) * | 2013-12-04 | 2017-11-14 | Amazon Technologies, Inc. | Distributed lock management using conditional updates to a distributed key value data store |
US9372500B2 (en) | 2014-02-27 | 2016-06-21 | Applied Micro Circuits Corporation | Generating a timeout signal based on a clock counter associated with a data request |
US9454370B2 (en) | 2014-03-14 | 2016-09-27 | International Business Machines Corporation | Conditional transaction end instruction |
US9558032B2 (en) | 2014-03-14 | 2017-01-31 | International Business Machines Corporation | Conditional instruction end operation |
US10120681B2 (en) | 2014-03-14 | 2018-11-06 | International Business Machines Corporation | Compare and delay instructions |
US10198274B2 (en) * | 2015-03-27 | 2019-02-05 | Intel Corporation | Technologies for improved hybrid sleep power management |
US10191747B2 (en) * | 2015-06-26 | 2019-01-29 | Microsoft Technology Licensing, Llc | Locking operand values for groups of instructions executed atomically |
US10346168B2 (en) | 2015-06-26 | 2019-07-09 | Microsoft Technology Licensing, Llc | Decoupled processor instruction window and operand buffer |
CN105068904A (zh) * | 2015-08-17 | 2015-11-18 | 浪潮电子信息产业股份有限公司 | 一种linux系统下自动计算内存理论带宽的方法 |
US11216378B2 (en) * | 2016-09-19 | 2022-01-04 | Advanced Micro Devices, Inc. | Techniques for handling cache coherency traffic for contended semaphores |
CN110825530B (zh) * | 2018-08-10 | 2022-12-23 | 昆仑芯(北京)科技有限公司 | 用于人工智能芯片的指令执行方法和装置 |
US10901807B2 (en) | 2019-01-02 | 2021-01-26 | International Business Machines Corporation | Computer system with concurrency for multithreaded applications |
US11105645B2 (en) * | 2019-05-28 | 2021-08-31 | Glazberg, Applebaum & co. | Navigation in vehicles and in autonomous cars |
CN112130904B (zh) * | 2020-09-22 | 2024-04-30 | 黑芝麻智能科技(上海)有限公司 | 处理系统、处理器间通信方法、以及共享资源管理方法 |
JP7509021B2 (ja) * | 2020-12-14 | 2024-07-02 | トヨタ自動車株式会社 | 車載システム、車載システム制御方法、及び車載システム制御プログラム |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5274809A (en) * | 1988-05-26 | 1993-12-28 | Hitachi, Ltd. | Task execution control method for a multiprocessor system with enhanced post/wait procedure |
US5487156A (en) * | 1989-12-15 | 1996-01-23 | Popescu; Valeri | Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched |
JPH05225149A (ja) | 1992-02-13 | 1993-09-03 | Toshiba Corp | ロック方式 |
JPH07319716A (ja) | 1994-05-23 | 1995-12-08 | Hitachi Ltd | 計算機システムの資源の排他制御方式 |
JP3745800B2 (ja) | 1995-09-29 | 2006-02-15 | 富士通株式会社 | 共有資源の排他制御方式 |
US5787026A (en) * | 1995-12-20 | 1998-07-28 | Intel Corporation | Method and apparatus for providing memory access in a processor pipeline |
US6938263B2 (en) * | 1996-04-23 | 2005-08-30 | Sun Microsystems, Inc. | System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space |
US6237024B1 (en) | 1998-03-20 | 2001-05-22 | Sun Microsystem, Inc. | Method and apparatus for the suspension and continuation of remote processes |
US5860126A (en) * | 1996-12-17 | 1999-01-12 | Intel Corporation | Controlling shared memory access ordering in a multi-processing system using an acquire/release consistency model |
US5889983A (en) * | 1997-01-21 | 1999-03-30 | Intel Corporation | Compare and exchange operation in a processing system |
US5790851A (en) | 1997-04-15 | 1998-08-04 | Oracle Corporation | Method of sequencing lock call requests to an O/S to avoid spinlock contention within a multi-processor environment |
US6112222A (en) | 1998-08-25 | 2000-08-29 | International Business Machines Corporation | Method for resource lock/unlock capability in multithreaded computer environment |
US6223335B1 (en) * | 1998-12-09 | 2001-04-24 | Sun Microsystems, Inc. | Platform independent double compare and swap operation |
JP2001084235A (ja) * | 1999-09-10 | 2001-03-30 | Nec Corp | ロック粒度統計情報を利用した排他制御方法及びプログラムを記録した機械読み取り可能な記録媒体 |
US6493741B1 (en) | 1999-10-01 | 2002-12-10 | Compaq Information Technologies Group, L.P. | Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit |
US6473819B1 (en) * | 1999-12-17 | 2002-10-29 | International Business Machines Corporation | Scalable interruptible queue locks for shared-memory multiprocessor |
US6886105B2 (en) * | 2000-02-14 | 2005-04-26 | Intel Corporation | Method and apparatus for resuming memory operations from a low latency wake-up low power state |
US6615340B1 (en) * | 2000-03-22 | 2003-09-02 | Wilmot, Ii Richard Byron | Extended operand management indicator structure and method |
US6502170B2 (en) * | 2000-12-15 | 2002-12-31 | Intel Corporation | Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes |
JP3796124B2 (ja) * | 2001-03-07 | 2006-07-12 | 株式会社ルネサステクノロジ | スレッド間優先度可変プロセッサ |
WO2003040948A1 (fr) | 2001-11-08 | 2003-05-15 | Fujitsu Limited | Ordinateur et procede de commande |
US7363474B2 (en) | 2001-12-31 | 2008-04-22 | Intel Corporation | Method and apparatus for suspending execution of a thread until a specified memory access occurs |
US7127561B2 (en) * | 2001-12-31 | 2006-10-24 | Intel Corporation | Coherency techniques for suspending execution of a thread until a specified memory access occurs |
JP2004135875A (ja) | 2002-10-17 | 2004-05-13 | Konsho Ryu | 巻取り装置付き靴 |
US7559060B2 (en) * | 2003-06-10 | 2009-07-07 | National Instruments Corporation | Time-bounded program execution |
US7213093B2 (en) * | 2003-06-27 | 2007-05-01 | Intel Corporation | Queued locks using monitor-memory wait |
EP1503309A1 (en) * | 2003-07-31 | 2005-02-02 | Deutsche Börse Ag | Data validity control in straight-through processing systems |
JP2005225149A (ja) | 2004-02-16 | 2005-08-25 | Mitsubishi Paper Mills Ltd | インクジェット記録材料 |
JP4376692B2 (ja) | 2004-04-30 | 2009-12-02 | 富士通株式会社 | 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ |
US7529914B2 (en) * | 2004-06-30 | 2009-05-05 | Intel Corporation | Method and apparatus for speculative execution of uncontended lock instructions |
US7437581B2 (en) * | 2004-09-28 | 2008-10-14 | Intel Corporation | Method and apparatus for varying energy per instruction according to the amount of available parallelism |
US7555630B2 (en) * | 2004-12-21 | 2009-06-30 | Intel Corporation | Method and apparatus to provide efficient communication between multi-threaded processing elements in a processor unit |
US8010969B2 (en) * | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US7882339B2 (en) * | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
US8099538B2 (en) | 2006-03-29 | 2012-01-17 | Intel Corporation | Increasing functionality of a reader-writer lock |
JP4129532B2 (ja) | 2007-09-11 | 2008-08-06 | 株式会社高尾 | 弾球遊技機 |
US7904696B2 (en) | 2007-09-14 | 2011-03-08 | Intel Corporation | Communication paths for enabling inter-sequencer communication following lock competition and accelerator registration |
US8555016B2 (en) | 2008-12-17 | 2013-10-08 | Intel Corporation | Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US8479053B2 (en) | 2010-07-28 | 2013-07-02 | Intel Corporation | Processor with last branch record register storing transaction indicator |
US8446903B1 (en) | 2012-05-22 | 2013-05-21 | Intel Corporation | Providing a load/store communication protocol with a low power physical unit |
-
2004
- 2004-06-30 US US10/880,638 patent/US8607241B2/en not_active Expired - Fee Related
-
2005
- 2005-06-15 TW TW094119878A patent/TWI285332B/zh not_active IP Right Cessation
- 2005-06-17 JP JP2005178287A patent/JP2006031691A/ja active Pending
- 2005-06-23 EP EP05253896A patent/EP1612661A3/en not_active Withdrawn
- 2005-06-28 KR KR1020050056393A patent/KR100829638B1/ko not_active IP Right Cessation
- 2005-06-29 CN CN2005100798027A patent/CN100407136C/zh not_active Expired - Fee Related
-
2008
- 2008-12-19 JP JP2008324669A patent/JP5054665B2/ja not_active Expired - Fee Related
-
2013
- 2013-03-15 US US13/843,305 patent/US9733937B2/en active Active
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012527042A (ja) * | 2009-05-13 | 2012-11-01 | アップル インコーポレイテッド | 電力管理型ロック最適化 |
JP2012531681A (ja) * | 2009-12-18 | 2012-12-10 | インテル・コーポレーション | プロセッサの待機状態をイネーブルする命令 |
JP2014222520A (ja) * | 2009-12-18 | 2014-11-27 | インテル・コーポレーション | プロセッサ、方法、システム、及び、プログラム |
EP2610747A2 (en) | 2011-12-28 | 2013-07-03 | Fujitsu Limited | Information processing apparatus and method of controlling information processing apparatus |
JP2013140447A (ja) * | 2011-12-28 | 2013-07-18 | Fujitsu Ltd | 情報処理装置及び情報処理装置の制御方法 |
KR101472186B1 (ko) * | 2011-12-28 | 2014-12-12 | 후지쯔 가부시끼가이샤 | 정보 처리 장치 및 정보 처리 장치의 제어 방법 |
US9652299B2 (en) | 2011-12-28 | 2017-05-16 | Fujitsu Limited | Controlling the state of a process between a running and a stopped state by comparing identification information sent prior to execution |
JP2015530679A (ja) * | 2012-10-04 | 2015-10-15 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | 高効率アトミック演算を使用した方法および装置 |
Also Published As
Publication number | Publication date |
---|---|
TWI285332B (en) | 2007-08-11 |
KR20060048630A (ko) | 2006-05-18 |
JP2009151793A (ja) | 2009-07-09 |
EP1612661A2 (en) | 2006-01-04 |
CN100407136C (zh) | 2008-07-30 |
US8607241B2 (en) | 2013-12-10 |
US20060005197A1 (en) | 2006-01-05 |
CN1716186A (zh) | 2006-01-04 |
TW200614075A (en) | 2006-05-01 |
US20130232499A1 (en) | 2013-09-05 |
KR100829638B1 (ko) | 2008-05-16 |
JP5054665B2 (ja) | 2012-10-24 |
EP1612661A3 (en) | 2007-09-19 |
US9733937B2 (en) | 2017-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5054665B2 (ja) | スリープ‐起動機構を用いた比較および交換動作 | |
US7266648B2 (en) | Cache lock mechanism with speculative allocation | |
US8065499B2 (en) | Methods and apparatus to implement parallel transactions | |
JP5404574B2 (ja) | マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション | |
AU2011305091B2 (en) | Apparatus, method, and system for dynamically optimizing code utilizing adjustable transaction sizes based on hardware limitations | |
US7882339B2 (en) | Primitives to enhance thread-level speculation | |
US8190859B2 (en) | Critical section detection and prediction mechanism for hardware lock elision | |
US8276149B2 (en) | Thread livelock reduction unit | |
US6370625B1 (en) | Method and apparatus for lock synchronization in a microprocessor system | |
US8539485B2 (en) | Polling using reservation mechanism | |
SG188993A1 (en) | Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region | |
CN107003896B (zh) | 具有共享事务处理资源的装置和数据处理方法 | |
KR20100111700A (ko) | 로킹된 오퍼레이션을 수행하기 위한 방법 및 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070925 |
|
A524 | Written submission of copy of amendment under article 19 pct |
Free format text: JAPANESE INTERMEDIATE CODE: A524 Effective date: 20071211 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080826 |