(57)【要約】      （修正有）【課題】ＶＭ環境においてＪＩＴコンパイラがプロセッサ特有の最適化を行う。【解決手段】マネージド・ランタイム環境によりサポートされていない１つ以上のプロセッサ命令に基づく最適化コードを生成し（６１０）、マネージド・ランタイム環境に関連するマネージド・アプリケーション・プログラム・インターフェイスに前記最適化コードを挿入し、前記１つ以上のプロセッサ命令をサポートしている最適化マネージド・アプリケーション・プログラム・インターフェイスを生成し（６２０）、前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成する。【選択図】図６
2010176688.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成するステップと、
前記１つ以上のプロセッサ命令に関連する１つ以上のプロセッサの機能を使用可能にするために、前記プロセッサ命令プロキシ・スタブに基づいて最適化マネージド・アプリケーション・プログラム・インタフェースを生成するステップと
を備える方法。
【請求項２】
前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項１に記載の方法。
【請求項３】
前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、マネージド・ランタイム・アプリケーションのインストール時に前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項１に記載の方法。
【請求項４】
前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つに関連する前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項１に記載の方法。
【請求項５】
前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、仮想マシンのマーシャリング言語コードによって前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項１に記載の方法。
【請求項６】
前記プロセッサの前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成するステップは、前記１つ以上のプロセッサ命令に関連する前記プロセッサの識別に応じて、前記プロセッサ命令プロキシ・スタブを生成するステップを備える請求項１に記載の方法。
【請求項７】
前記最適化マネージド・アプリケーション・プログラム・インタフェースに基づいて、マネージド・ランタイム・アプリケーションの実行中に、前記１つ以上のプロセッサ命令に関連する機能を使用可能にするステップを更に備える請求項１に記載の方法。
【請求項８】
命令群を記録したマシンアクセス可能な媒体であって、
前記命令群は、マシン上で実行されることにより、
１つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、
前記１つ以上のプロセッサ命令に関連する１つ以上のプロセッサの機能を使用可能にするために前記プロセッサ命令プロキシ・スタブに基づいて、最適化マネージド・アプリケーション・プログラム・インタフェースを生成する
媒体。
【請求項９】
前記命令は、前記マシンに、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記プロセッサ命令プロキシ・スタブを生成させることによって、前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項８に記載の媒体。
【請求項１０】
前記マシンに前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる前記命令は、前記マシンに、マネージド・ランタイム・アプリケーションのインストール中に前記プロセッサ命令プロキシ・スタブを生成させることを備える請求項８に記載の媒体。
【請求項１１】
前記マシンに前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる前記命令は、前記マシンに、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つに関連する前記プロセッサ命令プロキシ・スタブを生成させることを備える請求項８に記載の媒体。
【請求項１２】
前記命令は、前記マシンに、仮想マシンのマーシャリング言語コードによって前記プロセッサ命令プロキシ・スタブを生成させることによって、１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項８に記載の媒体。
【請求項１３】
前記命令は、前記マシンに、前記１つ以上のプロセッサ命令に関連する前記プロセッサを識別したこと応じて、前記プロセッサ命令プロキシ・スタブを生成させることによって、前記プロセッサの前記１つ以上のプロセッサ命令に関連する前記プロセッサ命令プロキシ・スタブを生成させる請求項８に記載の媒体。
【請求項１４】
前記命令は、前記マシンに、前記最適化マネージド・アプリケーション・プログラム・インタフェースに基づいてマネージド・ランタイム・アプリケーションを実行させるために、前記１つ以上のプロセッサ命令に関連する機能を使用可能にさせる請求項８に記載の媒体。
【請求項１５】
前記マシンアクセス可能な媒体は、プログラマブル・ゲート・アレイ、特定用途向け集積回路、消去可能プログラマブル・リード・オンリー・メモリ、リード・オンリー・メモリ、ランダム・アクセス・メモリ、磁気メディア、および光メディアのうちの１つからなる請求項８に記載の媒体。
【請求項１６】
１つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、前記プロセッサ命令プロキシ・スタブに基づいて最適化マネージド・アプリケーション・プログラム・インタフェースを生成するプロセッサ命令プロキシ・スタブ・ジェネレータと、
前記１つ以上のプロセッサ命令に関連するプロセッサの１つ以上の機能を使用可能にするために前記最適化マネージド・アプリケーション・プログラム・インタフェースをコンパイルするコンパイラと
を備える装置。
【請求項１７】
前記プロセッサ命令プロキシ・スタブ・ジェネレータは、仮想マシンおよびコンパイラのうちの１つに組み込まれている請求項１６に記載の装置。
【請求項１８】
前記プロセッサ命令プロキシ・スタブ・ジェネレータは、前記プロセッサ命令プロキシ・スタブを生成するために、前記１つ以上のプロセッサ命令に関連するプロセッサを識別する請求項１６に記載の装置。
【請求項１９】
１つ以上のプロセッサ命令は、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つを有する請求項１６に記載の装置。
【請求項２０】
前記コンパイラは、ジャスト・イン・タイム・コンパイラを有する請求項１６に記載の装置。
【請求項２１】
前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成される請求項１６に記載の装置。
【請求項２２】
前記最適化マネージド・アプリケーション・プログラム・インタフェースは、マネージド・ランタイム・アプリケーションの実行に対して前記１つ以上のプロセッサ命令に関連する機能を使用可能にする請求項１６に記載の装置。
【請求項２３】
１つ以上の最適化マネージド・アプリケーション・プログラム・インタフェースを保存するダイナミック・ランダム・メモリ（ＤＲＡＭ）と、
１つ以上のプロセッサ命令に関連するプロセッサ命令プロキシ・スタブを生成し、前記１つ以上のプロセッサ命令に関連する前記プロセッサの１つ以上の機能を使用可能にするために前記プロセッサ命令プロキシ・スタブに基づいて最適化アプリケーション・プログラム・インタフェースを生成する、前記ＤＲＡＭに接続されたプロセッサと
を備えるプロセッサシステム。
【請求項２４】
１つ以上のプロセッサ命令は、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つを有する請求項２３に記載のプロセッサシステム。
【請求項２５】
前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成される請求項２３に記載のプロセッサシステム。
【請求項２６】
前記プロセッサ命令プロキシ・スタブは、マネージド・ランタイム・アプリケーションのインストール時に生成される請求項２３に記載のプロセッサシステム。
【請求項２７】
前記最適化マネージド・アプリケーション・プログラム・インタフェースは、マネージド・ランタイム・アプリケーションの実行時に前記１つ以上のプロセッサ命令に関連する機能を使用可能にする請求項２３に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示内容は、概して、マネージド・ランタイム環境に関する。本開示内容は、特に、マネージド・アプリケーション・プログラム・インタフェース（ＡＰＩｓ）の最適化の方法および装置に関する。
【背景技術】
【０００２】
マネージド・コードは、マネージド・ランタイム環境（ＭＲＴＥ）（例：Ｍｉｃｒｏｓｏｆｔ（登録商標）社のＣ＃（「Ｃシャープ」）またはＶｉｓｕａｌ  Ｂａｓｉｃ  ．Ｎｅｔによって書かれた全てのコード）の制御下で実行するコードである。これに対して、アンマネージド・コードは、ＭＲＴＥの外側（例：ＣＯＭコンポーネントおよびＷＩＮ３２ＡＰＩ関数）において実行するコードである。概して、マネージド・コードは、ランタイム時にコンポーネントおよびアプリケーションをサポートするために使用され、アンマネージド・コードは、プラットフォーム（すなわち、プロセッサ）との下位レベルの相互作用をサポートするために使用される。アプリケーションがＪａｖａ（登録商標）（登録商標）仮想マシン（ＪＶＭ）およびＭｉｃｒｏｓｏｆｔ  ．Ｎｅｔによって提供される共通言語ランタイム（ＣＬＲ）のようなＭＲＴＥ上における動作に移行するにつれて、仮想マシンは、アプリケーションを抽象化してプロセッサへの依存を取り除いていく（すなわち、マネージド・ランタイム・アプリケーションは、仮想マシンにより大きく依存するようになり、プロセッサに対する依存は小さくなる）。
【０００３】
現在、Ｉｎｔｅｌ（登録商標）インテグレーテッド・パフォーマンス・プリミティブ（ＩＰＰ）のようなアンマネージド・ソフトウェア・ライブラリ関数は、概して、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）テクノロジおよび／またはＩｎｔｅｌ  Ｉｔａｎｉｕｍ（登録商標）テクノロジのうちの１つ以上を使用して実装されたプロセッサ上のアンマネージド環境における実行に最適化されている。アンマネージド・ソフトウェア・ライブラリ関数は、Ｉｎｔｅｌプロセッサによって提供されるストリーミング・シングル・インストラクション／マルチプル・データ（ＳＩＭＤ）拡張（ＳＳＥ）命令、ＳＳＥ２命令、および／またはマルチメディア拡張（ＭＭＸ）命令のようなプロセッサ特有の命令群を使用したカスタムハンドな最適化コードを書くことによって、特定のプロセッサアーキテクチャ上における動作に対して更に最適化されうる。例えば、文字列比較関数は、アンマネージド・コードによって実装され、ＳＳＥ２命令を使用したカスタムハンドな最適化コードによって最適化されうる。アンマネージド・コードとは対照的に、マネージド・コードをカスタムハンドに最適化する方法が存在しないため、マネージド・コードは、アンマネージド・コードと同様の方法では特定のプロセッサアーキテクチャに対して最適化されない。例えば、一般的に、マネージドＡＰＩｓは、最適化に関してジャスト・イン・タイム（ＪＩＴ）コンパイラに完全に依存している。その結果、マネージド・ランタイム・アプリケーションは、下層のプロセッサ上での実行において、オーディオ処理、ビデオ処理、画像処理、音声認識、暗号などの機能を使用可能にし、かつ、最適化する、プロセッサ特有の最適化命令群を使用することができない。
【図面の簡単な説明】
【０００４】
【図１】既存のシステムに構成されたマネージド・ランタイム環境（ＭＲＴＥ）システムのアーキテクチャ階層の一例を示すブロック図である。
【０００５】
【図２】本明細書で開示される発明の一実施形態により構成されるプロセッサ命令プロキシ・スタブ（ＰＩＰＳ）システムを含む、ＭＲＴＥシステムの一例におけるアーキテクチャ階層の一例を示すブロック図である。
【０００６】
【図３】プロセッサ命令プロキシ・スタブ（ＰＩＰＳ）システムの一例を示すブロック図である。
【０００７】
【図４】図３に示すＰＩＰＳシステムの一例によって最適化されうるアンマネージド・コードの一例の高級プログラミング言語による表現を示す。
【０００８】
【図５】図４に示す高級プログラミング言語に相当し、ネイティブ・アセンブリ・コードを最適化するＰＩＰＳを含む、ネイティブ・アセンブリ・コードの一例のコード表現を示す。
【０００９】
【図６】図３に示すＰＩＰＳシステムの一例を実装するために実行されうる、マシンアクセス可能な命令群の一例を示す第１のフロー図である。
【図７】図３に示すＰＩＰＳシステムの一例を実装するために実行されうる、マシンアクセス可能な命令群の一例を示す第２のフロー図である。
【００１０】
【図８】図３に示すＰＩＰＳシステムの一例を実装するために使用されうる、プロセッサシステムの一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
図１を参照すると、マネージド・ランタイム環境（ＭＲＴＥ）システム１００のアーキテクチャ階層は、概して、マネージド・ランタイム・アプリケーション１１０と、１つ以上のマネージド・アプリケーション・プログラム・インタフェース（ＡＰＩｓ）１２０と、仮想マシン（ＶＭ）１３０と、コンパイラ１４０と、プロセッサ特有の命令群１５０と、プロセッサ１６０とを有する。本明細書で使用される「アプリケーション」は、データの操作を行う１つ以上の方法、プログラム、関数、ルーチン、またはサブルーチンを指す。
【００１２】
概して、マネージド・ランタイム・アプリケーション１１０は、ＭＲＴＥにおいて種々のサービスを提供するためにプログラマによって書かれる。マネージド・ランタイム・アプリケーション１１０のソースコードは、例えば、Ｃ＃、Ｖｉｓｕａｌ  Ｂａｓｉｃ  ．Ｎｅｔ、および／またはその他の適用可能ないかなるオブジェクト指向プログラミング言語によって書かれてもよい。
【００１３】
Ｍｉｃｒｏｓｏｆｔ  ．Ｎｅｔフレームワーク・クラス・ライブラリまたはＪａｖａ（登録商標）クラス・ライブラリのようなマネージドＡＰＩｓ１２０は、マネージド・ランタイム・アプリケーション１１０のソースコードを、それぞれＭｉｃｒｏｓｏｆｔ中間言語（ＭＳＩＬ）またはＪａｖａ（登録商標）バイトコードに変換（すなわち、コンパイル）する。マネージドＡＰＩｓ１２０は、マネージド・ランタイム・アプリケーション１１０とＶＭ１３０の間のインタフェースとして動作する。
【００１４】
ＶＭ１３０は、ガーベッジコレクション、メモリ管理、およびコードとロールベースのセキュリティのようなサービスをマネージドＡＰＩｓ１２０に提供することによって、マネージド・ランタイム・アプリケーション１１０を管理する抽象的なプロセッサを動作させる。例えば、プロセッサに関する知識を持たないＶＭ１３０は、Ｍｉｃｒｏｓｏｆｔ共通言語ランタイムまたはＪａｖａ（登録商標）仮想マシンでもよい。マネージドＡＰＩｓ１２０およびＶＭ１３０は、ＭＩＳＬコードまたはＪａｖａ（登録商標）バイトコードが特定のプロセッサをターゲットとしないために、すべての特定のプラットフォームに対して依存せずに動作する。それに従って、ジャスト・イン・タイム（ＪＩＴ）コンパイラのようなコンパイラ１４０は、ＭＩＳＬコードまたはＪａｖａ（登録商標）バイトコードを、マネージドＡＰＩｓ１２０からプロセッサ１６０によって実行されうるネイティブ・アセンブリ・コードに変換（すなわち、再コンパイル）する。
【００１５】
プロセッサ１６０は、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）テクノロジ、Ｉｎｔｅｌ  Ｉｔａｎｉｕｍテクノロジ、および／またはＩｎｔｅｌパーソナル・インターネット・クライアント・アーキテクチャ（ＰＣＡ）テクノロジのうちの１つ以上を使用して実装されてもよい。プロセッサ１６０は、暗号、マルチメディア、オーディオコーデック、ビデオコーデック、画像コーディング、画像処理、信号処理、文字列処理、音声圧縮、コンピュータビジョンなどのソフトウェア・ライブラリ関数をＭＲＴＥシステム１００に提供する、ＳＳＥ命令群、ＳＳＥ２命令群、ＭＭＸ命令群、および／またはその他の適用可能な命令群のような、プロセッサ特有の命令群１５０を実行することが可能であってもよい。
【００１６】
しかし、上述のように、アンマネージド・ソフトウェア・ライブラリ関数（すなわち、プロセッサ特有の命令群１５０）は、プロセッサ１６０に対して最適化されうるが、マネージド・コード（すなわち、マネージドＡＰＩｓ１２０）は、これまでマネージド・コード関数をカスタムハンドで最適化する方法が存在しないため、アンマネージド・ソフトウェアと同様の方法では、ある特定のプロセッサアーキテクチャに対して最適化されない。すなわち、マネージド・ランタイム・アプリケーション１１０に対応するマネージドＡＰＩｓ１２０は、最適化に関して完全にＪＩＴコンパイラ１４０に依存しており、また、ＪＩＴコンパイラ１４０は、プロセッサ特有の最適化を行うことができなかった。このように、従来のシステムでは、ＶＭ１３０が下層のプロセッサ１６０の一定のプロセッサ特有の命令群１５０をサポートしていなかったために、下層のプロセッサ１６０は、ＶＭ１３０によって提供されるサービスを使用することができず、また、マネージド・ランタイム・アプリケーション１１０は、下層のプロセッサ１６０によって提供される機能を使用することができなかった。
【００１７】
図２の例は、マネージド・ランタイム・アプリケーション２１０、１つ以上のＡＰＩｓ２２０、１つ以上の最適化マネージドＡＰＩｓ２２５、ＶＭ２３０、ＰＩＰＳジェネレータ２３５、コンパイラ２４０、プロセッサ特有の命令群２５０、およびプロセッサ２６０を含むプロセッサ命令プロキシ・スタブ（ＰＩＰＳ）システム２００を有する、ＭＲＴＥのアーキテクチャ階層を示す。本明細書において使用される「スタブ」は、プログラムの実行中に種々のタスクを実行するために提供される動的に生成されるコードの一部を指す。
【００１８】
一般的に、ＰＩＰＳジェネレータ２３５は、下層のプロセッサ２６０上におけるマネージド・ランタイム・アプリケーション２１０の実行を最適化するために、ＰＩＰＳ（例：図５のＰＩＰＳ５１０）と呼ばれるコードの一部または命令のセットを生成する。マネージド・ランタイム・アプリケーション２１０がインストールされると、例えば、ＰＩＰＳジェネレータ２３５は、プロセッサ特有の命令群２５０に基づいて、ＰＩＰＳを生成する。更に、ＰＩＰＳジェネレータ２３５は、マネージド・ランタイム・アプリケーション２１０によって使用される最適化マネージドＡＰＩｓ２２５を作成するために、ＰＩＰＳをあるマネージドＡＰＩｓ２２０に挿入する。下記に詳細に説明するように、マネージド・ランタイム・アプリケーション２１０が実行されている間、最適化マネージドＡＰＩｓ２２５は、アンマネージド・コード（すなわち、プロセッサ特有の命令群２５０）をマネージド・コード（すなわち、マネージド・ランタイム・アプリケーション２１０）に書き換えることなく、下層のプロセッサ２６０の性能を最適化する。最適化マネージドＡＰＩｓ２２５は、メモリ（例：図８のメモリ１０３０）に保存され、ＭＲＴＥにおけるマネージド・ランタイム・アプリケーション２１０の実行時にリコールされる。その結果、下層のプロセッサ２６０上におけるマネージド・ランタイム・アプリケーション２１０の性能を最適化するために、下層のプロセッサ２６０の機能が使用可能にされうる。
【００１９】
図２のＰＩＰＳジェネレータ２３５はＰＩＰＳシステム２００内の独立したブロックとして図示されるが、ＰＩＰＳジェネレータ２３５によって実行される機能は、ＶＭ２３０および／またはＪＩＴコンパイラ２４０内に組み込まれてもよい。
【００２０】
図３を参照すると、ＰＩＰＳシステム３００の例は、ＭＲＴＥにおいてマネージド・ランタイム・アプリケーション３１０を実行するために、マネージド・ランタイム・アプリケーション３１０、１つ以上の最適化マネージドＡＰＩｓ３２５、ＶＭ３３０、ＪＩＴコンパイラ３４０、ネイティブ・アセンブリ・コード３５０、およびプロセッサ３６０を有する。ＶＭ３３０は、マネージド・ランタイム・アプリケーション３１０を実行するために、複数の異なるプロセッサに対して互換性があるプロセッサ命令群を実行してもよい。しかし、一般的に、ＶＭ３３０は、最適化マネージドＡＰＩｓ３２５なしでは使用することができない機能を使用可能にするために下層のプロセッサ３６０の特定のプロセッサ特有の命令群を実行することはしない。これに対して、ＰＩＰＳシステム３００によってマネージド・ランタイム・アプリケーション３１０が実行されている間、例えば、ＪＩＴコンパイラ３４０は、ネイティブ・アセンブリ・コード３５０（例：図５のネイティブ・アセンブリ・コード５００）を生成するために、最適化マネージドＡＰＩｓ３２５をコンパイルする。特に、マネージド・ランタイム・アプリケーション３１０のインストール時に、最適化マネージドＡＰＩｓ３２５を生成するためにＰＩＰＳジェネレータ２３５がＰＩＰＳを挿入したため、ＪＩＴコンパイラ３４０は、ネイティブ・アセンブリ・コード３５０を更に最適化することなく、ネイティブ・アセンブリ・コード３５０を単純にコンパイルして実行する。換言すると、ＰＩＰＳは、下層のプロセッサ３６０上においてマネージド・ランタイム・アプリケーション３１０を実行するために、マネージド・ランタイム・アプリケーション３１０のマネージドＡＰＩｓを予め最適化（すなわち、最適化マネージドＡＰＩｓ３２５）した。これにより、ＪＩＴコンパイラ３４０がアンマネージド・コード（例：図２のプロセッサ特有の命令群２５０）をマネージド・コード（すなわち、マネージド・ランタイム・アプリケーション３１０）に書き換えることなく、最適化マネージドＡＰＩｓ３２５は、下層のプロセッサ３６０の性能を最適化する。その結果、ネイティブ・アセンブリ・コード３５０は、下層のプロセッサ３６０におけるマネージド・ランタイム・アプリケーション３１０の性能を最適化するように、カスタマイズされる。
【００２１】
図４の例では、文字列比較関数４００は、アンマネージドの高級言語のコードによって実装される。概して、文字列比較関数４００は、上述のＩｎｔｅｌプロセッシング・テクノロジのうちの１つ以上を使用して実装されたプロセッサにおけるＳＳＥ２命令群のようなプロセッサ特有の命令群を使用したカスタムハンドな最適化コーディングによって、Ｃ言語ルーチンとして最適化される。しかし、Ｃ＃またはＪａｖａ（登録商標）の比較関数コードのようなマネージド・コードを特定のプロセッシング・アーキテクチャに対してカスタムハンドに最適化する方法は存在しない。
【００２２】
図２および図３と関連して説明されたように、下層のプロセッサ３６０上における文字列比較関数４００の性能を最適化するＰＩＰＳ５１０を含む、ネイティブ・アセンブリ・コード５００の一部の例が、図５に示される。特に、ネイティブ・アセンブリ・コード５００は、ＰＩＰＳジェネレータ２３５によって生成されたＰＩＰＳ５１０を有する。例えば、ＰＩＰＳジェネレータ２３５は、文字列比較関数４００のインストール時にＰＩＰＳ５１０を生成するために、Ｍｉｃｒｏｓｏｆｔ  ．ＮＥＴによって提供されるネイティブ・マーシャリング言語（ＭＬ）コードを使用してもよい。ＰＩＰＳ５１０に基づいて、ＰＩＰＳジェネレータ２３５は、マネージド・ランタイム・アプリケーション３１０に相当する最適化マネージドＡＰＩｓ３２５を生成する。ＪＩＴコンパイラ３４０は、図５に示すように、実行する下層のプロセッサ３６０に対するＰＩＰＳ５１０を含む、文字列比較関数に対応するネイティブ・アセンブリ・コード５００をコンパイルする。文字列比較関数４００がランタイム時に開始されたとき、ＶＭ３３０は、ネイティブ・アセンブリ・コード５００を生成するために、ＪＩＴコンパイラ３４０に対して、最適化マネージドＡＰＩｓ３２５を取り込む。ＰＩＰＳジェネレータ２３５が予めＰＩＰＳ５１０を最適化マネージドＡＰＩｓ３２５に挿入したため、ＪＩＴコンパイラ３４０は、最適化マネージドＡＰＩｓ３２５を更に最適化することなく、最適化マネージドＡＰＩｓ３２５をコンパイルして実行する。その結果、下層のプロセッサ３６０のプロセッサ特有の命令群２５０（すなわち、アンマネージド・コード）がＰＩＰＳ５１０によってＶＭレイヤにまで抽象化されたため、マネージド・ランタイム・アプリケーション３１０は、ＶＭ３３０によって提供されるサービス（例：ガーベッジコレクション、メモリ管理、および／またはコードとロールベースのセキュリティ）、および、下層のプロセッサ３６０の機能の両方の利益を得ることができる。換言すると、最適化マネージドＡＰＩｓ３２５は、マネージド・ランタイム・アプリケーション３１０を動作させるために、下層のプロセッサ３６０の機能を使用可能にするプロセッサ特有の命令群を使用可能にすることができる。
【００２３】
フロー図６００および７００は、図６および図７にそれぞれ図示されるマネージドＡＰＩを最適化するためにプロセッサによって実行されうる、マシンアクセス可能な命令群を示す。通常の技術を有する当業者は、この命令群が揮発性または非揮発性のメモリまたはその他の大容量ストレージデバイス（例：フロッピー（登録商標）ディスク、ＣＤ、およびＤＶＤ）のようなコンピュータによってアクセス可能な全ての媒体に保存された全てのプログラミングコードの使用による多くの異なる方法によって実装されうることを、理解するであろう。例えば、マシンアクセス可能な命令群は、消去可能プログラマブル・リード・オンリー・メモリ（ＥＰＲＯＭ）、リード・オンリー・メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、磁気メディア、光メディア、および／またはその他の適用可能なタイプの媒体のような、マシンアクセス可能な媒体に組み込まれてもよい。あるいは、マシンアクセス可能な命令は、プログラマブル・ゲート・アレイおよび／または特定用途向け集積回路（ＡＳＩＣ）に組み込まれてもよい。更に、図６および図７には動作の特定の順番が図示されているが、通常の技術を有する当業者は、これらの動作が他の順番において実行されうることを理解するであろう。また、フロー図６００および７００は、図２および図５に関連して、マネージドＡＰＩｓを最適化する方法の一例として提供および説明されるのみである。
【００２４】
図６の例では、フロー図６００は、ＰＩＰＳジェネレータ２３５が下層のプロセッサ２６０のプロセッサ特有の命令群２５０に関連するＰＩＰＳ５１０を生成する、ブロック６１０から開始する。例えば、ＰＩＰＳジェネレータ２３５は、マネージド・ランタイム・アプリケーション２１０のインストール中に、下層のプロセッサ２６０に相当するプロセッサ識別子に基づいて、ＰＩＰＳ５１０を生成してもよい。上述の通り、プロセッサ特有の命令群２５０は、下層のプロセッサ２６０上におけるマネージド・ランタイム・アプリケーション２１０の性能を最適化するために、プロセッサ特有の命令を使用することなくして使用できない、オーディオ処理、ビデオ処理、画像処理、音声認識、暗号などのような、下層のプロセッサ２６０の機能を使用可能にする。ブロック６２０において、ＰＩＰＳジェネレータ２３５は、ＰＩＰＳ５１０に基づいて、最適化マネージドＡＰＩｓ２２５を生成する。特に、ＰＩＰＳジェネレータ２３５は、ＰＩＰＳ５１０をマネージド・ランタイム・アプリケーション２１０に相当するあるマネージドＡＰＩｓ２２０に挿入する。ＰＩＰＳジェネレータ２３５は、下層のプロセッサ２６０においてマネージド・ランタイム・アプリケーション２１０が実行されている間、最適化マネージドＡＰＩｓ２２５がＪＩＴコンパイラ２４０から使用可能となるように、最適化マネージドＡＰＩｓ２２５を保存する。
【００２５】
図７の例では、フロー図７００は、ＪＩＴコンパイラ２４０がマネージド・ランタイム・アプリケーション２１０に相当する最適化マネージドＡＰＩｓ２２５をコンパイルして実行する、ブロック７１０から開始する。上述のように、ＰＩＰＳジェネレータ２３５がプロセッサ特有の命令群２５０に関連するＰＩＰＳ５１０を最適化マネージドＡＰＩｓ２２５に予め挿入したため、ＪＩＴコンパイラ２４０は、最適化マネージドＡＰＩｓ２２５を更に最適化することなく、最適化マネージドＡＰＩｓ２２５をコンパイルしうる。すなわち、ＰＩＰＳ５１０は、最適化マネージドＡＰＩｓ２２５によって、下層のプロセッサ２６０上で実行するためにマネージド・ランタイム・アプリケーション２１０をカスタムハンドで最適化する。ブロック６４０において、ＪＩＴコンパイラ２４０は、プロセッサ特有の命令群２５０に相当する下層のプロセッサ２６０の機能を使用可能にする。ＶＭ２３０によって提供されるガーベッジコレクション、メモリ管理、およびコードとロールベースのセキュリティのようなサービスに加えて、マネージド・ランタイム・アプリケーション２１０は、下層のプロセッサ２６０上で実行される間、暗号、マルチメディア、オーディオコーデック、ビデオコーデック、画像コーディング、画像処理、信号処理、音声圧縮、コンピュータビジョンなどの最適化マネージドＡＰＩｓ２２５によってマネージド・ランタイム・アプリケーション２１０に提供される、ソフトウェア・ライブラリ関数を使用しうる。その結果、最適化マネージドＡＰＩｓ２２５は、マネージド・ランタイム・アプリケーション２１０が、プロセッサ特有の命令を使用することなくして使用できない、または、他のプロセッサにおいては非効率的である下層のプロセッサ２６０の機能を使用可能にする、プロセッサ特有の命令群２５０を実行することを可能にする。更に、最適化マネージドＡＰＩｓ２２５は、ネイティブ・アセンブリ・コード５００によって、下層のプロセッサ２６０におけるマネージド・ランタイム・アプリケーション２１０の性能をカスタムハンドに最適化する。
【００２６】
本明細書において開示される方法および装置は、欧州コンピュータ・マネージメント・アソシエーション（ＥＣＭＡ）共通言語インフラストラクチャ（ＣＬＩ）(second edition, December 2002)およびＥＣＭＡ  Ｃ＃言語仕様(second edition, December 2002)の実装のソースコードに適する。しかし、通常の技術を有する当業者は、開示内容が他のランタイム環境におけるソースコードに対しても適用可能であることを理解するであろう。
【００２７】
図８は、本明細書において開示される方法および装置の実装に適合するプロセッサシステム１０００の一例を示すブロック図である。プロセッサシステム１０００は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、サーバ、インターネットアプライアンス、またはその他いかなるタイプのコンピュータデバイスでもよい。
【００２８】
図８に示されるプロセッサシステム１０００は、メモリコントローラ１０１２および入力／出力（Ｉ／Ｏ）コントローラ１０１４を含む、チップセット１０１０を有する。よく知られているように、チップセットは、一般的に、プロセッサ１０２０からアクセス可能である、または、プロセッサ１０２０によって使用されるメモリおよびＩ／Ｏ管理機能を提供し、一般的な目的および／または特定の目的のレジスタ、タイマーなども提供する。プロセッサ１０２０は、１つ以上のプロセッサを使用して実装される。例えば、プロセッサ１０２０は、Ｉｎｔｅｌ  Ｐｅｎｔｉｕｍ（登録商標）テクノロジ、Ｉｎｔｅｌ  Ｉｔａｎｉｕｍテクノロジ、Ｉｎｔｅｌ  Ｃｅｎｔｒｉｎｏ（登録商標）テクノロジおよび／またはＩｎｔｅｌ  ＸＳｃａｌｅ（登録商標）テクノロジのうちの１つ以上を使用して実装されてもよい。あるいは、他のプロセッシング技術がプロセッサ１０２０を実装するために使用されてもよい。プロセッサ１０２０は、第１レベル・ユニファイド・キャッシュ（Ｌ１）、第２レベル・ユニファイド・キャッシュ（Ｌ２）、第３レベル・ユニファイド・キャッシュ（Ｌ３）、および／または通常の技術を有する当業者が認識するその他の適用しうる全ての構造を使用して実装されうる、キャッシュ１０２２を有する。
【００２９】
従来技術のように、メモリコントローラ１０１２は、プロセッサ１０２０がバス１０４０によって揮発性メモリ１０３２および非揮発性メモリ１０３４を含むメインメモリ１０３０にアクセスして通信できるようにする機能を実行する。揮発性メモリ１０３２は、同期型ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、ＲＡＭＢＵＳダイナミック・ランダム・アクセス・メモリ（ＲＤＲＡＭ）、および／またはその他全てのタイプのランダム・アクセス・メモリ・デバイスによって実装されてもよい。非揮発性メモリ１０３４は、フラッシュメモリ、リード・オンリー・メモリ（ＲＯＭ）、電気的消去可能リード・オンリー・メモリ（ＥＥＰＲＯＭ（登録商標））、および／またはその他全てのタイプのメモリデバイスを使用して実装されてもよい。
【００３０】
プロセッサシステム１０００は、バス１０４０に接続されたインタフェース回路１０５０も有する。インタフェース回路１０５０は、イーサネット（登録商標）・インタフェース、ユニバーサル・シリアル・バス（ＵＳＢ）、第３世代入力／出力インタフェース（３ＧＩＯ）インタフェース、および／またはその他適用可能な全てのタイプのインタフェースのような、いかなる従来のインタフェースの標準を使用して実装されてもよい。
【００３１】
１つ以上の入力デバイス１０６０は、インタフェース回路１０５０に接続される。１つまたは複数の入力デバイス１０６０は、ユーザによるプロセッサ１０２０に対するデータおよびコマンドの入力を可能にする。例えば、１つまたは複数の入力デバイス１０６０は、キーボード、マウス、タッチセンシティブディスプレイ、トラックパッド、トラックボール、ｉｓｏｐｏｉｎｔ、および／または音声認識システムによって実装されてもよい。
【００３２】
１つ以上の出力デバイス１０７０もまた、インタフェース回路１０５０に接続される。例えば、１つまたは複数の出力デバイス１０７０は、ディスプレイデバイス（例：発光ディスプレイ（ＬＥＤ）、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プリンタ、および／またはスピーカ）によって実装されてもよい。このように、インタフェース回路１０５０は、一般的には、他のデバイスの中でも特に、グラフィックスドライバカードを有する。
【００３３】
プロセッサシステム１０００は、ソフトウェアおよびデータを保存する１つ以上の大容量ストレージデバイス１０８０も有する。そのような１つまたは複数の大容量ストレージデバイス１０８０の例は、フロッピー（登録商標）ディスクとドライブ、ハードディスクドライブ、コンパクトディスクとドライブ、およびデジタル多用途ディスク（ＤＶＤ）とドライブを含む。
【００３４】
インタフェース回路１０５０は、ネットワークによる外部コンピュータとのデータの交換を促進するモデムまたはネットワークインタフェースカードのような通信デバイスも含む。プロセッサシステム１０００とネットワーク間の通信リンクは、イーサネット（登録商標）接続、デジタル加入者回線（ＤＳＬ）、電話線、携帯電話システム、同軸ケーブルなどのような、いかなるタイプのネットワーク接続でもよい。
【００３５】
１つまたは複数の入力デバイス１０６０、１つまたは複数の出力デバイス１０７０、１つまたは複数の大容量ストレージデバイス１０８０、および／またはネットワークへのアクセスは、概して、従来技術の手法に沿ってＩ／Ｏコントローラ１０１４によってコントロールされる。特に、Ｉ／Ｏコントローラ１０１４は、プロセッサ１０２０がバス１０４０およびインタフェース回路１０５０によって１つまたは複数の入力デバイス１０６０、１つまたは複数の出力デバイス１０７０、１つまたは複数の大容量ストレージデバイス１０８０、および／またはネットワークにアクセスできるようにする機能を実行する。
【００３６】
図８に示されるコンポーネントはプロセッサシステム１０００内の独立したブロックとして図示されるが、これらのブロックのうちのいくつかによって実行される機能は、１つの半導体回路内に組み込まれてもよく、または、２つ以上の独立した集積回路を使用して実装されてもよい。例えば、メモリコントローラ１０１２およびＩ／Ｏコントローラ１０１４は、チップセット１０１０内の独立したブロックとして図示されるが、通常の技術を有する当業者は、メモリコントローラ１０１２およびＩ／Ｏコントローラ１０１４は１つの半導体回路に組み込まれうることを理解するであろう。
【００３７】
本明細書ではある一定の方法、装置、および製品の例が説明されるが、本発明の特許請求の範囲は、これらに限定されない。本発明の範囲は、逐語的にまたは均等論によって添付の特許請求の範囲に収まる全ての方法、装置、製品に及ぶ。例えば、本明細書は、他のコンポーネントの中でもハードウェア上で実行されるソフトウェアまたはファームウェアを含むシステム例を開示するが、これらのシステムは、単に本発明を説明するためのものであって本発明を限定するものではない。特に、全ての開示されたハードウェア、ソフトウェア、および／またはファームウェアコンポーネントは、ハードウェア内に独占的に組み込まれてもよく、ソフトウェアに独占的に組み込まれてもよく、ファームウェアに独占的に組み込まれてもよく、または、ハードウェア、ソフトウェア、および／またはファームウェアの組み合わせに組み込まれてもよいことが意図されている。
【図１】
2010176688.tif 000003
【図２】
2010176688.tif 000004
【図３】
2010176688.tif 000005
【図４】
2010176688.tif 000006
【図５】
2010176688.tif 000007
【図６】
2010176688.tif 000008
【図７】
2010176688.tif 000009
【図８】
2010176688.tif 000010
【手続補正書】
【提出日】平成22年4月6日(2010.4.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マネージド・ランタイム環境によりサポートされていない１つ以上のプロセッサ命令に基づく最適化コードを生成する段階と、
マネージド・ランタイム環境に関連するマネージド・アプリケーション・プログラム・インターフェイスに前記最適化コードを挿入し、前記１つ以上のプロセッサ命令をサポートしている最適化マネージド・アプリケーション・プログラム・インターフェイスを生成する段階と、
前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成する段階と
を備え、
前記１つ以上のプロセッサ命令に基づく最適化コードを生成する段階は、マネージド・ランタイム・アプリケーションのインストール中に前記最適化コードを生成する段階と、前記１つ以上のプロセッサ命令に関連した前記プロセッサを識別したことに応じて前記最適化コードを生成する段階とを有する方法。
【請求項２】
前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成する段階は、前記マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記最適化コードを生成する段階を有する請求項１に記載の方法。
【請求項３】
前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成する段階は、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つに関連する前記最適化コードを生成する段階を有する請求項１に記載の方法。
【請求項４】
前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成する段階は、仮想マシンのマーシャリング言語コードによって前記最適化コードを生成する段階を有する請求項１に記載の方法。
【請求項５】
前記最適化マネージド・アプリケーション・プログラム・インターフェイスに基づいて前記マネージド・ランタイム・アプリケーションを実行する間に、前記１つ以上のプロセッサ命令に関連する機能を使用可能にする段階をさらに備える請求項１に記載の方法。
【請求項６】
命令群を記録したマシンアクセス可能な媒体であって、前記命令群は、マシン上で実行されることにより、前記マシンに
マネージド・ランタイム環境によりサポートされていない１つ以上のプロセッサ命令に基づく最適化コードを生成させ、
マネージド・ランタイム環境に関連するマネージド・アプリケーション・プログラム・インターフェイスに前記最適化コードを挿入し、前記１つ以上のプロセッサ命令をサポートしている最適化マネージド・アプリケーション・プログラム・インターフェイスを生成させ、
前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成させ、
前記１つ以上のプロセッサ命令に関連した前記プロセッサを識別したことに応じて、マネージド・ランタイム・アプリケーションのインストール中に前記最適化コードを生成させる媒体。
【請求項７】
前記命令群は、前記マシンに、前記マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて前記最適化コードを生成させることにより、前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成させる請求項６に記載の媒体。
【請求項８】
前記命令群は、前記マシンに、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つに関連する前記最適化コードを生成させることにより、前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成させる請求項６に記載の媒体。
【請求項９】
前記命令群は、前記マシンに、仮想マシンのマーシャリング言語コードによって前記最適化コードを生成させることにより、前記１つ以上のプロセッサ命令に関連した前記最適化コードを生成させる請求項６に記載の媒体。
【請求項１０】
前記命令群は、前記マシンに、前記最適化マネージド・アプリケーション・プログラム・インターフェイスに基づいて前記マネージド・ランタイム・アプリケーションを実行するための前記１つ以上のプロセッサ命令に関連する機能を使用可能にさせる請求項６に記載の媒体。
【請求項１１】
前記マシンアクセス可能な媒体は、プログラマブル・ゲート・アレイ、特定用途向け集積回路、消去可能プログラマブル・リード・オンリー・メモリ、リード・オンリー・メモリ、ランダム・アクセス・メモリ、磁気メディア、および光メディアのうちの１つを備える請求項６に記載の媒体。
【請求項１２】
プロセッサと、
メモリと
を備え、
前記メモリは、
マネージド・ランタイム環境によりサポートされていない１つ以上のプロセッサ命令に基づく最適化コードを生成し、マネージド・ランタイム環境に関連するマネージド・アプリケーション・プログラム・インターフェイスに前記最適化コードを挿入し、前記１つ以上のプロセッサ命令をサポートしている最適化マネージド・アプリケーション・プログラム・インターフェイスを生成する最適化コード生成部と、
前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成するコンパイラと、
を格納しており、
前記最適化コード生成部は、仮想マシンおよび前記コンパイラのうちの一つに組み込まれており、前記１つ以上のプロセッサ命令に関連するプロセッサを識別して前記最適化コードを生成する装置。
【請求項１３】
前記１つ以上のプロセッサ命令は、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つを有する請求項１２に記載の装置。
【請求項１４】
前記コンパイラは、ジャスト・イン・タイム・コンパイラを有する請求項１２に記載の装置。
【請求項１５】
前記最適化コードは、前記マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成される請求項１２に記載の装置。
【請求項１６】
前記最適化マネージド・アプリケーション・プログラム・インターフェイスはマネージド・ランタイム・アプリケーションを実行するための前記１つ以上のプロセッサ命令に関連する機能を使用可能にする請求項１２に記載の装置。
【請求項１７】
マネージド・ランタイム環境に関連する１つ以上の最適化マネージド・アプリケーション・プログラム・インターフェイスを格納するダイナミック・ランダム・メモリ（ＤＲＡＭ）と、
前記１つ以上のプロセッサ命令に基づいて最適化コードを生成し、前記マネージド・ランタイム環境によりサポートされていない１つ以上のプロセッサ命令をサポートするネイティブコードを前記マネージド・ランタイム環境に関連する前記１つ以上のマネージド・アプリケーション・プログラム・インターフェイスに挿入し、１つ以上の最適化マネージド・アプリケーション・プログラム・インターフェイスを生成し、前記マネージド・ランタイム環境のコンパイラを用いて、前記最適化コードを含む前記最適化マネージド・アプリケーション・プログラム・インターフェイスをコンパイルしてコンパイルされたコードを生成する、前記ＤＲＡＭに接続されたプロセッサと
を備え、
前記最適化コードは、前記マネージド・ランタイム環境の仮想マシンに関連するレイヤにおいて生成され、前記最適化コードはマネージド・ランタイム・アプリケーションのインストール中に生成されるプロセッサシステム。
【請求項１８】
前記１つ以上のプロセッサ命令は、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、およびマルチメディア拡張命令のうちの１つを含む請求項１７に記載のプロセッサシステム。
【請求項１９】
前記最適化マネージド・アプリケーション・プログラム・インターフェイスは、前記マネージド・ランタイム・アプリケーションを実行する間に、前記１つ以上のプロセッサ命令に関連する機能を使用可能にする請求項１７に記載のプロセッサシステム。
【外国語明細書】
2010176688.tif 000011
2010176688.tif 000012
2010176688.tif 000013
2010176688.tif 000014
2010176688.tif 000015
2010176688.tif 000016
2010176688.tif 000017
2010176688.tif 000018
2010176688.tif 000019
2010176688.tif 000020
2010176688.tif 000021
2010176688.tif 000022
2010176688.tif 000023
2010176688.tif 000024
2010176688.tif 000025
2010176688.tif 000026
2010176688.tif 000027
2010176688.tif 000028
2010176688.tif 000029
2010176688.tif 000030
2010176688.tif 000031
2010176688.tif 000032
2010176688.tif 000033
2010176688.tif 000034
2010176688.tif 000035