特許第6021112号(P6021112)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特許6021112複数のスレッドで順序付きトランザクションを実行する方法、並びに、当該トランザクションを実行するためのコンピュータ及びそのコンピュータ・プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6021112
(24)【登録日】2016年10月14日
(45)【発行日】2016年11月2日
(54)【発明の名称】複数のスレッドで順序付きトランザクションを実行する方法、並びに、当該トランザクションを実行するためのコンピュータ及びそのコンピュータ・プログラム
(51)【国際特許分類】
   G06F 9/52 20060101AFI20161020BHJP
【FI】
   G06F9/46 475A
【請求項の数】13
【全頁数】51
(21)【出願番号】特願2013-245787(P2013-245787)
(22)【出願日】2013年11月28日
(65)【公開番号】特開2015-103209(P2015-103209A)
(43)【公開日】2015年6月4日
【審査請求日】2015年11月27日
【早期審査対象出願】
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】大平 怜
【審査官】 大塚 俊範
(56)【参考文献】
【文献】 特開2011−044161(JP,A)
【文献】 特表2010−510590(JP,A)
【文献】 米国特許出願公開第2007/0143755(US,A1)
【文献】 特表2008−508582(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
複数のスレッドで順序付きトランザクションを実行する方法であって、コンピュータが、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するステップと、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するステップであって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期するステップ
を実行することを含む、前記方法。
【請求項2】
複数のスレッドで順序付きトランザクションを実行する方法であって、コンピュータが、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するステップと、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するステップであって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期するステップ
を実行することを含み、
前記バリア同期するステップが、下記(1)〜(4)のいずれか一つのステップ
(1)前記アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期するステップ
(2)前記アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期するステップ
(3)前記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く前記複数のスレッド全て中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期するステップ
(4)前記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く前記複数のスレッド全て中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期するステップ
を含む、前記方法。
【請求項3】
複数のスレッドで順序付きトランザクションを実行する方法であって、コンピュータが、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するステップと、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するステップであって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期するステップ
を実行することを含み、
前記コンピュータが、
アボート率を計測するステップ
をさらに実行するステップを含み、
前記コンピュータが、
前記計測するステップで計測したアボート率が所定の閾値より低い場合に、前記検出するステップ及び前記バリア同期するステップを繰り返すステップ
をさらに実行することを含む、
前記方法。
【請求項4】
前記アボート率を計測するステップが、
前記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
行われる、請求項に記載の方法。
【請求項5】
前記コンピュータが、
アボート率を計測するステップ
をさらに実行するステップを含み、
前記コンピュータが、
前記計測するステップで計測したアボート率が所定の閾値より低い場合に、前記検出するステップ及び前記バリア同期するステップを繰り返すステップ
をさらに実行することを含む、
請求項1又は2に記載の方法。
【請求項6】
前記アボート率を計測するステップが、
前記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
行われる、請求項に記載の方法。
【請求項7】
複数のスレッドで順序付きトランザクションを実行するためのコンピュータであって、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するアボート検出手段と、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するバリア同期手段であって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期手段
を備えている、前記コンピュータ。
【請求項8】
複数のスレッドで順序付きトランザクションを実行するためのコンピュータであって、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するアボート検出手段と、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するバリア同期手段であって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期手段
を備えており、
前記バリア同期手段が、下記(1)〜(4)のいずれか一つ
前記アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期する、
前記アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、前記複数の全てのスレッド全てをバリア同期する、
前記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く前記複数のスレッド全て中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期する、
前記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く前記複数のスレッド全て中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期する、
を実行する、
前記コンピュータ。
【請求項9】
複数のスレッドで順序付きトランザクションを実行するためのコンピュータであって、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するアボート検出手段と、
前記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するバリア同期手段であって、前記バリア同期とは、複数のスレッドにおいて、各トランザクションを実行している場合に、全ての又は特定のスレッドを除く全てのスレッドにおいてトランザクションがコミット又はアボートされるまで実行されるが、全てのトランザクションがコミット又はアボートされるまでその先に実行が進行しないことをいう、前記バリア同期手段
を備えており、
前記コンピュータが、
アボート率を計測するアボート率計測手段
をさらに備えており、
前記コンピュータが、
前記アボート率計測手段で計測したアボート率が所定の閾値より低い場合に、前記検出すること及び前記バリア同期することを繰り返す、
前記コンピュータ。
【請求項10】
前記アボート率計測手段が、
前記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
前記アボート率を計測する、
請求項に記載のコンピュータ。
【請求項11】
前記コンピュータが、
アボート率を計測するアボート率計測手段
をさらに備えており、
前記コンピュータが、
前記アボート率計測手段で計測したアボート率が所定の閾値より低い場合に、前記検出すること及び前記バリア同期することを繰り返す、
請求項7又は8に記載のコンピュータ。
【請求項12】
前記アボート率計測手段が、
前記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
前記アボート率を計測する、
請求項11に記載のコンピュータ。
【請求項13】
複数のスレッドで順序付きトランザクションを実行するためのコンピュータ・プログラムであって、コンピュータに、請求項1〜のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のスレッドで順序付きトランザクションを実行するための技法に関する。
【背景技術】
【0002】
シングルスレッド(単一スレッド)のプログラムを投機的に並列化して高速化する手法として、スレッドレベル投機(Thread-Level Speculation; TLS)がある(例えば、下記非特許文献1を参照)。スレッドレベル投機では、ループの各繰り返しが別々のスレッドに割り当てられて、当該繰り返しが並列に実行される。繰り返し間のメモリデータ依存関係を実行時に検知するために、各繰り返しは別々のトランザクションとして実行される。従って、スレッドレベル投機においてシングルスレッド実行と同じ実行結果を保証するために、各トランザクションはシングルスレッド実行と同じ順序でコミットされる必要がある。
【0003】
図13中の「(1)シングルスレッド実行」(1301)は、シングルスレッド(1311)による各トランザクションの実行を示す。シングルスレッドによる各トランザクションの実行において、当該各トランザクションは、トランザクション1,2,3,・・・のようにトランザクションの番号順で実行され、そしてコミットされる。
【0004】
図13中の「(2)マルチスレッド(3スレッド)実行」(1321)は、スレッド数が3であるマルチスレッド(1331,1332及び1333)によるスレッドレベル投機実行を示す。当該スレッドレベル投機実行において、各トランザクションは、各スレッドで並列的に実行されるが、トランザクション1,2,3,・・・のようにトランザクションの番号順でコミットされなければならない。
【0005】
下記特許文献1は、トランザクショナル実行によるロックのない同期を利用して、複数のソフトウェアスレッド間の共有メモリ・アクセスをハンドリングするための装置及び方法を記載する(段落0010)。また、特許文献1は、従来のロック技法と異なり、トランザクショナル実行は、通例、トランザクション/クリティカルセクションを投機的に実行すること、及び、トランザクションの最終ステータスを決定する場合に、投機的実行の終了まで状態更新を延期することを伴うこと(段落0021)、トランザクション/ クリティカルセクションの実行終了時に、結果が一致していないか又は無効であるとみなされる場合、トランザクション/クリティカルセクションは、リタイヤされず、状態更新は、レジスタにもメモリにもコミットされないこと、加えて、トランザクションがリタイヤされない場合、トランザクションを再実行するための2つの選択肢として、(1)トランザクションを前に実行されたように投機的に再実行すること、又は、(2)ロック/セマフォを利用してトランザクションを非投機的に再実行することが含まれること(段落0023)を記載する。
【0006】
下記特許文献2は、現行スレッドと、当該現行スレッドによりデータが参照される参照スレッドとを並列に実行し、前記現行スレッドが第1の同期点に達したとき、前記参照スレッドが第2の同期点に達したか否かを判別し、前記判別が否の場合、前記参照スレッドが前記第2の同期点に到達するまでの所要時間を前記現行スレッドの待機時間として求め、前記現行スレッドが前記参照スレッドの前記第2の同期点での処理データを参照して生成するデータと、前記現行スレッドが前記処理データを参照せずに生成するデータとの間の品質差分を推定し、前記待機時間および品質差分の大きさに応じて、前記現行スレッドを前記参照スレッドが前記第2の同期点に達するまで待機させるか否かを判定することを特徴とする同期制御方法を記載する(請求項1)。
【0007】
下記特許文献3は、コンテナCが保持するデータに対して操作命令を投機的に実行(投機実行)し、操作対象となるデータについて排他制御(ロック)を行わないことにより、複数のコンテナCによる並列性を向上させることができることを記載する(段落0035)。
【0008】
下記特許文献4は、CPUによるロード命令の投機実行機能にもかかわらずメモリ・アクセスについてストア命令及びロード命令についての順序付けを保証するメモリ・アクセス順序付け及びロック管理を記載する(段落0001)。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】特表2008−525923号公報
【特許文献2】国際公開第2009/090964号
【特許文献3】特開2011−233033号公報
【特許文献4】特開2003−323415号公報
【非特許文献】
【0010】
【非特許文献1】Manoj Franklin and Gurindar S. Sohi, "The Expandable Split Window Paradigm for Exploiting Fine-Grain Parallelism,"Proceedings of the 19th Annual International Symposium on Computer Architecture, pp. 58-67, 1992.
【発明の概要】
【発明が解決しようとする課題】
【0011】
スレッドレベル投機の実行の為には、順序付きトランザクション(ordered transaction)が必要であり、これまでは順序付きトランザクションをサポートした特別なハードウェアが用いられてきている。
【0012】
しかしながら、順序付きトランザクションをサポートした特別なハードウェアでなく、一般的なハードウェア・トランザクショナル・メモリ(Hardware Transactional Memory; HTM)の機能のみを用いて、スレッドレベル投機を実装したいという要望がある。
【0013】
ハードウェア・トランザクショナル・メモリは、一般のプロセッサ、例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションのIBM zEnterprise EC12(zEC12)プロセッサ、インテル・コーポレーションのCoreマイクロ・アーキテクチャのプロセッサに搭載されている。
【0014】
ハードウェア・トランザクショナル・メモリで順序付きトランザクションを実装する手法として、非トランザクション・ロード・ストアや条件付きコミットなどの特殊な命令を用いる方法がある。
【0015】
しかしながら、これら特殊な命令は、上記zEC12プロセッサ及び上記Coreプロセッサを含め、ハードウェア・トランザクショナル・メモリが実装されている一般のプロセッサには搭載されていないのが現状である。
【0016】
図14(1401)は、上記一般のプロセッサに搭載されているハードウェア・トランザクショナル・メモリの機能を用いた順序付きトランザクションの単純実装による方法を示す。当該単純実装による方法では、上記一般のプロセッサは、各トランザクションの終了直前において対象のトランザクションがコミットされるべき順番にあるかをチェックし、当該順番になければ当該対象のトランザクションをアボートして、当該アボートしたトランザクションを再実行する。しかしながら、図14に示すように、例えば、スレッド3(1413)において、トランザクション6の終了直前において、トランザクション6の先行番号5を有するトランザクション5はまだ終了していない。そこで、上記一般のプロセッサは、トランザクション6それ自身がコミットされるべき順番にないと判断し、当該トランザクション6をアボート(破棄ともいう)し(図14に記載の「アボート発生」)、そしてアボートを検出すること(図14に記載の「アボート検出」)に応じて当該トランザクション6を再実行(「再実行6」と表記する)する。同様に、スレッド1(1411)において、トランザクション7の終了直前において、トランザクション7の先行番号6を有するトランザクション6はまだ終了していない(再実行6として実行中である)。そこで、上記一般のプロセッサは、トランザクション7それ自身がコミットされるべき順番にないと判断し、当該トランザクション7をアボートし、そして当該トランザクション7を再実行(「再実行7」と表記する)する。同様に、スレッド2(1412)において、トランザクション8の終了直前において、トランザクション8の先行番号7を有するトランザクション7はまだ終了していない(トランザクション7はアボート中である)。そこで、上記一般のプロセッサは、トランザクション8それ自身がコミットされるべき順番にないと判断し、当該トランザクション8をアボートし、そして当該トランザクション8を再実行(「再実行8」と表記する)する。上記一般のプロセッサは、トランザクション9、10及び11それぞれについても同様にアボートし、そしてトランザクション9、10及び11それぞれを再実行(「再実行9」,「再実行10」及び「再実行11」と表記する)する。このように、上記単純実装による方法では、各トランザクションは、必ずしも同じ実行時間で実行されないことから、各トランザクションの終了順序が入れ替わり、アボートが起きてしまうことがある。
【0017】
図15は、図14に示す単純実装による方法を処理するためのフローチャートを示す。コンピュータは、複数のスレッドの各スレッド(以下、ある1つの特定のスレッドを「対象スレッド」という)において、下記に示すステップ1501〜1507の各処理を実行する。
【0018】
ステップ1501において、コンピュータは、上記対象スレッドにおいて、上記単純実装による方法の処理を開始する。
【0019】
ステップ1502において、コンピュータは、全てのトランザクションを実行したかを判断する。コンピュータは、全てのトランザクションが実行されていないことに応じて、残りのトランザクションを実行する為に処理をステップ1503に進める。一方、コンピュータは、全てのトランザクションが実行されていることに応じて、処理を終了ステップ1508に進める。
【0020】
ステップ1503において、コンピュータは、上記対象スレッドが次に実行すべきトランザクションの番号を取得する。
【0021】
ステップ1504において、コンピュータは、上記対象スレッドにおいて、プロセッサに備わっている開始命令(例えば、上記zEC12におけるTBEGIN命令)を呼び出し、上記取得した番号のトランザクションの処理を開始する。
【0022】
ステップ1505において、コンピュータは、上記トランザクションの処理の開始に応じて、上記対象スレッドにおいて、上記取得した番号のトランザクションを実行する。
【0023】
ステップ1506において、コンピュータは、上記対象スレッドにおいて、当該トランザクションがアボートしたかを判断する。コンピュータは、当該トランザクションがアボートしたことに応じて、当該アボートされたトランザクションを再実行する為に、処理をステップ1504に戻す。一方、コンピュータは、当該トランザクションがアボートしていないことに応じて、処理をステップ1507に進める。
【0024】
ステップ1507において、コンピュータは、上記対象スレッドにおいて、当該トランザクションがアボートしていないことに応じて、当該トランザクションの処理を終了する(すなわち、コンピュータは、当該トランザクションをコミットする)。コンピュータは、当該トランザクションの処理の終了に応じて、処理をステップ1502に戻す。
【0025】
ステップ1508において、コンピュータは、全てのトランザクションの実行が終了していることに応じて、上記単純実装による方法の処理を終了する。
【0026】
図14に示したように、上記単純実装による方法では、あるトランザクションでアボートが起きると、それ以降のトランザクションについて、アボートが連鎖したり乃至は頻出したりしてしまうために性能が出なくなってしまう。
【0027】
そこで、本発明は、順序付きトランザクションをサポートした特別なハードウェアでなく、一般的なハードウェア・トランザクション・メモリの機能を使用して複数のスレッドで順序付きトランザクションを実行した場合において、アボートの連鎖や頻出を防止することを目的とする。
【0028】
非特許文献1は参照によって本明細書に取り込まれる。
【課題を解決するための手段】
【0029】
本発明は、複数のスレッドで順序付きトランザクションを実行するための技法を提供する。当該技法は、上記トランザクションを実行するための方法、並びに、当該トランザクションを実行するためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【0030】
本発明に従う第1の態様において、複数のスレッドで順序付きトランザクションを実行する方法であって、コンピュータが、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するステップと、
上記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するステップと
を実行することを含む。
【0031】
本発明の一つの実施態様において、上記バリア同期するステップが、
上記アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期するステップ
を含みうる。
【0032】
本発明の一つの実施態様において、上記バリア同期するステップが、
上記アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期するステップ
を含みうる。
【0033】
本発明の一つの実施態様において、上記バリア同期するステップが、
上記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期するステップ
を含みうる。
【0034】
本発明の一つの実施態様において、上記バリア同期するステップが、
上記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く前記複数のスレッド全て中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期するステップ
を含みうる。
【0035】
本発明の一つの実施態様において、上記コンピュータが、
アボート率を計測するステップ
をさらに実行するステップを含み、
上記コンピュータが、
上記計測するステップで計測したアボート率が所定の閾値より低い場合に、上記検出するステップ及び上記バリア同期するステップを繰り返すステップ
をさらに実行することを含みうる。
【0036】
本発明の一つの実施態様において、上記アボート率を計測するステップが、
上記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
行われうる。
【0037】
本発明に従う第2の態様において、複数のスレッドで順序付きトランザクションを実行するためのコンピュータであって、
複数のスレッドそれぞれのトランザクションの少なくとも1つにおいてアボートが起きたことを検出するアボート検出手段と、
上記アボートが検出されたスレッドを含む少なくとも2つのスレッドをバリア同期するバリア同期手段と
を備えている。
【0038】
本発明の一つの実施態様において、上記バリア同期手段が、
上記アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期しうる。
【0039】
本発明の一つの実施態様において、上記バリア同期手段が、
上記アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期しうる。
【0040】
本発明の一つの実施態様において、上記バリア同期手段が、
上記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、前記複数のスレッド全てをバリア同期しうる。
【0041】
本発明の一つの実施態様において、上記バリア同期手段が、
上記アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、前記複数のスレッド全てをバリア同期しうる。
【0042】
本発明の一つの実施態様において、上記コンピュータが、
アボート率を計測するアボート率計測手段
をさらに備えており、
上記コンピュータが、
上記アボート率計測手段で計測したアボート率が所定の閾値より低い場合に、上記検出すること及び上記バリア同期することを繰り返しうる。
【0043】
本発明の一つの実施態様において、上記アボート率計測手段が、
上記アボートを検出することに応じて、
バリア同期が終了することに応じて、
所定の時間間隔で、又は、
所定量のトランザクションが処理されることに応じて
上記アボート率を計測しうる。
【0044】
本発明に従う第3の態様において、複数のスレッドで順序付きトランザクションを実行するためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第1の態様に記載の方法の各ステップを実行させる。
【0045】
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、MO、CD−ROM、DVD、BD、ハードディスク装置、USBに接続可能なメモリ媒体、ROM、MRAM、RAM等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
【0046】
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
【0047】
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【0048】
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明の実施態様に従う方法の処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、1.他の言語、コード若しくは表記への変換及び、2.他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
【発明の効果】
【0049】
本発明の実施態様に従うと、複数のスレッドで順序付きトランザクションを実行した場合においてアボートの連鎖や頻出を防止することが可能になり、従って性能の向上をもたらす。
【図面の簡単な説明】
【0050】
図1】本発明の実施態様において使用されうるコンピュータの一例を示した図である。
図2A】本発明の実施態様に従う実施例1を示し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、当該アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、全てのスレッドがバリア同期される態様を示す。
図2B】本発明の実施態様に従う実施例2を示し、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中のトランザクションが全てコミットされるまで、全てのスレッドがバリア同期される態様を示す。
図3A】本発明の実施態様に従う実施例3を示し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、当該アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、全てのスレッドがバリア同期される態様を示す。
図3B】本発明の実施態様に従う実施例4を示し、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中のトランザクションが全てアボートされるまで、全てのスレッドがバリア同期される態様を示す。
図4A】本発明の実施態様に従う実施例5を示し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、当該アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される態様を示す。
図4B】本発明の実施態様に従う実施例6を示し、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てコミットされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される態様を示す。
図5A】本発明の実施態様に従う実施例7を示し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、当該アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される態様を示す。
図5B】本発明の実施態様に従う実施例8を示し、各トランザクションの実行時間のばらつきが大きいプログラムの実行中にアボート率を計算し、複数のスレッド中のトランザクションのうちの1つのトランザクションにおいてアボートが起きたことに応じて、当該アボートが連鎖することを防止するために、上記計測したアボート率が所定の閾値より低いことを条件に、当該アボートが検出された時点で処理中のトランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで、上記トランザクションの実行順が遅い1つ又は複数のスレッドを除く全てのスレッドがバリア同期される態様を示す。
図6A】本発明の実施態様に従う上記実施例1に示す実施態様を実行する為のフローチャートを示す。
図6B】本発明の実施態様に従う上記実施例2に示す実施態様を実行する為のフローチャートを示す。
図7A】本発明の実施態様に従う上記実施例3に示す実施態様を実行する為のフローチャートを示す。
図7B】本発明の実施態様に従う上記実施例4に示す実施態様を実行する為のフローチャートを示す。
図8A】本発明の実施態様に従う上記実施例5に示す実施態様を実行する為のフローチャートを示す。
図8B】本発明の実施態様に従う上記実施例6に示す実施態様を実行する為のフローチャートを示す。
図9A】本発明の実施態様に従う上記実施例7に示す実施態様を実行する為のフローチャートを示す。
図9B】本発明の実施態様に従う上記実施例8に示す実施態様を実行する為のフローチャートを示す。
図10】本発明の実施態様に従う上記実施例1及び上記実施例2それぞれにおけるベンチマーク結果を示す。
図11A】本発明の実施態様に従う上記実施例1を実装する為のコード例を示す。
図11B】本発明の実施態様に従う上記実施例2を実装する為のコード例を示す。
図12図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い複数のスレッドで順序付きトランザクションを実行するためのコンピュータの機能ブロック図の一例を示した図である。
図13】シングルスレッドによる各トランザクションの実行、及び、マルチスレッドによるスレッドレベル投機実行の従来技術を示す。
図14】一般のプロセッサに搭載されているハードウェア・トランザクショナル・メモリの機能を用いた順序付きトランザクションの単純実装による方法(従来技術)を示す。
図15図14に示す単純実装による方法を実行する為のフローチャートを示す。
【発明を実施するための形態】
【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、トランザクション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)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、図2の説明において定義したアボート率を任意に選択しうる。
【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)において、当該再実行が終了したこと(すなわち、再実行がコミットされたこと)、且つ、上記バリア同期フラグが立っていることから、上記アボートが検出された時点で実行中又はアボート中のトランザクションの実行順が遅い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)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、図2の説明において定義したアボート率を任意に選択しうる。
【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)所定量のトランザクションが処理されることに応じて、アボート率を計算しうる。当業者は、図2の説明において定義したアボート率を任意に選択しうる。
【0176】
コンピュータ(101)は、上記アボート率が所定の閾値よりも低いことに応じて、引き続き、スレッド1(541)を除く全てのスレッド(スレッド2(542)及びスレッド3(543))において、トランザクションの処理を再開する。すなわち、コンピュータ(101)は、アボートを検出すること及びバリア同期をすることの処理を繰り返す。上記アボート率が所定の閾値よりも低いかを判断する理由は、各トランザクションの実行時間のばらつきが大きい場合に、アボートが検出された時点で処理中(実行中又はアボート中)のトランザクションの実行順が遅いスレッドを除く全てのスレッド中のトランザクションが全てアボートされるまで全てのスレッドをバリア同期することで、却ってトランザクションの処理が遅くなりうる場合もあるからである。
【0177】
なお、図5Bにおいて、コンピュータ(101)が、スレッド2(542)においてトランザクション7を再実行(「再実行7」と表記する)し、次に、スレッド3(543)においてトランザクション8を再実行(「再実行8」と表記する)するように示しているが、どのスレッドがどのトランザクションを再実行するかは任意であって、上記に限定されるものでないことに留意されたい。
【0178】
下記図6A図6B図7A図7B図8A図8B及び図9A図9Bそれぞれは、上記実施例1〜2(図2A図2B)、上記実施例3〜4(図3A図3B)、上記実施例5〜6(図4A図4B)及び上記実施例7〜8(図5A図5B)それぞれに示す実施態様を実行する為のフローチャートを示す。
【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が、上記実施例に示す実施態様を実行する為に、従来技術である単純実装による方法に対して追加されたステップである。また、ステップ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を実行しうる。
図1
図6A
図6B
図7A
図7B
図8A
図8B
図9A
図9B
図11A
図11B
図12
図13
図15
図2A
図2B
図3A
図3B
図4A
図4B
図5A
図5B
図10
図14