(57)【要約】【課題】  手続きの呼出元毎の性能情報を求めることを可能とする。【解決手段】  手続きが呼び出される度に、該手続きに関連した性能関連情報を収集する収集ステップと、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するグループ化ステップと、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出する算出ステップと、を備える。【選択図】        図５
2006277279.tif 000002
【特許請求の範囲】
【請求項１】
手続きが呼び出される度に、該手続きに関連した性能関連情報を収集する収集ステップと、
収集された前記性能関連情報を前記手続の呼出元毎にグループ化するグループ化ステップと、
グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出する算出ステップと、
を備えることを特徴とするプログラムの性能情報の採取方法。
【請求項２】
請求項１に記載のプログラムの性能情報の採取方法において、
前記収集ステップは、前記手続きの内部又は前記手続きから呼び出された収集手続きにおいて行うことを特徴とするプログラムの性能情報の採取方法。
【請求項３】
請求項２に記載のプログラムの性能情報の採取方法において、
前記手続きに前記収集ステップを行うための文を追加するステップを更に備えることを特徴とするプログラムの性能情報の採取方法。
【請求項４】
請求項２に記載のプログラムの性能情報の採取方法において、
前記収集手続きを予めライブラリ内に用意しておくことを特徴とするプログラムの性能情報の採取方法。
【請求項５】
請求項１に記載のプログラムの性能情報の採取方法において、
前記グループ化ステップは、前記手続きの内部又は前記手続きから呼び出されたグループ化手続きにおいて行うことを特徴とするプログラムの性能情報の採取方法。
【請求項６】
請求項５に記載のプログラムの性能情報の採取方法において、
前記手続きに前記グループ化ステップを行うための文を追加するステップを更に備えることを特徴とするプログラムの性能情報の採取方法。
【請求項７】
請求項５に記載のプログラムの性能情報の採取方法において、
前記グループ化手続きを予めライブラリ内に用意しておくことを特徴とするプログラムの性能情報の採取方法。
【請求項８】
請求項１に記載のプログラムの性能情報の採取方法において、
前記算出ステップは、性能情報の採取の対象となっているメインプログラムにおいて行うことを特徴とするプログラムの性能情報の採取方法。
【請求項９】
請求項８に記載のプログラムの性能情報の採取方法において、
前記メインプログラムに前記算出ステップを行うための文を追加するステップを更に備えることを特徴とするプログラムの性能情報の採取方法。
【請求項１０】
請求項１に記載のプログラムの性能情報の採取方法において、
前記性能関連情報及び前記性能情報は、実行時間に関連した情報を含むことを特徴とするプログラムの性能情報の採取方法。
【請求項１１】
請求項１に記載のプログラムの性能情報の採取方法において、
前記性能関連情報は、マルチスレッド化された手続きの各スレッドに関する性能関連情報も含むことを特徴とするプログラムの性能情報の採取方法。
【請求項１２】
プログラムに、手続きが呼び出される度に、該手続きに関連した性能関連情報を収集するための命令を追加するステップと、
前記プログラムに、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するための命令を追加するステップと、
前記プログラムに、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出するための命令を追加するステップと、
を備えることを特徴とするプログラムへの性能情報採取機能追加方法。
【請求項１３】
請求項１２に記載の性能情報採取機能追加方法において、
前記命令は、予め用意されたライブラリに含まれた手続きに含まれるものを含むことを特徴とするプログラムへの性能情報採取機能追加方法。
【請求項１４】
請求項１２に記載の性能情報採取機能追加方法において、
前記命令を追加するステップは、前記命令を実現するための文を前記プログラムに追加するステップを備えることを特徴とするプログラムへの性能情報採取機能追加方法。
【請求項１５】
手続きが呼び出される度に、該手続きに関連した性能関連情報を収集する収集手段と、
収集された前記性能関連情報を前記手続の呼出元毎にグループ化するグループ化手段と、
グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出する算出手段と、
を備えることを特徴とするプログラムの性能情報の採取装置。
【請求項１６】
請求項１５に記載のプログラムの性能情報の採取装置において、
前記収集手段は、前記手続きの内部又は前記手続きから呼び出された収集手続きにおいて行うことを特徴とするプログラムの性能情報の採取装置。
【請求項１７】
請求項１６に記載のプログラムの性能情報の採取装置において、
前記手続きに前記収集手段を行うための文を追加する手段を更に備えることを特徴とするプログラムの性能情報の採取装置。
【請求項１８】
請求項１６に記載のプログラムの性能情報の採取装置において、
前記収集手続きを予めライブラリ内に用意しておくことを特徴とするプログラムの性能情報の採取装置。
【請求項１９】
請求項１５に記載のプログラムの性能情報の採取装置において、
前記グループ化手段は、前記手続きの内部又は前記手続きから呼び出されたグループ化手続きにおいて行うことを特徴とするプログラムの性能情報の採取装置。
【請求項２０】
請求項１９に記載のプログラムの性能情報の採取装置において、
前記手続きに前記グループ化手段を行うための文を追加する手段を更に備えることを特徴とするプログラムの性能情報の採取装置。
【請求項２１】
請求項１９に記載のプログラムの性能情報の採取装置において、
前記グループ化手続きを予めライブラリ内に用意しておくことを特徴とするプログラムの性能情報の採取装置。
【請求項２２】
請求項１５に記載のプログラムの性能情報の採取装置において、
前記算出手段は、性能情報の採取の対象となっているメインプログラムにおいて行うことを特徴とするプログラムの性能情報の採取装置。
【請求項２３】
請求項２２に記載のプログラムの性能情報の採取装置において、
前記メインプログラムに前記算出手段を行うための文を追加する手段を更に備えることを特徴とするプログラムの性能情報の採取装置。
【請求項２４】
請求項１５に記載のプログラムの性能情報の採取装置において、
前記性能関連情報及び前記性能情報は、実行時間に関連した情報を含むことを特徴とするプログラムの性能情報の採取装置。
【請求項２５】
請求項１５に記載のプログラムの性能情報の採取装置において、
前記性能関連情報は、マルチスレッド化された手続きの各スレッドに関する性能関連情報も含むことを特徴とするプログラムの性能情報の採取装置。
【請求項２６】
プログラムに、手続きが呼び出される度に、該手続きに関連した性能関連情報を収集するための命令を追加する手段と、
前記プログラムに、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するための命令を追加する手段と、
前記プログラムに、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出するための命令を追加する手段と、
を備えることを特徴とするプログラムへの性能情報採取機能追加装置。
【請求項２７】
請求項２６に記載の性能情報採取機能追加装置において、
前記命令は、予め用意されたライブラリに含まれた手続きに含まれるものを含むことを特徴とするプログラムへの性能情報採取機能追加装置。
【請求項２８】
請求項２６に記載の性能情報採取機能追加装置において、
前記命令を追加する手段は、前記命令を実現するための文を前記プログラムに追加する手段を備えることを特徴とするプログラムへの性能情報採取機能追加装置。
【請求項２９】
コンピュータに請求項１乃至１４の何れか１項に記載の方法を行わせるためのプログラム。
【請求項３０】
請求項２９に記載のプログラムを記録した、コンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの性能情報を採取するための方法及びその装置並びにプログラムへの性能情報採取機能追加方法及びその装置に関し、特に、プログラム内において呼び出される手続きに関連した性能情報を採取するための方法及びその装置並びにプログラムへの性能情報採取機能追加方法及びその装置に関する。
【背景技術】
【０００２】
プログラムの実行時間を短縮するためには、プログラムリストを見て、実行時間が長いと思われる箇所を改良することが行われるが、プログラムを見ただけでは実行時間が長い箇所を漏れなく発見できるとは限らない。そのため、実際にプログラムを実行してみて、プログラムの各部分毎の実行時間を測定する必要がある。この点に関し、従来、手続き呼び出しの入口・出口に性能情報収集ルーチンを挿入して手続きの性能を収集する方法は知られている（例えば、特許文献１参照。）。
【特許文献１】特開平４−２１５１４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、従来の性能情報採取方法では、手続きの実行時間の合計から性能情報を表示しているため、手続きの呼出元毎の性能情報を表示できないという問題があった。つまり、同一の手続きが呼ばれた場合であっても、呼出元毎に引数値が異なったり、呼出し時の情況が異なったりするため、一般には、手続きの実行時間が異なる。このような同一の手続きに対する呼出元毎の実行時間の相違はプログラムリストを見ただけで判断することは困難である。
【０００４】
また、手続きがマルチスレッド化された場合、各スレッドの実行順序が表示できないという問題があった。各スレッドの実行順序が不明であると、デバッグが困難になる場合がある。
【０００５】
そこで、本発明は、手続きの呼出元毎の性能情報とスレッドの実行順序を求めることを可能とするプログラム性能情報の採取方法及びその装置並びにプログラムへの性能情報採取機能追加方法及びその装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の第１の観点によれば、手続きが呼び出される度に、該手続きに関連した性能関連情報を収集する収集ステップと、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するグループ化ステップと、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出する算出ステップと、を備えることを特徴とするプログラムの性能情報の採取方法が提供される。
【０００７】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記収集ステップは、前記手続きの内部又は前記手続きから呼び出された収集手続きにおいて行うようにしてもよい。
【０００８】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記手続きに前記収集ステップを行うための文を追加するステップを更に備えるようにしてもよい。
【０００９】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記収集手続きを予めライブラリ内に用意しておくようにしてもよい。
【００１０】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記グループ化ステップは、前記手続きの内部又は前記手続きから呼び出されたグループ化手続きにおいて行うようにしてもよい。
【００１１】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記手続きに前記グループ化ステップを行うための文を追加するステップを更に備えるようにしてもよい。
【００１２】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記グループ化手続きを予めライブラリ内に用意しておくようにしてもよい。
【００１３】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記算出ステップは、性能情報の採取の対象となっているメインプログラムにおいて行うようにしてもよい。
【００１４】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記メインプログラムに前記算出ステップを行うための文を追加するステップを更に備えるようにしてもよい。
【００１５】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記性能関連情報及び前記性能情報は、実行時間に関連した情報を含むようにしてもよい。
【００１６】
本発明の第１の観点によるプログラムの性能情報の採取方法において、前記性能関連情報は、マルチスレッド化された手続きの各スレッドに関する性能関連情報も含むようにしてもよい。
【００１７】
本発明の第２の観点によれば、プログラムに、手続きが呼び出される度に、該手続きに関連した性能関連情報を収集するための命令を追加するステップと、前記プログラムに、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するための命令を追加するステップと、前記プログラムに、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出するための命令を追加するステップと、を備えることを特徴とするプログラムへの性能情報採取機能追加方法が提供される。
【００１８】
本発明の第２の観点による性能情報採取機能追加方法において、前記命令は、予め用意されたライブラリに含まれた手続きに含まれるものを含むようにしてもよい。
【００１９】
本発明の第２の観点による性能情報採取機能追加方法において、前記命令を追加するステップは、前記命令を実現するための文を前記プログラムに追加するステップを備えるようにしてもよい。
【発明の効果】
【００２０】
本発明によれば、手続きが呼び出される度に、該手続きに関連した性能関連情報を収集する収集ステップと、収集された前記性能関連情報を前記手続の呼出元毎にグループ化するグループ化ステップと、グループ化された前記性能関連情報を基に、呼出元毎の性能情報を算出する算出ステップと、を備えるので、手続きの呼出元毎の性能情報を求めることが可能となる。また、手続きが並列に実行されているときのスレッドの実行順序を求めることが可能となる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照して本発明を実施するための最良の形態について詳細に説明する。
【００２２】
［実施形態１］
図１は、本発明の実施形態による性能情報採取機能追加装置の構成を示すブロック図である。
【００２３】
図１を参照すると、性能情報採取機能追加装置は、書換部１１２、コンパイラ１１４、手続群ライブラリ１１６及びリンカ１１８を備える。
【００２４】
書換部１１２は、手続呼出文検索手段１１２−１、呼出元情報追加手段１１２−２、性能情報算出手続呼出文追加手段１１２−３、手続本体検索手段１１２−４、性能関連情報収集処理文追加手段１１２−５、性能関連情報収集手続呼出文追加手段１１２−６及び性能関連情報グループ化手続呼出文追加手段１１２−７を備える。
【００２５】
手続呼出文検索手段１１２−１は、ソースプログラム１１１から全ての手続呼出文を検索する。
【００２６】
呼出元情報追加手段１１２−２は、手続呼出文がある箇所である呼出元を識別するための呼出元識別情報をソースプログラムに追加する。
【００２７】
性能情報算出手続呼出文追加手段１１２−３は、性能情報算出手続を呼び出すための文をソースプログラムに追加する。追加する箇所は、通常は、メインプログラムの最後であるが、例えば、途中結果を知りたいのであれば、プログラムの途中であっても良い。
【００２８】
手続本体検索手段１１２−４は、手続きの本体を検索する。ここで、手続きとは、例えば、ＦＯＲＴＲＡＮでいえば、サブルーチン(subroutine)やファンクション(function)であり、Ｃ言語でいえば関数(function)であり、ＪＡＶＡ（登録商標）でいえばプロシジュアー(procedure)である。また、言語によっては、メソッド(method)ともいう。
【００２９】
性能関連情報収集処理文追加手段１１２−５は、検索された手続きの内部に性能関連情報収集処理文を追加する。
【００３０】
性能関連情報収集手続呼出文追加手段１１２−６は、検索された手続きの内部に性能関連情報収集手続呼出文を追加する。
【００３１】
性能関連情報グループ化手続呼出文追加手段１１２−７は、検索された手続きの内部に性能関連情報グループ化手続呼出し文を追加する。
【００３２】
コンパイラ１１４は、書換部１１２により書き換えられたソースプログラム１１３をコンパイルし、オブジェクト１１５を生成する。オブジェクトは、ソースプログラム１１３を反映した機械語の命令群より成る。
【００３３】
手続群ライブラリ１１６は、性能関連情報収集手続オブジェクト１１６−１、性能関連情報グループ化手続オブジェクト１１６−２及び性能情報算出手続オブジェクト１１６−３を含む。ここでオブジェクトとは、そのオブジェクト用のソースプログラムをコンパイルすることにより得られたものである。例えば、性能関連情報収集手続オブジェクト１１６−１は、性能関連情報収集手続を記述したソースプログラムをコンパイルすることにより得られたものである。各オブジェクトは、通常のオブジェクトと同様に、リロケータブルであり、アドレス不定の機械語の命令群より成る。
【００３４】
リンカ１１８は、オブジェクト１１５と手続群ライブラリ１１６内のオブジェクト群をリンクして、ロードモジュール１１９を生成する。
【００３５】
次に、書換部１１２の動作例について説明する。
【００３６】
ここでは、図２に示すようなプログラムがソースプログラム１１１であるとする。手続きｓｕｂ１は２つの異なった呼出元から呼ばれているので、各呼出元毎に手続きｓｕｂ１の性能情報（例えば、実行時間の平均値）を得たい。手続きｓｕｂ２は、１つの呼出元のみから呼ばれているが、複数の箇所から呼ばれても、各呼出元毎に手続きｓｕｂ２の性能情報を得られるようにする。また、ループを手続き呼出に変換し、変換した手続きを並列に実行するときに、符号３０１−４のループが並列化手続きに変換された場合は、並列化された手続きの実行順序情報も得られるようにする。
【００３７】
図２に示されるソースプログラム１１１は、書換部１１２により、図３に示されるプログラムに書き換えられる。但し、図３には、書き換えられたプログラムの他に、性能関連情報収集手続と性能関連情報グループ化手続を兼ねた手続きのソースプログラムと性能情報集計手続のソースプログラムとｄｏループが並列化されたときのイメージも示している。但し、ｄｏループの並列化は、書換部１１２の前段にある不図示の部分がソースプログラム１１１の一部修正により行っている。具体的には、符号３０１−４のｄｏループは、ｍｕｌという手続きの呼出しに書き換えられ、手続きｍｕｌの内部においては、１例として、４つのスレッドを起動する命令（図示せず）が含まれている。
【００３８】
図４を参照すると、まず、現在位置をソースプログラム１１１の先頭行にする（ステップＳ２０１）。次に、手続呼出文検索手段１１２−１は、現在行の文は手続呼出文であるか否かを判断する（ステップＳ２０３）。ここでは、符号３０１−１、３０１−２及び３０１−３で示される文および符号３０１−４で示される文が並列化されたときは３０１−４（図２参照）が手続呼出文であると判断される。
【００３９】
ステップＳ２０３の判断結果が肯定的である場合には（ステップＳ２０３でＹＥＳ）、呼出元情報追加手段１１２−２は、ソースプログラムに呼出元情報を追加する。ここでは、呼出元識別情報を担うための変数ｐｏｓｉｔｉｏｎとスレッドの実行順序情報を担うための変数ｔａｓｋが整数として宣言され（符号３０２−１、３０２−２、３０２−３、３０２−４及び３０３−５参照）、各呼出元の直前で変数ｐｏｓｉｔｉｏｎに呼出元識別情報が代入され（符号３０３−１、３０３−２及び３０３−３参照）、更に、手続きの引数としてｐｏｓｉｔｉｏｎとｔａｓｋが追加される（符号３０４−１、３０４−２、３０４−３、３０４−４、３０５−１、３０５−２、３０５−３、３０５−４及び３０５−５参照）。
【００４０】
次に、性能情報算出手続呼出文追加手段１１２−３は、現在行は、メインプログラムの最後であるか否かを判断し（ステップＳ２０７）、そうであれば（ステップＳ２０７でＹＥＳ）、その直前に性能情報算出手続呼出文を追加する（ステップＳ２０９）（符号３０６−１及び３０６−２参照）。また、性能関連情報と性能情報を出力するための文をメインプログラムの最後に追加する（ステップＳ２１１）（符号３０７参照）。
【００４１】
次に、手続本体検索手段１１２−４は、現在行は、手続きの先頭文であるか否かを判断し（ステップＳ２１３）、そうであれば（ステップＳ２１３でＹＥＳ）、性能関連情報収集処理文追加手段１１２−５は、手続きの内部に性能関連情報収集文とスレッドの実行順序情報収集文を追加し（ステップＳ２１５）（符号３０８−１、３０８−２、３０８−３、３０９−１、３０９−２、３０９−３、３１０−１、３１０−２、３１０−３、３１８−１、３１８−２及び３１８−３参照）、性能関連情報収集手続呼出文追加手段１１２−６は、手続きの内部に性能関連情報収集手続呼出文を追加し（ステップＳ２１７）（符号３１１−１、３１１−２及び３１１−３参照）、情報関連情報グループ化手続呼出文追加手段１１２−７は、手続きの内部に情報関連情報グループ化手続呼出文を追加する（ステップＳ２１９）（符号３１１−１、３１１−２及び３１１−３参照）。図３に示す例では、ｓｈｕｕｓｈｕｕという名称の手続きは、情報関連情報収集手続きと情報関連情報グループ化手続きを合わせたものである。符号３１２で示す文が性能関連情報収集手続きに関連した文であり、符号３１３及び３１４で示す文が性能関連情報グループ化手続きに関連した文である。なお、ステップＳ２１７及びＳ２１９に関連して、コモン変数の宣言をソースプログラムに追加する（符号３１５参照）。これは、性能関連情報収集手続き、性能関連情報グループ化手続及び性能情報算出手続のコモン変数（符号３１６及び３１７参照）に合わせたものである。
【００４２】
次に、現在位置を次の行にして（ステップＳ２２１）、その行がプログラムの最後でなければ（ステップＳ２２３でＮＯ）、ステップＳ２０３に戻り、最後であれば（ステップＳ２２３でＹＥＳ）、処理を終了する。
【００４３】
図３の例では、性能関連情報としては、同一の呼出元から手続きが呼ばれる回数ｋａｉｓｕｕ（ｐｏｓｉｔｉｏｎ）と同一の呼出元からの全ての手続きの呼出しに対する手続きの合計実行時間ｔｏｔａｌ（ｐｏｓｉｔｉｏｎ）が得られる。また、性能情報としては、同一の呼出元から呼ばれた手続きの平均実行時間ｈｅｉｋｉｎ（ｐｏｓｉｔｉｏｎ）が得られる。さらに、手続きが並列に実行されているときは各スレッドの実行開始時間としてスレッドの実行順序情報ｔａｓｋ（ｐｏｓｉｔｉｏｎ，ｔａｓｋ）が得られる。
【００４４】
図５は、ロードモジュール１１９が実行される時のプログラムの性能情報の採取方法を説明するためのフローチャートである。
【００４５】
図５を参照すると、手続きが呼び出される度に（ステップＳ２３１）、性能関連情報を収集し（ステップＳ２３３）、性能関連情報をグループ化する（ステップＳ２３５）。そして、メインプログラムの最後で性能情報を算出する（ステップＳ２３７）。
【００４６】
ステップＳ２３１は、符号３０９、３１０及び３１１で示す文を実行することにより実現される。ステップＳ２３５は、符号３１１で示す文を実行することにより実現される。ステップＳ２３７は、符号３０６で示す文を実行することにより実現される。
【００４７】
［実施形態２］
実施形態１では、性能関連情報収集、性能関連情報グループ化及び性能情報算出を手続群ライブラリ１１６内のオブジェクト群を利用することにより実現していた。
【００４８】
これに対し、実施形態１では、手続群ライブラリ１１６内のオブジェクト群を利用せずに、性能関連情報収集、性能関連情報グループ化及び性能情報算出を実現する。
【００４９】
図６は、本発明の実施形態による性能情報採取機能追加装置の構成を示すブロック図である。
【００５０】
図６を参照すると、性能情報採取機能追加装置は、書換部１１２Ｂ、コンパイラ１１４及びリンカ１１８を備える。
【００５１】
書換部１１２Ｂは、手続呼出文検索手段１１２−１、呼出元情報追加手段１１２−２、性能情報算出処理文追加手段１１２−８、手続本体検索手段１１２−４、性能関連情報収集処理文追加手段１１２−９及び性能関連情報グループ化処理文追加手段１１２−１０を備える。
【００５２】
手続呼出文検索手段１１２−１は、ソースプログラム１１１から全ての手続呼出文を検索する。
【００５３】
呼出元情報追加手段１１２−２は、手続呼出文がある箇所である呼出元を識別するための呼出元識別情報をソースプログラムに追加する。
【００５４】
性能情報算出処理文追加手段１１２−８は、性能情報算出処理文をソースプログラムに追加する。追加する箇所は、通常は、メインプログラムの最後であるが、例えば、途中結果を知りたいのであれば、プログラムの途中であっても良い。
【００５５】
手続本体検索手段１１２−４は、手続きの本体を検索する。ここで、手続きとは、例えば、ＦＯＲＴＲＡＮでいえば、サブルーチン(subroutine)やファンクション(function)であり、Ｃ言語でいえば関数(function)であり、ＪＡＶＡ（登録商標）でいえばプロシジュアー(procedure)である。また、言語によっては、メソッド(method)ともいう。
【００５６】
性能関連情報収集処理文追加手段１１２−９は、検索された手続きの内部に性能関連情報収集処理文を追加する。
【００５７】
性能関連情報グループ化処理文追加手段１１２−１０は、検索された手続きの内部に性能関連情報グループ化処理文を追加する。
【００５８】
コンパイラ１１４は、書換部１１２により書き換えられたソースプログラム１１３Ｂをコンパイルし、オブジェクト１１５Ｂを生成する。
【００５９】
リンカ１１８は、オブジェクト１１５を元に、ロードモジュール１１９Ｂを生成する。
【００６０】
次に、書換部１１２の動作例について説明する。
【００６１】
ここでは、実施形態１と同様に、図２に示すようなプログラムがソースプログラム１１１であるとする。手続きｓｕｂ１は２つの異なった呼出元から呼ばれているので、各呼出元毎に手続きｓｕｂ１の性能情報（例えば、実行時間の平均値）を得たい。手続きｓｕｂ２は、１つの呼出元のみから呼ばれているが、複数の箇所から呼ばれても、各呼出元毎に手続きｓｕｂ２の性能情報を得られるようにする。また、符号３０１−４のループが並列化手続きに変換された場合は、並列化された手続きの実行順序情報も得られるようにする。
【００６２】
図２に示されるソースプログラム１１１は、書換部１１２Ｂにより、図７に示されるプログラムに書き換えられる。
【００６３】
図８を参照すると、まず、現在位置をソースプログラム１１１の先頭行にする（ステップＳ２０１）。次に、手続呼出文検索手段１１２−１は、現在行の文は手続呼出文であるか否かを判断する（ステップＳ２０３）。ここでは、符号３０１−１、３０１−２及び３０１−３で示される文および符号３０１−４で示される文が並列化されたときは３０１−４（図２参照）が手続呼出文であると判断される。
【００６４】
ステップＳ２０３の判断結果が肯定的である場合には（ステップＳ２０３でＹＥＳ）、呼出元情報追加手段１１２−２は、ソースプログラムに呼出元情報を追加する。ここでは、呼出元識別情報を担うための変数ｐｏｓｉｔｉｏｎとスレッドの実行順序情報を担うための変数ｔａｓｋが整数として宣言され（符号４０２−１、４０２−２、４０２−３、４０２−４、４０２−５及び４０２−６参照）、各呼出元の直前で変数ｐｏｓｉｔｉｏｎに呼出元識別情報が代入され（符号４０３−１、４０３−２、４０３−３及び４０３−４参照）、更に、手続きの引数としてｐｏｓｉｔｉｏｎとｔａｓｋが追加される（符号４０４−１、４０４−２、４０４−３、４０４−４、４０５−１、４０５−２、４０５−３、４０５−４及び４０５−５参照）。
【００６５】
次に、性能情報算出処理文追加手段１１２−８は、現在行は、メインプログラムの最後であるか否かを判断し（ステップＳ２０７）、そうであれば（ステップＳ２０７でＹＥＳ）、その直前に性能情報算出処理文を追加する（ステップＳ２０９Ｂ）（符号４０６−１及び４０６−２参照）。また、性能関連情報と性能情報を出力するための文をメインプログラムの最後に追加する（ステップＳ２１１）（符号４０７参照）。
【００６６】
次に、手続本体検索手段１１２−４は、現在行は、手続きの先頭文であるか否かを判断し（ステップＳ２１３）、そうであれば（ステップＳ２１３でＹＥＳ）、性能関連情報収集処理文追加手段１１２−９は、手続きの内部に性能関連情報収集文とスレッドの実行順序情報収集文を追加し（ステップＳ２１５Ｂ）（符号４０８−１、４０８−２、４０８−３、４０９−１、４０９−２、４０９−３、４１０−１、４１０−２、４１０−３、４１１−１、４１１−２及び４１１−３参照）、情報関連情報グループ化処理文追加手段１１２−１０は、手続きの内部に情報関連情報グループ化処理文を追加する（ステップＳ２１９Ｂ）（符号４１２−１、４１２−２、４１２−３、４１３−１、４１３−２及び４１３−３参照）。なお、ステップＳ２１５Ｂ及びＳ２１９Ｂに関連して、コモン変数の宣言をソースプログラムに追加する（符号４１４−１、４１４−２、４１４−３および４１４−４参照）。
【００６７】
図７の例では、性能関連情報としては、同一の呼出元から手続きが呼ばれる回数ｋａｉｓｕｕ（ｐｏｓｉｔｉｏｎ）と同一の呼出元からの全ての手続きの呼出しに対する手続きの合計実行時間ｔｏｔａｌ（ｐｏｓｉｔｉｏｎ）が得られる。また、性能情報としては、同一の呼出元から呼ばれた手続きの平均実行時間ｈｅｉｋｉｎ（ｐｏｓｉｔｉｏｎ）が得られる。さらに、手続きが並列に実行されているときは各スレッドの実行開始時間としてスレッドの実行順序情報ｔａｓｋ（ｐｏｓｉｔｉｏｎ，ｔａｓｋ）が得られる。
【００６８】
次に、現在位置を次の行にして（ステップＳ２２１）、その行がプログラムの最後でなければ（ステップＳ２２３でＮＯ）、ステップＳ２０３に戻り、最後であれば（ステップＳ２２３でＹＥＳ）、処理を終了する。
【００６９】
図５は、ロードモジュール１１９が実行される時のプログラムの性能情報の採取方法を説明するためのフローチャートである。
【００７０】
図５を参照すると、手続きが呼び出される度に（ステップＳ２３１）、性能関連情報を収集し（ステップＳ２３３）、性能関連情報をグループ化する（ステップＳ２３５）。そして、メインプログラムの最後で性能情報を算出する（ステップＳ２３７）。
【００７１】
ステップＳ２３１は、符号４０９、４１０及び４１１で示す文を実行することにより実現される。ステップＳ２３５は、符号４１２及び４１３で示す文を実行することにより実現される。ステップＳ２３７は、符号４０６−２で示す文を実行することにより実現される。
【００７２】
図１及び図６に示した性能情報採取機能追加装置は、ハードウェアによって実現することもできるが、コンピュータを性能情報採取機能追加装置として機能させるためのプログラムをコンピュータが記録媒体から読み込んで実行することによっても実現することができる。また、図４、図５及び図８に示した方法は、ハードウェアによって実現することもできるが、コンピュータにこれらの方法を実行させるためのプログラムをコンピュータが記録媒体から読み込んで実行することによっても実現することができる。
【００７３】
また、コンパイラ及びリンカの代わりに、ソースプログラムを中間言語に変換するプログラムを用いることにより、ベーシック（ＢＡＳＩＣ）やジャバスクリプト（ＪａｖａＳｃｒｉｐｔ）（ジャバ（ＪＡＶＡ）は登録商標）等で書かれたソースプログラムに対しても本発明を適用することが可能である。
【図面の簡単な説明】
【００７４】
【図１】本発明の実施形態１による性能情報採取機能追加装置の構成を示すブロック図である。
【図２】本発明の実施形態で性能情報採取の対象となるソースプログラムの例を示す図である。
【図３】図２に示すソースプログラムが本発明の実施形態１による性能情報採取機能追加装置により書き換えられた後のプログラムを示す図である。
【図４】本発明の実施形態１による性能情報採取機能追加方法を示すフローチャートである。
【図５】本発明の実施形態による性能情報採取機能追加装置により書き換えられたプログラムを実行する時の性能情報採取方法を示すフローチャートである。
【図６】本発明の実施形態２による性能情報採取機能追加装置の構成を示すブロック図である。
【図７】図２に示すソースプログラムが本発明の実施形態２による性能情報採取機能追加装置により書き換えられた後のプログラムを示す図である。
【図８】本発明の実施形態２による性能情報採取機能追加方法を示すフローチャートである。
【符号の説明】
【００７５】
１１２  書換部
１１４  コンパイラ
１１６  手続群ライブラリ
１１８  リンカ
１１２−１  手続呼出文検索手段
１１２−２  呼出元情報追加手段
１１２−３  性能情報算出手続呼出文追加手段
１１２−４  手続本体検索手段
１１２−５  性能関連情報収集処理文追加手段
１１２−６  性能関連情報収集手続呼出文追加手段
１１２−７  性能関連情報グループ化手続呼出文追加手段
１１２−８  性能情報算出処理文追加手段
１１２−９  情報収集処理文追加手段
１１２−１０  性能関連情報グループ化処理文追加手段
【図１】
2006277279.tif 000003
【図２】
2006277279.tif 000004
【図３】
2006277279.tif 000005
【図４】
2006277279.tif 000006
【図５】
2006277279.tif 000007
【図６】
2006277279.tif 000008
【図７】
2006277279.tif 000009
【図８】
2006277279.tif 000010