JP3790707B2 - プログラム変換方法、これを用いたコンピュータ装置及びプログラム - Google Patents
プログラム変換方法、これを用いたコンピュータ装置及びプログラム Download PDFInfo
- Publication number
- JP3790707B2 JP3790707B2 JP2002008904A JP2002008904A JP3790707B2 JP 3790707 B2 JP3790707 B2 JP 3790707B2 JP 2002008904 A JP2002008904 A JP 2002008904A JP 2002008904 A JP2002008904 A JP 2002008904A JP 3790707 B2 JP3790707 B2 JP 3790707B2
- Authority
- JP
- Japan
- Prior art keywords
- execution program
- program
- range
- computer
- memory
- 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
Description
【発明の属する技術分野】
本発明は、プログラム中のスカラーリプレイスメント(scalar replacement)により、プログラムの実行効率の向上を図る方法に関する。
【0002】
【従来の技術】
プログラムを最適化する手法に、グローバルなメモリ上にある変数をメソッド内でローカルな場所(ローカル変数など)に置き換える、スカラーリプレイスメントという手法がある。この最適化は、「メモリアクセスのコストを減らす」という効果もあるが、それだけではなく、置き換えた変数の生存区間が大きく広がるため、その後の最適化(共通部分式の除去等)の効果を大幅に高めるという副次的な効果があることでも知られている。
【0003】
このスカラーリプレイスメントを行う場合、プログラム中に存在するメソッド呼び出しが支障となる。すなわち、グローバルなメモリ上にある変数の値は、呼び出されたメソッド内で変更される可能性があるため、単純にメソッド呼び出しを越えて最適化することができなかった。
【0004】
従来、メソッド呼び出しを越えてメモリアクセスを最適化するためには、エスケープアナリシス(Escape Analysis)と呼ばれる技術を用いて呼び出されるメソッドの中を解析し、その解析結果に基づいて最適化を行う方法があった。この方法では、メソッド内のnewやnewarray等で作成されるオブジェクトに関して、そのメソッド内の全ての場所で当該メソッドの外から当該オブジェクトを参照できない(これをエスケープしていないという)場合に限り、当該オブジェクトのメモリをヒープ領域ではなくスタック領域にとることにより最適化が行われる。なお、エスケープアナリシスについては、例えば、次の文献1、2に詳細に記載されている。
文献1:Escape Analysis for Java(In Proceedings of the 1999 ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications(以下、OOPSLA)'99)
文献2:Compositional Pointer and Escape Analysis for Java Programs (OOPSLA'99)
【0005】
【発明が解決しようとする課題】
しかしながら、上記のように、エスケープアナリシスを用いた最適化は、メソッド内に一個所でもエスケープしている部分がある場合には、当該メソッドに対して最適化を行うことができなかった。
また、エスケープアナリシスによる呼び出しメソッド内の解析は、多大な処理コストが必要であるため、導入することが困難な場合があった。例えば、JavaにおけるJIT(Just In Time)コンパイラのようなコンパイル時間に影響を受けるコンパイラに適用するには、メソッドサイズ等を考慮した非常に厳しい制限が行われていた。
さらに、動的なコール命令などのために、呼び出しメソッド内の解析そのものが全くできない場合もあった。
【0006】
そこで、本発明は、プログラムの最適化において、呼び出しメソッド内の解析を行うことなく、より効果的にスカラーリプレイスメントを行えるようにすることを目的とする。
【0007】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、コンピュータを用いてオブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換する、次のようなプログラム変換方法として実現される。すなわち、このプログラム変換方法は、処理対象である実行プログラム中のメソッドに関して、このメソッド内で作成されたオブジェクトがエスケープしていない範囲を求めるステップと、このオブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行うステップと、スカラーリプレイスメントを施された実行プログラムをメモリに格納するステップとを含むことを特徴とする。
【0008】
ここで、このスカラーリプレイスメントを実行するステップでは、好ましくは、オブジェクトがエスケープしていない範囲内のメソッド呼び出しについて、このオブジェクトに対するメモリアクセスが変更されないものとしてスカラーリプレイスメントを実行する。
また、このオブジェクトがエスケープしていない範囲を求めるステップは、詳しくは、実行プログラムに対し、前方データフロー解析によりベーシックブロックごとに、このメソッド内で作成され、かつエスケープしていないオブジェクトの集合を求めるステップと、このベーシックブロック内の命令を先頭から順に調べ、各命令の場所で、このメソッド内で作成され、かつエスケープしていないオブジェクトの集合を求めるステップとを含む。
【0009】
また、本発明による他のプログラム変換方法は、処理対象である実行プログラムのソースコードに基づいて機械語コードを生成するステップと、生成された機械語コードによる実行プログラム中のメソッドに関して、このメソッド内で作成されたオブジェクトが外部から参照されない範囲で、メソッド呼び出しを越えてスカラーリプレイスメントを行うステップとを含むことを特徴とする。
【0010】
ここで、このスカラーリプレイスメントを行うステップは、詳しくは、実行プログラムのベーシックブロックごとに、メソッド内で作成され、かつグローバルなメモリに書き込まれていないオブジェクトの集合を求めることにより、このオブジェクトが外部から参照されない範囲を決定するステップを含む。
【0011】
また、上記の目的を達成する他の本発明は、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換する、次のように構成されたコンピュータ装置として実現される。すなわち、このコンピュータ装置は、処理対象である実行プログラムのソースコードに基づいて機械語コードを生成するコード変換部と、この機械語コードによる実行プログラム中のメソッドに関して、このメソッド内で作成されたオブジェクトがエスケープしていない範囲を求める最適化範囲決定部と、このオブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行うスカラーリプレイスメント実行部とを備えることを特徴とする。
【0012】
ここで、このスカラーリプレイスメント実行部は、好ましくは、オブジェクトがエスケープしていない範囲内のメソッド呼び出しを、当該オブジェクトに対するメモリアクセスが変更されないものとしてスカラーリプレイスメントを実行する。
さらに、最適化範囲決定部は、より詳しくは、実行プログラムに対し、前方データフロー解析によりベーシックブロックごとに、メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める第1の手段と、このベーシックブロック内の命令を先頭から順に調べ、各命令の場所で、メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める第2の手段とを備える。
【0013】
また、本発明による他のコンピュータ装置は、実行プログラムのソースコードに基づいて機械語コードを生成するコード変換部と、コード変換部により生成された機械語コードの実行プログラムに対し、この実行プログラム中のメソッドに関して、このメソッド内で作成されたオブジェクトがエスケープしていない範囲内でメソッド呼び出しを越えてスカラーリプレイスメントを行う最適化部とを備えることを特徴とする。
【0014】
上記のコンピュータ装置は、機械語コードに変換された実行プログラムを実行するプログラム実行部をさらに備える構成とすることもできる。
さらにまた、本発明は、コンピュータを制御して上述したプログラム変換方法や各種の機能を実現するプログラムとして実現することができる。このプログラムは、磁気ディスクや光ディスク、半導体メモリ、その他の記録媒体に格納して配布したり、ネットワークを介して配信したりすることにより提供することができる。
【0015】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいて、この発明を詳細に説明する。
図1は、本実施の形態による最適化方法を実現するコンピュータシステムのシステム構成を示す図である。
図1を参照すると、本実施の形態におけるコンピュータシステムは、ソースプログラム(入力コードまたはソースコード)をコンパイルするコンパイラ100と、コンパイラ100にてコンパイルされたオブジェクトプログラム(出力コードまたはオブジェクトコード)を実行して種々の処理を行うプログラム実行部200とを備える。コンパイラ100及びプログラム実行部200は、パーソナルコンピュータやワークステーションなどのコンピュータ装置におけるプログラム制御されたCPU及びRAM等のメモリにて実現される。図示しないメモリには、CPUを制御してコンパイラ100あるいはプログラム実行部200として動作させるためのプログラムやコンパイルの対象となるプログラムが格納される。なお、メモリに格納されるプログラムは、必要に応じて、適宜磁気ディスクその他の記録媒体に退避、保存されることは言うまでもない。
【0016】
図1において、コンパイラ100は、コード入力部300から所定のプログラム言語やバイトコード(byte code)で記述されたプログラム(コンパイル対象のプログラム、以下、実行プログラムと称す)のソースコードを入力して処理し、機械語で記述されたオブジェクトコードを生成して出力する。このコード入力部300は、ソースコードを生成するコード生成装置や、当該コード生成装置にて生成されたソースコードを記憶した記憶装置(磁気ディスク装置など)にて実現される。また、ネットワーク上に存在するコード生成装置や記憶装置から当該ネットワークを介してソースコードを入力するネットワークインターフェイスにて実現することもできる。コンパイラ100により生成された実行プログラムのオブジェクトコードは、プログラム実行部200により実行される。
なお、本実施の形態において、コンパイラ100は、JavaにおけるJIT(Just In Time)コンパイラのような、プログラム実行部200が実行プログラムを実行する際に動的にコンパイル処理を行うコンパイラであっても良いし、ソースプログラムを予めコンパイルして生成されたオブジェクトプログラムを実行プログラムとする使用形態におけるコンパイラであっても良い。また、コンパイラ100とプログラム実行部200とは、単一のコンピュータ装置に設けても良いし、別個のコンピュータ装置においてコンパイラ100とプログラム実行部200とを実現する構成としても良い。
【0017】
図2は、本実施の形態におけるコンパイラ100の構成を説明する図である。
本実施の形態のコンパイラ100は、コンパイルされたプログラムコードに対して、次の手法による最適化を実行する。すなわち、
・メソッド内のnew、newarray等で作成されたオブジェクトObjについて、エスケープしていない(すなわち、当該メソッドの外から当該オブジェクトObjを参照できない)範囲R(Obj)を求める。
・範囲R(Obj)内のメソッド呼び出しに対し、オブジェクトObjに対するメモリアクセスは変更されないものとして扱ってスカラーリプレイスメントを行う。
【0018】
図2を参照すると、コンパイラ100は、ソースコードをオブジェクトコードに変換するコード変換部110と、コード変換部110にて生成されたオブジェクトコードに対して上述した範囲R(Obj)を決定する最適化範囲決定部120と、最適化範囲決定部120により決定された範囲R(Obj)内のメソッド呼び出しに対してスカラーリプレイスメントを行うスカラーリプレイスメント実行部130とを備える。ここで、最適化範囲決定部120及びスカラーリプレイスメント実行部130が上述した最適化を行う最適化部として機能する。
図2に示したコンパイラ100の各構成要素は、プログラム制御されたCPUにて実現される仮想的なソフトウェアブロックである。なお、図2に示したコンパイラ100の構成要素は、本実施の形態における特徴的な機能に関するものである。特に図示しないが、実際にはコンパイラ100は、コード変換のために必要なソースコードの字句解析や構文解析、本実施の形態による最適化以外の各種の最適化処理といったコンパイル処理における一般的な機能をさらに有することは言うまでもない。
【0019】
上記のように構成されたコンパイラ100は、処理対象である実行プログラムを入力してメモリに保持する。そして、当該メモリから実行プログラムを読み出して字句解析や構文解析を行った後、これらの解析で得られた情報に基づいて、コード変換部110によりオブジェクトコードを生成する。生成されたオブジェクトコードはメモリに格納される。
【0020】
コンパイラ100の最適化範囲決定部120は、コード変換部110にて生成されたオブジェクトコードをメモリから読み出し、上述したように、このオブジェクトコードを対象として、範囲R(Obj)を求める。
具体的な処理としては、まず、次の数1式で示される前方データフロー解析を使って、ベーシックブロックnの先頭で「メソッド内でnew、newarray等で作成され、まだエスケープしていないオブジェクト」と判断されるオブジェクトの集合In(n)を求める。そして、求まった集合In(n)に基づいて、ベーシックブロックn内の命令を先頭から順に調べながら、各命令の場所で「メソッド内でnew, newarray等で作成され、まだエスケープしていないオブジェクト」の集合を求め、当該集合に含まれるオブジェクトの範囲を範囲R(Obj)とする。
【数1】
ここで、Gen(n)は、ベーシックブロックn内でnew、newarray等で作成され、ベーシックブロックnの最後の点で、まだエスケープしていないオブジェクトの集合である。Kill(n)は、ベーシックブロックn内でエスケープするオブジェクトの集合である。また、ベーシックブロックとは、ストレートコード、すなわちコントロールフローが途中に入ることもなく、途中から出ることもないようなコード列の範囲をブロックで認識したものである。
【0021】
図3は、最適化範囲決定部120にて実行される、前方データフロー解析によりオブジェクトの集合In(n)を求める処理の詳細を説明するフローチャートである。
図3に示すように、最適化範囲決定部120は、まずパラメータn、changeの初期化を行う(ステップ301)。ここで、nはベーシックブロック番号、changeはデータフロー方程式を解く際の収束判定のフラグを意味する。
次に、最適化範囲決定部120は、後でオブジェクトの集合Inの比較を行うため、OldInという集合にコピーを行う(ステップ302)。そして、ベーシックブロックn(図3ではブロックnと表記)の直前のベーシックブロック(図3ではブロックmと表記)が存在するかどうかを調べる(ステップ303)。そのようなベーシックブロック(ブロックm)が存在するならば、集合In(n)の内容をIn(n)=Out(m)とする(ステップ304)。そして、他にベーシックブロックnの直前のベーシックブロック(ブロックm)が存在するかどうかを調べる(ステップ305)。そのようなベーシックブロック(ブロックm)が存在するならば、集合In(n)の内容をIn(n)=In(n)∩Out(m)とする(ステップ306)。このステップ303からステップ306の処理は、数1式の最初の式(集合Outから集合Inを計算する)を実際に計算している部分である。
【0022】
ステップ303またはステップ305において、ベーシックブロックnの直前にベーシックブロック(ブロックm)が存在しない場合、次に最適化範囲決定部120は、ステップ302で生成された集合OldInと集合Inとを比較する。そして、両者の内容が異なっているならば、changeのフラグを立てる(ステップ307)。
【0023】
次に、最適化範囲決定部120は、後で集合Outの比較を行うため、OldOutという集合にコピーを行う(ステップ308)。そして、集合Out(n)の内容をOut(n)=(In(n)−Kill(n))∪Gen(n)とする(ステップ309)。このステップ309の処理は、数1式の2つ目の式(InからOutを計算する)を実際に計算している部分である。
次に、最適化範囲決定部120は、ステップ308で生成された集合OldOutと集合Outとを比較する。そして、両者の内容が異なっているならば、changeのフラグを立てる(ステップ310)。
【0024】
以上の処理の後、最適化範囲決定部120は、パラメータnを1加算し(ステップ311)、新たなnの値がベーシックブロックの数に達したかどうかを調べる。そして、nの値がベーシックブロックの数に達するまで(すなわち、全てのベーシックブロックに対して処理が終了するまで)ステップ302乃至ステップ310の処理を繰り返す(ステップ312)。
全てのベーシックブロックに対して処理が終了したならば、次に最適化範囲決定部120は、changeのフラグが立っている集合があるかどうかを調べ、全てのchangeのフラグが立たなくなるまで(すなわち、収束するまで)ステップ301乃至ステップ312の処理を繰り返す(ステップ313)。
【0025】
上述したように、最適化範囲決定部120は、この後、上記のようにして求まった集合In(n)に基づいて、ベーシックブロックn内の命令を先頭から順に調べ、範囲R(Obj)を決定する。
【0026】
コンパイラ100のスカラーリプレイスメント実行部130は、最適化範囲決定部120にて決定された範囲R(Obj)内のメソッド呼び出しについて、オブジェクトObjに対するメモリアクセスは変更されないものとして扱って(すなわち、メソッド呼び出しを越えて)、スカラーリプレイスメントを行う。
そしてさらに、スカラーリプレイスメントされたメソッド呼び出し命令の処理の中で、
「メソッド呼び出しでメモリの値が変わる可能性があるので、このメソッド呼び出しを越えて最適化できない」
という処理をしている部分を、次のように2つの場合に応じた処理に変更する。
・当該部分がこの命令の場所で求まった、メソッド内でnew、newarray等で作成され、まだエスケープしていないオブジェクトの集合であるならば、このメソッド呼び出しでオブジェクト内のメモリの値が絶対に変わらないので、このメソッド呼び出しを越えて最適化できる。
・当該部分がこの命令の場所で求まった、メソッド内でnew、newarray等で作成され、まだエスケープしていないオブジェクトの集合でないならば、このメソッド呼び出しでオブジェクト内のメモリの値が変わる可能性があるので、このメソッド呼び出しを越えて最適化できない。
図4は、この処理の変更のアルゴリズムを示す図である。
以上のようにしてスカラーリプレイスメントによる最適化を施された実行プログラムは、必要に応じてさらに他の最適化を施された後にメモリに格納され、プログラム実行部200により読み出されて実行されることとなる。
【0027】
次に、本実施の形態を実際のプログラムに適用した場合の最適化の実行例を説明する。
図5は、適用対象のプログラムを例示する図である。
図5に示すプログラムにおいて、従来のエスケープアナリシスでは、メソッド呼び出しfoo(D, E)が存在するため、このメソッド呼び出しfoo(D, E)の中を解析し、Obj.xの値が変わらないことが保証されなければ、Obj.xのアクセスを最適化することができない。この解析に多大な処理コストを要する他、メソッド呼び出しによっては、そのような解析ができないために、スカラーリプレイスメントによる最適化を行うことができない。
【0028】
本実施の形態では、図5のプログラムに対して、まず最適化範囲決定部120により、範囲R(Obj)が決定される。
図6は、図5のプログラムに対して、範囲R(Obj)を決定した様子を示す図である。
図6において、2行目から4行目までの、Obj.x = a、foo (D, E)、b = Obj.x; の3行は、new(図では大文字で表記)で定義されたObjがエスケープしていない。そして、次のD.obj = Objにおいて、Objをグローバルなメモリへ書き込むことにより、このメソッド外からObjがアクセス可能となるため、Objはエスケープしたと判断される。そこで、上の3行の範囲が範囲R(Obj)となる。
【0029】
次に、スカラーリプレイスメント実行部130により、範囲R(Obj)に対するスカラーリプレイスメントが行われる。
図7は、図6に示した範囲R(Obj)に対してスカラーリプレイスメントを実行した様子を示す図である。
図7において、3行目のfoo(D, E)について、当該部分がメソッド内でnewによって作成され、まだエスケープしていないオブジェクトの集合に含まれていることから、オブジェクトObjは、ここのfooの中から絶対にアクセスできないことがわかる。したがって、Objに対するメモリアクセスに関し、このメソッドコールをKillにする必要は無い。
また、4行目は、スカラーリプレイスメントにより、b = a(2行目参照)に置き換えられ、メモリからのロードがなくなっている(最適化されている)。
【0030】
これに対して、6行目のfoo(D, E)は5行目のD.obj = ObjによりObjがエスケープした後のメソッド呼び出しであるため、変数の値が呼び出されたメソッドfoo(D, E)内で変更される可能性がある。そのため、次のc=Obj.x;は4行目のように最適化することはできない。
【0031】
以上のようにして、本実施の形態によれば、メソッド中に他のメソッドに対するメソッド呼び出しが存在していても、当該メソッド内で定義されたオブジェクトに関して、当該オブジェクトがエスケープしない範囲でスカラーリプレイスメントによる最適化を行うことが可能となる。
また、メソッドが動的なコール命令を含む場合にも、以上の手法をそのまま利用して、当該メソッド内で定義されたオブジェクトに関して、当該オブジェクトがエスケープしない範囲でスカラーリプレイスメントによる最適化を行うことが可能となる。
さらに、エスケープアナリシスによる解析が不要であるため、当該解析処理に要する処理コストが削減され、JavaにおけるJITコンパイラのような動的なコンパイラに好適である。
【0032】
【発明の効果】
以上説明したように、本発明によれば、プログラムの最適化において、メソッド内の解析を行うことなく、より効果的にスカラーリプレイスメントを行うことが可能となる。
【図面の簡単な説明】
【図1】 本実施の形態による最適化方法を実現するコンピュータシステムのシステム構成を示す図である。
【図2】 本実施の形態におけるコンパイラの構成を説明する図である。
【図3】 本実施の形態の最適化範囲決定部によるオブジェクトの集合In(n)を求める処理の詳細を説明するフローチャートである。
【図4】 本実施の形態のスカラーリプレイスメントを行った後における処理の変更のアルゴリズムを示す図である。
【図5】 本実施の形態の適用対象であるプログラムを例示する図である。
【図6】 図5のプログラムに対して、範囲R(Obj)を決定した様子を示す図である。
【図7】 図6に示した範囲R(Obj)に対してスカラーリプレイスメントを実行した様子を示す図である。
【符号の説明】
100…コンパイラ、110…コード変換部、120…最適化範囲決定部、130…スカラーリプレイスメント実行部、200…プログラム実行部、300…コード入力部
Claims (17)
- コンピュータにより、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換方法において、
前記コンピュータが、メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲を求めるステップと、
前記コンピュータが、前記オブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行うステップと
前記コンピュータが、前記スカラーリプレイスメントを施された実行プログラムをメモリに格納するステップと
を含むことを特徴とするプログラム変換方法。 - 前記スカラーリプレイスメントを実行するステップは、前記オブジェクトがエスケープしていない範囲内のメソッド呼び出しについて、当該オブジェクトに対するメモリアクセスが変更されないものとしてスカラーリプレイスメントを実行するステップを含むことを特徴とする請求項1に記載のプログラム変換方法。
- 前記オブジェクトがエスケープしていない範囲を求めるステップは、
前記実行プログラムに対し、前方データフロー解析によりベーシックブロックごとに、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求めるステップと、
前記ベーシックブロック内の命令を先頭から順に調べ、各命令の場所で、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求めるステップと
を含むことを特徴とする請求項1に記載のプログラム変換方法。 - コンピュータにより、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するプログラム変換方法において、
前記コンピュータが、メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラムのソースコードに基づいて前記機械語コードを生成し、生成された機械語コードによる実行プログラムをメモリに格納するステップと、
前記コンピュータが、前記メモリから前記機械語コードによる実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトが外部から参照されない範囲で、メソッド呼び出しを越えてスカラーリプレイスメントを行うステップと、
前記コンピュータが、前記スカラーリプレイスメントを施された実行プログラムをメモリに格納するステップと
を含むことを特徴とするプログラム変換方法。 - 前記スカラーリプレイスメントを行うステップは、
前記実行プログラムのベーシックブロックごとに、前記メソッド内で作成され、かつグローバルなメモリに書き込まれていないオブジェクトの集合を求めることにより、当該オブジェクトが外部から参照されない範囲を決定するステップを含むことを特徴とする請求項4に記載のプログラム変換方法。 - オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するコンピュータ装置において、
処理対象である前記実行プログラムのソースコードに基づいて前記機械語コードを生成するコード変換部と、
前記実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲を求める最適化範囲決定部と、
前記最適化範囲決定部にて求められた前記オブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行うスカラーリプレイスメント実行部とを備えること
を特徴とするコンピュータ装置。 - 前記スカラーリプレイスメント実行部は、前記オブジェクトがエスケープしていない範囲内のメソッド呼び出しを、当該オブジェクトに対するメモリアクセスが変更されないものとしてスカラーリプレイスメントを実行することを特徴とする請求項6に記載のコンピュータ装置。
- 前記最適化範囲決定部は、
前記実行プログラムに対し、前方データフロー解析によりベーシックブロックごとに、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める第1の手段と、
前記ベーシックブロック内の命令を先頭から順に調べ、各命令の場所で、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める第2の手段と
を備えることを特徴とする請求項6に記載のコンピュータ装置。 - オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを読み込み、機械語コードに変換するコンピュータ装置において、
前記実行プログラムのソースコードに基づいて前記機械語コードを生成するコード変換部と、
前記コード変換部により生成された前記機械語コードの実行プログラムに対し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲内でメソッド呼び出しを越えてスカラーリプレイスメントを行う最適化部と
を備えることを特徴とするコンピュータ装置。 - オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードをコンパイルして機械語コードに変換するコンパイラと、
機械語コードに変換された当該プログラムを実行するプログラム実行部とを備え、
前記コンパイラは、
前記実行プログラムのソースコードに基づいて前記機械語コードを生成するコード変換部と、
メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲を求める最適化範囲決定部と、
前記最適化範囲決定部にて求められた前記オブジェクトがエスケープしていない範囲内で、当該範囲内のメソッド呼び出しを越えてスカラーリプレイスメントを行うスカラーリプレイスメント実行部と、
を備えることを特徴とするコンピュータ装置。 - コンピュータを制御して、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムであって、
メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲を求める処理と、
前記オブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行う処理と、
前記スカラーリプレイスメントを施された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - 前記スカラーリプレイスメントを実行する処理において、前記オブジェクトがエスケープしていない範囲内のメソッド呼び出しを、当該オブジェクトに対するメモリアクセスが変更されないものとしてスカラーリプレイスメントを、前記コンピュータに実行させることを特徴とする請求項11に記載のプログラム。
- 前記オブジェクトがエスケープしていない範囲を求める処理は、
前記実行プログラムに対し、前方データフロー解析によりベーシックブロックごとに、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める処理と、
前記ベーシックブロック内の命令を先頭から順に調べ、各命令の場所で、前記メソッド内で作成され、かつエスケープしていないオブジェクトの集合を求める処理と
を含むことを特徴とする請求項11に記載のプログラム。 - コンピュータを制御して、オブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムであって、
メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラムのソースコードに基づいて前記機械語コードを生成し、生成された機械語コードによる実行プログラムをメモリに格納する処理と、
前記メモリから前記機械語コードによる実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトが外部から参照されない範囲で、メソッド呼び出しを越えてスカラーリプレイスメントを行う処理と、
前記スカラーリプレイスメントを施された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とするプログラム。 - 前記スカラーリプレイスメントを行う処理は、
前記実行プログラムのベーシックブロックごとに、前記メソッド内で作成され、かつグローバルなメモリに書き込まれていないオブジェクトの集合を求めることにより、当該オブジェクトが外部から参照されない範囲を決定する処理を含むことを特徴とする請求項14に記載のプログラム。 - コンピュータを制御してオブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムを、当該コンピュータが読み取り可能に記録した記録媒体であって、
前記プログラムは、
メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトがエスケープしていない範囲を求める処理と、
前記オブジェクトがエスケープしていない範囲内でスカラーリプレイスメントを行う処理と、
前記スカラーリプレイスメントを施された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とする記録媒体。 - コンピュータを制御してオブジェクト指向プログラミング言語で記述された実行プログラムのソースコードを機械語コードに変換するプログラムを、当該コンピュータが読み取り可能に記録した記録媒体であって、
前記プログラムは、
メモリから処理対象である前記実行プログラムを読み出し、当該実行プログラムのソースコードに基づいて前記機械語コードを生成し、生成された機械語コードによる実行プログラムをメモリに格納する処理と、
前記メモリから前記機械語コードによる実行プログラムを読み出し、当該実行プログラム中のメソッドに関して、当該メソッド内で作成されたオブジェクトが外部から参照されない範囲で、メソッド呼び出しを越えてスカラーリプレイスメントを行う処理と、
前記スカラーリプレイスメントを施された実行プログラムをメモリに格納する処理と
を前記コンピュータに実行させることを特徴とする記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002008904A JP3790707B2 (ja) | 2002-01-17 | 2002-01-17 | プログラム変換方法、これを用いたコンピュータ装置及びプログラム |
US10/342,421 US7240337B2 (en) | 2002-01-17 | 2003-01-14 | Executing scalar replacement in program optimization |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002008904A JP3790707B2 (ja) | 2002-01-17 | 2002-01-17 | プログラム変換方法、これを用いたコンピュータ装置及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003216442A JP2003216442A (ja) | 2003-07-31 |
JP3790707B2 true JP3790707B2 (ja) | 2006-06-28 |
Family
ID=19191466
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002008904A Expired - Fee Related JP3790707B2 (ja) | 2002-01-17 | 2002-01-17 | プログラム変換方法、これを用いたコンピュータ装置及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US7240337B2 (ja) |
JP (1) | JP3790707B2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7117318B1 (en) * | 2003-08-04 | 2006-10-03 | Azul Systems, Inc. | Memory management |
WO2005029280A2 (en) * | 2003-09-19 | 2005-03-31 | Netezza Corporation | Performing sequence analysis as a multipart plan storing intermediate results as a relation |
US8015556B2 (en) * | 2006-10-12 | 2011-09-06 | International Business Machines Corporation | Efficient method of data reshaping for multidimensional dynamic array objects in the presence of multiple object instantiations |
KR20120058455A (ko) * | 2009-04-28 | 2012-06-07 | 인터내셔널 비지네스 머신즈 코포레이션 | 멀티 스레드 상에서 동작하는 프로그램의 프로그램 코드를 록 충돌이 적은 프로그램 코드로 변환하기 위한 방법, 및 그 컴퓨터 프로그램 및 컴퓨터 시스템 |
JP2011013985A (ja) | 2009-07-02 | 2011-01-20 | Internatl Business Mach Corp <Ibm> | プログラム、装置、および方法 |
JP5576305B2 (ja) | 2011-01-20 | 2014-08-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータの動作制御方法、プログラム及びシステム |
US9104577B2 (en) | 2013-08-27 | 2015-08-11 | International Business Machines Corporation | Optimizing memory bandwidth consumption using data splitting with software caching |
US9823913B2 (en) * | 2015-12-03 | 2017-11-21 | International Business Machines Corporation | Method of adding local variables in place of global in JavaScript |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5107418A (en) | 1990-06-11 | 1992-04-21 | Supercomputer Systems Limited Partnership | Method for representing scalar data dependences for an optimizing compiler |
US5710927A (en) * | 1995-06-14 | 1998-01-20 | Kuck & Associates, Inc. | Method of replacing lvalues by variables in programs containing nested aggregates in an optimizing compiler |
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US6681385B1 (en) * | 1999-10-07 | 2004-01-20 | Microsoft Corporation | Method and apparatus for determining the relationships and useful lifetime of objects in a program |
US6769004B2 (en) * | 2000-04-27 | 2004-07-27 | Irobot Corporation | Method and system for incremental stack scanning |
US6665865B1 (en) * | 2000-04-27 | 2003-12-16 | Microsoft Corporation | Equivalence class based synchronization optimization |
CA2321018A1 (en) * | 2000-09-27 | 2002-03-27 | Ibm Canada Limited-Ibm Canada Limitee | Optimizing compilation by forward store movement |
US7185327B2 (en) * | 2001-01-09 | 2007-02-27 | Hewlett-Packard Development Company, L.P. | System and method for optimizing operations via dataflow analysis |
-
2002
- 2002-01-17 JP JP2002008904A patent/JP3790707B2/ja not_active Expired - Fee Related
-
2003
- 2003-01-14 US US10/342,421 patent/US7240337B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US7240337B2 (en) | 2007-07-03 |
JP2003216442A (ja) | 2003-07-31 |
US20030140336A1 (en) | 2003-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7725883B1 (en) | Program interpreter | |
US7966610B2 (en) | Application of optimization techniques to intermediate representations for code generation | |
EP1451682B1 (en) | Platform-independent selective ahead-of-time compilation | |
EP0646864B1 (en) | Optimising compiler | |
US8522222B2 (en) | Tracing just-in-time compilation with pointers to local variables | |
US7823139B2 (en) | Method and system for translating programming languages | |
JPH07129412A (ja) | コンパイル方法及び装置 | |
JPH09330233A (ja) | 最適目的コード生成方法 | |
JPH08339304A (ja) | 機械独立コードを含むプラットフォーム標準オブジェクト・ファイルを生成する方法および装置 | |
US8056061B2 (en) | Data processing device and method using predesignated register | |
JP3813087B2 (ja) | プログラム変換方法、コンピュータ装置及びプログラム | |
JP3790707B2 (ja) | プログラム変換方法、これを用いたコンピュータ装置及びプログラム | |
US7458071B2 (en) | Compilation method, compiler apparatus and compiler | |
US20020062478A1 (en) | Compiler for compiling source programs in an object-oriented programming language | |
JP4768984B2 (ja) | コンパイル方法、コンパイルプログラムおよびコンパイル装置 | |
JP2009169864A (ja) | コンパイル方法およびコンパイルプログラム | |
JP3871312B2 (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
JPH11212807A (ja) | プログラム実行方法 | |
JP3018783B2 (ja) | コンパイル方式 | |
JPH11175351A (ja) | プログラム変換装置、高級言語プログラム内アセンブラ表現方法および記録媒体 | |
JP2001034482A (ja) | コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体 | |
JPH06214800A (ja) | 目的プログラムの最適化処理システム | |
JP2001290652A (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 | |
JP2002351674A (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 | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060322 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20060322 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060403 |
|
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: 20090407 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100407 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110407 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110407 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |