【課題を解決するための手段】
【0004】
一態様においては、概して、コンピューティングシステムによって実行されるタスクを制御するための方法が、複数のタスクの間の少なくとも部分的な順序を規定する順序情報を受信するステップと、順序情報に少なくとも部分的に基づいてタスクの少なくとも一部を実行するための命令を少なくとも1つのプロセッサを用いて生成するステップとを含む。生成するステップは、第1のタスクに対応する第1のサブルーチンを実行するための命令を記憶することであって、第1のサブルーチンが、第2のタスクに対応する少なくとも第2のサブルーチンの実行を制御する第1の制御セクション(control section)を含み
、第1の制御セクションが、第2のタスクに関連する状態情報を変更し、変更された状態情報に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成された関数を含む、記憶すること、並びに第2のサブルーチンを実行するための命令を記憶することであって、第2のサブルーチンが、第2のタスクを実行するためのタスクセクション(task section)、及び第3のタスクに対応する第3のサブルーチンの実行を制御する第2の制御セクションを含む、記憶することを含む。
【0005】
態様は、以下の特徴のうちの1又は2以上を含み得る。
【0006】
順序情報は、それぞれのタスクを表すノードのペアの間の有向辺を含む制御フローグラフを含み、上流のノードから下流のノードへの有向辺が、部分的な順序で上流のノードによって表されるタスクが下流のノードによって表されるタスクに先行することを示す。
【0007】
制御フローグラフは、第1のタスクを表す第1のノードと第2のタスクを表す第2のノードとの間の有向辺、及び第2のノードと第3のタスクを表す第3のノードとの間の有向
辺を含む。
【0008】
関数は、第2のタスクに関連するカウンタをデクリメント又はインクリメントし、カウンタの値に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成される。
【0009】
関数は、カウンタをアトミックにデクリメント又はインクリメントし、カウンタの値を読むアトミックな操作を実行するように構成される。
【0010】
変更された状態情報は、第2のタスクを特定する引数を用いた関数の前の呼び出しの履歴を含む。
【0011】
関数は、複数の異なる関数のうちの1つであり、状態情報は、第2のタスクを特定する引数を用いた複数の異なる関数のいずれかの前の呼び出しの履歴を捕捉する。
【0012】
第2の制御セクションは、タスクを実行するためのタスクセクションが呼び出されるか否かを判定する論理を含む。
【0013】
論理は、第2のタスクに関連するフラグの値に基づいて、タスクを実行するためのタスクセクションが呼び出されるか否かを判定する。
【0014】
第1の制御セクションは、少なくとも、第2のタスクに対応する第2のサブルーチン及び第4のタスクに対応する第4のサブルーチンの実行を制御する。
【0015】
順序情報は、部分的な順序で第1のタスクが第2のタスクに先行することを示し、部分的な順序で第1のタスクが第4のタスクに先行することを示し、部分的な順序で互いに対する第2のタスク及び第4のタスクの順序を制約しない。
【0016】
第1の制御セクションは、第2のサブルーチンを実行するための新しいプロセスをスポーニングすべきか否かを判定する第1の関数と、第1のサブルーチンを実行した同じプロセスを用いて第4のサブルーチンの実行を開始する第2の関数とを含む。
【0017】
別の態様においては、概して、コンピュータプログラムが、タスクを制御するために、コンピュータ可読記憶媒体に記憶される。コンピュータプログラムは、コンピューティングシステムに、複数のタスクの間の少なくとも部分的な順序を規定する順序情報を受信させ、順序情報に少なくとも部分的に基づいてタスクの少なくとも一部を実行するための命令を生成するための命令を含む。生成することは、第1のタスクに対応する第1のサブルーチンを実行するための命令を記憶することであって、第1のサブルーチンが、第2のタスクに対応する少なくとも第2のサブルーチンの実行を制御する第1の制御セクションを含み、第1の制御セクションが、第2のタスクに関連する状態情報を変更し、変更された状態情報に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成された関数を含む、記憶すること、並びに第2のサブルーチンを実行するための命令を記憶することであって、第2のサブルーチンが、第2のタスクを実行するためのタスクセクション、及び第3のタスクに対応する第3のサブルーチンの実行を制御する第2の制御セクションを含む、記憶することを含む。
【0018】
別の態様においては、概して、タスクを制御するためのコンピューティングシステムが、複数のタスクの間の少なくとも部分的な順序を規定する順序情報を受信するように構成された入力デバイス又はポートと、順序情報に少なくとも部分的に基づいてタスクの少なくとも一部を実行するための命令を生成するように構成された少なくとも1つのプロセッ
サとを含む。生成することは、第1のタスクに対応する第1のサブルーチンを実行するための命令を記憶することであって、第1のサブルーチンが、第2のタスクに対応する少なくとも第2のサブルーチンの実行を制御する第1の制御セクションを含み、第1の制御セクションが、第2のタスクに関連する状態情報を変更し、変更された状態情報に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成された関数を含む、記憶すること、並びに第2のサブルーチンを実行するための命令を記憶することであって、第2のサブルーチンが、第2のタスクを実行するためのタスクセクション、及び第3のタスクに対応する第3のサブルーチンの実行を制御する第2の制御セクションを含む、記憶することを含む。
【0019】
別の態様においては、概して、タスクを制御するためのコンピューティングシステムが、複数のタスクの間の少なくとも部分的な順序を規定する順序情報を受信するための手段と、順序情報に少なくとも部分的に基づいてタスクの少なくとも一部を実行するための命令を生成するための手段とを含む。生成することは、第1のタスクに対応する第1のサブルーチンを実行するための命令を記憶することであって、第1のサブルーチンが、第2のタスクに対応する少なくとも第2のサブルーチンの実行を制御する第1の制御セクションを含み、第1の制御セクションが、第2のタスクに関連する状態情報を変更し、変更された状態情報に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成された関数を含む、記憶すること、並びに第2のサブルーチンを実行するための命令を記憶することであって、第2のサブルーチンが、第2のタスクを実行するためのタスクセクション、及び第3のタスクに対応する第3のサブルーチンの実行を制御する第2の制御セクションを含む、記憶することを含む。
【0020】
別の態様においては、概して、タスクを実行するための方法が、複数のタスクを実行するための命令を少なくとも1つのメモリに記憶するステップであって、命令が、タスクの少なくとも一部のそれぞれに関して、そのタスクを実行するためのタスクセクション、及び後続のタスクのサブルーチンの実行を制御する制御セクションを含むそれぞれのサブルーチンを含む、記憶するステップと、記憶されたサブルーチンの少なくとも一部を少なくとも1つのプロセッサによって実行するステップとを含む。実行することは、第1のタスクに関する第1のサブルーチンを実行するための第1のプロセスをスポーニングすることであって、第1のサブルーチンが、第1のタスクセクション及び第1の制御セクションを含む、スポーニングすること、並びに第1のタスクセクションが返った後に、第2のサブルーチンを実行するための第2のプロセスをスポーニングすべきか否かを判定する第1の制御セクションに含まれる少なくとも1つの関数を呼び出すことを含む。
【0021】
態様は、以下の特徴のうちの1又は2以上を含み得る。
【0022】
関数は、第2のサブルーチンに関連するカウンタをデクリメントし、カウンタの値に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成される。
【0023】
関数は、第2のサブルーチンに対応する第2のタスクを特定する引数を用いて呼び出されるときに、第2のタスクを特定する引数を用いた関数の前の呼び出しの履歴を捕捉する状態情報に基づいて第2のサブルーチンの実行を開始すべきか否かを判定するように構成される。
【0024】
関数は、複数の異なる関数のうちの1つであり、状態情報は、第2のタスクを特定する引数を用いた複数の異なる関数のいずれかの前の呼び出しの履歴を捕捉する。
【0025】
関数は、第1のプロセスにおいて第2のサブルーチンの実行を開始し、第2のサブルーチンの実行時間が所定の閾値を超えることに応じて、第2のサブルーチンの実行を続ける
ための第2のプロセスをスポーニングするように構成される。
【0026】
関数は、第1のプロセスに関連付けられたスタックフレームを第2のプロセスに与えるように構成される。
【0027】
関数は、第1のプロセスが第2のプロセスと同時に実行され続けることを可能にするために第2のプロセスをスポーニングした後に返るように構成される。
【0028】
第1の制御セクションは、第1のタスクセクションが呼び出されるか否かを判定する論理を含む。
【0029】
論理は、第1のタスクに関連するフラグの値に基づいて、第1のタスクセクションが呼び出されるか否かを判定する。
【0030】
第2のサブルーチンは、第2のタスクに対応し、第1の制御セクションは、第1のタスク及び第2のタスクを含む複数のタスクの間の少なくとも部分的な順序を規定する順序情報に少なくとも部分的に基づく。
【0031】
順序情報は、それぞれのタスクを表すノードのペアの間の有向辺を含む制御フローグラフを含み、上流のノードから下流のノードへの有向辺が、部分的な順序で上流のノードによって表されるタスクが下流のノードによって表されるタスクに先行することを示す。
【0032】
別の態様においては、概して、コンピュータプログラムが、タスクを実行するために、コンピュータ可読記憶媒体に記憶される。コンピュータプログラムは、コンピューティングシステムに、複数のタスクを実行するための命令を記憶させ、命令が、タスクの少なくとも一部のそれぞれに関して、そのタスクを実行するためのタスクセクション、及び後続のタスクのサブルーチンの実行を制御する制御セクションを含むそれぞれのサブルーチンを含み、記憶されたサブルーチンの少なくとも一部を実行させる命令を含む。実行することは、第1のタスクに関する第1のサブルーチンを実行するための第1のプロセスをスポーニングすることであって、第1のサブルーチンが、第1のタスクセクション及び第1の制御セクションを含む、スポーニングすること、並びに第1のタスクセクションが返った後に、第2のサブルーチンを実行するための第2のプロセスをスポーニングすべきか否かを判定する第1の制御セクションに含まれる少なくとも1つの関数を呼び出すことを含む。
【0033】
別の態様においては、概して、タスクを実行するためのコンピューティングシステムが、複数のタスクを実行するための命令を記憶する少なくとも1つのメモリであって、命令が、タスクの少なくとも一部のそれぞれに関して、そのタスクを実行するためのタスクセクション、及び後続のタスクのサブルーチンの実行を制御する制御セクションを含むそれぞれのサブルーチンを含む、少なくとも1つのメモリと、記憶されたサブルーチンの少なくとも一部を実行するように構成された少なくとも1つのプロセッサとを含む。実行することは、第1のタスクに関する第1のサブルーチンを実行するための第1のプロセスをスポーニングすることであって、第1のサブルーチンが、第1のタスクセクション及び第1の制御セクションを含む、スポーニングすること、並びに第1のタスクセクションが返った後に、第2のサブルーチンを実行するための第2のプロセスをスポーニングすべきか否かを判定する第1の制御セクションに含まれる少なくとも1つの関数を呼び出すことを含む。
【0034】
別の態様においては、概して、タスクを実行するためのコンピューティングシステムが、複数のタスクを実行するための命令を記憶するための手段であって、命令が、タスクの
少なくとも一部のそれぞれに関して、そのタスクを実行するためのタスクセクション、及び後続のタスクのサブルーチンの実行を制御する制御セクションを含むそれぞれのサブルーチンを含む、手段と、記憶されたサブルーチンの少なくとも一部を実行するための手段とを含む。実行することは、第1のタスクに関する第1のサブルーチンを実行するための第1のプロセスをスポーニングすることであって、第1のサブルーチンが、第1のタスクセクション及び第1の制御セクションを含む、スポーニングすること、並びに第1のタスクセクションが返った後に、第2のサブルーチンを実行するための第2のプロセスをスポーニングすべきか否かを判定する第1の制御セクションに含まれる少なくとも1つの関数を呼び出すことを含む。
【0035】
態様は、以下の利点のうちの1又は2以上を含む可能性がある。
【0036】
タスクがコンピューティングシステムによって実行されるとき、タスクを実行するための新しいプロセスをスポーニングすることに関連し、タスクのプロセスと、スケジューラ、又はタスクの依存関係及び順序を維持するためのその他の中心的なプロセスとの間を行ったり来たり切り替えることに関連する処理時間のコストが存在する。本明細書において説明される技術は、計算効率の良い方法で、新しいプロセスが選択的にスポーニングされること、又は実行されているプロセスが選択的に再利用されることを可能にする。コンパイラは、タスクを実行するためのサブルーチンに追加される比較的少ない量のコードに基づく分散型のスケジューリングメカニズムによって、集中型のスケジューラにのみ頼る必要性を避けることができる。タスクの完了が、自動的に、同時実行及び条件付き論理を可能にする方法で、制御フローグラフなどの入力の制約に従ってコンピューティングシステムがその他のタスクを実行することを引き起こす。タスクに関連するコンパイラにより生成されたコードが、カウンタ及びフラグに記憶された状態情報に基づいてその他のタスクを実行すべきか否かを判定するための関数をランタイムで呼び出す。したがって、コンパイラによって生成されたコードが、タスクのサブルーチンの呼び出しをランタイムで制御する状態機械を効率的に実装している。スケジューラへの及びスケジューラからの切り替えの余計なオーバーヘッドなしに、コンピューティングシステムは、細かい粒度の潜在的に同時のタスクをより効率的に実行することができる。
【0037】
本発明のその他の特徴及び利点は、以下の説明及び請求項から明らかになるであろう。