(57)【特許請求の範囲】
【請求項１】
非同期で動作する複数の処理デバイスのうちの１つによって処理されるタスクをスケジューリングするための方法であって、前記非同期で動作する複数の処理デバイスのうちの少なくとも２つは異種デバイスであり、前記タスクのうちの少なくともいくつかは前記非同期で動作する複数の処理デバイスのうちの特定の１つにターゲットされ、前記非同期で動作する複数の処理デバイスは、ローカルストレージと、前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、
前記非同期で動作する複数の処理デバイスのうちの１つによって処理される複数の非依存タスクのそれぞれについて一貫性動作を判定するステップであって、前記一貫性動作は前記非同期で動作する複数の処理デバイス間の一貫性を確保するための動作であり、該一貫性動作は前記非依存タスクの実行前に実行することを必要とする、前記判定するステップと、
前記非依存タスクのうちの１つについて前記一貫性動作を実行するステップであって、完了時に、処理のために前記非同期で動作する複数の処理デバイスのうちの前記１つに複数の前記非依存タスクのうちの１つを発行する、前記一貫性動作を実行するステップと、
前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスがさらなる非依存タスクを処理できるように、前記さらなる非依存タスクについて一貫性動作を実行するステップであって、非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクである、前記さらなる非依存タスクについて一貫性動作を実行するステップと、
前記さらなる非依存タスクについて一貫性動作を実行するステップが実行される前に、前記非依存タスクのうちの前記１つについて前記一貫性動作を実行するステップの後に続いて、前記非依存タスクのうちの前記１つへ依存するいずれかのタスクを再評価して、該いずれかのタスクが依存であるか非依存であるかを判定するステップと
を含む、方法。
【請求項２】
前記非同期で動作する複数の処理デバイスは、タスク行列記憶装置を備え、当該タスク行列記憶装置は、行列内に少なくとも１つのタスクをタスクの実行前に記憶するものであり、前記さらなる非依存タスクについての前記一貫性動作の完了時には、前記さらなる非依存タスクを、非同期で動作する複数の処理デバイスへ伝送することで、処理される、または、前記非同期で動作する複数の処理デバイスがより前のタスクを処理している場合には処理を待機させるタスク行列に記憶される、ようにするものである、請求項１に記載の方法。
【請求項３】
前記非同期で動作する複数の処理デバイスから前記タスク行列記憶装置が容量を有することを受信し、前記タスク行列記憶装置が容量を有することに応答して実行の準備ができているいずれかのさらなる非依存タスクを伝送することをさらに含む、請求項２に記載の方法。
【請求項４】
前記非同期で動作する複数の処理デバイスから、前記タスク行列記憶装置が容量を有することを受信することと、前記タスク行列記憶装置が容量を有することおよび完了する一貫性動作を有するタスクがないことに応答して、未処理の同期動作の完了時において、対応するタスクを前記行列に配置できるように前記指示に留意することと、をさらに含む、請求項２または３に記載の方法。
【請求項５】
互いに独立して実行できる前記タスクの部分を判定し、可能な場合に前記複数の非依存タスクに前記タスクを細分化する初期のステップを含む、請求項１乃至４のいずれか１つに記載の方法。
【請求項６】
前記初期のステップは、前記タスクのうちの少なくともいくつかを最小限の可能なタスクに細分化することを含む、請求項５に記載の方法。
【請求項７】
前記タスクの依存関係を判定することと、初期の待ち時間を低減するために前記タスクの順序付けを提供することと、の前記初期のステップ後に実行されるステップをさらに含む、請求項５または６に記載の方法。
【請求項８】
前記さらなる非依存タスクについて前記一貫性動作を実行した後に、前記方法は、前記さらなる非依存タスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへの出力の準備ができている優先される行列内に前記さらなる非依存タスクを記憶する、請求項１乃至７のいずれか1つに記載の方法。
【請求項９】
前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作のうちの少なくとも１つと他のデータ伝送動作とを含む、請求項１乃至８のいずれか１つに記載の方法。
【請求項１０】
前記方法は、複数のさらなる非依存タスクについて一貫性動作を実行することと、前記複数のさらなる非依存タスクのそれぞれについての前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスが前記さらなる非依存タスクを受信するための容量を有するかどうかを判定することと、前記非同期で動作する複数の処理デバイスが容量を有することに応答して、前記さらなる非依存タスクを前記非同期で動作する複数の処理デバイスに発行することと、をさらに含む、請求項１乃至９のいずれか１つに記載の方法。
【請求項１１】
前記非依存タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられた最少の数の一貫性動作を有するかを判定することと、前記最少の数の一貫性動作を実行することと、他のタスクについて前記他の一貫性動作を実行する前に、前記非同期で動作する複数の処理デバイスへ前記タスクを発行することと、を含む、請求項１乃至１０のいずれか１つに記載の方法。
【請求項１２】
前記タスクを処理する前記非同期で動作する複数の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項１乃至１１のいずれか1つに記載の方法。
【請求項１３】
前記一貫性動作は非同期の中央処理装置上で実行される、請求項１２に記載の方法。
【請求項１４】
データ処理装置によって実行される場合に、請求項１乃至１３のいずれか１つに記載の方法におけるステップを実行するための前記データ処理装置に対応する命令実行環境を提供する仮想マシンを提供するプログラムを非一時的な形態で記憶する、コンピュータプログラム記録媒体。
【請求項１５】
データ処理装置であって、
データ処理のための非同期で動作する複数の処理デバイスであって、前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかはローカルデータストレージを含み、前記非同期で動作する複数の処理デバイスのうちの少なくとも２つは異種デバイスである、処理デバイスと、
前記非同期で動作する複数の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、
前記非同期で動作する複数の処理デバイスのうちの特定の１つに対象とされるタスクのうちの少なくともいくつかにおいて前記非同期で動作する複数の処理デバイスのうちの少なくとも１つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、
前記非同期で動作する複数の処理デバイスのうちの前記特定の１つは、実行を待機する少なくとも１つのタスクを記憶するためのタスク行列記憶装置を備え、
前記スケジューリング回路は、一貫性動作を判定することと、前記一貫性動作のパフォーマンスをスケジュールすることと、完了時に前記非同期で動作する複数の処理デバイスによって実行される前記非依存タスクを発行することと、さらなるタスクについて一貫性動作を実行するように、前記非同期で動作する複数の処理デバイスのうちの１つによって実行される複数の非依存タスクのそれぞれについて構成され、前記一貫性動作は前記非同期で動作する複数の処理デバイス間の一貫性を確保するための動作であり、該一貫性動作は前記非依存タスクの実行前に実行することを必要とし、非依存タスクは、処理前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記スケジューリング回路は、前記非依存タスクのうちの１つについての前記一貫性動作の完了の後に続いて、前記非依存タスクのうちの前記１つへ依存する前記タスクを評価し、評価された前記タスクのうちのいずれかが現在は非依存であるとの判定に応じて、前記一貫性動作のパフォーマンスをスケジューリングする際に、現在では非依存である前記タスクについての一貫性動作を含めるように構成される、データ処理装置。
【請求項１６】
前記非同期で動作する複数の処理デバイスは、タスク行列として少なくとも１つの未処理のタスクを記憶するように構成されるデータ記憶装置を備え、前記スケジューリング回路は、前記さらなるタスクについての対応する一貫性動作の完了時に前記さらなるタスクを発行するように構成され、前記さらなるタスクは、前記非同期のデバイスが前記タスクを完了していない場合に、前記タスク行列内に記憶される、請求項１５に記載のデータ処理装置。
【請求項１７】
前記スケジューリング回路は、前記タスク行列記憶装置が容量を有することの前記非同期で動作する複数の処理デバイスからの受信に応答して、実行の準備ができているいずれかのさらなるタスクを転送するように構成される、請求項１６に記載のデータ処理装置。
【請求項１８】
前記スケジューリング回路は、前記タスク行列記憶装置がタスクを記憶するための容量をいつ有するかを示す前記非同期で動作する複数の処理デバイスから、かつ、さらなるタスクの開始のための一貫性動作をスケジューリングするために、前記タスク行列記憶装置が容量を有することおよび完了する一貫性動作を有するタスクがないことに応答して、信号を受信するように構成される、請求項１６または１７に記載のデータ処理装置。
【請求項１９】
前記スケジューリング回路は、互いに独立して実行できる前記タスクの部分を判定し、かつ、可能な場合に、前記複数の非依存タスクへ前記タスクを細分化するようにさらに構成される、請求項１５乃至１８のいずれか１項に記載のデータ処理装置。
【請求項２０】
前記データ処理装置は、前記複数の非同期のデバイスのうちの少なくとも１つによって実行されるタスクを記憶するための優先される行列を備え、前記スケジューリング回路は、前記非同期のデバイスが前記タスクを完了していない場合に、前記さらなるタスクについての対応する一貫性動作の完了時に、前記非同期のデバイスへの出力の準備ができた前記優先される行列内に前記さらなるタスクを記憶するように構成される、請求項１５乃至１９のいずれか１つに記載のデータ処理装置。
【請求項２１】
前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確保するために、同期動作および他のデータ伝送動作のうちの少なくとも１つを備える、請求項１５乃至２０のいずれか１つに記載のデータ処理装置。
【請求項２２】
前記スケジューリング回路は複数のさらなる非依存タスクについて一貫性動作を実行するように構成され、前記複数のさらなる非依存タスクのそれぞれについての前記一貫性動作の完了時に、前記非同期で動作する複数の処理デバイスが前記さらなる非依存タスクを受信するための容量を有するかどうかを判定し、前記非同期で動作する複数の処理デバイスが容量を有することに応答して、前記さらなる非依存タスクを前記非同期で動作する複数の処理デバイスに発行する、請求項１５乃至２１のいずれか１つに記載のデータ処理装置。
【請求項２３】
前記スケジューリング回路は、前記複数の非依存タスクのどれが実行される最少の一貫性動作を有するかを判定するように構成され、前記スケジューリング回路は、第１の組の一貫性動作として、かつ実行される前記対応するタスクを発行するための完了時に、実行される前記最少の一貫性動作をスケジュールするように構成される、請求項１５乃至２２のいずれか１つに記載のデータ処理装置。
【請求項２４】
前記タスクを処理する前記非同期で動作する複数の処理デバイスは、ディープパイプラインを有する画像処理装置を備える、請求項１５乃至２３のいずれか１項に記載のデータ処理装置。
【請求項２５】
中央処理装置を含み、前記中央処理装置は、前記スケジューリング回路からのリクエストに応答して前記一貫性動作を実行するように構成される、請求項１５乃至２４のいずれか１項に記載のデータ処理装置。
【請求項２６】
データ処理装置によって実行される場合に、請求項１５乃至２５のいずれか１つに記載のデータ処理装置に対応する命令実行環境を提供する仮想マシンを提供するプログラムを非一時的な形態で記憶する、コンピュータプログラム記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の背景
本発明は、データ処理の分野に関し、特に、非同期のデバイスによって実行されるタスクのスケジューリングに関する。
【背景技術】
【０００２】
互いにおよびメモリシステムと相互作用する複数のデバイスを有するシステムが知られている。異なるデバイスがデータについて独自のローカルストレージを有する場合、異なるローカルストレージ位置およびメモリの間のデータの同期を維持する上で問題が生じることがある。概して、デバイスは、キャッシュメンテナンス動作等の一貫性動作の実行、バリアの利用、およびデータが少なくともシステムの他の部分の一部と同期することが重要である実行における特定のポイントでのローカルストレージのフラッシングによってこの問題を解決する。また、長いパイプラインを有する画像処理装置ＧＰＵ等のデバイスでは、特定の問題が生じる可能性がある。一貫性動作の実行中におけるＧＰＵによるタスクの実行の待機により、バブルをパイプラインに導入することになり、これは、ディープパイプラインにおいて、大きな欠点を有する。
【０００３】
先行技術のデバイスは、概して複数回の更新が行われることにより、それに関連付けられる帯域幅コストはかかるが待ち時間は短い、一貫性動作を直ちに実行しているか、あるいは、不必要な複数回の更新を避けることができるが待ち時間は長くなる、待機およびバッチプロセスにおける一貫性動作を共に実行している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
帯域幅に過度に影響を及ぼすことなく、かかる一貫性動作に関連付けられた待ち時間を短縮することが望ましいであろう。
【課題を解決するための手段】
【０００５】
第１の態様から概観すると、本発明は、複数の非同期の処理デバイスのうちの１つによって処理されるタスクをスケジューリングするための方法を提供し、前記複数の非同期の処理デバイスのうちの少なくとも２つは、異種デバイスであり、前記タスクのうちの少なくともいくつかは、前記複数の非同期の処理デバイスのうちの特定の１つにターゲットされ、前記非同期の処理デバイスは、ローカルストレージと、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なメモリとに記憶されるデータを処理し、前記方法は、前記非同期の処理デバイスによって処理される複数の非依存タスクのそれぞれについて、前記非依存タスクの処理前に実行することが必要な一貫性動作を判定することと、前記非依存タスクのうちの１つの前記一貫性動作を実行することと、完了時に、処理のために前記処理デバイスへ前記タスクを発行することと、前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを処理できるように、さらなる非依存タスクについて一貫性動作を実行することと、を含む。
【０００６】
本発明は、デバイスが互いに一貫し、その間でデータを自由に受け渡しできる前に、複数の一貫性動作を実行する必要があり得るが、非同期のデバイスが特定のタスクを実行できるように、このタスクを安全に実行するために、実行することが必要な完全な一貫性動作のサブセットしか存在しない可能性を認識している。このため、本発明は、全ての一貫性動作を実行するのではなく、特定のタスクについて必要な一貫性動作を判定し、これらのみを実行する。これらが完了すると、タスクを、処理のために非同期のデバイスに発行することができ、一方で、以降のタスクに必要な一貫性動作を並列で実行できる。これらを完了すると、以降のタスクは、非同期のデバイスによって処理される準備ができる。
【０００７】
概して、いずれかの良好に設計されたシステムでは、一貫性動作は、これらに関連付けられたタスクよりも時間がかからないため、以降のタスクについての一貫性動作は、以前のタスクが時間切れになる前に完了し、このため、以降のタスクは、デバイスがそれを実行する準備ができる前に実行のために発行される準備ができる。このため、一貫性動作によってシステムへ導入される待ち時間は、概して、第１のタスクについての一貫性動作に関連付けられた待ち時間にすぎない。
【０００８】
デバイスのうちの少なくともいくつかは異種デバイスであり、タスクのうちの少なくともいくつかは特定のデバイスにターゲットされていることに留意されたい。これは、タスクを有用性および搭載によって異なるコアにリダイレクトできる、同種のコアを有するデバイスとは異なる。異種デバイスは、それらの実行能力において異なる特性または能力を有するデバイスである。例えば、専用のイメージ操作回路によるＧＰＵの実行パフォーマンスは、ＣＰＵ上における同等のソフトウェアよりも効率的かつ格段に速くなる。この差はあまりに明確であるため、一貫性作業の必要性を回避するために、より遅いデバイス上で作業を行うことを選択することが実現可能でなくてもよい。他のデバイスにおいて、あるデバイスにおいて機能性が完全に欠けている可能性があるため、特定の機能が実行できなくなる。本発明は、少なくともいくつかの場合では、タスクをデバイスの間にポートできない状況に関連している。
【０００９】
このため、本発明の実施形態およびその実装のための動作の制約とは、デバイスが事前に選択されており、そのため、その選択を、他の最適化の規模として使用することができないということである。
【００１０】
いくつかの実施形態では、非依存タスクは、処理の前に一貫性動作を実行することが必要である全てのタスクに依存しないタスクであり、前記方法は、前記非依存タスクのうちの前記１つへ依存するいずれかのタスクの再評価の前記非依存タスクの前記１つについて、前記いずれかのタスクが依存であるか非依存であるかを判定するために、さらなる非依存タスクについての一貫性動作の前記ステップが実行される前に前記一貫性動作を実行する前記ステップに従うさらなるステップを含む。
【００１１】
非依存タスクは、処理されるいずれかの他の未処理のタスクに依存しないタスクとして考えてもよい。しかしながら、この実施形態の文脈において、非依存タスクは、一貫性動作を実行することが必要ないずれかの他の未処理のタスクに依存しないタスクである。例えば、タスクａ、ｂ、ｃおよびｄが、以下の依存関係、ａ＝＞ｂ＝＞ｄ、およびｃ＝＞ｄを有する場合（つまり、ａをｂの前に、ｂをｄの前に、ｃをｄの前に実行する必要がある）、最初に、ａおよびｃは非依存タスクとして考えられる。しかしながら、タスクａについて一貫性動作が実行されると、タスクａが完了したかどうかに関係なく、タスクｂの一貫性動作がタスクｃのものよりも小さい場合にこれらが先に実行できるように、ｂが非依存タスクとして考えられる。このため、タスクが現在、非依存と考えられているかどうかに照らして、各一貫性タスクが完了後、一貫性作業の順序を再評価することができる。
【００１２】
いくつかの実施形態では、前記非同期の処理デバイスは、前記タスクの実行前と、処理されるか、または、前記非同期の処理デバイスがより以前のタスクを処理している場合に処理を待機する前記タスク記憶行列に記憶される、前記非同期の処理デバイスへ前記さらなるタスクを伝送する、前記さらなる非依存タスクについての前記一貫性動作の完了時とに、行列内に少なくとも１つのタスクを記憶するためのタスク行列記憶装置を含む。
【００１３】
非同期の処理デバイスが行列に少なくとも１つのタスクを記憶するためのタスク行列記憶装置を有する場合に、有利であり得る。その場合、さらなるタスクについての一貫性動作の完了後、このさらなるタスクは非同期の処理デバイスに伝送でき、実行を待機する行列に配置でき、非同期の処理デバイスがその実行の準備ができるとすぐに実行できる。このように、実行されるさらなるタスクの一貫性動作を待機する必要がないため、この時点でパイプラインにバブルは現れず、さらなるタスクは、実行の準備ができている行列で待機する。
【００１４】
いくつかの実施形態では、前記方法は、互いに独立して実行できる前記タスクの部分を判定し、可能な場合、前記タスクを前記複数の非依存タスクに細分化する初期ステップを含む。
【００１５】
タスクを細分化するためにどれが最も適切な原子タスクであるかを判定することが有利であり得る。言い換えると、何が作成可能な非依存タスクの最も小さい細分化であるかである。タスクを小さい分割に細分化することにより、システムの待ち時間を削減することができ、このように、小さいタスクについて一貫性動作を実行できるため、次のタスクの一貫性動作が実行される間にタスクを実行できる。
【００１６】
いくつかの実施形態では、前記方法は、前記タスクの依存関係を判定し、初期の待ち時間を削減するために前記タスクの順序付けを提供する前記初期のステップに従うステップを含む。
【００１７】
タスクが非依存タスクに細分化されると、初期の待ち時間を削減するために、各タスクについての一貫性作業のサイズに基づいて、スケジューラによって順序付けを実行することができる。このため、最も小さい一貫性作業を有するタスクを、最初に実行されるように選択してもよい。
【００１８】
他の実施形態では、前記さらなる非依存タスクについての前記一貫性動作を実行した後で、前記方法は、前記さらなるタスクを処理する準備ができているという指示に応答して、前記非同期のデバイスへ出力する準備ができている優先される行列内に前記さらなるタスクを記憶する。
【００１９】
非同期の処理デバイス上にタスク行列記憶装置が存在しない場合、リングバッファの形態であってもよい優先される行列にさらなるタスクが記憶されると、有利であり得る。この行列は、同期動作を実行するデバイス上にあってもよい、または、メモリ内であってもよい。タスクは、出力の準備ができたこの優先される行列に存在する。非同期のデバイスがさらなるタスクを処理する準備ができている場合、一貫性動作を実行するデバイスへこれをシグナル送信し、タスクを、迅速および効率的にそれに伝送できる。これは、非同期のデバイスにおいて、さらなるタスクについて待機が長くなりすぎることを防止する。このシステムの１つの欠点は、異なるデバイスの間に必要な通信がより多いということである。
【００２０】
いくつかの実施形態では、前記一貫性動作は、前記複数の処理デバイスおよび前記メモリの間の一貫性を確実にするために、同期動作および他のデータ伝送動作のうちの少なくとも１つを含む。
【００２１】
実行される一貫性動作は、データを一貫性あるものにするための同期動作等の動作である。デバイスが一定して動作することを必要とする他の動作が存在してもよい。例えば、エイリアスをコピーすることを伴ってもよい。
【００２２】
いくつかの実施形態では、方法は、複数のさらなる非依存タスクについての一貫性動作を実行することと、前記複数のさらなるタスクのそれぞれについての前記一貫性動作の完了時に、前記非同期の処理デバイスが前記さらなるタスクを受信するための容量を有するかどうかを判定することと、前記非同期の処理デバイスに応答して、前記さらなるタスクを前記非同期の処理デバイスに発行する容量を有することを、さらに含む。
【００２３】
本発明の実施形態は、非同期の処理デバイス上での実行を待機する全ての非依存タスクについての一貫性動作が次々に実行される場合に、特に有利である。この場合、これらの非同期の動作が非同期の処理デバイスに発行されるように実行されるとすぐに、これらのタスクは準備ができている。
【００２４】
タスクは、そのタスク行列記憶装置が容量を有することを示す非同期の処理デバイスからの指示に応答して、非同期の処理デバイスに発行されてもよい。こうした信号が受信される場合、その同期動作が完了したいずれのタスクも伝送できる。多くの実施形態では、タスク行列は、いくつかのタスクを並列で記憶でき、このため、２つのデバイス間にこれらのタスクを伝送するために単一伝送を使用でき、したがって、時間および電力が節約される。
【００２５】
いくつかの実施形態では、前記方法は、さらに、前記タスク行列記憶装置が容量を有するという指示を前記非同期の処理デバイスから受信することと、前記指示および完了した一貫性動作を有するタスクがないことに応答して、未処理の一貫性動作の完了時において対応するタスクを前記行列に配置できるように、前記指示を留意することと、を含む。
【００２６】
タスク行列記憶装置が容量を有するという指示を受信し、現在、完了した一貫性動作が存在していない場合、システムは、この指示を留意してもよく、未処理の一貫性動作の完了時に、対応するタスクを行列内に配置できる。このように、さらなるタスクを、準備ができると、かつ、パイプラインに現れるバブルを避けるのにできれば間に合うように、タスク行列に記憶するための非同期のデバイスに送信することができる。
【００２７】
いくつかの実施形態では、前記タスクのそれぞれについて実行される一貫性動作を判定する前記ステップは、前記タスクのどれがそれに関連付けられている最も少ない数の一貫性動作を有するかを判定することと、前記最も少ない数の一貫性動作を実行することと、前記他の一貫性動作およびタスクを実行する前に前記非同期の処理デバイスに前記タスクを発行することと、を含む。
【００２８】
どのタスクが最も短い待ち時間で最少の数の一貫性動作を有するかを判定することが有利であり得る。これが行われると、これらの動作が完了するとすぐに、つまり、より多くの同期動作を有するタスクが選択される場合よりも迅速に、非同期の処理デバイスにタスクを送信できる。このようにシステムの待ち時間が短縮される。さらにより長い待ち時間一貫性動作を実行することができ、一方で、最短の待ち時間一貫性動作を有するタスクが処理される。挙動が良好なシステムにおいて前述のように、タスクは、概して、同期動作よりも時間がかかり、このため、次のタスクは、その同期動作を完了させ、以前のタスクが完了する前に処理の準備ができているべきである。
【００２９】
いくつかの実施形態では、前記タスクを処理する前記非同期の処理デバイスは、ディープパイプラインを有する画像処理装置を備える。
【００３０】
非同期の処理デバイスは、多様なものであってもよいが、ディープパイプラインを有する画像処理装置に特に有利である。バブルがディープパイプラインに現れることは特に不利であり、このため、このように同期動作を実行し、タスクが画像処理装置に送信される待ち時間を削減することは、バブルを低減させ、システムのパフォーマンスを向上させるために役立ち得る。
【００３１】
いくつかの実施形態では、非同期の中央処理装置で前記一貫性動作が実行される。
【００３２】
多数の処理デバイスにおいて一貫性動作を実行できるが、多くの場合、これは、スケジューリングおよび一貫性動作を実行する中央処理装置である。
【００３３】
本発明の第二の態様は、プロセッサによって実行される場合に、本発明の第一の態様に従う方法においてステップを実行するために前記プロセッサを制御する、プログラムを含むコンピュータプログラム製品を提供する。
【００３４】
本発明の第三の態様は、データ処理のための複数の非同期の処理デバイスを含むデータ処理装置であって、前記非同期の処理デバイスのうちの少なくともいくつかは、ローカルデータストレージを含む、データ処理装置と、前記複数の非同期の処理デバイスのうちの少なくともいくつかによってアクセス可能なデータを記憶するためのメモリと、前記複数の非同期の処理デバイスのうちの少なくとも１つによって実行されるタスクをスケジューリングするためのスケジューリング回路と、を備え、前記非同期の処理デバイスのうちの前記少なくとも１つは、実行を待機する少なくとも１つのタスクを記憶するためのタスク行列記憶装置を備え、前記スケジューリング回路は、前記非同期の処理デバイスのうちの１つによって実行される複数の非依存タスクのそれぞれについて、前記タスクの実行の前に実行することが必要な一貫性動作を判定し、前記一貫性動作のパフォーマンスをスケジュールし、完了時に、前記非同期の処理デバイスによって実行される前記タスクを発行し、さらなるタスクについて一貫性動作を実行するように構成される。
【００３５】
本発明の上記および他の目的、特徴および利点は、添付の図面に関連して一読されるべき例示的な実施形態の以下の詳細な記載から明らかであろう。
【図面の簡単な説明】
【００３６】
【図１】本発明の一実施形態に従うデータ処理装置を示す。
【図２】タスクおよびそれらの関連付けられた同期動作のスケジューリングを概略的に示す
【図３】非依存タスクおよびそれらの同期動作のスケジューリングを概略的に示す。
【図４】本発明の一実施形態に従う方法におけるステップを図示する流れ図を示す。
【図５】本発明の一実施形態の仮想マシン実装を示す。
【発明を実施するための形態】
【００３７】
図１は、中央処理装置ＣＰＵ１０、画像処理装置ＧＰＵ２０およびメモリ３０を有するデータ処理装置５を示す。中央処理装置および画像処理装置は、互いに、およびバス４０を介してメモリと通信する。
【００３８】
中央処理装置１０は、実行される複数のタスクをスケジューリングするためのスケジューラ１２を有する。いくつかの実施形態では、スケジューラは、それらをスケジューリングする前に非依存タスクの最も小さい分割にタスクを細分化してもよい。基本的には、スケジューラは、（図３に示される等の）それらの最小限の形態でユーザ指定タスクを有してもよく、または、スケジューラは、タスク自体において使用される命令のシーケンスに依存するタスクを細分化するための基準を使用してもよい。タスク自体は、コードが細分化を防止する副次的効果を有しても有しなくてもよい等の（ＣＰＵによって実行される）汎用の計算である。
【００３９】
例えば、単純なタスクを、メモリの各要素から読み込み、これを修正し、同じ位置へ再度書き込んでもよい。この場合、タスクは、ユーザ定義の境界において自明に細分化することができる。特定の場合として、ユーザアプリケーションが、実行されるタスクとしてこれらの読み込み／修正／書き込みを１００万回リクエストする場合、５０万スレッドの２つのタスク、２５万スレッドの４つのタスク等へ細分化することができる。これは、さらなる制御構造の作成が待ち時間削減よりも重要であるという最適条件に役立つ。
【００４０】
この細分化を防止する関係を有するより大きいスレッドのグループ分けも存在する。極端な例は、逆にする必要がある数々の１００万の項目であり、この場合、各スレッドは、最初および最後の要素、２番目および最後から２番目の要素等の入れ替えに割り当てられる。
【００４１】
コードは、さらに、アクセスパターン（ＮＰ完了停止問題）を判定できないほど十分に複雑であってもよい、または、アクセスパターンがデータ駆動である場合が存在してもよい（ランタイムにおいて要素アクセスのためのインデックスのリストが提供される）。これは、計算的に集約されすぎていて解析が効果を挙げられないため、さらに細分化することはしない。
【００４２】
これらの場合の混合は、典型的なアプリケーションで処理する場合、実生活において見られ、細分化を実行すべきものを判定するために「最善努力」解析が使用される。
【００４３】
これらの非依存タスクのそれぞれは、ジョブが実行するデバイス上において一貫性あるものにされる必要のあるものに関連付けられたリソースを有する。このため、ＣＰＵ１０は、タスクをそれらのターゲットデバイス上で正常に実行するために、何の一貫性動作を実行することが必要かを判定する。
【００４４】
この例において、画像処理装置２０上で実行されるタスクを考える。このため、ＣＰＵ１０は、ＧＰＵ２０上で実行される非依存タスクを判定し、各タスクを実行できる前に何の一貫性動作を実行する必要があるかを判定する。スケジューラ１２は、これらの一貫性動作のどれが最小コストを有するか、つまり、最も迅速に実行されるかを判定し、これらの動作を最初に実行する。以前にタスクを小さい非依存タスクに細分化していることにより、各タスクに関連付けられた一貫性動作の数は少なくなり、このため、一貫性タスクの実行の待機によって生じる待ち時間が短縮されることに留意されたい。
【００４５】
一貫性動作が完了すると、これらの一貫性動作に関連付けられたタスクは、実行できる場合に、ＧＰＵ２０へ送信される。ＣＰＵ１０は、次いで、さらなるタスクがＧＰＵ上で実行されるように一貫性動作を実行し、これらが完了すると、タスク記憶装置２２に記憶される場合に、ＧＰＵ２０へさらなるタスクを伝送する。
【００４６】
ＣＰＵは、さらなるタスクについて一貫性動作を実行し、タスク記憶装置２２がいっぱいになると、優先されるオペレーティングシステムによって所有される行列である優先される短い待ち時間または優先行列１４に、これらを記憶する。この行列は、ＦＩＦＯとして、またはメモリ３０内のＣＰＵに関連付けられたリングバッファとして実装されてもよい。ＣＰＵ１０が、タスク記憶装置２２を有しないＧＰＵと通信している場合に、次のタスクの処理の準備ができていることを示すＧＰＵからの信号を待機するこの優先される行列に、未処理のタスクを記憶することを留意されたい。
【００４７】
図２は、タスクのスケジューリングおよび実行、ならびに複数のタスクの一貫性動作を概略的に示す。このため、これらに関連付けられた複数の一貫性動作Ｃ１〜Ｃ６を有する複数のタスクＴ１〜Ｔ６が存在する。図示されるように、一貫性動作Ｃ３は、コストが最小であり、このため、これらは、最初に実行され、Ｔ３を完了すると、ＧＰＵ２０による実行のために発行される。次いで一貫性動作Ｃ１が実行され、Ｔ１を完了すると、ＧＰＵ２０に発行され、タスク記憶行列２２に配置される。この実施形態において、ＧＰＵは、実行しているコマンドを記憶するためのレジスタである２つの実行レジスタを構成する２つのディープ行列および未解決であるコマンドを記憶するための２つの影のレジスタを有し、これらはタスク記憶行列として使用される。このレジスタインタフェースは、バス上に構成され、ＧＰＵがタスク上で作業を開始するようにシグナル送信される時点においてＧＰＵへと内部的に記憶され、これにより、同じレジスタを次のタスクのために準備することができることを留意されたい。
【００４８】
次いで、一貫性動作Ｃ２、Ｃ７およびＣ４がスケジューリングされ、完全なタスクＴ２、Ｔ７およびＴ４がＣＰＵ上の優先行列１４に配置される。ＧＰＵがタスクＴ３を完了すると、影のレジスタが容量を有していることを示すＣＰＵへ、中断を伝送する。この時点において、一貫性動作Ｃ２、Ｃ７およびＣ４が完了すると、未処理のタスクＴ７、Ｔ４およびＴ２が伝送され、タスク記憶装置として作用する影のレジスタに記憶される。タスクが共に送信される場合、影のレジスタのうちの１つにおいて、タスクリストとして共に記憶することができ、このように、タスク記憶装置は、多数のタスクを共に受信でき、いずれかの一時点において送信され、行列において未処理で配置されているタスク数を増加できるように、これらを共に記憶できる。
【００４９】
次いでタスクＴ１が実行され、これが完了すると、再び、容量を有する影のレジスタが存在し、このため、さらなる中断がＣＰＵに送信され、Ｃ５およびＣ６であるタスクＴ５およびＴ６の同期動作が完了すると、タスクＴ５およびＴ６は、優先される行列において準備ができており、これらを伝送することもできる。
【００５０】
このように、多数のタスクの一貫性動作を事前に実行することができ、これらによって、パイプライン内のバブルなしに、次々にタスクを実行することができる。さらに、いくつかのタスクを同時に伝送する準備ができている場合に、これらを共に伝送および記憶することができ、こうして、帯域幅およびストレージ要件を低減する。
【００５１】
図３は、タスクＡおよびＢをいずれの順序でも実行することができる非依存タスクであり、一方で、タスクＣは、完了した際に実行することが必要なタスクであることを概略的に示す。このため、タスクおよびＢは、いずれの順序でもＣＰＵによってスケジューリング可能なタスクである。これらのタスクは、共に、画像プロセッサＧＰＵ２０によって実行され、これらに関連付けられた一貫性動作ＸおよびＹを有する。この図に概略的に示されているように、一貫性動作Ｙは、一貫性動作Ｘより大きく、このため、ＣＰＵ内のスケジューラは、最初に実行される一貫性動作Ｘをスケジューリングし、これらが完了すると、実行のためにＧＰＵ２０にタスクＡを発行する。次いで、一貫性タスクＹが実行される。この実施形態において、一貫性タスクＹが完了するとＧＰＵにタスク行列は存在しないため、タスクＢは、タスクＡが完了したことを示すＧＰＵからの信号を待機する優先行列に記憶される。この信号を受信すると、タスクＢは実行のためにＧＰＵに伝送される。
【００５２】
タスクＢは、一貫性動作Ｙが完了した後すぐにＧＰＵからの信号を待機する優先される行列に入れることができる、またはいくつかの実施形態において、ＣＰＵが、タスクＡにかかる、およびＧＰＵの準備ができることを計算する時点あたりで、行列にタスクＢを入れる推定の長さを推定できることに留意されたい。このように、タスクＢは、非常に長い間、優先行列に存在せず、他のタスクを優先行列に配置させることができる。
【００５３】
両方のタスクＡおよびＢが完了後、タスクＣは、それに関連付けられる可能性のあるいずれかの一貫性動作が完了していることを条件として、処理が可能である。これらは、タスクＡまたはＢの実行中に実行されていてもよい。
【００５４】
図４は、本発明の一実施形態に従う方法のステップを示す流れ図を示す。
【００５５】
この方法では、最初、実行されるタスクは複数の非依存タスクに分割される。このタスク分割は、最小の要素のタスクに実行される。
【００５６】
非同期のデバイス上で複数の非依存タスクのそれぞれを実行するために実行される同期動作が判定される。どの同期動作が最小コストを有するか、およびこれらの同期動作が最初に実行されることが判定される。
【００５７】
これが完了すると、それらに関連付けられたタスクが非同期のデバイスへ発行され、実行されるさらなるタスクが存在するかどうかが判定される。存在する場合には、同期動作の次のセットが実行されてもよい。この前に、いくつかの実施形態では、（この図に示されていないが）いずれかの以前の依存タスクが同期動作の完了後、非依存であるかどうかを判定するステップが実行される。そうである場合には、それらに関連付けられた同期動作は、実行される同期動作のリストに追加され、それらのコストが低い場合に、次のセットとして選択されてもよい。
【００５８】
次の組の同期動作が実行されると、非同期のデバイス上のタスク行列がいっぱいであるかどうかが判定される。いっぱいである場合には、その同期動作が実行されたため実行の準備ができたタスクは、ＣＰＵまたはタスク行列にスペースがあることを示す非同期のデバイスからの信号を待機するメモリ内に行列される、または、タスク行列がない場合には、非同期のデバイスはタスクを実行する準備ができている。この信号が受信されると、非同期のデバイスにタスクが発行される。
【００５９】
非同期のデバイス上のタスク行列がいっぱいになっていない場合、完了した同期動作に関連付けられたタスクはすぐにその行列に発行され、同期動作が完了した。発行されるさらなるタスクが存在しない場合、方法は終了する。
【００６０】
図５は、使用し得る仮想マシン実装を示す。上述の実施形態は、関連する技術をサポートする特定の処理ハードウェアを作動するための装置および方法に関して、本発明を実施するが、ハードウェアデバイスのいわゆる仮想マシン実装を提供することも可能である。これらの仮想マシン実装は、仮想マシンプログラム５１０をサポートする典型的にはホストオペレーティングシステム５２０を実行するホストプロセッサ５３０上で実行する。典型的には、大規模で強力なプロセッサに、適した速度で実行する仮想マシン実装を提供することが必要とされているが、互換性または再利用の理由で、別のプロセッサが元来持つコードを実行したい場合等の特定の状況において、こうしたアプローチは正当化されてもよい。仮想マシンプログラム５１０は、こうした真のハードウェアデバイスによるプログラムの実行によって与えられるものと同じ結果を与えるために、アプリケーションプログラム（またはオペレーティングシステム）５００を実行することが可能である。このため、非同期のデバイスによって実行されるタスクのスケジューリングは、仮想マシンプログラム５１０を使用して、アプリケーションプログラム５００内において実行され得る。
【００６１】
添付の図面を参照し、本発明の例示的な実施形態が本明細書に詳細に記載されているが、本発明はこれらの完全な実施形態に制限されるものではなく、添付の請求項によって定義されるように、本発明の範囲および精神から逸脱せずに、当業者によって、本明細書において種々の変更および修正を適用することができることを理解されたい。
【図１】
0006368452.tif 000002
【図２】
0006368452.tif 000003
【図３】
0006368452.tif 000004
【図４】
0006368452.tif 000005
【図５】
0006368452.tif 000006