JP3614372B2 - コンパイル方法 - Google Patents

コンパイル方法 Download PDF

Info

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
Application number
JP2001049626A
Other languages
English (en)
Other versions
JP2002251288A (ja
Inventor
潔 有馬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2001049626A priority Critical patent/JP3614372B2/ja
Publication of JP2002251288A publication Critical patent/JP2002251288A/ja
Application granted granted Critical
Publication of JP3614372B2 publication Critical patent/JP3614372B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、コンパイル方法、特にメモリ使用容量を考慮したプログラムの最適化に関する。
【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)

  1. ソースプログラムを解析することにより最適化を図るコンパイル方法において、
    ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、
    前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、
    前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリにロードするプログラムコードに書き換える書換ステップと、
    を含み、実行されることが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリにロードされるようにソースプログラムを書き換えることを特徴とするコンパイル方法。
  2. ソースプログラムを解析することにより最適化を図るコンパイル方法において、
    ソースプログラムに含まれる条件分岐によって動作が分割可能な処理実行単位にモジュール化するモジュール生成ステップと、
    前記モジュール生成ステップによるモジュール化により生成された条件処理モジュールが実行されるか否かを確定するソースプログラム内の分岐条件確定箇所を探し出す探索ステップと、
    前記探索ステップにより探し出された確定箇所の分岐条件に合致したときに実行される条件処理モジュールを、当該条件処理モジュールをメモリからアンロードするプログラムコードに書き換える書換ステップと、
    を含み、実行されないことが確定した時点で前記分岐条件に合致したときに実行される条件処理モジュールがメモリからアンロードされるようにソースプログラムを書き換えることを特徴とするコンパイル方法。
JP2001049626A 2001-02-26 2001-02-26 コンパイル方法 Expired - Fee Related JP3614372B2 (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6488739B2 (ja) * 2015-02-05 2019-03-27 株式会社デンソー 並列化コンパイル方法、及び、並列化コンパイラ
JP6488738B2 (ja) * 2015-02-05 2019-03-27 株式会社デンソー 並列化コンパイル方法、及び、並列化コンパイラ

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
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
US7398521B2 (en) Methods and apparatuses for thread management of multi-threading
JP3311462B2 (ja) コンパイル処理装置
JP4484925B2 (ja) Simdデバイスにおける制御フロー管理のための方法及び装置
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
US20060064682A1 (en) Compiler, compilation method, and compilation program
US6983458B1 (en) System for optimizing data type definition in program language processing, method and computer readable recording medium therefor
JP2004234126A (ja) コンパイラ装置およびコンパイル方法
JP2008040734A (ja) 実行コードの生成方法及びプログラム
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
Araujo et al. Challenges in code generation for embedded processors
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) 複数の制御フローパスを有するソフトウェアパイプライン化ループのためのシステムおよび方法
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
US20220236970A1 (en) Program, information conversion device, and information conversion method

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