(57)【要約】【課題】繰り返し処理が多いプログラムブロックが、プログラムの一部に偏っている場合でも、次に実行するプログラムブロックの予測を適切に行うことができる情報処理装置を提供すること。【解決手段】プログラム実行タスク１０がコンパイルコード判断部１１０によって実行プログラムブロックのコンパイルコードが存在しないと判断した場合、予測コンパイル要求通知１３４によって、予想コンパイルタスクに予測コンパイルの要求を通知し、予想コンパイルタスク２０は予測コンパイル通知受取り部２１０によって、上記予測コンパイル通知を受取り、実行予測部によって実行されるプログラムブロックを予測し、予測したプロ部ラムブロックのコンパイルを行う。【選択図】図１
2010271810.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のプログラムブロックにより構成されたプログラムを、前記プログラムブロック単位で取得して、プロセッサに実行させる情報処理装置であって、
プログラムブロックに対応付けて、前記プログラムブロックの実行順序を示す順序情報と、前記プログラムブロックがコンパイル済みか否かを示すコンパイル情報と、前記プログラムブロックのステップ数とを含む管理情報を記憶するプログラムブロック管理部と、
実行対象のプログラムブロックを取得し、前記プログラムブロック管理部に記憶している管理情報を用いて、前記取得したプログラムブロックがコンパイル済みであるか否かを判定し、コンパイル済みでないと判定した場合に、予測コンパイルの開始と判断するコンパイル判断部と、
前記コンパイル判断部が予測コンパイルの開始と判断した場合に、前記プログラムブロック管理部に記憶している管理情報を用いて、前記取得したプログラムブロックに連続して実行されるコンパイル済みでない１つ以上のプログラムブロックの中から、前記プログラムブロックのステップ数に基づいて、コンパイル対象のプログラムブロックを決定する実行予測部と、
前記決定したプログラムブロックをコンパイルし、前記プログラムブロック管理部に記憶している管理情報を更新する予測コンパイル部とを備えたことを特徴とする情報処理装置。
【請求項２】
前記プログラムブロック管理部に記憶する前記管理情報は、前記プログラムブロックのインタプリタ実行の回数を示す実行回数情報を含み、
前記コンパイル判断部は、前記取得したプログラムブロックがコンパイル済みでないと判定した場合で、前記実行回数が所定の回数より大きい場合に、予測コンパイルを行わずに前記プログラムブロックをコンパイルすると判断し、前記実行回数が所定の回数以下の場合に、予測コンパイルの開始と判断することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記プログラムブロック管理部に記憶する前記管理情報は、前記プログラムブロックがインタプリタ実行中か否かを示す実行箇所情報を含み、
前記実行予測部は、前記インタプリタ実行中のプログラムブロックを先頭とした場合のステップ数の合計が、第１の閾値より大きく、第２の閾値以下であるプログラムブロックを、コンパイル対象のプログラムブロックを決定することを特徴とする請求項１記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インタプリタ及びＪＩＴコンパイラを備える言語処理実行において、特に、実行予測を行い、事前コンパイルを行う情報処理装置に関する。
【背景技術】
【０００２】
高級言語で書かれたプログラムの実行においては、高級言語を事前に全てＣＰＵの機械語命令にコンパイルする以外にも、高級言語プログラムを逐次読み込みながら実行する動的コンパイルがある。動的コンパイルの手法として、高級言語を、まずインタプリンタ実行するが、その後インタプリタ実行をしたメソッドまたはプログラムブロック（以下、プログラムブロックと示す）を機械語命令にコンパイルするものがある。動的コンパイルを行うコンパイラは複数の種類があるが、本明細書ではＪＩＴコンパイラと総称することにする。ＪＩＴコンパイラは、ＬｉｓｐやＳｍａｌｌｔａｌｋ、ＪＡＶＡ（登録商標）などの、インタプリタ型言語で作成されたプログラムの実行を高速化する。
【０００３】
ＪＩＴコンパイラでの効率的な動的コンパイル手法として、まずインタプリタ実行をし、一定回数以上実行が繰り返されたプログラムブロックのみを、コンパイルするものがある。
【０００４】
しかし、この手法では、プログラムブロックのコンパイルの是非を決定する為の情報の収集時間が大きく、場合によっては動的コンパイルしての実行時間がインタプリンタ実行した場合時間よりも大きくなる場合がある。
【０００５】
この課題を解決する従来の方法として、プログラムを実行するタスクとコンパイルを実行するタスクを主記憶上に個別に生成し、処理を分担させる技術があった（例えば、特許文献１参照）。予想コンパイルタスクが高級言語プログラムに静的解析を行うことによって、全体の処理時間に大きく影響のあるプログラムブロックを特定し、そのプログラムブロックを優先的コンパイルする。これにより、従来の技術では、動的コンパイル実行に所要する時間の短縮化を図っていた。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−３３４６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、前記従来の構成では、静的解析を行った結果に従って優先的コンパイルしたプログラムブロックが、いつ実行されるかは明確ではない。繰り返し処理が多いプログラムブロックが、プログラムの後半に偏っている場合、プログラムの前半ではインタプリタ実行が続くことになり、前半の実行性能は劣化してしまうという課題を有していた。例えば、プログラム起動に関するは一回実行のみのケースが多く、インタプリタによる実行が続くことになり、プログラム起動を高速化したい場合などでは、ＪＩＴコンパイラのメリットを生かすことができなかった。
【０００８】
本発明は、前記従来の課題を解決するもので、繰り返し処理が多いプログラムブロックが、プログラムの一部に偏っている場合でも、次に実行するプログラムブロックの予測を適切に行うことができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記従来の課題を解決するために、本発明の情報処理装置は、１つ以上のプログラムブロックにより構成されたプログラムを、前記プログラムブロック単位で取得して、プロセッサに実行させる情報処理装置であって、プログラムブロックに対応付けて、前記プログラムブロックの実行順序を示す順序情報と、前記プログラムブロックがコンパイル済みか否かを示すコンパイル情報と、前記プログラムブロックのステップ数とを含む管理情報を記憶するプログラムブロック管理部と、実行対象のプログラムブロックを取得し、前記プログラムブロック管理部に記憶している管理情報を用いて、前記取得したプログラムブロックがコンパイル済みであるか否かを判定し、コンパイル済みでないと判定した場合に、予測コンパイルの開始と判断するコンパイル判断部と、前記コンパイル判断部が予測コンパイルの開始と判断した場合に、前記プログラムブロック管理部に記憶している管理情報を用いて、前記取得したプログラムブロックに連続して実行されるコンパイル済みでない１つ以上のプログラムブロックの中から、前記プログラムブロックのステップ数に基づいて、コンパイル対象のプログラムブロックを決定する実行予測部と、前記決定したプログラムブロックをコンパイルし、前記プログラムブロック管理部に記憶している管理情報を更新する予測コンパイル部とを備えたことを特徴とする。
【００１０】
本構成によって、繰り返し処理が多いプログラムブロックが、プログラムの一部に偏っている場合に、次に実行するプログラムブロックの予測を適切に行い、事前にコンパイルすることで、インタプリタによる連続実行を回避することができる。
【発明の効果】
【００１１】
本発明の情報処理装置によれば、繰り返し処理が多いプログラムブロックが、プログラムの一部に偏っている場合でも、次に実行するプログラムブロックの予測を適切に行うことができ、プログラムの実行を高速化することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施の形態における情報処理装置の構成を示すブロック図
【図２】本発明の実施の形態におけるプログラムブロック管理テーブルの一例を示す図
【図３】本発明の実施の形態における情報処理装置の処理の流れを示す図
【図４】本発明の実施の形態におけるプログラム実行タスクの処理の流れの一例を示すフローチャート
【図５】本発明の実施の形態におけるプログラム実行タスクの処理の流れの一例を示すフローチャート
【図６】本発明の実施の形態におけるコーコールフロー情報取得部の処理の流れの一例を示す図
【図７】本発明の実施の形態における予測コンパイルブロック決定部の処理の流れの一例を示すフローチャート
【図８】本発明の実施の形態における予測コンパイルブロック決定部の処理の流れの一例を示すフローチャート
【図９】本発明の実施の形態における予測コンパイルブロック決定部の処理の流れの一例を示すフローチャート
【図１０】本発明の実施の形態における予測コンパイルブロック決定部の処理の流れの一例を示すフローチャート
【図１１】本発明の実施の形態における予測コンパイルブロック決定部の処理の流れの一例を示すフローチャート
【図１２】本発明の実施の形態における情報処理装置の構成を示すブロック図
【図１３】本発明の実施の形態におけるタスク負荷管理テーブルの一例を示す図
【図１４】本発明の実施の形態における情報処理装置の処理の流れを示す図
【図１５】本発明の実施の形態における予想コンパイルタスクへＣＰＵを割当てる動作の一例を示すフローチャート
【図１６】本発明の実施の形態における予想コンパイルタスクにＣＰＵ資源の割当てを行う処理の流れの一例を示すフローチャート
【図１７】本発明の実施の形態における予測コンパイルブロック決定部が予測コンパイルを行うプログラムブロックを決定する処理の流れの一例を示すフローチャート
【図１８】本発明の実施の形態における予測コンパイルブロック決定部が予測コンパイルを行うプログラムブロックを決定する処理の流れの一例を示すフローチャート
【図１９】本発明の実施の形態における予測コンパイルブロック決定部が予測コンパイルを行うプログラムブロックを決定する処理の流れの一例を示すフローチャート
【発明を実施するための形態】
【００１３】
（実施の形態１）
図１は、本発明の実施の形態における情報処理装置の構成を示すブロック図である。
【００１４】
情報処理装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ；中央演算処理部）１、周辺デバイス２、メモリ３を備えている。
【００１５】
ＣＰＵ１は、処理能力が十分であれば任意のものでよい。
【００１６】
周辺デバイス２は、各種の入出力装置であり、情報処理装置の使用目的に応じた機能を有している。周辺デバイス２は、例えば、キーデバイスや通信デバイス、表示デバイス、デコーダやエンコーダ、ＤＳＰやＤＭＡコントローラなどである。
【００１７】
メモリ３は、コンパイルコード記憶部４と、プログラムブロック管理テーブル５と、プログラム実行タスク１０と、予想コンパイルタスク２０と、タスクスケジューラ３０を備えている。メモリ３は、リードオンリーメモリ（ＲＯＭ）またはランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリなどの、任意のタイプのメモリであってよい。また、メモリ３は、単一のメモリ装置で構成されている必要はなく、同種の複数のメモリ又は異種の複数のメモリを組み合わせたものであってもよい。さらに、情報処理装置は、メモリ３以外に、例えばハードディスクのような外部記憶装置を設け、情報処理装置の動作に問題のない範囲で、外部記憶装置にメモリ３の内容を移動させてもよい。
【００１８】
プログラム実行タスク１０は、プログラムを実行するタスクである。プログラム実行タスク１０は、コンパイルコード判断部１１０と、コンパイルコード実行部１２０と、プログラムを逐次コンパイルするインタプリタ制御部１３０を備えている。
【００１９】
コンパイルコード判断部１１０は、入力されたプログラムブロックがコンパイル済かどうかを判断する機能を有している。コンパイルコード実行部１２０は、コンパイル済コードを実行する機能を有している。インタプリタ制御部１３０は、プログラムを逐次コンパイルする機能を有している。
【００２０】
コンパイルコード実行部１２０は、コンパイル済コードを実行する機能を有している。コンパイルコード実行部１２０は、後述するコンパイルコード記憶部４からコンパイルコードを取得して実行する。なお、コンパイルコード記憶部４は、後述する逐次コンパイル部１３２または予測コンパイル部２３４によって生成されたコンパイルコードを保存している。
【００２１】
インタプリタ実行制御部１３０は、逐次コンパイル判断部１３１と、逐次コンパイル部１３２と、予測コンパイル要求通知部１３４と、インタプリタ実行回数記録部１３５を備えている。
【００２２】
逐次コンパイル判断部１３１は、入力されたプログラムブロックがプログラム起動直後のプログラムかどうか、また、当該プログラムブロックの実行回数が一定の回数よりも大きい場合に逐次コンパイルすべきと判断する。そうで無い場合はインタプリンタ実行すると判断する。
【００２３】
逐次コンパイル部１３２は、逐次コンパイル判断部１３１が当該プログラムブロックを逐次コンパイルすべきと判断した場合にコンパイルを行い、生成されたコンパイルコードをコンパイルコード記憶部４に保存する。また、逐次コンパイル部１３２は、コールフロー取得部１３３を備えている。
【００２４】
コールフロー取得部１３３は、逐次コンパイル時にコンパイルのバックエンド過程におけるコールフローから各プログラムブロックが実行される順番を取得し、プログラムブロック管理テーブル５を更新する。
【００２５】
予測コンパイル要求通知部１３４は、予想コンパイルタスク２０に予測コンパイル要求通知を行い、インプリタ実行するプログラムブロック情報を、プログラムブロック管理テーブル５に記録させる。
【００２６】
インタプリタ実行回数記録部１３５は、プログラムブロックのインタプリンタ実行の回数をカウントし、カウントした結果をプログラムブロック管理テーブル５に記録する。
【００２７】
インタプリタコード実行部１３６は、逐次コンパイル判断部１３１が当該プログラムブロックをインタプリンタ実行すると判断した場合に、当該プログラムをインタプリンタ実行する。
【００２８】
予想コンパイルタスク２０は、予測コンパイル要求通知受取り部２１０と、実行予測部２２０と、重要プログラム解析部２３０と、予測コンパイル部２３４を備える。
【００２９】
予測コンパイル要求通知受取り部２１０は、予測コンパイル要求通知部１３４から予測コンパイル要求通知を受け取る。
【００３０】
実行予測部２２０は、プログラムブロック管理テーブル５を参照し、次に実行されるプログラムブロックを予測する。
【００３１】
重要プログラム解析部２３０は、静的解析部２３１と、優先度決定部２３２を備えている。
【００３２】
静的解析部２３１は、入力されたプログラムブロックのコードから繰り返し数、ステップ数を抽出する。
【００３３】
優先度決定部２３２は、コンパイルを行う優先度を決定する。
【００３４】
予想コンパイル部２３４は、実行予測部２２０または、重要プログラム解析部２３０で予測コンパイルすべきと判断した場合にコンパイルを行い、生成されたコンパイルコードをコンパイルコード記憶部４に保存する。また、予測コンパイル部２３４は、コールフロー取得部１３３を備える。
【００３５】
コンパイルコード記憶部４は、コンパイル済みのコードを保存する。コンパイルコード記憶部４に保存されたコンパイル済みのコードは、プログラム実行タスク１０と、予想コンパイルタスク２０の両方から記録、参照可能である。コンパイルコード記憶部４は、ＯＳや別のタスクなどに設けてもよい。また、コンパイルコード記憶部４は、プログラム実行タスク１０、または予想コンパイルタスク２０の中に設け、タスク間の通信機構により共有してもよい。
【００３６】
プログラムブロック管理テーブル５は、プログラムブロック毎の管理情報を保持している。図２は、プログラムブロック管理テーブルの一例に示している。管理情報には、プログラムブロック名称２０１と、重要度２０２と、コンパイル済フラグ２０３と、実行回数２０４と、静的解析済フラグ２０５と、繰り返し回数２０６と、ステップ数２０７と、インタプリタ実行箇所２０８と、実行番号２０９とを含んでいる。プログラムブロック名称２０１は、プログラムブロックの名称を示す。重要度２０２は、プログラムブロックの重要度を示す。コンパイル済フラグ２０３は、プログラムブロックがコンパイル済であるか否かを示す。実行回数２０４は、プログラムブロックのインタプリタ実行の回数を示す。静的解析済フラグ２０５は、静的解析を行ったか否かを示す。繰り返し回数２０６は、プログラムブロック内の繰り返し処理の回数を示す。ステップ数２０７は、プログラムブロック内のステップ数を示す。インタプリタ実行箇所２０８は、プログラム実行タスク１０がインタプリタ実行している場合、どのプログラムブロックを実行しているかを示す。実行番号２０９は、プログラムブロックの実行順番を示す。
【００３７】
タスクスケジューラ３０は、プログラム実行タスク１０と、予想コンパイルタスク２０を切り替えて実行する。一般的にはＯＳの機能として実現される。
【００３８】
以上の構成により、本実施の形態における情報処理装置は、繰り返し処理が多いプログラムブロックが、プログラムの一部に偏っている場合に、次に実行するプログラムブロックの予測を適切に行い、事前にコンパイルすることが可能となる。これにより、本発明の情報処理装置は、インタプリタによる連続実行を回避することができる。特に、プログラム起動の場合など、プログラムの前半には一回実行のみのプログラムブロックが続いても、適宜コンパイルを行い、コンパイルコード実行が行われることにより、ＪＩＴコンパイラによるプログラム実行の高速化を実現できる。
【００３９】
図３は、本発明の実施の形態における情報処理装置の処理の流れを示す図である。
【００４０】
第一に、ユーザーが情報処理装置にプログラムを入力することで処理が開始される。これにより、プログラム実行タスク１０と、予想コンパイルタスク２０が処理を開始する（ステップＳ３ａ−１、ステップＳ３ｂ−１）。
【００４１】
プログラム実行タスク１０は、プログラムブロック管理テーブル５を参照に入力されたプログラムブロックが、コンパイル済かどうかを判断する（ステップＳ３ａ−３）。
【００４２】
判断された結果がコンパイル済（ステップＳ３ａ−３がコンパイル済）であれば、コンパイルコード実行部１２０はコンパイルコード記憶部４からコンパイルコード取出し、コンパイルコードを実行する（ステップＳ３ａ−４）。
【００４３】
判断された結果が未コンパイル（ステップＳ３ａ−３が未コンパイル）であれば、インタプリタ実行制御部１３０が動作する（ステップＳ３ａ−５）。
【００４４】
なお、インタプリタ実行制御部１３０は、予測コンパイルの要求を予想コンパイルタスク２０に通知すると同時に、インタプリタ実行する機能を有する。
【００４５】
詳細は図４、５、６、７にて説明をする。
【００４６】
プログラム実行タスク１０は、入力されたプログラムブロックがプログラム全体の最後であるかどうかを判断する（ステップＳ３ａ−６）。
【００４７】
入力されたプログラムブロックがプログラムの最後である場合（ステップＳ３ａ−６が最後）、プログラム実行タスク１０は終了する（ステップＳ３ａ−７）。
【００４８】
入力されたプログラムブロックがプログラムの最後ではない場合（ステップＳ３ａ−６が最後ではない場合）、次のプログラムブロックの入力を行う。
【００４９】
予想コンパイルタスク２０は、プログラム実行タスク１０から予測コンパイル要求の通知がある場合（ステップＳ３ｂ−２が通知有り）、実行予測部２２０が開始される（ステップＳ３ｂ−３）。
【００５０】
実行予測部２２０は、先行的にコンパイルを行うプログラムブロックを決定する。実行予測部２２０の動作は後述する。
【００５１】
プログラム実行タスク１０から予測コンパイル要求の通知がない場合（ステップＳ３ｂ−２が通知なし）、重要プログラム解析部２３０が開始される（ステップＳ３ｂ−４）。
【００５２】
重要プログラム解析部２３０は、入力されたプログラムブロックのループ回数、ステップ数、実行回数から重要度を決定し、事前にコンパイルを行うプログラムブロックを決定する。重要プログラム解析部２３０の動作は後述する。
【００５３】
次に実行予測部２２０または、重要プログラム解析部２３０によって決定されたプログラムブロックのコンパイルを行う（ステップＳ３ｂ−５）。
【００５４】
全てコンパイル済ではない場合（ステップＳ３ｂ−６が未コンパイル）、予測コンパイル通知判断（ステップＳ３ｂ−２）から処理を繰り返す。
【００５５】
全てコンパイル済である場合（ステップＳ３ｂ−６がコンパイル済）、予想コンパイルタスク２０は処理を終了する（ステップＳ３ｂ−７）。
【００５６】
図４、図５はプログラム実行タスク１０の動作の詳細の一例を示すフロー図である。
【００５７】
コンパイルコード判断部１１０はプログラムブロック管理テーブル５を参照し、入力されたプログラムブロックに対応するプログラムブロックが登録されているか判断を行う（ステップＳ４−３）。当該プログラムブロックがプログラムブロック管理テーブル５に登録されていない場合（ステップＳ４−３が未登録）、プログラムブロック管理テーブル５に、入力されたプログラムブロックの情報の追加を行う（ステップＳ４−４）。
【００５８】
なお、上記プログラムブロックの情報をプログラムブロック管理テーブル５に追加する場合、プログラムブロック名称２０１以外の項目には０を代入しておく。
【００５９】
入力されたプログラムブロックに対応するプログラムブロックが登録されている場合（ステップＳ４−３が登録済）、コンパイルコード判断部１１０は、当該プログラムブロックがコンパイル済かどうかの判断を行う（ステップＳ４−５）。
【００６０】
コンパイルコード判断部１１０のコンパイル済かどうかの判断の結果、当該プログラムブロックがコンパイル済である場合（ステップＳ４−５がコンパイル済）、コンパイルコード実行部１２０が実行され、コンパイルコード記憶部４からコンパイルコードを取得する（ステップＳ４−６）。コンパイルコード実行部１２０は取得したコンパイルコードを実行する（Ｓ４−７）。
【００６１】
コンパイルコード判断部１１０により当該プログラムが未コンパイルである場合（ステップＳ４−５が未コンパイル）、インタプリタ実行制御部１３１が実行さる。
【００６２】
インタプリタ実行制御部１３１は、プログラム起動直後のプログラムブロックかどうかを判断し（ステップＳ５−１）、プログラム起動直後の場合（ステップＳ５−１が起動直後）、逐次コンパイル部１３２は当該プログラムブロックのコンパイルを行い、生成されたコンパイルコードをコンパイルコード記憶部４に保存する（ステップＳ５−３）。つまり、起動直後の場合、当該プログラムブロックはプログラム実行タスクによりコンパイルされる。
【００６３】
逐次コンパイル部１３２のコンパイルにおけるバックエンド過程では、コールフロー取得部１３３によって、プログラムブロックのコールフロー情報を取得し、プログラムブロック管理テーブル５の実行番号項目２０９を更新する（ステップＳ５−４）。
【００６４】
図６は、動作フロー取得部１３３がコンパイル過程において生成したコールフローからプログラムブロック実行順情報の取得する方法と、プログラムブロック管理テーブル５の実行番号２０８の更新の例を示す。
【００６５】
まず、コンパイル過程におけるバックエンド処理にて作成されたコールグラフから、入力されたプログラムブロックの呼び出し元のプログラムブロックの実行番号をプログラムブロック管理テーブル５の実行番号２０９から取得する。当該プログラムブロックの実行番号の値は、呼び出し元の実行番号＋１とし、当該プログラムブロックの次に呼び出されるプログラムブロックの実行順も同様に、当該プログラムブロック実行順を決定する。その上で、取得した各プログラムブロックの情報を、対応するプログラムブロック管理テーブル５を更新する。
【００６６】
なお、最適化処理が導入されているコンパイラの場合には、最適化された後のコールグラフから、実行番号取得し、プログラムブロック管理テーブル５に登録する。また、入力されるプログラムコードが中間コードである場合、中間コード生成時の際に、事前に、プログラムブロック管理テーブル５に記入しておいてもよい。
【００６７】
プログラム起動直後のプログラムブロックではない場合（ステップＳ５−１が起動直後ではない場合）、逐次コンパイル判断部１３１は実行回数が閾値を超えているかどうかを判断する（ステップＳ５−２）。閾値はパラメータとして任意に決めてもよい。
【００６８】
実行回数が閾値を超えている場合（ステップＳ５−２がＹｅｓ）、逐次コンパイル部１３２は、当該プログラムブロックのコンパイルを行い（ステップＳ５−３）、コールフロー取得部１３３によって、コールフロー情報を取得し、プログラムブロック管理テーブル５を更新する（ステップＳ５−４）。つまり、起動直後のプログラムブロックではない場合でも、繰り返しが閾値を越えた場合は、当該プログラムブロックをプログラム実行タスクでコンパイルする。
【００６９】
予測コンパイル要求通知部１３４は、予想コンパイルタスク２０に予測コンパイル要求を通知する（ステップＳ５−５）。通知を行う方法としては、プロセス間通信や、共有メモリを使用してもよい。
【００７０】
（コンパイルした場合は戻る）
当該プログラムブロックのコンパイルが行われなかった場合、予測コンパイル要求通知部１３４は、プログラムブロック管理テーブル５のインタプリタ実行箇所２０７の各プログラムブロックの値を全て０にし、当該プログラムブロックに対応するインタプリタ実行箇所２０７の値を１に更新する（ステップＳ５−６）。
【００７１】
インタリタコード実行部１３５は、当該プログラムブロックのインタプリタ実行する（ステップＳ５−７）。
【００７２】
インタプリタ実行回数記録部１３５は、当該プログラムブロックのインタプリンタ実行回数のカウント値を記録し、プログラムブロック管理テーブル５の実行回数２０４を更新する（Ｓ５−８）。
【００７３】
プログラム実行タスク１０は、コンパイルコード実行部１２０、インタプリタ実行制御部１３０の処理が完了すると、当該プログラムブロックがプログラムの最後であるかどうかを判断する（ステップＳ４−８）。
【００７４】
当該プログラムブロックがプログラムの最後である場合（Ｓ４−８が最後）、プログラムを終了し、当該プログラムブロックがプログラムの最後ではない場合（Ｓ４−８が最後ではない）、次のプログラムブロックのコードを入力する（Ｓ４−２）。
【００７５】
図７、図８、図９は、図１における予想コンパイルタスク２０の動作の詳細フローチャート図の一例である。
【００７６】
予想コンパイルタスク２０はタスクスケジューラ３０によって実行され、処理が開始する（ステップＳ７−１）。
【００７７】
予測コンパイル要求通知受取り部２１０は予測コンパイル要求通知部１３４によって通知されたかどうかを判断する（ステップＳ７−２）。
【００７８】
予測コンパイル開始要求通知がある場合（ステップＳ７−２が要求通知有り）、実行予測部２０が動作され、予測コンパイルブロック決定部２２１は、予測コンパイルを行うプログラムブロックを決定する（ステップＳ７−３）。
【００７９】
図８は、予測コンパイルブロック決定部２２１が予測コンパイルを行うプログラムブロックを決定するフロー図である。
【００８０】
コンパイルブロック管理テーブル５のインタプリタ実行箇所２０８の値が１であるプログラムブロックを確認する（ステップＳ８−２）。予測コンパイル実行番号（Ｎ）を上記プログラムブロックの実行番号とする（ステップＳ８−３）。コンパイルブロック管理テーブル５の実行番号の最大値を確認する（ステップＳ８−４）。実行番号の最大値（Ｎｍａｘ）コンパイルブロック管理テーブル５の実行番号の最大値とする（ステップＳ８−５）。
【００８１】
インタプリタ実行しているプログラムブロックが未コンパイルであるかを確認する（ステップＳ８−６）。
【００８２】
インタプリタ実行しているプログラムブロックがコンパイル済でない場合（ステップＳ８―６がＴｒｕｅ）、プログラムブロックのステップ数を抽出し、コンパイル判断ステップ数（Ｓｔｉ）に足し合わせる（ステップＳ８−７）。
【００８３】
足し合わせたステップ数がコンパイル判定閾値（Ｔｓｉ）よりも大、またはインタプリタ実行プログラムブロックの実行番号が実行番号の最大値以上か判断を行う（ステップＳ８−８）。
【００８４】
上記判断がＦａｌｓｅ（ステップＳ８−８がＦａｌｓｅ）である場合、実行番号の値を１インクリメントする（ステップＳ８−９）。
【００８５】
上記判断がＴｒｕｅになるまで、インタプリタ実行しているプログラムブロックがコンパイル済かどうかの判断から繰り返し、コンパイルを行うプログラムブロックの実行番号を決定する。
【００８６】
なお、コンパイル判定閾値は、コンパイルを行うプログラムブロックがインタプリタ実行箇所のプログラムブロックにならないような値にする必要がある。
【００８７】
上記判断がＴｒｕｅの場合（ステップＳ８−９がＴｒｕｅ）、実行番号の値を１インクリメントする（ステップＳ９−１）。
【００８８】
上記インクリメントした実行番号が実行番号の最大値よりも大きいか判断する（ステップＳ９−２）。
【００８９】
インクリメントした実行番号が実行番号の最大値よりも大きい場合（ステップＳ９−２がＴｒｕｅ）、予測コンパイルブロック決定部２２１は終了する（ステップＳ９−８）。
【００９０】
インクリメントした実行番号が実行番号の最大値以下である場合（ステップＳ９−２がＦａｌｓｅ）、上記インクリメントした実行番号のプログラムブロックがコンパイル済かどうか判断を行う（ステップＳ９−３）。
【００９１】
上記判断がＴｒｕｅ（ステップＳ９−３がＴｒｕｅ）である場合、コンパイル終了判定ステップ数（Ｓｔｃ）に上記インクリメントした実行番号のプログラムブロックのステップ数を足し合わせる（ステップＳ９−４）。
【００９２】
上記足し合わせたコンパイル終了判定ステップ数がコンパイル開始判定閾値（Ｔｓｉ）より小さい場合（ステップＳ９−６がＴｒｕｅ）、上記インクリメントした実行番号のプログラムブロックをコンパイル対象に加える（ステップＳ９−６）。
【００９３】
上記足し合わせたコンパイル終了判定ステップ数がコンパイル開始判定閾値（Ｔｓｉ）より大きい場合（ステップＳ９−６がＦａｌｓｅ）、予測コンパイルブロック決定部２２１は終了する（ステップＳ９−８）。
【００９４】
予測コンパイル要求通知部１３４から通知がない場合（ステップＳ７−２が要求通知なし）、重要プログラム解析部２３０が開始され、静的解析部２３１が実行される（ステップＳ１１−１）。
【００９５】
静的解析部２３１はプログラムブロックを入力する（ステップＳ１１−２）。
【００９６】
当該プログラムブロックがプログラムブロック管理テーブル５に登録されているか確認を行う（ステップＳ１１−３）。
【００９７】
登録されていれば（ステップＳ１１−３が登録済）、当該プログラムブロックがコンパイル済かどうか判断する（ステップＳ１１−５）。
【００９８】
入力されたプログラムブロックが登録されていなければ（ステップＳ１１−３が未登録）、新たにプログラムブロック管理テーブル５に追加を行う（ステップＳ１１−４）。
【００９９】
当該プログラムブロックがコンパイル済でなければ（ステップＳ１１−５が未コンパイル）、静的解析済かどうかを判断する（ステップＳ１１−６）。
【０１００】
プログラムブロックが静的解析済でなければ（ステップＳ１１−６が未解析）、プログラムブロックのステップ数と、繰り返し数をプログラムコードから抽出し、プログラムブロック管理テーブル５に対応する項目を更新する（ステップＳ１１−７）。
【０１０１】
優先度決定部２３２は、プログラムブロックの重要度を決定する（ステップＳ１１−８）。
【０１０２】
実施例においては、プログラムブロック管理テーブル５の繰り返し回数２０６×ステップ数２０７×（１＋実行回数２０４／１０）の値をプログラムブロックの重要度としている。
【０１０３】
重要度が決定すれば、プログラムブロックのステップ数と、繰り返し数と、プログラムブロック重要度に対応するプログラムブロック管理テーブル５の項目を更新する（ステップＳ１１−９）。
【０１０４】
ステップＳ１１−２で入力だれたプログラムコードが全て解析されたかどうかを、プログラムブロック管理テーブル５の静的解析済フラグ２０５で確認を行う（ステップＳ１１−１０）。
【０１０５】
全て解析したのであれば（ステップＳ１１−１０が全て解析済）、プログラムブロック管理テーブル５のコンパイル済フラグ２０３を参照し、未コンパイルであるプログラムブロックの中から一番重要度の値が大きいプログラムブロックのコンパイルを行うプログラムブロックとする（ステップＳ１１−１１）。
【０１０６】
プログラム全体をコンパイルしたかどうかを判断する（ステップＳ７−６）。
【０１０７】
全てコンパイル済である場合（ステップＳ７−６がコンパイル済）、予想コンパイルタスクは終了する（ステップＳ７−７）。
【０１０８】
以上の構成により、本実施の形態における情報処理装置は、プログラム実行タスク１０がインタプリタ実行する際、つまり未コンパイルのプログラムブロックを遭遇する度に、予想コンパイルタスク２０に予測コンパイル要求通知を行う。通知を受けた予想コンパイルタスク２０は、プログラム実行タスク１０が当該プログラムブロックをインタプリタ実行している間に、プログラムの実行予測を行いその先で実行されるプログラムブロックをコンパイルする。プログラム起動時のような繰り返し処理がない場合においても、コンパイルコードの生成と実行が可能になる。これにより、インタプリタ実行時間を削減し、高速化することが可能となる。
【０１０９】
（実施の形態２）
前述した実施の形態１では、１つのＣＰＵで動作する情報処理装置の構成を想定していた。このため、１つのＣＰＵ上では、予想コンパイルタスクによるコンパイルや分析の量が多くなる分、プログラム実行タスク１０はインタプリタ実行されることが多くなる。
【０１１０】
しかしながら、複数ＣＰＵを搭載するアーキテクチャに対しては、プログラム実行タスク１０がより多くコンパイル実行を行うことができるように、各タスクの各ＣＰＵの負荷状況によって、プログラム実行タスク１０や予想コンパイルタスクに割当てるＣＰＵの選択と割当て量の算出を行うことを想定しなければならない。
【０１１１】
以下、前述の方法を、複数ＣＰＵが搭載されたシステムに対して適用した場合の実施例について述べる。
【０１１２】
図１２は、本発明の実施の形態における情報処理装置の構成を示すブロック図である。
【０１１３】
本発明の情報処理装置は、中央演算装置（ＣＰＵ１〜ＣＰＵ３）１００、周辺デバイス２、メモリ３を備えている。本実施の形態では，３つのＣＰＵが存在するとしているが，３つ以下、または、３つ以上のＣＰＵが存在してもよい。
【０１１４】
メモリ３は、コンパイルコード記憶部４と、プログラムブロック管理テーブル５と、ＣＰＵ負荷管理テーブル６と、ＣＰＵ割当て部７と、プログラム実行タスク１０と、予想コンパイルタスク２０００と、タスクスケジューラ３０と、ＣＰＵ負荷監視部４０とを備えている。
【０１１５】
プログラム実行タスク１０は、プログラムを実行するタスクであり、入力されたプログラムブロックが、コンパイル済かどうかを判断するコンパイルコード判断部１１０と、コンパイル済コードを実行するコンパイルコード実行部１２０と、プログラムを逐次実行するインタプリタ実行制御部１３０を備えている。
【０１１６】
インタプリタ実行制御部１３０は、逐次コンパイル判断部１３１と、コンパイル部１３２と、予測コンパイル要求通知部１３４と、インタプリタコード実行部１３６と、インタプリタ実行回数記録部１３５と、インタプリタコード実行部１３６とを備える。
【０１１７】
逐次コンパイル判断部１３１は、入力されたプログラムブロックがプログラム起動直後のプログラムかどうか、また、当該プログラムブロックの実行回数が一定の回数よりも大きいかどうか判断を行う。
【０１１８】
コンパイル部１３２は、当該プログラムブロックのコンパイルを行い、コンパイルを行った結果、生成されたコンパイルコードをコンパイルコード記憶部４に保存する。
【０１１９】
予測コンパイル要求通知部１３４は、予想コンパイルタスク２０００に予測コンパイル要求通知を行い、インプリタ実行するプログラムブロック情報をプログラムブロック管理テーブル５の記録を行う。インタプリタ実行回数記録部１３５は、プログラムブロックの実行回数のカウントを行い、カウントした結果をプログラムブロック管理テーブル５に記録する。インタプリタコード実行部１３６はインタプリタ実行する。
【０１２０】
コンパイル部１３２は、コンパイルのバックエンド過程におけるコールフローから実行する順番を取得し、プログラムブロック管理テーブル５を更新するコールフロー取得部１３３を備える。
【０１２１】
予想コンパイルタスク部２０は、予測コンパイル要求通知１３４を受取る予測コンパイル要求通知受取り部２１０と、実行予測部２２００と、重要プログラム解析部２３０と、コンパイル部２１を備える。
【０１２２】
実行予測部２２００は、次に実行されるプログラムブロックを決定する予測コンパイルブロック決定部２２１０を備える。
【０１２３】
重要プログラム解析部２３０は、入力されたプログラムブロックのコードから繰り返し数、ステップ数を抽出する静的解析部２３１と、コンパイルを行う優先度を決定する優先度決定部２３２を備える。
【０１２４】
タスクスケジューラ３０はプログラム実行タスク１０、予想コンパイルタスク２０００を切り替える。
【０１２５】
なお、プログラムブロック管理テーブル５は、図２に一例を示しており、実施の形態１と同じ内容である。
【０１２６】
ＣＰＵ負荷管理テーブル６と、ＣＰＵ割当て部７、ＣＰＵ負荷監視部４０、予測コンパイル決定部２１００は、実施の形態１と異なる構成要素である。
【０１２７】
図１３のＣＰＵ負荷管理テーブル６の一例に示すように、タスク管理テーブル６は、各タスクに割当てられているＣＰＵ情報（周波数、使用率）を保持している。
【０１２８】
ＣＰＵ負荷監視部４０は、タスクスケジューラー３０がプロセススイッチをしたタイミングで、プログラム実行タスク１０と、予想コンパイルタスク２０００の負荷情報を取得し、ＣＰＵ負荷管理テーブル６を更新する。予想コンパイルタスク２０００の処理性能がプログラム実行タスク１０の処理性能よりも小さい場合、ＣＰＵ割当て部７を起動させる。
【０１２９】
ＣＰＵ割当て部７は、予想コンパイルタスク２０００の処理性能がプログラム実行タスク１０の処理性能よりも大きくなるように、予想コンパイルタスク２０００に各ＣＰＵ資源を割当てる。
【０１３０】
以上の構成により、常に予想コンパイルタスク２０００の処理性能がプログラム実行タスク１０の処理性能よりも高く維持することが可能となる。つまり、予想コンパイルタスク２０００が、プログラム実行タスク１０よりも先行して動作し、プログラム実行タスク１０によるコンパイル実行を、より多くすることができる。
【０１３１】
図１４は、本発明の実施形態における情報処理装置の処理の流れを示す図である。
【０１３２】
タスクスケジューラー３０がプロセススイッチを行うと、ＣＰＵ負荷監視部４０が動作し、各プロセスの負荷情報を取得し、ＣＰＵ負荷管理テーブル６を更新する（ステップＳ１４ａ−１）。
【０１３３】
予想コンパイルタスク２０００の処理性能がプログラム実行タスク１０の処理性能よりも小さい場合、ＣＰＵ割当て部７を起動させる。
【０１３４】
ＣＰＵ割当て部７は、予想コンパイルタスク２０００の処理性能がプログラム実行タスク１０の処理性能よりも大きくなるように、予想コンパイルタスク２０００に各ＣＰＵ資源を割当てる（ステップＳ１４ａ−２）。
【０１３５】
プログラム実行タスク１０と予想コンパイルタスク２０００は、ユーザーが情報処理装置にプログラムコードを入力することで処理が開始される（ステップＳ１４ｂ−１、ステップＳ１４ｃ−１）。
【０１３６】
プログラム実行タスク１０はプログラムコードをプログラムブロック単位で入力する（ステップＳ１４ｂ−２）。
【０１３７】
入力されたプログラムブロックがコンパイル済かどうかを判断する（ステップＳ１４ｂ−３）。
【０１３８】
判断された結果がコンパイル済（ステップＳ１４ｂ−３がコンパイル済）であれば、コンパイルコード制御部１２０はコンパイルコードを実行する（ステップＳ１４ｂ−４）。
【０１３９】
判断された結果が未コンパイル（ステップＳ１４ｂ−３が未コンパイル）であれば、インタプリタ実行制御部１３０が動作する（ステップＳ１４ｂ−５）。
【０１４０】
なお、インタプリタ実行制御部１３０は予測コンパイルの要求を予想コンパイルタスク２０００に通知を行い、インタプリタ実行する機能を有する。
【０１４１】
プログラム実行タスク１０は入力されたプログラムブロックがプログラム全体の最後であるかどうかを判断する。
【０１４２】
入力されたプログラムブロックがプログラムの最後である場合（ステップＳ１４ｂ−６が最後）、プログラム実行タスク１０は終了する（ステップＳ１４ｂ−７）。
【０１４３】
入力されたプログラムブロックがプログラムの最後ではない場合（ステップＳ１４ｂ−６が最後ではない場合）、次のプログラムブロックの入力を行う。
【０１４４】
予想コンパイルタスク２０００は、プログラム実行タスク１０から予測コンパイル要求の通知がある場合（ステップＳ１４ｃ−２が通知有り）、実行予測部２２０が開始される（ステップＳ１４ｃ−３）。
【０１４５】
実行予測部２２０は、先行的にコンパイルを行うプログラムブロックを決定する。
【０１４６】
プログラム実行タスク１０から予測コンパイル要求の通知がない場合（ステップＳ１４ｃ−２が通知なし）、重要プログラム解析部２３０が開始される（ステップＳ１４ｃ−４）。
【０１４７】
重要プログラム解析部２３０は、入力されたプログラムブロックのループ回数、ステップ数、実行回数から重要度を決定し、事前にコンパイルを行うプログラムブロックを決定する。
【０１４８】
実行予測部２２０と、重要プログラム解析部２３０によって決定されたプログラムブロックのコンパイルを行う（ステップＳ１４ｃ−５）。
【０１４９】
全てコンパイル済かどうか判断を行う（ステップＳ１４ｃ−５）。
【０１５０】
全てコンパイル済ではない場合（ステップＳ１４ｃ−５が未コンパイル）、予測コンパイル通知判断（ステップＳ１４ｃ−２）から処理を繰り返す。
【０１５１】
全てコンパイル済である場合（ステップＳ１４ｃ−５がコンパイル済）、予想コンパイルタスク２０００は処理を終了する（ステップＳ１４ｃ−７）。
【０１５２】
図１５は、予想コンパイルタスク２０００への各ＣＰＵ割当てを行う動作の一例を示している。
【０１５３】
ＣＰＵ割当て部７は，各ＣＰＵ使用率が変化した場合などに起動され，ＣＰＵ負荷管理テーブル６の各タスクに対応する周波数と、割当てられている各ＣＰＵの使用率から、プログラム実行タスク処理性能と、予想コンパイルタスク処理性能を算出する（ステップＳ１５−２）。なお、ＣＰＵ負荷監視部４０はタスクスイッチが行われた際に、各タスクの負荷情報を、ＣＰＵ負荷管理テーブル６に更新する。
【０１５４】
本実施の形態では、タスクの処理性能は、対応するタスクに割当てられているＣＰＵの周波数にＣＰＵ使用率を乗算した合計値としている。
【０１５５】
予想コンパイルタスク２０００の処理量が、プログラム実行タスク１０の処理量よりも大きいかどうかを判断する（ステップＳ１５−３）。プログラム実行タスク１０の処理性能が予想コンパイルタスク処理性能よりも大きい場合（ステップＳ１５−３が大きい）、ＣＰＵ割当て部７は、予想コンパイルタスク２０００の処理性能が、プログラム実行タスク１０の処理性能よりも大きくなるように、各ＣＰＵ資源を予想コンパイルタスク２０００に割当てる（ステップＳ１５−５）。
【０１５６】
図１６は、予想コンパイルタスク２０００にＣＰＵ資源の割当てを行う動作の一例を示す。
【０１５７】
搭載しているＣＰＵに１から連番を付与し、ＣＰＵ（１），ＣＰＵ（２），・・・ＣＰＵ（ｎ）としているとする。ｎが１からｎ＿ｍａｘ（搭載しているＣＰＵ数）に対して、以下の処理を行う。
【０１５８】
ＣＰＵ（ｎ）の割当て可能なＣＰＵ資源（Ｕ（ｎ））を求める（ステップＳ１６−３）。
【０１５９】
ＣＰＵ資源からＣＰＵ（ｎ）の余り性能を求める（ステップＳ１６−４）。
【０１６０】
図１６に示す一例では、ＣＰＵ資源は１００％からＣＰＵ使用率を引いた値としており、ＣＰＵ余り性能はＣＰＵ資源に対応するＣＰＵ周波数を乗算した値としている。
【０１６１】
余り性能Ｃ（ｎ）とＣ（ｎ−１）の比較を行う（ステップＳ１６−４）。
【０１６２】
なお、ｎ−１が０である場合、ＣＰＵ（ｎ−１）のＣＰＵ資源は０とする。
【０１６３】
上記比較結果がＣ（ｎ−１）よりＣ（ｎ）の方が大きい場合（ステップＳ１６−４が大きい）、資源を割当てるＣＰＵ番号（Ｎ）をｎとする（ステップＳ１６−７）。
【０１６４】
ｎの値が搭載しているＣＰＵの数（ｎ＿ｍａｘ）であれば、ＣＰＵ（Ｎ）のＣＰＵ資源Ｕ（Ｎ）を割当てる（ステップＳ１６−７）。
【０１６５】
ｎの値が搭載しているＣＰＵの数（ｎ＿ｍａｘ）以下であれば、ｎの値を１インクリメントし、ステップＳ１６−３から処理を行う。
【０１６６】
ＣＰＵの使用率は、図１２に示すＣＰＵの総使用率テーブルをメモリに持ってもよいし、ＣＰＵ割当て部７動作時に算出してもよい。
【０１６７】
図１７は、予測コンパイルブロック決定部２２１０が予測コンパイルを行うプログラムブロックを決定するフロー図である。
【０１６８】
コンパイルブロック管理テーブル５のインタプリタ実行箇所２０８の値が１であるプログラムブロックを確認する（ステップＳ１７−２）。
【０１６９】
ＣＰＵ負荷テーブル７からインタプリタ実行タスク１０と、コンパイタスク２０が割当てられているＣＰＵの周波数と、ＣＰＵ使用率を取得する（ステップＳ１７−３）。
【０１７０】
コンパイル開始判断ステップ数（Ｔｓｉ）をインタプリタ実行性能／予想コンパイルタスク実行性能比率を乗算した値にし、コンパイル開始判断ステップ数（Ｔｓｉ）をインタプリタ実行性能／予想コンパイルタスク実行性能比率を乗算した値にする（ステップＳ１７−４）。
【０１７１】
予測コンパイル実行番号（Ｎ）を上記プログラムブロックの実行番号とする（ステップＳ１７−５）。コンパイルブロック管理テーブル５の実行番号の最大値を確認する（ステップＳ１７−６）。実行番号の最大値（ｎ＿ｍａｘ）コンパイルブロック管理テーブル５の実行番号の最大値とする（ステップＳ１７−７）。
【０１７２】
インタプリタ実行しているプログラムブロックが未コンパイルであるかを確認する（ステップＳ１７−８）。
【０１７３】
インタプリタ実行しているプログラムブロックがコンパイル済でない場合（ステップＳ１７―８がＴｒｕｅ）、プログラムブロックのステップ数を抽出し、コンパイル判断ステップ数（Ｓｔｉ）に足し合わせる（ステップＳ１７−９）。
【０１７４】
足し合わせたステップ数がコンパイル判定閾値（Ｔｓｉ）よりも大、またはインタプリタ実行プログラムブロックの実行番号が実行番号の最大値以上か判断を行う（ステップ１７−１０）。
【０１７５】
上記判断がＦａｌｓｅ（ステップＳ１７−１０がＦａｌｓｅ）である場合、実行番号の値を１インクリメントする（ステップＳ１７−１１）。
【０１７６】
上記判断がＴｒｕｅになるまで、インタプリタ実行しているプログラムブロックがコンパイル済かどうかの判断から繰り返し、コンパイルを行うプログラムブロックの実行番号を決定する。
【０１７７】
なお、コンパイル判定閾値は、コンパイルを行うプログラムブロックがインタプリタ実行箇所のプログラムブロックにならないような値にする必要がある。
【０１７８】
上記判断がＴｒｕｅの場合（ステップＳ１７−１０がＴｒｕｅ）、実行番号の値を１インクリメントする（ステップＳ１８−１）。
【０１７９】
上記インクリメントした実行番号が実行番号の最大値よりも大きいか判断する（ステップＳ１８−２）。
【０１８０】
インクリメントした実行番号が実行番号の最大値よりも大きい場合（ステップＳ１８−２がＴｒｕｅ）、予測コンパイルブロック決定部２２１は終了する（ステップＳ１８−８）。
【０１８１】
インクリメントした実行番号が実行番号の最大値以下である場合（ステップＳ１８−２がＦａｌｓｅ）、上記インクリメントした実行番号のプログラムブロックがコンパイル済かどうか判断を行う（ステップＳ１８−３）。
【０１８２】
上記判断がＴｒｕｅ（ステップＳ１８−３がＴｒｕｅ）である場合、コンパイル終了判定ステップ数（Ｓｔｃ）に上記インクリメントした実行番号のプログラムブロックのステップ数を足し合わせる（ステップＳ１８−４）。
【０１８３】
上記足し合わせたコンパイル終了判定ステップ数がコンパイル開始判定閾値（Ｔｓｉ）より小さい場合（ステップＳ１８−６がＴｒｕｅ）、上記インクリメントした実行番号のプログラムブロックをコンパイル対象に加える（ステップＳ１８−６）。
【０１８４】
上記足し合わせたコンパイル終了判定ステップ数がコンパイル開始判定閾値（Ｔｓｉ）より大きい場合（ステップＳ１８−６がＦａｌｓｅ）、予測コンパイルブロック決定部２２１は終了する（ステップＳ１８−８）。
【０１８５】
以上により、本実施の形態における情報処理装置は、常に予想コンパイルタスク処理性能を、プログラム実行タスク処理性能よりも常に高く維持することができる。つまり、予想コンパイルタスク２０００が常に先行してコンパイルコードを生成することが可能になり、プログラム実行タスク１０の高速化も図ることができる。
【０１８６】
また、本実施の形態における各構成要素は典型的にはソフトウェアとして実現されるが、集積回路であるＬＳＩとして実現してもよい。これらは個別に１チップ化されても良いし、一部又は全てを含むように１チップ化されても良い。ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  ＰｒｏｇｒａｍｍａｂｌｅＧａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
【産業上の利用可能性】
【０１８７】
本発明にかかる情報処理装置は、ＪＩＴコンパイラを有し、大型計算機やパーソナルコンピュータ等として有用である。また、ＡＶ機器などの家電機器や、携帯電話のような通信機器、産業機器、乗用機器等の用途にも応用できる。
【符号の説明】
【０１８８】
１，１００    ＣＰＵ
２    周辺デバイス
３    メモリ
４    コンパイルコード記憶部
５    プログラムブロック管理テーブル
６    ＣＰＵ負荷管理テーブル
７    ＣＰＵ割当て部
１０    プログラム実行タスク
２０，２０００    予想コンパイルタスク
３０    タスクスケジューラ
４０    ＣＰＵ負荷監視部
１１０    コンパイルコード判断部
１２０    コンパイルコード実行部
１３０    インタプリタ実行制御部
１３１    逐次コンパイル判断部
１３２    逐次コンパイルコンパイル部
１３３    コールフロー情報取得部
１３４    予測コンパイル要求通知部
１３５    インタプリタ実行回数記録部
１３６    インタプリタ実行部
２１０    予測コンパイル要求通知受取り部
２２０，２２００    実行予測部
２２１，２２１０    予測コンパイルブロック決定部
２３０    重要プログラム解析部
２３１    静的解析部
２３２    優先度決定部
２３４    予測コンパイル部
【図１】
2010271810.tif 000003
【図２】
2010271810.tif 000004
【図３】
2010271810.tif 000005
【図４】
2010271810.tif 000006
【図５】
2010271810.tif 000007
【図６】
2010271810.tif 000008
【図７】
2010271810.tif 000009
【図８】
2010271810.tif 000010
【図９】
2010271810.tif 000011
【図１０】
2010271810.tif 000012
【図１１】
2010271810.tif 000013
【図１２】
2010271810.tif 000014
【図１３】
2010271810.tif 000015
【図１４】
2010271810.tif 000016
【図１５】
2010271810.tif 000017
【図１６】
2010271810.tif 000018
【図１７】
2010271810.tif 000019
【図１８】
2010271810.tif 000020
【図１９】
2010271810.tif 000021