JP5718378B2 - 一又は複数のタスクを実行するために使用するシステム及び方法 - Google Patents

一又は複数のタスクを実行するために使用するシステム及び方法 Download PDF

Info

Publication number
JP5718378B2
JP5718378B2 JP2013000082A JP2013000082A JP5718378B2 JP 5718378 B2 JP5718378 B2 JP 5718378B2 JP 2013000082 A JP2013000082 A JP 2013000082A JP 2013000082 A JP2013000082 A JP 2013000082A JP 5718378 B2 JP5718378 B2 JP 5718378B2
Authority
JP
Japan
Prior art keywords
task
processing engine
queue
determining whether
threads
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
JP2013000082A
Other languages
English (en)
Other versions
JP2013140593A5 (ja
JP2013140593A (ja
Inventor
トーマス ピー. ディケンズ,
トーマス ピー. ディケンズ,
デーヴィッド クリスチャン カッチア,
デーヴィッド クリスチャン カッチア,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Boeing Co
Original Assignee
Boeing Co
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 Boeing Co filed Critical Boeing Co
Publication of JP2013140593A publication Critical patent/JP2013140593A/ja
Publication of JP2013140593A5 publication Critical patent/JP2013140593A5/ja
Application granted granted Critical
Publication of JP5718378B2 publication Critical patent/JP5718378B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load

Description

本発明の分野は概して、少なくとも一つの処理エンジンによってタスクを実行するために使用するシステム及び方法に関するものである。
プロセッサは概して、プロセッサに関連するオペレーティングシステムによって提供されるスレッドの使用を通してタスクを実行することが知られている。スレッドはオペレーティングシステムによって生成されるタスク、又は実行されるタスクのキューからタスクを行って、計算環境において一又は複数の計算、作業、工程、アクション及び/又は手順を達成する。
しばしば、オペレーティングシステムはマルチスレッドを提供し、マルチスレッドにはそれらによって実行される様々な異なるタスクが割り当てられている。既知のオペレーティングシステムは、タスクを実行するスレッドにタスクを割り当てる。様々な実装形態において、タスクは一又は複数の他のタスク、又はサブタスクに依存する。タスクがスレッドに割り当てられた時に、全て必要な依存タスク及び/又はサブタスクが完了して、スレッドがタスクを実行することができるようになるまで、スレッドはタスクで占有されている。それ自体がマルチプルタスクに分割されたマルチプルタスクにタスクが分割されると、依存タスクが実行されている間、一又は複数のタスクはスレッドに長期間割り当てられる。タスク又はサブタスクがスレッドに割り当てられる時間、及び他のタスクが完了するまでの待機時間により、しばしばプロセッサの使用が非効率となり、ある場合にはスレッド飢餓状態につながる。
ある態様では、少なくとも一つの処理エンジンによってタスクを実行するために使用する方法が提供されている。本方法は、少なくとも一つの処理エンジンを有する少なくとも一つのプロセッサに関連するタスク配分メトリックを決定することを含む。少なくとも一つの処理エンジンは、一又は複数のスレッドを有する。本方法はさらに、タスクを一又は複数のスレッドのうちの一つに割り当て、タスク配分メトリックが、少なくとも一つのプロセッサに関連する負荷バランスが第1閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクが少なくとも一つの処理エンジンに関連する一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定することを含む。本方法はまた、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンに関連するタスクのキューにタスクを再入させることも含む。本方法は、タスク配分メトリックが、少なくとも一つのプロセッサに関連するコアアフィニティが第2閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクがメインタスクであるか否かを決定し、タスクがメインタスクではない場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの一つのスレッドにプルすることを含む。
別の態様では、タスクを実行するために使用するコンピューティング装置が提供されている。コンピューティング装置は、タスクのキューを記憶するメモリ装置と、メモリ装置に関連し、一又は複数のスレッドを有する少なくとも一つの処理エンジンを含むプロセッサを含む。少なくとも一つの処理エンジンは、タスクマネージャと、前記タスクのキューを管理するように構成されたキューマネージャを含む。タスクマネージャは、前記プロセッサに関連し、タスクを一又は複数のスレッドのうちの一つのスレッドに割り当てるタスク配分メトリックを決定するように構成されている。タスクマネージャは、タスク配分メトリックが前記プロセッサに関連する負荷バランスが第1閾値を下回ることを示す場合、タスクが前記一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定し、タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合、前記キューマネージャを介してタスクをタスクのキューに再入させるように構成されている。タスクマネージャは、タスク配分メトリックが前記プロセッサに関連するコアアフィニティが第2閾値を下回ることを示す場合に、タスクがメインタスクであるか否かを決定し、タスクがメインタスクではない場合、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの前記一つにプルするように構成されている。
上述の特徴、機能及び利点は、様々な実行形態において独立に実現することが可能であるか、さらに別の実行形態において組み合わせることが可能である。これらの実行形態について、以下の説明及び添付図面を参照してさらに詳細に説明する。
一又は複数のタスクを実行するために使用する例示のコンピューティング装置のブロック図である。 一又は複数のタスクを実行するために使用する例示の方法のフロー図である。 図2の例示の方法で使用される、一又は複数のタスクを実行するために使用する別の例示の方法のフロー図である。
本明細書に記載される主題は概して、タスクのキューを管理し、タスクを実行するために一又は複数の処理エンジンに関連するスレッドを保っている間に、マルチプルサブタスクを有する一又は複数のタスクを実行するために使用するシステム及び方法に関するものである。
ある実行形態では、本明細書に記載された方法、システム、及びコンピュータによって読取可能な媒体の技術的効果は、(A)一又は複数のスレッドを有する少なくとも一つの処理エンジンを有する少なくとも一つのプロセッサに関連するタスク配分メトリックを決定し、(B)タスクを一又は複数のスレッドのうちの一つのスレッドに割当てし、(C)タスク配分メトリックが、少なくとも一つのプロセッサに関連する負荷バランスが第1閾値を下回ることを示す場合、少なくとも一つの処理エンジンによって、タスクが少なくとも一つの処理エンジンに関連する前記一又は複数のスレッドのうちの任意のスレッドに以前割り当てられた再入可能タスクであるか否かを決定し、(D)タスクが再入可能タスクである場合、少なくとも一つの処理エンジンによって停止基準が満たされたか否かを決定し、(E)停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジンに関連するタスクのキューにタスクを再入させ、(F)タスク配分メトリックが、少なくとも一つのプロセッサに関連するコアアフィニティが第2閾値よりも下回ることを示す場合、少なくとも一つの処理エンジンによってタスクがメインタスクであるか否かを決定し、(G)タスクがメインタスクでない場合、少なくとも一つの処理エンジンによって、停止基準が満たされたか否かを決定し、(H)停止基準が満たされており、タスクがメインタスクではない場合、タスクに関連する親タスクを一又は複数のスレッドのうちの前記一つのスレッドにプルすることのうちの少なくとも一つを含む。
本明細書において、「1つの」という語から始まる単数形の要素又はステップは、複数の要素又はステップを除外することが明示的に記載されていない限り、複数の要素又はステップを除外しないと理解すべきである。さらに、本発明の「一実行形態」又は「例示的実行形態」への言及は、記載されている特徴も取り込む他の実行形態の存在を除外するものではない。
図1は、例示のコンピューティング装置10のブロック図である。例示的な実行形態では、コンピューティング装置10は、メモリ12及びプログラムされた命令を実行するためのメモリ12と結合されたプロセッサ14を含む。プロセッサ14は一又は複数の処理エンジン(例えば、マルチコア構成で)を含む。コンピューティング装置10は、本明細書に記載される一又は複数の作業を実行するために、プロセッサ14において一又は複数の処理エンジンを確立するようにプログラミング可能である。例えば、プロセッサ14は、作業を一又は複数の実行可能な命令としてエンコードし、メモリ12で実行可能な命令を提供することによってプログラム可能である。
プロセッサ14は、汎用中央処理装置(CPU)、マイクロコントローラ、縮小命令セットコンピュータ(RISC)プロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理回路(PLC)、及び/又は、本明細書に記載した機能を実行可能な任意の他の回路又はプロセッサを非限定的に含む。本明細書に記載されている方法は、限定するものではないが、記憶装置及び/又はメモリ装置を含む、コンピュータで読込可能な媒体内に具現化される、実行可能な命令としてエンコードすることができる。このような命令は、プロセッサ14で実行された場合、本明細書に記載された方法の少なくとも一部をプロセッサ14に行わせることができる。上述の例は典型例にすぎず、したがって、プロセッサという用語の定義及び/又は意味を何らかの方法で制限することを意図していない。
メモリ12は、本明細書に記載されているように、実行可能な命令及び/又は他のデータなどの情報が記憶され検索されることを可能にする一又は複数の装置である。メモリ12は、限定しないが、キャッシュ、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、半導体ディスク、及び/又はハードディスクなど、一又は複数のコンピュータで読込可能な媒体を含みうる。図示したように、メモリ12は実行される一又は複数のタスクを記憶するキュー26を含む。メモリ12は限定しないが、作業中の命令、ファームウェア、ソフトウェア、サブタスクカウンタ、アイドルタスク、及び/又は本明細書に記載された方法及びシステムで使用するのに好適なその他何らかの種類のデータを記憶するようにさらに構成される。さらに、メモリ12及びプロセッサ14は別々のものとして図示されており、当然ながら、プロセッサ14及びメモリ12を含む統合装置はいくつかのコンピューティング装置の実行形態に使用される。
例示的な実行形態では、コンピューティング装置10は、プロセッサ14に結合されているプレゼンテーションインターフェース16を含む。プレゼンテーションインターフェース16は、限定しないが、インストールデータ、コンフィギュレーションデータ、テストデータ、エラーメッセージ、及び/又はユーザ20に対する任意の他の形式のデータなどの情報を出力(例:表示、印刷及び/又はその他の出力)する。例えば、プレゼンテーションインターフェース16は、陰極線管(CRT)、液晶ディスプレイ(LCD)、発光ダイオード(LED)ディスプレイ、有機LED(OLED)ディスプレイ、及び/又は「電子インク」ディスプレイなどのディスプレイデバイスに結合されたディスプレイアダプタ(図1に示せず)を含む。いくつかの実行形態では、プレゼンテーションインターフェース16は一よりも多い表示装置を含む。
例示的な実行形態では、コンピューティング装置10は、ユーザ20からの入力を受信する入力インターフェース18を含む。例示的な実行形態では、入力インターフェース18はプロセッサ14に結合されており、例えば、キーボード、リーダー、ポインティングデバイス、マウス、スタイラスペン、タッチセンサーパネル(例えば、タッチパッド又はタッチスクリーン)、ジャイロスコープ、加速度計、及び/又は音声入力インターフェースを含む。
オペレーティングシステム及びアプリケーションの命令は、本明細書に記載された一又は複数の工程を実行するためにプロセッサ14によって実行される持続性メモリ12の機能性の形態で位置決めされている。異なる実行形態のこれらの命令は、例えばメモリ12、又は別のメモリ等の異なる物理的又は有形のコンピュータによって読取可能な媒体、例えば非限定的にフラッシュドライブ、CD―ROM、サムドライブ、フロッピー(登録商標)ディスク等を含むコンピュータによって読取可能な媒体22で具現化される。
さらに命令は、例えば非限定的に、フラッシュドライブ、CDーROM、サムドライブ、フロッピー(登録商標)ディスク等を含む持続性のコンピュータによって読取可能な媒体22の機能性の形態で位置決めされている。コンピュータによって読取可能な媒体22は、プロセッサ14によるアクセス及び/又は実行を可能にするためにコンピューティング装置10に選択的に挿入可能、及び/又は取り出し可能である。ある実行例では、コンピュータによって読取可能な媒体22は、メモリ12及び/又はプロセッサ14に関連するCD/DVDドライブ又は他のデバイスに挿入又は配置される光ディスク又は磁気ディスクを含む。場合によっては、コンピュータで読み取り可能な媒体22は取り外し可能でなくともよい。
コンピューティング装置10は、本明細書に記載されるように実行されるように様々な処理環境において具現化される。具体的には、例えば、コンピューティング装置10は非限定的に、一又は複数のパソコン、組み込みシステム、ワークステーション、サーバ、サーバシステム、ネットワークコンピュータ、ポータブルコンピュータ(例:iPAD(登録商標))、スマートホン、タブレット、及び/又は一又は複数の作業を実行するために好適なその他の装置を含む。当然ながら、本明細書のコンピューティング装置10は、処理システム及び/又は装置の一又は複数の組み合わせによって提供される。
一般に、プロセッサ14は一又は複数のタスクを実行するために提供される。各タスクはマルチプルサブタスクを含み、各サブタスクはさらにサブタスクを含むことができる。このように、タスクは処理エンジンによって実行されるサブタスクに分解できる。本明細書で使用する「タスク」という表現は、タスク及びサブタスクのいずれか、あるいは両方を指すものである。さらに、一つのタスクと一又は複数の他のタスクとの関係を示すために、階層的な表現(例:親又はメイン)をタスクと組み合わせて使用する場合がある。図1に示すように、例示の実行形態では、プロセッサ14は一又は複数の処理エンジン24をソフトウェア、ファームウェア、ハードウェアにおいて提供する。一又は複数の処理エンジン24は、キューマネージャ25とタスクマネージャ27を含む。
例示の実行形態では、キューマネージャ25は、キュー26を出入りするタスクの動きを管理するように構成されており、その一方タスクマネージャ27は、下記の図2及び3に示すように、スレッドに入った時にどの方法でタスクが実行されているか及び/又は処理されているかを決定するように構成されている。各処理エンジン24は、ソフトウェア及び/又はファームウェアによって提供された、処理コア29ごとに一又は複数のスレッド31を有する一又は複数の処理コア29を含む。タスクマネージャ27は、特定の一又は複数のタスクを実行するために、タスク及び/又はサブタスクをキュー26から本明細書で記載される一又は複数のスレッド31に割り当てる機能を持つ。
例示の実行形態では、タスクマネージャ27は、コアアフィニティ閾値及び/又は負荷バランス閾値に基づくタスク配分メトリックを決定するように構成される。さらに具体的には、タスクマネージャ27はキューマネージャ25によって表示されるように、プロセッサ14の現在の状態、及び/又はキュー26から処理すべき一又は複数の次のタスクから予測されるプロセッサ14の状態に基づいて、一又は複数のタスク配分メトリックを決定する。さらに、タスクマネージャ27は、現在の及び/又は予測される状態に基づいたタスク配分メトリックをコアアフィニティ閾値及び/又は負荷バランス閾値と比較する。この比較に基づき、タスクマネージャ27は次のタスクをコアアフィニティ閾値の関数として特定の処理エンジン24に割り当てる、あるいは負荷バランス閾値の関数として別の処理エンジン24に割り当てる。加えて、又はこれに代えて、タスクマネージャ27は次のタスクが再入可能タスク及び/又はサブタスクに分割できるタスクであるか否かに基づいて、次のタスクを割り当てる。
このように、タスクマネージャ27は、タスクの利用可能な処理エンジン24への配分を予測的に及び/又はリアルタイムで、キューマネージャ25(例:再入可能タスク、メインタスク)によって管理され、処理エンジン24によって実行されるタスクの種類の関数として制御する。本明細書のコアアフィニティ及び/又は負荷バランスの能力によりさらに、一又は複数の処理エンジン24間の負荷バランスを提供しながら、既知の方法に比べて利用可能な処理エンジン24全体のタスクの実行をより効率的に行うことが可能になる。
図2は、一又は複数のタスクを実行するために使用する例示の方法100を示す。本明細書に記載される方法は、プロセッサ14に関連する少なくとも一つの処理エンジンによって実行される少なくとも一つのステップ及び/又は工程を含む。図2の例示の実行形態では、例えば、方法100は一又は複数のコンピューティング装置10において提供されるプロセッサ14に関連する一又は複数の処理エンジンによって実行される。
タスクがコンピューティング装置10内で生成されると、タスクはキュー26の適所へ挿入される。キュー26は先入れ先出し(FIFO)キューであり、タスクがキュー26に挿入された順番でスレッド31が利用可能になった場合にスレッド31にタスクが割り当てられる。当然ながら、その他の種類のキュー26(後入れ先出し(LIFO)キュー、又はその他の非FIFOキュー)及び/又は一又は複数のスレッドとのインタラクション、及び複合キューをその他の実行形態において使用できる。さらに当然ながら、上述したように、キュー26はメモリ12内にあるところを図示されているが、キューはメモリ12に、またプロセッサ14の内部又は外部に含まれうる。
方法100が開始されると、プロセッサ14に関連するタスク配分メトリックは、処理エンジン24、又はプロセッサ14内の別の処理リソースによって決定される101。タスク配分メトリックは例えば、処理エンジン24に含まれるスレッド内の一又は複数のタスクの配分/実行に関連する負荷バランス、コアアフィニティ、又はその他のメトリックを示すものである。タスク配分メトリックの決定101では、処理エンジン24はメトリックを一又は複数のスレッドと比較して、プロセッサ14に関連するコアアフィニティ及び/又は負荷バランスが、プロセッサ14の一又は複数の異なる所望の実行を行うために十分か、不十分か、最適か、又は非最適であるかを決定する。
例えば、タスク配分メトリックは、メモリへの任意の数の読み込み及び/又は書き込みを含む。閾値はメモリ12への任意の数の読み込み及び/又は書き込みであり、メモリ12への実際の読み込み及び/又は書き込みの数が第1所定数を超える場合、プロセッサ14に関連するコアアフィニティは第2閾値を下回る。逆に、メモリ12の実際の読み込み及び/又は書き込みの数が(第1所定数と同じ又は異なる)第2所定数よりも少ない場合、又はプロセッサ14のコアがアイドルである場合、プロセッサ14に関連する負荷バランスは第1閾値を下回る。プロセッサ14のその他さまざまな特徴及び/又は性能により、他の実行形態におけるコアアフィニティ及び/又は負荷バランスを示すタスク配分メトリックが提供される。
例えば少なくとも1つのプロセッサ14に関連する負荷バランスが第1閾値を下回ることをタスク配分メトリックが示す場合、タスクマネージャ27は処理するタスクをスレッドに割り当てる。タスクを受け取ると、スレッドは、タスクが以前複数のスレッドのうちの任意の一つに割り当てられた再入可能タスクであるか否かを決定102するように稼働する。この例示の実行形態にあるように、「再入可能」タスクという表現は、以前処理エンジン24のスレッドに割り当てられており、本明細書に記載される方法100の一又は複数の他のステップに依存するタスクを指すものである。
図2に示すように、タスクが再入可能タスクでない場合、方法100は、タスクがマルチプルサブタスクに分割可能か否かの決定104へ進む。タスクは、例えばタスク内の作業関係、タスク内の作業数、タスク内の作業の複雑さ等の一又は複数の異なる基準に基づいて分割可能である。ある実行形態では、タスクの分割可能性はさらに、使用されるスレッド、処理エンジン24、及び/又はプロセッサ14の種類及び/又は容量に関連する。
タスクが分割可能である場合、スレッドはタスクのマルチプルサブタスクをキュー26へ挿入する106。サブタスクがキュー26に入った後で、スレッドは、タスクがスレッドに割り当てられたことを示す状態を設定108する。さらに、スレッドは次の処理のためにタスクをキュー26に再入110させて、他のタスクのためにスレッドを開放116する。スレッドが、タスクが分割可能でないことを決定104した場合、スレッドはタスクを実行112する。タスクが実行された後で、スレッドはタスクの状態を完了と設定114し、一又は複数の他のタスクで使用するためにスレッドを開放116する。
さらに、タスクがキュー26に再入したために、スレッドは再入タスクと関連する、又は関連していない他のタスクを自由に完了させることができる。したがって、方法100は、タスクが完了するまでスレッドに残ることを可能にする代わりに、スレッドを解放するところが既知の方法と異なるところである。一又は複数の実行形態において、方法100を用いて処理エンジン24、プロセッサ14、及び/又はコンピューティング装置10内のスレッド飢餓状態、デッドロック、及び/又はライブロックを減らす、制限する及び/又は除去することができる。さらに、当然ながら、方法100はステップ116で終了する、すなわちスレッドを解放するため、本明細書の方法100及び他の方法は、プロセッサ14内で割り当てられたリソース内で効率的にタスクの様々な複雑性を実行するのに好適である。少なくとも一つの実行形態では、処理エンジン24は、マルチプルサブタスクを有する少なくとも一つのタスクを有するマルチプルタスクを実行するための単一スレッドを含む。
再び図2を参照する。スレッドが、タスクがスレッドに以前割り当てられていた(例えば、ステップ108で設定されたタスクの状態で示される)と決定102した場合、スレッドは停止基準が満たされたか否かを決定120する。停止基準は例えば、完了したタスクに関する一つの、幾つかの、ある割合の、及び/又は全てのサブタスク、又はタスクに関連する特定のタスクが完了したことを含む。少なくとも一つの実施形態では、タスクがマルチプルサブタスクに分割され、キュー26に挿入される106と、サブタスクカウンタが生成され、このカウンタはサブタスクのうちの一つが完了するたびにデクリメントすることができる。上記実施形態では、停止基準は、サブタスクカウンタがゼロと等しい時、すなわち、タスクに従属する各マルチプルサブタスクが完了した時を含むことができる。ある実行例では、停止基準は、少なくとも一つのマルチプルサブタスクが完了した時を含むことができる。様々な実施形態では、最小量の処理が実行され、タスクを進めることができることを示すために、多様な異なる基準が提供されている。他の実施形態では、適切なレベルの完了が達成されたこと、及び/又はタスクが完全に実行されたことを決定するために他の基準が使用される。当然ながら、停止基準は、実行されるタスクの種類、及び/又はタスクが実行される方法に関連する一又は複数のパラメータ(例えば精度)に基づいて変化する。
停止基準が満たされない場合、スレッドは次の処理のためにタスクをキュー26に再入110させ、これによりスレッドは他のタスクのために解放される。そうでなく、停止基準が満たされた場合、スレッドは任意にタスクに関連する一又は複数の蓄積タスクを実行122する。例えば、蓄積タスクは非限定的に、複数の完了サブタスクの結果への実行、例えば多数の結果を加算する等を含む。少なくとも一つの実施形態では、ステップ122において蓄積タスクが実行されない。蓄積タスクが完了した時に、必要に応じて、スレッドはタスクの状態を完了に設定114して、一又は複数の他のタスクで使用するためにスレッドが開放116される。
図2に示す方法100は、他のタスクが完了するのを待機しているアイドルタスクからスレッドを開放することによって、処理エンジンがタスクを処理できるようにする。方法100は、数千、数十万、数百万又はそれ以上のタスク及び/又はサブタスクを処理エンジン24に割り当てて、既知の方法よりもさらに迅速にさらに効率的にタスクを完了させるために使用される。例示の実行形態では、タスクの種類、又はタスクの他のタスクに対する関係を考慮せずに、スレッドが解放されキュー26からの次のタスクが割り当てられるため、方法100ではさらに、幾つかのスレッド間の負荷バランスが改善される。このため、方法100では、一又は複数の実施形態において処理エンジン24のコアアフィニティへのエンファシスを軽減し、いくつかの処理エンジン24間の負荷バランスの改善が強調される。
さらに、多様性において、各スレッドはタスクを処理しているか、又はタスクをキュー26へ移動させるかのいずれかを実行しているため、本明細書の方法はスレッドを効率的に使用し、これにより、既知の処理方法においては問題(例:スレッド飢餓状態、デッドロック、及び/又はライブロック)が生じるタスクの実行に、より少ないスレッド(例えば単一スレッド)が使用されうる。
タスク配分メトリックが、方法100において決定101されたように、少なくとも一つのプロセッサ14に関連するコアアフィニティが第2閾値を下回ることを示す場合、処理エンジン24はノードAにおいて、一又は複数のタスクを実行するために使用する例示の方法200へ分岐する。例示の方法200は図3に示されている。
方法100と同様に、タスクがコンピューティング装置10内で生成された時、タスクはキュー26の適所に挿入される。キュー26は、先入れ先出し(FIFO)キューであり、スレッドが利用可能になった時にタスクがキュー26に挿入された順でタスクがスレッドに割り当てられる。上述したように、当然ながら、他の種類のキュー26、及び/又はスレッドとのインタラクションを他の実施形態において使用可能である。処理エンジン24のスレッドが利用可能になると、処理のためにタスクがスレッドに割り当てられる。図3の例示の実行形態では、タスクを受け入れた時に、スレッドはタスクがマルチプルサブタスクに分割可能か否かの決定202を実行する。上述したように、タスクは一又は複数の異なる基準、例えばタスク内の作業の関係、タスク内の作業数等に基づいて分割可能である。
タスクが分割可能である場合、スレッドはタスクのマルチプルサブタスクをキュー26に挿入し204、他のタスクを実行するためにスレッドが開放212される。
逆に、タスクが分割可能でない場合、スレッドはタスクを実行し206、タスクがメインタスクであるか否かを決定する208。本明細書で使用する「メインタスク」という表現は、少なくとも一つのサブタスクを有するが、他のタスクに対するサブタスクではないタスクを指すものである。タスクがメインタスクであることが決定された場合、スレッドはタスクが完了したことを決定し、タスクの状態を完了に設定し210、他のタスクを実行するためにスレッドを解放する212。しかしながらタスクがメインタスクではない場合、スレッドは、親タスクの停止基準が満たされたか否かを決定する214。上述したように、停止基準は、タスクがマルチプルサブタスクに分割された時に生成されたサブタスクカウンタの値、又はタスク又はサブタスクの完了のその他様々な評価基準である。
親タスクの停止基準が満たされない場合、スレッドはタスクが完了したことを決定し、タスクの状態を完了に設定し210、他のタスクを実行するためにスレッドを解放する212。
逆に、親タスクの停止基準が満たされた場合、処理エンジン24は親タスクをスレッドにプルし216、必要に応じて親タスクに関連する蓄積タスクを実行する218。蓄積タスクが完了した際に、もしあれば、スレッドは親タスクがメインタスクであるか否かを決定する208ためにループバックする。本明細書に記載された工程は、メインタスクが完了したことが決定されるまで継続し、スレッドが開放される212。親タスクをスレッドにプルすることで、タスクを実行した後に、方法200は、マルチプルサブタスクを有するタスクを実行する既知の方法よりもエンハンストコアアフィニティを高め、一又は複数の実施形態における処理エンジン24間の負荷バランスへのエンファシスを軽減することができる。さらに具体的には、サブタスク、又は親タスクの下のタスクは同じスレッドによって実質的に実行され、これにより既知の方法に比べて、メインタスクの関連タスクが同じ処理エンジン24において実行される可能性がより高くなる。
さらに、停止基準が満たされる前に、他のタスクが完了するまで待機しているアイドルタスクからスレッドが開放される212ことで、方法200は既知の方法よりもさらに迅速にさらに効率的にタスクを完了させることができる。このように、各スレッドはタスクを処理している、又はタスクをキュー26へ移動させている、のいずれかであるため、処理エンジン24はその一又は複数のスレッドを効率的に使用する。
上記効率的な使用により、より少ないスレッドを使用して、既知の処理方法において問題(例:スレッド飢餓状態、デッドロック、及び/又はライブロック)が生じるタスクを実行することができる。このように、本明細書に記載される方法は、スレッドの数が限定された特定の処理環境、及び/又は効率性が好まれるその他の処理環境において使用され、その一方で、スレッド飢餓状態、デッドロック、及び/又はライブロック状態の可能性が制限される及び/又は除去される。
当然ながら、方法100及び方法200は互いに連動する形で本明細書に記載されているが、一つ、又は両方の方法、及び/又はこれらの方法の置換えをその他様々な実施形態で別々に使用可能である。例えば、負荷バランスが制御設計の検討事項であるコンピューティング装置においては、方法100を方法200と組み合わせずに単独に使用する。別の実行例では、コアアフィニティが制御設計の検討事項であるコンピューティング装置において、方法200を方法100と組み合わせずに単独に使用する。上記実施形態では、タスク配分メトリックを決定するステップは修正又は省略される。
説明及び図面において、少なくとも一つの処理エンジン24によってタスクを実行するために使用されるコンピュータによって実行可能な方法が開示されており、この方法は、一又は複数のスレッド31を有する少なくとも一つの処理エンジン24を有する少なくとも一つのプロセッサ14に関連するタスク配分メトリックを決定するステップと、タスク配分メトリックが、少なくとも一つのプロセッサ14に関連する負荷バランスが第1閾値を下回ることを示す場合に、一又は複数のスレッド31のうちの一つにタスクを割り当てるステップと、少なくとも一つの処理エンジン24によって、タスクが少なくとも一つの処理エンジン24に関連する前記一又は複数のスレッド31の任意の一つに以前割り当てられた再入可能タスクであるか否かを決定するステップと、タスクが再入可能タスクである場合、少なくとも一つの処理エンジン24によって停止基準が満たされたか否かを決定するステップと、停止基準が満たされておらず、タスクが再入可能タスクである場合、少なくとも一つの処理エンジン24に関連するタスクのキュー26にタスクを再入させるステップと、タスク配分メトリックが、少なくとも一つのプロセッサ14に関連するコア29アフィニティが第2閾値を下回ることを示す場合に、少なくとも一つの処理エンジン24によって、タスクがメインタスクであるか否かを決定するステップと、タスクがメインタスクでない場合、少なくとも一つの処理エンジン24によって停止基準が満たされたか否かを決定するステップと、停止基準が満たされており、タスクがメインタスクでない場合、タスクに関連する親タスクを一又は複数のスレッド31のうちの前記一つにプルするステップを含む。
ある変形例では、本方法において、タスクが再入可能タスクである場合に停止基準が満たされたか否かを決定するステップが、タスクに従属する少なくとも一つのマルチプルサブタスクが完了したか否かを決定することを含む。別の変形例では、方法はさらに、タスクをタスクのキュー26に再入させた後で、前記一又は複数のスレッド31のうちの前記一つを解放することを含む。さらに別の変形例では、本方法はさらに、タスクが再入可能タスクでない場合に、タスクを複数のサブタスクに分割可能であるか否かを決定することを含む。ある場合には、本方法はさらに、タスクが分割可能である場合、少なくとも一つの処理エンジン24によって、タスクの複数のサブタスクをキュー26に挿入することを含む。別の場合において、本方法はさらに、停止基準が満たされた場合に、少なくとも一つの処理エンジン24によって、少なくとも一つの蓄積タスクを実行することを含む。ある実行例において、本方法はさらに、親タスクが一又は複数のスレッド31のうちの前記一つにプルされた後で、親タスクに関連する少なくとも一つの蓄積タスクを実行することを含む。別の実行例では、本方法において、タスクがメインタスクでない場合に停止基準が満たされたか否かを決定するステップが、タスクに従属するマルチプルサブタスクのそれぞれが完了したか否かを決定することを含む。さらに別の実行例では、本方法はさらに、停止基準が満たされておらず、タスクがメインタスクでない場合に、タスクをタスクのキュー26に再入させた後で、タスクの状態を完了に設定し、一又は複数のスレッド31のうちの前記一つを解放することを含む。ある代替例では、本方法はさらに、タスクがメインタスクであるか否かを決定する前に、タスクを複数のサブタスクへ分割可能であるか否かを決定することを含む。さらに別の代替例では、本方法はさらに、タスクが分割可能である場合、タスクの複数のサブタスクをタスクのキュー26へ挿入することを含む。
ある態様では、タスクの実行において使用するコンピューティング装置が開示されており、このコンピューティング装置は、タスクのキュー26を記憶するメモリ12装置と、メモリ12装置に結合し、一又は複数のスレッドを有し少なくとも一つの処理エンジン24を含むプロセッサ14を含み、前記少なくとも一つの処理エンジン24はタスクマネージャ27とキューマネージャ25を含み、キューマネージャ25は、タスクの前記キュー26を管理するように構成されており、前記タスクマネージャ27は前記プロセッサ14に関連するタスク配分メトリックを決定し、タスクを一又は複数のスレッド31のうちの一つに割り当てるように構成されており、前記タスクマネージャ27は、タスク配分メトリックが前記プロセッサ14に関連する負荷バランスが第1閾値を下回ることを示す場合に、タスクが前記一又は複数のスレッド31のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定し、タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、タスクが再入可能タスクである場合に、タスクをタスクのキュー26に前記キューマネージャ25を介して再入させるように構成されており、前記タスクマネージャ27は、タスク配分メトリックが、前記プロセッサ14に関連するコア29アフィニティが第2閾値を下回ることを示す場合に、タスクがメインタスクであるか否かを決定し、タスクがメインタスクでない場合に、停止基準が満たされたか否かを決定し、停止基準が満たされており、タスクがメインタスクではない場合に、タスクに関連する親タスクを一又は複数のスレッド31のうちの前記一つにプルするように構成されている。
ある変形例では、コンピューティング装置において、前記タスクマネージャ27はさらに、タスクが再入可能タスクでない場合、タスクを複数のサブタスクに分割可能であるか否かを決定するように構成されている。別の変形例では、コンピューティング装置において、前記タスクマネージャ27はさらに、タスクが分割可能である場合、前記キューマネージャ25を介してタスクの複数のサブタスクをキュー26に挿入するように構成されている。さらに別の変形例では、コンピューティング装置において、前記タスクマネージャ27はさらに、複数のサブタスクのうちの一つを一又は複数のスレッド31のうちの2番目の一つに割り当てて、複数のサブタスクのうちの一つが再入可能タスクであるか否かを決定するように構成されている。ある場合には、コンピューティング装置において、前記タスクマネージャ27はさらに、停止基準が満たされた時に少なくとも一つの蓄積タスクを実行するように構成されている。別の場合において、コンピューティング装置では、タスクマネージャ27はさらに、タスクがメインタスクであるか否かを決定する前に、タスクを複数のサブタスクに分割可能であるか否かを決定するように構成されている。ある実施例では、コンピューティング装置において、前記タスクマネージャ27はさらに、タスクが分割可能である場合、前記キューマネージャ25を介してタスクの複数のサブタスクをキュー26に挿入するように構成されている。別の実施例では、コンピューティング装置において、前記タスクマネージャ27はさらに、親タスクが一又は複数のスレッド31のうちの前記一つにプルされた後で、親タスクに関連する少なくとも一つの蓄積タスクを実行するように構成されている。
さらに、当然ながら、本発明の一又は複数の態様は、本明細書に記載された機能、方法、及び/又は工程を実行するように構成された時に、汎用コンピューティング装置を特殊用途のコンピューティング装置に変換する。
本明細書では、ベストモードを含む様々な実施形態を開示する実施例を使用しているため、当業者は任意の装置やシステムの作成ならびに使用、及び組込まれた任意の方法の実行を含め、実施形態を実行することができる。特許性を有する範囲は、特許請求の範囲によって規定され、当業者であれば想起できる他の実施例を含みうる。このような他の実施例は、それらが特許請求の範囲の文字言語から逸脱しない構造要素を有する場合、あるいは、それらが特許請求の範囲の文字言語との有意でない相違を有する等価な構造要素を含んでいる場合は、特許請求の範囲の範囲内にあることを意図している。
また、本願は以下に記載する態様を含む。
(態様1)
少なくとも一つの処理エンジン(24)によってタスクを実行するために使用するコンピュータによって実行される方法であって、
少なくとも一つの処理エンジン(24)を有する少なくとも一つのプロセッサ(14)に関連するタスク配分メトリックを決定するステップであって、前記少なくとも一つの処理エンジン(24)が一又は複数のスレッド(31)を有する、決定するステップと、
前記タスクを前記一又は複数のスレッド(31)のうちの一つに割り当てるステップと、
前記タスク配分メトリックが、前記少なくとも一つのプロセッサ(14)に関連する負荷バランスが第1閾値を下回ることを示す場合、前記少なくとも一つの処理エンジン(24)によって、前記タスクが前記少なくとも一つの処理エンジン(24)に関連する前記一又は複数のスレッド(31)のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定するステップと、
前記タスクが再入可能タスクである場合、前記少なくとも一つの処理エンジン(24)によって、停止基準が満たされたか否かを決定するステップと、
前記停止基準が満たされておらず、前記タスクが再入可能タスクである場合に、前記少なくとも一つの処理エンジン(24)に関連するタスクのキュー(26)に前記タスクを再入させるステップと、
前記タスク配分メトリックが、前記少なくとも一つのプロセッサ(14)に関連するコア(29)アフィニティが第2閾値を下回ることを示す場合、前記少なくとも一つの処理エンジン(24)によって、前記タスクがメインタスクであるか否かを決定するステップと、
前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン(24)によって停止基準が満たされたか否かを決定するステップと、
前記停止基準が満たされており、前記タスクがメインタスクでない場合、前記タスクに関連する親タスクを前記一又は複数のスレッド(31)の前記一つにプルするステップ
を含む方法。
(態様2)
前記タスクが再入可能タスクである場合に前記停止基準が満たされたか否かを決定するステップが、前記タスクに従属するマルチプルサブタスクのうちの少なくとも一つが完了したか否かを決定し、前記タスクをタスクのキュー(26)に再入させた後で、前記一又は複数のスレッド(31)のうちの前記一つを解放することを含む、態様1に記載の方法。
(態様3)
前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定し、前記タスクが分解可能である場合に、前記少なくとも一つの処理エンジン(24)によって前記タスクの複数のサブタスクを前記キュー(26)に挿入することをさらに含む、態様1又は2に記載の方法。
(態様4)
前記停止基準が満たされた場合に、前記少なくとも一つの処理エンジン(24)によって少なくとも一つの蓄積タスクを実行し、前記親タスクを前記一又は複数のスレッド(31)のうちの前記一つにプルした後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行することをさらに含む、態様1乃至3のいずれか1項に記載の方法。
(態様5)
前記タスクがメインタスクでない場合に前記停止基準が満たされたか否かを決定するステップが、前記タスクに従属するマルチプルサブタスクのそれぞれが完了したか否かを決定することを含み、前記停止基準が満たされておらず、前記タスクがメインタスクでない場合、前記タスクをタスクのキュー(26)に再入させた後で、前記タスクの状態を完了に設定し、前記一又は複数のスレッド(31)のうちの前記一つを解放することをさらに含む、態様1乃至4のいずれか1項に記載の方法。
(態様6)
前記タスクがメインタスクか否かを決定する前に、前記タスクが複数のサブタスクに分割可能であるか否かを決定し、前記タスクが分割可能である場合、前記タスクの前記複数のサブタスクをタスクのキュー(26)に挿入することをさらに含む、態様5に記載の方法。
(態様7)
タスクの実行において使用するコンピューティング装置であって、前記コンピューティング装置は、
タスクのキュー(26)を記憶するメモリ(12)装置と、
前記メモリ(12)装置に結合し、一又は複数のスレッドを有する少なくとも一つの処理エンジン(24)を含むプロセッサ(14)であって、前記少なくとも一つの処理エンジン(24)はタスクマネージャ(27)とキューマネージャ(25)を含み、前記キューマネージャ(25)はタスクの前記キュー(26)を管理するように構成されており、前記タスクマネージャ(27)は前記プロセッサ(14)に関連するタスク配分メトリックを決定し、前記タスクを前記一又は複数のスレッド(31)のうちの前記一つに割り当てるように構成されている前記プロセッサ(14)を含み、
前記タスクマネージャ(27)は、前記タスク配分メトリックが、前記プロセッサ(14)に関連する負荷バランスが第1閾値を下回ることを示す場合に、前記タスクが、前記一又は複数のスレッド(31)のうちの任意の一つに以前割り当てられた再入可能タスクであるか否かを決定し、前記タスクが再入可能タスクである場合、停止基準が満たされたか否かを決定し、停止基準が満たされておらず、前記タスクが再入可能タスクである場合に、前記タスクをタスクのキュー(26)に前記キューマネージャ(25)を介して再入させるように構成されており、
前記タスクマネージャ(27)は、タスク配分メトリックが、前記プロセッサ(14)に関連するコア(29)アフィニティが第2閾値を下回ることを示す場合に、前記タスクがメインタスクであるか否かを決定し、前記タスクがメインタスクでない場合に、停止基準が満たされたか否かを決定し、停止基準が満たされており、前記タスクがメインタスクではない場合に、前記タスクに関連する親タスクを一又は複数のスレッド(31)のうちの前記一つにプルするように構成されている、コンピューティング装置。
(態様8)
前記タスクマネージャ(27)がさらに、前記タスクが再入可能タスクでない場合に、前記タスクが複数のサブタスクに分解可能であるか否かを決定するようにさらに構成されており、前記タスクマネージャ(27)がさらに、前記タスクが分解可能である場合に、前記キューマネージャ(25)を介して、前記タスクの前記複数のサブタスクを前記キュー(26)に挿入するように構成されている、態様7に記載のコンピューティング装置。
(態様9)
前記タスクマネージャ(27)がさらに、前記複数のサブタスクのうちの一つを前記一又は複数のスレッド(31)のうちの2番目のスレッドに割り当てて、前記複数のサブタスクのうちの前記一つが再入可能タスクであるか否かを決定するように構成されており、
前記タスクマネージャ(27)がさらに、前記停止基準が満たされた時に、少なくとも一つの蓄積タスクを実行するように構成されている、態様7又は8に記載のコンピューティング装置。
(態様10)
前記タスクマネージャ(27)がさらに、前記タスクがメインタスクであるか否かを決定する前に、前記タスクが複数のサブタスクに分解可能であるか否かを決定するように構成されており、前記タスクマネージャ(27)がさらに、前記タスクが分解可能である場合に、前記キューマネージャ(25)を介して前記タスクの前記複数のサブタスクを前記キュー(26)に挿入するように構成されており、前記タスクマネージャ(27)がさらに、前記親タスクを前記一又は複数のスレッド(31)のうちの前記一つにプルした後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するように構成されている、態様7に記載のコンピューティング装置。
10 コンピューティング装置
12 メモリ
14 プロセッサ
16 プレゼンテーションインターフェース
18 入力インターフェース
20 ユーザ
22 コンピュータが読取可能な媒体
24 処理エンジン
25 キューマネージャ
27 タスクマネージャ
29 処理コア
31 スレッド
100 方法
200 方法

Claims (9)

  1. 少なくとも一つの処理エンジン(24)によってタスクを実行するために使用するコンピュータによって実行される方法であって、
    少なくとも一つの処理エンジン(24)を有する少なくとも一つのプロセッサ(14)に関連するタスク配分メトリックを決定するステップであって、前記少なくとも一つの処理エンジン(24)が各々が一又は複数のスレッド(31)を有する複数の処理コアを有する、前記タスク配分メトリックを決定するステップと、
    前記タスクを前記一又は複数のスレッド(31)のうちの一つに割り当てるタスク割当を実行するステップであって、タスク配分メトリックに従って、
    (a)負荷バランス方法か(b)コアアフィニティ方法のいずれかを用いる、前記タスク割当を実行するステップとを含み、
    前記負荷バランス方法は、前記タスク配分メトリックが、前記少なくとも一つのプロセッサ(14)に関連する負荷バランスが第1閾値を下回ることを示す場合に実行されるものであり、
    前記負荷バランス方法は、
    前記少なくとも一つの処理エンジン(24)によって、前記タスクが再入可能タスクであるか否かを決定するステップであって、前記タスクが前記少なくとも一つの処理エンジン(24)に関連する前記一又は複数のスレッド(31)のうちの任意の一つに以前割り当てられていた場合に前記タスクが再入可能タスクであるとされる、前記タスクが再入可能タスクであるか否かを決定するステップと、
    前記タスクが再入可能タスクである場合、前記少なくとも一つの処理エンジン(24)によって、前記タスクの停止基準が満たされたか否かを決定するステップであって、該停止基準は該タスクに従属するいくつかまたはすべてのサブタスクが完了したかどうかを含む、前記タスクの停止基準が満たされたか否かを決定するステップと、
    再入可能タスクである前記タスクの前記停止基準が満たされていない場合に、前記少なくとも一つの処理エンジン(24)に関連するタスクのキュー(26)に前記タスクを再入させた後に、前記タスクが割り当てられていた前記一又は複数のスレッドのうちの一つを解放するステップと、を含み、
    前記コアアフィニティ方法は、前記タスク配分メトリックが、前記少なくとも一つのプロセッサ(14)に関連するコア(29)アフィニティが第2閾値を下回ることを示す場合に実行されるものであり、
    前記コアアフィニティ方法は、
    前記少なくとも一つの処理エンジン(24)によって、前記タスクがメインタスクであるか否かを決定するステップであって、メインタスクとは少なくとも一つのサブタスクを有するが他のタスクのサブタスクでないものである、前記タスクがメインタスクであるか否かを決定するステップと、
    前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン(24)によって前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップと、
    前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされている場合に、メインタスクではない前記タスクが割り当てられていたスレッドと同じスレッドに、前記親タスクを割り当てるステップと、を含む、方法。
  2. 前記負荷バランス方法は、さらに、
    前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定するステップと、
    前記タスクが分解可能である場合に、前記少なくとも一つの処理エンジン(24)によって前記タスクの複数のサブタスクを前記キュー(26)に挿入するステップを含む、請求項1に記載の方法。
  3. 前記負荷バランス方法は、さらに、前記タスクの前記停止基準が満たされた場合に、前記少なくとも一つの処理エンジン(24)によって少なくとも一つの蓄積タスクを実行するステップを含み、
    前記コアアフィニティ方法における前記親タスクを割り当てるステップの後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するステップを含む、請求項1または2に記載の方法。
  4. 前記タスクがメインタスクでない場合、前記少なくとも一つの処理エンジン(24)によって前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップが、前記親タスクに従属する複数のサブタスクのそれぞれが完了したか否かを決定することを含み、
    前記コアアフィニティ方法は、さらに、
    前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされていない場合、メインタスクではない前記タスクの状態を完了に設定し、
    メインタスクではない前記タスクに割り当てられていた前記一又は複数のスレッド(31)のうちの一つを解放するステップを含む、請求項1乃至3のいずれか1項に記載の方法。
  5. 前記コアアフィニティ方法は、さらに、
    前記タスクがメインタスクか否かを決定する前に行われる、前記タスクが複数のサブタスクに分割可能であるか否かを決定するステップと、
    前記タスクが分割可能である場合、前記タスクの前記複数のサブタスクをタスクのキュー(26)に挿入するステップを含む、請求項4に記載の方法。
  6. タスクの実行において使用するコンピューティング装置であって、前記コンピューティング装置は、
    タスクのキュー(26)を記憶するメモリ(12)装置と、
    前記メモリ(12)装置に結合し、それぞれが一又は複数のスレッド(31)を有する複数の処理コアを有する少なくとも一つの処理エンジン(24)を含むプロセッサ(14)とを含み、
    前記少なくとも一つの処理エンジン(24)はタスクマネージャ(27)とキューマネージャ(25)を含み、
    前記キューマネージャ(25)はタスクの前記キュー(26)を管理するように構成されており、
    前記タスクマネージャ(27)は前記プロセッサ(14)に関連するタスク配分メトリックを決定するように構成されており、
    前記タスクマネージャ(27)は、前記タスクを前記一又は複数のスレッド(31)のうちの一つに割り当てるに際して、タスク配分メトリックに従って、(a)負荷バランス方法か(b)コアアフィニティ方法のいずれかを用いるように構成されており、
    前記負荷バランス方法は、前記タスク配分メトリックが、少なくとも一つの前記プロセッサ(14)に関連する負荷バランスが第1閾値を下回ることを示す場合に、前記タスクマネージャ(27)に実行されるものであり、
    前記負荷バランス方法は、
    前記タスクが再入可能タスクであるか否かを決定するステップであって、前記タスクが前記少なくとも一つの処理エンジン(24)に関連する前記一又は複数のスレッド(31)のうちの任意の一つに以前割り当てられていた場合に前記タスクが再入可能タスクであるとされる、前記タスクが再入可能タスクであるか否かを決定するステップと、
    前記タスクが再入可能タスクである場合、前記タスクの停止基準が満たされたか否かを決定するステップであって、該停止基準は該タスクに従属するいくつかまたはすべてのサブタスクが完了したかどうかを含む、前記タスクの停止基準が満たされたか否かを決定するステップと、
    再入可能タスクである前記タスクの前記停止基準が満たされていない場合に、前記キューマネージャ(25)を介して、前記少なくとも一つの処理エンジン(24)に関連するタスクのキュー(26)に前記タスクを再入させた後に、前記タスクが割り当てられていた前記一又は複数のスレッド(31)のうちの一つを解放するステップと、を含み、
    前記コアアフィニティ方法は、前記タスク配分メトリックが、少なくとも一つの前記プロセッサ(14)に関連するコア(29)アフィニティが第2閾値を下回ることを示す場合に、前記タスクマネージャ(27)に実行されるものであり、
    前記コアアフィニティ方法は、
    前記タスクがメインタスクであるか否かを決定するステップであって、メインタスクとは少なくとも一つのサブタスクを有するが他のタスクのサブタスクでないものである、前記タスクがメインタスクであるか否かを決定するステップと、
    前記タスクがメインタスクでない場合、前記タスクにとっての親タスクの前記停止基準が満たされたか否かを決定するステップと、
    前記タスクがメインタスクではなく、かつ、前記親タスクの前記停止基準が満たされている場合に、メインタスクではない前記タスクが割り当てられていたスレッドと同じスレッドに、前記親タスクを割り当てるステップと、を含む、コンピューティング装置。
  7. 前記負荷バランス方法は、さらに、
    前記タスクが再入可能タスクでない場合に、前記タスクは複数のサブタスクに分解可能であるか否かを決定するステップと、
    前記タスクが分解可能である場合に、前記キューマネージャ(25)を介して、前記タスクの複数のサブタスクを前記キュー(26)に挿入するステップを含む、請求項6に記載のコンピューティング装置。
  8. 前記タスクマネージャ(27)がさらに、複数の前記サブタスクのうちの一つを前記一又は複数のスレッド(31)のうちの2番目のスレッドに割り当てて、複数の前記サブタスクのうちの前記一つが再入可能タスクであるか否かを決定するように構成されており、
    前記スレッドは、前記停止基準が満たされた時に、少なくとも一つの蓄積タスクを実行するためのものである、請求項6又は7に記載のコンピューティング装置。
  9. 前記コアアフィニティ方法は、さらに、
    前記タスクがメインタスクか否かを決定する前に行われる、前記タスクが複数のサブタスクに分割可能であるか否かを決定するステップと、
    前記タスクが分割可能である場合、前記キューマネージャ(25)を介して、前記タスクの前記複数のサブタスクをタスクの前記キュー(26)に挿入するステップとを含み、
    前記スレッドは、前記コアアフィニティ方法における前記親タスクを割り当てるステップの後で、前記親タスクに関連する少なくとも一つの蓄積タスクを実行するステップを実行するためのものである、請求項6に記載のコンピューティング装置。
JP2013000082A 2012-01-05 2013-01-04 一又は複数のタスクを実行するために使用するシステム及び方法 Active JP5718378B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/344,474 US8621479B2 (en) 2012-01-05 2012-01-05 System and method for selecting task allocation method based on load balancing and core affinity metrics
US13/344,474 2012-01-05

Publications (3)

Publication Number Publication Date
JP2013140593A JP2013140593A (ja) 2013-07-18
JP2013140593A5 JP2013140593A5 (ja) 2013-12-19
JP5718378B2 true JP5718378B2 (ja) 2015-05-13

Family

ID=47754263

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013000082A Active JP5718378B2 (ja) 2012-01-05 2013-01-04 一又は複数のタスクを実行するために使用するシステム及び方法

Country Status (4)

Country Link
US (1) US8621479B2 (ja)
EP (1) EP2613257B1 (ja)
JP (1) JP5718378B2 (ja)
CN (1) CN103279388B (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130332910A1 (en) * 2012-05-22 2013-12-12 Nec Laboratories America, Inc. Dynamic livelock analysis of multi-threaded programs
CN103593240B (zh) * 2013-11-08 2016-11-23 华为技术有限公司 一种优化的调度方法及管理设备
JP6532385B2 (ja) * 2015-11-02 2019-06-19 キヤノン株式会社 情報処理システムおよびその制御方法、並びにプログラム
CN105893147A (zh) * 2016-03-29 2016-08-24 乐视控股(北京)有限公司 多任务队列管理方法、设备及系统
DE102016222375A1 (de) * 2016-11-15 2018-05-17 Robert Bosch Gmbh Vorrichtung und Verfahren zum Bearbeiten von Aufträgen
US20190102274A1 (en) 2017-09-29 2019-04-04 Intel Corporation Utilization Metrics for Processing Engines
CN108920258A (zh) * 2018-06-26 2018-11-30 北京中电普华信息技术有限公司 一种事务处理方法及应用服务中间件
JP7197794B2 (ja) * 2019-03-28 2022-12-28 富士通株式会社 情報処理装置および実行制御プログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872972A (en) 1996-07-05 1999-02-16 Ncr Corporation Method for load balancing a per processor affinity scheduler wherein processes are strictly affinitized to processors and the migration of a process from an affinitized processor to another available processor is limited
US20020099759A1 (en) 2001-01-24 2002-07-25 Gootherts Paul David Load balancer with starvation avoidance
US20030037091A1 (en) * 2001-08-09 2003-02-20 Kozo Nishimura Task scheduling device
US7167916B2 (en) 2002-08-30 2007-01-23 Unisys Corporation Computer OS dispatcher operation with virtual switching queue and IP queues
US7441101B1 (en) 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US8296727B2 (en) * 2005-10-14 2012-10-23 Oracle Corporation Sub-task mechanism for development of task-based user interfaces
US7941805B2 (en) 2006-08-15 2011-05-10 International Business Machines Corporation Affinity dispatching load balancer with precise CPU consumption data
US8356284B2 (en) 2006-12-28 2013-01-15 International Business Machines Corporation Threading model analysis system and method
US7895415B2 (en) 2007-02-14 2011-02-22 Intel Corporation Cache sharing based thread control
US8156495B2 (en) 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
US8407674B2 (en) 2008-02-08 2013-03-26 International Business Machines Corporation Detecting thread starvation
US8239699B2 (en) * 2009-06-26 2012-08-07 Intel Corporation Method and apparatus for performing energy-efficient network packet processing in a multi processor core system
US8381216B2 (en) 2010-03-05 2013-02-19 Microsoft Corporation Dynamic thread pool management
CN101923491A (zh) * 2010-08-11 2010-12-22 上海交通大学 多核环境下线程组地址空间调度和切换线程的方法
CN102184125B (zh) * 2011-06-02 2013-11-13 首都师范大学 异构多核环境下基于程序行为在线分析的负载均衡方法

Also Published As

Publication number Publication date
US8621479B2 (en) 2013-12-31
CN103279388B (zh) 2016-04-06
CN103279388A (zh) 2013-09-04
EP2613257B1 (en) 2020-02-19
US20130179891A1 (en) 2013-07-11
EP2613257A1 (en) 2013-07-10
JP2013140593A (ja) 2013-07-18

Similar Documents

Publication Publication Date Title
JP5718378B2 (ja) 一又は複数のタスクを実行するために使用するシステム及び方法
US11036553B2 (en) Preempting or traversing allocated resource applications based on job priority and resource demand information
US11550627B2 (en) Hardware accelerated dynamic work creation on a graphics processing unit
US9009734B2 (en) Application level speculative processing
US10552213B2 (en) Thread pool and task queuing method and system
US8914805B2 (en) Rescheduling workload in a hybrid computing environment
JP5650952B2 (ja) マルチコア/スレッドのワークグループ計算スケジューラ
US8713571B2 (en) Asynchronous task execution
US9330430B2 (en) Fast queries in a multithreaded queue of a graphics system
US8549524B2 (en) Task scheduler for cooperative tasks and threads for multiprocessors and multicore systems
US20120011389A1 (en) Selectively increasing throughput of a cpu core
JP2018533795A (ja) 計算グラフのストリームベースのアクセラレータ処理
JP2013506179A (ja) 命令スレッドを組み合わせた実行の管理システムおよび管理方法
JP2012511204A (ja) リソースを最適化するためのタスク再編成方法
KR20110075296A (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
US20120284720A1 (en) Hardware assisted scheduling in computer system
JP2014211743A (ja) マルチコアプロセッサ
JP2015106298A (ja) タスク割り付けプログラム及びタスク割り付け方法
JP2014056425A (ja) データ管理装置、データ管理システム、処理割当方法および処理割当プログラム
US9612907B2 (en) Power efficient distribution and execution of tasks upon hardware fault with multiple processors
US11061730B2 (en) Efficient scheduling for hyper-threaded CPUs using memory monitoring
CN112445614A (zh) 一种线程数据的存储管理方法、计算机设备及存储介质
US20080313652A1 (en) Notifying user mode scheduler of blocking events
JP2015148909A (ja) 並列計算機システム、並列計算機システムの制御方法及び管理ノードの制御プログラム
KR20180093875A (ko) 플립 큐 관리에 기초한 그래픽스 컨텍스트 스케줄링

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131030

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150204

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: 20150217

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150318

R150 Certificate of patent or registration of utility model

Ref document number: 5718378

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

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250