(57)【要約】【課題】  システムライブラリや実行時ルーチン等の性能測定用のオプションを指定していないプログラムも性能解析を行うことができる性能解析用プログラム及び記録媒体を提供する。【解決手段】  ユーザプログラムのコンパイル過程において、従来はプログラム作成時にはソースファイルがなく、性能解析対象外であり、作成中のプログラムの本体側で性能解析していたのに対し、サブルーチンや関数呼び出しの直後に性能解析開始ルーチンを呼び出すＣＡＬＬ文及びサブルーチンや関数の終了の直前に性能解析終了ルーチンを呼び出すＣＡＬＬ文を埋め込むことにより、サブルーチンや関数のループ内で直接性能測定をすることができるので、従来の性能解析プログラムでは解析できなかったシステムライブラリや、実行時ルーチンなどの性能解析用のオプションを指定してコンパイル指定してないサブルーチンや関数などの性能解析が可能になる。【選択図】  図１
2005242559.tif 000002
【特許請求の範囲】
【請求項１】
ユーザプログラムのコンパイル過程において、コンピュータに、サブルーチン処理や関数処理の開始のＣＡＬＬ文の直前に性能解析開始ルーチンのＣＡＬＬ文を埋め込む手順Ａと、前記サブルーチン処理や前記関数処理のＣＡＬＬ文直後に性能解析終了ルーチンのＣＡＬＬ文を埋め込む手順Ｂとを実行させることを特徴とする性能解析用プログラム。
【請求項２】
前記手順Ａの実行前に、並列化処理が可能か否かを判定し、該並列化処理が可能な場合には前記並列化処理を行い、前記並列化処理が不可能な場合には前記手順Ａを行う手順Ｃを前記コンピュータに実行させることを特徴とする請求項１記載の性能解析用プログラム。
【請求項３】
前記手順Ｃの実行前に、性能解析対象を最初のステートメントに設定させる手順Ｄを前記コンピュータに実行させることを特徴とする請求項２記載の性能解析用プログラム。
【請求項４】
メインプログラムのコンパイル過程において、コンピュータに、サブルーチン処理や関数処理の開始のＣＡＬＬ文の直前に性能解析開始ルーチンのＣＡＬＬ文を埋め込む手順Ａと、前記サブルーチン処理や前記関数処理のＣＡＬＬ文の直後に性能解析終了ルーチンのＣＡＬＬ文を埋め込む手順Ｂとを実行させる性能解析用プログラムを記録したことを特徴とする記録媒体。
【請求項５】
前記手順Ａの実行前に、並列化処理が可能か否かを判定し、該並列化処理が可能な場合には前記並列化処理を行い、前記並列化処理が不可能な場合には前記手順Ａを行う手順Ｃを前記コンピュータに実行させる性能解析用プログラムを記録したことを特徴とする請求項４記載の記録媒体。
【請求項６】
前記手順Ｃの実行前に、性能解析対象を最初のステートメントに設定する手順Ｄを前記コンピュータに実行させる性能解析用プログラムを記録したことを特徴とする請求項５記載の記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、性能解析用プログラム及び記録媒体に関する。
【背景技術】
【０００２】
従来の性能解析プログラムでは、コンパイル時に、性能解析用オプションが指定された場合に、サブルーチンや関数の呼び出しの入り口部分に、性能解析を開始するための測定開始ルーチンの呼び出し文（ＣＡＬＬ文）を埋め込み、出口部分に測定終了ルーチンの呼び出し文（ＣＡＬＬ文）を埋め込むことが行われていた。
また、それら測定用ルーチンを埋め込んだ実行形式プログラムを実行することで、各々のサブルーチンや関数の性能解析を行っていた（例えば、特許文献１参照）。
【特許文献１】特開２００２−８２９２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来技術の方法では、測定用ルーチンをサブルーチンや関数の呼び出され側（つまり、サブルーチンや関数の内側部分）に埋め込む必要があるため、システムライブラリーや、実行時ルーチンなどのコンパイル済みのものや性能解析用のオプションを指定してコンパイルしてないサブルーチンや関数などの性能解析を行うことができないという問題があった。
そこで、本発明の目的は、システムライブラリーや実行時ルーチン等の性能測定用のオプションを指定していないプログラムも性能解析を行うことができる性能解析用プログラム及び記録媒体を提供することにある。
【課題を解決するための手段】
【０００４】
上記課題を解決するために、請求項１記載の発明は、ユーザプログラムのコンパイル過程において、コンピュータに、サブルーチン処理や関数処理のＣＡＬＬ文の直前に性能解析開始ルーチンのＣＡＬＬ文を埋め込む手順Ａと、前記サブルーチン処理や前記関数処理のＣＡＬＬ文の直後に性能解析終了ルーチンのＣＡＬＬ文を埋め込む手順Ｂとを実行させることを特徴とする。
【０００５】
請求項１記載の発明によれば、ユーザプログラムのコンパイル過程において、従来はプログラム作成時にはソースファイルがないサブルーチンや関数、性能解析オプションを指定しないでコンパイルされているサブルーチンや関数は、性能解析対象外である。これは、プログラムの本体側において性能解析ルーチンを呼び出していたためであり、この従来の手段に対し、本発明では、サブルーチンや関数呼び出しの直前に性能解析開始ルーチンを呼び出すＣＡＬＬ文及びサブルーチンや関数の終了の直前に性能解析終了ルーチンを呼び出すＣＡＬＬ文を埋め込むことにより、サブルーチンや関数のループ内で直接性能測定をすることができるので、従来の性能解析プログラムでは解析できなかったシステムライブラリーや、実行時ルーチンなどの性能解析用のオプションを指定してコンパイル指定してないサブルーチンや関数などの性能解析が可能になる。
【０００６】
請求項２記載の発明は、請求項１記載の発明において、前記手順Ａの実行前に、並列化処理が可能か否かを判定し、該並列化処理が可能な場合には前記並列化処理を行い、前記並列化処理が不可能な場合には前記手順Ａを行う手順Ｃを前記コンピュータに実行させることを特徴とする。
【０００７】
請求項３記載の発明は、請求項２記載の発明において、前記手順Ｃの実行前に、性能解析対象を最初のステートメントに設定する手順Ｄを前記コンピュータに実行させることを特徴とする。
【０００８】
請求項４記載の発明は、メインプログラムのコンパイル過程において、コンピュータに、サブルーチン処理や関数処理のＣＡＬＬ文の直前に性能解析開始ルーチンのＣＡＬＬ文を埋め込む手順Ａと、前記サブルーチン処理や前記関数処理のＣＡＬＬ文の直後に性能解析終了ルーチンのＣＡＬＬ文を埋め込む手順Ｂとを実行させる性能解析用プログラムを記録したことを特徴とする。
【０００９】
請求項５記載の発明は、請求項４記載の発明において、前記手順Ａの実行前に、並列化処理が可能か否かを判定し、前記並列化処理が可能な場合には前記並列化処理を行い、前記並列化処理が不可能な場合には前記手順Ａを行う手順Ｃを前記コンピュータに実行させる性能解析用プログラムを記録したことを特徴とする。
【００１０】
請求項６記載の発明は、請求項５記載の発明において、前記手順Ｃの実行前に、性能解析対象を最初のステートメントに設定する手順Ｄを前記コンピュータに実行させる性能解析用プログラムを記録したことを特徴とする。
【発明の効果】
【００１１】
サブルーチンや関数呼び出しのＣＡＬＬ文の直前に性能解析開始ルーチンを呼び出すＣＡＬＬ文とそのサブルーチンや関数呼び出しのＣＡＬＬ文の直後に性能解析終了ルーチンを呼び出すＣＡＬＬ文を埋め込むことにより、サブルーチンや関数のループ内で直接性能測定をすることができるので、システムライブラリーや実行時ルーチン等の性能測定用のオプションを指定していないプログラムも性能解析を行うことができる性能解析用プログラム及び記録媒体の提供を実現することができる。
【発明を実施するための最良の形態】
【００１２】
従来の技術では、ユーザプログラムのコンパイル過程において、サブルーチンや関数等の呼び出され側で、性能測定ルーチンを埋め込んでいたために（図９参照）、ユーザプログラムのコンパイル時に、システムライブラリーや、実行時ルーチンなどの既にコンパイル済みのもの、あるいは性能解析用オプションでコンパイルされていないものがあると、それらの性能解析は、それらを呼び出しているルーチンへ含まれ、それぞれの性能解析を分離することができなかった。本発明では、呼び出され側で測定ルーチンを埋め込むのではなく、呼び出し側で埋め込むことにより（図１０参照）、性能解析が可能になる。
なお、図９は従来の性能解析用プログラムの一部を示す図であり、図１０は本発明の性能解析用プログラムの一部を示す図である。
【００１３】
（実施の形態の構成）
次に、本発明の一実施の形態の構成について図面を参照して詳細に説明する。
図１は本発明の性能解析用プログラムの一実施の形態を示すフローチャートである。
図１を参照すると、本発明の一実施の形態は、ループ並列化判定手段１００と、ＣＡＬＬ文判定手段１０１と、インライン展開判定手段１０２と、呼び出され側測定ルーチン埋め込み手段１０３と、呼び出し側測定ルーチン埋め込み手段１０４とから構成されている。
【００１４】
これらの手段１００〜１０４はそれぞれ次のように動作する。
ループ並列化判定手段１００は、対象となるループが並列化されるループか否かを判定し、その結果を返す。
ＣＡＬＬ文判定手段１０１は、処理中のステートメントがＣＡＬＬ文かどうかを判定し、その結果を返す。
インライン展開判定手段１０２は、ＣＡＬＬ文判定手段１０１によりＣＡＬＬ文と判定されたＣＡＬＬ文について、そのＣＡＬＬ文がコンパイラによりインライン展開が行われるか否かを判定し、その結果を返す。
呼び出され側測定ルーチン埋め込み手段１０３は、処理中のサブルーチンまたは、関数の入り口部分に測定開始ルーチンを呼び出すためのＣＡＬＬ分の埋め込みと処理中のサブルーチンまたは、関数の出口部分に測定終了ルーチンを呼び出すためのＣＡＬＬＣＡＬＬ文を埋め込む。
呼び出し側測定ルーチン埋め込み手段１０４は、ＣＡＬＬ文判定手段１０１により、ＣＡＬＬ文と判定され、かつインライン展開判定手段１０２により、コンパイラによりインライン展開は行われないと判定されたＣＡＬＬ文の前後に、それぞれ測定開始ルーチンを呼び出すためのＣＡＬＬ文の埋め込みと、測定終了ルーチンを呼び出すためのＣＡＬＬ文の埋め込みを行う。
【００１５】
（実施の形態の動作の説明）
次に、図１、２、３、４、５及び図６のフローチャートを参照して本発明の一実施の形態の動作について詳細に説明する。
図２は図１に示した並列化判定手段のフローチャートであり、図３は図１に示した呼び出され側測定ルーチン埋め込み手段のフローチャートである。図４は図１に示したＣＡＬＬ文判定手段のフローチャートであり、図５は図１に示したインライン展開判定手段のフローチャートである。図６は図１の呼び出し側測定ルーチン埋め込み手段のフローチャートである。
【００１６】
まず、図１において、調査対象を最初のステートメントに設定する（ステップＳ００１）。
次に、調査中のステートメントが終了したか否かを判定し（ステップＳ００２）、判定の結果、全てのステートメントの調査が終われば本処理を終了する（ステップＳ００２／Ｙｅｓ）。
【００１７】
次に、調査中のステートメントがループか否かを判定し（ステップＳ００３）、判定の結果、ステートメントがループである場合（ステップＳ００３／Ｙｅｓ）は、並列化判定手段１００を呼び出す。並列化判定手段１００において、対象のループの並列化が可能なループであるか否かを判定し、並列化が可能なループであると判定された場合（ステップＳ１００／Ｙｅｓ）は、キーワード「Ｙｅｓ」を返却する（ステップＳ０２１、図２参照）。
並列化判定手段１００において、ループは並列化可能であるか否かを判定し、並列化が不可能なループであると判定された場合（ステップＳ１００／Ｎｏ）は、キーワード「Ｎｏ」を返却する（ステップＳ０２０、図２参照）。
【００１８】
並列化判定手段１００において、ループが並列化可能であると判断され（ステップＳ１００）、キーワード「Ｙｅｓ」が返却された場合は、並列化処理（ステップＳ００５）が呼び出された後、呼び出され側測定ルーチン埋め込み手段１０３を呼び出す。
呼び出され側測定ルーチン埋め込み手段１０３では、並列化処理（ステップＳ００５）において、サブルーチンとして切り出されたルーチン（並列化処理において、プログラムのステートメントがどのように変更されるかは、図７を参照）のステートメントが終わりであるか否か（ステップＳ００２）、ステートメントが入り口であるか否か（ステップＳ０３０）、もしくはステートメントが出口であるか否か（ステップＳ０３１）を調べ、入り口部分のステートメントの場合はその直後に測定開始ルーチンを呼び出すためのＣＡＬＬステートメントを埋め込み（図３の１０３１）、サブルーチンの出口部分に測定終了ルーチンを呼び出すためのＣＡＬＬステートメントを埋め込む（図３の１０３２）。
【００１９】
並列化処理適用前のイメージを図７（ａ）に示し、並列化処理適用後のイメージを図７（ｂ）に示した。また、測定開始ルーチン及び測定終了ルーチンを埋め込む前のイメージを図８（ａ）に示し、測定開始ルーチン及び測定終了ルーチンを埋め込んだ後のイメージを図８（ｂ）に示した。
ここで、本発明では、上述したように、並列化処理（図１のステップＳ００５）で切り出されたループに対応するサブルーチンは、呼び出され側に測定ルーチンを埋め込んでいる。
これは、それら並列処理により切り出されたサブルーチンは、並列ライブラリーにより間接的に呼び出されており（図７参照）、その並列ライブラリーは、コンパイラが提供しているライブラリーであり、既にコンパイル済みのものである。よって、並列化処理により切り出されたサブルーチン呼び出しの前後に、測定用ルーチンを埋め込むことができないため、それら切り出されたサブルーチンの性能解析のために、呼び出され側（つまり、サブルーチンの内側）に測定用ルーチンを埋め込んでいる。
【００２０】
調査中のステートメントがループでない場合、ＣＡＬＬ判定手段（図１の１０１）において、調査中のステートメントがＣＡＬＬ文であるか否かを判定し、ＣＡＬＬ文であると判定された場合、キーワード「Ｙｅｓ」を返却し、ステートメントがＣＡＬＬ文でない場合は、キーワード「Ｎｏ」を返却する（図４参照）。
ＣＡＬＬ判定手段（図１の１０１）において、ステートメントがＣＡＬＬ文であると判定された場合、そのコール文がコンパイラによりインライン展開されるか否かをインライン展開判定手段（図１の１０２）において判定する。ＣＡＬＬ文がインライン展開される場合（ステップＳ０５１、図５参照）にはキーワード「Ｙｅｓ」を返却し、ＣＡＬＬ文がインライン展開されない場合（ステップＳ０５０、図５参照）にはキーワード「Ｎｏ」を返却する。
【００２１】
インライン展開判定手段（図１の１０２）において、インライン展開されないＣＡＬＬ文であると判断された場合、呼び出し側測定ルーチン埋め込み手段（図１の１０４）において、処理中のＣＡＬＬ文の前後に、それぞれ、測定開始ルーチンを呼び出すためのＣＡＬＬ文、及び測定終了ルーチンを呼び出すためのＣＡＬＬ文を埋め込む（ステップＳ０６０，Ｓ０６１、図６参照）。
最後に、調査対象のステートメントを１つ進める処理（図１のステップＳ００４）を実行し、全てのステートメントを調査したか否かを判定する処理（図１のステップＳ００２）へ戻る。
【００２２】
（効果の説明）
本発明の効果は、従来の方法では性能解析できなかったシステムライブラリーや実行時ルーチンなどの性能測定用のオプションを指定していないプログラムも性能解析が行えることにある。
その理由は、従来、性能解析の測定できていなかった呼び出しは、プログラマーがプログラム作成時にはソースファイルがないため、性能解析対象外であり、それらの呼び出しの性能解析は、呼び出し側に含まれることになる（図９参照）、これらの呼び出しの性能解析を可能にするため、それらの呼び出しの前後で測定用ルーチンを埋め込み、呼び出すことによりできる（図１０参照）ためである。
以上において、本発明を利用することにより、従来解析できなかったシステムライブラリーや実行時ルーチンなどの性能測定用のオプションを指定していないサブルーチンや関数等（システムライブラリーや実行ルーチンを含む）の性能解析を行うことができる。
【産業上の利用可能性】
【００２３】
本発明によれば、コンピュータプログラムの性能チューニングを行う際、どのサブルーチンあるいは、関数がボトルネックとなっているかを調べるといった用途に適用できる。
【図面の簡単な説明】
【００２４】
【図１】本発明の性能解析用プログラムの一実施の形態を示すフローチャートである。
【図２】図１に示した並列化判定手段のフローチャートである。
【図３】図１に示した呼び出され側測定ルーチン埋め込み手段のフローチャートである。
【図４】図１に示したＣＡＬＬ文判定手段のフローチャートである。
【図５】図１に示したインライン展開判定手段のフローチャートである。
【図６】図１の呼び出し側測定ルーチン埋め込み手段のフローチャートである。
【図７】（ａ）は並列化処理適用前のイメージを示す図であり、（ｂ）は並列化処理適用後のイメージを示す図である。
【図８】（ａ）は測定開始ルーチン及び測定終了ルーチンを埋め込む前のイメージを示す図であり、（ｂ）は測定開始ルーチン及び測定終了ルーチンを埋め込んだ後のイメージを示す図である。
【図９】従来の性能解析用プログラムの一部を示す図である。
【図１０】本発明の性能解析用プログラムの一部を示す図である。
【符号の説明】
【００２５】
１００    並列化判定手段
１０１    ＣＡＬＬ文判定手段
１０２    インライン展開判定手段
１０３    呼び出され側測定ルーチン埋め込み手段
１０４    呼び出し側測定ルーチン埋め込み手段
【図１】
2005242559.tif 000003
【図２】
2005242559.tif 000004
【図３】
2005242559.tif 000005
【図４】
2005242559.tif 000006
【図５】
2005242559.tif 000007
【図６】
2005242559.tif 000008
【図７】
2005242559.tif 000009
【図８】
2005242559.tif 000010
【図９】
2005242559.tif 000011
【図１０】
2005242559.tif 000012