(57)【要約】  利用シーンごとに稼働ＣＰＵ数とクロックの周波数とがテーブルに記憶されている。ＯＳが、利用シーンが切り替わるごとにテーブルから稼働ＣＰＵ数とクロックの周波数を取得する。たとえば、メール中には、稼働ＣＰＵ数を２とし、稼働中のＣＰＵに供給するクロックの周波数を３００［ＭＨｚ］とする。そして、メール中に端末が閉じられると、ＯＳが、テーブルから端末が閉じられるイベントに対応する稼働ＣＰＵ数とクロックの周波数を取得する。稼働ＣＰＵ数は３であり、周波数は１００［ＭＨｚ］である。ＯＳが、稼働ＣＰＵ数分のＣＰＵに取得した周波数のクロックを供給し、稼働ＣＰＵ数分のＣＰＵで実行中のプログラムを実行する。
2012108058.tif 000002
【特許請求の範囲】
【請求項１】
第１処理から第２処理への変更を検出し、
メモリから前記第２処理を実行するＣＰＵの数と動作周波数とを取得し、
前記ＣＰＵの数に基づいて、稼働中のＣＰＵを停止しまたは停止中のＣＰＵを起動し、
前記第２処理を実行するＣＰＵに前記動作周波数を割り当てること
を特徴とするスケジューリング方法。
【請求項２】
前記稼働中のＣＰＵの数が前記ＣＰＵの数より多い場合、前記稼働中のＣＰＵから前記ＣＰＵの数を超える数分のＣＰＵを停止させること
を特徴とする請求項１に記載のスケジューリング方法。
【請求項３】
前記稼働中のＣＰＵの数が前記ＣＰＵの数分より少ない場合、不足分のＣＰＵを起動させること
を特徴とする請求項１に記載のスケジューリング方法。
【請求項４】
さらに、前記メモリから前記第２処理を実行するＣＰＵの数と動作周波数と電源電圧の値を取得し、
前記ＣＰＵの数に基づいて、動作中のＣＰＵを停止しまたは停止中のＣＰＵを起動し、
前記第２処理を実行するＣＰＵに前記動作周波数と前記電源電圧の値を割り当てること
を特徴とする請求項１乃至請求項３のいずれか一に記載のスケジューリング方法。
【請求項５】
第１処理を実行するときの、第１数個のＣＰＵの第１稼働時間と第１停止時間とを測定し、
第１最小動作周波数より大きい第１動作周波数を設定し、
前記第１稼働時間と前記第１停止時間とに基づいて、前記第１動作周波数で動作する前記第１数個のＣＰＵの第１消費電力を算出し、
前記第１処理を実行するときの、前記第１数個とは異なる第２数個のＣＰＵの第２稼働時間と第２停止時間とを測定し、
第２最小動作周波数より大きい第２動作周波数を設定し、
前記第２稼働時間と前記第２停止時間とに基づいて、前記第２動作周波数で動作する前記第２数個のＣＰＵの第２消費電力を算出し、
前記第１消費電力と前記第２消費電力との比較結果に基づいて、前記第１処理実行時のＣＰＵの数を決定すること
を特徴とする設計支援方法。
【請求項６】
前記第１最小動作周波数は、前記第１処理を１個のＣＰＵで処理するときの稼働時間と前記第１稼働時間と所定動作周波数とに基づいて算出され、
前記第２最小動作周波数は、前記第１処理を１個のＣＰＵで処理するときの稼働時間と前記第２稼働時間と前記所定動作周波数とに基づいて算出されること
を特徴とする請求項５に記載の設計支援方法。
【請求項７】
複数のＣＰＵと、
複数の処理のそれぞれについて処理を実行するＣＰＵの数と動作周波数とを記憶するメモリと、
前記ＣＰＵの数に基づいて、動作中のＣＰＵを停止しまたは停止中のＣＰＵを起動するスケジューリング部と、
前記ＣＰＵの数分のＣＰＵに前記動作周波数を設定する制御部と、
を含むことを特徴とするシステム。
【請求項８】
前記スケジューリング部は、
前記稼働中のＣＰＵの数が前記ＣＰＵの数より多い場合、前記稼働中のＣＰＵから前記ＣＰＵの数を超える数分のＣＰＵを停止すること
を特徴とする請求項７に記載のシステム。
【請求項９】
前記スケジューリング部は、
前記稼働中のＣＰＵの数が前記ＣＰＵの数分より少ない場合、不足分のＣＰＵを起動すること
を特徴とする請求項７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行をスケジューリングするスケジューリング方法、およびシステムに関する。また、本発明は、システムの設計を支援する設計支援方法に関する。
【背景技術】
【０００２】
従来、マルチコアプロセッサシステムにおいて、負荷ピーク時の発熱量を抑制させる技術として、単位時間当たりの消費電力が均一になるようにスケジューリングする技術が知られている（たとえば、下記特許文献１参照。）。【０００３】
また、従来、マルチコアプロセッサシステムにおいて、消費電力を削減する技術として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）へ供給するクロック周波数と電源電圧を動的に変更するＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ）が知られている。さらに、マルチコアプロセッサでは、ある処理を複数のＣＰＵに分散して実行することにより、処理時間を高速化することができる。【０００４】
そこで、マルチコアプロセッサシステムによる処理時間が稼働ＣＰＵ数に比例するとして、稼働ＣＰＵ数ごとに処理時間と消費電力を算出し、最適な稼働ＣＰＵ数と電源電圧の値とクロックの周波数を決定する技術（以下、「従来技術１」と称する。）が知られている（たとえば、下記特許文献２参照。）。しかしながら、マルチコアプロセッサシステムを用いて処理を並列化すると、実際には並列化オーバーヘッドが存在するため、稼働ＣＰＵ数に比例して、処理時間を高速化させることができない。【０００５】
図２３は、並列化オーバーヘッド例を示す説明図である。並列化オーバーヘッドの要因には大きく二つある。一つはプログラム全体が並列に動作できるわけではないためである。たとえば、プログラムには、並列化不可部分と並列化可能部分とがある。たとえば、１ＣＰＵで動かした時の実行時間のうち並列化不可部分が１０［％］あると、ＣＰＵが複数あったとしても、並列動作不可能な１０［％］の部分が邪魔して１０倍以上の性能は出ないことになる。【０００６】
もう一つは、並列処理をおこなう際に一つの処理を分割して複数のＣＰＵでおこなうと、ＣＰＵをまたがった処理の間で同期や通信をおこなう必要があるためである（図２３では、同期／通信部分である。）。１ＣＰＵの実行では不要だった同期や通信の処理が２ＣＰＵ以上で実行する場合には追加される。さらに、２ＣＰＵ以上で実行する場合には、一のＣＰＵが並列化不可部分の実行中には他のＣＰＵはアイドル処理となる（アイドル部分）。【０００７】
図２４は、並列化オーバーヘッドの影響例を示す説明図である。グラフでは、縦軸が性能であり、横軸がＣＰＵ数である。ここでは、稼働ＣＰＵ数が１のときの性能を１とした場合に、稼働ＣＰＵ数の増加によってどのくらい性能が向上するかを示している。ここでの性能とは処理時間である。たとえば、処理時間が４０［ｍｓ］から２０［ｍｓ］になると、性能が２倍になったことを示す。グラフ中の理想値では、稼働ＣＰＵ数の増加と性能の増加が比例している。しかしながら、グラフ中の実性能では、稼働ＣＰＵ数が増加すればするほど、性能の向上が鈍化する。【０００８】
そこで、アプリケーションを解析して各ＣＰＵの空き時間を特定し、最高性能を維持しつつＤＶＦＳを用いてＣＰＵへ供給するクロックの周波数を変更することで、消費電力を削減する技術（以下、「従来技術２」と称する。）が知られている（たとえば、下記特許文献３参照。）。たとえば、従来技術２では、処理Ａ、処理Ｂ、処理Ｃの三つの処理があり、処理Ｃが処理Ａと処理Ｂの結果を利用するため、この二つの処理が終了していないと開始できないとする。このとき、基準周波数では処理Ａが５秒、処理Ｂが１０秒で終了するとした場合、処理Ａと処理Ｂを別々のＣＰＵで実行したとして、処理Ａを実行するＣＰＵへ供給する処理Ａを実行中のクロックの周波数を基準周波数の半分にしても処理Ｃの開始時刻は変わらない。よって、ＤＶＦＳにより消費電力の削減が可能となる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第３５６７３５４号公報
【特許文献２】特開２００５−８５１６４号公報
【特許文献３】特開２００６−２９３７６８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、従来技術２では、複数のアプリケーションが同時に実行された場合、どのように空き時間が変化するか不明であるため、クロックの周波数を変更することができない問題点があった。また、携帯電話を例に挙げると、利用者がメールを長時間掛けて作成している最中などには性能はあまり重要ではなく、プロセッサをまたがった同期や通信によるオーバーヘッドを考慮すると並列化を行わない方がかえって効率が良い可能性がある。しかしながら、従来技術２ではそのような点は考慮されておらず、全てのＣＰＵを最大限活用して並列処理を行おうとするため、従来技術２を用いると消費電力が増加する問題点があった。【００１１】
本発明は、上述した従来技術による問題点を解消するため、一定以上の性能を保ちつつ、消費電力を減少させることができるスケジューリング方法、およびシステムを提供することを目的とする。また、本発明は、消費電力が最も少ない稼働ＣＰＵ数とクロック周波数の組み合わせを容易に特定することができ、システムの設計期間を短縮化することができる設計支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、本発明の一の側面によれば、第１処理から第２処理への変更を検出し、メモリから前記第２処理を実行するＣＰＵの数と動作周波数とを取得し、前記ＣＰＵの数に基づいて、稼働中のＣＰＵを停止しまたは停止中のＣＰＵを起動し、前記第２処理を実行するＣＰＵに前記動作周波数を割り当てるスケジューリング方法、およびシステムが提案される。【００１３】
また、本発明の他の側面によれば、第１処理を実行するときの、第１数個のＣＰＵの第１動作時間と第１停止時間とを測定し、第１最小動作周波数より大きい第１動作周波数を設定し、前記第１動作時間と前記第１停止時間とに基づいて、前記第１動作周波数で動作する前記第１数個のＣＰＵの第１消費電力を算出し、前記第１処理を実行するときの、前記第１数個とは異なる第２数個のＣＰＵの第２動作時間と第２停止時間とを測定して、第２最小動作周波数より大きい第２動作周波数を設定し、前記第２動作時間と前記第２停止時間とに基づいて、前記第２動作周波数で動作する前記第２数個のＣＰＵの第２消費電力を算出し、前記第１消費電力と前記第２消費電力との比較結果に基づいて、前記第１処理実行時のＣＰＵの数を決定する設計支援方法が提案される。
【発明の効果】
【００１４】
本発明の一の側面によれば、一定以上の性能を保ちつつ、消費電力を減少させることができるという効果を奏する。また、本発明の他の側面によれば、消費電力が最も少ない稼働ＣＰＵ数とクロック周波数の組み合わせを容易に特定することができるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明の一例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア例を示す説明図である。
【図３】図３は、実施の形態１にかかる設計支援装置のハードウェア例を示すブロック図である。
【図４】図４は、実施の形態１にかかる設計支援装置３００の機能ブロック図を示す説明図である。
【図５】図５は、測定データの一例を示す説明図である。
【図６】図６は、ＤＶＦＳ制御情報テーブル６００の一例を示す説明図である。
【図７】図７は、実施の形態１にかかる設計支援装置３００による設計支援処理手順の一例を示すフローチャートである。
【図８】図８は、実施の形態２にかかるマルチコアプロセッサシステム２００の機能ブロック図である。
【図９】図９は、イベントの発生例を示す説明図である。
【図１０】図１０は、稼働中のＣＰＵの数が変化する例を示す説明図である。
【図１１】図１１は、実施の形態２にかかるＯＳ２２０による制御処理手順の一例を示すフローチャートである。
【図１２】図１２は、設計支援装置３００の機能ブロック図を示す説明図である。
【図１３】図１３は、稼働時間テーブル例を示す説明図である。
【図１４】図１４は、周波数・電力テーブル例を示す説明図である。
【図１５】図１５は、実施の形態３にかかる設計支援装置３００による設計支援処理手順の一例を示すフローチャートである。
【図１６】図１６は、実施の形態４にかかるマルチコアプロセッサシステム２００の機能ブロック図である。
【図１７】図１７は、複数のプログラムが同時に実行される例を示す説明図である。
【図１８】図１８は、合計稼働時間を示す説明図である。
【図１９】図１９は、消費電力が最も低くなるＣＰＵ数を特定する例を示す説明図である。
【図２０】図２０は、稼働ＣＰＵ数の変更例を示す説明図である。
【図２１】図２１は、実施の形態４にかかるＯＳ２２０による制御処理手順の一例を示すフローチャートである。
【図２２】図２２は、実施の形態４にかかるＯＳ２２０による制御処理手順の一例を示すフローチャートである。
【図２３】図２３は、並列化オーバーヘッド例を示す説明図である。
【図２４】図２４は、並列化オーバーヘッドの影響例を示す説明図である。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、本発明にかかるスケジューリング方法、設計支援方法、およびシステムの実施の形態を詳細に説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１７】
図１は、本発明の一例を示す説明図である。たとえば、利用シーンごとに稼働ＣＰＵ数とクロックの周波数とがテーブル１００に記憶されている。ここで、利用シーンとは、たとえば、利用者が動画再生や音楽再生といった特定の処理の起動や、通話やメールの着信といった機器の主要な機能の実行や、機器の開閉などの所定のイベントを実行している状態である。その機器がどのような主要機能を持つかは機器の企画段階で決められるので、主要機能に基づいて機器の利用シーンが決定される。ＯＳが、利用シーンが切り替わるごとにテーブル１００から稼働ＣＰＵ数とクロックの周波数を取得する。
【００１８】
たとえば、メール中には、稼働ＣＰＵ数を２とし、稼働中のＣＰＵに供給するクロックの周波数を３００［ＭＨｚ］とする。そして、メール中に端末が閉じられると、ＯＳが、テーブル１００から端末が閉じられるイベントに対応する稼働ＣＰＵ数とクロックの周波数を取得する。稼働ＣＰＵ数は３であり、周波数は１００［ＭＨｚ］である。ＯＳが、稼働ＣＰＵ数分のＣＰＵに取得した周波数のクロックを供給し、稼働ＣＰＵ数分のＣＰＵで実行中のプログラムを実行する。
【００１９】
ここでは、実施の形態１〜実施の形態４を用いて詳細に説明する。実施の形態１，２では、利用シーンが変化するごとに、変化後の利用シーンに応じたＣＰＵ数とクロックの周波数で動作させる例を示す。実施の形態３，４では、複数のプログラムが同時に実行された場合に、実行中のプログラムの組み合わせに応じて最適なＣＰＵ数とクロックの周波数を決定する例を示す。
【００２０】
（実施の形態１）
まず、実施の形態１では、利用シーンに応じたＣＰＵ数とクロックの周波数を設計時に特定する例を示す。
【００２１】
（マルチコアプロセッサシステムのハードウェア例）
図２は、マルチコアプロセッサシステムのハードウェア例を示す説明図である。マルチコアプロセッサシステム２００は、ＣＰＵ２０１〜ＣＰＵ２０４と、ＤＶＦＳ制御機構２０５と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０６と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０７と、フラッシュＲＯＭ２０８と、を有している。さらに、マルチコアプロセッサシステム２００は、フラッシュＲＯＭコントローラ２０９と、フラッシュＲＯＭ２１０と、ディスプレイ２１１と、キーボード２１２と、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）２１３と、を有している。各部は、バス２１４を介して接続されている。
【００２２】
まず、ＣＰＵ２０１〜ＣＰＵ２０４は、それぞれレジスタとコアとキャッシュとを有している。ＣＰＵ２０１〜ＣＰＵ２０４はＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ）型のＯＳ２２０を実行する。ＳＭＰ型のＯＳ２２０では、ＯＳ２２０の内部処理もＯＳ２２０上で動くアプリケーションプログラムも一部の例外を除いて、理論的にはすべてのＣＰＵにまたがって実行される。各処理はマルチコアプロセッサ上のいずれかのＣＰＵで実行されるが、どのＣＰＵで実行されるかは意識する必要がない。
【００２３】
そのため、ＳＭＰ型のＯＳ２２０では、稼働中のＣＰＵの数を意識する必要が無く、ＯＳ２２０が稼働中のＣＰＵに適切に処理を割り振るため、ソフトウェアは特に変更を加えなくても様々なＣＰＵ数で機器を動作させることができる。実際には、ＯＳ２２０の中核部分だけがＣＰＵごとに独立して動作し、中核部分によりＣＰＵ間で通信しながらどのＣＰＵでどの処理をおこなうかを決定している。
【００２４】
ＲＯＭ２０７と、ＲＡＭ２０６と、フラッシュＲＯＭ２０８と、フラッシュＲＯＭコントローラ２０９と、フラッシュＲＯＭ２１０とは、ＣＰＵ２０１〜ＣＰＵ２０４に共有されるメモリである。
【００２５】
フラッシュＲＯＭ２０８やＲＯＭ２０７には、ブートシーケンスが記述されたブートローダなどのプログラムが記憶されている。フラッシュＲＯＭ２０８やＲＯＭ２０７には、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアやＯＳ２２０が制御するテーブルが記憶されている。
【００２６】
ＲＡＭ２０６は、各ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭコントローラ２０９は、各ＣＰＵの制御にしたがってフラッシュＲＯＭ２１０に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２１０は、フラッシュＲＯＭコントローラ２０９の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム２００を使用するユーザがＩ／Ｆ２１３を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２１０は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２７】
ＤＶＦＳ制御機構２０５は、各ＣＰＵに電源電圧やクロックを供給する。たとえば、ＤＶＦＳ制御機構２０５がＣＰＵ２０１〜ＣＰＵ２０４へ供給可能な電源電圧の値は０．１［Ｖ］刻みで１．０［Ｖ］〜１．６［Ｖ］と０［Ｖ］である。ＤＶＦＳ制御機構２０５からＣＰＵ２０１〜ＣＰＵ２０４へそれぞれ電源配線ＶＤＤ１〜ＶＤＤ４を介して電源電圧が供給される。ＤＶＦＳ制御機構２０５がＣＰＵ２０１〜ＣＰＵ２０４へ供給可能なクロックの周波数は１００［ＭＨｚ］刻みで１００［ＭＨｚ］〜５００［ＭＨｚ］と０［Ｈｚ］である。ＤＶＦＳ制御機構２０５からＣＰＵ２０１〜ＣＰＵ２０４へそれぞれクロック配線ＣＬＫ１〜ＣＬＫ４を介してクロックが供給される。供給される電源電圧が０［Ｖ］またはクロックの周波数が０［Ｈｚ］の場合、ＣＰＵは停止状態となる。
【００２８】
ディスプレイ２１１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。さらに、ディスプレイ２１１は、タッチパネルであり、数字、各種指示などの入力のためのキーを有し、データの入力をおこなってもよい。ディスプレイ２１１は、たとえば、ＴＦＴ液晶ディスプレイ２１１などを採用することができる。キーボード２１２は、数字、各種指示などの入力のためのキーを有し、データの入力をおこなう。また、キーボード２１２は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２９】
Ｉ／Ｆ２１３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２１３は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２１３には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００３０】
（設計支援装置のハードウェア例）
図３は、実施の形態１にかかる設計支援装置のハードウェア例を示すブロック図である。設計支援装置３００は、マルチコアプロセッサシステム２００を有する機器に接続可能であって、処理時間や消費電力を計測する。図３において、設計支援装置３００は、ＣＰＵ３０１と、ＲＯＭ３０２と、ＲＡＭ３０３と、磁気ディスクドライブ３０４と、磁気ディスク３０５と、光ディスクドライブ３０６と、光ディスク３０７と、ディスプレイ３０８と、Ｉ／Ｆ３０９と、キーボード３１０と、マウス３１１と、スキャナ３１２と、プリンタ３１３と、を備えている。また、各部はバス３１５によってそれぞれ接続されている。
【００３１】
ここで、ＣＰＵ３０１は、設計支援装置３００の全体の制御を司る。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される。磁気ディスクドライブ３０４は、ＣＰＵ３０１の制御にしたがって磁気ディスク３０５に対するデータのリード／ライトを制御する。磁気ディスク３０５は、磁気ディスクドライブ３０４の制御で書き込まれたデータを記憶する。
【００３２】
光ディスクドライブ３０６は、ＣＰＵ３０１の制御にしたがって光ディスク３０７に対するデータのリード／ライトを制御する。光ディスク３０７は、光ディスクドライブ３０６の制御で書き込まれたデータを記憶したり、光ディスク３０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３３】
ディスプレイ３０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ３０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３４】
Ｉ／Ｆ３０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク３１４に接続され、このネットワーク３１４を介して他の装置に接続される。そして、Ｉ／Ｆ３０９は、ネットワーク３１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ３０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３５】
キーボード３１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス３１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３６】
スキャナ３１２は、画像を光学的に読み取り、設計支援装置３００内に画像データを取り込む。なお、スキャナ３１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ３１３は、画像データや文書データを印刷する。プリンタ３１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３７】
（実施の形態１にかかる設計支援装置３００の機能ブロック図）
図４は、実施の形態１にかかる設計支援装置３００の機能ブロック図を示す説明図である。設計支援装置３００は、測定部４０１と、周波数算出部４０２と、消費電力算出部４０３と、決定部４０４と、出力部４０５と、を有している。具体的には、たとえば、測定部４０１〜出力部４０５を有するプログラムがＲＯＭ３０２、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶されている。ＣＰＵ３０１が該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、測定部４０１〜出力部４０５の処理が実行される。
【００３８】
測定部４０１は、マルチコアプロセッサシステム２００を有する機器で対象イベントを発生させ、稼働ＣＰＵ数ごとに基準周波数における対象イベントに応じた処理を実行時の稼働時間と延べ空き時間を測定する。空き時間とはＯＳ２２０が各ＣＰＵに割り振る処理が無い状態の時間のことで、マルチコアプロセッサシステム２００の場合、空き時間はそれぞれのＣＰＵでばらばらに発生する。そのため、測定部４０１は、典型的な処理をしている間に稼働しているすべてのＣＰＵで発生する空き時間の合計を延べ空き時間として測定する。マルチコアプロセッサシステム２００において稼働時間と空き時間はＯＳ２２０が管理しているので、設計支援装置３００はＯＳ２２０に稼働時間と延べ空き時間を測定させる。
【００３９】
図５は、測定データの一例を示す説明図である。利用シーン１測定データ５０１は、ＣＰＵ数の項目と稼働時間の項目と待ち時間の項目とを有している。マルチコアプロセッサシステム２００のＣＰＵが４個であるため、ＣＰＵ数の項目には１〜４が登録されている。稼働時間の項目には利用シーン１での各ＣＰＵ数での稼働時間が登録され、待ち時間の項目には利用シーン１での各ＣＰＵ数での空き時間が登録される。
【００４０】
利用シーン２測定データ５０２は、ＣＰＵ数の項目と稼働時間の項目と待ち時間の項目とを有している。マルチコアプロセッサシステム２００のＣＰＵが４個であるため、ＣＰＵ数の項目には１〜４が登録されている。稼働時間の項目には利用シーン２での各ＣＰＵ数での稼働時間が登録され、待ち時間の項目には利用シーン２での各ＣＰＵ数での空き時間が登録される。利用シーン１測定データ５０１や利用シーン２測定データ５０２はＲＯＭ３０２、磁気ディスク３０５、光ディスク３０７などの記憶装置に記憶される。
【００４１】
図４に戻って、周波数算出部４０２は、測定部４０１により測定された指定ＣＰＵ数での稼働時間と測定部４０１により測定されたＣＰＵ数ごとの稼働時間との比率により、指定ＣＰＵ数での稼働時間を満たすことができる周波数をＣＰＵ数ごとに算出する。ここでは、指定ＣＰＵ数を１とする。具体的には、たとえば、ＣＰＵが、下記式（１）を用いてＣＰＵ数ごとに周波数を算出する。
【００４２】
周波数＝基準周波数×測定した稼働時間／指定ＣＰＵ数での稼働時間・・・（１）
【００４３】
消費電力算出部４０３は、周波数算出部４０２によりＣＰＵ数ごとに算出された周波数に応じた記憶装置に記憶された単位時間当たりの１ＣＰＵの消費電力を用いて、ＣＰＵ数ごとに消費電力量を算出する。決定部４０４は、消費電力算出部４０３によりＣＰＵ数ごとに算出された消費電力量の中で最小の消費電力量であるＣＰＵ数を対象イベントの稼働ＣＰＵ数に決定する。出力部４０５は、決定部４０４により決定された稼働ＣＰＵ数と算出された周波数とを対象イベントの識別情報に関連付けて出力する。
【００４４】
図６は、ＤＶＦＳ制御情報テーブル６００の一例を示す説明図である。ＤＶＦＳ制御情報テーブル６００は、出力結果の一例である。ＤＶＦＳ制御情報テーブル６００には、指定されたイベントごとの稼働ＣＰＵ数と周波数と電源電圧の値が定義されている。ＤＶＦＳ制御情報テーブル６００は、イベントの項目６０１と、稼働ＣＰＵ数の項目６０２と、周波数の項目６０３と、電源電圧の項目６０４と、を有している。
【００４５】
イベントの項目６０１には、利用シーン移行条件が登録される。ここでは、イベントの項目６０１には、メーラの起動、動画再生ソフトウェアの起動、ブラウザの起動、端末の閉、キーＹの押下が登録されている。稼働ＣＰＵ数の項目６０２には稼働ＣＰＵ数が登録されている。周波数の項目６０３には稼働ＣＰＵへ供給するクロックの周波数が登録されている。電源電圧の項目６０４には稼働中のＣＰＵへ供給する電源電圧が登録されている。
【００４６】
（実施の形態１にかかる設計支援装置３００による設計支援処理手順）
図７は、実施の形態１にかかる設計支援装置３００による設計支援処理手順の一例を示すフローチャートである。まず、設計支援装置３００が、稼働ＣＰＵ数が未決定な利用シーンから任意の利用シーンを設定し（ステップＳ７０１）、稼働ＣＰＵ数＝１とし（ステップＳ７０２）、稼働ＣＰＵ数と利用シーンを設定して機器を起動する（ステップＳ７０３）。ここで、機器は、上述のマルチコアプロセッサシステム２００を有している。設計支援装置３００が、稼働時間と延べ空き時間を測定し（ステップＳ７０４）、シングルコアでの性能を下回らない最小の周波数を算出する（ステップＳ７０５）。
【００４７】
設計支援装置３００が、算出した周波数でＣＰＵが動作する最小の電源電圧と算出した周波数での消費電力を測定し（ステップＳ７０６）、算出した周波数での消費電力量を算出する（ステップＳ７０７）。設計支援装置３００が、稼働ＣＰＵ数＝稼働ＣＰＵ数＋１とし（ステップＳ７０８）、稼働ＣＰＵ数＞全ＣＰＵ数であるか否かを判断する（ステップＳ７０９）。設計支援装置３００が、稼働ＣＰＵ数＞全ＣＰＵ数でないと判断した場合（ステップＳ７０９：Ｎｏ）、ステップＳ７０２へ戻る。
【００４８】
設計支援装置３００が、稼働ＣＰＵ数＞全ＣＰＵ数であると判断した場合（ステップＳ７０９：Ｙｅｓ）、消費電力量が最小となるＣＰＵ数を決定し（ステップＳ７１０）、全利用シーンでＣＰＵ数を決定したか否かを判断する（ステップＳ７１１）。設計支援装置３００が、全利用シーンでＣＰＵ数を決定していないと判断した場合（ステップＳ７１１：Ｎｏ）、ステップＳ７０１へ戻る。
【００４９】
設計支援装置３００が、全利用シーンでＣＰＵ数を決定したと判断した場合（ステップＳ７１１：Ｙｅｓ）、決定結果を出力し（ステップＳ７１２）、一連の処理を終了する。出力形式としては、たとえば、ディスプレイ３０８への表示、プリンタ３１３への印刷出力、Ｉ／Ｆ３０９による外部装置への送信がある。また、ＲＡＭ３０３、磁気ディスク３０５、光ディスク３０７などの記憶領域に記憶することとしてもよい。
【００５０】
（実施の形態２）
まず、実施の形態２では、実施の形態１で決定した各利用シーンでの稼働ＣＰＵ数とクロック周波数を用いて、利用シーンが切り替わる都度、該利用シーンに応じた稼働ＣＰＵ数とクロックの周波数で利用シーンに応じた処理を動作させる例を示す。
【００５１】
（実施の形態２にかかるマルチコアプロセッサシステム２００の機能ブロック図）
図８は、実施の形態２にかかるマルチコアプロセッサシステム２００の機能ブロック図である。実施の形態２にかかるマルチコアプロセッサシステム２００は、記憶部８０１と、イベント検出部８０２と、シーン決定部８０３と、ＤＶＦＳ制御部８０４と、スケジューリング部８０５と、を有している。
【００５２】
具体的には、たとえば、イベント検出部８０２〜スケジューリング部８０５を有するプログラムがＲＯＭ２０７などの記憶装置に記憶されている。ＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、イベント検出部８０２〜スケジューリング部８０５の処理が実行される。ここでは、該プログラムはＯＳ２２０である。
【００５３】
記憶部８０１は、複数のイベントのイベントごとに指定数のＣＰＵで実行した場合の性能を保ち、消費電力量が最も少なくなるＣＰＵ数と周波数と電源電圧の値を記憶する。具体的には、たとえば、上述のＤＶＦＳ制御情報テーブル６００がＲＯＭ２０７やフラッシュＲＯＭ２０８に記憶されている。
【００５４】
イベント検出部８０２はイベントを検出し、シーン決定部８０３は、イベント検出部８０２により検出されたイベントがＤＶＦＳ制御情報テーブル６００に登録されているイベントに含まれているか否かを判断する。イベント検出部８０２により検出されたイベント（対象イベント）がＤＶＦＳ制御情報テーブル６００に登録されているイベントであると判断された場合、ＤＶＦＳ制御部８０４は、記憶部８０１に記憶された対象イベントに関する稼働ＣＰＵ数を取得する。ＤＶＦＳ制御部８０４は、記憶部８０１に記憶された対象イベントに関する周波数を取得する。ＤＶＦＳ制御部８０４は、取得した稼働ＣＰＵ数分のＣＰＵへ取得した周波数のクロックを供給する。
【００５５】
ＤＶＦＳ制御部８０４は、マルチコアプロセッサのうちの稼働中のＣＰＵの数が稼働ＣＰＵ数分のＣＰＵより多い場合、稼働中のＣＰＵから稼働ＣＰＵ数を超える数分のＣＰＵを停止させる。ＤＶＦＳ制御部８０４は、マルチコアプロセッサのうちの稼働中のＣＰＵの数が稼働ＣＰＵ数分のＣＰＵより少ない場合、不足分のＣＰＵを起動させる。そして、スケジューリング部８０５は、稼働ＣＰＵ数分のＣＰＵで対象イベントに応じた処理を実行する。以上を踏まえて詳細な具体例を説明する。
【００５６】
図９は、イベントの発生例を示す説明図である。図９では、ＣＰＵ２０１が稼働中であるが、ＣＰＵ２０２〜ＣＰＵ２０４は停止中である。ユーザがメーラを起動すると、ＯＳ２２０が（１）メーラの起動指示を検出する。ＯＳ２２０が、（２）ＤＶＦＳ制御テーブル６００のイベントの項目６０１にメーラの起動が登録されているかを確認する。ＤＶＦＳ制御テーブル６００のイベントの項目６０１にメーラの起動が登録されているため、ＯＳ２２０が利用シーン移行条件を満たしたと判断する。
【００５７】
ＯＳ２２０が、（３）ＤＶＦＳ制御情報テーブル６００からメーラ起動に関する稼働ＣＰＵ数とクロックの周波数と電源電圧の値とを取得する。ＯＳ２２０が、現在稼働中のＣＰＵの数と取得した稼働ＣＰＵ数とを比較することで、稼働中のＣＰＵの数に変更が必要か否かを判断する。現在稼働中のＣＰＵの数は１であり、取得した稼働ＣＰＵ数は２である。よって、不足するＣＰＵ数は１である。
【００５８】
ＯＳ２２０が、稼働中のＣＰＵの数を１つ増加させるため、停止中のＣＰＵから起動させるＣＰＵを決定する。ここでは、ＣＰＵ２０２が起動するＣＰＵに決定される。ＯＳ２２０が、（４）取得した電源電圧の値と取得したクロックの周波数とをＣＰＵ２０１とＣＰＵ２０２に与えるようにＤＶＦＳ制御機構２０５を制御する。
【００５９】
図１０は、稼働中のＣＰＵの数が変化する例を示す説明図である。電源配線ＶＤＤ１と電源配線ＶＤＤ２の電源電圧の値が１．３［Ｖ］であり、クロック配線ＣＬＫ１とクロック配線ＣＬＫ２のクロックの周波数が３００［ＭＨｚ］である。電源配線ＶＤＤ３と電源配線ＶＤＤ４の電源電圧の値が０［Ｖ］であり、クロック配線ＣＬＫ３とクロック配線ＣＬＫ４のクロックの周波数が０［Ｈｚ］である。そして、ＯＳ２２０がメーラを起動する。
【００６０】
（実施の形態２にかかるＯＳ２２０による制御処理手順）
図１１は、実施の形態２にかかるＯＳ２２０による制御処理手順の一例を示すフローチャートである。まず、ＯＳ２２０が、イベントを検出したか否かを判断する（ステップＳ１１０１）。ＯＳ２２０が、イベントを検出していないと判断した場合（ステップＳ１１０１：Ｎｏ）、ステップＳ１１０１へ戻る。
【００６１】
ＯＳ２２０が、イベントを検出したと判断した場合（ステップＳ１１０１：Ｙｅｓ）、ＤＶＦＳ制御情報テーブル６００の利用シーン移行条件をチェックする（ステップＳ１１０２）。ＯＳ２２０が、検出したイベントが利用シーン移行条件に合致するか否かを判断し（ステップＳ１１０３）、合致しないと判断した場合（ステップＳ１１０３：Ｎｏ）、ステップＳ１１１２へ移行する。
【００６２】
ＯＳ２２０が、検出したイベントが利用シーン移行条件に合致すると判断した場合（ステップＳ１１０３：Ｙｅｓ）、ＤＶＦＳ制御情報テーブル６００から検出したイベントに対応する稼働ＣＰＵ数、クロックの周波数、電源電圧の値を取得する（ステップＳ１１０４）。つぎに、ＯＳ２２０が、稼働ＣＰＵ数に変更があるか否かを判断し（ステップＳ１１０５）、稼働ＣＰＵ数に変更がないと判断した場合（ステップＳ１１０５：Ｎｏ）、ステップＳ１１１１へ移行する。
【００６３】
ＯＳ２２０が、稼働ＣＰＵ数に変更があると判断した場合（ステップＳ１１０５：Ｙｅｓ）、稼働ＣＰＵ数が増加したか否かを判断する（ステップＳ１１０６）。ＯＳ２２０が、稼働ＣＰＵ数が増加したと判断した場合（ステップＳ１１０６：Ｙｅｓ）、停止中のＣＰＵから起動させるＣＰＵ（起動ＣＰＵ）を決定する（ステップＳ１１０７）。ＯＳ２２０が、起動ＣＰＵと稼働中のＣＰＵに取得した電源電圧の値と周波数のクロックとを供給させる制御をおこない（ステップＳ１１０８）、ステップＳ１１１２へ移行する。
【００６４】
ＯＳ２２０が、稼働ＣＰＵ数が増加していないと判断した場合（ステップＳ１１０６：Ｎｏ）、停止させるＣＰＵ（停止ＣＰＵ）を決定し（ステップＳ１１０９）、停止ＣＰＵの電源供給、周波数入力を停止させる制御をおこなう（ステップＳ１１１０）。ＯＳ２２０が、稼働中のＣＰＵに取得した電源電圧の値と周波数のクロックとを供給させる制御をおこなう（ステップＳ１１１１）。ステップＳ１１０３のＮｏの場合、ステップＳ１１０８、またはステップＳ１１１１のつぎに、ＯＳ２２０が、検出したイベントに応じた処理を稼働中のＣＰＵで実行し（ステップＳ１１１２）、ステップＳ１１０１へ移行する。
【００６５】
（実施の形態３）
実施の形態３では、プログラムごとに基準周波数におけるＣＰＵ数ごとの処理時間を測定し、周波数ごとに単位時間当たりの１コアの消費電力量を測定する例を示す。
【００６６】
（実施の形態３にかかる設計支援装置３００の機能ブロック図）
図１２は、設計支援装置３００の機能ブロック図を示す説明図である。設計支援装置３００は測定部１２０１と出力部１２０２とを有している。具体的には、たとえば、測定部１２０１と出力部１２０２を有するプログラムがＲＯＭ３０２、磁気ディスク３０５、や光ディスク３０７などの記憶装置に記憶されている。ＣＰＵ３０１が該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、測定部１２０１と出力部１２０２の処理が実行される。
【００６７】
測定部１２０１は、マルチコアプロセッサシステム２００を有する機器を用いて、プログラムごとに基準周波数におけるＣＰＵ数ごとの稼働時間を測定する。出力部１２０２は、測定結果とプログラムの識別情報を関連付けて出力する。図１３に出力例を示す。
【００６８】
図１３は、稼働時間テーブル例を示す説明図である。稼働時間テーブル１３００は、たとえば、メーラに関する稼働時間が登録されたテーブルであり、ＣＰＵ数ごとに該ＣＰＵ数でメーラを実行した際にかかる稼働時間が登録されている。稼働時間テーブル１３１０は、たとえば、ブラウザに関する稼働時間が登録されたテーブルであり、ＣＰＵ数ごとに該ＣＰＵ数でメーラを実行した際にかかる稼働時間が登録されている。
【００６９】
稼働時間テーブル１３００は、ＣＰＵ数の項目１３０１と、稼働時間の項目１３０２と、空き時間の項目１３０３と、を有している。ＣＰＵ数の項目１３０１には１〜４までが登録されている。稼働時間の項目１３０２には、ＣＰＵ数の項目１３０１に登録されたＣＰＵ数ごとに該ＣＰＵ数でメーラを実行した際にかかる単位時間当たりの稼働時間が登録されている。空き時間の項目１３０３には、ＣＰＵ数の項目１３０１に登録されたＣＰＵ数ごとに該ＣＰＵ数分のＣＰＵでメーラを実行した際に発生する延べ空き時間が登録されている。
【００７０】
稼働時間テーブル１３１０は、ＣＰＵ数の項目１３１１と、稼働時間の項目１３１２と、空き時間の項目１３１３と、を有している。ＣＰＵ数の項目１３１１には１〜４までが登録されている。稼働時間の項目１３１２には、ＣＰＵ数の項目１３１１に登録されたＣＰＵ数ごとに該ＣＰＵ数でブラウザを実行した際にかかる単位時間当たりの稼働時間が登録されている。空き時間の項目１３１３には、ＣＰＵ数の項目１３１１に登録されたＣＰＵ数ごとに該ＣＰＵ数分のＣＰＵでブラウザを実行した際に発生する延べ空き時間が登録されている。
【００７１】
図１２に戻って、測定部１２０１は、周波数ごとに単位時間当たりの１ＣＰＵの消費電力量を測定する。出力部１２０３は、測定結果を出力する。図１４に出力例を示す。
【００７２】
図１４は、周波数・電力テーブル例を示す説明図である。周波数・電力テーブル１４００は、周波数の項目１４０１と、電源電圧の項目１４０２と、１ＣＰＵ当たりの消費電力の項目１４０３と、を有している。周波数の項目１４０１には、各ＣＰＵに供給可能なクロックの周波数が登録されている。ここでは、周波数の項目１４０１には、１００［ＭＨｚ］、２００［ＭＨｚ］、３００［ＭＨｚ］、４００［ＭＨｚ］、５００［ＭＨｚ］が登録されている。
【００７３】
電源電圧の項目１４０２には、周波数の項目１４０１に登録された周波数でクロックが供給される際に必要な電源電圧の値が登録されている。たとえば、周波数・電力テーブル１４００では、供給されるクロックの周波数が５００［ＭＨｚ］の場合、供給される電源電圧の値は１．６［Ｖ］以上でなければ、ＣＰＵが動作しないことを示している。
【００７４】
１ＣＰＵ当たりの消費電力の項目１４０３には、供給されるクロックの周波数が周波数の項目１４０１に登録された値で、かつ供給される電源電圧の値が電源電圧の項目１４０２に登録された値である場合の１ＣＰＵ当たりの消費電力の値が登録されている。たとえば、周波数・電力テーブル１４００では、ＣＰＵに供給されるクロックの周波数が２００［ＭＨｚ］で、ＣＰＵに供給される電源電圧の値が１．１［Ｖ］である場合、１ＣＰＵ当たりの消費電力の値は４０［ｍＷ］であることを示している。
【００７５】
（実施の形態３にかかる設計支援装置３００による設計支援処理手順）
図１５は、実施の形態３にかかる設計支援装置３００による設計支援処理手順の一例を示すフローチャートである。まず、設計支援装置３００が、未測定なプログラムから任意のプログラムを選択し（ステップＳ１５０１）、稼働ＣＰＵ数＝１とし（ステップＳ１５０２）、稼働ＣＰＵ数を設定したプログラムを起動する（ステップ１５０３）。そして、設計支援装置３００が、単位時間当たりの稼働時間と延べ空き時間を測定する（ステップＳ１５０４）。
【００７６】
設計支援装置３００が、稼働ＣＰＵ数＝稼働ＣＰＵ数＋１とし（ステップＳ１５０５）、稼働ＣＰＵ数＞全ＣＰＵ数であるか否かを判断する（ステップＳ１５０６）。設計支援装置３００が、稼働ＣＰＵ数＞全ＣＰＵ数でないと判断した場合（ステップＳ１５０６：Ｎｏ）、ステップＳ１５０２へ戻る。設計支援装置３００が、稼働ＣＰＵ数＞全ＣＰＵ数であると判断した場合（ステップＳ１５０６：Ｙｅｓ）、全プログラムで測定済か否かを判断する（ステップＳ１５０７）。
【００７７】
設計支援装置３００が、全プログラムで測定済でないと判断した場合（ステップＳ１５０７：Ｎｏ）、ステップＳ１５０１へ戻る。設計支援装置３００が、全プログラムで測定済であると判断した場合（ステップＳ１５０７：Ｙｅｓ）、ＣＰＵの動作周波数を設定し（ステップＳ１５０８）、設定した動作周波数でＣＰＵが動作する最小の電源電圧と消費電力を測定する（ステップＳ１５０９）。
【００７８】
設計支援装置３００が、設定可能な全動作周波数で測定したか否かを判断する（ステップＳ１５１０）。設計支援装置３００が、設定可能な全動作周波数で測定していないと判断した場合（ステップＳ１５１０：Ｎｏ）、ステップＳ１５０８へ戻る。設計支援装置３００が、設定可能な全動作周波数で測定したと判断した場合（ステップＳ１５１０：Ｙｅｓ）、測定結果を出力する（ステップＳ１５１１）。
【００７９】
（実施の形態４）
つぎに、実施の形態４では、複数のプログラムが同時に実行された場合において、１ＣＰＵで実行した場合の性能を保ちつつ、最も消費電力が少なくなるＣＰＵ数と周波数を特定し、該ＣＰＵ数と周波数で複数のプログラムを動作させる例を示す。実施の形態４では、実施の形態１〜３で説明した構成と同一構成については同一符号を付し、該同一符号が付された構成の詳細な説明を省略する。
【００８０】
（実施の形態４にかかるマルチコアプロセッサシステム２００の機能ブロック図）
図１６は、実施の形態４にかかるマルチコアプロセッサシステム２００の機能ブロック図である。マルチコアプロセッサシステム２００は、記憶部１６０１と、プロセス管理部１６０２と、稼働ＣＰＵ数決定部１６０３と、ＤＶＦＳ制御部１６０４と、スケジューリング部１６０５と、を有している。
【００８１】
具体的には、たとえば、プロセス管理部１６０２〜スケジューリング部１６０５を有するプログラムがＲＯＭ２０７やフラッシュＲＯＭ２０８などの記憶装置に記憶されている。ＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、プロセス管理部１６０２〜スケジューリング部１６０５の処理が実行される。ここでは、該プログラムはＯＳ２２０である。
【００８２】
記憶部１６０１は、プログラムごとに基準周波数におけるＣＰＵ数ごとの稼働時間を記憶し、周波数ごとに単位時間当たりの１ＣＰＵの消費電力量を記憶する。具体的には、たとえば、ＲＯＭ２０７やフラッシュＲＯＭ２０８は、稼働時間テーブル１３００や稼働時間テーブル１３１０や周波数・電力テーブル１４００を記憶している。
【００８３】
プロセス管理部１６０２は、対象プログラムの起動を検出する。稼働ＣＰＵ数決定部１６０３は、対象プログラムと実行中のプログラムを実行する稼働ＣＰＵ数を決定する。稼働ＣＰＵ数決定部１６０３は、抽出部１６１１と、周波数算出部１６１２と、消費電力算出部１６１３と、決定部１６１４と、を有している。抽出部１６１１は、プロセス管理部１６０２により対象プログラムの起動が検出された場合、マルチコアプロセッサで実行中のプログラムの稼働時間をＣＰＵ数ごとに記憶部１６０１から抽出する。抽出部１６１１は、対象プログラムの稼働時間をＣＰＵ数ごとに記憶部１６０１から抽出する。
【００８４】
周波数算出部１６１２は、抽出部１６１１によりＣＰＵ数ごとに抽出された実行中のプログラムの稼働時間と対象プログラムの稼働時間との合計稼働時間との比率により、指定ＣＰＵ数の合計稼働時間を満たす周波数をＣＰＵ数ごとに算出する。
【００８５】
消費電力算出部１６１３は、周波数算出部１６１２によりＣＰＵ数ごとに算出された周波数に応じた記憶部１６０１に記憶された単位時間当たりの１ＣＰＵの消費電力に基づいて、ＣＰＵ数ごとに消費電力量を算出する。決定部１６１４は、消費電力算出部１６１３によりＣＰＵ数ごとに算出された消費電力量の中で最少の消費電力量であるＣＰＵ数を稼働ＣＰＵ数に決定する。
【００８６】
ＤＶＦＳ制御部１６０４は、稼働ＣＰＵ数決定部１６０３により決定されたＣＰＵ数分のＣＰＵへ、稼働ＣＰＵ数決定部１６０３により算出された周波数のクロックを供給する。ＤＶＦＳ制御部１６０４は、マルチコアプロセッサのうちの稼働中のＣＰＵの数が決定されたＣＰＵ数より多い場合、稼働中のＣＰＵから稼働ＣＰＵ数を超える数分のＣＰＵを停止させる。ＤＶＦＳ制御部１６０４は、マルチコアプロセッサのうちの稼働中のＣＰＵの数が、決定されたＣＰＵ数より少ない場合、不足分のＣＰＵを起動させる。そして、スケジューリング部１６０５は、決定されたＣＰＵ数分のＣＰＵで対象プログラムと実行中のプログラムを実行する。以上を踏まえて詳細に説明する。
【００８７】
図１７は、複数のプログラムが同時に実行される例を示す説明図である。マルチコアプロセッサシステム２００ではブラウザが実行中であり、稼働ＣＰＵ数は４である。利用者がメーラを起動すると、ＯＳ２２０がメーラの起動指示を検出する。そして、ＯＳ２２０が、実行中のプログラムの識別情報を取得する。ＯＳ２２０が、該識別情報を取得したプログラムに対応する稼働時間テーブルと起動指示を検出したプログラムに対応する稼働時間テーブルとを取得する。ここでは、メーラに関する稼働時間テーブル１３００とブラウザに関する稼働時間テーブル１３１０がＲＯＭ２０７やフラッシュＲＯＭ２０８などの記憶装置から読み出される。
【００８８】
図１８は、合計稼働時間を示す説明図である。ＯＳ２２０が、稼働時間テーブル１３００と稼働時間テーブル１３１０を用いてメーラとブラウザとの合計稼働時間をＣＰＵ数ごとに算出する。ＣＰＵ数が１の場合、合計稼働時間は１６５［ｍｓ］である。ＣＰＵ数が２の場合、合計稼働時間は１２５［ｍｓ］である。ＣＰＵ数が３の場合、合計稼働時間は１００［ｍｓ］である。ＣＰＵ数が４の場合、合計稼働時間は７５［ｍｓ］である。
【００８９】
図１９は、消費電力が最も低くなるＣＰＵ数を特定する例を示す説明図である。つぎに、ＯＳ２２０が、各ＣＰＵ数において、ＣＰＵ数が１の場合の稼働時間を維持可能なクロックの周波数を算出する。具体的には、たとえば、ＯＳ２２０が、下記式（２）を用いて各ＣＰＵ数におけるクロックの周波数を算出する。
【００９０】
周波数＝基準周波数×各ＣＰＵ数での全稼働時間／指定ＣＰＵ数での全稼働時間・・・（２）
【００９１】
たとえば、ここでは、基準周波数を５００［ＭＨｚ］とする。ＣＰＵ数が２の場合、式（２）による算出結果は３７８［ＭＨｚ］であり、クロックの周波数は４００［ＭＨｚ］となる。ＣＰＵ数が３の場合、式（２）による算出結果は３０３［ＭＨｚ］であり、クロックの周波数は４００［ＭＨｚ］となる。ＣＰＵ数が４の場合、式（２）による算出結果は２２７［ＭＨｚ］であり、クロックの周波数は３００［ＭＨｚ］となる。
【００９２】
ＯＳ２２０が、周波数・電力テーブル１４００を用いて、各ＣＰＵ数で実行した場合の消費電力の値を算出する。４００［ＭＨｚ］の場合の１ＣＰＵ当たりの消費電力が８５［ｍＷ］であるため、ＣＰＵ数が２の場合、全消費電力は８５×２で１７０［ｍＷ］である。ＣＰＵ数が３の場合、全消費電力は８５×３で２５５［ｍＷ］である。３００［ＭＨｚ］の場合の１ＣＰＵ当たりの消費電力が６０［ｍＷ］であるため、ＣＰＵ数が４の場合、全消費電力は６０×４で２４０［ｍＷ］である。よって、ＣＰＵ数が１の場合での性能と同一性能で消費電力が最も低くなるＣＰＵ数は２であるため、ＯＳ２２０が稼働ＣＰＵ数を２に決定する。
【００９３】
図２０は、稼働ＣＰＵ数の変更例を示す説明図である。ＯＳ２２０が、稼働ＣＰＵ数を減少させるため、停止させる停止ＣＰＵを決定する。ここでは、ＣＰＵ２０３とＣＰＵ２０４を停止ＣＰＵとする。ＯＳ２２０が、ＤＶＦＳ制御機構２０５からＣＰＵ２０３とＣＰＵ２０４へのクロック・電源電圧の供給を停止させる。ＯＳ２２０が、ＣＰＵ２０１とＣＰＵ２０２へ供給するクロックの周波数を４００［ＭＨｚ］に設定し、電源電圧の値を１．４［Ｖ］に設定する。
【００９４】
（実施の形態４にかかるＯＳ２２０による制御処理手順）
図２１と図２２は、実施の形態４にかかるＯＳ２２０による制御処理手順の一例を示すフローチャートである。まず、ＯＳ２２０が、プロセスの起動または終了を検出したか否かを判断し（ステップＳ２１０１）、プロセスの起動および終了を検出していないと判断した場合（ステップＳ２１０１：Ｎｏ）、ステップＳ２１０１へ戻る。ＯＳ２２０が、プロセスの起動または終了を検出したと判断した場合（ステップＳ２１０１：Ｙｅｓ）、稼働中のすべてのプロセスを特定する（ステップＳ２１０２）。
【００９５】
ＯＳ２２０が、特定したプロセスに対応する稼働時間テーブルを参照し（ステップＳ２１０３）、各ＣＰＵ数における稼働時間の全プロセス分の総計を算出する（ステップＳ２１０４）。ＯＳ２２０が、周波数・電力テーブル１４００から算出した各ＣＰＵ数での周波数に対応する１ＣＰＵ当たりの消費電力の値を取得し（ステップＳ２１０５）、各ＣＰＵ数における全消費電力の値を算出する（ステップＳ２１０６）。
【００９６】
ＯＳ２２０が、算出した全消費電力の値が最小となるＣＰＵ数を稼働ＣＰＵ数に決定し（ステップＳ２１０７）、稼働ＣＰＵ数に変更があるか否かを判断する（ステップＳ２１０８）。ＯＳ２２０が、稼働ＣＰＵ数に変更がないと判断した場合（ステップＳ２１０８：Ｎｏ）、ステップＳ２１０１へ移行する。
【００９７】
ＯＳ２２０が、稼働ＣＰＵ数に変更があると判断した場合（ステップＳ２１０８：Ｙｅｓ）、稼働ＣＰＵ数が増加したか否かを判断する（ステップＳ２１０９）。ＯＳ２２０が、稼働ＣＰＵ数が増加したと判断した場合（ステップＳ２１０９：Ｙｅｓ）、停止中のＣＰＵから起動させるＣＰＵ（起動ＣＰＵ）を決定する（ステップＳ２１１０）。ＯＳ２２０が、起動ＣＰＵと稼働中のＣＰＵに取得した電源電圧の値と周波数とを供給させる制御を行い（ステップＳ２１１１）、ステップＳ２１０１へ移行する。
【００９８】
ＯＳ２２０が、稼働ＣＰＵ数が増加していないと判断した場合（ステップＳ２１０９：Ｎｏ）、停止させるＣＰＵ（停止ＣＰＵ）を決定し（ステップＳ２１１２）、停止ＣＰＵの電源供給、周波数入力を停止させる制御をおこなう（ステップＳ２１１３）。ＯＳ２２０が、稼働中有のＣＰＵに取得した電源電圧の値と周波数とを供給させる制御を行い（ステップＳ２１１４）、ステップＳ２１０１へ移行する。
【００９９】
以上実施の形態１，３で説明したように、設計支援方法によれば、イベントごとに消費電力量が最小となる稼働ＣＰＵ数とクロックの周波数の組み合わせを特定する。これにより、消費電力量が最小となる稼働ＣＰＵ数とクロックの周波数でシステムを運用することができる。
【０１００】
また、イベントごとにイベントに応じた処理を１ＣＰＵで実行した場合の稼働時間と基準周波数とに基づいてクロックの周波数を算出する。これにより、１ＣＰＵで実行した場合の性能を維持することができる。
【０１０１】
以上実施の形態２で説明したように、スケジューリング方法、およびシステムによれば、所定イベントごとに稼働ＣＰＵ数とクロックの周波数とをメモリに記憶する。そして、所定イベントが発生する都度、稼働ＣＰＵ数と周波数を切り替えて、該イベントに応じた処理を実行する。これにより、消費電力が最も少ない稼働ＣＰＵ数とクロック周波数の組み合わせにより、イベントに応じた処理を実行でき、消費電力を減少させることができる。
【０１０２】
また、稼働中のＣＰＵの数が稼働ＣＰＵ数よりも多い場合、稼働中のＣＰＵから稼働ＣＰＵ数を超える数分のＣＰＵを停止させることにより、消費電力が最小となる最適なＣＰＵ数でシステムを運用することができる。
【０１０３】
また、稼働中のＣＰＵの数が稼働ＣＰＵ数分より少ない場合、不足分のＣＰＵを起動させることにより、１ＣＰＵで実行した場合の性能を維持することができる。
【０１０４】
また、所定イベントごとに稼働ＣＰＵ数とクロックの周波数と電源電圧の値とをメモリに記憶し、所定イベントが発生する都度、稼働ＣＰＵ数と周波数と電源電圧の値とを切り替えて、該イベントに応じた処理を実行する。消費電力は周波数と電源電圧の二乗に比例する。クロックの周波数を下げることにより、電源電圧を下げることができるため、消費電力量を減少させることができる。
【０１０５】
以上実施の形態４で説明したように、スケジューリング方法、およびシステムによれば、プログラムごとに各ＣＰＵ数分のＣＰＵで実行した場合の稼働時間と、周波数ごとに１ＣＰＵ当たりの消費電力量を記憶する。そして、複数のプログラムが同時に実行された場合において、１ＣＰＵで実行した場合の性能を保ちつつ、最も消費電力が少なくなる最適な稼働ＣＰＵ数と周波数を特定し、該稼働ＣＰＵ数と周波数で複数のプログラムを動作させる。これにより、消費電力量を削減することができる。
【０１０６】
また、稼働中のＣＰＵの数が稼働ＣＰＵ数よりも多い場合、稼働中のＣＰＵから稼働ＣＰＵ数を超える数分のＣＰＵを停止させることにより、消費電力が最小となる最適なＣＰＵ数でシステムを運用することができる。
【０１０７】
また、稼働中のＣＰＵの数が稼働ＣＰＵ数分より少ない場合、不足分のＣＰＵを起動させることにより、１ＣＰＵで実行した場合の性能を維持することができる。
【符号の説明】
【０１０８】
２０７  ＲＯＭ
２０８  フラッシュＲＯＭ
４０１  測定部
４０２  周波数算出部
４０３  消費電力算出部
４０４  決定部
４０５  出力部
８０１，１６０１  記憶部
８０２  イベント検出部
８０３  シーン決定部
８０４，１６０４  ＤＶＦＳ制御部
８０５，１６０５  スケジューリング部
１６０２  プロセス管理部
１６０３  稼働ＣＰＵ数決定部
２００  マルチコアプロセッサシステム
３００  設計支援装置
【図１】
2012108058.tif 000003
【図２】
2012108058.tif 000004
【図３】
2012108058.tif 000005
【図４】
2012108058.tif 000006
【図５】
2012108058.tif 000007
【図６】
2012108058.tif 000008
【図７】
2012108058.tif 000009
【図８】
2012108058.tif 000010
【図９】
2012108058.tif 000011
【図１０】
2012108058.tif 000012
【図１１】
2012108058.tif 000013
【図１２】
2012108058.tif 000014
【図１３】
2012108058.tif 000015
【図１４】
2012108058.tif 000016
【図１５】
2012108058.tif 000017
【図１６】
2012108058.tif 000018
【図１７】
2012108058.tif 000019
【図１８】
2012108058.tif 000020
【図１９】
2012108058.tif 000021
【図２０】
2012108058.tif 000022
【図２１】
2012108058.tif 000023
【図２２】
2012108058.tif 000024
【図２３】
2012108058.tif 000025
【図２４】
2012108058.tif 000026
【国際調査報告】
2012108058.tif 000027
2012108058.tif 000028
2012108058.tif 000029
2012108058.tif 000030