(57)【要約】【課題】通常のプログラムの実行に与える影響を抑えつつ、評価する箇所や項目が変更された場合でも、迅速かつ柔軟に変更された内容でプログラムの評価を行う。【解決手段】解析部１２が、性能評価の対象プログラムのソースコードを解析する。生成部１４が、解析部１２による解析結果に基づいて、ソースコードをバイナリコードに翻訳すると共に、対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成する。書込部１６が、対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、性能評価の対象箇所に対応して確保された評価用領域に、評価項目に応じた評価用コードを書き込む。【選択図】図１
2015069220.tif 000002
【特許請求の範囲】
【請求項１】
性能評価の対象プログラムのソースコードを解析する解析部と、
前記解析部による解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成する生成部と、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む書込部と、
を含む性能評価プログラム生成装置。
【請求項２】
前記生成部は、前記評価用領域のサイズを、想定される評価用コードの最大サイズ以上とする請求項１記載の性能評価プログラム生成装置。
【請求項３】
前記解析部は、前記ソースコードの解析として、前記バイナリコードへ翻訳するための最適化を行い、
前記生成部は、前記解析部による最適化結果に基づいて、前記評価用領域を確保する
請求項１または請求項２記載の性能評価プログラム生成装置。
【請求項４】
前記生成部は、前記解析部による最適化結果において、前記性能評価の対象箇所の候補となるループ処理が複数のループ処理に変換されている場合には、前記複数のループ処理の各々に対応した箇所に、前記評価用領域を確保する請求項３記載の性能評価プログラム生成装置。
【請求項５】
前記書込部は、前記性能評価の対象箇所及び評価項目が変更された場合には、変更された性能評価の対象箇所に対応して確保された評価用領域に、変更された前記評価項目に応じた評価用コードを書き込む請求項１〜請求項４のいずれか１項記載の性能評価プログラム生成装置。
【請求項６】
コンピュータに、
性能評価の対象プログラムのソースコードを解析し、
前記ソースコードの解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成し、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む
ことを含む処理を実行させる性能評価プログラム生成方法。
【請求項７】
コンピュータに、
性能評価の対象プログラムのソースコードを解析し、
前記ソースコードの解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成し、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む
ことを含む処理を実行させるための性能評価プログラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、性能評価プログラム生成装置、性能評価プログラム生成方法、及び性能評価プログラム生成プログラムに関する。
【背景技術】
【０００２】
コンピュータプログラムの性能を評価する際、特にチューニングを目的とする場合は、関数単位またはループ単位で性能を評価することが重要である。そのためには、例えば、評価対象のプログラムの実行時に、関数やループ処理の開始時刻及び終了時刻を記録し、開始時刻と終了時刻との差分を取ることで、その関数やループの実行に要した時間を求めることができる。例えば、関数やループ処理の開始箇所及び終了箇所に、時刻を記録し、差分を計算する処理を実行するための命令群である評価用コードを挿入しておくことにより、関数やループの実行に要した時間を求めることができる。
【０００３】
このように評価用コードを挿入してプログラムの性能を評価する場合には、次の２点が要求される。１点目は、評価用コードを評価対象のプログラムに挿入することにより、通常のプログラムの実行に与える影響が少ないことである。例えば、評価用コードを実行するための時間が長くかかると、評価対象の箇所について、正確な評価が行えなかったり、プログラム全体の実行時間が延びたりという問題が発生する。
【０００４】
２点目は、評価する箇所や項目が変更された場合でも、迅速かつ柔軟に変更された内容でプログラムの評価を行えることである。評価する箇所や項目は、試行錯誤的に変更されることが多く、変更の度に、評価対象のプログラムのソースコードに挿入した評価用コードに修正を加え、再翻訳するという処理を行う場合には、非常に長い時間がかかってしまう。
【０００５】
また、デバッグ処理が含まれたままであっても、デバッグ処理を実行しない通常実行時には、プログラムの実行速度を大きく低下させることのない電子機器が提案されている。この電子機器では、デバッグ処理命令が含まれるプログラムを通常実行しようとするとき、プログラム中のデバッグ命令処理をＮＯＰ命令に書き換えながらＲＡＭにロードしている。また、評価対象のプログラムに、評価用コードを自動的に挿入する方法が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１５９０８４号公報
【特許文献２】特公平８−１６０８号公報
【特許文献３】特開平５−２４１９１５号公報
【特許文献４】特開平１１−２４２６１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述のプログラムの性能評価に関して要求される２点目について、評価する箇所や項目の変更を想定して、当初から多くの箇所や項目を評価できるように、評価コードを挿入しておくことも考えられる。しかし、この場合、プログラム全体の実行時間が長くなり、上述のプログラムの性能評価に関して要求される１点目の要求を満たすことができない。このように、上記２点の要求を同時に達成することは難しく、評価する箇所や項目を増やせば、通常のプログラムの実行に与える影響が大きくなる。
【０００８】
また、デバッグ処理命令をＮＯＰ命令に書き換える従来技術におけるデバッグ処理命令を、評価用コードに置き換えてプログラムの性能評価に適用し、当初から多くの箇所や項目を評価できるように評価用コードを設定しておくことも考えられる。
【０００９】
しかし、デバッグ処理命令をＮＯＰ命令に書き換える従来技術では、通常実行時には、全てのデバッグ処理命令をＮＯＰ命令に書き換えている。このため、この従来技術を適用したとしても、迅速かつ柔軟に評価する箇所や項目の変更に対応することができない。
【００１０】
開示の技術は、一つの側面として、通常のプログラムの実行に与える影響を抑えつつ、評価する箇所や項目が変更された場合でも、迅速かつ柔軟に変更された内容でプログラムの評価を行うことが目的である。
【課題を解決するための手段】
【００１１】
開示の技術は、性能評価の対象プログラムのソースコードを解析する解析部を備える。また、開示の技術は、前記解析部による解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成する生成部を備える。また、開示の技術は、前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む書込部を備える。
【発明の効果】
【００１２】
開示の技術は、一つの側面として、通常のプログラムの実行に与える影響を抑えつつ、評価する箇所や項目が変更された場合でも、迅速かつ柔軟に変更された内容でプログラムの評価を行うことができる、という効果を有する。
【図面の簡単な説明】
【００１３】
【図１】本実施形態に係る性能評価プログラム生成装置の概略構成を示すブロック図である。
【図２】ソースコードの一例を示す図である。
【図３】評価用領域を確保する箇所をソースコードレベルで表した一例を示す図である。
【図４】評価用領域が確保された実行バイナリの一例を示す図である。
【図５】評価用領域の位置情報ファイルの一例を示す図である。
【図６】評価指示ファイルの一例を示す図である。
【図７】評価用コード書き込み後の実行バイナリの一例を示す図である。
【図８】性能評価プログラム生成装置として機能するコンピュータの概略構成を示すブロック図である。
【図９】性能評価プログラム生成処理を示すフローチャートである。
【図１０】評価用コード書込処理を示すフローチャートである。
【図１１】（Ａ）評価用コード実行時の処理（開始部）を示すフローチャート、及び（Ｂ）開始部用関数を示すフローチャートである。
【図１２】（Ａ）評価用コード実行時の処理（終了部）を示すフローチャート、及び（Ｂ）終了部用関数を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して開示の技術に係る実施形態の一例を詳細に説明する。
【００１５】
図１に示すように、本実施形態に係る性能評価プログラム生成装置１０には、例えば図２に示すような、性能評価の対象となるプログラムのソースコードが入力される。性能評価プログラム生成装置１０では、性能を評価するための評価用コードが書き込まれた実行バイナリを生成して出力する。性能評価プログラム生成装置１０は、解析部１２、生成部１４、及び書込部１６を含む。
【００１６】
解析部１２は、入力された対象プログラムのソースコードに対して、関数の呼び出し関係、処理の分岐、ループ構造等の構文解析を行う。また、解析部１２は、構文解析の結果に基づいて、ソースコードからバイナリコードへ翻訳するための最適化を行う。解析部１２の処理は、従来既知の手法を用いることができる。
【００１７】
生成部１４は、解析部１２による解析及び最適化結果に基づいて、対象プログラムのソースコードをバイナリコードに翻訳すると共に、対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成する。
【００１８】
具体的には、生成部１４は、解析部１２による解析及び最適化結果に基づいて、評価用領域を確保する箇所を検出する。評価用領域を確保する箇所は、関数やループ処理等の評価の対象となり得る対象箇所に対応した箇所である。対象箇所は、全ての関数及びループ処理を対象としてもよいし、予め定めた関数及びループ処理のみを対象としてもよい。対応した箇所は、評価項目に応じて、対象箇所の候補の前及び後の少なくとも一方とすることができる。図３に、生成部１４が検出した評価用領域を確保する箇所を、ソースコードレベルで表した例を示す。図３の例では、関数及びループの前後に、評価用領域を確保する箇所が検出されている。
【００１９】
生成部１４は、検出した評価用領域を確保する箇所に、評価用領域を確保しつつ、対象プログラムのソースコードをバイナリコードに翻訳して実行バイナリを生成する。生成部１４は、確保する評価用領域のサイズを、想定される評価用コードの最大サイズ以上とする。すなわち、評価用コードの命令列を書き込むのに十分なサイズとなるようにする。これにより、後述する書込部１６において、評価用領域に、あらゆる評価項目に応じた評価用コードを書き込むことができる。また、評価用領域のサイズを、想定される評価用コードの最大サイズと同一にした場合には、あらゆる評価項目に応じた評価用コードに対応しつつ、不要な評価用領域の確保を抑制することができる。
【００２０】
生成部１４は、ＮＯＰ命令を並べることによって、評価用領域を確保することができる。ＮＯＰ命令を用いて評価用領域を確保することにより、後述の書込部１６で評価用コードを書き込む際に、評価対象ではない箇所に対しては、再度ＮＯＰ命令を書き込む必要がなくなる。また、「ＮＯＰ命令を並べる」とは、評価用領域を確保する箇所として検出した箇所に対応する実行バイナリ中の箇所に、評価用領域のサイズに応じた数のＮＯＰ命令を書き込むことである。
【００２１】
また、生成部１４は、解析部１２による最適化結果に基づいて、すなわち、最適化の後に、評価用領域を確保する。例えば、最適化の前に評価用領域（ここではＮＯＰ命令）を確保してしまうと、最適化の際に、評価用領域も含めて最適化が行われてしまうため、関数の命令の数に応じてインライン展開するかしないか等の最適化の判断に影響を与えてしまう。本実施形態では、最適化の前に評価用領域を確保する場合に比べて、評価用領域の確保が最適化に与える影響を抑制することができる。
【００２２】
また、最適化の結果、ソースコードレベルでは１つのループ処理が、バイナリコードレベルでは、複数のループ処理に変換される場合がある。生成部１４は、このような場合には、変換後の複数のループ処理の各々に対応した箇所に、評価用領域を確保する。最適化の前に評価用領域を確保する場合には、最適化によってループ処理がどのように変換されるかを把握することができないため、変換後の複数のループ処理の各々に対応した評価用領域を確保することができない。本実施形態では、最適化後に評価用領域の確保を行うため、バイナリコードレベルにおける評価の対象箇所の候補毎に、評価用領域を確保することができる。
【００２３】
図４に、生成部１４により生成された、評価用領域が確保された実行バイナリの一例を示す。図４の例では、ＮＯＰ命令が書き込まれているアドレス範囲が、生成部１４が確保した評価用領域である。
【００２４】
また、生成部１４は、確保した評価用領域に関する位置情報ファイルを生成して出力する。位置情報ファイルは、確保した評価用領域のアドレスとソースコードレベルにおいて検出した評価用領域を確保する箇所、すなわち評価用領域の挿入箇所との対応関係を示すものである。上述したように、生成部１４は、関数及びループを評価の対象箇所の候補として、その候補に対応した評価用領域を確保している。従って、評価用領域は、関数及びループの種類との対応関係を有しており、位置情報ファイルは、この対応関係を示すものである。また、生成部１４は、例えば、ループ処理の回転数に応じて実行されるループ処理が異なる場合など、ループ処理の種類を区別するために、ループ処理が実行される条件を位置情報ファイルに付加することができる。この他にも、関数及びループ処理の種類を区別するための付加情報を、位置情報ファイルに付加してもよい。
【００２５】
書込部１６は、ユーザが指定する評価指示ファイルを受け付けると、評価指示ファイルに応じて、生成部１４で生成された実行バイナリ中の評価用領域に、評価用コードを書き込む。例えば図６に示すように、評価指示ファイルには、対象プログラムに対する性能評価の対象箇所が、ソースコードレベルの関数名またはループ名で記述してある。また、評価指示ファイルには、記述された対象箇所に対してどのような評価を行うかを示す評価項目が記述されている。
【００２６】
具体的には、書込部１６は、評価指示ファイルが示す対象箇所に対応して確保された評価用領域のアドレスを、位置情報ファイルから抽出する。そして、書込部１６は、生成部１４により生成された実行バイナリにおいて、抽出したアドレスから始まる評価用領域に、評価指示ファイルが示す評価項目に応じた評価用コードを書き込む。
【００２７】
より具体的に、図５に示す位置情報ファイルと、図６に示す評価指示ファイルとを用い、評価指示ファイルの１行目に相当する評価用コードを書き込む場合を例に説明する。ここでは、評価指示ファイルが示す対象箇所は「ＦｕｎｃｔｉｏｎＡ」である。そこで、書込部１６は、位置情報ファイルから、挿入箇所が「ＦｕｎｃｔｉｏｎＡ関数開始部」であるアドレス「１２３０」、及び挿入箇所が「ＦｕｎｃｔｉｏｎＡ関数終了部」であるアドレス「１２５８」を抽出する。また、評価指示ファイルが示す「ＦｕｎｃｔｉｏｎＡ」の評価項目は、「実行時間」である。そこで、書込部１６は、実行バイナリのアドレス「１２３０」から始まる評価用領域に、開始時刻を記録するための評価用コードを書き込む。また、書込部１６は、実行バイナリのアドレス「１２５８」から始まる評価用領域に、開始時刻と終了時刻（現在時刻）との差分を計算して記録する評価用コードを書き込む。
【００２８】
書込部１６は、上記のような評価用コードの書き込みを、評価指示ファイルに記述された各行について行うことにより、評価用コード書き込み後の実行バイナリを生成する。また、書込部１６は、評価指示ファイルの変更を受け付けた場合には、変更された対象箇所及び評価項目に応じて、評価用コードを書き換える。このように、評価指示ファイルが変更された場合でも、実行バイナリに確保された評価用領域への評価用コードの書き込みを変更するだけでよい。また、評価用領域は、想定される評価用コードの最大サイズ以上の大きさで確保されているため、評価用コードを変更する際にも、あらゆる評価用コードに対応することができる。従って、ソースコードに評価用コードを挿入している場合に比べ、ソースコードを修正してバイナリコードに再翻訳する必要がなく、迅速かつ柔軟に、評価指示ファイルの変更に対応することができる。
【００２９】
図７に、評価用コード書き込み後の実行バイナリの一例を示す。図７の例で、「ＮＯＰ」の箇所は、評価用領域として確保されているが、評価用コードが書き込まれていない箇所、すなわち、今回の評価対象にはならない箇所を示す。評価用コード書き込み後の実行バイナリに基づいて、対象プログラムが実行され、対象プログラムの性能評価を行うことができる。
【００３０】
性能評価プログラム生成装置１０は、例えば図８に示すコンピュータ４０で実現することができる。コンピュータ４０はＣＰＵ４２、メモリ４４、不揮発性の記憶部４６、入出力インターフェース（Ｉ／Ｆ）４７、及びネットワークＩ／Ｆ４８を備えている。ＣＰＵ４２、メモリ４４、記憶部４６、入出力Ｉ／Ｆ４７、及びネットワークＩ／Ｆ４８は、バス４９を介して互いに接続されている。
【００３１】
記憶部４６はＨＤＤ（Hard Disk Drive）やフラッシュメモリ等によって実現できる。記憶媒体としての記憶部４６には、コンピュータ４０を性能評価プログラム生成装置１０として機能させるための性能評価プログラム生成プログラム５０が記憶されている。ＣＰＵ４２は、性能評価プログラム生成プログラム５０を記憶部４６から読み出してメモリ４４に展開し、性能評価プログラム生成プログラム５０が有するプロセスを順次実行する。
【００３２】
性能評価プログラム生成プログラム５０は、解析プロセス５２、生成プロセス５４、及び書込プロセス５６を有する。ＣＰＵ４２は、解析プロセス５２を実行することで、図１に示す解析部１２として動作する。また、ＣＰＵ４２は、生成プロセス５４を実行することで、図１に示す生成部１４として動作する。また、ＣＰＵ４２は、書込プロセス５６を実行することで、図１に示す書込部１６として動作する。これにより、性能評価プログラム生成プログラム５０を実行したコンピュータ４０が、性能評価プログラム生成装置１０として機能することになる。
【００３３】
なお、性能評価プログラム生成装置１０は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【００３４】
次に、本実施形態に係る性能評価プログラム生成装置１０の作用について説明する。性能評価プログラム生成装置１０に、性能評価の対象となるプログラムのソースコードが入力されると、性能評価プログラム生成装置１０において、図９に示す性能評価プログラム生成処理が実行される。
【００３５】
図９に示す性能評価プログラム生成処理のステップＳ１０で、解析部１２が、入力された対象プログラムのソースコードに対して、関数の呼び出し関係、処理の分岐、ループ構造等の構文解析を行う。そして、解析部１２は、構文解析の結果に基づいて、ソースコードからバイナリコードへ翻訳するための最適化を行う。
【００３６】
次に、ステップＳ２０で、生成部１４が、解析部１２による解析及び最適化結果に基づいて、対象プログラムのソースコードをバイナリコードに翻訳して、実行バイナリを生成する。その際、生成部１４は、対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域を確保することにより、評価用領域が確保された実行バイナリを生成する。
【００３７】
次に、ステップＳ３０で、生成部１４が、確保した評価用領域に関する位置情報ファイルを生成して出力する。
【００３８】
次に、ステップＳ４０で、書込部１６が、図１０に示す評価用コード書込処理を実行する。
【００３９】
図１０に示す評価用コード書込処理のステップＳ４１で、書込部１６が、ユーザが指定する評価指示ファイルを受け付けたか否かを判定する。評価指示ファイルを受け付けた場合には、ステップＳ４２へ移行し、受け付けていない場合には、本ステップの判定を繰り返す。
【００４０】
ステップＳ４２では、書込部１６が、受け付けた評価指示ファイルから１行読み込む。次に、ステップＳ４３で、書込部１６が、評価指示ファイルが終端か否かを判定する。終端の場合には、ステップＳ４６へ移行し、終端ではない場合には、ステップＳ４４へ移行する。
【００４１】
ステップＳ４４では、書込部１６が、読み込んだ１行の対象箇所が示す関数名またはループ名に対応して確保された評価用領域のアドレスを、位置情報ファイルから抽出する。次に、ステップＳ４５で、書込部１６が、上記ステップＳ２０で生成された実行バイナリにおいて、上記ステップＳ４４で抽出したアドレスから始まる評価用領域に、評価指示ファイルが示す評価項目に応じた評価用コードを書き込む。そして、ステップＳ４２へ戻り、評価指示ファイルから未処理の１行を読み込み、ステップＳ４２〜Ｓ４５の処理を繰り返す。
【００４２】
ステップＳ４６では、書込部１６が、生成した評価用コード書き込み後の実行バイナリを出力して、図９に示す性能評価プログラム生成処理へリターンする。
【００４３】
これにより、評価用コード書き込み後の実行バイナリに基づいて、対象プログラムが実行される。対象プログラムの実行において、実行バイナリに書き込まれた評価用コードが示す命令が実行されることにより、評価項目に応じた情報が、所定の記憶領域に記録される。ユーザは、この記録された情報に基づいて、対象プログラムの性能を評価することができる。また、ユーザは、記録された情報を確認後、評価の対象箇所または評価項目を変更して、再度評価を行いたい場合がある。その場合には、ユーザは、評価指示ファイルを書き直して、性能評価プログラム生成装置１０へ入力する。
【００４４】
次に、図９に示す性能評価プログラム生成処理のステップＳ５０で、書込部１６が、変更された評価指示ファイルを受け付けたか否かを判定する。変更された評価指示ファイルを受け付けた場合には、ステップＳ４０へ戻る。これにより、再翻訳を行うことなく、変更された評価指示ファイルに対応した評価用コード書き込み後の実行バイナリが生成される。一方、変更された評価指示ファイルを受け付けない場合には、ステップＳ６０へ移行し、書込部１６が、所定時間経過したか否かを判定する。所定時間経過していない場合には、ステップＳ５０へ戻り、経過した場合には、性能評価プログラム生成処理を終了する。
【００４５】
ここで、本実施形態に係る性能評価プログラム生成装置１０により生成された評価用コード書き込み後の実行バイナリに基づいて、対象プログラムが実行される際の動作について説明する。
【００４６】
対象プログラムでは、通常のプログラムの実行と同様に、実行バイナリの先頭に記述された命令から順に実行する。ＮＯＰ命令の場合には、特に何も実行することなく、次の命令の実行へ移る。
【００４７】
以下に、図１１を参照して、ある関数の実行時間を評価する場合に、その関数の前に確保された評価用領域（以下、「開始部」ともいう）に書き込まれた評価用コードが示す命令が実行される際の動作について説明する。また、図１２を参照して、その関数の後に確保された評価用領域（以下、「終了部」ともいう）に書き込まれた評価用コードが示す命令が実行される際の動作について説明する。各処理は、対象プログラムが動作するコンピュータのＣＰＵにより実行される。
【００４８】
図１１（Ａ）のステップＳ７０で、ＣＰＵが、開始部用関数を呼び出す。開始部用関数では、図１１（Ｂ）のステップＳ７１で、ＣＰＵが、直近のリターンアドレスＲを得る。リターンアドレスは、直近に関数呼び出しを行った命令のアドレス、すなわち、ここでは開始部用関数を呼び出す評価用コードが書き込まれているアドレスである。次に、ステップＳ７２で、ＣＰＵが、ＩにＲに対応するインデックス値を設定する。次に、ステップＳ７３で、ＣＰＵが、何らかのカウンタの現在のカウンタ値を取得し、配列ＡのＲに対応するインデックスの要素Ａ［Ｉ］に保存して、対象プログラムの処理へリターンする。
【００４９】
次に、図１２（Ａ）のステップＳ８０で、ＣＰＵが、終了部用関数を呼び出す。終了部用関数では、図１２（Ｂ）のステップＳ８１で、ＣＰＵが、直近のリターンアドレスＲを得る。次に、ステップＳ８２で、ＣＰＵが、ＩにＲに対応するインデックス値を設定する。次に、ステップＳ８３で、ＣＰＵが、図１１のステップＳ７３で用いたカウンタの現在のカウンタ値を取得する。そして、ＣＰＵが、取得したカウンタ値とＡ［Ｉ］に保存したカウンタ値との差分を、配列ＢのＲに対応するインデックスの要素Ｂ［Ｉ］に加算して、対象プログラムの処理へリターンする。
【００５０】
なお、ある対象箇所の開始部の評価用コードから呼び出したときのリターンアドレスと、その開始部に対応する終了部の評価用コードから呼び出したときのリターンアドレスに対応する配列Ａ及び配列Ｂのインデックスは、同じ値であるとする。また、カウンタとは、具体的には、１秒経過する毎に値が１増加するＵｎｉｘ（登録商標）時刻や、クロック数や実行済みの命令数を記録するプロセッサ固有のハードウェアカウンタを指す。取得するカウンタにＵｎｉｘ（登録商標）時刻を選んだ場合は、配列Ｂには対象箇所毎にその部分を実行するためにかかった時間が保存されることになる。配列Ｂに対応するリターンアドレスは、終了部の評価用コードから呼び出す命令のアドレスに対応しているため、評価用領域の位置情報ファイルを参照することで、Ｂ［Ｉ］に保存された値が、どの関数またはループに対応する値かを知ることができる。
【００５１】
従って、関数名またはループ名と配列Ｂのインデックスとが対応付けられるため、対象プログラムの実行終了後に、評価対象の関数あるいはループ毎に評価結果を得ることができる。また、このアルゴリズムを用いると、評価項目によらず評価関数は引数が不要となるため、評価用領域のサイズは、引数なしの関数を１度呼び出す命令列と同じサイズとすることができる。
【００５２】
以上説明したように、本実施形態に係る性能評価プログラム生成装置１０によれば、対象プログラムのソースコードをバイナリコードに翻訳すると共に、評価の対象箇所の候補に対応した箇所に評価用領域を確保する。そして、指定された評価指示ファイルに基づいて、評価の対象箇所に対応して確保された評価用領域に、評価項目に応じた評価用コードを書き込む。これにより、所望の箇所に所望の評価用コードを書き込むことができ、評価の対象箇所または評価項目が変更になった場合でも、再翻訳することなく、評価用コードを書き換えることができる。従って、通常のプログラムの実行に与える影響を抑えつつ、評価する箇所や項目が変更された場合でも、迅速かつ柔軟に変更された内容でプログラムの評価を行うことができる。
【００５３】
また、確保する評価用領域のサイズを、想定される評価用コードの最大サイズ以上とすることで、確保したどの評価用領域にも、あらゆる評価用コードを書き込み可能となる。
【００５４】
また、ソースコードからバイナリコードへ翻訳するための最適化の後に、評価用領域を確保することで、評価用領域の確保が最適化に与える影響を抑制することができる。また、最適化により、ソースコードレベルでは１つのループ処理が、バイナリコードレベルでは複数のループ処理になる場合でも、複数のループ処理の各々に対して、評価用領域を確保することができる。
【００５５】
なお、上記実施形態では、評価用領域として確保する箇所に、ＮＯＰ命令を並べる場合について説明したが、これに限定されない。例えば、評価用領域として、空き領域を確保するようにしてもよい。この場合、評価用領域として確保した空き領域のうち、書込部１６において、評価用コードを書き込まない領域に、ＮＯＰ命令を書き込むようにするとよい。
【００５６】
また、上記実施形態では、評価用領域を確保しつつ、ソースコードからバイナリコードへ翻訳する場合について説明したが、これに限定されない。例えば、一旦ソースコードからバイナリコードへ翻訳した後に、バイナリコード上で評価用領域を挿入してもよい。
【００５７】
また、評価用コードに書き込む命令群は、関数の実行時間やループの測定回数を計測する場合に限定されない。例えば、「指定したアドレスのメモリに格納された値の平均値」を評価項目とし、そのアドレスに値を書き出す関数の後などに確保された評価用領域に、その平均値を出力するような評価用コードを書き込むことができる。このような値は、例えばその値がループの回数に関係している場合、ループの回数が分かることでループの回数が多い場合のチューニングをするべきか、少ない場合のチューニングをするべきか等の判断に用いることができる。
【００５８】
また、上記では、性能評価プログラム生成プログラム５０が記憶部４６に予め記憶（インストール）されている態様を説明したが、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記憶媒体に記録された形態で提供することも可能である。
【００５９】
以上の実施形態に関し、更に以下の付記を開示する。
【００６０】
（付記１）
性能評価の対象プログラムのソースコードを解析する解析部と、
前記解析部による解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成する生成部と、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む書込部と、
を含む性能評価プログラム生成装置。
【００６１】
（付記２）
前記生成部は、前記評価用領域のサイズを、想定される評価用コードの最大サイズ以上とする付記１記載の性能評価プログラム生成装置。
【００６２】
（付記３）
前記解析部は、前記ソースコードの解析として、前記バイナリコードへ翻訳するための最適化を行い、
前記生成部は、前記解析部による最適化結果に基づいて、前記評価用領域を確保する
付記１または付記２記載の性能評価プログラム生成装置。
【００６３】
（付記４）
前記生成部は、前記解析部による最適化結果において、前記性能評価の対象箇所の候補となるループ処理が複数のループ処理に変換されている場合には、前記複数のループ処理の各々に対応した箇所に、前記評価用領域を確保する付記３記載の性能評価プログラム生成装置。
【００６４】
（付記５）
前記書込部は、前記性能評価の対象箇所及び評価項目が変更された場合には、変更された性能評価の対象箇所に対応して確保された評価用領域に、変更された前記評価項目に応じた評価用コードを書き込む付記１〜付記４のいずれか１つに記載の性能評価プログラム生成装置。
【００６５】
（付記６）
コンピュータに、
性能評価の対象プログラムのソースコードを解析し、
前記ソースコードの解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成し、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む
ことを含む処理を実行させる性能評価プログラム生成方法。
【００６６】
（付記７）
前記コンピュータに、前記評価用領域のサイズを、想定される評価用コードの最大サイズ以上とすることを含む処理を実行させる付記６記載の性能評価プログラム生成方法。
【００６７】
（付記８）
前記コンピュータに、
前記ソースコードの解析として、前記バイナリコードへ翻訳するための最適化を行い、
最適化結果に基づいて、前記評価用領域を確保する
ことを含む処理を実行させる付記６または付記７記載の性能評価プログラム生成方法。
【００６８】
（付記９）
前記コンピュータに、前記最適化結果において、前記性能評価の対象箇所の候補となるループ処理が複数のループ処理に変換されている場合には、前記複数のループ処理の各々に対応した箇所に、前記評価用領域を確保することを含む処理を実行させる付記８記載の性能評価プログラム生成方法。
【００６９】
（付記１０）
前記コンピュータに、前記性能評価の対象箇所及び評価項目が変更された場合には、変更された性能評価の対象箇所に対応して確保された評価用領域に、変更された前記評価項目に応じた評価用コードを書き込むことを含む処理を実行させる付記６〜付記９のいずれか１つに記載の性能評価プログラム生成方法。
【００７０】
（付記１１）
コンピュータに、
性能評価の対象プログラムのソースコードを解析し、
前記ソースコードの解析結果に基づいて、前記ソースコードをバイナリコードに翻訳すると共に、前記対象プログラムにおける性能評価の対象箇所の候補に対応した箇所に、評価用領域が確保された実行バイナリを生成し、
前記対象プログラムに対する性能評価の対象箇所及び評価項目に基づいて、前記性能評価の対象箇所に対応して確保された評価用領域に、前記評価項目に応じた評価用コードを書き込む
ことを含む処理を実行させるための性能評価プログラム生成プログラム。
【００７１】
（付記１２）
前記コンピュータに、前記評価用領域のサイズを、想定される評価用コードの最大サイズ以上とすることを含む処理を実行させるための付記１１記載の性能評価プログラム生成プログラム。
【００７２】
（付記１３）
前記コンピュータに、
前記ソースコードの解析として、前記バイナリコードへ翻訳するための最適化を行い、
最適化結果に基づいて、前記評価用領域を確保する
ことを含む処理を実行させるための付記１１または付記１２記載の性能評価プログラム生成プログラム。
【００７３】
（付記１４）
前記コンピュータに、前記最適化結果において、前記性能評価の対象箇所の候補となるループ処理が複数のループ処理に変換されている場合には、前記複数のループ処理の各々に対応した箇所に、前記評価用領域を確保することを含む処理を実行させるための付記１３記載の性能評価プログラム生成プログラム。
【００７４】
（付記１５）
前記コンピュータに、前記性能評価の対象箇所及び評価項目が変更された場合には、変更された性能評価の対象箇所に対応して確保された評価用領域に、変更された前記評価項目に応じた評価用コードを書き込むことを含む処理を実行させるための付記１１〜付記１４のいずれか１つに記載の性能評価プログラム生成プログラム。
【符号の説明】
【００７５】
１０   性能評価プログラム生成装置
１２   解析部
１４   生成部
１６   書込部
４０   コンピュータ
４２   ＣＰＵ
４６   記憶部
【図１】
2015069220.tif 000003
【図２】
2015069220.tif 000004
【図３】
2015069220.tif 000005
【図４】
2015069220.tif 000006
【図５】
2015069220.tif 000007
【図６】
2015069220.tif 000008
【図７】
2015069220.tif 000009
【図８】
2015069220.tif 000010
【図９】
2015069220.tif 000011
【図１０】
2015069220.tif 000012
【図１１】
2015069220.tif 000013
【図１２】
2015069220.tif 000014