JP3614372B2 - コンパイル方法 - Google Patents
コンパイル方法 Download PDFInfo
- Publication number
- JP3614372B2 JP3614372B2 JP2001049626A JP2001049626A JP3614372B2 JP 3614372 B2 JP3614372 B2 JP 3614372B2 JP 2001049626 A JP2001049626 A JP 2001049626A JP 2001049626 A JP2001049626 A JP 2001049626A JP 3614372 B2 JP3614372 B2 JP 3614372B2
- Authority
- JP
- Japan
- Prior art keywords
- executed
- source program
- processing module
- memory
- program
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の属する技術分野】
本発明は、コンパイル方法、特にメモリ使用容量を考慮したプログラムの最適化に関する。
【0002】
【従来の技術】
コンパイラは、一般にソースプログラムのコンパイル時に、ソースコードの不要な部分を探し出し、そのコード部分を削除するなどしてイメージサイズを削減し高速化を図るようにしている。例えば、条件分岐が組み込まれたソースプログラムにおいて、入力値がいかなる値であっても実行されることのないソースコード部分が組み込まれていたときには、そのソースコードを削除して実行イメージを生成する。
【0003】
【発明が解決しようとする課題】
しかしながら、従来のコンパイル方法では、上記のようにプログラムの最適化を図っているが、プログラム実行時において最適化を実行するようなことはしていなかった。例えば、プログラム実行開始時において入力を促し、その入力値がONのときには処理Aを実行し、他方OFFのときには処理Bを実行するようなプログラムの場合、一方の処理プログラムは必ず実行されないことになる。しかしながら、従来のコンパイル方法では、双方の処理プログラムがメモリにロードされる場合があった。処理Aと処理Bのイメージが同じサイズの場合は、プログラムの実行に必要な容量の2倍のメモリを消費することになる。
【0004】
本発明は以上のような問題を解決するためになされたものであり、その目的は、メモリの使用容量の削減を図ることのできるコンパイル方法を提供することにある。
【0005】
【課題を解決するための手段】
以上のような目的を達成するために、本発明に係るコンパイル方法は、ソースプログラムを解析することにより最適化を図るコンパイル方法において、ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリにロードするプログラムコードに書き換える書換ステップとを含み、実行されることが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリにロードされるようにソースプログラムを書き換えるものである。
【0006】
また、他の発明に係るコンパイル方法は、ソースプログラムを解析することにより最適化を図るコンパイル方法において、ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリからアンロードするプログラムコードに書き換える書換ステップとを含み、実行されないことが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリからアンロードされるようにソースプログラムを書き換えるものである。
【0007】
【発明の実施の形態】
以下、図面に基づいて、本発明の好適な実施の形態について説明する。
【0008】
実施の形態1.
図1は、本発明に係るコンパイル方法を実施するコンパイル装置を示した構成図である。本実施の形態におけるコンパイル装置1は、一般的なコンピュータで実現でき、ハードウェア構成自体には特徴的なものはない。図1には、コンパイルを実行するCPU2と、メモリ3と、ディスク装置4とが示されている。ディスク装置4には、本実施の形態において特徴的な方法でコンパイルを実行するコンパイラ、コンパイル対象のソースプログラム、コンパイラにより生成された実行イメージが格納される。本実施の形態では、便宜的に1台のみを示したが、各ファイルをどの記憶装置に格納するかは、本発明の要旨ではない。実行イメージは、メモリ3にロードされ、CPU2により実行される。
【0009】
本実施の形態において特徴的なことは、プログラム実行時において実行されないことが確定した条件処理モジュールをメモリにロードしない、換言すると、実行されることが確定した条件処理モジュールのみをメモリにロードする実行イメージを生成することであるが、ここで、本発明の基本的な技術的思想について説明する。
【0010】
例えば、図2(a)に示したようなプログラム(プログラム名:prg1)があるとする。このプログラムでは、変数”A”が入力された時点でいずれかの処理が選択的に実行される。つまり、1が入力されれば処理1が実行され、処理2は実行されない。一方、1以外の値が入力されれば処理2が実行され、処理1は実行されない。例えば、1が入力されたとき、処理2のコード部分は不要であり、メモリから削除されても何の問題もない。つまり、変数”A”に1が入力された時点でprg1は図2(b)に示したコードのみで十分である。逆に変数”A”に1以外の値が入力された時点でprg1は図2(c)に示したコードのみで十分である。
【0011】
しかし、実際には、変数”A”がいかなる値になるかは、実行時までわからない。従って、入力データ値によって動的に最適なコードを生成するには、図3に示したようなコードでプログラムを生成する必要がある。
【0012】
prg4は、prg1に比べ、はるかに非効率的ではあるが、プログラムの構造次第では効率性が逆転する場合がある。例えば、図4(a)に示したprg5は、”A”が1のときの最適なプログラムコード及び”A”が1以外の値のときの最適なプログラムコードは、それぞれ図4(b),(c)に示したようになる。
【0013】
prg6,prg7は、prg5に比べ、”A”が1であるかをループ毎に判断しないので、その分、処理速度は速くなり、ループの回数が多ければ多いほど、この効果は大になる。図4(a)に示したprg5を条件分岐を先に行うよう、つまり、図5に示したようにコーディングしておけばよいようにも考えられる。
【0014】
しかしながら条件分岐の数が多くなってくると、条件分岐を先に行うようにソースプログラムを書き換えることは、困難になってくるので現実的でない。仮に、条件分岐を先に行うように書き換えることができたとしても重複した記載(図5で例示すると”FOR I=1 TO 100000”と”NEXT I”)が膨大になる。すなわち、書き換えられたソースプログラムに基づく実行イメージは、巨大化し、メモリ効率が悪くなる。
【0015】
そこで、本実施の形態におけるコンパイラは、次のようにソースプログラムをコンパイルする。この処理の流れを図6に示したフローチャートを用いて説明する。
【0016】
ステップ101において、まず、コンパイラは、入力された処理対象とするソースプログラムを解析することにより条件分岐を見つけると、その条件分岐によって分割される処理実行単位に分割する。例えば、図2(a)に示したprg1では、”INPUT A”と”(処理1)”と”(処理2)”のブロックに分割される。各処理は、”IF”と”ELSE”と”ENDIF”の組合せを探すことでブロック化することができる。本実施の形態では、指定された条件によりいずれかが選択され実行されるモジュールを特に条件処理モジュールと称することにする。
【0017】
ステップ102において、コンパイラは、条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す。図2(a)に示した例では、入力された”A”により分岐する”IF A=1 THEN”、”ELSE”がこれに相当する。
【0018】
ステップ103において、コンパイラは、分岐条件確定箇所の後段に、その分岐条件に合致したときに実行する条件処理モジュールを組み込むようなソースコードを組み込む。本実施の形態における処理においては、図2(a)に示したソースプログラムは図3に示したソースプログラムに書き換えられ、実行イメージが生成されることになる。図7(a)には図2(a)に相当する模式図が、図7(b)には図3に相当する模式図がそれぞれ示されているが、ステップ103においてソースプログラムは、図7(b)において模式したソースプログラムに書き換えられる。
【0019】
以上のようにしてソースプログラムを書き換え、実行イメージを生成することになるが、この実行イメージを実行したときの行われる最適化について以下に説明する。
【0020】
実行イメージの実行中に何らかの入力若しくは処理結果が得られたことにより分岐条件が確定されたとする。図3に示した例では、”INPUT A”に対して何らかの値が入力されることにより”A”の値は確定する。本実施の形態においては、このときになってはじめて”A”が1のときには処理1がメモリ上にロードされ、”A”が1以外の値のときには処理2がメモリ上にロードされる。つまり、本実施の形態では、実質的に図7(c)に示したいずれかのプログラムを実行することになる。
【0021】
本実施の形態によれば、以上のように実行されることのないソースプログラム部分、上記例では処理1若しくは処理2のいずれかはメモリにロードされることはないので、この実行イメージを実行する際に要するメモリ容量を削減することができる。
【0022】
なお、上記実施の形態では、”A”の値が入力されるときを分岐条件が確定する場合の例として説明したが、必ずしも入力されるときに限られるわけではなく、何らかの処理によって変数の値が確定するときも分岐条件が確定する場合に相当する。
【0023】
実施の形態2.
上記実施の形態1では、実行イメージの実行中に分岐条件が確定されたとき、処理対象とするプログラム部分のみをメモリ3にロードする。しかし、場合によっては、実行しない部分が既にメモリ3にロードされている場合もあり得る。そこで、本実施の形態では、分岐条件が確定したことによって実行されないことが確定した時点で該当する条件処理モジュールをメモリ3から積極的にアンロードする実行イメージを生成するようにする。すなわち、上記例に基づくと、ソースプログラムの処理1の実行部分に処理2をメモリ3からアンロードするプログラムコードを組み込むことになる。
【0024】
このように、メモリ3からアンロードすることでメモリの使用容量を削減することによって高速化を図ることができる。
【0025】
【発明の効果】
本発明によれば、プログラム実行時において前記条件確定箇所における判定により実行されることが確定した条件処理モジュールのみをメモリにロードするようにしたので、メモリの使用容量の削減を図ることができ、ひいては処理の高速化を図ることができる。
【0026】
また、プログラム実行時において前記条件確定箇所における判定により実行されないことが確定した条件処理モジュールをメモリからアンロードするようにしたので、メモリの使用容量の削減を図ることができ、ひいては処理の高速化を図ることができる。
【図面の簡単な説明】
【図1】本発明に係るコンパイル方法を実施するコンパイル装置を示した構成図である。
【図2】実施の形態1におけるコンパイル方法を説明するために用いるプログラムの例を示した図である。
【図3】実施の形態1におけるコンパイル方法を説明するために用いるプログラムの例を示した図である。
【図4】実施の形態1におけるコンパイル方法を説明するために用いるプログラムの例を示した図である。
【図5】実施の形態1におけるコンパイル方法を説明するために用いるプログラムの例を示した図である。
【図6】実施の形態1におけるコンパイル方法を示したフローチャートである。
【図7】実施の形態1においてプログラムが変換される遷移を示した模式図である。
【符号の説明】
1 コンパイル装置、2 CPU、3 メモリ、4 ディスク装置。
Claims (2)
- ソースプログラムを解析することにより最適化を図るコンパイル方法において、
ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、
前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、
前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリにロードするプログラムコードに書き換える書換ステップと、
を含み、実行されることが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリにロードされるようにソースプログラムを書き換えることを特徴とするコンパイル方法。 - ソースプログラムを解析することにより最適化を図るコンパイル方法において、
ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、
前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、
前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリからアンロードするプログラムコードに書き換える書換ステップと、
を含み、実行されないことが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリからアンロードされるようにソースプログラムを書き換えることを特徴とするコンパイル方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001049626A JP3614372B2 (ja) | 2001-02-26 | 2001-02-26 | コンパイル方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001049626A JP3614372B2 (ja) | 2001-02-26 | 2001-02-26 | コンパイル方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2002251288A JP2002251288A (ja) | 2002-09-06 |
JP3614372B2 true JP3614372B2 (ja) | 2005-01-26 |
Family
ID=18910701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001049626A Expired - Fee Related JP3614372B2 (ja) | 2001-02-26 | 2001-02-26 | コンパイル方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3614372B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6488739B2 (ja) * | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
JP6488738B2 (ja) * | 2015-02-05 | 2019-03-27 | 株式会社デンソー | 並列化コンパイル方法、及び、並列化コンパイラ |
-
2001
- 2001-02-26 JP JP2001049626A patent/JP3614372B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2002251288A (ja) | 2002-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6308323B1 (en) | Apparatus and method for compiling a plurality of instruction sets for a processor and a media for recording the compiling method | |
US8522220B2 (en) | Post-pass binary adaptation for software-based speculative precomputation | |
US6289505B1 (en) | Method, apparatus and computer programmed product for binary re-optimization using a high level language compiler | |
US5901308A (en) | Software mechanism for reducing exceptions generated by speculatively scheduled instructions | |
US5768595A (en) | System and method for recompiling computer programs for enhanced optimization | |
US6718541B2 (en) | Register economy heuristic for a cycle driven multiple issue instruction scheduler | |
JP3896087B2 (ja) | コンパイラ装置およびコンパイル方法 | |
US7543285B2 (en) | Method and system of adaptive dynamic compiler resolution | |
US7398521B2 (en) | Methods and apparatuses for thread management of multi-threading | |
JP3311462B2 (ja) | コンパイル処理装置 | |
US8032873B2 (en) | Computer program code size partitioning system for multiple memory multi-processing systems | |
US5812854A (en) | Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream | |
US20090113404A1 (en) | Optimum code generation method and compiler device for multiprocessor | |
US6983458B1 (en) | System for optimizing data type definition in program language processing, method and computer readable recording medium therefor | |
JP2008040734A (ja) | 実行コードの生成方法及びプログラム | |
JP2007526571A (ja) | Simdデバイスにおける制御フロー管理のための方法及び装置 | |
US7213237B2 (en) | Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code | |
US7386843B2 (en) | Method and system for register allocation | |
Choi et al. | Address assignment combined with scheduling in DSP code generation | |
JP3614372B2 (ja) | コンパイル方法 | |
US7698693B2 (en) | System and method for run-time value tracking during execution | |
JP2004062909A (ja) | 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法 | |
JP2004240953A (ja) | コンピュータシステム、その同時多重スレッディング方法およびキャッシュコントローラシステム。 | |
WO2001013223A1 (fr) | Procede et appareil permettant de faire fonctionner un ordinateur virtuel | |
WO2024032358A1 (en) | Methods and systems for handling control flow structures in data-parallel architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040525 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040702 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040702 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040727 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040917 |
|
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: 20041026 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041026 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |