(57)【特許請求の範囲】
【請求項１】
第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出工程と、
前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出工程と、
前記関数群のうちのいずれかの関数について、前記第１の検出工程による前記いずれかの関数の第１の検出回数を計測する第１の計測工程と、
前記いずれかの関数について、前記第２の検出工程による前記いずれかの関数の第２の検出回数を計測する第２の計測工程と、
前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出工程と、
前記算出工程によって算出された依存度を出力する出力工程と、
をコンピュータに実行させることを特徴とする情報抽出プログラム。
【請求項２】
前記算出工程によって算出された依存度が閾値以下であるか否かを判定する判定工程と、
前記判定工程によって依存度が閾値以下であると判定された場合に、所定の低周波数の割当クロック周波数を前記いずれかの関数と関連付けて、割当テーブルに格納し、前記判定工程によって依存度が閾値より大きいと判定された場合に、所定の高周波数の割当クロック周波数を前記いずれかの関数と関連付けて、前記割当テーブルに格納する格納工程と、
を前記コンピュータに実行させることを特徴とする請求項１に記載の情報抽出プログラム。
【請求項３】
前記依存度ごとに対応する割当クロック周波数を保持するテーブルに基づいて、前記算出工程によって算出された依存度に対応する割当クロック周波数を前記いずれかの関数と関連付けて割当テーブルに格納する格納工程を前記コンピュータに実行させることを特徴とする請求項１に記載の情報抽出プログラム。
【請求項４】
前記プログラムをあらたに実行した場合において、前記関数群のうちの実行中の関数を検出する第３の検出工程と、
前記割当テーブルに基づいて、前記第３の検出工程によって検出された関数に対応する前記割当クロック周波数を前記プロセッサのクロック周波数として設定する設定工程と、
を前記コンピュータに実行させることを特徴とする請求項２または３に記載の情報抽出プログラム。
【請求項５】
第１の検出手段と、第２の検出手段と、第１の計測手段と、第２の計測手段と、算出手段と、出力手段と、を備えるコンピュータが、
前記第１の検出手段により、第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出工程と、
前記第２の検出手段により、前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出工程と、
前記第１の計測手段により、前記関数群のうちのいずれかの関数について、前記第１の検出工程による前記いずれかの関数の第１の検出回数を計測する第１の計測工程と、
前記第２の計測手段により、前記いずれかの関数について、前記第２の検出工程による前記いずれかの関数の第２の検出回数を計測する第２の計測工程と、
前記算出手段により、前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出工程と、
前記出力手段により、前記算出工程によって算出された依存度を出力する出力工程と、
を実行することを特徴とする情報抽出方法。
【請求項６】
第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出手段と、
前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出手段と、
前記関数群のうちのいずれかの関数について、前記第１の検出手段による前記いずれかの関数の第１の検出回数を計測する第１の計測手段と、
前記いずれかの関数について、前記第２の検出手段による前記いずれかの関数の第２の検出回数を計測する第２の計測手段と、
前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出手段と、
前記算出手段によって算出された依存度を出力する出力手段と、
を備えることを特徴とする情報抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムから情報を抽出する情報抽出プログラム、情報抽出方法、および情報抽出装置に関する。
【背景技術】
【０００２】
近年、情報機器の分野において、バッテリ持続時間を延長する観点、環境保全の観点、情報機器の発熱を抑えて信頼性を向上させる観点から、情報機器の省電力化が図られている。
【０００３】
情報機器のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の消費電力はクロック周波数を高くするにつれ増大するため、情報機器のＣＰＵのクロック周波数を低くすれば省電力化が可能である。しかしながら、クロック周波数を低くするとクロック周波数に律速される情報機器のパフォーマンスが低下してしまう。
【０００４】
ここで、ＣＰＵで実行されるアプリケーションプログラム（以下、単に「プログラム」という）は関数群から構成され、関数ごとにクロック周波数に律速される度合い（ＣＰＵクロック周波数依存度、以下、単に「依存度」という）が異なる。従って、クロック周波数に律速される関数（依存度の高い関数）は高いクロック周波数で実行し、クロック周波数に律速されない関数（依存度の低い関数）は低いクロック周波数で実行すれば、情報機器のパフォーマンスを低下させずに省電力化できる。
【０００５】
従来、依存度算出の技術として、プログラムのソースコード内の各関数の前後に関数の実行時間を算出する命令を書き込んでおき、ＣＰＵのクロック周波数を変更したときの実行時間の変化の割合を調べて、依存度として算出する技術がある（例えば、下記非特許文献１参照）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】堀田  義彦，  佐藤  三久，  木村  英明，  松岡  聡，  朴  泰祐，  高橋  大介，“ＰＣクラスタにおける電力実行プロファイル情報を用いたＤＶＳ制御による電力性能の最適化”，情報処理学会論文誌  コンピューティングシステム，  Ｖｏｌ．４７，  Ｎｏ．ＳＩＧ１２（ＡＣＳ  １５），  ｐｐ．  ２７２−２８４，  （２００６）．
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、ソースコードに命令を書き込む必要があるため、ソースコードに手を加えられないプログラムには適用できず、依存度を算出できないという問題があった。ソースコードに手を加えられないプログラムとは、例えば、他者による改変を防ぐためにバイナリ形式で提供されているプログラムである。
【０００８】
従って、従来では、プログラム内の関数の依存度が分からず、関数ごとにクロック周波数を変更できないため、一様なクロック周波数でプログラム全体を実行していた。
【０００９】
そのため、例えば、低いクロック周波数で実行してもパフォーマンスが下がらない関数がプログラム内に存在するにもかかわらず、一様に高いクロック周波数でプログラム全体を実行してしまい消費電力が多くなるという問題があった。また、例えば、高いクロック周波数で実行しなければパフォーマンスが下がる関数がプログラム内に存在するにもかかわらず、一様に低いクロック周波数でプログラム全体を実行してしまいパフォーマンスが悪くなるという問題があった。
【００１０】
１つの側面では、本発明は、アプリケーションプログラム内の関数ごとにクロック周波数の変化による実行時間の変化の度合い（依存度）を特定することができる情報抽出プログラム、情報抽出方法、および情報抽出装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの案では、第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとにプログラム内の関数群のうちの実行中の関数を検出し、第１のクロック周波数とは異なる第２のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに関数群のうちの実行中の関数を検出し、関数群のうちのいずれかの関数について、該関数の第１の検出回数を計測し、該関数の第２の検出回数を計測し、第１の検出回数から第２の検出回数への変化量に基づいて、クロック周波数の変化による該関数の実行時間の変化の度合いを示す依存度を算出し、算出された依存度を出力する情報抽出プログラム、情報抽出方法、および情報抽出装置を用いる。
【発明の効果】
【００１２】
本発明にかかる情報抽出プログラム、情報抽出方法、および情報抽出装置によれば、アプリケーションプログラム内の関数ごとにクロック周波数の変化による実行時間の変化の度合い（依存度）を特定することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、関数のクロック周波数依存度の算出の内容を示す説明図である。
【図２】図２は、情報抽出装置のハードウェア構成を示すブロック図である。
【図３】図３は、依存度テーブルの記憶内容を示す説明図である。
【図４】図４は、割当テーブルの記憶内容を示す説明図である。
【図５】図５は、アドレステーブルの記憶内容を示す説明図である。
【図６】図６は、特定情報テーブルの記憶内容を示す説明図である。
【図７】図７は、プロファイルテーブルの記憶内容を示す説明図である。
【図８】図８は、周波数候補テーブルの記憶内容を示す説明図である。
【図９】図９は、情報抽出装置の機能的構成を示す機能ブロック図である。
【図１０】図１０は、情報抽出装置による依存度の算出の内容を示す説明図である。
【図１１】図１１は、特定情報の内容を示す説明図である。
【図１２】図１２は、特定情報を用いてサンプリング回数を計測する具体例を示す説明図である。
【図１３】図１３は、プログラムの測定の内容を示す説明図である。
【図１４】図１４は、関数実行時のクロック周波数の制御の内容を示す説明図である。
【図１５】図１５は、依存度算出処理の詳細を示すフローチャートである。
【図１６】図１６は、プログラム実行処理の詳細を示すフローチャートである。
【図１７】図１７は、割当テーブル作成処理の詳細を示すフローチャートである。
【図１８】図１８は、クロック周波数制御処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本発明の実施の形態にかかる情報抽出プログラム、情報抽出方法、および情報抽出装置を詳細に説明する。
【００１５】
（関数のクロック周波数依存度の算出の内容）
まず、図１を用いて関数のクロック周波数依存度の算出の内容を示す説明図について説明する。図１は、関数のクロック周波数依存度の算出の内容を示す説明図である。ここで、クロック周波数依存度とは、関数がＣＰＵ１０１のクロック周波数によってどの程度律速されるかを示す度合いであり、クロック周波数の変化による関数の実行時間（処理効率）の変化の度合いとして算出される。
【００１６】
図１において、情報抽出装置１００は、自装置のＣＰＵ１０１のクロック周波数を変更可能な装置である。例えば、ＣＰＵ１０１のクロック周波数を変更可能な装置としては、サーバ、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、携帯端末が挙げられる。
【００１７】
情報抽出装置１００の主記憶装置１０２には、プログラムＸが保持されている。プログラムＸとは、依存度の算出対象となる関数を含むプログラムであって、プログラム実行時には、情報抽出装置１００がＣＰＵ１０１のクロック周波数を制御することにより省電力化される対象となるプログラムである。ここでは、プログラムＸは、例として関数Ａおよび関数Ｂから構成されるプログラムであるとする。
【００１８】
さらに、情報抽出装置１００の記憶装置１０３には、閾値が記憶されている。閾値とは、関数の実行時に、低周波数のクロック周波数（以下、「低クロック周波数」という）でＣＰＵ１０１を動作させるか、高周波数のクロック周波数（以下、「高クロック周波数」という）でＣＰＵ１０１を動作させるかを判定する境界となる値である。この閾値は予め情報抽出装置１００のユーザによって設定される。
【００１９】
ただし、情報抽出装置１００の記憶装置１０３には、閾値を記憶せずに、依存度に対応するＣＰＵ１０１のクロック周波数と依存度とを対応付けて保持するテーブル（以下、「周波数候補テーブル」という）を記憶してもよい。周波数候補テーブルでは、高クロック周波数と低クロック周波数だけではなく、依存度に合わせて複数のクロック周波数の候補を保持してもよい。
【００２０】
ここで、情報抽出装置１００は、プログラムＸのソースコードに変更を加えることなしに、プログラムＸを構成する関数Ａおよび関数Ｂのクロック周波数依存度を算出する。まず、情報抽出装置１００は、ＣＰＵ１０１を２種類のクロック周波数で動作させた場合のそれぞれの場合において、タイムベースサンプリングを用いて関数ごとの実行時間を計測する。
【００２１】
具体的には、タイムベースサンプリングでは、ＣＰＵ１０１が実行している関数を特定する特定情報を所定時間間隔（以下、「サンプリング間隔」という）で取得することにより、実行中の関数を検出する（以下、「サンプリング」という）。そして、関数ごとに検出回数（以下、「サンプリング回数」という）を計測する。サンプリングは所定時間ごとに行われているため、サンプリング回数は、各関数の実行時間（または処理効率）を示す値として採用することができる。従って、情報抽出装置１００は、関数ごとの実行時間を間接的に計測することができる。
【００２２】
プログラムＸを構成する関数Ａおよび関数Ｂのクロック周波数依存度の算出では、情報抽出装置１００は、まず任意の周波数１（以下、「サンプリング条件１」という）がＣＰＵ１０１のクロック周波数として設定されている状態において（１）プログラムＸを実行する。プログラムＸの実行後、情報抽出装置１００は、（２）実行中の関数がプログラムＸ内のどの関数であるかを、所定時間間隔でサンプリングし、関数ごとにサンプリング回数を計測する。ここでは、関数Ａは４回サンプリングされ、関数Ｂは２回サンプリングされたとする。
【００２３】
次に、情報抽出装置１００は、周波数１とは異なる値である周波数２（以下、「サンプリング条件２」という）へとＣＰＵ１０１のクロック周波数を変更した状態において（１）プログラムＸを実行する。プログラムＸの実行後、情報抽出装置１００は、（２）実行中の関数がプログラムＸ内のどの関数であるかを所定時間間隔でサンプリングし、関数ごとにサンプリング回数を計測する。ここでは、関数Ａは２回サンプリングされ、関数Ｂは２回サンプリングされたとする。
【００２４】
クロック周波数を変化させる前後でのサンプリング回数の変化量は、関数の実行時間（処理効率）の変化量を示している。従って、情報抽出装置１００は、サンプリング回数の変化量に基づき、クロック周波数の変化による実行時間（処理効率）の変化の度合い（すなわち、上述したクロック周波数依存度、以下では単に「依存度」という）を関数ごとに算出することができる。これにより、情報抽出装置１００は、ソースコードに手を加えることなしに依存度を算出することができる。
【００２５】
ここで、関数Ａは、クロック周波数の変化前後でサンプリング回数が変化したため、依存度の高い関数であると分かる。詳細な算出式は後述するが、ここでは、仮に関数Ａの依存度は１００％であったとする。一方、関数Ｂは、クロック周波数の変化前後でサンプリング回数が変化しないため、依存度の低い関数であると分かる。詳細な算出式は後述するが、ここでは、仮に関数Ｂの依存度は０％であったとする。
【００２６】
このように依存度を算出した情報抽出装置１００は、（３）関数を実行する際にＣＰＵ１０１のクロック周波数として設定するべき周波数を、関数ごとに割り当てる。割り当てられる周波数は上述した閾値（または周波数候補テーブル）を参照して決定される。
【００２７】
ここでは、図１に示すように閾値が５０％であったとする。関数Ａは閾値より大きい依存度の関数であるから、関数Ａには高クロック周波数が割り当てられる。一方、関数Ｂは閾値以下の依存度の関数であるから、関数Ｂには低クロック周波数が割り当てられる。そして、情報抽出装置１００は、各関数に割り当てられたクロック周波数（以下、「割当クロック周波数」という）を保持するテーブル（以下、「割当テーブル」という）として主記憶装置１０２に記憶する。
【００２８】
その後、情報抽出装置１００において、あらたにプログラムＸを実行する際には、割当テーブルを参照して、実行中の関数に対応する割当クロック周波数へと、ＣＰＵ１０１のクロック周波数を動的に変更させる。ここで、情報抽出装置１００は、上述した特定情報を取得して実行中の関数を検出するため、ソースコード中の関数部分にクロック周波数を変更する命令を書き込まなくても、実行中の関数に対応したクロック周波数へとＣＰＵ１０１のクロック周波数を変更できる。
【００２９】
このように、情報抽出装置１００は、特定情報を取得することにより実行中の関数を検出し、実行中の関数に対応する割当クロック周波数へとＣＰＵ１０１のクロック周波数を変更する。これにより、情報抽出装置１００は、プログラムのソースコードに手を加えることなしに、ＣＰＵ１０１のクロック周波数を消費電力がより小さくなるクロック周波数へと動的に設定し、クロック周波数を低くすることによる性能の低下を抑えつつ、省電力化を図ることができる。
【００３０】
（情報抽出装置のハードウェア構成例）
次に、図２を用いて情報抽出装置のハードウェア構成例について説明する。
【００３１】
図２は、情報抽出装置のハードウェア構成例を示すブロック図である。図２において、情報抽出装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、主記憶装置１０２と、記憶装置１０３と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０４と、を備えている。また、各構成部は、バス１１０によってそれぞれ接続されている。
【００３２】
ＣＰＵ１０１は、情報抽出装置１００全体の制御を司る。主記憶装置１０２は、情報抽出プログラムを保持している。そして、主記憶装置１０２は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を保持している。
【００３３】
また、主記憶装置１０２は、依存度の算出対象となる関数を含むプログラム（例えば、上述したプログラムＸ）と割当テーブル１０２ａを保持している。そして、記憶装置１０３は、依存度テーブル１０３ａと、アドレステーブル１０３ｂと、特定情報テーブル１０３ｃと、プロファイルテーブル１０３ｄと、周波数候補テーブル１０３ｅと、を記憶している。記憶装置１０３としては、不揮発性メモリやフラッシュメモリ、ハードディスクドライブなどを採用することができる。
【００３４】
インターフェース（以下、「Ｉ／Ｆ」と略する。）１０４は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１２０に接続され、このネットワーク１２０を介して他の装置に接続される。そして、Ｉ／Ｆ１０４は、ネットワーク１２０と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０４には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００３５】
（依存度テーブルの記憶内容）
次に、図２に示した依存度テーブル１０３ａの記憶内容について説明する。
【００３６】
図３は、依存度テーブルの記憶内容を示す説明図である。図３に示すように、依存度テーブル１０３ａは、関数名項目のそれぞれに対応付けて、ＣＰＵ動作周波数依存度項目を有し、関数名ごとにレコードを構成する。
【００３７】
関数名項目には、上述したプログラムＸを構成する関数群のそれぞれの関数名が記憶される。ただし、関数名はプログラム内で関数に付与されている名称でなくてもよく、情報抽出装置１００が関数を一意に特定する名称を任意に付与してもよい。関数名については、以下のテーブルにおいても同様である。ＣＰＵ動作周波数依存度項目には、関数がＣＰＵのクロック周波数によってどの程度律速されるかを示す度合いである依存度が記憶される。
【００３８】
（割当テーブルの記憶内容）
次に、図２に示した割当テーブル１０２ａの記憶内容について説明する。
【００３９】
図４は、割当テーブルの記憶内容を示す説明図である。図４に示すように、割当テーブル１０２ａは、関数名項目のそれぞれに対応付けて、割当クロック周波数項目を有し、関数名ごとにレコードを構成する。
【００４０】
関数名項目には、上述したプログラムを構成する関数群のそれぞれの関数名が記憶される。割当クロック周波数項目には、関数の実行中にＣＰＵのクロック周波数として設定すべき割当クロック周波数が記憶される。例えば、割当テーブル１０２ａでは、上述の依存度テーブル１０３ａに基づき、依存度の低い関数に対しては低クロック周波数が割当クロック周波数として記憶され、依存度の高い関数に対しては高クロック周波数が割当クロック周波数として記憶される。
【００４１】
（アドレステーブルの記憶内容）
次に、図２に示したアドレステーブル１０３ｂの記憶内容について説明する。アドレステーブル１０３ｂは情報抽出装置１００のユーザによって予め保持されている。
【００４２】
図５は、アドレステーブルの記憶内容を示す説明図である。図５に示すように、アドレステーブル１０３ｂは、関数名項目のそれぞれに対応付けて、関数のアドレス範囲項目を有し、関数名ごとにレコードを構成する。
【００４３】
関数名項目には、上述したプログラムを構成する関数群のそれぞれの関数名が記憶される。関数のアドレス範囲項目には、ＯＳに用意されたコマンドによって特定した関数の命令アドレスの範囲が記憶される。例えば、ＯＳがＵＮＩＸ（登録商標）であるＰＣにおいては、ｎｍコマンドを用いることにより関数の命令アドレスの範囲を特定できる。命令アドレスとは、ＣＰＵ１０１が実行する命令が主記憶上へロードされた際の主記憶上の格納位置を示す値である。
【００４４】
（特定情報テーブルの記憶内容）
次に、図２に示した特定情報テーブル１０３ｃの記憶内容について説明する。
【００４５】
図６は、特定情報テーブルの記憶内容を示す説明図である。図６に示すように、特定情報テーブル１０３ｃは、時間項目のそれぞれに対応付けて、特定情報項目と、関数名項目と、を有し、サンプリングを行った時間ごとにレコードを構成する。
【００４６】
時間項目には、上述したサンプリングを行った時間が記憶される。特定情報項目には、関数名を一意に特定するための特定情報が記憶される。特定情報とは、ＰＩＤ（Ｐｒｏｃｅｓｓ  ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）および命令アドレスである。関数名項目には、特定情報により特定された関数の関数名が記憶される。
【００４７】
（プロファイルテーブルの記憶内容）
次に、図２に示したプロファイルテーブル１０３ｄの記憶内容について説明する。
【００４８】
図７は、プロファイルテーブルの記憶内容を示す説明図である。図７に示すように、プロファイルテーブル１０３ｄは、関数名項目のそれぞれに対応付けて、プロファイル結果項目を有し、関数名ごとにレコードを構成する。
【００４９】
関数名項目には、上述したプログラムを構成する関数群のそれぞれの関数名が記憶される。プロファイル結果項目には、関数ごとのサンプリング回数が記憶される。関数ごとのサンプリング回数は、上述した特定情報テーブル１０３ｃにおいて、関数ごとのレコードの数を計測することで算出できる。
【００５０】
（周波数候補テーブルの記憶内容）
次に、図２に示した周波数候補テーブル１０３ｅの記憶内容について説明する。周波数候補テーブル１０３ｅは情報抽出装置１００のユーザによって予め保持されている。
【００５１】
図８は、周波数候補テーブルの記憶内容を示す説明図である。図８に示すように、周波数候補テーブル１０３ｅは、依存度範囲項目のそれぞれに対応付けて、依存度範囲項目と、周波数候補項目と、を有し、依存度範囲ごとにレコードを構成する。
【００５２】
依存度範囲項目には、上述した依存度の範囲が記憶される。周波数候補項目には、依存度の範囲ごとに、関数に割り当てる割当クロック周波数が記憶される。
【００５３】
（情報抽出装置の機能的構成）
次に、図９を用いて情報抽出装置の機能的構成例について説明する。
【００５４】
図９は、情報抽出装置の機能的構成例を示す機能ブロック図である。図９に示すように、情報抽出装置１００は、第１の検出部９０１と、第２の検出部９０２と、第１の計測部９０３と、第２の計測部９０４と、算出部９０５と、出力部９０６と、判定部９０７と、格納部９０８と、第３の検出部９０９と、設定部９１０と、を備える。また、各機能部（第１の検出部９０１〜設定部９１０）の処理結果は、特に指定する場合を除いて、例えば、記憶装置１０３に記憶される。
【００５５】
第１の検出部９０１は、第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとにプログラム内の関数群のうちの実行中の関数を検出する機能を有する。
【００５６】
ここで、プログラムとは、上述したプログラムＸである。プロセッサとは、上述したＣＰＵ１０１である。第１のクロック周波数とは、サンプリングの際にＣＰＵ１０１に設定されるクロック周波数であり、例えば、上述したサンプリング条件１である。所定時間とは、上述したサンプリング間隔である。第１のクロック周波数と所定時間は、情報抽出装置１００のユーザによって、予め記憶装置１０３に保持されている。
【００５７】
具体的には、例えば、第１の検出部９０１は、周波数１で動作中のＣＰＵ１０１において、上述したＰＩＤおよび命令アドレスを検出する。これにより、第１の検出部９０１は、検出したＰＩＤおよび命令アドレスを上述したアドレス範囲と比較することにより、実行中の関数がプログラムＸを構成する関数群のうちのどの関数であるかを検出できる。
【００５８】
第１の検出部９０１は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００５９】
第２の検出部９０２は、第１のクロック周波数とは異なる第２のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに関数群のうちの実行中の関数を検出する機能を有する。
【００６０】
ここで、第２のクロック周波数とは、サンプリングの際にＣＰＵに設定されるクロック周波数であり、第１のクロック周波数と異なる周波数である。例えば、上述したサンプリング条件２である。所定時間とは、上述したサンプリング間隔であり、第１の検出部９０１のサンプリング間隔と同一値である。第２のクロック周波数と所定時間とは、情報抽出装置１００のユーザによって、予め記憶装置１０３に保持されている。
【００６１】
具体的には、例えば、第２の検出部９０２は、周波数２で動作中のＣＰＵ１０１において実行中の関数について、上述したＰＩＤおよび命令アドレスを検出する。これにより、第２の検出部９０２は、検出したＰＩＤおよび命令アドレスを上述したアドレス範囲と比較することにより、実行中の関数がプログラムＸを構成する関数群のうちのどの関数であるかを検出できる。
【００６２】
第２の検出部９０２は、具体的には、例えば、図２に示した主記憶装置１０２に記憶されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００６３】
第１の計測部９０３は、関数群のうちのいずれかの関数について、第１の検出部９０１による該関数の第１の検出回数を計測する機能を有する。ここで、いずれかの関数とは、プログラムＸ内の関数であって、依存度を算出する対象となる関数である。
【００６４】
具体的には、例えば、第１の計測部９０３は、プログラムＸの終了までに、プログラムＸ内の関数群のうちの依存度を算出する対象となる関数を第１の検出部９０１が検出した回数を計測する。これにより、第１の計測部９０３は、第１のクロック周波数で動作中のＣＰＵ１０１における依存度を算出する対象となる関数のサンプリング回数を計測することができる。
【００６５】
第１の計測部９０３は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００６６】
第２の計測部９０４は、いずれかの関数について、第２の検出部９０２による該関数の第２の検出回数を計測する機能を有する。ここで、いずれかの関数とは、プログラムＸ内の関数であって、依存度を算出する対象となる関数である。
【００６７】
具体的には、例えば、第２の計測部９０４は、プログラムＸの終了までに、プログラムＸ内の関数群のうちの依存度を算出する対象となる関数を第２の検出部９０２が検出した回数を計測する。これにより、第２の計測部９０４は、第２のクロック周波数で動作中のＣＰＵ１０１における依存度を算出する対象となる関数のサンプリング回数を計測することができる。
【００６８】
第２の計測部９０４は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００６９】
算出部９０５は、第１の検出回数から第２の検出回数への変化量に基づいて、クロック周波数の変化によるいずれかの関数の実行時間の変化の度合いを示す依存度を算出する機能を有する。ここで、依存度とは、関数がＣＰＵ１０１のクロック周波数によってどの程度律速されるかを示す度合いである。
【００７０】
具体的には、算出部９０５は、第１のクロック周波数の逆数を第１のクロック周期として算出し、第２のクロック周波数の逆数を第２のクロック周期として算出しておく。そして、算出部９０５は、（（第１の検出回数−第２の検出回数）／第２の検出回数）／（（第１のクロック周期−第２のクロック周期）／第２のクロック周期））×１００の式により、依存度を算出する。これにより、算出部９０５は、依存度を算出する対象となる関数の依存度を算出することができる。
【００７１】
算出部９０５は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００７２】
出力部９０６は、算出部９０５によって算出された依存度を出力する機能を有する。具体的には、出力部９０６は、関数と依存度とをディスプレイ（不図示）に出力する。これにより、ユーザは、出力された関数と依存度とからプログラムＸ内の関数の依存度を把握することができる。
【００７３】
出力部９０６は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００７４】
判定部９０７は、算出部９０５によって算出された依存度が閾値以下であるか否かを判定する機能を有する。ここで、閾値とは、関数の実行時に、低クロック周波数でＣＰＵ１０１を動作させるか、高クロック周波数でＣＰＵ１０１を動作させるかを判定する境界となる値である。閾値は予め記憶装置１０３に保持されている。
【００７５】
判定部９０７は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００７６】
具体的には、例えば、判定部９０７は、算出部９０５によって算出された依存度が閾値以下であるか否かを判定する。これにより、判定部９０７は、関数が、依存度が低いため低クロック周波数でＣＰＵ１０１を動作させても処理効率が大幅に下がらず電力消費を少なくできる関数であるか、依存度が高いため低クロック周波数でＣＰＵ１０１を動作させると処理効率が下がる関数であるか、を判定することができる。
【００７７】
格納部９０８は、判定部９０７によって依存度が閾値以下であると判定された場合に、所定の低周波数の割当周波数をいずれかの関数と関連付けて、割当テーブル１０２ａに格納し、判定部９０７によって依存度が閾値より大きいと判定された場合に、所定の高周波数の割当周波数をいずれかの関数と関連付けて、割当テーブル１０２ａに格納する機能を有する。
【００７８】
ここで、所定の低周波数の割当クロック周波数とは、依存度の低い関数の実行時にＣＰＵ１０１のクロック周波数として設定する割当クロック周波数である。所定の高周波数の割当クロック周波数とは、依存度の高い関数の実行時にＣＰＵ１０１のクロック周波数として設定する割当クロック周波数である。所定の低クロック周波数および所定の高クロック周波数は予め記憶装置１０３に保持されている。
【００７９】
具体的には、例えば、格納部９０８は、関数に割り当てるべき割当クロック周波数を関数と関連付けて割当テーブル１０２ａに格納することができる。これにより、格納部９０８は、高周波数の割当クロック周波数と低周波数の割当クロック周波数とのうち、関数に割り当てるべき割当クロック周波数を関数と関連付けて割当テーブル１０２ａに格納することができる。
【００８０】
また、格納部９０８は、依存度ごとに対応する割当クロック周波数を保持するテーブルに基づいて、算出部９０５によって算出された依存度に対応する割当クロック周波数を任意の関数と関連付けて割当テーブル１０２ａに格納する機能を有する。依存度ごとに対応する割当クロック周波数を保持するテーブルとは、上述した周波数候補テーブル１０３ｅである。
【００８１】
具体的には、例えば、格納部９０８は、算出部９０５によって算出された依存度が、テーブルのどの範囲に含まれる依存度であるかに基づき、対応する割当クロック周波数を抽出し、抽出した割当クロック周波数と関数とを関連付けて割当テーブル１０２ａに格納する。これにより、格納部９０８は、関数に割り当てるべき割当クロック周波数の候補を複数用意しておき、その候補のうちから依存度に基づき抽出した割当クロック周波数を関数と関連付けて割当テーブル１０２ａに格納することができる。
【００８２】
格納部９０８は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、および、記憶装置１０３により、その機能を実現する。
【００８３】
第３の検出部９０９は、プログラムをあらたに実行した場合において、関数群のうちの実行中の関数を検出する機能を有する。ここで、あらたに実行したプログラムとは、上述したサンプリングのためのプログラムＸの実行の終了後に、再度実行されたプログラムＸである。
【００８４】
具体的には、例えば、第３の検出部９０９は、実行中の関数について、上述したＰＩＤおよび命令アドレスを検出する。これにより、第３の検出部９０９は、検出したＰＩＤおよび命令アドレスを上述したアドレス範囲と比較することにより、実行中の関数がプログラムＸを構成する関数群のうちのどの関数であるかを検出できる。
【００８５】
第３の検出部９０９は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００８６】
設定部９１０は、前記割当テーブル１０２ａに基づいて、第３の検出部９０９によって検出された関数に対応する割当クロック周波数をプロセッサのクロック周波数として設定する機能を有する。
【００８７】
具体的には、例えば、設定部９１０は、割当テーブル１０２ａに基づき、実行中の関数に対応する割当クロック周波数をＣＰＵ１０１のクロック周波数として設定する。これにより、設定部９１０は、実行中の関数に対して設定すべきクロック周波数をＣＰＵ１０１に設定できる。例えば、設定部９１０は、依存度の低い関数の実行中は低周波数の割当クロック周波数でＣＰＵ１０１を動作させ、省電力化を図ることができる。
【００８８】
設定部９１０は、具体的には、例えば、図２に示した主記憶装置１０２に保持されたプログラムをＣＰＵ１０１に実行させることにより、その機能を実現する。
【００８９】
（依存度の算出の内容）
次に、図１０〜図１３を用いて、情報抽出装置による依存度の算出の内容について説明する。
【００９０】
図１０は、情報抽出装置による依存度の算出の内容を示す説明図である。依存度を算出する場合には、情報抽出装置１００は、第１の計測部９０３および第２の計測部９０４によってサンプリングを行い、特定情報を計測する。次に、情報抽出装置１００は、計測された特定情報に基づき、算出部９０５によって依存度を算出する。そして、算出された依存度が依存度テーブル１０３ａに格納される。
【００９１】
図１１は、特定情報の内容を示す説明図である。特定情報には、ＰＩＤと命令アドレスが含まれている。ＰＩＤとは、実行中のプログラムごとにＣＰＵ１０１から一意に割り振られる識別符号であり、例えば、同一のプログラムが同時に複数実行されている場合であってもそれぞれの実行中のプログラムを識別することができる。命令アドレスは、実行中の命令の主記憶上の格納位置を示す値であり、この特定情報を用いて情報抽出装置１００はサンプリング回数を計測する。
【００９２】
図１２は、特定情報を用いてサンプリング回数を計測する具体例を示す説明図である。ここで、情報抽出装置１００は、ｔ、ｔ＋１、ｔ＋２、ｔ＋３のそれぞれの時間において特定情報を取得する。また、情報抽出装置１００の記憶装置１０３には、予めプログラムＸを構成する関数のアドレス範囲を保持したアドレステーブル１０３ｂが記憶されている。
【００９３】
ここで、アドレステーブル１０３ｂから、特定情報内の命令アドレスに対応する関数を抽出することにより、実行中の関数がどの関数であるかを判別することができる。また、ここでは、実行中のプログラムは１つだけであったが、同時に実行されている他のプログラムがあっても、特定情報内のＰＩＤを用いることによりプログラムごとにサンプリングできるため、他のプログラムのサンプリング回数を誤って合算することを防ぐことができる。
【００９４】
このように、プログラムＸにおいて実行中の関数をサンプリングし、特定情報テーブル１０３ｃとして記憶しておくことができる。また、特定情報テーブル１０３ｃに基づき関数ごとにサンプリング回数を計測することができる。そして、情報抽出装置１００は、このサンプリング回数を関数ごとに保持するプロファイルテーブル１０３ｄを作成する。
【００９５】
次に、プロファイルテーブル１０３ｄに基づく依存度の算出の内容について説明する。図１３は、プログラムの測定の内容を示す説明図である。ここでは、関数Ａを５０００回、関数Ｂを５０００回実行すると終了するプログラムＸを例に挙げる。また、ＣＰＵ１０１のクロック周波数を１［ＧＨｚ］（クロック周期は１［ｎｓ］）および２［ＧＨｚ］（クロック周期は０．５［ｎｓ］）に変更した場合のサンプリング回数を用いて依存度を算出するとする。
【００９６】
図１３において、ＡおよびＢは関数名を示し、関数名の下に記した時間は、関数の１回の実行時間である。従って、１［ＧＨｚ］時では、このプログラムＸの実行時間は１５０［ｓｅｃ］となり、２［ＧＨｚ］時では１００［ｓｅｃ］となる。
【００９７】
この例において、各クロック周波数において１［ｍｓｅｃ］ごとのサンプリングを行う。１［ＧＨｚ］時においては、約１５００００回サンプリングが行われ、関数Ａは約１０００００回、関数Ｂは約５００００回サンプリングされる。一方、２［ＧＨｚ］時においては、約１０００００回サンプリングが行われ、関数Ａは約５００００回、関数Ｂは約５００００回サンプリングされる。
【００９８】
このサンプリング回数を用いて上述した依存度の算出式に基づいて依存度を算出すると、関数Ａの依存度は、以下のようになる。
【００９９】
［｛（１０００００−５００００）／５００００｝／｛（１−０．５）／０．５｝］×１００＝１００［％］
【０１００】
また、関数Ｂの依存度は、以下のようになる。
【０１０１】
［｛（５００００−５００００）／５００００｝／｛（１−０．５）／０．５｝］×１００＝０［％］
【０１０２】
次に、図１４を用いて、作成した依存度テーブル１０３ａに基づき関数実行時のクロック周波数の制御の内容について説明する。
【０１０３】
図１４は、関数実行時のクロック周波数の制御の内容を示す説明図である。情報抽出装置１００は、格納部９０８により、依存度テーブル１０３ａに基づき関数の実行時にＣＰＵ１０１のクロック周波数として設定する割当クロック周波数を決定する。
【０１０４】
例えば、割当クロック周波数を高割当クロック周波数と低割当クロック周波数とのどちらかとする場合、依存度に対する閾値を設定しておき、閾値以下か否かによって関数に対応する割当クロック周波数を決定する。そして、割当テーブル１０２ａに関数と割当クロック周波数とを関連付けて格納し、割当テーブル１０２ａを作成する。
【０１０５】
割当テーブル１０２ａの作成後、再度プログラムＸを実行する場合には、情報抽出装置１００は、第３の検出部９０９によって実行中の関数を検出する。そして、実行中の関数に対応する割当クロック周波数を割当テーブル１０２ａから抽出し、抽出した割当クロック周波数を設定部９１０によりＣＰＵ１０１のクロック周波数として設定する。
【０１０６】
このようにして、情報抽出装置１００は、実行中の関数に対応する割当クロック周波数によってＣＰＵ１０１を動作させることができる。また、情報抽出装置１００は、一定時間ごとに実行中の関数を検出し、実行中の関数に対応する割当クロック周波数をＣＰＵ１０１のクロック周波数として設定する。従って、関数の実行終了または実行開始に合わせて、クロック周波数を動的に変更していくことができる。
【０１０７】
次に、図１５に示した依存度算出処理の詳細について説明する。
【０１０８】
図１５は、依存度算出処理の詳細を示すフローチャートである。図１５に示すように、ＣＰＵ１０１は、クロック周波数を変更する変更前後において、タイムベースサンプリングによって、プログラムＸ内の関数のサンプリング回数を測定する（ステップＳ１５０１）。次に、ＣＰＵ１０１は、上述した算出式を用いて、プログラムＸ内の関数の依存度を算出して（ステップＳ１５０２）、依存度算出処理を終了する。
【０１０９】
これにより、関数のクロック周波数への依存度が算出され、依存度テーブル１０３ａが作成される。
【０１１０】
次に、図１６に示したプログラム実行処理の詳細について説明する。
【０１１１】
図１６は、プログラム実行処理の詳細を示すフローチャートである。図１６に示すように、ＣＰＵ１０１は、後述する割当テーブル作成処理によって、関数ごとに対応する割当クロック周波数を保持する割当テーブル１０２ａを作成する（ステップＳ１６０１）。次に、ＣＰＵ１０１は、プログラムＸを開始し（ステップＳ１６０２）、後述するクロック周波数制御処理によって、一定時間ごとにＣＰＵ１０１のクロック周波数を制御する（ステップＳ１６０３）。そして、プログラム実行処理を終了する。
【０１１２】
これにより、ＣＰＵ１０１は、関数ごとに割当クロック周波数を関連付けて保持する割当テーブル１０２ａを作成することができる。また、所定時間ごとに実行中の関数を検出し、割当テーブル１０２ａに基づき、検出した関数に対応付けられた割当クロック周波数をＣＰＵ１０１のクロック周波数として設定することができる。
【０１１３】
次に、図１７に示した割当テーブル作成処理の詳細について説明する。
【０１１４】
図１７は、割当テーブル作成処理の詳細を示すフローチャートである。図１７に示すように、まず、ＣＰＵ１０１は、依存度が閾値より大きいか否かを判定する（ステップＳ１７０１）。依存度が閾値より大きい場合は（ステップＳ１７０１：Ｙｅｓ）、ＣＰＵ１０１は、割当クロック周波数として高クロック周波数を選択する（ステップＳ１７０２）。一方、依存度が閾値以下の場合は（ステップＳ１７０１：Ｎｏ）、ＣＰＵ１０１は、割当クロック周波数として低クロック周波数を選択する（ステップＳ１７０３）。
【０１１５】
次に、ＣＰＵ１０１は、選択された割当クロック周波数を割当テーブル１０２ａに格納する（ステップＳ１７０４）。そして、ＣＰＵ１０１は、依存度テーブル１０３ａに依存度が保持されている関数のうち割当クロック周波数が未決定の関数があるか否か判定する（ステップＳ１７０５）。割当クロック周波数が未決定の関数がある場合には（ステップＳ１７０５：Ｙｅｓ）、ＣＰＵ１０１は、ステップＳ１７０１に戻り、未決定の関数について割当クロック周波数を決定する。一方、割当クロック周波数が未決定の関数がない場合には（ステップＳ１７０５：Ｎｏ）、割当テーブル作成処理を終了する。
【０１１６】
これにより、関数ごとに割当クロック周波数を関連付けて保持する割当テーブル１０２ａを作成することができる。
【０１１７】
次に、図１８に示したクロック周波数制御処理の詳細について説明する。
【０１１８】
図１８は、クロック周波数制御処理の詳細を示すフローチャートである。図１８に示すように、ＣＰＵ１０１は、サンプリングした特定情報から実行中の関数を検出する（ステップＳ１８０１）。次に、ＣＰＵ１０１は、検出した実行中の関数に対応する割当クロック周波数を、割当テーブル１０２ａから抽出する（ステップＳ１８０２）。
【０１１９】
そして、ＣＰＵ１０１は、ＣＰＵ１０１の現在のクロック周波数と、抽出した割当クロック周波数とが異なるか否かを判定する（ステップＳ１８０３）。現在のＣＰＵ１０１のクロック周波数と、抽出した割当クロック周波数とが同じ場合（ステップＳ１８０３：Ｎｏ）、クロック周波数制御処理を終了する。
【０１２０】
一方、現在のＣＰＵ１０１のクロック周波数と、抽出した割当クロック周波数とが異なる場合（ステップＳ１８０３：Ｙｅｓ）、ＣＰＵ１０１は、割当クロック周波数をＣＰＵ１０１のクロック周波数として設定して（ステップＳ１８０４）、クロック周波数制御処理を終了する。
【０１２１】
これにより、実行中の関数を検出し、割当テーブル１０２ａに基づき、検出した関数に対応付けられた割当クロック周波数をＣＰＵ１０１のクロック周波数として設定することができる。また、一定時間ごとに実行中の関数を検出しているため、実行中の関数が終了し、あらたな関数が実行された場合にも、あらたに実行された関数を検出して、動的にＣＰＵ１０１のクロック周波数を変更していくことができる。
【０１２２】
このように、上述した実施の形態では、情報抽出装置１００は、クロック周波数を変化させ、変化前後での関数の実行時間を測定して、クロック周波数の変化に対する実行時間の変化を調べて関数の依存度を算出する。これにより情報抽出装置１００は、ソースコードの不明なプログラム（例えば、他者からの改変を防ぐためにバイナリ形式で提供されるプログラム）に対しても、プログラム内の関数の依存度を算出することができる。
【０１２３】
一方、ソースコードに手を加えることが可能なプログラムであっても、プログラムのソースコードに手を加えることなしに関数の依存度を算出することができる。そのため、プログラマが手作業でソースコードに命令を書き込む必要がなく、書き込みに要していた時間や手間を削減することができる。また、書き込み時のヒューマンエラーを回避することができる。
【０１２４】
そして、情報抽出装置１００のユーザが記憶装置１０３に閾値（または周波数候補テーブル１０３ｅ）を保持しておくことで、情報抽出装置１００は、関数に対応付ける割当クロック周波数を自動的に決定し、割当テーブル１０２ａを作成することができる。そのため、割当テーブル１０２ａの作成に要する時間を削減することができる。また、予め閾値（または周波数候補テーブル１０３ｅ）が保持されていれば、情報抽出装置１００のユーザが依存度と割当クロック周波数の対応付けに詳しくなくても、割当テーブル１０２ａを作成することができる。
【０１２５】
また、情報抽出装置１００は、算出した依存度を出力する。そのため、情報抽出装置１００のユーザは、一律な基準に基づいて割当クロック周波数を決定するのではなく、出力された関数の依存度に基づいて、各関数の実行に最適な割当クロック周波数を関数ごとに決定することができる。
【０１２６】
ここで、最適なクロック周波数とは、最も消費電力の少なくなるクロック周波数を採用してもよいし、他のプログラムの処理効率を下げないように高クロック周波数を採用してもよい。
【０１２７】
そして、情報抽出装置１００は、特定情報から実行中の関数を検出し、主記憶装置１０２に保持された割当テーブル１０２ａに基づき、実行中の関数の依存度に対応した割当クロック周波数をＣＰＵ１０１に動的に設定していく。従って、プログラムに対して「関数を実行する際にクロック周波数を変更する」という命令を書き加えることができない場合であっても、情報抽出装置１００は、実行中の関数を検出しクロック周波数を変更することができる。
【０１２８】
さらに、情報抽出装置１００は、一定時間ごとに実行中の関数を検出しているため、実行中の関数が終了し、あらたな関数が実行された場合にも、あらたに実行された関数を検出して、動的にＣＰＵ１０１のクロック周波数を変更していくことができる。
【０１２９】
このように、情報抽出装置１００は、実行中の関数に対応した割当クロック周波数によってＣＰＵ１０１を動作させるようにしたため、依存度の低い関数の実行時には低クロック周波数でＣＰＵ１０１を動作させて省電力化を図ることができる。一方、依存度の高い関数の実行時には高クロック周波数でＣＰＵ１０１を動作させてパフォーマンスの低下を抑えることができる。
【０１３０】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１３１】
（付記１）第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出工程と、
前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出工程と、
前記関数群のうちのいずれかの関数について、前記第１の検出工程による前記いずれかの関数の第１の検出回数を計測する第１の計測工程と、
前記いずれかの関数について、前記第２の検出工程による前記いずれかの関数の第２の検出回数を計測する第２の計測工程と、
前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出工程と、
前記算出工程によって算出された依存度を出力する出力工程と、
をコンピュータに実行させることを特徴とする情報抽出プログラム。
【０１３２】
（付記２）前記算出工程によって算出された依存度が閾値以下であるか否かを判定する判定工程と、
前記判定工程によって依存度が閾値以下であると判定された場合に、所定の低周波数の割当クロック周波数を前記いずれかの関数と関連付けて、割当テーブルに格納し、前記判定工程によって依存度が閾値より大きいと判定された場合に、所定の高周波数の割当クロック周波数を前記いずれかの関数と関連付けて、前記割当テーブルに格納する格納工程と、
を前記コンピュータに実行させることを特徴とする付記１に記載の情報抽出プログラム。
【０１３３】
（付記３）前記依存度ごとに対応する割当クロック周波数を保持するテーブルに基づいて、前記算出工程によって算出された依存度に対応する割当クロック周波数を前記いずれかの関数と関連付けて割当テーブルに格納する格納工程を前記コンピュータに実行させることを特徴とする付記１に記載の情報抽出プログラム。
【０１３４】
（付記４）前記プログラムをあらたに実行した場合において、前記関数群のうちの実行中の関数を検出する第３の検出工程と、
前記割当テーブルに基づいて、前記第３の検出工程によって検出された関数に対応する前記割当クロック周波数を前記プロセッサのクロック周波数として設定する設定工程と、
を前記コンピュータに実行させることを特徴とする付記２または３に記載の情報抽出プログラム。
【０１３５】
（付記５）第１の検出手段と、第２の検出手段と、第１の計測手段と、第２の計測手段と、算出手段と、出力手段と、を備えるコンピュータが、
前記第１の検出手段により、第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出工程と、
前記第２の検出手段により、前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出工程と、
前記第１の計測手段により、前記関数群のうちのいずれかの関数について、前記第１の検出工程による前記いずれかの関数の第１の検出回数を計測する第１の計測工程と、
前記第２の計測手段により、前記いずれかの関数について、前記第２の検出工程による前記いずれかの関数の第２の検出回数を計測する第２の計測工程と、
前記算出手段により、前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出工程と、
前記出力手段により、前記算出工程によって算出された依存度を出力する出力工程と、
を実行することを特徴とする情報抽出方法。
【０１３６】
（付記６）判定手段と、格納手段と、をさらに備える前記コンピュータが、
前記判定手段により、前記算出工程によって算出された依存度が閾値以下であるか否かを判定する判定工程と、
前記格納手段により、前記判定工程によって依存度が閾値以下であると判定された場合に、所定の低周波数の割当クロック周波数を前記いずれかの関数と関連付けて、割当テーブルに格納し、前記判定工程によって依存度が閾値より大きいと判定された場合に、所定の高周波数の割当クロック周波数を前記いずれかの関数と関連付けて、前記割当テーブルに格納する格納工程と、
を実行することを特徴とする付記５に記載の情報抽出方法。
【０１３７】
（付記７）格納手段をさらに備える前記コンピュータが、
前記格納手段により、前記依存度ごとに対応する割当クロック周波数を保持するテーブルに基づいて、前記算出工程によって算出された依存度に対応する割当クロック周波数を前記いずれかの関数と関連付けて割当テーブルに格納する格納工程を実行することを特徴とする付記５に記載の情報抽出方法。
【０１３８】
（付記８）第３の検出手段と、設定手段と、をさらに備える前記コンピュータが、
前記検出手段により、前記プログラムをあらたに実行した場合において、前記関数群のうちの実行中の関数を検出する第３の検出工程と、
前記設定手段により、前記割当テーブルに基づいて、前記第３の検出工程によって検出された関数に対応する前記割当クロック周波数を前記プロセッサのクロック周波数として設定する設定工程と、
を実行することを特徴とする付記６または７に記載の情報抽出方法。
【０１３９】
（付記９）第１のクロック周波数で動作中のプロセッサによるプログラムの実行中において、所定時間ごとに前記プログラム内の関数群のうちの実行中の関数を検出する第１の検出手段と、
前記第１のクロック周波数とは異なる第２のクロック周波数で動作中の前記プロセッサによる前記プログラムの実行中において、前記所定時間ごとに前記関数群のうちの実行中の関数を検出する第２の検出手段と、
前記関数群のうちのいずれかの関数について、前記第１の検出手段による前記いずれかの関数の第１の検出回数を計測する第１の計測手段と、
前記いずれかの関数について、前記第２の検出手段による前記いずれかの関数の第２の検出回数を計測する第２の計測手段と、
前記第１の検出回数から前記第２の検出回数への変化量に基づいて、クロック周波数の変化による前記いずれかの関数の実行時間の変化の度合いを示す依存度を算出する算出手段と、
前記算出手段によって算出された依存度を出力する出力手段と、
を備えることを特徴とする情報抽出装置。
【０１４０】
（付記１０）前記算出手段によって算出された依存度が閾値以下であるか否かを判定する判定手段と、
前記判定手段によって依存度が閾値以下であると判定された場合に、所定の低周波数の割当クロック周波数を前記いずれかの関数と関連付けて、割当テーブルに格納し、前記判定手段によって依存度が閾値より大きいと判定された場合に、所定の高周波数の割当クロック周波数を前記いずれかの関数と関連付けて、前記割当テーブルに格納する格納手段と、
を備えることを特徴とする付記９に記載の情報抽出装置。
【０１４１】
（付記１１）前記依存度ごとに対応する割当クロック周波数を保持するテーブルに基づいて、前記算出手段によって算出された依存度に対応する割当クロック周波数を前記いずれかの関数と関連付けて割当テーブルに格納する格納手段を備えることを特徴とする付記９に記載の情報抽出装置。
【０１４２】
（付記１２）前記プログラムをあらたに実行した場合において、前記関数群のうちの実行中の関数を検出する第３の検出手段と、
前記割当テーブルに基づいて、前記第３の検出手段によって検出された関数に対応する前記割当クロック周波数を前記プロセッサのクロック周波数として設定する設定手段と、
を備えることを特徴とする付記１０または１１に記載の情報抽出装置。
【符号の説明】
【０１４３】
１００  情報抽出装置
Ｘ  プログラム
９０１  第１の検出部
９０２  第２の検出部
９０３  第１の計測部
９０４  第２の計測部
９０５  算出部
９０６  出力部
９０７  判定部
９０８  格納部
９０９  第３の検出部
９１０  設定部
【図１】
0005601236.tif 000002
【図２】
0005601236.tif 000003
【図３】
0005601236.tif 000004
【図４】
0005601236.tif 000005
【図５】
0005601236.tif 000006
【図６】
0005601236.tif 000007
【図７】
0005601236.tif 000008
【図８】
0005601236.tif 000009
【図９】
0005601236.tif 000010
【図１０】
0005601236.tif 000011
【図１１】
0005601236.tif 000012
【図１２】
0005601236.tif 000013
【図１３】
0005601236.tif 000014
【図１４】
0005601236.tif 000015
【図１５】
0005601236.tif 000016
【図１６】
0005601236.tif 000017
【図１７】
0005601236.tif 000018
【図１８】
0005601236.tif 000019