(57)【要約】  コンピューティングデバイス(たとえば、モバイルコンピューティングデバイスなど)は、タスク依存性コントローラを介してタスクのシーケンスを識別することと、タスクのシーケンスにおける第1のタスクの実行を開始することと、コンピューティングデバイスのランタイムシステムに制御を移転することなく、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することとによって、現代のマルチプロセッサアーキテクチャによって可能にされる並行性および並列性をより良好に利用するように構成され得る。タスク依存性コントローラは、プロセッサコアによって共有され、かつ/あるいはランタイムシステムから独立した異なるプロセッサコア上で実行されているタスクの間で、かつ/または従来のソリューションが必要とする比較的遅い、メモリベースのタスク間、スレッド間もしくはプロセス間の通信を実行することなく、制御を移転するように構成されるハードウェア構成要素であり得る。
2018507474.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいてタスクを実行する方法であって、
前記コンピューティングデバイスのタスク依存性コントローラを介してタスクのシーケンスを識別するステップと、
タスクの前記シーケンスにおける第1のタスクの実行を開始するステップと、
前記コンピューティングデバイスのランタイムシステムに制御を移転することなく、タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するステップと
を含む方法。
【請求項２】
前記コンピューティングデバイスの前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するステップは、ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するステップを含む、請求項1に記載の方法。
【請求項３】
前記ハードウェアベースのタスク依存性コントローラは、タスクの前記シーケンスを実行する複数のプロセッサコアの間で共有されるハードウェア構成要素である、請求項2に記載の方法。
【請求項４】
前記コンピューティングデバイスの前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するステップは、前記タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別するステップを含む、請求項1に記載の方法。
【請求項５】
タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、前記レジスタの前記値を設定するステップは、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定するステップを含む、請求項1に記載の方法。
【請求項６】
前記コンピューティングデバイスの前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するステップは、前記タスク依存性コントローラが、ハードウェアにおいて実装されたテーブルに記録を追加するステップを含む、請求項1に記載の方法。
【請求項７】
前記コンピューティングデバイスの前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するステップは、前記タスク依存性コントローラが、マップ構造に先行タスク、後続タスク、および前記後続タスクのプログラムカウンタを識別する記録を追加するステップを含む、請求項1に記載の方法。
【請求項８】
前記タスク依存性コントローラが前記マップ構造に前記記録を追加するステップは、前記タスク依存性コントローラが連想マップ構造およびダイレクトマップ構造のうちの1つに前記記録を追加するステップを含む、請求項7に記載の方法。
【請求項９】
コンピューティングデバイスであって、
動作を実行するためのプロセッサ実行可能命令を備えるプロセッサを備え、前記動作は、
タスク依存性コントローラを介してタスクのシーケンスを識別することと、
タスクの前記シーケンスにおける第1のタスクの実行を開始することと、
ランタイムシステムに制御を移転することなく、タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することと
を含む、コンピューティングデバイス。
【請求項１０】
ハードウェアベースのタスク依存性コントローラをさらに備え、前記タスク依存性コントローラを介してタスクのシーケンスを識別することは、前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することを含む、請求項9に記載のコンピューティングデバイス。
【請求項１１】
複数のプロセッサコアをさらに備え、前記ハードウェアベースのタスク依存性コントローラは、タスクの前記シーケンスを実行する前記複数のプロセッサコアの間で共有される、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記プロセッサは、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、前記タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別することを含むようなプロセッサ実行可能命令を備える、請求項9に記載のコンピューティングデバイス。
【請求項１３】
前記プロセッサは、前記レジスタの前記値を設定することが、タスクの前記シーケンスにおける各残存タスクが、それの先行タスクが実行を終えた後に実行されるように、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定することを含むようなプロセッサ実行可能命令を備える、請求項9に記載のコンピューティングデバイス。
【請求項１４】
前記プロセッサは、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、前記タスク依存性コントローラが、ハードウェアにおいて実装されたテーブルに記録を追加することを含むようなプロセッサ実行可能命令を備える、請求項9に記載のコンピューティングデバイス。
【請求項１５】
前記プロセッサは、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、前記タスク依存性コントローラに、連想マップ構造およびダイレクトマップ構造を含むグループから選択されたマップ構造に先行タスク、後続タスク、および前記後続タスクのプログラムカウンタを識別する記録を追加させることを含むようなプロセッサ実行可能命令を備える、請求項9に記載のコンピューティングデバイス。
【請求項１６】
プロセッサ実行可能ソフトウェア命令が記憶された非一時的コンピュータ可読記憶媒体であって、前記プロセッサ実行可能ソフトウェア命令は、
タスク依存性コントローラを介してタスクのシーケンスを識別することと、
タスクの前記シーケンスにおける第1のタスクの実行を開始することと、
ランタイムシステムに制御を移転することなく、タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することと
を含む動作をコンピューティングデバイスプロセッサに実行させるように構成される、非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することがハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することを含むような動作をプロセッサに実行させるように構成される、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することが、タスクの前記シーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクの前記シーケンスを識別することを含むような動作をプロセッサに実行させるように構成される、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、前記タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別することを含むような動作をプロセッサに実行させるように構成される、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、前記レジスタの前記値を設定することが、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定することを含むような動作をプロセッサに実行させるように構成される、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、ハードウェアにおいて実装されたテーブルに記録を追加することを含むような動作をプロセッサに実行させるように構成される、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することが、連想マップ構造およびダイレクトマップ構造のうちの1つに先行タスク、後続タスク、および前記後続タスクのプログラムカウンタを識別する記録を追加することを含むような動作をプロセッサに実行させるように構成される、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
タスク依存性コントローラを介してタスクのシーケンスを識別するための手段と、
タスクの前記シーケンスにおける第1のタスクの実行を開始するための手段と、
ランタイムシステムに制御を移転することなく、タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するための手段と
を含むコンピューティングデバイス。
【請求項２４】
前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段を含む、請求項23に記載のコンピューティングデバイス。
【請求項２５】
前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、タスクの前記シーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクの前記シーケンスを識別するための手段を含む、請求項24に記載のコンピューティングデバイス。
【請求項２６】
前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別するための手段を含む、請求項23に記載のコンピューティングデバイス。
【請求項２７】
タスクの前記シーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、前記レジスタの前記値を設定するための手段は、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定するための手段を含む、請求項23に記載のコンピューティングデバイス。
【請求項２８】
前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、ハードウェアにおいて実装されたテーブルに記録を追加するための手段を含む、請求項23に記載のコンピューティングデバイス。
【請求項２９】
前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、マップ構造に先行タスク、後続タスク、および前記後続タスクのプログラムカウンタを識別する記録を追加するための手段を含む、請求項23に記載のコンピューティングデバイス。
【請求項３０】
前記マップ構造に前記記録を追加するための手段は、連想マップ構造およびダイレクトマップ構造のうちの1つに前記記録を追加するための手段を含む、請求項29に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
モバイル技術およびワイヤレス技術は、過去数年の間に爆発的な発展をとげてきた。この発展は、より優れた通信、ハードウェア、およびより信頼できるプロトコルによって促進されている。ワイヤレスサービスプロバイダは現在、向上し続ける多数の特徴およびサービスを自らの顧客に提供し、情報、リソースおよび通信に対するかつてないレベルのアクセスをユーザに提供することができる。これらの強化と歩調を合わせるために、モバイル電子デバイス(たとえば、セルラーフォン、時計、ヘッドフォン、遠隔制御装置など)は、今までよりも複雑になり、今や一般的に、複数のプロセッサ、システムオンチップ(SoC)、およびモバイルデバイスユーザが自らのモバイルデバイス上で複雑で電力集約的なアプリケーションプログラム(たとえば、ビデオストリーミング、ビデオ処理など)を実行することを可能にする他のリソースを含む。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
これらの改善および他の改善により、スマートフォンおよびタブレットコンピュータは人気が高まり、多くのユーザが選択するプラットフォームとして、ラップトップおよびデスクトップマシンに取って代わっている。モバイルデバイスの人気が高まり続けているので、モバイルデバイスの多重処理能力をより良好に利用する改善された処理ソリューションが、消費者にとって望ましい。
【課題を解決するための手段】
【０００３】
様々な実施形態は、コンピューティングデバイスにおいてタスクを実行する方法を含み、本方法は、コンピューティングデバイスのタスク依存性コントローラ(task dependency controller)を介してタスクのシーケンスを識別するステップと、タスクのシーケンスにおける第1のタスクの実行を開始するステップと、コンピューティングデバイスのランタイムシステムに制御を移転することなく、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するステップとを含み得る。一実施形態では、コンピューティングデバイスのタスク依存性コントローラを介してタスクのシーケンスを識別するステップは、ハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別するステップを含み得る。さらなる実施形態では、ハードウェアベースのタスク依存性コントローラは、タスクのシーケンスを実行する複数のプロセッサコアの間で共有されるハードウェア構成要素であり得る。
【０００４】
さらなる実施形態では、コンピューティングデバイスのタスク依存性コントローラを介してタスクのシーケンスを識別するステップは、タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別するステップを含み得る。さらなる実施形態では、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するステップは、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定するステップを含み得る。さらなる実施形態では、コンピューティングデバイスのタスク依存性コントローラを介してタスクのシーケンスを識別するステップは、タスク依存性コントローラが、ハードウェアにおいて実装されたテーブルに記録を追加するステップを含み得る。さらなる実施形態では、コンピューティングデバイスのコントローラは、マップ構造に先行タスク、後続タスク、および後続タスクのプログラムカウンタを識別する記録を追加するタスク依存性コントローラを含み得る。さらなる実施形態では、マップ構造に記録を追加するタスク依存性コントローラは、連想マップ構造(associative map structure)およびダイレクトマップ構造(direct map structure)のうちの1つに記録を追加するタスク依存性コントローラを含み得る。
【０００５】
さらなる実施形態は、タスク依存性コントローラを介してタスクのシーケンスを識別することと、タスクのシーケンスにおける第1のタスクの実行を開始することと、ランタイムシステムに制御を移転することなく、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することとを含み得る動作を実行するためのプロセッサ実行可能命令で構成されたプロセッサを含むコンピューティングデバイスを含み得る。一実施形態では、タスク依存性コントローラは、ハードウェアベースのタスク依存性コントローラである。さらなる実施形態では、ハードウェアベースのタスク依存性コントローラは、タスクのシーケンスを実行する複数のプロセッサコアの間で共有される。
【０００６】
さらなる実施形態では、プロセッサは、タスク依存性コントローラを介してタスクのシーケンスを識別することが、タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別することを含むような、プロセッサ実行可能命令で構成され得る。さらなる実施形態では、プロセッサは、レジスタの値を設定することが、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定することを含むような、プロセッサ実行可能命令で構成され得る。さらなる実施形態では、プロセッサは、タスク依存性コントローラを介してタスクのシーケンスを識別することが、タスク依存性コントローラが、ハードウェアにおいて実装されたテーブルに記録を追加することを含むような、プロセッサ実行可能命令で構成され得る。さらなる実施形態では、プロセッサは、タスク依存性コントローラを介してタスクのシーケンスを識別することが、タスク依存性コントローラに、連想マップ構造およびダイレクトマップ構造を含むグループから選択されたマップ構造に先行タスク、後続タスク、および後続タスクのプログラムカウンタを識別する記録を追加させることを含むような、プロセッサ実行可能命令で構成され得る。
【０００７】
さらなる実施形態は、タスク依存性コントローラを介してタスクのシーケンスを識別することと、タスクのシーケンスにおける第1のタスクの実行を開始することと、ランタイムシステムに制御を移転することなく、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することとを含む動作をコンピューティングデバイスプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令が記憶された非一時的コンピュータ可読記憶媒体を含む。一実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、タスク依存性コントローラを介してタスクのシーケンスを識別することがハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別することを含むような動作をプロセッサに実行させるように構成され得る。さらなる実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、ハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別することが、タスクのシーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクのシーケンスを識別することを含むような動作をプロセッサに実行させるように構成され得る。
【０００８】
さらなる実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、タスク依存性コントローラを介してタスクのシーケンスを識別することが、タスク依存性コントローラが、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別することを含むような動作をプロセッサに実行させるように構成され得る。さらなる実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定することが、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定することを含むような動作をプロセッサに実行させるように構成され得る。さらなる実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、タスク依存性コントローラを介してタスクのシーケンスを識別することが、ハードウェアにおいて実装されたテーブルに記録を追加することを含むような動作をプロセッサに実行させるように構成され得る。さらなる実施形態では、記憶されたプロセッサ実行可能ソフトウェア命令は、タスク依存性コントローラを介してタスクのシーケンスを識別することが、連想マップ構造およびダイレクトマップ構造のうちの1つに先行タスク、後続タスク、および後続タスクのプログラムカウンタを識別する記録を追加することを含むような動作をプロセッサに実行させるように構成され得る。
【０００９】
さらなる実施形態は、タスク依存性コントローラを介してタスクのシーケンスを識別するための手段と、タスクのシーケンスにおける第1のタスクの実行を開始するための手段と、ランタイムシステムに制御を移転することなく、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するための手段とを含むコンピューティングデバイスを含む。一実施形態では、タスク依存性コントローラを介してタスクのシーケンスを識別するための手段は、ハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別するための手段を含み得る。さらなる実施形態では、ハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別するための手段は、タスクのシーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクのシーケンスを識別するための手段を含み得る。
【００１０】
さらなる実施形態では、タスク依存性コントローラを介してタスクのシーケンスを識別するための手段は、1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクを識別するための手段を含み得る。さらなる実施形態では、タスクのシーケンスにおける各残存タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタの値を設定するための手段は、プログラムカウンタおよび専用プロセッサフロントエンドレジスタのうちの1つを設定するための手段を含み得る。さらなる実施形態では、タスク依存性コントローラを介してタスクのシーケンスを識別するための手段は、ハードウェアにおいて実装されたテーブルに記録を追加するための手段を含み得る。さらなる実施形態では、タスク依存性コントローラを介してタスクのシーケンスを識別するための手段は、マップ構造に先行タスク、後続タスク、および後続タスクのプログラムカウンタを識別する記録を追加するための手段を含み得る。さらなる実施形態では、マップ構造に記録を追加するための手段は、連想マップ構造およびダイレクトマップ構造のうちの1つに記録を追加するための手段を含み得る。
【００１１】
本明細書に組み込まれ、本明細書の一部を構成する添付の図面は、本発明の例示的な実施形態を示し、上記の一般的な説明および以下の発明を実施するための形態とともに、本発明の特徴について説明するのに役立つ。
【図面の簡単な説明】
【００１２】
【図１】コンピューティングデバイスにおいて複数のタスクを実行する従来技術の方法を示すシーケンス図である。
【図２】従来技術の方法を使用してタスクを実行するように構成されたコンピューティングデバイスにおける動作および情報のフローを示すブロック図である。
【図３】コンピューティングデバイスにおいて複数のタスクを実行する実施形態方法を示すシーケンス図である。
【図４】実施形態方法を使用してタスクを実行するように構成されたコンピューティングデバイスにおける動作および情報のフローを示すブロック図である。
【図５】実施形態方法を使用してタスクを実行するように構成されたコンピューティングデバイスにおける動作および情報のフローを示すブロック図である。
【図６】実施形態方法を使用してタスクを実行するように構成されたコンピューティングデバイスにおける動作および情報のフローを示すブロック図である。
【図７】一実施形態による、タスクを実行する方法を示すプロセスフロー図である。
【図８】一実施形態による、依存性テーブルを更新するタスク依存性コントローラの方法を示すプロセスフロー図である。
【図９】様々な実施形態を実装するのに適した例示的なシステムオンチップのアーキテクチャ図である。
【図１０】様々な実施形態とともに使用するのに適した例示的なラップトップコンピュータのブロック図である。
【図１１】様々な実施形態とともに使用するのに適した例示的なスマートフォンのブロック図である。
【図１２】様々な実施形態とともに使用するのに適した例示的なサーバコンピュータのブロック図である。
【発明を実施するための形態】
【００１３】
添付の図面を参照しながら、様々な実施形態について詳細に説明する。可能な場合はいつでも、同じまたは同様の部分を指すために、図面全体を通して同じ参照番号が使用される。具体的な例および実装形態への言及は説明のためであり、本発明の範囲または特許請求の範囲を限定するものではない。
【００１４】
参照しやすいように、以下では「タスク」および「タスク並列プログラミング」モデルを参照しながら様々な実施形態について説明する。ただし、「タスク」を参照しながら説明するいかなる動作も、ブロッキングを含む任意の並行プログラミングシステムにおけるスレッドまたは任意の他の構造、構成、もしくは表現によって実行されてもよいことを理解されたい。したがって、本出願におけるいかなる部分も、特許請求の範囲に明確に記載されていない限り、特許請求の範囲をタスク、スレッド、タスク並列プログラミング、または任意の他のシステムもしくは技術に限定するために使用されるべきではない。
【００１５】
概して、様々な実施形態は、速い応答時間、高いパフォーマンス、および高いユーザインターフェース応答性を実現する目的でアプリケーションプログラムを生成し実行するために現代のマルチプロセッサアーキテクチャによって可能にされる並行性および並列性を利用する方法、および方法を実行するように構成されたコンピューティングデバイスを含む。コンピューティングデバイス(たとえば、モバイルコンピューティングデバイスなど)は、タスクのシーケンスを生成し実行し、タスク依存性コントローラを使用して、あるタスクから別のタスクへの制御フローの移転を加速させるように構成され得る。タスク依存性コントローラは、ハードウェアにおいて実装され、デバイスの複数のコアおよび/またはプロセッサによって共有され得る。一実施形態では、デバイスプロセッサおよび/またはタスク依存性コントローラは、タスクのシーケンスを識別し、ハードウェアベースのテーブルに先行タスク、後続タスク、および後続タスクのプログラムカウンタをそれぞれ識別する記録を追加し、識別されたシーケンスにおける各タスクが、その先行タスクが実行を終えた後に自動的に実行される(すなわち、ランタイムシステムに制御を移転することなく)ように、選択されたレジスタ(たとえば、プログラムカウンタ、専用プロセッサフロントエンドレジスタなど)の値を設定するように構成され得る。したがって、タスク依存性コントローラは、ランタイムシステムから独立した異なるプロセッサ/コア上で実行されているタスクの間で、かつ/または従来のソリューションが必要とする比較的遅い、メモリベースのタスク間、スレッド間もしくはプロセス間の通信を実行することなく、制御を移転するために使用され得る。
【００１６】
言い換えれば、タスク依存性コントローラは、タスクのシーケンスをスケジュール、実行、実施、および/または管理するための標準的または従来の動作をコンピューティングデバイスが控えることを可能にする。結果として、様々な実施形態に従ってタスク依存性コントローラおよびハードウェアベースのテーブルを実装し使用することは、タスクのシーケンスを並列に実行することに関連するパフォーマンスレイテンシを減らし、不正確な分岐予測から生じる命令キャッシュ汚染(instruction cache pollution)を低減もしくは除去し、不正確に予測された制御フロー移転に起因してフェッチされる命令を待っている間にプロセッサパイプラインにおいて浪費されるプロセッサもしくはCPUのサイクルを除去し、かつ/またはコンピューティングデバイスが不正確に予測された制御フロー経路のための動作を実行するのを回避することを可能にする。これらおよび他の理由により、様々な実施形態に従って構成されたコンピューティングデバイスにタスク依存性コントローラおよびハードウェアベースのテーブルを含めて使用することは、デバイスの効率性、パフォーマンス、および電力消費特性を改善する。
【００１７】
様々な実施形態は、上記で説明した理由により、コンピューティングデバイスの作用を改善する。コンピューティングデバイスの機能、機能性、および/または作用に対する追加の改善は、下で提供される実施形態の詳細な説明から明らかになろう。
【００１８】
「コンピューティングシステム」および「コンピューティングデバイス」という用語は、本明細書では総称的に、サーバ、パーソナルコンピュータ、ならびに、携帯電話、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、ウルトラブック、パームトップコンピュータ、携帯情報端末(PDA)、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、全地球測位システム(GPS)受信機、ワイヤレスゲームコントローラ、および、プログラマブルプロセッサを含む同様の個人用電子デバイスのような、モバイルコンピューティングデバイスの、いずれか1つまたはすべてを指すために使用される。様々な実施形態は、処理電力とバッテリー寿命とが限られたスマートフォンなどのモバイルコンピューティングデバイスに特に有用であるが、これらの実施形態は、概して、プログラマブルプロセッサを含む任意のコンピューティングデバイスにおいて有用である。
【００１９】
「システムオンチップ」(SOC)という用語は、本明細書では、単一の基板上に統合された複数のリソースおよび/またはプロセッサを含む単一の集積回路(IC)チップを指すために使用される。単一のSOCは、デジタル、アナログ、混合信号、および無線周波数機能のための回路を含んでもよい。単一のSOCは、任意の数の汎用および/または専用のプロセッサ(デジタル信号プロセッサ、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、Flashなど)、およびリソース(たとえば、タイマー、電圧調整器、発振器など)も含んでもよい。SOCはまた、統合されたリソースおよびプロセッサを制御するための、また周辺デバイスを制御するためのソフトウェアを含んでもよい。
【００２０】
「システムインパッケージ」(SIP)という用語は、本明細書では、2つ以上のICチップまたは基板上に複数のリソース、演算ユニット、コアおよび/またはプロセッサを含む単一のモジュールまたはパッケージを指すために使用され得る。たとえば、SIPは単一の基板を含み、その上に、複数のICチップまたは半導体ダイが垂直構成で積み重ねられる。同様に、SIPは1つまたは複数の多重チップモジュール(MCM)を含み、その上に、複数のICまたは半導体ダイが単一化基板(unifying substrate)にパッケージ化される。SIPはまた、単一のマザーボード上または単一のモバイルコンピューティングデバイス内などで、高速通信回路を介してともに結合され、極めて近接してパッケージ化された複数の独立したSOCを含み得る。SOCが近接していることで、高速通信ならびにメモリおよびリソースの共有が容易になる。
【００２１】
「マルチコアプロセッサ」という用語は、本明細書では、プログラム命令を読み取り、実行するように構成された2つ以上の独立した処理コア(たとえば、CPUコア、IPコア、GPUコアなど)を含む単一の集積回路(IC)チップまたはチップパッケージを指すために使用される。SOCは、複数のマルチコアプロセッサを含み得、SOCにおける各プロセッサは、コアと呼ばれ得る。「マルチプロセッサ」という用語は、本明細書では、プログラム命令を読み取り、実行するように構成された2つ以上の処理ユニットを含むシステムまたはデバイスを指すために使用される。
【００２２】
「プログラムカウンタ」、「命令ポインタ」、および「命令アドレスレジスタ」という用語は、本明細書では互換的に使用され得、次の実行命令のメモリアドレスを識別するためにプロセッサによって使用されるレジスタの値を指すために使用される。言い換えれば、プログラムカウンタは、プロセッサによって実行されるべき次の命令を「指す」。命令は通常、メモリから順次フェッチされ、プログラムカウンタは、各フェッチ動作の後に増分される。「制御移転」命令はこのシーケンスを、次の命令が異なるメモリロケーションからフェッチされるようにレジスタに新しい値(すなわち、新しいメモリロケーション)を挿入することによって変更する。
【００２３】
「ランタイムシステム」という用語は、本明細書では、コンピューティングデバイスにおけるアプリケーションプログラムの実行をサポートするそのデバイスにおけるリソースの組合せを指すために使用される。たとえば、ランタイムシステムは、コンピューティングデバイスの処理リソース、オペレーティングシステム、ライブラリモジュール、スケジューラ、プロセス、スレッド、スタック、カウンタ、および/または他の同様の構成要素のすべてまたは部分を含み得る。ランタイムシステムは、アプリケーションプログラムに計算リソースを割り振ること、割り振られたリソースを制御すること、およびアプリケーションプログラムの動作を実行することを担当し得る。
【００２４】
並列プログラミングランタイムシステムは、1つまたは複数のアプリケーションプログラムのすべてまたは部分の並行/並列実行をサポートするランタイムシステムである。現代の並列プログラミングランタイムシステムは、現代のプロセッサアーキテクチャの並行および/または並列能力をより良好に利用する高性能の並列アプリケーションプログラムをソフトウェア設計者が作成することを可能にする。ソフトウェア設計者は、並列プログラミングランタイムシステムによって(プログラマー指定のC/C++関数などの)実行されるべきアプリケーションプログラムの部分を指定し得る。ランタイムシステムは、プロセス、スレッド、またはタスクを介して1つまたは複数のハードウェア処理ユニット(たとえば、プロセッサ、処理コアなど)における部分を実行または実施し得る。
【００２５】
プロセスは、コンピューティングデバイスにおけるアプリケーションプログラムのソフトウェア表現であり得る。プロセスは、シングルコアプロセッサなど、(たとえば、時分割多重化技法を使用することによって)同じプロセッサ上で複数のアプリケーションプログラムが同時に実行されているように見えるように、ショートタイムスライスにおいてプロセッサ上で実行され得る。プロセスがタイムスライスの終わりにおいてプロセッサから除去されると、プロセスの現在の動作状態に関する情報(たとえば、プロセスの動作状態データ)がメモリに記憶されるので、プロセスは、プロセッサ上での実行に戻るときに、シームレスに動作を再開することができる。
【００２６】
プロセスの動作状態データは、プロセスのアドレス空間、スタック空間、仮想アドレス空間、レジスタセットイメージ(たとえば、プログラムカウンタ、スタックポインタ、命令レジスタ、プログラムステータス語など)、アカウンティング情報、許可、アクセス制限、および状態情報を含んでもよい。状態情報は、プロセスが実行状態にあるか、準備または実行準備状態にあるか、それともブロック状態にあるかを識別し得る。プロセスは、その依存性または実行のための必須条件のすべてが満たされており(たとえば、メモリおよびリソースが利用可能であるなど)、次の利用可能な処理ユニットに割り当てられるのを待っているとき、実行準備状態にある。プロセスは、そのプロシージャが処理ユニットによって実行されているとき、実行状態にある。プロセスは、イベント(たとえば、入出力完了イベントなど)の発生を待っているとき、ブロック状態にある。
【００２７】
プロセスは他のプロセスをスポーンすることがあり、スポーンされたプロセス(すなわち、子プロセス)は、スポーンしたプロセス(すなわち、親プロセス)の許可およびアクセス制限(すなわち、コンテキスト)の一部を受け継ぐことがある。プロセスは、複数の軽量のプロセスまたはスレッドを含む重量のプロセスであってよく、軽量のプロセスは、そのコンテキスト(たとえば、アドレス空間、スタック、許可、および/またはアクセス制限など)のすべてまたは部分を他のプロセス/スレッドと共有するプロセスである。したがって、単一のプロセスは、単一のコンテキスト(たとえば、プロセッサ、プロセス、もしくはアプリケーションプログラムのコンテキスト)を共有する、それへのアクセス権を有する、かつ/またはその中で動作する、複数のスレッドを含み得る。
【００２８】
マルチプロセッサシステムは、プロセスの全体の実行時間を改善するために並行してまたは並列に複数のスレッドを実行するように構成され得る。さらに、コンピューティングシステムにおけるアプリケーションプログラム、オペレーティングシステム、ランタイムシステム、スケジューラ、または別の構成要素は、様々な因子または考慮事項に基づいてスレッドを作成、破棄、維持、管理、スケジュール、または実行するように構成され得る。たとえば、並列性を改善するために、システムは、別の動作のシーケンスと並行して実行され得るあらゆる動作のシーケンスのためのスレッドを作成するように構成され得る。
【００２９】
多数のアイドルスレッドを維持し、または新しいスレッドを頻繁に破棄し作成するアプリケーションプログラムは、コンピューティングシステムの応答性、パフォーマンス、または電力消費特性に著しい悪影響またはユーザが知覚できる影響を与えることが多い。したがって、アプリケーションプログラムは、多数のスレッドの作成または維持を必要とすることなく十分なレベルの並列性をもたらすタスク並列プログラミングモデルまたはソリューションを実装または使用し得る。そのようなソリューションは、コンピューティングシステムが、アプリケーションプログラムの計算をタスクに分割し、ほぼ一定の数のスレッド(たとえば、処理ユニットごとに1つ)を維持するスレッドプールにタスクを割り当て、割り当てられたタスクをスレッドプールのスレッドを介して実行することを可能にする。コンピューティングシステムのプロセススケジューラまたはランタイムシステムは、プロセスおよびスレッドが実行のためにスケジュールされ得る方法と同様に、タスクを処理ユニット上での実行のためにスケジュールし得る。
【００３０】
タスクは、スレッドを介して処理ユニットにおいて実行され得る任意のプロシージャ、作業単位、または動作のシーケンスを含み得る。タスクは、タスクが立ち上げられたか、準備されたか、ブロックされたか、それとも終わったかを識別する状態情報を含み得る。タスクがスレッドプールに割り当てられており、先行タスクが実行を終えること、および/または他の依存性もしくは実行のための必須条件が満たされることを待っているとき、タスクは立ち上げ状態にある。その依存性または実行のための必須条件のすべてが満たされており(たとえば、その先行タスクのすべてが実行を終えており)、次の利用可能なスレッドに割り当てられるのを待っているとき、タスクは準備状態にある。タスク(またはその関連スレッド)が、依存性が解決されること、リソースが利用可能になること、システムコールがリターンすること、システム要求に対応する応答などを待っているとき、タスクはブロック状態にある。タスクのプロシージャがスレッドによって実行された後、またはキャンセルされた後、タスクは終了とマークされ得る。
【００３１】
タスクは、他のタスクに依存することがあり、各タスクは、それが依存するタスク(先行タスク)のすべてが実行を終えるとすぐに実行できる。たとえば、タスクCがタスクAおよびBに依存する場合、タスクCは、タスクAおよびBが実行を終えるとすぐに「準備」状態に入り得る。次いで、ランタイムシステムまたはタスクスケジューラは、次の利用可能なスレッドを、実行の準備ができた次のタスク(この場合はタスクC)に割り当て得る。
【００３２】
多くの場合、シーケンス中の各タスクがたった1つの先行タスクに依存する、タスクのシーケンス(またはチェーン)がある。たとえば、タスクCは、タスクBのみに依存することがあり、タスクBはタスクAにのみ依存することがある。ランタイムシステムは、このタスクのチェーンを、複雑なスケジューリング動作を実行することなく順次(すなわち、A→B→C)実行することができる。すなわち、タスクBはタスクAにのみ依存するので、デバイスプロセッサは、システムに不適切に機能させることなく、タスクAが実行を終えた直後にタスクBのプロシージャの実行を自動的に開始することができる。
【００３３】
図1は、コンピューティングデバイスにおいてタスクA、B、およびCのシーケンスを実行するための従来技術の方法100を示す。ブロック102において、コンピューティングデバイスの処理コアは、タスクAのプロシージャを完了まで(すなわち、タスクAが「終了」とマークされるまで)実行し得る。ブロック104において、コンピューティングデバイスのランタイムシステムは、タスクBの依存性が解決されているかどうかを判断することを含み得る、様々なスケジューリングまたは制御フローの移転の動作を実行し得る。ブロック106において、処理コアは、タスクBのプロシージャを完了まで実行し得る。ブロック108において、ランタイムシステムは、タスクCの依存性が解決されているかどうかを判断することなど、追加のスケジューリングまたは制御フローの移転の動作を実行し得る。ブロック110において、処理コアは、タスクCのプロシージャを完了まで実行し得る。
【００３４】
従来のソリューションは、タスクのシーケンスまたはチェーンを知的に識別せず、結果として、タスクが実行を開始するまたは終えるたびに、いくつかの比較的複雑で電力負荷の大きいスケジューリングおよび「制御フローの移転」の動作を実行する必要がある。たとえば、通常動作中に、従来のランタイムシステムは、タスクAを立ち上げ、タスクAのプロシージャの実行を開始し、タスクAが実行を終えたと判断し、タスクBをロードし、(たとえば、タスクBの先行タスクのすべてが実行を終えているかどうかを判断することなどによって)タスクBの依存性が解決済みかどうかを判断し、その依存性が解決済みとの判断に応答して、タスクを「準備」とマークし、準備キューにタスクBを追加し、準備キューにおける次のタスクを実行するためにスレッドを割り当てることができる。これらの動作は、複数の、または複雑なタスク依存性があるときには必要であり得るが、上述したタスクのシーケンスまたはチェーンのためにこれらの動作を実行することは、コンピューティングデバイスのメモリ、バッテリー、およびプロセッサリソースの非効率的な使用である。
【００３５】
図2は、コンピューティングデバイスにおいてタスクAおよびBを実行する従来技術の方法200を示す。図2に示す例では、タスクAは、時間1にコンピューティングデバイスの処理コアを介したそのプロシージャの実行を開始する。時間5にタスクAは、そのプロシージャの実行を終え、コンピューティングデバイスのランタイムコントローラに第1の信号(S1)を送る。ランタイムコントローラは、コンピューティングデバイスのランタイムシステムの一部であり、タスク依存性が解決されているかどうかを判断することを担当し得る。第1の信号(S1)は、タスクidと、タスクAの実行が終わっていることを示すメッセージとを含み得る。第1の信号(およびそのメッセージ)を受信したことに応答して、ランタイムコントローラは、第1の計算(C1)を実行し、第1の計算(C1)を使用して、タスクAがその実行を終えた結果として準備状態に入ったタスクを識別し、コアにおいて実行に最も適した準備タスクを識別することができる。図示の例では、ランタイムコントローラは、タスクBを、コアにおいて実行に最も適したタスクであると識別する。
【００３６】
タスクBを処理コアにおいて実行に最も適していると識別したことに応答して、ランタイムコントローラは、処理コアに第2の信号(S2)を送り得る。第2の信号(S2)は、タスクidと、タスクBに関連するプログラムカウンタとを含み得る。時間7にタスクBは、コンピューティングデバイスの処理コアを介したそのプロシージャの実行を開始する。時間9にタスクBは、そのプロシージャの実行を終える。
【００３７】
コアによる信号S1の開始から信号S2の受信までの往復レイテンシ(すなわち、時間5から時間7の間の期間)は、コアのパフォーマンスを低下させる実行オーバーヘッドとなる。この往復レイテンシに加えて、方法200は、上記で説明した理由(たとえば、CPUサイクルの浪費、命令キャッシュ汚染など)のいずれかまたはすべてにより、パフォーマンスおよび電力消費特性に悪影響を与え得る。
【００３８】
様々な実施形態は、各タスクが1つの先行タスクに依存し、かつ/または1つの依存後続タスクを有するタスクのチェーンを知的に識別し、識別されたチェーンに含まれるタスクを実行するときに、スケジューリングまたは「制御フローの移転」の動作を実行するのを控えるようにコンピューティングデバイスを構成することによって、既存のソリューションの限界を克服する。これは、チェーンにおけるタスク間の(たとえば、タスクAからタスクBへの)制御フローの移転を加速させ、結果として、コンピューティングデバイスにおけるタスク並列プログラムを実行するパフォーマンスおよびエネルギー効率性を改善する。これはまた、アプリケーションプログラムをより速く、より効率的に実行することを可能にすることによって、コンピューティングデバイスの作用を改善する。
【００３９】
図3は、様々な実施形態に従って構成されたコンピューティングデバイスにおいてタスク(すなわち、タスクA、B、およびC)のシーケンスを実行する方法300を示す。ブロック302において、コンピューティングデバイスの処理コアは、タスクAのプロシージャを完了まで実行し得る。タスクAが終了とマークされたほぼ直後に、処理コアは、ブロック304においてタスクBのプロシージャの実行を開始し得る。これは、比較的複雑で電力負荷の大きいスケジューリングおよび/または制御フローの移転の動作(たとえば、図1に示すブロック104の動作など)を実行することなく達成され得る。同様に、ブロック306において、処理コアは、タスクBが終了とマークされたほぼ直後に、タスクCのプロシージャの実行を開始し得る。ランタイムシステムのスケジューリングおよび制御の移転の動作(たとえば、図1に示すブロック104および108の動作)を除去することによって、様々な実施形態は、コンピューティングデバイスのパフォーマンスおよび電力消費特性を改善する。
【００４０】
さらなる例として、タスクのチェーンA→B→...→Y→Zを考える。実施形態のコンピューティングデバイスは、次のようにタスクのフローを制御することができる。
start_pc(A)→...end_pc(A)→
start_pc(B)→...end_pc(B)→
...
start_pc(Y)→...end_pc(Y)→
start_pc(Z)→...end_pc(Z)
【００４１】
すなわち、実施形態のコンピューティングデバイスは、ランタイムシステムが各後続タスクを、その先行タスクが実行を終えた直後に実行するように、シーケンス(A→B→...→Y→Z)におけるタスクごとに開始プログラムカウンタ(start_pc)および終了プログラムカウンタ(end_pc)の値を設定することができる。タスクの依存性が解決されているかどうかをタスクランタイムシステムが判断することなく、制御はあるタスクから別のタスクに流れる。これは、コンピューティングデバイスのパフォーマンスおよび電力消費特性を改善する。
【００４２】
一実施形態では、コンピューティングデバイスは、ハードウェアベースのタスク依存性コントローラ(TDC)を備えてよく、コンピューティングデバイスの命令セットアーキテクチャ(ISA)は、ソフトウェアアプリケーションがタスク依存性コントローラと通信できるように変更されてよい。たとえば、コンピューティングデバイスの命令セットアーキテクチャは、以下の命令をサポートするように変更され得る。
(I1)id=task_get_id
//一意のidを返す
(I2)success=task_add_dep id_a,id_b,B.pc
//タスクBにタスクAに関して
//依存性が追加されていることをTDCに通知し、
//タスクBにおける第1の命令のプログラムカウンタを登録する。随意に、タスク
//依存性が正常に追加されたかどうかを示す値を返す
(I3)task_start id
//指定されたidを有するタスクが実行を開始したことを通知する
(I4)task_finish id
//指定されたidを有するタスクが実行を終えたことを通知し、
//idを割振り解除する
【００４３】
一実施形態では、タスク依存性コントローラはハードウェアベースのテーブルを含むことができ、ハードウェアベースのテーブルは、タスク識別子(「タスクid」)を生成し、定義し、割り当てるためにランタイムシステムがハードウェアを使用するか、それともソフトウェアを使用するかに基づいて、連想マップ構造またはダイレクトマップ構造として実装され得る。たとえば、ハードウェアテーブルは、ハードウェアを介してタスクidを定義するコンピューティングシステムにおける連想マップ構造またはダイレクトマップ構造として、またソフトウェアを介してタスクidを定義するコンピューティングシステムにおける連想マップ構造として実装され得る。
【００４４】
連想マップテーブルは、次のように定義され得る。
TABLE 1(連想マップ)
(C1)VALID//このエントリは有効であるか?
(C2)PRED//A→Bの場合のタスクAのid
(C3)SUCC//A→Bの場合のタスクBのid
(C4)SUCC_PC//A→Bの場合のタスクBのプログラムカウンタ
【００４５】
上記の例では、TABLE 1は、有効性パラメータ(たとえば、VALID)、先行パラメータ(たとえば、PRED)、後続パラメータ(たとえば、SUCC)、および後続プログラムカウンタパラメータ(たとえば、SUCC_PC)を含む。有効性パラメータ(たとえば、VALID)は、記録が有効であるかどうかを示す2進値またはブール値を含み得る。先行パラメータ(たとえば、PRED)は、先行タスクを識別する値を含み得る。後続パラメータ(たとえば、SUCC)は、後続タスクを識別する値を含み得る。後続プログラムカウンタパラメータ(たとえば、SUCC_PC)は、後続タスクの開始命令(たとえば、後続タスクを立ち上げる、後続タスクのプロシージャの実行を開始する、などのための命令)を含むロケーションまたはレジスタを識別する値を含み得る。
【００４６】
代替的に、タスク依存性コントローラは、ハードウェアテーブルをダイレクトマップとして実装し、先行タスクの「タスクid」を、ダイレクトマップへのインデックスとして使用することができる。たとえば、タスク依存性コントローラは、次のように定義されたハードウェアテーブルを含み得る。
TABLE 2(ダイレクトマップ)
(C1)VALID//このエントリは有効であるか?
(C2)SUCC//A→Bの場合のタスクBのid
(C3)SUCC_PC//A→Bの場合のタスクBのプログラムカウンタ
アクセスマップエントリへの行インデックス//A→Bの場合のタスクAのid
【００４７】
コンピューティングデバイスのアプリケーション開発者またはコンパイラは、いずれかまたはすべての上述の命令セットアーキテクチャ命令(たとえば、命令I1〜I4)を、タスク並列プログラミングモデルを実装するソフトウェアアプリケーションの実行経路に挿入することができる。そのようなソフトウェアアプリケーションは、以下の例示的なソースコードを含むことができる。
(1)→A=create_task([]
{id_a=getid();task_start id_a;...task_finish id_a;})
(2)→B=create_task([]
{id_b=getid();task_start id_b;...task_finish id_b;})
(3)→C=create_task([]
{id_c=getid();task_start id_c;...task_finish id_c;})
(4)add_dependence(A,B)
(5)A.id=task_get_id
(6)B.id=task_get_id
(7)task_add_dep A.id,B.id,B.pc
(8)add_dependence(A,B)
(9)C.id=task_get_id
(10)task_add_dep B.id,C.id,C.pc
(11)launch(C)
(12)launch(B)
(13)launch(A)
【００４８】
上記の例を参照すると、デバイスプロセッサが動作7(すなわち、「task_add_dep A.id,B.id,B.pc」)を実行するとき、タスク依存性コントローラは、その依存関係に関してテーブル(たとえば、Table 1)の記録を生成し、追加し、または割り振る。そのような記録は、先行タスクの識別子(すなわち、「PRED=id_a」)、後続タスクの識別子(すなわち、「SUCC=id_b」)、および後続タスクの第1の命令のメモリロケーション(すなわち、「SUCC_PC=B.pc」または「SUCC_PC=0xd00b105」)を含み得る。
【００４９】
デバイスプロセッサがタスク(たとえば、タスクA)を立ち上げるために動作I3(すなわち、task_start id)を実行するとき、タスク依存性コントローラは、そのタスクを先行タスクと識別する(すなわち、「PRED=id_a」)記録を求めてテーブルに照会する。次いで、タスク依存性コントローラは、命令プリフェッチャおよび/または分岐予測子に、プログラムカウンタパラメータ(SUCC_PC)によって識別されたロケーション/命令に分岐する(または当該ロケーション/命令への「制御移転」を実行する)意向を知らせることができる。これによりプロセッサは、現在のタスク(たとえば、タスクA)のプロシージャを完了させた後に後続タスク(たとえば、タスクB)を実行することになる。
【００５０】
別の実施形態では、プロセッサフロントエンドにおけるレジスタに後続プログラムカウンタパラメータ(SUCC_PC)の値が書き込まれ得、その結果、命令I4(すなわち、task_finish id)が実行または実施されたときに、そのレジスタによって識別されたロケーションに制御フローが直接ジャンプするようになる。一実施形態では、コンピューティングデバイスは、これらの目的のために(たとえば、後続タスクに関連するメモリ/命令ロケーションへの制御フローの直接ジャンプのために)明示的かつ明白に使用されるレジスタを備え得る。
【００５１】
タスクBが複数の先行タスクを有する(たとえば、A→BおよびD→B)場合、デバイスプロセッサがタスクAのための命令I4(すなわち、task_finish id)を実行した後にタスクBの実行を開始することが動作上正しくないことがある。これは、命令I4(すなわち、task_finish id)が実行されたときに実行を終えていないことがある他のタスク(たとえば、タスクD)にタスクBが依存するためである。これを克服するために、(たとえば、命令I2を介して)テーブルに依存関係が追加されたとき、タスク依存性コントローラは、記録のうちのいずれかが現在のタスク(たとえば、タスクB)を後続タスクと識別する(たとえば、「SUCC=id_b」)かどうかを判断するために、テーブルに照会することができる。現在のタスクを後続タスクと識別する(たとえば、「SUCC=id_b」)記録をテーブルが含むとの判断に応答して、タスク依存性コントローラは、ハードウェアテーブルから記録を削除すること、および/またはその記録に関する有効性パラメータの値を「偽」(たとえば、「VALID=0」)に設定することができる。
【００５２】
同様に、タスクAが複数の後続タスクを有する(たとえば、A→BおよびA→D)場合、命令I4(すなわち、task_finish id)が実行された後にこれらの後続タスクのすべてが実行を開始し得るとシグナリングすることが動作上正しくないことがある。これを克服するために、(たとえば、命令I2を介して)テーブルに依存関係が追加されたとき、タスク依存性コントローラは、記録のうちのいずれかが現在のタスクをその先行タスクと識別する(たとえば、「PRED=id_a」)かどうかを判断するために、テーブルに照会することができる。現在のタスクを先行タスクと識別する(たとえば、「PRED=id_a」)記録をテーブルが含むとの判断に応答して、タスク依存性コントローラは、ハードウェアテーブルから記録を削除すること、および/またはその記録に関する有効性パラメータの値を「偽」(たとえば、「VALID=0」)に設定することができる。
【００５３】
上記の動作を実行することによって、コンピューティングデバイスは、各タスクが単一の後続タスクおよび/または単一の先行タスクを含むかどうかを判断することによって、タスクのチェーンを識別することができる。これによりコンピューティングデバイスは、タスクのチェーンを順次実行し、タスク間で制御を移転するときに従来の動作を実行するのを控えるべきかどうかを知的に判断することができる。言い換えれば、コンピューティングデバイスは、第1のタスク(たとえば、タスクA)および第2のタスク(たとえば、タスクB)がタスクのシーケンスまたはチェーンに属するときに第1のタスクから第2のタスクに移行するときに制御フローを「避ける(short-circuit)」ことができ、第1のタスクおよび第2のタスクが同じタスクのシーケンスまたはチェーンに属さないときに従来のソリューションを使用することができる。これは、ソフトウェアアプリケーションの正しい動作を保証し、コンピューティングデバイスのパフォーマンスおよび電力消費特性を改善する。
【００５４】
複数の処理コアによって共有されるハードウェアにおいて実装されたタスク依存性コントローラおよびハードウェアベースのテーブル(たとえば、ハードウェアを介して実装されるテーブルまたはマップ構造)を使用することによって、コンピューティングデバイスは、パフォーマンスおよびタスク依存性コントローラへの照会の効率性を(すなわち、タスク依存性コントローラが主に、システムのコアのうちの1つで実行されているランタイムコードの一部であり、異なるコアで実行されているタスクが共有メモリを介して通信することを必要とする従来のソリューションと比較して)改善することができる。
【００５５】
図4は、一実施形態による、コンピューティングデバイスにおいてタスクAおよびBを実行する方法400を示す。図4に示す例では、タスクAは、時間1にコンピューティングデバイスの処理コアを介したそのプロシージャの実行を開始する。また、時間1にタスクAは、タスク依存性コントローラに信号(S3)を送る。この信号(S3)は、タスクidと、タスクAがそのプロシージャの実行を開始したことを示すメッセージ(たとえば、単一ビットなど)とを含み得る。信号(S3)を送った後、コアは、タスク依存性コントローラからの応答を待つことなく、タスクAのプロシージャの実行を続けることができる。
【００５６】
信号S3を受信したことに応答して、タスク依存性コントローラは、ハードウェアテーブルにおけるルックアップなどの低減された計算(C2)を実行して、コアによって実行されるべき次のタスクのプログラムカウンタを判断することができる。タスク依存性コントローラは、処理コアにおけるタスクAの実行と並行してまたは並列に、低減された計算C2を実行することができる。
【００５７】
低減された計算C2を実行した後、タスク依存性コントローラは、コア(またはコンピューティングデバイスにおける別のプロセッサもしくはコア)に別の信号(S4)を送り得る。信号S4は、プログラムカウンタ(たとえば、ハードウェアテーブルを介して識別された値)を含み得る。コンピューティングデバイスは、コアがタスクAの実行を続ける間、かつ/またはタスクAのプロシージャのパフォーマンスに重大な影響もしくは悪影響を与えることなく、コアにおける「リンクレジスタ」にプログラムカウンタ値を書き込むことができる。
【００５８】
したがって、図4に示す例では、信号S3およびS4が生成、処理、および通信され得、タスクAのプロシージャのパフォーマンスに重大な影響または悪影響を与えることなく、低減された計算C2が実行され得る。結果として、方法400は、コアによって実行される動作のレイテンシを低減する。さらに、コアがタスクAを終える時間までに、コアはすでに、リンクレジスタにおいて入手可能なタスクBにおける第1の命令のプログラムカウンタを有する。これにより制御フローは、タスクBに自然に戻ることができ、タスクBはその実行を、タスクAがその実行を終えたほぼ直後に開始することができる。結果として、タスクBは(図2に示す方法200を実行したときの時間9とは対照的に)時間7にその実行を終える。
【００５９】
図5および図6は、それぞれ、単一のリンクレジスタおよびリンクアレイを使用するように構成されたコンピューティングデバイスにおいてタスクAおよびBを実行する実施形態方法500、600を示す。リンクアレイは、複数のリンクレジスタを含むことができ、依存タスクのチェーンA→B→C→Dを加速させるために必要とされるシグナリングの量を減らし、タスク依存性コントローラが、タスクが実際に実行を終えるはるか前に、チェーン全体を処理した後にその電力を落とすことを可能にし得る。図5に示すように、タスクAが実行を開始したという信号をタスク依存性コントローラが受信したとき、タスク依存性コントローラは、ハードウェアテーブルにおける一連のルックアップを実行して、タスクB、C、Dの次のシーケンスの開始プログラムカウンタを識別する。次いで、後続チェーンと識別したタスクのプログラムカウンタを、順にリンクアレイに書き込む。これらの動作を実行した後、タスク依存性コントローラは、電力を節約するためにスリープすることができる。一方、図6に示す例では、次のタスクが実行を開始した(たとえば、B開始、C開始など)ときには、これらのタスクへの制御フローの移転が、制御を移転するためのリンクアレイ値の使用によって示されているようにタスク依存性コントローラによってすでに最適化されているので、コアはタスク依存性コントローラに信号を送らない。タスクDが実行を開始したとき、コアはタスク依存性コントローラに信号を送り、タスク依存性コントローラは信号によってウェイクアップする。
【００６０】
図7は、一実施形態による、タスクを実行する方法700を示す。ブロック702において、コンピューティングデバイスのプロセッサは、コンピューティングデバイスのハードウェアベースのタスク依存性コントローラを介してタスクのシーケンスを識別し得る。ブロック704において、プロセッサは、シーケンスにおける第1のタスクの実行を開始し得る。ブロック706において、プロセッサは、ランタイムシステムに制御を移転することなく、シーケンスにおける各タスクが、その先行タスクが実行を終えた後に実行されるように、レジスタ(たとえば、プログラムカウンタ)の値を設定し得る。一実施形態では、プロセッサは、706の動作の後にブロック704の動作を実行するように構成され得る。
【００６１】
図8は、コンピューティングデバイスのタスク依存性コントローラによって維持されるテーブルに依存関係を追加する方法800を示す。ブロック802において、コンピューティングデバイスのタスク依存性コントローラは、2つのタスクの間の依存関係を識別するために、テーブルの記録を生成し、追加し、かつ/または割り振ることができる。記録は、先行タスク、後続タスク、および後続タスクのプログラムカウンタを識別し得る。ブロック804において、タスク依存性コントローラは、タスクのうちの1つまたは複数が複数の先行タスクまたは複数の後続タスクを有するかどうかを判断するために、テーブルを検討(traverse)し得る。ブロック806において、タスク依存性コントローラは、タスクが複数の先行タスクまたは複数の後続タスクを有するとの判断に応答して、テーブルから記録を削除し得る。
【００６２】
図9は、タスク並列プログラミングモデルを実装するアプリケーションプログラムを実行するように、かつ/または様々な実施形態に従ってタスクを実行するように構成されたコンピューティングデバイスに含まれ得る例示的なシステムオンチップ(SOC)900のアーキテクチャを示す。SOC900は、デジタル信号プロセッサ(DSP)902、モデムプロセッサ904、グラフィックスプロセッサ906、およびアプリケーションプロセッサ908などの、いくつかの異種プロセッサを含んでもよい。SOC900はまた、異種プロセッサ902、904、906、908のうちの1つまたは複数に接続された1つまたは複数のコプロセッサ910(たとえば、ベクトルコプロセッサ)を含んでもよい。一実施形態では、グラフィックスプロセッサ906は、グラフィックス処理ユニット(GPU)であり得る。
【００６３】
各プロセッサ902、904、906、908、910は、1つまたは複数のコア(たとえば、アプリケーションプロセッサ908内に示された処理コア908a、908b、908c、および908d)を含んでよく、各プロセッサ/コアは、他のプロセッサ/コアとは無関係に動作を実行することができる。SOC900は、実行のために1つまたは複数の処理コアに対して、スレッド、プロセス、またはデータフローなど、命令のシーケンスをスケジュールするように構成されたスケジューラを含み得るオペレーティングシステム(たとえば、FreeBSD、LINUX、OS X、Microsoft Windows 10など)を実行するプロセッサを含み得る。一実施形態では、アプリケーションプロセッサ908は、中央処理装置(CPU)であり得る。
【００６４】
SOC900はまた、ハードウェアにおいて実装されたハードウェアベースのタスク依存性コントローラ930およびハードウェアベースのテーブル932を含んでもよい。ハードウェアベースのタスク依存性コントローラ930は、複数のコア(たとえば、アプリケーションプロセッサ908内に示された処理コア908a、908b、908c、および908d)によって、かつ/または複数のプロセッサ902、904、906、908、910によって共有され得る。いくつかの実施形態では、ハードウェアベースのタスク依存性コントローラ930および/またはハードウェアベースのテーブル932は、ブール関数を実装するように構成または配置された1つまたは複数の電界効果トランジスタ(FET)を通常含む論理ゲート(たとえば、NAND、AND、OR、XOR、AOI、OAIなど)を使用して実装され得る。ハードウェアベースのタスク依存性コントローラ930および/またはハードウェアベースのテーブル932はまた、リレー、バルブ、トランジスタ、マルチプレクサ、レジスタ、メモリ、算術論理演算ユニット(ALU: arithmetic logic unit)、プロセッサなど、様々なハードウェア構成要素を含む論理回路を使用して実装され得る。
【００６５】
タスク依存性コントローラ930は、識別されたタスクのシーケンスをスケジュールするための標準的動作を、複数のコア上で並列にタスクのシーケンスを実行することに関連するパフォーマンスレイテンシを減らす目的で控えるために使用され得る。たとえば、タスク依存性コントローラ930は、タスクのシーケンスを識別し、ハードウェアベースのテーブル932に先行タスク、後続タスク、および後続タスクのプログラムカウンタをそれぞれ識別する記録を追加し、識別されたシーケンスにおける各タスクが、その先行タスクが実行を終えた後に自動的に実行される(すなわち、ランタイムシステムに制御を移転することなく)ように、選択されたレジスタ(たとえば、プログラムカウンタ、専用プロセッサフロントエンドレジスタなど)の値を設定することができる。これは、従来のソリューションがランタイムシステムを介して実行する命令の一部を除去することによって、SOC900の効率性、パフォーマンス、および電力消費特性を改善する。たとえば、タスク依存性コントローラ930は、従来のソリューションが必要とする比較的遅い、メモリベースのタスク間、スレッド間またはプロセス間の通信を実行することなく、異なるプロセッサ/コア上で実行されているタスクの間で制御を移転するために使用され得る。
【００６６】
SOC900はまた、センサーデータ、アナログデジタル変換、ワイヤレスデータ送信を管理し、ウェブブラウザにおいてレンダリングするための符号化されたオーディオ信号およびビデオ信号の処理のような、他の特殊な動作を実行するための、アナログ回路およびカスタム回路914を含んでもよい。SOC900は、電圧調整器、発振器、位相ロックループ、周辺ブリッジ、データコントローラ、メモリコントローラ、システムコントローラ、アクセスポート、タイマー、ならびにプロセッサおよびコンピューティングデバイス上で実行されているソフトウェアプログラムをサポートするために使用される他の同様の構成要素のような、システム構成要素およびリソース916をさらに含んでもよい。
【００６７】
システム構成要素およびリソース916および/またはカスタム回路914は、カメラ、電子ディスプレイ、ワイヤレス通信デバイス、外部メモリチップなどの周辺デバイスとインターフェースするための回路を含んでもよい。プロセッサ902、904、906、908は、相互接続/バスモジュール924を介して互いに、ならびに1つまたは複数のメモリ要素912、システム構成要素およびリソース916、カスタム回路914、およびタスク依存性コントローラ930と通信することができる。相互接続/バスモジュール924は、再構成可能論理ゲートのアレイを含むこと、および/またはバスアーキテクチャ(たとえば、CoreConnect、AMBAなど)を実装することができる。通信は、高性能ネットワークオンチップ(NoC)などの高度な相互接続によって提供されてもよい。
【００６８】
SOC900は、クロック918および電圧調整器920など、SOCの外部のリソースと通信するための入力/出力モジュール(図示せず)をさらに含んでもよい。SOCの外部のリソース(たとえば、クロック918、電圧調整器920)は、内部SOCプロセッサ/コア(たとえば、DSP902、モデムプロセッサ904、グラフィックプロセッサ906、アプリケーションプロセッサ908など)のうちの2つ以上によって共有され得る。
【００６９】
上で論じたSOC900に加えて、様々な実施形態(限定はしないが、下で論じる実施形態を含む)が、単一のプロセッサ、シングルコアプロセッサ、複数のプロセッサ、マルチコアプロセッサ、またはこれらの任意の組合せを含み得る、多種多様なコンピューティングシステムにおいて実装され得る。
【００７０】
様々な実施形態(限定はしないが、図3〜図9に関して上記で説明した実施形態などを含む)は、様々なコンピューティングデバイス上に実装され得、その例が図10〜図12に示されている。
【００７１】
コンピューティングデバイスは、共通して、例示的なパーソナルラップトップコンピュータ1000を示す図10に示す構成要素を有することになる。そのようなパーソナルコンピュータ1000は、一般に、揮発性メモリ1002、およびディスクドライブ1004のような大容量不揮発性メモリに結合された、マルチコアプロセッサ1001を含む。コンピュータ1000はまた、プロセッサ1001に結合されたコンパクトディスク(CD)および/またはDVDドライブ1008を含む場合がある。パーソナルラップトップコンピュータ1000はまた、プロセッサ1001をネットワークに結合するためのネットワーク接続回路のような、データ接続を確立するための、または外部メモリデバイスを受け入れるための、プロセッサ1001に結合されたいくつかのコネクタポートを含み得る。パーソナルラップトップコンピュータ1000は、プロセッサ1001に結合されたワイヤレスデータリンクに接続された電磁放射を送受信するための無線/アンテナ1010を有し得る。コンピュータ1000は、コンピュータ技術分野においてよく知られているように、キーボード1018と、ポインティングマウスパッド1020と、ディスプレイ1022とをさらに含み得る。マルチコアプロセッサ1001は、上記で説明し、図9に示したものと同様の回路および構造を含み得る。
【００７２】
図11は、内部メモリ1104に結合されたマルチコアプロセッサ1101と、ディスプレイ1112と、スピーカー1114とを含むスマートフォン1100を示す。加えて、スマートフォン1100は、プロセッサ1101に結合されたワイヤレスデータリンクおよび/またはセルラー電話トランシーバ1108に接続される場合がある、電磁放射を送信および受信するためのアンテナを含んでもよい。スマートフォン1100は通常、ユーザ入力を受け取るためのメニュー選択ボタンまたはロッカースイッチ1120も含む。典型的なスマートフォン1100はまた、マイクロフォンから受信された音をワイヤレス送信に適したデータパケットにデジタル化し、受信された音のデータパケットを復号して、音を生成するためにスピーカーに供給されるアナログ信号を生成する、音符号化/復号(コーデック)回路1106を含む。また、プロセッサ1101、トランシーバ1108およびコーデック1106のうちの1つまたは複数は、デジタル信号プロセッサ(DSP)回路(個別に図示せず)を含んでもよい。
【００７３】
様々な実施形態は、図12に示すサーバ1200など、様々な市販サーバデバイスのいずれにおいても実装され得る。そのようなサーバ1200は通常、複数のプロセッサシステムを含み、プロセッサシステムのうちの1つまたは複数は、マルチコアプロセッサ1201であってよく、またはマルチコアプロセッサ1201を含んでよい。プロセッサ1201は、揮発性メモリ1202、およびディスクドライブ1203のような大容量不揮発性メモリに結合され得る。サーバ1200はまた、プロセッサ1201に結合された、フロッピーディスクドライブ、コンパクトディスク(CD)、またはDVDディスクドライブ1204を含み得る。サーバ1200はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワークのような、ネットワーク1208とのデータ接続を確立するための、プロセッサ1201に結合されたネットワークアクセスポート1206を含み得る。
【００７４】
プロセッサ1001、1101、1201は、本明細書で説明する様々な実施形態の機能および動作を含む、様々な機能を実行するためのソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマルチコアマルチプロセッサ、マイクロコンピュータまたは複数のプロセッサチップであり得る。1つのプロセッサをワイヤレス通信機能専用とし、1つのプロセッサを他のアプリケーションの実行専用とするなど、複数のプロセッサが設けられ得る。通常、アプリケーションプログラムは、アクセスされてプロセッサ1001、1101、1201にロードされる前に、内部メモリ1002、1104、1202に記憶され得る。いくつかのモバイルコンピューティングデバイスでは、追加のメモリチップ(たとえば、Secure Data(SD)カード)が、モバイルデバイスに差し込まれ、プロセッサ1001、1101、1201に結合され得る。内部メモリ1002、1104、1202は、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合物であり得る。本明細書では、メモリに対する一般的な言及は、内部メモリ、モバイルデバイスに差し込まれたリムーバブルメモリ、およびプロセッサ1001、1101、1201自体の中のメモリを含む、プロセッサ1001、1101、1201によってアクセス可能なすべてのメモリを指す。
【００７５】
様々な実施形態の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「コード」は、C、C++、C#、Smalltalk、Java(登録商標)、JavaScript(登録商標)、Visual Basic、構造化照会言語(たとえば、Transact-SQL)、Perlなどの高水準プログラミング言語または様々な他のプログラミング言語で記述され得る。本明細書で使用されるコンピュータ可読記憶媒体に記憶されるプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である機械語コード(オブジェクトコードなど)を指す。
【００７６】
コンピューティングデバイスは、(非特権コードが動作する場合)ユーザ空間内に編成され、(特権コードが動作する場合)カーネル空間内に編成されるオペレーティングシステムカーネルを含み得る。この分離は、カーネル空間の一部であるコードが一般公有使用許諾(GPL)許諾される必要がある一方で、ユーザ空間において動作するコードがGPL許諾されなくてもよい、Android(登録商標)および他のGPL環境において特に重要である。本出願で説明する様々なソフトウェア構成要素は、明示的に別段の記述がない限り、カーネル空間またはユーザ空間のいずれかに実装され得ることを理解されたい。
【００７７】
本出願で使用する「構成要素」、「モジュール」などの用語は、限定はしないが、特定の動作または機能を実行するように構成された、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、または実行中のソフトウェアなどの、コンピュータ関連のエンティティを含むものとする。たとえば、構成要素は、限定はしないが、プロセッサ上で動作しているプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであってもよい。例として、コンピューティングデバイス上で動作しているアプリケーションとコンピューティングデバイスの両方は、構成要素と呼ばれる場合がある。1つまたは複数の構成要素が、プロセスおよび/または実行スレッド内に存在することがあり、1つの構成要素が、1つのプロセッサまたはコア上に局在することがあり、かつ/あるいは2つ以上のプロセッサまたはコアの間で分散されることがある。加えて、これらの構成要素は、様々な命令および/またはデータ構造が記憶された様々な非一時的コンピュータ可読媒体から実行することができる。構成要素は、ローカルおよび/またはリモートプロセス、関数呼出しまたはプロシージャ呼出し、電子信号、データパケット、メモリ読出し/書込み、ならびに他の知られているコンピュータ、プロセッサ、および/またはプロセスに関する通信方法によって通信してもよい。
【００７８】
前述の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な実施形態のブロックが提示される順序で実行されなければならないことを要求または暗示するものではない。当業者が了解するように、前述の実施形態のブロックの順序を、任意の順序で実行することができる。「その後」、「次いで」、「次に」などの単語は、ブロックの順序を限定するものではなく、これらの単語は、方法の説明を通して読者を案内するために使用されるにすぎない。さらに、たとえば冠詞「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)およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、一方、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せも、非一時的コンピュータ可読およびプロセッサ可読記憶媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして存在し得る。
【００８２】
開示した実施形態の前述の説明は、いかなる当業者も本発明を作成または使用することができるように記載されている。これらの実施形態に対する様々な修正は当業者には容易に明らかとなり、本明細書で定義した一般原理は、本発明の趣旨または範囲から逸脱することなく、他の実施形態に適用されてもよい。したがって、本発明は、本明細書に示す実施形態に限定されるものではなく、以下の特許請求の範囲、ならびに本明細書で開示する原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
【符号の説明】
【００８３】
100  従来技術の方法
200  従来技術の方法、方法
300  方法
400  方法
500  実施形態方法
600  実施形態方法
700  方法
800  方法
900  システムオンチップ(SOC)
902  デジタル信号プロセッサ(DSP)、異種プロセッサ、プロセッサ
904  モデムプロセッサ、異種プロセッサ、プロセッサ
906  グラフィックスプロセッサ、異種プロセッサ、プロセッサ
908  アプリケーションプロセッサ、異種プロセッサ、プロセッサ
908a  処理コア
908b  処理コア
908c  処理コア
908d  処理コア
910  コプロセッサ、プロセッサ
912  メモリ要素
914  アナログ回路およびカスタム回路、カスタム回路
916  システム構成要素およびリソース
918  クロック
920  電圧調整器
924  相互接続/バスモジュール
930  ハードウェアベースのタスク依存性コントローラ、タスク依存性コントローラ
932  ハードウェアベースのテーブル
1000  パーソナルラップトップコンピュータ、パーソナルコンピュータ、コンピュータ
1001  マルチコアプロセッサ、プロセッサ
1002  揮発性メモリ、内部メモリ
1004  ディスクドライブ
1008  コンパクトディスク(CD)および/またはDVDドライブ
1010  無線/アンテナ
1018  キーボード
1020  ポインティングマウスパッド
1022  ディスプレイ
1100  スマートフォン
1101  マルチコアプロセッサ、プロセッサ
1104  内部メモリ
1106  音符号化/復号(コーデック)回路、コーデック
1108  ワイヤレスデータリンクおよび/またはセルラー電話トランシーバ、トランシーバ
1112  ディスプレイ
1114  スピーカー
1120  メニュー選択ボタンまたはロッカースイッチ
1200  サーバ
1201  マルチコアプロセッサ、プロセッサ
1202  揮発性メモリ、内部メモリ
1203  ディスクドライブ
1204  フロッピーディスクドライブ、コンパクトディスク(CD)、またはDVDディスクドライブ
1206  ネットワークアクセスポート
1208  ネットワーク
【図１】
2018507474.tif 000003
【図２】
2018507474.tif 000004
【図３】
2018507474.tif 000005
【図４】
2018507474.tif 000006
【図５】
2018507474.tif 000007
【図６】
2018507474.tif 000008
【図７】
2018507474.tif 000009
【図８】
2018507474.tif 000010
【図９】
2018507474.tif 000011
【図１０】
2018507474.tif 000012
【図１１】
2018507474.tif 000013
【図１２】
2018507474.tif 000014
【手続補正書】
【提出日】平成29年7月27日(2017.7.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイスにおいてタスクを実行する方法であって、
前記コンピューティングデバイスのタスク依存性コントローラを介してタスクのシーケンスを識別するステップと、
1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクの前記シーケンスにおけるタスクを識別するステップと、
前記識別されたタスクの各々に関してハードウェアベースのテーブルに記録を追加するステップであって、各記録が、先行タスクパラメータ、後続タスクパラメータ、および後続プログラムカウンタパラメータを含み、前記後続プログラムカウンタパラメータが、前記1つの依存後続タスクの開始命令を識別する値を含む、ステップと、
タスクの前記シーケンスにおける第1のタスクの実行を開始する指示を受信するステップと、
前記指示に応答して、前記第1のタスクに関連する対応するエントリに関して前記ハードウェアベースのテーブルをチェックするステップと、
前記対応するエントリに記憶された前記先行タスクパラメータによって識別された任意の先行タスクが実行を完了させているかどうかを判断するステップと、
前記対応するエントリに記憶された前記先行タスクに関する前記判断に基づいて、前記第1のタスクの実行を開始するステップと、
前記第1のタスクの実行後に、前記後続タスクパラメータに記憶されたアドレスまで前記後続プログラムカウンタパラメータの値を増分するステップと、
前記増分後に、前記コンピューティングデバイスのランタイムシステムに制御を移転することなく、前記後続タスクパラメータによって識別された後続タスク、およびタスクの前記シーケンスにおける各残存依存後続タスクを実行するステップと
を含む方法。
【請求項２】
前記コンピューティングデバイスの前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するステップは、ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するステップを含む、請求項1に記載の方法。
【請求項３】
前記ハードウェアベースのタスク依存性コントローラは、タスクの前記シーケンスを実行する複数のプロセッサコアの間で共有されるハードウェア構成要素である、請求項2に記載の方法。
【請求項４】
前記識別されたタスクの各々に関して前記ハードウェアベースのテーブルに前記記録を追加するステップは、前記タスク依存性コントローラが前記識別されたタスクの各々に関してマップ構造に前記記録を追加するステップを含む、請求項1に記載の方法。
【請求項５】
前記タスク依存性コントローラが前記識別されたタスクの各々に関して前記マップ構造に前記記録を追加するステップは、前記タスク依存性コントローラが前記識別されたタスクの各々に関して連想マップ構造およびダイレクトマップ構造のうちの1つに前記記録を追加するステップを含む、請求項4に記載の方法。
【請求項６】
コンピューティングデバイスであって、
動作を実行するためのプロセッサ実行可能命令を備えるプロセッサを備え、前記動作は、
タスク依存性コントローラを介してタスクのシーケンスを識別することと、
1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクの前記シーケンスにおけるタスクを識別することと、
前記識別されたタスクの各々に関してハードウェアベースのテーブルに記録を追加することであって、各記録が、先行タスクパラメータ、後続タスクパラメータ、および後続プログラムカウンタパラメータを含み、前記後続プログラムカウンタパラメータが、前記1つの依存後続タスクの開始命令を識別する値を含む、追加することと、
タスクの前記シーケンスにおける第1のタスクの実行を開始する指示を受信することと、
前記指示に応答して、前記第1のタスクに関連する対応するエントリに関して前記ハードウェアベースのテーブルをチェックすることと、
前記対応するエントリに記憶された前記先行タスクパラメータによって識別された任意の先行タスクが実行を完了させているかどうかを判断することと、
前記対応するエントリに記憶された前記先行タスクに関する前記判断に基づいて、前記第1のタスクの実行を開始することと、
前記第1のタスクの実行後に、前記後続タスクパラメータに記憶されたアドレスまで前記後続プログラムカウンタパラメータの値を増分することと、
前記増分後に、ランタイムシステムに制御を移転することなく、前記後続タスクパラメータによって識別された後続タスク、およびタスクの前記シーケンスにおける各残存依存後続タスクを実行することと
を含む、コンピューティングデバイス。
【請求項７】
ハードウェアベースのタスク依存性コントローラをさらに備え、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することは、前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することを含む、請求項6に記載のコンピューティングデバイス。
【請求項８】
複数のプロセッサコアをさらに備え、前記ハードウェアベースのタスク依存性コントローラは、タスクの前記シーケンスを実行する前記複数のプロセッサコアの間で共有される、請求項7に記載のコンピューティングデバイス。
【請求項９】
前記プロセッサは、前記識別されたタスクの各々に関して前記ハードウェアベースのテーブルに前記記録を追加することが、前記タスク依存性コントローラに、前記識別されたタスクの各々に関してマップ構造に前記記録を追加させることを含むようなプロセッサ実行可能命令を備え、前記マップ構造が、連想マップ構造およびダイレクトマップ構造を含むグループから選択される、請求項6に記載のコンピューティングデバイス。
【請求項１０】
プロセッサ実行可能ソフトウェア命令が記憶された非一時的コンピュータ可読記憶媒体であって、前記プロセッサ実行可能ソフトウェア命令は、
タスク依存性コントローラを介してタスクのシーケンスを識別することと、
1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクの前記シーケンスにおけるタスクを識別することと、
前記識別されたタスクの各々に関してハードウェアベースのテーブルに記録を追加することであって、各記録が、先行タスクパラメータ、後続タスクパラメータ、および後続プログラムカウンタパラメータを含み、前記後続プログラムカウンタパラメータが、前記1つの依存後続タスクの開始命令を識別する値を含む、追加することと、
タスクの前記シーケンスにおける第1のタスクの実行を開始する指示を受信することと、
前記指示に応答して、前記第1のタスクに関連する対応するエントリに関して前記ハードウェアベースのテーブルをチェックすることと、
前記対応するエントリに記憶された前記先行タスクパラメータによって識別された任意の先行タスクが実行を完了させているかどうかを判断することと、
前記対応するエントリに記憶された前記先行タスクに関する前記判断に基づいて、前記第1のタスクの実行を開始することと、
前記第1のタスクの実行後に、前記後続タスクパラメータに記憶されたアドレスまで前記後続プログラムカウンタパラメータの値を増分することと、
前記増分後に、ランタイムシステムに制御を移転することなく、前記後続タスクパラメータによって識別された後続タスク、およびタスクの前記シーケンスにおける各残存依存後続タスクを実行することと
を含む動作をコンピューティングデバイスプロセッサに実行させるように構成される、非一時的コンピュータ可読記憶媒体。
【請求項１１】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記タスク依存性コントローラを介してタスクの前記シーケンスを識別することがハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することを含むような動作をプロセッサに実行させるように構成される、請求項10に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別することが、タスクの前記シーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクの前記シーケンスを識別することを含むような動作をプロセッサに実行させるように構成される、請求項11に記載の非一時的コンピュータ可読記憶媒体。
【請求項１３】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記識別されたタスクの各々に関して前記ハードウェアベースのテーブルに前記記録を追加することが、前記識別されたタスクの各々に関して連想マップ構造およびダイレクトマップ構造のうちの1つに前記記録を追加することを含むような動作をプロセッサに実行させるように構成される、請求項10に記載の非一時的コンピュータ可読記憶媒体。
【請求項１４】
タスク依存性コントローラを介してタスクのシーケンスを識別するための手段と、
1つの先行タスクに依存するか、1つの依存後続タスクを有するか、または両方に該当するタスクの前記シーケンスにおけるタスクを識別するための手段と、
前記識別されたタスクの各々に関してハードウェアベースのテーブルに記録を追加するための手段であって、各記録が、先行タスクパラメータ、後続タスクパラメータ、および後続プログラムカウンタパラメータを含み、前記後続プログラムカウンタパラメータが、前記1つの依存後続タスクの開始命令を識別する値を含む、手段と、
タスクの前記シーケンスにおける第1のタスクの実行を開始する指示を受信するための手段と、
前記指示に応答して、前記第1のタスクに関連する対応するエントリに関して前記ハードウェアベースのテーブルをチェックするための手段と、
前記対応するエントリに記憶された前記先行タスクパラメータによって識別された任意の先行タスクが実行を完了させているかどうかを判断するための手段と、
前記対応するエントリに記憶された前記先行タスクに関する前記判断に基づいて、前記第1のタスクの実行を開始するための手段と、
前記第1のタスクの実行後に、前記後続タスクパラメータに記憶されたアドレスまで前記後続プログラムカウンタパラメータの値を増分するための手段と、
ランタイムシステムに制御を移転することなく、前記後続タスクパラメータによって識別された後続タスク、およびタスクの前記シーケンスにおける各残存依存後続タスクを実行するための手段と
を含む、コンピューティングデバイス。
【請求項１５】
前記タスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段を含む、請求項14に記載のコンピューティングデバイス。
【請求項１６】
前記ハードウェアベースのタスク依存性コントローラを介してタスクの前記シーケンスを識別するための手段は、タスクの前記シーケンスを実行する複数のプロセッサコアによって共有されるハードウェア構成要素を介してタスクの前記シーケンスを識別するための手段を含む、請求項15に記載のコンピューティングデバイス。
【請求項１７】
前記識別されたタスクの各々に関して前記ハードウェアベースのテーブルに前記記録を追加するための手段は、前記識別されたタスクの各々に関してマップ構造に前記記録を追加するための手段を含む、請求項14に記載のコンピューティングデバイス。
【請求項１８】
前記マップ構造に前記記録を追加するための手段は、前記識別されたタスクの各々に関して連想マップ構造およびダイレクトマップ構造のうちの1つに前記記録を追加するための手段を含む、請求項17に記載のコンピューティングデバイス。
【国際調査報告】
2018507474.tif 000015
2018507474.tif 000016