(57)【要約】      （修正有）【課題】シーケンシャルループを、トランザクショナルメモリシステムで使用するために、並列ループに変換する。【解決手段】オープンエンドおよび／またはクローズドエンドのシーケンシャルループを、並列ループに変換することができる。当初のシーケンシャルループを含むコードのセクションを解析して、当初のシーケンシャルループについての繰り返し定数を決定する。当初のシーケンシャルループを、繰り返し定数までの数だけトランザクションを発生することのできる並列ループに変換する。オープンエンドシーケンシャルループは、それぞれの作業項目を含む個々のトランザクションを、各スペキュレーションパイプラインの繰り返し毎に発生する並列ループに変換することができる。その並列ループは次いで、異なるスレッド上で実行される個々のトランザクションのうち少なくともいくつかと共に、前記トランザクショナルメモリシステムを用いて実行される。【選択図】図１
2014146355.tif 000002
【特許請求の範囲】
【請求項１】
クローズドエンドのシーケンシャルループを並列ループに変換する方法であって、
トランザクショナルメモリシステムを提供するステップと、
当初のシーケンシャルループを含むコードの第１セクションを解析して、前記当初のシーケンシャルループが実行する繰り返し定数を決定するステップと、
前記当初のシーケンシャルループを含むコードの前記第１セクションを、並列ループを含むコードの第２セクションに変換するステップであって、前記並列ループは前記繰り返し定数までの数の複数のトランザクションを生成するよう作動可能であり、前記トランザクションは前記並列ループの少なくとも一部を並列に実行可能にする、ステップと、
異なるスレッド上で実行する複数のトランザクションのうちの少なくともいくつかと共に、前記トランザクショナルメモリシステムを使用してコードの第２セクションを実行するステップと
を備えたことを特徴とする方法。
【請求項２】
前記繰り返し定数は、前記当初のシーケンシャルループと比較してループ終了を判定するための一定値を検索することにより決定されることを特徴とする請求項１に記載の方法。
【請求項３】
前記トランザクションの各々がそれぞれの誘導変数カウンタをコミット連続番号として使用し、該コミット連続番号は所定のコミット順処理を使用してトランザクション各々を正しい順序でコミットするのを保証することを特徴とする請求項１に記載の方法。
【請求項４】
請求項１に記載の各ステップをコンピュータに実行させるためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能記憶媒体。
【請求項５】
コンピュータに実行させるためのコンピュータ実行可能命令を有するコンピュータ読取可能記憶媒体であって、該コンピュータ実行可能命令は、
トランザクショナルメモリシステムを提供するステップと、
オープンエンドシーケンシャルループを含むコードの前記第１セクションを、並列ループを含むコードの第２セクションに変換するステップであって、前記並列ループはスペキュレーションパイプラインの繰り返し毎にそれぞれの作業項目を含む個々のトランザクションを生成するように作動可能であるステップと、
異なるスレッド上で実行する前記個々のトランザクションのうち少なくともいくつかと共に、前記トランザクショナルメモリシステムを使用してコードの前記第２セクションを実行するステップと、
を含み、各ステップをコンピュータに実行させることを特徴とするコンピュータ読取可能記憶媒体。
【請求項６】
コードの前記第２セクションは、前記トランザクションのうち少なくともいくつかを並行して実行するように生成されることを特徴とする請求項５に記載のコンピュータ読取可能記憶媒体。
【請求項７】
コードの前記前記第２セクションは、前記オープンエンドシーケンシャルループのコンパイラ分析を実行することなく生成されることを特徴とする請求項５に記載のコンピュータ読取可能記憶媒体。
【請求項８】
当初の入力対出力のマッピングが、前記トランザクションを所定のコミット順でコミットすることにより維持されることを特徴とする請求項５に記載のコンピュータ読取可能記憶媒体。
【請求項９】
前記所定のコミット順が、前記オープンエンドシーケンシャルループの実行順と整合性が取れていることを特徴とする請求項８に記載のコンピュータ読取可能記憶媒体。
【請求項１０】
オープンエンドシーケンシャルループから生成される並列ループを実行する方法であって、
オープンエンドシーケンシャルループから生成される並列ループで実行する繰り返しの回数を見積もるスペキュレーションパイプラインを生成するステップと、
前記スペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを生成するステップと、
異なるスレッドの上で個々のトランザクションのうち少なくともいくつかを実行するステップと、
それぞれの作業項目毎に終了条件を評価するステップと、
前記それぞれの作業項目のうちの特定の１つが、前記並列ループを終了する時期に到達したと判定するときに、前記それぞれの作業項目のうちの前記特定の１つの先行者をコミットし、後継者を廃棄するステップと、
を含むことを特徴とする方法。
【請求項１１】
それぞれの作業項目を実行しながら、現在の繰り返し値を読み出すことを特徴とする請求項１０に記載の方法。
【請求項１２】
それぞれの作業項目毎の前記現在の繰り返し値は、所定のコミット順処理において、コミット連続番号として使用されること、を特徴とする請求項１１に記載の方法。
【請求項１３】
前記現在の繰り返し値は、それぞれの作業項目毎にアクセス可能な値の極小の増分を実行することにより読み出されることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記オープンエンドシーケンシャルループの当初の実行と整合性が取れているコミット順が達成されることを特徴とする請求項１０に記載の方法。
【請求項１５】
前記オープンエンドシーケンシャルループが、ｗｈｉｌｅループであることを特徴とする請求項１０に記載の方法。
【請求項１６】
前記オープンエンドシーケンシャルループが、ｄｏ ｗｈｉｌｅループであることを特徴とする請求項１０に記載の方法。
【請求項１７】
前記オープンエンドシーケンシャルループが、ｆｏｒループであることを特徴とする請求項１０に記載の方法。
【請求項１８】
前記スペキュレーションパイプラインの初期値が、並列ループを実行するコンピュータ上で利用可能な処理装置の数に少なくとも部分的に基づいて計算されることを特徴とする請求項１０に記載の方法。
【請求項１９】
適応的統計データを用いて、前記並列ループの後の実行のために前記スペキュレーションパイプラインを調整することを特徴とする請求項１０に記載の方法。
【請求項２０】
請求項１０に記載の各ステップをコンピュータに実行させるためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、トランザクションを用いるシーケンシャルフレームワークの並行化に関する。
【背景技術】
【０００２】
ソフトウェアトランザクショナルメモリ（ＳＴＭ）は、並行計算作業において共有メモリに対するアクセスを制御するためのデータベーストランザクションに類似した並行処理制御機構である。トランザクショナルメモリの文脈におけるトランザクションは、共有メモリに対する一連の読取書込を実行するコード１個である。ＳＴＭは、在来のロック機構の代替として使用される。プログラマが（例えば、アトミック（分割不可能な単位）で）宣言型注釈をコードブロックの周りに置いてそれらが必要とする安全属性を示すと、システムは、このブロックは他の保護コード領域に関してアトミックに実行（分割不可能な単位として実行）されることを、自動的に保証する。そのソフトウェアトランザクショナルメモリプログラム作成モデルは、ロックに基づく優先順位逆転およびデッドロック問題を防止する。
【０００３】
典型的ＳＴＭシステムには、多くの利点があるが、それでも、プログラマは、意図しないメモリアクセス順序付けを注意深く避けることを要求される。例えば、トランザクションをコミットする（即ち、コミット処理の）順序は、典型的ＳＴＭ環境においては拘束を受けない。トランザクションはコミットしようと互いに競争する。このことは、トランザクション１がトランザクション２の前にコミットするか後にコミットするかは、しばしばプログラムの動的スケジューリングの産物である（そしてしばしばプログラム特有のロジックの産物でもある）ことを意味する。その上、メモリの同一片に書込をしようとするように、２つのトランザクションが衝突するとき、それらのコミット順は、可能な多数の競合管理方針のうち１つに基づいて任意に決定することができる。これら筋書きの双方において、特定のコミット順は保証されない。したがって、自分のプログラムが何らかの順で正しく働くことを確認することはプログラマの双肩に掛かっている。これは並行プログラム作成を極めて困難にする。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
実行の順序が重要であり、並行性が極めて魅力的である１つの筋書きは、ループの多重繰り返しを並行して実行するときである。下記のような古典的なｆｏｒ・・・ｅａｃｈループを取り上げる。
【０００５】
ＦｏｒＥａｃｈ（ｓｔｒｉｎｇ ｓ ｉｎ Ｌｉｓｔ＜ｓｔｒｉｎｇ＞）
｛
Ｓ；
｝
【０００６】
ループの各繰り返しの間、ループ本体におけるステートメントＳが実行される。このようなループは、二番目の繰り返しの始まる前にループの最初の繰り返しを終了させるなど、順次実行するために書かれていた。このようなシーケンシャルループを、起こりうる副次効果または順序依存性に対処する特別な注意を払うことなく並行して実行すると、予期しない結果を生じることがある。
【課題を解決するための手段】
【０００７】
トランザクショナルメモリシステム内のトランザクションに対して順序付けを適用するため、各種の技術および手法を開示する。トランザクショナルメモリシステムは、複数のトランザクションについて所定のコミット順を指定することができる機能を提供する。その所定のコミット順は、実行時に、そのトランザクショナルメモリシステム内のそのトランザクションをコミットする順序を決定するのに使用される。１つの実施において、その所定のコミット順は全体の順序付けまたは部分的順序付けの何れかにすることができる。全体の順序付けの場合、そのトランザクションは、線形順序でコミットすることを強制される。部分的順序付けの場合、そのトランザクションは、許容可能な筋書きのうち１つでコミットすることができる。１つの実施において、コミットアービトレータが、次にコミットが許されるべきトランザクションをあらわす次回コミット値を追跡し続けており、特定のトランザクションがコミットする準備が整ったとき、そのコミット順番号がコミットアービトレータの次回コミット値と一致しているならば、コミットすることを許される。
【０００８】
第１トランザクションと第２トランザクションとの間に衝突が生じたとき、競合管理処理が呼び出される。その競合管理処理においては上記所定のコミット順を用いて、その第１トランザクションとその第２トランザクションの何れが衝突に勝って先に進むことを許されるかの決定を助ける。
【０００９】
トランザクショナルメモリシステムと共に使用するための、シーケンシャルループを並列ループに変換するための手法を開示する。トランザクショナルメモリに基づくシステムを提供する。当初のシーケンシャルループを含むコードの第１セクションを、トランザクションを用いて当初の入力対出力マッピングを維持する並列ループを含むコードの第２セクションに変換する。例えば、当初のシーケンシャルループは、当初のシーケンシャルループの各繰り返しをもとに所定のコミット順処理にしたがう個々のトランザクションを作成し、次いでそのトランザクションを、並行して実行されるように異なるスレッドに割り当てることにより、並列ループに変換することができる。並列ループを実行する間の特定のトランザクションの中から処理されない例外（unhandled exception）を発見すると、その特定のトランザクションおよび、もしあれば先行トランザクションをコミットすることにより、状態変更を行い、後続トランザクションの何れかにより行われる状態変更を廃棄する。さもなければ、すべてのトランザクションをコミットする。
【００１０】
１つの実施において、オープンエンドおよび／またはクローズドエンドのシーケンシャルループを並列ループに変換することができる。例えば、当初のシーケンシャルループを含むコードのセクションを解析して、その当初のシーケンシャルループのために繰り返しの定数を決定する。その当初のシーケンシャルループは、その繰り返しの定数までの個数のトランザクションを発生することのできる並列ループに変換される。別の例として、オープンエンドシーケンシャルループは、スペキュレーションパイプラインの各繰り返し当たりの作業項目それぞれを含む個々のトランザクションを発生する並列ループに変換することができる。これらのトランザクションには異なるスレッドを割り当てて、並列ループの少なくとも一部は並行して実行可能にする。その並列ループはこのとき、所定のコミット順の効能を有するトランザクショナルメモリシステムの保護の下で実行される。
【００１１】
１つの実施において、オープンエンドのシーケンシャルループから作成された並列ループを実行する方法を提供する。オープンエンドのシーケンシャルループから作成される並列ループにおいて実施すべき繰り返し数を見積もるスペキュレーションパイプラインを作成する。上記システムは、そのスペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを作成する。これら個々のトランザクションは次いで、異なるスレッドに割り当てられ、結局それらが並行して実行される結果になる。それぞれの作業項目毎に終了条件を評価する。それぞれの作業項目のうちの特定の１つがその並列ループを終了する時期に達したと判定するとき、先行のものはコミットされ、後続のものは廃棄される。
【００１２】
本概要は、詳細な説明において下記に更に詳細に記述する概念の要点を簡略形で紹介するために提供されたものである。本概要は、請求する主題の重要特徴または不可欠特徴を特定することを目的とはせず、請求主題の範囲決定における補助として使用されることを目的としてもいない。
【図面の簡単な説明】
【００１３】
【図１】１つの実施のコンピュータシステムの概略図である。
【図２】図１のコンピュータシステム上で作動する１つの実施のトランザクショナルメモリアプリケーションの概略図である。
【図３】図１のシステムの１つの実施のためのハイレベル処理の流れ図である。
【図４】図１のシステムの１つの実施のための処理の流れ図であって、コミットアービトレータを使用して所定のコミット順を実施することを含むステージを示す流れ図である。
【図５】図１のシステムの１つの実施のための処理の流れ図であって、コミットアービトレータを使用して複数のトランザクションの全体の順序付けを実施することを含むステージを示す流れ図である。
【図６】図１のシステムの１つの実施のための処理の流れ図であって、コミットアービトレータを使用して複数のトランザクションの部分的順序付けを実施することを含むステージを示す流れ図である。
【図７】図１のシステムの１つの実施のための処理の流れ図であって、所定のコミット順の情報を使用して、競合を管理する競合管理処理を提供することを含むステージを示す流れ図である。
【図８】図１のシステムの１つの実施のための処理の流れ図であって、所定のコミット順の情報を使用して入れ子トランザクションとの競合を管理する競合管理処理を提供することを含むステージを示す流れ図である。
【図９】共通祖先を持つ最高順位の祖先による模範的な系図を示すロジック図である。
【図１０】共通祖先を持たない最高順位の祖先による模範的な系図を示すロジック図である。
【図１１】図１のシステムの１つの実施のための処理の流れ図であって、トランザクショナルメモリシステム内のコミットアービトレータを使用することにより、無駄な作業の量を減少することを含むステージを示す流れ図である。
【図１２】図１のシステムの１つの実施のための処理の流れ図であって、競合管理処理において系図全体を解析して適切な競合解消策を決定することを含むステージを示す流れ図である。
【図１３】図１のコンピュータシステムの上で働く１つの実施のトランザクショナルメモリアプリケーションの概略図である。
【図１４】図１のシステムの１つの実施のための処理の流れ図であって、当初のシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。
【図１５】図１のシステムの１つの実施のための処理の流れ図であって、所定のコミット順処理を使用して、並列ループ内のトランザクションは適切な順序でコミットされることを確認することを含むステージを示す流れ図である。
【図１６】図１のシステムの１つの実施のための処理の流れ図であって、コミットアービトレータを使用して、並列ループが実行している間に生じる競合を検知して対処することを含むステージを示す流れ図である。
【図１７】図１のシステムの１つの実施のための処理の流れ図であって、コミットアービトレータを使用して、並列ループを実行している間に生じる処理されない例外（unhandled exception）を検知して対処することを含むステージを示す流れ図である。
【図１８Ａ】当初のシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。
【図１８Ｂ】当初のシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。
【図１９】図１のシステムの１つの実施のための処理の流れ図であって、クローズドエンドシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。
【図２０】図１のシステムの１つの実施のための処理の流れ図であって、スペキュレーションパイプラインを使用して、オープンエンドシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。
【図２１】図１のシステムの１つの実施のための処理の流れ図であって、オープンエンドシーケンシャルループから作成された並列ループを実行することを含むステージを示す流れ図である。
【図２２】図１のシステムの１つの実施のための処理の流れ図であって、オープンエンドシーケンシャルループから作成された並列ループにおける各作業項目を適切な順序でコミットさせていることを確認することを含むステージを示す流れ図である。
【図２３】図１のシステムの１つの実施のための処理の流れ図であって、スペキュレーションパイプラインを計算して並列ループの中に幾つの繰り返しを含むかを決定することを含むステージを示す流れ図である。
【図２４Ａ】当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。
【図２４Ｂ】当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。
【発明を実施するための形態】
【００１４】
本発明の原理の理解を促進する目的のために、ここで図面に示す実施例を参照し、特定の言語を用いてそれを記述する。とは言っても、それによる範囲の限定は意図されていないことは理解されるであろう。記述する実施例における代替案および追加の変更、およびここに記述するような原理のさらなる応用は何れも、当業者にとっては普通に思い浮かぶはずのものである。
【００１５】
このシステムは、トランザクショナルメモリシステムとしての一般的文脈で記述するが、このシステムはこれらに加えて別の目的にも役立つ。１つの実施において、ここに記述する１つまたは複数の手法は、ＭＩＣＲＯＳＯＦＴ（登録商標）．ＮＥＴフレームワークのようなフレームワークプログラムの範囲内の特性として、またはソフトウェアアプリケーションを開発する開発者のためのプラットホームを提供する任意の別の型のプログラムまたはサービスが備える特性として実施することができる。別の実施において、ここに記述する手法の１つ以上が、同時実行環境において実行するアプリケーションの開発を扱う別のアプリケーションの伴う特性として実施される。
【００１６】
１つの実施においては、複数のトランザクションについて、所定のコミット順を指定することができる機能を、トランザクショナルメモリシステムの中に備える。所定のコミット順は、トランザクションをコミットする順序の決定を助けることに使用される。１つの実施例において、競合管理処理は、第１トランザクションと第２トランザクションとの間に衝突を生じるときに呼び出される。次いでその所定のコミット順を競合管理処理において使用して、第１トランザクションまたは第２トランザクションが競合に勝って先に進むことを許されるべきかどうかを決定するのを助ける。
【００１７】
別の実施において、当初のシーケンシャルループを並列ループに転換する機能を、トランザクショナルメモリシステムの中に提供する。当初のシーケンシャルループは、当初の入力対出力マッピングは維持されることを保証する方法で、並列ループに転換される。用語「当初の入力対出力マッピングは維持される」は、ここで使用するとき、並行化ループ実行の後のプログラムの状態は、代わりにシーケンシャルループが働いたときと全く同様であることを意味する。１つの実施において、当初のシーケンシャルループの各繰り返しをトランザクションの中に置き、次いでここに記述する所定のコミット順処理を用いてそのトランザクションは適切な順序でコミットすることを確認することにより、並列ループにおいて当初の入力対出力マッピングは維持される。
【００１８】
ここで明確にする例の多くは、ソフトウェアトランザクショナルメモリシステムの文脈で記述するけれども、他の実施において、ここに明確にする幾つかの、すべての、または、さらなる追加の機能および／または手法は、ソフトウェアトランザクショナルメモリシステムとは別個にまたは併せての何れでも、ハードソフトウェアトランザクショナルメモリシステムを用いて実施することができることは理解されるであろう。
【００１９】
図１に示すように、このシステムの１つまたは複数の部分を実施するために使用する模範的なコンピュータシステムは、計算装置（コンピューティングデバイス）１００のような計算装置を含む。その最も基本的な構成において、計算装置１００は典型的に、少なくとも１つの処理装置１０２およびメモリ１０４を含む。計算装置の正確な構成および型により、メモリ１０４は、（ＲＡＭのような）揮発性、（ＲＯＭ、フラッシュメモリなどのような）不揮発性、またはその２つの何らかの結合である。この最も基本的な構成を図１に破線１０６で示す。
【００２０】
加えて、計算装置１００は、さらなる特性／機能性をも有する。例えば、装置１００は、これらに限定はされないが磁気的または光学的ディスクまたはテープを含む追加の記憶装置（取り外し可能なおよび/または取り外しができない）をも含む。このような追加記憶装置は、取り外し可能な記憶装置１０８および取り外しができない記憶装置１１０により図１に示している。コンピュータ記憶媒体は、コンピュータ読取可能命令、データ構造体、プログラムモジュールまたは他のデータのような情報ストレージのため任意の方法または手法で実施される揮発性および不揮発性、取り外し可能なおよび取り外しができない、の媒体を含む。メモリ１０４、取り外し可能な記憶装置１０８および取り外しができない記憶装置１１０はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多目的ディスク（ＤＶＤ）、または他の光学的記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、若しくは所望の情報の記憶に使用することができて装置１００がアクセスすることのできる他の媒体の何れをも含むが、これらに限定はされない。このようなコンピュータ記憶媒体は装置１００の一部であることがある。
【００２１】
計算装置１００は、計算装置１００が他のコンピュータ／アプリケーション１１５と連絡可能にする１つまたは複数の通信接続１１４を備える。装置１００は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、などのような、入力装置１１２をも有する。ディスプレイ、スピーカ、プリンタ、などのような出力装置１１１も含むことができる。これらの装置は技術的によく知られているので、ここで長々と論じる必要はない。１つの実施において、計算装置１００は、トランザクショナルメモリアプリケーション２００を含む。トランザクショナルメモリアプリケーション２００は、図２においてさらに詳細に記述する。
【００２２】
ここで図１に対する参照を続けると共に、図２に転じて、計算装置１００の上で作動するトランザクショナルメモリアプリケーション２００を示す。トランザクショナルメモリアプリケーション２００は、計算装置１００の上に存在するアプリケーションプログラムのうちの１つである。しかしながら、トランザクショナルメモリアプリケーション２００は、代わりにまたは追加して１つまたは複数のコンピュータの上および／または図１に示すものとは異なる変換の中にコンピュータ実行可能命令として具体化されることは理解されるであろう。代わりにまたはさらに、トランザクショナルメモリアプリケーション２００の１つまたは複数の部分は、別のコンピュータおよび／またはアプリケーション１１５、若しくはコンピュータソフトウェア技術に携わる人の心に浮かぶ通りの別のこのような変換の上で、システムメモリ１０４の部分とすることができる。
【００２３】
トランザクショナルメモリアプリケーション２００は、ここに記述する手法の幾つかまたは全部を実行することを担当するプログラムロジック２０４を含む。プログラムロジック２０４は、トランザクショナルメモリ（ＳＴＭ）システムを提供するロジック２０６、そのＳＴＭシステム内の複数のトランザクションについて、所定のコミット順を指定可能にするコミットアービトレータを動的または静的に作成するロジック２０８、そのコミットアービトレータがその所定のコミット順を実行時において使用して、そのトランザクショナルメモリシステム内の複数のトランザクションがコミットする順序を決定するのを助けるロジック２１０、第１トランザクションと第２トランザクションとの間に衝突が生じたときに呼び出される競合管理処理を提供するロジック２１２、その所定のコミット順をその競合管理処理において使用して、第１トランザクションまたは第２トランザクションの何れがその競合に勝って先に進むことを許されるかを決定する（例えば、同一トランザクショングループの２つのトランザクションのうちの何れが低いコミット順を有するかによって決める）のを助けるロジック２１４、そのコミットアービトレータを作動可能にして、その所定の順序付けに使用し１つまたは複数の順序付け値（例えば、全体の順序付けにおいては−複数のトランザクションのうちでコミットすることを許される次のトランザクションを表している次回コミットフィールド）を追跡するため使用可能にするため、および１つまたは複数の順序付け値を所与のトランザクションの特定コミット順番号に対して比較しそのトランザクションのコミットは実行されるべき順序付けを適切に与えられているか否かを調べるロジック２１６、および当該アプリケーションをオペレーション（運用）するための他のロジック２２０を含む。１つの実施において、プログラムロジック２０４は、プログラムロジック２０４のプロシージャに対する信号呼出を使用するなど、別のプログラムからプログラム的に呼び出される作動をすることができる。
【００２４】
ここで図１〜図２に対する参照を続けると共に、図３〜図１０に転じて、トランザクショナルメモリアプリケーション２００の１つまたは複数の実施を実行するためのステージをさらに詳細に記述する。図３は、トランザクショナルメモリアプリケーション２００のためのハイレベル処理の流れ図である。１つの形として、図３の処理は、少なくとも部分的に計算装置１００の運用ロジックにおいて実施される。このプロシージャ（手続き）は、出発点２４０において始まり、トランザクショナルメモリシステム（例えば、ソフトウェアトランザクショナルメモリシステム）を提供すること（ステージ２４２）を伴う。複数のトランザクション（即ち、動的または静的に割り当てられた）について所定のコミット順（即ち、全体の順序付けまたは部分的順序付け）を指定可能にする機能を提供する（ステージ２４４）。用語「所定のコミット順」は、ここで使用するとき、関連トランザクションの特定のグループは、そのトランザクションのラン開始前の何れかの時点で決定した通りにコミットされる明確な順序を含むことを意味する。用語トランザクションの「グループ」は、ここで使用するとき、同一のコミットアービトレータにより管理されるトランザクションの特定のセット（例えば、複数のトランザクション）と同時に、これらトランザクションの入れ子チルドレン（nested children）を含む。
【００２５】
その所定のコミット順を実行時に使用して、そのトランザクショナルメモリシステム内の複数のトランザクションがコミットする順序を決定するのを助ける（ステージ２４６）。その所定のコミット順を使用して、その複数のトランザクションの2つまたはそれ以上の複数の間で生じる衝突を解決するのを助ける（ステージ２４８）。処理は終点２５０において終了する。
【００２６】
図４は、コミットアービトレータを使用して所定のコミット順を実施することを含むステージを示す。１つの形として、図４の処理は、計算装置１００のオペレーティングロジックにおいて、少なくとも部分的に実施される。このプロシージャは、出発点２７０において始まり、トランザクショナルメモリシステム用の、そのコミットアービトレータは、複数のトランザクションについて所定のコミット順を指定させる１つまたは複数のコミットアービトレータを提供すること（ステージ２７２）を伴う。用語「コミットアービトレータ」は、ここで使用するとき、相互のために順序付けをしなければならない１つまたは複数のトランザクションのグループの管理を担当する任意の型のプログラム、特性、または処理を含むことを意味する。１つの実施において、１つまたは複数のコミットアービトレータは、任意の所与の時期にプログラムにおいて作動することができる。例えば、必要な数のコミットアービトレータを作成して、トランザクションの様々なグループを管理することができる。そのコミットアービトレータは、トランザクションの相互のために適切な順序付けを決定するのに使用する１つまたは複数の順序付け値を追跡して更新する（ステージ２７４）。全体の順序付けの場合は、複数のトランザクションのうち次にコミットすべき次のトランザクションをあらわず次回コミットフィールドを使用することができる（ステージ２７４）。部分的順序付けの場合は、可能な様々の順序の有向グラフ（directed graph）を、その順序付け値を使用して追跡する。必要に応じて、そのコミットアービトレータは、その所定のコミット順を使用して、複数のトランザクションそれぞれのためにコミット順番号を与える（ステージ２７６）。
【００２７】
複数のトランザクションのうちの特定のトランザクションがコミットの準備をするとき、１つまたは複数の順序付け値がそのコミットは適切であることを示していると、そのコミットアービトレータは、そのトランザクションがコミットするのを許可する（ステージ２７８）。全体の順序付けの場合、次回コミットフィールドと特定のトランザクションについてのコミット順番号とが同一番号を有するとき、この筋書きが生じる。このような筋書きにおいて、そのコミットアービトレータは、そのトランザクションがコミットすることを許し、コミットに成功するときは、次いで次回コミットフィールドを数列の次の番号（例えば、次に高い番号）に増加する（ステージ２７８）。複数のトランザクションのうちの特定のトランザクションがコミットの準備をするとき、その特定のトランザクションについてのコミット順番号は順序付け値に対して比較するとき、そのコミットは適切でないことが明らかになると、その特定のトランザクションは、先行トランザクションがコミットした後のある時期に解除されるまで保留モードに置く（ステージ２８０）。全体の順序付けの場合、この保留モードに入るのは、次回コミットフィールドと特定のトランザクションについてのコミット順番号とが同一の値を持っていないときである。
【００２８】
１つの実施において、システムは、その直前の先行者がコミットした後、トランザクションの活動を開始させる。この場合は、それは正しくコミットできる。代わりに、システムは、直前ではない先行者がコミットした後、その直前の先行者が未だコミットしていない場合に、トランザクションの保留を解除し活動開始を選ぶことができる。保留解除の後、システムは、現実にコミットすることがそのトランザクションについて適切であるか否かを点検する。適切ならばそのトランザクションはコミットする。その処理は、終点２８２において終了する。
【００２９】
図５は、コミットアービトレータを使用して複数のトランザクションの全体の順序付けを実施することを含むステージの１つの実施を示す。１つの形として、図５の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点２９０において始まり、複数のトランザクションについて所定の全体の順序付けを指定すること（例えば、複数のトランザクションがコミットすべき正確な順序を指定すること）を許すよう動作可能な１つまたは複数のコミットアービトレータを提供すること（ステージ２９２）を伴う。複数のトランザクションのうちの特定のトランザクションがそのコミット時点に達するとき、そのコミット順を実施するため、その特定のトランザクションのコミット順をそのコミットアービトレータの次回コミットフィールドと比較する（ステージ２９６)。１つの実施において、このシステムが（明白に衝突が無いとの理由などで）全体の順序付けを実施する必要が無いと決定するときには、全体の順序付け要件は必要に応じて破棄することができ（ステージ２９４）、処理は終点３０２において終了する。
【００３０】
コミット順序付けを実施しようとするときで、しかも特定のトランザクションのコミット順がコミットアービトレータの次回コミットフィールドと同一値を有するときは（判定点２９６）、その特定のトランザクションをコミットし、コミットに成功すると、次回コミットフィールドを増加して、次の後継者があれば、それを解除（awake;起動）させる（ステージ２９８）。特定のトランザクションのコミット順がコミットアービトレータの次回コミットフィールドと同一値を有しないときは（判定点２９６）、その特定のトランザクションを、先行トランザクションがコミットした後のちょうどよい時点で解除するまで、保留／休眠モードに置く（ステージ３００）。１つの実施においては、その後の時点で、先行者と衝突が起こるときは、その特定のトランザクションは、以上終了し、ロールバックして先行者を前に進めるよう要求される。さもなければ、このような衝突が起こらない場合は、その特定のトランザクションは、ここに記述するコミット順要件に合致すると直ちにコミットすることができなければならない。この処理は終点３０２において終了する。
【００３１】
図６は、コミットアービトレータを使用して複数のトランザクションの部分的順序付けを実施することを含むステージの１つの実施を示す。１つの形として、図６の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは出発点３１０において始まり、複数のトランザクションについて所定の部分的順序付けを指定すること（例えば、複数のトランザクションがコミットすべき複数の容認できる順序を（例えば、有向グラフの形で）指定すること）を許す作動をすることのできる１つまたは複数のコミットアービトレータを提供すること（ステージ３１２）を伴う。複数のトランザクションのうちの特定のトランザクションがそのコミット時点に達するとき、そのコミット順を実施するため、先行トランザクションの状態（例えば、１つまたは複数の順序付け値）を、（例えば、そのコミットアービトレータが追跡する通りの）特定のコミットしているトランザクションに関して調べる（ステージ３１４）。その特定のトランザクションに対する先行トランザクション全部がコミットし終えているときは（判定点３１６）、その特定のトランザクションはコミットされる（ステージ３１８）。コミットに成功すると、コミットアービトレータが追跡する１つまたは複数の値を必要に応じて更新し、もしあれば、可能な次の後継者全部を解除（活動開始）させる（３１８）。
【００３２】
その特定のトランザクションに対する先行トランザクション全部がコミットし終えていないときには（判定点３１６)、その特定のトランザクションを、先行トランザクションがコミットした後のちょうど良い時点で解除されるまで保留／休眠モードに置く（ステージ３２０）。処理は、終点３２２において終了する。
【００３３】
図７は、その所定のコミット順の情報を使用して競合を管理する競合管理処理を提供することを含むステージを示す１つの実施を示す。１つの形として、図７の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点３４０において始まり、トランザクションの１つまたは複数のグループについての所定のコミット順をサポートするトランザクショナルメモリシステムを提供すること（ステージ３４２）を伴う。第１トランザクションと第２トランザクションとの間に競合を生じたときに呼び出される競合管理処理を提供する（ステージ３４４）。その競合管理処理においてその所定のコミット順を使用して、第１トランザクションまたは第２トランザクションのうちの何れが競合に勝って先に進むことを許されるべきかを決定するのを助ける（ステージ３４６）。第１トランザクションと第２トランザクションとが同一トランザクショングループの一部でないときには（判定点３４８）、これら２つのトランザクションの間で、所定のコミット順は (存在しないので) 実施しない（ステージ３５０）。このような筋書きにおいて、その２つのトランザクションは同一トランザクショングループの中にないので、競合を解決することに順序付け要因は使用されない（ステージ３５０）。
【００３４】
第１トランザクションと第２トランザクションとが同一トランザクショングループの一部であるときには（判定点３４８）、このシステムは、第１トランザクションの第１順序番号と第２トランザクションの第２順序番号とを比較する（ステージ３５２）。より低い順序番号（または別の適切な優先順序付け）を有するトランザクションが先へ進むことを許される（ステージ３５４）。処理は、終点３５６において終了する。
【００３５】
図８は、上記所定のコミット順の情報を使用して入れ子トランザクションとの競合を管理する競合管理処理を提供することを含むステージの１つの実施である。１つの形として、図８の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。１つの実施においては、特定のトランザクションをコミットする前に、トランザクション毎に、系図の全体(entire ancestor chain)を考慮に入れるので、その系図の中に順序付けがあればそれを実施する。このプロシージャは、出発点３７０において始まり、第１トランザクションと第２トランザクションとの間に競合が生じたときに呼び出される競合管理処理を提供すること（ステージ３７２）を伴う。その競合管理処理において所定のコミット順を使用して、第１トランザクションまたは第２トランザクションのうちの何れがその競合に勝って先に進むことを許されるかを決定するのを助ける（ステージ３７４）。第１トランザクションと第２トランザクションとが同一トランザクショングループの一部でないときには（判定点３７６）、これら２つのトランザクションの間で、所定のコミット順は（存在しないので）実施せず（ステージ３７８）、処理は終点３８８において終了する。その第１トランザクションと第２トランザクションとが同一トランザクショングループの一部であるときには（判定点３７６）、このシステムは、入れ子トランザクションを含むか否かを点検する（判定点３８０）。
【００３６】
入れ子トランザクションを含まないときには（判定点３８０）、第１トランザクションの順序番号（または他の順序付け表示）と第２トランザクションの順序番号（または他の順序付け表示）とを比較する（ステージ３８４）。より低い順序番号を有する（または他の適切な判断基準を用いることにより、順序では次であると判定された）トランザクションが先に進むことを許される（ステージ３８６）。
【００３７】
入れ子トランザクションを含むときには（判定点３８０）、第１トランザクションの最上位祖先の順序番号（または他の順序付け表示）と第２トランザクションの最上位祖先の順序番号（または他の順序付け表示）とを比較する（ステージ３８２）。用語「最上位祖先」は、ここで使用するとき、共通祖先が関与する場合は共通祖先の直接の子を含み、共通祖先が関与しない場合は各トランザクションの最高順位の祖先を意味する。共通および共通でない祖先が関与するこれらの筋書きをさらに詳しく図９および図１０に示す。より低い順序番号を有するトランザクション（例えば、より低い順序番号または適切な他の判断基準を有していた祖先に関係するトランザクション）が先に進むことを許される（ステージ３８６）。処理は終点３８８において終了する。
【００３８】
図９は、共通祖先を有する系図の一例を、最高順位の祖先と共に示すロジック図（論理図）である。図示の事例において、トランザクションＡはＤおよびＥの共通祖先である。ＤとＥとの間に生じる競合において、トランザクションＢとＣ（共通祖先Ａの直接の子）の順序番号を解析して、ＤまたはＥの何れが先に進むことを許されるべきかを決定する（図８のステージ３８２）。
【００３９】
図１０は、共通祖先を有しない系図の一例を最高順位の祖先と共に示すロジック図（論理図）である。図示の事例において、トランザクションＡはトランザクションＣの祖先である。トランザクションＤはトランザクションＦの祖先である。ＣとＦとの間に生じる競合において、このときはトランザクションＡとＤ（それぞれの最高順位の祖先）の順序番号を比較してトランザクションＣまたはＦの何れが先に進むことを許されるべきかを決定する（図８のステージ３８２）。
【００４０】
図１１は、トランザクショナルメモリシステム内のコミットアービトレータを使用することにより、無駄な作業の量を減少することを含むステージの１つの実施を示す。１つの形として、図１１の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点４００において始まり、トランザクショナルメモリシステム用の、複数のトランザクションについて所定のコミット順を指定させる１つまたは複数のコミットアービトレータを提供すること（ステージ４０２）を伴う。そのコミットアービトレータは、トランザクションを保留／休眠モードに置いて、（例えば、所定のコミット順を解析して正しい順序を判定することにより）先行トランザクションが未だ実行中であるとき、そのトランザクションが再度実行されることを阻止するよう動作できる（ステージ４０４）。そのコミットアービトレータは、（例えば、再度所定のコミット順を解析して正しい順序を判定することにより）先行者が完了したとき、保留に置かれたトランザクションを解除するよう動作することもできる（ステージ４０６）。これら阻止と解除の機構を備えることにより、そのコミットアービトレータは、後に取り消さなければならない動作の実行を阻止して、それにより無駄になる作業の量を軽減するのを助ける（ステージ４０８）。この処理は終点４１０において終了する。
【００４１】
図１２は、競合管理処理において系図の全体を解析して適切な競合解消策を決定することを含むステージを示す。１つの形として、図１２の処理は計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点４３０において始まり、第１トランザクションと第２トランザクションとの間に競合が生じるときに呼び出される競合管理処理を提供すること（ステージ４３２）を伴う。その競合管理処理において所定のコミット順を使用して、第１トランザクションまたは第２トランザクションのうちの何れがその競合に勝って先に進むことを許されるかを決定するのを助ける（ステージ４３４）。所定のコミット順の系図の全体を解析して、適切な競合管理を決定するのを助ける（ステージ４３６）。例えば、ＢはＡの中にネスト化（入れ子に）されており、ＤはＣの中にネスト化されているという、４つのトランザクション、２つの親と２つの子、があるとする。ＡはＣの前にコミットしなければならないというＡとＣとの間の順序付け関係があると仮定する。ＢとＤとの間に競合が生じると、競合管理処理はＢを支持するはずである。ＡはＣの前にコミットしなければならないことを考えると、Ｄを支持することは無駄だからである（ステージ４３６）。この処理は終点４３８において終了する。
【００４２】
ここで、図１に対する参照を続けると共に、図１３を参照すると、計算装置１００の上で働く並列ループサポートを有するトランザクショナルメモリアプリケーション５００が示されている。１つの実施において、並列ループサポートを有するトランザクショナルメモリアプリケーション５００は、計算装置１００の上に存在するアプリケーションプログラムのうちの１つである。しかしながら、並列ループサポートを有するトランザクショナルメモリアプリケーション５００は、代わりにまたはさらに１つまたは複数のコンピュータの上および／または図１に示すものとは異なる変換におけるコンピュータ実行可能命令として具体化されることは理解されるであろう。代わりにまたはさらに、並列ループサポートを有するトランザクショナルメモリアプリケーション５００の１つまたは複数の部分は、他のコンピュータおよび／またはアプリケーション、若しくはコンピュータソフトウェア技術の当事者の心に浮かぶ通りの他の変換の上で、システムメモリ１０４の一部分とすることができる。
【００４３】
並列ループサポートを有するトランザクショナルメモリアプリケーション５００は、ここに記述する手法の幾つかまたはすべての実行を担当するプログラムロジック５０４を含む。プログラムロジック５０４は、トランザクショナルメモリシステムを提供するロジック５０６、当初のシーケンシャルループを含むコードの第１セクションを、トランザクションを使用して当初の入力対出力マッピングを維持し安全性を向上させる並列ループを含むコードの第２セクションに変換するロジック５０８、当初のシーケンシャルループの１つまたは複数の繰り返しを、並列ループ内のトランザクションのうちの個々の１つの中に置くロジック５１０、当初のシーケンシャルループの実行順と整合性が取れた所定のコミット順を用いてトランザクションをコミットすることにより、当初の入力対出力マッピングを維持するロジック５１２、当初のシーケンシャルループがデータを修正する動作を含むとき、コミットアービトレータを使用して並列ループにおける競合を検知し対処するロジック５１４、当初のシーケンシャルループのコンパイラ解析を実施することなくコードの上記第２セクションを作成するロジック５１５、（ヒューリスティックス（経験則）、コードの第１セクションにおけるユーザ定義の注釈、などを用いて）上記当初のシーケンシャルループは並べ替えを受け付けないと判断するときは当初のシーケンシャルループの実行順序に左右されない順序でトランザクションがコミットするのを許可する方法でコードのその第２セクションを作成するロジック５１６、少なくとも上記トランザクションのうち一部は並行して実行されるように、コードの上記第２セクションを生成するロジック５１７、異なるスレッド上で実行されているトランザクションのうち少なくともいくつかと共に、上記トランザクショナルメモリシステムを使用してコードの第２セクションを実行するロジック５１８、および当該アプリケーションをオペレーションするための他のロジック５２０を含む。１つの実施において、プログラムロジック５０４は、プログラムロジック５０４におけるプロシージャに対する単一呼出を用いるなど、別のコンピュータからプログラム的に呼び出されるよう動作することができる。
【００４４】
ここで、当初のシーケンシャルループを並列ループに変換することを含むハイレベルステージの１つの実施を示す図１４を参照する。１つの形として、図１４の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点５５０において始まり、シーケンシャルループの繰り返しの各々（または繰り返しの連続ストリップ）をもとに（例えば、それぞれの作業項目を含む）個々のトランザクションを作成することにより、当初のシーケンシャルループを、所定のコミット順にしたがって当初のシーケンシャルループの当初の実行と整合性が取れたコミット順を遵守する並列ループに変換すること（ステージ５５２）を伴う。別の実施においては、繰り返し毎に１つのトランザクションを作成することは余りに犠牲が大きい場合に、繰り返しの連続ストリップ（例えば、隣接するもの）を１つのトランザクションにまとめてグループ化することができる（ステージ５５２）。このシステムは、当初のシーケンシャルループのコンパイラ解析を実行することなく並列ループを生成する（ステージ５５４）。次いで、異なるスレッドに割り当てられている上記個別のトランザクションの少なくともいくつかを用いて、それらが並列に実行するように、上記並列ループを実行する（ステージ５５６）。この処理は終点５５８において終了する。
【００４５】
図１５は、所定のコミット順処理を使用して、並列ループ内のトランザクションは適切な順序でコミットされることを確認することを含むステージの１つの実施を示す。１つの形として、図１５の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点５７０において始まり、当初のシーケンシャルループを、所定のコミット順処理にしたがう並列ループに変換すること（ステージ５７２）を伴う。このシステムは、並列ループ内のトランザクション毎にコミット順番号を割り当てる（または、そのトランザクションをコミットする順序を追跡する別の適切な方法を用いる）（ステージ５７４）。並列ループを実行しているとき、このシステムは、その所定のコミット順処理を使用して、それぞれのトランザクションを、並列ループの先行の繰り返し（iteration）が首尾良くコミットした後でのみ、完了することができることを確実にする（例えば、そのトランザクションのコミット順が、そのトランザクションはコミットすることができると示すまで、そのトランザクションを待たせる）(ステージ５７６)。この処理は終点５７８において終了する。
【００４６】
図１６は、コミットアービトレータを使用して、並列ループが実行している間に生じる衝突を検知して対処することを含むステージの１つの実施を示す。１つの形として、図１６の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点６００において始まり、当初のシーケンシャルループを、所定のコミット順処理を用いて正しい順序付けを確実にする並列ループに、変換すること（ステージ６０２）を伴う。このシステムは、その並列ループを実行する（ステージ６０４）。このシステムは次いで、同一データ要素を（例えば、スレッド安全性が欠けているとの理由で、順序付け要件の理由で、などで）修正しようとする個々のトランザクションの１つ以上（例えば、ループ繰り返し）を、上記並列ループが含むことを検知する（ステージ６０６）。コミットアービトレータを使用して、順番通りでない実行を検知し、先行トランザクションが完了次第に後続トランザクションの再実行の手続を取るなどにより、上記並列ループを実行する間に生じる衝突を検知して処理する（ステージ６０８）。この処理は終点６１０において終了する。
【００４７】
図１７は、コミットアービトレータを使用して、並列ループを実行している間に生じる処理されない例外を検知して対処することを含むステージの１つの実施を示す。１つの形として、図１７の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点６３０において始まり、当初のシーケンシャルループを、トランザクションを用いて当初の入力対出力マッピングを維持し安全性を向上させる並列ループに変換すること（ステージ６３２）を伴う。このシステムはその並列ループを実行して（ステージ６３４）、並列ループを実行している間に特定のトランザクションに生じる処理されない例外を検知する（ステージ６３６）。その特定のトランザクションおよびその特定のトランザクションの先行トランザクションがあればそれにより行われた状態変更をコミットする（ステージ６３８）。後続トランザクションの何れかによりその特定のトランザクションに対し推論的に行われた状態変更を、それらのトランザクションをロールバック（後退）させることにより廃棄する（ステージ６４０）。処理は終点６４２において終了する。
【００４８】
図１８Ａ〜図１８Ｂは、当初のシーケンシャルループから並列ループへの模範的な変換についての仮想のソースコードを示す。図１８Ａはｆｏｒ・・・ｅａｃｈループ６５２を含む当初のシーケンシャルループ６５０を示すが、別の形式のループ構造も使用することができることは理解されるであろう。ループにおける繰り返し毎に１つまたは複数のステートメント６５４が実行される。図１８Ｂは、ここに説明する手法のうち一部を使用して並列ループ６６０に変換した後、シーケンシャルループが呈する様相の仮想の例を示す。図示の事例においては、当初のシーケンシャルループ６６４の繰り返し毎に個々のトランザクションを創出することにより、並列ループを生成する。別の実施においては、繰り返し毎に１つのトランザクションを作ることは犠牲が多過ぎると思われる場合に、繰り返しの連続ストリップ（例えば、隣接するもの）をトランザクションの中にまとめてグループにすることができる。このとき個々のトランザクションの各々は、当初のループにおいてステートメント６６７として含まれていた作業を実行するため、新しい作業項目を作成する。個々のクラス６６２を使用して作業項目繰り返しを宣言することができる。その個々のトランザクションは次いで、異なるスレッドに割り当てられるのでそれらは並行して実行することができる。
【００４９】
図１９は、クローズドエンドシーケンシャルループを並列ループに変換することを含むステージの１つの実施を示す。１つの形として、図１９の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点６７０において始まり、トランザクショナルメモリシステムを提供すること（ステージ６７２）を伴う。このシステムは、当初のシーケンシャルループを含むコードの第１セクションを解析して、当初のシーケンシャルループが実行するだろう繰り返し定数を（例えば、ループ終了を判断するために使用する定数を検索することにより）決定する（ステージ６７４）。当初のシーケンシャルループを含むコードの第１セクションを、繰り返しの定数までトランザクションを生成することのできる並列ループを含むコードの第２セクションに変換する（ステージ６７６）。このシステムは、異なるスレッドに割り当てられているトランザクションのうち少なくともいくつかと共に、それらが並行して実行するように、上記トランザクショナルメモリシステムを使用してコードの第２セクションを実行する（ステージ６７８）。このシステムは、所定のコミット順処理を用いて、そのトランザクションを正しい順序でコミットする（例えば、各トランザクションはそれぞれの誘導変数カウンタをコミット連続番号として使用するところで）（ステージ６８０）。この処理は終点６８２において終了する。
【００５０】
１つの実施において、図１９に記述する変換処理は、誘導変数をループ本体自体には決して書き込まないループのためにのみ使用する。言い換えると、ループは、そのループ本体における誘導変数に書き込むことにより、若しくは誘導変数のアドレスを採用しそれを用いて書き込みに導く何か（ファンクションに渡す、それを擬似する、など）をすることにより、不適格となることがある。
【００５１】
図２０は、スペキュレーションパイプラインを使用して、オープンエンドシーケンシャルループを並列ループに変換することを含むステージの１つの実施を示す。１つの形として、図２０の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点７００において始まり、トランザクショナルメモリシステムを提供すること（ステージ７０２）を伴う。このシステムは、当初のオープンエンドシーケンシャルループを含むコードの第１セクションを、（例えば、少なくともいくつかのトランザクションが並行して実行するように）、スペキュレーションパイプラインの繰り返し毎の作業項目それぞれを含む個々のトランザクションを生成する動作をすることのできる並列ループを含むコードの第２セクションに変換する（ステージ７０４）。コードのその第２セクションは、そのオープンエンドシーケンシャルループのコンパイラ解析を実行することなく、生成される（ステージ７０６）。このシステムは、異なるスレッドに割り当てられているトランザクションのうち少なくともいくつかと共に、それらが並行して実行するように、上記トランザクショナルメモリシステムを使用してコードの第２セクションを実行する（ステージ７０８）。そのトランザクションを（例えば、オープンエンドシーケンシャルループの実行順と整合性がとれた）所定のコミット順でコミットすることにより、当初の入力対出力マッピングは維持される（ステージ７１０）。この処理は、終点７１２において終了する。
【００５２】
図２１は、オープンエンドシーケンシャルループから生成された並列ループを実行することを含むステージの１つの実施を示す。１つの形として、図２１の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点７３０において始まり、オープンエンドシーケンシャルループ（例えば、ｗｈｉｌｅループ、ｄｏｗｈｉｌｅループ、ｆｏｒループ、など）から生成される並列ループにおいて実行すべき繰り返しの回数を見積もるスペキュレーションパイプラインを生成すること（ステージ７３２）を伴う。１つの実施において、このシステムは、そのスペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを生成する（ステージ７３４）。別の実施例において、繰り返し毎に１つのトランザクションを作ることは犠牲が多過ぎると思われる場合などに、このシステムは、繰り返しの連続ストリップ（例えば、隣接するもの）をもとに、それらをトランザクションの中にまとめてグループ化する（ステージ７３４）。このシステムは、上記個々のトランザクションを、それらが並行して実行するように、異なるスレッドに割り当てる（７３５）。このシステムは、それぞれの作業項目毎に終了条件を評価する（ステージ７３６）。そのそれぞれの作業項目のうちの特定の１つが、上記並列ループを終了する時期に到達したと判定するときには、先行者をコミットして、後継者を廃棄する（ステージ７３８）。この処理は終点７４０において終了する。
【００５３】
図２２は、オープンエンドシーケンシャルループから生成された並列ループ内の各作業項目を適切な順序でコミットさせることを確実にすることを含むステージの１つの実施を示す。１つの形として、図２２の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点７６０において始まり、それぞれのトランザクションにおけるそれぞれの作業項目各々を実行しながら、現在の繰り返し値を取り出すこと（ステージ７６２）を伴う。１つの実施において、現在の繰り返し値は、それぞれの作業項目各々がアクセスすることのできる値を、極小の増分（atomic increment）を実行することにより取り出す（ステージ７６２）。このシステムは、それぞれの作業項目各々の現在の繰り返し値を、所定のコミット順処理におけるコミット連続番号として使用する（ステージ７６４）。このシステムは、そのオープンエンドシーケンシャルループの当初の実行と整合性が取れたコミット順を達成する（ステージ７６６）。この処理は終点７６８において終了する。
【００５４】
図２３は、スペキュレーションパイプラインを計算してその並列ループの中に幾つの繰り返しを含むかを決定することを含むステージの１つの実施を示す。１つの形として、図２３の処理は、計算装置１００のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点７９０において始まり、このシステムが、並列ループを実行するコンピュータ上の利用可能な処理装置の数に少なくとも基づいて、スペキュレーションパイプラインの初期値を作成すること（ステージ７９２）を伴う。１つの実施において、ＣＰＵ束縛作業を行うのに費やす作業負荷を時間率で割った処理装置の数に基づいて、スペキュレーションパイプラインの初期値を生成する（ステージ７９２）。幾多の他の計算も利用可能である。その初期値を用いて、その並列ループの特定の実行のために作成される、上記並列ループの繰り返し数が幾つであるかを決定する（ステージ７９４）。このシステムは、適応的統計データを用いて、その並列ループの以後の実行のためにそのスペキュレーションパイプラインを調整することができる（例えば、経歴を用いてそのループの予想所要時間をさらに良く決定する、作業項目がブロックするとき柔軟に調整する、などで）（ステージ７９６）。この処理は終点７９８において終了する。
【００５５】
図２４Ａ〜図２４Ｂは、当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想のソースコードを示す。用語「オープンエンドシーケンシャルループ」は、ここで使用するとき、その繰り返し数が未知であるシーケンシャルループを含むことを意味する。図２４Ａを参照すると、当初のオープンエンドシーケンシャルループ８１０が示されている。このループは、条件が真である間（例えば、図示の事例ではＰ＝ｔｒｕｅである間）一定のステートメントを実行するｗｈｉｌｅループである。図２４Ｂは、その当初のシーケンシャルループが並列ループ８２０に変換された後の様相を示す。図２４Ｂの仮想のコードに示すように、スペキュレーションパイプラインの繰り返し毎に、並行して実行する作業項目が生成される。１つの実施においては、このため標準ワークスチーリングキュー（standard work stealing queue）を使用することができる。ｃｕｒｒｅｎｔＩｔｅｒａｔｉｏｎと呼ばれる共有変数は、各作業項目にアクセスすることができる。各作業項目が実行するにつれ、標準ｃｏｍｐａｒｅ−ａｎｄ−ｓｗａｐハードウェア命令または別の機構のように、ｃｕｒｒｅｎｔＩｔｅｒａｔｉｏｎに極小の増分を実行して、それ自体の繰り返し値をフェッチ(fetch)する。これは、１つの繰り返しは何れも単一の作業者（worker）により処理されること、およびトランザクションがループの繰り返しのうち１つを実行し始める順序を決定することを保証する。これは次いで、トランザクションのコミット連続番号となり、繰り返しは先行者と後継者の間で正しい順序で直列化可能であることを保証する。各作業項目は、そのループ構造が命令する通りに、Ｐまたは作業の前または後に終了条件を適用することができるものは何でも、評価する（例えば、図２４Ｂに示す「ｗｈｉｌｅ」の場合は前であるが、ｄｏ−ｗｈｉｌｅの場合は「後」）。作業者の１つが、終了する時期であることを認識すると、先行者全部はコミットし、次いで後継者全部を廃棄しなければならない。
【００５６】
ここに説明する例は、各種の技術および手法を用いてコミット順序付けを実施することについて述べたけれども、トランザクションはコミットアービトレータを全く有しないことに注意しなければならない。トランザクションがコミットアービトレータを全く有しないこのような場合は、通常の無秩序なコミットが生じる。
【００５７】
主題事項を、構造的特性および／または方法論的行動に特定の言語を用いて記述したけれども、添付の請求項に定義する主題事項は、上述の具体的な特性または行動に必ずしも限定されるものではないことは理解されなければならない。むしろ、上述の具体的な特性および行動は、請求項の実施の模範的な形態として開示されているものである。ここに記述する通りのおよび／または以下の請求項による実施の思想の範囲内に入る等価物（均等物）、変更および修正のすべては、保護されることが望まれる。
【００５８】
例えば、コンピュータソフトウェアの当業者は、ここに説明した例示において記述したような、クライアントおよび／またはサーバアレンジメント、ユーザインターフェイス画面コンテンツ、および／またはデータレイアウトは、１つまたは複数のコンピュータの上で異なって組織され、上記例示において描写したより少ないまたは多いオプションまたは機能を含むことができることを、認識するであろう。
【図１】
2014146355.tif 000003
【図２】
2014146355.tif 000004
【図３】
2014146355.tif 000005
【図４】
2014146355.tif 000006
【図５】
2014146355.tif 000007
【図６】
2014146355.tif 000008
【図７】
2014146355.tif 000009
【図８】
2014146355.tif 000010
【図９】
2014146355.tif 000011
【図１０】
2014146355.tif 000012
【図１１】
2014146355.tif 000013
【図１２】
2014146355.tif 000014
【図１３】
2014146355.tif 000015
【図１４】
2014146355.tif 000016
【図１５】
2014146355.tif 000017
【図１６】
2014146355.tif 000018
【図１７】
2014146355.tif 000019
【図１８Ａ】
2014146355.tif 000020
【図１８Ｂ】
2014146355.tif 000021
【図１９】
2014146355.tif 000022
【図２０】
2014146355.tif 000023
【図２１】
2014146355.tif 000024
【図２２】
2014146355.tif 000025
【図２３】
2014146355.tif 000026
【図２４Ａ】
2014146355.tif 000027
【図２４Ｂ】
2014146355.tif 000028
【手続補正書】
【提出日】平成26年4月24日(2014.4.24)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータ実装方法であって、
トランザクショナルメモリシステムを提供するステップ（２４２）と、
１または複数のコミットアービトレーターを提供するステップ（２７２）と、
競合管理処理を提供するステップ（３７２）と、
繰り返しの回数が未知であるシーケンシャルループ（８１０）を含むコードの第１セクションを、並列ループ（８２０）を含むコードの第２セクションに変換するステップ（５０８）であって、
前記並列ループが複数のトランザクションを含み、
前記コードの第１セクションが、前記シーケンシャルループの繰り返しの内１または複数を前記並列ループにおける前記トランザクションの内個々の１つに置くこと（５１０）によって、前記コードの第２セクションに変換され、
前記複数のトランザクションが、複数のトランザクショングループに分割され、
各前記トランザクショングループが前記１または複数のコミットアービトレーターの内１つによって管理されるトランザクションと該トランザクションの入れ子チルドレンとを含み、
前記コミットアービトレーターが、相互に関しトランザクションの適切な順序を決定するために用いられる１または複数の順序付け値を追跡および更新する（２７４）
ステップと、
異なるスレッド上で実行された個々のトランザクションの内少なくとも幾らかと共に、前記トランザクショナルメモリシステムを用いて前記コードの第２セクションを実行するステップ（５５６）と、
第１のトランザクションと第２のトランザクションとの間で衝突が発生するときに、前記競合管理処理を呼び出すステップであって、
前記第１トランザクションおよび前記第２トランザクションが同一のトランザクショングループの一部であり（３７６）、且つネスト化されたトランザクションが呼び出された（２８０）ときに、前記第１トランザクションにおける最上位祖先の順序値が前記第２トランザクションにおける最上位祖先の順序値と比較され（３８２）、
より低い順序値を有する祖先に関連するトランザクションが先に進むことを許される（３８６）
ステップと
を含む、コンピュータ実装方法。
【請求項２】
前記コードの第２セクションが、前記トランザクションのうち少なくとも幾らかを並行して実行するように生成されることを特徴とする、請求項１に記載のコンピュータ実装方法。
【請求項３】
前記コードの第２セクションが、前記シーケンシャルループのコンパイラ分析を実行することなく生成されること（７０６）を特徴とする、請求項１に記載のコンピュータ実装方法。
【請求項４】
当初の入力対出力のマッピングが、前記トランザクションを所定のコミット順序でコミットすることにより維持されること（５１２）を特徴とする、請求項１に記載のコンピュータ実装方法。
【請求項５】
前記所定のコミット順序が、前記シーケンシャルループの実行順序と整合性が取れていること（５１２）を特徴とする、請求項４に記載のコンピュータ実装方法。
【請求項６】
請求項１に記載のコンピュータ実装方法であって、前記並列ループを実行するステップが、
前記並列ループにおいて実行すべき繰り返しの回数を見積もるステップ（７３２）と、
複数の個々のトランザクションを生成するステップ（７３４）であって、各トランザクションが前記並列ループの１または複数の繰り返しに対応する作業項目を含む、ステップと、
異なるスレッド上で、前記個々のトランザクションの内少なくとも幾らかを実行するステップ（７３５）と、
それぞれの作業項目毎に終了条件を評価するステップ（７３６）と、
前記それぞれの作業項目における特定の１つが前記並列ループを終了する時期に到達したと判定するときには、前記それぞれの作業項目のうちの前記特定の１つの先行者をコミットして後継者を廃棄するステップ（７３８）と
を含むことを特徴とする、コンピュータ実装方法。
【請求項７】
それぞれの作業項目を実行しながら、現在の繰り返し値を読み出すこと（７６２）を特徴とする、請求項６に記載のコンピュータ実装方法。
【請求項８】
それぞれの作業項目毎の前記現在の繰り返し値が、所定のコミット順序処理において、コミット連続番号として使用されること（７６４）を特徴とする、請求項７に記載のコンピュータ実装方法。
【請求項９】
前記現在の繰り返し値が、それぞれの作業項目毎にアクセス可能な値の極小の増分を実行することにより読み出されることを特徴とする、請求項７に記載のコンピュータ実装方法。
【請求項１０】
前記シーケンシャルループの当初の実行と整合性が取れているコミット順序が達成されること（７６６）を特徴とする、請求項６に記載のコンピュータ実装方法。
【請求項１１】
前記シーケンシャルループがｗｈｉｌｅループであるか、
前記シーケンシャルループがｄｏ ｗｈｉｌｅループであるか、または、
前記シーケンシャルループがｆｏｒループである
ことを特徴とする、請求項６に記載のコンピュータ実装方法。
【請求項１２】
前記並列ループの繰り返しの初期値が、前記並列ループを実行するコンピュータ上で利用可能な処理装置の数に少なくとも部分的に基づいて計算されること（７９２）を特徴とする、請求項６に記載のコンピュータ実装方法。
【請求項１３】
経歴を用いて、前記並列ループの後の実行のために、前記ループの予想所要時間と前記並列ループの繰り返しの回数を調整すること（７９６，７９４）を特徴とする、請求項６に記載のコンピュータ実装方法。
【請求項１４】
請求項１〜１３のいずれか一項に記載の各ステップをコンピュータに実行させるためのコンピュータ実行可能命令を有することを特徴とする、コンピュータ読取可能記憶媒体。