(57)【要約】【課題】電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコア電源をオン・オフすることができるマルチコアプロセッサシステムを提供する。【解決手段】複数のプロセッサコア１ａ〜１ｆと、複数のプロセッサコア１ａ〜１ｆの夫々へ個別に電源を停止／供給する電源系４と、複数のプロセッサコア１ａ〜１ｆに実行させるスレッドを蓄積するスレッドキュー３３と、を備え、夫々のプロセッサコア１ａ〜１ｆは、スレッドキュー３３に蓄積されているスレッド数が第１しきい値以下である場合、電源系４に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、スレッド数が第１しきい値以上の値である第２しきい値を越える場合、電源供給が停止されている他のプロセッサコアへの電源供給を電源系４に再開させる電源供給再開手段と、を備える。【選択図】図１
2010271930.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、
前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、
前記複数のプロセッサコアに実行させるスレッドを蓄積するスレッドキューと、
を備え、
前記夫々のプロセッサコアは、
前記スレッドキューに蓄積されているスレッド数が第１しきい値以下である場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、
前記スレッドキューに蓄積されているスレッド数が前記第１しきい値以上の値である第２しきい値を越える場合、電源供給が停止されている他のプロセッサコアへの電源供給を前記電源系に再開させる電源供給再開手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
タイマをさらに備え、
前記電源供給停止手段は、自プロセッサコアへの電源供給を停止させる前に、前記タイマを参照して時刻を取得し、電源オフ時刻テーブルに前記取得した時刻を電源オフ時刻として記録し、
前記電源供給再開手段は、前記スレッドキューに蓄積されているスレッド数が前記第２しきい値を越える場合、電源供給が停止されているプロセッサコアのうちの前記電源オフ時刻テーブルに記録されている電源オフ時刻から所定の時間が経過したプロセッサコアへの電源供給を再開させる、
ことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記第１しきい値および前記第２しきい値はスレッド実行中のプロセッサコア数の増減に対応して増減する、ことを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項４】
複数のプロセッサコアと、
前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、
前記複数のプロセッサコアに実行させるスレッドを蓄積するスレッドキューと、
を備え、
前記夫々のプロセッサコアは、
自プロセッサコアのリソースが前記スレッドキューに蓄積されている何れのスレッドのリソース要求も満たさない場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、
電源供給が停止されている他のプロセッサコアのうち前記スレッドキューに蓄積されているスレッドのリソース要求を満たすリソースを有するプロセッサコアがある場合、該プロセッサコアへの電源供給を再開させる電源供給再開手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項５】
複数のプロセッサコアと、
前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、
タイマと、
前記複数のプロセッサコアに実行させるスレッドを実行に必要となる時間を示す計算時間情報とともに蓄積するスレッドキューと、
前記夫々のプロセッサコア毎の実行中のスレッドの終了予想時刻を記録するスレッド終了予想時刻テーブルと、
を備え、
前記夫々のプロセッサコアは、
スレッドを前記スレッドキューから取得したとき、前記スレッドキューに蓄積されていた計算時間情報と前記タイマの値とに基づいて前記取得したスレッドの終了予測時刻を算出し、前記算出した終了予測時刻を前記スレッド終了予想時刻テーブルに書き込む終了予想時刻記録手段と、
前記スレッド終了予想時刻テーブルと前記タイマの値とに基づいて間近にスレッド実行を終了する見込みのプロセッサコアの数である終了見込みコア数を算出し、前記スレッドキューに蓄積されているスレッド数から前記算出した終了見込みコア数を減算した値が第１しきい値以下である場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、
前記スレッドキューに蓄積されているスレッド数から前記算出した終了見込みコア数を減算した値が前記第１しきい値以上の値である第２しきい値を越える場合、前記電源系に電源供給が停止されている他のプロセッサコアへの電源供給を再開させる電源供給再開手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサシステムに関する。
【背景技術】
【０００２】
従来、組み込み向けマルチコアプロセッサには、消費電力の削減のためにプロセッサコアごとに電源をオン・オフする機能を備えるものがある。
【０００３】
例えば特許文献１に開示されている技術によれば、パケット処理プロセッサはキューアクセス機能に基づいてパケット処理を行い、キュー監視プロセッサはパケット処理プロセッサのキューに格納されているデータ量に基づいてパケット処理プロセッサの電源制御を実行する。また、特許文献２に開示されている技術によれば、システム状態監視部はシステムの負荷状態を監視し、システム状態制御部はシステム状態監視部からの通知に基づいて個々のプロセッサコアの消費電力を制御する。
【０００４】
しかしながら、従来技術によれば、システムの負荷状態を監視したり電源制御を行うためのプロセッサコアや専用のハードウェアを用意しなければならず、コストがかかるという問題があった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１２９８４６号公報
【特許文献２】特開平８−６６８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコア電源をオン・オフすることができるマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願発明の一態様によれば、複数のプロセッサコアと、前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、前記複数のプロセッサコアに実行させるスレッドを蓄積するスレッドキューと、を備え、前記夫々のプロセッサコアは、前記スレッドキューに蓄積されているスレッド数が第１しきい値以下である場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、前記スレッドキューに蓄積されているスレッド数が前記第１しきい値以上の値である第２しきい値を越える場合、電源供給が停止されている他のプロセッサコアへの電源供給を前記電源系に再開させる電源供給再開手段と、を備えることを特徴とするマルチコアプロセッサシステムが提供される。
【０００８】
また、本願発明の一態様によれば、複数のプロセッサコアと、前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、前記複数のプロセッサコアに実行させるスレッドを蓄積するスレッドキューと、を備え、前記夫々のプロセッサコアは、自プロセッサコアのリソースが前記スレッドキューに蓄積されている何れのスレッドのリソース要求も満たさない場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、電源供給が停止されている他のプロセッサコアのうち前記スレッドキューに蓄積されているスレッドのリソース要求を満たすリソースを有するプロセッサコアがある場合、該プロセッサコアへの電源供給を再開させる電源供給再開手段と、を備えることを特徴とするマルチコアプロセッサシステムが提供される。
【０００９】
また、本願発明の一態様によれば、複数のプロセッサコアと、前記複数のプロセッサコアの夫々へ個別に電源を停止／供給する電源系と、タイマと、前記複数のプロセッサコアに実行させるスレッドを実行に必要となる時間を示す計算時間情報とともに蓄積するスレッドキューと、前記夫々のプロセッサコア毎の実行中のスレッドの終了予想時刻を記録するスレッド終了予想時刻テーブルと、を備え、前記夫々のプロセッサコアは、スレッドを前記スレッドキューから取得したとき、前記スレッドキューに蓄積されていた計算時間情報と前記タイマの値とに基づいて前記取得したスレッドの終了予測時刻を算出し、前記算出した終了予測時刻を前記スレッド終了予想時刻テーブルに書き込む終了予想時刻記録手段と、前記スレッド終了予想時刻テーブルと前記タイマの値とに基づいて間近にスレッド実行を終了する見込みのプロセッサコアの数である終了見込みコア数を算出し、前記スレッドキューに蓄積されているスレッド数から前記算出した終了見込みコア数を減算した値が第１しきい値以下である場合、前記電源系に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、前記スレッドキューに蓄積されているスレッド数から前記算出した終了見込みコア数を減算した値が前記第１しきい値以上の値である第２しきい値を越える場合、前記電源系に電源供給が停止されている他のプロセッサコアへの電源供給を再開させる電源供給再開手段と、を備えることを特徴とするマルチコアプロセッサシステムが提供される。
【発明の効果】
【００１０】
本発明によれば、電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコア電源をオン・オフすることができるマルチコアプロセッサシステムを提供することができる、という効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施の形態のマルチコアプロセッサシステムの構成を示す図。
【図２】図２は、ユーザプログラムを実行している様子を説明する概略図。
【図３】図３は、スレッドキュー３３のデータ構造を説明する図。
【図４】図４は、プロセッサコアに生成される機能を説明する図。
【図５】図５は、第１の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図６】図６は、第２の実施の形態のマルチコアプロセッサシステムの構成を示す図。
【図７】図７は、コア電源オフ時刻テーブルの一例を説明する図。
【図８】図８は、プロセッサコアに生成される機能を説明する図。
【図９】図９は、第２の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図１０】図１０は、第３の実施の形態のマルチコアプロセッサシステムの特徴を概略的に説明するための図。
【図１１】図１１は、第３の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図１２】図１２は、スレッド実行コアの状態の変化を説明する図。
【図１３】図１３は、マルチコアプロセッサシステムの動作の概略を説明する図である。
【図１４】図１４は、第３の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図１５】図１５は、第４の実施の形態のマルチコアプロセッサシステムの動作の概略を説明する図。
【図１６】図１６は、要求リソースリストのデータ構造の一例を説明する図。
【図１７】図１７は、プロセッサコアリソースリストのデータ構造の一例を説明する図。
【図１８】図１８は、第４の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図１９】図１９は、第５の実施の形態のマルチコアプロセッサシステムの概略を説明する図。
【図２０】図２０は、スレッドキューのデータ構造を説明する図。
【図２１】図２１は、第５の実施の形態のプロセッサコアの動作を説明するフローチャート。
【図２２】図２２は、第６の実施の形態のマルチコアプロセッサシステムの概略を説明する図。
【図２３】図２３は、スレッド終了予想時刻テーブルの一例を説明する図。
【図２４】図２４は、スレッドキューのデータ構造を説明する図。
【図２５】図２５は、プロセッサコアに生成される機能を説明する図。
【図２６】図２６は、第６の実施の形態のプロセッサコアの動作を説明するフローチャート。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明の実施の形態にかかるマルチコアプロセッサシステムを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
【００１３】
（第１の実施の形態）
図１は、本発明にかかる第１の実施の形態のマルチコアプロセッサシステムの構成を示すブロック図である。図示するように、第１の実施の形態のマルチコアプロセッサシステムは、マルチコアプロセッサ１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３と、電源系４と、を備えている。マルチコアプロセッサ１、ＲＯＭ２、ＲＡＭ３はバスを介して夫々接続されている。
【００１４】
マルチコアプロセッサ１は、複数（ここでは６個）のプロセッサコア１ａ、１ｂ、１ｃ、１ｄ、１ｅ、１ｆを備えている。なお、図中ではプロセッサコアを単にコアと表記している。マルチコアプロセッサ１が備える夫々のプロセッサコア１ａ〜１ｆは、後述する基本プログラム３１に基づき、個別に電源系４にアクセスし、自プロセッサコアに対する電源の供給を停止させる信号や、他の電源供給が停止されているプロセッサコアへ電源を供給させる信号を電源系４に送信することができる。電源系４は、プロセッサコア１ａ〜１ｆから受信する電源を停止／供給させる信号（電源制御信号）に基づいて、プロセッサコア１ａ〜１ｆの夫々に個別に電源を停止／供給する。なお、以降、プロセッサコア１ａ〜１ｆへの電源供給を停止することを、単にプロセッサコア１ａ〜１ｆの電源をオフする、と表現することもある。また、電源オフ状態のプロセッサコアへの電源を供給することを、単にプロセッサコアの電源をオンする、と表現することもある。
【００１５】
マルチプロセッサシステムの用途に合わせて用意されるコンピュータプログラムであるユーザプログラム３２およびマルチプロセッサシステム上でユーザプログラム３２を実行するために必要となる基本処理を提供するコンピュータプログラムである基本プログラム３１は、ＲＯＭ２内に格納されており、バスを介してＲＡＭ３へロードされる。マルチコアプロセッサ１は、ＲＡＭ３にロードされた基本プログラム３１に基づき、ユーザプログラム３２を実行する。
【００１６】
図２は、プロセッサコア１ａ〜１ｆがユーザプログラム３２を実行している様子を説明する概略図である。ここでは、プロセッサコア１ｅおよびプロセッサコア１ｆがユーザプログラム３２により生成されるアプリケーションタスクを実行し、アプリケーションタスクは、ユーザプログラム３２に基づいてスレッドを発行する。生成されたスレッドは実行待ち状態となり、スレッドキューに保存（蓄積）される。なお、スレッドキューはＲＡＭ３内にスレッドキュー３３として保持される。また、スレッドキューに保存されているスレッドを待機スレッドと表現することもある。スレッドキューは先入れ先出し（ＦＩＦＯ）のルールで待機中のスレッドを出し入れする。アプリケーションタスクを実行していないプロセッサコア１ａ〜１ｄには、生成されたスレッドを実行するためのタスクであるスレッド制御タスクが動作している。なお、スレッド制御タスクは基本処理の一環として基本プログラム３１により生成されるタスクである。プロセッサコア１ａ〜１ｄにて動作しているスレッド制御タスクは、スレッドキュー３３からスレッドを取得し、スレッドの実行が終わると、さらにスレッドキュー３３から別のスレッドを取得する。
【００１７】
図３は、スレッドキュー３３のデータ構造を説明する図である。図示するように、スレッドキュー３３に格納されている各スレッドは、スレッドを識別するためのＩＤと、ＲＡＭ３にロードされているユーザプログラム３２における該当部分の開始アドレスであるスレッド処理開始アドレスと、から構成されている。スレッド制御タスクは、スレッド処理開始アドレスから該当するプログラムを取り出して実行する。
【００１８】
図４は、プロセッサコア１ａが基本プログラム３１を実行することにより生成される機能を説明する図である。図示するように、基本プログラム３１は、プロセッサコア１ａに、基本制御手段１０１ａ、電源供給停止手段１０２ａおよび電源供給再開手段１０３ａを生成する。基本制御手段１０１ａは、アプリケーションタスクやスレッド制御タスクを起動する。電源供給停止手段１０２ａは、スレッド制御タスクに実装され、スレッドキュー３３に待機スレッドがない場合、自プロセッサ１ａの電源をオフするための電源制御信号を電源系４に送信する。電源供給再開手段１０３ａは、自プロセッサコア１ａで動作しているアプリケーションタスクやスレッドが新たにスレッドを生成した際、すなわちスレッドキュー３３に待機スレッドができた場合、他のプロセッサコアの電源をオンする試み（電源供給再開試行処理）を実行する。なお、プロセッサコア１ｂ〜１ｆも基本プログラム３１に基づいて上述のプロセッサコア１ａと同様の機能を夫々生成するが、説明が重複するのでプロセッサコア１ｂ〜１ｆに関する機能については説明を省略する。
【００１９】
次に、本第１の実施の形態のマルチコアプロセッサシステムの動作を説明する。図５（ａ）〜（ｃ）は、プロセッサコア１ａ〜１ｆの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、ここでは代表としてプロセッサコア１ａの動作についてのみ説明する。
【００２０】
図５（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ１０１）、アプリケーションタスクの割り当てがある場合（ステップＳ１０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ１０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ１０１に移行する。
【００２１】
ステップＳ１０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ１０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ１０３）。スレッド制御タスクは、スレッドキュー３３を参照し、待機スレッド数が０を越える、すなわち待機スレッド数が１以上であるか否かを判定する（ステップＳ１０４）。待機スレッドが一つもない場合（ステップＳ１０４、Ｎｏ）、スレッド制御タスクは、自プロセッサコア１ａの電源をオフするための電源制御信号を電源系４に送信して電源をオフし（ステップＳ１０５）、動作を停止する。動作を停止した後、電源供給再開試行処理により電源供給が再開されると、ステップＳ１０１から再度動作を開始する。
【００２２】
待機スレッド数が０を越える、すなわち１以上である場合（ステップＳ１０４、Ｙｅｓ）、スレッド制御タスクはスレッドキュー３３からスレッドを取得する（ステップＳ１０６）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ１０７）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ１０８）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ１０１に移行する。
【００２３】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ１０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ１０８）も新たなスレッドを生成する場合がある。図５（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ１１１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ１１２）、リターンとなる。
【００２４】
図５（ｃ）は、ステップＳ１０７およびステップＳ１１２において実行される電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０３ａは、待機スレッド数が０を越えるか否かを判定する（ステップＳ１２１）。電源供給再開手段１０３ａは、待機スレッド数が１以上である場合（ステップＳ１２１、Ｙｅｓ）、電源オフ状態のプロセッサコアがあるか否かをさらに判定する（ステップＳ１２２）。電源オフ状態のプロセッサコアがあった場合（ステップＳ１２２、Ｙｅｓ）、電源オフ状態のプロセッサのうちＩＤ番号が一番小さいプロセッサコアの電源をオンするための電源制御信号を電源系４に送信して該プロセッサコアの電源をＯＮし（ステップＳ１２３）、電源供給再開試行処理の動作はリターンとなる。なお、ＩＤ番号とは、プロセッサコア１ａ〜１ｆを夫々識別するための識別子である。ステップＳ１２１において待機スレッド数が１以上ではなかったり（ステップＳ１２１、Ｎｏ）、ステップＳ１２２において電源オフ状態のプロセッサコアがなかった場合（ステップＳ１２２、Ｎｏ）、そのまま電源供給再開試行処理の動作はリターンとなる。
【００２５】
なお、以上の説明においては、説明を簡単にするために、スレッドキュー３３の本数が一つしかない場合を想定して説明を行ったが、スレッド制御タスクが全てのスレッドキューを確認するように拡張することでスレッドキュー３３が複数本ある場合にも対応することが出来る。また、電源供給再開試行処理の動作の説明においてはステップＳ１２３において１個のプロセッサコアの電源をオンにするとして説明したが、一回に複数個のプロセッサコアの電源をオンするようにしてもよい。
【００２６】
以上述べたように、第１の実施の形態によれば、夫々のプロセッサコアは、待機スレッド数が０である場合、電源系４に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、待機スレッド数が０を越える場合、電源系４に電源供給が停止されている他のプロセッサコアへの電源供給を再開させる電源供給再開手段と、を備えるように構成したので、電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコアに供給する電源をオン・オフすることができるようになる。
【００２７】
なお、第１の実施の形態によれば、ユーザプログラムではなく基本プログラムが電源供給停止手段および電源供給再開手段を生成するようにしたので、ユーザはプロセッサコア電源をオン・オフさせるための処理をユーザプログラムに記述する必要を免れることができるという効果もある。
【００２８】
（第２の実施の形態）
第１の実施の形態の構成によれば、プロセッサコアは、電源供給再開試行処理において、待機スレッド数が０を越える場合（すなわち１以上である場合）電源オフ状態のプロセッサコアの電源をオンするようにした。したがって、待機スレッド数が頻繁に０なる場合、電源が頻繁にオン・オフされる事態が発生する。しかしながら、電源オン状態からオフ状態およびオフ状態からオン状態に移行するとき、電源が供給される対象の静電容量に相当する電流が流れるため、低消費電力化の観点からは電源オン・オフの頻度はあまり高くないほうがよい。そこで、第２の実施の形態では、電源がオフされてからの経過時間が所定の時間以上経過したとき、電源オンすることを許可するようにした。
【００２９】
図６は、第２の実施の形態のマルチコアプロセッサシステムの構成を説明する図である。図示するように、第２の実施の形態のマルチコアプロセッサシステムは、第１の実施の形態の構成に時刻を計測するタイマ５を加え、さらにＲＡＭ３にはプロセッサコア毎に電源供給が停止された時刻が記録されるコア電源オフ時刻テーブル３４を記憶している。
【００３０】
図７は、コア電源オフ時刻テーブル３４の一例を説明する図である。図７によれば、コア電源オフ時刻テーブル３４は、コアＩＤ（プロセッサコアのＩＤ番号）が０および１のプロセッサコアへの電源供給が時刻「０」にオフされ、コアＩＤが２のプロセッサコアへの電源供給が時刻「１２３４００」にオフされていることを示している。なお、時刻はどのような単位で記録されるようにしてもよいが、例えばタイマ５が起動されてからのサイクル数であってよい。
【００３１】
また、第２の実施の形態のマルチコアプロセッサシステムは、ＲＡＭ３に基本プログラム３５がロードされている。図８は、プロセッサコア１ａが基本プログラム３５を実行することにより生成される機能を説明する図である。図示するように、プロセッサコア１ａは、第１の実施の形態と同様の基本制御手段１０１ａのほか、電源供給停止手段１０４ａおよび電源供給再開手段１０５ａとを生成する。電源供給停止手段１０４ａは、スレッド制御タスクに実装され、スレッドキュー３３に取得すべきスレッドがない場合、タイマ５を参照して現在時刻を取得し、コア電源オフ時刻テーブル３４に自プロセッサコア１ａのコアＩＤと取得した現在時刻を記録し、自プロセッサ１ａの電源をオフするための電源制御信号を電源系４に送信する。電源供給再開手段１０５ａは、自プロセッサコア１ａで動作しているアプリケーションタスクやスレッドが新たにスレッドを生成した際、電源供給再開試行処理を実行する。そのとき、電源供給再開手段１０５ａは、タイマ５およびコア電源オフ時刻テーブル３４を参照し、電源オフ状態のプロセッサコアのうち、電源オフ状態となってから現在までに経過した時間が予め設定されている所定の時間（オン禁止期間）以上経過しているプロセッサコアの電源をオンする。なお、プロセッサコア１ｂ〜１ｆも基本プログラム３５に基づいて上述のプロセッサコア１ａと同様の機能を夫々生成するが、説明が重複するのでプロセッサコア１ｂ〜１ｆに関する機能については説明を省略する。
【００３２】
図９は、本第２の実施の形態のマルチコアプロセッサシステムの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、ここでは代表としてプロセッサコア１ａの動作について説明する。
【００３３】
図９（ａ）に示すように、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ２０１）、アプリケーションタスクの割り当てがある場合（ステップＳ２０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ２０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ２０１に移行する。
【００３４】
ステップＳ２０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ２０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ２０３）。続いて、スレッド制御タスクは、スレッドキュー３３を参照し、待機スレッド数が０を越えるか否かを判定する（ステップＳ２０４）。待機スレッド数が０を越えない、すなわち待機スレッドが一つもない場合（ステップＳ２０４、Ｎｏ）、スレッド制御タスクは、タイマ５を参照して現在時刻を取得し（ステップＳ２０５）、自プロセッサコア１ａのコアＩＤと前記取得した現在時刻をコア電源オフ時刻テーブル３４に記録する（ステップＳ２０６）。そして、スレッド制御タスクは、自プロセッサコア１ａへの電源供給を遮断する電源制御信号を電源系４に送信して電源をオフし（ステップＳ２０７）、動作を停止する。
【００３５】
待機スレッド数が０を越える、すなわち待機スレッドが一つ以上存在している場合（ステップＳ２０４、Ｙｅｓ）、スレッド制御タスクはスレッドキュー３３からスレッドを取得する（ステップＳ２０８）。すると、電源供給再開手段１０５ａは、電源供給再開試行処理を実行する（ステップＳ２０９）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ２１０）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ２０１に移行する。
【００３６】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ２０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ２１０）も新たなスレッドを生成する場合がある。図９（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ２２１）。すると、電源供給再開手段１０５ａは、電源供給再開試行処理を実行し（ステップＳ２２２）、リターンとなる。
【００３７】
図９（ｃ）は、ステップＳ２０９およびステップＳ２２２において実行される電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０５ａは、待機スレッド数が０を越える、すなわち１以上か否かを判定する（ステップＳ２３１）。電源供給再開手段１０５ａは、待機スレッド数が１以上である場合（ステップＳ２３１、Ｙｅｓ）、電源オフ状態のプロセッサコアを一つ選択する（ステップＳ２３２）。なお、ここで電源供給再開手段１０５ａが選択した電源オフ状態のプロセッサコアのＩＤ番号をｉとする。続いて、電源供給再開手段１０５ａは、タイマ５から現在時刻を取得し、コア電源オフ時刻テーブル３４からＩＤ番号ｉのプロセッサコアの停止時刻を取得し、現在時刻とこのプロセッサコアの停止時刻とを比較することによってプロセッサコアの停止時刻からオン禁止期間以上の時間が経過したか否かを判定する（ステップＳ２３３）。オン禁止期間以上の時間が経過した場合（ステップＳ２３３、Ｙｅｓ）、電源供給再開手段１０５ａは、ＩＤ番号がｉのプロセッサコアの電源をオンするための電源制御信号を電源系４に送信してこのプロセッサコアの電源をオンし（ステップＳ２３４）、電源供給再開試行処理の動作はリターンとなる。
【００３８】
オン禁止期間以上の時間が経過していない場合（ステップＳ２３３、Ｎｏ）、電源供給再開手段１０５ａは、電源オフ状態のプロセッサコアを全て選択したか否かを判定し（ステップＳ２３５）、選択した場合（ステップＳ２３５、Ｙｅｓ）、電源供給再開試行処理の動作はリターンとなる。未選択のプロセッサコアが残っている場合（ステップＳ２３５、Ｎｏ）、電源供給再開手段１０５ａは、ステップＳ２３２に移行して未選択のプロセッサコアのうちからさらに一つプロセッサコアを選択する。なお、プロセッサコアの選択の順番はどのような順番であってもかまわないが、例えばＩＤ番号が小さいプロセッサコアを優先して選択するようにするとよい。
【００３９】
以上のように、第２の実施の形態によれば、電源供給停止手段は、自プロセッサコアへの電源供給を停止させる前に、タイマ５を参照して時刻を取得し、コア電源オフ時刻テーブル３４に取得した時刻を記録し、電源供給再開手段は、待機スレッド数が０を越える場合、電源供給が停止されているプロセッサコアのうちのコア電源オフ時刻テーブル３４に記録されている電源オフされた時刻から所定の時間（オン禁止期間）が経過したプロセッサコアへの電源供給を再開させる、ように構成したので、プロセッサコアの電源が頻繁にオン・オフされるのを防ぐことができるようになる。プロセッサコアの電源オン・オフの際には大きな電流が流れるので、頻繁な電源オン・オフを避けることで消費電力の削減を実現できる。
【００４０】
なお、以上説明した第２の実施の形態によれば、スレッド発行時にプロセッサコアの電源オンに失敗する可能性があるで、負荷の増加に対する追従性が悪くなることが予想される。これを回避するために、稼働中のコアにおいて一定期間毎に電源供給再開試行処理を実行するようにしてもよい。
【００４１】
（第３の実施の形態）
第１の実施の形態では、待機スレッド数がゼロの場合、自プロセッサコアの電源をオフし、待機スレッド数が０を越える場合、他のプロセッサコアの電源をオンする。しかしながら、これでは電源のオン・オフが頻繁に起こってしまい、低消費電力化の観点から鑑みると好ましくないことは第２の実施の形態ですでに述べた。第３の実施の形態では、自プロセッサコアの電源をオフするか否か、および他のプロセッサコアの電源をオンするか否かを、待機スレッド数がゼロか否かではなく待機スレッド数が予め設定された夫々異なるしきい値を越えるか否かにより判定するようにした。以下、第３の実施の形態について説明する。なお、第３の実施の形態の構成は第１の実施の形態と同様であるので、図１に示した構成図を用いて説明することとする。また、第３の実施の形態のプロセッサコア１ａ〜１ｆが生成する機能は、電源オン・オフのための判定に使用するしきい値が異なるだけであって、他の機能構成はほぼ同じであるので、本第３の実施の形態の機能構成を説明する図として図４をそのまま用いて説明する。
【００４２】
図１０は、第３の実施の形態のマルチコアプロセッサシステムの特徴を概略的に説明するための図である。図示するように、プロセッサコア１ｅおよびプロセッサコア１ｆはアプリケーションタスクを実行しており、夫々アプリケーションタスクに基づいてスレッドを生成し、生成したスレッドをスレッドキュー３３に加える。プロセッサコア１ａ〜１ｄは、スレッド制御タスクを実行しており、スレッドキュー３３からスレッドを取り出して実行する。ここで、スレッドキュー３３にて待機中のスレッドの個数について２種類のしきい値（しきい値Ａおよびしきい値Ｂ）が設定されている。スレッド制御タスクは、待機スレッド数がしきい値Ａを越えない場合、自プロセッサコアの電源をオフする。なお、待機スレッド数がしきい値Ａを越えない場合であっても、待機スレッド数が１以上かつスレッドを実行しているプロセッサコアが他に無い場合、例外的な処理として自プロセッサコアの電源をオフしないようにする。また、電源供給再開手段１０３ａは、待機スレッド数がしきい値Ｂを越え、かつ他に電源オフ状態のプロセッサコアがある場合、そのプロセッサコアの電源をオンする。ここで、しきい値Ｂ＞しきい値Ａ≧０の関係を満たすように各しきい値を設定するようにしておく。図１０では、しきい値Ａが１、しきい値Ｂが３となっている。
【００４３】
次に、本第３の実施の形態のマルチコアプロセッサシステムの動作を説明する。図１１（ａ）〜（ｃ）は、プロセッサコア１ａ〜１ｆの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、代表としてプロセッサコア１ａの動作についてのみ説明する。
【００４４】
図１１（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ３０１）、アプリケーションタスクの割り当てがある場合（ステップＳ３０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ３０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ３０１に移行する。
【００４５】
ステップＳ３０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ３０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ３０３）。スレッド制御タスクは、スレッドキュー３３を参照し、待機スレッド数がしきい値Ａを越えるか否かを判定する（ステップＳ３０４）。待機スレッドがしきい値Ａ以下である場合（ステップＳ３０４、Ｎｏ）、スレッド制御タスクは、スレッドを実行中のプロセッサコアが他に存在せず、かつ、待機スレッドが存在するという条件を満たすか否かをさらに判定する（ステップＳ３０５）。前記条件を満たさない場合（ステップＳ３０５、Ｎｏ）、スレッド制御タスクは、自プロセッサコアの電源をオフする電源制御信号を電源系４に送信し、自プロセッサコアの電源をオフし（ステップＳ３０６）、動作を停止する。
【００４６】
待機スレッド数がしきい値Ａを越える場合（ステップＳ３０４、Ｙｅｓ）、およびステップＳ３０５における判定条件が満たされている場合（ステップＳ３０５、Ｙｅｓ）、ステップ制御タスクは、スレッドキュー３３からスレッドを取得する（ステップＳ３０７）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ３０８）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ３０９）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ３０１に移行する。
【００４７】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ３０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ３０９）も新たなスレッドを生成する場合がある。図１１（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ３１１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ３１２）、リターンとなる。
【００４８】
図１１（ｃ）は、ステップＳ３０８およびステップＳ３１２において実行される電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０３ａは、待機スレッド数がしきい値Ｂを越えるか否かを判定する（ステップＳ３２１）。電源供給再開手段１０３ａは、待機スレッド数がしきい値Ｂを越える場合（ステップＳ３２１、Ｙｅｓ）、電源オフ状態のプロセッサコアがあるか否かをさらに判定する（ステップＳ３２２）。電源オフ状態のプロセッサコアがあった場合（ステップＳ３２２、Ｙｅｓ）、電源オフ状態のプロセッサのうちＩＤ番号が一番小さいプロセッサコアの電源をオンするための電源制御信号を電源系４に送信して、該プロセッサコアの電源をＯＮし（ステップＳ３２３）、電源供給再開試行処理の動作はリターンとなる。ステップＳ３２１において待機スレッド数がしきい値Ｂを越えなかったり（ステップＳ３２１、Ｎｏ）、ステップＳ３２２において電源オフ状態のプロセッサコアがなかった場合（ステップＳ３２２、Ｎｏ）、そのまま電源供給再開試行処理の動作はリターンとなる。
【００４９】
図１２は、しきい値Ａの値を２、しきい値Ｂの値を６とした場合のスレッド実行コアの状態の変化を説明する図である。最初にスレッドキュー３３内にスレッドが４個待機し、二つのプロセッサコア１ａ、１ｂがスレッドを実行中であるとする。また、ここでは、プロセッサコア１ｆはアプリケーションタスクを実行しているとし、この図ではスレッド実行コアの状態として表示していない。ここで、時刻１０００にアプリケーションタスクがスレッドを４個キューに追加する。これによって待機スレッド数が８個となり、待機スレッド数がしきい値Ｂを越えたので、まずプロセッサコア１ｃが起動され、さらにプロセッサコア１ｃの電源供給再開手段の動作によりプロセッサコア１ｄが起動される。以降、時刻５０００に至るまで４つのプロセッサコア１ａ〜１ｄが順次スレッドを取得・実行していく。時刻６０００では、待機スレッド数がしきい値Ａ以下になるので、プロセッサコア１ａのスレッド制御タスクはスレッドを取得せずに自プロセッサコア１ａの電源をオフ、すなわち自プロセッサコア１ａを停止させる。時刻７０００にアプリケーションタスクがスレッドを３個スレッドキュー３３に追加する。待機スレッド数は５となるが、待機スレッド数はしきい値Ｂを上回らないのでプロセッサコアの電源オンは行われない。以降、時刻１００００に至るまで３つのプロセッサコア１ｂ〜１ｄは順次スレッドを取得・実行する。時刻１１０００、１２０００には待機スレッド数がしきい値Ａ以下になるので、プロセッサコア１ｂ、１ｃが夫々停止する。時刻１３０００にプロセッサコア１ｄでスレッドの実行が終了するが、プロセッサコア１ｄは最後のスレッド実行コアであり、かつ、スレッドキューにスレッドが残っているため、プロセッサコア１ｄのスレッド制御タスクは自プロセッサコア１ｄを停止せずにスレッドの取得・実行を行う。時刻１５０００にはプロセッサコア１ｄでは最後のスレッドの実行が終了し、プロセッサコア１ｄのスレッド制御タスクは自プロセッサコア１ｄを停止させる。
【００５０】
このように、第３の実施の形態によれば、待機スレッド数がしきい値Ａ（第１しきい値）以下である場合、電源系４に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、しきい値Ａを越える値であるしきい値Ｂ（第２しきい値）を待機スレッド数が越える場合、電源系４に電源供給が停止されている他のプロセッサコアへの電源供給を再開させる電源供給再開手段と、を備えるように構成したので、プロセッサコアの電源が頻繁にオン・オフされるのを防ぐことができるようになる。
【００５１】
ところで、以上の説明においては、しきい値Ｂ＞しきい値Ａ≧０の関係を満たすように各しきい値を設定する、として説明したが、しきい値Ａ＝しきい値Ｂ＝０とした場合、第１の実施の形態に等しくなる。また、しきい値Ｂ＝しきい値Ａ＞０とした場合、電源が頻繁にオン・オフされることを防ぐことはできないものの、第１の実施の形態と同様の効果を得ることができる。
【００５２】
なお、第３の実施の形態を拡張して、スレッドを実行中のプロセッサコアの個数の増減に応じてしきい値Ａ、しきい値Ｂを増減させるようにしてもよい。図１３は、スレッドを実行中のプロセッサコアの個数に応じてしきい値Ａおよびしきい値Ｂを増減させる場合のマルチコアプロセッサシステムの動作の概略を説明する図である。図１３においては、スレッドを実行中のプロセッサコアの個数が１個以下の場合、しきい値Ａの値はゼロ、２個の場合はしきい値Ａの値は２、３個以上の場合はしきい値Ａの値は３となる。このように、スレッド実行中のプロセッサコアの個数の増加するに伴ってしきい値Ａの値を増加させるようにする。また、スレッドを実行中のプロセッサコアの個数がゼロの場合、しきい値Ｂの値はゼロ、１個の場合はしきい値Ｂの値は３、２個の場合はしきい値Ｂの値は５、３個以上の場合はしきい値Ｂの値は７となる。このように、スレッド実行中のプロセッサコアの個数が増加するに伴ってしきい値Ｂの値を増加させるようにする。
【００５３】
図１４は、スレッドを実行中のプロセッサコアの個数の増減に応じてしきい値Ａおよびしきい値Ｂを増減させる場合の動作を説明する図である。図１４（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ４０１）、アプリケーションタスクの割り当てがある場合（ステップＳ４０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ４０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ４０１に移行する。
【００５４】
ステップＳ４０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ４０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ４０３）。スレッド制御タスクは、スレッドキュー３３を参照し、待機スレッド数がその時点におけるスレッドを実行中のプロセッサコア数に応じて定まるしきい値Ａを越えるか否かを判定する（ステップＳ４０４）。待機スレッド数がしきい値Ａを越えない場合（ステップＳ４０４、Ｎｏ）、スレッド制御タスクは、自プロセッサコア１ａの電源をオフするための電源制御信号を電源系４に送信して電源をオフし（ステップＳ４０５）、動作を停止する。待機スレッド数がしきい値Ａを越える場合（ステップＳ４０４、Ｙｅｓ）、スレッド制御タスクはスレッドキュー３３からスレッドを取得する（ステップＳ４０６）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ４０７）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ４０８）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ４０１に移行する。
【００５５】
図１４（ｂ）は、アプリケーションタスクおよびスレッド実行によりスレッドが生成される時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ４１１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ４１２）、リターンとなる。
【００５６】
図１４（ｃ）は、電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０３ａは、待機スレッド数がその時点におけるスレッド実行中のプロセッサコア数に応じて定まるしきい値Ｂを越えるか否かを判定する（ステップＳ４２１）。電源供給再開手段１０３ａは、待機スレッド数がしきい値Ｂを越える場合（ステップＳ４２１、Ｙｅｓ）、電源オフ状態のプロセッサコアがあるか否かをさらに判定する（ステップＳ４２２）。電源オフ状態のプロセッサコアがあった場合（ステップＳ４２２、Ｙｅｓ）、電源オフ状態のプロセッサのうちＩＤ番号が一番小さいプロセッサコアの電源をオンするための電源制御信号を電源系４に送信して、該プロセッサコアの電源をＯＮし（ステップＳ４２３）、電源供給再開試行処理の動作はリターンとなる。ステップＳ４２１において待機スレッド数がしきい値Ｂを越えなかったり（ステップＳ４２１、Ｎｏ）、ステップＳ４２２において電源オフ状態のプロセッサコアがなかった場合（ステップＳ４２２、Ｎｏ）、そのまま電源供給再開試行処理の動作はリターンとなる。
【００５７】
このように、スレッドを実行中のプロセッサコアが多いときはしきい値Ａを増加させて電源オンを起こりにくくし、スレッドを実行中のプロセッサコアが少ないときはしきい値Ｂを減少させて電源オフを起こりにくくすることによって、プロセッサコアの電源オン・オフの頻度をさらに低減することができるようになる。
【００５８】
（第４の実施の形態）
プロセッサコア毎にリソースが異なるマルチコアプロセッサシステムが使用される場合がある。そこで、第４の実施の形態によれば、要求リソースが異なるスレッド毎に異なるスレッドキューに蓄え、スレッド制御タスクは自プロセッサコアで実行可能なスレッドが蓄えられているスレッドキューからスレッドを取得する。
【００５９】
図１５は第４の実施の形態の概略を説明する図である。ここでは、スレッドキュー３３は複数本（ここでは２本）のスレッドキューに分かれており、第４の実施の形態のマルチコアプロセッサシステムは、スレッドキュー毎の要求リソースを記述した要求リソースリスト３６およびプロセッサコア毎のリソースを記述したプロセッサコアリソースリスト３７を有している。要求リソースリスト３６およびプロセッサコアリソースリスト３７の記憶場所は特に限定しないが、例えばＲＡＭ３であってよい。なお、本第４の実施の形態のマルチコアプロセッサシステムの構成は要求リソースリスト３６およびプロセッサコアリソースリスト３７以外の構成は第１の実施の形態と等しいので、要求リソースリスト３６およびプロセッサコアリソースリスト３７以外の構成についての説明は省略し、以降、第１の実施の形態の構成部名および符号を用いて説明する。また、本第４の実施の形態の機能構成についても第１の実施の形態とほぼ等しいため、第１の実施の形態と同じ機能構成名および符号を用いて説明する。
【００６０】
図１６は要求リソースリスト３６のデータ構造の一例を説明する図である。図示するように、要求リソースリスト３６では、スレッドキュー毎の識別子であるキューＩＤと格納するスレッドの要求リソースとが対応付けられている。この例においては、キューＩＤが０のスレッドキューに格納されるスレッドを実行するプロセッサコアには、スクラッチパッドメモリが少なくとも４キロバイトのサイズを持ち、かつ乗算命令を実行することができることが要求される。また、キューＩＤが１のスレッドキューに格納されているスレッドを実行するプロセッサコアには、スクラッチパッドメモリのサイズが８キロバイト以上あることが要求される。
【００６１】
図１７は、プロセッサコアリソースリスト３７のデータ構造の一例を説明する図である。図示するように、このプロセッサコアリソースリスト３７によれば、コアＩＤが０のプロセッサコアは、８キロバイトのスクラッチバッドメモリを持ち、コアＩＤが１のプロセッサコアは４キロバイトのスクラッチパッドメモリを持ち、かつ乗算命令を実行することが可能であることが示されている。つまり、図１６および図１７の例によれば、コアＩＤが０のプロセッサコアは、キューＩＤが１のスレッドキューに蓄えられているスレッドを実行することができ、コアＩＤが１のプロセッサコアは、キューＩＤが０のスレッドキューに蓄えられているスレッドを実行することができることになる。
【００６２】
図１８（ａ）〜（ｃ）は、本第４の実施の形態のプロセッサコア１ａ〜１ｆの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、ここでは代表としてプロセッサコア１ａの動作についてのみ説明する。
【００６３】
図１８（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ５０１）、アプリケーションタスクの割り当てがある場合（ステップＳ５０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ５０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ５０１に移行する。
【００６４】
ステップＳ５０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ５０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ５０３）。スレッド制御タスクは、要求リソースリスト３６およびプロセッサコアリソースリストを参照し、自プロセッサコア１ａのリソースが要求リソースを満たすスレッドキューを一つ選択し（ステップＳ５０４）、選択したスレッドキューに待機スレッドがあるか否かを判定する（ステップＳ５０５）。待機スレッドが無かった場合（ステップＳ５０５、Ｎｏ）、スレッド制御タスクは、自プロセッサコア１ａのリソースが要求リソースを満たすスレッドキューを全て選択したか否かを判定し（ステップＳ５０６）、全て選択していない場合（ステップＳ５０６、Ｎｏ）、ステップＳ５０４に移行して未選択のスレッドキューを一つ選択する。全て選択済みの場合（ステップＳ５０６、Ｙｅｓ）、電源供給再開手段１０３ａは電源供給再開試行処理を実行し（ステップＳ５０７）、スレッド制御タスクは電源系４に信号を送信して自プロセッサ１ａの電源をオフさせ（ステップＳ５０８）、停止する。なお、ステップＳ５０４において自プロセッサコア１ａのリソースが要求リソースを満たすスレッドキューが無かった場合、ステップＳ５０５をスキップしてステップＳ５０７に移行する。
【００６５】
ステップＳ５０５において、スレッドキューに待機スレッドがあった場合（ステップＳ５０５、Ｙｅｓ）、スレッド制御タスクは選択したスレッドキューからスレッドを取得する（ステップＳ５０９）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ５１０）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ５１１）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ５０１に移行する。
【００６６】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ５０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ５１１）も新たなスレッドを生成する場合がある。図１８（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ５２１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ５２２）、リターンとなる。
【００６７】
図１８（ｃ）は、電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０３ａは、スレッドキューを一つ選択し（ステップＳ５３１）、選択したスレッドキューに待機スレッドがあるか否かを判定する（ステップＳ５３２）。待機スレッドが無かった場合（ステップＳ５３２、Ｎｏ）、電源供給再開手段１０３ａは、未選択のスレッドキューがあるか否かをさらに判定し（ステップＳ５３３）、未選択のスレッドキューがあった場合（ステップＳ５３３、Ｎｏ）、ステップＳ５３１に移行して未選択のスレッドキューのうちから一つのスレッドキューをさらに選択する。
【００６８】
ステップＳ５３２において、選択したスレッドキューに待機スレッドがあった場合（ステップＳ５３２、Ｙｅｓ）、電源供給再開手段１０３ａは、要求リソースリスト３６およびプロセッサコアリソースリストを参照し、選択したスレッドキューの要求を満たす停止中のプロセッサコアがあるか否かをさらに判定する（ステップＳ５３４）。選択したスレッドキューの要求を満たす停止中のプロセッサコアが無かった場合（ステップＳ５３４、Ｎｏ）、ステップＳ５３３に移行し、選択したスレッドキューの要求を満たす停止中のプロセッサコアがあった場合（ステップＳ５３４、Ｙｅｓ）、電源供給再開手段１０３ａは、電源系４に信号を送信して前記選択したスレッドキューの要求を満たす停止中のプロセッサコアのうちのコアＩＤが一番小さいプロセッサコアの電源をオンし（ステップＳ５３５）、リターンとなる。ステップＳ５３３において、全てのスレッドキューが選択済みであった場合（ステップＳ５３３、Ｙｅｓ）、同様に動作がリターンとなる。
【００６９】
このように、第４の実施の形態によれば、電源供給停止手段は、自プロセッサコアのリソースが待機中の何れのスレッドのリソース要求も満たさない場合、前記電源系に自プロセッサコアへの電源供給を停止させ、電源供給再開手段は、電源供給が停止されている他のプロセッサコアのうち待機中のスレッドのリソース要求を満たすリソースを有するプロセッサコアがある場合、該プロセッサコアへの電源供給を再開させる、ように構成したので、プロセッサコアのリソースが夫々同一ではない、いわゆる非対称マルチコアプロセッサシステムであっても電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコア電源をオン・オフすることができるようになる。
【００７０】
（第５の実施の形態）
第４の実施の形態では、一つのスレッドキューには同一のリソースを要求するスレッドが入るようにした。これに対し、第５の実施の形態のマルチコアプロセッサシステムでは、一つのスレッドキューに異なるリソースを要求するスレッドを蓄えることができるようにしている。以下、第５の実施の形態のマルチコアプロセッサシステムについて説明する。
【００７１】
図１９は、第５の実施の形態のマルチコアプロセッサシステムの概略を説明する図である。図示するように、第５の実施の形態のマルチコアプロセッサシステムは、スレッドキュー３３の数は一つとなっており、第４の実施の形態と同様のプロセッサコアリソースリスト３７を備えている。また、スレッドキュー３３には、スレッド処理の開始アドレスのほか、要求リソースも記録される。
【００７２】
なお、本第５の実施の形態のマルチコアプロセッサシステムの構成はスレッドキュー３３のデータ構造およびプロセッサコアリソースリスト３７の構成以外は第１の実施の形態と等しいので、スレッドキュー３３およびプロセッサコアリソースリスト３７以外の構成についての説明は省略し、以降、第１の実施の形態の構成部名および符号を用いて説明する。また、本第５の実施の形態の機能構成についても第１の実施の形態とほぼ等しいため、第１の実施の形態と同じ機能構成名および符号を用いて説明する。
【００７３】
図２０は、スレッドキュー３３のデータ構造を説明する図である。図示するように、スレッドキュー３３に格納されている各スレッドは、スレッドを識別するためのＩＤと、ＲＡＭ３にロードされているユーザプログラム３２における該当部分の開始アドレスとしてのスレッド処理開始アドレスと、のほか、要求リソースが記述されている。ここでは、開始アドレスが０ｘ００００１２３４であるＩＤが０のスレッドは、８キロバイトのサイズのスクラッチパッドメモリを必要とすることが記述されている。また、開始アドレスが０ｘ００００５６７８であるＩＤが１のスレッドは、４キロバイトのサイズのスクラッチパッドメモリと乗算命令を実行できる機能とを必要とすることが記述されている。
【００７４】
図２１（ａ）〜（ｃ）は、本第５の実施の形態のプロセッサコア１ａ〜１ｆの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、ここでは代表としてプロセッサコア１ａの動作についてのみ説明する。
【００７５】
図２１（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ６０１）、アプリケーションタスクの割り当てがある場合（ステップＳ６０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ６０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ６０１に移行する。
【００７６】
ステップＳ６０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ６０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ６０３）。スレッド制御タスクは、待機スレッドを一つ選択し（ステップＳ６０４）、プロセッサコアリソースリスト３７に基づいて自プロセッサコア１ａのリソースが選択した待機スレッドのリソース要求を満たしているか否かを判定する（ステップＳ６０５）。リソース要求を満たしていない場合（ステップＳ６０５、Ｎｏ）、スレッド制御タスクは、待機スレッドを全て選択したか否かをさらに判定し（ステップＳ６０６）、未選択の待機スレッドがある場合（ステップＳ６０６、Ｎｏ）、ステップＳ６０４に移行して未選択の待機スレッドのうちの一つを選択する。未選択の待機スレッドが無い場合（ステップＳ６０６、Ｙｅｓ）、電源供給再開手段１０３ａは電源供給再開試行処理を実行し（ステップＳ６０７）、スレッド制御タスクは電源系４に信号を送信して自プロセッサ１ａの電源をオフさせ（ステップＳ６０８）、プロセッサコア１ａは停止する。なお、ステップＳ６０４において自プロセッサコア１ａのリソースが要求リソースを満たすスレッドキューが無かった場合、ステップＳ６０５およびステップＳ６０６をスキップしてステップＳ６０７に移行する。
【００７７】
ステップＳ６０５において、自プロセッサコア１ａのリソースが選択した待機スレッドのリソース要求を満たしていた場合（ステップＳ６０５、Ｙｅｓ）、スレッド制御タスクは選択したスレッドをスレッドキュー３３から取得する（ステップＳ６０９）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ６１０）。そして、スレッド制御タスクは、取得したスレッドを実行する（ステップＳ６１１）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ６０１に移行する。
【００７８】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ６０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ６１１）も新たなスレッドを生成する場合がある。図１２（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ６２１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ６２２）、リターンとなる。
【００７９】
図２１（ｃ）は、電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０３ａは、スレッドを一つ選択し（ステップＳ６３１）、スレッドの要求を満たす停止中のプロセッサコアがあるか否かを判定する（ステップＳ６３２）。要求を満たす停止中のプロセッサコアが無かった場合（ステップＳ６３２、Ｎｏ）、電源供給再開手段１０３ａは、未選択のスレッドがあるか否かをさらに判定し（ステップＳ６３３）、未選択のスレッドがあった場合（ステップＳ６３３、Ｎｏ）、ステップＳ６３１に移行して未選択のスレッドのうちから一つのスレッドをさらに選択する。
【００８０】
ステップＳ６３２において、スレッドの要求を満たす停止中のプロセッサコアがあった場合（ステップＳ６３２、Ｙｅｓ）、電源供給再開手段１０３ａは、電源系４に信号を送信してスレッドの要求を満たす停止中のプロセッサコアのうちのコアＩＤが最も小さいプロセッサコアの電源をオンし（ステップＳ６３４）、リターンとなる。ステップＳ６３３において、全てのスレッドが選択済みであった場合（ステップＳ６３３、Ｙｅｓ）、同様に動作がリターンとなる。
【００８１】
このように、第５の実施の形態によれば、第４の実施の形態と同様に非対称マルチコアプロセッサシステムであっても電源制御専用のプロセッサやハードウェアを用意することなく負荷状態に応じてプロセッサコア電源をオン・オフすることができるようになる。
【００８２】
（第６の実施の形態）
本第６の実施の形態のマルチコアプロセッサシステムは、スレッドの実行完了が間近のプロセッサコアがある場合、このプロセッサに近い将来スレッドを配分できるものと見込んで、プロセッサコアの不要な追加をしないようにしている。
【００８３】
図２２は第６の実施の形態のマルチコアプロセッサシステムの概略を説明するための図である。図示するように、第６の実施の形態のマルチコアプロセッサシステムは、タイマ５と、スレッドの実行終了予想時刻を記録するスレッド終了予想時刻テーブル３８と、を備えている。スレッド終了予想時刻テーブル３８を保持する領域は特に限定しないが、例えばＲＡＭ３であってよい。
【００８４】
図２３は、スレッド終了予想時刻テーブル３８の一例を説明する図である。図示するように、このスレッド終了予想時刻テーブル３８には、コアＩＤが１、２、４のプロセッサコアで現在動作しているスレッドは、夫々「１２４０００００００」、「１１５０００００００」、「１３８０００００００」の時刻に終了することが記述されている。また、コアＩＤが３のプロセッサコアは電源オフ状態となっていることを示している。なお、時刻の単位は特に限定しないが、例えばタイマ５が起動されてからのサイクル数であってよい。
【００８５】
図２４は、第６の実施の形態のマルチコアプロセッサシステムのスレッドキュー３３のデータ構造を説明する図である。図示するように、本第６の実施の形態では、スレッドキュー３３は、スレッド毎にスレッド処理開始アドレスとスレッドの計算時間の見積もり値とをセットにして格納するようになっている。なお、計算時間の見積もり値とは、計算時間を見積もることが可能な値であればどのような値であってもよく、例えば必要となるサイクル数であってよい。
【００８６】
なお、以下、タイマ５およびスレッド終了予想時刻テーブル３８以外の構成部の名称および符号は、第１の実施の形態と同じものを使用して説明する。図２５は、プロセッサコア１ａが基本プログラム３１を実行することにより生成される機能を説明する図である。図示するように、基本プログラム３１は、プロセッサコア１ａに、基本制御手段１０１ａ、電源供給停止手段１０６ａ、電源供給再開手段１０７ａおよび終了予想時刻記録手段１０８ａを生成する。基本制御手段１０１ａは、アプリケーションタスクやスレッド制御タスクを起動する。電源供給停止手段１０６ａは、スレッド制御タスクに実装され、スレッドキュー３３に取得すべきスレッドがない場合、自プロセッサ１ａの電源をオフするための電源制御信号を電源系４に送信する。電源供給再開手段１０７ａは、自プロセッサコア１ａで動作しているアプリケーションタスクやスレッドが新たにスレッドを生成した際、電源供給再開試行処理を実行する。終了予想時刻記録手段１０８ａは、スレッド制御タスクに実装され、スレッドをスレッドキュー３３から取得したとき、スレッドキュー３３に格納されていた前記スレッドの計算時間の見積もり値とタイマ５の値とに基づいて前記取得したスレッドの終了予測時刻を算出し、算出した終了予測時刻をスレッド終了予想時刻テーブル３８に書き込む。なお、プロセッサコア１ｂ〜１ｆも基本プログラム３１に基づいて上述のプロセッサコア１ａと同様の機能を夫々生成するが、説明が重複するのでプロセッサコア１ｂ〜１ｆに関する機能については説明を省略する。
【００８７】
次に、本第６の実施の形態のマルチコアプロセッサシステムの動作を説明する。図２６（ａ）〜（ｃ）は、プロセッサコア１ａ〜１ｆの動作を説明するフローチャートである。プロセッサコア１ａ〜１ｆは同じ動作を実行することができるので、ここでは代表としてプロセッサコア１ａの動作についてのみ説明する。
【００８８】
図２６（ａ）に示すように、まず、基本制御手段１０１ａは、自プロセッサコア１ａにアプリケーションタスクの割り当てがあるか否かを判定し（ステップＳ７０１）、アプリケーションタスクの割り当てがある場合（ステップＳ７０１、Ｙｅｓ）、アプリケーションタスクを実行する（ステップＳ７０２）。プロセッサコア１ａは、アプリケーションタスクを実行したとき、スレッドを生成する。プロセッサコア１ａがアプリケーションタスクの実行を終了すると、ステップＳ７０１に移行する。
【００８９】
ステップＳ７０１において、アプリケーションタスクの割り当てが無いと判定した場合（ステップＳ７０１、Ｎｏ）、基本制御手段１０１ａは、スレッド制御タスクを起動して実行する（ステップＳ７０３）。スレッド制御タスクは、タイマ５とスレッド終了予想時刻テーブル３８とを参照し、残りの実行時間が予め設定されているしきい値Ｔ以下であるコア数を計算し、終了見込みコア数とする（ステップＳ７０４）。さらに、スレッド制御タスクは、スレッドキュー３３の待機スレッド数から終了見込みコア数を減算した値を実待機スレッドコア数とする（ステップＳ７０５）。
【００９０】
そして、スレッド制御タスクは、実待機スレッド数がしきい値Ａを越えるか否かを判定する（ステップＳ７０６）。実待機スレッド数がしきい値Ａを越えていない場合（ステップＳ７０６、Ｎｏ）、スレッド制御タスクは、自プロセッサコア１ａの電源をオフするための電源制御信号を電源系４に送信して電源をオフし（ステップＳ７０７）、動作を停止する。実待機スレッド数がしきい値Ａを越えている場合（ステップＳ７０６、Ｙｅｓ）、スレッド制御タスクはスレッドキュー３３からスレッドを取得する（ステップＳ７０８）。そして、電源供給再開手段１０３ａは、電源供給再開試行処理を実行する（ステップＳ７０９）。そして、スレッド制御タスクは、タイマ５による現在時刻とスレッドキュー３３に付随していた取得したスレッドの計算時間の見積もり値とに基づいて終了予想時刻を算出し、算出した終了予想時刻をスレッド終了予想時刻テーブル３８に書き込み（ステップＳ７１０）、前記取得したスレッドを実行する（ステップＳ７１１）。スレッド制御タスクがスレッドの実行を完了すると、ステップＳ７０１に移行する。
【００９１】
プロセッサコア１ａは、アプリケーションタスクを実行した際（ステップＳ７０２）、新たなスレッドを生成する場合がある。また、スレッドを実行した際（ステップＳ７１１）も新たなスレッドを生成する場合がある。図２６（ｂ）は、スレッド生成時のプロセッサコア１ａの動作を説明する図である。図示するように、プロセッサコア１ａは、新たなスレッドを生成すると、スレッドキュー３３に生成したスレッドを追加する（ステップＳ７１１）。すると、電源供給再開手段１０３ａは、電源供給再開試行処理を実行し（ステップＳ７２２）、リターンとなる。
【００９２】
図２６（ｃ）は、ステップＳ７０９およびステップＳ７２２において実行される電源供給再開試行処理を詳しく説明するフローチャートである。図示するように、電源供給再開試行処理が開始されると、電源供給再開手段１０７ａは、タイマ５とスレッド終了予想時刻テーブル３８とを参照し、残りの実行時間が予め設定されているしきい値Ｔ以下であるコア数を計算し、終了見込みコア数とする（ステップＳ７３１）。さらに、電源供給再開手段１０７ａは、スレッドキュー３３の待機スレッド数から終了見込みコア数を減算した値を実待機スレッドコア数とする（ステップＳ７３２）。そして、電源供給再開手段１０７ａは、実待機スレッド数がしきい値Ｂを越えるか否かを判定する（ステップＳ７３３）。電源供給再開手段１０７ａは、実待機スレッド数がしきい値Ｂを越えている場合（ステップＳ７３３、Ｙｅｓ）、電源オフ状態のプロセッサコアがあるか否かをさらに判定する（ステップＳ７３４）。電源オフ状態のプロセッサコアがあった場合（ステップＳ７３４、Ｙｅｓ）、電源オフ状態のプロセッサのうちＩＤ番号が一番小さいプロセッサコアの電源をオンするための電源制御信号を電源系４に送信して、該プロセッサコアの電源をＯＮし（ステップＳ７３５）、電源供給再開試行処理の動作はリターンとなる。ステップＳ７３３において実待機スレッド数がしきい値Ｂを越えなかったり（ステップＳ７３３、Ｎｏ）、ステップＳ７３４において電源オフ状態のプロセッサコアがなかった場合（ステップＳ７３４、Ｎｏ）、そのまま電源供給再開試行処理の動作はリターンとなる。
【００９３】
このように、第６の実施の形態によれば、スレッドをスレッドキュー３３から取得したとき、スレッドキューに格納されていた計算時間の見積もり値（計算時間情報）とタイマ５の値とに基づいて取得したスレッドの終了予測時刻を算出し、算出した終了予測時刻をスレッド終了予想時刻テーブル３８に書き込む終了予想時刻記録手段と、スレッド終了予想時刻テーブル３８とタイマ５の値とに基づいて終了見込みコア数を算出し、待機スレッド数から終了見込みコア数を減算した値がしきい値Ａ以下である場合、電源系４に自プロセッサコアへの電源供給を停止させる電源供給停止手段と、終了見込みコア数がしきい値Ｂを越える場合、電源系４に電源供給が停止されている他のプロセッサコアへの電源供給を再開させる電源供給再開手段と、を備えるように構成したので、スレッドの実行完了が間近のプロセッサコアがある場合、このプロセッサに近い将来スレッドを配分できるものと見込んで、プロセッサコアの不要な追加をしないようにしている。
【符号の説明】
【００９４】
１  マルチコアプロセッサ、１ａ〜１ｆ  プロセッサコア、２  ＲＯＭ、３  ＲＡＭ、４  電源系、５  タイマ、３１  基本プログラム、３２  ユーザプログラム、３３  スレッドキュー、３４  コア電源オフ時刻テーブル、３５  基本プログラム、３６  要求リソースリスト、３７  プロセッサコアリソースリスト、３８  スレッド終了予想時刻テーブル、１０１ａ  基本制御手段、１０２ａ  電源供給停止手段、１０３ａ  電源供給再開手段、１０４ａ  電源供給停止手段、１０５ａ  電源供給再開手段、１０６ａ  電源供給停止手段、１０７ａ  電源供給再開手段、１０８ａ  終了予想時刻記録手段。
【図１】
2010271930.tif 000003
【図２】
2010271930.tif 000004
【図３】
2010271930.tif 000005
【図４】
2010271930.tif 000006
【図５】
2010271930.tif 000007
【図６】
2010271930.tif 000008
【図７】
2010271930.tif 000009
【図８】
2010271930.tif 000010
【図９】
2010271930.tif 000011
【図１０】
2010271930.tif 000012
【図１１】
2010271930.tif 000013
【図１２】
2010271930.tif 000014
【図１３】
2010271930.tif 000015
【図１４】
2010271930.tif 000016
【図１５】
2010271930.tif 000017
【図１６】
2010271930.tif 000018
【図１７】
2010271930.tif 000019
【図１８】
2010271930.tif 000020
【図１９】
2010271930.tif 000021
【図２０】
2010271930.tif 000022
【図２１】
2010271930.tif 000023
【図２２】
2010271930.tif 000024
【図２３】
2010271930.tif 000025
【図２４】
2010271930.tif 000026
【図２５】
2010271930.tif 000027
【図２６】
2010271930.tif 000028