(57)【要約】【課題】これまでより高い精度で中央処理装置の計算能力を調節することにより、プログラムの実行に伴う消費エネルギーを削減する。【解決手段】実行中に計算能力の変更が可能な中央処理装置に対して、適切な計算能力を設定する情報処理装置であって、実行プログラムに含まれる複数のプログラム領域の各々について、実行プログラムの実行中に当該プログラム領域が実行される毎に中央処理装置の計算能力を変更して実行時間を測定する実行時間測定部と、各々のプログラム領域について測定された計算能力毎の実行時間に基づいて、当該プログラム領域を中央処理装置により実行させるべき適正計算能力を判断する適正計算能力判断部と、各々のプログラム領域について、実行プログラムの実行中に当該プログラム領域が再度実行される時に当該プログラム領域を当該プログラム領域の適正計算能力で実行させる設定を行う計算能力設定部とを備える情報処理装置を提供する。【選択図】図４
2006127302.tif 000002
【特許請求の範囲】
【請求項１】
実行中に計算能力の変更が可能な中央処理装置に対して、前記中央処理装置が実行する実行プログラムに基づいて決定した計算能力を設定するコンパイラであって、
前記実行プログラムに含まれる複数のプログラム領域の各々について、前記実行プログラムの実行中に当該プログラム領域が実行される毎に前記中央処理装置の計算能力を変更して実行時間を測定する実行時間測定部と、
各々の前記プログラム領域について測定された計算能力毎の実行時間に基づいて、当該プログラム領域を前記中央処理装置により実行させるべき計算能力である適正計算能力を判断する適正計算能力判断部と、
各々の前記プログラム領域について、前記実行プログラムの実行中に当該プログラム領域が更に再度実行される時に当該プログラム領域を当該プログラム領域の前記適正計算能力で実行させる設定を行う計算能力設定部と
を備えるコンパイラ。
【請求項２】
前記計算能力設定部は、各々の前記プログラム領域について、前記中央処理装置に予め定められた標準の計算能力で当該プログラム領域を実行した実行時間が、計算能力の変更に要する時間に基づいて定められた基準時間より長いことを条件として、当該プログラム領域が再度実行される時に前記中央処理装置の計算能力を変更する設定を行う
請求項１記載のコンパイラ。
【請求項３】
前記実行時間測定部は、前記標準の計算能力によりプログラム領域を実行させた実行時間が、前記基準時間より短い場合に、前記実行プログラムの実行中に当該プログラム領域を次回以降に実行する場合の実行時間を測定しない
請求項２記載のコンパイラ。
【請求項４】
前記複数のプログラム領域は、メソッド、当該メソッドに含まれる外側ループ領域、及び、当該外側ループに含まれる内側ループ領域の何れかであり、
前記実行時間測定部は、前記標準の計算能力により前記メソッドを実行させた実行時間が、前記基準時間より短い場合に、当該メソッドに含まれる前記外側ループ領域、及び、当該外側ループに含まれる前記内側ループ領域を実行する場合の実行時間を測定しない
請求項３記載のコンパイラ。
【請求項５】
前記実行時間測定部は、更に、各々の前記プログラム領域を同一の計算能力により複数回実行させた実行時間を測定し、
前記計算能力設定部は、複数回測定された当該実行時間の測定毎の変動幅が、予め定められた基準となる変動幅より大きい場合に、当該プログラム領域を前記中央処理装置に予め定められた標準の計算能力で実行させる
請求項１記載のコンパイラ。
【請求項６】
前記中央処理装置は、計算能力を上昇させた場合に消費電力が増加し、計算能力を低下させた場合に消費電力が減少し、
前記中央処理装置に設定される計算能力毎に、前記中央処理装置に当該計算能力を設定した場合における消費電力の大きさを格納する消費電力情報格納部と、
各々の前記プログラム領域について、当該プログラム領域を各々の計算能力により実行した場合における消費エネルギーを、当該計算能力で実行させた前記実行時間に、当該計算能力に対応して前記消費電力情報格納部に格納された消費電力の大きさを乗じることにより算出する消費エネルギー算出部と
を更に備え、
前記適正計算能力判断部は、各々の前記プログラム領域について、前記消費エネルギー算出部により算出された消費エネルギーを最小とする計算能力を、当該プログラム領域の前記適正計算能力と判断する
請求項１記載のコンパイラ。
【請求項７】
前記中央処理装置は、複数のスレッドの各々の命令を並列に実行し、
前記計算能力設定部は、各々の前記プログラム領域が実行される場合に当該プログラム領域に先立って実行される実行位置に、前記中央処理装置により並列にデコード可能な命令数のうち当該プログラム領域を実行するスレッドに割当てる命令数の割合を変更する命令を生成する
請求項１記載のコンパイラ。
【請求項８】
前記計算能力設定部は、各々の前記プログラム領域が実行される場合に当該プログラム領域に先立って実行される実行位置に、前記中央処理装置を動作させる動作周波数を変更する命令を生成する
請求項１記載のコンパイラ。
【請求項９】
前記実行プログラムに含まれる複数のプログラム領域のうち、予め定められた基準実行頻度以上の頻度で実行されるプログラム領域を選択するプログラム領域選択部を更に備え、
前記実行時間測定部は、前記プログラム領域選択部により選択された各々の前記プログラム領域について、当該プログラム領域の実行時間を測定する
請求項１記載のコンパイラ。
【請求項１０】
前記計算能力設定部は、先行して実行されるプログラム領域と、当該プログラム領域の後続のプログラム領域とで、前記適正計算能力が異なることを条件として、先行する当該プログラム領域及び後続の当該プログラム領域の間に実行される実行位置に、計算能力を変更する命令を生成し、当該適正計算能力が同一の場合には、計算能力を変更する命令を生成しない
請求項１記載のコンパイラ。
【請求項１１】
実行中に計算能力の変更が可能な中央処理装置に対して、前記中央処理装置が実行する実行プログラムに基づいて決定した計算能力を設定する情報処理装置であって、
前記実行プログラムに含まれる複数のプログラム領域の各々について、前記実行プログラムの実行中に当該プログラム領域が実行される毎に前記中央処理装置の計算能力を変更して実行時間を測定する実行時間測定部と、
各々の前記プログラム領域について測定された計算能力毎の実行時間に基づいて、当該プログラム領域を前記中央処理装置により実行させるべき計算能力である適正計算能力を判断する適正計算能力判断部と、
各々の前記プログラム領域について、前記実行プログラムの実行中に当該プログラム領域が更に再度実行される時に当該プログラム領域を当該プログラム領域の前記適正計算能力で実行させる設定を行う計算能力設定部と
を備える情報処理装置。
【請求項１２】
実行中に計算能力の変更が可能な中央処理装置に対して、前記中央処理装置が実行する実行プログラムに基づいて決定した計算能力を設定するコンパイラとして、情報処理装置を機能させるコンパイラプログラムであって、
前記情報処理装置を、
前記実行プログラムに含まれる複数のプログラム領域の各々について、前記実行プログラムの実行中に当該プログラム領域が実行される毎に前記中央処理装置の計算能力を変更して実行時間を測定する実行時間測定部と、
各々の前記プログラム領域について測定された計算能力毎の実行時間に基づいて、当該プログラム領域を前記中央処理装置により実行させるべき計算能力である適正計算能力を判断する適正計算能力判断部と、
各々の前記プログラム領域について、前記実行プログラムの実行中に当該プログラム領域が更に再度実行される時に当該プログラム領域を当該プログラム領域の前記適正計算能力で実行させる設定を、コンパイル結果の実行プログラムに対して行う計算能力設定部と
して機能させるコンパイラプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、コンパイラ、及びコンパイラプログラムに関する。特に、本発明は、プログラムの実行時に得られた実行時間の測定結果に基づいて最適化を行う情報処理装置、コンパイラ、及びコンパイラプログラムに関する。
【背景技術】
【０００２】
IBMコーポレーションのPower5プロセッサ（登録商標）におけるSMT技術は、２つのスレッドを同時に１つのプロセッサ上で実行させ、実行中のスレッドに優先度を与え、同時実行中のスレッドが利用するプロセッサ資源の割合を変化させることを可能にする（非特許文献５参照。）。言い換えると、１つの実プロセッサ上に存在する２つの論理プロセッサが、実行するスレッドの優先度に応じてその計算能力を変化させる。従って、Power5 プロセッサでは、１つの実プロセッサ上に存在する２つの論理プロセッサの計算能力をバランスさせ、高い実行性能を達成することが要求される。
【０００３】
例えば、命令レベル並列性の高いプログラム領域において、高い実行性能を達成するためには、多くの計算資源を備えるプロセッサが必要である。逆に、命令レベル並列性の低いプログラム領域では、計算資源が少ないプロセッサでも十分な性能を得ることが可能である。一方、Pentium M プロセッサ（登録商標）は、スレッド優先度ではなく、動作周波数を変更することにより計算能力を変化させる（非特許文献３参照。）。例えば、キャッシュミスが頻発し、プロセッサがアイドル状態になるようなプログラム領域では、動作周波数を低下させても実行時間の増加はわずかであり、消費エネルギーを大きく削減可能である。
【０００４】
上記のような計算能力を変化させることが可能なプロセッサでは、プログラムコードの特性を解析し、計算能力を減少させても実行時間が増加しないプログラム領域を抽出することで、実行速度を犠牲にせずに消費エネルギーを削減できる。例えば、動的に動作周波数を変更可能なプロセッサにおいて、動作周波数を変更してプログラム領域の実行時間を測定し、各プログラム領域の実行時間の増加割合を閾値以下に抑える動作周波数を求める技術が提案されている（非特許文献１参照。）。
【０００５】
非特許文献２、非特許文献４、非特許文献６、及び非特許文献７については後述する。
【非特許文献１】C. H. Hsu and U. Kremer. The Design, Implementation, and Evaluation of a Compiler Algorithm for CPU Energy Reduction. PLDI 2003.
【非特許文献２】IA32 Intel(R) Architecture Software Developer's Manual Volume 3: System Programming Guide. Document Number: 253668.
【非特許文献３】Intel(R) Pentium(R) M Processor Datasheet. Document Number : 252612-003. April 2004.
【非特許文献４】J. Whaley. A Portable Sampling-Based Profiler for Java Virtual Machines. Java Grande 2000.
【非特許文献５】R. Kalla, B. Sinharoy, and J. Tendler. Simlultaneous Multi-threading Implementation in POWER5 - IBM's Next Generation POWER Microprocessor. A Symposium on High Performance Chips. http://www.hotchips.org/archive/hc15/pdf/11.ibm.pdf
【非特許文献６】T. Suganuma, T. Yasue, M. Kawahito, H. Komatsu, and T. Nakatani. A Dynamic Optimization Framework for a Java Just-In-Time Compiler. OOPSLA 2001.
【非特許文献７】V. Bala, E. Duesterwald, and S. Banerjia. Dynamo: A Transparent Dynamic Optimization System. PLDI 2000.
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、非特許文献１の技術において、実行時間の測定は、テストデータを用いた試験実行によるプロファイル（オフラインプロファイル）で行われる。即ち、試験実行でなく実際にプログラムを実行している間は、各プログラム領域に与えられる計算能力は変更されない。このため、入力データの特性がプログラムの実行中に変化する場合であっても、その変化に追従して中央処理装置の計算能力を調節することができない。
【０００７】
また、上記の閾値は定数であるため、この閾値を基準として計算能力を低下させた場合には、結果として消費エネルギーが増加してしまう可能性がある。例えば、計算能力の低下により消費電力（Watts）がWiからWi-1に下がり、実行時間がTiからTi-1に増加した場合に、消費エネルギー（Joule）がWi×TiからWi-1×Ti-1に変化する。しかしながら、実行時間の増加割合が上記の閾値以下であっても、消費電力の低下に対して実行時間の増加が大きい場合には、Wi×Ti＜ Wi-1×Ti-1になり、消費エネルギーを増加させてしまう可能性がある。
【０００８】
そこで本発明は、上記の課題を解決することのできる情報処理装置、コンパイラ、及びコンパイラプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明の第１の形態においては、実行中に計算能力の変更が可能な中央処理装置に対して、中央処理装置が実行する実行プログラムに基づいて決定した計算能力を設定する情報処理装置であって、実行プログラムに含まれる複数のプログラム領域の各々について、実行プログラムの実行中に当該プログラム領域が実行される毎に中央処理装置の計算能力を変更して実行時間を測定する実行時間測定部と、各々のプログラム領域について測定された計算能力毎の実行時間に基づいて、当該プログラム領域を中央処理装置により実行させるべき計算能力である適正計算能力を判断する適正計算能力判断部と、各々のプログラム領域について、実行プログラムの実行中に当該プログラム領域が更に再度実行される時に当該プログラム領域を当該プログラム領域の適正計算能力で実行させる設定を行う計算能力設定部とを備える情報処理装置、当該情報処理装置により動作するコンパイラ、及び、当該情報処理装置をコンパイラとして機能させるコンパイラプログラムを提供する。
【００１０】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１１】
本発明によれば、これまでより高い精度で中央処理装置の計算能力を調節することにより、プログラムの実行に伴う消費エネルギーを削減することができる。
【発明を実施するための最良の形態】
【００１２】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
図１は、情報処理装置１０の構成を示す。情報処理装置１０は、ホストコントローラ１０８２により相互に接続される中央処理装置１０００、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部を備える。また、情報処理装置１０は、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部を備える。
【００１４】
また、情報処理装置１０は、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部を備える。ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスする中央処理装置１０００及びグラフィックコントローラ１０７５とを接続する。中央処理装置１０００は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。また、中央処理装置１０００は、実行中に計算能力の変更、例えば動作周波数の変更が可能である。
【００１５】
ＲＡＭ１０２０は、中央処理装置１０００により読み出される各種のデータを格納している。例えば、ＲＡＭ１０２０は、中央処理装置１０００に設定される動作周波数毎に、中央処理装置１０００にその動作周波数を設定した場合における、中央処理装置１０００の電圧及び消費電力の大きさを格納する消費電力情報格納部１０２５を含む。グラフィックコントローラ１０７５は、中央処理装置１０００等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、中央処理装置１０００等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００１６】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、情報処理装置１０が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。
【００１７】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、情報処理装置１０の起動時に中央処理装置１０００が実行するブートプログラムや、情報処理装置１０のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００１８】
情報処理装置１０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出され情報処理装置１０にインストールされて実行される。情報処理装置１０にインストールされるプログラムは、例えば、情報処理装置１０をコンパイラとして機能させるコンパイラプログラムである。コンパイラプログラムが情報処理装置１０等に働きかけて行わせる動作は、図２から図１３において後述する。
【００１９】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置１０に提供してもよい。
【００２０】
図２は、消費電力情報格納部１０２５のデータ構造の一例を示す。消費電力情報格納部１０２５は、中央処理装置１０００に設定される動作周波数毎に、中央処理装置１０００にその動作周波数を設定した場合における、中央処理装置１０００の電圧及び消費電力の大きさを格納している。一例として、本図においては、中央処理装置１０００がインテル・コーポレーションのPentium Mプロセッサであり、SpeedStepテクノロジにより動作周波数を切り替えた場合について、動作周波数毎の電圧及び消費電力を示す。
【００２１】
具体的には、中央処理装置１０００が１．６ＧＨｚで動作する場合における消費電力は、２４．５Ｗａｔｔｓである。一方、中央処理装置１０００が１．４ＧＨｚで動作する場合における消費電力は、２２．０Ｗａｔｔｓである。このように、中央処理装置１０００は、動作周波数を上昇させた場合に消費電力が増加し、動作周波数を低下させた場合に消費電力が減少する。
【００２２】
また、中央処理装置１０００は、当該中央処理装置１０００の実行中に動作周波数を動的に変更することができる。なお、インテル・コーポレーション、Pentium M、及びSpeedStepはそれぞれ登録商標であり、これらの技術についてより詳細には、非特許文献３に説明されているので本実施例における説明を省略する。
【００２３】
図３は、中央処理装置１０００が実行するプログラムの構成を示す。中央処理装置１０００は、仮想マシン３１０と、オペレーティングシステム３２０として機能する。そして、仮想マシン３１０は、オペレーティングシステム３２０と協働して、Ｊａｖａ（登録商標）等で記述された実行プログラム３００を実行する。実行プログラム３００は、プログラム領域３０５−１、プログラム領域３０５−４、及びプログラム領域３０５−５を含む。プログラム領域３０５−１は、プログラム領域３０５−２を含み、プログラム領域３０５−２は、更にプログラム領域３０５−３を含む。
【００２４】
仮想マシン３１０は、コンパイラ４０を含む。コンパイラ４０は、仮想マシン３１０が実行プログラム３００をインタープリタ機能により実行している場合において、必要に応じて実行プログラム３００の一部をコンパイルする。そしてこの場合、中央処理装置１０００は、インタープリタ機能による当該実行に代えて、コンパイル結果のプログラムを実行する。例えば、コンパイラ４０は、コンパイル時に、動作周波数を変更する命令をプログラム領域３０５−１に生成する最適化を行ってもよい。この場合、プログラム領域３０５−１の実行中にその命令が実行され、その結果、プログラム領域３０５−１から動作周波数設定用デバイスドライバ３２５が呼び出され、動作周波数が変更される。
【００２５】
図４は、コンパイラ４０の機能を機能ブロックに分類して示す。コンパイラ４０は、プログラム領域選択部４００と、参照頻度測定部４１０と、実行時間測定部４２０と、消費エネルギー算出部４３０と、適正計算能力判断部４４０と、計算能力設定部４５０とを有する。プログラム領域選択部４００は、実行プログラム３００に含まれるプログラム領域３０５−１〜５のうち、予め定められた基準実行頻度以上の頻度で実行されるプログラム領域を選択する。例えば、参照頻度測定部４１０は、予め定められた時間間隔で、中央処理装置１０００のプログラムカウンタのアドレス値を参照する。
【００２６】
そして、プログラム領域選択部４００は、プログラム領域３０５−１〜５の各々について、当該プログラム領域に含まれるアドレス値が参照頻度測定部４１０により参照された頻度が、基準実行頻度か否かを判断する。そして、プログラム領域選択部４００は、基準実行頻度以上のプログラム領域を選択する。この結果、例えばプログラム領域３０５−１〜３が選択される。
【００２７】
ここで、プログラム領域とは、例えば、実行プログラム３００に含まれるメソッド、当該メソッドに含まれる外側ループ領域、及び、当該外側ループ領域に含まれる内側ループ領域等の何れかである。そして、プログラム領域選択部４００は、これらのメソッド、外側ループ領域、及び内側ループ領域が、実行プログラム３００においてどのアドレスからどのアドレスまでの領域であるかを示す情報を、実行プログラム３００に対応付けて予め取得してもよい。
【００２８】
一例として、コンパイラ４０が、Ｊａｖａ（登録商標）のＪｕｓｔ  Ｉｎ  Ｔｉｍｅコンパイラである場合においては、プログラム領域選択部４００は、Ｊａｖａのバイトコードからのコンパイル時にこれらの情報を取得できる。また、このような情報を取得できない場合には、プログラム領域選択部４００は、実行プログラム３００内の制御フローを解析することにより、各々のプログラム領域の境界を定めてもよい。
【００２９】
実行時間測定部４２０は、プログラム領域選択部４００により選択されたプログラム領域３０５−１〜３の各々について、実行プログラム３００の実行中にそのプログラム領域が実行される毎に中央処理装置１０００の動作周波数を変更して実行時間を測定する。消費エネルギー算出部４３０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域を各々の動作周波数により実行した場合における消費エネルギーを算出する。具体的には、消費エネルギー算出部４３０は、各プログラム領域を各動作周波数で実行させた実行時間に、その動作周波数に対応して消費電力情報格納部１０２５に格納された消費電力の大きさを乗じることにより消費エネルギーを算出する。
【００３０】
適正計算能力判断部４４０は、プログラム領域３０５−１〜３の各々について測定された計算能力毎の実行時間に基づいて、そのプログラム領域を中央処理装置１０００により実行させるべき動作周波数である適正動作周波数を判断する。例えば、適正計算能力判断部４４０は、プログラム領域３０５−１〜３の各々について、消費エネルギー算出部４３０により算出された消費エネルギーを最小とする動作周波数を求め、その動作周波数をそのプログラム領域の適正動作周波数と判断する。
【００３１】
計算能力設定部４５０は、プログラム領域３０５−１〜３の各々について、実行プログラム３００の実行中にそのプログラム領域が再度実行される時にそのプログラム領域をそのプログラム領域の適正動作周波数で実行させる設定を行う。具体的には、計算能力設定部４５０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域が実行される場合にそのプログラム領域に先立って実行される実行位置に、中央処理装置１０００の動作周波数を変更する命令を新たに生成してもよい。
【００３２】
なお、本図において、プログラム領域選択部４００と、参照頻度測定部４１０と、実行時間測定部４２０と、消費エネルギー算出部４３０と、適正計算能力判断部４４０と、計算能力設定部４５０とは、コンパイラ４０内に設けられている。これに代えて、中央処理装置１０００が、これらの各構成要素の少なくとも一部を、ハードウェアの機能として備えていてもよい。このような中央処理装置１０００も、本発明の範囲内である。
【００３３】
図５は、プログラム領域３０５−１〜３の具体例を示す。プログラム領域３０５−１は、１行目から２１行目までに示すメソッドである。そして、プログラム領域３０５−１は、５行目から１７行目までに示す外側ループであるプログラム領域３０５−２を含む。そして、プログラム領域３０５−２は、７行目から１５行目までに示す内側ループであるプログラム領域３０５−３を含む。
【００３４】
実行時間測定部４２０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域の実行が開始される場合に最初に実行される実行位置に、そのプログラム領域の実行時間の測定を開始する命令であるＳｔａｒｔＰｒｏｆｉｌｅ命令を生成する。また、実行時間測定部４２０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域が実行される場合に最後に実行される実行位置に、そのプログラム領域の実行時間の測定を終了する命令であるＥｎｄＰｒｏｆｉｌｅ命令を生成する。
【００３５】
例えばコンパイラ４０がＪａｖａ（登録商標）のＪｕｓｔ  Ｉｎ  Ｔｉｍｅコンパイラである場合には、実行時間測定部４２０は、既にコンパイルされたプログラムを再度コンパイルする技術により、ＳｔａｒｔＰｒｏｆｉｌｅ等の命令を挿入できる。以降、この技術をリコンパイルと呼ぶ。リコンパイルの詳細は非特許文献６に記載されているので、説明を省略する。また、コンパイラ４０が、Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅコンパイラでない場合であっても、既にコンパイルされたプログラムを動的に書き換える技術により、ＳｔａｒｔＰｒｏｆｉｌｅ等の命令を挿入できる。以降、この技術を、動的バイナリ書換と呼ぶ。動的バイナリ書換の詳細は非特許文献７に記載されているので、説明を省略する。
【００３６】
実行プログラム３００の実行中にメソッドｆｏｏが呼び出されると、プログラム領域３０５−１の実行が開始される。そして、プログラム領域３０５−１の実行が開始される時に、２行目に示すＳｔａｒｔＰｒｏｆｉｌｅ命令が実行される。その後、プログラム領域３０５−２の実行が開始される時に、５行目に示すＳｔａｒｔＰｒｏｆｉｌｅ命令が実行される。同様に、プログラム領域３０５−３の実行が開始される時に、７行目に示すＳｔａｒｔＰｒｏｆｉｌｅ命令が実行される。
【００３７】
ＳｔａｒｔＰｒｏｆｉｌｅ命令は、実行される毎に中央処理装置１０００の動作周波数を変更する。また、ＳｔａｒｔＰｒｏｆｉｌｅ命令は、所定の時点から、ＳｔａｒｔＰｒｏｆｉｌｅ命令が実行された時点までに経過したクロックサイクル数を読み出して保存する。一例として中央処理装置１０００がインテルＩＡ３２プロセッサである場合には、ｒｄｔｓｃ（Ｒｅａｄ  Ｔｉｍｅ  Ｓｔａｍｐ  Ｃｏｕｎｔｅｒ）命令を呼び出すことによりクロックサイクル数を読み出すことができる。
【００３８】
また、クロックサイクル数の保存先としては、プログラム領域毎に予め設けた変数又はオブジェクトが好ましい。例えば本図においては、プログラム領域３０５−１、プログラム領域３０５−２、及びプログラム領域３０５−３の各々に対応付けて、オブジェクトｐｒｏｆｉｌｅＩｎｆｏ１、オブジェクトｐｒｏｆｉｌｅＩｎｆｏ２、及び、オブジェクトｐｒｏｆｉｌｅＩｎｆｏ３の各々を予め設ける。そして、例えばＳｔａｒｔＰｒｏｆｉｌｅ（ｐｒｏｆｉｌｅＩｎｆｏ１）の実行により、その実行の時点におけるクロックサイクル数をオブジェクトｐｒｏｆｉｌｅＩｎｆｏ１に保存する。
【００３９】
なお、メソッドｆｏｏとは異なるメソッドｆｏｏ１を呼び出す時は、１０行目に示すＳｕｓｐｅｎｄＰｒｏｆｉｌｅ命令により測定を一旦中断する。そして、メソッドｆｏｏ１の実行が終了した場合には、１２行目に示すＲｅｓｕｍｅＰｒｏｆｉｌｅ命令により測定が再開される。具体的には、ＳｕｓｐｅｎｄＰｒｏｆｉｌｅ命令の実行からＲｅｓｕｍｅＰｒｏｆｉｌｅ命令の実行までに経過したクロックサイクル数を、オブジェクトｐｒｏｆｉｌｅＩｎｆｏ１内に保存する。
【００４０】
その後、プログラム領域３０５−３の実行が終了する時に、１５行目に示すＥｎｄＰｒｏｆｉｌｅ命令が実行される。更にその後、プログラム領域３０５−２の実行が終了する時に、１７行目に示すＥｎｄＰｒｏｆｉｌｅ命令が実行される。最後に、プログラム領域３０５−３の実行が終了する時に、２０行目に示すＥｎｄＰｒｏｆｉｌｅ命令が実行される。
【００４１】
ＥｎｄＰｒｏｆｉｌｅ命令は、ＥｎｄＰｒｏｆｉｌｅ命令の実行時点におけるクロックサイクル数を読み出し、対応するＳｔａｒｔＰｒｏｆｉｌｅ命令により保存されたクロックサイクル数との差分値を算出する。そして、ＥｎｄＰｒｏｆｉｌｅ命令は、算出したその差分値から、ＳｕｓｐｅｎｄＰｒｏｆｉｌｅ命令の実行からＲｅｓｕｍｅＰｒｏｆｉｌｅ命令の実行までに経過したクロックサイクル数を差し引いた差分値を算出する。そして、ＥｎｄＰｒｏｆｉｌｅ命令は、算出したその差分値に基いて、実行時間を算出する。例えば、ＥｎｄＰｒｏｆｉｌｅ命令は、算出した差分値を、中央処理装置１０００に設定した動作周波数で除算することにより、実行時間を算出してもよい。
【００４２】
この結果、実行時間測定部４２０は、プログラム領域３０５−１の実行時間の測定結果を、変数（又はオブジェクト）ｐｒｏｆｉｌｅＩｎｆｏ１に格納し、プログラム領域３０５−２の実行時間の測定結果を、変数（又はオブジェクト）ｐｒｏｆｉｌｅＩｎｆｏ２に格納し、プログラム領域３０５−３の実行時間の測定結果を、変数（又はオブジェクト）ｐｒｏｆｉｌｅＩｎｆｏ３に格納することができる。
【００４３】
その後、計算能力設定部４５０は、適正動作周波数の判断結果に基づいて、ＳｔａｒｔＰｒｏｆｉｌｅ命令に代えて、中央処理装置１０００を動作させる動作周波数を変更する命令を生成する。即ち、計算能力設定部４５０は、プログラム領域３０５−２について、そのプログラム領域が実行される場合にそのプログラム領域に先立って実行される実行位置に、中央処理装置１０００の動作周波数を変更する命令を生成する。更に、計算能力設定部４５０は、ＥｎｄＰｒｏｆｉｌｅ命令に代えて、変更した動作周波数を元に戻す命令を生成する。これにより、実行プログラム３００の実行中にプログラム領域３０５−２が更に再度実行される場合には、中央処理装置１０００の動作周波数を変更することができる。
【００４４】
図６は、コンパイラ４０が中央処理装置１０００に適した計算能力を設定する処理の流れを示す。プログラム領域選択部４００は、実行プログラム３００に含まれるプログラム領域３０５−１〜５のうち、予め定められた基準実行頻度以上の頻度で実行されるプログラム領域を選択する（Ｓ６００）。選択したこのプログラム領域を、プロファイル領域と呼ぶ。本例では、プログラム領域３０５−１〜３の各々が、プロファイル領域として選択された場合について説明する。次に、実行時間測定部４２０は、実行時間測定用の命令を、実行プログラム３００中のプロファイル領域に生成する（Ｓ６０５）。
【００４５】
例えば、実行時間測定部４２０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域の実行が開始される場合に最初に実行される実行位置に、そのプログラム領域の実行時間の測定を開始する命令であるＳｔａｒｔＰｒｏｆｉｌｅ命令を生成する。また、実行時間測定部４２０は、プログラム領域３０５−１〜３の各々について、そのプログラム領域が実行される場合に最後に実行される実行位置に、そのプログラム領域の実行時間の測定を終了する命令であるＥｎｄＰｒｏｆｉｌｅ命令を生成する。実行中のプログラムに命令を生成するためには、上述のように、リコンパイル又は動的バイナリ書換を適用すればよい。
【００４６】
そして、適正計算能力判断部４４０は、実行中のプログラム領域３０５−１〜３の各々について測定された計算能力毎の実行時間に基づいて、そのプログラム領域を中央処理装置１０００により実行させるべき動作周波数である適正動作周波数を判断する（Ｓ６１０）。計算能力設定部４５０は、プログラム領域３０５−１〜３の各々について、実行プログラム３００の実行中にそのプログラム領域が再度実行される時にそのプログラム領域をそのプログラム領域の適正動作周波数で実行させる設定を行う（Ｓ６２０）。
【００４７】
具体的には、計算能力設定部４５０は、動作周波数を変更する命令を実行プログラム３００に生成する。なお、計算能力設定部４５０は、先行して実行されるプログラム領域と、当該プログラム領域の後続のプログラム領域とで、適正動作周波数が異なることを条件として、先行する当該プログラム領域及び後続の当該プログラム領域の間に実行される実行位置に、動作周波数を変更する命令を生成する。即ち、計算能力設定部４５０は、適正計算能力が同一の場合には、動作周波数を変更する命令を生成しない。これにより、動作周波数の変更後に直ちに変更前の動作周波数に再度変更することを防ぐことができる。
【００４８】
図７は、図６のＳ６００における処理の一例について、その詳細を示す。本図では、実行プログラム３００において、ループ領域の境界が不明な場合等において、実行プログラム３００内の制御フローを解析することにより、各々のプログラム領域の境界を定める処理について説明する。まず、実行プログラム３００の実行中において、参照頻度測定部４１０は、予め定められた時間間隔で、中央処理装置１０００のプログラムカウンタのアドレス値を参照する（Ｓ７００）（例えば、非特許文献４参照。）。
【００４９】
次に、プログラム領域選択部４００は、参照頻度測定部４１０により参照された頻度が予め定められた基準値より高いアドレスのアドレス値を、変数Astartに代入する（Ｓ７１０）。また、プログラム領域選択部４００は、Atop及びAcurrentにAstartの値を代入する。また、プログラム領域選択部４００は、Abottom及びNloopを０で初期化する。そして、プログラム領域選択部４００は、以下の処理により、アドレスAstartから順に実行プログラム３００を実行方向に沿って辿り、プロファイル領域を探索する。なお、Acurrentは、探索中のアドレス値を格納する変数であり、その値は処理の進行に伴いインクリメントされる。
【００５０】
プログラム領域選択部４００は、Acurrent − Astart ＞ Rsearchか否かを判断する（Ｓ７２０）。Acurrent − Astart ＞ Rsearchが成立した場合に（Ｓ７２０：ＹＥＳ）、プログラム領域選択部４００は、ループ領域の探索範囲外に達したので、処理を終了する。一方、Acurrent − Astart ＞ Rsearchが成立しない場合に（Ｓ７２０：ＮＯ）、プログラム領域選択部４００は、アドレスAcurrentに例えば条件／無条件分岐等のジャンプ命令が配置されているかを判断する（Ｓ７３０）。
【００５１】
アドレスAcurrentにジャンプ命令が配置されている場合に（Ｓ７３０：ＹＥＳ）、プログラム領域選択部４００は、変数Ajumpに、そのジャンプ命令のジャンプ先のアドレス値を代入する（Ｓ７４０）。次に、プログラム領域選択部４００は、Ajump ＜ Astartか否かを判断する（Ｓ７５０）。Ajump ＜ Astartが成立する場合に（Ｓ７５０：ＹＥＳ）、ジャンプ命令のジャンプ方向が実行順序を遡る方向であるので、プログラム領域選択部４００は、このジャンプ命令によりループ領域が形成されていると判断する（Ｓ７６０）。具体的には、プログラム領域選択部４００は、Nloopの値をこのループ領域の識別情報とし、ループ領域の先頭アドレスをAtop に代入し、ループ領域の終了アドレスをAbottomに代入する。そして、プログラム領域選択部４００は、AcurrentにAcurrentの次のアドレスを代入する（Ｓ７９０）。
【００５２】
一方、アドレスAcurrentにジャンプ命令が配置されていない場合（Ｓ７３０：ＮＯ）、又は、Ajump ＜ Astartが成立しない場合に（Ｓ７５０：ＮＯ）、次の処理を行う。まず、プログラム領域選択部４００は、Acurrentに格納されたアドレス値の参照頻度が、閾値Fthresholdより高いか否かを判断する（Ｓ７７０）。閾値Fthresholdより高い場合に（Ｓ７７０：ＹＥＳ）、プログラム領域選択部４００は、AbottomにAcurrentを代入し（Ｓ７８０）、Ｓ７９０の処理に移る。
【００５３】
このように、本図の処理によれば、実行プログラム３００内のループ領域や、実行頻度の高い領域を、実行時間を測定する対象となるプロファイル領域として適切に選択することができる。これにより、ループ領域等の情報が予め準備されていないプログラムについても、実行頻度が高いと見込まれる領域のみに実行時間測定用の命令を挿入できるので、実行時間の測定に伴うオーバヘッドを削減することができる。
【００５４】
図８は、図６のＳ６１０における処理の詳細を示す。本図は、図５のプログラム例に対応する。中央処理装置１０００は、実行時間測定部４２０により命令が生成された実行プログラム３００を実行することにより、以下の処理を行う。中央処理装置１０００は、あるプログラム領域を実行する場合に、そのプログラム領域の実行に先立って、ＳｔａｒｔＰｒｏｆｉｌｅ命令を実行する（Ｓ８００−１）。
【００５５】
具体的には、実行時間測定部４２０は、ＳｔａｒｔＰｒｏｆｉｌｅ命令の実行により、そのプログラム領域に対応して定めた変数Ｐの値に基づいて、中央処理装置１０００の動作周波数を設定する。この変数Ｐの値は、実行時間が測定される度に後述の処理により順次変更される。そして、実行時間測定部４２０は、ＳｔａｒｔＰｒｏｆｉｌｅ命令の実行時点における中央処理装置１０００の実行サイクルカウントを、そのＳｔａｒｔＰｒｏｆｉｌｅ命令に対応して定めた変数Cstartに代入する。これらの変数の記憶領域は、例えば、図５に示すオブジェクトprofileInfo1内に確保される。
【００５６】
次に、中央処理装置１０００は、更に内側のプログラム領域の実行に先立って、ＳｔａｒｔＰｒｏｆｉｌｅ命令を実行する（Ｓ８００−２）。次に、中央処理装置１０００は、一番内側のプログラム領域の実行に先立って、ＳｔａｒｔＰｒｏｆｉｌｅ命令を実行する（Ｓ８００−３）。
【００５７】
次に、中央処理装置１０００は、一番内側のプログラム領域を実行する（Ｓ８１０）。このプログラム領域の実行中に他のメソッドを呼び出す場合には、好ましくは、実行時間の測定を一時中断する。これにより、実行時間をメソッド毎に区別して測定することができる。そして、中央処理装置１０００は、一番内側のプログラム領域の実行が終了した場合に、ＥｎｄＰｒｏｆｉｌｅ命令を実行する（Ｓ８２０−３）。次に、中央処理装置１０００は、Ｓ８００−２におけるＳｔａｒｔＰｒｏｆｉｌｅ命令に対応するＥｎｄＰｒｏｆｉｌｅ命令を実行し（Ｓ８２０−２）、Ｓ８００−１におけるＳｔａｒｔＰｒｏｆｉｌｅ命令に対応するＥｎｄＰｒｏｆｉｌｅ命令を実行する（Ｓ８２０−１）。
なお、本図は、処理の流れの一例を示すものであり、実際には、実行プログラム３００の処理の流れに沿ってＳｔａｒｔＰｒｏｆｉｌｅ命令及びＥｎｄＰｒｏｆｉｌｅ命令が実行される。即ち例えば、同一のＳｔａｒｔＰｒｏｆｉｌｅ命令及びＥｎｄＰｒｏｆｉｌｅ命令が繰り返し実行されることにより、実行時間が繰り返し測定される。
【００５８】
図９は、図８のＳ８２０−１における処理の詳細を示す。実行時間測定部４２０は、ＥｎｄＰｒｏｆｉｌｅ命令を生成することにより、実行プログラム３００の実行中において中央処理装置１０００に以下の処理を実行させる。まず、中央処理装置１０００は、中央処理装置１０００の現在の実行サイクルカウントを、変数Cendに代入する（Ｓ９００）。また、中央処理装置１０００は、Cend − Cstartを算出して動作周波数で除算することにより、実行時間を求める。また、中央処理装置１０００は、実行時間の測定回数を保持する変数Iをインクリメントする。
【００５９】
次に、中央処理装置１０００は、I≧Nか否かを判断する（Ｓ９１０）。即ち、測定回数が予め定められた回数Ｎに達していない場合には（Ｓ９１０：ＮＯ）、測定回数がＮ回に達するまでプログラムの実行を繰り返すべく、本図における処理を終了する。一方、測定回数が予め定められた回数Ｎに達した場合には（Ｓ９１０：ＹＥＳ）、中央処理装置１０００は、同一のプログラム領域を同一の動作周波数で実行させた場合の実行時間の平均値を算出する（Ｓ９２０）。
【００６０】
次に、中央処理装置１０００は、現在設定されている動作周波数が、最大の動作周波数であるか否かを判断する（Ｓ９３０）。なお、変数Ｐは、初期値として、中央処理装置１０００に予め定められた標準の動作周波数（即ち例えば最大の動作周波数）を示す値を保持するものとする。現在設定されている動作周波数が、最大の動作周波数である場合には（Ｓ９３０：ＹＥＳ）、中央処理装置１０００は、Ｓ９２０において算出した平均値を、変数Tmaxに代入する（Ｓ９６０）。
【００６１】
そして、中央処理装置１０００は、その平均値が、動作周波数の変更に要する時間Tshiftと比較して極めて大きいか否かを判断する（Ｓ９７０）。例えば、中央処理装置１０００は、その平均値が、動作周波数の変更に要する時間に基づいて予め定められた基準時間よりも大きいか否かを判断してもよい。その基準時間とは、好ましくは、動作周波数の変更に要する時間の数倍から１０倍程度の時間である。また、その基準時間は、動作周波数の変更に要する時間と等しくてもよい。
【００６２】
その平均値が、Tshiftと比較して極めて大きい場合に（Ｓ９７０：ＹＥＳ）、中央処理装置１０００は、同一のプログラム領域を同一の動作周波数で実行させて測定した各々の実行時間の、その平均値に対する差分値を算出し、その差分値をその実行時間で除算した値をそれぞれ求める（Ｓ９７５）。そして、中央処理装置１０００は、それぞれの測定に対応して求めたその値の最大値を求める。そして、中央処理装置１０００は、その最大値が、予め定められた割合Rapartより小さいか否かを判断する。
【００６３】
その最大値が、割合Rapartより小さい場合に（Ｓ９７５：ＹＥＳ）、中央処理装置１０００は、変数Ｐをデクリメントし、変数Ｉを０に初期化する（Ｓ９８０）。即ち、中央処理装置１０００は、次回以降の実行において動作周波数を変更して実行時間を測定する。続いて、中央処理装置１０００は、変数Ｐが負の値の場合に（Ｓ９９０：ＮＯ）、変数Poptを、最小の動作周波数を示す０とする（Ｓ９９５）。
【００６４】
一方、実行時間の平均値が、Tshiftと比較して極めて大きくはない場合（Ｓ９７０：ＮＯ）、又は、Ｓ９７５において求めた最大値が、割合Rapart以上の場合（Ｓ９７５：ＮＯ）に、中央処理装置１０００は、このプログラム領域が次回以降に実行される場合に実行時間を測定しないように設定する（Ｓ９７２）。一例として、実行時間測定部４２０は、実行プログラム３００において、ＳｔａｒｔＰｒｏｆｉｌｅ命令及びＥｎｄＰｒｏｆｉｌｅ命令を削除してもよい。命令を削除するには、上述のように、リコンパイル又は動的バイナリ書換を適用すればよい。
【００６５】
即ちこの結果、実行時間測定部４２０は、標準の計算能力によりこのプログラム領域を実行させた実行時間が、基準時間より短い場合には、そのプログラム領域を次回以降に実行する場合の実行時間を測定しない。また、実行時間測定部４２０は、複数回測定された実行時間の測定毎の変動幅が、予め定められた基準となる変動幅より大きい場合には、そのプログラム領域を次回以降に実行する場合の実行時間を測定しない。これにより、消費エネルギー削減効果が見込みにくいプログラム領域を、実行時間の測定対象から除外し、オーバヘッドを削減できる。
【００６６】
更に、このプログラム領域がメソッドである場合には、好ましくは、中央処理装置１０００は、そのメソッドに含まれるループ領域についての実行時間の測定をも中止する設定を行う。即ちこの結果、実行時間測定部４２０は、標準の計算能力によりこのメソッドを実行させた実行時間が、基準時間より短い場合には、そのメソッドに含まれる外側ループ領域、及び、その外側ループに含まれる内側ループ領域を実行する場合の実行時間を測定しない。これにより、実行時間の測定から除外する対象を、より一層効率的に選ぶことができる。
【００６７】
また、現在設定されている動作周波数が、最大の動作周波数でない場合には（Ｓ９３０：ＮＯ）、消費エネルギー算出部４３０は、そのプログラム領域を変数Ｐにより指定される動作周波数により実行した場合における消費エネルギーを算出する（Ｓ９３５）。そして、適正計算能力判断部４４０は、その消費エネルギーが、このプログラム領域について前回算出した消費エネルギーより減少したか否かを判断する（Ｓ９４０）。
【００６８】
減少していない場合、即ち、前回の消費エネルギーの方が少なかった場合には（Ｓ９４０：ＮＯ）、適正計算能力判断部４４０は、このプログラム領域の消費エネルギーを前回算出した時の動作周波数を、適正動作周波数とする（Ｓ９５０）。即ち、変数Poptに、P+1を代入する。一方、消費エネルギーが減少した場合には（Ｓ９４０：ＹＥＳ）、適正計算能力判断部４４０は、更に他の動作周波数の方が消費エネルギーが低い可能性があるので、Ｓ９８０に処理を移す。
【００６９】
本図のＳ９７０に示すように、計算能力設定部４５０は、あるプログラム領域について、中央処理装置１０００に予め定められた標準の動作周波数でそのプログラム領域を実行した実行時間が、動作周波数の変更に要する時間に基づいて定められた基準時間より長いことを条件として、そのプログラム領域が再度実行される時に動作周波数を変更させることができる。これにより、動作周波数の変更に伴うオーバヘッドより相対的に充分長く実行される部分のみを、動作周波数の設定対象とすることができる。
【００７０】
更にＳ９７２に示す処理により、実行時間測定部４２０は、標準の動作周波数によりプログラム領域を実行させた実行時間が、基準時間より短い場合には、そのプログラム領域を次回以降に実行する場合の実行時間を測定させないようにすることができる。これにより、実行時間の測定に伴うオーバヘッドを一層削減することができる。
【００７１】
また、本図のＳ９７５に示す処理により、計算能力設定部４５０は、あるプログラム領域について、同一の動作周波数により複数回実行された実行時間の、測定毎の変動幅が、予め定められた基準となる変動幅より大きい場合には、そのプログラム領域を、動作周波数を変更することなく標準の動作周波数で実行させることができる。これにより、消費エネルギーを削減できるか不明な部分については、動作周波数の設定対象から除外することができる。
なお、Ｓ８２０−２及びＳ８２０−３の各々における処理は、本図の処理と略同一であるので説明を省略する。
【００７２】
図１０は、コンパイラ４０がベンチマークプログラムをコンパイルして実行した実行結果を示す。本図は、あるベンチマークプログラムの実行時において、各々の動作周波数に対する、その動作周波数によりそのベンチマークプログラムを実行した時の実行時間及び消費エネルギーを示す。動作周波数を１．６ＧＨｚから１．４ＧＨｚに低下させても、消費エネルギーは減少しない。一方、動作周波数を１．２ＧＨｚから１ＧＨｚに低下させると、実行時間の増加は僅かであるのに対して、消費エネルギーは大幅に減少する。
【００７３】
このように、本実施例における情報処理装置１０によれば、実行時プロファイルに基づいて高い精度で中央処理装置の動作周波数を調節することができ、消費エネルギーを削減することができる。また、このベンチマークプログラムの実行において、更に、実行時間測定及び動作周波数変更に伴うオーバヘッドが、実行時間全体に対する数パーセントと極めて少ないことも確かめられた。
【００７４】
図１１は、本実施例の変形例に係る中央処理装置１０００の機能を説明する図である。本変形例において、中央処理装置１０００は、複数のスレッドの各々が実行する命令列の各々を同時に並列に実行する（例えば、非特許文献５等を参照。）。そして、より詳しくは、中央処理装置１０００は、同時に実行している複数のスレッドの各々について、並列に実行可能な最大の命令数のうち、当該スレッドの実行に割当てる命令数を、プログラムの実行中に動的に変更できる。一例として、ＩＢＭコーポレーション（登録商標）のＰｏｗｅｒ５プロセッサにおけるＳＭＴ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−Ｔｈｒｅａｄｉｎｇ）技術において、各スレッドの実行に命令数を割当てる方法を示す。
【００７５】
この技術において、並列に実行している複数のスレッドの各々に対して、そのスレッドの優先度を定めることができる。中央処理装置１０００は、各々のスレッドの優先度の差に基づいて、各スレッドに割当てるデコードスロットの数を変更する。例えば本図に示した表の３行目に示すように、優先度の差が０の場合には、中央処理装置１０００は、各スレッドに半分ずつのデコードスロットを割当てる。一方、例えば優先度の差が１の場合には、中央処理装置１０００は、一方のスレッドに全体の３／４のデコードスロットを割当て、他方のスレッドに全体の１／４のデコードスロットを割当てる。即ち、この技術において、あるスレッドの優先度とは、中央処理装置１０００により並列にデコード可能な命令数のうちそのスレッドに割当てる命令数の割合を示す。
以降、この技術に基づく中央処理装置１０００を例に、本実施例の変形例を説明する。
【００７６】
図１２は、本実施例の変形例に係るコンパイラ４０の機能を機能ブロックに分類して示す。本変形例において、コンパイラ４０は、消費エネルギー算出部４３０を有しなくともよい。また、実行時間測定部４２０は、各々のプログラム領域について、互いに異なるスレッドの優先度によってそのプログラム領域を実行した実行時間を測定する。適正計算能力判断部４４０は、優先度毎に測定された実行時間に基づいて、そのプログラム領域を最高の優先度のスレッドで実行した場合の実行時間に対する、各優先度のスレッドで実行した場合の実行時間が増加した割合をそれぞれ計算する。
【００７７】
そして、適正計算能力判断部４４０は、計算したその割合が予め定められた基準の割合以内に収まる優先度のうち、最も低い優先度を、適正優先度として判断する。これを受けて、計算能力設定部４５０は、各々のプログラム領域が実行される場合にそのプログラム領域に先立って実行される実行位置に、そのプログラム領域を実行するスレッドの優先度を変更する命令を生成する。
【００７８】
即ち、本例に示すように、あるプログラム領域を実行させる計算能力とは、そのプログラム領域の実行中に設定されている動作周波数のみならず、そのプログラム領域を実行するスレッドに割当てるデコードスロットの割合を含む。そして、本例においては、実行速度の低下が所定の範囲内に収まる限りにおいて、できるだけ低い優先度を設定することにより、他のスレッドに対してより多くのデコードスロットを割当てることを目的とする。
【００７９】
図１３は、本実施例の変形例に係るＳ８２０−１における処理の詳細を示す。図９と同様に本例においても、実行時間測定部４２０は、ＥｎｄＰｒｏｆｉｌｅ命令を生成することにより、実行プログラム３００の実行中において中央処理装置１０００に以下の処理を実行させる。まず、中央処理装置１０００は、中央処理装置１０００の現在の実行サイクルカウントを、変数Cendに代入する（Ｓ９００）。また、中央処理装置１０００は、Cend − Cstartを算出して動作周波数で除算することにより、実行時間を求める。また、中央処理装置１０００は、実行時間の測定回数を保持する変数Iをインクリメントする。
【００８０】
次に、中央処理装置１０００は、I≧Nか否かを判断する（Ｓ９１０）。即ち、測定回数が予め定められた回数Ｎに達していない場合には（Ｓ９１０：ＮＯ）、測定回数がＮ回に達するまでプログラムの実行を繰り返すべく、本図における処理を終了する。一方、測定回数が予め定められた回数Ｎに達した場合には（Ｓ９１０：ＹＥＳ）、中央処理装置１０００は、同一のプログラム領域を、優先度が同一のスレッドで複数回実行させた場合の実行時間の平均値を算出する（Ｓ９２０）。
【００８１】
次に、中央処理装置１０００は、実行中のスレッドの優先度が、そのスレッドに設定可能な優先度のうち最高の優先度であるか否かを判断する（Ｓ９３０）。なお、変数Ｐは、初期値として、そのスレッドに設定可能な優先度のうち最高の優先度を示す値を保持するものとする。最高の優先度である場合には（Ｓ９３０：ＹＥＳ）、中央処理装置１０００は、Ｓ９２０において算出した平均値を、変数Tmaxに代入する（Ｓ９６０）。
【００８２】
そして、中央処理装置１０００は、その平均値が、スレッドの優先度の変更に要する時間Tshiftと比較して極めて大きいか否かを判断する（Ｓ９７０）。例えば、中央処理装置１０００は、その平均値が、優先度の変更に要する時間に基づいて予め定められた基準時間よりも大きいか否かを判断してもよい。その基準時間とは、好ましくは、優先度の変更に要する時間の数倍から１０倍程度の時間である。また、その基準時間は、優先度の変更に要する時間と等しくてもよい。
【００８３】
その平均値が、Tshiftと比較して極めて大きい場合に（Ｓ９７０：ＹＥＳ）、中央処理装置１０００は、同一のプログラム領域を同一の優先度のスレッドで実行させて測定した各々の実行時間の、その平均値に対する差分値を算出し、その差分値をその実行時間で除算した値をそれぞれ求める（Ｓ９７５）。そして、中央処理装置１０００は、それぞれの測定に対応して求めたその値の最大値を求める。そして、中央処理装置１０００は、その最大値が、予め定められた基準値Rapartより小さいか否かを判断する。
【００８４】
その最大値が、割合Rapartより小さい場合に（Ｓ９７５：ＹＥＳ）、中央処理装置１０００は、変数Ｐをデクリメントし、変数Ｉを０に初期化する（Ｓ９８０）。即ち、中央処理装置１０００は、次回以降の実行においてスレッドの優先度を変更して実行時間を測定する。続いて、中央処理装置１０００は、変数Ｐが負の値の場合に（Ｓ９９０：ＮＯ）、変数Poptを、最小の優先度を示す０とする（Ｓ９９５）。
【００８５】
一方、実行時間の平均値が、Tshiftと比較して極めて大きくはない場合（Ｓ９７０：ＮＯ）、又は、Ｓ９７５において求めた最大値が、割合Rapart以上の場合（Ｓ９７５：ＮＯ）に、中央処理装置１０００は、このプログラム領域が次回以降に実行される場合に実行時間を測定しないように設定する（Ｓ９７２）。一例として、実行時間測定部４２０は、実行プログラム３００において、ＳｔａｒｔＰｒｏｆｉｌｅ命令及びＥｎｄＰｒｏｆｉｌｅ命令を削除してもよい。命令を削除するには、上述のように、リコンパイル又は動的バイナリ書換を適用すればよい。
【００８６】
即ちこの結果、実行時間測定部４２０は、標準の計算能力によりこのプログラム領域を実行させた実行時間が、基準時間より短い場合には、そのプログラム領域を次回以降に実行する場合の実行時間を測定しない。また、実行時間測定部４２０は、複数回測定された実行時間の測定毎の変動幅が、予め定められた基準となる変動幅より大きい場合には、そのプログラム領域を次回以降に実行する場合の実行時間を測定しない。これにより、消費エネルギー削減効果が見込みにくいプログラム領域を、実行時間の測定対象から除外し、オーバヘッドを削減できる。
【００８７】
また、現在このスレッドに設定されている優先度が、最大の優先度でない場合には（Ｓ９３０：ＮＯ）、適正計算能力判断部４４０は、そのプログラム領域を最大の優先度で実行させた実行時間に対する、変数Ｐにより指定される優先度で実行した場合における実行時間の増加割合を算出する（Ｓ９３５）。そして、適正計算能力判断部４４０は、その増加割合が、予め定められた閾値以下か否かを判断する（Ｓ９４０）。
【００８８】
その増加割合が閾値以下でない場合には（Ｓ９４０：ＮＯ）、適正計算能力判断部４４０は、このプログラム領域を前回実行した時の優先度を、適正優先度とする（Ｓ９５０）。即ち、P+1を、適正優先度を示す値を保持する変数Poptに代入する。一方、その増加割合が閾値以下でない場合には（Ｓ９４０：ＹＥＳ）、適正計算能力判断部４４０は、更に低い優先度で実行できる可能性があるので、Ｓ９８０に処理を移す。
【００８９】
以上、本図においても図９と同様に、スレッドの優先度の変更に伴うオーバヘッドより相対的に充分長く実行される部分のみを、スレッドの優先度の設定対象とすることができる。また、実行時間が不安定で実行速度が低下する割合が不明な部分については、スレッドの優先度の変更対象から除外することができる。更に本例によれば、実行速度の低下が所定の範囲内に収まる限りにおいて、他のスレッドに対してより多くのデコードスロットを割当てることができる。
【００９０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００９１】
【図１】図１は、情報処理装置１０の構成を示す。
【図２】図２は、消費電力情報格納部１０２５のデータ構造の一例を示す。
【図３】図３は、中央処理装置１０００が実行するプログラムの構成を示す。
【図４】図４は、コンパイラ４０の機能を機能ブロックに分類して示す。
【図５】図５は、プログラム領域３０５−１〜３の具体例を示す。
【図６】図６は、コンパイラ４０が中央処理装置１０００に適した計算能力を設定する処理の流れを示す。
【図７】図７は、図６のＳ６００における処理の一例について、その詳細を示す。
【図８】図８は、図６のＳ６１０における処理の詳細を示す。
【図９】図９は、図８のＳ８２０−１における処理の詳細を示す。
【図１０】図１０は、コンパイラ４０がベンチマークプログラムをコンパイルして実行した実行結果を示す。
【図１１】図１１は、本実施例の変形例に係る中央処理装置１０００の機能を説明する図である。
【図１２】図１２は、本実施例の変形例に係るコンパイラ４０の機能を機能ブロックに分類して示す。
【図１３】図１３は、本実施例の変形例に係るＳ８２０−１における処理の詳細を示す。
【符号の説明】
【００９２】
１０  情報処理装置
４０  コンパイラ
１０２５  消費電力情報格納部
３００  実行プログラム
３０５  プログラム領域
３１０  仮想マシン
３２０  オペレーティングシステム
３２５  動作周波数設定用デバイスドライバ
４００  プログラム領域選択部
４１０  参照頻度測定部
４２０  実行時間測定部
４３０  消費エネルギー算出部
４４０  適正計算能力判断部
４５０  計算能力設定部
１０００  中央処理装置
【図１】
2006127302.tif 000003
【図２】
2006127302.tif 000004
【図３】
2006127302.tif 000005
【図４】
2006127302.tif 000006
【図５】
2006127302.tif 000007
【図６】
2006127302.tif 000008
【図７】
2006127302.tif 000009
【図８】
2006127302.tif 000010
【図９】
2006127302.tif 000011
【図１０】
2006127302.tif 000012
【図１１】
2006127302.tif 000013
【図１２】
2006127302.tif 000014
【図１３】
2006127302.tif 000015