(58)【調査した分野】(Int.Cl.,DB名)
動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための、ソフトウェアを非一時的形態で記憶するコンピュータ可読媒体であって、前記ソフトウェアが、前記コンピューティングシステムに、
前記グラフに基づくプログラムの仕様を受け取ることであって、前記グラフに基づくプログラムの仕様が、
それぞれが少なくとも1つの動作に対応し、1又は2以上のポートを含み、前記ポートが、単一のデータ要素を同時に送る又は受け取るためのスカラデータポート、及び複数のデータ要素のコレクションを同時に送る又は受け取るためのコレクションデータポートを含む、複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記受け取ることと、
動作の1又は2以上のグループを表すコードを生じさせるために前記グラフに基づくプログラムの仕様を処理することであって、
動作の第1グループの第1の境界を特定することであって、前記動作の第1グループへの第1の入口点と前記動作の第1グループからの第1の出口点を、
構成要素のコレクションデータポートを前記複数の構成要素の別の構成要素のスカラデータポートに接続する1又は2以上のリンクの第1の特定に基づいて特定することを含む、特定すること、
動作の前記第1のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて動作の前記第1のグループにおける同時性の可能なレベルを特定すること、
分析される動作の実行に関連するランタイムの特徴を決定するために動作の前記第1のグループ内の前記動作の少なくとも一部を分析することであって、
動作の前記第1のグループ内の動作の繰り返す組の第2の境界を特定することであって、
動作の前記繰り返す組への第2の入口点と動作の前記繰り返す組からの第2の出口点を、構成要素のコレクションデータポートを、前記複数の構成要素の別の構成要素のスカラデータポートに接続する1又は2以上のリンクの第2の特定に基づいて特定することを含む、分析すること、
及び
動作の前記第1のグループ内の前記動作を実行するためのコードを生じさせることであって、前記実行するためのコードが、前記決定されたランタイムの特徴に少なくとも部分的に基づいて、動作の前記第1のグループ内の同時性の可能なレベルよりも低い同時性の下げられたレベルを動作の前記第1のグループ内で施行する、前記生じさせることを含む、前記処理することとを行わせる命令を含む、前記コンピュータ可読媒体。
【発明を実施するための形態】
【0025】
図1を参照すると、タスクに基づく計算システム100が、高レベルのプログラムの仕様110を使用して、プログラムの仕様110によって規定された計算を実行するようにコンピューティングプラットフォーム150の計算及び記憶リソースを制御する。コンパイラ/インタープリタ120は、高レベルのプログラムの仕様110を受け取り、タスクに基づくランタイムインターフェース/コントローラ140によって実行され得る形態のタスクに基づく仕様130を生じさせる。コンパイラ/インタープリタ120は、複数のデータ要素の各々に適用される細分化されたタスクとして個々に又は一体としてインスタンス化され得る1又は2以上の「構成要素」の1又は2以上の「実行セット」を特定する。コンパイル又は解釈プロセスの一部は、下でより詳細に説明されるように、これらの実行セットを特定することと、実行するためにセットを準備することとを含む。コンパイラ/インタープリタ120は、例えば、コンピューティングプラットフォーム150上で実施される計算の効率を最適化するためにさまざまな技術を利用する可能性がある。コンパイラ/インタープリタ120によって生じさせられる目標のプログラムの仕様は、それ自体、タスクに基づく仕様130を生成するためにシステム100の別の部分によってさらに処理される(例えば、さらにコンパイルされる、解釈されるなど)ことになる中間形態である可能性がある。下の検討は、そのような変換の1又は2以上の例を概説するが、例えば、コンパイラの設計に精通する者によって理解されるように、もちろん、変換のその他の手法があり得る。
【0026】
概して、計算プラットフォーム150は、いくつかのコンピューティングノード152(例えば、分散された計算リソースと分散された記憶リソースとの両方を提供する個々のサーバコンピュータ)から構成され、それによって、高度な並列処理を可能にする。高レベルのプログラムの仕様110において表される計算は、比較的細分化されたタスクとしてコンピューティングプラットフォーム150上で実行され、さらに、規定された計算の効率的な並列実行を可能にする。
【0027】
一部の実施形態において、高レベルのプログラムの仕様110は、(データフローグラフにあるような)データのフローと制御のフローとの両方を規定することができる、「データ処理グラフ」と呼ばれる一種のグラフに基づくプログラムの仕様である。データ処理グラフは、コンパイラ/インタープリタ120がデータ処理グラフの構成要素において並列処理を動的に導入することを可能にする、下でより詳細に説明されるように、並列処理をサポートするためのメカニズムも含む。例えば、データ処理グラフの構成要素のインスタンスは、データ処理グラフを実行する文脈でタスク(例えば、1又は2以上の構成要素の動作が実行されるスレッド)としてスポーンされ、概して、コンピューティングプラットフォーム150の複数のコンピューティングノード152において実行される。極めて広く、コントローラ140は、例えば、計算負荷の割り振り、通信又は入力/出力のオーバーヘッドの削減、及びメモリリソースの使用に関連するシステムの性能目標を達成するために、それらのタスクの実行のスケジューリング及び位置(locus)の監視制御の態様を提供する。
【0028】
コンパイラ/インタープリタ120による変換後、計算全体は、コンピューティングプラットフォーム150によって実行され得る目標言語のプロシージャによってタスクに基づく仕様130として表現される。これらのプロシージャは「spawn」及び「wait」などのプリミティブを利用し、高レベルの(例えば、グラフに基づく)プログラムの仕様110内の構成要素に関してプログラマによって規定された作業手順をそれらのプロシージャの中に含むか又はそのような作業手順を呼び出す可能性がある。
【0029】
一部の場合において、構成要素の各インスタンスは、いくつかのタスクが単一の構成要素の単一のインスタンスを実施し、いくつかのタスクが実行セットの複数の構成要素の単一のインスタンスを実施し、いくつかのタスクが構成要素の連続的なインスタンスを実施するようにしてタスクとして実施される。構成要素及びそれらの構成要素のインスタンスからの特定のマッピングは、結果として起こる実行が計算の意味的定義に合致したままであるようにコンパイラ/インタープリタの特定の設計に応じて決まる。
【0030】
概して、ランタイム環境内のタスクは、例えば、1つの最上位のタスクが、例えば、データ処理グラフの最上位の構成要素の各々のために1つずつ複数のタスクをスポーンするようにして階層的に構成される。同様に、実行セットの計算は、複数の(つまり、多くの)サブタスクがコレクションの要素を処理するためにそれぞれ使用されるようにしてコレクション全体を処理するために1つのタスクを有する可能性がある。
【0031】
一部の例において、各コンピューティングノード152は、1又は2以上の処理エンジン154を有する。少なくとも一部の実装形態において、各処理エンジンは、コンピューティングノード150上で実行される単一のオペレーティングシステムプロセスに関連付けられる。コンピューティングノードの特徴に応じて、単一のコンピューティングノード上で複数の処理エンジンを実行することが効率的である可能性がある。例えば、コンピューティングノードは、複数の別々のプロセッサを有するサーバコンピュータである可能性があり、又はサーバコンピュータは、複数のプロセッサコアを有する単一のプロセッサを有する可能性があり、又は複数のコアを有する複数のプロセッサの組合せが存在する可能性がある。いずれの場合も、複数の処理エンジンを実行することが、コンピューティングノード152上で単一の処理エンジンのみを使用するよりも効率的である可能性がある。
【0032】
1 データ処理グラフ
一部の実施形態において、高レベルのプログラムの仕様110は、データに対して実施されるデータ処理の計算の全体の一部をそれぞれが規定する「構成要素」のセットを含む「データ処理グラフ」と呼ばれるある種のグラフに基づくプログラムの仕様である。構成要素は、例えば、プログラミングユーザインターフェース及び/又は計算のデータ表現においてグラフ内のノードとして表される。上の背景技術において説明されたデータフローグラフなどの一部のグラフに基づくプログラムの仕様とは異なり、データ処理グラフは、データの転送、又は制御の転送、又はこれら両方のいずれかを表すノード間のリンクを含み得る。リンクの特徴を示す1つの方法は、構成要素に異なる種類のポートを設けることによる。リンクは、上流の構成要素の出力ポートから下流の構成要素の入力ポートに接続される有向リンクである。ポートは、データ要素がどのようにして書き込まれ、リンクから読まれるのか及び/又は構成要素がデータを処理するためにどのようにして制御されるのかの特徴を表すインジケータを有する。
【0033】
これらのポートは、いくつかの異なる特徴を有する可能性がある。ポートの1つの特徴は、入力ポート又は出力ポートとしてのそのポートの方向性である。有向リンクは、データ及び/又は制御が上流の構成要素の出力ポートから下流の構成要素の入力ポートに運ばれることを表す。開発者は、異なる種類のポートを一緒にリンクすることを可能にされる。データ処理グラフのデータ処理の特徴の一部は、異なる種類のポートがどのようにして一緒にリンクされるのかに依存する。例えば、異なる種類のポート間のリンクは、下でより詳細に説明されるように、階層的形態の並列処理を提供する異なる「実行セット」内の構成要素の入れ子にされたサブセットにつながる可能性がある。特定のデータ処理の特徴が、ポートの種類によって示唆される。構成要素が有する可能性がある異なる種類のポートは、以下を含む。
・構成要素のインスタンスがポートに接続されたリンクを通り越すコレクションのすべてのデータ要素をそれぞれ読むか又は書くことを意味する入力コレクションポート又は出力コレクションポート。構成要素のコレクションポート間の単一のリンクを有する構成要素の対に関して、下流の構成要素は、概して、データ要素が上流の構成要素によって書かれるときにそれらのデータ要素を読むことを可能にされ、上流の構成要素と下流の構成要素との間のパイプライン並列処理を可能にする。下でより詳細に説明されるように、データ要素は、並べ替えられる可能性もあり、それが、並列処理の効率的な働きを可能にする。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなコレクションポートは、概して、構成要素の四角いコネクタ記号によって示される。
・構成要素のインスタンスが、それぞれ、ポートに接続されたリンクから最大で1つのデータ要素を読むか又はポートに接続されたリンクに最大で1つのデータ要素を書くことを意味する入力スカラポート又は出力スカラポート。構成要素のスカラポート間の単一のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が、単一のデータ要素の転送を制御の転送として使用することによって強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなスカラポートは、概して、構成要素の三角のコネクタ記号によって示される。
・スカラ入力又はスカラ出力と同様であるが、いかなるデータ要素も送信される必要がない入力制御ポート又は出力制御ポートであって、構成要素間の制御の転送を伝達するために使用される、入力制御ポート又は出力制御ポート。構成要素の制御ポート間のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が(たとえそれらの構成要素がコレクションポート間のリンクも有するとしても)強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのような制御ポートは、概して、構成要素の丸いコネクタ記号によって示される。
【0034】
これらの異なる種類のポートが、データ処理グラフの柔軟な設計を可能にし、ポートの種類の重なり合う特性によってデータ及び制御フローの強力な組合せを許容する。特に、(「データポート」と呼ばれる)ある形態でデータを運ぶ2つの種類のポート、コレクションポート及びスカラポートが存在し、(「シリアルポート」と呼ばれる)直列実行を強制する2つの種類のポート、スカラポート及び制御ポートが存在する。データ処理グラフは、概して、いかなる接続された入力データポートも持たない「ソース構成要素」である1又は2以上の構成要素と、いかなる接続された出力データポートも持たない「シンク構成要素」である1又は2以上の構成要素とを有する。一部の構成要素は、接続された入力データポートと接続された出力データポートとの両方を有する。一部の実施形態において、グラフは、巡回することを許されず、したがって、有向非巡回グラフ(DAG,directed acyclic graph)でなければならない。この特徴は、下でより詳細に説明されるように、DAGの特定の特徴を利用するために使用され得る。
【0035】
異なる方法で異なる種類のポートを接続することによって、開発者は、データ処理グラフの構成要素のポートの間の異なる種類のリンクの構成を規定することができる。例えば、ある種類のリンクの構成が、特定の種類のポートが同じ種類のポートに接続されることに対応する可能性があり(例えば、スカラ−スカラリンク)、別の種類のリンクの構成が、特定の種類のポートが異なる種類のポートに接続されることに対応する可能性がある(例えば、コレクション−スカラリンク)。これらの異なる種類のリンクの構成は、開発者がデータ処理グラフの一部に関連する意図された振る舞いを視覚的に特定する方法と、その振る舞いを可能にするために必要とされる対応する種類のコンパイルプロセスをコンパイラ/インタープリタ120に示す方法との両方として働く。本明細書において説明される例は異なる種類のリンクの構成を視覚的に表現するために異なる種類のポートに一意の形状を使用するが、システムのその他の実装形態は、異なる種類のリンクを提供し、それぞれの種類のリンクに一意の視覚的インジケータ(例えば、太さ、リンクの種類、色など)を割り当てることによって異なる種類のリンクの構成の振る舞いを区別する可能性がある。しかし、ポートの種類の代わりにリンクの種類を使用して、上で挙げられた3種類のポートによって可能なのと同じさまざまなリンクの構成を表すためには、4種類以上のリンク(例えば、スカラ−スカラ、コレクション−コレクション、制御−制御、コレクション−スカラ、スカラ−コレクション、スカラ−制御など)が存在することになるであろう。
【0036】
コンパイラ/インタープリタ120は、実行するためにデータ処理グラフを準備するための手順を実施する。第1の手順は、構成要素の潜在的に入れ子にされた実行セットの階層を特定するための実行セット発見前処理手順である。第2の手順は、各実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実装する制御コードを形成するためにコンパイラ/インタープリタ120が使用する対応する制御グラフを各実行セットに関して生じさせるための制御グラフ生成手順である。
【0037】
少なくとも1つの入力データポートを有する構成要素は、各入力データ要素若しくはコレクション(又は複数の構成要素の入力ポート上のデータ要素及び/若しくはコレクションのタプル)に対して実施される処理を規定する。そのような規定の1つの形態は、1つの入力データ要素及び/若しくはコレクション又は入力データ要素及び/若しくはコレクションのタプルに対して実施される手順としての形態である。構成要素は、少なくとも1つの出力データポートを有する場合、対応する1つの出力データ要素及び/若しくはコレクション又は出力データ要素及び/若しくはコレクションのタプルを生成し得る。そのような手順は、高レベルのステートメントに基づく言語で(例えば、米国特許第8,069,129号明細書「Editing and Compiling Business Rules」(ビジネスルールの編集及びコンパイル)において使用されたJavaのソースステートメント若しくはデータ操作言語(DML,Data Manipulation Language)を使用して)規定される可能性があり、又は何らかの完全に若しくは部分的にコンパイルされた形態で(例えば、Javaのバイトコードとして)提供される可能性がある。例えば、構成要素は、その構成要素の入力データ要素及び/若しくはコレクション並びにその構成要素の出力データ要素及び/若しくはコレクション、或いはより広く、そのようなデータ要素若しくはコレクションへの、又は入力を獲得し、出力データ要素若しくはコレクションを提供するために使用される手順若しくはデータオブジェクト(本明細書においては「ハンドル」と呼ばれる)への参照を引数が含む作業手順を有する可能性がある。
【0038】
作業手順は、さまざまな種類である可能性がある。規定され得る手順の種類を限定することを意図することなく、ある種類の作業手順は、レコードフォーマットに従ってデータ要素に対する個別的な計算を規定する。単一のデータ要素は、テーブル(又はその他の種類のデータセット)からのレコードである可能性があり、レコードのコレクションは、テーブル内のレコードのすべてである可能性がある。例えば、単一の入力スカラポート及び単一の出力スカラポートを有する構成要素に関するある種類の作業手順は、1つの入力レコードを受け取ることと、そのレコードに対して計算を実施することと、1つの出力レコードを提供することとを含む。別の種類の作業手順は、複数の入力スカラポートから受け取られた入力レコードのタプルが複数の出力スカラポートにおいて送出される出力レコードのタプルを形成するためにどのようにして処理されるかを規定する可能性がある。
【0039】
データ処理グラフによって規定される計算の意味的(semantic)定義は、グラフによって定義される計算の処理の順序付け及び同時性に対する制約及び/又は制約がないことを表すので元来並列的である。したがって、計算の定義は、結果が計算のステップの何らかの逐次的な順序付けと等価であることを必要としない。一方、計算の定義は、計算の部分を順番に並べることを必要とする特定の制約と、計算の部分の並列実行の制限を与える。
【0040】
データ処理グラフの検討において、ランタイムシステム内の別個の「タスク」としての構成要素のインスタンスの実装形態は、順番に並べる制約及び並列実行の制約を表す手段であると考えられる。概して、データ処理グラフ内の各構成要素は、グラフの実行中にコンピューティングプラットフォームにおいて何度かインスタンス化される。各構成要素のインスタンスの数は、複数の実行セットのうちのどれに構成要素が割り当てられるのかに依存する可能性がある。構成要素の複数のインスタンスがインスタンス化されるとき、2つ以上のインスタンスが並列に実行される可能性があり、異なるインスタンスがシステム内の異なるコンピューティングノードにおいて実行される可能性がある。ポートの種類を含む構成要素によって実施される動作及び構成要素の相互接続が、規定されたデータ処理グラフによって認められる並列処理の性質を決定する。
【0041】
さまざまな構成要素の異なる種類のデータポートは、データがそれらの構成要素をリンクする入力ポート及び出力ポートの種類に応じて異なる方法で構成要素間のリンクを通り越すことを可能にする。上述のように、スカラポートは、最大で1つのデータ要素(すなわち、0個か又は1つのデータ要素)の(出力スカラポートのための)生成又は(入力スカラポートのための)消費を表す。一方、コレクションポートは、潜在的に複数のデータ要素のセットの(出力コレクションポートのための)生成又は(入力コレクションポートのための)消費を表す。単一のデータ処理グラフにおいて両方の種類のデータポートをサポートすることによって、そのモデルで開発者が望まれる振る舞いを簡単に示すことを可能にする。
【0042】
図2を参照すると、データ処理グラフ300は、一連の3つの接続された構成要素、第1の構成要素(A1)302、第2の構成要素(B1)304、及び第3の構成要素(C1)306を含む。第1の構成要素は、コレクション型入力ポート308及びスカラ型出力ポート310を含む。第2の構成要素304は、スカラ型入力ポート312及びスカラ型出力ポート314を含む。第3の構成要素は、スカラ型入力ポート316及びコレクション型出力ポート318を含む。
【0043】
第1の構成要素302の出力スカラポート310を第2の構成要素304の入力スカラポート312に接続する第1のリンク320は、データが第1の構成要素302と第2の構成要素304との間を通ることを可能にすることと、同時に、第1の構成要素及び第2の構成要素302、304の直列実行を強制することとの両方を行う。同様に、第2の構成要素304の出力スカラポート314を第3の構成要素306の入力スカラポート316に接続する第2のリンク322は、データが第2の構成要素304と第3の構成要素306との間を通ることを可能にすることと、第2の構成要素及び第3の構成要素304、306の直列実行を強制することとの両方を行う。
【0044】
図2のスカラポートの相互接続が原因で、第2の構成要素304は、第1の構成要素302が完了した(第1のリンク320を介して単一のデータ要素を渡した)後にのみ実行を開始し、第3の構成要素306は、第2の構成要素304が完了した(第2のリンク322を介して単一のデータ要素を渡した)後にのみ実行を開始する。つまり、データ処理グラフの3つの構成要素の各々は、厳格な順番A1/B1/C1で1回実行される。
【0045】
図2の例示的なデータ処理グラフにおいて、第1の構成要素302の入力ポート308及び第3の構成要素318の出力ポートは、たまたまコレクションポートであり、コレクションポートは、第1、第2、及び第3の構成要素302、304、306を接続するスカラポートによって課されるそれらの構成要素の直列実行の振る舞いに影響を与えない。
【0046】
概して、コレクションポートは、構成要素の間でデータ要素のコレクションを渡すことと、同時に、そのセット内のデータ要素を並べ替える承諾をランタイムシステムに与えることとの両方のために使用される。順序付けられていないコレクションのデータ要素の並べ替えは、データ要素間で計算の状態への依存性がないか、又は各データ要素が処理されるときにアクセスされるグローバルな状態が存在する場合に最終状態がそれらのデータ要素が処理された順序に依存しないかのどちらかの理由で許容される。並べ替えのこの承諾は、実行時まで並列処理についての判断を遅らせる柔軟性を提供する。
【0047】
図3を参照すると、データ処理グラフ324は、一連の3つの接続された構成要素、第1の構成要素(A2)326、第2の構成要素(B2)328、及び第3の構成要素(C2)330を含む。第1の構成要素326は、コレクション型入力ポート332及びコレクション型出力ポート334を含む。第2の構成要素328は、コレクション型入力ポート336及びコレクション型出力ポート338を含む。第3の構成要素330は、コレクション型入力ポート340及びコレクション型出力ポート342を含む。
【0048】
3つの構成要素326、328、330の各々は、1又は2以上の入力要素のコレクションが1又は2以上の出力要素のコレクションを生じさせるためにどのようにして処理されるかを規定する。特定の入力要素と特定の出力要素との間に1対1の対応があるとは限らない。例えば、第1の構成要素326と第2の構成要素328との間のデータ要素344の第1のコレクションの中のデータ要素の数は、第2の構成要素328と第3の構成要素330との間のデータ要素346の第2のコレクションの中の要素の数とは異なる可能性がある。コレクションポートの間の接続に課される制約は、コレクション内の各データ要素が、それらのデータ要素が処理される順序に関連して第1の構成要素326と第2の構成要素328との間及び第2の構成要素328と第3の構成要素330との間で任意の並べ替えを許容しながらコレクションポートからコレクションポートへと渡されることだけである。代替的に、その他の例において、コレクションポートは、順序を維持するように構成されていてもよい可能性がある。この例において、3つの構成要素326、328、330は、一緒に開始し、同時に実行され、パイプライン並列処理を許容する。
【0049】
図1に関連して説明されたコンパイラ/インタープリタ120は、コレクションポート間の接続を認識し、実施されている計算にとって適切である方法で計算を実行可能コードに変換するように構成される。コレクションデータリンクの順序付けられていない性質は、これがどのようにして実現されるかの柔軟性をコンパイラ/インタープリタ120に与える。例えば、たまたま、第2の構成要素328に関して、各出力要素が単一の入力要素に基づいて計算される(つまり、データ要素にまたがって保持される状態がない)場合、コンパイラ/インタープリタ120は、(例えばランタイムで利用可能な計算リソースに応じて)データ要素毎に構成要素の1つのインスタンスずつものインスタンスをインスタンス化することによってランタイムシステムがデータ要素の処理を動的に並列化することを可能にし得る。特別な場合に、入力コレクションポートを有する構成要素のデータ要素にまたがって状態が保持されていてもよい可能性がある。しかし、通常の場合でも、ランタイムシステムは、構成要素のタスクを並列化することを可能にされる可能性がある。例えば、ランタイムシステムは、グローバルな状態が保持されていないことを検出する場合、タスクを並列化することを可能にされ得る。一部の構成要素が状態を保持することをサポートするように構成される可能性もあり、その場合、並列処理は許容されない可能性がある。コレクションが順序付けられていない場合、データ要素の間で順序が維持される必要がないという事実は、第2の構成要素328の各インスタンスがそのインスタンスの出力データ要素が利用可能になり次第そのインスタンスの出力データ要素を第3の構成要素330に提供することができ、第3の構成要素330が第2の構成要素328のすべてのインスタンスが終了する前にそれらのデータ要素を処理し始めることができることを意味する。
【0050】
2 実行セット
一部の例において、グラフの開発者は、1つの構成要素のコレクション型出力ポートを別の構成要素のスカラ型入力ポートに接続することによって、データのコレクションの中のデータ要素の処理が動的に並列化され得ることを明示的に示すことができる。そのような構成要素を示すことに加えて、そのような指示は、コレクションの異なる要素の処理の間で状態が保持されないことも必要とする。
図4を参照すると、データ処理グラフ348は、一連の3つの接続された構成要素、第1の構成要素(A3)350、第2の構成要素(B3)352、及び第3の構成要素(C3)354を含む。第1の構成要素350は、コレクション型入力ポート356及びコレクション型出力ポート358を含む。第2の構成要素352は、スカラ型入力ポート360及びスカラ型出力ポート362を含む。第3の構成要素354は、コレクション型入力ポート364及びコレクション型出力ポート366を含む。
【0051】
第1の構成要素のコレクション型出力ポート358は、第1のリンク368によって第2の構成要素352のスカラ型入力ポート360に接続され、第2の構成要素352のスカラ型出力ポート362は、第2のリンク370によってコレクション型入力ポート364に接続される。下でより詳細に説明されるように、コレクション型出力ポートからスカラ型入力ポートへのリンクは、「実行セット」(又は「繰り返す組」)への入口点を示唆し、スカラ型出力ポートからコレクション型入力ポートへのリンクは、実行セットの出口点を示唆する。極めて広く、下でより詳細に説明されるように、実行セットに含まれる構成要素は、データ要素のコレクションからのデータ要素を処理するためにランタイムコントローラによって動的に並列化され得る。
【0052】
図4において、第1の構成要素350のコレクション型出力ポート358と第2の構成要素352のスカラ型入力ポート360との間のリンク368は、実行セットへの入口点を示唆する。第2の構成要素352のスカラ型出力ポート362と第3の構成要素354のコレクション型入力ポート364との間のリンク370は、実行セットの出口点を示唆する。つまり、第2の構成要素352は、実行セットの唯一の構成要素である。
【0053】
第2の構成要素352が実行セットに含まれるので、第1の構成要素350のコレクション型出力ポート358から受け取られるそれぞれのデータ要素のために第2の構成要素352の別々のインスタンスが起動される。別々のインスタンスの少なくとも一部は、実行時まで行われない可能性がある判断に応じて並列に実行され得る。この例において、第1の(350)及び第3の(354)構成要素は、一緒に開始し、同時に実行され、一方、第2の構成要素(352)は、リンク368を介して受け取られるそれぞれのデータ要素のために1回実行される。
図1に関連して上で説明されているように、コンパイラ/インタープリタ120は、実行するためにデータ処理グラフを準備するためにデータ処理グラフに実行セット発見前処理手順を実施する。実行セットは、一体として呼び出され、出力コレクションポートのデータ要素の一部などのデータの一部に適用され得る1又は2以上の構成要素のセットである。したがって、それぞれの入力要素(又はセットの複数の入力ポートに与えられる入力要素のタプル)のために、実行セット内の各構成要素の最大で1つのインスタンスが実行される。実行セット内で、スカラポート及び制御ポートへのリンクによって、順番に並べる制約が課され、実行セット内の構成要素の並列実行は、順番に並べる制約が破られない限りにおいて容認される。並列に実行されることを可能にされる少なくともいくつかの構成要素が存在する例において、実行セットは、複数のタスク、例えば、実行セットまるごとのためのタスクと、構成要素のうちの1又は2以上のインスタンスの同時実行のための1又は2以上のサブタスクとを使用して実施される可能性がある。したがって、実行セットの異なるインスタンスを表すタスクは、それら自体、例えば、同時に実行され得るサブタスクによってさらに細分化されたタスクに分解される可能性がある。異なる実行セットのためのタスクは、概して、独立して並列に実行され得る。したがって、例えば、大きなデータセットが百万個のレコードを有する場合、百万個の独立したタスクが存在する可能性がある。タスクの一部は、コンピューティングプラットフォーム150の異なるノード152上で実行される可能性がある。タスクは、単一のノード152上でさえも同時に効率的に実行され得る軽量スレッドを使用して実行される可能性がある。
【0054】
概して、(1又は2以上の)割り当てアルゴリズムによって特定された実行セット(すなわち、ルート実行セット(root execution set)以外の実行セット)は、実行セットの境界の「駆動(driving)」スカラデータポートを通じてデータ要素を受け取る。実行セットの駆動入力スカラデータポートにおいて受け取られた各データ要素に関して、実行セット内の構成要素の各々は、1回実行される(作動される場合)か又はまったく実行されない(抑制される場合)。上流のコレクションポートから実行セットに利用され得る複数のデータ要素を処理するために、実行セットの複数のインスタンスがインスタンス化され、並列に実行され得る。実行セットに関する並列処理の度合いは、ランタイムで決定される可能性があり(実行セットを並列化しないあり得る判断を含み)、ランタイムで利用可能な計算リソースによってのみ制限される。実行セットの独立したインスタンスの個々の出力は、順序に関係なく実行セットの(1又は2以上の)出力ポートにおいて集められ、下流の構成要素に利用され得るようにされる。代替的に、その他の実施形態においては、駆動入力スカラデータポートを必要としないルート実行セット以外の実行セットが(場合によってはユーザ入力に基づいて)認識される可能性がある。駆動入力スカラデータポートのないそのような実行セットは、本明細書において説明される手順を使用して、適切な場合(例えば、下で説明されるラッチされた実行セットのために)単一のインスタンスにおいて、又は複数のインスタンスにおいて並列に実行される可能性がある。例えば、実行セットが実行される回数及び/又は実行される実行セットの並列なインスタンスの数を決定するパラメータが設定される可能性がある。
【0055】
極めて広く、実行セット発見手順は、データ要素の順序付けられていないコレクションの入力要素にセットとして適用されるべきデータ処理グラフ内の構成要素のサブセットを決定する割り当てアルゴリズムを使用する。割り当てアルゴリズムは、データ処理グラフを詳しく調べ(traverse)、割り当て規則に基づいて各構成要素をサブセットに割り当てる。下の例において明らかにされるように、所与のデータ処理グラフは、実行セットの階層の異なるレベルで入れ子にされたいくつかの実行セットを含む可能性がある。
【0056】
本明細書において説明されるデータ処理グラフにおいては、2種類のデータポート、すなわち、スカラデータポート及びコレクションデータポートが存在する。概して、リンクされた構成要素の対(すなわち、上流の構成要素及び下流の構成要素)は、(それらの構成要素が別の理由で異なる実行セット内にあるのでない限り)それらの構成要素が同じ種類のポートの間のリンクによって接続される場合、デフォルトで同じ実行セット内にある。
図5Aにおいて、構成要素A 402は、スカラ型の出力ポート406を有し、構成要素B 404は、スカラ型の入力ポート408を有する。構成要素A 402と構成要素B 404との間のリンク410が2つのスカラ型ポートを接続するので、構成要素A及びB 402、404は、この例において同じ実行セット内にある。
図5Aにおいては、構成要素A 402と構成要素B 404との間のリンクがスカラ−スカラリンクであるので、0データ要素か又は1データ要素かのどちらかがリンク410を介して上流の構成要素A 402と下流の構成要素B 404との間で渡される。上流の構成要素A 402の処理が完了すると、(上で説明されているように)上流の構成要素A 402が抑制されない限り、データ要素がリンク410を介して渡され、上流の構成要素A 402が抑制される場合、データ要素はリンク410を介して渡されない。
【0057】
図5Bを参照すると、構成要素A 402は、コレクション型の出力ポート412を有し、構成要素B 404は、コレクション型の入力ポート414を有する。構成要素A 402と構成要素B 404との間のリンク410が2つのコレクション型ポートを接続するので、構成要素A 402及び構成要素B 404は、この例においてやはり同じ実行セット内にある。
図5Bにおいては、構成要素A 402と構成要素B 404との間のリンク410がコレクション−コレクションリンクであるので、データ要素のセットが、リンク410を介して上流の構成要素と下流の構成要素との間で渡される。
【0058】
リンクの両側のポートの種類が合致しないとき、実行セットの階層のレベルの暗黙的な変化がある。特に、合致しないポートは、実行セットの階層の特定のレベルの実行セットの入力点又は出口点を表す。一部の例において、実行セットの入力点は、コレクション型出力ポートとスカラ型入力ポートとの間のリンクとして定義される。
図5Cにおいては、構成要素A 402の出力ポート416がコレクション型ポートであり、構成要素B 404の入力ポート418がスカラ型ポートであるので、実行セットの入力点424の一例が、構成要素A 402と構成要素B 404との間のリンク410に示される。
【0059】
一部の例において、実行セットの出口点は、スカラ型出力ポートとコレクション型入力ポートとの間のリンクとして定義される。
図5Dを参照すると、構成要素A 402の出力ポート420がスカラ型ポートであり、構成要素B 404の入力ポート422がコレクション型ポートであるので、実行セットの出口点426の一例が、構成要素A 402と構成要素B 404との間のリンク410に示される。
【0060】
コンパイラ/インタープリタ120のコンパイル及び/又は解釈の前に履行される割り当てアルゴリズムは、実行セットの入口点及び実行セットの出口点を使用して、データ処理グラフ内に存在する実行セットを発見する。
【0061】
3 実行セットのコンパイル
図6を参照すると、データ処理グラフ600の一例が、データソースA 650から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第1のデータシンクH 652及び第2のデータシンクI 654に記憶する。データ処理グラフ600の構成要素は、第1の構成要素B 656、第2の構成要素C 658、第3の構成要素D 660、第4の構成要素E 662、第5の構成要素F 664、及び第6の構成要素G 666を含む。
【0062】
第1のフロー651は、データソース650の出力コレクションポートを第1の構成要素B 656の入力コレクションポートに接続する。第2のフロー653は、第1の構成要素B 656の出力コレクションポートを第2の構成要素C 658の入力スカラポートに接続する。第2のフロー653が出力コレクションポートを入力スカラポートに接続するので、実行セットの入口点655は、第1の構成要素B 656と第2の構成要素C 658との間に存在することに留意されたい。
【0063】
第3のフロー657は、第2の構成要素C 658の出力スカラポートを第3の構成要素D 660と第4の構成要素E 662との両方の入力スカラポートに接続する。第4のフロー659は、第3の構成要素D 660の出力スカラポートを第5の構成要素F 664の入力コレクションポートに接続する。第5のフロー661は、第4の構成要素662の出力スカラポートを第6の構成要素G 666の入力コレクションポートに接続する。第4のフロー659及び第5のフロー661が出力スカラポートを入力コレクションポートに接続するので、第1の実行セットの出口点663は、第3の構成要素D 660と第5の構成要素F 664との間に存在し、第2の実行セットの出口点665は、第4の構成要素E 662と第6の構成要素G 666との間に存在することに留意されたい。
【0064】
第6のフロー667は、第5の構成要素F 664の出力コレクションポートを第1のデータシンクH 652の入力コレクションポートに接続する。第7のフロー669は、第6の構成要素G 666の出力コレクションポートを第2のデータシンクI 654の入力コレクションポートに接続する。
【0065】
上述のように、コンパイラ/インタープリタ120は、実行するためにデータ処理グラフ600を準備するとき、まず、実行セット発見前処理手順を実施して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。
図6の例示的なデータ処理グラフ600に関して、実行セット発見前処理手順は、実行セットの入口点655、第1の実行セットの出口点663、及び第2の実行セットの出口点665によって範囲を区切られているものとして第1の実行セット668を特定する。図から明らかなように、第1の実行セット668は、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662を含む。
【0066】
実行セット668を特定した後、コンパイラ/インタープリタ120は、第1の実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実装する制御コードを形成するためにコンパイラ/インタープリタ120が使用する第1の実行セットに関する制御グラフを生じさせるための制御グラフ生成手順を実行する。制御グラフを生じさせる際の1つのステップは、構成要素をタスクグループにグループ分けすることを含む。
【0067】
一部の例において、コンパイラ/インタープリタ120は、実行セット668の構成要素を含むデータ処理グラフ内の構成要素の各々を1又は2以上のタスクグループにグループ分けする。データ処理グラフ600が実行されるとき、各タスクグループのためにタスクがスポーン(spawn)され、タスクグループに属する構成要素の動作はタスク内で実施される。データ処理グラフのすべての構成要素がタスクグループにグループ分けされるが、本明細書において説明される態様は、主に、実行セット内の構成要素をタスクグループにグループ分けすることに関する。この理由により、残りの検討は、主に、実行セット668の構成要素をタスクグループにグループ分けすることに関する。
【0068】
実行セット668の構成要素のタスクグループへのいくつかの異なるグループ分けが可能であり、それぞれの異なるグループ分けは、関連する利点及び欠点を有する。概して、実行セット668の構成要素がタスクグループに正にどのようにして最適にグループ分けされるのかということは、最適性の基準に依存する。
【0069】
3.1 レイテンシーの最小化のためのコンパイル
例えば、最適性の基準が実行セット668の構成要素の最適なグループ分けが最小限の計算のレイテンシーを達成することであると規定する場合、構成要素のタスクグループへの1つの可能なグループ分けは、各構成要素をその構成要素独自の個々のタスクグループにグループ分けすることを含む。そのようにすることは、構成要素の動作(「作業手順」と呼ばれることがある)が可能なときに同時に実行されることを可能にする。例えば、実行セット668において、第1のタスクグループが、第2の構成要素C 658に割り当てられる可能性があり、第2のタスクグループが、第3の構成要素D 660に割り当てられる可能性があり、第3のタスクグループが、第4の構成要素E 662に割り当てられる可能性がある。
【0070】
図7を参照すると、データ処理グラフ600の実行セット668が実行されるとき、第1のタスク770が、第1のタスクグループのためにスポーンされ、第2の構成要素C 758の動作は、第1のタスク770内で実施される。第2の構成要素C 758の動作が完了するとき、第1のタスクは、第2のタスクグループのための第2のタスク772及び第3のタスクグループのための第3のタスク774をスポーンする。第3の構成要素D 760の動作は、第4の構成要素E 762の動作が第3のタスク774内で実施されるのと同時に第2のタスク772内で実施される。
【0071】
有利なことに、第3の構成要素D 760の動作を第4の構成要素E 762の動作と同時に実施することによって、どちらの構成要素もその構成要素の動作を実施する前に他方の構成要素が完了するのを待つ必要がないので、計算のレイテンシーが最小化される。一方、複数のタスクをスポーンすることに関連する計算リソースと時間との両方のコストが存在する。つまり、実行セット668の構成要素を最小限の計算のレイテンシーのためにタスクグループにグループ分けすることは、構成要素をグループ分けするための最も効率的な方法ではない(効率が、所与のタスクを実施するために使用される計算リソースの量の測定値として定義される場合)。
【0072】
3.2 効率の最大化のためのコンパイル
代替的に、最適性の基準が実行セット668の構成要素の最適なグループ分けが最大の(上で定義された)効率を達成することであると規定する場合、実行セット668の構成要素は、単一のタスクグループにグループ分けされる。そのようにすることは、たとえ同時性が可能であるときでも実行セット668の構成要素の動作が単一のタスク内で逐次的に実施されることを必要とする。
【0073】
例えば、実行セット668に関して、第1のタスクグループが、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662を含み得る。
図8を参照すると、データ処理グラフ600の実行セット668が実行されるとき、単一のタスク876が、第1のタスクグループのためにスポーンされ、第2の構成要素C 758、第3の構成要素D 760、及び第4の構成要素E 762の動作は、単一のタスク内で逐次的に(つまり、一度に1つずつ)実施される。一部の例において、第2の構成要素C 758、第3の構成要素D 760、及び第4の構成要素E 762の動作は、データ処理グラフ600において規定された動作の順序が維持されることを保証するためにトポロジカルソートされた順序で実施される。
【0074】
実行セット668の動作を単一のタスク内で逐次的に実行する1つの利点は、動作を実施する効率が最大化されることである。特に、データ処理グラフを実行するために必要とされる計算リソースの量が最小化され、それによって、複数のタスクをスポーンすることに関連するオーバーヘッドを避ける。もちろん、複数のタスクの逐次的な実行は、潜在的に、複数のタスクの同時実行よりも完了するために長い時間がかかるという欠点を有する。
【0075】
3.3 レイテンシー対効率のトレードオフのためのコンパイル
一部の例において、最適性の基準は、実行セット668の構成要素のタスクグループへの最適なグループ分けがレイテンシーの最小化と効率との間のトレードオフを実現することであると規定する。そのようなトレードオフを実現するためのいくつかの例示的な手法が、以下の節において説明される。
【0076】
3.3.1 潜在的動作の特定
レイテンシーの最小化と効率との間のトレードオフを実現する1つの方法は、まず、データ処理グラフの構成要素によって実施される特定の動作がタスクをスポーンするために必要とされる時間に対して相対的に長い時間がかかる可能性があると認識することを含む。これらの動作は、「潜在的動作」と呼ばれることがある。特定のその他の動作は、タスクをスポーンするために必要とされる時間に対して相対的に短い量の時間がかかる可能性がある。
【0077】
実行セット668の構成要素のうちの2又は3以上がおそらく同時に実行される可能性がある状況で、コンパイラ/インタープリタ120は、実行セット668の構成要素に関する動作が完了するためにどれだけ時間がかかるかの推定値に基づいて実行セット668の動作の同時実行を許容すべきか否かを決定する。いずれかの潜在的動作が実行セット内で特定される場合、実行セット668の構成要素は、同時に実行されることを許容される。潜在的動作が実行セット668内で特定されない場合、実行セット668の構成要素の同時実行は、許容されない。
【0078】
一部の例においては、実行セット668の構成要素に関する動作が完了するためにどれだけ長くかかるかを決定するために、コンパイラ/インタープリタ120は、構成要素に関連付けられるトランザクションのコード(transactional code)(例えば、上述のようなDMLコード)を調べて、データベースアクセス、ルックアップファイルの操作、リモートプロシージャコール、サービスの呼び出しなどの潜在的動作を特定する。その他の例において、コンパイラ/インタープリタ120は、ランタイムの計測を使用して、タスクが完了するためにかかる時間をデータ処理グラフ600のいくつかの実行にわたって測定する。データ処理グラフ600は、タスクが完了するためにかかる測定された時間に基づいてオンザフライで又はオフラインで再コンパイルされ得る。
【0079】
図9Aを参照すると、1つの非常に単純な例示的な例において、データ処理グラフ900が、第1の構成要素B 656がデータソース650から値xを読み、xを第2の構成要素C 658に送るように構成される。第2の構成要素C 658は、xに1を足すことによって値yを計算し、値yを第3の構成要素D 660及び第4の構成要素E 662に送る。第3の構成要素D 660は、yに2を掛けることによって値zを計算し、zを第5の構成要素F 664に送る。第4の構成要素E 662は、yを2で割ることによって値qを計算し、qを第7の構成要素G 666に送る。第5の構成要素F 665は、値zを第1のデータシンクH 652に書き込む。第6の構成要素G 666は、値qを第2のデータシンクI 654に書き込む。
【0080】
コンパイラ/インタープリタ120が
図9Aのデータ処理グラフ900の実行セット668を分析するとき、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662のトランザクションのコードが、構成要素のいずれかが潜在的動作を含むかどうかを決定するために調べられる。
図9Aの例において、構成要素によって実施される動作のすべてが非常に短い量の時間内に完了する単純な算術演算であるので、潜在的動作は特定されない。
【0081】
潜在的動作が実行セット668内で特定されない場合、実行セット668の構成要素は、同時に実行されることを許容されない。その目的で、制御グラフ生成手順中に、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662は、単一のタスクグループにグループ分けされる。データ処理グラフが実行されるとき、単一のタスクが、単一のタスクグループのためにスポーンされ、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662に関する動作が、(
図8と同様に)単一のタスク内で実行される。第1の実行セット668の各構成要素が単一のタスク内で実行されることによって、第3の構成要素D 660及び第4の構成要素E 662は、第2の構成要素C 658の動作後に逐次的に実行されることを強制される。
【0082】
図9Bを参照すると、単一のタスク(すなわち、タスク1)がスポーンされるとき(つまり、タスク1の開始時に)、第1のオーバーヘッド970が、背負わされ、第2の構成要素C 658が、実行を開始する。第2の構成要素C 658の実行が完了すると、第3の構成要素が、実行を開始する。第3の構成要素D 660の実行が完了すると、第4の構成要素E 662が実行され、その後、単一のタスクが完了する。
【0083】
3つの構成要素を単一のタスク(すなわち、タスク1)内で逐次的に実行することによって、3つの構成要素の実行の総時間は、構成要素の少なくとも一部の同時実行が許容されるとした場合よりも長い。しかし、単一のタスク(又は削減された数のタスク)内で実行することは、単一のタスクを開始するための第1のオーバーヘッド970だけが背負わされるので、削減された量のタスクの開始に関連するオーバーヘッドをもたらす。上述のように、オーバーヘッドと実行時間全体との間のこのトレードオフは、潜在的動作が実行セット内にないときに望ましいことが多い。比較として、
図9Cは、第2の構成要素C 658のためのタスク(タスク1)の後に、第3の構成要素D 660及び第4の構成要素E 662との間の許容される同時性を使用して別個のタスク(すなわち、タスク2及び3)においてそれらの構成要素を同時に実行する3構成要素の動作の結果として生じる、オーバーヘッドを含む、実行の総時間980を示す。この場合、同時性が削減された実行に関する実行の総時間982がより短いことは明らかである。
【0084】
図10Aを参照すると、別の非常に単純な例示的な例において、データ処理グラフ1000が、第1の構成要素B 656がデータソース650から値xを読み、xを第2の構成要素C 658に送るように構成される。第2の構成要素C 658は、xに1を足すことによって値yを計算し、値yを第3の構成要素D 660及び第4の構成要素E 662に送る。第3の構成要素D 660は、yに2を掛けることによって値zを計算し、zを第5の構成要素F 664に送る。第4の構成要素E 662は、データストア671(例えば、ルックアップファイル又はデータベース)から値mを読み、mとyとを合計することによって値qを計算する。第4の構成要素E 662は、値qを第7の構成要素G 666に送る。第5の構成要素F 665は、値zを第1のデータシンクH 652に書き込む。第6の構成要素G 666は、値qを第2のデータシンクI 654に書き込む。
【0085】
コンパイラ/インタープリタ120が
図10Aのデータ処理グラフ1000の実行セット668を分析するとき、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662のトランザクションのコードが、構成要素のいずれかが潜在的動作を含むかどうかを決定するために調べられる。
図10Aの例においては、第4の構成要素E 662がデータストア671から値を読むので、その第4の構成要素E 662が、潜在的動作を含むものとして特定される。
【0086】
潜在的動作が実行セット668内で特定される場合、データ処理グラフ1000の構成要素は、同時に実行されることを許容される。その目的で、制御グラフ生成手順中に、第2の構成要素C 658、第3の構成要素D 660、及び第4の構成要素E 662は、それぞれ異なるタスクグループ(例えば、第1のタスクグループ、第2のタスクグループ、及び第3のタスクグループ)にグループ分けされる。データ処理グラフ600が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる(例えば、(
図7と同様に)第2の構成要素C 658の動作を実行するための第1のタスクグループのための第1のタスク、第3の構成要素D 660の動作を実行するための第2のタスクグループのための第2のタスク、及び第4の構成要素E 662の動作を実行するための第3のタスクグループのための第3のタスク)。第1の実行セット668の各構成要素が別個のタスク内で実行されることによって、第3の構成要素D 660は、第4の構成要素E 662と同時に実行され得る。
【0087】
図10Bを参照すると、第1のタスク(すなわち、タスク1)がスポーンされるとき(つまり、タスク1の開始時に)、第1のオーバーヘッド1070が、背負わされ、第2の構成要素C 658が、実行を開始する。第2の構成要素C 658の実行が完了すると、第1のタスクは完了し、第2のタスク及び第3のタスクが(タスク1の完了時に)同時にスポーンされ、第2のオーバーヘッド1072及び第3のオーバーヘッド1074をそれぞれ背負い込む。第3の構成要素D 660は、第3のタスク内での第4の構成要素E 662の実行と同時に第2のタスク内で実行される。第4の構成要素E 662が潜在的動作であり、第3の構成要素D 660が潜在的動作ではないので、第3の構成要素D 660は、第4の構成要素E 662の前に実行を完了し、第2のタスクの完了を引き起こす(つまり、タスク2の完了時に)。第4の構成要素E 662は、完了するまで第3のタスク内で実行され続け、第3のタスクの完了を引き起こす(つまり、タスク3の完了時に)。
図10Bのタイムラインの時間の尺度は
図9Bのタイムラインの時間の尺度とは異なり、同じ絶対的な量のオーバーヘッドの時間がタスクの時間に対して相対的に異なる継続時間を有することを示すことに留意されたい。
【0088】
比較として、
図10Cは、この場合、第3の構成要素D 660及び第4の構成要素E 662を別個のタスク(すなわち、タスク2及びタスク3)内で同時に実行することによって、3つの構成要素の実行の総時間1080が、構成要素の同時性が削減された(この場合は逐次的な)実行が使用されるとした場合に結果として生じることになる実行の総時間1082よりも少ないことを示す。これは、たとえ3つの別個のタスクをインスタンス化することによって背負わされるオーバーヘッドの量が、同時性が削減された実行のために単一のタスクが使用されるとした場合のその量よりも大きいとしても、これは当てはまる。上述のように、実行時間全体とオーバーヘッドとの間のこのトレードオフは、潜在的動作が実行セット内にあるときに望ましいことが多い。
【0089】
同時実行を可能にするタスクグループ(及び最終的には個々のタスク)への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けされるのではなく、第2の構成要素C 658及び第3の構成要素D 660は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。もちろん、第4の構成要素E 662の動作が実行される単一のタスクは、第2の構成要素C 658と第4の構成要素E 662との間のシリアル−シリアル接続によって課されるシリアルの制約が満たされる限り、第2の構成要素C 658及び第3の構成要素D 660の動作が実行されるタスクとやはり同時に実行され得る。
【0090】
3.3.2 入れ子にされた実行セットの特定
レイテンシーの最小化と効率との間のトレードオフを実現する別の方法は、実行セットに含まれるいずれかの「入れ子にされた」実行セットがタスクをスポーンするために必要とされる時間に対して相対的に長い時間がかかる可能性があると認識することを含む。例えば、入れ子にされた実行セットは、上流のコレクションポートからの大量のデータを処理し、データ中をループするか、又はデータを同時に処理するために多数のタスクをスポーンするかのどちらかを含む。
【0091】
したがって、第1の実行セットの構成要素のうちの2又は3以上がおそらく同時に実行され得る一部の例において、コンパイラ/インタープリタ120は、第1の実行セットに含まれるその他の入れ子にされた実行セットの存在に基づいて第1の実行セットの動作の同時実行を許容すべきか否かを決定する。いずれかの入れ子にされた実行セットが特定される場合、第1の実行セットの構成要素は、同時に実行されることを許容される。入れ子にされた実行セットが第1の実行セット内で特定されない場合、第1の実行セットの構成要素の同時実行は、許容されない。
【0092】
図11を参照すると、例示的なデータ処理グラフ1100が、データソースA 1150から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第1のデータシンクH 1152及び第2のデータシンクI 1154に記憶する。データ処理グラフ1100の構成要素は、第1の構成要素B 1156、第2の構成要素C 1158、第3の構成要素D 1160、第4の構成要素E 1162、第5の構成要素J 1172、第6の構成要素F 1164、及び第7の構成要素G 1166を含む。
【0093】
第1のフロー1151は、データソース1150の出力コレクションポートを第1の構成要素B 1156の入力コレクションポートに接続する。第2のフロー1153は、第1の構成要素B 1156の出力コレクションポートを第2の構成要素C 1158の入力スカラポートに接続する。第2のフロー1153が出力コレクションポートを入力スカラポートに接続するので、第1の実行セットの入口点1155は、第1の構成要素B 1156と第2の構成要素C 1158との間に存在することに留意されたい。
【0094】
第3のフロー1157は、第2の構成要素C 1158の出力コレクションポートを第3の構成要素D 1160の入力コレクションポート及び第4の構成要素E 1162の入力スカラポートに接続する。第3のフローが第2の構成要素C 1158の出力コレクションポートを第4の構成要素E 1162の入力スカラポートに接続するので、第2の実行セットの入口点1175は、第2の構成要素C 1158と第4の構成要素E 1162との間に存在することに留意されたい。
【0095】
第4のフロー1159は、第3の構成要素D 1160の出力スカラポートを第6の構成要素F 1164の入力コレクションポートに接続する。第4のフローが出力スカラポートを入力コレクションポートに接続するので、第1の実行セットの出口点1163は第3の構成要素D 1160と第6の構成要素F 1164との間に存在することに留意されたい。
【0096】
第5のフロー1177は、第4の構成要素E 1162の出力スカラポートを第5の構成要素J 1172の入力コレクションポートに接続する。第5のフロー1177が出力スカラポートを入力コレクションポートに接続するので、第2の実行セットの出口点1179は、第4の構成要素E 1162と第5の構成要素J 1172との間に存在することに留意されたい。
【0097】
第6のフロー1161は、第5の構成要素J 1172の出力スカラポートを第7の構成要素G 1166の入力コレクションポートに接続する。第6のフロー1161が出力スカラポートを入力コレクションポートに接続するので、第3の実行セットの出口点1165は、第5の構成要素J 1172と第7の構成要素G 1166との間に存在することに留意されたい。
【0098】
第7のフロー1167は、第6の構成要素F 1164の出力コレクションポートを第1のデータシンクH 1152の入力コレクションポートに接続する。第8のフロー1169は、第7の構成要素G 1166の出力コレクションポートを第2のデータシンクI 1154の入力コレクションポートに接続する。
【0099】
コンパイラ/インタープリタ120は、実行するためにデータ処理グラフ1100を準備するとき、まず、実行セット発見前処理手順を実施して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。
図11の例示的なデータ処理グラフ1100に関して、実行セット発見前処理手順は、第1の実行セット1168と、第1の実行セット1168内に入れ子にされた第2の実行セット1181とを特定する。第1の実行セット1168は、第1の実行セットの入口点1155、第1の実行セットの出口点1163、及び第3の実行セットの出口点1165によって範囲を区切られている。第2の実行セット1181は、第2の実行セットの入口点1175及び第2の実行セットの出口点1179によって範囲を区切られている。図から明らかなように、第1の実行セット1168は、第2の構成要素C 1158と、第3の構成要素D 1160と、第5の構成要素J 1172と、第4の構成要素E 1162を含む第2の実行セット1181とを含む。
【0100】
図11において、コンパイラ/インタープリタ120は、第2の実行セット1181が第1の実行セット1186内に入れ子にされていると決定する。入れ子にされた実行セットが第1の実行セット1168内で特定されるので、第1の実行セット1168の構成要素に関して同時実行が許容される。その目的で、制御グラフ生成手順中に、第2の構成要素C 1158、第3の構成要素D 1160、第4の構成要素E 1162、及び第5の構成要素J 1172は、それぞれ異なるタスクグループ(例えば、第1のタスクグループ、第2のタスクグループ、第3のタスクグループ、及び第4のタスクグループ)にグループ分けされる。データ処理グラフ1100が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる(例えば、第2の構成要素C 1158の動作を実行するための第1のタスクグループのための第1のタスク、第3の構成要素D 1160の動作を実行するための第2のタスクグループのための第2のタスク、第4の構成要素E 1162の動作を実行するための第3のタスクグループのための第3のタスク、及び第5の構成要素J 1172の動作を実行するための第4のタスクグループのための第4のタスク)。第1の実行セット1168の各構成要素が別個のタスク内で実行されることによって、第3の構成要素D 1160は、第4の構成要素E 1162及び第5の構成要素J 1172のうちの一方又は両方と同時に実行され得る。
【0101】
同時実行を可能にするタスクグループ(及び最終的には個々のタスク)への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けされるのではなく、第2の構成要素C 1158及び第3の構成要素D 1160は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。もちろん、第4の構成要素E 1162及び第5の構成要素J 1172の動作が実行される単一のタスクは、第2の構成要素C 1158及び第3の構成要素D 1160の動作が実行されるタスクとやはり同時に実行され得る。
【0102】
3.3.3 内部の実行セットの同時性の特定
レイテンシーの最小化と効率との間のトレードオフを実現する別の方法は、いずれかの可能な同時性が実行セット内に存在するかどうかを決定することを含む。例えば、2つの構成要素が、実行セット1268内に存在する可能性があり、2つの構成要素のうちの第1の構成要素は、2つの構成要素のうちの第2の構成要素の入力コレクションポートにフローによって接続された出力コレクションポートを有する(つまり、コレクション−コレクションポート接続)。この場合、2つの構成要素は、たとえそれらの構成要素が同じ実行セット内にあるとしても、同時に実行されることを許容される可能性がある。
【0103】
第1の実行セットの構成要素のうちの2又は3以上がおそらく同時に実行され得る一部の例において、コンパイラ/インタープリタ120は、データ処理グラフのトポロジー及び特定のランタイムの特徴に基づいて第1の実行セットの動作の同時実行を許容すべきか否かを決定する。いずれかの可能な同時性が第1の実行セット内で特定される場合、第1の実行セットの構成要素は、同時に実行されることを許容され得る。可能な同時性が第1の実行セット内で特定されない場合、第1の実行セットの構成要素の同時実行は、許容されない。可能な同時性が存在する場合、ランタイムで実際に使用される同時性の異なるレベルが存在する可能性がある。例えば、可能な同時性の最も高いレベルは、構成要素の90%が同時に実行されることを許容する可能性があり、同時に実行される構成要素の10%という同時性の下げられたレベルが、特定の要因に基づいてトレードオフをするためにランタイムで実際に使用される(生じさせられたコードによって施行される)可能性がある。
【0104】
図12を参照すると、例示的なデータ処理グラフ1200が、データソースA 1250から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第1のデータシンクH 1252及び第2のデータシンクI 1254に記憶する。データ処理グラフ1200の構成要素は、第1の構成要素B 1256、第2の構成要素C 1258、第3の構成要素D 1260、第4の構成要素E 1262、第5の構成要素J 1272、及び第6の構成要素F 1264、及び第7の構成要素G 1266を含む。
【0105】
第1のフロー1251は、データソース1250の出力コレクションポートを第1の構成要素B 1256の入力コレクションポートに接続する。第2のフロー1253は、第1の構成要素B 1256の出力コレクションポートを第2の構成要素C 1258の入力スカラポートに接続する。第2のフロー1253が出力コレクションポートを入力スカラポートに接続するので、第1の実行セットの入口点1255は、第1の構成要素B 1256と第2の構成要素C 1258との間に存在することに留意されたい。
【0106】
第3のフロー1257は、第2の構成要素C 1258の出力スカラポートを第3の構成要素D 1260の入力スカラポート及び第4の構成要素E 1262の入力スカラポートに接続する。
【0107】
第4のフロー1259は、第3の構成要素D 1260の出力スカラポートを第6の構成要素F 1264の入力コレクションポートに接続する。第4のフローが出力スカラポートを入力コレクションポートに接続するので、第1の実行セットの出口点1263は第3の構成要素D 1260と第6の構成要素F 1264との間に存在することに留意されたい。
【0108】
第5のフロー1277は、第4の構成要素E 1262の出力コレクションポートを第5の構成要素J 1272の入力コレクションポートに接続する。
【0109】
第6のフロー1261は、第5の構成要素J 1272の出力スカラポートを第7の構成要素G 1266の入力コレクションポートに接続する。第6のフロー1261が出力スカラポートを入力コレクションポートに接続するので、第3の実行セットの出口点1265は、第5の構成要素J 1272と第7の構成要素G 1266との間に存在することに留意されたい。
【0110】
第7のフロー1267は、第6の構成要素F 1264の出力コレクションポートを第1のデータシンクH 1252の入力コレクションポートに接続する。第8のフロー1269は、第7の構成要素G 1266の出力コレクションポートを第2のデータシンクI 1254の入力コレクションポートに接続する。
【0111】
コンパイラ/インタープリタ120は、実行するためにデータ処理グラフ1200を準備するとき、まず、実行セット発見前処理手順を実決して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。
図12の例示的なデータ処理グラフ1200に関して、実行セット発見前処理手順は、単一の実行セット1268を特定する。実行セット1268は、第1の実行セットの入口点1255、第1の実行セットの出口点1263、及び第3の実行セットの出口点1265によって範囲を区切られている。図から明らかなように、実行セット1268は、第2の構成要素C 1258、第3の構成要素D 1260、第5の構成要素J 1272、及び第4の構成要素E 1262を含む。
【0112】
図12において、コンパイラ/インタープリタ120は、第4の構成要素E 1262と第5の構成要素J 1272との間のコレクションポート−コレクションポート接続及び実行セット1268内の構成要素のトポロジー全体を認識することによって実行セット1268内の可能な同時性のレベルをやはり特定する。可能な同時性が実行セット1268内で特定されるので、実行セット1268内の構成要素の少なくとも一部に関して同時実行が許容される。その目的で、制御グラフ生成手順中に、第2の構成要素C 1258、第3の構成要素D 1260、第4の構成要素E 1262、及び第5の構成要素J 1272は、それぞれ異なるタスクグループ(例えば、第1のタスクグループ、第2のタスクグループ、第3のタスクグループ、及び第4のタスクグループ)にグループ分けされる。各タスクグループは、1又は2以上の構成要素の動作を含み、タスクグループ全体が、ランタイムでスポーンされる単一のタスク(例えば、プロセス又はスレッド)によって実行される。各構成要素をその構成要素独自のタスクグループに割り当てることは、ランタイムで同時性の高いレベルを可能にする。ランタイムで同時性の下げられたレベルを施行するために、対応するタスクが構成要素の動作を逐次的に(つまり、同時性なしに)実行するようにして、複数の構成要素が同じタスクグループに割り当てられる可能性がある。
【0113】
データ処理グラフ1200が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる(例えば、第2の構成要素C 1258の動作を実行するための第1のタスクグループのための第1のタスク、第3の構成要素D 1260の動作を実行するための第2のタスクグループのための第2のタスク、第4の構成要素E 1262の動作を実行するための第3のタスクグループのための第3のタスク、及び第5の構成要素J 1272の動作を実行するための第4のタスクグループのための第4のタスク)。実行セット1268の各構成要素が別個のタスク内で実行されることによって、第3の構成要素D 1260は、第4の構成要素E 1262及び第5の構成要素J 1272のうちの一方又は両方と同時に実行され得る。しかし、第2の構成要素C 1258と第3の構成要素D 1260との間、及び第2の構成要素C 1258と第4の構成要素E 1262との間の接続されたシリアルポートなどの構成要素のポートに応じて、異なるタスクの間で施行されるいくつかの制約がまだ存在する可能性がある。
【0114】
同時実行の異なるレベルを可能にするタスクグループ(及び最終的には個々のタスク)への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けするのではなく、第2の構成要素C 1258及び第3の構成要素D 1260は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。第4の構成要素E 1262及び第5の構成要素J 1272の動作が実行される単一のタスクグループ及び最終的なタスクも、割り当てられる可能性がある。そして、その単一のタスクは、第4の構成要素E 1262が実行を開始する前に第2の構成要素C 1258が実行を終了済みである限り、第2の構成要素C 1258及び第3の構成要素D 1260の動作が実行されるタスクと同時に実行される可能性がある。したがって、コンパイラ/インタープリタ120によって生じさせられたコード内に表される数の及び構成のタスクグループが、実行セットの構成要素に対応する動作のグループ全体の中で同時性の異なるレベルを施行することができる。
【0115】
4 代替形態
一部の例においては、実行セットの構成要素が出力スカラポートから入力スカラポートへの接続(つまり、スカラポート−スカラポート接続)によってのみ互いに接続される場合、コンパイラ/インタープリタ120は、実行セットの構成要素の動作を単一のタスクグループ内に自動的に割り当て、それらの動作は、単一のタスクによって逐次的に実行されるように制約される。
【0116】
概して、同時性のレベルを変更する、実行セット内の特定の構成要素の間の同時性を許容するか又は許容しないかの判断は、実行セットにのみ当てはまり、構成要素、又は実行セット内に入れ子にされた実行セットには(つまり、実行セットの階層のより低いレベルでは)必ずしも当てはまるとは限らない。
【0117】
一部の例においては、同時性が所与の実行セット内で許容されないとき、実行セットの構成要素に関するトポロジカルソートされた順序が、決定され、所与の実行セットの構成要素に関する動作は、単一のタスク内で、トポロジカルソートされた順序で実行される。
【0118】
一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間に対して相対的に完了するために長い時間がかかる動作として定義される。一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間よりも少なくとも3倍長くかかる動作として定義される。一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間よりも少なくとも10倍長くかかる動作として定義される。
【0119】
一部の例において、ユーザは、潜在的動作を定義する特徴を規定する。一部の例において、ユーザは、どの構成要素が潜在的動作を含むかを明示的に規定する。一部の例において、ユーザは、実行セットのためのコンパイルモード(すなわち、同時又は非同時)を明示的に規定することができる。
【0120】
一部の例において、上述の手法は、同時実行の可能性が実行セット内にある場合にのみ実施される。例えば、コンパイラ/インタープリタ120は、上述の手法を実施する前に同時実行が可能であるかどうかを決定するために、実行セットに含まれるデータ処理グラフの部分を進む(walk)可能性がある。一部の例において、コンパイラ/インタープリタ120は、実行セットに含まれるデータフローグラフの部分に関する最大の同時性を決定する。
【0121】
上述の例の各々は、実行セットの構成要素をそれらの構成要素が同時に又は逐次的にのどちらかで実行されるようにコンパイルさせ得る1又は2以上の構成要素の1つのランタイムの特徴を強調する。しかし、実行セットは、任意の数のこれらの特徴(例えば、潜在的動作、入れ子にされた実行セット、暗黙的実行セットなど)の組合せを有する構成要素を含む可能性がある。一部の例において、実行セットの1又は2以上の構成要素が、構成要素の動作がタスクをスポーンするために必要とされる時間に対して相対的に完了するために長い時間がかかることを示す特徴を含む場合、実行セットは、同時実行が許容されるようにコンパイルされる。
【0122】
上述のデータ処理グラフのコンパイルの手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、(揮発性及び/又は不揮発性メモリ及び/又はストレージ要素を含む)少なくとも1つのデータストレージシステム、(少なくとも1つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを用いて出力を与えるための)少なくとも1つのユーザインターフェースを含む(分散、クライアント/サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある)1又は2以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される1又は2以上のコンピュータプログラムのプロシージャを含み得る。ソフトウェアは、例えば、データ処理グラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの1又は2以上のモジュールを含む可能性がある。プログラムのモジュール(例えば、データ処理グラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【0123】
ソフトウェアは、ある期間(例えば、ダイナミックRAMなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間)媒体の物理特性(例えば、表面ピット及びランド、磁区、又は電荷)を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶され得る。命令をロードするのに備えて、ソフトウェアは、CD−ROM又は(例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な)その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される可能性があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される(例えば、伝搬信号に符号化される)可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA)若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)などの専用のハードウェアを使用して実施される可能性がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実施される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実施するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体(例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体)に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの1又は2以上を実施するために特定の予め定義された方法でコンピュータを動作させる。
【0124】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって定義される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実施される可能性がある。