JP5576798B2 - 決定論的マルチプロセッシング(deterministicmultiprocessing) - Google Patents

決定論的マルチプロセッシング(deterministicmultiprocessing) Download PDF

Info

Publication number
JP5576798B2
JP5576798B2 JP2010538213A JP2010538213A JP5576798B2 JP 5576798 B2 JP5576798 B2 JP 5576798B2 JP 2010538213 A JP2010538213 A JP 2010538213A JP 2010538213 A JP2010538213 A JP 2010538213A JP 5576798 B2 JP5576798 B2 JP 5576798B2
Authority
JP
Japan
Prior art keywords
thread
deterministic
threads
code
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010538213A
Other languages
English (en)
Other versions
JP2011507112A (ja
JP2011507112A5 (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.)
University of Washington
Original Assignee
University of Washington
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 University of Washington filed Critical University of Washington
Publication of JP2011507112A publication Critical patent/JP2011507112A/ja
Publication of JP2011507112A5 publication Critical patent/JP2011507112A5/ja
Application granted granted Critical
Publication of JP5576798B2 publication Critical patent/JP5576798B2/ja
Expired - Fee Related 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
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/463Program control block organisation
    • 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/466Transaction processing
    • 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
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本願発明の実施例は、例えば、決定論的マルチプロセッシングに関する。
本出願は、参照により本明細書に組み込まれる2007年12月12日出願の「DETERMINISTIC MULTIPROCESSING(決定論的マルチプロセッシング)」という名称の米国特許仮出願第61/013,019号の利益を主張する。
マルチプロセッシングは、2つ以上の処理装置がそれぞれ1つまたは複数のプロセス(プログラムまたは命令のセット)を同時に実行する動作モードである。マルチプロセッシングシステムの目的は、処理速度を向上させることである。通常、これは、各処理装置が同じプロセスの異なる命令のセットまたは異なるスレッドを処理することによって達成される。プロセスは、1つまたは複数のスレッドを実行することができる。各スレッドは、それ自体のプログラムコンテキストを含むそれ自体のプロセッサコンテキストを有する。従来、アプリケーションがマルチプロセッシングの利益を利用するためには、ソフトウェア開発者は、アプリケーションをマルチスレッド型で書く必要がある。本明細書で使用する場合、マルチスレッドアプリケーションとは、2つ以上のスレッドを同時に実行することができるプログラムを指す。
マルチプロセッサまたはマルチコアシステム(まとめて「マルチプロセッシングシステム」と呼ぶ)において、マルチスレッドアプリケーションの2つ以上のスレッドは同時に実行することができ、各プロセッサまたはコアが特定のスレッドを実行する。マルチスレッドアプリケーションのスレッドが、同時実行中に、例えばメモリなどリソースを共有することは、一般的である。本明細書で使用される場合、同時実行とは、マルチスレッドアプリケーションの2つ以上のスレッドの同時の実行を指す。同時実行の結果、マルチスレッドアプリケーションの2つ以上のスレッドが同じ共有リソースを読み取り、および/または更新することができる。例えば、あるスレッドは、共有メモリロケーションの値を変更することができ、一方、別のスレッドは、共有メモリロケーションに格納された値に応じて、一連の操作を実行する。
従来のソフトウェア開発モデル下で、ソフトウェア開発者は、そのマルチスレッドアプリケーション内の並列スレッドを識別し、正しく同期しようと試みることにかなりの時間量を費やす。例えば、開発者は、ロック、セマフォ、バリア、または他の同期機構を明示的に使用して、共有リソースへのアクセスを制御することができる。スレッドが共有リソースにアクセスするとき、同期機構は、リソースが使用可能になるまで、これらのスレッドを一時停止することによって、他のスレッドがリソースにアクセスするのを防ぐ。同期機構を明示的に実装するソフトウェア開発者は、通常、同期コードをデバッグするのにもかなりの時間量を費やす。しかし、通常、同期エラーに起因するソフトウェアの欠陥(バグとも呼ばれる)が一時的に表面化する(すなわち、インターリーブされたスレッド操作の特定のシーケンスにのみバグが現れる可能性がある)。その結果、欠陥のあるソフトウェアは、小さな同期バグが現れる前に、何百回も正しく実行する可能性がある。
こうしたシステムにおけるスレッドの様々なインターリービングによって非決定論的挙動が作り出されるため、マルチプロセッシングシステムのためのソフトウェアを開発することは難しい。インターリービングとは、スレッド間の対話を含み得るスレッド操作の順序を指す。スレッド間の可能なインターリービングの数は、スレッドの数が増すにつれて、著しく増す。その結果、マルチスレッドアプリケーションは、誤り検出およびモデリングプログラムの挙動に関して、追加の問題を提示する。例えば、マルチスレッドアプリケーションに同じ入力が与えられると、マルチプロセッシングシステムは、スレッド操作を非決定論的にインターリーブし、それによって、マルチスレッドアプリケーションが実行されるたびに異なる出力を生成する。図1は、マルチプロセッシングシステムにおいて実行されるマルチスレッドアプリケーションにおける2つの可能なスレッドインターリービングの例を示す高レベル図である。図示されるように、アプリケーションは、少なくとも2つのスレッド、スレッド1およびスレッド2を含む。アプリケーションが呼び出されると、ある時点で、スレッド1は、変数Aの値を1に設定する(A=1)操作、次いで変数Bの値を変数Aの値に設定する(B=A)操作を実行し、スレッド2は、変数Bの値をゼロに設定する(B=0)操作、次いで変数Aの値を変数Bの値に設定する(A=B)操作を実行する。図示されるように、スレッド1およびスレッド2の操作は、非決定論的にインターリーブされ、それによって、アプリケーションが呼び出されるたびに、異なる出力を生成する。すなわち、最初に示された呼び出し中、操作のインターリービングによって変数AおよびBがそれぞれゼロに設定され、2番目に示された呼び出し中、操作のインターリービングによって変数AおよびBがそれぞれ1に設定された。
マルチスレッド実行における非決定性は、例えば、他のプロセスが同時に実行する、オペレーティングシステムリソースの割り当てにおける差、キャッシュの状態、トランスレーションルックアサイドバッファ(「TLB」)、バス、割り込み、および他のマクロアーキテクチャ構造など、実行環境におけるわずかな変化に起因し得る。
その結果、マルチスレッドアプリケーションを開発することは、シングルスレッドアプリケーションを開発するよりかなり難しい。
従来、この問題に対処するにあたっての取り組みは、以前生成されたログファイルに基づいてマルチスレッド実行を決定論的に再生することに焦点を当てていた。しかし、決定論的再生システムは、再生ログファイルの維持に伴うオーバーヘッドの結果、かなりの性能の低下を受ける。さらに、決定論的再生では、ソフトウェア開発者は、スレッドのインターリービングがどのように実行されるかを制御しない。その結果、ソフトウェアが顧客に配布される前に、操作の特定のインターリービングに起因する同期バグは、識別(およびより重要には修正)されない場合がある。非決定性は、テストカバレージを評価するのを難しくする点で、ソフトウェア開発プロセスをさらに複雑にする。良好なカバレージは、広範なプログラム入力と、広範な可能なスレッドインターリービングとを必要とする。
ファシリティの1つまたは複数の実施形態が、添付の図面の図に例として、かつ限定されないものとして示されている。図中、参照番号は、類似の要素を示す。
マルチスレッドプログラムにおける、2つの可能なスレッドインターリービングの一例を示す高レベル図である。 1つまたは複数の実施形態における、ファシリティによって実行される決定論的シリアル化プロセスのフロー図である。 1つまたは複数の実施形態における、ファシリティによって実行される決定論的選択的シリアル化プロセスのフロー図である。 1つまたは複数の実施形態における、ファシリティが実行するコンピューティングシステムのアーキテクチャ例を示す高レベルブロック図である。 1つまたは複数の実施形態における、決定論的マルチプロセッシングレイヤの様々な機能的要素を示す高レベルブロック図である。 1つまたは複数の実施形態における、マルチプロセッサコードを決定論的にするためにファシリティによって使用されるデータ構造を示す高レベルブロック図である。 1つまたは複数の実施形態における、スレッドを作成し、決定論的に実行する一例を示す高レベル図である。 1つまたは複数の実施形態における、マルチプロセッサコードを決定論的にするためにトランザクショナルメモリシステムを使用する一例を示す高レベルブロック図である。 1つまたは複数の実施形態における、アプリケーションを増補(augment)するためにファシリティによって実行されるプロセスを示すフロー図である。 1つまたは複数の実施形態における、ブロックを構文解析するためにファシリティによって実行されるプロセスを示すフロー図である。 1つまたは複数の実施形態における、マルチスレッドアプリケーションの増補された機能の制御フローグラフの一例である。 1つまたは複数の実施形態における、決定論的マルチプロセッシング初期化関数を示すフロー図である。 1つまたは複数の実施形態における、決定論的マルチプロセッシングコミット関数を示すフロー図である。
決定論的再生システムなどの従来のシステムは、マルチスレッドアプリケーションの開発における非決定論的挙動に伴う問題を適切に解決しない。さらに、既存のシステムは、マルチスレッドアプリケーションの配置における非決定論的挙動に伴う問題を低減することも、解決しようと試みることもない。したがって、マルチスレッドアプリケーションの決定論的マルチプロセッシングのためのハードウェアおよび/またはソフトウェアファシリティ(「ファシリティ」)が開発された。本明細書で使用される場合、決定論的マルチプロセッシングという用語は、マルチスレッドアプリケーションに同じ入力が与えられると、マルチスレッドアプリケーションによって同じ出力が生成される技術を指す。例えば、共有リソースへのスレッドアクセスを同期するための負担から開発者を解放することによって、ファシリティは、マルチスレッドアプリケーションを開発する処理を簡略化する。さらにファシリティは、こうしたマルチスレッドアプリケーションが配置されるとき、例えば、開発者がバグを再生し、様々なスレッドインターリービングを厳格にテストできるようにすることによって、マルチスレッドアプリケーションの信頼性を向上させる。
いくつかの実施形態において、ファシリティは、マルチスレッドアプリケーションの実行を決定論的な有限数の操作の組(各組は、本明細書では「量子」と呼ばれる)に分割する。量子を識別するとき、ファシリティは、例えば、通信無しのスレッド操作など、並行して実行され得る操作と、スレッド間通信、システムコールなど、決定論的な順序で実行されるべき操作とを区別することができる。次いで、ファシリティによって識別される各量子は、決定論的順序で実行される。マルチスレッドアプリケーションのスレッドによって量子が実行される順序を制御することによって、ファシリティは、マルチスレッドアプリケーションが決定論的に挙動できるようにする。すなわち、同じ入力が与えられると、マルチスレッドアプリケーションのスレッドは、その操作を決定論的にインターリーブし、それによって同じ出力を提供する。
いくつかの実施形態において、ファシリティは、マルチスレッドアプリケーションの実行をシリアル化する。すなわち、ファシリティは、すべてのスレッド操作のグローバルなインターリービングを制御することができる。例えば、これは、スレッド間に決定論的順序で渡されるメモリアクセストークンを確立することによって達成され得る。スレッドは、トークンの値がそのスレッドの識別子に一致するとき、トークンを「保持する」と呼ばれ得る。トークンの値がスレッドの識別子に一致しないとき、トークンの値がスレッドの識別子に一致するまで、その実行は一時停止される。トークンの値がスレッドの識別子に一致するとき、スレッドは、トークンが次のスレッドに渡される前に、決定論的な有限数の操作(すなわち量子)を実行する。例えば、決定論的順序で次のスレッドの識別子に対応するように、トークンの値を進めることによって、トークンは、次のスレッドに渡され得る。
図2は、1つまたは複数の実施形態における、ファシリティによって実行される決定論的シリアル化プロセス200のフロー図である。例えば、決定論的シリアル化プロセス200は、マルチスレッドアプリケーションがマルチプロセッシングシステム上で実行している間に実行され得る。マルチスレッドアプリケーションが実行している間、ファシリティは、スレッドごとにステップ205〜215をループする。ステップ205で、トークンの値がスレッドの識別子に一致することをファシリティが決定した場合、ファシリティはステップ210に進み、そうでない場合、ファシリティは折り返してステップ205に戻る。すなわち、ファシリティは、トークンの値がそのスレッドの識別子に一致するまで、スレッドの実行を一時停止する。ステップ210で、ファシリティは、識別子がトークンに一致するスレッドが決定論的な有限数の操作(すなわち量子)を実行できるようにし、次いでファシリティは、ステップ215に進む。ステップ215で、ファシリティは、トークンの値を、決定論的な順序で次のスレッドの識別子に等しくなるように設定し、次いでファシリティは、ステップ205に進む。ファシリティは、アプリケーションが終了するまで、シリアル化プロセス200をループし続けることができることに留意されたい。
図2および以下のフロー図のそれぞれに示されるステップは様々な方法で変更され得ることを、当業者であれば理解されたい。例えば、いくつかのステップの順序が並べ替えられてもよく、いくつかのサブステップが並行して実行されてもよく、いくつかの示されたステップが省略されてもよく、または他のステップが含まれていてもよい。
いくつかの実施形態において、ファシリティは、マルチスレッドアプリケーションの実行を選択的にシリアル化する。すなわち、ファシリティは、他のスレッド操作が並行して実行される間に、いくつかのスレッド操作のインターリービングを制御する(本明細書では「制御された操作」と呼ばれる)ことができる。例えば、ファシリティは、2つ以上のスレッド間の通信を伴う操作のインターリービングを制御することができる。スレッド間通信は、スレッドが別のスレッドによってプライベートに保持されるデータを読み取るとき、またはスレッドが共有データに書き込み、それをプライベート化するときに起こる。いくつかの実施形態において、スレッドが別のスレッドによってプライベートに保持されるとみなされるデータを読み取ろうと試みるとき、スレッドは、トークンの値がその識別子に一致するまで、その実行を一時停止する。同様に、いくつかの実施形態において、スレッドは、共有される、または別のスレッドによってプライベートに保持されるとみなされるデータに書き込もうと試みるとき、トークンの値がその識別子に一致し、すべての他のスレッドがその実行における決定論的ポイントに到達する(例えば、量子の実行を終了する)まで、その実行を一時停止する。その結果、ファシリティは、すべてのスレッドが、その実行での決定論的ポイントにおけるデータの状態の変化(共有からスレッドによってプライベートに保持されるまで)を観察することを確実にする。
いくつかの実施形態において、スレッド間通信を検出するために、ファシリティは、マルチスレッドアプリケーションのアドレス空間におけるメモリロケーションごとに、共有情報を含む共有メモリデータ構造を維持する。例えば、こうした情報は、メモリロケーションが共有である、プライベートであるなどを示すことができる。共有は、操作レベル、命令レベル、ページレベルなど、様々なレベルで起こり得ることに留意されたい。いくつかの実施形態において、スレッドは、それ自体のプライベートに保持されたデータにアクセスすることも、トークンを保持することなく共有データを読み取ることもできる。しかし、共有データに書き込むために、または別のスレッドによってプライベートとして保持されるデータを読み取るために、スレッドは、トークンを保持し、すべての他のスレッドがブロックされるまで待つ(すなわち、他のスレッドもそのトークンを待っている)。スレッドが、プライベートとみなされるメモリロケーションを読み取るとき、共有メモリデータ構造は、読み取られたメモリロケーションを共有されたものとみなすべきであることを示すために更新される。スレッドがメモリロケーションに書き込むとき、メモリロケーションをそのスレッドによってプライベートに保持されているものとみなすべきであることを示すために、共有メモリデータ構造が更新される。同様に、スレッドが別のスレッドによってこれまではアクセスされていないメモリロケーションを読み取るとき、共有メモリデータ構造は、メモリロケーションをそのスレッドによってプライベートに保持されているものとみなすべきであることを示すために更新される。
図3は、1つまたは複数の実施形態における、ファシリティによって実行される決定論的選択的シリアル化プロセス300のフロー図である。例えば、スレッドまたはプロセッサが、メモリ操作、システムコールなど、制御された操作を実行しようと試行すると、選択的シリアル化プロセス300が実行され得る。ステップ305で、操作がシステムコールである(例えばI/O操作など)ことをファシリティが決定した場合、ファシリティはステップ325に進み、そうでない場合、ファシリティはステップ310に進む。ステップ310で、操作がスレッドによってプライベートに保持されていないメモリにアクセスするとファシリティが決定した場合、ファシリティはステップ315に進み、そうでない場合、ファシリティはステップ355に進む。ステップ315で、操作が共有メモリにアクセスしたことをファシリティが決定した場合、ファシリティはステップ320に進み、そうでない場合、ファシリティはステップ325に進む。ステップ320で、操作が格納操作であることをファシリティが決定した場合、ファシリティはステップ325に進み、そうでない場合、ファシリティはステップ355に進む。ステップ325で、トークンの値がスレッドの識別子に一致することをファシリティが決定した場合、ファシリティはステップ330に進み、そうでない場合、ファシリティは折り返してステップ325に戻る。すなわち、ファシリティは、トークンの値が選択されたスレッドの識別子に一致するまで、選択されたスレッドの実行を一時停止する。ステップ330で、マルチスレッドアプリケーションのすべてのスレッドが一時停止(またはブロック)されたことをファシリティが決定した場合、ファシリティはステップ335に進み、そうでない場合、ファシリティは折り返してステップ330に戻る。トークンを保持するスレッドが実行し得る前に、すべてのスレッドが一時停止されるのを待つことによって、ファシリティは、実行における決定論的ポイントで、すべてのスレッドが操作の実行に起因する任意の状態の変化を観察することを確実にする。ステップ335で、操作がシステムコールであることをファシリティが決定した場合、ファシリティはステップ355に進み、そうでない場合、ファシリティはステップ340に進む。ステップ340で、操作が格納操作であることをファシリティが決定した場合、ファシリティはステップ345に進み、そうでない場合、ファシリティはステップ350に進む。ステップ345で、ファシリティは、操作によって影響を受けるメモリロケーションを、スレッドによってプライベートに保持されているものとみなすべきであることを示すために、共有メモリデータ構造を更新し、次いで、ファシリティはステップ355に進む。ステップ350で、ファシリティは、操作によってアクセスされたメモリロケーションを共有されたものとみなすべきであることを示すために、共有メモリデータ構造を更新し、次いでファシリティはステップ355に進む。ステップ355で、ファシリティによって、スレッドは操作を始めることができ、次いでファシリティは戻る。
いくつかの実施形態において、ファシリティは、トランザクショナルメモリシステムと共に動作して、マルチスレッドアプリケーションの実行をシリアル化または選択的にシリアル化する。例えば、ファシリティは、トランザクショナルメモリシステムを使用して、メモリ操作の決定論的順序を侵害することになるスレッド間通信を検出することができる。すなわち、共有メモリデータ構造の代わりに、またはそれに加えて、トランザクショナルメモリシステムが使用され得る。トランザクショナルメモリシステムは、ハードウェアトランザクショナルメモリ(HTM)システム、ソフトウェアトランザクショナルメモリ(STM)システム、またはハイブリッドハードウェア−ソフトウェアトランザクショナルメモリシステム(HS−TM)とすることができることに留意されたい。トランザクショナルメモリシステムと共に動作するとき、ファシリティは、スレッドによって実行される各量子をトランザクション内に封入する。各量子をトランザクション内に封入することによって、スレッドは、アトミック的に、かつ隔離されて実行するようにみえる。その結果、トランザクションは、並行して実行され、次いで、決定論的順序に従ってコミットされ得る。通常、トランザクションは、決定論的順序を侵害することになる(本明細書では「競合」と呼ばれる)スレッド間通信を含む場合、コミットされない。競合が存在するとき、トランザクションは、中止され、再開される。
いくつかの実施形態において、ファシリティは、量子ビルダコンポーネント(quantum builder component)、および決定論的マルチプロセッシング(「DMP」)コンポーネントを含む。量子ビルダコンポーネントは、マルチスレッドアプリケーションの実行を量子(すなわち、決定論的な有限数の操作の組)に分割するために使用される。いくつかの実施形態において、量子ビルダコンポーネントは、例えば通信無しのスレッド操作など、並行して実行され得る操作と、スレッド間通信、システムコールなど、決定論的な順序で実行されるべき操作(例えば、制御された操作)とを区別する。DMPコンポーネントは、決定論的順序に従って各量子が実行されることを確実にする。いくつかの実施形態において、トークンがブロックされた(例えば、別のスレッドによって保持されたロックを待つ)スレッドに進められると、ファシリティは、トークンを次のスレッドに渡し、それによって、開発者がマルチスレッドコード内に含まれる同期プリミティブのブロックに起因するライブロックを回避する。例えば、トークンがスレッド2に渡されるときにスレッド2が進むために必要とするロックをスレッド1が保持する場合、トークンは、次のスレッド(例えば、スレッド3)に渡される。トークンが決定論的順序で渡されるため、また各スレッドが量子を実行する(またはトークンを渡す)ため、量子は、決定論的にインターリーブされ、それによってコードが同じ入力で実行されるたびに同じ出力を生成し、ライブロックを防ぐ。
量子ビルダコンポーネントおよびDMPコンポーネントは、ハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせにおいて実装され得る。例えば、量子ビルダコンポーネントは、命令が後退するにつれてそれらをカウントし、所定の量子サイズに到達したとき、量子境界を配置することによって実装され得る。実行をシリアル化するために、DMPコンポーネントは、決定論的順序で量子境界においてプロセッサ間に渡されるトークンとして実装され得る。別の例として、実行を選択的にシリアル化するために、量子ビルダコンポーネントは、アクセスがスレッド間通信を伴うかどうか(例えば、共有データへのアクセスなど)を決定するために、メモリアクセスを監視することができる。例えば、一実施形態において、量子ビルダは、共有テーブルを実装するために、MESI(「変更、排他、共有、無効」)キャッシュコヒーレンスプロトコルによって維持されるキャッシュライン状態を使用する。排他または変更状態のキャッシュラインは、プロセッサによってプライベートに保持されるものとみなされ、トークンを保持しないそれ自体のスレッドによって自由に読み取られ、または書き込まれ得る。同様に、共有状態のキャッシュラインは、トークンを保持しないそれ自体のスレッドによって自由に読み取られ得る。すべてのスレッドがその実行における決定論的ポイントにあるとき(例えば、すべてのプロセッサがブロックされたとき)、およびプロセッサが決定論的トークンを取得したとき、プロセッサは、共有状態のキャッシュラインに書き込むことができる。こうした実施形態において、各プロセッサは、それがブロックされ、および/またはブロック解除されると、ブロードキャストする。任意のプロセッサによってキャッシュに入れられないラインに対応する共有テーブルにおけるエントリの状態は、メモリに保持され、メモリコントローラによって管理することができ、こうしたエントリの状態は、キャッシュミスが処理されるときに転送され得ることに留意されたい。いくつかの実施形態において、量子ビルダおよびDMPコンポーネントは、ハードウェアトランザクショナルメモリ(HTM)システムなどのトランザクショナルメモリ(TM)システムと共に動作して、特定のトランザクションコミット順序、すなわちトランザクション内に封入された量子の決定論的コミット順序を指定する。こうした実施形態において、TMシステムは、プロセッサがトークンを保持するとき、トランザクションをコミットし、トランザクションがコミットされた後、トークンは、決定論的順序で次のプロセッサに渡される。いくつかの実施形態において、ハードウェアは複数のトークンをサポートすることができ、それによって、プロセッサ間に渡されるトークンをそれぞれ指定する複数の決定論的プロセスが同時に実行できるようになることに留意されたい。
いくつかの実施形態において、ファシリティは、コンパイラまたはバイナリ書き換えインフラストラクチャを使用して実装され得る。例えば、量子ビルダコンポーネントは、マルチスレッドアプリケーションコード内に同期コードを挿入し、コンパイラによって生成される制御フローグラフ(「CFG」)において操作を追跡することによって、コンパイラを使用して量子を構築することができる。量子は、サイズが決定論的である限り、均一サイズのものである必要はないことに留意されたい。こうした同期コードは、例えば、関数呼び出しの最初および最後、およびCFG後退エッジの最後に挿入することができる。挿入されたコードは、量子サイズを追跡し、ターゲットサイズに到達したとき、DMPコンポーネントにコールバックする。例えば、実行のこうした実施形態をシリアル化するために、DMPコンポーネントは、決定論的順序でスレッド間に渡される待ち行列ロックとしてトークンを実装することができる。別の例として、実行を選択的にシリアル化するために、量子ビルダコンポーネントは、ロード操作および格納操作がDMPコンポーネントへのコールバックをもたらすように、コンパイラを使用して、コードを挿入することができる。いくつかの実施形態において、DMPコンポーネントは、ソフトウェアトランザクショナルメモリ(STM)システムなどのトランザクショナルメモリシステムと共に動作し、および/または共有テーブルを実装する。
いくつかの実施形態において、スレッドによって実行される操作のインターリービングを制御するために、ファシリティは、ソースコード、ソースコードの中間表現、または実行ファイルを増補することができる。例えば、ファシリティは、1つまたは複数の決定論的マルチプロセッシング(「DMP」)関数またはデータ構造をアプリケーションコードに挿入することによって、マルチスレッドアプリケーションコードを増補することができる。別の例として、挿入されたDMP関数は、1つまたは複数のデータ構造(例えば、共有メモリデータ構造)を維持する、DMPコンポーネントによって提供されるものなど、ランタイムシステムにコールバックすることができる。増補されたコードがマルチプロセッシングシステムによって実行されると、挿入されたDMP関数およびデータ構造は、次いで、メモリおよびI/O操作、システムコールなど、操作が実行される順序を制御するために使用される。スレッドがこうした動作を実行する順序を制御することによって、ファシリティは、マルチスレッドアプリケーションが決定論的に挙動できるようにする(本明細書では、「増補されたアプリケーション」と呼ばれる)。すなわち、同じ入力が与えられると、増補されたアプリケーションのスレッドは、操作の一部またはすべてを決定論的にインターリーブし、それによって同じ出力を提供することができる。ファシリティは他のスレッド操作を制御するように拡張され得ることを、当業者であれば理解されたい。
いくつかの実施形態において、ファシリティは、増補されたアプリケーションのスレッドによって実行される量子の決定論的実行を実施する、DMPライブラリによって提供される関数を挿入することによって、マルチスレッドアプリケーションコードを増補するコンパイラモジュールとして実装される。いくつかの実施形態において、コードが増補された後、コンパイラは、例えば、DMPライブラリに対するすべての呼び出しをインライン化するなど、コードを再度最適化する。コンパイラは本明細書では具体的に記載されない増補されたコードへの他の最適化を実行することができることを、当業者であれば理解されたい。
いくつかの実施形態において、ファシリティは、本明細書では「スレッドデータ構造」と呼ばれるDMPデータ構造を含み、その詳細は、図6を参照して以下でより詳しく説明される。しかし、任意の数のDMPデータ構造が含まれていてよいことに留意されたい。スレッドデータ構造が複数のDMPデータ構造を表し得ることにさらに留意されたい。いくつかの実施形態において、スレッドデータ構造は、実行中に増補されたアプリケーションによって作成される各スレッドに対応するスレッド識別子(「ID」)を格納する。例えば、スレッドデータ構造は、配列、リンクリスト、キュー、またはスレッドIDの他のデータ構造(本明細書では「スレッドコンテナ」と呼ばれる)を含み得る。
いくつかの実施形態において、スレッドデータ構造は、量子の実行の順序を制御するために使用され得るトークンを含む。例えば、いくつかの実施形態において、量子を実行する前に、スレッドは、トークンの現在の値がスレッドのIDに一致するかどうかを決定する。スレッドのIDがトークンの現在の値に一致するとき、スレッドは、量子を実行することができる。そうでない場合、スレッドは、トークンの現在の値がその識別子に一致するまで、量子を実行するのを待つ。
いくつかの実施形態において、スレッドが作成される順序は、スレッドが決定論的に実行される順序に対応する。例えば、各スレッドが作成されるとき、スレッドの対応するスレッドIDは、スレッドコンテナ内に順次格納され得る(例えば、最初に作成されたスレッドのスレッドIDは1、2番目に作成されたスレッドのスレッドIDは2など)。操作が実行されるとき、スレッドは、(第1のスレッドIDから開始して)スレッドIDが格納される順序に基づいてスレッドコンテナに格納されるスレッドIDを順次ループすることによって、トークンの値を進めるよう動作するいくつかのDMP関数を呼び出すことができる。スレッドが存在するとき、通常、スレッドの対応するIDがスレッドコンテナから削除されることに留意されたい。
いくつかの実施形態において、スレッドデータ構造は、トークンが進められる前にスレッドIDがトークンの現在の値に一致するスレッドによって実行され得る決定論的な有限数の(すなわち量子)制御された操作またはブロックに対応する値を格納する。制御された操作またはブロックのこの数は、本明細書では「コミットブロックサイズ」と呼ばれる。コミットブロックサイズは、1つからN個までの制御された操作またはブロックに及び得る。大きいコミットブロックサイズおよび小さいコミットブロックサイズには性能のトレードオフが関連することを、当業者であれば理解されたい。例えば、コミットブロックサイズが小さすぎるとき、スレッド間でのコンテキストの切り替えに伴うオーバーヘッドの結果として、増補されたアプリケーションの性能が悪化する。別の例として、コミットブロックサイズが大きすぎるとき、多くのまたはすべてのスレッドは、スレッドIDがトークンに一致するスレッド(およびスレッドIDがそのスレッドIDに先行するすべてのスレッド)がコミットブロックサイズによって指定された数の制御された操作を終了する、または実際に実行するのを待つのを余儀なくされ得るため、増補されたアプリケーションの性能が悪化する。少なくとも1つの実施形態において、コミットブロックサイズは、1,000に等しい。
いくつかの実施形態において、コミットブロックサイズは、構成可能である。例えば、コミットブロックサイズは、増補されたアプリケーションの様々なスレッドインターリービングをプログラム的に操作し、テストするように、ソフトウェア開発者によって構成され得る。別の例として、コミットブロックサイズは、増補されたアプリケーションによって作成され得る最大数のスレッド、および/または増補されたアプリケーションが実行するマルチプロセッシングシステムのプロセッサまたはコアの数に基づいて、自動的に構成され得る。スレッドによって実行される制御された操作の数をカウントするために様々な技術が使用され得ることを、当業者であれば理解されたい。例えば、いくつかの実施形態において、スレッドデータ構造は、スレッドIDが現在のトークンIDに一致するスレッドによって実行された制御された操作の数に対応する値を含む。スレッドが制御された操作を実行するたびに、制御された操作の数は、増分され、コミットブロックサイズと比較される。制御された操作の数がコミットブロックサイズに等しい場合、トークンは、次のスレッドIDに進められ、制御された操作の数は、ゼロにリセットされる。
マルチスレッドアプリケーションを増補して、いくつかのスレッドの操作(例えば、制御されたスレッド操作)の順序を制御することによって、開発プロセスは、かなり簡略化される。例えば、ファシリティは、マルチスレッドアプリケーションのスレッドインターリービングを直接操作し、それによってマルチスレッドアプリケーションの実質的により良いテストカバレージを可能にできるようにするために、ソフトウェア開発者によって使用され得る。開発者は、例えばコミットブロックサイズを変更することによって、制御されたスレッド操作のインターリービングを操作することができる。別の例として、開発者は、スレッドコンテナに格納されるスレッドIDの順序を変更することによって、制御されたスレッド操作のインターリービングを操作することができる。いくつかの実施形態において、ファシリティによって、ソフトウェア開発者は、挿入されたコードが量子構築物に影響を与えないように、増補のために挿入されたとコードをマーク付けすることができる。
いくつかの実施形態において、マルチスレッドアプリケーションは、その増補された形で配置される。マルチスレッドアプリケーションを増補された形で配置することによって、アプリケーションの信頼性は、実質的に向上する。というのは、例えば、「現場での」(すなわち顧客による)増補されたアプリケーションの実行は、社内でのアプリケーションのテストに、より似たものになるからである。さらに、マルチスレッドアプリケーションがクラッシュする、または同期バグを経験するとしたら、ソフトウェア開発者は、顧客から意味のあるクラッシュ情報を集めることによって欠陥を迅速に解決することができる。すなわち、増補された形で配置されると、クラッシュに先行する顧客によって実行されるアクションは、ソフトウェア開発者がクラッシュを容易に再生することができるようになるため、意味がある。その結果、ソフトウェア開発者は、クラッシュまたは同期バグがスレッドの未知のインターリービングに関連付けられた場合より実質的に早く欠陥を解決することができる。したがって、ファシリティは、マルチスレッドアプリケーションの開発および配置の両方を向上させる。
いくつかの実施形態において、マルチスレッドアプリケーションが開発される、および/またはマルチスレッドアプリケーションが配置されるコンピューティングシステムは、共有メモリへのアクセスを制御するためのトランザクショナルメモリ(「TM」)システムを含む。トランザクショナルメモリシステムは、ハードウェアトランザクショナルメモリ(「HTM」)、ソフトウェアトランザクショナルメモリ(「STM」)システム、またはハイブリッドハードウェア−ソフトウェア(HS−TM)システムとすることができる。両方のTMシステムは、当分野で知られている。STMシステムは、プログラミングアブストラクション(programming abstraction)を提供し、それを介して、スレッドは、共有リソースをロックすることなく、または共有リソースが解放されるのを待つことなく、その一部に1つまたは複数の共有リソース(例えばメモリ)が関与し得る操作のシーケンスをアトミック的に実行する。
従来のTMシステムは、他のスレッドが何をしているかに関係なく、スレッドが共有メモリへの変更を終了するという点で「楽観的」である。これは、例えば、マルチスレッドアプリケーションのスレッドごとにログを維持することによって達成され、トランザクションごとに、各スレッドは、その対応するログにその操作を順次記録する。例えば、ログは、メモリロケーションの数、並びにトランザクション中にスレッドが読み取り、および/または書き込む値を含み得る。トランザクションの最後に、他のスレッドが同じ共有メモリロケーションに並行してアクセスしなかった場合、スレッドは、実際に、操作のシーケンスを実行する(これは一般に「コミット」と呼ばれる)。しかし、別のスレッドが同じメモリロケーションのうちの1つまたは複数に並行してアクセスした場合、トランザクションは、中止され、再開される。すなわち、従来のTMシステムにおいて、同じトランザクション中に共有リソースが複数のスレッドによってアクセスされない限り、トランザクションは、並行して実行する。
従来のTMシステムに関連付けられた欠点がいくつかある。例えば、従来のTMシステムは、開発者がいくつかの操作、またはいくつかの操作のシーケンスをアトミックとして宣言できるようにすることによって、開発をある程度簡略化するが、従来のTMシステムは、マルチスレッドアプリケーションの決定論的マルチプロセッシングを提供しない。さらに、従来のTMシステムでは、ソフトウェア開発者は、マルチスレッドアプリケーションにおけるスレッドのインターリービングを指定し、または操作することができない。その結果、従来のTMシステムは、潜在的な同期バグにも苦しむ。また、HTMシステムと比較すると、STMシステムは、ログの維持に伴うオーバーヘッド、およびトランザクションのコミットに費やされた時間の結果、パフォーマンスヒットを被る。
いくつかの実施形態において、ファシリティは、HTM、STM、HS−TMシステムなど、共有リソースへのアクセスを制御するためにトランザクショナルメモリシステムを使用するマルチスレッドアプリケーションのいくつかのスレッド操作の実行の順序を制御する。すなわち、ファシリティは、スレッドが開始する、および/またはトランザクショナルメモリシステムにおけるトランザクションをコミットする順序を制御することができる。いくつかの実施形態において、ファシリティは、STMシステムによって提供されるアプリケーションプログラミングインターフェイス(「API」)を増補する。一例として、ファシリティは、以下の表1に示されたSTM APIの関数を増補することができる。ファシリティのいくつかの実施形態は、表1に提供されるSTM APIを参照して記載されるが、ファシリティは様々なトランザクショナルメモリシステムにおいて動作し得ることを、当業者であれば理解されたい。
Figure 0005576798
いくつかの実施形態において、ソフトウェア開発者は、マルチスレッドアプリケーション内のアトミックブロックを手動で指定する。例えば、ソフトウェア開発者は、以下のアトミックブロックを含み得る。
Figure 0005576798
コンパイル後、上記のアトミックブロック例は、以下の擬似コードによって置き換えられることになる。
Figure 0005576798
いくつかの実施形態において、トランザクションのうちの1つまたは複数(すなわち、アトミックブロック)は、ソフトウェア開発者に可視ではない。例えば、これらは、コンパイラ、ランタイム、TMシステム、またはその何らかの組み合わせによって挿入され得る。いくつかの実施形態において、ブロックがソフトウェア開発者によって指定されたか、それともコンパイラ、ランタイム、またはTMシステムによって挿入されたかにかかわらず、アトミックブロックは、増補される。いくつかの実施形態において、スレッドがSTM APIの増補された関数を呼び出すと、関数は、トークンの現在の値に対応するスレッドIDをチェックするDMP関数に制御を転送し、これは、トランザクションを開始し、および/または決定論的にコミットするために使用される。多くの異なる技術はトランザクションをインターセプトするために使用され得ることを、当業者であれば理解されたい。例えば、いくつかのSTM APIは、API関数の実行前および/または後に、制御をDMP関数に転送するために、フックが登録され得るコールバック機構を提供する。
増補されたトランザクショナルメモリシステムのトランザクションは、サイズが決定論的である。すなわち、各スレッドは、ブロックにおいて特定数の操作(本明細書では「コミットブロックサイズ」と呼ばれる)を実行し、次いでスレッドは、IDがトークンの現在の値に一致するスレッドで開始して、決定論的にコミットしようと試みる。トランザクションが有効であり、スレッドIDがトークンに一致する場合、スレッドは、STM_Commit_Transaction()を呼び出す。トランザクションがコミットされた後、トークンは、次のスレッドIDに進められる。しかし、トランザクションが無効である場合(例えば、スレッドがそのトランザクション中に別のスレッドによって書き込まれたロケーションから読み取ったため)、スレッドはSTM_Abort_Transaction()を呼び出す。通常、スレッドIDがトークンに一致するスレッドがその対応するトランザクションを正常にコミットするまで、トークンは進められないことに留意されたい。
いくつかの実施形態において、トークンの現在の値がトランザクションを実行するスレッドのスレッドIDに一致しない場合、いくつかのタイプの操作は、トランザクションに即座に中止させる。例えば、トランザクションがI/O操作など元に戻すことができない操作を含むとき、トランザクションを実行するスレッドは、そのスレッドIDがトークンに一致するかどうかを決定する。そのスレッドIDがトークンに一致する場合、トランザクションは、続行し得る。そうでない場合、トランザクションは、自動的に中止され得る。
いくつかの実施形態では、中止されたスレッド以降のスレッドIDを有するすべてのスレッドが中止され、一方、別の実施形態では、並行のトランザクションが同じ共有リソースにアクセスしたスレッドのみが中止され、再開される。通常、スレッドIDがトークンに一致するスレッドがその対応するトランザクションを正常にコミットするまで、トークンは進められない。その結果、それらのトランザクションを中止しなかった中止されたスレッド以降のスレッドIDを有する任意のスレッドは、STM_Commit_Transaction()を呼び出す前に、トークンがそのスレッドIDに一致するのを待つ。
HTMを有するコンピューティングシステムにおいて増補されたアプリケーションが実行されると、増補されたアプリケーションは、実質的に性能のペナルティなく、決定論的に実行され得ることに留意されたい。その結果、ソフトウェア開発者および/または製造業者は、スレッドインターリービングの可能性について徹底的にテストしたことを知っているマルチスレッドアプリケーションを配布することができる。したがって、同期バグがマルチスレッドコードに残っている場合でさえ、顧客には見えない。
より詳しくファシリティについて説明する前に、ファシリティを実施することができる環境について検討することが有用である。図4は、1つまたは複数の実施形態における、ファシリティが実行するコンピューティングシステム400のアーキテクチャ例を示す高レベルブロック図である。説明を曖昧にするのを回避するために、いくつかのよく知られている構造および機能は、詳細に示されても述べられてもいない。コンピューティングシステム400は、相互接続システム415に結合された1つまたは複数のプロセッサ405およびメモリ410を含む。プロセッサ405は、コンピューティングシステム400の中央処理装置(「CPU」)であり、したがってその操作全体を制御する。いくつかの実施形態において、プロセッサ405は、メモリ410に格納されたソフトウェアを実行することによってこれを達成する。いくつかの実施形態において、コンピューティングシステム400は、単一の集積回路(「ダイ」と呼ばれる)から成るパッケージ、ひとまとめにされた1つまたは複数のダイ、複数のパッケージなどに2つ以上の独立したコアを有するプロセッサ405を含む。いくつかの実施形態において、コンピューティングシステム400は、単一のコアのみを有するにもかかわらず、マルチコアプロセッサとして実行することができるハイパースレッドプロセッサ405を含む。プロセッサ405は、1つまたは複数のプログラム可能な汎用または専用マイクロプロセッサ、デジタル信号プロセッサ(「DPS」)プログラム可能コントローラ、特定用途向け集積回路(「ASIC」)、プログラム可能論理装置(「PLD」)など、またはこうした装置の組み合わせとすることができ、またはそれらを含み得る。
図4に示される相互接続システム415は、適切なブリッジ、アダプタ、および/またはコントローラによって接続される任意の1つまたは複数の個別の物理バスおよび/またはポイントツーポイント接続を表す抽象概念である。相互接続システム415は、例えば、システムバス、ある形の周辺機器コンポーネント相互接続(PCI)バス、ハイパートランスポートまたは業界標準アーキテクチャ(ISA)バス、小型コンピュータシステムインターフェイス(SCSI)バス、ユニバーサルシリアルバス(USB)、電気電子技術者協会(IEEE)標準1394バス(時として「FireWire」と呼ばれる)などを含み得る。
システムメモリ410は、プログラムおよびデータが使用されている間にそれらを格納するためのメモリ420、プログラムおよびデータを永続的に格納するためのハードドライブなどの固定記憶装置425、およびコンピュータ可読媒体に格納されるプログラムおよびデータを読み取るためのCD−ROMまたはDVD−ROMドライブなどのコンピュータ可読媒体ドライブ430を含む。本明細書で使用される場合、システムメモリ410は、任意の形の揮発性、不揮発性、取外式、および固定式媒体、またはコンピュータ可読命令、データ構造、プログラムモジュール、およびコンピューティングシステム400の他のデータなどの情報を格納することができるこうした媒体装置の任意の組み合わせを含む。
また、プロセッサ405には、相互接続システム415を介して、ネットワークアダプタ435、1つまたは複数の入力装置および出力装置(「I/O装置」)440も結合される。ネットワークアダプタ435は、コンピューティングシステム400に、ネットワークを介して他のコンピューティングシステムと通信することができる機能を提供し、例えば、Ethernet(登録商標)アダプタとすることができる。I/O装置440は、コンピューティングシステム400のユーザに、システムメモリ410に格納されるプログラムおよびデータにアクセスすることができる機能を提供する。例えば、I/O装置440は、キーボード、ポインティング装置、マイクロフォンなどの入力装置、および表示装置、スピーカ、プリンタなどの出力装置を含み得る。上述したように構成されたコンピューティングシステムは、通常、ファシリティの操作をサポートするために使用されるが、様々なタイプおよび構成の装置を使用して、様々なコンポーネントを有するファシリティが実装され得ることを、当業者であれば理解されたい。
図5は、1つまたは複数の実施形態における、決定論的マルチプロセッシングレイヤ500の様々な機能的要素を示す高レベルブロック図である。決定論的マルチプロセッシングレイヤ500はコンピューティングシステム400によって実装される必要がないことに留意されたい。例えば、いくつかの実施形態において、決定論的マルチプロセッシングレイヤ500は、マルチスレッド型ソフトウェアコードが入力として提供される個別のコンピューティングシステムに実装される。
いくつかの実施形態において、決定論的マルチプロセッシングレイヤ500は、量子ビルダコンポーネント505および決定論的マルチプロセッシング(「DMP」)コンポーネント510を含む。量子ビルダコンポーネント505は、例えば、DMPコンポーネント510によって提供される関数515〜540のうちの1つまたは複数を使用して、マルチスレッドアプリケーション545のコードを増補するコンパイラモジュールとして実装され得る。DMPコンポーネント510によって提供される関数は様々な方法で変更され得ることを、当業者であれば理解されたい。例えば、いくつかの関数がマージまたは分割されてもよく、いくつかの関数が省略されてもよく、いくつかの関数が追加されてもよい。いくつかの実施形態において、量子ビルダコンポーネント505は、例えば低レベル仮想マシン(「LLVM」)コンパイラインフラストラクチャ内など、コンパイラインフラストラクチャ内にコンパイラパスとして実装される。一方、他の実施形態では、量子ビルダコンポーネント505は、マルチスレッドアプリケーションコード545が入力として提供される個別のシステムによって実装される。
示された実施形態において、決定論的マルチプロセッシングレイヤ500は、マルチスレッドアプリケーションコード410を受信し、および/またはそれにアクセスする。マルチスレッドアプリケーションコード545は1つまたは複数のコードファイルを表し得ることに留意されたい。コード545は、マルチスレッドアプリケーションのソースコード、マルチスレッドアプリケーションのソースコードの中間表現(「IR」)、マルチスレッドアプリケーションの実行ファイルなどとすることができる。いくつかの実施形態において、量子ビルダコンポーネント505は、マルチスレッドアプリケーションコード545内に同期コードを挿入して、コンパイラによって生成される制御フローグラフ(「CFG」)において操作を追跡することによって、コンパイラを使用して量子を構築することができる。挿入されたコードは、量子サイズを追跡し、量子サイズに到達したとき、DMPコンポーネント510によって提供される1つまたは複数の関数を呼び出して、アプリケーション内のスレッドの前進を制御する。DMPコンポーネント510は、ランタイムシステムを提供することができ、および/またはDMP関数515〜540のうちの1つまたは複数をコード545に挿入することができる。いくつかの実施形態において、決定論的プロセッシングレイヤ500は、トランザクショナルメモリシステムと共に動作し、および/または共有テーブルを実装する。
示された実施形態において、DMPライブラリは、DMP開始関数(「DMP_Function_Start()関数515」)、DMP初期化関数(「DMP_Init()関数520」)、DMP格納関数(「DMP_Store()関数525」)、DMPロード関数(「DMP_Load()関数530」)、DMPコミット関数(「DMP_Commit()関数535」)、およびDMP終了関数(「DMP_Function_End()関数540」)を含む。DMP開始関数515および終了関数540は、アプリケーション関数が開始し、終了するときを画定するために使用され得る。DMPロード関数530は、ロード操作が実行される、または実行された決定論的マルチプロセッシングレイヤ500に運ぶために使用され得る。同様に、DMP格納関数525は、格納操作が実行される、または実行された決定論的マルチプロセッシングレイヤ500に運ぶために使用され得る。DMP格納関数525およびロード関数530は、メモリ操作の順序を制御し、それによってこうした操作の決定論的実行を実施するために使用される。DMP初期化関数520およびDMPコミット関数535は、メモリ操作の順序を制御する、またはトランザクションを開始し、または終了するために使用されるコードのブロックを画定するために使用され得る。DMPコンポーネント510によって提供される関数は様々な方法で変更され得ることを、当業者であれば理解されたい。例えば、いくつかの関数がマージまたは分割されてもよく、いくつかの関数が省略されてもよく、いくつかの関数が追加されてもよい。
いくつかの実施形態において、量子ビルダコンポーネント505は、以下の表2に列挙されるDMPコンポーネント510の関数515〜540を挿入する。
Figure 0005576798
いくつかの実施形態において、量子ビルダコンポーネント505は、増補されたコードの中間表現を作成し、これは、例えば、制御フローグラフ(「CFG」)として表され得る。図11は、表2に従って増補されるマルチスレッドアプリケーションコード545の関数の制御フローグラフの一例を示す。いくつかの実施形態において、マルチスレッドアプリケーションコード545が増補された後、コンパイラは、例えばDMP関数515〜540への呼び出しをインライン化することによって、増補されたコードを再度最適化する。コンパイラは本明細書では具体的に記載されない増補されたコードへの他の最適化を実行することができることを、当業者であれば理解されたい。
いくつかの実施形態において、マルチスレッドアプリケーションコード545は、STM、HTM、またはHS−TMなど、トランザクショナルメモリシステムを使用して、スレッドによる共有リソースへのアクセスを制御する。こうした実施形態において、決定論的マルチプロセッシングレイヤ500は、トランザクションがマルチスレッドアプリケーションのスレッドによってコミットされる順序を制御するために使用され得る。例えば、量子ビルダ505は、DMP初期化関数520およびDMPコミット関数535への呼び出しを挿入することによってトランザクションにおける各量子を包むことができる。別の例として、マルチスレッドアプリケーションコード545が1つまたは複数のアプリケーションレベルトランザクショナルメモリブロックを含むとき、量子ビルダコンポーネント505は、ソフトウェア開発者によって宣言される各アトミックブロックの前にDMP初期化関数520への呼び出しを挿入することによって、また命令をコミットするためのTMシステムへの任意の呼び出しの前にDMPコミット関数535への呼び出しを挿入することによって、マルチスレッドアプリケーションコード545を増補することができる。さらに別の例として、決定論的マルチプロセッシングレイヤ500は、TMインターフェイスの関数への呼び出しをDMPコンポーネント510の1つまたは複数の関数515〜540への呼び出しで包むことによって、TMシステムによって提供されるインターフェイスを増補することができる。その結果、決定論的マルチプロセッシングレイヤ500がTMシステムと共に動作するとき、トランザクションは、決定論的に開始され、および/またはコミットされ得る。トランザクショナルメモリシステムがHTMシステムであるとき、HTMがこうした追跡を実行する限り、DMPロード関数530およびDMP格納関数525が含まれる必要はないことに留意されたい。
いくつかの実施形態において、マルチスレッドアプリケーションコード545は、実行可能な増補されたアプリケーション550にコンパイルされる。一方、他の実施形態では、増補されたアプリケーション550は、マシンに依存しない中間言語コードであり、これは、実行時に実行可能命令に変換される。増補後、増補されたアプリケーション550は、マルチプロセッシングシステム上で決定論的に実行され得る。すなわち、増補されたアプリケーション550に同じ入力が与えられると、マルチプロセッシングシステムは、スレッド量子を決定論的にインターリーブし、それによって、増補されたアプリケーション550が実行されるたびに同じ入力を生成する。図5に示されるコンポーネントは様々な方法で変更され得ることを、当業者であれば理解されたい。例えば、コンパイラなど、いくつかのコンポーネントがマージまたは分割されてもよく、いくつかのコンポーネントが省略されてもよく、いくつかのコンポーネントが追加されてもよい。
いくつかの実施形態において、DMPコンポーネント510によって提供される関数515〜540は、増補されたアプリケーションのスレッド間に決定論的にトークンを渡し、または進め、それによって各スレッドの前進を決定論的に制御する責任を負う。いくつかの実施形態において、これは、スレッドデータ構造600を使用することによって達成される。図6は、1つまたは複数の実施形態において、マルチプロセッサコードを決定論的にするためにファシリティによって使用されるスレッドデータ構造600を示す高レベルブロック図である。いくつかの実施形態において、スレッドデータ構造600は、スレッドコンテナ605を含む。スレッドコンテナは、実行中に増補されたアプリケーションによって作成されるスレッドごとにスレッドIDを格納する。スレッドコンテナ605は、配列、リンクリスト、キュー、またはスレッドIDの他のデータ構造として実装され得る。
いくつかの実施形態において、スレッドデータ構造600は、実行中に増補されたアプリケーションのスレッドによるトランザクションまたは制御された操作の実行の順序を制御するために使用されるトークン610を含む。例えば、いくつかの実施形態において、制御された操作を実行する、またはトランザクションをコミットする前に、スレッドは、そのスレッドIDがトークン610の現在の値に一致するかどうかを決定する。トークン610の現在の値がスレッドIDに一致するとき、対応するスレッドは、制御された操作を実行する、またはトランザクションをコミットしようと試行することができる。そうでない場合、対応するスレッドは、トークン610の現在の値がそのスレッドIDに一致するまで待つ。
いくつかの実施形態において、スレッドが作成される順序は、スレッドが決定論的に実行される順序に対応する。例えば、各スレッドが作成されるとき、スレッドの対応するスレッドIDは、スレッドコンテナ605に順次格納され得る。トランザクションまたは制御された操作が実行されるとき、実行中のスレッドが、例えばDMP_Commit()535などいくつかのDMP関数を呼び出し、こうした関数は、(第1のスレッドIDで開始して)スレッドIDが格納されたシーケンスに基づいてスレッドコンテナ605に格納されたスレッドIDを順次ループすることによって、トークン610の値を進めるように動作する。スレッドが終了すると、スレッドの対応するIDはスレッドコンテナ605から削除されることに留意されたい。
いくつかの実施形態において、スレッドデータ構造は、コミットブロックサイズ615を格納する。コミットブロックサイズ615は、トークンが進められる前に、スレッドIDがトークン610の現在の値に一致するスレッドによって実行され得る予め定められた数のトランザクションまたは制御された操作を表す。コミットブロックサイズ615は、1つのトランザクションまたは制御された操作からN個のトランザクションまたは制御された操作まで及び得る。少なくとも1つの実施形態において、コミットブロックサイズ615は、1,000に等しい。いくつかの実施形態において、コミットブロックサイズ615は、構成可能である。例えば、コミットブロックサイズ615は、マルチスレッドアプリケーションの様々なスレッドインターリービングをプログラム的に操作し、テストするように、ソフトウェア開発者によって構成され得る。別の例として、コミットブロックサイズ615は、増補されたアプリケーションによって作成され得る最大数のスレッド、および/または増補されたアプリケーションが実行するマルチプロセッシングシステムのプロセッサまたはコアの数に基づいて、自動的に構成され得る。
スレッドによって実行される制御された操作の数をカウントするために様々な技術が使用され得ることを、当業者であれば理解されたい。いくつかの実施形態において、スレッドデータ構造600は、スレッドコミットブロック620を含む。スレッドコミットブロック620は、スレッドIDが現在のトークンID610に一致するスレッドによって実行された制御された操作の数を表し得る。スレッドが制御された操作を実行するたびに、スレッドコミットブロック620の値は、増分され、コミットブロックサイズ615と比較される。スレッドコミットブロック620の値がコミットブロックサイズ615に等しい場合、トークン605は、次のスレッドIDに進められ、スレッドコミットブロック620の値は、ゼロにリセットされる。代替例として、スレッドコミットブロック620は、スレッドがその対応するトランザクションをコミットしようと試行する前に残っているブロックの数を表し得る。こうした実施形態において、スレッドコミットブロック620は、スレッドコンテナ605に格納されたスレッドIDを有するスレッドごとに残りのブロックの数を含み得る。次いで、スレッドは、ブロックを実行するたびに、その対応するスレッドコミットブロックを減分し、残りのブロックの数がゼロに等しいとき、そのトランザクションをコミットしようと試みる。
いくつかの実施形態において、スレッドデータ構造は、使用中スレッドブロック625を含み、これは、増補されたアプリケーションで実行中のスレッドの数を表す。いくつかの実施形態において、使用中スレッドブロック625は、スレッドが作成されるたびに増分される。同様に、使用中スレッドブロック625は、スレッドが終了するたびに減分される。一方、他の実施形態では、使用中スレッドブロック625は、スレッドコンテナ605のサイズに基づいて決定される。図6に示されるスレッドデータ構造600は様々な方法で変更され得ることを、当業者であれば理解されたい。例えば、いくつかの部分がマージまたは分割されてもよく、いくつかの部分が省略されてもよく、いくつかの部分が追加されてもよい。
図7は、1つまたは複数の実施形態における、スレッドを作成し、決定論的に実行する一例を示す高レベル図である。説明を容易にするために、ある期間にわたるスレッドデータ構造600の一部分の内容が示される。トークン値610によって示されるように、スレッドが作成される順序は、スレッドが決定論的に実行される順序に対応する。
示された例において、最初に作成されたスレッド(「スレッド1」)は、マルチスレッドアプリケーションのメインのアプリケーションスレッドを表す。説明を容易にするために、各スレッドのスレッドIDは、スレッドが作成された順序に等しい。すなわち、最初に作成されたスレッドのスレッドIDは1、2番目に作成されたスレッドのスレッドIDは2、3番目に作成されたスレッドのスレッドIDは3、などとなる。時刻TとTとの間で、スレッド1が実行し、スレッド2が作成される。示された例において、スレッドの実行は、指定された数の制御された操作(例えば、コミットブロックサイズ615によって指定された量子)によって表される。したがって、図7に示される時間の増分は、必ずしも等しくない。各スレッドによって実行された未制御の操作の数は、異なっていてもよく、またその各実行期間中にスレッドごとに異なっていてもよいことにも留意されたい。
図7に戻って、スレッド1がその量子の実行を終了する前のある時点でスレッド2が作成されたため、時刻TとTとの間の使用中スレッド625の数は2である。その結果、スレッド1が終了すると、トークン610は、スレッドコンテナ605に格納された次のスレッドIDに進められた(すなわち、スレッド2)。
時刻TとTとの間で、スレッド2が実行し、次いでトークン610がスレッド1に戻される。時刻TとTとの間で、スレッド1が実行し、次いでトークン610がスレッド2に進められる。時刻TとTとの間で、スレッド2が実行し、次いでトークン610がスレッド1に戻される。
時刻TとTとの間で、スレッド1が実行し、スレッド2が作成される。時刻TとTとの間でスレッド3が作成されるが、スレッド2は、時刻TとTとの間で実行する。これは、スレッドが作成された順序が、スレッドが実行される順序に対応するからである。その結果、時刻TとTとの間でスレッド2が実行し、次いで、トークン610がスレッド3に進められる。次いで時刻TとTとの間でスレッド3が実行し、次いでトークン610がスレッド1に戻される。
図8は、1つまたは複数の実施形態における、マルチプロセッサコードを決定論的にするためにトランザクショナルメモリシステムを使用する一例を示す高レベルブロック図である。説明を容易にするために、ある期間にわたるスレッドデータ構造600の一部分の内容が示される。また、説明を容易にするために、スレッドIDがスレッド1、スレッド2、スレッド3などのようにスレッドコンテナ605に配列されると仮定する。ある期間にわたってトークン値610によって示されるように、スレッドがトランザクションをコミットする順序は、決定論的である。説明を容易にするために、トークン610の最初の値は、スレッド1のスレッドIDに対応する。示された例において、各スレッドによって実行されるトランザクションは、サイズが決定論的である。すなわち、各スレッドは、特定の数のブロックを実行する。説明を容易にするために、コミットブロックサイズ615は2である。
示されるように、時刻Tにおいて、スレッド1〜3がトランザクションを開始する。スレッドがその対応するトランザクションを終了した後、スレッドは、そのトランザクションを決定論的にコミットしようと試行する。いくつかの実施形態において、各スレッドは、そのトランザクションが、スレッドにそのトランザクションをコミットさせないようにする競合をもたらしたかどうかを決定する。一方、他の実施形態では、この決定は、そのスレッドIDがトークン610の現在の値に一致するとき、スレッドによって行われる。例えば、これは、STMValidTransaction()を呼び出すことによって達成され得る。
時刻Tで、トークン610の現在の値は、スレッド1のIDに一致する。したがって、示された例では、スレッド1は、そのトランザクションが、それにトランザクションをコミットさせないようにする競合をもたらしたかどうかを決定する。スレッド1およびスレッド2は、同じ共有メモリロケーション(すなわち、アドレスA)にアクセスしているが、スレッド1のトランザクションは有効である。これは、スレッド1がアドレスAに値を格納し、トークン610がそのスレッドIDに一致するからである。すなわち、(スレッド1によって実行される)Aの格納は、(スレッド2によって実行される)Aのロードによって影響されない。その結果、スレッド1は、そのトランザクションをコミットし(例えば、STMCommitTransaction()を呼び出すことによって)、次いでトークン610は、次のスレッドIDに進められる。しかし、トークン610は、スレッド2のスレッドIDに一致した場合、スレッド1は、そのトランザクションを中止することになる。これは、スレッド1がAを格納した後、スレッド2がAをロードしたかもしれないからである。トークン610がスレッド2のIDに一致すると仮定すると、スレッド1およびスレッド2は、そのトランザクションを中止することになる。この場合、スレッド2は、スレッド1の中止されたトランザクションを再開する前に、中止されたトランザクションを開始し、コミットすることになる。
示されるように、時刻Tで、スレッド1は、そのトランザクションをコミットし、次いでトークン610は、スレッド2に進められる。しかし、スレッド2は、そのトランザクションをコミットすることができない。というのは、スレッド2は、同じトランザクション中にスレッド1によって格納された値をロードしたからである。すなわち、スレッド2は、スレッド1がAを格納する前に、Aをロードしたかもしれない。その結果、スレッド2は、そのトランザクションを中止し、再開しなければならない。示された例において、中止されたスレッド以降のスレッドIDを有するすべてのスレッドが中止される。一方、他の実施形態では、並行のトランザクションが同じ共有リソースにアクセスした以降のIDを有するスレッドのみが中止され、再開される。したがって、示された例では、スレッド3のトランザクションは、中止され、再開される。しかし、他の実施形態において、スレッド3のトランザクションは、中止されない。というのは、そのトランザクションは、並行のトランザクション中にスレッド2またはスレッド1によってアクセスされた共有リソースにアクセスしなかったからである。代わりに、スレッド3は、単にトークン610がそのスレッドIDに一致するのを待つことになる。スレッドIDがトークンに一致するスレッドが、その対応するトランザクションを正常にコミットするまで、トークン610は進められないことに留意されたい。
示されるように、時刻Tで、スレッド2〜3は、その中止されたトランザクションを再開する。時刻Tで、トークン610の現在の値は、スレッド2のIDに一致するため、スレッド2は、その再開されたトランザクションが、それにトランザクションをコミットさせない競合をもたらしたかどうかを決定する。示された例において、スレッド2および3の再開されたトランザクションは、任意の共有メモリロケーションにアクセスしない。その結果、時刻Tで、スレッド2は、そのトランザクションを正常にコミットし、次いでトークン610は、スレッド3に進められる。時刻Tで、スレッド3は、そのトランザクションを正常にコミットし、次いでトークン610は、スレッド1に戻される。
次に、時刻Tで、スレッド1〜3は、トランザクションを開始し、プロセスは上述したように続行する。時刻Tで、スレッド1および3の並行のトランザクションによって、スレッド3がそのトランザクションを中止し、再開することに留意されたい。しかし、スレッド1および2は、決定論的にコミットし、トークン610は、上述したように、スレッド3に進められる。
図9は、1つまたは複数の実施形態において、マルチスレッドアプリケーションコードを増補するためにファシリティによって実行されるプロセス900を示すフロー図である。ステップ905〜940で、ファシリティは、マルチスレッドアプリケーションコード545の各関数をループする。ステップ905で、ファシリティは、関数を選択し、次いでステップ910に進む。ステップ910で、ファシリティは、DMP_Function_Start()関数515など、決定論的マルチプロセッシング起動関数を挿入し、次いでステップ915に進む。ステップ915で、ファシリティは、DMP_Init()関数520など、決定論的マルチプロセッシング初期化関数を挿入し、次いでステップ920に進む。ステップ920〜930で、ファシリティは、選択されたアプリケーションの各ブロックをループする。ステップ920で、ファシリティは、ブロックを選択し、次いでステップ925に進む。ステップ925で、ファシリティは、構文解析ブロック関数1000を呼び出し、次いでステップ930に進む。ステップ930で、追加のブロックが残っている場合、ファシリティはステップ920に進み、そうでない場合、ファシリティはステップ935に進む。ステップ935で、ファシリティは、DMP_Function_End()540など、決定論的プロセッシング終了関数を挿入し、次いでステップ940に進む。ステップ940で、追加の関数が残っている場合、ファシリティはステップ905に進み、そうでない場合、これらのステップは終了する。
図10は、1つまたは複数の実施形態における、ブロックを構文解析するためにファシリティによって実行されるプロセス1000を示すフロー図である。ステップ1005で、ブロックがロードブロックであることをファシリティが決定した場合、ファシリティはステップ1010に進み、そうでない場合、ファシリティはステップ1015に進む。ステップ1010で、ファシリティは、ロードブロックの前にDMP_Load()関数530への呼び出しを挿入し、次いでファシリティは戻る。ステップ1015で、ブロックが格納ブロックであることをファシリティが決定した場合、ファシリティはステップ1020に進み、そうでない場合、ファシリティはステップ1025に進む。ステップ1020で、ファシリティは、格納ブロックの前にDMP_Store()関数525への呼び出しを挿入し、次いでファシリティは戻る。ステップ1025で、ブロックがジャンプブロックであることをファシリティが決定した場合、ファシリティはステップ1030に進み、そうでない場合、ファシリティはステップ1035に進む。ステップ1030で、ファシリティは、ジャンプの前にDMP_Commit()関数535への呼び出しを挿入し、ジャンプ先ポイントでDMP_Init()関数520への呼び出しを挿入し、次いでファシリティは戻る。ステップ1035で、ブロックが関数呼び出しであることをファシリティが決定した場合、ファシリティはステップ1040に進み、そうでない場合、ファシリティはステップ1045に進む。ステップ1040で、ファシリティは、呼び出し前にDMP_Commit()関数535への呼び出しを挿入し、呼び出し後DMP_Init()520への呼び出しを挿入し、次いでファシリティは戻る。ステップ1045で、ブロックがI/O呼び出しであることをファシリティが決定した場合、ファシリティは、上述したようにステップ1040に進み、そうでない場合、ファシリティはステップ1050に進む。ステップ1050で、ブロックが戻りブロックであることをファシリティが決定した場合、ファシリティはステップ1055に進み、そうでない場合、ファシリティは戻る。ステップ1055で、ファシリティは、戻りブロック前にDMP_Commit()535への呼び出しを挿入し、次いでファシリティは戻る。
図11は、1つまたは複数の実施形態における、マルチスレッドアプリケーションの増補された関数の制御フローグラフ1100の一例である。「制御フローグラフ」という用語は、その実行中にアプリケーションによってトラバースされ得るすべてのパスの表現を指す。グラフ1100における各ノード1105〜1130は、基本ブロック、すなわち、任意のジャンプまたはジャンプターゲットのない直線のコードを表す。ジャンプターゲットは、ブロックを開始し、ジャンプは、ブロックを終了させる。例えば、DMP_Init()関数520を表すブロック1110は、ジャンプターゲットである。ブロック1105は、入口ブロックを表し、そこを通ってすべての制御がフローグラフに入る。ブロック1130は、出口ブロックを表し、そこを通ってすべての制御フローが出る。有向辺、例えば、ブロック1115と1125との間の辺、1120と1125との間の辺、およびブロック1110とブロック1115、1120、および1125との間の辺は、制御フローにおいてジャンプを表すために使用される。
図12は、1つまたは複数の実施形態における、決定論的マルチプロセッシング(「DMP」)初期化関数1200を示すフロー図である。例えば、DMP初期化関数1200は、ファシリティがトランザクショナルメモリシステムと共に動作するとき、実行され得る。DMP初期化関数は、スレッドがトランザクションの処置を開始または続行できるように、スレッドが初期化された状態であるかどうかを決定するために実行され得る。スレッドが初期化されない(すなわち、スレッドのinitSite変数の値がゼロに等しい)場合、その実行は、トークンの値がスレッドIDに一致するまで一時停止される。スレッドが初期化された場合、スレッドは実行を続ける。
ステップ1205で、ファシリティは、スレッド開始変数(「initSite」)の値がゼロに等しいことを決定した場合、ファシリティはステップ1210に進み、そうでない場合、ファシリティは戻る。スレッドの初期化変数は、例えば、スレッドが正常にトランザクションをコミットした後、ゼロに割り当てることができる。ステップ1210で、トークンの現在の値がスレッドIDに一致することをファシリティが決定した場合、ファシリティはステップ1215に進み、そうでない場合、ファシリティは折り返してステップ1210に戻る。すなわち、ファシリティは、スレッドIDがトークンの値に一致するまで、ステップ1210におけるスレッド実行を一時停止する。ステップ1215で、ファシリティは、initSite変数を、スレッドがトランザクションを開始するメモリアドレスに割り当て、次いでファシリティは戻る。次いでinitSite変数は、トランザクションをコミットできない場合、明示的なジャンプアドレスとして使用され得る。
図13は、1つまたは複数の実施形態における、決定論的マルチプロセッシング(「DMP」)コミット関数1300を示すフロー図である。例えば、DMPコミット関数1300は、ファシリティがトランザクショナルメモリシステムと共に動作するとき、実行され得る。ステップ1305で、ファシリティは、コミットブロック変数の値を減分し、次いでステップ1310に進む。コミットブロック変数は、スレッドによって実行された操作の数をカウントするために使用される。ステップ1310で、コミットブロック変数の値がゼロであることをファシリティが決定した場合、ファシリティはステップ1315に進み、そうでない場合、ファシリティは戻る。ステップ1315で、ファシリティが間に競合があったことを決定した(例えば、トランザクション中に別のスレッドによって書き込まれたロケーションからスレッドが読み取ったため)場合、ファシリティはステップ1320に進み、そうでない場合、ファシリティはステップ1325に進む。ステップ1320で、ファシリティはトランザクションを中止する。ステップ1325で、ファシリティは、トランザクションをコミットし、次いでステップ1330に進む。ステップ1330で、ファシリティは、スレッドのintiSite変数の値をゼロに割り当て、次いでステップ1335に進む。ステップ1335で、ファシリティは、コミットブロック変数の値をコミットブロックサイズに割り当てることによって、スレッドのコミットブロック変数の値をリセットし、次いで、ステップ1340に進む。ステップ1340で、ファシリティは、トークンの値を次のスレッドIDの値に割り当てることによって、トークンを進め、次いでファシリティは戻る。
このように、マルチスレッドアプリケーションの決定論的マルチプロセッシングのためのファシリティについて説明した。ファシリティについて、特定の実施形態を参照して説明してきたが、ファシリティは、記載した実施形態に限定されず、添付の特許請求の範囲の意図および範囲内の修正および変更で実施することができることを理解されたい。したがって、明細書および図面は、制限的意味ではなく、例示的意味でみなされるものとする。

Claims (35)

  1. マルチプロセッシングシステムにおけるマルチスレッドアプリケーションの決定論的実行を提供するために、前記マルチスレッドアプリケーションを増補するコンピューティングシステムにおける方法であって、
    2つ以上のスレッドの実行を指定するマルチスレッドアプリケーションコードにアクセスするステップと、
    前記マルチスレッドアプリケーションコードに同期コードを自動的に挿入するステップであって、毎回、前記マルチスレッドアプリケーションコードが、特定の入力によって実行される度に、当該同期コードが、操作の組の中の決定論的順序を指定し、当該組の少なくとも1つが、前記マルチスレッドアプリケーションコードが実行されるとき、前記2つ以上のスレッドのうちの少なくとも1つの別のスレッドによってアクセス可能な状態に影響を与えることができる1つ又は複数の操作を含むものと、
    を含む方法。
  2. 前記決定論的順序が、前記2つ以上のスレッドが作成された順序である請求項1に記載の方法。
  3. 前記決定論的順序がトークンの値に従って決定されており、
    前記2つ以上のスレッドの各スレッドについて、前記2つ以上のスレッドのうちの少なくとも1つによってアクセス可能な状態に影響を与えることができる操作を実行する前に、
    前記トークンの前記値を決定するために、前記同期コードを呼び出すステップと、
    前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致するとき、前記操作の実行を可能にするステップと、
    前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致しないとき、前記スレッドの実行を一時停止するステップと
    をさらに含む請求項1に記載の方法。
  4. コンパイラによって実行される請求項1に記載の方法。
  5. トランザクショナルメモリシステムを増補するためのコンピューティングシステムにおける方法において、
    トランザクショナルメモリシステムのためのコードにアクセスするステップであって、前記コードがマルチスレッドアプリケーションソースコードからコンパイルされたコードによって呼び出されるインターフェイスの1つまたは複数の実装を含み、前記マルチスレッドアプリケーションソースコードが1つまたは複数のコードブロックをアトミックブロックと宣言し、前記マルチスレッドアプリケーションソースコードが2つ以上のスレッドを指定する、ステップと、
    同期コードを含むために前記アクセスされたコードを増補するステップであって、当該同期コードが、特定の入力により前記マルチスレッドアプリケーションソースコードがマルチプロセッシングシステムによって実行される度に毎回、トランザクションがコミットするような特定の順序を指定するものであるもの、と、
    を含む方法。
  6. メモリ操作の順序を制御するためのマルチプロセッシングシステムで実行される方法であって、
    マルチプロセッシングシステムにおいてマルチスレッドアプリケーションコードを実行するステップであって、前記マルチスレッドアプリケーションコードが複数のスレッドを指定する、ステップと、
    前記マルチスレッドアプリケーションコードの前記実行を2つ以上の量子に分割するステップであって、各量子がメモリ操作を含む決定論的数の操作を指定する、ステップと、
    前記複数のスレッドが前記2つ以上の量子を実行する決定論的順序を指定するステップと
    を含み、前記マルチスレッドアプリケーションコードが実行されるとき、メモリ操作を指定するスレッド間通信が決定論的である。
  7. 前記複数のスレッドのうちの少なくとも1つのスレッドが前記複数のスレッドの別のスレッドによってプライベートに保持されるデータをロードするとき、前記スレッド間通信が行われる請求項6に記載の方法。
  8. スレッドが別のスレッドによってプライベートに保持されるデータをロードしようと試行するとき、前記複数のスレッドのそれぞれがその実行における決定論的ポイントに到達し、前記スレッドが実行を始めることを前記決定論的順序が指定するまで、前記スレッドの実行を一時停止するステップをさらに含む請求項7に記載の方法。
  9. 前記複数のスレッドのうちの1つのスレッドが前記1つのスレッドによってプライベートに保持されないデータを格納するとき、前記スレッド間通信が行われる請求項6に記載の方法。
  10. スレッドが前記スレッドによってプライベートに保持されないデータを格納しようと試行するとき、前記複数のスレッドのそれぞれがその実行における決定論的ポイントに到達し、前記スレッドが実行を始めることを前記決定論的順序が指定するまで、前記スレッドの実行を一時停止するステップをさらに含む請求項9に記載の方法。
  11. 決定論的順序を指定するステップが、
    マルチスレッドアプリケーションコードの中に同期コードを挿入するステップを含み、
    前記挿入された同期コードが、1つ又はそれより多いロック又は共有テーブルを実行して、スレッド間通信をモニタする、
    請求項6に記載の方法。
  12. 前記マルチプロセッシングシステムが、トランザクショナルメモリシステムを含み、
    決定論的順序を指定するステップが、マルチスレッドアプリケーションコードの中に同期コードを挿入するステップを含み、
    同期コードを挿入するステップが、各量子をトランザクション内に封入する(encapsulating)ステップを含み、
    前記トランザクショナルメモリシステムが、各トランザクションを、指定された決定論的順序でコミットする、
    請求項6に記載の方法。
  13. 前記決定論的順序がトークンの値に従って指定されており、
    前記複数のスレッドごとに、メモリ操作を実行する前に、
    前記トークンの前記値を決定するステップと、
    前記トークンの前記決定された値が前記スレッドのスレッド識別子に一致するとき、前記複数のスレッドの1つおきのスレッドがその実行における決定論的ポイントに到達すると、前記メモリ操作の実行を可能にするステップと、
    前記トークンの前記決定された値が前記スレッドの識別されたスレッドに一致しないとき、前記スレッドの実行を一時停止するステップと
    をさらに含む請求項6に記載の方法。
  14. マルチスレッドアプリケーションのスレッドのインターリービングを制御するためのマルチプロセッシングシステムであって、
    複数のスレッドを指定するマルチスレッドアプリケーションコードと、
    前記マルチスレッドアプリケーションコードを、決定論的数の操作をそれぞれ指定する2つ以上の量子に分割するための量子ビルダコンポーネントと、
    前記マルチスレッドアプリケーションのスレッドが前記2つ以上の量子を実行する決定論的順序を指定するための決定論的コンポーネントと
    を含み、前記マルチスレッドアプリケーションコードの複数の実行中に特定の入力が指定されたとき、各実行が前記特定の入力について同じ出力を生成する
    マルチプロセッシングシステム。
  15. 前記指定された決定論的数の操作内に、制御された操作として指定された特定の操作のみを含めることによって、前記量子ビルダコンポーネントが前記マルチスレッドアプリケーションコードの実行を選択的にシリアル化する請求項14に記載のシステム。
  16. 請求項15に記載のシステムであって、制御された操作として指定された操作が、メモリ操作を含み、
    前記複数のスレッドのうちの1つのスレッドが、前記複数のスレッドのうちの別のスレッドの状態に影響を与えることができるメモリ操作を実行するとき、前記メモリ操作が前記決定論的コンポーネントによって指定された前記決定論的順序を侵害するかどうかを前記量子化ビルダコンポーネントが決定し、
    前記メモリ操作が前記決定論的順序を侵害するとき、前記複数のスレッドの各スレッドがその実行における決定論的ポイントに到達し、前記スレッドが続行することを前記決定論的コンポーネントが指定するまで、前記マルチプロセッシングシステムが前記メモリ操作の実行を一時停止し、
    前記メモリ操作が前記決定論的順序を侵害しないとき、前記マルチプロセッシングシステムが前記メモリ操作の実行を許可する、
    請求項15に記載のシステム。
  17. 前記スレッドが別のスレッドによってプライベートに保持されると見なされるデータをロードまたは格納することを前記メモリ操作が指定するとき、
    前記スレッドが前記複数のスレッドによって共有されると見なされるデータを格納することを前記メモリ操作が指定するとき、又は、
    前記スレッドが前記複数のスレッドのうちの任意のものによってこれまでアクセスされていないデータをロードまたは格納することを前記メモリ操作が指定するとき、
    前記メモリ操作が前記決定論的順序を侵害する請求項16に記載のシステム。
  18. 前記マルチプロセッシングシステムが各スレッドの実行を一時停止したとき、又は、各スレッドが量子の実行を終了すると、
    前記複数のスレッドの各スレッドがその実行における決定論的ポイントに到達する請求項16に記載のシステム。
  19. 同期コードを前記マルチスレッドアプリケーションコード内に挿入することによって、前記量子ビルダコンポーネントが前記マルチスレッドアプリケーションコードを2つ以上の量子に分割する請求項14に記載のシステム。
  20. 前記挿入された同期コードが1つまたは複数のロックを含む、又は、メモリ操作を追跡するための共有テーブルを含む、請求項19に記載のシステム。
  21. トランザクショナルメモリシステムをさらに含み、前記挿入された同期コードが各量子をトランザクション内に封入し、各トランザクションが前記決定論的コンポーネントによって指定された前記決定論的順序でコミットされる請求項19に記載のシステム。
  22. 前記トランザクションが並行して実行され、2つ以上の並行して実行されるトランザクション間に競合が存在するとき、前記トランザクションのうちの少なくとも1つが、前記決定論的順序に従って中止され、再開される、請求項21に記載のシステム。
  23. 前記含まれるトランザクショナルメモリシステムがハードウェアトランザクショナルメモリシステム、ソフトウェアトランザクショナルメモリシステム、ハイブリッドハードウェア−ソフトウェアトランザクショナルメモリシステム、およびトランザクショナルメモリシステムの組み合わせを含むグループから選択される請求項21に記載のシステム。
  24. 前記決定論的順序が、前記複数のスレッドのそれぞれが作成された順序に基づいて指定される請求項14に記載のシステム。
  25. 前記決定論的順序が、前記マルチスレッドアプリケーションコードのソフトウェア開発者によって前記決定論的コンポーネントに対して指定される請求項14に記載のシステム。
  26. マルチプロセッシングシステムに、マルチスレッドアプリケーションのスレッドによって実行されるメモリ操作の順序を制御させることができるコードを格納するコンピュータ可読記憶媒体において、前記コードが、
    マルチスレッドアプリケーションコードを複数の量子に分割するためのコードであって、各量子が決定論的な有限数のメモリ操作を指定する、コードと、
    各量子を、前記マルチスレッドアプリケーションによって指定された2つ以上のスレッドのうちの1つによって決定論的にコミットされるトランザクション内に封入するためのコードと
    を含み、前記マルチプロセッシングシステムがトランザクショナルメモリシステムと共に動作する
    コンピュータ可読記憶媒体。
  27. トランザクション内に封入される各量子が、前記2つ以上のスレッドが作成される順序に従って前記2つ以上のスレッドのうちの一方によって決定論的にコミットされる請求項26に記載のコンピュータ可読記憶媒体。
  28. 請求項26に記載のコンピュータ可読記憶媒体であって、
    2つ以上の多いスレッドによってトランザクションがコミットされる前に、更に、1つのスレッドの実行を一時停止するために、
    前記2つ以上の多いスレッドの各々が、その実行中に、決定論的ポイントに到達し、そして、トークンが、前記スレッドが、前記トランザクションをコミットすべきことを指定するまで、コードを格納する、コンピュータ可読記憶媒体。
  29. 各スレッドがトランザクションの実行を完了すると、各スレッドがその実行における決定論的ポイントに到達する請求項28に記載のコンピュータ可読記憶媒体。
  30. 前記マルチスレッドアプリケーションコードが、前記マルチスレッドアプリケーションコードのソフトウェア開発者によって指定された1つまたは複数のトランザクショナルメモリブロックを含み、前記コードが前記1つまたは複数のトランザクショナルメモリブロックを増補するためにさらに使用される請求項26に記載のコンピュータ可読記憶媒体。
  31. 操作の組の中の決定論的順序が、特定のレジスタに依存すること無しに決定される、請求項1に記載の方法。
  32. トランザクションがコミットされる特定の順序が、特定のレジスタに依存すること無しに決定される、請求項5に記載の方法。
  33. 複数のスレッドが実行される決定論的順序が、特定のレジスタに依存すること無しに決定される、請求項6に記載の方法。
  34. 特定のレジスタに依存すること無しに、前記決定論的コンポーネントが、マルチスレッドアプリケーションのスレッドが2つ以上の量子を実行する決定論的順序を指定する、請求項14に記載のシステム。
  35. 決定論的にコミットする各量子が、特定のレジスタに依存することが無い、請求項26に記載のコンピュータ可読記憶媒体。
JP2010538213A 2007-12-12 2008-12-12 決定論的マルチプロセッシング(deterministicmultiprocessing) Expired - Fee Related JP5576798B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US1301907P 2007-12-12 2007-12-12
US61/013,019 2007-12-12
PCT/US2008/086711 WO2009076654A1 (en) 2007-12-12 2008-12-12 Deterministic multiprocessing

Publications (3)

Publication Number Publication Date
JP2011507112A JP2011507112A (ja) 2011-03-03
JP2011507112A5 JP2011507112A5 (ja) 2013-02-21
JP5576798B2 true JP5576798B2 (ja) 2014-08-20

Family

ID=40755909

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010538213A Expired - Fee Related JP5576798B2 (ja) 2007-12-12 2008-12-12 決定論的マルチプロセッシング(deterministicmultiprocessing)

Country Status (4)

Country Link
US (1) US8694997B2 (ja)
EP (1) EP2232367A4 (ja)
JP (1) JP5576798B2 (ja)
WO (1) WO2009076654A1 (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9009020B1 (en) * 2007-12-12 2015-04-14 F5 Networks, Inc. Automatic identification of interesting interleavings in a multithreaded program
US8972794B2 (en) * 2008-02-26 2015-03-03 International Business Machines Corporation Method and apparatus for diagnostic recording using transactional memory
JP5624480B2 (ja) * 2008-03-11 2014-11-12 ユニバーシティ・オブ・ワシントン 効率的な決定論的マルチプロセッシング(deterministicmultiprocessing)
US8490181B2 (en) * 2009-04-22 2013-07-16 International Business Machines Corporation Deterministic serialization of access to shared resource in a multi-processor system for code instructions accessing resources in a non-deterministic order
KR101572879B1 (ko) * 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8812796B2 (en) * 2009-06-26 2014-08-19 Microsoft Corporation Private memory regions and coherence optimizations
US8356166B2 (en) * 2009-06-26 2013-01-15 Microsoft Corporation Minimizing code duplication in an unbounded transactional memory system by using mode agnostic transactional read and write barriers
US8250331B2 (en) 2009-06-26 2012-08-21 Microsoft Corporation Operating system virtual memory management for hardware transactional memory
US8370577B2 (en) * 2009-06-26 2013-02-05 Microsoft Corporation Metaphysically addressed cache metadata
US8489864B2 (en) * 2009-06-26 2013-07-16 Microsoft Corporation Performing escape actions in transactions
JP5452125B2 (ja) * 2009-08-11 2014-03-26 クラリオン株式会社 データ処理装置及びデータ処理方法
EP2467852B1 (en) 2009-08-20 2019-05-22 Rambus Inc. Atomic memory device
US8539465B2 (en) * 2009-12-15 2013-09-17 Microsoft Corporation Accelerating unbounded memory transactions using nested cache resident transactions
US8533440B2 (en) * 2009-12-15 2013-09-10 Microsoft Corporation Accelerating parallel transactions using cache resident transactions
US8402218B2 (en) * 2009-12-15 2013-03-19 Microsoft Corporation Efficient garbage collection and exception handling in a hardware accelerated transactional memory system
US9092253B2 (en) * 2009-12-15 2015-07-28 Microsoft Technology Licensing, Llc Instrumentation of hardware assisted transactional memory system
KR20110080073A (ko) * 2010-01-04 2011-07-12 삼성전자주식회사 멀티쓰레드 환경을 테스트하는 커버리지 장치 및 방법
US20110173595A1 (en) * 2010-01-08 2011-07-14 Microsoft Corporation Language-based model for asynchronous operations
US8453120B2 (en) 2010-05-11 2013-05-28 F5 Networks, Inc. Enhanced reliability using deterministic multiprocessing-based synchronized replication
US9411634B2 (en) * 2010-06-21 2016-08-09 Microsoft Technology Licensing, Llc Action framework in software transactional memory
US8719515B2 (en) 2010-06-21 2014-05-06 Microsoft Corporation Composition of locks in software transactional memory
US9038048B2 (en) 2010-07-22 2015-05-19 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for protecting applications from races
US9454460B2 (en) * 2010-07-23 2016-09-27 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for providing determinism in multithreaded programs
US8910188B1 (en) 2011-07-14 2014-12-09 Google Inc. Deterministic data processing
US8990830B2 (en) * 2011-07-19 2015-03-24 International Business Machines Corporation Thread management in parallel processes
US20130205284A1 (en) * 2012-02-02 2013-08-08 Dhruva Chakrabarti Ownership acquire policy selection
US9606924B2 (en) * 2012-06-22 2017-03-28 Wind River Systems, Inc. System and method for supporting fast and deterministic execution and simulation in multi-core environments
US9558000B2 (en) * 2014-02-06 2017-01-31 Optimum Semiconductor Technologies, Inc. Multithreading using an ordered list of hardware contexts
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US9594660B2 (en) * 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US9804846B2 (en) 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US9513960B1 (en) 2015-09-22 2016-12-06 International Business Machines Corporation Inducing transactional aborts in other processing threads
US9851957B2 (en) * 2015-12-03 2017-12-26 International Business Machines Corporation Improving application code execution performance by consolidating accesses to shared resources
US10536441B2 (en) * 2016-08-23 2020-01-14 Texas Instruments Incorporated Thread ownership of keys for hardware-accelerated cryptography
CN109284193B (zh) * 2018-09-06 2022-12-09 平安科技(深圳)有限公司 一种基于多线程的分布式数据处理方法及服务器
US11900156B2 (en) * 2019-09-24 2024-02-13 Speedata Ltd. Inter-thread communication in multi-threaded reconfigurable coarse-grain arrays
CN113919877A (zh) * 2021-10-15 2022-01-11 深圳市酷开网络科技股份有限公司 基于dmp平台圈人任务进度处理方法、装置及可读存储介质

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5909559A (en) 1997-04-04 1999-06-01 Texas Instruments Incorporated Bus bridge device including data bus of first width for a first processor, memory controller, arbiter circuit and second processor having a different second data width
US6298370B1 (en) * 1997-04-04 2001-10-02 Texas Instruments Incorporated Computer operating process allocating tasks between first and second processors at run time based upon current processor load
US6101524A (en) 1997-10-23 2000-08-08 International Business Machines Corporation Deterministic replay of multithreaded applications
US6625635B1 (en) 1998-11-02 2003-09-23 International Business Machines Corporation Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
WO2001027764A1 (en) 1999-10-13 2001-04-19 Board Of Regents The University Of Texas System Software fault tolerance of concurrent programs using controlled re-execution
US6832367B1 (en) * 2000-03-06 2004-12-14 International Business Machines Corporation Method and system for recording and replaying the execution of distributed java programs
WO2002021281A2 (en) 2000-09-08 2002-03-14 Network Appliance, Inc. Panic message analyzer
US7360217B2 (en) 2001-09-28 2008-04-15 Consentry Networks, Inc. Multi-threaded packet processing engine for stateful packet processing
US6842848B2 (en) * 2002-10-11 2005-01-11 Sandbridge Technologies, Inc. Method and apparatus for token triggered multithreading
CN100549966C (zh) 2003-09-30 2009-10-14 明导公司 使用一个或多个自动机的系统验证
US20050081206A1 (en) 2003-10-14 2005-04-14 Armstrong Douglas R. Methods and apparatus for profiling threaded programs
US7730501B2 (en) * 2003-11-19 2010-06-01 Intel Corporation Method for parallel processing of events within multiple event contexts maintaining ordered mutual exclusion
US7490218B2 (en) 2004-01-22 2009-02-10 University Of Washington Building a wavecache
US7716031B2 (en) 2005-02-25 2010-05-11 Coware, Inc. Interface converter for unified view of multiple computer system simulations
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
WO2007056597A1 (en) * 2005-11-10 2007-05-18 Hewlett-Packard Development Company L.P. Program thread synchronization
US7720073B2 (en) 2005-12-06 2010-05-18 Shabbir Khan System and/or method for bidding
US8799882B2 (en) * 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US20070143755A1 (en) * 2005-12-16 2007-06-21 Intel Corporation Speculative execution past a barrier
US7792805B2 (en) * 2006-05-30 2010-09-07 Oracle America, Inc. Fine-locked transactional memory
US8316352B2 (en) * 2006-06-09 2012-11-20 Oracle America, Inc. Watchpoints on transactional variables
US20080209436A1 (en) * 2006-10-25 2008-08-28 Gul Agha Automated testing of programs using race-detection and flipping
US7711678B2 (en) * 2006-11-17 2010-05-04 Microsoft Corporation Software transaction commit order and conflict management
US7860847B2 (en) * 2006-11-17 2010-12-28 Microsoft Corporation Exception ordering in contention management to support speculative sequential semantics
US8719807B2 (en) * 2006-12-28 2014-05-06 Intel Corporation Handling precompiled binaries in a hardware accelerated software transactional memory system
US8060482B2 (en) * 2006-12-28 2011-11-15 Intel Corporation Efficient and consistent software transactional memory
WO2008101756A1 (en) * 2007-02-20 2008-08-28 International Business Machines Corporation Method and system for concurrent message processing
US8533681B2 (en) 2007-03-07 2013-09-10 The Board Of Trustees Of The University Of Illinois Atomicity violation detection using access interleaving invariants
US8458724B2 (en) * 2007-06-15 2013-06-04 Microsoft Corporation Automatic mutual exclusion
US7676636B2 (en) 2007-07-10 2010-03-09 Sun Microsystems, Inc. Method and apparatus for implementing virtual transactional memory using cache line marking
US8239633B2 (en) * 2007-07-11 2012-08-07 Wisconsin Alumni Research Foundation Non-broadcast signature-based transactional memory
US7966459B2 (en) 2007-12-31 2011-06-21 Oracle America, Inc. System and method for supporting phased transactional memory modes
JP5624480B2 (ja) 2008-03-11 2014-11-12 ユニバーシティ・オブ・ワシントン 効率的な決定論的マルチプロセッシング(deterministicmultiprocessing)
US8453120B2 (en) 2010-05-11 2013-05-28 F5 Networks, Inc. Enhanced reliability using deterministic multiprocessing-based synchronized replication

Also Published As

Publication number Publication date
US20090165006A1 (en) 2009-06-25
EP2232367A4 (en) 2011-03-09
WO2009076654A1 (en) 2009-06-18
US8694997B2 (en) 2014-04-08
EP2232367A1 (en) 2010-09-29
JP2011507112A (ja) 2011-03-03

Similar Documents

Publication Publication Date Title
JP5576798B2 (ja) 決定論的マルチプロセッシング(deterministicmultiprocessing)
JP5624480B2 (ja) 効率的な決定論的マルチプロセッシング(deterministicmultiprocessing)
US8453120B2 (en) Enhanced reliability using deterministic multiprocessing-based synchronized replication
Olszewski et al. Kendo: efficient deterministic multithreading in software
US7506339B2 (en) High performance synchronization of accesses by threads to shared resources
Pulte et al. Promising-ARM/RISC-V: a simpler and faster operational concurrency model
Chen et al. Deterministic replay: A survey
Gustavsson et al. Towards WCET analysis of multicore architectures using UPPAAL
EP3296877B1 (en) Debugging systems
Kokologiannakis et al. Stateless model checking of the Linux kernel's hierarchical read-copy-update (tree RCU)
JP6205168B2 (ja) 並列構造化重複検出を利用する並列モデル検査のためのシステムおよび方法
US20220164507A1 (en) Electronic system-level reproducible parallel simulation method implemented by way of a discrete event simulation multicore computing system
Pina et al. Freeda: Deploying incompatible stock dynamic analyses in production via multi-version execution
Edwards et al. Programming shared memory multiprocessors with deterministic message-passing concurrency: Compiling SHIM to Pthreads
Lackorzynski et al. Decoupled: low-effort noise-free execution on commodity systems
US20150160967A1 (en) Context preservation during thread level speculative execution
Olszewski et al. Scaling deterministic multithreading
Bell et al. Vroom: Faster Build Processes for Java
Štill et al. Model checking of C++ programs under the x86-tso memory model
Štill LLVM transformations for model checking
Blanton et al. Non-blocking inter-partition communication with wait-free pair transactions
Chajed Verifying an I/O-concurrent file system
Dijk The Parallelization of Binary Decision Diagram operations for model checking
Ebrahimian Amiri A foundation for development of programming languages for real-time systems
Liao TAI: threaded asynchronous I/O library for performance and portability

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111212

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121206

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130522

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130822

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130829

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140411

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140514

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140704

R150 Certificate of patent or registration of utility model

Ref document number: 5576798

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees