(57)【要約】  本発明に係るマルチプロセッサ制御装置は、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の各プロセッサへの電力供給を制御する電力制御手段とを備える。
2008129786.tif 000002
【特許請求の範囲】
【請求項１】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御手段とを備える、マルチプロセッサ制御装置。
【請求項２】
前記電力制御手段は、前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第２プログラムブロックのバリア同期開始の前後で前記第１及び第２ブロックの実行状態が同じ状態となるように前記第１及び第２ブロックの実行開始タイミングを前記プロセッサ毎に制御するとともに、前記第２プログラムブロックのバリア同期開始の前後で前記第１及び第２ブロックを実行していないプロセッサがスリープ状態になり、前記第１及び第２ブロックを実行しているプロセッサが動作状態になるように前記複数のプロセッサへの電力供給を制御することを特徴とする、請求項１に記載のマルチプロセッサ制御装置。
【請求項３】
前記電力制御手段は、
前記プロセッサを通常動作状態にする電力を表す通常動作モードと、前記プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各前記プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、
各前記プロセッサへのクロック信号及び／又は電源電圧の供給を制御して、各前記プロセッサの電力モードを前記電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサに対して、前記第２プログラムブロックのバリア同期開始から前記第２非実行時間情報が表す時間だけ前記第２ブロックの実行開始タイミングを遅延させるとともに、前記第１ブロックの実行終了から前記第２ブロックの実行開始までの間の電力モードを、前記スリープモードに設定することを特徴とする、請求項２に記載のマルチプロセッサ制御装置。
【請求項４】
前記第２非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第２非実行時間であることを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項５】
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１ブロックの実行終了から前記第２ブロックの実行開始までの間、前記第１非実行時間情報が表す時間に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項６】
前記電力モード制御手段は、前記第２非実行時間情報が表す時間が前記第１非実行時間情報が表す時間よりも大きい場合、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間、前記第１非実行時間情報が表す時間に応じたスリープモードに設定し、前記第２プログラムブロックのバリア同期開始から前記第２ブロックの実行開始までの間、前記第２非実行時間情報が表す時間に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項７】
前記第１及び第２プログラムブロックは、同一のプログラムブロックであり、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１非実行時間情報が表す時間と前記第２非実行時間情報が表す時間との和に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項８】
前記第１非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第１非実行時間であり、
前記第２非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第２非実行時間であることを特徴とする、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項９】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の統計時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の統計時間であることを特徴とする、請求項１から請求項３、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１０】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の平均時間であることを特徴とする、請求項９に記載のマルチプロセッサ制御装置。
【請求項１１】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間のうち最小の第１非実行時間を除いて算出された平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間のうち最小の第２非実行時間を除いて算出された平均時間であることを特徴とする、請求項９に記載のマルチプロセッサ制御装置。
【請求項１２】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間のうちの最小の第１非実行時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間のうちの最小の第１非実行時間であることを特徴とする、請求項１から請求項３、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１３】
前記電力モード制御手段には、さらに、前記プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、
前記電力モード制御手段は、
前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサに対して、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間の電力モードを前記第１非実行時間情報が表す時間に応じたスリープモードに設定した場合に前記プロセッサで消費される電力と、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間の電力モードを前記低速動作モードに設定した場合に前記プロセッサで消費される電力とを比較して、前記プロセッサの電力モードを前記プロセッサで消費される電力が少ない方の電力モードに設定し、
前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサに対して、前記第２ブロックの実行終了から前記第２プログラムブロックのバリア同期成立までの間の電力モードを前記第２非実行時間情報が表す時間に応じたスリープモードに設定した場合に前記プロセッサで消費される電力と、前記第２ブロックの実行終了から前記第２プログラムブロックのバリア同期成立までの間の電力モードを前記低速動作モードに設定した場合に前記プロセッサで消費される電力とを比較して、前記プロセッサの電力モードを前記プロセッサで消費される電力が少ない方の電力モードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項１４】
前記取得手段は、前記第１及び第２バリア成立時間をさらに取得しており、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードを前記低速動作モードに設定する場合、前記第１非実行時間情報が表す時間と前記第１バリア成立時間との比に応じた、前記通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第１周波数を算出し、算出した第１周波数を前記低速動作モードとして設定し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードを前記低速動作モードに設定する場合、前記第２非実行時間情報が表す時間と前記第２バリア成立時間との比に応じた、前記通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第２周波数を算出し、算出した第２周波数を前記低速動作モードとして設定し、
前記移行手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を前記第１周波数に設定し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を前記第２周波数に設定することを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１５】
前記電力モード制御手段は、各前記プロセッサの電力モードを全て前記低速動作モードに設定したとき、各前記プロセッサの電力モードを前記通常動作モードに設定し直すことを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１６】
前記取得手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサが低速動作状態で前記第１ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが前記通常動作状態で前記第１ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を前記第１バリア成立時間から減算して前記第１非実行時間を取得し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサが低速動作状態で前記第２ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが前記通常動作状態で前記第２ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を前記第２バリア成立時間から減算して前記第２非実行時間を取得することを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１７】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の統計時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の統計時間であることを特徴とする、請求項１３から請求項１６のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１８】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の平均時間であることを特徴とする、請求項１７に記載のマルチプロセッサ制御装置。
【請求項１９】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得ステップと、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御ステップとを含む、制御方法。
【請求項２０】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御手段とを備える、集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ制御装置、その制御方法および集積回路に関し、より特定的には、複数のプロセッサの低消費電力化を実現するマルチプロセッサ制御装置、その制御方法および集積回路に関する。
【背景技術】
【０００２】
複数のプロセッサそれぞれにプログラム内のスレッド（またはプロセス）を割り当てて、それらスレッドを並列的に実行するマルチプロセッサシステムでは、各スレッド間で共通に参照している変数の読み書き順序に矛盾が生じるのを防ぐため、全てのスレッドがスレッド毎に予め設定されたバリアポイントに到達するまで次の実行をブロックするバリア同期（Ｂａｒｒｉｅｒ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）を行っている。以下では、バリア同期を開始することをバリア開始、スレッドがバリアポイントに到達することをバリア到達、最後のスレッドがバリア到達することによりバリア同期が成立することをバリア成立、バリア到達したスレッドがバリア成立まで待機状態となることをバリア待ちと呼ぶこととする。【０００３】
バリア同期を実現するマルチプロセッサシステムは、一般的に、複数のプロセッサが単一のアドレス空間を共有する共有記憶型の構成を有している。共有記憶型のマルチプロセッサシステムは、各プロセッサからアクセス可能な共有メモリバス上の主記憶装置に設けたロック変数を使用して、バリア同期を実現している。具体的には、まず、ロック変数を、並列実行を行う全プロセッサのスレッド数に設定しておく。プロセッサは、スレッドのバリア到達時にアトミック操作（共有メモリバスを占有してＲｅａｄ―Ｍｏｄｉｆｉｅｄ―Ｗｒｉｔｅの一連の動作を行う操作）を行い、主記憶装置にアクセスしてロック変数を１つデクリメントさせる。その後、プロセッサは、バリア待ちとなる。バリア待ちのプロセッサは、他のプロセッサのアトミック操作によってロック変数が０になったかどうかを、ロック変数を繰り返しロードして判定し続ける。つまり、ロック変数が０になることはバリア成立を意味するので、プロセッサは、バリア成立まで、ロック変数のロードと判定を繰り返していることになる。このように、バリア待ちの間にロック変数のロードと判定を繰り返している状態を、スピンウェイト（Ｓｐｉｎ  Ｗａｉｔｉｎｇ）状態と呼ぶ。【０００４】
ここで、スピンウェイト状態のプロセッサは、本来割り当てられたスレッドを実行していないにもかかわらず、常に主記憶装置へのアクセスを伴った通常の動作状態になる。このため、スピンウェイト状態のプロセッサは、無駄な電力を消費していることになる。【０００５】
そこで、このようなスピンウェイト状態のプロセッサを非動作状態にするスリープモードに移行させることにより、低消費電力化を実現する技術が提案されている。この技術では、論理回路へのクロック信号の供給を遮断するクロックゲーティング（Ｃｌｏｃｋ  Ｇａｔｉｎｇ）を行ったり、近年半導体プロセスの微細化に伴って増大しているリーク電力対策のためのスレッショルド電圧（Ｖｔｈ）の制御を行ったり、電源電圧（Ｖｄｄ）の供給を遮断するパワーゲーティング（Ｐｏｗｅｒ  Ｇａｔｉｎｇ）を行ったりして、スピンウェイト状態のプロセッサの電力モードをスリープモードに移行させている。例えば、英ＡＲＭ社のＡＲＭプロセッサには、図３７に示すように、プロセッサのとり得る複数の電力モードが設定されている。電力モードには、通常の動作状態のモード（通常動作モード）であるＲｕｎモードと、非動作状態のスリープモードである、Ｓｔａｎｄｂｙモード、Ｄｏｒｍａｎｔモード、及びＳｈｕｔｄｏｗｎモードとがある。Ｓｔａｎｄｂｙモード、Ｄｏｒｍａｎｔモード、及びＳｈｕｔｄｏｗｎモードは、プロセッサコア及びキャッシュメモリそれぞれに供給するクロック信号のＯＮ／ＯＦＦと電圧のＯＮ／ＯＦＦのさせ方が互いに異なっている。【０００６】
ここで、Ｄｏｒｍａｎｔモードは、パワーゲーティングを適用しているため、クロックゲーティングのみを適用したＳｔａｎｄｂｙモードに比べて省電力効果が大きく、Ｓｔａｎｄｂｙモードよりも深いスリープモードとなる。Ｓｈｕｔｄｏｗｎモードは、キャッシュメモリに供給する電圧もＯＦＦしているため、Ｄｏｒｍａｎｔモードに比べて省電力効果が大きく、Ｄｏｒｍａｎｔモードよりも深いスリープモードとなる。一方で、Ｄｏｒｍａｎｔモードは、プロセッサコア内のレジスタ等の内部状態（コンテキスト）を、電圧ＯＦＦ時にはプロセッサコアから外部メモリ等に退避させ、電圧ＯＮ時には外部メモリ等からプロセッサコアに復帰させる必要がある。また、プロセッサコアの電圧をＯＮさせる場合、比較的長い安定化時間を要する。このため、Ｄｏｒｍａｎｔモードは、Ｓｔａｎｄｂｙモードに比べて、Ｒｕｎモードから移行する際、及びＲｕｎモードへ復旧する際の時間的なオーバーヘッドが大きい。Ｓｈｕｔｄｏｗｎモードは、キャッシュメモリ内のコンテキストの退避・復帰や、キャッシュメモリの安定化時間も考慮する必要があるため、Ｄｏｒｍａｎｔモードに比べて時間的なオーバーヘッドが大きい。このため、より省電力な（深い）スリープモードは、スリープモードを適用する時間が通常動作モードからの移行及び通常動作モードへの復旧に要する時間に比べて十分に長くなければ、適用できない。【０００７】
そこで、より深いスリープモードを上記のようなバリア待ちのプロセッサに適用するには、バリア待ち時間を事前に見積もる必要がある。これを実現する従来技術として、バリア待ち時間を履歴によって予測し、予測したバリア待ち時間（バリア待ち予測時間）に応じてどの深さのスリープモードへ移行するかを決定する方法が提案されている（例えば、非特許文献１など）。具体的には、スレッドがバリア到達すると、当該スレッドを実行したプロセッサの電力モードを、通常動作モードからバリア待ち予想時間に応じたスリープモードに移行させる。その後、バリア成立するまでに電力モードがスリープモードから通常動作モードに復旧するように、バリア待ち予想時間から逆算したタイミングで通常動作モードへの復旧を開始する。このように、従来技術では、バリア待ち時間を履歴によって予測することで、より深いスリープモードをバリア待ちのプロセッサに適用させている。
【非特許文献１】ジェイ・リー（Ｊ．Ｌｉ）、ジェイ・マルティネス（Ｊ．Ｍａｒｔｉｎｅｚ）、エム・ホアン（Ｍ．Ｈｕａｎｇ）、「ザ  スリフティ  バリア：  エナジ−アウェア  シンクロナイゼイション  イン  シェアード−メモリ  マルチプロセッサーズ（Ｔｈｅ  Ｔｈｒｉｆｔｙ  Ｂａｒｒｉｅｒ：  Ｅｎｅｒｇｙ−Ａｗａｒｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｉｎ  Ｓｈａｒｅｄ−Ｍｅｍｏｒｙ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒｓ）」、イン  プロシーディングス  オブ  ハイ−パフォーマンス  コンピューター  アーキテクチャ  （エイチピーシーエー）  ‘０４，（Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｈｔｕｒｅ  （ＨＰＣＡ）  ‘０４，）、アイトリプルイー  コンピュータ  ソサエティ  ワシントン  ディーシー  ユーエスエー（ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｗａｓｈｉｎｇｔｏｎ，  ＤＣ，  ＵＳＡ）、米国、２００４年、ｐ１４―２３
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したように、スリープモードへの移行及び通常動作モードへの復旧には時間的なオーバーヘッドが存在し、オーバーヘッドはスリープモードが深いほど大きい。さらに、上記従来技術では、スリープモードへの移行と通常動作モードへの復旧とを、１つのバリア同期毎に行っている。このため、上記従来技術では、スリープモードの適用時間に占めるオーバーヘッドの割合が大きく、実際の省電力効果は小さいという課題を有していた。【０００９】
本発明は、上記の課題を解決するものであり、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上記課題を解決するためになされた発明であり、本発明に係るマルチプロセッサ制御装置は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。【００１１】
なお、第１及び第２非実行時間情報は、例えば、後述する実施の形態におけるスレッド非実行予測時間に相当する情報である。また、第１ブロック及び第２ブロックは、例えば、後述する実施の形態におけるスレッド又はプロセスに相当するものである。【００１２】
以上の構成によれば、電力制御手段は、２つの非実行時間情報を用いて、連続して並列実行される２つのプログラムブロックに跨った電力制御を行っている。これにより、１つの非実行時間情報を用いて、１つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来に対し、２つの非実行時間情報の用い方によっては各プロセッサについての更なる省電力化が可能となる。【００１３】
好ましくは、電力制御手段は、取得手段において取得された第１及び第２非実行時間情報を用いて、第２プログラムブロックのバリア同期開始の前後で第１及び第２ブロックの実行状態が同じ状態となるように第１及び第２ブロックの実行開始タイミングをプロセッサ毎に制御するとともに、第２プログラムブロックのバリア同期開始の前後で第１及び第２ブロックを実行していないプロセッサがスリープ状態になり、第１及び第２ブロックを実行しているプロセッサが動作状態になるように複数のプロセッサへの電力供給を制御するとよい。この構成により、１つの非実行時間情報を用いて、１つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来と比べて、スリープ状態への移行と動作状態への復旧の回数を減らすことができるので、各プロセッサについての更なる省電力化が可能となる。【００１４】
上記構成においてさらに、電力制御手段は、プロセッサを通常動作状態にする電力を表す通常動作モードと、プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、各プロセッサへのクロック信号及び／又は電源電圧の供給を制御して、各プロセッサの電力モードを電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサに対して、第２プログラムブロックのバリア同期開始から第２非実行時間情報が表す時間だけ第２ブロックの実行開始タイミングを遅延させるとともに、第１ブロックの実行終了から第２ブロックの実行開始までの間の電力モードを、スリープモードに設定するとよい。なお、移行手段は、例えば、後述する実施の形態におけるクロック信号制御部及び電源電圧制御部に相当するものである。なお、第２非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第２非実行時間であってもよい。【００１５】
上記構成においてさらに、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１ブロックの実行終了から第２ブロックの実行開始までの間、第１非実行時間情報が表す時間に応じたスリープモードに設定するとよい。又は、電力モード制御手段は、第２非実行時間情報が表す時間が第１非実行時間情報が表す時間よりも大きい場合、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間、第１非実行時間情報が表す時間に応じたスリープモードに設定し、第２プログラムブロックのバリア同期開始から第２ブロックの実行開始までの間、第２非実行時間情報が表す時間に応じたスリープモードに設定するよい。又は、第１及び第２プログラムブロックは、同一のプログラムブロックであり、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１非実行時間情報が表す時間と第２非実行時間情報が表す時間との和に応じたスリープモードに設定するとよい。【００１６】
なお、第１非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第１非実行時間であり、第２非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第２非実行時間であってもよい。【００１７】
又は、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の統計時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の統計時間であってもよい。この場合においてさらに、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の平均時間であるとよい。又は、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間のうち最小の第１非実行時間を除いて算出された平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間のうち最小の第２非実行時間を除いて算出された平均時間であるとよい。【００１８】
又は、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間のうちの最小の第１非実行時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間のうちの最小の第１非実行時間であってもよい。【００１９】
上記構成においてさらに、電力モード制御手段には、さらに、プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、電力モード制御手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサに対して、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間の電力モードを第１非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサに対して、第２ブロックの実行終了から第２プログラムブロックのバリア同期成立までの間の電力モードを第２非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第２ブロックの実行終了から第２プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定するとよい。【００２０】
この場合においてさらに、取得手段は、第１及び第２バリア成立時間をさらに取得しており、電力モード制御手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第１非実行時間情報が表す時間と第１バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第１周波数を算出し、算出した第１周波数を低速動作モードとして設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第２非実行時間情報が表す時間と第２バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第２周波数を算出し、算出した第２周波数を低速動作モードとして設定し、移行手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第１周波数に設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第２周波数に設定するとよい。【００２１】
又は、電力モード制御手段は、各プロセッサの電力モードを全て低速動作モードに設定したとき、各プロセッサの電力モードを通常動作モードに設定し直すとよい。【００２２】
又は、取得手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第１ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第１ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第１バリア成立時間から減算して第１非実行時間を取得し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第２ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第２ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第２バリア成立時間から減算して第２非実行時間を取得するとよい。【００２３】
なお、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の統計時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の統計時間であってもよい。この場合においてさらに、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の平均時間であるとよい。【００２４】
また本発明は、マルチプロセッサ制御装置で行われる制御方法にも向けられており、本発明に係る制御方法は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得ステップと、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御ステップとを含む。【００２５】
また本発明は、集積回路にも向けられており、本発明に係る集積回路は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
【発明の効果】
【００２６】
本発明によると、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することができる。
【図面の簡単な説明】
【００２７】
【図１】図１は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。
【図２】図２は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。
【図３】図３は、実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
【図４】図４は、予測情報取得部１１の具体的な構成例を示す図である。
【図５】図５は、履歴情報格納部１１２内の履歴テーブルを示す図である。
【図６】図６は、電力制御部１３の具体的な構成例を示す図である。
【図７】図７は、電力モード制御部１３１が設定する電力モードを示す図である。
【図８】図８は、マルチプロセッサ制御装置１全体の動作の流れを示すフローチャートである。
【図９】図９は、実施の形態１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図１０】図１０は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
【図１１】図１１は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。
【図１２】図１２は、実施の形態１の変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
【図１３】図１３は、予測情報取得部１１ａの具体的な構成例を示す図である。
【図１４】図１４は、履歴情報格納部１１２ａ内の履歴テーブルを示す図である。
【図１５】図１５は、電力制御部１３ａの具体的な構成例を示す図である。
【図１６】図１６は、マルチプロセッサ制御装置１ａ全体の動作の流れを示すフローチャートである。
【図１７】図１７は、実施の形態１の変形例１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図１８】図１８は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
【図１９】図１９は、実施の形態１の変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図２０】図２０は、実施の形態２に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
【図２１】図２１は、予測情報取得部６１の具体的な構成例を示す図である。
【図２２】図２２は、履歴情報格納部６１２内の履歴テーブルを示す図である。
【図２３】図２３は、電力制御部６３の具体的な構成例を示す図である。
【図２４】図２４は、電力モード制御部６３１が設定する電力モードを示す図である。
【図２５】図２５は、マルチプロセッサ制御装置６全体の動作の流れを示すフローチャートである。
【図２６】図２６は、実施の形態２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図２７】図２７は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
【図２８】図２８は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。
【図２９】図２９は、実施の形態２の変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
【図３０】図３０は、予測情報取得部６１ａの具体的な構成例を示す図である。
【図３１】図３１は、履歴情報格納部６１２ａ内の履歴テーブルを示す図である。
【図３２】図３２は、電力制御部６３ａの具体的な構成例を示す図である。
【図３３】図３３は、マルチプロセッサ制御装置６ａ全体の動作の流れを示すフローチャートである。
【図３４】図３４は、実施の形態２の変形例１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図３５】図３５は、実施の形態２の変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャートである。
【図３６】図３６は、実施の形態１に係るマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。
【図３７】図３７は、英ＡＲＭ社のＡＲＭプロセッサで用いられる電力モードを示した図である。
【符号の説明】
【００２８】
１、１ａ、６、６ａ    マルチプロセッサ制御装置
２    共有メモリバス
３    主記憶装置
４    電源装置
５、５ａ    プログラム
７    メモリコントローラ
８    ＩＯインタフェイス
１１、１１ａ、６１、６１ａ    予測情報取得部
１１１、１１１ａ、６１１、６１１ａ    バリア監視部
１１２、１１２ａ、６１２、６１２ａ    履歴情報格納部
１１３、１１３ａ、６１３、６１３ａ    予測情報生成部
１２    タイマ
１３、１３ａ、６３、６３ａ    電力制御部
１３１、１３１ａ、６３１、６３１ａ    電力モード制御部
１３２、６３２    クロック信号制御部
１３３、６３３    電源電圧制御部
９１    光ディスクドライブ
９２    光ディスク
９３    メモリカードドライブ
９４    メモリカード
【発明を実施するための最良の形態】
【００２９】
まず、各プロセッサによって実行されるプログラムの構成について具体的に説明する。【００３０】
プログラムは、並列実行可能か否かを基準に複数のプログラムブロックに分割される。各プログラムブロックは、並列実行可能な並列プログラムブロック、又は並列実行不可能な逐次プログラムブロックのいずれかに分類される。【００３１】
図１は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。プログラム５に記述された関数ｐａｒ（ｉ）は、ｉについて並列実行可能であることを示す関数であり、関数ｓｅｑ（）は、並列実行不可能であることを示す関数であるとする。この場合、プログラムブロック５１は並列プログラムブロックとなり、プログラムブロック５２は逐次プログラムブロックとなる。また、プログラム５に記述されたｊはループ実行の回数を示しており、図１の記述によれば、並列プログラムブロック５１が１０回（ｊ＝０〜９）だけループ実行され、その後、逐次プログラムブロック５２が実行されることになる。さらに図１では、並列プログラムブロック５１をｉについて４つのスレッド（ｉ＝０〜２４、ｉ＝２５〜４９、ｉ＝５０〜７４、ｉ＝７５〜９９）に分割している。そして、分割した４つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−４に割り当てられている。例えば、プロセッサＰ−２は、バリア開始と同時にｉ＝２５〜４９で示されるスレッドの実行を開始し、当該スレッドのバリア到達時（ｉ＝２５〜４９で示されるスレッドに係る実線矢印の先端）にアトミック操作を行い、主記憶装置にアクセスしてロック変数を１つデクリメントさせる。その後、プロセッサＰ−２は、ｉ＝２５〜４９で示されるスレッドの点線矢印のように、バリア成立するまでバリア待ちとなる。【００３２】
スレッド開始時間ＴＳＴ（Ｔｈｒｅａｄ  Ｓｔａｒｔｉｎｇ  Ｔｉｍｅ）は、バリア開始からスレッドの実行が開始されるまでの時間を示す。図１の例では、各スレッドのスレッド開始時間ＴＳＴをＴＳＴ−１〜ＴＳＴ−４で示している。また図１の例では、各スレッドがバリア開始と同時に実行を開始しているので、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−４は、全て“０”となっている。バリア成立時間ＢＥＴ（Ｂａｒｒｉｅｒ  Ｅｓｔａｂｌｉｓｈ  Ｔｉｍｅ）は、バリア開始からバリア成立までの時間を示す。バリア到達時間ＢＡＴ（Ｂａｒｒｉｅｒ  Ａｒｒｉｖａｌ  Ｔｉｍｅ）は、バリア開始からスレッドのバリア到達までの時間を示す。図１の例では、各スレッドのバリア到達時間ＢＡＴをＢＡＴ−１〜ＢＡＴ−４で示している。バリア待ち時間ＢＷＴ（Ｂａｒｒｉｅｒ  Ｗａｉｔｉｎｇ  Ｔｉｍｅ）は、バリア到達からバリア成立までの時間を示す。図１の例では、各スレッドのバリア待ち時間ＢＷＴをＢＷＴ−１〜ＢＷＴ−４で示している。図１の例では、ｉ＝０〜２５で示されるスレッドのバリア到達が最後となるので、当該スレッドのバリア到達時にバリア成立となる。よって、バリア待ち時間ＢＷＴ−１＝０となっている。スレッド非実行時間ＴＮＰＴ（Ｔｈｒｅａｄ  Ｎｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｔｉｍｅ）は、バリア開始からバリア成立までの間で、スレッドが実行していない時間を示す。【００３３】
ここで、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、及びバリア待ち時間ＢＷＴには、式（１）のような関係が成立する。なお、式（１）のｎは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。また、バリア成立時間ＢＥＴは、最大のバリア到達時間ＢＡＴが示す時間と一致する。
（バリア成立時間ＢＥＴ）＝（バリア到達時間ＢＡＴ−ｎ）＋（バリア待ち時間ＢＷＴ−ｎ）    ・・・（１）【００３４】
また、バリア待ち時間ＢＷＴ、スレッド開始時間ＴＳＴ、及びスレッド非実行時間ＴＮＰＴには、式（２）のような関係が成立する。なお、式（２）のｎは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。
（スレッド非実行時間ＴＮＰＴ−ｎ）＝（スレッド開始時間ＴＳＴ−ｎ）＋（バリア待ち時間ＢＷＴ−ｎ）    ・・・（２）【００３５】
なお、図２に示すように、並列プログラムブロック５１がループ実行しない場合もある。図２は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。図２に示すプログラム５ａには、並列プログラムブロック５１及び５３が記述されている。この記述によれば、図２に示すように、まず、４つのスレッドに分割された並列プログラムブロック５１が並列実行され、その直後、４つのスレッドに分割された並列プログラムブロック５３が並列実行されることになる。【００３６】
次に、本発明の実施の形態に係るマルチプロセッサ制御装置について説明する。【００３７】
＜実施の形態１＞
＜構成＞
図３を参照して、本発明の実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成について説明する。図３は、実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。図３において、マルチプロセッサシステムは、マルチプロセッサ制御装置１、プロセッサＰ−１〜Ｐ−Ｎ（Ｎは１以上の自然数）、共有メモリバス２、主記憶装置３、及び電源装置４により構成される。プロセッサＰ−１〜Ｐ−Ｎそれぞれは、共有メモリバス２を介して主記憶装置３と接続されており、主記憶装置３上の特定の共有メモリアドレスに割り当てたロック変数を用いた排他制御を行いながら、バリア同期を実現している。ただし、ロック変数は必ずしも主記憶装置３上に設けられる必要はない。例えば、マルチプロセッサ制御装置１上の特定の共有メモリアドレスにマッピングされた専用レジスタ上に設けられてもよい。【００３８】
マルチプロセッサ制御装置１は、電源装置４とプロセッサＰ−１〜Ｐ−Ｎそれぞれと接続され、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、スリープモードへの移行と通常動作モードへの復旧とを制御する。マルチプロセッサ制御装置１は、予測情報取得部１１、タイマ１２、及び電力制御部１３により構成される。【００３９】
予測情報取得部１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部１３へ出力する。本実施形態では、予測情報として、スレッド非実行時間ＴＮＰＴの予測時間であるスレッド非実行予測時間ＰＴＮＰＴ（Ｐｒｅｄｉｃｔｉｖｅ  Ｔｈｒｅａｄ  Ｎｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｔｉｍｅ）を用いる。以下、図４を参照して、予測情報取得部１１の具体的な構成について説明する。図４は、予測情報取得部１１の具体的な構成例を示す図である。予測情報取得部１１は、バリア監視部１１１、履歴情報格納部１１２、及び予測情報生成部１１３により構成される。【００４０】
バリア監視部１１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれにおけるプログラムブロックの実行状態を監視して、バリアタイミング信号ＢＴ（Ｂａｒｒｉｅｒ  Ｔｉｍｉｎｇ）を生成する。バリア監視部１１１は、バリアタイミング信号ＢＴを生成すると同時に、生成したバリアタイミング信号ＢＴを、予測情報生成部１１３及び電力制御部１３へ出力する。バリアタイミング信号ＢＴには、バリア開始タイミングを示すバリア開始信号、各スレッドのバリア到達タイミングを示すバリア到達信号、バリア成立タイミングを示すバリア成立信号、及び、各スレッドのスレッド開始タイミングを示すスレッド開始信号が含まれる。バリア監視部１１１は、例えば、プロセッサＰ−１〜Ｐ−Ｎそれぞれの実行命令を監視することで、バリア開始信号及びスレッド開始信号を検出することができる。また、上記実行命令のうち、ロック変数をディクリメントさせるアトミック操作を検出することで、バリア到達信号又はバリア成立信号を検出することができる。また例えば、バリア監視部１１１を共有メモリバス２と接続し、バリア監視部１１１の内部にバリアタイミング信号ＢＴを生成するためのレジスタを設けた構成としてもよい。この場合、各プロセッサＰ−１〜Ｐ−Ｎが各タイミングでバリア監視部１１１のレジスタへアクセスすることで、バリア監視部１１１がそのタイミングを示すバリアタイミング信号ＢＴを生成することができる。【００４１】
またバリア監視部１１１は、実行されるプログラムブロックを特定するためのバリア識別情報ＢＩＤ（Ｂａｒｒｉｅｒ  ＩＤ）を、内部のＢＩＤレジスタに保持する。バリア識別情報ＢＩＤは、例えば、バリア開始ポイントの命令アドレス等で構成される。バリア監視部１１１は、ＢＩＤレジスタに保持したバリア識別情報ＢＩＤ−ｍを、履歴情報格納部１１２、予測情報生成部１１３、及び電力制御部１３へ出力する。ここで、プログラムは、Ｍ（Ｍは１以上の自然数）個のプログラムブロックに分割されているとし、ｍ（１以上Ｍ以下の自然数）はプログラムブロックを特定する番号であるとする。【００４２】
またバリア監視部１１１は、バリア到達信号を生成したときにタイマ１２を参照し、バリア到達時間ＢＡＴを算出する。バリア到達信号の生成タイミングは、プロセッサＰ−１〜Ｐ−Ｎに応じて異なる。よって、バリア監視部１１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについてのバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎを算出することになる。同様に、バリア監視部１１１は、スレッド開始信号を生成したときにタイマ１２を参照することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれについてのスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを算出する。バリア監視部１１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを式（１）及び式（２）に代入することにより、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎをそれぞれ算出する。バリア監視部１１１は、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、履歴情報格納部１１２へ出力する。【００４３】
履歴情報格納部１１２は、入力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、図５に示す履歴テーブルに格納する。図５は、履歴情報格納部１１２内の履歴テーブルを示す図である。図５において、履歴テーブルは、タグ部とデータ部とを有している。履歴情報格納部１１２は、バリア監視部１１１から入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部１１２は、バリア監視部１１１から入力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎとを、関連づけして格納する。【００４４】
また履歴情報格納部１１２は、Ｖ（Ｖａｌｉｄ）フラグ又はＩＶ（Ｉｎｖａｌｉｄ）フラグからなるフラグ情報をタグ部のエントリに格納している。履歴情報格納部１１２は、タグ部のエントリと当該エントリに対応するデータ部の各エントリ（ライン）にバリア識別情報ＢＩＤ−ｍ及び履歴情報が格納されると、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについて有効な履歴情報が存在するとして、そのラインのフラグをＶフラグにセットする。一方、履歴情報格納部１１２は、タグ部のエントリと当該エントリに対応するデータ部の各エントリにバリア識別情報ＢＩＤ−ｍ及び履歴情報が存在しない場合、そのラインのフラグをＩＶフラグにセットする。履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍ及び履歴情報を格納する際、入力されたバリア識別情報ＢＩＤ−ｍを含む有効な（Ｖフラグがセットされた）ラインが既に履歴テーブルに存在しているか否かを判定する。有効なラインが既に存在している場合、履歴情報格納部１１２は、その有効なラインに履歴情報を上書きして更新する。有効なラインが存在していない場合、履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍ及び履歴情報を空いているラインに格納し、そのラインのフラグをＶフラグにセットする。【００４５】
なお、履歴テーブルに格納できるライン数は有限であるため、全ラインのＶフラグがセットされることが考えられる。この場合、プロセッサのキャッシュメモリの更新等に用いられるＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）のような更新方式で、使用頻度の低いラインから上書きして更新するとよい。【００４６】
また、プログラムブロックの初回実行時、履歴テーブルには、バリア識別情報ＢＩＤは格納されるものの、履歴情報は格納されていない。このため、履歴テーブル内の履歴情報の初期値として“０”を設定しておいてもよい。あるいは、事前にプログラムのステップ数や各ステップの実行レイテンシを考慮した静的解析を行って、各プロセッサのバリア到達時間を予測しておいてもよい。この場合、予測したバリア到達時間の中で最大となるバリア成立時間からバリア到達時間を減算することによりバリア待ち時間を求め、求めたバリア待ち時間をスレッド非実行情報の初期値として設定しておいてもよい。なお、この場合、スレッド開始時間を“０”としている。【００４７】
また上述では、履歴情報格納部１１２は、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを格納する際、単純に最新の値で更新するようにしていたが、これに限定されない。履歴情報格納部１１２は、過去の履歴情報も含めて統計値（例えば平均値など）を算出し、算出した統計値で更新してもよい。【００４８】
予測情報生成部１１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍと関連付けられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出し、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして、電力制御部１３へ出力する。【００４９】
電力制御部１３は、予測情報取得部１１から入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。また電力制御部１３は、連続する２つのプログラムブロックに跨った電力制御を行う。以下、図６を参照して、電力制御部１３の具体的な構成について説明する。図６は、電力制御部１３の具体的な構成例を示す図である。電力制御部１３は、電力モード制御部１３１、クロック信号制御部１３２、及び電源電圧制御部１３３とにより構成される。【００５０】
電力モード制御部１３１は、バリア監視部１１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる。電力モード制御部１３１は、バリア監視部１１１からバリア成立信号が入力されると、タイマ１２の計時を終了させ、リセットさせる。なお、タイマ１２は、電力制御部１３の内部に設けられてもよい。また、タイマ１２は、マルチプロセッサ制御装置１の外部に設けられて共有メモリバス２と接続されていてもよい。この場合、電力モード制御部１３１は、共有メモリバス２を介してタイマ１２を制御することなる。またこの場合、バリア監視部１１１を共有メモリバス２と接続し、バリア監視部１１１は共有メモリバス２を介してタイマ１２を参照することなる。【００５１】
また電力モード制御部１３１は、入力されたスレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する。電力モード制御部１３１には、図７に示すようなスリープ移行判定閾値が予め設定されている。図７は、電力モード制御部１３１が設定する電力モードを示す図である。図７に示すスリープ移行判定閾値Ｔｓｂ、Ｔｄｍ、Ｔｓｄは、スリープモードへの移行時間、及び通常動作モードへの復旧時間を考慮しても、十分な省電力効果が見込まれるスリープ時間に設定される。電力モード制御部１３１は、例えばスレッド非実行予測時間ＰＴＮＰＴ−１が０以上Ｔｓｂ以下である場合、プロセッサＰ−１の電力モードを通常動作モードであるＲｕｎモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１が「０」に近い場合、スリープ時間が確保できないことが想定され、また、スレッドが最後にバリア到達することになるので、スリープモードに移行させる必要はない。一方、スレッド非実行予測時間ＰＴＮＰＴ−１がＴｓｂより大きくＴｄｍ以下である場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＳｔａｎｄｂｙモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１がＴｄｍより大きくＴｓｄ以下である場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＤｏｒｍａｎｔモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１がＴｓｄより大きい場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＳｈｕｔｄｏｗｎモードに設定する。【００５２】
なお、電力モード制御部１３１に設定される電力モードは、図７に示す範囲に限定されない。電力モード制御部１３１には、少なくとも、通常動作モードであるＲｕｎモードと１つのスリープモードとが設定されていればよい。また電力モード制御部１３１には、図７に示す電力モードとは異なる電力モードが設定されていてもよい。【００５３】
電力モード制御部１３１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて設定した電力モードを示す制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎを、プロセッサＰ−１〜Ｐ−Ｎへ出力する。また電力モード制御部１３１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて設定した電力モードを示す制御信号を、クロック信号制御部１３２へは制御信号ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎとして出力し、電源電圧制御部１３３へは制御信号ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎとして出力する。なお、制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎ、ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎ、ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎは、割り込みデバック要求を示す信号であったり、ソフトリセットを示す信号であったり、リセットを示す信号であったりする。さらに、制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎは、スレッドの実行を開始させることを示す信号となる場合もある。詳細については、後述する。【００５４】
クロック信号制御部１３２は、ＰＬＬ（Ｐｈａｓｅ−Ｌｏｃｋｅｄ  Ｌｏｏｐ）回路等を用いて、制御信号ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎが示す各電力モードに従ったクロック信号ＣＬＫ−１〜ＣＬＫ−Ｎを生成する。クロック信号制御部１３２は、生成したクロック信号ＣＬＫ−１〜ＣＬＫ−Ｎを、プロセッサＰ−１〜Ｐ−Ｎへ出力する。【００５５】
電源電圧制御部１３３は、電源装置４から入力される電源電圧を降圧するなどして、制御信号ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎが示す各電力モードに従った電源電圧ＶＤＤ−１〜ＶＤＤ−Ｎを生成する。電源電圧制御部１３３は、生成した電源電圧ＶＤＤ−１〜ＶＤＤ−ＮをプロセッサＰ−１〜Ｐ−Ｎへ供給する。【００５６】
ここで、例えば、プロセッサＰ−１の電力モードをＳｔａｎｄｂｙモードへ移行させる場合、電力モード制御部１３１は、Ｓｔａｎｄｂｙモードを示す制御信号ＰＣＴＲＬ−１をプロセッサＰ−１へ出力して、プロセッサＰ−１にＳｔａｎｄｂｙモードへの移行を指示する。電力モード制御部１３１は、プロセッサＰ−１において割込みで復旧できる準備が整ったことを検知すると、クロック信号制御部１３２へＳｔａｎｄｂｙモードを示す制御信号ＣＣＴＲＬ−１を出力し、電源電圧制御部１３３へＳｔａｎｄｂｙモードを示す制御信号ＶＣＴＲＬ−１を出力する。クロック信号制御部１３２は、制御信号ＣＣＴＲＬ−１に基づき、復旧に必要な割込みインターフェースを除くプロセッサコアやキャッシュメモリへのクロック信号ＣＬＫ−１の出力を遮断する。電源電圧制御部１３３は、制御信号ＶＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリの電源電圧を、通常動作モードと同じ電源電圧にするか、あるいは、プロセッサコア内の各種レジスタやキャッシュメモリ内のデータ等の内部状態（コンテキスト）が揮発しない範囲で低電圧とする。【００５７】
また例えば、プロセッサＰ−１の電力モードをＳｈｕｔｄｏｗｎモードへ移行させる場合、電力モード制御部１３１は、Ｓｈｕｔｄｏｗｎモードを示す制御信号ＰＣＴＲＬ−１をプロセッサＰ−１へ出力して、プロセッサＰ−１にＳｔａｎｄｂｙモードへの移行を指示する。電力モード制御部１３１は、プロセッサＰ−１においてプロセッサコアやキャッシュメモリ内の全てのコンテキストが外部のメモリに退避されたことを検知すると、クロック信号制御部１３２へＳｈｕｔｄｏｗｎモードを示す制御信号ＣＣＴＲＬ−１を出力し、電源電圧制御部１３３へＳｈｕｔｄｏｗｎモードを示す制御信号ＶＣＴＲＬ−１を出力する。クロック信号制御部１３２は、制御信号ＣＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリへのクロック信号ＣＬＫ−１の出力を遮断する。電源電圧制御部１３３は、制御信号ＶＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリの電源電圧を遮断する。【００５８】
＜動作＞
次に図８を参照して、実施の形態１に係るマルチプロセッサ制御装置１の動作について説明する。図８は、マルチプロセッサ制御装置１全体の動作の流れを示すフローチャートである。【００５９】
図８において、バリア監視部１１１は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部１１３及び電力制御部１３へ出力する（ステップＳ１１）。またステップＳ１１において、バリア監視部１１１は、バリア識別情報ＢＩＤ−ｍを予測情報生成部１１３及び電力制御部１３へ出力する。ステップＳ１１の次に、電力モード制御部１３１は、バリア監視部１１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる（ステップＳ１２）。ステップＳ１２の次に、予測情報生成部１１３は、バリア監視部１１１からバリア開始信号が入力されると、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍに関連づけられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出し、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして、電力制御部１３へ出力する（ステップＳ１３）。ステップＳ１３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）が行われる。この個別の制御については、後述する。【００６０】
ステップＳ１５において、電力モード制御部１３１は、バリア監視部１１１からのバリア成立信号に基づいて、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部１３１は、共有メモリバス２を介して主記憶装置３のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部１１１からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部１３１は、タイマ１２の計時を終了させ、リセットさせる（ステップＳ１６）。【００６１】
ステップＳ１６の次に、バリア監視部１１１は、バリアタイミング信号とタイマ１２の計時に基づいて、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを算出する（ステップＳ１７）。またステップＳ１７において、バリア監視部１１１は、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、バリア識別情報ＢＩＤ−ｍとともに履歴情報格納部１１２へ出力する。【００６２】
ステップＳ１７の次に、履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、ステップＳ１７で出力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎに更新する（ステップＳ１８）。【００６３】
ステップＳ１８の次に、バリア監視部１１１は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する（ステップＳ１９）。現在実行中のプログラムブロックが最後のプログラムブロックである場合（ステップＳ１９でＹｅｓ）、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合（ステップＳ１９でＮｏ）、処理はステップＳ１１へ戻り、次のプログラムブロックについての動作が行われる。【００６４】
図９を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）について具体的に説明する。ステップＳ１４−１〜Ｓ１４−Ｎの制御の流れは同じであるため、図９の例ではプロセッサＰ−ｎの制御の流れを記載している。【００６５】
図９において、電力モード制御部１３１は、自身が出力する制御信号ＰＣＴＲＬ−ｎを参照して、プロセッサＰ−ｎの現在の電力モードがスリープモードであるか否かを判定する（ステップＳ１４１）。【００６６】
プロセッサＰ−ｎがスリープモードではないと判定した場合（ステップＳ１４１でＮｏ）、電力モード制御部１３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ１４２）。電力モード制御部１３１は、バリア監視部１１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ１４３）。スレッドがバリア到達したと判定した場合（ステップＳ１４３でＹｅｓ）、電力モード制御部１３１は、スリープ移行制御を行う。具体的には、電力モード制御部１３１は、ステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに従って、移行させるべきスリープモードを設定する。電力モード制御部１３１は、設定したスリープモードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部１３２、電源電圧制御部１３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードでバリア待ちになる。【００６７】
一方、プロセッサＰ−ｎがスリープモードであると判定した場合（ステップＳ１４１でＹｅｓ）、電力モード制御部１３１は、タイマ１２を監視して、ステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎが経過するのを待ってから、通常動作モードへの復旧制御を行う（ステップＳ１４５）。具体的には、電力モード制御部１３１は、タイマ１２の計時がステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎを経過したとき、通常動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部１３２、電源電圧制御部１３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スリープモードから通常動作モードへ復旧する。このように、ステップＳ１４１及びステップＳ１４５の動作により、プロセッサＰ−ｎが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープモードが継続することになる。【００６８】
なお、例えば図７のＳｔａｎｄｂｙモードからの復旧であれば、電力モード制御部１３１が、割り込みデバック要求を示す制御信号ＣＣＴＲＬ−ｎをクロック信号制御部１３２へ出力してクロック信号ＣＬＫ−ｎの出力を再開させるだけで、プロセッサＰ−ｎは通常動作モードに復旧させることができる。一方、Ｓｈｕｔｄｏｗｎモードからの復旧であれば、まず、電力モード制御部１３１が、リセットを示す制御信号ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎをクロック信号制御部１３２、電源電圧制御部１３３へ出力してクロック信号ＣＬＫ−ｎ及び電源電圧Ｖｄｄ−ｎの出力を再開させる。その後、プロセッサＰ−ｎを通常動作モードに復旧させるには、Ｓｈｕｔｄｏｗｎモードへの移行時に退避した全コンテキストを復旧させる必要がある。このように、復旧時間は、スリープモードの深さに応じて異なる。このため、電力モード制御部１３１は、異なる復旧時間を考慮しながら、スレッド非実行予測時間ＰＴＮＰＴ−ｎの経過前に復旧を開始するように、ステップＳ１４５の動作を行う。これにより、性能低下の影響を抑制できる。【００６９】
ステップＳ１４５の次に、電力モード制御部１３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ１４６）。電力モード制御部１３１は、バリア監視部１１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ１４７）。スレッドがバリア到達したと判定した場合（ステップＳ１４７でＹｅｓ）、処理は図８に示すステップＳ１５へ進む。プロセッサＰ−ｎは、スレッド実行前に既にスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップＳ１４７からステップＳ１５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。【００７０】
次に、図１０及び図１１に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置１の制御によってプログラムがどのように実行されるかについて説明する。【００７１】
図１０は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図１０では、ループ実行される並列プログラムブロックを、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックとしている。また、並列プログラムブロックを３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。【００７２】
図１０の制御前について説明する。プロセッサＰ−１は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。このときのプロセッサＰ−１のバリア待ち時間である“ＢＷＴ−１”は、“０”となる。プロセッサＰ−２は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＷＴ−２”とする。プロセッサＰ−３は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＷＴ−３”とする。その後、以上の実行状態を繰り返しながら、並列プログラムブロックが実行される。【００７３】
図１０の制御後について説明する。履歴情報格納部１１２には、バリア識別情報ＢＤＩ−１について、スレッド非実行時間ＴＮＰＴ−１（＝０）、ＴＮＰＴ−２（＝ＢＷＴ−２）、ＴＮＰＴ−１（＝ＢＷＴ−３）が格納されているとする。【００７４】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−１が“０”であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。【００７５】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−２に応じたスリープモードＳＬ（ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ−２）を維持しながら、１回目のバリア成立を迎える。【００７６】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−３に応じたスリープモードＳＬ（ＰＴＮＰＴ−３）に移行する（ステップＳ１４４）。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ−３）を維持しながら、１回目のバリア成立を迎える。【００７７】
１回目のバリア成立後、スレッド非実行時間ＴＮＰＴ−１がＴＳＴ−１とＢＷＴ−１の和（＝０）となるように、スレッド非実行時間ＴＮＰＴ−２がＴＳＴ−２とＢＷＴ−２の和（＝ＢＷＴ−２）となるように、スレッド非実行時間ＴＮＰＴ−３がＴＳＴ−３とＢＷＴ−３の和（＝ＢＷＴ−３）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。【００７８】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、通常動作モードを維持しながら、２回目のバリア成立を迎える。これは、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−１が“０”であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。【００７９】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−２が経過するまで、スリープモードＳＬ（ＰＴＮＰＴ−２）を継続する。スレッド非実行予測時間ＰＴＮＰＴ−２が経過すると、プロセッサＰ−２は、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−２は、２回目のバリア成立を迎える。これは、プロセッサＰ−２のスレッドは、１回目のバリア待ち時間ＢＷＴ−２と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ“０”になるからである。なお、スレッド開始時間ＴＳＴ−２は、スレッド非実行予測時間ＰＴＮＰＴ−２と一致することになる。【００８０】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−３が経過するまで、スリープモードＳＬ（ＰＴＮＰＴ−３）を継続する。スレッド非実行予測時間ＰＴＮＰＴ−３が経過すると、プロセッサＰ−３は、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−３は、２回目のバリア成立を迎える。これは、プロセッサＰ−３のスレッドは、１回目のバリア待ち時間ＢＷＴ−３と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ“０”になるからである。なお、スレッド開始時間ＴＳＴ−３は、スレッド非実行予測時間ＰＴＮＰＴ−３と一致することになる。【００８１】
２回目のバリア成立後、スレッド非実行時間ＴＮＰＴ−１がＴＳＴ−１とＢＷＴ−１の和（＝０）となるように、スレッド非実行時間ＴＮＰＴ−２がＴＳＴ−２とＢＷＴ−２の和（＝ＢＷＴ−２）となるように、スレッド非実行時間ＴＮＰＴ−３がＴＳＴ−３とＢＷＴ−３の和（＝ＢＷＴ−３）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。【００８２】
３回目のバリア開始以降の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。【００８３】
図１１は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図１１では、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−２で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−３で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックのバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。【００８４】
図１１の制御前について説明する。プロセッサＰ−１は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドのバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。このときのプロセッサＰ−１のバリア待ち時間“ＢＩＤ−１：ＢＷＴ−１”は、“０”となる。【００８５】
プロセッサＰ−２は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−１：ＢＷＴ−２”とする。【００８６】
プロセッサＰ−３は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−１：ＢＷＴ−３”とする。【００８７】
プロセッサＰ−１は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドは、２回目のバリア成立前にバリア到達する。その後、プロセッサＰ−１は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−２：ＢＷＴ−１”とする。【００８８】
プロセッサＰ−２は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−３に比べて長い。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。このときのプロセッサＰ−２のバリア待ち時間“ＢＩＤ−２：ＢＷＴ−２”は、“０”となる。【００８９】
プロセッサＰ−３は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、２回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−２：ＢＷＴ−３”とする。【００９０】
プロセッサＰ−１は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドは、３回目のバリア成立前にバリア到達する。その後、プロセッサＰ−１は、バリア到達から３回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−３：ＢＷＴ−１”とする。【００９１】
プロセッサＰ−２は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、３回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から３回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を“ＢＩＤ−３：ＢＷＴ−２”とする。【００９２】
プロセッサＰ−３は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−２に比べて長い。このため、プロセッサＰ−３のスレッドがバリア到達すると同時に、３回目のバリア成立が起こる。このときのプロセッサＰ−３のバリア待ち時間“ＢＩＤ−３：ＢＷＴ−３”は、“０”となる。【００９３】
図１１の制御後について説明する。履歴情報格納部１１２には、バリア識別情報ＢＤＩ−１について、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−１）（＝０）、（ＢＩＤ−１：ＴＮＰＴ−２）（＝ＢＩＤ−１：ＢＷＴ−２）、（ＢＩＤ−１：ＴＮＰＴ−３）（＝ＢＩＤ−１：ＢＷＴ−３）が格納されているとする。また、履歴情報格納部１１２には、バリア識別情報ＢＤＩ−２について、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−１）（＝ＢＩＤ−２：ＢＷＴ−１）、（ＢＩＤ−２：ＴＮＰＴ−２）（＝０）、（ＢＩＤ−２：ＴＮＰＴ−３）（＝ＢＩＤ−２：ＢＷＴ−３）が格納されているとする。また、履歴情報格納部１１２には、バリア識別情報ＢＤＩ−３について、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−１）（＝ＢＩＤ−３：ＢＷＴ−１）、（ＢＩＤ−３：ＴＮＰＴ−２）（＝ＢＩＤ−３：ＢＷＴ−２）、（ＢＩＤ−３：ＴＮＰＴ−３）（＝０）が格納されているとする。【００９４】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−１）が“０”であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。【００９５】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−２）に応じたスリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）を維持しながら、１回目のバリア成立を迎える。【００９６】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−３）に応じたスリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）に移行する（ステップＳ１４４）。その後、プロセッサＰ−３は、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）を維持しながら、１回目のバリア成立を迎える。【００９７】
１回目のバリア成立後、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−１）が（ＢＩＤ−１：ＴＳＴ−１）と（ＢＩＤ−１：ＢＷＴ−１）の和（＝０）となるように、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−２）が（ＢＩＤ−１：ＴＳＴ−２）と（ＢＩＤ−１：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−３）が（ＢＩＤ−１：ＴＳＴ−３）と（ＢＩＤ−１：ＢＷＴ−３）の和となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。【００９８】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）に応じたスリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）に移行する（ステップＳ１４４）。その後、プロセッサＰ−１は、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を維持しながら、２回目のバリア成立を迎える。【００９９】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）が経過するまで、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）を継続する。ここで、スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）は“０”である。よって、プロセッサＰ−２は、即座に通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。なお、プロセッサＰ−２のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−３に比べて長い。また、スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）が“０”であり、ステップＳ１４４の処理によってはスリープモードに移行しない。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。【０１００】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−３）が経過するまで、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）を継続する。スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−３）が経過すると、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。その後、プロセッサＰ−３は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。【０１０１】
２回目のバリア成立後、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−１）が（ＢＩＤ−２：ＴＳＴ−１）と（ＢＩＤ−２：ＢＷＴ−１）の和となるように、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−２）が（ＢＩＤ−２：ＴＳＴ−２）と（ＢＩＤ−２：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−３）が（ＢＩＤ−２：ＴＳＴ−３）と（ＢＩＤ−２：ＢＷＴ−３）の和となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。【０１０２】
プロセッサＰ−１は、３回目のバリア開始（ステップＳ１１）してから、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）が経過するまで、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続する。スレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）が経過すると、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−１は、３回目のバリア成立を迎える。これは、プロセッサＰ−１のスレッドは、バリア待ち時間（ＢＩＤ−３：ＢＷＴ−１）と同じ時間だけバリア開始から遅れて実行を開始しており、かつ、後述するプロセッサＰ−３のスレッドとの関係により、スピンウェイト状態になる時間がほぼ“０”になるからである。なお、スレッド開始時間（ＢＩＤ−３：ＴＳＴ−１）は、スレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）と一致することになる。【０１０３】
プロセッサＰ−２は、３回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−２の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−２）に応じたスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−２）を維持しながら、３回目のバリア成立を迎える。【０１０４】
プロセッサＰ−３は、３回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−３の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、スリープモードに移行せず通常動作モードを維持しながら、３回目のバリア成立を迎える。これは、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−３）が“０”であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−３のバリア到達時間は、プロセッサＰ−１及びＰ−２に比べて長い。このため、プロセッサＰ−３のスレッドがバリア到達すると同時に、３回目のバリア成立が起こる。【０１０５】
３回目のバリア成立後、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−１）が（ＢＩＤ−３：ＴＳＴ−１）と（ＢＩＤ−３：ＢＷＴ−１）の和となるように、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−２）が（ＢＩＤ−３：ＴＳＴ−２）と（ＢＩＤ−３：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−３）が（ＢＩＤ−３：ＴＳＴ−３）と（ＢＩＤ−３：ＢＷＴ−３）の和（＝０）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。【０１０６】
以上のように本実施形態によれば、バリア開始の前後でスレッドの実行状態が同じ状態となるように各プロセッサのスレッド実行開始タイミングを制御する（ステップＳ１４２、Ｓ１４６）。また、バリア開始（ステップＳ１１）の直後に、各プロセッサの電力モード判定（ステップＳ１４１）を行う。そして、プロセッサの電力モードが既にスリープモードに移行されている場合には、そのスリープモードを継続させ、プロセッサの電力モードが通常動作モードのままである場合には、通常動作モードを継続させる。これにより、２つのプログラムブロックに跨ったスリープ制御を実現することができる。その結果、従来技術に比べて、スリープモードへの移行と通常動作モードへの復旧の回数を減らすことができ、更なる省電力化が可能となる。【０１０７】
なお、図８のステップＳ１３では、予測情報生成部１１３が、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍと関連付けられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出すとしたが、これに限定されない。図１０に示したように、同じ並列プログラムブロックがループ実行される場合には、次回に実行する並列プログラムブロック（ｍ＋１）を事前に把握できる。よってこの場合、予測情報生成部１１３は、バリア識別情報ＢＩＤ−ｍ＋１と関連づけられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎも同時に読み出すとよい。そして、電力モード制御部１３１は、入力されたバリア識別情報ＢＩＤ−ｍのスレッド非実行予測時間ＰＴＮＰＴ−ｎと、バリア識別情報ＢＩＤ−ｍ＋１のスレッド非実行予測時間ＰＴＮＰＴ−ｎとの和に従って、プロセッサＰ−ｎの電力モードを設定する。これにより、現在実行中の並列プログラムブロックにおいて、２つのスレッド非実行予測時間の和に応じたスリープモードへの移行を実現することができる。その結果、スリープモードをより深いモードに設定することができ、更なる省電力化が可能となる。【０１０８】
なお、実行するプログラムブロックが逐次プログラムブロックの場合、同時に実行するスレッド数がプロセッサ数未満となる。この場合、スレッドの割り当てのないプロセッサが存在することになる。スレッドの割り当てのないプロセッサについては、電力モード判定でスリープ判定された場合（ステップＳ１４１でＹｅｓ）、スリープ復旧制御（ステップＳ１４５）では何も行わずに、即座にバリア到達させ（ステップＳ１４７でＹｅｓ）、スリープモードを継続させる。一方、電力モード判定でスリープ判定されない場合（ステップＳ１４１でＮｏ）も、即座にバリア到達させ（ステップＳ１４３でＹｅｓ）、スリープ移行制御（ステップＳ１４４）を行う。これにより、スレッドの割り当てのないプロセッサは、電力モード判定に関わらず、バリア開始後、即座にバリア到達することになる。このため、バリア到達時間がほぼ“０”となり、式（１）、（２）の関係からスレッド非実行時間がバリア成立時間と同等に大きな値となる。その結果、次回以降に上記逐次プログラムブロックを実行する場合、スレッド非実行予想時間が大きくなるので、プロセッサがスリープ移行制御（ステップＳ１４４）でより深いスリープモードに移行することが期待できる。【０１０９】
＜実施の形態１の変形例１＞
図５に示したように、実施の形態１において、履歴情報格納部１１２は、バリア識別情報ＢＩＤ毎にスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを格納していた。このため、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置１の回路規模が増大する可能性があった。そこで、本変形例１では、履歴情報格納部１１２に格納されるデータ量を削減し、マルチプロセッサ制御装置１の回路規模の増大を抑制することを目的とする。【０１１０】
＜構成＞
図１２は、本変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例１に係るマルチプロセッサシステムは、図３に示した構成に対し、マルチプロセッサ制御装置１がマルチプロセッサ制御装置１ａに入れ代わり、マルチプロセッサ制御装置１ａが予測情報取得部１１ａ、タイマ１２、及び電力制御部１３ａにより構成される点のみ異なる。以下、異なる点を中心に説明する。【０１１１】
予測情報取得部１１ａは、プログラムブロック毎に予測情報を１つずつ取得し、取得した予測情報を電力制御部１３ａへ出力する。以下、図１３を参照して、予測情報取得部１１ａの具体的な構成について説明する。図１３は、予測情報取得部１１ａの具体的な構成例を示す図である。予測情報取得部１１ａは、バリア監視部１１１ａ、履歴情報格納部１１２ａ、及び予測情報生成部１１３ａにより構成される。【０１１２】
バリア監視部１１１ａは、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎの統計値（例えば平均値）であるスレッド非実行時間ＴＮＰＴをさらに算出し、履歴情報格納部１１２ａへ出力する点で、上述したバリア監視部１１１と異なる。またバリア監視部１１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部１１２ａへ出力する点でも、上述したバリア監視部１１１と異なる。ここでは、バリア監視部１１１ａは、プロセッサ識別情報ＰＩＤ−ｎを出力するものとする。ｎは、プロセッサを特定する番号である。その他については、バリア監視部１１１と同様である。【０１１３】
履歴情報格納部１１２ａは、入力されたスレッド非実行時間ＴＮＰＴを、図１４に示す履歴テーブルに格納する。図１４は、履歴情報格納部１１２ａ内の履歴テーブルを示す図である。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたプロセッサ識別情報ＰＩＤ−ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたスレッド非実行時間ＴＮＰＴを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのスレッド非実行時間ＴＮＰＴとを、関連づけして格納する。その他については、履歴情報格納部１１２と同様である。【０１１４】
予測情報生成部１１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部１１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎとスレッド非実行時間ＴＮＰＴを読み出し、プロセッサ予測識別情報ＰＰＩＤ−ｎ、スレッド非実行予測時間ＰＴＮＰＴとして、電力制御部１３ａへ出力する。【０１１５】
電力制御部１３ａは、予測情報取得部１１ａから入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図１５を参照して、電力制御部１３ａの具体的な構成について説明する。図１５は、電力制御部１３ａの具体的な構成例を示す図である。電力制御部１３ａは、電力モード制御部１３１ａ、クロック信号制御部１３２、及び電源電圧制御部１３３とにより構成される。電力制御部１３ａは、電力モード制御部１３１が電力モード制御部１３１ａに入れ代わった点で、上述した電力制御部１３と異なる。以下、異なる点を中心に説明する。【０１１６】
電力モード制御部１３１ａは、入力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれに対して共通の電力モードを設定する。電力モード制御部１３１ａには、図７に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部１３１ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部１３１と同様である。【０１１７】
＜動作＞
次に図１６を参照して、変形例１に係るマルチプロセッサ制御装置１ａの動作について説明する。図１６は、マルチプロセッサ制御装置１ａ全体の動作の流れを示すフローチャートである。図１６に示すステップＳ２１、Ｓ２２、Ｓ２５、Ｓ２６、Ｓ２９は、図８に示したステップＳ１１、Ｓ１２、Ｓ１５、Ｓ１６、Ｓ１９と同様の処理を行うので、それ以外のステップを中心に説明する。【０１１８】
ステップＳ２２の次のステップＳ２３において、予測情報生成部１１３ａは、バリア監視部１１１ａからバリア開始信号が入力されると、履歴情報格納部１１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎとスレッド非実行時間ＴＮＰＴを読み出し、プロセッサ予測識別情報ＰＰＩＤ−ｎ、スレッド非実行予測時間ＰＴＮＰＴとして、電力制御部１３ａへ出力する（ステップＳ２３）。ステップＳ２３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ２４−１〜Ｓ２４−Ｎ）が行われる。この個別の制御については、後述する。【０１１９】
ステップＳ２６の次のステップＳ２７において、バリア監視部１１１ａは、バリアタイミング信号とタイマ１２の計時に基づいて、スレッド非実行時間ＴＮＰＴを算出する。またステップＳ２７において、バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍとを履歴情報格納部１１２ａへ出力する。【０１２０】
ステップＳ２７の次に、履歴情報格納部１１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のスレッド非実行時間ＴＮＰＴを、ステップＳ２７で出力されたスレッド非実行時間ＴＮＰＴに更新する（ステップＳ２８）。またステップＳ２８において、履歴情報格納部１１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するタグ部に格納された従前のプロセッサ識別情報ＰＩＤ−ｎを、ステップＳ２７で出力されたプロセッサ識別情報ＰＩＤ−ｎに更新する。【０１２１】
図１７を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ２４−１〜Ｓ２４−Ｎ）について具体的に説明する。ステップＳ２４−１〜Ｓ２４−Ｎの制御の流れは同じであるため、図１７の例ではプロセッサＰ−ｎの制御の流れを記載している。なお、図１７に示すステップＳ２４１〜Ｓ２４３は、図９に示したステップＳ１４１〜Ｓ１４３と同様の処理を行い、ステップＳ２４５〜Ｓ２４８は、図９に示したステップＳ１４４〜Ｓ１４７と同様の処理を行うので、それ以外のステップを中心に説明する。【０１２２】
ステップＳ２４３の次のステップＳ２４４において、電力モード制御部１３１ａは、制御対象のプロセッサがステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎであるか否かを判定する。つまり、電力モード制御部１３１ａは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合（ステップＳ２４４でＮｏ）、電力モード制御部１３１ａは、ステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する（ステップＳ２４５）。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合（ステップＳ２４４でＹｅｓ）、スリープ移行制御（ステップＳ２４５）がスキップされる。ここでは、制御対象のプロセッサは、Ｐ−ｎであり、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサもＰ−ｎである。よって、ステップＳ２４４では肯定の判定がなされることになる。【０１２３】
次に、図１８に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置１ａの制御によってプログラムがどのように実行されるかについて説明する。図１８は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図１８では、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。図１８の制御前については、図１０の制御前と同様であるので、説明を省略する。【０１２４】
図１８の制御後について説明する。履歴情報格納部１１２ａには、バリア識別情報ＢＤＩ−１について、スレッド非実行時間ＴＮＰＴ（ＢＷＴ−１〜ＢＷＴ−３の平均値）と、プロセッサ識別情報ＰＩＤ−１（プロセッサＰ−１を特定する情報）とが格納されているとする。【０１２５】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。【０１２６】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−２は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−２については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、１回目のバリア成立を迎える。【０１２７】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−３は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−３については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、１回目のバリア成立を迎える。【０１２８】
１回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１のままとなる。【０１２９】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、２回目のバリア成立を迎える。これは、２回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。【０１３０】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ２１）してから、２回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴが経過するまで、スリープモードＳＬ（ＰＴＮＰＴ）を継続する。スレッド非実行予測時間ＰＴＮＰＴが経過すると、プロセッサＰ−２は、通常動作モードへ復旧し（ステップＳ２４６）、スレッドの実行を開始する（ステップＳ２４７）。図１８の例では、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４８でＹｅｓ）同時に、プロセッサＰ−２は、２回目のバリア成立を迎える。【０１３１】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ２１）してから、２回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴが経過するまで、スリープモードＳＬ（ＰＴＮＰＴ）を継続する。スレッド非実行予測時間ＰＴＮＰＴが経過すると、プロセッサＰ−３は、通常動作モードへ復旧し（ステップＳ２４６）、スレッドの実行を開始する（ステップＳ２４７）。図１８の例では、プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４８でＹｅｓ）、プロセッサＰ−３は、２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。【０１３２】
２回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１のままとなる。【０１３３】
プロセッサＰ−１は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、３回目のバリア成立を迎える。これは、３回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。【０１３４】
プロセッサＰ−２は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−２は、３回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−２は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−２については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、３回目のバリア成立を迎える。【０１３５】
プロセッサＰ−３は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−３は、３回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−３は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−３については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、３回目のバリア成立を迎える。【０１３６】
３回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１となる。【０１３７】
以上のように、本変形例１によれば、履歴情報格納部１１２ａには、１つのスレッド非実行時間ＴＮＰＴのみが格納される。このため、履歴情報格納部１１２ａの記憶容量を削減することができ、マルチプロセッサ制御装置１ａの回路規模の増大を抑制することができる。【０１３８】
なお、上述では、バリア監視部１１１ａが、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎの平均値を算出するとしたがこれに限定されない。バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎのうち、値が“０”となるスレッド非実行時間を除いて平均値を算出してもよい。また、バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎのうち、最小となるスレッド非実行時間を算出してもよいし、最大となるスレッド非実行時間を算出してもよい。【０１３９】
なお、上述では、バリア監視部１１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部１１２ａへ出力していたが、これに限定されない。バリア監視部１１１ａは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報ＰＩＤとしてもよい。【０１４０】
＜実施の形態１の変形例２＞
実施の形態１においては、各プロセッサ毎の個別制御を図９に示すようなフローで行っていた。しかしながら、図１１に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。【０１４１】
本変形例２におけるマルチプロセッサ制御装置は、図３〜図６、図８、図９に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図９のフローのみ異なる。以下、異なる点を中心に説明する。【０１４２】
＜動作＞
図１９を参照して、本変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）について具体的に説明する。ステップＳ１４−１〜Ｓ１４−Ｎの制御の流れは同じであるため、図１９の例ではプロセッサＰ−ｎの制御の流れを記載している。図１９に示すステップＳ３４１〜Ｓ３４４は、図９に示すステップＳ１４１〜Ｓ１４４と同様の処理を行い、ステップＳ３４７〜Ｓ３４９は、図９に示すステップＳ１４５〜Ｓ１４７と同様の処理を行うので、それ以外のステップを中心に説明する。【０１４３】
ステップＳ３４１においてプロセッサＰ−ｎがスリープモードであると判定した場合、電力モード制御部１３１は、図８のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する（ステップＳ３４５）。電力モード制御部１３１は、より深いスリープモードに移行可能と判定した場合（ステップＳ３４５でＹｅｓ）、プロセッサＰ−ｎの電力モードを、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたより深いスリープモードへ移行させる（ステップＳ３４６）。一方、電力モード制御部１３１は、より深いスリープモードに移行不可能と判定した場合（ステップＳ３４５でＮｏ）、スリープ間移行制御（ステップＳ３４６）をスキップする。【０１４４】
例えば、現在のスリープモードが図７のＳｔａｎｄｂｙモードであり、今回取得したスレッド非実行予測時間ＰＴＮＰＴ−ｎが図７の閾値Ｔｓｄより大きい場合、ステップＳ３４５ではＳｈｕｔｄｏｗｎモードに移行可能と判定され、ステップＳ３４６ではＳｔａｎｂｙモードからＳｈｕｔｄｏｗｎモードへのスリープ間移行制御が行われる。一方、現在のスリープモードが図７のＳｈｕｔｄｏｗｎモードであり、取得したスレッド非実行予測時間ＰＴＮＰＴ−ｎが図７の閾値Ｔｓｂ程度である場合、ステップＳ３４５ではより深いスリープモードには移行不可能と判定され、ステップＳ３４６の処理がスキップされる。【０１４５】
図１１の制御後では、プロセッサＰ−１は、３回目のバリア開始時、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続している。しかし、３回目のバリア開始時に取得するスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）は、２回目のバリア開始時に取得したスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）よりも大きい。従って、本変形例２を適用すれば、電力モード制御部１３１は、３回目のバリア開始時、プロセッサＰ−１の電力モードをより深いスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−１）に移行させることができる。【０１４６】
以上のように、本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。【０１４７】
＜実施の形態２＞
実施の形態１においては、バリア待ち状態のプロセッサを非動作のスリープモードとすることで、省電力化を実現させていた。つまり、実施の形態１においては、動作中のプロセッサについての省電力化については考慮されていなかった。そこで、実施の形態２においては、動作中のプロセッサへ供給するクロック周波数や電源電圧を予測情報に応じて動的にスケーリングさせるＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  ａｎｄ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ）制御技術を新たに適用することを考える。このＤＶＦＳ制御技術は、米Ｉｎｔｅｌ社のＳｐｅｅｄＳｔｅｐ（登録商標）や米ＡＭＤ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ）社のＰｏｗｅｒＮｏｗ！（登録商標）等のような技術で既に実用化されている。実施の形態２では、この実用化されたＤＶＦＳ技術と同様の制御を行う。【０１４８】
実施の形態２においては、予測情報として、スレッド非実行予測時間ＰＴＮＰＴの他に、バリア成立時間ＢＥＴの予測時間であるバリア成立予測時間ＰＢＥＴ（Ｐｒｅｄｉｃｔｉｖｅ  Ｂａｒｒｉｅｒ  Ｅｓｔａｂｌｉｓｈ  Ｔｉｍｅ）を用いる点で実施の形態１と異なる。また実施の形態２においては、バリア開始時にスリープモードを継続しない場合に、プロセッサの動作を、スレッド非実行予測時間ＰＴＮＰＴとバリア成立予測時間ＰＢＥＴの比率に応じた低速動作とするようにＤＶＦＳ制御を行うか、あるいは、実施の形態１のようにスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードに移行させるか、省電力効果が大きい方（つまり、プロセッサで消費される電力が小さい方）を選択的に適用する。これにより、更なる省電力化を実現する。【０１４９】
＜構成＞
図２０は、実施の形態２に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。実施の形態２に係るマルチプロセッサシステムは、図３に示した構成に対し、マルチプロセッサ制御装置１がマルチプロセッサ制御装置６に入れ代わり、マルチプロセッサ制御装置６が予測情報取得部６１、タイマ１２、及び電力制御部６３により構成される点のみ異なる。以下、異なる点を中心に説明する。【０１５０】
予測情報取得部６１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部６３へ出力する。本実施形態では、予測情報として、スレッド非実行予測時間ＰＴＮＰＴと、バリア成立予測時間ＰＢＥＴとを用いる。以下、図２１を参照して、予測情報取得部６１の具体的な構成について説明する。図２１は、予測情報取得部６１の具体的な構成例を示す図である。予測情報取得部６１は、バリア監視部６１１、履歴情報格納部６１２、及び予測情報生成部６１３により構成される。【０１５１】
バリア監視部６１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎのみを履歴情報格納部６１２へ出力する点で、実施の形態１のバリア監視部１１１とは異なる。その他については、バリア監視部１１１と同様である。【０１５２】
履歴情報格納部６１２は、入力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、図２２に示す履歴テーブルに格納する。図２２は、履歴情報格納部６１２内の履歴テーブルを示す図である。履歴情報格納部６１２は、バリア監視部６１１から入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部６１２は、バリア監視部６１１から入力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。履歴情報格納部６１２は、バリア監視部６１１から入力されたスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ及びスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎとを、関連づけして格納する。なお、その他、フラグ等については、実施の形態１の履歴情報格納部１１２と同様である。【０１５３】
予測情報生成部６１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部６１２からバリア識別情報ＢＩＤ−ｍと関連付けられたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを読み出す。予測情報生成部６１３は、読み出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大となるバリア到達時間をバリア成立予測時間ＰＢＥＴとして算出する。また予測情報生成部６１３は、読み出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを式（１）及び式（２）に代入することにより、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして算出する。予測情報生成部６１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを電力制御部６３へ出力する。【０１５４】
電力制御部６３は、予測情報取得部６１から入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図２３を参照して、電力制御部６３の具体的な構成について説明する。図２３は、電力制御部６３の具体的な構成例を示す図である。電力制御部６３は、電力モード制御部６３１、クロック信号制御部６３２、及び電源電圧制御部６３３とにより構成される。【０１５５】
電力モード制御部６３１は、図２４に示すように、スリープ移行制御に加えて、ＤＶＦＳ制御を適用した低速動作モードへの移行制御をさらに行う点で、実施の形態１の電力モード制御部１３１と異なる。図２４は、電力モード制御部６３１が設定する電力モードを示す図である。以下、異なる点を中心に説明する。【０１５６】
電力モード制御部６３１は、入力されたバリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎに基づいて、ＤＶＦＳ制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部６３１は、省電力効果が大きいと判定した制御を選択する。ここで、ＤＶＦＳ制御を選択した場合、電力モード制御部６３１は、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを式（３）に代入することによって、スレッド非実行時間が“０”となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。なお、式（３）では、プロセッサＰ−ｎを低速動作させるためのクロック周波数を低速クロック周波数Ｆｓｌｏｗ−ｎとし、プロセッサＰ−ｎの通常動作時のクロック周波数を基準クロック周波数Ｆｂａｓｅとしている。【０１５７】
（低速クロック周波数Ｆｓｌｏｗ−ｎ）
＝（基準クロック周波数Ｆｂａｓｅ）×（低速動作率）
＝（基準クロック周波数Ｆｂａｓｅ）×（１−（スレッド非実行予測時間ＰＴＮＰＴ−ｎ）／（バリア成立予測時間ＰＢＥＴ））      ・・・（３）【０１５８】
クロック信号制御部６３２は、電力モード制御部６３１で低速動作モードが選択された場合、制御信号ＣＣＴＲＬ−ｎに従って、プロセッサＰ−ｎへ供給するクロック信号ＣＬＫ−ｎのクロック周波数を、低速クロック周波数Ｆｓｌｏｗ−ｎに変更する。電源電圧制御部６３３は、低速動作を維持可能な範囲で降圧した電源電圧ＶＤＤ−ｎを、プロセッサＰ−ｎへ供給する。【０１５９】
＜動作＞
次に図２５を参照して、実施の形態２に係るマルチプロセッサ制御装置６の動作について説明する。図２５は、マルチプロセッサ制御装置６全体の動作の流れを示すフローチャートである。【０１６０】
図２５において、バリア監視部６１１は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部６１３及び電力制御部６３へ出力する（ステップＳ４１）。またステップＳ４１において、バリア監視部６１１は、バリア識別情報ＢＩＤ−ｍを予測情報生成部６１３及び電力制御部６３へ出力する。ステップＳ４１の次に、電力モード制御部６３１は、バリア監視部６１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる（ステップＳ４２）。ステップＳ４２の次に、予測情報生成部６１３は、バリア監視部６１１からバリア開始信号が入力されると、履歴情報格納部６１２からバリア識別情報ＢＩＤ−ｍと関連付けられたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを読み出し、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを算出して電力制御部６３へ出力する（ステップＳ４３）。ステップＳ４３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）が行われる。この個別の制御については、後述する。【０１６１】
ステップＳ４５において、電力モード制御部６３１は、バリア監視部６１１からのバリア成立信号に基づいて、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部６３１は、共有メモリバス２を介して主記憶装置３のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部６１１からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部６３１は、タイマ１２の計時を終了させ、リセットさせる（ステップＳ４６）。【０１６２】
ステップＳ４６の次に、バリア監視部６１１は、バリアタイミング信号とタイマ１２の計時に基づいて、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを算出する（ステップＳ４７）。またステップＳ４７において、バリア監視部６１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、バリア識別情報ＢＩＤ−ｍとともに履歴情報格納部６１２へ出力する。【０１６３】
ステップＳ４７の次に、履歴情報格納部６１２は、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、ステップＳ４７で出力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎに更新する（ステップＳ４８）。【０１６４】
ステップＳ４８の次に、バリア監視部６１１は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する（ステップＳ４９）。現在実行中のプログラムブロックが最後のプログラムブロックである場合（ステップＳ４９でＹｅｓ）、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合（ステップＳ４９でＮｏ）、処理はステップＳ４１へ戻り、次のプログラムブロックについての動作が行われる。【０１６５】
図２６を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）について具体的に説明する。ステップＳ４４−１〜Ｓ４４−Ｎの制御の流れは同じであるため、図２６の例ではプロセッサＰ−ｎの制御の流れを記載している。【０１６６】
図２６において、電力モード制御部６３１は、自身が出力する制御信号ＰＣＴＲＬ−ｎを参照して、プロセッサＰ−ｎの現在の電力モードがスリープモードであるか否かを判定する（ステップＳ４４１）。【０１６７】
プロセッサＰ−ｎがスリープモードではないと判定した場合（ステップＳ４４１でＮｏ）、電力モード制御部６３１は、プロセッサＰ−ｎの電力モードを、式（３）を用いて算出した低速クロック周波数Ｆｓｌｏｗ−ｎで動作する低速動作モードに移行させる場合と、実施の形態１と同様にスレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードに移行させる場合とで、消費電力がより小さくなることが見込まれる方を選択する（ステップＳ４４２）。【０１６８】
低速動作モードに移行させる場合（ステップＳ４４２でＹｅｓ）、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎに低速動作モードによるスレッドの実行を開始させる（ステップＳ４４６）。具体的には、電力モード制御部６３１は、設定した低速動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、低速動作モードによるスレッドの実行を開始する。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ６４７）。スレッドがバリア到達したと判定した場合（ステップＳ６４７でＹｅｓ）、処理は図２５に示すステップＳ４５へ進む。プロセッサＰ−ｎは、スレッド非実行時間が“０”となるように低速動作する。このため、動作がステップＳ４４７からステップＳ４５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。【０１６９】
なお、低速動作モードの場合、バリア到達時間ＢＡＴ−ｎは低速動作させた場合の値を示すので、通常動作させた場合の値に戻して履歴情報格納部６１２へ格納する必要がある。このため、図２５のステップＳ４７において、バリア監視部６１１は、低速動作モードでのバリア到達時間ＢＡＴ−ｎを式（３）の低速動作率で除した値を算出する。【０１７０】
なお、全てのプロセッサが低速動作モードに移行した場合、あるいは他のプロセッサがバリア到達して低速動作モードのプロセッサのみがスレッド実行中の場合、低速動作モードから通常動作モードに復旧させる制御を行ってもよい。これにより、バリア成立時間を短縮させることができる。【０１７１】
一方、低速動作モードに移行させない場合（ステップＳ４４２でＮｏ）、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ４４３）。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ４４４）。スレッドがバリア到達したと判定した場合（ステップＳ４４４でＹｅｓ）、電力モード制御部６３１は、スリープ移行制御を行う。具体的には、電力モード制御部６３１は、ステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに従って、移行させるべきスリープモードを設定する。電力モード制御部６３１は、設定したスリープモードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードでバリア待ちになる。【０１７２】
また、プロセッサＰ−ｎがスリープモードであると判定した場合（ステップＳ４４１でＹｅｓ）、電力モード制御部６３１は、タイマ１２を監視して、ステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎが経過するのを待ってから、通常動作モードへの復旧制御を行う（ステップＳ４４８）。具体的には、電力モード制御部６３１は、タイマ１２の計時がステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎを経過したとき、通常動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スリープモードから通常動作モードへ復旧する。このように、ステップＳ４４１及びステップＳ４４８の動作により、プロセッサＰ−ｎが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープモードが継続することになる。【０１７３】
ステップＳ４４８の次に、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ４４９）。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ４５０）。スレッドがバリア到達したと判定した場合（ステップＳ４５０でＹｅｓ）、処理は図２５に示すステップＳ４５へ進む。プロセッサＰ−ｎは、スレッド実行前に既にスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップＳ４５０からステップＳ４５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。【０１７４】
次に、図２７及び図２８に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置６の制御によってプログラムがどのように実行されるかについて説明する。【０１７５】
図２７は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図２７では、ループ実行される並列プログラムブロックを、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックとしている。また、並列プログラムブロックを３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。また、プロセッサＰ−２の電力モードを低速動作モードに設定するものとする。また、図２７の制御前については、図１０の制御前と同様であるため、説明を省略する。また、図２７の制御後は、図１０の制御後と比べて、プロセッサＰ−２に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。【０１７６】
プロセッサＰ−２は、１回目のバリア開始時（ステップＳ４１）通常動作モードであるため、ステップＳ４４１ではＮｏと判定される。その後、プロセッサＰ−２は、ステップＳ４４２でＹｅｓと判定され、スレッド非実行予測時間ＰＴＮＰＴ−２（＝ＢＷＴ−２）とバリア成立予測時間ＰＢＥＴ（＝ＢＥＴ）とに基づいて設定された低速動作モードによるスレッドの実行を開始する（ステップＳ４４６）。その後、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ４４７でＹｅｓ）、プロセッサＰ−２は、通常動作モードを維持しながら、１回目のバリア成立を迎える。なお、プロセッサＰ−２は、スレッド非実行時間が“０”となるように低速動作する。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。【０１７７】
１回目のバリア成立後、バリア到達時間ＢＡＴ−２が式（３）の低速動作率で除算され、除算された結果に基づき履歴情報格納部６１２が更新される（ステップＳ４８）。【０１７８】
２回目のバリア開始以降のプロセッサＰ−２の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。【０１７９】
図２８は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図２８では、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−２で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−３で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックのバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。また、プロセッサＰ−２の電力モードを低速動作モードに設定するものとする。また、図２８の制御前については、図１１の制御前と同様であるため、説明を省略する。また、図２８の制御後は、図１１の制御後と比べて、プロセッサＰ−２に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。【０１８０】
プロセッサＰ−２は、１回目のバリア開始時（ステップＳ４１）通常動作モードであるため、ステップＳ４４１ではＮｏと判定される。その後、プロセッサＰ−２は、ステップＳ４４２でＹｅｓと判定され、スレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−２）（＝ＢＩＤ−１：ＢＷＴ−２）と、バリア成立予測時間ＰＢＥＴ（＝ＢＥＴ−１）とに基づいて設定された低速動作モードによるスレッドの実行を開始する（ステップＳ４４６）。その後、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ４４７でＹｅｓ）、プロセッサＰ−２は、通常動作モードを維持しながら、１回目のバリア成立を迎える。なお、プロセッサＰ−２は、スレッド非実行時間が“０”となるように低速動作する。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。【０１８１】
１回目のバリア成立後、バリア到達時間（ＢＩＤ−１：ＢＡＴ−２）が式（３）の低速動作率で除算され、除算された結果に基づき履歴情報格納部６１２が更新される（ステップＳ４８）。【０１８２】
２回目のバリア開始以降のプロセッサＰ−２の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。【０１８３】
以上のように、実施の形態２によれば、実施の形態１に対してＤＶＦＳ制御が追加されている。これにより、更なる省電力化を実現する。【０１８４】
＜実施の形態２の変形例１＞
図２２に示したように、実施の形態２において、履歴情報格納部６１２は、バリア識別情報ＢＩＤ毎にバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎとスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎとを格納していた。このため、実施の形態１と同様、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置６の回路規模が増大する可能性があった。そこで、本変形例１では、履歴情報格納部６１２に格納されるデータ量を削減し、マルチプロセッサ制御装置６の回路規模の増大を抑制することを目的とする。【０１８５】
＜構成＞
図２９は、本変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例１に係るマルチプロセッサシステムは、図２０に示した構成に対し、マルチプロセッサ制御装置６がマルチプロセッサ制御装置６ａに入れ代わり、マルチプロセッサ制御装置６ａが予測情報取得部６１ａ、タイマ１２、及び電力制御部６３ａにより構成される点のみ異なる。以下、異なる点を中心に説明する。【０１８６】
予測情報取得部６１ａは、プログラムブロック毎に予測情報を２つずつ取得し、取得した予測情報を電力制御部６３ａへ出力する。以下、図３０を参照して、予測情報取得部６１ａの具体的な構成について説明する。図３０は、予測情報取得部６１ａの具体的な構成例を示す図である。予測情報取得部６１ａは、バリア監視部６１１ａ、履歴情報格納部６１２ａ、及び予測情報生成部６１３ａにより構成される。【０１８７】
バリア監視部６１１ａは、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎの統計値（例えば平均値）であるバリア到達時間ＢＡＴをさらに算出し、履歴情報格納部６１２ａへ出力する。また、バリア監視部６１１ａは、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大のバリア到達時間をバリア成立時間ＢＥＴとして算出し、履歴情報格納部６１２ａへ出力する。また、バリア監視部６１１ａは、算出したスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎの統計値（例えば平均値）であるスレッド開始時間ＴＳＴをさらに算出し、履歴情報格納部６１２ａへ出力する。またバリア監視部６１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部６１２ａへ出力する。その他については、上述したバリア監視部６１１と同様である。【０１８８】
履歴情報格納部６１２ａは、入力されたバリア成立時間ＢＥＴ、プロセッサ識別情報ＰＩＤ−ｎ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、図３１に示す履歴テーブルに格納する。図３１は、履歴情報格納部６１２ａ内の履歴テーブルを示す図である。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたプロセッサ識別情報ＰＩＤ−ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴとを、関連づけして格納する。その他については、履歴情報格納部６１２と同様である。【０１８９】
予測情報生成部６１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部６１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎ、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを読み出す。予測情報生成部６１３ａは、読み出したバリア到達時間ＢＥＴをバリア成立予測時間ＰＢＥＴとして電力制御部６３ａへ出力する。予測情報生成部６１３ａは、読み出したプロセッサ識別情報ＰＩＤ−ｎをプロセッサ予測識別情報ＰＰＩＤ−ｎとして電力制御部６３ａへ出力する。また予測情報生成部６１３ａは、読み出したバリア到達時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを式（１）及び式（２）に代入することにより、スレッド非実行予測時間ＰＴＮＰＴを算出する。予測情報生成部６１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、スレッド非実行予測時間ＰＴＮＰＴを電力制御部６３ａへ出力する。【０１９０】
電力制御部６３ａは、予測情報取得部６１ａから入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図３２を参照して、電力制御部６３ａの具体的な構成について説明する。図３２は、電力制御部６３ａの具体的な構成例を示す図である。電力制御部６３ａは、電力モード制御部６３１ａ、クロック信号制御部６３２、及び電源電圧制御部６３３とにより構成される。電力制御部６３ａは、電力モード制御部６３１が電力モード制御部６３１ａに入れ代わった点で、上述した電力制御部６３と異なる。以下、異なる点を中心に説明する。【０１９１】
電力モード制御部６３１ａは、入力されたバリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴに基づいて、ＤＶＦＳ制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部６３１ａは、省電力効果が大きいと判定した制御を選択する。ここで、ＤＶＦＳ制御を選択した場合、電力モード制御部６３１ａは、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴを式（３）に代入することによって、スレッド非実行時間が“０”となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。また、電力モード制御部６３１ａには、図２４に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部６３１ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部６３１と同様である。【０１９２】
＜動作＞
次に図３３を参照して、変形例１に係るマルチプロセッサ制御装置６ａの動作について説明する。図３３は、マルチプロセッサ制御装置６ａ全体の動作の流れを示すフローチャートである。図３３に示すステップＳ５１、Ｓ５２、Ｓ５５、Ｓ５６、Ｓ５９は、図２５に示したステップＳ４１、Ｓ４２、Ｓ４５、Ｓ４６、Ｓ４９と同様の処理を行うので、それ以外のステップを中心に説明する。【０１９３】
ステップＳ５２の次のステップＳ５３において、予測情報生成部６１３ａは、バリア監視部６１１ａからバリア開始信号が入力されると、履歴情報格納部６１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎ、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを読み出す。そして、予測情報生成部６１３ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎ、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴを、電力制御部６３ａへ出力する（ステップＳ５３）。ステップＳ５３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ５４−１〜Ｓ５４−Ｎ）が行われる。この個別の制御については、後述する。【０１９４】
ステップＳ５６の次のステップＳ５７において、バリア監視部６１１ａは、バリアタイミング信号とタイマ１２の計時に基づいて、統計値であるバリア到達時間ＢＡＴ及びスレッド開始時間ＴＳＴと、バリア成立時間ＢＥＴとを算出する。またステップＳ５７において、バリア監視部６１１ａは、算出したバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを履歴情報格納部６１２ａへ出力する。【０１９５】
ステップＳ５７の次に、履歴情報格納部６１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前の入力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、ステップＳ５７で出力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴに更新する（ステップＳ５８）。またステップＳ５８において、履歴情報格納部６１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するタグ部に格納された従前のプロセッサ識別情報ＰＩＤ−ｎを、ステップＳ５７で出力されたプロセッサ識別情報ＰＩＤ−ｎに更新する。【０１９６】
図３４を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ５４−１〜Ｓ５４−Ｎ）について具体的に説明する。ステップＳ５４−１〜Ｓ５４−Ｎの制御の流れは同じであるため、図３４の例ではプロセッサＰ−ｎの制御の流れを記載している。なお、図３４に示すステップＳ５４１〜Ｓ５４４は、図２６に示したステップＳ４４１〜Ｓ４４４と同様の処理を行い、ステップＳ５４６〜Ｓ５５１は、図２６に示したステップＳ４４５〜Ｓ４５０と同様の処理を行うので、それ以外のステップを中心に説明する。【０１９７】
ステップＳ５４４の次のステップＳ５４５において、電力モード制御部６３１ａは、制御対象のプロセッサがステップＳ５３で出力されたプロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎであるか否かを判定する（ステップＳ５４５）。つまり、電力モード制御部６３１ａは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合（ステップＳ５４５でＮｏ）、電力モード制御部６３１ａは、ステップＳ５３で出力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する（ステップＳ５４６）。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合（ステップＳ５４５でＹｅｓ）、スリープ移行制御（ステップＳ５４６）がスキップされる。ここでは、制御対象のプロセッサは、Ｐ−ｎであり、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサもＰ−ｎである。よって、ステップＳ５４５では肯定の判定がなされることになる。【０１９８】
以上のように、本変形例１によれば、履歴情報格納部６１２ａには、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴが１つずつ格納される。このため、履歴情報格納部６１２ａの記憶容量を削減することができ、マルチプロセッサ制御装置６ａの回路規模の増大を抑制することができる。【０１９９】
なお、上述では、バリア監視部６１１ａが、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎの平均値、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎの平均値を算出するとしたがこれに限定されない。バリア監視部６１１ａは、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大となるバリア到達時間を除いて平均値を算出してもよい。バリア監視部６１１ａは、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎのうち、最小となるスレッド開始時間を除いて平均値を算出してもよい。【０２００】
なお、上述では、バリア監視部６１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部６１２ａへ出力していたが、これに限定されない。バリア監視部６１１ａは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報ＰＩＤとしてもよい。【０２０１】
＜実施の形態２の変形例２＞
実施の形態２においては、各プロセッサ毎の個別制御を図２６に示すようなフローで行っていた。しかしながら、図２８に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。【０２０２】
本変形例２におけるマルチプロセッサ制御装置は、図２０〜図２３、図２５、図２６に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図２６のフローのみ異なる。以下、異なる点を中心に説明する。【０２０３】
＜動作＞
図３５を参照して、本変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）について具体的に説明する。ステップＳ４４−１〜Ｓ４４−Ｎの制御の流れは同じであるため、図３５の例ではプロセッサＰ−ｎの制御の流れを記載している。図３５に示すステップＳ６４１〜Ｓ６４７は、図２６に示すステップＳ４４１〜Ｓ４４７と同様の処理を行い、ステップＳ６５０〜Ｓ６５２は、図２６に示すステップＳ４４８〜Ｓ４５０と同様の処理を行うので、それ以外のステップを中心に説明する。【０２０４】
ステップＳ６４１においてプロセッサＰ−ｎがスリープモードであると判定した場合、電力モード制御部６３１は、図２５のステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する（ステップＳ６４８）。電力モード制御部６３１は、より深いスリープモードに移行可能と判定した場合（ステップＳ６４８でＹｅｓ）、プロセッサＰ−ｎの電力モードを、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたより深いスリープモードへ移行させる（ステップＳ６４９）。一方、電力モード制御部６３１は、より深いスリープモードに移行不可能と判定した場合（ステップＳ６４８でＮｏ）、スリープ間移行制御（ステップＳ６４９）をスキップする。【０２０５】
例えば、図２８の制御後では、プロセッサＰ−１は、３回目のバリア開始時、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続している。しかし、３回目のバリア開始時に取得するスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）は、２回目のバリア開始時に取得したスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）よりも大きい。従って、本変形例２を適用すれば、電力モード制御部６３１は、３回目のバリア開始時、プロセッサＰ−１の電力モードをより深いスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−１）に移行させることができる。【０２０６】
以上のように、本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。【０２０７】
なお、上記実施の形態１、２では、共有記憶型のマルチプロセッサシステムの説明を行ったが、マルチプロセッサシステムには、私有記憶型も存在する。私有記憶型のマルチプロセッサシステムでは、各プロセッサに他のプロセッサから直接アクセスできない専用メモリがそれぞれ設けられている。専用メモリを有するプロセッサは、高速相互結合網で接続されている。なお、これらのプロセッサは、マルチプロセッサではなく、コンピュータが多数接続されたマルチコンピュータとして分類されることもある。このような私有記憶型のマルチプロセッサシステムは、共有記憶型のようにロック変数を直接用いることができないため、プロセッサ間の通信手段を用いたメッセージ交換によってバリア同期を実現する。しかしながら、本質的には通信手段が異なるのみであり、早期にバリア到達したスレッドは、最後のスレッドがバリア到達してバリア成立するまで待つ必要があるのは同様である。このため、私有記憶型のマルチプロセッサシステムにおいても、本発明のスリープ制御が適用可能である。また、ここでいうプロセッサは、プログラムカウンタを有するストアドプログラム方式のプロセッサに限定されない。通常動作モードと少なくとも１つのスリープモードを有すれば、応用分野に特化した専用の有限ステートマシンに従って動作する演算処理装置を、プロセッサの代わりに用いてもよい。【０２０８】
また、上記実施の形態１、２のマルチプロセッサシステムは、典型的には、画像・音声等の再生装置に適用可能である。図３６は、実施の形態１のマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。例えば、ＭＰＥＧ規格に沿って符号化（エンコード）された画像・音声情報が、光ディスク９２やメモリカード９４に符号化ストリームデータとして格納されているとする。この場合、再生装置内のシステムＬＳＩは、共有メモリバス２、メモリコントローラ７及びＩＯインタフェース８経由で各ドライブ９１及び９３から読み込んだ符号化ストリームデータをＤＲＡＭで構成される主記憶装置３に展開する。プロセッサＰ−１は、符号化ストリームデータを共有メモリバス２及びメモリコントローラ７を経由して主記憶装置３から取得し、画像符号化ストリームと音声符号化ストリームとに分離する。プロセッサＰ−１は、共有メモリバス２を経由して、画像符号化ストリームをプロセッサＰ−２に、音声符号化ストリームをプロセッサＰ−３に通知する。プロセッサＰ−２は、画像符号化ストリームを復号化（デコード）し、プロセッサＰ−３は、音声符号化ストリームを復号化する。ここで、プロセッサＰ−１は、表示時間に応じてプロセッサＰ−２、Ｐ−３とバリア同期を取りながら、復号化された画像・音声情報を、テレビなどの表示装置に出力する。この際、プロセッサＰ−１〜Ｐ−３に割り当てたシステム処理、画像復号化処理、音声復号化処理の負荷は、一般的に均等にならない。このため、本発明におけるマルチプロセッサ制御装置１によってプロセッサＰ−１〜Ｐ−３を制御することで、消費電力削減が得られる。【０２０９】
なお、上述では、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また集積回路化の手法は、システムＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。システムＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、システムＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりシステムＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
【産業上の利用可能性】
【０２１０】
本発明に係るマルチプロセッサ制御装置は、従来よりも大きな省電力効果を得ることが可能であり、消費電力が課題となる並列計算機システムなどにおいて利用することができる。
【図１】
2008129786.tif 000003
【図２】
2008129786.tif 000004
【図３】
2008129786.tif 000005
【図４】
2008129786.tif 000006
【図５】
2008129786.tif 000007
【図６】
2008129786.tif 000008
【図７】
2008129786.tif 000009
【図８】
2008129786.tif 000010
【図９】
2008129786.tif 000011
【図１０】
2008129786.tif 000012
【図１１】
2008129786.tif 000013
【図１２】
2008129786.tif 000014
【図１３】
2008129786.tif 000015
【図１４】
2008129786.tif 000016
【図１５】
2008129786.tif 000017
【図１６】
2008129786.tif 000018
【図１７】
2008129786.tif 000019
【図１８】
2008129786.tif 000020
【図１９】
2008129786.tif 000021
【図２０】
2008129786.tif 000022
【図２１】
2008129786.tif 000023
【図２２】
2008129786.tif 000024
【図２３】
2008129786.tif 000025
【図２４】
2008129786.tif 000026
【図２５】
2008129786.tif 000027
【図２６】
2008129786.tif 000028
【図２７】
2008129786.tif 000029
【図２８】
2008129786.tif 000030
【図２９】
2008129786.tif 000031
【図３０】
2008129786.tif 000032
【図３１】
2008129786.tif 000033
【図３２】
2008129786.tif 000034
【図３３】
2008129786.tif 000035
【図３４】
2008129786.tif 000036
【図３５】
2008129786.tif 000037
【図３６】
2008129786.tif 000038
【図３７】
2008129786.tif 000039
【手続補正書】
【提出日】平成21年1月14日(2009.1.14)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ制御装置、その制御方法および集積回路に関し、より特定的には、複数のプロセッサの低消費電力化を実現するマルチプロセッサ制御装置、その制御方法および集積回路に関する。
【背景技術】
【０００２】
複数のプロセッサそれぞれにプログラム内のスレッド（またはプロセス）を割り当てて、それらスレッドを並列的に実行するマルチプロセッサシステムでは、各スレッド間で共通に参照している変数の読み書き順序に矛盾が生じるのを防ぐため、全てのスレッドがスレッド毎に予め設定されたバリアポイントに到達するまで次の実行をブロックするバリア同期（Ｂａｒｒｉｅｒ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ）を行っている。以下では、バリア同期を開始することをバリア開始、スレッドがバリアポイントに到達することをバリア到達、最後のスレッドがバリア到達することによりバリア同期が成立することをバリア成立、バリア到達したスレッドがバリア成立まで待機状態となることをバリア待ちと呼ぶこととする。
【０００３】
バリア同期を実現するマルチプロセッサシステムは、一般的に、複数のプロセッサが単一のアドレス空間を共有する共有記憶型の構成を有している。共有記憶型のマルチプロセッサシステムは、各プロセッサからアクセス可能な共有メモリバス上の主記憶装置に設けたロック変数を使用して、バリア同期を実現している。具体的には、まず、ロック変数を、並列実行を行う全プロセッサのスレッド数に設定しておく。プロセッサは、スレッドのバリア到達時にアトミック操作（共有メモリバスを占有してＲｅａｄ―Ｍｏｄｉｆｉｅｄ―Ｗｒｉｔｅの一連の動作を行う操作）を行い、主記憶装置にアクセスしてロック変数を１つデクリメントさせる。その後、プロセッサは、バリア待ちとなる。バリア待ちのプロセッサは、他のプロセッサのアトミック操作によってロック変数が０になったかどうかを、ロック変数を繰り返しロードして判定し続ける。つまり、ロック変数が０になることはバリア成立を意味するので、プロセッサは、バリア成立まで、ロック変数のロードと判定を繰り返していることになる。このように、バリア待ちの間にロック変数のロードと判定を繰り返している状態を、スピンウェイト（Ｓｐｉｎ  Ｗａｉｔｉｎｇ）状態と呼ぶ。
【０００４】
ここで、スピンウェイト状態のプロセッサは、本来割り当てられたスレッドを実行していないにもかかわらず、常に主記憶装置へのアクセスを伴った通常の動作状態になる。このため、スピンウェイト状態のプロセッサは、無駄な電力を消費していることになる。
【０００５】
そこで、このようなスピンウェイト状態のプロセッサを非動作状態にするスリープモードに移行させることにより、低消費電力化を実現する技術が提案されている。この技術では、論理回路へのクロック信号の供給を遮断するクロックゲーティング（Ｃｌｏｃｋ  Ｇａｔｉｎｇ）を行ったり、近年半導体プロセスの微細化に伴って増大しているリーク電力対策のためのスレッショルド電圧（Ｖｔｈ）の制御を行ったり、電源電圧（Ｖｄｄ）の供給を遮断するパワーゲーティング（Ｐｏｗｅｒ  Ｇａｔｉｎｇ）を行ったりして、スピンウェイト状態のプロセッサの電力モードをスリープモードに移行させている。例えば、英ＡＲＭ社のＡＲＭプロセッサには、図３７に示すように、プロセッサのとり得る複数の電力モードが設定されている。電力モードには、通常の動作状態のモード（通常動作モード）であるＲｕｎモードと、非動作状態のスリープモードである、Ｓｔａｎｄｂｙモード、Ｄｏｒｍａｎｔモード、及びＳｈｕｔｄｏｗｎモードとがある。Ｓｔａｎｄｂｙモード、Ｄｏｒｍａｎｔモード、及びＳｈｕｔｄｏｗｎモードは、プロセッサコア及びキャッシュメモリそれぞれに供給するクロック信号のＯＮ／ＯＦＦと電圧のＯＮ／ＯＦＦのさせ方が互いに異なっている。
【０００６】
ここで、Ｄｏｒｍａｎｔモードは、パワーゲーティングを適用しているため、クロックゲーティングのみを適用したＳｔａｎｄｂｙモードに比べて省電力効果が大きく、Ｓｔａｎｄｂｙモードよりも深いスリープモードとなる。Ｓｈｕｔｄｏｗｎモードは、キャッシュメモリに供給する電圧もＯＦＦしているため、Ｄｏｒｍａｎｔモードに比べて省電力効果が大きく、Ｄｏｒｍａｎｔモードよりも深いスリープモードとなる。一方で、Ｄｏｒｍａｎｔモードは、プロセッサコア内のレジスタ等の内部状態（コンテキスト）を、電圧ＯＦＦ時にはプロセッサコアから外部メモリ等に退避させ、電圧ＯＮ時には外部メモリ等からプロセッサコアに復帰させる必要がある。また、プロセッサコアの電圧をＯＮさせる場合、比較的長い安定化時間を要する。このため、Ｄｏｒｍａｎｔモードは、Ｓｔａｎｄｂｙモードに比べて、Ｒｕｎモードから移行する際、及びＲｕｎモードへ復旧する際の時間的なオーバーヘッドが大きい。Ｓｈｕｔｄｏｗｎモードは、キャッシュメモリ内のコンテキストの退避・復帰や、キャッシュメモリの安定化時間も考慮する必要があるため、Ｄｏｒｍａｎｔモードに比べて時間的なオーバーヘッドが大きい。このため、より省電力な（深い）スリープモードは、スリープモードを適用する時間が通常動作モードからの移行及び通常動作モードへの復旧に要する時間に比べて十分に長くなければ、適用できない。
【０００７】
そこで、より深いスリープモードを上記のようなバリア待ちのプロセッサに適用するには、バリア待ち時間を事前に見積もる必要がある。これを実現する従来技術として、バリア待ち時間を履歴によって予測し、予測したバリア待ち時間（バリア待ち予測時間）に応じてどの深さのスリープモードへ移行するかを決定する方法が提案されている（例えば、非特許文献１など）。具体的には、スレッドがバリア到達すると、当該スレッドを実行したプロセッサの電力モードを、通常動作モードからバリア待ち予想時間に応じたスリープモードに移行させる。その後、バリア成立するまでに電力モードがスリープモードから通常動作モードに復旧するように、バリア待ち予想時間から逆算したタイミングで通常動作モードへの復旧を開始する。このように、従来技術では、バリア待ち時間を履歴によって予測することで、より深いスリープモードをバリア待ちのプロセッサに適用させている。
【非特許文献１】ジェイ・リー（Ｊ．Ｌｉ）、ジェイ・マルティネス（Ｊ．Ｍａｒｔｉｎｅｚ）、エム・ホアン（Ｍ．Ｈｕａｎｇ）、「ザ  スリフティ  バリア：  エナジ−アウェア  シンクロナイゼイション  イン  シェアード−メモリ  マルチプロセッサーズ（Ｔｈｅ  Ｔｈｒｉｆｔｙ  Ｂａｒｒｉｅｒ：  Ｅｎｅｒｇｙ−Ａｗａｒｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｉｎ  Ｓｈａｒｅｄ−Ｍｅｍｏｒｙ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒｓ）」、イン  プロシーディングス  オブ  ハイ−パフォーマンス  コンピューター  アーキテクチャ  （エイチピーシーエー）  '０４，（Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｈｔｕｒｅ  （ＨＰＣＡ）  '０４，）、アイトリプルイー  コンピュータ  ソサエティ  ワシントン  ディーシー  ユーエスエー（ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｗａｓｈｉｎｇｔｏｎ，  ＤＣ，  ＵＳＡ）、米国、２００４年、ｐ１４―２３
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したように、スリープモードへの移行及び通常動作モードへの復旧には時間的なオーバーヘッドが存在し、オーバーヘッドはスリープモードが深いほど大きい。さらに、上記従来技術では、スリープモードへの移行と通常動作モードへの復旧とを、１つのバリア同期毎に行っている。このため、上記従来技術では、スリープモードの適用時間に占めるオーバーヘッドの割合が大きく、実際の省電力効果は小さいという課題を有していた。
【０００９】
本発明は、上記の課題を解決するものであり、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、上記課題を解決するためになされた発明であり、本発明に係るマルチプロセッサ制御装置は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
【００１１】
なお、第１及び第２非実行時間情報は、例えば、後述する実施の形態におけるスレッド非実行予測時間に相当する情報である。また、第１ブロック及び第２ブロックは、例えば、後述する実施の形態におけるスレッド又はプロセスに相当するものである。
【００１２】
以上の構成によれば、電力制御手段は、２つの非実行時間情報を用いて、連続して並列実行される２つのプログラムブロックに跨った電力制御を行っている。これにより、１つの非実行時間情報を用いて、１つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来に対し、２つの非実行時間情報の用い方によっては各プロセッサについての更なる省電力化が可能となる。
【００１３】
好ましくは、電力制御手段は、取得手段において取得された第１及び第２非実行時間情報を用いて、第２プログラムブロックのバリア同期開始の前後で第１及び第２ブロックの実行状態が同じ状態となるように第１及び第２ブロックの実行開始タイミングをプロセッサ毎に制御するとともに、第２プログラムブロックのバリア同期開始の前後で第１及び第２ブロックを実行していないプロセッサがスリープ状態になり、第１及び第２ブロックを実行しているプロセッサが動作状態になるように複数のプロセッサへの電力供給を制御するとよい。この構成により、１つの非実行時間情報を用いて、１つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来と比べて、スリープ状態への移行と動作状態への復旧の回数を減らすことができるので、各プロセッサについての更なる省電力化が可能となる。
【００１４】
上記構成においてさらに、電力制御手段は、プロセッサを通常動作状態にする電力を表す通常動作モードと、プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、各プロセッサへのクロック信号及び／又は電源電圧の供給を制御して、各プロセッサの電力モードを電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサに対して、第２プログラムブロックのバリア同期開始から第２非実行時間情報が表す時間だけ第２ブロックの実行開始タイミングを遅延させるとともに、第１ブロックの実行終了から第２ブロックの実行開始までの間の電力モードを、スリープモードに設定するとよい。なお、移行手段は、例えば、後述する実施の形態におけるクロック信号制御部及び電源電圧制御部に相当するものである。なお、第２非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第２非実行時間であってもよい。
【００１５】
上記構成においてさらに、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１ブロックの実行終了から第２ブロックの実行開始までの間、第１非実行時間情報が表す時間に応じたスリープモードに設定するとよい。又は、電力モード制御手段は、第２非実行時間情報が表す時間が第１非実行時間情報が表す時間よりも大きい場合、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間、第１非実行時間情報が表す時間に応じたスリープモードに設定し、第２プログラムブロックのバリア同期開始から第２ブロックの実行開始までの間、第２非実行時間情報が表す時間に応じたスリープモードに設定するよい。又は、第１及び第２プログラムブロックは、同一のプログラムブロックであり、電力モード制御手段は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの電力モードを、第１非実行時間情報が表す時間と第２非実行時間情報が表す時間との和に応じたスリープモードに設定するとよい。
【００１６】
なお、第１非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第１非実行時間であり、第２非実行時間情報は、第１プログラムブロックのバリア同期成立前に第１ブロックの実行を終了したプロセッサの第２非実行時間であってもよい。
【００１７】
又は、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の統計時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の統計時間であってもよい。この場合においてさらに、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の平均時間であるとよい。又は、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間のうち最小の第１非実行時間を除いて算出された平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間のうち最小の第２非実行時間を除いて算出された平均時間であるとよい。
【００１８】
又は、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間のうちの最小の第１非実行時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間のうちの最小の第１非実行時間であってもよい。
【００１９】
上記構成においてさらに、電力モード制御手段には、さらに、プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、電力モード制御手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサに対して、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間の電力モードを第１非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第１ブロックの実行終了から第１プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサに対して、第２ブロックの実行終了から第２プログラムブロックのバリア同期成立までの間の電力モードを第２非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第２ブロックの実行終了から第２プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定するとよい。
【００２０】
この場合においてさらに、取得手段は、第１及び第２バリア成立時間をさらに取得しており、電力モード制御手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第１非実行時間情報が表す時間と第１バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第１周波数を算出し、算出した第１周波数を低速動作モードとして設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第２非実行時間情報が表す時間と第２バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第２周波数を算出し、算出した第２周波数を低速動作モードとして設定し、移行手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第１周波数に設定し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第２周波数に設定するとよい。
【００２１】
又は、電力モード制御手段は、各プロセッサの電力モードを全て低速動作モードに設定したとき、各プロセッサの電力モードを通常動作モードに設定し直すとよい。
【００２２】
又は、取得手段は、第１プログラムブロックのバリア同期開始時に第１ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第１ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第１ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第１バリア成立時間から減算して第１非実行時間を取得し、第２プログラムブロックのバリア同期開始時に第２ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第２ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第２ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第２バリア成立時間から減算して第２非実行時間を取得するとよい。
【００２３】
なお、取得手段は、第１及び第２非実行時間情報を記憶しており、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の統計時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の統計時間であってもよい。この場合においてさらに、第１非実行時間情報は、プロセッサ毎に表された第１非実行時間の平均時間であり、第２非実行時間情報は、プロセッサ毎に表された第２非実行時間の平均時間であるとよい。
【００２４】
また本発明は、マルチプロセッサ制御装置で行われる制御方法にも向けられており、本発明に係る制御方法は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得ステップと、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御ステップとを含む。
【００２５】
また本発明は、集積回路にも向けられており、本発明に係る集積回路は、プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち第１ブロックが実行されない時間を表す第１非実行時間であってプロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち第２ブロックが実行されない時間を表す第２非実行時間であってプロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、取得手段において取得された第１及び第２非実行時間情報を用いて、第１及び第２プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
【発明の効果】
【００２６】
本発明によると、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することができる。
【発明を実施するための最良の形態】
【００２７】
まず、各プロセッサによって実行されるプログラムの構成について具体的に説明する。
【００２８】
プログラムは、並列実行可能か否かを基準に複数のプログラムブロックに分割される。各プログラムブロックは、並列実行可能な並列プログラムブロック、又は並列実行不可能な逐次プログラムブロックのいずれかに分類される。
【００２９】
図１は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。プログラム５に記述された関数ｐａｒ（ｉ）は、ｉについて並列実行可能であることを示す関数であり、関数ｓｅｑ（）は、並列実行不可能であることを示す関数であるとする。この場合、プログラムブロック５１は並列プログラムブロックとなり、プログラムブロック５２は逐次プログラムブロックとなる。また、プログラム５に記述されたｊはループ実行の回数を示しており、図１の記述によれば、並列プログラムブロック５１が１０回（ｊ＝０〜９）だけループ実行され、その後、逐次プログラムブロック５２が実行されることになる。さらに図１では、並列プログラムブロック５１をｉについて４つのスレッド（ｉ＝０〜２４、ｉ＝２５〜４９、ｉ＝５０〜７４、ｉ＝７５〜９９）に分割している。そして、分割した４つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−４に割り当てられている。例えば、プロセッサＰ−２は、バリア開始と同時にｉ＝２５〜４９で示されるスレッドの実行を開始し、当該スレッドのバリア到達時（ｉ＝２５〜４９で示されるスレッドに係る実線矢印の先端）にアトミック操作を行い、主記憶装置にアクセスしてロック変数を１つデクリメントさせる。その後、プロセッサＰ−２は、ｉ＝２５〜４９で示されるスレッドの点線矢印のように、バリア成立するまでバリア待ちとなる。
【００３０】
スレッド開始時間ＴＳＴ（Ｔｈｒｅａｄ  Ｓｔａｒｔｉｎｇ  Ｔｉｍｅ）は、バリア開始からスレッドの実行が開始されるまでの時間を示す。図１の例では、各スレッドのスレッド開始時間ＴＳＴをＴＳＴ−１〜ＴＳＴ−４で示している。また図１の例では、各スレッドがバリア開始と同時に実行を開始しているので、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−４は、全て"０"となっている。バリア成立時間ＢＥＴ（Ｂａｒｒｉｅｒ  Ｅｓｔａｂｌｉｓｈ  Ｔｉｍｅ）は、バリア開始からバリア成立までの時間を示す。バリア到達時間ＢＡＴ（Ｂａｒｒｉｅｒ  Ａｒｒｉｖａｌ  Ｔｉｍｅ）は、バリア開始からスレッドのバリア到達までの時間を示す。図１の例では、各スレッドのバリア到達時間ＢＡＴをＢＡＴ−１〜ＢＡＴ−４で示している。バリア待ち時間ＢＷＴ（Ｂａｒｒｉｅｒ  Ｗａｉｔｉｎｇ  Ｔｉｍｅ）は、バリア到達からバリア成立までの時間を示す。図１の例では、各スレッドのバリア待ち時間ＢＷＴをＢＷＴ−１〜ＢＷＴ−４で示している。図１の例では、ｉ＝０〜２５で示されるスレッドのバリア到達が最後となるので、当該スレッドのバリア到達時にバリア成立となる。よって、バリア待ち時間ＢＷＴ−１＝０となっている。スレッド非実行時間ＴＮＰＴ（Ｔｈｒｅａｄ  Ｎｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｔｉｍｅ）は、バリア開始からバリア成立までの間で、スレッドが実行していない時間を示す。
【００３１】
ここで、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、及びバリア待ち時間ＢＷＴには、式（１）のような関係が成立する。なお、式（１）のｎは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。また、バリア成立時間ＢＥＴは、最大のバリア到達時間ＢＡＴが示す時間と一致する。
（バリア成立時間ＢＥＴ）＝（バリア到達時間ＢＡＴ−ｎ）＋（バリア待ち時間ＢＷＴ−ｎ）    ・・・（１）
【００３２】
また、バリア待ち時間ＢＷＴ、スレッド開始時間ＴＳＴ、及びスレッド非実行時間ＴＮＰＴには、式（２）のような関係が成立する。なお、式（２）のｎは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。
（スレッド非実行時間ＴＮＰＴ−ｎ）＝（スレッド開始時間ＴＳＴ−ｎ）＋（バリア待ち時間ＢＷＴ−ｎ）    ・・・（２）
【００３３】
なお、図２に示すように、並列プログラムブロック５１がループ実行しない場合もある。図２は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。図２に示すプログラム５ａには、並列プログラムブロック５１及び５３が記述されている。この記述によれば、図２に示すように、まず、４つのスレッドに分割された並列プログラムブロック５１が並列実行され、その直後、４つのスレッドに分割された並列プログラムブロック５３が並列実行されることになる。
【００３４】
次に、本発明の実施の形態に係るマルチプロセッサ制御装置について説明する。
【００３５】
＜実施の形態１＞
＜構成＞
図３を参照して、本発明の実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成について説明する。図３は、実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。図３において、マルチプロセッサシステムは、マルチプロセッサ制御装置１、プロセッサＰ−１〜Ｐ−Ｎ（Ｎは１以上の自然数）、共有メモリバス２、主記憶装置３、及び電源装置４により構成される。プロセッサＰ−１〜Ｐ−Ｎそれぞれは、共有メモリバス２を介して主記憶装置３と接続されており、主記憶装置３上の特定の共有メモリアドレスに割り当てたロック変数を用いた排他制御を行いながら、バリア同期を実現している。ただし、ロック変数は必ずしも主記憶装置３上に設けられる必要はない。例えば、マルチプロセッサ制御装置１上の特定の共有メモリアドレスにマッピングされた専用レジスタ上に設けられてもよい。
【００３６】
マルチプロセッサ制御装置１は、電源装置４とプロセッサＰ−１〜Ｐ−Ｎそれぞれと接続され、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、スリープモードへの移行と通常動作モードへの復旧とを制御する。マルチプロセッサ制御装置１は、予測情報取得部１１、タイマ１２、及び電力制御部１３により構成される。
【００３７】
予測情報取得部１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部１３へ出力する。本実施形態では、予測情報として、スレッド非実行時間ＴＮＰＴの予測時間であるスレッド非実行予測時間ＰＴＮＰＴ（Ｐｒｅｄｉｃｔｉｖｅ  Ｔｈｒｅａｄ  Ｎｏｎ  Ｐｒｏｃｅｓｓｉｎｇ  Ｔｉｍｅ）を用いる。以下、図４を参照して、予測情報取得部１１の具体的な構成について説明する。図４は、予測情報取得部１１の具体的な構成例を示す図である。予測情報取得部１１は、バリア監視部１１１、履歴情報格納部１１２、及び予測情報生成部１１３により構成される。
【００３８】
バリア監視部１１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれにおけるプログラムブロックの実行状態を監視して、バリアタイミング信号ＢＴ（Ｂａｒｒｉｅｒ  Ｔｉｍｉｎｇ）を生成する。バリア監視部１１１は、バリアタイミング信号ＢＴを生成すると同時に、生成したバリアタイミング信号ＢＴを、予測情報生成部１１３及び電力制御部１３へ出力する。バリアタイミング信号ＢＴには、バリア開始タイミングを示すバリア開始信号、各スレッドのバリア到達タイミングを示すバリア到達信号、バリア成立タイミングを示すバリア成立信号、及び、各スレッドのスレッド開始タイミングを示すスレッド開始信号が含まれる。バリア監視部１１１は、例えば、プロセッサＰ−１〜Ｐ−Ｎそれぞれの実行命令を監視することで、バリア開始信号及びスレッド開始信号を検出することができる。また、上記実行命令のうち、ロック変数をディクリメントさせるアトミック操作を検出することで、バリア到達信号又はバリア成立信号を検出することができる。また例えば、バリア監視部１１１を共有メモリバス２と接続し、バリア監視部１１１の内部にバリアタイミング信号ＢＴを生成するためのレジスタを設けた構成としてもよい。この場合、各プロセッサＰ−１〜Ｐ−Ｎが各タイミングでバリア監視部１１１のレジスタへアクセスすることで、バリア監視部１１１がそのタイミングを示すバリアタイミング信号ＢＴを生成することができる。
【００３９】
またバリア監視部１１１は、実行されるプログラムブロックを特定するためのバリア識別情報ＢＩＤ（Ｂａｒｒｉｅｒ  ＩＤ）を、内部のＢＩＤレジスタに保持する。バリア識別情報ＢＩＤは、例えば、バリア開始ポイントの命令アドレス等で構成される。バリア監視部１１１は、ＢＩＤレジスタに保持したバリア識別情報ＢＩＤ−ｍを、履歴情報格納部１１２、予測情報生成部１１３、及び電力制御部１３へ出力する。ここで、プログラムは、Ｍ（Ｍは１以上の自然数）個のプログラムブロックに分割されているとし、ｍ（１以上Ｍ以下の自然数）はプログラムブロックを特定する番号であるとする。
【００４０】
またバリア監視部１１１は、バリア到達信号を生成したときにタイマ１２を参照し、バリア到達時間ＢＡＴを算出する。バリア到達信号の生成タイミングは、プロセッサＰ−１〜Ｐ−Ｎに応じて異なる。よって、バリア監視部１１１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについてのバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎを算出することになる。同様に、バリア監視部１１１は、スレッド開始信号を生成したときにタイマ１２を参照することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれについてのスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを算出する。バリア監視部１１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを式（１）及び式（２）に代入することにより、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎをそれぞれ算出する。バリア監視部１１１は、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、履歴情報格納部１１２へ出力する。
【００４１】
履歴情報格納部１１２は、入力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、図５に示す履歴テーブルに格納する。図５は、履歴情報格納部１１２内の履歴テーブルを示す図である。図５において、履歴テーブルは、タグ部とデータ部とを有している。履歴情報格納部１１２は、バリア監視部１１１から入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部１１２は、バリア監視部１１１から入力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎとを、関連づけして格納する。
【００４２】
また履歴情報格納部１１２は、Ｖ（Ｖａｌｉｄ）フラグ又はＩＶ（Ｉｎｖａｌｉｄ）フラグからなるフラグ情報をタグ部のエントリに格納している。履歴情報格納部１１２は、タグ部のエントリと当該エントリに対応するデータ部の各エントリ（ライン）にバリア識別情報ＢＩＤ−ｍ及び履歴情報が格納されると、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについて有効な履歴情報が存在するとして、そのラインのフラグをＶフラグにセットする。一方、履歴情報格納部１１２は、タグ部のエントリと当該エントリに対応するデータ部の各エントリにバリア識別情報ＢＩＤ−ｍ及び履歴情報が存在しない場合、そのラインのフラグをＩＶフラグにセットする。履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍ及び履歴情報を格納する際、入力されたバリア識別情報ＢＩＤ−ｍを含む有効な（Ｖフラグがセットされた）ラインが既に履歴テーブルに存在しているか否かを判定する。有効なラインが既に存在している場合、履歴情報格納部１１２は、その有効なラインに履歴情報を上書きして更新する。有効なラインが存在していない場合、履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍ及び履歴情報を空いているラインに格納し、そのラインのフラグをＶフラグにセットする。
【００４３】
なお、履歴テーブルに格納できるライン数は有限であるため、全ラインのＶフラグがセットされることが考えられる。この場合、プロセッサのキャッシュメモリの更新等に用いられるＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）のような更新方式で、使用頻度の低いラインから上書きして更新するとよい。
【００４４】
また、プログラムブロックの初回実行時、履歴テーブルには、バリア識別情報ＢＩＤは格納されるものの、履歴情報は格納されていない。このため、履歴テーブル内の履歴情報の初期値として"０"を設定しておいてもよい。あるいは、事前にプログラムのステップ数や各ステップの実行レイテンシを考慮した静的解析を行って、各プロセッサのバリア到達時間を予測しておいてもよい。この場合、予測したバリア到達時間の中で最大となるバリア成立時間からバリア到達時間を減算することによりバリア待ち時間を求め、求めたバリア待ち時間をスレッド非実行情報の初期値として設定しておいてもよい。なお、この場合、スレッド開始時間を"０"としている。
【００４５】
また上述では、履歴情報格納部１１２は、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを格納する際、単純に最新の値で更新するようにしていたが、これに限定されない。履歴情報格納部１１２は、過去の履歴情報も含めて統計値（例えば平均値など）を算出し、算出した統計値で更新してもよい。
【００４６】
予測情報生成部１１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍと関連付けられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出し、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして、電力制御部１３へ出力する。
【００４７】
電力制御部１３は、予測情報取得部１１から入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。また電力制御部１３は、連続する２つのプログラムブロックに跨った電力制御を行う。以下、図６を参照して、電力制御部１３の具体的な構成について説明する。図６は、電力制御部１３の具体的な構成例を示す図である。電力制御部１３は、電力モード制御部１３１、クロック信号制御部１３２、及び電源電圧制御部１３３とにより構成される。
【００４８】
電力モード制御部１３１は、バリア監視部１１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる。電力モード制御部１３１は、バリア監視部１１１からバリア成立信号が入力されると、タイマ１２の計時を終了させ、リセットさせる。なお、タイマ１２は、電力制御部１３の内部に設けられてもよい。また、タイマ１２は、マルチプロセッサ制御装置１の外部に設けられて共有メモリバス２と接続されていてもよい。この場合、電力モード制御部１３１は、共有メモリバス２を介してタイマ１２を制御することなる。またこの場合、バリア監視部１１１を共有メモリバス２と接続し、バリア監視部１１１は共有メモリバス２を介してタイマ１２を参照することなる。
【００４９】
また電力モード制御部１３１は、入力されたスレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する。電力モード制御部１３１には、図７に示すようなスリープ移行判定閾値が予め設定されている。図７は、電力モード制御部１３１が設定する電力モードを示す図である。図７に示すスリープ移行判定閾値Ｔｓｂ、Ｔｄｍ、Ｔｓｄは、スリープモードへの移行時間、及び通常動作モードへの復旧時間を考慮しても、十分な省電力効果が見込まれるスリープ時間に設定される。電力モード制御部１３１は、例えばスレッド非実行予測時間ＰＴＮＰＴ−１が０以上Ｔｓｂ以下である場合、プロセッサＰ−１の電力モードを通常動作モードであるＲｕｎモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１が「０」に近い場合、スリープ時間が確保できないことが想定され、また、スレッドが最後にバリア到達することになるので、スリープモードに移行させる必要はない。一方、スレッド非実行予測時間ＰＴＮＰＴ−１がＴｓｂより大きくＴｄｍ以下である場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＳｔａｎｄｂｙモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１がＴｄｍより大きくＴｓｄ以下である場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＤｏｒｍａｎｔモードに設定する。スレッド非実行予測時間ＰＴＮＰＴ−１がＴｓｄより大きい場合、電力モード制御部１３１は、プロセッサＰ−１の電力モードをスリープモードであるＳｈｕｔｄｏｗｎモードに設定する。
【００５０】
なお、電力モード制御部１３１に設定される電力モードは、図７に示す範囲に限定されない。電力モード制御部１３１には、少なくとも、通常動作モードであるＲｕｎモードと１つのスリープモードとが設定されていればよい。また電力モード制御部１３１には、図７に示す電力モードとは異なる電力モードが設定されていてもよい。
【００５１】
電力モード制御部１３１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて設定した電力モードを示す制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎを、プロセッサＰ−１〜Ｐ−Ｎへ出力する。また電力モード制御部１３１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて設定した電力モードを示す制御信号を、クロック信号制御部１３２へは制御信号ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎとして出力し、電源電圧制御部１３３へは制御信号ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎとして出力する。なお、制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎ、ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎ、ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎは、割り込みデバック要求を示す信号であったり、ソフトリセットを示す信号であったり、リセットを示す信号であったりする。さらに、制御信号ＰＣＴＲＬ−１〜ＰＣＴＲＬ−Ｎは、スレッドの実行を開始させることを示す信号となる場合もある。詳細については、後述する。
【００５２】
クロック信号制御部１３２は、ＰＬＬ（Ｐｈａｓｅ−Ｌｏｃｋｅｄ  Ｌｏｏｐ）回路等を用いて、制御信号ＣＣＴＲＬ−１〜ＣＣＴＲＬ−Ｎが示す各電力モードに従ったクロック信号ＣＬＫ−１〜ＣＬＫ−Ｎを生成する。クロック信号制御部１３２は、生成したクロック信号ＣＬＫ−１〜ＣＬＫ−Ｎを、プロセッサＰ−１〜Ｐ−Ｎへ出力する。
【００５３】
電源電圧制御部１３３は、電源装置４から入力される電源電圧を降圧するなどして、制御信号ＶＣＴＲＬ−１〜ＶＣＴＲＬ−Ｎが示す各電力モードに従った電源電圧ＶＤＤ−１〜ＶＤＤ−Ｎを生成する。電源電圧制御部１３３は、生成した電源電圧ＶＤＤ−１〜ＶＤＤ−ＮをプロセッサＰ−１〜Ｐ−Ｎへ供給する。
【００５４】
ここで、例えば、プロセッサＰ−１の電力モードをＳｔａｎｄｂｙモードへ移行させる場合、電力モード制御部１３１は、Ｓｔａｎｄｂｙモードを示す制御信号ＰＣＴＲＬ−１をプロセッサＰ−１へ出力して、プロセッサＰ−１にＳｔａｎｄｂｙモードへの移行を指示する。電力モード制御部１３１は、プロセッサＰ−１において割込みで復旧できる準備が整ったことを検知すると、クロック信号制御部１３２へＳｔａｎｄｂｙモードを示す制御信号ＣＣＴＲＬ−１を出力し、電源電圧制御部１３３へＳｔａｎｄｂｙモードを示す制御信号ＶＣＴＲＬ−１を出力する。クロック信号制御部１３２は、制御信号ＣＣＴＲＬ−１に基づき、復旧に必要な割込みインターフェースを除くプロセッサコアやキャッシュメモリへのクロック信号ＣＬＫ−１の出力を遮断する。電源電圧制御部１３３は、制御信号ＶＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリの電源電圧を、通常動作モードと同じ電源電圧にするか、あるいは、プロセッサコア内の各種レジスタやキャッシュメモリ内のデータ等の内部状態（コンテキスト）が揮発しない範囲で低電圧とする。
【００５５】
また例えば、プロセッサＰ−１の電力モードをＳｈｕｔｄｏｗｎモードへ移行させる場合、電力モード制御部１３１は、Ｓｈｕｔｄｏｗｎモードを示す制御信号ＰＣＴＲＬ−１をプロセッサＰ−１へ出力して、プロセッサＰ−１にＳｈｕｔｄｏｗｎモードへの移行を指示する。電力モード制御部１３１は、プロセッサＰ−１においてプロセッサコアやキャッシュメモリ内の全てのコンテキストが外部のメモリに退避されたことを検知すると、クロック信号制御部１３２へＳｈｕｔｄｏｗｎモードを示す制御信号ＣＣＴＲＬ−１を出力し、電源電圧制御部１３３へＳｈｕｔｄｏｗｎモードを示す制御信号ＶＣＴＲＬ−１を出力する。クロック信号制御部１３２は、制御信号ＣＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリへのクロック信号ＣＬＫ−１の出力を遮断する。電源電圧制御部１３３は、制御信号ＶＣＴＲＬ−１に基づき、プロセッサコアやキャッシュメモリの電源電圧を遮断する。
【００５６】
＜動作＞
次に図８を参照して、実施の形態１に係るマルチプロセッサ制御装置１の動作について説明する。図８は、マルチプロセッサ制御装置１全体の動作の流れを示すフローチャートである。
【００５７】
図８において、バリア監視部１１１は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部１１３及び電力制御部１３へ出力する（ステップＳ１１）。またステップＳ１１において、バリア監視部１１１は、バリア識別情報ＢＩＤ−ｍを予測情報生成部１１３及び電力制御部１３へ出力する。ステップＳ１１の次に、電力モード制御部１３１は、バリア監視部１１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる（ステップＳ１２）。ステップＳ１２の次に、予測情報生成部１１３は、バリア監視部１１１からバリア開始信号が入力されると、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍに関連づけられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出し、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして、電力制御部１３へ出力する（ステップＳ１３）。ステップＳ１３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）が行われる。この個別の制御については、後述する。
【００５８】
ステップＳ１５において、電力モード制御部１３１は、バリア監視部１１１からのバリア成立信号に基づいて、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部１３１は、共有メモリバス２を介して主記憶装置３のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部１１１からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部１３１は、タイマ１２の計時を終了させ、リセットさせる（ステップＳ１６）。
【００５９】
ステップＳ１６の次に、バリア監視部１１１は、バリアタイミング信号とタイマ１２の計時に基づいて、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを算出する（ステップＳ１７）。またステップＳ１７において、バリア監視部１１１は、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、バリア識別情報ＢＩＤ−ｍとともに履歴情報格納部１１２へ出力する。
【００６０】
ステップＳ１７の次に、履歴情報格納部１１２は、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、ステップＳ１７で出力されたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎに更新する（ステップＳ１８）。
【００６１】
ステップＳ１８の次に、バリア監視部１１１は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する（ステップＳ１９）。現在実行中のプログラムブロックが最後のプログラムブロックである場合（ステップＳ１９でＹｅｓ）、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合（ステップＳ１９でＮｏ）、処理はステップＳ１１へ戻り、次のプログラムブロックについての動作が行われる。
【００６２】
図９を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）について具体的に説明する。ステップＳ１４−１〜Ｓ１４−Ｎの制御の流れは同じであるため、図９の例ではプロセッサＰ−ｎの制御の流れを記載している。
【００６３】
図９において、電力モード制御部１３１は、自身が出力する制御信号ＰＣＴＲＬ−ｎを参照して、プロセッサＰ−ｎの現在の電力モードがスリープモードであるか否かを判定する（ステップＳ１４１）。
【００６４】
プロセッサＰ−ｎがスリープモードではないと判定した場合（ステップＳ１４１でＮｏ）、電力モード制御部１３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ１４２）。電力モード制御部１３１は、バリア監視部１１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ１４３）。スレッドがバリア到達したと判定した場合（ステップＳ１４３でＹｅｓ）、電力モード制御部１３１は、スリープ移行制御を行う。具体的には、電力モード制御部１３１は、ステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに従って、移行させるべきスリープモードを設定する。電力モード制御部１３１は、設定したスリープモードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部１３２、電源電圧制御部１３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードでバリア待ちになる。
【００６５】
一方、プロセッサＰ−ｎがスリープモードであると判定した場合（ステップＳ１４１でＹｅｓ）、電力モード制御部１３１は、タイマ１２を監視して、ステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎが経過するのを待ってから、通常動作モードへの復旧制御を行う（ステップＳ１４５）。具体的には、電力モード制御部１３１は、タイマ１２の計時がステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎを経過したとき、通常動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部１３２、電源電圧制御部１３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スリープモードから通常動作モードへ復旧する。このように、ステップＳ１４１及びステップＳ１４５の動作により、プロセッサＰ−ｎが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープモードが継続することになる。
【００６６】
なお、例えば図７のＳｔａｎｄｂｙモードからの復旧であれば、電力モード制御部１３１が、割り込みデバック要求を示す制御信号ＣＣＴＲＬ−ｎをクロック信号制御部１３２へ出力してクロック信号ＣＬＫ−ｎの出力を再開させるだけで、プロセッサＰ−ｎは通常動作モードに復旧させることができる。一方、Ｓｈｕｔｄｏｗｎモードからの復旧であれば、まず、電力モード制御部１３１が、リセットを示す制御信号ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎをクロック信号制御部１３２、電源電圧制御部１３３へ出力してクロック信号ＣＬＫ−ｎ及び電源電圧ＶＤＤ−ｎの出力を再開させる。その後、プロセッサＰ−ｎを通常動作モードに復旧させるには、Ｓｈｕｔｄｏｗｎモードへの移行時に退避した全コンテキストを復旧させる必要がある。このように、復旧時間は、スリープモードの深さに応じて異なる。このため、電力モード制御部１３１は、異なる復旧時間を考慮しながら、スレッド非実行予測時間ＰＴＮＰＴ−ｎの経過前に復旧を開始するように、ステップＳ１４５の動作を行う。これにより、性能低下の影響を抑制できる。
【００６７】
ステップＳ１４５の次に、電力モード制御部１３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ１４６）。電力モード制御部１３１は、バリア監視部１１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ１４７）。スレッドがバリア到達したと判定した場合（ステップＳ１４７でＹｅｓ）、処理は図８に示すステップＳ１５へ進む。プロセッサＰ−ｎは、スレッド実行前に既にスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップＳ１４７からステップＳ１５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。
【００６８】
次に、図１０及び図１１に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置１の制御によってプログラムがどのように実行されるかについて説明する。
【００６９】
図１０は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図１０では、ループ実行される並列プログラムブロックを、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックとしている。また、並列プログラムブロックを３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。
【００７０】
図１０の制御前について説明する。プロセッサＰ−１は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。このときのプロセッサＰ−１のバリア待ち時間である"ＢＷＴ−１"は、"０"となる。プロセッサＰ−２は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＷＴ−２"とする。プロセッサＰ−３は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＷＴ−３"とする。その後、以上の実行状態を繰り返しながら、並列プログラムブロックが実行される。
【００７１】
図１０の制御後について説明する。履歴情報格納部１１２には、バリア識別情報ＢＩＤ−１について、スレッド非実行時間ＴＮＰＴ−１（＝０）、ＴＮＰＴ−２（＝ＢＷＴ−２）、ＴＮＰＴ−３（＝ＢＷＴ−３）が格納されているとする。
【００７２】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−１が"０"であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。
【００７３】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−２に応じたスリープモードＳＬ（ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ−２）を維持しながら、１回目のバリア成立を迎える。
【００７４】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−３に応じたスリープモードＳＬ（ＰＴＮＰＴ−３）に移行する（ステップＳ１４４）。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ−３）を維持しながら、１回目のバリア成立を迎える。
【００７５】
１回目のバリア成立後、スレッド非実行時間ＴＮＰＴ−１がＴＳＴ−１とＢＷＴ−１の和（＝０）となるように、スレッド非実行時間ＴＮＰＴ−２がＴＳＴ−２とＢＷＴ−２の和（＝ＢＷＴ−２）となるように、スレッド非実行時間ＴＮＰＴ−３がＴＳＴ−３とＢＷＴ−３の和（＝ＢＷＴ−３）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。
【００７６】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、通常動作モードを維持しながら、２回目のバリア成立を迎える。これは、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−１が"０"であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。
【００７７】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−２が経過するまで、スリープモードＳＬ（ＰＴＮＰＴ−２）を継続する。スレッド非実行予測時間ＰＴＮＰＴ−２が経過すると、プロセッサＰ−２は、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−２は、２回目のバリア成立を迎える。これは、プロセッサＰ−２のスレッドは、１回目のバリア待ち時間ＢＷＴ−２と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ"０"になるからである。なお、スレッド開始時間ＴＳＴ−２は、スレッド非実行予測時間ＰＴＮＰＴ−２と一致することになる。
【００７８】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−３が経過するまで、スリープモードＳＬ（ＰＴＮＰＴ−３）を継続する。スレッド非実行予測時間ＰＴＮＰＴ−３が経過すると、プロセッサＰ−３は、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−３は、２回目のバリア成立を迎える。これは、プロセッサＰ−３のスレッドは、１回目のバリア待ち時間ＢＷＴ−３と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ"０"になるからである。なお、スレッド開始時間ＴＳＴ−３は、スレッド非実行予測時間ＰＴＮＰＴ−３と一致することになる。
【００７９】
２回目のバリア成立後、スレッド非実行時間ＴＮＰＴ−１がＴＳＴ−１とＢＷＴ−１の和（＝０）となるように、スレッド非実行時間ＴＮＰＴ−２がＴＳＴ−２とＢＷＴ−２の和（＝ＢＷＴ−２）となるように、スレッド非実行時間ＴＮＰＴ−３がＴＳＴ−３とＢＷＴ−３の和（＝ＢＷＴ−３）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。
【００８０】
３回目のバリア開始以降の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
【００８１】
図１１は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図１１では、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−２で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−３で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックのバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。
【００８２】
図１１の制御前について説明する。プロセッサＰ−１は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドのバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。このときのプロセッサＰ−１のバリア待ち時間"ＢＩＤ−１：ＢＷＴ−１"は、"０"となる。
【００８３】
プロセッサＰ−２は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−１：ＢＷＴ−２"とする。
【００８４】
プロセッサＰ−３は、１回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、１回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から１回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−１：ＢＷＴ−３"とする。
【００８５】
プロセッサＰ−１は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドは、２回目のバリア成立前にバリア到達する。その後、プロセッサＰ−１は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−２：ＢＷＴ−１"とする。
【００８６】
プロセッサＰ−２は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−３に比べて長い。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。このときのプロセッサＰ−２のバリア待ち時間"ＢＩＤ−２：ＢＷＴ−２"は、"０"となる。
【００８７】
プロセッサＰ−３は、２回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドは、２回目のバリア成立前にバリア到達する。その後、プロセッサＰ−３は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−２：ＢＷＴ−３"とする。
【００８８】
プロセッサＰ−１は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−１のスレッドは、３回目のバリア成立前にバリア到達する。その後、プロセッサＰ−１は、バリア到達から３回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−３：ＢＷＴ−１"とする。
【００８９】
プロセッサＰ−２は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−２のスレッドは、３回目のバリア成立前にバリア到達する。その後、プロセッサＰ−２は、バリア到達から３回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。このときのバリア待ち時間を"ＢＩＤ−３：ＢＷＴ−２"とする。
【００９０】
プロセッサＰ−３は、３回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサＰ−３のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−２に比べて長い。このため、プロセッサＰ−３のスレッドがバリア到達すると同時に、３回目のバリア成立が起こる。このときのプロセッサＰ−３のバリア待ち時間"ＢＩＤ−３：ＢＷＴ−３"は、"０"となる。
【００９１】
図１１の制御後について説明する。履歴情報格納部１１２には、バリア識別情報ＢＩＤ−１について、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−１）（＝０）、（ＢＩＤ−１：ＴＮＰＴ−２）（＝ＢＩＤ−１：ＢＷＴ−２）、（ＢＩＤ−１：ＴＮＰＴ−３）（＝ＢＩＤ−１：ＢＷＴ−３）が格納されているとする。また、履歴情報格納部１１２には、バリア識別情報ＢＩＤ−２について、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−１）（＝ＢＩＤ−２：ＢＷＴ−１）、（ＢＩＤ−２：ＴＮＰＴ−２）（＝０）、（ＢＩＤ−２：ＴＮＰＴ−３）（＝ＢＩＤ−２：ＢＷＴ−３）が格納されているとする。また、履歴情報格納部１１２には、バリア識別情報ＢＩＤ−３について、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−１）（＝ＢＩＤ−３：ＢＷＴ−１）、（ＢＩＤ−３：ＴＮＰＴ−２）（＝ＢＩＤ−３：ＢＷＴ−２）、（ＢＩＤ−３：ＴＮＰＴ−３）（＝０）が格納されているとする。
【００９２】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−１）が"０"であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−１のバリア到達時間は、プロセッサＰ−２及びＰ−３に比べて長い。このため、プロセッサＰ−１のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。
【００９３】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−２）に応じたスリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）を維持しながら、１回目のバリア成立を迎える。
【００９４】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−３）に応じたスリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）に移行する（ステップＳ１４４）。その後、プロセッサＰ−３は、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）を維持しながら、１回目のバリア成立を迎える。
【００９５】
１回目のバリア成立後、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−１）が（ＢＩＤ−１：ＴＳＴ−１）と（ＢＩＤ−１：ＢＷＴ−１）の和（＝０）となるように、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−２）が（ＢＩＤ−１：ＴＳＴ−２）と（ＢＩＤ−１：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−１：ＴＮＰＴ−３）が（ＢＩＤ−１：ＴＳＴ−３）と（ＢＩＤ−１：ＢＷＴ−３）の和となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。
【００９６】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−１は、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）に応じたスリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）に移行する（ステップＳ１４４）。その後、プロセッサＰ−１は、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を維持しながら、２回目のバリア成立を迎える。
【００９７】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）が経過するまで、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−２）を継続する。ここで、スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）は"０"である。よって、プロセッサＰ−２は、即座に通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。なお、プロセッサＰ−２のスレッドのバリア到達時間は、プロセッサＰ−１及びＰ−３に比べて長い。また、スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−２）が"０"であり、ステップＳ１４４の処理によってはスリープモードに移行しない。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、２回目のバリア成立が起こる。
【００９８】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ１１）してから、２回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−３）が経過するまで、スリープモードＳＬ（ＢＩＤ−１：ＰＴＮＰＴ−３）を継続する。スレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−３）が経過すると、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。その後、プロセッサＰ−３は、バリア到達から２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。
【００９９】
２回目のバリア成立後、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−１）が（ＢＩＤ−２：ＴＳＴ−１）と（ＢＩＤ−２：ＢＷＴ−１）の和となるように、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−２）が（ＢＩＤ−２：ＴＳＴ−２）と（ＢＩＤ−２：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−２：ＴＮＰＴ−３）が（ＢＩＤ−２：ＴＳＴ−３）と（ＢＩＤ−２：ＢＷＴ−３）の和となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。
【０１００】
プロセッサＰ−１は、３回目のバリア開始（ステップＳ１１）してから、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）が経過するまで、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続する。スレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）が経過すると、通常動作モードへ復旧し（ステップＳ１４５）、スレッドの実行を開始する（ステップＳ１４６）。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ１４７でＹｅｓ）同時に、プロセッサＰ−１は、３回目のバリア成立を迎える。これは、プロセッサＰ−１のスレッドは、バリア待ち時間（ＢＩＤ−３：ＢＷＴ−１）と同じ時間だけバリア開始から遅れて実行を開始しており、かつ、後述するプロセッサＰ−３のスレッドとの関係により、スピンウェイト状態になる時間がほぼ"０"になるからである。なお、スレッド開始時間（ＢＩＤ−３：ＴＳＴ−１）は、スレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）と一致することになる。
【０１０１】
プロセッサＰ−２は、３回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−２の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−２は、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−２）に応じたスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−２）に移行する（ステップＳ１４４）。その後、プロセッサＰ−２は、スリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−２）を維持しながら、３回目のバリア成立を迎える。
【０１０２】
プロセッサＰ−３は、３回目のバリア開始（ステップＳ１１）とほぼ同時にスレッドの実行を開始する（ステップＳ１４２）。これは、プロセッサＰ−３の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ１４１でＮｏと判定されるからである。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ１４３でＹｅｓ）、プロセッサＰ−３は、スリープモードに移行せず通常動作モードを維持しながら、３回目のバリア成立を迎える。これは、３回目のステップＳ１３で出力されたスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−３）が"０"であり、ステップＳ１４４の処理によってはスリープモードに移行しないからである。また、プロセッサＰ−３のバリア到達時間は、プロセッサＰ−１及びＰ−２に比べて長い。このため、プロセッサＰ−３のスレッドがバリア到達すると同時に、３回目のバリア成立が起こる。
【０１０３】
３回目のバリア成立後、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−１）が（ＢＩＤ−３：ＴＳＴ−１）と（ＢＩＤ−３：ＢＷＴ−１）の和となるように、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−２）が（ＢＩＤ−３：ＴＳＴ−２）と（ＢＩＤ−３：ＢＷＴ−２）の和となるように、スレッド非実行時間（ＢＩＤ−３：ＴＮＰＴ−３）が（ＢＩＤ−３：ＴＳＴ−３）と（ＢＩＤ−３：ＢＷＴ−３）の和（＝０）となるように、履歴情報格納部１１２の履歴情報が更新される（ステップＳ１８）。
【０１０４】
以上のように本実施形態によれば、バリア開始の前後でスレッドの実行状態が同じ状態となるように各プロセッサのスレッド実行開始タイミングを制御する（ステップＳ１４２、Ｓ１４６）。また、バリア開始（ステップＳ１１）の直後に、各プロセッサの電力モード判定（ステップＳ１４１）を行う。そして、プロセッサの電力モードが既にスリープモードに移行されている場合には、そのスリープモードを継続させ、プロセッサの電力モードが通常動作モードのままである場合には、通常動作モードを継続させる。これにより、２つのプログラムブロックに跨ったスリープ制御を実現することができる。その結果、従来技術に比べて、スリープモードへの移行と通常動作モードへの復旧の回数を減らすことができ、更なる省電力化が可能となる。
【０１０５】
なお、図８のステップＳ１３では、予測情報生成部１１３が、履歴情報格納部１１２からバリア識別情報ＢＩＤ−ｍと関連付けられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを読み出すとしたが、これに限定されない。図１０に示したように、同じ並列プログラムブロックがループ実行される場合には、次回に実行する並列プログラムブロック（ｍ＋１）を事前に把握できる。よってこの場合、予測情報生成部１１３は、バリア識別情報ＢＩＤ−ｍ＋１と関連づけられたスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎも同時に読み出すとよい。そして、電力モード制御部１３１は、入力されたバリア識別情報ＢＩＤ−ｍのスレッド非実行予測時間ＰＴＮＰＴ−ｎと、バリア識別情報ＢＩＤ−ｍ＋１のスレッド非実行予測時間ＰＴＮＰＴ−ｎとの和に従って、プロセッサＰ−ｎの電力モードを設定する。これにより、現在実行中の並列プログラムブロックにおいて、２つのスレッド非実行予測時間の和に応じたスリープモードへの移行を実現することができる。その結果、スリープモードをより深いモードに設定することができ、更なる省電力化が可能となる。
【０１０６】
なお、実行するプログラムブロックが逐次プログラムブロックの場合、同時に実行するスレッド数がプロセッサ数未満となる。この場合、スレッドの割り当てのないプロセッサが存在することになる。スレッドの割り当てのないプロセッサについては、電力モード判定でスリープ判定された場合（ステップＳ１４１でＹｅｓ）、スリープ復旧制御（ステップＳ１４５）では何も行わずに、即座にバリア到達させ（ステップＳ１４７でＹｅｓ）、スリープモードを継続させる。一方、電力モード判定でスリープ判定されない場合（ステップＳ１４１でＮｏ）も、即座にバリア到達させ（ステップＳ１４３でＹｅｓ）、スリープ移行制御（ステップＳ１４４）を行う。これにより、スレッドの割り当てのないプロセッサは、電力モード判定に関わらず、バリア開始後、即座にバリア到達することになる。このため、バリア到達時間がほぼ"０"となり、式（１）、（２）の関係からスレッド非実行時間がバリア成立時間と同等に大きな値となる。その結果、次回以降に上記逐次プログラムブロックを実行する場合、スレッド非実行予想時間が大きくなるので、プロセッサがスリープ移行制御（ステップＳ１４４）でより深いスリープモードに移行することが期待できる。
【０１０７】
＜実施の形態１の変形例１＞
図５に示したように、実施の形態１において、履歴情報格納部１１２は、バリア識別情報ＢＩＤ毎にスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを格納していた。このため、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置１の回路規模が増大する可能性があった。そこで、本変形例１では、履歴情報格納部１１２に格納されるデータ量を削減し、マルチプロセッサ制御装置１の回路規模の増大を抑制することを目的とする。
【０１０８】
＜構成＞
図１２は、本変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例１に係るマルチプロセッサシステムは、図３に示した構成に対し、マルチプロセッサ制御装置１がマルチプロセッサ制御装置１ａに入れ代わり、マルチプロセッサ制御装置１ａが予測情報取得部１１ａ、タイマ１２、及び電力制御部１３ａにより構成される点のみ異なる。以下、異なる点を中心に説明する。
【０１０９】
予測情報取得部１１ａは、プログラムブロック毎に予測情報を１つずつ取得し、取得した予測情報を電力制御部１３ａへ出力する。以下、図１３を参照して、予測情報取得部１１ａの具体的な構成について説明する。図１３は、予測情報取得部１１ａの具体的な構成例を示す図である。予測情報取得部１１ａは、バリア監視部１１１ａ、履歴情報格納部１１２ａ、及び予測情報生成部１１３ａにより構成される。
【０１１０】
バリア監視部１１１ａは、算出したスレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎの統計値（例えば平均値）であるスレッド非実行時間ＴＮＰＴをさらに算出し、履歴情報格納部１１２ａへ出力する点で、上述したバリア監視部１１１と異なる。またバリア監視部１１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部１１２ａへ出力する点でも、上述したバリア監視部１１１と異なる。ここでは、バリア監視部１１１ａは、プロセッサ識別情報ＰＩＤ−ｎを出力するものとする。ｎは、プロセッサを特定する番号である。その他については、バリア監視部１１１と同様である。
【０１１１】
履歴情報格納部１１２ａは、入力されたスレッド非実行時間ＴＮＰＴを、図１４に示す履歴テーブルに格納する。図１４は、履歴情報格納部１１２ａ内の履歴テーブルを示す図である。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたプロセッサ識別情報ＰＩＤ−ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部１１２ａは、バリア監視部１１１ａから入力されたスレッド非実行時間ＴＮＰＴを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのスレッド非実行時間ＴＮＰＴとを、関連づけして格納する。その他については、履歴情報格納部１１２と同様である。
【０１１２】
予測情報生成部１１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部１１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎとスレッド非実行時間ＴＮＰＴを読み出し、プロセッサ予測識別情報ＰＰＩＤ−ｎ、スレッド非実行予測時間ＰＴＮＰＴとして、電力制御部１３ａへ出力する。
【０１１３】
電力制御部１３ａは、予測情報取得部１１ａから入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図１５を参照して、電力制御部１３ａの具体的な構成について説明する。図１５は、電力制御部１３ａの具体的な構成例を示す図である。電力制御部１３ａは、電力モード制御部１３１ａ、クロック信号制御部１３２、及び電源電圧制御部１３３とにより構成される。電力制御部１３ａは、電力モード制御部１３１が電力モード制御部１３１ａに入れ代わった点で、上述した電力制御部１３と異なる。以下、異なる点を中心に説明する。
【０１１４】
電力モード制御部１３１ａは、入力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれに対して共通の電力モードを設定する。電力モード制御部１３１ａには、図７に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部１３１ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部１３１と同様である。
【０１１５】
＜動作＞
次に図１６を参照して、変形例１に係るマルチプロセッサ制御装置１ａの動作について説明する。図１６は、マルチプロセッサ制御装置１ａ全体の動作の流れを示すフローチャートである。図１６に示すステップＳ２１、Ｓ２２、Ｓ２５、Ｓ２６、Ｓ２９は、図８に示したステップＳ１１、Ｓ１２、Ｓ１５、Ｓ１６、Ｓ１９と同様の処理を行うので、それ以外のステップを中心に説明する。
【０１１６】
ステップＳ２２の次のステップＳ２３において、予測情報生成部１１３ａは、バリア監視部１１１ａからバリア開始信号が入力されると、履歴情報格納部１１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎとスレッド非実行時間ＴＮＰＴを読み出し、プロセッサ予測識別情報ＰＰＩＤ−ｎ、スレッド非実行予測時間ＰＴＮＰＴとして、電力制御部１３ａへ出力する（ステップＳ２３）。ステップＳ２３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ２４−１〜Ｓ２４−Ｎ）が行われる。この個別の制御については、後述する。
【０１１７】
ステップＳ２６の次のステップＳ２７において、バリア監視部１１１ａは、バリアタイミング信号とタイマ１２の計時に基づいて、スレッド非実行時間ＴＮＰＴを算出する。またステップＳ２７において、バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍとを履歴情報格納部１１２ａへ出力する。
【０１１８】
ステップＳ２７の次に、履歴情報格納部１１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のスレッド非実行時間ＴＮＰＴを、ステップＳ２７で出力されたスレッド非実行時間ＴＮＰＴに更新する（ステップＳ２８）。またステップＳ２８において、履歴情報格納部１１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するタグ部に格納された従前のプロセッサ識別情報ＰＩＤ−ｎを、ステップＳ２７で出力されたプロセッサ識別情報ＰＩＤ−ｎに更新する。
【０１１９】
図１７を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ２４−１〜Ｓ２４−Ｎ）について具体的に説明する。ステップＳ２４−１〜Ｓ２４−Ｎの制御の流れは同じであるため、図１７の例ではプロセッサＰ−ｎの制御の流れを記載している。なお、図１７に示すステップＳ２４１〜Ｓ２４３は、図９に示したステップＳ１４１〜Ｓ１４３と同様の処理を行い、ステップＳ２４５〜Ｓ２４８は、図９に示したステップＳ１４４〜Ｓ１４７と同様の処理を行うので、それ以外のステップを中心に説明する。
【０１２０】
ステップＳ２４３の次のステップＳ２４４において、電力モード制御部１３１ａは、制御対象のプロセッサがステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎであるか否かを判定する。つまり、電力モード制御部１３１ａは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合（ステップＳ２４４でＮｏ）、電力モード制御部１３１ａは、ステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する（ステップＳ２４５）。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合（ステップＳ２４４でＹｅｓ）、スリープ移行制御（ステップＳ２４５）がスキップされる。ここでは、制御対象のプロセッサは、Ｐ−ｎであり、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサもＰ−ｎである。よって、ステップＳ２４４では肯定の判定がなされることになる。
【０１２１】
次に、図１８に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置１ａの制御によってプログラムがどのように実行されるかについて説明する。図１８は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図１８では、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。図１８の制御前については、図１０の制御前と同様であるので、説明を省略する。
【０１２２】
図１８の制御後について説明する。履歴情報格納部１１２ａには、バリア識別情報ＢＩＤ−１について、スレッド非実行時間ＴＮＰＴ（ＢＷＴ−１〜ＢＷＴ−３の平均値）と、プロセッサ識別情報ＰＩＤ−１（プロセッサＰ−１を特定する情報）とが格納されているとする。
【０１２３】
プロセッサＰ−１は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア開始時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、１回目のバリア成立を迎える。これは、１回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。
【０１２４】
プロセッサＰ−２は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−２は、１回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−２は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−２については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、１回目のバリア成立を迎える。
【０１２５】
プロセッサＰ−３は、１回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−３は、１回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−３は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−３については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、１回目のバリア成立を迎える。
【０１２６】
１回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１のままとなる。
【０１２７】
プロセッサＰ−１は、２回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、１回目のバリア成立時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、２回目のバリア成立を迎える。これは、２回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。
【０１２８】
プロセッサＰ−２は、２回目のバリア開始（ステップＳ２１）してから、２回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴが経過するまで、スリープモードＳＬ（ＰＴＮＰＴ）を継続する。スレッド非実行予測時間ＰＴＮＰＴが経過すると、プロセッサＰ−２は、通常動作モードへ復旧し（ステップＳ２４６）、スレッドの実行を開始する（ステップＳ２４７）。図１８の例では、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４８でＹｅｓ）同時に、プロセッサＰ−２は、２回目のバリア成立を迎える。
【０１２９】
プロセッサＰ−３は、２回目のバリア開始（ステップＳ２１）してから、２回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴが経過するまで、スリープモードＳＬ（ＰＴＮＰＴ）を継続する。スレッド非実行予測時間ＰＴＮＰＴが経過すると、プロセッサＰ−３は、通常動作モードへ復旧し（ステップＳ２４６）、スレッドの実行を開始する（ステップＳ２４７）。図１８の例では、プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４８でＹｅｓ）、プロセッサＰ−３は、２回目のバリア成立までスピンウェイト（ＳＷ）状態でバリア待ちとなる。
【０１３０】
２回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１のままとなる。
【０１３１】
プロセッサＰ−１は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。これは、プロセッサＰ−１の電力モードは、２回目のバリア成立時、通常動作モードであるため、ステップＳ２４１でＮｏと判定されるからである。プロセッサＰ−１のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−１は、スリープモードに移行せず通常動作モードを維持しながら、３回目のバリア成立を迎える。これは、３回目のステップＳ２３で出力されたプロセッサ予測識別情報ＰＰＩＤ−１がプロセッサＰ−１を特定しており、ステップＳ２４４の判定がＹｅｓとなってステップＳ２４５のスリープ移行制御がスキップされるからである。
【０１３２】
プロセッサＰ−２は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−２は、３回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−２は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−２については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−２は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、３回目のバリア成立を迎える。
【０１３３】
プロセッサＰ−３は、３回目のバリア開始（ステップＳ２１）とほぼ同時にスレッドの実行を開始する（ステップＳ２４２）。プロセッサＰ−３のスレッドがバリア到達すると（ステップＳ２４３でＹｅｓ）、プロセッサＰ−３は、３回目のステップＳ２３で出力されたスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードＳＬ（ＰＴＮＰＴ）に移行する（ステップＳ２４５）。なお、プロセッサＰ−３は、プロセッサ予測識別情報ＰＰＩＤ−１で特定されるプロセッサＰ−１ではない。このため、プロセッサＰ−３については、ステップＳ２４４の判定がＮｏとなってステップＳ２４５のスリープ移行制御が行われる。その後、プロセッサＰ−３は、スリープモードＳＬ（ＰＴＮＰＴ）を維持しながら、３回目のバリア成立を迎える。
【０１３４】
３回目のバリア成立後、スレッド非実行時間ＴＮＰＴが、ＴＳＴ−１〜ＴＳＴ−Ｎ、ＢＷＴ−１〜ＢＷＴ−Ｎの平均値となるように、履歴情報格納部１１２ａの履歴情報が更新される（ステップＳ２８）。また、プロセッサＰ−１が最後にバリア到達するので、履歴情報格納部１１２ａのプロセッサ識別情報は、ＰＩＤ−１となる。
【０１３５】
以上のように、本変形例１によれば、履歴情報格納部１１２ａには、１つのスレッド非実行時間ＴＮＰＴのみが格納される。このため、履歴情報格納部１１２ａの記憶容量を削減することができ、マルチプロセッサ制御装置１ａの回路規模の増大を抑制することができる。
【０１３６】
なお、上述では、バリア監視部１１１ａが、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎの平均値を算出するとしたがこれに限定されない。バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎのうち、値が"０"となるスレッド非実行時間を除いて平均値を算出してもよい。また、バリア監視部１１１ａは、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎのうち、最小となるスレッド非実行時間を算出してもよいし、最大となるスレッド非実行時間を算出してもよい。
【０１３７】
なお、上述では、バリア監視部１１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部１１２ａへ出力していたが、これに限定されない。バリア監視部１１１ａは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報ＰＩＤとしてもよい。
【０１３８】
＜実施の形態１の変形例２＞
実施の形態１においては、各プロセッサ毎の個別制御を図９に示すようなフローで行っていた。しかしながら、図１１に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
【０１３９】
本変形例２におけるマルチプロセッサ制御装置は、図３〜図６、図８、図９に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図９のフローのみ異なる。以下、異なる点を中心に説明する。
【０１４０】
＜動作＞
図１９を参照して、本変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ１４−１〜Ｓ１４−Ｎ）について具体的に説明する。ステップＳ１４−１〜Ｓ１４−Ｎの制御の流れは同じであるため、図１９の例ではプロセッサＰ−ｎの制御の流れを記載している。図１９に示すステップＳ３４１〜Ｓ３４４は、図９に示すステップＳ１４１〜Ｓ１４４と同様の処理を行い、ステップＳ３４７〜Ｓ３４９は、図９に示すステップＳ１４５〜Ｓ１４７と同様の処理を行うので、それ以外のステップを中心に説明する。
【０１４１】
ステップＳ３４１においてプロセッサＰ−ｎがスリープモードであると判定した場合、電力モード制御部１３１は、図８のステップＳ１３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する（ステップＳ３４５）。電力モード制御部１３１は、より深いスリープモードに移行可能と判定した場合（ステップＳ３４５でＹｅｓ）、プロセッサＰ−ｎの電力モードを、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたより深いスリープモードへ移行させる（ステップＳ３４６）。一方、電力モード制御部１３１は、より深いスリープモードに移行不可能と判定した場合（ステップＳ３４５でＮｏ）、スリープ間移行制御（ステップＳ３４６）をスキップする。
【０１４２】
例えば、現在のスリープモードが図７のＳｔａｎｄｂｙモードであり、今回取得したスレッド非実行予測時間ＰＴＮＰＴ−ｎが図７の閾値Ｔｓｄより大きい場合、ステップＳ３４５ではＳｈｕｔｄｏｗｎモードに移行可能と判定され、ステップＳ３４６ではＳｔａｎｂｙモードからＳｈｕｔｄｏｗｎモードへのスリープ間移行制御が行われる。一方、現在のスリープモードが図７のＳｈｕｔｄｏｗｎモードであり、取得したスレッド非実行予測時間ＰＴＮＰＴ−ｎが図７の閾値Ｔｓｂ程度である場合、ステップＳ３４５ではより深いスリープモードには移行不可能と判定され、ステップＳ３４６の処理がスキップされる。
【０１４３】
図１１の制御後では、プロセッサＰ−１は、３回目のバリア開始時、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続している。しかし、３回目のバリア開始時に取得するスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）は、２回目のバリア開始時に取得したスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）よりも大きい。従って、本変形例２を適用すれば、電力モード制御部１３１は、３回目のバリア開始時、プロセッサＰ−１の電力モードをより深いスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−１）に移行させることができる。
【０１４４】
以上のように、本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
【０１４５】
＜実施の形態２＞
実施の形態１においては、バリア待ち状態のプロセッサを非動作のスリープモードとすることで、省電力化を実現させていた。つまり、実施の形態１においては、動作中のプロセッサについての省電力化については考慮されていなかった。そこで、実施の形態２においては、動作中のプロセッサへ供給するクロック周波数や電源電圧を予測情報に応じて動的にスケーリングさせるＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  ａｎｄ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ）制御技術を新たに適用することを考える。このＤＶＦＳ制御技術は、米Ｉｎｔｅｌ社のＳｐｅｅｄＳｔｅｐ（登録商標）や米ＡＭＤ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ）社のＰｏｗｅｒＮｏｗ！（登録商標）等のような技術で既に実用化されている。実施の形態２では、この実用化されたＤＶＦＳ技術と同様の制御を行う。
【０１４６】
実施の形態２においては、予測情報として、スレッド非実行予測時間ＰＴＮＰＴの他に、バリア成立時間ＢＥＴの予測時間であるバリア成立予測時間ＰＢＥＴ（Ｐｒｅｄｉｃｔｉｖｅ  Ｂａｒｒｉｅｒ  Ｅｓｔａｂｌｉｓｈ  Ｔｉｍｅ）を用いる点で実施の形態１と異なる。また実施の形態２においては、バリア開始時にスリープモードを継続しない場合に、プロセッサの動作を、スレッド非実行予測時間ＰＴＮＰＴとバリア成立予測時間ＰＢＥＴの比率に応じた低速動作とするようにＤＶＦＳ制御を行うか、あるいは、実施の形態１のようにスレッド非実行予測時間ＰＴＮＰＴに応じたスリープモードに移行させるか、省電力効果が大きい方（つまり、プロセッサで消費される電力が小さい方）を選択的に適用する。これにより、更なる省電力化を実現する。
【０１４７】
＜構成＞
図２０は、実施の形態２に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。実施の形態２に係るマルチプロセッサシステムは、図３に示した構成に対し、マルチプロセッサ制御装置１がマルチプロセッサ制御装置６に入れ代わり、マルチプロセッサ制御装置６が予測情報取得部６１、タイマ１２、及び電力制御部６３により構成される点のみ異なる。以下、異なる点を中心に説明する。
【０１４８】
予測情報取得部６１は、プロセッサＰ−１〜Ｐ−Ｎそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部６３へ出力する。本実施形態では、予測情報として、スレッド非実行予測時間ＰＴＮＰＴと、バリア成立予測時間ＰＢＥＴとを用いる。以下、図２１を参照して、予測情報取得部６１の具体的な構成について説明する。図２１は、予測情報取得部６１の具体的な構成例を示す図である。予測情報取得部６１は、バリア監視部６１１、履歴情報格納部６１２、及び予測情報生成部６１３により構成される。
【０１４９】
バリア監視部６１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎのみを履歴情報格納部６１２へ出力する点で、実施の形態１のバリア監視部１１１とは異なる。その他については、バリア監視部１１１と同様である。
【０１５０】
履歴情報格納部６１２は、入力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、図２２に示す履歴テーブルに格納する。図２２は、履歴情報格納部６１２内の履歴テーブルを示す図である。履歴情報格納部６１２は、バリア監視部６１１から入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部６１２は、バリア監視部６１１から入力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。履歴情報格納部６１２は、バリア監視部６１１から入力されたスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ及びスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎとを、関連づけして格納する。なお、その他、フラグ等については、実施の形態１の履歴情報格納部１１２と同様である。
【０１５１】
予測情報生成部６１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部６１２からバリア識別情報ＢＩＤ−ｍと関連付けられたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを読み出す。予測情報生成部６１３は、読み出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大となるバリア到達時間をバリア成立予測時間ＰＢＥＴとして算出する。また予測情報生成部６１３は、読み出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを式（１）及び式（２）に代入することにより、スレッド非実行時間ＴＮＰＴ−１〜ＴＮＰＴ−Ｎを、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎとして算出する。予測情報生成部６１３は、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを電力制御部６３へ出力する。
【０１５２】
電力制御部６３は、予測情報取得部６１から入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図２３を参照して、電力制御部６３の具体的な構成について説明する。図２３は、電力制御部６３の具体的な構成例を示す図である。電力制御部６３は、電力モード制御部６３１、クロック信号制御部６３２、及び電源電圧制御部６３３とにより構成される。
【０１５３】
電力モード制御部６３１は、図２４に示すように、スリープ移行制御に加えて、ＤＶＦＳ制御を適用した低速動作モードへの移行制御をさらに行う点で、実施の形態１の電力モード制御部１３１と異なる。図２４は、電力モード制御部６３１が設定する電力モードを示す図である。以下、異なる点を中心に説明する。
【０１５４】
電力モード制御部６３１は、入力されたバリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎに基づいて、ＤＶＦＳ制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部６３１は、省電力効果が大きいと判定した制御を選択する。ここで、ＤＶＦＳ制御を選択した場合、電力モード制御部６３１は、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを式（３）に代入することによって、スレッド非実行時間が"０"となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。なお、式（３）では、プロセッサＰ−ｎを低速動作させるためのクロック周波数を低速クロック周波数Ｆｓｌｏｗ−ｎとし、プロセッサＰ−ｎの通常動作時のクロック周波数を基準クロック周波数Ｆｂａｓｅとしている。
【０１５５】
（低速クロック周波数Ｆｓｌｏｗ−ｎ）
＝（基準クロック周波数Ｆｂａｓｅ）×（低速動作率）
＝（基準クロック周波数Ｆｂａｓｅ）×（１−（スレッド非実行予測時間ＰＴＮＰＴ−ｎ）／（バリア成立予測時間ＰＢＥＴ））      ・・・（３）
【０１５６】
クロック信号制御部６３２は、電力モード制御部６３１で低速動作モードが選択された場合、制御信号ＣＣＴＲＬ−ｎに従って、プロセッサＰ−ｎへ供給するクロック信号ＣＬＫ−ｎのクロック周波数を、低速クロック周波数Ｆｓｌｏｗ−ｎに変更する。電源電圧制御部６３３は、低速動作を維持可能な範囲で降圧した電源電圧ＶＤＤ−ｎを、プロセッサＰ−ｎへ供給する。
【０１５７】
＜動作＞
次に図２５を参照して、実施の形態２に係るマルチプロセッサ制御装置６の動作について説明する。図２５は、マルチプロセッサ制御装置６全体の動作の流れを示すフローチャートである。
【０１５８】
図２５において、バリア監視部６１１は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部６１３及び電力制御部６３へ出力する（ステップＳ４１）。またステップＳ４１において、バリア監視部６１１は、バリア識別情報ＢＩＤ−ｍを予測情報生成部６１３及び電力制御部６３へ出力する。ステップＳ４１の次に、電力モード制御部６３１は、バリア監視部６１１からバリア開始信号が入力されると、共有メモリバス２を介して主記憶装置３内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ１２の計時を開始させる（ステップＳ４２）。ステップＳ４２の次に、予測情報生成部６１３は、バリア監視部６１１からバリア開始信号が入力されると、履歴情報格納部６１２からバリア識別情報ＢＩＤ−ｍと関連付けられたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを読み出し、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴ−１〜ＰＴＮＰＴ−Ｎを算出して電力制御部６３へ出力する（ステップＳ４３）。ステップＳ４３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）が行われる。この個別の制御については、後述する。
【０１５９】
ステップＳ４５において、電力モード制御部６３１は、バリア監視部６１１からのバリア成立信号に基づいて、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部６３１は、共有メモリバス２を介して主記憶装置３のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部６１１からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部６３１は、タイマ１２の計時を終了させ、リセットさせる（ステップＳ４６）。
【０１６０】
ステップＳ４６の次に、バリア監視部６１１は、バリアタイミング信号とタイマ１２の計時に基づいて、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを算出する（ステップＳ４７）。またステップＳ４７において、バリア監視部６１１は、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、バリア識別情報ＢＩＤ−ｍとともに履歴情報格納部６１２へ出力する。
【０１６１】
ステップＳ４７の次に、履歴情報格納部６１２は、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前のバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎを、ステップＳ４７で出力されたバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎ、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎに更新する（ステップＳ４８）。
【０１６２】
ステップＳ４８の次に、バリア監視部６１１は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する（ステップＳ４９）。現在実行中のプログラムブロックが最後のプログラムブロックである場合（ステップＳ４９でＹｅｓ）、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合（ステップＳ４９でＮｏ）、処理はステップＳ４１へ戻り、次のプログラムブロックについての動作が行われる。
【０１６３】
図２６を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）について具体的に説明する。ステップＳ４４−１〜Ｓ４４−Ｎの制御の流れは同じであるため、図２６の例ではプロセッサＰ−ｎの制御の流れを記載している。
【０１６４】
図２６において、電力モード制御部６３１は、自身が出力する制御信号ＰＣＴＲＬ−ｎを参照して、プロセッサＰ−ｎの現在の電力モードがスリープモードであるか否かを判定する（ステップＳ４４１）。
【０１６５】
プロセッサＰ−ｎがスリープモードではないと判定した場合（ステップＳ４４１でＮｏ）、電力モード制御部６３１は、プロセッサＰ−ｎの電力モードを、式（３）を用いて算出した低速クロック周波数Ｆｓｌｏｗ−ｎで動作する低速動作モードに移行させる場合と、実施の形態１と同様にスレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードに移行させる場合とで、消費電力がより小さくなることが見込まれる方を選択する（ステップＳ４４２）。
【０１６６】
低速動作モードに移行させる場合（ステップＳ４４２でＹｅｓ）、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎに低速動作モードによるスレッドの実行を開始させる（ステップＳ４４６）。具体的には、電力モード制御部６３１は、設定した低速動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、低速動作モードによるスレッドの実行を開始する。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ４４７）。スレッドがバリア到達したと判定した場合（ステップＳ４４７でＹｅｓ）、処理は図２５に示すステップＳ４５へ進む。プロセッサＰ−ｎは、スレッド非実行時間が"０"となるように低速動作する。このため、動作がステップＳ４４７からステップＳ４５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。
【０１６７】
なお、低速動作モードの場合、バリア到達時間ＢＡＴ−ｎは低速動作させた場合の値を示すので、通常動作させた場合の値に戻して履歴情報格納部６１２へ格納する必要がある。このため、図２５のステップＳ４７において、バリア監視部６１１は、低速動作モードでのバリア到達時間ＢＡＴ−ｎを式（３）の低速動作率で除した値を算出する。
【０１６８】
なお、全てのプロセッサが低速動作モードに移行した場合、あるいは他のプロセッサがバリア到達して低速動作モードのプロセッサのみがスレッド実行中の場合、低速動作モードから通常動作モードに復旧させる制御を行ってもよい。これにより、バリア成立時間を短縮させることができる。
【０１６９】
一方、低速動作モードに移行させない場合（ステップＳ４４２でＮｏ）、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ４４３）。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ４４４）。スレッドがバリア到達したと判定した場合（ステップＳ４４４でＹｅｓ）、電力モード制御部６３１は、スリープ移行制御を行う。具体的には、電力モード制御部６３１は、ステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに従って、移行させるべきスリープモードを設定する。電力モード制御部６３１は、設定したスリープモードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたスリープモードでバリア待ちになる。
【０１７０】
また、プロセッサＰ−ｎがスリープモードであると判定した場合（ステップＳ４４１でＹｅｓ）、電力モード制御部６３１は、タイマ１２を監視して、ステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎが経過するのを待ってから、通常動作モードへの復旧制御を行う（ステップＳ４４８）。具体的には、電力モード制御部６３１は、タイマ１２の計時がステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎを経過したとき、通常動作モードを示す制御信号ＰＣＴＲＬ−ｎ、ＣＣＴＲＬ−ｎ、ＶＣＴＲＬ−ｎを、プロセッサＰ−ｎ、クロック信号制御部６３２、電源電圧制御部６３３へそれぞれ出力する。これにより、プロセッサＰ−ｎは、スリープモードから通常動作モードへ復旧する。このように、ステップＳ４４１及びステップＳ４４８の動作により、プロセッサＰ−ｎが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープモードが継続することになる。
【０１７１】
ステップＳ４４８の次に、電力モード制御部６３１は、制御信号ＰＣＴＲＬ−ｎを用いて、プロセッサＰ−ｎにスレッドの実行を即座に開始させる（ステップＳ４４９）。電力モード制御部６３１は、バリア監視部６１１からのバリア到達信号に基づき、プロセッサＰ−ｎのスレッドがバリア到達したか否かを判定する（ステップＳ４５０）。スレッドがバリア到達したと判定した場合（ステップＳ４５０でＹｅｓ）、処理は図２５に示すステップＳ４５へ進む。プロセッサＰ−ｎは、スレッド実行前に既にスレッド非実行予測時間ＰＴＮＰＴ−ｎだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップＳ４５０からステップＳ４５へ進むことにより、プロセッサＰ−ｎは、スピンウェイトのような状態でバリア待ちとなる。
【０１７２】
次に、図２７及び図２８に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置６の制御によってプログラムがどのように実行されるかについて説明する。
【０１７３】
図２７は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図２７では、ループ実行される並列プログラムブロックを、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックとしている。また、並列プログラムブロックを３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、１回目のバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。また、プロセッサＰ−２の電力モードを低速動作モードに設定するものとする。また、図２７の制御前については、図１０の制御前と同様であるため、説明を省略する。また、図２７の制御後は、図１０の制御後と比べて、プロセッサＰ−２に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
【０１７４】
プロセッサＰ−２は、１回目のバリア開始時（ステップＳ４１）通常動作モードであるため、ステップＳ４４１ではＮｏと判定される。その後、プロセッサＰ−２は、ステップＳ４４２でＹｅｓと判定され、スレッド非実行予測時間ＰＴＮＰＴ−２（＝ＢＷＴ−２）とバリア成立予測時間ＰＢＥＴ（＝ＢＥＴ）とに基づいて設定された低速動作モードによるスレッドの実行を開始する（ステップＳ４４６）。その後、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ４４７でＹｅｓ）、プロセッサＰ−２は、通常動作モードを維持しながら、１回目のバリア成立を迎える。なお、プロセッサＰ−２は、スレッド非実行時間が"０"となるように低速動作する。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。
【０１７５】
１回目のバリア成立後、バリア到達時間ＢＡＴ−２が式（３）の低速動作率で除算され、除算された結果に基づき履歴情報格納部６１２が更新される（ステップＳ４８）。
【０１７６】
２回目のバリア開始以降のプロセッサＰ−２の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
【０１７７】
図２８は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図２８では、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−２で特定される並列プログラムブロックと、バリア識別情報ＢＩＤ−３で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ３つのスレッドに分割しており、分割された３つのスレッドそれぞれは、プロセッサＰ−１〜Ｐ−３に割り当てられている。また、バリア識別情報ＢＩＤ−１で特定される並列プログラムブロックのバリア開始時、全てのプロセッサＰ−１〜Ｐ−３の電力モードが通常動作モードであるとする。また、プロセッサＰ−２の電力モードを低速動作モードに設定するものとする。また、図２８の制御前については、図１１の制御前と同様であるため、説明を省略する。また、図２８の制御後は、図１１の制御後と比べて、プロセッサＰ−２に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
【０１７８】
プロセッサＰ−２は、１回目のバリア開始時（ステップＳ４１）通常動作モードであるため、ステップＳ４４１ではＮｏと判定される。その後、プロセッサＰ−２は、ステップＳ４４２でＹｅｓと判定され、スレッド非実行予測時間（ＢＩＤ−１：ＰＴＮＰＴ−２）（＝ＢＩＤ−１：ＢＷＴ−２）と、バリア成立予測時間ＰＢＥＴ（＝ＢＥＴ−１）とに基づいて設定された低速動作モードによるスレッドの実行を開始する（ステップＳ４４６）。その後、プロセッサＰ−２のスレッドがバリア到達すると（ステップＳ４４７でＹｅｓ）、プロセッサＰ−２は、通常動作モードを維持しながら、１回目のバリア成立を迎える。なお、プロセッサＰ−２は、スレッド非実行時間が"０"となるように低速動作する。このため、プロセッサＰ−２のスレッドがバリア到達すると同時に、１回目のバリア成立が起こる。
【０１７９】
１回目のバリア成立後、バリア到達時間（ＢＩＤ−１：ＢＡＴ−２）が式（３）の低速動作率で除算され、除算された結果に基づき履歴情報格納部６１２が更新される（ステップＳ４８）。
【０１８０】
２回目のバリア開始以降のプロセッサＰ−２の実行状態については、１回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
【０１８１】
以上のように、実施の形態２によれば、実施の形態１に対してＤＶＦＳ制御が追加されている。これにより、更なる省電力化を実現する。
【０１８２】
＜実施の形態２の変形例１＞
図２２に示したように、実施の形態２において、履歴情報格納部６１２は、バリア識別情報ＢＩＤ毎にバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎとスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎとを格納していた。このため、実施の形態１と同様、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置６の回路規模が増大する可能性があった。そこで、本変形例１では、履歴情報格納部６１２に格納されるデータ量を削減し、マルチプロセッサ制御装置６の回路規模の増大を抑制することを目的とする。
【０１８３】
＜構成＞
図２９は、本変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例１に係るマルチプロセッサシステムは、図２０に示した構成に対し、マルチプロセッサ制御装置６がマルチプロセッサ制御装置６ａに入れ代わり、マルチプロセッサ制御装置６ａが予測情報取得部６１ａ、タイマ１２、及び電力制御部６３ａにより構成される点のみ異なる。以下、異なる点を中心に説明する。
【０１８４】
予測情報取得部６１ａは、プログラムブロック毎に予測情報を２つずつ取得し、取得した予測情報を電力制御部６３ａへ出力する。以下、図３０を参照して、予測情報取得部６１ａの具体的な構成について説明する。図３０は、予測情報取得部６１ａの具体的な構成例を示す図である。予測情報取得部６１ａは、バリア監視部６１１ａ、履歴情報格納部６１２ａ、及び予測情報生成部６１３ａにより構成される。
【０１８５】
バリア監視部６１１ａは、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎの統計値（例えば平均値）であるバリア到達時間ＢＡＴをさらに算出し、履歴情報格納部６１２ａへ出力する。また、バリア監視部６１１ａは、算出したバリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大のバリア到達時間をバリア成立時間ＢＥＴとして算出し、履歴情報格納部６１２ａへ出力する。また、バリア監視部６１１ａは、算出したスレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎの統計値（例えば平均値）であるスレッド開始時間ＴＳＴをさらに算出し、履歴情報格納部６１２ａへ出力する。またバリア監視部６１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部６１２ａへ出力する。その他については、上述したバリア監視部６１１と同様である。
【０１８６】
履歴情報格納部６１２ａは、入力されたバリア成立時間ＢＥＴ、プロセッサ識別情報ＰＩＤ−ｎ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、図３１に示す履歴テーブルに格納する。図３１は、履歴情報格納部６１２ａ内の履歴テーブルを示す図である。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたバリア識別情報ＢＩＤ−ｍを、タグ部の任意のエントリに格納する。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたプロセッサ識別情報ＰＩＤ−ｎを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部６１２ａは、バリア監視部６１１ａから入力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、バリア識別情報ＢＩＤ−ｍが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報ＢＩＤ−ｍと、プロセッサ識別情報ＰＩＤ−ｎと、バリア識別情報ＢＩＤ−ｍで特定されるプログラムブロックのバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴとを、関連づけして格納する。その他については、履歴情報格納部６１２と同様である。
【０１８７】
予測情報生成部６１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、履歴情報格納部６１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎ、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを読み出す。予測情報生成部６１３ａは、読み出したバリア到達時間ＢＥＴをバリア成立予測時間ＰＢＥＴとして電力制御部６３ａへ出力する。予測情報生成部６１３ａは、読み出したプロセッサ識別情報ＰＩＤ−ｎをプロセッサ予測識別情報ＰＰＩＤ−ｎとして電力制御部６３ａへ出力する。また予測情報生成部６１３ａは、読み出したバリア到達時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを式（１）及び式（２）に代入することにより、スレッド非実行予測時間ＰＴＮＰＴを算出する。予測情報生成部６１３ａは、バリアタイミング信号ＢＴを参照して、バリア開始時又はバリア到達時に、スレッド非実行予測時間ＰＴＮＰＴを電力制御部６３ａへ出力する。
【０１８８】
電力制御部６３ａは、予測情報取得部６１ａから入力される予測情報に基づいて、プロセッサＰ−１〜Ｐ−Ｎそれぞれに供給する電源電圧及び／又はクロック信号を制御することで、プロセッサＰ−１〜Ｐ−Ｎそれぞれへの電力供給を制御する。以下、図３２を参照して、電力制御部６３ａの具体的な構成について説明する。図３２は、電力制御部６３ａの具体的な構成例を示す図である。電力制御部６３ａは、電力モード制御部６３１ａ、クロック信号制御部６３２、及び電源電圧制御部６３３とにより構成される。電力制御部６３ａは、電力モード制御部６３１が電力モード制御部６３１ａに入れ代わった点で、上述した電力制御部６３と異なる。以下、異なる点を中心に説明する。
【０１８９】
電力モード制御部６３１ａは、入力されたバリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴに基づいて、ＤＶＦＳ制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部６３１ａは、省電力効果が大きいと判定した制御を選択する。ここで、ＤＶＦＳ制御を選択した場合、電力モード制御部６３１ａは、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴを式（３）に代入することによって、スレッド非実行時間が"０"となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。また、電力モード制御部６３１ａには、図２４に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部６３１ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部６３１と同様である。
【０１９０】
＜動作＞
次に図３３を参照して、変形例１に係るマルチプロセッサ制御装置６ａの動作について説明する。図３３は、マルチプロセッサ制御装置６ａ全体の動作の流れを示すフローチャートである。図３３に示すステップＳ５１、Ｓ５２、Ｓ５５、Ｓ５６、Ｓ５９は、図２５に示したステップＳ４１、Ｓ４２、Ｓ４５、Ｓ４６、Ｓ４９と同様の処理を行うので、それ以外のステップを中心に説明する。
【０１９１】
ステップＳ５２の次のステップＳ５３において、予測情報生成部６１３ａは、バリア監視部６１１ａからバリア開始信号が入力されると、履歴情報格納部６１２ａからバリア識別情報ＢＩＤ−ｍと関連付けられたプロセッサ識別情報ＰＩＤ−ｎ、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを読み出す。そして、予測情報生成部６１３ａは、プロセッサ予測識別情報ＰＰＩＤ−ｎ、バリア成立予測時間ＰＢＥＴ、スレッド非実行予測時間ＰＴＮＰＴを、電力制御部６３ａへ出力する（ステップＳ５３）。ステップＳ５３の次に、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ５４−１〜Ｓ５４−Ｎ）が行われる。この個別の制御については、後述する。
【０１９２】
ステップＳ５６の次のステップＳ５７において、バリア監視部６１１ａは、バリアタイミング信号とタイマ１２の計時に基づいて、統計値であるバリア到達時間ＢＡＴ及びスレッド開始時間ＴＳＴと、バリア成立時間ＢＥＴとを算出する。またステップＳ５７において、バリア監視部６１１ａは、算出したバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを履歴情報格納部６１２ａへ出力する。
【０１９３】
ステップＳ５７の次に、履歴情報格納部６１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するデータ部に格納された従前の入力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴを、ステップＳ５７で出力されたバリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴに更新する（ステップＳ５８）。またステップＳ５８において、履歴情報格納部６１２ａは、入力されたバリア識別情報ＢＩＤ−ｍに対応するタグ部に格納された従前のプロセッサ識別情報ＰＩＤ−ｎを、ステップＳ５７で出力されたプロセッサ識別情報ＰＩＤ−ｎに更新する。
【０１９４】
図３４を参照して、プロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ５４−１〜Ｓ５４−Ｎ）について具体的に説明する。ステップＳ５４−１〜Ｓ５４−Ｎの制御の流れは同じであるため、図３４の例ではプロセッサＰ−ｎの制御の流れを記載している。なお、図３４に示すステップＳ５４１〜Ｓ５４４は、図２６に示したステップＳ４４１〜Ｓ４４４と同様の処理を行い、ステップＳ５４６〜Ｓ５５１は、図２６に示したステップＳ４４５〜Ｓ４５０と同様の処理を行うので、それ以外のステップを中心に説明する。
【０１９５】
ステップＳ５４４の次のステップＳ５４５において、電力モード制御部６３１ａは、制御対象のプロセッサがステップＳ５３で出力されたプロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサＰ−ｎであるか否かを判定する（ステップＳ５４５）。つまり、電力モード制御部６３１ａは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合（ステップＳ５４５でＮｏ）、電力モード制御部６３１ａは、ステップＳ５３で出力されたスレッド非実行予測時間ＰＴＮＰＴに従って、プロセッサＰ−１〜Ｐ−Ｎそれぞれの電力モードを設定する（ステップＳ５４６）。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合（ステップＳ５４５でＹｅｓ）、スリープ移行制御（ステップＳ５４６）がスキップされる。ここでは、制御対象のプロセッサは、Ｐ−ｎであり、プロセッサ予測識別情報ＰＰＩＤ−ｎで特定されるプロセッサもＰ−ｎである。よって、ステップＳ５４５では肯定の判定がなされることになる。
【０１９６】
以上のように、本変形例１によれば、履歴情報格納部６１２ａには、バリア成立時間ＢＥＴ、バリア到達時間ＢＡＴ、スレッド開始時間ＴＳＴが１つずつ格納される。このため、履歴情報格納部６１２ａの記憶容量を削減することができ、マルチプロセッサ制御装置６ａの回路規模の増大を抑制することができる。
【０１９７】
なお、上述では、バリア監視部６１１ａが、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎの平均値、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎの平均値を算出するとしたがこれに限定されない。バリア監視部６１１ａは、バリア到達時間ＢＡＴ−１〜ＢＡＴ−Ｎのうち、最大となるバリア到達時間を除いて平均値を算出してもよい。バリア監視部６１１ａは、スレッド開始時間ＴＳＴ−１〜ＴＳＴ−Ｎのうち、最小となるスレッド開始時間を除いて平均値を算出してもよい。
【０１９８】
なお、上述では、バリア監視部６１１ａは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報ＰＩＤを履歴情報格納部６１２ａへ出力していたが、これに限定されない。バリア監視部６１１ａは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報ＰＩＤとしてもよい。
【０１９９】
＜実施の形態２の変形例２＞
実施の形態２においては、各プロセッサ毎の個別制御を図２６に示すようなフローで行っていた。しかしながら、図２８に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
【０２００】
本変形例２におけるマルチプロセッサ制御装置は、図２０〜図２３、図２５、図２６に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図２６のフローのみ異なる。以下、異なる点を中心に説明する。
【０２０１】
＜動作＞
図３５を参照して、本変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御（ステップＳ４４−１〜Ｓ４４−Ｎ）について具体的に説明する。ステップＳ４４−１〜Ｓ４４−Ｎの制御の流れは同じであるため、図３５の例ではプロセッサＰ−ｎの制御の流れを記載している。図３５に示すステップＳ６４１〜Ｓ６４７は、図２６に示すステップＳ４４１〜Ｓ４４７と同様の処理を行い、ステップＳ６５０〜Ｓ６５２は、図２６に示すステップＳ４４８〜Ｓ４５０と同様の処理を行うので、それ以外のステップを中心に説明する。
【０２０２】
ステップＳ６４１においてプロセッサＰ−ｎがスリープモードであると判定した場合、電力モード制御部６３１は、図２５のステップＳ４３で出力されたスレッド非実行予測時間ＰＴＮＰＴ−ｎに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する（ステップＳ６４８）。電力モード制御部６３１は、より深いスリープモードに移行可能と判定した場合（ステップＳ６４８でＹｅｓ）、プロセッサＰ−ｎの電力モードを、スレッド非実行予測時間ＰＴＮＰＴ−ｎに応じたより深いスリープモードへ移行させる（ステップＳ６４９）。一方、電力モード制御部６３１は、より深いスリープモードに移行不可能と判定した場合（ステップＳ６４８でＮｏ）、スリープ間移行制御（ステップＳ６４９）をスキップする。
【０２０３】
例えば、図２８の制御後では、プロセッサＰ−１は、３回目のバリア開始時、スリープモードＳＬ（ＢＩＤ−２：ＰＴＮＰＴ−１）を継続している。しかし、３回目のバリア開始時に取得するスレッド非実行予測時間（ＢＩＤ−３：ＰＴＮＰＴ−１）は、２回目のバリア開始時に取得したスレッド非実行予測時間（ＢＩＤ−２：ＰＴＮＰＴ−１）よりも大きい。従って、本変形例２を適用すれば、電力モード制御部６３１は、３回目のバリア開始時、プロセッサＰ−１の電力モードをより深いスリープモードＳＬ（ＢＩＤ−３：ＰＴＮＰＴ−１）に移行させることができる。
【０２０４】
以上のように、本変形例２では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
【０２０５】
なお、上記実施の形態１、２では、共有記憶型のマルチプロセッサシステムの説明を行ったが、マルチプロセッサシステムには、私有記憶型も存在する。私有記憶型のマルチプロセッサシステムでは、各プロセッサに他のプロセッサから直接アクセスできない専用メモリがそれぞれ設けられている。専用メモリを有するプロセッサは、高速相互結合網で接続されている。なお、これらのプロセッサは、マルチプロセッサではなく、コンピュータが多数接続されたマルチコンピュータとして分類されることもある。このような私有記憶型のマルチプロセッサシステムは、共有記憶型のようにロック変数を直接用いることができないため、プロセッサ間の通信手段を用いたメッセージ交換によってバリア同期を実現する。しかしながら、本質的には通信手段が異なるのみであり、早期にバリア到達したスレッドは、最後のスレッドがバリア到達してバリア成立するまで待つ必要があるのは同様である。このため、私有記憶型のマルチプロセッサシステムにおいても、本発明のスリープ制御が適用可能である。また、ここでいうプロセッサは、プログラムカウンタを有するストアドプログラム方式のプロセッサに限定されない。通常動作モードと少なくとも１つのスリープモードを有すれば、応用分野に特化した専用の有限ステートマシンに従って動作する演算処理装置を、プロセッサの代わりに用いてもよい。
【０２０６】
また、上記実施の形態１、２のマルチプロセッサシステムは、典型的には、画像・音声等の再生装置に適用可能である。図３６は、実施の形態１のマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。例えば、ＭＰＥＧ規格に沿って符号化（エンコード）された画像・音声情報が、光ディスク９２やメモリカード９４に符号化ストリームデータとして格納されているとする。この場合、再生装置内のシステムＬＳＩは、共有メモリバス２、メモリコントローラ７及びＩＯインタフェース８経由で各ドライブ９１及び９３から読み込んだ符号化ストリームデータをＤＲＡＭで構成される主記憶装置３に展開する。プロセッサＰ−１は、符号化ストリームデータを共有メモリバス２及びメモリコントローラ７を経由して主記憶装置３から取得し、画像符号化ストリームと音声符号化ストリームとに分離する。プロセッサＰ−１は、共有メモリバス２を経由して、画像符号化ストリームをプロセッサＰ−２に、音声符号化ストリームをプロセッサＰ−３に通知する。プロセッサＰ−２は、画像符号化ストリームを復号化（デコード）し、プロセッサＰ−３は、音声符号化ストリームを復号化する。ここで、プロセッサＰ−１は、表示時間に応じてプロセッサＰ−２、Ｐ−３とバリア同期を取りながら、復号化された画像・音声情報を、テレビなどの表示装置に出力する。この際、プロセッサＰ−１〜Ｐ−３に割り当てたシステム処理、画像復号化処理、音声復号化処理の負荷は、一般的に均等にならない。このため、本発明におけるマルチプロセッサ制御装置１によってプロセッサＰ−１〜Ｐ−３を制御することで、消費電力削減が得られる。
【０２０７】
なお、上述では、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また集積回路化の手法は、システムＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。システムＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、システムＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりシステムＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
【産業上の利用可能性】
【０２０８】
本発明に係るマルチプロセッサ制御装置は、従来よりも大きな省電力効果を得ることが可能であり、消費電力が課題となる並列計算機システムなどにおいて利用することができる。
【図面の簡単な説明】
【０２０９】
【図１】プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図
【図２】プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図
【図３】実施の形態１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
【図４】予測情報取得部１１の具体的な構成例を示す図
【図５】履歴情報格納部１１２内の履歴テーブルを示す図
【図６】電力制御部１３の具体的な構成例を示す図
【図７】電力モード制御部１３１が設定する電力モードを示す図
【図８】マルチプロセッサ制御装置１全体の動作の流れを示すフローチャート
【図９】実施の形態１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図１０】同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
【図１１】異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図
【図１２】実施の形態１の変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
【図１３】予測情報取得部１１ａの具体的な構成例を示す図
【図１４】履歴情報格納部１１２ａ内の履歴テーブルを示す図
【図１５】電力制御部１３ａの具体的な構成例を示す図
【図１６】マルチプロセッサ制御装置１ａ全体の動作の流れを示すフローチャート
【図１７】実施の形態１の変形例１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図１８】同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
【図１９】実施の形態１の変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図２０】実施の形態２に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
【図２１】予測情報取得部６１の具体的な構成例を示す図
【図２２】履歴情報格納部６１２内の履歴テーブルを示す図
【図２３】電力制御部６３の具体的な構成例を示す図
【図２４】電力モード制御部６３１が設定する電力モードを示す図
【図２５】マルチプロセッサ制御装置６全体の動作の流れを示すフローチャート
【図２６】実施の形態２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図２７】同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
【図２８】異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図
【図２９】実施の形態２の変形例１に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
【図３０】予測情報取得部６１ａの具体的な構成例を示す図
【図３１】履歴情報格納部６１２ａ内の履歴テーブルを示す図
【図３２】電力制御部６３ａの具体的な構成例を示す図
【図３３】マルチプロセッサ制御装置６ａ全体の動作の流れを示すフローチャート
【図３４】実施の形態２の変形例１に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図３５】実施の形態２の変形例２に係るプロセッサＰ−１〜Ｐ−Ｎそれぞれ個別の制御の流れを示すフローチャート
【図３６】実施の形態１に係るマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図
【図３７】英ＡＲＭ社のＡＲＭプロセッサで用いられる電力モードを示した図
【符号の説明】
【０２１０】
１、１ａ、６、６ａ    マルチプロセッサ制御装置
２    共有メモリバス
３    主記憶装置
４    電源装置
５、５ａ    プログラム
７    メモリコントローラ
８    ＩＯインタフェイス
１１、１１ａ、６１、６１ａ    予測情報取得部
１１１、１１１ａ、６１１、６１１ａ    バリア監視部
１１２、１１２ａ、６１２、６１２ａ    履歴情報格納部
１１３、１１３ａ、６１３、６１３ａ    予測情報生成部
１２    タイマ
１３、１３ａ、６３、６３ａ    電力制御部
１３１、１３１ａ、６３１、６３１ａ    電力モード制御部
１３２、６３２    クロック信号制御部
１３３、６３３    電源電圧制御部
９１    光ディスクドライブ
９２    光ディスク
９３    メモリカードドライブ
９４    メモリカード
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御手段とを備える、マルチプロセッサ制御装置。
【請求項２】
前記電力制御手段は、前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第２プログラムブロックのバリア同期開始の前後で前記第１及び第２ブロックの実行状態が同じ状態となるように前記第１及び第２ブロックの実行開始タイミングを前記プロセッサ毎に制御するとともに、前記第２プログラムブロックのバリア同期開始の前後で前記第１及び第２ブロックを実行していないプロセッサがスリープ状態になり、前記第１及び第２ブロックを実行しているプロセッサが動作状態になるように前記複数のプロセッサへの電力供給を制御することを特徴とする、請求項１に記載のマルチプロセッサ制御装置。
【請求項３】
前記電力制御手段は、
前記プロセッサを通常動作状態にする電力を表す通常動作モードと、前記プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各前記プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、
各前記プロセッサへのクロック信号及び／又は電源電圧の供給を制御して、各前記プロセッサの電力モードを前記電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサに対して、前記第２プログラムブロックのバリア同期開始から前記第２非実行時間情報が表す時間だけ前記第２ブロックの実行開始タイミングを遅延させるとともに、前記第１ブロックの実行終了から前記第２ブロックの実行開始までの間の電力モードを、前記スリープモードに設定することを特徴とする、請求項２に記載のマルチプロセッサ制御装置。
【請求項４】
前記第２非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第２非実行時間であることを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項５】
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１ブロックの実行終了から前記第２ブロックの実行開始までの間、前記第１非実行時間情報が表す時間に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項６】
前記電力モード制御手段は、前記第２非実行時間情報が表す時間が前記第１非実行時間情報が表す時間よりも大きい場合、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間、前記第１非実行時間情報が表す時間に応じたスリープモードに設定し、前記第２プログラムブロックのバリア同期開始から前記第２ブロックの実行開始までの間、前記第２非実行時間情報が表す時間に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項７】
前記第１及び第２プログラムブロックは、同一のプログラムブロックであり、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの電力モードを、前記第１非実行時間情報が表す時間と前記第２非実行時間情報が表す時間との和に応じたスリープモードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項８】
前記第１非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第１非実行時間であり、
前記第２非実行時間情報は、前記第１プログラムブロックのバリア同期成立前に前記第１ブロックの実行を終了したプロセッサの前記第２非実行時間であることを特徴とする、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項９】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の統計時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の統計時間であることを特徴とする、請求項１から請求項３、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１０】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の平均時間であることを特徴とする、請求項９に記載のマルチプロセッサ制御装置。
【請求項１１】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間のうち最小の第１非実行時間を除いて算出された平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間のうち最小の第２非実行時間を除いて算出された平均時間であることを特徴とする、請求項９に記載のマルチプロセッサ制御装置。
【請求項１２】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間のうちの最小の第１非実行時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間のうちの最小の第１非実行時間であることを特徴とする、請求項１から請求項３、請求項５から請求項７のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１３】
前記電力モード制御手段には、さらに、前記プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、
前記電力モード制御手段は、
前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサに対して、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間の電力モードを前記第１非実行時間情報が表す時間に応じたスリープモードに設定した場合に前記プロセッサで消費される電力と、前記第１ブロックの実行終了から前記第１プログラムブロックのバリア同期成立までの間の電力モードを前記低速動作モードに設定した場合に前記プロセッサで消費される電力とを比較して、前記プロセッサの電力モードを前記プロセッサで消費される電力が少ない方の電力モードに設定し、
前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサに対して、前記第２ブロックの実行終了から前記第２プログラムブロックのバリア同期成立までの間の電力モードを前記第２非実行時間情報が表す時間に応じたスリープモードに設定した場合に前記プロセッサで消費される電力と、前記第２ブロックの実行終了から前記第２プログラムブロックのバリア同期成立までの間の電力モードを前記低速動作モードに設定した場合に前記プロセッサで消費される電力とを比較して、前記プロセッサの電力モードを前記プロセッサで消費される電力が少ない方の電力モードに設定することを特徴とする、請求項３に記載のマルチプロセッサ制御装置。
【請求項１４】
前記取得手段は、前記第１及び第２バリア成立時間をさらに取得しており、
前記電力モード制御手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードを前記低速動作モードに設定する場合、前記第１非実行時間情報が表す時間と前記第１バリア成立時間との比に応じた、前記通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第１周波数を算出し、算出した第１周波数を前記低速動作モードとして設定し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードを前記低速動作モードに設定する場合、前記第２非実行時間情報が表す時間と前記第２バリア成立時間との比に応じた、前記通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第２周波数を算出し、算出した第２周波数を前記低速動作モードとして設定し、
前記移行手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を前記第１周波数に設定し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を前記第２周波数に設定することを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１５】
前記電力モード制御手段は、各前記プロセッサの電力モードを全て前記低速動作モードに設定したとき、各前記プロセッサの電力モードを前記通常動作モードに設定し直すことを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１６】
前記取得手段は、前記第１プログラムブロックのバリア同期開始時に前記第１ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサが低速動作状態で前記第１ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが前記通常動作状態で前記第１ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を前記第１バリア成立時間から減算して前記第１非実行時間を取得し、前記第２プログラムブロックのバリア同期開始時に前記第２ブロックの実行を開始するプロセッサの電力モードが前記低速動作モードに設定された場合、当該プロセッサが低速動作状態で前記第２ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが前記通常動作状態で前記第２ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を前記第２バリア成立時間から減算して前記第２非実行時間を取得することを特徴とする、請求項１３に記載のマルチプロセッサ制御装置。
【請求項１７】
前記取得手段は、前記第１及び第２非実行時間情報を記憶しており、
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の統計時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の統計時間であることを特徴とする、請求項１３から請求項１６のいずれか１項に記載のマルチプロセッサ制御装置。
【請求項１８】
前記第１非実行時間情報は、前記プロセッサ毎に表された第１非実行時間の平均時間であり、
前記第２非実行時間情報は、前記プロセッサ毎に表された第２非実行時間の平均時間であることを特徴とする、請求項１７に記載のマルチプロセッサ制御装置。
【請求項１９】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得ステップと、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御ステップとを含む、制御方法。
【請求項２０】
プログラムに含まれる第１プログラムブロックを複数の第１ブロックに分割してバリア同期を行いながら各第１ブロックを並列実行した後、当該第１プログラムブロックに連続する第２プログラムブロックを複数の第２ブロックに分割してバリア同期を行いながら各第２ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、
前記第１プログラムブロックのバリア同期開始からバリア同期成立までの第１バリア成立時間のうち前記第１ブロックが実行されない時間を表す第１非実行時間であって前記プロセッサ毎に表された第１非実行時間に関する第１非実行時間情報と、前記第２プログラムブロックのバリア同期開始からバリア同期成立までの第２バリア成立時間のうち前記第２ブロックが実行されない時間を表す第２非実行時間であって前記プロセッサ毎に表された第２非実行時間に関する第２非実行時間情報とを取得する取得手段と、
前記取得手段において取得された前記第１及び第２非実行時間情報を用いて、前記第１及び第２プログラムブロックが連続して並列実行される間の前記複数のプロセッサへの電力供給を制御する電力制御手段とを備える、集積回路。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2008129786.tif 000040
【図２】
2008129786.tif 000041
【図３】
2008129786.tif 000042
【図４】
2008129786.tif 000043
【図５】
2008129786.tif 000044
【図６】
2008129786.tif 000045
【図７】
2008129786.tif 000046
【図８】
2008129786.tif 000047
【図９】
2008129786.tif 000048
【図１０】
2008129786.tif 000049
【図１１】
2008129786.tif 000050
【図１２】
2008129786.tif 000051
【図１３】
2008129786.tif 000052
【図１４】
2008129786.tif 000053
【図１５】
2008129786.tif 000054
【図１６】
2008129786.tif 000055
【図１７】
2008129786.tif 000056
【図１８】
2008129786.tif 000057
【図１９】
2008129786.tif 000058
【図２０】
2008129786.tif 000059
【図２１】
2008129786.tif 000060
【図２２】
2008129786.tif 000061
【図２３】
2008129786.tif 000062
【図２４】
2008129786.tif 000063
【図２５】
2008129786.tif 000064
【図２６】
2008129786.tif 000065
【図２７】
2008129786.tif 000066
【図２８】
2008129786.tif 000067
【図２９】
2008129786.tif 000068
【図３０】
2008129786.tif 000069
【図３１】
2008129786.tif 000070
【図３２】
2008129786.tif 000071
【図３３】
2008129786.tif 000072
【図３４】
2008129786.tif 000073
【図３５】
2008129786.tif 000074
【図３６】
2008129786.tif 000075
【図３７】
2008129786.tif 000076
【国際調査報告】
2008129786.tif 000077
2008129786.tif 000078
2008129786.tif 000079
2008129786.tif 000080