説明

非同期のデバイスによって実行されるタスクのスケジューリングの向上

【課題】複数の非同期の処理デバイスのうちの1つによって処理されるタスクをスケジューリングするための方法を、非同期のデバイスとタスクスケジューラとを備えるデータ処理装置と共に提供する。
【解決手段】非同期の処理デバイスは、ローカルストレージおよび複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリに記憶されるデータを処理する。本方法は、非同期の処理デバイスによって処理される複数の非依存タスクのそれぞれについて、非依存タスクの処理の前に実行することが必要な一貫性動作を判定するステップと、非依存タスクのうちの1つについて一貫性動作を実行し、完了時に、処理のために処理デバイスへタスクを発行するステップと、一貫性動作の完了時に、非同期の処理デバイスがさらなるタスクを処理できるように、さらなる非依存タスクについての一貫性動作を実行するステップとを備える。

【発明の詳細な説明】
【技術分野】
【0001】
発明の背景
本発明は、データ処理の分野に関し、特に、非同期のデバイスによって実行されるタスクのスケジューリングに関する。
【背景技術】
【0002】
互いにおよびメモリシステムと相互作用する複数のデバイスを有するシステムが知られている。異なるデバイスがデータについて独自のローカルストレージを有する場合、異なるローカルストレージ位置およびメモリの間のデータの同期を維持する上で問題が生じることがある。概して、デバイスは、キャッシュメンテナンス動作等の一貫性動作の実行、バリアの利用、およびデータが少なくともシステムの他の部分の一部と同期することが重要である実行における特定のポイントでのローカルストレージのフラッシングによってこの問題を解決する。また、長いパイプラインを有する画像処理装置GPU等のデバイスでは、特定の問題が生じる可能性がある。一貫性動作の実行中におけるGPUによるタスクの実行の待機により、バブルをパイプラインに導入することになり、これは、ディープパイプラインにおいて、大きな欠点を有する。
【0003】
先行技術のデバイスは、概して複数回の更新が行われることにより、それに関連付けられる帯域幅コストはかかるが待ち時間は短い、一貫性動作を直ちに実行しているか、あるいは、不必要な複数回の更新を避けることができるが待ち時間は長くなる、待機およびバッチプロセスにおける一貫性動作を共に実行している。
【発明の概要】
【発明が解決しようとする課題】
【0004】
帯域幅に過度に影響を及ぼすことなく、かかる一貫性動作に関連付けられた待ち時間を短縮することが望ましいであろう。
【課題を解決するための手段】
【0005】
第1の態様から概観すると、本発明は、複数の非同期の処理デバイスのうちの1つによって処理されるタスクをスケジューリングするための方法を提供し、前記複数の非同期の処理デバイスのうちの少なくとも2つは、異種デバイスであり、前記タスクのうちの少なくともいくつかは、前記複数の非同期の処理デバイスのうちの特定の1つにターゲットされ、前記非同期の処理デバイスは、ローカルストレージと、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、前記非同期の処理デバイスによって処理される複数の非依存タスクのそれぞれについて、前記非依存タスクの処理前に実行することが必要な一貫性動作を判定することと、前記非依存タスクのうちの1つの前記一貫性動作を実行することと、完了時に、処理のために前記処理デバイスへ前記タスクを発行することと、前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを処理できるように、さらなる非依存タスクについて一貫性動作を実行することと、を含む。
【0006】
本発明は、デバイスが互いに一貫し、その間でデータを自由に受け渡しできる前に、複数の一貫性動作を実行する必要があり得るが、非同期のデバイスが特定のタスクを実行できるように、このタスクを安全に実行するために、実行することが必要な完全な一貫性動作のサブセットしか存在しない可能性を認識している。このため、本発明は、全ての一貫性動作を実行するのではなく、特定のタスクについて必要な一貫性動作を判定し、これらのみを実行する。これらが完了すると、タスクを、処理のために非同期のデバイスに発行することができ、一方で、以降のタスクに必要な一貫性動作を並列で実行できる。これらを完了すると、以降のタスクは、非同期のデバイスによって処理される準備ができる。
【0007】
概して、いずれかの良好に設計されたシステムでは、一貫性動作は、これらに関連付けられたタスクよりも時間がかからないため、以降のタスクについての一貫性動作は、以前のタスクが時間切れになる前に完了し、このため、以降のタスクは、デバイスがそれを実行する準備ができる前に実行のために発行される準備ができる。このため、一貫性動作によってシステムへ導入される待ち時間は、概して、第1のタスクについての一貫性動作に関連付けられた待ち時間にすぎない。
【0008】
デバイスのうちの少なくともいくつかは異種デバイスであり、タスクのうちの少なくともいくつかは特定のデバイスにターゲットされていることに留意されたい。これは、タスクを有用性および搭載によって異なるコアにリダイレクトできる、同種のコアを有するデバイスとは異なる。異種デバイスは、それらの実行能力において異なる特性または能力を有するデバイスである。例えば、専用のイメージ操作回路によるGPUの実行パフォーマンスは、CPU上における同等のソフトウェアよりも効率的かつ格段に速くなる。この差はあまりに明確であるため、一貫性作業の必要性を回避するために、より遅いデバイス上で作業を行うことを選択することが実現可能でなくてもよい。他のデバイスにおいて、あるデバイスにおいて機能性が完全に欠けている可能性があるため、特定の機能が実行できなくなる。本発明は、少なくともいくつかの場合では、タスクをデバイスの間にポートできない状況に関連している。
【0009】
このため、本発明の実施形態およびその実装のための動作の制約とは、デバイスが事前に選択されており、そのため、その選択を、他の最適化の規模として使用することができないということである。
【0010】
いくつかの実施形態では、非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記方法は、前記非依存タスクのうちの前記1つへ依存するいずれかのタスクの再評価の前記非依存タスクの前記1つについて、前記いずれかのタスクが依存であるか非依存であるかを判定するために、さらなる非依存タスクについての一貫性動作の前記ステップが実行される前に前記一貫性動作を実行する前記ステップに従うさらなるステップを含む。
【0011】
非依存タスクは、処理されるいずれかの他の未処理のタスクに依存しないタスクとして考えてもよい。しかしながら、この実施形態の文脈において、非依存タスクは、一貫性動作を実行することが必要ないずれかの他の未処理のタスクに依存しないタスクである。例えば、タスクa、b、cおよびdが、以下の依存関係、a=>b=>d、およびc=>dを有する場合(つまり、aをbの前に、bをdの前に、cをdの前に実行する必要がある)、最初に、aおよびcは非依存タスクとして考えられる。しかしながら、タスクaについて一貫性動作が実行されると、タスクaが完了したかどうかに関係なく、タスクbの一貫性動作がタスクcのものよりも小さい場合にこれらが先に実行できるように、bが非依存タスクとして考えられる。このため、タスクが現在、非依存と考えられているかどうかに照らして、各一貫性タスクが完了後、一貫性作業の順序を再評価することができる。
【0012】
いくつかの実施形態では、前記非同期の処理デバイスは、前記タスクの実行前と、処理されるか、または、前記非同期の処理デバイスがより以前のタスクを処理している場合に処理を待機する前記タスク記憶行列に記憶される、前記非同期の処理デバイスへ前記さらなるタスクを伝送する、前記さらなる非依存タスクについての前記一貫性動作の完了時とに、行列内に少なくとも1つのタスクを記憶するためのタスク行列記憶装置を含む。
【0013】
非同期の処理デバイスが行列に少なくとも1つのタスクを記憶するためのタスク行列記憶装置を有する場合に、有利であり得る。その場合、さらなるタスクについての一貫性動作の完了後、このさらなるタスクは非同期の処理デバイスに伝送でき、実行を待機する行列に配置でき、非同期の処理デバイスがその実行の準備ができるとすぐに実行できる。このように、実行されるさらなるタスクの一貫性動作を待機する必要がないため、この時点でパイプラインにバブルは現れず、さらなるタスクは、実行の準備ができている行列で待機する。
【0014】
いくつかの実施形態では、前記方法は、互いに独立して実行できる前記タスクの部分を判定し、可能な場合、前記タスクを前記複数の非依存タスクに細分化する初期ステップを含む。
【0015】
タスクを細分化するためにどれが最も適切な原子タスクであるかを判定することが有利であり得る。言い換えると、何が作成可能な非依存タスクの最も小さい細分化であるかである。タスクを小さい分割に細分化することにより、システムの待ち時間を削減することができ、このように、小さいタスクについて一貫性動作を実行できるため、次のタスクの一貫性動作が実行される間にタスクを実行できる。
【0016】
いくつかの実施形態では、前記方法は、前記タスクの依存関係を判定し、初期の待ち時間を削減するために前記タスクの順序付けを提供する前記初期のステップに従うステップを含む。
【0017】
タスクが非依存タスクに細分化されると、初期の待ち時間を削減するために、各タスクについての一貫性作業のサイズに基づいて、スケジューラによって順序付けを実行することができる。このため、最も小さい一貫性作業を有するタスクを、最初に実行されるように選択してもよい。
【0018】
他の実施形態では、前記さらなる非依存タスクについての前記一貫性動作を実行した後で、前記方法は、前記さらなるタスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへ出力する準備ができている優先される行列内に前記さらなるタスクを記憶する。
【0019】
非同期の処理デバイス上にタスク行列記憶装置が存在しない場合、リングバッファの形態であってもよい優先される行列にさらなるタスクが記憶されると、有利であり得る。この行列は、同期動作を実行するデバイス上にあってもよい、または、メモリ内であってもよい。タスクは、出力の準備ができたこの優先される行列に存在する。非同期のデバイスがさらなるタスクを処理する準備ができている場合、一貫性動作を実行するデバイスへこれをシグナル送信し、タスクを、迅速および効率的にそれに伝送できる。これは、非同期のデバイスにおいて、さらなるタスクについて待機が長くなりすぎることを防止する。このシステムの1つの欠点は、異なるデバイスの間に必要な通信がより多いということである。
【0020】
いくつかの実施形態では、前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作および他のデータ伝送動作のうちの少なくとも1つを含む。
【0021】
実行される一貫性動作は、データを一貫性あるものにするための同期動作等の動作である。デバイスが一定して動作することを必要とする他の動作が存在してもよい。例えば、エイリアスをコピーすることを伴ってもよい。
【0022】
いくつかの実施形態では、方法は、複数のさらなる非依存タスクについての一貫性動作を実行することと、前記複数のさらなるタスクのそれぞれについての前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを受信するための容量を有するかどうかを判定することと、前記非同期の処理デバイスに応答して、前記さらなるタスクを前記非同期の処理デバイスに発行する容量を有することを、さらに含む。
【0023】
本発明の実施形態は、非同期の処理デバイス上での実行を待機する全ての非依存タスクについての一貫性動作が次々に実行される場合に、特に有利である。この場合、これらの非同期の動作が非同期の処理デバイスに発行されるように実行されるとすぐに、これらのタスクは準備ができている。
【0024】
タスクは、そのタスク行列記憶装置が容量を有することを示す非同期の処理デバイスからの指示に応答して、非同期の処理デバイスに発行されてもよい。こうした信号が受信される場合、その同期動作が完了したいずれのタスクも伝送できる。多くの実施形態では、タスク行列は、いくつかのタスクを並列で記憶でき、このため、2つのデバイス間にこれらのタスクを伝送するために単一伝送を使用でき、したがって、時間および電力が節約される。
【0025】
いくつかの実施形態では、前記方法は、さらに、前記タスク行列記憶装置が容量を有するという指示を前記非同期の処理デバイスから受信することと、前記指示および完了した一貫性動作を有するタスクがないことに応答して、未処理の一貫性動作の完了時において対応するタスクを前記行列に配置できるように、前記指示を留意することと、を含む。
【0026】
タスク行列記憶装置が容量を有するという指示を受信し、現在、完了した一貫性動作が存在していない場合、システムは、この指示を留意してもよく、未処理の一貫性動作の完了時に、対応するタスクを行列内に配置できる。このように、さらなるタスクを、準備ができると、かつ、パイプラインに現れるバブルを避けるのにできれば間に合うように、タスク行列に記憶するための非同期のデバイスに送信することができる。
【0027】
いくつかの実施形態では、前記タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられている最も少ない数の一貫性動作を有するかを判定することと、前記最も少ない数の一貫性動作を実行することと、前記他の一貫性動作およびタスクを実行する前に前記非同期の処理デバイスに前記タスクを発行することと、を含む。
【0028】
どのタスクが最も短い待ち時間で最少の数の一貫性動作を有するかを判定することが有利であり得る。これが行われると、これらの動作が完了するとすぐに、つまり、より多くの同期動作を有するタスクが選択される場合よりも迅速に、非同期の処理デバイスにタスクを送信できる。このようにシステムの待ち時間が短縮される。さらにより長い待ち時間一貫性動作を実行することができ、一方で、最短の待ち時間一貫性動作を有するタスクが処理される。挙動が良好なシステムにおいて前述のように、タスクは、概して、同期動作よりも時間がかかり、このため、次のタスクは、その同期動作を完了させ、以前のタスクが完了する前に処理の準備ができているべきである。
【0029】
いくつかの実施形態では、前記タスクを処理する前記非同期の処理デバイスは、ディープパイプラインを有する画像処理装置を備える。
【0030】
非同期の処理デバイスは、多様なものであってもよいが、ディープパイプラインを有する画像処理装置に特に有利である。バブルがディープパイプラインに現れることは特に不利であり、このため、このように同期動作を実行し、タスクが画像処理装置に送信される待ち時間を削減することは、バブルを低減させ、システムのパフォーマンスを向上させるために役立ち得る。
【0031】
いくつかの実施形態では、非同期の中央処理装置で前記一貫性動作が実行される。
【0032】
多数の処理デバイスにおいて一貫性動作を実行できるが、多くの場合、これは、スケジューリングおよび一貫性動作を実行する中央処理装置である。
【0033】
本発明の第二の態様は、プロセッサによって実行される場合に、本発明の第一の態様に従う方法においてステップを実行するために前記プロセッサを制御する、プログラムを含むコンピュータプログラム製品を提供する。
【0034】
本発明の第三の態様は、データ処理のための複数の非同期の処理デバイスを含むデータ処理装置であって、前記非同期の処理デバイスのうちの少なくともいくつかは、ローカルデータストレージを含む、データ処理装置と、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、前記複数の非同期の処理デバイスのうちの少なくとも1つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、前記非同期の処理デバイスのうちの前記少なくとも1つは、実行を待機する少なくとも1つのタスクを記憶するためのタスク行列記憶装置を備え、前記スケジューリング回路は、前記非同期の処理デバイスのうちの1つによって実行される複数の非依存タスクのそれぞれについて、前記タスクの実行の前に実行することが必要な一貫性動作を判定し、前記一貫性動作のパフォーマンスをスケジュールし、完了時に、前記非同期の処理デバイスによって実行される前記タスクを発行し、さらなるタスクについて一貫性動作を実行するように構成される。
【0035】
本発明の上記および他の目的、特徴および利点は、添付の図面に関連して一読されるべき例示的な実施形態の以下の詳細な記載から明らかであろう。
【図面の簡単な説明】
【0036】
【図1】本発明の一実施形態に従うデータ処理装置を示す。
【図2】タスクおよびそれらの関連付けられた同期動作のスケジューリングを概略的に示す
【図3】非依存タスクおよびそれらの同期動作のスケジューリングを概略的に示す。
【図4】本発明の一実施形態に従う方法におけるステップを図示する流れ図を示す。
【図5】本発明の一実施形態の仮想マシン実装を示す。
【発明を実施するための形態】
【0037】
図1は、中央処理装置CPU10、画像処理装置GPU20およびメモリ30を有するデータ処理装置5を示す。中央処理装置および画像処理装置は、互いに、およびバス40を介してメモリと通信する。
【0038】
中央処理装置10は、実行される複数のタスクをスケジューリングするためのスケジューラ12を有する。いくつかの実施形態では、スケジューラは、それらをスケジューリングする前に非依存タスクの最も小さい分割にタスクを細分化してもよい。基本的には、スケジューラは、(図3に示される等の)それらの最小限の形態でユーザ指定タスクを有してもよく、または、スケジューラは、タスク自体において使用される命令のシーケンスに依存するタスクを細分化するための基準を使用してもよい。タスク自体は、コードが細分化を防止する副次的効果を有しても有しなくてもよい等の(CPUによって実行される)汎用の計算である。
【0039】
例えば、単純なタスクを、メモリの各要素から読み込み、これを修正し、同じ位置へ再度書き込んでもよい。この場合、タスクは、ユーザ定義の境界において自明に細分化することができる。特定の場合として、ユーザアプリケーションが、実行されるタスクとしてこれらの読み込み/修正/書き込みを100万回リクエストする場合、50万スレッドの2つのタスク、25万スレッドの4つのタスク等へ細分化することができる。これは、さらなる制御構造の作成が待ち時間削減よりも重要であるという最適条件に役立つ。
【0040】
この細分化を防止する関係を有するより大きいスレッドのグループ分けも存在する。極端な例は、逆にする必要がある数々の100万の項目であり、この場合、各スレッドは、最初および最後の要素、2番目および最後から2番目の要素等の入れ替えに割り当てられる。
【0041】
コードは、さらに、アクセスパターン(NP完了停止問題)を判定できないほど十分に複雑であってもよい、または、アクセスパターンがデータ駆動である場合が存在してもよい(ランタイムにおいて要素アクセスのためのインデックスのリストが提供される)。これは、計算的に集約されすぎていて解析が効果を挙げられないため、さらに細分化することはしない。
【0042】
これらの場合の混合は、典型的なアプリケーションで処理する場合、実生活において見られ、細分化を実行すべきものを判定するために「最善努力」解析が使用される。
【0043】
これらの非依存タスクのそれぞれは、ジョブが実行するデバイス上において一貫性あるものにされる必要のあるものに関連付けられたリソースを有する。このため、CPU10は、タスクをそれらのターゲットデバイス上で正常に実行するために、何の一貫性動作を実行することが必要かを判定する。
【0044】
この例において、画像処理装置20上で実行されるタスクを考える。このため、CPU10は、GPU20上で実行される非依存タスクを判定し、各タスクを実行できる前に何の一貫性動作を実行する必要があるかを判定する。スケジューラ12は、これらの一貫性動作のどれが最小コストを有するか、つまり、最も迅速に実行されるかを判定し、これらの動作を最初に実行する。以前にタスクを小さい非依存タスクに細分化していることにより、各タスクに関連付けられた一貫性動作の数は少なくなり、このため、一貫性タスクの実行の待機によって生じる待ち時間が短縮されることに留意されたい。
【0045】
一貫性動作が完了すると、これらの一貫性動作に関連付けられたタスクは、実行できる場合に、GPU20へ送信される。CPU10は、次いで、さらなるタスクがGPU上で実行されるように一貫性動作を実行し、これらが完了すると、タスク記憶装置22に記憶される場合に、GPU20へさらなるタスクを伝送する。
【0046】
CPUは、さらなるタスクについて一貫性動作を実行し、タスク記憶装置22がいっぱいになると、優先されるオペレーティングシステムによって所有される行列である優先される短い待ち時間または優先行列14に、これらを記憶する。この行列は、FIFOとして、またはメモリ30内のCPUに関連付けられたリングバッファとして実装されてもよい。CPU10が、タスク記憶装置22を有しないGPUと通信している場合に、次のタスクの処理の準備ができていることを示すGPUからの信号を待機するこの優先される行列に、未処理のタスクを記憶することを留意されたい。
【0047】
図2は、タスクのスケジューリングおよび実行、ならびに複数のタスクの一貫性動作を概略的に示す。このため、これらに関連付けられた複数の一貫性動作C1〜C6を有する複数のタスクT1〜T6が存在する。図示されるように、一貫性動作C3は、コストが最小であり、このため、これらは、最初に実行され、T3を完了すると、GPU20による実行のために発行される。次いで一貫性動作C1が実行され、T1を完了すると、GPU20に発行され、タスク記憶行列22に配置される。この実施形態において、GPUは、実行しているコマンドを記憶するためのレジスタである2つの実行レジスタを構成する2つのディープ行列および未解決であるコマンドを記憶するための2つの影のレジスタを有し、これらはタスク記憶行列として使用される。このレジスタインタフェースは、バス上に構成され、GPUがタスク上で作業を開始するようにシグナル送信される時点においてGPUへと内部的に記憶され、これにより、同じレジスタを次のタスクのために準備することができることを留意されたい。
【0048】
次いで、一貫性動作C2、C7およびC4がスケジューリングされ、完全なタスクT2、T7およびT4がCPU上の優先行列14に配置される。GPUがタスクT3を完了すると、影のレジスタが容量を有していることを示すCPUへ、中断を伝送する。この時点において、一貫性動作C2、C7およびC4が完了すると、未処理のタスクT7、T4およびT2が伝送され、タスク記憶装置として作用する影のレジスタに記憶される。タスクが共に送信される場合、影のレジスタのうちの1つにおいて、タスクリストとして共に記憶することができ、このように、タスク記憶装置は、多数のタスクを共に受信でき、いずれかの一時点において送信され、行列において未処理で配置されているタスク数を増加できるように、これらを共に記憶できる。
【0049】
次いでタスクT1が実行され、これが完了すると、再び、容量を有する影のレジスタが存在し、このため、さらなる中断がCPUに送信され、C5およびC6であるタスクT5およびT6の同期動作が完了すると、タスクT5およびT6は、優先される行列において準備ができており、これらを伝送することもできる。
【0050】
このように、多数のタスクの一貫性動作を事前に実行することができ、これらによって、パイプライン内のバブルなしに、次々にタスクを実行することができる。さらに、いくつかのタスクを同時に伝送する準備ができている場合に、これらを共に伝送および記憶することができ、こうして、帯域幅およびストレージ要件を低減する。
【0051】
図3は、タスクAおよびBをいずれの順序でも実行することができる非依存タスクであり、一方で、タスクCは、完了した際に実行することが必要なタスクであることを概略的に示す。このため、タスクおよびBは、いずれの順序でもCPUによってスケジューリング可能なタスクである。これらのタスクは、共に、画像プロセッサGPU20によって実行され、これらに関連付けられた一貫性動作XおよびYを有する。この図に概略的に示されているように、一貫性動作Yは、一貫性動作Xより大きく、このため、CPU内のスケジューラは、最初に実行される一貫性動作Xをスケジューリングし、これらが完了すると、実行のためにGPU20にタスクAを発行する。次いで、一貫性タスクYが実行される。この実施形態において、一貫性タスクYが完了するとGPUにタスク行列は存在しないため、タスクBは、タスクAが完了したことを示すGPUからの信号を待機する優先行列に記憶される。この信号を受信すると、タスクBは実行のためにGPUに伝送される。
【0052】
タスクBは、一貫性動作Yが完了した後すぐにGPUからの信号を待機する優先される行列に入れることができる、またはいくつかの実施形態において、CPUが、タスクAにかかる、およびGPUの準備ができることを計算する時点あたりで、行列にタスクBを入れる推定の長さを推定できることに留意されたい。このように、タスクBは、非常に長い間、優先行列に存在せず、他のタスクを優先行列に配置させることができる。
【0053】
両方のタスクAおよびBが完了後、タスクCは、それに関連付けられる可能性のあるいずれかの一貫性動作が完了していることを条件として、処理が可能である。これらは、タスクAまたはBの実行中に実行されていてもよい。
【0054】
図4は、本発明の一実施形態に従う方法のステップを示す流れ図を示す。
【0055】
この方法では、最初、実行されるタスクは複数の非依存タスクに分割される。このタスク分割は、最小の要素のタスクに実行される。
【0056】
非同期のデバイス上で複数の非依存タスクのそれぞれを実行するために実行される同期動作が判定される。どの同期動作が最小コストを有するか、およびこれらの同期動作が最初に実行されることが判定される。
【0057】
これが完了すると、それらに関連付けられたタスクが非同期のデバイスへ発行され、実行されるさらなるタスクが存在するかどうかが判定される。存在する場合には、同期動作の次のセットが実行されてもよい。この前に、いくつかの実施形態では、(この図に示されていないが)いずれかの以前の依存タスクが同期動作の完了後、非依存であるかどうかを判定するステップが実行される。そうである場合には、それらに関連付けられた同期動作は、実行される同期動作のリストに追加され、それらのコストが低い場合に、次のセットとして選択されてもよい。
【0058】
次の組の同期動作が実行されると、非同期のデバイス上のタスク行列がいっぱいであるかどうかが判定される。いっぱいである場合には、その同期動作が実行されたため実行の準備ができたタスクは、CPUまたはタスク行列にスペースがあることを示す非同期のデバイスからの信号を待機するメモリ内に行列される、または、タスク行列がない場合には、非同期のデバイスはタスクを実行する準備ができている。この信号が受信されると、非同期のデバイスにタスクが発行される。
【0059】
非同期のデバイス上のタスク行列がいっぱいになっていない場合、完了した同期動作に関連付けられたタスクはすぐにその行列に発行され、同期動作が完了した。発行されるさらなるタスクが存在しない場合、方法は終了する。
【0060】
図5は、使用し得る仮想マシン実装を示す。上述の実施形態は、関連する技術をサポートする特定の処理ハードウェアを作動するための装置および方法に関して、本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム510をサポートする典型的にはホストオペレーティングシステム520を実行するホストプロセッサ530上で実行する。典型的には、大規模で強力なプロセッサに、適した速度で実行する仮想マシン実装を提供することが必要とされているが、互換性または再利用の理由で、別のプロセッサが元来持つコードを実行したい場合等の特定の状況において、こうしたアプローチは正当化されてもよい。仮想マシンプログラム510は、こうした真のハードウェアデバイスによるプログラムの実行によって与えられるものと同じ結果を与えるために、アプリケーションプログラム(またはオペレーティングシステム)500を実行することが可能である。このため、非同期のデバイスによって実行されるタスクのスケジューリングは、仮想マシンプログラム510を使用して、アプリケーションプログラム500内において実行され得る。
【0061】
添付の図面を参照し、本発明の例示的な実施形態が本明細書に詳細に記載されているが、本発明はこれらの完全な実施形態に制限されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱せずに、当業者によって、本明細書において種々の変更および修正を適用することができることを理解されたい。

【特許請求の範囲】
【請求項1】
複数の非同期の処理デバイスのうちの1つによって処理されるタスクをスケジューリングするための方法であって、前記複数の非同期の処理デバイスのうちの少なくとも2つは異種デバイスであり、前記タスクのうちの少なくともいくつかは前記複数の非同期の処理デバイスのうちの特定の1つにターゲットされ、前記非同期の処理デバイスは、ローカルストレージと、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、
前記非同期の処理デバイスのうちの1つによって処理される複数の非依存タスクのそれぞれについて、前記非依存タスクの処理前に実行することが必要な一貫性動作を判定することと、
前記非依存タスクのうちの1つについて前記一貫性動作を実行し、完了時に、処理のために前記非同期の処理デバイスのうちの前記1つに前記タスクを発行することと、
前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを処理できるように、さらなる非依存タスクについて一貫性動作を実行することと、
を含む、方法。
【請求項2】
非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記方法は、前記非依存タスクのうちの前記1つへ依存するいずれかのタスクを再評価する前記非依存タスクのうちの前記1つについて、前記いずれかのタスクが依存または非依存であるかどうかを判定するために、さらなる非依存タスクの一貫性動作の前記ステップが実行される前に前記一貫性動作を実行する前記ステップに従うさらなるステップを含む、請求項1に記載の方法。
【請求項3】
前記非同期の処理デバイスは、タスクの実行前と、処理されるか、または、前記非同期の処理デバイスがより前のタスクを処理している場合に処理を待機する前記タスク記憶装置の行列に記憶される、前記非同期の処理デバイスへ前記さらなる前記タスクを伝送する前記さらなる非依存タスクについての前記一貫性動作の完了時とに、行列内に少なくとも1つのタスクを記憶するためのタスク行列記憶装置を備える、請求項1または2に記載の方法。
【請求項4】
前記非同期の処理デバイスから前記タスク行列記憶装置が容量を有するという指示を受信し、前記指示に応答して実行の準備ができているいずれかのさらなるタスクを伝送することをさらに含む、請求項3に記載の方法。
【請求項5】
前記非同期の処理デバイスから、前記タスク行列記憶装置が容量を有するという指示を受信することと、前記指示および完了する一貫性動作を有するタスクがないことに応答して、未処理の同期動作の完了時において、対応するタスクを前記行列に配置できるように前記指示に留意することと、をさらに含む、請求項3または4に記載の方法。
【請求項6】
互いに独立して実行できる前記タスクの部分を判定し、可能な場合に前記複数の非依存タスクに前記タスクを細分化する初期のステップを含む、請求項1乃至5のいずれか1つに記載の方法。
【請求項7】
前記初期のステップは、前記タスクのうちの少なくともいくつかを最小限の可能なタスクに細分化することを含む、請求項6に記載の方法。
【請求項8】
前記タスクの依存関係を判定することと、初期の待ち時間を低減するために前記タスクの順序付けを提供することと、の前記初期のステップ後に実行されるステップをさらに含む、請求項6または7に記載の方法。
【請求項9】
前記さらなる非依存タスクについて前記一貫性動作を実行した後に、前記方法は、前記さらなるタスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへの出力の準備ができている優先される行列内に前記さらなるタスクを記憶する、請求項1乃至8のいずれか1つに記載の方法。
【請求項10】
前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作のうちの少なくとも1つと他のデータ伝送動作とを含む、請求項1乃至9のいずれか1つに記載の方法。
【請求項11】
前記方法は、複数のさらなる非依存タスクについて一貫性動作を実行することと、前記複数のさらなる非依存タスクのそれぞれについての前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなる非依存タスクを受信するための容量を有するかどうかを判定することと、前記非同期の処理デバイスに応答して、前記さらなる非依存タスクを前記非同期の処理デバイスに発行する容量を有することと、をさらに含む、請求項1乃至10のいずれか1つに記載の方法。
【請求項12】
前記タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられた最少の数の一貫性動作を有するかを判定することと、前記最少の数の一貫性動作を実行することと、他のタスクについて前記他の一貫性動作を実行する前に、前記非同期の処理デバイスへ前記タスクを発行することと、を含む、請求項1乃至11のいずれか1つに記載の方法。
【請求項13】
前記タスクを処理する前記非同期の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項1乃至12のいずれか1つに記載の方法。
【請求項14】
前記一貫性動作は非同期の中央処理装置上で実行される、請求項13に記載の方法。
【請求項15】
プロセッサによって実行される場合に、請求項1乃至14のいずれか1つに記載の方法におけるステップを実行するために、前記プロセッサを制御することになるプログラムを非一時的な形態で記憶する、コンピュータプログラム製品。
【請求項16】
データ処理装置であって、
データ処理のための複数の非同期の処理デバイスであって、前記非同期の処理デバイスのうちの少なくともいくつかはローカルデータストレージを含み、前記非同期の処理デバイスのうちの少なくとも2つは異種デバイスである、処理デバイスと、
前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、
前記複数の非同期の処理デバイスのうちの特定の1つに対象とされる前記タスクのうちの少なくともいくつかにおいて前記複数の非同期の処理デバイスのうちの少なくとも1つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、
前記非同期の処理デバイスのうちの前記少なくとも1つは、実行を待機する少なくとも1つのタスクを記憶するためのタスク行列記憶装置を備え、
前記スケジューリング回路は、前記タスクの実行の前に実行することが必要な一貫性動作を判定することと、前記一貫性動作のパフォーマンスをスケジュールすることと、完了時に前記非同期の処理デバイスによって実行される前記タスクを発行することと、さらなるタスクについて一貫性動作を実行するように、前記非同期の処理デバイスのうちの1つによって実行される複数の非依存タスクのそれぞれについて構成される、データ処理装置。
【請求項17】
非依存タスクは、処理前に一貫性動作を実行することを必要とする全てのタスクとは独立したタスクであり、前記スケジューリング回路は、前記非依存タスクのうちの前記1つへの前記タスク依存を評価するための前記非依存タスクのうちの1つについての前記一貫性動作の完了後に、かつ、前記評価されたタスクのうちのいずれかが現在非依存であることの判定に応答して、前記一貫性動作のパフォーマンスをスケジューリングする際に、今では非依存である前記タスクについての一貫性動作を含むように構成される、請求項16に記載のデータ処理装置。
【請求項18】
前記非同期の処理デバイスは、タスク行列として少なくとも1つの未処理のタスクを記憶するように構成されるデータ記憶装置を備え、前記スケジューリング回路は、前記さらなるタスクについての対応する一貫性動作の完了時に前記さらなるタスクを発行するように構成され、前記さらなるタスクは、前記非同期のデバイスが前記タスクを完了していない場合に、前記タスク行列内に記憶される、請求項16または17に記載のデータ処理装置。
【請求項19】
前記スケジューリング回路は、前記タスク行列記憶装置が容量を有するという指示の前記非同期の処理デバイスからの受信に応答して、実行の準備ができているいずれかのさらなるタスクを転送するように構成される、請求項18に記載のデータ処理装置。
【請求項20】
前記スケジューリング回路は、前記タスク行列記憶装置がタスクを記憶するための容量をいつ有するかを示す前記非同期の処理デバイスから、かつ、さらなるタスクの開始のための一貫性動作をスケジューリングするために、前記指示および完了する一貫性動作を有るタスクがないことに応答して、信号を受信するように構成される、請求項18または19に記載のデータ処理装置。
【請求項21】
前記スケジューリング回路は、互いに独立して実行できる前記タスクの部分を判定し、かつ、可能な場合に、前記複数の非依存タスクへ前記タスクを細分化するようにさらに構成される、請求項16乃至20のいずれか1項に記載のデータ処理装置。
【請求項22】
前記データ処理装置は、前記複数の非同期のデバイスのうちの少なくとも1つによって実行されるタスクを記憶するための優先される行列を備え、前記スケジューリング回路は、前記非同期のデバイスが前記タスクを完了していない場合に、前記さらなるタスクについての対応する一貫性動作の完了時に、前記非同期のデバイスへの出力の準備ができた前記優先される行列内に前記さらなるタスクを記憶するように構成される、請求項16乃至21のいずれか1つに記載のデータ処理装置。
【請求項23】
前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作および他のデータ伝送動作のうちの少なくとも1つを備える、請求項16乃至22のいずれか1つに記載のデータ処理装置。
【請求項24】
前記スケジューリング回路は複数のさらなる非依存タスクについて一貫性動作を実行するように構成され、前記複数のさらなるタスクのそれぞれについての前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを受信するための容量を有するかどうか、かつ、前記さらなるタスクを前記非同期の処理デバイスへ発行する容量を有する前記非同期の処理デバイスに応答して、判定すること、請求項16乃至23のいずれか1つに記載のデータ処理装置。
【請求項25】
前記スケジューリング回路は、前記複数の非依存タスクのどれが実行される最少の一貫性動作を有するかを判定するように構成され、前記スケジューリング回路は、第1の組の一貫性動作として、かつ実行される前記対応するタスクを発行するための完了時に、実行される前記最少の一貫性動作をスケジュールするように構成される、請求項16乃至24のいずれか1つに記載のデータ処理装置。
【請求項26】
前記タスクを処理する前記非同期の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項16乃至25のいずれか1項に記載のデータ処理装置。
【請求項27】
中央処理装置を含み、前記中央処理装置は、前記スケジューリング回路からのリクエストに応答して前記一貫性動作を実行するように構成される、請求項16乃至26のいずれか1項に記載のデータ処理装置。
【請求項28】
請求項16乃至27のいずれか1つに記載のデータ処理装置に対応するプログラム命令について、仮想マシン実行環境を提供するように、コンピュータを制御するためのコンピュータプログラムを非一時的な形態で記憶する、コンピュータプログラム製品。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−203911(P2012−203911A)
【公開日】平成24年10月22日(2012.10.22)
【国際特許分類】
【外国語出願】
【出願番号】特願2012−66901(P2012−66901)
【出願日】平成24年3月23日(2012.3.23)
【出願人】(594154428)エイアールエム リミテッド (85)