JP2010176688A - 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置 - Google Patents

仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置 Download PDF

Info

Publication number
JP2010176688A
JP2010176688A JP2010051081A JP2010051081A JP2010176688A JP 2010176688 A JP2010176688 A JP 2010176688A JP 2010051081 A JP2010051081 A JP 2010051081A JP 2010051081 A JP2010051081 A JP 2010051081A JP 2010176688 A JP2010176688 A JP 2010176688A
Authority
JP
Japan
Prior art keywords
processor
instructions
instruction
managed
proxy stub
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.)
Pending
Application number
JP2010051081A
Other languages
English (en)
Inventor
Stewart Taylor
テイラー、スチュアート
Gururaj Nagendra
ナジェンドラ、グルラジ
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 JP2010176688A publication Critical patent/JP2010176688A/ja
Pending legal-status Critical Current

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

Landscapes

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

Abstract

【課題】VM環境においてJITコンパイラがプロセッサ特有の最適化を行う。
【解決手段】マネージド・ランタイム環境によりサポートされていない1つ以上のプロセッサ命令に基づく最適化コードを生成し(610)、マネージド・ランタイム環境に関連するマネージド・アプリケーション・プログラム・インターフェイスに前記最適化コードを挿入し、前記1つ以上のプロセッサ命令をサポートしている最適化マネージド・アプリケーション・プログラム・インターフェイスを生成し(620)、前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成する。
【選択図】図6

Description

本開示内容は、概して、マネージド・ランタイム環境に関する。本開示内容は、特に、マネージド・アプリケーション・プログラム・インタフェース(APIs)の最適化の方法および装置に関する。
マネージド・コードは、マネージド・ランタイム環境(MRTE)(例:Microsoft(登録商標)社のC#(「Cシャープ」)またはVisual Basic .Netによって書かれた全てのコード)の制御下で実行するコードである。これに対して、アンマネージド・コードは、MRTEの外側(例:COMコンポーネントおよびWIN32API関数)において実行するコードである。概して、マネージド・コードは、ランタイム時にコンポーネントおよびアプリケーションをサポートするために使用され、アンマネージド・コードは、プラットフォーム(すなわち、プロセッサ)との下位レベルの相互作用をサポートするために使用される。アプリケーションがJava(登録商標)(登録商標)仮想マシン(JVM)およびMicrosoft .Netによって提供される共通言語ランタイム(CLR)のようなMRTE上における動作に移行するにつれて、仮想マシンは、アプリケーションを抽象化してプロセッサへの依存を取り除いていく(すなわち、マネージド・ランタイム・アプリケーションは、仮想マシンにより大きく依存するようになり、プロセッサに対する依存は小さくなる)。
現在、Intel(登録商標)インテグレーテッド・パフォーマンス・プリミティブ(IPP)のようなアンマネージド・ソフトウェア・ライブラリ関数は、概して、Intel Pentium(登録商標)テクノロジおよび/またはIntel Itanium(登録商標)テクノロジのうちの1つ以上を使用して実装されたプロセッサ上のアンマネージド環境における実行に最適化されている。アンマネージド・ソフトウェア・ライブラリ関数は、Intelプロセッサによって提供されるストリーミング・シングル・インストラクション/マルチプル・データ(SIMD)拡張(SSE)命令、SSE2命令、および/またはマルチメディア拡張(MMX)命令のようなプロセッサ特有の命令群を使用したカスタムハンドな最適化コードを書くことによって、特定のプロセッサアーキテクチャ上における動作に対して更に最適化されうる。例えば、文字列比較関数は、アンマネージド・コードによって実装され、SSE2命令を使用したカスタムハンドな最適化コードによって最適化されうる。アンマネージド・コードとは対照的に、マネージド・コードをカスタムハンドに最適化する方法が存在しないため、マネージド・コードは、アンマネージド・コードと同様の方法では特定のプロセッサアーキテクチャに対して最適化されない。例えば、一般的に、マネージドAPIsは、最適化に関してジャスト・イン・タイム(JIT)コンパイラに完全に依存している。その結果、マネージド・ランタイム・アプリケーションは、下層のプロセッサ上での実行において、オーディオ処理、ビデオ処理、画像処理、音声認識、暗号などの機能を使用可能にし、かつ、最適化する、プロセッサ特有の最適化命令群を使用することができない。
既存のシステムに構成されたマネージド・ランタイム環境(MRTE)システムのアーキテクチャ階層の一例を示すブロック図である。
本明細書で開示される発明の一実施形態により構成されるプロセッサ命令プロキシ・スタブ(PIPS)システムを含む、MRTEシステムの一例におけるアーキテクチャ階層の一例を示すブロック図である。
プロセッサ命令プロキシ・スタブ(PIPS)システムの一例を示すブロック図である。
図3に示すPIPSシステムの一例によって最適化されうるアンマネージド・コードの一例の高級プログラミング言語による表現を示す。
図4に示す高級プログラミング言語に相当し、ネイティブ・アセンブリ・コードを最適化するPIPSを含む、ネイティブ・アセンブリ・コードの一例のコード表現を示す。
図3に示すPIPSシステムの一例を実装するために実行されうる、マシンアクセス可能な命令群の一例を示す第1のフロー図である。 図3に示すPIPSシステムの一例を実装するために実行されうる、マシンアクセス可能な命令群の一例を示す第2のフロー図である。
図3に示すPIPSシステムの一例を実装するために使用されうる、プロセッサシステムの一例を示すブロック図である。
図1を参照すると、マネージド・ランタイム環境(MRTE)システム100のアーキテクチャ階層は、概して、マネージド・ランタイム・アプリケーション110と、1つ以上のマネージド・アプリケーション・プログラム・インタフェース(APIs)120と、仮想マシン(VM)130と、コンパイラ140と、プロセッサ特有の命令群150と、プロセッサ160とを有する。本明細書で使用される「アプリケーション」は、データの操作を行う1つ以上の方法、プログラム、関数、ルーチン、またはサブルーチンを指す。
概して、マネージド・ランタイム・アプリケーション110は、MRTEにおいて種々のサービスを提供するためにプログラマによって書かれる。マネージド・ランタイム・アプリケーション110のソースコードは、例えば、C#、Visual Basic .Net、および/またはその他の適用可能ないかなるオブジェクト指向プログラミング言語によって書かれてもよい。
Microsoft .Netフレームワーク・クラス・ライブラリまたはJava(登録商標)クラス・ライブラリのようなマネージドAPIs120は、マネージド・ランタイム・アプリケーション110のソースコードを、それぞれMicrosoft中間言語(MSIL)またはJava(登録商標)バイトコードに変換(すなわち、コンパイル)する。マネージドAPIs120は、マネージド・ランタイム・アプリケーション110とVM130の間のインタフェースとして動作する。
VM130は、ガーベッジコレクション、メモリ管理、およびコードとロールベースのセキュリティのようなサービスをマネージドAPIs120に提供することによって、マネージド・ランタイム・アプリケーション110を管理する抽象的なプロセッサを動作させる。例えば、プロセッサに関する知識を持たないVM130は、Microsoft共通言語ランタイムまたはJava(登録商標)仮想マシンでもよい。マネージドAPIs120およびVM130は、MISLコードまたはJava(登録商標)バイトコードが特定のプロセッサをターゲットとしないために、すべての特定のプラットフォームに対して依存せずに動作する。それに従って、ジャスト・イン・タイム(JIT)コンパイラのようなコンパイラ140は、MISLコードまたはJava(登録商標)バイトコードを、マネージドAPIs120からプロセッサ160によって実行されうるネイティブ・アセンブリ・コードに変換(すなわち、再コンパイル)する。
プロセッサ160は、Intel Pentium(登録商標)テクノロジ、Intel Itaniumテクノロジ、および/またはIntelパーソナル・インターネット・クライアント・アーキテクチャ(PCA)テクノロジのうちの1つ以上を使用して実装されてもよい。プロセッサ160は、暗号、マルチメディア、オーディオコーデック、ビデオコーデック、画像コーディング、画像処理、信号処理、文字列処理、音声圧縮、コンピュータビジョンなどのソフトウェア・ライブラリ関数をMRTEシステム100に提供する、SSE命令群、SSE2命令群、MMX命令群、および/またはその他の適用可能な命令群のような、プロセッサ特有の命令群150を実行することが可能であってもよい。
しかし、上述のように、アンマネージド・ソフトウェア・ライブラリ関数(すなわち、プロセッサ特有の命令群150)は、プロセッサ160に対して最適化されうるが、マネージド・コード(すなわち、マネージドAPIs120)は、これまでマネージド・コード関数をカスタムハンドで最適化する方法が存在しないため、アンマネージド・ソフトウェアと同様の方法では、ある特定のプロセッサアーキテクチャに対して最適化されない。すなわち、マネージド・ランタイム・アプリケーション110に対応するマネージドAPIs120は、最適化に関して完全にJITコンパイラ140に依存しており、また、JITコンパイラ140は、プロセッサ特有の最適化を行うことができなかった。このように、従来のシステムでは、VM130が下層のプロセッサ160の一定のプロセッサ特有の命令群150をサポートしていなかったために、下層のプロセッサ160は、VM130によって提供されるサービスを使用することができず、また、マネージド・ランタイム・アプリケーション110は、下層のプロセッサ160によって提供される機能を使用することができなかった。
図2の例は、マネージド・ランタイム・アプリケーション210、1つ以上のAPIs220、1つ以上の最適化マネージドAPIs225、VM230、PIPSジェネレータ235、コンパイラ240、プロセッサ特有の命令群250、およびプロセッサ260を含むプロセッサ命令プロキシ・スタブ(PIPS)システム200を有する、MRTEのアーキテクチャ階層を示す。本明細書において使用される「スタブ」は、プログラムの実行中に種々のタスクを実行するために提供される動的に生成されるコードの一部を指す。
一般的に、PIPSジェネレータ235は、下層のプロセッサ260上におけるマネージド・ランタイム・アプリケーション210の実行を最適化するために、PIPS(例:図5のPIPS510)と呼ばれるコードの一部または命令のセットを生成する。マネージド・ランタイム・アプリケーション210がインストールされると、例えば、PIPSジェネレータ235は、プロセッサ特有の命令群250に基づいて、PIPSを生成する。更に、PIPSジェネレータ235は、マネージド・ランタイム・アプリケーション210によって使用される最適化マネージドAPIs225を作成するために、PIPSをあるマネージドAPIs220に挿入する。下記に詳細に説明するように、マネージド・ランタイム・アプリケーション210が実行されている間、最適化マネージドAPIs225は、アンマネージド・コード(すなわち、プロセッサ特有の命令群250)をマネージド・コード(すなわち、マネージド・ランタイム・アプリケーション210)に書き換えることなく、下層のプロセッサ260の性能を最適化する。最適化マネージドAPIs225は、メモリ(例:図8のメモリ1030)に保存され、MRTEにおけるマネージド・ランタイム・アプリケーション210の実行時にリコールされる。その結果、下層のプロセッサ260上におけるマネージド・ランタイム・アプリケーション210の性能を最適化するために、下層のプロセッサ260の機能が使用可能にされうる。
図2のPIPSジェネレータ235はPIPSシステム200内の独立したブロックとして図示されるが、PIPSジェネレータ235によって実行される機能は、VM230および/またはJITコンパイラ240内に組み込まれてもよい。
図3を参照すると、PIPSシステム300の例は、MRTEにおいてマネージド・ランタイム・アプリケーション310を実行するために、マネージド・ランタイム・アプリケーション310、1つ以上の最適化マネージドAPIs325、VM330、JITコンパイラ340、ネイティブ・アセンブリ・コード350、およびプロセッサ360を有する。VM330は、マネージド・ランタイム・アプリケーション310を実行するために、複数の異なるプロセッサに対して互換性があるプロセッサ命令群を実行してもよい。しかし、一般的に、VM330は、最適化マネージドAPIs325なしでは使用することができない機能を使用可能にするために下層のプロセッサ360の特定のプロセッサ特有の命令群を実行することはしない。これに対して、PIPSシステム300によってマネージド・ランタイム・アプリケーション310が実行されている間、例えば、JITコンパイラ340は、ネイティブ・アセンブリ・コード350(例:図5のネイティブ・アセンブリ・コード500)を生成するために、最適化マネージドAPIs325をコンパイルする。特に、マネージド・ランタイム・アプリケーション310のインストール時に、最適化マネージドAPIs325を生成するためにPIPSジェネレータ235がPIPSを挿入したため、JITコンパイラ340は、ネイティブ・アセンブリ・コード350を更に最適化することなく、ネイティブ・アセンブリ・コード350を単純にコンパイルして実行する。換言すると、PIPSは、下層のプロセッサ360上においてマネージド・ランタイム・アプリケーション310を実行するために、マネージド・ランタイム・アプリケーション310のマネージドAPIsを予め最適化(すなわち、最適化マネージドAPIs325)した。これにより、JITコンパイラ340がアンマネージド・コード(例:図2のプロセッサ特有の命令群250)をマネージド・コード(すなわち、マネージド・ランタイム・アプリケーション310)に書き換えることなく、最適化マネージドAPIs325は、下層のプロセッサ360の性能を最適化する。その結果、ネイティブ・アセンブリ・コード350は、下層のプロセッサ360におけるマネージド・ランタイム・アプリケーション310の性能を最適化するように、カスタマイズされる。
図4の例では、文字列比較関数400は、アンマネージドの高級言語のコードによって実装される。概して、文字列比較関数400は、上述のIntelプロセッシング・テクノロジのうちの1つ以上を使用して実装されたプロセッサにおけるSSE2命令群のようなプロセッサ特有の命令群を使用したカスタムハンドな最適化コーディングによって、C言語ルーチンとして最適化される。しかし、C#またはJava(登録商標)の比較関数コードのようなマネージド・コードを特定のプロセッシング・アーキテクチャに対してカスタムハンドに最適化する方法は存在しない。
図2および図3と関連して説明されたように、下層のプロセッサ360上における文字列比較関数400の性能を最適化するPIPS510を含む、ネイティブ・アセンブリ・コード500の一部の例が、図5に示される。特に、ネイティブ・アセンブリ・コード500は、PIPSジェネレータ235によって生成されたPIPS510を有する。例えば、PIPSジェネレータ235は、文字列比較関数400のインストール時にPIPS510を生成するために、Microsoft .NETによって提供されるネイティブ・マーシャリング言語(ML)コードを使用してもよい。PIPS510に基づいて、PIPSジェネレータ235は、マネージド・ランタイム・アプリケーション310に相当する最適化マネージドAPIs325を生成する。JITコンパイラ340は、図5に示すように、実行する下層のプロセッサ360に対するPIPS510を含む、文字列比較関数に対応するネイティブ・アセンブリ・コード500をコンパイルする。文字列比較関数400がランタイム時に開始されたとき、VM330は、ネイティブ・アセンブリ・コード500を生成するために、JITコンパイラ340に対して、最適化マネージドAPIs325を取り込む。PIPSジェネレータ235が予めPIPS510を最適化マネージドAPIs325に挿入したため、JITコンパイラ340は、最適化マネージドAPIs325を更に最適化することなく、最適化マネージドAPIs325をコンパイルして実行する。その結果、下層のプロセッサ360のプロセッサ特有の命令群250(すなわち、アンマネージド・コード)がPIPS510によってVMレイヤにまで抽象化されたため、マネージド・ランタイム・アプリケーション310は、VM330によって提供されるサービス(例:ガーベッジコレクション、メモリ管理、および/またはコードとロールベースのセキュリティ)、および、下層のプロセッサ360の機能の両方の利益を得ることができる。換言すると、最適化マネージドAPIs325は、マネージド・ランタイム・アプリケーション310を動作させるために、下層のプロセッサ360の機能を使用可能にするプロセッサ特有の命令群を使用可能にすることができる。
フロー図600および700は、図6および図7にそれぞれ図示されるマネージドAPIを最適化するためにプロセッサによって実行されうる、マシンアクセス可能な命令群を示す。通常の技術を有する当業者は、この命令群が揮発性または非揮発性のメモリまたはその他の大容量ストレージデバイス(例:フロッピー(登録商標)ディスク、CD、およびDVD)のようなコンピュータによってアクセス可能な全ての媒体に保存された全てのプログラミングコードの使用による多くの異なる方法によって実装されうることを、理解するであろう。例えば、マシンアクセス可能な命令群は、消去可能プログラマブル・リード・オンリー・メモリ(EPROM)、リード・オンリー・メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、磁気メディア、光メディア、および/またはその他の適用可能なタイプの媒体のような、マシンアクセス可能な媒体に組み込まれてもよい。あるいは、マシンアクセス可能な命令は、プログラマブル・ゲート・アレイおよび/または特定用途向け集積回路(ASIC)に組み込まれてもよい。更に、図6および図7には動作の特定の順番が図示されているが、通常の技術を有する当業者は、これらの動作が他の順番において実行されうることを理解するであろう。また、フロー図600および700は、図2および図5に関連して、マネージドAPIsを最適化する方法の一例として提供および説明されるのみである。
図6の例では、フロー図600は、PIPSジェネレータ235が下層のプロセッサ260のプロセッサ特有の命令群250に関連するPIPS510を生成する、ブロック610から開始する。例えば、PIPSジェネレータ235は、マネージド・ランタイム・アプリケーション210のインストール中に、下層のプロセッサ260に相当するプロセッサ識別子に基づいて、PIPS510を生成してもよい。上述の通り、プロセッサ特有の命令群250は、下層のプロセッサ260上におけるマネージド・ランタイム・アプリケーション210の性能を最適化するために、プロセッサ特有の命令を使用することなくして使用できない、オーディオ処理、ビデオ処理、画像処理、音声認識、暗号などのような、下層のプロセッサ260の機能を使用可能にする。ブロック620において、PIPSジェネレータ235は、PIPS510に基づいて、最適化マネージドAPIs225を生成する。特に、PIPSジェネレータ235は、PIPS510をマネージド・ランタイム・アプリケーション210に相当するあるマネージドAPIs220に挿入する。PIPSジェネレータ235は、下層のプロセッサ260においてマネージド・ランタイム・アプリケーション210が実行されている間、最適化マネージドAPIs225がJITコンパイラ240から使用可能となるように、最適化マネージドAPIs225を保存する。
図7の例では、フロー図700は、JITコンパイラ240がマネージド・ランタイム・アプリケーション210に相当する最適化マネージドAPIs225をコンパイルして実行する、ブロック710から開始する。上述のように、PIPSジェネレータ235がプロセッサ特有の命令群250に関連するPIPS510を最適化マネージドAPIs225に予め挿入したため、JITコンパイラ240は、最適化マネージドAPIs225を更に最適化することなく、最適化マネージドAPIs225をコンパイルしうる。すなわち、PIPS510は、最適化マネージドAPIs225によって、下層のプロセッサ260上で実行するためにマネージド・ランタイム・アプリケーション210をカスタムハンドで最適化する。ブロック640において、JITコンパイラ240は、プロセッサ特有の命令群250に相当する下層のプロセッサ260の機能を使用可能にする。VM230によって提供されるガーベッジコレクション、メモリ管理、およびコードとロールベースのセキュリティのようなサービスに加えて、マネージド・ランタイム・アプリケーション210は、下層のプロセッサ260上で実行される間、暗号、マルチメディア、オーディオコーデック、ビデオコーデック、画像コーディング、画像処理、信号処理、音声圧縮、コンピュータビジョンなどの最適化マネージドAPIs225によってマネージド・ランタイム・アプリケーション210に提供される、ソフトウェア・ライブラリ関数を使用しうる。その結果、最適化マネージドAPIs225は、マネージド・ランタイム・アプリケーション210が、プロセッサ特有の命令を使用することなくして使用できない、または、他のプロセッサにおいては非効率的である下層のプロセッサ260の機能を使用可能にする、プロセッサ特有の命令群250を実行することを可能にする。更に、最適化マネージドAPIs225は、ネイティブ・アセンブリ・コード500によって、下層のプロセッサ260におけるマネージド・ランタイム・アプリケーション210の性能をカスタムハンドに最適化する。
本明細書において開示される方法および装置は、欧州コンピュータ・マネージメント・アソシエーション(ECMA)共通言語インフラストラクチャ(CLI)(second edition, December 2002)およびECMA C#言語仕様(second edition, December 2002)の実装のソースコードに適する。しかし、通常の技術を有する当業者は、開示内容が他のランタイム環境におけるソースコードに対しても適用可能であることを理解するであろう。
図8は、本明細書において開示される方法および装置の実装に適合するプロセッサシステム1000の一例を示すブロック図である。プロセッサシステム1000は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、パーソナルデジタルアシスタント(PDA)、サーバ、インターネットアプライアンス、またはその他いかなるタイプのコンピュータデバイスでもよい。
図8に示されるプロセッサシステム1000は、メモリコントローラ1012および入力/出力(I/O)コントローラ1014を含む、チップセット1010を有する。よく知られているように、チップセットは、一般的に、プロセッサ1020からアクセス可能である、または、プロセッサ1020によって使用されるメモリおよびI/O管理機能を提供し、一般的な目的および/または特定の目的のレジスタ、タイマーなども提供する。プロセッサ1020は、1つ以上のプロセッサを使用して実装される。例えば、プロセッサ1020は、Intel Pentium(登録商標)テクノロジ、Intel Itaniumテクノロジ、Intel Centrino(登録商標)テクノロジおよび/またはIntel XScale(登録商標)テクノロジのうちの1つ以上を使用して実装されてもよい。あるいは、他のプロセッシング技術がプロセッサ1020を実装するために使用されてもよい。プロセッサ1020は、第1レベル・ユニファイド・キャッシュ(L1)、第2レベル・ユニファイド・キャッシュ(L2)、第3レベル・ユニファイド・キャッシュ(L3)、および/または通常の技術を有する当業者が認識するその他の適用しうる全ての構造を使用して実装されうる、キャッシュ1022を有する。
従来技術のように、メモリコントローラ1012は、プロセッサ1020がバス1040によって揮発性メモリ1032および非揮発性メモリ1034を含むメインメモリ1030にアクセスして通信できるようにする機能を実行する。揮発性メモリ1032は、同期型ダイナミック・ランダム・アクセス・メモリ(SDRAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、RAMBUSダイナミック・ランダム・アクセス・メモリ(RDRAM)、および/またはその他全てのタイプのランダム・アクセス・メモリ・デバイスによって実装されてもよい。非揮発性メモリ1034は、フラッシュメモリ、リード・オンリー・メモリ(ROM)、電気的消去可能リード・オンリー・メモリ(EEPROM(登録商標))、および/またはその他全てのタイプのメモリデバイスを使用して実装されてもよい。
プロセッサシステム1000は、バス1040に接続されたインタフェース回路1050も有する。インタフェース回路1050は、イーサネット(登録商標)・インタフェース、ユニバーサル・シリアル・バス(USB)、第3世代入力/出力インタフェース(3GIO)インタフェース、および/またはその他適用可能な全てのタイプのインタフェースのような、いかなる従来のインタフェースの標準を使用して実装されてもよい。
1つ以上の入力デバイス1060は、インタフェース回路1050に接続される。1つまたは複数の入力デバイス1060は、ユーザによるプロセッサ1020に対するデータおよびコマンドの入力を可能にする。例えば、1つまたは複数の入力デバイス1060は、キーボード、マウス、タッチセンシティブディスプレイ、トラックパッド、トラックボール、isopoint、および/または音声認識システムによって実装されてもよい。
1つ以上の出力デバイス1070もまた、インタフェース回路1050に接続される。例えば、1つまたは複数の出力デバイス1070は、ディスプレイデバイス(例:発光ディスプレイ(LED)、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、プリンタ、および/またはスピーカ)によって実装されてもよい。このように、インタフェース回路1050は、一般的には、他のデバイスの中でも特に、グラフィックスドライバカードを有する。
プロセッサシステム1000は、ソフトウェアおよびデータを保存する1つ以上の大容量ストレージデバイス1080も有する。そのような1つまたは複数の大容量ストレージデバイス1080の例は、フロッピー(登録商標)ディスクとドライブ、ハードディスクドライブ、コンパクトディスクとドライブ、およびデジタル多用途ディスク(DVD)とドライブを含む。
インタフェース回路1050は、ネットワークによる外部コンピュータとのデータの交換を促進するモデムまたはネットワークインタフェースカードのような通信デバイスも含む。プロセッサシステム1000とネットワーク間の通信リンクは、イーサネット(登録商標)接続、デジタル加入者回線(DSL)、電話線、携帯電話システム、同軸ケーブルなどのような、いかなるタイプのネットワーク接続でもよい。
1つまたは複数の入力デバイス1060、1つまたは複数の出力デバイス1070、1つまたは複数の大容量ストレージデバイス1080、および/またはネットワークへのアクセスは、概して、従来技術の手法に沿ってI/Oコントローラ1014によってコントロールされる。特に、I/Oコントローラ1014は、プロセッサ1020がバス1040およびインタフェース回路1050によって1つまたは複数の入力デバイス1060、1つまたは複数の出力デバイス1070、1つまたは複数の大容量ストレージデバイス1080、および/またはネットワークにアクセスできるようにする機能を実行する。
図8に示されるコンポーネントはプロセッサシステム1000内の独立したブロックとして図示されるが、これらのブロックのうちのいくつかによって実行される機能は、1つの半導体回路内に組み込まれてもよく、または、2つ以上の独立した集積回路を使用して実装されてもよい。例えば、メモリコントローラ1012およびI/Oコントローラ1014は、チップセット1010内の独立したブロックとして図示されるが、通常の技術を有する当業者は、メモリコントローラ1012およびI/Oコントローラ1014は1つの半導体回路に組み込まれうることを理解するであろう。
本明細書ではある一定の方法、装置、および製品の例が説明されるが、本発明の特許請求の範囲は、これらに限定されない。本発明の範囲は、逐語的にまたは均等論によって添付の特許請求の範囲に収まる全ての方法、装置、製品に及ぶ。例えば、本明細書は、他のコンポーネントの中でもハードウェア上で実行されるソフトウェアまたはファームウェアを含むシステム例を開示するが、これらのシステムは、単に本発明を説明するためのものであって本発明を限定するものではない。特に、全ての開示されたハードウェア、ソフトウェア、および/またはファームウェアコンポーネントは、ハードウェア内に独占的に組み込まれてもよく、ソフトウェアに独占的に組み込まれてもよく、ファームウェアに独占的に組み込まれてもよく、または、ハードウェア、ソフトウェア、および/またはファームウェアの組み合わせに組み込まれてもよいことが意図されている。

Claims (27)

  1. 1つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成するステップと、
    前記1つ以上のプロセッサ命令に関連する1つ以上のプロセッサの機能を使用可能にするために、前記プロセッサ命令プロキシ・スタブに基づいて最適化マネージド・アプリケーション・プログラム・インタフェースを生成するステップと
    を備える方法。
  2. 前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項1に記載の方法。
  3. 前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、マネージド・ランタイム・アプリケーションのインストール時に前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項1に記載の方法。
  4. 前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、ストリーミングSIMD拡張(SSE)命令、SSE2命令、およびマルチメディア拡張命令のうちの1つに関連する前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項1に記載の方法。
  5. 前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、仮想マシンのマーシャリング言語コードによって前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項1に記載の方法。
  6. 前記プロセッサの前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、前記1つ以上のプロセッサ命令に関連する前記プロセッサの識別に応じて、前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項1に記載の方法。
  7. 前記最適化マネージド・アプリケーション・プログラム・インタフェースに基づいて、マネージド・ランタイム・アプリケーションの実行中に、前記1つ以上のプロセッサ命令に関連する機能を使用可能にするステップを更に備える請求項1に記載の方法。
  8. 命令群を記録したマシンアクセス可能な媒体であって、
    前記命令群は、マシン上で実行されることにより、
    1つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、
    前記1つ以上のプロセッサ命令に関連する1つ以上のプロセッサの機能を使用可能にするために前記プロセッサ命令プロキシ・スタブに基づいて、最適化マネージド・アプリケーション・プログラム・インタフェースを生成する
    媒体。
  9. 前記命令は、前記マシンに、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記プロセッサ命令プロキシ・スタブを生成させることによって、前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項8に記載の媒体。
  10. 前記マシンに前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる前記命令は、前記マシンに、マネージド・ランタイム・アプリケーションのインストール中に前記プロセッサ命令プロキシ・スタブを生成させることを備える請求項8に記載の媒体。
  11. 前記マシンに前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる前記命令は、前記マシンに、ストリーミングSIMD拡張(SSE)命令、SSE2命令、およびマルチメディア拡張命令のうちの1つに関連する前記プロセッサ命令プロキシ・スタブを生成させることを備える請求項8に記載の媒体。
  12. 前記命令は、前記マシンに、仮想マシンのマーシャリング言語コードによって前記プロセッサ命令プロキシ・スタブを生成させることによって、1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項8に記載の媒体。
  13. 前記命令は、前記マシンに、前記1つ以上のプロセッサ命令に関連する前記プロセッサを識別したこと応じて、前記プロセッサ命令プロキシ・スタブを生成させることによって、前記プロセッサの前記1つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項8に記載の媒体。
  14. 前記命令は、前記マシンに、前記最適化マネージド・アプリケーション・プログラム・インタフェースに基づいてマネージド・ランタイム・アプリケーションを実行させるために、前記1つ以上のプロセッサ命令に関連する機能を使用可能にさせる請求項8に記載の媒体。
  15. 前記マシンアクセス可能な媒体は、プログラマブル・ゲート・アレイ、特定用途向け集積回路、消去可能プログラマブル・リード・オンリー・メモリ、リード・オンリー・メモリ、ランダム・アクセス・メモリ、磁気メディア、および光メディアのうちの1つからなる請求項8に記載の媒体。
  16. 1つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、前記プロセッサ命令プロキシ・スタブに基づいて最適化マネージド・アプリケーション・プログラム・インタフェースを生成するプロセッサ命令プロキシ・スタブ・ジェネレータと、
    前記1つ以上のプロセッサ命令に関連するプロセッサの1つ以上の機能を使用可能にするために前記最適化マネージド・アプリケーション・プログラム・インタフェースをコンパイルするコンパイラと
    を備える装置。
  17. 前記プロセッサ命令プロキシ・スタブ・ジェネレータは、仮想マシンおよびコンパイラのうちの1つに組み込まれている請求項16に記載の装置。
  18. 前記プロセッサ命令プロキシ・スタブ・ジェネレータは、前記プロセッサ命令プロキシ・スタブを生成するために、前記1つ以上のプロセッサ命令に関連するプロセッサを識別する請求項16に記載の装置。
  19. 1つ以上のプロセッサ命令は、ストリーミングSIMD拡張(SSE)命令、SSE2命令、およびマルチメディア拡張命令のうちの1つを有する請求項16に記載の装置。
  20. 前記コンパイラは、ジャスト・イン・タイム・コンパイラを有する請求項16に記載の装置。
  21. 前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成される請求項16に記載の装置。
  22. 前記最適化マネージド・アプリケーション・プログラム・インタフェースは、マネージド・ランタイム・アプリケーションの実行に対して前記1つ以上のプロセッサ命令に関連する機能を使用可能にする請求項16に記載の装置。
  23. 1つ以上の最適化マネージド・アプリケーション・プログラム・インタフェースを保存するダイナミック・ランダム・メモリ(DRAM)と、
    1つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、前記1つ以上のプロセッサ命令に関連する前記プロセッサの1つ以上の機能を使用可能にするために前記プロセッサ命令プロキシ・スタブに基づいて最適化アプリケーション・プログラム・インタフェースを生成する、前記DRAMに接続されたプロセッサと
    を備えるプロセッサシステム。
  24. 1つ以上のプロセッサ命令は、ストリーミングSIMD拡張(SSE)命令、SSE2命令、およびマルチメディア拡張命令のうちの1つを有する請求項23に記載のプロセッサシステム。
  25. 前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成される請求項23に記載のプロセッサシステム。
  26. 前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム・アプリケーションのインストール時に生成される請求項23に記載のプロセッサシステム。
  27. 前記最適化マネージド・アプリケーション・プログラム・インタフェースは、マネージド・ランタイム・アプリケーションの実行時に前記1つ以上のプロセッサ命令に関連する機能を使用可能にする請求項23に記載のシステム。
JP2010051081A 2004-02-20 2010-03-08 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置 Pending JP2010176688A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/783,840 US7516459B2 (en) 2004-02-20 2004-02-20 Methods and apparatus to optimize managed application program interfaces

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2006553152A Division JP2007522584A (ja) 2004-02-20 2005-02-02 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011228831A Division JP2012069130A (ja) 2004-02-20 2011-10-18 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置

Publications (1)

Publication Number Publication Date
JP2010176688A true JP2010176688A (ja) 2010-08-12

Family

ID=34861350

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2006553152A Pending JP2007522584A (ja) 2004-02-20 2005-02-02 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置
JP2010051081A Pending JP2010176688A (ja) 2004-02-20 2010-03-08 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置
JP2011228831A Pending JP2012069130A (ja) 2004-02-20 2011-10-18 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2006553152A Pending JP2007522584A (ja) 2004-02-20 2005-02-02 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2011228831A Pending JP2012069130A (ja) 2004-02-20 2011-10-18 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置

Country Status (5)

Country Link
US (1) US7516459B2 (ja)
EP (2) EP1719053A1 (ja)
JP (3) JP2007522584A (ja)
CN (2) CN100594479C (ja)
WO (1) WO2005083564A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4486483B2 (ja) * 2004-11-26 2010-06-23 古野電気株式会社 Tdma通信装置
US7472375B2 (en) * 2005-03-29 2008-12-30 Intel Corporation Creating managed code from native code
US9363481B2 (en) * 2005-04-22 2016-06-07 Microsoft Technology Licensing, Llc Protected media pipeline
US8311091B1 (en) * 2005-06-03 2012-11-13 Visualon, Inc. Cache optimization for video codecs and video filters or color converters
US7694285B2 (en) * 2005-08-30 2010-04-06 Microsoft Corporation Relaxed and extended delegates
US20070074185A1 (en) * 2005-08-30 2007-03-29 Microsoft Corporation Identifier expressions
US8429629B2 (en) 2005-11-30 2013-04-23 Red Hat, Inc. In-kernel virtual machine for low overhead startup and low resource usage
US8612970B2 (en) * 2005-11-30 2013-12-17 Red Hat, Inc. Purpose domain for low overhead virtual machines
US8104034B2 (en) * 2005-11-30 2012-01-24 Red Hat, Inc. Purpose domain for in-kernel virtual machine for low overhead startup and low resource usage
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US7984483B2 (en) 2007-04-25 2011-07-19 Acxess, Inc. System and method for working in a virtualized computing environment through secure access
GB2452316B (en) * 2007-08-31 2009-08-19 Toshiba Res Europ Ltd Method of Allocating Resources in a Computer.
KR101528853B1 (ko) * 2007-12-14 2015-07-01 삼성전자주식회사 Api 서비스 방법과 api 매쉬업 생성 방법, 장치 및기록매체
US8479178B2 (en) * 2008-06-27 2013-07-02 Microsoft Corporation Compiler in a managed application context
US8442343B1 (en) * 2009-05-29 2013-05-14 Adobe Systems Incorporated Optimization of staged computations
US8694988B2 (en) * 2010-10-22 2014-04-08 Adobe Systems Incorporated Runtime extensions
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US9223599B1 (en) * 2012-03-30 2015-12-29 Zynga Inc. Client-side server for client-side scripting languages
CN102693150B (zh) * 2012-05-11 2016-06-08 深圳市华为技术软件有限公司 基于计费专有领域的虚拟机的处理方法及装置
US9001136B2 (en) * 2012-05-30 2015-04-07 Ncr Corporation Format and method for representing a dynamic digital image
US8826240B1 (en) * 2012-09-29 2014-09-02 Appurify, Inc. Application validation through object level hierarchy analysis
CN103020530A (zh) * 2012-11-23 2013-04-03 山东电力集团公司 一种基于嵌入式平台sm2加密算法的优化方法
WO2014087407A1 (en) * 2012-12-06 2014-06-12 Integrity Project Ltd System and methods thereof for safe compilation of code into embedded processing systems
CN103136029A (zh) * 2013-03-12 2013-06-05 无锡江南计算技术研究所 即时编译系统自适应调优方法
US9720661B2 (en) * 2014-03-31 2017-08-01 International Businesss Machines Corporation Selectively controlling use of extended mode features
US11023556B2 (en) * 2019-07-10 2021-06-01 Salesforce.Com, Inc. Web page designing with content beam to device preview

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11327916A (ja) * 1998-03-23 1999-11-30 Sun Microsyst Inc コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
JP2003204580A (ja) * 2001-09-28 2003-07-18 Symbol Technologies Inc 無線ネットワークで作動可能な移動式コンピュータ端末の通信中にアプリケーション間の接続性を維持するソフトウエアの方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5339430A (en) * 1992-07-01 1994-08-16 Telefonaktiebolaget L M Ericsson System for dynamic run-time binding of software modules in a computer system
DE69636842T2 (de) 1995-06-30 2007-10-18 Sony Corp. Datenaufzeichnungsverfahren und -Einrichtung, Aufzeichnungsmedium, Datenwiedergabeverfahren und Einrichtung
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
AU2001278329A1 (en) 2000-11-20 2002-05-27 Zucotto Wireless, Inc. System and methods providing runtime byte code simplification for platform independent languages
US7213240B2 (en) * 2001-10-05 2007-05-01 Sun Microsystems, Inc. Platform-independent selective ahead-of-time compilation
EP1313012A1 (en) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US6993750B2 (en) * 2001-12-13 2006-01-31 Hewlett-Packard Development Company, L.P. Dynamic registration of dynamically generated code and corresponding unwind information
US7158924B2 (en) * 2002-04-04 2007-01-02 International Business Machines Corporation Dynamic loading of C-API HDL model instrumentation
US7203941B2 (en) * 2002-11-14 2007-04-10 Microsoft Corporation Associating a native resource with an application
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7770202B2 (en) * 2004-02-03 2010-08-03 Microsoft Corporation Cross assembly call interception
US7647629B2 (en) * 2004-02-03 2010-01-12 Microsoft Corporation Hosted code runtime protection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11327916A (ja) * 1998-03-23 1999-11-30 Sun Microsyst Inc コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
JP2003204580A (ja) * 2001-09-28 2003-07-18 Symbol Technologies Inc 無線ネットワークで作動可能な移動式コンピュータ端末の通信中にアプリケーション間の接続性を維持するソフトウエアの方法

Also Published As

Publication number Publication date
JP2012069130A (ja) 2012-04-05
EP1719053A1 (en) 2006-11-08
CN1922575A (zh) 2007-02-28
CN100594479C (zh) 2010-03-17
US20050188382A1 (en) 2005-08-25
WO2005083564A1 (en) 2005-09-09
US7516459B2 (en) 2009-04-07
EP3136233A1 (en) 2017-03-01
JP2007522584A (ja) 2007-08-09
EP3136233B1 (en) 2019-12-25
CN101777006A (zh) 2010-07-14
CN101777006B (zh) 2013-11-13

Similar Documents

Publication Publication Date Title
JP2010176688A (ja) 仮想マシン環境におけるアプリケーション・プログラム・インタフェースの最適化の方法および装置
US7657881B2 (en) Using optimized libraries to improve performance of deployed application code at runtime
US7913240B2 (en) Method and apparatus for transforming java native interface function calls into simpler operations during just-in-time compilation
US8312439B2 (en) Inlining native functions into compiled java code
US7917898B2 (en) Methods and apparatus to provide a modular native method invocation system
US7765527B2 (en) Per thread buffering for storing profiling data
US7203941B2 (en) Associating a native resource with an application
US9003402B1 (en) Method and system for injecting function calls into a virtual machine
US7844960B2 (en) Optimizing software program execution during class loading phase
US7793275B2 (en) Methods and apparatus to tune intermediate representations in a managed runtime environment
US20070169000A1 (en) Profiling interface assisted class loading for byte code instrumented logic
JP5845221B2 (ja) 高速パッチベースメソッドコール
JP2009528589A (ja) 適応コンパイルコード
US20050251652A1 (en) Methods and apparatus for processing an extensible firmware interface byte code instruction in a loop
US10394610B2 (en) Managing split packages in a module system
JP4093484B2 (ja) コンパイラ、コンパイル方法、コンパイルプログラム、及び記録媒体
EP1046985A2 (en) File portability techniques
US11726786B2 (en) Lazy copying of runtime-managed stack frames
TWI549056B (zh) 以函式庫作業系統達成之應用程式相容性

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110104

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110324

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110419

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110715

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110721

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110818

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110823

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110916

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110922

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111018

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20111122