(57)【要約】【課題】アプリケーションプログラムの実際の動作状態に対応して、コンパイルを行うことができるプログラム変換システムを提供する。【解決手段】最適化指示情報に従って原始プログラムから目的プログラム生成するコンパイラ１０と、目的プログラムを結合して実行可能なロードモジュールを生成するリンカ２０と、このロードモジュールを実行してプロファイル情報を生成するシミュレータ（または、エミュレータ）３０に加えて、このプロファイル情報を変更可能な状態でプログラマに提供するプロファイラ４０を備える。これにより、プログラマによって変更されたプロファイル情報が最適化指示情報としてコンパイラ１０にフィードバックされ、アプリケーションプログラムの実際の動作状態に対応した、最適な目的プログラムが生成できる。【選択図】図１
2007233805.tif 000002
【特許請求の範囲】
【請求項１】
最適化指示情報が与えられたときは該最適化指示情報に基づき、最適化指示情報が与えられていないときは定められた指定情報に基づいて最適化処理を行って原始プログラムを目的プログラムに変換し、該目的プログラムと共に最適化処理に用いた最適化情報を出力するコンパイラと、
前記コンパイラから出力された目的プログラムに基づいてロードモジュールを生成するリンカと、
前記ロードモジュールを実行し、前記最適化情報とこれに関連する実行時情報からなるプロファイル情報を出力するシミュレータまたはエミュレータと、
前記プロファイル情報を表示すると共に、該プロファイル情報に従って最適化変更指示が入力されたときには、該最適化変更指示に基づいて該プロファイル情報を変更して前記最適化指示情報として前記コンパイラに与えるプロファイラとを、
備えたことを特徴とするプログラム変換システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高級プログラミング言語で書かれた原始プログラムを、コンピュータが直接解読できる目的プログラムに変換するコンパイラ等のプログラム変換システム、特にその変換処理の最適化制御に関するものである。
【背景技術】
【０００２】
従来、コンパイラは、原始プログラム（ソースコード）を適切な最適化手法を用いて、目的プログラム（アセンブリコードまたはオブジェクトコード）に変換するようになっている。最適化手法としては、目的プログラムの実行速度を最速にする速度最適化や、生成する目的プログラムのサイズを最小にするコード最適化等がある。このため、コンパイラは、原始プログラムの構造を解析し、最適化要求の内容に応じて速度最適化またはコード最適化に対応した最適化手法を適用して、目的プログラムを生成するように構成されている。なお、下記特許文献１には、従来のコンパイラでは最適化のために行った処理の具体的な内容がプログラム開発者に示されないため、プログラムデバッグを効率良く行うことが困難であったことに鑑み、変数に対して行った最適化処理の内容をプログラマに開示する機能を有するプログラム変換装置が記載されている。
【０００３】
【特許文献１】特開平１０−２１０８６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のコンパイラや前記特許文献１に記載されたプログラム変換装置では、ループ処理における繰り返し回数や割り込みの頻度など、目的プログラムにおける実動作の状態が把握できないため、実際の動作に対応した最適化手法を決定することができないという課題があった。
【０００５】
本発明は、アプリケーションプログラムの実際の動作状態に対応してプログラムの変換を行うことができるプログラム変換システムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
本発明のプログラム変換システムは、最適化指示情報が与えられたときは該最適化指示情報に基づき、最適化指示情報が与えられていないときは定められた指定情報に基づいて最適化処理を行って原始プログラムを目的プログラムに変換し、該目的プログラムと共に最適化処理に用いた最適化情報を出力するコンパイラと、前記コンパイラから出力された目的プログラムに基づいてロードモジュールを生成するリンカと、前記ロードモジュールを実行し、前記最適化情報とこれに関連する実行時情報からなるプロファイル情報を出力するシミュレータまたはエミュレータと、前記プロファイル情報を表示すると共に、該プロファイル情報に従って最適化変更指示が入力されたときには、該最適化変更指示に基づいて該プロファイル情報を変更して前記最適化指示情報として前記コンパイラに与えるプロファイラとを備えたことを特徴としている。
【発明の効果】
【０００７】
本発明では、最適化指示情報に従って原始プログラムから目的プログラム生成するコンパイラと、目的プログラムを結合して実行可能なロードモジュールを生成するリンカと、このロードモジュールを実行してプロファイル情報を生成するシミュレータ（または、エミュレータ）に加えて、このプロファイル情報を変更可能な状態でプログラマに提供するプロファイラを備えている。これにより、プログラマによって変更されたプロファイル情報が最適化指示情報としてコンパイラにフィードバックされ、アプリケーションプログラムの実際の動作状態に対応した、最適な目的プログラムを生成することができるという効果がある。
【発明を実施するための最良の形態】
【０００８】
この発明の前記並びにその他の目的と新規な特徴は、次の好ましい実施例の説明を添付図面と照らし合わせて読むと、より完全に明らかになるであろう。但し、図面は、もっぱら解説のためのものであって、この発明の範囲を限定するものではない。
【実施例１】
【０００９】
図１は、本発明の実施例を示すプログラム変換システムの構成図である。
このプログラム変換システムは、一般的なコンピュータのハードウエア資源を利用し、ソフトウエア処理によって原始プログラムを目的プログラムに変換するもので、コンパイラ１０と、リンカ２０と、シュミュレータ（または、エミュレータ）３０と、プロファイラ４０とで構成されている。
【００１０】
コンパイラ１０は、入力データとして与えられる高級プログラミング言語（ソースコード）で書かれた原始プログラムを、コンピュータが直接解読できるオブジェクトコード等の目的プログラムに変換するもので、プリプロセッサ１１、字句解析部１２、構文解析部１３、意味解析部１４、最適化部１５、及びコード生成部１６を有している。
【００１１】
プリプロセッサ１１は、入力された原始プログラム中に含まれるマクロ命令を展開する等の前処理を行うものである。字句解析部１２は、プリプロセッサ１１で前処理が済んだ原始プログラムを、字句に分解するものである。構文解析部１３は、原始プログラムに記述された式や文の文法検査を行うものである。意味解析部１４は、構文の意味を解析するものである。最適化部１５は、プロファイラ４０から与えられる最適化指示情報に従って、目的プログラムの速度やサイズの最適化を実現するものである。また、コード生成部１６は、最適化部１５で最適化処理が行われたプログラムのオブジェクトコード等を生成するものである。コンパイラ１０で生成された目的プログラムは、最適化情報と共に、リンカ２０に与えられるようになっている。
【００１２】
リンカ２０は、複数の目的プログラム（この中には、コンパイラ１０から出力される目的プログラムの他に、予めサブルーチン等として登録されたものも含まれる。）を結合して、１つの実行可能なロードモジュールを生成するものである。リンカ２０で生成されたロードモジュールは、コンパイラ１０から与えられた最適化情報と共に、シミュレータ３０に出力されるようになっている。
【００１３】
シミュレータ３０は、プログラマ等によって準備されたテストデータを用いて、ロードモジュールを実行すると共に、実行時情報を収集してプロファイル情報を生成するものである。プロファイル情報は、最適化情報と実行時情報を関連付けて構成したもので、この実行時情報には、最適化の対象となったプログラムの位置情報と各位置に対応する実行文の実行回数等が含まれている。シミュレータ３０によるプログラムの実行で得られたプロファイル情報は、プロファイラ４０に出力されるようになっている。
【００１４】
プロファイラ４０は、表示装置５０によってプロファイル情報をプログラマに開示すると共に、入力装置６０を介してプログラマから与えられる最適化情報の変更指示を受け入れてコンパイラ１０に対する最適化指示情報に反映させるものである。
【００１５】
即ち、このプロファイラ４０は、プロファイル情報を解析して、位置情報、最適化項目及び実行時情報の関係付けを行い、これらの情報を表示装置５０に出力する。また、入力装置６０から最適化情報の変更指示が与えられたときには、この変更指示に従ってプロファイル情報を変更し、変更後のプロファイル情報を最適化指示情報として、コンパイラ１０へ出力するものである。
【００１６】
次に、動作を説明する。
コンパイラ１０に原始プログラムが与えられると、プリプロセッサ１１による前処理、字句解析部１２による字句への分解、構文解析部１３による文法検査、意味解析部１４による構文解析が順次行われる。この時点では、プロファイラ４０からの最適化指示情報は与えられていないので、最適化部１５において、デフォルトの指定情報に従って速度やサイズの最適化が行われ、コード生成部１６によって目的プログラムが生成される。生成された目的プログラムは、最適化部１５で使用された最適化情報と共に、リンカ２０に与えられる。
【００１７】
リンカ２０において、目的プログラムは必要に応じて他の目的プログラムと結合され、１つの実行可能なロードモジュールが生成される。リンカ２０で生成されたロードモジュールは、コンパイラ１０から与えられた最適化情報と共に、シミュレータ３０に出力される。
【００１８】
シミュレータ３０において、ロードモジュールは予め準備されているテストデータを用いて実行され、実行時情報が収集されてプロファイル情報が生成される。プロファイル情報は、プロファイラ４０に与えられる。
【００１９】
図２は、シミュレータ３０で生成されたプロファイル情報の構成図である。
この図２に示すように、プロファイル情報は、最適化情報と実行時情報とで構成され、最適化情報には、最適化の対象となるプログラムの位置情報と、その位置における最適化項目と最適化の内容（最適化情報）が含まれ、実行時情報には、最適化の対象となったプログラムの位置における実行文の実行回数等の性能情報が含まれている。
【００２０】
プロファイラ４０において、プロファイル情報に基づいて位置情報、最適化項目及び実行時情報の対応付けが行われ、表示装置５０に出力される。
【００２１】
図３は、表示装置５０に表示されたプロファイル情報の出力例であり、各関数の実行時間や、インライン展開と呼ばれる最適化の実施有無が表示されている。
【００２２】
インライン展開とは、手続きや関数を呼び出す代わりに、その手続きや関数を呼び出される位置に埋め込むことにより、呼び出しにかかるオーバーヘッドを解消する手法である。インライン展開は、呼び出しのオーバーヘッドを解消することで処理速度の向上を実現するが、目的プログラムのコードサイズが増加するデメリットも有する。
【００２３】
図３に示す例では、関数ＦｕｎｃＡ，ＦｕｎｃＤに対してインライン展開が実施され、関数ＦｕｎｃＢ，ＦｕｎｃＣに対するインライン展開は行われていないことが表示されている。即ち、コンパイラ１０において、関数ＦｕｎｃＢ，ＦｕｎｃＣをインライン展開することにより生ずるコードサイズの増加が適切でないと判定されたことを示している。更に、図３では、関数ＦｕｎｃＢ，ＦｕｎｃＣが、関数ＦｕｎｃＡから呼び出されることを示している。
【００２４】
プログラマは、表示装置５０に表示されたプロファイル情報により、関数ＦｕｎｃＢ，ＦｕｎｃＣにインライン展開を施せば、関数ＦｕｎｃＡの実行時間を短縮できることが分かる。プログラマが、実行時間の短縮を優先させたいと判断した場合、入力装置６０を使用して、関数ＦｕｎｃＢ，ＦｕｎｃＣをインライン展開させるように変更する最適化変更指示を入力する。これにより、プロファイラ４０からコンパイラ１０に対して、変更されたプロファイル情報が出力される。
【００２５】
プロファイル情報の変更により、コンパイラ１０による再処理が開始される。この再処理では、最適化部１５において、プロファイラ４０から与えられたプロファイル情報に示される最適化項目を優先するように最適化処理が行われる。
【００２６】
図４は、プロファイル情報に基づくコンパイラの最適化部の動作説明図である。
最適化部１５は、原始プログラムに対して、複数の最適化項目の適用を試みる。
【００２７】
最適化項目１に対する最適化処理決定において、現在最適化を施しているプログラム位置と、プロファイル情報が保有するプログラム位置が比較される。比較した２つのプログラム位置が同じで、合致したプログラム位置に施された最適化項目１の最適化情報が、プロファイル情報中に存在する場合、最適化項目１に対する最適化処理が決定され、指定された処理に従って最適化が試みられる。
【００２８】
しかし、各最適化処理項目を無条件に適用すると、生成されるコードサイズの肥大化や、最適化規模の拡大によるコンパイル時間の増大等の副作用が生じる場合がある。このため、閾値を設けてこれらの副作用の発生を抑止することが一般的である。
【００２９】
本実施例では、標準値と許容値の２種類の閾値を活用することを特徴としている。標準値と許容値は、最適化項目毎に設定される最適化項目の実施可否を判断するための閾値である。閾値の内容は最適化項目に依存し、ビット数、構文木ノード数、バイト数等で表現される。
【００３０】
標準値は、プロファイル情報によって最適化の実施が指示されていない場合に使用される値で、許容値は、プロファイル情報によって最適化の実施が指示されていない場合に使用される値である。許容値は、標準値に対して最適化項目の実施を緩和する関係を有している。以下、標準値と許容値を使用した動作を、インライン展開を例に説明する。
【００３１】
インライン展開の閾値は構文木ノード数で表現され、標準値５０、許容値７０に設定されていると仮定する。また、最適化部が現在着目している最適化対象の構文木ノード数は６０とする。
【００３２】
プロファイル情報にインライン展開の最適化指示が存在しない場合、最適化実施の閾値として標準値が採用される。この場合、最適化対象の構文木ノード数は６０で、標準値５０を超過している。このため、コンパイラのオプション等でインライン展開が指示されていたとしても、インライン展開は実施されない。
【００３３】
一方、プロファイル情報にインライン展開の最適化指示が存在する場合、最適化実施の閾値として許容値が採用される。この場合、最適化対象の構文木ノード数は６０で、許容値７０を超過していない。従って、インライン展開は実施される。
【００３４】
もしも、最適化対象の構文木ノード数が７１であったとすると、許容値７０を超過しているので、たとえプログラマによってインライン展開の最適化指示が与えられたとしても、インライン展開は実施されない。
【００３５】
なお、プロファイル情報中に最適化変更情報が存在しない場合、最適化部ではデフォルトの処理を選択して、最適化を実施する。
【００３６】
このように、閾値による最適化の実施可否の判断を行うように構成することにより、最適化の実施範囲が限定されるので、最小限の副作用で目的プログラム全体の性能向上が実現される。
【００３７】
以上のように、本実施例のプログラム変換システムは、次のような利点がある。
（ａ）  目的プログラムの実行性能を最適化するためには、ロードモジュールの実行時情報が必要不可欠であること、及びコンパイラはロードモジュールの動作に最適な最適化項目を選択する必要があることに着目し、コンパイラで生成された目的プログラムをリンカで結合してロードモジュールを生成し、このロードモジュールを実行させることによって実行時情報を生成している。更に、得られた実行時情報をコンパイラにフィードバックする過程において、コンパイラの実施いた最適化内容とロードモジュールの性能の関係を表示し、プログラマによる最適化調整指示の入力を可能にしている。これにより、コンパイラに対して、ロードモジュールの実行時の動作に最適な最適化項目を選択指示することができる。
【００３８】
（ｂ）  一般的なコンパイラにおける最適化制御は、オプション指定や、プラグマ、特殊キーワードと呼ばれる各社のコンパイラ特有の文法を使用しているため、原始プログラムを他社または他のターゲット（コンピュータ等）に移植する際、移植対象のコンパイラの文法に合わせてプラグマや特殊キーワードの記述を変更しなければならない。しかし、本実施例のプログラム変換システムでは、コンパイラ特有の文法を使用していないので、原始プログラムを他のターゲットに容易に移植することができる。
【００３９】
なお、本実施例では、コンパイラ、リンカ、シミュレータ（または、エミュレータ）を例示したが、本発明は、上記実施例に限定されるものではない。即ち、ターゲットシステムの機械語またはアセンブラコードを生成するコンパイラと、コンパイラが生成した機械語を実行できるシステムに適用可能である。
【００４０】
また、最適化項目としてインライン展開について説明したが、乗算方法等のその他の処理における最適化にも対応することができる。
【図面の簡単な説明】
【００４１】
【図１】本発明の実施例を示すプログラム変換システムの構成図である。
【図２】シミュレータ３０で生成されたプロファイル情報の構成図である。
【図３】表示装置５０に表示されたプロファイル情報の出力例である。
【図４】プロファイル情報に基づくコンパイラの最適化部の動作説明図である。
【符号の説明】
【００４２】
１０    コンパイラ
１１    プリプロセッサ
１２    字句解析部
１３    構文解析部
１４    意味解析部
１５    最適化部
１６    コード生成部
２０    リンカ
３０    シミュレータ
４０    プロファイラ
５０    表示装置
６０    入力装置
【図１】
2007233805.tif 000003
【図２】
2007233805.tif 000004
【図３】
2007233805.tif 000005
【図４】
2007233805.tif 000006