JP5103396B2 - コンピュータシステムにおいて能動的に同期をとる方法 - Google Patents

コンピュータシステムにおいて能動的に同期をとる方法 Download PDF

Info

Publication number
JP5103396B2
JP5103396B2 JP2008528175A JP2008528175A JP5103396B2 JP 5103396 B2 JP5103396 B2 JP 5103396B2 JP 2008528175 A JP2008528175 A JP 2008528175A JP 2008528175 A JP2008528175 A JP 2008528175A JP 5103396 B2 JP5103396 B2 JP 5103396B2
Authority
JP
Japan
Prior art keywords
address
instruction
count value
processor
matching
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008528175A
Other languages
English (en)
Other versions
JP2009506436A (ja
Inventor
ケイ. アルサップ ミッチェル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 JP2009506436A publication Critical patent/JP2009506436A/ja
Application granted granted Critical
Publication of JP5103396B2 publication Critical patent/JP5103396B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • 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
    • 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/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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
    • 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/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

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

Description

本発明はマイクロプロセッサに関し、より詳細には、マルチプロセッサシステムのプロセッサ間でのプロセスの同期をとる技術に関する。
最新のマイクロプロセッサ性能はこの10年で着実かつ飛躍的に向上している。性能が向上することで動作周波数が増加し、さらに、深いパイプライン方式として周知の技術が非常に向上する。概して、深いパイプライン方式とは、多数のステージを備え、それぞれのステージで処理量を小さくする命令パイプラインを使用することを指す。これにより、パイプライン全体の実行速度をより高速化することが可能となる。このような技術は本業界では非常に有用である。
しかし、周波数の増加ならびに深いパイプライン方式に対しては、いくつかの難点がある。
例えば、高速動作においては、クロックスキューおよび電力消費は著しい。このため、システムレベルの熱収支ポイントに課せられる物理的制約ならびにクロックスクリューを維持することが一層困難となり、このような技術の実用限界が真近に迫っていることが示されている。したがって、業界では、他の技術を用いて性能向上に努めている。性能を向上させる技術の1つのタイプに、マルチコアプロセッサ、より一般的には、マルチプロセッシングの使用が挙げられる。
コンピューティングシステムは、ますます多くのプロセッサ(例えば、プロセッサコア)を使用したマルチプロセッシングスキームを使用しているので、同一メモリデータを干渉するあるいは競うリクエスタ数は、従来のプロセス同期法が適さなくなるまでに増加するおそれがある。例えば、少数のプロセッサがリソースを競っている場合は、構造をロックするだけでコードのクリティカルセクションに適切な性能を与えることができる。例えば、メモリ位置上算術演算をロックすることでも十分となるであろう。マルチプロセッシングのスケールが大きくなるにつれて、このようなプリミティブの効率は低くなる。このために、より進化したプロセッサは、単一メモリ位置をアトミックにアップデートするハードウェア同期プリミティブ(例えば、CMPXCHG、CMPXCHG8、およびCMPXCHG16B)を含む命令セットを追加している。しかし、このようなハードウェアプリミティブが、高性能のプロセッサカウント数が大きいマルチプロセッサに要求される類いの性能を提供し得ないような領域に入りつつある。
多くの従来のプロセッサは、楽観的モデルに基づく同期技術を使用している。つまり、マルチプロセッサ環境で動作する場合、このような従来のプロセッサは、干渉が検出されなくなるまで同期コードを繰返し再実行することで同期を得ることが出来るという想定のもとで動作するように設計されている。このようなタイプの同期は特に、多くのプロセッサが同じ同期イベントを行っているときに時間を無駄にしてしまうおそれがある。その理由は、一度に進行できるのは、1つのプロセッサだけだからである。このため、従来とは異なる同期技術が望ましい。
コンピュータシステムで能動的に同期をとる方法の各種実施形態が開示されている。一実施形態では、該方法は、所与のメモリリソースに排他的アクセスをリクエストするプロセッサを有する。このリクエストは、所与のメモリリソースに関連づけられる1以上のアドレスを含み得る。さらに、該方法では、リクエストのアドレスの各々を、複数のアドレスセットの各アドレスと比較するステップを含む。アドレスセットの各アドレスは、リクエスタが排他アクセスを与えらそれぞれのメモリリソースに対応し得る。加えて、1以上のアドレスのうちいずれかのアドレスが、別の1つのあるいは複数のプロセッサにすでに与えられている複数のアドレスセットのいずれかのアドレスと一致すること、つまりマッチングに応答して、該方法では、マッチングアドレスを含むセットに関連づけられるカウント値を返すステップを含む。このカウント値は、マッチングアドレスに対して競合しているリクエスタの数を示す。特定の一実施形態において、該方法は、複数のアドレスセットのいずれかのアドレスとマッチングする1以上のアドレスがないことに応答して、パスカウント値ゼロを返すステップを含む。
別の実施形態では、コンピュータシステムは、1以上のメモリと結合可能で互いに連結された1つ以上のプロセッサを含む。プロセッサの各々は、所与のメモリリソースへの排他アクセスをリクエストする命令を実行する。このリクエストには、所与のメモリリソースに関連づけられる1以上のアドレスを含んでもよい。さらに、このコンピュータシステムは、リクエスト中のアドレスの各々を複数のアドレスセット中の各アドレスと比較する、同期アービターユニットを含む。
複数のアドレスセット中の各アドレスは、リクエスタが排他アクセスを行うそれぞれのメモリリソースに対応する。同期アービターユニットは、1以上のアドレスのうちのいずれかのアドレスが、複数のアドレスセットのいずれかのアドレスとマッチングすることに応答して、このマッチングアドレスを含むセットと関連づけられるカウント値を返す。このカウント値は、マッチングアドレスに対して競合しているリクエスタの数を示す。
本発明は、様々な改良を行い、また、他の形態で実施することができるが、ここに説明されている特定の実施例は、例示として示さたものであり、以下にその詳細を記載する。しかし当然のことながら、ここに示した特定の実施例は、本発明を開示されている特定の形態に限定するものではなく、むしろ本発明は添付の請求項によって規定されている発明の範疇に属する全ての改良、等価物、及び変形例をカバーするものである。さらに、本明細書において用いられる「できる"may"」という用語は、許可的な意味合い(つまり、そのような可能性を持つ、または可能である)に用いられ、強制的な意味合いではない(つまり、must;しなければいけない)ことに注意すべきである。高性能の同期法をソフトウェアに構築することができるように、高度同期機構(advanced synchronization facility)と呼ばれる一連の命令を使用してもよい。この機構は、非ブロック同期、ウェイトフリー(WaitFree)同期、トランザクショナルメモリの構築をサポートし、これに加えて、このような方法の構築に一般的に使用される、様々な形式の比較およびスワッププリミティブの構築をサポートすることができる。この機構により、非常に様々な同期プリミティブを(ソフトウェアに)構築することができる。
さらに、この高度同期機構により、ソフトウェアは非常に様々な同期の種類のプログラミングをすることが可能となり得る。各種の同期においては、正常終了に必要とされたキャッシュライン、エラー(failure)がコントロールフローをリダイレクトすることができるシーケンスポイント、正常なクリティカルセクションの実行がなされたデータ変更セクション、および、他のシステムのほかの部位に対して正常終了が可視化されて命令シーケンス全体がアトミックすなわち不可分であると見えるようにするシーケンスポイントを、直接特定することができる。
従って、高度同期機構の機能によって、クリティカルセクションに関する書き込み許可が実質的に他のプロセッサ/コアから実質的に同時に見えるようにして、マルチキャッシュラインを取得および解放することが可能となる。このプロセスはリニアライジングとも称される。取得後に、他のいずれかの関連部がマルチキャッシュラインのいずれかに対する何らかの変更の検出が可能となる前に、いくつかの変更を実行することができる。取得および解放の間において、いずれのプロセッサも、これら同じラインの操作許可(例えば、書込み許可)がなされることはない。従来、同様の方法は、関連するラインにハイパートランスポート(TM)ソースダン(Source Done)メッセージを送ることなくなされることになり、これにより同時アクセスを防いでいた。しかしながら、これらのソリューションでは、デッドロックおよび/またはライブロックあるいはタイムアウトを引き起こしてしまう。従って、高度同期機構を実装可能なプロセッサおよびプロセッサコアを含んだコンピュータシステムを以下に説明する。
図1に、コンピュータシステム100の実施形態を示す。コンピュータシステム100は、いくつかの処理ノード312A、312B、312Cおよび312Dを含む。各々の処理ノード312A〜312Dは、各々のそれぞれの処理ノード312A〜312Dに含まれるメモリコントローラ316A〜316Dを介して、それぞれのメモリ314A〜314Dに結合される。さらに、処理ノード312A〜312Dは、処理ノード312A〜312D間の通信に使用されるインターフェースロジック(IF)を含む。例えば、処理ノード312Aは、処理ノード312Bとの通信用にインターフェースロジック318Aを、処理ノード312Cとの通信用にインターフェースロジック318Bを、さらに別の処理ノード(図示せず)との通信用に第3インターフェースロジック318Cを含む。同様に、処理ノード312Bは、インターフェースロジック318D、318E、および318Fを、処理ノード312Cは、インターフェースロジック318G、318H、および318Iを、および、処理ノード312Dは、インターフェースロジック318J、318Kおよび318Lを含む。
処理ノード312Dは、インターフェースロジック318Lを介して複数の入力/出力デバイス(例えば、デバイス320A〜320Bをデイジーチェーン構造で)との通信のために結合されている。他の処理ノードは、他のI/Oデバイスと同様の形式で通信することができる。各プロセッサは、システムの他のプロセッサと関連付けられるメモリとアクセスするためにこのインターフェースを使用してもよい。参照符号の後に文字が付いたコンポーネントは、概して、必要に応じて符号のみで参照される点に留意されたい。例えば、一般的に処理ノードを指す場合には、処理ノード312が用いられる。
処理ノード312は、処理ノード間通信のためにパケットベースリンクを実装する。例示の実施形態では、このリンクは、一方向のラインセットとして実装される(例えば、ライン324Aは処理ノード312Aから処理ノード312Bへのパケット送信に、ライン324Bは処理ノード312Bから312Aへのパケット通信に使用される)。その他のラインセット324C〜324Hは、図1に示すその他の処理ノード間のパケット送信用に使用される。概して、それぞれのラインセット324は、1以上のデータライン、このデータラインに対応する1以上のクロックライン、および、伝送されるパケットの種類を示した1以上のコントロールラインを含んでもよい。
このリンクは、処理ノード間の通信にキャッシュコヒーレントな方式で、あるいは、処理ノードとI/Oデバイス間(あるいは、PCIバスやISAバスなどの従来構造のI/Oバスへのバスブリッジ)の通信に、非コヒーレントな方式で動作することができる。さらに、このリンクは、図示しているような(例えば、320Aおよび320B)I/Oデバイス間にデイジーチェーン構造を用いて、非コヒーレントな方式で動作してもよい。例示の実施形態では、このリンクは、コヒーレントなハイパートランスポートTMリンクあるいは非コヒーレントなハイパートランスポートTMリンク、として実装してもよい点に留意されたい。ただしこれに限らず、他の実施形態では他のリンクが可能である。
I/Oデバイス320A〜320Bは任意の適切なI/Oデバイスであってもよい。例えば、I/Oデバイス320A〜320Bとしては、デバイスを結合可能な(例えば、インターフェースカードやモデム)他のコンピュータシステムとの通信用デバイスを挙げることができる。さらに、I/Oデバイス320A〜320Bとしては、ビデオアクセレータ、オーディオカード、ハードまたはフロッピィディスクドライブコントローラ、SCSI(スモールコンピュータシステムインターフェース)アダプタ、サウンドカード、およびGPIB、フィールドバスインターフェースカードなどの様々なデータ取得カードなどを挙げることができる。“I/Oデバイス”という用語、および“周辺デバイス”という用語は、本明細書では同義語であるものとする。
メモリ314A〜314Dは、任意の適切なメモリデバイスを備えることができる。例えば、メモリ314A〜314Dは、1つ以上のRAMBUS DRAM(RDRAM)、同期DRAM(SDRAM)、DDR SDRAM、スタティックRAMなどを備えてもよい。コンピュータシステム300のメモリアドレス空間は、メモリ314A〜314Dに分割されている。各処理ノード312A〜312Dは、アドレスとメモリ314A〜314Dとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード312A〜312Dの決定に用いるメモリマップを備えていてもよい。メモリコントローラ316A〜316Dは、メモリ314A〜314Dとインタフェースをとるための制御回路を備えてもよい。さらに、メモリコントローラ316A〜316Dは、メモリ要求をキューに記憶するための要求キューを備えていてもよい。メモリ314A〜314Dは、先に説明した機能を実装するために、プロセッサにより実行可能なコードを記憶してもよい。
1つの処理ノードから別の処理ノードへ送信されるパケットは、1以上の中間ノードを通過し得る点に留意されたい。例えば、図1に示すように、処理ノード312Aによって処理ノード312Dに送信されるパケットは、処理ノード312Bか処理ノード312Cのいずれかを通過し得る。適切なルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム100の別の実施形態では、処理ノードの数が、図1に示した実施形態よりも上下してもよい。一般に、パケットは、ノード間のライン324を伝わる1つ以上のビットタイムで送信され得る。ビットタイムは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりとすることができる。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどを含むことができる。
一実施形態では、処理ノード312はさらに、(図2に示すように)1つ以上のプロセッサコアを備えてもよい。各ノードのプロセッサコアは、キャッシュコヒーレントな方式で動作するインターナルパケットベースリンクを介して通信し得る点に留意されたい。さらに、プロセッサコアおよび処理ノード312は、任意の、あるいは全てのメモリ314を共有するように構成することができる点に留意されたい。
一実施形態では、1つ以上のプロセッサコアは、x86アーキテクチャを実装し得るが、他のアーキテクチャも可能であり、考察される。このため、各種プロセッサコアの各々の命令デコーダロジックは、LOCKプレフィックスを使用する命令をマークするように構成され得る。さらに、以下に詳述しているように、プロセッサコアロジックは、LOCKされた命令に関連づけられるマーカを識別可能なハードウェア(図2に示す)を含んでもよい。このハードウェアにより、LOCK命令が使用できるようになり、これにより、高度同期機構の一部としてコードのクリティカルセクションが識別される。
1つ以上のプロセッサが同時に同じメモリリファレンス(例えば、コードのクリティカルセクション)にアクセスしようとすることで生じる干渉効果を減らすために、高度同期機構およびそれに関連するハードウェアをコンピュータシステム100に実装してもよい。以下にさらに詳しく記載しているように、この高度同期機構は新たな命令を用いてもよく、さらに、キャッシュコヒーレントの構成において相互接続され得る同期アービターなどのハードウェアを使用してもよい。
図2に示しているように、同期アービター230は、任意の処理ノード312のノースブリッジユニット290に結合される。これにより、同期アービターは各ノードの高度同期機構のトランザクションに関連づけられる明示的アドレスの検出が可能となる。この同期アービターは、相互接続ネットワークのコヒーレントドメイン内であればどこにでも配置することができる。図面では1つの同期アービターが示されているが、システムが複数のバーチャルマシンを支援するように構成され、さらに、これらのバーチャルマシンがいずれの現実の物理メモリとも共有しない場合、複数の同期アービターは、いくつかのアービターにわたって同期ロードを分散するように構成することができる。
“クリティカルセクション”という言い回しは、本明細書にわたって使用される点に留意されたい。“クリティカルセクション”とは、高度同期機構において使用されるコードのセクションのことであり、LOCKプレフィックスでマークされた1つ以上のメモリリファレンス命令、ACQUIRE命令、およびこのクリティカルセクションを終了するRELEASE命令を含むことができる。一実施形態では、各クリティカルセクションは4つの段階からなる。1)クリティカルセクションにおいて求められるキャッシュラインのアドレスを特定する(例えば、クリティカルセクションに入る)、2)これらのキャッシュラインを取得するためのメカニズムを経る、3)クリティカルセクションのデータをアトミックに変更する、4)キャッシュラインをシステムに解放する。特に、クリティカルセクションコードは、関連のオブザーバによってアトミックに実行されることになる。この第1段階をスペシフィケーション段階(specification phase)と呼び、一方で第3段階はアトミック段階(atomic phase)と呼ぶことが多い。
様々な実施品において、ソフトウェアは、単純な算術オペレーションの実行時に例外が生じない限り、クリティカルセクションのデータを読出し変更する間のデータに“単純な”算術論理操作を実行することができる。データを操作することでクリティカルセクションの内部に例外が生じれば、そのクリティカルセクションのアトミック性(atomicit)つまり一体性が保証されないおそれがある。クリティカルセクションのソフトウェアはアトミック性の不具合を検出し、これらを適切に処理する必要がある。これについて以下に詳述する。
一般に、高度同期機構はウィークメモリモデル(weakened memory model)を利用し、キャッシャブルデータ上でのみ実行してもよい。このウィークメモリモデルにより、高度同期機構は、クリティカルセクションの実行前に様々なプロセッサとメモリバッファとが空き状態となるのを待つことによるプロセッササイクルの無駄を回避することができる。しかし、ソフトウェアが標準のPCストロングメモリ(strong memory)モデルを要求する場合、ソフトウェアは、RELEASE命令の直前にLFENSE命令、SFENSE命令、あるいはMFENSE命令を挿入し、標準PCのメモリの順序付けを保証するようにしてもよい。アンキャッシャブルデータへアクセスできるようにキャッシャブル同期を使用する場合、キャッシャブル同期データが他のいずれかのプロセッサでグローバルに可視状態になる前に最後のLOCKされたストアとRELEASE命令との間のSFENSE命令によって、アンキャッシャブルデータが全体的に可視状態であるということが保証される。これにより、パフォーマンス低下を最小限にしながら、アンキャッシャブルアクセスとキャッシャブルアクセスとのオーバーラップを最大にすることができる。
各種実施形態では、インターフェースロジック318A〜318Lは、リンクからパケットを受信し、リンクに送信されるパケットをバッファリングする各種バッファを備えてもよい。コンピュータシステム100は、パケット送信用に任意の適切なフロー制御メカニズムを用いることができる。インターフェースロジック318A〜318Lに加えて、各処理ノードは、それぞれのバッファインターフェースユニット(BIU)220(図2に示す)を含む。これにより、能動的に同期可能となる機能が与えられる。例えば、以下にさらに記載にしているように、BIU220は、高度同期イベントに関連付けられるこれらの特定のアドレスに関して構成され、さらに、ACQUIRE命令の実行に応答してこれらのアドレスを同期アービター230に送信するように構成することができる。さらに、BIU220は、同期アービター230から受信した応答が、そのアドレスが干渉されていることを示しているか否かを確認するように構成することができる。この応答が、アドレスが干渉されていることを示しているか否かに応じて、BIU220は、プロセッサコア18のレジスタにエラーカウント値(failure count value)を送信することで、および同期アービター230に完了メッセージを送信することで、あるいは、干渉されていないと保証されているときにはクリティカルセクションの実行を可能にすることで、リクエスティングプロセッサコアに不具合を知らせ、そして同期アービター230への終了メッセージの送信を待つ。
図2は、図1の処理ノード312Aと同期アービター230の実施形態のさらに詳細な態様を例示したブロック図である。図2を参照すると、処理ノード312Aはプロセッサコア18Aと18nとを含む。nは任意の数のプロセッサコアを表す。プロセッサコアは様々な実施形態において実質的に同じものとすることができるので、プロセッサコア18Aの詳細な態様だけを以下に記載する。図示しているように、プロセッサコア18Aおよび18nは、バスインターフェースユニット220に結合されている。このバスインターフェースユニットはノースブリッジユニット290に結合されており、これはメモリコントローラ316A、ハイパートランスポートTMインターフェースロジック318A〜318C、および、一方向のリンクペア324I〜324Jを介して同期化アービター230に結合されている。
プロセッサコア18Aは、命令を実行するように構成されたハードウェアを含む。より詳細には、多くのプロセッサにとっては一般的であるように、プロセッサコア18は、1つ以上の命令実行パイプラインを含み、これには、多数のパイプラインステージ、キャッシュストレージおよびコントロール、およびアドレス変換メカニズム(簡素化のために、関連する部分だけを図示する)を含む。したがって、図示しているように、プロセッサコア18Aはレベル1(L1)命令キャッシュ、プレフェッチロジック、および分岐予測ロジックを含む。これらのブロックは命令キャッシュと密結合されているので、これらをまとめてブロック250として図示している。
さらに、プロセッサコア18Aは、L1データキャッシュ207を含む。さらに、プロセッサコア18Aは、命令デコーダ255を含み、命令ディスパッチおよび制御ユニット257は、命令デコーダから命令を受信し、スケジューラ259にオペレーションをディスパッチするように結合されてもよい。さらに、命令ディスパッチおよび制御ユニット257は、マイクロコードリード読出し専用メモリ(MROM)(図示せず)に結合できる。スケジューラ259は、命令ディスパッチおよび制御ユニット257からディスパッチしたオペレーションを受信し、実行ユニット260にオペレーションを発行するように結合されてもよい。様々な実装品では、実行ユニット260は、任意の数の整数実行ユニットと浮動小数点演算ユニットとを含んでもよい。さらに、プロセッサコア18AはTLB206とロード/ストアユニット270を含む。他の実施形態では、(図示していないが)オンチップL2キャッシュがあってもよい。
命令デコーダ255は、デコード命令をオペレーションにデコードするように構成されており、MROMに格納されているオペレーションを用いて、間接的に、あるいは直接的にデコードすることができる。命令デコーダ255は、特定の命令を、実行ユニット260で実行可能なオペレーションにデコードする。単純な命令は単一のオペレーションに対応し、別の実施形態では、さらに複雑な命令は複数のオペレーションに対応するようにできる。一実施形態では、命令デコーダ255は、命令を同時にデコードするために、複数のデコーダ(図示せず)を含んでもよい。各命令は、命令が最初にMROMに送信されるかどうかに応じて、複数のステージで位置合せされて、一連の制御値にデコードされる。これらの制御値は、命令ストリーム内で、オペランドアドレス情報および命令に含まれ得るディスプレイスメントデータまたは即値(immediate data)データとともに、命令ディスパッチおよび制御ユニット257にルーティングされる。以下にさらに記載しているように、メモリ参照命令がLOCKプレフィックスを含む場合は、命令デコーダはマーキングされたアドレスを識別することができる。
ロード/ストアユニット270は、実行ユニット260とデータキャッシュ207との間のインターフェースを取るように構成され得る。一実施形態では、ロード/ストアユニット270は、未処理のロードおよびストアのためにデータとアドレス情報を記憶するいくつかの記憶場所を有するロード/ストアバッファを備え得る。このため、例示の実施形態は、LS1205、リニア(linear)LS2 209、物理LS2 210、およびデータストレージ211を含み得る。さらに、プロセッサコア18Aは、マーカロジック208、およびマーカビット213を含む。
一実施形態では、クリティカルセクションは、確定的方法か楽観的方法の一方で処理されてもよい。高度同期機構の構成に基づいて、また、クリティカルセクションプレディクタの状態に基づいて実行モードを選択することができる。これについては以下にさらに詳細を記載する。各種の実施形態では、入出力基本システム(BIOS)、オペレーティングシステム(OS)、または、仮想メモリマネージャ(VMM)のどれかが高度同期機構の動作モードを構成してもよい。確定的実行モードで動作する場合、ロックされたメモリ参照命令により特定されるアドレスはバンドルアップされて同期アービター230にまとめて送られ、干渉に対しての検査がなされる。キャッシュラインデータが取得され、(許可されれば)クリティカルセクションが実行される。これに対して、楽観的方法で動作する場合、干渉はないものと想定し、(同期アービター230をバイパスすることで)クリティカルセクションが実行される。さらに、他のいずれかのプロセッサがこのクリティカルセクションを干渉していれば、この干渉が検出されることになる。次いで、プロセッサはACQUIRE命令に戻り、アトミック段階から離れて制御フローをリダイレクトする。
高度同期機構は、確定的モードを実装するために同期アービター230を使用してもよい。上述のように、同期アービター230は同期リクエストに関連した物理アドレスを全て検査してアドレスセットをパス(blessと称されることもある)またはアドレスセットをエラー(つまり、拒絶)とする。この検査は、他のいずれかのプロセッサコアあるいはリクエスタが動作しているか、またはその動作中にこれらのアドレスをリクエストしたかに基づいてなされる。そのため、同期アービター230は、ソフトウェアを、能動的に干渉を回避するように構築することも可能である。同期アービターによって干渉が検出される場合、同期アービター230は、リクエスティングプロセッサコアに、一意的な番号(例えば、カウント値233)を有したエラーステータスによりリクエストに応答するようにしてもよい。一実施形態においては、このカウントは、リクエストされているメモリリソースに対して競合しているリクエスタの数を示す。ソフトウェアは、この数を用いることで、その後のクリティカルセクションを介したデータ経路における干渉を能動的に回避するように、クリティカルセクションアクセスが行われることになる他のリソースを選択することが可能である。
従って、図2に示すように、同期アービター230は多数のエントリを含むストレージ232を含む。エントリの各々は、目下処理しているリクエストの物理アドレスを1つ以上記憶することができる。一実施形態では、各エントリは、単一の64バイトのリクエストとして運ばれる物理アドレスを8つまで記憶することができる。さらに、同期アービターエントリは、エントリ中の全てのアドレスに対応するカウント値233を含む。上述のように、このカウント値は、クリティカルセクションのいずれかのアドレスに対して競合しているリクエスタ(例えば、干渉)の数を示す。
同期アービター230内の比較ユニット231は、同期アービター230がアドレスセットを受信すると、このセット中の各アドレスとストレージ232中の全アドレスとの間でマッチングがあるかをチェックする。マッチングがなければ、同期アービター230は、パスカウント値(a passing count value)を返すことでパスレスポンスを発行し、これらのアドレスをストレージ232に記憶するように構成される。一実施形態では、このパスカウント値は0であるが、これに限らず適切なカウント値を用いることができる。しかし、マッチングアドレスがあれば、同期アービタ230は、このマッチングアドレスを含むアドレスセットに関連するカウント値233を増加し、次にこのカウント値をエラーレスポンスの一部として返す。
比較ユニット231は、所望に応じて、様々な方法で実装される構造だけを比較することができる。加えて、別の実施形態では、ストレージ232に記憶される各アドレスは、それぞれのカウントと関連づけられる。そのため、このカウント値は、クリティカルセクションのそれぞれのアドレスの1つに対して競合しているリクエスタ(つまり、干渉)の数を示す。
例示の実施形態では、バスインターフェースユニット(BIU)220は、カウント比較回路221、ロックされたラインバッファ(LLB)222、およびプレディクタ223を備える。さらに、BIU220は、接続されている様々なコンポーネントからのトランザクションを送受信する各種の別の回路を備えることもできるが、このような回路は明瞭化のために省略されている。そのため、BIU220は、ACQUIRE命令の実行に応答して、クリティカルセクションに関連するアドレスセットをLLB222から同期アービター230に送信するように構成することができる。加えて、比較回路221は、同期アービター230から返されるカウント値を比較し、このカウントがパスカウント値(例えば、ゼロ)か、エラーカウント値かどうかをチェックするように構成することもできる。SBB22は任意のタイプのストレージ構造を用いて実装することができる。例えば、SBBは、所望に応じて、既存のメモリアドレスバッファ(MAB)の一部であってもよいし、分離されてもよい。
上述したように、プロセッサコア18が確定的同期モードで動作中であれば、クリティカルセクションに関連するアドレスは、命令をデコードする間にLOCKプレフィックスを用いてマーキングされてもよい。より詳細には、高度同期コードシーケンスに明らかに入っているメモリリファレンスは、適切なMOV命令でLOCKプレフィックスを使用することで、注釈付けされる。LOCKed Load命令の形式は以下のとおりである。
LOCK MOVx reg,[B+I*s+DISP]
より詳細には、通常のメモリ読出し命令は、LOCKプレフィックスを添付することで特別にされる。これにより、アドレスがL1キャッシュ(および、TLB206)を通過する際に、BIU220をして、関連のマーキングされた物理アドレスをLLB222に集めさせる。さらに、書込み許可なく(ReadS, :not ReadM or Read)ラインにアクセス(キャッシュミスの場合に)するように、メモリアクセスストレングス(strength)が低下する。Load命令は、ACQUIRE命令が同期アービター230から戻るまでLS2からリタイアできない。
BIU220から(同期アービター230)へのリクエストがレスポンス待ちの間、LLB222は、インバリデートになっているプローブセマンティックを待ち、1つ(あるいは、それ以上)のプローブが発生すれば、同期アービター230が正常であってもACQUIRE命令はエラーにされる。LOCKプレフィックスは、キャッシュやバスをいずれも特にロックせず、メモリベースのMOVe命令に便利なマーカを単に付加するに過ぎない。そのため、命令をレジスタするLOCKed MOV(他の形態では、LOCKed Loadとも称される)は、データキャッシュパイプラインの下流へと通常は処理される。
従って、アドレス変換において、各リニアアドレスは、LS2 209のリニアアドレス部に記憶される。対応する物理アドレスはTLB206中と物理LS 210内とに記憶され、一方で、対応するデータはデータキャッシュ207とデータLS2 211とに記憶される。マーカロジック208は、付加的マーカビット213をデコードし生成する間に生成されるLOCKプレフィックスマーカを検出する。これにより、このようなアドレスの各々を、クリティカルセクションのパーティシパント(participant)としてマーキングする。データキャッシュでミスするLOCKed Loadはいずれも、Read-to-Shareアクセス セマンティックのメモリ階層を通じてそのキャッシュラインデータをフェッチさせるが、この特定のメモリリソースへの書込み許可はチャックされる。
上述のように、プロセッサコア18が確定的同期モードで動作すれば、クリティカルセクションに関連するアドレスは、LOCKプレフィックスを用いて、命令のデコード中にマーキングされる。より詳細には、高度同期コードシーケンスに明らかに入っているメモリプレフェッチリファレンスは、適切なPREFETCHW命令でLOCKプレフィックスを使用することで、注釈付けされる。このようなタイプのLOCKed Load命令の形式は以下のとおりである。
LOCK PREFETCHW [B+I*s+DISP]
従って、通常のメモリPREFETCHW命令は、LOCKプレフィックスを添付することて特別にされる。これにより、アドレスがL1キャッシュ(および、TLB206)を通過する際に、BIU220に、関連のマーキングされた物理アドレスをLLB222に集めさせるようにする。さらに、メモリアクセスストレングスを低下させて、現実のDRAMがラインにアクセスするのを回避するようにさせる。PREFETCHW命令は、ACQUIRE命令が同期アービター230から戻るまで、LS2からリタイアできない。これらの命令は、クリティカルセクションに入っている(パーティシパントとなっている)キャッシュラインに接触するように用いられ、従って、このクリティカルセクションで必要な他のデータに接触するために、データ(例えば、ポインタ)を必要とする。
スペシフィケーション段階の終わりでは、ACQUIRE命令は、BIU220に、クリティカルセクションに対する全てのメモリリファレンスアドレスがLLB222に記録されることを通知するように用いられる。
このACQUIRE命令は、以下の形式をとる。
ACQUIRE reg, imm8
このACQUIRE命令は、LOCKされたメモリリファレンス命令の数がACQUIRE命令の即値(immediate value)に等しいかどうかチェックする。このチェックがエラーであれば、ACQUIRE命令はエラーコードとともに命令を終了する。そうでなければ、ACQUIRE命令は、BIU220をして、LLB222に記憶された全アドレスを同期アービター230に送信させる。
この命令は、データパス上ではメモリリファレンス命令のように”見える”。そのため、同期アービター230から返されるカウント値は、全てのラインが干渉なしでアクセスできることを確認(あるいは、否定)するように用いることができる。1つの仮想マシンに対して、あるいは1つのシステムに対しては1つの同期アービタ−230しかないので、この“ロード”命令にはアドレスは必要でない。ACQUIRE命令で特定されるレジスタは、プロセッサコア18の宛先レジスタである。
一実施形態では、LOCKされたロードオペレーションのセマンティックは、PROBEの位置を監視するプローブを含み得る。ある位置に対して、ある1つのPROBEが検出されれば、LS1あるいはLS2キューは、読出しの完了を待たずにエラーステータスを返す。LOCKされたロードの数がマイクロアーキテクチャの限界を越えれば、汎用エラー(#GP:general-purpose fault)が生成される。ACQUIRE命令がエラーになれば、LOCKされたロード数はゼロにリセットされることになる。アドレスが、Write Backメモリタイプでなければ、この命令はページエラー(#PF:page fault)か#GPエラーを生成するか、あるいは、ACQUIRE命令がエラーにされる(その後起きる場合)。
いくつかのクリティカルセクションは、(データの変更がある場合に)どのような変更が適切であるか推定するように、多数の算術および制御フローデシジョンを含むようにしてもよい。しかし、ソフトウェアは、これらのタイプの命令が決して実際の例外を引き起こさないように調整しなければならない。一実施形態では、算術およびメモリレファレンス命令は、SSEレジスタ(XMM)か汎用レジスタ(例えば、EAXなど)、あるいはMMXかx87レジスタのいずれかで処理され得る。
上記に記載したように、同期アービター230は、リクエストをまとめてパスするか、リクエストをまとめてエラーにする。同期アービターがリクエストをエラーにすれば、BIU220へのレスポンスは、ゼロビットがセットされた(例えば、RFLAGS.ZF)状態で、“同期アービターFail-to-ACQUIRE”と称される。上述のように、同期アービター230から返されるレスポンスは、干渉の数を示すカウント値233を含むことができる。ソフトウェアはこのカウント値を使用して、上述のように、今後の干渉を減らすようにしてもよい。同期アービター230からのカウント値233は、プロセッサコア18内の汎用レジスタ(図示せず)に運ばれ、条件コードをセットするために使用することもできる。同期アービター230がリクエストをパスすれば、BIU220へのレスポンスは、パスカウント値(例えば、ゼロ)を含むことができる。
一実施形態では、同期アービターアドレスストレージ232がフル状態であれば、リクエストは、マイナス1(−1)などの負のカウント値で返される。これにより、プロセッサコアで実行中のソフトウェアには、システム中のオーバーロードを判断し、しばらくの間、ソフトウェアが同期アービター230へのリクエストを停止できる手段が与えられる。例えば、ソフトウェアは、何か他のものをスケジューリングしてもよいし、あるいは、単に再び同期の試行を行う前の時間を無駄にするだけとしてもよい。
カウントがゼロであれば(同期アービター230が何ら干渉を検出しないことを意味する)、プロセッサコア18は、アトミック段階で命令を実行し、所望に応じてキャッシュラインのデータを操作する。データ操作が完了すると、RELEASE命令が実行され、クリティカルセクションの終了が知らせられる。一実施形態では、このRELEASE命令により、RELEASEメッセージを同期アービター230へ送信することで、変更された全てのデータが実質的に同時に可視状態になる。これにより、関連するキャッシュラインがシステムに解放される。
上述のように、クリティカルコードセクションは、LOCKプレフィックスを備えた1以上のメモリレファレンス命令を含む。この後に、ACQUIRE命令が続く。加えて、このACQUIRE命令の後に条件付きジャンプ命令が続き、これにより、同期アービター230がFail-to-Acquireコードを供給するなら、あるいは、キャッシュラインの取得前にインバリデートになっているプローブが検出されれば、コードはクリティカルセクションを終了することができる。ある実施品では、この条件付きジャンプ命令後に解放命令が続く。2種類のクリティカルセクションを例証するために、以下に2つのアセンブリ言語のクリティカルコードセクションを示す。以下のコードセグメントは、説明目的で使用する例に過ぎない点に留意されたい。他の実施形態も可能であり、考察される。
以下の第1の例示コードセグメントは、二重リンクされたリストで素子を除去することを例示しており、これはRELEASE命令を用いてなされる。
// Concurrency Queue Version
// p is in RAX
LOCK MOVD A,[RAX+next] // a = p->next
LOCK MOVD B,[RAX+prev] // b = p->prev
LOCK MOVD C,[A+next] // c = a->prev
LOCK MOVD D,[B+next] // d = b->next
ACQUIRE reg
JNZ fails
MOVD [A+next],D // a->prev= d
MOVD [B+prev],C // b->prev = c
MOVD [RAX+next],0 // p->next = NULL
MOVD [RAX+prev],0 // p->prev = NULL
RELEASE
以下の例示コードセグメントは、二重リンクされたリストに素子を挿入することを例示しており、これはRELEASE命令を用いてなされる。
// Concurrency Queue Version
// q is in RAX
// p is in RSI
LOCK MOVD S,[RAX+next] // s = q->next
LOCK PREFETCHW [RSI+prev] // touch p->prev
LOCK PREFETCHW [RSI+next] // touch p->next
LOCK PREFETCHW [S+next] // touch s->next
ACQUIRE reg
JNZ fails
MOVD [RAX+next],RSI // q->next = p
MOVD [S+prev],RSI // s->prev = p
MOVD [RSI+next],S // p->next = s
MOVD [RSI+prev],RAX // p->prev = q
RELEASE
一実施形態では、高度同期機構は、"Fail-to-ACQUIRE"と"Fail-to-REQUESTOR"の2種類のエラーをサポートする。Fail-to-ACQUIREエラーは、ACQUIRE命令をゼロビットがセットされた(例えば、RFLAGS.ZF)状態で完了させる。これにより、後続の条件付きジャンプ命令は、アトミック段階のダメージ誘発命令を避けて制御フローをリダイレクトできる。ゼロビットがセットされた(例えば、、RFLAGS.ZF)状態の同期アービターのFail-to-ACQUIREは、1つの種類のFail-to-ACQUIREエラーである。プロセッサのFail-to-ACQUIREは別の種類のエラーである。一実施形態では、クリティカルセクションの実行中、プロセッサコアは、メモリトランザクションを監視することで通信することができる。これらの監視は、実行プロセッサコアのACQUIRE命令で可視状態になる。より詳細には、クリティカルセクションに求められるアドレスの収集開始と同期アービター230のレスポンス間の時間において、プロセッサコア18は、コヒーレントインバリデーションプローブ(例えば、インバリデートになっているプローブ)に対するこれらのアドレスを全て監視する。ラインのいずれかが無効にされていれば、同期アービター230からのレスポンスは無視され、ACUIRE命令はゼロビットにセットされた(例えば、RFLAGS.ZF)状態でエラーにされる。
このFail-to-REQUESTORエラーは、干渉のチェックがなされ、同期アービター230によってパスされたラインでキャッシュヒットがあれば、PROBEとして送信される。リクエスティングプロセッサが、高度同期機構のクリティカルセクションを現在処理している場合、Fail-to-REQUESTORレスポンスは、このリクエスティングプロセッサをFail-to-ACQUIREにする。あるいは、Fail-to-REQUESTORレスポンスは、リクエスティングプロセッサがクリティカルセクションを処理していなければ、リクエスティングプロセッサのBIUに、そのメモリリクエストを再リクエストさせるようにする。そのため、BIU220は、同期アービター230からパス通知を取得する前に、インバリデートになっているプローブの受信に応答して、Fail-to-ACQUIREとするように構成してもよい。
クリティカルセクションのアドレスを取得すると、すでにアドレスが同期アービター230によってパスされているプロセッサコア18は、メモリレファレンス命令がアトミック段階で処理されると、排他アクセス(例えば、書込み許可)用の各キャッシュラインを取得する。パスしたキャッシュラインが到着すると、プロセッサコア18はこのキャッシュラインを保持し、Fail-to-REQUESTORレスポンスでコヒーレントインバリデーションプローブに応答することによって、他のプロセッサコアにこのラインを使わせないようにする、つまりスティールする。Fail-to-REQUESTORは、ネガティブアクナレッジメント(NAK)とも称されることに留意されたい。
上述のように、プロセッサがFail-to-REQUESTOR を受信し、これが高度同期命令シーケンスに入っている場合、その命令シーケンスはACQUIRE命令においてエラーにされてしまう。この場合、後続の条件付きジャンプ命令が行われ、クリティカルセクション中の、メモリレファレンス命令のダメージ誘発部分を避けることができる。しかし、プロセッサがFail-to-REQUESTORを受信し、これが高度同期命令シーケンスに入っていない場合、リクエスティングプロセッサのBIUは、もとのメモリトランザクションを単に再リクエストするだけである。したがって、Fail-to-REQUESTORを送信し、パスしたクリティカルセクションで次のコヒーレントインバリデーションが到着する間の経過時間は、同期アービターのブレッシングが保証された状態で、プロセッサの進行を可能とする。プロセッサの進行が保証されると、高度同期機構を既存の同期メカニズムよりも実効的なものにすることができる。したがって、クリティカルセクションとインターフェースメモリリファレンスは両方とも、必ず実行される(例えば、ライブロックにもデッドロックにもならない)。
上述のように、高度同期機構に入っているプロセッサのパフォーマンスは、クリティカルセクションプレディクタ223を用いて最適化することができる。まず、クリティカルセクションの実行中に干渉が起きないことを予測して、プレディクタ223をセットしてもよい。この方法では、プロセッサコア18は同期アービター230を実際に使用しない。代わりに、プロセッサコア18はLOCKされたメモリリファレンスを記録し、干渉を検出すべく、これらのメモリリファレンスをコヒーレントインバリデーションプローブに対してチェックする。いずれかの干渉が検出される前にクリティカルセクションが終了する場合は、クリティカルセクションのアクティビティは、関連する第三者(interested third party)のいずれにも見られてはおらず、アトミックに実行がなされたかのように実行が行われたことになる。このような特性により、高度同期機構を、いずれの競合も検出されない場合に、既存の同期メカニズムと競合するプロセッササイクルにすることができる。
より詳細には、干渉が検出される場合、プロセッサコア18はACQUIRE命令に対してエラーステータスを生成する。また、後続の条件付き分岐はクリティカルセクションから制御のフローをリダイレクトし、確定的モードを予測するようにプレディクタをリセットする。次のクリティカルセクションが検出される場合、デコーダは、干渉が起こりうることを予測する。さらに、デコーダは、同期アービター230を使って(可能であれば)、クリティカルセクションを処理することになる。
一実施形態では、ミスアラインとなっているデータアイテム(misaligned data item)が現実のクリティカルセクションに入っていないキャッシュラインにスパンが及ばない限り、高度同期機構は、これらのミスアラインとなったデータアイテム上で動作する。接触する全てのキャッシュラインがクリティカルセクションエントリの一部と判断される限り、ソフトウェアは自由に同期アイテムをキャッシュラインの境界に広げることができる。データアイテムがキャッシュラインを同期通信の一部ではない別のキャッシュラインにスパンが及ぶ場合、プロセッサは、アトミック性の不具合を検出せず、また、アトミック性の欠如を知らせない。
さらに、クリティカルセクションデータへのアクセスは、そのデータがメインメモリにあるかどうかに依存する。クリティカルセクションに求められるラインの全ては、クリティカルセクションに入る前に接触され、また、このクリティカルセクションに入る前に、LOCKed LoadあるいはLOCKされたPREFETCHW命令を実行するときに、アクセス権に関する問題(access rights issue)やページフォールトに関する問題(page-faulting issue)が検出され得る。いずれかのリードイン(lead-in)アドレスがエラーになると、後続のACQUIRE命令はエラーにされる。クリティカルセクションに入った後、いずれかの命令が例外を生じさせれば、プロセッサはACQUIRE命令においてエラーを生じさせ、後続の条件付きジャンプにおいて、クリティカルセクションを避けてコントロールをリダイレクトする。
一実施形態では、プロセッサコア18のデコーダが割込みしなければならない場合、プロセッサコアのデコーダは、ACQUIRE命令がゼロビットにセットされた(例えば、RFLAGS.ZF)状態でエラーになるように調整し、ACQUIRE命令において割込みを行う。
同期アービター230がハイパートランスポートTM構成でノースブリッジの実装品に接続されている実施形態では、同期アービター230は、他のコンポーネントが有していない、所定の、および/またはリザーブされたノードIDを割り当てられる。この割り当ては、例えばBIOSによってブート時間に行われる。加えて、上記の実施形態では、カウント値は64ビット値として返されるが、これに限らず他の値も考察される。
図3は、図1および図2に示すコンピュータシステムの実施形態の動作を説明したフローチャートである。図1〜3を集合的に参照すると、ブロック405において、クリティカルセクションの一部として現在のところ動作あるいはアクセスされているキャッシュラインのアドレスは、リスト(例えば、LLB222)に保持されている。例えば、同期アービター230はクリティカルセクションに対応するアドレスをセットでアドレスストレージ232のエントリに記憶する。一実施形態では、アドレスストレージ232の各エントリはさらに、ストレージ232に記憶されている全体のアドレスセットに関連するカウント値を記憶する。上述のように、カウンタ値は、セット中のアドレスのいずれかに対する競合(つまり、干渉)の数を示す。別の実施形態では、同期アービター230は、各エントリに多数のカウント値を記憶する。よって、エントリ中の各アドレスは関連のアドレス値を有する。
高度同期機構を実装しているプロセッサあるいはプロセッサコアが1以上のキャッシュラインへの排他アクセスをリクエストする場合、このリクエストは、クリティカルコードセクションの形式でなされる。例えば、上述のように、アトミックな方法で命令を確実に完了するために(全ての外部オブザーバによって見られるときに))、クリティカルセクションはLOCKされたMOV命令を使用してもよく、この後にACQUIRE命令とRELEASE命令とが続く(ブロック415)。したがって、リクエストされたアドレスセットは、干渉のチェックがなされる。一実施形態では、このアドレスセットは、アドレスストレージ232内の全アドレスと比較される(ブロック420)。上述した実施形態では、LOCKされたMOV命令により、アドレスがマーキングされる。このマーキングは、BIU220に、マーキングされた各アドレスをLLB222に記憶させる。ACQUIRE命令は、BIU220に、64バイトの物理アドレスデータを運ぶアンキャッシャブルライトの形式で、同期アービター230に、LLB222中の全体のアドレスセットを送信させる。同期アービター230はこのアドレスセットをストレージ232の全てのアドレスと比較する。
いずれかのアドレスにマッチングがあれば(ブロック425)、マッチングアドレス関連するカウント値は増加され(ブロック455)、新たなカウント値が、64バイトのレスポンスデータを運ぶアンキャッシャブルライトへのエラーレスポンスとして、返される(ブロック460)。加えて、同期アービター230は、エラーが生じるとアドレスセットを破棄する。BIU220はエラーカウント値を、条件付きフラッグもセットする、リクエスティングプロセッサ/コアのレジスタに送る。この結果、リクエスティングプロセッサ/コアは、後続のオペレーションで別のメモリリソースセットを選択し、(ブロック465)次に同期をとるときに干渉を回避するように、このカウント値を使用してもよい。動作はブロック415で上述したように進行する。
ブロック425に戻ると、ストレージ232にマッチングアドレスがなければ、同期アービター230はパスカウント値(例えば、ゼロ)をBIU220に返す(ブロック430)。加えて、同期アービター230はストレージ232のエントリにアドレスセットを記憶する(ブロック435)。BIU220はACQUIRE命令で特定された、リクエスティングプロセッサ/コアレジスタへパスカウント値を送る。このため、このリクエスティングプロセッサ/コアは、リクエストされたアドレスにおいてデータを操作するか、データ上で動作する(ブロック440)。動作が完了していなければ(ブロック445)、BIU220は同期アービター230への完了メッセージを送信するのが遅くなる。RELEASE命令が実行されるときなど、クリティカルセクションにおいて動作が完了すると、BIU220は同期アービター230に完了メッセージを送信する。完了メッセージを受信すると、同期アービター230はストレージ232から対応するアドレスをフラッシュする。この結果、これらのアドレスをシステムに解放し(ブロック450)別のプロセッサ/コアがこれらのアドレスを使用する。加えて、ロード/ストアユニット270は、リタイアしたクリティカルセクション中の全ての命令に対するデータキャッシュをアップデートする。
上述のように、クリティカルセクションのプロセッシングにおいて、クリティカルセクションのアドレスでコヒーレンシーインバリデーションプローブがヒットすれば、そのプローブに対する応答は、クリティカルセクションのプロセッシングのステータス(つまり、キャッシュラインがすでに取得済みであるかどうか)に応じて決まる。図4は、コヒーレンシーインバリデーションプローブを受信したときの図1および図2の実施形態の動作を記載したフローチャートである。
図1〜図4を集合的に参照すると、図4のブロック505において、プローブは、ロードストアユニット270のクリティカルセクションアドレスで受信され、ヒットする。リクエストされたラインがすでに正常に取得できていれば(ブロック510)、(例えば、同期アービター230がパスカウント値を送った後に、コヒーレンシーインバリデーションプローブ受信され、ストレージ232にこのアドレスセットが記憶される)、BIU220はこのプローブへのレスポンスとして、Failure-to-Requestorレスポンスを送る(ブロック515)。リクエスティングプロセッサコアにおいては、 プロセッサコアがクリティカルセクションで動作していたなら、Failure-to-Requestor レスポンスはACQUIRE命令をエラーにし、そうでなければ、アドレスをリトライさせる必要がある。
ブロック510に戻ると、リクエストされたラインが取得されていれば、プロセッサコアは、同期アービター230から受信したいずれのカウント値も無視してもよい(ブロック520)。ロード/ストアユニット270は、命令ディスパッチおよび制御ユニット257に、プローブヒット(例えば、Prbヒット信号)があること、よって、Failure-to-Acquireがあることを知らせる。そのため、ACQUIRE命令は、上述のように、エラーにされる。そのため、ACQUIRE命令は、外部オブザーバに対しては、単にエラーになる。
上述のコンピュータシステムは、1つ以上のプロセッサコアを含む処理ノードを含むが、別の実施形態では、高度同期機構および関連のハードウェアを所望に応じて、スタンドアローン型プロセッサや、処理ノードとスタンドアローン型プロセッサの組合せを用いて実装してもよいことが考察される。このような実施形態では、各スタンドアローン型プロセッサは、上述のハードウェアの全てあるいは一部を含み、また、高度同期機構の一部である命令を実行することが可能である。プロセッサおよびプロセッサコアという用語は、相違点が具体的に列記されている場合を除いて、同義語のように用いられる。
これまでに説明した機能を実装するコードおよび/またはデータは、コンピュータアクセシブル/リーダブル可能な媒体にも提供される。概して、コンピュータアクセシブル/リーダブル媒体は、命令および/あるいはデータをコンピュータに提供するために使用する間に、コンピュータによってアクセス可能ないずれの媒体を含み得る。例えば、コンピュータアクセシブル媒体としては、次のようなストレージ媒体、つまり、例えば、(固定式あるいはリムーバブル式の)ディスク、CD−ROMやDVD−ROM、CD−R、CD−RW、DVD−RWなどの磁気媒体や光学媒体、RAM(例えば、同期型ダイナミックRAM(SDRAM)、Rambus Dram(RDRAM)、スタティックRAM(SRAM)、など)、ROM、フラッシュメモリなどの揮発性あるいは非揮発性メモリ媒体、、ユニバーサルシリアルバス(USB)インターフェースなどの周辺インターフェースを介してアクセス可能な非揮発性メモリ(例えば、フラッシュメモリ)が挙げられ、さらに、送信媒体を介してアクセス可能な媒体、あるいは、ネットワークおよび/あるいは無線リンクなどの通信媒体を介して伝達される電気、電磁気あるいはデジタル信号などの信号、が挙げられる。
上述の実施形態は、非常に詳細に記載されているが、上記の開示を完全に理解すれば、当業者にとっては様々な変形および変更が明らかになるであろう。添付した請求項は、これらの全ての変形および変更を包含するものと解釈される。
本発明は、一般にマイクロプロセッサに適用可能である。
コンピュータシステムの一実施形態のブロック図。 図1の処理ノードの実施形態の更なる詳細を示したブロック図。 図1および図2に示すコンピュータシステムの一実施形態の動作を説明したフロー図。 コヒーレンシーインバリデーションブローブの受信に応答して図1および図2に示すコンピュータシステムの一実施形態の動作を説明したフロー図。

Claims (10)

  1. プロセッサ(18A、18B)が実行する方法であって、前記プロセッサが、
    所与のメモリリソースへの排他アクセスをリクエストし、前記リクエストは前記所与のメモリリソースに関連づけられたアドレスを特定する1つ以上のmov命令を含むものであり、各mov命令がLOCK命令プレフィックスを含み、
    前記1つ以上のmov命令において特定されたアドレスの各々を、複数のアドレスセットの各アドレスと比較し、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可しているそれぞれのメモリリソースに対応しており、かつ、
    前記1つ以上のmov命令において特定されたアドレスのいずれかのアドレスが前記複数のアドレスセットのいずれかのアドレスとマッチングしていることに応答して、前記マッチングアドレスに関連付けられるカウント値を返し、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示すものであり、
    前記プロセッサは、1つ以上のリクエスタが前記マッチングアドレスに対して競合していることを示すエラーカウント値の受信に応答して、次に同期をとるときに干渉を能動的に回避するようにカウント値を使用して次のリクエストで別のメモリリソースを選択する、方法。
  2. 前記1つ以上のmov命令において特定されたアドレスのいずれも前記複数のアドレスセットのいずれにもマッチングしないことに応答して、パスカウント値ゼロを返すステップをさらに含む、請求項1記載の方法。
  3. 別のプロセッサが別のメモリリソースへの排他アクセスを有しているかどうかを判断するように、前記カウント値を用いるステップをさらに含む、請求項1記載の方法。
  4. 排他アクセスのリクエストでは、前記LOCK命令プレフィックスを有する1つ以上のロックされたメモリリファレンス命令を実行し、前記LOCK命令プレフィックスにより、前記ロックされたメモリリファレンス命令に関連づけられるアドレスが、命令のデコードにおいて1つ以上のインジケーションビットでマーキングされる、請求項1記載の方法。
  5. 排他アクセスのリクエストでは、さらに、前記1つ以上のmov命令において特定されたアドレスの各々を、前記複数のアドレスセットの各々と比較させるACQUIRE命令を実行する、請求項4記載の方法。
  6. 前記1つ以上のmov命令において特定されたアドレスをプロセッサバッファに記憶し、前記ACQUIRE命令の実行に応答して、前記プロセッサバッファの前記全てのアドレスを比較のために送信する、請求項4記載の方法。
  7. 1つ以上のメモリ(314A〜314D)に結合された、互いに連結された1つ以上のプロセッサ(18A、18B)を含み、前記プロセッサの各々は所与のメモリリソースへの排他アクセスをリクエストするために、命令を実行するように構成されており、前記リクエストは前記所与のメモリリソースに関連づけられたアドレスを特定する1つ以上のmov命令を含むものであって、各mov命令がLOCK命令プレフィックスを含み、
    前記1つ以上のmov命令において特定されたアドレスの各々を複数のアドレスセットの各アドレスと比較するように結合されたアービトレーションユニット(230)を含み、前記複数のアドレスセットの各アドレスは、リクエスタが排他アクセスを許可されたそれぞれのメモリリソースに対応しており、
    前記アービトレーションユニットは、前記複数のアドレスセットのうちのいずれかのアドレスが前記1つ以上のmov命令において特定されたアドレスのいずれかのアドレスとマッチングすることに応答して、前記マッチングアドレスを含む前記セットに関連するカウント値(233)を返すように構成されており、前記カウント値は前記マッチングアドレスに対して競合しているリクエスタの数を示すものであり、
    前記プロセッサは、1つ以上のリクエスタが前記マッチングアドレスに対して競合していることを示すエラーカウント値の受信に応答して、次に同期をとるときに干渉を能動的に回避するようにカウント値を使用して次のリクエストで別のメモリリソースを選択するように構成される、コンピュータシステム。
  8. 前記アービトレーションユニットはさらに、前記複数のアドレスセットのうちのいずれのアドレスも前記1つ以上のmov命令において特定されたアドレスとマッチングしないことに応答して、パスカウント値ゼロを返すように構成されている、請求項7記載のコンピュータシステム。
  9. 前記1つ以上のプロセッサの各々はさらに、別のプロセッサが別のメモリリソースへの排他アクセスを有しているかを判断するために、前記カウント値を使用するように構成されている、請求項7記載のコンピュータシステム。
  10. 前記1つ以上のプロセッサの各々はさらに、
    前記LOCK命令プレフィックスを有する1つ以上のメモリリファレンス命令を実行するように構成されており、前記LOCK命令プレフィックスは、前記ロックされたメモリリファレンス命令に関連づけられるアドレスを、命令のデコードにおいて1つ以上のインジケーションビットでマーキングされるようにし、
    前記所与のメモリリソースの1つ以上のアドレスの各々を、前記複数のアドレスセットの各々と比較させるACQUIRE命令を実行する用に構成される、請求項7記載のコンピュータシステム。
JP2008528175A 2005-08-23 2006-08-23 コンピュータシステムにおいて能動的に同期をとる方法 Active JP5103396B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US71054805P 2005-08-23 2005-08-23
US60/710,548 2005-08-23
PCT/US2006/033192 WO2007025112A1 (en) 2005-08-23 2006-08-23 Method for proactive synchronization within a computer system

Publications (2)

Publication Number Publication Date
JP2009506436A JP2009506436A (ja) 2009-02-12
JP5103396B2 true JP5103396B2 (ja) 2012-12-19

Family

ID=37607137

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008528175A Active JP5103396B2 (ja) 2005-08-23 2006-08-23 コンピュータシステムにおいて能動的に同期をとる方法

Country Status (7)

Country Link
US (6) US20070050561A1 (ja)
JP (1) JP5103396B2 (ja)
KR (1) KR101369441B1 (ja)
CN (1) CN101297270A (ja)
DE (1) DE112006002237B4 (ja)
GB (1) GB2445294B (ja)
WO (1) WO2007025112A1 (ja)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070050561A1 (en) * 2005-08-23 2007-03-01 Advanced Micro Devices, Inc. Method for creating critical section code using a software wrapper for proactive synchronization within a computer system
US7681020B2 (en) * 2007-04-18 2010-03-16 International Business Machines Corporation Context switching and synchronization
US20090125519A1 (en) * 2007-11-13 2009-05-14 Intel Corporation Device, system, and method for regulating software lock elision mechanisms
US8135926B1 (en) * 2008-10-21 2012-03-13 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US8108557B2 (en) * 2009-01-22 2012-01-31 Hewlett-Packard Development Company, L.P. System and method for measuring clock skew on a network
US8316368B2 (en) * 2009-02-05 2012-11-20 Honeywell International Inc. Safe partition scheduling on multi-core processors
US9727508B2 (en) * 2009-04-27 2017-08-08 Intel Corporation Address learning and aging for network bridging in a network processor
US9384063B2 (en) * 2009-06-18 2016-07-05 Microsoft Technology Licensing, Llc Eliding synchronization in a concurrent data structure
JP5752686B2 (ja) 2009-08-20 2015-07-22 ラムバス・インコーポレーテッド 原子メモリ装置
US8307198B2 (en) * 2009-11-24 2012-11-06 Advanced Micro Devices, Inc. Distributed multi-core memory initialization
US20110208921A1 (en) * 2010-02-19 2011-08-25 Pohlack Martin T Inverted default semantics for in-speculative-region memory accesses
US8793471B2 (en) 2010-12-07 2014-07-29 Advanced Micro Devices, Inc. Atomic program verification
US8788794B2 (en) 2010-12-07 2014-07-22 Advanced Micro Devices, Inc. Programmable atomic memory using stored atomic procedures
US9122476B2 (en) 2010-12-07 2015-09-01 Advanced Micro Devices, Inc. Programmable atomic memory using hardware validation agent
KR20120101761A (ko) * 2011-03-07 2012-09-17 삼성전자주식회사 캐시 페이즈 검출기 및 프로세서 코어
US10061618B2 (en) 2011-06-16 2018-08-28 Imagination Technologies Limited Scheduling heterogenous computation on multithreaded processors
US9037838B1 (en) * 2011-09-30 2015-05-19 Emc Corporation Multiprocessor messaging system
TWI454922B (zh) * 2011-12-19 2014-10-01 Phison Electronics Corp 記憶體儲存裝置及其記憶體控制器與資料寫入方法
EP2798471A4 (en) * 2011-12-30 2016-12-21 Intel Corp PROCESSORS, METHODS, SYSTEMS AND INSTRUCTIONS FOR ACCESSING A STRUCTURE
US9430391B2 (en) 2012-03-29 2016-08-30 Advanced Micro Devices, Inc. Managing coherent memory between an accelerated processing device and a central processing unit
US9086957B2 (en) 2012-08-02 2015-07-21 International Business Machines Corporation Requesting a memory space by a memory controller
CN103020003A (zh) * 2012-12-31 2013-04-03 哈尔滨工业大学 面向多核程序确定性重演的内存竞争记录装置及其控制方法
KR102020358B1 (ko) * 2013-03-14 2019-11-05 삼성전자 주식회사 단말 및 그 단말에서 애플리케이션 동기화 방법
US9146885B2 (en) * 2013-05-17 2015-09-29 Analog Devices, Inc. Parallel atomic increment
US10229043B2 (en) 2013-07-23 2019-03-12 Intel Business Machines Corporation Requesting memory spaces and resources using a memory controller
US9262343B2 (en) * 2014-03-26 2016-02-16 International Business Machines Corporation Transactional processing based upon run-time conditions
US9256553B2 (en) * 2014-03-26 2016-02-09 International Business Machines Corporation Transactional processing based upon run-time storage values
CN104035888B (zh) * 2014-06-11 2017-08-04 华为技术有限公司 一种缓存数据的方法及存储设备
US9710381B2 (en) 2014-06-18 2017-07-18 International Business Machines Corporation Method and apparatus for cache memory data processing
US9740614B2 (en) * 2014-06-27 2017-08-22 International Business Machines Corporation Processor directly storing address range of co-processor memory accesses in a transactional memory where co-processor supplements functions of the processor
US9619386B2 (en) 2015-01-29 2017-04-11 Kabushiki Kaisha Toshiba Synchronization variable monitoring device, processor, and semiconductor apparatus
US9513960B1 (en) 2015-09-22 2016-12-06 International Business Machines Corporation Inducing transactional aborts in other processing threads
US10261827B2 (en) 2015-10-29 2019-04-16 International Business Machines Corporation Interprocessor memory status communication
US9916179B2 (en) 2015-10-29 2018-03-13 International Business Machines Corporation Interprocessor memory status communication
US9563467B1 (en) 2015-10-29 2017-02-07 International Business Machines Corporation Interprocessor memory status communication
US9760397B2 (en) 2015-10-29 2017-09-12 International Business Machines Corporation Interprocessor memory status communication
US9772874B2 (en) * 2016-01-29 2017-09-26 International Business Machines Corporation Prioritization of transactions based on execution by transactional core with super core indicator
US20170300427A1 (en) * 2016-04-18 2017-10-19 Mediatek Inc. Multi-processor system with cache sharing and associated cache sharing method
RU2623806C1 (ru) 2016-06-07 2017-06-29 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Способ и устройство обработки стереоизображений
US10944694B2 (en) * 2016-12-06 2021-03-09 Hewlett Packard Enterprise Development Lp Predictive arbitration circuit
US10237198B2 (en) 2016-12-06 2019-03-19 Hewlett Packard Enterprise Development Lp Shared-credit arbitration circuit
US10721185B2 (en) 2016-12-06 2020-07-21 Hewlett Packard Enterprise Development Lp Age-based arbitration circuit
US10452573B2 (en) 2016-12-06 2019-10-22 Hewlett Packard Enterprise Development Lp Scripted arbitration circuit
US11157407B2 (en) 2016-12-15 2021-10-26 Optimum Semiconductor Technologies Inc. Implementing atomic primitives using cache line locking
US10223186B2 (en) * 2017-02-01 2019-03-05 International Business Machines Corporation Coherency error detection and reporting in a processor
US10776282B2 (en) 2017-12-15 2020-09-15 Advanced Micro Devices, Inc. Home agent based cache transfer acceleration scheme
US10693811B2 (en) 2018-09-28 2020-06-23 Hewlett Packard Enterprise Development Lp Age class based arbitration
US10796399B2 (en) 2018-12-03 2020-10-06 Advanced Micro Devices, Inc. Pixel wait synchronization
CN109933543B (zh) * 2019-03-11 2022-03-18 珠海市杰理科技股份有限公司 Cache的数据锁定方法、装置和计算机设备
CN110490581B (zh) * 2019-07-18 2022-09-30 拉货宝网络科技有限责任公司 一种分布式系统临界数据资源更新方法及系统
US12093689B2 (en) * 2020-09-25 2024-09-17 Advanced Micro Devices, Inc. Shared data fabric processing client reset system and method
US11740973B2 (en) * 2020-11-23 2023-08-29 Cadence Design Systems, Inc. Instruction error handling
US11972117B2 (en) * 2021-07-19 2024-04-30 EMC IP Holding Company LLC Selecting surviving storage node based on environmental conditions
US11892972B2 (en) * 2021-09-08 2024-02-06 Arm Limited Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state

