(57)【特許請求の範囲】
【請求項１】
少なくとも一つの処理エンジン（２４）によってタスクを実行するために使用するコンピュータによって実行される方法であって、
少なくとも一つの処理エンジン（２４）を有する少なくとも一つのプロセッサ（１４）に関連するタスク配分メトリックを決定するステップであって、前記少なくとも一つの処理エンジン（２４）が各々が一又は複数のスレッド（３１）を有する複数の処理コアを有する、前記タスク配分メトリックを決定するステップと、
前記タスクを前記一又は複数のスレッド（３１）のうちの一つに割り当てるタスク割当を実行するステップであって、タスク配分メトリックに従って、
（ａ）負荷バランス方法か（ｂ）コアアフィニティ方法のいずれかを用いる、前記タスク割当を実行するステップとを含み、
前記負荷バランス方法は、前記タスク配分メトリックが、前記少なくとも一つのプロセッサ（１４）に関連する負荷バランスが第１閾値を下回ることを示す場合に実行されるものであり、
前記負荷バランス方法は、
前記少なくとも一つの処理エンジン（２４）によって、前記タスクが再入可能タスクであるか否かを決定するステップであって、前記タスクが前記少なくとも一つの処理エンジン（２４）に関連する前記一又は複数のスレッド（３１）のうちの任意の一つに以前割り当てられていた場合に前記タスクが再入可能タスクであるとされる、前記タスクが再入可能タスクであるか否かを決定するステップと、
前記タスクが再入可能タスクである場合、前記少なくとも一つの処理エンジン（２４）によって、前記タスクの停止基準が満たされたか否かを決定するステップであって、該停止基準は該タスクに従属するいくつかまたはすべてのサブタスクが完了したかどうかを含む、前記タスクの停止基準が満たされたか否かを決定するステップと、
再入可能タスクである前記タスクの前記停止基準が満たされていない場合に、前記少なくとも一つの処理エンジン（２４）に関連するタスクのキュー（２６）に前記タスクを再入させた後に、前記タスクが割り当てられていた前記一又は複数のスレッドのうちの一つを解放するステップと、を含み、
前記コアアフィニティ方法は、前記タスク配分メトリックが、前記少なくとも一つのプロセッサ（１４）に関連するコア（２９）アフィニティが第２閾値を下回ることを示す場合に実行されるものであり、
前記コアアフィニティ方法は、
前記少なくとも一つの処理エンジン（２４）によって、前記タスクがメインタスクであるか否かを決定するステップであって、メインタスクとは少なくとも一つのサブタスクを有するが他のタスクのサブタスクでないものである、前記タスクがメインタスクであるか否かを決定するステップと、
前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン（２４）によって前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップと、
前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされている場合に、メインタスクではない前記タスクが割り当てられていたスレッドと同じスレッドに、前記親タスクを割り当てるステップと、を含む、方法。
【請求項２】
前記負荷バランス方法は、さらに、
前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定するステップと、
前記タスクが分解可能である場合に、前記少なくとも一つの処理エンジン（２４）によって前記タスクの複数のサブタスクを前記キュー（２６）に挿入するステップを含む、請求項１に記載の方法。
【請求項３】
前記負荷バランス方法は、さらに、前記タスクの前記停止基準が満たされた場合に、前記少なくとも一つの処理エンジン（２４）によって少なくとも一つの蓄積タスクを実行するステップを含み、
前記コアアフィニティ方法における前記親タスクを割り当てるステップの後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するステップを含む、請求項１または２に記載の方法。
【請求項４】
前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン（２４）によって前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップが、前記親タスクに従属する複数のサブタスクのそれぞれが完了したか否かを決定することを含み、
前記コアアフィニティ方法は、さらに、
前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされていない場合、メインタスクではない前記タスクの状態を完了に設定し、
メインタスクではない前記タスクに割り当てられていた前記一又は複数のスレッド（３１）のうちの一つを解放するステップを含む、請求項１乃至３のいずれか１項に記載の方法。
【請求項５】
前記コアアフィニティ方法は、さらに、
前記タスクがメインタスクか否かを決定する前に行われる、前記タスクが複数のサブタスクに分割可能であるか否かを決定するステップと、
前記タスクが分割可能である場合、前記タスクの前記複数のサブタスクをタスクのキュー（２６）に挿入するステップを含む、請求項４に記載の方法。
【請求項６】
タスクの実行において使用するコンピューティング装置であって、前記コンピューティング装置は、
タスクのキュー（２６）を記憶するメモリ（１２）装置と、
前記メモリ（１２）装置に結合し、それぞれが一又は複数のスレッド（３１）を有する複数の処理コアを有する少なくとも一つの処理エンジン（２４）を含むプロセッサ（１４）とを含み、
前記少なくとも一つの処理エンジン（２４）はタスクマネージャ（２７）とキューマネージャ（２５）を含み、
前記キューマネージャ（２５）はタスクの前記キュー（２６）を管理するように構成されており、
前記タスクマネージャ（２７）は前記プロセッサ（１４）に関連するタスク配分メトリックを決定するように構成されており、
前記タスクマネージャ（２７）は、前記タスクを前記一又は複数のスレッド（３１）のうちの一つに割り当てるに際して、タスク配分メトリックに従って、（ａ）負荷バランス方法か（ｂ）コアアフィニティ方法のいずれかを用いるように構成されており、
前記負荷バランス方法は、前記タスク配分メトリックが、少なくとも一つの前記プロセッサ（１４）に関連する負荷バランスが第１閾値を下回ることを示す場合に、前記タスクマネージャ（２７）に実行されるものであり、
前記負荷バランス方法は、
前記タスクが再入可能タスクであるか否かを決定するステップであって、前記タスクが前記少なくとも一つの処理エンジン（２４）に関連する前記一又は複数のスレッド（３１）のうちの任意の一つに以前割り当てられていた場合に前記タスクが再入可能タスクであるとされる、前記タスクが再入可能タスクであるか否かを決定するステップと、
前記タスクが再入可能タスクである場合、前記タスクの停止基準が満たされたか否かを決定するステップであって、該停止基準は該タスクに従属するいくつかまたはすべてのサブタスクが完了したかどうかを含む、前記タスクの停止基準が満たされたか否かを決定するステップと、
再入可能タスクである前記タスクの前記停止基準が満たされていない場合に、前記キューマネージャ（２５）を介して、前記少なくとも一つの処理エンジン（２４）に関連するタスクのキュー（２６）に前記タスクを再入させた後に、前記タスクが割り当てられていた前記一又は複数のスレッド（３１）のうちの一つを解放するステップと、を含み、
前記コアアフィニティ方法は、前記タスク配分メトリックが、少なくとも一つの前記プロセッサ（１４）に関連するコア（２９）アフィニティが第２閾値を下回ることを示す場合に、前記タスクマネージャ（２７）に実行されるものであり、
前記コアアフィニティ方法は、
前記タスクがメインタスクであるか否かを決定するステップであって、メインタスクとは少なくとも一つのサブタスクを有するが他のタスクのサブタスクでないものである、前記タスクがメインタスクであるか否かを決定するステップと、
前記タスクがメインタスクでない場合、前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップと、
前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされている場合に、メインタスクではない前記タスクが割り当てられていたスレッドと同じスレッドに、前記親タスクを割り当てるステップと、を含む、コンピューティング装置。
【請求項７】
前記負荷バランス方法は、さらに、
前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定するステップと、
前記タスクが分解可能である場合に、前記キューマネージャ（２５）を介して、前記タスクの複数のサブタスクを前記キュー（２６）に挿入するステップを含む、請求項６に記載のコンピューティング装置。
【請求項８】
前記タスクマネージャ（２７）がさらに、複数の前記サブタスクのうちの一つを前記一又は複数のスレッド（３１）のうちの２番目のスレッドに割り当てて、複数の前記サブタスクのうちの前記一つが再入可能タスクであるか否かを決定するように構成されており、
前記スレッドは、前記停止基準が満たされた時に、少なくとも一つの蓄積タスクを実行するためのものである、請求項６又は７に記載のコンピューティング装置。
【請求項９】
前記コアアフィニティ方法は、さらに、
前記タスクがメインタスクか否かを決定する前に行われる、前記タスクが複数のサブタスクに分割可能であるか否かを決定するステップと、
前記タスクが分割可能である場合、前記キューマネージャ（２５）を介して、前記タスクの前記複数のサブタスクをタスクの前記キュー（２６）に挿入するステップとを含み、
前記スレッドは、前記コアアフィニティ方法における前記親タスクを割り当てるステップの後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するステップを実行するためのものである、請求項６に記載のコンピューティング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は概して、少なくとも一つの処理エンジンによってタスクを実行するために使用するシステム及び方法に関するものである。
【背景技術】
【０００２】
プロセッサは概して、プロセッサに関連するオペレーティングシステムによって提供されるスレッドの使用を通してタスクを実行することが知られている。スレッドはオペレーティングシステムによって生成されるタスク、又は実行されるタスクのキューからタスクを行って、計算環境において一又は複数の計算、作業、工程、アクション及び／又は手順を達成する。
【０００３】
しばしば、オペレーティングシステムはマルチスレッドを提供し、マルチスレッドにはそれらによって実行される様々な異なるタスクが割り当てられている。既知のオペレーティングシステムは、タスクを実行するスレッドにタスクを割り当てる。様々な実装形態において、タスクは一又は複数の他のタスク、又はサブタスクに依存する。タスクがスレッドに割り当てられた時に、全て必要な依存タスク及び／又はサブタスクが完了して、スレッドがタスクを実行することができるようになるまで、スレッドはタスクで占有されている。それ自体がマルチプルタスクに分割されたマルチプルタスクにタスクが分割されると、依存タスクが実行されている間、一又は複数のタスクはスレッドに長期間割り当てられる。タスク又はサブタスクがスレッドに割り当てられる時間、及び他のタスクが完了するまでの待機時間により、しばしばプロセッサの使用が非効率となり、ある場合にはスレッド飢餓状態につながる。
【発明の概要】
【０００４】
ある態様では、少なくとも一つの処理エンジンによってタスクを実行するために使用する方法が提供されている。本方法は、少なくとも一つの処理エンジンを有する少なくとも一つのプロセッサに関連するタスク配分メトリックを決定することを含む。少なくとも一つの処理エンジンは、一又は複数のスレッドを有する。本方法はさらに、タスクを一又は複数のスレッドのうちの一つに割り当て、タスク配分メトリックが、少なくとも一つのプロセッサに関連する負荷バランスが第１閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクが少なくとも一つの処理エンジンに関連する一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定することを含む。本方法はまた、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンに関連するタスクのキューにタスクを再入させることも含む。本方法は、タスク配分メトリックが、少なくとも一つのプロセッサに関連するコアアフィニティが第２閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクがメインタスクであるか否かを決定し、タスクがメインタスクではない場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの一つのスレッドにプルすることを含む。 
【０００５】
別の態様では、タスクを実行するために使用するコンピューティング装置が提供されている。コンピューティング装置は、タスクのキューを記憶するメモリ装置と、メモリ装置に関連し、一又は複数のスレッドを有する少なくとも一つの処理エンジンを含むプロセッサを含む。少なくとも一つの処理エンジンは、タスクマネージャと、前記タスクのキューを管理するように構成されたキューマネージャを含む。タスクマネージャは、前記プロセッサに関連し、タスクを一又は複数のスレッドのうちの一つのスレッドに割り当てるタスク配分メトリックを決定するように構成されている。タスクマネージャは、タスク配分メトリックが前記プロセッサに関連する負荷バランスが第１閾値を下回ることを示す場合、タスクが前記一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定し、タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合、前記キューマネージャを介してタスクをタスクのキューに再入させるように構成されている。タスクマネージャは、タスク配分メトリックが前記プロセッサに関連するコアアフィニティが第２閾値を下回ることを示す場合に、タスクがメインタスクであるか否かを決定し、タスクがメインタスクではない場合、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの前記一つにプルするように構成されている。 
【０００６】
上述の特徴、機能及び利点は、様々な実行形態において独立に実現することが可能であるか、さらに別の実行形態において組み合わせることが可能である。これらの実行形態について、以下の説明及び添付図面を参照してさらに詳細に説明する。
【図面の簡単な説明】
【０００７】
【図１】一又は複数のタスクを実行するために使用する例示のコンピューティング装置のブロック図である。
【図２】一又は複数のタスクを実行するために使用する例示の方法のフロー図である。
【図３】図２の例示の方法で使用される、一又は複数のタスクを実行するために使用する別の例示の方法のフロー図である。
【発明を実施するための形態】
【０００８】
本明細書に記載される主題は概して、タスクのキューを管理し、タスクを実行するために一又は複数の処理エンジンに関連するスレッドを保っている間に、マルチプルサブタスクを有する一又は複数のタスクを実行するために使用するシステム及び方法に関するものである。
【０００９】
ある実行形態では、本明細書に記載された方法、システム、及びコンピュータによって読取可能な媒体の技術的効果は、（Ａ）一又は複数のスレッドを有する少なくとも一つの処理エンジンを有する少なくとも一つのプロセッサに関連するタスク配分メトリックを決定し、（Ｂ）タスクを一又は複数のスレッドのうちの一つのスレッドに割当てし、（Ｃ）タスク配分メトリックが、少なくとも一つのプロセッサに関連する負荷バランスが第１閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクが少なくとも一つの処理エンジンに関連する前記一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定し、（Ｄ）タスクが再入可能タスクである場合、少なくとも一つの処理エンジンによって停止基準が満たされたか否かを決定し、（Ｅ）停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンに関連するタスクのキューにタスクを再入させ、（Ｆ）タスク配分メトリックが、少なくとも一つのプロセッサに関連するコアアフィニティが第２閾値よりも下回ることを示す場合、少なくとも一つの処理エンジンによってタスクがメインタスクであるか否かを決定し、（Ｇ）タスクがメインタスクでない場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、（Ｈ）停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの前記一つのスレッドにプルすることのうちの少なくとも一つを含む。 
【００１０】
本明細書において、「１つの」という語から始まる単数形の要素又はステップは、複数の要素又はステップを除外することが明示的に記載されていない限り、複数の要素又はステップを除外しないと理解すべきである。さらに、本発明の「一実行形態」又は「例示的実行形態」への言及は、記載されている特徴も取り込む他の実行形態の存在を除外するものではない。
【００１１】
図１は、例示のコンピューティング装置１０のブロック図である。例示的な実行形態では、コンピューティング装置１０は、メモリ１２及びプログラムされた命令を実行するためのメモリ１２と結合されたプロセッサ１４を含む。プロセッサ１４は一又は複数の処理エンジン（例えば、マルチコア構成で）を含む。コンピューティング装置１０は、本明細書に記載される一又は複数の作業を実行するために、プロセッサ１４において一又は複数の処理エンジンを確立するようにプログラミング可能である。例えば、プロセッサ１４は、作業を一又は複数の実行可能な命令としてエンコードし、メモリ１２で実行可能な命令を提供することによってプログラム可能である。
【００１２】
プロセッサ１４は、汎用中央処理装置（ＣＰＵ）、マイクロコントローラ、縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理回路（ＰＬＣ）、及び／又は、本明細書に記載した機能を実行可能な任意の他の回路又はプロセッサを非限定的に含む。本明細書に記載されている方法は、限定するものではないが、記憶装置及び／又はメモリ装置を含む、コンピュータで読込可能な媒体内に具現化される、実行可能な命令としてエンコードすることができる。このような命令は、プロセッサ１４で実行された場合、本明細書に記載された方法の少なくとも一部をプロセッサ１４に行わせることができる。上述の例は典型例にすぎず、したがって、プロセッサという用語の定義及び／又は意味を何らかの方法で制限することを意図していない。
【００１３】
メモリ１２は、本明細書に記載されているように、実行可能な命令及び／又は他のデータなどの情報が記憶され検索されることを可能にする一又は複数の装置である。メモリ１２は、限定しないが、キャッシュ、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、半導体ディスク、及び／又はハードディスクなど、一又は複数のコンピュータで読込可能な媒体を含みうる。図示したように、メモリ１２は実行される一又は複数のタスクを記憶するキュー２６を含む。メモリ１２は限定しないが、作業中の命令、ファームウェア、ソフトウェア、サブタスクカウンタ、アイドルタスク、及び／又は本明細書に記載された方法及びシステムで使用するのに好適なその他何らかの種類のデータを記憶するようにさらに構成される。さらに、メモリ１２及びプロセッサ１４は別々のものとして図示されており、当然ながら、プロセッサ１４及びメモリ１２を含む統合装置はいくつかのコンピューティング装置の実行形態に使用される。
【００１４】
例示的な実行形態では、コンピューティング装置１０は、プロセッサ１４に結合されているプレゼンテーションインターフェース１６を含む。プレゼンテーションインターフェース１６は、限定しないが、インストールデータ、コンフィギュレーションデータ、テストデータ、エラーメッセージ、及び／又はユーザ２０に対する任意の他の形式のデータなどの情報を出力（例：表示、印刷及び／又はその他の出力）する。例えば、プレゼンテーションインターフェース１６は、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、有機ＬＥＤ（ＯＬＥＤ）ディスプレイ、及び／又は「電子インク」ディスプレイなどのディスプレイデバイスに結合されたディスプレイアダプタ（図１に示せず）を含む。いくつかの実行形態では、プレゼンテーションインターフェース１６は一よりも多い表示装置を含む。
【００１５】
例示的な実行形態では、コンピューティング装置１０は、ユーザ２０からの入力を受信する入力インターフェース１８を含む。例示的な実行形態では、入力インターフェース１８はプロセッサ１４に結合されており、例えば、キーボード、リーダー、ポインティングデバイス、マウス、スタイラスペン、タッチセンサーパネル（例えば、タッチパッド又はタッチスクリーン）、ジャイロスコープ、加速度計、及び／又は音声入力インターフェースを含む。
【００１６】
オペレーティングシステム及びアプリケーションの命令は、本明細書に記載された一又は複数の工程を実行するためにプロセッサ１４によって実行される持続性メモリ１２の機能性の形態で位置決めされている。異なる実行形態のこれらの命令は、例えばメモリ１２、又は別のメモリ等の異なる物理的又は有形のコンピュータによって読取可能な媒体、例えば非限定的にフラッシュドライブ、ＣＤ―ＲＯＭ、サムドライブ、フロッピー（登録商標）ディスク等を含むコンピュータによって読取可能な媒体２２で具現化される。
【００１７】
さらに命令は、例えば非限定的に、フラッシュドライブ、ＣＤーＲＯＭ、サムドライブ、フロッピー（登録商標）ディスク等を含む持続性のコンピュータによって読取可能な媒体２２の機能性の形態で位置決めされている。コンピュータによって読取可能な媒体２２は、プロセッサ１４によるアクセス及び／又は実行を可能にするためにコンピューティング装置１０に選択的に挿入可能、及び／又は取り出し可能である。ある実行例では、コンピュータによって読取可能な媒体２２は、メモリ１２及び／又はプロセッサ１４に関連するＣＤ／ＤＶＤドライブ又は他のデバイスに挿入又は配置される光ディスク又は磁気ディスクを含む。場合によっては、コンピュータで読み取り可能な媒体２２は取り外し可能でなくともよい。
【００１８】
コンピューティング装置１０は、本明細書に記載されるように実行されるように様々な処理環境において具現化される。具体的には、例えば、コンピューティング装置１０は非限定的に、一又は複数のパソコン、組み込みシステム、ワークステーション、サーバ、サーバシステム、ネットワークコンピュータ、ポータブルコンピュータ（例：ｉＰＡＤ（登録商標））、スマートホン、タブレット、及び／又は一又は複数の作業を実行するために好適なその他の装置を含む。当然ながら、本明細書のコンピューティング装置１０は、処理システム及び／又は装置の一又は複数の組み合わせによって提供される。
【００１９】
一般に、プロセッサ１４は一又は複数のタスクを実行するために提供される。各タスクはマルチプルサブタスクを含み、各サブタスクはさらにサブタスクを含むことができる。このように、タスクは処理エンジンによって実行されるサブタスクに分解できる。本明細書で使用する「タスク」という表現は、タスク及びサブタスクのいずれか、あるいは両方を指すものである。さらに、一つのタスクと一又は複数の他のタスクとの関係を示すために、階層的な表現（例：親又はメイン）をタスクと組み合わせて使用する場合がある。図１に示すように、例示の実行形態では、プロセッサ１４は一又は複数の処理エンジン２４をソフトウェア、ファームウェア、ハードウェアにおいて提供する。一又は複数の処理エンジン２４は、キューマネージャ２５とタスクマネージャ２７を含む。
【００２０】
例示の実行形態では、キューマネージャ２５は、キュー２６を出入りするタスクの動きを管理するように構成されており、その一方タスクマネージャ２７は、下記の図２及び３に示すように、スレッドに入った時にどの方法でタスクが実行されているか及び／又は処理されているかを決定するように構成されている。各処理エンジン２４は、ソフトウェア及び／又はファームウェアによって提供された、処理コア２９ごとに一又は複数のスレッド３１を有する一又は複数の処理コア２９を含む。タスクマネージャ２７は、特定の一又は複数のタスクを実行するために、タスク及び／又はサブタスクをキュー２６から本明細書で記載される一又は複数のスレッド３１に割り当てる機能を持つ。
【００２１】
例示の実行形態では、タスクマネージャ２７は、コアアフィニティ閾値及び／又は負荷バランス閾値に基づくタスク配分メトリックを決定するように構成される。さらに具体的には、タスクマネージャ２７はキューマネージャ２５によって表示されるように、プロセッサ１４の現在の状態、及び／又はキュー２６から処理すべき一又は複数の次のタスクから予測されるプロセッサ１４の状態に基づいて、一又は複数のタスク配分メトリックを決定する。さらに、タスクマネージャ２７は、現在の及び／又は予測される状態に基づいたタスク配分メトリックをコアアフィニティ閾値及び／又は負荷バランス閾値と比較する。この比較に基づき、タスクマネージャ２７は次のタスクをコアアフィニティ閾値の関数として特定の処理エンジン２４に割り当てる、あるいは負荷バランス閾値の関数として別の処理エンジン２４に割り当てる。加えて、又はこれに代えて、タスクマネージャ２７は次のタスクが再入可能タスク及び／又はサブタスクに分割できるタスクであるか否かに基づいて、次のタスクを割り当てる。
【００２２】
このように、タスクマネージャ２７は、タスクの利用可能な処理エンジン２４への配分を予測的に及び／又はリアルタイムで、キューマネージャ２５（例：再入可能タスク、メインタスク）によって管理され、処理エンジン２４によって実行されるタスクの種類の関数として制御する。本明細書のコアアフィニティ及び／又は負荷バランスの能力によりさらに、一又は複数の処理エンジン２４間の負荷バランスを提供しながら、既知の方法に比べて利用可能な処理エンジン２４全体のタスクの実行をより効率的に行うことが可能になる。
【００２３】
図２は、一又は複数のタスクを実行するために使用する例示の方法１００を示す。本明細書に記載される方法は、プロセッサ１４に関連する少なくとも一つの処理エンジンによって実行される少なくとも一つのステップ及び／又は工程を含む。図２の例示の実行形態では、例えば、方法１００は一又は複数のコンピューティング装置１０において提供されるプロセッサ１４に関連する一又は複数の処理エンジンによって実行される。
【００２４】
タスクがコンピューティング装置１０内で生成されると、タスクはキュー２６の適所へ挿入される。キュー２６は先入れ先出し（ＦＩＦＯ）キューであり、タスクがキュー２６に挿入された順番でスレッド３１が利用可能になった場合にスレッド３１にタスクが割り当てられる。当然ながら、その他の種類のキュー２６（後入れ先出し（ＬＩＦＯ）キュー、又はその他の非ＦＩＦＯキュー）及び／又は一又は複数のスレッドとのインタラクション、及び複合キューをその他の実行形態において使用できる。さらに当然ながら、上述したように、キュー２６はメモリ１２内にあるところを図示されているが、キューはメモリ１２に、またプロセッサ１４の内部又は外部に含まれうる。
【００２５】
方法１００が開始されると、プロセッサ１４に関連するタスク配分メトリックは、処理エンジン２４、又はプロセッサ１４内の別の処理リソースによって決定される１０１。タスク配分メトリックは例えば、処理エンジン２４に含まれるスレッド内の一又は複数のタスクの配分／実行に関連する負荷バランス、コアアフィニティ、又はその他のメトリックを示すものである。タスク配分メトリックの決定１０１では、処理エンジン２４はメトリックを一又は複数のスレッドと比較して、プロセッサ１４に関連するコアアフィニティ及び／又は負荷バランスが、プロセッサ１４の一又は複数の異なる所望の実行を行うために十分か、不十分か、最適か、又は非最適であるかを決定する。
【００２６】
例えば、タスク配分メトリックは、メモリへの任意の数の読み込み及び／又は書き込みを含む。閾値はメモリ１２への任意の数の読み込み及び／又は書き込みであり、メモリ１２への実際の読み込み及び／又は書き込みの数が第１所定数を超える場合、プロセッサ１４に関連するコアアフィニティは第２閾値を下回る。逆に、メモリ１２の実際の読み込み及び／又は書き込みの数が（第１所定数と同じ又は異なる）第２所定数よりも少ない場合、又はプロセッサ１４のコアがアイドルである場合、プロセッサ１４に関連する負荷バランスは第１閾値を下回る。プロセッサ１４のその他さまざまな特徴及び／又は性能により、他の実行形態におけるコアアフィニティ及び／又は負荷バランスを示すタスク配分メトリックが提供される。
【００２７】
例えば少なくとも１つのプロセッサ１４に関連する負荷バランスが第１閾値を下回ることをタスク配分メトリックが示す場合、タスクマネージャ２７は処理するタスクをスレッドに割り当てる。タスクを受け取ると、スレッドは、タスクが以前複数のスレッドのうちの任意の一つに割り当てられた再入可能タスクであるか否かを決定１０２するように稼働する。この例示の実行形態にあるように、「再入可能」タスクという表現は、以前処理エンジン２４のスレッドに割り当てられており、本明細書に記載される方法１００の一又は複数の他のステップに依存するタスクを指すものである。
【００２８】
図２に示すように、タスクが再入可能タスクでない場合、方法１００は、タスクがマルチプルサブタスクに分割可能か否かの決定１０４へ進む。タスクは、例えばタスク内の作業関係、タスク内の作業数、タスク内の作業の複雑さ等の一又は複数の異なる基準に基づいて分割可能である。ある実行形態では、タスクの分割可能性はさらに、使用されるスレッド、処理エンジン２４、及び／又はプロセッサ１４の種類及び／又は容量に関連する。
【００２９】
タスクが分割可能である場合、スレッドはタスクのマルチプルサブタスクをキュー２６へ挿入する１０６。サブタスクがキュー２６に入った後で、スレッドは、タスクがスレッドに割り当てられたことを示す状態を設定１０８する。さらに、スレッドは次の処理のためにタスクをキュー２６に再入１１０させて、他のタスクのためにスレッドを開放１１６する。スレッドが、タスクが分割可能でないことを決定１０４した場合、スレッドはタスクを実行１１２する。タスクが実行された後で、スレッドはタスクの状態を完了と設定１１４し、一又は複数の他のタスクで使用するためにスレッドを開放１１６する。
【００３０】
さらに、タスクがキュー２６に再入したために、スレッドは再入タスクと関連する、又は関連していない他のタスクを自由に完了させることができる。したがって、方法１００は、タスクが完了するまでスレッドに残ることを可能にする代わりに、スレッドを解放するところが既知の方法と異なるところである。一又は複数の実行形態において、方法１００を用いて処理エンジン２４、プロセッサ１４、及び／又はコンピューティング装置１０内のスレッド飢餓状態、デッドロック、及び／又はライブロックを減らす、制限する及び／又は除去することができる。さらに、当然ながら、方法１００はステップ１１６で終了する、すなわちスレッドを解放するため、本明細書の方法１００及び他の方法は、プロセッサ１４内で割り当てられたリソース内で効率的にタスクの様々な複雑性を実行するのに好適である。少なくとも一つの実行形態では、処理エンジン２４は、マルチプルサブタスクを有する少なくとも一つのタスクを有するマルチプルタスクを実行するための単一スレッドを含む。
【００３１】
再び図２を参照する。スレッドが、タスクがスレッドに以前割り当てられていた（例えば、ステップ１０８で設定されたタスクの状態で示される）と決定１０２した場合、スレッドは停止基準が満たされたか否かを決定１２０する。停止基準は例えば、完了したタスクに関する一つの、幾つかの、ある割合の、及び／又は全てのサブタスク、又はタスクに関連する特定のタスクが完了したことを含む。少なくとも一つの実施形態では、タスクがマルチプルサブタスクに分割され、キュー２６に挿入される１０６と、サブタスクカウンタが生成され、このカウンタはサブタスクのうちの一つが完了するたびにデクリメントすることができる。上記実施形態では、停止基準は、サブタスクカウンタがゼロと等しい時、すなわち、タスクに従属する各マルチプルサブタスクが完了した時を含むことができる。ある実行例では、停止基準は、少なくとも一つのマルチプルサブタスクが完了した時を含むことができる。様々な実施形態では、最小量の処理が実行され、タスクを進めることができることを示すために、多様な異なる基準が提供されている。他の実施形態では、適切なレベルの完了が達成されたこと、及び／又はタスクが完全に実行されたことを決定するために他の基準が使用される。当然ながら、停止基準は、実行されるタスクの種類、及び／又はタスクが実行される方法に関連する一又は複数のパラメータ（例えば精度）に基づいて変化する。
【００３２】
停止基準が満たされない場合、スレッドは次の処理のためにタスクをキュー２６に再入１１０させ、これによりスレッドは他のタスクのために解放される。そうでなく、停止基準が満たされた場合、スレッドは任意にタスクに関連する一又は複数の蓄積タスクを実行１２２する。例えば、蓄積タスクは非限定的に、複数の完了サブタスクの結果への実行、例えば多数の結果を加算する等を含む。少なくとも一つの実施形態では、ステップ１２２において蓄積タスクが実行されない。蓄積タスクが完了した時に、必要に応じて、スレッドはタスクの状態を完了に設定１１４して、一又は複数の他のタスクで使用するためにスレッドが開放１１６される。
【００３３】
図２に示す方法１００は、他のタスクが完了するのを待機しているアイドルタスクからスレッドを開放することによって、処理エンジンがタスクを処理できるようにする。方法１００は、数千、数十万、数百万又はそれ以上のタスク及び／又はサブタスクを処理エンジン２４に割り当てて、既知の方法よりもさらに迅速にさらに効率的にタスクを完了させるために使用される。例示の実行形態では、タスクの種類、又はタスクの他のタスクに対する関係を考慮せずに、スレッドが解放されキュー２６からの次のタスクが割り当てられるため、方法１００ではさらに、幾つかのスレッド間の負荷バランスが改善される。このため、方法１００では、一又は複数の実施形態において処理エンジン２４のコアアフィニティへのエンファシスを軽減し、いくつかの処理エンジン２４間の負荷バランスの改善が強調される。
【００３４】
さらに、多様性において、各スレッドはタスクを処理しているか、又はタスクをキュー２６へ移動させるかのいずれかを実行しているため、本明細書の方法はスレッドを効率的に使用し、これにより、既知の処理方法においては問題（例：スレッド飢餓状態、デッドロック、及び／又はライブロック）が生じるタスクの実行に、より少ないスレッド（例えば単一スレッド）が使用されうる。
【００３５】
タスク配分メトリックが、方法１００において決定１０１されたように、少なくとも一つのプロセッサ１４に関連するコアアフィニティが第２閾値を下回ることを示す場合、処理エンジン２４はノードＡにおいて、一又は複数のタスクを実行するために使用する例示の方法２００へ分岐する。例示の方法２００は図３に示されている。
【００３６】
方法１００と同様に、タスクがコンピューティング装置１０内で生成された時、タスクはキュー２６の適所に挿入される。キュー２６は、先入れ先出し（ＦＩＦＯ）キューであり、スレッドが利用可能になった時にタスクがキュー２６に挿入された順でタスクがスレッドに割り当てられる。上述したように、当然ながら、他の種類のキュー２６、及び／又はスレッドとのインタラクションを他の実施形態において使用可能である。処理エンジン２４のスレッドが利用可能になると、処理のためにタスクがスレッドに割り当てられる。図３の例示の実行形態では、タスクを受け入れた時に、スレッドはタスクがマルチプルサブタスクに分割可能か否かの決定２０２を実行する。上述したように、タスクは一又は複数の異なる基準、例えばタスク内の作業の関係、タスク内の作業数等に基づいて分割可能である。
【００３７】
タスクが分割可能である場合、スレッドはタスクのマルチプルサブタスクをキュー２６に挿入し２０４、他のタスクを実行するためにスレッドが開放２１２される。
【００３８】
逆に、タスクが分割可能でない場合、スレッドはタスクを実行し２０６、タスクがメインタスクであるか否かを決定する２０８。本明細書で使用する「メインタスク」という表現は、少なくとも一つのサブタスクを有するが、他のタスクに対するサブタスクではないタスクを指すものである。タスクがメインタスクであることが決定された場合、スレッドはタスクが完了したことを決定し、タスクの状態を完了に設定し２１０、他のタスクを実行するためにスレッドを解放する２１２。しかしながらタスクがメインタスクではない場合、スレッドは、親タスクの停止基準が満たされたか否かを決定する２１４。上述したように、停止基準は、タスクがマルチプルサブタスクに分割された時に生成されたサブタスクカウンタの値、又はタスク又はサブタスクの完了のその他様々な評価基準である。
【００３９】
親タスクの停止基準が満たされない場合、スレッドはタスクが完了したことを決定し、タスクの状態を完了に設定し２１０、他のタスクを実行するためにスレッドを解放する２１２。
【００４０】
逆に、親タスクの停止基準が満たされた場合、処理エンジン２４は親タスクをスレッドにプルし２１６、必要に応じて親タスクに関連する蓄積タスクを実行する２１８。蓄積タスクが完了した際に、もしあれば、スレッドは親タスクがメインタスクであるか否かを決定する２０８ためにループバックする。本明細書に記載された工程は、メインタスクが完了したことが決定されるまで継続し、スレッドが開放される２１２。親タスクをスレッドにプルすることで、タスクを実行した後に、方法２００は、マルチプルサブタスクを有するタスクを実行する既知の方法よりもエンハンストコアアフィニティを高め、一又は複数の実施形態における処理エンジン２４間の負荷バランスへのエンファシスを軽減することができる。さらに具体的には、サブタスク、又は親タスクの下のタスクは同じスレッドによって実質的に実行され、これにより既知の方法に比べて、メインタスクの関連タスクが同じ処理エンジン２４において実行される可能性がより高くなる。
【００４１】
さらに、停止基準が満たされる前に、他のタスクが完了するまで待機しているアイドルタスクからスレッドが開放される２１２ことで、方法２００は既知の方法よりもさらに迅速にさらに効率的にタスクを完了させることができる。このように、各スレッドはタスクを処理している、又はタスクをキュー２６へ移動させている、のいずれかであるため、処理エンジン２４はその一又は複数のスレッドを効率的に使用する。
【００４２】
上記効率的な使用により、より少ないスレッドを使用して、既知の処理方法において問題（例：スレッド飢餓状態、デッドロック、及び／又はライブロック）が生じるタスクを実行することができる。このように、本明細書に記載される方法は、スレッドの数が限定された特定の処理環境、及び／又は効率性が好まれるその他の処理環境において使用され、その一方で、スレッド飢餓状態、デッドロック、及び／又はライブロック状態の可能性が制限される及び／又は除去される。
【００４３】
当然ながら、方法１００及び方法２００は互いに連動する形で本明細書に記載されているが、一つ、又は両方の方法、及び／又はこれらの方法の置換えをその他様々な実施形態で別々に使用可能である。例えば、負荷バランスが制御設計の検討事項であるコンピューティング装置においては、方法１００を方法２００と組み合わせずに単独に使用する。別の実行例では、コアアフィニティが制御設計の検討事項であるコンピューティング装置において、方法２００を方法１００と組み合わせずに単独に使用する。上記実施形態では、タスク配分メトリックを決定するステップは修正又は省略される。
【００４４】
説明及び図面において、少なくとも一つの処理エンジン２４によってタスクを実行するために使用されるコンピュータによって実行可能な方法が開示されており、この方法は、一又は複数のスレッド３１を有する少なくとも一つの処理エンジン２４を有する少なくとも一つのプロセッサ１４に関連するタスク配分メトリックを決定するステップと、タスク配分メトリックが、少なくとも一つのプロセッサ１４に関連する負荷バランスが第１閾値を下回ることを示す場合に、一又は複数のスレッド３１のうちの一つにタスクを割り当てるステップと、少なくとも一つの処理エンジン２４によって、タスクが少なくとも一つの処理エンジン２４に関連する前記一又は複数のスレッド３１の任意の一つに以前割り当てられた再入可能タスクであるか否かを決定するステップと、タスクが再入可能タスクである場合、少なくとも一つの処理エンジン２４によって停止基準が満たされたか否かを決定するステップと、停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジン２４に関連するタスクのキュー２６にタスクを再入させるステップと、タスク配分メトリックが、少なくとも一つのプロセッサ１４に関連するコア２９アフィニティが第２閾値を下回ることを示す場合に、少なくとも一つの処理エンジン２４によって、タスクがメインタスクであるか否かを決定するステップと、タスクがメインタスクでない場合、少なくとも一つの処理エンジン２４によって停止基準が満たされたか否かを決定するステップと、停止基準が満たされており、タスクがメインタスクでない場合、タスクに関連する親タスクを一又は複数のスレッド３１のうちの前記一つにプルするステップを含む。
【００４５】
ある変形例では、本方法において、タスクが再入可能タスクである場合に停止基準が満たされたか否かを決定するステップが、タスクに従属する少なくとも一つのマルチプルサブタスクが完了したか否かを決定することを含む。別の変形例では、方法はさらに、タスクをタスクのキュー２６に再入させた後で、前記一又は複数のスレッド３１のうちの前記一つを解放することを含む。さらに別の変形例では、本方法はさらに、タスクが再入可能タスクでない場合に、タスクを複数のサブタスクに分割可能であるか否かを決定することを含む。ある場合には、本方法はさらに、タスクが分割可能である場合、少なくとも一つの処理エンジン２４によって、タスクの複数のサブタスクをキュー２６に挿入することを含む。別の場合において、本方法はさらに、停止基準が満たされた場合に、少なくとも一つの処理エンジン２４によって、少なくとも一つの蓄積タスクを実行することを含む。ある実行例において、本方法はさらに、親タスクが一又は複数のスレッド３１のうちの前記一つにプルされた後で、親タスクに関連する少なくとも一つの蓄積タスクを実行することを含む。別の実行例では、本方法において、タスクがメインタスクでない場合に停止基準が満たされたか否かを決定するステップが、タスクに従属するマルチプルサブタスクのそれぞれが完了したか否かを決定することを含む。さらに別の実行例では、本方法はさらに、停止基準が満たされておらず、タスクがメインタスクでない場合に、タスクをタスクのキュー２６に再入させた後で、タスクの状態を完了に設定し、一又は複数のスレッド３１のうちの前記一つを解放することを含む。ある代替例では、本方法はさらに、タスクがメインタスクであるか否かを決定する前に、タスクを複数のサブタスクへ分割可能であるか否かを決定することを含む。さらに別の代替例では、本方法はさらに、タスクが分割可能である場合、タスクの複数のサブタスクをタスクのキュー２６へ挿入することを含む。
【００４６】
ある態様では、タスクの実行において使用するコンピューティング装置が開示されており、このコンピューティング装置は、タスクのキュー２６を記憶するメモリ１２装置と、メモリ１２装置に結合し、一又は複数のスレッドを有し少なくとも一つの処理エンジン２４を含むプロセッサ１４を含み、前記少なくとも一つの処理エンジン２４はタスクマネージャ２７とキューマネージャ２５を含み、キューマネージャ２５は、タスクの前記キュー２６を管理するように構成されており、前記タスクマネージャ２７は前記プロセッサ１４に関連するタスク配分メトリックを決定し、タスクを一又は複数のスレッド３１のうちの一つに割り当てるように構成されており、前記タスクマネージャ２７は、タスク配分メトリックが前記プロセッサ１４に関連する負荷バランスが第１閾値を下回ることを示す場合に、タスクが前記一又は複数のスレッド３１のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定し、タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合に、タスクをタスクのキュー２６に前記キューマネージャ２５を介して再入させるように構成されており、前記タスクマネージャ２７は、タスク配分メトリックが、前記プロセッサ１４に関連するコア２９アフィニティが第２閾値を下回ることを示す場合に、タスクがメインタスクであるか否かを決定し、タスクがメインタスクでない場合に、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合に、タスクに関連する親タスクを一又は複数のスレッド３１のうちの前記一つにプルするように構成されている。
【００４７】
ある変形例では、コンピューティング装置において、前記タスクマネージャ２７はさらに、タスクが再入可能タスクでない場合、タスクを複数のサブタスクに分割可能であるか否かを決定するように構成されている。別の変形例では、コンピューティング装置において、前記タスクマネージャ２７はさらに、タスクが分割可能である場合、前記キューマネージャ２５を介してタスクの複数のサブタスクをキュー２６に挿入するように構成されている。さらに別の変形例では、コンピューティング装置において、前記タスクマネージャ２７はさらに、複数のサブタスクのうちの一つを一又は複数のスレッド３１のうちの２番目の一つに割り当てて、複数のサブタスクのうちの一つが再入可能タスクであるか否かを決定するように構成されている。ある場合には、コンピューティング装置において、前記タスクマネージャ２７はさらに、停止基準が満たされた時に少なくとも一つの蓄積タスクを実行するように構成されている。別の場合において、コンピューティング装置では、タスクマネージャ２７はさらに、タスクがメインタスクであるか否かを決定する前に、タスクを複数のサブタスクに分割可能であるか否かを決定するように構成されている。ある実施例では、コンピューティング装置において、前記タスクマネージャ２７はさらに、タスクが分割可能である場合、前記キューマネージャ２５を介してタスクの複数のサブタスクをキュー２６に挿入するように構成されている。別の実施例では、コンピューティング装置において、前記タスクマネージャ２７はさらに、親タスクが一又は複数のスレッド３１のうちの前記一つにプルされた後で、親タスクに関連する少なくとも一つの蓄積タスクを実行するように構成されている。
【００４８】
さらに、当然ながら、本発明の一又は複数の態様は、本明細書に記載された機能、方法、及び／又は工程を実行するように構成された時に、汎用コンピューティング装置を特殊用途のコンピューティング装置に変換する。
【００４９】
本明細書では、ベストモードを含む様々な実施形態を開示する実施例を使用しているため、当業者は任意の装置やシステムの作成ならびに使用、及び組込まれた任意の方法の実行を含め、実施形態を実行することができる。特許性を有する範囲は、特許請求の範囲によって規定され、当業者であれば想起できる他の実施例を含みうる。このような他の実施例は、それらが特許請求の範囲の文字言語から逸脱しない構造要素を有する場合、あるいは、それらが特許請求の範囲の文字言語との有意でない相違を有する等価な構造要素を含んでいる場合は、特許請求の範囲の範囲内にあることを意図している。
また、本願は以下に記載する態様を含む。
（態様１）
少なくとも一つの処理エンジン（２４）によってタスクを実行するために使用するコンピュータによって実行される方法であって、
少なくとも一つの処理エンジン（２４）を有する少なくとも一つのプロセッサ（１４）に関連するタスク配分メトリックを決定するステップであって、前記少なくとも一つの処理エンジン（２４）が一又は複数のスレッド（３１）を有する、決定するステップと、
前記タスクを前記一又は複数のスレッド（３１）のうちの一つに割り当てるステップと、
前記タスク配分メトリックが、前記少なくとも一つのプロセッサ（１４）に関連する負荷バランスが第１閾値を下回ることを示す場合、前記少なくとも一つの処理エンジン（２４）によって、前記タスクが前記少なくとも一つの処理エンジン（２４）に関連する前記一又は複数のスレッド（３１）のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定するステップと、
前記タスクが再入可能タスクである場合、前記少なくとも一つの処理エンジン（２４）によって、停止基準が満たされたか否かを決定するステップと、
前記停止基準が満たされておらず、前記タスクが再入可能タスクである場合に、前記少なくとも一つの処理エンジン（２４）に関連するタスクのキュー（２６）に前記タスクを再入させるステップと、
前記タスク配分メトリックが、前記少なくとも一つのプロセッサ（１４）に関連するコア（２９）アフィニティが第２閾値を下回ることを示す場合、前記少なくとも一つの処理エンジン（２４）によって、前記タスクがメインタスクであるか否かを決定するステップと、
前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン（２４）によって停止基準が満たされたか否かを決定するステップと、
前記停止基準が満たされており、前記タスクがメインタスクでない場合、前記タスクに関連する親タスクを前記一又は複数のスレッド（３１）の前記一つにプルするステップ
を含む方法。
（態様２）
前記タスクが再入可能タスクである場合に前記停止基準が満たされたか否かを決定するステップが、前記タスクに従属するマルチプルサブタスクのうちの少なくとも一つが完了したか否かを決定し、前記タスクをタスクのキュー（２６）に再入させた後で、前記一又は複数のスレッド（３１）のうちの前記一つを解放することを含む、態様１に記載の方法。
（態様３）
前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定し、前記タスクが分解可能である場合に、前記少なくとも一つの処理エンジン（２４）によって前記タスクの複数のサブタスクを前記キュー（２６）に挿入することをさらに含む、態様１又は２に記載の方法。
（態様４）
前記停止基準が満たされた場合に、前記少なくとも一つの処理エンジン（２４）によって少なくとも一つの蓄積タスクを実行し、前記親タスクを前記一又は複数のスレッド（３１）のうちの前記一つにプルした後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行することをさらに含む、態様１乃至３のいずれか１項に記載の方法。
（態様５）
前記タスクがメインタスクでない場合に前記停止基準が満たされたか否かを決定するステップが、前記タスクに従属するマルチプルサブタスクのそれぞれが完了したか否かを決定することを含み、前記停止基準が満たされておらず、前記タスクがメインタスクでない場合、前記タスクをタスクのキュー（２６）に再入させた後で、前記タスクの状態を完了に設定し、前記一又は複数のスレッド（３１）のうちの前記一つを解放することをさらに含む、態様１乃至４のいずれか１項に記載の方法。
（態様６）
前記タスクがメインタスクか否かを決定する前に、前記タスクが複数のサブタスクに分割可能であるか否かを決定し、前記タスクが分割可能である場合、前記タスクの前記複数のサブタスクをタスクのキュー（２６）に挿入することをさらに含む、態様５に記載の方法。
（態様７）
タスクの実行において使用するコンピューティング装置であって、前記コンピューティング装置は、
タスクのキュー（２６）を記憶するメモリ（１２）装置と、
前記メモリ（１２）装置に結合し、一又は複数のスレッドを有する少なくとも一つの処理エンジン（２４）を含むプロセッサ（１４）であって、前記少なくとも一つの処理エンジン（２４）はタスクマネージャ（２７）とキューマネージャ（２５）を含み、前記キューマネージャ（２５）はタスクの前記キュー（２６）を管理するように構成されており、前記タスクマネージャ（２７）は前記プロセッサ（１４）に関連するタスク配分メトリックを決定し、前記タスクを前記一又は複数のスレッド（３１）のうちの前記一つに割り当てるように構成されている前記プロセッサ（１４）を含み、
前記タスクマネージャ（２７）は、前記タスク配分メトリックが、前記プロセッサ（１４）に関連する負荷バランスが第１閾値を下回ることを示す場合に、前記タスクが、前記一又は複数のスレッド（３１）のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定し、前記タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、前記タスクが再入可能タスクである場合に、前記タスクをタスクのキュー（２６）に前記キューマネージャ（２５）を介して再入させるように構成されており、
前記タスクマネージャ（２７）は、タスク配分メトリックが、前記プロセッサ（１４）に関連するコア（２９）アフィニティが第２閾値を下回ることを示す場合に、前記タスクがメインタスクであるか否かを決定し、前記タスクがメインタスクでない場合に、停止基準が満たされたか否かを決定し、停止基準が満たされており、前記タスクがメインタスクではない場合に、前記タスクに関連する親タスクを一又は複数のスレッド（３１）のうちの前記一つにプルするように構成されている、コンピューティング装置。 
（態様８）
前記タスクマネージャ（２７）がさらに、前記タスクが再入可能タスクでない場合に、前記タスクが複数のサブタスクに分解可能であるか否かを決定するようにさらに構成されており、前記タスクマネージャ（２７）がさらに、前記タスクが分解可能である場合に、前記キューマネージャ（２５）を介して、前記タスクの前記複数のサブタスクを前記キュー（２６）に挿入するように構成されている、態様７に記載のコンピューティング装置。
（態様９）
前記タスクマネージャ（２７）がさらに、前記複数のサブタスクのうちの一つを前記一又は複数のスレッド（３１）のうちの２番目のスレッドに割り当てて、前記複数のサブタスクのうちの前記一つが再入可能タスクであるか否かを決定するように構成されており、
前記タスクマネージャ（２７）がさらに、前記停止基準が満たされた時に、少なくとも一つの蓄積タスクを実行するように構成されている、態様７又は８に記載のコンピューティング装置。
（態様１０）
前記タスクマネージャ（２７）がさらに、前記タスクがメインタスクであるか否かを決定する前に、前記タスクが複数のサブタスクに分解可能であるか否かを決定するように構成されており、前記タスクマネージャ（２７）がさらに、前記タスクが分解可能である場合に、前記キューマネージャ（２５）を介して前記タスクの前記複数のサブタスクを前記キュー（２６）に挿入するように構成されており、前記タスクマネージャ（２７）がさらに、前記親タスクを前記一又は複数のスレッド（３１）のうちの前記一つにプルした後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するように構成されている、態様７に記載のコンピューティング装置。
【符号の説明】
【００５０】
１０    コンピューティング装置
１２    メモリ
１４    プロセッサ
１６    プレゼンテーションインターフェース
１８    入力インターフェース
２０    ユーザ
２２    コンピュータが読取可能な媒体
２４    処理エンジン
２５    キューマネージャ
２７    タスクマネージャ
２９    処理コア
３１    スレッド
１００    方法
２００    方法
【図１】
0005718378.tif 000002
【図２】
0005718378.tif 000003
【図３】
0005718378.tif 000004