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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3404—Recording 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
明(図1〜図3) (b)第2実施形態(プロファイル実行時システム)の
説明(図4〜図11) (c)その他 発明の効果
を把握するためにプログラム実行時に特定部分の実行時
間,繰り返し回数等のプロファイルデータを計測し収集
するための方法に関する。
解するために、プログラム作成者は、プロファイリング
ツールを必要としている。ここで、プロファイリングツ
ールとは、カウンタ等による詳細な命令実行時間や、手
続きレベル,基本ブロックレベル,及び/又は命令レベ
ルでのタイミング情報といったプロファイルデータを計
測して通知するためのものである。
ては、ループ(loops),計時領域(timed regions),条
件文(conditionals)がある。ループをプロファイルの
対象とする際には、プログラム中の指定ループの実行時
間や繰り返し回数をプロファイルデータとして計測す
る。計時領域をプロファイルの対象とする際には、プロ
グラム中の指定計時領域の実行時間をプロファイルデー
タとして計測する。条件文(分岐)をプロファイルの対
象とする際には、プログラム中の指定条件についての判
断結果の統計情報をプロファイルデータとして計測す
る。
のプロセッサにより実行されるプログラムに対して前述
のようなプロファイルを行なう場合には、そのプログラ
ムのコンパイルを行なう逐次コンパイラにプロファイリ
ングツールのオプションを付加しおけば、逐次コンパイ
ル時に、プロファイルデータの計測・収集対象となる部
分を指定する計装コード(instrumentation code)が、
プログラムを成すコード中に挿入(計装)され、前述の
ようなプロファイルデータが計測・収集される。
れたプログラムを複数台のプロセッサにより並列的に実
行する場合には、図12に示すように、まず、オリジナ
ルコード〔入力Fortran:例えばHPF(High Performa
nce Fortran)コード〕で書かれたプログラムを入力し
(ステップA1)、そのプログラムに対してコンパイル
処理を行なうことによりそのプログラムを並列処理可能
な形に変換し(ステップA2)、ターゲット言語コード
〔出力Fortran:例えばFortran90〕として出力する
(ステップA3)。なお、オリジナルコードはオリジナ
ルユーザコードあるいはオリジナルソースコードと記載
する場合もある。
毎に、前述と同様の逐次コンパイルを行なって、各プロ
セッサ毎に実行可能なプログラムを生成し(ステップA
4)、各プログラムに従って複数台のプロセッサによる
並列処理を行なっている(ステップA5)。このとき、
ステップA2でのオリジナルコードに対するコンパイル
処理では、より高速な処理を実現するためのコード変換
つまり最適化が行なわれる。
ファイルを行なう場合も、プロファイルデータを計測・
収集するためには、適当なプログラム構成部分の計測開
始位置と計測終了位置とを識別するための計装コード
を、そのプログラムのオリジナルコード中に挿入(計
装)する必要がある。このため、コンパイル処理の開始
時に計装コードの挿入処理を行なった場合、コンパイラ
によって行なわれる最適化に部分的な変更が生じる可能
性があるので、全てのコード変換の終了後に計装コード
の挿入処理を実行しなければならない。
た場合、前記逐次コンパイル処理(ステップA4)の前
後でプロファイルデータの対応関係をとることは容易で
あるが、前述した最適化を伴うコンパイル処理(ステッ
プA2)の前後では、オリジナルコードが変換されてい
るため、プロファイルデータの対応関係をとることは非
常に困難である。ユーザはプログラムをオリジナルコー
ド(入力Fortran)で入力しているので、そのオリジナ
ルコードに対応した形でプロファイル結果が得られなけ
れば、ユーザは、そのプロファイル結果を有効に利用す
ること(即ちプロファイル結果をプログラムの作成に反
映させること)ができない。
グする際には、オリジナルコードから変換された最適化
コードを、ユーザによって書かれたオリジナルコードに
対応(マッピング)させなければならない。そこで、例
えば「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. 」では、コンパイラが、後でデバッガで
処理される各コード変換の詳細な履歴を保持する技術が
開示されている。しかし、プロファイルを行なうプロフ
ァイラでは、プロファイル対象となるプログラム構成部
分を識別するために、デバッガほど詳細なコード変換情
報は必要ない。
の必要不可欠な条件は、プロファイル対象であるプログ
ラムの挙動を正確に通知することである。しかし、プロ
ファイルデータを計測して収集するためには、前述した
通り、ユーザによって書かれたプログラムの所定構成部
分が実行される際にタイマを動作/停止させたりカウン
タを動作させたりするための計装コードを、オリジナル
コード中に挿入しなければならない。
たサブルーチン(プロファイルライブラリサブルーチ
ン,実行時ライブラリサブルーチン)が、オリジナルコ
ードのプログラムの実行中に実行されるために、オリジ
ナルプログラムの挙動を歪める摂動(perturbation)が
生じてしまう。特に、並列プログラムを図12にて前述
のごとく生成する場合、前記摂動は、逐次プログラムよ
りも重大なものであり、最も処理の遅いプロセッサがそ
の処理を完了するまで待機しなければならないという問
題(オーバヘッドの増大)を生じさせる。
過時間を計測する手法としては、命令ポインタをサンプ
ルする手法と、タイマ(クロック)を用いる手法との2
つがある。通常、プロセッサでは、現在実行中の命令の
アドレスを保持しながらプログラムを実行している。命
令ポインタ(プログラムポインタ)は現在実行中の命令
のアドレスを指し示すもので、このポインタの値をサン
プルし、予め指定されたあるアドレスから他のアドレス
までの経過時間を計測することにより、プロファイルデ
ータとしての経過時間を得ることができる。
値を一定間隔(一定のサンプリング周期)でサンプル
し、指定領域間の命令ポインタの計数値に、サンプリン
グ周期を乗算した値として、指定領域の経過時間が算出
される。このような手法により、サンプリングコストを
一定にできるという利点が得られるが、次のような不都
合も生じる。即ち、算出された経過時間が不正確であ
る可能性があること、目的コードを処理する必要性が
あること、命令ポインタのロケーション(例えば、通
信,同期,グローバルオペレーション,実行時ライブラ
リ等)を分類するのが困難なことである。
る経過時間が正確であり、クロックによる計測後にさ
らなる処理が不要であり、コンパイラ実行時ライブラ
リ内に機能類別をマーキングすることは自明(trivial)
であるなどの利点はあるが、オーバヘッドが大きくなる
という課題がある。このようにプロファイルによりオー
バヘッドが大きくなることで、プロファイル処理を伴う
プログラムの実行時間は非常に長くなる。
グラムの実行時間は長くなるが、このプロファイル処理
によるオーバヘッド時間をできるだけ短くすることが望
まれている。また、一般に、手続き(procedure)のプロ
ファイルを行なう際には、呼び出し側関数〔呼出側:以
下、コーラー(caller)と呼ぶ〕と呼び出され側関数〔被
呼出側:以下、コーリー(callee) と呼ぶ〕とのペアを
把握しながら、各コーラー−コーリーのペア毎に、実行
時間や繰り返し回数を計測することになる。
リーのペアの最大数が分かっているならば、コーラー−
コーリーのペアについての2次元テーブル(関数の呼出
関係を保持するテーブル)を作成することにより、コー
ラー−コーリーのペアに関する情報の探索(lookup)や
格納を、データの衝突を招くことなく且つ探索を小さな
一定コストで行ないながら、容易に実行することが可能
である。
数を決定するためには、目的コードを検討し変更する付
加的なモジュールが、リンク時間中に必要になる。ま
た、全てのコーラー−コーリーのペアを考慮するならば
その2次元テーブルは極めて巨大なものになり、初期化
に際してメモリ内の大きな領域を無駄に確保しておく必
要が生じてしまう。
造を使用することも考えられる。このようなデータ構造
としては、例えばハッシュテーブルがある。ハッシュテ
ーブルを用いた場合、メモリスペースを無駄に使用する
ことなく、現在存在するコーラー−コーリーのペアのレ
コードをのみ保持することができる。しかし、ハッシュ
テーブルの特性として探索時間がリスト長さに依存する
ため、ハッシュテーブルでは、探索コストが一定でなく
且つ比較的大きくなってしまう。ハッシュテーブルを動
的に作り直すことでリスト長さを管理することも可能で
あるが、その場合、不一定で無駄なオーバヘッドを生じ
ることになる。
たもので、並列処理を行なうシステムでプロファイルを
行なうべく、コンパイル処理時に、オリジナルコードと
コンパイル処理による変換コードとの間のマッピングを
容易に行なえるようにしながらプロファイル用の計装コ
ードの自動挿入を可能にしたプロファイル計装方法を提
供することを目的とする。
るために、本発明のプロファイル計装方法は、オリジナ
ルソースコードにより逐次形式で記載された並列計算機
用プログラムの挙動を把握すべくプログラム実行時にプ
ロファイルデータの計測を指示する計装コードを、コン
パイル処理により最適化変換された前記プログラムの変
換コード中に挿入するものであって、前記コンパイル処
理による最適化変換中に、変換元の命令文を特定する情
報を、変換履歴情報として各命令文毎に保持する履歴保
持ステップと、前記履歴保持ステップにより保持された
変換履歴情報を基に前記変換コードをオリジナルソース
コードにマッピングするマッピングステップ(前記変換
履歴情報に基づいて同じ変換元の命令文から導出された
命令文を識別することにより前記変換履歴情報から必要
な情報を抽出して前記変換履歴情報を要約し、変換コー
ドをオリジナルソースコードにマップするための要約処
理)と、前記マッピングステップによるマッピング情報
(前記要約処理で得られた情報)を参照して、オリジナ
ルソースコードの計装コードの挿入を必要とされる箇所
に対応する前記変換コード中の所定箇所に計装コードの
挿入を行なう計装ステップとを有することを特徴として
いる(請求項1)。
換前に、前記プログラムのオリジナルソースコード情報
を収集するプロファイル初期化処理を行なってもよく
(請求項2)、このとき、前記オリジナルソースコード
情報として、前記オリジナルソースコードで記載された
各命令文についてのファイル情報,配置情報,文字列記
述,種類,親となる命令文の情報を含む(請求項3)。
は、コンパイル処理による最適化変換中には、履歴保持
処理(履歴保持ステップ)により、変換元の命令文を特
定する情報が変換履歴情報として各命令文毎に保持され
る。従って、本発明では、従来のデバッグ時のように詳
細な変換履歴を保持することなく、変換元の命令文を特
定する情報により、単純な保存アルゴリズム〔和演算(u
nion)や複写操作(copy operation,duplicate operat
ion))に従って履歴保存を行なうことができる。
ドとの間のマッピングを行なった後、計装処理(計装ス
テップ)により、マッピング情報を参照して、オリジナ
ルソースコードの計装コードの挿入を必要とされる箇所
に対応する前記変換コード中の所定箇所に計装コードが
挿入される。このとき、変換に関する所定の制約に従う
ことにより、オリジナルソースコードと変換コードとの
間で正確なマッピングが可能になる。
方法では、コード変換履歴(変換履歴情報)を保持す
ること、 出力コード(変換コード)をオリジナルソー
スコードにマップするためのデータを作成することが主
たるポイントである。これにより、コンパイル処理時
に、オリジナルコードとコンパイル処理による変換コー
ドとの間のマッピングを行ないながら、最適化されたシ
ングル−スレッディッド・コードの自動プロファイル計
装(automatic profile instrumentation of optimized
single-threaded code)が行なわれる。このとき、コン
パイル処理による最適化変換前に、プロファイル初期化
処理により、プログラムのオリジナルソースコード情報
が収集されるので、収集されたオリジナルソースコード
情報に基づいて、変換コードとオリジナルソースコード
との間のマッピングを行なうことが可能になる。
スコードである「詳細な設計データ構造およびアルゴリ
ズム」によって達成され、変換された各命令文(変換コ
ード)毎に導出された指示(変換履歴情報)を取り扱う
ことによって達成される。これらのデータ構造(変換履
歴情報)は、単純な一連の規則に従って管理され、収集
されたデータや制御の流れの情報に基づいて要約され
る。つまり、各オリジナルソースコードに適用される変
換に応じて、変換履歴情報は、和演算もしくは複写操作
のいずれかによって変更される。要約処理では、収集さ
れたデータが、変換履歴情報や命令文の親子関係や制御
の流れの情報に基づいて解析される。
施形態を説明する。 (a)第1実施形態(プロファイル計装システム)の説
明 図1は本発明の第1実施形態としてのプロファイル計装
方法を説明するためのフローチャート(ステップS1〜
S5)であり、このフローチャート中のステップ番号を
随時挙げながら、本実施形態について説明する。
ータの種類とプロファイル実行時ライブラリインタフェ
ースとをまず定義することにより、最適化コードを計装
(instrumenting)する手法について説明する。ついで、
この手法は、元の命令文(オリジナルユーザコードの命
令文)および変換履歴についての情報を保持するために
使用される2つのデータ構造の記述により、さらに説明
され、変換履歴の保持,計装(instrumentation)アルゴ
リズムおよび要約アルゴリズムの説明で完結される。
ルデータ)の種類 本実施形態のシステムは、手続きレベルや、ループ,条
件文(conditionals)用の命令レベルでプロファイルデー
タを収集する。プロファイル対象とするソース言語(オ
リジナルソースコード,オリジナルユーザコード,もし
くはオリジナルコードと呼ぶ場合もある)をHPF(Hig
h Performance Fortran)コードとすると、その言語特有
の構成(construct)である配列表現,WHERE構成,
やFORALL構成が含まれることになる。なお、入力
されたHPFコードは、図1のステップS1のパーサー
(parser)処理により解釈され、コンパイラの内部表現
(IR:Intermediate Representation)に変換される。
して、経過時間,呼出/繰返し回数,および動的呼出ツ
リー(dynamic call tree)が収集される。手続き,ルー
プおよび計時領域(timed regions)について全経過時間
が計測される。また、命令文の実行回数,手続きの実行
回数,ループ内の繰り返し回数,および条件分岐での選
択回数を明示するために、全てのプロファイル対象構造
について頻度が計測される。
タフェース プロファイル実行時ライブラリインタフェースは、計時
領域や条件文を認識するための11個のサブルーチン
と、そのライブラリサブルーチンに対して引き数(argu
ments)として渡されるオリジナルコードについての情報
とから構成されている。ここでは、要約フェイズによっ
て供給されなければならない情報、特に、プロファイル
される構成の識別、および、オリジナルソースコード記
述を実行時ライブラリに引き渡す方法について記述す
る。下記の表1は、プロファイル実行時ライブラリサブ
ルーチンの一覧である。
IF文に対するプロファイルを開始するためのもので、
その値(value) としては条件判定の結果である真(tru
e)または偽(false)が設定される。また、“start ari
th if”は算術IF文に対するプロファイルを開始する
ためのもので、その値(value) としては条件判定の結果
である+1,0,−1のいずれかが設定される。
は、オリジナルソースコードについての情報を伝える記
述列に関連している。プロファイラにデータを供給する
ための手段は他に使用されないので、その記述列は、フ
ィードバックプロファイル情報をオリジナルソースコー
ドにマップするのに十分な情報と、プロファイルデータ
表示ツールに表示されたプロファイル結果をユーザが参
照して判読するのに十分な情報とを含んでいなければな
らない。その手続きの記述列は、ファイル名と手続き名
とを含んでいる。ループ,領域,算術IF文(arithmat
ic if),および論理IF文(logical if)は、シリア
ルな命令番号(通し番号),ソースコード内での実際の
ライン番号,および短い記述を含んでいる。
ジナルソースコードおよび変換履歴情報をそれぞれ保持
するために使用される2つのデータ構造を、以下に説明
する。図1のプロファイル初期化処理(ステップS2)
により、各オリジナル命令文(オリジナルソースコード
で記載された命令文)についてのソース情報は、StmtIn
fo構造の中に格納される。その構造は、下記のように、
当該ラインを直接含むファイルについての情報(FileIn
fo)と、そのファイル内での実ライン番号(lineno)
と、一意的な命令文通し番号(serno)とを含んでいる。
として、“desc(description) ”フィールドがオリジナ
ル命令文の略記(その命令文の内容)を含み、“pStmtI
nfo”が当該命令文の親に当たる命令文の“StmtInfo”
を指し、“stmtKind”は、オリジナル命令文のタイプ
(文の種類;例えばDO文,FORALL等)の情報を
含み、“cotainArrayExpr ”は、最上位の命令文が配列
表現を含んでいるか否かに基づいてセットされる〔配列
表現を含む場合に真(true)〕。
造は、“SetOfStmtInfo ”と呼ばれる“StmtInfo”のリ
ストによって拡張される。そのリスト内の“StmtInfo”
に含まれている物は、現在の命令文が“StmtInfo”内に
記述された命令文から導き出されていることを示してい
る。
ユーザコードに対して実行される基本的な変換として
は、5つのもの、即ち、ナル(null)変換,併合(merge)
変換,コード削除変換,展開(expand)変換,およびコー
ド移動変換がある。各変換についての具体例を以下に記
述する。
命令文本体内に含まれる文は、それを取り込んでいる命
令文のSetOfStmtInfo(変換履歴情報)を自動的に受け継
ぐものとする。その結果、本体内から本体外部への命令
文の移動を行なう時には、移動された命令文のSetOfStm
tInfo は、それを取り込んでいた命令文のSetOfStmtInf
o が追加される。
に導入された命令文として定義されるもの、つまり、オ
リジナルソースコードとは関連の全くない変換コード
(命令文)を生成する変換である。これらの命令文は、
SetOfStmtInfo フィールドに“NULL”が設定される。こ
のような変換の例としては、プロファイル計装コードが
挙げられる。このプロファイル計装コードは、どのよう
なオリジナル命令文からも導出され得ないものであるか
らである。
の命令文に凝縮される変換である。新しく生成された命
令文のSetOfStmtInfo は、併合された命令文のSetOfStm
tInfo を和演算(統合)したものとなる。下記例1で
は、Aで示される命令文とBで示される命令文とが命令
文Cに併合されている。左側の〔〕内の値は元の命令文
のID(通し番号)である。左側の3つの命令文を併合
することにより、右側の併合変換後の新たな命令文で
は、この命令文が3つの命令文から導出された変換履歴
が“SetOfStmtInfo ”〔1 2 3 〕として保持される。
ある。この場合、SetOfStmtInfo に対しては何の操作も
行なわれない。
の命令文に拡張する変換で、その変換では、ある命令文
が、単一もしくはいくつかの命令文と置き換えられる。
新しく生成された命令文のSetOfStmtInfo は、オリジナ
ル命令文のSetOfStmtInfo フィールドを複写したものと
なる。以下に、DOループに拡張されるFORALL命
令の例(例2)と、1つのループが2つの異なるループ
に分離される例(例3)とを示す。
し、その順序変更により本体内から本体外へのコード移
動が行なわれるならば、移動される命令文のSetOfStmtI
nfo は、取り込んでいる命令文からのSetOfStmtInfo に
よって拡張される。さもなければ、何の修正も必要では
ない。以下に、ある命令文本体内から他の命令文本体へ
コード移動を行なった例(例4)と、交換された命令文
本体をもつ命令文の例(例5)とを示す。
から移動されてループIの中へ挿入されている。このた
め、命令文BのSetOfStmtInfo は、〔3〕から移動され
て来たループについてのSetOfStmtInfo とが統合され、
ループJは削除されている。また、例5では、I,J,
Kについて繰り返される入れ子型(nested)ループが交
換されて、そのループがK,J,Iについて繰り返され
ている。この変換は、入れ子型ループJ,Iの外側にル
ープKを移動し、ループIの外側にループJを移動し、
ループIをループJ内に移動し、そして最後にループJ
をループK内に移動したものと考えられる。
S4)は、2つのフェイズ、つまり、現在の命令(変換
コード)をオリジナルユーザコードにマップする要約フ
ェイズ(要約処理;図1のステップS4−1)と、プロ
ファイル実行時ライブラリに対するコール(計装コー
ド)を挿入する命令挿入フェイズ(計装処理;図1のス
テップS4−2)とに分けることができる。
ードをオリジナルユーザコードにマップする。要約は、
複合マージ,コード移動や展開に関連する処理であっ
て、特に入れ子型ループや非連続(non-contiguous)な
計時領域に関連するものである。プロファイラによる報
告を正確なものにするために、要約は、コード変換につ
いて保存性のある(conservative)仮定を行なってい
る。各処理アルゴリズムは、以下のように、擬似コード
を用いて記述される。
を行なう。 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))} 以下に、上述のごとく定義された変数を用いて、要約フ
ェイズのドライバルーチンを記述する。
ル実行時ライブラリサブルーチンコールが、手続きレベ
ルや命令レベルでのプロファイリングのために挿入され
る。手続き(procedure)に対して命令挿入することは簡
単な処理である。もし、手続きがメインサブルーチンで
あれば、計装コードである“start profile ”および
“end profile ”がそのサブルーチンの最初と最後の命
令文として挿入される。もし他の出口(exit)が存在する
ならば、その出口の前に“end profile ”が挿入され
る。メインサブルーチンではない手続きについては、
“start procedure”および“end procedure ”が挿入
される。
ループ領域の始まりと終わりとの確認,非連続(non-con
tiguous)領域の確認,オリジナルループに対応するルー
プの確認,そしてループ・インストゥルメンテーション
の挿入が必要である。最初の段階では、ループ命令文の
連続(contiguous)領域が確認される。その領域が、ルー
プ命令を計時するためのライブラリコール(計装コー
ド)である“start loop”および“end loop”によりマ
ークされる。命令文中のループは、オリジナルループに
対応するように確認されマークされる(同じ起源のルー
プに同じNAMEを付す等の処理を行なう)。なお、ループ
繰り返し回数を計数するためのライブラリコール(計装
コード)である“incr loop ”が、そのループ本体内の
最初の命令文として挿入される。
は、“incr loop ”に関する部分を除いて、前述したル
ープに対する命令挿入と同様にして行なわれる。プロフ
ァイルされる条件文(conditionals)については、オリ
ジナル条件判定命令文が、関連する命令文のリスト中の
最後のものとして見做される。その条件判定値は、表1
で前述した通り、スクラッチ変数(scratch variable)で
ある“value ”に書き込まれる。これにより、プロファ
イル情報を測定した時と実際の条件判定を評価する時と
の2回に亘って、その条件判定値を評価するのを避ける
ことができる。条件文についてのプロファイル計測を行
なう場合のライブラリコール(計装コード)は、条件文
に入る前に付与される。
verview) 図1は、前述した通り本発明の第1実施形態としてのプ
ロファイル計装方法を説明するためのフローチャートで
あると同時に、本方法を適用されるプロファイル計装シ
ステムのコンパイラ内のプロファイルコンポーネントを
まとめたものを等価的に示している。
本的には、コードの内部表現(中間表現)を変換し最適
化する一連のモジュールS3として設置されたソース/
ソース・トランスレータである。そのモジュールパス
は、オリジナルソースコード(ここではHPFコード)
を内部表現(IR)に変換するパーサーS1から始ま
り、内部表現を出力コード(ここではFortran90)に
変換するコンバータ(図1のステップS5の出力変換処
理)で終了する。
ルS2は、パーサーS1の直後に配置され、コード変更
を施される前のオリジナルソースコードについてのデー
タを収集する。そして、連続するコンパイル処理モジュ
ールS3(履歴保持ステップ)が、変換履歴を保持しな
がら中間表現コードを変換する。コンパイラパスの最終
モジュールの一つであるインストゥルメンターモジュー
ル(計装アルゴリズム)S4が、変換コードをオリジナ
ルソースコードにマップするとともに(要約処理モジュ
ールS4−1;マッピングステップ)、プロファイル実
行時ライブラリサブルーチンに対する適当なコール(呼
出,計装コード)を挿入している(計装処理モジュール
S4−2;計装ステップ)。
とを説明するために、一例として下記のごとく与えられ
たコードが用いられる。中間表現コードを変換するモジ
ュールはいくつかあるが、ここでは、2つだけ(配列表
現展開,通信最適化)が選択され説明される。初期コー
ドは、オリジナル命令文で初期化されたStmtInfoのセッ
トとして下記のように示される。
り、オリジナル配列表現からの変換履歴情報“SetOfStm
tInfo ”の複写を含むループ表現にスカラー化される。
なお、先頭の番号はライン番号(lineno)、〔〕内の番号
は通し番号(serno) である。
るデータが、通信時間を最小にするように局所一時領域
(local temporary areas) へまとめて転送される。下記
の例では、スクラッチ配列に参照事項を付与すべくルー
プと割当命令文とが変更される前に導入された、何らか
の通信最適化コードが示されている。その導入されたコ
ードは、割当命令文および取り込んでいるループから、
その変換履歴情報“SetOfStmtInfo ”を引き継いでい
る。
nfo ”に基づいて同じオリジナル命令文から導出された
命令文を識別することにより、変換履歴情報から必要な
情報を抽出して変換履歴情報を要約し、変換コードをオ
リジナルソースコードにマップしている。
ジナル命令文のID(serno)、ここでは“1”を“CHOS
EN statement”に配置することにより、計装要約(instr
umentation summary)が始まる。前述したExtendedRela
tedCurStmtStmtInfoおよびExtendedRelatedCurStmtの最
初の算定で、そのSetOfStmtInfo 内に“1”をもつ全て
の命令文が含まれている。つまり、“1”に関連する命
令文、“1”のオリジナル命令文から変換され最適化さ
れたコードが記憶される。
しに際しては、下記の通り、そのセット中に、未処理の
オリジナル命令文のID“2”が含まれ、同様の処理が
行なわれる。
命令文のラインとマッチしないので、ライン1に関連す
るDOループを、ループとして計時することはできな
い。代わりに、計時領域(timed region)として取り扱わ
れる。その領域の最初の命令文と最後の命令文とが確認
され、計装コードとしての“start region”および“en
d region”が、下記の通り適当な位置に挿入される。ま
た、記述列は、ループと配列表現との両方を含んでい
る。
ズ)では、要約結果および変換に関する所定の制約に従
って、計装コードが変換コード中に挿入される。このと
き、その制約に従うことにより、オリジナルソースコー
ドと変換コードとの間で正確なマッピングが可能にな
る。ここでは、その命令挿入時の制約について説明す
る。
ないが、プロファイリングシステムによって報告される
データの特性と言えるものである。 インストゥルメンテーションでは、実行されたプロフ
ァイル命令だけがそのプロファイル報告中で報告され
る。なぜならば、プロファイル計装命令(例えばstart
loop, start procedure 等)が実行された時のみ、タイ
マやカウンタがスタート/ストップ/インクリメントさ
れるからである。その計装命令を除いて、プロファイル
実行時システムへソースコードについての情報を渡す他
の手法は無い。このことは、ユーザは実行されるコード
だけに興味があるので、問題を生じさせない。
に命令が削除された場合には、その命令は決して実行さ
れないので、その命令に対してプロファイル情報が報告
されることは無い。再び、このことは、ユーザは実行さ
れた命令にのみ関心があるので、問題を生じさせない。 さて、次に、プロファイルされる構造(profiled constr
ucts,profiled structures)である領域(region),ルー
プ,条件判定(conditional),手続き(procedure)のそ
れぞれについて特有の制約を、以下に列挙する。
ルデータは、経過時間および呼出回数(その領域に入っ
た回数)である。経過時間に対する制約は無い。しか
し、領域が非連続(non-contiguous)である時に不正確な
呼出回数をもたらす制約変換が一つある。呼出回数をカ
ウントアップ計数する箇所が、次の条件を満たすように
定められなければならない。つまり、その条件とは、あ
る計時領域に入るコードを通る全ての制御パスに対し
て、各パス内に、呼出計数値を1回カウントアップする
箇所が1ヵ所だけ存在することである。
し、図2(b)に前記制約を満たす例を示す。図2
(a),(b)において、丸印(circles)はコード断片
(code fragment)を示し、各丸印間を接続する矢印付き
線分は制御の流れを示している。また、網掛けを施され
た2つの丸印(コード断片)は、それぞれ、単一の不連
続計時領域の連続領域を含んでいる。そして、図2
(a)は正確な呼出回数を得られない例(つまりインク
リメント位置を割り付けることのできない例)であり、
図2(b)は正確なカウントアップ(インクリメント)
を行なえる例(インクリメント位置を割り付けることの
できる例)である。
きるので、これは厳しい制約ではない。もし上記制約を
満たさない場合が存在するならば、コンパイル処理時に
ユーザに対してその旨が通知される。 (a8−2)ループ 施された変換が制約を満たしているようなループにおい
て収集されるプロファイルデータは、経過時間,呼出回
数,およびインクリメント回数(ループの繰り返し回
数)である。なお、制約を満たさない変換が施されたル
ープについては、領域(regions)としてプロファイルさ
れる。
ループについても正確な呼出回数を得るための変換制約
としては、前述と同様の制約が適用される。ほとんどの
場合、インクリメントの割付を行なうことができるの
で、これは厳しい制約ではない。正確なループ繰り返し
回数を得るためには、変換について幾つかの制約があ
る。これを説明するために、まず、変換コードでの適格
なループの一般的形状について記述してから、制限され
た変換の例を示す。
dedRelatedStmtInfoおよびExtendedRelatedCurStmtを算
定した後の適格なループにとって真である。 ExendedRelatedStmtInfoのセットは、オリジナルルー
プと、そのオリジナルループ内で入れ子状態の命令とを
含むのみである。 ExtendedRelatedCurStmtのセットは、図3に示すよう
にループに先行する初期化部分(図3の上段)からな
る。その初期化部分内の命令は、オリジナルループから
のみ導出され、現ループ(変換コードによるループ)は
オリジナルループからのみ導出され、そして、現ループ
の本体(図3の下段)は、オリジナルループ本体の外側
から移動されてきたコードを含んでいない。ここで、図
3は、要約フェイズでExendedRelatedStmtInfoおよびEx
tendedRelatedCurStmtを算定した後の、ExtendedRelate
dCurStmtの状態を示すものである。
換したにもかかわらず間違ったインクリメント回数(繰
り返し回数)をもたらし得る最適化は、部分的なループ
アンローリング(partial loop unrolling)である。その
ループアンローリング最適化は、その本体内でよりよい
最適化を成すために、ループ本体の基本ブロックのサイ
ズを拡張して実行される。この変換は一般的であるの
で、上記制約,はわずかに厳しいものである。
グの例を示す。 do i= 1, 100 → do i= 1, 100, 4 → A A → A → A → A end do → end do (a8−3)条件判定(conditional) もしオリジナル条件判定が下記のようなマージや展開に
よって変換されるならば、その条件判定についてのプロ
ファイルは行なわれない。条件判定のマージや展開は一
般的であるので、これは厳しい制約である。プロファイ
ルされない条件判定が存在する場合、インストゥルメン
テーションモジュールは、コンパイル処理時にユーザに
対してその旨を通知することができる。
ライン処理するならば、下記項目,のように、デー
タが不正確にプロファイルされる。
となく、経過時間がコーラー(呼出側)に含まれ、その
呼出回数は、インラインコードを入力するためにインク
リメントされない。 もしインライン処理された手続きが手続き呼出を含む
ならば、それらの手続きのためのコーラー−コーリー情
報が不正確になる。それらの手続きのためのコーラー
は、インライン処理された手続きではなく、インライン
処理された手続きのコーラーである。
ル処理時に、オリジナルコードとコンパイル処理による
変換コードとの間のマッピングを容易に行ないながら、
並列処理システムのプロファイル用の計装コードを自動
挿入することができる。従って、マッピングに基づいて
オリジナルソースコードに対応した形のプロファイル結
果を容易に得ることが可能で、ユーザは、そのプロファ
イル結果を有効に利用してプログラム作成に反映させる
ことができる。
システム)の説明 図4本発明の第2実施形態としてのプロファイルデータ
収集方法を説明するためのフローチャート(ステップS
11〜S13)であり、このフローチャート中のステッ
プ番号を随時挙げながら、本実施形態について説明す
る。以下では、本実施形態の主たるデータ構造であるス
タック領域,ヒープ領域,およびテーブルの概観が、図
(representation)や関数(function)に基づいて記述され
る。
集方法を適用されるプロファイル実行時システムは、プ
ロファイル実行コストを一定に保つための方法を取り扱
うもので、その方法が記述される。また、コーラー−コ
ーリーテーブルに対する探索(lookup)コストを小さく且
つ一定に保持するための方法が、下記コーラー−コーリ
ーテーブルにかかるサブセクションで記述される。さら
に、本実施形態のシステムがどのように動作するかを示
すために、プロファイルライブラリインタフェースにつ
いてのデータ構造利用法の擬似コード記述が列挙される
(下記表2参照)。
イズ(図4のステップS12;ユーザプログラム実行,
プロファイル処理)にとって主要なデータ構造が記述さ
れる。3つの内部構造によってプロファイルブック管理
が行なわれる。ここで、3つの内部構造は、計時領域
(timed region)のスタックフレームを見せかける(mimi
c) スタック領域,プロファイルデータレコードのヒ
ープ領域,およびコーラー−コーリーレコードペアの
テーブルである。また、プロファイルされる構造に特有
のデータが、基礎を成す動的配列データ構造とともに記
述される。
stack) スタック領域は、主として呼出側手続き(caller proced
ure)を決定するために用いられ、局所的に管理されるデ
ータ構造である。手続きに入る際に、呼出側手続きID
(LID)がTOS(Top Of Stack)から得られ、適当
なコーラー−コーリー情報がスタック領域にプッシュさ
れる。出口では、コーラー−コーリー情報がスタック領
域からポップされる。プロファイルインタフェースと一
致する実行決定(implementation decision)として、ル
ープレコードや領域レコードについての情報もまたスタ
ック領域にプッシュされて、入れ子情報を収集するとと
もに、エンドマーカールーチン(end marker routines)
に対し引き数(argument)としてレコードを渡す必要性を
除去するようになっている。
eap) 内部ヒープ領域は、割付コストを管理すべくユーザプロ
グラムフェイズ(図4のステップS12)中にプロファ
イルデータレコードを割り付けるために使用される。巨
大な内部ヒープ領域が初期化処理(図4のステップS1
1)中に割り付けられており、ユーザプログラム実行中
には、ヒープ領域内への書込位置を指し示すポインタを
単にインクリメントするだけでヒープ領域への割付を行
なえるようになっている。手続き(procedure) ,ルー
プ,領域(region),論理IF文(logical if),算術IF
文(arithmatic if) ,およびコーラー−コーリーレコー
ドの全てが、このヒープ領域上に割り付けられる。
(caller-callee table) 手続きのプロファイルデータは、コーラー−コーリーテ
ーブルで収集され格納される。このコーラー−コーリー
テーブルは、2つの軸に沿って動的に増大する2次元配
列である。コーラー(呼出側関数)のIDとコーリー
(被呼出側関数)のIDとによりインデックスされるこ
のテーブルは、コーラー−コーリーペアの状態を格納す
る。そのテーブルエントリには、2つのIDで指定され
るコーラー−コーリーペアに対して割り当てられたレコ
ードがなければ“NULL”が保持され、そうでなけれ
ば(割り当てられたレコードがある場合)コーラー−コ
ーリーレコードの位置を指し示すポインタ(PTR)が
保持される。
ルであるコーラー−コーリーテーブル10は、下記
(1)式を用いて2次元インデックスcaller,callee を
1次元インデックスf(caller,callee)にマップすること
により、1次元テーブルとして表現される。ここで、ca
ller,callee は、それぞれ呼出側関数および被呼出側関
数を指定するID値であり、f(caller,callee)は、下記
(1)式により算出される1次元インデックス値で、具
体的には図5のテーブル10中に記載されるような値に
なる。
算術IF文,論理IF文,計時領域,手続き,およびコ
ーラー−コーリーペア毎に定義される。それぞれのデー
タ構造は、カウンタ及び/又はタイマを含み、唯一のロ
ーカルIDを割り当てられる。
低位のデータ構造であり、内部スタック領域,内部ヒー
プ領域およびテーブルのための基礎を成すインプリメン
テーション(implementation)として用いられる。その基
礎的な構造は、仮想アドレス(論理アドレス)を物理ア
ドレスに変換するシステムを模倣(mimic)している。
ータ構造を説明するためのもので、この図6には、デー
タタイプの基本的な成分が5つ示されている。つまり、
固定サイズのエレメントを複数もつ固定サイズの多数
ページを指し示すポインタの配列(Array of pages, Pag
e table),1ページ当たりのエレメント数(Elements
per page) ,エレメントサイズ(Element size),ペ
ージの最大数(Maximumpages) ,割り付けられたペー
ジ数(Number of pages allocated)である。
化処理(図4のステップS11)時に、運用上の効果か
ら2の巾乗として与えられる。インスタンス(instance)
が引き起こされた時に1ページ分の領域が割り付けら
れ、後続のページは、ページ数を拡張する明白な要求
(calls)によって作成される。仮想アドレスの物理アド
レスを決定するために、ページ数“PageNumber”とオフ
セット(ページ先頭からの位置)“Offset”とが、下記
(2),(3)式によりそれぞれ算出される。ページ内
へのオフセットは、所定サイズのエレメント内の先頭ワ
ードを指し示す。全ての仮想アドレスは、物理アドレス
を直接的に扱うのではなく、下記(2),(3)式を用
いて物理アドレスに変換されなければならない。このよ
うな余分なアドレス計算が探索オーバヘッド(lookup o
verhead)を増すことになるが、それにもかかわらずコス
トは一定である。
&は論理積(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 〕が図示されている。
に、ページテーブル(Page table)11には、割り付けら
れた各ページを指し示すポインタが格納される。このペ
ージテーブル11は、ページの最大数として設定された
数(ここでは1024)分のページポインタを格納でき
るようになっている。各ページの各エレメント中の“L
ADDR”は論理アドレス(仮想アドレス)を意味して
いる。
プロファイルライブラリコール(第1実施形態により前
述した計装コード)について、下記表2により説明され
る。
verview) 本実施形態では、図4に示すように、プロファイル実行
(profiled run)は、3つの主たるフェイズ〔初期化処理
(ステップS11),ユーザプログラム実行(ステップ
S12),クリーンアップ処理(ステップS13)〕か
ら構成されており、時間に鋭敏なプロファイル処理を伴
うユーザコード処理(データ格納処理を伴うユーザプロ
グラム実行)と、時間を要するプロファイル実行時シス
テムの初期化およびクリーンアップとを区別している。
“start profile ”で始まり、まず、内部プロファイル
データ構造(ヒープ領域,スタック領域,テーブルおよ
びタイマ)が初期化される(ステップS11)。初期化
を完了してから、“start profile ”が、計時されるユ
ーザコード用のタイマを動作させるためのコード“star
t procedure ”を呼び出す。
2)では、オリジナルユーザコードが、プロファイル実
行時ライブラリサブルーチンに対する呼出(calls)によ
って実行される。このフェイズの間、プロファイルオー
バヘッドのコストは一定かつ最小に保持される。このフ
ェイズでは、ユーザプログラムの実行に伴い、スタック
に対するプッシュ/ポップと、内部ヒープ領域上へのレ
コード割付と、コーラー−コーリーテーブル内の情報探
索と、開始/終了時間情報の記録と、カウンタのインク
リメント動作とを行なって、プロファイルデータの格納
処理を行なっている。なお、このフェイズ中には内部プ
ロセッサ通信は行なわれない。また、このフェイズは、
“end profile ”によって“end procedure ”が呼び出
された時点で終了する。
3)の目的は、プロファイルデータの要約,データ
のファイルへの書込,動的割付メモリの割付解除の3
つである。各レコードについてのヒープスペースを最小
にすべく実行中に格納されたデータは最小かつノード近
傍に保持されるので、プロファイルにより収集されたデ
ータの付加的処理が必要とされる。複数プロセッサに渡
って分布する局所的なプロファイルデータは、グローバ
ルIDを割り付けられ、各レコードについて平均値,最
小値,最大値および標準偏差を算出される。そのデータ
は、プロファイルデータの閲覧申請によって読み取るこ
とのできる形式で出力される。
グラムは、コンパイル処理を施され、単一又は並列マシ
ンにより実行可能なプログラムに変換されてから(ステ
ップS21,S22)、プログラムが実行される(ステ
ップS23)。ここで、ステップS21では、第1実施
形態で前述した手順によりプロファイル計装が行なわ
れ、ステップS23では、図4にて前述した手順の処理
が行なわれる。
られた、符号化プロファイル情報(encoded profile inf
ormation)は、オプションでコンパイル処理(ステップ
S21)にプロファイルフィードバックされるほか、テ
キスト形式での表示されたり(ステップS25)、ソー
スコードとともにグラフィック表示されるようになって
いる(ステップS26)。
り、プロファイル実行中の実行時ライブラリの動作を具
体的に例1として説明する。コード断片(code fragmen
t)は、幾つかのコード領域A,B,Cからなるサブルー
チンである。計装コード(instrumentation)は、第1実
施形態で前述したごとく、手続きの始めと終わり、およ
び、計時領域Bの始めと終わりを記録するように、且
つ、手続きおよび領域についてのソースコード情報を記
録するように挿入されている。
使用される、仮想アドレスから物理アドレスへのアドレ
ス変換について説明する。 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)
に示すようになっているものとする。
ラーの情報は内部スタック領域の最上部(TOS:Top
Of Stack)に存在し、ヒープ領域は、何らかの状態にあ
り、コーラー−コーリーテーブルは、未だ入力を完了し
ていないのでサブルーチンfoo についての情報を未だ含
んでいない。なお、図7(a)〜(c)は、それぞれ、
サブルーチンfoo 入力後のスタック領域,ヒープ領域お
よびコーラー−コーリーテーブル10の内部状態を示し
ている。また、図7(c)に示すコーラー−コーリーテ
ーブル10内の網掛け領域は、有効可能コーラー−コー
リーペア(valid possible caller-callee pair)を明確
化している。
ブルーチンfoo を示す引き数として渡されたNULL値のre
cord1 変数は、初めて呼び出される。手続きが初めて入
力されると、登録シーケンスが1回実行される。サブル
ーチンfoo に対する後続のコールに伴って、そのペアに
ついてのレコードが既に割り付けられているか否かを見
るために、コーラー−コーリーテーブルがチェックされ
る。もし割り付けられていなければ、ヒープ領域から割
付が行なわれる。
すように、ローカル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)がスタック領域にプッシュされ、さ
らに、そのタイマが初期化される。
計装コード“start procedure ”呼出後のスタック領
域,ヒープ領域およびコーラー−コーリーテーブル10
の内部状態を示している。また、図8(c)に示すコー
ラー−コーリーテーブル10内の網掛け領域は、この時
点での有効可能コーラー−コーリーペア(valid possibl
e caller-callee pair)を明確化している。
コールは初めてその領域に入る時であるので、図9
(b)に示すように、領域レコードは、ヒープ領域から
割り付けられ、ローカルIDを割り当てられる。この場
合、ローカルIDを−1とする。また、図9(a)に示
すように、領域情報(Region info;region=-1)が、スタ
ック領域にプッシュされ、その領域タイマが初期化され
る。
計装コード“start region”呼出後のスタック領域およ
びヒープ領域の内部状態を示している。 〔ステップD−Call end region & end procedure 〕領
域Bを出た後、“end region”に対する呼出が、スタッ
ク領域の領域情報(Region info;region=-1)をポップす
ることで、スタック領域は図10(a)に示すような状
態になり、ポップされたレコードのタイマが停止され
る。
e ”に対する呼出が、スタック領域のコーラー領域情報
(CC info;caller=3,callee=4)をポップすることで、ス
タック領域は図10(b)に示すような状態になり、ポ
ップされたコーラー−コーリーレコードのタイマが停止
される。なお、図10(a),(b)は、それぞれ、
“end region”呼出後および“end procedure ”呼出後
のスタック領域の内部状態を示している。
元にマッピングする機能と、基礎となる動的配列におけ
る論理アドレス(仮想アドレス)から物理アドレスへの
変換計算とを説明する。特定のコーラー−コーリーペア
についてのコーラー−コーリーテーブルへのインデック
スを計算するためには、コーラーとコーリーのローカル
IDを前記(1)式に代入する。例えば前記例1で示し
たごとくcaller=3,callee=4 の場合、1次元インデック
スは、f(3,4)=18となる。
礎となる動的配列データ構造内での仮想アドレス18に
アクセスするためには、そのページ数とオフセットと
が、ページ当たりのエレメント数(エントリ数)とエレ
メントサイズ(エントリサイズ)とに基づいて算出され
る。この例の目的のために、図6に示した例のごとく、
1ページは16エントリを含み、各エントリは2ワード
長であり、既に2ページ分の領域が割り付けられている
ものとする。もしページサイズが16エントリであるな
らば、ページ数を計算するためのシフトカウントはlog2
(16)であり、オフセットマスクは∧(16-1)となる。従
って、前記(2),(3)式によって算出されるよう
に、また図6に示すように、エントリ18は、ページ2
上でオフセット2の位置である。
イル処理実行時に頻繁に行なわれるオペレーションにつ
いてのオーバヘッドコストを小さく且つ一定化すること
ができるので、実際的な見地からプロファイル処理を伴
うプログラム実行とプロファイル処理を伴わないプログ
ラム実行とをほぼ同様に見做せることができるほか、コ
ストの一定化に伴いプロファイル処理によるオーバヘッ
ドを容易に算出でき、プロファイル処理を行なわない場
合の実行時間を容易に得ることができる。
処理を行なうプログラム実行処理(図4のステップS1
2)の外側に初期化コストおよびクリーンアップコスト
を押し出すことにより、頻繁に行なわれるオペレーショ
ン(スタック領域に対するプッシュ/ポップ,ヒープ領
域に対する割付,テーブル10に対する探索)のコスト
を小さく且つ略一定にすることができる。
するテーブル10を、動的配列データ構造上にそなえ、
1次元テーブルにマップされた2次元テーブルとして表
現することで、探索コストが一定でオーバヘッドを増大
させることがなく、メモリ領域を無駄に確保するのを抑
制することもできる。 (c)その他 なお、上述した実施形態では、オリジナルソースコード
がHPFコードで、変換後のターゲット言語コードがFo
rtran90コードである場合について説明したが、本発
明は、これに限定されるものではなく、他の言語であっ
ても同様に適用され、上述と同様の作用効果を得ること
ができる。
イル計装方法によれば、コンパイル処理時に、オリジナ
ルソースコードとコンパイル処理による変換コードとの
間のマッピングを容易に行ないながら、並列処理システ
ムのプロファイル用の計装コードを自動挿入することが
できる。従って、前記マッピングに基づいてオリジナル
ソースコードに対応した形のプロファイル結果を容易に
得ることが可能で、ユーザは、そのプロファイル結果を
有効に利用してプログラム作成に反映させることができ
る効果がある。
装方法を説明するためのフローチャート、且つ、本方法
を適用されるプロファイル計装システムのコンパイラ内
のプロファイルコンポーネントをまとめたものを等価的
に示すブロック図である。
る命令挿入時の制約について説明するための図である。
て説明するための図である。
ータ収集方法を説明するためのフローチャートである。
ブル用インデックスの2次元から1次元へのマッピング
を説明するための図である。
明するための図である。
るデータ格納処理の具体例を説明するための図である。
るデータ格納処理の具体例を説明するための図である。
るデータ格納処理の具体例を説明するための図である。
けるデータ格納処理の具体例を説明するための図であ
る。
のフローチャートである。
処理の手順を説明するためのフローチャートである。
ール) S4−1 要約フェイズ(要約処理モジュール) S4−2 命令挿入フェイズ(計装処理モジュール) S5 コンバータ(出力変換処理モジュール) 10 コーラー−コーリーテーブル 11 ページテーブル
Claims (3)
- 【請求項1】 オリジナルソースコードにより記載され
た並列計算機用プログラムの挙動を把握すべくプログラ
ム実行時にプロファイルデータの計測を指示する計装コ
ードを、コンパイル処理により最適化変換された前記プ
ログラムの変換コード中に挿入するプロファイル計装方
法であって、 前記コンパイル処理による最適化変換中に、変換元の命
令文を特定する情報を、変換履歴情報として各命令文毎
に保持する履歴保持ステップと、 前記履歴保持ステップにより保持された変換履歴情報を
基に前記変換コードをオリジナルソースコードにマッピ
ングするマッピングステップと、 前記マッピングステップによるマッピング情報を参照し
て、オリジナルソースコードの計装コードの挿入を必要
とされる箇所に対応する前記変換コード中の所定箇所に
計装コードの挿入を行なう計装ステップとを有する こと
を特徴とする、プロファイル計装方法。 - 【請求項2】 前記コンパイル処理による最適化変換前
に、前記プログラムのオリジナルソースコード情報を収
集するプロファイル初期化処理を行なうことを特徴とす
る、請求項1記載のプロファイル計装方法。 - 【請求項3】 前記オリジナルソースコード情報とし
て、前記オリジナルソースコードで記載された各命令文
についてのファイル情報,配置情報,文字列記述,種
類,親となる命令文の情報が含まれていることを特徴と
する、請求項2記載のプロファイル計装方法。
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)
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)
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)
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 |
-
1995
- 1995-08-24 JP JP21635595A patent/JP3290567B2/ja not_active Expired - Fee Related
-
1996
- 1996-04-30 US US08/641,353 patent/US5950003A/en not_active Expired - Lifetime
Cited By (1)
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 |