JP3992102B2 - コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 - Google Patents
コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 Download PDFInfo
- Publication number
- JP3992102B2 JP3992102B2 JP2003159206A JP2003159206A JP3992102B2 JP 3992102 B2 JP3992102 B2 JP 3992102B2 JP 2003159206 A JP2003159206 A JP 2003159206A JP 2003159206 A JP2003159206 A JP 2003159206A JP 3992102 B2 JP3992102 B2 JP 3992102B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- optimization
- target
- group
- instruction group
- 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
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】
【従来の技術】
コンパイル対象の対象プログラムに含まれる関数又はメソッド中には、頻繁に実行される命令群と、全く或いはほとんど実行されない命令群とが存在する。従来、予め対象プログラムを実行することにより各命令の実行頻度を計測しておき、頻繁に実行される命令群を優先して最適化する方法(非特許文献1参照。)、又は頻繁に実行される命令群のみをコンパイルする方法(非特許文献5参照。)が提案されている。後者の方法によると、コンパイラは、ほとんど実行されない命令群のコンパイルを、これらの命令群の実行が必要となる時点まで遅らせることができる。
また、頻繁に実行される命令群を、ほとんど実行されない命令群とは異なるメモリ上のページに配置することにより、実行されるコードの局所性を高める方法が提案されている(非特許文献2参照。)。
また、命令の実行頻度を計測しない場合であっても、最適化の結果ほとんど実行されないことが予め分かっている命令群については、当該命令群を除外してコンパイルする方法が提案されている(非特許文献3、非特許文献4参照。)。
また、最適化されたコンパイルコードの途中から実行時に遷移し、これに対応する別のバージョンのコードへ移行する技術として、on−stack replacementという手法が提案されている(非特許文献6参照。)。
また、プログラム中の分岐命令の分岐先を、実行プログラムの形態から経験的に予測する手法が提案されている(非特許文献7参照。)。
【0003】
【非特許文献1】
R.E.Hankら著、「Region−Based Compilation:An Introduction and Motivation」第28回International Symposium on Microarchitecture会議録、158から168ページ、1995年
【0004】
【非特許文献2】
K.Pettisら著、「Profile Guided CodePositioning」ACM SIGPLAN Conference on Programming Languages Design and Implementation会議録、16から27ページ、1990年6月
【0005】
【非特許文献3】
U.Holzle著、「Adaptive Optimization for SELF:Reconciling High Performance with Exploratory Programming」Ph.D thesis、Stanford University、CS−TR−94−1520、1994年8月
【0006】
【非特許文献4】
M.Palecznyら著、「The Java HotSpot Server Compiler」USENIX Java Virtual Machine Research and Technology Symposium会議録1から12ページ、2001年4月
【0007】
【非特許文献5】
J.Whaley著、「Partial Method Compilation using Dynamic Profile Information」ACM SIGPLAN Conference on Object−Oriented Programming,Systems,Languages & Applications会議録、166から179ページ、2001年10月
【非特許文献6】
U.Holzleら著、「Debugging OptimizedCode th Dynamic Deoptimization」ACM SIGPLAN Conference on Programming Language Design and Implementation会議録、32から43ページ、1992年6月
【非特許文献7】
T.Ballら著、「Branch Prediction forFree」ACM SIGPLAN Conference on Programming Language Design and Implementation会議録、300から313ページ、1993年6月
【0008】
【発明が解決しようとする課題】
非特許文献1、非特許文献2、及び非特許文献5におけるコンパイラは、コンパイル処理に先立って対象プログラムを実行し、命令の実行経路毎に実行頻度を計測する。しかしながら、この実行頻度の計測には多くの時間を要するので、対象プログラムの実行時にコンパイルを行う動的コンパイラにおいて、各命令の実行頻度を計測することは現実的でない。例えば、動的コンパイラにおいて、全ての命令の実行頻度を計測してしまうと、実際に対象プログラムの実行を開始するのが遅れてしまい、効率が悪い。また、実行に先立って予め対象プログラムをコンパイルする静的コンパイラにおいても、実行頻度の計測機能を有していない場合には、実行頻度の計測を行うことなく最適化する必要がある。
【0009】
非特許文献3及び非特許文献4におけるコンパイラは、各命令の実行頻度の計測を行わないものの、ごく一部の限られた命令しかコンパイル対象から除外することができない。例えば、このコンパイラは、対象プログラムに本来存在する実行頻度の偏りを利用して、最適化するべき命令群を定めることはできない。
非特許文献7の技術は、実行プログラムの形態から各分岐命令の分岐先予測を経験的な確率から寄せ集めたものであるが、各命令の実行頻度の計測を行う必要はないものの、結果として予測が外れるケースが相当あり(10%以上)、コンパイル対象から除外する命令群の決定の為には現実的に使用する事ができない。
そこで本発明は、上記の課題を解決することのできるコンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【0010】
【課題を解決するための手段】
即ち、本発明の第1の形態によると、コンパイル対象の対象プログラムを最適化するコンパイラ装置であって、対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、検出された最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、最適化による最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群以外の実行速度向上率より高くなるように対象プログラムを最適化する最適化部とを備えるコンパイラ装置、当該コンパイラ装置を用いたコンパイル方法、当該コンパイラ装置として実現されるコンパイラプログラム、当該コンパイルプログラムを記録した記録媒体を提供する。最適化部は、最適化対象命令群を、最適化対象命令群以外の命令群とは異なるページに配置することにより、対象プログラムを最適化してよく、対象プログラムにおける最適化対象命令群以外の最適化除外命令群を除外した部分において、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側の最適化対象命令群に含めて実行させるインライン展開処理を行うことにより、対象プログラムを最適化してもよい。
なお上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションも又発明となりうる。
【0011】
【発明の実施の形態】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、又実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、コンパイラ装置10の機能ブロック図を示す。コンパイラ装置10は、コンパイル対象の対象プログラムについて、優先して最適化するべき命令群を適切に選択することにより、コンパイル結果のプログラムの実行効率を高めると伴に、コンパイルに要する時間を減少させることを目的とする。
【0012】
コンパイラ装置10は、実行頻度情報計測部100と、処理命令複製部110と、命令検出部120と、命令群選択部130と、最適化部160とを備える。実行頻度情報計測部100は、コンパイル処理に先立って対象プログラムを実行することにより、対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、当該命令の実行頻度を計測し、計測結果を命令群選択部130に送る。例えば、実行頻度情報計測部100は、対象プログラムの各命令の処理内容を逐次解析するインタープリターの一部であり、解析した命令が示す処理を実行することにより実行頻度を計測する。これに代えて、実行頻度情報計測部100は、予め他の方法で対象プログラムをコンパイルし、コンパイルされた当該対象プログラムを実行することにより実行頻度を計測してもよい。また、実行頻度情報計測部100は、本実施形態に必須の構成要素ではなく、即ち、コンパイラ装置10は、実行頻度情報計測部100を備えなくともよい。実行頻度情報計測部100により、コンパイラ装置10は、より適切に命令群を選択することができる。
【0013】
なお、本実施形態における対象プログラムとは、例えば、利用者により記述されたソースプログラムに対して所定の変換を行った中間表現であり、具体的には、Java(登録商標)言語におけるバイトコード又はRTL(Register Transfer Language)等で記述された中間表現である。また、対象プログラムには、予め各種の最適化、例えば、メソッドインライニング等が行われていてもよい。これに代えて、対象プログラムとは、利用者により記述されたソースプログラムであってもよい。
また、命令とは、例えば、上記中間表現における処理の1単位である。これに代えて、命令とは、中間表現における命令の集合であってもよいし、ソースプログラムにおける文であってもよいし、対象プログラムを実行する装置における命令(例えば、instruction)であってもよい。また、命令とは、少なくとも一の命令の集合であってもよい。例えば、命令とは、制御の流れが変更されることなく逐次的に実行される命令の集合である基本ブロックであってもよい。より具体的には、基本ブロックとは、先頭の命令及び終端の命令以外の命令は、分岐命令の分岐先及び分岐元の何れともならない命令の集合である。
【0014】
処理命令複製部110は、対象プログラムを取得すると、所定の入力パラメータを入力として、当該入力パラメータに応じた処理を行う処理命令を検出する。そして、処理命令複製部110は、当該処理命令に代えて、以下の2つの命令を生成し、生成した結果の対象プログラムを命令検出部120に送る。まず、処理命令複製部110は、検出した当該処理命令と同一処理を行う命令であって、入力パラメータが予め定められた条件を満たす場合に当該処理命令より高速に実行される条件適合時命令を生成する。そして、処理命令複製部110は、検出した当該処理命令と同一処理を行う命令であって、入力パラメータが当該予め定められた条件を満たさない場合に実行される条件不適時処理命令を生成する。
【0015】
一例としては、処理命令複製部110は、処理命令としてループ処理を検出し、当該ループ処理に代えて、入力パラメータが予め定められた条件、例えば配列変数へのアクセスが所定範囲内であるという条件を満たし高速に実行できる場合に実行される高速処理ループと、当該条件を満たさずに通常実行される通常処理ループとを生成するループバージョニング処理を行う。他の例としては、処理命令複製部110は、処理命令として所定のクラス内のデータを参照するクラス参照命令を検出してもよい。この場合、処理命令複製部110は、クラス参照命令に代えて、当該所定のクラスの格納位置が定まっている場合にクラス参照命令より高速に実行される静的参照命令と、当該格納位置が定まっていない場合に実行される通常参照命令とを生成するデバーチャライゼーション(Devirtualization)処理を行ってもよい。
【0016】
命令検出部120は、対象プログラムを処理命令複製部110から受け取ると、対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象である最適化対象命令として検出する。また、命令検出部120は、対象プログラムのうち予め定められた他の種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出する。そして、命令検出部120は、これらの検出結果と伴に対象プログラムを命令群選択部130に送る。
【0017】
命令群選択部130は、最適化対象命令および最適化除外命令の検出結果と伴に対象プログラムを命令検出部120から受け取る。そして、命令群選択部130は、当該最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令のうち、最適化除外命令として選択されていない命令の集合を、最適化対象命令群として選択する。また、命令群選択部130は、最適化除外命令のうち、実行頻度情報計測部100による実行頻度が予め定めた第1頻度より高い命令を、最適化対象命令群に含める。また、命令群選択部130は、検出された最適化対象命令の実行頻度情報計測部100による実行頻度が、第1頻度より低い値に予め定めた第2頻度より低い場合に、当該最適化対象命令を最適化除外命令として選択する。そして、命令群選択部130は、最適化対象命令群の選択結果と伴に対象プログラムを最適化部160に送る。
【0018】
具体的には、命令群選択部130は、実行情報伝播部140と、分岐命令伝播部150とを有している。実行情報伝播部140は、最適化除外命令の直前に実行される命令を最適化除外命令として検出し、最適化対象命令の直前に実行される命令を最適化対象命令として検出する。また、分岐命令伝播部150は、分岐先の何れかの命令が最適化対象命令である分岐命令を最適化対象命令として検出し、分岐先の何れの命令も最適化対象命令でなく、かつ分岐先の何れかの命令が最適化除外命令である分岐命令を最適化除外命令として検出する。
【0019】
そして、命令群選択部130は、対象プログラムのぞれぞれの命令に対して、実行情報伝播部140及び分岐命令伝播部150による処理を繰り返し適用することにより検出された最適化対象命令の集合を、最適化対象命令群として判断する。即ち、命令群選択部130は、命令検出部120により検出された最適化対象命令から実行順序を遡って順次命令を選択することにより、最適化対象命令群を選択する。
【0020】
最適化部160は、命令群選択部130から受け取った選択結果に基づいて、最適化対象命令群が、最適化対象命令群以外の命令群より効率良く実行されるように対象プログラムを最適化し、最適化結果のプログラムを出力する。すなわち、最適化部160は、命令群選択部130から受け取った選択結果に基づいて、最適化による最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、対象プログラムを最適化する。
例えば、最適化部160は、対象プログラムにおける最適化対象命令群以外の最適化除外命令群を除外してコンパイルした後、当該対象プログラムを実行させる。そして、最適化部160は、最適化対象命令群が実行された結果最適化除外命令群の実行が必要となった旨を、例えば、実行コードに埋め込まれた命令等からの再コンパイル指示により検出した場合に、最適化除外命令群をコンパイルする。一例としては、最適化部160は、Region−Based Compilation技術(非特許文献1参照)及びon−stack replacement技術(非特許文献6参照)を用いて対象プログラムをコンパイルする。以上に示したように、対象プログラムの最適化によって、最適化対象命令群は、最適化前と比較し実行速度が向上する。一方、対象プログラムの最適化においては最適化対象命令群をより効率良く実行するように最適化するため、最適化による最適化除外命令群の実行速度の向上率は、最適化による最適化対象命令群の実行速度の向上率より低くなる。
【0021】
このように、コンパイラ装置10は、頻繁に実行されることが予測される命令を予め定めておき、当該命令を最適化対象命令として検出する。そして、コンパイラ装置10は、当該最適化対象命令から実行順序を遡ることにより選択した最適化対象命令群を、他の命令群より優先して最適化する。これにより、コンパイラ装置10は、事前に実際の実行頻度を全て計測できない場合であっても、最適化対象命令群を適切に選択することができる。
【0022】
図2は、コンパイラ装置10のフローチャートを示す。実行頻度情報計測部100は、コンパイル処理に先立って対象プログラムを実行することにより、対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、当該命令の実行頻度を計測する(ステップS200)。以下、ステップS200に代えてS200と略称する。そして、処理命令複製部110は、入力パラメータに応じた処理を行う処理命令を検出し、当該処理命令に代えて、条件適合時命令及び条件不適時処理命令を生成する処理命令複製処理を行う(S210)。
【0023】
命令検出部120は、対象プログラムを処理命令複製部110から受け取ると、対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象である最適化対象命令として検出する(S220)。例えば、命令検出部120は、対象プログラムに含まれている関数を終了させる関数終了命令(例えば、OPC_IRETURN等のバイトコード)を、最適化対象命令として検出する。
【0024】
また、命令検出部120は、対象プログラムのうち予め定められた他の種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出する(S230)。そして、命令群選択部130は、最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令のうち、最適化除外命令として選択されていない命令の集合を、最適化対象命令群として選択する(S240)。
【0025】
なお、実行順序が定まっているとは、例えば、所定の関数又はメソッド内での実行順序が定まっていることをいう。また、命令群選択部130は、ループ処理を終えてループ処理の先頭の命令に処理を戻す制御を示すバックエッジを除外して、実行順序が定まっているか否かを判断することが望ましい。即ち、命令群選択部130は、ループ処理のバックエッジを除外した場合に、最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令のうち、最適化除外命令として選択されていない命令の集合を、最適化対象命令群として選択する。
【0026】
最適化部160は、最適化による最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように対象プログラムを最適化し、最適化プログラムを出力して実行する(S250)。これにより、最適化部160は、最適化対象命令群が、最適化対象命令群以外の命令群より効率良く実行されるように対象プログラムを最適化することができる。
【0027】
図3は、図2のS230におけるフローチャートを示す。対象プログラムは、予め定めた例外発生条件が満たされた場合に、当該例外発生条件の種類に応じた例外捕捉処理を実行する例外処理機能を有している。命令検出部120は、例外捕捉処理に処理を移行させる例外発生命令を最適化除外命令として検出する(S300)。また、命令検出部120は、例外捕捉処理に含まれる何れかの命令を最適化除外命令として検出する(S310)。
【0028】
例外処理機能の一例として、対象プログラムがJava(登録商標)言語で記述されている場合には、例外処理とはエクセプション(Exception)処理であり、例外捕捉処理とは、例外ハンドラ(catch節又はfinally節)であり、例外発生命令とは、throw命令(例えば、OPC_ATHROWバイトコード)である。
【0029】
命令検出部120は、対象プログラムにおいて、データを参照するデータ参照命令であって、データの格納位置の解析を終えていない参照位置未解決状態であるデータ参照命令を、最適化除外命令として検出する(S320)。データ参照命令とは、参照先のデータの格納位置を解析していない参照位置未解決状態において当該データ参照命令が実行された場合に、参照先のデータの格納位置を示す情報を含む直接参照命令に書き換えられる命令である。
【0030】
一例として、Java(登録商標)言語におけるデータ参照命令とは、クラス内のデータ又はメソッドを参照する命令である。そして、参照位置未解決状態とは、クラスの継承関係を表すクラス階層を解析して、参照するべきデータを有するクラスの格納位置を特定する前の状態である(例えば、Uninitializedの状態又はUnresolvedの状態)。例えば、実行頻度情報計測部100により既に実行されたデータ参照命令は、コンパイルを開始する前に直接参照命令に書き換えられている。従って、命令検出部120は、実行頻度情報計測部100により未だ実行されておらず実行頻度の低いことが予測される命令として、参照位置未解決状態であるデータ参照命令を検出する。
続いて、命令検出部120は、条件不適時処理命令を、最適化除外命令として検出する(S330)。
【0031】
このように、命令検出部120は、実行頻度の低いことが予測される予め定められた種類の命令を、優先して最適化する対象から除外する最適化除外命令として選択する。なお、予め定められた種類の命令とは、例えば、命令の処理内容を識別するオペランドコードが予め定められたコードである命令であってよい。即ち、命令検出部120は、命令に対する入力となるパラメータが異なっている場合であっても、オペランドコードが予め定められたコードであれば、予め定められた種類の命令と判断してもよい。
また、例外の発生は一般的に稀であるが、頻繁に例外が発生する場合もある。この場合、好ましくは、コンパイラ装置10は、頻繁に発生する例外を解析し、最適化除外命令から除外する。
【0032】
図4は、図2のS240におけるフローチャートを示す。図5は、図4のS410におけるフローチャートを示す。本図において対象プログラムは、本発明に係る命令の一例である基本ブロック毎に区分されており、命令群選択部130は、基本ブロックのそれぞれに対して以下の処理を適用する(S400)。
【0033】
命令群選択部130は、当該基本ブロック中の命令を最適化対象とするか否かの判定を行うべく、以下の処理を行う(S410)。命令群選択部130は、実行頻度情報計測部100により実行頻度が計測されており(S500:YES)、かつ計測された当該基本ブロックの実行頻度が予め定められた第1頻度以上である場合に(S510:YES)、当該基本ブロック中の各命令を最適化対象として選択する(S520)。一方、当該基本ブロックの実行頻度が予め定められた第1頻度に満たない場合に(S510:NO)、命令群選択部130は、当該基本ブロックの実行頻度が第1頻度より低い値に予め定められた第2頻度以下か否かを判断する(S530)。第2頻度以下の場合(S530:YES)、命令群選択部130は、当該基本ブロック中の命令を最適化対象から除外し、最適化除外命令群として選択する(S540)。
【0034】
実行頻度情報計測部100により実行頻度が計測されていない場合(S500:NO)又は実行頻度が第2頻度より大きい場合(S530:NO)に、命令群選択部130は、当該基本ブロック中に最適化除外命令が存在するか否かを判断する(S550)。この処理により、コンパイラ装置10は、実行頻度の一部が計測できた場合においては、計測した実行頻度に基づいて最適化対象を定めることができる。
【0035】
当該基本ブロック中に最適化除外命令が存在する場合に(S550:YES)、命令群選択部130は、当該基本ブロック中の各命令を最適化除外命令として選択する(S540)。これにより、後続する基本ブロックが最適化対象であっても、当該基本ブロックを最適化対象から除外することができる。一方、当該基本ブロック中に最適化除外命令が存在しない場合に(S550:NO)、命令群選択部130は、当該基本ブロックの直後に実行される後続の基本ブロックに、最適化対象命令があるか否かを判断する(S560)。
【0036】
当該基本ブロックの直後に実行される後続の基本ブロックの何れかに、最適化対象命令がある場合に(S560:YES)、命令群選択部130は、当該基本ブロック中の各命令を最適化対象として選択する(S520)。一方、当該基本ブロックの直後に実行される後続の基本ブロックの何れにおいても、最適化対象命令がない場合に(S560:NO)、命令群選択部130は、後続する各基本ブロックの設定、即ち、最適化除外命令があるか否かの設定を、当該基本ブロックに対する設定として反映する(S570)。命令群選択部130は、本図における上記処理を各基本ブロックに対して順次適用する(S420)。
【0037】
命令群選択部130は、上記処理により、対象プログラム中の何れかの基本ブロックにおいて、当該基本ブロック中の命令を、最適化対象命令又は最適化除外命令として選択する設定が変更された場合に(S430:YES)、S400に処理を戻す。一方、対象プログラム中の何れの基本ブロックにおいても、当該基本ブロック中の命令を、最適化対象命令又は最適化除外命令として選択する設定が変更されていない場合に(S430:NO)、命令群選択部130は、対象プログラム中の各命令を先頭から実行順序の方向に辿って解析することにより、最適化対象命令から最適化除外命令に分岐する境界分岐命令を検出する(S440)。即ち、検出された境界分岐命令が、最適化対象命令群から最適化除外命令群に制御を移す境界点となる。
【0038】
続いて、命令群選択部130は、最適化対象命令又は最適化除外命令である旨の設定を、検出された境界分岐命令を始点として実行順序の方向に伝播させることにより(S450)、最適化除外命令群から最適化対象命令群に合流する合流点を検出する。これにより、命令群選択部130は、最適化除外命令群の終点を特定することができる。
【0039】
このように、コンパイラ装置10は、一の命令について、最適化対象命令又は最適化除外命令である旨の設定を、当該一の命令の直前に実行される他の命令に伝播させる。そして、コンパイラ装置10は、設定の変更がない状態に収束するまでこの伝播処理を繰り返す。これにより、コンパイラ装置10は、検出された最適化対象命令から実行順序を遡って順次命令を選択し、最適化対象命令群を選択することができる。また、コンパイラ装置10は、検出された最適化除外命令から、実行順序を遡って、最適化対象として予め定められた命令を検出するまで、例えば、命令群選択部130により既に最適化対象命令群として選択された命令に遭遇するまで、順次命令を選択することにより、最適化除外命令群を選択することができる。
【0040】
また、この際、コンパイラ装置10は、予め定めた最適化対象命令と比較して、実際に実行頻度が高いと計測された命令を優先して最適化対象命令とする。これにより、実際の実行頻度の一部が計測できた場合には、計測した実行頻度を有効に利用することができる。例えば、対象プログラムの一部の関数についてのみ実行頻度が計測されており、かつ実行頻度の計測後に一の関数と他の関数を組み合わせて新たな関数とするインライン展開処理が行われていた場合には、同一の関数内であっても、実行頻度の計測された命令及び実行頻度の計測されていない命令が混在する場合がある。このような場合であっても、コンパイラ装置10は、計測した実行頻度を有効に利用することができる。
【0041】
図6は、図2のS250におけるフローチャートを示す。最適化部160は、対象プログラムにおける最適化対象命令群以外の最適化除外命令群を除外してコンパイルする(S600)。より具体的には、最適化部160は、最適化対象命令から最適化除外命令に分岐する分岐命令の分岐先を、最適化除外命令の先頭の基本ブロックに代えて、最適化除外命令をコンパイルすると伴にコンパイル後の最適化除外命令に処理を移す命令を含む処理移行用基本ブロックとする。これにより、最適化部160は、制御フローの到達可能性判断処理を行うことにより、最適化除外命令群を到達不能として除外することができる。
【0042】
なお、最適化部160は、最適化対象命令群を優先して最適化する一例として、部分インライン展開処理を行ってもよい。具体的には、最適化部160は、当該最適化対象命令群に対して、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側最適化対象命令群に含めて実行させるインライン展開処理を行う。これにより、最適化部160は、関数又はメソッド全体に対しては関数の合計データサイズが大きくなりすぎる等の理由でインライン展開処理をできなかった場合であっても、インライン展開処理の対象を最適化対象命令群に限定することにより、インライン展開処理を適切に行うことができる。この結果、最適化部160は、頻繁に実行されることが予測される関数群のうち、より多くの関数やメソッドをインライン展開処理の対象とすることができる。
【0043】
また、最適化部160は、非特許文献5記載の技術を用いてもよい。この技術によると、最適化部160は、最適化対象命令群にのみ最適化(例えば、部分的不要代入文削除(Partial Dead Code Elimination)及び部分脱出解析(Partial Escape Analysis))を行うことができる。最適化除外命令群の実行が必要となった場合には、非特許文献6記載のon−stack replacement技術を使用して、再コンパイルした後、適切に処理を移行させることができる。
【0044】
そして、最適化部160は、最適化結果の対象プログラムを出力して実行させる(S610)。最適化部160は、処理移行用基本ブロックに再コンパイルする命令を配置することで、当該最適化対象命令群が実行された結果最適化除外命令群の実行が必要となった場合に(S630:YES)、最適化除外命令が既にコンパイルされているか否かを判断する(S640)。未だコンパイルされていない場合に(S640:NO)、最適化部160は、最適化除外命令群をコンパイルし(S650)、S610に処理を戻すことにより、最適化除外命令群を含めた対象プログラムを実行する。これに代えて、最適化部160は、インタープリターにより最適化除外命令群を実行させてもよい。この場合は、処理移行用基本ブロックにインタープリターへ制御を移す命令を配置することによって実現される。最適化対象命令群が実行される過程で最適化除外命令群の実行が必要でなかった場合に(S630:NO)、最適化部160は、再コンパイルのため起動されることなく終了する。
【0045】
このように、最適化部160は、最適化対象命令群のみをコンパイルすることにより、本来の対象プログラムと比べて命令数を減らすことができる。これにより、対象プログラムの実行効率を高め、実行速度を向上させることができる。更に、コンパイル対象となる命令数を減らすことができるので、コンパイルに要する時間を削減することができる。
【0046】
なお、最適化対象命令群の実行効率及び/又は実行速度を高める最適化は、本図の例に限定されない。例えば、対象プログラムが、複数のページを有するメインメモリと、複数のページのそれぞれを利用者からアクセス可能な仮想アドレスに割り当てる仮想メモリ割当処理部とを有する装置により実行される場合には、最適化部160は、最適化対象命令群を、最適化対象命令群以外の命令群とは異なるページに配置することにより最適化してもよい。一例としては、コンパイラ装置10は、非特許文献2に記載のMethod Splitting技術を用いてもよい。
【0047】
図7は、対象プログラムの一例を示す。本図に示す対象プログラムは、Java(登録商標)言語のアプリケーションプログラムで頻繁に実行されるjava/util/Vectorクラスにおける「elementAt」という名称の関数(メソッド)を有している。この関数は、所定の条件が成立したか否かを判断する2行目の命令と、当該条件が成立した場合に例外を発生させる例外発生命令である3行目の命令と、配列変数「elementData[index]」の値を戻り値として関数を終了させる関数終了命令である6行目の命令と、6行目の命令において例外が発生した場合に例外を捕捉する例外捕捉処理である7行目の命令と、7行目の命令において例外が捕捉された場合に更に他の例外を発生させる8行目の命令とを含む。
【0048】
図8は、図7に示した対象プログラムの制御フローを示す。本図の制御フローは、図7の2行目に示す条件判断を行う基本ブロック600と、基本ブロック600における条件が成立した場合に例外を発生させる例外発生命令を含む基本ブロック610とを有する。更に、本図の制御フローは、図7の6行目に示す配列変数のアクセスを行う基本ブロック620と、図7の8行目の命令に相当し、配列変数のアクセスに伴う添字が所定範囲外である場合に実行される例外捕捉処理である基本ブロック630と、図7の6行目に示す関数を終了するリターン命令を含む基本ブロック640とを有する。
【0049】
コンパイラ装置10は、本図の対象プログラム全体をコンパイルしてしまうと、ほとんど実行されない基本ブロック610及び基本ブロック630の存在により、実行経路650の実行効率及び/又は実行速度を下げてしまう場合があり、更に、コンパイル結果の対象プログラムのコードサイズを増大させてしまう場合がある。そこで、コンパイラ装置10は、頻繁に実行されることが予測される部分を優先して最適化するべく、以下の処理を行う。
【0050】
命令検出部120は、関数を終了させる関数終了命令を、最適化対象命令として検出する。即ち、命令検出部120は、関数終了命令を含む基本ブロック640を最適化対象とする。また、命令検出部120は、例外発生命令及び例外捕捉処理をそれぞれ含む基本ブロック610および基本ブロック630を、最適化除外対象とする。
【0051】
命令群選択部130は、当該最適化対象命令から実行順序を遡って順次命令を選択することにより、当該関数において最適化対象命令に先立って実行される命令群を最適化対象命令群として選択する。即ち、命令群選択部130は、基本ブロック640から実行順序を遡って基本ブロック620及び基本ブロック600を順次選択し、基本ブロック600、基本ブロック620、及び基本ブロック640中の各命令を最適化対象命令群として選択する。また、命令群選択部130は、検出された最適化除外命令から実行順序を遡って最適化対象命令群の一部に到達するまで順次命令を選択し、選択した当該命令の集合である最適化除外命令群を選択する。例えば、命令群選択部130は、例外発生命令から実行順序を遡って基本ブロック600を検出するまでの間に選択した命令、即ち、基本ブロック610中の各命令を、最適化除外命令として選択する。
【0052】
そして、最適化部160は、選択された最適化対象命令群を順次実行する実行経路650の最適化による実行速度向上率が、最適化対象命令群以外の命令群、即ち、基本ブロック610及び基本ブロック630の最適化による実行速度向上率より高くなるように最適化する。これにより、最適化部160は、選択された最適化対象命令群を順次実行する実行経路650を、最適化対象命令群以外の命令群、即ち、基本ブロック610及び基本ブロック630より効率良く実行されるように最適化することができる。
【0053】
このように、コンパイラ装置10は、実行頻度が高いことが予測されるリターン命令等を、最適化対象命令として選択し、実行頻度が低いことが予測される例外発生命令等を、最適化除外命令として検出する。そして、コンパイラ装置10は、これらの命令に至る実行経路を、最適化対象命令群又は最適化除外命令群として選択する。これにより、コンパイラ装置10は、対象プログラムの各実行経路について実行頻度を計測できない場合であっても、最適化するべき経路を適切に選択することができる。
【0054】
図9は、変形例の動作を説明する図である。本図は、図8とは異なる対象プログラムの制御フローを示す。ここで、実行頻度情報計測部100によって基本ブロック740中の命令の実行頻度が計測されており、この実行頻度は、予め定められた第1頻度から第2頻度の範囲内である。命令検出部120は、基本ブロック750におけるリターン命令を最適化対象命令として検出する。命令検出部120は、更に、対象プログラムの命令のうち予め定められた他の種類の命令、例えば、基本ブロック740の例外発生命令であって、実行頻度情報計測部100による当該命令の実行頻度が第1頻度から第2頻度の範囲内である命令を、最適化対象命令より最適化を優先させず、かつ優先して最適化する対象から除外した最適化除外命令より優先させて最適化させる最適化準対象命令として検出する。更に、命令検出部120は、基本ブロック730中の条件不適時処理命令を最適化除外命令として検出する。
【0055】
そして、命令群選択部130は、リターン命令から実行順序を遡ることにより順次命令を選択することにより、基本ブロック750中の命令を最適化対象命令群として選択する。更に、命令群選択部130は、最適化対象命令及び最適化準対象命令のそれぞれとの間で実行順序が定まっており、かつ最適化対象命令及び最適化準対象命令のそれぞれに先立って実行される命令群、例えば、基本ブロック700中の命令群を、最適化対象命令群として選択する。即ち、実行経路760は、最適化対象命令群を順次実行する実行経路となる。
【0056】
また、命令群選択部130は、最適化準対象命令との間で実行順序が定まっており、かつ最適化対象命令との間で実行順序が定まっていない命令群、例えば、基本ブロック710、基本ブロック720、及び基本ブロック740中の命令を、最適化準対象命令群として選択する。即ち、実行経路770は、最適化準対象命令群を順次実行する実行経路となる。また、命令群選択部130は、条件不適時処理命令から実行経路を遡って基本ブロック710に至るまでの命令の集合、即ち、基本ブロック730中の命令を最適化除外命令群として選択する。即ち、実行経路780は、最適化除外命令群を順次実行する実行経路となる。
そして、最適化部160は、最適化による最適化順対象命令群の実行速度向上率を、最適化による最適化対象命令群の実行速度向上率より低く、かつ最適化による最適化除外命令の実行速度向上率より高くなるように、対象プログラムを最適化する。これにより、最適化部160は、最適化準対象命令群を、最適化対象命令群より低く、かつ最適化除外命令より高い中程度の効率で実行されるように、対象プログラムを最適化する。
【0057】
本変形例で示すように、コンパイラ装置10は、最適化対象命令及び最適化除外命令に加えて、更に、最適化準対象命令を、命令の種類に応じて検出してもよい。これにより、コンパイラ装置10は、対象プログラム中の各実行経路について、どの程度優先して最適化するべきかを詳細に定めることができる。
【0058】
図10は、コンパイラ装置10のハードウェア構成の一例を示す。コンパイラ装置10は、ホストコントローラ1082により相互に接続されるCPU1000、RAM1020、グラフィックコントローラ1075、及び表示装置1080を有するCPU周辺部と、入出力コントローラ1084によりホストコントローラ1082に接続される通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を有する入出力部と、入出力コントローラ1084に接続されるROM1010、フレキシブルディスクドライブ1050、及び入出力チップ1070を有するレガシー入出力部とを備える。
【0059】
ホストコントローラ1082は、RAM1020と、高い転送レートでRAM1020をアクセスするCPU1000及びグラフィックコントローラ1075とを接続する。CPU1000は、ROM1010及びRAM1020に格納されたコンパイラプログラムに基づいて動作し、各部の制御を行う。グラフィックコントローラ1075は、CPU1000等がRAM1020内に設けたフレームバッファ上に生成する画像データを取得し、表示装置1080上に表示させる。これに代えて、グラフィックコントローラ1075は、CPU1000等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【0060】
入出力コントローラ1084は、ホストコントローラ1082と、比較的高速な入出力装置である通信インターフェイス1030、ハードディスクドライブ1040、及びCD−ROMドライブ1060を接続する。通信インターフェイス1030は、ネットワークを介して他の装置と通信する。ハードディスクドライブ1040は、コンパイラ装置10が使用するコンパイラプログラム及びデータを格納する。CD−ROMドライブ1060は、CD−ROM1095からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。
【0061】
また、入出力コントローラ1084には、ROM1010と、フレキシブルディスクドライブ1050や入出力チップ1070等の比較的低速な入出力装置とが接続される。ROM1010は、コンパイラ装置10の起動時にCPU1000が実行するブートプログラムや、コンパイラ装置10のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ1050は、フレキシブルディスク1090からコンパイラプログラム又はデータを読み取り、RAM1020を介して入出力チップ1070に提供する。入出力チップ1070は、フレキシブルディスク1090や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【0062】
コンパイラ装置10に提供されるコンパイラプログラムは、フレキシブルディスク1090、CD−ROM1095、又はICカード等の記録媒体に格納されて利用者によって提供される。コンパイラプログラムは、記録媒体から読み出され、入出力チップ1070を介してコンパイラ装置10にインストールされ、コンパイラ装置10において実行される。
【0063】
コンパイラ装置10にインストールされて実行されるコンパイラプログラムは、実行頻度情報計測モジュールと、処理命令複製モジュールと、命令検出モジュールと、命令群選択モジュールと、実行情報伝播モジュールと、分岐命令伝播モジュールと、最適化モジュールとを含む。各モジュールがコンパイラ装置10に働きかけて行わせる動作は、図1から図9において説明したコンパイラ装置10における、対応する部材の動作と同一であるから、説明を省略する。
【0064】
以上に示したコンパイラプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク1090、CD−ROM1095の他に、DVDやPD等の光学記録媒体、MD等の光磁気記録媒体、テープ媒体、ICカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はRAM等の記憶装置を記録媒体として使用し、ネットワークを介してコンパイラプログラムをコンパイラ装置10に提供してもよい。
【0065】
以上で示すように、コンパイラ装置10は、頻繁に実行されることが予測される命令を予め定めておき、当該命令を最適化対象命令として検出する。そして、コンパイラ装置10は、当該最適化対象命令から実行順序を遡ることにより選択した最適化対象命令群を、他の命令群より優先して最適化する。この結果、コンパイラ装置10は、事前に実際の実行頻度を全て計測できない場合であっても、最適化対象命令群を適切に選択できる。これにより、コンパイラ装置10は、実行頻度の高い部分に最適化を集中させると伴に、コンパイルに要する時間を削減することができる。
【0066】
また、コンパイラ装置10は、対象プログラムの少なくとも一部について、実際の実行頻度を計測することができる場合においては、計測した実行頻度に基づいて、他の部分の実行頻度を判断する。これにより、コンパイラ装置10は、実行頻度の情報の一部であっても有効に利用することができる。
【0067】
以上、本発明を実施形態を用いて説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。上記実施形態に、多様な変更または改良を加えることができる。そのような変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【0068】
以上で示した全ての実施形態及び変形例によると、以下の各項目に示すコンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体が実現される。
【0069】
(項目1) コンパイル対象の対象プログラムを最適化するコンパイラ装置であって、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、最適化による前記最適化対象命令群の実行速度向上率が、最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化部とを備えるコンパイラ装置。
(項目2) 前記対象プログラムは、少なくとも一の関数を含み、前記命令検出部は、前記関数を終了させる関数終了命令を、前記最適化対象命令として検出し、前記命令群選択部は、前記関数において前記最適化対象命令に先立って実行される命令群を前記最適化対象命令群として選択する項目1記載のコンパイラ装置。
(項目3) 前記命令検出部は、更に、前記対象プログラムのうち予め定められた他の種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出し、前記命令群選択部は、前記最適化対象命令との間に実行順序が定まり、かつ前記最適化対象命令に先立って実行される命令のうち、前記最適化除外命令として選択されていない命令の集合を、前記最適化対象命令群として選択する項目1記載のコンパイラ装置。
【0070】
(項目4) 前記対象プログラムは、予め定めた例外発生条件が満たされた場合に、当該例外発生条件の種類に応じた例外捕捉処理に移行し、前記命令検出部は、前記対象プログラムの実行時に前記例外捕捉処理に移行させる前記例外発生命令を前記最適化除外命令として検出する項目3記載のコンパイラ装置。
(項目5) 前記対象プログラムは、予め定めた例外発生条件が満たされた場合に、当該例外発生条件の種類に応じた例外捕捉処理に移行し、前記命令検出部は、前記例外捕捉処理に含まれる何れかの命令を前記最適化除外命令として検出する項目3記載のコンパイラ装置。
(項目6) 前記対象プログラムは、データを参照するデータ参照命令を有し、当該データ参照命令は、参照先のデータの格納位置を解析していない参照位置未解決状態において当該データ参照命令が実行された場合に、参照先のデータの格納位置を示す情報を含む直接参照命令に書き換えられ、前記命令検出部は、前記参照位置未解決状態の前記データ参照命令を前記最適化除外命令として検出する項目3記載のコンパイラ装置。
【0071】
(項目7) 前記対象プログラムは、所定のパラメータを入力として、当該パラメータに応じた処理を行う処理命令を含み、前記処理命令と同一処理を行う命令であって、前記パラメータが予め定めた条件を満たす場合に前記処理命令より高速に実行される条件適合時処理命令と、前記パラメータが当該予め定めた条件を満たさない場合に実行される条件不適時処理命令とを、前記処理命令に代えて生成する処理命令複製部を更に備え、前記命令検出部は、前記条件不適時処理命令を前記最適化除外命令として検出する項目3記載のコンパイラ装置。
(項目8) 前記命令群選択部は、前記最適化除外命令の直前に実行される命令を最適化除外命令として検出し、前記最適化対象命令の直前に実行される命令を最適化対象命令として検出する実行情報伝播部と、分岐先の何れかの命令が前記最適化対象命令である分岐命令を最適化対象命令として検出し、分岐先の何れの命令も前記最適化対象命令でなく、かつ分岐先の何れかの命令が前記最適化除外命令である分岐命令を最適化除外命令として検出する分岐命令伝播部とを有し、前記対象プログラムのそれぞれの命令に対して前記実行情報伝播部及び前記分岐命令伝播部による処理を繰り返し適用することにより検出された前記最適化対象命令の集合を、前記最適化対象命令群として選択する項目3記載のコンパイラ装置。
【0072】
(項目9) 前記対象プログラムを実行することにより、前記対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、当該命令の実行頻度を計測する実行頻度情報計測部を更に備え、前記命令群選択部は、検出された前記最適化除外命令の前記実行頻度情報計測部による前記実行頻度が予め定めた第1頻度より高い場合に、当該最適化除外命令を前記最適化対象命令群として選択し、更に、検出された前記最適化対象命令の前記実行頻度情報計測部による前記実行頻度が前記第1頻度より低い値に予め定めた第2頻度より低い場合に、当該最適化対象命令を前記最適化除外命令として選択する項目3記載のコンパイラ装置。
(項目10) 前記命令群選択部は、検出された前記最適化対象命令から実行順序を遡って順次命令を選択することにより、前記最適化対象命令群を選択し、前記最適化部は、選択された前記最適化対象命令群を順次実行する実行経路の最適化による実行速度向上率が、前記最適化対象命令群以外の命令群の最適化による実行速度向上率より高くなるように最適化する項目1記載のコンパイラ装置。
【0073】
(項目11) 最適化による前記最適化対象命令群の実行速度向上率を最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように最適化する処理として、前記最適化部は、前記対象プログラムにおける前記最適化対象命令群以外の最適化除外命令群を除外してコンパイルした後、前記対象プログラムを実行させ、当該最適化対象命令群が実行された結果前記最適化除外命令群の実行が必要となった場合に、前記最適化除外命令群をコンパイルする項目1記載のコンパイラ装置。
(項目12) 前記対象プログラムは、複数のページを有するメインメモリと、前記複数のページのそれぞれを利用者からアクセス可能な仮想アドレスに割り当てる仮想メモリ割当処理部とを有する装置により実行され、前記最適化部は、前記最適化対象命令群を、前記最適化対象命令群以外の命令群とは異なる前記ページに配置することにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する項目1記載のコンパイラ装置。
(項目13) 最適化による前記最適化対象命令群の実行速度向上率を最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように最適化する処理として、前記最適化部は、前記対象プログラムにおける前記最適化対象命令群以外の最適化除外命令群を除外した部分において、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側の最適化対象命令群に含めて実行させるインライン展開処理を行う項目1記載のコンパイラ装置。
【0074】
(項目14) 前記命令検出部は、更に、前記対象プログラムの命令のうち予め定められた他の種類の命令を、前記最適化対象命令より最適化を優先させず、かつ優先して最適化する対象から除外した最適化除外命令より優先させて最適化させる最適化準対象命令として検出し、前記命令群選択部は、前記最適化対象命令及び前記最適化準対象命令のそれぞれとの間で実行順序が定まっており、かつ前記最適化対象命令及び前記最適化準対象命令のそれぞれに先だって実行される命令群を、前記最適化対象命令群として選択し、前記最適化準対象命令との間で実行順序が定まっており、かつ前記最適化対象命令との間で実行順序が定まっていない命令群を、最適化準対象命令群として選択し、前記最適化部は、更に、最適化による前記最適化準対象命令群の実行速度向上率を、最適化による前記最適化対象命令群の実行速度向上率より低く、かつ最適化による前記最適化除外命令の実行速度向上率より高くなるように、前記対象プログラムを最適化する項目1記載のコンパイラ装置。
(項目15) 前記対象プログラムを実行することにより、前記対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、当該命令の実行頻度を計測する実行頻度情報計測部を更に備え、前記命令検出部は、更に、前記対象プログラムの命令のうち予め定められた他の種類の命令について、前記実行頻度情報計測部による実行頻度が予め定められた範囲内であることを更に条件として、前記最適化準対象命令として検出する項目14記載のコンパイラ装置。
【0075】
(項目16) コンパイル対象の対象プログラムを最適化するコンパイラ装置であって、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出する命令検出部と、検出された前記最適化除外命令から、実行順序を遡って、最適化対象として予め定められた命令を検出するまで順次命令を選択することにより、優先して最適化する対象から除外するべき最適化除外命令群を選択する命令群選択部と、最適化による前記最適化除外命令群以外の命令群の実行速度向上率が、最適化による前記最適化除外命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化部とを備えるコンパイラ装置。
(項目17) コンパイル対象の対象プログラムを最適化するコンパイル方法であって、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象である最適化対象命令として検出する命令検出段階と、検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択段階と、最適化による前記最適化対象命令群の実行速度向上率が、最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化段階とを備えるコンパイル方法。
【0076】
(項目18) コンパイル対象の対象プログラムを最適化するコンパイル方法であって、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出する命令検出段階と、検出された前記最適化除外命令から、実行順序を遡って、最適化対象として予め定められた命令を検出するまで順次命令を選択することにより、優先して最適化する対象から除外するべき最適化除外命令群を選択する命令群選択段階と、最適化による前記最適化除外命令群以外の命令群の実行速度向上率が、最適化による前記最適化除外命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化段階とを備えるコンパイル方法。
(項目19) コンパイル対象の対象プログラムを最適化するコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、前記コンピュータを、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、最適化による前記最適化対象命令群の実行速度向上率が、最適化による前記最適化対象命令群以外の命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化部として機能させるコンパイラプログラム。
【0077】
(項目20) 前記命令検出部は、更に、前記対象プログラムのうち予め定められた他の種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出し、前記命令群選択部は、前記最適化対象命令との間に実行順序が定まり、かつ前記最適化対象命令に先立って実行される命令のうち、前記最適化除外命令として選択されていない命令の集合を、前記最適化対象命令群として選択する項目19記載のコンパイラプログラム。
(項目21) コンパイル対象の対象プログラムを最適化するコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、前記コンピュータを、前記対象プログラムのうち予め定められた種類の命令を、優先して最適化する対象から除外するべき最適化除外命令として検出する命令検出部と、検出された前記最適化除外命令から、実行順序を遡って、最適化対象として予め定められた命令を検出するまで順次命令を選択することにより、優先して最適化する対象から除外するべき最適化除外命令群を選択する命令群選択部と、最適化による前記最適化除外命令群以外の命令群の実行速度向上率が、最適化による前記最適化除外命令群の実行速度向上率より高くなるように前記対象プログラムを最適化する最適化部として機能させるコンパイラプログラム。
(項目22) 項目19から項目21の何れかに記載のコンパイラプログラムを記録した記録媒体。
【0078】
【発明の効果】
上記説明から明らかなように、本発明によれば優先して最適化するべき命令群を適切に選択することができる。
【図面の簡単な説明】
【図1】図1は、コンパイラ装置10の機能ブロック図を示す。
【図2】図2は、コンパイラ装置10のフローチャートを示す。
【図3】図3は、図2のS230におけるフローチャートを示す。
【図4】図4は、図2のS240におけるフローチャートを示す。
【図5】図5は、図4のS410におけるフローチャートを示す。
【図6】図6は、図2のS250におけるフローチャートを示す。
【図7】図7は、対象プログラムの一例を示す。
【図8】図8は、図7に示した対象プログラムの制御フローを示す。
【図9】図9は、変形例の動作を説明する図である。
【図10】図10は、コンパイラ装置10のハードウェア構成の一例を示す。
【符号の説明】
10 コンパイラ装置
100 実行頻度情報計測部
110 処理命令複製部
120 命令検出部
130 命令群選択部
140 実行情報伝播部
150 分岐命令伝播部
160 最適化部
600 基本ブロック
610 基本ブロック
620 基本ブロック
630 基本ブロック
640 基本ブロック
650 実行経路
700 基本ブロック
710 基本ブロック
720 基本ブロック
730 基本ブロック
740 基本ブロック
750 基本ブロック
760 実行経路
770 実行経路
780 実行経路
Claims (15)
- 複数のページを有するメインメモリと、前記複数のページのそれぞれを利用者からアクセス可能な仮想アドレスに割り当てる仮想メモリ割当処理部とを有する装置により実行される対象プログラムをコンパイルするコンパイラ装置であって、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、
前記最適化対象命令群を、前記最適化対象命令群以外の命令群とは異なる前記ページに配置することにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化部と
を備えるコンパイラ装置。 - 対象プログラムをコンパイルするコンパイラ装置であって、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、
前記対象プログラムにおける前記最適化対象命令群以外の最適化除外命令群を除外した部分において、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側の最適化対象命令群に含めて実行させるインライン展開処理を行うことにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化部と
を備えるコンパイラ装置。 - 前記対象プログラムは、予め定めた例外発生条件が満たされた場合に、当該例外発生条件の種類に応じた例外捕捉処理に移行し、
前記命令検出部は、更に、前記対象プログラムの実行時に前記例外捕捉処理に移行させる例外発生命令を、優先して最適化する対象から除外するべき最適化除外命令として検出し、
前記命令群選択部は、前記最適化対象命令との間に実行順序が定まり、かつ前記最適化対象命令に先立って実行される命令のうち、前記最適化除外命令として選択されていない命令の集合を、前記最適化対象命令群として選択する
請求項1又は2のいずれか一項に記載のコンパイラ装置。 - 前記対象プログラムは、データを参照するデータ参照命令を有し、
当該データ参照命令は、参照先のデータの格納位置を解析していない参照位置未解決状態において当該データ参照命令が実行された場合に、参照先のデータの格納位置を示す情報を含む直接参照命令に書き換えられ、
前記命令検出部は、更に、前記参照位置未解決状態の前記データ参照命令を、優先して最適化する対象から除外するべき最適化除外命令として検出し、
前記命令群選択部は、前記最適化対象命令との間に実行順序が定まり、かつ前記最適化対象命令に先立って実行される命令のうち、前記最適化除外命令として選択されていない命令の集合を、前記最適化対象命令群として選択する
請求項1又は2のいずれか一項に記載のコンパイラ装置。 - 前記対象プログラムは、所定のパラメータを入力として、当該パラメータに応じた処理を行う処理命令を含み、
前記処理命令と同一処理を行う命令であって、前記パラメータが予め定めた条件を満たす場合に前記処理命令より高速に実行される条件適合時処理命令と、前記パラメータが当 該予め定めた条件を満たさない場合に実行される条件不適時処理命令とを、前記処理命令に代えて生成する処理命令複製部を更に備え、
前記命令検出部は、更に、前記条件不適時処理命令を、優先して最適化する対象から除外するべき最適化除外命令として検出し、
前記命令群選択部は、前記最適化対象命令との間に実行順序が定まり、かつ前記最適化対象命令に先立って実行される命令のうち、前記最適化除外命令として選択されていない命令の集合を、前記最適化対象命令群として選択する
請求項1又は2のいずれか一項に記載のコンパイラ装置。 - 前記命令群選択部は、
前記最適化除外命令の直前に実行される命令を最適化除外命令として検出し、前記最適化対象命令の直前に実行される命令を最適化対象命令として検出する実行情報伝播部と、
分岐先の何れかの命令が前記最適化対象命令である分岐命令を最適化対象命令として検出し、分岐先の何れの命令も前記最適化対象命令でなく、かつ分岐先の何れかの命令が前記最適化除外命令である分岐命令を最適化除外命令として検出する分岐命令伝播部と
を有し、前記対象プログラムのそれぞれの命令に対して前記実行情報伝播部及び前記分岐命令伝播部による処理を適用することにより検出された前記最適化対象命令の集合を、前記最適化対象命令群として選択する
請求項3に記載のコンパイラ装置。 - 前記対象プログラムは、逐次的に実行される命令の集合である基本ブロック毎に区分されており、
前記コンパイラ装置は、前記対象プログラムを実行することにより、前記対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、それぞれの前記基本ブロック毎に、当該命令の実行頻度を計測する実行頻度情報計測部を更に備え、
前記命令群選択部は、検出された前記最適化除外命令の前記実行頻度情報計測部による前記実行頻度が予め定めた第1頻度より高い場合に、当該最適化除外命令を前記最適化対象命令群として選択し、更に、検出された前記最適化対象命令の前記実行頻度情報計測部による前記実行頻度が前記第1頻度より低い値に予め定めた第2頻度より低い場合に、当該最適化対象命令を前記最適化除外命令として選択する
請求項3に記載のコンパイラ装置。 - 前記命令群選択部は、検出された前記最適化対象命令から実行順序を遡って順次命令を選択することにより、前記最適化対象命令群を選択し、
前記最適化部は、選択された前記最適化対象命令群を順次実行する実行経路の最適化による実行速度向上率が、前記最適化対象命令群以外の命令群の最適化による実行速度向上率より高くなるように最適化する
請求項1又は2のいずれか一項に記載のコンパイラ装置。 - 前記命令検出部は、更に、前記対象プログラムの命令のうち予め定められた他の種類の命令を、前記最適化対象命令より最適化を優先させず、かつ優先して最適化する対象から除外した最適化除外命令より優先させて最適化させる最適化準対象命令として検出し、
前記命令群選択部は、前記最適化対象命令及び前記最適化準対象命令のそれぞれとの間で実行順序が定まっており、かつ前記最適化対象命令及び前記最適化準対象命令のそれぞれに先だって実行される命令群を、前記最適化対象命令群として選択し、前記最適化準対象命令との間で実行順序が定まっており、かつ前記最適化対象命令との間で実行順序が定まっていない命令群を、最適化準対象命令群として選択し、
前記最適化部は、更に、最適化による前記最適化準対象命令群の実行速度向上率を、最適化による前記最適化対象命令群の実行速度向上率より低く、かつ最適化による前記最適化除外命令の実行速度向上率より高くなるように、前記対象プログラムを最適化する
請求項1に記載のコンパイラ装置。 - 前記対象プログラムは、逐次的に実行される命令の集合である基本ブロック毎に区分されており、
前記コンパイラ装置は、前記対象プログラムを実行することにより、前記対象プログラムに含まれる少なくとも一部の命令のそれぞれについて、それぞれの前記基本ブロック毎に、当該命令の実行頻度を計測する実行頻度情報計測部を更に備え、
前記命令検出部は、更に、前記対象プログラムの命令のうち予め定められた他の種類の命令について、前記実行頻度情報計測部による実行頻度が予め定められた範囲内であることを更に条件として、前記最適化準対象命令として検出する
請求項9に記載のコンパイラ装置。 - 複数のページを有するメインメモリと、前記複数のページのそれぞれを利用者からアクセス可能な仮想アドレスに割り当てる仮想メモリ割当処理部とを有する装置により実行される対象プログラムをコンパイルするコンパイル方法であって、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出段階と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択段階と、
前記最適化対象命令群を、前記最適化対象命令群以外の命令群とは異なる前記ページに配置することにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化段階と
を備えるコンパイル方法。 - 対象プログラムをコンパイルするコンパイル方法であって、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出段階と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択段階と、
前記対象プログラムにおける前記最適化対象命令群以外の最適化除外命令群を除外した部分において、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側の最適化対象命令群に含めて実行させるインライン展開処理を行うことにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化段階と
を備えるコンパイル方法。 - 複数のページを有するメインメモリと、前記複数のページのそれぞれを利用者からアクセス可能な仮想アドレスに割り当てる仮想メモリ割当処理部とを有する装置により実行される対象プログラムをコンパイルするコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、
前記コンピュータを、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、
前記最適化対象命令群を、前記最適化対象命令群以外の命令群とは異なる前記ページに配置することにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化部と
して機能させるコンパイラプログラム。 - 対象プログラムをコンパイルするコンパイラ装置としてコンピュータを機能させるコンパイラプログラムであって、
前記コンピュータを、
前記対象プログラムのうち、前記対象プログラムに含まれる関数を終了させる関数終了命令を、優先して最適化する対象である最適化対象命令として検出する命令検出部と、
検出された前記最適化対象命令との間で実行順序が定まっており、かつ当該最適化対象命令に先立って実行される命令の集合である最適化対象命令群を選択する命令群選択部と、
前記対象プログラムにおける前記最適化対象命令群以外の最適化除外命令群を除外した部分において、呼び出し側関数内の最適化対象命令群から呼び出される相手側関数内の処理を、呼び出し側の最適化対象命令群に含めて実行させるインライン展開処理を行うことにより、最適化による前記最適化対象命令群の実行速度向上率が、最適化による最適化対象命令群以外の命令群の実行速度向上率より高くなるように、前記対象プログラムを最適化する最適化部と
して機能させるコンパイラプログラム。 - 請求項13又は請求項14の何れかに記載のコンパイラプログラムを記録した記録媒体。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003159206A JP3992102B2 (ja) | 2003-06-04 | 2003-06-04 | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
US10/860,757 US20040221281A1 (en) | 2003-04-06 | 2004-06-03 | Compiler apparatus, compiling method, and compiler program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003159206A JP3992102B2 (ja) | 2003-06-04 | 2003-06-04 | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004362216A JP2004362216A (ja) | 2004-12-24 |
JP3992102B2 true JP3992102B2 (ja) | 2007-10-17 |
Family
ID=33308235
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003159206A Expired - Fee Related JP3992102B2 (ja) | 2003-04-06 | 2003-06-04 | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20040221281A1 (ja) |
JP (1) | JP3992102B2 (ja) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7366932B2 (en) * | 2002-10-30 | 2008-04-29 | Stmicroelectronics, Inc. | Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation |
JP3919680B2 (ja) * | 2003-02-26 | 2007-05-30 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンパイラ装置、コンパイラプログラム、及び記録媒体 |
US7367023B2 (en) * | 2003-07-10 | 2008-04-29 | International Business Machines Corporation | Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability |
EP1622009A1 (en) * | 2004-07-27 | 2006-02-01 | Texas Instruments Incorporated | JSM architecture and systems |
US7546588B2 (en) * | 2004-09-09 | 2009-06-09 | International Business Machines Corporation | Self-optimizable code with code path selection and efficient memory allocation |
US7877739B2 (en) * | 2006-10-09 | 2011-01-25 | International Business Machines Corporation | Method of partially copying first and last private arrays for parallelized loops based on array data flow |
US7937695B2 (en) * | 2007-04-27 | 2011-05-03 | International Business Machines Corporation | Reducing number of exception checks |
US8087012B2 (en) * | 2007-08-21 | 2011-12-27 | International Business Machines Corporation | Eliminating maximum/minimum operations in loop bounds |
JP2011086127A (ja) * | 2009-10-15 | 2011-04-28 | Taida Electronic Ind Co Ltd | 数値制御システムの経路軌跡点計算装置およびその計算方法 |
US8990791B2 (en) * | 2011-07-29 | 2015-03-24 | International Business Machines Corporation | Intraprocedural privatization for shared array references within partitioned global address space (PGAS) languages |
US9213563B2 (en) * | 2013-12-30 | 2015-12-15 | Unisys Corporation | Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation |
JP5988444B2 (ja) * | 2014-02-14 | 2016-09-07 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム |
US9830134B2 (en) | 2015-06-15 | 2017-11-28 | Qualcomm Incorporated | Generating object code from intermediate code that includes hierarchical sub-routine information |
CN110119274A (zh) * | 2018-02-05 | 2019-08-13 | 北京智明星通科技股份有限公司 | 一种数据编译的方法、装置以及电子终端、计算机可读存储介质 |
JP7060803B2 (ja) | 2018-06-20 | 2022-04-27 | 富士通株式会社 | 情報処理装置、コンパイラプログラム及びコンパイル方法 |
US10970073B2 (en) * | 2018-10-02 | 2021-04-06 | International Business Machines Corporation | Branch optimization during loading |
US10782945B1 (en) * | 2019-04-04 | 2020-09-22 | International Business Machines Corporation | Escape analysis supporting on-stack replacement |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6088525A (en) * | 1997-06-19 | 2000-07-11 | Hewlett-Packard Company | Loop profiling by instrumentation |
US6253373B1 (en) * | 1997-10-07 | 2001-06-26 | Hewlett-Packard Company | Tracking loop entry and exit points in a compiler |
US6189141B1 (en) * | 1998-05-04 | 2001-02-13 | Hewlett-Packard Company | Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control |
US6470492B2 (en) * | 1999-05-14 | 2002-10-22 | Hewlett-Packard Company | Low overhead speculative selection of hot traces in a caching dynamic translator |
-
2003
- 2003-06-04 JP JP2003159206A patent/JP3992102B2/ja not_active Expired - Fee Related
-
2004
- 2004-06-03 US US10/860,757 patent/US20040221281A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20040221281A1 (en) | 2004-11-04 |
JP2004362216A (ja) | 2004-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3992102B2 (ja) | コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体 | |
US11816014B2 (en) | Optimized recompilation using hardware tracing | |
US6164841A (en) | Method, apparatus, and product for dynamic software code translation system | |
US5966537A (en) | Method and apparatus for dynamically optimizing an executable computer program using input data | |
US8533698B2 (en) | Optimizing execution of kernels | |
US6530075B1 (en) | JIT/compiler Java language extensions to enable field performance and serviceability | |
US7725883B1 (en) | Program interpreter | |
JP3707727B2 (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
US7146607B2 (en) | Method and system for transparent dynamic optimization in a multiprocessing environment | |
US7406684B2 (en) | Compiler, dynamic compiler, and replay compiler | |
US7383417B2 (en) | Prefetching apparatus, prefetching method and prefetching program product | |
US8291398B2 (en) | Compiler for optimizing program | |
CA2672337C (en) | Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis | |
US6233733B1 (en) | Method for generating a Java bytecode data flow graph | |
US20070226698A1 (en) | Method for improving performance of executable code | |
US20160062878A1 (en) | Speeding up dynamic language execution on a virtual machine with type speculation | |
US8886887B2 (en) | Uniform external and internal interfaces for delinquent memory operations to facilitate cache optimization | |
US7000227B1 (en) | Iterative optimizing compiler | |
US20020066081A1 (en) | Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator | |
JP2000066902A (ja) | 動的トランスレ―タにおけるマルチブランチ修正処理システム | |
US20110246974A1 (en) | Dynamic compiler program, dynamic compiling method and dynamic compiling device | |
EP2754044A2 (en) | Profile guided jit code generation | |
JP5583514B2 (ja) | バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム | |
JP2000222220A (ja) | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ | |
JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070123 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070420 |
|
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: 20070710 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20070711 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070717 |
|
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: 20100803 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |