(57)【特許請求の範囲】
【請求項１】
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶する情報記憶部と、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得する情報取得部と、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する動作周波数推測部と、を有する、
ことを特徴とする計算機。
【請求項２】
請求項１において、
前記動作周波数推測部は、前記情報記憶部に記憶された前記プログラム特徴情報のうち、各プログラム特徴情報に含まれる情報と、前記第１プログラム特徴情報に含まれる情報との一致率が最も高いプログラム特徴情報を、第２プログラム特徴情報として特定する、
ことを特徴とする計算機。
【請求項３】
請求項１において、
前記情報記憶部は、前記プログラム特徴情報を入力側教師データとし、前記最小周波数を出力側教師データとして、ニューラルネットワークに学習させることによって情報の記憶を行う、
ことを特徴とする計算機。
【請求項４】
請求項３において、
前記ニューラルネットワークは、前記最内ループ特徴情報に含まれる命令の種類及び前記他ループ特徴情報に含まれる命令の種類のそれぞれに対応する複数の入力ユニットと、前記複数の動作周波数のそれぞれに対応する複数の出力ユニットとを有し、
前記情報記憶部は、前記最内ループ特徴情報に含まれる命令の種類毎の数と、前記他ループ特徴情報に含まれる命令の種類毎の数とを前記複数の入力ユニットから入力し、前記複数の出力ユニットのうち、前記最小動作周波数に対応する出力ユニットに第１の情報を入力し、前記複数の出力ユニットのうち、前記最小動作周波数以外の動作周波数に対応する出力ユニットに第２の情報を入力する、
ことを特徴とする計算機。
【請求項５】
請求項１において、さらに、
サンプルプログラム内のループのうち、前記最内ループ以外のループに含まれる命令の種類毎の命令の数に、各ループの深さに応じた重み付け係数をそれぞれ乗算し、前記命令の種類毎に加算することにより、前記他ループ特徴情報を作成する他ループ特徴情報作成部と、を有する、
ことを特徴とする計算機。
【請求項６】
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶し、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得し、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する、
ことを特徴とする動作周波数決定方法。
【請求項７】
コンピュータに、
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶し、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得し、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する、
処理を実行させることを特徴とする動作周波数決定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機、動作周波数決定プログラム及び動作周波数決定方法に関する。
【背景技術】
【０００２】
近年、情報処理システムである並列計算機システム（以下、ＨＰＣ（Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）システムとも呼ぶ）では、高性能化を目的として、計算ノード数が１０万ノードを超えるシステムが開発されている。
【０００３】
上記のようなシステムにおいて、例えば、ＥＦＬＯＰＳ（Ｅｘａ  Ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｎｕｍｂｅｒ  Ｏｐｅｒａｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ）級の処理を行う場合、処理実行時における消費電力量が膨大になる（例えば、毎時５０（ＭＷ）以上）。そのため、システムの開発者（以下、単に開発者とも呼ぶ）は、各プログラムの実行時におけるシステムの省電力化を考慮した上で、システムの構築やジョブの実行制御等を行う必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１４−５２７２４８号公報
【特許文献２】特開２００８−０４０７３４号公報
【特許文献３】特開２００７−３０５１４８号公報
【特許文献４】特開２０１３−２４２６０４号公報
【特許文献５】特開２００４−１８２５１２号公報
【非特許文献】
【０００５】
【非特許文献１】Ｐａｋｉｎ，  Ｓ  ｅｔ．  ａｌ：“Ｅｎｅｒｇｙ  ｍｏｄｅｌｉｎｇ  ｏｆ  ｓｕｐｅｒｃｏｍｐｕｔｅｒｓ  ａｎｄ  ｌａｒｇｅ−ｓｃａｌｅ  ｓｃｉｅｎｔｉｆｉｃ  ａｐｐｌｉｃａｔｉｏｎ”
【非特許文献２】Ａｕｗｅｔｅｒ，  Ａ  ｅｔ．  ａｌ：“Ａ  Ｃａｓｅ  Ｓｔｕｄｙ  ｏｆ  Ｅｎｅｒｇｙ  Ａｗａｒｅ  Ｓｃｈｅｄｕｌｉｎｇ  ｏｎ  ＳｕｐｅｒＭＵＣ”
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のようなシステム（以下、対象システムとも呼ぶ）の省電力化を行うための手法として、例えば、ＤＶＦＳ（Ｄｙｎａｍｉｃ  Ｖｏｌｔａｇｅ  ａｎｄ  Ｆｒｅｑｕｅｎｃｙ  Ｓｃａｌｉｎｇ）機能を利用して消費電力を低減する方法が知られている。ＤＶＦＳは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の動作電圧やクロック周波数（以下、動作周波数とも呼ぶ）、または、その両方を制御する機能である。この機能を利用して動作電圧や動作周波数を制御することにより、ＣＰＵの消費電力を変化させることが可能になる。そのため、この機能を利用することにより、対象システム（例えば、分散メモリ型のＨＰＣシステム）の消費電力量の低減（省電化）を行うことが可能になる（以下、対象システムの省電化を管理するシステムを省電力管理システムとも呼ぶ）。
【０００７】
具体的には、以下のような手法によって、対象システムの省電化が行われる。システム構築者やシステム管理者（以下、これらを総称して管理者とも呼ぶ）は、対象システムの運用の準備段階として、複数のテストプログラム（以下、サンプルプログラムとも呼ぶ）を、対象システムのＣＰＵの動作周波数を変化させながら実行させ、各テストプログラムの実行に関する各種情報を取得する。そして、管理者は、取得した情報を省電力管理システムに入力する。その後、省電力管理システムは、取得情報からテストプログラム以外のプログラムの消費電力量を推測する推測式で使用する係数を求め、例えば、データベース等に記憶する。
【０００８】
一方、対象システムの運用時において、新たなプログラムを対象システムで実行（以下、初回実行とも呼ぶ）する場合、対象システムの利用者（以下、単に利用者とも呼ぶ）は、その実行が初回実行である旨の指定と、新たなプログラムを一意に識別できる利用者定義の識別情報の付加を行うことにより、ジョブ管理プログラムに対して新たなプログラム（新たなプログラムを含むジョブ）の実行を依頼する。そして、ジョブ管理システムは、ＣＰＵ周波数をシステムが定義する初回実行のための動作周波数（以下、デフォルト動作周波数とも呼ぶ）により、新たなプログラムを含むジョブの実行を行う。これにより、省電力管理システムは、新たなプログラムについて、テストプログラムの実行時に取得した情報と同種の情報を取得することが可能になる。
【０００９】
その後、利用者は、新たなプログラムを２回目以降に実行する場合、新たなプログラムの識別情報を付加してジョブ管理システムに実行を依頼する。この場合、省電力管理システムは、指定された識別情報をキーとしてデータベースから新たなプログラムの初回実行時において取得した各情報を抽出し、テストプログラムの実行時に取得した推測式の係数に基づき、新たなプログラムの実行に伴う消費電力量が最小になる動作周波数（以下、消費電力最小周波数とも呼ぶ）を推測する。そして、省電力管理システムは、推測した消費電力最小周波数をＣＰＵに設定して、新たなプログラム実行する。これにより、省電力管理システムは、新たなプログラムの実行を２回目以降に行う場合における消費電力量を抑えることが可能になる。
【００１０】
しかしながら、上記の方法では、プログラムが新たに作成された場合のみでなく、プログラムの主要部分の改修が行われる毎に、再度初回実行を行う必要がある。そのため、新たなプログラムの改修頻度によっては、初回実行の実行に伴う消費電力量によって、新たなプログラムの実行に伴う消費電力量の省電化を行うことができない場合がある。
【００１１】
そこで、一つの側面では、プログラムを実行する際の動作周波数を推測する動作周波数決定プログラム及び動作周波数決定方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
実施の形態の一つの態様によれば、複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶する情報記憶部と、前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得する情報取得部と、前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する動作周波数推測部と、を有する。
【発明の効果】
【００１３】
一つの側面によれば、プログラムを実行する際の動作周波数を推測する。
【図面の簡単な説明】
【００１４】
【図１】情報処理システム１０の全体構成を示す図である。
【図２】ＤＶＦＳによる省電力化の具体例を説明する図である。
【図３】ＤＶＦＳによる省電力化の具体例を説明する図である。
【図４】ＤＶＦＳによる省電力化の具体例を説明する図である。
【図５】ＤＶＦＳによる省電力化の具体例を説明する図である。
【図６】ＤＶＦＳによる省電力化の具体例を説明する図である。
【図７】管理ノード１のハードウエア構成を説明する図である。
【図８】図７の管理ノード１の機能ブロック図である。
【図９】第１の実施の形態における動作周波数決定処理の概略を説明するフローチャートである。
【図１０】第１の実施の形態における動作周波数決定処理の概略を説明するフローチャートである。
【図１１】第１の実施の形態における動作周波数決定処理の概略を説明する図である。
【図１２】第１の実施の形態における動作周波数決定処理の概略を説明する図である。
【図１３】第１の実施の形態における動作周波数決定処理の概略を説明する図である。
【図１４】第１の実施の形態における動作周波数決定処理の概略を説明する図である。
【図１５】第１の実施の形態における動作周波数決定処理の詳細を説明するフローチャートである。
【図１６】第１の実施の形態における動作周波数決定処理の詳細を説明するフローチャートである。
【図１７】第１の実施の形態における動作周波数決定処理の詳細を説明するフローチャートである。
【図１８】第１の実施の形態における動作周波数決定処理の詳細を説明するフローチャートである。
【図１９】命令情報１３４の具体例を説明する図である。
【図２０】命令情報１３４の具体例を説明する図である。
【図２１】命令情報１３４の具体例を説明する図である。
【図２２】命令情報１３４の具体例を説明する図である。
【図２３】最内ループ特徴情報１３１の具体例を説明する図である。
【図２４】他ループ特徴情報１３２の具体例を説明する図である。
【図２５】周波数情報１３３の具体例を説明する図である。
【図２６】対応情報１４２の具体例を説明する図である。
【図２７】第１命令情報１３４ａの具体例を説明する図である。
【図２８】第１最内ループ特徴情報１３１ａの具体例を説明する図である。
【図２９】第１他ループ特徴情報１３２ａの具体例を説明する図である。
【図３０】第１対応情報１４２ａの具体例を説明する図である。
【図３１】第２の実施の形態における他ループ特徴情報１３２の具体例を説明する図である。
【図３２】第３の実施の形態におけるニューラルネットワークの具体例を説明する図である。
【発明を実施するための形態】
【００１５】
［情報処理システムの構成］
図１は、情報処理システム１０の全体構成を示す図である。図１に示す情報処理システム１０（以下、対象システム１０とも呼ぶ）は、管理ノード１（以下、計算機１または情報処理装置１とも呼ぶ）と、計算ノード群２と、作業端末１１とを有している。なお、情報処理システム１０は、例えば、ＨＰＣシステムである。
【００１６】
計算ノード群２は、例えば、物理マシンによって構成される。各計算ノードは、例えば、それぞれＣＰＵやメモリ等の物理リソースを有している。
【００１７】
管理ノード１は、計算ノード群２において新たなプログラム（新たに作成または追加されたプログラムや改修されたプログラム）の実行を開始する前に、新たなプログラムの実行に伴う消費電力最小周波数を決定する処理を行う。また、管理ノード１は、各プログラムの動作周波数を決定するための処理を行うために必要な情報を記憶する記憶部１ａを有する。なお、以下、管理ノード１には、省電力管理システムやジョブ管理システムが構築されているものとして説明を行う。
【００１８】
作業端末１１は、利用者、管理者または開発者等が管理ノード１に処理の実行の指示を行うための端末である。作業端末１１は、例えば、管理ノード１や計算ノード群２が配備されているデータセンター（図示しない）と異なる場所に設置されるものであってもよい。
【００１９】
［ＤＶＦＳ機能を利用した省電力化の具体例］
次に、ＤＶＦＳ機能を利用した省電力化の具体例について説明を行う。図２から図６は、ＤＶＦＳによる省電力化の具体例を説明する図である。なお、図２から図４の内容は、例えば、非特許文献１の内容に関連する。また、図５及び図６の内容は、例えば、非特許文献２の内容に関連する。
【００２０】
初めに、テストプログラムの動作周波数と、テストプログラムの実行に伴う消費電力量の関係について説明を行う。図２から図４は、テストプログラムの実行時における動作周波数毎の消費電力量の具体例である。具体的に、図２から図４は、それぞれテストプログラムＡ、Ｂ及びＣをそれぞれ複数の動作周波数で実行した場合を説明する図である。なお、図２から図４に示すグラフにおいて、横軸は、動作周波数（ＧＨｚ）を示しており、縦軸は、消費電力量（Ｗｈ）を示している。
【００２１】
図２に示すように、テストプログラムＡの実行に伴う消費電力量は、動作周波数が大きくなるにしたがって大きくなる。そのため、図２に示す例において、テストプログラムＡの実行に伴う消費電力量は、動作周波数が「１．２（ＧＨｚ）」であるときに最小になる。また、図３に示すように、テストプログラムＢの実行に伴う消費電力量は、動作周波数が大きくなるにしたがって小さくなる。そのため、図３に示す例において、テストプログラムＢの実行に伴う消費電力量は、動作周波数が「２．１（ＧＨｚ）」であるときに最小になる。一方、図４に示すように、テストプログラムＣの実行に伴う消費電力量は、動作周波数が「２．０（ＧＨｚ）」であるときに最小になる。
【００２２】
すなわち、プログラムの実行時における動作周波数を下げた場合、一般的に、プログラムの実行時間が長くなる。そのため、プログラムの実行に伴う消費電力量（単位時間当たりの消費電力とプログラムの実行時間との積）は、動作周波数を下げることによっては必ずしも減少しない。したがって、開発者は、新たなプログラム（以下、第１プログラムとも呼ぶ）を実行する動作周波数を単純に下げただけでは、プログラムの実行に伴う消費電力量を最小にすることができない場合がある。または、図３や図４に示すように、消費電力量としては逆効果になることがある。
【００２３】
そこで、省電力管理システムは、図５及び図６に示すように、例えば、対象システム１０がテストプログラムを実行した場合における動作周波数に対する消費電力量の傾向を把握し、第１プログラムの消費電力最小周波数を推測する。
【００２４】
具体的に、消費電力最小周波数の推測は、対象システム１０の構築時等の準備段階と、対象システム１０の運用時に動作が分かれる。対象システム１０の準備段階において、管理者は、図５に示すように、予め用意された複数のテストプログラムを、複数の動作周波数において計算ノード群２のＣＰＵに実行させる（図５の（１））。複数の動作周波数は、例えば、計算ノード群２のＣＰＵがサポートする複数の動作周波数である。
【００２５】
この場合、管理者は、例えば、各テストプログラムの実行時における単位時間あたりの実行命令数（ＧＩＰＳ：Ｇｉｇａ  Ｉｎｓｔｒａｃｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ）と、単位時間あたりのメモリバンド幅（ＧＢＳ：Ｇｉｇａ  Ｂｉｔｅｓ  ｐｅｒ  Ｓｅｃｏｎｄ）と、実行した命令あたりの平均サイクル数（ＣＩＰＳ：Ｃｙｃｌｅｓ  Ｐｅｒ  Ｉｎｓｔｒｕｃｒｉｏｎ）と、単位時間あたりの消費電力と、実行時間とを測定する。そして、管理者は、測定した情報をテストプログラム毎に対応させ、記憶部１ａに記憶する（図５の（２））。
【００２６】
その後、管理者は、図５の（２）において記憶した各情報に基づき、動作周波数毎に、対象システムにおいて第１プログラムを実行した場合における消費電力量を推測するための式（以下、単に推測式とも呼ぶ）の係数を決定する（図５（３））。この推測式は、例えば、対象システム１０の構築時に、管理者によって決定されるものであってよい。
【００２７】
一方、対象システム１０の運用時において、利用者は、図６に示すように、計算ノード群２において第１プログラムの初回実行を行う（図６の（４））。ここで、利用者は、今回の第１プログラムの実行が初回実行である旨の指定と、第１プログラムをその更新状態まで含めて一意に特定できる情報を付加することにより、ジョブ管理システムに実行を依頼する。なお、利用者は、この場合、システムデフォルトとして事前に定義された動作周波数を使用することにより、第１プログラムの初回実行を行う。
【００２８】
そして、省電力管理システムは、第１プログラムの初回実行に伴い、例えば、第１プログラムの実行時における単位時間あたりの実行命令数（ＧＩＰＳ）と、単位時間あたりのメモリバンド幅（ＧＢＳ）と、実行した命令あたりの平均サイクル数（ＣＩＰＳ）と、単位時間あたりの消費電力と、実行時間とを測定する。また、省電力管理システムは、測定された情報を、第1プログラムを識別する情報を検索キーとして記憶部１ａに記録する。この測定された情報は、２回目以降の実行の際、第１プログラムの実行に伴う消費電力最小周波数を決定するために利用される。すなわち、利用者が対象システム１０に対して第１プログラムの２回目以降の実行の依頼する場合、利用者は、既に測定されている情報を利用するために、第１プログラムの識別情報を付加して実行の依頼を行う。なお、第１プログラムの識別情報等の情報は、利用者が管理するものであってよい。
【００２９】
続いて、管理ノード１の省電力管理システムは、図６の（４）で取得した情報と、図５の（３）で決定した推測式の係数に基づき、第１プログラムを各動作周波数で実行した場合の消費電力量を推測する（図６（５））。そして、管理ノード１の省電力管理システムは、図６の（５）で推測した消費電力量のうち、最小の消費電力量に対応する動作周波数を決定する（図６（６））。
【００３０】
これにより、省電力管理システムは、第１プログラムを複数の動作周波数において動作させることなく、第１プログラムの消費電力最小周波数を推測することが可能になる。そのため、対象システム１０は、第１プログラムの２回目以降の実行を行う際に、消費電力量を抑えることが可能になる。
【００３１】
しかしながら、上記の方法の場合、利用者は、プログラムが新たに作成された場合のみでなく、プログラムの改修が行われる毎に初回実行を行う必要がある。また、初回実行を行うプログラムには、実行に膨大な時間を有するプログラムが存在する場合がある。そのため、プログラムの改修頻度やプログラムの実行時間等によっては、初回実行時の消費電力量を無視することができない場合がある。また、各プログラムの初回実行が行われたか否かに関する情報や、第１プログラムを特定するための識別情報は、利用者が生成や管理を行う場合がある。そのため、管理者は、利用者の負担増加や、利用者による作業ミスの発生の可能性等を考慮する必要がある。
【００３２】
さらに、新たなプログラムの初回実行を行う場合、新たなプログラムの消費電力最小周波数の推測ができない。そのため、利用者は、対象システム１０のデフォルト動作周波数によって、新たなプログラムを実行する。したがって、対象システムのデフォルト動作周波数と、新たなプログラムの消費電力最小周波数とが異なる場合、新たなプログラムの２回目以降の実行に伴う消費電力量を最小にすることができない場合がある。
【００３３】
そこで、本実施の形態では、対象システム１０の運用段階において、第１プログラムの初回実行を行うことなく、第１プログラムの消費電力最小周波数の推測を行うことを可能とする。そのため、本実施の形態では、第１プログラムの初回実行が行われたか否かを示す情報や、第１プログラムと特定する識別情報等の管理を行う必要がなくなる。
【００３４】
具体的に、本実施の形態における管理ノード１の省電力管理システムは、事前準備として、各テストプログラムの静的解析を行い、第１プログラムの電力消費において支配的なループ（例えば、第１プログラムの実行に伴って、第１プログラムの所定以上の割合の電力消費量を消費するループ）を検出し、そのループに含まれる命令に関する情報（以下、プログラム特徴情報とも呼ぶ）と、各テストプログラムを様々な周波数で実行させ、消費電力最小周波数との対応情報を作成する。
【００３５】
一方、対象システム１０の運用時において、利用者が第１プログラムの実行を指示した場合、本実施の形態における管理ノード１の省電力管理システムは、第１プログラムの静的解析を行って、事前準備でテストプログラムから抽出した同種のプログラム特徴情報を抽出する。そして、上記テストプログラムで抽出した対応情報に含まれるプログラム特徴情報のうち、第１プログラムのプログラム特徴情報（以下、第１プログラム特徴情報とも呼ぶ）と最も近いプログラム特徴情報に対応する動作周波数を、第１プログラムの消費電力最小周波数として推測する。
【００３６】
すなわち、プログラムの実行に伴う対象システム全体の消費電力量は、そのプログラムを並列ジョブとして実行する計算ノード群の消費電力量の総和である。そのため、各計算ノードのプログラムの実行に伴うＣＰＵの消費電力量は、プログラム実行時におけるＣＰＵの動作によって定まる。したがって、管理ノード１は、テストプログラムの記述のうちのＣＰＵの動作に関する記述（テストプログラム内の消費電力量の支配ループに含まれる命令に関する記述）を解析し、その解析結果であるプログラム特徴情報とテストプログラムの消費電力最小周波数との対応情報を作成する。
【００３７】
一方、管理ノード１は、対象システム１０の運用時において、第１プログラムを実行する前に、第１プログラムの記述のうちのＣＰＵの動作に関する記述（第１プログラム内の消費電力量の支配ループに含まれる命令に関する記述）を解析し、その解析結果である第１プログラム特徴情報を取得する。そして、管理ノード１は、テストプログラムのうち、取得した第１プログラム情報の内容に最も近いプログラム特徴情報を有するテストプログラムを特定する。その後、管理ノード１は、特定したテストプログラムの消費電力最小周波数を、第１プログラムの消費電力最小周波数として推測する。
【００３８】
これにより、管理ノード１は、初回実行を行うことなく、第１プログラムの消費電力最小周波数を決定することが可能になる。そのため、利用者は、初回実行を行うことなく、第１プログラムを消費電力最小周波数において実行させることが可能になる。
【００３９】
なお、対象システム１０（例えば、ＨＰＣシステム）で動作するプログラムは、消費電力量を支配するループが多重ループになる場合が多い。また、多重ループにおける計算に関する記述は、最内ループに記述されていることが多い。そのため、多重ループに含まれるループのうち消費電力量が最も大きいループは、多くの場合、最内ループになる。
【００４０】
また、消費電力量を支配する多重ループのうち、最内ループ以外のループ（以下、他ループとも呼ぶ）では、計算する配列のアドレスを決定や、分散並列プログラムにおける他の計算ノードとの計算結果の通信や、Ｉ／Ｏ処理等が行われる。これらの処理が実行される間、処理の待ち時間が発生するため、一般的に、プログラムの実行に伴う消費電力量は低下する。
【００４１】
すなわち、上記の最内ループは、電力を多く消費するループであり、上記の他ループは、最内ループの電力消費の間隔（リズム）を作り出し、プログラム毎の消費電力量の推移を特徴付けるものとして解釈できる。
【００４２】
このため、以下の説明では、消費電力量を支配するループは、最内ループと、他ループとからなるものとして説明を行う。また、プログラム特徴情報は、最内ループに関する特徴情報である最内ループの特徴情報と、他ループに関する特徴情報である他ループの特徴情報とを含むものとして説明を行う。なお、上記のように、最内ループと他ループとを区別しないものであってもよい。
【００４３】
［管理ノードのハードウエア構成］
次に、管理ノード１のハードウエア構成について説明する。図７は、管理ノード１のハードウエア構成を説明する図である。
【００４４】
管理ノード１は、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体（ストレージ）１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００４５】
記憶媒体１０４は、記憶媒体１０４内のプログラム格納領域（図示しない）に、第１プログラムを実行する際の動作周波数を決定する処理（以下、動作周波数決定処理とも呼ぶ）を行うためのプログラム１１０を記憶する。
【００４６】
ＣＰＵ１０１は、図７に示すように、プログラム１１０の実行時に、プログラム１１０を記憶媒体１０４からメモリ１０２にロードし、プログラム１１０と協働して動作周波数決定処理を行う。
【００４７】
記憶媒体１０４は、例えば、動作周波数決定処理を行う際に用いられる情報を記憶する情報格納領域１３０（以下、情報記憶部１３０とも呼ぶ）を有する。また、外部インターフェース１０３は、計算ノード群２や作業端末１１と通信を行う。なお、図１で説明した記憶部１ａは、記憶媒体１０４に対応するものであってよい。
【００４８】
[管理ノードのソフトウエア構成]
次に、管理ノード１のソフトウエア構成について説明する。図８は、図７の管理ノード１の機能ブロック図である。ＣＰＵ１０１は、プログラム１１０と協働することにより、特徴情報管理部１１１と、特徴情報取得部１１２（以下、単に情報取得部１１２とも呼ぶ）と、動作周波数推測部１１３として動作する。また、ＣＰＵ１０１は、プログラム１１０と協働することにより、特徴情報作成部１１４（以下、他ループ特徴情報作成部１１４とも呼ぶ）と、開発者通知部１１５として動作する。
【００４９】
また、図８に示すように、情報格納領域１３０には、最内ループ特徴情報１３１と、他ループ特徴情報１３２と、周波数情報１３３（以下、最小動作周波数１３３とも呼ぶ）と、命令情報１３４と、重み付け情報１３５とが記憶されている。なお、以下、互いに対応する最内ループ特徴情報１３１と他ループ特徴情報１３２とを合わせてプログラム特徴情報１４１とも呼ぶ。また、互いに対応する最内ループ特徴情報１３１と他ループ特徴情報１３２と周波数情報１３３とを合わせて対応情報１４２とも呼ぶ。
【００５０】
特徴情報管理部１１１は、複数のテストプログラムのそれぞれを複数の動作周波数において実行した結果を参照する。複数のテストプログラムを実行した結果は、例えば、情報格納領域１３０に記憶されるものであってよい。そして、特徴情報管理部１１１は、テストプログラム内の各ループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数（出現回数）を含む最内ループ特徴情報１３１を取得する。また、特徴情報管理部１１１は、テストプログラム内の各ループに含まれる命令のうち、最内ループ以外のループに含まれる命令の種類毎の数（出現回数）を含む他ループ特徴情報１３２を取得する。
【００５１】
さらに、特徴情報管理部１１１は、テストプログラムを動作させた複数の動作周波数のうち、テストプログラムを実行した際の消費電力量が最小であった動作周波数を示す周波数情報１３３を取得する。そして、特徴情報管理部１１１は、最内ループ特徴情報１３１と、他ループ特徴情報１３２と、周波数情報１３３とを複数のテストプログラム毎に対応付けた対応情報１４２を作成し、情報格納領域１３０に記憶する。
【００５２】
なお、特徴情報管理部１１１は、例えば、 テストプログラム内のループに含まれるＣＰＵ命令に関する情報である命令情報１３４を作成し、作成した命令情報１３４に基づき、最内ループ特徴情報１３１及び他ループ特徴情報１３２を作成する。最内ループ特徴情報１３１、他ループ特徴情報１３２、周波数情報１３３及び命令情報１３４の具体例については後述する。
【００５３】
特徴情報取得部１１２は、第１プログラムの実行前において、第１プログラムに対応する最内ループ特徴情報（以下、第１最内ループ特徴情報１３１ａとも呼ぶ）及び他ループ特徴情報（以下、第１他ループ特徴情報１３２ａとも呼ぶ）を取得する。なお、以下、第１最内ループ特徴情報１３１ａと第１他ループ特徴情報１３２ａとを合わせて第１プログラム特徴情報１４１ａとも呼ぶ。
【００５４】
動作周波数推測部１１３は、情報格納領域１３０に記憶されたプログラム特徴情報１４１のうち、第１プログラム特徴情報１４１ａに含まれる情報と最も近い情報を含むプログラム特徴情報（以下、第２プログラム特徴情報１４１ｂとも呼ぶ）を特定する。そして、動作周波数推測部１１３は、情報格納領域１３０に記憶された周波数情報１３３のうち、第２プログラム特徴情報１４１ｂと対応する周波数情報を、第１プログラムを実行する際の消費電力量が最小である周波数情報（以下、第１周波数情報１３３ａまたは第１動作周波数１３３ａとも呼ぶ）として推測する。
【００５５】
なお、動作周波数推測部１１３は、情報格納領域１３０に記憶されたプログラム特徴情報１４１のうち、第１プログラム特徴情報１４１ａに含まれる情報との一致率が所定の閾値よりも大きい情報が存在しない場合、第１周波数情報１３３ａの推測を中止するものであってよい。
【００５６】
特徴情報作成部１１４は、テストプログラム内のループのうち、最内ループ以外の各ループに含まれる命令の種類毎の命令の数に、各ループの深さに応じた重み付け情報１３５をそれぞれ乗算する。そして、特徴情報作成部１１４は、重み付け情報１３５を乗算して算出した値に、命令の種類毎に加算することにより、他ループ特徴情報１３２を作成する。
【００５７】
開発者通知部１１５は、情報格納領域１３０に記憶されたプログラム特徴情報１４１に、第２プログラム特徴情報１４１ｂが存在しない場合に、その旨を開発者に通知する。
【００５８】
[第１の実施の形態の概略］
次に、第１の実施の形態の概略について説明する。図９及び図１０は、第１の実施の形態における動作周波数決定処理の概略を説明するフローチャートである。また、図１１から図１４は、第１の実施の形態における動作周波数決定処理の概略を説明する図である。図１１から図１４を参照しながら、図９及び図１０の動作周波数決定処理について説明を行う。
【００５９】
[情報記憶処理の概略］
初めに、動作周波数決定処理のうち、プログラム特徴情報１４１を情報格納領域１３０に記憶する処理（以下、情報記憶処理とも呼ぶ）について説明を行う。
【００６０】
管理ノード１は、図９に示すように、テストプログラムの実行タイミングまで待機する（Ｓ１のＮＯ）。テストプログラムの実行タイミングとは、例えば、新たなシステムが構築されたタイミングであってよい。
【００６１】
そして、テストプログラムの実行タイミングになった場合（Ｓ１のＹＥＳ）、管理者は、対象システム１０において、複数の動作周波数によるテストプログラムの実行を行う。そして、管理ノード１は、テストプログラム内の各ループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報１３１を、テストプログラム毎に取得する（Ｓ２）。また、管理ノード１は、この場合、テストプログラム内の各ループに含まれる命令のうち、最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報１３２を、テストプログラム毎に取得する（Ｓ３）。
【００６２】
さらに、管理ノード１は、この場合、テストプログラムの実行を行った複数の動作周波数のうち、テストプログラムを実行した際の消費電力量が最小であった動作周波数を示す周波数情報１３３を、テストプログラム毎に取得する（Ｓ４）。そして、管理ノード１は、図１１に示すように、最内ループ特徴情報１３１及び他ループ特徴情報１３２（プログラム特徴情報１４１）と周波数情報１３３とを、テストプログラム毎に対応付けて作成した対応情報１４２を情報格納領域１３０に記憶する（Ｓ５）。
【００６３】
すなわち、プログラム（例えば、テストプログラムや第１プログラム）の実行に伴うシステム全体の消費電力量は、プログラムの実行に伴うＣＰＵの消費電力量に依存する。そして、プログラムの実行に伴うＣＰＵの消費電力量は、プログラム実行時におけるＣＰＵの動作によって決まる。そのため、管理ノード１は、テストプログラム内の各ループに含まれる命令に関する記述を解析し、その解析結果であるプログラム特徴情報１４１とテストプログラムの消費電力最小周波数である周波数情報１３３とを対応させて対応情報１４２を作成する。
【００６４】
これにより、管理ノード１は、後述するように、第１プログラムのプログラム特徴情報１４１ａと、情報格納領域１３０に記憶されたプログラム特徴情報１４１とを比較することが可能になる。
【００６５】
なお、第１プログラムが多重化配列を含む場合、第１プログラム内のループが多重化する。そして、第１プログラムの実行に伴って実行される演算は、最も深さが深いループである最内ループに集中する。そのため、管理ノード１は、Ｓ２の処理において、最内ループに関する情報である最内ループ特徴情報１３１の取得を行う。
【００６６】
管理ノード１は、Ｓ３の処理において、最内ループ特徴情報１３１のみでなく、他ループに関する情報である他ループ特徴情報１３２の取得を行う。そして、管理ノード１は、Ｓ５の処理において、最内ループ特徴情報１３１のみでなく、他ループ特徴情報１３２を周波数情報１３３と対応させることにより、対応情報１４２を作成する。
【００６７】
[動作周波数推測処理の概略］
次に、動作周波数決定処理のうち、第１プログラムを実行する際に消費電力量を最小にする動作周波数を推測する処理（以下、動作周波数推測処理とも呼ぶ）について説明を行う。
【００６８】
管理ノード１は、図１０に示すように、第１プログラムの実行タイミングまで待機する（Ｓ１１のＮＯ）。第１プログラムの実行タイミングとは、例えば、計算ノード群２において第１プログラムが実行される前のタイミングである。
【００６９】
そして、第１プログラムの実行タイミングになった場合（Ｓ１１のＹＥＳ）、管理ノード１は、第１プログラムの実行前において、第１プログラムに対応するプログラム特徴情報である第１プログラム特徴情報１４１ａを取得する（Ｓ１２）。
【００７０】
さらに、管理ノード１は、情報格納領域１３０に記憶されたプログラム特徴情報１４１のうち、Ｓ１２で取得した第１プログラム特徴情報１４１ａに含まれる情報と最も近い情報を含む第２プログラム特徴情報１４１ｂを特定する（Ｓ１３）。そして、管理ノード１は、図１２に示すように、情報格納領域１３０に記憶された周波数情報１３３のうち、Ｓ１３で特定した第２プログラム特徴情報１４１ｂと対応する周波数情報１３３を、第１周波数情報１３３ａとして推測する（Ｓ１４）。
【００７１】
すなわち、管理ノード１は、第１プログラムが作成された際に、第１プログラム内の各ループに含まれる命令に関する記述を解析し、その解析結果である第１プログラム特徴情報１４１ａを取得する。その後、管理ノード１は、テストプログラムのうち、第１プログラム特徴情報１４１ａの内容に最も近いプログラム特徴情報１４１に対応するテストプログラムを特定する。そして、管理ノード１は、特定したテストプログラムに対応する周波数情報１３３を、第１プログラムの第１周波数情報１３３ａとして推測する。これにより、管理ノード１は、計算ノード群２において第１プログラムの初回実行を行うことなく、第１プログラムの第１周波数情報１３３ａを推測することが可能になる。
【００７２】
このように、管理ノード１は、プログラム特徴情報１４１（最内ループ特徴情報１３１及び他ループ特徴情報１３２）と周波数情報１３３とを、複数のテストプログラム毎に対応付けて情報格納領域１３０に記憶する特徴情報管理部１１１を有する。また、管理ノード１は、第１プログラムの実行前において、第１プログラムに対応するプログラム特徴情報である第１プログラム特徴情報１４１ａを取得する情報取得部１１２を有する。さらに、管理ノード１は、プログラム特徴情報１４１のうち、第１プログラム特徴情報１４１ａに含まれる情報と最も近い情報を含む第２プログラム特徴情報１４１ｂと対応する周波数情報１３３を、第１プログラムの第１周波数情報１３３ａとして推測する動作周波数推測部１１３と、を有する。
【００７３】
これにより、開発者は、第１プログラムの初回実行を行うことなく、第１プログラムの消費電力最小周波数（第１周波数情報１３３ａ）を決定することが可能になる。
【００７４】
[プログラム実行時の条件が第１周波数情報の推測結果に与える影響］
ここで、各プログラム実行時の条件が第１周波数情報１３３ａの推測結果に与える影響について説明を行う。
【００７５】
上記のように、第１プログラムの初回実行を行うことなく第１周波数情報１３３ａの推測を行う場合（第１プログラムの静的解析を行う場合）、推測される第１周波数情報１３３ａは、第１プログラムの実行時の条件等によって、推測結果が変わらないものである必要がある。具体的に、第１周波数情報１３３ａは、例えば、第１プログラムの実行時において用いられる配列のサイズ（以下、単に配列サイズとも呼ぶ）の大きさに依らず、推測結果が同じになる必要がある。
【００７６】
この点、第１プログラムの配列サイズがプログラムを実行するＣＰＵのキャッシュサイズよりも大きく、プログラムの実行時においてページングが発生するページングサイズよりも小さい場合、第１周波数情報１３３ａの推測結果、すなわち、消費電力最小周波数は、配列サイズによってほぼ変わらない。
【００７７】
すなわち、第１プログラムの配列サイズがページングサイズよりも大きい場合、第１プログラムの実行時におけるページングの発生頻度によって、第１プログラムの実行に伴う消費電力量は変化する。これは、ページングのためのディスクの回転待ちやシーク動作待ち等が、タイミングにより処理時間が変化するためである。また、第１プログラムの配列サイズがＣＰＵのキャシュサイズよりも小さい場合、ＣＰＵのキャッシュメモリに対するヒットミスの発生頻度は、配列データの演算ではヒットミスは基本的に発生しないが、ＯＳ等の第１プログラム以外のプログラム（以下、他のプログラムとも呼ぶ）の動作の影響によりヒットミスが発生する。また、他のプログラムによるヒットミスは、演算ループのサイクルに比べ低頻度で発生するため、測定の度に消費電力量が変化するなどの影響を与える。したがって、配列サイズがページングサイズよりも大きい場合、または、配列サイズがＣＰＵのキャシュサイズよりも小さい場合、第１周波数情報１３３ａの推測結果、すなわち、消費電力最小周波数は、測定のタイミングによって変化する可能性がある。
【００７８】
一方、第１プログラムの配列サイズがＣＰＵのキャッシュサイズよりも大きく、かつ、ページングサイズよりも小さい場合、最内ループの配列データの演算処理において、配単位時間に発生するキャッシュメモリのヒットミスの回数は高頻度であり、かつ、単位時間当たりの発生回数は、ほぼ一定になる。また、ヒットミスは、ＯＳなど他のプロセスの影響でも発生するが、配列データの演算ループにおけるヒットミスより低頻度である。そのため、この場合、第１周波数情報１３３ａの推測結果、すなわち、消費電力最小周波数は、第１プログラムの配列サイズに影響を受けない。以下、ＣＰＵのキャッシュサイズよりも大きく、かつ、ページングサイズよりも小さい範囲内において、配列サイズの変化させた場合のプログラムの実行時における動作周波数と消費電力量との関係について説明を行う。
【００７９】
なお、分散メモリ型のＨＰＣシステムでは、一般的に、演算する配列データのサイズは、キャッシュよりも大きい。また、分散メモリ型のＨＰＣシステムでは、一般的に、性能低下を防ぐため、ページングが発生しないように、分散する計算ノード数を決定される。
【００８０】
図１３及び図１４は、ＣＰＵのキャッシュサイズよりも大きく、かつ、ページングサイズよりも小さい範囲内において、配列サイズを変化させた場合のプログラムの実行時における動作周波数と消費電力量との関係を説明する図である。図１３及び図１４に示すグラフにおいて、横軸は、動作周波数（ＧＨｚ）を示しており、縦軸は、動作周波数が「２．０（ＧＨｚ）」である場合における消費電力量を「１．０」とした場合の相対消費電力量を示している。なお、図１３は、図２で説明したテストプログラムＡの配列サイズを変化させた場合における動作周波数と相対消費電力量との関係を説明する図である。また、図１４は、図３で説明したテストプログラムＢの配列サイズを変化させた場合における動作周波数と相対消費電力量との関係を説明する図である。
【００８１】
図１３及び図１４に示すように、各図に示す２つの折れ線グラフが示す相対消費電力量は、対応する動作周波数の値に依らず概ね近い値を取る。例えば、図１３に示す例において、図１３に示す２つの折れ線グラフが示す消費電力最小周波数は、ともに「１．２（ＧＨｚ）」である。
【００８２】
したがって、第１プログラムの利用者は、配列サイズがプログラムを実行するＣＰＵのキャッシュサイズよりも大きく、プログラムの実行時においてページングが発生するページングサイズよりも小さくなるように、分割するノード数を調整する必要がある。
【００８３】
[第１の実施の形態の詳細]
次に、第１の実施の形態の詳細について説明する。図１５から図１８は、第１の実施の形態における動作周波数決定処理の詳細を説明するフローチャートである。また、図１９から図３０は、第１の実施の形態における動作周波数決定処理の詳細を説明する図である。図１９から図３０を参照しながら、図１５から図１８の動作周波数決定処理を説明する。
【００８４】
[情報記憶処理の詳細]
初めに、情報記憶処理の詳細について説明を行う。図１５は、第１の実施の形態における情報記憶処理の詳細を説明するフローチャートである。
【００８５】
特徴情報管理部１１１は、図１５に示すように、テストプログラムの実行タイミングまで待機する（Ｓ２１のＮＯ）。そして、テストプログラムの実行タイミングになった場合（Ｓ２１のＹＥＳ）、管理者は、対象システム１０において、複数の動作周波数によるテストプログラムの実行を行う。そして、特徴情報管理部１１１は、テストプログラム内のループに含まれる各命令に関する情報である命令情報１３４をテストプログラム毎に作成する（Ｓ２２）。以下、Ｓ２２の処理の詳細について説明を行う。
【００８６】
[Ｓ２２の処理の詳細]
図１７は、Ｓ２２の処理の詳細を説明するフローチャートである。特徴情報管理部１１１は、 テストプログラム内のループに含まれる各命令のアドレス、命令クラス及びオペランドに対応する値に基づき、テストプログラム毎の命令情報１３４を作成する（Ｓ４１）。すなわち、特徴情報管理部１１１は、最内ループ特徴情報１３１及び他ループ特徴情報１３２を作成する前に、最内ループ特徴情報１３１及び他ループ特徴情報１３２を作成する際に参照する必要がある情報を含む命令情報１３４を作成する。なお、特徴情報管理部１１１は、例えば、テストプログラムのオブジェクトプログラムに対して逆アセンブルを行うことにより、命令情報１３４を作成するために必要な情報（テストプログラムに含まれる各命令のアドレス、命令クラス及びオペランドに対応する情報）を取得する。以下、Ｓ４１の処理において作成された命令情報１３４の具体例について説明を行う。
【００８７】
[命令情報の具体例]
図１９から図２２は、命令情報１３４の具体例を説明する図である。なお、図１９から図２２は、Ｓ４１の処理においてテストプログラム毎に作成された命令情報１３４のうち、ある１つのテストプログラムに関する命令情報１３４を説明する図である。
【００８８】
図１９に示す命令情報１３４は、命令情報１３４に含まれる各情報を識別する「項番」と、テストプログラムに含まれる各命令の格納位置を示す「アドレス」と、各命令の種類を示す「命令クラス」とを項目として有する。また、図１９に示す命令情報１３４は、各命令を実行する際に用いる情報を格納する「オペランド」と、テストプログラム内における各命令が含まれるループの深さを格納する「ループ深さ」を項目として有する。なお、図１９の命令情報１３４における「ループ深さ」には、初期値である「０」が設定されている。
【００８９】
「命令クラス」には、例えば、ＣＰＵの分岐命令または条件付分岐命令に対応する「０００」、ＣＰＵのコール命令に対応する「０１０」が設定される。また、「命令クラス」には、例えば、レジスタアクセスを伴うＣＰＵのコピー命令、論理演算命令、整数加減算命令、整数掛算命令、整数割算命令にそれぞれ対応する「０２０」、「０３０」、「０４０」、「０５０」、「０６０」が設定される。また、「命令クラス」には、例えば、メモリアクセスを伴うＣＰＵのコピー命令、論理演算命令、整数加減算命令、整数掛算命令、整数割算命令にそれぞれ対応する「０２１」、「０３１」、「０４１」、「０５１」、「０６１」が設定される。
【００９０】
同様に、「命令クラス」には、例えば、レジスタアクセスを伴うＦＰＵ（Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｕｎｉｔ）のコピー命令、論理演算命令、浮動小数点加減算命令、浮動小数点掛算命令、浮動小数点割算命令にそれぞれ対応する「１２０」、「１３０」、「１４０」、「１５０」、「１６０」が設定される。また、「命令クラス」には、例えば、メモリアクセスを伴うＦＰＵのコピー命令、論理演算命令、浮動小数点加減算命令、浮動小数点掛算命令、浮動小数点割算命令にそれぞれ対応する「１２１」、「１３１」、「１４１」、「１５１」、「１６１」が設定される。
【００９１】
さらに、「命令クラス」には、例えば、レジスタアクセスを伴うＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）機構のコピー命令、論理演算命令、ＳＩＭＤ加減算命令、ＳＩＭＤ掛算命令、ＳＩＭＤ割算命令、ＳＩＭＤ複合命令にそれぞれ対応する「２２０」、「２３０」、「２４０」、「２５０」、「２６０」、「２７０」が設定される。また、「命令クラス」には、例えば、メモリアクセスを伴うＳＩＭＤ機構のコピー命令、ＳＩＭＤ論理演算命令、ＳＩＭＤ加減算命令、ＳＩＭＤ掛算命令、ＳＩＭＤ割算命令、ＳＩＭＤ複合命令にそれぞれ対応する「２２１」、「２３１」、「２４１」、「２５１」、「２６１」、「２７１」が設定される。
【００９２】
すなわち、テストプログラムに含まれる各命令の実行に伴う消費電力量は、各命令の実行時に動作するＣＰＵ等の部位の規模や構造の違いによって定まる。具体的に、例えば、加減算と掛け算とでは、動作する回路の規模（例えば、トランジスタ数）の違いから、掛け算を実行した場合の消費電力量の方が、加減算を実行した場合の消費電力量よりも大きい。また、例えば、整数演算と浮動小数点演算とでは、浮動小数点演算を実行した場合の消費電力量の方が、整数演算を実行した場合の消費電力量よりも大きい。さらに、例えば、メインメモリに多用されるＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）とレジスタに多用されるＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）とでは、構成部品数についてはＳＲＡＭの方が多いが、ＤＲＡＭはコンデンサのリフレッシュが必要になる。そのため、ＤＲＡＭへのアクセスを伴う命令を実行した場合の消費電力量の方が、ＳＲＡＭへのアクセスを伴う命令を実行した場合の消費電力量よりも消費電力量が大きい。
【００９３】
そのため、各命令の実行に伴う消費電力量は、命令の種類毎（実行時に同じ部位が動作する命令毎）に分類することが可能になる。一方で、全ての命令の実行に伴う実際の消費電力量を測定等することにより取得することは、処理負担等からの観点から困難である。
【００９４】
そこで、特徴情報管理部１１１は、命令情報１３４を作成する際に、テストプログラムに含まれる各命令を命令の種類毎に分類することにより、命令情報１３４に、各テストプログラムの実行時における消費電力量の特性を特定するための情報を設定する。そして、動作周波数推測部１１３は、後述するように、第１プログラムの作成等が行われた際に、命令情報１３４に基づいて作成された最内ループ特徴情報１３１及び他ループ特徴情報１３２を参照する。
【００９５】
これにより、動作周波数推測部１１３は、後述するように、第１周波数情報１３３ａを推測することが可能になる。また、特徴情報管理部１１１は、例えば、テストプログラムに含まれる各命令の実行に伴う実際の消費電力量を取得する必要がなくなる。
【００９６】
具体的に、図１９に示す命令情報１３４において、「項番」が「１」である情報には、「アドレス」として「４００４ｅ８」が設定されており、「命令クラス」として「０２１（メモリアクセスを伴うＣＰＵのコピー命令）」が設定されている。なお、オブジェクトプログラムには、オペランドとしてアクセスするメモリアドレスが指定されているが、命令情報１３４ではメモリアドレスの考慮は不要であるため、記載を省略している。
【００９７】
また、図１９に示す命令情報１３４において、「項番」が「１」である情報の「オペランド」には、通常レジスタ番号や即値が指定されているが、命令情報１３４における考慮は不要のため、記載を省略している。さらに、図１９に示す命令情報１３４において、「ループ深さ」には、初期値である「０」が設定されている。
【００９８】
なお、以下、「オペランド」には、「命令クラス」が「０００（ＣＰＵの分岐命令または条件付分岐命令）」、もしくは「命令クラス」が「０１０（ＣＰＵのサブルーチンコール命令）」である場合に限り、ジャンプ先またはコール先の命令の「アドレス」を示す情報が設定されるものとして説明を行う。したがって、図１９に示す命令情報１３４においては、「項番」が「１１」、「１３」及び「１５」である情報の「オペランド」にのみ情報が設定されている。図１９に含まれる他の情報については説明を省略する。
【００９９】
なお、上記「命令クラス」の分類は、ＣＰＵアーキテクチャの違いや、同一ＣＰＵアーキテクチャでも設計の違いに依存しており、さらに、詳細に分類が必要な場合や、分類をまとめて少なくできる場合や、ＳＩＭＤなどの機能的な分類の追加や削除が必要な場合があるため、上記分類に限定されるものではない。基本的には、似た消費電力量のクラスはまとめることが可能であり、消費電力量がある程度異なる命令はクラスを分ける必要がある。
【０１００】
図１７に戻り、特徴情報管理部１１１は、Ｓ４１で作成した命令情報１３４に含まれる情報を参照する（Ｓ４２）。具体的に、特徴情報管理部１１１は、命令情報１３４に含まれる情報を先頭から順に１行分ずつ参照する。そして、特徴情報管理部１１１は、参照した情報の「命令クラス」が「０００（ＣＰＵの分岐命令または条件付分岐命令）」であるか否かを判定する（Ｓ４３）。
【０１０１】
その結果、参照した情報の「命令クラス」が「０００」である場合（Ｓ４３のＹＥＳ）、特徴情報管理部１１１は、参照した情報の「アドレス」に設定された値が「オペランド」に設定された値よりも大きいか否かを判定する（Ｓ４４）。そして、「アドレス」に設定された値が「オペランド」に設定された値よりも大きい場合（Ｓ４４のＹＥＳ）、特徴情報管理部１１１は、「オペランド」に設定された値から「アドレス」に設定された値に対応する情報の「ループ深さ」に設定された値をカウントアップする（Ｓ４５）。
【０１０２】
すなわち、ＣＰＵの分岐命令または条件付分岐命令において、「アドレス」に設定された値が「オペランド」に設定された値よりも大きい場合、特徴情報管理部１１１は、「アドレス」に設定された値が「オペランド」に設定された値までを範囲とするループが存在すると判定する。そのため、特徴情報管理部１１１は、この場合、「オペランド」に設定された値が「アドレス」である情報から現在参照している情報（ＣＰＵの分岐命令または条件付分岐命令に対応する情報）までの「ループ深さ」に設定された値に「１」を加算する。これにより、命令情報１３４は、テストプログラムに含まれる各命令のループの深さに関する情報を保持することが可能になる。
【０１０３】
なお、「アドレス」に設定された値が「オペランド」に設定された値よりも大きい場合でも、実際には、ループではなく通常の処理の流れとして分岐を行う場合も考えられる。これは、オブジェクトプログラムを詳細に解析することにより判別することができる。しかし、一般的には、消費電力量を支配するループ内であり、通常の処理の流れとしての分岐は少ない。また、通常の処理の流れとしての分岐を行う場合であっても、その処理の流れに含まれる命令数は少ない場合が多い。そのため、本実施の形態において、「アドレス」に設定された値が「オペランド」に設定された値よりも大きい場合は、ループが存在しているものと判定するものとする。
【０１０４】
一方、参照した情報の「命令クラス」が「０００」でない場合（Ｓ４３のＮＯ）、または、「アドレス」に設定された値が「オペランド」に設定された値よりも大きくない場合（Ｓ４４のＮＯ）、特徴情報管理部１１１は、Ｓ４５の処理を実行しない。
【０１０５】
そして、特徴情報管理部１１１は、Ｓ４２の処理において、Ｓ４１で作成した各命令情報１３４に含まれる情報の全てを参照したか否かについて判定を行う（Ｓ４６）。その結果、Ｓ４１で作成した各命令情報１３４に含まれる情報の全てを参照していない場合（Ｓ４６のＮＯ）、特徴情報管理部１１１は、Ｓ４２以降の処理を再度実行する。一方、Ｓ４１で作成した各命令情報１３４に含まれる情報の全てを参照している場合（Ｓ４６のＹＥＳ）、特徴情報管理部１１１は、Ｓ２２の処理を終了する。以下、Ｓ４２からＳ４６の処理の具体例について説明を行う。
【０１０６】
[Ｓ４２からＳ４６の処理の具体例]
図１９に示す命令情報１３４において、特徴情報管理部１１１は、「項番」が「１」である情報から順に参照する（Ｓ４２、Ｓ４６のＮＯ）。そして、「項番」が「１」から「１０」である情報の「命令クラス」が「０００」ではないため（Ｓ４３のＮＯ）、特徴情報管理部１１１は、Ｓ４４及びＳ４５の処理を行わない。
【０１０７】
次に、特徴情報管理部１１１は、「項番」が「１１」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。その結果、「項番」が「１１」である情報の「命令クラス」が「０００」であるため（Ｓ４３のＹＥＳ）、特徴情報管理部１１１は、「アドレス」の値である「４００５２５」が、「オペランド」の値である「４００５０ａ」よりも大きいか否を判定する（Ｓ４４）。そして、「アドレス」の値が「オペランド」の値よりも大きいため（Ｓ４４のＹＥＳ）、特徴情報管理部１１１は、「アドレス」が「４００５０ａ」である情報から「アドレス」が「４００５２５」である情報の「ループ深さ」に設定された値に「１」を加算する（Ｓ４５）。したがって、特徴情報管理部１１１は、図２０の下線部分に示すように、「項番」が「７」である情報から「項番」が「１１」である情報の「ループ深さ」に設定された値に「１」を加算する。
【０１０８】
続いて、特徴情報管理部１１１は、「項番」が「１２」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。そして、「項番」が「１２」である情報の「命令クラス」が「０００」ではないため（Ｓ４３のＮＯ）、特徴情報管理部１１１は、Ｓ４４及びＳ４５の処理を行わない。
【０１０９】
その後、特徴情報管理部１１１は、「項番」が「１３」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。その結果、「項番」が「１３」である情報の「命令クラス」が「０００」であるため（Ｓ４３のＹＥＳ）、特徴情報管理部１１１は、「アドレス」の値である「４００５４０」が、「オペランド」の値である「４００４ｆｂ」よりも大きいか否を判定する（Ｓ４４）。そして、「アドレス」の値が「オペランド」の値よりも大きいため（Ｓ４４のＹＥＳ）、特徴情報管理部１１１は、「アドレス」が「４００４ｆｂ」である情報から「アドレス」が「４００５４０」である情報の「ループ深さ」に設定された値に「１」を加算する（Ｓ４５）。そのため、特徴情報管理部１１１は、図２１の下線部分に示すように、「項番」が「５」である情報から「項番」が「１３」である情報の「ループ深さ」に設定された値に「１」を加算する。
【０１１０】
続いて、特徴情報管理部１１１は、「項番」が「１４」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。そして、「項番」が「１４」である情報の「命令クラス」が「０００」ではないため（Ｓ４３のＮＯ）、特徴情報管理部１１１は、Ｓ４４及びＳ４５の処理を行わない。
【０１１１】
その後、特徴情報管理部１１１は、「項番」が「１５」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。その結果、「項番」が「１５」である情報の「命令クラス」が「０００」であるため（Ｓ４３のＹＥＳ）、特徴情報管理部１１１は、「アドレス」の値である「４００５４ｃ」が、「オペランド」の値である「４００４ｆ６」よりも大きいか否を判定する（Ｓ４４）。そして、「アドレス」の値が「オペランド」の値よりも大きいため（Ｓ４４のＹＥＳ）、特徴情報管理部１１１は、「アドレス」が「４００４ｆ６」である情報から「アドレス」が「４００５４ｃ」である情報の「ループ深さ」に設定された値に「１」を加算する（Ｓ４５）。そのため、特徴情報管理部１１１は、図２２の下線部分に示すように、「項番」が「４」である情報から「項番」が「１５」である情報の「ループ深さ」に設定された値に「１」を加算する。
【０１１２】
続いて、特徴情報管理部１１１は、「項番」が「１６」である情報を参照する（Ｓ４６のＮＯ、Ｓ４２）。そして、「項番」が「１６」である情報の「命令クラス」が「０００」ではないため（Ｓ４３のＮＯ）、特徴情報管理部１１１は、Ｓ４４及びＳ４５の処理を行わない。その後、命令情報１３４に含まれる全ての情報が取得済になったため、特徴情報管理部１１１は、Ｓ２２の処理を終了する（Ｓ４６のＹＥＳ）。
【０１１３】
図１５に戻り、特徴情報管理部１１１は、Ｓ２２で作成した命令情報１３４より、最内ループに含まれる各命令の出現回数を含む最内ループ特徴情報１３１をテストプログラム毎に作成する（Ｓ２３）。以下、最内ループ特徴情報１３１の具体例について説明を行う。
【０１１４】
[最内ループ特徴情報の具体例]
図２３は、最内ループ特徴情報１３１の具体例を説明する図である。図２３に示す最内ループ特徴情報１３１は、図２２に示す命令情報１３４に基づいて作成された情報である。すなわち、図２３に示す最内ループ特徴情報１３１は、図２２に示す命令情報１３４のループに含まれる命令に関する情報（「ループ深さ」が「１」から「３」である情報）のうち、「ループ深さ」が「３」である情報（最内ループに関する情報）に基づく情報である。
【０１１５】
図２３に示す最内ループ特徴情報１３１は、最内ループ特徴情報１３１内の情報を識別する「項番」と、各命令の種類を示す「命令クラス」と、各命令の種類毎の出現回数を示す「出現回数」とを項目として有する。
【０１１６】
具体的に、図２２に示す命令情報１３４に含まれる情報のうち、「ループ深さ」が「３」である情報（「項番」が「７」から「１１」である情報）の「命令クラス」には、それぞれ「０２０」、「０２０」、「０３０」、「０２１」及び「０００」が設定されている。そのため、特徴情報管理部１１１は、図２３に示すように、「命令クラス」が「０００」、「０２０」、「０２１」及び「０３０」である情報の「出現回数」に、それぞれ「１」、「２」、「１」及び「１」を設定する。
【０１１７】
図１５に戻り、特徴情報管理部１１１は、Ｓ２２で作成した命令情報１３４より、最内ループ以外のループに含まれる各命令の出現回数を含む他ループ特徴情報１３２をテストプログラム毎に作成する（Ｓ２４）。以下、他ループ特徴情報１３２の具体例について説明を行う。
【０１１８】
[他ループ特徴情報の具体例]
図２４は、他ループ特徴情報１３２の具体例を説明する図である。図２４に示す他ループ特徴情報１３２は、図２２に示す命令情報１３４に基づいて作成された情報である。すなわち、図２４に示す他ループ特徴情報１３２は、図２２に示す命令情報１３４のループに含まれる命令に関する情報（「ループ深さ」が「１」から「３」である情報）のうち、「ループ深さ」が「１」及び「２」である情報に基づく情報である。
【０１１９】
図２４に示す他ループ特徴情報１３２は、図２３で説明した最内ループ特徴情報１３１と同じ項目を有している。具体的に、図２２に示す命令情報１３４に含まれる情報のうち、「ループ深さ」が「１」である情報（「項番」が「４」、「１４」及び「１５」である情報）の「命令クラス」には、それぞれ「０２０」、「０２１」及び「０００」が設定されている。また、図２２に示す命令情報１３４に含まれる情報のうち、「ループ深さ」が「２」である情報（「項番」が「５」、「６」、「１２」及び「１３」である情報）の「命令クラス」には、それぞれ「０２０」、「０２０」、「０２０」及び「０００」が設定されている。そのため、特徴情報管理部１１１は、図２４に示すように、「命令クラス」が「０００」、「０２０」及び「０２１」である情報の「出現回数」に、それぞれ「２」、「４」及び「１」を設定する。
【０１２０】
なお、命令情報１３４に独立した複数のループに関する情報が含まれている場合、特徴情報管理部１１１は、例えば、それぞれの最内ループのうち、「ループ深さ」に設定された値が大きい方のループ（ループ深さが深い方のループ）を最内ループとするものであってよい。
【０１２１】
図１５に戻り、特徴情報管理部１１１は、各サンプルプログラムを動作させた複数の動作周波数のうち、テストプログラムを実行した際の消費電力量が最小であった動作周波数を示す周波数情報１３３をテストプログラム毎に作成する（Ｓ２５）。以下、周波数情報１３３の具体例について説明を行う。
【０１２２】
[周波数情報の具体例]
図２５は、周波数情報１３３の具体例を説明する図である。図２５に示す周波数情報１３３において、周波数情報１３３に含まれる各情報を識別する「項番」と、テストプログラムを実行した際の消費電力量が最小であった動作周波数を格納する「動作周波数」とを項目として有する。具体的に、図２５に示す周波数情報１３３において、「項番」が「１」である情報には、「動作周波数情報」として「１．４（ＧＨｚ）」が設定されている。
【０１２３】
図１５に戻り、特徴情報管理部１１１は、Ｓ２３等で作成した最内ループ特徴情報１３１及び他ループ特徴情報１３２を含むプログラム特徴情報１４１と、Ｓ２５で作成した周波数情報１３３とをテストプログラム毎に対応付けた対応情報１４２を作成する（Ｓ２６）。そして、特徴情報管理部１１１は、作成した対応情報１４２を情報格納領域１３０に記憶する（Ｓ２６）。以下、対応情報１４２に具体例について説明を行う。
【０１２４】
[対応情報の具体例]
図２６は、対応情報１４２の具体例を説明する図である。図２６に示す対応情報１４２は、対応情報１４２に含まれる各情報を識別する「項番」と、各命令の種類を示す「命令クラス」と、最内ループ特徴情報１３１の「出現回数」に設定された値が設定される「最内ループ特徴情報」とを項目として有する。また、図２６に示す対応情報１４２は、他ループ特徴情報１３２の「出現回数」に設定された値が設定される「他ループ特徴情報」と、周波数情報１３３に設定された値が設定される「動作周波数」とを項目として有する。なお、図２６に示す対応情報１４２において、「項番」が「１」である情報は、図２３で説明した最内ループ特徴情報１３１と、図２４で説明した他ループ特徴情報１３２と、図２５で説明した周波数情報１３３とに対応する情報である。
【０１２５】
具体的に、図２３に示す最内ループ特徴情報１３１において、「命令クラス」が「０００」、「０２０」、「０２１」及び「０３０」である情報の「出現回数」には、それぞれ「１」、「２」、「１」及び「１」が設定されている。そのため、特徴情報管理部１１１は、図２６の対応情報１４２に示すように、「項番」が「１」である情報の「命令クラス」が「０００」、「０２０」、「０２１」、「０３０」及び「０３１」である情報の「最内ループ特徴情報」に、それぞれ「１」、「２」、「１」、「１」及び「０」を設定する。
【０１２６】
同様に、図２４に示す他ループ特徴情報１３２において、「命令クラス」が「０００」、「０２０」及び「０２１」である情報の「出現回数」には、それぞれ「２」、「４」及び「１」が設定されている。そのため、特徴情報管理部１１１は、図２６の対応情報１４２に示すように、「項番」が「１」である情報の「命令クラス」が「０００」、「０２０」、「０２１」、「０３０」及び「０３１」である情報の「最内ループ特徴情報」に、それぞれ「２」、「４」、「１」、「０」及び「０」を設定する。
【０１２７】
さらに、図２５に示す周波数情報１３３の「動作周波数」には、「１．４（ＧＨｚ）」が設定されている。そのため、特徴情報管理部１１１は、図２６の対応情報１４２に示すように、「項番」が「１」である情報の「動作周波数」に「１．４（ＧＨｚ）」を設定する。
【０１２８】
すなわち、特徴情報管理部１１１は、図２６に示す対応情報１４２を作成することにより、最内ループ特徴情報１３１と、他ループ特徴情報１３２と、周波数情報１３３とをテストプログラム毎に対応させた状態で管理することが可能になる。そのため、動作周波数推測部１１３は、後述するように、第１プログラムの第１最内ループ特徴情報１３１ａ及び第１他ループ特徴情報１３２ａに基づき、第１プログラムの第１周波数情報１３３ａを推測することが可能になる。
【０１２９】
[動作周波数推測処理の詳細]
次に、動作周波数推測処理の詳細について説明を行う。図１６は、第１の実施の形態における動作周波数推測処理の詳細を説明するフローチャートである。
【０１３０】
特徴情報取得部１１２は、図１６に示すように、第１プログラムの実行タイミングまで待機する（Ｓ３１のＮＯ）。その後、第１プログラムの実行タイミングになった場合（Ｓ３１のＹＥＳ）、特徴情報取得部１１２は、第１プログラム内のループに含まれる各命令に関する情報である第１命令情報１３４ａを作成する（Ｓ３２）。なお、Ｓ３２の処理の詳細は、図１７で説明したＳ２２の処理の詳細と同じ内容であるため説明を省略する。以下、第１命令情報１３４ａの具体例について説明を行う。
【０１３１】
[第１命令情報の具体例]
図２７は、第１命令情報１３４ａの具体例を説明する図である。図２７に示す第１命令情報１３４ａは、図１９で説明した命令情報１３４と同じ項目を有する。具体的に、図２７に示す第１命令情報１３４ａにおいて、「項番」が「１」である情報には、「アドレス」として「４００６ｄ２」が設定されており、「命令クラス」として「０２１（メモリアクセスを伴うＣＰＵのコピー命令）」が設定されている。また、図２７に示す第１命令情報１３４ａにおいて、「項番」が「１」である情報の「オペランド」は、情報が設定されていない状態であり、「ループ深さ」には、初期値である「０」が設定されている。図２７に含まれる他の情報については説明を省略する。
【０１３２】
図１６に戻り、特徴情報取得部１１２は、Ｓ３２で作成した第１命令情報１３４ａより、最内ループに含まれる各命令の出現回数を含む第１最内ループ特徴情報１３１ａに作成する（Ｓ３３）。以下、第１最内ループ特徴情報１３１ａの具体例について説明を行う。
【０１３３】
[第１最内ループ特徴情報の具体例]
図２８は、第１最内ループ特徴情報１３１ａの具体例を説明する図である。図２８に示す第１最内ループ特徴情報１３１ａは、図２７に示す第１命令情報１３４ａに基づいて作成された情報である。すなわち、図２８に示す第１最内ループ特徴情報１３１ａは、図２７に示す命令情報１３４ａに含まれる情報のうち、「ループ深さ」が「２」である情報（最内ループに関する情報）に基づいて作成された情報である。
【０１３４】
図２８に示す第１最内ループ特徴情報１３１ａは、図２３で説明した最内ループ特徴情報１３１と同じ項目を有する。具体的に、図２７に示す第１命令情報１３４ａに含まれる情報のうち、「ループ深さ」が「２」である情報（「項番」が「４」から「６」である情報）の「命令クラス」には、それぞれ「０２０」、「０２０」及び「０００」が設定されている。そのため、特徴情報取得部１１２は、図２８に示すように、「命令クラス」が「０００」及び「０２０」である情報の「出現回数」に、それぞれ「１」及び「２」を設定する。
【０１３５】
図１６に戻り、特徴情報取得部１１２は、Ｓ３２で作成した第１命令情報１３４ａより、最内ループ以外のループに含まれる各命令の出現回数を含む第１他ループ特徴情報１３２ａを作成する（Ｓ３４）。以下、第１他ループ特徴情報１３２ａの具体例について説明を行う。
【０１３６】
[第１他ループ特徴情報の具体例]
図２９は、第１他ループ特徴情報１３２ａの具体例を説明する図である。図２９に示す第１他ループ特徴情報１３２ａは、図２７に示す第１命令情報１３４ａに基づいて作成された情報である。すなわち、図２９に示す第１他ループ特徴情報１３２ａは、図２７に示す第１命令情報１３４ａに含まれる情報のうち、「ループ深さ」が「１」である情報に基づいて作成された情報である。
【０１３７】
図２９に示す第１他ループ特徴情報１３２ａは、図２３で説明した最内ループ特徴情報１３１と同じ項目を有している。具体的に、図２７に示す第１命令情報１３４ａに含まれる情報のうち、「ループ深さ」が「１」である情報（「項番」が「２」、「３」及び「７」から「９」である情報）の「命令クラス」には、それぞれ「０２０」、「０３１」、「０２１」、「０２０」及び「０００」が設定されている。そのため、特徴情報取得部１１２は、図２９に示すように、「命令クラス」が「０００」、「０２０」、「０２１」及び「０３１」である情報の「出現回数」に、それぞれ「１」、「２」、「１」及び「１」を設定する。
【０１３８】
図１６に戻り、特徴情報取得部１１２は、Ｓ２６で記憶されたプログラム特徴情報１４１のうち、Ｓ３３及びＳ３４で取得した第１プログラム特徴情報１４１ａに含まれる情報と最も近い情報を含む第２プログラム特徴情報１４１ｂを特定する（Ｓ２５）。これにより、特徴情報取得部１１２は、後述するように、第２プログラム特徴情報１４１ｂと対応付けて記憶された周波数情報１３３を、第１プログラムの実行に伴う消費電力量を最も小さくする第１周波数情報１３３ａとして推測することが可能になる。
【０１３９】
具体的に、特徴情報取得部１１２は、例えば、図３０に示すように、第１最内ループ特徴情報１３１ａと、第１他ループ特徴情報１３２ａとを含む第１対応情報１４２ａを作成する。以下、第１対応情報１４２ａの具体例について説明を行う。
【０１４０】
[第１対応情報の具体例]
図３０は、第１対応情報１４２ａの具体例を説明する図である。図３０に示す第１対応情報１４２ａは、第１対応情報１４２ａに含まれる各情報を識別する「項番」と、各命令の種類を示す「命令クラス」と、最内ループ特徴情報１３１の「出現回数」に設定された値が設定される「最内ループ特徴情報」とを項目として有する。また、図３０に示す第１対応情報１４２ａは、他ループ特徴情報１３２の「出現回数」に設定された値が設定される「他ループ特徴情報」を項目として有する。なお、図３０に示す第１対応情報１４２ａにおいて、「項番」が「１」である情報は、図２８で説明した第１最内ループ特徴情報１３１ａと、図２９で説明した第１他ループ特徴情報１３２ａとに対応する情報である。
【０１４１】
そして、特徴情報取得部１１２は、図２６で説明した対応情報１４２のうち、「最内ループ特徴情報」及び「他ループ特徴情報」に設定された情報が、第１対応情報１４２の「最内ループ特徴情報」及び「他ループ特徴情報」に設定された情報と最も近い情報を取得する。
【０１４２】
具体的に、図２６に示す対応情報１４２に含まれる情報のうち、「最内ループ特徴情報」及び「他ループ特徴情報」に設定された情報の第１対応情報１４２ａに対する一致率が最も高い情報は、「項番」が「３」である情報である。そのため、特徴情報取得部１１２は、例えば、図２６に示す対応情報１４２のうち、第２プログラム特徴情報１４１ｂとして「項番」が「３」である情報を特定する。
【０１４３】
図１６に戻り、特徴情報取得部１１２は、Ｓ２６で記憶された周波数情報１３３のうち、Ｓ３５で特定した第２プログラム特徴情報１４１ｂと対応する周波数情報１３３を、第１プログラムの実行に伴う消費電力量を最小にする第１周波数情報１３３ａとして推測する（Ｓ３６）。
【０１４４】
具体的に、図２６に示す例において、特徴情報取得部１１２は、「項番」が「３」である情報（Ｓ３５の処理で特定した情報）の「動作周波数」である「１．６（ＧＨｚ）」を特定する。これにより、特徴情報取得部１１２は、第１プログラムの第１周波数情報１３３ａを推測することが可能になる。
【０１４５】
なお、Ｓ３５の処理において、対応情報１４２に含まれる情報のうち、第２プログラム特徴情報１４１ｂが存在しないと判定された場合、開発者通知部１１５は、動作周波数推測処理を中止し、その旨を開発者に通知するものであってもよい。
【０１４６】
[第２の実施の形態]
次に、第２の実施の形態における情報記憶処理について説明を行う。図３１は、第２の実施の形態における他ループ特徴情報１３２の具体例を説明する図である。
【０１４７】
第２の実施の形態における情報記憶処理は、他ループ特徴情報１３２を作成する際に、命令情報１３４に含まれる「ループ深さ」に設定された情報を考慮する。具体的に、特徴情報管理部１１１は、「ループ深さ」に設定された各情報に対し、「ループ深さ」に設定された情報毎に定められた重み付けを付けることにより、「出現回数」に設定すべき情報を決定する。これにより、特徴情報管理部１１１は、例えば、「ループ深さ」に設定された値が大きい命令ほど、「出願回数」に設定される情報を大きくすることが可能になる。
【０１４８】
例えば、「ループ深さ」が「２」であるループと、「ループ深さ」が「３」であるループとで、静的解析で同一数の演算命令が検出された場合、実行時には同じ数の命令を実行するのではなく、「ループ深さ」が「３」であるループの方が、そのループの回数を掛けた命令数を実行することになる。すなわち、「ループ深さ」が「２」であるループの命令の出現回数と、「ループ深さ」が「３」であるループの命令の出現回数とを、同一回とすることは現実の状況に沿わない。そのため、ループ深さが異なる場合、静的解析で求められた命令数に、ループの実行回数に応じた係数を掛ける必要がある。しかしながら、ループの実行回数は、プログラムを実行することにより、判定可能になるものである。そのため、静的分析においては、ループの実行回数の判定を行うことができない。
【０１４９】
そこで、本実施の形態における静的解析では、ループ深さに従った重み付けを行う。これにより、特徴情報管理部１１１は、ループ深さが深いほど演算の出現が実行される回数が多くなり、「出願回数」に設定される情報を大きくすることが可能になる。
【０１５０】
なお、第２の実施の形態における情報記憶処理は、第１の実施の形態における情報記憶処理と比較して、Ｓ２４の処理のみが異なる。そのため、以下、第２の実施の形態におけるＳ２４の処理についての説明を行う。
【０１５１】
[第２の実施の形態におけるＳ２４の処理]
図１８は、第２の実施の形態におけるＳ２４の処理を説明するフローチャートである。特徴情報管理部１１１は、Ｓ２２で作成した命令情報１３４に基づき、最内ループ以外の各ループに含まれる各命令の出現回数に、各ループの深さに応じた重み付け係数をそれぞれ乗算する（Ｓ５１）。そして、特徴情報管理部１１１は、Ｓ５１で算出した値を命令の種類毎にそれぞれ加算する（Ｓ５２）。
【０１５２】
この場合、特徴情報管理部１１１は、例えば、底を「２」がであり、指数を「「ループ深さ」に設定された情報」である値を重み付け係数とするものであってよい。すなわち、この場合、「ループの深さ」が「０」である情報の重み付け係数は「２０」になり、「ループの深さ」が「１」である情報の重み付け係数は「２１」になり、「ループの深さ」が「２」である情報の重み付け係数は「２２」になる。
【０１５３】
具体的に、図２２に示す命令情報１３４において、例えば、「命令クラス」が「０２０」である情報のうち、「ループ深さ」が「１」である情報の数は「１」であり、「ループ深さ」が「２」である情報の数は「３」である。そのため、特徴情報管理部１１１は、この場合、「ループ深さ」が「１」である情報の数である「１」に、重み付け係数である「２１」した値と、「ループ深さ」が「２」である情報の数である「３」に、重み付け係数である「２２」した値とを加算した「１４」を算出する。
【０１５４】
そして、特徴情報管理部１１１は、図３１に示すように、「命令クラス」が「０２０」である情報（「項番」が「２」である情報）に対応する「出現回数」に、「１４」を設定する。図３１の他の情報については説明を省略する。これにより、特徴情報管理部１１１は、他ループ特徴情報１３２を作成する際に、命令情報１３４に含まれる「ループ深さ」に設定された情報を反映させることが可能になる。
【０１５５】
なお、特徴情報管理部１１１は、情報格納領域１３０に記憶された重み付け情報１３５（開発者等が管理ノード１に予め設定した情報）が示す値を、重み付け係数として利用するものであってもよい。
【０１５６】
[第３の実施の形態]
次に、第３の実施の形態における情報記憶処理及び動作周波数推測処理について説明を行う。図３２は、第３の実施の形態におけるニューラルネットワークの具体例を説明する図である。
【０１５７】
第３の実施の形態における情報記憶処理及び動作周波数推測処理は、ニューラルネットワークを用いることにより、最内ループ特徴情報１３１と、他ループ特徴情報１３２と、周波数情報１３３との記憶を行う。
【０１５８】
ニューラルネットワークは、人間の脳における神経回路の情報処理を模擬した計算手法であり、既知の入力情報と出力情報との関係を学習し、未学習の入力情報から出力情報を推測することに使用される。なお、第３の実施例では、例えば、ニューラルネットワークモデルとして階層型ニューラルネットワーク、学習方法として教師付き学習方法であるバックプロパゲーション法を採用する。
【０１５９】
具体的に、第３の実施の形態における特徴情報管理部１１１（ニューラルネットワークで構成される特徴情報管理部１１１）は、最内ループ特徴情報１３１に含まれる命令の種類のそれぞれに対応する入力ユニット（図３２における「０００（最内）」から「０３１（最内）」と記載された白抜きの丸）を有する。また、第３の実施の形態における特徴情報管理部１１１は、他ループ特徴情報１３２に含まれる命令の種類のそれぞれに対応する入力ユニット（図３２における「０００（他）」から「０３１（他）」と記載された白抜きの丸）を有する。さらに、第３の実施の形態における特徴情報管理部１１１は、テストプログラムを実行した際の複数の動作周波数のそれぞれに対応する出力ユニット（図３２における「１．２（ＧＨｚ）」から「２．０（ＧＨｚ）」と記載された白抜きの丸）を有する。
【０１６０】
具体的に、特徴情報管理部１１１は、例えば、図２３で説明した最内ループ特徴情報１３１における「出現回数」に設定された値と、図２４で説明した他ループ特徴情報１３２における「出現回数」に設定された値を、ニューラルネットワークの入力側教師データとして学習する。また、特徴情報管理部１１１は、図２５で説明した周波数情報１３３における「動作周波数」に設定された値に対応する出力ユニットに、「１」（以下、第１の情報とも呼ぶ）を出力側教師データとして学習させ、図２５で説明した周波数情報１３３における「動作周波数」に設定された値以外の値に対応する出力ユニットに、「０」（以下、第２の情報とも呼ぶ）を出力側教師データとして学習する。
【０１６１】
一方、第３の実施の形態における特徴情報取得部１１２は、第１最内ループ特徴情報１３１ａ及び第１他ループ特徴情報１３２ａにおける「出現回数」に設定された値を、それぞれ対応する情報管理部１１１に入力する。そして、第３の実施の形態における特徴情報管理部１１１は、出力ユニットから出力される情報を、第１プログラムの第１周波数情報１３３ａとして推測する。
【０１６２】
すなわち、プログラム特徴情報１４１には、第１プログラム特徴情報１４１ａと同じ内容を有する情報が存在しない場合がある。そして、この場合、特徴情報取得部１１２は、単純比較によっては第１周波数情報１３３ａを推測することができない。
【０１６３】
そこで、第３の実施の形態における特徴情報管理部１１１は、最内ループ特徴情報１３１と、他ループ特徴情報１３２と、周波数情報１３３とをニューラルネットワークに学習させることによって記憶する。これにより、第３の実施の形態における特徴情報取得部１１２は、第１プログラム特徴情報１４１ａと同じ内容を有する情報が存在しない場合であっても、ニューラルネットワークの汎化機能により、学習した周波数情報１３３のうち、第１周波数情報１３３ａとして最も適した周波数情報を取得することが可能になる。したがって、特徴情報取得部１１２は、第１プログラム特徴情報１４１ａと同じ内容を有する情報がプログラム特徴情報１４１に存在しない場合であっても、第１周波数情報１３３ａの推測を行うことが可能になる。
【０１６４】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１６５】
（付記１） 
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶する情報記憶部と、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得する情報取得部と、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する動作周波数推測部と、を有する、
ことを特徴とする計算機。
【０１６６】
（付記２）
付記１において、
前記動作周波数推測部は、前記情報記憶部に記憶された前記プログラム特徴情報のうち、各プログラム特徴情報に含まれる情報と、前記第１プログラム特徴情報に含まれる情報との一致率が最も高いプログラム特徴情報を、第２プログラム特徴情報として特定する、
ことを特徴とする計算機。
【０１６７】
（付記３）
付記１において、
前記動作周波数推測部は、前記情報記憶部に記憶された前記プログラム特徴情報のうち、各プログラム特徴情報に含まれる情報と、前記第１プログラム特徴情報に含まれる情報との一致率が所定の閾値よりも大きい情報が存在しない場合、前記第２プログラム特徴情報に対応する動作周波数の推測を中止する、
ことを特徴とする計算機。
【０１６８】
（付記４）
付記１において、
前記情報記憶部は、前記プログラム特徴情報を入力側教師データとし、前記最小周波数を出力側教師データとして、ニューラルネットワークに学習させることによって情報の記憶を行う、
ことを特徴とする計算機。
【０１６９】
（付記５）
付記４において、
前記ニューラルネットワークは、前記最内ループ特徴情報に含まれる命令の種類及び前記他ループ特徴情報に含まれる命令の種類のそれぞれに対応する複数の入力ユニットと、前記複数の動作周波数のそれぞれに対応する複数の出力ユニットとを有し、
前記情報記憶部は、前記最内ループ特徴情報に含まれる命令の種類毎の数と、前記他ループ特徴情報に含まれる命令の種類毎の数とを前記複数の入力ユニットから入力し、前記複数の出力ユニットのうち、前記最小動作周波数に対応する出力ユニットに第１の情報を入力し、前記複数の出力ユニットのうち、前記最小動作周波数以外の動作周波数に対応する出力ユニットに第２の情報を入力する、
ことを特徴とする計算機。
【０１７０】
（付記６）
付記１において、さらに、
サンプルプログラム内のループのうち、前記最内ループ以外のループに含まれる命令の種類毎の命令の数に、各ループの深さに応じた重み付け係数をそれぞれ乗算し、前記命令の種類毎に加算することにより、前記他ループ特徴情報を作成する他ループ特徴情報作成部と、を有する、
ことを特徴とする計算機。
【０１７１】
（付記７）
付記１において、
前記命令の種類は、前記命令を実行した場合の消費電力量の差異によって区分けされる、
ことを特徴とする計算機。
【０１７２】
（付記８）
付記７において、
前記消費電力量は、前記命令のそれぞれが実行される際に動作するプロセッサ内の部位の構造及び規模によって決定される、
ことを特徴とする計算機。
【０１７３】
（付記９）
付記７において、
前記命令の種類は、レジスタアクセスを行う命令とメモリアクセスを行う命令とによって区分けされた同一の命令を含む、
ことを特徴とする計算機。
【０１７４】
（付記１０）
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶し、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得し、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する、
ことを特徴とする動作周波数決定方法。
【０１７５】
（付記１１）
コンピュータに、
複数のサンプルプログラムのそれぞれを複数の動作周波数において実行した結果に基づき、サンプルプログラム内のループに含まれる命令のうち、最内ループに含まれる命令の種類毎の数を含む最内ループ特徴情報と、サンプルプログラム内のループに含まれる命令のうち、前記最内ループ以外のループに含まれる命令の種類毎の数を含む他ループ特徴情報とを含むプログラム特徴情報と、前記複数の動作周波数のうち、サンプルプログラムを実行した際の消費電力量が最小であった動作周波数を示す最小動作周波数とを、前記複数のサンプルプログラム毎に対応付けて記憶し、
前記サンプルプログラム以外のプログラムである第１プログラムの実行前において、前記第１プログラムに対応する前記プログラム特徴情報である第１プログラム特徴情報を取得し、
前記情報記憶部に記憶された前記プログラム特徴情報のうち、取得した前記第１プログラム特徴情報に含まれる情報と最も近い情報を含む第２プログラム特徴情報を特定し、前記情報記憶部に記憶された前記最小動作周波数のうち、特定した前記第２プログラム特徴情報と対応する動作周波数を、第１プログラムを実行する際の消費電力量が最小である第１動作周波数として推測する、
処理を実行させることを特徴とする動作周波数決定プログラム。
【符号の説明】
【０１７６】
１：管理ノード              １ａ：記憶部
２：計算ノード群            １０：情報処理システム
１１：開発者端末
【図１】
0006439623.tif 000002
【図２】
0006439623.tif 000003
【図３】
0006439623.tif 000004
【図４】
0006439623.tif 000005
【図５】
0006439623.tif 000006
【図６】
0006439623.tif 000007
【図７】
0006439623.tif 000008
【図８】
0006439623.tif 000009
【図９】
0006439623.tif 000010
【図１０】
0006439623.tif 000011
【図１１】
0006439623.tif 000012
【図１２】
0006439623.tif 000013
【図１３】
0006439623.tif 000014
【図１４】
0006439623.tif 000015
【図１５】
0006439623.tif 000016
【図１６】
0006439623.tif 000017
【図１７】
0006439623.tif 000018
【図１８】
0006439623.tif 000019
【図１９】
0006439623.tif 000020
【図２０】
0006439623.tif 000021
【図２１】
0006439623.tif 000022
【図２２】
0006439623.tif 000023
【図２３】
0006439623.tif 000024
【図２４】
0006439623.tif 000025
【図２５】
0006439623.tif 000026
【図２６】
0006439623.tif 000027
【図２７】
0006439623.tif 000028
【図２８】
0006439623.tif 000029
【図２９】
0006439623.tif 000030
【図３０】
0006439623.tif 000031
【図３１】
0006439623.tif 000032
【図３２】
0006439623.tif 000033