本発明は、マルチプロセッサ制御装置、その制御方法および集積回路に関し、より特定的には、複数のプロセッサの低消費電力化を実現するマルチプロセッサ制御装置、その制御方法および集積回路に関する。
複数のプロセッサそれぞれにプログラム内のスレッド(またはプロセス)を割り当てて、それらスレッドを並列的に実行するマルチプロセッサシステムでは、各スレッド間で共通に参照している変数の読み書き順序に矛盾が生じるのを防ぐため、全てのスレッドがスレッド毎に予め設定されたバリアポイントに到達するまで次の実行をブロックするバリア同期(Barrier Synchronization)を行っている。以下では、バリア同期を開始することをバリア開始、スレッドがバリアポイントに到達することをバリア到達、最後のスレッドがバリア到達することによりバリア同期が成立することをバリア成立、バリア到達したスレッドがバリア成立まで待機状態となることをバリア待ちと呼ぶこととする。
バリア同期を実現するマルチプロセッサシステムは、一般的に、複数のプロセッサが単一のアドレス空間を共有する共有記憶型の構成を有している。共有記憶型のマルチプロセッサシステムは、各プロセッサからアクセス可能な共有メモリバス上の主記憶装置に設けたロック変数を使用して、バリア同期を実現している。具体的には、まず、ロック変数を、並列実行を行う全プロセッサのスレッド数に設定しておく。プロセッサは、スレッドのバリア到達時にアトミック操作(共有メモリバスを占有してRead―Modified―Writeの一連の動作を行う操作)を行い、主記憶装置にアクセスしてロック変数を1つデクリメントさせる。その後、プロセッサは、バリア待ちとなる。バリア待ちのプロセッサは、他のプロセッサのアトミック操作によってロック変数が0になったかどうかを、ロック変数を繰り返しロードして判定し続ける。つまり、ロック変数が0になることはバリア成立を意味するので、プロセッサは、バリア成立まで、ロック変数のロードと判定を繰り返していることになる。このように、バリア待ちの間にロック変数のロードと判定を繰り返している状態を、スピンウェイト(Spin Waiting)状態と呼ぶ。
ここで、スピンウェイト状態のプロセッサは、本来割り当てられたスレッドを実行していないにもかかわらず、常に主記憶装置へのアクセスを伴った通常の動作状態になる。このため、スピンウェイト状態のプロセッサは、無駄な電力を消費していることになる。
そこで、このようなスピンウェイト状態のプロセッサを非動作状態にするスリープモードに移行させることにより、低消費電力化を実現する技術が提案されている。この技術では、論理回路へのクロック信号の供給を遮断するクロックゲーティング(Clock Gating)を行ったり、近年半導体プロセスの微細化に伴って増大しているリーク電力対策のためのスレッショルド電圧(Vth)の制御を行ったり、電源電圧(Vdd)の供給を遮断するパワーゲーティング(Power Gating)を行ったりして、スピンウェイト状態のプロセッサの電力モードをスリープモードに移行させている。例えば、英ARM社のARMプロセッサには、図37に示すように、プロセッサのとり得る複数の電力モードが設定されている。電力モードには、通常の動作状態のモード(通常動作モード)であるRunモードと、非動作状態のスリープモードである、Standbyモード、Dormantモード、及びShutdownモードとがある。Standbyモード、Dormantモード、及びShutdownモードは、プロセッサコア及びキャッシュメモリそれぞれに供給するクロック信号のON/OFFと電圧のON/OFFのさせ方が互いに異なっている。
ここで、Dormantモードは、パワーゲーティングを適用しているため、クロックゲーティングのみを適用したStandbyモードに比べて省電力効果が大きく、Standbyモードよりも深いスリープモードとなる。Shutdownモードは、キャッシュメモリに供給する電圧もOFFしているため、Dormantモードに比べて省電力効果が大きく、Dormantモードよりも深いスリープモードとなる。一方で、Dormantモードは、プロセッサコア内のレジスタ等の内部状態(コンテキスト)を、電圧OFF時にはプロセッサコアから外部メモリ等に退避させ、電圧ON時には外部メモリ等からプロセッサコアに復帰させる必要がある。また、プロセッサコアの電圧をONさせる場合、比較的長い安定化時間を要する。このため、Dormantモードは、Standbyモードに比べて、Runモードから移行する際、及びRunモードへ復旧する際の時間的なオーバーヘッドが大きい。Shutdownモードは、キャッシュメモリ内のコンテキストの退避・復帰や、キャッシュメモリの安定化時間も考慮する必要があるため、Dormantモードに比べて時間的なオーバーヘッドが大きい。このため、より省電力な(深い)スリープモードは、スリープモードを適用する時間が通常動作モードからの移行及び通常動作モードへの復旧に要する時間に比べて十分に長くなければ、適用できない。
そこで、より深いスリープモードを上記のようなバリア待ちのプロセッサに適用するには、バリア待ち時間を事前に見積もる必要がある。これを実現する従来技術として、バリア待ち時間を履歴によって予測し、予測したバリア待ち時間(バリア待ち予測時間)に応じてどの深さのスリープモードへ移行するかを決定する方法が提案されている(例えば、非特許文献1など)。具体的には、スレッドがバリア到達すると、当該スレッドを実行したプロセッサの電力モードを、通常動作モードからバリア待ち予想時間に応じたスリープモードに移行させる。その後、バリア成立するまでに電力モードがスリープモードから通常動作モードに復旧するように、バリア待ち予想時間から逆算したタイミングで通常動作モードへの復旧を開始する。このように、従来技術では、バリア待ち時間を履歴によって予測することで、より深いスリープモードをバリア待ちのプロセッサに適用させている。
ジェイ・リー(J.Li)、ジェイ・マルティネス(J.Martinez)、エム・ホアン(M.Huang)、「ザ スリフティ バリア: エナジ−アウェア シンクロナイゼイション イン シェアード−メモリ マルチプロセッサーズ(The Thrifty Barrier: Energy−Aware Synchronization in Shared−Memory Multiprocessors)」、イン プロシーディングス オブ ハイ−パフォーマンス コンピューター アーキテクチャ (エイチピーシーエー) ‘04,(In Proceedings of High−Performance Computer Architechture (HPCA) ‘04,)、アイトリプルイー コンピュータ ソサエティ ワシントン ディーシー ユーエスエー(IEEE Computer Society Washington, DC, USA)、米国、2004年、p14―23
しかしながら、上述したように、スリープモードへの移行及び通常動作モードへの復旧には時間的なオーバーヘッドが存在し、オーバーヘッドはスリープモードが深いほど大きい。さらに、上記従来技術では、スリープモードへの移行と通常動作モードへの復旧とを、1つのバリア同期毎に行っている。このため、上記従来技術では、スリープモードの適用時間に占めるオーバーヘッドの割合が大きく、実際の省電力効果は小さいという課題を有していた。
本発明は、上記の課題を解決するものであり、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することを目的とする。
本発明は、上記課題を解決するためになされた発明であり、本発明に係るマルチプロセッサ制御装置は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得手段と、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
なお、第1及び第2非実行時間情報は、例えば、後述する実施の形態におけるスレッド非実行予測時間に相当する情報である。また、第1ブロック及び第2ブロックは、例えば、後述する実施の形態におけるスレッド又はプロセスに相当するものである。
以上の構成によれば、電力制御手段は、2つの非実行時間情報を用いて、連続して並列実行される2つのプログラムブロックに跨った電力制御を行っている。これにより、1つの非実行時間情報を用いて、1つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来に対し、2つの非実行時間情報の用い方によっては各プロセッサについての更なる省電力化が可能となる。
好ましくは、電力制御手段は、取得手段において取得された第1及び第2非実行時間情報を用いて、第2プログラムブロックのバリア同期開始の前後で第1及び第2ブロックの実行状態が同じ状態となるように第1及び第2ブロックの実行開始タイミングをプロセッサ毎に制御するとともに、第2プログラムブロックのバリア同期開始の前後で第1及び第2ブロックを実行していないプロセッサがスリープ状態になり、第1及び第2ブロックを実行しているプロセッサが動作状態になるように複数のプロセッサへの電力供給を制御するとよい。この構成により、1つの非実行時間情報を用いて、1つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来と比べて、スリープ状態への移行と動作状態への復旧の回数を減らすことができるので、各プロセッサについての更なる省電力化が可能となる。
上記構成においてさらに、電力制御手段は、プロセッサを通常動作状態にする電力を表す通常動作モードと、プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、各プロセッサへのクロック信号及び/又は電源電圧の供給を制御して、各プロセッサの電力モードを電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサに対して、第2プログラムブロックのバリア同期開始から第2非実行時間情報が表す時間だけ第2ブロックの実行開始タイミングを遅延させるとともに、第1ブロックの実行終了から第2ブロックの実行開始までの間の電力モードを、スリープモードに設定するとよい。なお、移行手段は、例えば、後述する実施の形態におけるクロック信号制御部及び電源電圧制御部に相当するものである。なお、第2非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第2非実行時間であってもよい。
上記構成においてさらに、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1ブロックの実行終了から第2ブロックの実行開始までの間、第1非実行時間情報が表す時間に応じたスリープモードに設定するとよい。又は、電力モード制御手段は、第2非実行時間情報が表す時間が第1非実行時間情報が表す時間よりも大きい場合、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間、第1非実行時間情報が表す時間に応じたスリープモードに設定し、第2プログラムブロックのバリア同期開始から第2ブロックの実行開始までの間、第2非実行時間情報が表す時間に応じたスリープモードに設定するよい。又は、第1及び第2プログラムブロックは、同一のプログラムブロックであり、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1非実行時間情報が表す時間と第2非実行時間情報が表す時間との和に応じたスリープモードに設定するとよい。
なお、第1非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第1非実行時間であり、第2非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第2非実行時間であってもよい。
又は、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の統計時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の統計時間であってもよい。この場合においてさらに、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の平均時間であるとよい。又は、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間のうち最小の第1非実行時間を除いて算出された平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間のうち最小の第2非実行時間を除いて算出された平均時間であるとよい。
又は、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間のうちの最小の第1非実行時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間のうちの最小の第1非実行時間であってもよい。
上記構成においてさらに、電力モード制御手段には、さらに、プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、電力モード制御手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサに対して、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間の電力モードを第1非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサに対して、第2ブロックの実行終了から第2プログラムブロックのバリア同期成立までの間の電力モードを第2非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第2ブロックの実行終了から第2プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定するとよい。
この場合においてさらに、取得手段は、第1及び第2バリア成立時間をさらに取得しており、電力モード制御手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第1非実行時間情報が表す時間と第1バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第1周波数を算出し、算出した第1周波数を低速動作モードとして設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第2非実行時間情報が表す時間と第2バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第2周波数を算出し、算出した第2周波数を低速動作モードとして設定し、移行手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第1周波数に設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第2周波数に設定するとよい。
又は、電力モード制御手段は、各プロセッサの電力モードを全て低速動作モードに設定したとき、各プロセッサの電力モードを通常動作モードに設定し直すとよい。
又は、取得手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第1ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第1ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第1バリア成立時間から減算して第1非実行時間を取得し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第2ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第2ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第2バリア成立時間から減算して第2非実行時間を取得するとよい。
なお、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の統計時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の統計時間であってもよい。この場合においてさらに、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の平均時間であるとよい。
また本発明は、マルチプロセッサ制御装置で行われる制御方法にも向けられており、本発明に係る制御方法は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得ステップと、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御ステップとを含む。
また本発明は、集積回路にも向けられており、本発明に係る集積回路は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得手段と、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
本発明によると、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することができる。
図1は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。
図2は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。
図3は、実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
図4は、予測情報取得部11の具体的な構成例を示す図である。
図5は、履歴情報格納部112内の履歴テーブルを示す図である。
図6は、電力制御部13の具体的な構成例を示す図である。
図7は、電力モード制御部131が設定する電力モードを示す図である。
図8は、マルチプロセッサ制御装置1全体の動作の流れを示すフローチャートである。
図9は、実施の形態1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図10は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
図11は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。
図12は、実施の形態1の変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
図13は、予測情報取得部11aの具体的な構成例を示す図である。
図14は、履歴情報格納部112a内の履歴テーブルを示す図である。
図15は、電力制御部13aの具体的な構成例を示す図である。
図16は、マルチプロセッサ制御装置1a全体の動作の流れを示すフローチャートである。
図17は、実施の形態1の変形例1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図18は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
図19は、実施の形態1の変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図20は、実施の形態2に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
図21は、予測情報取得部61の具体的な構成例を示す図である。
図22は、履歴情報格納部612内の履歴テーブルを示す図である。
図23は、電力制御部63の具体的な構成例を示す図である。
図24は、電力モード制御部631が設定する電力モードを示す図である。
図25は、マルチプロセッサ制御装置6全体の動作の流れを示すフローチャートである。
図26は、実施の形態2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図27は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。
図28は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。
図29は、実施の形態2の変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。
図30は、予測情報取得部61aの具体的な構成例を示す図である。
図31は、履歴情報格納部612a内の履歴テーブルを示す図である。
図32は、電力制御部63aの具体的な構成例を示す図である。
図33は、マルチプロセッサ制御装置6a全体の動作の流れを示すフローチャートである。
図34は、実施の形態2の変形例1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図35は、実施の形態2の変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャートである。
図36は、実施の形態1に係るマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。
図37は、英ARM社のARMプロセッサで用いられる電力モードを示した図である。
符号の説明
1、1a、6、6a マルチプロセッサ制御装置
2 共有メモリバス
3 主記憶装置
4 電源装置
5、5a プログラム
7 メモリコントローラ
8 IOインタフェイス
11、11a、61、61a 予測情報取得部
111、111a、611、611a バリア監視部
112、112a、612、612a 履歴情報格納部
113、113a、613、613a 予測情報生成部
12 タイマ
13、13a、63、63a 電力制御部
131、131a、631、631a 電力モード制御部
132、632 クロック信号制御部
133、633 電源電圧制御部
91 光ディスクドライブ
92 光ディスク
93 メモリカードドライブ
94 メモリカード
まず、各プロセッサによって実行されるプログラムの構成について具体的に説明する。
プログラムは、並列実行可能か否かを基準に複数のプログラムブロックに分割される。各プログラムブロックは、並列実行可能な並列プログラムブロック、又は並列実行不可能な逐次プログラムブロックのいずれかに分類される。
図1は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。プログラム5に記述された関数par(i)は、iについて並列実行可能であることを示す関数であり、関数seq()は、並列実行不可能であることを示す関数であるとする。この場合、プログラムブロック51は並列プログラムブロックとなり、プログラムブロック52は逐次プログラムブロックとなる。また、プログラム5に記述されたjはループ実行の回数を示しており、図1の記述によれば、並列プログラムブロック51が10回(j=0〜9)だけループ実行され、その後、逐次プログラムブロック52が実行されることになる。さらに図1では、並列プログラムブロック51をiについて4つのスレッド(i=0〜24、i=25〜49、i=50〜74、i=75〜99)に分割している。そして、分割した4つのスレッドそれぞれは、プロセッサP−1〜P−4に割り当てられている。例えば、プロセッサP−2は、バリア開始と同時にi=25〜49で示されるスレッドの実行を開始し、当該スレッドのバリア到達時(i=25〜49で示されるスレッドに係る実線矢印の先端)にアトミック操作を行い、主記憶装置にアクセスしてロック変数を1つデクリメントさせる。その後、プロセッサP−2は、i=25〜49で示されるスレッドの点線矢印のように、バリア成立するまでバリア待ちとなる。
スレッド開始時間TST(Thread Starting Time)は、バリア開始からスレッドの実行が開始されるまでの時間を示す。図1の例では、各スレッドのスレッド開始時間TSTをTST−1〜TST−4で示している。また図1の例では、各スレッドがバリア開始と同時に実行を開始しているので、スレッド開始時間TST−1〜TST−4は、全て“0”となっている。バリア成立時間BET(Barrier Establish Time)は、バリア開始からバリア成立までの時間を示す。バリア到達時間BAT(Barrier Arrival Time)は、バリア開始からスレッドのバリア到達までの時間を示す。図1の例では、各スレッドのバリア到達時間BATをBAT−1〜BAT−4で示している。バリア待ち時間BWT(Barrier Waiting Time)は、バリア到達からバリア成立までの時間を示す。図1の例では、各スレッドのバリア待ち時間BWTをBWT−1〜BWT−4で示している。図1の例では、i=0〜25で示されるスレッドのバリア到達が最後となるので、当該スレッドのバリア到達時にバリア成立となる。よって、バリア待ち時間BWT−1=0となっている。スレッド非実行時間TNPT(Thread Non Processing Time)は、バリア開始からバリア成立までの間で、スレッドが実行していない時間を示す。
ここで、バリア成立時間BET、バリア到達時間BAT、及びバリア待ち時間BWTには、式(1)のような関係が成立する。なお、式(1)のnは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。また、バリア成立時間BETは、最大のバリア到達時間BATが示す時間と一致する。
(バリア成立時間BET)=(バリア到達時間BAT−n)+(バリア待ち時間BWT−n) ・・・(1)
また、バリア待ち時間BWT、スレッド開始時間TST、及びスレッド非実行時間TNPTには、式(2)のような関係が成立する。なお、式(2)のnは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。
(スレッド非実行時間TNPT−n)=(スレッド開始時間TST−n)+(バリア待ち時間BWT−n) ・・・(2)
なお、図2に示すように、並列プログラムブロック51がループ実行しない場合もある。図2は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。図2に示すプログラム5aには、並列プログラムブロック51及び53が記述されている。この記述によれば、図2に示すように、まず、4つのスレッドに分割された並列プログラムブロック51が並列実行され、その直後、4つのスレッドに分割された並列プログラムブロック53が並列実行されることになる。
次に、本発明の実施の形態に係るマルチプロセッサ制御装置について説明する。
<実施の形態1>
<構成>
図3を参照して、本発明の実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成について説明する。図3は、実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。図3において、マルチプロセッサシステムは、マルチプロセッサ制御装置1、プロセッサP−1〜P−N(Nは1以上の自然数)、共有メモリバス2、主記憶装置3、及び電源装置4により構成される。プロセッサP−1〜P−Nそれぞれは、共有メモリバス2を介して主記憶装置3と接続されており、主記憶装置3上の特定の共有メモリアドレスに割り当てたロック変数を用いた排他制御を行いながら、バリア同期を実現している。ただし、ロック変数は必ずしも主記憶装置3上に設けられる必要はない。例えば、マルチプロセッサ制御装置1上の特定の共有メモリアドレスにマッピングされた専用レジスタ上に設けられてもよい。
マルチプロセッサ制御装置1は、電源装置4とプロセッサP−1〜P−Nそれぞれと接続され、プロセッサP−1〜P−Nそれぞれについて、スリープモードへの移行と通常動作モードへの復旧とを制御する。マルチプロセッサ制御装置1は、予測情報取得部11、タイマ12、及び電力制御部13により構成される。
予測情報取得部11は、プロセッサP−1〜P−Nそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部13へ出力する。本実施形態では、予測情報として、スレッド非実行時間TNPTの予測時間であるスレッド非実行予測時間PTNPT(Predictive Thread Non Processing Time)を用いる。以下、図4を参照して、予測情報取得部11の具体的な構成について説明する。図4は、予測情報取得部11の具体的な構成例を示す図である。予測情報取得部11は、バリア監視部111、履歴情報格納部112、及び予測情報生成部113により構成される。
バリア監視部111は、プロセッサP−1〜P−Nそれぞれにおけるプログラムブロックの実行状態を監視して、バリアタイミング信号BT(Barrier Timing)を生成する。バリア監視部111は、バリアタイミング信号BTを生成すると同時に、生成したバリアタイミング信号BTを、予測情報生成部113及び電力制御部13へ出力する。バリアタイミング信号BTには、バリア開始タイミングを示すバリア開始信号、各スレッドのバリア到達タイミングを示すバリア到達信号、バリア成立タイミングを示すバリア成立信号、及び、各スレッドのスレッド開始タイミングを示すスレッド開始信号が含まれる。バリア監視部111は、例えば、プロセッサP−1〜P−Nそれぞれの実行命令を監視することで、バリア開始信号及びスレッド開始信号を検出することができる。また、上記実行命令のうち、ロック変数をディクリメントさせるアトミック操作を検出することで、バリア到達信号又はバリア成立信号を検出することができる。また例えば、バリア監視部111を共有メモリバス2と接続し、バリア監視部111の内部にバリアタイミング信号BTを生成するためのレジスタを設けた構成としてもよい。この場合、各プロセッサP−1〜P−Nが各タイミングでバリア監視部111のレジスタへアクセスすることで、バリア監視部111がそのタイミングを示すバリアタイミング信号BTを生成することができる。
またバリア監視部111は、実行されるプログラムブロックを特定するためのバリア識別情報BID(Barrier ID)を、内部のBIDレジスタに保持する。バリア識別情報BIDは、例えば、バリア開始ポイントの命令アドレス等で構成される。バリア監視部111は、BIDレジスタに保持したバリア識別情報BID−mを、履歴情報格納部112、予測情報生成部113、及び電力制御部13へ出力する。ここで、プログラムは、M(Mは1以上の自然数)個のプログラムブロックに分割されているとし、m(1以上M以下の自然数)はプログラムブロックを特定する番号であるとする。
またバリア監視部111は、バリア到達信号を生成したときにタイマ12を参照し、バリア到達時間BATを算出する。バリア到達信号の生成タイミングは、プロセッサP−1〜P−Nに応じて異なる。よって、バリア監視部111は、プロセッサP−1〜P−Nそれぞれについてのバリア到達時間BAT−1〜BAT−Nを算出することになる。同様に、バリア監視部111は、スレッド開始信号を生成したときにタイマ12を参照することで、プロセッサP−1〜P−Nそれぞれについてのスレッド開始時間TST−1〜TST−Nを算出する。バリア監視部111は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを式(1)及び式(2)に代入することにより、スレッド非実行時間TNPT−1〜TNPT−Nをそれぞれ算出する。バリア監視部111は、算出したスレッド非実行時間TNPT−1〜TNPT−Nを、履歴情報格納部112へ出力する。
履歴情報格納部112は、入力されたスレッド非実行時間TNPT−1〜TNPT−Nを、図5に示す履歴テーブルに格納する。図5は、履歴情報格納部112内の履歴テーブルを示す図である。図5において、履歴テーブルは、タグ部とデータ部とを有している。履歴情報格納部112は、バリア監視部111から入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部112は、バリア監視部111から入力されたスレッド非実行時間TNPT−1〜TNPT−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、バリア識別情報BID−mで特定されるプログラムブロックのスレッド非実行時間TNPT−1〜TNPT−Nとを、関連づけして格納する。
また履歴情報格納部112は、V(Valid)フラグ又はIV(Invalid)フラグからなるフラグ情報をタグ部のエントリに格納している。履歴情報格納部112は、タグ部のエントリと当該エントリに対応するデータ部の各エントリ(ライン)にバリア識別情報BID−m及び履歴情報が格納されると、バリア識別情報BID−mで特定されるプログラムブロックについて有効な履歴情報が存在するとして、そのラインのフラグをVフラグにセットする。一方、履歴情報格納部112は、タグ部のエントリと当該エントリに対応するデータ部の各エントリにバリア識別情報BID−m及び履歴情報が存在しない場合、そのラインのフラグをIVフラグにセットする。履歴情報格納部112は、入力されたバリア識別情報BID−m及び履歴情報を格納する際、入力されたバリア識別情報BID−mを含む有効な(Vフラグがセットされた)ラインが既に履歴テーブルに存在しているか否かを判定する。有効なラインが既に存在している場合、履歴情報格納部112は、その有効なラインに履歴情報を上書きして更新する。有効なラインが存在していない場合、履歴情報格納部112は、入力されたバリア識別情報BID−m及び履歴情報を空いているラインに格納し、そのラインのフラグをVフラグにセットする。
なお、履歴テーブルに格納できるライン数は有限であるため、全ラインのVフラグがセットされることが考えられる。この場合、プロセッサのキャッシュメモリの更新等に用いられるLRU(Least Recently Used)のような更新方式で、使用頻度の低いラインから上書きして更新するとよい。
また、プログラムブロックの初回実行時、履歴テーブルには、バリア識別情報BIDは格納されるものの、履歴情報は格納されていない。このため、履歴テーブル内の履歴情報の初期値として“0”を設定しておいてもよい。あるいは、事前にプログラムのステップ数や各ステップの実行レイテンシを考慮した静的解析を行って、各プロセッサのバリア到達時間を予測しておいてもよい。この場合、予測したバリア到達時間の中で最大となるバリア成立時間からバリア到達時間を減算することによりバリア待ち時間を求め、求めたバリア待ち時間をスレッド非実行情報の初期値として設定しておいてもよい。なお、この場合、スレッド開始時間を“0”としている。
また上述では、履歴情報格納部112は、スレッド非実行時間TNPT−1〜TNPT−Nを格納する際、単純に最新の値で更新するようにしていたが、これに限定されない。履歴情報格納部112は、過去の履歴情報も含めて統計値(例えば平均値など)を算出し、算出した統計値で更新してもよい。
予測情報生成部113は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部112からバリア識別情報BID−mと関連付けられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出し、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして、電力制御部13へ出力する。
電力制御部13は、予測情報取得部11から入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。また電力制御部13は、連続する2つのプログラムブロックに跨った電力制御を行う。以下、図6を参照して、電力制御部13の具体的な構成について説明する。図6は、電力制御部13の具体的な構成例を示す図である。電力制御部13は、電力モード制御部131、クロック信号制御部132、及び電源電圧制御部133とにより構成される。
電力モード制御部131は、バリア監視部111からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる。電力モード制御部131は、バリア監視部111からバリア成立信号が入力されると、タイマ12の計時を終了させ、リセットさせる。なお、タイマ12は、電力制御部13の内部に設けられてもよい。また、タイマ12は、マルチプロセッサ制御装置1の外部に設けられて共有メモリバス2と接続されていてもよい。この場合、電力モード制御部131は、共有メモリバス2を介してタイマ12を制御することなる。またこの場合、バリア監視部111を共有メモリバス2と接続し、バリア監視部111は共有メモリバス2を介してタイマ12を参照することなる。
また電力モード制御部131は、入力されたスレッド非実行予測時間PTNPT−1〜PTNPT−Nに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する。電力モード制御部131には、図7に示すようなスリープ移行判定閾値が予め設定されている。図7は、電力モード制御部131が設定する電力モードを示す図である。図7に示すスリープ移行判定閾値Tsb、Tdm、Tsdは、スリープモードへの移行時間、及び通常動作モードへの復旧時間を考慮しても、十分な省電力効果が見込まれるスリープ時間に設定される。電力モード制御部131は、例えばスレッド非実行予測時間PTNPT−1が0以上Tsb以下である場合、プロセッサP−1の電力モードを通常動作モードであるRunモードに設定する。スレッド非実行予測時間PTNPT−1が「0」に近い場合、スリープ時間が確保できないことが想定され、また、スレッドが最後にバリア到達することになるので、スリープモードに移行させる必要はない。一方、スレッド非実行予測時間PTNPT−1がTsbより大きくTdm以下である場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるStandbyモードに設定する。スレッド非実行予測時間PTNPT−1がTdmより大きくTsd以下である場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるDormantモードに設定する。スレッド非実行予測時間PTNPT−1がTsdより大きい場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるShutdownモードに設定する。
なお、電力モード制御部131に設定される電力モードは、図7に示す範囲に限定されない。電力モード制御部131には、少なくとも、通常動作モードであるRunモードと1つのスリープモードとが設定されていればよい。また電力モード制御部131には、図7に示す電力モードとは異なる電力モードが設定されていてもよい。
電力モード制御部131は、プロセッサP−1〜P−Nそれぞれについて設定した電力モードを示す制御信号PCTRL−1〜PCTRL−Nを、プロセッサP−1〜P−Nへ出力する。また電力モード制御部131は、プロセッサP−1〜P−Nそれぞれについて設定した電力モードを示す制御信号を、クロック信号制御部132へは制御信号CCTRL−1〜CCTRL−Nとして出力し、電源電圧制御部133へは制御信号VCTRL−1〜VCTRL−Nとして出力する。なお、制御信号PCTRL−1〜PCTRL−N、CCTRL−1〜CCTRL−N、VCTRL−1〜VCTRL−Nは、割り込みデバック要求を示す信号であったり、ソフトリセットを示す信号であったり、リセットを示す信号であったりする。さらに、制御信号PCTRL−1〜PCTRL−Nは、スレッドの実行を開始させることを示す信号となる場合もある。詳細については、後述する。
クロック信号制御部132は、PLL(Phase−Locked Loop)回路等を用いて、制御信号CCTRL−1〜CCTRL−Nが示す各電力モードに従ったクロック信号CLK−1〜CLK−Nを生成する。クロック信号制御部132は、生成したクロック信号CLK−1〜CLK−Nを、プロセッサP−1〜P−Nへ出力する。
電源電圧制御部133は、電源装置4から入力される電源電圧を降圧するなどして、制御信号VCTRL−1〜VCTRL−Nが示す各電力モードに従った電源電圧VDD−1〜VDD−Nを生成する。電源電圧制御部133は、生成した電源電圧VDD−1〜VDD−NをプロセッサP−1〜P−Nへ供給する。
ここで、例えば、プロセッサP−1の電力モードをStandbyモードへ移行させる場合、電力モード制御部131は、Standbyモードを示す制御信号PCTRL−1をプロセッサP−1へ出力して、プロセッサP−1にStandbyモードへの移行を指示する。電力モード制御部131は、プロセッサP−1において割込みで復旧できる準備が整ったことを検知すると、クロック信号制御部132へStandbyモードを示す制御信号CCTRL−1を出力し、電源電圧制御部133へStandbyモードを示す制御信号VCTRL−1を出力する。クロック信号制御部132は、制御信号CCTRL−1に基づき、復旧に必要な割込みインターフェースを除くプロセッサコアやキャッシュメモリへのクロック信号CLK−1の出力を遮断する。電源電圧制御部133は、制御信号VCTRL−1に基づき、プロセッサコアやキャッシュメモリの電源電圧を、通常動作モードと同じ電源電圧にするか、あるいは、プロセッサコア内の各種レジスタやキャッシュメモリ内のデータ等の内部状態(コンテキスト)が揮発しない範囲で低電圧とする。
また例えば、プロセッサP−1の電力モードをShutdownモードへ移行させる場合、電力モード制御部131は、Shutdownモードを示す制御信号PCTRL−1をプロセッサP−1へ出力して、プロセッサP−1にStandbyモードへの移行を指示する。電力モード制御部131は、プロセッサP−1においてプロセッサコアやキャッシュメモリ内の全てのコンテキストが外部のメモリに退避されたことを検知すると、クロック信号制御部132へShutdownモードを示す制御信号CCTRL−1を出力し、電源電圧制御部133へShutdownモードを示す制御信号VCTRL−1を出力する。クロック信号制御部132は、制御信号CCTRL−1に基づき、プロセッサコアやキャッシュメモリへのクロック信号CLK−1の出力を遮断する。電源電圧制御部133は、制御信号VCTRL−1に基づき、プロセッサコアやキャッシュメモリの電源電圧を遮断する。
<動作>
次に図8を参照して、実施の形態1に係るマルチプロセッサ制御装置1の動作について説明する。図8は、マルチプロセッサ制御装置1全体の動作の流れを示すフローチャートである。
図8において、バリア監視部111は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部113及び電力制御部13へ出力する(ステップS11)。またステップS11において、バリア監視部111は、バリア識別情報BID−mを予測情報生成部113及び電力制御部13へ出力する。ステップS11の次に、電力モード制御部131は、バリア監視部111からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる(ステップS12)。ステップS12の次に、予測情報生成部113は、バリア監視部111からバリア開始信号が入力されると、履歴情報格納部112からバリア識別情報BID−mに関連づけられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出し、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして、電力制御部13へ出力する(ステップS13)。ステップS13の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)が行われる。この個別の制御については、後述する。
ステップS15において、電力モード制御部131は、バリア監視部111からのバリア成立信号に基づいて、バリア識別情報BID−mで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部131は、共有メモリバス2を介して主記憶装置3のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部111からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部131は、タイマ12の計時を終了させ、リセットさせる(ステップS16)。
ステップS16の次に、バリア監視部111は、バリアタイミング信号とタイマ12の計時に基づいて、スレッド非実行時間TNPT−1〜TNPT−Nを算出する(ステップS17)。またステップS17において、バリア監視部111は、算出したスレッド非実行時間TNPT−1〜TNPT−Nを、バリア識別情報BID−mとともに履歴情報格納部112へ出力する。
ステップS17の次に、履歴情報格納部112は、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のスレッド非実行時間TNPT−1〜TNPT−Nを、ステップS17で出力されたスレッド非実行時間TNPT−1〜TNPT−Nに更新する(ステップS18)。
ステップS18の次に、バリア監視部111は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する(ステップS19)。現在実行中のプログラムブロックが最後のプログラムブロックである場合(ステップS19でYes)、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合(ステップS19でNo)、処理はステップS11へ戻り、次のプログラムブロックについての動作が行われる。
図9を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)について具体的に説明する。ステップS14−1〜S14−Nの制御の流れは同じであるため、図9の例ではプロセッサP−nの制御の流れを記載している。
図9において、電力モード制御部131は、自身が出力する制御信号PCTRL−nを参照して、プロセッサP−nの現在の電力モードがスリープモードであるか否かを判定する(ステップS141)。
プロセッサP−nがスリープモードではないと判定した場合(ステップS141でNo)、電力モード制御部131は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS142)。電力モード制御部131は、バリア監視部111からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS143)。スレッドがバリア到達したと判定した場合(ステップS143でYes)、電力モード制御部131は、スリープ移行制御を行う。具体的には、電力モード制御部131は、ステップS13で出力されたスレッド非実行予測時間PTNPT−nに従って、移行させるべきスリープモードを設定する。電力モード制御部131は、設定したスリープモードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部132、電源電圧制御部133へそれぞれ出力する。これにより、プロセッサP−nは、スレッド非実行予測時間PTNPT−nに応じたスリープモードでバリア待ちになる。
一方、プロセッサP−nがスリープモードであると判定した場合(ステップS141でYes)、電力モード制御部131は、タイマ12を監視して、ステップS13で出力されたスレッド非実行予測時間PTNPT−nが経過するのを待ってから、通常動作モードへの復旧制御を行う(ステップS145)。具体的には、電力モード制御部131は、タイマ12の計時がステップS13で出力されたスレッド非実行予測時間PTNPT−nを経過したとき、通常動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部132、電源電圧制御部133へそれぞれ出力する。これにより、プロセッサP−nは、スリープモードから通常動作モードへ復旧する。このように、ステップS141及びステップS145の動作により、プロセッサP−nが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間PTNPT−nだけスリープモードが継続することになる。
なお、例えば図7のStandbyモードからの復旧であれば、電力モード制御部131が、割り込みデバック要求を示す制御信号CCTRL−nをクロック信号制御部132へ出力してクロック信号CLK−nの出力を再開させるだけで、プロセッサP−nは通常動作モードに復旧させることができる。一方、Shutdownモードからの復旧であれば、まず、電力モード制御部131が、リセットを示す制御信号CCTRL−n、VCTRL−nをクロック信号制御部132、電源電圧制御部133へ出力してクロック信号CLK−n及び電源電圧Vdd−nの出力を再開させる。その後、プロセッサP−nを通常動作モードに復旧させるには、Shutdownモードへの移行時に退避した全コンテキストを復旧させる必要がある。このように、復旧時間は、スリープモードの深さに応じて異なる。このため、電力モード制御部131は、異なる復旧時間を考慮しながら、スレッド非実行予測時間PTNPT−nの経過前に復旧を開始するように、ステップS145の動作を行う。これにより、性能低下の影響を抑制できる。
ステップS145の次に、電力モード制御部131は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS146)。電力モード制御部131は、バリア監視部111からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS147)。スレッドがバリア到達したと判定した場合(ステップS147でYes)、処理は図8に示すステップS15へ進む。プロセッサP−nは、スレッド実行前に既にスレッド非実行予測時間PTNPT−nだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップS147からステップS15へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
次に、図10及び図11に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置1の制御によってプログラムがどのように実行されるかについて説明する。
図10は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図10では、ループ実行される並列プログラムブロックを、バリア識別情報BID−1で特定される並列プログラムブロックとしている。また、並列プログラムブロックを3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。
図10の制御前について説明する。プロセッサP−1は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。このときのプロセッサP−1のバリア待ち時間である“BWT−1”は、“0”となる。プロセッサP−2は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BWT−2”とする。プロセッサP−3は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BWT−3”とする。その後、以上の実行状態を繰り返しながら、並列プログラムブロックが実行される。
図10の制御後について説明する。履歴情報格納部112には、バリア識別情報BDI−1について、スレッド非実行時間TNPT−1(=0)、TNPT−2(=BWT−2)、TNPT−1(=BWT−3)が格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−1が“0”であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
プロセッサP−2は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−2に応じたスリープモードSL(PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(PTNPT−2)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−3に応じたスリープモードSL(PTNPT−3)に移行する(ステップS144)。その後、プロセッサP−3は、スリープモードSL(PTNPT−3)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間TNPT−1がTST−1とBWT−1の和(=0)となるように、スレッド非実行時間TNPT−2がTST−2とBWT−2の和(=BWT−2)となるように、スレッド非実行時間TNPT−3がTST−3とBWT−3の和(=BWT−3)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、2回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、通常動作モードを維持しながら、2回目のバリア成立を迎える。これは、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−1が“0”であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。
プロセッサP−2は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−2が経過するまで、スリープモードSL(PTNPT−2)を継続する。スレッド非実行予測時間PTNPT−2が経過すると、プロセッサP−2は、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−2のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−2は、2回目のバリア成立を迎える。これは、プロセッサP−2のスレッドは、1回目のバリア待ち時間BWT−2と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ“0”になるからである。なお、スレッド開始時間TST−2は、スレッド非実行予測時間PTNPT−2と一致することになる。
プロセッサP−3は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−3が経過するまで、スリープモードSL(PTNPT−3)を継続する。スレッド非実行予測時間PTNPT−3が経過すると、プロセッサP−3は、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−3のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−3は、2回目のバリア成立を迎える。これは、プロセッサP−3のスレッドは、1回目のバリア待ち時間BWT−3と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ“0”になるからである。なお、スレッド開始時間TST−3は、スレッド非実行予測時間PTNPT−3と一致することになる。
2回目のバリア成立後、スレッド非実行時間TNPT−1がTST−1とBWT−1の和(=0)となるように、スレッド非実行時間TNPT−2がTST−2とBWT−2の和(=BWT−2)となるように、スレッド非実行時間TNPT−3がTST−3とBWT−3の和(=BWT−3)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
3回目のバリア開始以降の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
図11は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図11では、バリア識別情報BID−1で特定される並列プログラムブロックと、バリア識別情報BID−2で特定される並列プログラムブロックと、バリア識別情報BID−3で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、バリア識別情報BID−1で特定される並列プログラムブロックのバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。
図11の制御前について説明する。プロセッサP−1は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドのバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。このときのプロセッサP−1のバリア待ち時間“BID−1:BWT−1”は、“0”となる。
プロセッサP−2は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−1:BWT−2”とする。
プロセッサP−3は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−1:BWT−3”とする。
プロセッサP−1は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドは、2回目のバリア成立前にバリア到達する。その後、プロセッサP−1は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−2:BWT−1”とする。
プロセッサP−2は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドのバリア到達時間は、プロセッサP−1及びP−3に比べて長い。このため、プロセッサP−2のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。このときのプロセッサP−2のバリア待ち時間“BID−2:BWT−2”は、“0”となる。
プロセッサP−3は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、2回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−2:BWT−3”とする。
プロセッサP−1は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドは、3回目のバリア成立前にバリア到達する。その後、プロセッサP−1は、バリア到達から3回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−3:BWT−1”とする。
プロセッサP−2は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、3回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から3回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を“BID−3:BWT−2”とする。
プロセッサP−3は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドのバリア到達時間は、プロセッサP−1及びP−2に比べて長い。このため、プロセッサP−3のスレッドがバリア到達すると同時に、3回目のバリア成立が起こる。このときのプロセッサP−3のバリア待ち時間“BID−3:BWT−3”は、“0”となる。
図11の制御後について説明する。履歴情報格納部112には、バリア識別情報BDI−1について、スレッド非実行時間(BID−1:TNPT−1)(=0)、(BID−1:TNPT−2)(=BID−1:BWT−2)、(BID−1:TNPT−3)(=BID−1:BWT−3)が格納されているとする。また、履歴情報格納部112には、バリア識別情報BDI−2について、スレッド非実行時間(BID−2:TNPT−1)(=BID−2:BWT−1)、(BID−2:TNPT−2)(=0)、(BID−2:TNPT−3)(=BID−2:BWT−3)が格納されているとする。また、履歴情報格納部112には、バリア識別情報BDI−3について、スレッド非実行時間(BID−3:TNPT−1)(=BID−3:BWT−1)、(BID−3:TNPT−2)(=BID−3:BWT−2)、(BID−3:TNPT−3)(=0)が格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−1)が“0”であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
プロセッサP−2は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−2)に応じたスリープモードSL(BID−1:PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(BID−1:PTNPT−2)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−3)に応じたスリープモードSL(BID−1:PTNPT−3)に移行する(ステップS144)。その後、プロセッサP−3は、スリープモードSL(BID−1:PTNPT−3)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間(BID−1:TNPT−1)が(BID−1:TST−1)と(BID−1:BWT−1)の和(=0)となるように、スレッド非実行時間(BID−1:TNPT−2)が(BID−1:TST−2)と(BID−1:BWT−2)の和となるように、スレッド非実行時間(BID−1:TNPT−3)が(BID−1:TST−3)と(BID−1:BWT−3)の和となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、2回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−1)に応じたスリープモードSL(BID−2:PTNPT−1)に移行する(ステップS144)。その後、プロセッサP−1は、スリープモードSL(BID−2:PTNPT−1)を維持しながら、2回目のバリア成立を迎える。
プロセッサP−2は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−2)が経過するまで、スリープモードSL(BID−1:PTNPT−2)を継続する。ここで、スレッド非実行予測時間(BID−2:PTNPT−2)は“0”である。よって、プロセッサP−2は、即座に通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。なお、プロセッサP−2のスレッドのバリア到達時間は、プロセッサP−1及びP−3に比べて長い。また、スレッド非実行予測時間(BID−2:PTNPT−2)が“0”であり、ステップS144の処理によってはスリープモードに移行しない。このため、プロセッサP−2のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。
プロセッサP−3は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−3)が経過するまで、スリープモードSL(BID−1:PTNPT−3)を継続する。スレッド非実行予測時間(BID−2:PTNPT−3)が経過すると、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。その後、プロセッサP−3は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。
2回目のバリア成立後、スレッド非実行時間(BID−2:TNPT−1)が(BID−2:TST−1)と(BID−2:BWT−1)の和となるように、スレッド非実行時間(BID−2:TNPT−2)が(BID−2:TST−2)と(BID−2:BWT−2)の和となるように、スレッド非実行時間(BID−2:TNPT−3)が(BID−2:TST−3)と(BID−2:BWT−3)の和となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、3回目のバリア開始(ステップS11)してから、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−1)が経過するまで、スリープモードSL(BID−2:PTNPT−1)を継続する。スレッド非実行予測時間(BID−3:PTNPT−1)が経過すると、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−1のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−1は、3回目のバリア成立を迎える。これは、プロセッサP−1のスレッドは、バリア待ち時間(BID−3:BWT−1)と同じ時間だけバリア開始から遅れて実行を開始しており、かつ、後述するプロセッサP−3のスレッドとの関係により、スピンウェイト状態になる時間がほぼ“0”になるからである。なお、スレッド開始時間(BID−3:TST−1)は、スレッド非実行予測時間(BID−3:PTNPT−1)と一致することになる。
プロセッサP−2は、3回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−2の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−2)に応じたスリープモードSL(BID−3:PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(BID−3:PTNPT−2)を維持しながら、3回目のバリア成立を迎える。
プロセッサP−3は、3回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−3の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、スリープモードに移行せず通常動作モードを維持しながら、3回目のバリア成立を迎える。これは、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−3)が“0”であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−3のバリア到達時間は、プロセッサP−1及びP−2に比べて長い。このため、プロセッサP−3のスレッドがバリア到達すると同時に、3回目のバリア成立が起こる。
3回目のバリア成立後、スレッド非実行時間(BID−3:TNPT−1)が(BID−3:TST−1)と(BID−3:BWT−1)の和となるように、スレッド非実行時間(BID−3:TNPT−2)が(BID−3:TST−2)と(BID−3:BWT−2)の和となるように、スレッド非実行時間(BID−3:TNPT−3)が(BID−3:TST−3)と(BID−3:BWT−3)の和(=0)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
以上のように本実施形態によれば、バリア開始の前後でスレッドの実行状態が同じ状態となるように各プロセッサのスレッド実行開始タイミングを制御する(ステップS142、S146)。また、バリア開始(ステップS11)の直後に、各プロセッサの電力モード判定(ステップS141)を行う。そして、プロセッサの電力モードが既にスリープモードに移行されている場合には、そのスリープモードを継続させ、プロセッサの電力モードが通常動作モードのままである場合には、通常動作モードを継続させる。これにより、2つのプログラムブロックに跨ったスリープ制御を実現することができる。その結果、従来技術に比べて、スリープモードへの移行と通常動作モードへの復旧の回数を減らすことができ、更なる省電力化が可能となる。
なお、図8のステップS13では、予測情報生成部113が、履歴情報格納部112からバリア識別情報BID−mと関連付けられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出すとしたが、これに限定されない。図10に示したように、同じ並列プログラムブロックがループ実行される場合には、次回に実行する並列プログラムブロック(m+1)を事前に把握できる。よってこの場合、予測情報生成部113は、バリア識別情報BID−m+1と関連づけられたスレッド非実行時間TNPT−1〜TNPT−Nも同時に読み出すとよい。そして、電力モード制御部131は、入力されたバリア識別情報BID−mのスレッド非実行予測時間PTNPT−nと、バリア識別情報BID−m+1のスレッド非実行予測時間PTNPT−nとの和に従って、プロセッサP−nの電力モードを設定する。これにより、現在実行中の並列プログラムブロックにおいて、2つのスレッド非実行予測時間の和に応じたスリープモードへの移行を実現することができる。その結果、スリープモードをより深いモードに設定することができ、更なる省電力化が可能となる。
なお、実行するプログラムブロックが逐次プログラムブロックの場合、同時に実行するスレッド数がプロセッサ数未満となる。この場合、スレッドの割り当てのないプロセッサが存在することになる。スレッドの割り当てのないプロセッサについては、電力モード判定でスリープ判定された場合(ステップS141でYes)、スリープ復旧制御(ステップS145)では何も行わずに、即座にバリア到達させ(ステップS147でYes)、スリープモードを継続させる。一方、電力モード判定でスリープ判定されない場合(ステップS141でNo)も、即座にバリア到達させ(ステップS143でYes)、スリープ移行制御(ステップS144)を行う。これにより、スレッドの割り当てのないプロセッサは、電力モード判定に関わらず、バリア開始後、即座にバリア到達することになる。このため、バリア到達時間がほぼ“0”となり、式(1)、(2)の関係からスレッド非実行時間がバリア成立時間と同等に大きな値となる。その結果、次回以降に上記逐次プログラムブロックを実行する場合、スレッド非実行予想時間が大きくなるので、プロセッサがスリープ移行制御(ステップS144)でより深いスリープモードに移行することが期待できる。
<実施の形態1の変形例1>
図5に示したように、実施の形態1において、履歴情報格納部112は、バリア識別情報BID毎にスレッド非実行時間TNPT−1〜TNPT−Nを格納していた。このため、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置1の回路規模が増大する可能性があった。そこで、本変形例1では、履歴情報格納部112に格納されるデータ量を削減し、マルチプロセッサ制御装置1の回路規模の増大を抑制することを目的とする。
<構成>
図12は、本変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例1に係るマルチプロセッサシステムは、図3に示した構成に対し、マルチプロセッサ制御装置1がマルチプロセッサ制御装置1aに入れ代わり、マルチプロセッサ制御装置1aが予測情報取得部11a、タイマ12、及び電力制御部13aにより構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部11aは、プログラムブロック毎に予測情報を1つずつ取得し、取得した予測情報を電力制御部13aへ出力する。以下、図13を参照して、予測情報取得部11aの具体的な構成について説明する。図13は、予測情報取得部11aの具体的な構成例を示す図である。予測情報取得部11aは、バリア監視部111a、履歴情報格納部112a、及び予測情報生成部113aにより構成される。
バリア監視部111aは、算出したスレッド非実行時間TNPT−1〜TNPT−Nの統計値(例えば平均値)であるスレッド非実行時間TNPTをさらに算出し、履歴情報格納部112aへ出力する点で、上述したバリア監視部111と異なる。またバリア監視部111aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部112aへ出力する点でも、上述したバリア監視部111と異なる。ここでは、バリア監視部111aは、プロセッサ識別情報PID−nを出力するものとする。nは、プロセッサを特定する番号である。その他については、バリア監視部111と同様である。
履歴情報格納部112aは、入力されたスレッド非実行時間TNPTを、図14に示す履歴テーブルに格納する。図14は、履歴情報格納部112a内の履歴テーブルを示す図である。履歴情報格納部112aは、バリア監視部111aから入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部112aは、バリア監視部111aから入力されたプロセッサ識別情報PID−nを、バリア識別情報BID−mが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部112aは、バリア監視部111aから入力されたスレッド非実行時間TNPTを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、プロセッサ識別情報PID−nと、バリア識別情報BID−mで特定されるプログラムブロックのスレッド非実行時間TNPTとを、関連づけして格納する。その他については、履歴情報格納部112と同様である。
予測情報生成部113aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部112aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−nとスレッド非実行時間TNPTを読み出し、プロセッサ予測識別情報PPID−n、スレッド非実行予測時間PTNPTとして、電力制御部13aへ出力する。
電力制御部13aは、予測情報取得部11aから入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図15を参照して、電力制御部13aの具体的な構成について説明する。図15は、電力制御部13aの具体的な構成例を示す図である。電力制御部13aは、電力モード制御部131a、クロック信号制御部132、及び電源電圧制御部133とにより構成される。電力制御部13aは、電力モード制御部131が電力モード制御部131aに入れ代わった点で、上述した電力制御部13と異なる。以下、異なる点を中心に説明する。
電力モード制御部131aは、入力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれに対して共通の電力モードを設定する。電力モード制御部131aには、図7に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部131aは、プロセッサ予測識別情報PPID−nで特定されるプロセッサP−nについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部131と同様である。
<動作>
次に図16を参照して、変形例1に係るマルチプロセッサ制御装置1aの動作について説明する。図16は、マルチプロセッサ制御装置1a全体の動作の流れを示すフローチャートである。図16に示すステップS21、S22、S25、S26、S29は、図8に示したステップS11、S12、S15、S16、S19と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS22の次のステップS23において、予測情報生成部113aは、バリア監視部111aからバリア開始信号が入力されると、履歴情報格納部112aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−nとスレッド非実行時間TNPTを読み出し、プロセッサ予測識別情報PPID−n、スレッド非実行予測時間PTNPTとして、電力制御部13aへ出力する(ステップS23)。ステップS23の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS24−1〜S24−N)が行われる。この個別の制御については、後述する。
ステップS26の次のステップS27において、バリア監視部111aは、バリアタイミング信号とタイマ12の計時に基づいて、スレッド非実行時間TNPTを算出する。またステップS27において、バリア監視部111aは、スレッド非実行時間TNPTと、プロセッサ識別情報PID−nと、バリア識別情報BID−mとを履歴情報格納部112aへ出力する。
ステップS27の次に、履歴情報格納部112aは、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のスレッド非実行時間TNPTを、ステップS27で出力されたスレッド非実行時間TNPTに更新する(ステップS28)。またステップS28において、履歴情報格納部112aは、入力されたバリア識別情報BID−mに対応するタグ部に格納された従前のプロセッサ識別情報PID−nを、ステップS27で出力されたプロセッサ識別情報PID−nに更新する。
図17を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS24−1〜S24−N)について具体的に説明する。ステップS24−1〜S24−Nの制御の流れは同じであるため、図17の例ではプロセッサP−nの制御の流れを記載している。なお、図17に示すステップS241〜S243は、図9に示したステップS141〜S143と同様の処理を行い、ステップS245〜S248は、図9に示したステップS144〜S147と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS243の次のステップS244において、電力モード制御部131aは、制御対象のプロセッサがステップS23で出力されたプロセッサ予測識別情報PPID−nで特定されるプロセッサP−nであるか否かを判定する。つまり、電力モード制御部131aは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合(ステップS244でNo)、電力モード制御部131aは、ステップS23で出力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する(ステップS245)。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合(ステップS244でYes)、スリープ移行制御(ステップS245)がスキップされる。ここでは、制御対象のプロセッサは、P−nであり、プロセッサ予測識別情報PPID−nで特定されるプロセッサもP−nである。よって、ステップS244では肯定の判定がなされることになる。
次に、図18に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置1aの制御によってプログラムがどのように実行されるかについて説明する。図18は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図18では、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。図18の制御前については、図10の制御前と同様であるので、説明を省略する。
図18の制御後について説明する。履歴情報格納部112aには、バリア識別情報BDI−1について、スレッド非実行時間TNPT(BWT−1〜BWT−3の平均値)と、プロセッサ識別情報PID−1(プロセッサP−1を特定する情報)とが格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−2のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−2は、1回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−2は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−2については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−2は、スリープモードSL(PTNPT)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−3のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−3は、1回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−3は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−3については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−3は、スリープモードSL(PTNPT)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1のままとなる。
プロセッサP−1は、2回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、2回目のバリア成立を迎える。これは、2回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、2回目のバリア開始(ステップS21)してから、2回目のステップS23で出力されたスレッド非実行予測時間PTNPTが経過するまで、スリープモードSL(PTNPT)を継続する。スレッド非実行予測時間PTNPTが経過すると、プロセッサP−2は、通常動作モードへ復旧し(ステップS246)、スレッドの実行を開始する(ステップS247)。図18の例では、プロセッサP−2のスレッドがバリア到達すると(ステップS248でYes)同時に、プロセッサP−2は、2回目のバリア成立を迎える。
プロセッサP−3は、2回目のバリア開始(ステップS21)してから、2回目のステップS23で出力されたスレッド非実行予測時間PTNPTが経過するまで、スリープモードSL(PTNPT)を継続する。スレッド非実行予測時間PTNPTが経過すると、プロセッサP−3は、通常動作モードへ復旧し(ステップS246)、スレッドの実行を開始する(ステップS247)。図18の例では、プロセッサP−3のスレッドがバリア到達すると(ステップS248でYes)、プロセッサP−3は、2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。
2回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1のままとなる。
プロセッサP−1は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、3回目のバリア成立を迎える。これは、3回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−2のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−2は、3回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−2は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−2については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−2は、スリープモードSL(PTNPT)を維持しながら、3回目のバリア成立を迎える。
プロセッサP−3は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−3のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−3は、3回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−3は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−3については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−3は、スリープモードSL(PTNPT)を維持しながら、3回目のバリア成立を迎える。
3回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1となる。
以上のように、本変形例1によれば、履歴情報格納部112aには、1つのスレッド非実行時間TNPTのみが格納される。このため、履歴情報格納部112aの記憶容量を削減することができ、マルチプロセッサ制御装置1aの回路規模の増大を抑制することができる。
なお、上述では、バリア監視部111aが、スレッド非実行時間TNPT−1〜TNPT−Nの平均値を算出するとしたがこれに限定されない。バリア監視部111aは、スレッド非実行時間TNPT−1〜TNPT−Nのうち、値が“0”となるスレッド非実行時間を除いて平均値を算出してもよい。また、バリア監視部111aは、スレッド非実行時間TNPT−1〜TNPT−Nのうち、最小となるスレッド非実行時間を算出してもよいし、最大となるスレッド非実行時間を算出してもよい。
なお、上述では、バリア監視部111aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部112aへ出力していたが、これに限定されない。バリア監視部111aは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報PIDとしてもよい。
<実施の形態1の変形例2>
実施の形態1においては、各プロセッサ毎の個別制御を図9に示すようなフローで行っていた。しかしながら、図11に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
本変形例2におけるマルチプロセッサ制御装置は、図3〜図6、図8、図9に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図9のフローのみ異なる。以下、異なる点を中心に説明する。
<動作>
図19を参照して、本変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)について具体的に説明する。ステップS14−1〜S14−Nの制御の流れは同じであるため、図19の例ではプロセッサP−nの制御の流れを記載している。図19に示すステップS341〜S344は、図9に示すステップS141〜S144と同様の処理を行い、ステップS347〜S349は、図9に示すステップS145〜S147と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS341においてプロセッサP−nがスリープモードであると判定した場合、電力モード制御部131は、図8のステップS13で出力されたスレッド非実行予測時間PTNPT−nに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する(ステップS345)。電力モード制御部131は、より深いスリープモードに移行可能と判定した場合(ステップS345でYes)、プロセッサP−nの電力モードを、スレッド非実行予測時間PTNPT−nに応じたより深いスリープモードへ移行させる(ステップS346)。一方、電力モード制御部131は、より深いスリープモードに移行不可能と判定した場合(ステップS345でNo)、スリープ間移行制御(ステップS346)をスキップする。
例えば、現在のスリープモードが図7のStandbyモードであり、今回取得したスレッド非実行予測時間PTNPT−nが図7の閾値Tsdより大きい場合、ステップS345ではShutdownモードに移行可能と判定され、ステップS346ではStanbyモードからShutdownモードへのスリープ間移行制御が行われる。一方、現在のスリープモードが図7のShutdownモードであり、取得したスレッド非実行予測時間PTNPT−nが図7の閾値Tsb程度である場合、ステップS345ではより深いスリープモードには移行不可能と判定され、ステップS346の処理がスキップされる。
図11の制御後では、プロセッサP−1は、3回目のバリア開始時、スリープモードSL(BID−2:PTNPT−1)を継続している。しかし、3回目のバリア開始時に取得するスレッド非実行予測時間(BID−3:PTNPT−1)は、2回目のバリア開始時に取得したスレッド非実行予測時間(BID−2:PTNPT−1)よりも大きい。従って、本変形例2を適用すれば、電力モード制御部131は、3回目のバリア開始時、プロセッサP−1の電力モードをより深いスリープモードSL(BID−3:PTNPT−1)に移行させることができる。
以上のように、本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
<実施の形態2>
実施の形態1においては、バリア待ち状態のプロセッサを非動作のスリープモードとすることで、省電力化を実現させていた。つまり、実施の形態1においては、動作中のプロセッサについての省電力化については考慮されていなかった。そこで、実施の形態2においては、動作中のプロセッサへ供給するクロック周波数や電源電圧を予測情報に応じて動的にスケーリングさせるDVFS(Dynamic Voltage and Frequency Scaling)制御技術を新たに適用することを考える。このDVFS制御技術は、米Intel社のSpeedStep(登録商標)や米AMD(Advanced Micro Devices)社のPowerNow!(登録商標)等のような技術で既に実用化されている。実施の形態2では、この実用化されたDVFS技術と同様の制御を行う。
実施の形態2においては、予測情報として、スレッド非実行予測時間PTNPTの他に、バリア成立時間BETの予測時間であるバリア成立予測時間PBET(Predictive Barrier Establish Time)を用いる点で実施の形態1と異なる。また実施の形態2においては、バリア開始時にスリープモードを継続しない場合に、プロセッサの動作を、スレッド非実行予測時間PTNPTとバリア成立予測時間PBETの比率に応じた低速動作とするようにDVFS制御を行うか、あるいは、実施の形態1のようにスレッド非実行予測時間PTNPTに応じたスリープモードに移行させるか、省電力効果が大きい方(つまり、プロセッサで消費される電力が小さい方)を選択的に適用する。これにより、更なる省電力化を実現する。
<構成>
図20は、実施の形態2に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。実施の形態2に係るマルチプロセッサシステムは、図3に示した構成に対し、マルチプロセッサ制御装置1がマルチプロセッサ制御装置6に入れ代わり、マルチプロセッサ制御装置6が予測情報取得部61、タイマ12、及び電力制御部63により構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部61は、プロセッサP−1〜P−Nそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部63へ出力する。本実施形態では、予測情報として、スレッド非実行予測時間PTNPTと、バリア成立予測時間PBETとを用いる。以下、図21を参照して、予測情報取得部61の具体的な構成について説明する。図21は、予測情報取得部61の具体的な構成例を示す図である。予測情報取得部61は、バリア監視部611、履歴情報格納部612、及び予測情報生成部613により構成される。
バリア監視部611は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nのみを履歴情報格納部612へ出力する点で、実施の形態1のバリア監視部111とは異なる。その他については、バリア監視部111と同様である。
履歴情報格納部612は、入力されたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、図22に示す履歴テーブルに格納する。図22は、履歴情報格納部612内の履歴テーブルを示す図である。履歴情報格納部612は、バリア監視部611から入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部612は、バリア監視部611から入力されたバリア到達時間BAT−1〜BAT−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。履歴情報格納部612は、バリア監視部611から入力されたスレッド開始時間TST−1〜TST−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、バリア識別情報BID−mで特定されるプログラムブロックのバリア到達時間BAT−1〜BAT−N及びスレッド開始時間TST−1〜TST−Nとを、関連づけして格納する。なお、その他、フラグ等については、実施の形態1の履歴情報格納部112と同様である。
予測情報生成部613は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部612からバリア識別情報BID−mと関連付けられたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを読み出す。予測情報生成部613は、読み出したバリア到達時間BAT−1〜BAT−Nのうち、最大となるバリア到達時間をバリア成立予測時間PBETとして算出する。また予測情報生成部613は、読み出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを式(1)及び式(2)に代入することにより、スレッド非実行時間TNPT−1〜TNPT−Nを、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして算出する。予測情報生成部613は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを電力制御部63へ出力する。
電力制御部63は、予測情報取得部61から入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図23を参照して、電力制御部63の具体的な構成について説明する。図23は、電力制御部63の具体的な構成例を示す図である。電力制御部63は、電力モード制御部631、クロック信号制御部632、及び電源電圧制御部633とにより構成される。
電力モード制御部631は、図24に示すように、スリープ移行制御に加えて、DVFS制御を適用した低速動作モードへの移行制御をさらに行う点で、実施の形態1の電力モード制御部131と異なる。図24は、電力モード制御部631が設定する電力モードを示す図である。以下、異なる点を中心に説明する。
電力モード制御部631は、入力されたバリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nに基づいて、DVFS制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部631は、省電力効果が大きいと判定した制御を選択する。ここで、DVFS制御を選択した場合、電力モード制御部631は、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを式(3)に代入することによって、スレッド非実行時間が“0”となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。なお、式(3)では、プロセッサP−nを低速動作させるためのクロック周波数を低速クロック周波数Fslow−nとし、プロセッサP−nの通常動作時のクロック周波数を基準クロック周波数Fbaseとしている。
(低速クロック周波数Fslow−n)
=(基準クロック周波数Fbase)×(低速動作率)
=(基準クロック周波数Fbase)×(1−(スレッド非実行予測時間PTNPT−n)/(バリア成立予測時間PBET)) ・・・(3)
クロック信号制御部632は、電力モード制御部631で低速動作モードが選択された場合、制御信号CCTRL−nに従って、プロセッサP−nへ供給するクロック信号CLK−nのクロック周波数を、低速クロック周波数Fslow−nに変更する。電源電圧制御部633は、低速動作を維持可能な範囲で降圧した電源電圧VDD−nを、プロセッサP−nへ供給する。
<動作>
次に図25を参照して、実施の形態2に係るマルチプロセッサ制御装置6の動作について説明する。図25は、マルチプロセッサ制御装置6全体の動作の流れを示すフローチャートである。
図25において、バリア監視部611は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部613及び電力制御部63へ出力する(ステップS41)。またステップS41において、バリア監視部611は、バリア識別情報BID−mを予測情報生成部613及び電力制御部63へ出力する。ステップS41の次に、電力モード制御部631は、バリア監視部611からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる(ステップS42)。ステップS42の次に、予測情報生成部613は、バリア監視部611からバリア開始信号が入力されると、履歴情報格納部612からバリア識別情報BID−mと関連付けられたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを読み出し、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを算出して電力制御部63へ出力する(ステップS43)。ステップS43の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)が行われる。この個別の制御については、後述する。
ステップS45において、電力モード制御部631は、バリア監視部611からのバリア成立信号に基づいて、バリア識別情報BID−mで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部631は、共有メモリバス2を介して主記憶装置3のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部611からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部631は、タイマ12の計時を終了させ、リセットさせる(ステップS46)。
ステップS46の次に、バリア監視部611は、バリアタイミング信号とタイマ12の計時に基づいて、バリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを算出する(ステップS47)。またステップS47において、バリア監視部611は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、バリア識別情報BID−mとともに履歴情報格納部612へ出力する。
ステップS47の次に、履歴情報格納部612は、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、ステップS47で出力されたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nに更新する(ステップS48)。
ステップS48の次に、バリア監視部611は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する(ステップS49)。現在実行中のプログラムブロックが最後のプログラムブロックである場合(ステップS49でYes)、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合(ステップS49でNo)、処理はステップS41へ戻り、次のプログラムブロックについての動作が行われる。
図26を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)について具体的に説明する。ステップS44−1〜S44−Nの制御の流れは同じであるため、図26の例ではプロセッサP−nの制御の流れを記載している。
図26において、電力モード制御部631は、自身が出力する制御信号PCTRL−nを参照して、プロセッサP−nの現在の電力モードがスリープモードであるか否かを判定する(ステップS441)。
プロセッサP−nがスリープモードではないと判定した場合(ステップS441でNo)、電力モード制御部631は、プロセッサP−nの電力モードを、式(3)を用いて算出した低速クロック周波数Fslow−nで動作する低速動作モードに移行させる場合と、実施の形態1と同様にスレッド非実行予測時間PTNPT−nに応じたスリープモードに移行させる場合とで、消費電力がより小さくなることが見込まれる方を選択する(ステップS442)。
低速動作モードに移行させる場合(ステップS442でYes)、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nに低速動作モードによるスレッドの実行を開始させる(ステップS446)。具体的には、電力モード制御部631は、設定した低速動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、低速動作モードによるスレッドの実行を開始する。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS647)。スレッドがバリア到達したと判定した場合(ステップS647でYes)、処理は図25に示すステップS45へ進む。プロセッサP−nは、スレッド非実行時間が“0”となるように低速動作する。このため、動作がステップS447からステップS45へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
なお、低速動作モードの場合、バリア到達時間BAT−nは低速動作させた場合の値を示すので、通常動作させた場合の値に戻して履歴情報格納部612へ格納する必要がある。このため、図25のステップS47において、バリア監視部611は、低速動作モードでのバリア到達時間BAT−nを式(3)の低速動作率で除した値を算出する。
なお、全てのプロセッサが低速動作モードに移行した場合、あるいは他のプロセッサがバリア到達して低速動作モードのプロセッサのみがスレッド実行中の場合、低速動作モードから通常動作モードに復旧させる制御を行ってもよい。これにより、バリア成立時間を短縮させることができる。
一方、低速動作モードに移行させない場合(ステップS442でNo)、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS443)。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS444)。スレッドがバリア到達したと判定した場合(ステップS444でYes)、電力モード制御部631は、スリープ移行制御を行う。具体的には、電力モード制御部631は、ステップS43で出力されたスレッド非実行予測時間PTNPT−nに従って、移行させるべきスリープモードを設定する。電力モード制御部631は、設定したスリープモードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、スレッド非実行予測時間PTNPT−nに応じたスリープモードでバリア待ちになる。
また、プロセッサP−nがスリープモードであると判定した場合(ステップS441でYes)、電力モード制御部631は、タイマ12を監視して、ステップS43で出力されたスレッド非実行予測時間PTNPT−nが経過するのを待ってから、通常動作モードへの復旧制御を行う(ステップS448)。具体的には、電力モード制御部631は、タイマ12の計時がステップS43で出力されたスレッド非実行予測時間PTNPT−nを経過したとき、通常動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、スリープモードから通常動作モードへ復旧する。このように、ステップS441及びステップS448の動作により、プロセッサP−nが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間PTNPT−nだけスリープモードが継続することになる。
ステップS448の次に、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS449)。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS450)。スレッドがバリア到達したと判定した場合(ステップS450でYes)、処理は図25に示すステップS45へ進む。プロセッサP−nは、スレッド実行前に既にスレッド非実行予測時間PTNPT−nだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップS450からステップS45へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
次に、図27及び図28に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置6の制御によってプログラムがどのように実行されるかについて説明する。
図27は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図27では、ループ実行される並列プログラムブロックを、バリア識別情報BID−1で特定される並列プログラムブロックとしている。また、並列プログラムブロックを3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。また、プロセッサP−2の電力モードを低速動作モードに設定するものとする。また、図27の制御前については、図10の制御前と同様であるため、説明を省略する。また、図27の制御後は、図10の制御後と比べて、プロセッサP−2に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
プロセッサP−2は、1回目のバリア開始時(ステップS41)通常動作モードであるため、ステップS441ではNoと判定される。その後、プロセッサP−2は、ステップS442でYesと判定され、スレッド非実行予測時間PTNPT−2(=BWT−2)とバリア成立予測時間PBET(=BET)とに基づいて設定された低速動作モードによるスレッドの実行を開始する(ステップS446)。その後、プロセッサP−2のスレッドがバリア到達すると(ステップS447でYes)、プロセッサP−2は、通常動作モードを維持しながら、1回目のバリア成立を迎える。なお、プロセッサP−2は、スレッド非実行時間が“0”となるように低速動作する。このため、プロセッサP−2のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
1回目のバリア成立後、バリア到達時間BAT−2が式(3)の低速動作率で除算され、除算された結果に基づき履歴情報格納部612が更新される(ステップS48)。
2回目のバリア開始以降のプロセッサP−2の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
図28は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図28では、バリア識別情報BID−1で特定される並列プログラムブロックと、バリア識別情報BID−2で特定される並列プログラムブロックと、バリア識別情報BID−3で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、バリア識別情報BID−1で特定される並列プログラムブロックのバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。また、プロセッサP−2の電力モードを低速動作モードに設定するものとする。また、図28の制御前については、図11の制御前と同様であるため、説明を省略する。また、図28の制御後は、図11の制御後と比べて、プロセッサP−2に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
プロセッサP−2は、1回目のバリア開始時(ステップS41)通常動作モードであるため、ステップS441ではNoと判定される。その後、プロセッサP−2は、ステップS442でYesと判定され、スレッド非実行予測時間(BID−1:PTNPT−2)(=BID−1:BWT−2)と、バリア成立予測時間PBET(=BET−1)とに基づいて設定された低速動作モードによるスレッドの実行を開始する(ステップS446)。その後、プロセッサP−2のスレッドがバリア到達すると(ステップS447でYes)、プロセッサP−2は、通常動作モードを維持しながら、1回目のバリア成立を迎える。なお、プロセッサP−2は、スレッド非実行時間が“0”となるように低速動作する。このため、プロセッサP−2のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
1回目のバリア成立後、バリア到達時間(BID−1:BAT−2)が式(3)の低速動作率で除算され、除算された結果に基づき履歴情報格納部612が更新される(ステップS48)。
2回目のバリア開始以降のプロセッサP−2の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
以上のように、実施の形態2によれば、実施の形態1に対してDVFS制御が追加されている。これにより、更なる省電力化を実現する。
<実施の形態2の変形例1>
図22に示したように、実施の形態2において、履歴情報格納部612は、バリア識別情報BID毎にバリア到達時間BAT−1〜BAT−Nとスレッド開始時間TST−1〜TST−Nとを格納していた。このため、実施の形態1と同様、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置6の回路規模が増大する可能性があった。そこで、本変形例1では、履歴情報格納部612に格納されるデータ量を削減し、マルチプロセッサ制御装置6の回路規模の増大を抑制することを目的とする。
<構成>
図29は、本変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例1に係るマルチプロセッサシステムは、図20に示した構成に対し、マルチプロセッサ制御装置6がマルチプロセッサ制御装置6aに入れ代わり、マルチプロセッサ制御装置6aが予測情報取得部61a、タイマ12、及び電力制御部63aにより構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部61aは、プログラムブロック毎に予測情報を2つずつ取得し、取得した予測情報を電力制御部63aへ出力する。以下、図30を参照して、予測情報取得部61aの具体的な構成について説明する。図30は、予測情報取得部61aの具体的な構成例を示す図である。予測情報取得部61aは、バリア監視部611a、履歴情報格納部612a、及び予測情報生成部613aにより構成される。
バリア監視部611aは、算出したバリア到達時間BAT−1〜BAT−Nの統計値(例えば平均値)であるバリア到達時間BATをさらに算出し、履歴情報格納部612aへ出力する。また、バリア監視部611aは、算出したバリア到達時間BAT−1〜BAT−Nのうち、最大のバリア到達時間をバリア成立時間BETとして算出し、履歴情報格納部612aへ出力する。また、バリア監視部611aは、算出したスレッド開始時間TST−1〜TST−Nの統計値(例えば平均値)であるスレッド開始時間TSTをさらに算出し、履歴情報格納部612aへ出力する。またバリア監視部611aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部612aへ出力する。その他については、上述したバリア監視部611と同様である。
履歴情報格納部612aは、入力されたバリア成立時間BET、プロセッサ識別情報PID−n、バリア到達時間BAT、スレッド開始時間TSTを、図31に示す履歴テーブルに格納する。図31は、履歴情報格納部612a内の履歴テーブルを示す図である。履歴情報格納部612aは、バリア監視部611aから入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部612aは、バリア監視部611aから入力されたプロセッサ識別情報PID−nを、バリア識別情報BID−mが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部612aは、バリア監視部611aから入力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、プロセッサ識別情報PID−nと、バリア識別情報BID−mで特定されるプログラムブロックのバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTとを、関連づけして格納する。その他については、履歴情報格納部612と同様である。
予測情報生成部613aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部612aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−n、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを読み出す。予測情報生成部613aは、読み出したバリア到達時間BETをバリア成立予測時間PBETとして電力制御部63aへ出力する。予測情報生成部613aは、読み出したプロセッサ識別情報PID−nをプロセッサ予測識別情報PPID−nとして電力制御部63aへ出力する。また予測情報生成部613aは、読み出したバリア到達時間BET、バリア到達時間BAT、スレッド開始時間TSTを式(1)及び式(2)に代入することにより、スレッド非実行予測時間PTNPTを算出する。予測情報生成部613aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、スレッド非実行予測時間PTNPTを電力制御部63aへ出力する。
電力制御部63aは、予測情報取得部61aから入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図32を参照して、電力制御部63aの具体的な構成について説明する。図32は、電力制御部63aの具体的な構成例を示す図である。電力制御部63aは、電力モード制御部631a、クロック信号制御部632、及び電源電圧制御部633とにより構成される。電力制御部63aは、電力モード制御部631が電力モード制御部631aに入れ代わった点で、上述した電力制御部63と異なる。以下、異なる点を中心に説明する。
電力モード制御部631aは、入力されたバリア成立予測時間PBET、スレッド非実行予測時間PTNPTに基づいて、DVFS制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部631aは、省電力効果が大きいと判定した制御を選択する。ここで、DVFS制御を選択した場合、電力モード制御部631aは、バリア成立予測時間PBET、スレッド非実行予測時間PTNPTを式(3)に代入することによって、スレッド非実行時間が“0”となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。また、電力モード制御部631aには、図24に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部631aは、プロセッサ予測識別情報PPID−nで特定されるプロセッサP−nについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部631と同様である。
<動作>
次に図33を参照して、変形例1に係るマルチプロセッサ制御装置6aの動作について説明する。図33は、マルチプロセッサ制御装置6a全体の動作の流れを示すフローチャートである。図33に示すステップS51、S52、S55、S56、S59は、図25に示したステップS41、S42、S45、S46、S49と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS52の次のステップS53において、予測情報生成部613aは、バリア監視部611aからバリア開始信号が入力されると、履歴情報格納部612aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−n、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを読み出す。そして、予測情報生成部613aは、プロセッサ予測識別情報PPID−n、バリア成立予測時間PBET、スレッド非実行予測時間PTNPTを、電力制御部63aへ出力する(ステップS53)。ステップS53の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS54−1〜S54−N)が行われる。この個別の制御については、後述する。
ステップS56の次のステップS57において、バリア監視部611aは、バリアタイミング信号とタイマ12の計時に基づいて、統計値であるバリア到達時間BAT及びスレッド開始時間TSTと、バリア成立時間BETとを算出する。またステップS57において、バリア監視部611aは、算出したバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを履歴情報格納部612aへ出力する。
ステップS57の次に、履歴情報格納部612aは、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前の入力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを、ステップS57で出力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTに更新する(ステップS58)。またステップS58において、履歴情報格納部612aは、入力されたバリア識別情報BID−mに対応するタグ部に格納された従前のプロセッサ識別情報PID−nを、ステップS57で出力されたプロセッサ識別情報PID−nに更新する。
図34を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS54−1〜S54−N)について具体的に説明する。ステップS54−1〜S54−Nの制御の流れは同じであるため、図34の例ではプロセッサP−nの制御の流れを記載している。なお、図34に示すステップS541〜S544は、図26に示したステップS441〜S444と同様の処理を行い、ステップS546〜S551は、図26に示したステップS445〜S450と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS544の次のステップS545において、電力モード制御部631aは、制御対象のプロセッサがステップS53で出力されたプロセッサ予測識別情報PPID−nで特定されるプロセッサP−nであるか否かを判定する(ステップS545)。つまり、電力モード制御部631aは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合(ステップS545でNo)、電力モード制御部631aは、ステップS53で出力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する(ステップS546)。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合(ステップS545でYes)、スリープ移行制御(ステップS546)がスキップされる。ここでは、制御対象のプロセッサは、P−nであり、プロセッサ予測識別情報PPID−nで特定されるプロセッサもP−nである。よって、ステップS545では肯定の判定がなされることになる。
以上のように、本変形例1によれば、履歴情報格納部612aには、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTが1つずつ格納される。このため、履歴情報格納部612aの記憶容量を削減することができ、マルチプロセッサ制御装置6aの回路規模の増大を抑制することができる。
なお、上述では、バリア監視部611aが、バリア到達時間BAT−1〜BAT−Nの平均値、スレッド開始時間TST−1〜TST−Nの平均値を算出するとしたがこれに限定されない。バリア監視部611aは、バリア到達時間BAT−1〜BAT−Nのうち、最大となるバリア到達時間を除いて平均値を算出してもよい。バリア監視部611aは、スレッド開始時間TST−1〜TST−Nのうち、最小となるスレッド開始時間を除いて平均値を算出してもよい。
なお、上述では、バリア監視部611aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部612aへ出力していたが、これに限定されない。バリア監視部611aは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報PIDとしてもよい。
<実施の形態2の変形例2>
実施の形態2においては、各プロセッサ毎の個別制御を図26に示すようなフローで行っていた。しかしながら、図28に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
本変形例2におけるマルチプロセッサ制御装置は、図20〜図23、図25、図26に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図26のフローのみ異なる。以下、異なる点を中心に説明する。
<動作>
図35を参照して、本変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)について具体的に説明する。ステップS44−1〜S44−Nの制御の流れは同じであるため、図35の例ではプロセッサP−nの制御の流れを記載している。図35に示すステップS641〜S647は、図26に示すステップS441〜S447と同様の処理を行い、ステップS650〜S652は、図26に示すステップS448〜S450と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS641においてプロセッサP−nがスリープモードであると判定した場合、電力モード制御部631は、図25のステップS43で出力されたスレッド非実行予測時間PTNPT−nに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する(ステップS648)。電力モード制御部631は、より深いスリープモードに移行可能と判定した場合(ステップS648でYes)、プロセッサP−nの電力モードを、スレッド非実行予測時間PTNPT−nに応じたより深いスリープモードへ移行させる(ステップS649)。一方、電力モード制御部631は、より深いスリープモードに移行不可能と判定した場合(ステップS648でNo)、スリープ間移行制御(ステップS649)をスキップする。
例えば、図28の制御後では、プロセッサP−1は、3回目のバリア開始時、スリープモードSL(BID−2:PTNPT−1)を継続している。しかし、3回目のバリア開始時に取得するスレッド非実行予測時間(BID−3:PTNPT−1)は、2回目のバリア開始時に取得したスレッド非実行予測時間(BID−2:PTNPT−1)よりも大きい。従って、本変形例2を適用すれば、電力モード制御部631は、3回目のバリア開始時、プロセッサP−1の電力モードをより深いスリープモードSL(BID−3:PTNPT−1)に移行させることができる。
以上のように、本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
なお、上記実施の形態1、2では、共有記憶型のマルチプロセッサシステムの説明を行ったが、マルチプロセッサシステムには、私有記憶型も存在する。私有記憶型のマルチプロセッサシステムでは、各プロセッサに他のプロセッサから直接アクセスできない専用メモリがそれぞれ設けられている。専用メモリを有するプロセッサは、高速相互結合網で接続されている。なお、これらのプロセッサは、マルチプロセッサではなく、コンピュータが多数接続されたマルチコンピュータとして分類されることもある。このような私有記憶型のマルチプロセッサシステムは、共有記憶型のようにロック変数を直接用いることができないため、プロセッサ間の通信手段を用いたメッセージ交換によってバリア同期を実現する。しかしながら、本質的には通信手段が異なるのみであり、早期にバリア到達したスレッドは、最後のスレッドがバリア到達してバリア成立するまで待つ必要があるのは同様である。このため、私有記憶型のマルチプロセッサシステムにおいても、本発明のスリープ制御が適用可能である。また、ここでいうプロセッサは、プログラムカウンタを有するストアドプログラム方式のプロセッサに限定されない。通常動作モードと少なくとも1つのスリープモードを有すれば、応用分野に特化した専用の有限ステートマシンに従って動作する演算処理装置を、プロセッサの代わりに用いてもよい。
また、上記実施の形態1、2のマルチプロセッサシステムは、典型的には、画像・音声等の再生装置に適用可能である。図36は、実施の形態1のマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。例えば、MPEG規格に沿って符号化(エンコード)された画像・音声情報が、光ディスク92やメモリカード94に符号化ストリームデータとして格納されているとする。この場合、再生装置内のシステムLSIは、共有メモリバス2、メモリコントローラ7及びIOインタフェース8経由で各ドライブ91及び93から読み込んだ符号化ストリームデータをDRAMで構成される主記憶装置3に展開する。プロセッサP−1は、符号化ストリームデータを共有メモリバス2及びメモリコントローラ7を経由して主記憶装置3から取得し、画像符号化ストリームと音声符号化ストリームとに分離する。プロセッサP−1は、共有メモリバス2を経由して、画像符号化ストリームをプロセッサP−2に、音声符号化ストリームをプロセッサP−3に通知する。プロセッサP−2は、画像符号化ストリームを復号化(デコード)し、プロセッサP−3は、音声符号化ストリームを復号化する。ここで、プロセッサP−1は、表示時間に応じてプロセッサP−2、P−3とバリア同期を取りながら、復号化された画像・音声情報を、テレビなどの表示装置に出力する。この際、プロセッサP−1〜P−3に割り当てたシステム処理、画像復号化処理、音声復号化処理の負荷は、一般的に均等にならない。このため、本発明におけるマルチプロセッサ制御装置1によってプロセッサP−1〜P−3を制御することで、消費電力削減が得られる。
なお、上述では、システムLSIとしたが、集積度の違いにより、IC、スーパーLSI、ウルトラLSIと呼称されることもある。また集積回路化の手法は、システムLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。システムLSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、システムLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりシステムLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
本発明に係るマルチプロセッサ制御装置は、従来よりも大きな省電力効果を得ることが可能であり、消費電力が課題となる並列計算機システムなどにおいて利用することができる。
本発明は、マルチプロセッサ制御装置、その制御方法および集積回路に関し、より特定的には、複数のプロセッサの低消費電力化を実現するマルチプロセッサ制御装置、その制御方法および集積回路に関する。
複数のプロセッサそれぞれにプログラム内のスレッド(またはプロセス)を割り当てて、それらスレッドを並列的に実行するマルチプロセッサシステムでは、各スレッド間で共通に参照している変数の読み書き順序に矛盾が生じるのを防ぐため、全てのスレッドがスレッド毎に予め設定されたバリアポイントに到達するまで次の実行をブロックするバリア同期(Barrier Synchronization)を行っている。以下では、バリア同期を開始することをバリア開始、スレッドがバリアポイントに到達することをバリア到達、最後のスレッドがバリア到達することによりバリア同期が成立することをバリア成立、バリア到達したスレッドがバリア成立まで待機状態となることをバリア待ちと呼ぶこととする。
バリア同期を実現するマルチプロセッサシステムは、一般的に、複数のプロセッサが単一のアドレス空間を共有する共有記憶型の構成を有している。共有記憶型のマルチプロセッサシステムは、各プロセッサからアクセス可能な共有メモリバス上の主記憶装置に設けたロック変数を使用して、バリア同期を実現している。具体的には、まず、ロック変数を、並列実行を行う全プロセッサのスレッド数に設定しておく。プロセッサは、スレッドのバリア到達時にアトミック操作(共有メモリバスを占有してRead―Modified―Writeの一連の動作を行う操作)を行い、主記憶装置にアクセスしてロック変数を1つデクリメントさせる。その後、プロセッサは、バリア待ちとなる。バリア待ちのプロセッサは、他のプロセッサのアトミック操作によってロック変数が0になったかどうかを、ロック変数を繰り返しロードして判定し続ける。つまり、ロック変数が0になることはバリア成立を意味するので、プロセッサは、バリア成立まで、ロック変数のロードと判定を繰り返していることになる。このように、バリア待ちの間にロック変数のロードと判定を繰り返している状態を、スピンウェイト(Spin Waiting)状態と呼ぶ。
ここで、スピンウェイト状態のプロセッサは、本来割り当てられたスレッドを実行していないにもかかわらず、常に主記憶装置へのアクセスを伴った通常の動作状態になる。このため、スピンウェイト状態のプロセッサは、無駄な電力を消費していることになる。
そこで、このようなスピンウェイト状態のプロセッサを非動作状態にするスリープモードに移行させることにより、低消費電力化を実現する技術が提案されている。この技術では、論理回路へのクロック信号の供給を遮断するクロックゲーティング(Clock Gating)を行ったり、近年半導体プロセスの微細化に伴って増大しているリーク電力対策のためのスレッショルド電圧(Vth)の制御を行ったり、電源電圧(Vdd)の供給を遮断するパワーゲーティング(Power Gating)を行ったりして、スピンウェイト状態のプロセッサの電力モードをスリープモードに移行させている。例えば、英ARM社のARMプロセッサには、図37に示すように、プロセッサのとり得る複数の電力モードが設定されている。電力モードには、通常の動作状態のモード(通常動作モード)であるRunモードと、非動作状態のスリープモードである、Standbyモード、Dormantモード、及びShutdownモードとがある。Standbyモード、Dormantモード、及びShutdownモードは、プロセッサコア及びキャッシュメモリそれぞれに供給するクロック信号のON/OFFと電圧のON/OFFのさせ方が互いに異なっている。
ここで、Dormantモードは、パワーゲーティングを適用しているため、クロックゲーティングのみを適用したStandbyモードに比べて省電力効果が大きく、Standbyモードよりも深いスリープモードとなる。Shutdownモードは、キャッシュメモリに供給する電圧もOFFしているため、Dormantモードに比べて省電力効果が大きく、Dormantモードよりも深いスリープモードとなる。一方で、Dormantモードは、プロセッサコア内のレジスタ等の内部状態(コンテキスト)を、電圧OFF時にはプロセッサコアから外部メモリ等に退避させ、電圧ON時には外部メモリ等からプロセッサコアに復帰させる必要がある。また、プロセッサコアの電圧をONさせる場合、比較的長い安定化時間を要する。このため、Dormantモードは、Standbyモードに比べて、Runモードから移行する際、及びRunモードへ復旧する際の時間的なオーバーヘッドが大きい。Shutdownモードは、キャッシュメモリ内のコンテキストの退避・復帰や、キャッシュメモリの安定化時間も考慮する必要があるため、Dormantモードに比べて時間的なオーバーヘッドが大きい。このため、より省電力な(深い)スリープモードは、スリープモードを適用する時間が通常動作モードからの移行及び通常動作モードへの復旧に要する時間に比べて十分に長くなければ、適用できない。
そこで、より深いスリープモードを上記のようなバリア待ちのプロセッサに適用するには、バリア待ち時間を事前に見積もる必要がある。これを実現する従来技術として、バリア待ち時間を履歴によって予測し、予測したバリア待ち時間(バリア待ち予測時間)に応じてどの深さのスリープモードへ移行するかを決定する方法が提案されている(例えば、非特許文献1など)。具体的には、スレッドがバリア到達すると、当該スレッドを実行したプロセッサの電力モードを、通常動作モードからバリア待ち予想時間に応じたスリープモードに移行させる。その後、バリア成立するまでに電力モードがスリープモードから通常動作モードに復旧するように、バリア待ち予想時間から逆算したタイミングで通常動作モードへの復旧を開始する。このように、従来技術では、バリア待ち時間を履歴によって予測することで、より深いスリープモードをバリア待ちのプロセッサに適用させている。
ジェイ・リー(J.Li)、ジェイ・マルティネス(J.Martinez)、エム・ホアン(M.Huang)、「ザ スリフティ バリア: エナジ−アウェア シンクロナイゼイション イン シェアード−メモリ マルチプロセッサーズ(The Thrifty Barrier: Energy−Aware Synchronization in Shared−Memory Multiprocessors)」、イン プロシーディングス オブ ハイ−パフォーマンス コンピューター アーキテクチャ (エイチピーシーエー) '04,(In Proceedings of High−Performance Computer Architechture (HPCA) '04,)、アイトリプルイー コンピュータ ソサエティ ワシントン ディーシー ユーエスエー(IEEE Computer Society Washington, DC, USA)、米国、2004年、p14―23
しかしながら、上述したように、スリープモードへの移行及び通常動作モードへの復旧には時間的なオーバーヘッドが存在し、オーバーヘッドはスリープモードが深いほど大きい。さらに、上記従来技術では、スリープモードへの移行と通常動作モードへの復旧とを、1つのバリア同期毎に行っている。このため、上記従来技術では、スリープモードの適用時間に占めるオーバーヘッドの割合が大きく、実際の省電力効果は小さいという課題を有していた。
本発明は、上記の課題を解決するものであり、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することを目的とする。
本発明は、上記課題を解決するためになされた発明であり、本発明に係るマルチプロセッサ制御装置は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得手段と、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
なお、第1及び第2非実行時間情報は、例えば、後述する実施の形態におけるスレッド非実行予測時間に相当する情報である。また、第1ブロック及び第2ブロックは、例えば、後述する実施の形態におけるスレッド又はプロセスに相当するものである。
以上の構成によれば、電力制御手段は、2つの非実行時間情報を用いて、連続して並列実行される2つのプログラムブロックに跨った電力制御を行っている。これにより、1つの非実行時間情報を用いて、1つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来に対し、2つの非実行時間情報の用い方によっては各プロセッサについての更なる省電力化が可能となる。
好ましくは、電力制御手段は、取得手段において取得された第1及び第2非実行時間情報を用いて、第2プログラムブロックのバリア同期開始の前後で第1及び第2ブロックの実行状態が同じ状態となるように第1及び第2ブロックの実行開始タイミングをプロセッサ毎に制御するとともに、第2プログラムブロックのバリア同期開始の前後で第1及び第2ブロックを実行していないプロセッサがスリープ状態になり、第1及び第2ブロックを実行しているプロセッサが動作状態になるように複数のプロセッサへの電力供給を制御するとよい。この構成により、1つの非実行時間情報を用いて、1つのプログラムブロックが並列実行される間の複数のプロセッサへの電力供給の制御を行っていた従来と比べて、スリープ状態への移行と動作状態への復旧の回数を減らすことができるので、各プロセッサについての更なる省電力化が可能となる。
上記構成においてさらに、電力制御手段は、プロセッサを通常動作状態にする電力を表す通常動作モードと、プロセッサをスリープ状態にする電力を表すスリープモードとが予め設定されており、各プロセッサの電力モードを通常動作モード又はスリープモードに設定する電力モード制御手段と、各プロセッサへのクロック信号及び/又は電源電圧の供給を制御して、各プロセッサの電力モードを電力モード制御手段において設定された電力モードにそれぞれ移行させる移行手段とを有し、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサに対して、第2プログラムブロックのバリア同期開始から第2非実行時間情報が表す時間だけ第2ブロックの実行開始タイミングを遅延させるとともに、第1ブロックの実行終了から第2ブロックの実行開始までの間の電力モードを、スリープモードに設定するとよい。なお、移行手段は、例えば、後述する実施の形態におけるクロック信号制御部及び電源電圧制御部に相当するものである。なお、第2非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第2非実行時間であってもよい。
上記構成においてさらに、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1ブロックの実行終了から第2ブロックの実行開始までの間、第1非実行時間情報が表す時間に応じたスリープモードに設定するとよい。又は、電力モード制御手段は、第2非実行時間情報が表す時間が第1非実行時間情報が表す時間よりも大きい場合、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間、第1非実行時間情報が表す時間に応じたスリープモードに設定し、第2プログラムブロックのバリア同期開始から第2ブロックの実行開始までの間、第2非実行時間情報が表す時間に応じたスリープモードに設定するよい。又は、第1及び第2プログラムブロックは、同一のプログラムブロックであり、電力モード制御手段は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの電力モードを、第1非実行時間情報が表す時間と第2非実行時間情報が表す時間との和に応じたスリープモードに設定するとよい。
なお、第1非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第1非実行時間であり、第2非実行時間情報は、第1プログラムブロックのバリア同期成立前に第1ブロックの実行を終了したプロセッサの第2非実行時間であってもよい。
又は、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の統計時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の統計時間であってもよい。この場合においてさらに、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の平均時間であるとよい。又は、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間のうち最小の第1非実行時間を除いて算出された平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間のうち最小の第2非実行時間を除いて算出された平均時間であるとよい。
又は、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間のうちの最小の第1非実行時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間のうちの最小の第1非実行時間であってもよい。
上記構成においてさらに、電力モード制御手段には、さらに、プロセッサを低速動作状態にする電力を表す低速動作モードが予め設定されており、電力モード制御手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサに対して、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間の電力モードを第1非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第1ブロックの実行終了から第1プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサに対して、第2ブロックの実行終了から第2プログラムブロックのバリア同期成立までの間の電力モードを第2非実行時間情報が表す時間に応じたスリープモードに設定した場合にプロセッサで消費される電力と、第2ブロックの実行終了から第2プログラムブロックのバリア同期成立までの間の電力モードを低速動作モードに設定した場合にプロセッサで消費される電力とを比較して、プロセッサの電力モードをプロセッサで消費される電力が少ない方の電力モードに設定するとよい。
この場合においてさらに、取得手段は、第1及び第2バリア成立時間をさらに取得しており、電力モード制御手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第1非実行時間情報が表す時間と第1バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第1周波数を算出し、算出した第1周波数を低速動作モードとして設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードを低速動作モードに設定する場合、第2非実行時間情報が表す時間と第2バリア成立時間との比に応じた、通常動作状態であるプロセッサへ供給されるクロック信号の周波数よりも低い第2周波数を算出し、算出した第2周波数を低速動作モードとして設定し、移行手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第1周波数に設定し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサへのクロック信号の周波数を第2周波数に設定するとよい。
又は、電力モード制御手段は、各プロセッサの電力モードを全て低速動作モードに設定したとき、各プロセッサの電力モードを通常動作モードに設定し直すとよい。
又は、取得手段は、第1プログラムブロックのバリア同期開始時に第1ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第1ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第1ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第1バリア成立時間から減算して第1非実行時間を取得し、第2プログラムブロックのバリア同期開始時に第2ブロックの実行を開始するプロセッサの電力モードが低速動作モードに設定された場合、当該プロセッサが低速動作状態で第2ブロックの実行を開始してから実行を終了するまでの時間を、当該プロセッサが通常動作状態で第2ブロックの実行を開始してから実行を終了するまでの時間に換算し、換算した時間を第2バリア成立時間から減算して第2非実行時間を取得するとよい。
なお、取得手段は、第1及び第2非実行時間情報を記憶しており、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の統計時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の統計時間であってもよい。この場合においてさらに、第1非実行時間情報は、プロセッサ毎に表された第1非実行時間の平均時間であり、第2非実行時間情報は、プロセッサ毎に表された第2非実行時間の平均時間であるとよい。
また本発明は、マルチプロセッサ制御装置で行われる制御方法にも向けられており、本発明に係る制御方法は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御するマルチプロセッサ制御装置で行われる制御方法であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得ステップと、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御ステップとを含む。
また本発明は、集積回路にも向けられており、本発明に係る集積回路は、プログラムに含まれる第1プログラムブロックを複数の第1ブロックに分割してバリア同期を行いながら各第1ブロックを並列実行した後、当該第1プログラムブロックに連続する第2プログラムブロックを複数の第2ブロックに分割してバリア同期を行いながら各第2ブロックを並列実行する複数のプロセッサへの電力供給を制御する集積回路であって、第1プログラムブロックのバリア同期開始からバリア同期成立までの第1バリア成立時間のうち第1ブロックが実行されない時間を表す第1非実行時間であってプロセッサ毎に表された第1非実行時間に関する第1非実行時間情報と、第2プログラムブロックのバリア同期開始からバリア同期成立までの第2バリア成立時間のうち第2ブロックが実行されない時間を表す第2非実行時間であってプロセッサ毎に表された第2非実行時間に関する第2非実行時間情報とを取得する取得手段と、取得手段において取得された第1及び第2非実行時間情報を用いて、第1及び第2プログラムブロックが連続して並列実行される間の複数のプロセッサへの電力供給を制御する電力制御手段とを備える。
本発明によると、従来よりも大きな省電力効果を得ることが可能なマルチプロセッサ制御装置、その制御方法及び集積回路を提供することができる。
まず、各プロセッサによって実行されるプログラムの構成について具体的に説明する。
プログラムは、並列実行可能か否かを基準に複数のプログラムブロックに分割される。各プログラムブロックは、並列実行可能な並列プログラムブロック、又は並列実行不可能な逐次プログラムブロックのいずれかに分類される。
図1は、プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図である。プログラム5に記述された関数par(i)は、iについて並列実行可能であることを示す関数であり、関数seq()は、並列実行不可能であることを示す関数であるとする。この場合、プログラムブロック51は並列プログラムブロックとなり、プログラムブロック52は逐次プログラムブロックとなる。また、プログラム5に記述されたjはループ実行の回数を示しており、図1の記述によれば、並列プログラムブロック51が10回(j=0〜9)だけループ実行され、その後、逐次プログラムブロック52が実行されることになる。さらに図1では、並列プログラムブロック51をiについて4つのスレッド(i=0〜24、i=25〜49、i=50〜74、i=75〜99)に分割している。そして、分割した4つのスレッドそれぞれは、プロセッサP−1〜P−4に割り当てられている。例えば、プロセッサP−2は、バリア開始と同時にi=25〜49で示されるスレッドの実行を開始し、当該スレッドのバリア到達時(i=25〜49で示されるスレッドに係る実線矢印の先端)にアトミック操作を行い、主記憶装置にアクセスしてロック変数を1つデクリメントさせる。その後、プロセッサP−2は、i=25〜49で示されるスレッドの点線矢印のように、バリア成立するまでバリア待ちとなる。
スレッド開始時間TST(Thread Starting Time)は、バリア開始からスレッドの実行が開始されるまでの時間を示す。図1の例では、各スレッドのスレッド開始時間TSTをTST−1〜TST−4で示している。また図1の例では、各スレッドがバリア開始と同時に実行を開始しているので、スレッド開始時間TST−1〜TST−4は、全て"0"となっている。バリア成立時間BET(Barrier Establish Time)は、バリア開始からバリア成立までの時間を示す。バリア到達時間BAT(Barrier Arrival Time)は、バリア開始からスレッドのバリア到達までの時間を示す。図1の例では、各スレッドのバリア到達時間BATをBAT−1〜BAT−4で示している。バリア待ち時間BWT(Barrier Waiting Time)は、バリア到達からバリア成立までの時間を示す。図1の例では、各スレッドのバリア待ち時間BWTをBWT−1〜BWT−4で示している。図1の例では、i=0〜25で示されるスレッドのバリア到達が最後となるので、当該スレッドのバリア到達時にバリア成立となる。よって、バリア待ち時間BWT−1=0となっている。スレッド非実行時間TNPT(Thread Non Processing Time)は、バリア開始からバリア成立までの間で、スレッドが実行していない時間を示す。
ここで、バリア成立時間BET、バリア到達時間BAT、及びバリア待ち時間BWTには、式(1)のような関係が成立する。なお、式(1)のnは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。また、バリア成立時間BETは、最大のバリア到達時間BATが示す時間と一致する。
(バリア成立時間BET)=(バリア到達時間BAT−n)+(バリア待ち時間BWT−n) ・・・(1)
また、バリア待ち時間BWT、スレッド開始時間TST、及びスレッド非実行時間TNPTには、式(2)のような関係が成立する。なお、式(2)のnは、プロセッサを特定する番号であり、スレッドを特定する番号でもある。
(スレッド非実行時間TNPT−n)=(スレッド開始時間TST−n)+(バリア待ち時間BWT−n) ・・・(2)
なお、図2に示すように、並列プログラムブロック51がループ実行しない場合もある。図2は、プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図である。図2に示すプログラム5aには、並列プログラムブロック51及び53が記述されている。この記述によれば、図2に示すように、まず、4つのスレッドに分割された並列プログラムブロック51が並列実行され、その直後、4つのスレッドに分割された並列プログラムブロック53が並列実行されることになる。
次に、本発明の実施の形態に係るマルチプロセッサ制御装置について説明する。
<実施の形態1>
<構成>
図3を参照して、本発明の実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成について説明する。図3は、実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。図3において、マルチプロセッサシステムは、マルチプロセッサ制御装置1、プロセッサP−1〜P−N(Nは1以上の自然数)、共有メモリバス2、主記憶装置3、及び電源装置4により構成される。プロセッサP−1〜P−Nそれぞれは、共有メモリバス2を介して主記憶装置3と接続されており、主記憶装置3上の特定の共有メモリアドレスに割り当てたロック変数を用いた排他制御を行いながら、バリア同期を実現している。ただし、ロック変数は必ずしも主記憶装置3上に設けられる必要はない。例えば、マルチプロセッサ制御装置1上の特定の共有メモリアドレスにマッピングされた専用レジスタ上に設けられてもよい。
マルチプロセッサ制御装置1は、電源装置4とプロセッサP−1〜P−Nそれぞれと接続され、プロセッサP−1〜P−Nそれぞれについて、スリープモードへの移行と通常動作モードへの復旧とを制御する。マルチプロセッサ制御装置1は、予測情報取得部11、タイマ12、及び電力制御部13により構成される。
予測情報取得部11は、プロセッサP−1〜P−Nそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部13へ出力する。本実施形態では、予測情報として、スレッド非実行時間TNPTの予測時間であるスレッド非実行予測時間PTNPT(Predictive Thread Non Processing Time)を用いる。以下、図4を参照して、予測情報取得部11の具体的な構成について説明する。図4は、予測情報取得部11の具体的な構成例を示す図である。予測情報取得部11は、バリア監視部111、履歴情報格納部112、及び予測情報生成部113により構成される。
バリア監視部111は、プロセッサP−1〜P−Nそれぞれにおけるプログラムブロックの実行状態を監視して、バリアタイミング信号BT(Barrier Timing)を生成する。バリア監視部111は、バリアタイミング信号BTを生成すると同時に、生成したバリアタイミング信号BTを、予測情報生成部113及び電力制御部13へ出力する。バリアタイミング信号BTには、バリア開始タイミングを示すバリア開始信号、各スレッドのバリア到達タイミングを示すバリア到達信号、バリア成立タイミングを示すバリア成立信号、及び、各スレッドのスレッド開始タイミングを示すスレッド開始信号が含まれる。バリア監視部111は、例えば、プロセッサP−1〜P−Nそれぞれの実行命令を監視することで、バリア開始信号及びスレッド開始信号を検出することができる。また、上記実行命令のうち、ロック変数をディクリメントさせるアトミック操作を検出することで、バリア到達信号又はバリア成立信号を検出することができる。また例えば、バリア監視部111を共有メモリバス2と接続し、バリア監視部111の内部にバリアタイミング信号BTを生成するためのレジスタを設けた構成としてもよい。この場合、各プロセッサP−1〜P−Nが各タイミングでバリア監視部111のレジスタへアクセスすることで、バリア監視部111がそのタイミングを示すバリアタイミング信号BTを生成することができる。
またバリア監視部111は、実行されるプログラムブロックを特定するためのバリア識別情報BID(Barrier ID)を、内部のBIDレジスタに保持する。バリア識別情報BIDは、例えば、バリア開始ポイントの命令アドレス等で構成される。バリア監視部111は、BIDレジスタに保持したバリア識別情報BID−mを、履歴情報格納部112、予測情報生成部113、及び電力制御部13へ出力する。ここで、プログラムは、M(Mは1以上の自然数)個のプログラムブロックに分割されているとし、m(1以上M以下の自然数)はプログラムブロックを特定する番号であるとする。
またバリア監視部111は、バリア到達信号を生成したときにタイマ12を参照し、バリア到達時間BATを算出する。バリア到達信号の生成タイミングは、プロセッサP−1〜P−Nに応じて異なる。よって、バリア監視部111は、プロセッサP−1〜P−Nそれぞれについてのバリア到達時間BAT−1〜BAT−Nを算出することになる。同様に、バリア監視部111は、スレッド開始信号を生成したときにタイマ12を参照することで、プロセッサP−1〜P−Nそれぞれについてのスレッド開始時間TST−1〜TST−Nを算出する。バリア監視部111は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを式(1)及び式(2)に代入することにより、スレッド非実行時間TNPT−1〜TNPT−Nをそれぞれ算出する。バリア監視部111は、算出したスレッド非実行時間TNPT−1〜TNPT−Nを、履歴情報格納部112へ出力する。
履歴情報格納部112は、入力されたスレッド非実行時間TNPT−1〜TNPT−Nを、図5に示す履歴テーブルに格納する。図5は、履歴情報格納部112内の履歴テーブルを示す図である。図5において、履歴テーブルは、タグ部とデータ部とを有している。履歴情報格納部112は、バリア監視部111から入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部112は、バリア監視部111から入力されたスレッド非実行時間TNPT−1〜TNPT−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、バリア識別情報BID−mで特定されるプログラムブロックのスレッド非実行時間TNPT−1〜TNPT−Nとを、関連づけして格納する。
また履歴情報格納部112は、V(Valid)フラグ又はIV(Invalid)フラグからなるフラグ情報をタグ部のエントリに格納している。履歴情報格納部112は、タグ部のエントリと当該エントリに対応するデータ部の各エントリ(ライン)にバリア識別情報BID−m及び履歴情報が格納されると、バリア識別情報BID−mで特定されるプログラムブロックについて有効な履歴情報が存在するとして、そのラインのフラグをVフラグにセットする。一方、履歴情報格納部112は、タグ部のエントリと当該エントリに対応するデータ部の各エントリにバリア識別情報BID−m及び履歴情報が存在しない場合、そのラインのフラグをIVフラグにセットする。履歴情報格納部112は、入力されたバリア識別情報BID−m及び履歴情報を格納する際、入力されたバリア識別情報BID−mを含む有効な(Vフラグがセットされた)ラインが既に履歴テーブルに存在しているか否かを判定する。有効なラインが既に存在している場合、履歴情報格納部112は、その有効なラインに履歴情報を上書きして更新する。有効なラインが存在していない場合、履歴情報格納部112は、入力されたバリア識別情報BID−m及び履歴情報を空いているラインに格納し、そのラインのフラグをVフラグにセットする。
なお、履歴テーブルに格納できるライン数は有限であるため、全ラインのVフラグがセットされることが考えられる。この場合、プロセッサのキャッシュメモリの更新等に用いられるLRU(Least Recently Used)のような更新方式で、使用頻度の低いラインから上書きして更新するとよい。
また、プログラムブロックの初回実行時、履歴テーブルには、バリア識別情報BIDは格納されるものの、履歴情報は格納されていない。このため、履歴テーブル内の履歴情報の初期値として"0"を設定しておいてもよい。あるいは、事前にプログラムのステップ数や各ステップの実行レイテンシを考慮した静的解析を行って、各プロセッサのバリア到達時間を予測しておいてもよい。この場合、予測したバリア到達時間の中で最大となるバリア成立時間からバリア到達時間を減算することによりバリア待ち時間を求め、求めたバリア待ち時間をスレッド非実行情報の初期値として設定しておいてもよい。なお、この場合、スレッド開始時間を"0"としている。
また上述では、履歴情報格納部112は、スレッド非実行時間TNPT−1〜TNPT−Nを格納する際、単純に最新の値で更新するようにしていたが、これに限定されない。履歴情報格納部112は、過去の履歴情報も含めて統計値(例えば平均値など)を算出し、算出した統計値で更新してもよい。
予測情報生成部113は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部112からバリア識別情報BID−mと関連付けられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出し、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして、電力制御部13へ出力する。
電力制御部13は、予測情報取得部11から入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。また電力制御部13は、連続する2つのプログラムブロックに跨った電力制御を行う。以下、図6を参照して、電力制御部13の具体的な構成について説明する。図6は、電力制御部13の具体的な構成例を示す図である。電力制御部13は、電力モード制御部131、クロック信号制御部132、及び電源電圧制御部133とにより構成される。
電力モード制御部131は、バリア監視部111からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる。電力モード制御部131は、バリア監視部111からバリア成立信号が入力されると、タイマ12の計時を終了させ、リセットさせる。なお、タイマ12は、電力制御部13の内部に設けられてもよい。また、タイマ12は、マルチプロセッサ制御装置1の外部に設けられて共有メモリバス2と接続されていてもよい。この場合、電力モード制御部131は、共有メモリバス2を介してタイマ12を制御することなる。またこの場合、バリア監視部111を共有メモリバス2と接続し、バリア監視部111は共有メモリバス2を介してタイマ12を参照することなる。
また電力モード制御部131は、入力されたスレッド非実行予測時間PTNPT−1〜PTNPT−Nに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する。電力モード制御部131には、図7に示すようなスリープ移行判定閾値が予め設定されている。図7は、電力モード制御部131が設定する電力モードを示す図である。図7に示すスリープ移行判定閾値Tsb、Tdm、Tsdは、スリープモードへの移行時間、及び通常動作モードへの復旧時間を考慮しても、十分な省電力効果が見込まれるスリープ時間に設定される。電力モード制御部131は、例えばスレッド非実行予測時間PTNPT−1が0以上Tsb以下である場合、プロセッサP−1の電力モードを通常動作モードであるRunモードに設定する。スレッド非実行予測時間PTNPT−1が「0」に近い場合、スリープ時間が確保できないことが想定され、また、スレッドが最後にバリア到達することになるので、スリープモードに移行させる必要はない。一方、スレッド非実行予測時間PTNPT−1がTsbより大きくTdm以下である場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるStandbyモードに設定する。スレッド非実行予測時間PTNPT−1がTdmより大きくTsd以下である場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるDormantモードに設定する。スレッド非実行予測時間PTNPT−1がTsdより大きい場合、電力モード制御部131は、プロセッサP−1の電力モードをスリープモードであるShutdownモードに設定する。
なお、電力モード制御部131に設定される電力モードは、図7に示す範囲に限定されない。電力モード制御部131には、少なくとも、通常動作モードであるRunモードと1つのスリープモードとが設定されていればよい。また電力モード制御部131には、図7に示す電力モードとは異なる電力モードが設定されていてもよい。
電力モード制御部131は、プロセッサP−1〜P−Nそれぞれについて設定した電力モードを示す制御信号PCTRL−1〜PCTRL−Nを、プロセッサP−1〜P−Nへ出力する。また電力モード制御部131は、プロセッサP−1〜P−Nそれぞれについて設定した電力モードを示す制御信号を、クロック信号制御部132へは制御信号CCTRL−1〜CCTRL−Nとして出力し、電源電圧制御部133へは制御信号VCTRL−1〜VCTRL−Nとして出力する。なお、制御信号PCTRL−1〜PCTRL−N、CCTRL−1〜CCTRL−N、VCTRL−1〜VCTRL−Nは、割り込みデバック要求を示す信号であったり、ソフトリセットを示す信号であったり、リセットを示す信号であったりする。さらに、制御信号PCTRL−1〜PCTRL−Nは、スレッドの実行を開始させることを示す信号となる場合もある。詳細については、後述する。
クロック信号制御部132は、PLL(Phase−Locked Loop)回路等を用いて、制御信号CCTRL−1〜CCTRL−Nが示す各電力モードに従ったクロック信号CLK−1〜CLK−Nを生成する。クロック信号制御部132は、生成したクロック信号CLK−1〜CLK−Nを、プロセッサP−1〜P−Nへ出力する。
電源電圧制御部133は、電源装置4から入力される電源電圧を降圧するなどして、制御信号VCTRL−1〜VCTRL−Nが示す各電力モードに従った電源電圧VDD−1〜VDD−Nを生成する。電源電圧制御部133は、生成した電源電圧VDD−1〜VDD−NをプロセッサP−1〜P−Nへ供給する。
ここで、例えば、プロセッサP−1の電力モードをStandbyモードへ移行させる場合、電力モード制御部131は、Standbyモードを示す制御信号PCTRL−1をプロセッサP−1へ出力して、プロセッサP−1にStandbyモードへの移行を指示する。電力モード制御部131は、プロセッサP−1において割込みで復旧できる準備が整ったことを検知すると、クロック信号制御部132へStandbyモードを示す制御信号CCTRL−1を出力し、電源電圧制御部133へStandbyモードを示す制御信号VCTRL−1を出力する。クロック信号制御部132は、制御信号CCTRL−1に基づき、復旧に必要な割込みインターフェースを除くプロセッサコアやキャッシュメモリへのクロック信号CLK−1の出力を遮断する。電源電圧制御部133は、制御信号VCTRL−1に基づき、プロセッサコアやキャッシュメモリの電源電圧を、通常動作モードと同じ電源電圧にするか、あるいは、プロセッサコア内の各種レジスタやキャッシュメモリ内のデータ等の内部状態(コンテキスト)が揮発しない範囲で低電圧とする。
また例えば、プロセッサP−1の電力モードをShutdownモードへ移行させる場合、電力モード制御部131は、Shutdownモードを示す制御信号PCTRL−1をプロセッサP−1へ出力して、プロセッサP−1にShutdownモードへの移行を指示する。電力モード制御部131は、プロセッサP−1においてプロセッサコアやキャッシュメモリ内の全てのコンテキストが外部のメモリに退避されたことを検知すると、クロック信号制御部132へShutdownモードを示す制御信号CCTRL−1を出力し、電源電圧制御部133へShutdownモードを示す制御信号VCTRL−1を出力する。クロック信号制御部132は、制御信号CCTRL−1に基づき、プロセッサコアやキャッシュメモリへのクロック信号CLK−1の出力を遮断する。電源電圧制御部133は、制御信号VCTRL−1に基づき、プロセッサコアやキャッシュメモリの電源電圧を遮断する。
<動作>
次に図8を参照して、実施の形態1に係るマルチプロセッサ制御装置1の動作について説明する。図8は、マルチプロセッサ制御装置1全体の動作の流れを示すフローチャートである。
図8において、バリア監視部111は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部113及び電力制御部13へ出力する(ステップS11)。またステップS11において、バリア監視部111は、バリア識別情報BID−mを予測情報生成部113及び電力制御部13へ出力する。ステップS11の次に、電力モード制御部131は、バリア監視部111からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる(ステップS12)。ステップS12の次に、予測情報生成部113は、バリア監視部111からバリア開始信号が入力されると、履歴情報格納部112からバリア識別情報BID−mに関連づけられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出し、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして、電力制御部13へ出力する(ステップS13)。ステップS13の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)が行われる。この個別の制御については、後述する。
ステップS15において、電力モード制御部131は、バリア監視部111からのバリア成立信号に基づいて、バリア識別情報BID−mで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部131は、共有メモリバス2を介して主記憶装置3のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部111からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部131は、タイマ12の計時を終了させ、リセットさせる(ステップS16)。
ステップS16の次に、バリア監視部111は、バリアタイミング信号とタイマ12の計時に基づいて、スレッド非実行時間TNPT−1〜TNPT−Nを算出する(ステップS17)。またステップS17において、バリア監視部111は、算出したスレッド非実行時間TNPT−1〜TNPT−Nを、バリア識別情報BID−mとともに履歴情報格納部112へ出力する。
ステップS17の次に、履歴情報格納部112は、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のスレッド非実行時間TNPT−1〜TNPT−Nを、ステップS17で出力されたスレッド非実行時間TNPT−1〜TNPT−Nに更新する(ステップS18)。
ステップS18の次に、バリア監視部111は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する(ステップS19)。現在実行中のプログラムブロックが最後のプログラムブロックである場合(ステップS19でYes)、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合(ステップS19でNo)、処理はステップS11へ戻り、次のプログラムブロックについての動作が行われる。
図9を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)について具体的に説明する。ステップS14−1〜S14−Nの制御の流れは同じであるため、図9の例ではプロセッサP−nの制御の流れを記載している。
図9において、電力モード制御部131は、自身が出力する制御信号PCTRL−nを参照して、プロセッサP−nの現在の電力モードがスリープモードであるか否かを判定する(ステップS141)。
プロセッサP−nがスリープモードではないと判定した場合(ステップS141でNo)、電力モード制御部131は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS142)。電力モード制御部131は、バリア監視部111からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS143)。スレッドがバリア到達したと判定した場合(ステップS143でYes)、電力モード制御部131は、スリープ移行制御を行う。具体的には、電力モード制御部131は、ステップS13で出力されたスレッド非実行予測時間PTNPT−nに従って、移行させるべきスリープモードを設定する。電力モード制御部131は、設定したスリープモードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部132、電源電圧制御部133へそれぞれ出力する。これにより、プロセッサP−nは、スレッド非実行予測時間PTNPT−nに応じたスリープモードでバリア待ちになる。
一方、プロセッサP−nがスリープモードであると判定した場合(ステップS141でYes)、電力モード制御部131は、タイマ12を監視して、ステップS13で出力されたスレッド非実行予測時間PTNPT−nが経過するのを待ってから、通常動作モードへの復旧制御を行う(ステップS145)。具体的には、電力モード制御部131は、タイマ12の計時がステップS13で出力されたスレッド非実行予測時間PTNPT−nを経過したとき、通常動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部132、電源電圧制御部133へそれぞれ出力する。これにより、プロセッサP−nは、スリープモードから通常動作モードへ復旧する。このように、ステップS141及びステップS145の動作により、プロセッサP−nが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間PTNPT−nだけスリープモードが継続することになる。
なお、例えば図7のStandbyモードからの復旧であれば、電力モード制御部131が、割り込みデバック要求を示す制御信号CCTRL−nをクロック信号制御部132へ出力してクロック信号CLK−nの出力を再開させるだけで、プロセッサP−nは通常動作モードに復旧させることができる。一方、Shutdownモードからの復旧であれば、まず、電力モード制御部131が、リセットを示す制御信号CCTRL−n、VCTRL−nをクロック信号制御部132、電源電圧制御部133へ出力してクロック信号CLK−n及び電源電圧VDD−nの出力を再開させる。その後、プロセッサP−nを通常動作モードに復旧させるには、Shutdownモードへの移行時に退避した全コンテキストを復旧させる必要がある。このように、復旧時間は、スリープモードの深さに応じて異なる。このため、電力モード制御部131は、異なる復旧時間を考慮しながら、スレッド非実行予測時間PTNPT−nの経過前に復旧を開始するように、ステップS145の動作を行う。これにより、性能低下の影響を抑制できる。
ステップS145の次に、電力モード制御部131は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS146)。電力モード制御部131は、バリア監視部111からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS147)。スレッドがバリア到達したと判定した場合(ステップS147でYes)、処理は図8に示すステップS15へ進む。プロセッサP−nは、スレッド実行前に既にスレッド非実行予測時間PTNPT−nだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップS147からステップS15へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
次に、図10及び図11に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置1の制御によってプログラムがどのように実行されるかについて説明する。
図10は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図10では、ループ実行される並列プログラムブロックを、バリア識別情報BID−1で特定される並列プログラムブロックとしている。また、並列プログラムブロックを3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。
図10の制御前について説明する。プロセッサP−1は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。このときのプロセッサP−1のバリア待ち時間である"BWT−1"は、"0"となる。プロセッサP−2は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BWT−2"とする。プロセッサP−3は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BWT−3"とする。その後、以上の実行状態を繰り返しながら、並列プログラムブロックが実行される。
図10の制御後について説明する。履歴情報格納部112には、バリア識別情報BID−1について、スレッド非実行時間TNPT−1(=0)、TNPT−2(=BWT−2)、TNPT−3(=BWT−3)が格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−1が"0"であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
プロセッサP−2は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−2に応じたスリープモードSL(PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(PTNPT−2)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、1回目のステップS13で出力されたスレッド非実行予測時間PTNPT−3に応じたスリープモードSL(PTNPT−3)に移行する(ステップS144)。その後、プロセッサP−3は、スリープモードSL(PTNPT−3)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間TNPT−1がTST−1とBWT−1の和(=0)となるように、スレッド非実行時間TNPT−2がTST−2とBWT−2の和(=BWT−2)となるように、スレッド非実行時間TNPT−3がTST−3とBWT−3の和(=BWT−3)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、2回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、通常動作モードを維持しながら、2回目のバリア成立を迎える。これは、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−1が"0"であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。
プロセッサP−2は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−2が経過するまで、スリープモードSL(PTNPT−2)を継続する。スレッド非実行予測時間PTNPT−2が経過すると、プロセッサP−2は、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−2のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−2は、2回目のバリア成立を迎える。これは、プロセッサP−2のスレッドは、1回目のバリア待ち時間BWT−2と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ"0"になるからである。なお、スレッド開始時間TST−2は、スレッド非実行予測時間PTNPT−2と一致することになる。
プロセッサP−3は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間PTNPT−3が経過するまで、スリープモードSL(PTNPT−3)を継続する。スレッド非実行予測時間PTNPT−3が経過すると、プロセッサP−3は、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−3のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−3は、2回目のバリア成立を迎える。これは、プロセッサP−3のスレッドは、1回目のバリア待ち時間BWT−3と同じ時間だけバリア開始から遅れて実行を開始しており、スピンウェイト状態になる時間がほぼ"0"になるからである。なお、スレッド開始時間TST−3は、スレッド非実行予測時間PTNPT−3と一致することになる。
2回目のバリア成立後、スレッド非実行時間TNPT−1がTST−1とBWT−1の和(=0)となるように、スレッド非実行時間TNPT−2がTST−2とBWT−2の和(=BWT−2)となるように、スレッド非実行時間TNPT−3がTST−3とBWT−3の和(=BWT−3)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
3回目のバリア開始以降の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
図11は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図11では、バリア識別情報BID−1で特定される並列プログラムブロックと、バリア識別情報BID−2で特定される並列プログラムブロックと、バリア識別情報BID−3で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、バリア識別情報BID−1で特定される並列プログラムブロックのバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。
図11の制御前について説明する。プロセッサP−1は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドのバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。このときのプロセッサP−1のバリア待ち時間"BID−1:BWT−1"は、"0"となる。
プロセッサP−2は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−1:BWT−2"とする。
プロセッサP−3は、1回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、1回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から1回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−1:BWT−3"とする。
プロセッサP−1は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドは、2回目のバリア成立前にバリア到達する。その後、プロセッサP−1は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−2:BWT−1"とする。
プロセッサP−2は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドのバリア到達時間は、プロセッサP−1及びP−3に比べて長い。このため、プロセッサP−2のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。このときのプロセッサP−2のバリア待ち時間"BID−2:BWT−2"は、"0"となる。
プロセッサP−3は、2回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドは、2回目のバリア成立前にバリア到達する。その後、プロセッサP−3は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−2:BWT−3"とする。
プロセッサP−1は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−1のスレッドは、3回目のバリア成立前にバリア到達する。その後、プロセッサP−1は、バリア到達から3回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−3:BWT−1"とする。
プロセッサP−2は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−2のスレッドは、3回目のバリア成立前にバリア到達する。その後、プロセッサP−2は、バリア到達から3回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。このときのバリア待ち時間を"BID−3:BWT−2"とする。
プロセッサP−3は、3回目のバリア開始とほぼ同時にスレッドの実行を開始する。プロセッサP−3のスレッドのバリア到達時間は、プロセッサP−1及びP−2に比べて長い。このため、プロセッサP−3のスレッドがバリア到達すると同時に、3回目のバリア成立が起こる。このときのプロセッサP−3のバリア待ち時間"BID−3:BWT−3"は、"0"となる。
図11の制御後について説明する。履歴情報格納部112には、バリア識別情報BID−1について、スレッド非実行時間(BID−1:TNPT−1)(=0)、(BID−1:TNPT−2)(=BID−1:BWT−2)、(BID−1:TNPT−3)(=BID−1:BWT−3)が格納されているとする。また、履歴情報格納部112には、バリア識別情報BID−2について、スレッド非実行時間(BID−2:TNPT−1)(=BID−2:BWT−1)、(BID−2:TNPT−2)(=0)、(BID−2:TNPT−3)(=BID−2:BWT−3)が格納されているとする。また、履歴情報格納部112には、バリア識別情報BID−3について、スレッド非実行時間(BID−3:TNPT−1)(=BID−3:BWT−1)、(BID−3:TNPT−2)(=BID−3:BWT−2)、(BID−3:TNPT−3)(=0)が格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−1)が"0"であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−1のバリア到達時間は、プロセッサP−2及びP−3に比べて長い。このため、プロセッサP−1のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
プロセッサP−2は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−2)に応じたスリープモードSL(BID−1:PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(BID−1:PTNPT−2)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、1回目のステップS13で出力されたスレッド非実行予測時間(BID−1:PTNPT−3)に応じたスリープモードSL(BID−1:PTNPT−3)に移行する(ステップS144)。その後、プロセッサP−3は、スリープモードSL(BID−1:PTNPT−3)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間(BID−1:TNPT−1)が(BID−1:TST−1)と(BID−1:BWT−1)の和(=0)となるように、スレッド非実行時間(BID−1:TNPT−2)が(BID−1:TST−2)と(BID−1:BWT−2)の和となるように、スレッド非実行時間(BID−1:TNPT−3)が(BID−1:TST−3)と(BID−1:BWT−3)の和となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、2回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−1は、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−1)に応じたスリープモードSL(BID−2:PTNPT−1)に移行する(ステップS144)。その後、プロセッサP−1は、スリープモードSL(BID−2:PTNPT−1)を維持しながら、2回目のバリア成立を迎える。
プロセッサP−2は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−2)が経過するまで、スリープモードSL(BID−1:PTNPT−2)を継続する。ここで、スレッド非実行予測時間(BID−2:PTNPT−2)は"0"である。よって、プロセッサP−2は、即座に通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。なお、プロセッサP−2のスレッドのバリア到達時間は、プロセッサP−1及びP−3に比べて長い。また、スレッド非実行予測時間(BID−2:PTNPT−2)が"0"であり、ステップS144の処理によってはスリープモードに移行しない。このため、プロセッサP−2のスレッドがバリア到達すると同時に、2回目のバリア成立が起こる。
プロセッサP−3は、2回目のバリア開始(ステップS11)してから、2回目のステップS13で出力されたスレッド非実行予測時間(BID−2:PTNPT−3)が経過するまで、スリープモードSL(BID−1:PTNPT−3)を継続する。スレッド非実行予測時間(BID−2:PTNPT−3)が経過すると、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。その後、プロセッサP−3は、バリア到達から2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。
2回目のバリア成立後、スレッド非実行時間(BID−2:TNPT−1)が(BID−2:TST−1)と(BID−2:BWT−1)の和となるように、スレッド非実行時間(BID−2:TNPT−2)が(BID−2:TST−2)と(BID−2:BWT−2)の和となるように、スレッド非実行時間(BID−2:TNPT−3)が(BID−2:TST−3)と(BID−2:BWT−3)の和となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
プロセッサP−1は、3回目のバリア開始(ステップS11)してから、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−1)が経過するまで、スリープモードSL(BID−2:PTNPT−1)を継続する。スレッド非実行予測時間(BID−3:PTNPT−1)が経過すると、通常動作モードへ復旧し(ステップS145)、スレッドの実行を開始する(ステップS146)。プロセッサP−1のスレッドがバリア到達すると(ステップS147でYes)同時に、プロセッサP−1は、3回目のバリア成立を迎える。これは、プロセッサP−1のスレッドは、バリア待ち時間(BID−3:BWT−1)と同じ時間だけバリア開始から遅れて実行を開始しており、かつ、後述するプロセッサP−3のスレッドとの関係により、スピンウェイト状態になる時間がほぼ"0"になるからである。なお、スレッド開始時間(BID−3:TST−1)は、スレッド非実行予測時間(BID−3:PTNPT−1)と一致することになる。
プロセッサP−2は、3回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−2の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−2のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−2は、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−2)に応じたスリープモードSL(BID−3:PTNPT−2)に移行する(ステップS144)。その後、プロセッサP−2は、スリープモードSL(BID−3:PTNPT−2)を維持しながら、3回目のバリア成立を迎える。
プロセッサP−3は、3回目のバリア開始(ステップS11)とほぼ同時にスレッドの実行を開始する(ステップS142)。これは、プロセッサP−3の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS141でNoと判定されるからである。プロセッサP−3のスレッドがバリア到達すると(ステップS143でYes)、プロセッサP−3は、スリープモードに移行せず通常動作モードを維持しながら、3回目のバリア成立を迎える。これは、3回目のステップS13で出力されたスレッド非実行予測時間(BID−3:PTNPT−3)が"0"であり、ステップS144の処理によってはスリープモードに移行しないからである。また、プロセッサP−3のバリア到達時間は、プロセッサP−1及びP−2に比べて長い。このため、プロセッサP−3のスレッドがバリア到達すると同時に、3回目のバリア成立が起こる。
3回目のバリア成立後、スレッド非実行時間(BID−3:TNPT−1)が(BID−3:TST−1)と(BID−3:BWT−1)の和となるように、スレッド非実行時間(BID−3:TNPT−2)が(BID−3:TST−2)と(BID−3:BWT−2)の和となるように、スレッド非実行時間(BID−3:TNPT−3)が(BID−3:TST−3)と(BID−3:BWT−3)の和(=0)となるように、履歴情報格納部112の履歴情報が更新される(ステップS18)。
以上のように本実施形態によれば、バリア開始の前後でスレッドの実行状態が同じ状態となるように各プロセッサのスレッド実行開始タイミングを制御する(ステップS142、S146)。また、バリア開始(ステップS11)の直後に、各プロセッサの電力モード判定(ステップS141)を行う。そして、プロセッサの電力モードが既にスリープモードに移行されている場合には、そのスリープモードを継続させ、プロセッサの電力モードが通常動作モードのままである場合には、通常動作モードを継続させる。これにより、2つのプログラムブロックに跨ったスリープ制御を実現することができる。その結果、従来技術に比べて、スリープモードへの移行と通常動作モードへの復旧の回数を減らすことができ、更なる省電力化が可能となる。
なお、図8のステップS13では、予測情報生成部113が、履歴情報格納部112からバリア識別情報BID−mと関連付けられたスレッド非実行時間TNPT−1〜TNPT−Nを読み出すとしたが、これに限定されない。図10に示したように、同じ並列プログラムブロックがループ実行される場合には、次回に実行する並列プログラムブロック(m+1)を事前に把握できる。よってこの場合、予測情報生成部113は、バリア識別情報BID−m+1と関連づけられたスレッド非実行時間TNPT−1〜TNPT−Nも同時に読み出すとよい。そして、電力モード制御部131は、入力されたバリア識別情報BID−mのスレッド非実行予測時間PTNPT−nと、バリア識別情報BID−m+1のスレッド非実行予測時間PTNPT−nとの和に従って、プロセッサP−nの電力モードを設定する。これにより、現在実行中の並列プログラムブロックにおいて、2つのスレッド非実行予測時間の和に応じたスリープモードへの移行を実現することができる。その結果、スリープモードをより深いモードに設定することができ、更なる省電力化が可能となる。
なお、実行するプログラムブロックが逐次プログラムブロックの場合、同時に実行するスレッド数がプロセッサ数未満となる。この場合、スレッドの割り当てのないプロセッサが存在することになる。スレッドの割り当てのないプロセッサについては、電力モード判定でスリープ判定された場合(ステップS141でYes)、スリープ復旧制御(ステップS145)では何も行わずに、即座にバリア到達させ(ステップS147でYes)、スリープモードを継続させる。一方、電力モード判定でスリープ判定されない場合(ステップS141でNo)も、即座にバリア到達させ(ステップS143でYes)、スリープ移行制御(ステップS144)を行う。これにより、スレッドの割り当てのないプロセッサは、電力モード判定に関わらず、バリア開始後、即座にバリア到達することになる。このため、バリア到達時間がほぼ"0"となり、式(1)、(2)の関係からスレッド非実行時間がバリア成立時間と同等に大きな値となる。その結果、次回以降に上記逐次プログラムブロックを実行する場合、スレッド非実行予想時間が大きくなるので、プロセッサがスリープ移行制御(ステップS144)でより深いスリープモードに移行することが期待できる。
<実施の形態1の変形例1>
図5に示したように、実施の形態1において、履歴情報格納部112は、バリア識別情報BID毎にスレッド非実行時間TNPT−1〜TNPT−Nを格納していた。このため、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置1の回路規模が増大する可能性があった。そこで、本変形例1では、履歴情報格納部112に格納されるデータ量を削減し、マルチプロセッサ制御装置1の回路規模の増大を抑制することを目的とする。
<構成>
図12は、本変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例1に係るマルチプロセッサシステムは、図3に示した構成に対し、マルチプロセッサ制御装置1がマルチプロセッサ制御装置1aに入れ代わり、マルチプロセッサ制御装置1aが予測情報取得部11a、タイマ12、及び電力制御部13aにより構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部11aは、プログラムブロック毎に予測情報を1つずつ取得し、取得した予測情報を電力制御部13aへ出力する。以下、図13を参照して、予測情報取得部11aの具体的な構成について説明する。図13は、予測情報取得部11aの具体的な構成例を示す図である。予測情報取得部11aは、バリア監視部111a、履歴情報格納部112a、及び予測情報生成部113aにより構成される。
バリア監視部111aは、算出したスレッド非実行時間TNPT−1〜TNPT−Nの統計値(例えば平均値)であるスレッド非実行時間TNPTをさらに算出し、履歴情報格納部112aへ出力する点で、上述したバリア監視部111と異なる。またバリア監視部111aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部112aへ出力する点でも、上述したバリア監視部111と異なる。ここでは、バリア監視部111aは、プロセッサ識別情報PID−nを出力するものとする。nは、プロセッサを特定する番号である。その他については、バリア監視部111と同様である。
履歴情報格納部112aは、入力されたスレッド非実行時間TNPTを、図14に示す履歴テーブルに格納する。図14は、履歴情報格納部112a内の履歴テーブルを示す図である。履歴情報格納部112aは、バリア監視部111aから入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部112aは、バリア監視部111aから入力されたプロセッサ識別情報PID−nを、バリア識別情報BID−mが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部112aは、バリア監視部111aから入力されたスレッド非実行時間TNPTを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、プロセッサ識別情報PID−nと、バリア識別情報BID−mで特定されるプログラムブロックのスレッド非実行時間TNPTとを、関連づけして格納する。その他については、履歴情報格納部112と同様である。
予測情報生成部113aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部112aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−nとスレッド非実行時間TNPTを読み出し、プロセッサ予測識別情報PPID−n、スレッド非実行予測時間PTNPTとして、電力制御部13aへ出力する。
電力制御部13aは、予測情報取得部11aから入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図15を参照して、電力制御部13aの具体的な構成について説明する。図15は、電力制御部13aの具体的な構成例を示す図である。電力制御部13aは、電力モード制御部131a、クロック信号制御部132、及び電源電圧制御部133とにより構成される。電力制御部13aは、電力モード制御部131が電力モード制御部131aに入れ代わった点で、上述した電力制御部13と異なる。以下、異なる点を中心に説明する。
電力モード制御部131aは、入力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれに対して共通の電力モードを設定する。電力モード制御部131aには、図7に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部131aは、プロセッサ予測識別情報PPID−nで特定されるプロセッサP−nについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部131と同様である。
<動作>
次に図16を参照して、変形例1に係るマルチプロセッサ制御装置1aの動作について説明する。図16は、マルチプロセッサ制御装置1a全体の動作の流れを示すフローチャートである。図16に示すステップS21、S22、S25、S26、S29は、図8に示したステップS11、S12、S15、S16、S19と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS22の次のステップS23において、予測情報生成部113aは、バリア監視部111aからバリア開始信号が入力されると、履歴情報格納部112aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−nとスレッド非実行時間TNPTを読み出し、プロセッサ予測識別情報PPID−n、スレッド非実行予測時間PTNPTとして、電力制御部13aへ出力する(ステップS23)。ステップS23の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS24−1〜S24−N)が行われる。この個別の制御については、後述する。
ステップS26の次のステップS27において、バリア監視部111aは、バリアタイミング信号とタイマ12の計時に基づいて、スレッド非実行時間TNPTを算出する。またステップS27において、バリア監視部111aは、スレッド非実行時間TNPTと、プロセッサ識別情報PID−nと、バリア識別情報BID−mとを履歴情報格納部112aへ出力する。
ステップS27の次に、履歴情報格納部112aは、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のスレッド非実行時間TNPTを、ステップS27で出力されたスレッド非実行時間TNPTに更新する(ステップS28)。またステップS28において、履歴情報格納部112aは、入力されたバリア識別情報BID−mに対応するタグ部に格納された従前のプロセッサ識別情報PID−nを、ステップS27で出力されたプロセッサ識別情報PID−nに更新する。
図17を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS24−1〜S24−N)について具体的に説明する。ステップS24−1〜S24−Nの制御の流れは同じであるため、図17の例ではプロセッサP−nの制御の流れを記載している。なお、図17に示すステップS241〜S243は、図9に示したステップS141〜S143と同様の処理を行い、ステップS245〜S248は、図9に示したステップS144〜S147と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS243の次のステップS244において、電力モード制御部131aは、制御対象のプロセッサがステップS23で出力されたプロセッサ予測識別情報PPID−nで特定されるプロセッサP−nであるか否かを判定する。つまり、電力モード制御部131aは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合(ステップS244でNo)、電力モード制御部131aは、ステップS23で出力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する(ステップS245)。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合(ステップS244でYes)、スリープ移行制御(ステップS245)がスキップされる。ここでは、制御対象のプロセッサは、P−nであり、プロセッサ予測識別情報PPID−nで特定されるプロセッサもP−nである。よって、ステップS244では肯定の判定がなされることになる。
次に、図18に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置1aの制御によってプログラムがどのように実行されるかについて説明する。図18は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図18では、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。図18の制御前については、図10の制御前と同様であるので、説明を省略する。
図18の制御後について説明する。履歴情報格納部112aには、バリア識別情報BID−1について、スレッド非実行時間TNPT(BWT−1〜BWT−3の平均値)と、プロセッサ識別情報PID−1(プロセッサP−1を特定する情報)とが格納されているとする。
プロセッサP−1は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、1回目のバリア開始時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、1回目のバリア成立を迎える。これは、1回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−2のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−2は、1回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−2は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−2については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−2は、スリープモードSL(PTNPT)を維持しながら、1回目のバリア成立を迎える。
プロセッサP−3は、1回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−3のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−3は、1回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−3は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−3については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−3は、スリープモードSL(PTNPT)を維持しながら、1回目のバリア成立を迎える。
1回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1のままとなる。
プロセッサP−1は、2回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、1回目のバリア成立時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、2回目のバリア成立を迎える。これは、2回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、2回目のバリア開始(ステップS21)してから、2回目のステップS23で出力されたスレッド非実行予測時間PTNPTが経過するまで、スリープモードSL(PTNPT)を継続する。スレッド非実行予測時間PTNPTが経過すると、プロセッサP−2は、通常動作モードへ復旧し(ステップS246)、スレッドの実行を開始する(ステップS247)。図18の例では、プロセッサP−2のスレッドがバリア到達すると(ステップS248でYes)同時に、プロセッサP−2は、2回目のバリア成立を迎える。
プロセッサP−3は、2回目のバリア開始(ステップS21)してから、2回目のステップS23で出力されたスレッド非実行予測時間PTNPTが経過するまで、スリープモードSL(PTNPT)を継続する。スレッド非実行予測時間PTNPTが経過すると、プロセッサP−3は、通常動作モードへ復旧し(ステップS246)、スレッドの実行を開始する(ステップS247)。図18の例では、プロセッサP−3のスレッドがバリア到達すると(ステップS248でYes)、プロセッサP−3は、2回目のバリア成立までスピンウェイト(SW)状態でバリア待ちとなる。
2回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1のままとなる。
プロセッサP−1は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。これは、プロセッサP−1の電力モードは、2回目のバリア成立時、通常動作モードであるため、ステップS241でNoと判定されるからである。プロセッサP−1のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−1は、スリープモードに移行せず通常動作モードを維持しながら、3回目のバリア成立を迎える。これは、3回目のステップS23で出力されたプロセッサ予測識別情報PPID−1がプロセッサP−1を特定しており、ステップS244の判定がYesとなってステップS245のスリープ移行制御がスキップされるからである。
プロセッサP−2は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−2のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−2は、3回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−2は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−2については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−2は、スリープモードSL(PTNPT)を維持しながら、3回目のバリア成立を迎える。
プロセッサP−3は、3回目のバリア開始(ステップS21)とほぼ同時にスレッドの実行を開始する(ステップS242)。プロセッサP−3のスレッドがバリア到達すると(ステップS243でYes)、プロセッサP−3は、3回目のステップS23で出力されたスレッド非実行予測時間PTNPTに応じたスリープモードSL(PTNPT)に移行する(ステップS245)。なお、プロセッサP−3は、プロセッサ予測識別情報PPID−1で特定されるプロセッサP−1ではない。このため、プロセッサP−3については、ステップS244の判定がNoとなってステップS245のスリープ移行制御が行われる。その後、プロセッサP−3は、スリープモードSL(PTNPT)を維持しながら、3回目のバリア成立を迎える。
3回目のバリア成立後、スレッド非実行時間TNPTが、TST−1〜TST−N、BWT−1〜BWT−Nの平均値となるように、履歴情報格納部112aの履歴情報が更新される(ステップS28)。また、プロセッサP−1が最後にバリア到達するので、履歴情報格納部112aのプロセッサ識別情報は、PID−1となる。
以上のように、本変形例1によれば、履歴情報格納部112aには、1つのスレッド非実行時間TNPTのみが格納される。このため、履歴情報格納部112aの記憶容量を削減することができ、マルチプロセッサ制御装置1aの回路規模の増大を抑制することができる。
なお、上述では、バリア監視部111aが、スレッド非実行時間TNPT−1〜TNPT−Nの平均値を算出するとしたがこれに限定されない。バリア監視部111aは、スレッド非実行時間TNPT−1〜TNPT−Nのうち、値が"0"となるスレッド非実行時間を除いて平均値を算出してもよい。また、バリア監視部111aは、スレッド非実行時間TNPT−1〜TNPT−Nのうち、最小となるスレッド非実行時間を算出してもよいし、最大となるスレッド非実行時間を算出してもよい。
なお、上述では、バリア監視部111aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部112aへ出力していたが、これに限定されない。バリア監視部111aは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報PIDとしてもよい。
<実施の形態1の変形例2>
実施の形態1においては、各プロセッサ毎の個別制御を図9に示すようなフローで行っていた。しかしながら、図11に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
本変形例2におけるマルチプロセッサ制御装置は、図3〜図6、図8、図9に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図9のフローのみ異なる。以下、異なる点を中心に説明する。
<動作>
図19を参照して、本変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御(ステップS14−1〜S14−N)について具体的に説明する。ステップS14−1〜S14−Nの制御の流れは同じであるため、図19の例ではプロセッサP−nの制御の流れを記載している。図19に示すステップS341〜S344は、図9に示すステップS141〜S144と同様の処理を行い、ステップS347〜S349は、図9に示すステップS145〜S147と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS341においてプロセッサP−nがスリープモードであると判定した場合、電力モード制御部131は、図8のステップS13で出力されたスレッド非実行予測時間PTNPT−nに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する(ステップS345)。電力モード制御部131は、より深いスリープモードに移行可能と判定した場合(ステップS345でYes)、プロセッサP−nの電力モードを、スレッド非実行予測時間PTNPT−nに応じたより深いスリープモードへ移行させる(ステップS346)。一方、電力モード制御部131は、より深いスリープモードに移行不可能と判定した場合(ステップS345でNo)、スリープ間移行制御(ステップS346)をスキップする。
例えば、現在のスリープモードが図7のStandbyモードであり、今回取得したスレッド非実行予測時間PTNPT−nが図7の閾値Tsdより大きい場合、ステップS345ではShutdownモードに移行可能と判定され、ステップS346ではStanbyモードからShutdownモードへのスリープ間移行制御が行われる。一方、現在のスリープモードが図7のShutdownモードであり、取得したスレッド非実行予測時間PTNPT−nが図7の閾値Tsb程度である場合、ステップS345ではより深いスリープモードには移行不可能と判定され、ステップS346の処理がスキップされる。
図11の制御後では、プロセッサP−1は、3回目のバリア開始時、スリープモードSL(BID−2:PTNPT−1)を継続している。しかし、3回目のバリア開始時に取得するスレッド非実行予測時間(BID−3:PTNPT−1)は、2回目のバリア開始時に取得したスレッド非実行予測時間(BID−2:PTNPT−1)よりも大きい。従って、本変形例2を適用すれば、電力モード制御部131は、3回目のバリア開始時、プロセッサP−1の電力モードをより深いスリープモードSL(BID−3:PTNPT−1)に移行させることができる。
以上のように、本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
<実施の形態2>
実施の形態1においては、バリア待ち状態のプロセッサを非動作のスリープモードとすることで、省電力化を実現させていた。つまり、実施の形態1においては、動作中のプロセッサについての省電力化については考慮されていなかった。そこで、実施の形態2においては、動作中のプロセッサへ供給するクロック周波数や電源電圧を予測情報に応じて動的にスケーリングさせるDVFS(Dynamic Voltage and Frequency Scaling)制御技術を新たに適用することを考える。このDVFS制御技術は、米Intel社のSpeedStep(登録商標)や米AMD(Advanced Micro Devices)社のPowerNow!(登録商標)等のような技術で既に実用化されている。実施の形態2では、この実用化されたDVFS技術と同様の制御を行う。
実施の形態2においては、予測情報として、スレッド非実行予測時間PTNPTの他に、バリア成立時間BETの予測時間であるバリア成立予測時間PBET(Predictive Barrier Establish Time)を用いる点で実施の形態1と異なる。また実施の形態2においては、バリア開始時にスリープモードを継続しない場合に、プロセッサの動作を、スレッド非実行予測時間PTNPTとバリア成立予測時間PBETの比率に応じた低速動作とするようにDVFS制御を行うか、あるいは、実施の形態1のようにスレッド非実行予測時間PTNPTに応じたスリープモードに移行させるか、省電力効果が大きい方(つまり、プロセッサで消費される電力が小さい方)を選択的に適用する。これにより、更なる省電力化を実現する。
<構成>
図20は、実施の形態2に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。実施の形態2に係るマルチプロセッサシステムは、図3に示した構成に対し、マルチプロセッサ制御装置1がマルチプロセッサ制御装置6に入れ代わり、マルチプロセッサ制御装置6が予測情報取得部61、タイマ12、及び電力制御部63により構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部61は、プロセッサP−1〜P−Nそれぞれについて、プログラムブロック毎の予測情報を取得し、取得した予測情報を電力制御部63へ出力する。本実施形態では、予測情報として、スレッド非実行予測時間PTNPTと、バリア成立予測時間PBETとを用いる。以下、図21を参照して、予測情報取得部61の具体的な構成について説明する。図21は、予測情報取得部61の具体的な構成例を示す図である。予測情報取得部61は、バリア監視部611、履歴情報格納部612、及び予測情報生成部613により構成される。
バリア監視部611は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nのみを履歴情報格納部612へ出力する点で、実施の形態1のバリア監視部111とは異なる。その他については、バリア監視部111と同様である。
履歴情報格納部612は、入力されたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、図22に示す履歴テーブルに格納する。図22は、履歴情報格納部612内の履歴テーブルを示す図である。履歴情報格納部612は、バリア監視部611から入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部612は、バリア監視部611から入力されたバリア到達時間BAT−1〜BAT−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。履歴情報格納部612は、バリア監視部611から入力されたスレッド開始時間TST−1〜TST−Nを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、バリア識別情報BID−mで特定されるプログラムブロックのバリア到達時間BAT−1〜BAT−N及びスレッド開始時間TST−1〜TST−Nとを、関連づけして格納する。なお、その他、フラグ等については、実施の形態1の履歴情報格納部112と同様である。
予測情報生成部613は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部612からバリア識別情報BID−mと関連付けられたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを読み出す。予測情報生成部613は、読み出したバリア到達時間BAT−1〜BAT−Nのうち、最大となるバリア到達時間をバリア成立予測時間PBETとして算出する。また予測情報生成部613は、読み出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを式(1)及び式(2)に代入することにより、スレッド非実行時間TNPT−1〜TNPT−Nを、スレッド非実行予測時間PTNPT−1〜PTNPT−Nとして算出する。予測情報生成部613は、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを電力制御部63へ出力する。
電力制御部63は、予測情報取得部61から入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図23を参照して、電力制御部63の具体的な構成について説明する。図23は、電力制御部63の具体的な構成例を示す図である。電力制御部63は、電力モード制御部631、クロック信号制御部632、及び電源電圧制御部633とにより構成される。
電力モード制御部631は、図24に示すように、スリープ移行制御に加えて、DVFS制御を適用した低速動作モードへの移行制御をさらに行う点で、実施の形態1の電力モード制御部131と異なる。図24は、電力モード制御部631が設定する電力モードを示す図である。以下、異なる点を中心に説明する。
電力モード制御部631は、入力されたバリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nに基づいて、DVFS制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部631は、省電力効果が大きいと判定した制御を選択する。ここで、DVFS制御を選択した場合、電力モード制御部631は、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを式(3)に代入することによって、スレッド非実行時間が"0"となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。なお、式(3)では、プロセッサP−nを低速動作させるためのクロック周波数を低速クロック周波数Fslow−nとし、プロセッサP−nの通常動作時のクロック周波数を基準クロック周波数Fbaseとしている。
(低速クロック周波数Fslow−n)
=(基準クロック周波数Fbase)×(低速動作率)
=(基準クロック周波数Fbase)×(1−(スレッド非実行予測時間PTNPT−n)/(バリア成立予測時間PBET)) ・・・(3)
クロック信号制御部632は、電力モード制御部631で低速動作モードが選択された場合、制御信号CCTRL−nに従って、プロセッサP−nへ供給するクロック信号CLK−nのクロック周波数を、低速クロック周波数Fslow−nに変更する。電源電圧制御部633は、低速動作を維持可能な範囲で降圧した電源電圧VDD−nを、プロセッサP−nへ供給する。
<動作>
次に図25を参照して、実施の形態2に係るマルチプロセッサ制御装置6の動作について説明する。図25は、マルチプロセッサ制御装置6全体の動作の流れを示すフローチャートである。
図25において、バリア監視部611は、バリア開始時にバリア開始信号を生成し、生成したバリア開始信号を、予測情報生成部613及び電力制御部63へ出力する(ステップS41)。またステップS41において、バリア監視部611は、バリア識別情報BID−mを予測情報生成部613及び電力制御部63へ出力する。ステップS41の次に、電力モード制御部631は、バリア監視部611からバリア開始信号が入力されると、共有メモリバス2を介して主記憶装置3内のロック変数をプロセッサ数あるいはスレッド数に初期値設定し、タイマ12の計時を開始させる(ステップS42)。ステップS42の次に、予測情報生成部613は、バリア監視部611からバリア開始信号が入力されると、履歴情報格納部612からバリア識別情報BID−mと関連付けられたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを読み出し、バリア成立予測時間PBET、スレッド非実行予測時間PTNPT−1〜PTNPT−Nを算出して電力制御部63へ出力する(ステップS43)。ステップS43の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)が行われる。この個別の制御については、後述する。
ステップS45において、電力モード制御部631は、バリア監視部611からのバリア成立信号に基づいて、バリア識別情報BID−mで特定されるプログラムブロックについてバリア成立になったか否かを判定する。なお、電力モード制御部631は、共有メモリバス2を介して主記憶装置3のロック変数を参照することにより、バリア成立になったか否かを判定してもよい。バリア監視部611からバリア成立信号が入力されてバリア同期が成立したと判定したとき、電力モード制御部631は、タイマ12の計時を終了させ、リセットさせる(ステップS46)。
ステップS46の次に、バリア監視部611は、バリアタイミング信号とタイマ12の計時に基づいて、バリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを算出する(ステップS47)。またステップS47において、バリア監視部611は、算出したバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、バリア識別情報BID−mとともに履歴情報格納部612へ出力する。
ステップS47の次に、履歴情報格納部612は、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前のバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nを、ステップS47で出力されたバリア到達時間BAT−1〜BAT−N、スレッド開始時間TST−1〜TST−Nに更新する(ステップS48)。
ステップS48の次に、バリア監視部611は、バリア開始信号が再度生成可能か否かを判断することによって、現在実行中のプログラムブロックが最後のプログラムブロックであるか否かを判定する(ステップS49)。現在実行中のプログラムブロックが最後のプログラムブロックである場合(ステップS49でYes)、処理は終了する。現在実行中のプログラムブロックが最後のプログラムブロックでない場合(ステップS49でNo)、処理はステップS41へ戻り、次のプログラムブロックについての動作が行われる。
図26を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)について具体的に説明する。ステップS44−1〜S44−Nの制御の流れは同じであるため、図26の例ではプロセッサP−nの制御の流れを記載している。
図26において、電力モード制御部631は、自身が出力する制御信号PCTRL−nを参照して、プロセッサP−nの現在の電力モードがスリープモードであるか否かを判定する(ステップS441)。
プロセッサP−nがスリープモードではないと判定した場合(ステップS441でNo)、電力モード制御部631は、プロセッサP−nの電力モードを、式(3)を用いて算出した低速クロック周波数Fslow−nで動作する低速動作モードに移行させる場合と、実施の形態1と同様にスレッド非実行予測時間PTNPT−nに応じたスリープモードに移行させる場合とで、消費電力がより小さくなることが見込まれる方を選択する(ステップS442)。
低速動作モードに移行させる場合(ステップS442でYes)、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nに低速動作モードによるスレッドの実行を開始させる(ステップS446)。具体的には、電力モード制御部631は、設定した低速動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、低速動作モードによるスレッドの実行を開始する。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS447)。スレッドがバリア到達したと判定した場合(ステップS447でYes)、処理は図25に示すステップS45へ進む。プロセッサP−nは、スレッド非実行時間が"0"となるように低速動作する。このため、動作がステップS447からステップS45へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
なお、低速動作モードの場合、バリア到達時間BAT−nは低速動作させた場合の値を示すので、通常動作させた場合の値に戻して履歴情報格納部612へ格納する必要がある。このため、図25のステップS47において、バリア監視部611は、低速動作モードでのバリア到達時間BAT−nを式(3)の低速動作率で除した値を算出する。
なお、全てのプロセッサが低速動作モードに移行した場合、あるいは他のプロセッサがバリア到達して低速動作モードのプロセッサのみがスレッド実行中の場合、低速動作モードから通常動作モードに復旧させる制御を行ってもよい。これにより、バリア成立時間を短縮させることができる。
一方、低速動作モードに移行させない場合(ステップS442でNo)、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS443)。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS444)。スレッドがバリア到達したと判定した場合(ステップS444でYes)、電力モード制御部631は、スリープ移行制御を行う。具体的には、電力モード制御部631は、ステップS43で出力されたスレッド非実行予測時間PTNPT−nに従って、移行させるべきスリープモードを設定する。電力モード制御部631は、設定したスリープモードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、スレッド非実行予測時間PTNPT−nに応じたスリープモードでバリア待ちになる。
また、プロセッサP−nがスリープモードであると判定した場合(ステップS441でYes)、電力モード制御部631は、タイマ12を監視して、ステップS43で出力されたスレッド非実行予測時間PTNPT−nが経過するのを待ってから、通常動作モードへの復旧制御を行う(ステップS448)。具体的には、電力モード制御部631は、タイマ12の計時がステップS43で出力されたスレッド非実行予測時間PTNPT−nを経過したとき、通常動作モードを示す制御信号PCTRL−n、CCTRL−n、VCTRL−nを、プロセッサP−n、クロック信号制御部632、電源電圧制御部633へそれぞれ出力する。これにより、プロセッサP−nは、スリープモードから通常動作モードへ復旧する。このように、ステップS441及びステップS448の動作により、プロセッサP−nが前回のバリア成立時にスリープモードへ移行していた場合、今回のバリア同期では、バリア開始からスレッド非実行予測時間PTNPT−nだけスリープモードが継続することになる。
ステップS448の次に、電力モード制御部631は、制御信号PCTRL−nを用いて、プロセッサP−nにスレッドの実行を即座に開始させる(ステップS449)。電力モード制御部631は、バリア監視部611からのバリア到達信号に基づき、プロセッサP−nのスレッドがバリア到達したか否かを判定する(ステップS450)。スレッドがバリア到達したと判定した場合(ステップS450でYes)、処理は図25に示すステップS45へ進む。プロセッサP−nは、スレッド実行前に既にスレッド非実行予測時間PTNPT−nだけスリープ時間を確保しているため、これ以上のスリープはできないと想定される。このため、動作がステップS450からステップS45へ進むことにより、プロセッサP−nは、スピンウェイトのような状態でバリア待ちとなる。
次に、図27及び図28に示す具体例を参照して、以上に説明したマルチプロセッサ制御装置6の制御によってプログラムがどのように実行されるかについて説明する。
図27は、同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図である。図27では、ループ実行される並列プログラムブロックを、バリア識別情報BID−1で特定される並列プログラムブロックとしている。また、並列プログラムブロックを3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、1回目のバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。また、プロセッサP−2の電力モードを低速動作モードに設定するものとする。また、図27の制御前については、図10の制御前と同様であるため、説明を省略する。また、図27の制御後は、図10の制御後と比べて、プロセッサP−2に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
プロセッサP−2は、1回目のバリア開始時(ステップS41)通常動作モードであるため、ステップS441ではNoと判定される。その後、プロセッサP−2は、ステップS442でYesと判定され、スレッド非実行予測時間PTNPT−2(=BWT−2)とバリア成立予測時間PBET(=BET)とに基づいて設定された低速動作モードによるスレッドの実行を開始する(ステップS446)。その後、プロセッサP−2のスレッドがバリア到達すると(ステップS447でYes)、プロセッサP−2は、通常動作モードを維持しながら、1回目のバリア成立を迎える。なお、プロセッサP−2は、スレッド非実行時間が"0"となるように低速動作する。このため、プロセッサP−2のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
1回目のバリア成立後、バリア到達時間BAT−2が式(3)の低速動作率で除算され、除算された結果に基づき履歴情報格納部612が更新される(ステップS48)。
2回目のバリア開始以降のプロセッサP−2の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
図28は、異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図である。図28では、バリア識別情報BID−1で特定される並列プログラムブロックと、バリア識別情報BID−2で特定される並列プログラムブロックと、バリア識別情報BID−3で特定される並列プログラムブロックとが連続して実行されている。また、各並列プログラムブロックをそれぞれ3つのスレッドに分割しており、分割された3つのスレッドそれぞれは、プロセッサP−1〜P−3に割り当てられている。また、バリア識別情報BID−1で特定される並列プログラムブロックのバリア開始時、全てのプロセッサP−1〜P−3の電力モードが通常動作モードであるとする。また、プロセッサP−2の電力モードを低速動作モードに設定するものとする。また、図28の制御前については、図11の制御前と同様であるため、説明を省略する。また、図28の制御後は、図11の制御後と比べて、プロセッサP−2に低速動作モードを適用した点のみ異なる。以下、異なる点を中心に説明する。
プロセッサP−2は、1回目のバリア開始時(ステップS41)通常動作モードであるため、ステップS441ではNoと判定される。その後、プロセッサP−2は、ステップS442でYesと判定され、スレッド非実行予測時間(BID−1:PTNPT−2)(=BID−1:BWT−2)と、バリア成立予測時間PBET(=BET−1)とに基づいて設定された低速動作モードによるスレッドの実行を開始する(ステップS446)。その後、プロセッサP−2のスレッドがバリア到達すると(ステップS447でYes)、プロセッサP−2は、通常動作モードを維持しながら、1回目のバリア成立を迎える。なお、プロセッサP−2は、スレッド非実行時間が"0"となるように低速動作する。このため、プロセッサP−2のスレッドがバリア到達すると同時に、1回目のバリア成立が起こる。
1回目のバリア成立後、バリア到達時間(BID−1:BAT−2)が式(3)の低速動作率で除算され、除算された結果に基づき履歴情報格納部612が更新される(ステップS48)。
2回目のバリア開始以降のプロセッサP−2の実行状態については、1回目のバリア開始以降と同じ実行状態となるため、説明を省略する。
以上のように、実施の形態2によれば、実施の形態1に対してDVFS制御が追加されている。これにより、更なる省電力化を実現する。
<実施の形態2の変形例1>
図22に示したように、実施の形態2において、履歴情報格納部612は、バリア識別情報BID毎にバリア到達時間BAT−1〜BAT−Nとスレッド開始時間TST−1〜TST−Nとを格納していた。このため、実施の形態1と同様、マルチプロセッサシステムに搭載するプロセッサ数に比例してデータ部の記憶容量を増やす必要がある。その結果、マルチプロセッサ制御装置6の回路規模が増大する可能性があった。そこで、本変形例1では、履歴情報格納部612に格納されるデータ量を削減し、マルチプロセッサ制御装置6の回路規模の増大を抑制することを目的とする。
<構成>
図29は、本変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図である。本変形例1に係るマルチプロセッサシステムは、図20に示した構成に対し、マルチプロセッサ制御装置6がマルチプロセッサ制御装置6aに入れ代わり、マルチプロセッサ制御装置6aが予測情報取得部61a、タイマ12、及び電力制御部63aにより構成される点のみ異なる。以下、異なる点を中心に説明する。
予測情報取得部61aは、プログラムブロック毎に予測情報を2つずつ取得し、取得した予測情報を電力制御部63aへ出力する。以下、図30を参照して、予測情報取得部61aの具体的な構成について説明する。図30は、予測情報取得部61aの具体的な構成例を示す図である。予測情報取得部61aは、バリア監視部611a、履歴情報格納部612a、及び予測情報生成部613aにより構成される。
バリア監視部611aは、算出したバリア到達時間BAT−1〜BAT−Nの統計値(例えば平均値)であるバリア到達時間BATをさらに算出し、履歴情報格納部612aへ出力する。また、バリア監視部611aは、算出したバリア到達時間BAT−1〜BAT−Nのうち、最大のバリア到達時間をバリア成立時間BETとして算出し、履歴情報格納部612aへ出力する。また、バリア監視部611aは、算出したスレッド開始時間TST−1〜TST−Nの統計値(例えば平均値)であるスレッド開始時間TSTをさらに算出し、履歴情報格納部612aへ出力する。またバリア監視部611aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部612aへ出力する。その他については、上述したバリア監視部611と同様である。
履歴情報格納部612aは、入力されたバリア成立時間BET、プロセッサ識別情報PID−n、バリア到達時間BAT、スレッド開始時間TSTを、図31に示す履歴テーブルに格納する。図31は、履歴情報格納部612a内の履歴テーブルを示す図である。履歴情報格納部612aは、バリア監視部611aから入力されたバリア識別情報BID−mを、タグ部の任意のエントリに格納する。履歴情報格納部612aは、バリア監視部611aから入力されたプロセッサ識別情報PID−nを、バリア識別情報BID−mが格納されたエントリに対応するタグ部のエントリに格納する。履歴情報格納部612aは、バリア監視部611aから入力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを、バリア識別情報BID−mが格納されたエントリに対応するデータ部の各エントリに格納する。このように、履歴テーブルは、バリア識別情報BID−mと、プロセッサ識別情報PID−nと、バリア識別情報BID−mで特定されるプログラムブロックのバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTとを、関連づけして格納する。その他については、履歴情報格納部612と同様である。
予測情報生成部613aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、履歴情報格納部612aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−n、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを読み出す。予測情報生成部613aは、読み出したバリア到達時間BETをバリア成立予測時間PBETとして電力制御部63aへ出力する。予測情報生成部613aは、読み出したプロセッサ識別情報PID−nをプロセッサ予測識別情報PPID−nとして電力制御部63aへ出力する。また予測情報生成部613aは、読み出したバリア到達時間BET、バリア到達時間BAT、スレッド開始時間TSTを式(1)及び式(2)に代入することにより、スレッド非実行予測時間PTNPTを算出する。予測情報生成部613aは、バリアタイミング信号BTを参照して、バリア開始時又はバリア到達時に、スレッド非実行予測時間PTNPTを電力制御部63aへ出力する。
電力制御部63aは、予測情報取得部61aから入力される予測情報に基づいて、プロセッサP−1〜P−Nそれぞれに供給する電源電圧及び/又はクロック信号を制御することで、プロセッサP−1〜P−Nそれぞれへの電力供給を制御する。以下、図32を参照して、電力制御部63aの具体的な構成について説明する。図32は、電力制御部63aの具体的な構成例を示す図である。電力制御部63aは、電力モード制御部631a、クロック信号制御部632、及び電源電圧制御部633とにより構成される。電力制御部63aは、電力モード制御部631が電力モード制御部631aに入れ代わった点で、上述した電力制御部63と異なる。以下、異なる点を中心に説明する。
電力モード制御部631aは、入力されたバリア成立予測時間PBET、スレッド非実行予測時間PTNPTに基づいて、DVFS制御とスリープ移行制御のどちらの制御が省電力効果が大きいかを判定する。そして電力モード制御部631aは、省電力効果が大きいと判定した制御を選択する。ここで、DVFS制御を選択した場合、電力モード制御部631aは、バリア成立予測時間PBET、スレッド非実行予測時間PTNPTを式(3)に代入することによって、スレッド非実行時間が"0"となるように、プロセッサへ供給するクロック信号のクロック周波数を算出する。また、電力モード制御部631aには、図24に示したスリープ移行判定閾値に基づいて、電力モードを設定する。また、電力モード制御部631aは、プロセッサ予測識別情報PPID−nで特定されるプロセッサP−nについては、スリープ移行制御をスキップする。その他については、上述した電力モード制御部631と同様である。
<動作>
次に図33を参照して、変形例1に係るマルチプロセッサ制御装置6aの動作について説明する。図33は、マルチプロセッサ制御装置6a全体の動作の流れを示すフローチャートである。図33に示すステップS51、S52、S55、S56、S59は、図25に示したステップS41、S42、S45、S46、S49と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS52の次のステップS53において、予測情報生成部613aは、バリア監視部611aからバリア開始信号が入力されると、履歴情報格納部612aからバリア識別情報BID−mと関連付けられたプロセッサ識別情報PID−n、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを読み出す。そして、予測情報生成部613aは、プロセッサ予測識別情報PPID−n、バリア成立予測時間PBET、スレッド非実行予測時間PTNPTを、電力制御部63aへ出力する(ステップS53)。ステップS53の次に、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS54−1〜S54−N)が行われる。この個別の制御については、後述する。
ステップS56の次のステップS57において、バリア監視部611aは、バリアタイミング信号とタイマ12の計時に基づいて、統計値であるバリア到達時間BAT及びスレッド開始時間TSTと、バリア成立時間BETとを算出する。またステップS57において、バリア監視部611aは、算出したバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを履歴情報格納部612aへ出力する。
ステップS57の次に、履歴情報格納部612aは、入力されたバリア識別情報BID−mに対応するデータ部に格納された従前の入力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTを、ステップS57で出力されたバリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTに更新する(ステップS58)。またステップS58において、履歴情報格納部612aは、入力されたバリア識別情報BID−mに対応するタグ部に格納された従前のプロセッサ識別情報PID−nを、ステップS57で出力されたプロセッサ識別情報PID−nに更新する。
図34を参照して、プロセッサP−1〜P−Nそれぞれ個別の制御(ステップS54−1〜S54−N)について具体的に説明する。ステップS54−1〜S54−Nの制御の流れは同じであるため、図34の例ではプロセッサP−nの制御の流れを記載している。なお、図34に示すステップS541〜S544は、図26に示したステップS441〜S444と同様の処理を行い、ステップS546〜S551は、図26に示したステップS445〜S450と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS544の次のステップS545において、電力モード制御部631aは、制御対象のプロセッサがステップS53で出力されたプロセッサ予測識別情報PPID−nで特定されるプロセッサP−nであるか否かを判定する(ステップS545)。つまり、電力モード制御部631aは、制御対象のプロセッサが最後にバリア到達するプロセッサであるか否かを判定している。制御対象のプロセッサが最後にバリア到達するプロセッサでない場合(ステップS545でNo)、電力モード制御部631aは、ステップS53で出力されたスレッド非実行予測時間PTNPTに従って、プロセッサP−1〜P−Nそれぞれの電力モードを設定する(ステップS546)。一方、制御対象のプロセッサが最後にバリア到達するプロセッサである場合(ステップS545でYes)、スリープ移行制御(ステップS546)がスキップされる。ここでは、制御対象のプロセッサは、P−nであり、プロセッサ予測識別情報PPID−nで特定されるプロセッサもP−nである。よって、ステップS545では肯定の判定がなされることになる。
以上のように、本変形例1によれば、履歴情報格納部612aには、バリア成立時間BET、バリア到達時間BAT、スレッド開始時間TSTが1つずつ格納される。このため、履歴情報格納部612aの記憶容量を削減することができ、マルチプロセッサ制御装置6aの回路規模の増大を抑制することができる。
なお、上述では、バリア監視部611aが、バリア到達時間BAT−1〜BAT−Nの平均値、スレッド開始時間TST−1〜TST−Nの平均値を算出するとしたがこれに限定されない。バリア監視部611aは、バリア到達時間BAT−1〜BAT−Nのうち、最大となるバリア到達時間を除いて平均値を算出してもよい。バリア監視部611aは、スレッド開始時間TST−1〜TST−Nのうち、最小となるスレッド開始時間を除いて平均値を算出してもよい。
なお、上述では、バリア監視部611aは、バリア到達信号に基づいてスレッドが最後に到達したプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するためのプロセッサ識別情報PIDを履歴情報格納部612aへ出力していたが、これに限定されない。バリア監視部611aは、スレッド実行時間が最大、つまりスレッド非実行時間が最小となるプロセッサをプログラムブロック毎に特定し、そのプロセッサを特定するための情報をプロセッサ識別情報PIDとしてもよい。
<実施の形態2の変形例2>
実施の形態2においては、各プロセッサ毎の個別制御を図26に示すようなフローで行っていた。しかしながら、図28に示したように、異なる並列プログラムブロックが連続して実行される場合、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合がある。本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直すことで、更なる省電力化を実現させることを目的とする。
本変形例2におけるマルチプロセッサ制御装置は、図20〜図23、図25、図26に示したマルチプロセッサ制御装置のうち、各プロセッサ毎の個別制御に関する図26のフローのみ異なる。以下、異なる点を中心に説明する。
<動作>
図35を参照して、本変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御(ステップS44−1〜S44−N)について具体的に説明する。ステップS44−1〜S44−Nの制御の流れは同じであるため、図35の例ではプロセッサP−nの制御の流れを記載している。図35に示すステップS641〜S647は、図26に示すステップS441〜S447と同様の処理を行い、ステップS650〜S652は、図26に示すステップS448〜S450と同様の処理を行うので、それ以外のステップを中心に説明する。
ステップS641においてプロセッサP−nがスリープモードであると判定した場合、電力モード制御部631は、図25のステップS43で出力されたスレッド非実行予測時間PTNPT−nに基づいて、現在のスリープモードからより深いスリープモードに移行可能か判定する(ステップS648)。電力モード制御部631は、より深いスリープモードに移行可能と判定した場合(ステップS648でYes)、プロセッサP−nの電力モードを、スレッド非実行予測時間PTNPT−nに応じたより深いスリープモードへ移行させる(ステップS649)。一方、電力モード制御部631は、より深いスリープモードに移行不可能と判定した場合(ステップS648でNo)、スリープ間移行制御(ステップS649)をスキップする。
例えば、図28の制御後では、プロセッサP−1は、3回目のバリア開始時、スリープモードSL(BID−2:PTNPT−1)を継続している。しかし、3回目のバリア開始時に取得するスレッド非実行予測時間(BID−3:PTNPT−1)は、2回目のバリア開始時に取得したスレッド非実行予測時間(BID−2:PTNPT−1)よりも大きい。従って、本変形例2を適用すれば、電力モード制御部631は、3回目のバリア開始時、プロセッサP−1の電力モードをより深いスリープモードSL(BID−3:PTNPT−1)に移行させることができる。
以上のように、本変形例2では、スリープモードの継続時に取得されるスレッド非実行時間が、前回取得されたスレッド非実行時間よりも大きくなる場合に、より深いスリープモードに設定し直している。その結果、更なる省電力化を実現することができる。
なお、上記実施の形態1、2では、共有記憶型のマルチプロセッサシステムの説明を行ったが、マルチプロセッサシステムには、私有記憶型も存在する。私有記憶型のマルチプロセッサシステムでは、各プロセッサに他のプロセッサから直接アクセスできない専用メモリがそれぞれ設けられている。専用メモリを有するプロセッサは、高速相互結合網で接続されている。なお、これらのプロセッサは、マルチプロセッサではなく、コンピュータが多数接続されたマルチコンピュータとして分類されることもある。このような私有記憶型のマルチプロセッサシステムは、共有記憶型のようにロック変数を直接用いることができないため、プロセッサ間の通信手段を用いたメッセージ交換によってバリア同期を実現する。しかしながら、本質的には通信手段が異なるのみであり、早期にバリア到達したスレッドは、最後のスレッドがバリア到達してバリア成立するまで待つ必要があるのは同様である。このため、私有記憶型のマルチプロセッサシステムにおいても、本発明のスリープ制御が適用可能である。また、ここでいうプロセッサは、プログラムカウンタを有するストアドプログラム方式のプロセッサに限定されない。通常動作モードと少なくとも1つのスリープモードを有すれば、応用分野に特化した専用の有限ステートマシンに従って動作する演算処理装置を、プロセッサの代わりに用いてもよい。
また、上記実施の形態1、2のマルチプロセッサシステムは、典型的には、画像・音声等の再生装置に適用可能である。図36は、実施の形態1のマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図である。例えば、MPEG規格に沿って符号化(エンコード)された画像・音声情報が、光ディスク92やメモリカード94に符号化ストリームデータとして格納されているとする。この場合、再生装置内のシステムLSIは、共有メモリバス2、メモリコントローラ7及びIOインタフェース8経由で各ドライブ91及び93から読み込んだ符号化ストリームデータをDRAMで構成される主記憶装置3に展開する。プロセッサP−1は、符号化ストリームデータを共有メモリバス2及びメモリコントローラ7を経由して主記憶装置3から取得し、画像符号化ストリームと音声符号化ストリームとに分離する。プロセッサP−1は、共有メモリバス2を経由して、画像符号化ストリームをプロセッサP−2に、音声符号化ストリームをプロセッサP−3に通知する。プロセッサP−2は、画像符号化ストリームを復号化(デコード)し、プロセッサP−3は、音声符号化ストリームを復号化する。ここで、プロセッサP−1は、表示時間に応じてプロセッサP−2、P−3とバリア同期を取りながら、復号化された画像・音声情報を、テレビなどの表示装置に出力する。この際、プロセッサP−1〜P−3に割り当てたシステム処理、画像復号化処理、音声復号化処理の負荷は、一般的に均等にならない。このため、本発明におけるマルチプロセッサ制御装置1によってプロセッサP−1〜P−3を制御することで、消費電力削減が得られる。
なお、上述では、システムLSIとしたが、集積度の違いにより、IC、スーパーLSI、ウルトラLSIと呼称されることもある。また集積回路化の手法は、システムLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。システムLSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、システムLSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりシステムLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
本発明に係るマルチプロセッサ制御装置は、従来よりも大きな省電力効果を得ることが可能であり、消費電力が課題となる並列計算機システムなどにおいて利用することができる。
プログラムの構成例と、当該プログラムの実行の様子とを模式的に示した図
プログラムの構成の他例と、当該プログラムの実行の様子とを模式的に示した図
実施の形態1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
予測情報取得部11の具体的な構成例を示す図
履歴情報格納部112内の履歴テーブルを示す図
電力制御部13の具体的な構成例を示す図
電力モード制御部131が設定する電力モードを示す図
マルチプロセッサ制御装置1全体の動作の流れを示すフローチャート
実施の形態1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図
実施の形態1の変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
予測情報取得部11aの具体的な構成例を示す図
履歴情報格納部112a内の履歴テーブルを示す図
電力制御部13aの具体的な構成例を示す図
マルチプロセッサ制御装置1a全体の動作の流れを示すフローチャート
実施の形態1の変形例1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
実施の形態1の変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
実施の形態2に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
予測情報取得部61の具体的な構成例を示す図
履歴情報格納部612内の履歴テーブルを示す図
電力制御部63の具体的な構成例を示す図
電力モード制御部631が設定する電力モードを示す図
マルチプロセッサ制御装置6全体の動作の流れを示すフローチャート
実施の形態2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
同一の並列プログラムブロックがループ実行される場合の制御前後の各スレッドの実行状態を示した図
異なる並列プログラムブロックが連続して実行される場合の制御前後の各スレッドの実行状態を示した図
実施の形態2の変形例1に係るマルチプロセッサ制御装置を用いた共有記憶型のマルチプロセッサシステムの構成例を示す図
予測情報取得部61aの具体的な構成例を示す図
履歴情報格納部612a内の履歴テーブルを示す図
電力制御部63aの具体的な構成例を示す図
マルチプロセッサ制御装置6a全体の動作の流れを示すフローチャート
実施の形態2の変形例1に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
実施の形態2の変形例2に係るプロセッサP−1〜P−Nそれぞれ個別の制御の流れを示すフローチャート
実施の形態1に係るマルチプロセッサシステムを再生装置に適用した場合の構成例を示す図
英ARM社のARMプロセッサで用いられる電力モードを示した図
1、1a、6、6a マルチプロセッサ制御装置
2 共有メモリバス
3 主記憶装置
4 電源装置
5、5a プログラム
7 メモリコントローラ
8 IOインタフェイス
11、11a、61、61a 予測情報取得部
111、111a、611、611a バリア監視部
112、112a、612、612a 履歴情報格納部
113、113a、613、613a 予測情報生成部
12 タイマ
13、13a、63、63a 電力制御部
131、131a、631、631a 電力モード制御部
132、632 クロック信号制御部
133、633 電源電圧制御部
91 光ディスクドライブ
92 光ディスク
93 メモリカードドライブ
94 メモリカード