(57)【要約】【課題】簡易性能解析用プログラムにおける時間測定の誤差軽減を可能とする。【解決手段】  ユーザプログラムのコンパイル過程において、サブルーチンや関数の呼び出しの直前、直後に時間取得用命令を埋め込むことにより、従来の性能解析プログラムで発生していた時間取得の誤差を軽減する。【選択図】        図２
2005352894.tif 000002
【特許請求の範囲】
【請求項１】
性能解析を開始するための測定開始ルーチンを実行するステップと、
前記性能解析を終了するための測定終了ルーチンを実行するステップと、
前記測定開始ルーチンを呼び出す第１呼出命令文の前又は後の少なくとも一方にある時間測定用命令を実行するステップと、
前記測定終了ルーチンを呼び出す第２呼出命令文の前又は後の少なくとも一方にある時間測定用命令を実行するステップと
をコンピュータに実行させる
性能解析プログラム。
【請求項２】
請求項１に記載の性能解析プログラムにおいて、
前記測定開始ルーチンを呼び出す前記第１呼出命令文の後の第１時間測定用命令は、前記測定開始ルーチンの直後に実行される処理に対する時間測定の開始時間を取得するための命令であり、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の前の第２時間測定用命令は、前記測定終了ルーチンの直前に実行された処理に対する時間測定の終了時間を取得するための命令である
性能解析プログラム。
【請求項３】
請求項１又は２に記載の性能解析プログラムにおいて、
前記測定開始ルーチンを呼び出す前記第１呼出命令文の前の第３時間測定用命令は、前記測定開始ルーチンの直前に実行された処理に対する時間測定の終了時間を取得するための命令であり、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の後の第４時間測定用命令は、前記測定終了ルーチンの直後に実行される処理に対する時間測定の開始時間を取得するための命令である
性能解析プログラム。
【請求項４】
請求項１乃至３のいずれか一項に記載の性能解析プログラムにおいて、
少なくとも一つのサブルーチンを有し、
前記性能解析は、前記サブルーチンの各々に対して個別に実施される
性能解析プログラム。
【請求項５】
請求項１乃至４のいずれか一項に記載の性能解析プログラムにおいて、
少なくとも一つの関数を有し、
前記性能解析は、前記関数の各々に対して個別に実施される
性能解析プログラム。
【請求項６】
ソースプログラムのコンパイル過程において、
前記ソースプログラムに含まれる少なくとも一つの命令文がサブルーチン又は関数であるか否かを判定するステップと、
前記サブルーチン又は前記関数の先頭に測定開始ルーチンを呼び出す第１呼出命令文を埋め込み、前記サブルーチン又は前記関数の末尾に測定終了ルーチンを呼び出す第２呼出命令文を埋め込むステップと、
前記測定開始ルーチンを呼び出す前記第１呼出命令文の前又は後の少なくとも一方に時間測定用命令を埋め込むステップと、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の前又は後の少なくとも一方に時間測定用命令を埋め込むステップと
を具備する性能解析プログラムの生成方法。
【請求項７】
請求項６に記載の性能解析プログラムの生成方法において、
前記測定開始ルーチンを呼び出す前記第１呼出命令文の後に第１時間測定用命令を埋め込むステップと、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の前に第２時間測定用命令を埋め込むステップと
を具備する性能解析プログラムの生成方法。
【請求項８】
請求項６又は７に記載の性能解析プログラムの生成方法において、
前記測定開始ルーチンを呼び出す前記第１呼出命令文の前に第３時間測定用命令を埋め込むステップと、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の後に第４時間測定用命令を埋め込むステップと
を具備する性能解析プログラムの生成方法。
【請求項９】
請求項６乃至８のいずれか一項に記載の性能解析プログラムの生成方法を用いて生成された性能解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時間測定の誤差を軽減することを特徴とする性能解析プログラム及び性能解析プログラムの生成方法に関する。
【背景技術】
【０００２】
近年の計算機ハードウェアの性能向上は目覚ましいが、計算機内部の各回路間で処理の同期を取るための動作周波数であるクロック周波数の向上による性能向上の速度には限界があり、実際の性能向上のかなりの部分は並列処理によって得られている。
【０００３】
並列処理の目的は、１にも２にも高性能化である。この目的が達成されたかどうかは、実際に性能を解析することにより確認することができる。そこで、並列処理の研究では必ず性能解析が必要となる。
【０００４】
ここでいう性能解析とは、プログラムのどこにどの程度の時間がかかったのか、なぜそうなったのか、プロセッサ数や通信時間といったハードウェアパラメタとの関係はどうなっているのか、などの問題を分析することである。
【０００５】
性能解析を行う上でもっとも基本的な性能指標は、所要時間（ターンアラウンドタイム）である。しかし、並列処理の場合には、複数のプロセスが走っているので、全部のプロセスが同時に開始して同時に終了するわけではない。そこで、理想的には、最初に実行を開始したプロセスの開始時刻から、最後に実行を終了したプロセスの終了時刻までを所要時間として定義する。
この所要時間を求めるための性能解析を行うプログラムが、性能解析プログラムである。
【０００６】
従来の性能解析プログラムでは、コンパイル時に性能解析用オプションを指定された場合に、サブルーチンや関数呼び出しの入り口部分に性能解析を開始するための測定開始ルーチンの呼び出しを埋め込み、出口部分に測定終了ルーチンの呼び出しを埋め込む。その後、それら測定用ルーチンを埋め込んだ実行形式プログラムを実行することで、各々のサブルーチンや関数の性能解析を行っていた（特許文献１参照）。
【０００７】
しかしながら、前述の方法では制御が測定ルーチンへ移行した後、時間測定用命令を実行している。また、測定ルーチンから制御を元のルーチンへ移行をする前に時間測定用命令を実行している。通常、サブルーチンや関数の開始時点において、スタック領域の確保やレジスタの退避といったリンケージ規約に基づくプロローグ処理が実行され、サブルーチンや関数の終了時点において、スタックの開放やレジスタの復帰といったリンケージ規約に基づくエピローグ処理が実行される。
【０００８】
なお、ルーチンとは特定の処理を実行する機能を持ったプログラムコードの集合体のことである。また、特に個別のプログラムコードとして独立していなくても、数行〜数十行程度のコードが特定の処理を行うために固まって配置されていれば、その部分をルーチンと呼ぶことができる。
ルーチンはプログラム内での立場によって大きく2つに分けられ、プログラムを開始する際に最初に呼び出され、プログラム全体の進行を管理するルーチンを「メインルーチン」、プログラムの実行中に他のルーチンから呼び出されて動作するルーチンを「サブルーチン」と呼ぶ。
【０００９】
性能解析用の測定開始ルーチンや、測定終了ルーチンにも、同様のプロローグ処理、エピローグ処理が存在するため、時間測定用命令は、そのプロローグ処理の直後とエピローグ処理の直前に行うことになるが、この時間測定用命令で得られた時間は、プロローグ処理やエピローグ処理の実行時間を含んだ時間となっている。
【００１０】
前述の方法では、この問題を解決するために、プロローグ処理や、エピローグ処理の実行に必要な時間をあらかじめ見積もり、固定値を時間測定用命令で得られた時間から差し引くことで解決していた。
【００１１】
しかしながら、この方法の場合、プロローグ処理とエピローグ処理の時間を差し引く値が固定値であるため、測定ルーチンへ移行時、あるいは測定ルーチンから元ルーチンへの復帰時に発生する命令キャッシュミスの時間や、レジスタの退避や、復帰時に発生するメモリアクセス時間の遅延等の実行時に変動する時間（以下、変動時間と呼ぶ）を測定時間として計算することができないため、測定ルーチンの呼び出し回数が多い場合に、実際の実行時間と、測定時間との差が大きくなり、性能解析にあたえる影響が大きくなる。
【００１２】
また、その他の従来の方式では、ユーザプログラムのコンパイル過程において、時間測定命令を測定ルーチンプロローグ処理後、エピローグ処理前に実行していたためにプロローグ処理やエピローグ処理時に発生する変動時間を正確に測定時間に反映できていなかった（特許文献２参照）。
【００１３】
【特許文献１】特開昭６３―１４８３４２
【特許文献２】特開平３―１０２４３７
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明の目的は、従来解析できなかったプロローグ処理及びエピローグ処理の実行における変動時間を解決し、性能解析をより精密に行うよう改善する簡易性能解析用プログラムにおける時間測定の誤差軽減方法及び該方法を用いたプログラムを提供することである。
本発明の他の目的は、自動的にコンパイラの一部として挿入する機能であり、測定ルーチンの一部をインライン展開することを特徴とする時間測定の誤差軽減方法及び該方法を用いたプログラムを提供することである。
本発明の他の目的は、測定ルーチンを呼び出すＣＡＬＬ文の直前、直後に測定ルーチンの一部である時間測定部分を、部分的なインライン展開を行うことにより、測定ルーチンを呼び出してから時間測定部分までにかかる時間の誤差を減らすことを特徴とする時間測定の誤差軽減方法及び該方法を用いたプログラムを提供することである。
【課題を解決するための手段】
【００１５】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１６】
本発明の性能解析プログラム（５０）は、性能解析を開始するための測定開始ルーチンを実行するステップと、前記性能解析を終了するための測定終了ルーチンを実行するステップと、前記測定開始ルーチンを呼び出す第１呼出命令文の前又は後の少なくとも一方にある時間測定用命令を実行するステップと、前記測定終了ルーチンを呼び出す第２呼出命令文の前又は後の少なくとも一方にある時間測定用命令を実行するステップとをコンピュータに実行させる。
【００１７】
前記測定開始ルーチンを呼び出す前記第１呼出命令文の後の第１時間測定用命令は、前記測定開始ルーチンの直後に実行される処理に対する時間測定の開始時間を取得するための命令であり、前記測定終了ルーチンを呼び出す前記第２呼出命令文の前の第２時間測定用命令は、前記測定終了ルーチンの直前に実行された処理に対する時間測定の終了時間を取得するための命令である。
【００１８】
前記測定開始ルーチンを呼び出す前記第１呼出命令文の前の第３時間測定用命令は、前記測定開始ルーチンの直前に実行された処理に対する時間測定の終了時間を取得するための命令であり、
前記測定終了ルーチンを呼び出す前記第２呼出命令文の後の第４時間測定用命令は、前記測定終了ルーチンの直後に実行される処理に対する時間測定の開始時間を取得するための命令である。
【００１９】
前記性能解析は、当該性能解析プログラム（５０）に含まれるサブルーチンの各々に対して行われる。
【００２０】
前記性能解析は、当該性能解析プログラム（５０）に含まれる関数の各々に対して行われる。
【００２１】
本発明の性能解析プログラム（５０）の生成方法は、コンパイラ（３０）によるソースプログラム（４０）のコンパイル過程において、手続き判定部（３１）により、前記ソースプログラムに含まれる少なくとも一つの命令文がサブルーチン又は関数であるか否かを判定するステップと、測定ルーチン埋め込み部（３２）により、前記サブルーチン又は前記関数の先頭に測定開始ルーチンを呼び出す第１呼出命令文を埋め込み、前記サブルーチン又は前記関数の末尾に測定終了ルーチンを呼び出す第２呼出命令文を埋め込むステップと、時間測定用命令埋め込み部（３３）により、前記測定開始ルーチンを呼び出す前記第１呼出命令文の前又は後の少なくとも一方に時間測定用命令を埋め込むステップと、前記測定終了ルーチンを呼び出す前記第２呼出命令文の前又は後の少なくとも一方に時間測定用命令を埋め込むステップとを具備する。
【００２２】
性能解析プログラム（５０）の生成方法は、コンパイラ（３０）によるソースプログラム（４０）のコンパイル過程において、前記時間測定用命令埋め込み部（３３）により、前記測定開始ルーチンを呼び出す前記第１呼出命令文の後に第１時間測定用命令を埋め込むステップと、前記測定終了ルーチンを呼び出す前記第２呼出命令文の前に第２時間測定用命令を埋め込むステップとを具備する。
【００２３】
性能解析プログラム（５０）の生成方法は、コンパイラ（３０）によるソースプログラム（４０）のコンパイル過程において、前記時間測定用命令埋め込み部（３３）により、前記測定開始ルーチンを呼び出す前記第１呼出命令文の前に第３時間測定用命令を埋め込むステップと、前記測定終了ルーチンを呼び出す前記第２呼出命令文の後に第４時間測定用命令を埋め込むステップとを具備する。
【発明の効果】
【００２４】
本発明では、測定ルーチンを呼び出す前に時間測定用命令を実行することで、測定ルーチンの呼び出し回数が多い場合に、実際の実行時間と、測定時間との差が大きくなり、性能解析にあたえる影響が大きくなるという問題を解決する。
また、本発明を利用することにより、従来解析できなかったプロローグ処理及び、エピローグ処理の実行における変動時間を解決し、性能解析をより精密に行うよう改善する。
従来の時間測定方法では、呼ばれる回数が多いサブルーチンや関数に対する実行時間の計測に含まれる変動時間が多くなり、精度に問題があったが、本方式を適用することによりその、変動時間が計測されないため、より精密な時間の計測が可能となる。
すなわち、性能解析のための測定開始ルーチンＣＡＬＬ文の前後に、時間測定用命令を挿入、更に、測定終了ルーチンＣＡＬＬ文の前後に時間測定用命令を挿入することにより、プロローグ処理とエピローグ処理に必要な時間を除いた時間を測定することにより、より精密な性能解析を可能にする。
また、本発明によれば、コンピュータプログラムの性能チューニングを行う際、どのサブルーチンあるいは、関数がボトルネックとなっているかを調べるといった用途に適用できる。
【発明を実施するための最良の形態】
【００２５】
以下に本発明の第１実施形態について添付図面を参照して説明する。
図１を参照して、本発明の性能解析プログラムがコンピュータ上で生成される場合を例に挙げて説明する。
コンピュータ１００は、ＣＰＵ１０と、記憶部２０を具備している。
ＣＰＵ１０は、コンピュータ１００の各部を制御し、各種プログラムを実行する。
記憶部２０は、コンパイラ３０を保存している。また、記憶部２０は、必要に応じて、ソースプログラム４０や、性能解析プログラム５０を保存する。
【００２６】
コンパイラ３０は、人間がプログラミング言語で記述したソフトウェアの設計図（ソースコード）を、コンピュータが実行できる形式（オブジェクトコード）に変換するソフトウェアである。
ソースプログラム４０は、人間がプログラミング言語で記述したソフトウェアの設計図（ソースコード）となるプログラムである。
性能解析プログラム５０は、ソースプログラム４０をコンパイルしたものであり、コンピュータが実行できる形式（オブジェクトコード）のプログラムである。
ＣＰＵ１０により実行されるコンパイラ３０は、ソースプログラム４０から性能解析プログラム５０を生成する。
【００２７】
コンパイラ３０は、ソースプログラム４０のコンパイル時に性能解析に必要な処理を埋め込むための、手続き判定部３１と、測定ルーチン埋め込み部３２と、時間測定用命令埋め込み部３３を有している。
【００２８】
なお、ルーチンとは特定の処理を実行する機能を持ったプログラムコードの集合体のことである。また、特に個別のプログラムコードとして独立していなくても、数行〜数十行程度のコードが特定の処理を行うために固まって配置されていれば、その部分をルーチンと呼ぶことができる。
ルーチンはプログラム内での立場によって大きく2つに分けられ、プログラムを開始する際に最初に呼び出され、プログラム全体の進行を管理するルーチンを「メインルーチン」、プログラムの実行中に他のルーチンから呼び出されて動作するルーチンを「サブルーチン」と呼ぶ。
【００２９】
手続き判定部３１は、コンパイラ３０に入力されたソースプログラム４０のコンパイル過程において、処理中のステートメントがサブルーチンや関数を呼び出すＣＡＬＬ文であるかどうかを判定し、その結果を返す。
なお、ステートメントとは、プログラム内で何らかの処理を行う一つの完結した命令のことである。プログラムはこのようなステートメントの集まりで構成されている。
【００３０】
測定ルーチン埋め込み部３２は、ソースプログラム４０のコンパイル過程において、処理中のサブルーチン又は関数の入り口部分に測定開始ルーチンを呼び出すためのＣＡＬＬ文を埋め込み、処理中のサブルーチン又は関数の出口部分に測定終了ルーチンを呼び出すためのＣＡＬＬ文を埋め込む。
【００３１】
時間測定用命令埋め込み部３３は、測定ルーチン埋め込み部３２により埋め込まれた測定開始ルーチンを呼び出すＣＡＬＬ文の前後に時間測定用命令を埋め込む。更に、測定ルーチン埋め込み部３２により埋め込まれた測定終了ルーチンを呼び出すＣＡＬＬ文の前後に時間測定用命令を埋め込む。
【００３２】
次に、図２のフローチャートを参照して、ソースプログラム４０のコンパイル時に測定ルーチンを埋め込む処理の動作について詳細に説明する。
まず、コンパイラ３０が、ソースプログラム４０のコンパイル過程において、性能解析の調査対象となるソースプログラム４０のステートメントの一つを最初のステートメントに設定し、調査を開始する（ステップＳ２０１）。
【００３３】
次に、コンパイラ３０が、調査中のステートメントについて、調査が終了したかどうかを判定する（ステップＳ２０２）。
判定の結果、コンパイラ３０は、全てのステートメントの調査が終わっていれば本処理を終了する。
全てのステートメントの調査が終わっていなければ、次に、コンパイラ３０は手続き判定部３１を用いて、調査中のステートメントが手続きの最初かどうかを判定する手続き判定を呼び出す（ステップＳ２０３）。
【００３４】
ステップＳ２０３の手続き判定について、図３を用いて説明する。
図３の手続き判定では、手続き判定部３１は、処理中のステートメントがサブルーチンや関数であるかどうかを判定する（ステップＳ３０１）。
【００３５】
ステップＳ３０１の判定において、処理中のステートメントがサブルーチンや関数である場合、手続き判定部３１は、キーワード"Ｙｅｓ"を示す値を戻り値として返す（ステップＳ３０２）。
また、ステートメントがサブルーチンや関数でない場合、手続き判定部３１は、キーワード"Ｎｏ" を示す値を戻り値として返す（ステップＳ３０３）。
【００３６】
ステップＳ２０３の手続き判定において、手続き判定部３１によりステートメントがサブルーチンや関数であると判定された場合、コンパイラ３０は測定ルーチン埋め込み部３２を用いて、測定ルーチン埋め込みを実行する（ステップＳ２０４）。
【００３７】
ステップＳ２０４の測定ルーチン埋め込みについて、図４を用いて説明する。
まず、測定ルーチン埋め込み部３２は、処理中の手続きの先頭に、測定開始ルーチンを呼び出すためのＣＡＬＬ文を埋め込む（ステップＳ４０１）。
そして、測定ルーチン埋め込み部３２は、処理中の手続きの最後に、測定終了ルーチンを呼び出すためのＣＡＬＬ文を埋め込む（ステップＳ４０２）。
【００３８】
ステップＳ２０４の測定ルーチン埋め込みの実行後、コンパイラ３０は時間測定用命令埋め込み部３３を用いて、時間測定用命令の埋め込みを実行する（ステップＳ２０５）。
【００３９】
ステップＳ２０５の時間測定用命令埋め込みについて、図５を用いて説明する。
まず、時間測定用命令埋め込み部３３は、測定開始ルーチンを呼び出すＣＡＬＬステートメントの前後に時間測定用命令を埋め込む（ステップＳ５０１）。
そして、時間測定用命令埋め込み部３３は、測定終了ルーチンを呼び出すＣＡＬＬステートメントの前後に時間測定用命令を埋め込む（ステップＳ５０２）。
【００４０】
最後に、コンパイラ３０は、調査対象のステートメントを１つ進める処理を実行する（ステップＳ２０６）。
その後、コンパイラ３０は、全てのステートメントを調査したかどうかを判定する処理へ戻る（ステップＳ２０２）。
【００４１】
次に、従来技術と本発明における性能解析プログラムの処理フローの比較により、本発明の性能解析プログラムの特徴を説明する。
ここでは例として、従来技術及び本発明のいずれにおいても、性能解析プログラムはＣＰＵを備えたコンピュータ上で実行されるものとする。
従って、ＣＰＵが性能解析プログラムを実行するものとして説明する。
但し、前述した実行環境は説明のための例に過ぎず、実際には、本発明の性能解析プログラムの実行環境はコンピュータ上に限定されるものではない。
【００４２】
まず、図６を参照して、従来の性能解析プログラムの特徴を説明する。
従来の性能解析プログラムにおいて、元の関数の実行中、測定ルーチンの呼び出しが行われた場合、測定ルーチンの処理に移行する（ステップＳ６０１）。
【００４３】
測定ルーチンの処理の開始時において、スタック領域の確保や、レジスタの退避といったリンケージ規約に基づくプロローグ処理が実行される（ステップＳ６０２）。
【００４４】
従来の性能解析プログラムでは、測定ルーチンのプロローグ処理が行われた後に、時間測定を終了する方式になっており、時間取得命令を実行して時間測定を終了する（ステップＳ６０３）。
なお、実行中の測定ルーチンが測定開始ルーチンの時は、直前の測定終了ルーチンのエピローグ処理直前から当該測定開始ルーチンのプロローグ処理直後までの間に実行された元の関数に対する時間測定を終了する処理に該当する。
実行中の測定ルーチンが測定終了ルーチンの時は、直前の測定開始ルーチンのエピローグ処理直前から当該測定終了ルーチンのプロローグ処理直後までの間に実行されたサブルーチンに対する時間測定を終了する処理に該当する。
【００４５】
時間測定を終了した後、実行中の測定ルーチンを呼び出した、元の関数を特定する処理が実行される（ステップＳ６０４）。
関数を特定することにより、どの関数に対する性能解析の結果であるか識別することができ、関数毎の性能情報の集計や、テーブル格納による性能情報の管理が可能となる。
【００４６】
元の関数を特定した後、性能解析の計算やその他の処理が実行される（ステップＳ６０５）。
【００４７】
従来の性能解析プログラムでは、前述のその他の処理が行われた後に、時間測定を開始する方式になっており、ここで時間取得命令を実行して時間測定を開始する（ステップＳ６０６）。
なお、実行中の測定ルーチンが測定開始ルーチンの時は、当該測定開始ルーチンのエピローグ処理直前から当該測定終了ルーチンのプロローグ処理直後までの間に実行されるサブルーチンに対する時間測定を開始する処理に該当する。
実行中の測定ルーチンが測定終了ルーチンの時は、当該測定終了ルーチンのエピローグ処理直前から次の測定開始ルーチンのプロローグ処理直後までの間に実行される元の関数に対する時間測定を開始する処理に該当する。
【００４８】
時間測定を開始した後、スタックの開放やレジスタの復帰といったリンケージ規約に基づくエピローグ処理が実行される（ステップＳ６０７）。
【００４９】
測定ルーチンを終了する際、測定ルーチンの処理から得られた値のうち、元の関数から要求されている値や性能解析処理に必要な値を戻り値として返す（ステップＳ６０８）。
【００５０】
測定ルーチンの終了後、元の関数の実行を再開する（ステップＳ６０９）。
なお、元の関数の実行中、再び測定ルーチンを呼び出す処理が実行されるときは、ステップＳ６０１の処理に移行する。
【００５１】
従来の性能解析プログラムは、前述の過程を経て測定時間の計測が行われるが、測定ルーチンの間に、キャッシュミスや分岐予測ミスが発生し、実行の度に実行時間がぶれるという問題がある。キャッシュミスとは、一時的に保存した情報であるキャッシュにアクセスしたが、所望するデータが見つからないことである。
【００５２】
図７を参照して、本発明の性能解析プログラムの特徴を説明する。
前述したように、ＣＰＵを備えたコンピュータ上で本発明の性能解析プログラムが実行される場合について例示する。
ここでは、ＣＰＵが性能解析プログラムを実行するものとして説明する。
【００５３】
本発明の性能解析プログラムでは、測定ルーチンを呼び出す直前に、時間測定を終了する方式になっており、時間取得命令を実行して時間測定を終了する（ステップＳ７０１）。
なお、実行中の測定ルーチンが測定開始ルーチンの時は、直前の測定終了ルーチンの終了直後から当該測定開始ルーチンの開始直前までの間に実行された元の関数に対する時間測定を終了する処理に該当する。
実行中の測定ルーチンが測定終了ルーチンの時は、直前の測定開始ルーチンの終了直後から当該測定終了ルーチンの開始直前までの間に実行されたサブルーチンに対する時間測定を終了する処理に該当する。
【００５４】
本発明の性能解析プログラムでは、時間測定を終了する処理の後、測定ルーチンの呼び出しを行う（ステップＳ７０２）。これにより、測定ルーチンが呼び出され、測定ルーチンの処理が開始される。
【００５５】
測定ルーチンの処理の開始時において、スタック領域の確保や、レジスタの退避といったリンケージ規約に基づくプロローグ処理が実行される（ステップＳ７０３）。
【００５６】
実行中の測定ルーチンを呼び出した、元の関数を特定する処理が実行される（ステップＳ７０４）。
関数を特定することにより、どの関数に対する性能解析の結果であるか識別することができ、関数毎の性能情報の集計や、テーブル格納による性能情報の管理が可能となる。
【００５７】
元の関数を特定した後、性能解析の計算やその他の処理が実行される（ステップＳ７０５）。
【００５８】
時間測定を開始した後、スタックの開放やレジスタの復帰といったリンケージ規約に基づくエピローグ処理が実行される（ステップＳ７０６）。
【００５９】
測定ルーチンを終了する際、測定ルーチンの処理から得られた値のうち、元の関数から要求されている値や性能解析処理に必要な値を戻り値として返す（ステップＳ７０７）。
【００６０】
測定ルーチンの終了後、元の関数の実行を再開する（ステップＳ７０８）。
【００６１】
本発明の性能解析プログラムでは、元の関数の実行が再開された後に、時間測定を開始する方式となっており、ここで時間取得命令を実行して時間測定を開始する（ステップＳ７０９）。  
【００６２】
本発明では、測定ルーチンを呼び出すＣＡＬＬ文の直前又は直後に、測定ルーチンの一部である時間測定部分に関して、部分的なインライン処理を行うことにより、測定ルーチンを呼び出してから、時間測定部分までにかかる時間の誤差を減らすことを特徴としている。
【００６３】
図８、図９を参照して、図６、図７で説明した従来の性能解析プログラムと本発明の性能解析プログラムの例を示す。
図８が従来の性能解析プログラムの例であり、図９が本発明の性能解析プログラムの例である。
【００６４】
図８に記載の「ｃａｌｌ  ｍｅａｓｕｒｉｎｇ＿ｓｔａｒｔ（）」は、測定開始ルーチンを呼び出すＣＡＬＬ文であり、「ｃａｌｌ  ｍｅａｓｕｒｉｎｇ＿ｅｎｄ（）」は、測定終了ルーチンを呼び出すＣＡＬＬ文である。
従来の性能解析プログラムは、測定開始ルーチン、測定終了ルーチンのいずれにおいても、ルーチン内のプロローグ処理の直後とエピローグ処理の直前に時間取得命令が実行される。
【００６５】
図９に記載の「ｃａｌｌ  ｍｅａｓｕｒｉｎｇ＿ｓｔａｒｔ（）」も図８の場合と同様に、測定開始ルーチンを呼び出すＣＡＬＬ文であり、「ｃａｌｌ  ｍｅａｓｕｒｉｎｇ＿ｅｎｄ（）」も、測定終了ルーチンを呼び出すＣＡＬＬ文である。
本発明の性能解析プログラムは、測定開始ルーチンの呼び出しの前後、測定終了ルーチンの呼び出しの前後に、時間取得命令が実行される。
【００６６】
従来の方式では、図８に示すように、時間測定命令を測定ルーチンのプロローグ処理後、エピローグ処理前に実行していたためにプロローグ処理やエピローグ処理時に発生する変動時間を正確に測定時間に反映できていなかった。
【００６７】
この問題を解決するために、図９に示すように、性能解析のための測定開始ルーチンのＣＡＬＬ文の前後に時間測定用命令を挿入、更に、測定終了ルーチンのＣＡＬＬ文の前後に時間測定用命令を挿入し、プロローグ処理とエピローグ処理に必要な時間を除いた時間を測定することによって、より精密な性能解析を可能にする。
【図面の簡単な説明】
【００６８】
【図１】図１は、本発明の性能解析プログラムの生成方法の実行環境の概略構成を示す図である。
【図２】図２は、本発明の性能解析プログラムの生成過程のフローチャートを示す図である。
【図３】図３は、手続き判定のフローチャートを示す図である。
【図４】図４は、測定ルーチン埋め込みのフローチャートを示す図である。
【図５】図５は、時間測定用命令埋め込みのフローチャートを示す図である。
【図６】図６は、従来の性能解析プログラムの処理手順のフローチャートを示す図である。
【図７】図７は、本発明の性能解析プログラムの処理手順のフローチャートを示す図である。
【図８】図８は、従来の性能解析プログラムの一例を示す図である。
【図９】図９は、本発明の性能解析プログラムの一例を示す図である。
【符号の説明】
【００６９】
１０…  ＣＰＵ
２０…  記憶部
３０…  コンパイラ
３１…  手続き判定部
３２…  測定ルーチン埋め込み部
３３…  時間測定用命令埋め込み部
４０…  ソースプログラム
５０…  性能解析プログラム
１００…  コンピュータ
【図１】
2005352894.tif 000003
【図２】
2005352894.tif 000004
【図３】
2005352894.tif 000005
【図４】
2005352894.tif 000006
【図５】
2005352894.tif 000007
【図６】
2005352894.tif 000008
【図７】
2005352894.tif 000009
【図８】
2005352894.tif 000010
【図９】
2005352894.tif 000011