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