JP2003044452A - 同期メモリ・バリアを実装する方法およびシステム - Google Patents

同期メモリ・バリアを実装する方法およびシステム

Info

Publication number
JP2003044452A
JP2003044452A JP2002157137A JP2002157137A JP2003044452A JP 2003044452 A JP2003044452 A JP 2003044452A JP 2002157137 A JP2002157137 A JP 2002157137A JP 2002157137 A JP2002157137 A JP 2002157137A JP 2003044452 A JP2003044452 A JP 2003044452A
Authority
JP
Japan
Prior art keywords
memory barrier
cpu
instruction
memory
cpus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2002157137A
Other languages
English (en)
Inventor
Paul E Mckenney
ポウル・イー・マッケニー
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2003044452A publication Critical patent/JP2003044452A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

(57)【要約】 【課題】 マルチプロセッサ・コンピュータ・システム
において同期メモリ・バリアを実装するソフトウェアを
提供する。 【解決手段】 ソフトウェアにおけるシーケンシャル・
コンシステンシの選択的なエミュレートは、マルチプロ
セッシング・コンピュータ環境における効率を改善す
る。書込みCPUは、高い優先順位のプロセッサ間割り
込みを用いて、システム内のそれぞれのCPUにメモリ
・バリアを実行するよう強制する。このステップは、シ
ステム内の旧データを無効にする。メモリ・バリア命令
を実行したそれぞれのCPUは、完了を登録し、記憶場
所へインディケータを送信してメモリ・バリア命令の完
了を指示する。データの更新より前に、書込みCPUは
登録を検査してそれぞれのCPUによるメモリ・バリア
実行の完了を保証しなければならない。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、マルチプロセッサ
・コンピュータ環境において同期メモリ・バリア(sy
nchronous memory barrier)
を実装するソフトウェアに関し、特に、共用メモリ・コ
ンピュータ環境においてシーケンシャル・コンシステン
シ(sequential consistency)
を選択的にエミュレートする方法およびシステムに関す
る。
【0002】
【従来の技術】マルチプロセッサ・システムは、複数の
プロセスあるいは単一プロセス内の複数のスレッドを並
列コンピューティングとして知られる方法で同時に実行
できる複数のプロセッサ(ここでは“CPU”とも称さ
れる)を含む。一般的に、マルチプロセッサ・システム
は、複数のプロセスまたは複数のスレッドを、プログラ
ムを逐次的に実行するパーソナル・コンピュータのよう
な一般的なシングル・プロセッサ・システムよりも高速
で実行する。実際の性能上の利益は、マルチスレッド化
されたプロセスの一部および/または複数の個別のプロ
セスを並列に実行できる程度と、特定のマルチプロセッ
サ・システムのアーキテクチャとを含む多数の要因によ
って決まる。プロセスを並列に実行できる程度は、プロ
セスが共用メモリ・リソースへの排他的アクセスを競合
する程度に部分的に依存する。
【0003】共用メモリ・マルチプロセッサ・システム
は、全てのプロセッサがアクセスできる共通の物理記憶
アドレス空間を提供する。ここにおいて複数のプロセ
ス、あるいはプロセス内部の複数のスレッドは、プロセ
スがコンピュータ・システム内の同一の記憶場所を読み
取り同一の記憶場所へ書き込むことを可能にするメモリ
内の共用変数を通じて通信することができる。メッセー
ジ受渡し(message passing)マルチプ
ロセッサ・システムは、共用メモリ・システムと対照的
に、各々のプロセッサごとの個別の記憶空間を有する。
メッセージ受渡しマルチプロセッサ・システムは、プロ
セスに、明示的メッセージを通じて相互に通信すること
を要求する。
【0004】マルチプロセッサ・システムの設計におけ
る重要な問題は、プロセス同期である。プロセスを並列
に実行できる程度は、プロセスが共用メモリ・リソース
への排他的アクセスを競合する程度に部分的に依存す
る。たとえば、2つのプロセスAおよびBが並列に実行
される場合には、プロセスBがバッファにアクセス可能
となる前に、プロセスBは、プロセスAがバッファへ値
を書き込むのを待たなければならないかもしれない。さ
もなければ、プロセスAがバッファの更新途中であるの
と同時にプロセスBがバッファにアクセスするという競
争状態が生ずることとなる。競合を回避するために、同
期メカニズムを与えてプロセス実行の順序を制御する。
これらのメカニズムは、相互排除ロック,条件変数,計
数セマフォ,およびリーダ・ライタ・ロック(read
er−writer lock)を含む。相互排除ロッ
クは、ロックを保持するプロセッサのみが関連したアク
ションを実行することを可能にする。プロセッサが相互
排除ロックを要求する場合、相互排除ロックは、そのプ
ロセッサに排他的に与えられる。ロックを欲する他のプ
ロセッサは、ロックを保持するプロセッサがそれをリリ
ースするまで待たなければならない。上述したバッファ
・シナリオを処理するため、双方のプロセスは、さらな
る実行の前に相互排除ロックを要求する。どちらのプロ
セスがロックを最初に獲得するにしても、バッファを更
新し(プロセスAの場合)、あるいはバッファにアクセ
スする(プロセスBの場合)。他方のプロセッサは、最
初のプロセッサが終了し、ロックをリリースするまで待
たなければならない。このように、ロックは、たとえ並
列に処理を行うプロセッサがプロセスAおよびBを実行
しても、プロセスBがコンシステント(consist
ent)情報を参照するということを保証する。
【0005】同期されるべきプロセスに関して、排他的
アクセスを必要とする命令をクリティカル・セクション
へグループ化し、ロックと関連付けることが可能であ
る。プロセスが自身のクリティカル・セクションにおい
て命令を実行しているとき、相互排除ロックは、同一の
命令を実行している他のプロセスはないということを保
証する。これは、プロセッサがデータの変更を試みてい
る場合には重要である。しかしながら、このようなロッ
クは、プロセスがデータを読み取ることのみを可能にす
る命令を、複数のプロセスが同時に実行するのを不可能
にするという点で短所を有する。リーダ・ライタ・ロッ
クは、対照的に、複数の読取りプロセス(“リーダ”)
がデータベースのような共用リソースに同時にアクセス
することを可能にするが、書込みプロセス(“ライ
タ”)は、コンシステンシを得るため全ての更新を実行
する前にデータベースへの排他的アクセスを備えなけれ
ばならない。リーダ・ライタ・ロックに適した状況の実
例は、多くのリーダと、情報の不定期の更新とを伴うT
CP/IPルーティング構造である。リーダ・ライタ・
ロックの近年の実施例は、Mellor-Crummey and Scott
(MCS)in "Scalable Reader-Writer Synchronization
for Shared-Memory Multiprocessors," Proceedingsof
the Third ACM SIGPLAN Symposium on Principles and
Practice of Parallel Programming,106〜113ペ
ージ(1991年),およびHseih and Weihlin "Scala
ble Reader-Writer Locks for Parallel Systems," Tec
hnical ReportMIT/LCS/TR-521(1991年11月)に
よって説明される。
【0006】リーダ・ライタ・ロックの基本的なメカニ
ズムと構造は周知である。典型的なロックにおいて、複
数のリーダは、アクティブ・ライタが存在しない場合に
限ってロックを獲得できる。反対に、ライタは、アクテ
ィブ・リーダまたは他のライタが存在しない場合に限っ
てロックを獲得できる。リーダがロックをリリースする
とき、それが最後のアクティブ・リーダである場合を除
いて、リーダはアクションを起こさず、最後のアクティ
ブ・リーダである場合には、リーダは次の待機ライタへ
ロックを与える。
【0007】従来のリーダ・ライタ・ロックの短所は、
他のプロセッサが単一データ構造上でスピンしている可
能性がある一方で、複数のプロセッサが当該単一データ
構造をたて続けに変更してしまうという望まれないメモ
リ競合である。結果として生じるキャッシュ・ミス(c
ache misses)は、性能を大きく低下させる
こととなる。当該短所は、Hseih and Weihlによって説
明されるようなより新しいロック・スキームにおいて部
分的に処理されてきた。それらの静的ロック・アルゴリ
ズムは、プロセッサにとってローカルのメモリに格納さ
れた1つのセマフォをプロセッサごとに割り当てる。追
加のセマフォは、ライタに対するゲートの働きをする。
静的ロックを獲得するために、リーダは、自身のローカ
ル・セマフォを獲得することのみを必要とし、スピンの
量を大いに低減させる。一方、ライタは、ここではプロ
セッサごとに1つ存在するセマフォの全てと追加のセマ
フォとをさらに獲得しなければならない。静的ロックを
リリースする場合、リーダは、自身のローカル・セマフ
ォを単にリリースし、ライタは、セマフォの全てをリリ
ースする。ロックは、このようにして、リーダが相互に
干渉せず、リーダが、ロックを獲得するためにシステム
相互接続を繰り返す(go over)必要がないとい
う点で従来のロックより優れた改良を提供する。しかし
ながら、リーダが決して干渉しないという事実は、ライ
タが、多数のプロセッサを備えるシステムにおいて相当
な量の作業をしなければならないということを意味す
る。たとえわずかなパーセントの要求が書き込みである
場合であっても、ライタは、ロックを首尾良く獲得する
ためには、全てのノード上の全てのプロセッサについて
のセマフォを獲得しなければならないので、スループッ
トは非常に悪化する。最後に、複数のリーダ・ライタ・
ロックの使用は、デッドロックしやすい。したがって、
これらの短所は、リーダにロックの獲得を要求しない手
法を促す。
【0008】読取りコピー(read-copy)更新
は、リーダにロックの獲得を要求しない手法の1例であ
る。リーダがロックを獲得しない他の例は、シーケンシ
ャル・コンシステント(sequentially c
onsistent)・メモリ・モデルのような強いメ
モリ・コンシステンシ(consistency)・モ
デルに依存するアルゴリズムを用いる。シーケンシャル
・コンシステント・メモリは、あらゆる実行の結果が、
まるで各プロセッサによって実行されるアクセスが正し
い順序を保たれ、異なるプロセッサ間のアクセスがイン
ターリーブされるかのように同一であることを必要とす
る。シーケンシャル・コンシステンシを実現する一つの
方法は、ある種のメモリ・アクセスの完了を遅らせるこ
とである。したがって、シーケンシャル・コンシステン
ト・メモリは、一般的に非効率である。
【0009】図1〜3は、シーケンシャル・コンシステ
ント・メモリ・モデルにおけるデータ構造5へ新たなエ
レメント30を追加する従来のプロセスの概略図であ
る。図1は、新たなエレメント30をデータ構造5へ追
加するあるいは新たなエレメント30を初期化する前の
データ構造についてのシーケンシャル・コンシステント
・メモリ・モデルを説明する図である。データ構造5
は、第1のエレメント10と第2のエレメント20とを
有する。第1のエレメント10と第2のエレメント20
とは、個々に、3つのフィールド12,14および16
と、22,24および26とを有する。マルチプロセッ
サ環境内のCPUがデータ構造を並行して検索できるよ
うに、データ構造5へ新たなエレメント30を追加する
ためには、新たなエレメント30を最初に初期化する必
要がある。これは、リンクされたデータ構造を検索する
CPUが、破壊されたデータで占められる新たなエレメ
ント内のフィールドを参照することがないということを
保証する。新たなエレメント30のフィールド32,3
4および36の初期化に続いて、新たなエレメントをデ
ータ構造5へ追加できる。図2は、新たなエレメント3
0のフィールド32,34および36の各々の初期化の
後であり、かつデータ構造5への新たなエレメント30
の追加より前の新たなエレメント30を説明する図であ
る。最後に、図3は、フィールド32,34および36
の初期化に続くデータ構造への第3のエレメントの追加
を説明する図である。このように、シーケンシャル・コ
ンシステント・メモリ・モデルにおいて、プロセス内の
各ステップの実行は、プログラム順序で発生する必要が
ある。
【0010】図1〜3のプロセスは、シーケンシャル・
コンシステンシのような強いメモリ・コンシステンシ・
モデルを用いるCPUに対してのみ有効である。たとえ
ば、新たなエレメントの追加は、他のCPUが、異なる
順序で生じる一定のCPUからの書込みオペレーション
を経験し得る弱いメモリ・モデルにおいては、失敗する
ことがある。図4は、新たなエレメントをデータ構造へ
追加する従来の弱いメモリ・コンシステンシ・モデルを
説明する図である。この例において、新たなエレメント
30の第1のフィールド32への書込みオペレーション
は、第2のエレメント20のネクスト・フィールドへの
書込みオペレーションをパスする。
【0011】データ構造を検索するCPUは、第3のエ
レメント30の第1フィールド32を参照し、破壊され
たデータをもたらし得る。検索CPUは、その上、フィ
ールド32から確定されるデータをポインタとして用い
ようと試みることがあり、ほとんどの場合、これはプロ
グラム障害あるいはシステム・クラッシュをもたらすこ
ととなる。したがって強いメモリ・コンシステンシを強
制するCPUを用いることにより、データ破壊を回避す
ることができる。
【0012】強いハードウェア・メモリ・コンシステン
シは、より多くのオーバーヘッドを必要とし、読取り要
求と書込み要求との間の優先順位を暗黙的に識別するこ
とができない。この問題を克服するために、現在のマイ
クロプロセッサは、メモリ・オペレーションが異なるC
PU上で異なる順序で発生可能である緩和されたメモリ
・コンシステンシ・モデルを実装する。たとえば、DE
C/Compaq Alphaは、メモリ・バリアを実
行するCPUに関してのみ、書込みと無効化とを直列化
するメモリ・バリアを有する。全ての他のCPUのキャ
ッシュのデータ項目を無効にし、これらの無効化が完了
するまで待機するハードウェア・メカニズムは存在しな
い。したがって、システム内の全てのCPUがメモリ・
バリア命令を実行することを要求する高い優先順位のプ
ロセッサ間割り込みを与えて、読取りCPUと更新CP
Uとにメモリ・バリアを通過してメモリのコンシステン
ト・ビュー(consistent view)を保証
するよう求めることが望ましい。
【0013】
【発明が解決しようとする課題】本発明の目的は、マル
チプロセッサ・コンピュータ・システムにおいて同期メ
モリ・バリアを実装するソフトウェアを提供することで
ある。本発明のさらなる目的は、メモリ・バリア命令の
使用を通じてメモリ無効化を処理してメモリのコンシス
テント・ビューを保証することである。
【0014】
【課題を解決するための手段】本発明の第1の態様は、
ソフトウェアにおいてシーケンシャル・コンシステンシ
を選択的にエミュレートする方法である。マルチプロセ
ッシング・コンピュータ環境内のそれぞれのCPUは、
メモリ・バリア命令を実行するよう強制される。メモリ
・バリアの実行に続いて、それぞれのCPUはインディ
ケータを送信して、メモリ・バリア命令の完了を伝達す
る。プロセッサ間割り込みがそれぞれのCPUへ送信さ
れてメモリ・バリア命令の実行を強制する。デッドロッ
クを回避するために、応答側CPUからのメモリ・バリ
ア命令の実行が要求側CPUに登録される。さらに、他
のCPUがメモリ・バリア命令を実行するのを待つCP
Uは、コンカレント(同時発生の)(concurre
nt)要求に依存した(sensitive)ままでな
ければならない。メモリ・バリア命令の登録の実装は、
必須ではないが、ビットマスク,アレイ,および結合ツ
リーより成るグループから好ましくは選択される。
【0015】本発明の第2の態様は、それぞれのCPU
にメモリ・バリア命令を実行するよう強制する命令と、
メモリ・バリア命令の完了を指示する命令マネージャと
を有するマルチプロセッサ・コンピュータ・システムで
ある。メモリ・バリア・マネージャが与えられてCPU
の全てにプロセッサ間割り込みを送信し、メモリ・バリ
ア命令の実行を強制する。競合するCPU間のデッドロ
ックを回避するために、応答側CPUからのメモリ・バ
リア命令の実行の登録が要求側CPUへ与えられる。加
えて、要求側CPUはコンカレント要求に依存したまま
であり、コンカレント要求を実行する。命令の登録の実
装は、必須ではないが、ビット・マスク,アレイ,およ
び結合ツリーより成るグループから好ましくは選択され
る。
【0016】本発明の第3の態様は、当該媒体内に複数
のプロセッサ・オペレーティングを備えるコンピュータ
読取可能信号伝達媒体を含む製造物品である。当該製造
物品は、それぞれのCPUにメモリ・バリア命令の実行
を強制する媒体内の手段と、メモリ・バリア命令の完了
を指示する命令マネージャとを有する。メモリ・バリア
・マネージャが与えられてCPUの全てにプロセッサ間
割り込みを送信し、メモリ・バリア命令の実行を強制す
る。競合するCPU間のデッドロックを回避するため
に、応答側CPUからのメモリ・バリア命令の実行の登
録が要求側CPUに与えられる。加えて、要求側CPU
は、コンカレント要求に依存したままであり、コンカレ
ント要求を実行する。命令の登録の実装は、必須ではな
いが、ビット・マスク,アレイ,および結合ツリーより
成るグループから好ましくは選択される。
【0017】本発明の他の特徴および利点は、添付図面
と共に理解される本発明の好適な実施の形態の下記の詳
細な説明から明らかとすることができる。
【0018】
【発明の実施の形態】(概要)共用メモリ・マルチプロ
セッサ・システムにおいて、複数のプロセッサがメモリ
のコンシステント・ビューを参照するということが必須
である。読取りCPUがロックを獲得しない手法の例
が、読取りコピー更新において、そして、シーケンシャ
ル・コンシステンシ・モデルにおける弱いメモリ・バリ
ア命令の実装において認められる。リンク・リスト内の
新たなエレメントへのポインタを更新する擬似コードを
下記に示す: 1.次のエレメントへのポインタを含む新たな構造を初
期化する 2.セマフォ“s”上でスリープ中の全てのプロセスを
呼び起こす関数を起動する読取りコピー・コールバック
を登録する 3.セマフォ“s”上でスリープする 4.指定された先行エレメントに新たなエレメントをポ
イントさせる。
【0019】読取りコピー・コールバックの実施は、メ
モリ・バリアがそれぞれのCPU上で実行されることを
強制するので、全ての読取りCPUは、メモリ破壊の回
避が必要とされる、構造が初期化されポインタが変更さ
れる期間の間メモリ・バリアを実行することを保証され
る。しかしながら、このプロシージャは、割り込みハン
ドラ,スピンロック・クリティカル・セクション,また
は割り込み禁止のコードのセクション内部からは使用で
きない。緩和されたメモリ・コンシステンシ・モデルを
使用するCPUは、無効にされるプロセス中にある読取
りデータから読取りCPUを分けるメカニズムを提供す
ることができない。したがって、複数のCPU間のデッ
ドロック・シナリオを回避しながら、シーケンシャル・
コンシステンシをエミュレートするソフトウェアを実現
することが望ましくかつ有効である。
【0020】(技術的背景)一般的に、弱いメモリ・コ
ンシステンシ・モデルへのソフトウェア・アプローチの
実装は、オーバーヘッドを緩和しながら効率を改善す
る。図5は、弱いメモリ・バリア実行の問題を説明する
書込みCPU60と読取りCPU70とのブロック図5
0を示す。各々のCPUは、キャッシュ0 62およびキ
ャッシュ0 64によってそれぞれ処理される偶数番号の
キャッシュ線と、キャッシュ1 72およびキャッシュ1
74によってそれぞれ処理される奇数番号のキャッシュ
線とを有する。キャッシュ線サイズは72バイトであ
り、アドレス0,64,128,192,256…にお
いて偶数番号のキャッシュ線であり、アドレス32,9
6,160,224,288…において奇数番号のキャ
ッシュ線である。この例において、書込みCPU60
は、リンク・リストの末尾に新たなデータ構造を追加し
ており、同時に、読取りCPU70は、同じリンク・リ
ストを並行してスキャンしている。書込みCPU60
は、最初にデータ構造に記入し、リンク・リスト内の最
後のエレメントからのポインタを更新して新たなエレメ
ントをポイントすることができる。しかしながら、この
プロシージャは、読取りCPU70がこの新たなエレメ
ント内でガーベッジ値を参照する結果をもたらすことが
ある。というのは、ポインタへの更新が、データ構造へ
の変更より速く読取りCPUへ伝搬し得るからである。
例えば、ポインタが偶数番号のキャッシュ線内にあり、
新たなエレメントが奇数番号のキャッシュ線にあること
がある。そして、偶数番号のハードウェアが使用されて
いない一方で、奇数番号のハードウェアが使用中である
ことがある。したがって、メモリ・バリアの適正な実行
を実現して双方のCPUとのメモリ・コンシステンシを
保証する必要性が存在する。
【0021】図5において説明される例でメモリ・コン
システンシを保証するために、書込みCPU60は、デ
ータ構造に記入後でありかつポインタの更新前にメモリ
・バリア命令を実行する必要がある。メモリ・バリア命
令の効果が単一CPUに制限される場合には、書込みC
PU60によって実行されるメモリ・バリア命令は、無
効化が相互接続上で順序正しく発生するよう強制する
が、読取りCPU70が順序正しく無効化を処理すると
いうことを保証しない。例えば、読取りCPU70内の
偶数番号のキャッシュ・ハードウェアが使用されていな
い一方で、読取りCPU70上の奇数番号のキャッシュ
・ハードウェアが使用中であることがある。これは、読
取りCPU70がポインタの新たな値を読取るけれども
データ・エレメント内の旧データを参照する結果をもた
らす。したがって、読取りCPU70がデータ構造にア
クセスするよりも前に旧データが無効にされるというこ
とを保証する必要性が存在する。
【0022】図6は、メモリ・バリアの実施例を使用し
てデータ構造へのポインタを更新するプロセスを説明す
るフローチャート100を示す。データ構造を更新する
CPUは、データ構造へ書込む(ステップ110)。こ
のCPUは、書込みCPUと称される。このプロセスの
際、データ構造にアクセスしデータ構造を読取るそれぞ
れのCPUは、書込みCPUが新たなエレメントへのポ
インタを更新する時まで旧データ構造を使用している。
データ構造を読取るそれぞれのCPUは、読取りCPU
として知られる。データ構造の更新に続いて、書込みC
PUは、システム内のそれぞれのCPUにメモリ・バリ
ア命令を実行するよう強制する(ステップ120)。書
込みCPUは、高い優先順位のプロセッサ間割り込みを
使用して、全てのCPUにメモリ・バリア命令を実行す
るよう強制する。メモリ・バリア命令の実行は、不整合
データを無効にし、読取りCPUが変更されたデータ構
造内の新たなデータにアクセスできることを保証する。
それぞれのCPUは、インディケータを記憶場所へ送信
してメモリ・バリア命令の完了を指示する(ステップ1
30)。このステップは、メモリ・バリア命令の完了を
指示する共通ロケーション内の記録を保証する。このよ
うにして、書込みCPUは、新たなデータに関するデー
タ構造へのポインタの更新より前に旧データを無効にす
るために、システム内のそれぞれのCPUによるメモリ
・バリア命令の実行を強制する。
【0023】一方、2つの競合する書込みCPU間のデ
ッドロックを回避することが重要である。それぞれの書
込みCPUは、データ構造へのポインタを更新する前
に、各CPUがメモリ・バリアの実行を完了しているこ
とを保証しなければならない(ステップ140)。それ
ぞれのCPUがメモリ・バリア命令を実行していない場
合には、書込みCPUは、データ構造へのポインタを更
新することができない。書込みCPUは、それぞれのC
PUがメモリ・バリア命令を実行するのを待たなければ
ならず、あるいは、メモリ・バリア命令の実行を再び要
求することとなる(ステップ120)。書込みCPU
は、それぞれのCPUがメモリ・バリアの実行を登録す
るのを待っている一方で、書込みCPUは、コンカレン
ト・メモリ・バリア実行要求を確認し、この要求を満た
す(ステップ145)。それぞれのCPUがメモリ・バ
リア命令の実行の完了を登録した場合には、書込みCP
Uは、データ構造へのポインタを更新することができる
(ステップ150)。システム内のそれぞれのCPUが
メモリ・バリア命令を実行したということを保証する登
録のレビューに続いて、書込みCPUは、データ構造へ
のポインタを更新することができる。
【0024】メモリ・バリア命令の実行の完了の登録
と、コンカレント・メモリ・バリア要求の充足という、
デッドロックを回避するための2つの要素が存在する。
デッドロック・シナリオを回避する第1の実施の形態
は、各CPUがメモリ・バリア実行要求を登録するため
のアレイを提供することである。アレイは、CPUごと
に1つのエントリを備える。データ構造に書き込むため
にロックを要求するCPUは、アレイをスキャンして、
ポインタの更新より前に、全てのCPUがメモリ・バリ
アを実行して全ての無効化をフラッシュしたということ
を保証しなければならない。好適な実施の形態におい
て、アレイ内の各エントリは、CPUごとに1つのビッ
トを備えるビット・マスクである。ポインタを更新する
ためにロックを要求するCPUは、全てのCPUに割り
込みを送信して、メモリ・バリアの実行を強制する。そ
れぞれのCPUは、アトミック演算を用いてアレイの各
CPUビット・マスクから自身のビットを減算し、要求
側CPUは、アレイ内の値の各々がゼロになるまでアレ
イをスキャンしなければならない。この期間の間、書込
みCPUは、コンカレント・メモリ・バリア要求を確認
し、この要求を満たす。これは、それぞれのCPUがメ
モリ・バリア命令を実行したということを保証する。
【0025】第1の実施の形態のアレイ・エントリ・シ
ステムに関連して、要求に応答したCPUが、メモリ・
バリア命令を実行するための擬似コードを以下に示す: 1.ローカル変数“cleared_bits”をゼロ
にセットする 2.割り込みを抑制する 3.“need_mb_lock”を獲得する 4.“need_mb”アレイをスキャンする。このC
PUのビット・セットを有する各エントリに関して、以
下を行う: a)このCPUのビットをクリアする b)“cleared_bits”ローカル変数を増分
する 5.“cleared_bits”がゼロでない場合、
メモリ・バリア命令を実行する 6.“need_mb_lock”をリリースする 7.割り込みを復元する このように、ステップ4は、メモリ・バリア実行の完了
を登録するステップを伴う。
【0026】ある種のアーキテクチャは、ロックの獲得
およびロックのリリースをそれぞれ割り込みの抑制およ
び割り込みの復元と組み合せることを可能にする。第1
の実施の形態のアレイ・エントリ・システムに関連し
て、グローバル・メモリ・バリア・シュートダウン(s
hootdown)を要求するCPUのための擬似コー
ドを以下に示す: 1.割り込みを抑制する 2.“need_mb_lock”を獲得する 3.ロックの獲得によって暗黙指定される、メモリ・バ
リア命令を実行する 4.このCPUについての“need_mb_entr
y”内部で、全てのその他のCPUについてのビットを
セットする 5.“need_mb_lock”をリリースする 6.全ての他のCPUへ割り込みを送信する 7.このCPUの“need_mb”エントリがゼロで
ない間、以下のステップをくり返す: a)ローカル変数“cleared_bits”をゼロ
にセットする b)“need_mb”アレイをスキャンする。それぞ
れのエントリ“j”について: i)j番目のエントリがこのCPUのビット・セットを
有する場合には: (1)“need_mb_lock”を獲得する (2)このCPUのビットをクリアする (3)“cleared_bits”ローカル変数を増
分する (4)“need_mb_lock”をリリースする c)“cleared_bits”がゼロでない場合に
は、メモリ・バリア命令を実行する 8.割り込みを復元する ステップ7および従属ステップは、待機CPUに他のC
PUによるコンカレント要求へ応答させることによりデ
ッドロックを回避する。したがって、アレイ・システム
の実施例の双方は、要求側CPUに、アレイをスキャン
して、データ構造内のポインタの更新より前にその他の
CPUの各々がメモリ・バリアを実行していることを保
証するよう要求し、一方、待機CPUにコンカレント・
メモリ・バリア要求に応答することを要求し、それによ
ってデッドロックを回避する。
【0027】デッドロック・シナリオを回避する第2の
実施の形態は、世代ベースのビット・マスクの使用であ
る。それぞれのメモリ・バリア実行要求は、世代番号を
割り当てられる。直前の要求が処理されている間に開始
される要求は、直前の要求と同じ世代番号を割り当てら
れる。いったん世代番号が処理されると、要求が完了す
る。全ての待機CPUにメモリ・バリア命令をくり返し
実行させ、メモリ・バリア命令の完了をビット・マスク
に登録することにより、デッドロックが回避される。
【0028】世代ベースのビット・マスクを実装するメ
モリ・バリア実行を要求する割り込みに応答したCPU
のための擬似コードを以下に示す: 1.割り込みを抑制する 2.“need_mb”(ビット・マスク)内の問題の
(our)ビットがセットされていない場合には、割り
込みを復元してリターンする 3.“need_mb_lock”を獲得する 4.メモリ・バリア命令を実行する 5.“need_mb”内のビットをクリアする。問題
のビット(ours)が最後のビット・セットである場
合には、以下のステップを行う: a)“current generation”カウン
タを増分する b)”current generation”カウン
タが“maximum generation”カウン
タより小さいかまたは等しい場合には、以下のステップ
を行う: i)“need_mb”ビット・マスク内の(このCP
Uのビット以外の)それぞれのCPUのビットをセット
する ii)割り込みをそれぞれの他のCPUに送信する 6.“need_mb_lock”をリリースするこの
ように、ステップ5は、メモリ・バリア実行の完了を登
録するステップを伴う。
【0029】グローバル・メモリ・バリア・シュートダ
ウンを要求するCPUのための擬似コードを以下に示
す: 1.割り込みを抑制し、“need_mb_lock”
を獲得する 2.メモリ・バリア命令を実行する 3.現行世代(current generatio
n)が最大世代(maximum generatio
n)より小さいかまたは等しい場合には、以下のステッ
プを行う: a)“maximum generation”を“c
urrent generation”+1にセットす
る 4.もしそうでなければ以下のステップを行う: a)“maximum generation”を“c
urrent generation”にセットする b)“my generation”を“maximu
m generation”にセットする c)“need_mb”ビット・マスク内の(このCP
Uのビット以外の)それぞれのCPUのビットをセット
する d)割り込みをそれぞれの他のCPUに送信する 5.“my generation”を“maximu
m generation”にセットする 6.“need_mb_lock”をリリースする 7.“my generation”が“curren
t generation”より大きいかまたは等しい
間: a)それぞれのCPUの要求に応答するプロシージャを
起動してメモリ・バリア命令を実行する このように、ステップ7は、待機CPUがコンカレント
・メモリ・バリア要求に依存したままであり、コンカレ
ント・メモリ・バリア要求に応答するということを保証
する。
【0030】デッドロックを回避する第1の実施の形態
あるいは第2の実施の形態の実装において、それぞれの
読取りCPUにメモリ・バリア命令を実行させることが
重要である。一方、残りのCPUに対してメモリ・バリ
ア命令を要求する書込みCPUを含むそれぞれのCPU
が、メモリ・バリア命令を実行することが望ましい。メ
モリ・バリア命令の実行は、それぞれのCPUのキャッ
シュから旧データを無効にする。それぞれのCPUによ
るメモリ・バリア実行の実現は、高い優先順位のプロセ
ッサ間割り込みをシステム内のすべてのCPUに送信す
ることによって実施される。これは、それぞれのCPU
に、関連したメモリ・バリア命令を実行するよう強制す
る。コンカレント・メモリ・バリア実行要求は、要求の
それぞれのグループが世代番号を割り当てられるグルー
プへマージされる。直前のメモリ・バリア実行要求が処
理されている間、現行の世代番号が、到着したすべての
メモリ・バリア実行要求に割り当てられる。シーケンシ
ャル・コンシステンシをエミュレートするソフトウェア
は、他のCPUがメモリ・バリア命令のセットを実行す
るのを待っているそれぞれのCPUに、コンカレント・
メモリ・バリア実行要求を絶えず満たすことをさらに要
求する。マルチプロセッシング・コンピュータ環境にお
いて、それぞれのCPUは異なるアジェンダを有するこ
とがあり、複数のメモリ・バリア実行要求が短時間のイ
ンターバル内で処理されていることがある。したがっ
て、無効にされたデータが、不適切に消費されないとい
うことの保証を、コンカレント・メモリ・バリア命令要
求が達成することが重要である。
【0031】(従来技術より優れた利点)メモリ・バリ
ア命令を同期させるソフトウェアの実装は、読取りオペ
レーションおよび書込みオペレーションにおける性能を
改善する。書込みCPUからのメモリ・バリア要求の実
施により、読取りCPUがデータ構造へのポインタを読
み取る前に無効化が処理されるよう強制される。これ
は、読取りCPUが、無効にされたデータあるいは無効
にされるプロセス中にあるデータを読み取らないという
ことを保証する。強いハードウェア・コンシステンシ・
モデルは、より多くの時間を使用し、したがってより多
くのオーバーヘッドを伴う。メモリ・バリアの実施は、
無効化をフラッシュする。さらに、ハードウェアは、読
取りオペレーションと書込みオペレーションとの間の優
先順位を暗黙的に区別することができない。このよう
に、ソフトウェアにおいてシーケンシャル・コンシステ
ンシをエミュレートする方法は、コストを低減し、複数
のCPU間のデッドロックの回避を保証する。
【0032】(他の実施の形態)本発明の特定の実施の
形態を、例示のためにここで述べてきたが、本発明の趣
旨および範囲から外れることなしに様々な変更を行うこ
とが可能であることが理解できる。特に、複数のCPU
間のデッドロックを回避するために、他のメカニズムを
用いることができる。例えば、要求カウンタのセットを
登録と関連して用い、たった1つのCPUだけが同時に
動作するということを保証できる。他のメカニズムは、
たった1つのCPUだけが同時に動作するということを
保証する結合ツリーの使用である。結合ツリー・メカニ
ズムは、MUMA環境において、あるいは、コンピュー
タ・システムのバス構造を反映することが望ましい他の
コンピュータ・システムにおいて好適である。このよう
に、本発明の保護範囲は、特許請求の範囲およびその均
等範囲によってのみ制限される。
【0033】まとめとして、本発明の構成に関して以下
の事項を開示する。 (1)ソフトウェアにおいてシーケンシャル・コンシス
テンシを選択的にエミュレートする方法であって、
(a)それぞれのCPUにメモリ・バリア命令を実行す
るよう強制するステップと、(b)それぞれのCPUに
前記メモリ・バリア命令の完了を伝達するインディケー
タを送信させるステップと、を含む方法。 (2)前記それぞれのCPUにメモリ・バリア命令を実
行するよう強制するステップは、プロセッサ間割り込み
を全てのCPUに送信するステップを含む、上記(1)
に記載の方法。 (3)他のCPUが前記メモリ・バリア命令を実行する
のを待っているそれぞれのCPUに、コンカレント・メ
モリ・バリア実行要求を絶えず満たさせることによって
デッドロックを回避するステップをさらに含む上記
(2)に記載の方法。 (4)単一セットのメモリ・バリア命令の実行を用い
て、コンカレント・メモリ・バリア実行要求のグループ
を満たすステップを、さらに含む上記(1)に記載の方
法。 (5)前記メモリ・バリア実行要求のそれぞれのグルー
プに世代番号を割り当てるステップを、さらに含む上記
(4)に記載の方法。 (6)直前のメモリ・バリア実行要求が処理されている
間に到着したすべてのメモリ・バリア実行要求に、現行
の世代番号を割り当てるステップを、さらに含む上記
(5)に記載の方法。 (7)前記それぞれのCPUに前記メモリ・バリア命令
の完了を伝達するインディケータを送信させるステップ
は、前記CPUがアレイ,ビット・マスク,および結合
ツリーより成るグループから選択されたツールを用いて
前記メモリ・バリアの完了を登録するステップを含む、
上記(1)に記載の方法。 (8)それぞれのアレイ・エントリがCPUからのメモ
リ・バリア実行要求に対応し、CPUがメモリ・バリア
要求を登録するためのアレイを与えるステップを、さら
に含む上記(1)に記載の方法。 (9)前記アレイをスキャンして、それぞれのCPUに
よる前記メモリ・バリア命令の実行を判断するステップ
をさらに含む、上記(8)に記載の方法。 (10)複数のプロセッサと、それぞれのCPUにメモ
リ・バリア命令を実行するよう強制する命令と、前記メ
モリ・バリア命令の完了を指示する命令マネージャとを
備えるコンピュータ・システム。 (11)前記それぞれのCPUにメモリ・バリア命令を
実行するよう強制する命令は、プロセッサ間割り込みを
すべてのCPUに送信するメモリ・バリア・マネージャ
を有する上記(10)に記載のシステム。 (12)前記メモリ・バリア・マネージャは、他のCP
Uが前記メモリ・バリア命令を実行するのを待つそれぞ
れのCPUに、コンカレント・メモリ・バリア実行要求
を満たすことを要求する待機命令を含む、上記(11)
に記載のシステム。 (13)前記それぞれのCPUにメモリ・バリア命令を
実行するよう強制する命令は、単一セットのメモリ・バ
リア命令の実行によりコンカレント・メモリ・バリア実
行要求のグループを満たす統合命令を含む上記(10)
に記載のシステム。 (14)前記メモリ・バリア実行要求のそれぞれのグル
ープは、世代番号を割り当てられる、上記(13)に記
載のシステム。 (15)直前のメモリ・バリア実行要求が実行されてい
る間に到着するすべてのメモリ・バリア実行要求は、現
行の世代番号を割り当てられる、上記(14)に記載の
システム。 (16)前記命令マネージャは、それぞれのCPUが前
記メモリ・バリア命令の完了を登録するためのツールを
有する、上記(10)に記載のシステム。 (17)前記ツールは、ビット・マスク,アレイ,およ
び結合ツリーより成るグループから選択される、上記
(16)に記載のシステム。 (18)前記命令マネージャは、CPUがメモリ・バリ
ア要求を登録するためのアレイを有する、上記(10)
に記載のシステム。 (19)前記アレイへのそれぞれのエントリは、CPU
からのメモリ・バリア実行要求に対応する上記(18)
に記載のシステム。 (20)それぞれの要求側CPUが前記アレイをスキャ
ンして、それぞれのCPUによる前記メモリ・バリア命
令の実行を判断する、上記(19)に記載のシステム。 (21)コンピュータ読み取り可能信号伝達媒体と、そ
れぞれのCPUにメモリ・バリア命令を実行するよう強
制する前記媒体内の手段と、前記メモリ・バリア命令の
完了を指示する命令マネージャとを含む製造物品。 (22)前記媒体は、記録可能データ記憶媒体,および
変調キャリア信号より成るグループから選択される上記
(21)に記載の製造物品。 (23)前記それぞれのCPUにメモリ・バリア命令を
実行するよう強制する手段は、プロセッサ間割り込みを
すべてのCPUに送信するメモリ・バリア・マネージャ
を有する上記(21)に記載の製造物品。 (24)他のCPUが前記メモリ・バリア命令を実行す
るのを待つそれぞれのCPUは、コンカレント・メモリ
・バリア実行要求を絶えず満たす上記(21)に記載の
製造物品。 (25)前記命令マネージャは、それぞれのCPUが前
記メモリ・バリア命令の完了を登録するためのツールを
有する、上記(21)に記載の製造物品。 (26)前記ツールは、ビット・マスク,アレイ,およ
び結合ツリーより成るグループから選択される、上記
(25)に記載の製造物品。 (27)ソフトウェアにおいてシーケンシャル・コンシ
ステンシを選択的にエミュレートする方法であって、
(a)それぞれのCPUにメモリ・バリア命令を実行す
るよう強制するステップと、(b)それぞれのCPUに
前記メモリ・バリア命令の完了を伝達するインディケー
タを送信させるステップと、(c)単一セットのメモリ
・バリア命令の実行によりコンカレント・メモリ・バリ
ア実行要求のグループを満たすステップとを含み、
(d)前記それぞれのCPUにメモリ・バリア命令を実
行するよう強制するステップは、プロセッサ間割り込み
をすべてのCPUに送信して前記メモリ・バリア命令の
実行を強制するステップを含む方法。 (28)前記それぞれのCPUに前記メモリ・バリア命
令の完了を伝達するインディケータを送信させるステッ
プは、前記CPUが、ビット・マスク,アレイ,および
結合ツリーより成るグループから選択されたツールによ
り前記メモリ・バリアの完了を登録するステップを含
む、上記(27)に記載の方法。
【図面の簡単な説明】
【図1】初期状態における従来のデータ構造のブロック
図である。
【図2】初期化された新たなエレメントを備える従来の
データ構造のブロック図である。
【図3】リストへ追加された新たなエレメントを備える
従来のデータ構造のブロック図である。
【図4】弱いメモリ・コンシステンシ・モデルの従来の
データ構造のブロック図である。
【図5】読取りCPUと書込みCPUとの間の相互接続
のブロック図である。
【図6】本発明の好適な実施の形態に係るシーケンシャ
ル・コンシステンシを説明するフローチャートである。
【符号の説明】
5 データ構造 10 第1のエレメント 12,14,16 フィールド 20 第2のエレメント 22,24,26 フィールド 30 新たなエレメント 32,34,36 フィールド 50 ブロック図 60 書込みCPU 62,64 キャッシュ0 70 読取りCPU 72,74 キャッシュ1
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ポウル・イー・マッケニー アメリカ合衆国 97006 オレゴン州 ビ ーヴァートン エヌダブリュ アルビオン コート 1975 Fターム(参考) 5B045 CC07 CC08 EE19 FF03 FF06 JJ40

Claims (28)

    【特許請求の範囲】
  1. 【請求項1】ソフトウェアにおいてシーケンシャル・コ
    ンシステンシを選択的にエミュレートする方法であっ
    て、 (a)それぞれのCPUにメモリ・バリア命令を実行す
    るよう強制するステップと、 (b)それぞれのCPUに前記メモリ・バリア命令の完
    了を伝達するインディケータを送信させるステップと、
    を含む方法。
  2. 【請求項2】前記それぞれのCPUにメモリ・バリア命
    令を実行するよう強制するステップは、プロセッサ間割
    り込みを全てのCPUに送信するステップを含む、請求
    項1に記載の方法。
  3. 【請求項3】他のCPUが前記メモリ・バリア命令を実
    行するのを待っているそれぞれのCPUに、コンカレン
    ト・メモリ・バリア実行要求を絶えず満たさせることに
    よってデッドロックを回避するステップをさらに含む請
    求項2に記載の方法。
  4. 【請求項4】単一セットのメモリ・バリア命令の実行を
    用いて、コンカレント・メモリ・バリア実行要求のグル
    ープを満たすステップを、さらに含む請求項1に記載の
    方法。
  5. 【請求項5】前記メモリ・バリア実行要求のそれぞれの
    グループに世代番号を割り当てるステップを、さらに含
    む請求項4に記載の方法。
  6. 【請求項6】直前のメモリ・バリア実行要求が処理され
    ている間に到着したすべてのメモリ・バリア実行要求
    に、現行の世代番号を割り当てるステップを、さらに含
    む請求項5に記載の方法。
  7. 【請求項7】前記それぞれのCPUに前記メモリ・バリ
    ア命令の完了を伝達するインディケータを送信させるス
    テップは、前記CPUがアレイ,ビット・マスク,およ
    び結合ツリーより成るグループから選択されたツールを
    用いて前記メモリ・バリアの完了を登録するステップを
    含む、請求項1に記載の方法。
  8. 【請求項8】それぞれのアレイ・エントリがCPUから
    のメモリ・バリア実行要求に対応し、CPUがメモリ・
    バリア要求を登録するためのアレイを与えるステップ
    を、さらに含む請求項1に記載の方法。
  9. 【請求項9】前記アレイをスキャンして、それぞれのC
    PUによる前記メモリ・バリア命令の実行を判断するス
    テップをさらに含む、請求項8に記載の方法。
  10. 【請求項10】複数のプロセッサと、 それぞれのCPUにメモリ・バリア命令を実行するよう
    強制する命令と、 前記メモリ・バリア命令の完了を指示する命令マネージ
    ャとを備えるコンピュータ・システム。
  11. 【請求項11】前記それぞれのCPUにメモリ・バリア
    命令を実行するよう強制する命令は、プロセッサ間割り
    込みをすべてのCPUに送信するメモリ・バリア・マネ
    ージャを有する請求項10に記載のシステム。
  12. 【請求項12】前記メモリ・バリア・マネージャは、他
    のCPUが前記メモリ・バリア命令を実行するのを待つ
    それぞれのCPUに、コンカレント・メモリ・バリア実
    行要求を満たすことを要求する待機命令を含む、請求項
    11に記載のシステム。
  13. 【請求項13】前記それぞれのCPUにメモリ・バリア
    命令を実行するよう強制する命令は、単一セットのメモ
    リ・バリア命令の実行によりコンカレント・メモリ・バ
    リア実行要求のグループを満たす統合命令を含む請求項
    10に記載のシステム。
  14. 【請求項14】前記メモリ・バリア実行要求のそれぞれ
    のグループは、世代番号を割り当てられる、請求項13
    に記載のシステム。
  15. 【請求項15】直前のメモリ・バリア実行要求が実行さ
    れている間に到着するすべてのメモリ・バリア実行要求
    は、現行の世代番号を割り当てられる、請求項14に記
    載のシステム。
  16. 【請求項16】前記命令マネージャは、それぞれのCP
    Uが前記メモリ・バリア命令の完了を登録するためのツ
    ールを有する、請求項10に記載のシステム。
  17. 【請求項17】前記ツールは、ビット・マスク,アレ
    イ,および結合ツリーより成るグループから選択され
    る、請求項16に記載のシステム。
  18. 【請求項18】前記命令マネージャは、CPUがメモリ
    ・バリア要求を登録するためのアレイを有する、請求項
    10に記載のシステム。
  19. 【請求項19】前記アレイへのそれぞれのエントリは、
    CPUからのメモリ・バリア実行要求に対応する請求項
    18に記載のシステム。
  20. 【請求項20】それぞれの要求側CPUが前記アレイを
    スキャンして、それぞれのCPUによる前記メモリ・バ
    リア命令の実行を判断する、請求項19に記載のシステ
    ム。
  21. 【請求項21】コンピュータ読み取り可能信号伝達媒体
    と、 それぞれのCPUにメモリ・バリア命令を実行するよう
    強制する前記媒体内の手段と、 前記メモリ・バリア命令の完了を指示する命令マネージ
    ャとを含む製造物品。
  22. 【請求項22】前記媒体は、記録可能データ記憶媒体,
    および変調キャリア信号より成るグループから選択され
    る請求項21に記載の製造物品。
  23. 【請求項23】前記それぞれのCPUにメモリ・バリア
    命令を実行するよう強制する手段は、プロセッサ間割り
    込みをすべてのCPUに送信するメモリ・バリア・マネ
    ージャを有する請求項21に記載の製造物品。
  24. 【請求項24】他のCPUが前記メモリ・バリア命令を
    実行するのを待つそれぞれのCPUは、コンカレント・
    メモリ・バリア実行要求を絶えず満たす請求項21に記
    載の製造物品。
  25. 【請求項25】前記命令マネージャは、それぞれのCP
    Uが前記メモリ・バリア命令の完了を登録するためのツ
    ールを有する、請求項21に記載の製造物品。
  26. 【請求項26】前記ツールは、ビット・マスク,アレ
    イ,および結合ツリーより成るグループから選択され
    る、請求項25に記載の製造物品。
  27. 【請求項27】ソフトウェアにおいてシーケンシャル・
    コンシステンシを選択的にエミュレートする方法であっ
    て、 (a)それぞれのCPUにメモリ・バリア命令を実行す
    るよう強制するステップと、 (b)それぞれのCPUに前記メモリ・バリア命令の完
    了を伝達するインディケータを送信させるステップと、 (c)単一セットのメモリ・バリア命令の実行によりコ
    ンカレント・メモリ・バリア実行要求のグループを満た
    すステップとを含み、(d)前記それぞれのCPUにメ
    モリ・バリア命令を実行するよう強制するス テップは、プロセッサ間割り込みをすべてのCPUに送
    信して前記メモリ・バリア命令の実行を強制するステッ
    プを含む方法。
  28. 【請求項28】前記それぞれのCPUに前記メモリ・バ
    リア命令の完了を伝達するインディケータを送信させる
    ステップは、前記CPUが、ビット・マスク,アレイ,
    および結合ツリーより成るグループから選択されたツー
    ルにより前記メモリ・バリアの完了を登録するステップ
    を含む、請求項27に記載の方法。
