JP2002259135A - プログラムの最適化方法及びこれを用いたコンパイラ - Google Patents

プログラムの最適化方法及びこれを用いたコンパイラ

Info

Publication number
JP2002259135A
JP2002259135A JP2001055996A JP2001055996A JP2002259135A JP 2002259135 A JP2002259135 A JP 2002259135A JP 2001055996 A JP2001055996 A JP 2001055996A JP 2001055996 A JP2001055996 A JP 2001055996A JP 2002259135 A JP2002259135 A JP 2002259135A
Authority
JP
Japan
Prior art keywords
program
parameter
specialization
path
execution
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.)
Pending
Application number
JP2001055996A
Other languages
English (en)
Inventor
Motohiro Kawahito
基弘 川人
Hideaki Komatsu
秀昭 小松
Farley John
ジョン・ファレイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2001055996A priority Critical patent/JP2002259135A/ja
Priority to US10/085,455 priority patent/US20040015918A1/en
Publication of JP2002259135A publication Critical patent/JP2002259135A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 特殊化による最適化を含むコンパイルにおい
て、コンパイルに要する時間を短縮し、コンパイル時の
メモリ消費量を抑える。 【解決手段】 コンパイラ10において、コンパイルの
対象であるプログラムにおける所定の命令のパラメータ
を特定の状態に固定することによりこのプログラムの実
行速度をどれだけ向上させることができるかを解析する
影響度解析部12と、このプログラムを実行した場合
に、この影響度解析部12にて解析された命令のパラメ
ータが取り得る状態ごとの出現頻度の統計を取り、得ら
れた統計情報に基づいてこの命令のパラメータをどの状
態に固定するかを決定する特殊化データ選択部13と、
この影響度解析部12及び特殊化データ選択部13によ
る処理結果に基づいて、このプログラム中に、所定の命
令のパラメータを特定の状態に固定した特殊化されたパ
スを生成する特殊化コンパイル処理部14とを備える。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、コンピュータプロ
グラムの最適化方法に関し、特に実行時のデータの性質
に基づくプログラムの特殊化を行う最適化方法に関す
る。
【0002】
【従来の技術】通常、プログラミング言語で記述された
プログラムのソースコードをコンパイルする際、コンピ
ュータにおける実行速度の向上を図るために、当該プロ
グラムの最適化を行っている。最適化の手法には種々の
方法があるが、オブジェクト指向プログラミング言語で
記述されたプログラムにおいては、プログラムの実行時
のデータの性質に基づいてプログラムを特殊化(specia
lization)することによる最適化手法がある。
【0003】従来のプログラムの特殊化の手法として
は、1.スタティック・コンパイラ上でコンパイル時の
み行われる特殊化と、2.スタティック・コンパイラ上
でバインディング(Binding)時及び実行時に行われる
特殊化とがある。前者の例としては、Flow-Sensitive I
nterprocedural Constant Propagation :PLDI(Programm
ing Language Design and Implementation)'95があり、
後者の例としては、Efficient Incremental Run-Time S
pecialization for Free : PLDI'99がある。
【0004】スタティック・コンパイラ上でコンパイル
時のみ行われる特殊化では、まず、プログラム内のメソ
ッドコールの引数について解析し、「必ず同じ定数値が
くると判断できる引数」を検出する。そして、検出され
た「必ず同じ定数値がくると判断できる引数」を用いて
特殊化を行う。
【0005】一方、スタティック・コンパイラ上でバイ
ンディング(Binding)時及び実行時に行われる特殊化
では、ループネストに特化してプログラムを特殊化す
る。すなわち、各ループネストのボディ(body)内で不
変とわかる変数について特殊化を行う。この方法は、ネ
ストごとにプログラムを特殊化するという特徴はある
が、基本的には上記のコンパイル時のみ行う手法と同様
に、メソッドコールを行う場所で特殊化したメソッドコ
ールを行う。
【0006】
【発明が解決しようとする課題】しかしながら、上述し
た従来のプログラムの特殊化による最適化手法は、いず
れもメソッドコールを行う場所で呼び出しメソッドを特
殊化するため、引数のパターンに対応する多くの特殊化
したメソッドが必要となり、この特殊化したメソッドに
対応する実行コードが生成される。このため、コンパイ
ル時間が増加し、かつメモリの消費量が増大していた。
【0007】また、上記従来のプログラムの特殊化によ
る最適化手法は、上述したコンパイル時間の増加、メモ
リ消費量の増大といった観点から、JavaにおけるJ
ITコンパイラ(Just In Timeコンパイラ)のようなダ
イナミック・コンパイラ(プログラムの実行時に動作す
るコンパイラ)には適用することが困難であった。
【0008】さらに、Javaで用意されているダイナ
ミック・コール(Dynamic Call)のような機能を用いた
プログラムでは、メソッドコールを行う場所で呼び出し
メソッドが特定できない場合が多い。そのため、メソッ
ドコールを行う場所で呼び出しメソッドを特殊化する上
記従来のプログラムの特殊化は実用的ではなかった。
【0009】そこで、本発明は、特殊化による最適化を
含むコンパイルにおいて、コンパイルに要する時間を短
縮し、コンパイル時のメモリ消費量を抑えることを目的
とする。また、本発明は、メソッドコールを行う場所で
呼び出しメソッドが特定できない場合であっても特殊化
を実行可能とすることを他の目的とする。
【0010】
【課題を解決するための手段】上記の目的を達成するた
め、本発明は、プログラミング言語で記述されたプログ
ラムのソースコードを機械語に変換し、最適化を行うプ
ログラムの最適化方法において、最適化の対象であるプ
ログラムにおける所定の命令のパラメータを特定の状態
に固定することによりこのプログラムの実行速度を向上
させることができるかを解析するステップと、この解析
結果に基づいて、このプログラム中に、所定の命令のパ
ラメータを特定の状態に固定したパスを生成して特殊化
するステップとを含むことを特徴とする。本発明では、
この所定の命令のパラメータを特定の状態に固定したパ
ス(特殊化されたパス)と、この所定の命令のパラメー
タを特定の状態に固定しないパス(特殊化されていない
パス)とを、分岐処理により選択的に実行させるよう
に、プログラムの最適化を行う。これにより、特殊化さ
れたパスを実行した際にプログラムの実行速度を向上さ
せることができ、かつこの特殊化されたパスを実行する
割合が大きいならば、プログラム全体の実行効率を向上
させることができる。
【0011】ここで、このパスを生成するステップは、
このプログラムを実行することにより、この解析結果
における前記命令のパラメータが取り得る状態ごとの出
現頻度の統計を取るステップと、得られた統計情報に基
づいて、この所定の命令のパラメータを特定の状態に固
定したパスを生成するステップとを含む。このように、
統計処理を行うことにより、特殊化されたパスを実行す
る確率がどの程度あるかを的確に調べることができる。
【0012】また、本発明は、プログラムの最適化方法
において、最適化の対象であるプログラムを実行するこ
とにより、このプログラムにおける所定の命令のパラメ
ータが取り得る状態ごとの出現頻度の統計を取るステッ
プと、得られた統計情報に基づいて、コンパイル結果と
して所定の命令のパラメータを特定の状態に固定したパ
スを含む機械語プログラムを生成するステップとを含む
ことを特徴とする。
【0013】さらに、この最適化方法は、この統計情報
に基づいてパラメータを特定の状態に固定できない場合
に、コンパイル結果としてパラメータの状態を固定した
パスを含まない機械語プログラムを生成するステップを
含むことができる。
【0014】また、本発明は、上記のような特殊化によ
るプログラムの最適化方法において、最適化の対象であ
るプログラムにおける命令のうちで、メソッドの呼び出
し先を限定でき、かつこのメソッドの呼び出し先を限定
することにより処理が速くなる命令を検出するステップ
と、検出された命令におけるメソッドの呼び出し先を、
この命令の処理が速くなるように限定したパスを生成す
るステップとを含むことを特徴とする。
【0015】あるいは、上記のような特殊化によるプロ
グラムの最適化方法において、最適化の対象であるプロ
グラムにおける命令のうちで、変数の値を所定の定数値
に限定でき、かつこの定数値に限定することにより処理
が速くなる命令を検出するステップと、検出された命令
における変数を、この定数値に固定したパスを生成する
ステップとを含むことを特徴とする。
【0016】また、本発明は、プログラミング言語で記
述されたプログラムのソースコードを機械語に変換し、
最適化を行うコンパイラにおいて、コンパイルの対象で
あるプログラムにおける所定の命令のパラメータを特定
の状態に固定することによりこのプログラムの実行速度
をどれだけ向上させることができるかを解析する影響度
解析部と、この影響度解析部による解析結果に基づい
て、このプログラム中に、所定の命令のパラメータを特
定の状態に固定した特殊化されたパスを生成する特殊化
処理部とを備えることを特徴とする。
【0017】さらに、このコンパイラは、このプログラ
ムを実行した場合に、この影響度解析部にて解析された
命令のパラメータが取り得る状態ごとの出現頻度の統計
を取り、得られた統計情報に基づいてこの命令のパラメ
ータをどの状態に固定するかを決定する特殊化データ選
択部をさらに備える構成とすることができる。そして、
特殊化処理部は、この命令のパラメータを、特殊化デー
タ選択部により決定された状態に固定した特殊化された
パスを生成する。
【0018】ここで、この特殊化処理部は、このプログ
ラム中に、プログラムの実行状態に応じて、特殊化され
たパスと特殊化されていないパスとを選択的に実行する
ための分岐処理を生成し、特殊化データ選択部は、この
分岐処理の挿入に基づく遅延を考慮してこの命令のパラ
メータをどの状態に固定するかを決定する構成とするこ
とができる。
【0019】さらにまた、本発明は、次のように構成さ
れたことを特徴とするコンピュータ装置として提供する
ことができる。すなわち、プログラムのソースコードを
入力する入力装置と、入力されたこのプログラムをコン
パイルして機械語コードに変換するコンパイラと、機械
語コードに変換されたこのプログラムを実行する処理装
置とを備える。また、このコンパイラは、このプログラ
ムにおける所定の命令のパラメータを特定の状態に固定
することによりこのプログラムの実行速度を向上させる
ことができるかを解析する手段と、この解析結果に基づ
いて、このプログラム中に、所定の命令のパラメータを
特定の状態に固定したパスを生成してコンパイルを行う
手段とを備える。そして、このコンパイラは、このパラ
メータの状態を固定したパスを含むコンパイル結果であ
る機械語コードに変換されたプログラムを出力する。
【0020】また、本発明は、次のように構成されたこ
とを特徴とするコンピュータ装置として提供することが
できる。すなわち、プログラムのソースコードを入力す
る入力装置と、入力されたこのプログラムをコンパイル
して機械語コードに変換するコンパイラと、機械語コー
ドに変換されたこのプログラムを実行する処理装置とを
備える。また、このコンパイラは、このプログラムを実
行した場合に、このプログラムにおける所定の命令のパ
ラメータが取り得る状態ごとの出現頻度の統計を取り、
この統計の結果に基づいてこの命令のパラメータをどの
状態に固定するかを決定する手段と、この命令のパラメ
ータを、決定された状態に固定した特殊化されたパスを
生成してコンパイルを行う手段とを備える。そして、こ
のコンパイラは、この特殊化されたパスを含むコンパイ
ル結果である機械語コードに変換されたプログラムを出
力する。
【0021】さらに、このコンパイラは、この特殊化さ
れたパスを生成することなくコンパイルを行う手段をさ
らに備える構成とすることができる。そして、このコン
パイラにおける命令のパラメータの状態を決定する手段
は、固定すべきパラメータの状態を決定できない場合
に、この特殊化されたパスを生成することなくコンパイ
ルを行う手段により生成された、この特殊化されたパス
を含まないコンパイル結果である機械語コードに変換さ
れたプログラムを出力する。
【0022】また、本発明は、次のように構成されたこ
とを特徴とするコンピュータプログラムとして提供する
ことができる。すなわち、コンピュータを制御して実行
プログラムの生成を支援する支援プログラムであって、
この実行プログラムにおける所定の命令のパラメータを
特定の状態に固定することによりこの実行プログラムの
実行速度を向上させることができるかを解析する機能
と、この解析結果に基づいて、この実行プログラム中
に、所定の命令のパラメータを特定の状態に固定したパ
スを生成する機能とをコンピュータに実現させることを
特徴とする。
【0023】あるいは、コンピュータを制御して実行プ
ログラムの生成を支援する支援プログラムであって、こ
の実行プログラムを実行することにより、この実行プロ
グラムにおける所定の命令のパラメータが取り得る状態
ごとの出現頻度の統計を取る機能と、得られた統計情報
に基づいて、この実行プログラム中に、所定の命令のパ
ラメータを特定の状態に固定したパスを生成する機能と
をコンピュータに実現させることを特徴とする。
【0024】さらに本発明は、かかるコンピュータプロ
グラムをコンピュータの入力手段が読取可能に記憶した
記憶媒体として提供したり、かかるコンピュータプログ
ラムをネットワークを介して伝送させるプログラム伝送
装置として提供したりすることもできる。
【0025】
【発明の実施の形態】以下、添付図面に示す実施の形態
に基づいて、この発明を詳細に説明する。図1は、本実
施の形態におけるコンパイラの全体構成を説明する図で
ある。図1を参照すると、本実施の形態のコンパイラ1
0は、入力プログラムに対して通常のコンパイル処理を
行う汎用コンパイル処理部11と、汎用コンパイル処理
部11によるコンパイル結果に対して影響度解析(Impa
ct Analysis)を行う影響度解析部12と、影響度解析
部12による解析結果を用いて特殊化を行うデータを選
択する特殊化データ選択部13と、特殊化データ選択部
13により選択されたデータを特殊化してオブジェクト
プログラムを生成する特殊化コンパイル処理部14とを
備える。図1に示したコンパイラ10の各構成要素は、
コンピュータプログラムにより制御されたCPUにて実
現される仮想的なソフトウェアブロックである。CPU
を制御する当該コンピュータプログラムは、CD−RO
Mやフロッピー(登録商標)ディスクなどの記憶媒体に
格納して配布したり、ネットワークを介して伝送したり
することにより提供される。
【0026】上記の構成要素において、汎用コンパイル
処理部11は、入力プログラムであるソースプログラム
を入力し、通常のコンパイル処理を行って機械語コード
によるオブジェクトプログラムを生成する。コンパイラ
10をJavaにおけるJITコンパイラにおいて実現
する場合は、ソースプログラムはバイトコードで記述さ
れたプログラムとなる。
【0027】影響度解析部12は、汎用コンパイル処理
部11によるコンパイル結果であるオブジェクトプログ
ラムを対象として、影響度解析処理を実行し、プログラ
ム内のデータにおける影響度情報を作成する。影響度解
析処理とは、「どのプログラム内のデータを、どのよう
に特殊化すると、より強力な最適化を行えるか」を調べ
る処理である。影響度情報には、この解析結果が記述さ
れる。影響度解析処理の具体的な内容については後述す
る。
【0028】特殊化データ選択部13は、影響度解析部
12による影響度解析処理の結果、特殊化による影響の
あるデータが存在する場合に、特殊化を行うデータを選
択する。具体的には、汎用コンパイル処理部11で生成
されたオブジェクトプログラムを複数回実行し、影響度
解析部12で作成された影響度情報についてデータの出
現頻度の統計を取る。すなわち、影響度解析処理の結果
において特殊化による影響があると判断されたデータ
が、どのように実行される確率が、どの程度有るかを調
べる。そして、得られた統計情報において特殊化を行う
ことにより一定以上の効果が得られると評価できるデー
タを特殊化の対象に決定する。特殊化の対象となるデー
タを選択する処理の具体的な内容については後述する。
ここで、統計を取るためには、当該プログラムが実際に
実行されることが必要である。すなわち、当該プログラ
ムを実行するシステムは、初期的には、汎用コンパイル
処理部11による通常のコンパイルを経たオブジェクト
プログラムを実行する。そして、十分な回数実行して統
計が得られた後に(統計を取るための実行回数は任意に
設定できる)、特殊化の対象となるデータの選択が行わ
れることとなる。ただし、この統計を取るための実行
は、当該統計を取ることを目的とした試験的な実行であ
っても良い。この場合、当該プログラムが実際のシステ
ムで使用される場合には最初から適切な特殊化が行われ
た状態でコンパイルされることとなる。
【0029】なお、影響度解析部12による影響度解析
処理の結果、特殊化による影響のあるデータが存在しな
い場合、特殊化データ選択部13は、上述した統計処理
を行うことなく、汎用コンパイル処理部11により生成
されたオブジェクトプログラムを出力する。また、特殊
化データ選択部13による統計処理の結果において、特
殊化すべきデータが存在しない場合、またはプログラム
の実行回数が統計処理のために設定された回数に満たな
い場合は、特殊化コンパイル処理部14に移行して特殊
化を行うことなく、汎用コンパイル処理部11により生
成されたオブジェクトプログラムを出力する。
【0030】特殊化コンパイル処理部14は、特殊化デ
ータ選択部13により特殊化の対象として選択されたデ
ータを特殊化し、特殊化されたオブジェクトプログラム
を生成して出力する。特殊化は、プログラム中の所定の
命令におけるパラメータを特定の状態(定数化や呼び出
し先の特定など)に固定することにより、パラメータの
状態を判断する処理のようなパラメータが複数の状態を
取ることに伴う処理を省略するものであり、対象である
データの種類や性質に応じて個別的に実行される。例え
ば、命令中の定数を最も頻出する値に固定したり、メソ
ッドの呼び出し先を最も多い呼び出し先に特定したりす
るといった処理が行われる。
【0031】図2は、本実施の形態によるコンパイラ1
0の全体的な処理の流れを説明するフローチャートであ
る。図2を参照すると、まず、ソースプログラムが汎用
コンパイル処理部11に入力され、当該ソースプログラ
ムに対して通常のコンパイル処理が実行される(ステッ
プ201)。次に、汎用コンパイル処理部11によるコ
ンパイル結果であるオブジェクトプログラムに対して、
影響度解析部12により影響度解析が行われる(ステッ
プ202)。そして、特殊化による影響のあるデータが
存在しない場合は、汎用コンパイル処理部11により生
成されたオブジェクトプログラムが出力されて、処理が
終了する(ステップ203)。この場合、当該プログラ
ムを実行するシステムは、汎用コンパイル処理部11の
みによってコンパイルされたオブジェクトプログラムを
実行することとなる。
【0032】影響度解析において特殊化による影響のあ
るデータが存在すると判断された場合は、次に、特殊化
データ選択部13により、影響度解析処理の結果におい
て特殊化による影響があると判断されたデータに対する
統計処理が行われ、特殊化の対象となるデータの選択が
行われる(ステップ203、204)。そして、特殊化
すべきデータが存在しない場合は、汎用コンパイル処理
部11により生成されたオブジェクトプログラムが出力
されて、処理が終了する(ステップ205)。ここで、
統計処理の結果、特殊化すべきデータが存在しない場合
は、当該プログラムを実行するシステムは、汎用コンパ
イル処理部11のみによってコンパイルされたオブジェ
クトプログラムを実行することとなる。一方、プログラ
ムの実行回数が統計処理のために設定された回数に満た
ないことにより特殊化すべきデータが選択されない場合
は、当該プログラムがさらに実行されて統計処理を行う
に十分な回数となるのを待つ。
【0033】プログラムの実行回数が統計処理のために
設定された回数に達し、統計が取られた結果、特殊化す
べきデータが存在する場合は、次に、特殊化コンパイル
処理部14により、当該データの特殊化が行われる(ス
テップ205、206)。これにより、当該プログラム
を実行するシステムは、特殊化コンパイル処理部14に
より特殊化されたオブジェクトプログラムを実行するこ
ととなる。
【0034】次に、上述した影響度解析部12による影
響度解析処理の内容及び特殊化データ選択部13による
特殊化の対象となるデータを選択する処理の内容につい
て説明する。ここでは、Java言語に対して本実施の
形態を適用した場合を例として、パラメータを特殊化す
る例と、グローバルデータの両方を特殊化する例の2つ
を挙げる。なお、以下の説明において、ALLTYPEとは実
装を行っている全ての特殊化するタイプを意味する。図
3にこの特殊化するタイプの例を示す。
【0035】図3に示す例では、特殊化のタイプとし
て、「定数」、「Nullではない」、「クラスの特
定」、「配列以外のクラスである」といったタイプが明
示されている。ここで、「定数」は、プログラムにおけ
る所定の命令中の定数を一定の値に固定する特殊化を行
う。「Nullではない」は、変数の値がNullとな
る可能性があり、かつNullであれば処理が速くなる
場合に、当該変数の値をNullに固定する特殊化を行
う。「クラスの特定」は、メソッドの呼び出し先を限定
でき、かつメソッドの呼び出し先を限定することにより
処理が速くなる場合に、当該メソッドの呼び出し先を特
定する特殊化を行う。「配列以外のクラスである」は、
プログラムがJavaのようにメソッドの呼び出し先と
して配列クラスを取ることができるプログラム言語で記
述されている場合に、当該メソッドの呼び出し先を配列
クラスに特定する特殊化を行う。なお、特殊化のタイプ
は、プログラムの種類や実装するシステム、使用環境な
どに応じて種々のタイプを設定することができる。
【0036】また、図3の命令欄には、これらの特殊化
を行う可能性のある命令の種類が記載されている。例え
ば、プログラム中に四則演算やオブジェクト以外の変数
に対する比較命令が含まれていたならば、これらの命令
は「定数」タイプの特殊化を行うことにより処理効率が
向上する可能性がある。同様に、プログラム中にINSTAN
CEOF、CHECKCAST、仮想的なメソッド呼び出し命令など
が含まれていたならば、これらの命令は「クラスの特
定」タイプの特殊化を行うことにより処理効率が向上す
る可能性がある。したがって、これらの命令は影響度解
析部12による影響度解析処理の対象となる。
【0037】(1)パラメータの特殊化 まず、パラメータを特殊化する場合における本実施の形
態の動作アルゴリズムを説明する。最初に、汎用コンパ
イル処理部11が、入力されたソースプログラムに対し
て通常の(特殊化を行わない)コンパイル処理を行う
(図2、ステップ201参照)。このとき、UD−ch
ain(use-definition chain:使用−定義連鎖)及び
DU−chain(definition-use chain:定義−使用
連鎖)も作成しておく。
【0038】次に、影響度解析部12が、汎用コンパイ
ル処理部11によるコンパイル結果(特殊化されていな
いオブジェクトプログラム)に対して影響度解析処理を
行う(図2、ステップ202参照)。影響度解析処理と
しては、まず、プログラム中のパラメータ(変数)に対
して、予め影響度解析の対象として設定された特殊化の
各タイプ(図3参照)に対して、特殊化を行った場合に
おける効果を見積もる。
【0039】ここで、特殊化を行った場合の効果につい
て説明する。特殊化を行うとは、ここでは、複数の値を
取る可能性のあるパラメータを含む命令に関して、当該
パラメータが特定の値を取るものとしてプログラムを書
き換えることを意味する。これに伴い、当該パラメータ
が当該特定の値以外の値を取る場合に対応するため、当
該命令の前にガードコードを挿入し、特殊化されていな
いパスへの分岐処理を行う必要が生じる。したがって、
パラメータを特殊化しても特殊化したパスの実行速度が
特殊化前と変わらない場合、ガードコードを挿入した分
だけプログラム全体の実行速度は遅くなる。一方、特殊
化したパスの実行速度が特殊化前よりも速くなるなら
ば、ガードコードを挿入したことによる遅延分を越えて
プログラム全体の実行速度が向上する可能性がある。
【0040】そこで、特殊化を行った場合の効果を見積
もり、これとガードコードの挿入による遅延を基準とす
るしきい値Aとを比較することにより、プログラム全体
の実行速度に対する影響の度合いを調べる。この影響の
度合いは、例えば、ガードコードの挿入による遅延に対
する特殊化の効果の比で表すことができる(以下、この
値を影響度値と呼ぶ)。この場合、影響度値が1である
とは、特殊化されたパスの実行速度の向上分がガードコ
ードの挿入による遅延分と等しい(すなわち、プログラ
ム全体の実行速度は変わらない)ことを意味する。そし
て、特殊化されたパスの実行速度の向上がプログラム全
体の実行速度に対して一定以上の影響を与える場合に、
当該特殊化におけるパラメータ及び特定の値を、特殊化
による影響のあるデータ(以下、特殊化対象データ)と
して影響度情報に記述する。また、影響度情報には、か
かる特殊化におけるプログラム全体の実行速度に対する
影響度値を記述する。
【0041】なお、しきい値Aを適当に設定することに
より、プログラム全体の実行速度に対してどの程度の影
響を与える場合に特殊化対象データを影響度情報に記述
するかを調節することができる。しきい値Aを小さく設
定すれば、わずかでもプログラム全体の実行速度を向上
させる特殊化対象データが、影響度情報に記述されるこ
ととなる。一方、しきい値Aを大きく設定すれば、相当
程度プログラム全体の実行速度を向上させる特殊化対象
データでなければ、影響度情報に記述されない。しかし
この場合、影響度情報に記述される特殊化対象データの
数が減るので、特殊化データ選択部13による統計処理
のコストを削減し、特殊化データ選択部13を実現する
CPUの負担を軽減することができる。
【0042】図4は、上述したパラメータに対する特殊
化における影響度解析処理のアルゴリズムを説明する図
である。図4のアルゴリズムにおける6行目の “Estimate(impact, p, p, φ);” において特殊化の効果を見積もる。かかる処理の具体的
な内容(アルゴリズム)は図5に示す。
【0043】また、図4のアルゴリズムにおける8、9
行目の “if (Impact[p][type] > しきい値A)” “Effective ∪={ p, type };” において特殊化の効果としきい値Aとを比較し、影響度
情報に記述する情報を決定している。8行目のコメント
にあるように、しきい値Aの値を1とすれば、ガードコ
ードの挿入による遅延分だけ特殊化されたパスの実行速
度が向上する。したがって、プログラム全体の実行速度
を向上させるには、しきい値Aの値を1よりも大きくす
る必要がある。
【0044】次に、特殊化データ選択部13が、影響度
解析部12による影響度解析処理の結果に基づいて、特
殊化を実行するデータを選択する(図2、ステップ20
3、204参照)。図6は、特殊化データ選択部13に
よる統計処理のアルゴリズムを説明する図である。図6
において、3行目にあるように、影響度情報に記述され
たパラメータ(p)に対して、対応する特殊化の方法
(type)に固有の条件で統計を取る。また、1行目
にあるように、影響度情報(Effective)にデ
ータが記述されていない場合(φ空集合)は、統計処理
を行わない。
【0045】次に、特殊化データ選択部13は、統計処
理により得られた統計情報に基づいて、特殊化を実行す
るデータ(以下、特殊化実行データ)を選択する。上述
したように、特殊化とは、複数の値を取る可能性のある
パラメータを含む命令に関して、当該パラメータが特定
の値を取るものとしてプログラムを書き換えることであ
る。したがって、パラメータが取り得る値は複数あり、
その個数だけ特殊化のバリエーションが存在することと
なる。そこで、特殊化のバリエーションごとに出現頻度
の統計を取り、パラメータが取り得る値のうちで最も頻
出する値を選び、これを特殊化実行データとする。ただ
し、最も頻出する値であっても、全体に対して十分大き
な確率で出現しなければ、プログラム全体の処理効率が
向上しないと考えられる場合がある。すなわち、パラメ
ータの取り得る値が多数ある場合、各値が同程度の確率
で出現するならば、最も頻出する値であっても出現率が
大きくならない場合があり得る。この場合、特殊化を行
ったとしても、特殊化されていないパスが実行される確
率が高いため、ガードコードを挿入したことによる遅延
がプログラム全体の実行速度に大きく影響することとな
る。したがって、ここでは、パラメータが取り得る値の
うちで最も頻出する値について、このパラメータがこの
最頻出値を取る確率を統計情報から取得し、この最頻出
値が出現する確率と、この最頻出値で特殊化した場合に
おける影響度値とを乗じた値を算出する。そして、得ら
れた乗算値とガードコードの挿入による遅延を基準とす
るしきい値Bとを比較することにより、プログラム全体
の処理効率が向上するかどうかを調べる。これにより、
一定以上の効果が得られる場合に、当該最頻出値を上述
した特殊化実行データとして最終的に選択する。
【0046】なお、しきい値Bを適当に設定することに
より、特殊化によるプログラムの最適化が当該プログラ
ム全体の実行効率に対してどの程度の影響を与えるかを
制御することができる。しきい値Bを小さく設定すれ
ば、上述した考え方に基づいて、特殊化を行わない場合
よりもわずかでも実行効率が上がると考えられる場合に
特殊化を行うこととなる。一方、しきい値Bを大きく設
定すれば、相当程度プログラムの実行効率を向上させる
と考えられる場合でなければ特殊化を行わない。しかし
この場合、特殊化を行う箇所を特殊化の効果の大きい場
所に制限することとなるため、コンパイルの際のCPU
の負担を軽減し、かつ効果の大きい最適化を実現するこ
とができる。そのため、しきい値Bを適切に設定するこ
とにより、コンパイルに要する時間をあまり増大させる
ことなく特殊化を実行することができ、Javaにおけ
るJITコンパイラのような、プログラムを実行する際
にコンパイルを行うダイナミック・コンパイラに対して
も適用することが可能となる。
【0047】特殊化データ選択部13により上記のよう
にして決定される特殊化実行データと、影響度解析部1
2により決定される特殊化対象データとを比較すると、
影響度解析部12により決定される特殊化対象データ
は、特殊化することによってプログラム全体の実行速度
の向上が見込まれる全てのパラメータに関するデータで
あり、特殊化データ選択部13により決定される特殊化
実行データは、特殊化対象データのうちでプログラム全
体の実行効率を最も向上させるパラメータに関するデー
タである。
【0048】図7は、上述したパラメータに対する特殊
化における特殊化実行データを選択する処理のアルゴリ
ズムを説明する図である。図7のアルゴリズムにおける
3行目の “odds ={ p, type }に関する統計の中で,もっとも
優秀だった確率;” において、パラメータが取り得る値の最頻出値の出現率
を求める。また、4行目の “val = oddsに対応する{ p, type }の値;” において、最頻出値自体を求める。そして、5、6行目
の “if (Impact[p][type] * odds > しきい値B)” “Specialize ∪={ p, type, val };” において、最頻出値の出現率とこの最頻出値に対応する
影響度値とを乗算し、その乗算値としきい値Bとを比較
し、特殊化を実行するデータを決定している。なお、9
行目にあるように、所定のパラメータに関して特殊化を
実行するデータ(Specialize)が決定されな
かった場合(φ空集合)は、当該パラメータに対する特
殊化コンパイル処理部14による特殊化は行わない(図
2、ステップ205参照)。
【0049】最後に、特殊化コンパイル処理部14が、
特殊化データ選択部13により選択された特殊化実行デ
ータに対して、実際に特殊化を実行する。特殊化は、上
述したように、パラメータの種類や特殊化実行データの
値に応じて個別的に実行される。
【0050】以上のように、本実施の形態では、特殊化
によりプログラム全体の実行速度が向上する程度とかか
る特殊化されたプログラムが実行される頻度とに基づい
て、当該プログラム全体の実行効率を考える。このた
め、従来の特殊化において、所定のパラメータが必ず定
数値を取る場合など極めて限定された場合でのみ特殊化
が可能であったのに対し、本実施の形態は、特殊化によ
ってプログラム全体の実行効率が一定以上向上すると考
えられる場合には特殊化を行うことができる。また、従
来、プログラム中の特殊化できる可能性のある全てのパ
ラメータに対して特殊化が可能かどうかを調べて特殊化
を実行していたのに対し、本実施の形態は、特殊化コン
パイル処理部14により特殊化を実行する前に、影響度
解析部12による影響度解析処理を行い、さらに特殊化
データ選択部13により特殊化の対象となる値の実際の
出現頻度を統計処理するという二重の処理により、特殊
化の対象とするパラメータを絞り込んでいる。これによ
って、特殊化を行う場合のコンパイル時間及びメモリ消
費量の増加を少なく抑えることができる。さらに、本実
施の形態は、メソッドコールを行う場所で呼び出しメソ
ッドを特殊化するのではなく、実際に呼ばれたメソッド
について解析して特殊化を行う。このため、メソッドコ
ールを行う場所で呼び出しメソッドを特定できない場合
であっても、特殊化を行うことができる。
【0051】次に、上述したパラメータの特殊化の適用
例を説明する。図8は、本適用例に用いるサンプルプロ
グラム(以下、第1のサンプルプログラムと記す)を示
す図である。コンパイラ10に図8の第1のサンプルプ
ログラムが入力されると、まず、汎用コンパイル処理部
11により、当該第1のサンプルプログラムに対して通
常のコンパイルが行われる。ただし、第1のサンプルプ
ログラムは、この通常のコンパイルにおける最適化で
は、特に変更される箇所はない。なお、これ以降、第1
のサンプルプログラムはコンパイルの過程で最適化が行
われるため、コンパイル結果は機械語で記述されたオブ
ジェクトプログラムとなっている。しかしながら、説明
の簡単のため、ここではソースプログラムの状態のまま
で記述する。以下の他の適用例についても同様である。
【0052】次に、影響度解析部12により、汎用コン
パイル処理部11によるコンパイル結果に対して影響度
解析処理が行われ、特殊化による効果が見込まれる特殊
化対象データが抽出される。図9は、図8に示した第1
のサンプルプログラムに対する影響度解析処理の結果を
示す図である。図9(A)を参照すると、パラメータ
(図示のp欄)srcBeginが何らかの定数値を取る場合
(「定数」タイプの特殊化を行った場合)に、影響度値
2.25が得られる。また、パラメータsrcEndが何らか
の定数値を取る場合に、影響度値1.25が得られる。
したがって、図9(A)に提示された第1のサンプルプ
ログラム中の4つのパラメータのうち、srcBegin及びsr
cEndの2つについて、定数値の出現頻度の統計を取れば
よいことがわかる。そして、この2つのパラメータに関
する情報が特殊化対象データとして影響度情報に記述さ
れる。なお、図9(B)には、第1のサンプルプログラ
ムのソースプログラム中におけるパラメータsrcBegin、
srcEndの位置を示してある(太字で記し、下線を付して
ある)。
【0053】次に、特殊化データ選択部13により、パ
ラメータsrcBegin、srcEndに関して、取り得る値ごとに
出現頻度の統計が取られる。図10は、得られた統計情
報の例を示す図である。なお、図示の例は、第1のサン
プルプログラムに対してSPECjvm98の中のJackベンチマ
ークを使った場合における統計結果である。
【0054】次に、上記の統計情報に基づいて、特殊化
データ選択部13により、特殊化実行データが決定され
る。図10の統計結果を参照すると、srcBeginについて
は、定数値として値0を取る確率が100%である。ま
た、srcEndについては、定数値として値1を取る確率が
68%、値0を取る確率が15%、値2を取る確率が4
%、値3を取る確率が3%、値4を取る確率が3%であ
る。その他の値については出現率が小さいので省略して
ある。
【0055】以上の統計情報によれば、srcBeginについ
ては、特定の定数値の出現率が100%であり、その影
響度値が2.25であるため、その乗算値は2.25と
なる。この値はガードコードの挿入による遅延分の1よ
りも大きい。したがって、srcBeginは特殊化実行データ
とされる。一方、srcEndについては、最も頻出する値1
の場合で出現率が68%であり、影響度値が1.25で
あるため、その乗算値は0.85となる。この値はガー
ドコードの挿入による遅延分の1よりも小さい。したが
って、プログラム全体の実行効率に対する影響は、srcB
eginを特殊化することによる実行速度の向上よりもガー
ドコードを挿入したことによる遅延の方が大きいことと
なる。また、1以外の値では、出現率が小さくなるた
め、プログラム全体の実行効率に対する影響がさらに小
さくなることは自明である。したがって、この適用例で
は、srcBeginのみが特殊化実行データとなる。
【0056】以上の処理の後、特殊化コンパイル処理部
14により、図8に示した第1のサンプルプログラムに
おけるsrcBeginが値0に特殊化されてコンパイルされ
る。図11は、図8の第1のサンプルプログラムに対し
て、かかる特殊化が行われた状態のソースプログラムを
示す図である。
【0057】次に、パラメータの特殊化の他の適用例を
説明する。図12は、本適用例に用いるサンプルプログ
ラム(以下、第2のサンプルプログラムと記す)を示す
図である。コンパイラ10に図12の第2のサンプルプ
ログラムが入力されると、まず、汎用コンパイル処理部
11により、当該第2のサンプルプログラムに対して通
常のコンパイルが行われる。図13は、図12の第2の
サンプルプログラムに対して通常のコンパイルにおける
最適化が行われた状態を示す図である。ここでは、ch
eckcastの除去などの若干の最適化が実現されて
いる。
【0058】次に、影響度解析部12により、汎用コン
パイル処理部11によるコンパイル結果に対して影響度
解析処理が行われ、特殊化による効果が見込まれる特殊
化対象データが抽出される。図14は、図12に示した
第2のサンプルプログラムに対する影響度解析処理の結
果を示す図である。図14を参照すると、パラメータe
のクラスが特定されている場合に、影響度値3.94が
得られる。したがって、このパラメータeについて、ク
ラスの出現頻度の統計を取ればよいことがわかる。そし
て、このパラメータeに関する情報が特殊化対象データ
として影響度情報に記述される。なお、図13のプログ
ラムにおいて太字で記し下線を付した部分が、パラメー
タeを含み、特殊化による効果が見込まれる部分であ
る。
【0059】次に、特殊化データ選択部13により、パ
ラメータeに関して、取り得るクラスごとに出現頻度の
統計が取られる。そして、得られた統計情報に基づいて
特殊化実行データが決定される。具体的な統計情報の提
示は省略するが、ここでは、パラメータeがKeyEventと
いうクラスである場合が最も出現率が高く、この場合の
出現率と影響度値との乗算値はガードコードの挿入によ
る遅延分の1よりも大きいものとする。したがって、パ
ラメータeは特殊化実行データとされる。
【0060】以上の処理の後、特殊化コンパイル処理部
14により、図12に示した第2のサンプルプログラム
におけるパラメータeのクラスがKeyEventに特殊化され
てコンパイルされる。図15は、図12の第2のサンプ
ルプログラムに対して、かかる特殊化が行われた状態の
ソースプログラムを示す図である。
【0061】さらにここで、特殊化のタイプとして「ク
ラスの特定 かつ Nullでない」という組合せの状
態が定義されている場合を考える。この場合、上述した
各処理を経て、図15における3行目の “if (e != null)” が特殊化されることとなる。図16は、かかる特殊化が
行われた状態のソースプログラムを示す図である。
【0062】(2)グローバルデータの特殊化 次に、グローバルデータを特殊化する場合における本実
施の形態の同アルゴリズムを説明する。なお、実際のコ
ンパイル処理においては、グローバルデータに対する特
殊化と上述したパラメータに対する特殊化とを区別する
ことなく実行するが、ここでは、説明上グローバルデー
タに対する特殊化のみを説明し、後述する適用例におい
てパラメータ及びグローバルデータに対する特殊化の例
を示す。
【0063】最初に、汎用コンパイル処理部11が、入
力されたソースプログラムに対して通常の(特殊化を行
わない)コンパイル処理を行う(図2、ステップ201
参照)。このとき、グローバルデータをメソッドローカ
ルな変数に置き換えるScalarreplacementの最適化を行
うと共に、UD−chain(使用−定義連鎖)及びD
U−chain(定義−使用連鎖)の作成を行ってお
く。
【0064】Scalar replacementの最適化を行うアルゴ
リズムとして、 Lazy Code Motion : PLDI'92 に記載されたアルゴリズムがある。このアルゴリズムに
は、Down-Safetyという集合情報を計算する部分があ
る。これは、メソッド内の式を実行とは逆方向に動かす
時に、その式の結果が変わらないと判断できる領域を集
合として求めるものである。したがって、Scalar repla
cementの最適化にLazy Code Motionのアルゴリズムを用
いる場合、このDown-Safetyという集合情報を利用する
ことにより、「メソッドの先頭にグローバルデータのア
クセスを移動できる」と判断できるアクセスの集合を求
めることができる。そして、この情報をグローバルデー
タに対する特殊化に用いる。
【0065】次に、影響度解析部12が、汎用コンパイ
ル処理部11によるコンパイル結果(特殊化されていな
いオブジェクトプログラム)に対して影響度解析処理を
行う(図2、ステップ202参照)。影響度解析処理と
しては、まず、「メソッドの先頭にグローバルデータの
アクセスを移動できる集合」が「DownSafety[メソッド
の先頭]」に入っていると仮定し、この結果が格納され
たローカル変数を定義する。この後、定義されたローカ
ル変数に対して、予め影響度解析の対象として設定され
た特殊化の各タイプ(図3参照)に対して、特殊化を行
った場合における効果を見積もり、特殊化対象データを
決定して影響度情報を作成する。これらの動作の内容
は、(1)パラメータに対する特殊化の場合と同様であ
る。
【0066】図17は、上述したグローバルデータに対
する特殊化における影響度解析処理のアルゴリズムを説
明する図である。図17のアルゴリズムにおける3、4
行目の “for (each p ∈ DownSafety[メソッドの先頭])” “lvar = pの結果が格納されたローカル変数;” においてグローバルデータのローカル変数化を実現して
いる。また、8行目の “Estimate(impact, lvar, lvar, φ);” の処理の内容は、図5に示したパラメータの特殊化にお
ける特殊化の効果を見積もる処理と同様である。
【0067】次に、特殊化データ選択部13が、影響度
解析部12による影響度解析処理の結果に基づいて、統
計処理を行い、特殊化を行うグローバルデータ及びその
値(実行データ)を決定する(図2、ステップ203、
204参照)。これらの処理は、上述したパラメータの
特殊化における特殊化データ選択部13の処理と同様で
ある。
【0068】最後に、特殊化コンパイル処理部14が、
特殊化データ選択部13により選択された特殊化実行デ
ータに対して、実際に特殊化を実行する。特殊化は、上
述したように、パラメータの種類や特殊化実行データの
値に応じて個別的に実行される。
【0069】次に、パラメータ及びグローバルデータの
特殊化の適用例を説明する。図18は、本適用例に用い
るサンプルプログラム(以下、第3のサンプルプログラ
ムと記す)を示す図である。コンパイラ10に図18の
第3のサンプルプログラムが入力されると、まず、汎用
コンパイル処理部11により、当該第3のサンプルプロ
グラムに対して通常のコンパイルが行われる。図19
は、図18の第3のサンプルプログラムに対して通常の
コンパイルにおける最適化が行われた状態を示す図であ
る。
【0070】次に、影響度解析部12により、汎用コン
パイル処理部11によるコンパイル結果に対して影響度
解析処理が行われ、特殊化による効果が見込まれる特殊
化対象データが抽出される。ここでは、上述したパラメ
ータに対する影響度解析処理と、グローバルデータに対
する影響度解析処理とが区別なく実行される。図20
は、図19に示したサンプルプログラム3のコンパイル
結果に対する影響度解析処理の結果を示す図である。図
20を参照すると、パラメータfromIndexが何らかの定
数値を取る場合に、影響度値1.75が得られる。ま
た、パラメータthis. offsetが何らかの定数値を取る場
合に、影響度値5.75が得られる。また、パラメータ
this. countが何らかの定数値を取る場合に、影響度値
5.75が得られる。したがって、図20に提示された
5つのパラメータのうち、fromIndex、this. offset及
びthis. countの3つについて、定数値の出現頻度の統
計を取ればよいことがわかる。そして、この3つのパラ
メータに関する情報が特殊化対象データとして影響度情
報に記述される。なお、図19に示したように、汎用コ
ンパイル処理部11のコンパイルによってサンプルプロ
グラム3におけるグローバルデータであるthis. offset
やthis.countがローカル変数に変換されているため、
図20においては、これらのパラメータが他のパラメー
タchなどと区別なく扱われていることがわかる。また、
図19のプログラムにおいて太字で記し下線を付した部
分が、パラメータfromIndex、this. offset及びthis. c
ountの位置である。
【0071】次に、特殊化データ選択部13により、パ
ラメータfromIndex、this. offset及びthis. countに関
して、取り得る値ごとに出現頻度の統計が取られる。そ
して、得られた統計情報に基づいて特殊化実行データが
決定される。具体的な統計情報の提示は省略するが、こ
こでは、fromIndexは定数値0、this. offsetは定数値
0、this. countは定数値4を取る場合がそれぞれ最も
出現率が高く、この場合の出現率と影響度値との乗算値
はガードコードの挿入による遅延分の1よりも大きいも
のとする。したがって、パラメータfromIndex、this. o
ffset及びthis. countは特殊化実行データとされる。
【0072】以上の処理の後、特殊化コンパイル処理部
14により、図19に示した通常のコンパイル後のサン
プルプログラム3におけるfromIndexが値0に、this. o
ffsetが値0に、this. countが値4にそれぞれ特殊化さ
れてコンパイルされる。図21は、図19のプログラム
に対して、かかる特殊化が行われた状態のソースプログ
ラムを示す図である。
【0073】
【発明の効果】以上説明したように、本発明によれば、
影響度解析処理及び統計処理を経ることにより、コンパ
イルに要する時間を短縮し、かつコンパイル時のメモリ
消費量を抑えることができる。また、本発明によれば、
メソッドコールを行う場所で呼び出しメソッドが特定で
きない場合であっても特殊化を実行可能とすることがで
きる。
【図面の簡単な説明】
【図1】 本実施の形態におけるコンパイラの全体構成
を説明する図である。
【図2】 本実施の形態によるコンパイラの全体的な処
理の流れを説明するフローチャートある。
【図3】 本実施の形態における特殊化のタイプと特殊
化を行う命令との対応関係を示す図表である。
【図4】 本実施の形態のパラメータの特殊化における
影響度解析処理のアルゴリズムを説明する図である。
【図5】 本実施の形態のパラメータの特殊化における
特殊化の効果を見積もる処理のアルゴリズムを説明する
図である。
【図6】 本実施の形態のパラメータの特殊化における
特殊化データ選択部による統計処理のアルゴリズムを説
明する図である。
【図7】 本実施の形態のパラメータの特殊化における
特殊化実行データを選択する処理のアルゴリズムを説明
する図である。
【図8】 本実施の形態のパラメータの特殊化における
一適用例に用いるサンプルプログラムを示す図である。
【図9】 図8に示したサンプルプログラムに対する影
響度解析処理の結果を示す図である。
【図10】 図8に示したサンプルプログラムに対する
統計情報の例を示す図である。
【図11】 図8のサンプルプログラムに対して特殊化
が行われた状態のソースプログラムを示す図である。
【図12】 本実施の形態のパラメータの特殊化におけ
る他の適用例に用いるサンプルプログラムを示す図であ
る。
【図13】 図12のサンプルプログラムに対して通常
のコンパイルにおける最適化が行われた状態を示す図で
ある。
【図14】 図12に示したサンプルプログラムに対す
る影響度解析処理の結果を示す図である。
【図15】 図12のサンプルプログラムに対して特殊
化が行われた状態のソースプログラムを示す図である。
【図16】 図12のサンプルプログラムに対してさら
に他の条件で特殊化が行われた状態のソースプログラム
を示す図である。
【図17】 本実施の形態のグローバルデータに対する
特殊化における影響度解析処理のアルゴリズムを説明す
る図である。
【図18】 本実施の形態のグローバルデータに対する
特殊化における一適用例に用いるサンプルプログラムを
示す図である。
【図19】 図18のサンプルプログラムに対して通常
のコンパイルにおける最適化が行われた状態を示す図で
ある。
【図20】 図19に示したサンプルプログラムのコン
パイル結果に対する影響度解析処理の結果を示す図であ
る。
【図21】 図19のプログラムに対して特殊化が行わ
れた状態のソースプログラムを示す図である。
【符号の説明】
10…コンパイラ、11…汎用コンパイル処理部、12
…影響度解析部、13…特殊化データ選択部、14…特
殊化コンパイル処理部
───────────────────────────────────────────────────── フロントページの続き (72)発明者 川人 基弘 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 小松 秀昭 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 (72)発明者 ジョン・ファレイ 神奈川県大和市下鶴間1623番地14 日本ア イ・ビー・エム株式会社 東京基礎研究所 内 Fターム(参考) 5B081 AA09 CC21

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、最適化を行うプ
    ログラムの最適化方法において、 前記プログラムにおける所定の命令のパラメータを特定
    の状態に固定することにより当該プログラムの実行速度
    を向上させることができるかを解析するステップと、 前記解析の結果に基づいて、前記プログラム中に、所定
    の命令のパラメータを特定の状態に固定したパスを生成
    するステップとを含むことを特徴とするプログラムの最
    適化方法。
  2. 【請求項2】 前記パスを生成するステップは、 前記プログラムを実行することにより、前記解析の結果
    における前記命令のパラメータが取り得る状態ごとの出
    現頻度の統計を取るステップと、 得られた統計情報に基づいて、前記パスを生成するステ
    ップとを含む請求項1に記載のプログラムの最適化方
    法。
  3. 【請求項3】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、最適化を行うプ
    ログラムの最適化方法において、 前記プログラムを実行することにより、前記プログラム
    における所定の命令のパラメータが取り得る状態ごとの
    出現頻度の統計を取るステップと、 得られた統計情報に基づいて、コンパイル結果として所
    定の命令のパラメータを特定の状態に固定したパスを含
    む機械語プログラムを生成するステップとを含むことを
    特徴とするプログラムの最適化方法。
  4. 【請求項4】 前記統計情報に基づいてパラメータを特
    定の状態に固定できない場合に、コンパイル結果として
    パラメータの状態を固定したパスを含まない機械語プロ
    グラムを生成するステップをさらに含む請求項3に記載
    のプログラムの最適化方法。
  5. 【請求項5】 オブジェクト指向プログラミング言語で
    記述されたプログラムのソースコードを機械語に変換
    し、最適化を行うプログラムの最適化方法において、 前記プログラムにおける命令のうちで、メソッドの呼び
    出し先を限定でき、かつ当該メソッドの呼び出し先を限
    定することにより処理が速くなる命令を検出するステッ
    プと、 検出された前記命令におけるメソッドの呼び出し先を、
    当該命令の処理が速くなるように限定したパスを生成す
    るステップとを含むことを特徴とするプログラムの最適
    化方法。
  6. 【請求項6】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、最適化を行うプ
    ログラムの最適化方法において、 前記プログラムにおける命令のうちで、変数の値を所定
    の定数値に限定でき、かつ当該定数値に限定することに
    より処理が速くなる命令を検出するステップと、 検出された前記命令における変数を、前記定数値に固定
    したパスを生成するステップとを含むことを特徴とする
    プログラムの最適化方法。
  7. 【請求項7】 プログラミング言語で記述されたプログ
    ラムのソースコードを機械語に変換し、最適化を行うコ
    ンパイラにおいて、 前記プログラムにおける所定の命令のパラメータを特定
    の状態に固定することにより当該プログラムの実行速度
    をどれだけ向上させることができるかを解析する影響度
    解析部と、 前記影響度解析部による解析結果に基づいて、前記プロ
    グラム中に、所定の命令のパラメータを特定の状態に固
    定した特殊化されたパスを生成する特殊化処理部とを備
    えることを特徴とするコンパイラ。
  8. 【請求項8】 前記プログラムを実行した場合に、前記
    影響度解析部にて解析された前記命令のパラメータが取
    り得る状態ごとの出現頻度の統計を取り、得られた統計
    情報に基づいて当該命令のパラメータをどの状態に固定
    するかを決定する特殊化データ選択部をさらに備え、 前記特殊化処理部は、前記命令のパラメータを、前記特
    殊化データ選択部により決定された状態に固定した特殊
    化されたパスを生成する請求項7に記載のコンパイラ。
  9. 【請求項9】 前記特殊化処理部は、前記プログラム中
    に、プログラムの実行状態に応じて、前記特殊化された
    パスと特殊化されていないパスとを選択的に実行するた
    めの分岐処理を生成し、 前記特殊化データ選択部は、前記分岐処理の挿入に基づ
    く遅延を考慮して前記命令のパラメータをどの状態に固
    定するかを決定する請求項8に記載のコンパイラ。
  10. 【請求項10】 プログラムのソースコードを入力する
    入力装置と、 入力された前記プログラムをコンパイルして機械語コー
    ドに変換するコンパイラと、 機械語コードに変換された前記プログラムを実行する処
    理装置とを備えたコンピュータ装置において、 前記コンパイラは、 前記プログラムにおける所定の命令のパラメータを特定
    の状態に固定することにより当該プログラムの実行速度
    を向上させることができるかを解析する手段と、 前記解析の結果に基づいて、前記プログラム中に、所定
    の命令のパラメータを特定の状態に固定したパスを生成
    してコンパイルを行う手段とを備え、 前記パラメータの状態を固定したパスを含むコンパイル
    結果である機械語コードに変換されたプログラムを出力
    することを特徴とするコンピュータ装置。
  11. 【請求項11】 プログラムのソースコードを入力する
    入力装置と、 入力された前記プログラムをコンパイルして機械語コー
    ドに変換するコンパイラと、 機械語コードに変換された前記プログラムを実行する処
    理装置とを備えたコンピュータ装置において、 前記コンパイラは、 前記プログラムを実行した場合に、前記プログラムにお
    ける所定の命令のパラメータが取り得る状態ごとの出現
    頻度の統計を取り、当該統計の結果に基づいて当該命令
    のパラメータをどの状態に固定するかを決定する手段
    と、 前記命令のパラメータを、決定された前記状態に固定し
    た特殊化されたパスを生成してコンパイルを行う手段と
    を備え、 前記特殊化されたパスを含むコンパイル結果である機械
    語コードに変換されたプログラムを出力することを特徴
    とするコンピュータ装置。
  12. 【請求項12】 前記コンパイラは、 前記特殊化されたパスを生成することなくコンパイルを
    行う手段をさらに備え、 前記コンパイラにおける前記命令のパラメータの状態を
    決定する前記手段は、固定すべきパラメータの状態を決
    定できない場合に、前記特殊化されたパスを生成するこ
    となくコンパイルを行う前記手段により生成された、前
    記特殊化されたパスを含まないコンパイル結果である機
    械語コードに変換されたプログラムを出力する請求項1
    1に記載のコンピュータ装置。
  13. 【請求項13】 コンピュータを制御して実行プログラ
    ムの生成を支援する支援プログラムであって、 前記実行プログラムにおける所定の命令のパラメータを
    特定の状態に固定することにより当該実行プログラムの
    実行速度を向上させることができるかを解析する機能
    と、 前記解析の結果に基づいて、前記実行プログラム中に、
    所定の命令のパラメータを特定の状態に固定したパスを
    生成する機能とを前記コンピュータに実現させることを
    特徴とする支援プログラム。
  14. 【請求項14】 コンピュータを制御して実行プログラ
    ムの生成を支援する支援プログラムであって、 前記実行プログラムを実行することにより、前記実行プ
    ログラムにおける所定の命令のパラメータが取り得る状
    態ごとの出現頻度の統計を取る機能と、 得られた統計情報に基づいて、前記実行プログラム中
    に、所定の命令のパラメータを特定の状態に固定したパ
    スを生成する機能とを前記コンピュータに実現させるこ
    とを特徴とする支援プログラム。
  15. 【請求項15】 コンピュータを制御して実行プログラ
    ムの生成を支援する支援プログラムを当該コンピュータ
    の入力手段が読取可能に記憶した記憶媒体において、 前記支援プログラムは、 実行プログラムにおける所定の命令のパラメータを特定
    の状態に固定することにより当該実行プログラムの実行
    速度を向上させることができるかを解析する機能と、 前記解析の結果に基づいて、前記実行プログラム中に、
    所定の命令のパラメータを特定の状態に固定したパスを
    生成する機能とを前記コンピュータに実現させることを
    特徴とする記憶媒体。
  16. 【請求項16】 コンピュータを制御して実行プログラ
    ムの生成を支援する支援プログラムを当該コンピュータ
    の入力手段が読取可能に記憶した記憶媒体において、 前記支援プログラムは、 前記実行プログラムを実行することにより、前記実行プ
    ログラムにおける所定の命令のパラメータが取り得る状
    態ごとの出現頻度の統計を取る機能と、 得られた統計情報に基づいて、前記実行プログラム中
    に、所定の命令のパラメータを特定の状態に固定したパ
    スを生成する機能とを前記コンピュータに実現させるこ
    とを特徴とする記憶媒体。
JP2001055996A 2001-02-28 2001-02-28 プログラムの最適化方法及びこれを用いたコンパイラ Pending JP2002259135A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2001055996A JP2002259135A (ja) 2001-02-28 2001-02-28 プログラムの最適化方法及びこれを用いたコンパイラ
US10/085,455 US20040015918A1 (en) 2001-02-28 2002-02-27 Program optimization method and compiler using the program optimization method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2001055996A JP2002259135A (ja) 2001-02-28 2001-02-28 プログラムの最適化方法及びこれを用いたコンパイラ

Publications (1)

Publication Number Publication Date
JP2002259135A true JP2002259135A (ja) 2002-09-13

Family

ID=18916095

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001055996A Pending JP2002259135A (ja) 2001-02-28 2001-02-28 プログラムの最適化方法及びこれを用いたコンパイラ

Country Status (2)

Country Link
US (1) US20040015918A1 (ja)
JP (1) JP2002259135A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199520A (ja) * 2008-02-25 2009-09-03 Nec Corp コンパイラ、コンパイル方法、及び、プログラム
JP2011065220A (ja) * 2009-09-15 2011-03-31 Internatl Business Mach Corp <Ibm> コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
JP2013156971A (ja) * 2012-02-01 2013-08-15 Internatl Business Mach Corp <Ibm> コンパイル方法、プログラムおよび情報処理装置
US8612948B2 (en) 2010-04-05 2013-12-17 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8938728B2 (en) 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US9921858B2 (en) 2014-09-16 2018-03-20 International Business Machines Corporation Apparatus and method for realizing runtime system for programming language

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040207622A1 (en) * 2003-03-31 2004-10-21 Deering Michael F. Efficient implementation of shading language programs using controlled partial evaluation
US20060236310A1 (en) * 2005-04-19 2006-10-19 Domeika Max J Methods and apparatus to iteratively compile software to meet user-defined criteria
WO2007076629A1 (en) * 2005-12-30 2007-07-12 Intel Corporation Type checking for object-oriented programming languages
US8332833B2 (en) * 2007-06-04 2012-12-11 International Business Machines Corporation Procedure control descriptor-based code specialization for context sensitive memory disambiguation
US20100199269A1 (en) * 2008-02-05 2010-08-05 Panasonic Corporation Program optimization device and program optimization method
US7493610B1 (en) * 2008-03-27 2009-02-17 International Business Machines Corporation Versioning optimization for dynamically-typed languages
US7685565B1 (en) * 2009-03-19 2010-03-23 International Business Machines Corporation Run time reconfiguration of computer instructions
CA2684441C (en) * 2009-09-22 2012-06-05 Ibm Canada Limited - Ibm Canada Limitee May-constant propagation
US20150052603A1 (en) * 2013-08-13 2015-02-19 Arxan Technologies, Inc. Anti-tamper system with self-adjusting guards
US10026064B2 (en) 2013-09-13 2018-07-17 Microsoft Technology Licensing, Llc Automatically recommending updates based on stored lifecycle information
US9830142B2 (en) 2013-09-13 2017-11-28 Microsoft Technology Licensing, Llc Automatic installation of selected updates in multiple environments
US9626176B2 (en) * 2013-09-13 2017-04-18 Microsoft Technology Licensing, Llc Update installer with technical impact analysis
US9665359B2 (en) 2013-09-13 2017-05-30 Microsoft Technology Licensing, Llc Automatically resolving conflicts after installation of selected updates in a computer system
US9823913B2 (en) * 2015-12-03 2017-11-21 International Business Machines Corporation Method of adding local variables in place of global in JavaScript
US11983515B1 (en) * 2022-10-26 2024-05-14 International Business Machines Corporation Optimizing source code using callable unit matching

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL100987A (en) * 1991-02-27 1995-10-31 Digital Equipment Corp Method and device for encoding
JPH08305672A (ja) * 1995-05-09 1996-11-22 Hitachi Ltd 計算分割最適化方法
US5761514A (en) * 1995-08-31 1998-06-02 International Business Machines Corporation Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system
US5797013A (en) * 1995-11-29 1998-08-18 Hewlett-Packard Company Intelligent loop unrolling
US6760907B2 (en) * 1998-06-30 2004-07-06 Sun Microsystems, Inc. Code generation for a bytecode compiler
US6986128B2 (en) * 2000-01-07 2006-01-10 Sony Computer Entertainment Inc. Multiple stage program recompiler and method

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009199520A (ja) * 2008-02-25 2009-09-03 Nec Corp コンパイラ、コンパイル方法、及び、プログラム
JP2011065220A (ja) * 2009-09-15 2011-03-31 Internatl Business Mach Corp <Ibm> コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム
US8612948B2 (en) 2010-04-05 2013-12-17 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8938728B2 (en) 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
JP2013156971A (ja) * 2012-02-01 2013-08-15 Internatl Business Mach Corp <Ibm> コンパイル方法、プログラムおよび情報処理装置
US8869128B2 (en) 2012-02-01 2014-10-21 International Business Machines Corporation Compiling method, program, and information processing apparatus
US9921858B2 (en) 2014-09-16 2018-03-20 International Business Machines Corporation Apparatus and method for realizing runtime system for programming language
US10331465B2 (en) 2014-09-16 2019-06-25 International Business Machines Corporation Apparatus and method for realizing runtime system for programming language
US10922107B2 (en) 2014-09-16 2021-02-16 International Business Machines Corporation Apparatus and method for realizing runtime system for programming language

