(57)【要約】  グラフ（１００）では、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合の消費電力を示している。グラフ（１０１）では、バイトコードで実行する場合の消費電力を示している。グラフ（１００）とグラフ（１０１）との共通部分を除くと、グラフ（１００）で示す消費電力はＰｃ×Ｔｃ＋Ｐｎ×Ｔｎである。グラフ（１０１）で示す消費電力はＰ×Ｔｎである。Ｐｃ×Ｔｃ＋Ｐｎ×ＴｎがＰ×Ｔｎ未満であれば、プログラム実行装置が、対象アプリケーションのバイトコードをネイティブコードに変換すると決定する。Ｐｃ×Ｔｃ＋Ｐｎ×ＴｎがＰ×Ｔｎ未満でなければ、プログラム実行装置が、対象アプリケーションのバイトコードをネイティブコードに変換しないと決定する。
2012105000.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
第１のコードによって記述される第１プログラムの実行時の第１の消費電力を算出し、
前記第１プログラムと同じ機能を有するとともに第２のコードによって記述される第２プログラムの実行時の第２の消費電力を算出し、
前記第２の消費電力が前記第１の消費電力よりも小さいとき、前記第１プログラムを前記第２プログラムに変換して前記第２プログラムを実行すること
を特徴とするプログラム実行方法。
【請求項２】
前記第２の消費電力が前記第１の消費電力よりも大きいとき、前記第１プログラムを実行すること
を特徴とする請求項１に記載のプログラム実行方法。
【請求項３】
前記第２の消費電力は、
前記第１プログラムの実行時間、前記第１プログラムを前記第２プログラムに変換するときの変換時間、および前記コンピュータに含まれるＣＰＵの特性に基づいて算出されること
を特徴とする請求項１または請求項２に記載のプログラム実行方法。
【請求項４】
前記変換時間は、前記第１プログラムの第１のコード量に基づいて算出されること
を特徴とする請求項３に記載のプログラム実行方法。
【請求項５】
さらに、前記変換時間は、
前記コンピュータに含まれるＣＰＵの特性に基づいて算出されること
を特徴とする請求項４に記載のプログラム実行方法。
【請求項６】
前記第１プログラムを前記第２プログラムに変換するときに設定される第２クロックの周波数を、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも高く設定すること
を特徴とする請求項１乃至請求項５の何れか一に記載のプログラム実行方法。
【請求項７】
前記第２プログラムを実行するときに設定される第３クロックの周波数は、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも低く設定されること
を特徴とする請求項１乃至請求項６の何れか一に記載のプログラム実行方法。
【請求項８】
コンパイルスケジューラを起動し、
前記コンパイルスケジューラが前記第１プログラムを前記第２プログラムに変換するか否かを判定すること
を特徴とする請求項１乃至請求項６の何れか一に記載のプログラム実行方法。
【請求項９】
前記第１プログラムを前記第２プログラムに変換する間に前記第１プログラムを実行し、
前記変換終了後に前記第２プログラムを実行すること
を特徴とする請求項１乃至請求項７の何れか一に記載のプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象アプリケーションのプログラムを実行するプログラム実行方法に関する。
【背景技術】
【０００２】
従来、グリッドコンピュータなどを用いて分散処理を行う場合、個々のマシンの構成が異なるため、各マシンにはアプリケーションのＪａｖａ（登録商標）バイトコード（以下、「バイトコード」と称する。）を配布する。そして、各マシンではＪａｖａ仮想マシン（以下、「ＪａｖａＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）」と称する。）を用いてバイトコードで実行する。【０００３】
バイトコードはＪａｖａのコンパイラが生成する実行用コードである。バイトコードは中間コードの一種で、特定の実行環境に依存しない。バイトコードはＪａｖａＶＭ内のインタプリタによってネイティブコードに変換されてから実行される（たとえば、下記特許文献１を参照。）。たとえば、ＪａｖａＶＭとしては、ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ（たとえば、下記特許文献２，３を参照。）が挙げられる。ネイティブコードとは、端末固有の機械語で記述されたプログラムである。【０００４】
また、従来、携帯端末においては、アプリケーションはバイトコードでダウンロードされ、ＪａｖａＶＭを用いて該バイトコードでアプリケーションが実行されている。【０００５】
また、設計者がＪａｖａで記述したソースコードと中間語にコンパイルされたバイトコードとの実行比率を電力要求に応じて決定することで、消費電力を削減する技術が知られている（たとえば、下記特許文献４を参照。）。【０００６】
また、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は複数のアプリケーションが割り当てられた場合、各アプリケーションの実行時間に基づいて実行の優先度を決定する。そして、ＣＰＵは、アプリケーションの実行時に空き時間が生じる場合、優先度の順に応じて該空き時間に他のアプリケーションを実行する技術が知られている（たとえば、下記特許文献５を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−３５５２７７号公報
【特許文献２】特開２００１−１９５２６４号公報
【特許文献３】特許第３８０８７５５号公報
【特許文献４】特開２００６−１２６９４７号公報
【特許文献５】特開２００９−１５１３７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、携帯端末のように端末によって性能が異なる場合、従来技術を用いれば消費電力を削減することはできても、電力要求がいずれの端末であっても同条件であれば、個々の端末の性能を引き出せない場合があるという問題点があった。【０００９】
本発明は、上述した従来技術による問題点を解消するため、消費電力を抑制しつつ、各端末の性能に沿ったコードでアプリケーションを実行するプログラム実行方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明の一観点によれば、第１のコードによって記述される第１プログラムの実行時の第１の消費電力を算出し、前記第１プログラムと同じ機能を有するとともに第２のコードによって記述される第２プログラムの実行時の第２の消費電力を算出し、前記第２の消費電力が前記第１の消費電力よりも小さいとき、前記第１プログラムを前記第２プログラムに変換して前記第２プログラムを実行するプログラム実行方法が提案される。
【発明の効果】
【００１１】
本発明の一観点によれば消費電力を抑制しつつ、各端末の性能に沿ったコードでアプリケーションを実行するという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の一例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェアを示す説明図である。
【図３】図３は、マルチコアプロセッサシステム２００の機能ブロック図である。
【図４】図４は、割り当て管理テーブルの一例を示す説明図である。
【図５】図５は、実施例１で用いる消費電力テーブルの一例を示す説明図である。
【図６】図６は、変換管理テーブルの一例を示す説明図である。
【図７】図７は、アプリ＃Ａのダウンロードを示す説明図である。
【図８】図８は、変換管理テーブル６００の登録例を示す説明図である。
【図９】図９は、変換例を示す説明図である。
【図１０】図１０は、コンパイラ９００とアプリ＃Ａの割り当てによる割り当て管理テーブル４００の更新例を示す説明図である。
【図１１】図１１は、コンパイル終了例を示す説明図である。
【図１２】図１２は、変換終了後の変換管理テーブル６００の更新例を示す説明図である。
【図１３】図１３は、変換終了後の割り当て管理テーブル４００の更新例を示す説明図である。
【図１４】図１４は、ダウロード時の各ＯＳによる変換制御処理手順の一例を示すフローチャートである。
【図１５】図１５は、実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。
【図１６】図１６は、各ＯＳによるプログラム実行処理手順を示すフローチャートである。
【図１７】図１７は、実施例２にかかる判断例を示す説明図である。
【図１８】図１８は、実施例２で用いる消費電力テーブルの一例を示す説明図である。
【図１９】図１９は、実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるプログラム実行方法の実施の形態を詳細に説明する。本実施の形態では、第１のコードによって記述される第１のプログラムを対象アプリケーションのバイトコードと称する。第１のプログラムと同じ機能を有するとともに第２のコードによって記述される第２のプログラムを対象アプリケーションのネイティブコードと称する。
【００１４】
図１は、本発明の一例を示す説明図である。ここでは、プログラム実行装置が、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合と、バイトコードで実行する場合と、のいずれの場合で消費電力が低くなるかを判断する。プログラム実行装置が、判断結果に基づいてバイトコードからネイティブコードに変換するか否かを決定する。グラフ１００では、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合の消費電力を示している。グラフ１０１では、バイトコードで実行する場合の消費電力を示している。
【００１５】
プログラム実行装置が、対象アプリケーションをダウンロードする。該対象アプリケーションに関する情報は、バイトコードと、バイトコードでの実行時間（Ｔ）と、バイトコードのコード量（Ｃｏｄｅ）である。対象アプリケーションのバイトコードでの実行時間（Ｔ）は、バイトコードでの実行時に要求される実行性能である。図１では、バイトコードでの実行性能と同一性能でネイティブコードでの実行を行った場合に、消費電力の値が小さくなるか否かを判断している。プログラム実行装置が、コード量を用いて、対象アプリケーションのバイトコードから対象アプリケーションのネイティブコードへの変換にかかる変換時間（Ｔｃ）を算出する。Ｔｃは下記式（１）に基づいて算出される。
【００１６】
Ｔｃ≒ｋ×Ｃｏｄｅ＋Ｃ  ・・・（１）
【００１７】
ここで、ｋはＣＰＵの性能とコンパイラの性能によって決まる比例係数である。ＣはＣＰＵの性能とコンパイラの性能によって決まる定数である。つぎに、プログラム実行装置が、ネイティブコードからバイトコードへの変換後に、対象アプリケーションをバイトコードで実行する実行時間（Ｔｎ）を下記式（２）に基づいて算出する。
【００１８】
Ｔｎ＝Ｔ−Ｔｃ  ・・・（２）
【００１９】
つぎに、プログラム実行装置が、下記式（３）が成り立つ場合、対象アプリケーションのバイトコードをネイティブコードに変換すると決定する。下記式（３）が成り立たない場合、対象アプリケーションのバイトコードをネイティブコードに変換しないと決定する。
【００２０】
Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎ  ・・・（３）
【００２１】
ここで、Ｐｃはバイトコードからネイティブコードへの変換時の単位時間当たりの消費電力の値であり、Ｐｎがネイティブコードでの実行時の単位時間当たりの消費電力の値であり、Ｐがバイトコードでの実行時の単位時間当たりの消費電力の値である。Ｐｎ＜Ｐ＜Ｐｃである。バイトコードでの実行にはＪａｖａＶＭを実行させなければならないため、バイトコードでの実行はネイティブコードでの実行よりも単位時間当たりの消費電力の値が大きくなる。
【００２２】
また、Ｐｎ、Ｐ、Ｐｃは、各端末が有するＣＰＵの性能に沿ってあらかじめ決定されている。ここでのＣＰＵの性能とは、具体的には、たとえば、計算能力や各実行時に供給されるクロックの周波数などである。グラフ１００とグラフ１０１において、Ｐ×Ｔｃ（斜線部）は共通であるため、式（３）にはＰ×Ｔｃが含まれていない。
【００２３】
また、本実施の形態では、対象アプリケーションの実行時間に基づいて消費電力を算出している。占いアプリケーションなどの実行時間が予測可能なゲームやバナー上の広告などは実行時間が一定であるため、プログラム実行装置が、上述のようにバイトコードと併せて実行時間をダウンロードすることができる。アプリケーションの実行時間がアプリケーションの開発者によってＨｔｍｌ（Ｈｙｐｅｒ  ｔｅｘｔ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）に埋め込まれていてもよい。また、プログラム実行装置が、対象アプリケーションの実行時間の統計データから対象アプリケーションの実行時間を予測してもよい。
【００２４】
本プログラム実行装置は、シングルコアシステムであってもマルチコアプロセッサシステムであってもよいが、本実施の形態ではマルチコアプロセッサシステムを例に挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２５】
（マルチコアプロセッサシステムのハードウェア）
図２は、マルチコアプロセッサシステムのハードウェアを示す説明図である。図２において、マルチコアプロセッサシステム２００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ディスプレイ２０１と、キーボード２０２と、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）２０３と、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０６と、を有している。さらに、マルチコアプロセッサシステム２００は、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）コントローラ２０４と、フラッシュＲＯＭ２０５と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８と、クロック供給回路２０９と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、ディスプレイ２０１と、キーボード２０２と、Ｉ／Ｆ２０３と、フラッシュＲＯＭコントローラ２０４と、ＲＡＭ２０６と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８とは、バス２１２を介して接続されている。
【００２６】
ここで、ＣＰＵ＃０とＣＰＵ＃１は、それぞれレジスタとコアを有している。コアは、演算機能を有している。各ＣＰＵ内のレジスタは、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）やリセットレジスタを有している。
【００２７】
ＣＰＵ＃０はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体の制御を司り、ＯＳ２４０を実行する。ＯＳ２４０はマスタＯＳであり、ＣＰＵ＃０に割り当てられたアプリケーションを実行する。ＯＳ２４０はスケジューラを有し、スケジューラは起動指示を受け付けたアプリケーションをマルチコアプロセッサのうちのいずれのＣＰＵに割り当てるかを制御する機能を有している。スケジューラはＣＰＵ＃０に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２８】
ＣＰＵ＃１は、スレーブＣＰＵであり、ＯＳ２４１を実行する。ＯＳ２４１は、スレーブＯＳであり、ＣＰＵ＃１に割り当てられたアプリケーションを実行する。ＯＳ２４１は、スケジューラを有し、スケジューラはＣＰＵ＃１に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２９】
１次キャッシュ２３０と１次キャッシュ２３１とは、それぞれキャッシュメモリとキャッシュコントローラとを有している。１次キャッシュ２３０はＯＳ２４０が実行するアプリケーションのスレッドからＲＡＭ２０６への書込処理を一時的に記憶する。１次キャッシュ２３０は、ＲＡＭ２０６から読み出されたデータを一時的に記憶する。１次キャッシュ２３１はＯＳ２４１が実行するアプリケーションのスレッドからＲＡＭ２０６への書込処理を一時的に記憶する。１次キャッシュ２３１は、ＲＡＭ２０６から読み出されたデータを一時的に記憶する。
【００３０】
１次キャッシュ２３０と１次キャッシュ２３１とが共有するデータがいずれか一方のキャッシュで更新された場合、スヌープコントローラ２１０は、該更新を検出し、他の１次キャッシュ内の該データも更新する機能を有している。
【００３１】
２次キャッシュ２１１は、キャッシュメモリとキャッシュコントローラとを有している。２次キャッシュ２１１では、１次キャッシュ２３０や１次キャッシュ２３１から追い出されたデータを記憶する。２次キャッシュ２１１では、ＯＳ２４０とＯＳ２４１とが共有するデータを記憶する。２次キャッシュ２１１は、１次キャッシュ２３０や１次キャッシュ２３１よりも、記憶容量が大きくかつ各ＣＰＵからのアクセス速度が遅い。２次キャッシュ２１１はＲＡＭ２０６よりも、記憶容量が小さくかつ各ＣＰＵからのアクセス速度が速い。
【００３２】
ディスプレイ２０１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０１は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。キーボード２０２は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０２は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３３】
Ｉ／Ｆ２０３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０３は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０３には、たとえばモデムやＬＡＮアダプタなどを採用することができる。本実施の形態では、Ｉ／Ｆ２０３を介してフラッシュＲＯＭ２０８へアプリケーションをダウンロードしている。
【００３４】
フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、ＲＡＭ２０６と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８とは、ＣＰＵ＃０とＣＰＵ＃１に共有されるメモリである。図示していないが、メモリコントローラが、各ＣＰＵから各メモリへのアクセス要求を調停する。
【００３５】
ＲＯＭ２０７は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０６は、各ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭ２０８は、ＯＳ２４０やＯＳ２４１などのシステムソフトウェアやアプリケーションのバイトコードやアプリケーションのネイティブコードを記憶している。
【００３６】
フラッシュＲＯＭコントローラ２０４は、各ＣＰＵの制御に従ってフラッシュＲＯＭに対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム２００を使用するユーザがＩ／Ｆ２０３を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３７】
クロック供給回路２０９は、ＣＰＵなど各部へクロックを供給する。ここでは、クロック供給回路２０９がＣＰＵへ供給可能なクロックの周波数は１００［ＭＨｚ］と２００［ＭＨｚ］と３００［ＭＨｚ］とする。クロック供給回路２０９は、レジスタ２２０とレジスタ２２１を有する。レジスタ２２０はＣＰＵ＃０へ与えるクロックの周波数を設定可能であり、レジスタ２２１はＣＰＵ＃１へ与えるクロックの周波数を設定可能である。
【００３８】
レジスタ２２０の値が１であれば、ＣＰＵ＃０へ与えるクロックの周波数が１００［ＭＨｚ］となり、レジスタ２２０の値が２であれば、ＣＰＵ＃０へ与えるクロックの周波数が２００［ＭＨｚ］となる。レジスタ２２０の値が３であれば、ＣＰＵ＃０へ与えるクロックの周波数が３００［ＭＨｚ］となる。レジスタ２２１の値が１であれば、ＣＰＵ＃１へ与えるクロックの周波数が１００［ＭＨｚ］となり、レジスタ２２１の値が２であれば、ＣＰＵ＃１へ与えるクロックの周波数が２００［ＭＨｚ］となる。レジスタ２２１の値が３であれば、ＣＰＵ＃１へ与えるクロックの周波数が３００［ＭＨｚ］となる。
【００３９】
（マルチコアプロセッサシステム２００の機能ブロック図）
図３は、マルチコアプロセッサシステム２００の機能ブロック図である。マルチコアプロセッサシステム２００は、取得部３０１と、変換時間算出部３０２と、第１の算出部３０３と、第２の算出部３０４と、判断部３０５と、変換部３０６と、実行部３０７と、制御部３０８と、を有している。具体的には、たとえば、フラッシュＲＯＭ２０８などの記憶装置に取得部３０１〜制御部３０８に関する処理がコーディングされたプログラムが記憶されている。マルチコアプロセッサのうちのＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、取得部３０１〜制御部３０８に関する処理が実行される。本実施の形態では、該プログラムはＯＳ２４０とＯＳ２４１と後述するコンパイルスケジューラである。
【００４０】
取得部３０１は、対象アプリケーションの機械語でないバイトコードから機械語であるネイティブコードへの変換にかかる変換時間（Ｔｃ）と、バイトコードでの実行時間（Ｔ）を取得する。変換時間（Ｔｃ）については、取得してもよいし算出してもよい。変換時間（Ｔｃ）を算出する場合には、取得部３０１は、バイトコードのコード量を取得する。変換時間算出部３０２は、変換時間（Ｔｃ）をバイトコードのコード量とＣＰＵの性能とに応じて算出する。具体的には、たとえば、変換時間算出部３０２は、上記式（２）に基づいて算出する。
【００４１】
第１の算出部３０３は、バイトコードでの実行時の第１の消費電力を算出する。具体的には、たとえば、第１の算出部３０３は、取得部３０１により取得された実行時間（Ｔ）と変換時間算出部３０２により算出された変換時間（Ｔｃ）との差分値（Ｔｎ）を算出する。第１の算出部３０３は、差分値（Ｔｎ）と、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）とにより、バイトコードでの実行時の消費電力の値（Ｐ×Ｔｎ）を算出する。ここでは、バイトコードでの実行時の消費電力の値（Ｐ×Ｔｎ）が第１の消費電力である。
【００４２】
第２の算出部３０４は、ネイティブコードでの実行時の第２の消費電力を算出する。具体的には、たとえば、第２の算出部３０４は、変換時間算出部３０２により算出された変換時間（Ｔｃ）と変換時の単位時間当たりの消費電力の値（Ｐｃ）とにより変換時間（Ｔｃ）での消費電力の値（Ｐｃ×Ｔｃ）を算出する。
【００４３】
そして、第２の算出部３０４は、差分値（Ｔｎ）と、ネイティブコードでの実行時の単位時間当たりの消費電力の値（Ｐｎ）とにより、ネイティブコードでの実行時の消費電力の値（Ｐｎ×Ｔｎ）を算出する。第２の算出部３０４は、第１の算出部３０３により算出された変換時間での消費電力の値と第２の算出部３０４により算出されたネイティブコードでの実行時の消費電力の値との加算値を算出する。ここでは、加算値が、第２の消費電力である。
【００４４】
また、第２の算出部３０４では、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）に対する変換時の単位時間当たりの消費電力の値（Ｐｃ）の比率（Ｙ）に基づいて第２の消費電力を算出してもよい。さらに、第２の算出部３０４では、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）に対する変換時の単位時間当たりの消費電力の値（Ｐｎ）の比率（Ｘ）に基づいて第２の消費電力を算出してもよい。
【００４５】
判断部３０５は、第２の算出部３０４により算出された加算値が、第１の算出部３０３により算出されたバイトコードでの実行時の消費電力の値未満となるか否かを判断する。
【００４６】
変換部３０６は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満であると判断された場合、バイトコードをネイティブコードへ変換する。変換部３０６は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満でないと判断された場合、バイトコードをネイティブコードへ変換しない。
【００４７】
実行部３０７は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満であると判断された場合、変換部３０６によるバイトコードからネイティブコードへの変換が終了するまで、バイトコードで実行する。そして、実行部３０７は、変換部３０６によりバイトコードからネイティブコードへの変換が終了すると、ネイティブコードで実行する。実行部３０７は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満でないと判断された場合、バイトコードで実行する。
【００４８】
制御部３０８は、変換部３０６によりバイトコードをネイティブコードに変換するときに設定される動作クロックの周波数を、バイトコードでの実行時に設定される動作クロックの周波数よりも高く設定する。制御部３０８は、ネイティブコードで実行するときに設定されるクロックの周波数をバイトコードで実行するときに設定されるクロックの周波数よりも低く設定する。
【００４９】
以上を踏まえて、実施例１，２を用いて詳細に説明する。実施例１では、ＰとＰｃとＰｎとを基づいてバイトコードからネイティブコードへ変換するか否かを決定する例を示す。実施例２では、ＸとＹとに基づいてバイトコードからネイティブコードへ変換するか否かを決定する例を示す。
【００５０】
（実施例１）
図４は、割り当て管理テーブルの一例を示す説明図である。割り当て管理テーブル４００には、各ＣＰＵにいずれのアプリが割り当てられているかが登録される。割り当て管理テーブル４００は、ＣＰＵの識別情報の項目４０１と、アプリの識別情報の項目４０２と、を有している。ＣＰＵの識別情報の項目４０１には、ＣＰＵの識別情報が登録される。ここでは、ＣＰＵ＃０とＣＰＵ＃１を示す識別情報が登録されている。
【００５１】
アプリの識別情報の項目４０２には、ＣＰＵの識別情報の項目４０１に識別情報が登録された各ＣＰＵに割り当てられたアプリケーションの識別情報が登録される。割り当て管理テーブル４００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５２】
図５は、実施例１で用いる消費電力テーブル一例を示す説明図である。消費電力テーブル５００は、実行の項目５０１と、クロック周波数の項目５０２と、単位時間当たりの消費電力の項目５０３と、を有している。実行の項目５０１には、ネイティブコードでの実行と、バイトコードでの実行と、コンパイラの実行と、のいずれかが登録されている。クロック周波数の項目５０２には、実行の項目５０１に登録された実行に沿ったＣＰＵへ供給するクロックの周波数が登録されている。単位時間当たりの消費電力の項目５０３には、実行の項目５０１に登録された実行時における単位時間当たりの消費電力が登録されている。
【００５３】
消費電力テーブル５００では、Ｐｃが１００［ｍＷ］であり、Ｐｎが２５［ｍＷ］であり、Ｐが５０［ｍＷ］である（Ｐｎ＜Ｐ＜Ｐｃ）。消費電力テーブル５００では、コンパイラを実行時にＣＰＵへ与えるクロックの周波数（Ｃｃ）が３００［ＭＨｚ］であり、ネイティブコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｎ）は１００［ＭＨｚ］である。消費電力テーブル５００では、バイトコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｂ）は２００［ＭＨｚ］である。
【００５４】
ＣｎとＣｂとＣｃとの関係は、Ｃｎ＜Ｃｂ＜Ｃｃである。バイトコードではＪａｖａＶＭがネイティブコードに変換しながら実行するため、バイトコードでの実行はネイティブコードでの実行と比較して処理量が多い。そのため、ネイティブコードでの実行時にバイトコードでの実行時よりもクロックの周波数が低くなっても、バイトコードでの実行時に要求された動作を満たすことができる。消費電力テーブル５００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５５】
図６は、変換管理テーブルの一例を示す説明図である。変換管理テーブル６００では、バイトコードからネイティブコードに変換すると決定されたアプリケーションの変換状態が管理される。変換管理テーブル６００は、アプリの識別情報の項目６０１と変換状態の項目６０２を有している。アプリの識別情報の項目６０１には、バイトコードからネイティブコードに変換すると決定されたアプリケーションの識別情報が登録される。
【００５６】
変換状態の項目６０２は、アプリの識別情報の項目６０１に識別情報が登録されたアプリケーションのバイトコードがネイティブコードへ変換されたか否かが登録される。変換が終了したアプリケーションに関する変換状態の項目６０２には、「完了」が登録され、変換が終了していないアプリケーションに関する変換状態の項目６０２には、「未完了」が登録される。変換管理テーブル６００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５７】
図７は、アプリ＃Ａのダウンロードを示す説明図である。ＯＳ２４０が、アプリ＃ＡをＩ／Ｆ２０３を介してダウンロードする。ここでは、アプリ＃Ａのバイトコードと、アプリ＃Ａのバイトコードでの実行時間（Ｔ）と、アプリ＃Ａのバイトコードのコード量（Ｃｏｄｅ）とが、ダウンロードされる。そして、ＯＳ２４０が、コンパイルスケジューラ７００を起動する。コンパイルスケジューラ７００は、アプリケーションのバイトコードからＣＰＵ＃０やＣＰＵ＃１が解釈可能な機械語で示されたネイティブコードへ変換する機能を有する。コンパイルスケジューラ７００が、ダウンロードされたアプリ＃Ａの実行時間（Ｔ）とアプリ＃Ａのコード量（Ｃｏｄｅ）を取得する。たとえば、ＴとＣｏｄｅとｋとＣとが下記であるとする。
【００５８】
・Ｔ＝５００［ｍｓ］
・Ｃｏｄｅ＝１６０バイト
・ｋ＝０．５
・Ｃ＝１０
【００５９】
コンパイルスケジューラ７００が、上記式（１）に基づいてアプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコードへの変換時間（Ｔｃ）を算出し、上記式（２）に基づいて変換後のネイティブコードでの実行時間（Ｔｎ）を算出する。
【００６０】
・Ｔｃ＝０．５×１６０＋１０＝９０［ｍｓ］
・Ｔｎ＝５００［ｍｓ］−９０［ｍｓ］＝４１０［ｍｓ］
【００６１】
コンパイルスケジューラ７００が、消費電力テーブル５００からＰとＰｃとＰｎとを取得し、式（３）を判断する。上述のようにＰｃが１００［ｍＷ］であり、Ｐｎが２５［ｍＷ］であり、Ｐが５０［ｍＷ］である。
【００６２】
・式（３）の左辺＝１００［ｍＷ］×９０［ｍｓ］＋２５［ｍＷ］×４１０［ｍｓ］
＝１９２５０
・式（３）の右辺＝５０［ｍＷ］×４１０［ｍｓ］
＝２０５００
【００６３】
式（３）の左辺が式（３）の右辺よりも小さいので、式（３）が成り立つ。よって、コンパイルスケジューラ７００が、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコードに変換すると決定する。コンパイルスケジューラ７００が、決定結果をＯＳ２４０へ通知する。
【００６４】
図８は、変換管理テーブル６００の登録例を示す説明図である。ＯＳ２４０が、決定結果を受け付けると、変換管理テーブル６００のアプリの識別情報の項目６０１にアプリ＃Ａの識別情報を登録し、変換状態の項目６０２に未完了を登録する。
【００６５】
図９は、変換例を示す説明図である。ＯＳ２４０が、コンパイラ９００をＣＰＵ＃１に割り当てる。ＯＳ２４１が、コンパイラ９００の割り当てを受け付けると、クロック供給回路２０９のレジスタ２２１を３に設定することにより、ＣＰＵ＃１に供給されるクロックの周波数がＣｃ＝３００［ＭＨｚ］となるように制御する。ＯＳ２４１がコンパイラ９００を実行し、コンパイラ９００がアプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１に変換する。
【００６６】
ＯＳ２４０が、ＪａｖａＶＭ９０２をＣＰＵ＃０に割り当てて、クロック供給回路２０９のレジスタ２２０を２に設定することにより、ＣＰＵ＃０に供給されるクロックの周波数がＣ＝２００［ＭＨｚ］となるように制御する。ＯＳ２４０が、ＪａｖａＶＭ９０２上でアプリ＃Ａをアプリ＃Ａのバイトコード７０１で実行する。
【００６７】
図１０は、コンパイラ９００とアプリ＃Ａの割り当てによる割り当て管理テーブル４００の更新例を示す説明図である。割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２にＪａｖａＶＭ：アプリ＃Ａを登録する。ＪａｖａＶＭ：アプリ＃Ａとは、ＪａｖａＶＭ９０２によってアプリ＃Ａが実行されていることを示す。割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２にコンパイラ９００を登録する。
【００６８】
図１１は、コンパイル終了例を示す説明図である。アプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコード９０１への変換が終了する。コンパイラ９００が変換管理テーブル６００のアプリの識別情報の項目６０１がアプリ＃Ａである変換状態の項目６０２に完了を登録する。そして、コンパイラ９００が終了する。
【００６９】
図１２は、変換終了後の変換管理テーブル６００の更新例を示す説明図である。変換管理テーブル６００は、アプリの識別情報の項目６０１がアプリ＃Ａである変換状態の項目６０２に完了が登録されている。
【００７０】
図１１に戻って、コンパイラ９００が終了すると、他にＣＰＵ＃１へ割り当てられているアプリケーションのスレッドがないため、ＯＳ２４１がクロック供給回路２０９のレジスタ２２１の値を１に設定する。これにより、ＣＰＵ＃１へ与えられるクロックの周波数が１００［ＭＨｚ］となる。ＯＳ２４１が割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２からコンパイラ９００を削除する。
【００７１】
ＯＳ２４０が、アプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコード９０１への変換終了通知を受け付けると、ＪａｖａＶＭ９０２を終了させる。ＯＳ２４０が、クロック供給回路２０９のレジスタ２２０の値を１に設定する。これにより、ＣＰＵ＃０へ与えられるクロックの周波数が１００［ＭＨｚ］となる。ＯＳ２４０が、アプリ＃Ａをアプリ＃Ａのネイティブコード９０１で実行する。ＯＳ２４０が、割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２からＪａｖａＶＭ：アプリ＃Ａを削除して、アプリ＃Ａを登録する。
【００７２】
図１３は、変換終了後の割り当て管理テーブル４００の更新例を示す説明図である。割り当て管理テーブル４００では、ＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２からコンパイラ９００が削除されている。割り当て管理テーブル４００では、ＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２にアプリ＃Ａが登録されている。
【００７３】
（ダウンロード時の各ＯＳによる変換制御処理）
図１４は、ダウンロード時の各ＯＳによる変換制御処理手順の一例を示すフローチャートである。ダウンロードに関しては、いずれのＯＳが行ってもよい。ＯＳが、対象アプリケーションをダウンロードすると（ステップＳ１４０１）、コンパイルスケジューラ７００を起動する（ステップＳ１４０２）。ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けたか否かを判断する（ステップＳ１４０３）。
【００７４】
ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けていないと判断した場合（ステップＳ１４０３：Ｎｏ）、ステップＳ１４０３へ戻る。ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けたと判断した場合（ステップＳ１４０３：Ｙｅｓ）、決定結果がダウンロードしたアプリケーションを変換することを示すか否かを判断する（ステップＳ１４０４）。
【００７５】
ＯＳが、決定結果がダウンロードしたアプリケーションを変換することを示している場合（ステップＳ１４０４：Ｙｅｓ）、負荷が小さいＣＰＵにコンパイラ９００を割り当て（ステップＳ１４０５）、ステップＳ１４０６へ移行する。ステップＳ１４０４において、ＯＳが、決定結果がダウンロードしたアプリケーションを変換しないことを示している場合（ステップＳ１４０４：Ｎｏ）、ステップＳ１４０６へ移行する。ＯＳが、ダウンロードしたアプリケーションを負荷が小さいＣＰＵによりＪａｖａＶＭ上で実行し（ステップＳ１４０６）、一連の処理を終了する。
【００７６】
（実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順）
図１５は、実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。コンパイルスケジューラ７００が、対象アプリケーションの実行時間（Ｔ）とコード量（Ｃｏｄｅ）を取得し（ステップＳ１５０１）、Ｔｃ＝ｋ×Ｃｏｄｅ＋Ｃを算出し（ステップＳ１５０２）、Ｔｎ＝Ｔ−Ｔｃを算出する（ステップＳ１５０３）。コンパイルスケジューラ７００が、Ｐと、Ｐｃと、Ｐｎとを取得し（ステップＳ１５０４）、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎであるか否かを判断する（ステップＳ１５０５）。
【００７７】
コンパイルスケジューラ７００が、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎであると判断した場合（ステップＳ１５０５：Ｙｅｓ）、ネイティブコードへ変換すると決定する（ステップＳ１５０６）。コンパイルスケジューラ７００が、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎでないと判断した場合（ステップＳ１５０５：Ｎｏ）、ネイティブコードへ変換しないと決定する（ステップＳ１５０７）。コンパイルスケジューラ７００が、ステップＳ１５０６、ステップＳ１５０７のつぎに、決定結果をＯＳへ通知し（ステップＳ１５０８）、一連の処理を終了する。
【００７８】
（各ＯＳによるプログラム実行処理手順）
図１６は、各ＯＳによるプログラム実行処理手順を示すフローチャートである。ＯＳが、ディスパッチまたはスイッチ、または処理終了を検出したか否かを判断する（ステップＳ１６０１）。ＯＳが、ディスパッチまたはスイッチ、および処理終了を検出していないと判断した場合（ステップＳ１６０１：Ｎｏ）、ステップＳ１６０１へ戻る。
【００７９】
ＯＳが、ディスパッチまたはスイッチを検出したと判断した場合（ステップＳ１６０１：ディスパッチまたはスイッチ）、ステップＳ１６０２へ移行する。ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーション、またはコンパイラ９００であるか否かを判断する（ステップＳ１６０２）。ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーション、およびコンパイラ９００でないと判断した場合（ステップＳ１６０２：Ｎｏ）、クロックの周波数をＣｂに設定する（ステップＳ１６０３）。そして、ＯＳが、ＪａｖａＶＭ上でアプリケーションをバイトコードで実行し（ステップＳ１６０４）、ステップＳ１６０１へ戻る。
【００８０】
ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーションであると判断した場合（ステップＳ１６０２：変換）、ネイティブコードに変換済か否かを判断する（ステップＳ１６０５）。ＯＳが、ネイティブコードに変換済でないと判断した場合（ステップＳ１６０５：Ｎｏ）、ステップＳ１６０３へ移行する。ＯＳが、ネイティブコードに変換済であると判断した場合（ステップＳ１６０５：Ｙｅｓ）、クロックの周波数をＣｎに設定し（ステップＳ１６０６）、アプリケーションをネイティブコードで実行し（ステップＳ１６０７）、ステップＳ１６０１へ戻る。
【００８１】
ＯＳが、ディスパッチまたはスイッチされたアプリケーションがコンパイラ９００であると判断した場合（ステップＳ１６０２：コンパイラ）、クロックの周波数をＣｃに設定する（ステップＳ１６０８）。ＯＳが、コンパイラ９００を実行し（ステップＳ１６０９）、ステップＳ１６０１へ戻る。
【００８２】
ＯＳが、処理終了を検出したと判断した場合（ステップＳ１６０１：処理終了）、処理終了が検出されたアプリケーションはコンパイラ９００であるか否かを判断する（ステップＳ１６１０）。ＯＳが、処理終了が検出されたアプリケーションはコンパイラ９００であると判断した場合（ステップＳ１６１０：Ｙｅｓ）、変換管理テーブル６００を更新し（ステップＳ１６１１）、すべてのアプリケーションの処理が終了したか否かを判断する（ステップＳ１６１２）。
【００８３】
ＯＳが、すべてのアプリケーションの処理が終了していないと判断した場合（ステップＳ１６１２：Ｎｏ）、ステップＳ１６０１へ戻る。ＯＳが、すべてのアプリケーションの処理が終了したと判断した場合（ステップＳ１６１２：Ｙｅｓ）、一連の処理を終了する。ステップＳ１６１０において、処理終了が検出されたアプリケーションはコンパイラ９００でないと判断した場合（ステップＳ１６１０：Ｎｏ）、ステップＳ１６１２へ移行する。
【００８４】
（実施例２）
図１７は、実施例２にかかる判断例を示す説明図である。実施例２では、ＰｃをＹ×Ｐとし、ＰｎをＸ×Ｐとする。すなわち、Ｘは、バイトコードでの実行時の単位時間当たりの消費電力の値に対するネイティブコードでの実行時の単位時間当たりの消費電力の値の比率である。Ｙは、バイトコードでの実行時の単位時間当たりの消費電力の値に対するコンパイラ９００を実行時の単位時間当たりの消費電力の値の比率である。
【００８５】
グラフ１７００では、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合の消費電力を示している。グラフ１７０１では、バイトコードで実行する場合の消費電力を示している。図１７については、下記式（４）のように表すことができる。
【００８６】
Ｐ×Ｔｃ＋Ｙ×Ｐ×Ｔｃ＋Ｘ×Ｐ×Ｔｎ＜Ｐ×Ｔ  ・・・（４）
【００８７】
ここで、ＴｃとＴｎについてはそれぞれ上述の式（１），（２）により算出される。そして、式（４）はＰで共通化されると、下記式（５）の様になる。
【００８８】
（１＋Ｙ）×Ｔｃ＋Ｘ×Ｔｎ＜Ｔ  ・・・（５）
【００８９】
コンパイルスケジューラ７００は、式（５）が成り立てば、バイトコードからネイティブコードへ変換すると決定する。コンパイルスケジューラ７００は、式（５）が成り立たなければ、バイトコードからネイティブコードへ変換しないと決定する。
【００９０】
実施例２では、実施例１と同様にアプリ＃Ａがダウンロードされた場合において、式（３）に代わって前述した式（４）または式（５）が成り立つか否かによって、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１へ変換するか否かを決定する。実施例２では、ＯＳ２４０やＯＳ２４１の処理については実施例１で示した処理と同一であるため、コンパイルスケジューラ７００の処理のみ詳細に説明する。また、ＸとＹについてはあらかじめ消費電力テーブルに格納されていることとする。
【００９１】
図１８は、実施例２で用いる消費電力テーブルの一例を示す説明図である。消費電力テーブル１８００は、実行の項目１８０１と、クロック周波数の項目１８０２と、比率の項目１８０３と、を有している。実行の項目１８０１には、ネイティブコードでの実行と、バイトコードでの実行と、コンパイラの実行と、が登録されている。クロック周波数の項目１８０２には、実行の項目１８０１に登録された実行時にＣＰＵへ供給するクロックの周波数が登録されている。
【００９２】
消費電力テーブル１８００では、コンパイラ９００の実行時にＣＰＵへ与えるクロックの周波数（Ｃｃ）が３００［ＭＨｚ］であり、ネイティブコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｎ）は１００［ＭＨｚ］である。消費電力テーブル１８００では、バイトコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｂ）は２００［ＭＨｚ］である。Ｃｎ＜Ｃｂ＜Ｃｃである。
【００９３】
比率の項目１８０３には、バイトコードでの実行時の単位時間当たりの消費電力と実行の項目１８０１に登録された実行時の単位時間当たりの消費電力との比率が登録されている。Ｐｃ（Ｙ×Ｐ）が１００［ｍＷ］であり、Ｐｎ（Ｘ×Ｐ）が２５［ｍＷ］であり、Ｐが５０［ｍＷ］であるため、消費電力テーブル１８００では、Ｘ（０＜Ｘ＜１）が１／２であり、Ｙ（１＞Ｙ）が２である。消費電力テーブル１８００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００９４】
ＴｃとＴｎは実施例１と同様に下記とする。
・Ｔｃ＝９０［ｍｓ］
・Ｔｎ＝４１０［ｍｓ］
【００９５】
コンパイルスケジューラ７００が、消費電力テーブル１８００からＸとＹとを取得し、式（５）を判断する。
・式（５）の左辺＝（１＋２）×９０［ｍｓ］＋（１／２）×４１０［ｍｓ］
＝２７０＋２０５
＝４７５
・式（５）の右辺＝５００［ｍｓ］
【００９６】
式（５）の左辺が式（５）の右辺よりも小さいので、式（５）が成り立つため、コンパイルスケジューラ７００が、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１に変換すると決定する。コンパイルスケジューラ７００が、決定結果をＯＳへ通知する。ＯＳが決定結果を受け付け後の処理については実施例１と同一であるため、詳細な説明を省略する。
【００９７】
つぎに、各ＯＳによるプログラム実行処理手順やコンパイルスケジューラ７００によるプログラム変換制御処理手順について説明する。実施例２にかかる各ＯＳのプログラム実行処理手順については実施例１で説明した各ＯＳのプログラム実行処理手順と同一であるため、詳細な説明は省略する。
【００９８】
（実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順）
図１９は、実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。コンパイルスケジューラ７００が、対象アプリケーションの実行時間（Ｔ）と対象アプリケーションのバイトコードのコード量（Ｃｏｄｅ）を取得し（ステップＳ１９０１）、Ｔｃ＝ｋ×Ｃｏｄｅ＋Ｃを算出し（ステップＳ１９０２）、Ｔｎ＝Ｔ−Ｔｃを算出する（ステップＳ１９０３）。コンパイルスケジューラ７００が、ＸとＹを取得し（ステップＳ１９０４）、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔであるか否かを判断する（ステップＳ１９０５）。
【００９９】
コンパイルスケジューラ７００が、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔであると判断した場合（ステップＳ１９０５：Ｙｅｓ）、ネイティブコードへ変換すると決定する（ステップＳ１９０６）。コンパイルスケジューラ７００が、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔでないと判断した場合（ステップＳ１９０５：Ｎｏ）、ネイティブコードへ変換しないと決定する（ステップＳ１９０７）。コンパイルスケジューラ７００が、ステップＳ１９０６、ステップＳ１９０７のつぎに、決定結果をＯＳへ通知し（ステップＳ１９０８）、一連の処理を終了する。
【０１００】
以上説明したように、プログラム実行方法によれば、対象アプリケーションのバイトコードをネイティブコードに変換して対象アプリケーションを実行するか否かを、各コードでの実行時の消費電力の値に基づいて決定する。これにより、消費電力を抑制することができ、ネイティブコードに変換して対象アプリケーションを実行する場合、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０１】
また、バイトコードでの実行時の消費電力の値が、ネイティブコードでの実行時の消費電力の値よりも小さいとき、対象アプリケーションのバイトコードをネイティブコードに変換せず、対象アプリケーションをバイトコードで実行する。これにより、消費電力を抑制することができる。
【０１０２】
また、ネイティブコードでの実行時の消費電力の値を、対象アプリケーションの実行時間とバイトコードからネイティブコードへの変換時間と、ＣＰＵの性能とに基づいて算出する。これにより、各ＣＰＵの性能によって異なる単位時間値の消費電力の値によってネイティブコードでの実行時の消費電力の値が変化することが表され、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０３】
また、変換時間は、バイトコードのコード量に基づいて算出する。これにより、コード量が増えると、コンパイラによる変換時間が長くなるため、ネイティブコードでの実行時に消費電力の値が増加することを表すことができる。したがって、実行前に算出するネイティブコードでの実行時に消費電力の値の精度を向上させることができる。
【０１０４】
また、変換時間は、ＣＰＵの特性に基づいて算出する。ＣＰＵの特性によってはコンパイラによる変換に時間がかかり変換時間が長くなる。すなわち、端末によって変換時間が変わることが表され、実行前に算出するネイティブコードでの実行時に消費電力の値の精度を向上させることができる。さらに、変換時間が端末によって変わるため、端末の性能によって変換するか否かが異なり、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０５】
また、バイトコードからネイティブコードへの変換時にＣＰＵへ与えられるクロックの周波数を、バイトコードでの実行時にＣＰＵへ与えられるクロックの周波数よりも高くする。変換とバイトコードでの実行とを同時に行うと消費電力が増大するが、変換時のクロック周波数が高くなることで、変換時間を短縮することができ、消費電力を削減することができる。
【０１０６】
また、ネイティブコードでの実行時にＣＰＵへ与えられるクロックの周波数を、バイトコードでの実行時にＣＰＵへ与えられるクロックの周波数よりも低くする。ネイティブコードでの実行は、バイトコードでの実行よりも処理量が少ないため、ネイティブコードでの実行時にクロックの周波数が低くても、バイトコードでの実行時に要求された動作を満たすことができる。よって、ネイティブコードでの実行時にクロックの周波数を低くすることで、消費電力を抑制することができる。
【０１０７】
また、コンパイルスケジューラが、バイトコードからネイティブコードに変換するか否かを判断することで、ＯＳの実行に負荷がかかるのを防止することができる。
【０１０８】
また、バイトコードからネイティブコードへの変換中に、アプリケーションをバイトコードで実行する。変換終了後にアプリケーションをネイティブコードで実行することにより、ダウンロードしてすぐにアプリケーションを実行させる場合に、ユーザの応答性を向上させることができる。
【０１０９】
なお、プログラム実行方法は、あらかじめ用意されたプログラムをマルチコアプロセッサのうちのいずれかのＣＰＵで実行することにより実現することができる。たとえば、実施例１，２では該プログラムはＯＳ２４０やＯＳ２４１やコンパイルスケジューラ７００に含まれている。また、該プログラムは、フラッシュＲＯＭ２０５などのマルチコアプロセッサのいずれかのＣＰＵが読み取り可能な記録媒体に記録され、マルチコアプロセッサのいずれかのＣＰＵによって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。
【符号の説明】
【０１１０】
７００  コンパイルスケジューラ
７０１  アプリ＃Ａのバイトコード
９００  コンパイラ
９０１  アプリ＃Ａのネイティブコード
＃０，＃１  ＣＰＵ
【図１】
2012105000.tif 000003
【図２】
2012105000.tif 000004
【図３】
2012105000.tif 000005
【図４】
2012105000.tif 000006
【図５】
2012105000.tif 000007
【図６】
2012105000.tif 000008
【図７】
2012105000.tif 000009
【図８】
2012105000.tif 000010
【図９】
2012105000.tif 000011
【図１０】
2012105000.tif 000012
【図１１】
2012105000.tif 000013
【図１２】
2012105000.tif 000014
【図１３】
2012105000.tif 000015
【図１４】
2012105000.tif 000016
【図１５】
2012105000.tif 000017
【図１６】
2012105000.tif 000018
【図１７】
2012105000.tif 000019
【図１８】
2012105000.tif 000020
【図１９】
2012105000.tif 000021
【手続補正書】
【提出日】平成25年8月30日(2013.8.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータが、
第１のコードによって記述される第１プログラムの実行時の第１の消費電力を算出し、
前記第１プログラムと同じ機能を有するとともに第２のコードによって記述される第２プログラムの実行時の第２の消費電力を算出し、
前記第２の消費電力が前記第１の消費電力よりも小さいとき、前記第１プログラムを前記第２プログラムに変換して前記第２プログラムを実行すること
を特徴とするプログラム実行方法。
【請求項２】
前記第２の消費電力が前記第１の消費電力よりも大きいとき、前記第１プログラムを実行すること
を特徴とする請求項１に記載のプログラム実行方法。
【請求項３】
前記第２の消費電力は、
前記第１プログラムの実行時間、前記第１プログラムを前記第２プログラムに変換するときの変換時間、および前記コンピュータに含まれるＣＰＵの特性に基づいて算出されること
を特徴とする請求項１または請求項２に記載のプログラム実行方法。
【請求項４】
前記変換時間は、前記第１プログラムの第１のコード量に基づいて算出されること
を特徴とする請求項３に記載のプログラム実行方法。
【請求項５】
前記第１プログラムを前記第２プログラムに変換するときに設定される第２クロックの周波数を、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも高く設定すること
を特徴とする請求項１乃至請求項４の何れか一に記載のプログラム実行方法。
【請求項６】
前記第２プログラムを実行するときに設定される第３クロックの周波数は、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも低く設定されること
を特徴とする請求項１乃至請求項５の何れか一に記載のプログラム実行方法。
【請求項７】
コンパイルスケジューラを起動し、
前記コンパイルスケジューラが前記第１プログラムを前記第２プログラムに変換するか否かを判定すること
を特徴とする請求項１乃至請求項６の何れか一に記載のプログラム実行方法。
【請求項８】
前記第１プログラムを前記第２プログラムに変換する間に前記第１プログラムを実行し、
前記変換終了後に前記第２プログラムを実行すること
を特徴とする請求項１乃至請求項７の何れか一に記載のプログラム実行方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象アプリケーションのプログラムを実行するプログラム実行方法に関する。
【背景技術】
【０００２】
従来、グリッドコンピュータなどを用いて分散処理を行う場合、個々のマシンの構成が異なるため、各マシンにはアプリケーションのＪａｖａ（登録商標）バイトコード（以下、「バイトコード」と称する。）を配布する。そして、各マシンではＪａｖａ仮想マシン（以下、「ＪａｖａＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）」と称する。）を用いてバイトコードで実行する。
【０００３】
バイトコードはＪａｖａのコンパイラが生成する実行用コードである。バイトコードは中間コードの一種で、特定の実行環境に依存しない。バイトコードはＪａｖａＶＭ内のインタプリタによってネイティブコードに変換されてから実行される（たとえば、下記特許文献１を参照。）。たとえば、ＪａｖａＶＭとしては、ＪＩＴ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ）コンパイラ（たとえば、下記特許文献２，３を参照。）が挙げられる。ネイティブコードとは、端末固有の機械語で記述されたプログラムである。
【０００４】
また、従来、携帯端末においては、アプリケーションはバイトコードでダウンロードされ、ＪａｖａＶＭを用いて該バイトコードでアプリケーションが実行されている。
【０００５】
また、設計者がＪａｖａで記述したソースコードと中間語にコンパイルされたバイトコードとの実行比率を電力要求に応じて決定することで、消費電力を削減する技術が知られている（たとえば、下記特許文献４を参照。）。
【０００６】
また、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は複数のアプリケーションが割り当てられた場合、各アプリケーションの実行時間に基づいて実行の優先度を決定する。そして、ＣＰＵは、アプリケーションの実行時に空き時間が生じる場合、優先度の順に応じて該空き時間に他のアプリケーションを実行する技術が知られている（たとえば、下記特許文献５を参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−３５５２７７号公報
【特許文献２】特開２００１−１９５２６４号公報
【特許文献３】特開２００３−１４０９０９号公報
【特許文献４】特開２００６−１２６９４７号公報
【特許文献５】特開２００９−１５１３７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、携帯端末のように端末によって性能が異なる場合、従来技術を用いれば消費電力を削減することはできても、電力要求がいずれの端末であっても同条件であれば、個々の端末の性能を引き出せない場合があるという問題点があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、消費電力を抑制しつつ、各端末の性能に沿ったコードでアプリケーションを実行するプログラム実行方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明の一観点によれば、第１のコードによって記述される第１プログラムの実行時の第１の消費電力を算出し、前記第１プログラムと同じ機能を有するとともに第２のコードによって記述される第２プログラムの実行時の第２の消費電力を算出し、前記第２の消費電力が前記第１の消費電力よりも小さいとき、前記第１プログラムを前記第２プログラムに変換して前記第２プログラムを実行するプログラム実行方法が提案される。
【発明の効果】
【００１１】
本発明の一観点によれば消費電力を抑制しつつ、各端末の性能に沿ったコードでアプリケーションを実行するという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の一例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェアを示す説明図である。
【図３】図３は、マルチコアプロセッサシステム２００の機能ブロック図である。
【図４】図４は、割り当て管理テーブルの一例を示す説明図である。
【図５】図５は、実施例１で用いる消費電力テーブルの一例を示す説明図である。
【図６】図６は、変換管理テーブルの一例を示す説明図である。
【図７】図７は、アプリ＃Ａのダウンロードを示す説明図である。
【図８】図８は、変換管理テーブル６００の登録例を示す説明図である。
【図９】図９は、変換例を示す説明図である。
【図１０】図１０は、コンパイラ９００とアプリ＃Ａの割り当てによる割り当て管理テーブル４００の更新例を示す説明図である。
【図１１】図１１は、コンパイル終了例を示す説明図である。
【図１２】図１２は、変換終了後の変換管理テーブル６００の更新例を示す説明図である。
【図１３】図１３は、変換終了後の割り当て管理テーブル４００の更新例を示す説明図である。
【図１４】図１４は、ダウロード時の各ＯＳによる変換制御処理手順の一例を示すフローチャートである。
【図１５】図１５は、実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。
【図１６】図１６は、各ＯＳによるプログラム実行処理手順を示すフローチャートである。
【図１７】図１７は、実施例２にかかる判断例を示す説明図である。
【図１８】図１８は、実施例２で用いる消費電力テーブルの一例を示す説明図である。
【図１９】図１９は、実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるプログラム実行方法の実施の形態を詳細に説明する。本実施の形態では、第１のコードによって記述される第１のプログラムを対象アプリケーションのバイトコードと称する。第１のプログラムと同じ機能を有するとともに第２のコードによって記述される第２のプログラムを対象アプリケーションのネイティブコードと称する。
【００１４】
図１は、本発明の一例を示す説明図である。ここでは、プログラム実行装置が、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合と、バイトコードで実行する場合と、のいずれの場合で消費電力が低くなるかを判断する。プログラム実行装置が、判断結果に基づいてバイトコードからネイティブコードに変換するか否かを決定する。グラフ１００では、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合の消費電力を示している。グラフ１０１では、バイトコードで実行する場合の消費電力を示している。
【００１５】
プログラム実行装置が、対象アプリケーションをダウンロードする。該対象アプリケーションに関する情報は、バイトコードと、バイトコードでの実行時間（Ｔ）と、バイトコードのコード量（Ｃｏｄｅ）である。対象アプリケーションのバイトコードでの実行時間（Ｔ）は、バイトコードでの実行時に要求される実行性能である。図１では、バイトコードでの実行性能と同一性能でネイティブコードでの実行を行った場合に、消費電力の値が小さくなるか否かを判断している。プログラム実行装置が、コード量を用いて、対象アプリケーションのバイトコードから対象アプリケーションのネイティブコードへの変換にかかる変換時間（Ｔｃ）を算出する。Ｔｃは下記式（１）に基づいて算出される。
【００１６】
Ｔｃ≒ｋ×Ｃｏｄｅ＋Ｃ  ・・・（１）
【００１７】
ここで、ｋはＣＰＵの性能とコンパイラの性能によって決まる比例係数である。ＣはＣＰＵの性能とコンパイラの性能によって決まる定数である。つぎに、プログラム実行装置が、バイトコードからネイティブコードへの変換後に、対象アプリケーションをネイティブコードで実行する実行時間（Ｔｎ）を下記式（２）に基づいて算出する。
【００１８】
Ｔｎ＝Ｔ−Ｔｃ  ・・・（２）
【００１９】
つぎに、プログラム実行装置が、下記式（３）が成り立つ場合、対象アプリケーションのバイトコードをネイティブコードに変換すると決定する。下記式（３）が成り立たない場合、対象アプリケーションのバイトコードをネイティブコードに変換しないと決定する。
【００２０】
Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎ  ・・・（３）
【００２１】
ここで、Ｐｃはバイトコードからネイティブコードへの変換時の単位時間当たりの消費電力の値であり、Ｐｎがネイティブコードでの実行時の単位時間当たりの消費電力の値であり、Ｐがバイトコードでの実行時の単位時間当たりの消費電力の値である。Ｐｎ＜Ｐ＜Ｐｃである。バイトコードでの実行にはＪａｖａＶＭを実行させなければならないため、バイトコードでの実行はネイティブコードでの実行よりも単位時間当たりの消費電力の値が大きくなる。
【００２２】
また、Ｐｎ、Ｐ、Ｐｃは、各端末が有するＣＰＵの性能に沿ってあらかじめ決定されている。ここでのＣＰＵの性能とは、具体的には、たとえば、計算能力や各実行時に供給されるクロックの周波数などである。グラフ１００とグラフ１０１において、Ｐ×Ｔｃ（斜線部）は共通であるため、式（３）にはＰ×Ｔｃが含まれていない。
【００２３】
また、本実施の形態では、対象アプリケーションの実行時間に基づいて消費電力を算出している。占いアプリケーションなどの実行時間が予測可能なゲームやバナー上の広告などは実行時間が一定であるため、プログラム実行装置が、上述のようにバイトコードと併せて実行時間をダウンロードすることができる。アプリケーションの実行時間がアプリケーションの開発者によってＨｔｍｌ（Ｈｙｐｅｒ  ｔｅｘｔ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）に埋め込まれていてもよい。また、プログラム実行装置が、対象アプリケーションの実行時間の統計データから対象アプリケーションの実行時間を予測してもよい。
【００２４】
本プログラム実行装置は、シングルコアシステムであってもマルチコアプロセッサシステムであってもよいが、本実施の形態ではマルチコアプロセッサシステムを例に挙げて説明する。ここで、マルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００２５】
（マルチコアプロセッサシステムのハードウェア）
図２は、マルチコアプロセッサシステムのハードウェアを示す説明図である。図２において、マルチコアプロセッサシステム２００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ディスプレイ２０１と、キーボード２０２と、Ｉ／Ｆ（ＩｎｔｅｒＦａｃｅ）２０３と、ＲＡＭ（Ｒａｎｄａｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０６と、を有している。さらに、マルチコアプロセッサシステム２００は、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）コントローラ２０４と、フラッシュＲＯＭ２０５と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８と、クロック供給回路２０９と、を有している。ＣＰＵ＃０と、ＣＰＵ＃１と、ディスプレイ２０１と、キーボード２０２と、Ｉ／Ｆ２０３と、フラッシュＲＯＭコントローラ２０４と、ＲＡＭ２０６と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８とは、バス２１２を介して接続されている。
【００２６】
ここで、ＣＰＵ＃０とＣＰＵ＃１は、それぞれレジスタとコアを有している。コアは、演算機能を有している。各ＣＰＵ内のレジスタは、ＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）やリセットレジスタを有している。
【００２７】
ＣＰＵ＃０はマスタＣＰＵであり、マルチコアプロセッサシステム２００の全体の制御を司り、ＯＳ２４０を実行する。ＯＳ２４０はマスタＯＳであり、ＣＰＵ＃０に割り当てられたアプリケーションを実行する。ＯＳ２４０はスケジューラを有し、スケジューラは起動指示を受け付けたアプリケーションをマルチコアプロセッサのうちのいずれのＣＰＵに割り当てるかを制御する機能を有している。スケジューラはＣＰＵ＃０に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２８】
ＣＰＵ＃１は、スレーブＣＰＵであり、ＯＳ２４１を実行する。ＯＳ２４１は、スレーブＯＳであり、ＣＰＵ＃１に割り当てられたアプリケーションを実行する。ＯＳ２４１は、スケジューラを有し、スケジューラはＣＰＵ＃１に割り当てられたアプリケーションの実行順序を制御する機能を有する。
【００２９】
１次キャッシュ２３０と１次キャッシュ２３１とは、それぞれキャッシュメモリとキャッシュコントローラとを有している。１次キャッシュ２３０はＯＳ２４０が実行するアプリケーションのスレッドからＲＡＭ２０６への書込処理を一時的に記憶する。１次キャッシュ２３０は、ＲＡＭ２０６から読み出されたデータを一時的に記憶する。１次キャッシュ２３１はＯＳ２４１が実行するアプリケーションのスレッドからＲＡＭ２０６への書込処理を一時的に記憶する。１次キャッシュ２３１は、ＲＡＭ２０６から読み出されたデータを一時的に記憶する。
【００３０】
１次キャッシュ２３０と１次キャッシュ２３１とが共有するデータがいずれか一方のキャッシュで更新された場合、スヌープコントローラ２１０は、該更新を検出し、他の１次キャッシュ内の該データも更新する機能を有している。
【００３１】
２次キャッシュ２１１は、キャッシュメモリとキャッシュコントローラとを有している。２次キャッシュ２１１では、１次キャッシュ２３０や１次キャッシュ２３１から追い出されたデータを記憶する。２次キャッシュ２１１では、ＯＳ２４０とＯＳ２４１とが共有するデータを記憶する。２次キャッシュ２１１は、１次キャッシュ２３０や１次キャッシュ２３１よりも、記憶容量が大きくかつ各ＣＰＵからのアクセス速度が遅い。２次キャッシュ２１１はＲＡＭ２０６よりも、記憶容量が小さくかつ各ＣＰＵからのアクセス速度が速い。
【００３２】
ディスプレイ２０１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０１は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。キーボード２０２は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０２は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３３】
Ｉ／Ｆ２０３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、ネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０３は、ネットワークと内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０３には、たとえばモデムやＬＡＮアダプタなどを採用することができる。本実施の形態では、Ｉ／Ｆ２０３を介してフラッシュＲＯＭ２０８へアプリケーションをダウンロードしている。
【００３４】
フラッシュＲＯＭコントローラ２０４と、フラッシュＲＯＭ２０５と、ＲＡＭ２０６と、ＲＯＭ２０７と、フラッシュＲＯＭ２０８とは、ＣＰＵ＃０とＣＰＵ＃１に共有されるメモリである。図示していないが、メモリコントローラが、各ＣＰＵから各メモリへのアクセス要求を調停する。
【００３５】
ＲＯＭ２０７は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０６は、各ＣＰＵのワークエリアとして使用される。フラッシュＲＯＭ２０８は、ＯＳ２４０やＯＳ２４１などのシステムソフトウェアやアプリケーションのバイトコードやアプリケーションのネイティブコードを記憶している。
【００３６】
フラッシュＲＯＭコントローラ２０４は、各ＣＰＵの制御に従ってフラッシュＲＯＭに対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０５は、フラッシュＲＯＭコントローラ２０４の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム２００を使用するユーザがＩ／Ｆ２０３を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ２０５は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３７】
クロック供給回路２０９は、ＣＰＵなど各部へクロックを供給する。ここでは、クロック供給回路２０９がＣＰＵへ供給可能なクロックの周波数は１００［ＭＨｚ］と２００［ＭＨｚ］と３００［ＭＨｚ］とする。クロック供給回路２０９は、レジスタ２２０とレジスタ２２１を有する。レジスタ２２０はＣＰＵ＃０へ与えるクロックの周波数を設定可能であり、レジスタ２２１はＣＰＵ＃１へ与えるクロックの周波数を設定可能である。
【００３８】
レジスタ２２０の値が１であれば、ＣＰＵ＃０へ与えるクロックの周波数が１００［ＭＨｚ］となり、レジスタ２２０の値が２であれば、ＣＰＵ＃０へ与えるクロックの周波数が２００［ＭＨｚ］となる。レジスタ２２０の値が３であれば、ＣＰＵ＃０へ与えるクロックの周波数が３００［ＭＨｚ］となる。レジスタ２２１の値が１であれば、ＣＰＵ＃１へ与えるクロックの周波数が１００［ＭＨｚ］となり、レジスタ２２１の値が２であれば、ＣＰＵ＃１へ与えるクロックの周波数が２００［ＭＨｚ］となる。レジスタ２２１の値が３であれば、ＣＰＵ＃１へ与えるクロックの周波数が３００［ＭＨｚ］となる。
【００３９】
（マルチコアプロセッサシステム２００の機能ブロック図）
図３は、マルチコアプロセッサシステム２００の機能ブロック図である。マルチコアプロセッサシステム２００は、取得部３０１と、変換時間算出部３０２と、第１の算出部３０３と、第２の算出部３０４と、判断部３０５と、変換部３０６と、実行部３０７と、制御部３０８と、を有している。具体的には、たとえば、フラッシュＲＯＭ２０８などの記憶装置に取得部３０１〜制御部３０８に関する処理がコーディングされたプログラムが記憶されている。マルチコアプロセッサのうちのＣＰＵが該記憶装置にアクセスして該プログラムを読み出し、該プログラム内にコーディングされている処理を実行することにより、取得部３０１〜制御部３０８に関する処理が実行される。本実施の形態では、該プログラムはＯＳ２４０とＯＳ２４１と後述するコンパイルスケジューラである。
【００４０】
取得部３０１は、対象アプリケーションの機械語でないバイトコードから機械語であるネイティブコードへの変換にかかる変換時間（Ｔｃ）と、バイトコードでの実行時間（Ｔ）を取得する。変換時間（Ｔｃ）については、取得してもよいし算出してもよい。変換時間（Ｔｃ）を算出する場合には、取得部３０１は、バイトコードのコード量を取得する。変換時間算出部３０２は、変換時間（Ｔｃ）をバイトコードのコード量とＣＰＵの性能とに応じて算出する。具体的には、たとえば、変換時間算出部３０２は、上記式（２）に基づいて算出する。
【００４１】
第１の算出部３０３は、バイトコードでの実行時の第１の消費電力を算出する。具体的には、たとえば、第１の算出部３０３は、取得部３０１により取得された実行時間（Ｔ）と変換時間算出部３０２により算出された変換時間（Ｔｃ）との差分値（Ｔｎ）を算出する。第１の算出部３０３は、差分値（Ｔｎ）と、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）とにより、バイトコードでの実行時の消費電力の値（Ｐ×Ｔｎ）を算出する。ここでは、バイトコードでの実行時の消費電力の値（Ｐ×Ｔｎ）が第１の消費電力である。
【００４２】
第２の算出部３０４は、ネイティブコードでの実行時の第２の消費電力を算出する。具体的には、たとえば、第２の算出部３０４は、変換時間算出部３０２により算出された変換時間（Ｔｃ）と変換時の単位時間当たりの消費電力の値（Ｐｃ）とにより変換時間（Ｔｃ）での消費電力の値（Ｐｃ×Ｔｃ）を算出する。
【００４３】
そして、第２の算出部３０４は、差分値（Ｔｎ）と、ネイティブコードでの実行時の単位時間当たりの消費電力の値（Ｐｎ）とにより、ネイティブコードでの実行時の消費電力の値（Ｐｎ×Ｔｎ）を算出する。第２の算出部３０４は、第１の算出部３０３により算出された変換時間での消費電力の値と第２の算出部３０４により算出されたネイティブコードでの実行時の消費電力の値との加算値を算出する。ここでは、加算値が、第２の消費電力である。
【００４４】
また、第２の算出部３０４では、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）に対する変換時の単位時間当たりの消費電力の値（Ｐｃ）の比率（Ｙ）に基づいて第２の消費電力を算出してもよい。さらに、第２の算出部３０４では、バイトコードでの実行時の単位時間当たりの消費電力の値（Ｐ）に対するネイティブコードでの実行時の単位時間当たりの消費電力の値（Ｐｎ）の比率（Ｘ）に基づいて第２の消費電力を算出してもよい。
【００４５】
判断部３０５は、第２の算出部３０４により算出された加算値が、第１の算出部３０３により算出されたバイトコードでの実行時の消費電力の値未満となるか否かを判断する。
【００４６】
変換部３０６は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満であると判断された場合、バイトコードをネイティブコードへ変換する。変換部３０６は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満でないと判断された場合、バイトコードをネイティブコードへ変換しない。
【００４７】
実行部３０７は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満であると判断された場合、変換部３０６によるバイトコードからネイティブコードへの変換が終了するまで、バイトコードで実行する。そして、実行部３０７は、変換部３０６によりバイトコードからネイティブコードへの変換が終了すると、ネイティブコードで実行する。実行部３０７は、判断部３０５によって加算値が算出されたバイトコードでの実行時の消費電力の値未満でないと判断された場合、バイトコードで実行する。
【００４８】
制御部３０８は、変換部３０６によりバイトコードをネイティブコードに変換するときに設定される動作クロックの周波数を、バイトコードでの実行時に設定される動作クロックの周波数よりも高く設定する。制御部３０８は、ネイティブコードで実行するときに設定されるクロックの周波数をバイトコードで実行するときに設定されるクロックの周波数よりも低く設定する。
【００４９】
以上を踏まえて、実施例１，２を用いて詳細に説明する。実施例１では、ＰとＰｃとＰｎとを基づいてバイトコードからネイティブコードへ変換するか否かを決定する例を示す。実施例２では、ＸとＹとに基づいてバイトコードからネイティブコードへ変換するか否かを決定する例を示す。
【００５０】
（実施例１）
図４は、割り当て管理テーブルの一例を示す説明図である。割り当て管理テーブル４００には、各ＣＰＵにいずれのアプリが割り当てられているかが登録される。割り当て管理テーブル４００は、ＣＰＵの識別情報の項目４０１と、アプリの識別情報の項目４０２と、を有している。ＣＰＵの識別情報の項目４０１には、ＣＰＵの識別情報が登録される。ここでは、ＣＰＵ＃０とＣＰＵ＃１を示す識別情報が登録されている。
【００５１】
アプリの識別情報の項目４０２には、ＣＰＵの識別情報の項目４０１に識別情報が登録された各ＣＰＵに割り当てられたアプリケーションの識別情報が登録される。割り当て管理テーブル４００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５２】
図５は、実施例１で用いる消費電力テーブルの一例を示す説明図である。消費電力テーブル５００は、実行の項目５０１と、クロック周波数の項目５０２と、単位時間当たりの消費電力の項目５０３と、を有している。実行の項目５０１には、ネイティブコードでの実行と、バイトコードでの実行と、コンパイラの実行と、のいずれかが登録されている。クロック周波数の項目５０２には、実行の項目５０１に登録された実行に沿ったＣＰＵへ供給するクロックの周波数が登録されている。単位時間当たりの消費電力の項目５０３には、実行の項目５０１に登録された実行時における単位時間当たりの消費電力が登録されている。
【００５３】
消費電力テーブル５００では、Ｐｃが１００［ｍＷ］であり、Ｐｎが２５［ｍＷ］であり、Ｐが５０［ｍＷ］である（Ｐｎ＜Ｐ＜Ｐｃ）。消費電力テーブル５００では、コンパイラを実行時にＣＰＵへ与えるクロックの周波数（Ｃｃ）が３００［ＭＨｚ］であり、ネイティブコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｎ）は１００［ＭＨｚ］である。消費電力テーブル５００では、バイトコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｂ）は２００［ＭＨｚ］である。
【００５４】
ＣｎとＣｂとＣｃとの関係は、Ｃｎ＜Ｃｂ＜Ｃｃである。バイトコードではＪａｖａＶＭがネイティブコードに変換しながら実行するため、バイトコードでの実行はネイティブコードでの実行と比較して処理量が多い。そのため、ネイティブコードでの実行時にバイトコードでの実行時よりもクロックの周波数が低くなっても、バイトコードでの実行時に要求された動作を満たすことができる。消費電力テーブル５００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５５】
図６は、変換管理テーブルの一例を示す説明図である。変換管理テーブル６００では、バイトコードからネイティブコードに変換すると決定されたアプリケーションの変換状態が管理される。変換管理テーブル６００は、アプリの識別情報の項目６０１と変換状態の項目６０２を有している。アプリの識別情報の項目６０１には、バイトコードからネイティブコードに変換すると決定されたアプリケーションの識別情報が登録される。
【００５６】
変換状態の項目６０２は、アプリの識別情報の項目６０１に識別情報が登録されたアプリケーションのバイトコードがネイティブコードへ変換されたか否かが登録される。変換が終了したアプリケーションに関する変換状態の項目６０２には、「完了」が登録され、変換が終了していないアプリケーションに関する変換状態の項目６０２には、「未完了」が登録される。変換管理テーブル６００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００５７】
図７は、アプリ＃Ａのダウンロードを示す説明図である。ＯＳ２４０が、アプリ＃ＡをＩ／Ｆ２０３を介してダウンロードする。ここでは、アプリ＃Ａのバイトコードと、アプリ＃Ａのバイトコードでの実行時間（Ｔ）と、アプリ＃Ａのバイトコードのコード量（Ｃｏｄｅ）とが、ダウンロードされる。そして、ＯＳ２４０が、コンパイルスケジューラ７００を起動する。コンパイルスケジューラ７００は、アプリケーションのバイトコードからＣＰＵ＃０やＣＰＵ＃１が解釈可能な機械語で示されたネイティブコードへ変換する機能を有する。コンパイルスケジューラ７００が、ダウンロードされたアプリ＃Ａの実行時間（Ｔ）とアプリ＃Ａのコード量（Ｃｏｄｅ）を取得する。たとえば、ＴとＣｏｄｅとｋとＣとが下記であるとする。
【００５８】
・Ｔ＝５００［ｍｓ］
・Ｃｏｄｅ＝１６０バイト
・ｋ＝０．５
・Ｃ＝１０
【００５９】
コンパイルスケジューラ７００が、上記式（１）に基づいてアプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコードへの変換時間（Ｔｃ）を算出し、上記式（２）に基づいて変換後のネイティブコードでの実行時間（Ｔｎ）を算出する。
【００６０】
・Ｔｃ＝０．５×１６０＋１０＝９０［ｍｓ］
・Ｔｎ＝５００［ｍｓ］−９０［ｍｓ］＝４１０［ｍｓ］
【００６１】
コンパイルスケジューラ７００が、消費電力テーブル５００からＰとＰｃとＰｎとを取得し、式（３）を判断する。上述のようにＰｃが１００［ｍＷ］であり、Ｐｎが２５［ｍＷ］であり、Ｐが５０［ｍＷ］である。
【００６２】
・式（３）の左辺＝１００［ｍＷ］×９０［ｍｓ］＋２５［ｍＷ］×４１０［ｍｓ］
＝１９２５０
・式（３）の右辺＝５０［ｍＷ］×４１０［ｍｓ］
＝２０５００
【００６３】
式（３）の左辺が式（３）の右辺よりも小さいので、式（３）が成り立つ。よって、コンパイルスケジューラ７００が、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコードに変換すると決定する。コンパイルスケジューラ７００が、決定結果をＯＳ２４０へ通知する。
【００６４】
図８は、変換管理テーブル６００の登録例を示す説明図である。ＯＳ２４０が、決定結果を受け付けると、変換管理テーブル６００のアプリの識別情報の項目６０１にアプリ＃Ａの識別情報を登録し、変換状態の項目６０２に未完了を登録する。
【００６５】
図９は、変換例を示す説明図である。ＯＳ２４０が、コンパイラ９００をＣＰＵ＃１に割り当てる。ＯＳ２４１が、コンパイラ９００の割り当てを受け付けると、クロック供給回路２０９のレジスタ２２１を３に設定することにより、ＣＰＵ＃１に供給されるクロックの周波数がＣｃ＝３００［ＭＨｚ］となるように制御する。ＯＳ２４１がコンパイラ９００を実行し、コンパイラ９００がアプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１に変換する。
【００６６】
ＯＳ２４０が、ＪａｖａＶＭ９０２をＣＰＵ＃０に割り当てて、クロック供給回路２０９のレジスタ２２０を２に設定することにより、ＣＰＵ＃０に供給されるクロックの周波数がＣｂ＝２００［ＭＨｚ］となるように制御する。ＯＳ２４０が、ＪａｖａＶＭ９０２上でアプリ＃Ａをアプリ＃Ａのバイトコード７０１で実行する。
【００６７】
図１０は、コンパイラ９００とアプリ＃Ａの割り当てによる割り当て管理テーブル４００の更新例を示す説明図である。割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２にＪａｖａＶＭ：アプリ＃Ａを登録する。ＪａｖａＶＭ：アプリ＃Ａとは、ＪａｖａＶＭ９０２によってアプリ＃Ａが実行されていることを示す。割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２にコンパイラ９００を登録する。
【００６８】
図１１は、コンパイル終了例を示す説明図である。アプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコード９０１への変換が終了する。コンパイラ９００が変換管理テーブル６００のアプリの識別情報の項目６０１がアプリ＃Ａである変換状態の項目６０２に完了を登録する。そして、コンパイラ９００が終了する。
【００６９】
図１２は、変換終了後の変換管理テーブル６００の更新例を示す説明図である。変換管理テーブル６００は、アプリの識別情報の項目６０１がアプリ＃Ａである変換状態の項目６０２に完了が登録されている。
【００７０】
図１１に戻って、コンパイラ９００が終了すると、他にＣＰＵ＃１へ割り当てられているアプリケーションのスレッドがないため、ＯＳ２４１がクロック供給回路２０９のレジスタ２２１の値を１に設定する。これにより、ＣＰＵ＃１へ与えられるクロックの周波数が１００［ＭＨｚ］となる。ＯＳ２４１が割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２からコンパイラ９００を削除する。
【００７１】
ＯＳ２４０が、アプリ＃Ａのバイトコード７０１からアプリ＃Ａのネイティブコード９０１への変換終了通知を受け付けると、ＪａｖａＶＭ９０２を終了させる。ＯＳ２４０が、クロック供給回路２０９のレジスタ２２０の値を１に設定する。これにより、ＣＰＵ＃０へ与えられるクロックの周波数が１００［ＭＨｚ］となる。ＯＳ２４０が、アプリ＃Ａをアプリ＃Ａのネイティブコード９０１で実行する。ＯＳ２４０が、割り当て管理テーブル４００のＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２からＪａｖａＶＭ：アプリ＃Ａを削除して、アプリ＃Ａを登録する。
【００７２】
図１３は、変換終了後の割り当て管理テーブル４００の更新例を示す説明図である。割り当て管理テーブル４００では、ＣＰＵの識別情報の項目４０１がＣＰＵ＃１であるアプリの識別情報の項目４０２からコンパイラ９００が削除されている。割り当て管理テーブル４００では、ＣＰＵの識別情報の項目４０１がＣＰＵ＃０であるアプリの識別情報の項目４０２にアプリ＃Ａが登録されている。
【００７３】
（ダウンロード時の各ＯＳによる変換制御処理）
図１４は、ダウンロード時の各ＯＳによる変換制御処理手順の一例を示すフローチャートである。ダウンロードに関しては、いずれのＯＳが行ってもよい。ＯＳが、対象アプリケーションをダウンロードすると（ステップＳ１４０１）、コンパイルスケジューラ７００を起動する（ステップＳ１４０２）。ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けたか否かを判断する（ステップＳ１４０３）。
【００７４】
ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けていないと判断した場合（ステップＳ１４０３：Ｎｏ）、ステップＳ１４０３へ戻る。ＯＳが、コンパイルスケジューラ７００から決定結果を受け付けたと判断した場合（ステップＳ１４０３：Ｙｅｓ）、決定結果がダウンロードしたアプリケーションを変換することを示すか否かを判断する（ステップＳ１４０４）。
【００７５】
ＯＳが、決定結果がダウンロードしたアプリケーションを変換することを示している場合（ステップＳ１４０４：Ｙｅｓ）、負荷が小さいＣＰＵにコンパイラ９００を割り当て（ステップＳ１４０５）、ステップＳ１４０６へ移行する。ステップＳ１４０４において、ＯＳが、決定結果がダウンロードしたアプリケーションを変換しないことを示している場合（ステップＳ１４０４：Ｎｏ）、ステップＳ１４０６へ移行する。ＯＳが、ダウンロードしたアプリケーションを負荷が小さいＣＰＵによりＪａｖａＶＭ上で実行し（ステップＳ１４０６）、一連の処理を終了する。
【００７６】
（実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順）
図１５は、実施例１にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。コンパイルスケジューラ７００が、対象アプリケーションの実行時間（Ｔ）とコード量（Ｃｏｄｅ）を取得し（ステップＳ１５０１）、Ｔｃ＝ｋ×Ｃｏｄｅ＋Ｃを算出し（ステップＳ１５０２）、Ｔｎ＝Ｔ−Ｔｃを算出する（ステップＳ１５０３）。コンパイルスケジューラ７００が、Ｐと、Ｐｃと、Ｐｎとを取得し（ステップＳ１５０４）、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎであるか否かを判断する（ステップＳ１５０５）。
【００７７】
コンパイルスケジューラ７００が、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎであると判断した場合（ステップＳ１５０５：Ｙｅｓ）、ネイティブコードへ変換すると決定する（ステップＳ１５０６）。コンパイルスケジューラ７００が、Ｐｃ×Ｔｃ＋Ｐｎ×Ｔｎ＜Ｐ×Ｔｎでないと判断した場合（ステップＳ１５０５：Ｎｏ）、ネイティブコードへ変換しないと決定する（ステップＳ１５０７）。コンパイルスケジューラ７００が、ステップＳ１５０６、ステップＳ１５０７のつぎに、決定結果をＯＳへ通知し（ステップＳ１５０８）、一連の処理を終了する。
【００７８】
（各ＯＳによるプログラム実行処理手順）
図１６は、各ＯＳによるプログラム実行処理手順を示すフローチャートである。ＯＳが、ディスパッチまたはスイッチ、または処理終了を検出したか否かを判断する（ステップＳ１６０１）。ＯＳが、ディスパッチまたはスイッチ、および処理終了を検出していないと判断した場合（ステップＳ１６０１：Ｎｏ）、ステップＳ１６０１へ戻る。
【００７９】
ＯＳが、ディスパッチまたはスイッチを検出したと判断した場合（ステップＳ１６０１：ディスパッチまたはスイッチ）、ステップＳ１６０２へ移行する。ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーション、またはコンパイラ９００であるか否かを判断する（ステップＳ１６０２）。ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーション、およびコンパイラ９００でないと判断した場合（ステップＳ１６０２：Ｎｏ）、クロックの周波数をＣｂに設定する（ステップＳ１６０３）。そして、ＯＳが、ＪａｖａＶＭ上でアプリケーションをバイトコードで実行し（ステップＳ１６０４）、ステップＳ１６０１へ戻る。
【００８０】
ＯＳが、ディスパッチまたはスイッチされたアプリケーションがネイティブコードへ変換するアプリケーションであると判断した場合（ステップＳ１６０２：変換）、ネイティブコードに変換済か否かを判断する（ステップＳ１６０５）。ＯＳが、ネイティブコードに変換済でないと判断した場合（ステップＳ１６０５：Ｎｏ）、ステップＳ１６０３へ移行する。ＯＳが、ネイティブコードに変換済であると判断した場合（ステップＳ１６０５：Ｙｅｓ）、クロックの周波数をＣｎに設定し（ステップＳ１６０６）、アプリケーションをネイティブコードで実行し（ステップＳ１６０７）、ステップＳ１６０１へ戻る。
【００８１】
ＯＳが、ディスパッチまたはスイッチされたアプリケーションがコンパイラ９００であると判断した場合（ステップＳ１６０２：コンパイラ）、クロックの周波数をＣｃに設定する（ステップＳ１６０８）。ＯＳが、コンパイラ９００を実行し（ステップＳ１６０９）、ステップＳ１６０１へ戻る。
【００８２】
ＯＳが、処理終了を検出したと判断した場合（ステップＳ１６０１：処理終了）、処理終了が検出されたアプリケーションはコンパイラ９００であるか否かを判断する（ステップＳ１６１０）。ＯＳが、処理終了が検出されたアプリケーションはコンパイラ９００であると判断した場合（ステップＳ１６１０：Ｙｅｓ）、変換管理テーブル６００を更新し（ステップＳ１６１１）、すべてのアプリケーションの処理が終了したか否かを判断する（ステップＳ１６１２）。
【００８３】
ＯＳが、すべてのアプリケーションの処理が終了していないと判断した場合（ステップＳ１６１２：Ｎｏ）、ステップＳ１６０１へ戻る。ＯＳが、すべてのアプリケーションの処理が終了したと判断した場合（ステップＳ１６１２：Ｙｅｓ）、一連の処理を終了する。ステップＳ１６１０において、処理終了が検出されたアプリケーションはコンパイラ９００でないと判断した場合（ステップＳ１６１０：Ｎｏ）、ステップＳ１６１２へ移行する。
【００８４】
（実施例２）
図１７は、実施例２にかかる判断例を示す説明図である。実施例２では、ＰｃをＹ×Ｐとし、ＰｎをＸ×Ｐとする。すなわち、Ｘは、バイトコードでの実行時の単位時間当たりの消費電力の値に対するネイティブコードでの実行時の単位時間当たりの消費電力の値の比率である。Ｙは、バイトコードでの実行時の単位時間当たりの消費電力の値に対するコンパイラ９００を実行時の単位時間当たりの消費電力の値の比率である。
【００８５】
グラフ１７００では、バイトコードからネイティブコードに変換しつつバイトコードで実行し、変換終了後にネイティブコードで実行する場合の消費電力を示している。グラフ１７０１では、バイトコードで実行する場合の消費電力を示している。図１７については、下記式（４）のように表すことができる。
【００８６】
Ｐ×Ｔｃ＋Ｙ×Ｐ×Ｔｃ＋Ｘ×Ｐ×Ｔｎ＜Ｐ×Ｔ  ・・・（４）
【００８７】
ここで、ＴｃとＴｎについてはそれぞれ上述の式（１），（２）により算出される。そして、式（４）はＰで共通化されると、下記式（５）の様になる。
【００８８】
（１＋Ｙ）×Ｔｃ＋Ｘ×Ｔｎ＜Ｔ  ・・・（５）
【００８９】
コンパイルスケジューラ７００は、式（５）が成り立てば、バイトコードからネイティブコードへ変換すると決定する。コンパイルスケジューラ７００は、式（５）が成り立たなければ、バイトコードからネイティブコードへ変換しないと決定する。
【００９０】
実施例２では、実施例１と同様にアプリ＃Ａがダウンロードされた場合において、式（３）に代わって前述した式（４）または式（５）が成り立つか否かによって、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１へ変換するか否かを決定する。実施例２では、ＯＳ２４０やＯＳ２４１の処理については実施例１で示した処理と同一であるため、コンパイルスケジューラ７００の処理のみ詳細に説明する。また、ＸとＹについてはあらかじめ消費電力テーブルに格納されていることとする。
【００９１】
図１８は、実施例２で用いる消費電力テーブルの一例を示す説明図である。消費電力テーブル１８００は、実行の項目１８０１と、クロック周波数の項目１８０２と、比率の項目１８０３と、を有している。実行の項目１８０１には、ネイティブコードでの実行と、バイトコードでの実行と、コンパイラの実行と、が登録されている。クロック周波数の項目１８０２には、実行の項目１８０１に登録された実行時にＣＰＵへ供給するクロックの周波数が登録されている。
【００９２】
消費電力テーブル１８００では、コンパイラ９００の実行時にＣＰＵへ与えるクロックの周波数（Ｃｃ）が３００［ＭＨｚ］であり、ネイティブコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｎ）は１００［ＭＨｚ］である。消費電力テーブル１８００では、バイトコードでの実行時にＣＰＵへ与えるクロックの周波数（Ｃｂ）は２００［ＭＨｚ］である。Ｃｎ＜Ｃｂ＜Ｃｃである。
【００９３】
比率の項目１８０３には、バイトコードでの実行時の単位時間当たりの消費電力と実行の項目１８０１に登録された実行時の単位時間当たりの消費電力との比率が登録されている。Ｐｃ（Ｙ×Ｐ）が１００［ｍＷ］であり、Ｐｎ（Ｘ×Ｐ）が２５［ｍＷ］であり、Ｐが５０［ｍＷ］であるため、消費電力テーブル１８００では、Ｘ（０＜Ｘ＜１）が１／２であり、Ｙ（１＜Ｙ）が２である。消費電力テーブル１８００は、ＲＡＭ２０６、１次キャッシュ２３０および１次キャッシュ２３１、２次キャッシュ２１１などの記憶装置に記憶されていることとする。
【００９４】
ＴｃとＴｎは実施例１と同様に下記とする。
・Ｔｃ＝９０［ｍｓ］
・Ｔｎ＝４１０［ｍｓ］
【００９５】
コンパイルスケジューラ７００が、消費電力テーブル１８００からＸとＹとを取得し、式（５）を判断する。
・式（５）の左辺＝（１＋２）×９０［ｍｓ］＋（１／２）×４１０［ｍｓ］
＝２７０＋２０５
＝４７５
・式（５）の右辺＝５００［ｍｓ］
【００９６】
式（５）の左辺が式（５）の右辺よりも小さいので、式（５）が成り立つため、コンパイルスケジューラ７００が、アプリ＃Ａのバイトコード７０１をアプリ＃Ａのネイティブコード９０１に変換すると決定する。コンパイルスケジューラ７００が、決定結果をＯＳへ通知する。ＯＳが決定結果を受け付け後の処理については実施例１と同一であるため、詳細な説明を省略する。
【００９７】
つぎに、各ＯＳによるプログラム実行処理手順やコンパイルスケジューラ７００によるプログラム変換制御処理手順について説明する。実施例２にかかる各ＯＳのプログラム実行処理手順については実施例１で説明した各ＯＳのプログラム実行処理手順と同一であるため、詳細な説明は省略する。
【００９８】
（実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順）
図１９は、実施例２にかかるコンパイルスケジューラ７００による変換制御処理手順の一例を示すフローチャートである。コンパイルスケジューラ７００が、対象アプリケーションの実行時間（Ｔ）と対象アプリケーションのバイトコードのコード量（Ｃｏｄｅ）を取得し（ステップＳ１９０１）、Ｔｃ＝ｋ×Ｃｏｄｅ＋Ｃを算出し（ステップＳ１９０２）、Ｔｎ＝Ｔ−Ｔｃを算出する（ステップＳ１９０３）。コンパイルスケジューラ７００が、ＸとＹを取得し（ステップＳ１９０４）、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔであるか否かを判断する（ステップＳ１９０５）。
【００９９】
コンパイルスケジューラ７００が、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔであると判断した場合（ステップＳ１９０５：Ｙｅｓ）、ネイティブコードへ変換すると決定する（ステップＳ１９０６）。コンパイルスケジューラ７００が、（１＋Ｙ）Ｔｃ＋Ｘ×Ｔｎ＜Ｔでないと判断した場合（ステップＳ１９０５：Ｎｏ）、ネイティブコードへ変換しないと決定する（ステップＳ１９０７）。コンパイルスケジューラ７００が、ステップＳ１９０６、ステップＳ１９０７のつぎに、決定結果をＯＳへ通知し（ステップＳ１９０８）、一連の処理を終了する。
【０１００】
以上説明したように、プログラム実行方法によれば、対象アプリケーションのバイトコードをネイティブコードに変換して対象アプリケーションを実行するか否かを、各コードでの実行時の消費電力の値に基づいて決定する。これにより、消費電力を抑制することができ、ネイティブコードに変換して対象アプリケーションを実行する場合、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０１】
また、バイトコードでの実行時の消費電力の値が、ネイティブコードでの実行時の消費電力の値よりも小さいとき、対象アプリケーションのバイトコードをネイティブコードに変換せず、対象アプリケーションをバイトコードで実行する。これにより、消費電力を抑制することができる。
【０１０２】
また、ネイティブコードでの実行時の消費電力の値を、対象アプリケーションの実行時間とバイトコードからネイティブコードへの変換時間と、ＣＰＵの性能とに基づいて算出する。これにより、各ＣＰＵの性能によって異なる単位時間当たりの消費電力の値によってネイティブコードでの実行時の消費電力の値が変化することが表され、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０３】
また、変換時間は、バイトコードのコード量に基づいて算出する。これにより、コード量が増えると、コンパイラによる変換時間が長くなるため、ネイティブコードでの実行時に消費電力の値が増加することを表すことができる。したがって、実行前に算出するネイティブコードでの実行時に消費電力の値の精度を向上させることができる。
【０１０４】
また、変換時間は、ＣＰＵの特性に基づいて算出する。ＣＰＵの特性によってはコンパイラによる変換に時間がかかり変換時間が長くなる。すなわち、端末によって変換時間が変わることが表され、実行前に算出するネイティブコードでの実行時に消費電力の値の精度を向上させることができる。さらに、変換時間が端末によって変わるため、端末の性能によって変換するか否かが異なり、各端末の性能に沿ったコードでアプリケーションを実行させることができる。
【０１０５】
また、バイトコードからネイティブコードへの変換時にＣＰＵへ与えられるクロックの周波数を、バイトコードでの実行時にＣＰＵへ与えられるクロックの周波数よりも高くする。変換とバイトコードでの実行とを同時に行うと消費電力が増大するが、変換時のクロック周波数が高くなることで、変換時間を短縮することができ、消費電力を削減することができる。
【０１０６】
また、ネイティブコードでの実行時にＣＰＵへ与えられるクロックの周波数を、バイトコードでの実行時にＣＰＵへ与えられるクロックの周波数よりも低くする。ネイティブコードでの実行は、バイトコードでの実行よりも処理量が少ないため、ネイティブコードでの実行時にクロックの周波数が低くても、バイトコードでの実行時に要求された動作を満たすことができる。よって、ネイティブコードでの実行時にクロックの周波数を低くすることで、消費電力を抑制することができる。
【０１０７】
また、コンパイルスケジューラが、バイトコードからネイティブコードに変換するか否かを判断することで、ＯＳの実行に負荷がかかるのを防止することができる。
【０１０８】
また、バイトコードからネイティブコードへの変換中に、アプリケーションをバイトコードで実行する。変換終了後にアプリケーションをネイティブコードで実行することにより、ダウンロードしてすぐにアプリケーションを実行させる場合に、ユーザの応答性を向上させることができる。
【０１０９】
なお、プログラム実行方法は、あらかじめ用意されたプログラムをマルチコアプロセッサのうちのいずれかのＣＰＵで実行することにより実現することができる。たとえば、実施例１，２では該プログラムはＯＳ２４０やＯＳ２４１やコンパイルスケジューラ７００に含まれている。また、該プログラムは、フラッシュＲＯＭ２０５などのマルチコアプロセッサのいずれかのＣＰＵが読み取り可能な記録媒体に記録され、マルチコアプロセッサのいずれかのＣＰＵによって記録媒体から読み出されることによって実行されてもよい。また、該プログラムは、インターネット等のネットワークを介して配布されてもよい。
【０１１０】
上述した実施の形態１および２に関し、さらに以下の付記を開示する。
【０１１１】
（付記１）コンピュータが、
第１のコードによって記述される第１プログラムの実行時の第１の消費電力を算出し、
前記第１プログラムと同じ機能を有するとともに第２のコードによって記述される第２プログラムの実行時の第２の消費電力を算出し、
前記第２の消費電力が前記第１の消費電力よりも小さいとき、前記第１プログラムを前記第２プログラムに変換して前記第２プログラムを実行すること
を特徴とするプログラム実行方法。
【０１１２】
（付記２）前記第２の消費電力が前記第１の消費電力よりも大きいとき、前記第１プログラムを実行すること
を特徴とする付記１に記載のプログラム実行方法。
【０１１３】
（付記３）前記第２の消費電力は、
前記第１プログラムの実行時間、前記第１プログラムを前記第２プログラムに変換するときの変換時間、および前記コンピュータに含まれるＣＰＵの特性に基づいて算出されること
を特徴とする付記１または付記２に記載のプログラム実行方法。
【０１１４】
（付記４）前記変換時間は、前記第１プログラムの第１のコード量に基づいて算出されること
を特徴とする付記３に記載のプログラム実行方法。
【０１１５】
（付記５）さらに、前記変換時間は、
前記コンピュータに含まれるＣＰＵの特性に基づいて算出されること
を特徴とする付記４に記載のプログラム実行方法。
【０１１６】
（付記６）前記第１プログラムを前記第２プログラムに変換するときに設定される第２クロックの周波数を、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも高く設定すること
を特徴とする付記１乃至付記５の何れか一に記載のプログラム実行方法。
【０１１７】
（付記７）前記第２プログラムを実行するときに設定される第３クロックの周波数は、前記第１プログラムを実行するときに設定される第１クロックの周波数よりも低く設定されること
を特徴とする付記１乃至付記６の何れか一に記載のプログラム実行方法。
【０１１８】
（付記８）コンパイルスケジューラを起動し、
前記コンパイルスケジューラが前記第１プログラムを前記第２プログラムに変換するか否かを判定すること
を特徴とする付記１乃至付記７の何れか一に記載のプログラム実行方法。
【０１１９】
（付記９）前記第１プログラムを前記第２プログラムに変換する間に前記第１プログラムを実行し、
前記変換終了後に前記第２プログラムを実行すること
を特徴とする付記１乃至付記８の何れか一に記載のプログラム実行方法。
【符号の説明】
【０１２０】
７００  コンパイルスケジューラ
７０１  アプリ＃Ａのバイトコード
９００  コンパイラ
９０１  アプリ＃Ａのネイティブコード
＃０，＃１  ＣＰＵ
【国際調査報告】
2012105000.tif 000022
2012105000.tif 000023
2012105000.tif 000024
2012105000.tif 000025