JP3813087B2 - プログラム変換方法、コンピュータ装置及びプログラム - Google Patents
プログラム変換方法、コンピュータ装置及びプログラム Download PDFInfo
- Publication number
- JP3813087B2 JP3813087B2 JP2001387263A JP2001387263A JP3813087B2 JP 3813087 B2 JP3813087 B2 JP 3813087B2 JP 2001387263 A JP2001387263 A JP 2001387263A JP 2001387263 A JP2001387263 A JP 2001387263A JP 3813087 B2 JP3813087 B2 JP 3813087B2
- Authority
- JP
- Japan
- Prior art keywords
- method call
- program
- code
- execution program
- computer
- 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
Images
Classifications
-
- 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
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- 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/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
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)
Description
【発明の属する技術分野】
本発明は、コンピュータプログラムの最適化方法に関し、特に計算結果が使用されない計算(不使用計算)を削除して最適化を行う方法に関する。
【0002】
【従来の技術】
今日、複雑なソフトウェアは、機能毎にコンポーネント化されて設計されることが一般的である。この場合、各コンポーネントは、様々なプログラムで共通に使える機能を提供するよう設計される。
そうしたソフトウェアをJavaに代表されるようなオブジェクト指向言語で書く場合、各機能はクラス、オブジェクト、メソッドに分類され、実現される。そして、ある機能を利用したいとき、プログラムはオブジェクトを生成してメソッドを呼ぶ。
【0003】
こうしたオブジェクト指向的なソフトウェアの設計では、計算結果の全てを必ずしも必要としない場合がある。例えば、2つの情報を含むオブジェクトが値の授受に使われるとき、プログラムの場所によっては片方の情報しか使わない場合などである。その場合、使わない情報のための計算は、無駄な処理であり、そのような無駄な処理の存在がソフトウェアの実行性能に大きな影響を与えてしまう場合もある。
【0004】
コンパイラによるプログラムの最適化技術としてデッドコードエリミネーション(dead code elimination:DCE)という手法(dead store eliminationとも言う)が知られている。これは、コンパイルの対象内におけるメソッドなどを解析することにより、計算結果が使われないと判断されるコードを消去する最適化技術である。こうしたコードには、コントロールフロー上の不到達コード(unreachable code)、解決済みの条件分岐(resolved conditionals)、使われない値を定義するコード(dead store)がある。具体的な手法としては、CFG(Context Free Grammar)やSSA形式(Static Single Assignment Form)上で、定数伝搬(constant propagation)やコピー伝搬(copy propagation)などの前向きデータフロー(forward dataflow)最適化と組み合わせて、定義値の使用者(reaching use)を解析する後ろ向きデータフロー(backward dataflow)最適化を行う。
【0005】
【発明が解決しようとする課題】
しかしながら、上述したDCEによるプログラムの最適化技術は、数値計算のように複雑な計算式の無駄を削減する点では効果的だが、Java等のコンポーネント化されたオブジェクト指向言語では機能しにくいという欠点があった。その大きな理由は次の2つである。
1つは、DCEの削除対象がメソッド内のコードに限られることである。通常、Javaのようなオブジェクト指向言語では、1つの情報を作るために複数あるいは多段のメソッド呼び出しが行われるのが普通である。そのような多段のメソッド呼び出しが行われている場合にはDCEによる削除対象とならない。
もう1つの理由は、ヒープに書かれた値はグローバルに参照可能であり、そうしたグローバルな値についてDCEはreaching use解析できないことである。通常、Javaのオブジェクトはヒープ上に作られる。そのため、DCEによっては使用者(reaching use)を解析できず、コードを削除することができない。
【0006】
図7は、オブジェクト指向言語によるプログラムのメソッド呼び出しの一例を示す図である。
図7に示すプログラムの部分は、オブジェクト参照vが定義され(v's def)、その使用(use)がオブジェクトvをレシーバとするメソッドmtd1の呼び出しである(v's use)場合を表す。この例では、メソッドmtd1はオブジェクトvのインスタンス変数i1に値1を代入してメソッドmtd2を呼び、メソッドmtd2はオブジェクトvのインスタンス変数i2に値2を代入する。
この場合、オブジェクトvのインスタンス変数に値を代入した結果が、他で使用されない場合であっても、当該オブジェクトvがメソッドmtd1呼び出しに使われているので、DCEでは削除されない。
【0007】
図7に示したオブジェクトvのインスタンス変数i1、i2への値の代入計算の結果は、共に使用されない。すなわちdead storeであり、この代入計算は無駄な計算である。
しかしながら、実際にオブジェクトを使用しない場合であっても、メソッド呼び出しのために見かけ上は使用されるように見え、さらにオブジェクトへの書き込みがグローバル扱いされるため、DCEによる最適化単独では、上記のような無駄な計算を削除できない。
【0008】
そこで本発明は、メソッド呼び出しを無視すれば使用者(reaching use)がないようなオブジェクト参照の定義を対象とし、そのオブジェクトを操作する計算を削除する最適化方法を実現することを目的とする。
【0009】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、次のように構成されたプログラム変換方法として実現される。すなわち、このプログラム変換方法は、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換方法であって、メモリから処理対象である実行プログラムを読み出し、この実行プログラム中のメソッド呼び出しに関して、このメソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されない引数であるかどうかを調べるステップと、この実行プログラム中の所定のメソッド呼び出しに関して、このメソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されない引数である場合に、デッドコードエリミネーションにより、このメソッド呼び出しにおける所定のコードを消去するステップと、コードを消去された実行プログラムをメモリに格納するステップとを含むことを特徴とする。
【0010】
さらに好ましくは、このプログラム変換方法は、デッドコードエリミネーションによりメソッド呼び出しのコードを消去するステップに先立って、当該メソッド呼び出しをインライン展開するステップ、及び当該メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化するステップをさらに含む。
【0011】
また、本発明による他のプログラム変換方法は、メモリから処理対象である実行プログラムを読み出し、この実行プログラム中の所定のメソッド呼び出しをインライン展開する第1のステップと、インライン展開されたメソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化する第2のステップと、第1、第2のステップが施された実行プログラムに対してデッドコードエリミネーションを実行する第3のステップと、デッドコードエリミネーションを施された実行プログラムをメモリに格納する第4のステップとを含むことを特徴とする。
【0012】
さらに好ましくは、このプログラム変換方法は、実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されない引数であり、かつ実行プログラム中の所定のメソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化しない場合に、当該メソッド呼び出しを前記インライン展開の対象として決定するステップをさらに含む。
【0013】
さらにまた、上記の目的を達成する本発明は、次のように構成されたコンピュータ装置として実現される。すなわち、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するコンピュータ装置において、メソッド呼び出しにおけるオブジェクト参照の使用の状態に基づいて、処理対象となるメソッド呼び出しを決定する処理対象抽出部と、この処理対象抽出部により処理対象として決定されたメソッド呼び出しをインライン展開するインライン展開処理部と、このインライン展開処理部にてインライン展開されたメソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化するスカラー化処理部と、インライン展開処理部及びスカラー化処理部による処理が施された実行プログラムに対してデッドコードエリミネーションを実行するデッドコードエリミネーション実行部とを備えることを特徴とする。
【0014】
ここで、詳しくは、処理対象抽出部は、実行プログラム中の所定のメソッド呼び出しに関して、このメソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されない引数である場合に、このメソッド呼び出しを処理対象として決定する。
実行プログラム中の所定のメソッドが上記の条件に合致するかについては、コード解析部を設けてプログラム変換時に解析を行うことにより調べても良いし、予め実行プログラムの各メソッドについて解析を行って結果をデータベースに格納しておき、プログラム変換時にこのデータベースから必要な情報を読み出すようにしても良い。さらに、予め上記の条件に合致するようなメソッドを人為的に定義してデータベースに格納しておき、プログラム変換時にこのデータベースを参照することもできる。
【0015】
上記のコンピュータ装置は、機械語コードに変換された実行プログラムを実行するプログラム実行部をさらに備える構成とすることもできる。
さらにまた、本発明は、コンピュータを制御して上述したプログラム変換方法や各種の機能を実現するプログラムとして実現することができる。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【0016】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
まず、本発明の概要を説明する。オブジェクト参照の使用(use)が、オブジェクトの要素が活用されないメソッド呼び出しの引数であって、かつオブジェクト参照がメソッド呼び出しでグローバル化(エスケープ)しない場合、その使用(use)をファントムユース(phantom use)と呼ぶことにする。
【0017】
本発明では、あるコードが定義するオブジェクトの使用がファントムユースのみであると解析できたとき、そのファントムユースのメソッド呼び出しをインライン展開する。次に、そのオブジェクトの各インスタンス変数をスカラー化する。そしてDCE(dead code elimination)を行う。これにより、グローバルに他へ影響を及ぼす計算、あるいは計算結果が使用される計算を残し、計算結果が使用されない計算だけが削除される。
【0018】
図1は、本実施の形態による最適化方法を実現するコンピュータシステムのシステム構成を示す図である。
図1を参照すると、本実施の形態におけるコンピュータシステムは、ソースプログラム(入力コード)をコンパイルするコンパイラ100と、コンパイラ100にてコンパイルされたオブジェクトプログラム(出力コード)を実行して種々の処理を行うプログラム実行部200と、メモリ300とを備える。コンパイラ100及びプログラム実行部200は、パーソナルコンピュータやワークステーションなどのコンピュータシステムにおけるプログラム制御されたCPUにて実現される。メモリ300は、コンピュータ装置のメインメモリであり、RAM等で実現される。メモリ300には、本実施の形態で用いられるファントムユースデータベース310が格納される。また、図示しないが、CPUを制御してコンパイラ100として動作させるためのプログラムやコンパイルの対象となるプログラムが格納される。なお、メモリ300に格納されるファントムユースデータベース310及びプログラムは、必要に応じて、適宜磁気ディスクその他の記録媒体に保存されることは言うまでもない。
【0019】
図1において、コンパイラ100は、バイトコード(byte code)で記述された入力コードを入力して処理し、機械語で記述された出力コードを生成して出力する。この入力コードの入力は、コード生成装置400にて生成された入力コードを直接入力したり、コード生成装置400にて生成された入力コードを記憶した記憶装置500から入力したり、ネットワーク600上に存在するコード生成装置400や記憶装置500からネットワーク600を介して入力したりすることにより行われる。コンパイラ100により生成された出力コードは、プログラム実行部200により実行される。
なお、本実施の形態において、コンパイラ100は、JavaにおけるJIT(Just In Time)コンパイラのような、実行プログラムを実行する際に動的に実行プログラムのコンパイル処理を行うコンパイラであっても良いし、ソースプログラムを予めコンパイルして生成されたオブジェクトプログラムを実行プログラムとする使用形態におけるコンパイラであっても良い。
【0020】
図2は、本実施の形態におけるコンパイラ100の構成を説明する図である。図2を参照すると、コンパイラ100は、本実施の形態による最適化の対象となるメソッド呼び出しを抽出する処理対象抽出部110と、処理対象抽出部110にて利用されるファントムユースに関する情報を解析するファントムユース解析を行うファントムユース解析部120と、メソッド呼び出しのインライン展開を行うインライン展開処理部130と、オブジェクト構造体のスカラー化を行うスカラー化処理部140と、デッドコードエリミネーション(DCE)を行うDCE実行部150とを備える。
図2に示したコンパイラ100の各構成要素は、コンピュータプログラムにより制御されたCPUにて実現される仮想的なソフトウェアブロックである。CPUを制御する当該コンピュータプログラムは、CD−ROMやフロッピーディスクなどの記録媒体に格納して配布したり、ネットワークを介して伝送したりすることにより提供される。
なお、図2に示したコンパイラ100の構成要素は、本実施の形態における特徴的な機能に関するものである。図示しないが、実際にはコンパイラ100は、入力コードの字句解析や構文解析、機械語のコード生成、各種の最適化処理といったコンパイル処理における一般的な機能を有することは言うまでもない。
【0021】
上記構成において、処理対象抽出部110は、メモリ300からコンパイル対象であるプログラムを読み込み、当該プログラム中から、本実施の形態において最終的にDCEによる最適化を行う対象となるメソッド呼び出しを抽出する。具体的には、データフロー解析によりオブジェクトの使用(use)を特定すると共に、エスケープ解析(Escape Analysis)によりメソッド呼び出しがオブジェクトをグローバル化するかどうかを調べ、オブジェクトの使用(use)がファントムユースのみであれば、当該メソッド呼び出しを最適化の対象とする。そして、最適化の対象とされたメソッド呼び出しについての情報をインライン展開処理部130に渡す。なお、処理対象抽出部110に読み込まれるプログラムは、オブジェクトコード(実行可能コード)に変換され、必要な最適化処理が施されたものである。
【0022】
本実施の形態では、オブジェクト構造体定義に対して当該定義を参照してメソッド呼び出しを行うとき、メソッド呼び出しが当該オブジェクトをグローバル化(エスケープ)させず、かつオブジェクト構造体の要素の定義だけを行う場合、すなわちそのメソッド呼び出しにおけるオブジェクト参照をファントムユースするだけの場合に注目する。グローバル化するメソッドかどうかは、エスケープ解析を活用して識別することができる。エスケープ解析において、グローバル化せず、プログラムのある地点で定義されたオブジェクト構造体の各要素に関して、当該要素の使用(use)がファントムユースのみであると解析できたとき、そのファントムユースのメソッド呼び出しが、本実施の形態による最適化の対象である。
【0023】
ここで、ファントムユースについて、さらに詳細に説明する。
まず、所定のメソッドmの呼び出し(コールサイト)csに引数p(要素ベクタ)を渡すとき、メソッドmの引数pに関する使用セットus(m,p)を次の数1式に示すように定義する。
【数1】
【0024】
また、メソッドMのコールサイトcsの引数pに関する到達使用セットrus(M,cs,p)を次の数2式に示すように定義する。
【数2】
【0025】
以上のように定義された使用セットus(m,p)及び到達使用セットrus(M,cs,p)に基づき、ファントムユースは次のように定義される。
所定のメソッドMが含むコールサイト集合をCS(M)とし、そのうちの所定の要素csに関して、当該要素csに渡される引数pについてds(t(cs),p)のpi d=1かつrus(M,cs,p)のpi u=1であるならば、引数pのi番目の要素をcsのファントムユースと呼ぶ。ここで、t(cs)は、コールサイトcsから呼ばれるメソッドあるいはその全ての候補メソッドである。
【0026】
上記の定義に基づいて、ファントム関数phantom(pi,f)は、プログラム地点fにおいて引数pのi番目の要素がファントムユースであるとき値1を返し、それ以外では値0を返す。処理対象抽出部110は、コンパイル対象であるメソッドMの引数pで示される各オブジェクト構造体(以下、オブジェクト構造体pとも記述する)の定義に対し、到達する使用(use)の各地点fに関して、ファントム関数phantom(pi,f)が返す値を調べる。
したがって、メソッドMにおいて、オブジェクト構造体pの定義がグローバル化せず、その使用(use)が全てファントムユースであるとき、当該メソッドMは、後のインライン展開、スカラー化及びDCEの処理対象となる。
【0027】
ファントムユース解析部120は、上述したプログラム地点fにおける引数pのi番目の要素がファントムユースか否かを調べるコード解析手段であり、ファントム関数phantom(pi,f)の値1または値0を返す処理を実行する。この解析処理により得られた1または0の値が、処理対象抽出部110による上記の処理で使われる。
なお、ファントムユース解析部120による解析処理は、コンパイル時に処理対象抽出部110による上記の動作に伴って実行しても良いが、コンパイルとは別処理としてコード解析のみを単独で実行することも可能である。この場合、得られた解析結果は、メモリ300のファントムユースデータベース310に格納され、コンパイル時に処理対象抽出部110によって読み出され、使用される。
【0028】
また、ファントム関数の値をコード解析によって得るのではなく、プログラムの作成に際して予め定義して与えることも可能である。この場合、プログラマ等により定義されたファントム関数の値がメモリ300のファントムユースデータベース310に格納され、使用される。したがって、このような実施態様ではファントムユース解析部120は必須の構成要件ではなくなる。
さらにこの場合、メソッド呼び出しの削除の効果に関して静的な解析や実行履歴の保存などによりプログラム実行前に分かる情報や、プログラム実行中に得られるプロファイル情報により、削除効果の高いメソッドを選んでインライン展開の対象とし、最適化を行うこととすれば、コンパイル資源を節約することができる。
【0029】
インライン展開処理部130は、処理対象抽出部110にて最適化の対象とされたメソッド、すなわち、オブジェクト構造体pの定義がグローバル化せず、その使用(use)が全てファントムユースであるようなメソッドをメモリ300から入力し、インライン展開する。インライン展開されたコードは、スカラー化処理部140に渡される。
【0030】
スカラー化処理部140は、インライン展開処理部130にてインライン展開されたメソッドにおけるオブジェクト定義をスカラー化する。オブジェクト定義をスカラー化されたコードは、DCE実行部150に渡される。
【0031】
DCE実行部150は、インライン展開及びスカラー化がなされたメソッドをDCEにより消去する。DCEによる最適化が行われたコードは、コンパイラ100によるコンパイルの結果であるオブジェクトプログラムとしてメモリ300に格納される。
【0032】
図3は、上記のように構成された本実施の形態のコンパイラ100による最適化処理の流れを説明するフローチャートである。また、図4は、オブジェクト指向言語によるプログラムの所定のメソッド呼び出しに対して本実施の形態による最適化処理を実行した様子を示す図である。
図4に示すプログラムの部分において、オブジェクト参照vが定義され(v's def)、その使用(use)がオブジェクトvをレシーバとするメソッドmtd1の呼び出しである(v's use)。メソッドmtd1はオブジェクトvのインスタンス変数i1に値1を代入してメソッドmtd2を呼び、メソッドmtd2はオブジェクトvのインスタンス変数i2に値2を代入する。したがって、このオブジェクトvのインスタンス変数に値を代入した結果が、他で使用されない場合であっても、当該オブジェクトvがメソッドmtd1呼び出しに使われているので、従来の単純なDCEでは削除されない。なお、以下の説明では、オブジェクトvは図4に示した部分以外では使用されていないものとする。
【0033】
図3を参照すると、本実施の形態では、まず処理対象抽出部110が図4に示したメソッドMの命令列を入力する(ステップ301)。そして、入力された命令列中で、未処理のオブジェクトの定義点を探す(ステップ302)。未処理のオブジェクトの定義点が存在するならば、次に当該命令列中で、当該定義点が到達する使用点の集合を探す(ステップ303、304)。そのような到達使用点の集合が存在しなければ、当該定義点については処理済みと判断してステップ302へ戻り、未処理の他のオブジェクトの定義点を探す(ステップ305)。
【0034】
一方、当該定義点が到達する使用点の集合が存在するならば、次に処理対象抽出部110は、ファントムユース解析部120を用いて、当該集合中で、使用点と当該使用点が参照するオブジェクト要素の組のそれぞれに関して、ファントム関数が値1を返すかどうかを調べる(ステップ305、306)。そして、少なくとも1つの使用点とオブジェクト要素の組について、
条件「そのオブジェクト要素の全ての使用点でファントム関数が値1を返す」
が満たされるならば、上記の条件を満たす使用点とオブジェクト要素の組を、インライン展開の対象であるメソッド呼び出し点としてメモリ300の所定の領域に登録する(ステップ307、308)。そして、ステップ302に戻り、未処理の他のオブジェクトの定義点を探す。
また、上記の条件を満足する使用点とオブジェクト要素の組が1つも存在しない場合は、当該定義点については処理済みと判断してステップ302へ戻り、未処理の他のオブジェクトの定義点を探す(ステップ307)。
【0035】
ステップ302において、全てのオブジェクトの定義点についてステップ303移行の処理を実行したと判断されたならば、処理対象抽出部110からインライン展開処理部130へ処理が移行する。
インライン展開処理部130は、ステップ308においてメモリ300に格納された登録内容に基づき、登録されているオブジェクト要素のオブジェクトを使って呼び出されるメソッドをインライン展開する(ステップ309)。このインライン展開により、図4に示すように、多段のメソッド呼び出しが1つのメソッド内のコードに書き換えられる。
【0036】
次に、スカラー化処理部140が、ステップ308においてメモリ300に格納された登録内容に基づき、登録されたオブジェクト要素のオブジェクト定義をスカラー化する(ステップ310)。このスカラー化により、図4に示すように、オブジェクト定義がローカル化される。
【0037】
最後に、DCE実行部150が、処理対象であったメソッドMを含むプログラムに対してDCEによるコード消去を行う(ステップ311)。図4に示すように、単純なDCEでは消去できなかったオブジェクトvに関するコードが、ステップ310までの処理によりインライン展開されスカラー化されたことによって消去される。
【0038】
次に、具体的なオブジェクトに対する最適化の例を示す。
オブジェクト参照の定義で典型的なものに、newによる、オブジェクトの生成がある。
図5は、このnewによるクラスSampleClassのインスタンス生成に対して本実施の形態による最適化を実行した様子を示す図である。
図5に示す例は、クラスSampleClassのインスタンス生成によりオブジェクト参照vが定義され、その使用(use)がオブジェクトvをレシーバとするメソッドmtd1の呼び出しである場合を表す。ここで、メソッドmtd1はオブジェクトvのインスタンス変数i1に値1を代入してメソッドmtd2を呼び、メソッドmtd2はオブジェクトvのインスタンス変数i2に値2を代入する。オブジェクトvがメソッドmtd1呼び出しに使われているので、従来の単純なDCEでは何も削除しない。
【0039】
本実施の形態では、処理対象抽出部110において、データフロー解析によりinvoke v.mtd1(I)Vコードだけがオブジェクトvの使用(use)と分かる。また、エスケープ解析によりメソッドmtd1はオブジェクトvをグローバル化しないと分かる。結果として、オブジェクトvの使用(use)はファントムユースのみであることが分かる。そこで、処理対象抽出部110により、これらのメソッド呼び出しが最適化の対象とされる。そして、図5に示すように、インライン展開処理部130によりメソッドmtd1及びメソッドmtd2がインライン展開され、スカラー化処理部140によりスカラー化が行われる。各スカラー編集への代入はデッドストアであるので、DCE実行部150により削除される。以上のようにして、無駄なコードを削除できた。
【0040】
図6は、図5と同じく、newによるクラスSampleClassのインスタンス生成に対して本実施の形態による最適化を実行した様子を示す図であるが、ここではメソッドmtd2が副作用を持つ例を示す。
この場合も、オブジェクトvがメソッドmtd1呼び出しに使われているので、従来の単純なDCEでは何も削除しない。
本実施の形態では、メソッドmtd2において、オブジェクトvのインスタンス変数i2に値2を代入すると共に、グローバル変数であるclass_vを1つカウントアップする。
【0041】
処理対象抽出部110において、データフロー解析によりinvoke v.mtd1(I)Vコードだけがオブジェクトvの使用(use)と分かり、エスケープ解析によりメソッドmtd1はオブジェクトvをグローバル化しないと分かり、結局オブジェクトvの使用(use)はファントムユースのみであると分かる。したがって、処理対象抽出部110によりメソッドmtd1及びメソッドmtd2が最適化の対象とされ、インライン展開処理部130によりメソッドmtd1及びメソッドmtd2をインライン展開し、スカラー化処理部140によりスカラー化を行う。そして、デッドストアであるスカラー編集への代入部分が、DCE実行部150により削除される。
【0042】
一方、class_vを1つカウントアップするコードは、newで生成されたオブジェクトの変数ではなく、外部から観測できるコードであるため、デッドストアとならず、消去対象とはならない。
すなわち、本実施の形態によれば、インライン展開されたコード中に、static変数あるいは他オブジェクトへの代入などグローバル値に関する計算や、使用者(reaching use)がある計算、すなわちデッドストアとならない計算が存在する場合、当該計算は消去されずに残り、使用されない結果に関する無駄な計算だけが削除されることとなる。
【0043】
【発明の効果】
以上説明したように、本発明によれば、メソッド呼び出しを無視すれば使用者(reaching use)がないようなオブジェクト参照の定義を対象とし、そのオブジェクトを操作する計算を削除する最適化方法を実現することができる。
【図面の簡単な説明】
【図1】 本実施の形態による最適化方法を実現するコンピュータシステムのシステム構成を示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説明する図である。
【図3】 本実施の形態のコンパイラによる最適化処理の流れを説明するフローチャートである。
【図4】 オブジェクト指向言語によるプログラムの所定のメソッド呼び出しに対して本実施の形態による最適化処理を実行した様子を示す図である。
【図5】 newによるクラスSampleClassのインスタンス生成に対して本実施の形態による最適化を実行した様子を示す図である。
【図6】 newによる他のクラスSampleClassのインスタンス生成に対して本実施の形態による最適化を実行した様子を示す図であり、メソッドmtd2が副作用を持つ例を示す。
【図7】 オブジェクト指向言語によるプログラムのメソッド呼び出しの一例を示す図である。
【符号の説明】
100…コンパイラ、110…処理対象抽出部、120…ファントムユース解析部、130…インライン展開処理部、140…スカラー化処理部、150…DCE(デッドコードエリミネーション)実行部、200…プログラム実行部、300…メモリ、310…ファントムユースデータベース、400…コード生成装置、500…記憶装置、600…ネットワーク
Claims (18)
- オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換方法において、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数であるかどうかを調べるステップと、
前記実行プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、デッドコードエリミネーションにより当該メソッド呼び出しにおける所定のコードを消去するステップと、
前記コードを消去された実行プログラムをメモリに格納するステップと
を含むことを特徴とするプログラム変換方法。 - 前記デッドコードエリミネーションによりメソッド呼び出しのコードを消去するステップに先立って、当該メソッド呼び出しをインライン展開するステップをさらに含むことを特徴とする請求項1に記載のプログラム変換方法。
- 前記デッドコードエリミネーションによりメソッド呼び出しのコードを消去するステップに先立って、当該メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化するステップをさらに含むことを特徴とする請求項1に記載のプログラム変換方法。
- オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換方法において、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中の所定のメソッド呼び出しをインライン展開する第1のステップと、
インライン展開された前記メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化する第2のステップと、
前記第1、第2のステップが施された前記実行プログラムに対してデッドコードエリミネーションを実行する第3のステップと、
デッドコードエリミネーションを施された実行プログラムをメモリに格納する第4のステップと
を含むことを特徴とするプログラム変換方法。 - 前記実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、当該メソッド呼び出しを前記インライン展開の対象として決定するステップをさらに含むことを特徴とする請求項4に記載のプログラム変換方法。
- 前記実行プログラム中の所定のメソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化しない場合に、当該メソッド呼び出しを前記インライン展開の対象として決定するステップをさらに含むことを特徴とする請求項4に記載のプログラム変換方法。
- オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するコンピュータ装置において、
メソッド呼び出しにおけるオブジェクト参照の使用の状態に基づいて、処理対象となるメソッド呼び出しを決定する処理対象抽出部と、
前記処理対象抽出部により処理対象として決定されたメソッド呼び出しをインライン展開するインライン展開処理部と、
前記インライン展開処理部にてインライン展開された前記メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化するスカラー化処理部と、
前記インライン展開処理部及び前記スカラー化処理部による処理が施された実行プログラムに対してデッドコードエリミネーションを実行するデッドコードエリミネーション実行部と
を備えることを特徴とするコンピュータ装置。 - 前記処理対象抽出部は、前記実行プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、当該メソッド呼び出しを処理対象として決定することを特徴とする請求項7に記載のコンピュータ装置。
- 前記実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数であるかどうかを調べるコード解析部をさらに備え、
前記処理対象抽出部は、前記コード解析部の解析結果に基づいて処理対象となるメソッド呼び出しを決定することを特徴とする請求項7に記載のコンピュータ装置。 - オブジェクト指向プログラミング言語で記述されたプログラムのソースコードをコンパイルして機械語コードに変換するコンパイラと、
機械語コードに変換された当該プログラムを実行するプログラム実行部とを備え、
前記コンパイラは、
前記プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、当該メソッド呼び出しを処理対象とする処理対象抽出部と、
前記処理対象抽出部により処理対象として決定されたメソッド呼び出しをインライン展開するインライン展開処理部と、
前記インライン展開処理部にてインライン展開された前記メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化するスカラー化処理部と、
前記インライン展開処理部及び前記スカラー化処理部による処理が施された実行プログラムに対してデッドコードエリミネーションを実行するデッドコードエリミネーション実行部と
を備えることを特徴とするコンピュータ装置。 - コンピュータを制御して、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムであって、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数であるかどうかを調べる処理と、
前記実行プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、デッドコードエリミネーションにより当該メソッド呼び出しにおける所定のコードを消去する処理と、
前記コードを消去された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - 前記デッドコードエリミネーションによりメソッド呼び出しのコードを消去する処理に先立って、当該メソッド呼び出しをインライン展開する処理を、前記コンピュータにさらに実行させることを特徴とする請求項11に記載のプログラム。
- 前記デッドコードエリミネーションによりメソッド呼び出しのコードを消去する処理に先立って、当該メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化する処理を前記コンピュータにさらに実行させることを特徴とする請求項11に記載のプログラム。
- コンピュータを制御して、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムであって、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中のメソッド呼び出しにおけるオブジェクト参照の使用の状態に基づいて、処理対象となるメソッド呼び出しを決定する手段と、
メモリから前記処理対象である実行プログラムを読み出し、処理対象として決定された前記メソッド呼び出しをインライン展開する手段と、
インライン展開された前記メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化する手段と、
前記インライン展開及び前記スカラー化が施された前記実行プログラムに対してデッドコードエリミネーションを実行する手段として
前記コンピュータを機能させることを特徴とするプログラム。 - 前記コンピュータの機能として実現される前記処理対象となるメソッド呼び出しを決定する手段は、前記実行プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、当該メソッド呼び出しを処理対象として決定することを特徴とする請求項14に記載のプログラム。
- 前記実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数であるかどうかを調べる手段として、前記コンピュータをさらに機能させ、
前記処理対象となるメソッド呼び出しを決定する手段は、前記メソッド呼び出しに関して調べた結果に基づいて処理対象となるメソッド呼び出しを決定することを特徴とする請求項14に記載のプログラム。 - コンピュータを制御してオブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムを、当該コンピュータが読み取り可能に記録した記録媒体であって、
前記プログラムは、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中のメソッド呼び出しに関して、当該メソッド呼び出し中のオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数であるかどうかを調べる処理と、
前記実行プログラム中の所定のメソッド呼び出しに関して、当該メソッド呼び出しが当該メソッド呼び出し中のオブジェクト参照をグローバル化せず、かつ当該メソッド呼び出し中の全てのオブジェクト参照の使用が、オブジェクトの要素が活用されないところの引数である場合に、デッドコードエリミネーションにより当該メソッド呼び出しにおける所定のコードを消去する処理と、
前記コードを消去された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とする記録媒体。 - コンピュータを制御してオブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムを、当該コンピュータが読み取り可能に記録した記録媒体であって、
前記プログラムは、
メモリから処理対象である実行プログラムを読み出し、当該実行プログラム中のメソッド呼び出しにおけるオブジェクト参照の使用の状態に基づいて、処理対象となるメソッド呼び出しを決定する手段と、
メモリから前記処理対象である実行プログラムを読み出し、処理対象として決定された前記メソッド呼び出しをインライン展開する手段と、
インライン展開された前記メソッド呼び出しにおけるオブジェクトのインスタンス変数をスカラー化する手段と、
前記インライン展開及び前記スカラー化が施された前記実行プログラムに対してデッドコードエリミネーションを実行する手段として
前記コンピュータを機能させることを特徴とする記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001387263A JP3813087B2 (ja) | 2001-12-20 | 2001-12-20 | プログラム変換方法、コンピュータ装置及びプログラム |
US10/325,765 US7373641B2 (en) | 2001-12-20 | 2002-12-19 | Method, computer unit and program for converting a program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001387263A JP3813087B2 (ja) | 2001-12-20 | 2001-12-20 | プログラム変換方法、コンピュータ装置及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003196106A JP2003196106A (ja) | 2003-07-11 |
JP3813087B2 true JP3813087B2 (ja) | 2006-08-23 |
Family
ID=27596154
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001387263A Expired - Fee Related JP3813087B2 (ja) | 2001-12-20 | 2001-12-20 | プログラム変換方法、コンピュータ装置及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7373641B2 (ja) |
JP (1) | JP3813087B2 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7370321B2 (en) * | 2002-11-14 | 2008-05-06 | Microsoft Corporation | Systems and methods to read, optimize, and verify byte codes for a multiplatform jit |
JP3956131B2 (ja) * | 2002-12-26 | 2007-08-08 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換装置、プログラム変換方法及びプログラム |
US7356802B2 (en) * | 2003-09-29 | 2008-04-08 | International Business Machines Corporation | Automatic customization of classes |
US7624449B1 (en) * | 2004-01-22 | 2009-11-24 | Symantec Corporation | Countering polymorphic malicious computer code through code optimization |
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
US7797690B2 (en) * | 2005-03-15 | 2010-09-14 | International Business Machines Corporation | System, method and program product to optimize code during run time |
US8032874B1 (en) * | 2006-01-20 | 2011-10-04 | Xilinx, Inc. | Generation of executable threads having source code specifications that describe network packets |
US20080016029A1 (en) * | 2006-07-11 | 2008-01-17 | Mariam John | Optimizing a query to a database |
US8352925B2 (en) * | 2007-01-16 | 2013-01-08 | Oracle America, Inc. | Mechanism for enabling a set of code intended for a first platform to be executed on a second platform |
JP5039948B2 (ja) * | 2007-10-30 | 2012-10-03 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラムを最適化するコンパイラ |
CA2675686C (en) * | 2009-08-27 | 2011-10-11 | Ibm Canada Limited - Ibm Canada Limitee | Object collocation |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
US9607017B2 (en) * | 2011-12-23 | 2017-03-28 | The Arizona Board Of Regents On Behalf Of The University Of Arizona | Methods of micro-specialization in database management systems |
US10733099B2 (en) | 2015-12-14 | 2020-08-04 | Arizona Board Of Regents On Behalf Of The University Of Arizona | Broadening field specialization |
AU2016228166A1 (en) * | 2016-09-13 | 2018-03-29 | Canon Kabushiki Kaisha | Visualisation for guided algorithm design to create hardware friendly algorithms |
US12045653B2 (en) | 2017-06-22 | 2024-07-23 | Dataware Ventures, Llc | Field specialization to reduce memory-access stalls and allocation requests in data-intensive applications |
KR20210127923A (ko) | 2019-02-26 | 2021-10-25 | 인텔 코포레이션 | 컴파일러를 위한 작업부하 지향적 상수 전파 |
WO2021225901A1 (en) * | 2020-05-04 | 2021-11-11 | Lingua Robotica, Inc. | Techniques for converting natural speech to programming code |
US11593080B1 (en) | 2021-12-17 | 2023-02-28 | International Business Machines Corporation | Eliminating dead stores |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0689187A (ja) | 1992-09-08 | 1994-03-29 | Hitachi Ltd | インライン展開最適化方法 |
JPH06202875A (ja) | 1992-12-28 | 1994-07-22 | Nec Corp | インライン展開による最適化を行うコンパイラ |
US5857105A (en) * | 1997-02-05 | 1999-01-05 | Hewlett-Packard Company | Compiler for reducing number of indirect calls in an executable code |
JP2000207226A (ja) | 1999-01-19 | 2000-07-28 | Toshiba Corp | コ―ド最適化装置、言語処理装置及びコ―ド最適化方法 |
-
2001
- 2001-12-20 JP JP2001387263A patent/JP3813087B2/ja not_active Expired - Fee Related
-
2002
- 2002-12-19 US US10/325,765 patent/US7373641B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003196106A (ja) | 2003-07-11 |
US20030149969A1 (en) | 2003-08-07 |
US7373641B2 (en) | 2008-05-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
US7725883B1 (en) | Program interpreter | |
US6023583A (en) | Optimized variable allocation method, optimized variable allocation system and computer-readable memory containing an optimized variable allocation program | |
US7086046B2 (en) | Method and apparatus for displaying compiler-optimizated code | |
EP0646864B1 (en) | Optimising compiler | |
JP3337174B2 (ja) | コンパイル方法 | |
JP3790683B2 (ja) | コンピュータ装置、その例外処理プログラム及びコンパイル方法 | |
US7784039B2 (en) | Compiler, compilation method, and compilation program | |
US20040243988A1 (en) | Compiler, method of compiling and program development tool | |
US6934940B2 (en) | Source code transformation-temporary object reduction | |
US7689979B1 (en) | Methods and apparatus to improve application launch time | |
US6895580B2 (en) | Expression reduction during compilation through routine cloning | |
KR20010086159A (ko) | 자바 프로그램들 및 이를 위한 소프트웨어 프러덕트의플랫폼 특정 효율 강화를 위한 방법 | |
US20040015918A1 (en) | Program optimization method and compiler using the program optimization method | |
CN112016099A (zh) | 二进制程序过程间静态污点分析方法及系统 | |
US8762974B1 (en) | Context-sensitive compiler directives | |
JP3790707B2 (ja) | プログラム変換方法、これを用いたコンピュータ装置及びプログラム | |
JP5038760B2 (ja) | ソースコード変換装置及びソースコード変換方法 | |
JP2017091070A (ja) | 実行可能コード生成プログラムおよび実行可能コード生成装置 | |
JPH0689187A (ja) | インライン展開最適化方法 | |
KR102130016B1 (ko) | 자동 캐싱을 위한 컴파일링 방법 및 장치, 이를 위한 기록매체 | |
JP2002082811A (ja) | コンパイル方法および記録媒体 | |
US7043721B2 (en) | Initial object capacity determination | |
JPH11212807A (ja) | プログラム実行方法 | |
JP2000242504A (ja) | コンパイラ装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051115 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051129 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060216 |
|
TRDD | Decision of grant or rejection written | ||
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20060502 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060502 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060530 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100609 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110609 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |