JP3290567B2 - プロファイル計装方法 - Google Patents

プロファイル計装方法

Info

Publication number
JP3290567B2
JP3290567B2 JP21635595A JP21635595A JP3290567B2 JP 3290567 B2 JP3290567 B2 JP 3290567B2 JP 21635595 A JP21635595 A JP 21635595A JP 21635595 A JP21635595 A JP 21635595A JP 3290567 B2 JP3290567 B2 JP 3290567B2
Authority
JP
Japan
Prior art keywords
code
profile
statement
conversion
information
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
Application number
JP21635595A
Other languages
English (en)
Other versions
JPH0962544A (ja
Inventor
ショーン 金城
純一 萩原
達也 進藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP21635595A priority Critical patent/JP3290567B2/ja
Priority to US08/641,353 priority patent/US5950003A/en
Publication of JPH0962544A publication Critical patent/JPH0962544A/ja
Application granted granted Critical
Publication of JP3290567B2 publication Critical patent/JP3290567B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3404Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for parallel or distributed programming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】(目次) 発明の属する技術分野 従来の技術 発明が解決しようとする課題(図12) 課題を解決するための手段 発明の実施の形態 (a)第1実施形態(プロファイル計装システム)の説
明(図1〜図3) (b)第2実施形態(プロファイル実行時システム)の
説明(図4〜図11) (c)その他 発明の効果
【0002】
【発明の属する技術分野】本発明は、プログラムの挙動
を把握するためにプログラム実行時に特定部分の実行時
間,繰り返し回数等のプロファイルデータを計測し収集
するための方法に関する。
【0003】
【従来の技術】一般に、プログラムの挙動をより良く理
解するために、プログラム作成者は、プロファイリング
ツールを必要としている。ここで、プロファイリングツ
ールとは、カウンタ等による詳細な命令実行時間や、手
続きレベル,基本ブロックレベル,及び/又は命令レベ
ルでのタイミング情報といったプロファイルデータを計
測して通知するためのものである。
【0004】ここで、プロファイルの具体的な対象とし
ては、ループ(loops),計時領域(timed regions),条
件文(conditionals)がある。ループをプロファイルの
対象とする際には、プログラム中の指定ループの実行時
間や繰り返し回数をプロファイルデータとして計測す
る。計時領域をプロファイルの対象とする際には、プロ
グラム中の指定計時領域の実行時間をプロファイルデー
タとして計測する。条件文(分岐)をプロファイルの対
象とする際には、プログラム中の指定条件についての判
断結果の統計情報をプロファイルデータとして計測す
る。
【0005】
【発明が解決しようとする課題】ところで、従来、1台
のプロセッサにより実行されるプログラムに対して前述
のようなプロファイルを行なう場合には、そのプログラ
ムのコンパイルを行なう逐次コンパイラにプロファイリ
ングツールのオプションを付加しおけば、逐次コンパイ
ル時に、プロファイルデータの計測・収集対象となる部
分を指定する計装コード(instrumentation code)が、
プログラムを成すコード中に挿入(計装)され、前述の
ようなプロファイルデータが計測・収集される。
【0006】これに対し、ユーザにより逐次形式で書か
れたプログラムを複数台のプロセッサにより並列的に実
行する場合には、図12に示すように、まず、オリジナ
ルコード〔入力Fortran:例えばHPF(High Performa
nce Fortran)コード〕で書かれたプログラムを入力し
(ステップA1)、そのプログラムに対してコンパイル
処理を行なうことによりそのプログラムを並列処理可能
な形に変換し(ステップA2)、ターゲット言語コード
〔出力Fortran:例えばFortran90〕として出力する
(ステップA3)。なお、オリジナルコードはオリジナ
ルユーザコードあるいはオリジナルソースコードと記載
する場合もある。
【0007】この後、各プロセッサに対するプログラム
毎に、前述と同様の逐次コンパイルを行なって、各プロ
セッサ毎に実行可能なプログラムを生成し(ステップA
4)、各プログラムに従って複数台のプロセッサによる
並列処理を行なっている(ステップA5)。このとき、
ステップA2でのオリジナルコードに対するコンパイル
処理では、より高速な処理を実現するためのコード変換
つまり最適化が行なわれる。
【0008】そして、並列処理を行なうシステムでプロ
ファイルを行なう場合も、プロファイルデータを計測・
収集するためには、適当なプログラム構成部分の計測開
始位置と計測終了位置とを識別するための計装コード
を、そのプログラムのオリジナルコード中に挿入(計
装)する必要がある。このため、コンパイル処理の開始
時に計装コードの挿入処理を行なった場合、コンパイラ
によって行なわれる最適化に部分的な変更が生じる可能
性があるので、全てのコード変換の終了後に計装コード
の挿入処理を実行しなければならない。
【0009】このような計装コードの挿入処理を行なっ
た場合、前記逐次コンパイル処理(ステップA4)の前
後でプロファイルデータの対応関係をとることは容易で
あるが、前述した最適化を伴うコンパイル処理(ステッ
プA2)の前後では、オリジナルコードが変換されてい
るため、プロファイルデータの対応関係をとることは非
常に困難である。ユーザはプログラムをオリジナルコー
ド(入力Fortran)で入力しているので、そのオリジナ
ルコードに対応した形でプロファイル結果が得られなけ
れば、ユーザは、そのプロファイル結果を有効に利用す
ること(即ちプロファイル結果をプログラムの作成に反
映させること)ができない。
【0010】なお、前述のような最適化コードをデバッ
グする際には、オリジナルコードから変換された最適化
コードを、ユーザによって書かれたオリジナルコードに
対応(マッピング)させなければならない。そこで、例
えば「G.Brooks,G.Hansen,and S.Simmons."A New Appro
ach to Debugging Optimized Code",in SIGPLAN '92Con
f. Programming Language Design and Implementation,
pp1-11,1992. 」では、コンパイラが、後でデバッガで
処理される各コード変換の詳細な履歴を保持する技術が
開示されている。しかし、プロファイルを行なうプロフ
ァイラでは、プロファイル対象となるプログラム構成部
分を識別するために、デバッガほど詳細なコード変換情
報は必要ない。
【0011】一方、前記プロファイリングツールとして
の必要不可欠な条件は、プロファイル対象であるプログ
ラムの挙動を正確に通知することである。しかし、プロ
ファイルデータを計測して収集するためには、前述した
通り、ユーザによって書かれたプログラムの所定構成部
分が実行される際にタイマを動作/停止させたりカウン
タを動作させたりするための計装コードを、オリジナル
コード中に挿入しなければならない。
【0012】従って、その計装コードにより呼び出され
たサブルーチン(プロファイルライブラリサブルーチ
ン,実行時ライブラリサブルーチン)が、オリジナルコ
ードのプログラムの実行中に実行されるために、オリジ
ナルプログラムの挙動を歪める摂動(perturbation)が
生じてしまう。特に、並列プログラムを図12にて前述
のごとく生成する場合、前記摂動は、逐次プログラムよ
りも重大なものであり、最も処理の遅いプロセッサがそ
の処理を完了するまで待機しなければならないという問
題(オーバヘッドの増大)を生じさせる。
【0013】ここで、プロファイル実行時システムで経
過時間を計測する手法としては、命令ポインタをサンプ
ルする手法と、タイマ(クロック)を用いる手法との2
つがある。通常、プロセッサでは、現在実行中の命令の
アドレスを保持しながらプログラムを実行している。命
令ポインタ(プログラムポインタ)は現在実行中の命令
のアドレスを指し示すもので、このポインタの値をサン
プルし、予め指定されたあるアドレスから他のアドレス
までの経過時間を計測することにより、プロファイルデ
ータとしての経過時間を得ることができる。
【0014】つまり、前者の手法では、命令ポインタの
値を一定間隔(一定のサンプリング周期)でサンプル
し、指定領域間の命令ポインタの計数値に、サンプリン
グ周期を乗算した値として、指定領域の経過時間が算出
される。このような手法により、サンプリングコストを
一定にできるという利点が得られるが、次のような不都
合も生じる。即ち、算出された経過時間が不正確であ
る可能性があること、目的コードを処理する必要性が
あること、命令ポインタのロケーション(例えば、通
信,同期,グローバルオペレーション,実行時ライブラ
リ等)を分類するのが困難なことである。
【0015】これに対し、後者の手法では、通知され
る経過時間が正確であり、クロックによる計測後にさ
らなる処理が不要であり、コンパイラ実行時ライブラ
リ内に機能類別をマーキングすることは自明(trivial)
であるなどの利点はあるが、オーバヘッドが大きくなる
という課題がある。このようにプロファイルによりオー
バヘッドが大きくなることで、プロファイル処理を伴う
プログラムの実行時間は非常に長くなる。
【0016】一般に、プロファイル処理を行なうとプロ
グラムの実行時間は長くなるが、このプロファイル処理
によるオーバヘッド時間をできるだけ短くすることが望
まれている。また、一般に、手続き(procedure)のプロ
ファイルを行なう際には、呼び出し側関数〔呼出側:以
下、コーラー(caller)と呼ぶ〕と呼び出され側関数〔被
呼出側:以下、コーリー(callee) と呼ぶ〕とのペアを
把握しながら、各コーラー−コーリーのペア毎に、実行
時間や繰り返し回数を計測することになる。
【0017】このため、実行時におけるコーラー−コー
リーのペアの最大数が分かっているならば、コーラー−
コーリーのペアについての2次元テーブル(関数の呼出
関係を保持するテーブル)を作成することにより、コー
ラー−コーリーのペアに関する情報の探索(lookup)や
格納を、データの衝突を招くことなく且つ探索を小さな
一定コストで行ないながら、容易に実行することが可能
である。
【0018】しかし、コーラー−コーリーのペアの最大
数を決定するためには、目的コードを検討し変更する付
加的なモジュールが、リンク時間中に必要になる。ま
た、全てのコーラー−コーリーのペアを考慮するならば
その2次元テーブルは極めて巨大なものになり、初期化
に際してメモリ内の大きな領域を無駄に確保しておく必
要が生じてしまう。
【0019】そこで、実行中に動的に増大するデータ構
造を使用することも考えられる。このようなデータ構造
としては、例えばハッシュテーブルがある。ハッシュテ
ーブルを用いた場合、メモリスペースを無駄に使用する
ことなく、現在存在するコーラー−コーリーのペアのレ
コードをのみ保持することができる。しかし、ハッシュ
テーブルの特性として探索時間がリスト長さに依存する
ため、ハッシュテーブルでは、探索コストが一定でなく
且つ比較的大きくなってしまう。ハッシュテーブルを動
的に作り直すことでリスト長さを管理することも可能で
あるが、その場合、不一定で無駄なオーバヘッドを生じ
ることになる。
【0020】本発明は、このような課題に鑑み創案され
たもので、並列処理を行なうシステムでプロファイルを
行なうべく、コンパイル処理時に、オリジナルコードと
コンパイル処理による変換コードとの間のマッピングを
容易に行なえるようにしながらプロファイル用の計装コ
ードの自動挿入を可能にしたプロファイル計装方法を提
供することを目的とする。
【0021】
【0022】
【課題を解決するための手段】上記第1の目的を達成す
るために、本発明のプロファイル計装方法は、オリジナ
ルソースコードにより逐次形式で記載された並列計算機
用プログラムの挙動を把握すべくプログラム実行時にプ
ロファイルデータの計測を指示する計装コードを、コン
パイル処理により最適化変換された前記プログラムの変
換コード中に挿入するものであって、前記コンパイル処
理による最適化変換中に、変換元の命令文を特定する情
報を、変換履歴情報として各命令文毎に保持する履歴保
持ステップと、前記履歴保持ステップにより保持された
変換履歴情報を基に前記変換コードをオリジナルソース
コードにマッピングするマッピングステップ(前記変換
履歴情報に基づいて同じ変換元の命令文から導出された
命令文を識別することにより前記変換履歴情報から必要
な情報を抽出して前記変換履歴情報を要約し、変換コー
ドをオリジナルソースコードにマップするための要約処
理)と、前記マッピングステップによるマッピング情報
(前記要約処理で得られた情報)を参照して、オリジナ
ルソースコードの計装コードの挿入を必要とされる箇所
に対応する前記変換コード中の所定箇所に計装コードの
挿入を行なう計装ステップとを有することを特徴として
いる(請求項1)。
【0023】なお、前記コンパイル処理による最適化変
換前に、前記プログラムのオリジナルソースコード情報
を収集するプロファイル初期化処理を行なってもよく
(請求項2)、このとき、前記オリジナルソースコード
情報として、前記オリジナルソースコードで記載された
各命令文についてのファイル情報,配置情報,文字列記
述,種類,親となる命令文の情報を含む(請求項3)。
【0024】
【0025】
【0026】上述した本発明のプロファイル計装方法で
、コンパイル処理による最適化変換中には、履歴保持
処理(履歴保持ステップ)により、変換元の命令文を特
定する情報が変換履歴情報として各命令文毎に保持され
る。従って、本発明では、従来のデバッグ時のように詳
細な変換履歴を保持することなく、変換元の命令文を特
定する情報により、単純な保存アルゴリズム〔和演算(u
nion)や複写操作(copy operation,duplicate operat
ion))に従って履歴保存を行なうことができる。
【0027】また、変換コードとオリジナルソースコー
ドとの間のマッピングを行なった後、計装処理(計装ス
テップ)により、マッピング情報を参照して、オリジナ
ルソースコードの計装コードの挿入を必要とされる箇所
に対応する前記変換コード中の所定箇所に計装コード
入される。このとき、変換に関する所定の制約に従う
ことにより、オリジナルソースコードと変換コードとの
間で正確なマッピングが可能になる。
【0028】上述のごとく、本発明のプロファイル計装
方法では、ード変換履歴(変換履歴情報)を保持す
ること、 出力コード(変換コード)をオリジナルソー
スコードにマップするためのデータを作成することが
たるポイントである。これにより、コンパイル処理時
に、オリジナルコードとコンパイル処理による変換コー
ドとの間のマッピングを行ないながら、最適化されたシ
ングル−スレッディッド・コードの自動プロファイル計
装(automatic profile instrumentation of optimized
single-threaded code)が行なわれる。このとき、コン
パイル処理による最適化変換前に、プロファイル初期化
処理により、プログラムのオリジナルソースコード情報
が収集されるので、収集されたオリジナルソースコード
情報に基づいて、変換コードとオリジナルソースコード
との間のマッピングを行なうことが可能になる。
【0029】このように、上記目的は、オリジナルソー
スコードである「詳細な設計データ構造およびアルゴリ
ズム」によって達成され、変換された各命令文(変換コ
ード)毎に導出された指示(変換履歴情報)を取り扱う
ことによって達成される。これらのデータ構造(変換履
歴情報)は、単純な一連の規則に従って管理され、収集
されたデータや制御の流れの情報に基づいて要約され
る。つまり、各オリジナルソースコードに適用される変
換に応じて、変換履歴情報は、和演算もしくは複写操作
のいずれかによって変更される。要約処理では、収集さ
れたデータが、変換履歴情報や命令文の親子関係や制御
の流れの情報に基づいて解析される。
【0030】
【0031】
【0032】
【0033】
【0034】
【0035】
【0036】
【0037】
【0038】
【発明の実施の形態】以下、図面を参照して本発明の実
施形態を説明する。 (a)第1実施形態(プロファイル計装システム)の説
明 図1は本発明の第1実施形態としてのプロファイル計装
方法を説明するためのフローチャート(ステップS1〜
S5)であり、このフローチャート中のステップ番号を
随時挙げながら、本実施形態について説明する。
【0039】ここでは、収集されるべきプロファイルデ
ータの種類とプロファイル実行時ライブラリインタフェ
ースとをまず定義することにより、最適化コードを計装
(instrumenting)する手法について説明する。ついで、
この手法は、元の命令文(オリジナルユーザコードの命
令文)および変換履歴についての情報を保持するために
使用される2つのデータ構造の記述により、さらに説明
され、変換履歴の保持,計装(instrumentation)アルゴ
リズムおよび要約アルゴリズムの説明で完結される。
【0040】(a1)収集されるべき情報(プロファイ
ルデータ)の種類 本実施形態のシステムは、手続きレベルや、ループ,条
件文(conditionals)用の命令レベルでプロファイルデー
タを収集する。プロファイル対象とするソース言語(オ
リジナルソースコード,オリジナルユーザコード,もし
くはオリジナルコードと呼ぶ場合もある)をHPF(Hig
h Performance Fortran)コードとすると、その言語特有
の構成(construct)である配列表現,WHERE構成,
やFORALL構成が含まれることになる。なお、入力
されたHPFコードは、図1のステップS1のパーサー
(parser)処理により解釈され、コンパイラの内部表現
(IR:Intermediate Representation)に変換される。
【0041】プロファイリング中には、3種類の情報と
して、経過時間,呼出/繰返し回数,および動的呼出ツ
リー(dynamic call tree)が収集される。手続き,ルー
プおよび計時領域(timed regions)について全経過時間
が計測される。また、命令文の実行回数,手続きの実行
回数,ループ内の繰り返し回数,および条件分岐での選
択回数を明示するために、全てのプロファイル対象構造
について頻度が計測される。
【0042】(a2)実行時(runtime)ライブラリイン
タフェース プロファイル実行時ライブラリインタフェースは、計時
領域や条件文を認識するための11個のサブルーチン
と、そのライブラリサブルーチンに対して引き数(argu
ments)として渡されるオリジナルコードについての情報
とから構成されている。ここでは、要約フェイズによっ
て供給されなければならない情報、特に、プロファイル
される構成の識別、および、オリジナルソースコード記
述を実行時ライブラリに引き渡す方法について記述す
る。下記の表1は、プロファイル実行時ライブラリサブ
ルーチンの一覧である。
【0043】
【表1】
【0044】上記表1において“start log if”は論理
IF文に対するプロファイルを開始するためのもので、
その値(value) としては条件判定の結果である真(tru
e)または偽(false)が設定される。また、“start ari
th if”は算術IF文に対するプロファイルを開始する
ためのもので、その値(value) としては条件判定の結果
である+1,0,−1のいずれかが設定される。
【0045】ここで、ネーム引き数(name argument)
、オリジナルソースコードについての情報を伝える記
述列に関連している。プロファイラにデータを供給する
ための手段は他に使用されないので、その記述列は、フ
ィードバックプロファイル情報をオリジナルソースコー
ドにマップするのに十分な情報と、プロファイルデータ
表示ツールに表示されたプロファイル結果をユーザが参
照して判読するのに十分な情報とを含んでいなければな
らない。その手続きの記述列は、ファイル名と手続き名
とを含んでいる。ループ,領域,算術IF文(arithmat
ic if),および論理IF文(logical if)は、シリア
ルな命令番号(通し番号),ソースコード内での実際の
ライン番号,および短い記述を含んでいる。
【0046】(a3)データ構造 “StmtInfo”および“SetOfStmtInfo ”と表記されオリ
ジナルソースコードおよび変換履歴情報をそれぞれ保持
するために使用される2つのデータ構造を、以下に説明
する。図1のプロファイル初期化処理(ステップS2)
により、各オリジナル命令文(オリジナルソースコード
で記載された命令文)についてのソース情報は、StmtIn
fo構造の中に格納される。その構造は、下記のように、
当該ラインを直接含むファイルについての情報(FileIn
fo)と、そのファイル内での実ライン番号(lineno)
と、一意的な命令文通し番号(serno)とを含んでいる。
【0047】また、プロファイルに関連するフィールド
として、“desc(description) ”フィールドがオリジナ
ル命令文の略記(その命令文の内容)を含み、“pStmtI
nfo”が当該命令文の親に当たる命令文の“StmtInfo”
を指し、“stmtKind”は、オリジナル命令文のタイプ
(文の種類;例えばDO文,FORALL等)の情報を
含み、“cotainArrayExpr ”は、最上位の命令文が配列
表現を含んでいるか否かに基づいてセットされる〔配列
表現を含む場合に真(true)〕。
【0048】 struct StmtInfo { FileInfo *file; /*このラインを直接的に含むファイル*/ int lineno; /*ファイル内で計数されたライン番号*/ int serno; /*手続きブロックを通じての命令文通し番号*/ char *desc; /*ライン上の命令文の列記述*/ StmtInfo *pStmtInfo; /*この命令文の親に当たる命令文のStmtInfo*/ StmtKind stmtKind; /*命令文の種類*/ Bool containArrayExpr;/*StmtInfoの命令文が配列表現を含んでいる ならば真“true”*/ }; コード変換履歴を保持するために、各命令文のデータ構
造は、“SetOfStmtInfo ”と呼ばれる“StmtInfo”のリ
ストによって拡張される。そのリスト内の“StmtInfo”
に含まれている物は、現在の命令文が“StmtInfo”内に
記述された命令文から導き出されていることを示してい
る。
【0049】(a4)変換履歴 コンパイル処理(図1のステップS3)中にオリジナル
ユーザコードに対して実行される基本的な変換として
は、5つのもの、即ち、ナル(null)変換,併合(merge)
変換,コード削除変換,展開(expand)変換,およびコー
ド移動変換がある。各変換についての具体例を以下に記
述する。
【0050】なお、入れ子になったDOループのように
命令文本体内に含まれる文は、それを取り込んでいる命
令文のSetOfStmtInfo(変換履歴情報)を自動的に受け継
ぐものとする。その結果、本体内から本体外部への命令
文の移動を行なう時には、移動された命令文のSetOfStm
tInfo は、それを取り込んでいた命令文のSetOfStmtInf
o が追加される。
【0051】(a4−1)ナル(null)変換 ナル変換は、オリジナル命令文に何ら関係のないコード
に導入された命令文として定義されるもの、つまり、オ
リジナルソースコードとは関連の全くない変換コード
(命令文)を生成する変換である。これらの命令文は、
SetOfStmtInfo フィールドに“NULL”が設定される。こ
のような変換の例としては、プロファイル計装コードが
挙げられる。このプロファイル計装コードは、どのよう
なオリジナル命令文からも導出され得ないものであるか
らである。
【0052】(a4−2)併合変換 併合変換は、多数の命令文が単一の命令文もしくは一組
の命令文に凝縮される変換である。新しく生成された命
令文のSetOfStmtInfo は、併合された命令文のSetOfStm
tInfo を和演算(統合)したものとなる。下記例1で
は、Aで示される命令文とBで示される命令文とが命令
文Cに併合されている。左側の〔〕内の値は元の命令文
のID(通し番号)である。左側の3つの命令文を併合
することにより、右側の併合変換後の新たな命令文で
は、この命令文が3つの命令文から導出された変換履歴
が“SetOfStmtInfo ”〔1 2 3 〕として保持される。
【0053】(例1) 〔1〕A =...A RHS... → 〔2〕B =...B RHS... → 〔3〕C =A + B →〔1 2 3 〕C =...A RHS...+B RHS... (a4−3)コード削除変換 コード削除変換は、コードから命令文を除去する変換で
ある。この場合、SetOfStmtInfo に対しては何の操作も
行なわれない。
【0054】(a4−4)拡張変換 拡張変換は、最も一般的なもので、一つの命令文を複数
の命令文に拡張する変換で、その変換では、ある命令文
が、単一もしくはいくつかの命令文と置き換えられる。
新しく生成された命令文のSetOfStmtInfo は、オリジナ
ル命令文のSetOfStmtInfo フィールドを複写したものと
なる。以下に、DOループに拡張されるFORALL命
令の例(例2)と、1つのループが2つの異なるループ
に分離される例(例3)とを示す。
【0055】(例2) 〔1〕FORALL(I=...) →〔1〕DO I=... 〔2〕 A(I)=... →〔2〕 A(I) =... END FORALL → END DO (例3) 〔1〕DO I=... →〔1〕DO I=... 〔2〕 A(I)=... →〔2〕 A(I) =... → END DO →〔1〕DO I=... 〔3〕 A(I)=... →〔3〕 B(I) =... END DO → END DO (a4−5)コード移動変換 コード移動変換では、命令文の順序が変更される。も
し、その順序変更により本体内から本体外へのコード移
動が行なわれるならば、移動される命令文のSetOfStmtI
nfo は、取り込んでいる命令文からのSetOfStmtInfo に
よって拡張される。さもなければ、何の修正も必要では
ない。以下に、ある命令文本体内から他の命令文本体へ
コード移動を行なった例(例4)と、交換された命令文
本体をもつ命令文の例(例5)とを示す。
【0056】例4では、命令文Bへの割当が、ループJ
から移動されてループIの中へ挿入されている。このた
め、命令文BのSetOfStmtInfo は、〔3〕から移動され
て来たループについてのSetOfStmtInfo とが統合され、
ループJは削除されている。また、例5では、I,J,
Kについて繰り返される入れ子型(nested)ループが交
換されて、そのループがK,J,Iについて繰り返され
ている。この変換は、入れ子型ループJ,Iの外側にル
ープKを移動し、ループIの外側にループJを移動し、
ループIをループJ内に移動し、そして最後にループJ
をループK内に移動したものと考えられる。
【0057】(例4) 〔1〕DO I =... →〔1〕DO I =... 〔2〕 A =... →〔2〕 A =... END DO → 〔3〕DO J =... →〔3 4 〕 B =...(若干の変更を伴う)... 〔4〕 B =... → END DO → END DO (例5) 〔1〕DO I =... →〔1 2 3 〕DO K =... 〔2〕 DO J =... →〔1 2 〕 DO J =... 〔3〕 DO K=... →〔1〕 DO I =... (a5)計装アルゴリズム 計装(instrumentation)アルゴリズム(図1のステップ
S4)は、2つのフェイズ、つまり、現在の命令(変換
コード)をオリジナルユーザコードにマップする要約フ
ェイズ(要約処理;図1のステップS4−1)と、プロ
ファイル実行時ライブラリに対するコール(計装コー
ド)を挿入する命令挿入フェイズ(計装処理;図1のス
テップS4−2)とに分けることができる。
【0058】(a5−1)要約フェイズ 要約フェイズは、StmtInfoの変換履歴に基づいて変換コ
ードをオリジナルユーザコードにマップする。要約は、
複合マージ,コード移動や展開に関連する処理であっ
て、特に入れ子型ループや非連続(non-contiguous)な
計時領域に関連するものである。プロファイラによる報
告を正確なものにするために、要約は、コード変換につ
いて保存性のある(conservative)仮定を行なってい
る。各処理アルゴリズムは、以下のように、擬似コード
を用いて記述される。
【0059】まず、擬似コードで使用される変数の定義
を行なう。 CURSTMTS :全ての変換命令文のセット ORIGSTMTS :全てのオリジナル命令文のセット INTERESTINGSTMT-DO :DOループ INTERESTINGSTMT-REGION:配列表現,DOループ,FORALL,WHERE INTERESTINGSTMT-IF :算術IF文および論理IF文 processedCurStmt :処理された変換命令文のセット processedOrigStmt :処理されたオリジナル命令文のセット unprocessedCurStmt :未処理の変換命令文のセット unprocessedOrigStmt :未処理のオリジナル命令文のセット t⊂u =もしtがuの本体内に含まれるならば “真(TRUE)”、さもなければ“偽(FALSE) ” TopMostStmt(S) ={t,u ∈S|∀t(∀u(t⊂u))} 以下に、上述のごとく定義された変数を用いて、要約フ
ェイズのドライバルーチンを記述する。
【0060】 ドライバルーチン(Driver routine) I.Call sub-region-do (ORIGSTMTS,CURSTMTS) II. Call sub-conditional (ORIGSTMTS,CURSTMTS) sub-region-do (ORIGSTMTLIST,CURSTMTLIST) processedCurStmt=NULL processedOrigStmt =NULL unprocessedCurStmt=CURSTMTLIST unprocessedOrigStmt =ORIGSTMTLIST I.処理(Process) unprocessedOrigStmt の中に(INTERESTINGSTMT-REGIONとINTERESTING STMT-DO)が存在しなくなるまで、実行 CHOSEN =unprocessedOrigStmt から選択された、最初の且つ字面で 見て一番外側(lexically outermost)のINTERESTINGSTMT-REGION またはINTERESTINGSTMT-DO命令文 1.CHOSENに関連するCURSTMT とStmtInfoとを呼出(calling) により 算定する ExtRelCurStmt, ExtRelCurStmtStmtInfo= ExtRelCurStmtAndStmtInfo(CHOSEN,ORIGSTMTLIST,CURSTMTLIST) 2.TOPMOST 命令文を呼出により算定する TOPMOST =TopMostStmt(ExtRelCurStmtStmtInfo) 3.記述列を算定する もしExtRelCurStmt が適格な(well-formed) ループであれば、 文字列(string)をDOループ記述に設定し、 命令文をループとしてマークする その他の場合、 文字列を全ての複雑な(involved)命令文の記述に設定し、 命令文を領域(region)としてマークする 4.現命令文(変換コード)およびオリジナルStmtInfoを、処理完了と してマークする もしExtRelCurStmt が適格な(well-formed) ループであれば、 unprocessedOrigStmt およびunprocessedCurStmtからTOPSTMT を除去し、sub-region-do (unprocessedORIGSTMT,unprocessed CURSTMT)を呼び出す その他の場合、 unprocessedCurStmt=unprocessedCurStmt -ExtendedRelatedCurStmt processedCurStmt=processedCurStmt+ExtendedRelatedCurStmt unprocessedOrigStmt=unprocessedOrigStmt -ExtendedRelatedCurStmtstmtInfo processedOrigStmt=processedOrigStmt +ExtendedRelatedCurStmtstmtInfo 5.タイミング呼出を挿入する もしExtRelCurStmt が適格な(well-formed) ループであれば、 ループとしてインストゥルメントを行なう その他の場合、 領域(region)としてインストゥルメントを行なう II.残りの命令文を処理完了としてマークする sub-conditional (ORIGSTMTLIST,CURSTMTLIST) processedCurStmt=NULL processedOrigStmt =NULL unprocessedCurStmt=CURSTMTLIST unprocessedOrigStmt =ORIGSTMTLIST I.処理(Process) unprocessedOrigStmt の中に(INTERESTINGSTMT-IF) が存在しなくなる まで、実行 CHOSEN=unprocessedOrigStmt から選択された、最初の且つ字面で 見て一番内側(lexically innermost)のINTERESTINGSTMT-IF 1.CHOSENに関連するCURSTMT とStmtInfoとを呼出(calling) により 算定する ExtRelCurStmt, ExtRelCurStmtStmtInfo= ExtRelCurStmtAndStmtInfo(CHOSEN,ORIGSTMTLIST,CURSTMTLIST) 2.関連する命令文をチェックする もしExtendedRelatedCurStmtstmtInfoが、CHOSENまたはCHOSENの子 以外のオリジナル命令文(origstmt)を含んでいるならば、 全てのオリジナル命令文(origstmt)と現命令文(curstmt) を使 用済としてマークし、処理を継続する 3.TOPMOST 命令文を算定する TOPMOST =TopMostStmt(ExtRelCurStmtStmtInfo) 4.入れ子関係(nesting) および形状(shape) をチェックする もしExtRelCurStmt の入れ子関係がオリジナルと一致していないな らば、 全てのオリジナル命令文(origstmt)と現命令文(curstmt) を使 用済としてマークし、処理を継続する 5.記述列を生成する 6.注釈(annotation)を挿入する ComputeExtendedCurStmtAndStmtInfo (s,OS,CS) ExtRelCurStmt およびExtRelStmtInfoを次のように定義する ExtRelCurStmt(s,OS,CS,ERCS,ERCSSI)= ERCS=ERCS U{a e CS|s e a.SetOfStmtInfo } ERSCに変化が無い限り実行 ExtRelStmtStmtInfo(s,OS,CS) ERCS=ERCS U{a e CS, b e ERCSSI|b e a.SetOfStmtInfo } ERCS=ERCS U{a e ERCS, b e CS|b c a } ERCS=ERCS U{a e CS, b e ERCSSI|((s c a)&&(a c b))} ExtRelStmtInfo(s,OS,CS) = ERCS=ERCS U{s} ERCS=ERCS U{a e CS|a c s } ERCSSIに変化が無い限り実行 ExtRelCurStmt(s,OS,CS) ERCSSI=ERCSSI+{b e ERCS|b.SetOfStmtInfo } ERCSSI=ERCSSI+{a e CS, b e ERCS|((s c a)&&(a c b))} ERCS=NULL ERCSSI=NULL ExtRelCurStmt(s,OS,CS,ERCS,ERCSSI) ERCSおよびERCSSIにリターンする。
【0061】(a5−2)命令挿入フェイズ 計装フェイズつまり命令挿入フェイズでは、プロファイ
ル実行時ライブラリサブルーチンコールが、手続きレベ
ルや命令レベルでのプロファイリングのために挿入され
る。手続き(procedure)に対して命令挿入することは簡
単な処理である。もし、手続きがメインサブルーチンで
あれば、計装コードである“start profile ”および
“end profile ”がそのサブルーチンの最初と最後の命
令文として挿入される。もし他の出口(exit)が存在する
ならば、その出口の前に“end profile ”が挿入され
る。メインサブルーチンではない手続きについては、
“start procedure”および“end procedure ”が挿入
される。
【0062】ループに対する命令挿入を行なう際には、
ループ領域の始まりと終わりとの確認,非連続(non-con
tiguous)領域の確認,オリジナルループに対応するルー
プの確認,そしてループ・インストゥルメンテーション
の挿入が必要である。最初の段階では、ループ命令文の
連続(contiguous)領域が確認される。その領域が、ルー
プ命令を計時するためのライブラリコール(計装コー
ド)である“start loop”および“end loop”によりマ
ークされる。命令文中のループは、オリジナルループに
対応するように確認されマークされる(同じ起源のルー
プに同じNAMEを付す等の処理を行なう)。なお、ループ
繰り返し回数を計数するためのライブラリコール(計装
コード)である“incr loop ”が、そのループ本体内の
最初の命令文として挿入される。
【0063】計時領域(timed region)に対する命令挿入
は、“incr loop ”に関する部分を除いて、前述したル
ープに対する命令挿入と同様にして行なわれる。プロフ
ァイルされる条件文(conditionals)については、オリ
ジナル条件判定命令文が、関連する命令文のリスト中の
最後のものとして見做される。その条件判定値は、表1
で前述した通り、スクラッチ変数(scratch variable)で
ある“value ”に書き込まれる。これにより、プロファ
イル情報を測定した時と実際の条件判定を評価する時と
の2回に亘って、その条件判定値を評価するのを避ける
ことができる。条件文についてのプロファイル計測を行
なう場合のライブラリコール(計装コード)は、条件文
に入る前に付与される。
【0064】(a6)第1実施形態の概観(solution o
verview) 図1は、前述した通り本発明の第1実施形態としてのプ
ロファイル計装方法を説明するためのフローチャートで
あると同時に、本方法を適用されるプロファイル計装シ
ステムのコンパイラ内のプロファイルコンポーネントを
まとめたものを等価的に示している。
【0065】図1に示すように、そのコンパイラは、基
本的には、コードの内部表現(中間表現)を変換し最適
化する一連のモジュールS3として設置されたソース/
ソース・トランスレータである。そのモジュールパス
は、オリジナルソースコード(ここではHPFコード)
を内部表現(IR)に変換するパーサーS1から始ま
り、内部表現を出力コード(ここではFortran90)に
変換するコンバータ(図1のステップS5の出力変換処
理)で終了する。
【0066】プロファイル初期化処理を行なうモジュー
ルS2は、パーサーS1の直後に配置され、コード変更
を施される前のオリジナルソースコードについてのデー
タを収集する。そして、連続するコンパイル処理モジュ
ールS3(履歴保持ステップ)が、変換履歴を保持しな
がら中間表現コードを変換する。コンパイラパスの最終
モジュールの一つであるインストゥルメンターモジュー
ル(計装アルゴリズム)S4が、変換コードをオリジナ
ルソースコードにマップするとともに(要約処理モジュ
ールS4−1;マッピングステップ)、プロファイル実
行時ライブラリサブルーチンに対する適当なコール(呼
出,計装コード)を挿入している(計装処理モジュール
S4−2;計装ステップ)。
【0067】(a7)具体例 変換履歴保持処理と命令挿入(プロファイル計装)機能
とを説明するために、一例として下記のごとく与えられ
たコードが用いられる。中間表現コードを変換するモジ
ュールはいくつかあるが、ここでは、2つだけ(配列表
現展開,通信最適化)が選択され説明される。初期コー
ドは、オリジナル命令文で初期化されたStmtInfoのセッ
トとして下記のように示される。
【0068】 1〔1〕 do i=1, 100 2〔2〕 a(i,2:100) = a(i,1:98) 3 ... 4 end do (a7−1)ステップA−配列表現展開 配列表現展開フェイズでは、その配列表現が、下記の通
り、オリジナル配列表現からの変換履歴情報“SetOfStm
tInfo ”の複写を含むループ表現にスカラー化される。
なお、先頭の番号はライン番号(lineno)、〔〕内の番号
は通し番号(serno) である。
【0069】 1〔1〕 do i= 1, 100 2〔2〕 do j = 2, 99 3〔2〕 a(i,j)= a(i,j+1) 4 ... 5 end do 6 end do (a7−2)ステップB−通信最適化 通信最適化フェイズでは、離れたプロセッサ上に存在す
るデータが、通信時間を最小にするように局所一時領域
(local temporary areas) へまとめて転送される。下記
の例では、スクラッチ配列に参照事項を付与すべくルー
プと割当命令文とが変更される前に導入された、何らか
の通信最適化コードが示されている。その導入されたコ
ードは、割当命令文および取り込んでいるループから、
その変換履歴情報“SetOfStmtInfo ”を引き継いでい
る。
【0070】 1〔1 2〕 ... comm. opt. ... 2〔1〕 do i= 1, 100 3〔2〕 do j = 2, 99 4〔2〕 a(i,j)= tmp a(i,j+1) 5 end do 6 end do (a7−3)ステップC−変換履歴要約 この処理(要約処理)では、変換履歴情報“SetOfStmtI
nfo ”に基づいて同じオリジナル命令文から導出された
命令文を識別することにより、変換履歴情報から必要な
情報を抽出して変換履歴情報を要約し、変換コードをオ
リジナルソースコードにマップしている。
【0071】具体的には、最も外側にある未処理のオリ
ジナル命令文のID(serno)、ここでは“1”を“CHOS
EN statement”に配置することにより、計装要約(instr
umentation summary)が始まる。前述したExtendedRela
tedCurStmtStmtInfoおよびExtendedRelatedCurStmtの最
初の算定で、そのSetOfStmtInfo 内に“1”をもつ全て
の命令文が含まれている。つまり、“1”に関連する命
令文、“1”のオリジナル命令文から変換され最適化さ
れたコードが記憶される。
【0072】 CHOSEN statement=1 ExtendedRelatedCurStmtStmtInfo=〔1〕 ExtendedRelatedCurStmt=〔1 2〕... comm. opt. ... 〔1〕 do i= 1, 100 〔2〕 do j = 2, 99 〔2〕 a(i,j)= tmp a(i,j+1) ExtendedRelatedCurStmtStmtInfoを計算する次の繰り返
しに際しては、下記の通り、そのセット中に、未処理の
オリジナル命令文のID“2”が含まれ、同様の処理が
行なわれる。
【0073】 ExtendedRelatedCurStmtStmtInfo=〔1 2〕 ExtendedRelatedCurStmt=〔1 2〕... comm. opt. ... 〔1〕 do i= 1, 100 〔2〕 do j = 2, 99 〔2〕 a(i,j)= tmp a(i,j+1) (a7−4)ステップD−命令挿入 入れ子状になっている通信最適化ラインは、オリジナル
命令文のラインとマッチしないので、ライン1に関連す
るDOループを、ループとして計時することはできな
い。代わりに、計時領域(timed region)として取り扱わ
れる。その領域の最初の命令文と最後の命令文とが確認
され、計装コードとしての“start region”および“en
d region”が、下記の通り適当な位置に挿入される。ま
た、記述列は、ループと配列表現との両方を含んでい
る。
【0074】 data name/'(1 1 do i=1,100)(2 2 a(i,2:99)=a(i,2:100))'/ data record/0/ 〔〕 start region(name,record) 〔2〕 ... comm. opt. ... 〔1〕 do i= 1, 100 〔2〕 do j = 2, 99 〔2〕 a(i,j)= tmp a(i,j+1) end do end do 〔〕 end region() (a8)命令挿入時の制約について ところで、前述した通り、計装処理(命令挿入フェイ
ズ)では、要約結果および変換に関する所定の制約に従
って、計装コードが変換コード中に挿入される。このと
き、その制約に従うことにより、オリジナルソースコー
ドと変換コードとの間で正確なマッピングが可能にな
る。ここでは、その命令挿入時の制約について説明す
る。
【0075】まず、次の2つの項目,は、制約では
ないが、プロファイリングシステムによって報告される
データの特性と言えるものである。 インストゥルメンテーションでは、実行されたプロフ
ァイル命令だけがそのプロファイル報告中で報告され
る。なぜならば、プロファイル計装命令(例えばstart
loop, start procedure 等)が実行された時のみ、タイ
マやカウンタがスタート/ストップ/インクリメントさ
れるからである。その計装命令を除いて、プロファイル
実行時システムへソースコードについての情報を渡す他
の手法は無い。このことは、ユーザは実行されるコード
だけに興味があるので、問題を生じさせない。
【0076】もしコンパイル処理の最適化フェイズ中
に命令が削除された場合には、その命令は決して実行さ
れないので、その命令に対してプロファイル情報が報告
されることは無い。再び、このことは、ユーザは実行さ
れた命令にのみ関心があるので、問題を生じさせない。 さて、次に、プロファイルされる構造(profiled constr
ucts,profiled structures)である領域(region),ルー
プ,条件判定(conditional),手続き(procedure)のそ
れぞれについて特有の制約を、以下に列挙する。
【0077】(a8−1)領域(region) 計時領域(timed region)において収集されるプロファイ
ルデータは、経過時間および呼出回数(その領域に入っ
た回数)である。経過時間に対する制約は無い。しか
し、領域が非連続(non-contiguous)である時に不正確な
呼出回数をもたらす制約変換が一つある。呼出回数をカ
ウントアップ計数する箇所が、次の条件を満たすように
定められなければならない。つまり、その条件とは、あ
る計時領域に入るコードを通る全ての制御パスに対し
て、各パス内に、呼出計数値を1回カウントアップする
箇所が1ヵ所だけ存在することである。
【0078】図2(a)に前記制約を満たさない例を示
し、図2(b)に前記制約を満たす例を示す。図2
(a),(b)において、丸印(circles)はコード断片
(code fragment)を示し、各丸印間を接続する矢印付き
線分は制御の流れを示している。また、網掛けを施され
た2つの丸印(コード断片)は、それぞれ、単一の不連
続計時領域の連続領域を含んでいる。そして、図2
(a)は正確な呼出回数を得られない例(つまりインク
リメント位置を割り付けることのできない例)であり、
図2(b)は正確なカウントアップ(インクリメント)
を行なえる例(インクリメント位置を割り付けることの
できる例)である。
【0079】最適化変換の大部分は適応させることがで
きるので、これは厳しい制約ではない。もし上記制約を
満たさない場合が存在するならば、コンパイル処理時に
ユーザに対してその旨が通知される。 (a8−2)ループ 施された変換が制約を満たしているようなループにおい
て収集されるプロファイルデータは、経過時間,呼出回
数,およびインクリメント回数(ループの繰り返し回
数)である。なお、制約を満たさない変換が施されたル
ープについては、領域(regions)としてプロファイルさ
れる。
【0080】ここでも、経過時間に関する制約は無い。
ループについても正確な呼出回数を得るための変換制約
としては、前述と同様の制約が適用される。ほとんどの
場合、インクリメントの割付を行なうことができるの
で、これは厳しい制約ではない。正確なループ繰り返し
回数を得るためには、変換について幾つかの制約があ
る。これを説明するために、まず、変換コードでの適格
なループの一般的形状について記述してから、制限され
た変換の例を示す。
【0081】下記の2点,は、要約フェイズでExen
dedRelatedStmtInfoおよびExtendedRelatedCurStmtを算
定した後の適格なループにとって真である。 ExendedRelatedStmtInfoのセットは、オリジナルルー
プと、そのオリジナルループ内で入れ子状態の命令とを
含むのみである。 ExtendedRelatedCurStmtのセットは、図3に示すよう
にループに先行する初期化部分(図3の上段)からな
る。その初期化部分内の命令は、オリジナルループから
のみ導出され、現ループ(変換コードによるループ)は
オリジナルループからのみ導出され、そして、現ループ
の本体(図3の下段)は、オリジナルループ本体の外側
から移動されてきたコードを含んでいない。ここで、図
3は、要約フェイズでExendedRelatedStmtInfoおよびEx
tendedRelatedCurStmtを算定した後の、ExtendedRelate
dCurStmtの状態を示すものである。
【0082】制約を満たしながらオリジナルループを変
換したにもかかわらず間違ったインクリメント回数(繰
り返し回数)をもたらし得る最適化は、部分的なループ
アンローリング(partial loop unrolling)である。その
ループアンローリング最適化は、その本体内でよりよい
最適化を成すために、ループ本体の基本ブロックのサイ
ズを拡張して実行される。この変換は一般的であるの
で、上記制約,はわずかに厳しいものである。
【0083】なお、以下に部分的なループアンローリン
グの例を示す。 do i= 1, 100 → do i= 1, 100, 4 → A A → A → A → A end do → end do (a8−3)条件判定(conditional) もしオリジナル条件判定が下記のようなマージや展開に
よって変換されるならば、その条件判定についてのプロ
ファイルは行なわれない。条件判定のマージや展開は一
般的であるので、これは厳しい制約である。プロファイ
ルされない条件判定が存在する場合、インストゥルメン
テーションモジュールは、コンパイル処理時にユーザに
対してその旨を通知することができる。
【0084】 if(A) then ←→ if((A).and.(B)) then if(B) then ←→ ... ←→ ... end if ←→ end if ←→ end if (a8−4)手続き(procedure) もしコンパイラが手続き呼出(procedure calls)をイン
ライン処理するならば、下記項目,のように、デー
タが不正確にプロファイルされる。
【0085】コーラー−コーリー・ペアに関連するこ
となく、経過時間がコーラー(呼出側)に含まれ、その
呼出回数は、インラインコードを入力するためにインク
リメントされない。 もしインライン処理された手続きが手続き呼出を含む
ならば、それらの手続きのためのコーラー−コーリー情
報が不正確になる。それらの手続きのためのコーラー
は、インライン処理された手続きではなく、インライン
処理された手続きのコーラーである。
【0086】(a9)第1実施形態の効果 このように、本発明の第1実施形態によれば、コンパイ
ル処理時に、オリジナルコードとコンパイル処理による
変換コードとの間のマッピングを容易に行ないながら、
並列処理システムのプロファイル用の計装コードを自動
挿入することができる。従って、マッピングに基づいて
オリジナルソースコードに対応した形のプロファイル結
果を容易に得ることが可能で、ユーザは、そのプロファ
イル結果を有効に利用してプログラム作成に反映させる
ことができる。
【0087】(b)第2実施形態(プロファイル実行時
システム)の説明 図4本発明の第2実施形態としてのプロファイルデータ
収集方法を説明するためのフローチャート(ステップS
11〜S13)であり、このフローチャート中のステッ
プ番号を随時挙げながら、本実施形態について説明す
る。以下では、本実施形態の主たるデータ構造であるス
タック領域,ヒープ領域,およびテーブルの概観が、図
(representation)や関数(function)に基づいて記述され
る。
【0088】特に、本実施形態のプロファイルデータ収
集方法を適用されるプロファイル実行時システムは、プ
ロファイル実行コストを一定に保つための方法を取り扱
うもので、その方法が記述される。また、コーラー−コ
ーリーテーブルに対する探索(lookup)コストを小さく且
つ一定に保持するための方法が、下記コーラー−コーリ
ーテーブルにかかるサブセクションで記述される。さら
に、本実施形態のシステムがどのように動作するかを示
すために、プロファイルライブラリインタフェースにつ
いてのデータ構造利用法の擬似コード記述が列挙される
(下記表2参照)。
【0089】(b1)データ構造 このセクションでは、計時されるユーザプログラムフェ
イズ(図4のステップS12;ユーザプログラム実行,
プロファイル処理)にとって主要なデータ構造が記述さ
れる。3つの内部構造によってプロファイルブック管理
が行なわれる。ここで、3つの内部構造は、計時領域
(timed region)のスタックフレームを見せかける(mimi
c) スタック領域,プロファイルデータレコードのヒ
ープ領域,およびコーラー−コーリーレコードペアの
テーブルである。また、プロファイルされる構造に特有
のデータが、基礎を成す動的配列データ構造とともに記
述される。
【0090】(b1−1)内部スタック領域(internal
stack) スタック領域は、主として呼出側手続き(caller proced
ure)を決定するために用いられ、局所的に管理されるデ
ータ構造である。手続きに入る際に、呼出側手続きID
(LID)がTOS(Top Of Stack)から得られ、適当
なコーラー−コーリー情報がスタック領域にプッシュさ
れる。出口では、コーラー−コーリー情報がスタック領
域からポップされる。プロファイルインタフェースと一
致する実行決定(implementation decision)として、ル
ープレコードや領域レコードについての情報もまたスタ
ック領域にプッシュされて、入れ子情報を収集するとと
もに、エンドマーカールーチン(end marker routines)
に対し引き数(argument)としてレコードを渡す必要性を
除去するようになっている。
【0091】(b1−2)内部ヒープ領域(internal h
eap) 内部ヒープ領域は、割付コストを管理すべくユーザプロ
グラムフェイズ(図4のステップS12)中にプロファ
イルデータレコードを割り付けるために使用される。巨
大な内部ヒープ領域が初期化処理(図4のステップS1
1)中に割り付けられており、ユーザプログラム実行中
には、ヒープ領域内への書込位置を指し示すポインタを
単にインクリメントするだけでヒープ領域への割付を行
なえるようになっている。手続き(procedure) ,ルー
プ,領域(region),論理IF文(logical if),算術IF
文(arithmatic if) ,およびコーラー−コーリーレコー
ドの全てが、このヒープ領域上に割り付けられる。
【0092】(b1−3)コーラー−コーリーテーブル
(caller-callee table) 手続きのプロファイルデータは、コーラー−コーリーテ
ーブルで収集され格納される。このコーラー−コーリー
テーブルは、2つの軸に沿って動的に増大する2次元配
列である。コーラー(呼出側関数)のIDとコーリー
(被呼出側関数)のIDとによりインデックスされるこ
のテーブルは、コーラー−コーリーペアの状態を格納す
る。そのテーブルエントリには、2つのIDで指定され
るコーラー−コーリーペアに対して割り当てられたレコ
ードがなければ“NULL”が保持され、そうでなけれ
ば(割り当てられたレコードがある場合)コーラー−コ
ーリーレコードの位置を指し示すポインタ(PTR)が
保持される。
【0093】そして、図5に示すように、2次元テーブ
ルであるコーラー−コーリーテーブル10は、下記
(1)式を用いて2次元インデックスcaller,callee を
1次元インデックスf(caller,callee)にマップすること
により、1次元テーブルとして表現される。ここで、ca
ller,callee は、それぞれ呼出側関数および被呼出側関
数を指定するID値であり、f(caller,callee)は、下記
(1)式により算出される1次元インデックス値で、具
体的には図5のテーブル10中に記載されるような値に
なる。
【0094】 f(caller,callee)=〔 (caller+callee-1)*(caller+callee-2)〕/2 +callee−1 (1) (b1−4)データレコード(data record) データ構造は、プロファイルされる構造であるループ,
算術IF文,論理IF文,計時領域,手続き,およびコ
ーラー−コーリーペア毎に定義される。それぞれのデー
タ構造は、カウンタ及び/又はタイマを含み、唯一のロ
ーカルIDを割り当てられる。
【0095】(b1−5)動的配列(dynamic array) 動的配列は、1次元配列構造の動的展開をサポートする
低位のデータ構造であり、内部スタック領域,内部ヒー
プ領域およびテーブルのための基礎を成すインプリメン
テーション(implementation)として用いられる。その基
礎的な構造は、仮想アドレス(論理アドレス)を物理ア
ドレスに変換するシステムを模倣(mimic)している。
【0096】図6は、第2実施形態における動的配列デ
ータ構造を説明するためのもので、この図6には、デー
タタイプの基本的な成分が5つ示されている。つまり、
固定サイズのエレメントを複数もつ固定サイズの多数
ページを指し示すポインタの配列(Array of pages, Pag
e table),1ページ当たりのエレメント数(Elements
per page) ,エレメントサイズ(Element size),ペ
ージの最大数(Maximumpages) ,割り付けられたペー
ジ数(Number of pages allocated)である。
【0097】エレメントサイズとページサイズは、初期
化処理(図4のステップS11)時に、運用上の効果か
ら2の巾乗として与えられる。インスタンス(instance)
が引き起こされた時に1ページ分の領域が割り付けら
れ、後続のページは、ページ数を拡張する明白な要求
(calls)によって作成される。仮想アドレスの物理アド
レスを決定するために、ページ数“PageNumber”とオフ
セット(ページ先頭からの位置)“Offset”とが、下記
(2),(3)式によりそれぞれ算出される。ページ内
へのオフセットは、所定サイズのエレメント内の先頭ワ
ードを指し示す。全ての仮想アドレスは、物理アドレス
を直接的に扱うのではなく、下記(2),(3)式を用
いて物理アドレスに変換されなければならない。このよ
うな余分なアドレス計算が探索オーバヘッド(lookup o
verhead)を増すことになるが、それにもかかわらずコス
トは一定である。
【0098】 PageNumber(LID)=LID>>log2(NumberElementsPerPage) (2) Offset(LID)=(LID&∧(NumberElementsPerPage-1))<<log2(ElemetSize) (3) ここで、LIDは論理IDを示し、>>,<< はシフトを、
&は論理積(AND)を、∧は否定(NOT)を意味し
ている。なお、図6に示す例では、1ページ当たりのエ
レメント数(Elements per page;ページサイズ) として
16=24 が、エレメントサイズ(Element size)として
2=21 が、ページ最大数(Maximum pages) として10
24=210が設定されており、図6では、16エレメン
トのページが2ページ分だけ既に割り付けられた状態
〔割り付けられたページ数(Number of pages allocate
d):2 〕が図示されている。
【0099】また、本実施形態では、図6に示すよう
に、ページテーブル(Page table)11には、割り付けら
れた各ページを指し示すポインタが格納される。このペ
ージテーブル11は、ページの最大数として設定された
数(ここでは1024)分のページポインタを格納でき
るようになっている。各ページの各エレメント中の“L
ADDR”は論理アドレス(仮想アドレス)を意味して
いる。
【0100】(b2)データ構造の利用法 データ構造の利用法は、コンパイラによって挿入される
プロファイルライブラリコール(第1実施形態により前
述した計装コード)について、下記表2により説明され
る。
【0101】
【表2】
【0102】(b3)第2実施形態の概観(solution o
verview) 本実施形態では、図4に示すように、プロファイル実行
(profiled run)は、3つの主たるフェイズ〔初期化処理
(ステップS11),ユーザプログラム実行(ステップ
S12),クリーンアップ処理(ステップS13)〕か
ら構成されており、時間に鋭敏なプロファイル処理を伴
うユーザコード処理(データ格納処理を伴うユーザプロ
グラム実行)と、時間を要するプロファイル実行時シス
テムの初期化およびクリーンアップとを区別している。
【0103】プロファイル実行は、計装コードである
“start profile ”で始まり、まず、内部プロファイル
データ構造(ヒープ領域,スタック領域,テーブルおよ
びタイマ)が初期化される(ステップS11)。初期化
を完了してから、“start profile ”が、計時されるユ
ーザコード用のタイマを動作させるためのコード“star
t procedure ”を呼び出す。
【0104】ユーザコード実行フェイズ(ステップS1
2)では、オリジナルユーザコードが、プロファイル実
行時ライブラリサブルーチンに対する呼出(calls)によ
って実行される。このフェイズの間、プロファイルオー
バヘッドのコストは一定かつ最小に保持される。このフ
ェイズでは、ユーザプログラムの実行に伴い、スタック
に対するプッシュ/ポップと、内部ヒープ領域上へのレ
コード割付と、コーラー−コーリーテーブル内の情報探
索と、開始/終了時間情報の記録と、カウンタのインク
リメント動作とを行なって、プロファイルデータの格納
処理を行なっている。なお、このフェイズ中には内部プ
ロセッサ通信は行なわれない。また、このフェイズは、
“end profile ”によって“end procedure ”が呼び出
された時点で終了する。
【0105】クリーンアップフェイズ(ステップS1
3)の目的は、プロファイルデータの要約,データ
のファイルへの書込,動的割付メモリの割付解除の3
つである。各レコードについてのヒープスペースを最小
にすべく実行中に格納されたデータは最小かつノード近
傍に保持されるので、プロファイルにより収集されたデ
ータの付加的処理が必要とされる。複数プロセッサに渡
って分布する局所的なプロファイルデータは、グローバ
ルIDを割り付けられ、各レコードについて平均値,最
小値,最大値および標準偏差を算出される。そのデータ
は、プロファイルデータの閲覧申請によって読み取るこ
とのできる形式で出力される。
【0106】つまり、図11に示すように、ユーザプロ
グラムは、コンパイル処理を施され、単一又は並列マシ
ンにより実行可能なプログラムに変換されてから(ステ
ップS21,S22)、プログラムが実行される(ステ
ップS23)。ここで、ステップS21では、第1実施
形態で前述した手順によりプロファイル計装が行なわ
れ、ステップS23では、図4にて前述した手順の処理
が行なわれる。
【0107】ステップS23のプログラム実行により得
られた、符号化プロファイル情報(encoded profile inf
ormation)は、オプションでコンパイル処理(ステップ
S21)にプロファイルフィードバックされるほか、テ
キスト形式での表示されたり(ステップS25)、ソー
スコードとともにグラフィック表示されるようになって
いる(ステップS26)。
【0108】(b4)具体例 以下に示すフラグメントコード(fragment code)によ
り、プロファイル実行中の実行時ライブラリの動作を具
体的に例1として説明する。コード断片(code fragmen
t)は、幾つかのコード領域A,B,Cからなるサブルー
チンである。計装コード(instrumentation)は、第1実
施形態で前述したごとく、手続きの始めと終わり、およ
び、計時領域Bの始めと終わりを記録するように、且
つ、手続きおよび領域についてのソースコード情報を記
録するように挿入されている。
【0109】また、例2として、動的配列データ構造で
使用される、仮想アドレスから物理アドレスへのアドレ
ス変換について説明する。 01 SUBROUTINE foo 02 CHARACTER*4 name1 03 CHARACTER*25 name2 04 INTEGER*4 record1,record2 05 SAVE name1,record1,name2,record2 06 DATA record1/0/,record2/0/ 07 DATA name1/'foo'/,name2/'(34 34 forall(i=1:1
00:2))'/ 08 call start procedure(name1,record1) 09 ... A ... 10 call start region(name2,record2) 11 ... B ... 12 call end region 13 ... C ... 14 call end procedure 15 end (b4−1)例1 〔ステップA−サブルーチンfoo に入る前〕この例の目
的のために、ローカルID3をもつ手続きがサブルーチ
ンfoo をコールし、そのサブルーチンfoo が初めて呼び
出されているものとする。また、このとき、内部のスタ
ック領域,ヒープ領域およびコーラー−コーリーテーブ
ル10の状態は、それぞれ図7(a),(b),(c)
に示すようになっているものとする。
【0110】サブルーチンfoo が入力された直後、コー
ラーの情報は内部スタック領域の最上部(TOS:Top
Of Stack)に存在し、ヒープ領域は、何らかの状態にあ
り、コーラー−コーリーテーブルは、未だ入力を完了し
ていないのでサブルーチンfoo についての情報を未だ含
んでいない。なお、図7(a)〜(c)は、それぞれ、
サブルーチンfoo 入力後のスタック領域,ヒープ領域お
よびコーラー−コーリーテーブル10の内部状態を示し
ている。また、図7(c)に示すコーラー−コーリーテ
ーブル10内の網掛け領域は、有効可能コーラー−コー
リーペア(valid possible caller-callee pair)を明確
化している。
【0111】〔ステップB−Call start procedure〕サ
ブルーチンfoo を示す引き数として渡されたNULL値のre
cord1 変数は、初めて呼び出される。手続きが初めて入
力されると、登録シーケンスが1回実行される。サブル
ーチンfoo に対する後続のコールに伴って、そのペアに
ついてのレコードが既に割り付けられているか否かを見
るために、コーラー−コーリーテーブルがチェックされ
る。もし割り付けられていなければ、ヒープ領域から割
付が行なわれる。
【0112】この場合、例えば図8(a)〜(c)に示
すように、ローカルID4がサブルーチンfoo のために
生成され、手続きレコード(Proc record;proc=4)がヒ
ープ領域上に割り付けられ、そのペアのためにコーラー
−コーリーレコード(CC record;caller=3,callee=4)が
ヒープ領域上に割り付けられ、コーラー−コーリーテー
ブル10上のcaller=3,callee=4 におけるエントリがNU
LLからポインタ(PTR)になり、コーラー情報(CC info;
caller=3,callee=4)がスタック領域にプッシュされ、さ
らに、そのタイマが初期化される。
【0113】なお、図8(a)〜(c)は、それぞれ、
計装コード“start procedure ”呼出後のスタック領
域,ヒープ領域およびコーラー−コーリーテーブル10
の内部状態を示している。また、図8(c)に示すコー
ラー−コーリーテーブル10内の網掛け領域は、この時
点での有効可能コーラー−コーリーペア(valid possibl
e caller-callee pair)を明確化している。
【0114】〔ステップC−Call start region 〕この
コールは初めてその領域に入る時であるので、図9
(b)に示すように、領域レコードは、ヒープ領域から
割り付けられ、ローカルIDを割り当てられる。この場
合、ローカルIDを−1とする。また、図9(a)に示
すように、領域情報(Region info;region=-1)が、スタ
ック領域にプッシュされ、その領域タイマが初期化され
る。
【0115】なお、図9(a),(b)は、それぞれ、
計装コード“start region”呼出後のスタック領域およ
びヒープ領域の内部状態を示している。 〔ステップD−Call end region & end procedure 〕領
域Bを出た後、“end region”に対する呼出が、スタッ
ク領域の領域情報(Region info;region=-1)をポップす
ることで、スタック領域は図10(a)に示すような状
態になり、ポップされたレコードのタイマが停止され
る。
【0116】さらに、領域Cを出た後、“end procedur
e ”に対する呼出が、スタック領域のコーラー領域情報
(CC info;caller=3,callee=4)をポップすることで、ス
タック領域は図10(b)に示すような状態になり、ポ
ップされたコーラー−コーリーレコードのタイマが停止
される。なお、図10(a),(b)は、それぞれ、
“end region”呼出後および“end procedure ”呼出後
のスタック領域の内部状態を示している。
【0117】(b4−2)例2 この例2は、コーラー−コーリーについて2次元を1次
元にマッピングする機能と、基礎となる動的配列におけ
る論理アドレス(仮想アドレス)から物理アドレスへの
変換計算とを説明する。特定のコーラー−コーリーペア
についてのコーラー−コーリーテーブルへのインデック
スを計算するためには、コーラーとコーリーのローカル
IDを前記(1)式に代入する。例えば前記例1で示し
たごとくcaller=3,callee=4 の場合、1次元インデック
スは、f(3,4)=18となる。
【0118】そして、コーラー−コーリーテーブルの基
礎となる動的配列データ構造内での仮想アドレス18に
アクセスするためには、そのページ数とオフセットと
が、ページ当たりのエレメント数(エントリ数)とエレ
メントサイズ(エントリサイズ)とに基づいて算出され
る。この例の目的のために、図6に示した例のごとく、
1ページは16エントリを含み、各エントリは2ワード
長であり、既に2ページ分の領域が割り付けられている
ものとする。もしページサイズが16エントリであるな
らば、ページ数を計算するためのシフトカウントはlog2
(16)であり、オフセットマスクは∧(16-1)となる。従
って、前記(2),(3)式によって算出されるよう
に、また図6に示すように、エントリ18は、ページ2
上でオフセット2の位置である。
【0119】(b5)第2実施形態の効果 このように、本発明の第2実施形態によれば、プロファ
イル処理実行時に頻繁に行なわれるオペレーションにつ
いてのオーバヘッドコストを小さく且つ一定化すること
ができるので、実際的な見地からプロファイル処理を伴
うプログラム実行とプロファイル処理を伴わないプログ
ラム実行とをほぼ同様に見做せることができるほか、コ
ストの一定化に伴いプロファイル処理によるオーバヘッ
ドを容易に算出でき、プロファイル処理を行なわない場
合の実行時間を容易に得ることができる。
【0120】また、プロファイル処理に伴うデータ格納
処理を行なうプログラム実行処理(図4のステップS1
2)の外側に初期化コストおよびクリーンアップコスト
を押し出すことにより、頻繁に行なわれるオペレーショ
ン(スタック領域に対するプッシュ/ポップ,ヒープ領
域に対する割付,テーブル10に対する探索)のコスト
を小さく且つ略一定にすることができる。
【0121】さらに、呼出側と被呼出側との関係を保持
するテーブル10を、動的配列データ構造上にそなえ、
1次元テーブルにマップされた2次元テーブルとして表
現することで、探索コストが一定でオーバヘッドを増大
させることがなく、メモリ領域を無駄に確保するのを抑
制することもできる。 (c)その他 なお、上述した実施形態では、オリジナルソースコード
がHPFコードで、変換後のターゲット言語コードがFo
rtran90コードである場合について説明したが、本発
明は、これに限定されるものではなく、他の言語であっ
ても同様に適用され、上述と同様の作用効果を得ること
ができる。
【0122】
【0123】
【0124】
【発明の効果】以上詳述したように、本発明のプロファ
イル計装方法によれば、コンパイル処理時に、オリジナ
ルソースコードとコンパイル処理による変換コードとの
間のマッピングを容易に行ないながら、並列処理システ
ムのプロファイル用の計装コードを自動挿入することが
できる。従って、前記マッピングに基づいてオリジナル
ソースコードに対応した形のプロファイル結果を容易に
得ることが可能で、ユーザは、そのプロファイル結果を
有効に利用してプログラム作成に反映させることができ
る効果がある。
【図面の簡単な説明】
【図1】本発明の第1実施形態としてのプロファイル計
装方法を説明するためのフローチャート、且つ、本方法
を適用されるプロファイル計装システムのコンパイラ内
のプロファイルコンポーネントをまとめたものを等価的
に示すブロック図である。
【図2】(a),(b)はいずれも第1実施形態におけ
る命令挿入時の制約について説明するための図である。
【図3】第1実施形態における命令挿入時の制約につい
て説明するための図である。
【図4】本発明の第2実施形態としてのプロファイルデ
ータ収集方法を説明するためのフローチャートである。
【図5】第2実施形態におけるコーラー−コーリーテー
ブル用インデックスの2次元から1次元へのマッピング
を説明するための図である。
【図6】第2実施形態における動的配列データ構造を説
明するための図である。
【図7】(a)〜(c)はいずれも第2実施形態におけ
るデータ格納処理の具体例を説明するための図である。
【図8】(a)〜(c)はいずれも第2実施形態におけ
るデータ格納処理の具体例を説明するための図である。
【図9】(a),(b)はいずれも第2実施形態におけ
るデータ格納処理の具体例を説明するための図である。
【図10】(a),(b)はいずれも第2実施形態にお
けるデータ格納処理の具体例を説明するための図であ
る。
【図11】第2実施形態の全体的な動作を説明するため
のフローチャートである。
【図12】並列処理を行なう場合の一般的なコンパイル
処理の手順を説明するためのフローチャートである。
【符号の説明】
S1 パーサー(パーサー処理モジュール) S2 プロファイル初期化処理モジュール S3 コンパイル処理モジュール S4 計装アルゴリズム(インストゥルメンターモジュ
ール) S4−1 要約フェイズ(要約処理モジュール) S4−2 命令挿入フェイズ(計装処理モジュール) S5 コンバータ(出力変換処理モジュール) 10 コーラー−コーリーテーブル 11 ページテーブル
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平6−175843(JP,A) (58)調査した分野(Int.Cl.7,DB名) G06F 11/34 G06F 9/45 G06F 11/28 315

Claims (3)

    (57)【特許請求の範囲】
  1. 【請求項1】 オリジナルソースコードにより記載され
    た並列計算機用プログラムの挙動を把握すべくプログラ
    ム実行時にプロファイルデータの計測を指示する計装コ
    ードを、コンパイル処理により最適化変換された前記プ
    ログラムの変換コード中に挿入するプロファイル計装方
    法であって、 前記コンパイル処理による最適化変換中に、変換元の命
    令文を特定する情報を、変換履歴情報として各命令文毎
    に保持する履歴保持ステップと、 前記履歴保持ステップにより保持された変換履歴情報を
    基に前記変換コードをオリジナルソースコードにマッピ
    ングするマッピングステップと、 前記マッピングステップによるマッピング情報を参照し
    て、オリジナルソースコードの計装コードの挿入を必要
    とされる箇所に対応する前記変換コード中の所定箇所に
    計装コードの挿入を行なう計装ステップとを有する こと
    を特徴とする、プロファイル計装方法。
  2. 【請求項2】 前記コンパイル処理による最適化変換前
    に、前記プログラムのオリジナルソースコード情報を収
    集するプロファイル初期化処理を行なうことを特徴とす
    る、請求項1記載のプロファイル計装方法。
  3. 【請求項3】 前記オリジナルソースコード情報とし
    て、前記オリジナルソースコードで記載された各命令文
    についてのファイル情報,配置情報,文字列記述,種
    類,親となる命令文の情報が含まれていることを特徴と
    する、請求項2記載のプロファイル計装方法。
