(57)【要約】      （修正有）【課題】グラフに基づくプログラムのコンパイルにおいて、計算のレイテンシーと計算の効率との間のトレードオフを実現する方法を提供する。【解決手段】グラフに基づくプログラムの仕様である処理グラフ９００が、動作に対応する複数の構成要素（６５８〜６６６）と上流の構成要素を下流の構成要素に接続する有向リンクとを含む。グラフのトポロジーに少なくとも部分的に基づいて第１のグループにおける同時性の可能なレベルを特定し、分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析し、決定したランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを、第１のグループ内で施行するように動作を実行するための処理されたコードを生じさせる。【選択図】図９Ａ
2020013608.tif 000002
【特許請求の範囲】
【請求項１】
動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための方法であって、
前記グラフに基づくプログラムの仕様を受け取るステップであって、前記グラフに基づくプログラムの仕様が、
それぞれが少なくとも１つの動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、複数の有向リンクを含むグラフを含む、前記受け取るステップと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するステップであって、
第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づく前記動作の前記第１のグループにおける同時性の可能なレベルを特定すること、
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析すること、及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせることを含む、前記処理するステップとを含む、前記方法。
【請求項２】
分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析することが、前記分析される動作の各々に関して、前記分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実施するか又は潜在的に前記第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作であるかどうかを決定することを含む請求項１に記載の方法。
【請求項３】
分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析することが、前記分析される動作の各々に関して、前記分析される動作が、前記第１のグループの実行の単一の開始に応答して複数回実行される１又は２以上の動作の繰り返す組のメンバーであるかどうかを決定することを含む請求項１又は２に記載の方法。
【請求項４】
第１の閾値が、１又は２以上の動作を実行するためのタスクをスポーンするために必要とされる時間の第２の期間よりも長い時間の第１の期間として定義される請求項１〜３のいずれかに記載の方法。
【請求項５】
条件、すなわち、
（１）グラフのトポロジーによって同時に実行されることを妨げられない第１のグループ内の少なくとも２つの動作が両方とも潜在的動作であると決定されたこと、又は
（２）前記第１のグループ内の少なくとも１つの動作が１若しくは２以上の動作の繰り返す組のメンバーであると決定されたこと
のうちのどちらも満たされない場合に、処理されたコードが、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する請求項１〜４のいずれかに記載の方法。
【請求項６】
次のさらなる条件、すなわち、（３）第１のグループ内の２又は３以上の動作の構成が繰り返す組の存在を示唆することも満たされない場合に、処理されたコードが、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する請求項５に記載の方法。
【請求項７】
同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行することが、前記第１のグループ内で動作のすべての逐次的な実行を施行することを含む請求項１〜６のいずれかに記載の方法。
【請求項８】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間のデータフローを示す請求項１〜７のいずれかに記載の方法。
【請求項９】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間の制御フローを示す請求項８に記載の方法。
【請求項１０】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間の制御フローを示す請求項１〜９のいずれかに記載の方法。
【請求項１１】
動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するステップが、
動作の第１のグループの中の少なくとも部分的な順序付けを規定する順序付け情報を生じさせることであって、前記順序付け情報が、前記グラフのトポロジーに少なくとも部分的に基づく、前記生じさせることをさらに含み、
前記第１のグループにおける同時性の可能なレベルを特定することが、前記第１のグループ内の複数の動作が前記部分的な順序付けによって同時に実行されることを妨げられないように前記部分的な順序付けによって許容される同時性のレベルを特定することを含む請求項１〜１０のいずれかに記載の方法。
【請求項１２】
順序付け情報を生じさせることが、動作の第１のグループをトポロジカルソートすることを含む請求項１１に記載の方法。
【請求項１３】
動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための、ソフトウェアを非一時的形態で記憶するコンピュータ可読媒体であって、前記ソフトウェアが、前記コンピューティングシステムに、
前記グラフに基づくプログラムの仕様を受け取ることであって、前記グラフに基づくプログラムの仕様が、
それぞれが動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記受け取ることと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理することであって、
前記動作の第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて前記第１のグループにおける同時性の可能なレベルを特定すること、
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析すること、及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせることを含む、前記処理することとを行わせる命令を含む、前記コンピュータ可読媒体。
【請求項１４】
グラフに基づくプログラムの仕様をコンパイルするためのコンピューティングシステムであって、
前記グラフに基づくプログラムの仕様を受け取るように構成された入力デバイス又はポートであって、前記グラフに基づくプログラムの仕様が、
それぞれが動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記入力デバイス又はポートと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するように構成された少なくとも１つのプロセッサであって、前記処理することが、
前記動作の第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて前記第１のグループにおける同時性の可能なレベルを特定すること、
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析すること、及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせることを含む、前記少なくとも１つのプロセッサとを含む、前記コンピューティングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１５年８月１１日に出願した米国特許出願第６２／２０３，５４７号明細書の優先権を主張するものである。
【０００２】
この説明は、グラフに基づくプログラムの仕様をコンパイルする手法に関する。
【背景技術】
【０００３】
データフローの計算の１つの手法は、グラフのノード（頂点）に対応する計算構成要素がグラフ（「データフローグラフ」と呼ばれる）のリンク（有向辺）に対応するデータフローによって接続されるグラフに基づく表現を利用する。データフローリンクによって上流の構成要素に接続された下流の構成要素は、入力データ要素の順序付けられたストリームを受け取り、受け取られた順序で入力データ要素を処理し、出力データ要素の１又は２以上の対応するフローを生じさせていてもよい。そのようなグラフに基づく計算を実行するためのシステムは、参照により本明細書に組み込まれる「EXECUTING COMPUTATIONS EXPRESSED AS GRAPHS」（グラフとして表現される計算の実行）と題された先行米国特許第５，９６６，０７２号明細書に説明されている。
【０００４】
データフローグラフは、２又は３以上の構成要素が同時に（つまり、並列に）実行され得る可能性があるように規定されることが多い。データフローグラフをコンパイルし、実行するための多くのシステムは、可能であればデータフローグラフの構成要素が同時に実行されるようにデータフローグラフをコンパイルすることによって同時性の可能性を活用する。そのようにすることによって、これらのシステムは、最小限のレイテンシーでデータフローグラフを実行することを主眼とする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第５，９６６，０７２号明細書
【発明の概要】
【課題を解決するための手段】
【０００６】
一態様において、概して、手法は、データ処理グラフの一部分の特徴に基づいて２つのコンパイルモードのうちの１つでデータ処理グラフの一部分をコンパイルすることを含む。コンパイルモードのうちの第１のコンパイルモードにおいては、構成要素の同時実行が許容される。コンパイルモードのうちの第２のコンパイルモードにおいては、構成要素の同時実行が許容されず、構成要素の逐次的な実行が施行される。一部の態様において、コンパイルモードのうちの第１のコンパイルモードは、データ処理グラフの一部分の１又は２以上の構成要素が「処理タスク」（単に「タスク」とも呼ばれる）（例えば、１又は２以上の構成要素の動作が実行されるプロセス又はスレッド）をスポーンする（spawn）ために必要とされる時間の量に対して相対的に多い量の時間がかかる可能性がある動作を含むときに使用される。一部の態様において、コンパイルモードの第２のコンパイルモードは、データ処理グラフの一部分の構成要素の実質的にすべてが、タスクをスポーンするために必要とされる時間の量に対して相対的に少ない量の時間がかかる動作を含むときに使用される。
【０００７】
別の態様においては、概して、動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための方法が、グラフに基づくプログラムの仕様を受け取るステップであって、グラフに基づくプログラムの仕様が、それぞれが少なくとも１つの動作に対応する複数の構成要素、及び複数の有向リンクであって、各有向リンクが、複数の構成要素のうちの上流の構成要素を複数の構成要素のうちの下流の構成要素に接続する、複数の有向リンクを含むグラフを含む、ステップを含む。方法は、動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するステップであって、動作の第１のグループ内の複数の動作がグラフのトポロジーによって同時に実行されることを妨げられないように、グラフのトポロジーに少なくとも部分的に基づいて第１のグループにおける同時性の可能なレベルを特定すること、分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析すること、及び第１のグループ内の動作を実行するための処理されたコードを生じさせることであって、処理されたコードが、決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行する、生じさせることを含む、ステップも含む。
【０００８】
態様は、以下の特徴のうちの１又は２以上を含み得る。
【０００９】
分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析することは、分析される動作の各々に関して、その分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実施するか又は潜在的に第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作（latent operation）であるかどうかを決定することを含む。
【００１０】
分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析することは、分析される動作の各々に関して、分析される動作が、第１のグループの実行の単一の開始に応答して複数回実行される１又は２以上の動作の繰り返す組（iterating set）のメンバーであるかどうかを決定することを含む。
【００１１】
第１の閾値は、１又は２以上の動作を実行するためのタスクをスポーンするために必要とされる時間の第２の期間よりも長い時間の第１の期間として定義される。
【００１２】
条件、すなわち、（１）グラフのトポロジーによって同時に実行されることを妨げられない第１のグループ内の少なくとも２つの動作が両方とも潜在的動作であると決定されたこと、又は（２）第１のグループ内の少なくとも１つの動作が１若しくは２以上の動作の繰り返す組のメンバーであると決定されたことのうちのどちらも満たされない場合に、処理されたコードは、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行する。
【００１３】
次のさらなる条件、すなわち、（３）第１のグループ内の２又は３以上の動作の構成が繰り返す組の存在を示唆することも満たされない場合に、処理されたコードは、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行する。
【００１４】
同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行することは、第１のグループ内で動作のすべての逐次的な実行を施行することを含む。
【００１５】
有向リンクのうちの１又は２以上は、上流の構成要素と下流の構成要素との間のデータフローを示す。
【００１６】
有向リンクのうちの１又は２以上は、上流の構成要素と下流の構成要素との間の制御フローを示す。
【００１７】
動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するステップは、動作の第１のグループの中の少なくとも部分的な順序付けを規定する順序付け情報を生じさせることであって、順序付け情報が、グラフのトポロジーに少なくとも部分的に基づく、生じさせることをさらに含み、第１のグループにおける同時性の可能なレベルを特定することは、第１のグループ内の複数の動作が部分的な順序付けによって同時に実行されることを妨げられないように部分的な順序付けによって許容される同時性のレベルを特定することを含む。
【００１８】
順序付け情報を生じさせることは、動作の第１のグループをトポロジカルソートすること(topologically sorting)を含む。
【００１９】
別の態様においては、概して、ソフトウェアが、動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするためのコンピュータ可読媒体に非一時的形態で記憶される。ソフトウェアは、コンピューティングシステムにグラフに基づくプログラムの仕様を受け取らせるための命令を含み、グラフに基づくプログラムの仕様は、それぞれが動作に対応する複数の構成要素、及び複数の有向リンクであって、各有向リンクが、複数の構成要素のうちの上流の構成要素を複数の構成要素のうちの下流の構成要素に接続する、複数の有向リンクを含むグラフを含む。ソフトウェアは、コンピューティングシステムに動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理させるための命令も含み、処理することは、動作の第１のグループ内の複数の動作がグラフのトポロジーによって同時に実行されることを妨げられないように、グラフのトポロジーに少なくとも部分的に基づいて第１のグループにおける同時性の可能なレベルを特定すること、分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析すること、及び第１のグループ内の動作を実行するための処理されたコードを生じさせることであって、処理されたコードが、決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行する、生じさせることを含む。
【００２０】
別の態様においては、概して、グラフに基づくプログラムの仕様をコンパイルするためのコンピューティングシステムが、グラフに基づくプログラムの仕様を受け取るように構成された入力デバイス又はポートであって、グラフに基づくプログラムの仕様が、それぞれが動作に対応する複数の構成要素、及び複数の有向リンクであって、各有向リンクが、複数の構成要素のうちの上流の構成要素を複数の構成要素のうちの下流の構成要素に接続する、複数の有向リンクを含むグラフを含む、入力デバイス又はポートと、動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するように構成された少なくとも１つのプロセッサであって、処理することが、動作の第１のグループ内の複数の動作がグラフのトポロジーによって同時に実行されることを妨げられないように、グラフのトポロジーに少なくとも部分的に基づいて第１のグループにおける同時性の可能なレベルを特定すること、分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析すること、及び第１のグループ内の動作を実行するための処理されたコードを生じさせることであって、処理されたコードが、決定されたランタイムの特徴に少なくとも部分的に基づいて、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行する、生じさせることを含む、少なくとも１つのプロセッサとを含む。
【００２１】
態様は、以下の利点のうちの１又は２以上を有する可能性がある。
【００２２】
利点の中でもとりわけ、態様は、計算のレイテンシーと計算の効率との間のトレードオフを実現するためにグラフに基づくプログラムをコンパイルする。特に、有利なことに、態様は、構成要素を、同時に実行され得るグループと、同時に実行され得ないグループとにグループ分けする。構成要素のグループ分けは、グラフに基づくプログラムの実行が最適化されるように最適性の基準（optimality criterion）に従って実施される（例えば、高いレイテンシーの動作が同時実行を許容される一方、低いレイテンシーの動作は実行されることを許容されない）。一部の例において、最適性の基準は、その最適性の基準が改善された計算の効率及び／又は削減された計算のレイテンシーをもたらす状況においてのみ同時性が使用されることを保証する。
【００２３】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
【図面の簡単な説明】
【００２４】
【図１】タスクに基づく計算システムのブロック図である。
【図２】いくつかの出力スカラポートから入力スカラポートへの接続を含むデータ処理グラフである。
【図３】いくつかの出力コレクションポートから入力コレクションポートへの接続を含むデータ処理グラフである。
【図４】出力コレクションポートから入力スカラポートへの接続及び出力スカラポートから入力コレクションポートへの接続を含むデータ処理グラフである。
【図５Ａ】２つの構成要素の間のスカラポートからスカラポートへの接続の図である。
【図５Ｂ】２つの構成要素の間のコレクションポートからコレクションポートへの接続の図である。
【図５Ｃ】実行セットの入口点を含む２つの構成要素の間のコレクションポートからスカラポートへの接続の図である。
【図５Ｄ】実行セットの出口点を含む２つの構成要素の間のスカラポートからコレクションポートへの接続の図である。
【図６】実行セットを含むデータ処理グラフである。
【図７】図６の実行セットの構成要素の動作の複数のタスクへのグループ分けの図である。
【図８】図６の実行セットの構成要素の動作の単一のタスクへのグループ分けの図である。
【図９Ａ】いかなる潜在的動作もない構成要素を含む実行セットを含むデータ処理グラフである。
【図９Ｂ】図９Ａの実行セットの動作の実行の図である。
【図９Ｃ】図９Ａの実行セットの動作の代替的な実行と比較されたそれらの動作の実行の図である。
【図１０Ａ】潜在的動作のある構成要素を含む実行セットを含むデータ処理グラフである。
【図１０Ｂ】図１０Ａの実行セットの動作の実行の図である。
【図１０Ｃ】図１０Ａの実行セットの動作の代替的な実行と比較されたそれらの動作の実行の図である。
【図１１】入れ子にされた実行セットを含む実行セットを含むデータ処理グラフである。
【図１２】暗黙的実行セット（implicit execution set）を含む実行セットを含むデータ処理グラフである。
【発明を実施するための形態】
【００２５】
図１を参照すると、タスクに基づく計算システム１００が、高レベルのプログラムの仕様１１０を使用して、プログラムの仕様１１０によって規定された計算を実行するようにコンピューティングプラットフォーム１５０の計算及び記憶リソースを制御する。コンパイラ／インタープリタ１２０は、高レベルのプログラムの仕様１１０を受け取り、タスクに基づくランタイムインターフェース／コントローラ１４０によって実行され得る形態のタスクに基づく仕様１３０を生じさせる。コンパイラ／インタープリタ１２０は、複数のデータ要素の各々に適用される細分化されたタスクとして個々に又は一体としてインスタンス化され得る１又は２以上の「構成要素」の１又は２以上の「実行セット」を特定する。コンパイル又は解釈プロセスの一部は、下でより詳細に説明されるように、これらの実行セットを特定することと、実行するためにセットを準備することとを含む。コンパイラ／インタープリタ１２０は、例えば、コンピューティングプラットフォーム１５０上で実施される計算の効率を最適化するためにさまざまな技術を利用する可能性がある。コンパイラ／インタープリタ１２０によって生じさせられる目標のプログラムの仕様は、それ自体、タスクに基づく仕様１３０を生成するためにシステム１００の別の部分によってさらに処理される（例えば、さらにコンパイルされる、解釈されるなど）ことになる中間形態である可能性がある。下の検討は、そのような変換の１又は２以上の例を概説するが、例えば、コンパイラの設計に精通する者によって理解されるように、もちろん、変換のその他の手法があり得る。
【００２６】
概して、計算プラットフォーム１５０は、いくつかのコンピューティングノード１５２（例えば、分散された計算リソースと分散された記憶リソースとの両方を提供する個々のサーバコンピュータ）から構成され、それによって、高度な並列処理を可能にする。高レベルのプログラムの仕様１１０において表される計算は、比較的細分化されたタスクとしてコンピューティングプラットフォーム１５０上で実行され、さらに、規定された計算の効率的な並列実行を可能にする。
【００２７】
一部の実施形態において、高レベルのプログラムの仕様１１０は、（データフローグラフにあるような）データのフローと制御のフローとの両方を規定することができる、「データ処理グラフ」と呼ばれる一種のグラフに基づくプログラムの仕様である。データ処理グラフは、コンパイラ／インタープリタ１２０がデータ処理グラフの構成要素において並列処理を動的に導入することを可能にする、下でより詳細に説明されるように、並列処理をサポートするためのメカニズムも含む。例えば、データ処理グラフの構成要素のインスタンスは、データ処理グラフを実行する文脈でタスク（例えば、１又は２以上の構成要素の動作が実行されるスレッド）としてスポーンされ、概して、コンピューティングプラットフォーム１５０の複数のコンピューティングノード１５２において実行される。極めて広く、コントローラ１４０は、例えば、計算負荷の割り振り、通信又は入力／出力のオーバーヘッドの削減、及びメモリリソースの使用に関連するシステムの性能目標を達成するために、それらのタスクの実行のスケジューリング及び位置（locus）の監視制御の態様を提供する。
【００２８】
コンパイラ／インタープリタ１２０による変換後、計算全体は、コンピューティングプラットフォーム１５０によって実行され得る目標言語のプロシージャによってタスクに基づく仕様１３０として表現される。これらのプロシージャは「spawn」及び「wait」などのプリミティブを利用し、高レベルの（例えば、グラフに基づく）プログラムの仕様１１０内の構成要素に関してプログラマによって規定された作業手順をそれらのプロシージャの中に含むか又はそのような作業手順を呼び出す可能性がある。
【００２９】
一部の場合において、構成要素の各インスタンスは、いくつかのタスクが単一の構成要素の単一のインスタンスを実施し、いくつかのタスクが実行セットの複数の構成要素の単一のインスタンスを実施し、いくつかのタスクが構成要素の連続的なインスタンスを実施するようにしてタスクとして実施される。構成要素及びそれらの構成要素のインスタンスからの特定のマッピングは、結果として起こる実行が計算の意味的定義に合致したままであるようにコンパイラ／インタープリタの特定の設計に応じて決まる。
【００３０】
概して、ランタイム環境内のタスクは、例えば、１つの最上位のタスクが、例えば、データ処理グラフの最上位の構成要素の各々のために１つずつ複数のタスクをスポーンするようにして階層的に構成される。同様に、実行セットの計算は、複数の（つまり、多くの）サブタスクがコレクションの要素を処理するためにそれぞれ使用されるようにしてコレクション全体を処理するために１つのタスクを有する可能性がある。
【００３１】
一部の例において、各コンピューティングノード１５２は、１又は２以上の処理エンジン１５４を有する。少なくとも一部の実装形態において、各処理エンジンは、コンピューティングノード１５０上で実行される単一のオペレーティングシステムプロセスに関連付けられる。コンピューティングノードの特徴に応じて、単一のコンピューティングノード上で複数の処理エンジンを実行することが効率的である可能性がある。例えば、コンピューティングノードは、複数の別々のプロセッサを有するサーバコンピュータである可能性があり、又はサーバコンピュータは、複数のプロセッサコアを有する単一のプロセッサを有する可能性があり、又は複数のコアを有する複数のプロセッサの組合せが存在する可能性がある。いずれの場合も、複数の処理エンジンを実行することが、コンピューティングノード１５２上で単一の処理エンジンのみを使用するよりも効率的である可能性がある。
【００３２】
１  データ処理グラフ
一部の実施形態において、高レベルのプログラムの仕様１１０は、データに対して実施されるデータ処理の計算の全体の一部をそれぞれが規定する「構成要素」のセットを含む「データ処理グラフ」と呼ばれるある種のグラフに基づくプログラムの仕様である。構成要素は、例えば、プログラミングユーザインターフェース及び／又は計算のデータ表現においてグラフ内のノードとして表される。上の背景技術において説明されたデータフローグラフなどの一部のグラフに基づくプログラムの仕様とは異なり、データ処理グラフは、データの転送、又は制御の転送、又はこれら両方のいずれかを表すノード間のリンクを含み得る。リンクの特徴を示す１つの方法は、構成要素に異なる種類のポートを設けることによる。リンクは、上流の構成要素の出力ポートから下流の構成要素の入力ポートに接続される有向リンクである。ポートは、データ要素がどのようにして書き込まれ、リンクから読まれるのか及び／又は構成要素がデータを処理するためにどのようにして制御されるのかの特徴を表すインジケータを有する。
【００３３】
これらのポートは、いくつかの異なる特徴を有する可能性がある。ポートの１つの特徴は、入力ポート又は出力ポートとしてのそのポートの方向性である。有向リンクは、データ及び／又は制御が上流の構成要素の出力ポートから下流の構成要素の入力ポートに運ばれることを表す。開発者は、異なる種類のポートを一緒にリンクすることを可能にされる。データ処理グラフのデータ処理の特徴の一部は、異なる種類のポートがどのようにして一緒にリンクされるのかに依存する。例えば、異なる種類のポート間のリンクは、下でより詳細に説明されるように、階層的形態の並列処理を提供する異なる「実行セット」内の構成要素の入れ子にされたサブセットにつながる可能性がある。特定のデータ処理の特徴が、ポートの種類によって示唆される。構成要素が有する可能性がある異なる種類のポートは、以下を含む。
・構成要素のインスタンスがポートに接続されたリンクを通り越すコレクションのすべてのデータ要素をそれぞれ読むか又は書くことを意味する入力コレクションポート又は出力コレクションポート。構成要素のコレクションポート間の単一のリンクを有する構成要素の対に関して、下流の構成要素は、概して、データ要素が上流の構成要素によって書かれるときにそれらのデータ要素を読むことを可能にされ、上流の構成要素と下流の構成要素との間のパイプライン並列処理を可能にする。下でより詳細に説明されるように、データ要素は、並べ替えられる可能性もあり、それが、並列処理の効率的な働きを可能にする。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなコレクションポートは、概して、構成要素の四角いコネクタ記号によって示される。
・構成要素のインスタンスが、それぞれ、ポートに接続されたリンクから最大で１つのデータ要素を読むか又はポートに接続されたリンクに最大で１つのデータ要素を書くことを意味する入力スカラポート又は出力スカラポート。構成要素のスカラポート間の単一のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が、単一のデータ要素の転送を制御の転送として使用することによって強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのようなスカラポートは、概して、構成要素の三角のコネクタ記号によって示される。
・スカラ入力又はスカラ出力と同様であるが、いかなるデータ要素も送信される必要がない入力制御ポート又は出力制御ポートであって、構成要素間の制御の転送を伝達するために使用される、入力制御ポート又は出力制御ポート。構成要素の制御ポート間のリンクを有する構成要素の対に関して、上流の構成要素が実行を終えた後の下流の構成要素の直列実行が（たとえそれらの構成要素がコレクションポート間のリンクも有するとしても）強制される。例えば、プログラミンググラフィカルインターフェース内の一部のグラフィカルな表現において、そのような制御ポートは、概して、構成要素の丸いコネクタ記号によって示される。
【００３４】
これらの異なる種類のポートが、データ処理グラフの柔軟な設計を可能にし、ポートの種類の重なり合う特性によってデータ及び制御フローの強力な組合せを許容する。特に、（「データポート」と呼ばれる）ある形態でデータを運ぶ２つの種類のポート、コレクションポート及びスカラポートが存在し、（「シリアルポート」と呼ばれる）直列実行を強制する２つの種類のポート、スカラポート及び制御ポートが存在する。データ処理グラフは、概して、いかなる接続された入力データポートも持たない「ソース構成要素」である１又は２以上の構成要素と、いかなる接続された出力データポートも持たない「シンク構成要素」である１又は２以上の構成要素とを有する。一部の構成要素は、接続された入力データポートと接続された出力データポートとの両方を有する。一部の実施形態において、グラフは、巡回することを許されず、したがって、有向非巡回グラフ（ＤＡＧ，directed acyclic graph）でなければならない。この特徴は、下でより詳細に説明されるように、ＤＡＧの特定の特徴を利用するために使用され得る。
【００３５】
異なる方法で異なる種類のポートを接続することによって、開発者は、データ処理グラフの構成要素のポートの間の異なる種類のリンクの構成を規定することができる。例えば、ある種類のリンクの構成が、特定の種類のポートが同じ種類のポートに接続されることに対応する可能性があり（例えば、スカラ−スカラリンク）、別の種類のリンクの構成が、特定の種類のポートが異なる種類のポートに接続されることに対応する可能性がある（例えば、コレクション−スカラリンク）。これらの異なる種類のリンクの構成は、開発者がデータ処理グラフの一部に関連する意図された振る舞いを視覚的に特定する方法と、その振る舞いを可能にするために必要とされる対応する種類のコンパイルプロセスをコンパイラ／インタープリタ１２０に示す方法との両方として働く。本明細書において説明される例は異なる種類のリンクの構成を視覚的に表現するために異なる種類のポートに一意の形状を使用するが、システムのその他の実装形態は、異なる種類のリンクを提供し、それぞれの種類のリンクに一意の視覚的インジケータ（例えば、太さ、リンクの種類、色など）を割り当てることによって異なる種類のリンクの構成の振る舞いを区別する可能性がある。しかし、ポートの種類の代わりにリンクの種類を使用して、上で挙げられた３種類のポートによって可能なのと同じさまざまなリンクの構成を表すためには、４種類以上のリンク（例えば、スカラ−スカラ、コレクション−コレクション、制御−制御、コレクション−スカラ、スカラ−コレクション、スカラ−制御など）が存在することになるであろう。
【００３６】
コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフを準備するための手順を実施する。第１の手順は、構成要素の潜在的に入れ子にされた実行セットの階層を特定するための実行セット発見前処理手順である。第２の手順は、各実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実装する制御コードを形成するためにコンパイラ／インタープリタ１２０が使用する対応する制御グラフを各実行セットに関して生じさせるための制御グラフ生成手順である。
【００３７】
少なくとも１つの入力データポートを有する構成要素は、各入力データ要素若しくはコレクション（又は複数の構成要素の入力ポート上のデータ要素及び／若しくはコレクションのタプル）に対して実施される処理を規定する。そのような規定の１つの形態は、１つの入力データ要素及び／若しくはコレクション又は入力データ要素及び／若しくはコレクションのタプルに対して実施される手順としての形態である。構成要素は、少なくとも１つの出力データポートを有する場合、対応する１つの出力データ要素及び／若しくはコレクション又は出力データ要素及び／若しくはコレクションのタプルを生成し得る。そのような手順は、高レベルのステートメントに基づく言語で（例えば、米国特許第８，０６９，１２９号明細書「Editing and Compiling Business Rules」（ビジネスルールの編集及びコンパイル）において使用されたＪａｖａのソースステートメント若しくはデータ操作言語（ＤＭＬ，Data Manipulation Language）を使用して）規定される可能性があり、又は何らかの完全に若しくは部分的にコンパイルされた形態で（例えば、Ｊａｖａのバイトコードとして）提供される可能性がある。例えば、構成要素は、その構成要素の入力データ要素及び／若しくはコレクション並びにその構成要素の出力データ要素及び／若しくはコレクション、或いはより広く、そのようなデータ要素若しくはコレクションへの、又は入力を獲得し、出力データ要素若しくはコレクションを提供するために使用される手順若しくはデータオブジェクト（本明細書においては「ハンドル」と呼ばれる）への参照を引数が含む作業手順を有する可能性がある。
【００３８】
作業手順は、さまざまな種類である可能性がある。規定され得る手順の種類を限定することを意図することなく、ある種類の作業手順は、レコードフォーマットに従ってデータ要素に対する個別的な計算を規定する。単一のデータ要素は、テーブル（又はその他の種類のデータセット）からのレコードである可能性があり、レコードのコレクションは、テーブル内のレコードのすべてである可能性がある。例えば、単一の入力スカラポート及び単一の出力スカラポートを有する構成要素に関するある種類の作業手順は、１つの入力レコードを受け取ることと、そのレコードに対して計算を実施することと、１つの出力レコードを提供することとを含む。別の種類の作業手順は、複数の入力スカラポートから受け取られた入力レコードのタプルが複数の出力スカラポートにおいて送出される出力レコードのタプルを形成するためにどのようにして処理されるかを規定する可能性がある。
【００３９】
データ処理グラフによって規定される計算の意味的（semantic）定義は、グラフによって定義される計算の処理の順序付け及び同時性に対する制約及び／又は制約がないことを表すので元来並列的である。したがって、計算の定義は、結果が計算のステップの何らかの逐次的な順序付けと等価であることを必要としない。一方、計算の定義は、計算の部分を順番に並べることを必要とする特定の制約と、計算の部分の並列実行の制限を与える。
【００４０】
データ処理グラフの検討において、ランタイムシステム内の別個の「タスク」としての構成要素のインスタンスの実装形態は、順番に並べる制約及び並列実行の制約を表す手段であると考えられる。概して、データ処理グラフ内の各構成要素は、グラフの実行中にコンピューティングプラットフォームにおいて何度かインスタンス化される。各構成要素のインスタンスの数は、複数の実行セットのうちのどれに構成要素が割り当てられるのかに依存する可能性がある。構成要素の複数のインスタンスがインスタンス化されるとき、２つ以上のインスタンスが並列に実行される可能性があり、異なるインスタンスがシステム内の異なるコンピューティングノードにおいて実行される可能性がある。ポートの種類を含む構成要素によって実施される動作及び構成要素の相互接続が、規定されたデータ処理グラフによって認められる並列処理の性質を決定する。
【００４１】
さまざまな構成要素の異なる種類のデータポートは、データがそれらの構成要素をリンクする入力ポート及び出力ポートの種類に応じて異なる方法で構成要素間のリンクを通り越すことを可能にする。上述のように、スカラポートは、最大で１つのデータ要素（すなわち、０個か又は１つのデータ要素）の（出力スカラポートのための）生成又は（入力スカラポートのための）消費を表す。一方、コレクションポートは、潜在的に複数のデータ要素のセットの（出力コレクションポートのための）生成又は（入力コレクションポートのための）消費を表す。単一のデータ処理グラフにおいて両方の種類のデータポートをサポートすることによって、そのモデルで開発者が望まれる振る舞いを簡単に示すことを可能にする。
【００４２】
図２を参照すると、データ処理グラフ３００は、一連の３つの接続された構成要素、第１の構成要素（Ａ１）３０２、第２の構成要素（Ｂ１）３０４、及び第３の構成要素（Ｃ１）３０６を含む。第１の構成要素は、コレクション型入力ポート３０８及びスカラ型出力ポート３１０を含む。第２の構成要素３０４は、スカラ型入力ポート３１２及びスカラ型出力ポート３１４を含む。第３の構成要素は、スカラ型入力ポート３１６及びコレクション型出力ポート３１８を含む。
【００４３】
第１の構成要素３０２の出力スカラポート３１０を第２の構成要素３０４の入力スカラポート３１２に接続する第１のリンク３２０は、データが第１の構成要素３０２と第２の構成要素３０４との間を通ることを可能にすることと、同時に、第１の構成要素及び第２の構成要素３０２、３０４の直列実行を強制することとの両方を行う。同様に、第２の構成要素３０４の出力スカラポート３１４を第３の構成要素３０６の入力スカラポート３１６に接続する第２のリンク３２２は、データが第２の構成要素３０４と第３の構成要素３０６との間を通ることを可能にすることと、第２の構成要素及び第３の構成要素３０４、３０６の直列実行を強制することとの両方を行う。
【００４４】
図２のスカラポートの相互接続が原因で、第２の構成要素３０４は、第１の構成要素３０２が完了した（第１のリンク３２０を介して単一のデータ要素を渡した）後にのみ実行を開始し、第３の構成要素３０６は、第２の構成要素３０４が完了した（第２のリンク３２２を介して単一のデータ要素を渡した）後にのみ実行を開始する。つまり、データ処理グラフの３つの構成要素の各々は、厳格な順番Ａ１／Ｂ１／Ｃ１で１回実行される。
【００４５】
図２の例示的なデータ処理グラフにおいて、第１の構成要素３０２の入力ポート３０８及び第３の構成要素３１８の出力ポートは、たまたまコレクションポートであり、コレクションポートは、第１、第２、及び第３の構成要素３０２、３０４、３０６を接続するスカラポートによって課されるそれらの構成要素の直列実行の振る舞いに影響を与えない。
【００４６】
概して、コレクションポートは、構成要素の間でデータ要素のコレクションを渡すことと、同時に、そのセット内のデータ要素を並べ替える承諾をランタイムシステムに与えることとの両方のために使用される。順序付けられていないコレクションのデータ要素の並べ替えは、データ要素間で計算の状態への依存性がないか、又は各データ要素が処理されるときにアクセスされるグローバルな状態が存在する場合に最終状態がそれらのデータ要素が処理された順序に依存しないかのどちらかの理由で許容される。並べ替えのこの承諾は、実行時まで並列処理についての判断を遅らせる柔軟性を提供する。
【００４７】
図３を参照すると、データ処理グラフ３２４は、一連の３つの接続された構成要素、第１の構成要素（Ａ２）３２６、第２の構成要素（Ｂ２）３２８、及び第３の構成要素（Ｃ２）３３０を含む。第１の構成要素３２６は、コレクション型入力ポート３３２及びコレクション型出力ポート３３４を含む。第２の構成要素３２８は、コレクション型入力ポート３３６及びコレクション型出力ポート３３８を含む。第３の構成要素３３０は、コレクション型入力ポート３４０及びコレクション型出力ポート３４２を含む。
【００４８】
３つの構成要素３２６、３２８、３３０の各々は、１又は２以上の入力要素のコレクションが１又は２以上の出力要素のコレクションを生じさせるためにどのようにして処理されるかを規定する。特定の入力要素と特定の出力要素との間に１対１の対応があるとは限らない。例えば、第１の構成要素３２６と第２の構成要素３２８との間のデータ要素３４４の第１のコレクションの中のデータ要素の数は、第２の構成要素３２８と第３の構成要素３３０との間のデータ要素３４６の第２のコレクションの中の要素の数とは異なる可能性がある。コレクションポートの間の接続に課される制約は、コレクション内の各データ要素が、それらのデータ要素が処理される順序に関連して第１の構成要素３２６と第２の構成要素３２８との間及び第２の構成要素３２８と第３の構成要素３３０との間で任意の並べ替えを許容しながらコレクションポートからコレクションポートへと渡されることだけである。代替的に、その他の例において、コレクションポートは、順序を維持するように構成されていてもよい可能性がある。この例において、３つの構成要素３２６、３２８、３３０は、一緒に開始し、同時に実行され、パイプライン並列処理を許容する。
【００４９】
図１に関連して説明されたコンパイラ／インタープリタ１２０は、コレクションポート間の接続を認識し、実施されている計算にとって適切である方法で計算を実行可能コードに変換するように構成される。コレクションデータリンクの順序付けられていない性質は、これがどのようにして実現されるかの柔軟性をコンパイラ／インタープリタ１２０に与える。例えば、たまたま、第２の構成要素３２８に関して、各出力要素が単一の入力要素に基づいて計算される（つまり、データ要素にまたがって保持される状態がない）場合、コンパイラ／インタープリタ１２０は、（例えばランタイムで利用可能な計算リソースに応じて）データ要素毎に構成要素の１つのインスタンスずつものインスタンスをインスタンス化することによってランタイムシステムがデータ要素の処理を動的に並列化することを可能にし得る。特別な場合に、入力コレクションポートを有する構成要素のデータ要素にまたがって状態が保持されていてもよい可能性がある。しかし、通常の場合でも、ランタイムシステムは、構成要素のタスクを並列化することを可能にされる可能性がある。例えば、ランタイムシステムは、グローバルな状態が保持されていないことを検出する場合、タスクを並列化することを可能にされ得る。一部の構成要素が状態を保持することをサポートするように構成される可能性もあり、その場合、並列処理は許容されない可能性がある。コレクションが順序付けられていない場合、データ要素の間で順序が維持される必要がないという事実は、第２の構成要素３２８の各インスタンスがそのインスタンスの出力データ要素が利用可能になり次第そのインスタンスの出力データ要素を第３の構成要素３３０に提供することができ、第３の構成要素３３０が第２の構成要素３２８のすべてのインスタンスが終了する前にそれらのデータ要素を処理し始めることができることを意味する。
【００５０】
２  実行セット
一部の例において、グラフの開発者は、１つの構成要素のコレクション型出力ポートを別の構成要素のスカラ型入力ポートに接続することによって、データのコレクションの中のデータ要素の処理が動的に並列化され得ることを明示的に示すことができる。そのような構成要素を示すことに加えて、そのような指示は、コレクションの異なる要素の処理の間で状態が保持されないことも必要とする。図４を参照すると、データ処理グラフ３４８は、一連の３つの接続された構成要素、第１の構成要素（Ａ３）３５０、第２の構成要素（Ｂ３）３５２、及び第３の構成要素（Ｃ３）３５４を含む。第１の構成要素３５０は、コレクション型入力ポート３５６及びコレクション型出力ポート３５８を含む。第２の構成要素３５２は、スカラ型入力ポート３６０及びスカラ型出力ポート３６２を含む。第３の構成要素３５４は、コレクション型入力ポート３６４及びコレクション型出力ポート３６６を含む。
【００５１】
第１の構成要素のコレクション型出力ポート３５８は、第１のリンク３６８によって第２の構成要素３５２のスカラ型入力ポート３６０に接続され、第２の構成要素３５２のスカラ型出力ポート３６２は、第２のリンク３７０によってコレクション型入力ポート３６４に接続される。下でより詳細に説明されるように、コレクション型出力ポートからスカラ型入力ポートへのリンクは、「実行セット」（又は「繰り返す組」）への入口点を示唆し、スカラ型出力ポートからコレクション型入力ポートへのリンクは、実行セットの出口点を示唆する。極めて広く、下でより詳細に説明されるように、実行セットに含まれる構成要素は、データ要素のコレクションからのデータ要素を処理するためにランタイムコントローラによって動的に並列化され得る。
【００５２】
図４において、第１の構成要素３５０のコレクション型出力ポート３５８と第２の構成要素３５２のスカラ型入力ポート３６０との間のリンク３６８は、実行セットへの入口点を示唆する。第２の構成要素３５２のスカラ型出力ポート３６２と第３の構成要素３５４のコレクション型入力ポート３６４との間のリンク３７０は、実行セットの出口点を示唆する。つまり、第２の構成要素３５２は、実行セットの唯一の構成要素である。
【００５３】
第２の構成要素３５２が実行セットに含まれるので、第１の構成要素３５０のコレクション型出力ポート３５８から受け取られるそれぞれのデータ要素のために第２の構成要素３５２の別々のインスタンスが起動される。別々のインスタンスの少なくとも一部は、実行時まで行われない可能性がある判断に応じて並列に実行され得る。この例において、第１の（３５０）及び第３の（３５４）構成要素は、一緒に開始し、同時に実行され、一方、第２の構成要素（３５２）は、リンク３６８を介して受け取られるそれぞれのデータ要素のために１回実行される。図１に関連して上で説明されているように、コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフを準備するためにデータ処理グラフに実行セット発見前処理手順を実施する。実行セットは、一体として呼び出され、出力コレクションポートのデータ要素の一部などのデータの一部に適用され得る１又は２以上の構成要素のセットである。したがって、それぞれの入力要素（又はセットの複数の入力ポートに与えられる入力要素のタプル）のために、実行セット内の各構成要素の最大で１つのインスタンスが実行される。実行セット内で、スカラポート及び制御ポートへのリンクによって、順番に並べる制約が課され、実行セット内の構成要素の並列実行は、順番に並べる制約が破られない限りにおいて容認される。並列に実行されることを可能にされる少なくともいくつかの構成要素が存在する例において、実行セットは、複数のタスク、例えば、実行セットまるごとのためのタスクと、構成要素のうちの１又は２以上のインスタンスの同時実行のための１又は２以上のサブタスクとを使用して実施される可能性がある。したがって、実行セットの異なるインスタンスを表すタスクは、それら自体、例えば、同時に実行され得るサブタスクによってさらに細分化されたタスクに分解される可能性がある。異なる実行セットのためのタスクは、概して、独立して並列に実行され得る。したがって、例えば、大きなデータセットが百万個のレコードを有する場合、百万個の独立したタスクが存在する可能性がある。タスクの一部は、コンピューティングプラットフォーム１５０の異なるノード１５２上で実行される可能性がある。タスクは、単一のノード１５２上でさえも同時に効率的に実行され得る軽量スレッドを使用して実行される可能性がある。
【００５４】
概して、（１又は２以上の）割り当てアルゴリズムによって特定された実行セット（すなわち、ルート実行セット（root execution set）以外の実行セット）は、実行セットの境界の「駆動（driving）」スカラデータポートを通じてデータ要素を受け取る。実行セットの駆動入力スカラデータポートにおいて受け取られた各データ要素に関して、実行セット内の構成要素の各々は、１回実行される（作動される場合）か又はまったく実行されない（抑制される場合）。上流のコレクションポートから実行セットに利用され得る複数のデータ要素を処理するために、実行セットの複数のインスタンスがインスタンス化され、並列に実行され得る。実行セットに関する並列処理の度合いは、ランタイムで決定される可能性があり（実行セットを並列化しないあり得る判断を含み）、ランタイムで利用可能な計算リソースによってのみ制限される。実行セットの独立したインスタンスの個々の出力は、順序に関係なく実行セットの（１又は２以上の）出力ポートにおいて集められ、下流の構成要素に利用され得るようにされる。代替的に、その他の実施形態においては、駆動入力スカラデータポートを必要としないルート実行セット以外の実行セットが（場合によってはユーザ入力に基づいて）認識される可能性がある。駆動入力スカラデータポートのないそのような実行セットは、本明細書において説明される手順を使用して、適切な場合（例えば、下で説明されるラッチされた実行セットのために）単一のインスタンスにおいて、又は複数のインスタンスにおいて並列に実行される可能性がある。例えば、実行セットが実行される回数及び／又は実行される実行セットの並列なインスタンスの数を決定するパラメータが設定される可能性がある。
【００５５】
極めて広く、実行セット発見手順は、データ要素の順序付けられていないコレクションの入力要素にセットとして適用されるべきデータ処理グラフ内の構成要素のサブセットを決定する割り当てアルゴリズムを使用する。割り当てアルゴリズムは、データ処理グラフを詳しく調べ（traverse）、割り当て規則に基づいて各構成要素をサブセットに割り当てる。下の例において明らかにされるように、所与のデータ処理グラフは、実行セットの階層の異なるレベルで入れ子にされたいくつかの実行セットを含む可能性がある。
【００５６】
本明細書において説明されるデータ処理グラフにおいては、２種類のデータポート、すなわち、スカラデータポート及びコレクションデータポートが存在する。概して、リンクされた構成要素の対（すなわち、上流の構成要素及び下流の構成要素）は、（それらの構成要素が別の理由で異なる実行セット内にあるのでない限り）それらの構成要素が同じ種類のポートの間のリンクによって接続される場合、デフォルトで同じ実行セット内にある。図５Ａにおいて、構成要素Ａ  ４０２は、スカラ型の出力ポート４０６を有し、構成要素Ｂ  ４０４は、スカラ型の入力ポート４０８を有する。構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０が２つのスカラ型ポートを接続するので、構成要素Ａ及びＢ  ４０２、４０４は、この例において同じ実行セット内にある。図５Ａにおいては、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンクがスカラ−スカラリンクであるので、０データ要素か又は１データ要素かのどちらかがリンク４１０を介して上流の構成要素Ａ  ４０２と下流の構成要素Ｂ  ４０４との間で渡される。上流の構成要素Ａ  ４０２の処理が完了すると、（上で説明されているように）上流の構成要素Ａ  ４０２が抑制されない限り、データ要素がリンク４１０を介して渡され、上流の構成要素Ａ  ４０２が抑制される場合、データ要素はリンク４１０を介して渡されない。
【００５７】
図５Ｂを参照すると、構成要素Ａ  ４０２は、コレクション型の出力ポート４１２を有し、構成要素Ｂ  ４０４は、コレクション型の入力ポート４１４を有する。構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０が２つのコレクション型ポートを接続するので、構成要素Ａ  ４０２及び構成要素Ｂ  ４０４は、この例においてやはり同じ実行セット内にある。図５Ｂにおいては、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０がコレクション−コレクションリンクであるので、データ要素のセットが、リンク４１０を介して上流の構成要素と下流の構成要素との間で渡される。
【００５８】
リンクの両側のポートの種類が合致しないとき、実行セットの階層のレベルの暗黙的な変化がある。特に、合致しないポートは、実行セットの階層の特定のレベルの実行セットの入力点又は出口点を表す。一部の例において、実行セットの入力点は、コレクション型出力ポートとスカラ型入力ポートとの間のリンクとして定義される。図５Ｃにおいては、構成要素Ａ  ４０２の出力ポート４１６がコレクション型ポートであり、構成要素Ｂ  ４０４の入力ポート４１８がスカラ型ポートであるので、実行セットの入力点４２４の一例が、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０に示される。
【００５９】
一部の例において、実行セットの出口点は、スカラ型出力ポートとコレクション型入力ポートとの間のリンクとして定義される。図５Ｄを参照すると、構成要素Ａ  ４０２の出力ポート４２０がスカラ型ポートであり、構成要素Ｂ  ４０４の入力ポート４２２がコレクション型ポートであるので、実行セットの出口点４２６の一例が、構成要素Ａ  ４０２と構成要素Ｂ  ４０４との間のリンク４１０に示される。
【００６０】
コンパイラ／インタープリタ１２０のコンパイル及び／又は解釈の前に履行される割り当てアルゴリズムは、実行セットの入口点及び実行セットの出口点を使用して、データ処理グラフ内に存在する実行セットを発見する。
【００６１】
３  実行セットのコンパイル
図６を参照すると、データ処理グラフ６００の一例が、データソースＡ  ６５０から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第１のデータシンクＨ  ６５２及び第２のデータシンクＩ  ６５４に記憶する。データ処理グラフ６００の構成要素は、第１の構成要素Ｂ  ６５６、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、第４の構成要素Ｅ  ６６２、第５の構成要素Ｆ  ６６４、及び第６の構成要素Ｇ  ６６６を含む。
【００６２】
第１のフロー６５１は、データソース６５０の出力コレクションポートを第１の構成要素Ｂ  ６５６の入力コレクションポートに接続する。第２のフロー６５３は、第１の構成要素Ｂ  ６５６の出力コレクションポートを第２の構成要素Ｃ  ６５８の入力スカラポートに接続する。第２のフロー６５３が出力コレクションポートを入力スカラポートに接続するので、実行セットの入口点６５５は、第１の構成要素Ｂ  ６５６と第２の構成要素Ｃ  ６５８との間に存在することに留意されたい。
【００６３】
第３のフロー６５７は、第２の構成要素Ｃ  ６５８の出力スカラポートを第３の構成要素Ｄ  ６６０と第４の構成要素Ｅ  ６６２との両方の入力スカラポートに接続する。第４のフロー６５９は、第３の構成要素Ｄ  ６６０の出力スカラポートを第５の構成要素Ｆ  ６６４の入力コレクションポートに接続する。第５のフロー６６１は、第４の構成要素６６２の出力スカラポートを第６の構成要素Ｇ  ６６６の入力コレクションポートに接続する。第４のフロー６５９及び第５のフロー６６１が出力スカラポートを入力コレクションポートに接続するので、第１の実行セットの出口点６６３は、第３の構成要素Ｄ  ６６０と第５の構成要素Ｆ  ６６４との間に存在し、第２の実行セットの出口点６６５は、第４の構成要素Ｅ  ６６２と第６の構成要素Ｇ  ６６６との間に存在することに留意されたい。
【００６４】
第６のフロー６６７は、第５の構成要素Ｆ  ６６４の出力コレクションポートを第１のデータシンクＨ  ６５２の入力コレクションポートに接続する。第７のフロー６６９は、第６の構成要素Ｇ  ６６６の出力コレクションポートを第２のデータシンクＩ  ６５４の入力コレクションポートに接続する。
【００６５】
上述のように、コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフ６００を準備するとき、まず、実行セット発見前処理手順を実施して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。図６の例示的なデータ処理グラフ６００に関して、実行セット発見前処理手順は、実行セットの入口点６５５、第１の実行セットの出口点６６３、及び第２の実行セットの出口点６６５によって範囲を区切られているものとして第１の実行セット６６８を特定する。図から明らかなように、第１の実行セット６６８は、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２を含む。
【００６６】
実行セット６６８を特定した後、コンパイラ／インタープリタ１２０は、第１の実行セット内の構成要素の実行を制御するためにランタイムで状態機械を効果的に実装する制御コードを形成するためにコンパイラ／インタープリタ１２０が使用する第１の実行セットに関する制御グラフを生じさせるための制御グラフ生成手順を実行する。制御グラフを生じさせる際の１つのステップは、構成要素をタスクグループにグループ分けすることを含む。
【００６７】
一部の例において、コンパイラ／インタープリタ１２０は、実行セット６６８の構成要素を含むデータ処理グラフ内の構成要素の各々を１又は２以上のタスクグループにグループ分けする。データ処理グラフ６００が実行されるとき、各タスクグループのためにタスクがスポーン(spawn)され、タスクグループに属する構成要素の動作はタスク内で実施される。データ処理グラフのすべての構成要素がタスクグループにグループ分けされるが、本明細書において説明される態様は、主に、実行セット内の構成要素をタスクグループにグループ分けすることに関する。この理由により、残りの検討は、主に、実行セット６６８の構成要素をタスクグループにグループ分けすることに関する。
【００６８】
実行セット６６８の構成要素のタスクグループへのいくつかの異なるグループ分けが可能であり、それぞれの異なるグループ分けは、関連する利点及び欠点を有する。概して、実行セット６６８の構成要素がタスクグループに正にどのようにして最適にグループ分けされるのかということは、最適性の基準に依存する。
【００６９】
３．１  レイテンシーの最小化のためのコンパイル
例えば、最適性の基準が実行セット６６８の構成要素の最適なグループ分けが最小限の計算のレイテンシーを達成することであると規定する場合、構成要素のタスクグループへの１つの可能なグループ分けは、各構成要素をその構成要素独自の個々のタスクグループにグループ分けすることを含む。そのようにすることは、構成要素の動作（「作業手順」と呼ばれることがある）が可能なときに同時に実行されることを可能にする。例えば、実行セット６６８において、第１のタスクグループが、第２の構成要素Ｃ  ６５８に割り当てられる可能性があり、第２のタスクグループが、第３の構成要素Ｄ  ６６０に割り当てられる可能性があり、第３のタスクグループが、第４の構成要素Ｅ  ６６２に割り当てられる可能性がある。
【００７０】
図７を参照すると、データ処理グラフ６００の実行セット６６８が実行されるとき、第１のタスク７７０が、第１のタスクグループのためにスポーンされ、第２の構成要素Ｃ  ７５８の動作は、第１のタスク７７０内で実施される。第２の構成要素Ｃ  ７５８の動作が完了するとき、第１のタスクは、第２のタスクグループのための第２のタスク７７２及び第３のタスクグループのための第３のタスク７７４をスポーンする。第３の構成要素Ｄ  ７６０の動作は、第４の構成要素Ｅ  ７６２の動作が第３のタスク７７４内で実施されるのと同時に第２のタスク７７２内で実施される。
【００７１】
有利なことに、第３の構成要素Ｄ  ７６０の動作を第４の構成要素Ｅ  ７６２の動作と同時に実施することによって、どちらの構成要素もその構成要素の動作を実施する前に他方の構成要素が完了するのを待つ必要がないので、計算のレイテンシーが最小化される。一方、複数のタスクをスポーンすることに関連する計算リソースと時間との両方のコストが存在する。つまり、実行セット６６８の構成要素を最小限の計算のレイテンシーのためにタスクグループにグループ分けすることは、構成要素をグループ分けするための最も効率的な方法ではない（効率が、所与のタスクを実施するために使用される計算リソースの量の測定値として定義される場合）。
【００７２】
３．２  効率の最大化のためのコンパイル
代替的に、最適性の基準が実行セット６６８の構成要素の最適なグループ分けが最大の（上で定義された）効率を達成することであると規定する場合、実行セット６６８の構成要素は、単一のタスクグループにグループ分けされる。そのようにすることは、たとえ同時性が可能であるときでも実行セット６６８の構成要素の動作が単一のタスク内で逐次的に実施されることを必要とする。
【００７３】
例えば、実行セット６６８に関して、第１のタスクグループが、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２を含み得る。図８を参照すると、データ処理グラフ６００の実行セット６６８が実行されるとき、単一のタスク８７６が、第１のタスクグループのためにスポーンされ、第２の構成要素Ｃ  ７５８、第３の構成要素Ｄ  ７６０、及び第４の構成要素Ｅ  ７６２の動作は、単一のタスク内で逐次的に（つまり、一度に１つずつ）実施される。一部の例において、第２の構成要素Ｃ  ７５８、第３の構成要素Ｄ  ７６０、及び第４の構成要素Ｅ  ７６２の動作は、データ処理グラフ６００において規定された動作の順序が維持されることを保証するためにトポロジカルソートされた順序で実施される。
【００７４】
実行セット６６８の動作を単一のタスク内で逐次的に実行する１つの利点は、動作を実施する効率が最大化されることである。特に、データ処理グラフを実行するために必要とされる計算リソースの量が最小化され、それによって、複数のタスクをスポーンすることに関連するオーバーヘッドを避ける。もちろん、複数のタスクの逐次的な実行は、潜在的に、複数のタスクの同時実行よりも完了するために長い時間がかかるという欠点を有する。
【００７５】
３．３  レイテンシー対効率のトレードオフのためのコンパイル
一部の例において、最適性の基準は、実行セット６６８の構成要素のタスクグループへの最適なグループ分けがレイテンシーの最小化と効率との間のトレードオフを実現することであると規定する。そのようなトレードオフを実現するためのいくつかの例示的な手法が、以下の節において説明される。
【００７６】
３．３．１  潜在的動作の特定
レイテンシーの最小化と効率との間のトレードオフを実現する１つの方法は、まず、データ処理グラフの構成要素によって実施される特定の動作がタスクをスポーンするために必要とされる時間に対して相対的に長い時間がかかる可能性があると認識することを含む。これらの動作は、「潜在的動作」と呼ばれることがある。特定のその他の動作は、タスクをスポーンするために必要とされる時間に対して相対的に短い量の時間がかかる可能性がある。
【００７７】
実行セット６６８の構成要素のうちの２又は３以上がおそらく同時に実行される可能性がある状況で、コンパイラ／インタープリタ１２０は、実行セット６６８の構成要素に関する動作が完了するためにどれだけ時間がかかるかの推定値に基づいて実行セット６６８の動作の同時実行を許容すべきか否かを決定する。いずれかの潜在的動作が実行セット内で特定される場合、実行セット６６８の構成要素は、同時に実行されることを許容される。潜在的動作が実行セット６６８内で特定されない場合、実行セット６６８の構成要素の同時実行は、許容されない。
【００７８】
一部の例においては、実行セット６６８の構成要素に関する動作が完了するためにどれだけ長くかかるかを決定するために、コンパイラ／インタープリタ１２０は、構成要素に関連付けられるトランザクションのコード（transactional code）（例えば、上述のようなＤＭＬコード）を調べて、データベースアクセス、ルックアップファイルの操作、リモートプロシージャコール、サービスの呼び出しなどの潜在的動作を特定する。その他の例において、コンパイラ／インタープリタ１２０は、ランタイムの計測を使用して、タスクが完了するためにかかる時間をデータ処理グラフ６００のいくつかの実行にわたって測定する。データ処理グラフ６００は、タスクが完了するためにかかる測定された時間に基づいてオンザフライで又はオフラインで再コンパイルされ得る。
【００７９】
図９Ａを参照すると、１つの非常に単純な例示的な例において、データ処理グラフ９００が、第１の構成要素Ｂ  ６５６がデータソース６５０から値ｘを読み、ｘを第２の構成要素Ｃ  ６５８に送るように構成される。第２の構成要素Ｃ  ６５８は、ｘに１を足すことによって値ｙを計算し、値ｙを第３の構成要素Ｄ  ６６０及び第４の構成要素Ｅ  ６６２に送る。第３の構成要素Ｄ  ６６０は、ｙに２を掛けることによって値ｚを計算し、ｚを第５の構成要素Ｆ  ６６４に送る。第４の構成要素Ｅ  ６６２は、ｙを２で割ることによって値ｑを計算し、ｑを第７の構成要素Ｇ  ６６６に送る。第５の構成要素Ｆ  ６６５は、値ｚを第１のデータシンクＨ  ６５２に書き込む。第６の構成要素Ｇ  ６６６は、値ｑを第２のデータシンクＩ  ６５４に書き込む。
【００８０】
コンパイラ／インタープリタ１２０が図９Ａのデータ処理グラフ９００の実行セット６６８を分析するとき、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２のトランザクションのコードが、構成要素のいずれかが潜在的動作を含むかどうかを決定するために調べられる。図９Ａの例において、構成要素によって実施される動作のすべてが非常に短い量の時間内に完了する単純な算術演算であるので、潜在的動作は特定されない。
【００８１】
潜在的動作が実行セット６６８内で特定されない場合、実行セット６６８の構成要素は、同時に実行されることを許容されない。その目的で、制御グラフ生成手順中に、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２は、単一のタスクグループにグループ分けされる。データ処理グラフが実行されるとき、単一のタスクが、単一のタスクグループのためにスポーンされ、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２に関する動作が、（図８と同様に）単一のタスク内で実行される。第１の実行セット６６８の各構成要素が単一のタスク内で実行されることによって、第３の構成要素Ｄ  ６６０及び第４の構成要素Ｅ  ６６２は、第２の構成要素Ｃ  ６５８の動作後に逐次的に実行されることを強制される。
【００８２】
図９Ｂを参照すると、単一のタスク（すなわち、タスク１）がスポーンされるとき（つまり、タスク１の開始時に）、第１のオーバーヘッド９７０が、背負わされ、第２の構成要素Ｃ  ６５８が、実行を開始する。第２の構成要素Ｃ  ６５８の実行が完了すると、第３の構成要素が、実行を開始する。第３の構成要素Ｄ  ６６０の実行が完了すると、第４の構成要素Ｅ  ６６２が実行され、その後、単一のタスクが完了する。
【００８３】
３つの構成要素を単一のタスク（すなわち、タスク１）内で逐次的に実行することによって、３つの構成要素の実行の総時間は、構成要素の少なくとも一部の同時実行が許容されるとした場合よりも長い。しかし、単一のタスク（又は削減された数のタスク）内で実行することは、単一のタスクを開始するための第１のオーバーヘッド９７０だけが背負わされるので、削減された量のタスクの開始に関連するオーバーヘッドをもたらす。上述のように、オーバーヘッドと実行時間全体との間のこのトレードオフは、潜在的動作が実行セット内にないときに望ましいことが多い。比較として、図９Ｃは、第２の構成要素Ｃ  ６５８のためのタスク（タスク１）の後に、第３の構成要素Ｄ  ６６０及び第４の構成要素Ｅ  ６６２との間の許容される同時性を使用して別個のタスク（すなわち、タスク２及び３）においてそれらの構成要素を同時に実行する３構成要素の動作の結果として生じる、オーバーヘッドを含む、実行の総時間９８０を示す。この場合、同時性が削減された実行に関する実行の総時間９８２がより短いことは明らかである。
【００８４】
図１０Ａを参照すると、別の非常に単純な例示的な例において、データ処理グラフ１０００が、第１の構成要素Ｂ  ６５６がデータソース６５０から値ｘを読み、ｘを第２の構成要素Ｃ  ６５８に送るように構成される。第２の構成要素Ｃ  ６５８は、ｘに１を足すことによって値ｙを計算し、値ｙを第３の構成要素Ｄ  ６６０及び第４の構成要素Ｅ  ６６２に送る。第３の構成要素Ｄ  ６６０は、ｙに２を掛けることによって値ｚを計算し、ｚを第５の構成要素Ｆ  ６６４に送る。第４の構成要素Ｅ  ６６２は、データストア６７１（例えば、ルックアップファイル又はデータベース）から値ｍを読み、ｍとｙとを合計することによって値ｑを計算する。第４の構成要素Ｅ  ６６２は、値ｑを第７の構成要素Ｇ  ６６６に送る。第５の構成要素Ｆ  ６６５は、値ｚを第１のデータシンクＨ  ６５２に書き込む。第６の構成要素Ｇ  ６６６は、値ｑを第２のデータシンクＩ  ６５４に書き込む。
【００８５】
コンパイラ／インタープリタ１２０が図１０Ａのデータ処理グラフ１０００の実行セット６６８を分析するとき、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２のトランザクションのコードが、構成要素のいずれかが潜在的動作を含むかどうかを決定するために調べられる。図１０Ａの例においては、第４の構成要素Ｅ  ６６２がデータストア６７１から値を読むので、その第４の構成要素Ｅ  ６６２が、潜在的動作を含むものとして特定される。
【００８６】
潜在的動作が実行セット６６８内で特定される場合、データ処理グラフ１０００の構成要素は、同時に実行されることを許容される。その目的で、制御グラフ生成手順中に、第２の構成要素Ｃ  ６５８、第３の構成要素Ｄ  ６６０、及び第４の構成要素Ｅ  ６６２は、それぞれ異なるタスクグループ（例えば、第１のタスクグループ、第２のタスクグループ、及び第３のタスクグループ）にグループ分けされる。データ処理グラフ６００が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる（例えば、（図７と同様に）第２の構成要素Ｃ  ６５８の動作を実行するための第１のタスクグループのための第１のタスク、第３の構成要素Ｄ  ６６０の動作を実行するための第２のタスクグループのための第２のタスク、及び第４の構成要素Ｅ  ６６２の動作を実行するための第３のタスクグループのための第３のタスク）。第１の実行セット６６８の各構成要素が別個のタスク内で実行されることによって、第３の構成要素Ｄ  ６６０は、第４の構成要素Ｅ  ６６２と同時に実行され得る。
【００８７】
図１０Ｂを参照すると、第１のタスク（すなわち、タスク１）がスポーンされるとき（つまり、タスク１の開始時に）、第１のオーバーヘッド１０７０が、背負わされ、第２の構成要素Ｃ  ６５８が、実行を開始する。第２の構成要素Ｃ  ６５８の実行が完了すると、第１のタスクは完了し、第２のタスク及び第３のタスクが（タスク１の完了時に）同時にスポーンされ、第２のオーバーヘッド１０７２及び第３のオーバーヘッド１０７４をそれぞれ背負い込む。第３の構成要素Ｄ  ６６０は、第３のタスク内での第４の構成要素Ｅ  ６６２の実行と同時に第２のタスク内で実行される。第４の構成要素Ｅ  ６６２が潜在的動作であり、第３の構成要素Ｄ  ６６０が潜在的動作ではないので、第３の構成要素Ｄ  ６６０は、第４の構成要素Ｅ  ６６２の前に実行を完了し、第２のタスクの完了を引き起こす（つまり、タスク２の完了時に）。第４の構成要素Ｅ  ６６２は、完了するまで第３のタスク内で実行され続け、第３のタスクの完了を引き起こす（つまり、タスク３の完了時に）。図１０Ｂのタイムラインの時間の尺度は図９Ｂのタイムラインの時間の尺度とは異なり、同じ絶対的な量のオーバーヘッドの時間がタスクの時間に対して相対的に異なる継続時間を有することを示すことに留意されたい。
【００８８】
比較として、図１０Ｃは、この場合、第３の構成要素Ｄ  ６６０及び第４の構成要素Ｅ  ６６２を別個のタスク（すなわち、タスク２及びタスク３）内で同時に実行することによって、３つの構成要素の実行の総時間１０８０が、構成要素の同時性が削減された（この場合は逐次的な）実行が使用されるとした場合に結果として生じることになる実行の総時間１０８２よりも少ないことを示す。これは、たとえ３つの別個のタスクをインスタンス化することによって背負わされるオーバーヘッドの量が、同時性が削減された実行のために単一のタスクが使用されるとした場合のその量よりも大きいとしても、これは当てはまる。上述のように、実行時間全体とオーバーヘッドとの間のこのトレードオフは、潜在的動作が実行セット内にあるときに望ましいことが多い。
【００８９】
同時実行を可能にするタスクグループ（及び最終的には個々のタスク）への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けされるのではなく、第２の構成要素Ｃ  ６５８及び第３の構成要素Ｄ  ６６０は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。もちろん、第４の構成要素Ｅ  ６６２の動作が実行される単一のタスクは、第２の構成要素Ｃ  ６５８と第４の構成要素Ｅ  ６６２との間のシリアル−シリアル接続によって課されるシリアルの制約が満たされる限り、第２の構成要素Ｃ  ６５８及び第３の構成要素Ｄ  ６６０の動作が実行されるタスクとやはり同時に実行され得る。
【００９０】
３．３．２  入れ子にされた実行セットの特定
レイテンシーの最小化と効率との間のトレードオフを実現する別の方法は、実行セットに含まれるいずれかの「入れ子にされた」実行セットがタスクをスポーンするために必要とされる時間に対して相対的に長い時間がかかる可能性があると認識することを含む。例えば、入れ子にされた実行セットは、上流のコレクションポートからの大量のデータを処理し、データ中をループするか、又はデータを同時に処理するために多数のタスクをスポーンするかのどちらかを含む。
【００９１】
したがって、第１の実行セットの構成要素のうちの２又は３以上がおそらく同時に実行され得る一部の例において、コンパイラ／インタープリタ１２０は、第１の実行セットに含まれるその他の入れ子にされた実行セットの存在に基づいて第１の実行セットの動作の同時実行を許容すべきか否かを決定する。いずれかの入れ子にされた実行セットが特定される場合、第１の実行セットの構成要素は、同時に実行されることを許容される。入れ子にされた実行セットが第１の実行セット内で特定されない場合、第１の実行セットの構成要素の同時実行は、許容されない。
【００９２】
図１１を参照すると、例示的なデータ処理グラフ１１００が、データソースＡ  １１５０から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第１のデータシンクＨ  １１５２及び第２のデータシンクＩ  １１５４に記憶する。データ処理グラフ１１００の構成要素は、第１の構成要素Ｂ  １１５６、第２の構成要素Ｃ  １１５８、第３の構成要素Ｄ  １１６０、第４の構成要素Ｅ  １１６２、第５の構成要素Ｊ  １１７２、第６の構成要素Ｆ  １１６４、及び第７の構成要素Ｇ  １１６６を含む。
【００９３】
第１のフロー１１５１は、データソース１１５０の出力コレクションポートを第１の構成要素Ｂ  １１５６の入力コレクションポートに接続する。第２のフロー１１５３は、第１の構成要素Ｂ  １１５６の出力コレクションポートを第２の構成要素Ｃ  １１５８の入力スカラポートに接続する。第２のフロー１１５３が出力コレクションポートを入力スカラポートに接続するので、第１の実行セットの入口点１１５５は、第１の構成要素Ｂ  １１５６と第２の構成要素Ｃ  １１５８との間に存在することに留意されたい。
【００９４】
第３のフロー１１５７は、第２の構成要素Ｃ  １１５８の出力コレクションポートを第３の構成要素Ｄ  １１６０の入力コレクションポート及び第４の構成要素Ｅ  １１６２の入力スカラポートに接続する。第３のフローが第２の構成要素Ｃ  １１５８の出力コレクションポートを第４の構成要素Ｅ  １１６２の入力スカラポートに接続するので、第２の実行セットの入口点１１７５は、第２の構成要素Ｃ  １１５８と第４の構成要素Ｅ  １１６２との間に存在することに留意されたい。
【００９５】
第４のフロー１１５９は、第３の構成要素Ｄ  １１６０の出力スカラポートを第６の構成要素Ｆ  １１６４の入力コレクションポートに接続する。第４のフローが出力スカラポートを入力コレクションポートに接続するので、第１の実行セットの出口点１１６３は第３の構成要素Ｄ  １１６０と第６の構成要素Ｆ  １１６４との間に存在することに留意されたい。
【００９６】
第５のフロー１１７７は、第４の構成要素Ｅ  １１６２の出力スカラポートを第５の構成要素Ｊ  １１７２の入力コレクションポートに接続する。第５のフロー１１７７が出力スカラポートを入力コレクションポートに接続するので、第２の実行セットの出口点１１７９は、第４の構成要素Ｅ  １１６２と第５の構成要素Ｊ  １１７２との間に存在することに留意されたい。
【００９７】
第６のフロー１１６１は、第５の構成要素Ｊ  １１７２の出力スカラポートを第７の構成要素Ｇ  １１６６の入力コレクションポートに接続する。第６のフロー１１６１が出力スカラポートを入力コレクションポートに接続するので、第３の実行セットの出口点１１６５は、第５の構成要素Ｊ  １１７２と第７の構成要素Ｇ  １１６６との間に存在することに留意されたい。
【００９８】
第７のフロー１１６７は、第６の構成要素Ｆ  １１６４の出力コレクションポートを第１のデータシンクＨ  １１５２の入力コレクションポートに接続する。第８のフロー１１６９は、第７の構成要素Ｇ  １１６６の出力コレクションポートを第２のデータシンクＩ  １１５４の入力コレクションポートに接続する。
【００９９】
コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフ１１００を準備するとき、まず、実行セット発見前処理手順を実施して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。図１１の例示的なデータ処理グラフ１１００に関して、実行セット発見前処理手順は、第１の実行セット１１６８と、第１の実行セット１１６８内に入れ子にされた第２の実行セット１１８１とを特定する。第１の実行セット１１６８は、第１の実行セットの入口点１１５５、第１の実行セットの出口点１１６３、及び第３の実行セットの出口点１１６５によって範囲を区切られている。第２の実行セット１１８１は、第２の実行セットの入口点１１７５及び第２の実行セットの出口点１１７９によって範囲を区切られている。図から明らかなように、第１の実行セット１１６８は、第２の構成要素Ｃ  １１５８と、第３の構成要素Ｄ  １１６０と、第５の構成要素Ｊ  １１７２と、第４の構成要素Ｅ  １１６２を含む第２の実行セット１１８１とを含む。
【０１００】
図１１において、コンパイラ／インタープリタ１２０は、第２の実行セット１１８１が第１の実行セット１１８６内に入れ子にされていると決定する。入れ子にされた実行セットが第１の実行セット１１６８内で特定されるので、第１の実行セット１１６８の構成要素に関して同時実行が許容される。その目的で、制御グラフ生成手順中に、第２の構成要素Ｃ  １１５８、第３の構成要素Ｄ  １１６０、第４の構成要素Ｅ  １１６２、及び第５の構成要素Ｊ  １１７２は、それぞれ異なるタスクグループ（例えば、第１のタスクグループ、第２のタスクグループ、第３のタスクグループ、及び第４のタスクグループ）にグループ分けされる。データ処理グラフ１１００が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる（例えば、第２の構成要素Ｃ  １１５８の動作を実行するための第１のタスクグループのための第１のタスク、第３の構成要素Ｄ  １１６０の動作を実行するための第２のタスクグループのための第２のタスク、第４の構成要素Ｅ  １１６２の動作を実行するための第３のタスクグループのための第３のタスク、及び第５の構成要素Ｊ  １１７２の動作を実行するための第４のタスクグループのための第４のタスク）。第１の実行セット１１６８の各構成要素が別個のタスク内で実行されることによって、第３の構成要素Ｄ  １１６０は、第４の構成要素Ｅ  １１６２及び第５の構成要素Ｊ  １１７２のうちの一方又は両方と同時に実行され得る。
【０１０１】
同時実行を可能にするタスクグループ（及び最終的には個々のタスク）への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けされるのではなく、第２の構成要素Ｃ  １１５８及び第３の構成要素Ｄ  １１６０は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。もちろん、第４の構成要素Ｅ  １１６２及び第５の構成要素Ｊ  １１７２の動作が実行される単一のタスクは、第２の構成要素Ｃ  １１５８及び第３の構成要素Ｄ  １１６０の動作が実行されるタスクとやはり同時に実行され得る。
【０１０２】
３．３．３  内部の実行セットの同時性の特定
レイテンシーの最小化と効率との間のトレードオフを実現する別の方法は、いずれかの可能な同時性が実行セット内に存在するかどうかを決定することを含む。例えば、２つの構成要素が、実行セット１２６８内に存在する可能性があり、２つの構成要素のうちの第１の構成要素は、２つの構成要素のうちの第２の構成要素の入力コレクションポートにフローによって接続された出力コレクションポートを有する（つまり、コレクション−コレクションポート接続）。この場合、２つの構成要素は、たとえそれらの構成要素が同じ実行セット内にあるとしても、同時に実行されることを許容される可能性がある。
【０１０３】
第１の実行セットの構成要素のうちの２又は３以上がおそらく同時に実行され得る一部の例において、コンパイラ／インタープリタ１２０は、データ処理グラフのトポロジー及び特定のランタイムの特徴に基づいて第１の実行セットの動作の同時実行を許容すべきか否かを決定する。いずれかの可能な同時性が第１の実行セット内で特定される場合、第１の実行セットの構成要素は、同時に実行されることを許容され得る。可能な同時性が第１の実行セット内で特定されない場合、第１の実行セットの構成要素の同時実行は、許容されない。可能な同時性が存在する場合、ランタイムで実際に使用される同時性の異なるレベルが存在する可能性がある。例えば、可能な同時性の最も高いレベルは、構成要素の９０％が同時に実行されることを許容する可能性があり、同時に実行される構成要素の１０％という同時性の下げられたレベルが、特定の要因に基づいてトレードオフをするためにランタイムで実際に使用される（生じさせられたコードによって施行される）可能性がある。
【０１０４】
図１２を参照すると、例示的なデータ処理グラフ１２００が、データソースＡ  １２５０から入力データを受け取り、いくつかの構成要素を使用して入力データを処理し、データを処理した結果を第１のデータシンクＨ  １２５２及び第２のデータシンクＩ  １２５４に記憶する。データ処理グラフ１２００の構成要素は、第１の構成要素Ｂ  １２５６、第２の構成要素Ｃ  １２５８、第３の構成要素Ｄ  １２６０、第４の構成要素Ｅ  １２６２、第５の構成要素Ｊ  １２７２、及び第６の構成要素Ｆ  １２６４、及び第７の構成要素Ｇ  １２６６を含む。
【０１０５】
第１のフロー１２５１は、データソース１２５０の出力コレクションポートを第１の構成要素Ｂ  １２５６の入力コレクションポートに接続する。第２のフロー１２５３は、第１の構成要素Ｂ  １２５６の出力コレクションポートを第２の構成要素Ｃ  １２５８の入力スカラポートに接続する。第２のフロー１２５３が出力コレクションポートを入力スカラポートに接続するので、第１の実行セットの入口点１２５５は、第１の構成要素Ｂ  １２５６と第２の構成要素Ｃ  １２５８との間に存在することに留意されたい。
【０１０６】
第３のフロー１２５７は、第２の構成要素Ｃ  １２５８の出力スカラポートを第３の構成要素Ｄ  １２６０の入力スカラポート及び第４の構成要素Ｅ  １２６２の入力スカラポートに接続する。
【０１０７】
第４のフロー１２５９は、第３の構成要素Ｄ  １２６０の出力スカラポートを第６の構成要素Ｆ  １２６４の入力コレクションポートに接続する。第４のフローが出力スカラポートを入力コレクションポートに接続するので、第１の実行セットの出口点１２６３は第３の構成要素Ｄ  １２６０と第６の構成要素Ｆ  １２６４との間に存在することに留意されたい。
【０１０８】
第５のフロー１２７７は、第４の構成要素Ｅ  １２６２の出力コレクションポートを第５の構成要素Ｊ  １２７２の入力コレクションポートに接続する。
【０１０９】
第６のフロー１２６１は、第５の構成要素Ｊ  １２７２の出力スカラポートを第７の構成要素Ｇ  １２６６の入力コレクションポートに接続する。第６のフロー１２６１が出力スカラポートを入力コレクションポートに接続するので、第３の実行セットの出口点１２６５は、第５の構成要素Ｊ  １２７２と第７の構成要素Ｇ  １２６６との間に存在することに留意されたい。
【０１１０】
第７のフロー１２６７は、第６の構成要素Ｆ  １２６４の出力コレクションポートを第１のデータシンクＨ  １２５２の入力コレクションポートに接続する。第８のフロー１２６９は、第７の構成要素Ｇ  １２６６の出力コレクションポートを第２のデータシンクＩ  １２５４の入力コレクションポートに接続する。
【０１１１】
コンパイラ／インタープリタ１２０は、実行するためにデータ処理グラフ１２００を準備するとき、まず、実行セット発見前処理手順を実決して構成要素の潜在的に入れ子にされた実行セットの階層を特定する。図１２の例示的なデータ処理グラフ１２００に関して、実行セット発見前処理手順は、単一の実行セット１２６８を特定する。実行セット１２６８は、第１の実行セットの入口点１２５５、第１の実行セットの出口点１２６３、及び第３の実行セットの出口点１２６５によって範囲を区切られている。図から明らかなように、実行セット１２６８は、第２の構成要素Ｃ  １２５８、第３の構成要素Ｄ  １２６０、第５の構成要素Ｊ  １２７２、及び第４の構成要素Ｅ  １２６２を含む。
【０１１２】
図１２において、コンパイラ／インタープリタ１２０は、第４の構成要素Ｅ  １２６２と第５の構成要素Ｊ  １２７２との間のコレクションポート−コレクションポート接続及び実行セット１２６８内の構成要素のトポロジー全体を認識することによって実行セット１２６８内の可能な同時性のレベルをやはり特定する。可能な同時性が実行セット１２６８内で特定されるので、実行セット１２６８内の構成要素の少なくとも一部に関して同時実行が許容される。その目的で、制御グラフ生成手順中に、第２の構成要素Ｃ  １２５８、第３の構成要素Ｄ  １２６０、第４の構成要素Ｅ  １２６２、及び第５の構成要素Ｊ  １２７２は、それぞれ異なるタスクグループ（例えば、第１のタスクグループ、第２のタスクグループ、第３のタスクグループ、及び第４のタスクグループ）にグループ分けされる。各タスクグループは、１又は２以上の構成要素の動作を含み、タスクグループ全体が、ランタイムでスポーンされる単一のタスク（例えば、プロセス又はスレッド）によって実行される。各構成要素をその構成要素独自のタスクグループに割り当てることは、ランタイムで同時性の高いレベルを可能にする。ランタイムで同時性の下げられたレベルを施行するために、対応するタスクが構成要素の動作を逐次的に（つまり、同時性なしに）実行するようにして、複数の構成要素が同じタスクグループに割り当てられる可能性がある。
【０１１３】
データ処理グラフ１２００が実行されるとき、タスクグループの各々のために異なるタスクがスポーンされる（例えば、第２の構成要素Ｃ  １２５８の動作を実行するための第１のタスクグループのための第１のタスク、第３の構成要素Ｄ  １２６０の動作を実行するための第２のタスクグループのための第２のタスク、第４の構成要素Ｅ  １２６２の動作を実行するための第３のタスクグループのための第３のタスク、及び第５の構成要素Ｊ  １２７２の動作を実行するための第４のタスクグループのための第４のタスク）。実行セット１２６８の各構成要素が別個のタスク内で実行されることによって、第３の構成要素Ｄ  １２６０は、第４の構成要素Ｅ  １２６２及び第５の構成要素Ｊ  １２７２のうちの一方又は両方と同時に実行され得る。しかし、第２の構成要素Ｃ  １２５８と第３の構成要素Ｄ  １２６０との間、及び第２の構成要素Ｃ  １２５８と第４の構成要素Ｅ  １２６２との間の接続されたシリアルポートなどの構成要素のポートに応じて、異なるタスクの間で施行されるいくつかの制約がまだ存在する可能性がある。
【０１１４】
同時実行の異なるレベルを可能にするタスクグループ（及び最終的には個々のタスク）への構成要素のその他のグループ分けも使用され得ることが、留意される。例えば、別個のタスクグループにグループ分けするのではなく、第２の構成要素Ｃ  １２５８及び第３の構成要素Ｄ  １２６０は、同じタスクグループにグループ分けされ、最終的に単一のタスク内で実行される可能性がある。第４の構成要素Ｅ  １２６２及び第５の構成要素Ｊ  １２７２の動作が実行される単一のタスクグループ及び最終的なタスクも、割り当てられる可能性がある。そして、その単一のタスクは、第４の構成要素Ｅ  １２６２が実行を開始する前に第２の構成要素Ｃ  １２５８が実行を終了済みである限り、第２の構成要素Ｃ  １２５８及び第３の構成要素Ｄ  １２６０の動作が実行されるタスクと同時に実行される可能性がある。したがって、コンパイラ／インタープリタ１２０によって生じさせられたコード内に表される数の及び構成のタスクグループが、実行セットの構成要素に対応する動作のグループ全体の中で同時性の異なるレベルを施行することができる。
【０１１５】
４  代替形態
一部の例においては、実行セットの構成要素が出力スカラポートから入力スカラポートへの接続（つまり、スカラポート−スカラポート接続）によってのみ互いに接続される場合、コンパイラ／インタープリタ１２０は、実行セットの構成要素の動作を単一のタスクグループ内に自動的に割り当て、それらの動作は、単一のタスクによって逐次的に実行されるように制約される。
【０１１６】
概して、同時性のレベルを変更する、実行セット内の特定の構成要素の間の同時性を許容するか又は許容しないかの判断は、実行セットにのみ当てはまり、構成要素、又は実行セット内に入れ子にされた実行セットには（つまり、実行セットの階層のより低いレベルでは）必ずしも当てはまるとは限らない。
【０１１７】
一部の例においては、同時性が所与の実行セット内で許容されないとき、実行セットの構成要素に関するトポロジカルソートされた順序が、決定され、所与の実行セットの構成要素に関する動作は、単一のタスク内で、トポロジカルソートされた順序で実行される。
【０１１８】
一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間に対して相対的に完了するために長い時間がかかる動作として定義される。一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間よりも少なくとも３倍長くかかる動作として定義される。一部の例において、潜在的動作は、タスクをスポーンするために必要とされる時間よりも少なくとも１０倍長くかかる動作として定義される。
【０１１９】
一部の例において、ユーザは、潜在的動作を定義する特徴を規定する。一部の例において、ユーザは、どの構成要素が潜在的動作を含むかを明示的に規定する。一部の例において、ユーザは、実行セットのためのコンパイルモード（すなわち、同時又は非同時）を明示的に規定することができる。
【０１２０】
一部の例において、上述の手法は、同時実行の可能性が実行セット内にある場合にのみ実施される。例えば、コンパイラ／インタープリタ１２０は、上述の手法を実施する前に同時実行が可能であるかどうかを決定するために、実行セットに含まれるデータ処理グラフの部分を進む（walk）可能性がある。一部の例において、コンパイラ／インタープリタ１２０は、実行セットに含まれるデータフローグラフの部分に関する最大の同時性を決定する。
【０１２１】
上述の例の各々は、実行セットの構成要素をそれらの構成要素が同時に又は逐次的にのどちらかで実行されるようにコンパイルさせ得る１又は２以上の構成要素の１つのランタイムの特徴を強調する。しかし、実行セットは、任意の数のこれらの特徴（例えば、潜在的動作、入れ子にされた実行セット、暗黙的実行セットなど）の組合せを有する構成要素を含む可能性がある。一部の例において、実行セットの１又は２以上の構成要素が、構成要素の動作がタスクをスポーンするために必要とされる時間に対して相対的に完了するために長い時間がかかることを示す特徴を含む場合、実行セットは、同時実行が許容されるようにコンパイルされる。
【０１２２】
上述のデータ処理グラフのコンパイルの手法は、例えば、好適なソフトウェア命令を実行するプログラミング可能なコンピューティングシステムを用いて実装される可能性があり、又はフィールドプログラマブルゲートアレイ（ＦＰＧＡ，field-programmable gate array）などの好適なハードウェアで、若しくは何らかの混成の形態で実装される可能性がある。例えば、プログラミングされる手法において、ソフトウェアは、それぞれが少なくとも１つのプロセッサ、（揮発性及び／又は不揮発性メモリ及び／又はストレージ要素を含む）少なくとも１つのデータストレージシステム、（少なくとも１つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも１つの出力デバイス又はポートを用いて出力を与えるための）少なくとも１つのユーザインターフェースを含む（分散、クライアント／サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある）１又は２以上のプログラミングされた又はプログラミング可能なコンピューティングシステム上で実行される１又は２以上のコンピュータプログラムのプロシージャを含み得る。ソフトウェアは、例えば、データ処理グラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの１又は２以上のモジュールを含む可能性がある。プログラムのモジュール（例えば、データ処理グラフの要素）は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
【０１２３】
ソフトウェアは、ある期間（例えば、ダイナミックＲＡＭなどのダイナミックメモリデバイスのリフレッシュ周期の間の時間）媒体の物理特性（例えば、表面ピット及びランド、磁区、又は電荷）を使用して、揮発性若しくは不揮発性ストレージ媒体又は任意のその他の非一時的媒体に具現化されるなど、非一時的形態で記憶され得る。命令をロードするのに備えて、ソフトウェアは、ＣＤ−ＲＯＭ又は（例えば、多目的若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な）その他のコンピュータ可読媒体などの有形の非一時的媒体上に提供される可能性があり、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される（例えば、伝搬信号に符号化される）可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）若しくは専用の特定用途向け集積回路（ＡＳＩＣ，application-specific integrated circuit）などの専用のハードウェアを使用して実施される可能性がある。処理は、ソフトウェアによって規定された計算の異なる部分が異なるコンピューティング要素によって実施される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実施するためにストレージデバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、多目的又は専用のプログラミング可能なコンピュータによってアクセスされ得るストレージデバイスのコンピュータ可読ストレージ媒体（例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体）に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの１又は２以上を実施するために特定の予め定義された方法でコンピュータを動作させる。
【０１２４】
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の請求項の範囲によって定義される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、添付の請求項の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実施される可能性がある。
【図１】
2020013608.tif 000003
【図２】
2020013608.tif 000004
【図３】
2020013608.tif 000005
【図４】
2020013608.tif 000006
【図５Ａ】
2020013608.tif 000007
【図５Ｂ】
2020013608.tif 000008
【図５Ｃ】
2020013608.tif 000009
【図５Ｄ】
2020013608.tif 000010
【図６】
2020013608.tif 000011
【図７】
2020013608.tif 000012
【図８】
2020013608.tif 000013
【図９Ａ】
2020013608.tif 000014
【図９Ｂ】
2020013608.tif 000015
【図９Ｃ】
2020013608.tif 000016
【図１０Ａ】
2020013608.tif 000017
【図１０Ｂ】
2020013608.tif 000018
【図１０Ｃ】
2020013608.tif 000019
【図１１】
2020013608.tif 000020
【図１２】
2020013608.tif 000021
【手続補正書】
【提出日】令和1年10月29日(2019.10.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための方法であって、
前記グラフに基づくプログラムの仕様を受け取るステップであって、前記グラフに基づくプログラムの仕様が、
それぞれが少なくとも１つの動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、複数の有向リンクを含むグラフを含む、前記受け取るステップと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するステップであって、
第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づく前記動作の前記第１のグループにおける同時性の可能なレベルを特定すること；
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析することであって、前記分析される動作の各々に関して、前記分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実施するか又は潜在的に前記第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作であるかどうかを決定することを含む、前記分析すること；及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記グラフのトポロジーによって同時に実行されることを妨げられない前記第１のグループ内の少なくとも２つの動作が、前記第１の閾値よりも長い時間のそれぞれの期間、計算を実行するか又は応答を待つように構成された潜在的動作であると決定されていない限り、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせること；を含む、前記処理するステップと
を含む、前記方法。
【請求項２】
分析される動作に関連するランタイムの特徴を決定するために第１のグループ内の動作の少なくとも一部を分析することが、前記分析される動作の各々に関して、前記分析される動作が、前記第１のグループの実行の単一の開始に応答して複数回実行される１又は２以上の動作の繰り返す組のメンバーであるかどうかを決定することを含む請求項１に記載の方法。
【請求項３】
第１の閾値が、１又は２以上の動作を実行するためのタスクをスポーンするために必要とされる時間の第２の期間よりも長い時間の第１の期間として定義される請求項１又は２に記載の方法。
【請求項４】
条件、すなわち、
（１）グラフのトポロジーによって同時に実行されることを妨げられない第１のグループ内の少なくとも２つの動作が両方とも潜在的動作であると決定されたこと、又は
（２）前記第１のグループ内の少なくとも１つの動作が１若しくは２以上の動作の繰り返す組のメンバーであると決定されたこと
のうちのどちらも満たされない場合に、処理されたコードが、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する請求項１〜３のいずれかに記載の方法。
【請求項５】
次のさらなる条件、すなわち、（３）第１のグループ内の２又は３以上の動作の構成が繰り返す組の存在を示唆することも満たされない場合に、処理されたコードが、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する請求項４に記載の方法。
【請求項６】
同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを第１のグループ内で施行することが、前記第１のグループ内で動作のすべての逐次的な実行を施行することを含む請求項１〜５のいずれかに記載の方法。
【請求項７】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間のデータフローを示す請求項１〜６のいずれかに記載の方法。
【請求項８】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間の制御フローを示す請求項７に記載の方法。
【請求項９】
有向リンクのうちの１又は２以上が、上流の構成要素と下流の構成要素との間の制御フローを示す請求項１〜８のいずれかに記載の方法。
【請求項１０】
動作の１又は２以上のグループを表す処理されたコードを生じさせるためにグラフに基づくプログラムの仕様を処理するステップが、
動作の第１のグループの中の少なくとも部分的な順序付けを規定する順序付け情報を生じさせることであって、前記順序付け情報が、前記グラフのトポロジーに少なくとも部分的に基づく、前記生じさせることをさらに含み、
前記第１のグループにおける同時性の可能なレベルを特定することが、前記第１のグループ内の複数の動作が前記部分的な順序付けによって同時に実行されることを妨げられないように前記部分的な順序付けによって許容される同時性のレベルを特定することを含む請求項１〜９のいずれかに記載の方法。
【請求項１１】
順序付け情報を生じさせることが、動作の第１のグループをトポロジカルソートすることを含む請求項１０に記載の方法。
【請求項１２】
動作の同時実行をサポートするコンピューティングシステム上で実行するためにグラフに基づくプログラムの仕様をコンパイルするための、非一時的コンピュータ可読媒体に記憶されるソフトウェアであって、前記ソフトウェアが、前記コンピューティングシステムに、
前記グラフに基づくプログラムの仕様を受け取ることであって、前記グラフに基づくプログラムの仕様が、
それぞれが動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記受け取ることと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理することであって、
前記動作の第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて前記第１のグループにおける同時性の可能なレベルを特定すること、
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析することであって、前記分析される動作の各々に関して、その分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実行するか又は潜在的に第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作であるかどうかを決定することを含む、前記分析すること、及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記グラフのトポロジーによって同時に実行されることを妨げられない前記第１のグループ内の少なくとも２つの動作が、前記第１の閾値よりも長い時間のそれぞれの期間、計算を実行するか、又は応答を待つように構成された潜在的動作であると決定されていない限り、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせることを含む、前記処理することとを行わせる命令を含む、前記ソフトウェア。
【請求項１３】
グラフに基づくプログラムの仕様をコンパイルするためのコンピューティングシステムであって、
前記グラフに基づくプログラムの仕様を受け取るように構成された入力デバイス又はポートであって、前記グラフに基づくプログラムの仕様が、
それぞれが動作に対応する複数の構成要素、及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記入力デバイス又はポートと、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理するように構成された少なくとも１つのプロセッサであって、前記処理することが、
前記動作の第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて前記第１のグループにおける同時性の可能なレベルを特定すること；
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析することであって、前記分析される動作の各々に関して、前記分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実施するか又は潜在的に前記第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作であるかどうかを決定することを含む、前記分析すること；及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記グラフのトポロジーによって同時に実行されることを妨げられない前記第１のグループ内の少なくとも２つの動作が、前記第１の閾値よりも長い時間のそれぞれの期間、計算を実行するか、又は応答を待つように構成された潜在的動作であると決定されていない限り、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせること；を含む、前記プロセッサと
を含む、前記コンピューティングシステム。
【請求項１４】
グラフに基づくプログラムの仕様をコンパイルするためのコンピューティングシステムであって、
前記コンピューティングシステムが、
前記グラフに基づくプログラムの仕様を受け取るための手段であって、
前記グラフに基づくプログラムの仕様が、
それぞれが少なくとも１つの動作に対応する複数の構成要素;及び
複数の有向リンクであって、各有向リンクが、前記複数の構成要素のうちの上流の構成要素を前記複数の構成要素のうちの下流の構成要素に接続する、前記複数の有向リンクを含むグラフを含む、前記受け取るための手段と、
動作の１又は２以上のグループを表す処理されたコードを生じさせるために前記グラフに基づくプログラムの仕様を処理する手段であって、
前記処理することが、
第１のグループ内の複数の動作が前記グラフのトポロジーによって同時に実行されることを妨げられないように、前記グラフの前記トポロジーに少なくとも部分的に基づいて前記動作の前記第１のグループにおける同時性の可能なレベルを特定すること；
分析される動作に関連するランタイムの特徴を決定するために前記第１のグループ内の前記動作の少なくとも一部を分析することであって、前記分析される動作の各々に関して、前記分析される動作が、潜在的に第１の閾値よりも長い時間の期間にわたって計算を実施するか又は潜在的に前記第１の閾値よりも長い時間の期間の間応答を待つ潜在的動作であるかどうかを決定することを含む、前記分析すること；及び
前記第１のグループ内の前記動作を実行するための処理されたコードを生じさせることであって、前記処理されたコードが、前記グラフのトポロジーによって同時に実行されることを妨げられない前記第１のグループ内の少なくとも２つの動作が、前記第１の閾値よりも長い時間のそれぞれの期間、計算を実施するか又は応答を待つように構成された潜在的動作であると決定されていない限り、同時性の特定された可能なレベルよりも低い同時性の下げられたレベルを前記第１のグループ内で施行する、前記生じさせること；を含む、前記処理する手段と
を含む、前記コンピューティングシステム。