(57)【特許請求の範囲】
【請求項１】
複数の呼び出し単位から構成されるプログラムを呼び出し単位毎に実行するプログラム実行装置において、
呼び出し単位毎に、実行回数と、現最適化レベルと、必要最適化レベルとを対応付けて管理するテーブルと、
呼び出し単位をコンパイルするとともに指定されたレベルの最適化処理を行うコンパイル手段と、
前記コンパイル手段によってコンパイルされた呼び出し単位を記憶する記憶手段と、
呼び出し単位の実行時に、前記テーブルの当該呼び出し単位の実行回数をインクリメントする手段と、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の実行回数と予め定められた実行回数と必要最適化レベルの複数の対応関係にもとづいて、前記テーブルの当該呼び出し単位の必要最適化レベルを更新する手段と、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の現最適化レベルと必要最適化レベルを比較し、現最適化レベルが必要最適化レベルに達していない場合に、当該呼び出し単位を必要最適化レベルで最適化するために前記コンパイル手段を実行した後に前記テーブルの現最適化レベルを当該必要最適化レベルに変更する処理をバックグランドで起動する手段と、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の現最適化レベルで最適化処理された実行単位を実行する手段と、
を有することを特徴とするプログラム実行装置。
【請求項２】
複数の呼び出し単位から構成されるプログラムを呼び出し単位毎に実行する処理をコンピュータに実行させるプログラムを記録した記録媒体において、
コンピュータを、
呼び出し単位毎に、実行回数と、現最適化レベルと、必要最適化レベルとを対応付けて管理するテーブル、
呼び出し単位をコンパイルするとともに指定されたレベルの最適化処理を行うコンパイル手段、
前記コンパイル手段によってコンパイルされた呼び出し単位を記憶する記憶手段と、
呼び出し単位の実行時に、前記テーブルの当該呼び出し単位の実行回数をインクリメントする手段、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の実行回数と予め定められた実行回数と必要最適化レベルの複数の対応関係にもとづいて、前記テーブルの当該呼び出し単位の必要最適化レベルを更新する手段、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の現最適化レベルと必要最適化レベルを比較し、現最適化レベルが必要最適化レベルに達していない場合に、当該呼び出し単位を必要最適化レベルで最適化するために前記コンパイル手段を実行した後に前記テーブルの現最適化レベルを当該必要最適化レベルに変更する処理をバックグランドで起動する手段、
呼び出し単位の実行時に、前記テーブルに格納されている当該呼び出し単位の現最適化レベルで最適化処理された実行単位を実行する手段、
として機能させるプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム実行装置に関し、特に、複数の呼び出し単位から構成されるプログラムを呼び出し単位毎に実行するプログラム実行装置に関する。
【０００２】
【従来の技術】
コンピュータのプログラミング言語を大別すると、（１）コンパイラ型言語と（２）インタプリタ型言語に分類される。
【０００３】
前者のコンパイラ型言語は、高級言語で記述されたソースプログラムをＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が理解可能な低レベルな機械語に一括して変換し、実行するタイプの言語である。
【０００４】
後者のインタプリタ型言語は、プログラムの実行時に、ソースプログラムを逐次解釈しながら実行するタイプの言語である。
前者のコンパイラ型言語は、コンパイル処理によってソースプログラムを機械語に一括して変換するので、インタプリタ型言語で記述されたプログラムよりも実行速度が速いという長所がある。
【０００５】
一方、後者のインタプリタ型言語の場合、プログラムを実行する前にコンパイル処理を実行する必要がないため簡便であるという長所がある。
【０００６】
【発明が解決しようとする課題】
ところで、後者のインタプリタ型言語は、実行時のオーバーヘッドが比較的大きいため、動作速度が遅いという問題点がある。
【０００７】
そこで、プログラムを最適化して実行速度を向上させるための手法が種々提案されている。しかしながら、従来におけるこれらの手法は、プログラム全体を一定の最適化レベルで最適化処理するものであるので、ほとんど実行されない処理に対しても、頻繁に実行される処理に対しても同レベルの最適化が施されるため、効率的な最適化ができないという問題点があった。
【０００８】
また、高レベルの最適化処理を施せば、その分だけアプリケーションプログラムの実行速度は向上するが、最適化処理自体に時間を要するため、どのレベルで最適化するかを見極めることが困難であるという問題点があった。
【０００９】
本発明はこのような点に鑑みてなされたものであり、インタプリタ型言語によって記述されたアプリケーションプログラムを適切なレベルで最適化処理し、その実行速度を向上させることが可能なプログラム実行装置を提供することを目的とする。
【００１０】
【課題を解決するための手段】
本発明では上記課題を解決するために、図１に示す、複数の呼び出し単位から構成されるプログラム１を呼び出し単位毎に実行するプログラム実行装置において、前記プログラム１を構成する所定の呼び出し単位をコンパイルするコンパイル手段２と、前記コンパイル手段２によってコンパイルされた呼び出し単位を記憶する記憶手段３と、前記記憶手段３に記憶された所定の呼び出し単位を実行する実行手段４と、各呼び出し単位が実行された回数を計数する計数手段５と、前記計数手段５による計数結果が所定の閾値を上回ったか否かを判定する判定手段６と、前記判定手段６によって所定の閾値を上回ったと判定された場合には、該当する呼び出し単位を再度最適化する再最適化手段７と、を有することを特徴とするプログラム実行装置が提供される。
【００１１】
ここで、コンパイル手段２は、プログラム１を構成する所定の呼び出し単位をコンパイルする。記憶手段３は、コンパイル手段２によってコンパイルされた呼び出し単位を記憶する。実行手段４は、記憶手段３に記憶された所定の呼び出し単位を実行する。計数手段５は、各呼び出し単位が実行された回数を計数する。判定手段６は、計数手段５による計数結果が所定の閾値を上回ったか否かを判定する。再最適化手段７は、判定手段６によって所定の閾値を上回ったと判定された場合には、該当する呼び出し単位を再度最適化する。
【００１２】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明の動作原理を説明する原理図である。この図において、プログラム１は、複数の呼び出し単位から構成され、各呼び出し単位毎に呼び出されて実行される。ここで、呼び出し単位とは、関数、メソッド、プロシージャー等である。
【００１３】
コンパイル手段２は、プログラム１から所定の呼び出し単位を取得してコンパイル処理を施し、実行可能なコードを生成する。
記憶手段３は、コンパイルされた呼び出し単位をコンパイル手段２から取得し、所定の領域に格納する。
【００１４】
実行手段４は、記憶手段３に格納されている所定の呼び出し単位を実行する。
計数手段５は、実行手段４が実行した呼び出し単位の実行回数を計数する。
判定手段６は、計数手段５による計数値が所定の閾値を上回った場合には、その旨を再最適化手段７に通知する。
【００１５】
再最適化手段７は、判定手段６から通知があった場合には、該当する呼び出し単位を更に高いレベルで最適化する。
次に、以上の原理図の動作について説明する。
【００１６】
プログラム１の実行が開始されると、最初に実行されるべき呼び出し単位がコンパイル手段２によって取得され、コンパイル処理が施された後、記憶手段３の所定の領域に格納される。
【００１７】
記憶手段３に格納された呼び出し単位は、実行手段４によって実行される。
このとき、計数手段５は、実行手段４によって実行された呼び出し単位の実行回数を計数する。例えば、呼び出し単位である「ｆｕｎｃ１」が初めて実行されたとすると、ｆｕｎｃ１に対応する計数値は“１”となる。
【００１８】
判定手段６は、計数手段５の計数結果を受けて、その計数値が所定の閾値を上回っていないか否かを判定する。例えば、呼び出し単位「ｆｕｎｃ２」の計数値が“１０２”である場合に、閾値が“１００”であるとすると、判定手段６は、閾値を上回っていると判定して再最適化手段７に通知する。
【００１９】
再最適化手段７は、該当する呼び出し単位を、その時点における最適化レベルよりも更に高いレベルで最適化する。例えば、前述の「ｆｕｎｃ２」の例において、ｆｕｎｃ２のその時点での最適化レベルが「低」であるとすると、最適化レベルが「中」となるように最適化処理が施される。なお、再最適化手段７による最適化処理は、プログラム１の実行処理と並行して実行され、また、最適化処理の優先度はプログラム１のそれよりも低く設定されているので、プログラム１の実行を遅滞させることなく、最適化処理を実行することが可能となる。
【００２０】
そして、最適化処理が完了した場合には、最適化後の呼び出し単位が実行手段４の実行対象とされるので、プログラム１の実行速度を向上させることが可能となる。
【００２１】
以上に説明したように、本発明のプログラム実行装置によれば、各呼び出し単位の実行回数を計数し、その計数値が所定の閾値を上回った場合には、該当する呼び出し単位を更に高い最適化レベルで最適化しなおすようにしたので、頻繁に実行される呼び出し単位ほど高いレベルで最適化されることになり、処理全体としての実行速度を向上させることが可能となる。
【００２２】
また、再最適化手段７の処理を、プログラム１の実行処理と並行して行うとともに、再最適化手段７が実行する処理の優先度をプログラム１のそれよりも低く設定するようにしたので、プログラム１の実行を遅滞させることなく、最適化処理を実行することが可能となる。
【００２３】
次に、図２を参照して、本発明の実施の形態の構成例について説明する。
この図において、記憶装置１０は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）によって構成されており、実行対象となるプログラムソースコード１０ａを記憶している。なお、このプログラムソースコード１０ａは複数の関数から構成されている。
【００２４】
プログラムロード部１１は、実行対象となる関数をプログラムソースコード１０ａから取得し、コンパイル部１２に供給する。
コンパイル部１２は、ソースコードで記述された関数に対してコンパイル処理を施し、実行可能形式のコードに変換する。
【００２５】
最適化部１３は、関数に対して低レベルの最適化処理を施し、メモリ１４に供給する。
メモリ１４は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等によって構成されており、最適化部１３によって最適化された関数を格納する。
【００２６】
プログラム実行部１５は、メモリ１４に格納されている関数を実行する。
最適化管理部１６は、プログラム実行部１５によって実行された各関数の実行回数を計数するとともに、計数値が所定の閾値を上回った場合には、より高レベルの最適化が必要である旨をバックグラウンド最適化部１７に通知する。
【００２７】
バックグラウンド最適化部１７は、最適化管理部１６から通知を受けた場合には、該当する関数に対して更に高レベルの最適化を施す。
次に、以上の実施の形態の動作について説明する。
【００２８】
図３は、図２に示す実施の形態においてプログラムソースコード１０ａを実行する場合の処理の流れを説明するフローチャートである。このフローチャートが開始されると以下の処理が実行される。
［Ｓ１］プログラム実行部１５は、実行対象の関数を特定する。
［Ｓ２］プログラム実行部１５は、実行済みの関数であるか否かを判定し、実行済みである場合にはステップＳ７に進み、それ以外の場合にはステップＳ３に進む。
［Ｓ３］プログラム実行部１５は、プログラムロード部１１を制御して、対象となる関数を記憶装置１０から読み込ませる。
［Ｓ４］コンパイル部１２は、プログラムロード部１１から供給された関数をコンパイルする。
［Ｓ５］最適化部１３は、コンパイルされた関数に低レベルの最適化を施し、メモリ１４の所定の領域に格納する。
［Ｓ６］最適化管理部１６は、コンパイルされた関数の現最適化レベル（低レベル）を記憶する。
【００２９】
図４は、最適化管理部１６が管理している各関数の情報の一例である。この例では、各関数の名称、実行回数、現最適化レベル、および、必要最適化レベルが各関数毎に関連付けられて記憶されている。ここで、「実行回数」は、その関数が実行された回数であり、また、現最適化レベルは、その関数の現時点における最適化レベルである。更に、必要最適化レベルは、現在の実行回数から求められる必要な最適化レベルである。なお、必要最適化レベルと現最適化レベルが異なっているのは、関数の最適化処理には一定の処理時間を要するためである。
［Ｓ７］最適化管理部１６は、該当する関数の実行回数（図４参照）をインクリメントする。
［Ｓ８］最適化管理部１６は、実行回数が、最適化レベルを定めるための閾値を上回ったか否かを判定し、閾値を上回った場合にはステップＳ９に進み、それ以外の場合にはステップＳ１０に進む。
【００３０】
図５は、実行回数と必要最適化レベルとの対応関係の一例を示す図である。この例では、実行回数が“１”〜“５０”の場合は、必要最適化レベルは「低」とされ、実行回数が“５１”〜“１００”の場合は、必要最適化レベルは「中」とされ、また、実行回数が“１０１”以上である場合は、必要最適化レベルは「高」とされる。
［Ｓ９］最適化管理部１６は、必要最適化レベルを更新する。
【００３１】
例えば、図４に示す「ｆｕｎｃ２」の実行回数が“１００”から“１０１”に変化した場合には、図５より必要最適化レベルは「高」の範疇に入るので、図４に示す必要最適化レベルが「高」に変更される。
［Ｓ１０］最適化管理部１６は、処理対象の関数の現最適化レベルを取得する。
［Ｓ１１］最適化管理部１６は、必要最適化レベルと現最適化レベルとを比較し、これらが等しい場合にはステップＳ１３に進み、それ以外の場合にはステップＳ１２に進む。
［Ｓ１２］最適化管理部１６は、バックグラウンド最適化部１７を制御して、後述するバックグラウンド最適化処理を起動させる。
［Ｓ１３］プログラム実行部１５は、現最適化レベルの関数を実行する。
【００３２】
例えば、最適化処理が終了していない場合には、これまで実行されていた関数が実行され、最適化が終了した場合には最適化後の関数が実行される。
［Ｓ１４］プログラム実行部１５は、処理を継続するか否か判定し、継続する場合にはステップＳ１に戻って前述の場合と同様の処理を繰り返し、それ以外の場合には処理を終了する。
【００３３】
次に、図６を参照して、図３に示すステップＳ１２で起動されるバックグラウンド最適化処理の詳細について説明する。なお、この処理は、図３に示す処理と並行して実行されるが、その優先度は図３に示す処理よりも低く設定されているので、図３の処理の負荷が高くない場合に実行される。
【００３４】
図６に示すフローチャートが実行されると、以下の処理が実行される。
［Ｓ２０］バックグラウンド最適化部１７は、最適化処理の対象となる関数の必要最適化レベルを最適化管理部１６から取得する。
［Ｓ２１］コンパイル部１２は、プログラムロード部１１を介して処理対象の関数を記憶装置１０のプログラムソースコード１０ａから取得し、コンパイル処理を実行する。
［Ｓ２２］バックグラウンド最適化部１７は、コンパイルが終了した関数をコンパイル部１２から取得し、ステップＳ２０において取得した必要最適化レベルに応じた最適化処理を施す。
【００３５】
図７は、必要最適化レベルとその最適化処理との対応関係を示す図である。この図の例では、「低レベル最適化」では、ループ対象外の処理をループ外に追放する最適化が実行される。即ち、ループ処理に含まれている処理であって、ループ回数によらず処理内容が変化しない処理は、ループから除外することにより処理の高速化を図る。
【００３６】
また、「中レベル最適化」では、レジスタ使用の効率化を図る最適化が実行される。即ち、レジスタに代入される値が既に代入されている値と同一である場合には、その代入処理を省略することにより、処理の高速化を図る。
【００３７】
更に、「高レベル最適化」では、関数をインライン展開する最適化が実行される。即ち、手続きや関数を呼び出す代わりに、その手続きや関数を呼び出される場所に埋め込み、呼び出し時に必要な変数等の待避処理を省略して処理の高速化を図る。
［Ｓ２３］バックグラウンド最適化部１７は、メモリ１４に格納されている最適化前の関数（現最適化レベルに対応する関数）と、ステップＳ２２の処理により最適化された関数（必要最適化レベルに対応する関数）の入れ換えを行い、プログラム実行部１５の実行対象を変更する。
【００３８】
その結果、これ以降において、該当する関数が呼び出された場合には、プログラム実行部１５は、ステップＳ２２において最適化された関数を実行することになる。例えば、低レベル最適化関数１４ａが実行対象とされている場合に、中レベル最適化関数１４ｂが生成された場合には、この中レベル最適化関数１４ｂがプログラム実行部１５の実行対象となる。
【００３９】
以上の実施の形態によれば、呼び出し頻度が高い関数に対して、その頻度に応じたレベルの最適化を施すようにしたので、処理の高速化を図ることが可能となる。
【００４０】
また、以上の実施の形態では、最適化処理の優先度をプログラムの実行処理の優先度よりも低く設定してこれらを並行して実行するとともに、最適化処理が終了した時点で、最適化後の関数を実行対象に変更するようにしたので、プログラムの実行処理に負担をかけることなく最適化を行うことが可能となる。
【００４１】
なお、本発明は、マルチプロセッサ環境に好適であり、シングルプロセッサの場合に比較してより一層の処理速度の向上を期待することができる。
また、以上の実施の形態では、最適化処理として、例えば、ループ対象外の処理をループ外に追放する処理等を例に挙げたが、本発明はこのような場合のみに限定されるものではない。
【００４２】
最後に、上記の処理機能は、コンピュータによって実現することができる。その場合、プログラム実行装置が有すべき機能の処理内容は、コンピュータで読み取り可能な記録媒体に記録されたプログラムに記述されており、このプログラムをコンピュータで実行することにより、上記処理がコンピュータで実現される。コンピュータで読み取り可能な記録媒体としては、磁気記録装置や半導体メモリ等がある。市場へ流通させる場合には、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフロッピーディスク等の可搬型記録媒体にプログラムを格納して流通させたり、ネットワークを介して接続されたコンピュータの記憶装置に格納しておき、ネットワークを通じて他のコンピュータに転送することもできる。コンピュータで実行する際には、コンピュータ内のハードディスク装置等にプログラムを格納しておき、メインメモリにロードして実行する。
【００４３】
【発明の効果】
以上説明したように本発明では、複数の呼び出し単位から構成されるプログラムを呼び出し単位毎に実行するプログラム実行装置において、プログラムを構成する所定の呼び出し単位をコンパイルするコンパイル手段と、コンパイル手段によってコンパイルされた呼び出し単位を記憶する記憶手段と、記憶手段に記憶された所定の呼び出し単位を実行する実行手段と、各呼び出し単位が実行された回数を計数する計数手段と、計数手段による計数結果が所定の閾値を上回ったか否かを判定する判定手段と、判定手段によって所定の閾値を上回ったと判定された場合には、該当する呼び出し単位を再度最適化する再最適化手段と、を有するようにしたので、プログラムの実行処理を遅延することなく、最適化処理を実行することが可能となる。
【図面の簡単な説明】
【図１】本発明の動作原理を説明する原理図である。
【図２】本発明の実施の形態の構成例を示す図である。
【図３】図２に示す実施の形態においてプログラムを実行する場合の処理の流れを説明するフローチャートである。
【図４】最適化管理部が管理している関数の情報の一例である。
【図５】実行回数と必要最適化レベルとの対応関係の一例を示す図である。
【図６】図３に示すステップＳ１２で起動されるバックグラウンド最適化処理の詳細を説明するフローチャートである。
【図７】必要最適化レベルとその最適化処理との対応関係を示す図である。
【符号の説明】
１  プログラム
２  コンパイル手段
３  記憶手段
４  実行手段
５  計数手段
６  判定手段
７  再最適化手段
１０  記憶装置
１０ａ  プログラムソースコード
１１  プログラムロード部
１２  コンパイル部
１３  最適化部
１４  メモリ
１５  プログラム実行部
１６  最適化管理部
１７  バックグラウンド最適化部
【図１】
0003605327.tif 000002
【図２】
0003605327.tif 000003
【図３】
0003605327.tif 000004
【図４】
0003605327.tif 000005
【図５】
0003605327.tif 000006
【図６】
0003605327.tif 000007
【図７】
0003605327.tif 000008