(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイス上で実行中に電力を節約するためにオブジェクトコードを最適化するための方法であって、
コンピューティングデバイスのシステムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信するステップと、
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別するステップと、
初期の電源から異なる電源への接続の変更を検知するステップと、
前記初期の電源から前記異なる電源への前記接続の変更を検知したことに応答して、前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するステップと、
前記コンピューティングデバイスのプロセッサ上で前記電力最適化オブジェクトコードを実行するステップと
を含む、方法。
【請求項２】
前記コンパイルされたバイナリオブジェクトコードを受信する前記システムソフトウェアが、システム仮想マシンまたはハイパーバイザのうちの1つである、請求項1に記載の方法。
【請求項３】
前記コンパイルされたバイナリオブジェクトコードを受信する前記システムソフトウェアが、オペレーティングシステムである、請求項1に記載の方法。
【請求項４】
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するステップが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換するステップを含む、請求項1に記載の方法。
【請求項５】
前記第1の命令セットアーキテクチャが、前記第2の命令セットアーキテクチャと同じ命令セットアーキテクチャである、請求項4に記載の方法。
【請求項６】
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別するステップが、前記識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定するステップを含み、
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するステップが、変換中、前記識別されたオブジェクトコードの動作を前記代替の動作と交換するステップを含む、
請求項1に記載の方法。
【請求項７】
前記受信されたバイナリオブジェクトコードを解析するステップが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別するステップを含む、請求項1に記載の方法。
【請求項８】
電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定するステップと、
前記測定された電力消費量を前記電力消費モデルの予測値と比較するステップと、
前記比較の結果に基づいて前記電力消費モデルを修正するステップと
をさらに含む、請求項7に記載の方法。
【請求項９】
電力節約を改善するために、実行中にオブジェクトコードを最適化するように構成されたコンピューティングデバイスであって、
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信するための手段と、
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別するための手段と、
初期の電源から異なる電源への接続の変更を検知するための手段と、
前記初期の電源から前記異なる電源への前記接続の変更を検知したことに応答して、前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段と、
コンピューティングデバイスのプロセッサ上で前記電力最適化オブジェクトコードを実行するための手段と
を備える、コンピューティングデバイス。
【請求項１０】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信するための手段が、システム仮想マシンまたはハイパーバイザのうちの1つで、前記コンパイルされたバイナリオブジェクトコードを受信する手段を備える、請求項9に記載のコンピューティングデバイス。
【請求項１１】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信するための手段が、オペレーティングシステムで、前記コンパイルされたバイナリオブジェクトコードを受信する手段を備える、請求項9に記載のコンピューティングデバイス。
【請求項１２】
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段が、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換するための手段を備える、請求項9に記載のコンピューティングデバイス。
【請求項１３】
第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換するための手段が、前記第1の命令セットアーキテクチャを前記第2の命令セットアーキテクチャと同じ命令セットアーキテクチャに変換するための手段を備える、請求項12に記載のコンピューティングデバイス。
【請求項１４】
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別するための手段が、前記識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定するための手段を備え、
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段が、変換中、前記識別されたオブジェクトコードの動作を前記代替の動作と交換するための手段を備える、
請求項9に記載のコンピューティングデバイス。
【請求項１５】
前記受信されたバイナリオブジェクトコードを解析するための手段が、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別するための手段を備える、請求項9に記載のコンピューティングデバイス。
【請求項１６】
電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定するための手段と、
前記測定された電力消費量を前記電力消費モデルの予測値と比較するための手段と、
前記比較の結果に基づいて前記電力消費モデルを修正するための手段と
をさらに備える、請求項15に記載のコンピューティングデバイス。
【請求項１７】
メモリと、
前記メモリに結合された1つまたは複数のプロセッサとを備えるコンピューティングデバイスであって、
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することと、
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別することと、
初期の電源から異なる電源への接続の変更を検知することと、
前記初期の電源から前記異なる電源への前記接続の変更を検知したことに応答して、前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することと、
前記電力最適化オブジェクトコードを実行することと
を含む動作をコンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、コンピューティングデバイス。
【請求項１８】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することが、システム仮想マシンまたはハイパーバイザのうちの1つで、前記コンパイルされたバイナリオブジェクトコードを受信することを含むような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項17に記載のコンピューティングデバイス。
【請求項１９】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することが、オペレーティングシステムで、前記コンパイルされたバイナリオブジェクトコードを受信することを含むような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項17に記載のコンピューティングデバイス。
【請求項２０】
前記動的バイナリトランスレータのプロセス内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含むような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項17に記載のコンピューティングデバイス。
【請求項２１】
前記第1の命令セットアーキテクチャが前記第2の命令セットアーキテクチャと同じであるような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項20に記載のコンピューティングデバイス。
【請求項２２】
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別することが、前記識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含み、
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、変換中、前記識別されたオブジェクトコードの動作を前記代替の動作と交換することを含むような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項17に記載のコンピューティングデバイス。
【請求項２３】
前記受信されたバイナリオブジェクトコードを解析することが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含むような動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項17に記載のコンピューティングデバイス。
【請求項２４】
電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定することと、
前記測定された電力消費量を前記電力消費モデルの予測値と比較することと、
前記比較の結果に基づいて前記電力消費モデルを修正することと
をさらに含む動作を前記コンピューティングデバイスが実行するように、前記1つまたは複数のプロセッサがプロセッサ実行可能命令で構成された、請求項23に記載のコンピューティングデバイス。
【請求項２５】
コンピューティングデバイス上で実行中に電力を節約するためにオブジェクトコードを最適化するための動作をプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した、プロセッサ可読記憶媒体であって、前記動作が、
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することと、
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータ内で解析して、電力を節約するために最適化できるコードセグメントを識別することと、
初期の電源から異なる電源への接続の変更を検知することと、
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することと、
前記初期の電源から前記異なる電源への前記接続の変更を検知したことに応答して、前記コンピューティングデバイスのプロセッサ上で前記電力最適化オブジェクトコードを実行することと
を含む、プロセッサ可読記憶媒体。
【請求項２６】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することが、システム仮想マシンまたはハイパーバイザのうちの1つで、前記コンパイルされたバイナリオブジェクトコードを受信することを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項25に記載のプロセッサ可読記憶媒体。
【請求項２７】
システムソフトウェア内で、コンパイルされたバイナリオブジェクトコードを受信することが、オペレーティングシステムで、前記コンパイルされたバイナリオブジェクトコードを受信することを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項25に記載のプロセッサ可読記憶媒体。
【請求項２８】
前記動的バイナリトランスレータ内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項25に記載のプロセッサ可読記憶媒体。
【請求項２９】
前記第1の命令セットアーキテクチャが前記第2の命令セットアーキテクチャと同じであるような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項28に記載のプロセッサ可読記憶媒体。
【請求項３０】
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータプロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することが、前記識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含み、
前記動的バイナリトランスレータプロセス内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、変換中、前記識別されたオブジェクトコードの動作を前記代替の動作と交換することを含む
ような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項25に記載のプロセッサ可読記憶媒体。
【請求項３１】
前記受信されたバイナリオブジェクトコードを解析することが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含むような動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項25に記載のプロセッサ可読記憶媒体。
【請求項３２】
電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定することと、
前記測定された電力消費量を前記電力消費モデルの予測値と比較することと、
前記比較の結果に基づいて前記電力消費モデルを修正することと
をさらに含む動作をプロセッサに実行させるように、前記記憶されたプロセッサ実行可能ソフトウェア命令が構成された、請求項31に記載のプロセッサ可読記憶媒体。
【請求項３３】
メモリと、
前記メモリに結合された1つまたは複数のコアとを備えるシステムオンチップであって、
オペレーティングシステム内で、コンパイルされたバイナリオブジェクトコードを受信することと、
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータプロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することと、
初期の電源から異なる電源への接続の変更を検知することと、
前記初期の電源から前記異なる電源への前記接続の変更を検知したことに応答して、前記動的バイナリトランスレータプロセス内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することと、
前記電力最適化オブジェクトコードを実行することと
を含む動作をシステムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、システムオンチップ。
【請求項３４】
前記動的バイナリトランスレータプロセス内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含むような動作を前記システムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、請求項33に記載のシステムオンチップ。
【請求項３５】
前記第1の命令セットアーキテクチャが前記第2の命令セットアーキテクチャと同じであるような動作を前記システムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、請求項34に記載のシステムオンチップ。
【請求項３６】
前記受信されたバイナリオブジェクトコードをマシンレイヤで動作する動的バイナリトランスレータプロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することが、前記識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含み、
前記動的バイナリトランスレータプロセス内で、前記受信されたバイナリオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、変換中、前記識別されたオブジェクトコードの動作を前記代替の動作と交換することを含む
ような動作を前記システムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、請求項33に記載のシステムオンチップ。
【請求項３７】
前記受信されたバイナリオブジェクトコードを解析することが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含むような動作を前記システムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、請求項33に記載のシステムオンチップ。
【請求項３８】
電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定することと、
前記測定された電力消費量を前記電力消費モデルの予測値と比較することと、
前記比較の結果に基づいて前記電力消費モデルを修正することと
を含む動作を前記システムオンチップが実行するように、前記1つまたは複数のコアがプロセッサ実行可能命令で構成された、請求項37に記載のシステムオンチップ。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その内容全体が参照によって本明細書に組み込まれる、2011年9月20日に出願した「Dynamic Power Optimization For Computing Devices」と題する米国仮出願第61/536,684号の優先権の利益を主張するものである。
【背景技術】
【０００２】
セルラー通信技術およびワイヤレス通信技術は、過去数年の間に爆発的な発展をとげてきた。この発展は、より優れた通信、ハードウェア、より大きいネットワーク、およびより信頼できるプロトコルによって促進されている。ワイヤレスサービスプロバイダは今や、拡大し続ける多数の特徴およびサービスを顧客に提案し、情報、リソースおよび通信への、前例のないレベルのアクセスをユーザに提供することができる。これらのサービスの向上に遅れをとらないように、モバイル電子デバイス(たとえば、携帯電話、タブレット、ラップトップなど)は、かつてないほど強力になっている。モバイルデバイスのユーザは今や、電源に有線接続せずに、自分のモバイルデバイス上で、複数の複雑で電力所費の高いソフトウェアアプリケーションおよびサービスを日常的に実行する。結果として、モバイルデバイスのバッテリ寿命および電力消費特性は、モバイルデバイスの消費者にとって、一層重要な考慮事項になっている。
【０００３】
増加したバッテリ寿命により、ユーザがより長い期間ワイヤレスデバイスでより多くのことをすることが可能になるので、ユーザエクスペリエンスが最大化される。バッテリ寿命を最大化するために、モバイルデバイスは、通常、動的な電圧および周波数のスケーリング技法を使用して、モバイルデバイスの電力消費を最適化するように試みる。これらの技法により、重要でないアプリケーションまたは低負荷状態が検出されたとき、プログラム可能なデバイスパイプラインが低電力および/または低性能で走ることが可能になる。たとえば、モバイルデバイスは、アイドル状態のとき、1つまたは複数のプロセッサおよび/またはリソースを低電力状態に置くように構成することができる。これらの技法により、バッテリ性能全体が改善される可能性があるが、デバイスのプロセッサおよび/またはリソースがアイドル状態に置かれることが必要であり、デバイス上で実行される個々のアプリケーションまたはプロセスの電力消費特性を改善することはできない。このように、既存の技法は、デバイス上で消費するエネルギーを少なくするようにアプリケーションを適合させる代わりに、デバイス上で走るソフトウェアアプリケーションにモバイルデバイスの挙動を適合させるように試みる。多くの最新のソフトウェアアプリケーションは電力集中型の処理を必要とするので、プロセスの性能を変更せずに、デバイス上で実行されるプロセスの電力消費を削減することは、ユーザエクスペリエンスを大幅に向上させる。
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な態様は、コンパイルされたバイナリオブジェクトコードをシステムソフトウェア内で受信すること、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別すること、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換(instruction-sequence to instruction-sequence translation)を実行して、電力最適化オブジェクトコードを生成すること、およびコンピューティングデバイスのプロセッサ上で電力最適化オブジェクトコードを実行することを含む、コンピューティングデバイス上で実行中に電力を節約するためにオブジェクトコードを最適化する方法を含む。一態様では、コンパイルされたバイナリオブジェクトコードを受信するシステムソフトウェアは、システム仮想マシンまたはハイパーバイザのうちの1つである。一態様では、コンパイルされたバイナリオブジェクトコードを受信するシステムソフトウェアは、オペレーティングシステムである。一態様では、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することは、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含む。一態様では、第1の命令セットアーキテクチャは第2の命令セットアーキテクチャと同じである。一態様では、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することは、識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含み、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することは、変換中、識別されたオブジェクトコードの動作を代替の動作と交換することを含む。一態様では、方法は、新しい電源への接続を検知することをさらに含む。一態様では、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成すること
は、新しい電源への接続が検出されたときに実行される。一態様では、受信されたオブジェクトコードを解析することは、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含む。一態様では、方法は、電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定すること、測定された消費電力量を電力消費モデルの予測値と比較すること、および比較の結果に基づいて電力消費モデルを修正することをさらに含む。
【０００５】
さらなる態様は、コンパイルされたバイナリオブジェクトコードをシステムソフトウェア内で受信するための手段、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別するための手段、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段、およびコンピューティングデバイスのプロセッサ上で電力最適化オブジェクトコードを実行するための手段を含む、電力節約を改善するために実行中のオブジェクトコードを最適化するように構成されたコンピューティングデバイスを含む。一態様では、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段は、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換するための手段を含む。一態様では、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換するための手段は、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャと同じ命令セットアーキテクチャに変換するための手段を含む。一態様では、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別するための手段は、識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定するための手段を含む。一態様では、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段は、変換中、識別されたオブジェクトコードの動作を代替の動作と交換するための手段を含む。一態様では、コンピューティングデバイスは、新しい電源への接続を検知するための手段をさらに含む。一態様では、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成するための手段は、新しい電源への接続が検出されたときに、受信されたコードを変換して電力最適化コードを生成するための手段を含む。一態様では、受信されたオブジェクトコードを解析するための手段は、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別するための手段を含む。一態様では、コンピューティングデバイスは、電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定するための手段、測定された消費電力量を電力消費モデルの予測値と比較するための手段、および比較の結果に基づいて電力消費モデルを修正するための手段をさらに含む。
【０００６】
さらなる態様は、メモリおよびメモリに結合されたプロセッサを含むコンピューティングデバイスを含み、その中でプロセッサは、コンパイルされたバイナリオブジェクトコードをシステムソフトウェア内で受信すること、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別すること、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成すること、およびコンピューティングデバイスのプロセッサ上で電力最適化オブジェクトコードを実行することを含む動作を実行するように、プロセッサ実行可能命令で構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、第1の命令セットアーキテクチャが第2の命令セットアーキテクチャと同じ命令セットアーキテクチャであるような動作を、プロセッサに実行させるように構成される。
【０００７】
一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することが、識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含み、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、変換中、識別されたオブジェクトコードの動作を代替の動作と交換することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、新しい電源への接続を検知することを含む動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、新しい電源への接続が検知されたときに実行されるような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、受信されたオブジェクトコードを解析することが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定すること、測定された消費電力量を電力消費モデルの予測値と比較すること、および比較の結果に基づいて電力消費モデルを修正することをさらに含む動作を、プロセッサに実行させるように構成される。
【０００８】
さらなる態様は、コンピューティングデバイス上で実行中に電力を節約するためにオブジェクトコードを最適化するための動作をプロセッサに実行させるように構成されたプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読記憶媒体を含み、動作は、コンパイルされたバイナリオブジェクトコードをシステムソフトウェア内で受信すること、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別すること、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成すること、およびコンピューティングデバイスのプロセッサ上で電力最適化オブジェクトコードを実行することを含む。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、第1の命令セットアーキテクチャを第2の命令セットアーキテクチャに変換することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、第1の命令セットアーキテクチャが第2の命令セットアーキテクチャと同じ命令セットアーキテクチャであるような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、受信されたオブジェクトコードをマシンレイヤで動作する動的バイナリ変換プロセス内で解析して、電力を節約するために最適化できるコードセグメントを識別することが、識別されたオブジェクトコードの動作と同じ結果を実現する代替の動作があるかどうかを判定することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、変換中、識別されたオブジェクトコードの動作を代替の動作と交換することを含むような動作を、プロセッサに実行させるようにさらに構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、新しい電源への接続を検知することを含む動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、動的バイナリ変換プロセス内で、受信されたオブジェクトコードの命令シーケンスごとの変換を実行して、電力最適化オブジェクトコードを生成することが、新しい電源への接続が検知されたときに実行されるような動作を、プロセッサに実行させるようにさらに構成される。一態様では、記憶されたプロセッサ実行可能ソフトウェア命令は、受信されたオブジェクトコードを解析することが、電力消費モデルを使用して、電力効率のために最適化できるオブジェクトコードのセグメントを識別することを含むような動作を、プロセッサに実行させるように構成される。一態様では、記憶されたプロセッサ実行可能ソフ��ウェア命令は、電力最適化オブジェクトコードのセグメントの実行中に消費される電力量を測定すること、測定された消費電力量を電力消費モデルの予測値と比較すること、および比較の結果に基づいて電力消費モデルを修正することをさらに含む動作を、プロセッサに実行させるように構成される。
【０００９】
本明細書に組み込まれ、本明細書の一部を成す添付の図面は、本発明の例示的実施形態を示し、上記の全般的な説明および下記の詳細な説明とともに、本発明の特徴を説明する働きをする。
【図面の簡単な説明】
【００１０】
【図１】様々な態様を実装するのに適したコンピューティングシステム内の論理的な構成要素およびインターフェースを示す、階層化されたコンピュータのアーキテクチャ図である。
【図２Ａ】様々な態様を実装するのに適したフォーマットでコードを配布するための論理的な構成要素およびコード変換を示すプロセスフロー図である。
【図２Ｂ】様々な態様を実装するのに適したフォーマットでコードを配布するための論理的な構成要素およびコード変換を示すプロセスフロー図である。
【図３Ａ】様々な態様を実装するのに適した仮想マシン内の論理的な構成要素を示す、階層化されたコンピュータのアーキテクチャ図である。
【図３Ｂ】様々な態様を実装するのに適した仮想マシン内の論理的な構成要素を示す、階層化されたコンピュータのアーキテクチャ図である。
【図４】一態様によるシステム仮想マシンの論理的な構成要素およびデータフローを示す構成要素ブロック図である。
【図５】最適化されたオブジェクトコードを生成するための態様方法を示すプロセスフロー図である。
【図６】一態様方法により、実行中のコードの電力消費特性を測定して、生成されたオブジェクトコードを連続的に再最適化するための論理的な構成要素およびデータフローを示す構成要素フロー図である。
【図７】実行中のコードの電力消費特性を測定し、オブジェクトコードを連続的に再最適化するための態様方法を示すプロセスフロー図である。
【図８】接続された電源が検出された後、オブジェクトコードの最適化を実行するための態様方法を示すプロセスフロー図である。
【図９】様々な態様を実装するのに適したモバイルデバイスを示す構成要素ブロック図である。
【図１０】様々な態様を実装するのに適した別のモバイルデバイスを示す構成要素ブロック図である。
【発明を実施するための形態】
【００１１】
様々な態様が、添付の図面を参照して詳細に記載される。可能な場合はいつでも、同じまたは同様の部分を指すために、図面全体にわたって同じ参照番号が使用される。特定の例および実装形態に対して行われる参照は説明を目的とし、本発明の範囲または本特許請求の範囲を限定するものではない。
【００１２】
「例示的」という語は、「例、実例、または具体例として働くこと」を意味するために本明細書で使用される。本明細書で「例示的」と記載されるいかなる実装形態も、必ずしも他の実装形態よりも好ましい、または有利であると解釈されるべきではない。
【００１３】
「モバイルデバイス」および「コンピューティングデバイス」という用語は、携帯電話、携帯情報端末(PDA)、パームトップコンピュータ、ワイヤレス電子メール受信機(たとえば、Blackberry(登録商標)デバイスおよびTreo(登録商標)デバイス)、マルチメディアインターネット対応携帯電話(たとえば、Blackberry Storm(登録商標))、全地球測位システム(GPS)受信機、ワイヤレスゲームコントローラ、ならびに、プログラマブルプロセッサを含み、電力節約方法が有効であるようなバッテリ電力の元で動作する同様のパーソナル電子デバイスを指すために、本明細書で互換的に使用される。
【００１４】
「リソース」という語は、コンピューティングデバイス上で走るプロセッサおよびクライアントをサポートするために使用できる、多種多様な回路(たとえば、ポート、クロック、バス、発振器など)、構成要素(たとえば、メモリ)、信号(たとえば、クロック信号)、機能、および電圧源(たとえば、電圧レール)のうちのいずれかを指すために本明細書で使用される。
【００１５】
上記で説明されたように、バッテリ寿命を増加させるための既存の技法は、一般に、1つまたは複数のプロセッサおよび/またはリソースを低電力状態に置く。これらの技法は、デバイスのプロセッサ/リソースがアイドル状態または低周波数状態に置かれることを必要とし、アプリケーション/プロセスによって実行されるコードを変更しない。
【００１６】
様々な態様は、ハイパーバイザレイヤの内部に実装されて、実際のプロセッサ/リソースによって消費される電力量を削減できる仮想化技法を使用する方法、システム、およびデバイスを提供する。第1の態様では、仮想マシンは、実行用のオブジェクトコードを受信し、オブジェクトコードを解析して、デバイスのプロセッサによって実行されるべき動作と動作を特徴づけるパラメータとを認識し、バイナリごとの変換を実行して、オブジェクトコードを特定のモバイルデバイスのハードウェア上でより効率的に機能できる新しいオブジェクトコードに変換(transform)または変換(translate)する。このオブジェクトコードの認識および変換は、デバイス固有のモデルに従って実現することができる。所与のモバイルデバイスのプロセッサアーキテクチャに関連付けられたモデルを使用して、仮想マシンは、特定のハードウェアデバイス上でオブジェクトコードを実行することが電力集中型であり得ることを判断することができる。次いで、仮想マシンは、電力を節約するために、バイナリオブジェクトコードを異なる演算子(たとえば、シフトと加算演算対乗算演算)を有する異なる第2のオブジェクトバイナリコードに変換することができる。このように、直接のバイナリごとの変換を使用して、オブジェクトコードを処理するために消費される合計エネルギー量を削減しながら、コードの情報を保存することができる。
【００１７】
第2の態様では、オブジェクトコードによるエネルギー消費のモデルとコードを最適化するために行われる変換とは、以前最適化されたオブジェクトコードによって消費された実際の電力の測定値に基づいて更新される。このようにして、プロセッサの性能におけるロットごとのばらつきを反映できない固定モデルに依存するのではなく、オブジェクトコードを最適化するために、モバイルデバイスのプロセッサの実際の性能を使用することができる。この態様では、(いくつか例を挙げると)中央プロセッサユニット、モデムプロセッサ、およびGPS受信機プロセッサなどの、コンピューティングデバイス上の様々なプロセッサは、オブジェクトコードの実行中に消費される電力を測定するために備えることができる。電力消費を追跡して特定のオブジェクトコードの最適化変換を行うことを可能にするために、オブジェクトコードのチャンクまたは関連部分は、最適化され、変換されたときにタグ付けされる。コードがプロセッサによって実行されるとき、以下の図で示されるように、測定された電力消費量はコードタグに関連付けられ、測定値は性能予測モデルと比較される。次いで、実際の電力消費と予測された性能との間の比較が最適化プロセスにフィードバックされ、その結果、より良い最適化方法が識別され、以後のオブジェクトコードの最適化に使用することができる。次いで、次回アプリケーションがモバイルデバイス上で実行されるときなどに、オブジェクトコードは上述された仮想マシンによって再最適化され得る。
【００１８】
一般に、仮想化技法は、物理的なハードウェアマシンのようにアプリケーションプログラムを実行するソフトウェアアプリケーションである仮想マシン(VM)に実装される。詳細には、仮想マシンは、アプリケーションプログラムと物理ハードウェアとの間のインターフェースを提供し、固有の命令セットアーキテクチャ(ISA)に結び付けられたアプリケーションプログラムが、異なる命令セットアーキテクチャを実装するハードウェア上で実行されることを潜在的に可能にする。アプリケーションプログラムは、通常、固有の命令セットアーキテクチャに結び付けられ、固有のオペレーティングシステムインターフェース(OSI)に依存する、コンパイルされたバイナリファイルとして配布されるので、仮想化は様々な態様で有益である。仮想マシンの支援がない場合、コンパイルされたバイナリファイルは、それ用にバイナリファイルがコンパイルされた固有の命令セットアーキテクチャ(たとえば、Intel IA-32など)およびオペレーティングシステムインターフェースをサポートするシステム上でのみ実行することができる。仮想マシンは、アプリケーションプログラムのアーキテクチャ要件をサポートし、かつ/またはアプリケーションプログラムの命令セットアーキテクチャをハードウェアでサポートされる命令セットアーキテクチャに変換するソフトウェアのレイヤを追加することにより、これらの制限を回避するために活用することができる。
【００１９】
図1は、様々な態様を実装するのに適した典型的なコンピュータシステム内の論理的な構成要素およびインターフェースを図示する、プロセッサの階層化されたアーキテクチャ図を示す。図示されたコンピュータシステムアーキテクチャ100は、ハードウェア構成要素とソフトウェア構成要素の両方を含む。ハードウェア構成要素は、実行ハードウェア(たとえば、アプリケーションプロセッサ、デジタル信号プロセッサなど)102、入出力デバイス106、および1つまたは複数のメモリ104を含むことができる。ソフトウェア構成要素は、オペレーティングシステム108、ライブラリモジュール110、および1つまたは複数のアプリケーションプログラム112を含むことができる。
【００２０】
アプリケーションプログラム112は、アプリケーションプログラムインターフェース(API)を使用して、ライブラリモジュール110に高水準言語(HLL)ライブラリコールを発行する。ライブラリモジュール110は、アプリケーションバイナリインターフェース(ABI)を使用して、オペレーティングシステム108上で(たとえば、オペレーティングシステムコールを介して)サービスを起動する。オペレーティングシステム108は、実行ハードウェア102によって実装された固有の動作コード(opcode)およびネイティブコマンドのリストである固有の命令セットアーキテクチャ(ISA)を使用して、ハードウェア構成要素と通信する。
【００２１】
アプリケーションバイナリインターフェースは、アプリケーションプログラムのプロセスによって見られるようにマシンを規定し、アプリケーションプログラムインターフェースは、高水準言語プログラムによって見られるようにマシンの特性を指定する。ISAは、オペレーティングシステムによって見られるようにマシンを規定する。
【００２２】
図2Aおよび図2Bは、高水準言語(たとえば、Java(登録商標)、C++など)で書かれたソフトウェアアプリケーションの配布可能コードへの変換を示すプロセスフロー図である。上述されたように、モバイルデバイスのアプリケーションプログラムは、通常、固有のISAおよびオペレーティングシステムインターフェース(OSI)に結び付けられた、(「オブジェクトコード」と呼ばれる)コンパイルされたバイナリファイルとして配布される。
【００２３】
図2Aは、モバイルデバイスへの配信用に、高水準言語202から配布可能オブジェクトコード206にコードを変換するための方法200を示す。アプリケーション開発者は、高水準言語(Java(登録商標)、C++など)を使用してソースコード202を書くことができ、高水準言語はコンパイラによってオブジェクトコード206に変換することができる。コンパイラは、論理的に、フロントエンド構成要素、ミドルエンド構成要素、およびバックエンド構成要素に編成することができる。コンパイラのフロントエンドは、ソースコード202を受け取り、タイプ検査動作を実行し、ソースコードのシンタックスおよびセマンティクスを検査し、ソースコードの中間表現204を生成することができる。コンパイラのミドルエンドは、無用で到達できないコードを除去すること、計算を再配置することなどの、中間コード204を最適化するための動作を実行することができる。コンパイラのバックエンドは、最適化された中間コード204をバイナリ/オブジェクトコード206に変換することができ、バイナリ/オブジェクトコード206は、ハードウェアとOSIの固有の組合せによって実行される固有の機械語命令を符号化する。次いで、バイナリ/オブジェクトコード206は、それ用にバイナリが生成されたISAとOSIの固有の組合せをサポートするデバイスに配布することができ、物理メモリに記憶することができ、ローダによりメモリイメージ208として取り出すことができる。
【００２４】
図2Bは、仮想化ソフトウェアを有するモバイルデバイスへの配信用に、高水準言語252から配布可能コード256にコードを変換するための態様方法250を示す。コンパイラモジュールは、高水準言語で書かれたソースコード252を受け取り、仮想マシンインターフェースを指定する仮想命令セットアーキテクチャ内の抽象機械コード(仮想ISAコード)および/またはバイトコード254を生成することができる。コンパイラモジュールは、コードを固有のアーキテクチャまたはオペレーティングシステムに結び付ける複雑なミドルエンドおよびバックエンドのコンパイラ処理を実行せずに、仮想ISAコード/バイトコード254を生成することができる。モバイルデバイスが、仮想ISAコード/バイトコード254を生成するために使用される仮想ISAをサポートする仮想化ソフトウェアを含む限り、生成された仮想ISAコード/バイトコード254は、多種多様なプラットフォームおよび実行環境を有するモバイルデバイスに配布することができる。
【００２５】
仮想化ソフトウェアをインストールしたコンピューティングデバイスは、配布コード254を受信し、受信されたコードをメモリに記憶することができる。仮想化ソフトウェアは、仮想ISA命令を下位のハードウェアによって使用される実際のISA命令に変換するためのインタープリタ/コンパイラを含むことができる。仮想マシンローダは、受信されたコードの仮想メモリイメージ254をロードし、受信されたコードを仮想マシンのインタープリタ/コンパイラに渡すことができ、インタープリタ/コンパイラは仮想メモリイメージを解釈して、かつ/またはそこに含まれた仮想ISAコードをコンパイルして、ホストのプラットフォーム上で直接実行するためのホストの機械コード258を生成することができる。
【００２６】
コードのコンパイルは2つのステップで実行することができ、1つは配布前、1つは配布後である。これにより、デバイスの下位のハードウェアおよびオペレーティングシステムインターフェースに関係なく、ソフトウェアアプリケーションが、第1のコンパイラによって使用される仮想ISAをサポートする仮想化ソフトウェアを有する任意のコンピューティングデバイスに、容易に移植されることが可能になる。さらに、仮想マシンコンパイラは仮想ISAをホストの機械語命令に変換する必要があるにすぎないので、仮想マシンコンパイラはフルコンパイラよりもかなり高速にコードを処理するように構成することができる。
【００２７】
こうして、図2Aに示された方法200では、コードは機械/オブジェクトコード(たとえば、ARM実行ファイル)として配布されるのに対して、図2Bに示された態様方法250では、コードは抽象機械コード/バイトコード(たとえば、Dalvikバイトコード)として配布される。いずれの場合も、静的オプティマイザは、配布前(たとえば、コンパイル中)にコードを最適化することができる。しかしながら、コードが実行されるべきハードウェアに固有の特性は、静的オプティマイザには利用できず、一般に実行時まで知ることができない。このために、静的オプティマイザは、一般に、多種多様なプラットフォームおよび実行環境でより効率的に(すなわち、高速で)走るようにコードを最適化する汎用最適化ルーチンを使用する。これらの汎用最適化ルーチンは、特定のプロセッサの電力消費特性などの、そこでコードが実行される個々のハードウェアに固有の特性を考慮に入れることはできない。様々な態様は仮想化技法を使用して実行時にコードを最適化し、そこでコードが実行されるべきハードウェアの固有の特性を使用して、コードを実行するために必要なエネルギー量を削減する。
【００２８】
図3Aおよび図3Bは、仮想マシンを実装する典型的なコンピュータシステム内の論理的な構成要素を示す。上記で説明されたように、仮想マシンにより、固有のISAに結び付けられたアプリケーションプログラムが、異なる命令セットアーキテクチャを実装するハードウェア上で実行されることが可能になる。これらの仮想マシンは、2つの一般的なカテゴリ、システム仮想マシンとプロセス仮想マシンとに分類することができる。システム仮想マシンにより、異なるプロセスまたはアプリケーションの間で、下位の物理ハードウェアを共有することが可能になるのに対して、プロセス仮想マシンは単一のプロセスまたはアプリケーションをサポートする。
【００２９】
図3Aは、プロセス仮想マシン310を実装するコンピューティングデバイス300の論理レイヤを示す階層化されたアーキテクチャ図である。コンピュータシステム300は、ハードウェア308の構成要素(たとえば、実行ハードウェア、メモリ、I/Oデバイスなど)、ならびに、仮想化モジュール304、オペレーティングシステム306、およびアプリケーションモジュール302を含むソフトウェア構成要素を含むことができる。
【００３０】
図1を参照して上記で説明されたように、ハードウェア構成要素はオペレーティングシステムを通してアプリケーションプログラムにしか見えず、ABIおよびAPIはアプリケーションプログラムに利用可能なハードウェア機能を効率的に規定する。仮想化ソフトウェアモジュール304は、ABI/APIレベルで論理演算を実行し、オペレーティングシステムコールおよび/またはライブラリコールをエミュレートし、その結果、アプリケーションプロセス302は、そうでなければハードウェア構成要素 (すなわち、システムコール/ライブラリコールを介して)と通信するはずの同じ方式で、仮想化ソフトウェアモジュール304と通信する。このようにして、アプリケーションプロセス302は、仮想化モジュール304、オペレーティングシステム306、およびハードウェア308の組合せを、図3Aに示されたプロセス仮想マシン310などの単一マシンとして見る。
【００３１】
上述されたように、プロセス仮想マシン310は、単一のアプリケーションプロセス302をサポートするためにのみ存在する。プロセス仮想マシン310は、プロセス302とともに作成され、プロセス302が実行を終えるときに終了する。仮想マシン310上で走るプロセス302は「ゲスト」と呼ばれ、下位のプラットフォームは「ホスト」と呼ばれる。プロセス仮想マシンを実装する仮想化ソフトウェア304は、通常、ランタイムソフトウェア(または単に「ランタイム」)と呼ばれる。
【００３２】
一例として、Dalvikは、Google(商標)のAndroidオペレーティングシステム上のプロセス仮想マシン(VM)である。Androidオペレーティングシステムは、実行前にDalvikバイトコードをARM実行ファイルのオブジェクトコードに変換する。しかしながら、ARMオブジェクトコードを生成するときに、ハードウェアの電力消費特性は考慮に入れられていない。さらに、プロセス仮想マシン310はプロセス302とともに作成され、プロセス302が終わるときに終了するので、プロセス302の実行に関する情報は、他の並行するプロセスを最適化するために使用することができない。
【００３３】
図3Bは、システム仮想マシン360を実装するコンピューティングデバイス350内の論理レイヤを示す階層化されたアーキテクチャ図である。コンピュータシステムは、ハードウェア358の構成要素(たとえば、実行ハードウェア、メモリ、I/Oデバイスなど)、ならびに、仮想化モジュール356、オペレーティングシステム354、およびアプリケーションプログラムモジュール352を含むソフトウェア構成要素を含むことができる。仮想化モジュール356の上で走るソフトウェアは「ゲスト」ソフトウェアと呼ばれ、仮想化モジュールをサポートする下位のプラットフォームは「ホスト」ハードウェアと呼ばれる。
【００３４】
仮想化ソフトウェアモジュール356は、論理的に、ホストハードウェアとゲストソフトウェアとの間に位置することができる。仮想化ソフトウェアは、実際のハードウェア上で(ネイティブに)、またはオペレーティングシステムの上で(ホストされて)走ることができ、通常、「ハイパーバイザ」または仮想マシンモニタ(VMM)と呼ばれる。ハイパーバイザは、仮想化されたハードウェアリソースをゲストソフトウェアに提供し、かつ/またはハードウェアISAをエミュレートし、その結果、ゲストソフトウェアは、ホストハードウェアに実装されたISAとは異なるISAを実行することができる。
【００３５】
プロセス仮想マシンとは異なり、システム仮想マシン360は、そこで複数のオペレーティングシステムが共存できる完全な環境を提供する。同様に、ホストハードウェアのプラットフォームは、複数の隔離されたゲストオペレーティングシステム環境を同時にサポートするように構成することができる。並行して実行されているオペレーティングシステム間の隔離により、システムにセキュリティレベルが追加される。たとえば、1つのゲストオペレーティングシステム上のセキュリティが侵害された場合、または1つのゲストオペレーティングシステムが障害を受けた場合、他のゲストシステム上で走っているソフトウェアは、その侵害/障害によって影響されない。さらに、システム仮想マシンは、1つのプロセスの実行から得られた情報を使用して、他の並行するプロセスを最適化することができる。
【００３６】
上述されたように、仮想化ソフトウェアは、実際のハードウェア上で(ネイティブに)、またはオペレーティングシステムの上で(ホストされて)走ることができる。ネイティブな構成では、仮想化ソフトウェアは利用できる最も高い特権モードで走り、ゲストオペレーティングシステムは引き下げられた特権で走り、その結果、仮想化ソフトウェアは、通常、ハードウェアリソースにアクセスするか、またはハードウェアリソースを操作するすべてのゲストオペレーティングシステムの動作を中断し、エミュレートすることができる。ホストされた構成では、仮想化ソフトウェアは、既存のホストオペレーティングシステムの上で走り、ホストオペレーティングシステムに依存して、デバイスドライバおよび他の下位レベルのサービスを提供することができる。いずれの場合も、ゲストオペレーティングシステムの各々(たとえば、オペレーティングシステム354)は、それらが物理ハードウェア358と通信するはずの同じ方式で、仮想化ソフトウェアモジュール356と通信する。これにより、各々のゲストオペレーティングシステム(たとえば、オペレーティングシステム354)が、仮想化モジュール356とハードウェア358の組合せを、図3Bに示されたシステム仮想マシン360などの単一の仮想マシンとして見ることが可能になる。
【００３７】
ゲストハードウェアは、解釈、動的バイナリ変換(DBT)、またはそれらの組合せを介してエミュレートすることができる。解釈の構成では、仮想マシンは、個々のゲスト命令を取り出し、復号し、その実行をエミュレートするインタープリタを含む。動的バイナリ変換の構成では、仮想マシンは、第1のISAで書かれたゲスト命令を第2のISAで書かれたホスト命令に変換する動的バイナリトランスレータを含む。動的バイナリトランスレータは、(命令ごととは対照的に)グループまたはブロックでゲスト命令を変換し、それらはソフトウェアキャッシュに保存され、再利用することができる。これにより、以前変換された命令が、コードを再変換せずに繰り返し実行されることが可能になり、効率が向上し、処理オーバヘッドが削減される。
【００３８】
上記で説明されたように、動的バイナリトランスレータは、第1のISA(たとえば、仮想ISA、SPARCなど)で書かれたゲスト命令を、第2のISA(たとえば、ARMなど)で書かれたホスト命令に変換する。様々な態様では、動的バイナリトランスレータ414は、第1のISA(たとえば、ARM)で書かれたゲスト命令を、同じISA(たとえば、ARM)で書かれたホスト命令に変換するように構成することができる。様々な態様では、この変換プロセスの一部として、動的バイナリトランスレータ414は、コードの特定のセグメントまたはシーケンスを実行する際にハードウェアの特定の部分によって実行時に消費される電力量のモデルに基づいて、1つまたは複数のコード最適化手順を実行してバイナリコードの性能を最適化することができる。この処理では、動的バイナリトランスレータ414は、最も多い電力を消費する機械演算を判定し(たとえば、乗算演算)、同じ結果を実現する代替の機械演算があるか判定し(たとえば、シフトと加算)、変換動作を実行することができ、その結果、変換されたコードは電力消費について最適化される(たとえば、すべての乗算演算をシフトと加算演算に交換すること、など)。一態様では、動的バイナリトランスレータ414は、第1のISA(たとえば、ARM)で書かれたオブジェクトコードの同じISA(たとえば、ARM)で書かれたオブジェクトコードへの命令シーケンスごとの変換を実行することにより、コードを最適化することができる。
【００３９】
図4は、様々な態様により、実行時にアプリケーション404の電力挙動を最適化するように構成されたシステム仮想マシン402を実装するコンピュータデバイス400内の論理的な構成要素を示す構成要素図である。システム仮想マシン402は、オペレーティングシステム406の下に、ハイパーバイザレベルで動作し、電力消費の1つまたは複数のモデル410を含むことができる。システム仮想マシン402はまた、特定のアプリケーションプログラムの実行特性に特に適合された1つまたは複数の最適化手順を生成および/または選択するように構成された、動的コードジェネレータ/ランタイムコンパイラ412を含むことができる。システム仮想マシンはまた、アプリケーションが実行されるまさにそのハードウェアにアプリケーションプログラムを適合させて、オブジェクトコードを電力最適化オブジェクトコードに変換するように構成された、動的バイナリトランスレータ414を含むことができる。一態様では、コードジェネレータ/ランタイムコンパイラ412および動的バイナリトランスレータ414は、単一のコンパイラユニット416として実装することができる。一態様では、システム仮想マシンは、コンパイラユニット416が(ソースコードとは対照的に)オブジェクトコード上で動作し、(性能/速度に対し)電力効率について最適化された新しいオブジェクトコードを生成するように構成することができる。
【００４０】
プロセッサの電力消費特性は、ハードウェアのタイプと、ハードウェアが固有のオブジェクトコードをどのように処理するかの両方に依存する場合がある。たとえば、所与の処理タスクを遂行するために消費される電力量は、それらのアーキテクチャに応じて、デバイスのタイプによって変化する場合がある。さらに、同じタイプのプロセッサの電力消費特性は、ロットごとに、かつチップごとに、場合によっては30パーセントまで変化する可能性がある。これらの変化に起因して、アプリケーション開発者は、特定のデバイスまたは特定のデバイスのセットに最適化されたソースコードを書くことができず、そのため、情報は、一般に実行時まで利用可能ではい。
【００４１】
一態様では、システム仮想マシン402のコンパイラは、ハードウェアの実際の電力消費特性に基づいて、実行時にコードを最適化するように構成することができる。仮想マシン402は、(言語レイヤとは対照的に)マシンレイヤで動作することができ、さらに、動的バイナリトランスレータ414が、処理速度について最適化することではなく、またはそれに加えて、電力効率について最適化する最適化手順を実行することを可能にする。一態様では、コンパイラユニット416は、1つまたは複数のコンパイラ最適化ルーチンを使用して、実行中のコードの実行時性能に基づいて、エネルギー利用率を向上させることができる。
【００４２】
一態様では、動的バイナリトランスレータ414は、解釈および/または変換の間に収集されたプロファイル情報を使用して、実行中にバイナリコードを最適化することができる。加えて、動的バイナリトランスレータ414は、実行時に収集された電力消費情報を使用して最適化手順を修正することができ、最適化手順は、動的バイナリトランスレータ414および/またはコードジェネレータ412によって使用されて、将来の変換を最適化し、かつ/または現在の変換の再最適化されたバージョンを生成することができる。動的バイナリトランスレータ414がプロファイリングデータを集めるので、コードジェネレータ412は、仮想マシンがプロファイリングデータをコードの特定のチャンクに関連付けることを可能にするタグを生成することができる。一態様では、動的バイナリトランスレータ414は、プロファイリングパラメータおよび生成されたタグを使用して、ハードウェアの特定の部分でコードの特定のチャンクを実行するために必要なエネルギー量を測定し、特定のハードウェアの実際の電力特性に基づいて最適化手順を調整することができる。
【００４３】
仮想マシン402は、1つまたは複数のシステムオンチップ(SOC)を含むことができる、利用可能なプロセッサコアおよび/またはプロセッサの目録を維持することができる。「システムオンチップ(SOC)」という用語は、単一の基板上に集積された複数のリソースおよびプロセッサを含んでいる単一の集積回路(IC)チップを指すために使用される。エネルギー消費モデル410は、様々なコア/プロセッサで処理されているオブジェクトコードの各単位を監視するための情報と、特定のコア/プロセッサ上でオブジェクトコードの各単位を処理するために必要な電力量とを記憶するか、または代替のエネルギー効率のよいプロセッサを識別するために使用されるデータ構造(たとえば、リスト、アレイ、テーブル、マップなど)を含むことができる。コードジェネレータは、エネルギー消費モデルに基づいてバイナリごとの変換動作を実行して、電力最適化コードを生成することができる。
【００４４】
様々な態様では、エネルギー消費モデル410は、仮想マシンのオーサー、アプリケーションプログラムのオーサーによって供給され、かつ/または、機械学習手順を使用して実行時に仮想マシン402によって構築される場合がある。機械学習手順は、モバイルデバイスが走り、オブジェクトコードを実行するときに、生成および/または更新される場合がある。たとえば、仮想マシン402は、機械学習技法および経験データを使用することにより、同様のコードの以前の実行から収集された情報に基づいて、エネルギー消費モデル410を構築するように構成することができる。
【００４５】
図5は、電力消費を改善するために実行時にオブジェクトコードを最適化する態様方法500を示す。上述されたように、モバイルデバイスのアプリケーションプログラムは、通常、固有の命令セットアーキテクチャ(ISA)に結び付けられ、固有のオペレーティングシステムインターフェース(OSI)に依存する、コンパイルされたバイナリファイルとして配布される。ブロック502で、モバイルデバイスは、仮想ISA/バイトコード(たとえば、Dalvik)内で、またはオブジェクトコード(たとえば、ARM実行ファイル)として、コンパイルされたバイナリコードファイルを受信することができる。コンパイルされたバイナリコードファイルは、モバイルデバイスのオペレーティングシステムによって受信され、モバイルデバイスのマシンレイヤで動作するシステム仮想マシンに供給することができる。ブロック504で、仮想マシンは、1つまたは複数のエネルギー消費モデルをコードに適用することにより、コードをコンパイル/変換し、かつ/または最適化されたオブジェクトコードを生成することができ、エネルギー消費モデルは仮想マシンによって使用されて、オブジェクトコードがハードウェアによってどのように実行されるかを判定し、かつ/または演算の電力最適化代替シーケンスに変換されるべきオブジェクトコード内部のパターンまたはセグメントを認識することができる。たとえば、仮想マシンは、エネルギー消費モデルを使用して、過剰な電力量を消費するコード内の演算子(たとえば、乗算演算)を識別し、識別された演算子に対する適切な代替の演算(たとえば、シフトと加算演算)を識別し、オブジェクトコードのバイナリごとの変換を実行して、最適化されたオブジェクトコードを生成することができる。変換されたコードは、生成されたときに記憶され、その結果、アプリケーションの次の実行は、コードを解析し最適化するプロセスを繰り返す必要がない。ブロック506で、最適化されたコードはハードウェアにロードされ、プロセッサ/コア上で実行することができる。
【００４６】
一態様では、仮想マシンは、最適化されたオブジェクトコードの以前の実行によって消費された実際の電力の測定値に基づいて、連続的にエネルギー消費モデルを更新し、オブジェクトコードを再生成することができる。このようにして、プロセッサの性能におけるロットごとのばらつきを反映できない固定モデルに依存するのではなく、オブジェクトコードを最適化するためにモバイルデバイスのプロセッサの実際の性能を使用することができる。
【００４７】
図6は、連続的にエネルギー消費モデルを更新し、オブジェクトコードを再生成する態様方法600を実行するように構成されたコンピューティングデバイス内の例示的で論理的な構成要素およびデータフローを示す構成要素/プロセスフロー図である。上述されたように、仮想マシンは、1つまたは複数のシステムオンチップ(SOC)を含むことができる複数のコアおよび/またはプロセッサを有するモバイルコンピューティングデバイスに実装することができる。図6に示された例では、モバイルコンピューティングデバイスは、中央プロセッサユニット602、Hexagon QDSPコア604、およびグラフィックス処理ユニット(GPU)606を含む。これらのプロセッサの各々は、生成されたオブジェクトコードの実行中に消費される電力を測定するために備えることができる。
【００４８】
コンパイルユニット618は、コンパイラ中間表現チャンクを生成し、コードチャンクをターゲットセレクタ616に送ることができる。ターゲットセレクタ616は、プロセッサの稼働率を監視し、コードのセグメントを実行するために最も適切なプロセッサ(たとえば、最低利用度のプロセッサ、必要とする電力量が最も少ないプロセッサ、など)を選択することができる。ターゲットセレクタ616は、コードチャンクをコードジェネレータモジュール608、610、612に送ることができ、コードジェネレータモジュール608、610、612はコードチャンクを受け取り、コードの命令シーケンスごとの変換を実行して、選択されたコア/プロセッサ602、604、606向けにコードを最適化することができる。次いで、最適化されたコードは、実行用に、選択されたコア/プロセッサ602、604、606にロードすることができる。
【００４９】
実行中、各コードチャンクを処理する際に各プロセッサによって消費される電力量について、情報を収集することができる。実行されたコードチャンクは、収集された電力消費情報で、タグ付けおよび/または注釈付けすることができる。測定された電力消費情報は性能予測モジュール614に送ることができ、性能予測モジュール614は、測定された消費情報を性能予測モデルと比較する。実際の電力消費モデルと予測された性能モデルとの間の比較の結果は、ターゲットセレクタ616にフィードバックすることができる。ターゲットセレクタ616は比較結果を使用して、電力消費モデルおよび最適化手順を更新することができ、その結果、以後生成されるオブジェクトコードチャンクの電力消費特性が改善される。
【００５０】
様々な態様は、電力節約量とコンパイル/変換および最適化の動作を実行するエネルギーコストとの合計を使用して、電力関数を決定することができる。電力関数は、各電力モデルに関連する総電力節約量を決定し、かつ/または最適化が実行されるべきかどうかを判定するために使用することができる。たとえば、電力関数は、最適化を実行するために必要なエネルギー量が最適化によって節約されるエネルギー量を超えるかどうかを判定するために使用することができ、その場合、最適化の性能は休止または遅延することができる。
【００５１】
一態様では、システム仮想マシンは、実行時に収集された電力消費の値に基づいて、電力節約量を計算することができる。システム仮想マシンは、測定された電力消費特性と計算された電力節約量の組合せに基づいて、定期的に電力消費モデルを更新し、コードチャンクを再生成することができる。電力節約量は、線形多項式関数を使用して、またはコンパイル/変換および最適化の動作を実行するために必要な仕事量によって相殺された、計算された時間枠にわたって節約された電力量として、計算することができる。
【００５２】
一態様では、ハードウェアは、実行中のコードの電力消費特性を測定する追加回路を備えることができる。システム仮想マシンは、追加回路によって作成された測定値を読み取り、測定された電力消費特性を使用して最適化手順を実行するように構成することができる。
【００５３】
図7は、エネルギー消費モデルを更新し、実行時にオブジェクトコードを連続的に再最適化するための態様方法700を示す。ブロック702で、仮想マシンコンパイルユニットは、1つまたは複数のプロセッサ上で実行するためのネイティブなオブジェクトコード単位を生成することができる。オブジェクトコード単位は、最適化および/または変換されたときに、タグ付けおよび/または注釈付けすることができる。タグ/注釈は仮想マシンによって使用されて、各コード単位によって消費される電力量を追跡することができる。ブロック704で、仮想マシンは、実行中のコード単位の電力消費特性を測定する追加回路を備えたプロセッサ上で、生成されたコード単位のうちの1つまたは複数を実行することができる。ブロック706で、電力消費情報をプロセッサから収集することができる。ブロック708で、測定された電力消費情報は性能予測モデルと比較することができ、実際の電力消費と予測された性能との間の比較の結果は、メモリに記憶することができる。ブロック710で、記憶された結果は、仮想マシンコンパイルユニットによって使用されてネイティブなオブジェクトコード単位を生成する、性能モデルおよび/または電力モデルを更新するために使用することができる。ブロック712で、仮想マシンコンパイルユニットは、まだ実行されていない以前最適化されたオブジェクトコードまたはコードセグメントを再生成し、ブロック704で、再生成されたコードを実行することができる。このようにして、実際の電力消費と予測された性能との間の比較は、コンパイルユニットにフィードバックすることができ、その結果、より良い最適化方法が識別され、以後のオブジェクトコードの最適化に使用することができる。
【００５４】
比較はまた、低いというよりむしろ高い電力消費をもたらした以前の最適化手順を識別するために使用することができる。たとえば、仮想マシンは、電力消費を測定する追加回路を備えたプロセッサ上で最適化されたコード単位を実行し、最適化されたコードによって消費された実際の電力量を測定し、消費された実際の電力量が元のコードによって消費された電力量を超える場合、コードの他の単位に同様の変換を実行することをやめることができる。このようにして、仮想マシンは、どのバイナリ変換がハードウェアの特定のユニットで効果的か、およびどの変換がそうでないかを何度も学習し、必要に応じてモデルに調整を加えるように構成することができる。
【００５５】
様々な態様では、様々なフィードバックおよび機械学習の技法を使用することができる。コード最適化のルールセットは、測定結果が予測モデルから逸脱したとき、変更または更新することができる。最適化ルールを変更すること、最適化ルールに対する変更の前後で最適化されたコードの測定された電力消費を比較すること、および最良の結果を与える最適化ルールを使用するように選択することなどにより、機械摂動および検査方法の試験を実施することができる。一態様では、様々な長さの最適化されたコードの電力性能は、互いに比較されて、より良い最適化が起こることを可能にするパターンを認識することができる。
【００５６】
フィードバックおよび学習の機構はいくつかの利点をもたらす。たとえば、モデルは機械学習を介してモバイルデバイス自体により自動的に生成されるので、モバイルデバイスの開発者は、電力消費のデバイス固有モデルを生成する必要がなく、このことはデバイスの開発を簡略化する。別の例として、フィードバックおよび学習の機構により、初期設計がされた後発生するハードウェアにおける変更(たとえば、新しいメモリの追加、プロセッサの取り替えなど)に、様々な態様が、モデルが設計された後適応することが可能になる。フィードバックおよび学習の機構により、様々な態様が、20パーセントまで変化する可能性がある、プロセッサの電力消費特性におけるロットごとおよびラインごとのばらつきをより良く相殺することも可能になる。たとえば、特定のダイで作成されたチップのうちのいくつかは、特定の方式(たとえば、乗算演算の代わりにシフトと加算演算を使用すること)でオブジェクトコードを最適化することから恩恵を受ける場合があるが、少しのチップは、ロットごとおよびラインごとのばらつきに起因して、同じ最適化からより高い電力消費を実際に経験する場合がある。様々な態様は、チップ/ハードウェアの個々の特性に基づいてコードを最適化することにより、そのようなばらつきを相殺することができる。
【００５７】
上述されたように、様々な態様は、電力節約量とコンパイル/変換および最適化の動作を実行するエネルギーコストとの合計を使用して、電力関数を決定することができ、電力関数は最適化が実行されるべきかどうかを判定するために使用することができる。たとえば、電力関数は、最適化を実行するために必要なエネルギー量が最適化によって節約されるエネルギー量を超えるかどうかを判定するために使用することができる。一態様では、最適化されたコードによって節約されるエネルギー量よりも多くのエネルギーを実行するために必要とする最適化手順に関連するモデルは、メモリに記憶され、コンピューティングデバイスがバッテリ電力で走っていないときに実行することができる。
【００５８】
図8は、モバイルデバイスが電源にプラグで接続され、バッテリ電力で走っていないときに、オブジェクトコードの最適化を実行するための態様方法800を示すプロセスフロー図である。ブロック802で、仮想マシンは、上記で説明された態様のうちのいずれかに従って、最適化されたオブジェクトコード単位を生成し、実行を開始することができる。ブロック804で、仮想マシンは、さらなる最適化が利用可能であると判定し、利用可能な最適化に関係する情報をメモリに記憶することができる。ブロック806で、仮想マシンは、識別された最適化のうちのいずれも実行せずに、コードの実行を継続することができる。判定ブロック808で、コンピューティングデバイスは、新しい電源(たとえば、有線電力接続)がデバイスに利用可能かどうかを判定する動作を実行することができる。新しい電源が利用可能でない場合(判定ブロック808=「いいえ」)、ブロック806で、仮想マシンは、識別された最適化のうちのいずれも実行せずに、コードの実行を継続することができる。一方、新しい電源が利用可能であるとプロセッサが判定した場合(判定ブロック808=「はい」)、ブロック810で、仮想マシンは、メモリから記憶された最適化情報を取り出し、最適化を実行し(電力モデルを更新し、オブジェクトコードを再生成し、など)、最適化されたコードをメモリに記憶することができる。このようにして、最適化手順は、最適化の実行に関連するエネルギーコストが、最適化から生じるエネルギーゲインを超えない場合のみ実行することができる。
【００５９】
一態様では、最適化から生じる最適化されたオブジェクトコードは、メモリに記憶され、コードの以後の実行に使用することができる。最適化は、特定のハードウェアに固有であるエネルギー消費のモデルと連携して実行することができ、エネルギー消費のモデルは、製造者によって提供され、かつ/または実行中にモバイルデバイスによって学習することができる。このようにして、上記で説明された様々な最適化手順は、実行時、実行前、コードがロードされたとき、またはプロセスが最初に実行されたときに実行することができる。様々な最適化手順は、ランタイムコード生成プロセスの一部、または静的コード生成プロセスの一部であり得る。
【００６０】
様々な態様では、電源に接続されたときに最適化を実行することは、実行時に最適化を実行することだけに限定されないことを理解されたい。たとえば、システム仮想マシンは、必要に応じて(たとえば、実行中に)、または前もって(たとえば、電源に接続され、アイドル時に)最適化を実行することができる。
【００６１】
いつ最適化を適用するかに関する決定は、いつ性能データを収集するかに関する決定とは無関係であり得ることも理解されたい。様々な態様は、コードの実行中に電力消費データを収集し、条件が満足される(たとえば、デバイスが電源に接続される)まで、収集されたデータに作用しない場合がある。
【００６２】
様々な態様とともに使用するのに適した典型的なモバイルデバイス900は、図9に示された構成要素を共有する。たとえば、例示的なモバイルデバイス900は、内部メモリ901、ディスプレイ904、およびスピーカ964に結合されたプロセッサ902を含むことができる。加えて、モバイルデバイスは、プロセッサ902に結合された、電磁放射を送受信するためのアンテナ924を有することができる。いくつかの態様では、モバイルデバイス900は、システムオンチップを含むことができる1つまたは複数の専用または汎用のプロセッサ905、924を含むことができる。モバイルデバイスはまた、通常、ユーザ入力を受け取るためのキーパッドまたは小型キーボード、および、メニュー選択ボタンまたはロッカースイッチを含む。
【００６３】
図10は、様々な態様とともに使用するのに適した別の例示的なモバイルデバイス1000を示す。たとえば、モバイルデバイス1000は、内部メモリ1001およびディスプレイ1009に結合されたプロセッサ1002を含むことができる。加えて、モバイルデバイスは、情報を送受信するための通信ポート1005を有することができる。モバイルデバイス1000はまた、ユーザ入力を受け取るためのキーボード1008および選択ボタン1007を含むことができる。
【００６４】
プロセッサ902、905、924、1002は、本明細書に記載された様々な態様の機能を含む様々な機能を実行するように、プロセッサ実行可能ソフトウェア命令(アプリケーション)によって構成できる、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。通常、ソフトウェアアプリケーションおよびプロセッサ実行可能命令は、アクセスされ、プロセッサ902、905、924、1002にロードされる前に、内部メモリ901、1001に記憶することができる。いくつかのモバイルデバイスでは、プロセッサ902、905、924、1002は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含むことができる。いくつかのモバイルデバイスでは、安全なメモリが、プロセッサ902、905、924、1002に結合された別個のメモリチップ内にあり得る。多くのモバイルデバイスでは、内部メモリ901、1001は、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書では、メモリへの一般的な言及は、内部メモリ、モバイルデバイスに差し込まれるリムーバブルメモリ、およびプロセッサ内部のメモリを含む、プロセッサ902、905、924、1002によってアクセス可能なすべてのメモリを指す。
【００６５】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されたものであり、様々な態様のステップが提示された順序で実行されなければならないことを要求または暗示するものではない。当業者が諒解するように、上記の態様におけるステップの順序は、どのような順序で実行することもできる。「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではなく、これらの単語は、単に、方法の説明を通して読者を案内するために使用される。さらに、たとえば、冠詞「a」、「an」または「the」を使用する単数形での請求要素へのいかなる言及も、その要素を単数に限定するものとして解釈されるべきではない。
【００６６】
本明細書で開示された態様に関して記載された、様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装することができる。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップが、全体的にそれらの機能に関して上述された。そのような機能をハードウェアとして実装するか、またはソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、記載された機能を特定の適用例ごとに様々な方法で実装できるが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈されるべきではない。
【００６７】
本明細書に開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、マルチメディア放送受信機チップ内部のDSP、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェア構成要素、または、本明細書に記載された機能を実施するように設計されたそれらの任意の組合せで、実装または実施することができる。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装することができる。代替として、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行することができる。
【００６８】
1つまたは複数の例示的な態様では、記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せに実装することができる。ソフトウェアに実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶することができるか、または、コンピュータ可読媒体を介して送信することができる。本明細書で開示された方法またはアルゴリズムのステップは、コンピュータ可読媒体上に常駐できる、実行されるプロセッサ実行可能ソフトウェアモジュール内で具現化することができる。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む、コンピュータ記憶媒体とコンピュータ通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスできる任意の利用可能な媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形式で所望のプログラムコードを搬送もしくは記憶するために使用でき、かつコンピュータによってアクセスできる任意の他の媒体を備えることができる。また、任意の接続はコンピュータ可読媒体と適切に呼ばれる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フレキシブルディスク(disk)およびブルーレイディスク(disc)を含む。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込むことができる、機械可読媒体および/またはコンピュ
ータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せまたはセットとして常駐することができる。
【００６９】
開示された実施形態の上記の説明は、当業者が本発明を作成または使用することを可能にするために提供される。これらの実施形態への様々な修正は当業者には容易に明らかであり、本明細書で規定された一般原理は、本発明の趣旨または範囲を逸脱することなく他の実施形態に適用することができる。したがって、本発明は、本明細書に示された実施形態に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に矛盾しない最大の範囲を与えられるものである。
【符号の説明】
【００７０】
100  コンピュータシステムアーキテクチャ
102  実行ハードウェア
104  メモリ
106  入出力デバイス
108  オペレーティングシステム
110  ライブラリモジュール
112  アプリケーションプログラム
200  方法
202  高水準言語で書かれたソースコード
204  バイトコード、中間コード
206  バイナリコード、オブジェクトコード
208  メモリイメージ
250  態様方法
252  高水準言語で書かれたソースコード
254  仮想ISAコード/バイトコード
256  仮想メモリイメージ
258  ホストの機械コード
300  プロセス仮想マシンを実装するコンピューティングデバイス
302  アプリケーションモジュール
304  仮想化モジュール
306  オペレーティングシステム
308  ハードウェア
310  プロセス仮想マシン
350  システム仮想マシンを実装するコンピューティングデバイス
352  アプリケーションプログラムモジュール
354  オペレーティングシステム
356  仮想化モジュール
358  ハードウェア
360  システム仮想マシン
400  コンピュータデバイス
402  システム仮想マシン
404  アプリケーション
406  オペレーティングシステム
408  プロセッサ/システムオンチップ
410  エネルギー消費モデル
412  コードジェネレータ/ランタイムコンパイラ
414  動的バイナリトランスレータ
416  コンパイラユニット
500  態様方法
600  態様方法
602  中央プロセッサユニット
604  Hexagon QDSPコア
606  グラフィックス処理ユニット(GPU)
608  コードジェネレータモジュール
610  コードジェネレータモジュール
612  コードジェネレータモジュール
614  性能予測モジュール
616  ターゲットセレクタ
618  コンパイルユニット
700  態様方法
800  態様方法
900  モバイルデバイス
901  内部メモリ
902  プロセッサ
904  ディスプレイ
905  プロセッサ
924  アンテナ、プロセッサ
964  スピーカ
1000  モバイルデバイス
1001  内部メモリ
1002  プロセッサ
1005  通信ポート
1007  選択ボタン
1008  キーボード
1009  ディスプレイ
【図１】
0005735714.tif 000002
【図２Ａ】
0005735714.tif 000003
【図２Ｂ】
0005735714.tif 000004
【図３Ａ】
0005735714.tif 000005
【図３Ｂ】
0005735714.tif 000006
【図４】
0005735714.tif 000007
【図５】
0005735714.tif 000008
【図６】
0005735714.tif 000009
【図７】
0005735714.tif 000010
【図８】
0005735714.tif 000011
【図９】
0005735714.tif 000012
【図１０】
0005735714.tif 000013