(57)【要約】【課題】製造コスト、実装面積を増大せずに消費電力を削減することを図ること。【解決手段】ＣＰＵ＃０とＣＰＵ＃２は、移行対象となるソフトウェアがＯＳの場合、ハイパーバイザ２０４で実行される移行部３０４によって、特定のソフトウェアをＣＰＵ＃０からＣＰＵ＃２へ移行させる。ＣＰＵ＃２は、検出部３０２によってＣＰＵ＃０から、ＣＰＵ＃０より最大の処理能力値が低いＣＰＵ＃２への、特定のソフトウェアの移行状態を検出する。検出後、ＣＰＵ＃２は、設定部３０３によって、検出部３０２にて移行状態を検出する場合、ＣＰＵ＃０の検出時点の処理能力値を、移行前よりも低い処理能力値に設定する。【選択図】図３
2014209394.tif 000002
【特許請求の範囲】
【請求項１】
イベントを処理する第１コアを複数有する第１コア群と、
前記イベントを処理する場合の最大処理能力値が前記第１コアよりも低い第２コアを、前記第１コア群に含まれる前記第１コアと同じ数有する第２コア群と、
前記第１コア群から前記第２コア群へ移行可能なイベントを示す移行イベント情報を記憶する記憶部と、
を有するマルチコアプロセッサシステムであって、前記マルチコアプロセッサシステムに実装されたいずれかのコアは、
前記第１コア群で前記移行イベント情報に対応する移行イベントが割り当てられたことを検出し、検出した前記移行イベントを前記第２コア群に移行し、移行後の前記第１コア群の処理能力値を移行前よりも低くする
マルチコアプロセッサシステム。
【請求項２】
前記いずれかのコアは、前記移行イベントを検出した場合に、前記第１コア群に対応する第１記憶部に記録された前記第１コア群の動作状態を示す情報を前記第２コア群に対応する第２記憶部に書き込む、請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
イベントを処理する第１コアを複数有する第１コア群と、前記イベントを処理する場合の最大処理能力値が前記第１コアよりも低い第２コアを、前記第１コア群に含まれる前記第１コアと同じ数有する第２コア群と、前記第１コア群から前記第２コア群へ移行可能なイベントを示す移行イベント情報を記憶する記憶部と、を有するマルチコアプロセッサシステムの制御方法であって、前記マルチコアプロセッサシステムに実装されたいずれかのコアが、
前記第１コア群で前記移行イベント情報に対応する移行イベントが割り当てられたことを検出し、
検出した前記移行イベントを前記第２コア群に移行し、
移行後の前記第１コア群の処理能力値を移行前よりも低くする
処理を実行するマルチコアプロセッサシステムの制御方法。
【請求項４】
前記いずれかのコアが、前記移行イベントを検出した場合に、前記第１コア群に対応する第１記憶部に記録された前記第１コア群の動作状態を示す情報を前記第２コア群に対応する第２記憶部に書き込む処理をさらに実行する、請求項３に記載のマルチコアプロセッサシステムの制御方法。
【請求項５】
イベントを処理する第１コアを複数有する第１コア群と、前記イベントを処理する場合の最大処理能力値が前記第１コアよりも低い第２コアを、前記第１コア群に含まれる前記第１コアと同じ数有する第２コア群と、前記第１コア群から前記第２コア群へ移行可能なイベントを示す移行イベント情報を記憶する記憶部と、を有するマルチコアプロセッサシステムの制御プログラムであって、前記マルチコアプロセッサシステムに実装されたいずれかのコアに、
前記第１コア群で前記移行イベント情報に対応する移行イベントが割り当てられたことを検出し、
検出した前記移行イベントを前記第２コア群に移行し、
移行後の前記第１コア群の処理能力値を移行前よりも低くする
処理を実行させるマルチコアプロセッサシステムの制御プログラム。
【請求項６】
前記いずれかのコアに、前記移行イベントを検出した場合に、前記第１コア群に対応する第１記憶部に記録された前記第１コア群の動作状態を示す情報を前記第２コア群に対応する第２記憶部に書き込む処理をさらに実行させる、請求項５に記載のマルチコアプロセッサシステムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電力を制御するマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムに関する。
【背景技術】
【０００２】
従来から、マルチコアプロセッサシステムには、複数のコアに同一の命令を割り当てるＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｌｅ  Ｐｒｏｃｅｓｓｏｒ）と、別々な命令を割り当てるＡＭＰ（Ａｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉｐｌｅ  Ｐｒｏｃｅｓｓｏｒ）が存在する。従来のシングルコアプロセッサ向けのソフトウェア資産をＳＭＰに継承させる場合、ソフトウェアのプログラムコードから、並列処理となる部分を抽出する作業が行われる。これにより、プログラムコード変更に伴い開発コストが増大し、信頼性も低下する可能性があった。
【０００３】
これに対し、ＡＭＰにソフトウェア資産を継承させる場合、それぞれの高負荷のソフトウェアをコアごとに分散して実行することで、プログラムコードの変更も発生せず、性能が向上するという効果があった。高負荷のソフトウェアを分散させたＡＭＰでは、全体のコントロールを司る低クロックのプロセッサコアと、高負荷の処理を高速実行する高クロックのプロセッサコアを有している。このように、複数の性能の異なるプロセッサコアを有するマルチコアプロセッサシステムを、ヘテロジニアス・マルチコアプロセッサシステムと呼ぶ。
【０００４】
また、携帯端末などの組み込み機器においては、様々な省電力技術が適用されている。省電力技術が適用される理由としては、消費電力を抑えることにより、駆動時間を延ばすことができるためである。また、同一の駆動時間でも消費電力を削減することによりバッテリーを小型化することができ、組み込み機器全体の重量、体積を小さくすることができる。
【０００５】
ヘテロジニアス・マルチコアプロセッサシステムの省電力の技術として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の負荷に応じてプログラムを動作させるＣＰＵを切り替えることで、省電力化を図るという技術が開示されている（たとえば、下記特許文献１を参照。）。
【０００６】
また、ヘテロジニアス・マルチコアプロセッサシステムにおける他の省電力の技術として、専用のＣＰＵと汎用のＣＰＵのうち、外部電源かバッテリー駆動かに応じて、プログラムを割り当てるＣＰＵを選択することで省電力化を図るという技術が開示されている（たとえば、下記特許文献２を参照。）。
【０００７】
また、ＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  ａｎｄ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ）制御を行うことにより、省電力化を図る技術が開示されている（たとえば、下記非特許文献１を参照）。ＤＶＦＳ制御とは、消費電力が電圧または周波数の値に比例するため、プログラムの実行制約時間の範囲内で可能な限り電圧および周波数の値を下げることで、消費電力を削減する技術である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平４−２１５１６８号公報
【特許文献２】特開２００８−２７６３９５号公報
【非特許文献】
【０００９】
【非特許文献１】Ｋｅｉｊｉ  Ｋｉｍｕｒａ，  Ｍａｓａｙｏｓｈｉ  Ｍａｓｅ，  Ｈｉｒｏｋｉ  Ｍｉｋａｍｉ，  Ｔａｋａｍｉｃｈｉ  Ｍｉｙａｍｏｔｏ，  Ｊｕｎ  Ｓｈｉｒａｋｏ，  ａｎｄ  Ｈｉｒｏｎｏｒｉ  Ｋａｓａｈａｒａ“ＯＳＣＡＲ  ＡＰＩ  ｆｏｒ  Ｒｅａｌ−ｔｉｍｅ  Ｌｏｗ−Ｐｏｗｅｒ  Ｍｕｌｔｉｃｏｒｅｓ  ａｎｄ  Ｉｔｓ  Ｐｅｒｆｏｒｍａｎｃｅ  ｏｎ  Ｍｕｌｔｉｃｏｒｅｓ  ａｎｄ  ＳＭＰ  Ｓｅｒｖｅｒｓ”Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ａｎｄ  Ｅｎｇｉｎｅｅｒｉｎｇ，ｖｏｌ．２，Ｎｏ．３，Ｓｅｐ．，２００９，ｐｐ．９６〜１０６
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述した従来技術において、特許文献１にかかる技術では、処理を割り当てていないＣＰＵから発生するリーク電流が存在し、特にプロセッサコアが高クロックになると、リーク電流による消費電力が増大するという問題があった。
【００１１】
また、特許文献２にかかる技術では、電源の利用形態が外部電源かバッテリー駆動かによってプログラムを割り当てるＣＰＵを選択している。バッテリー駆動の際に、省電力状態となる低性能のＣＰＵを選択することになり、バッテリーに余裕があったとしても常にプログラムの実行速度が低速となる問題点があった。
【００１２】
また、非特許文献１にかかる技術は、マルチ電源電圧が要求され、そのためには専用の回路を搭載しなければならず、製造コストや、実装面積が増大するという問題があった。さらに、非特許文献１ではマルチコアシングルスレッドの状態を対象としており、マルチスレッド動作を行うと、各スレッドがそれぞれに影響しあうため、スレッドの実行終了時間の予測が困難であるという問題があった。
【００１３】
本発明は、上述した従来技術による問題点を解消するため、製造コスト、実装面積を増大せずに消費電力を削減できるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、イベントを処理する第１コアを複数有する第１コア群と、イベントを処理する場合の最大処理能力値が第１コアよりも低い第２コアを、第１コア群に含まれる第１コアと同じ数有する第２コア群と、第１コア群から第２コア群へ移行可能なイベントを示す移行イベント情報を記憶する記憶部と、を有するマルチコアプロセッサシステムであって、マルチコアプロセッサシステムに実装されたいずれかのコアは、第１コア群で移行イベント情報に対応する移行イベントが割り当てられたことを検出し、検出した移行イベントを第２コア群に移行し、移行後の第１コア群の処理能力値を移行前よりも低くする。
【発明の効果】
【００１５】
本マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、製造コスト、実装面積を増大せずに、消費電力を削減できるという効果を奏する。
【図面の簡単な説明】
【００１６】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図２】マルチコアプロセッサシステム１００のハードウェアの一部とソフトウェアを示すブロック図である。
【図３】マルチコアプロセッサシステム１００の機能を示すブロック図である。
【図４】マルチコアプロセッサシステム１００の通常モードにおける状態を示す説明図である。
【図５】マルチコアプロセッサシステム１００の低電力モードにおける状態を示す説明図である。
【図６】マルチコアプロセッサシステム１００の通常モードにおける状態を示す説明図である。
【図７】マルチコアプロセッサシステム１００の通常モードから低電力モードへの移行の検出を示す説明図である。
【図８】マルチコアプロセッサシステム１００の通常モードから低電力モードに移行する状態を示す説明図である。
【図９】マルチコアプロセッサシステム１００の低電力モードから通常モードへ移行する状態を示す説明図である。
【図１０】マルチコアプロセッサシステム１００の低電力モードから通常モードへ復帰後の状態を示す説明図である。
【図１１】通常モードと低電力モードにおけるマルチコアプロセッサシステム１００の消費電力の一例を示す説明図である。
【図１２】ユースケーステーブル３０１の記憶内容の一例を示す説明図である。
【図１３】通常モードから低電力モードへの移行処理を示すフローチャートである。
【図１４】低電力モードから通常モードへの移行処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムの好適な実施の形態を詳細に説明する。
【００１８】
（マルチコアプロセッサシステムのハードウェア）
図１は、実施の形態にかかるマルチコアプロセッサシステムのハードウェアを示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を備えている。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を備えている。また、各部はバス１１０によってそれぞれ接続されている。
【００１９】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１の詳細は、図２にて後述する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。また、好ましくは、マルチコアプロセッサシステム１００は、性能が異なるコアを複数含む、ヘテロジニアス・マルチコアプロセッサシステムであってもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２０】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２１】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２２】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２３】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２４】
キーボード１０９は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２５】
図２は、マルチコアプロセッサシステム１００のハードウェアの一部とソフトウェアを示すブロック図である。図２で示されるハードウェアは、メモリコントローラ２０１と、ＲＡＭ１０３と、ＣＰＵｓ１０１に含まれるＣＰＵ＃０〜ＣＰＵ＃３とである。メモリコントローラ２０１と、ＣＰＵ＃０〜ＣＰＵ＃３はバス１１０によって接続されている。また、ＣＰＵ＃２とＣＰＵ＃３は、バス２０３によって接続されている。
【００２６】
メモリコントローラ２０１は、ＣＰＵ＃０〜ＣＰＵ＃３によるＲＡＭ１０３へのアクセスの制御をする。また、メモリコントローラ２０１は、ＲＡＭ１０３以外にも、ＲＯＭ１０２、フラッシュＲＯＭ１０４などのアクセスを制御してもよい。メモリコントローラ２０１は、各ＣＰＵが同時にＲＡＭ１０３にアクセスした場合に、アクセスを調停する機能を有する。
【００２７】
ＣＰＵ＃０とＣＰＵ＃１は、最大の処理能力値の高いＣＰＵ群であり、ＣＰＵ＃２とＣＰＵ＃３は、最大の処理能力値の低いＣＰＵ群である。ＣＰＵ＃０とＣＰＵ＃１は、高クロックでありローカルキャッシュメモリ容量も大きいため、演算能力が高いが、消費電力も大きくなる。ＣＰＵ＃２とＣＰＵ＃３は、低クロックであり、ローカルキャッシュメモリ容量も小さいため、演算能力は低いが、消費電力は小さくなる。
【００２８】
また、最大の処理能力値の高いＣＰＵと最大の処理能力値の低いＣＰＵを同クロックに設定した場合、最大の処理能力値の高いＣＰＵの方が、ローカルキャッシュメモリなどの搭載されている素子が多いため、消費電力が大きくなる。また、最大の処理能力値の高いＣＰＵ群のＣＰＵ＃０とＣＰＵ＃１は最大の処理能力値が等しくても異なっていてもどちらでもよい。ＣＰＵ＃２、ＣＰＵ＃３についても同様である。
【００２９】
各ＣＰＵは、ローカルキャッシュメモリを搭載し、ローカルキャッシュメモリにアクセスして演算処理を実行する。また、各ＣＰＵは、ローカルキャッシュメモリに記憶されていないデータをアクセスする際に、メモリコントローラ２０１からＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などにアクセスする。
【００３０】
図２で示されるソフトウェアは、ファイルシステム２０２と、ハイパーバイザ２０４と、ＯＳ２０５と、動画再生ソフトウェア２０６と、音楽再生ソフトウェア２０７と、ＧＵＩソフトウェア２０８と、である。また、ＯＳの一部で提供されるソフトウェアとして、図２では、システムコールライブラリ２０９、システムコールライブラリ２１０、ドライバハンドラ２１１、ドライバハンドラ２１２と、が示される。
【００３１】
ファイルシステム２０２は、ＯＳ２０５の機能によって、補助記憶装置となるフラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などに格納されたデータであるファイルのアクセスを行う機能を有している。たとえば、フラッシュＲＯＭ１０６に格納されたファイルは、ＣＰＵ＃０によってＲＡＭ１０３に読み込まれる。また、ＣＰＵ＃０によって更新されたデータは、フラッシュＲＯＭ１０６にファイルとして書き込まれる。
【００３２】
ハイパーバイザ２０４は、ハードウェア上で直接動作するプログラムである。ハイパーバイザ２０４は、ＣＰＵ内のレジスタを直接参照したり、ＣＰＵ内のレジスタの情報を読み出したり、ＣＰＵ内のＩ／Ｏ操作を行うような特殊なレジスタの情報を書き換えたりする特権命令を実行することができる。また、ハイパーバイザ２０４は、一般のプログラムでは操作できないＣＰＵのキャッシュ制御を行い、一般のプログラムでは読み書きできないメモリ上の空間を用いて動作する。また、ハイパーバイザ２０４は、ＯＳとＣＰＵの間にて位置し、前述の特徴によって、ＯＳの監視を行い、ＯＳがハングアップした際にリセットをするほか、ＯＳが何もスレッドを実行していない場合に、省電力設定にする。
【００３３】
ＯＳ２０５は、マルチコアプロセッサシステム１００を制御するプログラムである。具体的には、ＯＳ２０５は、動画再生ソフトウェア２０６〜ＧＵＩソフトウェア２０８が使用するライブラリを提供する。また、ＯＳ２０５は、ＲＯＭ１０２、ＲＡＭ１０３などのメモリの管理を行う。また、ＯＳ２０５は、ＣＰＵ＃０〜ＣＰＵ＃３が実行するソフトウェアのスケジューリング処理を行う。
【００３４】
動画再生ソフトウェア２０６は、動画ファイルをディスプレイ１０７に再生するソフトウェアである。動画再生ソフトウェア２０６が正常動作するには、実行するＣＰＵに高処理能力が求められる。音楽再生ソフトウェア２０７は、音声ファイルを再生するソフトウェアである。ＧＵＩソフトウェア２０８は、マルチコアプロセッサシステム１００の使用者とのインターフェースを担当するソフトウェアである。たとえば、ＧＵＩソフトウェア２０８は、キーボード１０９からの外部イベントを検出し、動画再生ソフトウェア２０６や、音楽再生ソフトウェア２０７の起動要求をＯＳ２０５に対して行う。
【００３５】
システムコールライブラリ２０９、システムコールライブラリ２１０は、ＯＳ２０５がアプリケーションソフトウェア等に汎用的な機能を提供するソフトウェアである。たとえば、動画再生ソフトウェア２０６は、動画ファイルを再生する際に、動画ファイルの符号化に従った復号処理を行う。たとえば、動画ファイルがＭＰＥＧ（Ｍｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ）であれば、動画再生ソフトウェア２０６は、ＭＰＥＧ復号処理を行う。ＭＰＥＧ復号処理は他のソフトウェアでも行うため、このような処理をＯＳ２０５は、システムコールライブラリとして提供してもよい。各ソフトウェアは、システムコールライブラリにアクセスすることで、汎用的な機能を実行することができる。
【００３６】
ドライバハンドラ２１１、ドライバハンドラ２１２は、ＯＳ２０５やアプリケーションソフトウェア等にハードウェアのアクセスを提供するソフトウェアである。ハードウェアの特性はハードウェアごとに異なるため、ドライバハンドラは、ハードウェア特有の処理を実行し、ＯＳ２０５に対して仕様で定められた入出力方法を提供する。たとえば、キーボード１０９にてボタンが押下されたことの割り込み信号をＣＰＵ＃０が受け、割り込み信号に対応する処理をＯＳ２０５を通じてドライバハンドラ２１２が行う。処理後、ドライバハンドラ２１２は、ＯＳ２０５に対して、ＯＳ２０５が定めたキーダウンイベントとして通知する。
【００３７】
図２では、ＯＳ２０５は、ＣＰＵ＃０、ＣＰＵ＃１上で実行されている。また、動画再生ソフトウェア２０６と、ＧＵＩソフトウェア２０８は、ＣＰＵ＃０で実行されている。また、音楽再生ソフトウェア２０７は、ＣＰＵ＃１で実行されている。システムコールライブラリ２０９、ドライバハンドラ２１１は、ＣＰＵ＃２で実行されている。システムコールライブラリ２１０、ドライバハンドラ２１２は、ＣＰＵ＃３で実行されている。
【００３８】
このように、アプリケーションソフトウェアである動画再生ソフトウェア２０６〜ＧＵＩソフトウェア２０８は、１つ１つのＣＰＵで分散されて実行されている。動画再生ソフトウェア２０６〜ＧＵＩソフトウェア２０８を複数のＣＰＵで並列実行しない理由として、従来のソフトウェアは並列性を意識してプログラムが記述されていないことが挙げられる。また、並列処理を意識して書かれていないプログラムから、並列性を抽出することは困難であり、並列処理に書き換える場合にも、開発コストの増大や信頼性の問題からリスクが大きい。このため、並列処理が適用できるソフトウェアはドライバハンドラやシステムコールライブラリなどであり、その他のソフトウェアは分散されて実行される結果となる。
【００３９】
また、本実施の形態にかかるマルチコアプロセッサシステム１００では、ＣＰＵ群を最大の処理能力値の高いＣＰＵ群と最大の処理能力値の低いＣＰＵ群というように、２つのＣＰＵグループに分類したが、３つ以上のグループに分類してもよい。たとえば、最大の処理能力値が最大のＣＰＵ群が、動画再生ソフトウェア２０６などの高負荷ソフトウェアを分散実行する。最大の処理能力値が中程度のＣＰＵ群が、ビジネスソフトウェアなどの中負荷ソフトウェアを分散実行する。最大の処理能力値が最小のＣＰＵ群が、並列処理が適用でき負荷の小さいソフトウェアを並列実行する。前述のように、実行されるソフトウェアが要求する処理能力値に応じて、ＣＰＵ群を３つ以上に分類してもよい。
【００４０】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図３は、マルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、検出部３０２と、設定部３０３と、移行部３０４と、判断部３０５と、を含む。この制御部となる機能（検出部３０２〜判断部３０５）は、記憶装置に記憶されたプログラムをＣＰＵ＃０〜ＣＰＵ＃３が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４、フラッシュＲＯＭ１０６などである。
【００４１】
また、マルチコアプロセッサシステム１００は、特定のソフトウェアを移行元のコアより最大の処理能力値が低いコアに移行可能とするイベントを記憶するデータベースとして、ＲＡＭ１０３内に格納されているユースケーステーブル３０１にアクセス可能である。ユースケーステーブル３０１の詳細は、図１２にて後述する。また、ユースケーステーブル３０１は、最大の処理能力値が高いコアに移行要求するイベントをさらに記憶してもよい。特定のソフトウェアは、たとえばＯＳである。また、特定のソフトウェアは、最大の処理能力値の高いＣＰＵ群と最大の処理能力値の低いＣＰＵ群のどちらでも実行可能なソフトウェアであってもよい。また、最大の処理能力値とは、該当のＣＰＵで設定できる最大のクロック周波数となる。
【００４２】
また、後述する検出部３０２〜終了部３０８は、最大の処理能力値の高いＣＰＵ＃０、ＣＰＵ＃１にて実行されている特定のソフトウェアを、最大の処理能力値の低いＣＰＵ＃２、ＣＰＵ＃３に移行させる場合の機能群について説明する。
【００４３】
また、移行部３０４は、起動通知部３０６と、起動部３０７、終了部３０８を含む。ＣＰＵ＃０は、判断部３０５と、起動通知部３０６を含み、ＣＰＵ＃２は、検出部３０２と、設定部３０３と、起動部３０７と、終了部３０８を含む。また、図３では、最大の処理能力値の高いＣＰＵ群の一つとしてＣＰＵ＃０を、最大の処理能力値の低いＣＰＵ群の一つとしてＣＰＵ＃２を表示しているが、他のＣＰＵも前述の機能を含んでもよい。たとえばＣＰＵ＃１も移行部３０４と起動通知部３０６を含んでもよい。また、検出部３０２、設定部３０３、判断部３０５は、ＯＳの機能によって実行され、移行部３０４は、ハイパーバイザ２０４の機能によって実行される。
【００４４】
検出部３０２は、マルチコアのうち移行元のコアから、移行元のコアより特定の処理能力値が低い移行先のコアへの、特定のソフトウェアの移行（マイグレーション）状態を検出する機能を有する。特定の処理能力値とは、コアが取り得る最大の処理能力値のことである。また特定の処理能力値は、コアの正常動作が保証できる処理能力値のうち、最大の値であってもよい。たとえば、特定の処理能力値は、コアの発熱量が許容範囲に収まることができる処理能力値のうち、最大の値であってもよい。また、検出部３０２は、移行部３０４によって移行元のコアから移行先のコアへの特定のソフトウェアの移行状態を検出してもよい。
【００４５】
たとえば、検出部３０２は、ＯＳがＣＰＵ＃０、ＣＰＵ＃１で実行されていた状態からＣＰＵ＃２、ＣＰＵ＃３に移行させられた移行状態を検出する。なお、検出結果は、ＣＰＵ＃２のレジスタ、ＲＡＭ１０３などの記憶領域に記憶される。
【００４６】
なお、移行状態を検出する検出部３０２は、図３では移行先のコアとなるＣＰＵ＃２の機能となっているが、移行元のコアとなるＣＰＵ＃０が検出部３０２を実行してもよい。また、特定のソフトウェアの移行を指示したコアが移行元のコアと移行先のコア以外として存在するならば、移行を指示したコアが検出部３０２を実行してもよい。
【００４７】
設定部３０３は、検出部３０２が移行状態を検出する場合、移行元のコアの検出時点の処理能力値を、移行前よりも低い処理能力値に設定する機能を有する。また、設定部３０３は、判断部３０５によって移行可能なイベントが発生したと判断され、かつ、検出部３０２が移行状態を検出する場合、移行元のコアの検出時点の処理能力値を、移行前よりも低い処理能力値に設定してもよい。
【００４８】
たとえば、設定部３０３は、検出部３０２がＣＰＵ＃０、ＣＰＵ＃１からＣＰＵ＃２、ＣＰＵ＃３へのＯＳの移行状態を検出すると、ＣＰＵ＃０、ＣＰＵ＃１のクロック周波数を、移行前よりも低い処理能力値に設定する。具体的には、設定部３０３は、ＣＰＵ＃０、ＣＰＵ＃１のクロック周波数を、並列実行されるシステムコールライブラリ２０９〜ドライバハンドラ２１２が実行可能である超低クロック状態に設定してもよい。なお、設定したクロック周波数の値は、ＲＡＭ１０３などの記憶領域に記憶されてもよい。
【００４９】
移行部３０４は、特定のソフトウェアが他のソフトウェアを移行元のコアから移行先のコアに移行させるソフトウェアを含む場合、特定のソフトウェアが実行中である移行元のコアから移行先のコアに、特定のソフトウェアを移行させる機能を有する。また、移行部３０４は、判断部３０５によって移行要求するイベントが発生したと判断された場合、特定のソフトウェアの移行をキャンセルし、結果的に特定のソフトウェアを移行させなくてもよい。他のソフトウェアを移行元のコアから移行先のコアに移行させるソフトウェアとは、移行処理であり、それを含む特定のソフトウェアの例としては、ＯＳである。
【００５０】
たとえば、移行部３０４は、ＣＰＵ＃２、ＣＰＵ＃３上でＯＳを起動した後に、マルチコアプロセッサシステム１００を管理するＯＳを、ＯＳ２０５から新たに起動したＯＳにスイッチした後に、ＯＳ２０５を終了させることで、ＯＳを移行させる。なお、移行させたという情報は、ＣＰＵ＃２のレジスタなどの記憶領域に記憶される。
【００５１】
判断部３０５は、特定のソフトウェアを移行元のコアより特定の処理能力値が低いコアに移行可能とするイベントを記憶するユースケーステーブル３０１から、発生したイベントが移行可能とするイベントか否かを判断する機能を有する。また、判断部３０５は、特定のソフトウェアを移行元のコアより特定の処理能力値が高いコアに移行要求するイベントを記憶するユースケーステーブル３０１から、発生したイベントが移行要求するイベントか否かを判断してもよい。
【００５２】
たとえば、判断部３０５は、マルチコアプロセッサシステム１００にて、一定期間高負荷ソフトウェアが未実行であるというイベントが発生すると、前述のイベントがユースケーステーブル３０１に登録されているかを判断する。なお、判断結果は、ＣＰＵ＃０のレジスタ、ＲＡＭ１０３などの記憶領域に記憶される。
【００５３】
起動通知部３０６は、判断部３０５によって移行可能なイベントが発生したと判断された場合、移行先のコアに特定のソフトウェアを起動させるように通知する機能を有する。たとえば、起動通知部３０６は、ハイパーバイザ２０４によってＣＰＵ＃２、ＣＰＵ＃３でＯＳを起動させるように通知する。なお、通知した内容は、ＣＰＵ＃０のレジスタなどの記憶領域に記憶される。
【００５４】
起動部３０７は、起動通知部３０６によって特定のソフトウェアの起動通知を受けた場合、特定のソフトウェアを起動する機能を有する。たとえば、起動部３０７は、ハイパーバイザ２０４によってＯＳを起動させるように通知を受けると、ＣＰＵ＃２、ＣＰＵ＃３にてＯＳをブートする。なお、ＯＳを起動させたという情報は、ＣＰＵ＃２のレジスタなどの記憶領域に記憶される。
【００５５】
終了部３０８は、起動部３０７によって移行先のコアにて特定のソフトウェアが起動完了した場合、移行元のコアにて実行中である特定のソフトウェアを終了させる機能を有する。たとえば、終了部３０８は、起動部３０７によってＣＰＵ＃２、ＣＰＵ＃３にて実行されるＯＳが起動完了した場合、ＣＰＵ＃０、ＣＰＵ＃１にて実行されるＯＳ２０５を終了させる。なお、ＯＳ２０５を終了させたという情報は、ＣＰＵ＃２のレジスタなどの記憶領域に記憶される。
【００５６】
前述の説明では、移行元のコアとなる特定の処理能力値の高いＣＰＵ＃０、ＣＰＵ＃１にて実行されている特定のソフトウェアを、移行先のコアとなる特定の処理能力値の低いＣＰＵ＃２、ＣＰＵ＃３に移行させる場合の機能群について説明した。続けて、移行元のコアとなる特定の処理能力値の低いＣＰＵ＃２、ＣＰＵ＃３にて実行されている特定のソフトウェアを、移行先のコアとなる特定の処理能力値の高いＣＰＵ＃０、ＣＰＵ＃１に移行させる場合の機能群について説明する。
【００５７】
この場合、各機能部が特定の処理能力値の高いＣＰＵと特定の処理能力値の低いＣＰＵで入れ替わった状態となる。具体的には、ＣＰＵ＃２が、判断部３０５と、起動通知部３０６を含み、ＣＰＵ＃０が、検出部３０２と、設定部３０３と、起動部３０７と、終了部３０８を含む。また、入れ替わった状態である移行部３０４とその内部の機能である起動通知部３０６と起動部３０７と終了部３０８は、入れ替わる前の機能と等しいため、説明は省略する。
【００５８】
検出部３０２は、移行元のコアより特定の処理能力値が高い移行先のコアへの、特定のソフトウェアの移行状態を検出する機能を有する。たとえば、検出部３０２は、ＯＳがＣＰＵ＃２、ＣＰＵ＃３で実行されていた状態からＣＰＵ＃０、ＣＰＵ＃１に移行させられる移行状態を検出する。なお、検出結果は、ＣＰＵ＃０のレジスタ、ＲＡＭ１０３などの記憶領域に記憶される。
【００５９】
設定部３０３は、検出部３０２が移行状態を検出する場合、移行元のコアの検出時点の処理能力値を、移行前よりも低い処理能力値に設定する機能を有する。また、設定部３０３は、さらに判断部３０５によって移行要求するイベントが発生したと判断された場合に、処理能力値を設定してもよい。たとえば、設定部３０３は、検出部３０２がＣＰＵ＃２、ＣＰＵ＃３からＣＰＵ＃０、ＣＰＵ＃１へのＯＳの移行状態を検出すると、ＣＰＵ＃２、ＣＰＵ＃３のクロック周波数を、移行前よりも低い処理能力値に設定する。なお、設定したクロック周波数の数値は、ＲＡＭ１０３などの記憶領域に記憶されてもよい。
【００６０】
判断部３０５は、特定のソフトウェアを移行元のコアより特定の処理能力値が高いコアに移行要求するイベントを記憶するユースケーステーブル３０１から、発生したイベントが移行要求するイベントか否かを判断する機能を有する。たとえば、判断部３０５は、マルチコアプロセッサシステム１００にて、高負荷ソフトウェアが起動要求されたというイベントが発生すると、前述のイベントがユースケーステーブル３０１に登録されているかを判断する。なお、判断結果は、ＣＰＵ＃２のレジスタ、ＲＡＭ１０３などの記憶領域に記憶される。
【００６１】
なお、図４〜図１４の説明では、説明を簡略化するために、特定の処理能力値は、最大の処理能力値であるとして説明を行う。
【００６２】
図４は、マルチコアプロセッサシステム１００の通常モードにおける状態を示す説明図である。図４におけるマルチコアプロセッサシステム１００では、最大の処理能力値が高いＣＰＵ＃０、ＣＰＵ＃１上にてＯＳ２０５が起動している。ＯＳ２０５を起動するＣＰＵ群をメインＣＰＵ群とし、ＯＳ２０５を起動しないＣＰＵ群をサブＣＰＵ群と呼称する。また、メインＣＰＵ群が、最大の処理能力値が高いＣＰＵ＃０、ＣＰＵ＃１となる状態を通常モードと呼称する。
【００６３】
通常モードにおけるマルチコアプロセッサシステム１００は、全体の処理の大半となる動画再生ソフトウェア２０６〜ＧＵＩソフトウェア２０８を、ＣＰＵ＃０、ＣＰＵ＃１で分散して実行する。また、マルチコアプロセッサシステム１００は、僅かに並列に処理できるシステムコールライブラリ２０９〜ドライバハンドラ２１２をＣＰＵ＃２、ＣＰＵ＃３にて並列実行している。マルチコアプロセッサシステム１００は全体として、高い処理能力値に比例した電力を消費している。
【００６４】
図５は、マルチコアプロセッサシステム１００の低電力モードにおける状態を示す説明図である。図５におけるマルチコアプロセッサシステム１００では、動画再生ソフトウェア２０６は起動しておらず、ＧＵＩソフトウェア２０８は待機状態である。この状態を検出すると、マルチコアプロセッサシステム１００は、ＣＰＵ＃２、ＣＰＵ＃３で実行中のソフトウェアをＣＰＵ＃０、ＣＰＵ＃１に移行し、移行後に最大の処理能力値が低いＣＰＵ＃２、ＣＰＵ＃３にてＯＳ２０５’を起動する。
【００６５】
ソフトウェアの移行処理を行う場合、移行元のＣＰＵは、移行対象ソフトウェア内の各スレッドが保持するコンテキスト情報、具体的にはプログラムカウンタを含むＣＰＵのレジスタ情報をＲＡＭ１０３や、ファイルシステム２０２に退避する。また、ＣＰＵのレジスタの一部であるスタックポインタで指し示されるスタック領域が、移行先のＣＰＵで参照できない領域、たとえば、移行元のＣＰＵのローカルメモリに存在するならば退避する。
【００６６】
退避後、移行元のＣＰＵは、移行先のＣＰＵに退避したアドレス領域を通知する。通知後、移行元のＣＰＵは、自身が管理するスレッド管理テーブルから、移行対象ソフトウェアのスレッドを削除する。移行先のＣＰＵは、自身が管理するスレッド管理テーブルにソフトウェアの各スレッドの情報を追加し、退避されたコンテキスト情報に基づいて、ソフトウェアの各スレッドを実行することで、ソフトウェアの移行処理を終了する。
【００６７】
ＯＳ２０５’は、ＯＳ２０５と同等の処理を行うＯＳである。またＯＳ２０５’は、最大の処理能力値が低いＣＰＵ＃２、ＣＰＵ＃３上で動作するため、ＯＳ２０５が行う処理のうち、一部の処理を行ってもよい。また、割り込み信号をＣＰＵ＃０が受けた場合、割り込み信号に対する処理を、ＯＳ２０５’を通じてたとえばドライバハンドラ２１２が行う。
【００６８】
ＯＳ２０５’が起動後に、マルチコアプロセッサシステム１００は、音楽再生ソフトウェア２０７をＣＰＵ＃１からＣＰＵ＃２に移行させる。移行後、マルチコアプロセッサシステム１００は、ＯＳ２０５を終了し、最大の処理能力値が高いＣＰＵ＃０、ＣＰＵ＃１を、供給されるクロック周波数が低下した超低クロック状態で動作させる。図５のようにメインＣＰＵ群が、最大の処理能力値が低いＣＰＵとなった状態を低電力モードと呼称する。
【００６９】
低電力モードにおけるマルチコアプロセッサシステム１００において、低電力モード移行完了後には、音楽再生ソフトウェア２０７はＣＰＵ＃２で分散実行されている。また、システムコールライブラリ２０９〜ドライバハンドラ２１２は、超低クロック状態となったＣＰＵ＃０、ＣＰＵ＃１で並列実行される。
【００７０】
このように、低電力モードにおけるマルチコアプロセッサシステム１００は、ＣＰＵ＃０とＣＰＵ＃１が並列ソフトウェアを実行できる分の処理能力を残しつつ、クロックを低下することにより、分散処理を行い、さらに消費電力を削減することができる。
【００７１】
また、ＣＰＵ＃０とＣＰＵ＃１の処理能力が、ＣＰＵ＃２とＣＰＵ＃３の処理能力と同じとなるように、ＣＰＵ＃０とＣＰＵ＃１のクロック周波数を設定しても、ＣＰＵ＃０とＣＰＵ＃１の方が、消費電力が大きいという結果になる。これは、ＣＰＵ＃０とＣＰＵ＃１の方が、キャッシュメモリ等、搭載されている素子の数が多いためである。具体的な消費電力の差については図１１にて後述する。
【００７２】
図６は、マルチコアプロセッサシステム１００の通常モードにおける状態を示す説明図である。通常モードにおけるマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃１がメインＣＰＵ群となる。ディスプレイ１０７は、動画再生ソフトウェア２０６によって動画を再生中である。動画を再生している動画再生ソフトウェア２０６と、音楽再生ソフトウェア２０７と、ＧＵＩソフトウェア２０８は、ＣＰＵ＃０、ＣＰＵ＃１にて実行されている。システムコールライブラリ２０９、システムコールライブラリ２１０、ドライバハンドラ２１１、ドライバハンドラ２１２はサブＣＰＵ群となるＣＰＵ＃２、ＣＰＵ＃３にて実行されている。
【００７３】
図７は、マルチコアプロセッサシステム１００の通常モードから低電力モードへの移行の検出を示す説明図である。図７におけるマルチコアプロセッサシステム１００は、図６にて実行していた動画再生ソフトウェア２０６の終了後一定時間が経過し、ディスプレイ１０７にて表示していた待ち受け画面が消えた状態である。待ち受け画面が消えたことにより、ＧＵＩソフトウェア２０８は待機状態である。この状態になった場合に、マルチコアプロセッサシステム１００は、ＯＳを最大の処理能力値が低いＣＰＵに移行可能であると検出する。
【００７４】
図８は、マルチコアプロセッサシステム１００の通常モードから低電力モードに移行する状態を示す説明図である。図８におけるマルチコアプロセッサシステム１００は、図７にてＯＳを最大の処理能力値が低いＣＰＵに移行可能であると検出した状態である。検出後、ＣＰＵ＃０、ＣＰＵ＃１のいずれかが、ＯＳ２０５によってシステムコールライブラリ２０９〜ドライバハンドラ２１２をＣＰＵ＃０、ＣＰＵ＃１に移行させる。移行後に、ＣＰＵ＃０、ＣＰＵ＃１のいずれかがハイパーバイザ２０４によってＯＳ２０５’を起動させる。
【００７５】
ＯＳ２０５’の起動完了後に、ＣＰＵ＃２、ＣＰＵ＃３のいずれかが、ＣＰＵ＃０、ＣＰＵ＃１で実行されているソフトウェアをＣＰＵ＃２、ＣＰＵ＃３に移行させる。図８では、ＣＰＵ＃２、ＣＰＵ＃３のいずれかが、音楽再生ソフトウェア２０７、システムコールライブラリ２０９〜ドライバハンドラ２１２を移行させる。また、ＯＳ２０５’の起動完了後、ＣＰＵ＃２、ＣＰＵ＃３のいずれかは、ＯＳ２０５を終了させる。ＯＳ２０５の終了後、ＣＰＵ＃２、ＣＰＵ＃３のいずれかが、ＣＰＵ＃０、ＣＰＵ＃１を超低クロック状態に設定する。
【００７６】
超低クロック状態に設定後、システムコールライブラリ２０９〜ドライバハンドラ２１２が発生した場合は、ＣＰＵ＃０、ＣＰＵ＃１が並列実行する。通常モードから低電力モードへの移行処理の詳細は、図１３にて後述する。
【００７７】
図９は、マルチコアプロセッサシステム１００の低電力モードから通常モードへ移行する状態を示す説明図である。図９におけるマルチコアプロセッサシステム１００は、図８にて低電力モードとなった後、高負荷なソフトウェアが起動される状態である。高負荷なソフトウェアとは動画再生ソフトウェア２０６などである。高負荷なソフトウェアの起動により、マルチコアプロセッサシステム１００は、低電力モードから通常モードへ移行を開始する。このとき、ＣＰＵ＃２、ＣＰＵ＃３はクロックを最大に設定し、移行中の間、ＧＵＩソフトウェア２０８を実行する。また、ＣＰＵ＃２、ＣＰＵ＃３は、ハイパーバイザ２０４によって、ＯＳ２０５を起動する。
【００７８】
図１０は、マルチコアプロセッサシステム１００の低電力モードから通常モードへ復帰後の状態を示す説明図である。図９におけるマルチコアプロセッサシステム１００は、図９にて低電力モードから通常モードへ移行を開始し、ＯＳ２０５を起動完了した状態である。ＯＳ２０５の起動が完了すると、動画再生ソフトウェア２０６〜ＧＵＩソフトウェア２０８はＣＰＵ＃０、ＣＰＵ＃１にて分散して実行され、システムコールライブラリ２０９〜ドライバハンドラ２１２は、ＣＰＵ＃２、ＣＰＵ＃３にて並列で実行される。また、ＣＰＵ＃０、ＣＰＵ＃１がＯＳ２０５’を終了させる。低電力モードから通常モードへの移行処理の詳細は、図１４にて後述する。
【００７９】
図１１は、通常モードと低電力モードにおけるマルチコアプロセッサシステム１００の消費電力の一例を示す説明図である。表１１０１は、最大の処理能力値が高いＣＰＵ群と最大の処理能力値が低いＣＰＵ群とが、それぞれのソフトウェアを実行する際に要求されるクロック周波数とそれに対する消費電力の例を示している。表１１０２は、表１１０１に基づいて、通常モードと低電力モードにおけるマルチコアプロセッサシステム１００の消費電力の一例を算出した表である。
【００８０】
通常モードにおけるマルチコアプロセッサシステム１００の状態は、図７で説明した状態となっている。具体的には、メインＣＰＵ群となるＣＰＵ＃０とＣＰＵ＃１は、ＯＳ２０５を実行し、さらにＣＰＵ＃１が音楽再生ソフトウェア２０７を実行し、クロック周波数が２００［ＭＨｚ］で動作している。サブＣＰＵ群となるＣＰＵ＃２とＣＰＵ＃３は、並列ソフトウェアとなるシステムコールライブラリ２０９〜ドライバハンドラ２１２を実行し、クロック周波数が２０［ＭＨｚ］で動作している。
【００８１】
同様に低電力モードにおけるマルチコアプロセッサシステム１００の状態は、図８で説明した状態となっている。具体的には、メインＣＰＵ群となるＣＰＵ＃２とＣＰＵ＃３は、ＯＳ２０５’を実行し、さらにＣＰＵ＃２が音楽再生ソフトウェア２０７を実行し、クロック周波数が２００［ＭＨｚ］で動作している。サブＣＰＵ群となるＣＰＵ＃０とＣＰＵ＃１は、並列ソフトウェアとなるシステムコールライブラリ２０９〜ドライバハンドラ２１２を実行し、クロック周波数が２０［ＭＨｚ］で動作している。表１１０１にて、同じクロック周波数であっても、最大の処理能力値が高いＣＰＵ群の方が消費電力が大きいのは、処理能力値が高い分、キャッシュメモリや素子を多く搭載し、リーク電流が多くなるため、消費電力が大きくなるためである。
【００８２】
通常モードにおけるマルチコアプロセッサシステム１００の消費電力は、表１１０１より、最大の処理能力値が高いＣＰＵ群が２４０［ｍＷ］、最大の処理能力値が低いＣＰＵ群が２０［ｍＷ］となり、表１１０２で示すように合計で２６０［ｍＷ］となる。また、低電力モードにおけるマルチコアプロセッサシステム１００の消費電力は、表１１０１より、最大の処理能力値が高いＣＰＵ群が２４［ｍＷ］、最大の処理能力値が低いＣＰＵ群が２００［ｍＷ］となり、表１１０２で示すように合計で２２４［ｍＷ］となる。このように、低電力モードの方が通常モードより消費電力を削減することができる。
【００８３】
また、ＯＳ以外のソフトウェアを移行しても消費電力を削減することができる。たとえば、最大の処理能力値が中程度のＣＰＵ群として、最大のクロック周波数が４００［ＭＨｚ］が存在することを想定する。最大の処理能力値が中程度のＣＰＵ群は、クロック周波数が１００［ＭＨｚ］時の消費電力を１１０［ｍＷ］、クロック周波数が２０［ＭＨｚ］時の消費電力を２２［ｍＷ］とする。また、ＯＳと高負荷ソフトウェアが最大の処理能力値が高いＣＰＵ群で実行されており、音楽再生ソフトウェア２０７が最大の処理能力値が中程度のＣＰＵ群で実行されており、並列ソフトウェアが最大の処理能力値が低いＣＰＵ群で実行されているとする。
【００８４】
このとき、最大の処理能力値が中程度のＣＰＵ群と最大の処理能力値が低いＣＰＵ群との消費電力の合計は、１１０＋２０＝１３０［ｍＷ］となる。次に、音楽再生ソフトウェア２０７と並列ソフトウェアの移行処理を行った場合を想定する。この場合、最大の処理能力値が高いＣＰＵ群は状態を維持し、並列ソフトウェアが最大の処理能力値が中程度のＣＰＵ群で実行されており、音楽再生ソフトウェア２０７が最大の処理能力値が低いＣＰＵ群で実行されている。この時の消費電力の合計は、２２＋１００＝１２２［ｍＷ］となり、移行処理を行う前より消費電力を削減することができる。
【００８５】
図１２は、ユースケーステーブル３０１の記憶内容の一例を示す説明図である。テーブルは、イベント種別、イベント内容という２つのフィールドを有する。イベント種別フィールドは、発生したイベントが低電力モードに移行するトリガーとなるか、通常モードに移行するトリガーとなるかを区別する値を格納する。イベント種別フィールドが“低電力モード移行”であれば発生したイベントは低電力モードに移行するトリガーとなり、“通常モード移行”であれば、発生したイベントは通常モードに移行するトリガーとなる。イベント内容フィールドは、イベントの内容を格納する。
【００８６】
たとえば、ユーザによる低電力モードへの移行指示のイベントが発生した場合、マルチコアプロセッサシステム１００は、最大の処理能力値が低いコアに移行可能とするイベントと判断し、通常モードであれば低電力モードに移行する。同様に、一定期間、高負荷ソフトウェアが未実行で、電池の残量が一定値以下となったイベントが発生した場合も、マルチコアプロセッサシステム１００は、通常モードであれば低電力モードに移行する。
【００８７】
また、高負荷ソフトウェアとして、ＧＵＩソフトウェア２０８の起動要求のイベントが発生した場合、マルチコアプロセッサシステム１００は、最大の処理能力値が高いコアに移行要求するイベントと判断し、低電力モードであれば通常モードに移行する。同様に、高負荷ソフトウェアとして動画再生ソフトウェア２０６、ゲームソフトウェア等の起動要求のイベントが発生した場合、マルチコアプロセッサシステム１００は、低電力モードであれば通常モードに移行する。
【００８８】
起動要求時に“通常モード移行”へ移行するソフトウェアの登録方法としては、設計時に、ＥＳＬ（Ｅｌｅｃｔｒｏｎｉｃ  Ｓｙｓｔｅｍ  Ｌｅｖｅｌ）シミュレータによって、対象のソフトウェアの要求する演算能力が、閾値を超える演算性能を超えるかを判断する方法がある。
【００８９】
また、“通常モード移行”へ移行するイベントとして、高負荷ソフトウェアの起動準備が発生した場合、マルチコアプロセッサシステム１００は、低電力モードであれば通常モードに移行してもよい。高負荷ソフトウェアの起動準備とは、高負荷ソフトウェアが所定時刻に起動するように設定されている場合の準備作業である。
【００９０】
たとえば、マルチコアプロセッサシステム１００の利用者によって、所定時刻にアラーム等を通知するソフトウェアが設定された場合で、アラームを通知するソフトウェアが高負荷ソフトウェアであることを想定する。マルチコアプロセッサシステム１００は、低電力モードであった場合、所定時刻より前に通常モードに移行しておくことで、所定時刻に高負荷ソフトウェアを通常モードで起動することができる。具体的には、マルチコアプロセッサシステム１００は、所定時刻からＯＳ２０５の起動完了にかかる時間を減じた時刻にて、低電力モードから通常モードへの移行処理を行ってもよい。
【００９１】
図１３は、通常モードから低電力モードへの移行処理を示すフローチャートである。通常モードから低電力モードへの移行処理と、低電力モードから通常モードへの移行処理では、最大の処理能力値の高いＣＰＵ群が実行する場合、ＣＰＵ＃０とＣＰＵ＃１の少なくともどちらか一方が実行すればよい。また、最大の処理能力値の低いＣＰＵ群が実行する場合、ＣＰＵ＃２とＣＰＵ＃３のどちらかが実行すればよい。図１３と図１４の説明では、説明を簡略化するため、最大の処理能力値の高いＣＰＵ群が実行する場合は、ＣＰＵ＃０が実行することを想定して説明し、最大の処理能力値の低いＣＰＵ群が実行する場合は、ＣＰＵ＃２が実行することと想定して説明する。
【００９２】
ＣＰＵ＃０はＯＳ２０５によって、ＣＰＵ＃２、ＣＰＵ＃３に移行可能とするイベントのいずれかが発生したかを判断する（ステップＳ１３０１）。移行可能とするイベントは、ユースケーステーブル３０１のうち、イベント種別フィールドの値が低電力モードとなるイベントである。移行可能とするイベントが発生していない場合（ステップＳ１３０１：Ｎｏ）、ＣＰＵ＃０は、一定時間後、ステップＳ１３０１の処理を実行する。移行可能とするイベントが発生している場合（ステップＳ１３０１：Ｙｅｓ）、ＣＰＵ＃０は、ＣＰＵ＃２、ＣＰＵ＃３へのソフトウェアのディスパッチを禁止する（ステップＳ１３０２）。
【００９３】
ディスパッチ禁止後、ＣＰＵ＃０はＯＳ２０５によって、ＣＰＵ＃２、ＣＰＵ＃３で実行中のソフトウェアをＣＰＵ＃０、ＣＰＵ＃１に移行する（ステップＳ１３０３）。また、移行対象となるソフトウェアは、ＯＳ２０５以外のすべてのソフトウェアとなる。また、ＯＳ２０５以外のすべてのソフトウェアの移行を行う理由としては、次のステップにて、ＯＳ２０５’をブートする際にメモリの初期化を行うために、ソフトウェアの実行を継続できなくなるためである。
【００９４】
実行中のソフトウェアをすべて移行後、ＣＰＵ＃０は、ハイパーバイザ２０４によってＣＰＵ＃２、ＣＰＵ＃３でＯＳ２０５’のブートを開始する（ステップＳ１３０４）。ブート開始後、ＣＰＵ＃０は、ＯＳ２０５’のブートが完了したかを判断する（ステップＳ１３０５）。ブートが完了した場合（ステップＳ１３０５：Ｙｅｓ）、ＣＰＵ＃０は、マルチコアプロセッサシステム１００を管理するＯＳをＯＳ２０５からＯＳ２０５’へスイッチする（ステップＳ１３０６）。
【００９５】
ＯＳのスイッチ後、ＣＰＵ＃２は、ＯＳ２０５’によってＣＰＵ＃０、ＣＰＵ＃１で実行中のすべてのソフトウェアをＣＰＵ＃２、ＣＰＵ＃３に移行する（ステップＳ１３０７）。すべてのソフトウェアを移行した後に、ＣＰＵ＃２は、ハイパーバイザ２０４によって、ＣＰＵ＃０、ＣＰＵ＃１のＯＳ２０５を終了する（ステップＳ１３０８）。ＯＳ２０５の終了後、ＣＰＵ＃２は、ＯＳ２０５’によってＣＰＵ＃０、ＣＰＵ＃１を超低クロックでリセットする（ステップＳ１３０９）。これにより、マルチコアプロセッサシステム１００は、移行元のコアとなるＣＰＵ＃０、ＣＰＵ＃１の処理能力値を超低クロックで設定したことになる。リセットを終えると、ＣＰＵ＃２は、低電力モードへの移行を完了し（ステップＳ１３１０）、処理を終了する。
【００９６】
ＯＳ２０５’のブートが完了していない場合（ステップＳ１３０５：Ｎｏ）、ＣＰＵ＃０は、ＣＰＵ＃０、ＣＰＵ＃１に移行要求するイベントのいずれかが発生したかを判断する（ステップＳ１３１１）。移行要求するイベントが発生していない場合（ステップＳ１３１１：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１３０５の処理に移行する。
【００９７】
移行要求するイベントが発生した場合（ステップＳ１３１１：Ｙｅｓ）、ＣＰＵ＃０は、ＣＰＵ＃２、ＣＰＵ＃３でのＯＳ２０５’のブートをキャンセルする（ステップＳ１３１２）。移行要求するイベントは、ユースケーステーブル３０１のうち、イベント種別フィールドの値が通常モード移行となるイベントである。ブートキャンセル後、ＣＰＵ＃０は、ＯＳ２０５によってＣＰＵ＃２、ＣＰＵ＃３のディスパッチの禁止を解除する（ステップＳ１３１３）。ディスパッチの禁止の解除後、ＣＰＵ＃０は、通常モードへの復帰を完了し（ステップＳ１３１４）、処理を終了する。
【００９８】
なお、ＯＳ以外のソフトウェアが特定のソフトウェアとして移行する場合、ＣＰＵ＃０は、ステップＳ１３０１：Ｙｅｓとなり移行可能と判断した後、特定のソフトウェアをＣＰＵ＃２、ＣＰＵ＃３に移行する。移行後、ＣＰＵ＃２は、ステップＳ１３０９の処理に移行してもよい。
【００９９】
図１４は、低電力モードから通常モードへの移行処理を示すフローチャートである。ＣＰＵ＃２は、ＯＳ２０５’によってＣＰＵ＃０、ＣＰＵ＃１に移行要求するイベントのいずれかが発生したかを判断する（ステップＳ１４０１）。移行要求するイベントが発生していない場合（ステップＳ１４０１：Ｎｏ）、ＣＰＵ＃２は、一定時間待機後、ステップＳ１４０１の処理に移行する。
【０１００】
移行要求するイベントが発生した場合（ステップＳ１４０１：Ｙｅｓ）、ＣＰＵ＃２は、ＣＰＵ＃２、ＣＰＵ＃３のクロックを最大に変更する（ステップＳ１４０２）。クロックを最大に変更後、ＣＰＵ＃２は、ＣＰＵ＃０、ＣＰＵ＃１へのディスパッチを禁止し（ステップＳ１４０３）、ＣＰＵ＃０、ＣＰＵ＃１で実行中のすべてのソフトウェアをＣＰＵ＃２、ＣＰＵ＃３に移行する（ステップＳ１４０４）。
【０１０１】
すべてのソフトウェアの移行終了後、ＣＰＵ＃２は、ハイパーバイザ２０４によってＣＰＵ＃０、ＣＰＵ＃１でＯＳ２０５のブートを開始する（ステップＳ１４０５）。ＯＳ２０５のブートを開始後、ＣＰＵ＃２は、ＯＳ２０５のブートが完了したかを判断する（ステップＳ１４０６）。ブートが完了していない場合（ステップＳ１４０６：Ｎｏ）、ＣＰＵ＃２は、一定時間後、再びステップＳ１４０６の処理を実行する。ブートが完了した場合（ステップＳ１４０６：Ｙｅｓ）、ＣＰＵ＃２はマルチコアプロセッサシステム１００を管理するＯＳをＯＳ２０５’からＯＳ２０５へスイッチする（ステップＳ１４０７）。
【０１０２】
ＯＳのスイッチ後、ＣＰＵ＃０は、ＯＳ２０５によってＣＰＵ＃２、ＣＰＵ＃３で実行中のソフトウェアをＣＰＵ＃０、ＣＰＵ＃１に移行する（ステップＳ１４０８）。移行後、ＣＰＵ＃０は、ハイパーバイザ２０４によってＣＰＵ＃２、ＣＰＵ＃３側のＯＳ２０５’を終了する（ステップＳ１４０９）。ＯＳ２０５’を終了後、ＣＰＵ＃０は、ＯＳ２０５によってＣＰＵ＃２、ＣＰＵ＃３を低クロックでリセットする（ステップＳ１４１０）。リセット終了後、ＣＰＵ＃０は、通常モードへの移行を完了し（ステップＳ１４１１）、処理を終了する。
【０１０３】
なお、ＯＳ以外のソフトウェアが特定のソフトウェアとして移行する場合、ＣＰＵ＃２は、ステップＳ１４０１：Ｙｅｓとなり移行要求と判断した後、特定のソフトウェアをＣＰＵ＃０、ＣＰＵ＃１に移行する。移行後、ＣＰＵ＃０は、ステップＳ１４１０の処理に移行してもよい。
【０１０４】
以上説明したように、マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、移行元のコアより最大の処理能力値が低い移行先のコアへの特定のソフトウェアの移行状態を検出する。移行状態を検出する場合、マルチコアプロセッサシステムは、移行元のコアの処理能力を移行前後で低く設定する。これにより、最大の処理能力値が高い移行元のコアで発生するリーク電流を抑制でき、コアの利用効率を高く保ったまま、製造コスト、実装面積を増大せずに消費電力を削減することができる。
【０１０５】
また、マルチコアプロセッサシステムは、特定のソフトウェアが移行機能を含むソフトウェアである場合、特定のソフトウェアが実行中である移行元のコアから移行先のコアに、特定のソフトウェアを移行させてもよい。これにより、移行機能を含むＯＳを、最大の処理能力値が低い移行先のコアに移行させることになり、最大の処理能力値が高い移行元のコアで発生するリーク電流を抑制でき、消費電力を削減することができる。特に、ＯＳの要求する処理能力は、並列実行可能なソフトウェアの要求する処理能力と比較すると非常に大きいため、ＯＳを最大の処理能力値が低い移行先のコアに移行すると、リーク電流を大きく抑制することができる。
【０１０６】
また、マルチコアプロセッサシステムは、発生したイベントが特定のソフトウェアを最大の処理能力値が低いコアに移行可能とするイベントであると判断する。さらにマルチコアプロセッサシステムは、移行元のコアより最大の処理能力値が低い移行先のコアへの特定のソフトウェアの移行状態を検出する。移行状態を検出する場合、マルチコアプロセッサシステムは、移行元のコアの処理能力を移行前後で低く設定してもよい。
【０１０７】
これにより、マルチコアプロセッサシステムは、最大の処理能力値が高い移行元のコアで発生するリーク電流を抑制でき、消費電力を削減することができる。また、発生したイベントの判断は、データベースに登録されているかによって判断するため、データベースの内容を変更するだけで運用形態を容易に変更でき、マルチコアプロセッサシステムの運用を容易に行うことができる。
【０１０８】
また、マルチコアプロセッサシステムは、特定のソフトウェアを移行中に、移行元のコアより最大の処理能力値が高いコアに移行要求するイベントが発生した場合、特定のソフトウェアの移行をキャンセルし、結果的に特定のソフトウェアを移行させなくてもよい。たとえば、ＯＳの移行にはＯＳのブートを行う時間が含まれ、利用者の操作を受け付ける時間が充分にあるため、その間に、たとえば高負荷ソフトウェアの起動要求のイベントが発生する可能性がある。このようなとき、本実施の形態にかかるマルチコアプロセッサシステムは、一度低電力モードに移行してから再度通常モードに移行するということを行わず、すぐに通常モードに復帰するため、発生したイベントに対して即応することができる。
【０１０９】
また、マルチコアプロセッサシステムは、発生したイベントが移行元のコアより最大の処理能力値が高いコアに移行要求するイベントであると判断し、かつ、移行元のコアより最大の処理能力値が高いコアへの、特定のソフトウェアの移行状態を検出する。移行状態を検出する場合、マルチコアプロセッサシステムは、移行元のコアの処理能力を移行前後で低く設定してもよい。これにより、マルチコアプロセッサシステムは、最大の処理能力値が低いコアで動作していた特定のソフトウェアを、最大の処理能力値が高いコアに移行することで割り込み応答に速く対応することができる。
【０１１０】
具体的には、最大の処理能力値が高いコアにて割り込み要求の通知を受け、特定のソフトウェアが割り込み要求からの通知を受ける場合、特定のソフトウェアは、最大の処理能力値が高いコアにて実行されている場合に、最も速く割り込み要求に応答できる。たとえば、キーボードからの割り込み要求を受ける場合、特定のソフトウェアは、最大の処理能力値が高いコアにて実行されている場合に、最も速くキーボードからの信号に応答できる。このように、マルチコアプロセッサシステムの消費電力が削減される状態となり、特定のソフトウェアの割り込み応答性能が低下した場合にも、特定のソフトウェアを移行させることで、割り込みに対する応答速度を戻すことができる。
【０１１１】
また、本実施の形態のマルチコアプロセッサシステムは、ＯＳによる制御であって、ＤＶＦＳ制御で必須となるマルチ電源電圧も必要ないため、従来例のマルチコアプロセッサシステムに対して容易に適用することができる。また、本実施の形態のマルチコアプロセッサシステムは、マルチコアでマルチスレッドが実行しても、ユースケーステーブルに従って運用するため、ＤＶＦＳ制御のように見積もりが困難となることがなく、運用が容易である。また、本実施の形態のマルチコアプロセッサシステムは、大きなキャッシュメモリを持つＣＰＵを低クロックで動作させるため、リーク電流を減らすことができ、消費電力を削減する効果を得る。
【０１１２】
なお、本実施の形態で説明したマルチコアプロセッサシステムの制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本マルチコアプロセッサシステムの制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本マルチコアプロセッサシステムの制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１１３】
＃０、＃２  ＣＰＵ
１０３  ＲＡＭ
１１０  バス
２０１  メモリコントローラ
２０４  ハイパーバイザ
３０１  ユースケーステーブル
３０２  検出部
３０３  設定部
３０４  移行部
３０５  判断部
３０６  起動通知部
３０７  起動部
３０８  終了部
【図１】
2014209394.tif 000003
【図２】
2014209394.tif 000004
【図３】
2014209394.tif 000005
【図４】
2014209394.tif 000006
【図５】
2014209394.tif 000007
【図６】
2014209394.tif 000008
【図７】
2014209394.tif 000009
【図８】
2014209394.tif 000010
【図９】
2014209394.tif 000011
【図１０】
2014209394.tif 000012
【図１１】
2014209394.tif 000013
【図１２】
2014209394.tif 000014
【図１３】
2014209394.tif 000015
【図１４】
2014209394.tif 000016