Also Published As

Publication number Publication date
US20040015918A1 (en) 2004-01-22

Similar Documents

Publication Publication Date Title
JP2002259135A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US7409678B2 (en) Compiler, compilation and storage
US7107585B2 (en) Compilation of application code in a data processing apparatus
US6973644B2 (en) Program interpreter
US5768595A (en) System and method for recompiling computer programs for enhanced optimization
JP3790683B2 (ja) コンピュータ装置、その例外処理プログラム及びコンパイル方法
US6078744A (en) Method and apparatus for improving compiler performance during subsequent compilations of a source program
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US6233733B1 (en) Method for generating a Java bytecode data flow graph
US7797690B2 (en) System, method and program product to optimize code during run time
US6072952A (en) Method and apparatus for coalescing variables
US6634022B1 (en) Method for platform specific efficiency enhancement of java programs and software product therefor
JPH09330233A (ja) 最適目的コード生成方法
JP2001167060A (ja) タスク並列化方法
US20070234307A1 (en) Methods and apparatus to inline conditional software instrumentation
US7373641B2 (en) Method, computer unit and program for converting a program
US6301652B1 (en) Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
JP2002091777A (ja) コンパイラ及びそのレジスタ割付方法
US8762974B1 (en) Context-sensitive compiler directives
US6665864B1 (en) Method and apparatus for generating code for array range check and method and apparatus for versioning
WO2022267638A1 (en) Method and apparatus for functional unit balancing at program compile time
Saleh et al. Efficient algebraic effect handlers for Prolog
JP2001125792A (ja) 最適化促進装置
JP2007226589A (ja) プログラム変換システム
Hepp et al. Worst-case execution time based optimization of real-time Java programs

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050204

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050419

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050713

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050920

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20051007