(57)【要約】【課題】特にマルチコア環境において、プロファイル情報の解析結果を利用して、プログラム実行速度を低下させることなく、当該スケジューリングの結果発生したアイドル期間のクロック周波数を下げることで消費電力を低減させる技術を提供する。【解決手段】プログラム実行を担当するタスクで、中間コードもしくはネイティブコードを入力してプログラムを実行し、プログラムブロック毎の「実行時刻」から成る「プロファイル情報」を抽出する。次に、プログラムのコンパイルを担当するタスクで、中間コードと「プロファイル情報」を入力し、プロファイル情報解析を行ってコンパイル処理の「省電力スケジューリング情報」を出力し、前記「省電力スケジューリング情報」を用いてコンパイル処理を実施する。このコンパイルの結果生成されたネイティブコードをプログラム実行を担当するタスクで活用する。【選択図】図１
2007334497.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラムから変換された中間コードを入力し、プログラム実行を担当するタスクとプログラムの事前コンパイルを担当するタスクを割当てるステップと、
中間コードもしくはネイティブコードを入力してプログラムを実行し、プログラムブロック毎の「実行時刻」から成る「プロファイル情報」を抽出するプログラム実行制御ステップと、
中間コードと「プロファイル情報」を入力し、プロファイル情報解析を行ってコンパイル処理の「省電力スケジューリング情報」を出力し、前記「省電力スケジューリング情報」を用いてコンパイル処理を実施するコンパイル制御ステップとを有し、
前記コンパイル制御ステップ中のプロファイル情報解析を行うステップは、
「プロファイル情報」を入力して、各プログラムブロックの「実行時期」を検出するステップと、
当該プログラムブロックの「コンパイル時間」を見積るステップと、
「実行時期」と「コンパイル時間」から「アイドル時間」を見積るステップと、
「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定するステップとを含むことを特徴とする情報処理装置の省電力化方法。
【請求項２】
請求項１記載の情報処理装置の省電力化方法において、
前記コンパイル制御ステップ中のコンパイルを実施するステップは、コンパイル処理の進捗を管理し、「プロファイル情報解析」の結果得られた「コンパイルに利用できる時間」の半分まで経過した時点で、コンパイル結果が半分出力されていない場合に「クロック周波数」を上げるリカバリステップを有することを特徴とする情報処理装置の省電力化方法。
【請求項３】
請求項１記載の情報処理装置の省電力化方法において、
前記コンパイル制御ステップは、「省電力スケジューリング情報」が存在しない場合に、「プロファイル情報」から実行回数の増加速度が高いプログラムブロックを検出し、低い「クロック周波数」でコンパイルする投機コンパイルステップを含むことを特徴とする情報処理装置の省電力化方法。
【請求項４】
ソースプログラムから変換された中間コードを入力し、プログラム実行を担当するタスクとプログラムの事前コンパイルを担当するタスクを割当てるステップと、
中間コードもしくはネイティブコードを入力してプログラムを実行し、プログラムブロック毎の「実行時刻」から成る「プロファイル情報」を抽出するプログラム実行制御ステップと、
中間コードと「プロファイル情報」を入力し、プロファイル情報解析を行ってコンパイル処理の「省電力スケジューリング情報」を出力し、前記「省電力スケジューリング情報」を用いてコンパイル処理を実施するコンパイル制御ステップとを計算機に実行させ、
前記コンパイル制御ステップ中のプロファイル情報解析を行うステップは、
「プロファイル情報」を入力して、各プログラムブロックの「実行時期」を検出するステップと、
当該プログラムブロックの「コンパイル時間」を見積るステップと、
「実行時期」と「コンパイル時間」から「アイドル時間」を見積るステップと、
「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定するステップとを含むことを特徴とするプログラム。
【請求項５】
ソースプログラムから変換された中間コードを入力し、プログラム実行を担当するタスクとプログラムの事前コンパイルを担当するタスクを割当てる手段と、
中間コードもしくはネイティブコードを入力してプログラムを実行し、プログラムブロック毎の「実行時刻」から成る「プロファイル情報」を抽出するプログラム実行制御手段と、
中間コードと「プロファイル情報」を入力し、プロファイル情報解析を行ってコンパイル処理の「省電力スケジューリング情報」を出力し、前記「省電力スケジューリング情報」を用いてコンパイル処理を実施するコンパイル制御手段とを有し、
前記コンパイル制御手段中のプロファイル情報解析を行う手段は、
「プロファイル情報」を入力して、各プログラムブロックの「実行時期」を検出する手段と、
当該プログラムブロックの「コンパイル時間」を見積る手段と、
「実行時期」と「コンパイル時間」から「アイドル時間」を見積る手段と、
「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定する手段とを含むことを特徴とするプログラム実行システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置の省電力化技術に関し、特にマルチコアＣＰＵを備えた情報処理装置の省電力方法、プログラム、およびプログラム実行システムに適用して有効な技術に関する。
【背景技術】
【０００２】
中間コードの実行においてクロック周波数を下げることにより消費電力を削減する技術、およびプログラム設計情報から検出したアイドル時間のクロック周波数を下げて省電力化するプログラミング技術等は既存である。例えば特許文献１に記載の方法では、クロック周波数調整機能を搭載した環境においてタスク１の処理時間を見積もり、見積もり時間が大きい場合はクロック周波数を上げてタスク２の実行を停止し、見積もり時間が小さい場合はクロック周波数を低いままにしてタスク２を並列実行させる。これにより、指定された消費電力量の範囲でタスクの優先度を決定することが可能となる。
【０００３】
また、特許文献２に記載の方法では、クロック周波数を制御する命令を備えたハードウェアの実現方法が示されており、これにより、プログラミングの際、タスクスケジューリング、タイミング等の設計情報を利用して、アイドル期間を検出し、クロック周波数調整命令を用いてスローダウンさせ消費電力を削減することが可能となる。
【０００４】
また、非特許文献１では、クロック周波数調整機能を搭載した環境において、タスク１のデッドラインミス率を一定の範囲に制御しながら、消費電力の低減を実現している。
【０００５】
纏めると、手動プログラミングによる省電力制御に対応したハードウェアの実現方法、手動プログラミングにより省電力制御を実現する方法に関する技術は既存であるが、これらを自動化したシステムソフトウェアの実現方法は未だ発表されていない。
【特許文献１】特開２００３−３４５５６７号公報
【特許文献２】特開２００１−２０２１５５号公報
【非特許文献１】中村哲朗など：リアルタイム性を考慮したフィードバック制御による動的周波数制御方法、情報処理学会研究報告２００６−ＳＬＤＭ−１２４、２００６年３月
【発明の開示】
【発明が解決しようとする課題】
【０００６】
高速化や省電力化への期待からマルチコア環境が注目されている。一般にマルチコア環境では、シングルコア環境に比べて、ＣＰＵパワーの増大や入力プログラム自体に十分な並列性がない可能性があること等から、アイドル期間の総計が増大する傾向にある。従来、アイドル時間や消費電力を最小化するスケジューリング技術については、各々単独では様々な検討がなされてきた。しかし、高速化の目的でスケジューリングされた結果発生したアイドル時間を活用し、高速化の効果を損なうことなく省電力化も併せて実現していく技術については、十分な検討がなされていない。
【０００７】
そこで、本発明は、上記事情に鑑みてなされたものであり、その目的は、特にマルチコア環境において、プロファイル情報の解析結果を利用して、プログラム実行速度を低下させることなく、当該スケジューリングの結果発生したアイドル期間のクロック周波数を下げることで消費電力を低減させることにある。
【０００８】
本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１０】
本発明は、上記課題を解決すべく、プログラム実行を担当するタスクで、中間コードもしくはネイティブコードを入力してプログラムを実行し、プログラムブロック毎の「実行時刻」から成る「プロファイル情報」を抽出する。次に、プログラムのコンパイルを担当するタスクで、中間コードと「プロファイル情報」を入力し、プロファイル情報解析を行ってコンパイル処理の「省電力スケジューリング情報」を出力し、前記「省電力スケジューリング情報」を用いてコンパイル処理を実施する。このコンパイルの結果生成されたネイティブコードをプログラム実行を担当するタスクで活用する。なお、前記プロファイル情報解析処理では、「プロファイル情報」を入力して、各プログラムブロックの「実行時期」を検出し、当該プログラムブロックの「コンパイル時間」を見積り、「実行時期」と「コンパイル時間」から「アイドル時間」を見積り、「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定する。
【００１１】
また、上記課題を解決すべく、コンパイルを実行するタスクで、「省電力スケジューリング情報」が存在しない場合に、「プロファイル情報」から実行回数の増加速度が高いプログラムブロックを検出し、低い「クロック周波数」でコンパイルする。
【発明の効果】
【００１２】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００１３】
本発明によれば、特にマルチコア環境において、「プロファイル情報」を入力して、各プログラムブロックの「実行時期」を検出し、当該プログラムブロックの「コンパイル時間」を見積り、「実行時期」と「コンパイル時間」から「アイドル時間」を見積り、「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定することにより、プログラム実行速度を下げることなく消費電力を低減することができる。
【００１４】
また、「省電力スケジューリング情報」が存在しない場合に、「プロファイル情報」から実行回数の増加速度が高いプログラムブロックを検出し、実際にコンパイル対象と判定される閾値に達する前から低い「クロック周波数」でゆっくりコンパイルすることにより、プログラム実行速度を下げることなく消費電力を低減することができる。
【発明を実施するための最良の形態】
【００１５】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、これにより本発明が限定されるものではない。
【００１６】
本発明の実施の形態では、プログラム実行システムについて述べる。
【００１７】
図１は、本実施の形態のプログラム実行システムの概要を示すブロック図である。本発明は、計算機上で実施され、プロファイル情報を解析してコンパイル結果が必要となるタイミングとコンパイル時間を見積もり、これらを利用して算出したアイドル時間を使って間に合う程度のスピードでコンパイル処理を実施するようクロック周波数を調整し、プログラムの実行速度を落とすことなく、省電力を実現する方法である。
【００１８】
図１において、仮想マシン２は、高級言語で記述されたソースプログラムを変換した中間コード１を入力し実行する。仮想マシン２は、中間コード１の実行を担当するタスクとコンパイルを担当するタスクをマルチコア環境において任意のコア（ＣＰＵ）に割当てるタスク割当部３と、中間コード１の実行を制御するプログラム実行制御部４と、中間コード１のコンパイルを制御するコンパイル制御部６と、「プログラムブロック毎の実行タイミングログ」から成るプロファイル情報２１と、プログラム実行経過時間の区間を示すエリア毎の「クロック周波数」と「エリア時間」と「プログラムブロック数」、およびプログラムブロック毎の「プログラムブロック名称」と「実行回数」と「実行時間」と「コンパイル済フラグ」から成る省電力スケジューリング情報２２と、中間コード１のコンパイル結果であるネイティブコード２３から構成される。
【００１９】
また、プログラム実行制御部４は、プロファイル情報の検出を行うプロファイル情報検出部５を含み、コンパイル制御部６は、中間コードを入力しプロファイル情報解析を行って省電力スケジューリング情報２２を出力するプロファイル情報解析部７と、中間コード１とプロファイル情報２１と省電力スケジューリング情報２２を入力しコンパイル処理を行ってネイティブコード２３を出力するコンパイル部８から構成される。
【００２０】
さらに、プロファイル情報解析部７は、プロファイル情報２１を入力し実行時期の解析を行い省電力スケジューリング情報２２を出力する実行時期決定部７１と、中間コード１と省電力スケジューリング情報２２を入力しコンパイル時間の解析を行い省電力スケジューリング情報２２を出力するコンパイル時間見積部７２と、中間コード１と省電力スケジューリング情報２２を入力しアイドル時間の解析を行い省電力スケジューリング情報２２を出力するアイドル時間見積部７３と、中間コード１と省電力スケジューリング情報２２を入力しクロック周波数の解析を行い省電力スケジューリング情報２２を出力するクロック周波数決定部７４から構成される。
【００２１】
また、コンパイル部８は、中間コード１とプロファイル情報２１と省電力スケジューリング情報２２を入力し予定よりコンパイル処理が遅れている場合にリカバリを行いネイティブコード２３を出力するリカバリ部９と、中間コード１とプロファイル情報２１と省電力スケジューリング情報２２を入力し投機的にコンパイルを行いネイティブコード２３を出力する投機コンパイル部１０から構成される。
【００２２】
図２〜図１５により、本発明の情報処理装置の省電力化方法の第一実施例を説明する。
【００２３】
図２は、図１におけるタスク割当部３の動作フロチャートである。図２を用いて、仮想マシン２の起動後に実施されるタスク割当処理の流れを説明する。
【００２４】
まず、処理ステップ３１で中間コード１を入力する。次に、処理ステップ３２でコア番号を判定し、“１”の場合、処理ステップ３３へ進み中間コード１の実行処理を実施し、プロファイル情報を取得する。処理ステップ３２でコア番号が“１”以外の場合、処理ステップ３４へ進む。次に、処理ステップ３４でコア番号を判定し、“２”の場合で、かつプロファイル情報ありの場合、処理ステップ３５へ進む。処理ステップ３４でコア番号が“２”以外、もしくはプロファイル情報なしの場合、処理ステップ３４へ戻り、判定を繰り返す。処理ステップ３５では、プロファイル情報解析を行い、省電力スケジューリング情報を生成する。
【００２５】
次に、処理ステップ３６でコア番号を判定し、“１”の場合、処理ステップ３８へ進む。処理ステップ３８では、中間コード１を実行し、その後本タスク割当処理を終了する。処理ステップ３６でコア番号が“１”以外の場合、処理ステップ３７へ進む。次に、処理ステップ３７でコア番号を判定し、“２”の場合、処理ステップ３９へ進み、コア番号が“２”以外の場合、本タスク割当処理を終了する。処理ステップ３９では、中間コード１の事前コンパイル処理を実施し、その後本タスク割当処理を終了する。
【００２６】
図３は、図１におけるプロファイル情報解析部７の動作フロチャートである。図３を用いて、プロファイル情報解析処理の流れを説明する。
【００２７】
まず、処理ステップ６０で中間コード１とプロファイル情報２１を入力する。次に、処理ステップ６１でコンパイル結果が必要となるタイミングの解析を実施する。具体的には、まず、中間コード１の実行区間を１０秒毎に分割して本単位をエリアと定義し、エリア毎に実行頻度が高いプログラムブロックを検出する。次に、実行回数閾値、実行回数順位からコンパイル対象プログラムを決定する。次に、当該エリアの開始時点をコンパイル結果が必要になるタイミングと決定する。次に、処理ステップ６２でコンパイル時間の見積もりを実施する。具体的には、エリア毎にコンパイル対象プログラムブロックのコンパイル時間の合計を算出する（中間コード数から見積り）。
【００２８】
次に、処理ステップ６３でアイドル時間の見積もりを実施する。具体的には、まず、コンパイル対象プログラムブロックの中間コードとネイティブコードの実行時間の差分を求め、元の１０秒から差し引くことでエリア時間を算出する。次に、「エリア時間−コンパイル時間」を当該エリアのアイドル時間と決定する。次に、処理ステップ６４でクロック周波数の決定を行う。具体的には、まず、コンパイル時間とアイドル時間の比を算出する。次に、上記比、クロック周波数決定表からクロック周波数を決定する。最後に、処理ステップ６５で、上記解析結果を省電力スケジューリング情報２２として出力し、本プロファイル情報解析処理を終了する。
【００２９】
図４は、図１における実行時期決定部７１の動作フロチャートである。図４を用いて、実行時期決定処理の流れを説明する。
【００３０】
まず、処理ステップ７１０１でプロファイル情報２１としてログテーブルを入力する。図８に例を示す。ログテーブルは、項目“プログラムブロック名称”２１０１、“起動時刻（ｍｓｅｃ）”２１０２から構成される。ログテーブルには、中間コード１の実行開始から終了までの、実行されたプログラムブロック名称と起動時刻の集合が記録されている。なお、プロファイル情報２１は、図１におけるプロファイル情報検出部５で生成される。次に、処理ステップ７１０２で最終ログテーブルからプログラムの実行時間を検出する。
【００３１】
次に、処理ステップ７１０３でプログラム実行時間を１０秒間隔に分割して各々をエリアと定義し、全エリアに対してエリアテーブルを生成する。エリアテーブルは、省電力スケジューリング情報を構成する１テーブルとなる。図１０に例を示す。エリアテーブルは、項目“エリアＩＤ”２２０１、“クロック周波数”２２０２、“エリア時間（ｍｓｅｃ）”２２０３、“所属プログラムブロック数”２２０４、“プログラムブロックテーブルＩＤ”２２０５から構成される。例えば、中間コード１の実行開始から２０１００ｍｓｅｃ経過した時点までのログテーブルとして２１０３から２１２１が登録されていた場合、２２１１、２２１２に示すエリアテーブルが生成される。ただし、初期値は、項目“エリアＩＤ”は“通し番号”、“クロック周波数”は“ＮＵＬＬ”、“エリア時間（ｍｓｅｃ）”は“１０００”、“所属プログラムブロック数”は“ＮＵＬＬ”、“プログラムブロックテーブルＩＤ”は“ＮＵＬＬ”が設定される。
【００３２】
次に、処理ステップ７１０４でエリアテーブルの有無を判定し、２２１１が存在するため、処理ステップ７１０５へ進む。存在しない場合、本実行時期決定処理を終了する。次に、処理ステップ７１０５で当該エリアで実行されるログテーブルの有無を判定し、最初の１０秒で実行されたログテーブル２１０３が存在するため、処理ステップ７１０６へ進む。存在しない場合、処理ステップ７１１１へ進む。次に、処理ステップ７１０６で当該ログテーブル２１０３のプログラムブロック名称“ｍｅｔｈｏｄ４”を検出する。
【００３３】
次に、処理ステップ７１０７で当該プログラムブロック名称と一致するプログラムブロックテーブルの有無を判定する。図１２に例を示す。プログラムブロックテーブルは、項目“プログラムブロックＩＤ”２２２１、“プログラムブロック名称”２２２２、“実行回数”２２２３、“実行時間”２２２４、“コンパイル済フラグ”２２２５、“ＮＥＸＴプログラムブロックテーブルＩＤ”２２２６から構成される。プログラムブロックテーブルは、省電力スケジューリング情報を構成する１テーブルとなる。処理ステップ７１０７では、プログラムブロックテーブルは存在しないので、処理ステップ７１０８へ進む。
【００３４】
処理ステップ７１０８では、プログラムブロックテーブル２２３１を生成し、初期値として、項目“プログラムブロックＩＤ”に“１”、“プログラムブロック名称”に“ｍｅｔｈｏｄ４”、“実行回数”に“０”、“実行時間”に“０”、“コンパイル済フラグ”に“ＦＡＬＳＥ”、“ＮＥＸＴプログラムブロックテーブルＩＤ”に“ＮＵＬＬ”が設定される。次に、当該エリアテーブル２２１１の項目“プログラムブロックＩＤ”２２０５に“１”を設定し、テーブル間の接続を行う。なお、処理ステップ７１０７で当該プログラムブロック名称と一致するプログラムブロックテーブルが存在しない場合、処理ステップ７１０９へ進む。
【００３５】
次に、処理ステップ７１０９で、当該プログラムブロックテーブル２２３１の項目“実行回数”をインクリメントし“１”を設定する。また、項目“実行時間”に当該プログラムブロックの実行時間を加算して“４４４”を設定する。次に、処理ステップ７１１０で他ログテーブルの有無を判定し、ログテーブル２１０４が存在するため、処理ステップ７１０６へ戻り、上記処理を繰り返す。存在しない場合、処理ステップ７１１１へ進む。当該エリアテーブルに所属するログテーブルに関する処理が完了した時点でプログラムブロックテーブル２２３１、２２３２、２２３３、２２３４が生成される。次に、処理ステップ７１１１で、当該エリアテーブルに所属するプログラムブロックテーブルのうち、実行回数が閾値未満のプログラムブロックテーブルを削除する。ここでは、閾値を２未満と仮定すると、図１２のプログラムブロックテーブル２２３４が削除され、図１３の構成（プログラムブロックテーブル２２３５、２２３６、２２３７）となる。
【００３６】
次に、処理ステップ７１１２で、当該エリアテーブルに所属するプログラムブロックテーブルを実行回数の昇順でソートする。その結果、図１４に示すようなプログラムブロックテーブル２２３８、２２３９、２２４０が生成される。次に、処理ステップ７１１３で当該エリアテーブル所属プログラムブロック数を判定し、許容プログラムブロック数以上の場合、処理ステップ７１１４へ進む。許容プログラムブロック数未満の場合、処理ステップ７１１５へ進む。ここでは、許容プログラムブロック数を２と仮定し、処理ステップ７１１４へ進む。
【００３７】
処理ステップ７１１４では、実行回数昇順で許容プログラムブロック数２未満のプログラムブロックテーブル２２４０を削除し、図１５に示すような構成（プログラムブロックテーブル２２４１、２２４２）となる。次に、処理ステップ７１１５で所属プログラムブロック数２を図１０の当該エリアテーブル２２１１の項目“所属プログラムブロック数”へ登録する。また、項目“プログラムブロックテーブルＩＤ”を更新し、“２”を登録する。次に、処理ステップ７１１６で他エリアテーブルの有無を判定し、エリアテーブル２２１２が存在するため、処理ステップ７１０５へ戻り、上記処理を繰り返す。他にエリアテーブルが存在しない場合、本実行時期決定処理を終了する。
【００３８】
図５は、図１におけるコンパイル時間見積部７２、アイドル時間見積部７３、クロック周波数決定部７４の動作フロチャートである。図５を用いて、コンパイル時間見積処理、アイドル時間見積処理、クロック周波数決定処理の流れを説明する。
【００３９】
まず、処理ステップ７２０１で中間コード１を入力する。次に処理ステップ７２０２でエリアテーブル、プログラムブロックテーブルから構成される省電力スケジューリング情報２２を入力する。次に、処理ステップ７２０３でエリアテーブルの有無を判定する。本例ではエリアテーブル２２１１が存在するため、処理ステップ７２０４へ進む。なお、処理ステップ７２０３でエリアテーブルが存在しない場合、本コンパイル時間見積処理、アイドル時間見積処理、クロック周波数決定処理を終了する。次に、処理ステップ７２０４でエリアコンパイル時間に０を設定し、エリア短縮時間に０を設定する。
【００４０】
次に、処理ステップ７２０５で当該エリアテーブルに所属するプログラムブロックテーブルの有無を判定する。本例では、プログラムブロックテーブル２２４１が存在するため、処理ステップ７２０６へ進む。なお、処理ステップ７２０５でプログラムブロックテーブルが存在しない場合、処理ステップ７２０９へ進む。次に、処理ステップ７２０６では、当該プログラムブロックの中間コード数を検出し、当該プログラムブロックコンパイル時間を算出する（中間コード数×１ｍｓｅｃ）。次に、エリアコンパイル時間に、当該プログラムブロックコンパイル時間を加算する。
【００４１】
次に、処理ステップ７２０７で、当該エリアテーブルから当該プログラムブロックの実行時間を検出し、当該プログラムブロック短縮時間を算出する（当該プログラムブロック実行時間÷１０×９）。次に、エリア短縮時間に当該プログラムブロック短縮時間を加算する。本例では最終的に、プログラムブロックテーブル２２４１の実行時間“４８６７”＋プログラムブロックテーブル２２４２の実行時間“２８４７”÷１０×９＝６９４２がエリア短縮時間として設定される。次に、処理ステップ７２０８で他プログラムブロックテーブルの有無を判定する。本例の場合、プログラムブロックテーブル２２４２が存在するため、処理ステップ７２０６へ戻り、上記処理を繰り返す。処理ステップ７２０８で他プログラムブロックテーブルが存在しない場合、処理ステップ７２０９へ進む。
【００４２】
次に、処理ステップ７２０９でエリア時間を算出する（１０ｓｅｃ−エリア短縮時間）。本例では、１００００−６９４２＝３０５８が設定される。次に、アイドル時間を算出する（エリア時間−エリアコンパイル時間）。例えば、エリアコンパイル時間が５５８であったと仮定すると、アイドル時間は、３０５８−５５８＝２５００となる。次に、処理ステップ７２１０でクロック周波数決定ポイントを算出する（エリアコンパイル時間÷アイドル時間）。本例では、クロック周波数決定ポイントは２０００÷２５００＝０．８となる。
【００４３】
次に、処理ステップ７２１１でクロック周波数決定ポイント、クロック周波数決定表から当該エリアのクロック周波数を決定する。本例では、クロック周波数ポイントが０．８であるため、クロック周波数は８０となる。図９にクロック周波数決定表の例を示す。項目“クロック周波数決定ポイント範囲”２１１、“クロック周波数（ＭＨｚ）”２１２から構成され、本例では２１３、２１４、２１５、２１６に示すような４つのクロック周波数が選択可能となる。次に、処理ステップ７２１２で図１１に示すように当該エリアテーブル２２１３へ、クロック周波数、エリア時間を登録する。
【００４４】
次に、処理ステップ７２１３で他エリアテーブルの有無を判定し、本例では他エリアテーブル２２１２が存在するため、処理ステップ７２０４へ戻り、上記処理を繰り返す。処理ステップ７２１３で、他エリアテーブルが存在しない場合、本コンパイル時間見積処理、アイドル時間見積処理、クロック周波数決定処理を終了する。
【００４５】
図６は、図１におけるコンパイル部８、リカバリ部９の動作フロチャートである。図６を用いて、コンパイル処理、リカバリ処理の流れを説明する。
【００４６】
まず、処理ステップ８０１で中間コード１を入力する。次に、処理ステップ８０２で省電力スケジューリング情報２２を入力する。次に、処理ステップ８０３で次エリアのエリアテーブルの有無を判定する。本例では、次エリアのエリアテーブル２２１４が存在するため、処理ステップ８０４へ進む。次に、処理ステップ８０４でリカバリフラグに“ＦＡＬＳＥ”を設定する。次に、処理ステップ８０５で当該エリアテーブル２２１３のクロック周波数、エリア時間を検出する。次に、処理ステップ８０６で当該エリアに所属するプログラムブロックテーブルの有無を判定し、存在する場合、処理ステップ８０７へ進む。なお、処理ステップ８０６でプログラムブロックテーブルが存在しない場合、処理ステップ８１６へ進む。
【００４７】
次に、処理ステップ８０７では、当該エリアの処理がエリア時間の半分以上経過、かつリカバリフラグがＦＡＬＳＥであるいか否かを判定し、条件を満たしている場合、処理ステップ８０８へ進む。条件を満たさない場合、処理ステップ８１３へ進む。次に、処理ステップ８０８では、リカバリフラグにＴＲＵＥを設定する。次に、処理ステップ８０９で当該エリアテーブルのプログラムブロック数を検出する。次に、処理ステップ８１０で当該エリアテーブルに所属するプログラムブロックテーブルのうち、コンパイル済フラグがＴＲＵＥのテーブル数をカウントする。次に、処理ステップ８１１でコンパイル済プログラムブロック数がプログラムブロック数の半分以下であるか否かを判定し、半分以下の場合、処理ステップ８１２へ進む。半分以上の場合、処理ステップ８１３へ進む。
【００４８】
次に、処理ステップ８１２で当該クロック周波数に最大値（１００）を設定する。次に、処理ステップ８１３で当該プログラムブロックの中間コードを検出し、当該クロック周波数でコンパイルする。次に、処理ステップ８１４で当該プログラムブロックテーブルのコンパイル済フラグにＴＲＵＥに設定する。次に、処理ステップ８１５で他プログラムブロックテーブルの有無を判定し、存在する場合、処理ステップ８０７へ戻り、上記処理を繰り返す。存在しない場合、処理ステップ８１６へ進む。処理ステップ８１６では、次エリアテーブルの有無を判定し、存在する場合、処理ステップ８０４へ戻り、上記処理を繰り返す。存在しない場合、本コンパイル処理、リカバリ処理を終了する。
【００４９】
以上で、本発明の情報処理装置の省電力化方法の第一実施例の説明を終了する。
【００５０】
この第一実施例によれば、特にマルチコア環境において、各プログラムブロックの「実行時期」を検出し、当該プログラムブロックの「コンパイル時間」を見積り、「実行時期」と「コンパイル時間」から「アイドル時間」を見積り、「アイドル時間」を利用して「実行時期」に間に合う程度の「クロック周波数」を決定することにより、プログラム実行速度を下げることなく消費電力を低減することができる。
【００５１】
次に、第二実施例について説明する。第一実施例中の図６で説明したコンパイル処理、リカバリ処理において、処理ステップ８０３で次エリアのエリアテーブルが存在しない場合、投機コンパイル処理を行う点が異なる。詳細を図７を用いて説明する。
【００５２】
図７は、図１における投機コンパイル部１０の動作フロチャートである。図７を用いて投機コンパイル処理の流れを説明する。
【００５３】
図６の処理ステップ８０３で次エリアのエリアテーブルが存在しない場合、図７に示す処理ステップ１０１へ進む。処理ステップ１０１では、プロファイル情報（ログテーブル）２１を入力する。次に、処理ステップ１０２で、実行回数の増加ペースが著しく速いプログラムブロックが存在するか否かを判定し、存在する場合、処理ステップ１０３へ進む。存在しない場合、本投機コンパイル処理を終了する。次に、処理ステップ１０３で、当該プログラムブロックをクロック周波数８０（通常１００）でコンパイルする。
【００５４】
この第二実施例によれば、「省電力スケジューリング情報」が存在しない場合に、「プロファイル情報」から実行回数の増加速度が高いプログラムブロックを検出し、実際にコンパイル対象と判定される閾値に達する前から低い「クロック周波数」でゆっくりコンパイルすることにより、プログラム実行速度を下げることなく消費電力を低減することができる。
【００５５】
最後に、本実施の形態のプログラム実行システムを実現するハードウェア構成を説明する。図１６は、図１におけるプログラム実行システムを実現するプログラム実行処理装置の概要を示すブロック図である。
【００５６】
図１６において、プログラム実行処理装置は、プログラム実行用のＣＰＵ１（１００１）、プログラムブロックの事前コンパイルを行うＣＰＵ２（１００２）、主記憶装置１００３、二次記憶装置１００４、これらを結合する結合装置１００５から構成される。二次記憶装置１００４には中間コード１が格納され、また主記憶装置１００３で仮想マシン２が構築される。このようなマルチコア環境において、プロファイル情報の解析結果を利用して、アイドル期間を検出してクロック周波数を調整することにより、プログラム実行速度を低下させることなく、当該スケジューリングの結果発生したアイドル期間のクロック周波数を下げることで、消費電力を低減させることができる。
【００５７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【００５８】
本発明は、情報処理装置の省電力化技術に関し、特にマルチコアＣＰＵを備えた情報処理装置の省電力方法、プログラム、およびプログラム実行システムに利用可能である。
【図面の簡単な説明】
【００５９】
【図１】本発明の実施の形態のプログラム実行システムの概要を示すブロック図である。
【図２】本発明の実施の形態において、タスク割当処理の流れを示すフローチャートである。
【図３】本発明の実施の形態において、プロファイル情報解析処理の流れを示すフローチャートである。
【図４】本発明の実施の形態において、実行時期決定処理の流れを示すフローチャートである。
【図５】本発明の実施の形態において、コンパイル時間見積処理、アイドル時間見積処理、クロック周波数決定処理の流れを示すフローチャートである。
【図６】本発明の実施の形態において、コンパイル処理、リカバリ処理の流れを示すフローチャートである。
【図７】本発明の実施の形態において、投機コンパイル処理の流れを示すフローチャートである。
【図８】本発明の実施の形態において、ログテーブルを示す図である。
【図９】本発明の実施の形態において、クロック周波数決定表を示す図である。
【図１０】本発明の実施の形態において、エリアテーブルを示す図である。
【図１１】本発明の実施の形態において、エリアテーブルを示す図である。
【図１２】本発明の実施の形態において、プログラムブロックテーブルを示す図である。
【図１３】本発明の実施の形態において、プログラムブロックテーブルを示す図である。
【図１４】本発明の実施の形態において、プログラムブロックテーブルを示す図である。
【図１５】本発明の実施の形態において、プログラムブロックテーブルを示す図である。
【図１６】本発明の実施の形態のプログラム実行システムを実現するプログラム実行処理装置の概要を示すブロック図である。
【符号の説明】
【００６０】
１…中間コード、２…仮想マシン、３…タスク割当部、４…プログラム実行制御部、５…プロファイル情報検出部、６…コンパイル制御部、７…プロファイル情報解析部、８…コンパイル部、９…リカバリ部、１０…投機コンパイル部、２１…プロファイル情報、２２…省電力スケジューリング情報、２３…ネイティブコード、７１…実行時期決定部、７２…コンパイル時間見積部、７３…アイドル時間見積部、７４…クロック周波数決定部、１００１…ＣＰＵ１、１００２…ＣＰＵ２、１００３…主記憶装置、１００４…二次記憶装置、１００５…結合装置。
【図１】
2007334497.tif 000003
【図２】
2007334497.tif 000004
【図３】
2007334497.tif 000005
【図４】
2007334497.tif 000006
【図５】
2007334497.tif 000007
【図６】
2007334497.tif 000008
【図７】
2007334497.tif 000009
【図８】
2007334497.tif 000010
【図９】
2007334497.tif 000011
【図１０】
2007334497.tif 000012
【図１１】
2007334497.tif 000013
【図１２】
2007334497.tif 000014
【図１３】
2007334497.tif 000015
【図１４】
2007334497.tif 000016
【図１５】
2007334497.tif 000017
【図１６】
2007334497.tif 000018