JP21635595A 1995-08-24 1995-08-24 プロファイル計装方法 Expired - Fee Related JP3290567B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP21635595A JP3290567B2 (ja) 1995-08-24 1995-08-24 プロファイル計装方法
US08/641,353 US5950003A (en) 1995-08-24 1996-04-30 Profile instrumentation method and profile data collection method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP21635595A JP3290567B2 (ja) 1995-08-24 1995-08-24 プロファイル計装方法

Publications (2)

Publication Number Publication Date
JPH0962544A JPH0962544A (ja) 1997-03-07
JP3290567B2 true JP3290567B2 (ja) 2002-06-10

Family

ID=16687265

Family Applications (1)

Application Number Title Priority Date Filing Date
JP21635595A Expired - Fee Related JP3290567B2 (ja) 1995-08-24 1995-08-24 プロファイル計装方法

Country Status (2)

Country Link
US (1) US5950003A (ja)
JP (1) JP3290567B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11561778B1 (en) * 2021-11-23 2023-01-24 International Business Machines Corporation Instrumentation for nested conditional checks

Families Citing this family (102)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5943501A (en) * 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US6035125A (en) * 1997-07-25 2000-03-07 International Business Machines Corporation Method and system for generating compact code for the loop unrolling transformation
US6751789B1 (en) * 1997-12-12 2004-06-15 International Business Machines Corporation Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination
JP3199013B2 (ja) 1998-01-26 2001-08-13 日本電気株式会社 言語処理方法及び言語処理装置並びに言語処理プログラムを記録した記憶媒体
US6353910B1 (en) * 1999-04-09 2002-03-05 International Business Machines Corporation Method and apparatus for implementing error correction coding (ECC) in a dynamic random access memory utilizing vertical ECC storage
US6507946B2 (en) * 1999-06-11 2003-01-14 International Business Machines Corporation Process and system for Java virtual method invocation
US6775827B1 (en) * 1999-09-20 2004-08-10 Harkins Audit Software, Inc. Real-time program audit software
CA2385433A1 (en) * 1999-09-20 2001-03-29 Paul H. Harkins Real-time program audit software
US7080359B2 (en) * 2002-01-16 2006-07-18 International Business Machines Corporation Stack unique signatures for program procedures and methods
US7032214B1 (en) * 2000-06-29 2006-04-18 Microsoft Corporation Performance markers to measure performance of features in a program
US6988263B1 (en) 2000-07-10 2006-01-17 International Business Machines Corporation Apparatus and method for cataloging symbolic data for use in performance analysis of computer programs
US6766511B1 (en) * 2000-07-10 2004-07-20 International Business Machines Corporation Apparatus and method for performing symbolic resolution of modules using static representations of a trace
US6874140B1 (en) * 2000-07-31 2005-03-29 Microsoft Corporation Debug annotations
US7111283B2 (en) * 2000-11-29 2006-09-19 Microsoft Corporation Program history in a computer programming language
US6898785B2 (en) * 2001-08-16 2005-05-24 Hewlett-Packard Development Company, L.P. Handling calls from relocated instrumented functions to functions that expect a return pointer value in an original address space
US20030041315A1 (en) * 2001-08-21 2003-02-27 International Business Machines Corporation Debugger with automatic detection of control points influencing program behavior
US6934942B1 (en) * 2001-08-24 2005-08-23 Microsoft Corporation System and method for using data address sequences of a program in a software development tool
US20030084433A1 (en) * 2001-10-31 2003-05-01 Chi-Keung Luk Profile-guided stride prefetching
US7234136B2 (en) * 2001-11-02 2007-06-19 Sun Microsystems, Inc. Method and apparatus for selecting references for prefetching in an optimizing compiler
US7257810B2 (en) * 2001-11-02 2007-08-14 Sun Microsystems, Inc. Method and apparatus for inserting prefetch instructions in an optimizing compiler
US6938249B2 (en) * 2001-11-19 2005-08-30 International Business Machines Corporation Compiler apparatus and method for optimizing loops in a computer program
US7360207B2 (en) * 2001-12-13 2008-04-15 Hewlett-Packard Development Company, L.P. Method and system to analyze inlined functions
US20030204840A1 (en) * 2002-04-30 2003-10-30 Youfeng Wu Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs
US20040006760A1 (en) * 2002-07-08 2004-01-08 Gove Darryl J. Generating and using profile information automatically in an integrated development environment
US7058936B2 (en) * 2002-11-25 2006-06-06 Microsoft Corporation Dynamic prefetching of hot data streams
US7140008B2 (en) * 2002-11-25 2006-11-21 Microsoft Corporation Dynamic temporal optimization framework
US7386686B2 (en) * 2003-03-28 2008-06-10 Intel Corporation Inlining with stack trace cache-based dynamic profiling
US7343598B2 (en) * 2003-04-25 2008-03-11 Microsoft Corporation Cache-conscious coallocation of hot data streams
US7120907B2 (en) * 2003-08-28 2006-10-10 International Business Machines Corporation Unrolling loops with partial hot traces
US7373637B2 (en) 2003-09-30 2008-05-13 International Business Machines Corporation Method and apparatus for counting instruction and memory location ranges
US20050071816A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically count instruction execution for applications
US7395527B2 (en) * 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US20050071516A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically profile applications
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US7421681B2 (en) 2003-10-09 2008-09-02 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operation in an application
GB2407403A (en) * 2003-10-22 2005-04-27 Ibm Validating a variable data item in a software routine
US7587709B2 (en) * 2003-10-24 2009-09-08 Microsoft Corporation Adaptive instrumentation runtime monitoring and analysis
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US7743367B1 (en) * 2003-12-30 2010-06-22 Sap Ag Registration method for supporting bytecode modification
US7526757B2 (en) 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US20050155022A1 (en) * 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses to identify hot spots
US7392370B2 (en) * 2004-01-14 2008-06-24 International Business Machines Corporation Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US7197586B2 (en) * 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7895382B2 (en) * 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7181599B2 (en) * 2004-01-14 2007-02-20 International Business Machines Corporation Method and apparatus for autonomic detection of cache “chase tail” conditions and storage of instructions/data in “chase tail” data structure
US7290255B2 (en) * 2004-01-14 2007-10-30 International Business Machines Corporation Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
US7496908B2 (en) * 2004-01-14 2009-02-24 International Business Machines Corporation Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US7293164B2 (en) * 2004-01-14 2007-11-06 International Business Machines Corporation Autonomic method and apparatus for counting branch instructions to generate branch statistics meant to improve branch predictions
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7506330B2 (en) * 2004-02-12 2009-03-17 International Business Machines Corporation Method and apparatus for identifying differences in runs of a computer program due to code changes
US7519961B2 (en) * 2004-02-12 2009-04-14 International Business Machines Corporation Method and apparatus for averaging out variations in run-to-run path data of a computer program
US8266595B2 (en) 2004-02-12 2012-09-11 International Business Machines Corporation Removal of asynchronous events in complex application performance analysis
US7496900B2 (en) * 2004-02-12 2009-02-24 International Business Machines Corporation Method for automatic detection of build regressions
US20050210450A1 (en) * 2004-03-22 2005-09-22 Dimpsey Robert T Method and appartus for hardware assistance for data access coverage
US7480899B2 (en) * 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US7296130B2 (en) * 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7299319B2 (en) * 2004-03-22 2007-11-20 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7526616B2 (en) * 2004-03-22 2009-04-28 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US8135915B2 (en) * 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US8640114B2 (en) 2006-09-07 2014-01-28 Oracle America, Inc. Method and apparatus for specification and application of a user-specified filter in a data space profiler
US8214819B2 (en) * 2004-07-09 2012-07-03 Hewlett-Packard Development Company, L.P. Determining call counts in a program
US7457671B2 (en) * 2004-09-30 2008-11-25 Rockwell Automation Technologies, Inc. Systems and methods that facilitate management of add-on instruction generation, selection, and/or monitoring during execution
US20060070077A1 (en) * 2004-09-30 2006-03-30 Microsoft Corporation Providing custom product support for a software program
US7475387B2 (en) * 2005-01-04 2009-01-06 International Business Machines Corporation Problem determination using system run-time behavior analysis
US7607119B2 (en) * 2005-04-26 2009-10-20 Microsoft Corporation Variational path profiling
US7770153B2 (en) * 2005-05-20 2010-08-03 Microsoft Corporation Heap-based bug identification using anomaly detection
US7912877B2 (en) 2005-05-20 2011-03-22 Microsoft Corporation Leveraging garbage collection to dynamically infer heap invariants
US8161548B1 (en) 2005-08-15 2012-04-17 Trend Micro, Inc. Malware detection using pattern classification
WO2007049817A1 (en) * 2005-10-28 2007-05-03 Matsushita Electric Industrial Co., Ltd. Obfuscation evaluation method and obfuscation method
US7840958B1 (en) * 2006-02-17 2010-11-23 Trend Micro, Inc. Preventing spyware installation
GB0604991D0 (en) * 2006-03-11 2006-04-19 Slam Games Ltd Instrumentation for real-time performance profiling
US7962901B2 (en) 2006-04-17 2011-06-14 Microsoft Corporation Using dynamic analysis to improve model checking
US7926043B2 (en) * 2006-06-20 2011-04-12 Microsoft Corporation Data structure path profiling
JP4949789B2 (ja) * 2006-09-25 2012-06-13 富士通株式会社 コンパイルプログラム、コンパイル装置、及びコンパイル方法
US8813055B2 (en) * 2006-11-08 2014-08-19 Oracle America, Inc. Method and apparatus for associating user-specified data with events in a data space profiler
US8032875B2 (en) * 2006-11-28 2011-10-04 Oracle America, Inc. Method and apparatus for computing user-specified cost metrics in a data space profiler
US8799871B2 (en) * 2007-01-08 2014-08-05 The Mathworks, Inc. Computation of elementwise expression in parallel
US8762951B1 (en) 2007-03-21 2014-06-24 Oracle America, Inc. Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor
US8185880B2 (en) * 2007-10-04 2012-05-22 International Business Machines Corporation Optimizing heap memory usage
US8856753B2 (en) * 2008-04-18 2014-10-07 International Business Machines Corporation Granular measurement of processor performance in executing sections of software code
US8024719B2 (en) * 2008-11-03 2011-09-20 Advanced Micro Devices, Inc. Bounded hash table sorting in a dynamic program profiling system
US8478948B2 (en) * 2008-12-04 2013-07-02 Oracle America, Inc. Method and system for efficient tracing and profiling of memory accesses during program execution
JP5477206B2 (ja) * 2010-07-06 2014-04-23 富士通株式会社 コンパイル装置およびコンパイルプログラム
JP5496849B2 (ja) 2010-10-15 2014-05-21 インターナショナル・ビジネス・マシーンズ・コーポレーション プロファイル計装方法、プログラム及びコンパイラ
US9098612B2 (en) 2010-12-30 2015-08-04 Qwest Communications International Inc. End-to-end application tracking framework
US20130138480A1 (en) * 2011-11-30 2013-05-30 Xin Luna Dong Method and apparatus for exploring and selecting data sources
US9003379B2 (en) * 2011-12-12 2015-04-07 Zynga Inc. Methods and systems for generating test information from a source code
US9103874B2 (en) 2012-01-09 2015-08-11 International Business Machines Corporation Concurrent test instrumentation
US8572573B2 (en) * 2012-03-09 2013-10-29 Nvidia Corporation Methods and apparatus for interactive debugging on a non-preemptible graphics processing unit
US9274920B2 (en) * 2012-09-28 2016-03-01 Dialog Semiconductor B.V. Code profiling in embedded ULE applications
CN104995599B (zh) * 2013-03-15 2019-05-03 英特尔公司 使用硬件与软件组合的路径概况分析
US10269029B1 (en) 2013-06-25 2019-04-23 Amazon Technologies, Inc. Application monetization based on application and lifestyle fingerprinting
US9250877B2 (en) 2013-09-20 2016-02-02 Cray Inc. Assisting parallelization of a computer program
US10706101B2 (en) 2016-04-14 2020-07-07 Advanced Micro Devices, Inc. Bucketized hash tables with remap entries
US10534691B2 (en) * 2017-01-27 2020-01-14 Fujitsu Limited Apparatus and method to improve accuracy of performance measurement for loop processing in a program code
JP6926921B2 (ja) * 2017-01-27 2021-08-25 富士通株式会社 コンパイルプログラム、コンパイル方法及び並列処理装置
US10740470B2 (en) * 2017-05-31 2020-08-11 Shiftleft Inc. System and method for application security profiling
US10956574B2 (en) 2017-10-07 2021-03-23 Shiftleft Inc. System and method for securing applications through an application-aware runtime agent
US11074362B2 (en) 2017-12-04 2021-07-27 ShiftLeft, Inc. System and method for code-based protection of sensitive data
US10466986B2 (en) 2018-03-30 2019-11-05 Oracle International Corporation Optimized recompilation using hardware tracing
US11514172B2 (en) 2018-11-15 2022-11-29 Grabango Co. System and method for information flow analysis of application code

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5598560A (en) * 1991-03-07 1997-01-28 Digital Equipment Corporation Tracking condition codes in translation code for different machine architectures
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
US5579520A (en) * 1994-05-13 1996-11-26 Borland International, Inc. System and methods for optimizing compiled code according to code object participation in program activities
US5613118A (en) * 1994-06-20 1997-03-18 International Business Machines Corporation Profile-based preprocessor for optimizing programs
US5768592A (en) * 1994-09-27 1998-06-16 Intel Corporation Method and apparatus for managing profile data
US5659752A (en) * 1995-06-30 1997-08-19 International Business Machines Corporation System and method for improving branch prediction in compiled program code
US5787285A (en) * 1995-08-15 1998-07-28 International Business Machines Corporation Apparatus and method for optimizing applications for multiple operational environments or modes

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11561778B1 (en) * 2021-11-23 2023-01-24 International Business Machines Corporation Instrumentation for nested conditional checks

Also Published As

Publication number Publication date
US5950003A (en) 1999-09-07
JPH0962544A (ja) 1997-03-07

Similar Documents

Publication Publication Date Title
JP3290567B2 (ja) プロファイル計装方法
JP4833206B2 (ja) 最適化されたプログラムのためのアンワインド情報の生成
US8490061B2 (en) Profiling application performance according to data structure
JP4003830B2 (ja) マルチプロセッシング環境における透過動的最適化のための方法およびシステム
US6173444B1 (en) Optimizing compilation of pointer variables in the presence of indirect function calls
US6072951A (en) Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure)
US5937191A (en) Determining and reporting data accessing activity of a program
Burke et al. Interprocedural optimization: eliminating unnecessary recompilation
PT100166A (pt) Metodo e instrumento de compilar codigo em computadores digitais
US11526433B2 (en) Data structure allocation into storage class memory during compilation
CA2980333A1 (en) Field specialization systems and methods for improving program performance
Lin et al. Speculative register promotion using advanced load address table (alat)
Sansom Execution profiling for non-strict functional languages
Allen Interprocedural analysis and the information derived by it
Nystrom Bytecode level analysis and optimization of Java classes
Bernard et al. On the compilation of a language for general concurrent target architectures
Feautrier Array dataflow analysis
Bailey et al. Performance benefits of tail recursion removal in procedural languages
Honorio et al. Using OpenMP to detect and speculate dynamic DOALL loops
Louden et al. Compilers and Interpreters.
Pujare Machine-independent Compiler Optimizations for the U of T DSP Architecture
Mühlbauer et al. Automatic Transformation of Iterative to Tail-Recursive Functions in Python
JPS63276127A (ja) ダイナミック命令生成方式
JP2003131888A (ja) 手続き間命令スケジューリング方法
Jinturkar Data-specific optimizations

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20020305

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080322

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090322

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100322

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100322

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110322

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110322

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120322

Year of fee payment: 10

LAPS Cancellation because of no payment of annual fees