(57)【特許請求の範囲】
【請求項１】
コンピュータに、
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する、
処理を実行させ、
前記演算器の数を決定する処理において、
動作する前記演算器の数が或る数である場合に対して、動作する前記演算器の数が前記或る数より１少ない数である場合について、前記区間の実行時間の増加率が第１の値以下であり、且つ、消費電力量の減少率が第２の値以上であれば、動作する前記演算器の数の候補に前記或る数より１少ない数を採用する
コンパイラプログラム。
【請求項２】
前記演算器の数を決定する処理において、
前記実行時間の増加率が前記第１の値を超えるか、又は、前記消費電力量の減少率が前記第２の値未満であれば、動作する前記演算器の数を前記或る数に決定する
請求項１記載のコンパイラプログラム。
【請求項３】
動作する前記演算器の数を指定するための命令は、動作を開始させる命令及び動作を終了させる命令を含む
請求項１又は２のいずれか１つ記載のコンパイラプログラム。
【請求項４】
コンピュータが、
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する、
処理を実行し、
前記演算器の数を決定する処理において、
動作する前記演算器の数が或る数である場合に対して、動作する前記演算器の数が前記或る数より１少ない数である場合について、前記区間の実行時間の増加率が第１の値以下であり、且つ、消費電力量の減少率が第２の値以上であれば、動作する前記演算器の数の候補に前記或る数より１少ない数を採用する
コンパイル方法。
【請求項５】
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定する決定部と、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する生成部と、
を有し、
前記決定部が、
動作する前記演算器の数が或る数である場合に対して、動作する前記演算器の数が前記或る数より１少ない数である場合について、前記区間の実行時間の増加率が第１の値以下であり、且つ、消費電力量の減少率が第２の値以上であれば、動作する前記演算器の数の候補に前記或る数より１少ない数を採用する
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル技術に関する。
【背景技術】
【０００２】
コンパイル時の最適化（コンパイラ最適化と呼ばれる）によって消費電力量を削減する技術が存在する。例えば或る文献においては、解析手段が、マイクロプロセッサの動作時に所定長の命令区間動作しない動作資源を検出し、電力制御指示データを生成する。そして、付与手段が、電力制御指示データを参照し、マイクロプロセッサを動作させるための命令列又はその命令列を機械語に翻訳することにより生成される機械語命令列に、電力制御に関する情報を付与する。しかし、本文献に記載の技術は、或る動作資源が所定長の命令区間において動作しないという状態が生じることが前提となっており、そのような状態が生じない場合には消費電力量を削減することができない。
【０００３】
また、或る文献においては以下のようにして消費電力量が削減される。具体的には、ＶＬＩＷ（Very Long Instruction Word）型プロセッサ用のコンパイラが、各スロットで使用する演算器の変更を指示する電力制御コンパイルオプションの入力を受け付けるインタフェースを備え、指示された演算器の変更に応じた最適化を行う。但し、この技術においても、演算器が一定時間動作しないという状態が生じることが前提となっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−２９６１２３号公報
【特許文献２】特開２０１１−１６４７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従って、本発明の目的は、１つの側面では、コンパイラ最適化によって消費電力量を削減するための新規な技術を提供することである。
【課題を解決するための手段】
【０００６】
本発明に係るコンパイル方法は、第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、動作する演算器の数を指定するための命令を複数の区間の各々に追加し、第２のコードを生成する処理を含む。
【発明の効果】
【０００７】
１つの側面では、コンパイラ最適化によって消費電力量を削減できるようになる。
【図面の簡単な説明】
【０００８】
【図１】図１は、情報処理装置のハードウエア構成図である。
【図２】図２は、第１の実施の形態における情報処理装置の機能ブロック図である。
【図３】図３は、メインの処理フローを示す図である。
【図４】図４は、ループの抽出例を示す図である。
【図５】図５は、最適化テーブル格納部に格納されるデータの一例を示す図である。
【図６】図６は、第１の実施の形態における決定処理の処理フローを示す図である。
【図７】図７は、スケジューリング結果の一例を示す図である。
【図８】図８は、挿入部が実行する処理の処理フローを示す図である。
【図９】図９は、最適化プログラム格納部に格納されるプログラムの一例を示す図である。
【図１０】図１０は、第２の実施の形態における情報処理装置の機能ブロック図である。
【図１１】図１１は、第２の実施の形態における決定処理の処理フローを示す図である。
【図１２】図１２は、性能が優先されるループを指定するためのデータの一例を示す図である。
【図１３】図１３は、判定処理の処理フローを示す図である。
【図１４】図１４は、増加率の閾値及び減少率の閾値の一例を示す図である。
【図１５】図１５は、算出部が実行する処理の処理フローを示す図である。
【図１６】図１６は、ソースプログラムの一例を示す図である。
【図１７】図１７は、スケジューリング結果の一例を示す図である。
【図１８】図１８は、ソースプログラムの一例を示す図である。
【図１９】図１９は、スケジューリング結果の一例を示す図である。
【図２０】図２０は、スケジューリング結果の一例を示す図である。
【発明を実施するための形態】
【０００９】
［実施の形態１］
図１に、本実施の形態における情報処理装置１のハードウエア構成図を示す。情報処理装置１は、外部記憶装置１１と、メモリ１２と、ＣＰＵ１３と、入力装置１４と、出力装置１５と、バス１６とを含む。外部記憶装置１１は、例えばＨＤＤ（Hard Disk Drive）である。メモリ１２は、例えばメインメモリである。ＣＰＵ１３は、制御装置１３１と複数の演算器１３２を含む。複数の演算器１３２は、整数演算器及び浮動小数点演算器を含む。入力装置１４は、例えばマウス又はキーボードである。出力装置１５は、例えばディスプレイである。
【００１０】
図２に、第１の実施の形態における情報処理装置１の機能ブロック図を示す。情報処理装置１は、コンパイラ１００と、ソースプログラム格納部１０１と、最適化プログラム格納部１０９とを含む。コンパイラ１００は、区間抽出部１０２と、区間データ格納部１０３と、命令スケジューリング部１０４と、スケジューリング結果格納部１０５と、最適化テーブル格納部１０６と、決定部１０７と、挿入部１０８とを含む。
【００１１】
ソースプログラム格納部１０１は、コンパイルの対象となるソースプログラムを格納する。区間抽出部１０２は、ソースプログラム格納部１０１に格納されたソースプログラムに基づき処理を実行し、処理結果を区間データ格納部１０３及び最適化テーブル格納部１０６に格納する。命令スケジューリング部１０４は、区間データ格納部１０３に格納されたデータに基づき処理を実行し、処理結果をスケジューリング結果格納部１０５に格納する。決定部１０７は、スケジューリング結果格納部１０５に格納されたデータに基づき処理を実行し、処理結果に基づき最適化テーブル格納部１０６に格納されたデータを更新する。挿入部１０８は、最適化テーブル格納部１０６に格納されたデータ及び決定部１０７から受け取ったデータに基づき処理を実行し、処理結果を最適化プログラム格納部１０９に格納する。
【００１２】
なお、最適化プログラム格納部１０９に格納されるプログラムには、最適化された命令列が格納される。最適化された命令列は、例えば、オブジェクトプログラム（オブジェクトコードとも呼ばれる）に変換される前の中間表現のプログラム（中間コードとも呼ばれる）であり、最終的にオブジェクトプログラムに変換され、ＣＰＵ１３により実行される。但し、コンパイラ１００においてオブジェクトプログラムに変換する処理をも実行した上で、最適化プログラム格納部１０９にオブジェクトプログラムを格納するようにしてもよい。オブジェクトプログラムに変換する処理は本実施の形態の主要な部分ではないので、説明を省略する。
【００１３】
本実施の形態におけるコンパイラ１００を実現するためのプログラムは外部記憶装置１１に格納される。ＣＰＵ１３は、外部記憶装置１１に格納されたプログラムをメモリ１２にロードして実行する。
【００１４】
次に、図３乃至図９を用いて、情報処理装置１が実行する処理について説明する。
【００１５】
まず、区間抽出部１０２は、ソースプログラム格納部１０１に格納されたソースプログラムから、深さ優先探索によってループを抽出し（図３：ステップＳ１）、ループに関するデータを区間データ格納部１０３に格納する。ループに関するデータは、例えば、各ループの開始行及び終了行に関するデータを含む。図４に、ループの抽出例を示す。図４の例では、ソースプログラム全体から、ループ０乃至４が抽出される。ループ２は、ループ３及び４の親ループである。ループ０は、ループ１及び２の親ループである。ソースプログラムは１回だけ回るループとして取り扱われ、ソースプログラムにはループ識別子「０」が割り当てられる。
【００１６】
また、区間抽出部１０２は、ステップＳ１の処理結果に基づき最適化テーブルを生成し（ステップＳ３）、最適化テーブル格納部１０６に格納する。図５に、最適化テーブル格納部１０６に格納されるデータの一例を示す。図５の例では、ループ識別子と、親ループの識別子と、最適化の状態を表すデータが格納される。最適化の状態を表すデータが格納される欄には、初期的には「未完了」が格納される。
【００１７】
ステップＳ１の処理結果が最適化テーブルに格納されると、決定部１０７は、未処理のループを最適化テーブル格納部１０６から１つ特定する（ステップＳ５）。
【００１８】
決定部１０７は、特定されたループ（以下、対象ループと呼ぶ）の最適化の状態が「不可」であるか判断する（ステップＳ７）。最適化の状態が「不可」である場合（ステップＳ７：Ｙｅｓルート）、決定部１０７は、対象ループの親ループを最適化テーブル格納部１０６から特定する。そして、決定部１０７は、特定された親ループの最適化の状態を「不可」に設定する（ステップＳ９）。そしてステップＳ５の処理に戻る。
【００１９】
最適化の状態が「不可」ではない場合（ステップＳ７：Ｎｏルート）、決定部１０７は、対象ループについて決定処理を実行する（ステップＳ１１）。決定処理については、図６及び図７を用いて説明する。
【００２０】
まず、命令スケジューリング部１０４は、対象ループについて、演算器数をｘ（ｘは自然数。初期値は、情報処理装置１内の演算器１３２の数。）として命令スケジューリングを実行し（図６：ステップＳ２１）、実行結果をスケジューリング結果格納部１０５に格納する。命令スケジューリングは、例えば、「中田育男、『コンパイラの構成と最適化』、朝倉書店」に開示された方法により実行される。命令スケジューリングはよく知られた技術であるので、ここでは詳細な説明を省略する。
【００２１】
図７に、命令スケジューリングの結果の一例を示す。図７の例では、或るメモリ（或いはメモリ領域）に対する命令と、別のメモリ（或いはメモリ領域）に対する命令と、或る演算器が実行する命令と、別の演算器が実行する命令とがクロックサイクル毎に示されている。この例では、対象ループの実行に要する時間が１３クロックサイクルであり、各命令の実行に要する時間（すなわちレイテンシ）が３クロックサイクルである。命令スケジューリングは、各命令のレイテンシ及び命令間の依存関係等に基づき行われる。
【００２２】
なお、ステップＳ２１の処理によってソースプログラムは中間表現のプログラムに変換され、スケジューリング結果格納部１０５に格納されるとする。
【００２３】
図６の説明に戻り、決定部１０７は、Ｔxを、命令スケジューリングによって算出された、対象ループの実行時間の見積もり値に設定する（ステップＳ２３）。図７の例であれば、Ｔx＝１３である。
【００２４】
決定部１０７は、ｘ＞１が成立するか判断する（ステップＳ２５）。ｘ＞１が成立しない（すなわち、ｘ＝１である）場合（ステップＳ２５：Ｎｏルート）、決定部１０７は、最適化テーブル格納部１０６に、対象ループについての最適な演算器数を「１」に設定する（ステップＳ２７）。そして呼び出し元の処理に戻る。
【００２５】
一方、ｘ＞１が成立する場合（ステップＳ２５：Ｙｅｓルート）、命令スケジューリング部１０４は、対象ループについて、演算器数を（ｘ−１）として命令スケジューリングを実行し（ステップＳ２９）、実行結果をスケジューリング結果格納部１０５に格納する。
【００２６】
決定部１０７は、Ｔx-1を、ステップＳ２９における命令スケジューリングによって算出された、対象ループの実行時間の見積もり値に設定する（ステップＳ３１）。
【００２７】
決定部１０７は、Ｔx＝Ｔx-1が成立するか判断する（ステップＳ３３）。ステップＳ３３においては、ＴxとＴx-1との差が閾値未満である（すなわち、Ｔx−Ｔx-1＜閾値αが成立する）か判断してもよい。
【００２８】
Ｔx＝Ｔx-1が成立する場合（ステップＳ３３：Ｙｅｓルート）、決定部１０７は、Ｔx＝Ｔx-1且つｘ＝ｘ−１と設定する（ステップＳ３７）。そしてステップＳ２５の処理に戻る。一方、Ｔx＝Ｔx-1が成立しない場合（ステップＳ３３：Ｎｏルート）、決定部１０７は、最適な演算器数をｘに設定する（ステップＳ３５）。そして呼び出し元の処理に戻る。
【００２９】
以上のような処理を実行すれば、実行時間が長くならない範囲で最少の演算器数を求めることができるようになる。
【００３０】
図３の説明に戻り、決定部１０７は、ステップＳ１１において求められた最適な演算器数（以下では、最適な演算器数をｎとする）は、使用可能な最大演算器数（すなわち、情報処理装置１内の演算器１３２の数。）であるか判断する（ステップＳ１３）。演算器数ｎは使用可能な最大演算器数である場合（ステップＳ１３：Ｙｅｓルート）、決定部１０７は、対象ループの最適化の状態を「不可」に設定する（ステップＳ１５）。そしてステップＳ９の処理に移行する。
【００３１】
一方、演算器数ｎは使用可能な最大演算器数ではない場合（ステップＳ１３：Ｎｏルート）、決定部１０７は、対象ループの最適化の状態を「完了」に設定し（ステップＳ１７）、最適化テーブル格納部１０６に、対象ループについての最適な演算器数が「ｎ」であることを表すデータを格納する。
【００３２】
決定部１０７は、未処理のループが有るか判断する（ステップＳ１９）。未処理のループが有る場合（ステップＳ１９：Ｙｅｓルート）、ステップＳ５の処理に戻る。未処理のループが無い場合（ステップＳ１９：Ｎｏルート）、処理を終了する。
【００３３】
以上のような処理を実行すれば、最適化可能なループについて最適な演算器数を決定できるようになる。
【００３４】
次に、図８を用いて、挿入部１０８が実行する処理について説明する。
【００３５】
まず、挿入部１０８は、スケジューリング結果格納部１０５に格納された中間表現のプログラムを、決定部１０７を介して取得する。そして、挿入部１０８は、ループ識別子を表す変数ｙをｙ＝０と設定する（図８：ステップＳ４１）。
【００３６】
挿入部１０８は、最適化テーブル格納部１０６において、ループｙの最適化の状態が「完了」であるか判断する（ステップＳ４３）。ループｙの最適化の状態が「完了」ではない（すなわち、「未完了」である）場合（ステップＳ４３：Ｎｏルート）、ステップＳ４９の処理に移行する。
【００３７】
一方、ループｙの最適化の状態が「完了」である場合（ステップＳ４３：Ｙｅｓルート）、挿入部１０８は、ソースプログラム上のループｙに対応する区間の先頭に、演算器（ｎ＋１）乃至Ｎ（Ｎは情報処理装置１内の演算器１３２の数）の動作を停止する命令を挿入する（ステップＳ４５）。ここで、ｎはステップＳ１１において決定された最適な演算器数である。
【００３８】
挿入部１０８は、ソースプログラム上のループｙに対応する区間の最後に、演算器（ｎ＋１）乃至Ｎ（Ｎは情報処理装置１内の演算器１３２の数）の動作を開始する命令を挿入する（ステップＳ４７）。
【００３９】
挿入部１０８は、ｙ＝ｙ＋１と設定し（ステップＳ４９）、ｙ＞Ｙが成立するか判断する（ステップＳ５１）。ここで、Ｙはソースプログラムから抽出されたループの数から１を引いた数である。ｙ＞Ｙが成立しない場合（ステップＳ５１：Ｎｏルート）、ステップＳ４３の処理に戻る。ｙ＞Ｙが成立する場合（ステップＳ５１：Ｙｅｓルート）、挿入部１０８は、処理後のプログラムを最適化プログラム格納部１０９に格納する。そして処理を終了する。
【００４０】
図９に、最適化プログラム格納部１０９に格納されるプログラムの一例を示す。ここでは、整数演算器の数がＮであり、各整数演算器に１からＮまでの番号のいずれかが割り当てられるとする。また、浮動小数点演算器の数がＮであり、各浮動小数点演算器に１からＮまでの番号のいずれかが割り当てられるとする。初期状態では、全演算器が動作中であるとする。番号「ｍ」が割り当てられた整数演算器の動作を開始する命令は例えば「ExecUnit, On, m」であり、番号「ｍ」が割り当てられた整数演算器の動作を停止する命令は例えば「ExecUnit, Off, m」である。番号「ｍ」が割り当てられた浮動小数点演算器の動作を開始する命令は例えば「FexecUnit, On, m」であり、番号「ｍ」が割り当てられた浮動小数点演算器の動作を停止する命令は例えば「FexecUnit, Off, m」である。図９においては、「FexecUnit, Off, 2」は番号「２」が割り当てられた浮動小数点演算器の動作を停止する命令であり、「FexecUnit, On, 2」は番号「２」が割り当てられた浮動小数点演算器の動作を開始する命令である。
【００４１】
以上のような処理を実行すれば、プログラムの実行時間が長くなることを防ぎつつ、演算器数を減らすことで消費電力量を削減することができるようになる。
【００４２】
［実施の形態２］
第１の実施の形態においては、実行時間に基づき演算器１３２の数を決定する処理について説明した。第２の実施の形態においては、実行時間及び消費電力量に基づき演算器１３２の数を決定する処理について説明する。
【００４３】
図１０に、第２の実施の形態における情報処理装置１の機能ブロック図を示す。情報処理装置１は、コンパイラ１００と、ソースプログラム格納部１０１と、最適化プログラム格納部１０９とを含む。コンパイラ１００は、区間抽出部１０２と、区間データ格納部１０３と、命令スケジューリング部１０４と、スケジューリング結果格納部１０５と、最適化テーブル格納部１０６と、決定部１０７と、挿入部１０８と、電力データ格納部１１０と、算出部１１１とを含む。
【００４４】
ソースプログラム格納部１０１は、コンパイルの対象となるソースプログラムを格納する。区間抽出部１０２は、ソースプログラム格納部１０１に格納されたソースプログラムに基づき処理を実行し、処理結果を区間データ格納部１０３及び最適化テーブル格納部１０６に格納する。命令スケジューリング部１０４は、区間データ格納部１０３に格納されたデータに基づき処理を実行し、処理結果をスケジューリング結果格納部１０５に格納する。算出部１１１は、電力データ格納部１１０に格納されたデータに基づき処理を実行し、処理結果を決定部１０７に通知する。決定部１０７は、スケジューリング結果格納部１０５に格納されたデータ及び算出部１１１から受け取ったデータに基づき処理を実行し、処理結果に基づき最適化テーブル格納部１０６に格納されたデータを更新する。挿入部１０８は、最適化テーブル格納部１０６に格納されたデータ及び決定部１０７から受け取ったデータに基づき処理を実行し、処理結果を最適化プログラム格納部１０９に格納する。
【００４５】
次に、図１１乃至図１４を用いて、第２の実施の形態における決定処理について説明する。
【００４６】
まず、命令スケジューリング部１０４は、対象ループについて、演算器数をｘ（ｘは自然数。初期値は、情報処理装置１内の演算器１３２の数。）として命令スケジューリングを実行し（図１１：ステップＳ６１）、実行結果をスケジューリング結果格納部１０５に格納する。命令スケジューリングは、例えば、「中田育男、『コンパイラの構成と最適化』、朝倉書店」に開示された方法により実行される。命令スケジューリングはよく知られた技術であるので、ここでは詳細な説明を省略する。
【００４７】
なお、ステップＳ６１の処理によってソースプログラムは中間表現のプログラムに変換され、スケジューリング結果格納部１０５に格納されるとする。
【００４８】
決定部１０７は、対象ループが、予め指定されたループであるか判断する（ステップＳ６３）。予め指定されたループである場合、ソースプログラム上のループの先頭に、図１２に示すようなデータが格納される。図１２の例では、１つ目の「for (j=1; j<M; j++){」で始まるループに「!loop priority performace」という情報が付されている。この情報が付されている場合には、処理性能を優先するため、最適な演算器数をｘの初期値のままとする。
【００４９】
対象ループが、予め指定されたループである場合（ステップＳ６３：Ｙｅｓルート）、決定部１０７は、最適な演算器数をｘに設定する（ステップＳ６５）。そして呼び出し元の処理に戻る。
【００５０】
一方、対象ループが、予め指定されたループではない場合（ステップＳ６３：Ｎｏルート）、決定部１０７は、Ｔxを、命令スケジューリングによって算出された、対象ループの実行時間の見積もり値に設定し、Ｐxを、算出部１１１から取得した、演算器数がｘである場合における消費電力量の見積もり値に設定する（ステップＳ６７）。図７の例であれば、Ｔx＝１３である。算出部１１１が消費電力量の見積もり値を算出する処理については後で説明する。
【００５１】
決定部１０７は、ｘ＞１が成立するか判断する（ステップＳ６９）。ｘ＞１が成立しない（すなわち、ｘ＝１である）場合（ステップＳ６９：Ｎｏルート）、決定部１０７は、最適な演算器数を「１」に設定する（ステップＳ７１）。そして呼び出し元の処理に戻る。
【００５２】
一方、ｘ＞１が成立する場合（ステップＳ６９：Ｙｅｓルート）、命令スケジューリング部１０４は、対象ループについて、演算器数を（ｘ−１）として命令スケジューリングを実行し（ステップＳ７３）、実行結果をスケジューリング結果格納部１０５に格納する。
【００５３】
決定部１０７は、Ｔx-1を、ステップＳ７３における命令スケジューリングによって算出された、対象ループの実行時間の見積もり値に設定し、Ｐx-1を、算出部１１１から取得した、演算器数が（ｘ−１）である場合における消費電力量の見積もり値に設定する（ステップＳ７５）。
【００５４】
決定部１０７は、判定処理を実行する（ステップＳ７７）。判定処理については、図１３及び図１４を用いて説明する。
【００５５】
まず、決定部１０７は、（Ｔx-1／Ｔx−１）＊１００≦Ｅ且つ（１−Ｐx-1／Ｐx）＊１００≧Ｆが成立するか判断する（ステップＳ１１１）。ステップＳ１１１の式は、実行時間の増加率がＥ％以下であり且つ消費電力量の減少率がＦ％以上であるという所定条件を満たすか否か判定するための式である。Ｅ及びＦについては、予め管理者等が定めておく。例えば図１４に示すように、複数の省電力モードを用意しておき、場合に応じてＥ及びＦの値を切り替えてもよい。
【００５６】
（Ｔx-1／Ｔx−１）＊１００≦Ｅ且つ（１−Ｐx-1／Ｐx）＊１００≧Ｆが成立する場合（ステップＳ１１１：Ｙｅｓルート）、決定部１０７は、Ｔx、Ｔx-1、Ｐx、及びＰx-1が所定条件を満たすと判定する（ステップＳ１１３）。一方、（Ｔx-1／Ｔx−１）＊１００≦Ｅ且つ（１−Ｐx-1／Ｐx）＊１００≧Ｆが成立しない場合（ステップＳ１１１：Ｎｏルート）、決定部１０７は、Ｔx、Ｔx-1、Ｐx、及びＰx-1が所定条件を満たさないと判定する（ステップＳ１１５）。そして呼び出し元の処理に戻る。
【００５７】
図１１の説明に戻り、決定部１０７は、Ｔx、Ｔx-1、Ｐx、及びＰx-1が所定条件を満たすか判断する（ステップＳ７９）。Ｔx、Ｔx-1、Ｐx、及びＰx-1が所定条件を満たす場合（ステップＳ７９：Ｙｅｓルート）、決定部１０７は、Ｔx＝Ｔx-1、Ｐx＝Ｐx-1、且つｘ＝ｘ−１と設定する（ステップＳ８３）。そしてステップＳ６９の処理に戻る。
【００５８】
一方、Ｔx、Ｔx-1、Ｐx、及びＰx-1が所定条件を満たさない場合（ステップＳ７９：Ｎｏルート）、決定部１０７は、最適な演算器数をｘに設定する（ステップＳ８１）。そして呼び出し元の処理に戻る。
【００５９】
以上のような処理を実行すれば、実行時間及び消費電力量が所定条件を満たす範囲で最少の演算器数を求めることができるようになる。
【００６０】
次に、図１５を用いて、算出部１１１が実行する処理について説明する。
【００６１】
まず、算出部１１１は、演算器１個の動作時の消費電力のデータを電力データ格納部１１０から読み出し、Ｗｅｘｅｃを、演算器１個の動作時の消費電力に設定する（図１５：ステップＳ９１）。演算器１個の動作時の消費電力は、予め管理者等が計測しておくものとする。
【００６２】
算出部１１１は、演算器１個の待機時の消費電力のデータを電力データ格納部１１０から読み出し、Ｗｗａｉｔを、演算器１個の待機時の消費電力に設定する（ステップＳ９３）。演算器１個の待機時の消費電力は、予め管理者等が計測しておくものとする。
【００６３】
算出部１１１は、Ｔｅｘｅｃ（ｉ）を、ｉ個の演算器１３２が同時に動作する時間（クロックサイクル）に設定する（ステップＳ９４）。ここで、ｉは０≦ｉ≦ｘを満たす整数である。本処理において、ｘは、決定部１０７から指定された値である。
【００６４】
算出部１１１は、Ｐx＝０と設定し且つｉ＝０と設定する（ステップＳ９５）。ここで、Ｐxは演算器ｘ個による消費電力量である。
【００６５】
算出部１１１は、ｉ＞ｘが成立するか判断する（ステップＳ９７）。ｉ＞ｘが成立する場合（ステップＳ９７：Ｙｅｓルート）、算出部１１１はＰx（すなわち、消費電力量の見積もり値）を決定部１０７に通知し、処理を終了する。
【００６６】
一方、ｉ＞ｘが成立しない場合（ステップＳ９７：Ｎｏルート）、Ｐx＝Ｐx＋（Ｗｅｘｅｃ＊ｉ＋Ｗｗａｉｔ＊（ｘ−ｉ））＊Ｔｅｘｅｃ（ｉ）と設定する（ステップＳ９９）。ここで、Ｔｅｘｅｃ（ｉ）は、ｉ個の演算器１３２が同時に動作する時間である。例えば図７の例であれば、Ｔ（０）＝４クロックサイクルであり、Ｔ（１）＝６クロックサイクルであり、Ｔ（２）＝３クロックサイクルである。
【００６７】
算出部１１１は、ｉ＝ｉ＋１と設定する（ステップＳ１０１）。そしてステップＳ９７の処理に戻る。
【００６８】
以上のような処理を実行すれば、演算器ｘ個による消費電力量を求めることができるようになる。
【００６９】
以下では、情報処理装置１の動作について２つの具体例を示す。
【００７０】
第１の具体例においては、ソースプログラムが図１６に示すプログラムであるとする。メモリ１２への同時アクセス数は２であり、動作する整数演算器の数が２であり、且つ動作する浮動小数点演算器の数が２である場合におけるスケジューリング結果が、図１７に示すスケジューリング結果であるとする。ａ［ｉ］とａ［ｉ−１］との間にはデータの依存関係があるため、同一のクロックサイクルにおいて加算命令を実行することができない。
【００７１】
図１７のスケジューリング結果においては、実行時間は１１クロックサイクルであり、使用される整数演算器の数は１であり、使用される浮動小数点演算器の数は１である。このとき、Ｔ2＝１１且つＴ1＝１１が成立する。よって、浮動小数点演算器の数を１減らしても実行時間は変わらないので、浮動小数点演算器の数を１減らすことができる。但し、これ以上は数を減らすことはできない。また、整数演算器についてもＴ2＝１１且つＴ1＝１１が成立する。よって、浮動小数点演算器と同様、整数演算器についても数を１減らすことができる。
【００７２】
よって、浮動小数点演算器の数及び整数演算器の数をそれぞれ１ずつ減らすことによって、消費電力量を削減することができる。
【００７３】
第２の具体例においては、ソースプログラムが図１８に示すプログラムであるとする。メモリ１２への同時アクセス数は２であり、動作する整数演算器の数が２であり、且つ動作する浮動小数点演算器の数が２である場合におけるスケジューリング結果が、図１９に示すスケジューリング結果であるとする。
【００７４】
図１９のスケジューリング結果においては、実行時間は１７クロックサイクルであり、使用される整数演算器の数は１であり、使用される浮動小数点演算器の数は２である。すなわち、Ｔ2＝１７である。
【００７５】
一方、浮動小数点演算器の数を１として命令スケジューリングを行った場合におけるスケジューリング結果が、図２０に示すスケジューリング結果であるとする。この場合、Ｔ1＝２３である。よって、Ｔ2≠Ｔ1であるため、浮動小数点演算器の数を減らすことができない。
【００７６】
一方、整数演算器の数を１減らすことは可能である。従って、第２の具体例においても、整数演算器の数を１減らすことで消費電力量を削減することができる。
【００７７】
なお、浮動小数点演算器については、Ｔ2＝１７、Ｔ1＝２３、Ｐ2＝Ｗｅｘｅｃ＊１９＋Ｗｗａｉｔ＊４９、Ｐ1＝Ｗｅｘｅｃ＊１９＋Ｗｗａｉｔ＊２７である。従って、浮動小数点演算器の数を１減らした場合には、実行時間は６クロックサイクル増加し、増加率は６／１７＊１００＝３５％である。消費電力量はＷｗａｉｔ＊２２だけ減少し、減少率はＷｗａｉｔ＊２２／（Ｗｅｘｅｃ＊１９＋Ｗｗａｉｔ＊４９）＊１００（％）である。
【００７８】
従って、実行時間の増加率３５％が閾値Ｅ以下であり、且つ、消費電力量の減少率Ｗｗａｉｔ＊２２／（Ｗｅｘｅｃ＊１９＋Ｗｗａｉｔ＊４９）＊１００（％）が閾値Ｆ以上である場合には、浮動小数点演算器の数を１減らしたスケジューリング結果を採用することになる。
【００７９】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００８０】
また、上で説明した各テーブルの構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００８１】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００８２】
本実施の形態に係るコンパイル方法は、（Ａ）第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、（Ｂ）動作する演算器の数を指定するための命令を複数の区間の各々に追加し、第２のコードを生成する処理を含む。
【００８３】
このようにすれば、動作する演算器の数が無駄に多くなることを防げるので、消費量を抑制することが可能になる。
【００８４】
また、上で述べた演算器の数を決定する処理において、（ａ１）動作する演算器の数と、区間の実行時間との関係に基づき、動作する演算器の数を決定してもよい。このようにすれば、実行時間の観点から演算器の数を決定できるようになる。
【００８５】
また、上で述べた演算器の数を決定する処理において、（ａ２）動作する演算器の数が或る数である場合における区間の実行時間より、動作する演算器の数が或る数より１少ない数である場合における区間の実行時間が長い場合、動作する演算器の数を或る数に決定してもよい。このようにすれば、実行時間が長くなることを抑制しつつ、消費電力量を減らせるようになる。
【００８６】
また、上で述べた演算器の数を決定する処理において、（ａ３）動作する演算器の数と区間の実行時間との関係、及び、動作する演算器の数と消費電力量との関係に基づき、動作する演算器の数を決定してもよい。このようにすれば、実行時間及び消費電力量の観点から演算器の数を決定できるようになる。
【００８８】
また、上で述べた複数の区間は、予め指定された１又は複数の区間以外の区間であってもよい。これにより、一部の区間を処理の対象外にすることができる。
【００８９】
また、動作する演算器の数を指定するための命令は、動作を開始させる命令及び動作を終了させる命令を含んでもよい。これにより、動作する演算器の数を適切に制御できるようになる。
【００９０】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００９１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００９２】
（付記１）
コンピュータに、
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する、
処理を実行させるためのコンパイラプログラム。
【００９３】
（付記２）
前記演算器の数を決定する処理において、
動作する前記演算器の数と、前記区間の実行時間との関係に基づき、動作する前記演算器の数を決定する、
付記１記載のコンパイラプログラム。
【００９４】
（付記３）
前記演算器の数を決定する処理において、
動作する前記演算器の数が或る数である場合における前記区間の実行時間より、動作する前記演算器の数が前記或る数より１少ない数である場合における前記区間の実行時間が長い場合、動作する前記演算器の数を前記或る数に決定する、
付記２記載のコンパイラプログラム。
【００９５】
（付記４）
前記演算器の数を決定する処理において、
動作する前記演算器の数と前記区間の実行時間との関係、及び、動作する前記演算器の数と消費電力量との関係に基づき、動作する前記演算器の数を決定する、
付記１又は２記載のコンパイラプログラム。
【００９７】
（付記６）
前記複数の区間は、予め指定された１又は複数の区間以外の区間である
付記１乃至５のいずれか１つ記載のコンパイラプログラム。
【００９８】
（付記７）
動作する前記演算器の数を指定するための命令は、動作を開始させる命令及び動作を終了させる命令を含む
付記１乃至６のいずれか１つ記載のコンパイラプログラム。
【００９９】
（付記８）
コンピュータが、
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定し、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する、
処理を実行するコンパイル方法。
【０１００】
（付記９）
第１のコードにおける複数の区間の各々について、動作する演算器の数を決定する決定部と、
動作する前記演算器の数を指定するための命令を前記複数の区間の各々に追加し、第２のコードを生成する生成部と、
を有する情報処理装置。
【符号の説明】
【０１０１】
１  情報処理装置    １１  外部記憶装置
１２  メモリ    １３  ＣＰＵ
１３１  制御装置    １３２  演算器
１４  入力装置    １５  出力装置
１００  コンパイラ    １０１  ソースプログラム格納部
１０２  区間抽出部    １０３  区間データ格納部
１０４  命令スケジューリング部    １０５  スケジューリング結果格納部
１０６  最適化テーブル格納部    １０７  決定部
１０８  挿入部    １０９  最適化プログラム格納部
１１０  電力データ格納部    １１１  算出部
【図１】
0006528531.tif 000002
【図２】
0006528531.tif 000003
【図３】
0006528531.tif 000004
【図４】
0006528531.tif 000005
【図５】
0006528531.tif 000006
【図６】
0006528531.tif 000007
【図７】
0006528531.tif 000008
【図８】
0006528531.tif 000009
【図９】
0006528531.tif 000010
【図１０】
0006528531.tif 000011
【図１１】
0006528531.tif 000012
【図１２】
0006528531.tif 000013
【図１３】
0006528531.tif 000014
【図１４】
0006528531.tif 000015
【図１５】
0006528531.tif 000016
【図１６】
0006528531.tif 000017
【図１７】
0006528531.tif 000018
【図１８】
0006528531.tif 000019
【図１９】
0006528531.tif 000020
【図２０】
0006528531.tif 000021