(57)【特許請求の範囲】
【請求項１】
グラフに基づくプログラムの仕様を処理するための方法であって、
前記グラフに基づくプログラムの仕様を受け取るステップであって、前記グラフに基づくプログラムの仕様が、
それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、前記ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクションを送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに
１又は２以上のリンクであって、前記１又は２以上のリンクのそれぞれのリンクが、前記複数の構成要素の上流の構成要素の出力ポートを前記複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、ステップと、
前記グラフに基づくプログラムの仕様の前記複数の構成要素のサブセットを表す準備されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するステップであって、
構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、
前記特定されたサブセットの境界に基づいて前記サブセットを形成すること、及び
ランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の前記構成要素に対応する処理タスクを行わせる、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む、ステップとを含む、前記方法。
【請求項２】
１又は２以上のサブセットの境界が、１又は２以上のサブセットの入口点を含む請求項１に記載の方法。
【請求項３】
１又は２以上のサブセットの境界を特定することが、上流の構成要素のコレクションデータ出力ポートを下流の構成要素のスカラデータ入力ポートに接続する少なくとも１つのリンクを特定することを含む、１又は２以上のサブセットの入口点を特定することを含む請求項２に記載の方法。
【請求項４】
１又は２以上のサブセットの境界が、１又は２以上のサブセットの出口点を含む請求項２又は３に記載の方法。
【請求項５】
１又は２以上のサブセットの境界を特定することが、上流の構成要素のスカラデータ出力ポートを下流の構成要素のコレクションデータ入力ポートに接続する少なくとも１つのリンクを特定することを含む、１又は２以上のサブセットの出口点を特定することを含む請求項４に記載の方法。
【請求項６】
形成されたそれぞれのサブセットが、１又は２以上の構成要素、１以下のサブセットの入口点、及び１又は２以上のサブセットの出口点を含む請求項４又は５に記載の方法。
【請求項７】
特定されたサブセットの境界に基づいてサブセットを形成することが、特定されたサブセットの入口点及び特定されたサブセットの出口点に基づいて前記サブセットを形成することを含む請求項４〜６のいずれかに記載の方法。
【請求項８】
サブセットを形成することが、詳しく調べられたサブセットの入口点及びサブセットの出口点のレコードを保持しながらグラフに基づくプログラムの仕様の構成要素を詳しく調べ、前記グラフに基づくプログラムの仕様の各構成要素を、詳しく調べられたサブセットの入口点及びサブセットの出口点の前記レコードから決定された単一のサブセット識別子に関連付けることを含む請求項７に記載の方法。
【請求項９】
複数の構成要素の特定されたサブセットに関連する各サブセット識別子が、一意である請求項８に記載の方法。
【請求項１０】
詳しく調べられたサブセットの入口点及びサブセットの出口点のレコードが、識別子の値のパスとして保持される請求項８又は９に記載の方法。
【請求項１１】
識別子の値のパスが、分割文字によって互いに分けられた識別子の値の文字列を含む請求項１０に記載の方法。
【請求項１２】
サブセットを形成することが、
グラフに基づくプログラムの仕様の第１の構成要素をサブセット識別子に関連付けることと、
前記サブセット識別子を前記第１の構成要素から下流の構成要素に伝搬させることと、
特定されたサブセットの入口点及び特定されたサブセットの出口点に基づいて前記サブセット識別子の伝搬中に前記サブセット識別子を修正することとを含む請求項７に記載の方法。
【請求項１３】
サブセット識別子の伝搬中に前記サブセット識別子を修正することが、
サブセットの入口点を詳しく調べると、前記サブセット識別子の値を第１のサブセット識別子の値から前記サブセットの入口点に関連する第２のサブセット識別子の値に変更することと、
前記サブセットの入口点に関連するサブセットの出口点を詳しく調べると、前記サブセット識別子の前記値を前記第１のサブセット識別子の値に変更することと含む請求項１２に記載の方法。
【請求項１４】
グラフに基づくプログラムの仕様を処理するための、コンピュータ可読媒体に非一時的形態で記憶されたソフトウェアであって、コンピューティングシステムに、
前記グラフに基づくプログラムの仕様を受け取ることであって、前記グラフに基づくプログラムの仕様が、
それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、前記ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクションを送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに
１又は２以上のリンクであって、前記１又は２以上のリンクのそれぞれのリンクが、前記複数の構成要素の上流の構成要素の出力ポートを前記複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、受け取ることと、
前記グラフに基づくプログラムの仕様の前記複数の構成要素のサブセットを表す準備されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理することであって、
構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、
前記特定されたサブセットの境界に基づいて前記サブセットを形成すること、及び
ランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の前記構成要素に対応する処理タスクを行わせる、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む、処理することとを行わせるための命令を含む、前記ソフトウェア。
【請求項１５】
グラフに基づくプログラムの仕様を処理するためのコンピューティングシステムであって、
前記グラフに基づくプログラムの仕様を受け取るように構成された少なくとも１つの入力デバイス又はポートであって、前記グラフに基づくプログラムの仕様が、
それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、前記ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクションを送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに
１又は２以上のリンクであって、前記１又は２以上のリンクのそれぞれのリンクが、前記複数の構成要素の上流の構成要素の出力ポートを前記複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、少なくとも１つの入力デバイス又はポートと、
前記グラフに基づくプログラムの仕様の前記複数の構成要素のサブセットを表す準備されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するように構成された少なくとも１つのプロセッサであって、処理することが、
構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、
前記特定されたサブセットの境界に基づいて前記サブセットを形成すること、及び
ランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の前記構成要素に対応する処理タスクを行わせる、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む、少なくとも１つのプロセッサとを含む、前記コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１４年９月２日に出願した米国特許出願第６２／０４４，６４５号明細書及び２０１５年５月２０日に出願した米国特許出願第６２／１６４，１７５号明細書の優先権を主張するものである。
【０００２】
この説明は、グラフに基づくプログラムの仕様をコンパイルする手法に関する。
【背景技術】
【０００３】
データフローの計算の１つの手法は、グラフのノード（頂点）に対応する計算構成要素がグラフ（「データフローグラフ」と呼ばれる）のリンク（有向辺）に対応するデータフローによって接続されるグラフに基づく表現を利用する。データフローリンクによって上流の構成要素に接続された下流の構成要素は、入力データ要素の順序付けられたストリームを受け取り、受け取られた順序で入力データ要素を処理し、出力データ要素の１又は２以上の対応するフローを生じさせていてもよい。そのようなグラフに基づく計算を実行するためのシステムは、参照により本明細書に組み込まれる「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」と題された先行米国特許第５，９６６，０７２号明細書に説明されている。その先行特許において説明された手法に関連する１つの実装形態においては、各構成要素が、通常は複数のコンピュータサーバのうちの１つでホストされるプロセスとして実装される。各コンピュータサーバは、いつでもアクティブな複数のそのような構成要素のプロセスを有する可能性があり、オペレーティングシステム（例えば、Ｕｎｉｘ）のスケジューラが、そのサーバでホストされる構成要素の間にリソース（例えば、プロセッサ時間及び／又はプロセッサコア）を分配する。そのような実装形態においては、構成要素間のデータフローが、オペレーティングシステムのデータ通信サービス及びサーバを接続するデータネットワーク（例えば、名前付きパイプ、ＴＣＰ／ＩＰセッションなど）を使用して実装される可能性がある。概して、構成要素のサブセットが、計算全体からの、例えば、データファイル、データベーステーブル、及び外部データフローへの及び／又はからのデータのソース及び／又はシンクとして働く。例えば、調整プロセスによって構成要素のプロセス及びデータフローが確立された後、データは、概して、各構成要素における入力データの可用性及び構成要素の各々のための計算リソースのスケジューリングによって律せられるグラフとして表現される計算を実施する計算システム全体を流れる。したがって、少なくとも、異なる構成要素が（同じ又は異なるサーバコンピュータ又はプロセッサコアでホストされる）異なるプロセスによって並列に実行されることを可能にすることによって、並列処理が実現される可能性があり、異なる構成要素がデータフローグラフの異なる経路上で並列に実行されることは本明細書において構成要素並列処理（component parallelism）と呼ばれ、異なる構成要素がデータフローグラフの同じ経路の異なる部分において並列に実行されることは本明細書においてパイプライン並列処理（pipeline parallelism）と呼ばれる。
【０００４】
その他の形態の並列処理も、そのような手法によってサポートされる。例えば、例えば、それぞれの部分がデータセットのレコードを処理する構成要素の別々のコピーに送られるようにして、入力データセットがデータセットのレコードのフィールドの値の区分けに従って区分けされる可能性がある。構成要素のそのような別々のコピー（又は「インスタンス」）は、別々のサーバコンピュータ又はサーバコンピュータの別々のプロセッサコア上で実行され、それによって、本明細書においてデータ並列処理（data parallelism）と呼ばれるものを実現し得る。別々の構成要素の結果は、単一のデータフロー又はデータセットを再び形成するために合併される可能性がある。構成要素のインスタンスを実行するために使用されるコンピュータ又はプロセッサコアの数は、データフローグラフが作られるときに作成者によって指定される。
【０００５】
そのような手法の効率を改善するために、さまざまな手法が使用され得る。例えば、構成要素の各インスタンスは、例えば、１つのオペレーティングシステムのプロセスを使用して複数の構成要素（例えば、より大きなグラフの接続された部分グラフを形成する構成要素）を実装することによって、必ずしも独自のオペレーティングシステムのプロセスでホストされなくてもよい。
【０００６】
上述の手法の少なくとも一部の実装形態は、基礎を成すコンピュータサーバ上での結果として得られるプロセスの実行の効率に関連する制限を受ける。例えば、制限は、データ並列処理の度合いを変更するため、さまざまな構成要素をホストするサーバに変更するため、及び／又は異なる計算リソースに対する負荷を分散するために、グラフの実行されているインスタンスを再構成することの難しさに関連する可能性がある。既存のグラフに基づく計算システムは、余りにも多くのプロセスが不必要に開始され、大量のメモリを浪費することが原因であることが多い遅い起動時間にも見舞われる。概して、プロセスは、グラフの実行の開始時に始まり、グラフの実行が完了するときに終わる。
【０００７】
計算全体が、より小さな部分に分割され、部分が、１つのマスタコンピュータサーバから、計算をそれぞれが独立して実行し、それらの結果をマスタサーバに返すさまざまなその他の（例えば、「スレーブ」）コンピュータサーバに分散される、計算を分散させるためのその他のシステムが、使用されてきた。そのような手法の一部は、「グリッドコンピューティング」と呼ばれる。しかし、そのような手法は、概して、計算の部分を呼び出すマスタコンピュータサーバを介する以外に、それらの部分の間でデータを受け渡すか又は部分の実行をスケジューリングする及び／若しくは順番に並べるためのメカニズムを提供せず、それぞれの計算の独立性に依存する。したがって、そのような手法は、複数の構成要素の間のインタラクションを伴う計算をホストすることに対する直接的で効率的な解決策を提供しない。
【０００８】
大きなデータセットに対する分散された計算のための別の手法は、例えば、Ａｐａｃｈｅ  Ｈａｄｏｏｐ（登録商標）システムにおいて具現化されるＭａｐＲｅｄｕｃｅフレームワークを利用する。概して、Ｈａｄｏｏｐは、それぞれの命名されたファイルに関する部分が分散される分散型ファイルシステムを有する。ユーザは、２つの関数、すなわち、命名された入力のすべての部分に分散された方法で実行されるMap関数と、Map関数の実行の出力の一部に対して実行されるReduce関数とによって計算を規定する。Map関数の実行の出力は、区分され、再び分散型ファイルシステム内の中間部分に記憶される。それから、Reduce関数が、中間部分を処理し、計算全体の結果を与えるために分散された方法で実行される。ＭａｐＲｅｄｕｃｅフレームワークにおいて表現可能であり、入力及び出力がｍａｐ−ｒｅｄｕｃｅフレームワークのファイルシステム内に記憶するために修正可能である計算は効率的に実行され得るが、多くの計算は、このフレームワークに合わない及び／又はすべてのそれらの計算の入力及び出力を分散型ファイルシステム内に持つように容易に適応されない。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許第５，９６６，０７２号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１０】
概して、構成要素（又は構成要素の並列に実行されるコピー）が異なるサーバでホストされる上述の手法と比べて、基礎を成す仕様がグラフによる計算の計算効率を高める（例えば、所与の計算リソースの単位毎に処理されるレコードの数を増やす）ニーズが存在する。さらに、変化する計算リソース及び要件に適応することができることが望ましい。１若しくは２以上のグラフに基づく計算の実行中に利用可能である計算リソースの変化、及び／又は例えば処理されているデータの特徴が原因であるそのような計算の異なる構成要素の計算負荷の変化若しくは負荷の時間変化に適応することを可能にする計算手法を提供するニーズも存在する。例えば、サーバ毎に異なる数のプロセッサ、プロセッサ毎に異なる数のプロセッサコアなどを有するサーバを使用して、異なる特徴を有する計算リソースを効率的に利用することができ、同種の環境と異種の環境との両方を効率的にサポートすることができる計算手法を提供するニーズも存在する。グラフに基づく計算の開始を迅速にする望みも存在する。そのような効率及び適応性を提供する１つの態様は、（設計時に）グラフを作成するときに作成者によって行われる選択と、（コンパイル時に）コンパイラによって行われるアクションと、（ランタイムで）ランタイムシステムによって行われるアクションとの間の適切な分離及び抽象の壁（abstraction barrier）を提供することである。
【課題を解決するための手段】
【００１１】
一態様においては、概して、グラフに基づくプログラムの仕様を処理するための方法が、グラフに基づくプログラムの仕様を受け取るステップであって、グラフに基づくプログラムの仕様が、それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクション（collection）を送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに１又は２以上のリンクであって、該１又は２以上のリンクのそれぞれのリンクが、複数の構成要素の上流の構成要素の出力ポートを複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、ステップと、（「実行セット（execution set）」に対応する）グラフに基づくプログラムの仕様の複数の構成要素のサブセットを表す準備されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するステップとを含む。本明細書において使用されるとき、「準備されたコード」は、実行可能コード又は実行可能コードへとさらにコンパイル若しくは解釈され得るコードを含む可能性がある、グラフに基づくプログラムの仕様の解析された要素を変換するときにコンパイラ又はインタープリタによって使用される任意の目標の言語のコードを含む。処理するステップは、構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、特定されたサブセットの境界に基づいてサブセットを形成すること、及びランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の構成要素に対応するタスクの処理を行わせ(performed)る、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む。
【００１２】
態様は、以下の特徴のうちの１又は２以上を有する可能性がある。
【００１３】
１又は２以上のサブセットの境界は、１又は２以上のサブセットの入口点を含む。
【００１４】
１又は２以上のサブセットの境界を特定することは、上流の構成要素のコレクションデータ出力ポートを下流の構成要素のスカラデータ入力ポートに接続する少なくとも１つのリンクを特定することを含む、１又は２以上のサブセットの入口点を特定することを含む。
【００１５】
１又は２以上のサブセットの境界は、１又は２以上のサブセットの出口点を含む。
【００１６】
１又は２以上のサブセットの境界を特定することは、上流の構成要素のスカラデータ出力ポートを下流の構成要素のコレクションデータ入力ポートに接続する少なくとも１つのリンクを特定することを含む、１又は２以上のサブセットの出口点を特定することを含む。
【００１７】
形成されたそれぞれのサブセットは、１又は２以上の構成要素、１個以下のサブセットの入口点、及び１又は２以上のサブセットの出口点を含む。
【００１８】
特定されたサブセットの境界に基づいてサブセットを形成することは、特定されたサブセットの入口点及び特定されたサブセットの出口点に基づいてサブセットを形成することを含む。
【００１９】
サブセットを形成することは、詳しく調べられたサブセットの入口点及びサブセットの出口点のレコードを保持しながらグラフに基づくプログラムの仕様の構成要素を詳しく調べ（traverse）、グラフに基づくプログラムの仕様の各構成要素を、詳しく調べられたサブセットの入口点及びサブセットの出口点のレコードから決定された単一のサブセット識別子に関連付けることを含む。
【００２０】
複数の構成要素の特定されたサブセットに関連する各サブセット識別子は、一意である。
【００２１】
詳しく調べられたサブセットの入口点及びサブセットの出口点のレコードは、識別子の値のパスとして保持される。
【００２２】
識別子の値のパスは、分割文字によって互いに分けられた識別子の値の文字列を含む。
【００２３】
サブセットを形成することは、グラフに基づくプログラムの仕様の第１の構成要素をサブセット識別子に関連付けることと、サブセット識別子を第１の構成要素から下流の構成要素に伝搬させることと、特定されたサブセットの入口点及び特定されたサブセットの出口点に基づいてサブセット識別子の伝搬中にサブセット識別子を修正することとを含む。
【００２４】
サブセット識別子の伝搬中にサブセット識別子を修正することは、サブセットの入口点を詳しく調べると、サブセット識別子の値を第１のサブセット識別子の値からサブセットの入口点に関連する第２のサブセット識別子の値に変更することと、サブセットの入口点に関連するサブセットの出口点を詳しく調べると、サブセット識別子の値を第１のサブセット識別子の値に変更することと含む。
【００２５】
別の態様においては、概して、ソフトウェアが、グラフに基づくプログラムの仕様を処理するための、コンピュータ可読媒体に非一時的形態で記憶され、ソフトウェアは、コンピューティングシステムに、グラフに基づくプログラムの仕様を受け取ることであって、グラフに基づくプログラムの仕様が、それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクションを送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに１又は２以上のリンクであって、該１又は２以上のリンクのそれぞれのリンクが、複数の構成要素の上流の構成要素の出力ポートを複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、受け取ることと、グラフに基づくプログラムの仕様の複数の構成要素のサブセットを表す準備されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理することであって、構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、特定されたサブセットの境界に基づいてサブセットを形成すること、及びランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の構成要素に対応するタスクの処理を行わせる、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む、処理することとを行わせるための命令を含む。
【００２６】
別の態様においては、概して、グラフに基づくプログラムの仕様を処理するためのコンピューティングシステムが、グラフに基づくプログラムの仕様を受け取るように構成された少なくとも１つの入力デバイス又はポートであって、グラフに基づくプログラムの仕様が、それぞれが処理タスクに対応し、１又は２以上のポートを含む複数の構成要素であって、ポートが、単一のデータ要素を送信又は受信するためのスカラデータポート、及び複数のデータ要素のコレクションを送信又は受信するためのコレクションデータポートを含む、複数の構成要素、並びに１又は２以上のリンクであって、該１又は２以上のリンクのそれぞれのリンクが、複数の構成要素の上流の構成要素の出力ポートを複数の構成要素の下流の構成要素の入力ポートに接続する、１又は２以上のリンクを含む、少なくとも１つの入力デバイス又はポートと、グラフに基づくプログラムの仕様の複数の構成要素のサブセットを表す準備されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するように構成された少なくとも１つのプロセッサであって、処理することが、構成要素のコレクションデータポートを構成要素のスカラデータポートに接続する１又は２以上のリンクを特定することを含む、１又は２以上のサブセットの境界を特定すること、特定されたサブセットの境界に基づいてサブセットを形成すること、及びランタイムシステムによる実行のために使用されるときに、それぞれの形成されたサブセット内の構成要素に対応するタスクの処理を行わせる、それぞれの形成されたサブセットのための準備されたコードを生じさせることを含む、少なくとも１つのプロセッサとを含む。
【００２７】
態様は、以下の利点のうちの１又は２以上を有する可能性がある。
【００２８】
また、本明細書において説明される技術は、コンピューティングシステムのアーキテクチャのさまざまなレイヤにおいてこれまでにない技術的特徴を使用してコンピューティングシステムにおける大量のデータの効率的な処理を促進する。これらの技術的特徴は、設計時、コンパイル時、及び実行時を含むコンピューティングシステムの動作のさまざまな段階で一緒に働く。プログラミングプラットフォームが、グラフに基づくプログラムの仕様が設計時に所望の計算を規定することを可能にする。コンパイラが、ランタイムでコンピューティングシステムのサーバの間に細分化されたタスクを効率的に分散させるためにコンパイル時に目標のプログラムの仕様を準備する。例えば、タスクは、グラフに基づくプログラムの仕様内の任意の制御フロー及びデータフローの制約に従って構成される。ランタイムシステムは、（例えば、所与の計算リソースの単位毎に処理されるレコードの数の）計算効率を高めるような方法で同時実行のためのこれらのタスクの動的な分散をサポートする。さまざまな技術的特徴が、通常のシステムを超える効率の向上を達成するために一緒に働く。
【００２９】
例えば、コンピューティングシステムは、プログラマに対する過度の負担を必要とせずに、データ処理グラフ（又はその他のグラフに基づくプログラムの仕様）の構成要素に対応するタスクの柔軟なランタイムの実行を容易にするようにしてそれらのタスクを使用してデータ要素を処理することができる。グラフィカルユーザインターフェースは、所望のデータ処理の計算を実行する構成要素の異なる種類のポートの間の接続を許容し、コンピューティングシステムは、後でプログラムの仕様を処理する際に使用するために、１もしく２以上の構成要素を含むサブセット及び／又は構成要素の入れ子にされたサブセット又はこれら両方を自動的に特定することができる。例えば、この実行セット発見前処理手順は、人にとって非常に難しい構成要素の潜在的に入れ子にされた実行セットの階層を特定することができ、そして、システムは、効率的な並列データ処理のためにそれらのサブセットを実行するための基礎を成すシステムアーキテクチャ内のリソースの割り当てを決定することができる。構成要素のそのようなサブセット（「実行セット」）を自動的に特定することによって、コンピューティングシステムは、下でより詳細に説明されるように、データ処理グラフが特定の一貫性の要件を満たすことを保証することができ、実行セットに関する並列処理の度合いが、ランタイムで決定される可能性があり、ランタイムで利用可能な計算リソースによってのみ制限されるので、極めてスケーラブルな度合いの並列処理で基礎を成すコンピューティングシステムによって実行セットが動作させられることを可能にし、それによって、データ処理グラフの効率的な実行に寄与する。例えば、コレクションとしてデータ要素を処理するポートと一度に単一のデータ要素を処理するポートとの間のリンクに基づいて構成要素のサブセットを認識することによって、コンピューティングシステムは、コンピューティングシステムの内部機能の効率を高めるようにしてコレクションに対する計算が並列化されることを保証することができる。
【００３０】
また、これらの技術は、メモリ及びその他の計算リソースの需要を減らし、個々のデータ要素を処理する際のシステムのレイテンシーを減らすなど、本明細書において説明される方法を実行するときのコンピューティングシステムの内部機能に対するさらなる技術的効果を呈する。特に、これらの利点は、データ処理グラフの効率的実行に貢献する。例えば、通常のグラフに基づく計算システムは、グラフを実行するときにその他のプロセスによって開始されるプロセス（例えば、Ｕｎｉｘプロセス）の数と、それらのプロセスの結果として生じる累積的な起動時間とが原因で、比較的大きなレイテンシー（例えば、およそ数十ミリ秒）を有する可能性がある。しかるに、本明細書において説明される技術は、単一のプロセス内のプログラムコードがプロセスの起動オーバーヘッドなしに直接その他のプログラムコードを開始することを可能にすることによって、比較的小さなレイテンシー（例えば、数十マイクロ秒）及び１秒あたりに処理されるデータのより大きなスループットを容易にする。データ処理グラフの効率的実行に貢献するその他の態様は、下の説明において明らかになる。
【００３１】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【００３２】
【図１】タスクに基づく計算システムのブロック図である。
【図２Ａ】制御ポート及びデータポートを有するデータ処理グラフの一部の例を示す図である。
【図２Ｂ−２Ｃ】制御ポート及びデータポートを有するデータ処理グラフの例を示す図である。
【図３Ａ】いくつかのスカラ出力ポートからスカラ入力ポートへの接続を含むデータ処理グラフである。
【図３Ｂ】いくつかのコレクション出力ポートからコレクション入力ポートへの接続を含むデータ処理グラフである。
【図３Ｃ】コレクション出力ポートからスカラ入力ポートへの接続及びスカラ出力ポートからコレクション入力ポートへの接続を含むデータ処理グラフである。
【図４Ａ】２つの構成要素の間のスカラポートからスカラポートへの接続の図である。
【図４Ｂ】２つの構成要素の間のコレクションポートからコレクションポートへの接続の図である。
【図４Ｃ】実行セットの入口点を含む２つの構成要素の間のコレクションポートからスカラポートへの接続の図である。
【図４Ｄ】実行セットの出口点を含む２つの構成要素の間のスカラポートからコレクションポートへの接続の図である。
【図５】スタックに基づく割り当てアルゴリズムが適用されたデータ処理グラフである。
【図６】グローバルなマッピングに基づく割り当てアルゴリズムが適用されたデータ処理グラフである。
【図７】ユーザ定義の実行セットを有するデータ処理グラフである。
【図８Ａ−８Ｂ】データ処理グラフ内の「同じセット（same set as）」関係を示す図である。
【図９】データ要素を複製する入口点を有するデータ処理グラフである。
【図１０Ａ−１０Ｃ】ユーザインターフェースのワークフローを示す図である。
【図１１Ａ】規則に違反する実行セットを有するデータ処理グラフである。
【図１１Ｂ】規則に違反する実行セットループを有するデータ処理グラフである。
【図１２Ａ−１２Ｂ】データ処理グラフ及び対応する制御グラフの例の図である。
【図１３Ａ−１３Ｂ】例示的な実行状態機械に関する状態遷移図である。
【図１４】処理エンジンのセットの図である。
【発明を実施するための形態】
【００３３】
図１を参照すると、タスクに基づく計算システム１００が、高レベルのプログラムの仕様１１０を使用して、プログラムの仕様１１０によって規定された計算を実行するようにコンピューティングプラットフォーム１５０の計算及び記憶リソースを制御する。コンパイラ／インタープリタ１２０は、高レベルのプログラムの仕様１１０を受け取り、タスクに基づくランタイムインターフェース／コントローラ１４０によって実行され得る形態のタスクに基づく仕様１３０を生じさせる。コンパイラ／インタープリタ１２０は、複数のデータ要素の各々に適用される細分化されたタスクとして個々に又は一体としてインスタンス化され得る１又は２以上の「構成要素」の１又は２以上の「実行セット」を特定する。コンパイル又は解釈プロセスの一部は、下でより詳細に説明されるように、これらの実行セットを特定することと、実行するためにセットを準備することとを含む。コンパイラ／インタープリタ１２０は、高レベルのプログラムの仕様１１０を解析するステップ、構文を検証するステップ、データフォーマットの型検査を行うステップ、任意のエラー又は警告を生じさせるステップ、タスクに基づく仕様１３０を準備するステップなどのステップを含むさまざまなアルゴリズムのいずれかを使用する可能性があり、コンパイラ／インタープリタ１２０は、例えば、コンピューティングプラットフォーム１５０上で実行される計算の効率を最適化するためにさまざまな技術を利用する可能性がある。コンパイラ／インタープリタ１２０によって生じさせられる目標のプログラムの仕様は、それ自体、タスクに基づく仕様１３０を生成するためにシステム１００の別の部分によってさらに処理される（例えば、さらにコンパイルされる、解釈されるなど）ことになる中間形態である可能性がある。下の検討は、そのような変換の１又は２以上の例を概説するが、例えば、コンパイラの設計に精通する者によって理解されるように、もちろん、変換のその他の手法があり得る。
【００３４】
概して、計算プラットフォーム１５０は、いくつかのコンピューティングノード１５２（例えば、分散された計算リソースと分散された記憶リソースとの両方を提供する個々のサーバコンピュータ）から構成され、それによって、高度な並列処理を可能にする。下でさらに詳細に検討されるように、高レベルのプログラムの仕様１１０において表される計算は、比較的細分化されたタスクとしてコンピューティングプラットフォーム１５０上で実行され、さらに、規定された計算の効率的な並列実行を可能にする。
【００３５】
１  データ処理グラフ
一部の実施形態において、高レベルのプログラムの仕様１１０は、データに対して実行されるデータ処理の計算の全体の一部をそれぞれが規定する「構成要素」のセットを含む「データ処理グラフ」と呼ばれるある種のグラフに基づくプログラムの仕様である。構成要素は、例えば、プログラミングユーザインターフェース及び／又は計算のデータ表現においてグラフ内のノードとして表される。上の背景技術において説明されたデータフローグラフなどの一部のグラフに基づくプログラムの仕様とは異なり、データ処理グラフは、データの転送、又は制御の転送、又はこれら両方のいずれかを表すノード間のリンクを含み得る。リンクの特徴を示す１つの方法は、構成要素に異なる種類のポートを設けることによる。リンクは、上流の構成要素の出力ポートから下流の構成要素の入力ポートに接続される有向リンクである。ポートは、データ要素がどのようにして書き込まれ、リンクから読まれるのか及び／又は構成要素がデータを処理するためにどのようにして制御されるのかの特徴を表すインジケータを有する。
【００３６】
これらのポートは、いくつかの異なる特徴を有する可能性がある。ポートの１つの特徴は、入力ポート又は出力ポートとしてのそのポートの方向性である。有向リンクは、データ及び／又は制御が上流の構成要素の出力ポートから下流の構成要素の入力ポートに運ばれることを表す。作成者は、異なる種類のポートを一緒にリンクすることを可能にされる。データ処理グラフのデータ処理の特徴の一部は、異なる種類のポートがどのようにして一緒にリンクされるのかに依存する。例えば、異なる種類のポート間のリンクは、下でより詳細に説明されるように、階層的形態の並列処理を提供する異なる「実行セット」内の構成要素の入れ子にされたサブセットにつながる可能性がある。特定のデータ処理の特徴が、ポートの種類によって示唆される。構成要素が有する可能性がある異なる種類のポートは、以下を含む。
・構成要素のインスタンスがポートに接続されたリンクを通り越すコレクションのすべてのデータ要素をそれぞれ読むか又は書くことを意味するコレクション入力ポート又はコレクション出力ポート。構成要素のコレクションポート間の単一のリンクを有する構成要素の対に関して、下流の構成要素は、概して、データ要素が上流の構成要素によって書かれるときにそれらのデータ要素を読むことを可能にされ、上流の構成要素と下流の構成要素との間のパイプライン並列処理を可能にする。下でより詳細に説明されるように、データ要素は、並べ替えられる可能性もあり、それが、並列処理の効率的な働きを可能にする。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなコレクションポートは、概して、構成要素の四角いコネクタ記号によって示される。
・構成要素のインスタンスが、それぞれ、ポートに接続されたリンクから最大で１つのデータ要素を読むか又はポートに接続されたリンクに最大で１つのデータ要素を書くことを意味するスカラ入力ポート又はスカラ出力ポート。構成要素のスカラポート間の単一のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が、単一のデータ要素の転送を制御の転送として使用することによって強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなスカラポートは、概して、構成要素の三角のコネクタ記号によって示される。
・スカラ入力又はスカラ出力と同様であるが、いかなるデータ要素も送信される必要がない制御入力ポート又は制御出力ポートであって、構成要素間の制御の転送を伝達するために使用される、制御入力ポート又は制御出力ポート。構成要素の制御ポート間のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が（たとえそれらの構成要素がコレクションポート間のリンクも有するとしても）強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのような制御ポートは、概して、構成要素の丸いコネクタ記号によって示される。
【００３７】
これらの異なる種類のポートが、データ処理グラフの柔軟な設計を可能にし、ポートの種類の重なり合う特性によってデータ及び制御フローの強力な組合せを許容する。特に、（「データポート」と呼ばれる）ある形態でデータを運ぶ２つの種類のポート、コレクションポート及びスカラポートが存在し、（「シリアルポート」と呼ばれる）直列実行を強制する２つの種類のポート、スカラポート及び制御ポートが存在する。データ処理グラフは、概して、いかなる接続された入力データポートも持たない「ソース構成要素」である１又は２以上の構成要素と、いかなる接続された出力データポートも持たない「シンク構成要素」である１又は２以上の構成要素とを有する。一部の構成要素は、接続された入力データポートと接続された出力データポートとの両方を有する。一部の実施形態において、グラフは、巡回することを許されず、したがって、有向非巡回グラフ（ＤＡＧ，directed acyclic graph）でなければならない。この特徴は、下でより詳細に説明されるように、ＤＡＧの特定の特徴を利用するために使用され得る。
【００３８】
また、データ処理グラフの構成要素における専用の制御ポートの使用は、特定のその他の制御フロー技術を使用してはあり得ない計算の異なる部分の柔軟な制御を可能にする。例えば、データフローグラフの間に依存関係の制約を適用することができるジョブ制御の解決策は、単一のデータフローグラフ内の構成要素間の依存関係の制約を定義する制御ポートによって可能にされる細分化された制御を提供しない。さらに、逐次的に実行される異なるフェーズに構成要素を割り当てるデータフローグラフは、個々の構成要素を順番に並べる柔軟性を許容しない。例えば、単純なフェーズを使用してはあり得ない入れ子にされた制御トポロジーが、本明細書において説明される制御ポート及び実行セットを使用して定義され得る。このより大きな柔軟性は、より多くの構成要素が可能であるときに同時に実行されることを可能にすることによって性能を潜在的に向上させる可能性もある。
【００３９】
異なる方法で異なる種類のポートを接続することによって、作成者は、データ処理グラフの構成要素のポートの間の異なる種類のリンクの構成を規定することができる。例えば、ある種類のリンクの構成が、特定の種類のポートが同じ種類のポートに接続されることに対応する可能性があり（例えば、スカラ−スカラリンク）、別の種類のリンクの構成が、特定の種類のポートが異なる種類のポートに接続されることに対応する可能性がある（例えば、コレクション−スカラリンク）。これらの異なる種類のリンクの構成は、作成者がデータ処理グラフの一部に関連する意図された振る舞いを視覚的に特定する方法と、その振る舞いを可能にするために必要とされる対応する種類のコンパイルプロセスをコンパイラ／インタープリタ１２０に示す方法との両方として働く。本明細書において説明される例は異なる種類のリンクの構成を視覚的に表現するために異なる種類のポートに一意の形状を使用するが、システムのその他の実装形態は、異なる種類のリンクを提供し、それぞれの種類のリンクに一意の視覚的インジケータ（例えば、太さ、リンクの種類、色など）を割り当てることによって異なる種類のリンクの構成の振る舞いを区別する可能性がある。しかし、ポートの種類の代わりにリンクの種類を使用して、上で挙げられた３種類のポートによって可能なのと同じさまざまなリンクの構成を表すためには、４種類以上のリンク（例えば、スカラ−スカラ、コレクション−コレクション、制御−制御、コレクション−スカラ、スカラ−コレクション、スカラ−制御など）が存在することになるであろう。その他の例は、異なる種類のポートを含むが、ただし、データ処理グラフ内でポートの種類を視覚的に明示的に示さない可能性がある。
【００４０】
コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフを準備するための手順を実行する。第１の手順は、構成要素の潜在的に入れ子にされた実行セットの階層を特定するための実行セット発見前処理手順である。第２の手順は、各実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実装する制御コードを形成するためにコンパイラ／インタープリタ１２０が使用する対応する制御グラフを各実行セットに関して生じさせるための制御グラフ生成手順である。これらの手順の各々が、以下でより詳細に説明される。
【００４１】
少なくとも１つの入力データポートを有する構成要素は、各入力データ要素若しくはコレクション（又は複数の構成要素の入力ポート上のデータ要素及び／若しくはコレクションのタプル）に対して実行される処理を規定する。そのような規定の１つの形態は、１つの入力データ要素及び／若しくはコレクション又は入力データ要素及び／若しくはコレクションのタプルに対して実行される手順としての形態である。構成要素は、少なくとも１つの出力データポートを有する場合、対応する１つの出力データ要素及び／若しくはコレクション又は出力データ要素及び／若しくはコレクションのタプルを生成し得る。そのような手順は、高レベルのステートメントに基づく言語で（例えば、例えば、米国特許第８，０６９，１２９号明細書「Editing and Compiling Business Rules」において使用されたＪａｖａのソースステートメント若しくはデータ操作言語（ＤＭＬ，Data Manipulation Language）を使用して）規定される可能性があり、又は何らかの完全に若しくは部分的にコンパイルされた形態で（例えば、Ｊａｖａのバイトコードとして）提供される可能性がある。例えば、構成要素は、その構成要素の入力データ要素及び／若しくはコレクション並びにその構成要素の出力データ要素及び／若しくはコレクション、或いはより広く、そのようなデータ要素若しくはコレクションへの、又は入力を獲得し、出力データ要素若しくはコレクションを提供するために使用される手順若しくはデータオブジェクト（本明細書においては「ハンドル」と呼ばれる）への参照を引数が含む作業手順を有する可能性がある。
【００４２】
作業手順は、さまざまな種類である可能性がある。規定され得る手順の種類を限定することを意図することなく、ある種類の作業手順は、レコードフォーマットに従ってデータ要素に対する個別的な計算を規定する。単一のデータ要素は、テーブル（又はその他の種類のデータセット）からのレコードである可能性があり、レコードのコレクションは、テーブル内のレコードのすべてである可能性がある。例えば、単一のスカラ入力ポート及び単一のスカラ出力ポートを有する構成要素に関するある種類の作業手順は、１つの入力レコードを受け取ることと、そのレコードに対して計算を実行することと、１つの出力レコードを提供することとを含む。別の種類の作業手順は、複数のスカラ入力ポートから受け取られた入力レコードのタプルが複数のスカラ出力ポートにおいて送出される出力レコードのタプルを形成するためにどのようにして処理されるかを規定する可能性がある。
【００４３】
データ処理グラフによって規定される計算の意味的（semantic）定義は、グラフによって定義される計算の処理の順序付け及び同時性に対する制約及び／又は制約がないことを表すので元来並列的である。したがって、計算の定義は、結果が計算のステップの何らかの逐次的な順序付けと等価であることを必要としない。一方、計算の定義は、計算の部分を順番に並べることを必要とする特定の制約と、計算の部分の並列実行の制限を与える。
【００４４】
データ処理グラフの検討において、ランタイムシステム内の別個の「タスク」としての構成要素のインスタンスの実装形態は、順番に並べる制約及び並列実行の制約を表す手段であると考えられる。意味的定義に合致するように計算を実装する、タスクに基づく仕様へのデータ処理グラフの実装形態のより詳細な検討は、グラフに基づく仕様自体の特徴の検討の後により完全に検討される。
【００４５】
概して、データ処理グラフ内の各構成要素は、グラフの実行中にコンピューティングプラットフォームにおいて何度かインスタンス化される。各構成要素のインスタンスの数は、複数の実行セットのうちのどれに構成要素が割り当てられるのかに依存する可能性がある。構成要素の複数のインスタンスがインスタンス化されるとき、２つ以上のインスタンスが並列に実行される可能性があり、異なるインスタンスがシステム内の異なるコンピューティングノードにおいて実行される可能性がある。ポートの種類を含む構成要素の相互接続が、規定されたデータ処理グラフによって認められる並列処理の性質を決定する。
【００４６】
概して、構成要素の異なるインスタンスの実行の間で状態は保持されないが、以下で検討されるように、構成要素の複数のインスタンスの実行にまたがる可能性がある永続的なストレージを明示的に参照するためにシステム内で特定のプロビジョニング（provision）が行われる。
【００４７】
単一のレコードが単一の出力レコードを生成するためにどのようにして処理されるかを作業手順が規定し、ポートがコレクションポートであるものとして示される例においては、構成要素の単一のインスタンスが実行される可能性があり、連続的なレコードを処理して連続的な出力レコードを生じさせるために作業手順が反復される。この状況においては、反復毎に構成要素内で状態が保持されることがあり得る。
【００４８】
単一のレコードが単一の出力レコードを生成するためにどのようにして処理されるかを作業手順が規定し、ポートがスカラポートであるものとして示される例においては、構成要素の複数のインスタンスが実行される可能性があり、異なる入力レコードに関する作業手順の実行の間で状態は保持されない。
【００４９】
また、一部の実施形態において、システムは、上で導入された最も細分化された仕様に従わない作業手順をサポートする。例えば、作業手順は、例えば、スカラポートを通じて単一のレコードを受け付け、コレクションポートを通じて複数の出力レコードを提供する繰り返しを内部で実装する可能性がある。
【００５０】
上述のように、ある形態でデータを運ぶ２つの種類のデータポート、コレクションポート及びスカラポートが存在し、直列実行を強制する２つの種類のシリアルポート、スカラポート及び制御ポートが存在する。場合によっては、ある種類のポートが、別の種類のポートにリンクによって接続される可能性がある。それらの場合の一部が、下で説明される。場合によっては、ある種類のポートが、同じ種類のポートにリンクされる。２つの制御ポート間のリンク（「制御リンク」と呼ばれる）は、リンクを介してデータが送信されることを必要とせずに、リンクされた構成要素の間に直列実行の順序付けを課す。２つのデータポート間のリンク（「データリンク」と呼ばれる）は、データフローを提供し、さらに、スカラポートの場合は直列実行の順序付けの制約を強制し、コレクションポートの場合は直列実行の順序付けを必要としない。概して、典型的な構成要素は、入力データポート及び出力データポート（コレクションポートか又はスカラポートかのどちらか）並びに入力制御ポート及び出力制御ポートを含む少なくとも２種類のポートを有する。制御リンクは、上流の構成要素の制御ポートを下流の構成要素の制御ポートに接続する。同様に、データリンクは、上流の構成要素のデータポートを下流の構成要素のデータポートに接続する。
【００５１】
グラフィカルユーザインターフェースが、構成要素のセットから特定のデータ処理の計算を規定するために作成者によって使用される可能性があり、構成要素の各々が、特定のタスク（例えば、データ処理タスク）を実行する。作成者は、ディスプレイスクリーン上に示されたキャンバス領域上でデータ処理グラフを組み立てることによってそのようにする。これは、構成要素をキャンバス上に置くことと、それらの構成要素のさまざまなポートを適切なリンクによって接続することと、その他の方法で構成要素を適切に構成することとを含む。以下の簡単な例は、コレクションポートの単一の対及び制御ポートの単一の対を有する構成要素の文脈での特定の振る舞いを示す。
【００５２】
図２ａは、組み立てられているデータ処理グラフの一部が入力制御ポート及び出力制御ポート２１２Ａ、２１４Ａ並びに入力コレクションポート及び出力コレクションポート２１６Ａ、２１８Ａを有する第１の構成要素２１０Ａを含む例を示す。制御リンク２２０Ａ、２２２Ａは、入力制御ポート及び出力制御ポート２１２Ａ、２１４Ａをデータ処理グラフ内のその他の構成要素の制御ポートに接続する。同様に、データリンク２２４Ａ、２２６Ａは、入力コレクションポート及び出力コレクションポート２１６Ａ、２１８Ａをデータ処理グラフ内のその他の構成要素のポートに接続する。コレクションポート２１６Ａ、２１８Ａは、図中で長方形によって表され、一方、制御ポート２１２Ａ、２１４Ａは、円形によって表される。
【００５３】
概して、入力コレクションポート２１６Ａは、構成要素２１０Ａによって処理されるデータを受け取り、出力コレクションポート２１４は、構成要素２１０Ａによって処理されたデータを提供する。コレクションポートの場合、このデータは、概して、規定されていない数のデータ要素の順序付けられていないコレクションである。計算全体の特定のインスタンスにおいて、コレクションは、複数のデータ要素を含む可能性があり、又は単一のデータ要素を含む可能性があり、又はデータ要素を含まない可能性がある。一部の実装形態において、コレクションは、コレクション内の要素が順序付けられていないのか又は順序付けられているのか（及び順序付けられている場合は何が順序付けを決定するのか）を決定するパラメータに関連付けられる。以下でより詳細に説明されるように、順序付けられていないコレクションに関して、データリンクの受信側の構成要素によってデータ要素が処理される順序は、データリンクの送信側の構成要素がそれらのデータ要素を提供する順序と異なる可能性がある。したがって、コレクションポートの場合、それらのコレクションポートの間のデータリンクは、構成要素から構成要素へデータ要素を特定の順序で移動させる「ベルトコンベア」とは対照的に、データ要素が任意の順序で引き出される可能性があるデータ要素の「袋」として働く。
【００５４】
制御リンクは、構成要素が実行を開始するのかどうか及び構成要素がいつ実行を開始するのかを決定する制御情報を制御ポート間で運ぶために使用される。例えば、制御リンク２２２Ａは、構成要素２１０Ａが完了した後に（つまり、逐次的順序で）構成要素２１０Ｂが実行を開始するべきであることを示すか、又は構成要素２１０Ｂが実行を開始すべきでない（つまり、「抑制される」べきである）ことを示すかのどちらかである。したがって、データは制御リンク上で送信されないが、制御リンクは受信側の構成要素に信号を送信するものと見なされ得る。この信号が送信される方法は、実装形態に応じて変わる可能性があり、一部の実装形態においては、構成要素間の制御メッセージの送信を含む可能性がある。その他の実装形態は、実際の制御メッセージを送信することを含まない可能性があるが、その代わりに、受信側の構成要素によって表されるタスクに関連するプロセスを直接呼び出すか若しくは関数を呼び出すプロセス（又は抑制する場合にはそのような呼び出し又は関数呼び出しの省略）を含む可能性がある。
【００５５】
したがって、制御ポートをリンクする能力は、データ処理グラフの異なる構成要素によって表されるデータ処理の計算の異なる部分の間の相対的な順序付けを作成者が制御することを可能にする。加えて、構成要素の制御ポートを使用するこの順序付けメカニズムを提供することは、データフロー及び制御フローに関連する論理の混合を可能にする。実際、これは、データが制御に関する判断を行うために使用されることを可能にする。
【００５６】
図２Ａに示された例において、制御ポートは、その他の制御ポートに接続し、データポートは、その他のデータポートに接続する。しかし、データポート上のデータは、元来、２つの異なる種類の情報を運ぶ。第１の種類は、データ自体であり、第２の種類は、ともかくデータの存在である。この第２の種類の情報は、制御信号として使用され得る。結果として、スカラデータポートが制御ポートに接続されることを可能にすることによってさらなる柔軟性を与えることが可能になる。
【００５７】
図２Ｂは、スカラポートを制御ポートに接続する能力によって与えられた柔軟性を利用する例示的なデータ処理グラフ２３０を示す。
【００５８】
データ処理グラフ２３０は、「日付情報を計算する」とラベル付けされた第１の構成要素２３１と、「月次報告を行うか？」とラベル付けされた第２の構成要素２３２と、「週次報告を行うか」とラベル付けされた第３の構成要素２３３と、「月次報告」とラベル付けされた第４の構成要素２３４と、「週次報告を行うか？」とラベル付けされた第５の構成要素２３５と、「週次報告」とラベル付けされた第６の構成要素２３６とを取りあげる。データ処理グラフ２３０は、日次報告か、日次報告及び週次報告か、又は３種類すべての報告かのいずれかを常に生成する手順を実行する。これらの結果のうちのどれが発生するかに関する判断は、第１の構成要素２３１によって提供される特定の日付情報の評価に依存する。したがって、図２Ｂは、実行を効果的に制御するデータの例を示す。
【００５９】
実行は、第１の構成要素２３１がその第１の構成要素２３１の出力スカラポートから第２の構成要素２３２の入力スカラポート及び第３の構成要素２３３の入力スカラポートに日付情報を提供するときに始まる。接続された入力制御ポートを持たない第２の構成要素２３２は、直ちに仕事に取りかかる。第３の構成要素２３３を含むすべてのその他の構成要素は、（１又は２以上の）接続された入力制御ポートを有し、好適な肯定の制御信号によって作動されるのを待たなければならない。
【００６０】
第２の構成要素２３２は、この日付情報を検査し、月次報告を行うことが適切かどうかを判定する。２つのあり得る結果が存在し、つまり、月次報告が必要とされるか、又は月次報告が必要とされないかのどちらかである。第２の構成要素２３２と第３の構成要素２３３との両方が、２つの出力スカラポートを有し、一方の出力スカラポート（つまり、選択されたポート）上に肯定の制御信号として働くデータ要素を提供し、他方の出力スカラポート上に否定の制御信号として働くデータ要素を提供する選択機能を実行するように構成される。
【００６１】
日付情報に基づいて、第２の構成要素２３２が月次報告が必要とされないと判定する場合、第２の構成要素２３２は、その第２の構成要素２３２の下の出力スカラポートから第３の構成要素２３３の入力制御ポートにデータ要素を送信する。このデータ要素は、第２の構成要素２３２が第１の構成要素２３１によって提供されたデータを処理し終えたことと、第３の構成要素２３３がその第３の構成要素２３３の受け取られた日付情報データを今や処理し始め得ることとを第３の構成要素２３３に示す肯定の制御信号として解釈される。
【００６２】
一方、第２の構成要素２３２は、第１の構成要素２３１によって提供された日付情報に基づいて、月次報告が必要とされると判定する場合、代わりに、その第２の構成要素２３２の出力スカラポートから第４の構成要素２３４の入力制御ポートに肯定の制御信号として解釈されるデータ要素を送信する。データ要素は単なる制御信号ではないが、第４の構成要素２３４は、そのデータ要素がその第４の構成要素２３４の入力制御ポートに提供されるので、そのデータ要素を肯定の制御信号として扱う。第４の構成要素２３４は、データ要素内の実データを無視し、単に、データ要素の存在を肯定の制御信号として使用する。
【００６３】
第４の構成要素２３４は、月次報告を生成し始める。完了すると、第４の構成要素２３４は、その第４の構成要素２３４の出力制御ポートから第３の構成要素２３３の入力制御ポートに制御信号を出力する。これは、第３の構成要素２３３に、それ（すなわち、第３の構成要素２３３）が第１の構成要素２３１がそれに供給した日付情報を今や処理し始めることができることを伝える。
【００６４】
したがって、第３の構成要素２３３は、その第３の構成要素２３３の入力スカラポートを介して第１の構成要素２３１によって提供されたデータをいつも最終的に処理する。唯一の違いは、どちらの構成要素が処理を開始するようにその第３の構成要素２３３をトリガするのか、つまり、第２の構成要素２３２であるのか又は第４の構成要素２３４であるのかという点にある。これは、どちらかのポート（又は両方のポート）において受け取られた肯定の制御信号が処理をトリガするように、第３の構成要素２３３の２つの入力制御ポートがＯＲ論理を使用して組み合わされるからである。
【００６５】
グラフ２３０の残りは、基本的に同じように、ただし、第３の構成要素２３３が第２の構成要素２３２の役割を引き継ぎ、第６の構成要素２３６が第４の構成要素２３４の役割を引き継ぐようにして動作する。
【００６６】
第２の構成要素２３２か又は第４の構成要素２３４かのどちらかから来るその第３の構成要素２３３の入力制御ポートの制御信号によって作動されると、第３の構成要素２３３は、第１の構成要素２３１を第３の構成要素２３３に接続するデータリンクを介して第１の構成要素２３１によって提供された日付情報を検査する。第３の構成要素２３３は、日付情報から、週次報告が必要とされないと判定する場合、その第３の構成要素２３３の出力スカラポートのうちの一方から第５の構成要素２３５の入力制御ポートに肯定の制御信号として解釈されるデータ要素を送信する。
【００６７】
一方、第３の構成要素２３３は、週次報告が必要とされると判定する場合、その第３の構成要素２３３の他方の出力スカラポートから第６の構成要素２３６の入力制御ポートに肯定の制御信号として解釈されるデータ要素を送信する。第６の構成要素２３６は、週次報告を生成し始める。完了すると、第３の構成要素２３３は、その第３の構成要素２３３の出力スカラポートから第５の構成要素２３５の入力制御ポートに肯定の制御信号として解釈されるデータ要素を送信する。
【００６８】
したがって、第５の構成要素２３５は、いつも最終的に実行され、唯一の違いは、結局のところ、第３の構成要素２３３が実行を開始するようにその第５の構成要素２３５をトリガするのか又は第６の構成要素２３６が実行を開始するようにその第５の構成要素２３５をトリガするのかということである。第３の構成要素２３３又は第６の構成要素２３６のどちらかから制御信号を受け取ると、第５の構成要素２３５は、日次報告を生成する。
【００６９】
スカラデータポートとコレクションデータポートとの両方の使用も示す図２Ｃに例が示される。
【００７０】
図２Ｃは、「入力ファイル」とラベル付けされた第１の構成要素２４１と、「要求からファイル名を取得する」とラベル付けされた第２の構成要素２４２と、「読まれたファイル」とラベル付けされた第３の構成要素２４３と、「不良レコードか？」とラベル付けされた第４の構成要素２４４と、「無効なレコード」とラベル付けされた第５の構成要素２４５と、「不良レコードのファイル名を生じさせる」とラベル付けされた第６の構成要素２４６と、「何らかの確認エラーか？」とラベル付けされた第７の構成要素２４７と、「アラートを送信する」とラベル付けされた第８の構成要素２４８とを有するデータ処理グラフ２４０を示す。このグラフは、不良レコードをファイルに書き、そのような不良レコードを検出するとアラートを送信するように意図される。
【００７１】
構成要素２４１及び２４３は、データのソースとして働く構成要素の例であり、構成要素２４５は、データのシンクとして働く構成要素の例である。構成要素２４１及び２４３は、（ローカルファイルシステム又は分散型ファイルシステムなどの）ファイルシステム内にさまざまなフォーマットのいずれかで記憶される可能性がある入力ファイルをそれらの構成要素のソースとして使用する。入力ファイル構成要素は、ファイルの内容を読み、そのファイルからレコードのコレクションを生成する。（構成要素２４３に示される）スカラ入力ポートは、読まれるファイルの場所（例えば、パス又はユニフォームリソースロケータ）及び使用されるレコードフォーマットを規定するデータ要素を提供する。場合によっては、場所及びレコードフォーマットは、入力ファイル構成要素にパラメータとして提供される可能性があり、その場合、入力スカラポートは、（構成要素２４１のように）いかなる上流の構成要素にも接続される必要がなく、示される必要がない。（構成要素２４１と構成要素２４３との両方に示される）コレクション出力ポートは、レコードのコレクションを提供する。同様に、（構成要素２４５などの）出力ファイル構成要素は、入力コレクションポートを介して受け取られたレコードのコレクションを出力ファイルに書く（出力ファイルの場所及びレコードフォーマットは、入力スカラポートによって規定されていてもよい可能性がある）。入力ファイル又は出力ファイル構成要素は、（構成要素２４５などの）別の構成要素の制御ポートにリンクされる制御入力又は出力ポートを含む可能性もある。
【００７２】
示されたデータ処理グラフ２４０において、より大きな破線の長方形内にある構成要素は、実行セットの一部である。この実行セットは、この実行セット内に入れ子にされた別の実行セットを含む。やはり破線の長方形内に示されるこの入れ子にされた実行セットは、第４の構成要素２４４のみを含む。実行セットは、下でより詳細に検討される。
【００７３】
動作中、第１の構成要素２４１は、入力ファイルを読む。第１の構成要素２４１は、実行されているとき、入力ファイル内のレコードのコレクションを、出力コレクションデータポートから第２の構成要素２４２の入力コレクションデータポートへのデータリンクを介して第２の構成要素に提供する。下でより詳細に説明されるように、第２の構成要素２４２及び（同じ実行セット内にある）その他の下流の構成要素の異なるインスタンスが、コレクション内の各レコードに関して実行される可能性がある。第２の構成要素２４２は、その第２の構成要素２４２の制御入力に何も接続されていないので、直ちに処理を開始する。完了すると、第２の構成要素２４２は、その第２の構成要素の出力スカラポート上でファイル名を提供する。このファイル名は、それぞれの入力スカラポートにおいて第３の構成要素２４３と第６の構成要素２４６との両方によって受け取られる。
【００７４】
第３の構成要素２４３は、ファイル名によって特定されたファイルを直ちに読み、第４の構成要素２４４のインスタンスの入力スカラポートに配信するために出力コレクションポート上でファイルの内容を提供する。一方、第６の構成要素２４６は、同じファイル名を受け取り、第５の構成要素２４５及び第７の構成要素２４７の対応する入力スカラポートに接続された出力スカラポートの両方においてその第６の構成要素２４６が提供する別のファイル名を出力する。
【００７５】
第６の構成要素２４６からのファイル名及び第４の構成要素２４４からの不良レコードを受け取ると、第５の構成要素２４５は、ファイル名が第６の構成要素２４６によって特定される出力ファイルに不良レコードを書く。
【００７６】
第７の構成要素２４７は、そのデータ入力ポートにおいてデータを受け取ると実行されるように準備されない唯一の構成要素である。出力ファイルに書く第５の構成要素２４５が終了されるとき、第５の構成要素２４５は、その第５の構成要素２４５の制御出力ポートから第７の構成要素２４７の入力制御ポートに制御信号を送信する。第７の構成要素２４７は、エラーがあったと判定する場合、第８の構成要素２４８の入力スカラポートにデータを提供する。これは、第８の構成要素２４８にアラームを生じさせる。これは、制御ポートがデータ処理グラフ内の特定の構成要素の実行を制限するために使用される例を与える。
【００７７】
別の構成要素の状態に基づいてある構成要素における処理を制御する能力が、複数の上流の構成要素のセットがすべて特定の状態に到達したときに処理を制御する可能性をその能力に伴っていることは明らかであるに違いない。例えば、データ処理グラフは、同じ制御ポートへの又は同じ制御ポートからの複数の制御リンクをサポートし得る。代替的に、一部の実施形態において、構成要素は、複数の入力制御ポート及び出力制御ポートを含み得る。デフォルトの論理が、コンパイラ／インタープリタ１２０によって適用される可能性がある。作成者は、制御信号がどのように組み合わされるかを決定するためのカスタムの論理も提供する可能性がある。これは、上流の構成要素のさまざまな制御リンクに当てはまり、特定の論理的状態が達せられるとき（例えば、すべての上流の構成要素が完了したとき、及びデフォルトのＯＲ論理の場合は少なくとも１つが作動制御信号を送信したとき）にのみ構成要素の開始をトリガする組合せ論理を好適に構成することによって行われ得る。
【００７８】
概して、制御信号は、処理の開始をトリガするか又は処理の抑制をトリガする信号である可能性がある。前者は、「肯定の制御信号」であり、後者は「否定の制御信号」である。しかし、タスクが呼び出される（処理の開始をトリガする）べきか否かを判定するために組合せ論理が使用される場合、論理が、すべての入力が否定の制御信号を与えるときにのみタスクが呼び出されるように通常の解釈を「逆転させる」ことがあり得る。概して、組合せ論理は、下でより詳細に説明される制御グラフに対応する状態機械の次の状態を決定するための任意の「真理値表」を提供する可能性がある。
【００７９】
接続されていない制御ポートは、デフォルトの状態を割り当てられる可能性がある。一実施形態において、デフォルトの状態は、正の制御信号に対応する。下でより詳細に説明されるように、これは、データ処理グラフを表す制御グラフ内の暗黙的な開始構成要素及び終了構成要素の使用によって実現され得る。
【００８０】
さまざまな構成要素の異なる種類のデータポートは、データがそれらの構成要素をリンクする入力ポート及び出力ポートの種類に応じて異なる方法で構成要素間のリンクを通り越すことを可能にする。上述のように、スカラポートは、最大で１つのデータ要素（すなわち、０個か又は１つのデータ要素）の（スカラ出力ポートのための）生成又は（スカラ入力ポートのための）消費を表す。一方、コレクションポートは、潜在的に複数のデータ要素のセットの（コレクション出力ポートのための）生成又は（コレクション入力ポートのための）消費を表す。単一のデータ処理グラフにおいて両方の種類のデータポートをサポートすることによって、計算リソースが、より効率的に割り振られる可能性があり、より複雑な制御フロー及びデータフローが、タスクの間で生じさせられる可能性があり、作成者が望まれる振る舞いを簡単に示すことを可能にする。
【００８１】
図３Ａを参照すると、データ処理グラフ３００は、一連の３つの接続された構成要素、第１の構成要素（Ａ１）３０２、第２の構成要素（Ｂ１）３０４、及び第３の構成要素（Ｃ１）３０６を含む。第１の構成要素は、コレクション型入力ポート３０８及びスカラ型出力ポート３１０を含む。第２の構成要素３０４は、スカラ型入力ポート３１２及びスカラ型出力ポート３１４を含む。第３の構成要素は、スカラ型入力ポート３１６及びコレクション型出力ポート３１８を含む。
【００８２】
第１の構成要素３０２のスカラ出力ポート３１０を第２の構成要素３０４のスカラ入力ポート３１２に接続する第１のリンク３２０は、データが第１の構成要素３０２と第２の構成要素３０４との間を通ることを可能にすることと、同時に、第１の構成要素及び第２の構成要素３０２、３０４の直列実行を強制することとの両方を行う。同様に、第２の構成要素３０４のスカラ出力ポート３１４を第３の構成要素３０６のスカラ入力ポート３１６に接続する第２のリンク３２２は、データが第２の構成要素３０４と第３の構成要素３０６との間を通ることを可能にすることと、第２の構成要素及び第３の構成要素３０４、３０６の直列実行を強制することとの両方を行う。
【００８３】
図３Ａのスカラポートの相互接続が原因で、第２の構成要素３０４は、第１の構成要素３０２が完了した（第１のリンク３２０を介して単一のデータ要素を渡した）後にのみ実行を開始し、第３の構成要素３０６は、第２の構成要素３０４が完了した（第２のリンク３２２を介して単一のデータ要素を渡した）後にのみ実行を開始する。つまり、データ処理グラフの３つの構成要素の各々は、厳格な順番Ａ１／Ｂ１／Ｃ１で１回実行される。
【００８４】
一部の例においては、構成要素のうちの１又は２以上が抑制状態にされる可能性があり、つまり、１又は２以上の構成要素が実行されず、したがって、それらの構成要素の出力ポートからいかなるデータ要素も渡さない。構成要素が抑制されることを可能にすることは、例えば、いかなる有用な処理も実行しない構成要素が計算リソース（例えば、プロセス又はメモリ）がそれらの構成要素につぎ込まれることを必要としないことを保証することによってリソースが無駄にされることを防止する。抑制された構成要素の出力ポートにのみ接続されたスカラ入力ポートを有するすべての構成要素は、それらの構成要素がデータを受け取らないので実行されない。例えば、第１の構成要素３０２が抑制状態にされる場合、第２の構成要素３０４のスカラ入力ポート３１２は、第１の構成要素３０２のスカラ出力ポート３１０からデータを受け取らず、したがって、実行されない。第２の構成要素３０４が実行されないので、第３の構成要素３０６のスカラ入力ポート３１６は、第２の構成要素３０４のスカラ出力ポート３１４からデータを受け取らず、やはり実行されない。したがって、２つのスカラポートの間で渡されるデータは、２つのリンクされた制御ポートの間で送られる信号と同様の肯定の制御信号としても働く。
【００８５】
図３Ａの例示的なデータ処理グラフにおいて、第１の構成要素３０２の入力ポート３０８及び第３の構成要素３１８の出力ポートは、たまたまコレクションポートであり、コレクションポートは、第１、第２、及び第３の構成要素３０２、３０４、３０６を接続するスカラポートによって課されるそれらの構成要素の直列実行の振る舞いに影響を与えない。
【００８６】
概して、コレクションポートは、構成要素の間でデータ要素のコレクションを渡すことと、同時に、そのセット内のデータ要素を並べ替える承諾をランタイムシステムに与えることとの両方のために使用される。順序付けられていないコレクションのデータ要素の並べ替えは、データ要素間で計算の状態への依存性がないか、又は各データ要素が処理されるときにアクセスされるグローバルな状態が存在する場合に最終状態がそれらのデータ要素が処理された順序に依存しないかのどちらの理由で許容される。並べ替えのこの承諾は、実行時まで並列処理についての判断を遅らせる柔軟性を提供する。
【００８７】
図３Ｂを参照すると、データ処理グラフ３２４は、一連の３つの接続された構成要素、第１の構成要素（Ａ２）３２６、第２の構成要素（Ｂ２）３２８、及び第３の構成要素（Ｃ２）３３０を含む。第１の構成要素３２６は、コレクション型入力ポート３３２及びコレクション型出力ポート３３４を含む。第２の構成要素３２８は、コレクション型入力ポート３３６及びコレクション型出力ポート３３８を含む。第３の構成要素３３０は、コレクション型入力ポート３４０及びコレクション型出力ポート３４２を含む。
【００８８】
３つの構成要素３２６、３２８、３３０の各々は、１又は２以上の入力要素のコレクションが１又は２以上の出力要素のコレクションを生じさせるためにどのようにして処理されるかを規定する。特定の入力要素と特定の出力要素との間に１対１の対応があるとは限らない。例えば、第１の構成要素３２６と第２の構成要素３２８との間のデータ要素３４４の第１のコレクションの中のデータ要素の数は、第２の構成要素３２８と第３の構成要素３３０との間のデータ要素３４６の第２のコレクションの中の要素の数とは異なる可能性がある。コレクションポートの間の接続に課される制約は、コレクション内の各データ要素が、それらのデータ要素が処理される順序に関連して第１の構成要素３２６と第２の構成要素３２８との間及び第２の構成要素３２８と第３の構成要素３３０との間で任意の並べ替えを許容しながらコレクションポートからコレクションポートへと渡されることだけである。代替的に、その他の例において、コレクションポートは、順序を維持するように構成されていてもよい可能性がある。この例において、３つの構成要素３２６、３２８、３３０は、一緒に開始し、同時に実行され、パイプライン並列処理を許容する。
【００８９】
図１に関連して説明されたコンパイラ／インタープリタ１２０は、コレクションポート間の接続を認識し、実行されている計算にとって適切である方法で計算を実行可能コードに変換するように構成される。コレクションデータリンクの順序付けられていない性質は、これがどのようにして実現されるかの柔軟性をコンパイラ／インタープリタ１２０に与える。例えば、たまたま、第２の構成要素３２８に関して、各出力要素が単一の入力要素に基づいて計算される（つまり、データ要素にまたがって保持される状態がない）場合、コンパイラ／インタープリタ１２０は、（例えばランタイムで利用可能な計算リソースに応じて）データ要素毎に構成要素の１つのインスタンスずつものインスタンスをインスタンス化することによってランタイムシステムがデータ要素の処理を動的に並列化することを可能にし得る。特別な場合に、入力コレクションポートを有する構成要素のデータ要素にまたがって状態が保持されていてもよい可能性がある。しかし、通常の場合でも、ランタイムシステムは、構成要素のタスクを並列化することを可能にされる可能性がある。例えば、ランタイムシステムは、グローバルな状態が保持されていないことを検出する場合、タスクを並列化することを可能にされ得る。一部の構成要素が状態を保持することをサポートするように構成される可能性もあり、その場合、並列処理は許容されない可能性がある。コレクションが順序付けられていない場合、データ要素の間で順序が維持される必要がないという事実は、第２の構成要素３２８の各インスタンスがそのインスタンスの出力データ要素が利用可能になり次第そのインスタンスの出力データ要素を第３の構成要素３３０に提供することができ、第３の構成要素３３０が第２の構成要素３２８のすべてのインスタンスが終了する前にそれらのデータ要素を処理し始めることができることを意味する。
【００９０】
一部の例において、グラフの作成者は、１つの構成要素のコレクション型出力ポートを別の構成要素のスカラ型入力ポートに接続することによって、データのコレクションの中のデータ要素の処理が動的に並列化され得ることを明示的に示すことができる。また、そのような指示は、コレクションの異なる要素の処理の間で状態が保持されないことを必要とする。図３Ｃを参照すると、データ処理グラフ３４８は、一連の３つの接続された構成要素、第１の構成要素（Ａ３）３５０、第２の構成要素（Ｂ３）３５２、及び第３の構成要素（Ｃ３）３５４を含む。第１の構成要素３５０は、コレクション型入力ポート３５６及びコレクション型出力ポート３５８を含む。第２の構成要素３５２は、スカラ型入力ポート３６０及びスカラ型出力ポート３６２を含む。第３の構成要素３５４は、コレクション型入力ポート３６４及びコレクション型出力ポート３６６を含む。
【００９１】
第１の構成要素のコレクション型出力ポート３５８は、第１のリンク３６８によって第２の構成要素３５２のスカラ型入力ポート３６０に接続され、第２の構成要素３５２のスカラ型出力ポート３６２は、第２のリンク３７０によってコレクション型入力ポート３６４に接続される。下でより詳細に説明されるように、コレクション型出力ポートからスカラ型入力ポートへのリンクは、実行セットへの入口点を示唆し、スカラ型出力ポートからコレクション型入力ポートへのリンクは、実行セットの出口点を示唆する。極めて広く、下でより詳細に説明されるように、実行セットに含まれる構成要素は、データ要素のコレクションからのデータ要素を処理するためにランタイムコントローラによって動的に並列化され得る。
【００９２】
図３Ｃにおいて、第１の構成要素３５０のコレクション型出力ポート３５８と第２の構成要素３５２のスカラ型入力ポート３６０との間のリンク３６８は、実行セットへの入口点を示唆する。第２の構成要素３５２のスカラ型出力ポート３６２と第３の構成要素３５４のコレクション型入力ポート３６４との間のリンク３７０は、実行セットの出口点を示唆する。つまり、第２の構成要素３５２は、実行セットの唯一の構成要素である。
【００９３】
第２の構成要素３５２が実行セットに含まれるので、第１の構成要素３５０のコレクション型出力ポート３５８から受け取られるそれぞれのデータ要素のために第２の構成要素３５２の別々のインスタンスが起動される。別々のインスタンスの少なくとも一部は、実行時まで行われない可能性がある判断に応じて並列に実行され得る。この例において、第１の（３５０）及び第３の（３５４）構成要素は、一緒に開始し、同時に実行され、一方、第２の構成要素（３５２）は、リンク３６８を介して受け取られるコレクション内のそれぞれのデータ要素のために１回実行される。代替的に、第２の構成要素３５２は、コレクション内の複数のデータ要素のそれぞれのタプルのために１回実行される可能性がある。
【００９４】
２  実行セット
図１に関連して上で説明されているように、コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフを準備するためにデータ処理グラフに実行セット発見前処理手順を実行する。通常の意味で、本明細書において使用されるとき、用語「実行セット」は、一体として呼び出され、出力コレクションポートのデータ要素の一部などのデータの一部に適用され得る１又は２以上の構成要素のセットを指す。したがって、それぞれの入力データ要素（又は実行セットの１若しくは２以上の入力ポートに与えられる複数の入力データ要素のタプル）のために、実行セット内の各構成要素の最大で１つのインスタンスが実行される。実行セット内で、スカラポート及び制御ポートへのリンクによって、順番に並べる制約が課され、実行セット内の構成要素の並列実行は、順番に並べる制約が破られない限りにおいて容認される。コンパイラ／インタープリタ１２０によって実行セットのために準備されるコードは、コードが実行されるときに構成要素に対応するタスクがどのようにして実行されるべきか（例えば、並列処理の度合い）を示す埋め込まれた情報（例えば、アノテーション又は修飾子（modifier））を含み得る。受け取られたコレクション内の複数のデータ要素のタプルのために実行セットの１つのインスタンスが実行される例において、タプルは、例えば、決まった数のデータ要素、又は何らかの特徴（例えば、共通のキー値）を共有するいくつかのデータ要素からなる可能性がある。並列に実行されることを可能にされる少なくともいくつかの構成要素が存在する例において、実行セットは、複数のタスク、例えば、実行セットまるごとのためのタスクと、構成要素のうちの１又は２以上のインスタンスの同時実行のための１又は２以上のサブタスクとを使用して実施される可能性がある。したがって、実行セットの異なるインスタンスを表すタスクは、それら自体、例えば、同時に実行され得るサブタスクによってさらに細分化されたタスクに分解される可能性がある。異なる実行セットのためのタスクは、概して、独立して並列に実行され得る。したがって、例えば、大きなデータセットが百万個のレコードを有する場合、百万個の独立したタスクが存在する可能性がある。タスクの一部は、コンピューティングプラットフォーム１５０の異なるノード１５２上で実行される可能性がある。タスクは、単一のノード１５２上でさえも同時に効率的に実行され得る軽量スレッドを使用して実行される可能性がある。
【００９５】
概して、（１又は２以上の）割り当てアルゴリズムによって特定された実行セット（すなわち、ルート実行セット（root execution set）以外の実行セット）は、実行セットの境界の「駆動（driving）」スカラデータポートを通じてデータ要素を受け取る。実行セットの駆動入力スカラデータポートにおいて受け取られた各データ要素に関して、実行セット内の構成要素の各々は、１回実行される（作動される場合）か又はまったく実行されない（抑制される場合）。上流のコレクションポートから実行セットに利用され得る複数のデータ要素を処理するために、実行セットの複数のインスタンスがインスタンス化され、並列に実行され得る。実行セットに関する並列処理の度合いは、ランタイムで決定される可能性があり（実行セットを並列化しないあり得る判断を含み）、ランタイムで利用可能な計算リソースによってのみ制限される。実行セットの独立したインスタンスの個々の出力は、順序に関係なく実行セットの（１又は２以上の）出力ポートにおいて集められ、下流の構成要素に利用され得るようにされる。代替的に、その他の実施形態においては、駆動入力スカラデータポートを必要としないルート実行セット以外の実行セットが（場合によってはユーザ入力に基づいて）認識される可能性がある。駆動入力スカラデータポートのないそのような実行セットは、本明細書において説明される手順を使用して、適切な場合（例えば、下で説明されるラッチされた実行セットのために）単一のインスタンスにおいて、又は複数のインスタンスにおいて並列に実行される可能性がある。例えば、実行セットが実行される回数及び／又は実行される実行セットの並列なインスタンスの数を決定するパラメータが設定される可能性がある。
【００９６】
極めて広く、実行セット発見手順は、データ要素の順序付けられていないコレクションの入力要素にセットとして適用されるべきデータ処理グラフ内の構成要素のサブセットを決定する割り当てアルゴリズムを使用する。割り当てアルゴリズムは、データ処理グラフを詳しく調べ（traverse）、割り当て規則に基づいて各構成要素をサブセットに割り当てる。下の例において明らかにされるように、所与のデータ処理グラフは、実行セットの階層の異なるレベルで入れ子にされたいくつかの実行セットを含む可能性がある。
【００９７】
本明細書において説明されるデータ処理グラフにおいては、２種類のデータポート、すなわち、スカラデータポート及びコレクションデータポートが存在する。概して、リンクされた構成要素の対（すなわち、図４Ａから４Ｄの上流の構成要素Ａ  ４０２及び下流の構成要素Ｂ  ４０４）は、（それらの構成要素が別の理由で異なる実行セット内にあるのでない限り）それらの構成要素が同じ種類のポートの間のリンクによって接続される場合、デフォルトで同じ実行セット内にある。図４Ａにおいて、構成要素Ａ  ４０２は、スカラ型の出力ポート４０６を有し、構成要素Ｂ  ４０４は、スカラ型の入力ポート４０８を有する。構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０が２つのスカラ型ポートを接続するので、構成要素Ａ及びＢ  ４０２、４０４は、この例において同じ実行セット内にある。図４Ａにおいては、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンクがスカラ−スカラリンクであるので、０データ要素か又は１データ要素かのどちらかがリンク４１０を介して上流の構成要素Ａ  ４０２と下流の構成要素Ｂ  ４０４との間で渡される。上流の構成要素Ａ  ４０２の処理が完了すると、（上で説明されているように）上流の構成要素Ａ  ４０２が抑制されない限り、データ要素がリンク４１０を介して渡され、上流の構成要素Ａ  ４０２が抑制される場合、データ要素はリンク４１０を介して渡されない。
【００９８】
図４Ｂを参照すると、構成要素Ａ  ４０２は、コレクション型の出力ポート４１２を有し、構成要素Ｂ  ４０４は、コレクション型の入力ポート４１４を有する。構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０が２つのコレクション型ポートを接続するので、構成要素Ａ  ４０２及び構成要素Ｂ  ４０４は、この例においてやはり同じ実行セット内にある。図４Ｂにおいては、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０がコレクション−コレクションリンクであるので、データ要素のセットが、リンク４１０を介して上流の構成要素と下流の構成要素との間で渡される。
【００９９】
リンクの両側のポートの種類が合致しないとき、実行セットの階層のレベルの暗黙的な変化がある。特に、合致しないポートは、実行セットの階層の特定のレベルの実行セットの入口点又は出口点を表す。一部の例において、実行セットの入口点は、コレクション型出力ポートとスカラ型入力ポートとの間のリンクとして定義される。図４Ｃにおいては、構成要素Ａ  ４０２の出力ポート４１６がコレクション型ポートであり、構成要素Ｂ  ４０４の入力ポート４１８がスカラ型ポートであるので、実行セットの入口点４２４の一例が、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０に示される。
【０１００】
一部の例において、実行セットの出口点は、スカラ型出力ポートとコレクション型入力ポートとの間のリンクとして定義される。図４Ｄを参照すると、構成要素Ａ  ４０２の出力ポート４２０がスカラ型ポートであり、構成要素Ｂ  ４０４の入力ポート４２２がコレクション型ポートであるので、実行セットの出口点４２６の一例が、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０に示される。
【０１０１】
コンパイラ／インタープリタ１２０のコンパイル及び／又は解釈の前に実施される割り当てアルゴリズムは、実行セットの入口点及び実行セットの出口点を使用して、データ処理グラフ内に存在する実行セットを発見する。
【０１０２】
２．１  スタックに基づく割り当てアルゴリズム
例示を目的として、第１の例において、データ処理グラフは、単純な１次元のグラフ構造を有し、比較的簡単な割り当てアルゴリズムが、スタックに基づくアルゴリズムを使用して示される。スタックに基づく割り当てアルゴリズムにおいて、データ処理グラフ内の各構成要素は、分割文字「／」によって分けられた整数からなる１又は２以上の「ＩＤ文字列」によってラベル付けされる。所与の構成要素のＩＤ文字列内に分割文字「／」が現れる回数は、実行セットの階層内の構成要素のレベルを決定する。一部の例において、構成要素は、複数の入力リンクを有する可能性があり、したがって、複数のＩＤ文字列を有する可能性がある。そのような場合、アルゴリズムは、どのＩＤ文字列を使用すべきかを決定するための下でより詳細に説明される規則を有する。
【０１０３】
スタックに基づく割り当てアルゴリズムの一例においては、コンパイラ／インタープリタ１２０が、以下の手順に従って上流から下流に向かってデータ処理グラフを進む。最初に、（１又は２以上の）最も上流の構成要素が、その構成要素が実行セットの階層のルートレベルの構成要素であることを示すＩＤ文字列「０」によってラベル付けされる。
【０１０４】
それから、最も上流の構成要素から最も下流の構成要素までの経路上のリンク及び構成要素が詳しく調べられる。上流の構成要素のコレクション型出力ポートと下流の構成要素のコレクション型入力ポートとの間のリンクが遭遇される場合、上流の構成要素のＩＤ文字列が下流の構成要素に伝搬される。同様に、上流の構成要素のスカラ型出力ポートと下流の構成要素のスカラ型入力ポートとの間のリンクが遭遇される場合、上流の構成要素のＩＤ文字列が下流の構成要素に伝搬される。
【０１０５】
上流の構成要素のコレクション型出力ポートと下流の構成要素のスカラ型入力ポートとの間のリンクが遭遇される場合、下流の構成要素は、「／ｎ」をラベルの末尾に付加されるようにして上流の構成要素のラベルを含むラベルを割り当てられ、ここで、ｎは、1+<既存のID文字列の整数の中の最大>である。上流の構成要素のスカラ型出力ポートと下流の構成要素のコレクション型入力ポートとの間のリンクが遭遇される場合、下流の構成要素は、ラベルの一番右のＩＤ文字列の整数（及びその整数の分割文字「／」）が削除されるようにして上流の構成要素のラベルを含むラベルを割り当てられる。
【０１０６】
一部の例においては、さまざまな状況が、規則に違反するものと見なされる可能性があり、アルゴリズムのエラーを引き起こす（例えば、構成要素が実行セットの階層の同じレベルに２つの異なるＩＤ文字列を有する場合、又は実行セット内の閉路の存在）。
【０１０７】
図５を参照すると、上述のスタックに基づく割り当てアルゴリズムが、例示的なデータ処理グラフ５５０に適用され、（ルートの「レベル０」実行セット５５１の他の）２つの実行セット、すなわち、第１の「レベル１」実行セット５７０と、第１の「レベル１」実行セット６７０内に入れ子にされた第２の「レベル２」実行セット５７２とを発見する結果となる。２つの実行セット５７０、５７２の発見にたどり着くと、スタックに基づく割り当てアルゴリズムは、まず、最も上流の構成要素、第１のデータセット６５６をＩＤ文字列「０」によってラベル付けする。それから、スタックに基づく割り当てアルゴリズムは、データ処理グラフ５５０を通る１次元の経路の構成要素を詳しく調べる。経路を詳しく調べる際、スタックに基づく割り当てアルゴリズムは、まず、第１のデータセット５５６から第１の構成要素５５８へのリンクを詳しく調べる。第１のデータセット５５６の出力ポートがコレクション型出力ポートであり、第１の構成要素５５８の入力ポートがスカラ型入力ポートであるので、第１の構成要素５５８は、ＩＤ文字列の末尾に「／１」を付加された第１のデータセット５５６のＩＤ文字列であるＩＤ文字列「０／１」を割り当てられ、ここで、１は、すべての既存のＩＤ文字列の整数の中の最大+1である。概して、第１の構成要素５５８のＩＤ文字列に「／１」を付加することは、ルートの「レベル０」実行セット５５１から「レベル１」実行セット５７０への遷移の指示である。一部の例において、この遷移は、第１の実行セットの入口点インジケータ５５７を使用して表される。
【０１０８】
そして、割り当てアルゴリズムは、第１の構成要素５５８から第２の構成要素５６０へのリンクを詳しく調べる。第１の構成要素５５８の出力ポートがコレクション型出力ポートであり、第２の構成要素５６０の入力ポートがスカラ型入力ポートであるので、第２の構成要素５６０は、ＩＤ文字列の末尾に「／２」が付加された第１の構成要素５５８のＩＤ文字列であるＩＤ文字列「０／１／２」を割り当てられ、ここで、２は、すべての既存のＩＤ文字列の整数の中の最大+1である。概して、第２の構成要素５６０のＩＤ文字列に「／２」を付加することは、「レベル１」実行セット５７０から「レベル２」実行セット５７２への遷移の指示である。一部の例において、この遷移は、第２の実行セットの入口点インジケータ５５９を使用して表される。
【０１０９】
そして、割り当てアルゴリズムは、第２の構成要素５６０から第３の構成要素５６２へのリンクを詳しく調べる。第２の構成要素５６０の出力ポートがスカラ型出力ポートであり、第３の構成要素５６２の入力ポートがスカラ型入力ポートであるので、第２の構成要素５６０のＩＤ文字列（すなわち、「０／１／２」）が第３の構成要素５６２に伝搬される。
【０１１０】
そして、割り当てアルゴリズムは、第３の構成要素５６２から第４の構成要素５６４へのリンクを詳しく調べる。第３の構成要素５６２の出力ポートがスカラ型出力ポートであり、第４の構成要素５６４の入力ポートがコレクション型入力ポートであるので、第４の構成要素は、ＩＤ文字列の一番右のＩＤ文字列「２」（及びそのＩＤ文字列の分割文字「／」）が削除された第３の構成要素５６２のＩＤ文字列であるＩＤ文字列「０／１」を割り当てられる。概して、第３の構成要素５６２のＩＤ文字列から「／２」を削除することは、「レベル２」実行セット５７２から「レベル１」実行セット５７０への遷移の指示である。一部の例において、この遷移は、第１の実行セットの出口点インジケータ５６３を使用して表される。
【０１１１】
そして、割り当てアルゴリズムは、第４の構成要素５６４から第５の構成要素５６６へのリンクを詳しく調べる。第４の構成要素５６４の出力ポートがスカラ型出力ポートであり、第５の構成要素５６６の入力ポートがコレクション型入力ポートであるので、第５の構成要素５６６は、第４の構成要素５６４の一番右のＩＤ文字列の整数（及びその整数の分割文字「／」）が削除された第４の構成要素５６４のＩＤ文字列であるＩＤ文字列「０」を割り当てられる。概して、第４の構成要素５６４のＩＤ文字列から「／１」を削除することは、「レベル１」実行セット５７０からルートの「レベル０」実行セット５５１への遷移の指示である。一部の例において、この遷移は、第２の実行セットの出口点インジケータ５６５を使用して表される。
【０１１２】
最後に、割り当てアルゴリズムは、第５の構成要素５６６から第２のデータセット５６８へのリンクを詳しく調べる。第５の構成要素５６６の出力ポートがコレクション型出力ポートであり、第２のデータセット５６８の入力ポートがコレクション型入力ポートであるので、第５の構成要素５６６のＩＤ文字列（すなわち、「０」）が第２のデータセット５６８に伝搬される。
【０１１３】
一部の例においては、入口点インジケータ及び出口点インジケータに加えて、データ要素のコレクションのフローと個々のスカラデータ要素との間の変化が、ユーザインターフェース内でさらなる視覚的な手がかりを使用して視覚的に表される可能性がある。例えば、リンクを表す線は、コレクションポートとインジケータとの間でより太く、インジケータとスカラポートとの間でより細い可能性がある。
【０１１４】
スタックに基づく割り当てアルゴリズムの結果は、構成要素の各々がＩＤ文字列によってラベル付けされるデータ処理グラフ５５０のバージョンを含む。図５の例において、第１のデータセット５５６、第２のデータセット５６８、及び第５の構成要素５６６は、すべてＩＤ文字列「０」によってラベル付けされる。第１の構成要素５５８及び第４の構成要素５６４は、ＩＤ文字列「０／１」によってラベル付けされる。第２の構成要素５６０及び第３の構成要素５６２は、それぞれＩＤ文字列「０／１／２」によってラベル付けされる。
【０１１５】
それぞれの一意のＩＤ文字列は、実行セットの階層内の一意の実行セットを表す。ＩＤ文字列「０」を有するそれらの構成要素は、実行の階層内でルートの「レベル０」実行セット５５１にグループ分けされる。ＩＤ文字列「０／１」を有するそれらの構成要素は、ルートの実行セット６５１内に入れ子にされる「レベル１」実行セット６７０にグループ分けされる（「０／１」は実行セット０内に入れ子にされた実行セット１と読まれ得る）。ＩＤ文字列「０／１／２」を有するそれらの構成要素は、ルートの「レベル０」実行セット５５１と「レベル１」実行セット５７０との両方の中に入れ子にされる「レベル２」実行セット５７２にグループ分けされる。
【０１１６】
２．２  グローバルなマッピングに基づく割り当てアルゴリズム
一部の例において、より普通のデータ処理グラフに関して、スタックに基づく割り当てアルゴリズムは、実行セットの階層を正しく決定するのに十分でない可能性がある。例えば、普通のデータ処理グラフにおいては、任意の所与の構成要素が、複数の入力ポート及び／又は複数の出力ポートを有し、スタックに基づく手法に適合しない普通のデータ処理グラフを実行することができる。そのような例においては、実行セットの階層を決定するためにグローバルなマッピングに基づく割り当てアルゴリズムが使用される。
【０１１７】
グローバルなマッピングに基づく割り当てアルゴリズムは、データ処理グラフが有向非巡回グラフに制約されるという事実を利用する。有向非巡回グラフは、トポロジカルソートされた順序を使用して処理され、グラフの各構成要素が構成要素のすぐ上流の構成要素のすべてが処理された後にのみ処理されることを保証することができる。構成要素のすぐ上流の構成要素のすべてが処理されたことが知られているので、構成要素のＩＤ文字列は、構成要素からすぐ上流にある（実行セットの階層内の）最も深く入れ子にされた構成要素のＩＤ文字列を選択することによって決定され得る。
【０１１８】
一部の例において、グローバルなマッピングに基づく割り当てアルゴリズムは、Kahnのアルゴリズムなどの標準的なトポロジカルソートアルゴリズムを使用して所与のデータ処理グラフのトポロジカルソートされた順序を得る。Kahnのアルゴリズムは、以下の擬似コードによってまとめられる。
L ←ソートされた要素を含むことになる空のリスト
S ←入ってくる辺を持たないすべてのノードのセット
while Sが空ではない do
Sからノードnを削除する
nをLの末尾に加える
for each nからmへの辺eを有するノードm do
グラフから辺eを削除する
if mがいかなるその他の入ってくる辺も持たない then
mをSに挿入する
if グラフが辺を有する then
エラーを返す(グラフが少なくとも1つの閉路を有する)
else
L(トポロジカルソートされた順序)を返す
【０１１９】
トポロジカルソートされた順序を決定した後、グローバルなマッピングに基づく割り当てアルゴリズムは、構成要素の各々の適切なＩＤ文字列（又は単にＩＤ番号）を決定するためにデータ処理グラフの構成要素をトポロジカルソートされた順序で詳しく調べる。特に、構成要素が詳しく調べられるとき、データ処理グラフのあらゆる構成要素は、その構成要素のＩＤ文字列をその構成要素の出力ポートにコピーする。上流の構成要素からすぐ下流にあり、実行セットの入口点又は実行セットの出口点によって上流の構成要素と分けられていない構成要素は、上流の構成要素の出力ポートからＩＤ文字列を読み、ＩＤ文字列をそれらの構成要素のＩＤ文字列として使用する。
【０１２０】
実行セットの入口点によって下流の構成要素と分けられている上流の構成要素に関しては、新しいＩＤ文字列が実行セットの入口点において割り振られ、下流の構成要素のＩＤ文字列として使用するためにその下流の構成要素に与えられる。下流の構成要素のＩＤ文字列への上流の構成要素のＩＤ文字列のマッピング（つまり、親／子マッピング）が、後で使用するためにグローバルマッピングデータストアに記憶される。
【０１２１】
実行セットの出口点によって下流の構成要素から分けられている上流の構成要素に関しては、上流の構成要素の出力ポートのＩＤ文字列が、実行セットの出口点によって読まれる。それから、グローバルマッピングデータストアは、出力ポートにおけるＩＤ文字列の親ＩＤ文字列を決定するために問い合わされる。親ＩＤ文字列は、下流の構成要素のＩＤ文字列として使用するためにその下流の構成要素に与えられる。
【０１２２】
図６を参照すると、例示的な普通の２次元データ処理グラフ６２８の一例が、上述のグローバルなマッピングに基づく割り当てアルゴリズムを使用して分析される。データ処理グラフ６２８は、第１のデータセット（Ｄ１）６３２、第１の構成要素（Ｃ１）６３８、第２の構成要素（Ｃ２）６４０、第３の構成要素（Ｃ３）６４５、第４の構成要素（Ｃ４）６４６、第５の構成要素（Ｃ５）６４２、第６の構成要素（Ｃ６）６４４、及び第２のデータセット（Ｄ２）６３４を含む。データ処理グラフ６２８の個々の構成要素にＩＤ文字列を割り当てる前に、トポロジカルソートアルゴリズム（例えば、Kahnのアルゴリズム）が、データ処理グラフに適用され、トポロジカルソートされた順序Ｄ１、Ｃ１、Ｃ２、Ｃ３、Ｃ４、Ｃ５、Ｃ６、Ｄ２をもたらす。
【０１２３】
トポロジカルソートされた順序が決定された状態で、グローバルなマッピングに基づく割り当てアルゴリズムは、構成要素の各々の適切なＩＤ文字列を決定するためにデータ処理グラフの構成要素をトポロジカルソートされた順序で詳しく調べ、（ルートの「レベル０」実行セットの他に）「レベル１」実行セット６３０及び「レベル２」実行セット６３１を発見する結果となる。２つの実行セット６３０、６３１の発見にたどり着くと、グローバルなマッピングに基づく割り当てアルゴリズムは、まず、最も上流の構成要素、第１のデータセット（Ｄ１）６３２をＩＤ文字列「０」によってラベル付けする。それから、スタックに基づく割り当てアルゴリズムは、データ処理グラフ６２８の構成要素及びリンクをトポロジカルソートされた順序で詳しく調べる。
【０１２４】
グローバルなマッピングに基づく割り当てアルゴリズムは、まず、第１のデータセット（Ｄ１）６３２から第１の構成要素（Ｃ１）６３８へのリンクを詳しく調べる。第１のデータセット（Ｄ１）６３２の出力ポートがコレクション型出力ポートであり、第１の構成要素（Ｃ１）６３８の入力ポートがコレクション型入力ポートであるので、実行セットの入口点又は実行セットの出口点は特定されず、第１のデータセット（Ｄ１）６３２のＩＤ文字列（すなわち、「０」）が第１のデータセット（Ｄ１）６３２の出力ポートから読まれ、第１の構成要素（Ｃ１）６３８に割り当てられる。
【０１２５】
そして、割り当てアルゴリズムは、第１の構成要素（Ｃ１）６３８と第２の構成要素（Ｃ２）６４０との間のリンクを詳しく調べる。第１の構成要素（Ｃ１）６３８の出力ポートがコレクション型出力ポートであり、第２の構成要素（Ｃ２）６４０の入力ポートがスカラ型入力ポートであるので、第１の実行セットの入口点６３９が、２つの構成要素６３８、６４０の間で特定される。第１の実行セットの入口点６３９において、新しいＩＤ文字列（すなわち、「１」）が割り振られ、第２の構成要素（Ｃ２）６４０のＩＤ文字列として割り当てられる。第１の実行セットの入口点６３９の子ＩＤ文字列（すなわち、「１」）への第１の実行セットの入口点６３９の親ＩＤ文字列（すなわち、「０」）のマッピング６５３が、後で使用するためにグローバルマッピングデータストア６４９に記憶される。
【０１２６】
そして、割り当てアルゴリズムは、第２の構成要素（Ｃ２）６４０から第３の構成要素（Ｃ３）６４５へのリンクを詳しく調べる。第２の構成要素（Ｃ２）６４０の出力ポートがコレクション型出力ポートであり、第３の構成要素６４５の入力ポートがスカラ型入力ポートであるので、第２の実行セットの入口点６４１が、２つの構成要素６４０、６４５の間で特定される。第２の実行セットの入口点６４１において、新しいＩＤ文字列（すなわち、「２」）が割り振られ、第３の構成要素（Ｃ３）６４５のＩＤ文字列として割り当てられる。第２の実行セット６４１の子ＩＤ文字列（すなわち、「２」）への第２の実行セットの入口点６４１の親ＩＤ文字列（すなわち、「１」）のマッピング６５１が、後で使用するためにグローバルマッピングデータストア６４９に記憶される。
【０１２７】
そして、割り当てアルゴリズムは、第３の構成要素（Ｃ３）６４５から第４の構成要素（Ｃ４）６４６へのリンクを詳しく調べる。第３の構成要素（Ｃ３）６４５の出力ポートがコレクション型出力ポートであり、第４の構成要素（Ｃ４）６４６の入力ポートがコレクション型入力ポートであるので、実行セットの入口点又は実行セットの出口点は特定されず、第３の構成要素（Ｃ３）６４５のＩＤ文字列（すなわち、「２」）が第３の構成要素（Ｃ３）６４５の出力ポートから読まれ、第４の構成要素（Ｃ４）６４６に割り当てられる。
【０１２８】
そして、割り当てアルゴリズムは、第４の構成要素（Ｃ４）６４６から第５の構成要素（Ｃ５）６４２へのリンクを詳しく調べる。第４の構成要素（Ｃ４）６４６の出力ポートがスカラ型出力ポートであり、第５の構成要素（Ｃ５）６４２の入力ポートがコレクション型入力ポートであるので、第１の実行セットの出口点６４７が、２つの構成要素６４６、６４２の間で特定される。第１の実行セットの出口点６４７において、第４の構成要素（Ｃ４）６４６のＩＤ文字列が第４の構成要素（Ｃ４）６４６の出力ポートから読まれ、グローバルマッピングデータストア６４９に問い合わせるために使用される。グローバルマッピングデータストア６４９は、第２の実行セットの入口点６４１に関連して記憶された親子関係６５１（すなわち、「１／２」）を返す。親／子関係６５１の親ＩＤ文字列（すなわち、「１」）が、第５の構成要素（Ｃ５）６４２のＩＤ文字列として割り当てられる。
【０１２９】
そして、割り当てアルゴリズムは、第５の構成要素（Ｃ５）６４２から第６の構成要素（Ｃ６）６４４へのリンクを詳しく調べる。第５の構成要素（Ｃ５）６４２の出力ポートがスカラ型出力ポートであり、第６の構成要素（Ｃ６）６４４の入力ポートがコレクション型入力ポートであるので、第２の実行セットの出口点６４３が、２つの構成要素６４２、６４４の間で特定される。第２の実行セットの出口点６４３において、第５の構成要素（Ｃ５）６４２のＩＤ文字列が第５の構成要素（Ｃ５）６４２の出力ポートから読まれ、グローバルマッピングデータストア６４９に問い合わせるために使用される。グローバルマッピングデータストア６４９は、第１の実行セットの入口点６３９に関連して記憶された親子関係６５３（すなわち、「０／１」）を返す。親／子関係６５３の親ＩＤ文字列（すなわち、「０」）が、第６の構成要素（Ｃ６）６４４のＩＤ文字列として割り当てられる。
【０１３０】
最後に、割り当てアルゴリズムは、第６の構成要素（Ｃ６）６４４から第２のデータセット（Ｄ２）６３４へのリンクを詳しく調べる。第６の構成要素（Ｃ６）６４４の出力ポートがコレクション型出力ポートであり、第２のデータセット（Ｄ２）６３４の入力ポートがコレクション型入力ポートであるので、実行セットの入口点又は実行セットの出口点は特定されず、第６の構成要素（Ｃ６）６４４のＩＤ文字列（すなわち、「０」）が第６の構成要素（Ｃ６）６４４の出力ポートから読まれ、第２のデータセット（Ｄ２）６３４に割り当てられる。
【０１３１】
グローバルなマッピングに基づく割り当てアルゴリズムの結果は、構成要素の各々がＩＤ文字列によってラベル付けされるデータ処理グラフ６２８のバージョンを含む。図６の例において、第１のデータセット（Ｄ１）６３２、第１の構成要素（Ｃ１）６３８、第６の構成要素（Ｃ６）６４４、及び第２のデータセット（Ｄ２）６３４は、すべてＩＤ文字列「０」によってラベル付けされる。第２の構成要素（Ｃ２）６４０及び第５の構成要素（Ｃ５）６４２は、両方ともＩＤ文字列「１」によってラベル付けされる。第３の構成要素（Ｃ３）６４５及び第４の構成要素（Ｃ４）６４６は、両方ともＩＤ文字列「２」によってラベル付けされる。
【０１３２】
それぞれの一意のＩＤ文字列は、実行セットの階層内の一意の実行セットを表す。ＩＤ文字列「０」を有するそれらの構成要素は、実行の階層内でルートの「レベル０」実行セット６２９にグループ分けされる。ＩＤ文字列「１」を有するそれらの構成要素は、ルート実行セット６２９内に入れ子にされる「レベル１」実行セット６３０にグループ分けされる。ＩＤ文字列「２」を有するそれらの構成要素は、ルートの「レベル０」実行セット６２９と、さらに「レベル１」実行セット６３０との中に入れ子にされる「レベル２」実行セット６３１にグループ分けされる。
【０１３３】
２．３  ユーザ定義の実行セット
上述の例においては、（１又は２以上の）割り当てアルゴリズムが、いかなるユーザの介入もなしにデータ処理グラフ内に存在する実行セットを自動的に発見するために使用される。しかし、一部の例においては、ユーザが、（１又は２以上の）割り当てアルゴリズムによって提供される機能以外の機能を必要とする可能性がある。そのような場合、ユーザは、どこで実行セットが始まる及び／又は終わるのかを明示的に定義するために実行セットの入口点及び実行セットの出口点を明示的に追加することができる。図７を参照すると、データ処理グラフ７７６は、第１のデータセット７７４、第１の構成要素７７８、第２の構成要素７８０、及び第２のデータセット７９０を含む。上述の（１又は２以上の）割り当てアルゴリズムをデータ処理グラフ７７６に適用することは、第１の構成要素７７８及び第２の構成要素７８０を含む単一の実行セットを発見する結果となる。しかし、この場合、ユーザは、データ処理グラフ７７６に関して２つの実行セット（すなわち、第１の実行セット７８２及び第２の実行セット７８６）を明示的に定義した。特に、ユーザは、第１の構成要素７７８の出力ポートから出るリンクに実行セットの出口点構成要素７８４を挿入し、第２の構成要素７８０の入力ポートに入るリンクに実行セットの入口点７８８を挿入した。実行セットの出口点７８４及び実行セットの入口点７８８を第１の構成要素７７８と第２の構成要素７８０との間のリンクに追加することによって、ユーザは、単一の実行セットであったものを２つの別々の実行セット７８２、７８６に本質的に分割した。
【０１３４】
一部の例において、ユーザは、データ処理グラフに関する実行セットの入口点及び実行セットの出口点のすべてを定義する。その他の例において、ユーザは、実行セットの入口点及び実行セットの出口点の一部を定義し、そして、データ処理グラフに関する残りの実行セットの入口点及び実行セットの出口点を発見することを（１又は２以上の）割り当てアルゴリズムに任せる。
【０１３５】
２．４  同じセット関係
一部の例において、ユーザは、所与の構成要素がどの実行セットに属するのかを明示的に指定したい可能性がある。例えば、図８Ａを参照すると、データ処理グラフ８９２は、データ生成構成要素８９６及びテーブル読み取り構成要素８９８からデータ要素を受け取る第１の実行セット８９４を含む。これらの構成要素は、これらの構成要素が提供するデータ要素のコレクションの異なるソースを有することを除いて入力ファイル構成要素と同様である。データ生成構成要素８９６に関しては、ファイルの場所を規定するスカラ入力ポートの代わりに、生成されるレコードデータ要素の数を規定する（任意の）スカラ入力ポートが存在し、各データ要素がどのようにして生じさせられるべきであるかを規定するパラメータも存在する。テーブル読み取り構成要素８９８に関しては、ファイルの場所を規定するスカラ入力ポートの代わりに、データベース内のテーブルを規定する（任意の）スカラ入力ポートが存在する。第１の実行セット８９４は、データ生成構成要素８９６及びテーブル読み取り構成要素８９８からのデータ要素を一緒になって処理して、第１のデータセット８９９に提供される出力を生じさせる第１の構成要素８９１及び第２の構成要素８９３を含む。
【０１３６】
図８Ａにおいて、テーブル読み取り構成要素８９８は、第１の実行セット８９４の外部にあり、つまり、テーブル読み取り構成要素８９８は、１回実行され、そのテーブル読み取り構成要素８９８のコレクション型出力ポートからデータ要素のコレクションを出力する。データ要素のコレクションは、第１の実行セット８９４の境界を横切り、第１の構成要素８９１のコレクション型入力ポートに与えられる。実行セット８９４内の構成要素のそれぞれの並列のインスタンスのために、第１の構成要素８９１のコレクション型入力ポートにおけるデータ要素のコレクションのコピーが生成される。概して、リンクがコレクションポートからであるのか、スカラポートからであるのか、又は制御ポートからであるのかにかかわらず、異なる実行セットに割り当てられる構成要素の間のリンクは、実行セットに流れ込むリンクに関してすべてのインスタンスにデータ又は制御要素をコピーさせ、実行セットから流れ出すリンクに関してすべてのインスタンスからデータ又は制御要素を集めさせる。データ要素は、コレクションへと集められ、制御要素は、ベクトル（vector）へと集められ、そのコレクション又はベクトルは、下流の構成要素の制御論理に応じて（エラーとしてそのコレクション又はベクトルにフラグを立てる可能性も含め）適切に扱われ得る。
【０１３７】
図８Ｂを参照すると、一部の例においては、ユーザが、実行セット８９４内の構成要素のそれぞれの並列のインスタンスのためにテーブル読み取り構成要素８９８が実行されることを必要とする可能性がある。この機能を実現するために、ユーザは、テーブル読み取り構成要素８９８と第１の構成要素８９１との間に「同じセット」関係を規定することができる。ユーザが「同じセット」関係を規定した結果として、テーブル読み取り構成要素８９８は、第１の構成要素８９１と同じ実行セット（すなわち、第１の実行セット８９４）の中に移される。テーブル読み取り構成要素８９８が第１の実行セット８９４に含まれるので、第１の実行セット８９４内の構成要素のそれぞれの並列のインスタンスが、テーブル読み取り構成要素８９８のインスタンスを実行する。
【０１３８】
一部の例において、ユーザは、（例えば、下でより詳細に説明されるユーザインターフェースによって）移動元実行セット（source execution set）に関連するメニューから移動先実行セット（destination execution set）を選択することによって、又は移動元実行セットから移動先実行セットに構成要素をドラッグすることによって「同じセット」関係を規定することができる。一部の例においては、ドラッグされた構成要素が移動先実行セット内に規則を守って置かれ得ることを検証するためのエラー検査が実行される。例えば、互いに「同じセット」関係を有することになるすべての２つの構成要素に強制され得る１つのあり得る要件は、それらの構成要素の両方を含むデータ処理グラフを通り抜ける少なくとも１つの経路が存在しなければならないことである。
【０１３９】
２．５  コレクションデータの複製
一部の例においては、実行セット内の複数の構成要素が、それぞれ、実行セットの入口点を介して上流の構成要素の単一のコレクション出力ポートに接続されたスカラ入力ポートを有する可能性がある。同様に、実行セット内の複数の構成要素が、それぞれ、実行セットの下流の構成要素の単一のコレクション入力ポートに接続されたスカラ出力ポートを有する可能性がある。
【０１４０】
一部の例において、コレクション型出力ポートから複数の構成要素のスカラ入力ポートに同じデータを提供するために、実行セットの入口点は、スカラ入力ポートの各々のためにコレクションからの各データ要素の（１又は２以上の）複製を作り、（１又は２以上の）複製をそれらの対応するスカラ入力ポートに提供する。同様に、（実行セットの異なるそれぞれの繰り返しからの）複数の構成要素のスカラ出力ポートによって出力されたデータを合併するために、実行セットの出口点は、スカラ出力ポートから出力データ要素を受け取り、出力データ要素を合併し、それから、合併された出力データ要素を下流の構成要素のコレクション入力ポートに提供することができる。概して、下流の構成要素のコレクション入力ポートは、合併されたデータ要素を扱うように構成される。
【０１４１】
図９を参照すると、データ処理グラフ９２３が、第１のデータセット９２４、第２のデータセット９２６、及び実行セット９２８を含む。実行セット９２８は、２つの構成要素、すなわち、第１の構成要素９３０及び第２の構成要素９３２を含む。第１のデータセット９２４は、実行セット９２８の実行セットの入口点９３６に接続され、実行セット９２８の実行セットの入口点９３６にデータ要素のコレクションを提供するコレクション出力ポート９３４を有する。第２のデータセット９２６は、実行セット９２８の実行セットの出口点９４０に接続され、実行セット９２８の実行セットの出口点９４０からデータ要素のコレクションを受け取るコレクション入力ポート９３８を有する。
【０１４２】
実行セット９２８内で、第１の構成要素９３０は、第１のスカラ入力ポート９４２を有し、第２の構成要素９３２は、第２のスカラ入力ポート９４４を有する。第１のスカラ入力ポート９４２と第２のスカラ入力ポート９４４との両方は、実行セットの入口点９３６に接続され、実行セットの入口点９３６から個々のデータ要素を受け取る。上述のように、実行セットの入口点９３６は、実行セットの入口点９３６に接続された各スカラ入力ポートにデータ要素のコレクションの各データ要素のコピーを提供するために、コレクション出力ポート９３４から受け取られたデータ要素を複製する。図９において、実行セットの入口点９３６は、各データ要素の２つの複製を作り、複製のうちの一方を第１のスカラ入力ポート９４２に提供し、他方の複製を第２のスカラ入力ポート９４４に提供する。図から明らかなように、一部の例においては、グラフィカルユーザインターフェースにおける実行セットの入口点９３６の視覚的表現が、データ要素のいくつの複製が実行セットの入口点９３６によって作られるかを表現する。また、その他の例においては、複製の異なるコピーを表す異なる入口点インジケータが、実行セットにデータ要素を与えるコレクション出力ポートから提供されるそれぞれの複製されたデータ要素のコピーを必要とする実行セット内にあるのと同じ数の構成要素へと実行セットの境界付近で分けられ、分配される可能性がある。
【０１４３】
第１の構成要素９３０及び第２の構成要素９３２は、それらの構成要素のそれぞれのデータ要素を処理し、それらの構成要素のそれぞれの処理されたデータ要素を、スカラ出力ポート９４６、９４８を介して実行セットの出口点９４０に提供する。一部の例において、実行セットの出口点９４０は、処理されたデータ要素を対にグループ化し、処理されたデータ要素の対を第２のデータセット９２６のコレクション入力ポート９３８に出力する。図から明らかなように、一部の例においては、グラフィカルユーザインターフェースにおける実行セットの出口点９４０の視覚的表現が、データ要素のいくつの複製が実行セットの入口点９３６によってグループ化されるかを表現する。
【０１４４】
２．６  リソースのラッチ
一部の例において、所与の実行セット内の構成要素は、並列のインスタンスにおいて複数回実行される可能性がある。一部の例において、並列のインスタンスを実行する構成要素は、共有リソースにアクセスする必要がある可能性がある。競合状態、及び複数のプロセスが共有リソースにアクセスすることに関連するその他の問題を防止するために、ラッチメカニズムが使用され得る。概して、ラッチメカニズムは、実行セット内の構成要素の１つのインスタンスが実行を終えるのにかかる時間の間、そのインスタンスが共有リソースに対するランタイムロックを取得することを可能にする。インスタンスがラッチされた共有リソースを有する間、インスタンスの構成要素のみが共有リソースにアクセスすることができ、その他のインスタンスの構成要素はラッチが解放されるのを待たなければならない。インスタンスは、完了した後、ランタイムロックを解放し、その他のインスタンスが共有リソースにアクセスすることを可能にする。ラッチメカニズムは、（例えば、上流の端の明示的なラッチ構成要素及び下流の端の明示的なラッチ解除構成要素を使用して）単一の実行セット内で共有リソースに対してラッチとラッチ解除との両方を行わなければならない。一部の実施形態において、そのような「ラッチされた実行セット」は、入れ子にされ得ず、互いに重なることもできない。
【０１４５】
２．７  その他
グローバルなマッピングに基づく割り当てアルゴリズムが２次元データ処理グラフに関連して説明されているが、グローバルなマッピングに基づく割り当てアルゴリズムは１次元データ処理グラフに関する実行セットを発見するために使用される可能性もあることが留意される。
【０１４６】
概して、実行セットは、任意に入れ子にされ得る。
【０１４７】
概して、実行セットは、リンクされた出力コレクションポートから実行セットのそれぞれのインスタンスのために受け取られた最大で１つの駆動データ要素を有する。しかし、その同じデータ要素が実行セットの境界をまたがって明示的な又は暗黙的に複製される場合、複数のスカラ入力ポートが、その同じデータ要素を受け取る可能性がある。
【０１４８】
概して、実行セットの境界をまたがるリンクを有するすべての出力スカラポートは、実行セットの複数のインスタンスの各々からのすべてのデータ要素を、リンクされた入力コレクションポートに提供される同じコレクションへと集めさせる。しかし、実行セットが単一のインスタンスを有する場合、実行セットの境界をまたがるリンクを有する出力スカラポートは、入力スカラポートにリンクされる可能性がある。
【０１４９】
概して、実行セットを横切ることがデータ処理グラフ内のいかなる閉路も生じないと仮定して、同じ種類の２つのポートの間のリンクは、実行セットの境界を横切ることができる。
【０１５０】
一部の例において、各実行セットは、デフォルトで一意の識別子（例えば、「１」）を割り当てられる。その他の例において、各実行セットは、実行セットＩＤパス（例えば、「１／３／６」）を割り当てられる可能性がある。一部の例において、ユーザが、実行セットＩＤ文字列を明示的に供給する。実行セットＩＤ文字列は、一意であるとは限らない。実行セットＩＤ文字列が一意でない場合、実行セットＩＤ文字列は、その親、親の親などの実行セットＩＤ文字列と組み合わされ、一意のＩＤ文字列をもたらすことができる。
【０１５１】
一部の例において、グローバルなマッピングに基づく割り当てアルゴリズムは、構成要素が最も深く入れ子にされた実行セットに対応するＩＤ文字列を割り当てられる結果となる。一部の例において、実行セットが実行セットＩＤパスを割り当てられるとき、実行セットＩＤパスは必ずしも一意でない。実行セットＩＤパスが一意でない状況を補償するために、所与の実行セットの上流の実行セットＩＤパスが必ず「適合性がある（compatible）」必要があることを要求する制約が実行セットＩＤパスに課され、ここで、２つの実行セットＩＤパスは、それらの実行セットＩＤパスが同じであるか、又は一方が他方の適切な接頭辞（prefix）である場合かつその場合に限り適合性がある。例えば、
・／１／２／３及び／１／２／３は適合性がある
・／１／２／３及び／１／２は適合性がある
・／１／２及び／１／２／３は適合性がある
・／１／２／３及び／１は適合性がある
・／１／２／３及び／１／４は適合性がない
・／１／２／３及び／１／４／５は適合性がない
【０１５２】
上述の実施形態は、基本的に、スカラブロックのインスタンスの実行に順序付け／同時発生の制約を課さない。しかし、一部の実施形態においては、実行セットにデータ要素を与えるコレクションから受け取られるデータ要素のサブセットの容認される同時性及び必要とされるシリアル化（serialization）を制御するためのその他の入力が与えられる。一部の実施形態においては、部分的な順序付けによる逐次処理が、データ要素の一部のサブセットに課される可能性がある。
【０１５３】
デフォルトで、実行セットのインスタンスは、完全に並列に実行される可能性がある。しかし、場合によっては、ユーザが、異なる振る舞いを望む可能性がある。例えば、処理されているデータがアカウントレベル（account-level）のデータである場合、ユーザは、各アカウント（account）内でのデータの処理に特定の制限を強制したい可能性がある。例えば、ユーザは、直列実行を強制したい可能性がある。そのような場合、アカウントにまたがって任意の度合いの並列処理が可能にされ得るが、同じアカウントに関する２つのデータ要素が同じ時に（つまり、同時に）処理されてはならない。さらなる制限は、同じアカウントに関する２つのデータ要素が、例えば、キーによって又は受け取られた順序によって定義される順序に従う順序から外れて処理されてはならないような順序通りの処理であってもよい可能性がある。
【０１５４】
これを実現するために、シリアル化キーが、実行セットのために提供される可能性がある。シリアル化キーの同じ値を有するすべてのデータ要素は、逐次的に、場合によっては明確に定義された順序で処理されなければならない。ランタイムシステムが同じシリアル化キーを有するデータ要素に関して直列実行を強制する１つの方法は、シリアル化キーによって実行セットのインスタンスを区分けすること、つまり、駆動データ要素が特定のシリアル化キー（又はシリアル化キーのハッシュ値）を有するインスタンスを特定のコンピューティングノード１５２上で実行されるように割り当てることである。ランタイムで、システムは、実行可能なタスクのキューが一杯のままであることを保証するためにデータ要素のコレクションをスキャンすることによって作業がコンピューティングノード１５２中に均等に分散されることを保証することができる。（コレクション内などに）明示的に定義された順序が存在するとは限らない場合、順序は、それらが出力ポート（さらにはコレクション出力ポート）から生成されたのと同じ順序、又はシリアル化キーのグループ内で処理の順序を律する異なる照合キー（collation key）に関連する順序である可能性がある。場合によっては、実行セットは、予め定義された値をシリアル化キーとして与えることによって完全に逐次的に実行されるように強制される可能性がある。
【０１５５】
一部の実施形態においては、たとえ処理が厳密に順序に従って実行されなかったとしても、その順序が維持されたという見かけが保たれる可能性がある。実行セットの入力と出力との両方のデータが特定の順序（例えば、ベクトル内の要素の順序）に関連付けられる場合、ユーザは、その順序を維持したい可能性がある。たとえデータ要素の処理の際にシリアル化をしないとしても、出力データ要素は、例えば、データ要素が処理されるときにデータ要素と一緒に運ばれた順序付けキーを使用して入力データ要素の対応するセットに関連する順序付けを復元するためにソートされる可能性がある。代替的に、並列に生成された出力データ要素が、明示的なソート動作が実行されることを必ずしも必要とせずに、それらのデータ要素が実行セットに入ったのと同じ順序で合併される可能性がある。
【０１５６】
実行セットのために準備されたコードを実行することに関連するさまざまな計算の特徴が、ユーザ入力を用いて又はユーザ入力を用いずにコンパイラ／インタープリタ１２０によって構成され得る。例えば、特定の実行セット内の構成要素に対応するタスクがどのようにして実行されるべきかを示すための上述の埋め込まれた情報が、以下のうちのいずれかを含む可能性がある。情報は、タスクが完全に逐次的に実行されるべきである（つまり、並列処理なし）を示すコンパイラのアノテーションを含む可能性がある。情報は、順序付けの制約によって許容されるだけの並列処理によってタスクが処理されるべきであることを示すコンパイラのアノテーションを含む可能性がある。情報は、同じキー値に関連するタスクが逐次的に実行され、異なるキー値に関連するタスクが並列に実行されること（つまり、上述のキーによるシリアル化）を示すコンパイラのアノテーションを含む可能性がある。
【０１５７】
コンパイラのアノテーション又は修飾子は、以下のさまざまな計算の特徴のいずれかを示すために使用され得る。
・同時性（例えば、上述の並列、直列、キーによる直列）
・異なる実行セットの間の優先度（例えば、ある実行セットのすべてのタスクが別の実行セットのすべてのタスクの後に行われる）
・トランザクショナリティ（transactionality）（例えば、実行セットのタスクがデータベーストランザクションとして処理される）
・リソースのラッチ（例えば、実行セットのタスクが、共有変数などの特定のリソースがロックされるようにして実行され、タスクがアトミックな単位としてリソースにアクセスすることを可能にする）
・順序付け（例えば、データ要素の間の順序付けが維持される）
・タプルのサイズ（例えば、実行セットの各インスタンスによって操作されるデータ要素の数）
【０１５８】
コンパイラ／インタープリタ１２０は、実行セットの、若しくはデータ処理グラフ全体の特性を自動的に分析することに基づいて、及び／又はユーザから入力（例えば、グラフ内のユーザのアノテーション）を受け取ることに基づいて特徴を決定し得る。例えば、キー値が実行セット内で参照される場合、コンパイラのアノテーションが、キーによるシリアル化を示す可能性がある。リソースが実行セット内で使用される場合、コンパイラの修飾子が、実行セットの前／後にそのリソースをロックする／ロック解除することを可能にし得る。実行セット内にデータベース操作がある場合、実行セットの各インスタンスは、データベーストランザクションとして実行されるように構成される可能性がある。利用可能なコアの数がコンパイル時に決定され得る場合、コンパイラのアノテーションが、各コアが、コレクションの合計サイズをコアの数で割った数に等しい数のデータアイテムからなるデータアイテムのタプルに対して実行セットのインスタンスを実行することを示す可能性がある。
【０１５９】
コンパイラのアノテーション及び修飾子は、好適な比較的高級な言語（例えば、ＤＭＬ）、若しくは低級な実行可能コードなどの目標言語で、又はデータ処理グラフの目標中間形態で準備されるコードに追加される可能性がある。例えば、コンパイラ／インタープリタ１２０は、実行セットの入口点若しくは出口点を明示的に示す構成要素をデータ処理グラフに挿入する可能性があり、又はトランザクションを開始する／終了するための構成要素が、トランザクションを処理するための構成要素のセットの入口点／出口点に置かれる可能性があり、又は構成要素が、リソースをロックする／ロック解除するために使用される可能性がある。代替的に、コンパイラ／インタープリタ１２０は、修正された種類のデータフローリンクとして修飾子を追加する可能性がある。
【０１６０】
３  データ処理グラフのためのユーザインターフェース
一部の例においては、ユーザインターフェースが、構成要素をキャンバスにドラッグし、構成要素のポートをリンクを使用して一緒に接続することによってユーザがデータ処理グラフを作成することを可能にする。一部の例において、ユーザインターフェースは、ユーザがデータ処理グラフを作成するときに上述の（１又は２以上の）割り当てアルゴリズムをデータ処理グラフに繰り返し適用する。例えば、ユーザが作成されているデータ処理グラフに構成要素を追加するとき、（１又は２以上の）割り当てアルゴリズムが、追加された構成要素を有するグラフに適用され得る。そして、（１又は２以上の）割り当てアルゴリズムによって発見された結果として得られる実行セットが、例えば、ユーザインターフェース内で構成要素の周りに描かれたボックスとして、又は同じ実行セット内の構成要素を含む領域をレンダリングするために使用される一意の色、濃淡、テクスチャ、又はラベルによって区別され得る構成要素を取り囲む任意の形状の領域として表示される可能性がある。一部の例において、それから、ユーザは、実行セットに構成要素を追加するか又は実行セットから構成要素を削除することによって、（１又は２以上の）割り当てアルゴリズムによって発見された実行セットを修正することができる。一部の例において、（１又は２以上の）割り当てアルゴリズムは、修正された実行セットが規則に則していることを検証する。例えば、さまざまな規則に則した方法のいずれかで潜在的に実行セットに分割される可能性がある構成要素及びさまざまなポートの間のリンクのいくつかの構成が存在し得る。そのような曖昧な場合、割り当てアルゴリズムは、デフォルトで実行セットのうちの１つの割り当てを選択する可能性があるが、ユーザは、実行セットの異なる割り当てを意図していた可能性があり、その場合、ユーザは、（例えば、終了点を挿入して前は構成要素の連鎖の中にあった実行セットを閉じることによって）割り当てを修正することができる。代替的に、割り当てアルゴリズムは、複数の規則に則した割り当てが可能である曖昧な構成を認識し、１つを選択するための入力を与えるようにユーザに促すように構成される可能性がある。
【０１６１】
図１０Ａを参照すると、ユーザは、３つの構成要素、第１のデータセット１０２２、第１の計算構成要素１０２４、及び第２のデータセット１０２６をデータ処理グラフ作成ユーザインターフェースのキャンバス１０２８にドラッグした。ユーザは、構成要素１０２２、１０２４、１０２６をリンクを使用してまだ一緒に接続しておらず、（１又は２以上の）割り当てアルゴリズムは、（ルート実行セット以外の）データ処理グラフ内のいかなる実行セットも発見していない。
【０１６２】
図１０Ｂを参照すると、ユーザが構成要素１０２２、１０２４、１０２６のポートをリンクによって一緒に接続するとき、（１又は２以上の）割り当てアルゴリズムは、第１の実行セット１０３０を自動的に発見し、第１の実行セット１０３０は、第１の計算構成要素１０２４を含む。第１の実行セット１０３０は、ユーザインターフェースを通じてユーザに対して表示される。ユーザが構成要素及びリンクをグラフに追加し続けるとき、（１又は２以上の）割り当てアルゴリズムは、実行セットを自動的に発見し、ユーザインターフェースを通じて表示する。
【０１６３】
図１０Ｃを参照すると、一部の例において、ユーザは、（例えば、リンクに別の構成要素を挿入するために）リンクを切る必要がある可能性がある。そのような例において、（１又は２以上の）割り当てアルゴリズムがデータ処理グラフを再分析することを可能にされていたとすれば、第１の実行セット１０３０が削除され、おそらくは、ユーザの作業の混乱及び損失を生じるであろう。
【０１６４】
そのような混乱を避けるために、ユーザがデータ処理グラフからフロー又は構成要素を削除するとき、（１又は２以上の）割り当てアルゴリズムは実行されない可能性があり、その代わりに、残りの構成要素及びそれらの構成要素の実行セットの関連付けが手をつけられないまま残される。例えば、図１０Ｃにおいては、第１の構成要素１０２４が、その構成要素の入力ポート及び出力ポートが切断された状態で、まだ第１の実行セット１０３０に含まれている。一部の例においては、切断された構成要素が再接続されるとき、（１又は２以上の）割り当てアルゴリズムは、再接続される構成要素に関連するすべての実行セットを自動的に発見し、表示することを可能にされる。
【０１６５】
一部の例において、データ処理グラフの構成要素が明示的な（例えば、ユーザ定義の）実行セットの移動先を持たない場合、（１又は２以上の）割り当てアルゴリズムは、構成要素がどの実行セットに属するのかを発見することを可能にされる。そうではなく、構成要素が明示的なユーザ定義の実行セットの移動先を有する場合、（１又は２以上の）割り当てアルゴリズムは、構成要素がどの実行セットに含まれるかを選択することを可能にされない。例えば、ユーザが構成要素を所与の実行セットに手動で移動させる場合、（１又は２以上の）割り当てアルゴリズムは、構成要素をユーザ指定の実行セット以外のいかなる実行セットに含めることも可能にされない。つまり、データ処理グラフに対するいかなるユーザの修正も、（１又は２以上の）割り当てアルゴリズムによって覆され得ない。
【０１６６】
一部の例において、ユーザインターフェースは、ユーザが入力デバイスとのジェスチャ又はその他のインタラクションを使用して所与の実行セットに構成要素を昇格させる及び／又は所与の実行セットから構成要素を降格させることを可能にする。一部の例において、ユーザは、メニューオプション又はその他のアフォーダンス（affordance）を使用して構成要素を昇格又は降格させることができる。その他の例において、ユーザは、単純に、ユーザインターフェース内で所望の実行セットに構成要素をドラッグすることができる。
【０１６７】
一部の例において、ユーザインターフェースは、ユーザがデータ処理グラフ内の実行セットに関する１又は２以上の制約を規定することを可能にする。例えば、ユーザは、一時に並列にＮ回以下しか実行されないように実行を制約する可能性がある。
【０１６８】
一部の例において、コンパイラ／インタープリタ１２０は、手動で定義された実行セットと割り当てアルゴリズムによって発見された実行セットとの混合を含むデータ処理グラフの表現を受け取る。
【０１６９】
一部の例において、ユーザは、インターフェースを使用して有効化／抑制実行セット（enable/suppress execution set）と呼ばれる別の種類の実行セットを定義することができる。例えば、ユーザは、有効化／抑制実行セットに含まれることをそれらのユーザが望む１又は２以上の構成要素の周りにボックスを描くことができる。有効化／抑制実行セットは、１又は２以上の構成要素を含み、スカラ入力ポートを有する。上流の構成要素のスカラ出力ポートが有効化／抑制実行セットのスカラ入力ポートに１つのデータ要素を与える場合、有効化／抑制実行セット内の構成要素は、実行することを可能にされる。上流の構成要素のスカラ出力ポートが有効化／抑制実行セットのスカラ入力ポートにデータ要素を与えない場合、有効化／抑制実行セットに含まれる構成要素は、抑制される。（有効化／抑制実行セットを含む）すべての実行セットは、実行セット全体が実行されるか否かを決定し、制御信号をその他の構成要素又は実行セットに伝搬させるために使用され得る制御入力ポート及び制御出力ポートを含み得る。実行セットが並列化される（つまり、複数のインスタンスを有する）場合、入力制御ポートが、いかなるインスタンスが実行されるよりも前に作動されなければならず、出力制御ポートは、すべてのインスタンスが実行を完了した後に作動される。一部の例において、これらの入力制御ポート及び出力制御ポートは、実行セットの境界にポートの視覚的表現を置くことによって設けられる。その他の例において、これらの入力制御ポート及び出力制御ポートは、実行セットの前のさらなる構成要素にこれらの入力制御ポート及び出力制御ポートを置くことによって設けられる。例えば、このさらなる「forall構成要素」は、上流のコレクション出力データポートと入口点インジケータとの間に、又は入口点インジケータの代わりに（つまり、上流のコレクション出力データポートと駆動入力スカラデータポートとの間に）（例えば、ユーザインターフェースによって自動的に又はユーザによって手動で）挿入される可能性がある。
【０１７０】
図７に関連して上で触れられたように、一部の例において、ユーザは、データ処理グラフのフローに沿って実行セットの入口点構成要素及び実行セットの出口点構成要素を置くことによって実行セットの入口点及び実行セットの出口点を明示的に定義することができる。
【０１７１】
一部の例において、ユーザインターフェースは、ユーザのグラフが規則に違反した動作を含むときにそれらのユーザに知らせるためのリアルタイムフィードバックを提供する。例えば、構成要素がユーザ指定の実行セット内にあることによって引き起こされる衝突がある場合、（１又は２以上の）割り当てアルゴリズムは、ユーザインターフェースを通じてユーザに警告を与える可能性がある。リアルタイムフィードバックを提供するために、（１又は２以上の）割り当てアルゴリズムは、データ処理グラフが規則に則しているかどうかをユーザに知らせるためにデータ処理グラフに確認規則を適用する。図１１Ａを参照すると、規則に違反するデータ処理グラフの構成１１９５の一例が、２つのデータソース、第１の実行セット１１９７内の第１の構成要素１１０２のスカラポートにデータ要素の第１のコレクションを供給する第１のデータソース１１９１と、第２の実行セット１１９９内の第２の構成要素１１０４のスカラポートにデータ要素の第２のコレクションを供給する第２のデータソース１１９８とを含む。第２の実行セット１１９９は、データ要素の第３のコレクションを出力し、そのとき、データ要素の第３のコレクションは、第１の実行セット１１９７内の第３の構成要素１１０６のスカラデータポートに入力される。データ要素の２つの異なるコレクションが第１の実行セット１１９７内の異なるスカラポートに接続されているので、（第１の実行セット１１９７の境界に存在するそれぞれのデータ要素のために構成要素の１つのインスタンスが生成されるので）第１の実行セット１１９７内の構成要素のいくつの並列のインスタンスがインスタンス化されるべきかを知る方法はない。一部の例において、ユーザは、例えば、第２の構成要素１１０４上にエラーインジケータ１１０８を表示することによってこの衝突を通知される。
【０１７２】
図１１Ｂを参照すると、規則に違反するデータ処理の構成１１１０の別の例が、第１の実行セット１１１６内の第１の構成要素１１１４のスカラ入力ポートにデータ要素のコレクションを供給するデータソース１１１２を含む。第１の構成要素１１１４のスカラ出力は、その第１の構成要素１１１４の出力を、第１の実行セット１１１６の外の第２の構成要素１１１８のコレクションポートにデータのコレクションとして提供する。第２の構成要素１１１８は、コレクション型出力ポートから第１の実行セット１１１６内の第３の構成要素１１２０のスカラデータポートにデータ要素のコレクションを提供する。
【０１７３】
第１の実行セット１１１６の外へ第１の構成要素１１１４のコレクション型出力ポートからデータ要素のコレクションを渡し、第２の構成要素１１１８においてデータ要素のコレクションを処理し、それから、データ要素の処理されたコレクションを第３の構成要素１１２０のスカラポートに返すことによって、「実行セットループ」が定義される。
【０１７４】
概して、実行セットループは、実行の順序付けに悪影響を与えるので規則に違反している。例えば、入力に関して、入力データが実行セットを実行する前にバッファリングされる可能性があり、出力に関して、実行セットが実行を完了した後に出力データが集められる可能性があるので、概して、実行セットに入る又は実行セットから出るさらなるフローを持つことが容認される。しかし、これは、外部構成要素が実行セットの前と後との両方で実行されることを必要とされる場合、不可能である。
【０１７５】
一部の例において、ユーザは、構成要素のうちの１又は２以上の上にエラーインジケータ１１０８を表示することによって実行セットループを通知される。
【０１７６】
一部の例において、データ処理グラフは、それぞれの実行セットの入口点が少なくとも１つの対応する実行セットの出口点と組み合わされない場合、規則に違反すると考えられる。代替的に、入口点を有するが、対応する出口点を持たない実行セットが、例えば割り当てアルゴリズムによって自動的に認識されないとしてもユーザ定義の実行セットとして許容される可能性がある。それらの場合、実行セットは、（１又は２以上の）最も下流の構成要素が実行を終えた後に（いかなる出力データ要素も与えずに）終わる可能性がある。一部の例において、データ処理グラフは、各ラッチ操作が対応するラッチ解除操作と組み合わされない場合、規則に違反すると考えられる。代替的に、ラッチ解除動作は、何も明示的に規定されない場合、推測され、推測されたラッチ解除操作がラッチ操作とは異なる実行セット内になければならない場合、ただ規則に違反するものとして示される可能性がある。一部の例において、データ処理グラフは、ラッチ操作及び対応するラッチ解除操作がどちらかでも同じ実行セット内に存在しない場合、規則に違反すると考えられる。
【０１７７】
４  制御グラフのための状態機械
実行するためにデータ処理グラフを準備するプロセスにおいて、コンパイラ／インタープリタ１２０は、制御グラフ生成手順において制御グラフをさらに生じさせる。一部の実装形態において、制御グラフを生じさせることは、個々の構成要素に対応するタスクを実行するための実行可能コードと、それらのタスクの間のデータ及び制御のフローを決定する構成要素の間のさまざまなリンクに対応するコードとを生じさせることを含む。これは、コンパイラ／インタープリタ１２０によって発見された実行セットの階層の間のデータ及び制御の転送を含む。
【０１７８】
そのような実行可能コードを生じさせることの一部は、いくつかのデータ構造の表現において、すべての有効化／抑制実行セットを含むそれぞれの実行セットに関して対応する制御グラフを生じさせることを含む。実行セット内のすべての入れ子にされた実行セットは、制御グラフを生じさせる目的で、その入れ子にされた実行セットを表す単一の構成要素として扱われる。この代表構成要素のポートは、入れ子にされた実行セットの境界をまたがるリンクに接続される入れ子にされた実行セット内の構成要素のポートに対応する。そのとき、コンパイラ／インタープリタ１２０は、この制御グラフを使用して制御コードを生じさせる。この生じさせられた制御コードは、ランタイムで実行を制御する状態機械を効果的に実装する。特に、実行が始まると、この生じさせられた制御コードは、構成要素又はポートがこの状態機械のある状態から別の状態へといつ遷移するのかを制御する。
【０１７９】
図１２Ａは、コンパイラ／インタープリタ１２０がルート実行セットの第１の構成要素の対１２０２及び第２の構成要素の対１２０４を制御グラフ１２０６へとどのように組み合わせるかの例を示す。この例において、第１の構成要素の対１２０２は、それぞれのコレクションデータポート１２１２、１２１４によって接続された第１の構成要素１２０８及び第２の構成要素１２１０を含む。第２の構成要素の対１２０４は、それぞれのスカラデータポート１２２０、１２２２によって接続された第３の構成要素１２１６及び第４の構成要素１２１８を含む。
【０１８０】
コンパイラ／インタープリタ１２０は、データ処理グラフのトポロジーによって示されたように開始構成要素１２２４及び終了構成要素１２２６を追加し、開始構成要素１２２４及び終了構成要素１２２６に構成要素を接続することによって制御グラフを生成する。開始構成要素及び終了構成要素は、いかなるコンピューティングタスクも実行しないが、特定の構成要素の実行を開始し、実行セット内のすべての構成要素が実行を終えたときを決定するために使用される制御信号を管理するためにコンパイラ／インタープリタ１２０によって使用される。
【０１８１】
特定の構成要素が開始構成要素１２２４に接続される必要があるかどうかを決定するために、コンパイラ／インタープリタ１２０は、その構成要素への入力を検査して、上述のように制御ポートとスカラポートとの両方を含む上流のシリアルポートへの既存のリンクに基づいて、その構成要素が実行を開始するように指定されていないかどうかを決定する。
【０１８２】
例えば、構成要素がその構成要素の制御入力ポートへのリンクを持たない場合、その構成要素に開始するように伝える制御信号がないためにその構成要素は実行を開始しない可能性がある。一方、たとえ制御入力がなかったとしても、構成要素が有するデータ入力の種類によっては、データの到着がその構成要素の実行をトリガすることがあり得る。例えば、構成要素がスカラ入力ポートを有する場合、その構成要素の制御入力ポートに制御信号が存在しないときでさえ、その構成要素は、その構成要素がその構成要素のスカラ入力ポートにおいてデータを見るとすぐにやはり実行を開始する。一方、構成要素がコレクションデータ入力を有するだけである場合、これは起こらない。そのような構成要素は、実行をトリガするための制御入力又はスカラデータ入力を持たない場合、開始構成要素１２２４への接続を必要とする。
【０１８３】
図１２Ａの文脈で、第１の構成要素１２０８は、制御入力もスカラデータ入力も持たない。したがって、第１の構成要素１２０８が自ら実行を開始する方法はない。したがって、第１の構成要素１２０８は、開始構成要素１２２４にリンクされなければならない。第３の構成要素１２１６は、同様に、制御入力もスカラデータ入力も持たない。したがって、第３の構成要素１２１６も、開始構成要素１２２４にリンクされなければならない。
【０１８４】
第４の構成要素１２１８は、制御入力を持たない。しかし、第４の構成要素１２１８は、第３の構成要素１２１６からスカラデータ入力を受け取るように接続される。したがって、第４の構成要素１２１８は、その第４の構成要素１２１８の入力スカラポート１２２２を通じてデータを受け取ると実行を開始する。したがって、第４の構成要素１２１８は、開始構成要素１２２４への接続を必要としない。
【０１８５】
第２の構成要素１２１０は、第１の構成要素１２０８からデータを受け取るように構成される。しかし、このデータは、入力スカラポートではなく、入力コレクションポート１２１４において受け取られる。結果として、第２の構成要素１２１０も、第１の構成要素と同様に、開始構成要素１２２４に接続されなければならない。
【０１８６】
コンパイラ／インタープリタ１２０は、構成要素のうちのどれが終了構成要素１２２６に接続される必要があるのかをやはり特定する必要がある。
【０１８７】
概して、構成要素は、制御出力リンクも（いかなる種類の）データ出力リンクも持たないとき、終了構成要素１２２６に接続される。図１２Ａの左側の図において、この条件は、第２の構成要素１２１０及び第４の構成要素１２１８によってのみ満たされる。したがって、図１２Ａの右側に示されるように、これら２つの構成要素だけが、終了構成要素１２２６に接続される。
【０１８８】
図１２Ｂは、図の左側の第１の構成要素１２０８と第３の構成要素１２１６との間に制御リンクが存在することを除いて図１２Ａと同様である。規則に則して、結果として得られる代替的な制御グラフ１２０６’においてはもはや第３の構成要素１２１６を開始構成要素１２２４に接続する必要がない。
【０１８９】
制御グラフは、構成要素及びそれらの構成要素のシリアルポートが上流の構成要素及びシリアルポートに関して起こる遷移に応答してある状態から別の状態に遷移する分散型状態機械（distributed state machine）を効果的に定義する。概して、上流の構成要素は、ある状態から別の状態に遷移し、その構成要素の出力シリアルポートを遷移させ、それが、下流の構成要素のリンクされたシリアル入力ポートを遷移させ、それが、それらの下流の構成要素を遷移させ、以下同様である。この振る舞いを実現するための特定の種類の状態機械の一例が、構成要素及びそれらの構成要素のシリアルポートに関する状態遷移図を参照して下でより詳細に説明される。
【０１９０】
状態機械の遷移を制御するために、コンパイラ／インタープリタ１２０は、特定の構成要素によって表されるタスクを実行するためのコードに追加的な制御コードを継ぎ足す。本明細書において使用されるとき、「継ぎ足すこと」は、制御コードを前に付加すること、後ろに付加すること、又は前に付加することと後ろに付加することとの両方を意味する。前に付加される制御コードは、本明細書において「前書き（prologue）」コードと呼ばれ、後ろに付加される制御コードは「後書き（epilogue）」コードと呼ばれる。構成要素に関する前書きコードは、構成要素がその構成要素のタスクを実行する前に実行される。構成要素に関する後書きコードは、構成要素６１０Ａがその構成要素６１０Ａのタスクを完了した後に実行される。
【０１９１】
継ぎ足された制御コードは、アキュムレータ（例えば、入力が構成要素を呼び出す準備ができていることを示す値までカウントダウンするカウンタ）の値又はフラグ（例えば、構成要素が抑制されたことを示す値に設定されるフラグ）の状態などの記憶された状態情報を検査して、１又は２以上の下流の構成要素にそれらの下流の構成要素のそれぞれのタスクを実行させるべきか否かを決定する。
【０１９２】
一実施形態において、前書きコードは、上流の出力シリアルポートの状態を監視し、構成要素の入力シリアルポートの状態及び構成要素の状態を更新し、一方、後書きコードは、構成要素がその構成要素のタスクの実行を完了した後で構成要素の出力シリアルポートを更新する。
【０１９３】
別の実施形態においては、下流の構成要素の前書きコードが上流の出力シリアルポートを監視する代わりに、上流の構成要素の後書きコードが、下流の入力シリアルポートの集合的な状態を更新し、入力シリアルポートの数に初期化されたカウンタが０になるときなど適切なときに下流の構成要素の前書きコードの実行をトリガするためにその集合的な状態を監視する。代替的に、カウンタが入力ポートの数からカウントダウンする（又は入力ポートの数にカウントアップする）代わりに、異なる構成要素の異なるポートの状態を表すビットを記憶するビットマップなどの、構成要素をトリガするための状態情報を記憶するために別の形態のアキュムレータが使用される可能性がある。
【０１９４】
この継ぎ足された制御コードの結果として、タスクの終了は、データグラフによって表されるデータ制御の依存関係に合致するようにして、及び複数の構成要素の同時動作と、１又は２以上の上流の論理的状態のコレクションの発生に基づいて特定の構成要素の実行がいつ始まり、いつ終わるのかを制御するための条件付き制御論理の使用とを可能にするようにしてその他のタスクの自動的な実行に自動的につながる。
【０１９５】
図１３Ａ及び１３Ｂは、構成要素のために使用される可能性がある例示的な状態機械に関する状態遷移図（図１３Ａの状態遷移図１３００）及びそれらの構成要素のシリアルポートのために使用される可能性がある例示的な状態機械に関する状態遷移図（図１３Ｂの状態遷移図１３１０）を示す。状態遷移図は、アクティブ状態１３０４が継続中の実行に関連付けられ、ポートではなく構成要素だけが実行を行うので、構成要素だけがアクティブ状態１３０４であり得るということを除いて同様である。
【０１９６】
図１３Ａ及び１３Ｂを必要に応じて参照して、状態間の各遷移をたどるために必要な条件はもちろん、両方の状態遷移図のあり得る状態のすべてが説明される。状態遷移図のこの説明において言及される入力ポート及び出力ポートのすべては、制御グラフ内の構成要素が（コレクションポートではなく）シリアルポートをリンクしさえすればよいのでシリアルポートである。制御グラフ内の特定の構成要素は、状態遷移図１３００の４つの論理的状態のうちの１つにある可能性がある。第１の状態は、保留状態１３０２である。これは、制御グラフに関連する実行セットが実行を始めるときに構成要素が開始する状態である。構成要素は、構成要素のいずれかの入力ポートが保留状態１３１２にある場合、保留状態１３０２のままである。構成要素は、たまたま入力ポートを持たない場合、保留状態１３０２で始まるが、直ちに保留状態１３０２から遷移できるようになる。
【０１９７】
保留状態１３０２から、構成要素は、アクティブ状態１３０４か抑制状態１３０６かのどちらかに遷移し得る。
【０１９８】
構成要素は、その構成要素の入力ポートのいずれも保留状態１３１２になく、その構成要素の入力ポートのすべてが抑制状態１３１６にあるわけでない（つまり、少なくとも１つの入力ポートが完了状態１３１４にある）場合、アクティブ状態１３０４に遷移する。ポートは、デフォルトで「必須」であるが、「任意」と印を付けられ得る。任意のポートは、（警告がある可能性があるが）エラーを引き起こすことなく別のポートに接続されないまま残され得る。未接続のまま残されたすべての任意のポートは、自動的に完了状態１３１４になる。構成要素は、その構成要素のタスクをまだ実行している間はアクティブ状態１３０４のままである。構成要素がアクティブ状態１３０４にある間に、その構成要素の出力ポートは、異なる時間にか又は一緒にかのどちらかで、保留状態１３１２から完了状態１３１４か又は抑制状態１３１６かのどちらかに遷移する可能性がある。その構成要素のタスクの実行を完了すると、構成要素は、アクティブ状態１３０４から完了状態１３０８に遷移する。
【０１９９】
構成要素は、構成要素のタスクが実行を終え、その構成要素の出力ポートのすべてが「解決済み（resolved）」である、つまり、もはや保留でない場合、完了状態１３０８に遷移する。
【０２００】
構成要素は、カスタムの制御論理が原因であるか、その構成要素の入力ポートのすべてが抑制されていることが原因であるか、その構成要素の必須の入力ポートのうちの少なくとも１つの抑制が原因であるか、又は構成要素内の処理されていないエラーが原因であるかのいずれかで、構成要素の前書きが抑制状態１３０６への遷移をトリガした場合、抑制状態１３０６にある。構成要素の出力ポートのすべても、抑制を下流に伝搬するために抑制状態１３１６になる。
【０２０１】
ポートに関して、状態遷移の規則は、ポートが入力ポートであるのか又は出力ポートであるのかに応じて決まる。
【０２０２】
ポートの初期状態は、保留状態１３１２である。概して、入力ポートは、その入力ポートがリンクされる上流の出力ポートの状態に従う。したがって、上流の出力ポートが遷移するとき、制御グラフ内でその出力ポートにリンクされた入力ポートは、同じ状態に遷移する。出力ポートは、構成要素がその構成要素のアクティブ状態の間に出力ポートがどの状態になるべきかを決定するまで保留のままである。
【０２０３】
上述のように、入力ポートは、それらの入力ポートがリンクされる上流の出力ポートに従う。したがって、単一の上流の出力ポートにリンクされた入力ポートに関して、その入力ポートは、その入力ポートがリンクされる上流の出力ポートが完了状態１３１４に遷移するとき、完了状態１３１４に遷移する。入力ポートが複数のリンクを通じて複数の上流の出力ポートにリンクされる場合、入力ポートは、その入力ポートの上流の出力ポートのうちの少なくとも１つが完了状態１３１４に遷移した後、完了状態１３１４に遷移する。そうではなく、すべての上流の出力ポートが抑制状態１３１６に遷移する場合、入力ポートは、抑制状態１３１６に遷移する。一部の実施形態は、入力ポートを完了状態１３１４に遷移させるべきか又は抑制状態１３１６に遷移させるべきかを決定するためにこのデフォルトの「ＯＲ論理」とは異なるその他の論理（例えば、すべての上流の出力ポートが完了状態１３１４にある場合に限り入力ポートが完了状態１３１４に遷移する「ＡＮＤ論理」）を使用する。構成要素の入力データポートが完了状態１３１４になる場合、データ要素は、その構成要素が処理するための準備ができている。構成要素の出力データポートが完了状態１３１４になる場合、データ要素は、その構成要素から下流に送信するための準備ができている。
【０２０４】
入力ポートがそれらの入力ポートがリンクされる上流の出力ポートの状態に従うという規則に則して、入力ポートは、その入力ポートがリンクされる上流の出力ポートが抑制状態１３１６になるとき、抑制状態１３１６になる。出力ポートは、出力ポートが抑制されるべきであると決定した結果をアクティブな構成要素が計算したからであるか、又は上流の抑制された構成要素からの抑制が下流に伝搬することを可能にするためか、又は構成要素内に処理されていないエラーがあった場合かのいずれかで、抑制状態１３１６になる。一部の実施形態においては、コンポーネント毎に抑制を下流に伝搬させる必要なしに抑制された構成要素に根を持つ下流の構成要素の木構造を抑制することによってコンパイラが実行を最適化することが可能である。
【０２０５】
その他の実施形態においては、さまざまな代替的な状態機械のいずれかが使用される可能性があり、それらの状態機械においては、コレクションポートの間のリンクも制御グラフに含められる可能性がある。一部のそのような実施形態において、コレクションポートに関する状態遷移図は、構成要素に関する状態遷移図１３００にあるような保留状態、完了状態、及び抑制状態に加えてアクティブ状態を含む可能性がある。コレクションポートは、そのコレクションポートが（出力ポートとして）データを生成しているか又は（入力ポートとして）データを消費しているとき、アクティブ状態にある。例えば、入力コレクションポートに関して、すべての入力ポートが抑制されるわけではないと決定されるとすぐに、第１のデータ要素が上流で生成されるときにアクティブ状態がトリガされる可能性がある。一部の実施形態においては、コレクションポートに関して抑制状態が存在しない。コレクションポートに関する状態遷移を含む制御グラフ内の構成要素によって従われる遷移規則は、入力スカラポート又は制御ポートに関して完了状態が処理されたのと同じ方法で入力コレクションポートに関してアクティブ状態を処理する可能性がある。
【０２０６】
５  コンピューティングプラットフォーム
再び図１を参照すると、データ処理グラフの構成要素のインスタンスが、データ処理グラフを実行する文脈でタスクとして生成され（spawned）、概して、コンピューティングプラットフォーム１５０の複数のコンピューティングノード１５２において実行される。以下でより詳細に検討されるように、コントローラ１４０は、例えば、計算負荷の割り振り、通信又は入力／出力のオーバーヘッドの削減、及びメモリリソースの使用に関連するシステムの性能目標を達成するために、それらのタスクの実行のスケジューリング及び位置（locus）の監視制御の態様を提供する。
【０２０７】
概して、コンパイラ／インタープリタ１２０による変換後、計算全体は、コンピューティングプラットフォーム１５０によって実行され得る目標言語のプロシージャによってタスクに基づく仕様１３０として表現される。これらのプロシージャは「spawn」及び「wait」などのプリミティブを利用し、高レベルの（例えば、グラフに基づく）プログラムの仕様１１０内の構成要素に関してプログラマによって規定された作業手順をそれらのプロシージャの中に含むか又はそのような作業手順を呼び出す可能性がある。
【０２０８】
多くのインスタンスにおいて、構成要素の各インスタンスは、いくつかのタスクが単一の構成要素の単一のインスタンスを実施し、いくつかのタスクが実行セットの複数の構成要素の単一のインスタンスを実施し、いくつかのタスクが構成要素の連続的なインスタンスを実施するようにしてタスクとして実施される。構成要素及びそれらの構成要素のインスタンスからの特定のマッピングは、結果として起こる実行が計算の意味的定義に合致したままであるようにコンパイラ／インタープリタの特定の設計に応じて決まる。
【０２０９】
概して、ランタイム環境内のタスクは、例えば、１つの最上位のタスクが、例えば、データ処理グラフの最上位の構成要素の各々のために１つずつ複数のタスクを生成する（spawning）ようにして階層的に構成される。同様に、実行セットの計算は、複数の（つまり、多くの）サブタスクがコレクションの要素を処理するためにそれぞれ使用されるようにしてコレクション全体を処理するために１つのタスクを有する可能性がある。
【０２１０】
ランタイム環境において、生成された各タスクは、あり得る状態のセットの中の１つの状態にある可能性がある。初めて生成されるとき、タスクは、最初に実行される前、Spawned状態にある。実行するとき、タスクは、実行状態にある。時々、タスクは、中断状態にある可能性がある。例えば、特定の実装形態において、スケジューラは、タスクがプロセッサ利用のクォンタムを超えたとき、リソースを待っているときなどにそのタスクをSuspended状態にする可能性がある。一部の実装形態において、タスクの実行は、先取りされ(preempted)ず、タスクが、制御を放棄しなければならない。３つのSuspended下位状態（substate）、すなわち、Runnable、Blocked、及びDoneが存在する。タスクは、例えば、そのタスクがそのタスクの計算を完了する前に制御を放棄した場合にRunnableである。タスクは、例えば、親タスクがそのタスクの戻り値を回収する前にそのタスクがそのタスクの処理を完了したときにDoneである。タスクは、そのタスクがそのタスクの外部のイベント、例えば、別のタスクの完了（例えば、そのタスクが「wait for」プリミティブを使用したことが原因）、又はデータレコードが利用可能になること（例えば、in.read( )又はout.write( )関数の１つの実行をブロックする）を待っている場合、Blockedである。
【０２１１】
再び図１を参照すると、各コンピューティングノード１５２は、１又は２以上の処理エンジン１５４を有する。少なくとも一部の実装形態において、各処理エンジンは、コンピューティングノード１５０上で実行される単一のオペレーティングシステムプロセスに関連付けられる。コンピューティングノードの特徴に応じて、単一のコンピューティングノード上で複数の処理エンジンを実行することが効率的である可能性がある。例えば、コンピューティングノードは、複数の別々のプロセッサを有するサーバコンピュータである可能性があり、又はサーバコンピュータは、複数のプロセッサコアを有する単一のプロセッサを有する可能性があり、又は複数のコアを有する複数のプロセッサの組合せが存在する可能性がある。いずれの場合も、複数の処理エンジンを実行することが、コンピューティングノード１５２上で単一の処理エンジンのみを使用するよりも効率的である可能性がある。
【０２１２】
処理エンジンの一例は、仮想マシンに関連してホストされる。１つの種類の仮想マシンは、Ｊａｖａ  Ｂｙｔｅｃｏｄｅとしてコンパイルされた形態で規定されるタスクが実行され得る環境を提供するＪａｖａ仮想マシン（ＪＶＭ，Java Virtual Machine）である。しかし、仮想マシンアーキテクチャを使用する可能性があるか又は使用しない可能性があるその他の形態の処理エンジンが、使用され得る。
【０２１３】
図１４を参照すると、コンピューティングノード１５２の処理エンジン１５４の各々が、１又は２以上のランナ（runner）１４５０を有する。各ランナ１４５０は、１又は２以上のプロセス又はプロセススレッドを使用して実行可能なタスクを実行する。一部の実装形態において、各ランナは、関連するプロセススレッドを有するが、スレッドとのランナのそのような関連付けは、必須ではない。いつでも、各ランナは、計算の最大で１つの実行可能なタスクを実行している。各ランナは、別個の実行可能キュー１４６６を有する。計算のそれぞれの実行可能なタスクは、システムのランナ１４５０の１つの実行可能キュー１４６６内にある。各ランナ１４５０は、現在実行されているタスクを監視し、そのタスクが状態をDone、Blocked、又はSuspendedに変えるときに実行可能キュー１４６６から別のタスクを選択し、その別のタスクを実行するスケジューラ／インタープリタ１４６０を有する。タスクは、ランナに関連付けられ、実行可能でないランナのタスクは、例えば、ブロック及び実行済みキュー（blocked and done queue）１４６８に示されるように実行可能キュー１４６６の外に保持される。
【０２１４】
ランナ１４５０は、処理エンジン１５４が初期化され、例えば、エンジン毎に予め構成された数のランナを生成するときに生成される可能性がある。以下で検討されるように、一部の実装形態においては、データ処理グラフの実行中でさえも、ランナが処理エンジンに追加されるか又は処理エンジンから削除される可能性があり、処理エンジン自体が、コンピューティングプラットフォーム１５０に追加され、削除される可能性がある。しかし、下の最初の説明に関して、我々は、処理エンジンの数と、それぞれの処理エンジン内のランナの数とが一定のままであると仮定する。
【０２１５】
例として、データ処理グラフの処理は、最上位のタスクのMainプロシージャの実行から始まる。例えば、タスクに基づくコントローラ１４０は、処理エンジン１４５０のうちの１つのモニタ１４５２と通信するコンピューティングノードのうちの１つにMainプロシージャの実行を開始するように命令する。この例において、モニタ１４５２は、処理エンジンのうちの１つの実行可能キュー１４６６にMainプロシージャを実行するためのタスクを入れる。この例において、ランナはアイドル状態であり（つまり、そのとき実行されているいかなるその他のタスクもなく、実行可能キュー内にいかなるその他の実行可能タスクもない）、したがって、そのランナのスケジューラ／インタープリタ１４６０は、実行可能キューからタスクを取り出し、タスクの実行を開始する。プロシージャが解釈される必要がある言語で表現されるとき、スケジューラ／インタープリタ１４６０は、プロシージャの連続的なステートメントを解釈する。
【０２１６】
この例において、Mainプロシージャの第１のステートメントは、順序付けられていないコレクションのフローをサポートするリンクのためのリンクバッファ１４７０を生成し（つまり、リンクバッファ１４７０のためのメモリを割り振り）、この例において、リンクバッファ１４７０は、順序付けられていない無制限のバッファ、バッファ１、バッファ２、及びバッファ３を含む。この種の構成要素間リンクを生成し、上流のポートがコレクションポートである任意のリンクを含む（リンクバッファ１４７０を含む）これらのリンクのための関連する計算リソースを管理するためにさまざまな手法が使用される。一部の例において、リンクバッファ１４７０は、コレクションの移動元を表す出力コレクションポートのためのバッファと、コレクションの移動先を表す入力コレクションポートのための別個のバッファとを含む。これらのバッファは、コレクションに対する処理が始まる直前にランタイムで割り振られ、コレクションに対する処理が終了した直後に割り振りを解除される（つまり、バッファのために使用されるメモリを解放する）可能性がある。この例において、これらのリンクバッファ１４７０は、タスクのランナが実行されている処理エンジン１５４のメモリ内で割り振られる。概して、バッファが生成されるメモリは、半導体ランダムアクセスメモリ（ＲＡＭ，random access memory）内にあるが、一部の実装形態においては、ディスクなどのその他のストレージデバイスが、バッファデータの少なくとも一部を記憶するために使用される可能性がある。その他の手法において、バッファはランナ自体のローカルにある可能性があることに留意されたい。実際は、処理エンジン１５４がオペレーティングシステムプロセスとして実装される場合、バッファは、そのプロセスのアドレス空間内のメモリ領域として生成される。したがって、バッファに対する直接ハードウェアアドレスに基づくアクセスは、そのプロセス内で実行される命令に制限される。そのような手法においては、複数のランナがバッファを読むか又はバッファに書くことができる場合、バッファに対する少なくとも何らかの同期及びアクセス制御、例えば、ロック又はセマフォを使用することが必要とされる可能性がある。各ランナがオペレーティングシステムプロセス内で単一のスレッドとして実装される手法において、バッファは、特定のランナと関連付けられる可能性があり、すべてのアクセスは、そのランナに制限される可能性があり、それによって、複数のスレッドからの潜在的な競合を防止する。下の検討において、我々は、バッファが処理エンジン内の任意のランナからアクセス可能であり、好適なアクセス制御がそのような共用アクセスを許容するように実装されると仮定する。
【０２１７】
Mainプロセスの次のステップは、Mainプロセスによって呼び出されるspawn又はforallプリミティブを含む。概して、少なくともデフォルトで、１つの子タスク又は複数の子タスクを生成することは、それらのタスクを同じランナ内で最初に親として形成させる。例えば、spawn Work_Read_External_Dataタスクが、同じランナ上で生成される。タスクが外部データにアクセスしている限り、タスクは、その外部データへのＩ／Ｏインターフェース１４６４を利用する可能性がある。例えば、そのインターフェースは、外部データベースへのオープン接続、ネットワークデータ接続のエンドポイントなどからなる可能性がある。そのようなＩ／Ｏインターフェースは、特定のランナに拘束される可能性があり、したがって、そのインターフェースを使用するタスクは、ランナ間のタスクの潜在的なマイグレーションの文脈で下でさらに検討されるように、そのランナからのみインターフェースにアクセスするように求められる可能性がある。この例において、我々は、無理なく計測され、例えば、バッファ１を処理エンジンの能力を超えて大きくなるようにすることによってシステムを「手に負えない状態に追い込む」ことのない方法でタスクがバッファ１を満たすと仮定する。例えば、リソースの混雑又は消耗を避けるための制御の態様の手法も、下で検討される。
【０２１８】
Work_Read_External_Dataタスクの実行と同時に、forall Work_Aが、バッファ１から読まれるレコードのそれぞれに関してタスクを生成させる。特に、「forall」プリミティブは、プリミティブの引数によって特定されるタスクの複数のインスタンスを実行させ、インスタンスの数は、概して、ランタイムで受け取られるデータ要素の数によって決定され、それらのインスタンスが実行される場所及びそれらのインスタンスが呼び出される順序は、ランタイムで後で決定するためにコンパイラによって制限されないままにされる可能性がある。上で検討されたように、デフォルトで、これらのタスクは、やはり同じランナ１４５０上で生成され、ここでもその他の制御なしに、データがバッファ１から利用可能になるのと同じ速さで生成される。Work_B及びWork_Write_External_Dataに関するタスクが、同じランナ上で同様に生成される。
【０２１９】
タスクに基づく仕様は、ランタイムコントローラがすべてのデータを処理させるためにタスクの分散をどのようにして実施するかを明示的に規定することなく「forallプリミティブ」を利用する。上で検討されたように、ランタイムコントローラによって使用され得る１つの手法は、同じコンピューティングノード上で別々のタスクを生成し、それからマイグレーションの特徴に頼ってタスクを別々のノード上で実行させ、それによって、負荷を分散することである。「forall」プリミティブがタスクを複数のノード上で直接実行させるその他の手法が、使用される可能性がある。インメモリデータベースのテーブルの行のインデックスに基づくサブセットを定義するカーソル（cursor）の場合、カーソルforallプリミティブの実装形態は、異なるノードに記憶されたレコードにそれぞれが関連する部分にカーソルを分割させる可能性があり、タスクは、異なるノード上のカーソルの別々の部分のために生成され、それによって、処理及びデータストレージの局所性をもたらす。しかし、コンパイラ１２０の出力であるタスクに基づく仕様１３０内で使用される「forall」プリミティブを実行するために、ランタイムコントローラ及び分散型コンピューティングプラットフォームの１又は２以上の実施形態に広範な手法が実装され得ることを理解されたい。一部の例において、手法の選択は、例えば、レコードの数、コンピューティングノード上のデータの分散、ノードに対する負荷などに基づくランタイムの判断に依存する可能性がある。いずれの場合も、「forall」プリミティブを実装するために使用される方法は、データ処理グラフの作成者又はコンパイラの設計者に必ずしも知られていない。
【０２２０】
システムの特徴は、タスクがそれらのタスクが生成された後にランナ間で転送され得ることである。極めて広く、タスクのそのような転送は、アイドル状態であるか又は少なくともあまり負荷がかかっていないランナがタスクを別のランナからそのランナに転送させる「強奪（stealing）」又は「プル」メカニズムによって実装される。さまざまな基準が使用され得るが、閾値よりも少ない数のタスクがそのランナの実行可能キュー内にあるかどうかなどのローカルの基準に基づいて、ランナの実行可能キュー１４６６内の実行可能なタスクの数が、そのランナがその他のランナから強奪するタスクを探すべきかをどうかを決定する可能性がある。一部の実装形態においては、複数のランナ上のタスクキューのバランスを調整し直すためにより大域的な判断プロセスが使用され得るが、全体的な効果は同様である。
【０２２１】
少なくとも一部の実施形態において、あるランナから別のランナへのタスクの強奪は、そのタスクに関するすべてのデータを転送することを伴うとは限らない。例えば、現在の実行「フレーム」内でアクセス可能なデータ（例えば、現在のプログラムのスコープ、例えば、現在のサブルーチン呼び出しからアクセス可能な局所及び大域変数に関するデータ）のみが、タスクの「ホーム」ランナへの逆の参照と一緒にまとめられる。このデータは、マイグレーションの移動先のランナにおいてタスクの実行可能なコピーを作成するのに十分であり、移動先の実行可能キュー内のエントリは、そのランナにおける実行のために準備ができている。
【０２２２】
マイグレーションされるランナが、実行を完了するか、又は局所変数が利用可能であったプログラムのスコープから戻ることによってランナに転送されたデータを使い尽くすとき、タスクは、ホームランナに戻るように転送され、タスクに関するデータが、合併され、タスクが、もう一度そのタスクのホームランナにおいて実行可能にされる。
【０２２３】
単一の処理エンジン内でのタスクの転送中に、ランナ間の通信は、ローカルメモリを通じたものである（つまり、ディスク又はネットワーク通信を避ける）可能性があり、それによって、比較的少ないリソースを消費する。処理エンジン間の強奪及びマイグレーションを容認する実装形態においては、あるランナから別のランナへの移行中、タスクは、比較的少ないリソースを消費し、例えば、計算リソースよりも処理エンジン間の通信リソースを主に消費する。さらに、そのような通信のレイテンシーは、ホームランナに関しては、そのホームランナの実行可能キューが非常に詰まっており、したがって、空である可能性が低いために、及び移動先のランナに関しては、移動先の実行可能キューが空にされることを見越して強奪が行われるので、ホームランナ及び移動先のランナは、転送中、計算に忙しいと推測されるので、それほど重大ではない。
【０２２４】
図２Ａ〜Ｂに示された計算に関連するタスクに関する実行の例においては、タスク強奪メカニズムが、１又は２以上の処理エンジンのランナに計算の負荷を分散させた。しかし、特定のデータアクセスは特定のランナに（又はおそらく特定の処理エンジンに）制限されることに留意されたい。例えば、上で概説したように、バッファ２のデータは、単一のランナ（又はおそらくはランナのグループ）によってアクセスされ得る可能性があり、しかし、バッファ２に書き込む必要がある可能性があるWork_Aタスクは、バッファ２に書き込むことができないランナによって強奪された可能性がある。そのような場合、タスクは、そのタスクが現在実行されているのとは異なるランナにおいて実行されなければならないアクションを行う必要があるとき、「マイグレーション」又は「プッシュ」するようにして好適なランナにマイグレーションされる。
【０２２５】
少なくとも一部の例において、計算プラットフォーム１５０は、大域変数に関する（キー，値）ペアのセットのための大域的データストレージをサポートする。このデータストレージは、複数のコンピューティングノード（又は処理エンジン）上のメモリ（例えば、ＲＡＭ又はディスク）に分散される可能性がある。キーの名前空間は、キーの指定がすべてのコンピューティングノード１５２及びそれらのコンピューティングノード１５２のランナ１４５０において同じ意味を有するという意味で大域的である。これらの変数の値は、タスクがインスタンス化され、実行され、終了する間持続し、それによって、情報が共通の親タスクを介してあるタスクが別のタスクに渡されることを必要とせずにタスク間でそのような情報を受け渡す方法を提供する。下で検討されるように、キーによる値へのアクセスは、値の使用及び更新がタスクの間の衝突を引き起こさないように制御される。一部の例において、タスクは、それらのタスクの実行の一部又はすべてのために特定の（キー，値）ペアに排他的にアクセスする。
【０２２６】
概して、（キー，値）ペアのためのストレージが分散され、任意の特定の（キー，値）ペアが特定のコンピューティングノード１５２に関連付けられる。例えば、（キー，値）ペアは、そのコンピューティングノードの分散型テーブルストレージ１４８０に記憶される。一部の実施形態において、spawnプリミティブは、キーの指定と、タスクの局所変数への関連する変数のマッピングとを可能にする。キーが指定されるとき、生成されるタスクは、そのタスクの実行の継続時間の間、キーに排他的にアクセスする。実行が始まる前に、値が、ストレージからタスクの局所的なコンテキストに渡され、実行が完了した後、局所的なコンテキストの値が、大域的なストレージに戻される。spawnプリミティブが別の実行されているタスクによって使用中であるキーを指定する場合、これは、新しく生成されるタスクは、そのタスクがキーに排他的にアクセスすることができるまでブロックされる。一部の実装形態においては、各コンピューティングノードが、特定のキーのホームノードであると決定される可能性があり、タスクが生成されることを要求されるとき、その要求は、（キー，値）ペアがあるコンピューティングノードによって処理され、タスクの実行は、最初、そのノードにおいて始まる。代替的な実施形態において、そのような大域的な共有された（キー，値）ペアへの同様の排他的アクセスを行うその他の手法は、例えば、排他的アクセスの要求を伝達し、その後にキーに関する更新された値によって排他的アクセスの解放を伝達することによって、ストレージと同じ場所においてタスクを開始することを必ずしも含まない。タスクは、デフォルトで、新しい（キー，値）ペアが生成されるときにタスクが実行されているノード上に記憶される新しい（キー，値）ペアを生成する可能性がある。
【０２２７】
大域的な状態変数の１つの使用は、コレクションの連続的なレコードの関数の実行中の集約のためのものである。例えば、値が単一のアイテムであるのではなく、大域的なストレージは、キーに割り当てられる値の窓（window）を保持する。したがって、プログラミングモデルにおいて、値は、キーに関連して保持される履歴に追加される可能性があり、前に追加された値の関数が、提供される可能性がある。値の窓は、時間窓によって値の数（つまり、最後の１００個のアイテム）に従って定義され得る（つまり、例えば、値が追加された時間によって、又は各値が追加されるときにその値と一緒に提供される明示的なタイムスタンプによって定義される最後の１０分間に追加されたアイテム）。プログラミングモデルは窓から外れる古い値の明示的な削除を必要とせず、窓の定義は実装形態がそのような削除を自動的に実行することを可能にすることに留意されたい。プログラミングモデルは、そのような窓に基づくキー指定される大域変数を作成し（例えば、窓の性質及び範囲を定義し）、キーに値を追加し、値の窓の関数（例えば、最大、平均、異なる値の数など）を計算するためのいくつかのプリミティブを含む。一部のプリミティブは、キーに関する新しい値を追加することと、窓の関数の戻り値を返すこととを組み合わせる（例えば、キーに新しい値を追加し、追加された最後の１００個の値の平均を返す）。
【０２２８】
少なくとも一部の例において、大域的なストレージは、ハンドルと呼ばれる識別子を介してアクセスされる共有されたレコード指向のデータも含む。例えば、ハンドルは、データレコードのソース若しくはシンクを特定する可能性があり、又は別の例として、ハンドルは、データセットの中の特定のレコードを特定する可能性がある。概して、ハンドルは、ハンドルポイント（handle point）がデータにアクセスする方法を提供し、さらに、アクセスされているデータの構造の定義を提供するという点で型付けされる。例えば、ハンドルは、データレコードのフィールド（カラム）の構造をそのハンドルに関連付けた可能性がある。
【０２２９】
少なくとも一部の例においては、（例えば、コンピューティングノードのメモリ内の）大域的なストレージが、型付きデータの行の１又は２以上のテーブルのためのテーブルストレージを含み、テーブル又はテーブルの特定のレコードが、やはり、ハンドルと呼ばれる識別子を介してアクセスされる。テーブルの行の型は、ベクトル、レコードのベクトルなどによる階層的レコード型である可能性がある。一部の例において、テーブルは、行へのハッシュ又は（順序付き）Ｂ木アクセスを提供する１又は２以上のインデックスを有する可能性があり、カーソルが、テーブル、インデックス、又はインデックス及び（１若しくは複数の）キー値から生成される可能性がある。行は、個々に挿入、更新、又は削除され得る。トランザクション処理をサポートするために、タスクは、例えば、データ処理グラフの構成要素に関する処理中に読み取り又は更新アクセスのために１又は２以上のテーブルの１又は２以上の行をロックする可能性がある。テーブルは、データの並列処理のためのコレクションとして、例えば、データ処理グラフのデータの移動元又は移動先として扱われ得る。概して、テーブルは、インデックス付けされ、テーブルの行のサブセットは、カーソルをもたらすインデックスに基づいて選択される可能性があり、そして、そのカーソルが、選択された行をデータソースとして提供するために使用される。一部の例においては、カーソルを分割すること、及びハンドルに関連するレコードの数を推定することなどのアクションのために、さらなるプリミティブがタスクに利用され得る。カーソルは、実行セットのためのデータの移動元として与えられるとき、実行セットの対応するインスタンスにテーブルの行の一部をそれぞれ提供する部分に分割され、それによって、並列処理を提供する可能性があり、カーソルの適切な分割は、行が記憶されるノード上での実行を可能にする。データテーブルの修正がタスクによって明示的にコミットされるまでそれらの修正がタスクの外に見えないように維持されるようにタスクがトランザクションを実施することによって、データテーブルがやはりアクセスされ得る。一部の例において、そのようなトランザクションのサポートは、テーブルの１又は２以上の行をロックすることによって実装される可能性がある一方、その他の例においては、行の複数のバージョンを含むより複雑な手法が、ロックだけを使用して提供され得るよりも高い潜在的な同時性を提供するために実装される可能性がある。
【０２３０】
ファイル、データフロー、及びインメモリテーブルは、すべて、コレクションと呼ばれるものの例である。リーダタスクは、コレクションからレコードを読み、ライタタスクは、コレクションにレコードを書く。一部のタスクは、リーダとライタの両方である。
【０２３１】
上で紹介されたように、コレクションを表すフローは、インメモリバッファを使用するランタイムシステムに実装される可能性がある。代替的に、さまざまな実装形態において、データベース内のテーブル又は分散型ストレージシステムを含む任意の形態のストレージが使用され得る。一部の実装形態においては、インメモリ分散型データベースが使用される。一部の実装形態において、コンパイラは、データ処理グラフの作成者に明らかにされるとは限らない方法でインメモリテーブルを使用してそのようなフローを実装する。例えば、コンパイラは、上流の構成要素にテーブルの行を投入させ、下流の構成要素に前に投入された行を読ませ、それによって、順序付けられていないデータフローを実装する可能性がある。ランタイムコントローラは、実行セットに対応するタスクの複数のインスタンスを呼び出して、データ要素がストレージに受け取られたのとは異なる順序でストレージからそれらのデータ要素を取り出すことによって、特定の形式のブロックを防止するようにして上流のコレクションからの駆動データ要素を処理し得る。例えば、タスクのインスタンスは、いかなる特定のその他のインスタンスによるインスタンスのいずれの呼び出しも（つまり、任意の特定のその他のインスタンスが１又は２以上のデータ要素の処理を完了した後まで）ブロックすることなく呼び出され得る。
【０２３２】
概して、コレクションのレコードは、そのレコード内のデータが初めに書かれる前にハンドルを有する可能性がある。例えば、テーブルは、レコードのインデックス付けされたセットの移動先として設定される可能性があり、個々のレコードは、それらのレコードに関するデータが書かれる前でさえもハンドルを有する可能性がある。
【０２３３】
６  実装形態
上述の手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）少なくとも１つのデータストレージシステム、（少なくとも１つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを用いて出力を与えるための）少なくとも１つのユーザインターフェースを含む（分散、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある）１又は２以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される１又は２以上のコンピュータプログラムのプロシージャを含み得る。ソフトウェアは、例えば、データ処理グラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含む可能性がある。プログラムのモジュール（例えば、データ処理グラフの構成要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【０２３４】
ソフトウェアは、ある期間（例えば、ダイナミックＲＡＭなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間）媒体の物理特性（例えば、表面ピット及びランド、磁区、又は電荷）を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶され得る。命令をロードするのに備えて、ソフトウェアは、ＣＤ−ＲＯＭ又は（例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な）その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される可能性があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される（例えば、伝搬信号に符号化される）可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）などの専用のハードウェアを使用して実行される可能性がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実行される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体（例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの１又は２以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
【０２３５】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって定義される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実行される可能性がある。
【図１】
0006467497.tif 000002
【図２Ａ】
0006467497.tif 000003
【図２Ｂ】
0006467497.tif 000004
【図２Ｃ】
0006467497.tif 000005
【図３Ａ】
0006467497.tif 000006
【図３Ｂ】
0006467497.tif 000007
【図３Ｃ】
0006467497.tif 000008
【図４Ａ】
0006467497.tif 000009
【図４Ｂ】
0006467497.tif 000010
【図４Ｃ】
0006467497.tif 000011
【図４Ｄ】
0006467497.tif 000012
【図５】
0006467497.tif 000013
【図６】
0006467497.tif 000014
【図７】
0006467497.tif 000015
【図８Ａ】
0006467497.tif 000016
【図８Ｂ】
0006467497.tif 000017
【図９】
0006467497.tif 000018
【図１０Ａ】
0006467497.tif 000019
【図１０Ｂ】
0006467497.tif 000020
【図１０Ｃ】
0006467497.tif 000021
【図１１Ａ】
0006467497.tif 000022
【図１１Ｂ】
0006467497.tif 000023
【図１２Ａ】
0006467497.tif 000024
【図１２Ｂ】
0006467497.tif 000025
【図１３Ａ】
0006467497.tif 000026
【図１３Ｂ】
0006467497.tif 000027
【図１４】
0006467497.tif 000028