Family Cites Families (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4574350A (en) 1982-05-19 1986-03-04 At&T Bell Laboratories Shared resource locking apparatus
US4725946A (en) 1985-06-27 1988-02-16 Honeywell Information Systems Inc. P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment
US5142676A (en) * 1988-12-28 1992-08-25 Gte Laboratories Incorporated Separate content addressable memories for storing locked segment addresses and locking processor identifications for controlling access to shared memory
CA2045791A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Branch performance in high speed processor
US5285528A (en) * 1991-02-22 1994-02-08 International Business Machines Corporation Data structures and algorithms for managing lock states of addressable element ranges
US5613139A (en) * 1994-05-11 1997-03-18 International Business Machines Corporation Hardware implemented locking mechanism for handling both single and plural lock requests in a lock message
JP4086259B2 (ja) * 1995-08-04 2008-05-14 株式会社東芝 通信システム
US5968157A (en) * 1997-01-23 1999-10-19 Sun Microsystems, Inc. Locking of computer resources
US6343338B1 (en) * 1997-04-01 2002-01-29 Microsoft Corporation System and method for synchronizing disparate processing modes and for controlling access to shared resources
US6219751B1 (en) * 1998-04-28 2001-04-17 International Business Machines Corporation Device level coordination of access operations among multiple raid control units
US6182186B1 (en) * 1998-06-30 2001-01-30 Sun Microsystems, Inc. Method and apparatus that utilizes lock states to lock resources
US6389519B1 (en) * 1999-07-19 2002-05-14 Ati International Srl Method and apparatus for providing probe based bus locking and address locking
US6651088B1 (en) * 1999-07-20 2003-11-18 Hewlett-Packard Development Company, L.P. Method for reducing coherent misses in shared-memory multiprocessors utilizing lock-binding prefetchs
KR100331565B1 (ko) * 1999-12-17 2002-04-06 윤종용 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치
US6668308B2 (en) * 2000-06-10 2003-12-23 Hewlett-Packard Development Company, L.P. Scalable architecture based on single-chip multiprocessing
US6604162B1 (en) * 2000-06-28 2003-08-05 Intel Corporation Snoop stall reduction on a microprocessor external bus
US6678772B2 (en) * 2000-12-19 2004-01-13 International Businesss Machines Corporation Adaptive reader-writer lock
US6976158B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Repeat instruction with interrupt
US7325064B2 (en) * 2001-07-17 2008-01-29 International Business Machines Corporation Distributed locking protocol with asynchronous token prefetch and relinquish
US6868476B2 (en) * 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
US20060218556A1 (en) * 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US6986005B2 (en) * 2001-12-31 2006-01-10 Hewlett-Packard Development Company, L.P. Low latency lock for multiprocessor computer system
US7089371B2 (en) * 2002-02-12 2006-08-08 Ip-First, Llc Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory
US6721816B1 (en) * 2002-02-27 2004-04-13 Advanced Micro Devices, Inc. Selecting independently of tag values a given command belonging to a second virtual channel and having a flag set among commands belonging to a posted virtual and the second virtual channels
US7328316B2 (en) * 2002-07-16 2008-02-05 Sun Microsystems, Inc. Software transactional memory for dynamically sizable shared data structures
US7814488B1 (en) * 2002-09-24 2010-10-12 Oracle America, Inc. Quickly reacquirable locks
US20040068607A1 (en) * 2002-10-07 2004-04-08 Narad Charles E. Locking memory locations
US7117481B1 (en) * 2002-11-06 2006-10-03 Vmware, Inc. Composite lock for computer systems with multiple domains
US7162589B2 (en) * 2002-12-16 2007-01-09 Newisys, Inc. Methods and apparatus for canceling a memory data fetch
US7290105B1 (en) * 2002-12-16 2007-10-30 Cisco Technology, Inc. Zero overhead resource locks with attributes
US7080209B2 (en) * 2002-12-24 2006-07-18 Intel Corporation Method and apparatus for processing a load-lock instruction using a relaxed lock protocol
US7269717B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US20040268046A1 (en) * 2003-06-27 2004-12-30 Spencer Andrew M Nonvolatile buffered memory interface
US20050120185A1 (en) * 2003-12-01 2005-06-02 Sony Computer Entertainment Inc. Methods and apparatus for efficient multi-tasking
US8332483B2 (en) * 2003-12-15 2012-12-11 International Business Machines Corporation Apparatus, system, and method for autonomic control of grid system resources
US7210019B2 (en) * 2004-03-05 2007-04-24 Intel Corporation Exclusive access for logical blocks
US20050283783A1 (en) * 2004-06-22 2005-12-22 Desota Donald R Method for optimizing pipeline use in a multiprocessing system
JP4287799B2 (ja) * 2004-07-29 2009-07-01 富士通株式会社 プロセッサシステムおよびスレッド切り替え制御方法
US7406625B2 (en) * 2004-08-17 2008-07-29 International Business Machines Corporation Protecting a code range in a program from breakpoints
US20060095685A1 (en) * 2004-11-03 2006-05-04 Bonola Thomas J System and method to coordinate access to a sharable data structure using deferred cycles
US7454570B2 (en) * 2004-12-07 2008-11-18 International Business Machines Corporation Efficient memory update process for on-the-fly instruction translation for well behaved applications executing on a weakly-ordered processor
US7797704B2 (en) * 2005-03-30 2010-09-14 Hewlett-Packard Development Company, L.P. System and method for performing work by one of plural threads using a lockable resource
US20070050561A1 (en) * 2005-08-23 2007-03-01 Advanced Micro Devices, Inc. Method for creating critical section code using a software wrapper for proactive synchronization within a computer system

Also Published As

Publication number Publication date
KR20080038435A (ko) 2008-05-06
US7606985B2 (en) 2009-10-20
US20070050561A1 (en) 2007-03-01
KR101369441B1 (ko) 2014-03-04
US20070050563A1 (en) 2007-03-01
DE112006002237T5 (de) 2008-06-19
US20070050562A1 (en) 2007-03-01
JP2009506436A (ja) 2009-02-12
US20070067529A1 (en) 2007-03-22
WO2007025112A1 (en) 2007-03-01
DE112006002237B4 (de) 2023-04-06
GB2445294A (en) 2008-07-02
US7627722B2 (en) 2009-12-01
US20070050559A1 (en) 2007-03-01
GB2445294B (en) 2009-01-21
US7636819B2 (en) 2009-12-22
US20070050560A1 (en) 2007-03-01
US7552290B2 (en) 2009-06-23
CN101297270A (zh) 2008-10-29
GB0802809D0 (en) 2008-03-26

Similar Documents

Publication Publication Date Title
JP5103396B2 (ja) コンピュータシステムにおいて能動的に同期をとる方法
US10228943B2 (en) Prefetching of discontiguous storage locations in anticipation of transactional execution
JP6490092B2 (ja) トランザクション・ステータスを示すためのコヒーレンス・プロトコルの強化
TWI476595B (zh) 用於交易式記憶體事件處置之硬體中使用者處置器的登錄
US20110208921A1 (en) Inverted default semantics for in-speculative-region memory accesses
US20120124563A1 (en) Compiler support technique for hardware transactional memory systems
US20150355907A1 (en) Reliable transactional execution using digests
US9323568B2 (en) Indicating a low priority transaction
US9720725B2 (en) Prefetching of discontiguous storage locations as part of transactional execution
CN105683906B (zh) 用于利用锁省略和锁定的选择进行数据共享的自适应处理
US9280349B2 (en) Decode time instruction optimization for load reserve and store conditional sequences
US10152418B2 (en) Speculation control for improving transaction success rate, and instruction therefor
US11768771B2 (en) Techniques for handling cache coherency traffic for contended semaphores
Hong et al. Fence-Free Synchronization with Dynamically Serialized Synchronization Variables

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090813

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100421

RD05 Notification of revocation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7425

Effective date: 20100902

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120118

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120417

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120424

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120518

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120525

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120618

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120905

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121001

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

Free format text: PAYMENT UNTIL: 20151005

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5103396

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250