JP2002157137A 2001-06-18 2002-05-30 同期メモリ・バリアを実装する方法およびシステム Pending JP2003044452A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/884597 2001-06-18
US09/884,597 US6996812B2 (en) 2001-06-18 2001-06-18 Software implementation of synchronous memory barriers

Publications (1)

Publication Number Publication Date
JP2003044452A true JP2003044452A (ja) 2003-02-14

Family

ID=25384967

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002157137A Pending JP2003044452A (ja) 2001-06-18 2002-05-30 同期メモリ・バリアを実装する方法およびシステム

Country Status (2)

Country Link
US (1) US6996812B2 (ja)
JP (1) JP2003044452A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009515280A (ja) * 2006-11-27 2009-04-09 インテル コーポレイション 中央化された割り込みコントローラ

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6918005B1 (en) * 2001-10-18 2005-07-12 Network Equipment Technologies, Inc. Method and apparatus for caching free memory cell pointers
US7359325B1 (en) 2001-10-18 2008-04-15 Network Equipment Technologies, Inc. Method and apparatus for inserting empty memory cells into a data flow of network connections of a computer network
US7239612B1 (en) 2001-10-18 2007-07-03 Network Equipment Technologies, Inc Method and apparatus for discarding a prioritized fair share of traffic of network connections
CN1212567C (zh) * 2002-03-28 2005-07-27 徐肇昌 软件模拟序网n+1个并行程序的结构和方法
US6701412B1 (en) * 2003-01-27 2004-03-02 Sun Microsystems, Inc. Method and apparatus for performing software sampling on a microprocessor cache
US7360069B2 (en) * 2004-01-13 2008-04-15 Hewlett-Packard Development Company, L.P. Systems and methods for executing across at least one memory barrier employing speculative fills
US8301844B2 (en) * 2004-01-13 2012-10-30 Hewlett-Packard Development Company, L.P. Consistency evaluation of program execution across at least one memory barrier
US7409500B2 (en) * 2004-01-13 2008-08-05 Hewlett-Packard Development Company, L.P. Systems and methods for employing speculative fills
US7380107B2 (en) * 2004-01-13 2008-05-27 Hewlett-Packard Development Company, L.P. Multi-processor system utilizing concurrent speculative source request and system source request in response to cache miss
US8281079B2 (en) * 2004-01-13 2012-10-02 Hewlett-Packard Development Company, L.P. Multi-processor system receiving input from a pre-fetch buffer
US7406565B2 (en) 2004-01-13 2008-07-29 Hewlett-Packard Development Company, L.P. Multi-processor systems and methods for backup for non-coherent speculative fills
US7340565B2 (en) 2004-01-13 2008-03-04 Hewlett-Packard Development Company, L.P. Source request arbitration
US7376794B2 (en) * 2004-01-13 2008-05-20 Hewlett-Packard Development Company, L.P. Coherent signal in a multi-processor system
US7383409B2 (en) 2004-01-13 2008-06-03 Hewlett-Packard Development Company, L.P. Cache systems and methods for employing speculative fills
US7409503B2 (en) * 2004-01-13 2008-08-05 Hewlett-Packard Development Company, L.P. Register file systems and methods for employing speculative fills
US7349926B2 (en) * 2004-03-30 2008-03-25 International Business Machines Corporation Atomic renaming and moving of data files while permitting lock-free look-ups
US8397224B2 (en) * 2004-09-13 2013-03-12 The Mathworks, Inc. Methods and system for executing a program in multiple execution environments
US9026744B2 (en) * 2005-03-23 2015-05-05 Qualcomm Incorporated Enforcing strongly-ordered requests in a weakly-ordered processing
US7500045B2 (en) * 2005-03-23 2009-03-03 Qualcomm Incorporated Minimizing memory barriers when enforcing strongly-ordered requests in a weakly-ordered processing system
US7395383B2 (en) * 2005-11-01 2008-07-01 International Business Machines Corporation Realtime-safe read copy update with per-processor read/write locks
US7917676B2 (en) * 2006-03-10 2011-03-29 Qualcomm, Incorporated Efficient execution of memory barrier bus commands with order constrained memory accesses
US7353346B2 (en) * 2006-03-24 2008-04-01 International Business Machines Corporation Read-copy-update (RCU) operations with reduced memory barrier usage
US7818306B2 (en) * 2006-03-24 2010-10-19 International Business Machines Corporation Read-copy-update (RCU) operations with reduced memory barrier usage
US7783817B2 (en) * 2006-08-31 2010-08-24 Qualcomm Incorporated Method and apparatus for conditional broadcast of barrier operations
US20080082532A1 (en) * 2006-10-03 2008-04-03 International Business Machines Corporation Using Counter-Flip Acknowledge And Memory-Barrier Shoot-Down To Simplify Implementation of Read-Copy Update In Realtime Systems
US7899663B2 (en) * 2007-03-30 2011-03-01 International Business Machines Corporation Providing memory consistency in an emulated processing environment
US7984202B2 (en) * 2007-06-01 2011-07-19 Qualcomm Incorporated Device directed memory barriers
US20090006507A1 (en) * 2007-06-27 2009-01-01 Mingnan Guo System and method for ordering reclamation of unreachable objects
US8495641B2 (en) * 2007-06-29 2013-07-23 International Business Machines Corporation Efficiently boosting priority of read-copy update readers while resolving races with exiting and unlocking processes
US8706706B2 (en) * 2007-09-13 2014-04-22 International Business Machines Corporation Fast path for grace-period detection for read-copy update system
US8055918B2 (en) * 2008-04-03 2011-11-08 International Business Machines Corporation Optimizing preemptible read-copy update for low-power usage by avoiding unnecessary wakeups
US7953778B2 (en) * 2008-05-20 2011-05-31 International Business Machines Corporation Efficient support of consistent cyclic search with read-copy update and parallel updates
US8108696B2 (en) * 2008-07-24 2012-01-31 International Business Machines Corporation Optimizing non-preemptible read-copy update for low-power usage by avoiding unnecessary wakeups
US8020160B2 (en) * 2008-07-28 2011-09-13 International Business Machines Corporation User-level read-copy update that does not require disabling preemption or signal handling
US7953708B2 (en) * 2008-07-28 2011-05-31 International Business Machines Corporation Optimizing grace period detection for preemptible read-copy update on uniprocessor systems
US8195893B2 (en) * 2008-11-03 2012-06-05 International Business Machines Corporation Eliminating synchronous grace period detection for non-preemptible read-copy update on uniprocessor systems
US8185704B2 (en) * 2009-09-02 2012-05-22 International Business Machines Corporation High performance real-time read-copy update
US9459963B2 (en) * 2009-09-03 2016-10-04 International Business Machines Corporation Safely rolling back transactions in a transactional memory system with concurrent readers
US8539204B2 (en) 2009-09-25 2013-09-17 Nvidia Corporation Cooperative thread array reduction and scan operations
US20110285736A1 (en) 2010-05-21 2011-11-24 Kilgard Mark J Decomposing cubic bèzier segments for tessellation-free stencil filling
GB2481232A (en) * 2010-06-16 2011-12-21 Advanced Risc Mach Ltd Cache for a multiprocessor system which can treat a local access operation as a shared access operation
US8407503B2 (en) 2010-09-27 2013-03-26 International Business Machines Corporation Making read-copy update free-running grace period counters safe against lengthy low power state sojourns
US8615771B2 (en) 2011-06-20 2013-12-24 International Business Machines Corporation Effective management of blocked-tasks in preemptible read-copy update
US9189413B2 (en) 2011-06-20 2015-11-17 International Business Machines Corporation Read-copy update implementation for non-cache-coherent systems
US9250978B2 (en) 2011-06-27 2016-02-02 International Business Machines Corporation Asynchronous grace-period primitives for user-space applications
US8661005B2 (en) 2011-12-08 2014-02-25 International Business Machines Corporation Optimized deletion and insertion for high-performance resizable RCU-protected hash tables
US9009122B2 (en) 2011-12-08 2015-04-14 International Business Machines Corporation Optimized resizing for RCU-protected hash tables
US9092272B2 (en) * 2011-12-08 2015-07-28 International Business Machines Corporation Preparing parallel tasks to use a synchronization register
US9256476B2 (en) 2011-12-10 2016-02-09 International Business Machines Corporation Expedited module unloading for kernel modules that execute read-copy update callback processing code
US9003420B2 (en) 2012-05-18 2015-04-07 International Business Machines Corporation Resolving RCU-scheduler deadlocks
CN102819466B (zh) * 2012-06-29 2015-08-19 华为技术有限公司 操作系统异常的处理方法及其装置
US8938631B2 (en) 2012-06-30 2015-01-20 International Business Machines Corporation Energy efficient implementation of read-copy update for light workloads running on systems with many processors
US8874535B2 (en) 2012-10-16 2014-10-28 International Business Machines Corporation Performance of RCU-based searches and updates of cyclic data structures
US8924655B2 (en) 2013-02-04 2014-12-30 International Business Machines Corporation In-kernel SRCU implementation with reduced OS jitter
US8972801B2 (en) 2013-02-04 2015-03-03 International Business Machines Corporation Motivating lazy RCU callbacks under out-of-memory conditions
US9348765B2 (en) 2013-03-14 2016-05-24 International Business Machines Corporation Expediting RCU grace periods under user mode control
US9244844B2 (en) 2013-03-14 2016-01-26 International Business Machines Corporation Enabling hardware transactional memory to work more efficiently with readers that can tolerate stale data
US9396226B2 (en) 2013-06-24 2016-07-19 International Business Machines Corporation Highly scalable tree-based trylock
EP2827247A1 (de) * 2013-07-16 2015-01-21 Continental Automotive GmbH Verfahren zum Synchronisieren von Zustandswechseln in Mehrkernrechnern eingebetteter Systeme
US9389925B2 (en) 2013-12-03 2016-07-12 International Business Machines Corporation Achieving low grace period latencies despite energy efficiency
US9875148B2 (en) 2014-06-27 2018-01-23 International Business Machines Corporation Detecting deadlocks involving inter-processor interrupts
US9720836B2 (en) 2015-05-11 2017-08-01 International Business Machines Corporation Preemptible-RCU CPU hotplugging while maintaining real-time response
US9552236B2 (en) 2015-05-12 2017-01-24 International Business Machines Corporation Tasks—RCU detection of tickless user mode execution as a quiescent state
US9886329B2 (en) 2015-06-25 2018-02-06 International Business Machines Corporation Scalable RCU callback offloading
US9965432B2 (en) 2015-10-02 2018-05-08 International Business Machines Corporation Handling CPU hotplug events in RCU without sleeplocks
CN106020962B (zh) * 2016-05-31 2019-05-21 Oppo广东移动通信有限公司 一种进程控制方法及终端设备
US10140131B2 (en) 2016-08-11 2018-11-27 International Business Machines Corporation Shielding real-time workloads from OS jitter due to expedited grace periods
US10353748B2 (en) 2016-08-30 2019-07-16 International Business Machines Corporation Short-circuiting normal grace-period computations in the presence of expedited grace periods
US10282230B2 (en) 2016-10-03 2019-05-07 International Business Machines Corporation Fair high-throughput locking for expedited grace periods
US10146577B2 (en) 2016-12-11 2018-12-04 International Business Machines Corporation Enabling real-time CPU-bound in-kernel workloads to run infinite loops while keeping RCU grace periods finite
US10372510B2 (en) 2017-03-15 2019-08-06 International Business Machines Corporation Using expedited grace periods to short-circuit normal grace-period computations
US11055271B2 (en) 2017-11-13 2021-07-06 International Business Machines Corporation Funnel locking for sleepable read-copy update
US10983840B2 (en) 2018-06-21 2021-04-20 International Business Machines Corporation Consolidating read-copy update types having different definitions of a quiescent state
US10268610B1 (en) 2018-08-16 2019-04-23 International Business Machines Corporation Determining whether a CPU stalling a current RCU grace period had interrupts enabled
US10831542B2 (en) 2018-10-01 2020-11-10 International Business Machines Corporation Prevent counter wrap during update-side grace-period-request processing in tree-SRCU implementations
US10613913B1 (en) 2018-10-06 2020-04-07 International Business Machines Corporation Funnel locking for normal RCU grace period requests
US11386079B2 (en) 2019-06-26 2022-07-12 International Business Machines Corporation Replacing preemptible RCU with an augmented SRCU implementation
US10977042B2 (en) 2019-07-26 2021-04-13 International Business Machines Corporation Using expedited RCU grace periods to avoid out-of-memory conditions for offloaded RCU callbacks
US11321147B2 (en) 2019-08-29 2022-05-03 International Business Machines Corporation Determining when it is safe to use scheduler lock-acquiring wakeups to defer quiescent states in real-time preemptible read-copy update

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5155832A (en) * 1989-07-05 1992-10-13 Hewlett-Packard Company Method to increase performance in a multi-level cache system by the use of forced cache misses
US5636363A (en) * 1991-06-14 1997-06-03 Integrated Device Technology, Inc. Hardware control structure and method for off-chip monitoring entries of an on-chip cache
US5442758A (en) 1993-07-19 1995-08-15 Sequent Computer Systems, Inc. Apparatus and method for achieving reduced overhead mutual exclusion and maintaining coherency in a multiprocessor system utilizing execution history and thread monitoring
US5530804A (en) * 1994-05-16 1996-06-25 Motorola, Inc. Superscalar processor with plural pipelined execution units each unit selectively having both normal and debug modes
JP3723243B2 (ja) * 1994-11-11 2005-12-07 富士通株式会社 プロセッサ装置及びその制御方法
US6088771A (en) 1997-10-24 2000-07-11 Digital Equipment Corporation Mechanism for reducing latency of memory barrier operations on a multiprocessor system
US6055605A (en) 1997-10-24 2000-04-25 Compaq Computer Corporation Technique for reducing latency of inter-reference ordering using commit signals in a multiprocessor system having shared caches
US6085263A (en) 1997-10-24 2000-07-04 Compaq Computer Corp. Method and apparatus for employing commit-signals and prefetching to maintain inter-reference ordering in a high-performance I/O processor
US6131155A (en) * 1997-11-07 2000-10-10 Pmc Sierra Ltd. Programmer-visible uncached load/store unit having burst capability

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009515280A (ja) * 2006-11-27 2009-04-09 インテル コーポレイション 中央化された割り込みコントローラ

Also Published As

Publication number Publication date
US20020194436A1 (en) 2002-12-19
US6996812B2 (en) 2006-02-07

Similar Documents

Publication Publication Date Title
JP2003044452A (ja) 同期メモリ・バリアを実装する方法およびシステム
Boroumand et al. CoNDA: Efficient cache coherence support for near-data accelerators
US6618737B2 (en) Speculative caching of individual fields in a distributed object system
US6665783B2 (en) Memory-to-memory copy and compare/exchange instructions to support non-blocking synchronization schemes
Rudolph et al. Dynamic decentralized cache schemes for MIMD parallel processors
US6886162B1 (en) High speed methods for maintaining a summary of thread activity for multiprocessor computer systems
McKenney Exploiting deferred destruction: an analysis of read-copy-update techniques in operating system kernels
US5742785A (en) Posting multiple reservations with a conditional store atomic operations in a multiprocessing environment
Lupon et al. A dynamically adaptable hardware transactional memory
US8688920B2 (en) Computing system with guest code support of transactional memory
EP0864982A1 (en) Digital data processor with improved checkpointing and forking
US20060101081A1 (en) Distributed Database System Providing Data and Space Management Methodology
Bal et al. Replication techniques for speeding up parallel applications on distributed systems
Blelloch et al. The parallel persistent memory model
CN101313285A (zh) 高速缓存包含性的按组放宽
US6892319B2 (en) Method for verifying abstract memory models of shared memory multiprocessors
Saad et al. Transactional forwarding: Supporting highly-concurrent stm in asynchronous distributed systems
John et al. Evaluation of causal distributed shared memory for data-race-free programs
Karp et al. Data merging for shared-memory multiprocessors
Qian et al. BulkCommit: scalable and fast commit of atomic blocks in a lazy multiprocessor environment
Ta et al. Understanding the impact of fine-grained data sharing and thread communication on heterogeneous workload development
Khan et al. An object-aware hardware transactional memory system
Borrmann et al. Store coherency in a parallel distributed-memory machine
Kubiatowicz Closing the Window of Vulnerability in Multiphase memory transaction: The alewife transaction store
Mohindra Issues in the design of distributed shared memory systems

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050616

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050907

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060228