JP3439449B2 - プロファイル情報収集装置及びコンピュータ可読記録媒体 - Google Patents
プロファイル情報収集装置及びコンピュータ可読記録媒体Info
- Publication number
- JP3439449B2 JP3439449B2 JP2000330600A JP2000330600A JP3439449B2 JP 3439449 B2 JP3439449 B2 JP 3439449B2 JP 2000330600 A JP2000330600 A JP 2000330600A JP 2000330600 A JP2000330600 A JP 2000330600A JP 3439449 B2 JP3439449 B2 JP 3439449B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- dynamic
- call
- caller
- profile
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
収集に関し、特にプログラム内の関数の呼出し頻度を示
すコールペア情報を収集するプロファイル情報収集装置
に関する。
で、プロファイル情報によってそのプログラムの挙動を
把握することはきわめて有効である。プロファイル情報
は、プログラム実行時に、動的にその特定部分の実行回
数、実行時間、分岐情報などを計測し収集したものであ
って、このようにして得られたプロファイル情報は、そ
のプログラムの解析情報として使用され、主に実行速度
向上などの最適化が、この情報をもとに行われる。プロ
ファイル情報は、そのプログラム固有の最適化を可能に
する有用性の高い情報であり、プログラム内の呼出し側
関数/呼出され側関数の呼出し頻度を示すコールペア情
報は、このようなプロファイル情報の一つである。
が、特開平11−212837号公報に記載されてい
る。この従来技術は、図27に示すように、静的解析・
プロファイル処理挿入部と、コンパイル・プログラム実
行部と、プロファイル情報統合部とから構成されてお
り、以下のようにしてコールペア情報を収集する。
は、ソースプログラム中の関数呼び出しを検出してコー
ルペアの種別毎に識別番号を付してデータベースに保存
し、ソースプログラムに関数呼出し毎にプロファイル処
理を挿入するとともに、識別番号毎に関数呼出しの回数
を格納するテーブルの領域を設定する。例えば、図28
に示すように、メインルーチンmainからそれぞれ関数fu
nc1,関数func2,関数func3,…を呼び出す記述(x1 =func
1(a); 等) がソースプログラム中に存在する場合、ソー
スプログラム中のそれらの記述から関数呼出しを検出し
て、例えば図29に示すようにコールペアの種別毎に識
別番号を付与してデータベースに保存する。また、例え
ば図30に示すように、ソースプログラム中の関数呼出
しの直前にプロファイル情報収集への分岐コード(profi
le(1);等)を挿入してプロファイル処理入りソースプロ
グラムを生成する。更に、識別番号毎に関数呼出しの回
数を格納するテーブルの領域として、例えば図31に示
すようなテーブルを設定する。
ロファイル処理入りソースプログラムをコンパイルして
実行する。このプログラムの実行過程において、プロフ
ァイル処理があったとき、コールペアの種別に該当する
識別番号をインデックスとして図31のテーブルにおけ
る該当エントリの関数呼出し回数がインクリメントされ
る。
号毎にテーブルの関数呼出し回数を読み出すことによっ
て、図32に示すようなコールペアの種別毎の呼出し回
数の情報を生成する。
的な解析によって呼出し側関数と呼出され側関数のペア
を事前に求め、そのペアの数に見合ったサイズのテーブ
ルを設定することにより、コールペア情報を格納するテ
ーブルとして使用するメモリ領域の削減を可能にしてい
る。
func1(a); 等のように、ソースプログラム中で明示的に
関数を指定して呼出す方式を、本明細書では静的な関数
呼出しと言う。これに対して、関数へのポインタ(開始
アドレス)を変数に格納し、変数を介してその関数を呼
出す方式を、本明細書では動的な関数呼出しと言う。動
的な関数呼出しの記述を含むソースプログラムの例を図
2に示す。funcが関数ポインタ変数であり、func=func
1;によって関数func1 のポインタを変数funcに代入し、
a=func(1);(1は引数、a は戻り値を格納する変数) と
記述して関数func1 を呼出している。関数func2 につい
ても同様である。
動的に関数呼出しを行っているかは、変数を介して関数
を呼出す記述(a=func(1);等) の有無を各関数毎に検出
することで可能である。しかし、その関数がどの関数を
動的に呼出しているかを決定するのは静的な解析では一
般に困難である。その理由は、図2の例では、変数を介
して関数を呼出す記述(a=func(1);等) の直前に、呼出
す関数func1 のポインタを変数funcに代入する文が置か
れているためにメイン関数mainが関数func1 を動的に呼
出していることは検出できるが、呼出す関数のポインタ
を関数ポインタ変数に代入する文は呼出す関数の記述内
に存在するとは限らないため、関数ポインタ変数の値を
静的に正確に決定することは容易でないからである。す
なわち、動的な関数呼出しについてはソースプログラム
の静的解析によってはコールペアを正確に確定できな
い。
かかるコールペア情報を収集する際には従来技術のよう
な手法、つまり、ソースプログラムの静的解析によって
呼出し側関数と呼出され側関数のペアを事前に求め、そ
のペアの数に見合ったサイズのテーブルを設定する手法
は採用できず、コールペア情報を格納するためのテーブ
ルのサイズを縮小し得る新規な手法が必要である。これ
が本発明の解決しようとする課題の一つである。
いないが、ユーザのプログラミング作業を容易にするた
めに、多くの場合、各種の有益な関数を提供するシステ
ムライブラリが利用される。従って、システムライブラ
リ内の関数を使用するソースプログラムでは、ソースプ
ログラム中でユーザが定義して使用する関数(ユーザ関
数)以外に、システムライブラリの関数(ライブラリ関
数)についてもコールペア情報を収集することが望まれ
る。
ブラリには、ライブラリ関数A、B、C、D、E、F、
G、Hの8種類のライブラリ関数A〜Hが格納されてお
り、ライブラリ関数Aはライブラリ関数Bを静的に、ラ
イブラリ関数Dを動的にそれぞれ呼出し、ライブラリ関
数Cはライブラリ関数Eを静的に、ライブラリ関数Fを
動的にそれぞれ呼出し、ライブラリ関数Gはライブラリ
関数Hを静的に呼出すものとし、ライブラリ関数間のそ
れ以外の呼出し関係は存在しないものとする。他方、ソ
ースプログラム中には図33に示すようにa、b、c、
d、e、fの6種類のユーザ関数があり、ユーザ関数a
はユーザ関数b及びライブラリ関数Aを静的に、ユーザ
関数c及びライブラリ関数Aを動的にそれぞれ呼出し、
ユーザ関数cはユーザ関数dを静的に、ライブラリ関数
Dを動的にそれぞれ呼出し、ユーザ関数dはユーザ関数
eを動的に、ユーザ関数fを静的にそれぞれ呼出し、ユ
ーザ関数fはライブラリ関数Gを静的に呼出しているも
のとし、ユーザ関数から上記以外の呼出しは存在しない
ものとする。
ラリ関数A、ユーザ関数cからライブラリ関数D、ユー
ザ関数fからライブラリ関数G、ライブラリ関数Aから
ライブラリ関数B、D、ライブラリ関数Gからライブラ
リ関数Hの呼出しにかかるコールペア情報を収集する必
要がある。
の場合、静的解析によってコールペアを事前に確定でき
ないため、システムライブラリ内の関数にかかるコール
ペア情報の収集についても上記の従来技術による手法は
採用できない。そのため、システムライブラリ内の関数
は実際に使用していなくても、コールペア情報の格納エ
リアを割り振る必要があり、コールペア情報を格納する
テーブルのサイズが著しく増大してしまう。これも本発
明の解決しようとする課題の一つである。
呼出しにかかるコールペア情報を収集する際に必要な、
コールペア情報を格納するテーブルのサイズを縮小する
ことを目的とする。
ラリ内の関数にかかるコールペア情報を収集する際に必
要な、コールペア情報を格納するテーブルのサイズを縮
小することを目的とする。
の静的および動的関数呼出しにかかるコールペア情報を
収集する際に必要な、コールペア情報を格納するテーブ
ルのサイズを縮小することを目的とする。
ロファイル情報収集装置は、プログラムの実行中にプロ
ファイル情報を収集するプロファイル情報収集装置にお
いて、ソースプログラムを静的に解析して動的な呼出し
によって他の関数を呼出す可能性のある動的呼出し側関
数および他の関数から呼出される可能性のある動的呼出
され側関数をそれぞれ洗い出し、各動的呼出し側関数及
び各動的呼出され側関数に関数IDを付与する手段と、
ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数の関数IDと前記動的呼出さ
れ側関数の関数IDとの組み合わせである動的コールペ
ア毎にその動的コールペアの呼出し回数を格納する動的
コールペア情報格納テーブルの領域を設定する処理を挿
入する手段と、プロファイル処理入りソースプログラム
をコンパイルして実行したときに前記動的プロファイル
処理があったとき、当該動的な呼出しにかかる動的呼出
し側関数の関数IDと動的呼出され側関数の関数IDを
インデックスとして前記動的コールペア情報格納テーブ
ル中の該当エントリの呼出し回数をインクリメントする
手段とを備えている。
集装置は、プログラムの実行中にプロファイル情報を収
集するプロファイル情報収集装置において、ソースプロ
グラムを静的に解析して動的な呼出しによって他の関数
を呼出す可能性のある動的呼出し側関数を洗い出し、各
動的呼出し側関数に関数IDを付与して呼出し側関数デ
ータベースに登録する呼出し側関数設定手段と、ソース
プログラムを静的に解析して動的な呼出しによって他の
関数から呼出される可能性のある動的呼出され側関数を
洗い出し、各動的呼出され側関数に関数IDを付与して
呼出され側関数データベースに登録する呼出され側関数
設定手段と、ソースプログラムに、動的な呼出しによっ
て他の関数を呼出す処理毎に動的プロファイル処理を挿
入するとともに、前記動的呼出し側関数IDと前記動的
呼出され側関数IDとの組み合わせである動的コールペ
ア毎にその動的コールペアの呼出し回数を格納する動的
コールペア情報格納テーブルの領域を設定する処理を挿
入する動的呼出しプロファイル処理挿入手段と、プロフ
ァイル処理入りソースプログラムをコンパイルして実行
したときに前記動的プロファイル処理があったとき、当
該動的な呼出しにかかる動的呼出し側関数IDと動的呼
出され側関数IDをインデックスとして前記動的コール
ペア情報格納テーブル中の該当エントリの呼出し回数を
インクリメントする動的呼出しプロファイル処理手段と
を備えている。
集装置は、プログラムの実行中にプロファイル情報を収
集するプロファイル情報収集装置において、ソースプロ
グラム及び該ソースプログラムで利用されるプロファイ
ル処理入りシステムライブラリを静的に解析して、プロ
グラムの実行中に動的な呼出しによって他の関数を呼出
す可能性のある動的呼出し側関数を洗い出し、各動的呼
出し側関数のうちユーザ関数については関数仮IDを採
番して付与し、ライブラリ関数についてはシステムライ
ブラリで事前に設定された関数仮IDを付与して呼出し
側関数データベースに登録する呼出し側関数設定手段
と、前記呼出し側関数データベース中の動的呼出し側関
数仮IDを連続した番号の動的呼出し側関数IDに変換
し、動的呼出し側関数仮IDと動的呼出し側関数IDと
の対照表である呼出し側関数インデックステーブルを作
成する呼出し側関数インデックステーブル作成手段と、
ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数から呼出される可能性のある動的呼出され側関
数を洗い出し、各動的呼出され側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出され側関数データベースに登録
する呼出され側関数設定手段と、前記呼出され側関数デ
ータベース中の動的呼出され側関数仮IDを連続した番
号の動的呼出され側関数IDに変換し、動的呼出され側
関数仮IDと動的呼出され側関数IDとの対照表である
呼出され側関数インデックステーブルを作成する呼出さ
れ側関数インデックステーブル作成手段と、ソースプロ
グラムに、動的な呼出しによって他の関数を呼出す処理
毎に動的プロファイル処理を挿入するとともに、前記動
的呼出し側関数IDと前記動的呼出され側関数IDとの
組み合わせである動的コールペア毎にその動的コールペ
アの呼出し回数を格納する動的コールペア情報格納テー
ブルの領域を設定する処理を挿入する動的呼出しプロフ
ァイル処理挿入手段と、プロファイル処理入りソースプ
ログラムをコンパイルし、前記システムライブラリとリ
ンクして実行したときに前記動的プロファイル処理があ
ったとき、当該動的な呼出しにかかる動的呼出し側関数
仮ID及び動的呼出され側関数仮IDを前記呼出し側関
数インデックステーブル及び前記呼出され側関数インデ
ックステーブルを参照して動的呼出し側関数ID及び動
的呼出され側関数IDに変換し、これらをインデックス
として前記動的コールペア情報格納テーブル中の該当エ
ントリの呼出し回数をインクリメントする動的呼出しプ
ロファイル処理手段とを備えている。
集装置は、プログラムの実行中にプロファイル情報を収
集するプロファイル情報収集装置において、ソースプロ
グラムを静的に解析して静的な呼出しによって他の関数
を呼出す可能性のある静的コールペアを洗い出し、各静
的コールペア毎にコールペア識別番号を付与してコール
ペア識別番号データベースに登録するコールペア識別番
号設定手段と、ソースプログラムを静的に解析して動的
な呼出しによって他の関数を呼出す可能性のある動的呼
出し側関数を洗い出し、各動的呼出し側関数に関数ID
を付与して呼出し側関数データベースに登録する呼出し
側関数設定手段と、ソースプログラムを静的に解析して
動的な呼出しによって他の関数から呼出される可能性の
ある動的呼出され側関数を洗い出し、各動的呼出され側
関数に関数IDを付与して呼出され側関数データベース
に登録する呼出され側関数設定手段と、ソースプログラ
ムに、静的な呼出しによって他の関数を呼出す処理毎に
静的プロファイル処理を挿入すると共に、前記コールペ
ア識別番号毎にその静的コールペアの呼出し回数を格納
する静的コールペア情報格納テーブルの領域を設定する
処理を挿入する静的呼出しプロファイル処理挿入手段
と、ソースプログラムに、動的な呼出しによって他の関
数を呼出す処理毎に動的プロファイル処理を挿入すると
ともに、前記動的呼出し側関数IDと前記動的呼出され
側関数IDとの組み合わせである動的コールペア毎にそ
の動的コールペアの呼出し回数を格納する動的コールペ
ア情報格納テーブルの領域を設定する処理を挿入する動
的呼出しプロファイル処理挿入手段と、プロファイル処
理入りソースプログラムをコンパイルして実行したとき
に前記静的プロファイル処理があったとき、当該静的な
呼出しにかかるコールペア識別番号をインデックスとし
て前記静的コールペア情報格納テーブルの該当エントリ
の呼出し回数をインクリメントする静的呼出しプロファ
イル処理手段と、前記プロファイル処理入りソースプロ
グラムをコンパイルして実行したときに前記動的プロフ
ァイル処理があったとき、当該動的な呼出しにかかる動
的呼出し側関数IDと動的呼出され側関数IDをインデ
ックスとして前記動的コールペア情報格納テーブル中の
該当エントリの呼出し回数をインクリメントする動的呼
出しプロファイル処理手段と、前記静的コールペア情報
格納テーブルの内容と前記動的コールペア情報格納テー
ブルの内容を統合したコールペア情報を作成して出力す
るプロファイル情報統合手段とを備えている。
は、プログラムの実行中にプロファイル情報を収集する
プロファイル情報収集装置において、ソースプログラム
及び該ソースプログラムで利用されるプロファイル処理
入りシステムライブラリを静的に解析して静的な呼出し
によって他の関数を呼出す可能性のある静的コールペア
を洗い出し、各静的コールペアのうち呼出し側関数及び
呼出され側関数の双方がライブラリ関数のコールペアに
ついてはシステムライブラリで事前に設定されたコール
ペア仮識別番号を付与し、それ以外のコールペアについ
てはコールペア仮識別番号を採番して付与してコールペ
ア識別番号データベースに登録するコールペア識別番号
設定手段と、前記コールペア識別番号データベース中の
コールペア仮識別番号を連続した番号のコールペア識別
番号に変換し、コールペア仮識別番号とコールペア識別
番号との対照表であるコールペア識別番号インデックス
テーブルを作成するコールペア識別番号インデックス作
成手段と、ソースプログラム及び前記システムライブラ
リを静的に解析して、プログラムの実行中に動的な呼出
しによって他の関数を呼出す可能性のある動的呼出し側
関数を洗い出し、各動的呼出し側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出し側関数データベースに登録す
る呼出し側関数設定手段と、前記呼出し側関数データベ
ース中の動的呼出し側関数仮IDを連続した番号の動的
呼出し側関数IDに変換し、動的呼出し側関数仮IDと
動的呼出し側関数IDとの対照表である呼出し側関数イ
ンデックステーブルを作成する呼出し側関数インデック
ステーブル作成手段と、ソースプログラム及び前記シス
テムライブラリを静的に解析して、プログラムの実行中
に動的な呼出しによって他の関数から呼出される可能性
のある動的呼出され側関数を洗い出し、各動的呼出され
側関数のうちユーザ関数については関数仮IDを採番し
て付与し、ライブラリ関数についてはシステムライブラ
リで事前に設定された関数仮IDを付与して呼出され側
関数データベースに登録する呼出され側関数設定手段
と、前記呼出され側関数データベース中の動的呼出され
側関数仮IDを連続した番号の動的呼出され側関数ID
に変換し、動的呼出され側関数仮IDと動的呼出され側
関数IDとの対照表である呼出され側関数インデックス
テーブルを作成する呼出され側関数インデックステーブ
ル作成手段と、ソースプログラムに、静的な呼出しによ
って他の関数を呼出す処理毎に静的プロファイル処理を
挿入すると共に、前記コールペア識別番号毎にその静的
コールペアの呼出し回数を格納する静的コールペア情報
格納テーブルの領域を設定する処理を挿入する静的呼出
しプロファイル処理挿入手段と、ソースプログラムに、
動的な呼出しによって他の関数を呼出す処理毎に動的プ
ロファイル処理を挿入するとともに、前記動的呼出し側
関数IDと前記動的呼出され側関数IDとの組み合わせ
である動的コールペア毎にその動的コールペアの呼出し
回数を格納する動的コールペア情報格納テーブルの領域
を設定する処理を挿入する動的呼出しプロファイル処理
挿入手段と、プロファイル処理入りソースプログラムを
コンパイルして実行したときに前記静的プロファイル処
理があったとき、当該静的な呼出しにかかるコールペア
仮識別番号を前記コールペア識別番号インデックステー
ブルを参照してコールペア識別番号に変換し、それをイ
ンデックスとして前記静的コールペア情報格納テーブル
の該当エントリの呼出し回数をインクリメントする静的
呼出しプロファイル処理手段と、プロファイル処理入り
ソースプログラムをコンパイルし、前記システムライブ
ラリとリンクして実行したときに前記動的プロファイル
処理があったとき、当該動的な呼出しにかかる動的呼出
し側関数仮ID及び動的呼出され側関数仮IDを前記呼
出し側関数インデックステーブル及び前記呼出され側関
数インデックステーブルを参照して動的呼出し側関数I
D及び動的呼出され側関数IDに変換し、これらをイン
デックスとして前記動的コールペア情報格納テーブル中
の該当エントリの呼出し回数をインクリメントする動的
呼出しプロファイル処理手段と、前記静的コールペア情
報格納テーブルの内容と前記動的コールペア情報格納テ
ーブルの内容を統合したコールペア情報を作成して出力
するプロファイル情報統合手段とを備えている。
され側関数とのコールペアを静的な解析によって正確に
特定するのは容易でないが、動的な呼出しによって他の
関数を呼出す可能性のある動的呼出し側関数を特定する
こと、及び動的な呼出しによって他の関数から呼出され
る可能性のある動的呼出され側関数を特定することは、
ソースプログラムの静的な解析によって容易に行える。
プロファイル情報収集装置にあっては、ソースプログラ
ムを静的に解析して動的な呼出しによって他の関数を呼
出す可能性のある動的呼出し側関数および他の関数から
呼出される可能性のある動的呼出され側関数をそれぞれ
洗い出して、各動的呼出し側関数及び各動的呼出され側
関数に関数IDを付与し、動的呼出し側関数の関数ID
と動的呼出され側関数の関数IDとの組み合わせである
動的コールペア毎にその動的コールペアの呼出し回数を
格納する動的コールペア情報格納テーブルを使って動的
な呼出しにかかるコールペア毎の呼出し回数を収集す
る。より具体的には、第2のプロファイル情報収集装置
に示されるように、呼出し側関数設定手段によってソー
スプログラムを静的に解析して動的な呼出しによって他
の関数を呼出す可能性のある動的呼出し側関数を洗い出
し、各動的呼出し側関数に関数IDを付与して呼出し側
関数データベースに登録し、呼出され側関数設定手段に
よってソースプログラムを静的に解析して動的な呼出し
によって他の関数から呼出される可能性のある動的呼出
され側関数を洗い出し、各動的呼出され側関数に関数I
Dを付与して呼出され側関数データベースに登録し、動
的呼出しプロファイル処理挿入手段によって、ソースプ
ログラムに、動的な呼出しによって他の関数を呼出す処
理毎に動的プロファイル処理を挿入するとともに、前記
動的呼出し側関数IDと前記動的呼出され側関数IDと
の組み合わせである動的コールペア毎にその動的コール
ペアの呼出し回数を格納する動的コールペア情報格納テ
ーブルの領域を設定する処理を挿入し、動的呼出しプロ
ファイル処理手段によって、プロファイル処理入りソー
スプログラムをコンパイルして実行したときに前記動的
プロファイル処理があったとき、当該動的な呼出しにか
かる動的呼出し側関数IDと動的呼出され側関数IDを
インデックスとして前記動的コールペア情報格納テーブ
ル中の該当エントリの呼出し回数をインクリメントす
る。
は、システムライブラリ内のライブラリ関数を動的に呼
出すソースプログラムについてもコールペア情報を収集
することができるように、プロファイル処理入りシステ
ムライブラリを利用者に提供する。但し、プロファイル
処理入りシステムライブラリを使用すると問題になるの
は、各ライブラリ関数にはシステムライブラリ側で事前
に関数IDが割り振られているため、その割り振られた
関数IDをそのまま動的コールペア情報格納テーブルの
インデックスに使うとテーブルのインデックスが飛び飛
びの値となってしまい、テーブルのサイズが増大するこ
とである。そこで、第3のプロファイル情報収集装置に
あっては、呼出し側関数設定手段は、各動的呼出し側関
数のうちユーザ関数については関数仮IDを採番して付
与し、ライブラリ関数についてはシステムライブラリで
事前に設定された関数仮IDを付与して呼出し側関数デ
ータベースに登録するが、呼出し側関数インデックステ
ーブル作成手段が呼出し側関数データベース中の動的呼
出し側関数仮IDを連続した番号の動的呼出し側関数I
Dに変換し、動的呼出し側関数仮IDと動的呼出し側関
数IDとの対照表である呼出し側関数インデックステー
ブルを作成する。また、呼出され側関数設定手段は、各
動的呼出され側関数のうちユーザ関数については関数仮
IDを採番して付与し、ライブラリ関数についてはシス
テムライブラリで事前に設定された関数仮IDを付与し
て呼出され側関数データベースに登録するが、呼出され
側関数インデックステーブル作成手段が呼出され側関数
データベース中の動的呼出され側関数仮IDを連続した
番号の動的呼出され側関数IDに変換し、動的呼出され
側関数仮IDと動的呼出され側関数IDとの対照表であ
る呼出され側関数インデックステーブルを作成する。そ
して、動的呼出しプロファイル処理挿入手段では、動的
呼出し側関数IDと動的呼出され側関数IDとの組み合
わせである動的コールペア毎にその動的コールペアの呼
出し回数を格納する動的コールペア情報格納テーブルの
領域を設定し、動的呼出しプロファイル処理手段では、
動的な呼出しにかかる動的呼出し側関数仮ID及び動的
呼出され側関数仮IDを呼出し側関数インデックステー
ブル及び呼出され側関数インデックステーブルを参照し
て動的呼出し側関数ID及び動的呼出され側関数IDに
変換し、これらをインデックスとして動的コールペア情
報格納テーブル中の該当エントリの呼出し回数をインク
リメントするようにしている。
のプロファイル情報収集装置に、静的な呼出しにかかる
コールペア情報の収集機能と、その情報を動的コールペ
ア情報に統合する機能とを付加したもので、静的および
動的な呼出しにかかるコールペア情報を収集する。
のプロファイル情報収集装置に、静的な呼出しにかかる
コールペア情報の収集機能と、その情報を動的コールペ
ア情報に統合する機能とを付加したもので、システムラ
イブラリのライブラリ関数をも含めて、静的および動的
な呼出しにかかるコールペア情報を収集する。
例について図面を参照して詳細に説明する。
にかかるプロファイル情報収集装置100は、ソースプ
ログラム200及びシステムライブラリ300を入力
し、プロファイル情報としてのコールペア情報400を
出力する。
情報の収集対象となるプログラムで、図28で説明した
ような静的な関数呼出しに加えて、図2で説明したよう
な動的な関数呼出しの記述を含んでいる。本明細書で
は、ユーザがソースプログラム200で関数宣言した関
数をユーザ関数と呼び、システムライブラリ300で提
供される関数をライブラリ関数と呼ぶ。ソースプログラ
ム200は、ユーザ関数およびライブラリ関数の双方を
利用してプログラミングされている。以下の説明では便
宜上、ソースプログラム200は図33で説明したよう
な呼出し関係を持つユーザ関数a〜fを含むものとす
る。
態では、プロファイル処理が含まれたオブジェクトの形
式で提供される。つまり、提供されるのはコンパイル済
コードであり、1つのオブジェクトは1以上のライブラ
リ関数を含み、且つプロファイル処理が既に挿入されて
いる。また、ライブラリ関数のコールペア毎のコードペ
ア仮識別番号が事前にシステムによって設定され、シス
テムライブラリ300に付加されている。また、各ライ
ブラリ関数には関数仮IDが割り振られている。更に、
動的に他のライブラリ関数を呼出すライブラリ関数は事
前に調査され、動的呼出しライブラリ関数一覧としてシ
ステムライブラリ300に付加されている。コールペア
仮識別番号は静的呼出しにかかるコールペア情報を収集
するプロファイル処理で使用され、関数仮IDは動的呼
出しにかかるコールペア情報を収集するプロファイル処
理で使用される。以下の説明では便宜上、システムライ
ブラリ300は図33で説明したような呼出し関係を持
つライブラリ関数A〜Hを含むものとする。
るコールペア仮識別番号テーブルの内容例を図3に、同
じく関数仮IDテーブルの内容例を図4に示す。この例
では、静的な呼出し関係の有無にかかわらずライブラリ
関数の組み合わせ毎のコールペア仮識別番号が事前に設
定されており、また、各ライブラリ関数に仮IDが事前
に設定されている。図3においてコールペア仮識別番号
を100以上の値としたのは、0から99までをユーザ
に確保するためであり、図4において関数仮IDを20
0以上の値としたのは、0から199までをユーザに確
保するためである。また、図5にシステムライブラリ3
00に保持されている動的呼出しライブラリ関数一覧の
内容例を示す。今の例では、動的に他のライブラリ関数
を呼出すライブラリ関数はAとCの2つである。
は、ソースプログラム200を実際に実行したときの静
的呼出しにかかるコールペア情報と動的呼出しにかかる
コールペア情報とを統合した情報であり、例えば図6に
示すように、呼出し側関数名と呼出され側関数名との組
毎の呼出し回数で構成される。
す。ケース1は、ソースプログラム200中のユーザ関
数から別のユーザ関数を静的に呼出すケースである。従
来技術では主にケース1だけを収集対象としている。ケ
ース2は、ソースプログラム200中のユーザ関数から
別のユーザ関数を動的に呼出すケースである。ケース3
は、ソースプログラム200中のユーザ関数からライブ
ラリ関数を静的に呼出すケース、ケース4は、ソースプ
ログラム200中のユーザ関数からライブラリ関数を動
的に呼出すケースである。ケース5は、静的または動的
に呼出されたライブラリ関数から別のライブラリ関数を
静的に呼出すケース、ケース6は、静的または動的に呼
出されたライブラリ関数から別のライブラリ関数を動的
に呼出すケースである。本実施の形態では、これらの各
ケースの呼出しに関するコールペア情報を収集すること
を目的としている。なお、ケース5、ケース6における
呼出し側関数はソースプログラム200から呼出された
関数だけでなく、1以上のライブラリ関数を経由して呼
出されたライブラリ関数も含まれる。
収集装置100は、静的解析部101、プロファイル処
理挿入部102、コンパイル・プログラム実行部10
3、プロファイル情報統合部104といった機能部と、
処理の過程で適宜に生成されるコールペア識別番号DB
(DB;データベース)111、呼出し側関数DB11
2、呼出され側関数DB113、コールペア識別番号イ
ンデックステーブル114、呼出し側関数インデックス
テーブル115、呼出され側関数インデックステーブル
116、プロファイル処理入りソースプログラムファイ
ル117、静的コールペア情報格納テーブル118、動
的コールペア情報格納テーブル119といった記憶部と
を含んで構成される。
別番号設定手段121、呼出し側関数設定手段122、
呼出され側関数設定手段123、コールペア識別番号イ
ンデックステーブル作成手段124、呼出し側関数イン
デックステーブル作成手段125、呼出され側関数イン
デックステーブル作成手段126を含み、プロファイル
処理挿入部102は、静的呼出しプロファイル処理挿入
手段127、動的呼出しプロファイル処理挿入手段12
8を含み、コンパイル・プログラム実行部103は、静
的呼出しプロファイル処理手段129、動的呼出しプロ
ファイル処理手段130を含み、プロファイル情報統合
部104は、静的呼出しコールペア情報作成手段13
1、動的呼出しコールペア情報作成手段132、統合手
段133を含んでいる。
ばワークステーションやパーソナルコンピュータ等のコ
ンピュータとプロファイル情報収集用プログラムとで実
現することができる。その場合、プロファイル情報収集
用プログラムは、CD−ROM、半導体メモリ、磁気デ
ィスク等の機械読み取り可能な記録媒体500に記録し
て提供することができる。記録媒体500に記録された
プロファイル情報収集用プログラムは、プロファイル情
報収集装置100を構成するコンピュータに読み取ら
れ、そのコンピュータの動作を制御することにより、そ
のコンピュータ上に静的解析部101、プロファイル処
理挿入部102、コンパイル・プログラム実行部10
3、プロファイル情報統合部104といった各機能部を
実現する。
情報収集装置100の全体的な動作を説明する。
的解析部101、プロファイル処理挿入部102、コン
パイル・プログラム実行部103、プロファイル情報統
合部104の順に動作する。
ム200及びシステムライブラリ300を入力し、コー
ルペア識別番号設定手段121により、ソースプログラ
ム200を実行した際に静的な呼出しが行われる可能性
のあるコールペア(呼出し側関数名、呼出され側関数
名)毎にコールペア仮識別番号を設定したコールペア識
別番号DB111を生成する。ここで、図7のケース
1、ケース3のようにユーザ関数からユーザ関数または
ライブラリ関数を静的に呼出すコールペアにかかるコー
ルペア仮識別番号はコールペア識別番号設定手段121
が独自に採番するが、ケース5のようにライブラリ関数
からライブラリ関数を静的に呼出すコールペアについて
は、システムライブラリ300側で事前に設定されてい
るコールペア仮識別番号を使う。その理由は、システム
ライブラリ300には静的呼出しにかかるプロファイル
処理が既に挿入されており、そこでは事前に設定したコ
ールペア仮識別番号を使っているからである。
定手段122により、ソースプログラム200を実行し
た際に動的な呼出しを行う可能性のある呼出し側関数を
洗い出し、その呼出し側関数毎の関数仮IDを設定した
呼出し側関数DB112を生成する。ここで、図7のケ
ース2、ケース4のようにユーザ関数からユーザ関数ま
たはライブラリ関数を動的に呼出す場合の呼出し側関数
であるユーザ関数にかかる関数仮IDは呼出し側関数設
定手段122が独自に採番するが、ケース6のようにラ
イブラリ関数からライブラリ関数を動的に呼出す場合の
呼出し側関数であるライブラリ関数にかかる関数仮ID
については、システムライブラリ300側で事前に設定
されている関数仮IDを使う。その理由は、システムラ
イブラリ300には動的呼出しを行うライブラリ関数に
動的呼出しにかかるプロファイル処理が既に挿入されて
おり、そこでは事前に設定した関数仮IDを使っている
からである。
設定手段123により、ソースプログラム200を実行
した際に動的に呼出される可能性のある呼出され側関数
を洗い出し、その呼出され側関数毎の関数仮IDを設定
した呼出され側関数DB113を生成する。ここで、図
7のケース2のように呼出される関数がユーザ関数であ
る場合の当該ユーザ関数の関数仮IDは呼出され側関数
設定手段123が独自に採番するが、ケース4、ケース
6のように呼出される関数がライブラリ関数である場合
の当該ライブラリ関数の関数仮IDはシステムライブラ
リ300側で事前に設定されている関数仮IDを使う。
その理由は、システムライブラリ300にはプロファイ
ル処理のために、動的に呼出されるライブラリ関数に事
前に関数仮IDが付与されているからである。
番号インデックステーブル作成手段124により、コー
ルペア識別番号DB111中のコールペア仮識別番号を
連続した番号のコールペア識別番号に変換し、コールペ
ア仮識別番号とコールペア識別番号との対照表であるコ
ールペア識別番号インデックステーブル114を作成す
る。これは、コールペア識別番号DB111中のコール
ペア仮識別番号は、システムライブラリ300で事前に
設定されたコールペア仮識別番号も含むために連続した
識別番号になっておらず、後述する静的コールペア情報
格納テーブル118を生成するための識別番号としては
適当でないからである。
インデックステーブル作成手段125により、呼出し側
関数DB112中の動的呼出し側関数仮IDを連続した
番号の動的呼出し側関数IDに変換し、動的呼出し側関
数仮IDと動的呼出し側関数IDとの対照表である呼出
し側関数インデックステーブル115を作成し、また呼
出され側関数インデックステーブル作成手段126によ
り、呼出され側関数DB113中の関数仮IDを連続し
た番号の関数IDに変換し、関数仮IDと関数IDとの
対照表である呼出され側関数インデックステーブル11
6を作成する。これは、呼出し側関数DB112及び呼
出され側関数DB113中の関数仮IDは、システムラ
イブラリ300で事前に設定された関数仮IDも含むた
めに連続した識別番号になっておらず、後述する動的コ
ールペア情報格納テーブル119を生成するための識別
番号としては適当でないからである。
ースプログラム200、コールペア識別番号DB11
1、呼出し側関数DB112、呼出され側関数DB11
3、コールペア識別番号インデックステーブル114、
呼出し側関数インデックステーブル115、呼出され側
関数インデックステーブル116を入力し、静的プロフ
ァイル処理、動的プロファイル処理、コールペア識別番
号インデックステーブル114、呼出し側関数インデッ
クステーブル115、呼出され側関数インデックステー
ブル116、静的コールペア情報格納テーブル118、
動的コールペア情報格納テーブル119を組み入れたプ
ロファイル処理入りソースプログラム117を生成す
る。
挿入手段127によって、ソースプログラム200中
に、静的な関数呼出し毎にその呼出しにかかるコールペ
アの呼出し回数をインクリメントする静的プロファイル
処理を挿入すると共に、静的な呼出しにかかるコールペ
ア毎に関数呼出しの回数を格納する静的コールペア情報
格納テーブル118の領域を設定する処理等を挿入す
る。ライブラリ関数からライブラリ関数を静的に呼出す
箇所にはシステムライブラリ300中で既に静的プロフ
ァイル処理が挿入されているため、ここでは、図7のケ
ース1、ケース3のようにユーザ関数からユーザ関数ま
たはライブラリ関数を静的に呼出す箇所に静的プロファ
イル処理を挿入する。
段128によって、ソースプログラム200中に、動的
な関数呼出し毎にその呼出しにかかるコールペアの呼出
し回数をインクリメントする動的プロファイル処理を挿
入すると共に、動的な呼出しにかかるコールペア毎に関
数呼出しの回数を格納する動的コールペア情報格納テー
ブル119の領域を設定する処理等を挿入する。ライブ
ラリ関数からライブラリ関数を動的に呼出す箇所にはシ
ステムライブラリ300中で既に動的プロファイル処理
が挿入されているため、ここでは、図7のケース2、ケ
ース4のようにユーザ関数から動的に呼出しを行ってい
る箇所に動的プロファイル処理を挿入する。
は、プロファイル処理入りソースプログラム117をコ
ンパイルし、システムライブラリ300のライブラリ関
数とリンクして、実行することにより、静的および動的
な呼出しにかかるコールペア毎の呼出し回数を静的コー
ルペア情報格納テーブル118および動的コールペア情
報格納テーブル119に収集する。
静的呼出しコールペア情報作成手段131によって静的
な呼出しにかかる呼出し側関数名と呼出され側関数名の
組毎の呼出し回数を作成し、動的呼出しコールペア情報
作成手段132によって動的な呼出しにかかる呼出し側
関数名と呼出され側関数名の組毎の呼出し回数を作成
し、統合手段133によって両者を統合することによ
り、最終的なコールペア情報400を生成して出力す
る。
備わる各機能部及び記憶部の詳細を説明する。
00及びシステムライブラリ300を入力し、コールペ
ア識別番号設定手段121によりコールペア識別番号D
B111を生成し、この生成したコールペア識別番号D
B111からコールペア識別番号インデックステーブル
作成手段124によりコールペア識別番号インデックス
テーブル114を生成する。また、呼出し側関数設定手
段122により呼出し側関数DB112を生成し、この
生成した呼出し側関数DB112から呼出し側関数イン
デックステーブル作成手段125により呼出し側関数イ
ンデックステーブル115を生成する。さらに、呼出さ
れ側関数設定手段123により呼び出され側関数DB1
13を生成し、この生成した呼出され側関数DB113
から呼出され側関数インデックステーブル作成手段12
6により呼出され側関数インデックステーブル116を
生成する。各々の手段121〜126は以下のような処
理を行う。
8のフローチャートに示すように、先ず、ソースプログ
ラム200を解析して、図7のケース1の静的な呼出
し、つまりユーザ関数から別のユーザ関数を静的に呼出
している記述(図28のx1=func1(a); 等の記述)を全
て洗い出し、各コールペア毎に例えば0番から始まるコ
ールペア仮識別番号を割り振ってコールペア識別番号D
B111に登録する(S1)。次に、同じくソースプロ
グラム200を解析して、図7のケース3の静的な呼出
し、つまりユーザ関数からライブラリ関数を静的に呼出
している記述を全て洗い出し、各コールペア毎にステッ
プS1で割り振った仮識別番号に続くコールペア仮識別
番号を割り振ってコールペア識別番号DB111に登録
する(S2)。次に、図7のケース5の静的な呼出し、
つまり静的または動的に呼出されているライブラリ関数
から別のライブラリ関数を静的に呼出している記述を全
て洗い出し、各コールペア毎にシステムライブラリ20
0中の図3に示したコールペア仮識別番号テーブルから
コールペア仮識別番号を取得してコール識別番号DB1
11に登録する(S3)。ここで、ステップS3で求め
るコールペア中の呼出し側関数となるライブラリ関数
は、図7のケース3、ケース4によってユーザ関数から
静的または動的に呼出されているライブラリ関数と、ケ
ース5、ケース6のように別のライブラリ関数から静的
または動的に呼出されているライブラリ関数の双方を含
む。
ールペアの抽出処理の例を以下に示す。先ず、ソースプ
ログラム200中のユーザ関数から静的または動的に呼
出される可能性のあるライブラリ関数を全て検出する。
ソースプログラム200中のユーザ関数から静的に呼出
される可能性のあるライブラリ関数はステップS2と同
様にして求まる。ソースプログラム200中のユーザ関
数から動的に呼出される可能性のあるライブラリ関数は
後述する呼出され側関数設定手段123における方法と
同様にして求めることができる。次に、こうして検出し
たライブラリ関数を、それぞれ呼出し連鎖の探索木のル
ートにおく。そして、それぞれの探索木毎に、ルートの
ライブラリ関数から静的または動的に呼出される可能性
のあるライブラリ関数を探索し、存在すればルート直下
のノードに置く。つまり、ルートのライブラリ関数中か
ら静的な呼出し記述を検出して静的に呼出されるライブ
ラリ関数を検出し、また後述する呼出され側関数設定手
段123における方法と同様にして当該ライブラリ関数
から動的に呼出される可能性のあるライブラリ関数を検
出し、ルート直下のノードに置く。以下、ルートに対し
て施した処理と同じ処理を各ノードについて繰り返し、
呼出し連鎖の探索木を完成させる。探索木のリーフはど
のライブラリ関数も呼出していないライブラリ関数とな
る。この呼出し連鎖の探索木において、静的な呼出しが
行われているノード間の組がケース5の静的コールペア
となる。
容例を示す。ケース1及びケース3による静的な呼出し
にかかるコールペア(a→b、a→A、c→d、d→
f、f→G)については0から始まる連続したコールペ
ア仮識別番号が付与されているが、ケース5による静的
な呼出しにかかるコールペア(A→B、G→H)につい
ては、システムライブラリ300で事前に設定されたコ
ールペア仮識別番号を使用しているため、不連続な番号
となっている。
作成手段124は、コールペア識別番号DB111中の
コールペア仮識別番号を0から始まる連続した番号のコ
ールペア識別番号に変換し、コールペア仮識別番号とコ
ールペア識別番号との対照表であるコールペア識別番号
インデックステーブル114を作成する。図10に図9
のコールペア識別番号DB111から生成したコールペ
ア識別番号インデックステーブル114の内容例を示
す。
ログラム200及びシステムライブラリ300を静的に
解析して、ユーザ関数またはライブラリ関数を動的に呼
出す可能性のあるユーザ関数及びライブラリ関数を求
め、それらの関数名を関数仮IDと共に呼出し側関数D
B112へ登録する。その処理例を図11に示す。
ースプログラム200の関数宣言の記述を解析し、ソー
スプログラム200で関数宣言された全てのユーザ関数
を動的呼出しユーザ関数集合に入れる(S11)。次
に、ソースプログラム200中の各ユーザ関数の参照記
述を解析し、動的呼出しユーザ関数集合中のユーザ関数
のうち、変数を介した関数呼出しの記述(図2のa=fu
nc(1);等)がその手続中にあるユーザ関数に印を付ける
(S12)。次に、印の付いたユーザ関数に0から始ま
る動的呼出し側関数仮IDを採番して、呼出し側関数D
B112へ登録する(S13)。
ステムライブラリ300中の図5に示した動的呼出しラ
イブラリ関数一覧の内容を動的呼出しライブラリ関数集
合に入れる(S14)。次に、動的呼出しライブラリ関
数集合中の動的呼出しライブラリ関数のうち、実際に使
用されている可能性のある動的呼出しライブラリ関数に
印を付ける(S15)。このステップS15の処理は具
体的には図12に示す如く以下のように行われる。
数Lに1を設定し(S20)、図7のケース3、ケース
4のようにソースプログラム200中から静的または動
的に呼出されている動的呼出しライブラリ関数にレベル
1の印を付ける(S21)。ソースプログラム200中
から静的に呼出されているか否かは、動的呼出しライブ
ラリ関数を静的に呼出す記述がソースプログラム200
中に存在するか否かによって検出することができる。ソ
ースプログラム200中から動的に呼出されているか否
かは、関数ポインタの変数に当該動的呼出しライブラリ
関数のポインタを設定する記述がソースプログラム20
0中に存在するか否かによって検出することができる。
イブラリ関数毎に、その動的呼出しライブラリ関数の内
容を静的に解析して、その動的呼出しライブラリ関数か
ら静的または動的に呼出されている可能性のある動的呼
出しライブラリ関数を検出し、その検出した動的呼出し
ライブラリ関数に集合上で印が付いていなければ、レベ
ル(L+1)、つまりレベル2の印を付ける(S22〜
S24)。
呼出しライブラリ関数について処理を終えると(S24
でYES)、Lを+1して2とし(S25)、レベル2
の印の付いた動的呼出しライブラリ関数が集合中に存在
すれば(S26でYES)、ステップS22に戻って上
述した処理を繰り返す。存在しなければ、図12の処理
を終了する。
定手段122は、動的呼出しライブラリ関数集合におい
て、何れかのレベルの印の付いた動的呼出しライブラリ
関数毎に、その関数仮IDをシステムライブラリ300
の図4の関数仮IDテーブルから取得して、呼出し側関
数DB112に登録する(S16)。
を示す。他の関数を動的に呼出す関数のうち、ユーザ関
数については0から始まる連続した動的呼出し側関数仮
IDが付与されているが、ライブラリ関数については、
システムライブラリ200で事前に設定された関数仮I
Dを使用しているため、動的呼出し側関数仮IDは不連
続になっている。
段125は、呼出し側関数DB112中の動的呼出し側
関数仮IDを0から始まる連続した番号の動的呼出し側
関数IDに変換し、動的呼出し側関数仮IDと動的呼出
し側関数IDとの対照表である呼出し側関数インデック
ステーブル115を作成する。図14に図13の呼出し
側関数DB112から生成した呼出し側関数インデック
ステーブル115の内容例を示す。
プログラム200及びシステムライブラリ300を静的
に解析して、ユーザ関数またはライブラリ関数から動的
に呼出される可能性のあるユーザ関数及びライブラリ関
数を求め、それらの関数名を関数仮IDと共に呼出され
側関数DB113へ登録する。その処理例を図15に示
す。
ソースプログラム200の関数宣言の記述を解析し、ソ
ースプログラム200で関数宣言された全てのユーザ関
数を動的呼出されユーザ関数集合に入れる(S31)。
次に、ソースプログラム200を静的に解析し、動的呼
出されユーザ関数集合中のユーザ関数のうち、関数への
ポインタを変数に格納する記述(図2のfunc=func1;
等)に現れるユーザ関数に印を付ける(S32)。次
に、印の付いたユーザ関数に0から始まる関数仮IDを
採番して、呼出され側関数DB113へ登録する(S3
3)。
システムライブラリ300中の全てのライブラリ関数を
動的呼出されライブラリ関数集合に入れる(S34)。
次に、動的呼出されライブラリ関数集合中のライブラリ
関数のうち、実際に使用される(実際に動的に呼出され
る)可能性のあるライブラリ関数に印を付ける(S3
5)。このステップS35の処理は具体的には図16に
示す如く以下のように行われる。
のライブラリ関数のうち、ソースプログラム200中の
関数へのポインタを変数に格納する記述(図2のfunc=
func1;等)に現れるライブラリ関数に印を付ける(S4
1)。次に、呼出し側関数設定手段122で作成された
呼出し側関数DB112中の動的呼出しライブラリ関数
を動的呼出しライブラリ関数集合に入れ(S42)、そ
の集合中の個々の動的呼出しライブラリ関数を静的に解
析して、関数へのポインタを変数に格納する記述の有無
によって、当該動的呼出しライブラリ関数から動的に呼
出される可能性のあるライブラリ関数を求め、動的呼出
されライブラリ関数集合上で印を付ける(S43)。
設定手段123は、動的呼出されライブラリ関数集合に
おいて、印の付いたライブラリ関数毎に、その関数仮I
Dをシステムライブラリ300の図4の関数仮IDテー
ブルから取得して、呼出され側関数DB113に登録す
る(S36)。
例を示す。他の関数から動的に呼出される関数のうち、
ユーザ関数については0から始まる連続した関数仮ID
が付与されているが、ライブラリ関数については、シス
テムライブラリ200で事前に設定された関数仮IDを
使用しているため、その関数仮IDは不連続になってい
る。
手段126は、呼出され側関数DB113中の関数仮I
Dを0から始まる連続した番号の関数IDに変換し、関
数仮IDと関数IDとの対照表である呼出され側関数イ
ンデックステーブル116を作成する。図18に図17
の呼出され側関数DB113から生成した呼出され側関
数インデックステーブル116の内容例を示す。
プログラム200、コールペア識別番号DB111、呼
出し側関数DB112、呼出され側関数DB113、コ
ールペア識別番号インデックステーブル114、呼出し
側関数インデックステーブル115、呼出され側関数イ
ンデックステーブル116を入力し、静的呼出しプロフ
ァイル処理挿入手段127によって、ソースプログラム
200に静的な関数呼出し毎にプロファイル処理を挿入
すると共に、静的な呼出しにかかるコールペア毎に関数
呼出しの回数を格納する静的コールペア情報格納テーブ
ル118の領域を設定し、また、動的呼出しプロファイ
ル処理挿入手段128によって、ソースプログラム20
0に動的な関数呼出し毎にプロファイル処理を挿入する
と共に、動的な呼出しにかかるコールペア毎に関数呼出
しの回数を格納する動的コールペア情報格納テーブル1
19の領域を設定する。
挿入手段127及び動的呼出しプロファイル処理挿入手
段128は、以下のような処理を行う。
7は、図19に示すように、先ずソースプログラム20
0に静的呼出しプロファイル処理関数の定義を挿入する
(S51)。静的呼出しプロファイル処理関数は、引数
としてコールペア仮識別番号を受け取り、図20に示す
ように、コールペア識別番号インデックステーブル11
4を参照してコールペア仮識別番号をコールペア識別番
号に変換し(S61)、このコールペア識別番号を静的
コールペア情報格納テーブル118のインデックスとし
て該当エントリの値を1増加する(S62)処理を行う
関数である。
1つのコールペアに注目し(S52)、そのコールペア
仮識別番号が100未満か否かを判別し(S53)、1
00未満であれば、つまり呼出し側関数がユーザ関数で
且つ呼出され側関数がユーザ関数またはライブラリ関数
であるコールペアであれば、ソースプログラム200中
の当該静的な呼出しの記述(図28のx1=func1(a); 等
の記述)の直前に、当該コールペア仮識別番号を引数と
して静的呼出しプロファイル処理関数を呼出す命令を挿
入する(S54)。コールペア仮識別番号が100以上
であった場合、つまり呼出し側関数および呼出され側関
数の双方がライブラリ関数であった場合、システムライ
ブラリ300中においては当該静的な呼出し箇所の直前
に当該コールペア仮識別番号を引数として静的呼出しプ
ロファイル処理関数を呼出す命令が既に挿入されている
ため、ステップ54はスキップする。
コールペアについて上述した処理を終えると、以降の各
コールペアについても同様な処理を行う(S55、S5
6、S53、S54)。そして、全てのコールペアにつ
いて処理を終えると、静的コールペア情報格納テーブル
118の領域を設定する処理と初期化処理をソースプロ
グラム200に挿入する(S57)。ここで設定する静
的コールペア情報格納テーブル118は、コールペア識
別番号インデックステーブル114に登録されたコール
ペア識別番号と1対1に対応する呼出し回数格納エント
リを有する図21に示すような1次元のテーブルであ
る。また、処理化処理には、静的コールペア情報格納テ
ーブル118の各呼出し回数格納エントリに値0を設定
する処理などが含まれる。最後に静的呼出しプロファイ
ル処理挿入手段127は、静的呼出しプロファイル処理
から参照できるようにコールペア識別番号インデックス
テーブル114をソースプログラム200に挿入する
(S58)。
8は、図22に示すように、先ずソースプログラム20
0に動的呼出しプロファイル処理関数の定義を挿入する
(S71)。動的呼出しプロファイル処理関数は、引数
として呼出し側関数の関数仮IDと動的呼出しに使う変
数(少なくとも実行時点で呼出し側関数の開始アドレス
が入る)とを受け取り、図23に示すように、引数の変
数が示す呼出し側関数の開始アドレスの直前を読み込ん
で、呼出され側関数の関数仮IDを取得し(S91)、
呼出され側関数インデックステーブル116を参照し
て、呼出され側関数の関数仮IDから関数IDを取得し
(S92)、また、呼出し側関数インデックステーブル
115を参照して、呼出し側関数の関数仮IDから関数
IDを取得し(S93)、そして、呼出し側関数の関数
IDと呼出され側関数の関数IDを動的コールペア情報
格納テーブル119のインデックスとし、該当エントリ
の値を1増加させる(S94)処理を行う関数である。
呼出し側関数に注目し(S72)、その呼出し側関数が
ユーザ関数か否かを判別し(S73)、ユーザ関数であ
ればソースプログラム200中の当該呼出し側関数が変
数を介して他の関数を動的に呼出す記述(図2のa=fu
nc(1);等の記述)の直前に、当該呼出し側関数の関数仮
IDと当該変数(図2のa=func(1);の場合はfunc)を
引数として、動的呼出しプロファイル処理関数を呼出す
命令を挿入する(S74)。呼出し側関数がユーザ関数
でなくライブラリ関数であった場合、システムライブラ
リ300中においては当該動的な呼出し箇所の直前に当
該呼出し側関数の関数仮IDと当該変数を引数として動
的呼出しプロファイル処理関数を呼出す命令が既に挿入
されているため、ステップ74はスキップする。呼出し
側関数DB112中の1つの呼出し側関数について上述
した処理を終えると、以降の各呼出し側関数についても
同様な処理を行う(S75、S76、S73、S7
4)。
段128は、呼出され側関数DB113中の1つの呼出
され側関数に注目し(S77)、その呼出され側関数が
ユーザ関数か否かを判別し(S78)、ユーザ関数であ
れば当該呼出され側関数の開始アドレスの直前に当該呼
出され側関数の関数仮IDを埋め込む処理をソースプロ
グラム200中に挿入する(S79)。呼出され側関数
がユーザ関数でなくライブラリ関数であった場合、シス
テムライブラリ300中においては当該呼出され側関数
の開始アドレスの直前に当該呼出され側関数の関数仮I
Dが既に埋め込まれているため、ステップS79はスキ
ップする。呼出され側関数DB113中の1つの呼出さ
れ側関数について上述した処理を終えると、以降の各呼
出され側関数についても同様な処理を行う(S80、S
81、S78、S79)。
128は、動的コールペア情報格納テーブル119の領
域を設定する処理と初期化処理をソースプログラム20
0に挿入する(S82)。ここで設定する動的コールペ
ア情報格納テーブル119は、図24に示すように、呼
出し側関数インデックステーブル115に登録された動
的呼出し側関数の関数仮IDを行インデックス、呼出さ
れ側関数インデックステーブル116に登録された動的
呼出され側関数の関数仮IDを列インデックスとする2
次元のテーブルである。また、初期化処理には、動的コ
ールペア情報格納テーブル119の各呼出し回数格納エ
ントリに値0を設定する処理などが含まれる。最後に動
的呼出しプロファイル処理挿入手段128は、動的呼出
しプロファイル処理から参照できるように呼出し側関数
インデックステーブル115及び呼出され側関数インデ
ックステーブル116をソースプログラム200に挿入
する(S83)。
プロファイル処理入りソースプログラム117をコンパ
イルし、またシステムライブラリ300のライブラリ関
数をリンクして、実行可能なオブジェクトプログラムを
生成し、これを実行する。実行可能なオブジェクトプロ
グラムの状態では、或る関数が或る関数を静的に呼出す
コードの直前には、その2つの関数の組に対して割り当
てられたコールペア仮識別番号を引数として静的プロフ
ァイル処理を呼出すコードが設定されている。また、変
数を介して動的に他の関数を呼出すコードの直前には、
呼出し側関数の関数仮IDと前記変数とを引数として動
的プロファイル処理を呼出すコードが設定されており、
呼出され側関数の開始アドレスの直前には呼出され側関
数の関数仮IDが置かれている。このプログラムの実行
過程において、静的呼出しプロファイル処理を呼出す命
令に制御が移ると、静的呼出しプロファイル処理手段1
29によって静的呼出しプロファイル処理が実行され、
動的呼出しプロファイル処理を呼出す命令に制御が移る
と、動的呼出しプロファイル処理手段130によって動
的呼出しプロファイル処理が実行される。
よる静的呼出しプロファイル処理は図20のフローチャ
ートで示した通りであり、これによって、静的呼出しが
行われる毎にそのコールペアに対応する静的コールペア
情報格納テーブル118中の呼出し回数格納エントリの
値が+1されていく。また、動的呼出しプロファイル処
理手段130による動的呼出しプロファイル処理は図2
3のフローチャートで示した通りであり、これによっ
て、動的呼出しが行われる毎に呼出し側関数と呼出され
側関数とのペアで特定される動的コールペア情報格納テ
ーブル119中の呼出し回数格納エントリの値が+1さ
れていく。
ールペア情報格納テーブル118と動的コールペア情報
格納テーブル119とから最終的なコールペア情報40
0を生成して出力する。具体的には、プロファイル情報
統合部104内の静的呼出しコールペア情報作成手段1
31、動的呼出しコールペア情報作成手段132及び統
合手段133が以下のような処理を行う。
は、図25に示すように、先ず静的コールペア情報格納
テーブル118中の1つのエントリに注目し(S10
1)、コールペア識別番号インデックステーブル114
を参照して、そのエントリのコールペア識別番号をコー
ルペア仮識別番号に変換し(S102)、次にコールペ
ア識別番号DB111を参照してそのコールペア仮識別
番号に対応するコールペア(呼出し側関数名、呼出され
側関数名)を取得する(S103)。そして、そのコー
ルペアと現注目中のエントリに記録されている呼出し回
数とを含む1つの静的コールペア情報を作成する(S1
04)。1つのエントリについての処理を終えると、静
的コールペア情報格納テーブル118中の次の1つのエ
ントリに注目を移し(S105)、上述した処理を繰り
返す(S106、S102〜S105)。全エントリに
ついての処理を終えると、作成した全ての静的コールペ
ア情報を統合手段133に伝達する(S107)。
は、図26に示すように、先ず動的コールペア情報格納
テーブル119の1つの行に注目する(S111)。次
に、呼出し側関数インデックステーブル115を参照し
てその行の呼出し側関数の関数IDを関数仮IDに変換
し、次いで呼出し側関数DB112を参照してその関数
仮IDが設定された呼出し側関数名を取得する(S11
2)。
19の注目行の1つの列に注目し(S113)、呼出さ
れ側関数インデックステーブル116を参照してその列
の呼出され側関数の関数IDを関数仮IDに変換し、次
いで呼出され側関数DB113を参照してその関数仮I
Dが設定された呼出され側関数名を取得する(S11
4)。そして、ステップS112で取得した呼出し側関
数名とステップS114で取得した呼出され側関数名と
からなるコールペアと、注目中の行と列とで特定される
動的コールペア情報格納テーブル119のエントリに記
録されている呼出し回数とを含む1つの動的コールペア
情報を作成する(S115)。1つの列についての処理
を終了すると、注目行の次の1つの列に注目を移し(S
116)、前述と同様の処理を繰り返す(S117、S
114〜S116)。そして、注目行の全ての列につい
て処理を終えると、動的コールペア情報格納テーブル1
19の次の1つの行に注目を移し(S118)、前述と
同様の処理を繰り返す(S119、S112〜S11
8)。こうして、全ての行についての処理を終えると、
ステップS115で作成した全ての動的コールペア情報
を統合手段133に伝達する(S120)。
情報作成手段131から伝達される静的コールペア情報
と、動的呼出しコールペア情報作成手段132から伝達
される動的コールペア情報のうち、呼出し側関数名及び
呼出され側関数名が同じコールペア情報は両者の呼出し
回数を合算して1つのコールペア情報に統合することに
より、最終的に図6に示したようなコールペア情報40
0を生成する。
では、システムライブラリ300を利用するソースプロ
グラム200を対象としたが、システムライブラリ30
0を利用しないソースプログラムを対象とするプロファ
イル情報収集装置も本発明に含まれる。その場合、図1
の構成からシステムライブラリ300、コールペア識別
番号インデックステーブル作成手段124、呼出し側関
数インデックステーブル作成手段125、呼出され側関
数インデックステーブル作成手段126、コールペア識
別番号インデックステーブル114、呼出し側関数イン
デックステーブル115、呼出され側関数インデックス
テーブル116が削除される。
1では、ソースプログラム200を静的に解析して静的
な呼出しによって他の関数を呼出す可能性のある静的コ
ールペアを洗い出し、各静的コールペア毎にコールペア
識別番号を付与してコールペア識別番号DB111に登
録し、呼出し側関数設定手段122では、ソースプログ
ラム200を静的に解析して動的な呼出しによって他の
関数を呼出す可能性のある動的呼出し側関数を洗い出
し、各動的呼出し側関数に関数IDを付与して呼出し側
関数DB112に登録し、呼出され側関数設定手段12
3は、ソースプログラム200を静的に解析して動的な
呼出しによって他の関数から呼出される可能性のある動
的呼出され側関数を洗い出し、各動的呼出され側関数に
関数IDを付与して呼出され側関数DB113に登録す
る。
段127は、ソースプログラム200に、静的な呼出し
によって他の関数を呼出す処理毎に静的プロファイル処
理を挿入すると共に、コールペア識別番号毎にその静的
コールペアの呼出し回数を格納する静的コールペア情報
格納テーブル118の領域を設定する処理を挿入し、動
的呼出しプロファイル処理挿入手段128は、ソースプ
ログラム200に、動的な呼出しによって他の関数を呼
出す処理毎に動的プロファイル処理を挿入するととも
に、動的呼出し側関数IDと動的呼出され側関数IDと
の組み合わせである動的コールペア毎にその動的コール
ペアの呼出し回数を格納する動的コールペア情報格納テ
ーブル119の領域を設定する処理を挿入する。
129では、プロファイル処理入りソースプログラム1
17をコンパイルして実行したときに静的プロファイル
処理があったとき、当該静的な呼出しにかかるコールペ
ア識別番号をインデックスとして静的コールペア情報格
納テーブル118の該当エントリの呼出し回数をインク
リメントし、動的呼出しプロファイル処理手段130で
は、プロファイル処理入りソースプログラム117をコ
ンパイルして実行したときに動的プロファイル処理があ
ったとき、当該動的な呼出しにかかる動的呼出し側関数
IDと動的呼出され側関数IDをインデックスとして動
的コールペア情報格納テーブル119中の該当エントリ
の呼出し回数をインクリメントし、プロファイル情報統
合部104では、静的コールペア情報格納テーブル11
8の内容と動的コールペア情報格納テーブル119の内
容を統合したコールペア情報400を作成して出力す
る。
施の形態では、動的な呼出しにかかるコールペア情報に
加えて、静的な呼出しにかかるコールペア情報も収集し
たが、動的な呼出しにかかるコールペア情報だけを収集
するプロファイル情報収集装置も本発明に含まれる。そ
の場合、コールペア識別番号設定手段121、コールペ
ア識別番号DB111、コールペア識別番号インデック
ステーブル作成手段124、コールペア識別番号インデ
ックステーブル114、静的呼出しプロファイル処理挿
入手段127、静的呼出しプロファイル処理手段12
9、静的コールペア情報格納テーブル118、静的呼出
しコールペア情報作成手段131、統合手段133は省
略される。更に、この第3の実施の形態において、シス
テムライブラリ300を利用しないソースプログラムを
対象とするようにしたプロファイル情報収集装置も本発
明に含まれる。
ログラム内の動的関数呼出しにかかるコールペア情報を
収集する際に必要なコールペア情報を格納するテーブル
のサイズを縮小することが可能となる。その理由は、ソ
ースプログラムを静的に解析して動的呼出し側関数およ
び動的呼出され側関数をそれぞれ洗い出しているため、
動的コールペア情報格納テーブルとしては、洗い出した
動的呼出し側関数と動的呼出され側関数の組み合わせ分
のエントリを持つテーブルで済むからである。
利用されるシステムライブラリ内の関数にかかる動的コ
ールペア情報をも簡便に収集することができ、且つ、そ
の際に必要なコールペア情報を格納するテーブルのサイ
ズを縮小することができる。簡便になる理由は、プロフ
ァイル処理入りシステムライブラリを使用しているから
であり、テーブルのサイズを縮小できる理由は呼出し側
関数インデックステーブル及び呼出され側関数インデッ
クステーブルを介在させているからである。
および動的関数呼出しにかかるコールペア情報を収集す
ることができ、且つ、その際に必要なコールペア情報を
格納するテーブルのサイズを縮小することができる。静
的および動的関数呼出しにかかるコールペア情報を収集
することができる理由は、静的コールペア情報の収集と
動的コールペア情報の収集とを行って最後に統合するか
らであり、テーブルのサイズを縮小することができるの
は、ソースプログラムを静的に解析して静的コールペ
ア、動的呼出し側関数および動的呼出され側関数をそれ
ぞれ洗い出し、静的コールペア情報格納テーブルとして
は洗い出した静的コールペア分のエントリを持つテーブ
ルで済み、動的コールペア情報格納テーブルとしては洗
い出した動的呼出し側関数と動的呼出され側関数の組み
合わせ分のエントリを持つテーブルで済むからである。
また、コールペア識別番号インデックステーブル、呼出
し側関数インデックステーブル及び呼出され側関数イン
デックステーブルを介在させているからである。
報収集装置のブロック図である。
例を示す図である。
ア仮識別番号テーブルの内容例を示す図である。
Dテーブルの内容例を示す図である。
しライブラリ関数一覧の内容例を示す図である。
示す図である。
ローチャートである。
る。
内容例を示す図である。
チャートである。
ーチャートである。
を示す図である。
ーチャートである。
ーチャートである。
る。
例を示す図である。
例を示すフローチャートである。
フローチャートである。
示す図である。
例を示すフローチャートである。
フローチャートである。
示す図である。
を示すフローチャートである。
を示すフローチャートである。
図である。
の例を示す図である。
ールペア識別番号データベースの内容例を示す図であ
る。
グラムの例を示す図である。
ルの従来例を示す図である。
コールペア情報の例を示す図である。
グされたソースプログラムの例と関数の呼出し関係の例
を示す図である。
Claims (10)
- 【請求項1】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置において、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数およ
び他の関数から呼出される可能性のある動的呼出され側
関数をそれぞれ洗い出し、各動的呼出し側関数及び各動
的呼出され側関数に関数IDを付与する手段と、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数の関数IDと前記動的呼出さ
れ側関数の関数IDとの組み合わせである動的コールペ
ア毎にその動的コールペアの呼出し回数を格納する動的
コールペア情報格納テーブルの領域を設定する処理を挿
入する手段と、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記動的プロファイル処理があったと
き、当該動的な呼出しにかかる動的呼出し側関数の関数
IDと動的呼出され側関数の関数IDをインデックスと
して前記動的コールペア情報格納テーブル中の該当エン
トリの呼出し回数をインクリメントする手段とを備えた
プロファイル情報収集装置。 - 【請求項2】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置において、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数を洗
い出し、各動的呼出し側関数に関数IDを付与して呼出
し側関数データベースに登録する呼出し側関数設定手段
と、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数から呼出される可能性のある動的呼出され側
関数を洗い出し、各動的呼出され側関数に関数IDを付
与して呼出され側関数データベースに登録する呼出され
側関数設定手段と、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段と、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記動的プロファイル処理があったと
き、当該動的な呼出しにかかる動的呼出し側関数IDと
動的呼出され側関数IDをインデックスとして前記動的
コールペア情報格納テーブル中の該当エントリの呼出し
回数をインクリメントする動的呼出しプロファイル処理
手段とを備えたプロファイル情報収集装置。 - 【請求項3】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置において、 ソースプログラム及び該ソースプログラムで利用される
プロファイル処理入りシステムライブラリを静的に解析
して、プログラムの実行中に動的な呼出しによって他の
関数を呼出す可能性のある動的呼出し側関数を洗い出
し、各動的呼出し側関数のうちユーザ関数については関
数仮IDを採番して付与し、ライブラリ関数については
システムライブラリで事前に設定された関数仮IDを付
与して呼出し側関数データベースに登録する呼出し側関
数設定手段と、 前記呼出し側関数データベース中の動的呼出し側関数仮
IDを連続した番号の動的呼出し側関数IDに変換し、
動的呼出し側関数仮IDと動的呼出し側関数IDとの対
照表である呼出し側関数インデックステーブルを作成す
る呼出し側関数インデックステーブル作成手段と、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数から呼出される可能性のある動的呼出され側関
数を洗い出し、各動的呼出され側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出され側関数データベースに登録
する呼出され側関数設定手段と、 前記呼出され側関数データベース中の動的呼出され側関
数仮IDを連続した番号の動的呼出され側関数IDに変
換し、動的呼出され側関数仮IDと動的呼出され側関数
IDとの対照表である呼出され側関数インデックステー
ブルを作成する呼出され側関数インデックステーブル作
成手段と、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段と、 プロファイル処理入りソースプログラムをコンパイル
し、前記システムライブラリとリンクして実行したとき
に前記動的プロファイル処理があったとき、当該動的な
呼出しにかかる動的呼出し側関数仮ID及び動的呼出さ
れ側関数仮IDを前記呼出し側関数インデックステーブ
ル及び前記呼出され側関数インデックステーブルを参照
して動的呼出し側関数ID及び動的呼出され側関数ID
に変換し、これらをインデックスとして前記動的コール
ペア情報格納テーブル中の該当エントリの呼出し回数を
インクリメントする動的呼出しプロファイル処理手段と
を備えたプロファイル情報収集装置。 - 【請求項4】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置において、 ソースプログラムを静的に解析して静的な呼出しによっ
て他の関数を呼出す可能性のある静的コールペアを洗い
出し、各静的コールペア毎にコールペア識別番号を付与
してコールペア識別番号データベースに登録するコール
ペア識別番号設定手段と、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数を洗
い出し、各動的呼出し側関数に関数IDを付与して呼出
し側関数データベースに登録する呼出し側関数設定手段
と、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数から呼出される可能性のある動的呼出され側
関数を洗い出し、各動的呼出され側関数に関数IDを付
与して呼出され側関数データベースに登録する呼出され
側関数設定手段と、 ソースプログラムに、静的な呼出しによって他の関数を
呼出す処理毎に静的プロファイル処理を挿入すると共
に、前記コールペア識別番号毎にその静的コールペアの
呼出し回数を格納する静的コールペア情報格納テーブル
の領域を設定する処理を挿入する静的呼出しプロファイ
ル処理挿入手段と、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段と、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記静的プロファイル処理があったと
き、当該静的な呼出しにかかるコールペア識別番号をイ
ンデックスとして前記静的コールペア情報格納テーブル
の該当エントリの呼出し回数をインクリメントする静的
呼出しプロファイル処理手段と、 前記プロファイル処理入りソースプログラムをコンパイ
ルして実行したときに前記動的プロファイル処理があっ
たとき、当該動的な呼出しにかかる動的呼出し側関数I
Dと動的呼出され側関数IDをインデックスとして前記
動的コールペア情報格納テーブル中の該当エントリの呼
出し回数をインクリメントする動的呼出しプロファイル
処理手段と、 前記静的コールペア情報格納テーブルの内容と前記動的
コールペア情報格納テーブルの内容を統合したコールペ
ア情報を作成して出力するプロファイル情報統合手段と
を備えたプロファイル情報収集装置。 - 【請求項5】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置において、 ソースプログラム及び該ソースプログラムで利用される
プロファイル処理入りシステムライブラリを静的に解析
して静的な呼出しによって他の関数を呼出す可能性のあ
る静的コールペアを洗い出し、各静的コールペアのうち
呼出し側関数及び呼出され側関数の双方がライブラリ関
数のコールペアについてはシステムライブラリで事前に
設定されたコールペア仮識別番号を付与し、それ以外の
コールペアについてはコールペア仮識別番号を採番して
付与してコールペア識別番号データベースに登録するコ
ールペア識別番号設定手段と、 前記コールペア識別番号データベース中のコールペア仮
識別番号を連続した番号のコールペア識別番号に変換
し、コールペア仮識別番号とコールペア識別番号との対
照表であるコールペア識別番号インデックステーブルを
作成するコールペア識別番号インデックス作成手段と、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数を呼出す可能性のある動的呼出し側関数を洗い
出し、各動的呼出し側関数のうちユーザ関数については
関数仮IDを採番して付与し、ライブラリ関数について
はシステムライブラリで事前に設定された関数仮IDを
付与して呼出し側関数データベースに登録する呼出し側
関数設定手段と、 前記呼出し側関数データベース中の動的呼出し側関数仮
IDを連続した番号の動的呼出し側関数IDに変換し、
動的呼出し側関数仮IDと動的呼出し側関数IDとの対
照表である呼出し側関数インデックステーブルを作成す
る呼出し側関数インデックステーブル作成手段と、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数から呼出される可能性のある動的呼出され側関
数を洗い出し、各動的呼出され側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出され側関数データベースに登録
する呼出され側関数設定手段と、 前記呼出され側関数データベース中の動的呼出され側関
数仮IDを連続した番号の動的呼出され側関数IDに変
換し、動的呼出され側関数仮IDと動的呼出され側関数
IDとの対照表である呼出され側関数インデックステー
ブルを作成する呼出され側関数インデックステーブル作
成手段と、 ソースプログラムに、静的な呼出しによって他の関数を
呼出す処理毎に静的プロファイル処理を挿入すると共
に、前記コールペア識別番号毎にその静的コールペアの
呼出し回数を格納する静的コールペア情報格納テーブル
の領域を設定する処理を挿入する静的呼出しプロファイ
ル処理挿入手段と、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段と、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記静的プロファイル処理があったと
き、当該静的な呼出しにかかるコールペア仮識別番号を
前記コールペア識別番号インデックステーブルを参照し
てコールペア識別番号に変換し、それをインデックスと
して前記静的コールペア情報格納テーブルの該当エント
リの呼出し回数をインクリメントする静的呼出しプロフ
ァイル処理手段と、 プロファイル処理入りソースプログラムをコンパイル
し、前記システムライブラリとリンクして実行したとき
に前記動的プロファイル処理があったとき、当該動的な
呼出しにかかる動的呼出し側関数仮ID及び動的呼出さ
れ側関数仮IDを前記呼出し側関数インデックステーブ
ル及び前記呼出され側関数インデックステーブルを参照
して動的呼出し側関数ID及び動的呼出され側関数ID
に変換し、これらをインデックスとして前記動的コール
ペア情報格納テーブル中の該当エントリの呼出し回数を
インクリメントする動的呼出しプロファイル処理手段
と、 前記静的コールペア情報格納テーブルの内容と前記動的
コールペア情報格納テーブルの内容を統合したコールペ
ア情報を作成して出力するプロファイル情報統合手段と
を備えたプロファイル情報収集装置。 - 【請求項6】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置を構成するコンピ
ュータを、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数およ
び他の関数から呼出される可能性のある動的呼出され側
関数をそれぞれ洗い出し、各動的呼出し側関数及び各動
的呼出され側関数に関数IDを付与する手段、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数の関数IDと前記動的呼出さ
れ側関数の関数IDとの組み合わせである動的コールペ
ア毎にその動的コールペアの呼出し回数を格納する動的
コールペア情報格納テーブルの領域を設定する処理を挿
入する手段、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記動的プロファイル処理があったと
き、当該動的な呼出しにかかる動的呼出し側関数の関数
IDと動的呼出され側関数の関数IDをインデックスと
して前記動的コールペア情報格納テーブル中の該当エン
トリの呼出し回数をインクリメントする手段、 として機能させるプログラムを記録したコンピュータ可
読記録媒体。 - 【請求項7】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置を構成するコンピ
ュータを、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数を洗
い出し、各動的呼出し側関数に関数IDを付与して呼出
し側関数データベースに登録する呼出し側関数設定手
段、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数から呼出される可能性のある動的呼出され側
関数を洗い出し、各動的呼出され側関数に関数IDを付
与して呼出され側関数データベースに登録する呼出され
側関数設定手段、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記動的プロファイル処理があったと
き、当該動的な呼出しにかかる動的呼出し側関数IDと
動的呼出され側関数IDをインデックスとして前記動的
コールペア情報格納テーブル中の該当エントリの呼出し
回数をインクリメントする動的呼出しプロファイル処理
手段、 として機能させるプログラムを記録したコンピュータ可
読記録媒体。 - 【請求項8】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置を構成するコンピ
ュータを、 ソースプログラム及び該ソースプログラムで利用される
プロファイル処理入りシステムライブラリを静的に解析
して、プログラムの実行中に動的な呼出しによって他の
関数を呼出す可能性のある動的呼出し側関数を洗い出
し、各動的呼出し側関数のうちユーザ関数については関
数仮IDを採番して付与し、ライブラリ関数については
システムライブラリで事前に設定された関数仮IDを付
与して呼出し側関数データベースに登録する呼出し側関
数設定手段、 前記呼出し側関数データベース中の動的呼出し側関数仮
IDを連続した番号の動的呼出し側関数IDに変換し、
動的呼出し側関数仮IDと動的呼出し側関数IDとの対
照表である呼出し側関数インデックステーブルを作成す
る呼出し側関数インデックステーブル作成手段、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数から呼出される可能性のある動的呼出され側関
数を洗い出し、各動的呼出され側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出され側関数データベースに登録
する呼出され側関数設定手段、 前記呼出され側関数データベース中の動的呼出され側関
数仮IDを連続した番号の動的呼出され側関数IDに変
換し、動的呼出され側関数仮IDと動的呼出され側関数
IDとの対照表である呼出され側関数インデックステー
ブルを作成する呼出され側関数インデックステーブル作
成手段、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段、 プロファイル処理入りソースプログラムをコンパイル
し、前記システムライブラリとリンクして実行したとき
に前記動的プロファイル処理があったとき、当該動的な
呼出しにかかる動的呼出し側関数仮ID及び動的呼出さ
れ側関数仮IDを前記呼出し側関数インデックステーブ
ル及び前記呼出され側関数インデックステーブルを参照
して動的呼出し側関数ID及び動的呼出され側関数ID
に変換し、これらをインデックスとして前記動的コール
ペア情報格納テーブル中の該当エントリの呼出し回数を
インクリメントする動的呼出しプロファイル処理手段、 として機能させるプログラムを記録したコンピュータ可
読記録媒体。 - 【請求項9】 プログラムの実行中にプロファイル情報
を収集するプロファイル情報収集装置を構成するコンピ
ュータを、 ソースプログラムを静的に解析して静的な呼出しによっ
て他の関数を呼出す可能性のある静的コールペアを洗い
出し、各静的コールペア毎にコールペア識別番号を付与
してコールペア識別番号データベースに登録するコール
ペア識別番号設定手段、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数を呼出す可能性のある動的呼出し側関数を洗
い出し、各動的呼出し側関数に関数IDを付与して呼出
し側関数データベースに登録する呼出し側関数設定手
段、 ソースプログラムを静的に解析して動的な呼出しによっ
て他の関数から呼出される可能性のある動的呼出され側
関数を洗い出し、各動的呼出され側関数に関数IDを付
与して呼出され側関数データベースに登録する呼出され
側関数設定手段、 ソースプログラムに、静的な呼出しによって他の関数を
呼出す処理毎に静的プロファイル処理を挿入すると共
に、前記コールペア識別番号毎にその静的コールペアの
呼出し回数を格納する静的コールペア情報格納テーブル
の領域を設定する処理を挿入する静的呼出しプロファイ
ル処理挿入手段、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記静的プロファイル処理があったと
き、当該静的な呼出しにかかるコールペア識別番号をイ
ンデックスとして前記静的コールペア情報格納テーブル
の該当エントリの呼出し回数をインクリメントする静的
呼出しプロファイル処理手段、 前記プロファイル処理入りソースプログラムをコンパイ
ルして実行したときに前記動的プロファイル処理があっ
たとき、当該動的な呼出しにかかる動的呼出し側関数I
Dと動的呼出され側関数IDをインデックスとして前記
動的コールペア情報格納テーブル中の該当エントリの呼
出し回数をインクリメントする動的呼出しプロファイル
処理手段、 前記静的コールペア情報格納テーブルの内容と前記動的
コールペア情報格納テーブルの内容を統合したコールペ
ア情報を作成して出力するプロファイル情報統合手段、 として機能させるプログラムを記録したコンピュータ可
読記録媒体。 - 【請求項10】 プログラムの実行中にプロファイル情
報を収集するプロファイル情報収集装置を構成するコン
ピュータを、 ソースプログラム及び該ソースプログラムで利用される
プロファイル処理入りシステムライブラリを静的に解析
して静的な呼出しによって他の関数を呼出す可能性のあ
る静的コールペアを洗い出し、各静的コールペアのうち
呼出し側関数及び呼出され側関数の双方がライブラリ関
数のコールペアについてはシステムライブラリで事前に
設定されたコールペア仮識別番号を付与し、それ以外の
コールペアについてはコールペア仮識別番号を採番して
付与してコールペア識別番号データベースに登録するコ
ールペア識別番号設定手段、 前記コールペア識別番号データベース中のコールペア仮
識別番号を連続した番号のコールペア識別番号に変換
し、コールペア仮識別番号とコールペア識別番号との対
照表であるコールペア識別番号インデックステーブルを
作成するコールペア識別番号インデックス作成手段、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数を呼出す可能性のある動的呼出し側関数を洗い
出し、各動的呼出し側関数のうちユーザ関数については
関数仮IDを採番して付与し、ライブラリ関数について
はシステムライブラリで事前に設定された関数仮IDを
付与して呼出し側関数データベースに登録する呼出し側
関数設定手段、 前記呼出し側関数データベース中の動的呼出し側関数仮
IDを連続した番号の動的呼出し側関数IDに変換し、
動的呼出し側関数仮IDと動的呼出し側関数IDとの対
照表である呼出し側関数インデックステーブルを作成す
る呼出し側関数インデックステーブル作成手段、 ソースプログラム及び前記システムライブラリを静的に
解析して、プログラムの実行中に動的な呼出しによって
他の関数から呼出される可能性のある動的呼出され側関
数を洗い出し、各動的呼出され側関数のうちユーザ関数
については関数仮IDを採番して付与し、ライブラリ関
数についてはシステムライブラリで事前に設定された関
数仮IDを付与して呼出され側関数データベースに登録
する呼出され側関数設定手段、 前記呼出され側関数データベース中の動的呼出され側関
数仮IDを連続した番号の動的呼出され側関数IDに変
換し、動的呼出され側関数仮IDと動的呼出され側関数
IDとの対照表である呼出され側関数インデックステー
ブルを作成する呼出され側関数インデックステーブル作
成手段、 ソースプログラムに、静的な呼出しによって他の関数を
呼出す処理毎に静的プロファイル処理を挿入すると共
に、前記コールペア識別番号毎にその静的コールペアの
呼出し回数を格納する静的コールペア情報格納テーブル
の領域を設定する処理を挿入する静的呼出しプロファイ
ル処理挿入手段、 ソースプログラムに、動的な呼出しによって他の関数を
呼出す処理毎に動的プロファイル処理を挿入するととも
に、前記動的呼出し側関数IDと前記動的呼出され側関
数IDとの組み合わせである動的コールペア毎にその動
的コールペアの呼出し回数を格納する動的コールペア情
報格納テーブルの領域を設定する処理を挿入する動的呼
出しプロファイル処理挿入手段、 プロファイル処理入りソースプログラムをコンパイルし
て実行したときに前記静的プロファイル処理があったと
き、当該静的な呼出しにかかるコールペア仮識別番号を
前記コールペア識別番号インデックステーブルを参照し
てコールペア識別番号に変換し、それをインデックスと
して前記静的コールペア情報格納テーブルの該当エント
リの呼出し回数をインクリメントする静的呼出しプロフ
ァイル処理手段、 プロファイル処理入りソースプログラムをコンパイル
し、前記システムライブラリとリンクして実行したとき
に前記動的プロファイル処理があったとき、当該動的な
呼出しにかかる動的呼出し側関数仮ID及び動的呼出さ
れ側関数仮IDを前記呼出し側関数インデックステーブ
ル及び前記呼出され側関数インデックステーブルを参照
して動的呼出し側関数ID及び動的呼出され側関数ID
に変換し、これらをインデックスとして前記動的コール
ペア情報格納テーブル中の該当エントリの呼出し回数を
インクリメントする動的呼出しプロファイル処理手段、 前記静的コールペア情報格納テーブルの内容と前記動的
コールペア情報格納テーブルの内容を統合したコールペ
ア情報を作成して出力するプロファイル情報統合手段、 として機能させるプログラムを記録したコンピュータ可
読記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000330600A JP3439449B2 (ja) | 2000-10-30 | 2000-10-30 | プロファイル情報収集装置及びコンピュータ可読記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000330600A JP3439449B2 (ja) | 2000-10-30 | 2000-10-30 | プロファイル情報収集装置及びコンピュータ可読記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002132542A JP2002132542A (ja) | 2002-05-10 |
JP3439449B2 true JP3439449B2 (ja) | 2003-08-25 |
Family
ID=18807090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000330600A Expired - Fee Related JP3439449B2 (ja) | 2000-10-30 | 2000-10-30 | プロファイル情報収集装置及びコンピュータ可読記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3439449B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4929121B2 (ja) * | 2007-10-16 | 2012-05-09 | 株式会社東芝 | ソースプログラム解析装置、ソースプログラム解析方法及びコンピュータプログラム |
JP5496849B2 (ja) | 2010-10-15 | 2014-05-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プロファイル計装方法、プログラム及びコンパイラ |
JP5548648B2 (ja) * | 2011-05-18 | 2014-07-16 | 株式会社エヌ・ティ・ティ・データ | ソースコード分析装置、ソースコード分析方法およびプログラム |
CN105786561B (zh) * | 2016-01-29 | 2020-06-02 | 北京小米移动软件有限公司 | 进程调用的方法及装置 |
US11650860B2 (en) * | 2021-08-02 | 2023-05-16 | Dell Products L.P. | Managing services across containers |
-
2000
- 2000-10-30 JP JP2000330600A patent/JP3439449B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2002132542A (ja) | 2002-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3110040B2 (ja) | 手順間レジスタ割付けを伴うコンピュータプログラムのコンパイル方法及び装置 | |
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
US5146594A (en) | Method of producing object program based on interprocedural dataflow analysis of a source program | |
US6857120B1 (en) | Method for characterizing program execution by periodic call stack inspection | |
US5740443A (en) | Call-site specific selective automatic inlining | |
Harrold et al. | Interprocedual data flow testing | |
US7263532B2 (en) | Region-based memory management for object-oriented programs | |
JP4812997B2 (ja) | メモリ管理によって参照の局所性を改善するための方法および装置 | |
US7743368B2 (en) | Method and apparatus for providing class hierarchy information for function devirtualization | |
US6286133B1 (en) | Method and apparatus for strategic compilation of source programs into two or more target languages | |
US5396627A (en) | Method of producing object program based on interprocedural dataflow analysis of a source program | |
US6675377B1 (en) | Program conversion apparatus | |
US7210126B2 (en) | Using identifiers and counters for controlled optimization compilation | |
US7669191B1 (en) | Compile-time dispatch of operations on type-safe heterogeneous containers | |
US5940621A (en) | Language independent optimal size-based storage allocation | |
EP3278218A1 (en) | Field specialization systems and methods for improving program performance | |
Thakur et al. | Compare less, defer more: Scaling value-contexts based whole-program heap analyses | |
JP3439449B2 (ja) | プロファイル情報収集装置及びコンピュータ可読記録媒体 | |
US20020062478A1 (en) | Compiler for compiling source programs in an object-oriented programming language | |
US20060156292A1 (en) | Program automatic converting method and program automatic converting device | |
Forster et al. | Detecting precedence-related advice interference | |
Zhang et al. | Automatic construction of accurate application call graph with library call abstraction for Java | |
US6757671B1 (en) | Use of indices for queries with comparisons on a function | |
Corbera et al. | New shape analysis techniques for automatic parallelization of C codes | |
JP2003256215A (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080613 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090613 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100613 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100613 Year of fee payment: 7 |
|
S533 | Written request for registration of change of name |
Free format text: JAPANESE INTERMEDIATE CODE: R313533 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100613 Year of fee payment: 7 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100613 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110613 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120613 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120613 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130613 Year of fee payment: 10 |
|
LAPS | Cancellation because of no payment of annual fees |