(57)【要約】【課題】性能低下を防ぎながら情報処理装置の消費電力を削減すること。【解決手段】コンパイル部２１がプログラムコード４の分岐のないループに対して電力プロファイラ情報６を出力するコードを挿入してコンパイルし、結合部２２がコンパイル結果にプロファイラライブラリを結合して実行コード５を生成する。そして、並列計算機３が実行コード５を実行して電力プロファイラ情報６を出力する。そして、解析部２３が電力プロファイラ情報６を解析して周波数制御情報７を作成し、コンパイル部２１が周波数制御情報７に基づいてプログラムコード４に周波数制御コードを挿入してコンパイルし、実行コード５を生成する。そして、並列計算機３が周波数制御コードを含む実行コード５を実行する。【選択図】図５
2019040317.tif 000002
【特許請求の範囲】
【請求項１】
プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成するコンパイル部と、
前記コンパイル部により生成された第１の実行コードを実行して前記プロファイリングデータに基づく電力プロファイラ情報を出力する実行部と、
前記実行部により出力された電力プロファイラ情報を解析して前記実行部に含まれる複数のハードウェアモジュールの周波数制御に用いられる周波数制御情報を作成する解析部とを有し、
前記コンパイル部は、前記解析部により作成された周波数制御情報に基づいて前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成し、
前記実行部は、前記コンパイル部により生成された第２の実行コードを実行することを特徴とする情報処理装置。
【請求項２】
前記解析部は、
前記電力プロファイラ情報に基づいて各ループにおける前記複数のハードウェアモジュールのビジー率を算出する算出部と、
前記算出部により算出された複数のビジー率に基づいて各ループの周波数制御方法を決定し前記周波数制御情報を作成する作成部と
を有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記電力プロファイラ情報には、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックが含まれ、
前記実行部の複数のハードウェアモジュールにはメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算装置が含まれ、
前記算出部は、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックに基づいてメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算装置のビジー率を算出することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記周波数制御情報には、前記ループに対応する区間の実行時間が含まれ、
前記コンパイル部は、前記区間の平均実行時間が所定の閾値以上である場合に該ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成することを特徴とする請求項１、２又は３に記載の情報処理装置。
【請求項５】
前記コンパイル部は、複数の前記ループについて各ループの前に周波数を変更する周波数制御コードを挿入し、各ループの後に周波数を元に戻す周波数制御コードを挿入し、周波数を元に戻す周波数制御コードの直後に周波数を変更する周波数制御コードがある場合には、周波数を元に戻す周波数制御コードを削除することを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
コンピュータが、
プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成し、
前記第１の実行コードが処理装置により実行されて採取されたプロファイリングデータを用いて作成された電力プロファイラ情報に基づき前記処理装置に含まれる複数のハードウェアモジュールの周波数制御用に作成された周波数制御情報に基づいて、前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成する
処理を実行することを特徴とするコンパイル方法。
【請求項７】
コンピュータに、
プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成し、
前記第１の実行コードが処理装置により実行されて採取されたプロファイリングデータを用いて作成された電力プロファイラ情報に基づき前記処理装置に含まれる複数のハードウェアモジュールの周波数制御用に作成された周波数制御情報に基づいて、前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成する
処理を実行させることを特徴とするコンパイルプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、コンパイル方法及びコンパイルプログラムに関する。
【背景技術】
【０００２】
ＨＰＣ（High  Performance  Computing）等の分野では、処理性能を維持しながら消費電力を削減することが重要となっている。処理性能を維持しながら消費電力を削減する技術としてＤＦＳ（Dynamic  Frequency  Scaling）制御がある。ＤＦＳ制御は、動作周波数を制御することで電力消費を制御する。
【０００３】
図２４は、ＤＦＳ制御による省電力化を説明するための図である。図２４において、コア＃０及びコア＃１は、ＣＰＵ（Central  Processing  Unit）コアであり、ｐ＃１〜ｐ＃３はループ単位の処理単位である。縦軸は、上から下に向けて時間の経過を示す。図２４（ａ）は、コアに対してのＤＦＳ制御による省電力化例を示し、図２４（ｂ）は、コアに対してのＤＦＳ制御が有効にならないケースを示す。
【０００４】
図２４（ａ）では、コア＃０でｐ＃１の処理が行われ、コア＃１でｐ＃２の処理が行われ、ｐ＃１とｐ＃２の処理が終了するとコア＃１でｐ＃３の処理が行われる。ｐ＃２の処理はｐ＃１より早く終了するため、コア＃１の動作に空きがある。したがって、例えば、コア＃１の動作周波数を１／２にしてもｐ＃２の完了時刻がｐ＃１の完了時刻よりも遅くならない場合には、コア＃１の消費電力を１／２とすることができる。このように、複数のコアが並列して動作する場合、いずれかのコアの動作に空きがあると、空きのあるコアの動作周波数を下げることで省電力化が可能となる。
【０００５】
なお、電力が供給されて所定の動作を行う複数のコンポーネントの少なくとも１つの動作状況に基づいて、あらかじめ設定された条件を満たすように複数のコンポーネントに配分する電力の割合を制御する技術がある。
【０００６】
また、コンピュータのメモリ性能に関する情報を閾値と比較することで、処理装置がメモリ性能に依存する制約状態であるかを判定し、処理装置がメモリ性能に依存する制約状態であるとき、処理装置の演算能力を下げる制御を行う技術がある。この技術によれば、不要な演算能力を削減することができ、性能低下を抑えながら処理装置の消費電力を削減することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１６−１８９１０９号公報
【特許文献２】国際公開第２００８／１２０２７４号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
図２４（ｂ）に示すように、コアの動作に空きがない場合には、ＤＦＳ制御によりコアの消費電力を削減することができないという問題がある。いずれかのコアの動作周波数を下げると、処理に遅れが発生する。
【０００９】
本発明は、１つの側面では、性能低下を防ぎながら情報処理装置の消費電力を削減することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、情報処理装置は、コンパイル部と実行部と解析部とを有する。コンパイル部は、プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成する。実行部は、コンパイル部により生成された第１の実行コードを実行してプロファイリングデータに基づく電力プロファイラ情報を出力する。解析部は、実行部により出力された電力プロファイラ情報を解析して実行部に含まれる複数のハードウェアモジュールの周波数制御に用いられる周波数制御情報を作成する。そして、コンパイル部は、解析部により作成された周波数制御情報に基づいてソースプログラムのループに対して複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成する。そして、実行部は、コンパイル部により生成された第２の実行コードを実行する。
【発明の効果】
【００１１】
１つの側面では、本発明は、性能低下を防ぎながら情報処理装置の消費電力を削減することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、ＤＦＳ制御の対象とするループの条件を説明するための図である。
【図２】図２は、実施例に係る情報処理システムによる省電力化を説明するための図である。
【図３】図３は、性能低下せずに消費電力を低減できるケースを説明するための図である。
【図４Ａ】図４Ａは、ループにおいて消費電力を低減できる第１のケースを説明するための図である。
【図４Ｂ】図４Ｂは、ループにおいて消費電力を低減できる第２のケースを説明するための図である。
【図４Ｃ】図４Ｃは、ループにおいて消費電力を低減できる第３のケースを説明するための図である。
【図５】図５は、実施例に係る情報処理システムの構成を示す図である。
【図６Ａ】図６Ａは、情報処理システムの動作（データ採取）を示す図である。
【図６Ｂ】図６Ｂは、情報処理システムの動作（データ解析）を示す図である。
【図７】図７は、コマンド例を示す図である。
【図８】図８は、プロファイリング用翻訳の処理フローを示すフローチャートである。
【図９】図９は、プロファイリング用翻訳の例を示す図である。
【図１０Ａ】図１０Ａは、プロファイリングデータを採取する処理のフロー及び電力プロファイラ情報の例を示す図である。
【図１０Ｂ】図１０Ｂは、プロファイリングデータの採取例を示す図である。
【図１１】図１１は、電力プロファイラ情報を解析する処理のフローを示すフローチャートである。
【図１２】図１２は、ビジー率を算出する処理のフローを示すフローチャートである。
【図１３】図１３は、ビジー率の算出式の例を示す図である。
【図１４】図１４は、ビジー率情報の例を示す図である。
【図１５】図１５は、周波数制御方法を決定する処理のフローを示すフローチャートである。
【図１６Ａ】図１６Ａは、周波数制御情報の例を示す図である。
【図１６Ｂ】図１６Ｂは、周波数制御情報の他の例を示す図である。
【図１７】図１７は、プロファイリングデータの解析例を示す図である。
【図１８】図１８は、周波数制御コードを埋め込む処理のフローを示すフローチャートである。
【図１９】図１９は、周波数制御コードとして挿入される周波数制御関数の例を示す図である。
【図２０】図２０は、プログラムコードへの周波数制御コードの埋め込み例を示す図である。
【図２１】図２１は、再翻訳コードによる省電力実行のフローを示すフローチャートである。
【図２２】図２２は、利用者によるカストマイズ例を示す図である。
【図２３】図２３は、実施例に係る管理プログラムを実行するコンピュータのハードウェア構成を示す図である。
【図２４】図２４は、ＤＦＳ制御による省電力化を説明するための図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する情報処理装置、コンパイル方法及びコンパイルプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１４】
実施例に係るＤＦＳ制御では、ループを処理単位としてＤＦＳ制御を行う。そこで、まず、ＤＦＳ制御の対象とするループの条件について説明する。図１は、ＤＦＳ制御の対象とするループの条件を説明するための図である。図１に示すように、ループにはＣＰＵ資源のビジー（busy）状態が変化するループと変化しないループがある。ここで、ＣＰＵ資源とは、ＣＰＵの処理に関係するハードウェアモジュールであり、例えば、メモリ、Ｌ２キャッシュ、Ｌ１キャッシュ、演算器がある。
【００１５】
ビジー状態が変化するループは、図１（ａ）に示すように、制御構造が複雑なループであり、ｉｆ分等の分岐があるループである。分岐があると、命令実行による処理の流れが途切れるため、ＣＰＵ資源の利用が均一でなくなる。すなわち、分岐が発生すると、命令シーケンスが途切れてしまい演算のビジー状態が変化する。また、データアクセスも連続性が途切れるため、メモリ及びキャッシュ系のビジー状態も変化する。
【００１６】
一方、ビジー状態が変化しないループは、図１（ｂ）に示すように、制御構造が単純なループであり、ｉｆ分等の分岐がないループである。分岐がないと、処理の流れが一律となるため、ＣＰＵ資源の利用が均一となり、ビジー状態が変化しない。図１（ｂ）では、複数行の演算処理となるが、基本的には、データをローディングして演算して結果をセーブする処理であるため、ＣＰＵ資源の利用状況は均一となる。
【００１７】
ビジー状態が変化するループについては、一律なＤＦＳ制御は行えない。したがって、実施例に係る情報処理システムは、ビジー状態が変化しないループを対象としてＤＦＳ制御を行う。
【００１８】
次に、実施例に係る情報処理システムによる省電力化について説明する。図２は、実施例に係る情報処理システムによる省電力化を説明するための図である。図２において、Ｍはメモリを表し、Ｌ＃２はＬ２キャッシュを表し、Ｌ＃１はＬ１キャッシュを表し、Ｃは演算器を表す。ｐ＃１、ｐ＃２はループ単位の処理単位である。縦軸は、上から下に向けて時間の経過を示す。また、コア＃０の処理に関係するハードウェアモジュールとしてメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算器がある。ハードウェアモジュールの四角は、ハードウェアモジュールがビジーである時間を表す。
【００１９】
図２に示すように、通常状態において、コア＃０の全体動作としては空きはないが、ハードウェアモジュール単位では空きがある。そこで、実施例に係る情報処理システムは、ハードウェアモジュール単位でＤＦＳ制御を行う。
【００２０】
例えば、ｐ＃１の処理では、Ｌ２キャッシュメモリの動作に空きがあるので、実施例に係る情報処理システムは、Ｌ２キャッシュメモリの電力を１／２とする。また、演算器の動作にも空きがあるので、実施例に係る情報処理システムは、演算器の電力を１／４とする。
【００２１】
演算器の電力を１／４とすることで、演算器の動作時間が４倍になるが、ｐ＃１の時間はメモリの時間によって決まるため、性能への影響はない。Ｌ２キャッシュについても同様で電力を１／２にしても性能への影響はない。
【００２２】
また、ｐ＃２の処理では、メモリの動作に空きがあるので、実施例に係る情報処理システムは、メモリの電力を１／２とする。なお、動作周波数を１／２とすることで、ハードウェアモジュールの電力は１／２となり、動作周波数を１／４とすることで、ハードウェアモジュールの電力は１／４となる。
【００２３】
図３は、性能低下せずに消費電力を低減できるケースを説明するための図である。図３において、値は時間比を表し、値が大きいほど処理は遅い。図３に示すように、ケース（１）では、メモリアクセスがネックであり、例えば演算器の動作周波数を１／４としても性能は低下しない。また、ケース（２）でも、メモリアクセスがネックであり、例えばＬ２キャッシュの動作周波数を１／２としても性能は低下しない。
【００２４】
ケース（３）では、Ｌ２キャッシュアクセスがネックであり、例えばメモリの動作周波数を１／２としても性能は低下しない。ケース（３）は、ケース（１）及び（２）とは動作周波数を低減できるメカニズムが異なる。ケース（１）及び（２）では、ハードウェアモジュール間の動作速度の違いにより、動作速度の速いハードウェアモジュールの動作周波数を下げる。一方、ケース（３）は、Ｌ２オンキャッシュでＬ２キャッシュネックとなった場合であり、オンキャッシュの状態が一定時間継続すれば、メモリから見るとＬ２キャッシュへのデータ供給が遅延しても問題とならないケースである。
【００２５】
図４Ａ〜図４Ｃは、ループにおいて消費電力を低減できるケースを説明するための図である。図４Ａはメモリアクセスネック時の演算処理の周波数低減のケースであり、図４Ｂはメモリアクセスネック時のキャッシュ処理の周波数低減のケースであり、図４Ｃはキャッシュアクセスネック時のメモリアクセスの周波数低減のケースである。
【００２６】
図４Ａ〜図４Ｃにおいて、「−」は１回転目でハードウェアモジュールがビジー状態であることを表し、「＝」は２回転目でハードウェアモジュールがビジー状態であることを表し、「＋」は３回転目でハードウェアモジュールがビジー状態であることを表す。「−」、「＝」、「＋」の１文字が１単位時間を表す。また、メモリアクセス又はキャッシュアクセスが完了したところで演算処理が行われるため、演算処理はメモリアクセス又はキャッシュアクセスの完了を待つ。
【００２７】
図４Ａ（ａ）は、図４Ａに示すケースのプログラム例である。図４Ａ（ａ）に示すように、図４Ａのケースでは３回の繰り返し処理が行われる。図４Ａ（ｂ）は、性能低下しないケースを示す。図４Ａ（ｂ）に示すように、メモリアクセスに４単位時間かかり、演算処理に２単位時間かかる場合には、演算処理の周波数を１／２に低減させても最後の「＋＋」のみコスト増加となるだけで、性能低下はほとんどない。
【００２８】
一方、図４Ａ（ｃ）に示すように、メモリアクセスに２単位時間かかり、演算処理に２単位時間かかる場合には、演算処理の周波数を１／２に低減させると、３回の繰り返し処理で８単位時間が１４単位時間になり性能低下が発生する。
【００２９】
また、図４Ａ（ｄ）に示すように、繰り返し回数が１００００００と大きい場合には、図４Ａ（ｂ）に示した最後の「＋＋」は、全体の処理時間の中での比率が小さく性能低下は発生しない。
【００３０】
また、図４Ｂに示すように、キャッシュアクセスの周波数を１／２に低減させてもコスト増加はなく、性能低下はない。さらに、演算処理の周波数を１／２に低下させても最後の「＋」のみコスト増加となるだけで、性能低下はほとんどない。
【００３１】
また、図４Ｃ（ａ）に示すように、メモリアクセスの周波数を１／２に低下させても、最初のメモリアクセスの遅延の影響で最後の「＋」のみコスト増加となるだけで、性能低下はほとんどない。図４Ｃ（ａ）では、メモリアクセスとキャッシュアクセスは並行して動作するため、メモリアクセスがオンキャッシュのキャッシュアクセスに隠れて性能への影響はない。また、図４Ｃ（ｂ）に示すように、回転数を１００００００に増やすと、最後の「＋」の影響は１／（１＋１００００００×５＋１）であり、性能低下はほとんどない。
【００３２】
次に、実施例に係る情報処理システムの構成について説明する。図５は、実施例に係る情報処理システムの構成を示す図である。図５に示すように、実施例に係る情報処理システム１は、管理装置２と並列計算機３とを有する。管理装置２は、並列計算機３の実行を管理する。並列計算機３は複数の計算機を有し、各計算機あるいは各計算機が有する複数のコアが並列に処理を行う。複数の計算機は、２次元、３次元、６次元等にメッシュ接続あるいはトーラス接続される。
【００３３】
管理装置２は、コンパイル部２１と結合部２２と解析部２３とを有する。コンパイル部２１は、プログラムコード（ソースプログラム）４を翻訳する。コンパイル部２１は、プロファイル採取が指定されるとプロファイリング用翻訳を行う。結合部２２は、コンパイル部２１によりプロファイリング用翻訳が行われた場合に、翻訳結果にプロファイラライブラリを結合し、実行コード５を作成する。
【００３４】
実行コード５は並列計算機３により実行される。コンパイル部２１がプロファイリング用翻訳を行うと、並列計算機３は実行コード５を実行して電力プロファイラ情報６を出力する。電力プロファイラ情報６は、並列計算機３の電力に関連するハードウェアカウンタの情報である。
【００３５】
解析部２３は、電力プロファイラ情報６を解析してループ毎に各ハードウェアモジュールの周波数制御方法を決定し、周波数制御情報７を作成する。周波数制御情報７は、ループ毎にハードウェアモジュール間の周波数比を定義する情報である。
【００３６】
コンパイル部２１は、周波数制御情報７に基づいて周波数制御コードをプログラムコード４に挿入し、実行コード５を作成する。実行コード５は並列計算機３により実行される。実行コード５に周波数制御コードが含まれると、並列計算機３は、ハードウェアモジュールの周波数を制御しながら実行コード５を実行する。
【００３７】
コンパイル部２１は、第１挿入部２１ａと第２挿入部２１ｂを有する。第１挿入部２１ａは、コンパイル部２１がプロファイリング用翻訳を行う場合に、ループ毎に分岐が含まれるか否かを判定し、分岐が含まれないループに対してプロファイラライブラリを呼び出すコードを挿入する。
【００３８】
第２挿入部２１ｂは、周波数制御情報７に基づいて周波数制御コードをプログラムコード４に挿入する。第２挿入部２１ｂは、周波数制御コードを挿入する際に最適化を行って不要な周波数制御コードを削除する。
【００３９】
解析部２３は、算出部２３ａと作成部２３ｂを有する。算出部２３ａは、電力プロファイラ情報６に基づいてループ毎に各ハードウェアモジュールのビジー率を算出し、ビジー率情報を作成する。作成部２３ｂは、ビジー率情報に基づいてループ毎に各ハードウェアモジュールの周波数制御方法を決定し、周波数制御情報７を作成する。
【００４０】
なお、ここでは管理装置２がコンパイル部２１、結合部２２及び解析部２３を有するが、管理装置２とは別の装置がコンパイル部２１、結合部２２及び解析部２３を有してもよい。また、管理装置２とは別の装置がコンパイル部２１及び結合部２２と解析部２３のいずれかを有してもよい。また、管理装置２とは別の第１装置がコンパイル部２１及び結合部２２を有し、管理装置２及び第１装置とは別の第２装置が解析部２３を有してもよい。また、コンパイル部２１が結合部２２及び解析部２３の機能を有してもよい。
【００４１】
次に、情報処理システム１の動作について説明する。図６Ａは、情報処理システム１の動作（データ採取）を示す図であり、図６Ｂは、情報処理システム１の動作（データ解析）を示す図である。図６Ａ及び図６Ｂにおいて、ＣＭＰはコンパイル処理を示し、ＥＸＥは実行コード５の実行を示し、ＡＮＬは電力制御解析を示す。
【００４２】
図６Ａに示すように、情報処理システム１は、プログラムコード４を入力し、プロファイリング用の翻訳を行う（ステップＳ１）。なお、情報処理システム１は、プロファイリング用の翻訳が指定されている場合に、プロファイリング用の翻訳を行う。そして、情報処理システム１は、翻訳結果にプロファイラライブラリを結合し、実行コード５を生成する（ステップＳ２）。
【００４３】
プログラムコード４の修正は不要であり、情報処理システム１がプロファイリング用の翻訳を行ってプロファイラライブラリを結合するだけである。情報処理システム１は、プロファイリング用翻訳により、ループ毎に電力に関連するハードウェアカウンタ情報の採取コードを挿入する。
【００４４】
そして、情報処理システム１は、ｆａｐｐを実行する（ステップＳ３）。情報処理システム１は、ｆａｐｐコマンドを実行することで、プロファイラがループ毎に電力に関連するハードウェアカウンタ情報を採取し（ステップＳ４）、電力プロファイラ情報６を作成する。
【００４５】
そして、図６Ｂに示すように、情報処理システム１は、ｆａｐｐｐｘを実行する（ステップＳ５）。情報処理システム１は、ｆａｐｐｐｘコマンドにて、電力制御解析を実行する。電力制御解析において、情報処理システム１は、並列計算機３のハードウェアモジュールのビジー率を算出し、ビジー率から最適な周波数制御方法を決定して周波数制御情報７を出力する。
【００４６】
そして、情報処理システム１は、周波数制御情報７に従って周波数制御コードを埋め込み（ステップＳ６）、翻訳を行って実行コード５を作成する。実行コード５は周波数制御コードを含んでいるため、情報処理システム１は、実行コード５を実行することで、消費電力を低減できる。
【００４７】
図７は、コマンド例を示す図である。最初の翻訳（１）では、ｆｃｃ  −ｅｃｏ−ｂｕｓｙ  ａ．ｃが用いられる。ｆｃｃはＣプログラムのコンパイルを指示するコマンドである。−ｅｃｏ−ｂｕｓｙは、省電力モードでのビジー状態採取コードを挿入する翻訳を指定する。ここで、ビジー状態採取コードとは、ハードウェアモジュールのビジー状態を特定するための情報を採取するコードである。ａ．ｃはプログラム名である。
【００４８】
データ採取（２）では、ｆａｐｐ  −ｅｃｏ  −ｗ  Ｖｐｒｏｆ．ｄａｔ  ａ．ｏｕｔが用いられる。ｆａｐｐは電力プロファイラ情報６の収集を指示するコマンドである。−ｅｃｏは省電力モードでのプロファイリング実行を指定する。−ｗ  Ｆｉｌｅは電力プロファイラ情報６の出力先のファイル名を指定する。ａ．ｏｕｔは実行コード名である。
【００４９】
データ解析（３）では、ｆａｐｐｐｘ  −ｅｃｏ  −ｗ  Ｖｐｒｏｆ．ｄａｔ  −ｆ  ｆｒｅｑ．ｄａｔが用いられる。ｆａｐｐｐｘは電力プロファイラ情報６の解析を指示するコマンドである。−ｅｃｏは省電力モードでのプロファイリングデータ解析を指定する。−ｗ  Ｄｉｒは電力プロファイラ情報６の入力ファイル名を指定する。−ｆ  ｆｒｅｑ．ｄａｔは周波数制御情報７の出力先ファイル名を指定する。
【００５０】
再翻訳（４）では、ｆｃｃ  −ｅｃｏ  −ｆ  ｆｒｅｑ．ｔｘｔ  ａ．ｃが用いられる。−ｅｃｏは省電力モードでの翻訳を指定する。−ｆ  Ｆｉｌｅは周波数制御情報７のファイル名を指定する。
【００５１】
省電力実行（５）では、ａ．ｏｕｔ  ［−ｅｃｏ｜−ｎｏｅｃｏ］が用いられる。−ｅｃｏは省電力モードでの実行を指定し、−ｎｏｅｃｏは省電力モードでない実行を指定する。省電力モードでない実行では周波数制御コードは無視される。−ｅｃｏがデフォルトである。ａ．ｏｕｔは実行コード名である。
【００５２】
次に、情報処理システム１の処理のフロー及び処理例について説明する。図８は、プロファイリング用翻訳の処理フローを示すフローチャートである。図８に示すように、コンパイル部２１は、プログラムコード４の読み込みを行い（ステップＳ１１）、ステップＳ１２〜ステップＳ１３の処理をループ（Ｉ）毎に実施する。
【００５３】
すなわち、コンパイル部２１は、ループ内に分岐処理があるか否かを判定し（ステップＳ１２）、ループ内に分岐処理がある場合には、次のループを処理する。一方、ループ内に分岐処理がない場合には、コンパイル部２１は、ループの前後にプロファイリング用コードを挿入し（ステップＳ１３）、次のループを処理する。そして、全てのループを処理すると、コンパイル部２１は、プロファイリング用翻訳の処理を終了する。
【００５４】
このように、コンパイル部２１が分岐処理がないループを対象としてプロファイリング用コードを挿入することで、ＣＰＵ資源の利用が均一なループを対象とした周波数制御が可能となる。
【００５５】
図９は、プロファイリング用翻訳の例を示す図である。図９（ａ）はプログラムコード４を示し、図９（ｂ）はビジー状態採取コードが挿入されたコードを示す。ａ．ｆは、プログラムコード４がＦＯＲＴＲＡＮで記述されていることを示す。図９（ａ）に示すように、プログラムコード４には３つのｄｏループが含まれる。１つ目と３つ目のループには分岐処理がないので、図９（ｂ）に示すように、ビジー状態採取コードとしてｃａｌｌ  ｂｕｓｙ＿ｓｔａｒｔ（）及びｃａｌｌ  ｂｕｓｙ＿ｓｔｏｐ（）が挿入される。一方、２つ目のループにはｉｆ文による分岐処理があるので、ビジー状態採取コードは挿入されない。
【００５６】
図１０Ａは、プロファイリングデータを採取する処理のフロー及び電力プロファイラ情報６の例を示す図であり、図１０Ｂは、プロファイリングデータの採取例を示す図である。
【００５７】
図１０Ａに示すように、並列計算機３は、ループの先頭でハードウェアカウンタ情報の採取を開始する（ステップＳ２１）。そして、並列計算機３は、以下のビジー率を求めるために必要なハードウェアカウンタ情報を採取する（ステップＳ２２）。ビジー率には、メモリアクセス利用率、Ｌ２キャッシュアクセス利用率、Ｌ１キャッシュアクセス利用率及び演算処理利用率がある。
【００５８】
これらのビジー率を求めるために必要なハードウェアカウンタ情報には、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、命令コミット数、Ｌ１パイプバリッド及びＬ２ライトバックがある。電力プロファイラ情報６は、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、命令コミット数、Ｌ１パイプバリッド及びＬ２ライトバックの情報を呼出し回数とともにループに対応付ける情報である。なお、上記に上げたハードウェアカウンタ情報はＣＰＵアーキテクチャに依存するため、ＣＰＵアーキテクチャに準じて必要なハードウェアカウンタ情報も変わる。
【００５９】
例えば、図１０Ａでは、「ｌｏｏｐ＃１」に、サイクルカウント「１４５０３２」、Ｌ１キャッシュミス数「３９８５」、Ｌ２キャッシュミス数「７８９０」、命令コミット数「２２９８」、Ｌ１パイプバリッド「４９８２」、Ｌ２ライトバック「１１２０８」、呼び出し回数「１００」が対応付けられる。また、図１０Ａでは、電力プロファイラ情報６には、複数のレコードが含まれ、１レコードに１つのループに対応付けられる情報が含まれる。なお、１つのループには複数のレコードが対応付けられてもよい。
【００６０】
そして、並列計算機３は、ループの最後でハードウェアカウンタ情報の採取を終了する（ステップＳ２３）。そして、並列計算機３は、採取したハードウェアカウンタ情報及び呼出し回数情報をループ毎に電力プロファイラ情報６として出力する（ステップＳ２４）。
【００６１】
また、図１０Ｂに示すように、１つ目と３つ目の分岐処理のないループについて、プロファイリングデータが採取される。図１０Ｂにおいて、「ｆｕｎｃ１−１」、「ｆｕｎｃ１−２」は区間の名前である。区間は分岐処理のないループに対応付けられる。
【００６２】
図１１は、電力プロファイラ情報６を解析する処理のフローを示すフローチャートである。図１１に示すように、解析部２３は、電力プロファイラ情報６を読み込み（ステップＳ３１）、各ループのビジー率の算出を行う（ステップＳ３２）。そして、解析部２３は、ループ毎に各ハードウェアモジュールの周波数制御方法を決定し（ステップＳ３３）、周波数制御情報７を作成する。
【００６３】
図１２は、ビジー率を算出する処理のフローを示すフローチャートである。なお、図１２では、１つの区間に複数の採取タイミングがあり、１レコードに１回の採取データが含まれる。図１２に示すように、解析部２３は、ビジー率の０初期化を行う（ステップＳ４１）。
【００６４】
そして、解析部２３は、電力プロファイラ情報６から情報を１レコード（Ｉ）毎に取り出し、ステップＳ４２の処理を全レコードについて行う。ステップＳ４２では、解析部２３は、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、命令コミット数、Ｌ１パイプバリッド及びＬ２ライトバックを区間毎に加算する。
【００６５】
そして、解析部２３は、区間毎のビジー率を算出し（ステップＳ４３）、ビジー率情報を作成する。図１３は、ビジー率の算出式の例を示す図である。図１３に示すように、
メモリビジー率＝メモリスループット／メモリスループット上限
Ｌ２ビジー率＝（Ｌ２スループット＋メモリスループット×係数）／Ｌ２スループット上限
Ｌ１ビジー率＝Ｌ１パイプバリッド／サイクルカウント
演算ビジー率＝浮動小数点演算パイプライン／サイクルカウント
である。
【００６６】
ここで、
メモリスループット＝（Ｌ２キャッシュミス数＋Ｌ２ライトバック）×キャッシュラインサイズ／サイクルカウント／クロック周波数
Ｌ２スループット＝Ｌ１キャッシュミス数×キャッシュラインサイズ／サイクルカウント／クロック周波数
である。また、Ｌ２ビジー率の算出に用いる係数は０．３、０．６等である。
【００６７】
図１４は、ビジー率情報の例を示す図である。図１４に示すように、ビジー率情報は、各区間のメモリビジー率、Ｌ２ビジー率、Ｌ１ビジー率及び演算ビジー率を示す情報である。また、ビジー率情報は、各区間の合計時間及び呼出し回数も示す。例えば、「ｌｏｏｐ＃１」のメモリビジー率は「８０％」であり、Ｌ２ビジー率は「２０％」であり、Ｌ１ビジー率は「３０％」であり、演算ビジー率は「２０％」であり、合計時間は「１３秒」であり、呼出し回数は「１００」である。
【００６８】
図１５は、周波数制御方法を決定する処理のフローを示すフローチャートである。図１５に示すように、解析部２３は、ビジー率情報に含まれる各区間（Ｉ）について、ステップＳ５１〜ステップＳ５７の処理を行う。
【００６９】
すなわち、解析部２３は、ビジー率が最大となるハードウェアモジュールＭと値Ｒを記憶し、Ｍの電力比を１．００とする（ステップＳ５１）。そして、解析部２３は、残りの３つの各ハードウェアモジュール（Ｊ）について、ステップＳ５２〜ステップＳ５７の処理を行う。
【００７０】
すなわち、解析部２３は、Ｊの電力比＝Ｊのビジー率／Ｍのビジー率を計算する（ステップＳ５２）。そして、解析部２３は、２つの閾値０．４と０．２を用いて、電力比を１、０．５０又は０．２５に調整する。具体的には、解析部２３は、電力比が０．４以上であるか否かを判定し（ステップＳ５３）、０．４以上である場合には電力比を１．００とする（ステップＳ５７）。一方、電力比が０．４以上でない場合には、解析部２３は、電力比が０．２以上であるか否かを判定し（ステップＳ５４）、０．２以上である場合は電力比を０．５０とし（ステップＳ５５）、０．２以上でない場合は電力比を０．２５とする（ステップＳ５６）。そして、解析部２３は、周波数制御情報７を作成する。
【００７１】
このように、解析部２３が周波数制御方法としてハードウェアモジュールの電力比を決定して周波数制御情報７を作成することで、コンパイル部２１は周波数制御情報７に基づいて周波数制御コードを挿入することができる。
【００７２】
図１６Ａは、周波数制御情報７の例を示す図である。図１６Ａに示すように、周波数制御情報７は、各区間にメモリ周波数比、Ｌ２周波数比、Ｌ１周波数比及び演算周波数比を対応付ける。ここで、各ハードウェアモジュールの周波数比は、図１５に示した処理で決定された電力比である。また、周波数制御情報７は、各区間に合計時間及び呼出し回数を対応付ける。例えば、区間「ｌｏｏｐ＃１」のメモリ周波数比は「１．００」であり、Ｌ２周波数比は「０．２５」であり、Ｌ１周波数比は「０．５０」であり、演算周波数比は「０．２５」であり、合計時間は「１３秒」であり、呼出し回数は「１００」である。
【００７３】
図１６Ｂは、周波数制御情報７の他の例を示す図である。図１６Ｂは、閾値を用いた電力比の調整を行わなかった場合を示す。例えば、区間「ｌｏｏｐ＃１」のメモリ周波数比は「１．００」であり、Ｌ２周波数比は「０．２０」であり、Ｌ１周波数比は「０．３０」であり、演算周波数比は「０．２０」であり、合計時間は「１３秒」であり、呼出し回数は「１００」である。
【００７４】
図１７は、プロファイリングデータの解析例を示す図である。図１７に示すように、電力プロファイラ情報６からビジー率情報が作成され、ビジー率情報から周波数制御情報７が作成される。
【００７５】
図１８は、周波数制御コードを埋め込む処理のフローを示すフローチャートである。図１８に示すように、コンパイル部２１は、周波数制御情報７の読み込みを行う（ステップＳ６１）。そして、コンパイル部２１は、以下のステップＳ６２〜ステップＳ６３の処理を周波数制御情報７の区間（Ｉ）毎に実施する。
【００７６】
すなわち、コンパイル部２１は、１回の区間平均時間が閾値未満であるか否かを判定する（ステップＳ６２）。ここで、区間平均時間は合計時間／呼出し回数である。そして、コンパイル部２１は、１回の区間平均時間が閾値未満である場合には次の区間を処理し、閾値以上である場合には、区間に対応するループの前後に周波数制御コードを挿入する（ステップＳ６３）。そして、全ての区間についてステップＳ６２〜ステップＳ６３の処理を終了すると、コンパイル部２１は、周波数制御命令を埋め込む処理を終了する。
【００７７】
このように、コンパイル部２１は、１回の区間平均時間が閾値未満である場合には周波数制御コードを埋め込まないことで、省電力効果の少ないループについて周波数制御によるオーバヘッドの発生を防ぐことができる。
【００７８】
図１９は、周波数制御コードとして挿入される周波数制御関数の例を示す図である。図１９（ａ）は関数仕様を示し、図１９（ｂ）はコンパイル出力例を示す。図１９（ａ）に示すように、周波数制御関数ｆｒｅｑｃｎｔｌは４つの引き数を有する。ａｒｇ＃１はメモリの周波数制御値であり、ａｒｇ＃２はＬ２キャッシュの周波数制御値であり、ａｒｇ＃３はＬ１キャッシュの周波数制御値であり、ａｒｇ＃４は演算器の周波数制御値である。
【００７９】
また、図１９（ｂ）に示すように、ｌｏｏｐ＃１〜ｌｏｏｐ＃４で表される４つのループの前後に周波数制御関数が挿入される。図１９（ｂ）において、Ｌ２周波数はＬ２キャッシュの周波数であり、Ｌ１周波数はＬ１キャッシュの周波数であり、演算周波数は演算器の周波数である。
【００８０】
また、取り消し線で削除された周波数制御関数は、コンパイル部２１による最適化により削除された周波数制御関数である。周波数制御関数が連続した場合、前にある周波数制御関数は削除される。また、全引数の値が前と同じであって重複する周波数制御関数も削除される。
【００８１】
このように、コンパイル部２１は、最適化を行うことによって、無駄な周波数制御のオーバーヘッドをなくすことができる。
【００８２】
図２０は、プログラムコード４への周波数制御コードの埋め込み例を示す図である。図２０に示すように、１つ目のループに対しては演算器の効率を０．５倍とする周波数制御コードが埋め込まれている。２つ目のループについては周波数制御コードはない。３つ目のループについては効率が１．０倍のままであるため、周波数制御コードは埋め込まれない。
【００８３】
図２１は、再翻訳コードによる省電力実行のフローを示すフローチャートである。図２１に示すように、並列計算機３は、−ｎｏｅｃｏオプションか否かを判定し（ステップＳ７１）、−ｎｏｅｃｏオプションでない場合には、ｆｒｅｑｃｎｔｌ関数にて、引数に従い、ハードウェアモジュール毎に周波数を設定変更する（ステップＳ７２）。一方、−ｎｏｅｃｏオプションである場合には、並列計算機３は、ステップＳ７２の処理は行わない。
【００８４】
このように、並列計算機３が−ｎｏｅｃｏオプションで実行コード５を実行することで、利用者は省電力実行との比較を行うことができる。
【００８５】
図２２は、利用者によるカストマイズ例を示す図である。図２２では、利用者は周波数制御情報７をカストマイズしている。図２２に示すように、演算周波数比を０．５０にしてプログラムを実行させても性能に影響がない場合、利用者は演算周波数比を０．２５にしてプログラムを実行させる。このようなカストマイズにより、利用者は、性能低下を抑えながら省電力を図ることができる。
【００８６】
上述してきたように、実施例では、コンパイル部２１がプログラムコード４の分岐のないループに対して電力プロファイラ情報６を出力するコードを挿入してコンパイルし、結合部２２がコンパイル結果にプロファイラライブラリを結合して実行コード５を生成する。そして、並列計算機３が実行コード５を実行して電力プロファイラ情報６を出力する。そして、解析部２３が電力プロファイラ情報６を解析して周波数制御情報７を作成し、コンパイル部２１が周波数制御情報７に基づいてプログラムコード４に周波数制御コードを挿入してコンパイルし、実行コード５を生成する。そして、並列計算機３が周波数制御コードを含む実行コード５を実行する。
【００８７】
したがって、情報処理システム１は、性能低下を防ぎながら並列計算機３の消費電力を削減することができる。また、ループに対して１回だけ周波数制御を行うことで、段階的に周波数制御を行う場合と比較して周波数制御のオーバーヘッドを少なくすることができる。
【００８８】
また、実施例では、解析部２３は、電力プロファイラ情報６に基づいてビジー率情報を作成し、ビジー率情報に基づいて周波数制御方法を決定して周波数制御情報７を作成する。したがって、解析部２３は、正確な周波数制御情報７を作成することができる。
【００８９】
また、実施例では、電力プロファイラ情報６には、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックが含まれる。また、ハードウェアモジュールには、メモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算器が含まれる。そして、解析部２３は、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックに基づいてメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算器のビジー率を算出する。したがって、解析部２３は、メモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算器のビジー率を正確に算出することができる。また、解析部２３は、１回の採取でビジー率の算出に必要なハードウェアカウンタ情報を取得することができる。
【００９０】
また、実施例では、コンパイル部２１は、周波数制御情報７に基づいてプログラムコード４に周波数制御コードを挿入する際に、１回の区間平均時間が閾値未満であるか否かを判定し、閾値未満である場合には、周波数制御コードを挿入しない。したがって、コンパイル部２１は、省電力効果の少ないループについて周波数制御によるオーバヘッドの発生を防ぐことができる。
【００９１】
また、実施例では、コンパイル部２１は、各ループの前に周波数を変更する周波数制御関数を挿入し、各ループの後に周波数を元に戻す周波数制御関数を挿入する。そして、コンパイル部２１は、周波数を元に戻す周波数制御関数の直後に周波数を変更する周波数制御関数がある場合には、周波数を元に戻す周波数制御関数を削除する。したがって、コンパイル部２１は、無駄な周波数制御のオーバーヘッドをなくすことができる。
【００９２】
なお、実施例では、管理装置２について説明したが、管理装置２が有する構成をソフトウェアによって実現することで、同様の機能を有する管理プログラムを得ることができる。そこで、管理プログラムを実行するコンピュータについて説明する。
【００９３】
図２３は、実施例に係る管理プログラムを実行するコンピュータのハードウェア構成を示す図である。図２３に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００９４】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００９５】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置であり、スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００９６】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００９７】
そして、コンピュータ５０において実行される管理プログラムは、コンピュータ５０により読み出し可能な記録媒体の一例であるＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、管理プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされた管理プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００９８】
また、実施例では、並列計算機３が実行コード５を実行する場合について説明したが、ハードウェアモジュールの周波数制御が可能な情報処理装置が実行コード５を実行してもよい。
【００９９】
また、実施例では、メモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算器の動作周波数を制御する場合について説明したが、他のハードウェアモジュールの動作周波数を制御してもよい。また、ハードウェアカウンタ情報として、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバック以外の情報を用いてもよい。
【０１００】
また、実施例では、解析部２３が周波数制御情報７を作成する場合について説明したが、解析部２３は解析結果を電力プロファイラ情報６に加えて表示装置に表示してもよい。
【０１０１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１０２】
（付記１）プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成するコンパイル部と、
前記コンパイル部により生成された第１の実行コードを実行して前記プロファイリングデータに基づく電力プロファイラ情報を出力する実行部と、
前記実行部により出力された電力プロファイラ情報を解析して前記実行部に含まれる複数のハードウェアモジュールの周波数制御に用いられる周波数制御情報を作成する解析部とを有し、
前記コンパイル部は、前記解析部により作成された周波数制御情報に基づいて前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成し、
前記実行部は、前記コンパイル部により生成された第２の実行コードを実行することを特徴とする情報処理装置。
【０１０３】
（付記２）前記解析部は、
前記電力プロファイラ情報に基づいて各ループにおける前記複数のハードウェアモジュールのビジー率を算出する算出部と、
前記算出部により算出された複数のビジー率に基づいて各ループの周波数制御方法を決定し前記周波数制御情報を作成する作成部と
を有することを特徴とする付記１に記載の情報処理装置。
【０１０４】
（付記３）前記電力プロファイラ情報には、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックが含まれ、
前記実行部の複数のハードウェアモジュールにはメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算装置が含まれ、
前記算出部は、サイクルカウント、Ｌ１キャッシュミス数、Ｌ２キャッシュミス数、浮動小数点演算パイプライン、Ｌ１パイプバリッド及びＬ２ライトバックに基づいてメモリ、Ｌ２キャッシュ、Ｌ１キャッシュ及び演算装置のビジー率を算出することを特徴とする付記２に記載の情報処理装置。
【０１０５】
（付記４）前記周波数制御情報には、前記ループに対応する区間の実行時間が含まれ、
前記コンパイル部は、前記区間の平均実行時間が所定の閾値以上である場合に該ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成することを特徴とする付記１、２又は３に記載の情報処理装置。
【０１０６】
（付記５）前記コンパイル部は、複数の前記ループについて各ループの前に周波数を変更する周波数制御コードを挿入し、各ループの後に周波数を元に戻す周波数制御コードを挿入し、周波数を元に戻す周波数制御コードの直後に周波数を変更する周波数制御コードがある場合には、周波数を元に戻す周波数制御コードを削除することを特徴とする付記１〜４のいずれか１つに記載の情報処理装置。
【０１０７】
（付記６）コンピュータが、
プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成し、
前記第１の実行コードが処理装置により実行されて採取されたプロファイリングデータを用いて作成された電力プロファイラ情報に基づき前記処理装置に含まれる複数のハードウェアモジュールの周波数制御用に作成された周波数制御情報に基づいて、前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成する
処理を実行することを特徴とするコンパイル方法。
【０１０８】
（付記７）コンピュータに、
プロファイリングデータを採取するコードをソースプログラムの分岐のないループに対して挿入して第１の実行コードを生成し、
前記第１の実行コードが処理装置により実行されて採取されたプロファイリングデータを用いて作成された電力プロファイラ情報に基づき前記処理装置に含まれる複数のハードウェアモジュールの周波数制御用に作成された周波数制御情報に基づいて、前記ソースプログラムの前記ループに対して前記複数のハードウェアモジュールの周波数を制御する周波数制御コードを挿入して第２の実行コードを生成する
処理を実行させることを特徴とするコンパイルプログラム。
【０１０９】
（付記８）コンピュータに、
プロファイリングデータを採取するコードがソースプログラムの分岐のないループに対して挿入された実行コードが処理装置により実行されて採取されたプロファイリングデータを用いて作成された電力プロファイラ情報を読み込み、
読み込んだ電力プロファイラ情報を解析して前記処理装置に含まれる複数のハードウェアモジュールの周波数制御に用いられる周波数制御情報を作成する
処理を実行させることを特徴とする解析プログラム。
【０１１０】
（付記９）前記作成する処理は、
前記電力プロファイラ情報に基づいて各ループにおける前記複数のハードウェアモジュールのビジー率を算出し、
算出した複数のビジー率に基づいて各ループの周波数制御方法を決定し前記周波数制御情報を作成する
ことを特徴とする付記８に記載の解析プログラム。
【符号の説明】
【０１１１】
１    情報処理システム
２    管理装置
３    並列計算機
４    プログラムコード
５    実行コード
６    電力プロファイラ情報
７    周波数制御情報
２１    コンパイル部
２１ａ    第１挿入部
２１ｂ    第２挿入部
２２    結合部
２３    解析部
２３ａ    算出部
２３ｂ    作成部
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2019040317.tif 000003
【図２】
2019040317.tif 000004
【図３】
2019040317.tif 000005
【図４Ａ】
2019040317.tif 000006
【図４Ｂ】
2019040317.tif 000007
【図４Ｃ】
2019040317.tif 000008
【図５】
2019040317.tif 000009
【図６Ａ】
2019040317.tif 000010
【図６Ｂ】
2019040317.tif 000011
【図７】
2019040317.tif 000012
【図８】
2019040317.tif 000013
【図９】
2019040317.tif 000014
【図１０Ａ】
2019040317.tif 000015
【図１０Ｂ】
2019040317.tif 000016
【図１１】
2019040317.tif 000017
【図１２】
2019040317.tif 000018
【図１３】
2019040317.tif 000019
【図１４】
2019040317.tif 000020
【図１５】
2019040317.tif 000021
【図１６Ａ】
2019040317.tif 000022
【図１６Ｂ】
2019040317.tif 000023
【図１７】
2019040317.tif 000024
【図１８】
2019040317.tif 000025
【図１９】
2019040317.tif 000026
【図２０】
2019040317.tif 000027
【図２１】
2019040317.tif 000028
【図２２】
2019040317.tif 000029
【図２３】
2019040317.tif 000030
【図２４】
2019040317.tif 000031