JPH09330233A - 最適目的コード生成方法 - Google Patents
最適目的コード生成方法Info
- Publication number
- JPH09330233A JPH09330233A JP9055902A JP5590297A JPH09330233A JP H09330233 A JPH09330233 A JP H09330233A JP 9055902 A JP9055902 A JP 9055902A JP 5590297 A JP5590297 A JP 5590297A JP H09330233 A JPH09330233 A JP H09330233A
- Authority
- JP
- Japan
- Prior art keywords
- code
- application
- block
- profile information
- profile
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
- G06F11/3612—Analysis of software for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
(57)【要約】
【課題】プロファイルに基づいて目的コードを最適化す
る場合のコンパイル回数を削減し、コンパイルの効率化
を図る。 【解決手段】アプリケーションのソース・コードをコン
パイルして、第1の目的コードを生成する。アプリケー
ション最適化のために必要となるプロファイル情報を生
成する機能を持つプロファイル作成コードを含むよう
に、本発明の動的変換ルーチンによって第1の目的コー
ドを第2の目的コードに動的に変換する。次に、第2の
目的コードを実行して、上記プロファイル作成コードに
基づいて、プロファイル情報を生成する。最後に、この
プロファイル情報を使用してアプリケーションのソース
・コードを再コンパイルし、最適化された目的コードを
生成する。
る場合のコンパイル回数を削減し、コンパイルの効率化
を図る。 【解決手段】アプリケーションのソース・コードをコン
パイルして、第1の目的コードを生成する。アプリケー
ション最適化のために必要となるプロファイル情報を生
成する機能を持つプロファイル作成コードを含むよう
に、本発明の動的変換ルーチンによって第1の目的コー
ドを第2の目的コードに動的に変換する。次に、第2の
目的コードを実行して、上記プロファイル作成コードに
基づいて、プロファイル情報を生成する。最後に、この
プロファイル情報を使用してアプリケーションのソース
・コードを再コンパイルし、最適化された目的コードを
生成する。
Description
【0001】
【発明の属する技術分野】本発明は、コンパイラ最適化
に関するもので、特に最適化コンパイル・システムにお
いて実行時情報を収集し活用するための動的変換の使用
に関するものである。
に関するもので、特に最適化コンパイル・システムにお
いて実行時情報を収集し活用するための動的変換の使用
に関するものである。
【0002】
【従来の技術】プログラムは、一般に高水準プログラム
言語で書かれる。しばしばソース・コードと呼ばれるこ
の高水準言語は、コンパイラ・プログラムによってアセ
ンブリ言語に変換される。目的コードと呼ばれるバイナ
リ形式のアセンブリ言語は、コンピュータによって実際
に実行されるコード形式である。目的コードは、先ず、
リンカによって相互にリンクされる目的コード・モジュ
ールの形式で生成される。本明細書において、用語「コ
ンパイル」は、目的コード・モジュールを生成するプロ
セスおよび目的コード・モジュールを相互にリンクする
プロセスの両者を含む。
言語で書かれる。しばしばソース・コードと呼ばれるこ
の高水準言語は、コンパイラ・プログラムによってアセ
ンブリ言語に変換される。目的コードと呼ばれるバイナ
リ形式のアセンブリ言語は、コンピュータによって実際
に実行されるコード形式である。目的コードは、先ず、
リンカによって相互にリンクされる目的コード・モジュ
ールの形式で生成される。本明細書において、用語「コ
ンパイル」は、目的コード・モジュールを生成するプロ
セスおよび目的コード・モジュールを相互にリンクする
プロセスの両者を含む。
【0003】目標コンピュータによって実行される目的
コードの処理性能を向上させるため、コンパイルされた
コードはしばしば最適化される。目的コードはいくつか
の異なる形態で最適化される。
コードの処理性能を向上させるため、コンパイルされた
コードはしばしば最適化される。目的コードはいくつか
の異なる形態で最適化される。
【0004】最適化の1つのタイプは、プロファイルに
基づく最適化(profile-based optimizationの頭文字を
とってPBOと呼ばれる)である。PBOにおいては、
コンパイラは、典型的な入力データセットを用い、アプ
リケーションの実行を通して得られるプロファイル・デ
ータに基づいてアプリケーションを最適化する。例え
ば、特定の複数のプロシージャが頻繁に互いを呼び出す
とすれば、リンカは、目的コード・ファイルの中でそれ
らプロシージャを互いに近い位置に置き、それにより、
アプリケーション実行中の命令キャッシュ・ミス、変換
ルックアサイド・バッファ(TLB)ミス、および記憶ペ
ージ・フォールトを減少させることができる。同様の最
適化は、プロシージャの基本ブロックのレベルでも行う
ことができる。基本ブロックまたは分節は、開始点およ
び終了点以外には分岐が存在しないようなアセンブリ・
コードの1つの連続的節である。プロファイル・データ
は、また、コード・スケジューリングおよびレジスタ割
り付けのような他の一般的タスクのためにもコンパイラ
によって使用される。
基づく最適化(profile-based optimizationの頭文字を
とってPBOと呼ばれる)である。PBOにおいては、
コンパイラは、典型的な入力データセットを用い、アプ
リケーションの実行を通して得られるプロファイル・デ
ータに基づいてアプリケーションを最適化する。例え
ば、特定の複数のプロシージャが頻繁に互いを呼び出す
とすれば、リンカは、目的コード・ファイルの中でそれ
らプロシージャを互いに近い位置に置き、それにより、
アプリケーション実行中の命令キャッシュ・ミス、変換
ルックアサイド・バッファ(TLB)ミス、および記憶ペ
ージ・フォールトを減少させることができる。同様の最
適化は、プロシージャの基本ブロックのレベルでも行う
ことができる。基本ブロックまたは分節は、開始点およ
び終了点以外には分岐が存在しないようなアセンブリ・
コードの1つの連続的節である。プロファイル・データ
は、また、コード・スケジューリングおよびレジスタ割
り付けのような他の一般的タスクのためにもコンパイラ
によって使用される。
【0005】PBOを実行するためには、アプリケーシ
ョンのソース・コードは、プロファイル作成用の特別コ
ードを挿入することによって目的コードに仕組みを組み
込む特別なコンパイラ・オプションを使用してコンパイ
ルされる。アプリケーションが実行されると、その特別
プロファイル作成コードによってプロファイル・データ
が作成される。次にプロファイル・データが収集され
る。アプリケーションのソース・コードが再コンパイル
される時、プロファイル・データを使用して、アプリケ
ーション・ソース・コードの新しいコンパイルが一層最
適化される。PBOの詳細は、例えば、ヒューレット・
パッカード社発行の"Programming on HP-UX, HP 9000 S
eries 700/800 Computers"(HP Part No. B2355-90652,
January 1995, pp. 8-1 through 8-17)に記載されてい
る。
ョンのソース・コードは、プロファイル作成用の特別コ
ードを挿入することによって目的コードに仕組みを組み
込む特別なコンパイラ・オプションを使用してコンパイ
ルされる。アプリケーションが実行されると、その特別
プロファイル作成コードによってプロファイル・データ
が作成される。次にプロファイル・データが収集され
る。アプリケーションのソース・コードが再コンパイル
される時、プロファイル・データを使用して、アプリケ
ーション・ソース・コードの新しいコンパイルが一層最
適化される。PBOの詳細は、例えば、ヒューレット・
パッカード社発行の"Programming on HP-UX, HP 9000 S
eries 700/800 Computers"(HP Part No. B2355-90652,
January 1995, pp. 8-1 through 8-17)に記載されてい
る。
【0006】
【発明が解決しようとする課題】PBOの使用にかかわ
る1つの問題は、PBOのための別のコンパイルの実行
が必要とされる点である。従って、ユーザがPBOを利
用することを望む場合、典型的にはアプリケーション・
ソース・コードは3回コンパイルされることが必要であ
る。第1回は、アプリケーションをテストし妥当性を検
査するために使用されるアプリケーションのコピーを作
成するためのものである。コードの第2回のコンパイル
では、プロファイル・データを作成するためプロファイ
ル作成用特別コードが追加される。次に、コンパイルさ
れたアプリケーションを最適化するため、生成されたプ
ロファイル・データを使用してアプリケーションを構築
する第3のコンパイルが必要である。このように独立し
たコンパイルを行うことなくPBOを実施できる方法が
求められている。
る1つの問題は、PBOのための別のコンパイルの実行
が必要とされる点である。従って、ユーザがPBOを利
用することを望む場合、典型的にはアプリケーション・
ソース・コードは3回コンパイルされることが必要であ
る。第1回は、アプリケーションをテストし妥当性を検
査するために使用されるアプリケーションのコピーを作
成するためのものである。コードの第2回のコンパイル
では、プロファイル・データを作成するためプロファイ
ル作成用特別コードが追加される。次に、コンパイルさ
れたアプリケーションを最適化するため、生成されたプ
ロファイル・データを使用してアプリケーションを構築
する第3のコンパイルが必要である。このように独立し
たコンパイルを行うことなくPBOを実施できる方法が
求められている。
【0007】
【課題を解決するための手段】本発明に従う動的変換を
使用して、アプリケーションの目的コードを最適化する
ために使用されるプロファイル情報が生成される。アプ
リケーションに関する最適化された目的コードを生成す
るため、アプリケーションのソース・コードがコンパイ
ルされ、アプリケーションに関する第1の目的コードが
生成される。第1の目的コードは、アプリケーションを
テストして妥当性を検査するために使用することもでき
る。第1の目的コードは、また、アプリケーションに関
するプロファイル情報の生成に使用することもできる。
これは、第1の目的コードを第2の目的コードに動的に
変換することによって実施される。この変換の際に、実
行時にプロファイル情報を生成するプロファイル作成コ
ードが第2の目的コードに、含められる。生成された第
2の目的コードは次にプロファイル情報を生成するため
実行される。最後に、アプリケーションのソース・コー
ドは、最適化された目的コードを作成するため、生成し
たプロファイル情報を活用して再コンパイルされる。
使用して、アプリケーションの目的コードを最適化する
ために使用されるプロファイル情報が生成される。アプ
リケーションに関する最適化された目的コードを生成す
るため、アプリケーションのソース・コードがコンパイ
ルされ、アプリケーションに関する第1の目的コードが
生成される。第1の目的コードは、アプリケーションを
テストして妥当性を検査するために使用することもでき
る。第1の目的コードは、また、アプリケーションに関
するプロファイル情報の生成に使用することもできる。
これは、第1の目的コードを第2の目的コードに動的に
変換することによって実施される。この変換の際に、実
行時にプロファイル情報を生成するプロファイル作成コ
ードが第2の目的コードに、含められる。生成された第
2の目的コードは次にプロファイル情報を生成するため
実行される。最後に、アプリケーションのソース・コー
ドは、最適化された目的コードを作成するため、生成し
たプロファイル情報を活用して再コンパイルされる。
【0008】本発明は、具体的には、アプリケーション
に関する最適化された目的コードを生成するため、アプ
リケーションのソース・コードをコンパイルして該アプ
リケーションに関する第1の目的コードを生成するステ
ップ、実行の際にプロファイル情報を生成する機能を持
つプロファイル作成コードを含む第2の目的コードに上
記第1の目的コードを変換し、該第2の目的コードを実
行してプロファイル情報を生成することを含む上記第1
の目的コードに関するプロファイル情報を生成するステ
ップ、および上記プロファイル情報を使用して上記ソー
ス・コードを再コンパイルすることによって、最適化さ
れた目的コードを生成するステップを含む最適化された
目的コード生成方法を提供する。
に関する最適化された目的コードを生成するため、アプ
リケーションのソース・コードをコンパイルして該アプ
リケーションに関する第1の目的コードを生成するステ
ップ、実行の際にプロファイル情報を生成する機能を持
つプロファイル作成コードを含む第2の目的コードに上
記第1の目的コードを変換し、該第2の目的コードを実
行してプロファイル情報を生成することを含む上記第1
の目的コードに関するプロファイル情報を生成するステ
ップ、および上記プロファイル情報を使用して上記ソー
ス・コードを再コンパイルすることによって、最適化さ
れた目的コードを生成するステップを含む最適化された
目的コード生成方法を提供する。
【0009】アプリケーションの目的コードを更に最適
化するため最適化された目的コードに関する追加のプロ
ファイル情報を生成するため、このプロセスを繰り返す
こともできる。
化するため最適化された目的コードに関する追加のプロ
ファイル情報を生成するため、このプロセスを繰り返す
こともできる。
【0010】更に、本発明の別の局面では、上記第1の
目的コードに注釈が配置される。コンパイラの変換ルー
チンが第1の目的コード内の注釈を利用して、第2の目
的コード内に置かれるべき特定のプロファイル作成コー
ドに従って生成されるプロファイル情報を決定する。注
釈は、コンパイラによって第1の目的コードに置かれ
る。代替的にあるいは追加として、目的コード内の注釈
および目的コードの実行の結果生成されるプロファイル
情報に対するアクセス機能をユーザに与えることができ
る。ユーザは最適化プロセスを指示するため目的コード
内に注釈を追加または変更することができる。このプロ
セスは、それ以上の最適化が見いだされなくなるまで、
または最適化されたアプリケーションの処理性能がユー
ザにとって満足できるものとなるまで、反復プロセスと
して実施することができる。
目的コードに注釈が配置される。コンパイラの変換ルー
チンが第1の目的コード内の注釈を利用して、第2の目
的コード内に置かれるべき特定のプロファイル作成コー
ドに従って生成されるプロファイル情報を決定する。注
釈は、コンパイラによって第1の目的コードに置かれ
る。代替的にあるいは追加として、目的コード内の注釈
および目的コードの実行の結果生成されるプロファイル
情報に対するアクセス機能をユーザに与えることができ
る。ユーザは最適化プロセスを指示するため目的コード
内に注釈を追加または変更することができる。このプロ
セスは、それ以上の最適化が見いだされなくなるまで、
または最適化されたアプリケーションの処理性能がユー
ザにとって満足できるものとなるまで、反復プロセスと
して実施することができる。
【0011】
【発明の実施の形態】図1は、動的変換ルーチン15を
使用してアプリケーション10を実行するコンピュータ
・システム7のブロック図である。コンパイラが実行時
の前に実行可能コードを生成するのに対し、動的変換ル
ーチン15は実行時に変換されたコード8を生成する点
がコンパイラと相違する。アプリケーション10のコー
ド・ブロックが実行時に変換される。変換されたコード
・ブロックは、図1において変換されたコード8として
示されている。変換されたコード8は、何度も実行され
るコード・ブロックの各々が実行時に一度だけ変換され
るだけでよいように、キャッシュ・メモリのようなメモ
リに記憶される。このアプローチは、実行前にコードが
変換されることを必要としない柔軟性を実現するだけで
なく、実行毎にコード・ブロックを変換しなければなら
ないとした場合に生じるオーバーヘッドをも減少させ
る。
使用してアプリケーション10を実行するコンピュータ
・システム7のブロック図である。コンパイラが実行時
の前に実行可能コードを生成するのに対し、動的変換ル
ーチン15は実行時に変換されたコード8を生成する点
がコンパイラと相違する。アプリケーション10のコー
ド・ブロックが実行時に変換される。変換されたコード
・ブロックは、図1において変換されたコード8として
示されている。変換されたコード8は、何度も実行され
るコード・ブロックの各々が実行時に一度だけ変換され
るだけでよいように、キャッシュ・メモリのようなメモ
リに記憶される。このアプローチは、実行前にコードが
変換されることを必要としない柔軟性を実現するだけで
なく、実行毎にコード・ブロックを変換しなければなら
ないとした場合に生じるオーバーヘッドをも減少させ
る。
【0012】本発明の好ましい実施形態において、変換
されたコード8は変換コード・キャッシュ20に記憶さ
れる。変換コード・キャッシュ20が一杯の時、新しく
変換されるコード・ブロックのために空間を作成するた
め以前に変換されたコード・ブロックの一部が破棄され
る必要があるかもしれない。これは、破棄されたコード
・ブロックが再使用されるならば再変換されるべきこと
を必要とするが、メモリ使用における潜在的節約を可能
にする。以前に変換されたコード・ブロックを破棄する
代わりに、それらをシステム・メモリに記憶することも
できる。
されたコード8は変換コード・キャッシュ20に記憶さ
れる。変換コード・キャッシュ20が一杯の時、新しく
変換されるコード・ブロックのために空間を作成するた
め以前に変換されたコード・ブロックの一部が破棄され
る必要があるかもしれない。これは、破棄されたコード
・ブロックが再使用されるならば再変換されるべきこと
を必要とするが、メモリ使用における潜在的節約を可能
にする。以前に変換されたコード・ブロックを破棄する
代わりに、それらをシステム・メモリに記憶することも
できる。
【0013】図2は、本発明の好ましい実施形態に従っ
てプロファイル・データを生成する動的変換ルーチンを
利用するシステムの流れ図である。ソース・コード31
は、ステップ32において、アプリケーション33を作
成するためコンパイルされる。コンパイルされたアプリ
ケーション33は、ステップ34で、テストされ妥当性
を検査されることもある。アプリケーション33は、テ
ストおよび妥当性検査の間全速力で実行できる。コンパ
イル時にアプリケーション33にプロファイル作成コー
ドが加えられなかったので、アプリケーション33の処
理性能は、アプリケーション33内へのプロファイル作
成用コードの内包によって妨げらることがない。
てプロファイル・データを生成する動的変換ルーチンを
利用するシステムの流れ図である。ソース・コード31
は、ステップ32において、アプリケーション33を作
成するためコンパイルされる。コンパイルされたアプリ
ケーション33は、ステップ34で、テストされ妥当性
を検査されることもある。アプリケーション33は、テ
ストおよび妥当性検査の間全速力で実行できる。コンパ
イル時にアプリケーション33にプロファイル作成コー
ドが加えられなかったので、アプリケーション33の処
理性能は、アプリケーション33内へのプロファイル作
成用コードの内包によって妨げらることがない。
【0014】ステップ35において、プロファイル情報
を収集するためアプリケーション33は動的変換ルーチ
ンの下で実行される。変換ルーチンは目的コードから目
的コードへの変換を実行する。すなわち、アプリケーシ
ョン33の目的コードは、変換ルーチンによって変換さ
れた目的コードに変換される。次に変換された目的コー
ドが実行される。ステップ35で生成される変換された
目的コードとステップ32でアプリケーション33を作
成するためコンパイルされた目的コードの間の相違は、
プロファイル作成コードがステップ35で作成された変
換目的コードに加えられる点である。換言すれば、ステ
ップ35で生成された変換目的コードが、実行時にプロ
ファイル情報36を生成するために使用されるプロファ
イル作成コードを付加的に含む点を除いて、ステップ3
5で生成された変換目的コードはステップ32でアプリ
ケーション33を作成するためコンパイルされた目的コ
ードと同等または本質的に同じである。
を収集するためアプリケーション33は動的変換ルーチ
ンの下で実行される。変換ルーチンは目的コードから目
的コードへの変換を実行する。すなわち、アプリケーシ
ョン33の目的コードは、変換ルーチンによって変換さ
れた目的コードに変換される。次に変換された目的コー
ドが実行される。ステップ35で生成される変換された
目的コードとステップ32でアプリケーション33を作
成するためコンパイルされた目的コードの間の相違は、
プロファイル作成コードがステップ35で作成された変
換目的コードに加えられる点である。換言すれば、ステ
ップ35で生成された変換目的コードが、実行時にプロ
ファイル情報36を生成するために使用されるプロファ
イル作成コードを付加的に含む点を除いて、ステップ3
5で生成された変換目的コードはステップ32でアプリ
ケーション33を作成するためコンパイルされた目的コ
ードと同等または本質的に同じである。
【0015】ステップ37において、プロファイル情報
36を使用して第2のコンパイルの間最適アプリケーシ
ョン38が作成される。要するに、プロファイルに基づ
く最適化(PBO)処理の実行のためアプリケーション・
ソース・コードは2回だけコンパイルされる。第1回
は、アプリケーションをテストし妥当性を検査するため
に使用されるアプリケーションのソース・コード・コピ
ーを作成するためである。アプリケーションをテストし
妥当性を検査するために使用されたものと同じアプリケ
ーション・コピーがプロファイル・データを生成するた
め変換ルーチンの下で実行される。次に、コンパイルさ
れたアプリケーションを更に最適化するためプロファイ
ル・データを使用してアプリケーションを構築する第2
のコンパイルが実行される。
36を使用して第2のコンパイルの間最適アプリケーシ
ョン38が作成される。要するに、プロファイルに基づ
く最適化(PBO)処理の実行のためアプリケーション・
ソース・コードは2回だけコンパイルされる。第1回
は、アプリケーションをテストし妥当性を検査するため
に使用されるアプリケーションのソース・コード・コピ
ーを作成するためである。アプリケーションをテストし
妥当性を検査するために使用されたものと同じアプリケ
ーション・コピーがプロファイル・データを生成するた
め変換ルーチンの下で実行される。次に、コンパイルさ
れたアプリケーションを更に最適化するためプロファイ
ル・データを使用してアプリケーションを構築する第2
のコンパイルが実行される。
【0016】図3は、アプリケーション10のコードを
動的に変換して実行する動的変換および実行プロセス3
9の使用形態を示している。変換は、プロファイル作成
コードを備えた変換目的コードを生成する。アプリケー
ション10は、命令11およびデータ12を含むように
示されている。アプリケーション10内の命令11が実
行されるにつれて、ステップ16において、プログラム
・カウンタがアプリケーション10内でコード13の新
しいブロックをポイントする度毎に、その新たなコード
・ブロックが動的変換および実行プロセス39によって
既に変換されたものであるか否かが判断される。変換済
みでなければ、ステップ18において、そのコード・ブ
ロックはホスト・コンピュータ・システムに対して適切
な目的コードに変換される。加えて、プロファイル・デ
ータを生成するプロファイル作成コードが追加される。
上述のように、変換されるべきコード・ブロックは既に
ホスト・コンピュータ・システム固有のものとなってい
るので、変換は、プロファイル作成コードを目的コード
に組み入れるためだけに行われる目的コードから目的コ
ードへの変換にすぎない。ステップ17において、コー
ド・ブロック13に関する変換されたコードが実行され
る。
動的に変換して実行する動的変換および実行プロセス3
9の使用形態を示している。変換は、プロファイル作成
コードを備えた変換目的コードを生成する。アプリケー
ション10は、命令11およびデータ12を含むように
示されている。アプリケーション10内の命令11が実
行されるにつれて、ステップ16において、プログラム
・カウンタがアプリケーション10内でコード13の新
しいブロックをポイントする度毎に、その新たなコード
・ブロックが動的変換および実行プロセス39によって
既に変換されたものであるか否かが判断される。変換済
みでなければ、ステップ18において、そのコード・ブ
ロックはホスト・コンピュータ・システムに対して適切
な目的コードに変換される。加えて、プロファイル・デ
ータを生成するプロファイル作成コードが追加される。
上述のように、変換されるべきコード・ブロックは既に
ホスト・コンピュータ・システム固有のものとなってい
るので、変換は、プロファイル作成コードを目的コード
に組み入れるためだけに行われる目的コードから目的コ
ードへの変換にすぎない。ステップ17において、コー
ド・ブロック13に関する変換されたコードが実行され
る。
【0017】図4は、動的変換および実行プロセス39
によってアプリケーションを実行するプロセスを更に示
している。ステップ21でアプリケーションの実行は始
まる。ステップ22において実行されるべき次のアプリ
ケーション・アドレスが調べられる。これは、例えばブ
ロック情報マップへのアドレス25を使用して行われ
る。ブロック情報マップへのアドレス25はアプリケー
ションにおけるコード・ブロックのエントリを含み、更
に、アプリケーションによって呼び出される共有ライブ
ラリにおけるコード・ブロックのエントリを含む場合も
ある。本発明の好ましい実施形態においては、実行のた
め実際に必要とされるコード・ブロックに関するアドレ
スだけがブロック情報マップ25内に含まれる。これら
のアドレスは、コード・ブロックが必要とされる都度、
実行時に追加される。
によってアプリケーションを実行するプロセスを更に示
している。ステップ21でアプリケーションの実行は始
まる。ステップ22において実行されるべき次のアプリ
ケーション・アドレスが調べられる。これは、例えばブ
ロック情報マップへのアドレス25を使用して行われ
る。ブロック情報マップへのアドレス25はアプリケー
ションにおけるコード・ブロックのエントリを含み、更
に、アプリケーションによって呼び出される共有ライブ
ラリにおけるコード・ブロックのエントリを含む場合も
ある。本発明の好ましい実施形態においては、実行のた
め実際に必要とされるコード・ブロックに関するアドレ
スだけがブロック情報マップ25内に含まれる。これら
のアドレスは、コード・ブロックが必要とされる都度、
実行時に追加される。
【0018】コード・ブロックは、1つまたは複数の命
令からなるグループである。コード・ブロックは、
(「基本ブロック」と同様に)分岐によって終了する単一
または直線的命令シーケンスか、プロシージャか、ある
いはその他の命令群である。本発明の好ましい実施形態
では、コード・ブロックは、動的変換ルーチン15によ
って活用される変換の単位である。この変換の単位は、
例えば、プロシージャ、基本ブロック、ページ、キャッ
シュ線、単一命令、またはその他の命令の組み合わせで
あることができる。
令からなるグループである。コード・ブロックは、
(「基本ブロック」と同様に)分岐によって終了する単一
または直線的命令シーケンスか、プロシージャか、ある
いはその他の命令群である。本発明の好ましい実施形態
では、コード・ブロックは、動的変換ルーチン15によ
って活用される変換の単位である。この変換の単位は、
例えば、プロシージャ、基本ブロック、ページ、キャッ
シュ線、単一命令、またはその他の命令の組み合わせで
あることができる。
【0019】ブロック情報マップへのアドレス25の各
エントリは、アプリケーション内のコード・ブロックま
たは共有ライブラリ内のコード・ブロックの開始アドレ
スを識別する少くとも1つの第1のプログラム・アドレ
スを含む。加えて、各エントリは、アプリケーションま
たは共有ライブラリからのコード・ブロックに関するブ
ロック情報を含むブロック情報テーブル26における位
置をポイントするブロック情報ポインタを含む。ブロッ
ク情報テーブル26内のブロック情報は、そのコード・
ブロックに関する変換されたブロック・コードが存在す
る場合変換されたコードに対するポインタを含む。
エントリは、アプリケーション内のコード・ブロックま
たは共有ライブラリ内のコード・ブロックの開始アドレ
スを識別する少くとも1つの第1のプログラム・アドレ
スを含む。加えて、各エントリは、アプリケーションま
たは共有ライブラリからのコード・ブロックに関するブ
ロック情報を含むブロック情報テーブル26における位
置をポイントするブロック情報ポインタを含む。ブロッ
ク情報テーブル26内のブロック情報は、そのコード・
ブロックに関する変換されたブロック・コードが存在す
る場合変換されたコードに対するポインタを含む。
【0020】ステップ23において、実行されるべき次
のアプリケーション・アドレスを調べた後、アプリケー
ションまたは共有ライブラリからのコード・ブロックに
関する変換されたコードが存在するか否かの判断が行わ
れる。これは、例えば、ブロック情報テーブル26から
取り出された情報を使用して行われる。そのコード・ブ
ロックに関して変換が存在しなければ、ステップ24に
おいてコード・ブロックが変換される。変換されたコー
ドが次に実行される。
のアプリケーション・アドレスを調べた後、アプリケー
ションまたは共有ライブラリからのコード・ブロックに
関する変換されたコードが存在するか否かの判断が行わ
れる。これは、例えば、ブロック情報テーブル26から
取り出された情報を使用して行われる。そのコード・ブ
ロックに関して変換が存在しなければ、ステップ24に
おいてコード・ブロックが変換される。変換されたコー
ドが次に実行される。
【0021】変換コード・キャッシュ20を使用して、
効率的な実行のため変換されたコード・ブロックが保持
される。変換コード・キャッシュ20によって保持され
るコード・ブロックの数は、例えば使用可能メモリに応
じて変わる。図4において、変換コード・キャッシュ2
0内のコード・ブロックは、コード・ブロック27、コ
ード・ブロック28およびコード・ブロック29によっ
て表されている。これらのコード・ブロックのいずれも
共有ライブラリからの変換されたプロシージャを表す場
合もある。
効率的な実行のため変換されたコード・ブロックが保持
される。変換コード・キャッシュ20によって保持され
るコード・ブロックの数は、例えば使用可能メモリに応
じて変わる。図4において、変換コード・キャッシュ2
0内のコード・ブロックは、コード・ブロック27、コ
ード・ブロック28およびコード・ブロック29によっ
て表されている。これらのコード・ブロックのいずれも
共有ライブラリからの変換されたプロシージャを表す場
合もある。
【0022】変換コード・キャッシュ20内のコード・
ブロックは、変換コード・キャッシュ20内の他のコー
ド・ブロックに分岐することもある。例えば、コード・
ブロック27内の分岐命令がコード・ブロック28内の
位置をポイントする。同様に、コード・ブロック28の
コードを実行した後、プログラムの流れ制御がコード・
ブロック29へ続く。図4で示されるように、コード・
ブロック27のコードの実行後、プログラムの流れ制御
は、変換コード・キャッシュ20の外側のコード・ブロ
ックに続くこともある。同様に、コード・ブロック29
のコードの実行後、動的分岐が、変換コード・キャッシ
ュ20の外側のコード・ブロック内のアドレスへ分岐す
る。
ブロックは、変換コード・キャッシュ20内の他のコー
ド・ブロックに分岐することもある。例えば、コード・
ブロック27内の分岐命令がコード・ブロック28内の
位置をポイントする。同様に、コード・ブロック28の
コードを実行した後、プログラムの流れ制御がコード・
ブロック29へ続く。図4で示されるように、コード・
ブロック27のコードの実行後、プログラムの流れ制御
は、変換コード・キャッシュ20の外側のコード・ブロ
ックに続くこともある。同様に、コード・ブロック29
のコードの実行後、動的分岐が、変換コード・キャッシ
ュ20の外側のコード・ブロック内のアドレスへ分岐す
る。
【0023】変換コード・キャッシュ20の範囲内のコ
ード・ブロックの命令の実行が一旦開始すると、変換コ
ード・キャッシュ20の範囲内のそのコード・ブロック
および他のコード・ブロックの命令の実行は、実行すべ
き命令が変換コード・キャッシュ20の範囲外のものと
なるまで、継続する。キャッシュ・ミスが発生すると、
プログラム制御は、実行されるべき次のアプリケーショ
ン・アドレスが調べられるステップ22に戻る。(変換
済みでなければ)該当するコード・ブロックが変換さ
れ、変換コード・キャッシュ20に置かれ、アプリケー
ションの実行は続く。
ード・ブロックの命令の実行が一旦開始すると、変換コ
ード・キャッシュ20の範囲内のそのコード・ブロック
および他のコード・ブロックの命令の実行は、実行すべ
き命令が変換コード・キャッシュ20の範囲外のものと
なるまで、継続する。キャッシュ・ミスが発生すると、
プログラム制御は、実行されるべき次のアプリケーショ
ン・アドレスが調べられるステップ22に戻る。(変換
済みでなければ)該当するコード・ブロックが変換さ
れ、変換コード・キャッシュ20に置かれ、アプリケー
ションの実行は続く。
【0024】図5は、本発明の1つの代替実施形態に従
ってプロファイル・データを生成する動的変換を活用す
るシステムの動作の流れを示している。ステップ42に
おいて、ソース・コード41が最適化されたアプリケー
ション43を作成するようにコンパイルされる。コンパ
イルの間、最適化されたアプリケーションの実行時動作
を照会する機能を持つコード注釈が追加される。プロフ
ァイル情報が使用可能な場合、それはアプリケーション
を最適化するために使用される。プロファイル情報は、
また、一層詳細な実行時動作を照会する新しいコード注
釈の追加を促すために使用される。
ってプロファイル・データを生成する動的変換を活用す
るシステムの動作の流れを示している。ステップ42に
おいて、ソース・コード41が最適化されたアプリケー
ション43を作成するようにコンパイルされる。コンパ
イルの間、最適化されたアプリケーションの実行時動作
を照会する機能を持つコード注釈が追加される。プロフ
ァイル情報が使用可能な場合、それはアプリケーション
を最適化するために使用される。プロファイル情報は、
また、一層詳細な実行時動作を照会する新しいコード注
釈の追加を促すために使用される。
【0025】ステップ45において、変換ルーチンの下
でアプリケーション43が実行され、プロファイル情報
が収集される。変換ルーチンは、目的コードから目的コ
ードへの変換を実行する。すなわち、アプリケーション
43の目的コードは、変換ルーチンによって、変換目的
コードに変換される。次に変換目的コードが実行され
る。ステップ44で生成された変換目的コードは、ステ
ップ42でアプリケーション43を作成するためコンパ
イルされた目的コードと同じ機械命令セットを使用す
る。テップ44で生成された変換目的コードとステップ
42でアプリケーション43を作成するためコンパイル
された目的コードの相違は、コンパイルされたアプリケ
ーションにおける注釈が、実行時にプロファイル情報4
5を生成するプロファイル作成コードと置き換えられる
点である。追加されるプロファイル作成コードは、最適
化されたアプリケーション43内の注釈に基づいて追加
される。
でアプリケーション43が実行され、プロファイル情報
が収集される。変換ルーチンは、目的コードから目的コ
ードへの変換を実行する。すなわち、アプリケーション
43の目的コードは、変換ルーチンによって、変換目的
コードに変換される。次に変換目的コードが実行され
る。ステップ44で生成された変換目的コードは、ステ
ップ42でアプリケーション43を作成するためコンパ
イルされた目的コードと同じ機械命令セットを使用す
る。テップ44で生成された変換目的コードとステップ
42でアプリケーション43を作成するためコンパイル
された目的コードの相違は、コンパイルされたアプリケ
ーションにおける注釈が、実行時にプロファイル情報4
5を生成するプロファイル作成コードと置き換えられる
点である。追加されるプロファイル作成コードは、最適
化されたアプリケーション43内の注釈に基づいて追加
される。
【0026】プロセスは、最適化されたアプリケーショ
ン43を更に最適化するように繰り返すこともできる。
最適化されたアプリケーション43の各動的変換および
実行から得られるプロファイル情報45が、次のコンパ
イルでアプリケーション43を更に最適化するために使
用される。注釈は、将来のコンパイルで使用される付加
的プロファイル情報を得るように各コンパイル毎に調節
される。最適化されたアプリケーション43に対する最
適化がそれ以上行われなくなるまで、あるいは、最適化
がアプリケーション43の処理性能がその最適化アプリ
ケーションの開発者/テスターを満足させるまで、この
ような反復プロセスは続く。
ン43を更に最適化するように繰り返すこともできる。
最適化されたアプリケーション43の各動的変換および
実行から得られるプロファイル情報45が、次のコンパ
イルでアプリケーション43を更に最適化するために使
用される。注釈は、将来のコンパイルで使用される付加
的プロファイル情報を得るように各コンパイル毎に調節
される。最適化されたアプリケーション43に対する最
適化がそれ以上行われなくなるまで、あるいは、最適化
がアプリケーション43の処理性能がその最適化アプリ
ケーションの開発者/テスターを満足させるまで、この
ような反復プロセスは続く。
【0027】図6は、本発明の別の好ましい代替実施形
態に従って動的変換ルーチンを利用してプロファイル・
データを生成するシステムの動作の流れを示す。ステッ
プ52でソース・コード51が最適化されたアプリケー
ション53を作成するためコンパイルされる。コンパイ
ルの間、最適化されたアプリケーションの実行時動作を
照会する機能を持つコード注釈が追加される。プロファ
イル情報が使用可能な場合アプリケーションを最適化す
るために使用される。更に、プロファイル情報は、一層
詳細な実行時動作を照会する新しいコード注釈の追加を
促すために使用されることもできる。
態に従って動的変換ルーチンを利用してプロファイル・
データを生成するシステムの動作の流れを示す。ステッ
プ52でソース・コード51が最適化されたアプリケー
ション53を作成するためコンパイルされる。コンパイ
ルの間、最適化されたアプリケーションの実行時動作を
照会する機能を持つコード注釈が追加される。プロファ
イル情報が使用可能な場合アプリケーションを最適化す
るために使用される。更に、プロファイル情報は、一層
詳細な実行時動作を照会する新しいコード注釈の追加を
促すために使用されることもできる。
【0028】ステップ56において、ユーザが注釈およ
びプロファイル情報の両者を調べる。そこでユーザは新
しい注釈を追加することができる。ユーザのこのような
操作は、コンパイルの前、その間またはその後のいずれ
の時点でも実行できる。ステップ55において、プロフ
ァイル情報を収集するために、アプリケーション53は
変換ルーチンの下で実行される。変換ルーチンは、目的
コードから目的コードへの変換を実行する。すなわち、
アプリケーション53の目的コードは、変換ルーチンに
よって変換目的コードに変換される。次に変換目的コー
ドが実行される。ステップ54で生成された変換目的コ
ードは、ステップ52でアプリケーション43を作成す
るためコンパイルされた目的コードと同じ機械命令セッ
トを使用する。テップ54で生成された変換目的コード
とステップ52でアプリケーション53を作成するため
コンパイルされた目的コードの相違は、コンパイルされ
たアプリケーションにおける注釈が、実行時にプロファ
イル情報55を生成するプロファイル作成コードと置き
換えられる点である。追加されるプロファイル作成コー
ドは、最適化されたアプリケーション53内の注釈に基
づいて追加される。
びプロファイル情報の両者を調べる。そこでユーザは新
しい注釈を追加することができる。ユーザのこのような
操作は、コンパイルの前、その間またはその後のいずれ
の時点でも実行できる。ステップ55において、プロフ
ァイル情報を収集するために、アプリケーション53は
変換ルーチンの下で実行される。変換ルーチンは、目的
コードから目的コードへの変換を実行する。すなわち、
アプリケーション53の目的コードは、変換ルーチンに
よって変換目的コードに変換される。次に変換目的コー
ドが実行される。ステップ54で生成された変換目的コ
ードは、ステップ52でアプリケーション43を作成す
るためコンパイルされた目的コードと同じ機械命令セッ
トを使用する。テップ54で生成された変換目的コード
とステップ52でアプリケーション53を作成するため
コンパイルされた目的コードの相違は、コンパイルされ
たアプリケーションにおける注釈が、実行時にプロファ
イル情報55を生成するプロファイル作成コードと置き
換えられる点である。追加されるプロファイル作成コー
ドは、最適化されたアプリケーション53内の注釈に基
づいて追加される。
【0029】プロセスは、最適化されたアプリケーショ
ン53を更に最適化するように繰り返すこともできる。
最適化されたアプリケーション53の各動的変換および
実行から得られるプロファイル情報55が、次のコンパ
イルでアプリケーション53を更に最適化するために使
用される。注釈は、将来のコンパイルで使用される付加
的プロファイル情報を得るように各コンパイル毎に調節
される。最適化されたアプリケーション53に対する最
適化がそれ以上行われなくなるまで、あるいは、最適化
がアプリケーション53の処理性能がその最適化アプリ
ケーションの開発者/テスターを満足させるまで、この
ような反復プロセスは続く。
ン53を更に最適化するように繰り返すこともできる。
最適化されたアプリケーション53の各動的変換および
実行から得られるプロファイル情報55が、次のコンパ
イルでアプリケーション53を更に最適化するために使
用される。注釈は、将来のコンパイルで使用される付加
的プロファイル情報を得るように各コンパイル毎に調節
される。最適化されたアプリケーション53に対する最
適化がそれ以上行われなくなるまで、あるいは、最適化
がアプリケーション53の処理性能がその最適化アプリ
ケーションの開発者/テスターを満足させるまで、この
ような反復プロセスは続く。
【0030】以下の諸表は、本発明の好ましい実施形態
の動作を更に示すサンプル・コードを提供する。表1
は、アプリケーションにおける1つのサンプル・プロシ
ージャに関するソース・コードを示す。
の動作を更に示すサンプル・コードを提供する。表1
は、アプリケーションにおける1つのサンプル・プロシ
ージャに関するソース・コードを示す。
【0031】
【表1】ソース行番号 コード 5 sum=0 6 for (i=0; i<array_size; i++) 7 sum += array[i]; 次の表2は、表1のソース・コードがコンパイルされた
結果の目的コードを例示する。
結果の目的コードを例示する。
【0032】
【表2】 ;行5の目的コード STW %gr0,sum(DP) ;sumに0をストア ;行6の目的コード STW %gr0,i(DP) ;iを0に初期化 LDW i(DP),%tr1 ;一時レジスタにiをロード loop_back LDW array_size(DP),%tr2 ;一時レジスタにarray_sizeをロード COMB,>=,n %tr2,%tr1,exit_loop ;if(i>=array_size) ループを出る ;行7の目的コード ADDIL array(DP),%tr3 ;arrayのアドレスを入手 LDWX,s,m %tr1,(%tr3),%tr4 ;arry[i]を入手 LDW sum(DP),%tr5 ;sumを入手 ADD %tr4,%tr5,%tr6 ;sumとarray[i]を加算 STW %tr6,0(%tr3) ;新しいsumをストア LDO 1(%tr1),%tr1 ;i++ B,n loop_back ;次の反復を実行 exit_loop
【0033】表2の目的コードがプロファイル作成機能
を持つ動的変換の下で実行される時、動的変換ルーチン
15は、頻繁に実行されるコード部分を識別するためプ
ロファイル作成コードを追加する。これによってコンパ
イラはより高品質のコードを生成することが可能とな
る。これは、例えば、カウンタを分岐に関連づけること
(弓形カウント)、あるいはカウンタを各行を表すコード
に関連づけること(行頻度カウント)のいずれかによって
実施される。
を持つ動的変換の下で実行される時、動的変換ルーチン
15は、頻繁に実行されるコード部分を識別するためプ
ロファイル作成コードを追加する。これによってコンパ
イラはより高品質のコードを生成することが可能とな
る。これは、例えば、カウンタを分岐に関連づけること
(弓形カウント)、あるいはカウンタを各行を表すコード
に関連づけること(行頻度カウント)のいずれかによって
実施される。
【0034】次の表3は、弓形カウントを実行するよう
に動的変換ルーチン15によって追加されたプロファイ
ル作成コードを組み込まれた表2の目的コードを示す。
に動的変換ルーチン15によって追加されたプロファイ
ル作成コードを組み込まれた表2の目的コードを示す。
【0035】
【表3】 ;行5の目的コード STW %gr0,sum(DP) ;sumに0をストア ;行6の目的コード ;プロファイル作成コード(パート1) LDW Line6Hit(DP),%tr8 ;行6を通過した回数を示すカウンタを入手 ADDI,<>1,%tr8,%tr8 ;カウンタを増分 LDI -1,%tr8 ;オーバーフローの場合カウンタを一杯にする STW %tr8,Line6Hit(DP) ;カウンタをストア STW %gr0,i(DP) ;iを0に初期化 LDW i(DP),%tr1 ;一時レジスタにiをロード loop_back LDW array_size(DP),%tr2 ;一時レジスタにarray_sizeをロード COMB,>=,n %tr2,%tr1,exit_loop ;if(i>=array_size) ループを出る ;プロファイル作成コード(パート2) LDW Line6NotTaken(DP),%tr8 ;行6を通過した回数を示すカウンタを入手 ADDI,<>1,%tr8,%tr8 ;カウンタを増分 LDI -1,%tr8 ;オーバーフローの場合カウンタを一杯にする STW %tr8,Line6NotTaken(DP) ;カウンタをストア ;行7の目的コード ADDIL array(DP),%tr3 ;arrayのアドレスを入手 LDWX,s,m %tr1,(%tr3),%tr4 ;arry[i]を入手 LDW sum(DP),%tr5 ;sumを入手 ADD %tr4,%tr5,%tr6 ;sumとarray[i]を加算 STW %tr6,0(%tr3) ;新しいsumをストア LDO 1(%tr1),%tr1 ;i++ B,n loop_back ;次の反復を実行 exit_loop
【0036】表3の目的コードが実行される時、コード
は、オリジナルのソースの中の各ステートメントが実行
された回数の追跡を続ける。この情報がコンパイラにフ
ィードバックされると、コンパイラは、場合によって
は、行6および7のループに関する一層詳細な情報を使
用すべきか否か判断する。その場合には、コンパイラは
コードに注釈を付加する。この注釈は実際には目的コー
ドに現れないが、(シンボル・テーブルまたはデバッギ
ング情報のように)非実行部分のアプリケーション・フ
ァイルに含めることができる。例えば、次の表4に示さ
れるように、コンパイラは、行6に関する詳細なループ
情報を要求する注釈をファイルに記述する。
は、オリジナルのソースの中の各ステートメントが実行
された回数の追跡を続ける。この情報がコンパイラにフ
ィードバックされると、コンパイラは、場合によって
は、行6および7のループに関する一層詳細な情報を使
用すべきか否か判断する。その場合には、コンパイラは
コードに注釈を付加する。この注釈は実際には目的コー
ドに現れないが、(シンボル・テーブルまたはデバッギ
ング情報のように)非実行部分のアプリケーション・フ
ァイルに含めることができる。例えば、次の表4に示さ
れるように、コンパイラは、行6に関する詳細なループ
情報を要求する注釈をファイルに記述する。
【0037】
【表4】位置 アクション パラメータ <Label_X>: Loop_Detai: Iteration_Bound=(array_size-1)
【0038】表4に記述された注釈は、位置、アクショ
ンおよびアクションを実行するために必要とされるオプ
ションとしての付加パラメータという3つの部分から成
る。この例における位置は、コンパイラによって生成さ
れた目的コードにおける位置を表すラベルである。アク
ションは、実行中に上記位置に出会う度毎に情報を収集
するため動的変換ルーチン15によって解読されるべき
コードである。この例では、アクションは、例えば反復
動作の2、4または8による分割可能性やループの「モ
ード」等Label_ Xが付けられたループに関する詳細を収
集することである。このアクションを実行するため、動
的変換ルーチン15は、反復の境界がどこに位置してい
るか知る必要がある。上述の例では、反復の境界は、変
数"array_size"(アレイの大きさ)に含まれていて、1を
減ずることによって調節する必要がある。
ンおよびアクションを実行するために必要とされるオプ
ションとしての付加パラメータという3つの部分から成
る。この例における位置は、コンパイラによって生成さ
れた目的コードにおける位置を表すラベルである。アク
ションは、実行中に上記位置に出会う度毎に情報を収集
するため動的変換ルーチン15によって解読されるべき
コードである。この例では、アクションは、例えば反復
動作の2、4または8による分割可能性やループの「モ
ード」等Label_ Xが付けられたループに関する詳細を収
集することである。このアクションを実行するため、動
的変換ルーチン15は、反復の境界がどこに位置してい
るか知る必要がある。上述の例では、反復の境界は、変
数"array_size"(アレイの大きさ)に含まれていて、1を
減ずることによって調節する必要がある。
【0039】次の表5は、注釈を使用する変換されたコ
ードおよびプロファイル作成コードのサンプルである。
このコードが動的変換の下で実行される時、動的変換ル
ーチン15は、Label_Xの位置にループ詳細分析を行う
コードを挿入する。
ードおよびプロファイル作成コードのサンプルである。
このコードが動的変換の下で実行される時、動的変換ル
ーチン15は、Label_Xの位置にループ詳細分析を行う
コードを挿入する。
【0040】
【表5】 ;行5の目的コード STW %gr0,sum(DP) ;sumに0をストア ;行6の目的コード ;注釈[<Label_X><Loop_Detail><array_size-1>]に関する ;プロファイル作成コード LDW array_size(DP),%arg0 ;ループ反復限界を入手 BL Analyze_Loop,RP ;分析プロシージャを呼び出す ADDI -1,%arg0,%arg0 ;反復限界を調整 STW %gr0,i(DP) ;iを0に初期化 LDW i(DP),%tr1 ;一時レジスタにiをロード loop_back LDW array_size(DP),%tr2 ;一時レジスタにarray_sizeをロード COMB,>=,n %tr2,%tr1,exit_loop ;if(i>=array_size) ループを出る ;行7の目的コード ADDIL array(DP),%tr3 ;arrayのアドレスを入手 LDWX,s,m %tr1,(%tr3),%tr4 ;arry[i]を入手 LDW sum(DP),%tr5 ;sumを入手 ADD %tr4,%tr5,%tr6 ;sumとarray[i]を加算 STW %tr6,0(%tr3) ;新しいsumをストア LDO 1(%tr1),%tr1 ;i++ B,n loop_back ;次の反復を実行 exit_loop
【0041】表3および表5のサンプル・コードによっ
て、目的コードが実行されるとプロファイル情報が生成
される。この情報はコンパイラもユーザも利用すること
ができる。ユーザは"Loop-Detail"のような新しい注釈
を加えることによって、追加情報を要求するか、コンパ
イラが所望のコードを生成するようにコンパイラにヒン
トを与えることことができる。
て、目的コードが実行されるとプロファイル情報が生成
される。この情報はコンパイラもユーザも利用すること
ができる。ユーザは"Loop-Detail"のような新しい注釈
を加えることによって、追加情報を要求するか、コンパ
イラが所望のコードを生成するようにコンパイラにヒン
トを与えることことができる。
【0042】以上は本発明の典型的な実施形態を開示し
記述したものにすぎない。本発明をその理念および基本
的特徴から逸脱することなく別の形態で実施することが
可能である点は当業者に認められるべきものであろう。
記述したものにすぎない。本発明をその理念および基本
的特徴から逸脱することなく別の形態で実施することが
可能である点は当業者に認められるべきものであろう。
【0043】本発明には、例として次のような実施様態
が含まれる。 (1)アプリケーションに関する最適化された目的コー
ドを生成する方法であって、アプリケーションのソース
・コードをコンパイルして該アプリケーションに関する
第1の目的コードを生成するステップ(a)と、実行の際
にプロファイル情報を生成する機能を持つプロファイル
作成コードを含む第2の目的コードに上記第1の目的コ
ードを変換し(b1)、該第2の目的コードを実行してプロ
ファイル情報を生成する(b2)ことを含む上記第1の目的
コードに関するプロファイル情報を生成するステップ
(b)と、上記プロファイル情報を使用して上記ソース・
コードを再コンパイルすることによって、最適化された
目的コードを生成するステップ(c)と、を含む最適目的
コード生成方法。 (2)上記ステップ(a)に続いて、該アプリケーション
に関して上記第1の目的コードをテストし、妥当性を検
査するステップ(d)を更に含む上記(1)に記載の最適
目的コード生成方法。 (3)上記ステップ(c)に続いて、実行の際に追加プロ
ファイル情報を生成する機能を持つプロファイル作成コ
ードを含む第3の目的コードに上記最適化された目的コ
ードを変換し(d1)、該第3の目的コードを実行して追加
プロファイル情報を生成する(d2)ことを含む上記最適化
された目的コードに関する追加プロファイル情報を生成
するステップ(d)と、上記追加プロファイル情報を使用
して上記ソース・コードを再コンパイルすることによっ
て、更に最適化された目的コードを生成するステップ
(e)と、を含む上記(1)に記載の最適目的コード生成
方法。 (4)上記ステップ(a)が上記第1の目的コードに注釈
を挿入することを含む、上記(1)に記載の最適目的コ
ード生成方法。 (5)上記ステップ(b1)において、第1の目的コード内
の注釈が第2の目的コード内のプロファイル作成コード
の内容を決定する、上記(4)に記載の最適目的コード
生成方法。 (6)上記ステップ(a)において、ソース・コードをコ
ンパイルするコンパイラによって注釈が第1の目的コー
ドに置かれる、上記(5)に記載の最適目的コード生成
方法。 (7)上記ステップ(a)において、ユーザによって注釈
が第1の目的コードに置かれる、上記(5)に記載の最
適目的コード生成方法。 (8)上記ステップ(c)に続いて、実行の際に追加プロ
ファイル情報を生成する機能を持つプロファイル作成コ
ードを含む第3の目的コードに上記最適化された目的コ
ードを変換し(d1)、該第3の目的コードを実行して追加
プロファイル情報を生成する(d2)ことを含む上記最適化
された目的コードに関する追加プロファイル情報を生成
するステップ(d)と、上記追加プロファイル情報を使用
して上記ソース・コードを再コンパイルすることによっ
て、更に最適化された目的コードを生成するステップ
(e)と、を含む上記(5)に記載の最適目的コード生成
方法。 (9)上記第1の目的コードおよび上記第2の目的コー
ドが同じ機械命令セットを利用する、上記(1)に記載
の最適目的コード生成方法。
が含まれる。 (1)アプリケーションに関する最適化された目的コー
ドを生成する方法であって、アプリケーションのソース
・コードをコンパイルして該アプリケーションに関する
第1の目的コードを生成するステップ(a)と、実行の際
にプロファイル情報を生成する機能を持つプロファイル
作成コードを含む第2の目的コードに上記第1の目的コ
ードを変換し(b1)、該第2の目的コードを実行してプロ
ファイル情報を生成する(b2)ことを含む上記第1の目的
コードに関するプロファイル情報を生成するステップ
(b)と、上記プロファイル情報を使用して上記ソース・
コードを再コンパイルすることによって、最適化された
目的コードを生成するステップ(c)と、を含む最適目的
コード生成方法。 (2)上記ステップ(a)に続いて、該アプリケーション
に関して上記第1の目的コードをテストし、妥当性を検
査するステップ(d)を更に含む上記(1)に記載の最適
目的コード生成方法。 (3)上記ステップ(c)に続いて、実行の際に追加プロ
ファイル情報を生成する機能を持つプロファイル作成コ
ードを含む第3の目的コードに上記最適化された目的コ
ードを変換し(d1)、該第3の目的コードを実行して追加
プロファイル情報を生成する(d2)ことを含む上記最適化
された目的コードに関する追加プロファイル情報を生成
するステップ(d)と、上記追加プロファイル情報を使用
して上記ソース・コードを再コンパイルすることによっ
て、更に最適化された目的コードを生成するステップ
(e)と、を含む上記(1)に記載の最適目的コード生成
方法。 (4)上記ステップ(a)が上記第1の目的コードに注釈
を挿入することを含む、上記(1)に記載の最適目的コ
ード生成方法。 (5)上記ステップ(b1)において、第1の目的コード内
の注釈が第2の目的コード内のプロファイル作成コード
の内容を決定する、上記(4)に記載の最適目的コード
生成方法。 (6)上記ステップ(a)において、ソース・コードをコ
ンパイルするコンパイラによって注釈が第1の目的コー
ドに置かれる、上記(5)に記載の最適目的コード生成
方法。 (7)上記ステップ(a)において、ユーザによって注釈
が第1の目的コードに置かれる、上記(5)に記載の最
適目的コード生成方法。 (8)上記ステップ(c)に続いて、実行の際に追加プロ
ファイル情報を生成する機能を持つプロファイル作成コ
ードを含む第3の目的コードに上記最適化された目的コ
ードを変換し(d1)、該第3の目的コードを実行して追加
プロファイル情報を生成する(d2)ことを含む上記最適化
された目的コードに関する追加プロファイル情報を生成
するステップ(d)と、上記追加プロファイル情報を使用
して上記ソース・コードを再コンパイルすることによっ
て、更に最適化された目的コードを生成するステップ
(e)と、を含む上記(5)に記載の最適目的コード生成
方法。 (9)上記第1の目的コードおよび上記第2の目的コー
ドが同じ機械命令セットを利用する、上記(1)に記載
の最適目的コード生成方法。
【0044】(10)アプリケーションに関する第1の
目的コードを第2の目的コードに変換し、実行の際にプ
ロファイル情報を生成する機能を持つプロファイル作成
コードを該第2の目的コードに追加する変換手段と、該
第2の目的コードを実行してプロファイル情報を生成す
る手段と、を備えるコンピュータ・システム。 (11)該アプリケーションに関して上記第1の目的コ
ードをテストし、妥当性を検査する手段を更に備える、
上記(10)に記載のコンピュータ・システム。 (12)ソース・コードをコンパイルして上記第1の目
的コードを生成するコンパイラを更に備える、上記(1
0)に記載のコンピュータ・システム。 (13)上記第2の目的コードの実行によって生成され
た上記プロファイル情報を利用して上記ソース・コード
を再コンパイルすることによって、最適化された目的コ
ードを生成する手段を備える、上記(12)に記載のコ
ンピュータ・システム。 (14)上記コンパイラが上記第1の目的コードに注釈
を挿入する、上記(12)に記載のコンピュータ・シス
テム。 (15)上記変換手段が上記第1の目的コード内の上記
注釈を利用して上記第2の目的コード内の上記プロファ
イル作成コードの内容を決定する、上記(14)に記載
のコンピュータ・システム。 (16)ユーザが上記注釈を第1の目的コードに置く手
段を含み、上記変換手段が上記第1の目的コード内の該
注釈を利用して上記第2の目的コード内の上記プロファ
イル作成コードの内容を決定する、上記(12)に記載
のコンピュータ・システム。 (17)上記第2の目的コードのサブセットを持つモジ
ュールを記憶する変換コード・キャッシュを更に備える
上記(10)に記載のコンピュータ・システム。 (18)ブロック情報マップへのアドレスと、ブロック
情報テーブルと、を更に備える上記(17)に記載のコ
ンピュータ・システム。 (19)上記第1の目的コードおよび上記第2の目的コ
ードが同じ機械命令セットを利用する、上記(10)に
記載のコンピュータ・システム。
目的コードを第2の目的コードに変換し、実行の際にプ
ロファイル情報を生成する機能を持つプロファイル作成
コードを該第2の目的コードに追加する変換手段と、該
第2の目的コードを実行してプロファイル情報を生成す
る手段と、を備えるコンピュータ・システム。 (11)該アプリケーションに関して上記第1の目的コ
ードをテストし、妥当性を検査する手段を更に備える、
上記(10)に記載のコンピュータ・システム。 (12)ソース・コードをコンパイルして上記第1の目
的コードを生成するコンパイラを更に備える、上記(1
0)に記載のコンピュータ・システム。 (13)上記第2の目的コードの実行によって生成され
た上記プロファイル情報を利用して上記ソース・コード
を再コンパイルすることによって、最適化された目的コ
ードを生成する手段を備える、上記(12)に記載のコ
ンピュータ・システム。 (14)上記コンパイラが上記第1の目的コードに注釈
を挿入する、上記(12)に記載のコンピュータ・シス
テム。 (15)上記変換手段が上記第1の目的コード内の上記
注釈を利用して上記第2の目的コード内の上記プロファ
イル作成コードの内容を決定する、上記(14)に記載
のコンピュータ・システム。 (16)ユーザが上記注釈を第1の目的コードに置く手
段を含み、上記変換手段が上記第1の目的コード内の該
注釈を利用して上記第2の目的コード内の上記プロファ
イル作成コードの内容を決定する、上記(12)に記載
のコンピュータ・システム。 (17)上記第2の目的コードのサブセットを持つモジ
ュールを記憶する変換コード・キャッシュを更に備える
上記(10)に記載のコンピュータ・システム。 (18)ブロック情報マップへのアドレスと、ブロック
情報テーブルと、を更に備える上記(17)に記載のコ
ンピュータ・システム。 (19)上記第1の目的コードおよび上記第2の目的コ
ードが同じ機械命令セットを利用する、上記(10)に
記載のコンピュータ・システム。
【0045】
【発明の効果】本発明によって、プロファイル作成コー
ドを備えた特別版の目的コードを生成するため独立した
コンパイルを実行する必要性なしに、プロファイルに基
づくプログラムの最適化が可能になる。プロファイル・
データを生成するため、本発明に従った動的変換ルーチ
ンを使用することによって、アプリケーション開発者の
PBO使用が単純化される。更に、本発明の動的変換シ
ステムは、動的データ収集に容易に対応でき、PBOに
対する反復的アプローチにおける注釈の使用を可能にす
る。これによって、一層効率的で大規模な実行時プロフ
ァイル・データ収集が可能になる。
ドを備えた特別版の目的コードを生成するため独立した
コンパイルを実行する必要性なしに、プロファイルに基
づくプログラムの最適化が可能になる。プロファイル・
データを生成するため、本発明に従った動的変換ルーチ
ンを使用することによって、アプリケーション開発者の
PBO使用が単純化される。更に、本発明の動的変換シ
ステムは、動的データ収集に容易に対応でき、PBOに
対する反復的アプローチにおける注釈の使用を可能にす
る。これによって、一層効率的で大規模な実行時プロフ
ァイル・データ収集が可能になる。
【図1】本発明の好ましい実施形態に従う動的変換ルー
チンを含むコンピュータ・システムのブロック図であ
る。
チンを含むコンピュータ・システムのブロック図であ
る。
【図2】本発明の好ましい実施形態に従って動的変換ル
ーチンを利用してプロファイル・データを生成するシス
テムの動作の流れ図である。
ーチンを利用してプロファイル・データを生成するシス
テムの動作の流れ図である。
【図3】本発明の好ましい実施形態に従ってコードを動
的に変換する動的変換ルーチンの使用を示すブロック図
である。
的に変換する動的変換ルーチンの使用を示すブロック図
である。
【図4】本発明の好ましい実施形態に従う動的変換ルー
チンによって使用されるブロック情報マップへのアドレ
ス、ブロック情報テーブルおよび変換されたコード・キ
ャッシュを示すブロック図である。
チンによって使用されるブロック情報マップへのアドレ
ス、ブロック情報テーブルおよび変換されたコード・キ
ャッシュを示すブロック図である。
【図5】本発明の好ましい実施形態に従って動的変換ル
ーチンおよびコード注釈を利用してプロファイル・デー
タを生成するシステムの動作の流れ図である。
ーチンおよびコード注釈を利用してプロファイル・デー
タを生成するシステムの動作の流れ図である。
【図6】本発明の好ましい実施形態に従って動的変換ル
ーチンおよびユーザ修正可能コード注釈を利用してプロ
ファイル・データを生成するシステムの動作の流れ図で
ある。
ーチンおよびユーザ修正可能コード注釈を利用してプロ
ファイル・データを生成するシステムの動作の流れ図で
ある。
7 コンピュータ・システム 10、33 アプリケーション 15、44、54 動的変換ルーチン 20 変換コード・キャッシュ 25 ブロック情報マップへのアドレス 26 ブロック情報テーブル 27、28、29 変換目的コード 31、41、51 ソース・コード 36、45、55 プロファイル情報 38、43、53 最適化されたアプリケーション 39 動的変換・実行プロセス 42、52 コンパイラ 56 ユーザ
Claims (1)
- 【請求項1】アプリケーションに関する最適化された目
的コードを生成する方法であって、 アプリケーションのソース・コードをコンパイルして該
アプリケーションに関する第1の目的コードを生成する
ステップと、 実行の際にプロファイル情報を生成する機能を持つプロ
ファイル作成コードを含む第2の目的コードに上記第1
の目的コードを変換し、該第2の目的コードを実行して
プロファイル情報を生成することを含む上記第1の目的
コードに関するプロファイル情報を生成するステップ
と、 上記プロファイル情報を使用して上記ソース・コードを
再コンパイルすることによって、最適化された目的コー
ドを生成するステップと、 を含む最適目的コード生成方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US616,608 | 1984-06-04 | ||
| US08/616,608 US5815720A (en) | 1996-03-15 | 1996-03-15 | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH09330233A true JPH09330233A (ja) | 1997-12-22 |
| JPH09330233A5 JPH09330233A5 (ja) | 2005-02-10 |
Family
ID=24470226
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP9055902A Withdrawn JPH09330233A (ja) | 1996-03-15 | 1997-03-11 | 最適目的コード生成方法 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US5815720A (ja) |
| JP (1) | JPH09330233A (ja) |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2000003322A1 (en) * | 1998-07-10 | 2000-01-20 | Sony Corporation | Method and apparatus for compiling |
| US6292940B1 (en) | 1998-01-26 | 2001-09-18 | Nec Corporation | Program complete system and its compile method for efficiently compiling a source program including an indirect call for a procedure |
| US7665066B2 (en) | 2001-04-12 | 2010-02-16 | Siemens Aktiengesellschaft | Method for determining and recording system information and function in distributed parallel component based software systems |
| JP2016517109A (ja) * | 2013-04-02 | 2016-06-09 | グーグル インコーポレイテッド | ユーザに指向されかつプロファイル主導の最適化用のフレームワーク |
| JP2020126431A (ja) * | 2019-02-04 | 2020-08-20 | 株式会社日立製作所 | 一つ以上の機器において処理を実行するシステム及び方法 |
Families Citing this family (98)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6535903B2 (en) | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
| US6091897A (en) | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
| US6052530A (en) * | 1996-10-09 | 2000-04-18 | Hewlett-Packard Co. | Dynamic translation system and method for optimally translating computer code |
| US6591414B2 (en) * | 1996-10-28 | 2003-07-08 | Fujitsu Limited | Binary program conversion apparatus, binary program conversion method and program recording medium |
| US5933643A (en) * | 1997-04-17 | 1999-08-03 | Hewlett Packard Company | Profiler driven data prefetching optimization where code generation not performed for loops |
| US5943501A (en) * | 1997-06-27 | 1999-08-24 | Wisconsin Alumni Research Foundation | Multiple processor, distributed memory computer with out-of-order processing |
| US6438740B1 (en) * | 1997-08-21 | 2002-08-20 | Compaq Information Technologies Group, L.P. | System and method for dynamically identifying free registers |
| US5960202A (en) * | 1997-10-31 | 1999-09-28 | Hewlett Packard Company | Method and apparatus for automatically logging compiler options and/or overriding compiler options |
| US5966538A (en) * | 1997-10-31 | 1999-10-12 | Hewlett-Packard Company | Method and apparatus for automatically determining which compiler options should be used when compiling a computer program |
| US6289505B1 (en) * | 1997-11-18 | 2001-09-11 | Sun Microsystems, Inc. | Method, apparatus and computer programmed product for binary re-optimization using a high level language compiler |
| US6164841A (en) * | 1998-05-04 | 2000-12-26 | Hewlett-Packard Company | Method, apparatus, and product for dynamic software code translation system |
| US6158049A (en) * | 1998-08-11 | 2000-12-05 | Compaq Computer Corporation | User transparent mechanism for profile feedback optimization |
| US6223339B1 (en) * | 1998-09-08 | 2001-04-24 | Hewlett-Packard Company | System, method, and product for memory management in a dynamic translator |
| US6324689B1 (en) * | 1998-09-30 | 2001-11-27 | Compaq Computer Corporation | Mechanism for re-writing an executable having mixed code and data |
| US6351844B1 (en) * | 1998-11-05 | 2002-02-26 | Hewlett-Packard Company | Method for selecting active code traces for translation in a caching dynamic translator |
| US6275981B1 (en) * | 1998-11-12 | 2001-08-14 | Hewlett-Packard Company | Method and system for correlating profile data dynamically generated from an optimized executable program with source code statements |
| GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
| US6415436B1 (en) * | 1998-12-11 | 2002-07-02 | Hewlett-Packard Company | Mechanism for cross validating emulated states between different emulation technologies in a dynamic compiler |
| GB2344907A (en) * | 1998-12-19 | 2000-06-21 | Int Computers Ltd | Instruction translation and execution mechanism |
| US6308320B1 (en) | 1999-01-15 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for incremental selective compilation of intermediate code files during computer system compilation and linking |
| US6978450B2 (en) * | 1999-01-15 | 2005-12-20 | Hewlett-Packard Development Company, L.P. | Method and system for optimizing compilation time of a program by selectively reusing object code |
| US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
| US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
| US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
| US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
| US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
| US6763452B1 (en) | 1999-01-28 | 2004-07-13 | Ati International Srl | Modifying program execution based on profiling |
| US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
| US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
| US8121828B2 (en) | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
| US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
| US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
| US6698011B1 (en) * | 1999-01-29 | 2004-02-24 | Intel Corporation | Isolation of program translation failures |
| US6662354B1 (en) | 1999-01-29 | 2003-12-09 | Unisys Corporation | Determining destinations of a dynamic branch |
| US7058932B1 (en) | 1999-04-19 | 2006-06-06 | Unisys Corporation | System, computer program product, and methods for emulation of computer programs |
| US6622300B1 (en) | 1999-04-21 | 2003-09-16 | Hewlett-Packard Development Company, L.P. | Dynamic optimization of computer programs using code-rewriting kernal module |
| US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
| JP2001056764A (ja) * | 1999-08-18 | 2001-02-27 | Access:Kk | 仮想計算機の実行方法および装置 |
| US7254806B1 (en) | 1999-08-30 | 2007-08-07 | Ati International Srl | Detecting reordered side-effects |
| US6922829B2 (en) * | 1999-10-12 | 2005-07-26 | Texas Instruments Incorporated | Method of generating profile-optimized code |
| US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
| US6785801B2 (en) * | 2000-02-09 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | Secondary trace build from a cache of translations in a caching dynamic translator |
| US20010049818A1 (en) * | 2000-02-09 | 2001-12-06 | Sanjeev Banerjia | Partitioned code cache organization to exploit program locallity |
| US20020066081A1 (en) * | 2000-02-09 | 2002-05-30 | Evelyn Duesterwald | Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator |
| US6725335B2 (en) * | 2000-02-09 | 2004-04-20 | Hewlett-Packard Development Company, L.P. | Method and system for fast unlinking of a linked branch in a caching dynamic translator |
| US7120906B1 (en) * | 2000-04-28 | 2006-10-10 | Silicon Graphics, Inc. | Method and computer program product for precise feedback data generation and updating for compile-time optimizations |
| US7725885B1 (en) * | 2000-05-09 | 2010-05-25 | Hewlett-Packard Development Company, L.P. | Method and apparatus for trace based adaptive run time compiler |
| US7240342B1 (en) * | 2000-06-30 | 2007-07-03 | Intel Corporation | User transparent continuous compilation |
| US6874140B1 (en) * | 2000-07-31 | 2005-03-29 | Microsoft Corporation | Debug annotations |
| US7735072B1 (en) * | 2000-08-11 | 2010-06-08 | International Business Machines Corporation | Method and apparatus for profiling computer program execution |
| US7000227B1 (en) * | 2000-09-29 | 2006-02-14 | Intel Corporation | Iterative optimizing compiler |
| US20020199179A1 (en) * | 2001-06-21 | 2002-12-26 | Lavery Daniel M. | Method and apparatus for compiler-generated triggering of auxiliary codes |
| US20030066060A1 (en) * | 2001-09-28 | 2003-04-03 | Ford Richard L. | Cross profile guided optimization of program execution |
| US6976254B2 (en) * | 2001-11-28 | 2005-12-13 | Esmertec Ag | Inter-method control transfer for execution engines with memory constraints |
| US7237234B2 (en) * | 2001-12-13 | 2007-06-26 | Texas Instruments Incorporated | Method for selective solicitation of user assistance in the performance tuning process |
| US7165242B2 (en) * | 2002-03-19 | 2007-01-16 | Sun Microsystems, Inc. | Methods and systems for reducing performance overhead of code instrumentation based profiling |
| US20040088690A1 (en) * | 2002-08-27 | 2004-05-06 | Hayim Shaul | Method for accelerating a computer application by recompilation and hardware customization |
| 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 |
| US7343598B2 (en) * | 2003-04-25 | 2008-03-11 | Microsoft Corporation | Cache-conscious coallocation of hot data streams |
| US7194732B2 (en) * | 2003-06-26 | 2007-03-20 | Hewlett-Packard Development Company, L.P. | System and method for facilitating profiling an application |
| JP4184900B2 (ja) * | 2003-08-26 | 2008-11-19 | 富士通株式会社 | 変数の統計処理を行うコンパイル処理プログラム、およびその記録媒体、およびその処理方法ならびにその処理装置 |
| US6925928B2 (en) * | 2003-09-18 | 2005-08-09 | Anthony Fox | Trash compactor for fast food restaurant waste |
| US7587709B2 (en) * | 2003-10-24 | 2009-09-08 | Microsoft Corporation | Adaptive instrumentation runtime monitoring and analysis |
| US20050149913A1 (en) * | 2003-12-29 | 2005-07-07 | Yun Wang | Apparatus and methods to optimize code in view of masking status of exceptions |
| US7437712B1 (en) * | 2004-01-22 | 2008-10-14 | Sprint Communications Company L.P. | Software build tool with revised code version based on description of revisions and authorizing build based on change report that has been approved |
| US8065665B1 (en) * | 2004-02-28 | 2011-11-22 | Oracle America, Inc. | Method and apparatus for correlating profile data |
| US7721268B2 (en) * | 2004-10-01 | 2010-05-18 | Microsoft Corporation | Method and system for a call stack capture |
| US7716647B2 (en) * | 2004-10-01 | 2010-05-11 | Microsoft Corporation | Method and system for a system call profiler |
| 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 |
| US20070006167A1 (en) * | 2005-05-31 | 2007-01-04 | Chi-Keung Luk | Optimizing binary-level instrumentation via instruction scheduling |
| JP4783612B2 (ja) * | 2005-10-12 | 2011-09-28 | 富士通セミコンダクター株式会社 | 拡張言語仕様指定方法、プログラム開発方法、プログラム及びコンピュータ読み取り可能な記憶媒体 |
| JP2009515243A (ja) * | 2005-11-04 | 2009-04-09 | インヒロン ゲーエムベーハー | ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法 |
| US7975263B2 (en) * | 2006-01-10 | 2011-07-05 | Intel Corporation | Method and apparatus for generating run time profiles for program compilation |
| US7792666B2 (en) * | 2006-05-03 | 2010-09-07 | Sony Computer Entertainment Inc. | Translation block invalidation prehints in emulation of a target system on a host system |
| US7813909B2 (en) | 2006-05-03 | 2010-10-12 | Sony Computer Entertainment Inc. | Register mapping in emulation of a target system on a host system |
| US7770050B2 (en) * | 2006-05-03 | 2010-08-03 | Sony Computer Entertainment Inc. | Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code |
| 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 |
| US20080034349A1 (en) * | 2006-08-04 | 2008-02-07 | Microsoft Corporation | Incremental program modification based on usage data |
| US8060356B2 (en) | 2007-12-19 | 2011-11-15 | Sony Computer Entertainment Inc. | Processor emulation using fragment level translation |
| US9235390B1 (en) * | 2008-03-31 | 2016-01-12 | Symantec Corporation | Application optimization for use based on feature popularity |
| US9201793B2 (en) * | 2008-05-30 | 2015-12-01 | Red Hat, Inc. | Facilitating profiling of applications for efficient loading |
| US8418155B2 (en) * | 2009-02-10 | 2013-04-09 | International Business Machines Corporation | Generating parallel SIMD code for an arbitrary target architecture |
| CA2672337C (en) * | 2009-07-15 | 2017-01-03 | Ibm Canada Limited - Ibm Canada Limitee | Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis |
| JP5792577B2 (ja) * | 2010-11-10 | 2015-10-14 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 動的バイナリ・トランスレータに関するメモリ管理のための装置、方法、およびコンピュータ・プログラム |
| US9367429B2 (en) * | 2012-12-21 | 2016-06-14 | Microsoft Technology Licensing, Llc | Diagnostics of declarative source elements |
| US20130219372A1 (en) | 2013-03-15 | 2013-08-22 | Concurix Corporation | Runtime Settings Derived from Relationships Identified in Tracer Data |
| JP2015069220A (ja) * | 2013-09-26 | 2015-04-13 | 富士通株式会社 | 性能評価プログラム生成装置、方法、及びプログラム |
| US9213532B2 (en) | 2013-09-26 | 2015-12-15 | Oracle International Corporation | Method for ordering text in a binary |
| US9606783B2 (en) * | 2013-10-14 | 2017-03-28 | International Business Machines Corporation | Dynamic code selection based on data policies |
| GB2527567A (en) | 2014-06-26 | 2015-12-30 | Ibm | Optimising software code |
| JP2017156937A (ja) * | 2016-03-01 | 2017-09-07 | ヤンマー株式会社 | 端末装置およびソフトウェア書き換えプログラム |
| US10853044B2 (en) * | 2017-10-06 | 2020-12-01 | Nvidia Corporation | Device profiling in GPU accelerators by using host-device coordination |
| US10956136B2 (en) | 2018-10-16 | 2021-03-23 | Ebay, Inc. | User interface resource file optimization |
| US11138091B2 (en) * | 2018-12-12 | 2021-10-05 | Sap Se | Regression analysis platform |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO1991003791A1 (en) * | 1989-09-01 | 1991-03-21 | Amdahl Corporation | Operating system and data base |
| US5481708A (en) * | 1992-06-05 | 1996-01-02 | Borland International, Inc. | System and methods for optimizing object-oriented compilations |
| US5471564A (en) * | 1992-07-10 | 1995-11-28 | Microsoft Corporation | System and method for dynamic printer timeout |
| US5519866A (en) * | 1993-06-28 | 1996-05-21 | Taligent, Inc. | Method and apparatus of incrementally linking components of a modeled computer program |
| US5475842A (en) * | 1993-08-11 | 1995-12-12 | Xerox Corporation | Method of compilation optimization using an N-dimensional template for relocated and replicated alignment of arrays in data-parallel programs for reduced data communication during execution |
| US5375242A (en) * | 1993-09-29 | 1994-12-20 | Hewlett-Packard Company | Compiler architecture for cross-module optimization |
| US5590331A (en) * | 1994-12-23 | 1996-12-31 | Sun Microsystems, Inc. | Method and apparatus for generating platform-standard object files containing machine-independent code |
-
1996
- 1996-03-15 US US08/616,608 patent/US5815720A/en not_active Expired - Lifetime
-
1997
- 1997-03-11 JP JP9055902A patent/JPH09330233A/ja not_active Withdrawn
Cited By (10)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6292940B1 (en) | 1998-01-26 | 2001-09-18 | Nec Corporation | Program complete system and its compile method for efficiently compiling a source program including an indirect call for a procedure |
| WO2000003322A1 (en) * | 1998-07-10 | 2000-01-20 | Sony Corporation | Method and apparatus for compiling |
| US7665066B2 (en) | 2001-04-12 | 2010-02-16 | Siemens Aktiengesellschaft | Method for determining and recording system information and function in distributed parallel component based software systems |
| JP2016517109A (ja) * | 2013-04-02 | 2016-06-09 | グーグル インコーポレイテッド | ユーザに指向されかつプロファイル主導の最適化用のフレームワーク |
| US9760351B2 (en) | 2013-04-02 | 2017-09-12 | Google Inc. | Framework for user-directed profile-driven optimizations |
| US10365903B2 (en) | 2013-04-02 | 2019-07-30 | Google Llc | Framework for user-directed profile-driven optimizations |
| US11321061B2 (en) | 2013-04-02 | 2022-05-03 | Google Llc | Framework for user-directed profile-driven optimizations |
| US11675574B2 (en) | 2013-04-02 | 2023-06-13 | Google Llc | Framework for user-directed profile-driven optimizations |
| US12450040B2 (en) | 2013-04-02 | 2025-10-21 | Google Llc | Framework for user-directed profile-driven optimizations |
| JP2020126431A (ja) * | 2019-02-04 | 2020-08-20 | 株式会社日立製作所 | 一つ以上の機器において処理を実行するシステム及び方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| US5815720A (en) | 1998-09-29 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5815720A (en) | Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system | |
| US5539907A (en) | System for monitoring computer system performance | |
| US5732273A (en) | System for monitoring compute system performance | |
| US7353508B2 (en) | Method, apparatus and article for generation of debugging information | |
| US7725883B1 (en) | Program interpreter | |
| US5768592A (en) | Method and apparatus for managing profile data | |
| US5956512A (en) | Computer program debugging in the presence of compiler synthesized variables | |
| US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
| US8522222B2 (en) | Tracing just-in-time compilation with pointers to local variables | |
| JP2004062858A (ja) | データ処理装置内のアプリケーション・コードのコンパイル | |
| US20120198427A1 (en) | Ensuring Register Availability for Dynamic Binary Optimization | |
| JP2010198628A (ja) | プログラムコード変換方法 | |
| JP5719278B2 (ja) | 情報処理装置、プロファイル対象決定プログラム及び方法 | |
| US6925636B2 (en) | Method and apparatus for refining an alias set of address taken variables | |
| CN116775127A (zh) | 一种基于RetroWrite框架的静态符号执行插桩方法 | |
| US8056061B2 (en) | Data processing device and method using predesignated register | |
| Besnard et al. | A framework for automatic and parameterizable memoization | |
| Magnusson | Partial translation | |
| MacLaren | Inline routines in VAXELN Pascal | |
| Soest | Compiling Second-Order Accelerate Programs to First-Order TensorFlow Graphs | |
| JPH02176938A (ja) | 機械語命令最適化方式 | |
| Meurer | OCamlJIT 2.0-Faster Objective Caml | |
| Korsholm | Flash memory in embedded Java programs | |
| Yang et al. | Efficient register mapping and allocation in LaTTe, an open-source Java just-in-time compiler | |
| Plumbridge et al. | Translating Java for resource constrained embedded systems |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040305 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040305 |
|
| A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20060317 |