(57)【要約】【課題】複数のプロセッサに渡る処理を正常に行いつつ低電力化を実現する技術を提供する。【解決手段】プロセッサエレメント４０１，４０２上のローカルリソース制御部５０６，５０９と、グローバルリソース制御部５１２を有するマルチプロセッサにおいて、プロセッサエレメント４０２上のタスクが予定より早く終了したら、この停止要求をローカルリソース制御部５０９から受けて、グローバルリソース制御部５１２は停止の可否を判断する。その結果を受け、ローカルリソース制御部５０９はプロセッサエレメント４０２を停止する。プロセッサエレメント４０２上のタスク（ＭＯＤＬ２）を別のプロセッサエレメント４０１上のタスク（ＭＯＤＬ１）が必要ならば、このローカルリソース制御部５０６が起動要求を発行し、グローバルリソース制御部５１２はプロセッサエレメント４０２とタスク（ＭＯＤＬ２）の起動をローカルリソース制御部５０９を経由して行う。【選択図】図１
2010140151.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロセッサエレメントと、第２のプロセッサエレメントと、前記第１のプロセッサエレメントと前記第２のプロセッサエレメントの実行制御を行うタスク制御プロセッサエレメントとを含むマルチプロセッサであって、
第１のタスクの次に第２のタスクを実行することを繰り返し行うソフトウェア処理において、前記第１のプロセッサエレメントへ前記第１のタスクを割付け、前記第２のプロセッサエレメントへ前記第２のタスクを割付けて実行する場合、
前記第１のプロセッサエレメント上で、前記第１のタスクの進捗状況を判断して前記第１のプロセッサエレメントの状態を制御する第１のローカルリソース制御部と、
前記第２のプロセッサエレメント上で、前記第２のタスクの進捗状況を判断して前記第２のプロセッサエレメントの状態を制御する第２のローカルリソース制御部と、
前記タスク制御プロセッサエレメント上で、前記第１のローカルリソース制御部と前記第２のローカルリソース制御部からのプロセッサエレメントの停止状態への変更の要求を受け、この停止状態への変更の可否を判断して、この要求のあったローカルリソース制御部へ状態変更の可否を指示するグローバルリソース制御部とを有し、
前記第１のローカルリソース制御部と前記第２のローカルリソース制御部は、前記グローバルリソース制御部からの前記指示に基づき、前記第１のプロセッサエレメントまたは前記第２のプロセッサエレメントの状態を制御することを特徴とするマルチプロセッサ。
【請求項２】
請求項１記載のマルチプロセッサにおいて、
前記第２のタスクを実行する前記第２のプロセッサエレメントを停止状態にした後の処理は、
前記第１のタスクの次に実行する前記第２のタスクを再度起動する必要性があることを前記第１のローカルリソース制御部の要求に基づき前記グローバルリソース制御部が判断して、この判断に基づき前記グローバルリソース制御部は前記第２のプロセッサエレメントに対して再起動要求を出し、この再起動要求に基づき前記第２のプロセッサエレメントを再起動し、その後、前記第２のタスクをランニング状態に復帰することを特徴とするマルチプロセッサ。
【請求項３】
請求項１記載のマルチプロセッサにおいて、
前記グローバルリソース制御部が前記停止状態への変更の要求を受け、この停止状態への変更の可否を判断する処理は、
外部割込みの受付けが不可か、または要求時は受付け不可として、前記第１または第２のプロセッサエレメント上の前記第１または第２のタスクが次に実行する必要がある時刻までの時間間隔が、前記第１または第２のプロセッサエレメントを停止状態にしてその後復帰するのに要するトータル時間よりも長いときに、停止状態への変更を可能と判断することを特徴とするマルチプロセッサ。
【請求項４】
第１のプロセッサエレメントと、第２のプロセッサエレメントと、前記第１のプロセッサエレメントと前記第２のプロセッサエレメントの実行制御を行うタスク制御プロセッサエレメントとを含むマルチプロセッサの状態制御方法であって、
第１のタスクの次に第２のタスクを実行することを繰り返し行うソフトウェア処理において、前記第１のプロセッサエレメントへ前記第１のタスクを割付け、前記第２のプロセッサエレメントへ前記第２のタスクを割付けて実行する場合、
第１のローカルリソース制御部は、前記第１のプロセッサエレメント上で、前記第１のタスクの進捗状況を判断して前記第１のプロセッサエレメントの状態を制御し、
第２のローカルリソース制御部は、前記第２のプロセッサエレメント上で、前記第２のタスクの進捗状況を判断して前記第２のプロセッサエレメントの状態を制御し、
グローバルリソース制御部は、前記タスク制御プロセッサエレメント上で、前記第１のローカルリソース制御部と前記第２のローカルリソース制御部からのプロセッサエレメントの停止状態への変更の要求を受け、この停止状態への変更の可否を判断して、この要求のあったローカルリソース制御部へ状態変更の可否を指示し、
前記第１のローカルリソース制御部と前記第２のローカルリソース制御部は、前記グローバルリソース制御部からの前記指示に基づき、前記第１のプロセッサエレメントまたは前記第２のプロセッサエレメントの状態を制御することを特徴とするマルチプロセッサの状態制御方法。
【請求項５】
請求項４記載のマルチプロセッサの状態制御方法において、
前記第２のタスクを実行する前記第２のプロセッサエレメントを停止状態にした後の処理は、
前記第１のタスクの次に実行する前記第２のタスクを再度起動する必要性があることを前記第１のローカルリソース制御部の要求に基づき前記グローバルリソース制御部が判断して、この判断に基づき前記グローバルリソース制御部は前記第２のプロセッサエレメントに対して再起動要求を出し、この再起動要求に基づき前記第２のプロセッサエレメントを再起動し、その後、前記第２のタスクをランニング状態に復帰することを特徴とするマルチプロセッサの状態制御方法。
【請求項６】
請求項４記載のマルチプロセッサの状態制御方法において、
前記グローバルリソース制御部が前記停止状態への変更の要求を受け、この停止状態への変更の可否を判断する処理は、
外部割込みの受付けが不可か、または要求時は受付け不可として、前記第１または第２のプロセッサエレメント上の前記第１または第２のタスクが次に実行する必要がある時刻までの時間間隔が、前記第１または第２のプロセッサエレメントを停止状態にしてその後復帰するのに要するトータル時間よりも長いときに、停止状態への変更を可能と判断することを特徴とするマルチプロセッサの状態制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサにおいて、タスクの進捗状況に応じて、クロック周波数や電圧値を動的に変更する制御方法に関する。特に、低電力化のために、クロックの周波数や電圧値を変更するだけでなく、あるプロセッサをスリープ状態、即ちクロックの停止状態、または電源遮断状態に変化させたときに、この状態変化によって全体のアプリケーションの動作を矛盾なく動作させるプロセッサ状態やタスクの制御方法に適用して有効な技術に関する。
【背景技術】
【０００２】
近年、組込みシステムでは、一つのプロセッサによる高速化は、微細化による周波数向上の限界と、周波数向上が引き起こす電力の向上により、限界を迎えつつある。この状況に対して、マルチプロセッサによる処理の並列化で高速化する手法が、各社で検討されている。
【０００３】
マルチプロセッサは、大型計算機やパソコン用に開発されてきているが、そのマルチプロセッサは、ソフトウェア処理（以降、タスクと呼ぶことにする）やメモリに対するプロセッサの役割が等価な対称型マルチプロセッサに関する技術である。これに対して、本発明で扱うマルチプロセッサは、組込みシステムを対象にして、適材適所にタスクを振り分ける非対称型マルチプロセッサに関する。メモリ空間も個別になるケースが多い。
【０００４】
非対称型マルチプロセッサは、処理効率の良さが利点であるため、その利点をさらに強化するため、タスクの進捗状況に応じて周波数や電圧値を制御する手法が有効となる。例えば特許文献１は、マルチプロセッサ上ではないがこのような制御手法の一例である。
【０００５】
ところで、低電力化に最も有効な制御は、プロセッサのクロックを停止したり電圧を遮断することである。
【０００６】
このようなスリープ状態や停止状態は、プロセッサの異常状態の一つの状態であり、この異常状態をマルチプロセッサ全体の制御に通知する手法は、例えば特許文献２にも提示されている。この従来技術では、通知したあと、そのまま継続するか停止するかを判断するにすぎない。
【０００７】
また、特許文献３では、タスクのプロセッサの割付を動的に変更する方法に関するが、この従来技術では、プロセッサの状態を変更することは考慮していない。
【０００８】
本発明で扱うプロセッサ状態の制御は、スリープか電源停止したあと、しばらく後にアプリケーションの進捗に応じて、そのプロセッサ上のタスクを実行する必要があるときには、再び起動をかける必要がある。本発明では、このようなプロセッサ状態の制御方法を提供するのが目的である。
【特許文献１】特開２００２−２０２８９３号公報
【特許文献２】特開２００５−３４６３２８号公報
【特許文献３】特開２００７−１３３７２３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、上記の従来技術では、プロセッサをスリープか電源停止したあと、しばらく後にアプリケーションの進捗に応じて、そのプロセッサに起動をかけるという制御は実施できない。この課題を本願では解決する。即ち、プロセッサがスリープ状態か停止状態となるため、他のプロセッサ上のタスクがこの事実を知らされないと、次の実行すべきタスクがスリープ状態のプロセッサにあるとき、プロセッサを起動せずにタスクを起動しようとするため、正しく実行されない。タスク起動の前にプロセッサの再起動が必要である。
【００１０】
また、プロセッサがスリープ状態に遷移してよいかどうかは、次にこのプロセッサがいつ必要となるかを常に把握しておく必要があり、この判断ができないと遷移はできない。
【００１１】
上記のプロセッサ起動やスリープ状態の可否を判断するには、タスクが搭載されている全てのプロセッサの進捗を常に把握して、当初の時間の予定が狂っても、タスク同士の順序関係を保持するように、プロセッサ状態の変更可否の判断と変更を行う必要がある。
【００１２】
そこで、本発明は、このような制御を提供するのが課題であり、その目的は、複数のプロセッサに渡る処理を正常に行いつつ低電力化を実現する技術を提供することにある。
【００１３】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１４】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１５】
すなわち、代表的なものの概要は、個々のプロセッサ（プロセッサエレメント）上で、当該プロセッサ上のタスクの進捗を把握し、タスクの進捗状況に応じて、当該プロセッサのＳｌｅｅｐ／電源停止の要求を起こすローカルリソース制御部と、全体管理用プロセッサ（タスク制御プロセッサエレメント）上で、他のマルチプロセッサ上の全てのタスクの進捗を把握し、個々のプロセッサからの要求に基づきプロセッサの状態制御を行うグローバルリソース制御部とを有する。
【００１６】
この構成において、ローカルリソース制御部は、当該プロセッサ上の第１のタスクからの別の第２のタスクの起動要求に基づき、第２のタスクが別のプロセッサ上に搭載されているときに、グローバルリソース制御部に対して、第２のタスクの起動要求を起こす。そして、グローバルリソース制御部は、個々のプロセッサのローカルリソース制御部からのＳｌｅｅｐまたは電源停止の要求と、ある第１のプロセッサのローカルリソース制御部からの別の第２のプロセッサ上の第２のタスクの起動要求を受付ける。さらに、前者の要求についてはＳｌｅｅｐ／電源停止の可否判断を行い、当該プロセッサに判断結果を返し、後者の要求については、第２のプロセッサがＳｌｅｅｐ／電源停止のときには、第２のプロセッサのローカルリソース制御部に再起動の要求と引き続き第２のタスクの起動要求を行う。
【００１７】
例えば、第１のタスクが割付けられた第１のプロセッサエレメント上の第１のローカルリソース制御部と、第２のタスクが割付けられた第２のプロセッサエレメント上の第２のローカルリソース制御部と、グローバルリソース制御部を有するマルチプロセッサにおいて、第２のプロセッサエレメント上のタスクが予定より早く終了したら、第２のプロセッサエレメントの停止要求を第２のローカルリソース制御部から受けて、グローバルリソース制御部は停止の可否を判断する。その結果を受け、第２のローカルリソース制御部は第２のプロセッサエレメントを停止する。第２のプロセッサエレメント上の第２のタスクを別の第１のプロセッサエレメント上のタスクが必要ならば、第１のプロセッサエレメントの第１のローカルリソース制御部が第２のタスクの起動要求をグローバルリソース制御部に発行し、グローバルリソース制御部は第２のプロセッサエレメントと第２のタスクの起動を第２のローカルリソース制御部を経由して行う。
【発明の効果】
【００１８】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００１９】
すなわち、代表的なものによって得られる効果は、複数のプロセッサに渡る処理を正常に行いつつ低電力化を実現する技術を提供することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明による代表的な実施の形態を図面に従って詳細に説明する。なお、実施の形態を説明するための全図において、同じ参照番号、記号は同じものもしくは類似のものを表わすものとし、その繰り返しの説明は省略する。
【００２１】
以下において、実施の形態は二つ述べるが、ハードウェア構成やソフトウェア構成は両者で共通であるため、まず共通な部分を述べる。その後、第１の実施の形態としてＬＳＩ外部からの割込みがないケースでタスクフローとプロセッサをスリープ状態に移行する制御を述べ、その後、第２の実施の形態としてＬＳＩ外部からの割込みがあるケースのフローを述べる。
【００２２】
＜１  実施の形態に共通な部分＞
実施の形態に共通な部分として、マルチプロセッサを利用するシステム構成、例題アプリケーション、およびシステムＬＳＩ構成とソフトウェアの搭載場所を、図２から図５に従い述べる。
【００２３】
図２は、マルチプロセッサを利用するシステムの構成図を示す。本システムは、ハードディスク（ＨＤＤ）２０５から圧縮された音声データを、コネクタ２０４を通してシステムボード２０１上に入力し、その後、マルチプロセッサチップ（ＭＰＣＨＩＰ）２００を通してデコードし、その後、オーディオコントローラ（ＡＵＤＣ）２０７でオーディオのディジタルデータを音声データに変換して、コネクタ２０８を通してヘッドフォン２０９などで音声を再生する。
【００２４】
システムボード２０１上には、他に、クロックを発信する水晶発信器（ＯＳＣ）２０２、プログラムを格納するフラッシュメモリ（ＦＬＳＨ）２０３、および処理を実行するための中間データなどを格納するダイナミックランダムアクセスメモリ（ＤＲＡＭ）２０６が搭載する。
【００２５】
マルチプロセッサチップ（ＭＰＣＨＩＰ）２００の端子を述べる。２１０はクロック入力端子（ＣＬ）、２１１は複数ビットのデータ端子（Ｂ１）、２１４は複数ビットのデータ端子（Ｂ２）、２１２はＨＤＤとのＨＤＤインタフェース端子（ＨＩＦ）、２１３はＤＲＡＭとのＤＲＡＭインタフェース端子（ＤＲ）である。
【００２６】
図３は、実施の形態で例とするアプリケーション、オーディオデコーダのデータ処理フローを示す。
【００２７】
ハードディスク（ＨＤＤ）２０５からフレームデータ（ＦＤ−Ｉｎ）３１０を入力し、ソフトモジュール（ＭＯＤＬ１）３０８は、データのエラーチェックを行った後、フレームデータを周波数帯域ごとの複数のサブバンドというデータに分解する。その後、サブバンドごとに、サイドインフォメーションという情報を取得し、この情報を元に逆量子化を行う。その後、ソフトモジュール（ＭＯＤＬ２）３０６で、サブバンドごとのデコード結果を合成し、フィルタバンクという処理を行う。最後に、フレームごとの処理結果（ＦＤ−Ｏｕ）３０９としてヘッドフォン２０９へ出力する。
【００２８】
図４は、アプリケーションを搭載するマルチプロセッサチップ（ＭＰＣＨＩＰ）２００のブロック図を示す。
【００２９】
マルチプロセッサチップ（ＭＰＣＨＩＰ）２００において、アプリケーションの処理を司るプロセッサエレメントは、第１のプロセッサエレメント（ＣＰＵ１）４０１と第２のプロセッサエレメント（ＣＰＵ２）４０２である。全体リソース制御を司るためにタスク制御プロセッサエレメント（ＳＣＰＵ）４０４がある。その他、共有メモリ（ＣＭ）４０６、割込みコントローラ（ＩｎｔＣ）４０８、タイマ（Ｔｉｍ）４０９、および、クロック入力端子（ＣＬ）２１０に接続されたクロックジェネレータ（ＣＫＧＥＮ）４０３が必要となる。これらをつなぐ信号の入出力制御を行う内部処理用のバスアービタ（ＢＵＳ＿ＡＲＢ）４０５があり、さらに、周辺入出力を司るための周辺バス４１４があり、周辺バス４１４からの入出力経路で、かつ周辺バス制御を行う周辺バスコントローラ（ＰＢＣ）４０７がある。
【００３０】
周辺バス４１４に接続するモジュールとして、インタフェース端子（ＨＩＦ）２１２を通じてＨＤＤインタフェースを制御するＨＤＤインタフェースコントローラ（ＨＩＦＣ）４１０、ＤＲＡＭインタフェース端子（ＤＲ）２１３を通じてＤＲＡＭを制御するＤＲＡＭコントローラ（ＤＲＣ）４１１、データ端子（Ｂ１）２１１を通じてデータ信号を制御するデータコントローラ（Ｂ１Ｃ）４１２とデータ端子（Ｂ２）２１４を通じてデータ信号を制御するデータコントローラ（Ｂ２Ｃ）４１３がある。
【００３１】
図４では、クロック周波数を変更したり、停止するための構成要素としてクロックジェネレータ（ＣＫＧＥＮ）４０３は示したが、電力を制御するために電位供給を停止する回路は記載していないが、本発明で述べる制御方法は、スリープへの状態遷移でも電位供給停止への遷移でも本質的に変わらないために割愛した。
【００３２】
図５は、図３で示すアプリケーションと制御ソフトを、図４のマルチプロセッサに搭載する一例のブロック図を示す。図５では、入出力経路となる周辺バスコントローラ（ＰＢＣ）４０７より以下は省略している。
【００３３】
図３のオーディオデコーダで、ソフトモジュール（ＭＯＤＬ１）３０８は第１のプロセッサエレメント（ＣＰＵ１）４０１に搭載し、ソフトモジュール（ＭＯＤＬ２）３０６は第２のプロセッサエレメント（ＣＰＵ２）４０２に搭載する。各々のプロセッサエレメントでは、それぞれに搭載されているタスクの進捗状況を観測し、進捗状況に応じてプロセッサエレメントのクロック周波数を変更したり、クロックを止めてｓｌｅｅｐ状態への変更と復帰を行うローカルリソース制御部として、第１のプロセッサエレメント４０１に対応のローカルリソース制御部（ＬＲＣＬ）５０６と、第２のプロセッサエレメント４０２に対応のローカルリソース制御部（ＬＲＣＬ）５０９がある。Ｓｌｅｅｐ状態とは、具体的にはクロックの供給が停止された状態であり、クロックの制御を行うのがクロックジェネレータ（ＣＫＧＥＮ）４０３である。
【００３４】
Ｓｌｅｅｐ状態に遷移するための他の構成要素として、プロセッサ状態レジスタ（ＰＲｅｇ）５０１、タスク制御プロセッサエレメント（ＳＣＰＵ）４０４上で、ローカルリソース制御部（ＬＲＣＬ）５０６と５０９からのＳｌｅｅｐ状態への遷移要求を受付け、遷移可否を判断するグローバルリソース制御部（ＣＲＣＬ）５１２がある。また、ローカルリソース制御部やオーディオデコーダのために、直接ハードリソースの管理を行うリアルタイムＯＳ（ＲＴＯＳ）５０７，５１０および５１３も構成要素である。その他、図３で示していない構成要素として、ローカルメモリ（ＬＭ）５０２などがある。
【００３５】
＜２  第１の実施の形態：プロセッサをスリープ状態にする制御＞
第１の実施の形態では、プロセッサをスリープ状態にする制御を述べるが、まず準備として第２．１節で、複数のプロセッサによるタスク処理のフローを図６に従い述べ、第２．２節でＳｌｅｅｐ状態が必要となる例としてタスクが予算時間より早く終了したときのフローを図７に従い述べる。最後に第２．３節で、プロセッサをスリープ状態に遷移し元の状態に復帰するフローを図１と図８に従い述べる。
【００３６】
＜＜２．１  ソフトウェアパイプラインによるタスク処理フロー：図６＞＞
図６では、図３のオーディオデコーダを、タスクを処理単位としてソフトウェアパイプラインにより実行する処理をガントチャートで示している。縦方向にはリソースを列挙し、横方向は時間軸を示す。
【００３７】
図６では、図３に示したフローに従い、ハードディスク（ＨＤＤ）２０５からフレームデータ（ＦＤ−Ｉｎ）３１０を入力し、第１のタスクであるソフトモジュール（ＭＯＤＬ１）３０８を第１のプロセッサエレメント（ＣＰＵ１）４０１で処理し、第２のタスクであるソフトモジュール（ＭＯＤＬ２）３０６を第２のプロセッサエレメント（ＣＰＵ２）４０２で処理し、最後にフレームごとの処理結果（ＦＤ−Ｏｕ）３０９をヘッドフォン（ＨＰ）２０９へ出力する。
【００３８】
これらのフローをパイプライン的に実行する。即ち、一つ目のフレームデータ（ＦＤ−Ｉｎ１）３１０１について、ソフトモジュール（ＭＯＤＬ１）３０８１の処理がプロセッサエレメント（ＣＰＵ１）４０１で終了すると、６０１で示すように、その結果をソフトモジュール（ＭＯＤＬ２）３０６１としてプロセッサエレメント（ＣＰＵ２）４０２で処理するのと並行して、二つ目のフレームデータ（ＦＤ−Ｉｎ２）３１０２について、ソフトモジュール（ＭＯＤＬ１）３０８２の処理をプロセッサエレメント（ＣＰＵ１）４０１で処理する。即ち、マルチプロセッサによる並行動作を行う。
【００３９】
同様にして、一つ目のフレームデータについて、ソフトモジュール（ＭＯＤＬ２）３０６１の処理がプロセッサエレメント（ＣＰＵ２）４０２で終了して、その処理結果（ＦＤ−Ｏｕ１）３０９１として出力するのと並行して、二つ目のフレームデータについてソフトモジュール（ＭＯＤＬ２）３０６２の処理をプロセッサエレメント（ＣＰＵ２）４０２で実行する。これも並行動作である。
【００４０】
最後に、二つ目のフレームデータについて、プロセッサエレメント（ＣＰＵ２）４０２上でソフトモジュール（ＭＯＤＬ２）３０６２の処理が終了して、その処理結果（ＦＤ−Ｏｕ２）３０９２として出力する。
【００４１】
＜＜２．２  タスクが予定より早く終了したときの処理フロー：図７＞＞
図７は、図６の並行動作している６０１において、ソフトモジュール（ＭＯＤＬ２）３０６１が予定時間より早く終了したときの一例を示す。このとき、時間（ＩｎｔＴ）７０１の時間分だけ、プロセッサエレメント（ＣＰＵ２）４０２は、７０２で示す区間は何もすることがなく、次の処理を待っている状態となる。
【００４２】
この区間７０２に対して、プロセッサエレメント（ＣＰＵ２）４０２をＳｌｅｅｐ状態にして電力を低減する。Ｓｌｅｅｐ状態にした後、また再び通常状態に戻すため、その制御に工夫が必要となる。この制御を以下に述べる。
【００４３】
＜＜２．３  プロセッサをスリープ状態に遷移するフロー：図１と図８＞＞
図１と図８に従い、Ｓｌｅｅｐ状態に遷移し、その後、Ｓｌｅｅｐ状態から通常状態へ復帰するフローを述べる。
【００４４】
まず、図１に従い、図７のソフトモジュール（ＭＯＤＬ２）３０６１で予定より早くタスクが終了したときからの処理の流れを以下で述べる。
【００４５】
ソフトモジュール（ＭＯＤＬ２）３０６１は、タスクが終了する間際のチェックポイント（ＣＰ１）４０２０を通過したことを、ローカルリソース制御部（ＬＲＣＬ）５０９に通知する。この通知を受けて、ローカルリソース制御部（ＬＲＣＬ）５０９では、進捗把握の処理４０２１で、予定より早い時間でタスクが終了しつつあることを認識する。そこで、低電力化のためにプロセッサエレメント（ＣＰＵ２）４０２をＳｌｅｅｐ状態に遷移することを処理４０２２にてタスク制御プロセッサエレメント（ＳＣＰＵ）４０４に要求する。
【００４６】
このＳｌｅｅｐ要求を受けて、タスク制御プロセッサエレメント（ＳＣＰＵ）４０４上のグローバルリソース制御部（ＣＲＣＬ）５１２は、処理１０２にてＳｌｅｅｐ可否の判断を行い、Ｓｌｅｅｐ可能ならば可能である旨を処理４０２８で返す。それを受けて、ローカルリソース制御部（ＬＲＣＬ）５０９は、処理４０２４でプロセッサエレメント（ＣＰＵ２）４０２をＳｌｅｅｐ状態４０２５に遷移し、共有メモリ（ＣＭ）４０６上の各プロセッサエレメントの状態変数（ＣＰＵ＿Ｓ）１０１について、プロセッサエレメント（ＣＰＵ２）４０２の状態変数（ＣＰＵ２＿Ｓ）１０１０の値をＳｌｅｅｐ状態を示す値に書き換える。
【００４７】
その後、図７で２番目のフレームに対してプロセッサエレメント（ＣＰＵ１）４０１上のソフトモジュール（ＭＯＤＬ１）３０８２が終了に近づくと、プロセッサエレメント（ＣＰＵ２）４０２は通常状態に復帰して、ソフトモジュール（ＭＯＤＬ２）３０６２を実行する必要がある。
【００４８】
このため、図１において、プロセッサエレメント（ＣＰＵ１）４０１上のソフトモジュール（ＭＯＤＬ１）３０８２がチェックポイント（ＣＰａ）４０１０を通過したことを、ローカルリソース制御部（ＬＲＣＬ）５０６に通知すると、ローカルリソース制御部５０６は処理４０１１にて進捗の把握を行い、ソフトモジュール（ＭＯＤＬ１）３０８２の残り時間から判断して次の処理であるソフトモジュール（ＭＯＤＬ２）３０６２を起動する必要があると判断すると、処理１０３により起動要求をタスク制御プロセッサエレメント（ＳＣＰＵ）４０４に対して行う。
【００４９】
この起動要求に対して、タスク制御プロセッサエレメント（ＳＣＰＵ）４０４上のグローバルリソース制御部（ＣＲＣＬ）５１２は、ソフトモジュール（ＭＯＤＬ２）３０６２を実行するプロセッサエレメント（ＣＰＵ２）４０２の状態変数（ＣＰＵ２＿Ｓ）１０１０の値から、プロセッサエレメント（ＣＰＵ２）４０２を起動する必要があるかどうかを処理１０４にて判断する。この場合、Ｓｌｅｅｐ状態であるため起動が必要であり、処理４０２９にて起動を要求する。
【００５０】
このプロセッサエレメント（ＣＰＵ２）４０２の起動要求を受けて、処理４０２６でプロセッサエレメント（ＣＰＵ２）４０２が通常状態に復帰し、ローカルリソース制御部（ＬＲＣＬ）５０９が起動して、処理４０２７にてソフトモジュール（ＭＯＤＬ２）３０６２を起動してＲｕｎｎｉｎｇ状態となり、ソフトモジュール（ＭＯＤＬ１）３０８２からのデータを待ち受ける。
【００５１】
次に、図１におけるＳｌｅｅｐ可否の判断の処理１０２のフローを、図８に従い以下に述べる。
【００５２】
ステップ８０２において、Ｓｌｅｅｐ対象プロセッサ（図１ではプロセッサエレメント（ＣＰＵ２）４０２）が、外部割込みを受付けないか、または当面受付け不可に設定できるかを判断し、ここでは外部割込みを当面受付け不可に設定する。なお、外部割込みを受付ける（第２の実施の形態で後述）には、タスクのスケジューリングへの影響やタスクのデッドラインを考慮する必要があり、この判断はグローバルリソース制御部（ＣＲＣＬ）５１２で行う。これがＯＫ（Ｙ）ならばステップ８０３へ、ＮＧ（Ｎ）ならばＳｌｅｅｐは不可となる（ステップ８０５）。
【００５３】
ステップ８０３において、Ｓｌｅｅｐ対象プロセッサが次に必要となるまでの時間ＩｎｔＴを、ステップ８０７のタスクのガントチャート（この例では図７）から判断して、ＩｎｔＴがＳｌｅｅｐと復帰の処置時間Ｒ＿ＩｎｔＴ以上かどうかを判断する。即ち、Ｓｌｅｅｐを実現するのに十分な時間があるかどうかの判断である。これがＯＫ（Ｙ）ならばＳｌｅｅｐは可能（ステップ８０４）となり、ＮＧ（Ｎ）ならばＳｌｅｅｐは不可となる（ステップ８０５）。
【００５４】
ステップ８０６において、ステップ８０５までで決定されたＳｌｅｅｐ可否の判断結果を、図１の処理４０２８にて対象プロセッサに返信する。
【００５５】
＜＜第１の実施の形態の効果＞＞
第１の実施の形態によれば、ローカルリソース制御部（ＬＲＣＬ）５０６，５０９、グローバルリソース制御部（ＣＲＣＬ）５１２などを有し、グローバルリソース制御部５１２は、ローカルリソース制御部５０６と５０９からのプロセッサエレメントの停止状態への変更の要求を受け、この停止状態への変更の可否を判断して、要求のあったローカルリソース制御部へ状態変更の可否を指示して、プロセッサエレメントの状態を制御することができる。
【００５６】
例えば、ローカルリソース制御部（ＬＲＣＬ）５０６が第１のタスクを実行する第１のプロセッサエレメント（ＣＰＵ１）４０１を制御し、ローカルリソース制御部（ＬＲＣＬ）５０９が第２のタスクを実行する第２のプロセッサエレメント（ＣＰＵ２）４０２を制御する場合に、第２のタスクを実行するプロセッサエレメント（ＣＰＵ２）４０２を停止状態にした後、第１のタスクの次に実行する第２のタスクを再度起動する必要性があることをローカルリソース制御部５０６の要求に基づき判断して、この判断に基づきプロセッサエレメント（ＣＰＵ２）４０２に対して再起動要求を出して再起動し、その後、第２のタスクをランニング状態に復帰することができる。また、第１のタスクを実行する第１のプロセッサエレメント（ＣＰＵ１）４０１を停止状態から再起動する場合も同様に、第１のタスクをランニング状態に復帰することができる。
【００５７】
従って、低電力化のために、あるプロセッサエレメントをＳｌｅｅｐまたは電源停止させても、他のプロセッサエレメント上のタスクと連携して動作させ、マルチプロセッサ全体でアプリケーションを矛盾なく動作させることができる。即ち、アプリケーションを複数のプロセッサエレメントで処理する状況で、あるタスクが予定より早く終了したとき、アプリケーションの正常動作を阻害せずに動作させることができる。この結果、複数のプロセッサに渡る処理を正常に行いつつ低電力化を実現することが可能となる。
【００５８】
また、外部割込みを受付けず、当面受付け不可に設定する場合には、プロセッサエレメント上のタスクが次に実行する必要がある時刻までの時間間隔が、プロセッサエレメントを停止状態にしてその後復帰するのに要するトータル時間よりも長いときに停止状態への変更を可能と判断することで、タスクの連携とアプリケーション全体の動作は矛盾なく実行することが可能となる。
【００５９】
＜３  第２の実施の形態：外部割込みが入ったときのタスクスケジューリング＞
外部割込みはＳｌｅｅｐ要求と同じく、当初のタスクスケジューリングに変更を要求する実行前には予測のできないダイナミックな要求である。
【００６０】
この場合には、Ｓｌｅｅｐ要求と同じく全体の管理はグローバルリソース制御部（ＣＲＣＬ）５１２で行う。但し、Ｓｌｅｅｐ要求と異なり、割込みが終了するまでの時間は、全てのタスクをウェイト状態に遷移して、割込みに必要な時間、図７に示すタスクのガントチャートがシフトするスケジューリングを実施する。
【００６１】
第２の実施の形態によれば、前記第１の実施の形態の効果に加えて、外部割込みを受付ける場合でも、常に進捗を把握しながら制御を行うために、外部からの割込みが入り当初の予定時刻より全体の進捗が狂うようなことがあっても、タスクの連携とアプリケーション全体の動作は矛盾なく実行することが可能となる。
【００６２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００６３】
本発明は、マルチプロセッサにおいて、タスクの進捗状況に応じて、クロック周波数や電圧値を動的に変更する制御方法に関する。特に、低電力化のために、クロックの周波数や電圧値を変更するだけでなく、あるプロセッサをスリープ状態に変化させたときに、この状態変化によって全体のアプリケーションの動作を矛盾なく動作させるプロセッサ状態やタスクの制御方法に利用可能である。
【図面の簡単な説明】
【００６４】
【図１】本発明の一実施の形態であるＳｌｅｅｐ状態への遷移と復帰の実行手順を表すガントチャートである。
【図２】本発明の一実施の形態であるマルチプロセッサを利用するシステムを示す構成図である。
【図３】本発明の一実施の形態であるマルチプロセッサ上で実行するアプリケーション、オーディオデコーダのデータ処理フローを示す図である。
【図４】本発明の一実施の形態であるマルチプロセッサチップを示すブロック図である。
【図５】本発明の一実施の形態である、図３のアプリケーションと制御ソフトを、図４のマルチプロセッサに搭載する一例を示すブロック図である。
【図６】本発明の一実施の形態である、図３のオーディオデコーダを、タスクを処理単位としてソフトウェアパイプラインにより実行する処理を示すガントチャートである。
【図７】本発明の一実施の形態である、図６においてタスクが予定より早く終了したときの一例の処理を示すガントチャートである。
【図８】本発明の一実施の形態である、図１のＳｌｅｅｐ可否の判断の処理を示すフロー図である。
【符号の説明】
【００６５】
２００…マルチプロセッサチップ
２０１…システムボード
２０２…水晶発信器
２０３…フラッシュメモリ
２０４…コネクタ
２０５…ハードディスク
２０６…ダイナミックランダムアクセスメモリ
２０７…オーディオコントローラ
２０８…コネクタ
２０９…ヘッドフォン
２１０…クロック入力端子
２１１…データ端子
２１２…ＨＤＤインタフェース端子
２１３…ＤＲＡＭインタフェース端子
２１４…データ端子
３０６…ソフトモジュール
３０８…ソフトモジュール
３０９…処理結果
３１０…フレームデータ
４０１…プロセッサエレメント
４０２…プロセッサエレメント
４０３…クロックジェネレータ
４０４…タスク制御プロセッサエレメント
４０５…バスアービタ
４０６…共有メモリ
４０７…周辺バス制御部
４０８…割込みコントローラ
４０９…タイマ
４１０…ＨＤＤインタフェースコントローラ
４１１…ＤＲＡＭコントローラ
４１２…データコントローラ
４１３…データコントローラ
４１４…周辺バス
５０１…プロセッサ状態レジスタ
５０２…ローカルメモリ
５０６…ローカルリソース制御部
５０７…リアルタイムＯＳ
５０９…ローカルリソース制御部
５１０…リアルタイムＯＳ
５１２…グローバルリソース制御部
５１３…リアルタイムＯＳ
【図１】
2010140151.tif 000003
【図２】
2010140151.tif 000004
【図３】
2010140151.tif 000005
【図４】
2010140151.tif 000006
【図５】
2010140151.tif 000007
【図６】
2010140151.tif 000008
【図７】
2010140151.tif 000009
【図８】
2010140151.tif 000010