JP6469084B2 - コンピューティングシステムによって実行されるタスクの制御 - Google Patents

コンピューティングシステムによって実行されるタスクの制御 Download PDF

Info

Publication number
JP6469084B2
JP6469084B2 JP2016510752A JP2016510752A JP6469084B2 JP 6469084 B2 JP6469084 B2 JP 6469084B2 JP 2016510752 A JP2016510752 A JP 2016510752A JP 2016510752 A JP2016510752 A JP 2016510752A JP 6469084 B2 JP6469084 B2 JP 6469084B2
Authority
JP
Japan
Prior art keywords
task
node
section
executing
subroutine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016510752A
Other languages
English (en)
Other versions
JP2016520912A5 (ja
JP2016520912A (ja
Inventor
クレイグ ダブリュ. スタンフィル
クレイグ ダブリュ. スタンフィル
Original Assignee
アビニシオ テクノロジー エルエルシー
アビニシオ テクノロジー エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アビニシオ テクノロジー エルエルシー, アビニシオ テクノロジー エルエルシー filed Critical アビニシオ テクノロジー エルエルシー
Publication of JP2016520912A publication Critical patent/JP2016520912A/ja
Publication of JP2016520912A5 publication Critical patent/JP2016520912A5/ja
Application granted granted Critical
Publication of JP6469084B2 publication Critical patent/JP6469084B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Stored Programmes (AREA)
  • Telephonic Communication Services (AREA)
  • Debugging And Monitoring (AREA)

Description

関連出願の相互参照
本出願は、2013年4月23日に出願した米国特許出願第61/815,052号の優先権を主張するものである。
この説明は、コンピューティングシステムによって実行されるタスクの制御に関する。
コンピューティングシステムによって実行されるタスクを制御するための一部の技術においては、個々のタスクはプロセス又はスレッドによって実行され、プロセス又はスレッドは、そのタスクのためにスポーニング(spawn)され、そのタスクが完了された後に終了する。コンピューティングシステムのオペレーティングシステム、又はオペレーティングシステムの機能を使用するその他の集中型の制御エンティティが、異なるタスクをスケジューリングし、又は異なるタスクの間の通信を管理するために使用される可能性がある。その他の下流のタスク(例えば、タスクB)が始まる前に完了しなければならない特定の上流のタスク(例えば、タスクA)を示すことによってタスクの部分的な順序を定義するために、制御フローグラフが使用される可能性がある。制御フローグラフに従ってタスクを実行するための新しいプロセスのスポーニングを管理する制御プロセスが、存在する可能性がある。制御プロセスは、タスクAを実行するためのプロセスAをスポーニングした後、プロセスAが終了したというオペレーティングシステムによる通知を待つ。プロセスAが終了した後、オペレーティングシステムが、制御プロセスに通知し、そして、制御プロセスが、タスクBを実行するためのプロセスBをスポーニングする。
一態様においては、概して、コンピューティングシステムによって実行されるタスクを制御するための方法が、データ記憶システムにグラフに基づくプログラムの仕様に関するデータ構造を記憶するステップであって、グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、グラフに基づくプログラムの仕様が、ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定するノードの間の有向辺を含む、ステップと、グラフに基づくプログラムの仕様によって規定されたプログラムを少なくとも1つのプロセッサを用いて実行するステップとを含む。実行するステップが、第1のタスクに対応する第1のサブルーチンを実行することであって、第1のサブルーチンが、第1のタスクを実行するための第1のタスクセクション(task section)を含む、実行すること、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される第1のタスクの状態を示す状態情報を記憶すること、並びに第2のタスクに対応する第2のサブルーチンを実行することであって、第2のサブルーチンが、第2のタスクを実行するための第2のタスクセクション、及び記憶された状態情報によって示された第1のタスクの状態に少なくとも部分的に基づいて第2のタスクセクションの実行を制御する制御セクション(control section)を含む、実行することを含む。
態様は、以下の特徴のうちの1又は2以上を含み得る。
上流のノードから下流のノードへの有向辺が、部分的な順序で上流のノードによって表されるタスクが下流のノードによって表されるタスクに先行することを示す。
1組のあり得る状態が、第1のタスクセクションが第1のタスクを実行した完了状態、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む。
1組のあり得る状態が、第1のタスクセクションが第1のタスクを実行する過程にあるアクティブ状態を含む。
制御セクションが、第2のタスクセクションが呼び出されるか否かを判定する論理を含む。
論理が、フラグの値に基づいて第2のタスクセクションが呼び出されるか否かを判定する。
論理が、第2のタスクを表すノードへの有向辺によって接続されるノードによって表されるすべてのタスクの状態に少なくとも部分的に基づいて第2のタスクセクションが呼び出されるか否かを判定する。
論理が、第2のタスクを表すノードへの有向辺によって接続されるノードによって表されるすべてのタスクが停止状態にある場合、第2のセクションが呼び出されないと判定する。
論理が、第2のタスクを表すノードへの有向辺によって接続されるノードによって表される少なくとも1つのタスクが完了状態であり、第2のタスクを表すノードへの有向辺によって接続されるノードによって表されるタスクのいずれも保留状態にない場合、第2のセクションが呼び出されると判定する。
別の態様においては、概して、タスクを制御するための、コンピュータ可読記憶媒体に記憶されるコンピュータプログラム。コンピュータプログラムは、コンピューティングシステムに、グラフに基づくプログラムの仕様に関するデータ構造を記憶させ、グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、グラフに基づくプログラムの仕様が、ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定するノードの間の有向辺を含み、グラフに基づくプログラムの仕様によって規定されたプログラムを実行させる命令を含む。実行することが、第1のタスクに対応する第1のサブルーチンを実行することであって、第1のサブルーチンが、第1のタスクを実行するための第1のタスクセクションを含む、実行すること、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される第1のタスクの状態を示す状態情報を記憶すること、並びに第2のタスクに対応する第2のサブルーチンを実行することであって、第2のサブルーチンが、第2のタスクを実行するための第2のタスクセクション、及び記憶された状態情報によって示された第1のタスクの状態に少なくとも部分的に基づいて第2のタスクセクションの実行を制御する制御セクションを含む、実行することを含む。
別の態様においては、概して、タスクを制御するためのコンピューティングシステムが、グラフに基づくプログラムの仕様に関するデータ構造を記憶するデータ記憶システムであって、グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、グラフに基づくプログラムの仕様が、ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定するノードの間の有向辺を含む、データ記憶システムと、グラフに基づくプログラムの仕様によって規定されたプログラムを実行するように構成された少なくとも1つのプロセッサとを含む。実行することが、第1のタスクに対応する第1のサブルーチンを実行することであって、第1のサブルーチンが、第1のタスクを実行するための第1のタスクセクションを含む、実行すること、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される第1のタスクの状態を示す状態情報を記憶すること、並びに第2のタスクに対応する第2のサブルーチンを実行することであって、第2のサブルーチンが、第2のタスクを実行するための第2のタスクセクション、及び記憶された状態情報によって示された第1のタスクの状態に少なくとも部分的に基づいて第2のタスクセクションの実行を制御する制御セクションを含む、実行することを含む。
別の態様においては、概して、タスクを制御するためのコンピューティングシステムが、グラフに基づくプログラムの仕様に関するデータ構造を記憶するための手段であって、グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、グラフに基づくプログラムの仕様が、ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定するノードの間の有向辺を含む、手段と、グラフに基づくプログラムの仕様によって規定されたプログラムを実行するための手段とを含む。実行することが、第1のタスクに対応する第1のサブルーチンを実行することであって、第1のサブルーチンが、第1のタスクを実行するための第1のタスクセクションを含む、実行すること、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される第1のタスクの状態を示す状態情報を記憶すること、並びに第2のタスクに対応する第2のサブルーチンを実行することであって、第2のサブルーチンが、第2のタスクを実行するための第2のタスクセクション、及び記憶された状態情報によって示された第1のタスクの状態に少なくとも部分的に基づいて第2のタスクセクションの実行を制御する制御セクションを含む、実行することを含む。
態様は、以下の利点のうちの1又は2以上を含む可能性がある。
タスクがコンピューティングシステムによって実行されるとき、タスクを実行するための新しいプロセスをスポーニングすることに関連し、タスクのプロセスと、スケジューラ、又はタスクの依存関係及び順序を維持するためのその他の中心的なプロセスとの間を行ったり来たり切り替えることに関連する処理時間のコストが存在する。本明細書において説明される技術は、計算効率の良い方法で、新しいプロセスが選択的にスポーニングされること、又は実行されているプロセスが選択的に再利用されることを可能にする。コンパイラは、タスクを実行するためのサブルーチンに追加される比較的少ない量のコードに基づく分散型のスケジューリングメカニズムによって、集中型のスケジューラにのみ頼る必要性を避けることができる。タスクの完了が、自動的に、同時実行及び条件付き論理を可能にする方法で、制御フローグラフなどの入力の制約に従ってコンピューティングシステムがその他のタスクを実行することを引き起こす。タスクに関連するコンパイラにより生成されたコードが、カウンタ及びフラグに記憶された状態情報に基づいてその他のタスクを実行すべきか否かを判定するための関数をランタイムで呼び出す。したがって、コンパイラによって生成されたコードが、タスクのサブルーチンの呼び出しをランタイムで制御する状態機械を効率的に実装している。スケジューラへの及びスケジューラからの切り替えの余計なオーバーヘッドなしに、コンピューティングシステムは、細かい粒度の潜在的に同時のタスクをより効率的に実行することができる。
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。
コンピューティングシステムのブロック図である。 制御フローグラフの図である。 図2Aの制御フローグラフのノードに関するサブルーチンの実行に関連するプロセスの存続期間の図である。 制御フローグラフの図である。
図1は、タスク制御技術が使用され得るコンピューティングシステム100の例を示す。システム100は、タスクの仕様104を記憶するための記憶システム102と、タスクの仕様を、タスクを実行するためのタスクサブルーチンにコンパイルするためのコンパイラ106と、メモリシステム110にロードされたタスクサブルーチンを実行するための実行環境108とを含む。それぞれのタスクの仕様104は、どのタスクが実行されることになるか、及び異なるタスクの間の順序の制約を含む、いつそれらのタスクが実行され得るかに関する制約についての情報を符号化する。タスクの仕様104の一部は、実行環境108のユーザインターフェース114を介してユーザ112がインタラクションすることによって構築され得る。実行環境108は、例えば、UNIXオペレーティングシステムのバージョンなどの好適なオペレーティングシステムの制御下の1又は2以上の汎用コンピュータでホストされる可能性がある。例えば、実行環境108は、ローカルの(例えば、対称型マルチプロセッシング(SMP,symmetric multi-processing)コンピュータなどのマルチプロセッサシステム)又はローカルに分散された(例えば、クラスタ若しくは超並列処理(MPP,massively parallel processing)システムとして接続された複数のプロセッサ)か、或いは遠隔の又は遠隔に分散された(例えば、ローカルエリアネットワーク(LAN,local area network)及び/若しくは広域ネットワーク(WAN,wide-area network)を介して接続された複数のプロセッサ)か、或いはこれらの任意の組合せかのいずれかの複数の中央演算処理装置(CPU,central processing unit)或いはプロセッサコアを用いるコンピュータシステムの構成を含むマルチノード並列コンピューティング環境を含む可能性がある。記憶システム102を提供する記憶デバイスは、実行環境108のローカルにあり、例えば、実行環境108をホストするコンピュータに接続された記憶媒体(例えば、ハードドライブ)に記憶される可能性があり、又は実行環境108の遠隔にあり、例えば、(例えば、クラウドコンピューティングインフラストラクチャによって提供される)リモート接続を介して実行環境108をホストするコンピュータと通信するリモートシステムでホストされる可能性がある。
図2Aは、コンピューティングシステム100によって実行される1組のタスクに対して課される部分的な順序を定義する制御フローグラフ200の例を示す。制御フローグラフ200によって定義される部分的な順序は、記憶されるタスクの仕様104で符号化される。一部の実施形態において、ユーザ112は、制御フローグラフに含まれるさまざまな種類のノードを選択し、接続されたノードの間の順序の制約を表すリンクによってそれらのノードの一部を接続する。ノードの1つの種類は、図2Aにおいて角の四角いブロックによって表されるタスクノードである。それぞれのタスクノードは、実行される異なるタスクを表す。(有向リンクの始点の)第1のタスクノードから(有向リンクの終点の)第2のタスクノードに接続された有向リンクは、第2のノードのタスクが開始し得るよりも前に第1のノードのタスクが完了しなければならないという順序の制約を課す。ノードの別の種類は、図2Aにおいて角の丸いブロックによって表される接合ノードである。制御フローグラフが条件付きの動作(behavior)を含まない場合、接合ノードは、単に、順序の制約を課すように働く。単一の入力リンク及び複数の出力リンクを有する接合ノードは、出力リンクによって接続されるタスクノードのいずれのタスクが開始し得るよりも前に入力リンクによって接続されるタスクノードのタスクが完了しなければならないように順序の制約を課す。複数の入力リンク及び単一の出力リンクを有する接合ノードは、出力リンクによって接続されるタスクノードのタスクが開始し得るよりも前に入力リンクによって接続されるタスクノードのすべてのタスクが完了しなければならないように順序の制約を課す。タスクノードは、複数の入力リンクの終点でもあり、そのタスクノードのタスクが開始し得るよりも前に入力リンクによって接続されるタスクノードのすべてのタスクが完了しなければならないように順序の制約を課す可能性がある。以下でより詳細に説明されるように、条件付きの動作によって、複数の入力リンクを有するタスクノードは、複数の入力を有する接合ノードとは異なる論理的な動作をさらに提供する。
制御フローグラフが構築された後、コンパイラ106は、タスク情報と、その制御フローグラフによって表される順序の情報とを符号化するタスクの仕様104をコンパイルし、タスクを実行するための命令を生成する。命令は、実行される用意のできている低レベルのマシンコードの形態、又は最終的に実行される低レベルのマシンコードを提供するためにさらにコンパイルされるより高レベルのコードの形態である可能性がある。生成された命令は、それぞれのタスクノードに関するサブルーチン(「タスクサブルーチン」)及びそれぞれの接合ノードに関するサブルーチン(「接合サブルーチン」)を含む。タスクサブルーチンのそれぞれは、対応するタスクを実行するための(タスク本体(task body)とも呼ばれる)タスクセクションを含む。タスクノードは、コンパイラが適切なタスクセクションを生成することができるように実行される対応するタスクの何らかの説明を含む。例えば、一部の実施形態において、タスクノードは、呼び出される特定の関数、実行されるプログラム、又はタスクセクションに含められるその他の実行可能コードを特定する。また、タスクサブルーチンの一部は、制御フローグラフの別のノードに関する後続のサブルーチンの実行を制御する制御セクションを含み得る。いかなる下流のノードにも接続されないタスクノードに関するタスクサブルーチンは、そのタスクノードの完了後に制御がいかなる後続のタスクにも渡される必要がないので制御セクションを必要としない可能性がある。接合ノードの目的は、制御のフローに対する制約を規定することであるので、接合サブルーチンのそれぞれは、制御セクションをその主要部として含む。
制御セクションに含まれる関数の例は、制御フローグラフのノードに関連する状態情報に基づいて後続のノードに関するサブルーチンを実行するための新しいプロセスをスポーニングすべきか否かを判定する「chain」関数である。chain関数の引数が、その後続のノードを特定する。下の表は、制御フローグラフ200のノードのそれぞれに関してコンパイラによって書かれるサブルーチンに含まれる関数の例を示し、タスクサブルーチンのタスクセクションが、関数呼び出しT#()によって表され、サブルーチンの残りが、制御セクションを表すと考えられる。(その他の例において、タスクセクションは、最後の関数が返った後にタスクが完了されるようにして複数の関数呼び出しを含む可能性がある。)接合サブルーチンは、タスクセクションを含まず、したがって、すべて制御セクションによって構成される。この例においては、別々の関数呼び出しは、それらの関数が呼び出される順序でセミコロンによって分けられる。
タスクの仕様104がコンパイルされた後、コンピューティングシステム100は、生成されたサブルーチンを実行環境108のメモリシステム110にロードする。特定のサブルーチンが呼び出されるとき、プログラムカウンタが、サブルーチンが記憶されるメモリシステム110のアドレス空間の一部の始めの対応するアドレスに設定される。
スケジューリングされた時間に、又はユーザ入力若しくは所定のイベントに応じて、コンピューティングシステム100は、制御フローグラフのルートを表すロードされたサブルーチンのうちの少なくとも1つの実行を開始する。例えば、制御フローグラフ200に関して、コンピューティングシステム100は、タスクノードT1に関するタスクサブルーチンを実行するためのプロセスをスポーニングする。サブルーチンが実行を開始するとき、プロセスは、最初に、タスクノードT1のタスクを実行するためのタスクセクションを呼び出し、それから、タスクセクションが返った(タスクノードT1のタスクの完了を示す)後に、プロセスは、サブルーチンの制御セクションのchain関数を呼び出す。特定のノードに関するサブルーチンを実行するために新しいプロセスをスポーニングすべきか否かを判定するためにchain関数によって使用される状態情報は、以下でより詳細に説明されるように、その特定のノードを引数として呼び出された前のchain関数の履歴を捕捉する情報である。
この履歴情報は、異なるノードに関連するアクティブ化カウンタに保有され得る。カウンタの値は、例えば、メモリシステム110の一部又はその他の作業用記憶域に記憶される可能性がある。第1のプロセスがスポーニングされる前に、各ノードに関するアクティブ化カウンタの値は、そのノードへの入力リンクの数に初期化される。したがって、制御フローグラフ200に関しては、以下の値に初期化された6つのアクティブ化カウンタが存在する。
タスクノードT1は入力リンクを持たないので、そのタスクノードT1のアクティブ化カウンタは、ゼロに初期化される。代替的に、いかなる入力リンクも持たない最初のノードに関しては、そのノードに関連するアクティブ化カウンタが存在する必要がない。入力リンクを介して接続される異なるノードの制御セクションは、下流のリンクされたノードのアクティブ化カウンタをデクリメントし、デクリメントされた値に基づいてアクションを決定する。一部の実施形態においては、カウンタにアクセスする関数が、カウンタをアトミックにデクリメントし、デクリメント操作の前か又は後かのどちらかでカウンタの値を読むアトミックな操作(例えば、アトミックな「decrement−and−test」操作)を使用することができる。一部のシステムにおいては、そのような操作が、システムのネイティブの命令によってサポートされる。代替的に、カウンタの値がゼロに達するまでカウンタをデクリメントする代わりに、カウンタが、ゼロで始まる可能性があり、関数が、(例えば、アトミックな「increment−and−test」操作を用いて)カウンタの値がノードへの入力リンクの数に初期化された所定の閾値に達するまでカウンタをインクリメントする可能性がある。
chain関数「chain(N)」の呼び出しは、ノードNのアクティブ化カウンタをデクリメントし、デクリメントされた値がゼロである場合、chain関数は、新しくスポーニングされたプロセスによるノードNのサブルーチンの実行をトリガし、それから返す。デクリメントされた値がゼロよりも大きい場合、chain関数は、新しいサブルーチンの実行をトリガすること又は新しいプロセスのスポーニングすることなしにただ返す。サブルーチンの制御セクションは、表1の接合ノードJ1に関する接合サブルーチンと同様に、chain関数の複数の呼び出しを含む可能性がある。制御セクションの最後の関数が返った後、サブルーチンを実行するプロセスは、終了する可能性があり、又は一部の関数呼び出しに関しては(例えば、以下で説明される「chainTo」関数呼び出しに関しては)、プロセスは、別のサブルーチンの実行を続ける。新しいプロセスのこの条件付きのスポーニングは、新しいプロセスのスポーニングを管理するためのスケジューラプロセスへの切り替え及び新しいプロセスのスポーニングを管理するためのスケジューラプロセスからの切り替えを必要とせずに、所望の部分的な順序に従って(潜在的に同時に)タスクサブルーチンが実行されることを可能にする。
表1のサブルーチンに関して、タスクサブルーチンT1に関するタスクセクションが返った後のchain関数の呼び出し「chain(J1)」は、ノードJ1に関するアクティブ化カウンタが1から0にデクリメントされる結果をもたらし、chain関数の呼び出し「chain(T2)」及び「chain(T3)」を含む接合サブルーチンの実行を引き起こす。これらの呼び出しのそれぞれは、ノードT2及びT3に関するそれぞれのアクティブ化カウンタが1から0にデクリメントされる結果をもたらし、ノードT2及びT3に関するタスクサブルーチンの実行を引き起こす。両方のタスクサブルーチンが、ノードJ2に関するアクティブ化カウンタをデクリメントする「chain(J2)」を呼び出す制御セクションを含む。ノードT2及びT3に関するタスク本体のうち最初に終了する方が、ノードJ2に関するアクティブ化カウンタを2から1にデクリメントするchain関数の呼び出しにつながる。2番目に終了するタスクセクションは、ノードJ2に関するアクティブ化カウンタを1から0にデクリメントするchain関数の呼び出しにつながる。したがって、タスクのうちで最後に完了するもののみが、ノードJ2に関する接合サブルーチンの実行を引き起こし、その実行が、chain関数の最後の呼び出し「chain(T4)」及びノードT4に関するアクティブ化カウンタの1から0へのデクリメントにつながり、そのデクリメントが、ノードT4に関するタスクサブルーチンの実行を開始する。ノードT4に関するタスクセクションが返った後、制御フローは、ノードT4に関するタスクサブルーチンに関する制御セクションが存在しないので完了する。
表1のサブルーチンの例においては、新しいプロセスが、制御フローグラフ200の各ノードのサブルーチンに関してスポーニングされる。中心的なタスク監視又はスケジューリングプロセスを必要とせずに、新しいプロセスをスポーニングすべきか否かを判定する制御セクションを独自に含む各プロセスのサブルーチンによっていくらかの効率が得られるが、制御セクションに対する特定のコンパイラの最適化によってより一層の効率が得られる可能性がある。例えば、1つのコンパイラの最適化では、第1のサブルーチンの制御セクションにchain関数の単一の呼び出しが存在する場合、次のサブルーチン(すなわち、そのchain関数の引数)が、第1のサブルーチンを実行している同じプロセス内で(アクティブ化カウンタがゼロに達するときに)実行される可能性がある−新しいプロセスは、スポーニングされる必要がない。これを実現する1つの方法は、コンパイラがノードの最後の出力リンクに関する異なる関数呼び出し(例えば、「chain」関数の代わりに「chainTo」関数)を明示的に生成することである。chainTo関数は、アクティブ化カウンタがゼロであるときにその関数の引数のサブルーチンを実行するための新しいプロセスをスポーニングする代わりに、その関数の引数のサブルーチンを同じプロセスに実行させることを除いてchain関数と同様である。ノードが単一の出力リンクを有する場合、そのノードのコンパイルされたサブルーチンは、chainTo関数の単一の呼び出しを有する制御セクションを有する。ノードが複数の出力リンクを有する場合、そのノードのコンパイルされたサブルーチンは、chain関数の1又は2以上の呼び出し及びchainTo関数の単一の呼び出しを有する制御セクションを有する。これは、独立したプロセスでスポーニングされるサブルーチンの数及びそれらのサブルーチンの関連する開始オーバーヘッドを削減する。表3は、このコンパイラの最適化を用いて制御フローグラフ200に関して生成されるサブルーチンの例を示す。
表3のサブルーチンの例においては、第1のプロセスがノードT1及びJ1のサブルーチンを実行し、そして、ノードT2のサブルーチンを実行するために新しいプロセスがスポーニングされる一方、第1のプロセスはノードT3のサブルーチンの実行を続ける。これら2つのプロセスのうちでそれらのプロセスのそれぞれのタスクセクションから始めに返すものは、接合ノードJ2のアクティブ化カウンタを(2から1へ)始めにデクリメントするものであり、それからそのプロセスは、終了する。プロセスのタスクセクションから返る第2のプロセスは、接合ノードJ2のアクティブ化カウンタを1から0にデクリメントし、それから、関数呼び出し(「chainTo(T4)」)である接合ノードJ2のサブルーチン及び最後にはタスクノードT4のサブルーチンを実行することによって継続する。図2Bは、ノードT3のタスクがノードT2のタスクの前に終了する場合に関して、第1の及び第2のプロセスが制御フローグラフ200の異なるノードに関するサブルーチンを実行するときのそれらのプロセスの存続期間の例を示す。プロセスを表す線に沿った点は、(破線によって点に接続された)異なるノードに関するサブルーチンの実行に対応する。点の間の線分の長さは、必ずしも経過時間に比例せず、単に、異なるサブルーチンが実行される相対的な順序と、新しいプロセスがスポーニングされる時点とを示すように意図されている。
潜在的に効率をさらに向上させることができる修正の別の例は、特定のサブルーチンが同時実行の恩恵を受け得ることを示す閾値が満たされるまで遅らされた新しいプロセスのスポーニングである。異なるプロセスによる複数のサブルーチンの同時実行は、サブルーチンのそれぞれが完了するのにかなりの量の時間がかかる場合に特に恩恵がある。そうではなく、サブルーチンのいずれかがその他のサブルーチンと比べて完了するのに比較的少ない量の時間がかかる場合、そのサブルーチンは、効率の大きな損失なしに別のサブルーチンと逐次的に実行される可能性がある。遅らされたスポーニングのメカニズムは、かなりの量の時間がかかり、一緒に実行され得る複数のタスクが、プロセスを同時に実行することによって実行されることを可能にするが、さらに、より短いタスクのための新しいプロセスのスポーニングを抑制するように試みる。
遅らされたスポーニングを用いるchain関数の代替的な実施形態においては、chainTo関数に似たchain関数が、その関数の引数のサブルーチンの実行を同じプロセスに開始させる。しかし、chainTo関数とは異なり、タイマーが、サブルーチンを実行するのにかかる時間を追跡し、閾値の時間が超えられる場合、chain関数は、サブルーチンの実行を継続するために新しいプロセスをスポーニングする。第1のプロセスは、サブルーチンが完了したかのように継続することができ、第2のプロセスは、第1のプロセスが終了した時点でサブルーチンの実行を引き継ぐことができる。これを実現するために使用され得る1つのメカニズムは、第2のプロセスが第1のプロセスからサブルーチンのスタックフレームを継承することである。実行されているサブルーチンに関するスタックフレームは、特定の命令を指すプログラムカウンタと、サブルーチンの実行に関連するその他の値(例えば、ローカル変数及びレジスタ値)を含む。この例において、T2に関するタスクサブルーチンのスタックフレームは、プロセスがT2に関するタスクサブルーチンの完了後にJ1に関する接合サブルーチンに返すことを可能にするリターンポインタ(return pointer)を含む。遅らされたスポーニングのタイマーが超えられるとき、新しいプロセスがスポーニングされ、T2に関するタスクサブルーチンの既存のスタックフレームに関連付けられ、第1のプロセスが、(「chainTo(T3)」を呼び出すために)J1に関する接合サブルーチンに直ちに戻る。継承されたスタックフレームのリターンポインタは、新しいプロセスがT2に関するタスクサブルーチンの完了後にJ1に関する接合サブルーチンに戻る必要がないので取り除かれる(つまり、ヌルにされる)。したがって、遅らされたスポーニングは、タスクが(構成可能な閾値に比して)迅速である場合に関して、新しいプロセスをスポーニングするオーバーヘッドなしに後続のタスクに関するサブルーチンが実行されることを可能にし、既存のスタックフレームを継承することによって、タスクがより長い場合に関して、新しいプロセスのスポーニングにかかわるオーバーヘッドを削減する。
図2Cは、ノードT2のタスクが遅らされたスポーニングの閾値よりも長い場合に関して、第1の及び第2のプロセスが制御フローグラフ200の異なるノードに関するサブルーチンを実行するときのそれらのプロセスの存続期間の例を示す。スポーニングの閾値が達せられるとき、プロセス1が、ノードT2のタスクを実行するサブルーチンのスタックフレームを継承し、そのサブルーチンの実行を続けるプロセス2をスポーニングする。この例においては、(プロセス1によって実行される)ノードT3のタスクが、(プロセス1によって開始され、プロセス2によって完了される)ノードT2のタスクが終了する前に終了する。したがって、この例において、J2のアクティブ化カウンタを2から1にデクリメントする(そして終了する)のはプロセス1であり、J2のアクティブ化カウンタを1から0にデクリメントし、プロセス2がタスクノードT4のタスクを実行する結果となるのはプロセス2である。この例においては、ノードT2のタスク及びノードT3のタスクの同時実行が、そのような同時実行が全体的な効率に寄与すると判定された後に可能にされる。
図2Dは、ノードT2のタスクが遅らされたスポーニングの閾値よりも短い場合に関して、単一のプロセスが制御フローグラフ200の異なるノードに関するサブルーチンを実行するときのそのプロセスの存続期間の例を示す。この例においては、(プロセス1によって実行される)ノードT2のタスクが、(プロセス1によってやはり実行される)ノードT3のタスクの前に終了する。したがって、この例においては、プロセス1が、ノードT2のタスクを完了した後にJ2のアクティブ化カウンタを2から1にデクリメントし、プロセス1が、ノードT3のタスクを完了した後にJ2のアクティブ化カウンタを1から0にデクリメントし、その結果、プロセス1が、タスクノードT4のタスクを実行する。この例においては、ノードT2及びノードT3のタスクの同時実行が、ノードT2のタスクが迅速に完了され得ると判定された後に第2のプロセスをスポーニングする必要性を避けることによって得られる効率のために放棄される。
制御フローグラフに含まれる可能性があるノードの別の種類は、図3に示される制御フローグラフ300の円によって表される条件ノードである。条件ノードは、条件ノードの出力に接続されたタスクノードのタスクが実行されるべきであるか否かを判定するための条件を定義する。ランタイムで、定義された条件が真である場合、制御フローは、その条件ノードを過ぎて下流に進むが、ランタイムで、定義された条件が偽である場合、制御フローは、条件ノードを過ぎて進まない。条件が偽である場合、条件ノードの下流のタスクノードのタスクは、それらのタスクノードに至る制御フローグラフを抜ける(その他の偽の条件ノードによってそれら自体が遮断されない)その他の経路が存在する場合にのみ実行される。
コンパイラは、それぞれの条件ノードに関する「条件サブルーチン」を生成し、さらに、条件ノードによって定義された条件を用いて条件ノードの下流の特定のその他のノードのサブルーチンを修正する。例えば、コンパイラは、制御フローグラフによって定義された制御の流れに従うためにランタイムで適用される「スキップメカニズム」のための命令を生成し得る。スキップメカニズムにおいて、各ノードは、(もしあれば)対応するタスクセクションが実行されるか否かを制御する関連する「スキップフラグ」を有する。スキップフラグが設定される場合、(ノードが「抑制」状態であるようにして)タスクセクションの実行が抑制され、この抑制は、コンパイラによって制御セクションに入れられた適切な制御コードによってその他のタスクに伝播され得る。前の例においては、タスクサブルーチンのタスクセクションが、制御セクションに先行していた。以下の例においては、一部のタスクのサブルーチンの制御セクションが、タスクセクションの前に現れる制御コード(「プロローグ(prologue)」とも呼ばれる)と、タスクセクションの後に現れる制御コード(「エピローグ(epilogue)」とも呼ばれる)とを含む。例えば、このスキップメカニズムを実装するために、コンパイラは、条件付きの命令(例えば、ステートメント(statement)の場合)と、下流のノードを特定する引数を用いて呼び出される「skip関数」の呼び出しとをプロローグ(すなわち、タスクセクションの前に実行されるコード)に含める。コンパイラは、chain又はchainTo関数の呼び出しをエピローグ(すなわち、タスクセクションの後に実行されるコード)に含める。場合によっては、スキップフラグの値によって表される記憶された状態が原因で、プロローグのみが実行される可能性があり、タスクセクションとエピローグとの両方がスキップされる可能性がある。表4は、制御フローグラフ300に関して生成されるサブルーチンの例を示す。
chain及びchainTo関数と同様に、skip関数「skip(N)」は、そのskip関数の引数(ノードN)のアクティブ化カウンタをデクリメントし、デクリメントされた値が0である場合、対応するサブルーチンを実行する。この例において、skip関数は、新しいプロセスをスポーニングすることなく同じプロセスを使用し続けることによってchainTo関数の動作に従うが、コンパイラは、同様の方法でタスクのスポーニングを制御するためにchain及びchainTo関数がするのと同じように振る舞うskip関数の2つのバージョンを使用する可能性がある。コンパイラは、サブルーチンが実行されているノードのスキップフラグが設定される(つまり、ブール真値と評価される)場合、タスクセクションを呼び出すことなく下流のノードのskipを呼び出し、スキップフラグがクリアされる(つまり、ブール偽値と評価される)場合、(ノードがタスクノードである場合)タスクセクションを確かに呼び出し、下流のノードのchainを呼び出すように条件付きノードの下流のノードに関するサブルーチンを生成する。代替的に、コンパイラは、どのノードが条件付きノードの下流にあるかを判定する必要なしにデフォルトでサブルーチンの制御セクションに条件文を含める可能性がある。特に、スキップフラグを調べる「if」文が、コンパイラがその文を含めるべきか否かを判定する必要なしにあらゆるノードのサブルーチンに関してデフォルトで含められる可能性がある(ただし、それは、スキップフラグの不必要な検査を招く可能性がある)。
制御フローグラフに条件ノードが存在する場合、複数の入力を有するノードは、ノードの種類に依存する論理的動作をランタイムで取得する。複数の入力リンク及び単一の出力リンクを有する接合ノードは、出力リンクによって接続される出力ノードがそのノードのサブルーチンを(skipの呼び出しではなく)chainの呼び出しの引数にすべきである場合、入力リンクによって接続される少なくとも1つの入力ノードがそのノードのサブルーチンに(skipの呼び出しではなく)chainの呼び出しを実行させなければならないように論理「OR」演算に対応する。複数の入力リンク及び単一の出力リンクを有するタスクノードは、そのタスクノードのサブルーチンが(skipの呼び出しではなく)chainの呼び出しの引数であるべきである場合、入力リンクによって接続される入力ノードのすべてがそれらのノードのサブルーチンに(skipの呼び出しではなく)chainの呼び出しを実行させなければならないように論理「AND」演算に対応する。
この論理的動作を確実にするために、ノードに関連するスキップフラグは、所定の規則に従ってランタイムで設定され、クリアされる。スキップフラグの初期値は、制御フローグラフのノードのサブルーチンのいずれかの実行の前に行われる初期化フェーズの間に与えられ、さらに、ノードの種類に依存する。また、コンパイラは、ノードの種類に依存する異なる動作を有するskip関数及びchain関数の異なるバージョンを用いる。ノードNのスキップフラグを変更するための所定の1組の規則と、コンパイラによって使用される異なるバージョンの関数の動作との一例は、以下の通りである。
・複数入力接合ノード(OR演算)に関して、スキップフラグは、最初に設定され、skip_OR(N)は、スキップフラグを変更せず、chain_OR(N)は、スキップフラグをクリアする
・複数入力タスクノード(AND演算)に関して、スキップフラグは、最初にクリアされ、skip_AND(N)は、スキップフラグを設定し、chain_AND(N)は、スキップフラグを変更しない
・単一入力ノードに関して、スキップフラグは、最初に設定され、skip(N)は、スキップフラグを変更せず、chain(N)は、スキップフラグをクリアする
chainTo関数の動作は、スキップフラグに関してchain関数と同じである。単一入力ノードに関して、OR演算及びAND演算の動作は等価であり、(この例のOR演算の動作など)どちらかが使用され得る。この1組の規則に関して、(1又は2以上の)開始ノード(すなわち、いかなる入力リンクもないノード)は、それらのノードのスキップフラグを(そのスキップフラグの初期値がまだクリアされていない場合)クリアする。
制御フローグラフ300に関して、ノードC1に関する条件が真であり、ノードC2に関する条件が偽であり、ノードC2の条件の検査が完了される前にノードT3に関するタスクが終了する、つまり、ノードT3に関するサブルーチンが、ノードJ2のスキップフラグをクリアし、ノードJ2に関するアクティブ化カウンタを(2から1に)デクリメントする(skip論理とは対照的な)chain論理に従い、それから、ノードT4に関するサブルーチンが、(スキップフラグを変更しない)skip論理に従い、ノードJ2に関するアクティブ化カウンタを(1から0に)デクリメントし、そのことが、ノードJ2のスキップフラグがノードT3のサブルーチンによってクリアされたのでchain(T5)を引き起こす場合を考える。
その他の規則も、あり得る。ノードNのスキップフラグを変更するための所定の1組の規則と、コンパイラによって使用される異なるバージョンの関数の動作との別の例は、以下の通りである。
・接合ノードに関して、スキップフラグは、最初に設定され、skip_J(N)は、スキップフラグを変更せず、chain_J(N)は、スキップフラグをクリアする
・タスクノード又は条件付きノードに関して、スキップフラグは、最初にクリアされ、skip(N)は、スキップフラグを設定し、chain(N)は、スキップフラグを変更しない
この1組の規則に関して、(1又は2以上の)開始ノード(すなわち、いかなる入力リンクもないノード)は、それらのノードのスキップフラグを(そのスキップフラグの初期値がまだクリアされていない場合)やはりクリアする。
コンパイラは、制御フローグラフの分析に基づいてサブルーチンの制御セクションの条件文又はその他の命令のさまざまな最適化を実行していてもよい可能性がある。例えば、制御フローグラフ300から、タスクノードT5のタスクは、最終的にタスクノードT5のタスクの実行を引き起こす接合ノードJ1と接合ノードJ3との間のリンクが存在するので、条件ノードC1及びC2の条件が真であるか又は偽であるかにかかわりなくスキップされると判定され得る。したがって、コンパイラは、タスクノードT5のスキップフラグの検査を避け、単にタスクノードT5のタスクセクションT5()を呼び出すタスクノードT5に関するサブルーチンを生成することができる。例えば、スキップされたセクションの後の下流のノードへのすべてのその他の入力が適切に処理される(つまり、下流のノードのカウンタを、スキップされたセクションに関する中間的な呼び出しが含まれていたとした場合にそのカウンタがデクリメントされたであろう回数だけデクリメントする)限り、制御フローグラフのセクション全体が条件付きノードの後でスキップされるべきである場合に関して、中間的なスキップフラグの検査及びskip関数の呼び出しを省くことによって、その他の最適化がコンパイラによってなされ得る。
図4は、それぞれが条件ノード(それぞれC1及びC2)に続くタスクノードT1及びT2からの入力リンクを有する多入力タスクノードT3を含む単純な制御フローグラフ400の例を示す。この例において、タスクノードT3は、ノードT3のタスクが実行されるためにノードT1及びT2のタスクが両方とも(スキップされずに)実行されなければならないように論理AND演算に対応する。表5は、制御フローグラフ400に関して生成されるサブルーチンの例を示す。
一部の実施形態において、接合ノード(又はその他のノード)は、ノードへの入力の特徴に依存するさまざまな種類の論理演算を行うように構成される可能性がある。例えば、ノードは、すべての入力が「必須」入力として指定されるとき、論理AND演算を行い、すべての入力が「任意選択」入力として指定されるとき、論理OR演算を行うように構成される可能性がある。一部の入力が「必須」と指定され、一部の入力が「任意選択」と指定される場合、1組の所定の規則が、ノードによって実行される論理演算の組合せを解釈するために使用される可能性がある。
一部の実施形態においては、制御セクションの制御コードによって表されるコンパイラによって構築された状態機械が、上述のアクティブ化カウンタの値及びスキップフラグによって表される状態と等化の状態を表すためにその他の状態変数を使用する可能性がある。例えば、1組の状態は、「保留」、「アクティブ」、「完了」、及び「抑制」を含む可能性がある。この例において、タスクは、保留状態で始まる。状態の間の許容される遷移は、(1)保留から抑制、又は(2)保留からアクティブ、及びアクティブから完了を含む。アクティブ化カウンタを有するシステム及びアクティブ化カウンタを持たないシステムの動作の間にいくつかの違いが存在する。アクティブ化カウンタがゼロに達したと判定する上流のタスクのエピローグによって下流のタスクのプロローグの実行がトリガされる代わりに、タスクの実行は、そのタスクのプロローグが少なくとも1つの上流のタスクが完了状態であり、どの上流のタスクも保留状態でないと判定することによってトリガされる。代替的に、そのタスクのプロローグが、すべての上流のタスクが抑制状態であると判定する場合、そのタスクの実行が、やはり抑制される。
一部の実施形態においては、アクティブ化カウンタの使用が、プロローグが呼び出される必要がある回数を削減する。例えば、アクティブ化カウンタがないと、下流のタスクのプロローグが、入力リンクに直接接続されたあらゆる上流のタスクについて1回呼び出される必要がある可能性がある。一方、アクティブ化カウンタがあると、下流のタスクのプロローグは、そのタスクのアクティブ化カウンタをデクリメントする最後の上流のタスクについてのみ呼び出される必要がある可能性がある。
コンパイラは、使用される任意の種類の状態情報のために制御セクションにさらなる最適化を適用する可能性がある。例えば、特定のトポロジーを有する接続されたノードの特定のサブセットに関して、コンパイラは、削減された1組の制御セクションを提供する可能性がある。そのようなトポロジーの一例は、単一の上流のルートノードの下流に1又は2以上のノードを有するノードのツリーである。このツリー部分グラフの一部でない制御フローグラフの任意のノードは、通常のプロローグ及びエピローグを有する。しかし、ツリー部分グラフのノードに関して、コンパイラは、ルートノードに関する単一の組み合わされたプロローグと、ツリー部分グラフの葉ノードだけに関して削減された1組のエピローグとを提供する。コンパイラは、例えば、ルートノードから下流の制御フローグラフを動き回り、ルートノード又はツリーに前に追加された別のノードからの入力のみを有する任意のノードを追加することによってツリー部分グラフのメンバーを判定することができる。ツリー部分グラフに関する組み合わされたプロローグは、ツリーのすべてのノードのタスクセクションをまとめて実行又は抑制し、すべての葉ノードに関するエピローグを呼び出すコードを含む。その他のコンパイラの最適化は、いかなる上流のノードからの入力リンクを持たないあらゆるノードに関するプロローグを省略すること、又はいかなる下流のノードへのいかなる出力リンクも持たないあらゆるノードに関するエピローグを省略することを含む。
一部の実施形態において、ノードによって表されるタスクは、制御フローグラフに加えてさまざまな種類のグラフに基づくプログラムの仕様のいずれかによって規定される部分的な順序を有する可能性がある。例えば、グラフに基づくプログラムの仕様の一部の有向辺が、(リンクされたノードがそれらのノードのタスクを同時に実行することを抑制する順序関係を課す可能性がある)制御フローを表す可能性があり、グラフに基づくプログラムの仕様のその他の有向辺は、(リンクされたノードがそれらのノードのタスクを同時に実行することを抑制しない依存関係を課す可能性がある)データフローを表す可能性がある。
上述のタスク制御技術は、好適なソフトウェアを実行するコンピューティングシステムを用いて実装され得る。例えば、ソフトウェアは、それぞれが少なくとも1つのプロセッサ、(揮発性及び/又は不揮発性メモリ及び/又は記憶要素を含む)少なくとも1つのデータ記憶システム、(少なくとも1つの入力デバイス又はポートを用いて入力を受け取るため、及び少なくとも1つの出力デバイス又はポートを用いて出力を与えるための)少なくとも1つのユーザインターフェースを含む(分散、クライアント/サーバ、又はグリッドなどのさまざまなアーキテクチャである可能性がある)1又は2以上のプログラミングされた又はプログラミング可能なコンピューティングシステムで実行される1又は2以上のコンピュータプログラムの手順を含み得る。ソフトウェアは、例えば、データフローグラフの設計、構成、及び実行に関連するサービスを提供するより大きなプログラムの1又は2以上のモジュールを含む可能性がある。プログラムのモジュール(例えば、データフローグラフの要素)は、データリポジトリに記憶されたデータモデルに準拠するデータ構造又はその他の編成されたデータとして実装され得る。
ソフトウェアは、CD−ROM又は(例えば、汎用若しくは専用のコンピューティングシステム若しくはデバイスによって読み取り可能な)その他のコンピュータ可読媒体などの有形の非一時的媒体で提供されるか、或いはそのソフトウェアが実行されるコンピューティングシステムの有形の非一時的媒体にネットワークの通信媒体を介して配信される(例えば、伝播信号で符号化される)可能性がある。処理の一部又はすべては、専用のコンピュータで、又はコプロセッサ若しくはフィールドプログラマブルゲートアレイ(FPGA,field-programmable gate array)若しくは専用の特定用途向け集積回路(ASIC,application-specific integrated circuit)などの専用のハードウェアを用いて実行される可能性がある。処理は、ソフトウェアによって指定された計算の異なる部分が異なる計算要素によって実行される分散された方法で実装される可能性がある。それぞれのそのようなコンピュータプログラムは、本明細書において説明された処理を実行するために記憶デバイスの媒体がコンピュータによって読み取られるときにコンピュータを構成し、動作させるために、汎用又は専用のプログラミング可能なコンピュータによってアクセス可能な記憶デバイスのコンピュータ可読記憶媒体(例えば、ソリッドステートメモリ若しくは媒体、又は磁気式若しくは光学式媒体)に記憶されるか又はダウンロードされることが好ましい。本発明のシステムは、コンピュータプログラムで構成された有形の非一時的媒体として実装されると考えられる可能性もあり、そのように構成された媒体は、本明細書において説明された処理ステップのうちの1又は2以上を実行するために特定の予め定義された方法でコンピュータを動作させる。
本発明のいくつかの実施形態が、説明された。しかしながら、上述の説明は、添付の特許請求の範囲によって定義される本発明の範囲を例示するように意図されており、限定するように意図されていないことを理解されたい。したがって、その他の実施形態も、以下の特許請求の範囲内にある。例えば、本発明の範囲を逸脱することなくさまざまな修正がなされ得る。さらに、上述のステップの一部は、順序に依存しない可能性があり、したがって、説明された順序とは異なる順序で実行され得る。

Claims (13)

  1. コンピューティングシステムによって実行されるタスクを制御するための方法であって、
    データ記憶システムにグラフに基づくプログラムの仕様に関するデータ構造を記憶するステップであって、前記グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、前記グラフに基づくプログラムの仕様が、前記ノードの間の有向辺を含前記有向辺が、(1)制御フローを表し、前記ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定する関係を課す1又は2以上の制御有向辺であって、2つのリンクされたノードの間の制御フローを表す少なくとも1つの制御有向辺が、前記リンクされたノードがそれらのタスクに対応するサブルーチンを同時に実行することを抑制する、前記1又は2以上の制御有向辺、及び(2)データフローを表し、データ依存関係を課す1又は2以上のデータフロー有向辺であって、前記データフロー有向辺が、リンクされたノードがそれらのタスクに対応するサブルーチンを少なくとも部分的に同時に実行することを抑制しない、前記1又は2以上のデータフロー有向辺を含むステップと、
    前記グラフに基づくプログラムの仕様によって規定されたプログラムを少なくとも1つのプロセッサを用いて実行するステップとを含み、
    前記実行するステップが、
    第1のタスクに対応する第1のサブルーチンを実行することであって、前記第1のサブルーチンが、前記第1のタスクを実行するための第1のタスクセクションを含む、実行すること、
    前記第1のタスクセクションが前記第1のタスクを実行するのを待っている保留状態、及び前記第1のタスクセクションが前記第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される前記第1のタスクの状態を示す状態情報を記憶すること、並びに
    第2のタスクに対応する第2のサブルーチンを実行することであって、前記第2のサブルーチンが、前記第2のタスクを実行するための第2のタスクセクション、及び前記記憶された状態情報によって示された前記第1のタスクの前記状態に少なくとも部分的に基づいて前記第2のタスクセクションの実行を制御する制御セクションを含む、実行することを含む、
    前記方法。
  2. 上流のノードから下流のノードへの制御有向辺が、部分的な順序で、前記上流のノードによって表されるタスクが前記下流のノードによって表されるタスクに先行することを示す、請求項1に記載の方法。
  3. 1組のあり得る状態が、第1のタスクセクションが第1のタスクを実行した完了状態、第1のタスクセクションが第1のタスクを実行するのを待っている保留状態、及び第1のタスクセクションが第1のタスクを実行することを抑制された抑制状態を含む、請求項1又は2に記載の方法。
  4. 1組のあり得る状態が、第1のタスクセクションが第1のタスクを実行する過程にあるアクティブ状態を含む、請求項3に記載の方法。
  5. 制御セクションが、第2のタスクセクションが呼び出されるか否かを判定する論理を含む、請求項1〜4のいずれかに記載の方法。
  6. 論理が、フラグの値に基づいて第2のタスクセクションが呼び出されるか否かを判定する、請求項5に記載の方法。
  7. 論理が、第2のタスクを表すノードへの制御有向辺によって接続されるノードによって表されるすべてのタスクの状態に少なくとも部分的に基づいて第2のタスクセクションが呼び出されるか否かを判定する、請求項5に記載の方法。
  8. 論理が、第2のタスクを表すノードへの制御有向辺によって接続されるノードによって表されるすべてのタスクが抑制状態にある場合、第2のタスクセクションが呼び出されないと判定する、請求項7に記載の方法。
  9. 論理が、第2のタスクを表すノードへの制御有向辺によって接続されるノードによって表される少なくとも1つのタスクが完了状態であり、前記第2のタスクを表すノードへの制御有向辺によって接続されるノードによって表されるタスクのいずれも保留状態にない場合、第2のタスクセクションが呼び出されると判定する、請求項7又は8に記載の方法。
  10. 制御セクションが、1又は2以上の他のタスクに抑制状態を伝播するように記憶された状態情報を判定する論理を備える、請求項1に記載の方法。
  11. タスクを制御するための、コンピュータ可読記憶媒体に記憶されるコンピュータプログラムであって、コンピューティングシステムに、請求項1〜10のいずれかに記載の方法を実行させるための命令を含む、前記コンピュータプログラム。
  12. タスクを制御するためのコンピューティングシステムであって、
    グラフに基づくプログラムの仕様に関するデータ構造を記憶するデータ記憶システム
    請求項1〜10のいずれかに記載の方法を実行するように構成された少なくとも1つのプロセッサとを含む、前記コンピューティングシステム。
  13. タスクを制御するためのコンピューティングシステムであって、
    グラフに基づくプログラムの仕様に関するデータ構造を記憶するための手段であって、前記グラフに基づくプログラムの仕様が、タスクを表す複数のノードを含み、前記グラフに基づくプログラムの仕様が、前記ノードの間の有向辺を含前記有向辺が、(1)制御フローを表し、前記ノードによって表される複数のタスクの間の少なくとも部分的な順序を規定する関係を課す1又は2以上の制御有向辺であって、2つのリンクされたノードの間の制御フローを表す少なくとも1つの制御有向辺が、前記リンクされたノードがそれらのタスクに対応するサブルーチンを同時に実行することを抑制する、前記1又は2以上の制御有向辺、及び(2)データフローを表し、データ依存関係を課す1又は2以上のデータフロー有向辺であって、前記データフロー有向辺が、リンクされたノードが少なくとも部分的に同時にそれらのタスクに対応するサブルーチンを実行することを抑制しない、前記1又は2以上のデータフロー有向辺を含む前記手段と、前記グラフに基づくプログラムの仕様によって規定されたプログラムを実行するための手段とを含み、前記実行することが、
    第1のタスクに対応する第1のサブルーチンを実行することであって、前記第1のサブルーチンが、前記第1のタスクを実行するための第1のタスクセクションを含む、実行すること、
    前記第1のタスクセクションが前記第1のタスクを実行するのを待っている保留状態、及び前記第1のタスクセクションが前記第1のタスクを実行することを抑制された抑制状態を含む1組のあり得る状態から選択される前記第1のタスクの状態を示す状態情報を記憶すること、並びに
    第2のタスクに対応する第2のサブルーチンを実行することであって、前記第2のサブルーチンが、前記第2のタスクを実行するための第2のタスクセクション、及び前記記憶された状態情報によって示された前記第1のタスクの前記状態に少なくとも部分的に基づいて前記第2のタスクセクションの実行を制御する制御セクションを含む、実行することを含む、
    前記コンピューティングシステム。
JP2016510752A 2013-04-23 2014-04-23 コンピューティングシステムによって実行されるタスクの制御 Active JP6469084B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201361815052P 2013-04-23 2013-04-23
US61/815,052 2013-04-23
PCT/US2014/035098 WO2014176313A1 (en) 2013-04-23 2014-04-23 Controlling tasks performed by a computing system

Publications (3)

Publication Number Publication Date
JP2016520912A JP2016520912A (ja) 2016-07-14
JP2016520912A5 JP2016520912A5 (ja) 2017-06-08
JP6469084B2 true JP6469084B2 (ja) 2019-02-13

Family

ID=50884503

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2016510752A Active JP6469084B2 (ja) 2013-04-23 2014-04-23 コンピューティングシステムによって実行されるタスクの制御
JP2016510749A Active JP6469083B2 (ja) 2013-04-23 2014-04-23 コンピューティングシステムによって実行されるタスクの制御
JP2019004419A Active JP6761878B2 (ja) 2013-04-23 2019-01-15 コンピューティングシステムによって実行されるタスクの制御

Family Applications After (2)

Application Number Title Priority Date Filing Date
JP2016510749A Active JP6469083B2 (ja) 2013-04-23 2014-04-23 コンピューティングシステムによって実行されるタスクの制御
JP2019004419A Active JP6761878B2 (ja) 2013-04-23 2019-01-15 コンピューティングシステムによって実行されるタスクの制御

Country Status (8)

Country Link
US (3) US9665396B2 (ja)
EP (3) EP3113017B1 (ja)
JP (3) JP6469084B2 (ja)
KR (2) KR102251932B1 (ja)
CN (3) CN105164639B (ja)
AU (3) AU2014257132B2 (ja)
CA (3) CA2909751C (ja)
WO (2) WO2014176313A1 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3113017B1 (en) 2013-04-23 2018-04-18 AB Initio Technology LLC Controlling tasks performed by a computing system
US9342415B2 (en) * 2014-07-14 2016-05-17 International Business Machines Corporation Run-to-completion thread model for software bypass fail open for an inline intrusion protection system
KR102375349B1 (ko) 2014-09-02 2022-03-16 아브 이니티오 테크놀로지 엘엘시 연관된 태스크들을 제어하기 위한 그래프 기반 프로그램 명세의 구성요소들의 실행 상태 관리
EP3189418B1 (en) 2014-09-02 2022-02-23 AB Initio Technology LLC Visually specifying subsets of components in graph-based programs through user interactions
US9933918B2 (en) 2014-09-02 2018-04-03 Ab Initio Technology Llc Specifying control and data connections in graph-based programs
CA2959534C (en) 2014-09-02 2021-06-29 Ab Initio Technology Llc Compiling graph-based program specifications
US9760406B2 (en) 2014-09-02 2017-09-12 Ab Initio Technology Llc Controlling data processing tasks
CN105988907B (zh) * 2015-01-29 2019-04-02 深圳市腾讯计算机系统有限公司 业务监控方法和装置
US10229150B2 (en) * 2015-04-23 2019-03-12 Splunk Inc. Systems and methods for concurrent summarization of indexed data
US11093878B2 (en) * 2015-07-01 2021-08-17 Oracle International Corporation System and method for providing temporal dependencies between tasks
KR101767418B1 (ko) * 2015-10-21 2017-08-11 현대오트론 주식회사 임베디드 운영체제에서 로직의 우선순위 보장 방법 및 그 장치
CN105653905B (zh) * 2015-12-28 2018-07-24 西北大学 一种基于api安全属性隐藏与攻击威胁监控的软件保护方法
US10152349B1 (en) * 2016-09-27 2018-12-11 Juniper Networks, Inc. Kernel scheduling based on precedence constraints and/or artificial intelligence techniques
US10261799B2 (en) * 2017-02-28 2019-04-16 International Business Machines Corporation Programmatic implicit multithreading
KR101867866B1 (ko) * 2017-03-23 2018-06-18 주식회사 노트스퀘어 프로그램의 동적 최적화 방법 및 장치
CN108519915A (zh) * 2018-04-12 2018-09-11 北京邮电大学 流量任务调度方法和装置
CN108874394A (zh) * 2018-04-17 2018-11-23 上海达野智能科技有限公司 机器人用户程序的解释方法及解释装置
CN109656568B (zh) * 2018-12-28 2022-04-05 黑龙江省工业技术研究院 按需的可约程序控制流图图可达性索引方法
US10817220B2 (en) * 2019-01-31 2020-10-27 EMC IP Holding Company LLC Sharing processor cores in a multi-threading block i/o request processing data storage system
CN111027196B (zh) * 2019-12-03 2023-04-28 南方电网科学研究院有限责任公司 一种电力设备的仿真分析任务处理方法、装置及存储介质
US11080111B1 (en) * 2020-02-24 2021-08-03 Nvidia Corporation Technique for sharing context among multiple threads
CN114237769A (zh) * 2021-12-14 2022-03-25 北京人大金仓信息技术股份有限公司 一种程序的执行方法、装置、设备及存储介质

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5471622A (en) 1989-10-04 1995-11-28 Paralogic, Inc. Run-time system having nodes for identifying parallel tasks in a logic program and searching for available nodes to execute the parallel tasks
US5394549A (en) 1992-12-17 1995-02-28 International Business Machines Corporation Task spawning responsive to relational database conditions and operations
CA2095311A1 (en) 1993-04-30 1994-10-31 Richard E. Swagerman Conversation management routine for co-operative processing applications
US5966072A (en) 1996-07-02 1999-10-12 Ab Initio Software Corporation Executing computations expressed as graphs
GB2335051B (en) 1998-05-19 2000-01-19 Bookham Technology Ltd Optical device for splitting up a multi-wavelength light beam
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
US6823517B1 (en) * 2000-01-27 2004-11-23 Andrew E. Kalman Multi-tasking-real-time operating system for microprocessors with limited memory that constrains context switching to occur only at task level
US6316958B1 (en) * 2000-05-16 2001-11-13 Xilinx, Inc. Programmable logic device with adjustable length delay line
US7685602B1 (en) 2000-06-05 2010-03-23 Teradata Us, Inc. Controlling software components in a multi-node processing system
DE10065498B4 (de) * 2000-12-28 2005-07-07 Robert Bosch Gmbh Verfahren und Vorrichtung zur Rekonstruktion des Prozessablaufs eines Steuerprogramms
US7167850B2 (en) * 2002-10-10 2007-01-23 Ab Initio Software Corporation Startup and control of graph-based computation
US6983456B2 (en) * 2002-10-31 2006-01-03 Src Computers, Inc. Process for converting programs in high-level programming languages to a unified executable for hybrid computing platforms
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
JP2004326486A (ja) * 2003-04-25 2004-11-18 Matsushita Electric Ind Co Ltd タスク管理装置
US7467383B2 (en) 2004-03-08 2008-12-16 Ab Initio Software Llc System for controlling task execution using a graphical representation of task dependency
JP2005258920A (ja) 2004-03-12 2005-09-22 Fujitsu Ltd マルチスレッド実行方法、マルチスレッド実行プログラム、およびマルチスレッド実行装置
EP1783604A3 (en) * 2005-11-07 2007-10-03 Slawomir Adam Janczewski Object-oriented, parallel language, method of programming and multi-processor computer
JP2007193529A (ja) * 2006-01-18 2007-08-02 Matsushita Electric Ind Co Ltd 半導体集積回路の高位合成方法
US7870556B2 (en) * 2006-05-16 2011-01-11 Ab Initio Technology Llc Managing computing resources in graph-based computations
KR20080068385A (ko) * 2007-01-19 2008-07-23 슈어소프트테크주식회사 소프트웨어 테스트 시스템, 방법 및 그 방법을 실행하기위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
US20080282246A1 (en) * 2007-05-07 2008-11-13 Danny Dolev Compiler aided ticket scheduling of tasks in a computing system
CA2965896C (en) * 2007-07-26 2020-01-07 Ab Initio Technology Llc Transactional graph-based computation with error handling
US8589925B2 (en) * 2007-10-25 2013-11-19 Microsoft Corporation Techniques for switching threads within routines
CN101446909B (zh) * 2007-11-30 2011-12-28 国际商业机器公司 用于管理任务事件的方法和系统
AU2009219299B2 (en) 2008-02-26 2015-05-07 Ab Initio Technology Llc Graphic representations of data relationships
WO2009132047A2 (en) * 2008-04-21 2009-10-29 Zytron Corp. Collaborative and proactive defense of networks and information systems
US9886319B2 (en) * 2009-02-13 2018-02-06 Ab Initio Technology Llc Task managing application for performing tasks based on messages received from a data processing application initiated by the task managing application
JP5390947B2 (ja) * 2009-06-10 2014-01-15 日本放送協会 ジョブ管理システム、ジョブ管理装置及びそのプログラム
US8561041B1 (en) * 2009-06-22 2013-10-15 The Mathworks, Inc. Parallel execution of function calls in a graphical model
US8667329B2 (en) * 2009-09-25 2014-03-04 Ab Initio Technology Llc Processing transactions in graph-based applications
US8250576B2 (en) 2009-09-30 2012-08-21 Microsoft Corporation Structured task hierarchy for a parallel runtime
US8572618B2 (en) * 2010-05-07 2013-10-29 Oracle International Corporation Event driven change injection and dynamic extensions to a business process execution language process
WO2012016078A1 (en) * 2010-07-30 2012-02-02 National Instruments Corporation Developing programs in a graphical specification and constraint language
JP2012108576A (ja) * 2010-11-15 2012-06-07 Toyota Motor Corp マルチコアプロセッサ、処理実行方法、プログラム
US20130110576A1 (en) * 2011-10-28 2013-05-02 Infosys Limited System and method for checking the conformance of the behavior of a process
US20130259137A1 (en) * 2012-03-30 2013-10-03 Google Inc. System and Method for Multi-Core Hardware Video Encoding And Decoding
CN102708053B (zh) * 2012-04-27 2017-10-20 北京邮电大学 程序路径中确定函数调用的上下文环境影响的方法
CN102819218B (zh) * 2012-07-19 2015-04-29 西安交通大学 基于事件控制函数的离散事件系统监控器及其控制方法
US9832068B2 (en) * 2012-12-17 2017-11-28 Microsoft Technology Licensing, Llc Reachability-based coordination for cyclic dataflow
US9286119B2 (en) * 2013-02-13 2016-03-15 Nvidia Corporation System, method, and computer program product for management of dependency between tasks
EP3113017B1 (en) 2013-04-23 2018-04-18 AB Initio Technology LLC Controlling tasks performed by a computing system
CN103559044A (zh) * 2013-11-20 2014-02-05 无锡儒安科技有限公司 无线传感器网络控制代码形式化方法和装置

Also Published As

Publication number Publication date
JP6469083B2 (ja) 2019-02-13
EP3113017A1 (en) 2017-01-04
US20170024250A1 (en) 2017-01-26
CN105164638A (zh) 2015-12-16
CN109614170A (zh) 2019-04-12
JP2016520911A (ja) 2016-07-14
EP2989541A1 (en) 2016-03-02
US10565005B2 (en) 2020-02-18
KR102251932B1 (ko) 2021-05-13
CN105164638B (zh) 2019-09-27
CN109614170B (zh) 2022-02-25
CN105164639A (zh) 2015-12-16
EP2989540B1 (en) 2021-06-23
AU2014257135B2 (en) 2020-01-16
WO2014176310A3 (en) 2015-03-05
CN105164639B (zh) 2018-11-09
CA2909748A1 (en) 2014-10-30
EP3113017B1 (en) 2018-04-18
WO2014176313A1 (en) 2014-10-30
CA2909748C (en) 2021-09-21
CA2909751A1 (en) 2014-10-30
WO2014176310A2 (en) 2014-10-30
US20140317632A1 (en) 2014-10-23
EP2989540A2 (en) 2016-03-02
EP2989541B1 (en) 2021-07-07
CA3125705C (en) 2022-02-15
AU2014257132A1 (en) 2015-11-12
JP2016520912A (ja) 2016-07-14
AU2018203641B2 (en) 2019-09-26
JP2019071120A (ja) 2019-05-09
AU2018203641A1 (en) 2018-06-14
KR102305084B1 (ko) 2021-09-24
US9665396B2 (en) 2017-05-30
US10489191B2 (en) 2019-11-26
KR20160004335A (ko) 2016-01-12
KR20160004334A (ko) 2016-01-12
JP6761878B2 (ja) 2020-09-30
US20140317629A1 (en) 2014-10-23
CA2909751C (en) 2021-02-16
AU2014257135A1 (en) 2015-11-12
CA3125705A1 (en) 2014-10-30
AU2014257132B2 (en) 2018-03-29
WO2014176310A4 (en) 2015-04-23

Similar Documents

Publication Publication Date Title
JP6761878B2 (ja) コンピューティングシステムによって実行されるタスクの制御
US8661441B2 (en) Transaction load reduction for process completion
JP6763072B2 (ja) データ処理グラフのコンパイル
CN109901917A (zh) 实时操作系统调度方法及装置、计算机可读存储介质

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170421

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170421

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180228

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180530

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180702

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20181213

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190115

R150 Certificate of patent or registration of utility model

Ref document number: 6469084

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250