(58)【調査した分野】(Int.Cl.,DB名)
前記第1のコンポーネントの前記複数のインスタンスから前記ソートされたデータを受信するステップは、第1のキーに従ってソートされた複数のワーク要素を受信するステップを含む、請求項1に記載の方法。
前記第2のコンポーネントは、その複数の入力で受信されたデータが第2のキーに従ってソートされ、前記第1のキーに従って分岐されることを要求する、請求項2に記載の方法。
前記ソート値インジケータを送信するステップは、前記分岐要素の前記複数の出力の各々の上で前記ソート値インジケータを送信し、前記複数の出力の少なくとも1つの上でワーク要素によって到達された前記ソート順序の値を示すステップを含む、請求項2に記載の方法。
前記ソート値インジケータは、前記ソート値インジケータが送信された前記出力から、前記ソート順序においてより早い値を有するワーク要素が提供されないことを、前記第2のコンポーネントに合図する、請求項6に記載の方法。
前記第1のコンポーネントの前記複数のインスタンスから前記ソートされたデータを受信するステップは、第1のキーに従ってソートされた複数のワーク要素を受信するステップを含む、請求項10に記載のコンピュータプログラム。
前記第2のコンポーネントは、その複数の入力で受信されたデータが第2のキーに従ってソートされ、前記第1のキーに従って分岐されることを要求する、請求項11に記載のコンピュータプログラム。
前記ソート値インジケータを送信するステップは、前記分岐要素の前記複数の出力の各々の上で前記ソート値インジケータを送信し、前記複数の出力の少なくとも1つの上でワーク要素によって到達された前記ソート順序の値を示すステップを含む、請求項11に記載のコンピュータプログラム。
前記ソート値インジケータは、前記ソート値インジケータが送信された前記出力から、前記ソート順序においてより早い値を有するワーク要素が提供されないことを、前記第2のコンポーネントに合図する、請求項15に記載のコンピュータプログラム。
前記第1のコンポーネントの前記複数のインスタンスから前記ソートされたデータを受信することは、第1のキーに従ってソートされた複数のワーク要素を受信することを含む、請求項19に記載のコンピュータシステム。
前記第2のコンポーネントは、その複数の入力で受信されたデータが第2のキーに従ってソートされ、前記第1のキーに従って分岐されることを要求する、請求項20に記載のコンピュータシステム。
前記ソート値インジケータを送信することは、前記分岐要素の前記複数の出力の各々の上で前記ソート値インジケータを送信し、前記複数の出力の少なくとも1つの上でワーク要素によって到達された前記ソート順序の値を示すことを含む、請求項20に記載のコンピュータシステム。
前記ソート値インジケータは、前記ソート値インジケータが送信された前記出力から、前記ソート順序においてより早い値を有するワーク要素が提供されないことを、前記第2のコンポーネントに合図する、請求項24に記載のコンピュータシステム。
【発明を実施するための形態】
【0023】
説明
図1A〜
図1Cを参照すると、
図1Aに示す直列計算グラフ100は、簡単な計算グラフの一例であり、状況によっては、
図1B〜
図1Cに示す並列計算グラフ101として実施できる。例えば、入力ファイル110からの各ワーク要素を他の全てのワーク要素と独立して処理できる場合、並列計算グラフ101は、直列計算グラフ100と同一の計算を実行することになる。注意すべきは、同一の計算を実行するとはいえ、直列グラフ100の場合に出力ファイル140が受け取るワーク要素の順序は、並列グラフ101の場合と同一であるとは限らない、ということである。この例では、出力ワーク要素の順序は、計算ネットワークの機能に対して重要ではない。
【0024】
コンポーネントA120の特性に依存して、入力要素を分割してコンポーネントAの各種インスタンスで処理するために、特定種類の分岐要素115が必要なこともある。例えば、計算グラフ100が、特定アカウントにそれぞれ関連付けられたトランザクション記録を処理するためのものである場合、並列計算グラフが直列グラフと機能的に等価であるために、いずれの特定アカウントについての全ての記録も、コンポーネントA120の共通のインスタンスにより処理するよう要求してもよい。直列グラフ100では、コンポーネントA120のインスタンスが1つしかないので、このような要件が満たされる。並列グラフ101では、特定アカウントについての全ての記録がコンポーネントAの共通のインスタンスに送られるという要件は、例えばラウンドロビン分岐要素等、幾つかの1:m分岐要素115の形式ついては保証されない。この例では、適切な分岐要素115がハッシュ関数に従って、各記録におけるアカウントフィールドの値を、分岐要素115の出力の1つとそれぞれ関連付けられたm個の異なる値にマッピングする。いかなる特定ハッシュ値を生み出す記録も、全て同一出力に送られるので、並列グラフ101においてコンポーネントA120の共通のインスタンスにより処理される。このような1:m分岐要素115は、ハッシュ分岐要素と呼ばれる。ハッシュ関数は、分岐要素115の出力のそれぞれに送られる各記録が、平均して数の偏りがないように設計される。
【0025】
直列計算グラフ100に基づいて並列計算グラフ101の仕様を決定するユーザは、直列グラフの仕様を変換して直列グラフの所望の機能を保存する。例えば、
図1Aに示す直列グラフについて、ユーザは、並列処理次数(m)をコンポーネントA120およびB120について規定し(本例ではともに同一の並列処理次数を有する)、分岐要素115および合流要素135をグラフに追加し、そして追加した要素の特性を規定することができる。例えば、コンポーネントA120がアカウント番号に従って分岐された記録を要求する場合、ユーザは、コンポーネントA120の要件を認識し、手動で分岐要素115を構成して、アカウント番号のハッシュ値に従って記録を分割する。
【0026】
一般に、コンポーネントA120の特性に依存して、分岐要素115を規定するユーザは、各種の分岐要素から選択できる。これらの分岐要素の種類には以下が含まれるが、必ずしもこれらに限定されない:
・ワーク要素を分岐する基準となる各ワーク要素内の1つ、または複数のキーにより規定されるハッシュ分岐要素;
・ワーク要素のキー値とは無関係にワーク要素を分割するラウンドロビン分岐要素、普通は異なる出力間を巡回する;および、
・各入力ワーク要素の複製が出力のそれぞれに送られる一斉伝達分岐要素。
【0027】
また、並列処理グラフ101を規定するユーザは、合流要素135の特性を規定しなければならないこともある。例えば、入力ワーク要素は、トランザクション記録にあるアカウント番号等の、ワーク要素のキー値に従ってソートされている場合がある。直列グラフ100では、その順序は保存されよう。しかしながら、並列グラフ101では、異なる分岐が僅かに異なるレートでその出力を処理するだけでも、その順序が乱れることがある。従って、結果的に得られる出力ファイル140の順序が直列グラフ100を用いて拘束されるものと一致すべき場合、合流要素135は様々な分岐から受け取るワーク要素内の特定キー、例えばアカウント番号に従って、その入力をソートすべきであるとユーザは規定できる。
【0028】
出力合流要素135の所望の特性、および合流要素への入力についてなし得る仮定に依存して、並列グラフを規定するユーザは、合流要素の種類を選択する。合流要素の利用可能な種類には、以下が含まれるが、限定はされない:
・ワーク要素を入力から出力へ任意の順序で、例えば合流要素に到着した時間に従って通過させる任意の合流要素;および、
・キーに従って入力をソートしてから出力へ通過させるソート合流要素。
【0029】
図1Aに戻って参照すると、入力ファイル110からのワーク要素を、コンポーネントA120およびコンポーネントB130の両方に適するように分岐できない状況もあり得る。例えば、トランザクション記録の場合、コンポーネントAについてはアカウント番号により、コンポーネントBについては受取人により、ワーク要素を分岐する必要があるかもしれない。このような場合、
図1Cに示すようなコンポーネントAおよびコンポーネントBの対応するインスタンス間の直接リンクは、一般に許容されない。このような直接リンクが不可能なもう1つの状況は、コンポーネントBとは異なる並列処理次数がコンポーネントAに望ましい場合である。例えば、コンポーネントAがコンポーネントBの2倍のリソースを要求する場合、コンポーネントAには2倍の数のインスタンスが規定可能で、それにより、コンポーネントAおよびBの異なる対応インスタンス間の直接リンクが不可能になる。
【0030】
図2A〜
図2Cを参照すると、より一般的な例で、直列グラフと機能的に等価な並列計算グラフの規定が、幾つかのステップで実行される。
図2Aは、コンポーネント間リンク(ICL)205によりリンクされた並列コンポーネントA210およびB240を含む、並列グラフ200の一部を示す。
図2Aのグラフ表現では、ICL205の並列特性は明示的でない。これらの特性は、この手法では、並列グラフ200で実行される計算が、コンポーネントAおよびBが次数1を有する直列グラフと等価となるように決定される。
図2Aでは、コンポーネントAは並列次数mを有し、コンポーネントBは並列次数nを有すると示され、ここで、mは必ずしもnと等しくない。ICL205の特性は、並列コンポーネントB240の直列インスタンスの入力の要件(例えば、分岐または順序要件)、および/または並列コンポーネントA210の直列インスタンスの出力の特性(例えば、分岐またはソート特性)を含む因子に依存する。
【0031】
図2Bを参照すると、第2並列グラフ201は、相互に接続された要素のネットワークとしてICL205を表す。このネットワークは、並列コンポーネントA121と並列コンポーネントB131との間のリンクを提供し、グラフの全体機能が正しくなるように並列コンポーネントを構成する直列コンポーネント間でワーク要素を適切に「シャッフル」する。ICL205のネットワーク表現は、並列コンポーネントA121の出力を取り込む並列分岐要素221、相互接続ネットワーク225、および出力が並列コンポーネントB131への入力を提供する並列合流要素231を用いて、このシャッフルを実行する。
【0032】
この例では、並列コンポーネントA210は並列処理次数mを有し、一方、並列コンポーネントB240は並列処理次数nを有し、これは必ずしもmと同一ではない。並列コンポーネントA210と、並列分岐要素221との間の並列リンクは、m本の直列リンクを表す。並列分岐要素221の出力は、mn(m×n)本の直列リンクを表す。相互接続ネットワーク225は、mn本の入力およびmn本の出力を有する。並列合流要素231は、mn本の入力およびn本の出力を有する。
【0033】
図2Cを参照すると、
図2Bに示す並列計算グラフ201の一部の直列表現で、並列分岐要素221は、分岐要素220のm個のインスタンスにより実施される。これらの分岐要素のそれぞれは、
図1B〜
図1Cに示す分岐要素115と類似した1:nの分岐要素である。並列合流要素231は、合流要素230のn個のインスタンスにより実施される。これらの合流要素のそれぞれは、
図1B〜
図1Cの合流要素135と類似のm:1合流要素である。相互接続ネットワーク225は、分岐要素220の全てのインスタンスが、合流要素230の全てのインスタンスに接続された直列リンクのクロス接続として実施される。並列グラフの代替表現の幾つかでは、単一のシンボルまたはアイコンを用いて分岐要素221と相互接続ネットワーク225との組合せを表し、この組合せもまた「分岐要素」と呼ぶ。
【0034】
このように、
図2Bに示すように並列コンポーネントA210と、並列コンポーネントB240とをリンクするICL205のネットワーク表現を規定するユーザは、(コンポーネント間リンク(ICL)205を形成する相互接続ネットワーク225と併せて)並列分岐要素221および並列合流要素231の特性を規定する。ユーザは、下流コンポーネントB130の認識要件と、上流の並列コンポーネントA121を構成するコンポーネントA120のインスタンスの出力特性についてユーザが為し得る何らかの仮定とに基づいて、これらの特性を選択する。
【0035】
コンポーネント間リンク205の特性を規定する例として、コンポーネントA210は、ワーク要素がアカウント番号に従って分岐されるよう要求し、一方、コンポーネントB240は、出力が郵便番号に従って分岐されるよう要求すると想定する。コンポーネントAへの入力が適切に分岐されたと仮定すると、コンポーネントAの出力もまた同様に分岐されることになる。すなわち、この例では、
図2BのコンポーネントA210の出力は、アカウント番号に従って分岐されることになる。コンポーネント間リンクの1:n分岐要素220のそれぞれは、各ワード要素内の郵便番号キーを用いて、どの出力にワーク要素を渡すかを決定するハッシュ分岐要素である。同一の郵便番号をもつワーク要素は、コンポーネントA210の別々のインスタンスにより処理されているのが一般的であり、従って、1:nハッシュ要素220の別々のインスタンスを通過することになる。同一のハッシュ値と対応する各1:nハッシュ分岐要素220からの出力は、コンポーネント間リンクの共通の合流要素230に渡される。この例では、コンポーネントBに提示されるワーク要素の順序は重要ではないので、合流要素230のそれぞれは、ワーク要素を到着順で対応するコンポーネントに渡す。
【0036】
自動化した、またはコンピュータ支援による、直列グラフを並列化するための手法は、ICL205のネットワーク表現、およびネットワーク表現の全体のリンクおよび要素(例えば、分岐要素)の特性を決定する。ユーザは、
図2Bに示すようなICL205のネットワーク構造を必ずしも考慮せずに、
図2Aに示すようなグラフ表現を用いる。その手法は、コンポーネント間リンクのネットワーク表現の分岐、相互接続、および合流要素を明示的に挿入するようユーザに要求することなく、コンポーネント間リンクの要素を追加して、上記手法と基本的に同一の結果を達成する。
【0037】
この自動化した、またはコンピュータ支援による手法の一態様は、計算グラフ内のコンポーネントの幾つか、または全ての入力要件を特性化する情報の使用、およびコンポーネントの幾つか、または全ての出力特性を決定する方法に関する。このために必要な情報は、コンポーネントと関連付けたメタデータとして格納される。このメタデータは自動化した並列化手順により用いられる。
【0038】
直列グラフ(例えば、グラフ200)内の1つ以上のコンポーネントはそれぞれ、コンポーネントが要求する各入力特性に関するメタデータを含む。例えば、コンポーネントの特定の入力を特定の方法で分岐するよう要求する場合、その入力に対する入力メタデータには、どのキーまたはフィールドに従ってワーク要素を分岐しなければならないかのインジケータを含むことができる。コンポーネントが多数の入力を有する場合、各入力は、それと関連付けられた別々のメタデータを有する。例えば、ある入力は、全てのワーク要素の複製が入力に配分されなければならないことを示す一方、別の入力は、ワーク要素が各ワーク要素のアカウント番号により分岐されなければならないことを示す場合がある。
【0039】
コンポーネントへの入力についてのメタデータ特性には、以下の1つ以上を含めることができる:
・分岐する場合、1つまたは複数の特定キーに基づいて入力を分岐しなければならないことを示すインジケータ;
・コンポーネントの各インスタンスが、全てのワーク要素の複製を入力で受け取らなければならないことを示すインジケータ;および、
・入力をソートしなければならないことを示すインジケータ、およびソート順序を定義する1つまたは複数のキー。
【0040】
1つ以上のコンポーネントの別の特性化は、コンポーネントの入力フロー特性、およびコンポーネント自体の特性に基づく各出力フロー特性に関する。このような特性化の一例は、入力フローで順に受け取る各ワーク要素を処理するコンポーネントについてのものである。このようなコンポーネントについて、入力ワーク要素が特定キーに基づいてソートされる場合、コンポーネント内で順序変更がないので、出力ワーク要素もまた、その同一キーに従ってソートされる。同様に、特定キーに従って分岐されたワーク要素をコンポーネントが受け取る場合、そのキーの値をコンポーネントが修正しない場合、出力ワーク要素は、そのキーに基づいて分岐したままとなる。(注意すべきは、コンポーネントがキーの値を修正する場合、出力がもはやキーの修正値に従って分岐されるとは限らない、ということである)。
【0041】
この特性化は、一般に、コンポーネントの各入力フロー特性を受け入れ、各出力フローについての特性を作り出す、コンポーネントに特有のマッピング機能を定義する。
【0042】
フローの特性化は、コンポーネントに対する入力要件の特性化と類似している。特に、フローの特性化には、以下を含めることができる:
・フローがワーク要素の分岐サブセットだけを含むことを示すインジケータ、分岐する場合は、フローを分岐する基準となった1つまたは複数の特定キー;および、
・フローがソートされていることを示すインジケータ、およびソート順序を定義する1つまたは複数のキー。
【0043】
コンポーネントについての入力特性から出力特性へのマッピングをコード化する幾つかの代替法を用いることができる。例えば、マッピングは、コンポーネントと関連付けられた手順命令内で明示的にコード化できる。マッピングをコード化する別の方法は、コンポーネントがワーク要素内のどのキー値を修正すると、ソート順序または分岐が乱れる可能性があるかのインジケータ、およびそのコンポーネントが明示的に実施するソート、順序変更、または分岐に関する明示的なインジケータに基づく。マッピングは、入力特性およびこれらの表示に基づき、例えば、一般的な、またはコンポーネントに特有の一組の規則を用いる。このようなマッピング規則の例には以下が含まれる:
・1入力および1出力を持ち、キーkey1の値の修正を示さないコンポーネントについては、key1に従って分岐された入力は、key1に従って分岐されたままの出力を生じる;
・1入力および1出力を持ち、キーkey2の値の修正を示さないコンポーネントについては、key1、続いてKey2に従ってソートされた入力は、key1だけに従ってソートされた出力を生じる;
・入力ワーク要素の順序変更を示すコンポーネント。ソートされた入力は、それ以上ソートされないことを示す出力を生じる。なぜなら、そのコンポーネントはソート順序を乱しているかもしれないからである;および、
・キーkey1の値に従ってソートを明示的に実施するコンポーネントは、入力のソート順序とは無関連にkey1に従って出力がソートされることを示す。
【0044】
コンポーネントには、ワーク要素内のフィールド名を変更するものもある。このようなコンポーネントについてのメタデータは、このような名称変更を識別し、出力特性は新規に命名した変数により表される。例えば、入力が「アカウント」キーにより分岐され、かつ「アカウント」フィールドが「顧客」フィールドとして名称変更される場合、出力は、「顧客」フィールドに従って分岐されるとして特性化される。
【0045】
図3を参照すると、直列計算グラフから並列計算グラフを規定するための自動化した手順300は、並列化すべき直列グラフの仕様を受け入れるステップで開始する(ステップ310)。この仕様には、各コンポーネントのどの出力がフローにより別のコンポーネントの各入力に接続されるかを規定するグラフのトポロジとも呼ばれるグラフの構造の仕様が含まれる。仕様には、上記各コンポーネントについてのメタデータ、すなわち、もしあれば、1つ以上のコンポーネントの各入力についての入力要件、およびコンポーネントについての入力特性と出力特性との間のマッピング、またはコンポーネント出力の他の特性化も含まれる。注意すべきは、このメタデータは、あるコンポーネントはいかなる入力要件も規定せず、また、あるコンポーネントは出力フローの特性を生み出すマッピングを提供しないという点で、任意であるということである。コンポーネントがいかなる入力特性も規定しない場合、手順は、入力フローについての何らかの特定の特性を必ずしも強化するとは限らない。コンポーネントが、その出力フローの特性を生み出すマッピングを提供しない場合、手順は、これらの特性に関する何らかの仮定を行うとは限らない。
【0046】
本手順でユーザは、計算グラフの各コンポーネントに対して所望の並列処理次数を規定する。本手順の応用の一例として、
図1Aに示す単純な直列計算グラフ100を検討する。コンポーネントA120がm=3個の並列インスタンスを有し、およびコンポーネントB130がn=5個の並列インスタンスを有することをユーザが規定すると仮定する。この例では、入力ファイル110および出力ファイル140は、物理ファイルを表す並列次数1を有し、直列アクセスをサポートする。
【0047】
最初の直列グラフの各リンクに対して、手順は、コンポーネント間リンク(すなわち、分岐要素、相互接続ネットワーク、および合流要素)の特性を決定して、並列計算グラフの直列リンクを実施する。手順は、次の4段階を繰り返す:
(a)1つ以上のコンポーネントの入力から出力へのリンク特性をマッピングするステップ(ステップ320);
(b)上流コンポーネントの出力特性が既知である各コンポーネント間リンクに対して、下流の入力の既知の要件のいずれかに基づいて、コンポーネント間リンクの分岐要素、相互接続ネットワーク、および合流要素を含む、コンポーネント間リンクの特性を決定するステップ(ステップ330);
(c)ステップ(b)で処理されたコンポーネント間リンクのそれぞれについて、コンポーネント間リンクの出力と関連付けられた下流コンポーネントの結果的に得られる入力フロー特性を決定するステップ(ステップ340);および、
(d)コンポーネント間リンクのネットワーク表現のコンポーネントを、並列グラフの対応するコンポーネント間に挿入するステップ(ステップ350)。
【0048】
全ての並列リンクが処理されると(ステップ360)、並列コンポーネントのそれぞれを展開することにより、等価な直列計算グラフが形成される。
【0049】
手順のマッピング段階(ステップ320)では、通常全てではないコンポーネントからの1つ以上の出力フロー特性が計算される。例えば、最初の繰り返しで、入力がないコンポーネントからのフロー特性が計算できる。続く繰り返しでは、全ての入力フローについて入力特性を計算した任意のコンポーネントについてのマッピングを用いて、そのコンポーネントの出力フロー特性を決定する。
【0050】
次の段階(ステップ330)で、1つ以上のコンポーネント間リンクの分岐および合流要素の特性が、そのリンクの上流コンポーネントの並列処理次数(m)、および下流コンポーネントの並列処理次数(n)、上流コンポーネントからの出力フローの特性、および下流コンポーネントの入力フローの要件に基づいて決定される。以下は直接取り扱うことができる幾つかの事例である:
(P1)m=nで、かつ下流コンポーネントへの入力フローを、いずれかの特定キーに基づいて分岐、またはソートする必要がなく、入力フローが各ワーク要素の複製を必要としない場合、上流および下流コンポーネントの対応するインスタンスは、
図1Bの例に示すように、直接接続される。注意すべきは、これは、基本的に分岐および合流要素の退化した形式に相当する、ということである。
(P2)m≠nで、かつ下流コンポーネントへの入力フローを、いずれかの特定キーに基づいて分岐する必要がなく、入力フローが各ワーク要素の複製を必要としない場合、コンポーネント間リンクの分岐要素は、ラウンドロビン分配を実行するよう定義する。
(P3)下流コンポーネントへの入力フローが、上流コンポーネントの出力フローの分岐と異なる一組のキーに従ってワーク要素を分岐することを要求する場合、分岐要素は、要求されたキー値に従ってハッシュ分岐を実行する。
(P4)入力フローが各ワーク要素の複製を要求する場合、コンポーネント間リンクの分岐要素は、一斉伝達機能を実行するよう定義する。
【0051】
事例(P2)〜(P4)のそれぞれについて、下流コンポーネントの入力フロー特性に適合させるためのコンポーネント間リンクの合流要素に関する幾つかの特別な場合がある:
(G1)下流コンポーネントの入力フローが、入力が特定組のキーに従ってソートされることを要求し、かつ上流コンポーネントの出力がこれらと同じキーに従ってソートされる場合、合流要素はソート合流を実行する。ソート合流では、合流要素は、入力のそれぞれのワーク要素がソートされると仮定し、ソートキーに従って次にどの入力を出力として選択するかを選択し、出力の正しいソート順序を達成する。
(G2)下流コンポーネントの入力フローが、入力が特定組のキー(key1、...、keyJ)に従ってソートされることを要求し、かつ上流コンポーネントの出力が一組のキー(key1、...、keyJ、...、keyK)に従ってソートされる場合、分岐要素は、ソート化合流を実行する。J=Kの場合、特別な場合(G1)に帰着する。
(G3)入力フローが、入力が特定組のキーに基づいてソートされることを要求し、かつ上流コンポーネントの出力が互換性のある組のキーに従ってソートされない場合、合流要素はソートを実行する。
【0052】
他の形式の分岐および合流要素を用いることもできる。例えば、m=nで、かつ下流コンポーネントが、いずれの特定の分岐も要求しないが、特定キーに従うソートを要求する場合、対応する上流および下流コンポーネントは、要求されるソートを実行する1入力/1出力の「合流」要素だけを有するコンポーネント間リンクにより接続できる。注意すべきは、コンポーネント間リンクへの入力は分岐を維持し、コンポーネント間リンクはソートされた特性を追加するということである。
【0053】
サイクルの次の段階(ステップ340)では、下流コンポーネントの入力フロー特性は、上流コンポーネントの出力フロー特性、および中間のコンポーネント間リンクの特性から決定される。注意すべきは、一般に、少なくとも入力に対する要求特性は、これらのフロー上に存在するということである。コンポーネントの出力フローの特性に反映させられる追加の特性も存在し得る。例えば、フローがあるキーに従って分岐され、かつ下流コンポーネントが、入力が別のキーでソートされることを要求する場合、ソートだけが要求されているにもかかわらず、結果的に得られるフローは、分岐およびソートの両方が行われる。
【0054】
サイクルの最後の段階(ステップ350)では、コンポーネント間リンクのネットワーク表現の要素がグラフに追加される。
【0055】
サイクルの各繰り返し(ステップ320〜350)の最後に、コンポーネントへの追加入力フローの特性が計算される。最初の計算グラフが非循環の場合、最初のグラフの全てのリンクが処理された時に本手順は終了する。
【0056】
全てのリンクが処理されなかった場合、例えば、上流コンポーネントの出力フローの特性が計算されなかった場合、手順を再開する手法は、コンポーネント間リンクの特性を決定する際に、フロー特性に関する仮定を行わないことである。このような再スタートは、非循環でない計算グラフで、または幾つかのコンポーネントについてメタデータが利用可能でないグラフで要求されることがある。例えば、フローが実際には既に分岐されていたとしても、冗長な分岐要素をコンポーネント間リンクに挿入できる。効率的ではない可能性もあるが、並列グラフの正しい機能は依然として保たれよう。
【0057】
上記の自動化した手順では、ユーザにコンポーネント間リンクのコンポーネントの挿入を明示的に指示できる。代替として、ユーザは、元の直列計算グラフのリンクのそれぞれに導入されるコンポーネント間リンクの性質を意識しなくてもよい。ユーザインターフェースは、これらの分岐および合流要素を隠すか、またはデフォルトでコンポーネント間リンクのネットワーク表現を表示するのではなく、ユーザが操作するこれら要素のオプション表示を提供できる。
【0058】
コンピュータ支援(例えば、部分的に自動化した)モードでは、分岐および合流要素の幾つかを明示的に導入することにより、ユーザがその手順を導く。例えば、ユーザは、自動化した手順が適用される前に、特定の分岐および合流要素、または他の形式の要素を並列リンク上で用いるよう規定でき、それにより、そのリンクに対する自動化した手順をオーバーライドできる。コンピュータ支援モードの別の態様では、ユーザは自動化した処理の結果を調査し、コンポーネント間リンクの分岐および合流要素を修正できる。注意すべきは、ユーザがリンクを修正した後、自動化した処理はオプションとして、そのリンクから下流にフロー特性を伝搬する。下流の変化は、下流のコンポーネント間リンクの新仕様をもたらすことになる。
【0059】
別のコンピュータ支援モードでは、自動化した手順は、各コンポーネントの入力要件が満たされていることを検証し、満たされていない場合、ユーザに通知する。次いで、ユーザは、入力要件を満たす要素を導入でき、次に、システムは改良した設計を自動的に再チェックできる。このモードの変形として、システムは、入力要件を満たすためにグラフの修正(例えば、コンポーネント間リンク上への分岐または合流要素の可能な挿入)を提案してもよく、ユーザは提案された修正を用いることを確認するか、または代替の修正(例えば、異なる要素の挿入、または挿入した要素の異なる特性の規定)を提供する。
【0060】
上記の並列処理手法では、ユーザは、コンポーネントのそれぞれについて特定の並列処理次数を選択してから、自動手順を適用する。代替の手法では、ユーザは、どのコンポーネントが並列処理されるか、またはそれらの並列処理次数と関連付けられた変数の識別だけを行うが、所望する並列処理の次数を必ずしも規定するとは限らない。その結果は、各コンポーネント間リンクの特性が決定される「一般的な」並列計算グラフとなるが、並列コンポーネントと同様に、コンポーネント間リンクのネットワーク表現における並列要素の特定の実現は、まだ決定されていない。コンポーネントについての所望の並列処理次数の特定の値を用いることを規定する場合(例えば、グラフの実行時間に)、一般的なグラフは、特定の並列化した形式で実現される。
【0061】
上記の並列化手法では、フロー特性は、基本的に「あふれる」手法で伝搬される。すなわち、データフロー特性は、データフロー自体と同一の方向で「下流に」伝搬する。代替の手法を用いてもよい。例えば、上流への伝搬を用いることができる。このような上流伝搬の単純な実施例を、一連の2つのコンポーネントAおよびBがある場合に用いることができる。AおよびBがともに同一の並列処理次数を有し、Bがキーに従う分岐を要求し、Aがいずれの特定の分岐も要求しない場合、分岐要件を上流に伝搬して、それによりAがBと同一の分岐を要求することもできる。こうして、AとBとの間の明示的な分岐および合流要素を導入することなく、AおよびBの対応するインスタンス間の直接リンクを用いることが可能になる。
【0062】
直列グラフのコンポーネントは、直列サブネットワークの全体を表すこともできる。自動並列化手法の一手法は、直列サブネットワークがそのホストグラフ内で完全に展開されるかのように、サブネットワークを並列化することである。
【0063】
代替の手法では、直列サブネットワークは、それをホストするネットワークと独立して並列化される。サブネットワークを通じたフロー特性の全体マッピングを含む、全体としてのサブネットワークの特性化を行うメタデータは、ホストネットワークの並列化手順中に用いるために、サブグラフ内のコンポーネントについてのメタデータに基づいて計算される。
【0064】
上記並列化した計算グラフで用いることができる要素の一種は、ソートマージ要素である。上で注記したように、ソートマージ要素が仮定するのは、その入力のそれぞれのワーク要素が特定のソート順序に従ってソートされ、ソートマージ要素は、同一のソート順序に従って全体のマージ出力を生成しなければならないということである。このようなソートマージ要素が後続する場合の基本手順は、その入力のそれぞれで保留されている各ワーク要素を考慮し、ソート順序に従って、次のワーク要素を出力として通過させることである。
【0065】
しかしながら、どの入力にも保留中のワーク要素がない場合、ソートマージは、その入力に後から到着するワーク要素が既に保留となっている入力より早いソート順序で発生するかどうか判らないので、どのワーク要素も通過させない。次いで、ワーク要素は、フロー終了のインジケータがリンクに到着するまで保持され、到着した時点で、ソートマージ要素は、それ以上のワーク要素がそのフローに到着しないと見なすことができる。
【0066】
このような阻止挙動が並列化したグラフに発生する状況もある。例えば、m個のインスタンスのそれぞれ、またはコンポーネントAの出力が、キーkey1に従ってソートされ、下流コンポーネントBが、入力がキーkey2に従ってソートされ、キーkey1に従って分岐されるよう要求すると想定する。key1に従うAの出力の分岐がメタデータにより規定されない場合、並列化手法は、key1に従って分岐するコンポーネント間リンク内のハッシュ分岐要素、続いてkey2に従ってソートするソート合流を用いる。しかしながら、コンポーネントAの出力が既にハッシュ分岐されている場合、各ハッシュ分岐要素に対して、1出力だけが何らかのワーク要素を受け入れる。同様に、結果として、ソートマージ要素で、各ソートマージ要素に対して1入力だけが入力を受け入れる。これは、フロー終了インジケータがハッシュ分岐要素からソートマージ要素に渡されるまで、全体のフローを不必要に妨げる。
【0067】
この状況を避ける方法は、ソートされた入力を受け取るハッシュ分岐要素が、その出力リンクのそれぞれについてソート値インジケータを繰り返し送って、その出力の内の少なくとも1つが到達したソート順序の値を示すことである。このソート値インジケータは、ソート順序で早い値をもつワーク要素が、このリンクを介して提供されないことを下流コンポーネントに合図する。このようなソート値インジケータを受け取るソートマージ要素は、インジケータを用いて、例えば、受け取ったソート値インジケータの値に先行するソート値を有するという理由で、別の入力から保留になっているワーク要素を渡すことができるかどうかを決定する。
【0068】
ソート値インジケータは、コンポーネントを通じてワーク要素のフローに基づいてできるだけ頻繁に、または少ない頻度で、例えば、処理されるワーク要素の数に従って、もしくは時間に従って、周期的に送ることができる。ソート値インジケータは、分岐され得る任意のソートされたフロー上で送ることができ、このようなインジケータは、インジケータを受け取る分岐要素の出力上で一斉伝達される。
【0069】
下流のソートマージ要素を妨げる問題に対する別の解決法は、上流のハッシュ分岐要素の入力をスクランブルすることであり、それにより、一般に、少なくとも幾つかのワーク要素がハッシュ分岐要素の各出力に渡される。
【0070】
上記自動手法はコンピュータ上で実行するためのソフトウエアを用いて実装できる。例えば、ソフトウエアは、少なくとも1個のプロセッサ、少なくとも1台のデータ格納システム(揮発性または不揮発性メモリ、および/または格納素子を含む)、少なくとも1台の入力装置またはポート、および少なくとも1台の出力装置またはポートを含む、1台以上のプログラムされた、またはプログラム可能なコンピュータシステム(分散、クライアント/サーバ、またはグリッド等の各種アーキテクチャのものでよい)上で実行される1つ以上のコンピュータプログラムで手順を形成する。ソフトウエアは、例えば計算グラフの設計および構成に関する他のサービスを提供する、より大きなプログラムの1つ以上のモジュールを形成してもよい。
【0071】
ソフトウエアは、汎用もしくは専用のプログラム可能なコンピュータにより可読のCD−ROM等の媒体で提供するか、または実行されるコンピュータにネットワークを介して配信(伝搬される信号でコード化して)できる。全ての機能は、専用のコンピュータ上で、またはコプロセッサ等の専用のハードウエアを用いて、実行できる。ソフトウエアは、ソフトウエアが規定する計算の異なる部分を異なるコンピュータで実行する分散式で実装してもよい。このようなコンピュータプログラムはそれぞれ、汎用もしくは専用のプログラム可能なコンピュータにより可読の格納媒体もしくは装置(例えば、固体メモリもしくは媒体、または磁気式もしくは光学式媒体)に格納またはダウンロードして、格納媒体もしくは装置をコンピュータシステムが読み取って、本明細書で説明する手順で実行する際、コンピュータを構成し、動作させるのが好ましい。本発明のシステムは、コンピュータプログラムを伴って構成したコンピュータ可読の格納媒体として実装することも考えられ、そのように構成された格納媒体は、コンピュータシステムを特定の、および所定の方法で動作させて、本明細書で説明した機能を実行する。
【0072】
言うまでもなく、先に述べた説明は、説明を意図としたものであり、付帯の請求の範囲が定義する本発明の範囲を制限するものではない。他の実施の形態は、以下の請求の範囲内にある。