JP2014146355A - トランザクションを用いるシーケンシャルフレームワークの並行化 - Google Patents

トランザクションを用いるシーケンシャルフレームワークの並行化 Download PDF

Info

Publication number
JP2014146355A
JP2014146355A JP2014061450A JP2014061450A JP2014146355A JP 2014146355 A JP2014146355 A JP 2014146355A JP 2014061450 A JP2014061450 A JP 2014061450A JP 2014061450 A JP2014061450 A JP 2014061450A JP 2014146355 A JP2014146355 A JP 2014146355A
Authority
JP
Japan
Prior art keywords
loop
transaction
commit
transactions
parallel
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2014061450A
Other languages
English (en)
Other versions
JP5813165B2 (ja
Inventor
Joseph Duffy John
ジョセフ ダフィー ジョン
Joseph Gray John
ジョセフ グレイ ジョン
Levanoni Yosseff
レバノーニ ヨセフ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014146355A publication Critical patent/JP2014146355A/ja
Application granted granted Critical
Publication of JP5813165B2 publication Critical patent/JP5813165B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】シーケンシャルループを、トランザクショナルメモリシステムで使用するために、並列ループに変換する。
【解決手段】オープンエンドおよび/またはクローズドエンドのシーケンシャルループを、並列ループに変換することができる。当初のシーケンシャルループを含むコードのセクションを解析して、当初のシーケンシャルループについての繰り返し定数を決定する。当初のシーケンシャルループを、繰り返し定数までの数だけトランザクションを発生することのできる並列ループに変換する。オープンエンドシーケンシャルループは、それぞれの作業項目を含む個々のトランザクションを、各スペキュレーションパイプラインの繰り返し毎に発生する並列ループに変換することができる。その並列ループは次いで、異なるスレッド上で実行される個々のトランザクションのうち少なくともいくつかと共に、前記トランザクショナルメモリシステムを用いて実行される。
【選択図】図1

Description

本発明は、トランザクションを用いるシーケンシャルフレームワークの並行化に関する。
ソフトウェアトランザクショナルメモリ(STM)は、並行計算作業において共有メモリに対するアクセスを制御するためのデータベーストランザクションに類似した並行処理制御機構である。トランザクショナルメモリの文脈におけるトランザクションは、共有メモリに対する一連の読取書込を実行するコード1個である。STMは、在来のロック機構の代替として使用される。プログラマが(例えば、アトミック(分割不可能な単位)で)宣言型注釈をコードブロックの周りに置いてそれらが必要とする安全属性を示すと、システムは、このブロックは他の保護コード領域に関してアトミックに実行(分割不可能な単位として実行)されることを、自動的に保証する。そのソフトウェアトランザクショナルメモリプログラム作成モデルは、ロックに基づく優先順位逆転およびデッドロック問題を防止する。
典型的STMシステムには、多くの利点があるが、それでも、プログラマは、意図しないメモリアクセス順序付けを注意深く避けることを要求される。例えば、トランザクションをコミットする(即ち、コミット処理の)順序は、典型的STM環境においては拘束を受けない。トランザクションはコミットしようと互いに競争する。このことは、トランザクション1がトランザクション2の前にコミットするか後にコミットするかは、しばしばプログラムの動的スケジューリングの産物である(そしてしばしばプログラム特有のロジックの産物でもある)ことを意味する。その上、メモリの同一片に書込をしようとするように、2つのトランザクションが衝突するとき、それらのコミット順は、可能な多数の競合管理方針のうち1つに基づいて任意に決定することができる。これら筋書きの双方において、特定のコミット順は保証されない。したがって、自分のプログラムが何らかの順で正しく働くことを確認することはプログラマの双肩に掛かっている。これは並行プログラム作成を極めて困難にする。
実行の順序が重要であり、並行性が極めて魅力的である1つの筋書きは、ループの多重繰り返しを並行して実行するときである。下記のような古典的なfor・・・eachループを取り上げる。
ForEach(string s in List<string>)

S;
ループの各繰り返しの間、ループ本体におけるステートメントSが実行される。このようなループは、二番目の繰り返しの始まる前にループの最初の繰り返しを終了させるなど、順次実行するために書かれていた。このようなシーケンシャルループを、起こりうる副次効果または順序依存性に対処する特別な注意を払うことなく並行して実行すると、予期しない結果を生じることがある。
トランザクショナルメモリシステム内のトランザクションに対して順序付けを適用するため、各種の技術および手法を開示する。トランザクショナルメモリシステムは、複数のトランザクションについて所定のコミット順を指定することができる機能を提供する。その所定のコミット順は、実行時に、そのトランザクショナルメモリシステム内のそのトランザクションをコミットする順序を決定するのに使用される。1つの実施において、その所定のコミット順は全体の順序付けまたは部分的順序付けの何れかにすることができる。全体の順序付けの場合、そのトランザクションは、線形順序でコミットすることを強制される。部分的順序付けの場合、そのトランザクションは、許容可能な筋書きのうち1つでコミットすることができる。1つの実施において、コミットアービトレータが、次にコミットが許されるべきトランザクションをあらわす次回コミット値を追跡し続けており、特定のトランザクションがコミットする準備が整ったとき、そのコミット順番号がコミットアービトレータの次回コミット値と一致しているならば、コミットすることを許される。
第1トランザクションと第2トランザクションとの間に衝突が生じたとき、競合管理処理が呼び出される。その競合管理処理においては上記所定のコミット順を用いて、その第1トランザクションとその第2トランザクションの何れが衝突に勝って先に進むことを許されるかの決定を助ける。
トランザクショナルメモリシステムと共に使用するための、シーケンシャルループを並列ループに変換するための手法を開示する。トランザクショナルメモリに基づくシステムを提供する。当初のシーケンシャルループを含むコードの第1セクションを、トランザクションを用いて当初の入力対出力マッピングを維持する並列ループを含むコードの第2セクションに変換する。例えば、当初のシーケンシャルループは、当初のシーケンシャルループの各繰り返しをもとに所定のコミット順処理にしたがう個々のトランザクションを作成し、次いでそのトランザクションを、並行して実行されるように異なるスレッドに割り当てることにより、並列ループに変換することができる。並列ループを実行する間の特定のトランザクションの中から処理されない例外(unhandled exception)を発見すると、その特定のトランザクションおよび、もしあれば先行トランザクションをコミットすることにより、状態変更を行い、後続トランザクションの何れかにより行われる状態変更を廃棄する。さもなければ、すべてのトランザクションをコミットする。
1つの実施において、オープンエンドおよび/またはクローズドエンドのシーケンシャルループを並列ループに変換することができる。例えば、当初のシーケンシャルループを含むコードのセクションを解析して、その当初のシーケンシャルループのために繰り返しの定数を決定する。その当初のシーケンシャルループは、その繰り返しの定数までの個数のトランザクションを発生することのできる並列ループに変換される。別の例として、オープンエンドシーケンシャルループは、スペキュレーションパイプラインの各繰り返し当たりの作業項目それぞれを含む個々のトランザクションを発生する並列ループに変換することができる。これらのトランザクションには異なるスレッドを割り当てて、並列ループの少なくとも一部は並行して実行可能にする。その並列ループはこのとき、所定のコミット順の効能を有するトランザクショナルメモリシステムの保護の下で実行される。
1つの実施において、オープンエンドのシーケンシャルループから作成された並列ループを実行する方法を提供する。オープンエンドのシーケンシャルループから作成される並列ループにおいて実施すべき繰り返し数を見積もるスペキュレーションパイプラインを作成する。上記システムは、そのスペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを作成する。これら個々のトランザクションは次いで、異なるスレッドに割り当てられ、結局それらが並行して実行される結果になる。それぞれの作業項目毎に終了条件を評価する。それぞれの作業項目のうちの特定の1つがその並列ループを終了する時期に達したと判定するとき、先行のものはコミットされ、後続のものは廃棄される。
本概要は、詳細な説明において下記に更に詳細に記述する概念の要点を簡略形で紹介するために提供されたものである。本概要は、請求する主題の重要特徴または不可欠特徴を特定することを目的とはせず、請求主題の範囲決定における補助として使用されることを目的としてもいない。
1つの実施のコンピュータシステムの概略図である。 図1のコンピュータシステム上で作動する1つの実施のトランザクショナルメモリアプリケーションの概略図である。 図1のシステムの1つの実施のためのハイレベル処理の流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、コミットアービトレータを使用して所定のコミット順を実施することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、コミットアービトレータを使用して複数のトランザクションの全体の順序付けを実施することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、コミットアービトレータを使用して複数のトランザクションの部分的順序付けを実施することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、所定のコミット順の情報を使用して、競合を管理する競合管理処理を提供することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、所定のコミット順の情報を使用して入れ子トランザクションとの競合を管理する競合管理処理を提供することを含むステージを示す流れ図である。 共通祖先を持つ最高順位の祖先による模範的な系図を示すロジック図である。 共通祖先を持たない最高順位の祖先による模範的な系図を示すロジック図である。 図1のシステムの1つの実施のための処理の流れ図であって、トランザクショナルメモリシステム内のコミットアービトレータを使用することにより、無駄な作業の量を減少することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、競合管理処理において系図全体を解析して適切な競合解消策を決定することを含むステージを示す流れ図である。 図1のコンピュータシステムの上で働く1つの実施のトランザクショナルメモリアプリケーションの概略図である。 図1のシステムの1つの実施のための処理の流れ図であって、当初のシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、所定のコミット順処理を使用して、並列ループ内のトランザクションは適切な順序でコミットされることを確認することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、コミットアービトレータを使用して、並列ループが実行している間に生じる競合を検知して対処することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、コミットアービトレータを使用して、並列ループを実行している間に生じる処理されない例外(unhandled exception)を検知して対処することを含むステージを示す流れ図である。 当初のシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。 当初のシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。 図1のシステムの1つの実施のための処理の流れ図であって、クローズドエンドシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、スペキュレーションパイプラインを使用して、オープンエンドシーケンシャルループを並列ループに変換することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、オープンエンドシーケンシャルループから作成された並列ループを実行することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、オープンエンドシーケンシャルループから作成された並列ループにおける各作業項目を適切な順序でコミットさせていることを確認することを含むステージを示す流れ図である。 図1のシステムの1つの実施のための処理の流れ図であって、スペキュレーションパイプラインを計算して並列ループの中に幾つの繰り返しを含むかを決定することを含むステージを示す流れ図である。 当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。 当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想ソースコードを示す図である。
本発明の原理の理解を促進する目的のために、ここで図面に示す実施例を参照し、特定の言語を用いてそれを記述する。とは言っても、それによる範囲の限定は意図されていないことは理解されるであろう。記述する実施例における代替案および追加の変更、およびここに記述するような原理のさらなる応用は何れも、当業者にとっては普通に思い浮かぶはずのものである。
このシステムは、トランザクショナルメモリシステムとしての一般的文脈で記述するが、このシステムはこれらに加えて別の目的にも役立つ。1つの実施において、ここに記述する1つまたは複数の手法は、MICROSOFT(登録商標).NETフレームワークのようなフレームワークプログラムの範囲内の特性として、またはソフトウェアアプリケーションを開発する開発者のためのプラットホームを提供する任意の別の型のプログラムまたはサービスが備える特性として実施することができる。別の実施において、ここに記述する手法の1つ以上が、同時実行環境において実行するアプリケーションの開発を扱う別のアプリケーションの伴う特性として実施される。
1つの実施においては、複数のトランザクションについて、所定のコミット順を指定することができる機能を、トランザクショナルメモリシステムの中に備える。所定のコミット順は、トランザクションをコミットする順序の決定を助けることに使用される。1つの実施例において、競合管理処理は、第1トランザクションと第2トランザクションとの間に衝突を生じるときに呼び出される。次いでその所定のコミット順を競合管理処理において使用して、第1トランザクションまたは第2トランザクションが競合に勝って先に進むことを許されるべきかどうかを決定するのを助ける。
別の実施において、当初のシーケンシャルループを並列ループに転換する機能を、トランザクショナルメモリシステムの中に提供する。当初のシーケンシャルループは、当初の入力対出力マッピングは維持されることを保証する方法で、並列ループに転換される。用語「当初の入力対出力マッピングは維持される」は、ここで使用するとき、並行化ループ実行の後のプログラムの状態は、代わりにシーケンシャルループが働いたときと全く同様であることを意味する。1つの実施において、当初のシーケンシャルループの各繰り返しをトランザクションの中に置き、次いでここに記述する所定のコミット順処理を用いてそのトランザクションは適切な順序でコミットすることを確認することにより、並列ループにおいて当初の入力対出力マッピングは維持される。
ここで明確にする例の多くは、ソフトウェアトランザクショナルメモリシステムの文脈で記述するけれども、他の実施において、ここに明確にする幾つかの、すべての、または、さらなる追加の機能および/または手法は、ソフトウェアトランザクショナルメモリシステムとは別個にまたは併せての何れでも、ハードソフトウェアトランザクショナルメモリシステムを用いて実施することができることは理解されるであろう。
図1に示すように、このシステムの1つまたは複数の部分を実施するために使用する模範的なコンピュータシステムは、計算装置(コンピューティングデバイス)100のような計算装置を含む。その最も基本的な構成において、計算装置100は典型的に、少なくとも1つの処理装置102およびメモリ104を含む。計算装置の正確な構成および型により、メモリ104は、(RAMのような)揮発性、(ROM、フラッシュメモリなどのような)不揮発性、またはその2つの何らかの結合である。この最も基本的な構成を図1に破線106で示す。
加えて、計算装置100は、さらなる特性/機能性をも有する。例えば、装置100は、これらに限定はされないが磁気的または光学的ディスクまたはテープを含む追加の記憶装置(取り外し可能なおよび/または取り外しができない)をも含む。このような追加記憶装置は、取り外し可能な記憶装置108および取り外しができない記憶装置110により図1に示している。コンピュータ記憶媒体は、コンピュータ読取可能命令、データ構造体、プログラムモジュールまたは他のデータのような情報ストレージのため任意の方法または手法で実施される揮発性および不揮発性、取り外し可能なおよび取り外しができない、の媒体を含む。メモリ104、取り外し可能な記憶装置108および取り外しができない記憶装置110はすべて、コンピュータ記憶媒体の例である。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多目的ディスク(DVD)、または他の光学的記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、若しくは所望の情報の記憶に使用することができて装置100がアクセスすることのできる他の媒体の何れをも含むが、これらに限定はされない。このようなコンピュータ記憶媒体は装置100の一部であることがある。
計算装置100は、計算装置100が他のコンピュータ/アプリケーション115と連絡可能にする1つまたは複数の通信接続114を備える。装置100は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、などのような、入力装置112をも有する。ディスプレイ、スピーカ、プリンタ、などのような出力装置111も含むことができる。これらの装置は技術的によく知られているので、ここで長々と論じる必要はない。1つの実施において、計算装置100は、トランザクショナルメモリアプリケーション200を含む。トランザクショナルメモリアプリケーション200は、図2においてさらに詳細に記述する。
ここで図1に対する参照を続けると共に、図2に転じて、計算装置100の上で作動するトランザクショナルメモリアプリケーション200を示す。トランザクショナルメモリアプリケーション200は、計算装置100の上に存在するアプリケーションプログラムのうちの1つである。しかしながら、トランザクショナルメモリアプリケーション200は、代わりにまたは追加して1つまたは複数のコンピュータの上および/または図1に示すものとは異なる変換の中にコンピュータ実行可能命令として具体化されることは理解されるであろう。代わりにまたはさらに、トランザクショナルメモリアプリケーション200の1つまたは複数の部分は、別のコンピュータおよび/またはアプリケーション115、若しくはコンピュータソフトウェア技術に携わる人の心に浮かぶ通りの別のこのような変換の上で、システムメモリ104の部分とすることができる。
トランザクショナルメモリアプリケーション200は、ここに記述する手法の幾つかまたは全部を実行することを担当するプログラムロジック204を含む。プログラムロジック204は、トランザクショナルメモリ(STM)システムを提供するロジック206、そのSTMシステム内の複数のトランザクションについて、所定のコミット順を指定可能にするコミットアービトレータを動的または静的に作成するロジック208、そのコミットアービトレータがその所定のコミット順を実行時において使用して、そのトランザクショナルメモリシステム内の複数のトランザクションがコミットする順序を決定するのを助けるロジック210、第1トランザクションと第2トランザクションとの間に衝突が生じたときに呼び出される競合管理処理を提供するロジック212、その所定のコミット順をその競合管理処理において使用して、第1トランザクションまたは第2トランザクションの何れがその競合に勝って先に進むことを許されるかを決定する(例えば、同一トランザクショングループの2つのトランザクションのうちの何れが低いコミット順を有するかによって決める)のを助けるロジック214、そのコミットアービトレータを作動可能にして、その所定の順序付けに使用し1つまたは複数の順序付け値(例えば、全体の順序付けにおいては−複数のトランザクションのうちでコミットすることを許される次のトランザクションを表している次回コミットフィールド)を追跡するため使用可能にするため、および1つまたは複数の順序付け値を所与のトランザクションの特定コミット順番号に対して比較しそのトランザクションのコミットは実行されるべき順序付けを適切に与えられているか否かを調べるロジック216、および当該アプリケーションをオペレーション(運用)するための他のロジック220を含む。1つの実施において、プログラムロジック204は、プログラムロジック204のプロシージャに対する信号呼出を使用するなど、別のプログラムからプログラム的に呼び出される作動をすることができる。
ここで図1〜図2に対する参照を続けると共に、図3〜図10に転じて、トランザクショナルメモリアプリケーション200の1つまたは複数の実施を実行するためのステージをさらに詳細に記述する。図3は、トランザクショナルメモリアプリケーション200のためのハイレベル処理の流れ図である。1つの形として、図3の処理は、少なくとも部分的に計算装置100の運用ロジックにおいて実施される。このプロシージャ(手続き)は、出発点240において始まり、トランザクショナルメモリシステム(例えば、ソフトウェアトランザクショナルメモリシステム)を提供すること(ステージ242)を伴う。複数のトランザクション(即ち、動的または静的に割り当てられた)について所定のコミット順(即ち、全体の順序付けまたは部分的順序付け)を指定可能にする機能を提供する(ステージ244)。用語「所定のコミット順」は、ここで使用するとき、関連トランザクションの特定のグループは、そのトランザクションのラン開始前の何れかの時点で決定した通りにコミットされる明確な順序を含むことを意味する。用語トランザクションの「グループ」は、ここで使用するとき、同一のコミットアービトレータにより管理されるトランザクションの特定のセット(例えば、複数のトランザクション)と同時に、これらトランザクションの入れ子チルドレン(nested children)を含む。
その所定のコミット順を実行時に使用して、そのトランザクショナルメモリシステム内の複数のトランザクションがコミットする順序を決定するのを助ける(ステージ246)。その所定のコミット順を使用して、その複数のトランザクションの2つまたはそれ以上の複数の間で生じる衝突を解決するのを助ける(ステージ248)。処理は終点250において終了する。
図4は、コミットアービトレータを使用して所定のコミット順を実施することを含むステージを示す。1つの形として、図4の処理は、計算装置100のオペレーティングロジックにおいて、少なくとも部分的に実施される。このプロシージャは、出発点270において始まり、トランザクショナルメモリシステム用の、そのコミットアービトレータは、複数のトランザクションについて所定のコミット順を指定させる1つまたは複数のコミットアービトレータを提供すること(ステージ272)を伴う。用語「コミットアービトレータ」は、ここで使用するとき、相互のために順序付けをしなければならない1つまたは複数のトランザクションのグループの管理を担当する任意の型のプログラム、特性、または処理を含むことを意味する。1つの実施において、1つまたは複数のコミットアービトレータは、任意の所与の時期にプログラムにおいて作動することができる。例えば、必要な数のコミットアービトレータを作成して、トランザクションの様々なグループを管理することができる。そのコミットアービトレータは、トランザクションの相互のために適切な順序付けを決定するのに使用する1つまたは複数の順序付け値を追跡して更新する(ステージ274)。全体の順序付けの場合は、複数のトランザクションのうち次にコミットすべき次のトランザクションをあらわず次回コミットフィールドを使用することができる(ステージ274)。部分的順序付けの場合は、可能な様々の順序の有向グラフ(directed graph)を、その順序付け値を使用して追跡する。必要に応じて、そのコミットアービトレータは、その所定のコミット順を使用して、複数のトランザクションそれぞれのためにコミット順番号を与える(ステージ276)。
複数のトランザクションのうちの特定のトランザクションがコミットの準備をするとき、1つまたは複数の順序付け値がそのコミットは適切であることを示していると、そのコミットアービトレータは、そのトランザクションがコミットするのを許可する(ステージ278)。全体の順序付けの場合、次回コミットフィールドと特定のトランザクションについてのコミット順番号とが同一番号を有するとき、この筋書きが生じる。このような筋書きにおいて、そのコミットアービトレータは、そのトランザクションがコミットすることを許し、コミットに成功するときは、次いで次回コミットフィールドを数列の次の番号(例えば、次に高い番号)に増加する(ステージ278)。複数のトランザクションのうちの特定のトランザクションがコミットの準備をするとき、その特定のトランザクションについてのコミット順番号は順序付け値に対して比較するとき、そのコミットは適切でないことが明らかになると、その特定のトランザクションは、先行トランザクションがコミットした後のある時期に解除されるまで保留モードに置く(ステージ280)。全体の順序付けの場合、この保留モードに入るのは、次回コミットフィールドと特定のトランザクションについてのコミット順番号とが同一の値を持っていないときである。
1つの実施において、システムは、その直前の先行者がコミットした後、トランザクションの活動を開始させる。この場合は、それは正しくコミットできる。代わりに、システムは、直前ではない先行者がコミットした後、その直前の先行者が未だコミットしていない場合に、トランザクションの保留を解除し活動開始を選ぶことができる。保留解除の後、システムは、現実にコミットすることがそのトランザクションについて適切であるか否かを点検する。適切ならばそのトランザクションはコミットする。その処理は、終点282において終了する。
図5は、コミットアービトレータを使用して複数のトランザクションの全体の順序付けを実施することを含むステージの1つの実施を示す。1つの形として、図5の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点290において始まり、複数のトランザクションについて所定の全体の順序付けを指定すること(例えば、複数のトランザクションがコミットすべき正確な順序を指定すること)を許すよう動作可能な1つまたは複数のコミットアービトレータを提供すること(ステージ292)を伴う。複数のトランザクションのうちの特定のトランザクションがそのコミット時点に達するとき、そのコミット順を実施するため、その特定のトランザクションのコミット順をそのコミットアービトレータの次回コミットフィールドと比較する(ステージ296)。1つの実施において、このシステムが(明白に衝突が無いとの理由などで)全体の順序付けを実施する必要が無いと決定するときには、全体の順序付け要件は必要に応じて破棄することができ(ステージ294)、処理は終点302において終了する。
コミット順序付けを実施しようとするときで、しかも特定のトランザクションのコミット順がコミットアービトレータの次回コミットフィールドと同一値を有するときは(判定点296)、その特定のトランザクションをコミットし、コミットに成功すると、次回コミットフィールドを増加して、次の後継者があれば、それを解除(awake;起動)させる(ステージ298)。特定のトランザクションのコミット順がコミットアービトレータの次回コミットフィールドと同一値を有しないときは(判定点296)、その特定のトランザクションを、先行トランザクションがコミットした後のちょうどよい時点で解除するまで、保留/休眠モードに置く(ステージ300)。1つの実施においては、その後の時点で、先行者と衝突が起こるときは、その特定のトランザクションは、以上終了し、ロールバックして先行者を前に進めるよう要求される。さもなければ、このような衝突が起こらない場合は、その特定のトランザクションは、ここに記述するコミット順要件に合致すると直ちにコミットすることができなければならない。この処理は終点302において終了する。
図6は、コミットアービトレータを使用して複数のトランザクションの部分的順序付けを実施することを含むステージの1つの実施を示す。1つの形として、図6の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは出発点310において始まり、複数のトランザクションについて所定の部分的順序付けを指定すること(例えば、複数のトランザクションがコミットすべき複数の容認できる順序を(例えば、有向グラフの形で)指定すること)を許す作動をすることのできる1つまたは複数のコミットアービトレータを提供すること(ステージ312)を伴う。複数のトランザクションのうちの特定のトランザクションがそのコミット時点に達するとき、そのコミット順を実施するため、先行トランザクションの状態(例えば、1つまたは複数の順序付け値)を、(例えば、そのコミットアービトレータが追跡する通りの)特定のコミットしているトランザクションに関して調べる(ステージ314)。その特定のトランザクションに対する先行トランザクション全部がコミットし終えているときは(判定点316)、その特定のトランザクションはコミットされる(ステージ318)。コミットに成功すると、コミットアービトレータが追跡する1つまたは複数の値を必要に応じて更新し、もしあれば、可能な次の後継者全部を解除(活動開始)させる(318)。
その特定のトランザクションに対する先行トランザクション全部がコミットし終えていないときには(判定点316)、その特定のトランザクションを、先行トランザクションがコミットした後のちょうど良い時点で解除されるまで保留/休眠モードに置く(ステージ320)。処理は、終点322において終了する。
図7は、その所定のコミット順の情報を使用して競合を管理する競合管理処理を提供することを含むステージを示す1つの実施を示す。1つの形として、図7の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点340において始まり、トランザクションの1つまたは複数のグループについての所定のコミット順をサポートするトランザクショナルメモリシステムを提供すること(ステージ342)を伴う。第1トランザクションと第2トランザクションとの間に競合を生じたときに呼び出される競合管理処理を提供する(ステージ344)。その競合管理処理においてその所定のコミット順を使用して、第1トランザクションまたは第2トランザクションのうちの何れが競合に勝って先に進むことを許されるべきかを決定するのを助ける(ステージ346)。第1トランザクションと第2トランザクションとが同一トランザクショングループの一部でないときには(判定点348)、これら2つのトランザクションの間で、所定のコミット順は (存在しないので) 実施しない(ステージ350)。このような筋書きにおいて、その2つのトランザクションは同一トランザクショングループの中にないので、競合を解決することに順序付け要因は使用されない(ステージ350)。
第1トランザクションと第2トランザクションとが同一トランザクショングループの一部であるときには(判定点348)、このシステムは、第1トランザクションの第1順序番号と第2トランザクションの第2順序番号とを比較する(ステージ352)。より低い順序番号(または別の適切な優先順序付け)を有するトランザクションが先へ進むことを許される(ステージ354)。処理は、終点356において終了する。
図8は、上記所定のコミット順の情報を使用して入れ子トランザクションとの競合を管理する競合管理処理を提供することを含むステージの1つの実施である。1つの形として、図8の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。1つの実施においては、特定のトランザクションをコミットする前に、トランザクション毎に、系図の全体(entire ancestor chain)を考慮に入れるので、その系図の中に順序付けがあればそれを実施する。このプロシージャは、出発点370において始まり、第1トランザクションと第2トランザクションとの間に競合が生じたときに呼び出される競合管理処理を提供すること(ステージ372)を伴う。その競合管理処理において所定のコミット順を使用して、第1トランザクションまたは第2トランザクションのうちの何れがその競合に勝って先に進むことを許されるかを決定するのを助ける(ステージ374)。第1トランザクションと第2トランザクションとが同一トランザクショングループの一部でないときには(判定点376)、これら2つのトランザクションの間で、所定のコミット順は(存在しないので)実施せず(ステージ378)、処理は終点388において終了する。その第1トランザクションと第2トランザクションとが同一トランザクショングループの一部であるときには(判定点376)、このシステムは、入れ子トランザクションを含むか否かを点検する(判定点380)。
入れ子トランザクションを含まないときには(判定点380)、第1トランザクションの順序番号(または他の順序付け表示)と第2トランザクションの順序番号(または他の順序付け表示)とを比較する(ステージ384)。より低い順序番号を有する(または他の適切な判断基準を用いることにより、順序では次であると判定された)トランザクションが先に進むことを許される(ステージ386)。
入れ子トランザクションを含むときには(判定点380)、第1トランザクションの最上位祖先の順序番号(または他の順序付け表示)と第2トランザクションの最上位祖先の順序番号(または他の順序付け表示)とを比較する(ステージ382)。用語「最上位祖先」は、ここで使用するとき、共通祖先が関与する場合は共通祖先の直接の子を含み、共通祖先が関与しない場合は各トランザクションの最高順位の祖先を意味する。共通および共通でない祖先が関与するこれらの筋書きをさらに詳しく図9および図10に示す。より低い順序番号を有するトランザクション(例えば、より低い順序番号または適切な他の判断基準を有していた祖先に関係するトランザクション)が先に進むことを許される(ステージ386)。処理は終点388において終了する。
図9は、共通祖先を有する系図の一例を、最高順位の祖先と共に示すロジック図(論理図)である。図示の事例において、トランザクションAはDおよびEの共通祖先である。DとEとの間に生じる競合において、トランザクションBとC(共通祖先Aの直接の子)の順序番号を解析して、DまたはEの何れが先に進むことを許されるべきかを決定する(図8のステージ382)。
図10は、共通祖先を有しない系図の一例を最高順位の祖先と共に示すロジック図(論理図)である。図示の事例において、トランザクションAはトランザクションCの祖先である。トランザクションDはトランザクションFの祖先である。CとFとの間に生じる競合において、このときはトランザクションAとD(それぞれの最高順位の祖先)の順序番号を比較してトランザクションCまたはFの何れが先に進むことを許されるべきかを決定する(図8のステージ382)。
図11は、トランザクショナルメモリシステム内のコミットアービトレータを使用することにより、無駄な作業の量を減少することを含むステージの1つの実施を示す。1つの形として、図11の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点400において始まり、トランザクショナルメモリシステム用の、複数のトランザクションについて所定のコミット順を指定させる1つまたは複数のコミットアービトレータを提供すること(ステージ402)を伴う。そのコミットアービトレータは、トランザクションを保留/休眠モードに置いて、(例えば、所定のコミット順を解析して正しい順序を判定することにより)先行トランザクションが未だ実行中であるとき、そのトランザクションが再度実行されることを阻止するよう動作できる(ステージ404)。そのコミットアービトレータは、(例えば、再度所定のコミット順を解析して正しい順序を判定することにより)先行者が完了したとき、保留に置かれたトランザクションを解除するよう動作することもできる(ステージ406)。これら阻止と解除の機構を備えることにより、そのコミットアービトレータは、後に取り消さなければならない動作の実行を阻止して、それにより無駄になる作業の量を軽減するのを助ける(ステージ408)。この処理は終点410において終了する。
図12は、競合管理処理において系図の全体を解析して適切な競合解消策を決定することを含むステージを示す。1つの形として、図12の処理は計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点430において始まり、第1トランザクションと第2トランザクションとの間に競合が生じるときに呼び出される競合管理処理を提供すること(ステージ432)を伴う。その競合管理処理において所定のコミット順を使用して、第1トランザクションまたは第2トランザクションのうちの何れがその競合に勝って先に進むことを許されるかを決定するのを助ける(ステージ434)。所定のコミット順の系図の全体を解析して、適切な競合管理を決定するのを助ける(ステージ436)。例えば、BはAの中にネスト化(入れ子に)されており、DはCの中にネスト化されているという、4つのトランザクション、2つの親と2つの子、があるとする。AはCの前にコミットしなければならないというAとCとの間の順序付け関係があると仮定する。BとDとの間に競合が生じると、競合管理処理はBを支持するはずである。AはCの前にコミットしなければならないことを考えると、Dを支持することは無駄だからである(ステージ436)。この処理は終点438において終了する。
ここで、図1に対する参照を続けると共に、図13を参照すると、計算装置100の上で働く並列ループサポートを有するトランザクショナルメモリアプリケーション500が示されている。1つの実施において、並列ループサポートを有するトランザクショナルメモリアプリケーション500は、計算装置100の上に存在するアプリケーションプログラムのうちの1つである。しかしながら、並列ループサポートを有するトランザクショナルメモリアプリケーション500は、代わりにまたはさらに1つまたは複数のコンピュータの上および/または図1に示すものとは異なる変換におけるコンピュータ実行可能命令として具体化されることは理解されるであろう。代わりにまたはさらに、並列ループサポートを有するトランザクショナルメモリアプリケーション500の1つまたは複数の部分は、他のコンピュータおよび/またはアプリケーション、若しくはコンピュータソフトウェア技術の当事者の心に浮かぶ通りの他の変換の上で、システムメモリ104の一部分とすることができる。
並列ループサポートを有するトランザクショナルメモリアプリケーション500は、ここに記述する手法の幾つかまたはすべての実行を担当するプログラムロジック504を含む。プログラムロジック504は、トランザクショナルメモリシステムを提供するロジック506、当初のシーケンシャルループを含むコードの第1セクションを、トランザクションを使用して当初の入力対出力マッピングを維持し安全性を向上させる並列ループを含むコードの第2セクションに変換するロジック508、当初のシーケンシャルループの1つまたは複数の繰り返しを、並列ループ内のトランザクションのうちの個々の1つの中に置くロジック510、当初のシーケンシャルループの実行順と整合性が取れた所定のコミット順を用いてトランザクションをコミットすることにより、当初の入力対出力マッピングを維持するロジック512、当初のシーケンシャルループがデータを修正する動作を含むとき、コミットアービトレータを使用して並列ループにおける競合を検知し対処するロジック514、当初のシーケンシャルループのコンパイラ解析を実施することなくコードの上記第2セクションを作成するロジック515、(ヒューリスティックス(経験則)、コードの第1セクションにおけるユーザ定義の注釈、などを用いて)上記当初のシーケンシャルループは並べ替えを受け付けないと判断するときは当初のシーケンシャルループの実行順序に左右されない順序でトランザクションがコミットするのを許可する方法でコードのその第2セクションを作成するロジック516、少なくとも上記トランザクションのうち一部は並行して実行されるように、コードの上記第2セクションを生成するロジック517、異なるスレッド上で実行されているトランザクションのうち少なくともいくつかと共に、上記トランザクショナルメモリシステムを使用してコードの第2セクションを実行するロジック518、および当該アプリケーションをオペレーションするための他のロジック520を含む。1つの実施において、プログラムロジック504は、プログラムロジック504におけるプロシージャに対する単一呼出を用いるなど、別のコンピュータからプログラム的に呼び出されるよう動作することができる。
ここで、当初のシーケンシャルループを並列ループに変換することを含むハイレベルステージの1つの実施を示す図14を参照する。1つの形として、図14の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。このプロシージャは、出発点550において始まり、シーケンシャルループの繰り返しの各々(または繰り返しの連続ストリップ)をもとに(例えば、それぞれの作業項目を含む)個々のトランザクションを作成することにより、当初のシーケンシャルループを、所定のコミット順にしたがって当初のシーケンシャルループの当初の実行と整合性が取れたコミット順を遵守する並列ループに変換すること(ステージ552)を伴う。別の実施においては、繰り返し毎に1つのトランザクションを作成することは余りに犠牲が大きい場合に、繰り返しの連続ストリップ(例えば、隣接するもの)を1つのトランザクションにまとめてグループ化することができる(ステージ552)。このシステムは、当初のシーケンシャルループのコンパイラ解析を実行することなく並列ループを生成する(ステージ554)。次いで、異なるスレッドに割り当てられている上記個別のトランザクションの少なくともいくつかを用いて、それらが並列に実行するように、上記並列ループを実行する(ステージ556)。この処理は終点558において終了する。
図15は、所定のコミット順処理を使用して、並列ループ内のトランザクションは適切な順序でコミットされることを確認することを含むステージの1つの実施を示す。1つの形として、図15の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点570において始まり、当初のシーケンシャルループを、所定のコミット順処理にしたがう並列ループに変換すること(ステージ572)を伴う。このシステムは、並列ループ内のトランザクション毎にコミット順番号を割り当てる(または、そのトランザクションをコミットする順序を追跡する別の適切な方法を用いる)(ステージ574)。並列ループを実行しているとき、このシステムは、その所定のコミット順処理を使用して、それぞれのトランザクションを、並列ループの先行の繰り返し(iteration)が首尾良くコミットした後でのみ、完了することができることを確実にする(例えば、そのトランザクションのコミット順が、そのトランザクションはコミットすることができると示すまで、そのトランザクションを待たせる)(ステージ576)。この処理は終点578において終了する。
図16は、コミットアービトレータを使用して、並列ループが実行している間に生じる衝突を検知して対処することを含むステージの1つの実施を示す。1つの形として、図16の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点600において始まり、当初のシーケンシャルループを、所定のコミット順処理を用いて正しい順序付けを確実にする並列ループに、変換すること(ステージ602)を伴う。このシステムは、その並列ループを実行する(ステージ604)。このシステムは次いで、同一データ要素を(例えば、スレッド安全性が欠けているとの理由で、順序付け要件の理由で、などで)修正しようとする個々のトランザクションの1つ以上(例えば、ループ繰り返し)を、上記並列ループが含むことを検知する(ステージ606)。コミットアービトレータを使用して、順番通りでない実行を検知し、先行トランザクションが完了次第に後続トランザクションの再実行の手続を取るなどにより、上記並列ループを実行する間に生じる衝突を検知して処理する(ステージ608)。この処理は終点610において終了する。
図17は、コミットアービトレータを使用して、並列ループを実行している間に生じる処理されない例外を検知して対処することを含むステージの1つの実施を示す。1つの形として、図17の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点630において始まり、当初のシーケンシャルループを、トランザクションを用いて当初の入力対出力マッピングを維持し安全性を向上させる並列ループに変換すること(ステージ632)を伴う。このシステムはその並列ループを実行して(ステージ634)、並列ループを実行している間に特定のトランザクションに生じる処理されない例外を検知する(ステージ636)。その特定のトランザクションおよびその特定のトランザクションの先行トランザクションがあればそれにより行われた状態変更をコミットする(ステージ638)。後続トランザクションの何れかによりその特定のトランザクションに対し推論的に行われた状態変更を、それらのトランザクションをロールバック(後退)させることにより廃棄する(ステージ640)。処理は終点642において終了する。
図18A〜図18Bは、当初のシーケンシャルループから並列ループへの模範的な変換についての仮想のソースコードを示す。図18Aはfor・・・eachループ652を含む当初のシーケンシャルループ650を示すが、別の形式のループ構造も使用することができることは理解されるであろう。ループにおける繰り返し毎に1つまたは複数のステートメント654が実行される。図18Bは、ここに説明する手法のうち一部を使用して並列ループ660に変換した後、シーケンシャルループが呈する様相の仮想の例を示す。図示の事例においては、当初のシーケンシャルループ664の繰り返し毎に個々のトランザクションを創出することにより、並列ループを生成する。別の実施においては、繰り返し毎に1つのトランザクションを作ることは犠牲が多過ぎると思われる場合に、繰り返しの連続ストリップ(例えば、隣接するもの)をトランザクションの中にまとめてグループにすることができる。このとき個々のトランザクションの各々は、当初のループにおいてステートメント667として含まれていた作業を実行するため、新しい作業項目を作成する。個々のクラス662を使用して作業項目繰り返しを宣言することができる。その個々のトランザクションは次いで、異なるスレッドに割り当てられるのでそれらは並行して実行することができる。
図19は、クローズドエンドシーケンシャルループを並列ループに変換することを含むステージの1つの実施を示す。1つの形として、図19の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点670において始まり、トランザクショナルメモリシステムを提供すること(ステージ672)を伴う。このシステムは、当初のシーケンシャルループを含むコードの第1セクションを解析して、当初のシーケンシャルループが実行するだろう繰り返し定数を(例えば、ループ終了を判断するために使用する定数を検索することにより)決定する(ステージ674)。当初のシーケンシャルループを含むコードの第1セクションを、繰り返しの定数までトランザクションを生成することのできる並列ループを含むコードの第2セクションに変換する(ステージ676)。このシステムは、異なるスレッドに割り当てられているトランザクションのうち少なくともいくつかと共に、それらが並行して実行するように、上記トランザクショナルメモリシステムを使用してコードの第2セクションを実行する(ステージ678)。このシステムは、所定のコミット順処理を用いて、そのトランザクションを正しい順序でコミットする(例えば、各トランザクションはそれぞれの誘導変数カウンタをコミット連続番号として使用するところで)(ステージ680)。この処理は終点682において終了する。
1つの実施において、図19に記述する変換処理は、誘導変数をループ本体自体には決して書き込まないループのためにのみ使用する。言い換えると、ループは、そのループ本体における誘導変数に書き込むことにより、若しくは誘導変数のアドレスを採用しそれを用いて書き込みに導く何か(ファンクションに渡す、それを擬似する、など)をすることにより、不適格となることがある。
図20は、スペキュレーションパイプラインを使用して、オープンエンドシーケンシャルループを並列ループに変換することを含むステージの1つの実施を示す。1つの形として、図20の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点700において始まり、トランザクショナルメモリシステムを提供すること(ステージ702)を伴う。このシステムは、当初のオープンエンドシーケンシャルループを含むコードの第1セクションを、(例えば、少なくともいくつかのトランザクションが並行して実行するように)、スペキュレーションパイプラインの繰り返し毎の作業項目それぞれを含む個々のトランザクションを生成する動作をすることのできる並列ループを含むコードの第2セクションに変換する(ステージ704)。コードのその第2セクションは、そのオープンエンドシーケンシャルループのコンパイラ解析を実行することなく、生成される(ステージ706)。このシステムは、異なるスレッドに割り当てられているトランザクションのうち少なくともいくつかと共に、それらが並行して実行するように、上記トランザクショナルメモリシステムを使用してコードの第2セクションを実行する(ステージ708)。そのトランザクションを(例えば、オープンエンドシーケンシャルループの実行順と整合性がとれた)所定のコミット順でコミットすることにより、当初の入力対出力マッピングは維持される(ステージ710)。この処理は、終点712において終了する。
図21は、オープンエンドシーケンシャルループから生成された並列ループを実行することを含むステージの1つの実施を示す。1つの形として、図21の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点730において始まり、オープンエンドシーケンシャルループ(例えば、whileループ、dowhileループ、forループ、など)から生成される並列ループにおいて実行すべき繰り返しの回数を見積もるスペキュレーションパイプラインを生成すること(ステージ732)を伴う。1つの実施において、このシステムは、そのスペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを生成する(ステージ734)。別の実施例において、繰り返し毎に1つのトランザクションを作ることは犠牲が多過ぎると思われる場合などに、このシステムは、繰り返しの連続ストリップ(例えば、隣接するもの)をもとに、それらをトランザクションの中にまとめてグループ化する(ステージ734)。このシステムは、上記個々のトランザクションを、それらが並行して実行するように、異なるスレッドに割り当てる(735)。このシステムは、それぞれの作業項目毎に終了条件を評価する(ステージ736)。そのそれぞれの作業項目のうちの特定の1つが、上記並列ループを終了する時期に到達したと判定するときには、先行者をコミットして、後継者を廃棄する(ステージ738)。この処理は終点740において終了する。
図22は、オープンエンドシーケンシャルループから生成された並列ループ内の各作業項目を適切な順序でコミットさせることを確実にすることを含むステージの1つの実施を示す。1つの形として、図22の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点760において始まり、それぞれのトランザクションにおけるそれぞれの作業項目各々を実行しながら、現在の繰り返し値を取り出すこと(ステージ762)を伴う。1つの実施において、現在の繰り返し値は、それぞれの作業項目各々がアクセスすることのできる値を、極小の増分(atomic increment)を実行することにより取り出す(ステージ762)。このシステムは、それぞれの作業項目各々の現在の繰り返し値を、所定のコミット順処理におけるコミット連続番号として使用する(ステージ764)。このシステムは、そのオープンエンドシーケンシャルループの当初の実行と整合性が取れたコミット順を達成する(ステージ766)。この処理は終点768において終了する。
図23は、スペキュレーションパイプラインを計算してその並列ループの中に幾つの繰り返しを含むかを決定することを含むステージの1つの実施を示す。1つの形として、図23の処理は、計算装置100のオペレーティングロジックにおいて少なくとも部分的に実行される。この処理は、出発点790において始まり、このシステムが、並列ループを実行するコンピュータ上の利用可能な処理装置の数に少なくとも基づいて、スペキュレーションパイプラインの初期値を作成すること(ステージ792)を伴う。1つの実施において、CPU束縛作業を行うのに費やす作業負荷を時間率で割った処理装置の数に基づいて、スペキュレーションパイプラインの初期値を生成する(ステージ792)。幾多の他の計算も利用可能である。その初期値を用いて、その並列ループの特定の実行のために作成される、上記並列ループの繰り返し数が幾つであるかを決定する(ステージ794)。このシステムは、適応的統計データを用いて、その並列ループの以後の実行のためにそのスペキュレーションパイプラインを調整することができる(例えば、経歴を用いてそのループの予想所要時間をさらに良く決定する、作業項目がブロックするとき柔軟に調整する、などで)(ステージ796)。この処理は終点798において終了する。
図24A〜図24Bは、当初のオープンエンドシーケンシャルループから並列ループへの模範的な変換のための仮想のソースコードを示す。用語「オープンエンドシーケンシャルループ」は、ここで使用するとき、その繰り返し数が未知であるシーケンシャルループを含むことを意味する。図24Aを参照すると、当初のオープンエンドシーケンシャルループ810が示されている。このループは、条件が真である間(例えば、図示の事例ではP=trueである間)一定のステートメントを実行するwhileループである。図24Bは、その当初のシーケンシャルループが並列ループ820に変換された後の様相を示す。図24Bの仮想のコードに示すように、スペキュレーションパイプラインの繰り返し毎に、並行して実行する作業項目が生成される。1つの実施においては、このため標準ワークスチーリングキュー(standard work stealing queue)を使用することができる。currentIterationと呼ばれる共有変数は、各作業項目にアクセスすることができる。各作業項目が実行するにつれ、標準compare−and−swapハードウェア命令または別の機構のように、currentIterationに極小の増分を実行して、それ自体の繰り返し値をフェッチ(fetch)する。これは、1つの繰り返しは何れも単一の作業者(worker)により処理されること、およびトランザクションがループの繰り返しのうち1つを実行し始める順序を決定することを保証する。これは次いで、トランザクションのコミット連続番号となり、繰り返しは先行者と後継者の間で正しい順序で直列化可能であることを保証する。各作業項目は、そのループ構造が命令する通りに、Pまたは作業の前または後に終了条件を適用することができるものは何でも、評価する(例えば、図24Bに示す「while」の場合は前であるが、do−whileの場合は「後」)。作業者の1つが、終了する時期であることを認識すると、先行者全部はコミットし、次いで後継者全部を廃棄しなければならない。
ここに説明する例は、各種の技術および手法を用いてコミット順序付けを実施することについて述べたけれども、トランザクションはコミットアービトレータを全く有しないことに注意しなければならない。トランザクションがコミットアービトレータを全く有しないこのような場合は、通常の無秩序なコミットが生じる。
主題事項を、構造的特性および/または方法論的行動に特定の言語を用いて記述したけれども、添付の請求項に定義する主題事項は、上述の具体的な特性または行動に必ずしも限定されるものではないことは理解されなければならない。むしろ、上述の具体的な特性および行動は、請求項の実施の模範的な形態として開示されているものである。ここに記述する通りのおよび/または以下の請求項による実施の思想の範囲内に入る等価物(均等物)、変更および修正のすべては、保護されることが望まれる。
例えば、コンピュータソフトウェアの当業者は、ここに説明した例示において記述したような、クライアントおよび/またはサーバアレンジメント、ユーザインターフェイス画面コンテンツ、および/またはデータレイアウトは、1つまたは複数のコンピュータの上で異なって組織され、上記例示において描写したより少ないまたは多いオプションまたは機能を含むことができることを、認識するであろう。

Claims (20)

  1. クローズドエンドのシーケンシャルループを並列ループに変換する方法であって、
    トランザクショナルメモリシステムを提供するステップと、
    当初のシーケンシャルループを含むコードの第1セクションを解析して、前記当初のシーケンシャルループが実行する繰り返し定数を決定するステップと、
    前記当初のシーケンシャルループを含むコードの前記第1セクションを、並列ループを含むコードの第2セクションに変換するステップであって、前記並列ループは前記繰り返し定数までの数の複数のトランザクションを生成するよう作動可能であり、前記トランザクションは前記並列ループの少なくとも一部を並列に実行可能にする、ステップと、
    異なるスレッド上で実行する複数のトランザクションのうちの少なくともいくつかと共に、前記トランザクショナルメモリシステムを使用してコードの第2セクションを実行するステップと
    を備えたことを特徴とする方法。
  2. 前記繰り返し定数は、前記当初のシーケンシャルループと比較してループ終了を判定するための一定値を検索することにより決定されることを特徴とする請求項1に記載の方法。
  3. 前記トランザクションの各々がそれぞれの誘導変数カウンタをコミット連続番号として使用し、該コミット連続番号は所定のコミット順処理を使用してトランザクション各々を正しい順序でコミットするのを保証することを特徴とする請求項1に記載の方法。
  4. 請求項1に記載の各ステップをコンピュータに実行させるためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能記憶媒体。
  5. コンピュータに実行させるためのコンピュータ実行可能命令を有するコンピュータ読取可能記憶媒体であって、該コンピュータ実行可能命令は、
    トランザクショナルメモリシステムを提供するステップと、
    オープンエンドシーケンシャルループを含むコードの前記第1セクションを、並列ループを含むコードの第2セクションに変換するステップであって、前記並列ループはスペキュレーションパイプラインの繰り返し毎にそれぞれの作業項目を含む個々のトランザクションを生成するように作動可能であるステップと、
    異なるスレッド上で実行する前記個々のトランザクションのうち少なくともいくつかと共に、前記トランザクショナルメモリシステムを使用してコードの前記第2セクションを実行するステップと、
    を含み、各ステップをコンピュータに実行させることを特徴とするコンピュータ読取可能記憶媒体。
  6. コードの前記第2セクションは、前記トランザクションのうち少なくともいくつかを並行して実行するように生成されることを特徴とする請求項5に記載のコンピュータ読取可能記憶媒体。
  7. コードの前記前記第2セクションは、前記オープンエンドシーケンシャルループのコンパイラ分析を実行することなく生成されることを特徴とする請求項5に記載のコンピュータ読取可能記憶媒体。
  8. 当初の入力対出力のマッピングが、前記トランザクションを所定のコミット順でコミットすることにより維持されることを特徴とする請求項5に記載のコンピュータ読取可能記憶媒体。
  9. 前記所定のコミット順が、前記オープンエンドシーケンシャルループの実行順と整合性が取れていることを特徴とする請求項8に記載のコンピュータ読取可能記憶媒体。
  10. オープンエンドシーケンシャルループから生成される並列ループを実行する方法であって、
    オープンエンドシーケンシャルループから生成される並列ループで実行する繰り返しの回数を見積もるスペキュレーションパイプラインを生成するステップと、
    前記スペキュレーションパイプラインの各繰り返しをもとに、それぞれの作業項目を含む個々のトランザクションを生成するステップと、
    異なるスレッドの上で個々のトランザクションのうち少なくともいくつかを実行するステップと、
    それぞれの作業項目毎に終了条件を評価するステップと、
    前記それぞれの作業項目のうちの特定の1つが、前記並列ループを終了する時期に到達したと判定するときに、前記それぞれの作業項目のうちの前記特定の1つの先行者をコミットし、後継者を廃棄するステップと、
    を含むことを特徴とする方法。
  11. それぞれの作業項目を実行しながら、現在の繰り返し値を読み出すことを特徴とする請求項10に記載の方法。
  12. それぞれの作業項目毎の前記現在の繰り返し値は、所定のコミット順処理において、コミット連続番号として使用されること、を特徴とする請求項11に記載の方法。
  13. 前記現在の繰り返し値は、それぞれの作業項目毎にアクセス可能な値の極小の増分を実行することにより読み出されることを特徴とする請求項11に記載の方法。
  14. 前記オープンエンドシーケンシャルループの当初の実行と整合性が取れているコミット順が達成されることを特徴とする請求項10に記載の方法。
  15. 前記オープンエンドシーケンシャルループが、whileループであることを特徴とする請求項10に記載の方法。
  16. 前記オープンエンドシーケンシャルループが、do whileループであることを特徴とする請求項10に記載の方法。
  17. 前記オープンエンドシーケンシャルループが、forループであることを特徴とする請求項10に記載の方法。
  18. 前記スペキュレーションパイプラインの初期値が、並列ループを実行するコンピュータ上で利用可能な処理装置の数に少なくとも部分的に基づいて計算されることを特徴とする請求項10に記載の方法。
  19. 適応的統計データを用いて、前記並列ループの後の実行のために前記スペキュレーションパイプラインを調整することを特徴とする請求項10に記載の方法。
  20. 請求項10に記載の各ステップをコンピュータに実行させるためのコンピュータ実行可能命令を有することを特徴とするコンピュータ読取可能記憶媒体。
JP2014061450A 2007-06-04 2014-03-25 トランザクションを用いるシーケンシャルフレームワークの並行化 Active JP5813165B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/810,111 2007-06-04
US11/810,111 US8024714B2 (en) 2006-11-17 2007-06-04 Parallelizing sequential frameworks using transactions

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2010511260A Division JP2010529559A (ja) 2007-06-04 2008-05-30 トランザクションを用いるシーケンシャルフレームワークの並行化

Publications (2)

Publication Number Publication Date
JP2014146355A true JP2014146355A (ja) 2014-08-14
JP5813165B2 JP5813165B2 (ja) 2015-11-17

Family

ID=40107429

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2010511260A Pending JP2010529559A (ja) 2007-06-04 2008-05-30 トランザクションを用いるシーケンシャルフレームワークの並行化
JP2014061450A Active JP5813165B2 (ja) 2007-06-04 2014-03-25 トランザクションを用いるシーケンシャルフレームワークの並行化

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2010511260A Pending JP2010529559A (ja) 2007-06-04 2008-05-30 トランザクションを用いるシーケンシャルフレームワークの並行化

Country Status (7)

Country Link
US (2) US8024714B2 (ja)
EP (1) EP2171592B1 (ja)
JP (2) JP2010529559A (ja)
CN (1) CN101681292B (ja)
BR (1) BRPI0811470A2 (ja)
TW (1) TWI451340B (ja)
WO (1) WO2008151046A1 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8010550B2 (en) * 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
US8621468B2 (en) * 2007-04-26 2013-12-31 Microsoft Corporation Multi core optimizations on a binary using static and run time analysis
JP5067425B2 (ja) * 2007-09-21 2012-11-07 富士通株式会社 翻訳装置と翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサ
US8739141B2 (en) * 2008-05-19 2014-05-27 Oracle America, Inc. Parallelizing non-countable loops with hardware transactional memory
JP4612710B2 (ja) * 2008-06-02 2011-01-12 株式会社日立製作所 トランザクション並行制御方法、データベース管理システム、およびプログラム
US8667476B1 (en) * 2009-01-20 2014-03-04 Adaptmicrosys LLC Instruction grouping and ungrouping apparatus and method for an adaptive microprocessor system
US8266604B2 (en) * 2009-01-26 2012-09-11 Microsoft Corporation Transactional memory compatibility management
US20110178984A1 (en) * 2010-01-18 2011-07-21 Microsoft Corporation Replication protocol for database systems
US8825601B2 (en) 2010-02-01 2014-09-02 Microsoft Corporation Logical data backup and rollback using incremental capture in a distributed database
CN104572506B (zh) * 2013-10-18 2019-03-26 阿里巴巴集团控股有限公司 一种并发访问内存的方法及装置
US9454313B2 (en) 2014-06-10 2016-09-27 Arm Limited Dynamic selection of memory management algorithm
CN104317850B (zh) * 2014-10-14 2017-11-14 北京国双科技有限公司 数据处理方法和装置
JP6645348B2 (ja) 2016-05-06 2020-02-14 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
US11521242B2 (en) * 2016-08-31 2022-12-06 Meta Platforms, Inc. Asynchronous execution of tasks and ordering of task execution
EP3594804B1 (en) * 2018-07-09 2021-11-03 ARM Limited Transactional compare-and-discard instruction

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05127904A (ja) * 1991-11-05 1993-05-25 Matsushita Electric Ind Co Ltd 情報処理装置及びコード生成装置
JPH05173988A (ja) * 1991-12-26 1993-07-13 Toshiba Corp 分散処理方式および該分散処理に適用されるトランザクション処理方式
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
JPH1185544A (ja) * 1997-09-04 1999-03-30 Nec Corp トランザクションプログラム並列実行方法およびトラン ザクションプログラム並列実行方式
US20070055960A1 (en) * 2004-08-10 2007-03-08 Sun Microsystems, Inc. System and method for supporting multiple alternative methods for executing transactions

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB8306813D0 (en) 1983-03-11 1983-04-20 Bonas Machine Co Heald control apparatus
US4884228A (en) 1986-10-14 1989-11-28 Tektronix, Inc. Flexible instrument control system
JPH01108638A (ja) * 1987-10-21 1989-04-25 Hitachi Ltd 並列化コンパイル方式
JPH0475139A (ja) * 1990-07-18 1992-03-10 Toshiba Corp ループ並列化装置
DE4216871C2 (de) 1991-05-21 2001-09-06 Digital Equipment Corp Ausführungsordnen zum Sicherstellen der Serialisierbarkeit verteilter Transaktionen
US5701480A (en) 1991-10-17 1997-12-23 Digital Equipment Corporation Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing
US5241675A (en) 1992-04-09 1993-08-31 Bell Communications Research, Inc. Method for enforcing the serialization of global multidatabase transactions through committing only on consistent subtransaction serialization by the local database managers
US5335343A (en) 1992-07-06 1994-08-02 Digital Equipment Corporation Distributed transaction processing using two-phase commit protocol with presumed-commit without log force
US6704861B1 (en) 1993-06-17 2004-03-09 Hewlett-Packard Development Company, L.P. Mechanism for executing computer instructions in parallel
US5799179A (en) 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
JP3434405B2 (ja) 1996-03-19 2003-08-11 富士通株式会社 通信制御装置及び通信制御方法並びに中間通信制御ユニット
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
JPH1049420A (ja) 1996-08-02 1998-02-20 Fuji Xerox Co Ltd データベース管理方法
US5898865A (en) 1997-06-12 1999-04-27 Advanced Micro Devices, Inc. Apparatus and method for predicting an end of loop for string instructions
CA2209549C (en) 1997-07-02 2000-05-02 Ibm Canada Limited-Ibm Canada Limitee Method and apparatus for loading data into a database in a multiprocessor environment
US7065750B2 (en) 1999-02-17 2006-06-20 Elbrus International Method and apparatus for preserving precise exceptions in binary translated code
WO2001013202A2 (en) 1999-08-17 2001-02-22 Progress Software, Inc. Concurrent commit lock
US6374403B1 (en) * 1999-08-20 2002-04-16 Hewlett-Packard Company Programmatic method for reducing cost of control in parallel processes
US6507947B1 (en) * 1999-08-20 2003-01-14 Hewlett-Packard Company Programmatic synthesis of processor element arrays
US6438747B1 (en) * 1999-08-20 2002-08-20 Hewlett-Packard Company Programmatic iteration scheduling for parallel processors
JP4237354B2 (ja) 1999-09-29 2009-03-11 株式会社東芝 トランザクション処理方法及びトランザクション処理システム
US6745160B1 (en) 1999-10-08 2004-06-01 Nec Corporation Verification of scheduling in the presence of loops using uninterpreted symbolic simulation
US6574725B1 (en) * 1999-11-01 2003-06-03 Advanced Micro Devices, Inc. Method and mechanism for speculatively executing threads of instructions
US6557048B1 (en) 1999-11-01 2003-04-29 Advanced Micro Devices, Inc. Computer system implementing a system and method for ordering input/output (IO) memory operations within a coherent portion thereof
US20040236659A1 (en) 1999-12-01 2004-11-25 Cazalet Edward G. Method and apparatus for an engine system supporting transactions, schedules and settlements involving fungible, ephemeral commodities including electrical power
US6918053B1 (en) 2000-04-28 2005-07-12 Microsoft Corporation Compensation framework for long running transactions
US6708331B1 (en) * 2000-05-03 2004-03-16 Leon Schwartz Method for automatic parallelization of software
US6615403B1 (en) * 2000-06-30 2003-09-02 Intel Corporation Compare speculation in software-pipelined loops
EP1197876A3 (en) 2000-10-13 2003-04-16 Miosoft Corporation Persistent data storage techniques
US7111023B2 (en) 2001-05-24 2006-09-19 Oracle International Corporation Synchronous change data capture in a relational database
US7069556B2 (en) 2001-09-27 2006-06-27 Intel Corporation Method and apparatus for implementing a parallel construct comprised of a single task
GB0130399D0 (en) 2001-12-19 2002-02-06 Ibm Message ordering in a messaging system
US6754737B2 (en) 2001-12-24 2004-06-22 Hewlett-Packard Development Company, L.P. Method and apparatus to allow dynamic variation of ordering enforcement between transactions in a strongly ordered computer interconnect
KR100450400B1 (ko) 2001-12-26 2004-09-30 한국전자통신연구원 안전 기억 장치가 없는 환경을 위한 이중화 구조의 주 메모리 상주 데이터베이스 관리시스템 및 그 데이터 일치성 제어방법
US6785779B2 (en) 2002-01-09 2004-08-31 International Business Machines Company Multi-level classification method for transaction address conflicts for ensuring efficient ordering in a two-level snoopy cache architecture
US7328316B2 (en) 2002-07-16 2008-02-05 Sun Microsystems, Inc. Software transactional memory for dynamically sizable shared data structures
US7103612B2 (en) 2002-08-01 2006-09-05 Oracle International Corporation Instantiation of objects for information-sharing relationships
US7076508B2 (en) 2002-08-12 2006-07-11 International Business Machines Corporation Method, system, and program for merging log entries from multiple recovery log files
US7089253B2 (en) 2002-09-13 2006-08-08 Netezza Corporation Computer method and system for concurrency control using dynamic serialization ordering
US6898685B2 (en) 2003-03-25 2005-05-24 Emc Corporation Ordering data writes from a local storage device to a remote storage device
US7185323B2 (en) * 2003-05-16 2007-02-27 Sun Microsystems, Inc. Using value speculation to break constraining dependencies in iterative control flow structures
KR100507782B1 (ko) 2003-12-04 2005-08-17 한국전자통신연구원 데이터베이스 관리시스템 및 그 시스템에서 시스템테이블에 대한 동시성 제어 방법
US20050210185A1 (en) 2004-03-18 2005-09-22 Kirsten Renick System and method for organizing data transfers with memory hub memory modules
US7386842B2 (en) 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US7266571B2 (en) 2004-07-27 2007-09-04 International Business Machines Corporation Method and system for scheduling a partial ordered transactions for event correlation
US7376675B2 (en) 2005-02-18 2008-05-20 International Business Machines Corporation Simulating multi-user activity while maintaining original linear request order for asynchronous transactional events
US7627864B2 (en) * 2005-06-27 2009-12-01 Intel Corporation Mechanism to optimize speculative parallel threading
US7536517B2 (en) 2005-07-29 2009-05-19 Microsoft Corporation Direct-update software transactional memory
US20070113056A1 (en) * 2005-11-15 2007-05-17 Dale Jason N Apparatus and method for using multiple thread contexts to improve single thread performance
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US7926046B2 (en) * 2005-12-13 2011-04-12 Soorgoli Ashok Halambi Compiler method for extracting and accelerator template program
US7720891B2 (en) 2006-02-14 2010-05-18 Oracle America, Inc. Synchronized objects for software transactional memory
US8010550B2 (en) 2006-11-17 2011-08-30 Microsoft Corporation Parallelizing sequential frameworks using transactions
US7937695B2 (en) * 2007-04-27 2011-05-03 International Business Machines Corporation Reducing number of exception checks

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05127904A (ja) * 1991-11-05 1993-05-25 Matsushita Electric Ind Co Ltd 情報処理装置及びコード生成装置
JPH05173988A (ja) * 1991-12-26 1993-07-13 Toshiba Corp 分散処理方式および該分散処理に適用されるトランザクション処理方式
JPH0784851A (ja) * 1993-09-13 1995-03-31 Toshiba Corp 共有データ管理方法
JPH1185544A (ja) * 1997-09-04 1999-03-30 Nec Corp トランザクションプログラム並列実行方法およびトラン ザクションプログラム並列実行方式
US20070055960A1 (en) * 2004-08-10 2007-03-08 Sun Microsystems, Inc. System and method for supporting multiple alternative methods for executing transactions

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JPN6013004284; 木村啓二、笠原博徳: '"特集 マルチコアにおけるソフトウェア:マルチコアにおけるプログラミング"' 情報処理 第47巻,第1号(通巻491号), 20060115, p.22, 社団法人情報処理学会 *
JPN7013000342; Lance Hammond, Brian D. Carlstrom, Vicky Wong, Ben Hertzberg, Mike Chen, Christos Kozyrakis, and Kun: '"Programming with Transactional Coherence and Consistency(TCC)"' ASPLOS XI Proceedings of the 11th international conference on Architectual support for &# *
JPN7015001139; Brian D.Carlstrom, Austen McDonald, Hassan Chafi, JaeWoong Chung, Chi Cao Minh, Christos Kozyrakis,: '"The Atomos Transactional Programming Language"' PLDI'06 Proceedings of the 2006 ACM SIGPLAN Conference on Programming Language Design and Implementa , 20060611, p.&#xFF1 *

Also Published As

Publication number Publication date
CN101681292B (zh) 2012-10-10
BRPI0811470A2 (pt) 2014-11-04
EP2171592B1 (en) 2019-04-10
JP5813165B2 (ja) 2015-11-17
CN101681292A (zh) 2010-03-24
US20110283091A1 (en) 2011-11-17
US8402447B2 (en) 2013-03-19
TWI451340B (zh) 2014-09-01
US8024714B2 (en) 2011-09-20
US20080120298A1 (en) 2008-05-22
WO2008151046A1 (en) 2008-12-11
TW200903339A (en) 2009-01-16
EP2171592A1 (en) 2010-04-07
JP2010529559A (ja) 2010-08-26
EP2171592A4 (en) 2012-03-21

Similar Documents

Publication Publication Date Title
JP5813165B2 (ja) トランザクションを用いるシーケンシャルフレームワークの並行化
US8010550B2 (en) Parallelizing sequential frameworks using transactions
JP4698757B2 (ja) ソフトウェアトランザクションのコミット順序および競合の管理
US7860847B2 (en) Exception ordering in contention management to support speculative sequential semantics
EP2176763B1 (en) Memory transaction grouping
JP2010524133A (ja) バッファリングされた書込みおよび強制的直列化順序を使用するトランザクショナルメモリ
US10372509B2 (en) Composable and cancelable dataflow continuation passing
Kitano et al. Performance evaluation of parallel heapsort programs

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150424

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150501

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150522

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150731

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150817

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150915

R150 Certificate of patent or registration of utility model

Ref document number: 5813165

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250