JP2003196106A - プログラム変換方法、コンピュータ装置及びプログラム - Google Patents
プログラム変換方法、コンピュータ装置及びプログラムInfo
- Publication number
- JP2003196106A JP2003196106A JP2001387263A JP2001387263A JP2003196106A JP 2003196106 A JP2003196106 A JP 2003196106A JP 2001387263 A JP2001387263 A JP 2001387263A JP 2001387263 A JP2001387263 A JP 2001387263A JP 2003196106 A JP2003196106 A JP 2003196106A
- Authority
- JP
- Japan
- Prior art keywords
- method call
- program
- code
- execution program
- call
- 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.)
- Granted
Links
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)
Abstract
いて、DCE(デッドコードエリミネーション)による
コード消去をより効果的に行うことを可能とする。 【解決手段】 実行プログラム中のメソッド呼び出しに
おけるオブジェクト参照の使用の状態に基づいて、処理
対象となるメソッド呼び出しを決定し、処理対象として
決定されたメソッド呼び出しをインライン展開し、イン
ライン展開されたメソッド呼び出しにおけるオブジェク
トのインスタンス変数をスカラー化し、インライン展開
及びスカラー化が施された実行プログラムに対してデッ
ドコードエリミネーションを実行する。
Description
グラムの最適化方法に関し、特に計算結果が使用されな
い計算(不使用計算)を削除して最適化を行う方法に関
する。
コンポーネント化されて設計されることが一般的であ
る。この場合、各コンポーネントは、様々なプログラム
で共通に使える機能を提供するよう設計される。そうし
たソフトウェアをJavaに代表されるようなオブジェ
クト指向言語で書く場合、各機能はクラス、オブジェク
ト、メソッドに分類され、実現される。そして、ある機
能を利用したいとき、プログラムはオブジェクトを生成
してメソッドを呼ぶ。
アの設計では、計算結果の全てを必ずしも必要としない
場合がある。例えば、2つの情報を含むオブジェクトが
値の授受に使われるとき、プログラムの場所によっては
片方の情報しか使わない場合などである。その場合、使
わない情報のための計算は、無駄な処理であり、そのよ
うな無駄な処理の存在がソフトウェアの実行性能に大き
な影響を与えてしまう場合もある。
としてデッドコードエリミネーション(dead code elim
ination:DCE)という手法(dead store eliminatio
nとも言う)が知られている。これは、コンパイルの対
象内におけるメソッドなどを解析することにより、計算
結果が使われないと判断されるコードを消去する最適化
技術である。こうしたコードには、コントロールフロー
上の不到達コード(unreachable code)、解決済みの条
件分岐(resolved conditionals)、使われない値を定
義するコード(dead store)がある。具体的な手法とし
ては、CFG(Context Free Grammar)やSSA形式
(Static Single Assignment Form)上で、定数伝搬(c
onstant propagation)やコピー伝搬(copy propagatio
n)などの前向きデータフロー(forward dataflow)最
適化と組み合わせて、定義値の使用者(reaching use)
を解析する後ろ向きデータフロー(backward dataflo
w)最適化を行う。
たDCEによるプログラムの最適化技術は、数値計算の
ように複雑な計算式の無駄を削減する点では効果的だ
が、Java等のコンポーネント化されたオブジェクト
指向言語では機能しにくいという欠点があった。その大
きな理由は次の2つである。1つは、DCEの削除対象
がメソッド内のコードに限られることである。通常、J
avaのようなオブジェクト指向言語では、1つの情報
を作るために複数あるいは多段のメソッド呼び出しが行
われるのが普通である。そのような多段のメソッド呼び
出しが行われている場合にはDCEによる削除対象とな
らない。もう1つの理由は、ヒープに書かれた値はグロ
ーバルに参照可能であり、そうしたグローバルな値につ
いてDCEはreaching use解析できないことである。通
常、Javaのオブジェクトはヒープ上に作られる。そ
のため、DCEによっては使用者(reaching use)を解
析できず、コードを削除することができない。
グラムのメソッド呼び出しの一例を示す図である。図7
に示すプログラムの部分は、オブジェクト参照vが定義
され(v's def)、その使用(use)がオブジェクトvを
レシーバとするメソッドmtd1の呼び出しである(v's us
e)場合を表す。この例では、メソッドmtd1はオブジェ
クトvのインスタンス変数i1に値1を代入してメソッド
mtd2を呼び、メソッドmtd2はオブジェクトvのインスタ
ンス変数i2に値2を代入する。この場合、オブジェクト
vのインスタンス変数に値を代入した結果が、他で使用
されない場合であっても、当該オブジェクトvがメソッ
ドmtd1呼び出しに使われているので、DCEでは削除さ
れない。
ス変数i1、i2への値の代入計算の結果は、共に使用され
ない。すなわちdead storeであり、この代入計算は無駄
な計算である。しかしながら、実際にオブジェクトを使
用しない場合であっても、メソッド呼び出しのために見
かけ上は使用されるように見え、さらにオブジェクトへ
の書き込みがグローバル扱いされるため、DCEによる
最適化単独では、上記のような無駄な計算を削除できな
い。
すれば使用者(reaching use)がないようなオブジェク
ト参照の定義を対象とし、そのオブジェクトを操作する
計算を削除する最適化方法を実現することを目的とす
る。
め、本発明は、次のように構成されたプログラム変換方
法として実現される。すなわち、このプログラム変換方
法は、オブジェクト指向プログラミング言語で記述され
た実行プログラムのソースコードを読み込み、機械語コ
ードに変換するプログラム変換方法であって、メモリか
ら処理対象である実行プログラムを読み出し、この実行
プログラム中のメソッド呼び出しに関して、このメソッ
ド呼び出し中のオブジェクト参照の使用が、オブジェク
トの要素が活用されない引数であるかどうかを調べるス
テップと、この実行プログラム中の所定のメソッド呼び
出しに関して、このメソッド呼び出しが当該メソッド呼
び出し中のオブジェクト参照をグローバル化せず、かつ
当該メソッド呼び出し中の全てのオブジェクト参照の使
用が、オブジェクトの要素が活用されない引数である場
合に、デッドコードエリミネーションにより、このメソ
ッド呼び出しにおける所定のコードを消去するステップ
と、コードを消去された実行プログラムをメモリに格納
するステップとを含むことを特徴とする。
法は、デッドコードエリミネーションによりメソッド呼
び出しのコードを消去するステップに先立って、当該メ
ソッド呼び出しをインライン展開するステップ、及び当
該メソッド呼び出しにおけるオブジェクトのインスタン
ス変数をスカラー化するステップをさらに含む。
法は、メモリから処理対象である実行プログラムを読み
出し、この実行プログラム中の所定のメソッド呼び出し
をインライン展開する第1のステップと、インライン展
開されたメソッド呼び出しにおけるオブジェクトのイン
スタンス変数をスカラー化する第2のステップと、第
1、第2のステップが施された実行プログラムに対して
デッドコードエリミネーションを実行する第3のステッ
プと、デッドコードエリミネーションを施された実行プ
ログラムをメモリに格納する第4のステップとを含むこ
とを特徴とする。
法は、実行プログラム中のメソッド呼び出しに関して、
当該メソッド呼び出し中の全てのオブジェクト参照の使
用が、オブジェクトの要素が活用されない引数であり、
かつ実行プログラム中の所定のメソッド呼び出しが当該
メソッド呼び出し中のオブジェクト参照をグローバル化
しない場合に、当該メソッド呼び出しを前記インライン
展開の対象として決定するステップをさらに含む。
は、次のように構成されたコンピュータ装置として実現
される。すなわち、オブジェクト指向プログラミング言
語で記述された実行プログラムのソースコードを読み込
み、機械語コードに変換するコンピュータ装置におい
て、メソッド呼び出しにおけるオブジェクト参照の使用
の状態に基づいて、処理対象となるメソッド呼び出しを
決定する処理対象抽出部と、この処理対象抽出部により
処理対象として決定されたメソッド呼び出しをインライ
ン展開するインライン展開処理部と、このインライン展
開処理部にてインライン展開されたメソッド呼び出しに
おけるオブジェクトのインスタンス変数をスカラー化す
るスカラー化処理部と、インライン展開処理部及びスカ
ラー化処理部による処理が施された実行プログラムに対
してデッドコードエリミネーションを実行するデッドコ
ードエリミネーション実行部とを備えることを特徴とす
る。
行プログラム中の所定のメソッド呼び出しに関して、こ
のメソッド呼び出しが当該メソッド呼び出し中のオブジ
ェクト参照をグローバル化せず、かつ当該メソッド呼び
出し中の全てのオブジェクト参照の使用が、オブジェク
トの要素が活用されない引数である場合に、このメソッ
ド呼び出しを処理対象として決定する。実行プログラム
中の所定のメソッドが上記の条件に合致するかについて
は、コード解析部を設けてプログラム変換時に解析を行
うことにより調べても良いし、予め実行プログラムの各
メソッドについて解析を行って結果をデータベースに格
納しておき、プログラム変換時にこのデータベースから
必要な情報を読み出すようにしても良い。さらに、予め
上記の条件に合致するようなメソッドを人為的に定義し
てデータベースに格納しておき、プログラム変換時にこ
のデータベースを参照することもできる。
に変換された実行プログラムを実行するプログラム実行
部をさらに備える構成とすることもできる。さらにま
た、本発明は、コンピュータを制御して上述したプログ
ラム変換方法や各種の機能を実現するプログラムとして
実現することができる。このプログラムは、磁気ディス
クや光ディスク、半導体メモリ、その他の記録媒体に格
納して配布したり、ネットワークを介して配信したりす
ることにより提供することができる。
に基づいて、この発明を詳細に説明する。まず、本発明
の概要を説明する。オブジェクト参照の使用(use)
が、オブジェクトの要素が活用されないメソッド呼び出
しの引数であって、かつオブジェクト参照がメソッド呼
び出しでグローバル化(エスケープ)しない場合、その
使用(use)をファントムユース(phantom use)と呼ぶ
ことにする。
ェクトの使用がファントムユースのみであると解析でき
たとき、そのファントムユースのメソッド呼び出しをイ
ンライン展開する。次に、そのオブジェクトの各インス
タンス変数をスカラー化する。そしてDCE(dead cod
e elimination)を行う。これにより、グローバルに他
へ影響を及ぼす計算、あるいは計算結果が使用される計
算を残し、計算結果が使用されない計算だけが削除され
る。
実現するコンピュータシステムのシステム構成を示す図
である。図1を参照すると、本実施の形態におけるコン
ピュータシステムは、ソースプログラム(入力コード)
をコンパイルするコンパイラ100と、コンパイラ10
0にてコンパイルされたオブジェクトプログラム(出力
コード)を実行して種々の処理を行うプログラム実行部
200と、メモリ300とを備える。コンパイラ100
及びプログラム実行部200は、パーソナルコンピュー
タやワークステーションなどのコンピュータシステムに
おけるプログラム制御されたCPUにて実現される。メ
モリ300は、コンピュータ装置のメインメモリであ
り、RAM等で実現される。メモリ300には、本実施
の形態で用いられるファントムユースデータベース31
0が格納される。また、図示しないが、CPUを制御し
てコンパイラ100として動作させるためのプログラム
やコンパイルの対象となるプログラムが格納される。な
お、メモリ300に格納されるファントムユースデータ
ベース310及びプログラムは、必要に応じて、適宜磁
気ディスクその他の記録媒体に保存されることは言うま
でもない。
トコード(byte code)で記述された入力コードを入力
して処理し、機械語で記述された出力コードを生成して
出力する。この入力コードの入力は、コード生成装置4
00にて生成された入力コードを直接入力したり、コー
ド生成装置400にて生成された入力コードを記憶した
記憶装置500から入力したり、ネットワーク600上
に存在するコード生成装置400や記憶装置500から
ネットワーク600を介して入力したりすることにより
行われる。コンパイラ100により生成された出力コー
ドは、プログラム実行部200により実行される。な
お、本実施の形態において、コンパイラ100は、Ja
vaにおけるJIT(Just In Time)コンパイラのよう
な、実行プログラムを実行する際に動的に実行プログラ
ムのコンパイル処理を行うコンパイラであっても良い
し、ソースプログラムを予めコンパイルして生成された
オブジェクトプログラムを実行プログラムとする使用形
態におけるコンパイラであっても良い。
100の構成を説明する図である。図2を参照すると、
コンパイラ100は、本実施の形態による最適化の対象
となるメソッド呼び出しを抽出する処理対象抽出部11
0と、処理対象抽出部110にて利用されるファントム
ユースに関する情報を解析するファントムユース解析を
行うファントムユース解析部120と、メソッド呼び出
しのインライン展開を行うインライン展開処理部130
と、オブジェクト構造体のスカラー化を行うスカラー化
処理部140と、デッドコードエリミネーション(DC
E)を行うDCE実行部150とを備える。図2に示し
たコンパイラ100の各構成要素は、コンピュータプロ
グラムにより制御されたCPUにて実現される仮想的な
ソフトウェアブロックである。CPUを制御する当該コ
ンピュータプログラムは、CD−ROMやフロッピー
(登録商標)ディスクなどの記録媒体に格納して配布し
たり、ネットワークを介して伝送したりすることにより
提供される。なお、図2に示したコンパイラ100の構
成要素は、本実施の形態における特徴的な機能に関する
ものである。図示しないが、実際にはコンパイラ100
は、入力コードの字句解析や構文解析、機械語のコード
生成、各種の最適化処理といったコンパイル処理におけ
る一般的な機能を有することは言うまでもない。
は、メモリ300からコンパイル対象であるプログラム
を読み込み、当該プログラム中から、本実施の形態にお
いて最終的にDCEによる最適化を行う対象となるメソ
ッド呼び出しを抽出する。具体的には、データフロー解
析によりオブジェクトの使用(use)を特定すると共
に、エスケープ解析(Escape Analysis)によりメソッ
ド呼び出しがオブジェクトをグローバル化するかどうか
を調べ、オブジェクトの使用(use)がファントムユー
スのみであれば、当該メソッド呼び出しを最適化の対象
とする。そして、最適化の対象とされたメソッド呼び出
しについての情報をインライン展開処理部130に渡
す。なお、処理対象抽出部110に読み込まれるプログ
ラムは、オブジェクトコード(実行可能コード)に変換
され、必要な最適化処理が施されたものである。
義に対して当該定義を参照してメソッド呼び出しを行う
とき、メソッド呼び出しが当該オブジェクトをグローバ
ル化(エスケープ)させず、かつオブジェクト構造体の
要素の定義だけを行う場合、すなわちそのメソッド呼び
出しにおけるオブジェクト参照をファントムユースする
だけの場合に注目する。グローバル化するメソッドかど
うかは、エスケープ解析を活用して識別することができ
る。エスケープ解析において、グローバル化せず、プロ
グラムのある地点で定義されたオブジェクト構造体の各
要素に関して、当該要素の使用(use)がファントムユ
ースのみであると解析できたとき、そのファントムユー
スのメソッド呼び出しが、本実施の形態による最適化の
対象である。
に詳細に説明する。まず、所定のメソッドmの呼び出し
(コールサイト)csに引数p(要素ベクタ)を渡すと
き、メソッドmの引数pに関する使用セットus(m,
p)を次の数1式に示すように定義する。
数pに関する到達使用セットrus(M,cs,p)を
次の数2式に示すように定義する。
(m,p)及び到達使用セットrus(M,cs,p)
に基づき、ファントムユースは次のように定義される。
所定のメソッドMが含むコールサイト集合をCS(M)
とし、そのうちの所定の要素csに関して、当該要素c
sに渡される引数pについてds(t(cs),p)の
pi d=1かつrus(M,cs,p)のpi u=1である
ならば、引数pのi番目の要素をcsのファントムユー
スと呼ぶ。ここで、t(cs)は、コールサイトcsか
ら呼ばれるメソッドあるいはその全ての候補メソッドで
ある。
antom(pi,f)は、プログラム地点fにおいて引数pのi
番目の要素がファントムユースであるとき値1を返し、
それ以外では値0を返す。処理対象抽出部110は、コ
ンパイル対象であるメソッドMの引数pで示される各オ
ブジェクト構造体(以下、オブジェクト構造体pとも記
述する)の定義に対し、到達する使用(use)の各地点
fに関して、ファントム関数phantom(pi,f)が返す値を
調べる。したがって、メソッドMにおいて、オブジェク
ト構造体pの定義がグローバル化せず、その使用(us
e)が全てファントムユースであるとき、当該メソッド
Mは、後のインライン展開、スカラー化及びDCEの処
理対象となる。
たプログラム地点fにおける引数pのi番目の要素がフ
ァントムユースか否かを調べるコード解析手段であり、
ファントム関数phantom(pi,f)の値1または値0を返す
処理を実行する。この解析処理により得られた1または
0の値が、処理対象抽出部110による上記の処理で使
われる。なお、ファントムユース解析部120による解
析処理は、コンパイル時に処理対象抽出部110による
上記の動作に伴って実行しても良いが、コンパイルとは
別処理としてコード解析のみを単独で実行することも可
能である。この場合、得られた解析結果は、メモリ30
0のファントムユースデータベース310に格納され、
コンパイル時に処理対象抽出部110によって読み出さ
れ、使用される。
よって得るのではなく、プログラムの作成に際して予め
定義して与えることも可能である。この場合、プログラ
マ等により定義されたファントム関数の値がメモリ30
0のファントムユースデータベース310に格納され、
使用される。したがって、このような実施態様ではファ
ントムユース解析部120は必須の構成要件ではなくな
る。さらにこの場合、メソッド呼び出しの削除の効果に
関して静的な解析や実行履歴の保存などによりプログラ
ム実行前に分かる情報や、プログラム実行中に得られる
プロファイル情報により、削除効果の高いメソッドを選
んでインライン展開の対象とし、最適化を行うこととす
れば、コンパイル資源を節約することができる。
抽出部110にて最適化の対象とされたメソッド、すな
わち、オブジェクト構造体pの定義がグローバル化せ
ず、その使用(use)が全てファントムユースであるよ
うなメソッドをメモリ300から入力し、インライン展
開する。インライン展開されたコードは、スカラー化処
理部140に渡される。
開処理部130にてインライン展開されたメソッドにお
けるオブジェクト定義をスカラー化する。オブジェクト
定義をスカラー化されたコードは、DCE実行部150
に渡される。
びスカラー化がなされたメソッドをDCEにより消去す
る。DCEによる最適化が行われたコードは、コンパイ
ラ100によるコンパイルの結果であるオブジェクトプ
ログラムとしてメモリ300に格納される。
形態のコンパイラ100による最適化処理の流れを説明
するフローチャートである。また、図4は、オブジェク
ト指向言語によるプログラムの所定のメソッド呼び出し
に対して本実施の形態による最適化処理を実行した様子
を示す図である。図4に示すプログラムの部分におい
て、オブジェクト参照vが定義され(v'sdef)、その使
用(use)がオブジェクトvをレシーバとするメソッドm
td1の呼び出しである(v's use)。メソッドmtd1はオブ
ジェクトvのインスタンス変数i1に値1を代入してメソ
ッドmtd2を呼び、メソッドmtd2はオブジェクトvのイン
スタンス変数i2に値2を代入する。したがって、このオ
ブジェクトvのインスタンス変数に値を代入した結果
が、他で使用されない場合であっても、当該オブジェク
トvがメソッドmtd1呼び出しに使われているので、従来
の単純なDCEでは削除されない。なお、以下の説明で
は、オブジェクトvは図4に示した部分以外では使用さ
れていないものとする。
ず処理対象抽出部110が図4に示したメソッドMの命
令列を入力する(ステップ301)。そして、入力され
た命令列中で、未処理のオブジェクトの定義点を探す
(ステップ302)。未処理のオブジェクトの定義点が
存在するならば、次に当該命令列中で、当該定義点が到
達する使用点の集合を探す(ステップ303、30
4)。そのような到達使用点の集合が存在しなければ、
当該定義点については処理済みと判断してステップ30
2へ戻り、未処理の他のオブジェクトの定義点を探す
(ステップ305)。
が存在するならば、次に処理対象抽出部110は、ファ
ントムユース解析部120を用いて、当該集合中で、使
用点と当該使用点が参照するオブジェクト要素の組のそ
れぞれに関して、ファントム関数が値1を返すかどうか
を調べる(ステップ305、306)。そして、少なく
とも1つの使用点とオブジェクト要素の組について、条
件「そのオブジェクト要素の全ての使用点でファントム
関数が値1を返す」が満たされるならば、上記の条件を
満たす使用点とオブジェクト要素の組を、インライン展
開の対象であるメソッド呼び出し点としてメモリ300
の所定の領域に登録する(ステップ307、308)。
そして、ステップ302に戻り、未処理の他のオブジェ
クトの定義点を探す。また、上記の条件を満足する使用
点とオブジェクト要素の組が1つも存在しない場合は、
当該定義点については処理済みと判断してステップ30
2へ戻り、未処理の他のオブジェクトの定義点を探す
(ステップ307)。
クトの定義点についてステップ303移行の処理を実行
したと判断されたならば、処理対象抽出部110からイ
ンライン展開処理部130へ処理が移行する。インライ
ン展開処理部130は、ステップ308においてメモリ
300に格納された登録内容に基づき、登録されている
オブジェクト要素のオブジェクトを使って呼び出される
メソッドをインライン展開する(ステップ309)。こ
のインライン展開により、図4に示すように、多段のメ
ソッド呼び出しが1つのメソッド内のコードに書き換え
られる。
プ308においてメモリ300に格納された登録内容に
基づき、登録されたオブジェクト要素のオブジェクト定
義をスカラー化する(ステップ310)。このスカラー
化により、図4に示すように、オブジェクト定義がロー
カル化される。
であったメソッドMを含むプログラムに対してDCEに
よるコード消去を行う(ステップ311)。図4に示す
ように、単純なDCEでは消去できなかったオブジェク
トvに関するコードが、ステップ310までの処理によ
りインライン展開されスカラー化されたことによって消
去される。
化の例を示す。オブジェクト参照の定義で典型的なもの
に、newによる、オブジェクトの生成がある。図5は、
このnewによるクラスSampleClassのインスタンス生成に
対して本実施の形態による最適化を実行した様子を示す
図である。図5に示す例は、クラスSampleClassのイン
スタンス生成によりオブジェクト参照vが定義され、そ
の使用(use)がオブジェクトvをレシーバとするメソ
ッドmtd1の呼び出しである場合を表す。ここで、メソッ
ドmtd1はオブジェクトvのインスタンス変数i1に値1を
代入してメソッドmtd2を呼び、メソッドmtd2はオブジェ
クトvのインスタンス変数i2に値2を代入する。オブジ
ェクトvがメソッドmtd1呼び出しに使われているので、
従来の単純なDCEでは何も削除しない。
において、データフロー解析によりinvoke v.mtd1(I)V
コードだけがオブジェクトvの使用(use)と分かる。
また、エスケープ解析によりメソッドmtd1はオブジェク
トvをグローバル化しないと分かる。結果として、オブ
ジェクトvの使用(use)はファントムユースのみであ
ることが分かる。そこで、処理対象抽出部110によ
り、これらのメソッド呼び出しが最適化の対象とされ
る。そして、図5に示すように、インライン展開処理部
130によりメソッドmtd1及びメソッドmtd2がインライ
ン展開され、スカラー化処理部140によりスカラー化
が行われる。各スカラー編集への代入はデッドストアで
あるので、DCE実行部150により削除される。以上
のようにして、無駄なコードを削除できた。
ampleClassのインスタンス生成に対して本実施の形態に
よる最適化を実行した様子を示す図であるが、ここでは
メソッドmtd2が副作用を持つ例を示す。この場合も、オ
ブジェクトvがメソッドmtd1呼び出しに使われているの
で、従来の単純なDCEでは何も削除しない。本実施の
形態では、メソッドmtd2において、オブジェクトvのイ
ンスタンス変数i2に値2を代入すると共に、グローバル
変数であるclass_vを1つカウントアップする。
ロー解析によりinvoke v.mtd1(I)Vコードだけがオブジ
ェクトvの使用(use)と分かり、エスケープ解析によ
りメソッドmtd1はオブジェクトvをグローバル化しない
と分かり、結局オブジェクトvの使用(use)はファン
トムユースのみであると分かる。したがって、処理対象
抽出部110によりメソッドmtd1及びメソッドmtd2が最
適化の対象とされ、インライン展開処理部130により
メソッドmtd1及びメソッドmtd2をインライン展開し、ス
カラー化処理部140によりスカラー化を行う。そし
て、デッドストアであるスカラー編集への代入部分が、
DCE実行部150により削除される。
コードは、newで生成されたオブジェクトの変数ではな
く、外部から観測できるコードであるため、デッドスト
アとならず、消去対象とはならない。すなわち、本実施
の形態によれば、インライン展開されたコード中に、st
atic変数あるいは他オブジェクトへの代入などグローバ
ル値に関する計算や、使用者(reaching use)がある計
算、すなわちデッドストアとならない計算が存在する場
合、当該計算は消去されずに残り、使用されない結果に
関する無駄な計算だけが削除されることとなる。
メソッド呼び出しを無視すれば使用者(reaching use)
がないようなオブジェクト参照の定義を対象とし、その
オブジェクトを操作する計算を削除する最適化方法を実
現することができる。
ンピュータシステムのシステム構成を示す図である。
明する図である。
の流れを説明するフローチャートである。
定のメソッド呼び出しに対して本実施の形態による最適
化処理を実行した様子を示す図である。
生成に対して本実施の形態による最適化を実行した様子
を示す図である。
ンス生成に対して本実施の形態による最適化を実行した
様子を示す図であり、メソッドmtd2が副作用を持つ例を
示す。
ソッド呼び出しの一例を示す図である。
…ファントムユース解析部、130…インライン展開処
理部、140…スカラー化処理部、150…DCE(デ
ッドコードエリミネーション)実行部、200…プログ
ラム実行部、300…メモリ、310…ファントムユー
スデータベース、400…コード生成装置、500…記
憶装置、600…ネットワーク
Claims (18)
- 【請求項1】 オブジェクト指向プログラミング言語で
記述された実行プログラムのソースコードを読み込み、
機械語コードに変換するプログラム変換方法において、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中のメソッド呼び出しに関して、当
該メソッド呼び出し中のオブジェクト参照の使用が、オ
ブジェクトの要素が活用されない引数であるかどうかを
調べるステップと、 前記実行プログラム中の所定のメソッド呼び出しに関し
て、当該メソッド呼び出しが当該メソッド呼び出し中の
オブジェクト参照をグローバル化せず、かつ当該メソッ
ド呼び出し中の全てのオブジェクト参照の使用が、オブ
ジェクトの要素が活用されない引数である場合に、デッ
ドコードエリミネーションにより当該メソッド呼び出し
における所定のコードを消去するステップと、 前記コードを消去された実行プログラムをメモリに格納
するステップとを含むことを特徴とするプログラム変換
方法。 - 【請求項2】 前記デッドコードエリミネーションによ
りメソッド呼び出しのコードを消去するステップに先立
って、当該メソッド呼び出しをインライン展開するステ
ップをさらに含むことを特徴とする請求項1に記載のプ
ログラム変換方法。 - 【請求項3】 前記デッドコードエリミネーションによ
りメソッド呼び出しのコードを消去するステップに先立
って、当該メソッド呼び出しにおけるオブジェクトのイ
ンスタンス変数をスカラー化するステップをさらに含む
ことを特徴とする請求項1に記載のプログラム変換方
法。 - 【請求項4】 オブジェクト指向プログラミング言語で
記述された実行プログラムのソースコードを読み込み、
機械語コードに変換するプログラム変換方法において、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中の所定のメソッド呼び出しをイン
ライン展開する第1のステップと、 インライン展開された前記メソッド呼び出しにおけるオ
ブジェクトのインスタンス変数をスカラー化する第2の
ステップと、 前記第1、第2のステップが施された前記実行プログラ
ムに対してデッドコードエリミネーションを実行する第
3のステップと、 デッドコードエリミネーションを施された実行プログラ
ムをメモリに格納する第4のステップとを含むことを特
徴とするプログラム変換方法。 - 【請求項5】 前記実行プログラム中のメソッド呼び出
しに関して、当該メソッド呼び出し中の全てのオブジェ
クト参照の使用が、オブジェクトの要素が活用されない
引数である場合に、当該メソッド呼び出しを前記インラ
イン展開の対象として決定するステップをさらに含むこ
とを特徴とする請求項4に記載のプログラム変換方法。 - 【請求項6】 前記実行プログラム中の所定のメソッド
呼び出しが当該メソッド呼び出し中のオブジェクト参照
をグローバル化しない場合に、当該メソッド呼び出しを
前記インライン展開の対象として決定するステップをさ
らに含むことを特徴とする請求項4に記載のプログラム
変換方法。 - 【請求項7】 オブジェクト指向プログラミング言語で
記述された実行プログラムのソースコードを読み込み、
機械語コードに変換するコンピュータ装置において、 メソッド呼び出しにおけるオブジェクト参照の使用の状
態に基づいて、処理対象となるメソッド呼び出しを決定
する処理対象抽出部と、 前記処理対象抽出部により処理対象として決定されたメ
ソッド呼び出しをインライン展開するインライン展開処
理部と、 前記インライン展開処理部にてインライン展開された前
記メソッド呼び出しにおけるオブジェクトのインスタン
ス変数をスカラー化するスカラー化処理部と、 前記インライン展開処理部及び前記スカラー化処理部に
よる処理が施された実行プログラムに対してデッドコー
ドエリミネーションを実行するデッドコードエリミネー
ション実行部とを備えることを特徴とするコンピュータ
装置。 - 【請求項8】 前記処理対象抽出部は、前記実行プログ
ラム中の所定のメソッド呼び出しに関して、当該メソッ
ド呼び出しが当該メソッド呼び出し中のオブジェクト参
照をグローバル化せず、かつ当該メソッド呼び出し中の
全てのオブジェクト参照の使用が、オブジェクトの要素
が活用されない引数である場合に、当該メソッド呼び出
しを処理対象として決定することを特徴とする請求項7
に記載のコンピュータ装置。 - 【請求項9】 前記実行プログラム中のメソッド呼び出
しに関して、当該メソッド呼び出し中のオブジェクト参
照の使用が、オブジェクトの要素が活用されない引数で
あるかどうかを調べるコード解析部をさらに備え、 前記処理対象抽出部は、前記コード解析部の解析結果に
基づいて処理対象となるメソッド呼び出しを決定するこ
とを特徴とする請求項7に記載のコンピュータ装置。 - 【請求項10】 オブジェクト指向プログラミング言語
で記述されたプログラムのソースコードをコンパイルし
て機械語コードに変換するコンパイラと、 機械語コードに変換された当該プログラムを実行するプ
ログラム実行部とを備え、 前記コンパイラは、 前記プログラム中の所定のメソッド呼び出しに関して、
当該メソッド呼び出しが当該メソッド呼び出し中のオブ
ジェクト参照をグローバル化せず、かつ当該メソッド呼
び出し中の全てのオブジェクト参照の使用が、オブジェ
クトの要素が活用されない引数である場合に、当該メソ
ッド呼び出しを処理対象とする処理対象抽出部と、 前記処理対象抽出部により処理対象として決定されたメ
ソッド呼び出しをインライン展開するインライン展開処
理部と、 前記インライン展開処理部にてインライン展開された前
記メソッド呼び出しにおけるオブジェクトのインスタン
ス変数をスカラー化するスカラー化処理部と、 前記インライン展開処理部及び前記スカラー化処理部に
よる処理が施された実行プログラムに対してデッドコー
ドエリミネーションを実行するデッドコードエリミネー
ション実行部とを備えることを特徴とするコンピュータ
装置。 - 【請求項11】 コンピュータを制御して、オブジェク
ト指向プログラミング言語で記述された実行プログラム
のソースコードを機械語コードに変換するプログラムで
あって、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中のメソッド呼び出しに関して、当
該メソッド呼び出し中のオブジェクト参照の使用が、オ
ブジェクトの要素が活用されない引数であるかどうかを
調べる処理と、 前記実行プログラム中の所定のメソッド呼び出しに関し
て、当該メソッド呼び出しが当該メソッド呼び出し中の
オブジェクト参照をグローバル化せず、かつ当該メソッ
ド呼び出し中の全てのオブジェクト参照の使用が、オブ
ジェクトの要素が活用されない引数である場合に、デッ
ドコードエリミネーションにより当該メソッド呼び出し
における所定のコードを消去する処理と、 前記コードを消去された実行プログラムをメモリに格納
する処理とを前記コンピュータに実行させることを特徴
とするプログラム。 - 【請求項12】 前記デッドコードエリミネーションに
よりメソッド呼び出しのコードを消去する処理に先立っ
て、当該メソッド呼び出しをインライン展開する処理
を、前記コンピュータにさらに実行させることを特徴と
する請求項11に記載のプログラム。 - 【請求項13】 前記デッドコードエリミネーションに
よりメソッド呼び出しのコードを消去する処理に先立っ
て、当該メソッド呼び出しにおけるオブジェクトのイン
スタンス変数をスカラー化する処理を前記コンピュータ
にさらに実行させることを特徴とする請求項11に記載
のプログラム。 - 【請求項14】 コンピュータを制御して、オブジェク
ト指向プログラミング言語で記述された実行プログラム
のソースコードを機械語コードに変換するプログラムで
あって、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中のメソッド呼び出しにおけるオブ
ジェクト参照の使用の状態に基づいて、処理対象となる
メソッド呼び出しを決定する手段と、 メモリから前記処理対象である実行プログラムを読み出
し、処理対象として決定された前記メソッド呼び出しを
インライン展開する手段と、 インライン展開された前記メソッド呼び出しにおけるオ
ブジェクトのインスタンス変数をスカラー化する手段
と、 前記インライン展開及び前記スカラー化が施された前記
実行プログラムに対してデッドコードエリミネーション
を実行する手段として前記コンピュータを機能させるこ
とを特徴とするプログラム。 - 【請求項15】 前記コンピュータの機能として実現さ
れる前記処理対象となるメソッド呼び出しを決定する手
段は、前記実行プログラム中の所定のメソッド呼び出し
に関して、当該メソッド呼び出しが当該メソッド呼び出
し中のオブジェクト参照をグローバル化せず、かつ当該
メソッド呼び出し中の全てのオブジェクト参照の使用
が、オブジェクトの要素が活用されない引数である場合
に、当該メソッド呼び出しを処理対象として決定するこ
とを特徴とする請求項14に記載のプログラム。 - 【請求項16】 前記実行プログラム中のメソッド呼び
出しに関して、当該メソッド呼び出し中のオブジェクト
参照の使用が、オブジェクトの要素が活用されない引数
であるかどうかを調べる手段として、前記コンピュータ
をさらに機能させ、 前記処理対象となるメソッド呼び出しを決定する手段
は、前記メソッド呼び出しに関して調べた結果に基づい
て処理対象となるメソッド呼び出しを決定することを特
徴とする請求項14に記載のプログラム。 - 【請求項17】 コンピュータを制御してオブジェクト
指向プログラミング言語で記述された実行プログラムの
ソースコードを機械語コードに変換するプログラムを、
当該コンピュータが読み取り可能に記録した記録媒体で
あって、 前記プログラムは、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中のメソッド呼び出しに関して、当
該メソッド呼び出し中のオブジェクト参照の使用が、オ
ブジェクトの要素が活用されない引数であるかどうかを
調べる処理と、 前記実行プログラム中の所定のメソッド呼び出しに関し
て、当該メソッド呼び出しが当該メソッド呼び出し中の
オブジェクト参照をグローバル化せず、かつ当該メソッ
ド呼び出し中の全てのオブジェクト参照の使用が、オブ
ジェクトの要素が活用されない引数である場合に、デッ
ドコードエリミネーションにより当該メソッド呼び出し
における所定のコードを消去する処理と、 前記コードを消去された実行プログラムをメモリに格納
する処理とを前記コンピュータに実行させることを特徴
とする記録媒体。 - 【請求項18】 コンピュータを制御してオブジェクト
指向プログラミング言語で記述された実行プログラムの
ソースコードを機械語コードに変換するプログラムを、
当該コンピュータが読み取り可能に記録した記録媒体で
あって、 前記プログラムは、 メモリから処理対象である実行プログラムを読み出し、
当該実行プログラム中のメソッド呼び出しにおけるオブ
ジェクト参照の使用の状態に基づいて、処理対象となる
メソッド呼び出しを決定する手段と、 メモリから前記処理対象である実行プログラムを読み出
し、処理対象として決定された前記メソッド呼び出しを
インライン展開する手段と、 インライン展開された前記メソッド呼び出しにおけるオ
ブジェクトのインスタンス変数をスカラー化する手段
と、 前記インライン展開及び前記スカラー化が施された前記
実行プログラムに対してデッドコードエリミネーション
を実行する手段として前記コンピュータを機能させるこ
とを特徴とする記録媒体。
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 true JP2003196106A (ja) | 2003-07-11 |
JP3813087B2 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) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
JP2015507793A (ja) * | 2011-12-23 | 2015-03-12 | ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ | データベース管理システムにおけるマイクロ特化の方法 |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
JP2022521127A (ja) * | 2019-02-26 | 2022-04-06 | インテル・コーポレーション | コンパイラのためのワークロード指向定数伝播 |
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 |
Families Citing this family (14)
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 |
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 |
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 |
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
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
US7917899B2 (en) | 2005-02-28 | 2011-03-29 | Kabushiki Kaisha Toshiba | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus |
JP2015507793A (ja) * | 2011-12-23 | 2015-03-12 | ザ アリゾナ ボード オブ リージェンツ オン ビハーフ オブ ザ ユニバーシティー オブ アリゾナ | データベース管理システムにおけるマイクロ特化の方法 |
US10365900B2 (en) | 2011-12-23 | 2019-07-30 | Dataware Ventures, Llc | Broadening field specialization |
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 |
JP2022521127A (ja) * | 2019-02-26 | 2022-04-06 | インテル・コーポレーション | コンパイラのためのワークロード指向定数伝播 |
JP7287743B2 (ja) | 2019-02-26 | 2023-06-06 | インテル・コーポレーション | コンパイラのためのワークロード指向定数伝播 |
US11922152B2 (en) | 2019-02-26 | 2024-03-05 | Intel Corporation | Workload oriented constant propagation for compiler |
Also Published As
Publication number | Publication date |
---|---|
US7373641B2 (en) | 2008-05-13 |
US20030149969A1 (en) | 2003-08-07 |
JP3813087B2 (ja) | 2006-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
US7725883B1 (en) | Program interpreter | |
US6233733B1 (en) | Method for generating a Java bytecode data flow graph | |
US5606697A (en) | Compiler system for language processing program | |
US7784039B2 (en) | Compiler, compilation method, and compilation program | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US6934940B2 (en) | Source code transformation-temporary object reduction | |
US20110067018A1 (en) | Compiler program, compilation method, and computer system | |
US7418699B2 (en) | Method and system for performing link-time code optimization without additional code analysis | |
US20100199269A1 (en) | Program optimization device and program optimization method | |
KR20010086159A (ko) | 자바 프로그램들 및 이를 위한 소프트웨어 프러덕트의플랫폼 특정 효율 강화를 위한 방법 | |
JP2002259135A (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
US8291397B2 (en) | Compiler optimized function variants for use when return codes are ignored | |
JP2002091777A (ja) | コンパイラ及びそのレジスタ割付方法 | |
US10013244B2 (en) | Apparatus and method to compile a variadic template function | |
US8762974B1 (en) | Context-sensitive compiler directives | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
US20030172194A1 (en) | Global constant pool to allow deletion of constant pool entries | |
JP3790707B2 (ja) | プログラム変換方法、これを用いたコンピュータ装置及びプログラム | |
JPH09128246A (ja) | コンパイラ装置 | |
JP2017091070A (ja) | 実行可能コード生成プログラムおよび実行可能コード生成装置 | |
US20060048012A1 (en) | Context sensitive debug streams with output throttling controls | |
JPH0689187A (ja) | インライン展開最適化方法 | |
US7043721B2 (en) | Initial object capacity determination | |
JPH11212807A (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 |