JP4294084B2 - ソフトウェアアプリケーションを実行する方法及び記録媒体 - Google Patents

ソフトウェアアプリケーションを実行する方法及び記録媒体 Download PDF

Info

Publication number
JP4294084B2
JP4294084B2 JP2008520347A JP2008520347A JP4294084B2 JP 4294084 B2 JP4294084 B2 JP 4294084B2 JP 2008520347 A JP2008520347 A JP 2008520347A JP 2008520347 A JP2008520347 A JP 2008520347A JP 4294084 B2 JP4294084 B2 JP 4294084B2
Authority
JP
Japan
Prior art keywords
function
code
computer
software application
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008520347A
Other languages
English (en)
Other versions
JP2009501368A (ja
Inventor
タン ビクター
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009501368A publication Critical patent/JP2009501368A/ja
Application granted granted Critical
Publication of JP4294084B2 publication Critical patent/JP4294084B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Description

本発明は、一般に、ソフトウェアエミュレーションの分野に関する。より詳細には、本発明は、仮想コードの選択的なプリコンパイルおよびインライン化に関する。
ビデオゲームなどのソフトウェアアプリケーションは、通常、コンパイルされる際、アプリケーションの記述、ならびにアプリケーションがどのように実行されるかについての命令を提供する中間のエミュレートされたバイナリなど、仮想コードに変換される。ソフトウェアエミュレータは、アプリケーションが実行されるより前の何らかの時点で、ソフトウェアアプリケーションの中間バイナリのバイナリ変換を実行する。バイナリ変換とは、中間バイナリを、コードを実行するプロセッサのタイプに固有であるマシン実行可能バイナリに変換するプロセスを指す。すると、実行可能バイナリは、そのバイナリのフォーマットが合わせられたプロセッサによって実行される準備ができている。
1つのそのようなバイナリ変換方法は、「JIT」(「ジャストインタイム」)バイナリ変換と呼ばれ、JITは、その名前が示唆するとおり、コードが実行される直前に行われるソフトウェアコードのバイナリ変換である。その結果、コードの実行が成功するために行われる必要があるプロセッサ固有の変更が、実行の直前まで行われないので、特定の中間バイナリが、様々なプロセッサ上、およびコンピューティングプラットフォーム上で使用されることが可能である。また、JIT変換は、バイナリ変換が、ブートアップ中に行われないため、比較的迅速なロード時間およびブート時間をもたらす。
しかしながら、JIT変換は、実行時におけるコードの実行に悪影響を与える可能性がある。例えば、通常のゲームシステムは、コードの実行に悪影響を与えることなしに(すなわち、グラフィックスレンダリングに影響を及ぼすことなしに)、コード内のほとんどの平均複雑度のグラフィックス関数に関して、実行時間中にJIT変換を実行することができる可能性がある。しかし、「AI」(人工知能)の大きいセグメントが関与するグラフィックス関数などの、特定の複雑なグラフィックス関数に遭遇した場合、関数変換とコード実行の両方を実行するのに利用できるだけの十分なプロセッサリソースが、存在しない可能性がある。したがって、ユーザは、コード実行における瞬間的な休止を、再生中の目に見える「ちらつき」または「スタッター」として認める可能性がある。プログラマが、グラフィックスリアリズムの増大に向けて絶えず努力するなかで、そのような遅延は、ますます望ましくないものとなりつつある。
別の変換方法は、ソフトウェアプリコンパイラの使用を必要とする。プリコンパイラは、実行に先立つソフトウェアアプリケーションのコードを表す静的中間バイナリ全体のバイナリ変換を実行する。変換は、通常、ソフトウェアが、ブートアッププロセス中にロードされる際に(「ロード時」に)行われる。プリコンパイラの使用は、実行時に、より高速な割り込みのない実行を可能にする一方で、プリコンパイラがバイナリ変換を実行する初期ロード時間が、長くなる。このため、ユーザは、不合理に長いシステムブート時間を経験する可能性があり、その結果、プリコンパイラは、通常、大きいプログラムに関して使用されない。
別の問題は、マシン実行可能バイナリ内の比較的単純な関数を実行することに関連して実行時に生じる。例えば、多くの関数には、コードの本文からサブルーチンへの呼び出しがかかわる。サブルーチンへの呼び出し、およびサブルーチンからの呼び出しリターン(「コンテキスト切り替え」と呼ばれる)は、処理時間を要する。ほとんどの関数の場合、コンテキスト切り替えに要求される処理時間は、関数自体を実行するのに要求される処理時間と比べると、無視できるほど小さい。しかし、関数が、非常に小さい場合、コンテキスト切り替えに要求される処理時間は、その関数に関して要求される全体的な実行時間のかなり大きいパーセンテージとなる可能性がある。その結果、サブルーチンとしてのそのような関数の実行は、その関数が、単にコードの本文内で実行されたとした場合より効率が劣る。この非効率は、余計な処理時間が、コンテキスト切り替えにとられるため、JIT変換ばかりでなく、コード実行のパフォーマンスにも悪影響を及ぼす可能性がある。そのような関数をサブルーチンとして実行することは、非効率である可能性があるが、そのようなサブルーチン全般は、通常、ソフトウェア開発者のための好都合なツールとして働く。このため、単に、すべてのそのような関数が、コードの本文の中に配置されたコードを作成することは、望ましくない。
したがって、以上の不備および欠点を克服する機構の必要性が、存在する。本発明は、その必要性を満足させる。
以上の不備および欠点に鑑みて、エミュレートされたバイナリのプリブートスキャンを実行して、所定の複雑度閾値を超える関数を検出する方法およびコンピュータ可読媒体が、提供される。検出された関数が、次いで、ブートアッププロセス中にプリコンパイルされることが可能である。また、プリブートスキャンは、第2の所定の複雑度閾値を下回る関数を検出することもできる。検出された関数は、コード本文にインラインで配置されることが可能である。次いで、ジャストインタイム変換が、実行時に実行されることが可能であり、プリコンパイルされた関数は、さらなる変換なしに、直接に実行されることが可能であり、インラインで移動された関数は、コンテキスト切り替えなしに実行されることが可能である。
本発明の主題を、法定要件を満たすように具体的に説明する。しかし、この説明自体は、本特許の範囲を限定することを意図していない。むしろ、請求される主題は、他の現在または将来の技術と関連して、本明細書で説明されるステップまたは要素と類似した、異なるステップまたは要素を含むように、他の仕方で実施されることも可能であることを、本発明者らは企図している。さらに、「ステップ」という用語は、使用される方法の様々な態様を意味するように本明細書で使用される可能性があるが、この用語は、個々のステップの順序が明示的に説明されない限り、なおかつ、その場合を除き、本明細書で開示される様々なステップの間で、いずれの特定の順序も暗示するものと解釈されてはならない。
(例示的なコンピューティング環境)
図1は、本発明が実施されることが可能な適切なコンピューティングシステム環境100の例を示す。コンピューティングシステム環境100は、適切なコンピューティング環境の一例に過ぎず、本発明の用法または機能の範囲について何ら限定を示唆するものではない。また、コンピューティング環境100が、例示的な動作環境100に例示されるコンポーネントのいずれのコンポーネント、またはいずれの組合せと関係する依存関係または要件も有するものと解釈されてはならない。
本発明は、他の多数の汎用または専用のコンピューティングシステム環境またはコンピューティングシステム構成で機能する。本発明で使用するのに適する可能性がある、よく知られたコンピューティングシステム、コンピューティング環境、および/またはコンピューティング構成の例には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドデバイスもしくはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、以上のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれるが、以上には限定されない。
本発明は、コンピュータによって実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的な文脈で説明されることが可能である。一般に、プログラムモジュールには、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。また、本発明は、通信ネットワークを介してリンクされたリモート処理デバイス群によってタスクが実行される、分散コンピューティング環境において実施してもよい。分散コンピューティング環境では、プログラムモジュール群は、メモリストレージデバイスを含むローカルコンピュータ記憶媒体とリモートコンピュータ記憶媒体の両方の中に配置されることが可能である。
図1を参照すると、本発明を実施するための例示的なシステムが、コンピュータ110の形態で汎用コンピューティングデバイスを含む。コンピュータ110のコンポーネントには、処理装置120、システムメモリ130、およびシステムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121が含まれることが可能であるが、以上には限定されない。システムバス121は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかのタイプのバス構造のいずれであってもよい。例として、限定としてではなく、そのようなアーキテクチャには、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Associate)ローカルバス、およびメザニン(Mezzanine)バスとしても知られるPCI(Peripheral Component Interconnect)バスが含まれる。
コンピュータ110は、通常、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ110がアクセスすることができる任意の利用可能な媒体であることが可能であり、揮発性媒体と不揮発性媒体、着脱式媒体と固定式媒体がともに含まれる。例として、限定としてではなく、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を含む。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の格納のために任意の方法または技術で実装された、揮発性媒体と不揮発性媒体、着脱式媒体と固定式媒体がともに含まれる。コンピュータ記憶媒体には、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、DVD(デジタルバーサタイルディスク)または他の光ディスクストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは所望の情報を格納するのに使用することができ、コンピュータ110がアクセスすることができる他の任意の媒体が含まれるが、以上には限定されない。通信媒体は、通常、搬送波などの変調されたデータ信号、または他のトランスポート機構で、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを実体化し、あらゆる情報配信媒体が含まれる。「変調されたデータ信号」という用語は、信号内に情報を符号化するような形で特性の1つまたは複数が設定または変更されている信号を意味する。例として、限定としてではなく、通信媒体には、有線ネットワークまたは直接有線接続などの有線媒体、ならびに音響媒体、RF媒体、赤外線媒体、およびその他の無線媒体などの無線媒体が含まれる。また、以上の媒体のいずれかの媒体の組合せも、コンピュータ可読媒体の範囲内に含められなければならない。
システムメモリ130は、ROM(読み取り専用メモリ)131やRAM(ランダムアクセスメモリ)132などの揮発性メモリおよび/または不揮発性メモリの形態でコンピュータ記憶媒体を含む。起動中などに、コンピュータ110内部の要素間で情報を転送するのを助ける基本ルーチンを含むBIOS(基本入出力システム)133が、通常、ROM131の中に格納される。RAM132は、通常、処理装置120が、即時にアクセスすることができ、かつ/または現在、処理しているデータおよび/またはプログラムモジュール群を含む。例として、限定としてではなく、図1は、オペレーティングシステム134、アプリケーションプログラム群135、その他のプログラムモジュール群136、およびプログラムデータ137を示す。
また、コンピュータ110は、他の着脱式/固定式、揮発性/不揮発性のコンピュータ記憶媒体も含むことが可能である。単に例として、図1は、固定式不揮発性の磁気媒体に対して読み取りまたは書き込みを行うハードディスクドライブ141、着脱式不揮発性の磁気ディスク152に対して読み取りまたは書き込みを行う磁気ディスクドライブ151、およびCD−ROMまたは他の光媒体などの着脱式不揮発性の光ディスク156に対して読み取りまたは書き込みを行う光ディスクドライブ155を示す。例示的な動作環境において使用することができる、他の着脱式/固定式、揮発性/不揮発性のコンピュータ記憶媒体には、磁気テープカセット、フラッシュメモリカード、デジタルバーサタイルディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROMなどが含まれるが、以上には限定されない。ハードディスクドライブ141は、通常、インタフェース140のような固定式メモリインタフェースを介してシステムバス121に接続され、磁気ディスクドライブ151および光ディスクドライブ155は、通常、インタフェース150のような着脱式メモリインタフェースでシステムバス121に接続される。
前述し、図1に示すドライブ群、および関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータのストレージをコンピュータ110に提供する。図1では、例えば、ハードディスクドライブ141は、オペレーティングシステム144、アプリケーションプログラム群145、その他のプログラムモジュール群146、およびプログラムデータ147を格納しているものとして示されている。以上のコンポーネントは、オペレーティングシステム134、アプリケーションプログラム群135、その他のプログラムモジュール群136、およびプログラムデータ137と同一であることも、異なることも可能であることに留意されたい。オペレーティングシステム144、アプリケーションプログラム群145、他のプログラムモジュール群146、およびプログラムデータ147に、ここでは、少なくともそれらが異なるコピーであることを示すように、異なる符号を与えている。ユーザは、キーボード162や、マウス、トラックボール、またはタッチパッドと一般に呼ばれるポインティングデバイス161などの入力デバイス群を介して、コマンドおよび情報をコンピュータ110に入力することができる。他の入力デバイス群(図示せず)には、マイク、ジョイスティック、ゲームパッド、サテライトディッシュ、スキャナなどが含まれることが可能である。以上、およびその他の入力デバイスは、しばしば、システムバスに結合されたユーザ入力インタフェース160を介して処理装置120に接続されるが、パラレルポート、ゲームポート、またはUSB(ユニバーサルシリアルバス)などの、他のインタフェースおよびバス構造で接続してもよい。また、モニタ191、または他のタイプのディスプレイデバイスも、ビデオインタフェース190のようなインタフェースを介して、システムバス121に接続される。モニタに加え、コンピュータは、出力周辺インタフェース190を介して接続することができる、スピーカ197やプリンタ196などの、他の周辺出力デバイス群も含むことが可能である。
コンピュータ110は、リモートコンピュータ180のような1つまたは複数のリモートコンピュータに対する論理接続を使用する、ネットワーク化された環境で動作することができる。リモートコンピュータ180は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、または他の一般的なネットワークノードであることが可能であり、通常、コンピュータ110に関連して前述した要素の多く、またはすべてを含むが、メモリストレージデバイス181だけを図1に示している。図1に示す論理接続には、LAN(ローカルエリアネットワーク)171およびWAN(ワイドエリアネットワーク)173が含まれるが、他のネットワークも含まれることが可能である。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータ網、イントラネット、およびインターネットで一般的である。
LANネットワーキング環境で使用される場合、コンピュータ110は、ネットワークインタフェースまたはネットワークアダプタ170を介してLAN171に接続される。WANネットワーキング環境で使用される場合、コンピュータ110は、通常、インターネットなどのWAN173を介して通信を確立するためのモデム172、または他の手段を含む。内部にあることも、外部にあることも可能なモデム172は、ユーザ入力インタフェース160、または他の適切な機構を介してシステムバス121に接続することができる。ネットワーク化された環境では、コンピュータ110に関連して示したプログラムモジュール群、またはプログラムモジュール群の諸部分は、リモートメモリストレージデバイスの中に格納することができる。例として、限定としてではなく、図1は、リモートアプリケーションプログラム群185が、メモリデバイス181上に存在するものとして示す。図示したネットワーク接続は、例示的であり、コンピュータ間で通信リンクを確立する他の手段も使用できることを理解されたい。
(例示的な実施形態)
以下の説明では、コードエミュレーションおよびバイナリ変換と関係する詳細は、当業者に知られているものと想定する。したがって、そのような詳細は、簡明および説明のため、本明細書では大部分、省略する。さらに、ゲームソフトウェアの文脈におけるグラフィックスレンダリングがかかわる例示的な実施形態が、説明のためだけに本明細書で使用され、本発明をいずれのそのような実施形態にも限定するものではない。
本発明の或る実施形態は、JIT変換技術とプリコンパイル技術を選択的に組み合わせて、ソフトウェアアプリケーションのコード実行中の休止を回避する。そのようなコードのエミュレートされたバイナリのプリブートスキャンが実行されて、バイナリ内の複雑な関数を検出することが可能である。ソフトウェアのブートプロセス中、或る実施形態は、検出された複雑な関数をプリコンパイルする。実行時に、JIT変換技術が、バイナリの残りの部分に関して使用され、他方、プリコンパイルされた関数は、直接に、さらなる変換なしに実行されることが可能である。加えて、そのようなプリブートスキャン中、或る実施形態は、非常に単純な関数を検出して、それらの関数を、コードの本文に選択的に再配置することが可能である(本明細書で「インライン化」と呼ばれるプロセス)。実行時に、関数を実行するのに、さもなければ必要なコンテキスト切り替えを回避することができる。
或る実施形態のプリブートスキャンは、初期ブートプロセスを実行するのに要求される時間を増大させる可能性がある。しかし、プリコンパイル動作およびインライン化動作が、選択的に適用されるため、ブート時間の増加は、許容できる限度内に留まるようにとりはからうことができる。このため、コード実行は、アプリケーションのブート時間を拡大しすぎることなしに、顕著な休止を回避するように改良されることが可能である。
次に図2を参照すると、或る実施形態の例示的な方法200が、示されている。ステップ201で、例えば、ビデオゲームの中間バイナリなどのエミュレートされたコードが、スキャンされる。いずれのタイプのスキャン機構を使用してもよい。例えば、1つのそのようなスキャン方法が、参照により全体が本明細書に組み込まれている、2005年5月12日に出願した、「Function−Level Just−in−Time Translation Engine with Multiple Pass Optimization」という名称の、本発明の譲受人に譲渡された米国特許出願第11/128699号明細書において説明されている。スキャンには、例えば、当業者には当然、知られているとおり、相対命令移動技術などに従って、エミュレートされたコードフローの中で命令ポインタなどを移動させることがかかわることが可能である。スキャンが、エミュレートされたコードの中を進むにつれ、関数の境界が判定されて、エミュレートされたコード内の各関数の複雑度が確定される。本明細書で使用される「複雑度」という用語は、関数をコンパイルし、かつ/または実行するのに要求される処理時間またはリソースの任意の尺度を指す。例えば、複雑度は、関数サイズ(例えば、コードの行の数など)、処理の難度などの点で測られることが可能である。関数ポインタ、または別の形態の絶対アドレス指定を介して参照される関数がかかわる実例に関して、そのような関数へのバイナリ固有のリファレンスが、後段のステップ211のプリコンパイルが行われることを可能にするのに使用されることが可能である。
ステップ201のスキャンが完了した後、ステップ203で、1つまたは複数の複雑な関数が検出されたかどうかについての判定が、行われる。前述したとおり、何が「複雑な」関数であるかは、任意の基準に基づくことが可能である。さらに、所定の閾値が、その閾値を超える関数だけが複雑であると判定されるように、選択されることが可能である。前述したとおり、所定の閾値は、コードの行の数に関することが可能である。このため、或る関数が、閾値を超える行数のコードを含む場合、その関数は、複雑であると判定されることが可能である。閾値は、任意の数の要因に基づいて前もって決定されることが可能である。例えば、後段で説明するステップ205のプリコンパイルが、アプリケーションの全体的なブートアップ時間を増大させる可能性がある。開発者などは、そのようなプリコンパイルによって生じるブートアップ時間の増大を或る限度内に留めたいと望む可能性がある。このため、閾値は、例えば、その時間限度内でプリコンパイルされることが可能な数だけの、複雑であると判定される関数をもたらすように選択されてもよい。
ステップ203の判定が、いずれの関数も複雑ではないということであった場合、方法200は、任意選択のステップ207に進む。ステップ203の判定が、1つまたは複数の関数が複雑であるということであった場合、次いで、ステップ205で、それらの複雑な関数が、コンパイルされる。このコンパイルは、本明細書では、「プリコンパイル」と呼ばれる。というのは、そのようなコンパイルは、コードの実行に先立って(いずれのJIT変換にも先立って)行われるからである。或る実施形態によれば、関数は、ステップ205に従ってプリコンパイルされると、さらなる処理なしに実行される準備ができている。
任意選択のステップ207において、1つまたは複数の「単純な」関数が検出されたかどうかについての判定が、行われる。複雑な関数の場合と同様に、何が単純な関数であるかは、任意の基準に基づくことが可能である。例えば、単純な関数は、閾値未満の行数のコードを有するサブルーチンとして定義されることが可能である。閾値は、例えば、そのサブルーチンを実行するのに要求される処理時間と比較された、コンテキスト切り替えによって要求される処理時間に基づいて選択されてもよい。また、アプリケーション特有の要因を含め、さらなる要因を考慮することも可能である。
例えば、或る特定のサブルーチンが、閾値より少ない行数のコードを有するが、アプリケーションのコード全体にわたって多数回、出現することが可能である。関数のインライン化は、基本的に、その関数内のコードの行を、対応する関数呼び出しの代わりに、コードの本文にコピーすることを必要とする。このため、実行中、その関数のコードが、そのコードの出所であるサブルーチンへのコンテキスト切り替え、およびそのようなサブルーチンからのコンテキスト切り替えを行う必要なしに、インラインでコンパイルされて、実行されることが可能である。そのようにコピーを行うことは、複製されるデータのため、アプリケーションの全体的なサイズを増大させる可能性がある。その結果、アプリケーション全体にわたって多数回、出現するサブルーチンは、あまりにも多くの複製を必要とし、そのため、それらの関数を組み込むことから得られるべき処理上の利益が、ストレージ要件の増大、多数の関数をインライン化するのに要求される過度の処理時間などによって相殺される可能性がある。その結果、そのような関数は、さもなければ、閾値に従って適格である場合でも、単純であると判定されないことが可能である。
1つまたは複数の関数が、任意選択のステップ207において単純であると判定された場合、任意選択のステップ209において、それらの関数は、アプリケーションコードの本文にインラインで配置される。前述したとおり、コードをインラインで配置することは、サブルーチンなどからコードをコピーして、本文における対応する関数呼び出しを、そのサブルーチンコードで置き換えることを必然的に伴う。関数をインラインで配置することの効果の図を、後段で説明する図4A〜図4Bに示す。ステップ207の判定が、任意選択のステップ207において単純であると判定された関数が全く存在しないということであった場合、方法200は、ステップ211に直接に進む。
ステップ211で、エミュレートされたコードのJIT変換が、ランタイムエンジンなどによるコードの実行に関連して行われる。前述したとおり、複雑な関数は、ステップ205でプリコンパイルされているので、そのような関数は、ステップ211において変換される必要がなく、直接に実行されることが可能である。さらに、コンテキスト切り替えは、ステップ209でインラインで配置されたいずれの関数に関しても、実行される必要がない。
前述したとおり、関数が複雑であるか、または単純であるか(したがって、関数が、プリコンパイルされるべきか、またはインラインで配置されるべきか)を判定するために使用される閾値および要因は、アプリケーションの所望されるブート時間を含むが、これには限定されない、様々な要因に基づくことが可能である。このため、或る実施形態は、開発者などが、そのようなプリコンパイルおよび/またはインライン化によって生じる実行時間上の利益と、ブート時間の対応する増加との間の許容できるトレードオフを決定することを可能にすることが理解されよう。
図3は、或る実施形態による例示的なコードフローを示す。関数310a〜dは、アプリケーションの仮想コードの本文300内の関数を表す。実行時間中、関数310aが、JIT変換プロセス320aを使用して変換される。コードフローは、関数310aからJIT変換プロセス320aにつながる矢印Aによって表され、次いで、JIT変換プロセス320aが完了すると、矢印Bが、次いで関数310aが実行されることを示す。エミュレートされたバイナリは、次いで、矢印Cによって関数310bに進む。関数310bも、矢印Aで表されるとおり、プロセス320bによるJIT変換を受け、矢印Bで表されるとおり、実行される。しかし、バイナリが、プリコンパイルされた関数310cに達すると、JIT変換は、全く要求されない。というのは、プリコンパイルされた関数310cは、例えば、図2のステップ205に従って、既に変換を受けているので、実行される準備ができている。同じことが、プリコンパイルされた関数310dにも当てはまる。このため、図3は、或る実施形態に従って行われることが可能な、変形されたJIT変換プロセスを例示することがわかる。
図4A〜図4Bは、図2の任意選択のステップ209に関連して前述したとおり、コードのインライン化に関連する例示的なコードフローを示す。図4Aを参照すると、関数410a〜bが、アプリケーションの本文400内に配置されている。サブルーチン420a〜bが、矢印Aで示されるとおり、関数410a〜bから、それぞれ呼び出され、サブルーチン420a〜bの結果が、矢印Bで示されるとおり、関数410a〜bに戻される。図4Aでわかるように、サブルーチン420bは、「単純」として示され、このことは、サブルーチン420bが、図2のステップ207に関連して前述したとおり、例えば、閾値未満のコード行数を有することを示す。本文400内の関数410aから関数410bに至るコードフローが、矢印Cで表される。
次に図4Bを参照すると、関数410aおよびサブルーチン420aは、図4Aに関連して前述したとおりである。しかし、関数410bは、サブルーチン420bへの呼び出しを含まないことがわかる。代わりに、関数410bは、コードの本文400の中に配置されたサブルーチン420bに進む。このため、矢印AおよびBで示される呼び出しおよびリターンが、サブルーチン420bに関して回避される。サブルーチン420b’は、サブルーチン420bのコードが、コードの本文400にコピーされているために使用されない、元のサブルーチン420bによって占有されるメモリを表す。
本発明を様々な図の実施形態に関連して説明してきたが、本発明を逸脱することなく、本発明と同一の機能を実行するために、他の類似した実施形態が使用されることが可能であり、あるいは説明した実施形態に変更および追加が行われることが可能であることを理解されたい。したがって、本発明は、いずれの単一の実施形態にも限定されるべきではなく、むしろ、添付の特許請求の範囲による広がりおよび範囲で解釈されなければならない。
本発明の諸態様が実施されることが可能な例示的なコンピューティング環境を示す図である。 本発明の実施形態による例示的な方法を示す流れ図である。 本発明の実施形態による例示的なコードフローを示すブロック図である。 本発明の実施形態によるコードフローの例示的な変更を示すブロック図である。 本発明の実施形態によるコードフローの例示的な変更を示すブロック図である。

Claims (4)

  1. 本文と関数とから構成され、エミュレートされたバイナリで記述されたソフトウェアアプリケーションをコンピュータにより実行する方法であって、
    コンピュータが、
    ソフトウェアアプリケーションをプリブートスキャンするステップであって、
    行数が第1の所定の閾値を超える第1の関数を識別するステップ、及び、
    実行のためにコンテキスト切り替えを要し、かつ、行数が第2の所定の閾値を下回る第2の関数を識別するステップ
    を含むステップと、
    前記第1の関数をプリコンパイルしてメモリに保存するステップと、
    前記第2の関数を、前記本文にインラインで配置するステップと、
    前記ソフトウェアアプリケーションを実行するステップであって、前記第1の関数については、コンパイルしたものをメモリから読み出して実行し、プリコンパイルした前記第1の関数及びインライン配置した前記第2の関数以外の部分については、ジャストインタイム変換を利用して実行するステップと、
    を実行する方法。
  2. 前記ソフトウェアアプリケーションは、ゲームソフトウェアである請求項1に記載の方法。
  3. 前記第1の関数及び第2の関数は、グラフィックスレンダリングに関連する請求項1に記載の方法。
  4. 本文と関数とから構成され、エミュレートされたバイナリで記述されたソフトウェアアプリケーションをコンピュータに実行させるためのプログラムであって、
    前記コンピュータに、
    ソフトウェアアプリケーションをプリブートスキャンするステップであって、
    行数が第1の所定の閾値を超える第1の関数を識別するステップ、及び、
    実行のためにコンテキスト切り替えを要し、かつ、行数が第2の所定の閾値を下回る第2の関数を識別するステップ
    を含むステップと、
    前記第1の関数をプリコンパイルしてメモリに保存するステップと、
    前記第2の関数を、前記本文にインラインで配置するステップと、
    前記ソフトウェアアプリケーションを実行するステップであって、前記第1の関数については、コンパイルしたものをメモリから読み出して実行し、プリコンパイルした前記第1の関数及びインライン配置した前記第2の関数以外の部分については、ジャストインタイム変換を利用して実行するステップと、
    を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2008520347A 2005-07-08 2006-06-30 ソフトウェアアプリケーションを実行する方法及び記録媒体 Expired - Fee Related JP4294084B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/177,130 US7389500B2 (en) 2005-07-08 2005-07-08 Selective pre-compilation of virtual code to enhance boot time emulator performance
PCT/US2006/026081 WO2007008506A2 (en) 2005-07-08 2006-06-30 Selective pre-compilation of virtual code to enhance emulator performance

Publications (2)

Publication Number Publication Date
JP2009501368A JP2009501368A (ja) 2009-01-15
JP4294084B2 true JP4294084B2 (ja) 2009-07-08

Family

ID=37619700

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008520347A Expired - Fee Related JP4294084B2 (ja) 2005-07-08 2006-06-30 ソフトウェアアプリケーションを実行する方法及び記録媒体

Country Status (6)

Country Link
US (1) US7389500B2 (ja)
EP (1) EP1902364A4 (ja)
JP (1) JP4294084B2 (ja)
KR (1) KR20080023728A (ja)
CN (1) CN101238438B (ja)
WO (1) WO2007008506A2 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8157654B2 (en) * 2000-11-28 2012-04-17 Nintendo Co., Ltd. Hand-held video game platform emulation
US7987457B2 (en) * 2007-06-25 2011-07-26 Microsoft Corporation Targeted patching for native generation images
US8875114B2 (en) * 2007-09-21 2014-10-28 International Business Machines Corporation Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
KR100964581B1 (ko) * 2008-08-20 2010-06-21 주식회사 컴퍼니원헌드레드 두 단계 레지스터 기반 바이트코드를 이용한 스크립트 언어 실행 시스템
US9239732B2 (en) * 2011-02-16 2016-01-19 Microsoft Technology Licensing Llc Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy
US9075913B2 (en) * 2012-02-27 2015-07-07 Qualcomm Incorporated Validation of applications for graphics processing unit
CN104205049B (zh) * 2012-03-22 2018-05-11 英特尔公司 混合模拟和内核函数处理系统和方法
US9378001B2 (en) 2014-05-02 2016-06-28 Microsoft Technology Licensing, Llc Matching program sections through feature extraction
JP2018028777A (ja) * 2016-08-17 2018-02-22 Necプラットフォームズ株式会社 エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム
CN109426503B (zh) * 2017-07-21 2022-05-31 华为技术有限公司 提供仿真激励的方法及装置
US10671758B2 (en) * 2017-08-30 2020-06-02 Micro Focus Llc Redacting core dumps by identifying modifiable parameters
US20190220294A1 (en) * 2018-01-17 2019-07-18 International Business Machines Corporation Using lightweight jit compilation for short-lived jvms on parallel distributing computing framework
US11720340B2 (en) * 2019-07-30 2023-08-08 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5097407A (en) 1986-08-08 1992-03-17 Integrated Inference Machines Artificial intelligence processor
US6607445B1 (en) 1998-04-27 2003-08-19 Sega Enterprises, Ltd. Game execution method and equipment using player data
US6637025B1 (en) * 1998-12-03 2003-10-21 International Business Machines Corporation Dynamic selection/definition of which class/methods should or should not be jit'ed using information stored in a jar file
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
US7225436B1 (en) * 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6338160B1 (en) * 1998-12-08 2002-01-08 Nazomi Communications, Inc. Constant pool reference resolution method
US6774885B1 (en) 1999-01-20 2004-08-10 Motek B.V. System for dynamic registration, evaluation, and correction of functional human behavior
US6842894B1 (en) 1999-04-05 2005-01-11 Gateway, Inc. Dynamic Compiling
US6354940B1 (en) 1999-04-30 2002-03-12 Square Co., Ltd. Game apparatus, game fight processing method, and computer readable storage medium storage program therefor
JP3191241B2 (ja) 1999-07-14 2001-07-23 株式会社スクウェア コンピュータ読み取り可能な記録媒体、ゲーム制御方法およびゲーム装置
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US7225456B2 (en) * 2001-04-23 2007-05-29 Sony Corporation Gateway screen for interactive television
US6704926B1 (en) * 2000-09-28 2004-03-09 International Business Machines Corporation Bimodal Java just-in-time complier
JP2002169696A (ja) * 2000-12-04 2002-06-14 Mitsubishi Electric Corp データ処理装置
CA2456835C (en) 2001-08-10 2012-03-20 Stephen John Regelous A method of rendering an image and a method of animating a graphics character
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
GB0220282D0 (en) * 2002-08-31 2002-10-09 Ibm Improved just in time compilation of java software methods
US7090576B2 (en) 2003-06-30 2006-08-15 Microsoft Corporation Personalized behavior of computer controlled avatars in a virtual reality environment

Also Published As

Publication number Publication date
KR20080023728A (ko) 2008-03-14
JP2009501368A (ja) 2009-01-15
EP1902364A4 (en) 2009-01-21
EP1902364A2 (en) 2008-03-26
CN101238438A (zh) 2008-08-06
CN101238438B (zh) 2010-12-08
WO2007008506A2 (en) 2007-01-18
US7389500B2 (en) 2008-06-17
WO2007008506A3 (en) 2007-08-23
US20070011666A1 (en) 2007-01-11

Similar Documents

Publication Publication Date Title
JP4294084B2 (ja) ソフトウェアアプリケーションを実行する方法及び記録媒体
US7783867B2 (en) Controlling instruction execution in a processing environment
EP2359247B1 (en) Transforming user script code for debugging
US8863117B2 (en) Optimizing a file system interface in a virtualized computing environment
US8307353B2 (en) Cross-domain inlining in a system virtual machine
US7500245B2 (en) Changing code execution path using kernel mode redirection
US20080091923A1 (en) Register-based instruction optimization for facilitating efficient emulation of an instruction stream
US8281296B2 (en) Cross-ISA inlining in a system virtual machine
US20130096908A1 (en) Employing native routines instead of emulated routines in an application being emulated
US8904346B1 (en) Method and system for automated load testing of web applications
US20140222410A1 (en) Hybrid emulation and kernel function processing systems and methods
US10025607B2 (en) Optimizing a file system interface in a virtualized computing environment
CN111625290A (zh) 一种Android平台下布局文件预加载方法、装置及电子设备
EP2115574B1 (en) Employing a buffer to facilitate instruction execution
JP2003330736A (ja) 不正リソース利用防止システム及びその方法並びにプログラム
TWI660307B (zh) 二元碼轉譯裝置及方法
US20240028336A1 (en) Techniques for reducing cpu privilege boundary crossings
KR101976993B1 (ko) 모바일 코드 자동 분석을 위한 동적 바이너리 계측 코드추출장치 및 그 방법
JP2007323358A (ja) コンパイラプログラムを記録する媒体、コンパイル方法及びこれを伴う情報処理装置
CN113986461A (zh) 一种目标处理器上系统调用的侵入式半本地化仿真方法
CN116450145A (zh) 程序编译方法、装置、电子设备及可读存储介质
JP6639238B2 (ja) プログラムおよびコンピュータ
US9292304B2 (en) Language integration via function redirection

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080929

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20081113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081119

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090217

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20090310

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20090407

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120417

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120417

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130417

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees