(57)【特許請求の範囲】
【請求項１】
キャッシュを有する複数のプロセッサコアと、
前記各プロセッサコアに接続された外部入出力バスと、
前記外部入出力バスを介して前記各プロセッサコアからアクセス可能なメモリと、
前記各プロセッサコアに割り当てられる各タスクの前記メモリへのライトアクセス量に関する情報および前記各プロセッサコアに割り当てられる各タスクの前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報を含むプロファイル情報と、
を有するマルチコアシステムであって、前記複数のプロセッサコアのうちの一のプロセッサコアは、
前記プロファイル情報に基づいて、前記各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生しないと判断される場合、前記外部入出力バスのクロック周波数を、前記各プロセッサコアに同時に割り当てられる各タスクの前記メモリへのライトアクセス量と前記外部入出力バスのバス幅とに基づいて第１の周波数に制御し、前記各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生すると判断される場合、前記外部入出力バスのクロック周波数を前記第１の周波数よりも高い第２の周波数に制御する、
ことを特徴とするマルチコアシステム。
【請求項２】
前記第１の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち、前記各プロセッサコアに同時に割り当てられている各タスクの前記メモリへの単位時間あたりのライトアクセス量の合計値を前記外部入出力バスのバス幅で除した値以上の周波数であることを特徴とする請求項１に記載のマルチコアシステム。
【請求項３】
前記外部入出力バスの駆動電圧を、前記一のプロセッサコアにより制御されたクロック周波数で前記外部入出力バスが動作するのに必要な電圧に制御する電圧制御部、を有することを特徴とする請求項２に記載のマルチコアシステム。
【請求項４】
キャッシュを有する複数のプロセッサコアから外部入出力バスを介してメモリにアクセス可能なマルチコアシステムの前記外部入出力バスを制御する方法において、前記複数のプロセッサコアのうちの一のプロセッサコアが、
プロファイル情報として、前記各プロセッサコアに割り当てられる各タスクの前記メモリへのライトアクセス量に関する情報および前記各プロセッサコアに割り当てられる各タスクの前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報を予め用意する第１のステップと、
前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報に基づいて、前記各プロセッサコアで実行中のタスクでキャッシュミスが発生するか否かを判断する第２のステップと、
実行中のタスクでキャッシュミスが発生しないと判断される場合、前記外部入出力バスのクロック周波数を、前記各タスクの前記メモリへのライトアクセス量と前記外部入出力バスのバス幅とに基づいて第１の周波数に設定する第３のステップと、
実行中のタスクでキャッシュミスが発生すると判断される場合、前記外部入出力バスのクロック周波数を前記第１の周波数よりも高い第２の周波数に設定する第４のステップと、
を実行することを特徴とする外部入出力バス制御方法。
【請求項５】
前記第１の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち、前記各プロセッサコアに同時に割り当てられている各タスクの前記メモリへの単位時間あたりのライトアクセス量の合計値を前記外部入出力バスのバス幅で除した値以上の周波数であることを特徴とする請求項４に記載の外部入出力バス制御方法。
【請求項６】
前記一のプロセッサコアが、
前記外部入出力バスの駆動電圧を、前記第３のステップまたは前記第４のステップで設定されたクロック周波数で前記外部入出力バスが動作するのに必要な電圧に制御する第５のステップ、をさらに実行することを特徴とする請求項４に記載の外部入出力バス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチコアシステムおよび外部入出力バス制御方法に関する。
【背景技術】
【０００２】
従来、シングルコアシステムにおいて、キャッシュのヒット率を予測し、その予測したヒット率に基づいてＣＰＵのクロック周波数を制御するようにした装置がある。その予測したヒット率に応じたクロック周波数を指定する命令をプログラム中に追加する技術がある。また、シングルコアシステムにおいて、キャッシュのヒット情報を参照し、バスコントローラや外部インタフェース回路が動作する場合にそれらの回路にクロック信号を供給し、キャッシュヒットの場合にはそれらの回路へのクロック信号の供給を停止する装置がある。また、キャッシュから外部メモリにデータを書き込むライトバック処理に関し、オペレーティングシステムによって管理されるタスクが実行されていない期間にライトバック処理を実行する技術がある。また、バストラフィックやバスデバイスの温度を監視し、状況に応じてバスのクロックを設定する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−９６４７号公報
【特許文献２】特開平１１−１３４０７７号公報
【特許文献３】特開２００２−１０８７０２号公報
【特許文献４】特表２００８−５０１１９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来、複数のプロセッサコアが外部入出力（Ｉ／Ｏ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）バスを介して共通のメモリ（共有メモリ）にアクセスするマルチコアシステムで並列処理を行う場合、次のような問題点がある。各プロセッサコアでタスクを処理する際、オペレーティングシステムは、キャッシュミスが発生するか否かわからない。従って、キャッシュミスが発生した場合に共有メモリからデータを迅速に読み出すことができるように、外部入出力バスのクロック周波数は最も高い周波数に固定されている。つまり、共有メモリへのアクセス数が少ない場合や共有メモリに高速でアクセスする必要がない場合でも、外部入出力バスは高速で動作している。そのため、電力の無駄な消費が多いという問題点がある。
【０００５】
低消費電力化を図ることができるマルチコアシステムおよび外部入出力バス制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
マルチコアシステムは、複数のプロセッサコア、外部入出力バス、メモリ、プロファイル情報およびオペレーティングシステムを備える。各プロセッサコアはキャッシュを有する。外部入出力バスは各プロセッサコアに接続されている。メモリは外部入出力バスを介して各プロセッサコアからアクセス可能となっている。プロファイル情報は、プロセッサコアに割り当てられる各タスクのメモリへのライトアクセス量に関する情報を含んでいる。プロファイル情報は、キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報を含んでいる。オペレーティングシステムは、プロファイル情報に基づいて、各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生しないと判断される場合、外部入出力バスのクロック周波数を第１の周波数に制御する。第１の周波数は、各プロセッサコアに同時に割り当てられる各タスクのメモリへのライトアクセス量と外部入出力バスのバス幅とに基づいて決まる周波数である。オペレーティングシステムは、プロファイル情報に基づいて、各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生すると判断される場合、外部入出力バスのクロック周波数を第２の周波数に制御する。第２の周波数は第１の周波数よりも高い。
【０００７】
外部入出力バス制御方法は、キャッシュを有する複数のプロセッサコアから外部入出力バスを介してメモリにアクセス可能なマルチコアシステムの外部入出力バスを制御する方法である。この方法において、プロセッサコアに割り当てられる各タスクのメモリへのライトアクセス量に関する情報およびキャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報が予め用意される（第１のステップ）。次いで、キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報に基づいて、各プロセッサコアで実行中のタスクでキャッシュミスが発生するか否かが判断される（第２のステップ）。実行中のタスクでキャッシュミスが発生しないと判断される場合、外部入出力バスのクロック周波数が、各タスクのメモリへのライトアクセス量と外部入出力バスのバス幅とに基づいて第１の周波数に設定される（第３のステップ）。実行中のタスクでキャッシュミスが発生すると判断される場合、外部入出力バスのクロック周波数が第１の周波数よりも高い第２の周波数に設定される（第４のステップ）。
【発明の効果】
【０００８】
マルチコアシステムおよび外部入出力バス制御方法によれば、低消費電力化を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１にかかるマルチコアシステムを示すブロック図である。
【図２】図２は、実施例１にかかる外部入出力バス制御方法を示すフローチャートである。
【図３】図３は、実施例２にかかるマルチコアシステムを示すブロック図である。
【図４】図４は、実施例２にかかる外部入出力バス制御方法におけるマスタＯＳの処理手順を示すフローチャートである。
【図５】図５は、実施例２にかかる外部入出力バス制御方法におけるクロック周波数の導出処理手順を示すフローチャートである。
【図６】図６は、実施例２にかかる外部入出力バス制御方法におけるスレーブＯＳの処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、この発明にかかるマルチコアシステムおよび外部入出力バス制御方法の実施例を図面に基づいて詳細に説明する。以下の実施例は、マルチコアシステムにおいて、実行中のタスクでキャッシュミスが発生する場合には外部入出力バスを最速で動作させ、キャッシュミスが発生しない場合には外部入出力バスを各タスクのライトアクセス量とバス幅とで決まるクロック周波数で動作させるようにしたものである。ここでは、プロセッサコアが行う処理において意味のある一つのかたまり（処理の単位）をタスクと表現している。従って、タスクにはスレッドやプロセスなどの概念も含まれる。なお、この実施例によりこの発明が限定されるものではない。
【００１１】
（実施例１）
・マルチコアシステムの説明
図１は、実施例１にかかるマルチコアシステムを示すブロック図である。図１に示すように、マルチコアシステムは、マスタとなるプロセッサコア＃０＿１および一つ以上のスレーブとなるプロセッサコア＃ｎ＿２を備えている。各プロセッサコア１，２はキャッシュ８，１１を備えている。各プロセッサコア１，２には外部入出力バス３が接続されている。外部入出力バス３にはメモリ４が接続されている。各プロセッサコア１，２は外部入出力バス３を介してメモリ４にアクセスする。なお、図１にはスレーブとなるプロセッサコアが一つ示されているが、スレーブとなるプロセッサコアの数は二つ以上でもよい。
【００１２】
プロセッサコア＃０＿１ではオペレーティングシステム（ＯＳ：Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）７が動作する。プロセッサコア＃０＿１ではオペレーティングシステム７上でタスクＡ６が実行される。プロセッサコア＃ｎ＿２も同様であり、オペレーティングシステム（ＯＳ）１０が動作し、オペレーティングシステム１０上でタスクＮ９が実行される。各プロセッサコア１，２で同時に実行されるタスク６，９には互いに依存関係がないので、一方のタスクの出力を他方のタスクで利用するということがない。つまり、マルチコアシステムは分散処理を行う。
【００１３】
また、マスタとなるプロセッサコア＃０＿１はプロファイル情報５を有する。プロファイル情報５は、各プロセッサコア１，２に割り当てられる各タスク６，９のライトアクセス量に関する情報を含んでいる。プロファイル情報５は、各プロセッサコア１，２においてキャッシュ８，１１へのリードアクセスでキャッシュミスが発生するか否かに関する情報を含んでいる。
【００１４】
マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７は、プロファイル情報５に基づいて、各プロセッサコア１，２に同時に割り当てられる各タスク６，９の処理でキャッシュミスが発生するか否かを判断する。キャッシュミスが発生しないと判断される場合、マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７は外部入出力バス３のクロック周波数を第１の周波数に制御する。第１の周波数は、各プロセッサコア１，２に同時に割り当てられる各タスク６，９のライトアクセス量と外部入出力バス３のバス幅とに基づいて決まる周波数である。キャッシュミスが発生すると判断される場合、マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７は外部入出力バス３のクロック周波数を第２の周波数に制御する。第２の周波数は第１の周波数よりも高い。
【００１５】
・外部入出力バス制御方法の説明
図２は、実施例１にかかる外部入出力バス制御方法を示すフローチャートである。図２に示すように、外部入出力バスのクロック周波数を制御するにあたって、予め上述したプロファイル情報５が用意される（ステップＳ１）。次いで、マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７により、プロファイル情報５に基づいて、各プロセッサコア１，２で実行中のタスク６，９でキャッシュミスが発生するか否かが判断される（ステップＳ２）。
【００１６】
キャッシュミスが発生しないと判断される場合（ステップＳ２：Ｎｏ）、マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７により、外部入出力バス３のクロック周波数が上述した第１の周波数に設定される（ステップＳ３）。キャッシュミスが発生すると判断される場合（ステップＳ２：Ｙｅｓ）、マスタとなるプロセッサコア＃０＿１のオペレーティングシステム７により、外部入出力バス３のクロック周波数が上述した第２の周波数に設定される（ステップＳ４）。いずれかのプロセッサコア１，２でタスクスイッチまたはタスクディスパッチが起こり、マルチコアシステムで同時に実行されるタスクに変化が起こると、ステップＳ２からステップＳ４までを繰り返す。
【００１７】
実施例１によれば、リードアクセスにおいてキャッシュミスが発生しないと判断される場合、外部入出力バス３のクロック周波数が低速の第１の周波数に制御される。外部入出力バス３の駆動に必要な電力はクロック周波数のほぼ２乗に比例するので、クロック周波数が低速になれば消費電力を減らすことができる。その際、各タスク６，９のライトアクセス量と外部入出力バス３のバス幅とに基づいて、各タスク６，９がタスクの終了までにメモリ４へのライトアクセスを終了させることができるような第１の周波数を設定することによって、各タスク６，９はタスクの終了までにメモリ４へのライトアクセスを終了させることができる。一方、キャッシュミスが発生すると判断される場合、外部入出力バス３のクロック周波数が高速の第２の周波数に制御されるので、メモリ４からデータを高速に読み出すことができる。つまり、キャッシュミスによってマルチコアシステムでの処理が停止する時間（ストール時間）が長くなるのを防ぐことができるので、マルチコアシステムの性能が低下するのを防ぐことができる。
【００１８】
また、シングルコアシステム用の技術を単純にマルチコアシステムに転用する場合には、各プロセッサコアでキャッシュのヒットおよびミスを検出する必要があるため、繁雑になってしまう。それに対して、実施例１によれば、プロファイル情報５に基づいてキャッシュミスが発生するか否かが判断されるので、各プロセッサコアでキャッシュのヒットおよびミスを検出する必要がない。
【００１９】
（実施例２）
・マルチコアシステムの説明
図３は、実施例２にかかるマルチコアシステムを示すブロック図である。図３に示すように、マルチコアシステムは、マスタとなるプロセッサコア＃０＿２１および特に限定しないが、例えば三つのスレーブとなるプロセッサコア（＃１、＃２および＃３）２２〜２４を備えている。各プロセッサコア２１〜２４は１次キャッシュ４５，４９，５３，５７を備えている。各プロセッサコア２１〜２４には外部入出力バス２５が接続されている。外部入出力バス２５には２次キャッシュ２６が接続されている。２次キャッシュ２６およびメモリ２８はシステムバス２７に接続されている。１次キャッシュ４５，４９，５３，５７、２次キャッシュ２６およびメモリ２８の順にデータの読み出し速度が遅くなる。
【００２０】
各プロセッサコア２１〜２４ではオペレーティングシステム（ＯＳ）４３，４７，５１，５５が動作する。オペレーティングシステム４３，４７，５１，５５上では、互いにデータの依存関係のないタスク（Ａ、Ｂ、ＣおよびＤ）４２，４６，５０，５４が実行される。各オペレーティングシステム４３，４７，５１，５５にはスケジューラ４４，４８，５２，５６が存在する。各スケジューラ４４，４８，５２，５６はタスクのスケジューリングを行う。マスタとなるプロセッサコア＃０＿２１のスケジューラ４４は各プロセッサコア（＃０〜＃３）２１〜２４へタスクを割り当てる。
【００２１】
マスタとなるプロセッサコア＃０＿２１のスケジューラ４４は他のプロセッサコア（＃１、＃２および＃３）２２〜２４のスケジューラ４８，５２，５６と連携をとる。それによって、全てのスケジューラ４４，４８，５２，５６が各プロセッサコア２１〜２４に割り当てられているタスク量を把握する。
【００２２】
マスタとなるプロセッサコア＃０＿２１はプロファイル情報４１を有する。プロファイル情報４１は、各プロセッサコア２１〜２４に割り当てられる全てのタスクの単位時間あたりのライトアクセス量の情報を含んでいる。プロファイル情報４１は、各プロセッサコア２１〜２４に割り当てられる全てのタスクにおいてリードアクセス時でキャッシュミスが発生するか否かに関する情報を含んでいる。プロファイル情報４１は、例えばアプリケーションプログラムの設計段階で予めプロファイラやシミュレータにより取得されている。プロファイル情報４１は、例えばアプリケーションプログラム中に記述されており、マスタとなるプロセッサコア＃０＿２１に内蔵されたメモリ（図示省略）に格納される。
【００２３】
マスタとなるプロセッサコア＃０＿２１で動作するオペレーティングシステム４３は、プロファイル情報４１に基づいて外部入出力バス２５のクロック周波数および駆動電圧を制御する。マルチコアシステムには電圧制御部としてのパワーマネージメントユニット２９およびクロックジェネレータ３０が設けられている。クロックジェネレータ３０は、マスタとなるプロセッサコア＃０＿２１で動作するオペレーティングシステム４３の制御に従って、外部入出力バス２５のクロック周波数を設定する。パワーマネージメントユニット２９は、マスタとなるプロセッサコア＃０＿２１で動作するオペレーティングシステム４３の制御に従って、外部入出力バス２５の駆動電圧を設定する。外部入出力バス２５の駆動電圧は、外部入出力バス２５を、設定されたクロック周波数で動作させるのに必要な電圧に設定される。
【００２４】
・外部入出力バス制御方法の説明
マスタとなるプロセッサコア＃０＿２１で動作するオペレーティングシステム４３における処理手順と、スレーブとなるプロセッサコア（＃１、＃２および＃３）２２〜２４で動作するオペレーティングシステム４７，５１，５５における処理手順と、に分けて説明する。まず、マスタとなるプロセッサコア＃０＿２１で動作するオペレーティングシステム４３における処理手順について説明する。
【００２５】
図４は、実施例２にかかる外部入出力バス制御方法におけるマスタＯＳの処理手順を示すフローチャートである。図４に示すように、マルチコアシステムにおいて処理が開始されると、マスタとなるプロセッサコア＃０＿２１はユーザモードで動作する。ユーザモードにおいて、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３のスケジューラ４４は各プロセッサコア（＃０〜＃３）２１〜２４へタスクを割り当てる（ステップＳ１１）。次いで、マスタとなるプロセッサコア＃０＿２１はプロファイル情報４１を取得する（ステップＳ１２）。
【００２６】
次いで、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、いずれかのプロセッサコアでタスクのスイッチまたはディスパッチが発生したか否かを判断する（ステップＳ１３）。例えば、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、タスクのスイッチまたはディスパッチが発生したプロセッサコアからの割り込みによって、タスクのスイッチまたはディスパッチが発生したことを知ることができる。いずれのプロセッサコアでもタスクのスイッチまたはディスパッチが発生していない場合（ステップＳ１３：Ｎｏ）、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３はタスクのスイッチまたはディスパッチが発生するのを待つ。
【００２７】
いずれかのプロセッサコアでタスクのスイッチまたはディスパッチが発生すると（ステップＳ１３：Ｙｅｓ）、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、各プロセッサコア（＃０〜＃３）２１〜２４で実行するタスク（Ａ、Ｂ、ＣおよびＤ）４２，４６，５０，５４のプロファイル情報に基づいて外部入出力バス２５のクロック周波数を導出する（ステップＳ１４）。ステップＳ１４におけるクロック周波数の導出処理の詳細については後述する。
【００２８】
次いで、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は例えばデータアクセス命令を外部入出力バス２５へ発行中であるか否かを判断する（ステップＳ１５）。例えばデータアクセス命令が発行中である場合（ステップＳ１５：Ｙｅｓ）、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、例えばデータアクセス命令が外部入出力バス２５へ発行されていない状態になるまで待つ。
【００２９】
例えばデータアクセス命令が発行中でない場合、あるいは例えばデータアクセス命令が発行されていた状態から発行されていない状態になった場合（ステップＳ１５：Ｎｏ）、マスタとなるプロセッサコア＃０＿２１はスーパーバイザモードへ移行する。そして、スーパーバイザモードにおいて、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は割り込みを発生し、全てのプロセッサコア（＃０〜＃３）２１〜２４へプログラムカウンタの停止を要求する（ステップＳ１６）。
【００３０】
全てのプロセッサコア（＃０〜＃３）２１〜２４のプログラムカウンタが停止したら、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は外部入出力バス２５のクロック周波数および駆動電圧を変更する（ステップＳ１７）。具体的には、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、ステップＳ１４で導出したクロック周波数および電圧に基づいてクロックジェネレータ３０およびパワーマネージメントユニット２９へ制御信号を出力する。クロックジェネレータ３０およびパワーマネージメントユニット２９はその制御信号に基づいて外部入出力バス２５のクロック周波数および駆動電圧を設定する。
【００３１】
次いで、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は全てのプロセッサコア（＃０〜＃３）２１〜２４にプログラムカウンタの停止の解除を要求する。また、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、マスタとなるプロセッサコア＃０＿２１のプログラムカウンタの停止を解除する（ステップＳ１８）。そして、マスタとなるプロセッサコア＃０＿２１はユーザモードへ移行する。ユーザモードに復帰すると、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、マスタとなるプロセッサコア＃０＿２１に割り当てられたタスクを実行し（ステップＳ１９）、ステップＳ１３へ戻る。これ以後、ステップＳ１３からステップＳ１９までを繰り返す。
【００３２】
図５は、実施例２にかかる外部入出力バス制御方法におけるクロック周波数の導出処理手順を示すフローチャートである。図５に示すように、クロック周波数の導出処理では、まずマスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３はタスク実行テーブルを取得する（ステップＳ２１）。タスク実行テーブルには、プロセッサコア（＃０〜＃３）２１〜２４で実行中の全てのタスクの識別子が登録されているので、オペレーティングシステム４３は実行中の全てのタスクを認識することができる。タスク実行テーブルは例えばマルチコアシステムの任意のメモリに設けられていてもよい。
【００３３】
次いで、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、実行中のタスクのプロファイル情報４１に基づいて実行中のタスク群の中にキャッシュミスを発生させるタスクがあるか否か、つまりキャッシュミスが発生するか否かを判断する（ステップＳ２２）。キャッシュミスを発生させるタスクがある場合（ステップＳ２２：Ｙｅｓ）、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は外部入出力バス２５のクロック周波数として、外部入出力バス２５に設定可能なクロック周波数のうちの最も高い周波数を設定する（ステップＳ２３）。例えば外部入出力バス２５に設定可能なクロック周波数が５０Ｈｚ、１００Ｈｚ、１５０Ｈｚ、２００Ｈｚ、２５０Ｈｚおよび３００Ｈｚである場合、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は外部入出力バス２５のクロック周波数を３００Ｈｚに設定する。
【００３４】
一方、キャッシュミスを発生させるタスクがない場合（ステップＳ２２：Ｎｏ）、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、次の（１）式で表される周波数ｘ（単位：Ｈｚ）を求める。（１）式において、Ａｉはタスクｉにおけるメモリ２８への単位時間あたりのライトアクセス量（単位：ビット／秒）である。従って、ΣＡｉは実行中の全てのタスクの単位時間あたりのライトアクセス量の和である。Ｂは外部入出力バス２５のバス幅（単位：ビット）である。
【００３５】
ｘ＝ΣＡｉ／Ｂ  ・・・（１）
【００３６】
（１）式で求められる周波数ｘは外部入出力バス２５のクロック周波数の下限値である。外部入出力バス２５のクロック周波数の下限値は、実行中の全てのタスクの単位時間あたりのライトアクセス量の和（ΣＡｉ）と外部入出力バス２５の単位時間あたりのデータ転送量（ｘ×Ｂ）が等しくなる周波数である。外部入出力バス２５のクロック周波数がｘ以上であれば、実行中の全てのタスクは当該タスクの実行時間内にメモリ２８への全てのライトアクセスを終了させることができる。一般に、外部入出力バス２５に設定可能なクロック周波数は段階的に設定されている。αおよびβ（α＜β、いずれも単位はＨｚ）を外部入出力バス２５に設定可能なクロック周波数とすると、（１）式で求めたｘに対してαおよびβが次の（２）式を満たす場合、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は外部入出力バス２５のクロック周波数としてβを設定する（ステップＳ２４）。
【００３７】
α≦ｘ≦β  ・・・（２）
【００３８】
例えばプロセッサコア＃０＿２１、プロセッサコア＃１＿２２、プロセッサコア＃２＿２３およびプロセッサコア＃３＿２４でそれぞれタスクＡ４２、タスクＢ４６、タスクＣ５０およびタスクＤ５４がディスパッチされたとする。タスクＡ４２、タスクＢ４６、タスクＣ５０およびタスクＤ５４の各単位時間あたりのライトアクセス量がそれぞれ２００、４００、７００および５００であるとする。外部入出力バス２５のバス幅Ｂが２０であるとする。この場合、上記（１）式より外部入出力バス２５のクロック周波数の下限値ｘは９０（＝（２００＋４００＋７００＋５００）／２０）となる。例えば外部入出力バス２５に設定可能なクロック周波数が５０Ｈｚ、１００Ｈｚ、１５０Ｈｚ、２００Ｈｚ、２５０Ｈｚおよび３００Ｈｚである場合、上記（２）式より、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は外部入出力バス２５のクロック周波数を１００Ｈｚに設定する。
【００３９】
次いで、マスタとなるプロセッサコア＃０＿２１のオペレーティングシステム４３は、外部入出力バス２５の駆動電圧として、ステップＳ２３またはステップＳ２４で求めたクロック周波数に応じた電圧を設定する（ステップＳ２５）。具体的には、例えばクロック周波数と駆動電圧との関係を示す特性曲線が予め用意されており、この特性曲線に基づいて外部入出力バス２５のクロック周波数に応じた電圧が設定されてもよい。そして、図４に示すフローチャートのステップＳ１５へ戻る。次に、スレーブとなるプロセッサコア（＃１、＃２および＃３）２２〜２４で動作するオペレーティングシステム４７，５１，５５における処理手順について説明する。
【００４０】
図６は、実施例２にかかる外部入出力バス制御方法におけるスレーブＯＳの処理手順を示すフローチャートである。図６に示すように、マルチコアシステムにおいて処理が開始されると、スレーブとなる各プロセッサコア（＃１〜＃３）２２〜２４はユーザモードで動作する。ここでは、スレーブとなるプロセッサコア＃１＿２２における処理について説明するが、スレーブとなるプロセッサコア＃２＿２３およびプロセッサコア＃３＿２４についても同様である。
【００４１】
ユーザモードにおいて、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７はタスクのスイッチまたはディスパッチが発生したか否かを判断する（ステップＳ３１）。タスクのスイッチまたはディスパッチが発生すると（ステップＳ３１：Ｙｅｓ）、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、マスタとなるプロセッサコア＃０＿２１への割り込みを発生し、スイッチしたタスクを通知する（ステップＳ３２）。そして、ステップＳ３４へ進む。タスクのスイッチまたはディスパッチが発生していない場合（ステップＳ３１：Ｎｏ）、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、マスタとなるプロセッサコア＃０＿２１から割り込みによるプログラムカウンタの停止命令があるか否かを判断する（ステップＳ３３）。
【００４２】
プログラムカウンタの停止命令がない場合（ステップＳ３３：Ｎｏ）、ステップＳ３１に戻って、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７はタスクのスイッチまたはディスパッチが発生するのを待つ。プログラムカウンタの停止命令がある場合（ステップＳ３３：Ｙｅｓ）、ステップＳ３４へ進む。ステップＳ３４では、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は例えばデータアクセス命令を外部入出力バス２５へ発行中であるか否かを判断する。例えばデータアクセス命令が発行中である場合（ステップＳ３４：Ｙｅｓ）、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、例えばデータアクセス命令が外部入出力バス２５へ発行されていない状態になるまで待つ。
【００４３】
例えばデータアクセス命令が発行中でない場合、あるいは例えばデータアクセス命令が発行されていた状態から発行されていない状態になった場合（ステップＳ３４：Ｎｏ）、スレーブとなるプロセッサコア＃１＿２２はスーパーバイザモードへ移行する。そして、スーパーバイザモードにおいて、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、スレーブとなるプロセッサコア＃１＿２２のプログラムカウンタを停止し、停止したことをマスタとなるプロセッサコア＃０＿２１へ通知する（ステップＳ３５）。
【００４４】
次いで、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、マスタとなるプロセッサコア＃０＿２１からプログラムカウンタの停止を解除する要求があるか否かを判断する（ステップＳ３６）。プログラムカウンタの停止を解除する要求がない場合（ステップＳ３６：Ｎｏ）、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、プログラムカウンタの停止を解除する要求を受け取るのを待つ。プログラムカウンタの停止を解除する要求がある場合（ステップＳ３６：Ｙｅｓ）、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、スレーブとなるプロセッサコア＃１＿２２のプログラムカウンタの停止を解除する（ステップＳ３７）。
【００４５】
そして、スレーブとなるプロセッサコア＃１＿２２はユーザモードへ移行する。ユーザモードに復帰すると、スレーブとなるプロセッサコア＃１＿２２のオペレーティングシステム４７は、スレーブとなるプロセッサコア＃１＿２２に割り当てられたタスクを実行し（ステップＳ３８）、ステップＳ３１へ戻る。これ以後、ステップＳ３１からステップＳ３８までを繰り返す。
【００４６】
実施例２によれば、実施例１と同様の効果が得られる。なお、実施例１および２においては、マルチコアシステムとして、一つのマイクロプロセッサに複数のプロセッサコアが内蔵されているマルチコアプロセッサを例にして説明したが、複数のマイクロプロセッサを搭載したマルチプロセッサにも同様に適用することができる。マルチプロセッサに適用する場合には、上述した説明においてプロセッサコアがプロセッサとなる。実施例１または実施例２にかかるマルチコアシステムおよび外部入出力バス制御方法は、例えばマルチコアベースの組み込みシステムを有する装置、例えば携帯電話機などに適用することができる。
【００４７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００４８】
（付記１）キャッシュを有する複数のプロセッサコアと、
前記各プロセッサコアに接続された外部入出力バスと、
前記外部入出力バスを介して前記各プロセッサコアからアクセス可能なメモリと、
前記プロセッサコアに割り当てられる各タスクの前記メモリへのライトアクセス量に関する情報および前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報を含むプロファイル情報と、
前記プロファイル情報に基づいて、前記各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生しないと判断される場合、前記外部入出力バスのクロック周波数を、前記各プロセッサコアに同時に割り当てられる各タスクの前記メモリへのライトアクセス量と前記外部入出力バスのバス幅とに基づいて第１の周波数に制御し、前記各プロセッサコアに同時に割り当てられる各タスクの処理でキャッシュミスが発生すると判断される場合、前記外部入出力バスのクロック周波数を前記第１の周波数よりも高い第２の周波数に制御するオペレーティングシステムと、
を備えることを特徴とするマルチコアシステム。
【００４９】
（付記２）前記第１の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち、前記各プロセッサコアに同時に割り当てられている各タスクの前記メモリへの単位時間あたりのライトアクセス量の合計値を前記外部入出力バスのバス幅で除した値以上の周波数であることを特徴とする付記１に記載のマルチコアシステム。
【００５０】
（付記３）前記第２の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち最も高い周波数であることを特徴とする付記１に記載のマルチコアシステム。
【００５１】
（付記４）前記外部入出力バスの駆動電圧を、前記オペレーティングシステムにより設定されたクロック周波数で前記外部入出力バスが動作するのに必要な電圧に制御する電圧制御部、を備えることを特徴とする付記２または３に記載のマルチコアシステム。
【００５２】
（付記５）キャッシュを有する複数のプロセッサコアから外部入出力バスを介してメモリにアクセス可能なマルチコアシステムの前記外部入出力バスを制御する方法において、
プロファイル情報として、前記プロセッサコアに割り当てられる各タスクの前記メモリへのライトアクセス量に関する情報および前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報を予め用意する第１のステップと、
前記キャッシュへのリードアクセスでキャッシュミスが発生するか否かに関する情報に基づいて、前記各プロセッサコアで実行中のタスクでキャッシュミスが発生するか否かを判断する第２のステップと、
実行中のタスクでキャッシュミスが発生しないと判断される場合、前記外部入出力バスのクロック周波数を、前記各タスクの前記メモリへのライトアクセス量と前記外部入出力バスのバス幅とに基づいて第１の周波数に設定する第３のステップと、
実行中のタスクでキャッシュミスが発生すると判断される場合、前記外部入出力バスのクロック周波数を前記第１の周波数よりも高い第２の周波数に設定する第４のステップと、
を含むことを特徴とする外部入出力バス制御方法。
【００５３】
（付記６）前記第１の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち、前記各プロセッサコアに同時に割り当てられている各タスクの前記メモリへの単位時間あたりのライトアクセス量の合計値を前記外部入出力バスのバス幅で除した値以上の周波数であることを特徴とする付記５に記載の外部入出力バス制御方法。
【００５４】
（付記７）前記第２の周波数は、前記外部入出力バスに設定可能なクロック周波数のうち最も高い周波数であることを特徴とする付記５に記載の外部入出力バス制御方法。
【００５５】
（付記８）前記外部入出力バスの駆動電圧を、前記第３のステップまたは前記第４のステップで設定されたクロック周波数で前記外部入出力バスが動作するのに必要な電圧に制御する第５のステップ、をさらに含むことを特徴とする付記５に記載の外部入出力バス制御方法。
【符号の説明】
【００５６】
１，２  プロセッサコア
３  外部入出力バス
４  メモリ
５  プロファイル情報
６，９  タスク
７，１０  オペレーティングシステム
８，１１  キャッシュ
２９  電圧制御部
【図１】
0005633564.tif 000002
【図２】
0005633564.tif 000003
【図３】
0005633564.tif 000004
【図４】
0005633564.tif 000005
【図５】
0005633564.tif 000006
【図６】
0005633564.tif 000007