JP2007505399A - 混合モード命令の動的な最適コンパイルのための方法及び装置 - Google Patents

混合モード命令の動的な最適コンパイルのための方法及び装置 Download PDF

Info

Publication number
JP2007505399A
JP2007505399A JP2006526229A JP2006526229A JP2007505399A JP 2007505399 A JP2007505399 A JP 2007505399A JP 2006526229 A JP2006526229 A JP 2006526229A JP 2006526229 A JP2006526229 A JP 2006526229A JP 2007505399 A JP2007505399 A JP 2007505399A
Authority
JP
Japan
Prior art keywords
instruction
native software
instructions
software instruction
native
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.)
Granted
Application number
JP2006526229A
Other languages
English (en)
Other versions
JP4801587B2 (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2007505399A publication Critical patent/JP2007505399A/ja
Application granted granted Critical
Publication of JP4801587B2 publication Critical patent/JP4801587B2/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
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

混合モード命令の動的な最適コンパイルの方法及び装置が提供される。
一実施形態では、提供された方法は、非ネイティブソフトウェア命令をデバイスで受け取る段階と、デバイスで行われる、非ネイティブソフトウェア命令に基づいて第1命令セットから第1ネイティブソフトウェア命令を生成する段階と、第1ネイティブソフトウェア命令をデバイスで実行する段階と、デバイスで行われる、非ネイティブソフトウェア命令に基づいて第2命令セットから第2ネイティブソフトウェア命令を生成する段階と、第2ネイティブソフトウェア命令をデバイスで実行する段階とを備える。

Description

この発明の開示は、混合モードコンピュータ命令に関連し、より実際的には、混合モードコンピュータ命令の動的な最適コンパイルのための方法及び装置に関連する。
エンデッドシステム(例えば、無線通信端末、無線データデバイス等)は、要求が増大しつづける状態にある。エンベデッドシステムで利用可能なリソースのタイプは、静的及び動的メモリ、処理能力、ディスプレイサイズ、バッテリ寿命、入出力能力等の観点で著しく異なる。したがって、エンベデッドシステムにおけるハードウェア及びソフトウェアの収斂(convergence)は非常に小さい。
当業者に知られているように、ネイティブなコンパイル型言語(例えば、Cプログラミング言語)よりも、Java(登録商標)、C#等のような中間言語(IL)を用いてエンベデッドシステムを開発することには多くの利点がある。第1に、中間言語モジュールを複数のプラットフォームに移植することは、ほとんどのコンパイル型言語と異なり、ソースコードを変更することなく可能である。第2に、複数の中間言語及びそれらのランタイム環境は多くの場合、多くのコンパイル型言語が有していない、配列境界チェックのようなバグ排除機能、自動的なガーベッジコレクション、及び例外処理を有している。第3に、中間言語は、典型的には、完全なインタプリタ型言語より高速に動作する。
前述の中間言語の利点を理解するとともに、エンベデッドシステムはランタイム環境で動作する中間言語に徐々に移行している。アプリケーションソフトウェアがランタイム環境からより大きな価値を得ていることから、多くの将来のアプリケーションは中間言語を用いて記述されるであろうことが期待される。
エンベデッドシステムで中間言語を使用することの最大の抑制要因の1つは、その実行速度である。中間言語は典型的には、インタプリタ型言語より高速に動作するが、中間言語は通常、ネイティブなコンパイル型言語より低速である。例えば、Java(登録商標)のような中間言語は、Cのようなネイティブなコンパイル型言語より最大3倍から4倍低速かもしれない。
中間言語命令をスピードアップする1つの技術は、中間言語命令のいくつかからネイティブ命令を生成することを含む。典型的には、最も頻繁に使用される複数のコードパスだけがネイティブコードにコンパイルされ、その他のコードは中間言語命令として残される。この従来技術はパフォーマンスを向上させる場合がある、中間言語命令のいくつかからのネイティブ命令の生成は、1つのプロセッサの1つの命令セットだけを用いる。
ARM準拠プロセッサのような混合モードプロセッサは、例えば16ビット命令セット(サム命令セット)及び32ビット命令セット(ARM命令セット)のような、2以上の命令セットを有する。これらの複数の命令セットのそれぞれは、その複数の命令セットがどのように使用されるかによって、利点及び欠点を持つ。例えば、16ビットサム命令セットは、典型的には、32ビットARM命令の機能を半分のビット数にエンコードするので、それによってより高いコード密度もたらす。しかしながら、ARM命令は典型的には、サム命令が有するものよりも、より意味論的な中身を持つ。当業者に知られているように、このことは、サム命令で実装された動作が、ARM命令で実装された動作と等価な動作を実行するためには、より多くの命令(例えば、40%のさらなる命令)を必要とする場合があるということを意味する。例えば、16ビットの即時データロケーションを使用するには、データをレジスタに移動するために、サム命令セットはARM命令セットが必要とする命令より2つの更なる命令を必要とするだろう。
システムのメモリ構成に依存して、ARMコードはサムコードより著しく高速に動作し、又はその逆に動作する場合がある。例えば、32ビットメモリでは、ARMコードは対応するサムコードより40%高速に動作すると評価されている。しかしながら、16ビットメモリでは、サムコードは対応するARMコードより45%高速に動作するだろう。したがって、そのようなエンベデッドシステムの個々の構成に基づく速度及び記憶特性の大きな差により、中間言語を排他的に1つの命令セット(例えば、ARM命令セット)にコンパイルすることには重大な欠点が存在する。加えて、全ての中間言語命令をネイティブ命令にコンパイルしないことには、重大な欠点が存在する。
開示されたシステムのための一利用環境を示すコンピュータシステムの一例のブロック図である。
図1のコンピューティングシステムによって実行される、混合モード命令システムの動的な最適コンパイルの方法の一例を示すブロック図である。
図1のコンピューティングシステムによって実行される、混合モード命令を動的にコンパイルするための処理の一例を示すフローチャートである。
図1のコンピューティングシステムによって実行される、混合モード命令の発見的最適化のための処理の一例を示すフローチャートである。
図1のコンピューティングシステムによって実行される、16ビット命令及び32ビット命令の使用のどちらにするかを決定する処理の一例を示すフローチャートである。
全般的には、ここに記載される方法及び装置は、混合モード命令を動的にコンパイル(すなわち、混合モード命令の動的な最適コンパイル)する。以下の記載は特にハードウェアで実行されるソフトウェアを含むシステム例を開示するが、そのような複数のシステムは単に実例であって、限定するとみなされるべきではないことに注意すべきである。
例えば、開示されたハードウェア及びソフトウェアコンポーネントのいくつか又は全ては、専用のハードウェアだけ、ソフトウェアだけ、ファームウェアだけ、或いはハードウェア、ファームウェア及び/又はソフトウェアのいくつかの組み合わせに組み入れられることができると考えられる。
さらに、以下の開示は、動的コンパイルシステムの例に関連してなされるが、その開示されたシステムに多くの他の動的コンパイルシステムを容易に適用可能であることが理解されるべきである。したがって、以下にシステム例及び処理例が記載されているが、当業者は、その開示された例はそのようなシステムを実装するただ1つの方法ではないということを容易に理解するだろう。例えば、16ビット命令セット及び32ビット命令セット以外の命令セットが使用され得るだろう。
図1は、コンピュータシステム100の一例のブロック図を示す。コンピュータシステム100は、パーソナルコンピュータ(PC)、携帯情報端末(PDA)、インターネット機器、移動電話、又は他の任意のコンピューティングデバイスであってよい。一例では、コンピュータシステム100は、電源103によって給電される主プロセッシングユニット102を備える。主プロセッシングユニット102は、システム相互接続106によって主メモリデバイス108及び1以上のインタフェース回路110に電気的に結合された混合モードプロセッサユニット104を含んでよい。一例では、システム相互接続106は、アドレス/データバスである。無論、当業者は、混合モードプロセッサユニット104を主メモリデバイス108に結合するためにバス以外の相互接続が使用され得ることを容易に理解するだろう。一例では、1以上の専用線及び/又はクロスバが、混合モードプロセッサユニット104を主メモリデバイス108に結合するために使用されてよい。
混合モードプロセッサユニット104は、Intel(登録商標)Xscale(登録商標)ファミリプロセッサ及びIntel(登録商標)のInternet Exchange Processor(IXP)ファミリプロセッサからのプロセッサのような、よく知られた任意のタイプの混合モードプロセッサを含む。他にも、混合モードプロセッサ104は、2個以上の、シングル命令セットプロセッサによって実装されてよい。例えば、Intel(登録商標)Pentium(登録商標)プロセッサ及びIntel(登録商標)Itanium(登録商標)プロセッサの混成システムが使用されてよい。さらに、混合モードプロセッサ104は、スタティックRAM(SRAM)のような、よく知られた任意のタイプのキャッシュメモリを有してよい。主メモリデバイス108は、ダイナミックRAM(DRAM)及び/又は任意の他の形式のランダムアクセスメモリを有してよい。例えば、主メモリデバイス108は、DDR型DRAM(DDRAM)を有してよい。主メモリデバイス108は、不揮発性メモリを有してもよい。一例では、主メモリデバイス108は、よく知られた方法で混合モードプロセッサ104によって実行されるソフトウェアプログラムを記憶する。主メモリデバイス108は、混合モードプロセッサ104による実行のためのコンパイラプログラム111を記憶してよい。
インタフェース回路110は、イーサネットインタフェース及び/又はユニバーサルシリアルバス(USB)インタフェースのような、よく知られた任意のタイプのインタフェース基準を用いて実装される。1以上の入力デバイス112は、データ及びコマンドを主プロセッシングユニット102に入力すべくインタフェース回路110に結合されてよい。例えば、入力デバイス112は、キーボード、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント(isopoint)、及び/又は音声認識システムであってよい。
1以上のディスプレイ、プリンタ、スピーカ、及び/又は他の出力デバイス114が、1以上のインタフェース回路110を介して主プロセッシングユニット102に結合されてよい。ディスプレイ114は、陰極線管(CRT)、液晶表示装置(LCD)、又は任意の他のタイプのディスプレイであってよい。ディプレイ114は、主プロセッシングユニット102の動作中に生成されたデータの視覚的な指示を生成する。その視覚的な指示は、人間のオペレータ入力用のプロンプト、計算された値、検出されたデータ等を含む。
コンピュータシステム100は、1以上の記憶デバイス116を備える。例えば、コンピュータシステム100は、1以上のハードドライブ、コンパクトディスク(CD)ドライブ、デジタル多目的ディスクドライブ(DVD)、及び/又は他のコンピュータメディア入出力(I/O)デバイスを備える。
コンピュータシステム100は、ネットワーク118への接続を介して、他のデバイスとデータを交換してもよい。ネットワーク118への接続は、イーサネット接続、デジタル加入者線、電話線、同軸ケーブル等のような、任意のタイプのネットワーク接続であってよい。ネットワーク118は、インターネット、電話ネットワーク、ケーブルネットワーク、及び/又は無線ネットワークのような、任意のタイプのネットワークであってよい。
図2のブロック図は、全般的には、混合モード命令システム200の動的な最適コンパイルの方法の一例を示す。混合モード命令システム200は、複数のアプリケーション202、言語コンパイラ204、コンパイルされたバイナリ206、及びランタイム環境208を備える。
複数のアプリケーション202は、Java(登録商標)ソースファイル、C#ソースファイル等を含む。さらに、複数のアプリケーション202は、Perl、Python,Jython等のような、一般的には仮想マシンコンパイル型言語に関連しないプログラミング言語によるソースファイルを含む。
複数のアプリケーション202は、言語コンパイラ204によってコンパイルされる。
言語コンパイラ204の例は、Java(登録商標)コンパイラ、C#コンパイラ、J#コンパイラ、Visual Basic .NETコンパイラ、Visual C++ .NETコンパイラ等であってよい。言語コンパイラ204は、高レベル記号型言語で記述されたコンピュータプログラム(例えば、複数のアプリケーション202)を、中間言語命令(すなわち、非ネイティブ命令)に変換する。
言語コンパイラ204の出力(すなわち、非ネイティブ命令)は、コンパイルされたバイナリ206に記憶される。コンパイルされたバイナリ206は、例えば、Java(登録商標)バイトコード、.NET MSIL、Perlバイトコード等であってよい。コンパイルされたバイナリ206は、ランタイム環境がロードし、ネイティブ命令にコンパイルし、そしてそれから実行することができる形式の、複数の非ネイティブ命令を有する。
例えば、コンパイルされたバイナリ206がJava(登録商標)バイトコードである場合、そのコンパイルされたバイナリ206は一連の複数のJava(登録商標)命令を有する。一連の複数のJava(登録商標)命令の個々のJava(登録商標)命令のそれぞれは、ゼロの又はさらなるオペランドが続く1バイトのオペコードである。その1バイトのオペコードは、ランタイム環境208(すなわち、Java(登録商標)仮想マシン)が使用する1つのオペレーションである。そのオペランドは、そのオペコードのオペレーションによって使用される値である。例えば、Java(登録商標)バイトコードは、以下の16進形式の一連のバイト"84 01 02"を含む。ランタイム環境208は、"84"が、ローカル変数をインクリメントするオペレーションである"iinc"を意味すると解釈してよい。この場合、オペランド"01"は、いずれのローカル変数が整数値によってインクリメントされるべきかを示し、この場合、オペランド"02"は、十進値の2を示す。
ランタイム環境208は、Java(登録商標)仮想マシン、.NET共通言語ランタイム(CLR)、Perl仮想マシン(例えば、Parrot)等であってよい。ランタイム環境208は、JITコンパイラ210及び実行コード212を有する。コンパイルされたバイナリ206は、図1の主メモリデバイス108の中に記憶され得る、JITメモリロケーション214中にコンパイルされたバイナリ206のコピーを形成すべく、JITコンパイラ210にロードされてよい。JITメモリロケーション214の中のコンパイルされたバイナリ206のコピーが主メモリ108に一旦ロードされると、JITコンパイラ210は、そこに記憶された非ネイティブ命令に従って動作してよい。例えば、サムコードジェネレータ216が非ネイティブ命令をネイティブなサム命令に生成することによって、或いは、ARMコードジェネレータ218が非ネイティブ命令をネイティブなARM命令に生成することによって、非ネイティブ命令はJITコンパイラ210によって実行され得る。サムコードジェネレータ216及びARMコードジェネレータ218は、16ビット命令セットコード及び32ビット命令セットコードをそれぞれ生成する、JITコンパイラ210のコンポーネントであってよい。
当業者に知られているように、そのような非ネイティブ命令をネイティブ命令に変換する方法が存在する。例えば、インシグニアソリューションズ社は、Jeodeプラットフォームとして知られるJava(登録商標)ベースのランタイム環境を提供している。そのJeodeプラットフォームは、まれにしか使用されないコードパスに対してインタプリタを使用し、頻繁に実行されるコードパスに対してJITコンパイラを使用する。JeodeプラットフォームのJITコンパイラは、非ネイティブ命令を1以上のARM命令に変換する能力を持つ。JeodeプラットフォームのJITコンパイラは、しかしながら、混合モード命令の生成を利用しておらず、代わりに1つの命令セットを単に使用する。ARMコードジェネレータは、これらのよく知られた複数の方法の1つを実装してよい。他にも、又はさらに、ARM命令は、非ネイティブ命令からではなく、サム命令から変換されてよい。例えば、ARM開発スイート(ADS)は、ソースファイルからARM命令又はサム命令のいずれかに変換することができるコンパイラ及びアセンブラを有する。サムコードジェネレータ216は、同様の方法で非ネイティブ命令をネイティブ命令に変換してよい。
さらに、JITコンパイラ210は、非ネイティブ及びネイティブ命令の生成及び実行に関係するオペレーションデータを記憶するコードプロファイラ220を含む。さらに又はそれに代えて、コードプロファイラ220は、JITコンパイラ210の外部に設けられてよい。混合モード生成がいかにして及びいつ実現されるかというさらなる詳細は、図3を用いて説明される。
図3のプロセス300の例は全般的に、図1の主プロセッシングユニット102にある複数の命令を動的にコンパイルする。とはいえ、その複数の命令は、図1のインターネット、POTS、及び/又は他の(複数の)ネットワーク118、或いは、図1の(複数の)ハードドライブ、(複数の)CD、(複数の)DVD、及び/又は他の複数の記憶デバイス116に由来してもよい。より具体的には、プロセス300の例は、図2のJITコンパイラ210の中で動作してよい。好ましくは、プロセス300は、1以上のメモリに記憶されて1以上のプロセッサによってよく知られた方法で実行される、1以上のソフトウェアプログラムに組み込まれてよい。しかしながら、プロセス300のブロックのいくつか又は全ては、手動で実行されてよい。プロセス300は、図3に示されたフローチャートに関連して説明されるが、当業者は、プロセス300を実行する多くの他の方法を用いることができることを容易に理解するだろう。例えば、ブロックの多くの順番が変更されたり、1以上のブロックの動作が変更されたり、複数のブロックが結合されたり、及び/又は複数のブロックが排除されたりしてよい。
プロセス300の例は、メソッドが以前に呼び出されたか否かを判断することによって開始する(ブロック302)。一実装例は、そのメソッドのサム命令が既に存在するかをチェックしてよい。そのメソッドのサム命令が既に存在する場合、そのメソッドが以前に呼び出されたと判断される。
そのメソッドが以前に呼び出されていない場合(ブロック302)、図2の16ビットサムコードジェネレータ216は、他の方法でサムコードジェネレータ216によって生成されたものより小さいサムコードを生成すべく、必要に応じて設定されてよい(ブロック304)。より小さいコードの1つの利点は、図1のコンピュータシステム100のメモリサイズを低減する可能性であり、それは場合によってはより少なくより限られたリソースを持つ安価な製品をもたらす。ここで、16ビットサムコードジェネレータ216のコンフィギュレーションは、イネーブルレベル及びディセーブルレベルの2つのレベルだけを持つとして説明されているが、当業者は、様々なレベルのコンフィギュレーションを定義可能であることを理解している。
16ビットサムコードジェネレータ216を必要に応じて設定した(ブロック304)後、サム命令が生成され(ブロック306)、プロセス300の例は終了する(ブロック308)。サム命令は、図2のサムコードジェネレータ216によって生成される。サムコードジェネレータ216は、非ネイティブ命令をネイティブ命令に変換することによってサム命令を生成する。サムコードの明らかな特性により、最初の呼び出しでサム命令を生成することが堅実である。例えば、サムコードは、典型的にはARMコードが要するメモリスペースより小さなメモリスペースしか要しないが、ARMコードはサムコードより高速であるかもしれない。したがって、最も頻繁に呼び出される命令をARM命令へと生成し、あまり頻繁に実行されない命令は、より優れたメモリスペース特性を持つサム命令へと生成することが望ましい。プロセス300中のこの時点では、命令の呼び出し頻度はまだ分かっておらず、それゆえ命令はサム命令へと変換される。
逆に、そのメソッドが以前に呼び出されていた場合(ブロック302)、現在実行されたメソッドに関する呼び出しカウンタがインクリメントされる(ブロック310)。呼び出しカウンタは、上述のメソッドが呼び出された回数を表す、図2のコードプロファイラ220に記憶された変数であってよい。一実装例は、生成されたネイティブなサム又はARMメソッド内に、呼び出しカウント命令を挿入してよい。この呼び出しカウント命令は、グローバル変数としての呼び出しカウンタをインクリメントしてよい。その呼び出しカウンタは、図2のコードプロファイラ220内にあってよい。代わりに、呼び出しカウント命令は、図2のコードプロファイラ220内でローカルスコープを持つ変数としての呼び出しカウンタをインクリメントするメソッドを呼び出してよい。その変数は、上述のメソッドが呼び出された回数を表す。その変数がゼロである場合、プロセス300は、そのメソッドが以前に呼び出されていない旨を判断し、そうでなければこのプロセス300は、そのメソッドが以前に呼び出された旨を判断する。
現在実行されたメソッドに関する呼び出しカウンタがインクリメントされた(ブロック310)後、プロセス300の例は、その呼び出しカウンタが予め定められたリミットより大きいか否かを判断する(ブロック312)。その呼び出しカウンタが予め定められたリミットより大きくない場合(ブロック312)、そのサムコードは既に存在し、したがって再び生成される必要はない。その結果、プロセス300の例は終了する(ブロック308)。
逆に、その呼び出しカウンタが予め定められたリミットより大きい場合(ブロック312)、発見的最適化プロセスが呼び出される(ブロック314)。発見的最適化プロセスは、図4に関連してより詳細に説明される。発見的最適化プロセスが制御をリターンした後、プロセス300の例は終了する(ブロック308)。
図4は、発見的最適化プロセス400の一例を示す。好ましくは、プロセス400は、1以上のメモリに記憶されて1以上のプロセッサによってよく知られた方法で実行される、1以上のソフトウェアプログラムに組み込まれてよい。しかしながら、プロセス400のブロックのいくつか又は全ては、手動で実行されてよい。プロセス400は、図4に示されたフローチャートに関連して説明されるが、当業者は、プロセス400を実行する多くの他の方法を用いることができることを容易に理解するだろう。例えば、ブロックの多くの順番が変更されたり、1以上のブロックの動作が変更されたり、複数のブロックが結合されたり、及び/又は複数のブロックが排除されたりしてよい。
プロセス400の例は、全般的に、図1の主プロセッシングユニット102にある複数の混合モード命令を最適化する。とはいえ、その複数の命令は、図1のインターネット、POTS、及び/又は他の(複数の)ネットワーク118、或いは、図1の(複数の)ハードドライブ、(複数の)CD、(複数の)DVD、及び/又は他の複数の記憶デバイス116に由来してもよい。より具体的には、そのプロセス400の例は、図2のJITコンパイラ210の中で動作してよい。
図2の複数のアプリケーション202の1以上のアプリケーションのような、多くのソフトウェアアプリケーションは、アプリケーション時間の大部分を、図2のコンパイルされたバイナリ206からの少数の命令を実行することに費やす。これらの頻繁に実行される命令はホットスポットと呼ばれ、それらが中に組織化されたメソッドは、ホットスポットメソッドと呼ばれる。頻繁に実行されない大部分の命令の最適化がシステム全体のパフォーマンスを向上させることより、ホットスポットメソッドの最適化がシステム全体のパフォーマンスを向上させる。したがって、ホットスポットメソッドを正確に特定し、特定されたときにホットスポットメソッドを最適化することが重要である。ホットスポットメソッドの特定は、図3の呼び出しカウンタに関連して既に述べられた。
図4は、ホットスポットメソッドが最適化され得るプロセス400の例を示す。プロセス400の例は、より大きいコードになる可能性があるがより高速なコードを生成すべく、図2の32ビットARMコードジェネレータ218を必要に応じて設定することによって開始する(ブロック402)。典型的には、より大きいがより高速であることのトレードオフがホットスポットメソッド(例えば、タイムクリティカルなメソッド)のスピードを向上させ、より大きいメモリサイズをもたらすがより高いパフォーマンスをもたらす場合がある。ここでは32ビットARMコードジェネレータ218の設定が、イネーブルレベル及びディセーブルレベルのただ2つのレベルを持つとして説明されるが、当業者は、様々なレベルの構成を定義可能であることを理解している。
32ビットARMコードジェネレータ218を必要に応じて設定した(ブロック402)後、プロセス400の例は、ホットスポットメソッドの32ビットARMコードを生成する(ブロック404)。ホットスポットメソッドの32ビットARMコードを生成した(ブロック404)後、生成された32ビットARMコードから、そのホットスポットメソッドのARM命令カウントが求められる(ブロック406)。例えば、図2のJITコンパイラ210は、最後に生成された32ビットARMコード命令を含むメモリロケーションを、最初に生成された32ビットARMコード命令を含むメモリロケーションから減じることによって、ARM命令カウントを求めてよい。
ホットスポットメソッドのARM命令カウントが求められた(ブロック406)後、そのホットスポットメソッドのARMコードサイズが求められる(ブロック408)。ARMコードサイズは、バイト単位で測定されたARMマシンコードのサイズである。ARMコードサイズは、例えば、ARM命令カウントに4を乗ずることによって求められるか見積もられる。当業者が容易に理解できるように、ARM命令は、サイズが4オクテット(すなわち、バイト)である32ビットであるので、ARM命令カウントは4が乗ぜられる。ARM命令カウントは命令数を示すのに対し、ARMコードサイズは与えられたホットスポットメソッドのバイト数を示すという点で、ARMコードサイズはARM命令カウントと異なる。1つの命令は複数バイトを含んでよい。
ホットスポットメソッドのARMコードサイズが求められた(ブロック408)後、そのホットスポットメソッドのサム命令カウントが求められる(ブロック410)。例えば、図2のJITコンパイラ210が、最後に生成された16ビットサムコード命令を含むメモリロケーションを、最初に生成された16ビットサムコード命令を含むメモリロケーションから減じることによって、サム命令カウントを求めてよい。
ホットスポットメソッドのサム命令カウントが求められた(ブロック410)後、そのホットスポットメソッドのサムコードサイズが求められる(ブロック412)。サムコードサイズは、バイト単位で示されたサムマシンコードのサイズである。サム命令カウントは命令数を示すのに対し、サムコードサイズは与えられたホットスポットメソッドのバイト数を示すという点で、サムコードサイズはサム命令カウントと異なる。サムコードサイズは、例えば、サム命令カウントに2を乗ずることによって求められるか見積もられる。
当業者が容易に理解できるように、サム命令は、サイズが2オクテット(すなわち、バイト)である16ビットであるので、サム命令カウントは2が乗ぜられる。
ホットスポットメソッドのサムコードサイズが求められると(ブロック412)、サム又はARM決定プロセスが呼び出される(ブロック414)。サム又はARM決定プロセスは、図5に関連してより詳細に述べられる。サム又はARM決定プロセスが終了した(ブロック414)後、プロセス400の例は終了する(ブロック416)。
図5は、ARM又はサム命令を使用することを決定するためのプロセス500の一例を示す。好ましくは、プロセス500は、1以上のメモリに記憶されてよく知られた方法で1以上のプロセッサによって実行される、1以上のソフトウェアプログラムに組み込まれてよい。しかしながら、プロセス500のブロックのいくつか又は全ては、手動で実行されてよい。プロセス500は、図5に示されたフローチャートに関連して説明されるが、当業者は、プロセス500を実行する多くの他の方法を用いることができることを容易に理解するだろう。例えば、ブロックの多くの順番が変更されたり、1以上のブロックの動作が変更されたり、複数のブロックが結合されたり、及び/又は複数のブロックが排除されたりしてよい。
プロセス500の例は、全般的に、図1の主プロセッシングユニット102にある複数の混合モード命令を最適化する。とはいえ、その複数の命令は、図1のインターネット、POTS、及び/又は他の(複数の)ネットワーク118、或いは、図1の(複数の)ハードドライブ、(複数の)CD、(複数の)DVD、及び/又は他の複数の記憶デバイス116に由来してもよい。より具体的には、そのプロセス500の例は、図2のJITコンパイラ210の中で動作してよい。
プロセス500は、サム命令カウントがARM命令カウントより小さいか否かを判断することによって開始する(ブロック502)。サム命令カウントがARM命令カウントより小さいと判断された場合(ブロック502)、プロセス500の例は、そのより小さい命令カウントのために16ビットサムコードが最適であると判断する(ブロック504)。16ビットサムコードを使用することを決定した(ブロック504)後、プロセス500の例は終了する(ブロック506)。
逆に、サム命令カウントがARM命令カウントより大きければ(ブロック502)、プロセス500の例は、サム命令カウントがARM命令カウントより第1閾値を超えて大きいか否かを判断する(ブロック508)。その第1閾値は、不揮発性メモリに記憶されてよいし、システムのコードスペース(例えば、図1のハードドライブ、(複数の)CD、(複数の)DVD、フラッシュ、及び/又は他の記憶デバイス116)に直接記録されてよいし、通信リンクを通じて伝送される等してよい。その第1閾値は、例えば、パーセンテージ数(例えば、4%)、十進法数、十六進法数等のような、様々な異なるフォーマットの1つであってよい。
サム命令カウントがARM命令カウントに比べて第1閾値を越えて大きくない場合(ブロック508)、プロセス500の例は、命令カウントに関して16ビットサムコードが32ビットARMコードより著しく小さくないと判断して、32ビットARMが最適であると判断する(ブロック510)。32ビットARMコードが最適であると決定した(ブロック510)後、プロセス500の例は終了する(ブロック506)。
逆に、サム命令カウントがARM命令カウントに比べて第1閾値を越えて大きい場合(ブロック508)、プロセス500の例は、サムコードサイズがARMコードサイズより少なくとも第2閾値だけ小さいか否かを判断する(ブロック512)。その第2閾値は、不揮発性メモリに記憶されてよいし、システムのコードスペース(例えば、図1のハードドライブ、(複数の)CD、(複数の)DVD、フラッシュ、及び/又は他の記憶デバイス116)に直接記録されてよいし、通信リンクを通じて伝送される等してよい。その第2閾値は、例えば、パーセンテージ数(例えば、35%)、十進法数、十六進法数等のような、様々な異なるフォーマットの1つであってよい。
サムコードサイズがARMコードサイズより少なくとも第2閾値だけ小さい場合(ブロック512)、プロセス500の例は、その著しく小さいコードサイズのために16ビットサムコードが最適であると判断する(ブロック504)。プロセス500の例が16ビットサムコードを使用する旨を決定した(ブロック504)後に、プロセス500の例は終了する(ブロック506)。逆に、サムコードサイズがARMコードサイズより少なくとも第2閾値だけ小さくない場合(ブロック512)、プロセス500の例は32ビットARMコードが最適であると判断して(ブロック510)、終了する(ブロック506)。
ここではいくつかの方法及び装置が説明されたが、この特許の適用範囲はそれには制限されない。対照的に、この特許は、文言上語又は均等主義のもとに、添付のクレームの範囲内に適正に属する装置、方法、及び工業製品をカバーする。

Claims (30)

  1. 非ネイティブソフトウェア命令を実行する方法であって、
    前記非ネイティブソフトウェア命令をデバイスで受け取る段階と、
    前記非ネイティブソフトウェア命令に基づいて第1命令セットから第1ネイティブソフトウェア命令を生成する段階であって、前記デバイスで行われる段階と、
    前記第1ネイティブソフトウェア命令を前記デバイスで実行する段階と、
    前記非ネイティブソフトウェア命令に基づいて第2命令セットから第2ネイティブソフトウェア命令を生成する段階であって、前記デバイスで行われる段階と、
    前記第2ネイティブソフトウェア命令を前記デバイスで実行する段階と
    を備える方法。
  2. 前記第1ネイティブソフトウェア命令が実行された回数をカウントする段階と、
    前記第1ネイティブソフトウェア命令が実行された前記回数を閾値と比較する段階と
    をさらに備え、
    前記第2ネイティブソフトウェア命令を生成する段階は、(i)前記閾値と等しい前記回数、及び(ii)前記閾値を超える前記回数の1つに応答する
    請求項1に記載の方法。
  3. 前記第1ネイティブソフトウェア命令が実行された前記回数をカウントする手段を挿入する段階
    をさらに備える請求項2に記載の方法。
  4. 動的ランタイム設定パラメータを通じて前記閾値を受け取る段階
    をさらに備える請求項2に記載の方法。
  5. 前記非ネイティブソフトウェア命令を前記デバイスで受け取る段階は、
    中間言語命令を前記デバイスで受け取る段階
    を有する請求項1に記載の方法。
  6. 前記非ネイティブソフトウェア命令を前記デバイスで受け取る段階は、
    Javaバイトコードを前記デバイスで受け取る段階
    を有する請求項1に記載の方法。
  7. 前記非ネイティブソフトウェア命令を前記デバイスで受け取る段階は、
    前記非ネイティブソフトウェア命令を、ハンドヘルドコンピューティングデバイスで無線により受け取る段階
    を有する請求項1に記載の方法。
  8. 前記第1ネイティブソフトウェア命令はXビット幅の命令を有し、前記第2ネイティブソフトウェア命令はYビット幅の命令を有し、XはYより小さい
    請求項1に記載の方法。
  9. 前記第1ネイティブソフトウェア命令は16ビット幅の命令を有し、前記第2ネイティブソフトウェア命令は32ビット幅の命令を有する
    請求項1に記載の方法。
  10. 前記第1ネイティブソフトウェア命令はサム命令を有し、前記第2ネイティブソフトウェア命令はARM命令を有する
    請求項1に記載の方法。
  11. 前記第1ネイティブソフトウェア命令を生成する段階は、
    前記非ネイティブソフトウェア命令をジャストインタイムコンパイラを用いて前記デバイスでコンパイルする段階
    を有する請求項1に記載の方法。
  12. 前記第1ネイティブソフトウェア命令の生成の前に第1コード最適化オプションを設定する段階であって、前記第1コード最適化オプションはより小さいコードを生成させる段階と、
    前記第2ネイティブソフトウェア命令の生成の前に第2コード最適化オプションを設定する段階であって、前記第2コード最適化オプションはより高速なコードを生成させる段階と
    をさらに備える請求項1に記載の方法。
  13. 第1ネイティブソフトウェア命令を生成する段階は、第1の複数のネイティブソフトウェア命令を生成する段階を有し、
    第2のネイティブソフトウェア命令を生成する段階は、第2の複数のネイティブソフトウェア命令を生成する段階を有し、
    前記方法は、
    前記第1の複数のネイティブソフトウェア命令に含まれる第1の命令数をカウントする段階と、
    前記第2の複数のネイティブソフトウェア命令に含まれる第2の命令数をカウントする段階と、
    前記第1の命令数と前記第2の命令数とを比較する段階と
    をさらに備え、
    前記第1ネイティブソフトウェア命令を実行する段階は、(i)前記第1の命令数と等しい前記第2の命令数、及び(ii)前記第1の命令数を超える前記第2の命令数の1つに応答する
    請求項1に記載の方法。
  14. 前記第1の命令数及び前記第2の命令数を比較する段階
    をさらに備え、
    前記第2ネイティブソフトウェア命令を実行する段階は、予め定められた閾値より大きく前記第2の命令数を超えない前記第1の命令数に応答する
    請求項13に記載の方法。
  15. 前記第1ネイティブソフトウェア命令を測定して第1バイト数を得る段階と、
    前記第2ネイティブソフトウェア命令を測定して第2バイト数を得る段階と、
    前記第1バイト数と前記第2バイト数とを比較する段階と
    をさらに備え、
    前記第1ネイティブソフトウェア命令を実行する段階は、前記第2バイト数より少なくとも予め定められた閾値だけ小さい前記第1バイト数に応答する
    請求項1に記載の方法。
  16. 前記第1ネイティブソフトウェア命令を測定して第1バイト数を得る段階と、
    前記第2ネイティブソフトウェア命令を測定して第2バイト数を得る段階と、
    前記第1バイト数と前記第2バイト数とを比較する段階であって、前記第2ネイティブソフトウェア命令を実行する段階は、前記第2バイト数より少なくとも予め定められた閾値だけ小さくない前記第1バイト数に応答する段階と
    をさらに備える請求項1に記載の方法。
  17. 複数の機械アクセス可能命令を含む機械アクセス可能メディアを備える製品であって、前記複数の機械アクセス可能命令は、実行された場合に、デバイスに、
    非ネイティブソフトウェア命令を前記デバイスで受け取らせ、
    前記非ネイティブソフトウェア命令に基づいて第1命令セットから第1ネイティブソフトウェア命令を生成させ、前記第1ネイティブソフトウェア命令の前記生成は前記デバイスで行われ、
    前記第1ネイティブソフトウェア命令を前記デバイスで実行させ、
    前記非ネイティブソフトウェア命令に基づいて第2命令セットから第2ネイティブソフトウェア命令を生成させ、前記第2ネイティブソフトウェア命令の前記生成は前記デバイスで行われ、
    前記第2ネイティブソフトウェア命令を前記デバイスで実行させる
    製品。
  18. 前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1ネイティブソフトウェア命令が実行された回数をカウントさせ、
    前記第1ネイティブソフトウェア命令が実行された前記回数を閾値と比較させ、前記第2ネイティブソフトウェア命令の生成は、(i)前記閾値と等しい前記回数、及び(ii)前記閾値を超える前記回数の1つに応答させる
    請求項17に記載の機械アクセス可能メディア。
  19. 前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1ネイティブソフトウェア命令が実行された前記回数をカウントする手段を挿入させる
    請求項18に記載の機械アクセス可能メディア。
  20. 前記非ネイティブソフトウェア命令は中間言語命令を有する
    請求項17に記載の機械アクセス可能メディア。
  21. 前記第1ネイティブソフトウェア命令はXビット幅の命令を有し、前記第2ネイティブソフトウェア命令はYビット幅の命令を有し、XはYより小さい
    請求項17に記載の機械アクセス可能メディア。
  22. 前記第1ネイティブソフトウェア命令はサム命令を有し、前記第2ネイティブソフトウェア命令はARM命令を有する
    請求項17に記載の機械アクセス可能メディア。
  23. 前記複数の機械アクセス可能命令は、少なくともジャストインタイムコンパイラの一部を含む
    請求項17に記載の機械アクセス可能メディア。
  24. 前記第1ネイティブソフトウェア命令は第1の複数のネイティブソフトウェア命令を含み、前記第2ネイティブソフトウェア命令は第2の複数のネイティブソフトウェア命令を含み、前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1の複数のネイティブソフトウェア命令に含まれる第1の命令数をカウントさせ、
    前記第2の複数のネイティブソフトウェア命令に含まれる第2の命令数をカウントさせ、
    前記第1の命令数と前記第2の命令数とを比較させ、前記第1ネイティブソフトウェア命令の実行は、(i)前記第1の命令数と等しい前記第2の命令数、及び(ii)前記第1の命令数を超える前記第2の命令数の1つに応答させる
    請求項17に記載の機械アクセス可能メディア。
  25. 前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1の命令数と第2の命令数とを比較させ、前記第2ネイティブソフトウェア命令の実行は、予め定められた閾値より大きく前記第2の命令数を超える前記第1の命令数に応答させる
    請求項24に記載の機械アクセス可能メディア。
  26. 前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1ネイティブソフトウェア命令を測定させて第1バイト数を得させ、
    前記第2ネイティブソフトウェア命令を測定させて第2バイト数を得させ、
    前記第1バイト数と前記第2バイト数とを比較させ、前記第1ネイティブソフトウェア命令の実行は、前記第2バイト数より少なくとも予め定められた閾値だけ小さい前記第1バイト数に応答させる
    請求項17に記載の機械アクセス可能メディア。
  27. 前記複数の機械アクセス可能命令は、前記デバイスに、
    前記第1ネイティブソフトウェア命令を測定させて第1バイト数を得させ、
    前記第2ネイティブソフトウェア命令を測定させて第2バイト数を得させ、
    前記第1バイト数と前記第2バイト数とを比較させ、前記第2ネイティブソフトウェア命令の実行は、前記第2バイト数より少なくとも予め定められた閾値だけ小さくない前記第1バイト数に応答させる
    請求項17に記載の装置アクセス可能メディア。
  28. 混合モードコードを実行するよう構成された装置であって、
    前記装置は、
    記憶装置と、
    前記記憶装置に機能的に結合され、前記記憶装置に記憶されたランタイム環境を実行するよう構成された混合モードプロセッサと
    を備え、
    前記ランタイム環境は、
    コンパイルされたバイナリと、
    前記コンパイルされたバイナリに基づいて、前記混合モードプロセッサの第1命令セットに関するソフトウェアの第1の命令を生成する第1コードジェネレータと、
    前記コンパイルされたバイナリに基づいて、前記混合モードプロセッサの第2命令セットに関するソフトウェアの第2の命令を生成する第2コードジェネレータであって、前記第1命令セットは前記第2命令セットと異なる、第2コードジェネレータと、
    前記第1の命令及び前記第2の命令を含むコードを実行する手段
    を有する装置。
  29. 前記第1命令セットはXビット幅の命令セットを有し、前記第2命令セットはYビット幅の命令セットを有し、XはYより小さい
    請求項28に記載の装置。
  30. 前記第1命令セットは16ビット幅の命令セットを有し、前記第2命令セットは32ビット幅の命令セットを有する
    請求項28に記載の装置。
JP2006526229A 2003-09-10 2004-09-08 混合モード命令の動的な最適コンパイルのための方法及び装置 Expired - Fee Related JP4801587B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/659,457 US7617490B2 (en) 2003-09-10 2003-09-10 Methods and apparatus for dynamic best fit compilation of mixed mode instructions
US10/659,457 2003-09-10
PCT/US2004/029083 WO2005026956A1 (en) 2003-09-10 2004-09-08 Methods and apparatus for dynamic best fit compilation of mixed mode instructions

Publications (2)

Publication Number Publication Date
JP2007505399A true JP2007505399A (ja) 2007-03-08
JP4801587B2 JP4801587B2 (ja) 2011-10-26

Family

ID=34226955

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006526229A Expired - Fee Related JP4801587B2 (ja) 2003-09-10 2004-09-08 混合モード命令の動的な最適コンパイルのための方法及び装置

Country Status (5)

Country Link
US (2) US7617490B2 (ja)
EP (1) EP1665042A1 (ja)
JP (1) JP4801587B2 (ja)
CN (1) CN1849584B (ja)
WO (1) WO2005026956A1 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7197628B2 (en) * 2003-12-10 2007-03-27 Intel Corporation Method and apparatus for execution flow synonyms
US7770034B2 (en) * 2003-12-16 2010-08-03 Intel Corporation Performance monitoring based dynamic voltage and frequency scaling
US8141039B2 (en) * 2006-04-28 2012-03-20 International Business Machines Corporation Method and system for consolidating machine readable code
US8302082B2 (en) * 2006-06-07 2012-10-30 Intel Corporation Methods and apparatus to provide a managed runtime environment in a sequestered partition
EP1988451A1 (en) * 2007-05-04 2008-11-05 Deutsche Thomson OHG Method for generating a set of machine-interpretable instructions for presenting media content to a user
FR2928753B1 (fr) * 2008-03-14 2012-09-21 Pierre Fiorini Architecture de traitement informatique accelere.
US8539444B2 (en) * 2008-06-30 2013-09-17 International Business Machines Corporation System and method for platform-independent, script-based application generation for spreadsheet software
US20100082385A1 (en) * 2008-10-01 2010-04-01 International Business Machines Corporation System and method for determining temperature of business components for finding business transformation opportunities
US9092824B2 (en) * 2008-10-01 2015-07-28 International Business Machines Corporation System and method for financial transformation
PL2243500T3 (pl) 2009-04-23 2012-06-29 Purac Biochem Bv Biozgodny kompozyt i jego zastosowanie
EP2243749B1 (en) 2009-04-23 2015-04-08 PURAC Biochem BV Resorbable and biocompatible fibre glass compositions and their uses
US10466989B2 (en) 2011-09-02 2019-11-05 Microsoft Technology Licensing, Llc. Fast presentation of markup content having script code
US9081588B2 (en) * 2012-01-31 2015-07-14 Mentor Graphics Corporation Execution time profiling for interpreted programming languages
US20130262820A1 (en) * 2012-03-28 2013-10-03 Michael J. Rieschl Event logger for just-in-time static translation system
US9274920B2 (en) * 2012-09-28 2016-03-01 Dialog Semiconductor B.V. Code profiling in embedded ULE applications
US9524178B2 (en) * 2013-12-30 2016-12-20 Unisys Corporation Defining an instruction path to be compiled by a just-in-time (JIT) compiler
JP6555981B2 (ja) * 2015-08-24 2019-08-07 キヤノン株式会社 情報処理装置及びその制御方法
WO2017153815A1 (en) 2016-03-11 2017-09-14 Lzlabs Gmbh Load module compiler
US10713213B2 (en) * 2016-12-21 2020-07-14 Intel Corporation Systems and methods for multi-architecture computing
US10481876B2 (en) 2017-01-11 2019-11-19 Microsoft Technology Licensing, Llc Methods and systems for application rendering
US11275709B2 (en) 2017-05-02 2022-03-15 Intel Corporation Systems and methods for multi-architecture computing

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000181724A (ja) * 1998-10-30 2000-06-30 Sun Microsyst Inc コンパイルする方法をランタイムにおいて選択する方法及び装置
JP2002116908A (ja) * 2000-10-05 2002-04-19 Arm Ltd ネイティブおよび非ネイティブの命令集合間相互呼び出し
JP2002366367A (ja) * 2001-05-31 2002-12-20 Arm Ltd プログラム命令解釈
JP2003150387A (ja) * 2001-11-15 2003-05-23 Toshiba Corp 言語処理装置、言語処理方法、及び言語処理プログラム

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11306026A (ja) * 1998-04-22 1999-11-05 Toshiba Corp コード最適化装置、コード最適化方法、及び、コード最適化プログラムを記録したコンピュータ読み取り可能な記録媒体
WO2000022521A1 (en) * 1998-10-10 2000-04-20 The Victoria University Of Manchester Program code conversion
FR2785695B1 (fr) * 1998-11-06 2003-01-31 Bull Cp8 Procede de compactage d'un programme de type code objet intermediaire executable dans un systeme embarque muni de ressources de traitement de donnees, systeme compacteur et systeme embarque multi-applications correspondants
US6530075B1 (en) * 1998-12-03 2003-03-04 International Business Machines Corporation JIT/compiler Java language extensions to enable field performance and serviceability
US7065633B1 (en) * 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US7013456B1 (en) * 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
US6684390B1 (en) * 2000-04-17 2004-01-27 Koninklijke Philips Electronics N.V. Multi-processor JAVA subsystem
US7356673B2 (en) * 2001-04-30 2008-04-08 International Business Machines Corporation System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
US8086438B2 (en) * 2002-03-27 2011-12-27 Synopsys, Inc. Method and system for instruction-set architecture simulation using just in time compilation
US7246346B2 (en) * 2002-09-17 2007-07-17 Microsoft Corporation System and method for persisting dynamically generated code in a directly addressable and executable storage medium
US20040123278A1 (en) * 2002-12-23 2004-06-24 Murthi Nanja Persistent cache apparatus and methods
US7210121B2 (en) * 2003-02-07 2007-04-24 Sun Microsystems, Inc. Method and system for generating first class citizen application implementing native software application wrapper
US7103723B2 (en) * 2003-02-25 2006-09-05 Intel Corporation Priority-based code cache management
US7200841B2 (en) * 2003-04-22 2007-04-03 Transitive Limited Method and apparatus for performing lazy byteswapping optimizations during program code conversion
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US20050015754A1 (en) * 2003-06-18 2005-01-20 Virtutech Ab Method and system for multimode simulator generation from an instruction set architecture specification
US20050108690A1 (en) * 2003-11-17 2005-05-19 Tira Wireless Inc. System and method of generating applications for mobile devices
US8065665B1 (en) * 2004-02-28 2011-11-22 Oracle America, Inc. Method and apparatus for correlating profile data
US7685575B1 (en) * 2004-06-08 2010-03-23 Sun Microsystems, Inc. Method and apparatus for analyzing an application
JP2008181724A (ja) 2007-01-24 2008-08-07 Harmonic Drive Syst Ind Co Ltd 多極用回転端子機構

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000181724A (ja) * 1998-10-30 2000-06-30 Sun Microsyst Inc コンパイルする方法をランタイムにおいて選択する方法及び装置
JP2002116908A (ja) * 2000-10-05 2002-04-19 Arm Ltd ネイティブおよび非ネイティブの命令集合間相互呼び出し
JP2002366367A (ja) * 2001-05-31 2002-12-20 Arm Ltd プログラム命令解釈
JP2003150387A (ja) * 2001-11-15 2003-05-23 Toshiba Corp 言語処理装置、言語処理方法、及び言語処理プログラム

Also Published As

Publication number Publication date
US20100042979A1 (en) 2010-02-18
CN1849584B (zh) 2010-06-16
JP4801587B2 (ja) 2011-10-26
US7617490B2 (en) 2009-11-10
CN1849584A (zh) 2006-10-18
US8732678B2 (en) 2014-05-20
EP1665042A1 (en) 2006-06-07
WO2005026956A1 (en) 2005-03-24
US20050055677A1 (en) 2005-03-10

Similar Documents

Publication Publication Date Title
JP4801587B2 (ja) 混合モード命令の動的な最適コンパイルのための方法及び装置
AU774467B2 (en) Automatic stub/adapter generator
US7316007B2 (en) Optimization of n-base typed arithmetic expressions
US7146613B2 (en) JAVA DSP acceleration by byte-code optimization
US7725883B1 (en) Program interpreter
EP1074910A1 (en) Method and apparatus for multiplatform instruction set architecture
US20040003377A1 (en) Converting byte code instructions to a new instruction set
US20060070049A1 (en) Java bytecode translation method and Java interpreter performing the same
US20120167062A1 (en) Emulating pointers
US20140040858A1 (en) Method and apparatus for generating resource efficient computer program code
WO2024045379A1 (zh) 编译方法和编译器、Wasm虚拟机
CN113703779B (zh) 一种跨平台的多语言编译方法和超轻量物联网虚拟机
WO2011116113A1 (en) Loop transformation for compiler optimization
JP3790707B2 (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
CN114428603A (zh) 一种基于编译器生成short和int类型指令的方法和系统
JP3264901B2 (ja) コンパイル装置及びコンパイル方法
Meurer OCamlJIT 2.0-Faster Objective Caml
US7107581B2 (en) Overflow predictive arithmetic instruction optimization using chaining
US20090199166A1 (en) Program converting device
US7207037B2 (en) Overflow sensitive arithmetic instruction optimization using chaining
US7010786B2 (en) Predictive arithmetic overflow detection
JP2006526841A (ja) バーチャルマシンにおいてインプレース実行を支援するための近接ベースのアドレス指定
Fox et al. Optimization of storage-referencing gestures

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090616

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090916

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100803

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20101102

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20101110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101126

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: 20110719

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: 20110805

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

Free format text: PAYMENT UNTIL: 20140812

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees