(54)【発明の名称】複数のスレッドで順序付きトランザクションを実行する方法、並びに、当該トランザクションを実行するためのコンピュータ及びそのコンピュータ・プログラム
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0051】
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
【0052】
本発明の実施態様において使用されうるコンピュータは、複数のスレッドで順序付きトランザクションを実行することができるコンピュータであれば特に限定されない。複数のスレッドで順序付きトランザクションを実行することは例えば、スレッドレベル投機によりトランザクションを実行することを含みうる。当該コンピュータは例えば、サーバ・コンピュータ、デスクトップ・コンピュータ、ノート・コンピュータ若しくは一体型パソコン、又は、タブレット端末若しくはスマートフォン端末でありうる。
【0053】
図1は、本発明の実施態様において使用されうる上記コンピュータの一例を示した図である。
【0054】
コンピュータ(101)は、CPU(102)とメイン・メモリ(103)とを備えており、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものである。当該CPU(102)は例えば、インテル社のCore(商標) iシリーズ、Core(商標) 2シリーズ、Atom(商標)シリーズ、Xeon(登録商標)シリーズ、Pentium(登録商標)シリーズ若しくはCeleron(登録商標)シリーズ、AMD(Advanced Micro Devices)社のAシリーズ、Phenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(登録商標)シリーズ若しくはSempron(商標)、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのPower(商標)シリーズでありうる。
【0055】
バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。また、液晶ディスプレイ(LCD)は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ(106)は、コンピュータ(101)上で動作中のソフトウェア(例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ(101)上で動作中の各種コンピュータ・プログラム)が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。また、ディスプレイ(106)は、本発明の実施態様により測定されたアボート率を出力しうる。
【0056】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はソリッド・ステート・ドライブ(SSD)が接続されうる。
【0057】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ドライブ(109)、例えばCD、DVD又はBDドライブが接続されうる。
【0058】
バス(104)には、
例えばキーボード・マウス・コントローラ(110)又はUSBバスを介して、任意的に、キーボード(111)及びマウス(112)が接続されうる。
【0059】
ディスク(108)には、オペレーティング・システム、例えばWindows(登録商標)、UNIX(登録商標)、MacOS(登録商標)、アンドロイド(登録商標)、iOS、J2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ(103)にロード可能なように記憶されうる。
【0060】
ディスク(108)は、コンピュータ(101)内に内蔵されていてもよく、当該コンピュータ(101)がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ(101)がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
【0061】
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク(108)にインストールするために使用されうる。
【0062】
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に有線又は無線接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線LAN接続規格に基づく無線LAN環境、IEEE802.11a/b/g/nなどのWi-Fi無線LAN環境、又は携帯電話網環境(例えば、3G又は4G環境)でありうる。
【0063】
下記
図2A〜
図2B、
図3A〜
図3B、
図4A〜
図4B及び
図5A〜
図5Bそれぞれは本発明の種々の実施態様を示し、複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことが検出され、当該アボートが検出されたスレッドを含む少なくとも2つのスレッドがバリア同期される例を示す。当該実施態様において説明を容易にするためにスレッド数が3である場合を示すが、スレッド数は複数であればその数は制限されるものでないことに留意されたい。また、当該実施態様において各トランザクションの実行時間及び実行順序、並びにアボート時間も図示されている長さに制限されるものでないことに留意されたい。
【0064】
本発明の実施態様において、「バリア同期」とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないようなものをいう。
【0065】
図2Aは、本発明の実施態様に従う実施例1を示す。当該実施例1において、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッドがバリア同期される。
【0066】
図2Aは、スレッド1〜スレッド3(211,212及び213)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきがそれほど大きくないもの(均一トランザクションともいう)とする。
【0067】
コンピュータ(101)は、スレッド3(213)において、トランザクション6の終了直前において、当該トランザクション6の先行番号5を有するトランザクション5(スレッド2(212))がまだ終了していないので、トランザクション6それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション6がコミットされるべき順番にないことに応じて、当該トランザクション6をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション6を再実行(「再実行6」と表記する)する。コンピュータ(101)は、スレッド3(213)において、当該再実行6が終了したこと(すなわち、再実行6がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、全てのスレッドがバリア同期(221)されるまで、スレッド3(213)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(211〜213)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(下記トランザクション6、下記トランザクション7及び下記トランザクション8)が全てコミットされるまで、全てのスレッド(211〜213)をバリア同期(221)する。
【0068】
コンピュータ(101)は、上記スレッド3(213)において上記トランザクション6についてのアボートが起きた後、当該アボートが起きたことを
図2Aに示す時点(アボート検出)で検出する。
【0069】
コンピュータ(101)は、スレッド1(211)において、上記スレッド3(213)における上記アボートを検出した時点でトランザクション7を実行中である。コンピュータ(101)は、上記トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド3(213))がまだ終了していないので、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて(バリア同期フラグがすでに立っている場合であってもバリア同期フラグを再度立てる処理をするという態様である)、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション7を再実行(「再実行7」と表記する)する。コンピュータ(101)は、当該再実行7が終了したこと(すなわち、再実行7がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、スレッド1(211)において、全てのスレッド(211〜213)がバリア同期(221)されるまで、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(211〜213)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及び下記トランザクション8)が全てコミットされるまで、全てのスレッド(211〜213)をバリア同期(221)する。
【0070】
コンピュータ(101)は、スレッド2(212)において、上記スレッド3(213)における上記アボートを検出した時点でトランザクション8を実行中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド1(211))がまだ終了していないので、上記トランザクション8それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、トランザクション8を再実行(「再実行8」と表記する)する。コンピュータ(101)は、当該再実行8が終了したこと(すなわち、再実行8がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、当該アボートが検出された時点で処理中(実行中又はアボート)中のトランザクション(トランザクション6、トランザクション7及びトランザクション8)が全てコミットされていることから、上記バリア同期フラグを下げる。
【0071】
コンピュータ(101)は、上記バリア同期フラグが下げられたことに応じて、バリア同期(221)を終了し、そして、全てのスレッド(211〜213)において、トランザクションの処理を再開する。なお、
図2Aにおいて、コンピュータ(101)が、スレッド1(211)においてトランザクション9を実行し、次に、スレッド2(212)においてトランザクション10を実行し、次に、スレッド3(213)においてトランザクション11を実行しているように示しているが、どのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0072】
上記実施例1において、上記スレッド3(213)における上記アボートが検出された時点で実行中のトランザクションが全てコミットされるまで、全てのスレッド(211〜213)をバリア同期(221)することによって、当該アボートの連鎖が防止される。
【0073】
図2Bは、本発明の実施態様に従う実施例2を示す。当該実施例2において、各トランザクションの実行時間のばらつきが大きいもの(不均一トランザクションともいう)においてアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッドがバリア同期される。
【0074】
図2Bは、スレッド1〜スレッド3(241,242及び243)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきが大きいもの(不均一トランザクションともいう)とする。
【0075】
コンピュータ(101)は、スレッド3(243)において、トランザクション3の終了直前において、当該トランザクション3の先行番号2を有するトランザクション2(スレッド2(242))がまだ終了していないので、上記トランザクション3それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション3がコミットされるべき順番にないことに応じて、当該トランザクション3をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション3を再実行(「再実行3」と表記する)する。コンピュータ(101)は、上記再実行3の終了直前において、当該再実行3の先行番号2を有するトランザクション2(スレッド2(242))が終了しているので、当該再実行3をコミットする。次に、コンピュータ(101)は、上記バリア同期フラグが立っていることから、スレッド3(243)において、全てのスレッド(241〜243)でバリア同期(251)されるまで、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(下記トランザクション3、下記トランザクション4及び下記トランザクション5)が全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(251)する。
【0076】
コンピュータ(101)は、上記スレッド3(243)において上記トランザクション3についてのアボートが起きた後、当該アボートが起きたことを
図2Bに示す時点(アボート検出1)で検出する。
【0077】
コンピュータ(101)は、スレッド1(241)において、上記スレッド3(243)における上記トランザクション3についてのアボートを検出した時点でトランザクション4がアボート中である。コンピュータ(101)は、上記トランザクション4の終了直前において、当該トランザクション4の先行番号3を有するトランザクション3(スレッド3(243))がまだ終了していないので(アボート中)、上記トランザクション4それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション4がコミットされるべき順番にないことに応じて、当該トランザクション4をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、トランザクション4を再実行(「再実行4」と表記する)する。コンピュータ(101)は、上記再実行4の終了直前において、当該再実行4の先行番号3を有するトランザクション3(スレッド3(243))が終了しているので、当該再実行4をコミットする。次に、コンピュータ(101)は、当該再実行4が終了したこと(すなわち、再実行4がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)でバリア同期(251)されるまで、スレッド1(241)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、トランザクション4及びトランザクション5)が全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(251)する。
【0078】
コンピュータ(101)は、スレッド2(242)において、上記スレッド3(243)における上記トランザクション3についてのアボートを検出した時点でトランザクション5を実行中である。コンピュータ(101)は、上記トランザクション5の終了直前において、上記トランザクション5の先行番号4を有するトランザクション4(スレッド1(241))がまだ終了していないので(アボート中)、当該トランザクション5それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション5がコミットされるべき順番にないことに応じて、当該トランザクション5をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション5を再実行(「再実行5」と表記する)する。コンピュータ(101)は、上記再実行5の終了直前において、当該再実行5の先行番号4を有するトランザクション4(スレッド1(241))が終了しているので、当該再実行5をコミットする。次に、コンピュータ(101)は、当該再実行5が終了したこと(すなわち、当該再実行5がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、トランザクション4及びトランザクション5)が全てコミットされていることから、上記バリア同期フラグを下げる。
【0079】
上記実施例2において、上記スレッド3(243)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(251)することによって、当該アボートの連鎖が防止される。
【0080】
コンピュータ(101)は例えば、(1)上記スレッド3(243)における上記トランザクション3についてのアボートを検出することに応じて、(2)バリア同期(251)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。アボート率は例えば、アボートしたトランザクションの数をコミットしたトランザクション(再実行でコミットしたトランザクションを含む)の数で除した値、又は、アボートしたトランザクションの数をコミットの有無にかかわらず処理したトランザクション(再実行を含む)の数で除した値でありうる。当業者は、上記に示したアボート率を任意に選択しうる。
【0081】
コンピュータ(101)は、上記バリア同期フラグが下げられたことに応じて、バリア同期(251)を終了する。そして、コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、全てのスレッド(241〜243)において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで全てのスレッド(241〜243)をバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0082】
なお、
図2Bにおいて、コンピュータ(101)が、スレッド1(241)においてトランザクション6を実行し、次に、スレッド2(242)においてトランザクション7を実行し、次に、スレッド3(243)においてトランザクション8を実行しているように示しているが、どのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0083】
引き続き、コンピュータ(101)は、スレッド2(242)において、トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド1(241))がまだ終了していないので、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、全てのスレッド(241〜243)をバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション7を再実行(「再実行7」と表記する)する。コンピュータ(101)は、上記再実行7の終了直前において、当該再実行7の先行番号6を有するトランザクション6(スレッド1(241))が終了しているので、当該再実行7をコミットする。次に、コンピュータ(101)は、上記バリア同期フラグが立っていることから、スレッド2(242)において、全てのスレッド(241〜243)でバリア同期(252)されるまで、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(下記トランザクション7、下記トランザクション8及び下記トランザクション9)が全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(252)する。
【0084】
コンピュータ(101)は、上記スレッド2(242)において上記トランザクション7についてのアボートが起きた後、当該アボートが起きたことを
図2Bに示す時点(アボート検出2)で検出する。
【0085】
コンピュータ(101)は、スレッド3(243)において、上記スレッド2(242)における上記トランザクション7についてのアボートを検出した時点でトランザクション8がアボート中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド2(242))がまだ終了していないので(アボート中)、上記トランザクション8それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、トランザクション8を再実行(「再実行8」と表記する)する。コンピュータ(101)は、上記再実行8の終了直前において、当該再実行8の先行番号7を有する再実行7(スレッド2(242))が終了しているので、当該再実行8をコミットする。次に、コンピュータ(101)は、当該再実行8が終了したこと(すなわち、再実行8がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)でバリア同期(252)されるまで、スレッド3(243)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及びトランザクション8)が全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(252)する。
【0086】
コンピュータ(101)は、スレッド1(241)において、上記スレッド2(242)における上記トランザクション7についてのアボートを検出した時点でトランザクション9を実行中である。コンピュータ(101)は、上記トランザクション9の終了直前において、上記トランザクション9の先行番号8を有するトランザクション8(スレッド3(243))がまだ終了していないので(アボート中)、当該トランザクション9それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション9がコミットされるべき順番にないことに応じて、当該トランザクション9をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション9を再実行(「再実行9」と表記する)する。コンピュータ(101)は、上記再実行9の終了直前において、当該再実行9の先行番号8を有する再実行8(スレッド1(243))が終了しているので、当該再実行9をコミットする。次に、コンピュータ(101)は、当該再実行9が終了したこと(すなわち、当該再実行9がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、全てのスレッド(241〜243)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及びトランザクション8)が全てコミットされていることから、上記バリア同期フラグを下げる。
【0087】
コンピュータ(101)は例えば、(1)上記スレッド2(242)における上記トランザクション7についてのアボートを検出することに応じて、(2)バリア同期(252)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。
【0088】
コンピュータ(101)は、上記バリア同期フラグが下げられたことに応じて、バリア同期(252)を終了する。そして、コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、全てのスレッド(241〜243)において、トランザクションの処理を再開する(図示せず)。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0089】
上記実施例2において、上記アボート率が所定の閾値よりも低いことに応じて、上記スレッド2(242)における上記トランザクション7についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッド(241〜243)をバリア同期(252)することによって、当該アボートの連鎖が防止される。
【0090】
図3Aは、本発明の実施態様に従う実施例3を示す。当該実施例3において、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッドがバリア同期される。
【0091】
図3Aは、スレッド1〜スレッド3(311,312及び313)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきがそれほど大きくないもの(均一トランザクションともいう)とする。
【0092】
コンピュータ(101)は、スレッド3(313)において、トランザクション6の終了直前において、当該トランザクション6の先行番号5を有するトランザクション5(スレッド2(312))がまだ終了していないので、上記トランザクション6それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション6がコミットされるべき順番にないことに応じて、当該トランザクション6をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、全てのスレッド(311〜313)がバリア同期(321)されるまで、スレッド3(313)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(311〜313)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、下記トランザクション7及び下記トランザクション8)が全てアボートされるまで、全てのスレッド(311〜313)をバリア同期(321)する。なお、当該実施例3において、バリア同期するかを判断するステップと実際にバリア同期するステップとが同じ(下記
図7Aのステップ711を参照)である為に、全てのスレッドをバリア同期する為のバリア同期フラグを必ずしも立てる必要は無い。
【0093】
コンピュータ(101)は、上記スレッド3(313)において上記トランザクション6についてのアボートが起きた後、当該アボートが起きたことを
図3Aに示す時点(アボート検出)で検出する。
【0094】
コンピュータ(101)は、スレッド1(311)において、上記スレッド3(313)における上記トランザクション6についてのアボートを検出した時点でトランザクション7を実行中である。コンピュータ(101)は、上記トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド3(313))がまだ終了していないので(バリア同期中)、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、全てのスレッド(311〜313)でバリア同期(321)されるまで、スレッド1(311)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(311〜313)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及び下記トランザクション8)が全てアボートされるまで、全てのスレッド(311〜313)をバリア同期(321)する。
【0095】
コンピュータ(101)は、スレッド2(312)において、上記スレッド3(313)における上記トランザクション6についてのアボートを検出した時点でトランザクション8を実行中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド1(311))がまだ終了していないので(実行中)、上記トランザクション8それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。
【0096】
コンピュータ(101)は、上記トランザクション8がアボートされることに応じて、上記スレッド3(313)における上記トランザクション
6についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及びトランザクション8)が全てアボートされていることから、バリア同期(321)を終了する。
【0097】
コンピュータ(101)は、上記バリア同期(321)が終了したことに応じて、全てのスレッド(311〜313)において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0098】
なお、
図3Aにおいて、コンピュータ(101)が、スレッド1(311)においてトランザクション6を再実行(「再実行6」と表記する)し、次に、スレッド2(312)においてトランザクション7を再実行(「再実行7」と表記する)し、次に、スレッド3(313)においてトランザクション8を再実行(「再実行8」と表記する)するように示しているが、どのスレッドがどのトランザクションを再実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0099】
上記実施例3において、上記スレッド3(313)における上記トランザクション6についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及びトランザクション8)が全てアボートされるまで、全てのスレッド(311〜313)をバリア同期(321)することによって、当該アボートの連鎖が防止される。
【0100】
図3Bは、本発明の実施態様に従う実施例4を示す。当該実施例4において、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッドがバリア同期される。
【0101】
図3Bは、スレッド1〜スレッド3(341,342及び343)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきが大きいもの(不均一トランザクションともいう)とする。
【0102】
コンピュータ(101)は、スレッド3(343)において、トランザクション3の終了直前において、当該トランザクション3の先行番号2を有するトランザクション2(スレッド2(342))がまだ終了していないので、上記トランザクション3それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション3がコミットされるべき順番にないことに応じて、当該トランザクション3をアボートする。コンピュータ(101)は、スレッド3(343)において上記トランザクション3についてのアボートを検出したことに応じて、全てのスレッド(341〜343)がバリア同期(351)されるまで、スレッド3(343)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(341〜343)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、下記トランザクション4及び下記トランザクション5)が全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(351)する。なお、当該実施例4において、バリア同期するかを判断するステップと実際にバリア同期するステップとが同じ(下記
図7Bのステップ731を参照)である為に、全てのスレッドをバリア同期する為のバリア同期フラグを必ずしも立てる必要は無い。
【0103】
コンピュータ(101)は、上記スレッド3(343)において上記トランザクション3についてのアボートが起きた後、当該アボートが起きたことを
図3Bに示す時点(アボート検出1)で検出する。
【0104】
コンピュータ(101)は、スレッド1(341)において、上記スレッド3(343)における上記トランザクション3についてのアボートを検出した時点でトランザクション4がアボート中である。コンピュータ(101)は、全てのスレッド(341〜343)でバリア同期(351)されるまで、スレッド1(341)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(341〜343)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、トランザクション4及び下記トランザクション5)が全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(351)する。
【0105】
コンピュータ(101)は、スレッド2(342)において、上記スレッド3(343)における上記トランザクション3についてのアボートを検出した時点でトランザクション5を実行中である。コンピュータ(101)は、上記トランザクション5の終了直前において、当該トランザクション5の先行番号4を有するトランザクション4(スレッド1(341))がまだ終了していないので(アボート中)、上記トランザクション5それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション5がコミットされるべき順番にないことに応じて、当該トランザクション5をアボートする。
【0106】
コンピュータ(101)は、上記トランザクション5のアボートに応じて、上記スレッド3(343)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、トランザクション4及びトランザクション5)が全てアボートされていることから、バリア同期(351)を終了する。
【0107】
上記実施例4において、上記スレッド3(343)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(351)することによって、当該アボートの連鎖が防止される。
【0108】
コンピュータ(101)は例えば、(1)上記スレッド3(343)における上記トランザクション3についてのアボートを検出することに応じて、(2)バリア同期(351)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、
図2Bの説明において定義したアボート率を任意に選択しうる。
【0109】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、全てのスレッド(341〜343)において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0110】
なお、
図3Bにおいて、コンピュータ(101)が、スレッド1(341)においてトランザクション3を再実行(「再実行3」と表記する)し、次に、スレッド2(342)においてトランザクション4を再実行(「再実行4」と表記する)し、次に、スレッド3(343)においてトランザクション5を再実行(「再実行5」と表記する)するように示しているが、どのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0111】
引き続き、コンピュータ(101)は、スレッド3(343)において、再実行5の終了直前において、当該再実行5の先行番号4を有する再実行4(スレッド2(342))がまだ終了していないので、上記再実行5それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記再実行5がコミットされるべき順番にないことに応じて、当該再実行5をアボートする。コンピュータ(101)は、スレッド3(343)において上記再実行5についてのアボートを検出したことに応じて、全てのスレッド(341〜343)がバリア同期(352)されるまで、スレッド3(343)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(341〜343)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(再実行5、下記トランザクション6及び下記トランザクション7)が全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(352)する。
【0112】
コンピュータ(101)は、上記スレッド3(343)において上記再実行5についてのアボートが起きた後、当該アボートが起きたことを
図3Bに示す時点(アボート検出2)で検出する。
【0113】
コンピュータ(101)は、スレッド2(342)において、上記スレッド3(343)における上記再実行5についてのアボートを検出した時点でトランザクション7を実行中である。コンピュータ(101)は、上記トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド1(341))がまだ終了していないので(実行中)、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、全てのスレッド(341〜343)でバリア同期(352)されるまで、スレッド1(341)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、全てのスレッド(341〜343)において、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(再実行5、トランザクション6及び下記トランザクション7)が全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(352)する。
【0114】
コンピュータ(101)は、スレッド1(341)において、上記スレッド3(343)における上記再実行5についてのアボートを検出した時点でトランザクション6が実行中である。コンピュータ(101)は、上記トランザクション6の終了直前において、当該トランザクション6の先行番号5を有する再実行5(スレッド3(343))がまだ終了していないので(アボート中)、上記トランザクション6それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション6がコミットされるべき順番にないことに応じて、当該トランザクション6をアボートする。
【0115】
コンピュータ(101)は、上記トランザクション6のアボートに応じて、上記スレッド3(343)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(再実行5、トランザクション6及びトランザクション7)が全てアボートされていることから、バリア同期(352)を終了する。
【0116】
上記実施例4において、上記アボート率が所定の閾値よりも低いことに応じて、上記スレッド3(343)における上記再実行5についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッド(341〜343)をバリア同期(352)することによって、当該アボートの連鎖が防止される。
【0117】
コンピュータ(101)は例えば、(1)上記スレッド3(343)における上記再実行5についてのアボートを検出することに応じて、(2)バリア同期(352)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。
【0118】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、全てのスレッド(341〜343)において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0119】
なお、
図3Bにおいて、コンピュータ(101)が、スレッド1(341)においてトランザクション5を再実行(「再実行5」と表記する)し、次に、スレッド2(342)においてトランザクション6を再実行(「再実行6」と表記する)し、次に、スレッド3(343)においてトランザクション7を再実行(「再実行7」と表記する)するように示しているが、どのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0120】
図4Aは、本発明の実施態様に従う実施例5を示す。当該実施例5において、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される。
【0121】
図4Aは、スレッド1〜スレッド3(411,412及び413)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきがそれほど大きくないもの(均一トランザクションともいう)とする。
【0122】
コンピュータ(101)は、スレッド3(413)において、トランザクション6の終了直前において、当該トランザクション6の先行番号5を有するトランザクション5(スレッド2(412))がまだ終了していないので、トランザクション6それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション6がコミットされるべき順番にないことに応じて、当該トランザクション6をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドをバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション6を再実行(「再実行6」と表記する)する。コンピュータ(101)は、スレッド3(413)において、当該再実行6が終了したこと(すなわち、再実行6がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期(421)されるまで、スレッド3(413)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、下記トランザクション7及び下記トランザクション8)の実行順が遅いスレッド2(トランザクション8を実行中である)(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))中のトランザクションが全てコミットされるまで、上記スレッド2(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))をバリア同期(421)する。
【0123】
コンピュータ(101)は、上記スレッド3(413)において上記トランザクション6についてのアボートが起きた後、当該アボートが起きたことを
図4Aに示す時点(アボート検出)で検出する。
【0124】
コンピュータ(101)は、スレッド1(411)において、上記スレッド3(413)における上記アボートを検出した時点でトランザクション7を実行中である。コンピュータ(101)は、上記トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド3(413))がまだ終了していないので、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション7を再実行(「再実行7」と表記する)する。コンピュータ(101)は、当該再実行7が終了したこと(すなわち、再実行7がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、スレッド2(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))中のトランザクション(再実行6及び再実行7)が全てコミットされていることから、バリア同期(421)を終了する。
【0125】
コンピュータ(101)は、スレッド2(412)において、上記スレッド3(413)における上記アボートを検出した時点でトランザクション8を実行中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド1(411))がまだ終了していないので、上記トランザクション8それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。コンピュータ(101)は、上記バリア同期フラグがすでに立っているが、スレッド2(412)はバリア同期(421)の対象でないことから、引き続き再実行8を実行する。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有する再実行7(スレッド1(411))が終了しているので、上記トランザクション8それ自身がコミットされるべき順番にあると判断し、当該トランザクション8をコミットする。
【0126】
コンピュータ(101)は、上記バリア同期(421)が終了したことに応じて、上記スレッド2(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0127】
なお、
図4Aにおいて、コンピュータ(101)が、スレッド1(411)においてトランザクション9を実行し、次に、スレッド3(413)においてトランザクション10を実行しているように示しているが、いずれかのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0128】
上記実施例5において、上記スレッド3(413)における上記トランザクション6についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド2(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))中のトランザクションが全てコミットされるまで、スレッド2(412)を除く全てのスレッド(スレッド1(411)及びスレッド3(413))をバリア同期(421)することによって、当該アボートの連鎖が防止される。
【0129】
図4Bは、本発明の実施態様に従う実施例6を示す。当該実施例6において、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される。
【0130】
図4Bは、スレッド1〜スレッド3(441,442及び443)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきが大きいもの(不均一トランザクションともいう)とする。
【0131】
コンピュータ(101)は、スレッド3(443)において、トランザクション3の終了直前において、当該トランザクション3の先行番号2を有するトランザクション2(スレッド2(442))がまだ終了していないので、上記トランザクション3それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション3がコミットされるべき順番にないことに応じて、当該トランザクション3をアボートする。コンピュータ(101)は、スレッド3(443)において上記トランザクション3についてのアボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドをバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション3を再実行(「再実行3」と表記する)する。コンピュータ(101)は、スレッド3(443)において、当該再実行
3が終了したこと(すなわち、再実行
3がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で実行中又はアボート中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期(451)されるまで、スレッド3(443)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(下記トランザクション3、下記トランザクション4及び下記トランザクション5)の実行順が遅いスレッド2(トランザクション5を実行中である)(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))中のトランザクションが全てコミットされるまで、上記スレッド2(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))をバリア同期(451)する。
【0132】
コンピュータ(101)は、上記スレッド3(443)において上記トランザクション3についてのアボートが起きた後、当該アボートが起きたことを
図4Bに示す時点(アボート検出1)で検出する。
【0133】
コンピュータ(101)は、スレッド1(441)において、上記スレッド3(443)における上記アボートを検出した時点でトランザクション4についてアボート中である。なぜならば、コンピュータ(101)は、上記トランザクション4の終了直前において、当該トランザクション4の先行番号3を有するトランザクション3(スレッド3(443))がまだ終了していないので、上記トランザクション4それ自身がコミットされるべき順番にないと判断し、そして、上記トランザクション4がコミットされるべき順番にないことに応じて、当該トランザクション4をアボートするからである。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション4を再実行(「再実行4」と表記する)する。コンピュータ(101)は、当該再実行4が終了したこと(すなわち、再実行4がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、上記スレッド2(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))中のトランザクション(再実行3及び再実行4)が全てコミットされていることから、バリア同期フラグを下げて、バリア同期(451)を終了する。
【0134】
コンピュータ(101)は、スレッド2(442)において、上記スレッド3(443)における上記アボートを検出した時点でトランザクション5を実行中である。コンピュータ(101)は、上記トランザクション5の終了直前において、当該トランザクション5の先行番号4を有するトランザクション4(スレッド1(441))がまだ終了していないので、上記トランザクション5それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション5がコミットされるべき順番にないことに応じて、当該トランザクション5をアボートする。コンピュータ(101)は、上記バリア同期フラグがすでに立っているが、スレッド2(442)はバリア同期(451)の対象でないことから、引き続き再実行5を実行する。コンピュータ(101)は、上記トランザクション5の終了直前において、当該トランザクション5の先行番号4を有する再実行4(スレッド1(441))が終了しているので、上記再実行5それ自身がコミットされるべき順番にあると判断し、当該再実行5をコミットする。
【0135】
上記実施例6において、上記スレッド3(443)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド2(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))中のトランザクションが全てアボートされるまで、上記スレッド2(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))をバリア同期(451)することによって、当該アボートの連鎖が防止される。
【0136】
コンピュータ(101)は例えば、(1)上記スレッド3(443)における上記トランザクション3についてのアボートを検出することに応じて、(2)バリア同期(451)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、
図2Aの説明において定義したアボート率を任意に選択しうる。
【0137】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、スレッド2(442)を除く全てのスレッド(スレッド1(441)及びスレッド3(443))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0138】
なお、
図4Bにおいて、コンピュータ(101)が、スレッド1(441)においてトランザクション6を実行し、次に、スレッド3(443)においてトランザクション7を実行するように示しているが、どのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0139】
引き続き、コンピュータ(101)は、スレッド3(443)において、トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド1(441))がまだ終了していないので、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、スレッド3(443)において上記トランザクション7についてのアボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドをバリア同期する為のバリア同期フラグを立てる。そして、コンピュータ(101)は、上記トランザクション7を再実行(「再実行7」と表記する)する。コンピュータ(101)は、スレッド3(443)において、当該再実行7が終了したこと(すなわち、再実行7がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期(452)されるまで、スレッド3(443)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記バリア同期フラグが立っていることから、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション7、下記トランザクション8及び下記トランザクション9)の実行順が遅いスレッド1(トランザクション9を実行中である)(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))中のトランザクションが全てコミットされるまで、上記スレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))をバリア同期(452)する。
【0140】
コンピュータ(101)は、上記スレッド3(443)において上記トランザクション7についてのアボートが起きた後、当該アボートが起きたことを
図4Bに示す時点(アボート検出2)で検出する。
【0141】
コンピュータ(101)は、スレッド2(442)において、上記スレッド3(443)における上記アボートを検出した時点でトランザクション8についてアボート中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド3(443))がまだ終了していないので、上記トランザクション8それ自身がコミットされるべき順番にないと判断し、そして、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。コンピュータ(101)は、当該アボートを検出したことに応じて、全てのスレッドをバリア同期する為のバリア同期フラグを立てて、又は上記バリア同期フラグがすでに立っているのでバリア同期フラグを立てたと見なし、上記トランザクション8を再実行(「再実行8」と表記する)する。コンピュータ(101)は、当該再実行8が終了したこと(すなわち、再実行8がコミットされたこと)に応じて、上記バリア同期フラグが立っており、且つ、上記スレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))中のトランザクション(再実行7及び再実行8)が全てコミットされていることから、バリア同期フラグを下げて、バリア同期(452)を終了する。
【0142】
コンピュータ(101)は、スレッド1(441)において、上記スレッド3(443)における上記アボートを検出した時点でトランザクション9を実行中である。コンピュータ(101)は、上記トランザクション9の終了直前において、当該トランザクション9の先行番号8を有する再実行8(スレッド2(442))がまだ終了していないので、上記トランザクション9それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション9がコミットされるべき順番にないことに応じて、当該トランザクション9をアボートする。コンピュータ(101)は、上記バリア同期フラグがすでに立っているが、スレッド1(441)はバリア同期(452)の対象でないことから、引き続き再実行9を実行する。コンピュータ(101)は、上記再実行9の終了直前において、当該再実行9の先行番号8を有する再実行8(スレッド2(442))が終了しているので、上記再実行9それ自身がコミットされるべき順番にあると判断し、当該再実行9をコミットする。
【0143】
コンピュータ(101)は、上記バリア同期(452)が終了したことに応じて、上記スレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0144】
上記実施例6において、上記アボート率が所定の閾値よりも低いことに応じて、上記スレッド3(443)における上記トランザクション7についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))中のトランザクションが全てアボートされるまで、上記スレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))をバリア同期(452)することによって、当該アボートの連鎖が防止される。
【0145】
コンピュータ(101)は例えば、(1)上記スレッド3(443)における上記トランザクション7についてのアボートを検出することに応じて、(2)バリア同期(452)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、
図2Bの説明において定義したアボート率を任意に選択しうる。
【0146】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、スレッド1(441)を除く全てのスレッド(スレッド2(442)及びスレッド3(443))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0147】
なお、
図4Bにおいて、コンピュータ(101)が、スレッド2(441)においてトランザクション10を実行し、次に、スレッド3(443)においてトランザクション11を実行しているように示しているが、いずれかのスレッドがどのトランザクションを実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0148】
図5Aは、本発明の実施態様に従う実施例7を示す。当該実施例7において、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される。
【0149】
図5Aは、スレッド1〜スレッド3(511,512及び513)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきがそれほど大きくないもの(均一トランザクションともいう)とする。
【0150】
コンピュータ(101)は、スレッド3(513)において、トランザクション6の終了直前において、当該トランザクション6の先行番号5を有するトランザクション5(スレッド2(512))がまだ終了していないので、上記トランザクション6それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション6がコミットされるべき順番にないことに応じて、当該トランザクション6をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドがバリア同期(521)されるまで、スレッド3(513)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(下記トランザクション6、下記トランザクション7及び下記トランザクション8)の実行順が遅いスレッド2(トランザクション8を実行中である)(512)を除く全てのスレッド(スレッド1(511)及びスレッド3(513))が全てアボートされるまで、スレッド2(512)を除く全てのスレッド(スレッド1(511)及びスレッド3(513))をバリア同期(521)する。なお、当該実施例7において、バリア同期するかを判断するステップと実際にバリア同期するステップとが同じ(下記
図9Aのステップ911を参照)である為に、全てのスレッドをバリア同期する為のバリア同期フラグを必ずしも立てる必要は無い。
【0151】
コンピュータ(101)は、上記スレッド3(513)において上記トランザクション6についてのアボートが起きた後、当該アボートが起きたことを
図5Aに示す時点(アボート検出)で検出する。
【0152】
コンピュータ(101)は、スレッド1(511)において、上記スレッド3(513)における上記トランザクション6についてのアボートを検出した時点でトランザクション7を実行中である。コンピュータ(101)は、上記トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド3(513))がまだ終了していないので(バリア同期中)、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。
【0153】
コンピュータ(101)は、上記トランザクション7がアボートされることに応じて、上記スレッド3(513)における上記トランザクション6についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション6、トランザクション7及びトランザクション8)の実行順が遅いスレッド2(トランザクション8を実行中である)(512)を除く全てのスレッド(スレッド1(511)
及びスレッド3(513))中のトランザクション(トランザクション6及びトランザクション7)が全てアボートされていることから、バリア同期(521)を終了する。
【0154】
コンピュータ(101)は、スレッド2(512)において、上記スレッド3(513)における上記アボートを検出した時点でトランザクション8を実行中である。コンピュータ(101)は、上記トランザクション8の終了直前において、当該トランザクション8の先行番号7を有するトランザクション7(スレッド1(511))がまだ終了していないので、上記トランザクション8それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション8がコミットされるべき順番にないことに応じて、当該トランザクション8をアボートする。コンピュータ(101)は、スレッド2(512)がバリア同期(521)の対象でないことから、引き続き再実行8を実行する。コンピュータ(101)は、上記再実行8の終了直前において、当該再実行8の先行番号7を有する再実行7(スレッド3(513))が終了しているので、上記再実行8それ自身がコミットされるべき順番にあると判断し、当該再実行8をコミットする。
【0155】
コンピュータ(101)は、上記バリア同期(521)が終了したことに応じて、スレッド2(512)を除く全てのスレッド(スレッド1(511)及びスレッド3(513))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。
【0156】
なお、
図5Aにおいて、コンピュータ(101)が、スレッド1(511)においてトランザクション6を再実行(「再実行6」と表記する)し、次に、スレッド3(513)においてトランザクション7を再実行(「再実行7」と表記する)するように示しているが、どのスレッドがどのトランザクションを再実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0157】
上記実施例7において、上記スレッド3(513)における上記トランザクション6についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド2(512)を除く全てのスレッド(スレッド1(511)及びスレッド3(513))中のトランザクションが全てアボートされるまで、スレッド2(512)を除く全てのスレッド(スレッド1(511)及びスレッド3(513))をバリア同期(521)することによって、当該アボートの連鎖が防止される。
【0158】
図5Bは、本発明の実施態様に従う実施例8を示す。当該実施例8において、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される。
【0159】
図5Bは、スレッド1〜スレッド3(541,542及び543)それぞれにおいて、各トランザクションが実行されていることを示す。各トランザクションは、実行時間のばらつきが大きいもの(不均一トランザクションともいう)とする。
【0160】
コンピュータ(101)は、スレッド3(543)において、トランザクション3の終了直前において、当該トランザクション3の先行番号2を有するトランザクション2(スレッド2(542))がまだ終了していないので、上記トランザクション3それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション3がコミットされるべき順番にないことに応じて、当該トランザクション3をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドがバリア同期(551)されるまで、スレッド3(543)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション3、下記トランザクション4及び下記トランザクション5)の実行順が遅いスレッド2(トランザクション5を実行中である)(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))が全てアボートされるまで、スレッド2(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))をバリア同期(551)する。なお、当該実施例8において、バリア同期するかを判断するステップと実際にバリア同期するステップとが同じ(下記
図9Bのステップ931を参照)である為に、全てのスレッドをバリア同期する為のバリア同期フラグを必ずしも立てる必要は無い。
【0161】
コンピュータ(101)は、上記スレッド3(543)において上記トランザクション3についてのアボートが起きた後、当該アボートが起きたことを
図5Bに示す時点(アボート検出1)で検出する。
【0162】
コンピュータ(101)は、スレッド1(541)において、上記スレッド3(543)における上記トランザクション3についてのアボートを検出した時点でトランザクション4をアボート中である。コンピュータ(101)は、上記トランザクション4の終了直前において、当該トランザクション4の先行番号3を有するトランザクション3(スレッド3(543))がまだ終了していないので(アボート中)、上記トランザクション4それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション4がコミットされるべき順番にないことに応じて、当該トランザクション4をアボートする。
【0163】
コンピュータ(101)は、スレッド1(541)において、上記トランザクション4がアボートされることに応じて、上記スレッド3(543)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション2、トランザクション3及びトランザクション4)の実行順が遅いスレッド2(トランザクション5を実行中である)(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))中のトランザクション(トランザクション3及びトランザクション4)が全てアボートされていることから、バリア同期(551)を終了する。
【0164】
コンピュータ(101)は、スレッド2(542)において、上記スレッド3(543)における上記アボートを検出した時点でトランザクション5を実行中である。コンピュータ(101)は、上記トランザクション5の終了直前において、当該トランザクション5の先行番号4を有するトランザクション4(スレッド1(541))がまだ終了していないので、上記トランザクション5それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション5がコミットされるべき順番にないことに応じて、当該トランザクション5をアボートする。コンピュータ(101)は、スレッド2(542)はバリア同期(551)の対象でないことから、引き続きトランザクション5を再実行(「再実行5」と表記する)する。コンピュータ(101)は、上記トランザクション5の終了直前において、当該トランザクション5の先行番号4を有する再実行4(スレッド3(543))が終了しているので、上記再実行5それ自身がコミットされるべき順番にあると判断し、当該再実行5をコミットする。
【0165】
上記実施例8において、上記スレッド3(543)における上記トランザクション3についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド2(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))中のトランザクションが全てアボートされるまで、スレッド2(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))をバリア同期(551)することによって、当該アボートの連鎖が防止される。
【0166】
コンピュータ(101)は例えば、(1)上記スレッド3(543)における上記トランザクション3についてのアボートを検出することに応じて、(2)バリア同期(551)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、
図2Aの説明において定義したアボート率を任意に選択しうる。
【0167】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、スレッド2(542)を除く全てのスレッド(スレッド1(541)及びスレッド3(543))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0168】
なお、
図5Bにおいて、コンピュータ(101)が、スレッド1(541)においてトランザクション3を再実行(「再実行3」と表記する)し、次に、スレッド3(543)においてトランザクション4を再実行(「再実行4」と表記する)するように示しているが、どのスレッドがどのトランザクションを再実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0169】
引き続き、コンピュータ(101)は、スレッド3(543)において、トランザクション7の終了直前において、当該トランザクション7の先行番号6を有するトランザクション6(スレッド1(541))がまだ終了していないので、上記トランザクション7それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション7がコミットされるべき順番にないことに応じて、当該トランザクション7をアボートする。コンピュータ(101)は、上記アボートを検出したことに応じて、当該アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッドがバリア同期(552)されるまで、スレッド3(543)において、次のトランザクションの処理を行わずに待つ。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション7、下記トランザクション8及び下記トランザクション9)の実行順が遅いスレッド1(トランザクション9を実行中である)(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))が全てアボートされるまで、スレッド1(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))をバリア同期(552)する。
【0170】
コンピュータ(101)は、上記スレッド3(543)において上記トランザクション7についてのアボートが起きた後、当該アボートが起きたことを
図5Bに示す時点(アボート検出2)で検出する。
【0171】
コンピュータ(101)は、スレッド2(542)において、上記スレッド3(543)における上記トランザクション7についてのアボートを検出した時点でトランザクション8をアボート中である。
【0172】
コンピュータ(101)は、スレッド2(542)において、上記トランザクション8のアボートが終了することに応じて、上記スレッド3(543)における上記トランザクション7についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクション(トランザクション7、トランザクション8及びトランザクション9)の実行順が遅いスレッド1(トランザクション9を実行中である)(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))中のトランザクション(トランザクション7及びトランザクション8)が全てアボートされていることから、バリア同期(552)を終了する。
【0173】
コンピュータ(101)は、スレッド1(541)において、上記スレッド3(543)における上記アボートを検出した時点でトランザクション9を実行中である。コンピュータ(101)は、上記トランザクション9の終了直前において、当該トランザクション9の先行番号8を有するトランザクション8(スレッド3(543))がまだ終了していないので、上記トランザクション9それ自身がコミットされるべき順番にないと判断する。コンピュータ(101)は、上記トランザクション9がコミットされるべき順番にないことに応じて、当該トランザクション9をアボートする。コンピュータ(101)は、スレッド1(541)はバリア同期(552)の対象でないことから、引き続きトランザクション9を再実行(「再実行9」と表記する)する。コンピュータ(101)は、上記再実行9の終了直前において、当該再実行9の先行番号8を有する再実行8(スレッド3(543))が終了しているので、上記再実行9それ自身がコミットされるべき順番にあると判断し、当該再実行9をコミットする。
【0174】
上記実施例8において、上記スレッド3(543)における上記トランザクション7についてのアボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッド1(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))中のトランザクションが全てアボートされるまで、上記スレッド1(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))をバリア同期(552)することによって、当該アボートの連鎖が防止される。
【0175】
コンピュータ(101)は例えば、(1)上記スレッド3(543)における上記トランザクション7についてのアボートを検出することに応じて、(2)バリア同期(552)が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、
図2Bの説明において定義したアボート率を任意に選択しうる。
【0176】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、スレッド1(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0177】
なお、
図5Bにおいて、コンピュータ(101)が、スレッド2(542)においてトランザクション7を再実行(「再実行7」と表記する)し、次に、スレッド3(543)においてトランザクション8を再実行(「再実行8」と表記する)するように示しているが、どのスレッドがどのトランザクションを再実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0179】
図6Aは、本発明の実施態様に従う上記実施例1に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(以下、ある1つの特定のスレッドを「対象スレッド」という)において、下記ステップ601〜616の各処理を実行する。ステップ606、607、609、610、611及び615はそれぞれ、
図15に示すステップ1502、1503、1504、1505、1506及び1507に対応する。従って、ステップ603〜605及びステップ614が、上記実施例1に示す実施態様を実行する為に、従来技術である単純実装による方法の処理に対して追加されたステップである。
【0180】
ステップ601において、コンピュータ(101)は、上記対象スレッドにおいて、上記実施例1に示す実施態様を実行する為の方法を開始する。
【0181】
ステップ603において、コンピュータ(101)は、全てのスレッドをバリア同期する為のバリア同期フラグが立っているかを判断する。バリア同期フラグは、全てのスレッドに対して共通に1つ設けられる。コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、処理をステップ604に進める。一方、コンピュータ(101)は、上記バリア同期フラグが立っていないことに応じて、処理をステップ606に進める。
【0182】
ステップ604において、コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、次のトランザクションの処理を行わない(全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、全てのスレッドがバリア同期したことに応じて、処理をステップ605に進める。
【0183】
ステップ605において、コンピュータ(101)は、全てのスレッドがバリア同期されることに応じて、上記バリア同期フラグを下げる。引き続き、コンピュータ(101)は、処理をステップ606に進める。
【0184】
ステップ606において、コンピュータ(101)は、全てのトランザクションを実行したかを判断する。コンピュータ(101)は、全てのトランザクションが実行されていないことに応じて、残りのトランザクションを実行する為に処理をステップ607に進める。一方、コンピュータ(101)は、全てのトランザクションが実行されていることに応じて、処理を終了ステップ616に進める。
【0185】
ステップ607において、コンピュータ(101)は、上記対象スレッドが次に実行すべきトランザクションの番号を取得する。
【0186】
ステップ609において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションの処理を開始する。
【0187】
ステップ610において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションを実行する。
【0188】
ステップ611において、コンピュータ(101)は、上記対象スレッドにおいて、上記トランザクションがアボートしたかを判断する。コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、処理をステップ614に進める。一方、コンピュータ(101)は、当該トランザクションがアボートしていないことに応じて、処理をステップ615に進める。
【0189】
ステップ614において、コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、バリア同期フラグを立てる。なお、コンピュータ(101)は、バリア同期フラグがすでに立っている場合には、バリア同期フラグを立てたと見なす。引き続き、コンピュータ(101)は、当該アボートされたトランザクションを再実行する為に、処理をステップ609に戻す。
【0190】
ステップ615において、コンピュータ(101)は、上記対象スレッドにおいて、当該トランザクションがアボートしていないことに応じて、当該トランザクションの処理を終了する(すなわち、コンピュータ(101)は、当該トランザクションをコミットする)。コンピュータ(101)は、当該トランザクションの処理の終了に応じて、処理をステップ603に戻す。
【0191】
ステップ616において、コンピュータ(101)は、全てのトランザクションの実行が終了していることに応じて、上記対象スレッドにおいて、上記実施例1に示す実施態様を実行する為の方法を終了する。
【0192】
図6Bは、本発明の実施態様に従う上記実施例2に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ621〜636の各処理を実行する。ステップ626、627、629、630、631及び635はそれぞれ、
図15に示すステップ1502、1503、1504、1505、1506及び1507に対応する。従って、ステップ622〜625、628及びステップ632〜634が、上記実施例2に示す実施態様を実行する為に、従来技術である単純実装による方法の処理に対して追加されたステップである。また、ステップ623〜627、629〜631及び634〜635はそれぞれ
図2Aに示すステップ603〜607、609〜611及び614〜615に対応する。従って、ステップ622、628及び632〜633が、上記実施例2に示す実施態様を実行する為に、上記実施例1に示す実施態様に対して追加されたステップである。
【0193】
ステップ621において、コンピュータ(101)は、上記対象スレッドにおいて、上記実施例2に示す実施態様を実行する為の方法を開始する。
【0194】
ステップ622において、コンピュータ(101)は、全てのスレッドに対して共通に使用されるトランザクション数を計測するカウンタ(以下、「トランザクション数のカウンタ」という)、及びアボート数を計測するカウンタ(以下、「アボート数のカウンタ」という)をゼロに初期化する。
【0195】
ステップ623において、コンピュータ(101)は、全てのスレッドをバリア同期する為のバリア同期フラグが立っているかを判断する。バリア同期フラグは、全てのスレッドに対して1つ設けられる。コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、処理をステップ624に進める。一方、コンピュータ(101)は、上記バリア同期フラグが立っていないことに応じて、処理をステップ626に進める。
【0196】
ステップ624において、コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミットされるまで、次のトランザクションの処理を行わない(全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、全てのスレッドがバリア同期したことに応じて、処理をステップ625に進める。
【0197】
ステップ625において、コンピュータ(101)は、全てのスレッドがバリア同期されることに応じて、上記バリア同期フラグを下げる。引き続き、コンピュータ(101)は、処理をステップ626に進める。
【0198】
ステップ626において、コンピュータ(101)は、全てのトランザクションを実行したかを判断する。コンピュータ(101)は、全てのトランザクションが実行されていないことに応じて、残りのトランザクションを実行する為に処理をステップ627に進める。一方、コンピュータ(101)は、全てのトランザクションが実行されていることに応じて、処理を終了ステップ636に進める。
【0199】
ステップ627において、コンピュータ(101)は、上記対象スレッドが次に実行すべきトランザクションの番号を取得する。
【0200】
ステップ628において、コンピュータ(101)は、次に実行すべきトランザクションの番号を取得することに応じて、トランザクション数のカウンタを1つインクリメントする。
【0201】
ステップ629において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションの処理を開始する。
【0202】
ステップ630において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションを実行する。
【0203】
ステップ631において、コンピュータ(101)は、上記対象スレッドにおいて、上記トランザクションがアボートしたかを判断する。コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、処理をステップ632に進める。一方、コンピュータ(101)は、当該トランザクションがアボートしていないことに応じて、処理をステップ635に進める。
【0204】
ステップ632において、コンピュータ(101)は、上記トランザクションがアボートしていることに応じて、アボート数のカウンタを1つインクリメントする。
【0205】
ステップ633において、コンピュータ(101)は、アボート率が所定の閾値よりも低いかを判断する。当該閾値は例えば、上記実施例2に従う実施態様と従来技術である単純実装による方法とにおける速度向上を比較して、実験的にもめられうる値でありうる。コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、処理をステップ634に進める。一方、コンピュータ(101)は、アボート率が所定の閾値と同じかそれよりも高いことに応じて、処理をステップ629に戻す。
【0206】
ステップ634において、コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、バリア同期フラグを立てる。なお、コンピュータ(101)は、バリア同期フラグがすでに立っている場合であっても、バリア同期フラグを再度立てる処理をする。引き続き、コンピュータ(101)は、当該アボートされたトランザクションを再実行する為に、処理をステップ629に戻す。
【0207】
ステップ635において、コンピュータ(101)は、上記対象スレッドにおいて、当該トランザクションがアボートしていないことに応じて、当該トランザクションの処理を終了する(すなわち、コンピュータ(101)は、当該トランザクションをコミットする)。コンピュータ(101)は、当該トランザクションの処理の終了に応じて、処理をステップ623に戻す。
【0208】
ステップ636において、コンピュータ(101)は、全てのトランザクションの実行が終了していることに応じて、上記対象スレッドにおいて、上記実施例2に示す実施態様を実行する為の方法を終了する。
【0209】
図7Aは、本発明の実施態様に従う上記実施例3に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ701〜713の各処理を実行する。ステップ703、704、706、707、708及び712はそれぞれ、
図15に示すステップ1502、1503、1504、1505、1506及び1507に対応する。従って、ステップ711が、上記実施例3に示す実施態様を実行する為に、従来技術である単純実装による方法に対して追加されたステップである。
【0210】
ステップ701において、コンピュータ(101)は、上記対象スレッドにおいて、上記実施例3に示す実施態様を実行する為の方法を開始する。
【0211】
ステップ703において、コンピュータ(101)は、全てのトランザクションを実行したかを判断する。コンピュータ(101)は、全てのトランザクションが実行されていないことに応じて、残りのトランザクションを実行する為に処理をステップ704に進める。一方、コンピュータ(101)は、全てのトランザクションが実行されていることに応じて、処理を終了ステップ713に進める。
【0212】
ステップ704において、コンピュータ(101)は、上記対象スレッドが次に実行すべきトランザクションの番号を取得する。
【0213】
ステップ706において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションの処理を開始する。
【0214】
ステップ707において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションを実行する。
【0215】
ステップ708において、コンピュータ(101)は、上記対象スレッドにおいて、上記トランザクションがアボートしたかを判断する。コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、処理をステップ711に進める。一方、コンピュータ(101)は、当該トランザクションがアボートしていないことに応じて、処理をステップ712に進める。
【0216】
ステップ711において、コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、次のトランザクションの処理を行わない(全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、全てのスレッドがバリア同期したことに応じて、処理をステップ706に戻す。
【0217】
ステップ712において、コンピュータ(101)は、上記対象スレッドにおいて、当該トランザクションがアボートしていないことに応じて、当該トランザクションの処理を終了する(すなわち、コンピュータ(101)は、当該トランザクションをコミットする)。コンピュータ(101)は、当該トランザクションの処理の終了に応じて、処理をステップ703に戻す。
【0218】
ステップ713において、コンピュータ(101)は、全てのトランザクションの実行が終了していることに応じて、上記対象スレッドにおいて、上記実施例3に示す実施態様を実行する為の方法を終了する。
【0219】
図7Bは、本発明の実施態様に従う上記実施例4に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ721〜733の各処理を実行する。ステップ723、724、726、727、728及び732はそれぞれ、
図15に示すステップ1502、1503、1504、1505、1506及び1507に対応する。従って、ステップ722、725、729〜731が、上記実施例
4に示す実施態様を実行する為に、従来技術である単純実装による方法に対して追加されたステップである。また、ステップ723〜724、726〜728及び731〜732はそれぞれ
図3Aに示すステップ703〜704、706〜708及び711〜712に対応する。従って、ステップ722、725及び729〜730が、上記実施例4に示す実施態様を実行する為に、上記実施例3に示す実施態様に対して追加されたステップである。
【0220】
ステップ721において、コンピュータ(101)は、上記対象スレッドにおいて、上記実施例4に示す実施態様を実行する為の方法を開始する。
【0221】
ステップ722において、コンピュータ(101)は、全てのスレッドに対して共通に使用されるトランザクション数を計測するカウンタ(「トランザクション数のカウンタ)、及びアボート数を計測するカウンタ(アボート数のカウンタ)をゼロに初期化する。
【0222】
ステップ723において、コンピュータ(101)は、全てのトランザクションを実行したかを判断する。コンピュータ(101)は、全てのトランザクションが実行されていないことに応じて、残りのトランザクションを実行する為に処理をステップ724に進める。一方、コンピュータ(101)は、全てのトランザクションが実行されていることに応じて、処理を終了ステップ733に進める。
【0223】
ステップ724において、コンピュータ(101)は、上記対象スレッドが次に実行すべきトランザクションの番号を取得する。
【0224】
ステップ725において、コンピュータ(101)は、次に実行すべきトランザクションの番号を取得することに応じて、トランザクション数のカウンタを1つインクリメントする。
【0225】
ステップ726において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションの処理を開始する。
【0226】
ステップ727において、コンピュータ(101)は、上記対象スレッドにおいて、上記取得した番号のトランザクションを実行する。
【0227】
ステップ728において、コンピュータ(101)は、上記対象スレッドにおいて、上記トランザクションがアボートしたかを判断する。コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、処理をステップ729に進める。一方、コンピュータ(101)は、当該トランザクションがアボートしていないことに応じて、処理をステップ732に進める。
【0228】
ステップ729において、コンピュータ(101)は、上記トランザクションがアボートしていることに応じて、アボート数のカウンタを1つインクリメントする。
【0229】
ステップ730において、コンピュータ(101)は、アボート率が所定の閾値よりも低いかを判断する。当該閾値は例えば、上記実施例4に従う実施態様と従来技術である単純実装による方法とにおける速度向上を比較して、実験的にもめられうる値でありうる。コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、処理をステップ731に進める。一方、コンピュータ(101)は、アボート率が所定の閾値と同じかそれよりも高いことに応じて、処理をステップ726に戻す。
【0230】
ステップ731において、コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てアボートされるまで、次のトランザクションの処理を行わない(全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、全てのスレッドがバリア同期したことに応じて、処理をステップ726に戻す。
【0231】
ステップ732において、コンピュータ(101)は、上記対象スレッドにおいて、当該トランザクションがアボートしていないことに応じて、当該トランザクションの処理を終了する(すなわち、コンピュータ(101)は、当該トランザクションをコミットする)。コンピュータ(101)は、当該トランザクションの処理の終了に応じて、処理をステップ723に戻す。
【0232】
ステップ733において、コンピュータ(101)は、全てのトランザクションの実行が終了していることに応じて、上記対象スレッドにおいて、上記実施例4に示す実施態様を実行する為の方法を終了する。
【0233】
図8Aは、本発明の実施態様に従う上記実施例5に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ801〜816の各処理を実行する。ステップ801〜803及び806〜816それぞれは、
図6Aに示すステップ601〜603及び606〜616それぞれに対応する。従って、ステップ801〜803及び806〜816それぞれの説明は、ステップ601〜603及び606〜616それぞれの説明を参照されたい。以下に、ステップ804及びステップ805について説明する。
【0234】
ステップ804において、コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドにおいて、次のトランザクションの処理を行わない(上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期したことに応じて、処理をステップ805に進める。
【0235】
ステップ805において、コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期されることに応じて、上記バリア同期フラグを下げる。引き続き、コンピュータ(101)は、処理をステップ806に進める。
【0236】
図8Bは、本発明の実施態様に従う上記実施例6に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ821〜836の各処理を実行する。ステップ821〜823及び826〜836それぞれは、
図6Bに示すステップ621〜623及び626〜636それぞれに対応する。従って、ステップ821〜823及び826〜836それぞれの説明は、ステップ621〜623及び626〜636それぞれの説明を参照されたい。以下に、ステップ824及びステップ825について説明する。
【0237】
ステップ824において、コンピュータ(101)は、上記バリア同期フラグが立っていることに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドにおいて、次のトランザクションの処理を行わない(上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドにおいて、全てのスレッドがバリア同期したことに応じて、処理をステップ825に進める。
【0238】
ステップ825において、コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期されることに応じて、上記バリア同期フラグを下げる。引き続き、コンピュータ(101)は、処理をステップ826に進める。
【0239】
図9Aは、本発明の実施態様に従う上記実施例7に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ901〜913の各処理を実行する。ステップ901〜908及び912〜913それぞれは、
図7Aに示すステップ701〜708及び712〜713それぞれに対応する。従って、ステップ901〜908及び912〜913それぞれの説明は、ステップ701〜708及び712〜713それぞれの説明を参照されたい。以下に、ステップ911について説明する。
【0240】
ステップ911において、コンピュータ(101)は、当該トランザクションがアボートしたことに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドにおいて、次のトランザクションの処理を行わない(上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期したことに応じて、処理をステップ906に戻す。
【0241】
図9Bは、本発明の実施態様に従う上記実施例8に示す実施態様を実行する為のフローチャートを示す。コンピュータ(101)は、複数のスレッドの各スレッド(対象スレッド)において、下記ステップ921〜933の各処理を実行する。ステップ921〜930及び932〜933それぞれは、
図7Bに示すステップ721〜730及び732〜733それぞれに対応する。従って、ステップ921〜930及び932〜933それぞれの説明は、ステップ721〜730及び732〜733それぞれの説明を参照されたい。以下に、ステップ931について説明する。
【0242】
ステップ931において、コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドをバリア同期する。すなわち、コンピュータ(101)は、上記アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行が遅い順にあるスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドにおいて、次のトランザクションの処理を行わない(上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期するまで待つ)。コンピュータ(101)は、上記トランザクションの実行が遅い順にあるスレッドを除く全てのスレッドがバリア同期したことに応じて、処理をステップ926に戻す。
【0243】
図10は、本発明の実施態様に従う上記実施例1及び上記実施例2それぞれにおけるベンチマーク結果を示す。
【0244】
ベンチマーク・プログラムとして、単一ループを全スレッドで合計20,000,000回繰り返し、ループの各トランザクションはローカル変数を指定回数加算する、本質的には完全に並列なプログラムを作成した。均一繰り返しベンチマークは、各トランザクションが1,000回ローカル変数を加算するものである。
【0245】
プログラムへの実装として、(1)従来技術である単純実装による手法、並びに、(2)実施例1による手法、及び(3)実施例2による手法を用いた。実施例2による手法では、実施例1による手法を用いつつ、アボート率を計測して、当該計測したアボート率が40%以上の場合はバリア同期をしないように従来技術である単純実装に切り替えるように挙動を変えた。
【0246】
プログラムの実験環境は、16コア5.5 GHzのIBM zEC12上で実行した。
【0247】
グラフ(1001は、均一繰り返しベンチマークの結果を示す。
【0248】
実施例1による手法では、単純実装による手法に対して38%性能向上した。また、実施例1による手法では、最大性能は、シングルスレッド比で、2.17倍対1.57倍であった。
【0249】
実施例2による手法では、単純実装による手法に対して25%性能向上した。また、実施例2による手法では、最大性能は、シングルスレッド比で、1.97倍対1.57倍であった。
【0250】
図11A及び
図11Bそれぞれは、本発明の実施態様を実装する為のアルゴリズムの例を示す。
【0251】
図11Aは、本発明の実施態様に従う上記実施例1を実装する為のアルゴリズム(1101)を示す。
【0252】
上記アルゴリズム(1101)において、行09〜12及び行24が、実施例1を実装する為に挿入されたコードである。当該アルゴリズム(1101)において、01〜34の数字(行番号)は、説明を容易にするために挿入されたものであって、実際のコードでは不要である。
【0253】
図11Bは、本発明の実施態様に従う上記実施例2を実装する為のアルゴリズム(1111)を示す。
【0254】
上記アルゴリズム(1111)において、行07,行09〜12,行19中”transaction_count++;”, 行22〜23及び行24が、実施例2を実装するために挿入されたコードである。当該アルゴリズム(1111)において、01〜34の数字(行番号)は、説明を容易にするために挿入されたものであって、実際のコードでは不要である。
【0255】
図12は、
図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い複数のスレッドで順序付きトランザクションを実行するためのコンピュータ(1201)の機能ブロック図の一例を示した図である。
【0256】
コンピュータ(1201)は、本発明の実施態様に従い、複数のスレッドで順序付きトランザクションを実行するためのコンピュータであり、例えば
図1に示すコンピュータ(101)である。
【0257】
コンピュータ(1201)は、プログラム実行手段(1211)、アボート検出手段(1212)、バリア同期手段(1213)、及びアボート率計測手段(1214)を備えている。
【0258】
プログラム実行手段(1211)は、複数のスレッドで順序付きトランザクションのプログラムを例えばプログラムを格納した記憶媒体(1221)から読み取り、当該読み取ったプログラムを実行する。
【0259】
プログラム実行手段(1211)は、
図6Aに示すステップ606〜610及び615、
図6Bに示すステップ626〜630及び635、
図7Aに示すステップ703〜707及び712、
図7Bに示すステップ723〜727及び732、
図8Aに示すステップ806〜810及び815、
図8Bに示すステップ826〜830及び835、
図9Aに示すステップ903〜907及び912、並びに、
図9Bに示すステップ923〜927及び932を実行しうる。
【0260】
アボート検出手段(1212)は、複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出する。
【0261】
アボート検出手段(1212)は、
図6Aに示すステップ611、
図6Bに示すステップ631〜632、
図7Aに示すステップ708、
図7Bに示すステップ728〜729、
図8Aに示すステップ811、
図8Bに示すステップ831〜832、
図9Aに示すステップ908、及び、
図9Bに示すステップ928〜929を実行しうる。
【0262】
バリア同期手段(1213)は、アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期する。
【0263】
また、バリア同期手段(1213)は、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションが全てコミット又は全てアボートされるまで、全てのスレッドをバリア同期する。
【0264】
また、バリア同期手段(1213)は、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションのうちの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミット又は全てアボートされるまで、全てのスレッドをバリア同期する。
【0265】
バリア同期手段(1213)は、
図6Aに示すステップ603〜605及び614、
図6Bに示すステップ623〜625及び634、
図7Aに示すステップ711、
図7Bに示すステップ731、
図8Aに示すステップ803〜805及び814、
図8Bに示す823〜825及び834、
図9Aに示すステップ911、並びに、
図9Bに示すステップ931を実行しうる。
【0266】
アボート率計測手段(1214)は、アボート率を例えば、(1)アボートを検出することに応じて、(2)バリア同期が終了することに応じて、(3)所定の時間間隔で、又は(4)所定量のトランザクションが処理されることに応じて、計測する。
【0267】
アボート率計測手段(1214)は、
図6Bに示すステップ633、
図7Bに示すステップ730、
図8Bに示すステップ833、及び、
図9Bに示すステップ930を実行しうる。