(57)【要約】【課題】並列処理のバリア同期における処理時間のばらつきによる性能劣化を軽減することができるマルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムの提供を図る。【解決手段】複数のプロセッサコア１０，ＣＲ1〜ＣＲnと、前記プロセッサコア間におけるバリア同期を制御するバリア同期制御部５０と、を有するマルチコアプロセッサであって、それぞれの前記プロセッサコアは、自身のクロック周波数を制御する周波数制御部１１と、前記周波数制御部の出力に基づいて、自身のクロック周波数を調整する周波数調整回路１２と、を含み、前記周波数制御部は、コア数Ｎacおよび処理コア数Ｎpcを受け取って、ターゲット周波数Ｆ'を出力する。【選択図】図４
2017021513.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアと、前記プロセッサコア間におけるバリア同期を制御するバリア同期制御部と、を有するマルチコアプロセッサであって、
それぞれの前記プロセッサコアは、
自身のクロック周波数を制御する周波数制御部と、
前記周波数制御部の出力に基づいて、自身のクロック周波数を調整する周波数調整回路と、を含み、
前記周波数制御部は、コア数および処理コア数を受け取って、ターゲット周波数を出力する、
ことを特徴とするマルチコアプロセッサ。
【請求項２】
前記マルチコアプロセッサは、前記マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、
複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、
前記コア数は、それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数であり、
前記処理コア数は、それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数であり、
前記周波数制御部は、それぞれの前記同期グループにおける前記コア数および前記処理コア数を受け取って、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を出力する、
ことを特徴とする請求項１に記載のマルチコアプロセッサ。
【請求項３】
それぞれの前記プロセッサコアは、さらに、
コア電力上限値を格納する第１レジスタと、
同期待ちコア電力値を格納する第２レジスタと、を有し、
前記周波数制御部は、それぞれの前記同期グループにおける前記コア数および前記処理コア数と共に、前記コア電力上限値，前記同期待ちコア電力値，現クロック周波数，および，自身のコア電力値に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を出力する、
ことを特徴とする請求項２に記載のマルチコアプロセッサ。
【請求項４】
それぞれの前記プロセッサコアは、さらに、
固定のコア電力値を格納する第３レジスタと、
定格周波数を格納する第４レジスタと、
前記固定のコア電力値，前記定格周波数および前記現クロック周波数に基づいて、前記自身のコア電力値を算出するコア電力値算出部と、を有し、
前記コア電力値算出部で算出された前記自身のコア電力値を、前記周波数制御部に出力する、
ことを特徴とする請求項３に記載のマルチコアプロセッサ。
【請求項５】
それぞれの前記プロセッサコアは、さらに、
前記自身のコア電力値を、動的にモニタする電力モニタ部を有し、
前記電力モニタ部によりモニタされた前記自身のコア電力値を、前記周波数制御部に出力する、
ことを特徴とする請求項３に記載のマルチコアプロセッサ。
【請求項６】
前記周波数制御部は、
同期待ちに入ったプロセッサコアをより消費電力の低い状態に遷移させた後、前記処理コア数が低電力モード解除閾値より小さくなったら、前記同期待ちのプロセッサコアの低電力状態を解除する、
ことを特徴とする請求項２乃至請求項５のいずれか１項に記載のマルチコアプロセッサ。
【請求項７】
それぞれの前記プロセッサコアは、さらに、
前記周波数制御部からのターゲット周波数と、規定のバリア同期待ち時周波数の一方を選択して、前記周波数調整回路に出力するセレクタを有する、
ことを特徴とする請求項１乃至請求項６のいずれか１項に記載のマルチコアプロセッサ。
【請求項８】
複数のプロセッサコアを有し、複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、前記プロセッサコア間におけるバリア同期を制御するマルチコアプロセッサのクロック制御方法であって、
それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数の情報と、
それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数の情報と、
コア電力上限値の情報と、
同期待ちコア電力値の情報と、
自身のコア電力値の情報と、
に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を算出して制御する、ことを特徴とする、
マルチコアプロセッサのクロック制御方法。
【請求項９】
複数のプロセッサコアを有し、複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、前記プロセッサコア間におけるバリア同期を制御するマルチコアプロセッサのクロック制御プログラムであって、
演算処理装置に、
それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数の情報と、
それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数の情報と、
コア電力上限値の情報と、
同期待ちコア電力値の情報と、
自身のコア電力値の情報と、
に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を算出して制御する、処理を実行させる、ことを特徴とする、
マルチコアプロセッサのクロック制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で言及する実施例は、マルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムに関する。
【背景技術】
【０００２】
近年のマイクロプロセッサは、テクノロジの微細化に伴う素子密度の向上により、半導体集積回路(ＬＳＩ，チップ)の回路規模が増大する傾向にある。また、マルチコアプロセッサでは、コア数が増加し、例えば、メニーコアプロセッサと呼ばれる１０コアを超えるようなマルチコアプロセッサも出現している。
【０００３】
その一方、素子密度の増加による電力密度の上昇により、ＬＳＩ(マルチコアプロセッサ)の消費電力が大きな問題になってきている。この消費電力の問題により、例えば、ＬＳＩに実装した全ての機能を同時に動作させるのが困難になり、或いは、ＬＳＩの全機能を、そのＬＳＩの最高周波数で動作させるのが困難になるといった事態が生じている。
【０００４】
そのため、チップ(ＬＳＩ)内に消費電力の変動と相関の高い複数の信号のアクティビティカウンタを埋め込み、そのカウント値に電力変換のための重み係数を掛けて積和演算することで、オンチップで消費電力の見積りを行う電力モニタ技術が提案されている。
【０００５】
また、上述した電力モニタで得られた消費電力の見積り値を用いて、予め設定された消費電力上限(電力制約)を超えないようにＬＳＩを動作させる制御等が、様々なマイクロプロセッサ製品に実装されてきている。
【０００６】
このような電力制約下での制御の一例として、例えば、インテル（登録商標）社により、ターボブースト(Turbo Boost)と呼ばれているような周波数ブースト技術が提案されている。
【０００７】
この周波数ブースト技術は、例えば、消費電力の小さい処理を実行している場合、或いは、マルチコアプロセッサで多数のコアが休止している場合(待ち状態)といった消費電力に余裕があるとき、その消費電力の余裕を検知する。
【０００８】
そして、周波数ブースト技術は、検知した消費電力の余裕に基づいて、クロック周波数を定格周波数よりもブースト(上昇)させることで性能向上を図る手法である。なお、本明細書では、消費電力制約下で動作する複数のコアを有する(多コアの)マルチコアプロセッサによる並列計算処理を考える。
【０００９】
並列計算システムにおいて、並列処理される複数のプロセス(処理)間の同期をとる方法として、バリア同期が知られている。このバリア同期では、例えば、プログラム中に、並列処理される複数のプロセスで同期を取るポイント(バリアポイント)が設定される。
【００１０】
バリア同期を行うプロセスは、処理がバリアポイントに到着した際に、バリア同期対象の他のプロセスがバリアポイントに到達するまで処理を停止し、バリア同期対象の全てのプロセスがバリアポイントに到着した時点で、バリアポイントの後続処理を開始する。そのため、例えば、処理のばらつきによる待ち時間の問題が存在する。
【００１１】
ところで、従来、バリア同期を適用したマルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムとしては、様々な提案がなされている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００９−０６９９２１号公報
【特許文献２】国際公開第２００８／１５５８０６号
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述したように、並列計算システムにおいて、並列処理される複数のプロセス間の同期をとる方法として、バリア同期が知られている。また、複数のコアを有するマルチコアプロセッサに対して、周波数ブースト技術を適用することにより、処理のばらつきによる待ち時間を軽減することも提案されている。
【００１４】
すなわち、同期待ちに入ったコアの消費電力が下がることにより、電力に余裕が生じると、例えば、その電力を利用して処理中のコアの周波数を上昇させる。これにより、コアの処理速度を向上させ、待ち時間の低減を図ることが可能になる。ここで、同期待ちに入ったコアの数が多いほど、処理中のコアの周波数を上昇させることができる。
【００１５】
しかしながら、周波数ブースト技術は、例えば、電力モニタによる消費電力測定値の変動を起点とした制御になるため、コアが同期待ちに入り、或いは、同期待ちが解除されてから実際に制御を行うまで、所定の時間が掛かるという課題がある。
【００１６】
また、チップ全体の周波数ブースト技術は、同期グループを意識した制御ではないため、ユーザ単位や並列ジョブ単位の消費電力制約の設定、或いは、処理時間による課金等の計算機運用には向いていないといった課題もある。
【課題を解決するための手段】
【００１７】
一実施形態によれば、複数のプロセッサコアと、前記プロセッサコア間におけるバリア同期を制御するバリア同期制御部と、を有するマルチコアプロセッサが提供される。
【００１８】
それぞれの前記プロセッサコアは、自身のクロック周波数を制御する周波数制御部と、前記周波数制御部の出力に基づいて、自身のクロック周波数を調整する周波数調整回路と、を含む。前記周波数制御部は、コア数および処理コア数を受け取って、ターゲット周波数を出力する。
【発明の効果】
【００１９】
開示のマルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムは、並列処理のバリア同期における処理時間のばらつきによる性能劣化を軽減することができるという効果を奏する。
【図面の簡単な説明】
【００２０】
【図１】図１は、マルチコアプロセサにおけるコア間の同期と並列処理のばらつきを説明するための図である。
【図２】図２は、マルチコアプロセッサの一例を示すブロック図である。
【図３】図３は、マルチコアプロセッサの他の例を示すブロック図である。
【図４】図４は、本実施形態に係るマルチコアプロセッサを示すブロック図である。
【図５】図５は、図４に示すマルチコアプロセッサにおけるバリア同期制御部の一構成例を示すブロック図である。
【図６】図６は、マルチコアプロセッサの第１実施例における各コアの周波数制御を説明するためのブロック図である。
【図７】図７は、マルチコアプロセッサの第２実施例における各コアの周波数制御を説明するためのブロック図である。
【図８】図８は、マルチコアプロセッサの第３実施例における各コアの周波数制御を説明するためのブロック図である。
【図９】図９は、図８に示す周波数制御部における電力モニタ部の一例を示すブロック図である。
【図１０】図１０は、マルチコアプロセッサの第４実施例におけるクロック制御処理の一例を説明するためのフローチャートである。
【図１１】図１１は、本実施例をＳＭＴコアに適用した場合におけるバリア同期制御部の一構成例を示すブロック図である。コア数および処理コア数生成回路の一例を示す図である。
【図１２】図１２は、本実施例のマルチコアプロセッサによる効果を説明するための図(その１)である。
【図１３】図１３は、本実施例のマルチコアプロセッサによる効果を説明するための図(その２)である。
【発明を実施するための形態】
【００２１】
まず、本実施例のマルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムの実施例を詳述する前に、図１〜図３を参照して、マルチコアプロセッサおよびそのクロック制御方法の例、並びに、その問題点を説明する。なお、以下の記載では、消費電力制約下で動作する複数のコア(プロセッサコア)を有するマルチコアプロセッサによる並列計算処理を想定して説明する。
【００２２】
図１は、マルチコアプロセサにおけるコア間の同期と並列処理のばらつきを説明するための図であり、Ｎ個のコアＣＲ1〜ＣＲn(コア１〜コアＮ)によりバリア同期を適用して、並列処理を行う様子を示すものである。
【００２３】
図１に示されるように、例えば、並列処理される複数のプロセス(処理)間の同期をとるバリア同期では、プログラム中に並列処理される複数のプロセスで同期を取るポイント(バリアポイント)ＢＰ０が設定される。
【００２４】
バリア同期を行うプロセスは、処理がバリアポイントに到着した際に、バリア同期対象の他のプロセスがバリアポイントに到達するまで処理を停止し、バリア同期対象の全てのプロセスがバリアポイントに到着した時点で、バリアポイントの後続処理を開始する。
【００２５】
すなわち、バリア同期を行なうプロセスは、例えば、バリア同期対象の全てのコアＣＲ1〜ＣＲnによる処理ＡがバリアポイントＢＰ０に到着した時点で、バリアポイントＢＰ０の後続処理Ｂを開始する。
【００２６】
ここで、バリア同期対象の全てのコアＣＲ1〜ＣＲnにおいて、処理Ａの実行に最も時間を要したコアＣＲnがバリアポイントＢＰ０に到着するまで、既に処理を完了したコアＣＲ1〜ＣＲn-1は、処理を停止して同期待ちになる。
【００２７】
そして、ＣＲnがＢＰ０に到着した時点で、ＣＲ1〜ＣＲnによる処理Ｂの実行が開始され、さらに、次のバリアポインでも同様のバリア同期処理が行われることになる。そのため、例えば、各コアＣＲ1〜ＣＲnにおける処理のばらつきによる待ち時間の問題が存在する。
【００２８】
図２は、マルチコアプロセッサの一例を示すブロック図であり、バリア同期の制御として、マルチコアプロセッサにおける同一ＣＰＵ内のコア間のバリア同期処理をハードウェア制御するようにしたものである。
【００２９】
図２に示されるように、マルチコアプロセッサは、複数(例えば、Ｎ個)のコア(プロセッサコア)ＣＲ1〜ＣＲn(100)、および、バリア同期制御部300を含む。各コア100(ＣＲ1〜ＣＲn)は、それぞれ同期処理部101，電力モニタ部102およびコア電力制約(コア電力上限値の情報)103を含む。また、バリア同期制御部300は、バリア状態レジスタ310、および、複数(例えば，ｋ個)の同期グループ制御回路301〜30kを含む。
【００３０】
第１同期グループ制御回路301は、第１グループ定義レジスタ311および第１グループ制御部312を含み、第２同期グループ制御回路302は、第２グループ定義レジスタ321および第２グループ制御部322を含む。さらに、第ｋ同期グループ制御回路30kは、第ｋグループ定義レジスタ3k1および第ｋグループ制御部3k2を含む。
【００３１】
すなわち、図２に示す例では、各ビットがそれぞれコアＣＲ1〜ＣＲnの状態を示すバリア状態レジスタ310と、同期するコアのグループ毎にその同期グループ１〜ｋのバリア同期制御を行う同期グループ制御回路301〜30kを含む。
【００３２】
バリア状態レジスタ310には、各コアＣＲ1〜ＣＲnからそのコアの同期状態(『処理中(動作中)』または『同期待ち(停止中)』)を示す１ビットの同期状態信号ＳＳ1〜ＳＳnが伝えられ、バリア状態レジスタ310の対応するビットに書き込まれる。
【００３３】
ここで、コアＣＲ1〜ＣＲnから出力される同期状態信号ＳＳ1〜ＳＳnは、例えば、それぞれのコアＣＲ1〜ＣＲnによる処理がバリアポイント(ＢＰ０)を超える(跨ぐ)毎に、例えば、『０』→『１』→『０』→『１』→…というように反転する信号である。
【００３４】
各同期グループ制御回路301〜30kは、それぞれ自身のグループに属するコアの情報を保持するグループ定義レジスタ311〜3k1を含む。なお、各グループ定義レジスタ311〜3k1は、コアＣＲ1〜ＣＲnのＩＤに対応するビット数を含む多ビットのレジスタであり、例えば、その同期グループ１〜ｋに含まれるコアに対応するビット位置に『１』が設定され、それ以外のビット位置に『０』が設定される。
【００３５】
また、各同期グループ制御回路301〜30kは、同期グループを定義するコア数分のビットの他に同期制御用に１ビットのレジスタＢLTを含む。この同期制御用レジスタＢLTには、例えば、実行中のコアのバリア状態と逆の値が常時格納され、バリア同期の制御に用いられる。
【００３６】
すなわち、同じ同期グループに属するコアは、全コア処理中の状態ではそのコアの同期状態信号として同じ値を出力しており、各コアは、同期ポイント(バリアポイント)に到達すると、同期状態信号(ＳＳ1〜ＳＳn)の値を反転して同期待ちに入る。
【００３７】
バリア同期制御部300は、各コアＣＲ1〜ＣＲnに対して、グループ選択のためのセレクタ320を経由して同期待ちの解除を通知する１ビットの信号Ｓr1〜Ｓrnを出力する。そして、同期待ち状態のコアは、この信号Ｓr1〜Ｓrnの値が反転したらバリアポイントの後続の処理を実行する。
【００３８】
なお、同期制御としては、各同期グループ制御回路301〜30kにおいて、例えば、以下のような処理が行われるが、ここでは、第１同期グループ制御回路301を例として説明する。
【００３９】
まず、第１グループ定義レジスタ311により、全てのコアＣＲ1〜ＣＲnのバリア状態のうち自グループ(自身の第１グループ)のコアの同期状態を抽出する(ステップＳＴ１)。さらに、自グループの全てのコアの同期状態がそのグループの同期制御用ビットＢLTと同じになるまで、すなわち、全コアが同期待ち状態になるまで待つ(ステップＳＴ２)。
【００４０】
そして、自グループの全てのコアの同期状態が同期制御用ビットＢLTと同じ値になったら、自グループのコアへの同期待ち解除通知信号(Ｓr1〜Ｓrn)を反転し、同時に同期制御用ビット(ＢLT)の値を反転する(ステップＳＴ３)。
【００４１】
すなわち、制御部(第１グループ制御部)312は、グループ(第１グループ)内のコアが全て『０』ならば『０』とし、全て『１』ならば『１』とし、その『０』および『１』を反転(『１』および『０』)して同期制御用ビットＢLTを書き換える。さらに、セレクタ320を経由して、自グループ(第１グループ)のコアに対して、同期待ち解除通知信号Ｓr1〜Ｓrnを反転して通知する。
【００４２】
そして、再び、ステップＳＴ１に戻り、第１グループ定義レジスタ311により、全コアＣＲ1〜ＣＲnのバリア状態のうち自グループのコアの同期状態を抽出して、同様の処理を繰り返す。
【００４３】
ここで、ステップＳＴ２およびＳＴ３の処理は、例えば、全ての入力が『１』の時に出力が『１』になり、全ての入力が『０』の時に出力が『０』になるＣ素子と呼ばれる順序回路を、第１グループ制御部(312)に適用することで実現できる。
【００４４】
このように、マルチコアプロセッサのバリア同期制御(閉じたバリア同期制御)は、バリア状態レジスタ310と、第１〜第ｋ同期グループ毎のグループ定義レジスタ311〜3k1を適用することにより、実装可能なことが分かる。
【００４５】
しかしながら、上述したバリア同期制御を適用したマルチコアプロセッサでは、例えば、並列処理の同期化における性能劣化が生じることになる。この性能劣化の要因としては、例えば、同期化を行うための通信や同期判定といったいわゆるフロー制御の時間や、図１を参照して説明した同期待ち状態によるものが考えられる。
【００４６】
すなわち、プロセス間の共有資源アクセスの競合や一部のコアでＯＳプロセスが実行されるといったコア間における処理時間のバラつきにより、一番処理が遅いコアが同期ポイントに到達するまで残りのコアの処理が無駄に止まることによる性能劣化等がある。
【００４７】
また、図２を参照して説明したマルチコアプロセッサは、バリア同期処理をハードウェア処理することでフロー制御の処理時間を軽減することは可能であるが、マルチコアプロセッサ本来の性能を十分に発揮させることは困難である。
【００４８】
図３は、マルチコアプロセッサの他の例を示すブロック図であり、周波数ブースト技術を適用したものである。図３に示されるように、マルチコアプロセッサは、複数のコアＣＲ1〜ＣＲn(200)、電力管理部210、共有キャッシュ401、ＣＰＵ間Ｉ／Ｆ(インターフェース)402、および、ローカルメモリ403を含む。
【００４９】
各コア200(ＣＲ1〜ＣＲn)は、周波数制御部201，ＰＬＬ(Phase Locked Loop：位相同期回路)202，電力モニタ部203およびコア電力制約(コア電力上限値の情報)204を含む。共有キャッシュ401は、電力モニタ部411を含み、この電力モニタ部411により、共有キャッシュ401と、ＣＰＵ間Ｉ／Ｆ402およびローカルメモリ403間の情報に基づいた電力をモニタし、電力管理部210に伝えるようになっている。
【００５０】
電力管理部210は、共有キャッシュ401の電力モニタ部411からの電力情報と共に、各コア200の電力モニタ部203からの電力情報を受け取り、チップ全体の電力(チップ電力合計211)を計算し、チップ電力制約212と比較して電力余裕度を算出する。
【００５１】
電力管理部210で算出された電力余裕度は、各コア200のコア電力制約204に伝えられ、それぞれのコア200では、電力余裕度に基づいてコア電力制約(コア電力上限値の情報)を修正し、その修正されたコア電力制約に基づいた制御が行われる。すなわち、それぞれのコアＣＲ1〜ＣＲnにおいて、周波数制御部201は、修正されたコア電力制約204に基づき、ＰＬＬ202を介してコア周波数のブースト制御を行う。
【００５２】
すなわち、電力管理部210は、例えば、チップ(マルチコアプロセッサ)が消費電力の小さい処理を実行している場合、或いは、多数のコアが停止(休止：同期待ち)している場合といった消費電力に余裕があるとき、その消費電力の余裕(電力余裕度)を検知する。
【００５３】
そして、それぞれのコアＣＲ1〜ＣＲnの周波数制御部201は、検知した消費電力の余裕(修正されたコア電力制約204)に基づき、クロック周波数を定格周波数よりもブーストすることでマルチコアプロセッサの性能を向上させる。
【００５４】
しかしながら、図３に示すマルチコアプロセッサは、例えば、電力モニタ部による消費電力測定値の変動に基づいた制御を行うため、コアが同期待ちに入り、或いは、同期待ちが解除されてからクロック周波数が変更されるまでに所定の時間を要する。例えば、バリア同期通知信号の変更からアクティビティが変更するまでの時間、或いは、アクティビティ情報をサンプリングする期間に所定の時間を要することになる。
【００５５】
さらに、例えば、各コアの電力値や電力値の元になるアクティビティ情報を集計して、チップ電力や電力余裕度を計算する時間のオーバーヘッド等が生じる。そのため、制御のオン／オフの切り替え、或いは、クロック周波数の変更に時間が掛かり、マルチコアプロセッサの性能劣化を招く虞がある。
【００５６】
また、チップ全体の周波数ブースト技術は、同期グループを意識した制御ではないため、特定の同期グループのコアが同期待ちに入ることで生じた電力余裕度が、別の同期グループのコアの周波数ブーストに使われる可能性が出てくる。そのため、ユーザ単位や並列ジョブ単位の消費電力制約の設定や処理時間による課金等の計算機運用には向いていないことになる。
【００５７】
以下、マルチコアプロセッサ、マルチコアプロセッサのクロック制御方法およびクロック制御プログラムの実施例を、添付図面を参照して詳述する。図４は、本実施形態に係るマルチコアプロセッサを示すブロック図であり、各コアのクロック周波数制御を行うシステムを示すものである。
【００５８】
図４に示されるように、本実施形態のマルチコアプロセッサは、複数(例えば、Ｎ個)のプロセッサコアＣＲ1〜ＣＲn(コア１０)、および、バリア同期制御部５０を含む。各コア１０(ＣＲ1〜ＣＲn)は、それぞれ周波数制御部１１，ＰＬＬ１２，コア電力値１３，コア電力上限値(コアの電力制約の情報)１４および同期待ちコア電力値(コアが同期待ちしているときの電力情報)１５を含む。
【００５９】
ここで、本実施形態のマルチコアプロセッサでは、バリア同期制御部５０から各コア１０に対して、それぞれコア数Ｎacおよび処理コア数Ｎpcが出力される。なお、コア数Ｎacは、自身のコア(自コア)が属する同期グループに含まれるコアの数(全コア数)の情報を示し、処理コア数Ｎpcは、自コアと同じ同期グループのコアのうち、現在、同期待ち状態ではなく、動作中(処理中)のコアの数の情報を示す。
【００６０】
すなわち、各コア１０(ＣＲ1〜ＣＲn)コアは、そのコアに求められる電力制約である『コア電力上限値１４』、事前に見積られた同期待ち時のコア電力である『同期待ちコア電力値１５』、および、そのコアの現在の電力値を示す『コア電力値１３』を含む。
【００６１】
さらに、各コア１０は、回路として、ＰＬＬ１２等の『周波数調整回路』、並びに、上述の各情報に基づいて、そのコアの電力がコア電力上限値１４を超えないようにＰＬＬ１２等の周波数を適切に制御する『周波数制御部１１』を含む。
【００６２】
ここで、コア電力値(コアの電力情報)１３、コア電力上限値(コアの電力制約の情報)１４および同期待ちコア電力値(同期待ちコアの電力情報)１５は、消費電力のうちクロック周波数と連動する動的電力の部分を表すものとする。
【００６３】
ここで、コア電力上限値１４および同期待ちコア電力値１５は、例えば、事前に外部から与えることができる。また、これらの値は、例えば、マルチコアプロセッサ全体で１つの値を記録(設定)し、その値を各コアに入力してもよいが、コア毎に値を格納するレジスタを設け、各コアで別の値を用いるようにしてもよい。
【００６４】
なお、コア電力値１３は、例えば、処理中のコアの電力を表す代表値であり、定格周波数での消費電力仕様値等を固定値として与えてもよく、或いは、電力モニタ部等を搭載して実際の電力を取得してもよい。
【００６５】
図５は、図４に示すマルチコアプロセッサにおけるバリア同期制御部の一構成例を示すブロック図であり、ｋ個の同期グループによるバリア同期制御を想定したものである。図５に示されるように、バリア同期制御部５０は、バリア状態レジスタ５１，複数(Ｎ個)のEXNOR(EXclusive-NOR：否定排他的論理和)ゲート５２，セレクタ回路５３および第１〜第ｋ同期グループマスク回路501〜50kを含む。
【００６６】
第１〜第ｋ同期グループマスク回路501〜50kは、同様の構成とされ、以下では、第１同期グループマスク回路501を例として説明する。第１同期グループマスク回路501は、グループ定義レジスタ511，複数(Ｎ個)のＡＮＤ(論理積)ゲート512，第１カウンタ513および第２カウンタ514を含む。
【００６７】
バリア状態レジスタ５１には、図２を参照して説明したバリア状態レジスタ310と同様に、各コアＣＲ1〜ＣＲnからそのコアの同期状態(『処理中』，『同期待ち』)を示す１ビットの同期状態信号(ＳＳ1〜ＳＳn)が格納されている。
【００６８】
なお、バリア状態レジスタ５１に格納される各コアＣＲ1〜ＣＲnの同期状態を示す信号は、例えば、それぞれのコアＣＲ1〜ＣＲnによる処理がバリアポイントを跨ぐ毎に、例えば、『０』→『１』→『０』→『１』→…というように反転する。
【００６９】
グループ定義レジスタ511は、コアＣＲ1〜ＣＲnのＩＤに対応するビット数を含む多ビットのレジスタであり、その同期グループ１に含まれるコアに対応するビット位置に『１』が設定され、それ以外のビット位置に『０』が設定される。また、グループ定義レジスタ511は、同期グループを定義するコア数分のビットの他に同期制御用に１ビットのレジスタＢLTを含む。
【００７０】
各EXNORゲート５２は、バリア状態レジスタ５１に格納された各ビット信号と、グループ定義レジスタ511の同期制御用レジスタＢLTの信号の否定排他的論理和を取り、そのEXNORゲート５２の出力信号は、対応するＡＮＤゲート512の一方の入力に与えられる。例えば、処理中(動作中)のコアに対応するEXNORゲート５２の出力信号は『１』になり、待機中のコアに対応するEXNORゲート５２の出力信号は『０』になる。
【００７１】
グループ定義レジスタ511に格納された各ビット信号は、ＡＮＤゲート512の他方の入力に与えられると共に、第１カウンタ513に入力される。すなわち、各ＡＮＤゲート512は、グループ定義レジスタ511に格納された各ビット信号と、対応するEXNORゲート５２の出力信号の論理積を取り、そのＡＮＤゲート512の出力信号は、第２カウンタ514に入力される。
【００７２】
ここで、第１カウンタ513からは、第１同期グループ(同期グループ１)に含まれるコア数(全コア数，メンバ数)Ｎ1acが出力され、第２カウンタ514からは、第１同期グループで現に処理を行っている処理コア数(動作コア数)Ｎ1pcが出力される。
【００７３】
また、第２同期グループマスク回路502からは、第２同期グループ(同期グループ２)に含まれるコア数Ｎ2acおよび第２同期グループで現に処理を行っている処理コア数Ｎ2pcが出力される。
【００７４】
さらに、第ｋ同期グループマスク回路50kからは、第ｋ同期グループ(同期グループｋ)に含まれるコア数Ｎkacおよび第ｋ同期グループで現に処理を行っている処理コア数Ｎkpcが出力される。
【００７５】
そして、第１〜第ｋ同期グループマスク回路501〜50kから各同期グループにおけるコア数Ｎ1ac〜Ｎkacおよび処理コア数Ｎ1pc〜Ｎkpcは、セレクタ回路５３に入力され、それぞれのコアＣＲ1〜ＣＲnに対してコア数Ｎacおよび処理コア数Ｎpcが出力される。
【００７６】
図６は、マルチコアプロセッサの第１実施例における各コアの周波数制御を説明するためのブロック図である。図６に示されるように、各コア１０の周波数制御部１１は、コア電力値(コアの電力情報)１３，コア電力上限値(コアの電力制約の情報)１４，同期待ちコア電力値(同期待ちコアの電力情報)１５および現クロック周波数(現クロック周波数の情報)１６を受け取る。
【００７７】
ここで、コア電力上限値１４は、例えば、事前に外部から与えられ、それぞれ各コア１０のレジスタ(第１レジスタ)140に格納され、同期待ちコア電力値１５は、例えば、事前に外部から与えられ、それぞれ各コア１０のレジスタ(第２レジスタ)150に格納される。
【００７８】
すなわち、コア電力上限値１４は、第１レジスタ140に設定され、同期待ちコア電力値１５は、第２レジスタ150に設定される。なお、これらコア電力上限値１４および同期待ちコア電力値１５は、コア１０毎に設定せずに、マルチコアプロセッサ全体で設定することもできる。
【００７９】
また、現クロック周波数１６は、自コアにおける現状の動作クロックの周波数であり、この情報は、それぞれのコアにおいて取得可能なのはいうまでもない。さらに、図４を参照して説明したように、処理コア数Ｎpcおよびコア数Ｎacは、バリア同期制御部５０から与えられる。
【００８０】
そして、周波数制御部１１は、上述した情報に基づいて、自コアが属する同期グループにおける「コア数Ｎac」および「処理コア数Ｎpc」の比に従って、待機コアの電力余裕分に応じた周波数上昇の制御を、処理中の各コア自身が自律的に行う。
【００８１】
すなわち、バリア同期制御部５０から通知されるコア数(Ｎac)をＮ，処理コア数(Ｎpc)をＭ，現在のコア消費電力(コア電力値１３)をＰcr，そして，コア電力上限値１４をＰltとする。さらに、同期待ちコア電力値１５をＰwt，現クロック周波数をＦ，そして，本制御によるターゲット周波数をＦ'とする。
【００８２】
このとき、ターゲット周波数(補正後のクロック周波数)Ｆ'は、周波数制御部１１により、ｆを所定の関数として、
Ｆ'＝ｆ(Ｆ，Ｍ，Ｎ，Ｐcr，Ｐwt，Ｐlt)
により求めることができる。
【００８３】
なお、ＰltおよびＰwtは、予め外部から与えられているものとし、Ｐwtは、全てのコアＣＲ1〜ＣＲnで共通とし、そして、Ｐltは、同じ同期グループにおいては、同一の値が設定されるものとする。
【００８４】
また、並列処理において、同じ同期グループ内の処理コアは、ほぼ同じ処理を行っていると考えられるため、全処理コアの電力は、同じであると仮定する。このとき、同期グループ内の同期待ちコア電力全体は(Ｎ−Ｍ)×Ｐwt、処理コア電力全体はＭ×Ｐcr、同期グループ全体の電力制約はＮ×Ｐltになる。
【００８５】
従って、ターゲット周波数Ｆ'は、次の式(１)を満たす範囲でブースト可能になる。
(Ｎ−Ｍ)×Ｐwt＋Ｍ×Ｐcr×Ｆ'／Ｆ ≦ Ｎ×Ｐlt          (１)
上記式(１)を解くと、
Ｆ' ≦ Ｆ×｛Ｎ／Ｍ×(Ｐlt−Ｐwt)＋Ｐwt｝／Ｐcr
になる。
【００８６】
そこで、次の式(２)により求めたＦ'を用いて、動作中(同期待ちになっておらず、処理を実行中)の処理コアのクロック周波数を制御する。
Ｆ'＝Ｆ×｛Ｎ／Ｍ×(Ｐlt−Ｐwt)＋Ｐwt｝／Ｐcr          (２)
【００８７】
すなわち、動作中の処理コアでは、周波数制御部１１が、式(２)により求めたＦ'をターゲット周波数としてクロック周波数の制御を行うことで、同期グループ全体の消費電力制約を超えることなく、処理コアの周波数をブーストさせて処理を行うことができる。なお、実際には、例えば、ＰＬＬ１２等で設定可能な複数の離散的な周波数の中から、Ｆ'を超えない範囲で最大の値を選択して、クロック周波数の設定を行うことになる。
【００８８】
ここで、式(２)から分かるように、全コア(コア数Ｎ)中の処理コア(処理コア数Ｍ)の比Ｍ／Ｎが小さくなるほど，すなわち、Ｎ／Ｍが大きくなるほど、Ｆ'は大きくなり、また、同期待ちコア電力値Ｐwtが小さいほど、Ｆ'は大きくなる。
【００８９】
また、同期待ち状態が解除されると、Ｍ＝Ｎになるため、式(２)は、次の式(２')のよう表すことができる。
Ｆ'＝Ｆ×(Ｐlt／Ｐcr)          (２')
【００９０】
従って、コア毎にＰcr≦Ｐltを満たす範囲で、周波数ブーストが行われることになる。なお、同期待ち状態が解除されたとき、そのままＦ'を使い続けてもよいが、並列処理するコア間で独立に周波数がばらつくのを避けたい場合、例えば、Ｍ＝Ｎの時は、規定の周波数Ｆwで動作させ、Ｍ＜Ｎの時だけ式(２)で求めたＦ'を使用することもできる。
【００９１】
図６(図７および図８も同様)では、周波数制御部１１の出力部にセレクタ110を設け、自コアの状態が、同期待ち状態と処理中でターゲット周波数を切り替えるようになっている。すなわち、自コアの状態が、処理中(『０』)のときは、Ｆ'をターゲット周波数としてＰＬＬ１２に出力し、同期待ち(『１』)のときは、規定のバリア同期待ち時周波数Ｆwをターゲット周波数としてＰＬＬ１２に出力するようになっている。
【００９２】
このように、本実施形態のマルチコアプロセッサは、同期待ちコアの増減により処理中のコアの周波数を上昇・下降させる制御において、バリア同期制御部５０におけるバリア状態の変化から非常に短いレイテンシでコアの周波数を変更することができる。
【００９３】
すなわち、本実施形態によれば、例えば、バリア状態の変化の後にチップ消費電力の変化を検出する周波数ブースト制御と比べて、バリア状態の変化からコアの周波数を変更するまでの処理を高速に行うことが可能である。
【００９４】
さらに、本実施形態によれば、あるコアが同期待ち状態になることで生じる電力の余裕は、同じ同期グループのコアの周波数の上昇(ブースト)に使用されるため、同期グループ間の消費電力の独立性を保持することができる。
【００９５】
すなわち、本実施形態は、例えば、ユーザ単位や並列ジョブ単位の消費電力制約の設定、或いは、処理時間による課金等の計算機運用に適したものということができる。なお、上述した本実施形態の効果は、第１実施例に限定されるものではなく、以下に説明する第２〜第４実施例でも同様に発揮されるのはいうまでもない。
【００９６】
図７は、マルチコアプロセッサの第２実施例における各コアの周波数制御を説明するためのブロック図である。図７と、上述した図６の比較から明らかなように、本第２実施例では、コア電力値算出部１７の出力を、周波数制御部１１のコア電力値Ｐcrとして与えるようになっている。
【００９７】
ここで、動作周波数のうち、全コアで任意のプログラム実行時に消費電力が動作保障上限を超えないことが設計上保障されている基準周波数を定格周波数と呼び、性能向上のために定格周波数よりも高い周波数で動作させる場合の周波数をブースト周波数と呼ぶ。
【００９８】
本第２実施例では、固定のコア電力値１３をレジスタ(第３レジスタ)130に格納し、定格周波数１８をレジスタ(第４レジスタ)180に格納する。コア電力値算出部１７は、レジスタ130に格納された固定のコア電力値１３、レジスタ180に格納された定格周波数１８および現クロック周波数１６を受け取り、コア電力値を補正(補正されたコア電力値(Ｐcr)を算出)して周波数制御部１１に出力する。
【００９９】
すなわち、コア電力値算出部１７により算出されたコア電力値(Ｐcr)は、周波数制御部１１に入力され、例えば、前述した式(２)に基づいたターゲット周波数Ｆ'の計算に使用される。
【０１００】
なお、レジスタ130に格納する固定のコア電力値１３としては、例えば、定格周波数でのコアの最大電力仕様値、または、実行するプログラムの定格周波数における電力上限値(消費電力がこの値を超えないことを保証できる値)を使用することができる。
【０１０１】
ここで、例えば、コアの固定消費電力値をＰcr-fixとし、Ｐcr-fixから求められるターゲット周波数をＦ-fixとすると、式(２)より、Ｐcr＜Ｐcr-fixであれば、Ｆ'＞Ｆ-fixになるので、同期グループ全体の消費電力がＮ×Ｐltを超えないことが保証される。本第２実施例では、コア電力を固定値として扱うため、周波数ブーストの効果は小さくなるが、回路規模を低減することが可能になる。
【０１０２】
図８は、マルチコアプロセッサの第３実施例における各コアの周波数制御を説明するためのブロック図である。図８と、前述した図６の比較から明らかなように、本第３実施例では、電力モニタ部１９の出力を、周波数制御部１１のコア電力値Ｐcrとして与えるようになっている。
【０１０３】
ここで、電力モニタ部１９には、コア内の電力計算用のイベントカウンタの値が入力され、それに基づいて、動的なコア電力値をモニタし、周波数制御部１１のコア電力値Ｐcrとして与えるようになっている。
【０１０４】
図９は、図８に示す周波数制御部における電力モニタ部の一例を示すブロック図である。図９に示されるように、電力モニタ部１９は、例えば、複数(ｉ個)の乗算器191〜19iと、加算器190を含む。
【０１０５】
各乗算器191〜19iは、それぞれ対応する動作率情報ｒ1〜ｒiと、電力算出用の係数ｃ1〜ｃiを乗算する。乗算器191〜19iの出力は、加算器190により加算され、その加算結果に基づいて、各コアの動的なコア電力値が算出(モニタ)される。
【０１０６】
ここで、動作率情報ｒ1〜ｒiとしては、電力変動と相関の高い信号の動作率、例えば、演算器，命令フェッチおよびキャッシュアクセスの回数を一定期間カウンタでカウントしたもの等を利用することができる。
【０１０７】
なお、カウンタは、例えば、カウントをコアクロック同期で行い、カウンタ値のサンプリングをコアクロックとは独立した固定クロックで行うことにより、コアクロックの調整を反映した電力見積り値(動作率情報)を取得することができる。
【０１０８】
電力モニタ部１９は、図９に示すようなイベントカウンタベースの電力モニタ回路に限定されるものではなく、知られている様々な構成のものを適用することができるのはいうまでもない。
【０１０９】
このように、第３実施例によれば、動的な電力値(Ｐcr)を周波数制御部１１の入力として用いることにより、より一層精度の高いコアのブースト周波数制御が可能になる。なお、電力モニタ部１９は、同期待ち状態と処理状態の遷移に伴うコアの電力変動を検知するのに使用するのではなく、処理中のコアの電力計算に用いている。
【０１１０】
すなわち、本第３実施例において、同期待ちコア数(処理コア数Ｍ)が変化した場合は、その変化時点で算出されているコアの電力情報を用いてコアの周波数が計算される。そのため、イベントカウンタのサンプル時間や消費電力の計算時間は、この周波数制御の制御遅延には含まれないことになる。
【０１１１】
以上において、例えば、同期待ち状態のコアをより消費電力が低い状態に遷移させ、それにより生じた追加の電力余裕により、処理中のコアのブースト周波数をさらに上げることもできる。この同期待ち状態のコアをより消費電力が低い状態に遷移させるのは、前述した式(２)において、Ｎ＞Ｍの時にＰwtが減少すると、Ｆ'が増加することに対応する。
【０１１２】
なお、同期待ち状態のコアの消費電力を低減する手法としては、例えば、クロック周波数を下げる、或いは、クロックを停止するといったものがある。ここで、クロック周波数を下げる場合は、例えば、前述した図６〜図８の周波数制御部１１の出力部に設けたセレクタ110により、同期待ち時に選択される周波数を外部から設定可能にしておき、定格周波数よりも低い周波数に設定すればよい。
【０１１３】
また、クロックを停止する場合は、例えば、自コア状態によりコア全体のクロックのうちバリア同期Ｉ／Ｆのように常に動作させておく部分以外のクロックの動作／停止を制御すればよい。
【０１１４】
さらに、同期待ち状態時のより低い電力状態への移行、或いは、図６〜図８における同期待ちコア電力値設定レジスタ150に対するより低い電力値の設定等により、同期待ちコアが増加した時に、より一層高いブースト周波数への制御も可能になる。
【０１１５】
図１０は、図１０は、マルチコアプロセッサの第４実施例におけるクロック制御処理の一例を説明するためのフローチャートである。図１０に示す第４実施例は、上述した各実施例において、同期待ちコアを低電力状態に移行した後、処理コア数(動作中のコア数)Ｍがある設定値(低電力モード解除閾値)Ｌより小さくなったら同期待ちコアの低電力状態を解除するというものである。
【０１１６】
すなわち、一般的に、コアをより電力の低い休止(同期待ち)状態に移行した場合、再度処理を開始する際には、クロックの再起動やクロック周波数の復帰のような前処理を行うことになるため、性能が低下する。
【０１１７】
そこで、本第４実施例では、同期グループ内の処理中のコアが予め設定した値以下になったら、同期(バリアポイントを通過)する前に、同期待ちコアの低電力状態を解除して、同期後の処理に要する時間を低減する。
【０１１８】
すなわち、図１０に示されるように、クロック制御処理が開始すると、すなわち、低電力モード解除閾値Ｌ，コア数Ｎまたは処理コア数Ｍの変更があったら、ステップＳＴ１１において、自コアは同期待ち状態か否かを判定する。
【０１１９】
ステップＳＴ１１において、自コアは同期待ち状態ではあると判定すると、ステップＳＴ１２に進み、Ｍ＞Ｌが成立するか否かを判定する。ステップＳＴ１２において、Ｍ＞Ｌが成立する、すなわち、処理コア数(動作中のコアの数)Ｍが閾値Ｌよりも多いと判定すると、ステップＳＴ１３に進んで低電力状態に移行し、ステップＳＴ１４に進む。なお、低電力状態では、例えば、コアの周波数を通常の待機状態よりも低くし、或いは、クロックを停止して消費電力を低減する。
【０１２０】
また、ステップＳＴ１２において、Ｍ＞Ｌが成立しない、すなわち、処理コア数Ｍが閾値Ｌ以下であると判定すると、ステップＳＴ１５に進んで低電力状態を解除し、ステップＳＴ１４に進む。なお、低電力状態の解除は、例えば、コアの周波数を通常の待機状態に戻し、或いは、クロックを動作させてバリアポイントに通過した後の処理を短時間で開始可能とする。
【０１２１】
次に、ステップＳＴ１１において、自コアは同期待ち状態ではない、すなわち、処理中(動作中)であると判定すると、ステップＳＴ１６に進み、Ｍ＞Ｌが成立するか否かを判定する。ステップＳＴ１６において、Ｍ＞Ｌが成立する、すなわち、処理コア数Ｍが閾値Ｌよりも多いと判定すると、ステップＳＴ１８に進んで、同期待ちコア電力値設定レジスタ150に対して、低電力待機状態の電力値を設定し、ステップＳＴ１４に進む。
【０１２２】
また、ステップＳＴ１６において、Ｍ＞Ｌが成立しない、すなわち、処理コア数Ｍが閾値Ｌ以下であると判定すると、ステップＳＴ１７に進んで、同期待ちコア電力値設定レジスタ150に対して、通常の待機状態の電力値を設定し、ステップＳＴ１４に進む。なお、ステップＳＴ１４では、Ｌ，Ｍ，Ｎの変更待ちを行い、Ｌ，Ｍ，Ｎのいずれかが変更されると、ステップＳＴ１１に戻り、同様の処理を繰り返す。
【０１２３】
ここで、例えば、ステップＳＴ１５において、低電力状態を解除すると、それ以降、ブースト周波数は、式(２)において、同期待ちコア電力値Ｐwtを通常の同期待ち時電力にして計算されるため、計算上は、現在処理中のコアの周波数を低減することになる。
【０１２４】
しかしながら、上述したように、例えば、周波数制御時の設定周波数は、式(２)のＦ'それ自体ではなく、Ｆ'に基づいて、コアの動作可能範囲でＰＬＬ１２等による設定可能な離散的な周波数設定値の中から選択される。
【０１２５】
そのため、例えば、処理コア数Ｍが非常に小さい場合、Ｆ'の計算値は大きな値になるが、実際の設定周波数は、コアの動作可能上限周波数を超えることはできない。そのため、低電力モード解除閾値Ｌを十分小さく設定すれば、同期待ちコアの低電力状態解除前も解除後も、計算上のＦ'は動作可能上限周波数を超えるため解除後も周波数は下がらない。
【０１２６】
これにより、同期待ちコアの低電力状態を解除しても処理中のコアの周波数の低下を低く抑えることができ、前述したブースト周波数の上昇効果を得ると共に、同期後の処理再開時の復帰時間を短く抑えることが可能になる。
【０１２７】
図１１は、本実施例をＳＭＴ(同時マルチスレッディング：Simultaneous Multi-Threading)コアに適用した場合におけるバリア同期制御部の一構成例を示すブロック図である。なお、図１１では、各コアＣＲ1，ＣＲ2，ＣＲ3，…で実行される複数(４つ)のスレッドに対して、それぞれ論理プロセッサが割り当てられている場合を示す。
【０１２８】
ところで、コアがマルチスレッド対応している場合、異なる同期グループに属する論理プロセッサが同じコアのスレッドに割り当てられた場合、コアのクロックがスレッドで共通である等によりスレッド間の電力を独立して扱うのが困難である。
【０１２９】
しかしながら、「同じコアのスレッドには、異なる同期グループの論理プロセッサを割り当てない」という制約の下で運用することにより、上述した各実施例によるクロック周波数制御を、一部を変更することで、実質的にそのまま適用することができる。
【０１３０】
例えば、第１同期グループマスク回路501において、図５を参照して説明したコア数(第１同期グループに含まれるコア数の情報)Ｎ1acおよび処理コア数(第１同期グループにおける処理中(動作中)のコア数の情報)Ｎ1pcは、次のように変更されることになる。
【０１３１】
例えば、コア数Ｎ1acを、第１同期グループに含まれているスレッドが割り当てられているコアの数に置き換え、処理コア数Ｎ1pcを、第１同期グループに属するスレッドのうち処理中のスレッドが割り当てられているコアの数に置き換える。すなわち、処理コア数Ｎ1pcとして、同期待ちのスレッドのみが割り当てられたコアはカウントしないようにする。
【０１３２】
具体的に、図１１に示されるように、第１同期グループマスク回路501に対して、スレッド毎の情報をコア毎にまとめるEXNORゲート515(５２)，ＯＲゲート516，ＡＮＤゲート517(512)およびＮＡＮＤゲート518を設け、カウンタ513，514でカウントする。すなわち、コア数Ｎ1acは、グループ定義レジスタ511中のビットを、ＯＲゲート516によりコア毎に論理和を取って第１カウンタ513に出力してカウントすることで算出することができる。
【０１３３】
また、処理コア数Ｎ1pcの算出は、まず、バリア状態レジスタ５１の各ビットと同期制御用レジスタBLTの値を、EXNORゲート515により否定排他的論理和を取り、コア状態が同期待ちの時に『１』になる信号を作る。
【０１３４】
そして、グループ定義レジスタ511でマスクし、ＮＡＮＤゲート518により、同一コアのスレッドに対応する信号の否定論理積を取って、第２カウンタ514に出力する。これにより、コア内で対象(第１)グループのスレッドで処理中のものが１つでもあるようなコアを第２カウンタ514でカウントすることでＮ1pcを算出することができる。
【０１３５】
上述した各実施例(本実施形態)によれば、チップ電力に基づいた周波数ブースト機構と比較して、以下のような効果が期待できる。まず、本実施例によれば、バリア同期待ちに入った時およびバリア同期の後続処理が再開した時の周波数の切り替え処理に要する時間を短縮することができる。
【０１３６】
ここで、計算のために、各処理に掛かる時間を、例えば、次のように仮定する。すなわち、電力モニタ部(例えば、図３の411，203，図８の１９等)でアクティビティ情報をサンプリングする間隔を１００μsと仮定し、各コアＣＲ1〜ＣＲnとバリア同期制御部５０または電力管理部200との間の情報伝送にかかる時間を片道３０nsと仮定する。
【０１３７】
また、アクティビティカウンタ値から電力を計算する時間(図８の電力モニタ部１９の処理時間等)，ターゲット周波数を計算する時間およびバリア同期制御部５０内の処理時間を２ns(コアクロックの数サイクル程度)と仮定する。さらに、ＰＬＬ(例えば、図３の202，図４の１２等)で周波数を変更する時間を５μsと仮定する。
【０１３８】
この時、あるコアが処理状態から同期待ち状態に遷移し、それに応じて(処理コア数Ｍの減少に基づいて)処理中の他のコアの周波数が上昇(ブースト)されるまでの時間は、例えば、図３のチップ電力による周波数ブースト方式では、次のようになる。
【０１３９】
[(カウンタサンプル]＋[コア電力計算]＋[信号伝送(コア(200)→電力管理部(210))]＋[チップ電力計算]＋[信号伝送(電力管理部210→コア200)]＋[コア周波数計算]＋[ＰＬＬ周波数変更] ＝ １００μs＋２ns＋３０ns＋２ns＋３０ns＋２ns＋５μs ≒ １０５.１μs
【０１４０】
すなわち、例えば、図３を参照して説明したマルチコアプロセッサでは、処理中のコアと同期待ちのコアが混在する期間が１０５μs以上ないと、周波数ブーストによるばらつき低減の効果が得られないことになる。
【０１４１】
これに対して、本実施例では、あるコアが処理状態から同期待ち状態に遷移し、それに応じて処理中の他のコアの周波数が上昇されるまでの時間は、次のようになる。
【０１４２】
[信号伝送(コア(１０)→バリア同期制御部(５０))]＋[バリア同期制御部内処理]＋[信号伝送(バリア同期制御部→コア)]＋[コア周波数計算]＋[ＰＬＬ周波数変更] ＝ ３０ns＋２ns＋３０ns＋２ns＋５μs ≒ ５.１μs
【０１４３】
すなわち、例えば、図４を参照して説明した本実施形態のマルチコアプロセッサでは、処理中のコアと同期待ちのコアが混在する期間が５μs程度で周波数ブーストによるばらつき低減の効果が得られることになる。これは、上述した図３をを参照して説明した場合に対して、約２１倍の周波数制御速度になることが分かる。
【０１４４】
次に、本実施例によれば、あるコアが同期待ち状態になることで生じる電力余裕は、同じ同期グループのコアの周波数ブーストに使用されることになる。すなわち、本実施例は、同期グループ間の消費電力の独立性を保つことができ、並列ジョブ単位の消費電力制約の設定や処理時間による課金等の計算機運用に適したものであるということができる。
【０１４５】
さらに、上述した各実施例によれば、以下のような効果も期待できる。図１２および図１３は、本実施例のマルチコアプロセッサによる効果を説明するための図であり、８つのコア(プロセッサコア)ＣＲ1〜ＣＲ8を含むマルチコアプロセッサによる処理の例を示すものである。
【０１４６】
ここで、図１２に示されるように、時間Ｔ1では、８個のコアＣＲ1〜ＣＲ8の全てが処理を実行中(処理中)であり、処理コア数Ｎpc(Ｍ)＝８になり、時間Ｔ2では、６個のコアＣＲ3〜ＣＲ8が処理中であり、Ｍ＝６になる。
【０１４７】
また、時間Ｔ3では、５個のコアＣＲ4〜ＣＲ8が処理中であるためＭ＝５になり、時間Ｔ4では、３個のコアＣＲ6〜ＣＲ8が処理中であるためＭ＝６になり、時間Ｔ5では、２個のコアＣＲ7，ＣＲ8が処理中であり、Ｍ＝２になる。なお、コア数Ｎac(Ｎ)は、ＣＲ1〜ＣＲ8の８個であるため、Ｎ＝８になる。
【０１４８】
ここで、一例として、コア電力値上限値１４(Ｐlt)を１０Ｗ、同期待ちコア電力値１５(Ｐwt)を６Ｗ、そして、低電力状態のＰwtを２Ｗと仮定する。さらに、図１３に示されるように、例えば、定格周波数を３.０GHz、設定可能なブースト周波数が３.２GHz，３.４GHz，３.６GHz，３.８GHz，４.０GHz，４.２GHzであるようなマルチコアプロセッサを想定する。なお、これらのブースト周波数は、定格電圧で動作可能であるとする。
【０１４９】
このマルチコアプロセッサで同期グループのコア数が８個(Ｎ＝８)で、処理実行時のコア電力値(Ｐcr)がほぼ１０Ｗ(Ｐcr≒１０Ｗ)であると仮定する。定格周波数におけるバリア同期前のバリア同期待ち状況は、例えば、図１２のように変化する。
【０１５０】
以下に、本実施例(同期待ち状態のコアをより消費電力が低い状態に遷移させ、それにより生じた追加の電力余裕により処理中のコアのブースト周波数をさらに上げる実施例)を適用した場合としなかった場合のバリア同期待ち期間の処理時間の違いを計算する。
【０１５１】
なお、計算を簡単にするために、周波数制御の遅延は無視する。まず、同期グループ内の８個のコア(Ｎ＝８)のうち、処理コア数(Ｍ)を１〜８まで変化させた時、前述した式(２)から求められるターゲット周波数(Ｆ')を上記の設定可能周波数に変換すると、図１３のようになる。
【０１５２】
図１２に示されるように、例えば、同期待ち期間の最初の５０μsの期間(時間Ｔ2)は、６コアが処理中(Ｍ＝６)なので、本実施例を適用した場合としなかった場合のクロック周波数は、それぞれ３.４GHz，３.８GHzになる。
【０１５３】
また、その次の５０μsの期間(時間Ｔ2)は、５コアが処理中(Ｍ＝５)なので、実施例を適用した場合としなかった場合のクロック周波数は、それぞれ３.６GHz，４.２GHzになり、それ以降は、どちらも４.２GHzになる。
【０１５４】
そのため、バリア同期待ち期間の処理時間は、例えば、実施例を適用しない場合、５０×３.０／３.４＋５０×３.０／３.６＋１００×３.０／４.２ ≒ １５７μs になり、適用した場合、５０×３.０／３.８＋１５０×３.０／４.２ ≒ １４７μs になる。従って、処理時間の改善効果は、例えば、(１５７−１４７)／１５７ ≒ ６.７%になる。
【０１５５】
なお、図１０を参照して説明した、同期待ちコアを低電力状態に移行した後、処理コア数がある設定値より小さくなったら同期待ちコアの低電力状態を解除するという第４実施例を適用しない場合、同期完了後に低電力状態からコアを復帰する時間が余計に掛かる。
【０１５６】
なお、図１３に示される場合には、例えば、低電力モード解除閾値を『２』に設定すれば、同期完了(バリアポイントに到達)の５０μs前(実際には、周波数ブーストが適用されるので５０×３.０／４.２ ≒ ３６μs前)の処理コア数が２になった段階で解除される。
【０１５７】
すなわち、処理コア数が２(Ｍ＝２)になった段階で、待機コアの低電力状態が解除されて通常待機状態になるため、復帰時間が３６μs以内であれば、低電力状態からの復帰時間による処理時間の増加は生じないことになる。
【０１５８】
以上において、本実施例は、ソフトウェアプログラムとして実施することもで可能である。その場合、例えば、マルチコアプロセッサの複数のコアにおける所定のプロセッサコア、例えば、ＯＳ(Operating System)プロセスが実行されるコア(演算処理装置)により、実行される。或いは、マルチコアプロセッサの外部に設けられた上位のプロセッサ(演算処理装置)により実行されてもよい。
【０１５９】
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものであり、特に記載された例や条件は発明の範囲を制限することを意図するものではない。また、明細書のそのような記載は、発明の利点および欠点を示すものでもない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
【０１６０】
以上の実施例を含む実施形態に関し、さらに、以下の付記を開示する。
（付記１）
複数のプロセッサコアと、前記プロセッサコア間におけるバリア同期を制御するバリア同期制御部と、を有するマルチコアプロセッサであって、
それぞれの前記プロセッサコアは、
自身のクロック周波数を制御する周波数制御部と、
前記周波数制御部の出力に基づいて、自身のクロック周波数を調整する周波数調整回路と、を含み、
前記周波数制御部は、コア数および処理コア数を受け取って、ターゲット周波数を出力する、
ことを特徴とするマルチコアプロセッサ。
【０１６１】
（付記２）
前記マルチコアプロセッサは、前記マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、
複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、
前記コア数は、それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数であり、
前記処理コア数は、それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数であり、
前記周波数制御部は、それぞれの前記同期グループにおける前記コア数および前記処理コア数を受け取って、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を出力する、
ことを特徴とする付記１に記載のマルチコアプロセッサ。
【０１６２】
（付記３）
それぞれの前記プロセッサコアは、さらに、
コア電力上限値を格納する第１レジスタと、
同期待ちコア電力値を格納する第２レジスタと、を有し、
前記周波数制御部は、それぞれの前記同期グループにおける前記コア数および前記処理コア数と共に、前記コア電力上限値，前記同期待ちコア電力値，現クロック周波数，および，自身のコア電力値に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を出力する、
ことを特徴とする付記２に記載のマルチコアプロセッサ。
【０１６３】
（付記４）
それぞれの前記プロセッサコアは、さらに、
固定のコア電力値を格納する第３レジスタと、
定格周波数を格納する第４レジスタと、
前記固定のコア電力値，前記定格周波数および前記現クロック周波数に基づいて、前記自身のコア電力値を算出するコア電力値算出部と、を有し、
前記コア電力値算出部で算出された前記自身のコア電力値を、前記周波数制御部に出力する、
ことを特徴とする付記３に記載のマルチコアプロセッサ。
【０１６４】
（付記５）
それぞれの前記プロセッサコアは、さらに、
前記自身のコア電力値を、動的にモニタする電力モニタ部を有し、
前記電力モニタ部によりモニタされた前記自身のコア電力値を、前記周波数制御部に出力する、
ことを特徴とする付記３に記載のマルチコアプロセッサ。
【０１６５】
（付記６）
前記電力モニタ部は、
自身の電力計算用のイベントカウンタの値を受け取って、前記自身のコア電力値を動的にモニタする、
ことを特徴とする付記５に記載のマルチコアプロセッサ。
【０１６６】
（付記７）
前記周波数制御部は、
同期待ちに入ったプロセッサコアをより消費電力の低い低電力状態に遷移させると共に、前記処理中のプロセッサコアのクロック周波数を上昇させる、
ことを特徴とする付記２乃至付記６のいずれか１項に記載のマルチコアプロセッサ。
【０１６７】
（付記８）
前記周波数制御部は、
同期待ちに入ったプロセッサコアをより消費電力の低い状態に遷移させた後、前記処理コア数が低電力モード解除閾値より小さくなったら、前記同期待ちのプロセッサコアの低電力状態を解除する、
ことを特徴とする付記２乃至付記６のいずれか１項に記載のマルチコアプロセッサ。
【０１６８】
（付記９）
それぞれの前記プロセッサコアは、さらに、
前記周波数制御部からのターゲット周波数と、規定のバリア同期待ち時周波数の一方を選択して、前記周波数調整回路に出力するセレクタを有する、
ことを特徴とする付記１乃至付記８のいずれか１項に記載のマルチコアプロセッサ。
【０１６９】
（付記１０）
前記周波数調整回路は、ＰＬＬ回路である、
ことを特徴とする付記９に記載のマルチコアプロセッサ。
【０１７０】
（付記１１）
複数のプロセッサコアを有し、複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、前記プロセッサコア間におけるバリア同期を制御するマルチコアプロセッサのクロック制御方法であって、
それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数の情報と、
それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数の情報と、
コア電力上限値の情報と、
同期待ちコア電力値の情報と、
自身のコア電力値の情報と、
に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を算出して制御する、ことを特徴とする、
マルチコアプロセッサのクロック制御方法。
【０１７１】
（付記１２）
さらに、
同期待ちに入ったプロセッサコアをより消費電力の低い低電力状態に遷移させると共に、前記処理中のプロセッサコアのクロック周波数を上昇させる、
ことを特徴とする付記１１に記載のマルチコアプロセッサのクロック制御方法。
【０１７２】
（付記１３）
さらに、
同期待ちに入ったプロセッサコアをより消費電力の低い状態に遷移させた後、前記処理コア数が低電力モード解除閾値より小さくなったら、前記同期待ちのプロセッサコアの低電力状態を解除する、
ことを特徴とする付記１１に記載のマルチコアプロセッサのクロック制御方法。
【０１７３】
（付記１４）
複数のプロセッサコアを有し、複数の前記プロセッサコアは、複数の同期グループに分割して割り当てられ、マルチコアプロセッサの全体、または、バリア同期を行う同期グループ毎に、消費電力の制約が課され、前記プロセッサコア間におけるバリア同期を制御するマルチコアプロセッサのクロック制御プログラムであって、
演算処理装置に、
それぞれの前記同期グループに含まれる全てのプロセッサコアのコア数の情報と、
それぞれの前記同期グループにおける処理中のプロセッサコアの処理コア数の情報と、
コア電力上限値の情報と、
同期待ちコア電力値の情報と、
自身のコア電力値の情報と、
に基づいて、それぞれの前記同期グループにおける前記プロセッサコアのターゲット周波数を算出して制御する、処理を実行させる、ことを特徴とする、
マルチコアプロセッサのクロック制御プログラム。
【０１７４】
（付記１５）
前記演算処理装置は、複数の前記プロセッサコアのいずれか、或いは、前記マルチコアプロセッサの外部に設けられた上位のプロセッサである、
ことを特徴とする付記１４に記載のマルチコアプロセッサのクロック制御プログラム。
【符号の説明】
【０１７５】
１０，100，200，ＣＲ1〜ＣＲn    コア(プロセッサコア)
１１    周波数制御部
１２    ＰＬＬ(周波数調整回路)
１３，Ｐcr    コア電力値
１４，Ｐlt    コア電力上限値
１５，Ｐwt    同期待ちコア電力値
１６，Ｆ    現クロック周波数
１７    コア電力算出部
１８    定格周波数
１９    電力モニタ部
５０，300    バリア同期制御部
５１    バリア状態レジスタ
５２    EXNORゲート
５３    セレクタ回路
110    セレクタ
130，140，150，180    レジスタ
501〜50k    同期グループマスク回路
511    グループ定義レジスタ
512    ＡＮＤゲート
513    第１カウンタ
514    第２カウンタ
Ｎac，Ｎ，Ｎ1ac，Ｎ2ac，…    コア数
Ｎpc，Ｍ，Ｎ1pc，Ｎ2pc，…    処理コア数
【図１】
2017021513.tif 000003
【図２】
2017021513.tif 000004
【図３】
2017021513.tif 000005
【図４】
2017021513.tif 000006
【図５】
2017021513.tif 000007
【図６】
2017021513.tif 000008
【図７】
2017021513.tif 000009
【図８】
2017021513.tif 000010
【図９】
2017021513.tif 000011
【図１０】
2017021513.tif 000012
【図１１】
2017021513.tif 000013
【図１２】
2017021513.tif 000014
【図１３】
2017021513.tif 000015