JP4422345B2 - スクリプト駆動ツールの並列処理アプリケーション - Google Patents
スクリプト駆動ツールの並列処理アプリケーション Download PDFInfo
- Publication number
- JP4422345B2 JP4422345B2 JP2000594025A JP2000594025A JP4422345B2 JP 4422345 B2 JP4422345 B2 JP 4422345B2 JP 2000594025 A JP2000594025 A JP 2000594025A JP 2000594025 A JP2000594025 A JP 2000594025A JP 4422345 B2 JP4422345 B2 JP 4422345B2
- Authority
- JP
- Japan
- Prior art keywords
- parallel
- script
- flow graph
- serial
- data flow
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
- Y10S707/99936—Pattern matching access
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Multi Processors (AREA)
Description
著作権の通知
この特許書類の開示部分は著作権保護の対象となる材料を含む。著作権者は、特許商標庁の特許ファイルまたは記録に掲載されている限り、あらゆる特許開示の複製に異議はないが、それ以外については全ての如何なる著作権も留保する。
【0002】
【発明が属する技術分野】
本発明は、データ処理システムの計算の制御、特にスクリプト駆動ツールの並列処理アプリケーションに関する。
【0003】
【従来技術】
シングルプロセッサコンピュータの計算速度は過去30年の間に途方もなく進歩した。しかしながら、世界最速のシングルプロセッサコンピュータをさえ上回る計算力が多くの分野で必要とされている。1つの例はトランザクション処理であり、これは複数のユーザがコンピュータリソースに同時にアクセスするものであるが、システムが商用に耐えるためには応答時間が短くなければならない。もう1つの例はデータベースマイニングであり、何百ギガバイトもの情報が処理されねばならず、直列式コンピュータ上でのデータの処理は何日または何週間もかかる。したがって、種々の“並列処理”システムがそのような問題を対処するために開発されている。この議論において、並列処理システムは、ローカルの(例えば、SMPコンピュータ等のマルチプロセッサシステム)、またはローカルに分置された(例えば、クラスタまたはMPPsとして結合された多重プロセッサ)、またはリモートの、またはリモートに分置された(例えば、LANまたはWANネットワークを介して結合された多重プロセッサ)多重中央処理装置(CPUs)、またはそれらのあらゆる組合せを使用するコンピュータシステムのあらゆる構成を含む。
【0004】
しかしながら、そのような並列処理システムの存在にもかかわらず、全てのプログラムまたはソフトウェアツールが並列処理に利点を有するように設計されているわけではない。例えば、幾つかの商業的に重要なソフトウェアツールは以下の特徴を共有する:
・ソフトウェアツールは種々の機能を行う能力がある。
・それらの機能の実施は一連の処理ステップとそれら処理ステップ間のデータの置換えとを特定する“記述言語”によって制御される。
・ユーザはツールとその記述言語との組合せを使用するアプリケーションを書き込む。
・ソフトウェアツールは並列処理を使用しない、または最小限に使用する。
【0005】
そのようなソフトウェアツールの1例は“SAS(登録商標)ソフトウェアシステム”、すなわちSAS Institute, Inc.によって作成されたデータ解析システムである。このツールによって提供される機能はデータ変換、データ統合、データセット管理、多種多様の統計的処理を含む。ユーザは“SAS”とも呼ばれる言語内にスクリプトを書き込むことによってSASアプリケーションを構築する。そのようなツールの第2例はSyncSort Inc.によって作成された“SyncSort(登録商標)”である。このアプリケーションによって提供される機能はデータフィルタリング、データソーティング、データ統合を含む。ユーザは“Syncsort”スクリプトを書き込むことによって“Syncsort”アプリケーションを構築する。
【0006】
そのようなソフトウェアツールで構築されたアプリケーションが大量のデータの処理に使用されるとき、実行時間は極めて大きくなる。多数のプロセッサがシングルアプリケーションに適用できる並列処理は、そのようなデータ量の多いアプリケーションをスピードアップさせる可能性を有する。理想的には、シングルプロセッサ上で作動させると10時間かかるジョブは60プロセッサ上で作動させると10分ぐらいに短縮することもできる。そのようなパフォーマンス向上は、もちろん、並列処理システムを利用できる能力があるソフトウェアを有するかどうかに依存する。
【0007】
【発明が解決しようとする課題】
これらのソフトウェアツールのユーザは、ほとんどの場合、新しいおよび/または異なるツールをどのように使用するか、またはツールの現行のアプリケーションをどのように変更するかを進んで学習しようとはしない。例えば、SASのユーザは一般的に全く新しい記述言語を学習したいとか現行のSASアプリケーションを変更したいと思わないだろう。そのようなユーザにパラレリズムの恩恵をもたらすため、発明者は、記述言語内に表されているように、ツールのアプリケーションを自動的に並列処理することが望ましいであろうと考えた。
【0008】
【課題を解決するための手段】
本発明は特定のスクリプト駆動ソフトウェアツールのアプリケーションを並列処理するためのシステムおよび方法を含む。好ましい実施形態において、ソフトウェアツール記述言語内のスクリプトは、自動的に解析されて“スクリプト断片”のセットを加えた並列計算のための仕様を生成し、それらの組合せはオリジナルスクリプトと機能的に同等である。スクリプト断片を加えた並列計算仕様は次に並列ランタイムシステムによって実行され、これによりオリジナルソフトウェアツールおよび/または補助プログラムの多重インスタンスが並列処理として作動する。結果として起こるプロセスは入力データを読み込み、出力データを生成し、オリジナルスクリプトによって特定されたのと同様の計算を行う。アナライザ、ランタイムシステム、オリジナルソフトウェアツール、補助プログラムの組合せは、所定のスクリプトおよび入力データのため、オリジナルソフトウェアツール単独と同様の出力データを生成することになるが、“処理能力”全体の実質的な改善のため多重プロセッサを並列に使用する能力を有する。
【0009】
一方で、本発明はスクリプト駆動ソフトウェアツールのスクリプトに基づいてコンピュータアプリケーションプログラムを並列処理するための方法、システム、およびコンピュータプログラムを含み、スクリプトを自動的に解析することとこの解析に基づいて並列計算仕様を生成することとからなり、この並列計算仕様は、並列ランタイムシステムによって実行されたときにスクリプトと同等の機能を提供する。別の側面において、本発明はスクリプト駆動ソフトウェアツールのスクリプトに基づいてコンピュータアプリケーションプログラムを並列処理するための方法、システム、およびコンピュータプログラムを含み、スクリプトを自動的に解析することとこの解析に基づいてスクリプト断片セットに加えた並列計算仕様を生成することとからなり、この並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されたときにスクリプトと同等の機能を提供する。
【0010】
本発明の1または複数の実施形態の詳細を添付図面および以下の説明において述べる。本発明のその他の特徴、目的、および利点は、明細書、図面および特許請求の範囲から明らかとなるだろう。
各図面の同じ参照番号および記号は同じ要素を示す。
【0011】
【発明の好ましい実施形態】
概要
図1は、本発明の好ましい実施形態のデータフロー図である。SAS等の言語内のソフトウェアツールスクリプト1は、“スクリプト断片”4のセットに加えた並列計算3用仕様を生成するため自動的に解析2される。スクリプト断片4に加えた並列計算仕様3の組合せはオリジナルスクリプト1と機能的に同等である。スクリプト断片を加えた並列計算仕様は次に並列ランタイムシステム5によって実行され、それは例えばAb Initio Software CorporationからのCo>Operating System(商標名)ランタイムシステムとすることができる。そのような実行は並列に作動されるオリジナルソフトウェアツール6および/または補助プログラム7の多重インスタンスを引き起こす。結果処理6、7は入力データ8を読み込み出力データ9を生成し、オリジナルスクリプト1によって特定されたのと同様の計算を行う。アナライザ、ランタイムシステム、ツール、補助プログラムの組合せ10は、所定のスクリプト1と入力データ7のため、オリジナルソフトウェアツール6単独と同様の出力データ8を生成するが、“処理能力”全体に実質的な改善を獲得するため多重プロセッサを並列に使用する。
【0012】
好ましい実施形態を適用するため、各スクリプト1用ソフトウェアツール6および記述言語は特定の条件を満足するべきである:
・記述言語は処理ステップおよびデータセットディフィニション(例えば、ファイル、データベース、一時的データセット)等のステートメントのシーケンスで構成されるべきである。
・記述言語は処理ステップによって読み込まれる/書き込まれるあらゆるデータを明白または暗黙に特定すべきである。これは処理ステップ間で情報を通過させることに使用される一時的データセット;データセットディフィニションステートメント内で定義される外部データセット;および処理ステップのなかで(場合によっては暗黙に)参照される外部データセットを含むこともできる。
・方法は処理ステップの少なくとも幾つかを並列処理することに(例えば、従来のアルゴリズムから)知られているべきである。並列処理方法はデータを部分集合内へ分割し各部分集合上で指示された処理ステップを作動すること;手続きの別々に利用可能な並列インプリメンテーションを挿入すること;データを分割内へ分割し各部分集合上で“グローバル手続き”を作動し、次にグローバル手続きの出力上で“ローカル手続き”を作動させることを含む(グローバルおよびローカル手続きはベース記述言語内でインプリメントされるのが好ましいが、必ずしもそうする必要はない。)。
【0013】
図2は、イニシャルスクリプト1を自動的に解析2しスクリプト断片4に加えた並列計算3の仕様を生成するための好ましい方法を示すデータフロー図である。スクリプト解析方法2は以下のようにインプリメントできる:
・ステップ101:入力スクリプト1をステートメント102のシーケンス内へ分割する。
・ステップ103:処理ステップ間のデータ交換を表す直列データフローグラフ104を生成するためステートメント102のシーケンスを処理する。
・ステップ105:直列データフローグラフ 104を並列処理し、それにより並列データフローグラフ106を生成する。
・ステップ107:“スクリプト断片4”を発生しオリジナルスクリプト駆動アプリケーションが幾つかの処理ステップを実行できるよう、並列データフローグラフ106を、選択的に、解析する。
・ステップ108:結果データフローグラフ106がその結果並列計算3の仕様に複写できる。
【0014】
アルゴリズムの幾つかの点で、行われている計算は“データフローグラフ”として表される。2つの場合があり:直列データフローグラフ104は、計算をオリジナルアプリケーションによって、直列で、行われるものとして表し;並列データフローグラフ106は、計算を並列ランタイムシステム5とオリジナルソフトウェアツール6と補助プログラム7の組合せによって、並列に、行われるものとして表す(以下でさらに説明する)。それらのデータフローグラフ104、106は種々の方法で表すことができるが、グラフ形状(例えば図3)かまたはグラフ(例えば図6)の頂点およびエッジを表す表としてのどちらかで表されることが最も多い。両方の表記は便利な指図として使用される。
【0015】
図3は、グラフ形状の直列データフローグラフ104の例である。そのようなグラフは例えば、スクリプトによって読み込まれているデータセット201、202;スクリプトによって書き込まれているデータセット208;スクリプト内に含まれる処理ステップ203、205、207;および、明白にか暗黙にかのどちらかで、1つのステップから別のステップへ通過したあらゆる中間結果204、206を表す頂点のセットを典型的に有する。
【0016】
典型的な直列データフローグラフ104は各処理ステップによってアクセスされたデータセットを示す有向エッジ220〜226のセットも有する。説明された実施形態において、処理ステップ220、221、223、225の中に向けられたエッジは、データセット/中間結果が読み込まれていることを示し、一方処理ステップ222、224、226の外に向けられたエッジは、データセット/中間結果が処理ステップによって書き込まれていることを示している。
【0017】
図4は、グラフ形状の並列データフローグラフ106の例である。典型的に、並列データフローグラフは以下を除いて対応する直列データフローグラフと一致する:
・オリジナル処理ステップ203、205の幾つかは、(太線によって示された)並列実行が記されている。
・オリジナル中間結果204、206の幾つかは、(太線によって示された)“分割”されたデータセットとして記されている。
・オリジナルデータセットアクセス220、221、222、223、224の幾つかは、(太線によって示された)並列データにアクセスしているとして記されている。
・幾つかの新しい中間結果212、213、215、217、処理ステップ210、211、214、216、データセットアクセス227〜234は、種々の処理ステップによって要求された様にデータを分割するために加えられている。新しい中間結果212、213、215の幾つかは分割されたとして記されている。新しい処理ステップ210、211、214の幾つかは並列実行が記されている。新しいデータセットアクセス228、230、231、232、233の幾つかは並列データにアクセスしているとして記されている。
・分割キーに関する表記(例えば、“BY v2, v3”)は、種々の処理ステップ205、データセット215、206、およびデータセットアクセス223、224、232、233に加えられている。それらの表記は、以下に説明されるように、データ分割の仕方を示す。
【0018】
本発明がスクリプト駆動ツールをベースにしたアプリケーションの並列処理に一般的に適用可能である一方、本発明の方法は、アプリケーションとアプリケーションの記述言語のセマンティックとによって提供されるファシリティの詳細を基に、各特定のスクリプトベースツール用に調整することを要求する。本発明の方法はまた、使用されている特定の並列ランタイムシステムに幾分調整することを要求する。丁度言及されたアプリケーション特定情報に加えて、ここに含まれる方法が与えられると、そのような調整は当業プログラマーによって行うことができる。SASアプリケーションを並列処理することにおいて生じる幾つかの特定の問題にどのように対応するかの詳細は以下で述べられる。
【0019】
スクリプト駆動アプリケーションの実施例
本発明によって対応される問題の幾つかを説明するため、解析と呼ばれる仮定データ解析プログラムが、その記述言語に沿って、説明される。この仮定プログラムおよび記述言語の目的は、普通の従来型の記述言語の特徴を説明すること、およびスクリプト駆動ツールのアプリケーションを並列処理する方法を説明することに使用されることになる種々の例のための基礎を提供することである。
【0020】
仮定“解析”プログラムは以下の基本能力を有する:
・ファイルまたはリレーショナルデータベースからデータを読み込むこと。
・ファイルまたはリレーショナルデータベースにデータを書き込むこと。
・データセットの各レコード上で単純な算出を行うことによって1つのデータセットをもう1つのデータセットへ変換すること。
・データセットを連結すること。
・集約関数“SUM”、“MIN”、“MAX”を計算すること。それら集約関数は完全なデータセットに適用できる。交互に、“グループ分けされた統合”が(SQL“GROUP BY”またはSAS“BY”および“CLASS”ステートメントにあるように)計算される。これは以下で説明される。
・解析アルゴリズムのアプリケーションによってデータを解析すること。
【0021】
1.アプリケーションの発動
この実例において、アプリケーションはアプリケーションの名前(“analyze”)、スクリプトを含んでいるファイルの名前、およびゼロ以上のコマンドラインパラメータを特定する“コマンドライン”を介して発動される。例えば、以下のコマンドラインは“analyze”アプリケーションを作動させ、スクリプト”script1”を使用しコマンドラインパラメータ”datafile1”を特定する:
analyze script1 datafile1
コマンドラインパラメータはフォーム$<number>の構成によって、必要に応じて、$1は第1コマンドラインパラメータを参照、$2は第2コマンドパラメータを参照、以下同様なように、スクリプトのなかから参照されることができる。コマンドラインパラメータの参照はデータセット宣言内のファイル名の場所で使用できる。
【0022】
2.データセット宣言
データセットはレコードのシーケンスである。実施例において、各レコードはスペースセパレイテッドデータフィールドのリストで構成され、データセットの第1レコードはデータフィールドの名前を含む(簡略するために、幾つかの例ではフィールド名のリストを省く)。例えば:
【0023】
データセットは以下のように宣言される:
INPUT datasetname fileneme
読み込まれるデータセットを宣言する。”filename”はデータを含んでいるファイルの名前を入力する。”datasetname”はスクリプト内の他の場所でデータセットを参照するのに使用できる。
OUTPUT datasetname filename
上記のとおりだが、データセットがアプリケーションによって書き込まれることを宣言する。
TEMP datasetname filename
上記のとおりだが、一時的データセットがアプリケーション内で使用されることを宣言する。
DB_IN datasetname tableneme
INPUTステートメントと同様だが、表名と呼ばれるリレーショナルデータベース表からそのデータを得る。データのタイプはデータベースをクエリーすることによって確定される。
DB_OUT datasetname tablename
OUTPUTステートメントと同様だが、そのデータを表名と呼ばれるリレーショナルデータベース表に送る。
【0024】
例えば、処理されることになるデータがファイル内にある場合、入力データセットは以下のように宣言される:
INPUT customers customers.dat
代わりに、データがデータベース表内にあった場合、入力データセットは以下のように宣言される:
DB_IN customers cust_table
コマンドラインパラメータはデータセット用ファイルに名前を付けることにも使用できる。例えば:
INPUT customers $1
【0025】
3.処理ステップ
仮定analyzeアプリケーションは以下の処理ステップを定義する:コピー、連結、統合、解析。それらの処理ステップの各々はシングル出力を生成し、各ステップは、連結ステップを除いて、シングル入力からそのデータを得る。
【0026】
デフォルトでは、1つの処理ステップの出力は次の処理ステップの入力として使用されることになる。例えば、以下のスクリプトにおいてstep1の出力はstep2の入力として使用されることになる:
step1
step2
【0027】
データステートメントが処理ステップの前に即座に来る場合、そのときは処理ステップはデータステートメントからその入力を得ることになる。同様に、データステートメントが処理ステップの後に即座に来る場合、そのときは処理ステップは特定されたデータセットにそのデータを書き込むことになる。例えば、以下のスクリプトにおいて、step1はindataデータセットからその入力を読み込み、outdataデータセットにその出力を書き込むことになる:
INPUT indata input.data
step1
OUTPUT outdata output.data
【0028】
それらのルールはフォームOUTPUT=datasetまたはINPUT=datasetの節をあらゆる処理ステップに加えることによって無効にできる。例えば、以下のスクリプトにおいてstep1はindataからそのデータを得て、outdataに書き込むことになる:
INPUT indata input.data
OUTPUT outdata output.data
step1 INPUT=indata OUTPUT=outdata
【0029】
4.コピーステートメント
コピーステートメントは以下の構文を有する:
COPY field=expression, field=expression...
コピーステートメントは1つのデータセットをもう1つのデータセットにコピーする。出力データセット内の各レコードは示されたエクスプレッションを、入力レコード内のフィールドを表すエクスプレッション内の変数で、評価することによって構成される。例えば、以下のデータセットが処理されると仮定する:
v1 v2 v3
1 2 3
2 4, 2
ここでサンプルスクリプト:
INPUT indata input.data
COPY v1=v1, v2=v2, v3=v3, v4=v1+v2+v3
OUTPUT outdata output.data
以下の出力が生成される:
v1 v2 v3 v4
1 2 3 6
2 4 3 8
【0030】
5.連接ステートメント
連接ステートメントは以下の構文を有する:
CONCATENATE dataset1 dataset2...
このステートメントの出力は各特定されたデータセットを読み込みそれらのレコードの全てをシングル出力データセットに書き込むことの結果である。出力データの大きさは問題ではない。しかしながら、データセット内のフィールドのリストは合致しなければならない。実施例において、CONCATENATEオペレーションは他の処理ステートメントによって使用されるデフォルト入力ルールに従わない。(すなわち、前のステートメントの出力を入力として取得しない)
【0031】
6.統合ステートメント
統合ステートメントはレコードのセット全体の中の以下の統合の計算に使用される:SUM、MIN(minimum)、MAX(maximum)。統合ステートメントは以下の構文を有する:
AGGREGATE field=aggop expression,field=aggop expression...[BY key, key...]
【0032】
“統合操作”(aggop)はキーワードSUM、MIN、MAXの1つで構成される。特定されるBY節がない場合、そのときはAGGREGATEオペレーションの出力は、示されたエクスプレッションの合計/最小/最大を(適切に)含むシングルレコードであり、データセット全体にわたって計算される。例えば、以下のデータセットが処理されると仮定する:
value
1
2
3
4
ここでサンプルスクリプト:
INPUT indata input.data
AGGREGATE v1=MIN value, v2=MAX value, v3=SUM value
OUTPUT outdata output.data
これは以下の出力を生成する:
v1 v2 v3
1 4 10
【0033】
BY節が特定される場合、そのときはデータは部分集合に分割され、各部分集合はBY節内で特定されるすべてのキーのための同一値を有する。統合はそのような部分集合各々のために計算される。BY節内のキーは各出力レコードの前面に置かれることになる。例えば、以下のデータセットが処理されると仮定する:
k1 k2 value
1 2 7
3 4 1
3 4 2
3 4 3
ここでサンプルスクリプト:
INPUT indata input.data
AGGREGATE v1=MIN value, v2=MAX value, v3=SUM value BY k1, k2
OUTPUT outdata output.data
これは以下の出力を生成する:
k1 k2 v1 v2 v3
1 2 7 7 7
3 4 1 3 6
【0034】
7.解析ステートメント
解析ステートメントはレコードの集合に基づいてシングル整数値を計算するアルゴリズムの発動に使用される。統合と同様に、解析ステートメントは選択的なBY節を取得する。解析ステートメントは単数または複数のステートメントが並列処理できない場合取られる測定を説明するために含まれる。
ANALYZE [BY key,key...];
【0035】
並列ランタイムシステムの実施例
見本アプリケーションを並列に作動させるため、“並列ランタイムシステム”を用いることが必要である。これはプログラムが多重プロセッサ上で同時に作動されることを許すソフトウェアシステムである。ここで開示する方法は何らかの特定の並列ランタイムシステムを特定するものではないが、例示的説明のみを目的として、単純ランタイムシステムについて説明する。サンプルランタイムシステムは四つのステートメント:実行、単純分割、ハッシュ分割、およびギャザーを有する。サンプルランタイムシステムは解析システムによって使用されるのと同様のフォーマットのデータを使用する。
【0036】
1.実行ステートメント
runステートメントは(以下の)フォームを有する:
run count program argument1 argument2 ...
runステートメントは、コマンドライン上の特定されたアーグュメントをプログラムインスタンスへ渡す特定されたプログラムのcountインスタンスを発効する。例えば、run 3 myprogram arg1ステートメントはmyprogramの3つのインスタンスを並列に作動し、各インスタンスにコマンドラインパラメータarg1を提供する。
【0037】
あらゆる引数は選択的に、セミコロンで分割されたカウント要素のリストで構成することができる。例えば、引数a;b;cは3要素a、b、およびcのリストとして翻訳される。プログラムが作動されるとき、各プログラムのnth実施はそのようなリストの各々のnth要素で呼ばれる。例えば、ステートメント実行2myprogram a1;a2 b1;b2はmyprogramの2つのインスタンスを並列に作動する。第1インスタンスは引数a1 b2が与えられ第2インスタンスは引数a2 b2が与えられる。
【0038】
2.単純分割ステートメント
単純分割ステートメントは(以下の)フォームを有する:
simple-partition input putput
単純分割ステートメントは入力ファイルのセミコロンで分割されたリストからレコードを得て、それらを出力ファイルのセミコロンで分割されたリスト間に配分する。配分は、データをほぼ同等に配分できるあらゆる方法により行うことができる。例えば、ラウンドロビン分割において、各入力ファイルからのkth入力レコードは、mが出力ファイル数である場合出力ファイル(k mod m)に書き込まれる。この操作は並列に行われる。例えば、以下の2つの入力ファイル“in1”と“in2”が処理されると仮定する:
in1:
v1
0
1
2
in2:
v1
3
4
5
simple-partition in1;in2 out1;out2;out3ステートメントを使用することは結果が以下の三つの出力ファイルとなる:
out1:
v1
0
3
out2:
v1
1
4
out3:
v1
2
5
【0039】
3.ハッシュ分割ステートメント
hash-partitionステートメントは(以下の)フォームを有する:
hash-partition key input output
hash partitionステートメントは入力ファイルのセミコロンで分割されたリストからレコードを得て、それらを出力ファイルのセミコロンで分割されたリスト間に配分する。ステートメントはキーフィールドのセミコロンで分割されたリストが特定されることを要求する。各入力レコードのために、ハッシュ分割オペレーションは特定されたキー値に基づいて“ハッシュ関数”を計算し、この関数を使用してレコードが書き込まれることになる出力ファイルを確定する。例えば、kがキーフィールドの値の合計でありmが出力ファイル数である場合、ハッシュ関数は(k mod m)+1として計算できる。これが行われるとき、所定のキー値を有するすべてのレコードは最後には同様の出力ファイル内にある。この操作は並列に行われる。例えば、2つの入力ファイル“in1”と“in2”が処理されると仮定すると仮定する。
in1:
v1 v2
0 0
0 1
2 2
in2:
v1 v2
0 3
1 4
2 5
hash\partition v1 in1;in2 out1;out2;out3ステートメントを使用すると、結果として以下の三つの出力ファイルが得られる:
out1:
v1 v2
0 0
0 1
0 3
out2:
v1 v2
1 4
out3:
v1 v2
2 2
2 5
【0040】
4.ギャザーステートメント
gatherステートメントは(以下の)フォームを有する:
gather input output
入力はファイルのセミコロンで分割されたリストであり、出力はシングルファイルである。入力ファイル内のレコードは結合されてシングル出力ファイルになる。この操作は並列に行われる。
【0041】
本発明の好ましい実施形態
以下のサブセクションは図2で示された“解析スクリプト”2ステップの好ましい実施形態を説明する。
【0042】
1.ステップ101−ステートメントへの分割
図1と図2を再び参照すると、ステップ101はオリジナルスクリプト1をステートメント102のシーケンスに分割している。これは主にオリジナルスクリプトを構文解析し“解析木”を生成することの問題である。コンピュータ言語を構文解析する方法はよく知られている:ほとんどの場合、要求される全ては“文法”を書き込み、その文法を“Yacc”等の“構文解析ルーチン生成系”で処理することである。結果は構文解析を行うためのプログラムになる。
【0043】
図5はイニシャルスクリプト1の例とそれが含むステートメント102のシーケンスのレプリゼンテーションを示す。それらのステートメントはデータセット201、202、208と処理ステップ203、205、207とにカテゴライズされる。便宜上、テキスト識別子(例えば“ステップ1”)はステートメントに加えられている。
【0044】
2.ステップ103−直列データフローグラフの構成
ステップ103は直列データフローグラフ104の構成である。これはステートメント102のシーケンスを解析することによって行われる。その目的はデータセット、処理ステップ、中間結果をあらわすノードの集合を生成し、各処理ステップで読み込まれまたは書き込まれるデータセット/一時的結果を示すエッジの集合を生成することである。
【0045】
この実例において、直列データフローグラフ104は3つの表で表される:データセット表601、処理ステップ表602、(処理ステップによってデータセットアクセスをあらわす)データセットアクセス表603。図6はデータセット表、処理ステップ表、データセットアクセス表の例を示しているダイアグラムである。
【0046】
実施形態において、データセット表601内の各エンティティは以下で構成される:
・各データセットの名前。
・データセットのクラス(例えば、入力、出力、一時的)。
・データのロケーションに関する表示(例えば、ファイル名)。
・データセットがオリジナルスクリプト内に明白に存在していたかどうかの表示。
・オリジナルスクリプト内に存在するその他のあらゆる情報。
【0047】
実施形態において、処理ステップ表602内の各エンティティは以下で構成される:
・各処理ステップの名前。
・行われている操作。
・あらゆるパラメータまたはスクリプト内に供給されたその他の情報(例えば、統合エクスプレッション、あらゆるBY節)。
【0048】
実施形態において、データセットアクセス表603内の各エンティティは以下で構成される:
・処理ステップの名前。
・その処理ステップによってアクセスされるデータセットの名前。
・アクセスの方向(例えば入力対出力)。
・データセットンロールに関する表示。例えば、処理ステップは2つの入力“オールド”と“ニュー”を読み込み2つの出力“アウトプット”と“エラー”を書き込むことができる。ほとんどの処理ステップはシングル入力から読み込み(例えば“in”)、シングル出力に書き込む(例えば“out”)。
【0049】
図7はステップのシーケンスを直列データフローグラフ内に変換することの例を示すフローチャートである。好ましい実施形態において、この方法は以下のステップを含む。
・ステップ500:まず始めにデータセット601、処理ステップ602、データセットアクセス603のための空の表を生成する(図6にも見える)。
・ステップ501:ステートメント102をスキャンし各データセット201、202、208と、ステートメント102で確認されるグローバル変数のためデータセット表601にエントリを生成する。各エントリは(データセットステートメントからの付加的なデータセット特定情報に加えた)グローバル変数またはデータセットの名前を抽出し、データセットまたはグローバル変数がオリジナルスクリプトに明白に存在していたことを言及することによって構成される。
・ステップ502:あらゆる処理ステップ203、205、207がまだ解析されておらず処理ステップ表602に加えられていないかどうかを確定する。全ての処理ステップが解析されている場合、アナリシスが行われる(ステップ512)。
・ステップ503:次に解析される処理ステップを選択する。
・ステップ504:そのような処理ステップの各々のため処理ステップ表602にエントリを生成する。このエントリは処理ステップのための名前を含む。それらの名前は、例えば“ステップナンバーズ”のシーケンスを発生することによって、自動的に発生される。各エントリは処理ステップステートメントから抽出されるあらゆるパラメータも含むべきである。
・ステップ505:データセット201、202、208が現在の処理ステップによって明白に参照されることを確定し、そのような参照の各々のためデータセットアクセス表603に1つのエントリを生成する。
・ステップ506:現在の処理ステップが現行のデータセットを暗黙に参照しているかどうかを確定する。もしそうであるなら、暗黙入力への各参照が処理されるまで以下のようにループする:
・どのデータセットが暗黙に参照されているかを確定するため処理ステップのコンテキストを試験する。
・ステップ508:現在の処理ステップである“processing step”と暗黙に参照されたデータセットである“dataset”と共に、データアクセス表603でエントリを生成する。ほとんどすべての場合において、暗黙参照のこのフォームは“implicit input”に対してになる。
・ステップ509:現在の処理ステップが新しいデータセットを暗黙に生成しているかどうかを確定する。もしそうであるなら、新しいデータセットへの各参照が処理されるまで以下のようにループする:
・ステップ510:新しい暗黙データセットのためデータセット表601にエントリを生成する。これは新しいデータセット識別子を生成しデータセットが明白に生成されていなかったことを言及することを含む。
・ステップ511:現在の処理ステップである“processing step”と新しく生成された中間結果データセットである“dataset”と共に、データセットアクセス表603にエントリを生成する。ほとんど全ての場合において、暗黙参照のこのフォームは“implicit output”に対してになる。
【0050】
暗黙データセット参照の解消のための正確な方法(ステップ507とステップ510)は、処理されている記述言語のセマンティックに依存する。しかしながら、この解消のためのルールは典型的に極めて単純であり、そのような解消ストラテジーの実施はルーティンプログラミングの問題であるべきである。上記のanalyze記述言語での暗黙データセット解消のために使用されるルールは、このタスクを行う1つの方法の典型である:
・処理ステップが入力データを要求する場合、および特定される入力データセットがない場合、および前のステートメントがデータセットである場合、そのときは前のステートメントのデータセットは、現在の処理ステップの入力として暗黙に参照される。
・処理ステップが入力データを要求する場合、および特定される入力データセットがない場合、および前のステートメントが処理ステップである場合、そのときは前の処理ステップの出力は、現在の処理ステップの入力として暗黙に参照される。
・処理ステップが出力を生成する場合、および特定される出力データセットがない場合、および次のステートメントがデータセットである場合、そのときは次のステートメントのデータセットは、現在の処理ステップの出力として暗黙に参照される。
・処理ステップが出力を生成する場合、および特定される出力がない場合、および次のステートメントが処理ステップである場合、そのときは新しい中間データセットは、現在の処理ステップの出力として暗黙に生成され暗黙に参照される。
【0051】
暗黙参照の解消の例として、図6を参照されたい。図6に示されたサンプルスクリプト1は、処理ステップ表602に示された、三つの処理ステップ203、205、207を含む。この例のため、イクスプリシットおよび暗黙データセット参照は以下のとおりである:
・第1処理ステップ203は“CONCATENATE”操作であり、それはデータセットindata1 201とindata2 202とから明白に読み込むことができる。特定される出力データセットはなく、それ故処理ステップはデータセット表601の中間結果“temp1”204を暗黙に生成し参照する。
・第2処理ステップ205は“AGGREGATE”操作であり、特定される入力データセットはなく、それ故操作はその入力として前のステップ203の出力“temp1”204を暗黙に参照する。特定される出力データセットはなく、それ故処理ステップはデータセット表601の中間結果“temp2”206を暗黙に生成し参照する。
・最終処理ステップ207は“ANALYZE”操作であり、特定される入力データセットはなく、それ故操作はその入力として前のステップ205の出力“temp2”206を暗黙に参照する。特定される出力データセットはないが、しかし次の操作は出力データセット“outdata”208であり、それ“outdata”は暗黙に参照される。
【0052】
3.ステップ105−直列データフローグラフの並列処理
a.概観
このセクションは、アプリケーションの個々のステップの幾つかを並列処理するための方法のレパートリーが与えられ、どのように直列データフローグラフ104から並列データフローグラフ106を自動的に発生することが可能かを述べる。働かせるこの方法のため、並列処理レパートリーは直列データフローグラフ104のシングルヴェルテックスを試験し並列データフローグラフ106に単数または複数のヴェルテックスとエッジを発生できるデータベース、プログラム、またはアルゴリズムとして要約されるべきである。直列および並列データフローグラフのためのレプレゼンテーションに加えたパラレリゼイション方法の適切なレパートリーが与えられると、そのようなレパートリーアプリケーション方法の構成はルーティンプログラミングの問題となるべきである。
【0053】
図8は並列処理方法のレパートリーを示す表900である。一般に、各並列処理方法は、適用テスト901、書換え規則902、および最適性の幾つかのノーション(例えば、並列処理方法が考慮されるオーダーによって表される)を有する。図8は以下でさらに詳しく述べられる。
【0054】
多数の方法がレパートリーに含まれる計算を並列処理することで知られている。本発明は主として(独占的ではないが)(以下を)伴う技術の特定のファミリーの1つを利用した:
・入力データを多重ディスジョイン部分集合に分類する。これは“分割”と呼ばれる。そのような部分集合の各々は“分割”と呼ばれる。分割の多数のフォームが知られており、データが部分集合に分類される仕方で異なる。
・プログラムの多重インスタンスを作動させ、各インスタンスがデータの異なる分割を処理するように手配する。これは“分割された実行”と呼ばれる。
【0055】
入力データが適当に分割できる場合、そのときは分割された実行は一般に性能上大きな改善を導くであろう。例えば、データが30通りに分割される場合、そのときは処理ステップの各インスタンスはデータの30分の1を処理し、したがって直列実行のもと要求されるであろう30分の1の時間でその仕事を完了するべきである。分割のさらなる議論のため、本発明の譲受人に譲渡された98年10月6日発行の米国特許第5,819,021号、表題「OVERPARTITIONING SYSTEM AND METHOD FOR INCREASING CHECKPOINTS IN COMPONENT-BASED PARALLEL APPLICATIONS」を参照されたい。米国特許第5,819,021号の教示と内容はここで参照によって具体化される。
【0056】
図9は、直列データフローグラフ104を並列処理するための好ましい方法を示すフローチャートである。方法は、その入力として、直列データフローグラフ 104を取り、好ましくはデータセット601、処理ステップ602、およびデータアクセス表603として表される。方法は、その出力として、並列データフローグラフ 106を生成し、好ましくは並列データセット表801、並列処理ステップ表802、および並列データアクセス表803として表される。図10はイニシャル並列データセット、処理ステップ、およびデータアクセス表の例を示しているダイアグラムである。方法は以下のステップを含む:
・ステップ700:並列データセット表801、並列処理ステップ表802、および並列データアクセス表803をイニシャライズする。これは直列データセット表601、直列処理ステップ表602、および直列データアクセス表603に含まれる情報をコピーし、“分割”データ要素をイニシャライズすることによって行われる。ノーマル(直列)ファイル201、202、208に記憶されたデータセットのため、分割データ要素は、それらのファイルが並列でないことを意味する、“直列”にイニシャライズされる。さもなければ、分割データ要素は、並列処理の仕方がまだ確定されていないことを意味する、空欄のままになるであろう。
・ステップ701:システムはまだ処理されていない処理ステップを繰り返し探すであろう。これは空欄の“分割”データ要素を有するステップのため処理ステップ表802をスキャンすることによって行うことができる。
・ステップ707:全てのステップが並列処理されていない場合、そのときは分割競合解消アルゴリズムはデータが正しく分割されていることを保証するよう発動される。このアルゴリズムは以下で議論される。一度これが行われると、並列処理は完了する(ステップ708)。
・ステップ702:グラフが処理されていないステップを含む場合、そのときは1つのステップが(例えば、任意に)選択される。
・ステップ703:並列処理レパートリー表900は次に、丁度選択されたステップに適用できる並列処理をロケイトするため、コンサルトされる。
・ステップ705:並列処理方法がロケイトされた場合、そのときはその書換え規則902は並列データセット表801、並列処理ステップ表802、および並列データアクセス表803の情報を変更するよう適用される。一度これが行われると、アルゴリズムは(ステップ701で)別の処理されていない要素を捜す。
・ステップ706:ロケイトされた並列処理方法がなかった場合、そのときはステップの“分割”方法は、ステップが直列で作動されねばならないことを示す、“直列”にセットされる。一度これが行われると、アルゴリズムは(ステップ701で)別の処理されていない要素を捜す。
【0057】
b.例
前記方法は以下の仕方で直列データフローグラフに適用することができる。上で述べたように、図10はイニシャル並列データセット表、イニシャル処理ステップ表、およびイニシャルデータセットアクセス表の例である。図11は並列処理の後で競合の解消の前の、図10の並列データセット表、処理ステップ表、およびデータセットアクセス表を示すダイアグラムである(図6、図8、図9でも見ることができる)。
・ステップ700:イニシャライゼイション。
・並列データセット表801がイニシャライズされる。
・入力データセット201、202および出力データセット208が“直列”として記される。
・その他全ての情報が直列データセット表601から単純にコピーされる。
・直列処理ステップ表602のコンテンツは並列処理ステップ表802を生成するためコピーされる。
・直列データセットアクセス表603のコンテンツは並列データセットアクセス表803を生成するためコピーされる。
・ステップ701:未処理ステップ203(並列処理ステップ表802のアプリケーションステップ1)が選択される。
・ステップ703:並列処理レパートリー表900を参照することによって、CONCATENATE(“CONCAT”)操作903が“単純分割”によって並列処理できる。
・ステップ705:単純分割のための書換え規則は以下のアクション(図11を見よ)を行う:
・処理ステップ203は“単純”分割が記されている。
・ステップの入力220、221とステップの出力222は単純分割されたデータにアクセスしているとして記されている。
・ステップ701:ループバックし、未処理の次のステップ205(並列処理ステップ表802のアプリケーションステップ2)が選択される。
・ステップ703:並列処理レパートリー表900を参照することによって、“AGGREGATE BY”操作906が“キーベース分割”によって並列処理できることを確定する。
・ステップ705:キーベース分割のための書換え規則は以下のアクション(図11を見よ)を行う:
・処理ステップ205は“v2、v3によって”分割されたように記されている。
・ステップの入力223とステップの出力224は“v2、v3によって”分割されたように記されている。
・ステップ701:ループバックし、未処理の次のステップ207(並列処理ステップ表802のアプリケーションステップ3)が選択される。
・ステップ703:並列処理レパートリー表900を参照することによって、示されている並列処理方法がないことを確定する。
・ステップ706:従って、処理ステップは直列実行(図11を見よ)が記されている。
・処理ステップ207のための分割方法は“直列”にセットされる。
・ステップの入力225とステップの出力226は“直列”として記されたそれらの分割方法を有する。
・ステップステップ701:ループバックし、もはや未処理ステップはロケイトされていない。
・ステップ707:競合を分割することは解決される(直後の議論を見よ)。この処理の結果は図11のように示される。
【0058】
c.分割競合の解消
一度全ての処理ステップが直列として並列処理されるかまたはマークされるかのどちらかであると、分割競合は解決できる(図9のステップ707)。実施形態において、このアルゴリズムのスタート時に、全ての処理ステップは、“直列”、単純“または”キーによる“等の、分割方法がラベルされるだろう。類似して、全ての外部データセットは分割方法がラベルされるだろう。データセットアクセスも分割方法で記されるだろう。この点において、グラフは”分割競合“を含むことができる。例えば、データセットアクセスエントリとそれらがアクセスするデータセットとの間のミスマッチがしばしばあるだろう。例えば、図11のアプリケーションステップ1は”単純“並列分割が記される入力220、221を有するが、それらがアクセスするデータセット201、202は”直列“として記される。もう1つの例として、一時的データセットは埋められるそれらの分割方法をまだ有することがない。
【0059】
図12は分割競合を解決するための好ましい方法を示しているフローチャートである(図9のステップ707)。
・ステップ1600:何らかの未処理ステップがグラフ内にあるかどうかを確定する。もしなければ、そのときはアルゴリズムが行われる(ステップ1601)。
・ステップ1602:全ての上流ステップが処理されているように処理ステップを選択する。
・ステップ1603:処理ステップが未処理である何らかのデータセットアクセスを有するかどうかを確定する。そのようなアクセスがない場合、そのときはステップは処理されたとして記され(ステップ1604)、アルゴリズムは処理するため次のステップを探す(ステップ1600で)。
・ステップ1605:現在の処理プロセスステップと関連する未処理データセットアクセスを選択する。
・ステップ1606:データセットアクセスの分割方法がデータセットの分割方法と整合するかどうかを確定する。実施形態において、以下の規則が適用される:
・データセットの分割方法が空欄の場合、そのときはミスマッチが存在する。
・データセットの分割方法が直列で、アクセスの方法が直列でない場合、そのときはミスマッチが存在する。
・データセットの分割方法が“単純”または“キーによる”で、アクセスの方法が直列の場合、そのときはミスマッチが存在する。
・データセットの分割方法が“単純”で、アクセスの方法が“キーによる”の場合、そのときはミスマッチが存在する。
・データセットの分割方法が“キーによる”で、アクセスの方法が“キーによる”であるが、キーが異なる場合、そのときはミスマッチが存在する。
・さもなければ分割方法は整合し、アクセスは処理されたとして記すことができ(ステップ1607)、アルゴリズムは別の未処理データセットアクセスを捜す(ステップ1603で)。
・ステップ1608:データセットの分割方法が空欄(これは一時的データセットにアクセスしているとき起こる)場合、そのときはデータセット分割方法は、データセットアクセスの分割(ステップ1609)と同様になるようにセットされ、その後アクセスは処理されたとしてマークされ(ステップ1607)アルゴリズムは別の未処理データセットアクセスを(ステップ1603)で捜す。
【0060】
データセットの分割方法が空欄でない場合、そのときは分割競合をリペアするため(“アダプタ”と呼ばれる)単数または複数の付加的な処理ステップを挿入する必要がある。アダプタは1つのデータセットを読み込み幾つかの望ましい分割を有する第2のデータセットを生成する。さらにアダプタの議論は本発明の譲受人に譲渡された96年7月2日に発効された米国特許出願番号08/678,411、表題「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」の中で述べられている。米国特許出願番号08/678,411の教示と内容はここで参照によって具体化される。
【0061】
選択されたアダプタは出力データセットによって要求された分割に依存する:
・単純分割アダプタはパラレルデータセットを生成する。その入力は直列データセットであり、その出力は単純に分割されたデータセットである。
・ギャザーアダプタは直列データセットを生成する。その入力は分割されたデータセットであり、その出力は直列データセットである。
・ハッシュ分割アダプタはキーの幾つかのセットによって分割されたデータセットを生成する。望ましいキーはパラメータとしてハッシュ分割操作に渡される。その入力はあらゆる(直列、単純に分割された、またはキー分割された)データセットであり、その出力は特定されたキー上で分割されたデータセットである。
【0062】
アダプタが挿入されたオーダーはデータアクセスのタイプに依存する。したがって、方法は以下のように続く:
・ステップ1610:データセットアクセスが処理されている処理ステップの入力(対出力)を表しているかどうかを確定する。
・ステップ1611:参照が入力に対する場合、そのときは一時的データセットによってフォローされるアダプタはソースデータセットと処理ステップとの間に挿入される。アダプタの分割はソースデータセットのそれと整合し、一方一時的データセットの分割はデータセットアクセスのそれと整合するだろう。
・ステップ1612:参照が出力に対する場合、そのときはアダプタによってフォローされる一時的データセットは処理ステップとディスティネーションデータセットとの間に挿入される。アダプタの分割はソースデータセットのそれと整合し、一方一時的データセットの分割はデータセットアクセスのそれと整合するだろう。
・一度アダプタと一時的データセットが挿入されていると、アクセスは“処理された”と記され(ステップ1607)アルゴリズムは別の未処理データセットアクセスを(ステップ1603で)捜すだろう。
【0063】
d.例
上記のように、図11は並列処理後、競合解消の前の図10の並列データセット表、並列処理ステップ表、並列データセットアクセス表を示す。図13は並列処理ステップ表のアプリケーションステップ1の解消後の図11を示しているダイアグラムである。図14は並列処理ステップ表のアプリケーションステップ2の解消後の図13を示すダイアグラムである。図15は並列処理ステップ表のアプリケーションステップ3の解消後の図14を示すダイアグラムである。図12に示された方法のアプリケーションは結果として以下の処理ステップになる:
・ステップ1600、1602:アルゴリズムはアプリケーションステップ1(処理ステップ203)が処理されていない(図11を見よ)ことを確定する。
・ステップ1603、1604:アルゴリズムはアプリケーションステップ1の第1入力220がまだ処理されていないことを確定する。
・ステップ1606:データセット201は“直列”と記され、アクセス220は“単純”と記され、それ故競合が存在する。
・ステップ1608:データセット201の分割は空欄がない。
・ステップ1610:データセットアクセス参照220は入力に参照を付ける。
・ステップ1611:全てのアダプタと一時的データセットは入力と処理ステップとの間に挿入される。
・単純分割アダプタアプリケーションステップ1aが生成される(図13を見よ)。上記のように、分割器は単純に分割されたデータセットを生成し、それは処理されているデータセットアクセス参照220によって要求された分割に整合する。
・分割器の分割は、入力201と整合するため、“直列”にセットされる。
・一時的データセット“テンプ3”212が生成される。一時的データセットの分割は、データセットアクセス参照220と整合するため、“並列”にセットされる。
・新しいデータセットアクセス参照227、228が入力201、アダプタ210、および一時的データセット212とリンクするため生成される。新しいデータセットアクセス参照227、228 の“分割”属性はそれらが(直列および単純、それぞれ)参照するデータセットと整合するためセットされる。
・現行のデータセットアクセス参照220は一時的データセット“テンプ3”212を引用するため再び目標にされる。
・ステップ1607:データセットアクセス参照220は処理されたと記される。
・ステップ1603、1604、1606、1608、1610、1611、1607:操作の同様のシリーズはステップ1によって参照される第2の入力データセット、すなわちindata2、のため繰り返される。これは結果として新しい分割アダプタアプリケーションステップ1b211、一時的データセット“テンプ4”213、およびデータセットアクセス参照229、230の生成になる。
・ステップ1603、1604、1606:アルゴリズムはアプリケーションステップ1(処理ステップ203)の出力データセット参照222を処理する。
・ステップ1608:アクセスされているデータセットの分割、“テンプ1”204、は空欄である。
・ステップ1609:データセット“テンプ1”204の分割は“並列”にセットされ、データセットアクセス参照222の分割と整合する。
・ステップ1607: データセットアクセス参照222は“処理された”と記される。
・ステップ1603:アルゴリズムはアプリケーションステップ1(処理ステップ203)がもはや未処理アクセスを有しないことを確定する。
・ステップ1604:アルゴリズムはアプリケーションステップ1(処理ステップ203)を“処理された”と記す。
【0064】
このときのグラフの状態は図13に示される。アルゴリズムは以下のように継続する:
・ステップ1600、1602:アルゴリズムは次に処理のためアプリケーションステップ2(処理ステップ205)を選択する。
・ステップ1603、1605、1606、1608、1610:アルゴリズムは処理のためアプリケーションステップ2の入力223を選択し、一時的データセット“テンプ1”204と処理ステップ205との間にアダプタと一時的データセットを挿入する必要があることを確定する。
・ステップ1611:アダプタは、上記のように(図14を見よ)、挿入される。このとき、データセットアクセス223が“v2、v3による”分割“を特定するので、”アダプタが選択される。これは結果としてアダプタアプリケーションステップ2a211、一時的データセット“テンプ5”215、および2つのデータセット参照231、232の生成になる。
・ステップ1607、1603、1605、1606、1608:アルゴリズムは処理のためアプリケーションステップ2の出力224を選択し、アウトプトの分割方法が空欄であることを確定する。
・ステップ1609:アルゴリズムは分割方法を“v2、v3によって”データセットアクセス参照224から一時的データセット“テンプ2”206にプロパゲイトする。
・ステップ1607、1603、1604:アルゴリズムはアプリケーションステップ2上で仕事を終える。
【0065】
このときのグラフの状態は図14に示される。アルゴリズムは以下のように継続する:
・ステップ1600、1602:アルゴリズムは処理のためアプリケーションステップ3(処理ステップ207)を選択する。
・ステップ1603、1605、1606、1608、1610:アルゴリズムは処理のためアプリケーションステップ3の入力225を選択し、一時的データセット“テンプ2”206と処理ステップ207との間にアダプタと一時的データセットを挿入する必要があることを確定する。
・ステップ1611:アダプタは、上記のように(図15を見よ)、挿入される。このとき、データセットアクセス参照225が“直列”分割“を特定するので、”ギャザー”アダプタが選択される。これは結果としてアダプタアプリケーションステップ3a216、一時的データセット“テンプ6”217、および2つのデータセット参照233、234の生成になる。
・ステップ1607、1603、1605、1606:アルゴリズムは処理のためアプリケーションステップ3の出力226を選択し、データセットアクセス参照226のための分割が出力データセット“outdata”208の分割と整合することを確定する。
・ステップ1607、1603、1604:アルゴリズムはアプリケーションステップ3の出力226を“処理された”と記し、アプリケーションステップ3がさらなるデータセットアクセスを有しないことを確定する。
・ステップ1600、1601:アルゴリズムは未処理の処理ステップが存在しないことを確定し、終了する。
いまや完全に並列処理された、グラフの最終状態は、図15に示されておリ、これは並列処理されたデータフローグラフ106を構成する。
【0066】
4.ステップ107−スクリプト断片の生成
多くの場合、オリジナルスクリプト駆動ツール6を用いて、処理ステップを実行することは可能である。これを実行するための発明の具体例として、スクリプト断片4を、そのような処理ステップに対して、任意に生成することが可能である。図16は、スクリプト断片を生成するための好ましい方法を示すフローチャートである。
・ステップ2001:システムは、全ステップが終了したかどうかを確認する。そうであれば,アルゴリズムは終了する。
・ステップ2002:システムは、未処理ステップを選択する。
・ステップ2003:ステップがオリジナルツール6により実行されない場合、処理された時(ステップ2009)、それが表示される。そしてアルゴリズム(ステップ2001)を繰り返す。各処理ステップが、オリジナルツール6により実行されるためには、下記の動作が必要となる。
・ステップ2004:いかなる入力に対しても、宣言は生成される。宣言により、実行時に利用可能な情報を参照することができる。例えば、宣言により、コマンドライン引数を参照することができる。
・ステップ2005:処理ステップ自体のテキストが生成される。多くの場合、処理ステップのテキストはオリジナルスクリプト1のものと、同一である。
・ステップ2006:いかなる出力に対しても、宣言は生成される。宣言により、実行時に利用可能な情報を参照することができる。例えば、宣言により、コマンドライン引数を参照することができる。
・ステップ2007:入力宣言、処理ステップ、出力宣言がファイルに書き込まれる。このファイルは、“スクリプト断片”4と呼ばれ、一般にオリジナルスクリプトの1断片を含む。図17に、数スクリプトを含む、スクリプト断片ファイルの1例を示す。
・ステップ2008:並列処理ステップ表802は、スクリプトを参照するために、修正される。なおステップは、スクリプト駆動ツール6を呼び出すことにより、実行されることに注意する。
・ステップ2009:カレントステップが処理された時、表示される。そしてアルゴリズム(ステップ2001)を繰り返す。
【0067】
例えば、図15に示すアプリケーションは、スクリプトの生成に必要な3処理ステップ203、205、207を含む。図17に示す結果は、3スクリプト断片2101、2101、2103から成る。
・1番目のスクリプト断片2101、スクリプト1は、1番目の処理ステップ203に対応する。そして2入力データセット(インデータ1とインデータ2)と1出力データセット(アウトデータ)と1処理ステップ(CONCATENATE操作)を宣言する。データセットにより使用されるファイル名は、コマンドライン(図15に登録のパラメータを参照)から得られる。
・2番目のスクリプト断片2102、スクリプト2は、2番目の処理ステップ205に対応し、1入力と出力(インデータ、アウトデータ)および1処理ステップ(AGGREGATE操作)を宣言する。データセットで使用されるファイル名は一般に、コマンドラインから得られる。
・3番目のスクリプト断片2103、スクリプト3は、3番目の処理ステップ207に対応し、1入力と出力(インデータ、アウトデータ)および1処理ステップ(解析オペレーション)を宣言する。データセットで使用されるファイル名は一般に、コマンドラインから得られる。
【0068】
スクリプトと解析アプリケーションのリファレンスは、並列処理ステップ表802に挿入される。図18は、図15にスクリプト断片生成後の図である。この段階で,並列処理ステップ表802は、並列インフラストラクチャが直ぐに実行できる構成要素で完全に構成されている、ことに注意する。
【0069】
5.ステップ108−並列計算仕様の生成
具体例で、並列データフローグラフ106は、米国特許出願第08/678,411号の技法を使用し、直ぐに実行されることが可能である。しかし、並列計算仕様を生成して、並列データセット、処理ステップ、およびデータセットアクセス表の全データセットと並列処理オペレーションを結合させて、1ファイルにすることは、一般に有効である。このようなファイルの1形式は、テキストファイルとすることが可能である。これは、テキストファイルの入力に適応するランタイムシステムを使用する場合には、有利である。従って、好ましい具体例で、2を解析するスクリプトの最終ステップは、このような並列計算仕様の108を生成する。
【0070】
図19は、並列計算仕様を生成する1方法のフローチャートである。よい具体例では、このアルゴリズムは下記のとおり進行する。
・ステップ2301:システムは、各一時的データセットに対して仕様を生成する。例えば、各一時的データセットを格納するために使用されるファイル名のリストを生成することにより、実行されることが可能であった。並列データセットに対して,ファイルの一定数nが生成された。これに対し、シングルファイルは、シリアルファイルに明記された。
・ステップ2302:未処理ステップが残る場合、その処理が実行される。
・ステップ2303:他の方法では、それまでの処理ステップがすでに処理されているので、アルゴリズムが次の未処理の処理ステップを選択する。
・ステップ2304:システムは並列コマンドを生成し、指定の処理ステップを実行する。
・ステップ2305:カレント処理ステップは、処理されると、表示される。アルゴリズムは、いかなる未処理ステップ(ステップ2302)をもテストするためにループ化する。
【0071】
図20は、一時的データセットの生成を示す図である。2一時的ファイルリストが、各並列一時的データセット204、206、212、213、215に対して生成されている。また、シングル一時的ファイルは、各シリアル一時的データセット217に対して生成されている
【0072】
図21は、最終並列計算仕様3を示す図である。図20の並列処理ステップ表802の各処理ステップは、実例の並列ランタイムシステム(すなわち、実行、単純区分,ハッシュ区分、ギャザー)でサポートされた4ステートメントの1例のようにコード化されている。図20のデータセットアクセスリファレンス表803の各リファレンスは、コマンドラインでデータセットファイル名のリストを含めて明記されている。
【0073】
並列計算仕様3に、スクリプト断片4を加えると、並列ランタイムシステム5により実行される。これはオリジナルソフトウェアツール6および、あるいは補足プログラム7を並列に実行させるものである。結果として生じるプロセス6、7は、オリジナルスクリプト1で明記されたのと同一の計算を実行するが、全体のスループットは非常に向上する。
【0074】
並列処理方式の例
この章では、並列処理レパ−トリ表あるいはデータベース900(図8)の定義に使用される並列処理方式の数例を簡潔に解説する。
【0075】
1.単純区分による並列処理
多くの場合、処理ステップを並列処理することは可能である。これを行うには、データを区分した後、各区分で処理ステップの1インスタンスを実行することである。これが一般的に有用であるのは、(1)オペレーションが各レコードで実行される場合、(2)あるレコードで実行されているオペレーションが、他のレコードで実行されているオペレーションとは、無関係である場合。本発明で用いられているように、この技術は“単純区分”と呼ばれる。いかなる区分方式も使用されることは,可能であるが、なるべくほぼ等しい量のデータが各区分に存在する方式を使用する。
【0076】
前述の仮定解析アプリケーションで、CONCATENATE操作と印刷オペレーションは、単純区分(図8の並列処理規則903)により並列処理されることは可能である。図22のデータフローダイアグラムは、印刷オペレーションを並列処理している1例である。シリアルバージョン1001のオペレーションでは、シリアルデータセット1003が印刷処理ステップ1004により処理されると、出力データセット1005を生成する。印刷オペレーションの並列バージョン1002では、入力データセット1003が分割され、N区分1006になる。次に印刷オペレーション1007のNインスタンスが実行され、各々が入力データ区分1006をアクセスする。結果は、N出力データセット1008に書き込まれる。出力データセット1008は、シリアルバージョンプログラムにより生成された出力1005を、分割表示したもので構成することに注意する。
【0077】
よい具体例で、単純区分に対する改訂規則902は、“前”オペレーション1020とその入力1021と出力1022よりも太い線を用いることにより、“後”のデータフローシンボルを生成する。
【0078】
2.キーべース区分による並列処理
多数のオペレーションは、“キーフィールド”をベースにする1あるいはそれ以上の入力データを区分することにより、並列処理されることが可能である。これが一般に有用である事例は、(1)あるオペレーションがキーの共有値を共有しながら、一連のレコードで実行される場合、(2)このようなある一連のレコードで実行されるオペレーションは、一連の異なるレコードで実行されるオぺレーションとは無関係である。
【0079】
本発明で使用されように、この技術は“キーベース区分”と呼ばれる。キーベース区分は、データが分割されて区分になることが、必要である。2レコードr1とr2が、キーKと同一値をもつ場合、同一区分に入れられることになる。例えば、下記事項により達成されることが可能である。
・ハッシュ機能を定義すること。すなわち数値機能fがキー値Vに適用されると、0<h<=N(Nは,区分番号)などの値hを生成する。
・ハッシュ機能fを入力データセットの各レコードに適用すること、およびそれらのレコードを、hの値に従って正確な区分に導くこと。
【0080】
仮定の解析アプリケーションで、AGGREGATE操作と解析オペレーションは、“BY”節を組み込むことも可能である。このような場合、キーベース区分(図8の並列処理規則904を参照)を使用して、並列処理されることが可能である。図23のデータフローダイアグラムは、AGGREGATE操作オペレーションを並列処理する例を示すものである。シリアルバージョン1101では、シリアルデータセット1103が、BY節を含むAGGREGATE操作処理ステップ1104で処理され、出力データセット1105を生成することが可能である。AGGREGATE操作オペレーションの並列処理バージョン1102では、入力データセット1103がハッシュ機能を用いることにより、N区分1106に分割される。次に、AGGREGATE操作オペレーション1107のNインスタンスが実行され、各々が入力データの1区分1106をアクセスしている。その結果は、次に、N出力データセット1108に述べられる。出力データセット1108は、シリアルバージョンのプログラムにより生成された出力1105のキー区分表示から成ることに注意する。
【0081】
よい具体例で、キーベース区分方法の改訂規則902は、“前”処理ステップ1120とその入力と出力1121、1122に“キーにより区分された”と表示をつけることである。これは、“後”のデータフローグラフのシンボルと表記に、キーと同一の太い線を用いることにより図で示される。
【0082】
3.区分データファイルのアクセス
並列処理の利点は、計算が決して制限されないことである。特に、並列処理は、データに対するアクセスを非常にスピードアップさせるための能力を備える。例えば、シングルストレージデバイスは、5メガバイト/秒の速度でデータを転送することが可能である。次に、そのようなデバイスを10集めると、50メガバイト/秒の速度でデータを転送することが可能となる。この理由により、マルチプルストレージデバイスでデータを区分することは、有益である。
【0083】
図24のブロックダイアグラムは、区分データセットを格納する1方法を示すものである。この方法は、データセット中の複数ファイル中のレコードを分割し、なるべく各ファイルが異なるディスク上で格納されるように配置している。この方法は、シリアルファイルで用いられる方法と比較すると、最もよく理解されることが可能である。シリアルケース1200では、シングルファイル1201は一連のレコード1202を格納するために使用される。このデータセットは、シングルファイル名1203で参照される。区分データセット1204では、数ファイル1205が使用される。各ファイルは、データセット1206の1区分を格納する。この場合、一連ファイル名1207がデータセットを参照するために使用することが可能である。この系列はなるべく、リスト内の個々のファイルを区分するために、1列に区切り符号(例、1セミコロン)を用いて表示されることが可能である。
【0084】
米国特許出願第08/876,734号で許可され、本発明の指定代理人を任命し、1997年6月16日に正式提出された、名称“A PARALLEL VIRTUAL FILE SYSTEM“(これによる開示内容は、参考資料としてに本明細書中に含まれる)では、ファイルセットの管理に対する改良方法を述べる。この方法1208で、“管理ファイル”1209は、区分データセット1206から成るデータファイル1205の名称1210を格納するために使用することができる。区分データセット1206は次に、管理ファイルを呼び出すシングルファイル名1211を使用すると、参照することができる。
【0085】
区分データセットに対するサポートには、並列処理方式レパ―トリ表900中のエントリ905が必要となる。このレパ―トリ表には、適用範囲テスト901が含まれる。このテストは、データセットに含まれるファイル名を調べて、それが区分データセットを呼び出すかどうかを確認する。対応する改訂規則902は、データセットの区分モードを、例えば、“単純”あるいは、同様の表記に設定する。
この方式は、並列アプリケーションが、区分データファイルをアクセスすることができるオリジナルツール6の機能性を、僅かに拡張している点が例外的である。
【0086】
4.ローカル-グローバル除算による並列処理
処理ステップの中には、入力データベースの全内容に基づいて計算された出力値を生成するものがある。例えば、仮定の解析アプリケーションでは、AGGREGATE操作ステートメント(BY節を使用しない)が呼び出されると、全入力データセットで使用された、あるフィールドの最大値を検索する。多くの場合、入力データの区分、各区分の“ローカル結果”の計算、数“ローカル結果”の組み合わせを行うと、このようなデータセット全体の計算を実行することが可能となる。ほとんどの場合、“グローバルコンビネーション”ステップで実行される非並列ワークの量は、“ローカル計算”ステップで実行される並列ワークに比較すると、非常に少ない。むしろ“ローカル”と“グローバル”ステップは、オリジナルソフトウェアツール6で実行されることになる。しかし、必要であれば、1あるいは両ステップが、新しい特殊目的コードで実行される場合がある。
【0087】
この並列処理の方式は、“ローカル-グローバル除算”と呼ばれる。ローカルとグローバルステージで実行される正確な計算は、並列処理されている処理ステップ次第である。仮定の解析アプリケーションのAGGREGATE操作オペレーションの場合、ローカルステージは、オリジナルスクリプト1で指定されるローカルAGGREGATE操作の計算から成る。次に、同一の全AGGREGATE操作オペレーションを、ローカルAGGREGATE操作の結果に加える。図25は、ローカルグローバル並列処理のデータフローダイアグラムである。シリアルオペレーション1300では、シリアルデータセット1301から開始できる。次に、AGGREGATE操作オペレーション1302は、1フィールドの最小値と、他の1303の最大値を検索する。このオペレーション1304の並列バージョンは、入力を区分1305に分割する必要がある。次に、AGGREGATE操作オペレーション1306の1インスタンスを各区分に加えている。これにより、各区分内に、2フイールド1307の最小値と最大値が生じる。これらのローカル結果は次に、グローバルAGGREGATE操作ステップ1308に送られ、全データセット1309で最小値/最大値を計算する。
【0088】
好適な具体例として、ローカル-グローバル除算906に対する改訂規則902は、下記事項からなる。
・オリジナルオペレーション1320を、ローカルオペレーション1323、一時的中間データセット1324、グローバルオペレーション1325と入れ替えること。
・ローカルオペレーションと中間データセット1326との間、および中間データセットとグローバルオペレーション1327との間に、データセットアクセスを加えること。
・ローカルオペレーション1323と中間データセット1324を太い線を用いて、“区分”と表示する。
・グローバルオペレーション1325を細い線を用いて続きのように表示すること。
・太い線を用いて、アクセスリファレンス1326、1327を区分されたように中間データセットとダイアグラムで表示する。
・オリジナルオペレーション1320に対する入力1321をローカルステージ1323に結びつけ、太い線を用いて、区分1328とダイアグラムで表示する。
・オリジナルオペレーション1320の出力1322を、グローバルステージ1325と結びつけ、細い線を用いて、続き1329とダイアグラムで表示する。
【0089】
5.外部パラレリズム−補足プログラム
オリジナルソフトウェアツール6を用いて、処理ステップを並列処理できない場合がある。このような場合、ステップの“外部並列”インプリメンテーションを採用することが、可能な場合がある。外部並列インプリメンテーションは、補足プログラムであり、オリジナルアプリケーションの機能性を、ある程度まで反復する。これにより、並列処理されることが可能となる。外部並行処理ルーチンのインプリメンテーションは、並列処理されているオペレーションの特性次第である。この章では、このような外部ルーチンが、アプリケーションの並列バージョンに組み込まれる一般的方法を解説する。
【0090】
例えば、仮定の解析アプリケーションには、並列処理されることができない、“データベースアンロード”オペレーションを含む。例えば、アンロードされているデータベース表を区分している場合である(それを実行するには、データベース表に許容できない修正が必要となる)。
【0091】
しかし、これは“外部パラレリズムデータベースアンロード“プログラムを供給することにより、並列処理されることができる場合がある。図26は、外部パラレリズムの1例を示すデータフローダイアグラムである。オリジナルシリアルアプリケーション1400は、”イントリンシックアンロード“ルーチン1402を使用してアクセスされるために、データベース表1401を呼び出す。ルーチン1402が一連のデータレコード1403にアクセスすることを可能としている。並列インプリメンテーション1404は、同一のデータベース表1401を使用し、共にデータベース表をスキャンするために、”外部アンロード“プログラム1405の数インスタンスを使用する。すなわち各プログラムは、オリジナル表の区分1406を生成する。
【0092】
好適な具体例として、外部パラレリズム907、908に対する改訂規則902は、下記事項から成る。
・オリジナルオペレーション1420を、外部並列ルーチン1423と入れ替えること。
・大抵の場合、分割された実行に対する外部並列ルーチン1423に、太い線のダイアグラムを書くこと。
・大抵の場合、入力1421と出力1422および対応する区分データアクセスリファレンス1424、1425に太い線のダイアグラムを書くこと。
【0093】
6.ステートメント分解による並列処理
オリジナルソフトウェアツール6を使用して、処理ステップの並列処理ができない場合や、ステップの並列処理をするために、外部パラレリズムを使用することが望ましくない場合や不可能な場合がある。このような場合、ステートメント分解により処理ステップを並列処理することが可能となる。ステートメント分解が使用されると、処理ステップは,複数の独立したタスクを実行する。この場合、処理ステップは、ステップのオリジナルタスクを別々のタスクに分解し、各タスクが別のステップで処理されると、並列処理されることが可能である。この後、各新ステップは、同時に処理されオリジナルステップの並列実行を有効に遂行する。次に、分離されたステップの結果は、互いに連結され、一連の出力を生成する。
【0094】
図27は、ステートメント分解の例を示すデータフローダイアグラムである。好適な具体例では、ステートメント分解による並列処理の改訂規則は、下記事項から成る。
・オリジナルオペレーション1702を分解されたオペレーション1704、一時的中間データセット1705、フィールド連結オペレーション1706の組み合わせと入れ替えること。フィールド組み合わせオペレーション1706は、一時的中間データセット1705のレコードのフィールドを組み合わせる。
・分解されたオペレーションと中間データセットとの間、および中間データセットと組み合わせオペレーションとの間にそれぞれ、データセットアクセス1707、1708を加えること。
・分解されたオペレーション1704と中間データセット1705を“区分”として太い線でダイアグラムを書くこと。
・組み合わせオペレーション1706を細い線で続きの表示をつけること。
・アクセス1707、1708を中間データセットに、太いダイアグラムを用いて書く。
・オリジナルオペレーション1702の入力1701を分解されたオペレーション1704に結び付け、区分1709を太いダイアグラムで書く。
・オリジナルオペレーション1702の出力1703を組み合わせオペレーション1706に結び付け、それらを細い線でシリアル1710と表示をつける。
【0095】
SAS 特定の改訂規則
発明は一般に各種スクリプト言語に適応可能であるが、下記に、発明が特にSAS言語に適応可能である理由を、数例を用いて説明する。技術の中の通常の1技能は、原理と例をここで利用することができることが必要であり、本発明で用いるためには、SASの他の見地に適応することである。
【0096】
1.PROC MEANS改訂規則−ローカル-グローバル除算の例
SASシステムは、MEANS手順を含み、この手順は、例えば、単純もしくはキーベース区分により並列処理できるとはかぎらない。しかし、MEANS手順は一般に、ローカル-グローバル除算改訂規則を適用させることにより、並列処理されることが可能である。図28は、データフローダイアグラムであり、シリアルSASスクリプトがMEANS手順1505を用いて、データセット1501で記述統計法を計算し、出力ファイル1502を生成する例を示すものである。並列インプリメンテーションは、同一データセット1501を必要とし、単純区分を用いて、区分データセット1504を生成する。次に、SASMEANS手順1505の数インスタンスを用いて、データセット1506の最小値、最大値、総計、合計、平方値の合計に対するローカル値を生成する。外部統計マージングアプリケーション1507のシングルインスタンスは、ローカル値を結合して、全結果1502を生成する。ローカル値1506をマージして、全結果1502を生成するために必要なアルゴリズムは、技術中で熟知されている。
【0097】
2.PROC FREQ改訂規則−ローカル-グローバル除算の例
SASシステムは、FREQ(frequency)手順を含み、この手順は、例えば単純もしくはキーベース区分により並列処理できるとはかぎらない。しかしFREQ手順は、一般にローカル-グローバル除算改訂規則を適用されることにより、並列処理されることが可能である。図29は、データフローダイアグラムであり、シリアルSASスクリプトが手順1605を用いて、データセット1601で表駆動統計を計算し、出力ファイル1602を生成する例を示す。並列インプリメンテーションは、同一データセット1601を必要とし、単純区分を用いて、区分データセット1604を生成する。次に、SASFREQ手順1605の数インスタンスを用いて、データセット1606に対するローカル周波数表を生成する。シングルインスタンスFREQ手順1607は、ローカル値を結合して、全結果1602を生成する。(SAS本具体例の言語仕様に対応するために、シングルFREQインスタンス1607が、SASステートメント“WEIGHT COUNT”を含む必要があるのは、局部的結果1606を正確にマージするためである)
【0098】
3.PROC UNIVARIATE改訂規則−ステートメント分解の例
SASシステムは、UNIVARIATE手順を含み、この手順は、例えば単純もしくはキーベース区分により並列処理できない。UNIVARIATE手順は一般に、ステートメント分解改訂規則を適用させることにより、並列処理されることが可能である。図30は、データフローダイアグラムであり、シリアルSASスクリプトがUNIVARIATE手順1805を用いて、データセット1801でUNIVARIATE統計を計算し、出力ファイル1802を生成する例を示すものである。並列インプリメンテーションは、同一データセット1801を必要とし、カラム区分を用いて、区分データセット1804を生成する。次に、SASUNIVARIATE手順1805の数インスタンスを使用する。各インスタンスは、各変数(カラム区分)に対するUNIVARIATE統計を生成し、ローカルデータセット1806を生成している。シングル連結ステップは次に,ローカルUNIVARIATEデータセット1806を結合して、全結果1802を生成する。
【0099】
4.データステップ改訂規則−単純区分もしくはキーベース区分の例
SASシステムは、“データステップ”と呼ばれる手続き上のステップを含む。一般に、SASプログラムは一連のデータステップとSAS手続きで構成される。SASデータステップは、仮定の解析アプリケーションのスクリプト言語のAGGREGATE操作ステートメントと同様のシングルあるいはグループ化されたレコードオペレーションを実行することができる。SASデータステップが入力および出力に対するSASデ―タセットを使用し、BYステートメントを含んでいない場合、単純区分が並列でデータステップを計算するために使用することができる。SASデータステップが、入力および出力に対するSASデータセットを使用し、BYステートメントを含む場合、キーベース区分による並列処理が並列でデータステップを計算されるために使用されることができる。このような後者の場合、SASBYステートメントで指定されたキーは、ハッシュ区分オペレーションで,キーとして用いられる。
【0100】
5.SASスクリプト断片
下記は、SAS1プログラムと分割される予定の断片の例である。これら断片は、適用されている特定の改訂規則の構成内で適合するために、修正される必要があることに注意すること。その上、一時的データセットに対するリファレンス(下記の各所に記載されている。すなわちデータセット名で、libnameステートメントより接頭語のないものである)は、改訂規則により生成されている、シリアルあるいは並列データセットの適切なリファレンスと入れ替えられる必要がある。
libname ext “.”;
data one;
set ext.customer;
by region;
age = today()-birthdt;
proc means data=one;
var age;
proc freq data=one;
tables age*region;
proc univariate data=one;
var age income numkids;
Fragment 1:
libname ext “.”;
data parallel.one;
set ext.customer;
by region;
age = today()-birthdt;
Fragment 2:
proc means data=parallel.one;
var age;
Fragment 3:
proc freq data=one;
tables age*region;
Fragment 4:
proc univariate data=one;
var age income numkids;
【0101】
6.マクロとプリプロセッサ
SAS言語を用いると、ユーザは便宜上“マクロ”(コマンドの集まり)を生成し、使用することが可能となる。しかし、マクロは、基礎をなすSASコマンドを“隠す”ものである。発明の実用的具体例をSASスクリプトに容易に適用させるために、全マクロを展開させて、元の基礎をなすコマンドを露出させる必要がある。SASシステムの本具体例は、特にマクロ展開のためのツールを提供していないので、代替の方法が使用される。例えば1具体例では、マクロ展開の方式は、元のSASプログラムを、構文チェックモードで実行することにより、得られる。SASの本具体例は、この機能によりログファイルを生成する。この機能は、本質的には展開された形態の基礎をなすSAS全コマンドを含むものである。ログファイルを読み取り解析することにより、SASバージョン“未処理”コードは、本発明のアナライザ2により、得ることおよび処理されることができる。(ログファイルは、それ自体法定のSASコードではなく、不正のないプロセスで、リーガルコマンドに写像され、解釈されなければならない。
【0102】
マクロの展開方法を得るための代替の方法は、SASマクロ言語によりマクロプリプロセッサを書くことである。それらを書くためのプリプロセッサと方法は、技術の中でよく知られている。
【0103】
7.大域的SASデータ
SASシステムは、主な2記憶領域で大域的データを生成し、参照する。すなわちマクロ変数とフォーマットである。どちらの場合も、このような大域的データの生成と参照は、SASパースツリーの検査により、見つけられることが可能である。例えば、図6および図7の参照として、SASステップによる大域的データの生成は、ステートメントが501をスキャンされている間に、見つけられる。そのようなリファレンスはいかなるものも、大域的データエントリがデータセット表601で生成される原因となる。さらにSASステップによる大域的データのリファレンスは、データセットアクセス表603が、ステップ505で生成されている時に、見つけて示される。この方法で、いかなるマクロ変数あるいはSASフォーマットも生成され、それらを必要とする後のSASステップに提供される。
【0104】
コンピュータの実例
発明は、ハードウエアおよびソフトウェア、あるいは両者の組み合わせに採用されることができる。他の方法が指定されていない場合、発明の1部に含まれるアルゴリズムは本来、特定のコンピュータや他の装置に関係をもたない特に、各種汎用機械は、この文章中の教えに従って書かれたプログラムで使用されることができる。あるいは、必要な方法を実行するために、専用装置を組み立てることが都合の良い場合がある。しかし、なるべくなら発明は、1もしくはそれ以上のコンピュータプログラムを実行している、プログラム可能なシステム上で、各々少なくとも1データストレージシステム(摘発性および不摘発性記憶装置および、もしくは記憶素子を含む)、少なくとも1入力装置、少なくとも1出力装置で構成する装置で実行される。プログラムコードは、入力データに適用され、この文章で記述される機能を実行し、出力情報を生成する。出力情報は、既知の方法で1あるいはそれ以上の出力装置に振り当てられる。
【0105】
このようなプログラムは、コンピュータシステムと通信するために、目的のコンピュータ言語(機械語、アセンブリ語、高水準手続き言語、あるいはオブジェクト指向プログラム言語)で実行される。いずれの場合も、言語はコンパイルされる。すなわち解釈される。
【0106】
このような各コンピュータプログラムは、汎用あるいは特殊目的のプログラム可能なコンピュータにより読み取られ、なるべく記憶媒体あるいは装置(例えば、ROM、CD−ROM、あるいは磁気、光学媒体)に格納される。記憶媒体や装置は、記述されている手続きを実行するために、コンヒュ―タにより読み出され、コンピュータを機能させている。革新的なシステムは、コンピュータプログラムで環境設定されている、コンピュータ読み取り可能、記憶媒体で実装されることであると、考えられる。そのように環境設定された記憶媒体は、コンピュータがここに述べた機能を実行するために、特定の定義済み動作を実行させる。
【0107】
本発明の多数の具体例を説明した。それでも、発明の意図と範囲から逸脱しないように、各種修正がされるのは、推察できることである。例えば、ステップはさまざまな手順で実行され、同一の結果を達成する。従って、他の実例は、次の請求時である。
【図面の簡単な説明】
【図1】本発明の好ましい実施形態のデータフロー図である。
【図2】自動的にイニシャルスクリプトを解析しスクリプト断片を加えた並列計算の仕様を生成するための好ましい方法を示すデータフロー図である。
【図3】グラフ形状の直列データフローグラフの例である。
【図4】グラフ形状の並列データフローグラフの例である。
【図5】イニシャルスクリプトとそれが含むステートメントのシーケンスのレプリゼンテーションとの例を示す。
【図6】データセット表、処理ステップ表、データセットアクセス表の例を示すダイアグラムである。
【図7】ステップのシーケンスを直列データフローグラフの中へ変換する例を示すフローチャートである。
【図8】並列処理方法のレパートリーを示す表である。
【図9】直列データフローグラフを並列処理するための好ましい方法を示すフローチャートである。
【図10】イニシャル並列データセット表、イニシャル処理ステップ表、イニシャルデータアクセス表の例を示すダイアグラムである。
【図11】並列処理後、競合解消前の、図10の並列データセット表、並列処理ステップ表、並列データアクセス表を示すダイアグラムである。
【図12】分割競合を解決するための好ましい方法を示すフローチャートである。
【図13】並列処理ステップ表のアプリケーションステップ1解消後の図11を示すダイアグラムである。
【図14】並列処理ステップ表のアプリケーションステップ2解消後の図13を示すダイアグラムである。
【図15】並列処理ステップ表のアプリケーションステップ3解消後の図14を示すダイアグラムである。
【図16】スクリプト断片を発生するための好ましい方法を示すフローチャートである。
【図17】幾つかのスクリプトを含むスクリプト断片ファイルの例を示している。
【図18】スクリプト断片発生後の図15を示すダイアグラムである。
【図19】並列計算仕様を発生するための1つの方法のフローチャートである。
【図20】一時的データセットの発生を示すダイアグラムである。
【図21】最終並列計算仕様3を示すダイアグラムである。
【図22】COPYオペレーションを並列処理する例を示すデータフロー図である。
【図23】AGGREGATEオペレーションを並列処理する例を示すデータフロー図である。
【図24】分割されたデータセットを記憶するための1つの方法を示すブロック図である。
【図25】ローカル−グローバル並列処理のデータフロー図である。
【図26】外部パラレリズムの例を示すデータフロー図である。
【図27】ステートメント分解の例を示すデータフロー図である。
【図28】データセット上の記述統計学を算出し出力ファイルを生成するためMEANS手続きを使用する直列SASスクリプトの例を示すデータフロー図である。
【図29】データセット上の表駆動統計学を算出し出力ファイルを生成するためFREQ手続きを使用する直列SASスクリプトの例を示すデータフロー図である。
【図30】データセット上の単変量統計学を算出し出力ファイルを生成するためUNIVARIATE手続きを使用する直列SASスクリプトの例を示すデータフロー図である。
Claims (34)
- スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
前記スクリプトを自動的に解析し、該解析に基づいて並列計算仕様を生成するステップを含み、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものであるステップと、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行される並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
を含むことを特徴とする方法。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
前記スクリプトを自動的に解析し、該解析に基づいて並列計算仕様に加えてスクリプト断片セットを生成するステップを含み、前記並列計算仕様と前記スクリプト断片セットは、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものであるステップと、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行される並列データフローグラフを構成するステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含む方法。 - 前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含み、前記直列データフローグラフを構成するステップは、
(a)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(b)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(c)前記直列処理ステップ表内の処理ステップによって使用される、前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とする、請求項1又は2記載の方法。 - 前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含み、前記並列データフローグラフを構成するステップは、
(a)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(b)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成するステップと、
(c)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(d)前記並列処理ステップ表内で確認される各処理ステップについて、対応する定義済み並列処理書換え規則が前記処理ステップ用に存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、並列データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義するステップと、
を含むことを特徴とする、請求項3記載の方法。 - 前記並列データフローグラフの第1の部分の分割方法が前記並列データフローグラフの第2の部分の分割方法と競合するか否かを判定し、必要な場合に分割競合をリペアするため単数又は複数の付加的な処理ステップを前記並列データフローグラフに挿入することによって、前記構成された並列データフローグラフ内に存在する少なくとも幾つかの分割競合を解決するステップをさらに含むことを特徴とする請求項4記載の方法。
- 少なくとも1つの定義済み並列処理書換え規則は、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」、からなる群から選択されるアルゴリズムであることを特徴とする請求項4記載の方法。
- 前記並列計算仕様を生成するステップは、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」からなる群から選択されるアルゴリズムを適用することを含むことを特徴とする請求項1または2記載の方法。
- スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムはコンピュータに自動的に前記スクリプトを解析させ、該解析に基づいて並列計算仕様を生成させるステップのためのインストラクションを備えるものであって、該並列計算仕様は並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものであるステップと、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行される並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムはコンピュータに自動的に前記スクリプトを解析させ、該解析に基づいて並列計算仕様に加えスクリプト断片セットを生成させるステップのためのインストラクションを備えるものであって、該並列計算仕様とスクリプト断片セットは並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供ように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものであるステップと、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行されるための並列データフローグラフを構成するステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - 前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含み、前記直列データフローグラフを構成するステップは、
(a)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(b)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(c)前記直列処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とする請求項8または9記載のコンピュータプログラムを格納したコンピュータリーダブル媒体。 - 前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含み、前記並列データフローグラフを構成するステップは、
(a)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(b)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成するステップと、
(c)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(d)前記並列処理ステップ表内で確認される各処理ステップについて、対応する定義済み並列処理書換え規則が前記処理ステップ用に存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連するエントリを直列処理エントリとして定義するステップと、
を含むことを特徴とする請求項10記載のコンピュータプログラムを格納したコンピュータリーダブル媒体。 - 前記並列データフローグラフの第1の部分の分割方法が前記並列データフローグラフの第2の部分の分割方法と競合するか否かを判定し、必要な場合に分割競合をリペアするため単数又は複数の付加的な処理ステップを前記並列データフローグラフに挿入することによって、前記構成された並列データフローグラフ内に存在する少なくとも幾つかの分割競合を解決するステップをさらに含むことを特徴とする請求項11記載のコンピュータプログラムを格納したコンピュータリーダブル媒体。
- 少なくとも1つの定義済み並列処理書換え規則は、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」からなる群から選択されるアルゴリズムであることを特徴とする請求項11記載のコンピュータプログラムを格納したコンピュータリーダブル媒体。
- 前記並列計算仕様を生成するステップは、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」からなる群から選択される少なくとも1つの定義済み並列処理書換えアルゴリズムを適用することを含むことを特徴とする請求項8または9記載のコンピュータプログラムを格納したコンピュータリーダブル媒体。
- スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化し、前記スクリプトを自動的に解析して、該解析に基づいて並列計算仕様を生成するためのシステムであって、
前記並列計算仕様は、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析して、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段と、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものである手段と、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行される並列データフローグラフを構成する手段であって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものである手段と、
を含むことを特徴とするシステム。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化し、スクリプトを自動的に解析して、該解析に基づいて並列計算仕様に加えスクリプト断片セットを生成するためのシステムであって、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段と、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフ形状によって表すとき、前記直列データフローグラフは、有向エッジによって接続されたノードを持ち、該ノードは、前記データセット、前記処理ステップ、及び、前記処理ステップ間の中間結果を表すものである手段と、
(c)前記直列データフローグラフのノード及び有向エッジにより表される前記データセット、前記処理ステップ、及び、前記中間結果に基づいて、前記並列ランタイムシステムによって実行されるための並列データフローグラフを構成する手段と、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成する手段と、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正する手段と、
を含むことを特徴とするシステム。 - 前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含み、前記直列データフローグラフを構成する手段は、
(a)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成する手段と、
(b)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成する手段と、
(c)前記直列処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成する手段と、
を含むことを特徴とする請求項15または16記載のシステム。 - 前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含み、前記並列データフローグラフを構成する手段は、
(a)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成する手段と、
(b)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成する手段と、
(c)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成する手段と、
(d)前記並列処理ステップ表内の確認される各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連するエントリを直列処理エントリとして定義する手段と、
を含むことを特徴とする請求項15または16または17記載のシステム。 - 前記並列データフローグラフの第1の部分の分割方法が前記並列データフローグラフの第2の部分の分割方法と競合するか否かを判定し、必要な場合に分割競合をリペアするため単数又は複数の付加的な処理ステップを前記並列データフローグラフに挿入することによって、前記構成された並列データフローグラフ内に存在する少なくとも幾つかの分割競合を解決する手段をさらに含むことを特徴とする請求項18記載のシステム。
- 少なくとも1つの定義済み並列処理書換え規則は、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」からなる群から選択されるアルゴリズムであることを特徴とする請求項18記載のシステム。
- 前記並列計算仕様を生成する手段は、入力データを並列処理するために複数のデータに分割する「単純分割」、入力データを並列処理するために”キーフィールド”に基づいて複数のデータに分割する「キーベース分割」、入力データを区分し各区分の“ローカル計算”の結果の組み合わせを行う「ローカルーグローバル分割」、前記ソフトウェアツールを用いて処理ステップを並列処理できない場合に用いる「外部パラレリズムアルゴリズム」、及び、処理ステップのタスクを分解して、並列処理する「ステートメント分解」からなる群から選択される、少なくとも1つの定義済み並列処理書換えアルゴリズムを適用する手段を含むことを特徴とする請求項15または16記載のシステム。
- スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
前記スクリプトを自動的に解析し、該解析に基づいて並列計算仕様を生成するステップとを含み、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
を含み、
前記直列データフローグラフを構成するステップは、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(iii)前記直列処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とする方法。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
スクリプトを自動的に解析し、該解析に基づいて並列計算仕様に加えスクリプト断片セットを生成するステップとを含み、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含み、
前記直列データフローグラフを構成するステップは、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(iii)前記直列処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とする方法。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
前記スクリプトを自動的に解析し、該解析に基づいて並列計算仕様を生成するステップを含み、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであて、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものであるステップと、
を含み、
前記並列データフローグラフを構成するステップは、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(ii)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成するステップと、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連するエントリを直列処理エントリとして定義するステップと、
を含むことを特徴とする方法。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するための方法において、
前記スクリプトを自動的に解析し、該解析に基づいて並列計算仕様に加えスクリプト断片セットを生成するステップを含み、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであて、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものであるステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含み、
前記並列データフローグラフを構成するステップは、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(ii)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成するステップと、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義するステップと、
を含むことを特徴とする方法。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムは、コンピュータに自動的に前記スクリプトを解析させ、該解析に基づいて並列計算仕様を生成させるステップのためのインストラクションを備えるものであって、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
を含み、
前記直列データフローグラフを構成するステップは、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(iii)前記処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムは、コンピュータに自動的に前記スクリプトを解析させ、該解析に基づいてスクリプト断片セットに加え並列計算仕様を生成させるステップのためのインストラクションを備えるものであって、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものであるステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含み、
前記直列データフローグラフを構成するステップは、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成するステップと、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成するステップと、
(iii)前記直列処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成するステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムは、コンピュータに自動的に前記スクリプトを解析させ、該解析に基づいて並列計算仕様を生成させるステップのためのインストラクションを備えるものであって、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであて、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものであるステップと、
を含み、
前記並列データフローグラフを構成するステップは、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(ii)前記直列処理ステップ表に基づいてステートメントを含む並列処理ステップ表を構成するステップと、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義するステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのコンピュータプログラムを格納したコンピュータリーダブル媒体において、
前記コンピュータプログラムは、コンピュータに自動的に前記スクリプトを解析させ、該解析に基づいてスクリプト断片セットに加え並列計算仕様を生成させるステップのためのインストラクションを備えるものであって、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき前記スクリプトと同等な機能を提供するように構成されており、
前記ステップは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成するステップと、
(b)前記構文解析したステートメントより直列データフローグラフを構成するステップであって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものであるステップと、
(c)前記直列データフローグラフより並列データフローグラフを構成するステップであて、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものであるステップと、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成するステップと、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正するステップと、
を含み、
前記並列データフローグラフを構成するステップは、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成するステップと、
(ii)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成するステップと、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成するステップと、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義するステップと、
を含むことを特徴とするコンピュータプログラムを格納したコンピュータリーダブル媒体。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのシステムにおいて、
前記スクリプトを自動的に解析する手段と、該解析に基づいて並列計算仕様を生成するための手段を含み、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段と、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものである手段と、
(c)前記直列データフローグラフより並列データフローグラフを構成する手段であって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものである手段と、
を含み、
前記直列データフローグラフを構成する手段は、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成する手段と、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成する手段と、
(iii)前記処理ステップ表内の処理ステップによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成する手段と、
を含むことを特徴とするシステム。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのシステムにおいて、
スクリプトを自動的に解析する手段と、該解析に基づいて並列計算仕様に加えスクリプト断片セットを生成するための手段を含み、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものである手段と、
(c)前記直列データフローグラフより並列データフローグラフを構成する手段であって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表すものである手段と、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成する手段と、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正する手段と、
を含み、
前記直列データフローグラフを構成する手段は、
(i)前記スクリプトによって使用されるデータセットを含む直列データセット表を構成する手段と、
(ii)前記スクリプトによって実行される処理ステップを含む直列処理ステップ表を構成する手段と、
(iii)前記直列処理ステップ表内のステートメントによって使用される前記直列データセット表内のデータセットを指し示す直列データセットアクセス表を構成する手段と、
を含むことを特徴とするシステム。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのシステムにおいて、
前記スクリプトを自動的に解析する手段と、該解析に基づいて並列計算仕様を生成するための手段を含み、前記並列計算仕様は、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段と、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものである手段と、
(c)前記直列データフローグラフより並列データフローグラフを構成する手段であって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものである手段と、
を有し、
前記並列データフローグラフを構成する手段は、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成する手段と、
(ii)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成する手段と、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成する手段と、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義する手段と、
を含むことを特徴とするシステム。 - スクリプト駆動ソフトウェアツールのスクリプトに基づくコンピュータアプリケーションプログラムを並列処理化するためのシステムにおいて、
前記スクリプトを自動的に解析する手段と、該解析に基づいてスクリプト断片セットに加え並列計算仕様を生成するための手段を含み、前記並列計算仕様とスクリプト断片セットは、並列ランタイムシステムによって実行されるとき、前記スクリプトと同等な機能を提供し、前記システムは、
(a)前記スクリプトを構文解析し、少なくとも処理ステップとデータセットディフィニションを含むステートメントを生成する手段と、
(b)前記構文解析したステートメントより直列データフローグラフを構成する手段であって、前記直列データフローグラフは、前記スクリプト駆動ソフトウェアツールによって実行される前記スクリプトの直列計算を表し、前記直列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は直列データセット表、直列処理ステップ表、及び、直列データセットアクセス表を含むものである手段と、
(c)前記直列データフローグラフより並列データフローグラフを構成する手段であって、前記並列データフローグラフは、少なくとも前記並列ランタイムシステムによって並列に実行される前記スクリプトの並列計算を表し、前記並列データフローグラフをグラフの頂点およびエッジの表によって表すとき、該表は並列データセット表、並列処理ステップ表、及び、並列データセットアクセス表を含むものである手段と、
(d)前記並列データフローグラフを解析し、少なくとも前記処理ステップを含む1又は複数のスクリプト断片を生成する手段と、
(e)前記並列データフローグラフが前記1又は複数のスクリプト断片への参照を含むように、前記並列データフローグラフを修正する手段と、
を含み、
前記並列データフローグラフを構成する手段は、
(i)前記直列データセット表に基づいてデータセットを含む並列データセット表を構成する手段と、
(ii)前記直列処理ステップ表に基づいて処理ステップを含む並列処理ステップ表を構成する手段と、
(iii)前記直列データセットアクセス表に基づいて並列データセットアクセス表を構成する手段と、
(iv)前記並列処理ステップ表内の確認された各処理ステップに対して、対応する並列処理書換え規則が存在するか否かを確定し、存在する場合には、前記対応する定義済み並列処理書換え規則を適用して、並列データセット表、並列処理ステップ表、データセットアクセス表内の関連するエントリを並列処理エントリとして再定義し、また存在しない場合には、前記関連エントリを直列処理エントリとして定義する手段と、
を含むことを特徴とするシステム。 - 更に、前記並列データフローグラフが、前記1又は複数のスクリプト断片が前記スクリプト駆動ツールを呼び出すことにより、実行されることを指示するように、前記並列データフローグラフを修正するステップを含むことを特徴とする請求項2記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/229,849 US7047232B1 (en) | 1999-01-13 | 1999-01-13 | Parallelizing applications of script-driven tools |
US09/229,849 | 1999-01-13 | ||
PCT/US2000/000934 WO2000042518A1 (en) | 1999-01-13 | 2000-01-13 | Parallelizing applications of script-driven tools |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006062373A Division JP2006236360A (ja) | 1999-01-13 | 2006-03-08 | スクリプト駆動ツールの並列処理アプリケーション |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003529808A JP2003529808A (ja) | 2003-10-07 |
JP4422345B2 true JP4422345B2 (ja) | 2010-02-24 |
Family
ID=22862920
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000594025A Expired - Lifetime JP4422345B2 (ja) | 1999-01-13 | 2000-01-13 | スクリプト駆動ツールの並列処理アプリケーション |
JP2006062373A Pending JP2006236360A (ja) | 1999-01-13 | 2006-03-08 | スクリプト駆動ツールの並列処理アプリケーション |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006062373A Pending JP2006236360A (ja) | 1999-01-13 | 2006-03-08 | スクリプト駆動ツールの並列処理アプリケーション |
Country Status (6)
Country | Link |
---|---|
US (1) | US7047232B1 (ja) |
EP (1) | EP1228439B1 (ja) |
JP (2) | JP4422345B2 (ja) |
AU (1) | AU2612600A (ja) |
CA (1) | CA2360286C (ja) |
WO (1) | WO2000042518A1 (ja) |
Families Citing this family (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001059999A1 (en) * | 2000-02-11 | 2001-08-16 | Convergent Networks, Inc. | Service level executable environment for integrated pstn and ip networks and call processing language therefor |
US7110936B2 (en) * | 2001-02-23 | 2006-09-19 | Complementsoft Llc | System and method for generating and maintaining software code |
WO2003075158A2 (en) * | 2002-03-01 | 2003-09-12 | Green Border Technologies | Method and system for assured denotation of application semantics |
AU2004252918B2 (en) * | 2003-06-25 | 2009-12-10 | Ab Initio Technology Llc. | Computer-aided parallelizing of computation graphs |
US7228308B2 (en) * | 2003-11-12 | 2007-06-05 | International Business Machines Corporation | Method and system for direct linkage of a relational database table for data preparation |
US7467383B2 (en) * | 2004-03-08 | 2008-12-16 | Ab Initio Software Llc | System for controlling task execution using a graphical representation of task dependency |
US20050223378A1 (en) * | 2004-03-31 | 2005-10-06 | Mehmet Musa | Method and apparatus for enhancing computer application performance |
US20060004846A1 (en) * | 2004-06-16 | 2006-01-05 | Bmc Software, Inc. | Low-overhead relational database backup and restore operations |
US7590620B1 (en) * | 2004-06-18 | 2009-09-15 | Google Inc. | System and method for analyzing data records |
US7840914B1 (en) | 2005-05-13 | 2010-11-23 | Massachusetts Institute Of Technology | Distributing computations in a parallel processing environment |
CA2593902A1 (en) * | 2006-07-31 | 2008-01-31 | Avid Technology, Inc. | Efficient processing of operator graphs representing three-dimensional character animation |
US20080189251A1 (en) * | 2006-08-25 | 2008-08-07 | Jeremy Branscome | Processing elements of a hardware accelerated reconfigurable processor for accelerating database operations and queries |
US20080082644A1 (en) * | 2006-09-29 | 2008-04-03 | Microsoft Corporation | Distributed parallel computing |
US7844959B2 (en) * | 2006-09-29 | 2010-11-30 | Microsoft Corporation | Runtime optimization of distributed execution graph |
US8201142B2 (en) * | 2006-09-29 | 2012-06-12 | Microsoft Corporation | Description language for structured graphs |
US8250556B1 (en) | 2007-02-07 | 2012-08-21 | Tilera Corporation | Distributing parallelism for parallel processing architectures |
US7861222B2 (en) * | 2007-06-13 | 2010-12-28 | Microsoft Corporation | Discoscript: a simplified distributed computing scripting language |
US8537160B2 (en) * | 2008-03-05 | 2013-09-17 | Microsoft Corporation | Generating distributed dataflow graphs |
US8112742B2 (en) * | 2008-05-12 | 2012-02-07 | Expressor Software | Method and system for debugging data integration applications with reusable synthetic data values |
US8069210B2 (en) * | 2008-10-10 | 2011-11-29 | Microsoft Corporation | Graph based bot-user detection |
WO2011005881A1 (en) * | 2009-07-07 | 2011-01-13 | Howard Robert S | System and method of automatically transforming serial streaming programs into parallel streaming programs |
US8266159B2 (en) * | 2009-08-18 | 2012-09-11 | Benchworkzz, LLC | System and method for providing access to log data files |
US9003380B2 (en) * | 2010-01-12 | 2015-04-07 | Qualcomm Incorporated | Execution of dynamic languages via metadata extraction |
US9665620B2 (en) * | 2010-01-15 | 2017-05-30 | Ab Initio Technology Llc | Managing data queries |
CN102314460B (zh) | 2010-07-07 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 数据分析方法、系统及服务器 |
KR101803303B1 (ko) | 2010-12-21 | 2017-12-29 | 삼성전자주식회사 | 멀티미디어 아키텍처 패턴 결정 방법, 싱글코어에서 멀티코어 기반으로의 아키텍처 전환 장치 및 방법 |
US9116955B2 (en) | 2011-05-02 | 2015-08-25 | Ab Initio Technology Llc | Managing data queries |
WO2015085291A1 (en) | 2013-12-06 | 2015-06-11 | Ab Initio Technology Llc | Source code translation |
CN103942099B (zh) * | 2014-04-30 | 2017-11-28 | 广州唯品会网络技术有限公司 | 基于Hive的并行执行任务方法及装置 |
DE102014212437A1 (de) * | 2014-06-27 | 2016-01-14 | Siemens Aktiengesellschaft | System zur verbesserten Parallelisierung eines Programmcodes |
JP6375201B2 (ja) * | 2014-10-24 | 2018-08-15 | 株式会社野村総合研究所 | データフローの自動並列化システム |
US10437819B2 (en) | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
US10417281B2 (en) | 2015-02-18 | 2019-09-17 | Ab Initio Technology Llc | Querying a data source on a network |
US20170091317A1 (en) | 2015-09-28 | 2017-03-30 | Microsoft Technology Licensing, Llc | Location correlation between query script and data flow |
US9535934B1 (en) * | 2015-11-17 | 2017-01-03 | International Business Machines Corporation | Schema lifecycle manager |
EP3602297B1 (en) * | 2017-03-29 | 2023-03-22 | AB Initio Technology LLC | Systems and methods for performing data processing operations using variable level parallelism |
US10409573B1 (en) | 2018-02-19 | 2019-09-10 | International Business Machines Corporation | Batch script decomposer |
US10866831B2 (en) * | 2018-06-15 | 2020-12-15 | Sap Se | Distributed execution of data processing pipelines |
CN111723088B (zh) * | 2019-03-20 | 2024-04-05 | 北京沃东天骏信息技术有限公司 | 一种推送汇总层表的方法和装置 |
US11093223B2 (en) * | 2019-07-18 | 2021-08-17 | Ab Initio Technology Llc | Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods |
US11138232B1 (en) * | 2020-10-15 | 2021-10-05 | Snowflake Inc. | Export data from tables into partitioned folders on an external data lake |
WO2022165321A1 (en) | 2021-01-31 | 2022-08-04 | Ab Initio Technology Llc | Data processing system with manipulation of logical dataset groups |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01108638A (ja) * | 1987-10-21 | 1989-04-25 | Hitachi Ltd | 並列化コンパイル方式 |
US5396627A (en) * | 1987-11-06 | 1995-03-07 | Hitachi, Ltd. | Method of producing object program based on interprocedural dataflow analysis of a source program |
JP2738692B2 (ja) * | 1988-01-29 | 1998-04-08 | 株式会社日立製作所 | 並列化コンパイル方法 |
US5072371A (en) | 1989-03-01 | 1991-12-10 | The United States Of America As Represented By The United States Department Of Energy | Method for simultaneous overlapped communications between neighboring processors in a multiple |
US5121494A (en) | 1989-10-05 | 1992-06-09 | Ibm Corporation | Joining two database relations on a common field in a parallel relational database field |
US5367619A (en) | 1990-04-27 | 1994-11-22 | Eaton Corporation | Electronic data entry system employing an expert system to facilitate generation of electronic data forms with complex interrelationships between fields and subforms |
US5347639A (en) | 1991-07-15 | 1994-09-13 | International Business Machines Corporation | Self-parallelizing computer system and method |
US5632022A (en) | 1991-11-13 | 1997-05-20 | The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration | Encyclopedia of software components |
US5313584A (en) | 1991-11-25 | 1994-05-17 | Unisys Corporation | Multiple I/O processor system |
JPH05257709A (ja) * | 1992-03-16 | 1993-10-08 | Hitachi Ltd | 並列化判別方法およびそれを用いた並列化支援方法 |
US5432940A (en) * | 1992-11-02 | 1995-07-11 | Borland International, Inc. | System and methods for improved computer-based training |
US5574898A (en) * | 1993-01-08 | 1996-11-12 | Atria Software, Inc. | Dynamic software version auditor which monitors a process to provide a list of objects that are accessed |
US5446915A (en) | 1993-05-25 | 1995-08-29 | Intel Corporation | Parallel processing system virtual connection method and apparatus with protection and flow control |
JPH0736680A (ja) * | 1993-07-23 | 1995-02-07 | Omron Corp | 並列化プログラム開発支援装置 |
US5475842A (en) | 1993-08-11 | 1995-12-12 | Xerox Corporation | Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution |
US5600833A (en) * | 1993-09-17 | 1997-02-04 | Digital Equipment Corp. | Attribute portion based document retrieval system with system query language interface |
US5590319A (en) * | 1993-12-15 | 1996-12-31 | Information Builders, Inc. | Query processor for parallel processing in homogenous and heterogenous databases |
US5742806A (en) * | 1994-01-31 | 1998-04-21 | Sun Microsystems, Inc. | Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system |
JP4050339B2 (ja) | 1994-04-28 | 2008-02-20 | 株式会社東芝 | 並行プログラム作成支援装置及び並行プログラム作成方法並びに並行プログラム実行装置 |
US5860009A (en) | 1994-04-28 | 1999-01-12 | Kabushiki Kaisha Toshiba | Programming method for concurrent programs and program supporting apparatus thereof |
US5768564A (en) * | 1994-10-07 | 1998-06-16 | Tandem Computers Incorporated | Method and apparatus for translating source code from one high-level computer language to another |
US5734886A (en) | 1994-11-16 | 1998-03-31 | Lucent Technologies Inc. | Database dependency resolution method and system for identifying related data files |
US5706509A (en) | 1995-04-28 | 1998-01-06 | Intel Corporation | Application independent record level synchronization |
US5682537A (en) | 1995-08-31 | 1997-10-28 | Unisys Corporation | Object lock management system with improved local lock management and global deadlock detection in a parallel data processing system |
US5712971A (en) * | 1995-12-11 | 1998-01-27 | Ab Initio Software Corporation | Methods and systems for reconstructing the state of a computation |
US5819021A (en) | 1995-12-11 | 1998-10-06 | Ab Initio Software Corporation | Overpartitioning system and method for increasing checkpoints in component-based parallel applications |
US6311265B1 (en) | 1996-03-25 | 2001-10-30 | Torrent Systems, Inc. | Apparatuses and methods for programming parallel computers |
US5909681A (en) | 1996-03-25 | 1999-06-01 | Torrent Systems, Inc. | Computer system and computerized method for partitioning data for parallel processing |
US5799149A (en) * | 1996-06-17 | 1998-08-25 | International Business Machines Corporation | System partitioning for massively parallel processors |
US5870743A (en) * | 1996-06-24 | 1999-02-09 | Oracle Corporation | Method and apparatus for parallelizing operations that create a table |
US5966072A (en) | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
JPH10232875A (ja) | 1997-02-19 | 1998-09-02 | Hitachi Ltd | データベース管理方法および並列データベース管理システム |
US6330008B1 (en) | 1997-02-24 | 2001-12-11 | Torrent Systems, Inc. | Apparatuses and methods for monitoring performance of parallel computing |
US5999729A (en) | 1997-03-06 | 1999-12-07 | Continuum Software, Inc. | System and method for developing computer programs for execution on parallel processing systems |
JP3155991B2 (ja) | 1997-04-09 | 2001-04-16 | 日本アイ・ビー・エム株式会社 | 集約演算実行方法及びコンピュータ・システム |
US5956704A (en) * | 1997-06-05 | 1999-09-21 | Oracle Corporation | Method and apparatus for parallelizing operations that insert data into an existing data container |
US6077313A (en) * | 1997-10-22 | 2000-06-20 | Microsoft Corporation | Type partitioned dataflow analyses |
US6295518B1 (en) * | 1997-12-09 | 2001-09-25 | Mci Communications Corporation | System and method for emulating telecommunications network devices |
US6266804B1 (en) * | 1997-12-23 | 2001-07-24 | Ab Initio Software Corporation | Method for analyzing capacity of parallel processing systems |
US6205465B1 (en) * | 1998-07-22 | 2001-03-20 | Cisco Technology, Inc. | Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information |
JP2000148699A (ja) | 1998-11-06 | 2000-05-30 | Nec Corp | ネットワークマネージメントシステム |
-
1999
- 1999-01-13 US US09/229,849 patent/US7047232B1/en not_active Expired - Lifetime
-
2000
- 2000-01-13 CA CA002360286A patent/CA2360286C/en not_active Expired - Lifetime
- 2000-01-13 AU AU26126/00A patent/AU2612600A/en not_active Abandoned
- 2000-01-13 EP EP00904353.0A patent/EP1228439B1/en not_active Expired - Lifetime
- 2000-01-13 JP JP2000594025A patent/JP4422345B2/ja not_active Expired - Lifetime
- 2000-01-13 WO PCT/US2000/000934 patent/WO2000042518A1/en active Search and Examination
-
2006
- 2006-03-08 JP JP2006062373A patent/JP2006236360A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2000042518A1 (en) | 2000-07-20 |
WO2000042518A9 (en) | 2001-09-13 |
AU2612600A (en) | 2000-08-01 |
EP1228439A1 (en) | 2002-08-07 |
CA2360286C (en) | 2007-09-25 |
EP1228439B1 (en) | 2015-12-30 |
CA2360286A1 (en) | 2000-07-20 |
US7047232B1 (en) | 2006-05-16 |
JP2003529808A (ja) | 2003-10-07 |
EP1228439A4 (en) | 2007-01-17 |
JP2006236360A (ja) | 2006-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4422345B2 (ja) | スクリプト駆動ツールの並列処理アプリケーション | |
AU2015342993B2 (en) | Impact analysis | |
US7003759B2 (en) | Collection makefile generator | |
US8566810B2 (en) | Using database knowledge to optimize a computer program | |
US5838979A (en) | Process and tool for scalable automated data field replacement | |
Melnik et al. | Compiling mappings to bridge applications and databases | |
Barbosa et al. | Scalable fine-grained proofs for formula processing | |
US20100175049A1 (en) | Scope: a structured computations optimized for parallel execution script language | |
Assmann | Graph rewrite systems for program optimization | |
US7743368B2 (en) | Method and apparatus for providing class hierarchy information for function devirtualization | |
US7634766B2 (en) | Method and apparatus for pattern-based system design analysis using a meta model | |
WO1997043711A1 (en) | Incremental byte code compilation system | |
US20060122973A1 (en) | Mechanism for defining queries in terms of data objects | |
JP2018510445A (ja) | プログラム性能を向上させる領域特化システムおよび方法 | |
US5625822A (en) | Using sorting to do matchup in smart recompilation | |
JP2009537906A (ja) | データの記憶及び検索を行うためのシステム及び方法 | |
Lipps et al. | OPTRAN-a language/system for the specification of program transformations: System overview and experiences | |
US7409408B2 (en) | Using ViewTypes for accessing instance data structured by a base model | |
Clemm | THE ODIN SYSTEM: AN OBJECT MANAGER FOR EXTENSIBLE SOFTWARE ENVIRONMENTS (EFFICIENT, FILE SYSTEM, PROGRAMMING, DATABASE, TOOL) | |
Rompf et al. | A SQL to C compiler in 500 lines of code | |
US20060136482A1 (en) | Defining and generating a viewtype for a base model | |
Matthes et al. | The database programming language DBPL: User and system manual | |
Kaynar et al. | The IOA simulator | |
EP0856789A2 (en) | Smart recompilation of source program | |
JP2006004145A (ja) | プログラムコード生成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050329 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050629 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20051108 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060308 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20060413 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20060517 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20061020 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20090715 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20090722 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091020 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20091204 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121211 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4422345 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121211 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121211 Year of fee payment: 3 |
|
R360 | Written notification for declining of transfer of rights |
Free format text: JAPANESE INTERMEDIATE CODE: R360 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121211 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131211 Year of fee payment: 4 |
|
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 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |