(57)【要約】  実施形態は、共通プロパティタスクグラフに属する複数のタスクの実行を加速するためのコンピューティングデバイス、装置、およびコンピューティングデバイスによって実施される方法を含む。このコンピューティングデバイスは、利用可能な同期機構が、バンドルされたタスクおよびバンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ第1の後続タスクが、利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、第1の後続タスクを特定してもよい。コンピューティングデバイスは、第1の後続タスクを共通プロパティタスクグラフに追加し、共通プロパティタスクグラフに属する複数のタスクをレディキューに追加してもよい。コンピューティングデバイスは、後続タスクを再帰的に特定してもよい。同期機構は、制御論理フローに関する同期機構またはデータアクセスに関する同期機構を含んでもよい。
2018534675.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の共通プロパティタスクグラフに属する複数のタスクの実行を加速する方法であって、
利用可能な同期機構が、バンドルされたタスクおよび前記バンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定するステップと、
前記第1の後続タスクを共通プロパティタスクグラフに追加するステップと、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加するステップと
を含む方法。
【請求項２】
前記コンピューティングデバイスの構成要素に前記利用可能な同期機構に関して問い合わせるステップをさらに含む、請求項1に記載の方法。
【請求項３】
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成するステップであって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記バンドルされたタスクに依存する、ステップと、
前記バンドルされたタスクを前記バンドルに追加するステップと
をさらに含む、請求項1に記載の方法。
【請求項４】
前記バンドルに関するレベル変数を前記バンドルされたタスクに関する第1の値に設定するステップと、
前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正するステップと、
前記第1の後続タスクが第2の後続タスクを有するかどうかを判定するステップと、
前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数を前記第1の値に設定するステップと
をさらに含み、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記ステップは、前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するステップを含む、請求項3に記載の方法。
【請求項５】
前記バンドルされたタスクの第1の後続タスクを特定する前記ステップは、
前記バンドルされたタスクが第1の後続タスクを有するかどうかを判定するステップと、
前記バンドルされたタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有するかどうかを判定するステップと
を含む、請求項1に記載の方法。
【請求項６】
前記バンドルされたタスクの第1の後続タスクを特定する前記ステップは、
前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記バンドルされたタスクに対する依存性を削除するステップと、
前記第1の後続タスクが先行タスクを有するかどうかを判定するステップと
をさらに含む、請求項5に記載の方法。
【請求項７】
前記バンドルされたタスクが他の後続タスクを有しないと判定されるまで、前記バンドルされたタスクの第1の後続タスクを特定する前記ステップが再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記ステップは、前記バンドルされたタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するステップを含む、請求項6に記載の方法。
【請求項８】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項1に記載の方法。
【請求項９】
コンピューティングデバイスであって、
メモリと、
互いに通信可能に接続されるとともに前記メモリに通信可能に接続され、動作を実施するためのプロセッサ実行可能命令で構成された第1のプロセッサを含む複数のプロセッサであって、前記動作が、
前記複数のプロセッサのうちの第2のプロセッサの利用可能な同期機構が、バンドルされたタスクおよび前記バンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定する動作と、
前記第1の後続タスクを共通プロパティタスクグラフに追加する動作と、
前記共通プロパティタスクグラフに属する複数のタスクをレディキューに追加する動作と
を含む、複数のプロセッサと
を備えるコンピューティングデバイス。
【請求項１０】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記第2のプロセッサに前記利用可能な同期機構に関して問い合わせる動作をさらに含む、請求項9に記載のコンピューティングデバイス。
【請求項１１】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成する動作であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記バンドルされたタスクに依存する、動作と、
前記バンドルされたタスクを前記バンドルに追加する動作と
をさらに含む、請求項9に記載のコンピューティングデバイス。
【請求項１２】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記バンドルに関するレベル変数を前記バンドルされたタスクに関する第1の値に設定する動作と、
前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正する動作と、
前記第1の後続タスクが第2の後続タスクを有するかどうかを判定する動作と、
前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数を前記第1の値に設定する動作と
をさらに含み、
前記第1のプロセッサは、前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項11に記載のコンピューティングデバイス。
【請求項１３】
前記第1のプロセッサは、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が、
前記バンドルされたタスクが第1の後続タスクを有するかどうかを判定する動作と、
前記バンドルされたタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有するかどうかを判定する動作と
を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項9に記載のコンピューティングデバイス。
【請求項１４】
前記第1のプロセッサは、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が、
前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記バンドルされたタスクに対する依存性を削除する動作と、
前記第1の後続タスクが先行タスクを有するかどうかを判定する動作と
をさらに含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項13に記載のコンピューティングデバイス。
【請求項１５】
前記第1のプロセッサは、
前記バンドルされたタスクが他の後続タスクを有しないと判定されるまで、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、前記バンドルされたタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項14に記載のコンピューティングデバイス。
【請求項１６】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項9に記載のコンピューティングデバイス。
【請求項１７】
コンピューティングデバイスであって、
利用可能な同期機構が、バンドルされたタスクおよび前記バンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定するための手段と、
前記第1の後続タスクを共通プロパティタスクグラフに追加するための手段と、
前記共通プロパティタスクグラフに属する複数のタスクをレディキューに追加するための手段と
を備えるコンピューティングデバイス。
【請求項１８】
前記コンピューティングデバイスの構成要素に前記利用可能な同期機構に関して問い合わせるための手段をさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項１９】
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成するための手段であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記バンドルされたタスクに依存する手段と、
前記バンドルされたタスクを前記バンドルに追加するための手段と
をさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項２０】
前記バンドルに関するレベル変数を前記バンドルされたタスクに関する第1の値に設定するための手段と、
前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正するための手段と、
前記第1の後続タスクが第2の後続タスクを有するかどうかを判定するための手段と、
前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数を前記第1の値に設定するための手段と
をさらに備え、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加するための前記手段は、前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するための手段を備える、請求項19に記載のコンピューティングデバイス。
【請求項２１】
前記バンドルされたタスクの第1の後続タスクを特定するための前記手段は、
前記バンドルされたタスクが第1の後続タスクを有するかどうかを判定するための手段と、
前記バンドルされたタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有するかどうかを判定するための手段と
を備える、請求項17に記載のコンピューティングデバイス。
【請求項２２】
前記バンドルされたタスクの第1の後続タスクを特定するための前記手段は、
前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記バンドルされたタスクに対する依存性を削除するための手段と、
前記第1の後続タスクが先行タスクを有するかどうかを判定するための手段と
をさらに備える、請求項21に記載のコンピューティングデバイス。
【請求項２３】
前記バンドルされたタスクの第1の後続タスクを特定するための前記手段は、前記バンドルされたタスクが他の後続タスクを有しないと判定されるまで、前記バンドルされたタスクの前記第1の後続タスクを再帰的に特定するための手段を備え、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加するための前記手段は、前記バンドルされたタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するための手段を備える、請求項22に記載のコンピューティングデバイス。
【請求項２４】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項17に記載のコンピューティングデバイス。
【請求項２５】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
利用可能な同期機構が、バンドルされたタスクおよび前記バンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定する動作と、
前記第1の後続タスクを共通プロパティタスクグラフに追加する動作と、
前記共通プロパティタスクグラフに属する複数のタスクをレディキューに追加する動作と
を含む非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記コンピューティングデバイスの構成要素に前記利用可能な同期機構に関して問い合わせる動作をさらに含む、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成する動作であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記バンドルされたタスクに依存する、動作と、
前記バンドルされたタスクを前記バンドルに追加する動作と
をさらに含む、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記バンドルに関するレベル変数を前記バンドルされたタスクに関する第1の値に設定する動作と、
前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正する動作と、
前記第1の後続タスクが第2の後続タスクを有するかどうかを判定する動作と、
前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数を前記第1の値に設定する動作と
をさらに含み、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作は、前記第1の後続タスクが第2の後続タスクを有しないと判定したことに応答して前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含む、請求項27に記載の非一時的プロセッサ可読記憶媒体。
【請求項２９】
前記記憶されたプロセッサ実行可能命令は、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が、
前記バンドルされたタスクが第1の後続タスクを有するかどうかを判定する動作と、
前記バンドルされたタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有するかどうかを判定する動作と
を含むように、前記プロセッサに動作を実行させるように構成される、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項３０】
前記記憶されたプロセッサ実行可能命令は、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が、
前記第1の後続タスクが前記利用可能な同期機構を前記バンドルされたタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記バンドルされたタスクに対する依存性を削除する動作と、
前記第1の後続タスクが先行タスクを有するかどうかを判定する動作と
をさらに含むように、前記プロセッサに動作を実行させるように構成される、請求項29に記載の非一時的プロセッサ可読記憶媒体。
【請求項３１】
前記記憶されたプロセッサ実行可能命令は、
前記バンドルされたタスクが他の後続タスクを有しないと判定されるまで、前記バンドルされたタスクの第1の後続タスクを特定する前記動作が再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、前記バンドルされたタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含むように、前記プロセッサに動作を実行させるように構成される、請求項30に記載の非一時的プロセッサ可読記憶媒体。
【請求項３２】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
応答性、性能、および電力効率が高いアプリケーションを構築することは、十分なユーザエクスペリエンスを実現するうえで重大である。そのようなアプリケーションを開発するためにタスク並列プログラミングモデルが広く使用されている。このモデルでは、計算が「タスク」と呼ばれる非同期単位としてカプセル化され、各タスクは「依存性」によって互いに協調または同期する。タスクは、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、またはデジタル信号プロセッサ(DSP)などの様々なタイプのコンピューティングデバイス上で計算をカプセル化する場合がある。タスク並列プログラミングモデルおよび依存性の概念の効果として、これらが組み合わさることによって、デバイス固有の計算および同期プリミティブが抽出され、アルゴリズムの表現が汎用タスクおよび依存性によって簡略化される。
【発明の概要】
【課題を解決するための手段】
【０００２】
様々な実装形態の方法および装置は、コンピューティングデバイス上の共通プロパティタスクグラフに属する複数のタスクの実行を加速するための回路および方法を提供する。様々な実装形態は、利用可能な同期機構が、バンドルされたタスクおよびバンドルされたタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ第1の後続タスクが、利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、第1の後続タスクを特定することと、第1の後続タスクを共通プロパティタスクグラフに追加することと、共通プロパティタスクグラフに属する複数のタスクをレディキュー(ready queue)に追加することとを含んでもよい。
【０００３】
いくつかの実施形態は、コンピューティングデバイスの構成要素に利用可能な同期機構に関して問い合わせることをさらに含んでもよい。
【０００４】
いくつかの実施形態は、共通プロパティタスクグラフに属する複数のタスクを含めるためのバンドルを作成することであって、利用可能な同期機構が、複数のタスクの各々に関する共通プロパティであり、複数のタスクの各々がバンドルされたタスクに依存する、作成することと、バンドルされたタスクをバンドルに追加することとをさらに含んでもよい。
【０００５】
いくつかの実施形態は、バンドルに関するレベル変数をバンドルされたタスクに関する第1の値に設定することと、バンドルに関するレベル変数を第1の後続タスクに関する第2の値に修正することと、第1の後続タスクが第2の後続タスクを有するかどうかを判定することと、第1の後続タスクが第2の後続タスクを有しないと判定したことに応答してレベル変数を第1の値に設定することとをさらに含み、共通プロパティタスクグラフに属する複数のタスクをレディキューに追加することは、第1の後続タスクが第2の後続タスクを有しないと判定したことに応答してレベル変数が第1の値に設定されたことに応答して共通プロパティタスクグラフに属する複数のタスクをレディキューに追加することを含んでもよい。
【０００６】
いくつかの実施形態では、バンドルされたタスクの第1の後続タスクを特定することは、バンドルされたタスクが第1の後続タスクを有するかどうかを判定し、バンドルされたタスクが第1の後続タスクを有すると判定したことに応答して、第1の後続タスクが、利用可能な同期機構をバンドルされたタスクとの共通プロパティとして有するかどうかを判定することを含んでもよい。
【０００７】
いくつかの実施形態では、バンドルされたタスクの第1の後続タスクを特定することは、第1の後続タスクが、利用可能な同期機構をバンドルされたタスクとの共通プロパティとして有すると判定したことに応答して、第1の後続タスクのバンドルされたタスクに対する依存性を削除し、第1の後続タスクが先行タスクを有するかどうかを判定することを含んでもよい。
【０００８】
いくつかの実施形態では、バンドルされたタスクの第1の後続タスクを特定することは、バンドルされたタスクが他の後続タスクを有しないと判定するまで再帰的に実行され、共通プロパティタスクグラフに属する複数のタスクをレディキューに追加することは、バンドルされたタスクが他の後続タスクを有しないと判定したことに応答して共通プロパティタスクグラフに属する複数のタスクをレディキューに追加することを含んでもよい。
【０００９】
様々な実施形態は、メモリと、互いに通信可能に接続された複数のプロセッサであって、上述の実施形態方法のうちの1つまたは複数の実施形態方法の動作を実行するためのプロセッサ実行可能命令で構成された第1のプロセッサを含む複数のプロセッサとを有するコンピューティングデバイスを含んでもよい。
【００１０】
様々な実施形態は、上述の実施形態方法のうちの1つまたは複数の実施形態方法の機能を実行するための手段を有するコンピューティングデバイスを含んでもよい。
【００１１】
様々な実施形態は、上述の実施形態方法のうちの1つまたは複数の実施形態方法の動作をコンピューティングデバイスのプロセッサに実行させるように構成された、プロセッサ実行可能命令を記憶している、非一時的プロセッサ可読記憶媒体を含んでもよい。
【００１２】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、様々な実施形態のうちの例示的な実施形態を示し、上で与えられた一般的な説明および下記の発明を実施するための形態とともに、特許請求の範囲の特徴を説明するのに役立つ。
【図面の簡単な説明】
【００１３】
【図１】一実施形態を実装するのに適したコンピューティングデバイスを示す構成要素ブロック図である。
【図２】一実施形態を実施するのに好適な例示的なマルチコアプロセッサを示す構成要素ブロック図である。
【図３】一実施形態による共通プロパティタスクグラフを含む例示的なタスクグラフを示す概略図である。
【図４】共通プロパティタスク再マッピング同期を使用しないタスク実行の例を示すプロセスフローおよび信号図である。
【図５】一実施形態による共通プロパティタスク再マッピング同期を使用するタスク実行の例を示すプロセスフローおよび信号図である。
【図６】タスクを実行するための実施形態の方法を示すプロセスフロー図である。
【図７】タスクをスケジューリングするための実施形態の方法を示すプロセスフロー図である。
【図８】共通プロパティタスク再マッピング同期のための実施形態の方法を示すプロセスフロー図である。
【図９】共通プロパティタスク再マッピング同期のための実施形態の方法を示すプロセスフロー図である。
【図１０】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１１】様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す構成要素ブロック図である。
【図１２】様々な実施形態とともに使用するのに適した例示的なサーバを示す構成要素ブロック図である。
【発明を実施するための形態】
【００１４】
様々な実施形態について、添付図面を参照して詳細に説明する。可能な場合はいつでも、同一のまたは同様の部分を指すために、図面全体を通して同一の参照番号が使用される。特定の例および実装形態に対してなされる参照は、説明が目的であり、特許請求の範囲を限定することを意図していない。
【００１５】
「コンピューティングデバイス」および「モバイルコンピューティングデバイス」という用語は、セルラー電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ/タブレット(2in1コンピュータ)、スマートブック、ウルトラブック、ネットブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラー電話、モバイルゲーミングコンソール、ワイヤレスゲームコントローラ、ならびに、メモリおよびマルチコアプログラマブルプロセッサを含む同様のパーソナル電子デバイスのうちのいずれか1つまたはすべてを指すために本明細書で互換的に使用される。様々な実施形態は、限られたメモリおよびバッテリリソースを有するスマートフォンなどのモバイルコンピューティングデバイスに特に有用であるが、本実施形態は一般に、複数のメモリデバイスおよび限られた電力バジェットを実装する任意の電子デバイスにおいて有用であり、プロセッサの電力消費を低減することは、モバイルコンピューティングデバイスのバッテリ動作時間を延ばすことができる。「コンピューティングデバイス」という用語は、パーソナルコンピュータ、デスクトップコンピュータ、オールインワンコンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、組込み型コンピュータ、サーバ、ホームシアターコンピュータ、およびゲームコンソールを含む固定コンピューティングデバイスをさらに指す場合がある。
【００１６】
実施形態は、デバイス固有の同期機構を利用するために共通プロパティタスクグラフ同期を再マッピングするスケジューリング技法を使用して並列タスクを効率的に同期させることによってデバイス性能を向上させるための方法ならびにそのような方法を実施するシステムおよびデバイスを含む。これらの方法、システム、およびデバイスは、デバイス固有の同期機構を使用する再マッピング同期に関する共通プロパティタスクグラフを特定し、デバイス固有の同期機構および既存のタスク同期に基づいて共通プロパティタスクタスクグラフに関する同期を再マッピングしてもよい。デバイス固有の同期機構を使用する再マッピング同期は、依存タスクが、利用可能な同期機構が共通プロパティである先行タスクにのみ依存するようにすることを含んでもよい。依存タスクは、実行を開始できるようにするうえで1つまたは複数の先行タスクの結果または完了を必要とするタスクである(すなわち、依存タスクの実行は、少なくとも1つの先行タスクの結果または完了に依存する)。
【００１７】
従来のタスクスケジューリングは一般に、特定のタイプのデバイス、たとえば中央処理ユニット(CPU)上で実行され、タスク間依存性を適用し、それによってタスクグラフをスケジューリングするスケジューラを含み、この場合、タスクは、CPU、グラフィックス処理ユニット(GPU)、またはデジタル信号プロセッサ(DSP)などの複数のタイプのデバイス上で実行されてもよい。スケジューラは、タスクを実行する準備が整ったと判定すると、タスクを適切なデバイス、たとえばGPUにディスパッチする場合がある。GPUによるタスクの実行が完了すると、CPU上のスケジューラは、通知を受け、依存タスクをスケジューリングするための措置を講じる。そのようなスケジューリングは、タスクグラフにおけるタスクの実行を単にスケジューリングして同期させ、(性能、エネルギーなどに関して)準最適なタスクグラフ実行を可能にするために様々なタイプのデバイス間の頻繁なラウンドトリップを伴うことが多い。従来のタスクスケジューリングは、各種のデバイス、たとえばGPUまたはDSPがタスク間依存性を適用するためのより最適化された手段を有する場合があることを考慮に入れていない。たとえば、GPUは、先入れ先出し方式(FIFO)に従うハードウェアコマンドキューを有する。タスク相互依存性によって表されるタスクの同期は、同期を抽象的なタスク相互依存性のドメインからデバイス固有の同期機構のドメインに再マッピングすることによって効率的に実施される場合がある。タスク同期を再マッピングするかどうかおよびタスク再マッピングをどのように行うかを決定するのを助けるために実装される場合があるデバイス固有の同期機構が存在するかどうかに関して判定が下されてもよい。利用可能な同期機構を判定するためにデバイスの一部または全部に問い合わせてもよい。たとえば、GPUが、ハードウェアコマンドキューを報告したり、GPU-DSPが、GPUとDSPの間の割込み駆動型シグナリングを報告したりすることがある。
【００１８】
問い合わされた同期機構は、タスクグラフのプロパティに変換される場合がある。タスク共通プロパティタスクグラフ内のすべてのタスクがプロパティによって関係付けられてもよい。タスクグラフ全体におけるいくつかのタスクは、CPUタスク、GPUタスク、DSPタスク、またはGPU、DSPなどに専用実装形態を有するマルチバージョン型タスクであってもよい。タスクのタスクプロパティおよびタスクの同期に基づいて、再マッピング同期に関する共通プロパティタスクグラフが特定されてもよい。図3における例は、CPUタスクプロパティまたはGPUタスクプロパティを有するタスクを有する共通プロパティタスクグラフを含むタスクグラフを示す。特定のタスクプロパティを有するタスクの準備が整うと、そのタスクはタスクバンドルデータ構造に追加される。同じプロパティを有する後続タスクがスケジューリングの対象とされ、後続タスクの準備が整うと、そのようなタスクが同じタスクバンドルに追加される。最後の後続タスクがタスクバンドルに追加されると、タスクバンドル内のタスクのすべてが、再マッピング同期に適していると見なされる。
【００１９】
共通プロパティタスクグラフに関する同期を再マッピングする場合、タスクバンドルのタスクに関するタスクプロパティの実行プラットフォーム上でより効率的な同期機構が利用可能であるどうかに関して判定が下されてもよい。利用可能なより効率的な同期機構が特定されたことに応答して、共通プロパティタスクグラフにおける各依存性が、より効率的な同期機構の対応する同期プリミティブに変換されてもよい。共通プロパティタスクグラフにおける依存性のすべてが再マッピングされた後、共通プロパティタスクグラフにおけるタスクのすべてが、実行のために適切なプロセッサ(たとえば、GPUまたはDSP)にディスパッチされてもよい。
【００２０】
共通プロパティタスクグラフが実行される前に、メモリバッファなどの、共通プロパティタスクグラフのタスクを実行するのに必要なリソースのすべてが特定され取得されてもよく、次いで、リソースを必要とするタスクが完了したときに解放されてもよい。共通プロパティタスクグラフが実行される間、共通プロパティタスクグラフの外部の依存タスクに、依存タスクが依存するタスクが完了したことを通知するためにタスク完了信号が送られてもよい。あるタスクが完了した後、共通プロパティタスクグラフが完了する前にタスク完了信号が送られるかどうかは、共通プロパティタスクグラフの外部の依存タスクの依存性および重大性によって決まる場合がある。
【００２１】
様々な実施形態が、コンピューティングデバイスの動作におけるいくつかの改良を実現する。このコンピューティングデバイスでは、タスクをバンドルして共通のデバイス上でまとめて実行し、ならびに/あるいは共通のリソースを使用することによって、様々なデバイスおよびリソースにわたって依存タスクを同期させるためのオーバーヘッドが軽減するので、処理速度性能が向上する場合がある。さらに、CPUおよびGPUなどの様々なタイプのプロセッサは、各プロセッサに割り当てられるタスクの相互依存性が低くなるので、より効率的に並行して動作することが可能になる場合がある。このコンピューティングデバイスでは、タスクが共通のプロセッサにおいて統合され、タスクを同期させるために使用される共有バス上の通信オーバーヘッドが低減することによって、使用されないプロセッサをアイドル状態にすることができるので、電力性能が向上する場合がある。本明細書で開示される様々な実施形態は、コンピューティングデバイスが、高度なスケジューリングフレームワークを有さずにタスクグラフを特定のプロセッサにマップする方法も提供する。
【００２２】
図1は、様々な実施形態とともに使用するのに適したリモートコンピューティングデバイス50と通信中のコンピューティングデバイス10を含むシステムを示す。コンピューティングデバイス10は、プロセッサ14、メモリ16、通信インターフェース18、およびストレージメモリインターフェース20を含むシステムオンチップ(SoC)12を含んでもよい。このコンピューティングデバイスは、ワイヤードモデムまたはワイヤレスモデムなどの通信構成要素22、ストレージメモリ24、ワイヤレスネットワーク30へのワイヤレス接続32を確立するためのアンテナ26、および/またはインターネット40へのワイヤード接続44に接続するためのネットワークインターフェース28をさらに含んでもよい。プロセッサ14は、様々なハードウェアコアのいずれか、たとえば、いくつかのプロセッサコアを含んでよい。
【００２３】
「システムオンチップ」(SoC)という用語は、通常、限定はしないが、ハードウェアコア、メモリ、および通信インターフェースを含む相互接続された電子回路のセットを指すために本明細書で使用される。ハードウェアコアは、汎用プロセッサ、中央処理ユニット(CPU)、デジタル信号プロセッサ(DSP)、グラフィックス処理ユニット(GPU)、加速処理ユニット(APU)、補助プロセッサ、シングルコアプロセッサ、およびマルチコアプロセッサなどの様々な異なるタイプのプロセッサを含んでよい。ハードウェアコアは、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、他のプログラマブル論理デバイス、個別ゲート論理、トランジスタ論理、性能監視ハードウェア、ウォッチドッグハードウェア、および時間基準などの、他のハードウェアおよびハードウェアの組合せをさらに具現化してもよい。集積回路は、集積回路の構成要素がシリコンなどの単体の半導体材料上に存在するように構成されてよい。SoC12は、1つまたは複数のプロセッサ14を含んでもよい。コンピューティングデバイス10は、2つ以上のSoC12を含み、それによって、プロセッサ14およびプロセッサコアの数を増加させてもよい。コンピューティングデバイス10は、SoC12に関連付けられていないプロセッサ14を含んでもよい。個々のプロセッサ14は、図2を参照しながら以下で説明するようなマルチコアプロセッサであってもよい。プロセッサ14は各々、コンピューティングデバイス10の他のプロセッサ14と同じであっても異なっていてもよい特定の目的のために構成されてもよい。同じまたは異なる構成のプロセッサ14およびプロセッサコアのうちの1つまたは複数は、まとめてグループ化されてもよい。プロセッサ14またはプロセッサコアのグループは、マルチプロセッサクラスタと呼ばれてもよい。
【００２４】
SoC12のメモリ16は、プロセッサ14によるアクセスのためにデータおよびプロセッサ実行可能コードを記憶するように構成された、揮発性または不揮発性のメモリであってもよい。コンピューティングデバイス10および/またはSoC12は、様々な目的のために構成された1つまたは複数のメモリ16を含んでもよい。一実施形態では、1つまたは複数のメモリ16は、ランダムアクセスメモリ(RAM)もしくはメインメモリ、またはキャッシュメモリなど、揮発性メモリを含んでもよい。これらのメモリ16は、データセンサまたはサブシステムから受信される限られた量のデータ、不揮発性メモリに対して要求され、様々な因子に基づいて将来アクセスされることを予期して不揮発性メモリからメモリ16にロードされる限られた量のデータおよび/またはプロセッサ実行可能コード命令、ならびに/あるいはプロセッサ14によって生成され、不揮発性メモリには記憶されずに将来迅速にアクセスできるように一時的に記憶される限られた量の中間処理データおよび/またはプロセッサ実行可能コード命令を一時的に保持するように構成されてもよい。
【００２５】
メモリ16は、プロセッサ14のうちの1つまたは複数によるアクセスのために、別のメモリ16またはストレージメモリ24など、別のメモリデバイスからメモリ16にロードされるデータおよびプロセッサ実行可能コードを、少なくとも一時的に記憶するように構成されてもよい。メモリ16にロードされたデータおよびプロセッサ実行可能コードは、プロセッサ14による機能の実行に応答してロードされてもよい。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ16にロードすることは、要求されたデータまたはプロセッサ実行可能コードがメモリ16内にないために、不成功またはミスになるメモリ16へのメモリアクセス要求から生じる場合がある。ミスに応答して、要求されたデータまたはプロセッサ実行可能コードを他のメモリ16またはストレージメモリ24からメモリデバイス16にロードするために、他のメモリ16またはストレージメモリ24へのメモリアクセス要求が行われてもよい。機能の実行に応答してデータまたはプロセッサ実行可能コードをメモリ16にロードすることは、他のメモリ16またはストレージデバイス24へのメモリアクセス要求から生じる場合があり、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ16にロードされてもよい。
【００２６】
一実施形態では、メモリ16は、センサまたはサブシステムなどの生データソースデバイスからメモリ16にロードされた生データを少なくとも一時的に記憶するように構成されてもよい。生データは、生データソースデバイスからメモリ16に流れ、本明細書でさらに図3〜図19を参照しながら説明するように機械学習アクセラレータによって生データを受信し処理することができるようになるまでメモリによって記憶されてもよい。
【００２７】
通信インターフェース18、通信構成要素22、アンテナ26、および/またはネットワークインターフェース28は、コンピューティングデバイス10がワイヤレス接続32を介してワイヤレスネットワーク30上でおよび/またはワイヤードネットワーク44上でリモートコンピューティングデバイス50と通信することが可能になるように、調和して動作してもよい。コンピューティングデバイス10が、リモートコンピューティングデバイス50とデータを交換できるようにするためのインターネット40に接続するのを可能にするために、ワイヤレスネットワーク30は、たとえば、ワイヤレス通信用に使用される無線周波数スペクトルを含む様々なワイヤレス通信技術を使用して実装されてもよい。
【００２８】
ストレージメモリインターフェース20およびストレージメモリ24は、コンピューティングデバイス10が不揮発性記憶媒体上にデータとプロセッサ実行可能コードとを記憶することが可能になるように、調和して動作してもよい。ストレージメモリ24は、ストレージメモリ24がプロセッサ14のうちの1つまたは複数によってアクセスされるデータまたはプロセッサ実行可能コードを記憶してもよいメモリ16の実施形態とほとんど同じに構成されてもよい。不揮発性であるストレージメモリ24は、コンピューティングデバイス10の電源が切断された後でも情報を保持する場合がある。電源が再び投入され、コンピューティングデバイス10が再起動すると、コンピューティングデバイス10がストレージメモリ24上に記憶された情報が利用可能になる場合がある。ストレージメモリインターフェース20は、ストレージメモリ24へのアクセスを制御し、プロセッサ14がストレージメモリ24からデータを読み取り、ストレージメモリ24にデータを書き込むことを可能にしてもよい。
【００２９】
コンピューティングデバイス10の構成要素の一部または全部は、異なるように構成されならびに/あるいは組み合わせられてもよく、しかも必要な機能を果たすように構成されならびに/あるいは組み合わされてもよい。その上、コンピューティングデバイス10は、構成要素の各々のうちの1つに限定されなくてもよく、各構成要素の複数のインスタンスがコンピューティングデバイス10の様々な構成の中に含まれてもよい。
【００３０】
図2は、一実施形態を実装するのに適したマルチコアプロセッサ14を示す。マルチコアプロセッサ14は、複数の同種または異種のプロセッサコア200、201、202、203を有してもよい。単一のプロセッサ14のプロセッサコア200、201、202、203が同じ目的のために構成され、同じまたは同様の性能特性を有してもよいという点で、プロセッサコア200、201、202、203は同種であってもよい。たとえば、プロセッサ14は汎用プロセッサであってもよく、プロセッサコア200、201、202、203は同種の汎用プロセッサコアであってもよい。代替的に、プロセッサ14はグラフィックス処理ユニットまたはデジタル信号プロセッサであってもよく、プロセッサコア200、201、202、203はそれぞれ、同種のグラフィックスプロセッサコアまたはデジタル信号プロセッサコアであってもよい。参照しやすいように、「プロセッサ」および「プロセッサコア」という用語は、本明細書で互換的に使用される場合がある。
【００３１】
単一のプロセッサ14のプロセッサコア200、201、202、203が異なる目的のために構成され、ならびに/あるいは異なる性能特性を有してもよいという点で、プロセッサコア200、201、202、203は異種であってもよい。そのような異種プロセッサコアの異種性には、異なる命令セットアーキテクチャ、パイプライン、動作周波数などを含めてもよい。そのような異種のプロセッサコアの例は、より低速で低電力のプロセッサコアがより強力で電力を大量に消費するプロセッサコアと結合される場合がある「big.LITTLE」アーキテクチャとして知られているものを含んでもよい。同様の実施形態では、SoC12はいくつかの同種プロセッサまたは異種プロセッサ14を含んでもよい。
【００３２】
図2に示す例では、マルチコアプロセッサ14は、4つのプロセッサコア200、201、202、203(すなわち、プロセッサコア0、プロセッサコア1、プロセッサコア2、およびプロセッサコア3)を含む。説明を簡単にするために、本明細書の例では、図2に示す4つのプロセッサコア200、201、202、203を参照する場合がある。しかしながら、図2に示し、本明細書で説明する4つのプロセッサコア200、201、202、203は単に一例として提供され、決して様々な実施形態を4コアプロセッサシステムに限定するものではない。コンピューティングデバイス10、SoC12、またはマルチコアプロセッサ14は、図示され本明細書で説明する4つのプロセッサコア200、201、202、203よりも少数またはより多数のプロセッサコアを個々にまたは組合せで含んでもよい。
【００３３】
図3は、一実施形態による共通プロパティタスクグラフ302を含む例示的なタスクグラフ300を示す。共通プロパティタスクグラフは、実行される共通プロパティを単一のエントリポイントと共有するタスクのグループで構成されてもよい。共通プロパティは、制御論理フローに関する共通プロパティまたはデータアクセスに関する共通プロパティを含んでもよい。制御論理フローに関する共通プロパティは、同じ同期機構を使用して同じハードウェアによって実行することのできるタスクを含んでもよい。たとえば、CPU専用実行可能タスク(CPUタスク)304a〜304eまたはGPU専用実行可能タスク(GPUタスク)306a〜306eは、同じ同期機構を使用して同じハードウェアに基づいて制御論理フローに関する共通プロパティを共有するタスクの2つの異なるグループを表してもよい。一例では、GPUタスク306aが、レディタスクになる場合があり、かつGPUタスク306aは、CPUタスク304cが実行を完了し、GPUタスク306bがレディタスクになるのを妨げる前に、GPUにディスパッチされるようにスケジューリングされることがある。したがって、GPUタスク306aは、GPUタスク306b〜306eよりも前にディスパッチされ、共通プロパティタスクグラフ302から除外される場合がある。さらなる一例では、GPUタスク306b〜306eがGPUタスク306aとは異なる同期機構、たとえば、OpenCLベースのプログラミング言語用のバッファおよびOpenGLベースのプログラミング言語用のバッファなどの、それぞれに異なるアプリケーションプログラミングインターフェース(API)に基づくプログラミング言語のタスク用のそれぞれに異なるバッファを必要とする場合がある。したがって、GPUタスク306aは、共通プロパティタスクグラフ302から除外される場合がある。データアクセスに関する共通プロパティは、同じデータストレージデバイスへの複数のタスクによるアクセスを含む場合があり、データストレージデバイスへのアクセスのタイプをさらに含むことがある。たとえば、共通プロパティタスクグラフのタスクがすべて同じデータバッファへのアクセスを必要とする場合があり、これらのタスクは、同じデータストレージデバイスにアクセスしつつ同じハードウェアによって実行されるようにグループ分けされることがある。さらなる一例では、読取り専用アクセスを必要とするタスクが、読取り/書込みアクセスを必要とするタスクとは別個の共通プロパティタスクグラフにグループ分けされる場合がある。共通プロパティタスクグラフは、その共通プロパティタスクグラフへの単一のエントリポイントによってさらに定義される場合があり、このエントリポイントは、共通プロパティタスクグラフの他のタスクのすべてが依存するタスクを含むことがあり、共通プロパティタスクグラフの他のタスクのすべてが共通プロパティタスクグラフの外部のタスクに依存することはない。共通プロパティタスクグラフは、複数の出口依存性を有する場合があり、それによって、共通プロパティタスクグラフの外部のタスクが、共通プロパティタスクグラフの様々なタスクに依存することがある。
【００３４】
図3に示す例では、CPUタスク304a〜304eおよびGPUタスク306a〜306eを、個々のタスク304a〜304e、306a〜306eを接続する矢印によって示される依存性によって互いに関係付けることができる。タスク304a〜304e、306a〜306eにおいて、コンピューティングデバイスは、GPUによってのみ実行される場合があるGPUタスク306b〜306eを含む共通プロパティタスクグラフ302を特定してもよい。共通プロパティタスクグラフ302については、エントリポイントはGPUタスク306bであってもよく、この場合、GPUタスク306bは、GPUタスク306b〜306eのうちで、CPUタスク304a〜304e、たとえばCPUタスク304cに依存する唯一のGPUタスクである。この例では、共通プロパティタスクグラフ302は、GPUタスク306bに依存するが互いに依存することはないGPUタスク306cおよびGPUタスク306dも含み、GPUタスク306eは、GPUタスク306cおよび306dに依存する。さらに、GPUタスク306cは、CPUタスク304eがGPUタスク306cに依存するように出口依存性を含んでもよい。本明細書でさらに詳細に説明するように、図5および図7〜図9を参照するとわかるように、共通プロパティタスクグラフ302は、GPUタスク306b〜306eのバンドルとして表される場合があり、それによって、共通プロパティタスクグラフ302のGPUタスク306b〜306eのすべてが同じハードウェアおよび同じ同期機構によってまとめて実行されるようにスケジューリングされることがある。
【００３５】
図4は、従来技術において知られているように共通プロパティタスク同期再マッピングを使用しないタスク実行の例を示す。タスク並列プログラミングモデルは、好都合なプログラミングを可能にするが、性能を低下させることがある。タスク並列プログラムを実行すると、依存タスクがそれぞれに異なるハードウェア上で実行されるようにスケジューリングされ、それによって、スケジューラに先行タスクの完了を通知するために多くのリソースを必要とする通信をそれぞれに異なるハードウェア間で実施しなければならないピンポン効果が生じる場合がある。
【００３６】
一例として図3を参照しながら説明するGPUタスク306b〜306eを使用すると、GPUタスク306bは、CPU400によってGPU402上で実行されるようにスケジューリングされる(404)。GPUタスク306bを実行するための準備が完了した直後に(タスクスケジューリングでは、タスクのすべての先行タスクの実行が終了したときにそのタスクの準備が完了したという)、GPUタスク306bはGPU402にディスパッチされる(406)。GPU402はGPUタスク306bを実行する(408)。GPUタスク306bが終了すると、CPU400が通知を受ける(410)。次に、CPU400は、GPUタスク306cとGPUタスク306dの両方の準備が完了したと判定し、GPUタスク306cとGPUタスク306dが、GPU402上で実行されるようにスケジューリングされ(412、414)、GPU402にディスパッチされる(416)。GPUタスク306cおよび306dの各々は、GPU402によって実行される(418、422)。CPU400は、GPUタスク306cおよび306dの各々の実行が完了したことを通知される(420、424)。CPU400は、GPUタスク306eの準備が完了したと判定し、GPUタスク306eをGPU402によって実行されるようにスケジューリングし(426)、GPUタスク306eをGPU402にディスパッチする(428)。GPUタスク306eはGPU402によって実行され(430)、GPU402は、GPUタスク306eの実行が完了したことをCPU400に通知する(432)。このプロセスは、タスクグラフ全体、この例ではGPUタスク306b〜306eを含むタスクグラフが処理されるまで続く。タスクをGPU402によって連続的に実行されるようにスケジューリングするためのCPU400とGPU402との間の往復ラウンドトリップは、タスクをGPU402にオフロードすることによってもたらされる利点を相殺するほどの遅延を生じさせることが多い。
【００３７】
図5は、一実施形態による共通プロパティタスク同期再マッピングを使用するタスク実行の例を示す。一例として図3を参照しながら説明するGPUタスク306b〜306eを含む共通プロパティタスクグラフ302を使用すると、GPUタスク306b〜306eのすべてが、CPU400によってGPU402上で実行されるようにスケジューリングされてもよい(500〜506)。GPUタスク306bを実行するための準備が完了した直後に、GPUタスク306b〜306eがGPU402にディスパッチされてもよい(508)。GPU402はGPUタスク306b〜306eを実行してもよく(510〜516)、実行順序は、GPUタスク306b〜306e間の依存性とこれらのGPUタスクがどのようにスケジューリングされるかによって決定されてもよい。GPUタスク306b〜306eの実行が完了すると、CPU400が、GPUタスク306b〜306eのすべてが完了したことを通知されてもよい(518)。
【００３８】
様々な実施形態では、共通プロパティタスクグラフ302のGPUタスクは、共通プロパティタスクグラフ302の外部の依存後続タスクを有してもよい。たとえば、GPUタスク306cは、後続タスク、すなわち、GPUタスク306cに依存するCPUタスク304eを有してもよい。GPUタスク306cが完了したことのCPU400への通知は、本明細書で説明するように共通プロパティタスクグラフ302全体が完了したときに行われてもよい。したがって、CPUタスク304eは、共通プロパティタスクグラフ302が完了するまで実行をスケジューリングされなくてもよい。代替的に、CPU400は、場合によっては、GPUタスク306cと同様に、共通プロパティタスクグラフ302が完了するのを待たずに、先行タスクが完了した後に先行タスクが完了したことを通知されてもよい(520)。これらの様々な実施形態を実施するかどうかは、後続タスクの重大性に依存する場合がある。後続タスクがより重大であるほど、通知される時間が先行タスクが完了する時間により近くなる可能性が高くなることがある。重大性は、後続タスクの実行の遅延によってタスクグラフ300の実行のレイテンシがどのように長くなるかについての測度である場合がある。後続タスクがタスクグラフ300のレイテンシに与える影響が大きいほど、後続タスクの重大性が高くなることがある。
【００３９】
図6は、タスクを実行するための一実施形態の方法600を示す。方法600は、コンピューティングデバイス内で、プロセッサ、汎用ハードウェア、または専用ハードウェア内で実行されるソフトウェアにおいて実施されてもよい。様々な実施形態では、方法600は、複数のプロセッサまたはハードウェア構成要素上の複数のスレッドによって実施されてもよい。様々な実施形態では、方法600は、本明細書でさらに図7〜図9を参照しながら説明する他の方法と並行して実施されてもよい。
【００４０】
判定ブロック602において、コンピューティングデバイスは、レディキューが空であるかどうかを判定してもよい。レディキューは、1つまたは複数のプロセッサによって実装される論理キューであってもよく、あるいは汎用ハードウェアまたは専用ハードウェアに実装されるキューであってもよい。方法600は、複数のレディキューを使用して実施されてもよいが、簡単のために、様々な実施形態の説明では単一のレディキューを参照する。レディキューが空であるとき、コンピューティングデバイスは、実行する準備が完了した保留中のタスクはないと判定してもよい。言い換えれば、実行されるのを待っているタスクはなく、あるいは実行されるのを待っているタスクがあるが、そのタスクは実行が終了していない先行タスクに依存している。レディキューに少なくとも1つのタスクが存在するか、あるいはレディキューが空ではないとき、コンピューティングデバイスは、実行されるのを待っており、かつ先行タスクに依存していないかあるいはもはや先行タスクが完了するのを待っていないタスクがあると判定してもよい。
【００４１】
コンピューティングデバイスは、レディキューが空であると判定した(すなわち、判定ブロック602=「Yes」)ことに応答して、任意のブロック604において待ち状態に入ってもよい。様々な実施形態では、コンピューティングデバイスは、待ち状態を終了し、判定ブロック602においてレディキューが空であるかどうかを判定するようにトリガされてもよい。コンピューティングデバイスは、タイマが満了すること、アプリケーションが起動されること、またはプロセッサがウェークアップすることなど、パラメータが満たされた後で待ち状態を終了するようにトリガされてもよく、あるいは実行中のタスクが完了したことを示す信号に応答して待ち状態を終了するようにトリガされてもよい。任意のブロック604が実施されない様々な実施形態では、コンピューティングデバイスは、判定ブロック602においてレディキューが空であるかどうかを判定してもよい。
【００４２】
コンピューティングデバイスは、レディキューが空ではないと判定した(すなわち、判定ブロック602=「No」)ことに応答して、ブロック606においてレディキューからレディタスクを取り出してもよい。ブロック608において、コンピューティングデバイスは、レディタスクを実行してもよい。様々な実施形態では、レディタスクは、方法600を実行する同じ構成要素により、方法600を中断してレディタスクを実行し、レディタスクが完了した後で方法600を再開するか、マルチスレッディング機能を使用するか、またはマルチコアプロセッサの利用可能なプロセッサコアなどの構成要素の利用可能な部分を使用することによって実行されてもよい。
【００４３】
様々な実施形態では、方法600を実施する構成要素は、レディタスクを、特定のレディキューから得たレディタスクを実行するための関連する構成要素に与えてもよい。ブロック610において、コンピューティングデバイスは、実行されたタスクをスケジュールキューに追加してもよい。様々な実施形態では、スケジュールキューは、1つまたは複数のプロセッサによって実装される論理キューであってもよく、あるいは汎用ハードウェアまたは専用ハードウェアに実装されるキューであってもよい。方法600は、複数のレディキューを使用して実施されてもよいが、簡単のために、様々な実施形態の説明では単一のレディキューを参照する。
【００４４】
ブロック612において、コンピューティングデバイスは、スケジュールキューをチェックするように構成要素に通知するかまたはそれ以外の方法で促してもよい。
【００４５】
図7は、タスクをスケジューリングするための一実施形態の方法700を示す。方法700は、コンピューティングデバイス内で、プロセッサ、汎用ハードウェア、または専用ハードウェア内で実行されるソフトウェアにおいて実施されてもよい。様々な実施形態では、方法700は、複数のプロセッサまたはハードウェア構成要素上の複数のスレッドによって実施されてもよい。様々な実施形態では、方法700は、図6、図8、および図9を参照しながら説明する他の方法と並行して実施されてもよい。
【００４６】
判定ブロック702において、コンピューティングデバイスは、スケジュールキューが空であるかどうかを判定してもよい。図6を参照しながら示したように、様々な実施形態では、スケジュールキューは、1つまたは複数のプロセッサによって実装される論理キューであってもよく、あるいは汎用ハードウェアまたは専用ハードウェアに実装されるキューであってもよい。方法700は、複数のレディキューを使用して実施されてもよいが、簡単のために、様々な実施形態の説明では単一のレディキューを参照する。
【００４７】
コンピューティングデバイスは、スケジュールキューが空であると判定した(すなわち、判定ブロック702=「Yes」)ことに応答して、任意のブロック704において待ち状態に入ってもよい。様々な実施形態では、コンピューティングデバイスは、待ち状態を終了し、判定ブロック702においてスケジュールキューが空であるかどうかを判定するようにトリガされてもよい。コンピューティングデバイスは、タイマが満了すること、アプリケーションが起動されること、またはプロセッサがウェークアップすることなど、パラメータが満たされた後で待ち状態を終了するようにトリガされてもよく、あるいは図6のブロック612を参照しながら説明した通知のように信号に応答して待ち状態を終了するようにトリガされてもよい。任意のブロック704が実施されない様々な実施形態では、コンピューティングデバイスは、判定ブロック702においてスケジュールキューが空であるかどうかを判定してもよい。
【００４８】
コンピューティングデバイスは、スケジュールキューが空ではないと判定した(すなわち、判定ブロック702=「No」)ことに応答して、ブロック706においてスケジュールキューから実行済みのタスクを取り出してもよい。
【００４９】
判定ブロック708において、コンピューティングデバイスは、スケジュールキューから取り出された実行済みのタスクが、後続タスク、すなわち、実行済みのタスクに依存するタスクを有するかどうかを判定してもよい。実行済みのタスクの後続タスクは、実行済みのタスクに直接依存する任意のタスクであってもよい。コンピューティングデバイスは、タスクに対する依存性を分析してそれらのタスクの他のタスクとの関係を判定してもよい。実行済みのタスクの後続タスクは、その先行タスクが実行されて以来レディタスクである場合もそうでない場合もある。その理由は、このことが、後続タスクが、実行されていない他の先行タスクを有するかどうかに依存することがあるからである。
【００５０】
コンピューティングデバイスは、実行済みのタスクが後続タスクを有しないと判定した(すなわち、判定ブロック708=「No」)ことに応答して、判定ブロック702において、スケジュールキューが空であるかどうかを判定してもよい。
【００５１】
コンピューティングデバイスは、実行済みのタスクが後続タスクを有すると判定した(すなわち、判定ブロック708=「Yes」)ことに応答して、ブロック710において実行済みのタスクの後続であるタスク(すなわち、後続タスク)を取得してもよい。様々な実施形態では、実行済みのタスクは複数の後続タスクを有してもよく、方法700は、後続タスクの各々について並列に実行されてもよくあるいは直列に実行されてもよい。
【００５２】
ブロック712において、コンピューティングデバイスは実行済みのタスクとその後続タスクとの間の依存性を削除してもよい。実行済みのタスクとその後続タスクとの間の依存性を削除したことによって、実行済みのタスクはもはや後続タスクの先行タスクではなくなる場合がある。
【００５３】
判定ブロック714において、コンピューティングデバイスは、後続タスクが先行タスクを有するかどうかを判定してもよい。コンピューティングデバイスは、ブロック708において後続タスクを特定したのと同様に、タスク間の依存性を分析して、タスクが別のタスクに直接依存するかどうか、すなわち、依存タスクが先行タスクを有するかどうかを判定してもよい。上述のように、実行済みのタスクはもはや後続タスクに関する先行タスクではない場合があり、したがって、コンピューティングデバイスは、実行済みのタスク以外の先行タスクがあるかどうかをチェックしてもよい。
【００５４】
コンピューティングデバイスは、後続タスクが先行タスクを有すると判定した(すなわち、判定ブロック714=「Yes」)ことに応答して、判定ブロック708において、スケジュールキューから取り出された実行済みのタスクが後続タスクを有するかどうかを判定してもよい。
【００５５】
コンピューティングデバイスは、後続タスクが先行タスクを有しないと判定した(すなわち、判定ブロック714=「No」)ことに応答して、判定ブロック716において、この後続タスクをレディキューに追加してもよい。様々な実施形態では、後続タスクが、後続タスクが実施される前に完了するのを待たなければならない先行タスクを有しないとき、後続タスクはレディキューになってもよい。ブロック718において、コンピューティングデバイスは、レディキューをチェックするように構成要素に通知するかまたはそれ以外の方法で促してもよい。
【００５６】
図8は、共通プロパティタスク同期再マッピングのための一実施形態の方法800を示す。方法800は、コンピューティングデバイス内で、プロセッサ、汎用ハードウェア、または専用ハードウェア内で実行されるソフトウェアにおいて実施されてもよい。様々な実施形態では、方法800は、複数のプロセッサまたはハードウェア構成要素上の複数のスレッドによって実施されてもよい。様々な実施形態では、方法800は、図6、図7、および図9を参照しながら本明細書でさらに説明する他の方法と並行して実施されてもよい。様々な実施形態において、方法800は、図7を参照して説明した方法700の判定ブロック714の代わりに実施されてもよい。
【００５７】
判定ブロック802において、コンピューティングデバイスは、後続タスクが先行タスクを有するかどうかを判定してもよい。上述のように、実行済みのタスクはもはや後続タスクに関する先行タスクではない場合があり、したがって、コンピューティングデバイスは、実行済みのタスク以外の先行タスクがあるかどうかをチェックしてもよい。
【００５８】
コンピューティングデバイスは、後続タスクが先行タスクを有すると判定した(すなわち、判定ブロック802=「Yes」)ことに応答して、図7を参照しながら説明した方法700の判定ブロック708において、スケジュールキューから取り出された実行済みのタスクが後続タスクを有するかどうかを判定してもよい。
【００５９】
コンピューティングデバイスは、後続タスクが先行タスクを有しないと判定した(すなわち、判定ブロック802=「No」)ことに応答して、判定ブロック804において、この後続タスクが他のタスクと共通プロパティを共有しているかどうかを判定してもよい。コンピューティングデバイスは、この判定を下す際に、コンピューティングデバイスの構成要素に問い合わせて、タスクを実行するのに利用可能な同期機構を判定してもよい。コンピューティングデバイスは、タスクの実行特性を利用可能な同期機構に適合させてもよい。コンピューティングデバイスは、利用可能な同期機構に適合する特性を有するタスクを他のタスクと比較して、これらのタスクが共通プロパティを有するかどうかを判定してもよい。
【００６０】
共通プロパティは、制御論理フローに関する共通プロパティまたはデータアクセスに関する共通プロパティを含んでもよい。制御論理フローに関する共通プロパティは、同じ同期機構を使用して同じハードウェアによって実行することのできるタスクを含んでもよい。たとえば、CPU専用実行可能タスク、GPU専用実行可能タスク、DSP専用実行可能タスク、または任意の他の特定のハードウェア専用実行可能タスク。さらなる一例では、特定のハードウェア専用実行可能タスクは、様々なプログラミング言語に基づいて各タスク用にそれぞれに異なるバッファを使用することなど、同じ特定のハードウェアによってのみ実行可能なタスクとは異なる同期機構を必要とする場合がある。データアクセスに関する共通プロパティは、揮発性メモリデバイスおよび不揮発性メモリデバイスを含む、同じデータストレージデバイスへの複数のタスクによるアクセスを含む場合がある。データアクセスに関する共通プロパティは、データストレージデバイスへのアクセスのタイプをさらに含んでもよい。たとえば、データアクセスに関する共通プロパティは、同じデータバッファへのアクセスを含んでもよい。さらなる一例では、データアクセスに関する共通プロパティは、読取り専用アクセスまたは読取り/書込みアクセスを含んでもよい。
【００６１】
コンピューティングデバイスは、後続タスクが別のタスクと共通プロパティを共有しないと判定した(すなわち、判定ブロック804=「No」)ことに応答して、図7を参照しながら説明したように方法700の判定ブロック716において、この後続タスクをレディキューに追加してもよい。
【００６２】
コンピューティングデバイスは、後続タスクが別のタスクと共通プロパティ共有すると判定した(すなわち、判定ブロック804=「Yes」)ことに応答して、判定ブロック806において、共通プロパティを共有するタスクに関してバンドルが存在するかどうかを判定してもよい。本明細書でさらに説明するように、共通プロパティを共有するタスクは、まとめてバンドルされてもよく、それによって、共通プロパティを使用して実行されるようにまとめてスケジューリングされてもよい。
【００６３】
コンピューティングデバイスは、共通プロパティを共有するタスクに関してバンドルが存在しないと判定した(すなわち、判定ブロック806=「No」)ことに応答して、判定ブロック808において、共通プロパティを共有するタスクに関してバンドルを作成してもよい。様々な実施形態では、バンドルは、バンドル内のタスクのレベルを示すためのレベル変数を含んでもよく、それによって、バンドルに追加された第1のタスクは規定されたレベル、たとえば、深度「0」になる。ブロック810において、コンピューティングデバイスは、共通プロパティを共有するタスクに関する作成されたバンドルに後続タスクを追加してもよい。
【００６４】
コンピューティングデバイスは、共通プロパティを共有するタスクに関してバンドルが存在すると判定した(すなわち、判定ブロック806=「Yes」)ことに応答して、判定ブロック810において、共通プロパティを共有するタスクに関する既存のバンドルに後続タスクを追加してもよい。
【００６５】
バンドルに追加された後続タスクは、バンドルされたタスクと呼ばれてもよい。様々な実施形態では、共通プロパティを共有するタスクに関するバンドルは、共通プロパティを共有するタスクのみを含んでもよく、それらのタスクのうちの1つのタスクのみが、レディタスクであるタスクであってもよく、残りのタスクは、レディタスクからの分離度が異なるレディタスクの後続タスクであってもよい。さらに、また、後続タスクは、共通プロパティを共有するタスクに関するバンドルから除外された他のタスク、すなわち、共通プロパティを共有しないタスクの後続タスクではなくてもよい。最初は除外されたタスクの後続タスクであるタスクが、依然として、実行中の除外されたタスクに応答してバンドルに追加され、それによって、図7を参照しながら方法700のブロック712に関して説明したように除外されたタスクに対する後続タスクの依存性が除去されてもよい。したがって、共通プロパティを共有するタスクに関するバンドルに含まれるタスクは、共通プロパティタスクグラフを構成する。
【００６６】
ブロック812において、コンピューティングデバイスは、共通プロパティを共有するタスクに関するバンドルに追加される、共通プロパティを共有するバンドルされたタスクの後続タスクを特定してもよい。共通プロパティを共有するバンドルされたタスクの後続タスクを特定することについては、図9を参照しながらより詳細に説明する。
【００６７】
コンピューティングデバイスは、判定ブロック814において、レベル変数が、バンドルに追加された第1のタスクのレベルに等しいことなど、バンドルに追加された第1のタスクのレベルとの指定された関係を満たすかどうかを判定してもよい。
【００６８】
コンピューティングデバイスは、レベル変数が、バンドルに追加された第1のタスクのレベルとの指定された関係を満たさないと判定した(すなわち、判定ブロック814=「No」)ことに応答して、図7を参照しながら説明した方法700の判定ブロック708において、スケジュールキューから取り出された実行済みのタスクが後続タスクを有するかどうかを判定してもよい。
【００６９】
コンピューティングデバイスは、レベル変数が、バンドルに追加された第1のタスクのレベルとの指定された関係を満たすと判定した(すなわち、判定ブロック814=「Yes」)ことに応答して、ブロック816において、共通プロパティを共有するタスクに関するバンドルのタスクをレディキューに追加してもよい。ブロック818において、コンピューティングデバイスは、レディキューをチェックするように構成要素に通知するかまたはそれ以外の方法で促してもよい。コンピューティングデバイスは、図7を参照しながら方法700のブロック702に関して説明したように、スケジュールキューが空であるかどうかを判定してもよい。
【００７０】
図9は、共通プロパティタスク同期再マッピングのための一実施形態の方法900を示す。方法900は、コンピューティングデバイス内で、プロセッサ、汎用ハードウェア、または専用ハードウェア内で実行されるソフトウェアにおいて実施されてもよい。様々な実施形態では、方法900は、複数のプロセッサまたはハードウェア構成要素上の複数のスレッドによって実施されてもよい。様々な実施形態では、方法900は、本明細書でさらに図6〜図8を参照しながら説明する他の方法と並行して実施されてもよい。様々な実施形態では、方法900は、方法900の条件を満たすタスクがなくなるまで再帰的に実行されてもよい。様々な実施形態において、方法900は、図8を参照して説明した方法800の判定ブロック812の代わりに実施されてもよい。
【００７１】
判定ブロック902において、コンピューティングデバイスは、バンドルされたタスクが後続タスクを有するかどうかを判定してもよい。コンピューティングデバイスは、バンドルされたタスクが後続タスクを有しないと判定した(すなわち、判定ブロック902=「No」)ことに応答して、図8を参照しながら説明した方法800の判定ブロック814において、レベル変数が、バンドルに追加された第1のタスクのレベルとの指定された関係を満たすかどうかを判定してもよい。さらに、方法900が実行されるタスクは、本明細書でさらに説明するようにリセットされてもよい。
【００７２】
コンピューティングデバイスは、バンドルされたタスクが後続タスクを有すると判定した(すなわち、判定ブロック902=「Yes」)ことに応答して、ブロック904において、バンドルされたタスクの後続であるタスクを取得してもよい。
【００７３】
判定ブロック906において、コンピューティングデバイスは、後続タスクがバンドルされたタスクと共通プロパティを共有するかどうかを判定してもよい。後続タスクがバンドルされたタスクと共通プロパティを共有するかどうかの判定は、図8を参照しながら説明した方法800の判定ブロック804における、後続タスクが他のタスクと共通プロパティを共有するかどうかの判定と同様に実施されてもよい。様々な実施形態では、後続タスクがバンドルされたタスクと共通プロパティを共有するかどうかの判定は、考えられる共通プロパティのより大きいセットにおいてチェックするのではなく、バンドルされたタスク間で共有される共通プロパティについてチェックするだけでよいという点が異なる場合がある。
【００７４】
コンピューティングデバイスは、後続タスクがバンドルされたタスクと共通プロパティ共有しないと判定した(すなわち、判定ブロック906=「No」)ことに応答して、判定ブロック902において、バンドルされたタスクが他の後続タスクを有するかどうかを判定してもよい。
【００７５】
コンピューティングデバイスは、後続タスクがバンドルされたタスクと共通プロパティ共有すると判定した(すなわち、判定ブロック906=「Yes」)ことに応答して、ブロック908において、バンドルされたタスクとその後続タスクとの間の依存性を削除してもよい。バンドルされたタスクとその後続タスクとの間の依存性を削除したことによって、バンドルされたタスクはもはや後続タスクの先行タスクではなくなる場合がある。しかし、そのことは、バンドルされたタスクと後続タスクが順序不同に実行される場合があることを意味するとは限らない。むしろ、バンドル内の各タスクに割り当てられたレベル変数は、図8を参照しながら説明した方法800のブロック816と同様に、バンドルがレディキューに追加されるときにタスクがスケジューリングされる順序を調節するのに使用されてもよい。
【００７６】
判定ブロック910において、コンピューティングデバイスは、バンドルされたタスクの後続タスクが先行タスクを有するかどうかを判定してもよい。コンピューティングデバイスは、バンドルされたタスクの後続タスクが先行タスクを有すると判定した(すなわち、判定ブロック910=「Yes」)ことに応答して、判定ブロック902において、バンドルされたタスクが他の後続タスクを有するかどうかを判定してもよい。
【００７７】
コンピューティングデバイスは、バンドルされたタスクの後続タスクが先行タスクを有しないと判定した(すなわち、判定ブロック910=「No」)ことに応答して、ブロック912において、レベル変数の値を増分することなどの所定の方法でレベル変数の値を変更してもよい。
【００７８】
上述のように、方法900は、方法900の条件を満たすタスクがなくなるまで、破線の矢印によって示すように再帰的に実行されてもよい。したがって、バンドルされたタスクの後続タスクは、図8を参照しながら説明した方法800のブロック810において、レベル変数によって示される現在のレベルにおいて共通プロパティタスクバンドルに追加されてもよく、方法900は、新たにバンドルされた後続タスクを使用してコンピューティングデバイスによって繰り返されてもよい。
【００７９】
様々な実施形態では、コンピューティングデバイスは、新たにバンドルされた後続タスクが後続タスクを有しないと判定した(すなわち、判定ブロック902=「No」)ことに応答して、図8を参照しながら説明した方法800の判定ブロック814において、方法900が再び実行されるタスクを第1のバンドルされたタスクにリセットし、レベル変数が、バンドルに追加された第1のタスクのレベルとの指定された関係を満たすかどうかを判定してもよい。本明細書で使用される例では、バンドルされたタスクに関するレベル変数値は、バンドルに追加された第1のタスクのレベルとの指定された関係を満たし、たとえば、「0」に等しい。
【００８０】
(限定はしないが、図1〜図9を参照して上記で説明した実施形態を含む)様々な実施形態は、図10に示す様々な実施形態とともに使用するのに適した例示的なモバイルコンピューティングデバイスを含んでもよい多種多様なコンピューティングシステムにおいて実装されてもよい。モバイルコンピューティングデバイス1000は、タッチスクリーンコントローラ1004および内部メモリ1006に結合されたプロセッサ1002を含む場合がある。プロセッサ1002は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であってもよい。内部メモリ1006は、揮発性メモリまたは不揮発性メモリであってもよく、また、セキュアなメモリおよび/もしくは暗号化されたメモリ、またはセキュアでないメモリおよび/もしくは暗号化されていないメモリ、またはそれらの任意の組合せであってもよい。活用されてもよいメモリタイプの例には、限定はしないが、DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM、および埋め込みDRAMが含まれる。タッチスクリーンコントローラ1004およびプロセッサ1002はまた、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル1012に結合される場合もある。加えて、コンピューティングデバイス1000のディスプレイは、タッチスクリーン機能を有する必要はない。
【００８１】
モバイルコンピューティングデバイス1000は、互いに結合され、かつ/またはプロセッサ1002に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ1008(たとえば、Peanut、Bluetooth(登録商標)、Zigbee、Wi-Fi、RF無線)と、アンテナ1010とを有する場合がある。トランシーバ1008およびアンテナ1010は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用される場合がある。モバイルコンピューティングデバイス1000は、セルラーネットワークを介する通信を可能にし、かつプロセッサに結合されたセルラーネットワークワイヤレスモデムチップ1016を含む場合がある。
【００８２】
モバイルコンピューティングデバイス1000は、プロセッサ1002に結合された周辺デバイス接続インターフェース1018を含む場合がある。周辺デバイス接続インターフェース1018は、1つのタイプの接続を受け入れるように単独で構成される場合があるか、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの様々なタイプの物理接続および通信接続を共通もしくはプロプライエタリに受け入れるように、構成される場合がある。周辺デバイス接続インターフェース1018は、同様に構成された周辺デバイス接続ポート(図示せず)に結合される場合もある。
【００８３】
モバイルコンピューティングデバイス1000は、オーディオ出力を生成するためのスピーカー1014を含む場合もある。モバイルコンピューティングデバイス1000は、本明細書で説明した構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築されたハウジング1020を含む場合もある。モバイルコンピューティングデバイス1000は、使い捨てまたは充電可能なバッテリなどの、プロセッサ1002に結合された電源1022を含む場合がある。充電可能なバッテリは、モバイルコンピューティングデバイス1000の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。モバイルコンピューティングデバイス1000は、ユーザ入力を受け取るための物理ボタン1024を含む場合もある。モバイルコンピューティングデバイス1000は、モバイルコンピューティングデバイス1000をオンオフするための電源ボタン1026を含む場合もある。
【００８４】
(限定はしないが、図1〜図9を参照して上記で説明した実施形態を含む)様々な実施形態は、図11に示すラップトップコンピュータ1100など、様々なモバイルコンピューティングデバイスを含んでもよい多種多様なコンピューティングシステムにおいて実装されてもよい。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1117を含み、したがって、タッチスクリーンディスプレイを装備した上述のコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャ、スクロールジェスチャ、およびフリックジェスチャを受信してもよい。ラップトップコンピュータ1100は通常、揮発性メモリ1112、およびフラッシュメモリのディスクドライブ1113などの大容量不揮発性メモリに結合されたプロセッサ1111を含む。加えて、コンピュータ1100は、プロセッサ1111に結合されたワイヤレスデータリンクおよび/または携帯電話トランシーバ1116に接続される場合がある、電磁放射を送受信するための1つまたは複数のアンテナ1108を有する場合がある。コンピュータ1100は、プロセッサ1111に結合されたフロッピーディスクドライブ1114およびコンパクトディスク(CD)ドライブ1115を含む場合もある。ノートブック構成では、コンピュータのハウジングは、すべてがプロセッサ1111に結合された、タッチパッド1117、キーボード1118、およびディスプレイ1119を含む。コンピューティングデバイスの他の構成はよく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含んでよく、それらはまた、様々な実施形態とともに使用されてもよい。
【００８５】
(限定はしないが、図1〜図9を参照して上記で説明した実施形態を含む)様々な実施形態は、サーバキャッシュメモリ内にデータを圧縮するための様々な市販のサーバのうちのいずれかを含んでもよい多種多様なコンピューティングシステムにおいて実装されてもよい。例示的なサーバ1200が、図12に示されている。そのようなサーバ1200は通常、揮発性メモリ1202と、ディスクドライブ1204などの大容量不揮発性メモリとに結合された、1つまたは複数のマルチコアプロセッサアセンブリ1201を含む。図12に示すように、マルチコアプロセッサアセンブリ1201は、それらをアセンブリのラックに挿入することによって、サーバ1200に付加されてもよい。サーバ1200はまた、プロセッサ1201に結合されたフロッピーディスクドライブ、コンパクトディスク(CD)、またはデジタル多用途ディスク(DVD)ディスクドライブ1206を含んでもよい。サーバ1200はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、ならびに/またはセルラーデータネットワーク(たとえば、CDMA、TDMA、GSM(登録商標)、PCS、3G、4G、LTE、もしくは任意の他のタイプのセルラーデータネットワーク)など、ネットワーク1205とのネットワークインターフェース接続を確立するための、マルチコアプロセッサアセンブリ1201に結合されたネットワークアクセスポート1203を含んでもよい。
【００８６】
様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、Structured Query Language(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語または様々な他のプログラミング言語で記述されてもよい。本出願において使用される、コンピュータ可読記憶媒体上に記憶されたプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である(オブジェクトコードなどの)機械語コードを指すことがある。
【００８７】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されており、様々な実施形態の動作が提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって諒解されるように、上記の実施形態における動作の順序は、任意の順序で実行されてもよい。「その後」、「次いで」、「次に」などの単語は、動作の順序を限定するものではなく、これらの単語は単に、方法の説明を通じて読者を導くために使用される。さらに、たとえば、冠詞「a」、「an」、または「the」を使用する単数形でのクレーム要素へのいかなる参照も、要素を単数形に限定するものとして解釈すべきではない。
【００８８】
様々な実施形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装されてもよい。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、および動作について、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアまたはソフトウェアのどちらで実施されるのかは、特定の応用例と、システム全体に課せられる設計制約とに依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装してもよいが、そのような実装決定は、特許請求の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
【００８９】
本明細書で開示される実施形態に関連して説明した様々な例示的な論理、論理ブロック、モジュール、および回路を実施するのに使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラム可能論理デバイス、ディスクリートゲート論理もしくはトランジスタ論理、ディスクリートハードウェア構成要素、または本明細書で説明した機能を実行するように設計されたその任意の組合せを用いて実施または実行されてもよい。汎用プロセッサはマイクロプロセッサであってもよいが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサはまた、コンピューティングデバイスの組合せ、(たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成)として実装されてもよい。代替的に、いくつかの動作または方法は、所与の機能に固有の回路機構によって実施されてもよい。
【００９０】
1つまたは複数の実施形態では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装されてもよい。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、非一時的コンピュータ可読媒体または非一時的プロセッサ可読媒体上に記憶されてもよい。本明細書で開示する方法またはアルゴリズムの動作は、非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体上に存在する場合があるプロセッサ実行可能ソフトウェアモジュールにおいて具現化されてもよい。非一時的コンピュータ可読記憶媒体または非一時的プロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされる場合がある任意の記憶媒体であってもよい。限定ではなく例として、そのような非一時的コンピュータ可読またはプロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または命令もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され、コンピュータによってアクセスされる場合がある任意の他の媒体を含んでもよい。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標) (disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびBlu-Rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生するが、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読媒体およびプロセッサ可読媒体の範囲内に含まれる。追加として、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれてもよい、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして存在してもよい。
【００９１】
開示される実施形態の前述の説明は、任意の当業者が特許請求の範囲を製作または使用することを可能にするために提供される。これらの実施形態への様々な修正が当業者には容易に明らかになり、本明細書において定義される一般原理は、特許請求の範囲から逸脱することなく他の実施形態に適用されてもよい。したがって、本開示は、本明細書において示される実施形態に限定されるものではなく、以下の特許請求の範囲ならびに本明細書において開示された原理および新規の特徴に一致する最大の範囲を与えられるものである。
【符号の説明】
【００９２】
10  コンピューティングデバイス
12  システムオンチップ(SoC)
14  プロセッサ
16  メモリ
18  通信インターフェース
20  ストレージメモリインターフェース
22  通信構成要素
24  ストレージメモリ
26  アンテナ
28  ネットワークインターフェース
30  ワイヤレスネットワーク
32  ワイヤレス接続
40  インターネット
44  ワイヤード接続
50  リモートコンピューティングデバイス
200、201、202、203  プロセッサコア
300  タスクグラフ
302  共通プロパティタスクグラフ
304a〜304e  CPU専用実行可能タスク(CPUタスク)
306a〜306e  GPU専用実行可能タスク(GPUタスク)
400  CPU
402  GPU
426  スケジューラ
1000  モバイルコンピューティングデバイス
1002  プロセッサ
1004  タッチスクリーンコントローラ
1006  内部メモリ
1008  トランシーバ
1010  アンテナ
1012  タッチスクリーンパネル
1014  スピーカー
1016  セルラーネットワークワイヤレスモデムチップ
1018  周辺デバイス接続インターフェース
1020  ハウジング
1022  電源
1024  物理ボタン
1026  電源ボタン
1100  ラップトップコンピュータ
1108  アンテナ
1111  プロセッサ
1112  揮発性メモリ
1113  ディスクドライブ
1114  フロッピーディスクドライブ
1115  コンパクトディスク(CD)ドライブ
1116  ワイヤレスデータリンクおよび/またはセルラー電話トランシーバ
1117  タッチパッドタッチ面
1118  キーボード
1119  ディスプレイ
1200  サーバ
1201  マルチコアプロセッサアセンブリ
1202  揮発性メモリ
1203  ネットワークアクセスポート
1204  ディスクドライブ
1205  ネットワーク
1206  デジタル多用途ディスク(DVD)ディスクドライブ
【図１】
2018534675.tif 000003
【図２】
2018534675.tif 000004
【図３】
2018534675.tif 000005
【図４】
2018534675.tif 000006
【図５】
2018534675.tif 000007
【図６】
2018534675.tif 000008
【図７】
2018534675.tif 000009
【図８】
2018534675.tif 000010
【図９】
2018534675.tif 000011
【図１０】
2018534675.tif 000012
【図１１】
2018534675.tif 000013
【図１２】
2018534675.tif 000014
【手続補正書】
【提出日】平成30年4月17日(2018.4.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の共通プロパティタスクグラフに属する複数のタスクの実行を加速する方法であって、
利用可能な同期機構が、レディタスクおよび前記レディタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定するステップと、
前記第1の後続タスクを前記共通プロパティタスクグラフに追加するステップと、
前記共通プロパティタスクグラフに属する前記複数のタスクが前記利用可能な同期機構に基づいて前記コンピューティングデバイスの1つの構成要素によって実行されるように、前記複数のタスクをレディキューに追加するステップと
を含む方法。
【請求項２】
前記コンピューティングデバイスの前記1つの構成要素に前記利用可能な同期機構に関して問い合わせるステップをさらに含む、請求項1に記載の方法。
【請求項３】
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成するステップであって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記レディタスクに依存する、ステップと、
前記レディタスクを前記バンドルに追加するステップと
をさらに含む、請求項1に記載の方法。
【請求項４】
前記バンドルに関するレベル変数を前記第1の後続タスクに関する第1の値に設定するステップと、
前記第1の後続タスクが別の先行タスクを有するかどうかを判定するステップと、
前記第1の後続タスクが別の先行タスクを有しないと判定したことに応答して前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正するステップと
をさらに含み、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記ステップは、各タスクの前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する各タスクを前記レディキューに追加するステップを含む、請求項3に記載の方法。
【請求項５】
前記レディタスクの第1の後続タスクを特定する前記ステップは、
前記レディタスクが第1の後続タスクを有するかどうかを判定するステップと、
前記レディタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有するかどうかを判定するステップと
を含む、請求項1に記載の方法。
【請求項６】
前記レディタスクの第1の後続タスクを特定する前記ステップは、
前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記レディタスクに対する依存性を削除するステップと、
前記第1の後続タスクが先行タスクを有するかどうかを判定するステップと
をさらに含む、請求項5に記載の方法。
【請求項７】
前記レディタスクが他の後続タスクを有しないと判定されるまで、前記レディタスクの第1の後続タスクを特定する前記ステップが再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記ステップは、前記レディタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するステップを含む、請求項6に記載の方法。
【請求項８】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項1に記載の方法。
【請求項９】
コンピューティングデバイスであって、
メモリと、
互いに通信可能に接続されるとともに前記メモリに通信可能に接続され、動作を実施するためのプロセッサ実行可能命令で構成された第1のプロセッサを含む複数のプロセッサであって、前記動作が、
前記複数のプロセッサのうちの第2のプロセッサの利用可能な同期機構が、レディタスクおよび前記レディタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定する動作と、
前記第1の後続タスクを共通プロパティタスクグラフに追加する動作と、
前記共通プロパティタスクグラフに属する複数のタスクが前記利用可能な同期機構に基づいて前記第2のプロセッサによって実行されるように、前記複数のタスクをレディキューに追加する動作と
を含む、複数のプロセッサと
を備えるコンピューティングデバイス。
【請求項１０】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記第2のプロセッサに前記利用可能な同期機構に関して問い合わせる動作をさらに含む、請求項9に記載のコンピューティングデバイス。
【請求項１１】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成する動作であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記レディタスクに依存する、動作と、
前記レディタスクを前記バンドルに追加する動作と
をさらに含む、請求項9に記載のコンピューティングデバイス。
【請求項１２】
前記第1のプロセッサは、動作を実行するためのプロセッサ実行可能命令で構成され、前記動作が、
前記バンドルに関するレベル変数を前記第1の後続タスクに関する第1の値に設定する動作と、
前記第1の後続タスクが別の先行タスクを有するかどうかを判定する動作と、
前記第1の後続タスクが別の先行タスクを有しないと判定したことに応答して前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正する動作と
をさらに含み、
前記第1のプロセッサは、前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、各タスクの前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する各タスクを前記レディキューに追加する動作を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項11に記載のコンピューティングデバイス。
【請求項１３】
前記第1のプロセッサは、前記レディタスクの第1の後続タスクを特定する前記動作が、
前記レディタスクが第1の後続タスクを有するかどうかを判定する動作と、
前記レディタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有するかどうかを判定する動作と
を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項9に記載のコンピューティングデバイス。
【請求項１４】
前記第1のプロセッサは、前記レディタスクの第1の後続タスクを特定する前記動作が、
前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記レディタスクに対する依存性を削除する動作と、
前記第1の後続タスクが先行タスクを有するかどうかを判定する動作と
をさらに含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項13に記載のコンピューティングデバイス。
【請求項１５】
前記第1のプロセッサは、
前記レディタスクが他の後続タスクを有しないと判定されるまで、前記レディタスクの第1の後続タスクを特定する前記動作が再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、前記レディタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含むように、動作を実行するためのプロセッサ実行可能命令で構成される、請求項14に記載のコンピューティングデバイス。
【請求項１６】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項9に記載のコンピューティングデバイス。
【請求項１７】
コンピューティングデバイスであって、
利用可能な同期機構が、レディタスクおよび前記レディタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定するための手段と、
前記第1の後続タスクを共通プロパティタスクグラフに追加するための手段と、
前記共通プロパティタスクグラフに属する複数のタスクが前記利用可能な同期機構に基づいて前記コンピューティングデバイスの1つの構成要素によって実行されるように、前記複数のタスクをレディキューに追加するための手段と
を備えるコンピューティングデバイス。
【請求項１８】
前記コンピューティングデバイスの前記1つの構成要素に前記利用可能な同期機構に関して問い合わせるための手段をさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項１９】
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成するための手段であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記レディタスクに依存する手段と、
前記レディタスクを前記バンドルに追加するための手段と
をさらに備える、請求項17に記載のコンピューティングデバイス。
【請求項２０】
前記バンドルに関するレベル変数を前記第1の後続タスクに関する第1の値に設定するための手段と、
前記第1の後続タスクが別の先行タスクを有するかどうかを判定するための手段と、
前記第1の後続タスクが別の先行タスクを有しないと判定したことに応答して前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正するための手段と
をさらに備え、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加するための前記手段は、各タスクの前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する各タスクを前記レディキューに追加するための手段を備える、請求項19に記載のコンピューティングデバイス。
【請求項２１】
前記レディタスクの第1の後続タスクを特定するための前記手段は、
前記レディタスクが第1の後続タスクを有するかどうかを判定するための手段と、
前記レディタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有するかどうかを判定するための手段と
を備える、請求項17に記載のコンピューティングデバイス。
【請求項２２】
前記レディタスクの第1の後続タスクを特定するための前記手段は、
前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記レディタスクに対する依存性を削除するための手段と、
前記第1の後続タスクが先行タスクを有するかどうかを判定するための手段と
をさらに備える、請求項21に記載のコンピューティングデバイス。
【請求項２３】
前記レディタスクの第1の後続タスクを特定するための前記手段は、前記レディタスクが他の後続タスクを有しないと判定されるまで、前記レディタスクの前記第1の後続タスクを再帰的に特定するための手段を備え、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加するための前記手段は、前記レディタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加するための手段を備える、請求項22に記載のコンピューティングデバイス。
【請求項２４】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項17に記載のコンピューティングデバイス。
【請求項２５】
コンピューティングデバイスのプロセッサに動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的プロセッサ可読記憶媒体であって、前記動作が、
利用可能な同期機構が、レディタスクおよび前記レディタスクに依存する第1の後続タスクに関する共通プロパティとなり、かつ前記第1の後続タスクが、前記利用可能な同期機構が共通プロパティである先行タスクにのみ依存するように、前記第1の後続タスクを特定する動作と、
前記第1の後続タスクを共通プロパティタスクグラフに追加する動作と、
前記共通プロパティタスクグラフに属する複数のタスクが前記利用可能な同期機構に基づいて前記コンピューティングデバイスの1つの構成要素によって実行されるように、前記複数のタスクをレディキューに追加する動作と
を含む非一時的プロセッサ可読記憶媒体。
【請求項２６】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記コンピューティングデバイスの前記1つの構成要素に前記利用可能な同期機構に関して問い合わせる動作をさらに含む、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２７】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記共通プロパティタスクグラフに属する前記複数のタスクを含めるためのバンドルを作成する動作であって、前記利用可能な同期機構が、前記複数のタスクの各々に関する共通プロパティであり、前記複数のタスクの各々が前記レディタスクに依存する、動作と、
前記レディタスクを前記バンドルに追加する動作と
をさらに含む、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項２８】
前記記憶されたプロセッサ実行可能命令は、前記プロセッサに動作を実行させるように構成され、前記動作が、
前記バンドルに関するレベル変数を前記第1の後続タスクに関する第1の値に設定する動作と、
前記第1の後続タスクが別の先行タスクを有するかどうかを判定する動作と、
前記第1の後続タスクが別の先行タスクを有しないと判定したことに応答して前記バンドルに関する前記レベル変数を前記第1の後続タスクに関する第2の値に修正する動作と
をさらに含み、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作は、各タスクの前記レベル変数が前記第1の値に設定されたことに応答して前記共通プロパティタスクグラフに属する各タスクを前記レディキューに追加する動作を含む、請求項27に記載の非一時的プロセッサ可読記憶媒体。
【請求項２９】
前記記憶されたプロセッサ実行可能命令は、前記レディタスクの第1の後続タスクを特定する前記動作が、
前記レディタスクが第1の後続タスクを有するかどうかを判定する動作と、
前記レディタスクが前記第1の後続タスクを有すると判定したことに応答して、前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有するかどうかを判定する動作と
を含むように、前記プロセッサに動作を実行させるように構成される、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【請求項３０】
前記記憶されたプロセッサ実行可能命令は、前記レディタスクの第1の後続タスクを特定する前記動作が、
前記第1の後続タスクが前記利用可能な同期機構を前記レディタスクとの共通プロパティとして有すると判定したことに応答して、前記第1の後続タスクの前記レディタスクに対する依存性を削除する動作と、
前記第1の後続タスクが先行タスクを有するかどうかを判定する動作と
をさらに含むように、前記プロセッサに動作を実行させるように構成される、請求項29に記載の非一時的プロセッサ可読記憶媒体。
【請求項３１】
前記記憶されたプロセッサ実行可能命令は、
前記レディタスクが他の後続タスクを有しないと判定されるまで、前記レディタスクの第1の後続タスクを特定する前記動作が再帰的に実行され、
前記共通プロパティタスクグラフに属する前記複数のタスクをレディキューに追加する前記動作が、前記レディタスクが他の後続タスクを有しないと判定したことに応答して前記共通プロパティタスクグラフに属する前記複数のタスクを前記レディキューに追加する動作を含むように、前記プロセッサに動作を実行させるように構成される、請求項30に記載の非一時的プロセッサ可読記憶媒体。
【請求項３２】
前記利用可能な同期機構は、制御論理フローに関する同期機構とデータアクセスに関する同期機構の一方である、請求項25に記載の非一時的プロセッサ可読記憶媒体。
【国際調査報告】
2018534675.tif 000015
2018534675.tif 000016