(57)【要約】【解決手段】エミュレータは、問題のあるターゲットコードブロックに対してターゲットシステムコードを評価すること、このようなブロックの変換をバイパスすること、及び場合によって、問題のあるブロックに対する代替ホストコードを選択することによって、問題のあるターゲットコードブロックに対処する。ターゲットシステムコードの問題のない部分はホストシステムコードの対応する部分に変換され、これは実行ストリームに挿入される。代替ホストシステムコードも実行ストリームに挿入されてもよい。【選択図】図３
2020523693.tif 000002
【特許請求の範囲】
【請求項１】
ホストシステム上のターゲットシステムの１つまたは複数の構成要素が、前記ターゲットシステムのために書かれたターゲットシステムコードを、前記ホストシステムによって実行可能である対応するホストシステムコードに変換することによってエミュレートされる、前記ターゲットシステムのエミュレーションにおける、問題のあるターゲットコードブロックに対処するための方法であって、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、方法。
【請求項２】
前記問題のあるターゲットシステムコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項１に記載の方法。
【請求項３】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項２に記載の方法。
【請求項４】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項３に記載の方法。
【請求項５】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１に記載の方法。
【請求項６】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１に記載の方法。
【請求項７】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項１に記載の方法。
【請求項８】
前記ターゲットシステムコードを前記評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項７に記載の方法。
【請求項９】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項１に記載の方法。
【請求項１０】
前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項１に記載の方法。
【請求項１１】
前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項１に記載の方法。
【請求項１２】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、どのコードブロックに問題があるかを学習するように構成されるホストシステムを使用することを含む、請求項１に記載の方法。
【請求項１３】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項１に記載の方法。
【請求項１４】
実行される時、コンピュータシステムに、ターゲットシステムのために書かれたターゲットシステムコードを、ホストシステムによって実行可能である対応するホストシステムコードに変換する時に問題のあるターゲットコードに対処するための方法を実施させる実行可能命令を含有する非一時的なコンピュータ可読媒体であって、前記方法は、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、非一時的なコンピュータ可読媒体。
【請求項１５】
前記問題のあるターゲットコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項１６】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１７】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２１】
前記ターゲットシステムコードを前記評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項２０に記載の非一時的なコンピュータ可読媒体。
【請求項２２】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２３】
前記方法は、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２４】
前記方法は、前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２５】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、どのコードブロックに問題があるかを学習するように構成されるホストシステムを使用することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２６】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２７】
コンピュータシステムであって、
１つまたは複数のシステムプロセッサと、
前記１つまたは複数のシステムプロセッサに結合されるメモリと、
前記メモリにおいて具現化されるプロセッサ実行可能命令セットであって、前記命令は、前記コンピュータシステムに、ターゲットシステムのために書かれたターゲットシステムコードを、ホストシステムによって実行可能である対応するホストシステムコードに変換する時に問題のあるターゲットコードに対処するための方法を実施させるように構成される、前記プロセッサ実行可能命令セットと、を含み、前記方法は、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、コンピュータシステム。
【請求項２８】
前記問題のあるターゲットコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項２７に記載のシステム。
【請求項２９】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項２８に記載のシステム。
【請求項３０】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項２９に記載のシステム。
【請求項３１】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項２７に記載のシステム。
【請求項３２】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項２７に記載のシステム。
【請求項３３】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項２７に記載のシステム。
【請求項３４】
前記ターゲットシステムコードを評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項３３に記載のシステム。
【請求項３５】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項２７に記載のシステム。
【請求項３６】
前記方法は、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項２７に記載のシステム。
【請求項３７】
前記方法は、前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項２７に記載のシステム。
【請求項３８】
前記ホストシステムは、どのコードブロックに問題があるかを学習するように構成される、請求項２７に記載のシステム。
【請求項３９】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項２７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はソフトウェアコンパイラに関する。より具体的には、本開示は、１つのデバイスアーキテクチャ上で実行するように書かれたコードから第２の異なるデバイスアーキテクチャ上で実行するように書かれたコードへの変換に関する。
【背景技術】
【０００２】
第１のコンピュータプラットフォーム（「ターゲットシステム」）の機能性を第２のコンピュータプラットフォーム（「ホストシステム」）上でエミュレートすることで、ホストシステムがターゲットシステムのために設計されたプログラムを実行できるようにするプロセスは、「エミュレーション」として既知である。エミュレーションは、一般的に、ターゲットプラットフォームのために設計されたプログラム命令（ターゲットコード命令）をホストプラットフォームの母国語（ホスト命令）にコンバートするソフトウェアを作成することで互換性を達成することによって、達成されている。エミュレーションはまた、「仮想マシン」の作成によって実現されており、ここで、ターゲットプラットフォームの物理アーキテクチャ、つまり、ハードウェア自体の設計は、ソフトウェアにおける仮想モデルを介してレプリケートされる。
【０００３】
エミュレーション方策の２つの主なタイプが現在一般に使用されている。第１の方策は、「解釈」として既知であり、この場合、それぞれのターゲットコード命令は、アドレス指定されるようにさらには復号されて、ホスト命令の小さなシーケンスを、ターゲットコード命令と意味的に同等であるように実行させる。このようなエミュレータの主な構成要素は、典型的には、ターゲットマシン言語のプログラムのそれぞれの命令をホストマシン言語の命令セットにコンバートするソフトウェアインタプリタであり、この場合、ホストマシン言語は、ターゲットマシンをエミュレートするために使用されるホストコンピュータのコード言語である。時には、インタプリタは、コンピュータハードウェアまたはファームウェアで実施されていることによって、エミュレートされたプログラムを比較的早く実行することが可能である。
【０００４】
他の主なエミュレーション方策は「変換」として既知であり、ここで、ターゲット命令は分析されかつ復号される。これはまた、「再コンパイル」または「クロスコンパイル」と称される。コンピュータプログラムの実行速度がインタプリタによって劇的に低減することが多いことは周知である。同等のプログラムがターゲットマシンコードに再コンパイルされ、かつターゲットコードバージョンが実行される時より、エミュレーションを介して実行される時の方が、コンピュータプログラムが実行するのが１０〜２０倍遅くなることは珍しくない。ソフトウェアエミュレーションの周知の遅さにより、ランタイムでのターゲットプログラムの部分をホストマシンコードに変換後、再コンパイルされたプログラム部分を実行することによって、いくつかの製品は、ソースアプリケーションを実行する速度に関してうまく改善されている。変換プロセスは、ターゲットコードの命令ごとに、例えば、５０〜１００のマシンまたはクロックサイクルを要する場合があるが、結果として生じるホストマシンコードの速度が速くなることは、平均で、ほとんどのソースアプリケーションの実行の速度全体を改善するのに十分である。
【０００５】
いくつかのランタイム変換システムは、必要に応じて、ターゲットソフトウェアをホストソフトウェアに変換するためのＪｕｓｔ−Ｉｎ−Ｔｉｍｅ（ＪＩＴ）変換またはコンパイルとして既知の方法を使用する。ＪＩＴ変換スキームを用いる例示のエミュレーションは、例えば、米国特許第８，２４５，２０２（Ｂ２）号、米国特許第７，７９２，６６６（Ｂ２）号、米国特許第７，８１３，９０９（Ｂ２）号、及び米国特許第７，７７０，０５０（Ｂ２）号に記載されており、これらは参照により上記に組み込まれている。このようなランタイムＪＩＴスキームは、動的性質のターゲットソフトウェアを変換する際に使用されることが多い。性質が動的であるソフトウェアにおいて、コードの部分は実行前に動的に変えられてもよい。例えば、ターゲットシステム内で、実行可能コードは、新しい実行ファイルのロード、オーバーレイのロード、ランタイムコード生成、または自己書き換えコードによって動的に変えられてもよい。動的なコード変更はまた、さまざまなデバイスからのダイレクトメモリアクセス（ＤＭＡ）転送によってシステムコールを実行すること、または単にユーザコードを実行することなどによって、いくつかの経路を通してメモリを改変することによって生じる場合がある。
【発明の概要】
【０００６】
この文脈の範囲内で、本開示の態様は生じる。
【図面の簡単な説明】
【０００７】
本発明の教示は、添付の図面と併せて以下の詳細な説明を考慮することによって容易に理解可能である。
【０００８】
【図１Ａ】先行技術のターゲットシステムコードのブロック図である。
【図１Ｂ】本開示の態様による、ターゲットシステムコード及びＪＩＴコンパイラを含有する非一時的なコンピュータ可読メモリのブロック図である。
【図２】本開示の態様による、代替ホストコードを選択しかつ挿入するプロセスを示すフロー図である。
【図３】本開示の態様によるホストシステムのハードウェア構成を示す。
【図４】本開示の態様によるホストシステムのＣＰＵコアアーキテクチャを示す。
【発明を実施するための形態】
【０００９】
序文
ホストシステム上で実行するようにターゲットシステムのために書かれたコードを変換することは、ターゲットシステムの設定とホストシステムの設定との間の相違により困難になる場合がある。これらの相違によって、ターゲットシステムのために書かれたコードからホストシステムと互換性のあるコードに直接変換される時、互換性がない場合があるブロックをコード化することになる。問題のあるターゲットコード（ＰＴＣ）ブロックとしても既知のこれらのコードはまた、元のターゲットシステムコードの品質検査中に除去されなかった不要なコードセクションである場合がある。ＰＴＣブロックは変換されたコードを、ホストシステム上で実行しないまたは不完全に実行する場合がある。本明細書で使用されるように、問題のあるターゲットコードブロックまたはＰＴＣブロックという用語は、１つまたは複数の非分岐シーケンスを指す。ＰＴＣブロックの実施例には、あるアプリケーションのためのターゲットシステムコードをデバッグするために書かれたコードブロック、またはあるアプリケーションのためのターゲットシステムコードに対する品質保証プロセス中に修復されなかった、不完全に書かれた、または中断されたターゲットコードシーケンスが挙げられる。
【００１０】
特定の実施形態の説明
以下の詳細な説明は例示の目的で多くの特有の詳細を含有するが、以下の詳細に対する多くの変形及び改変が本発明の範囲内にあることは、当業者は理解するであろう。それ故に、後述される本発明の例示の実施形態は、特許請求される発明に対して、一般性を失うことなく、かつ制限を与えることなく示される。
【００１１】
図１Ａは、ＲＡＭ、ＲＯＭ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、Ｂｌｕ−Ｒａｙ（登録商標）、フラッシュメモリ、フロッピー（登録商標）ディスク、ハードディスク、及び磁気テープなどの非一時的なコンピュータ可読媒体に埋め込まれた先行技術のターゲットシステムプログラムの一実施例を示す。ターゲットシステムプログラムは、ファイル名、ファイルサイズ、ファイルタイプ、互換性情報、及びファイルの連続性におけるハッシュコードなどの情報をターゲットシステムに通知するヘッダー１０１を含んでもよい。先行技術のターゲットシステムプログラムは、ターゲットシステムコード１０２も含む。ターゲットシステムコード１０２は、レガシーシステム（すなわち、ホストシステムの以前のバージョン）またはホストシステムと互換性のないコンピュータシステム上で実行するように書かれたプログラムであってもよい。ターゲットシステムコード１０２は、マシンコード、アセンブリなどの低水準プログラミング言語、Ｃ、Ｃ＋＋、Ｃ＃などの混合水準プログラミング言語、またはＰＥＲＬまたはＶｉｓｕａｌ  Ｂａｓｉｃなどの高水準言語などにおけるものであってもよい。
【００１２】
図１Ｂは、本開示のある特定の態様による非一時的なコンピュータ可読媒体１００の一実施例を示す。この非限定的な実施例では、ターゲットシステムプログラムは、ＪＩＴコンパイラを含むエミュレーションプログラムと共に埋め込まれる。先行技術の場合のように、ターゲットプログラムは、前述のヘッダー１０１及びターゲットシステムコード１０２を含んでもよい。この特定の実施例では、非一時的なコンピュータ可読媒体１００は、後にさらに詳細に論じられるように、ターゲットシステムコード１０２をホストシステムに変換するように構成されるＪＩＴコンパイラ１０３を含む。非一時的なコンピュータ可読媒体１００はまた、次のセクションで論じられるように、ＪＩＴコンパイラ１０３が命令に対処する問題のあるターゲットコードブロックを実装するために使用可能である代替ホストコードセクション１０４のデータベースを含んでもよい。ＪＩＴコンパイラ１０３及び代替ホストコードセクション１０４のデータベースは、ホストシステム上のメモリまたは論理に位置してもよい、またはターゲットシステムコード１０２の同じ非一時的な媒体に埋め込まれてもよいが、本開示の態様はこのような実施態様に限定されない。代替的な実施態様では、ターゲットシステムコード１０２、ＪＩＴコンパイラ１０３、及び代替ホストコードセクション１０４は、例えば、ネットワーク上で、全てホストシステムによってアクセス可能である別個のコンピュータ可読媒体に記憶されてもよい。
【００１３】
図２は、本開示の態様による問題のあるターゲットシステムコードに対処するための方法を示す。図２において、点線の矢印はデータの流れを指示することが意図されており、実線の矢印は計算動作の流れを指示することが意図されている。
【００１４】
本開示の１つの態様によると、ホストシステムは、ホストシステム２００上のＰＴＣブロックによってターゲットコードをエミュレートするための方法を実行してもよい。同様に、エミュレーション方法２００は、遠隔に実行され、かつネットワーク上でホストシステムに送られてもよい。説明を容易にするために、方法は、本明細書におけるホストシステム上で実行されるとして説明される。始めるために、ホストシステムはターゲットシステム１０２のために書かれたプログラムを開始してもよい。ターゲットコードシステムの選択時に、ヘッダー１０１はホストシステムにコード１０２がターゲットシステムのために書かれていることを通知してもよい。ターゲットシステム１０２は、問題のないターゲットコードブロック２０１及び問題のあるテストコードブロック２０２両方を有してもよい。ホストシステムは、プロセス２１２を実行するＪＩＴコンパイラ１０３を呼び出すことになる。最初に、ＪＩＴコンパイラは、２０３において指示されるように、ＰＴＣブロックの存在についてコードを評価する。ＪＩＴコンパイラが２０３において、ブロックが非ＰＴＣブロック２０１であると決定する場合、非ＰＴＣブロック２０１は対応するホストシステムコード２０７に変換され２０５、かつ２０８で指示されるように、ホストシステム実行ストリームに挿入される。
【００１５】
ＪＩＴコンパイラ１０３は、２０２においてターゲットコードのブロックがＰＴＣブロックであるかどうかを評価するための多数の技法を用いてもよい。第一に、ＪＩＴコンパイラ１０３は最適に及ばない性能についてコードを評価してもよい。ＪＩＴコンパイラ１０３はターゲットコードにおける冗長度を検出してもよい。ＪＩＴコンパイラ１０３はまた、プログラム全体を通して複数回参照されるコード行を検出し、かつ参照されたコードを実行するのにかかる時間を監視してもよい。さらに、ＪＩＴコンパイラ１０３は、ターゲットシステムの特有の構成要素、例えば、ＭＩＰＳアーキテクチャ、またはセルブロードバンドアーキテクチャの相乗的処理ユニット（ＳＰＵ）などの、縮小命令セットコンピューティング（ＲＩＳＣ）の命令セットアーキテクチャにおけるベクトルユニットのために書かれたコードを検出してもよい。他の検出方法は、ターゲットコード１０２がホストシステム上よりもターゲットシステム上の方が大きいレジスタを活用するようにプログラミングされたかどうかを検出することを含んでもよい。他の実施態様では、ＰＴＣブロック２０２は、ターゲットシステムコードが通常はホストシステムコードに変換され、かつ結果として生じるコードの性能が監視されるテスト段階時に識別されてもよい。変換されたコードが不完全に実行されるまたは全く実行されない場合、ターゲットシステムコードの対応する部分は、根本的な問題を引き起こすパターンを判断し、かつ代替ホストシステムコードを生成するために分析されてもよい。ＪＩＴコンパイラ１０３はさらにまた、ランタイムでこれらのパターンを認識するように構成、例えばプログラミング可能である。これらのＰＴＣブロックを効率的に認識するために、ＪＩＴコンパイラ１０３は、アドレスブロックの開始を識別し、かつターゲットシステムコード１０２のそれぞれのブロックについてのハッシュ値を生成するように構成されてもよい。ＪＩＴコンパイラ１０３は、代替ホストコードセクション１０４と関連付けられたＰＴＣブロック２０２のハッシュ値を認識するように構成されてもよい。
【００１６】
テスト段階時に、開発者は、変換されたコードの性能を分析することによって問題のあるコードブロックを識別してもよい。例えば、開発者は、性能カウンタ（例えば、性能分析ルーチン）または（ブロックが何回実行されたかを判断するために）アドレスヒットカウンタを検査してもよい、またはどのコードブロックが「不完全に実行している」かを手動で判断してもよい。このような分析は、どのターゲットコードブロックが「代替ホストコード」を使用してより有利にエミュレートされるかを判断するように自動化されてもよい。
【００１７】
いくつかの実施態様では、ＪＩＴコンパイラ１０３が、例えば、変換されたターゲットコードブロックの実行をシミュレーションすること、及びエラーを検出してそのエラーから問題の性質を識別することによって、どのコードブロックがオンザフライでの問題となっているかを「学習する」ことが可能であってもよい。例としてかつ限定することなく、ＪＩＴコンパイラ１０３またはホストシステムは、ＰＴＣとみなすターゲットコードにおけるメモリアクセスの特定のシーケンスを検出するように、例えば、適切なプログラミング及び／またはハードウェア構成を通して構成されてもよい。このようなパターンは、ターゲットハードウェア上の特有のプログラミング問題に対する最適な解決策をもたらす場合があるが、問題、例えば、ホストハードウェア上で忠実に実行される時のシステムメモリストールを生じさせる場合がある。このようなパターンの１つの実施例は、業界内ではストア−ロード転送（ＳＴＬＦ）と称される。メモリ読み出し／書込みパターンを追跡し、かつ可能性があるＳＴＬＦ候補をフィルタリングするためのインストルメンテーションによって、メモリアクセスを追跡するプロセスはランタイムに行われてもよいが、ＪＩＴシミュレーションを介して行われることも可能である。収集されたデータは、ＰＴＣ置き換えのための特有のブロックをターゲットにするために使用可能である。
【００１８】
他の実施態様では、ＪＩＴコンパイラ１０３またはホストシステムは、コンパイルされたブロックにおける検出された問題／エラーに対する業界標準プロセスを使用してもよい。このような標準プロセスの１つの実施例は「インストルメンテーション」と呼ばれる。学習機構ではないが、インストルメンテーションは、コード実行パターンについての大量のデータを提供し、このデータはその後関連性についてフィルタリング可能である。いくつかの実施態様は、問題のあるコードブロックをオンザフライで学習すること、及び例えばインストルメンテーションによって実行パターンを分析することを組み合わせて使用してもよい。
【００１９】
ＪＩＴコンパイラ１０３は、ＰＴＣブロック２０２の通常の変換をバイパスする。本開示の態様によると、２０４で指示されるように、ＰＴＣブロック２０２の検出時に、ＪＩＴコンパイラ１０３は、ＰＴＣブロック２０４を置き換えるために代替ホストコードセクション１０４のデータベースから代替ホストコード２０６の適切なものを選択することによって、ＰＴＣブロックの変換をバイパスしてもよい。代替ホストシステムコード２０６は、メモリに記憶されたコードの事前書き込みセクションを含んでもよい。代替ホストシステムコード２０６は、ホストシステム上で実行するように書かれた命令を分岐することまたは非分岐することのどちらかを含んでもよい。代替コード２０６は、ＰＴＣブロック２０２を修復するためにさまざまな異なる解決策を実施してもよい。例えば、代替ホストコード２０６は、ターゲットシステム上よりもホストシステム上の方が小さいレジスタ（またはより少数のレジスタ）を考慮するためにレジスタ値を再マッピングしてもよい。別の実施例は、代替ホストコード２０６が、コード命令をマスクするレーンを排除してもよい、またはホストシステム上でマスクするレーンに達するための追加のステップを実施してもよいことである。代替的には、代替ホストコード２０６は、ホストシステム上の変換されたターゲットシステムのコード２０７を合理化するまたはより効率的に実行するように実装されてもよい。
【００２０】
本明細書に説明される方法の１つの大きな利点は、不要なコードを全体的に排除するようにエミュレーションを構成可能であることである。上記のように、いくつかのアプリケーションは、開発以外は必要ではない製品上の未使用のデバッグコードを含有する。このようなコードは、性能の低下を引き起こす可能性があり、通常は全く不要である。本開示の態様によって、エミュレーションシステムは、問題のあるコードブロックをバイパスすることによって、及び適切な場合、代替ホストコードを導入することによって、このようなコードを改変するまたはスキップすることが可能になる。このような不要なコードは「フック／置き換え」パッチを使用してスキップ可能であるが、問題のあるコードブロックのバイパス、及び代替ホストコードの適切な導入によってエミュレーションをはるかに速く実行し得る。
【００２１】
場合によって、ＪＩＴコンパイラ１０３は、実行ストリームにいずれの代替ホストシステムコードも挿入することなく、ある特定のＰＴＣブロックの変換を単にスキップし得る。例えば、残りのデバッグコードなどのある特定のＰＴＣブロックは、ターゲットコードの動作に影響を与えない場合があるが、これらブロックが変換される場合にホストシステムの実行に悪影響を及ぼす可能性がある。ＪＩＴコンパイラは、実行ストリーム２０９にいずれの代替ホストシステムコードも挿入することなく、このようなＰＴＣブロックの変換をバイパスしてもよい。
【００２２】
ＪＩＴコンパイラ１０３は、変換されたＰＴＣブロックが配置されたであろうのと同じ、実行ストリーム２０９における場所に代替ホストコード２０６を挿入する２０８ように構成されてもよい。代替的には、ＪＩＴコンパイラ１０３は、代替ホストコードを実行ストリーム２０９の異なる場所に配置してもよい。いくつかの実施態様では、ＪＩＴコンパイラ１０３は、ＰＴＣブロックを変換し、かつ代替ホストコードを、変換されたＰＴＣブロックと共に実行ストリームに挿入する、またはＪＩＴコンパイラ１０３は、代替ホストコードによってＰＴＣブロックの変換をわずかに改変し、かつ改変されたＰＴＣブロックを実行ストリームに挿入してもよい。
【００２３】
代替的な実施態様では、ＪＩＴコンパイラ１０３は、変換２０３前に既知のＰＴＣブロックについてターゲットシステムコードをスキャンしてもよい。ＰＴＣブロックの検出時に、ＪＩＴコンパイラは対処プロセス２１２を開始してもよい。対処プロセス中のＪＩＴコンパイラ１０３は、検出されたＰＴＣブロック２０２を置き換えるまたは修復するために代替ホストコードセクション１０４のデータベースから代替ホストコード２０６を選択する２０４。ＪＩＴコンパイラ１０３はさらにまた、適切な時間に、代替ホストコード２０６を実行ストリーム２０９に挿入２０８してもよい。代替的には、ＪＩＴコンパイラは、ＰＴＣブロックを変換するように選定し、かつ実行ストリーム２０９における適切な場所に代替ホストコードを挿入２０８してもよい。いくつかの実施態様では、ＪＩＴコンパイラ１０３は、ＰＴＣブロック、例えば、不要であることが既知のＰＴＣブロックのために、代替ホストコード２０６を２０６における実行ストリームに単に挿入２０８しない場合がある。ＪＩＴコンパイラ１０３がＰＴＣブロック２０２によって引き起こされる問題のタイプに応じて代替アクションの間で選定できることが望ましい。
【００２４】
ＪＩＴコンパイラ１０３は、ＰＴＣブロック２０２を解決すると、非ＰＴＣブロック２０１を対応するホストシステムコード２０７に変換すること、及び対応するホストシステムコード２０７を２０９における実行ストリームに挿入すること２０８を再開することになる。変換中、ＪＩＴコンパイラ１０３は、性能が最適に及ばないかどうかを判断するために変換されたコードの実行２０９を監視してもよい。最適に及ばない性能のこのような判断時に、ＪＩＴコンパイラは、ＰＴＣブロックの検出及び対処を再開してもよい。代替的な実施形態では、代替ホストコード２０６は、非ＰＴＣブロック２０１が変換された２０５後に挿入される２０８。変換がバイパスされた後（例えば、代替ホストコードを実行ストリームに挿入後）、または対応するホストコード２０７が実行ストリーム２０９に挿入された後、プロセス２１２は、２１０で指示されるように、ターゲットコード１０２の次のブロックに対して繰り返されてもよい。
【００２５】
実行ストリーム２０９は、２１２で指示されるように、ネットワーク上でホストコンピュータに送られてもよい。代替的には、実行ストリーム２０７における命令は、２１４で指示されるように、ホストシステム上のプロセッサによって即座に実行されてもよい、または、２１６で指示されるように、最終的な実行に対してホストシステム上のバッファまたはキャッシュに入れてもよい。
【００２６】
ここで図３に移ると、本開示の態様に従って、図４のホストＣＰＵで動作するように構成されるホストシステム３００の実例の実施例が示されている。本開示の態様によると、システム３００は、埋め込みシステム、携帯電話、パーソナルコンピュータ、タブレットコンピュータ、ポータブルゲーム機器、ワークステーション、及びゲーム機などであってもよい。
【００２７】
システム３００は一般的に、ＣＰＵコア４００、及び、図４に示されかつ上で論じられるタイプの他の特徴を含んでもよい中央処理装置（ＣＰＵ）３２０を含む。例としてかつ限定することなく、ＣＰＵ３２０は、ＣＰＵ３２０を含む加速処理ユニット（ＡＰＵ）３１０、及びシングルチップ上のグラフィック処理ユニット（ＧＰＵ）３３０の一部であってもよい。代替的な実施態様では、ＣＰＵ３２０及びＧＰＵ３３０は、別個のチップ上の別個のハードウェア構成要素として実装されてもよい。
【００２８】
システム３００はまた、メモリ３４０を含んでもよい。メモリ３４０は、オプションとして、ＣＰＵ３２０及びＧＰＵ３３０にアクセス可能な主記憶装置を含んでもよい。ＣＰＵ３２０及びＧＰＵ３３０は、それぞれ、１つまたは複数のプロセッサコア、例えば、単一のコア、２つのコア、４つのコア、８つのコア、またはそれ以上のコアを含んでもよい。ＣＰＵ３２０及びＧＰＵ３３０は、データバス３９０を使用して１つまたは複数のメモリユニットにアクセスするように構成されてもよく、いくつかの実施態様では、２つ以上の異なるバスを含むことがシステム３００にとって有用であり得る。
【００２９】
メモリ３４０は、例えば、ＲＡＭ及びＤＲＡＭなど、アドレス指定可能なメモリを提供する集積回路の形態の１つまたは複数のメモリユニットを含んでもよい。メモリは、図２の方法を実施するように構成されるＪＩＴコンパイラ３２５のための実行可能命令、及び代替ホストコードセクション３２６を含有し得る。さらに、メモリ３４０は、グラフィックスリソース、グラフィックスバッファ、及びグラフィックスレンダリングパイプラインのための他のグラフィックスデータを一時的に記憶するための専用グラフィックスメモリを含んでもよい。
【００３０】
ＣＰＵ３２０は、オペレーティングシステム（ＯＳ）３２１または１つもしくは複数のターゲットアプリケーション３２２（例えば、ビデオゲーム）を含み得るＣＰＵコードを実行するように構成されてもよい。本開示の態様によると、ＣＰＵはまた、代替ホストコードセクション３２６のデータベースをリソースとして使用し得るＪＩＴコンパイラ３２５のためのＣＰＵコードを実行するように構成されてもよい。ＯＳ３２１は、ＣＰＵ３２０を動作させるある特定の特徴を実装するように構成されてもよい。ＣＰＵコードは、アプリケーション３２２の状態に基づいてＧＰＵ３３０によって実装されるプログラムに対する描画コマンドまたは描画呼び出しを発行するためのグラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）３２４を含んでもよい。ＣＰＵコードはまた、物理シミュレーション及び他の機能を実施してもよい。ＯＳ３２１、ターゲットアプリケーション３２２、ＪＩＴコンパイラ３２５、代替ホストコードセクション３２６、またはＡＰＩ３２４の１つまたは複数のためのコードの部分は、メモリ３４０、ＣＰＵの内部または外部のキャッシュ、または、ＣＰＵ３２０にアクセス可能な大容量記憶デバイスに記憶され得る。
【００３１】
システム３００はまた、例えば、バス３９０を介して、システムの他の構成要素と通信し得る周知のサポート機能３５０を含んでもよい。このようなサポート機能は、入力／出力（Ｉ／Ｏ）要素３５２、ＣＰＵ及びＧＰＵそれぞれに対する別個のクロックを含み得る１つまたは複数のクロック３５６、及びＣＰＵ３２０に外付けされてもよい１つまたは複数のレベルのキャッシュ３５８を含んでもよいが、これらに限定されない。システム３００は、オプションとして、プログラム及び／またはデータを記憶するための、ディスクドライブ、ＣＤ−ＲＯＭドライブ、フラッシュメモリ、テープドライブ、またはＢｌｕ−Ｒａｙ（登録商標）ドライブなどの大容量記憶デバイス３６０を含んでもよい。１つの実施例では、大容量記憶デバイス３６０は、元々は、ターゲットシステム上で実行するように設計されたアプリケーションを含有するコンピュータ可読媒体３６２を受信してもよい。代替的には、ターゲットシステムアプリケーション３６２（またはこの部分）は、メモリ３４０に、または一部分がキャッシュ３５８に記憶されてもよい。
【００３２】
デバイス３００はまた、ＧＰＵ３３０によって準備されたレンダリングされたグラフィックス３８２をユーザに提示するためのディスプレイユニット３８０を含んでもよい。デバイス３００はまた、システム３００とユーザとの間の対話を容易にするためにユーザインターフェースユニット３７０を含んでもよい。ディスプレイユニット３８０は、フラットパネルディスプレイ、ブラウン管（ＣＲＴ）スクリーン、タッチスクリーン、ヘッドマウントディスプレイ（ＨＭＤ）、またはテキスト、数字、グラフィカルシンボル、または画像を表示できる他のデバイスの形態であってもよい。ディスプレイ３８０は、本明細書に説明されるさまざまな技法に従って処理されるレンダリングされたグラフィックス３８２を表示し得る。ユーザインターフェース３７０は、キーボード、マウス、ジョイスティック、ライトペン、ゲームコントローラ、タッチスクリーン、及び／またはグラフィカルユーザインターフェース（ＧＵＩ）と併せて使用されてもよい他のデバイスなどの１つまたは複数の周辺機器を含有してもよい。ある特定の実施態様では、ターゲットアプリケーション３２２の状態、及びグラフィックの根本的なコンテンツは、少なくとも一部が、例えば、ターゲットアプリケーション３２２がビデオゲームまたは他のグラフィックス重視のアプリケーションを含む場合に、ユーザインターフェース３７０を通してユーザ入力によって判断されてもよい。
【００３３】
システム３００はまた、デバイスが、ネットワーク上で他のデバイスと通信できるようにするネットワークインターフェース３７２を含んでもよい。ネットワークは、例えば、ローカルエリアネットワーク（ＬＡＮ）、インターネットなどの広域ネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）ネットワークなどのパーソナルエリアネットワーク、または他のタイプのネットワークであってもよい。ネットワークインターフェース３７２はまた、サーバ上で本開示の態様に従って実行するエミュレータからネットワーク上で対応するホストコードを受信することを可能にされてもよい。示されかつ説明される構成要素のさまざまなものは、ハードウェア、ソフトウェア、もしくはファームウェア、またはこれらの２つ以上のある組み合わせで実装されてもよい。
【００３４】
図４は、ホストシステムのＣＰＵコア４００の一般化されたアーキテクチャを示す。ＣＰＵコア４００は典型的には、分岐が成立するか否かを予測しようと試み、また分岐の宛先アドレスを予測しようと（分岐が成立する際に）試みる分岐予測ユニット４０２を含む。これらの予測が正確である限りは、推論的に実行されるコードの効率は高められることになり、従って、非常に精確な分岐予測は非常に望ましい。分岐予測ユニット４０２は、サブルーチンからのリターンアドレスを追跡するリターンアドレススタック４０４、間接的な分岐の宛先を追跡する間接ターゲットアレイ４０６、ならびに、これらの結果として生じるアドレスをより精確に予測するために分岐の履歴を追跡する、分岐ターゲットバッファ４８０及びこの関連予測論理などの非常に特殊化したサブユニットを含んでもよい。
【００３５】
ホストシステムのＣＰＵコア４００は典型的には、命令フェッチユニット４１２、命令バイトバッファ４１４、及び命令復号ユニット４１６を含む、命令フェッチ及び復号ユニット４１０を含む。ＣＰＵコア４００は典型的には、いくつかの命令関連キャッシュ、及び命令変換ルックアサイドバッファ（ＩＴＬＢ）４２０も含む。これらは、仮想アドレスを、ページテーブルエントリ及びページディレクトリエントリなどの物理アドレス変換情報にキャッシュするＩＴＬＢキャッシュ階層４２４を含んでもよい。この情報は、命令の仮想アドレスを物理アドレスに変えるために使用され、それによって、命令フェッチユニット４１２はキャッシュ階層から命令をロードできる。例としてかつ限定することなく、プログラム命令は、コアにあるレベル１命令キャッシュ（Ｌ１  Ｉキャッシュ）４２２、及びＣＰＵコア４００の外部の他のキャッシュレベル４７６を含むキャッシュ階層に従ってキャッシュされてもよく、命令の物理アドレスを使用して、これらのキャッシュでは、最初に、プログラム命令が検索される。本開示の態様によると、ターゲットアプリケーション３２２は、ホストＣＰＵコア４００上の命令キャッシュ４２２と異なる数の命令キャッシュ、またはホストＣＰＵコア上の命令キャッシュ４２２と異なるサイズの命令キャッシュによるＣＰＵコアに書き込まれてもよい。命令は、発見されない場合、システムメモリ４０１からロードされる。アーキテクチャに応じて、後述されるように、復号された命令を含有するマイクロｏｐキャッシュ４２６もあってもよい。いくつかの実施態様では、ＪＩＴコンパイラ３２５は、ターゲットシステム命令キャッシュに対して書き込むまたは読み出す問題のあるターゲットコードブロックを検出し、かつこのような問題のあるブロックを変換するのではなく代替ホストシステムコードを利用してもよい。
【００３６】
ターゲットシステムコードは、ホストシステムとは異なる命令セットを使用するシステムに書き込まれ得る。ＪＩＴコンパイラ３２５は、ターゲットシステムコードを変換して、ホストＣＰＵコア４００と互換性のある命令セットを使用してもよい、または問題のあるターゲットコードブロックを代替ホストシステムコードと置き換えてもよい。
【００３７】
プログラム命令は、フェッチされると、典型的には、命令フェッチ及び復号ユニット４１０による処理を待機する命令バイトバッファ４１４に配置される。復号は非常に複雑なプロセスである可能性があり、サイクルごとに複数の命令を復号することは困難であり、命令の整列または命令のタイプに対して、１サイクルで復号されてもよい命令はいくつかを限定する制約がある場合がある。復号された命令は、アーキテクチャに応じて、（新しいＣＰＵ上に存在する場合）マイクロｏｐキャッシュ４２６に配置されてもよく、それによって、プログラム命令のその後の使用のための復号段階はバイパス可能である。
【００３８】
復号された命令は典型的には、ディスパッチ及びスケジューリング４３０のために他のユニットに渡される。これらのユニットは、ＣＰＵパイプラインのリマインダ全体を通して命令のステータスを追跡するためにリタイアキュー４３２を使用してもよい。また、限られた数の汎用レジスタ、及び多くのＣＰＵアーキテクチャに対して利用可能なＳＩＭＤレジスタにより、レジスタリネーミングが行われ、ここで、実行される命令のストリームに（アーキテクチャ上のものとしても既知の）論理レジスタがあるため、物理レジスタ４４０はこれらを表すために割り当てられる。物理レジスタ４４０は、単一命令多重データ（ＳＩＭＤ）レジスタバンク４４２、及び汎用（ＧＰ）レジスタバンク４４４を含んでもよく、これらは、特定のＣＰＵアーキテクチャ上で利用可能な論理レジスタの数よりもかなり大きなサイズであり得、その結果、性能が大幅に高められ得る。レジスタリネーミング４３４が行われた後、命令は典型的には、スケジューリングキュー４３６に配置され、このスケジューリングキュー４３６から、いくつかの命令は、実行ユニット４５０による実行のために（依存性に基づいて）サイクルごとに選択されてもよい。
【００３９】
実行ユニット４５０は典型的には、ＳＩＭＤレジスタバンク４４２に含有される１２８ビットまたはそれ以上のＳＩＭＤレジスタに含有される複数のデータフィールド上でいくつかの並列演算を行うＳＩＭＤパイプ４５２と、ＧＰレジスタバンク４４４に含有されるＧＰＲ上でいくつかの論理演算、算術演算、及び多種多様な演算を行う演算論理ユニット（ＡＬＵ）４５４と、メモリが記憶されるまたはロードされるべきアドレスを算出するアドレス生成ユニット（ＡＧＵ）４５６と、を含む。それぞれのタイプの実行ユニットの複数のインスタンスがあってもよく、インスタンスは、異なる能力を有してもよく、例えば、特有のＳＩＭＤパイプ４５２は、浮動小数点加算演算ではなく浮動小数点乗算演算を行うことが可能であってもよい。ターゲットシステムは、ホストＣＰＵ４００、例えば、ターゲットシステムのエミュレーション中にＪＩＴコンパイラによってホストＣＰＵコア４００のアーキテクチャに対して再マッピングされる機能を有するものになる、ベクトル処理ユニットまたは相乗的処理ユニットと互換性がないプロセッサユニットを含んでもよい。ＪＩＴコンパイラ３２５は、上で論じられるように、このようなターゲットシステムのプロセッサユニットを含んでいる問題のあるターゲットコードブロックを代替ホストシステムコードと置き換えてもよい。
【００４０】
ストア及びロードは、典型的には、ストアキュー４６２及びロードキュー４６４にバッファされ、それによって、多くのメモリ動作が並列で行われ得る。メモリ動作を支援するために、ＣＰＵコア４００は通常、いくつかのデータ関連キャッシュ及びデータ変換ルックアサイドバッファ（ＤＴＬＢ）４７０を含む。ＤＴＬＢキャッシュ階層４７２は、仮想アドレスを、ページテーブルエントリ及びページディレクトリエントリなどの物理アドレス変換にキャッシュし、この情報は、メモリ動作の仮想アドレスを物理アドレスに変えるために使用され、それによって、データはシステムメモリに記憶され得る、またはシステムメモリからロードされ得る。データは典型的には、コアにあるレベル１データキャッシュ（Ｌ１  Ｄキャッシュ）４７４、及びコア４００の外部の他のキャッシュレベル４７６にキャッシュされる。
【００４１】
上記は、本発明の好ましい実施形態の完全な説明であるが、さまざまな代替物、改変物、及び同等物を使用することが可能である。従って、本発明の範囲は、上記の説明を参照して判断されるべきではなく、代わりに、添付の特許請求項を、それらの同等物の全範囲と併せて参照して判断されるべきである。好ましいか否かに関わらず本明細書に説明されるいずれの特徴も、好ましいか否かに関わらず本明細書に説明される任意の他の特徴と組み合わせられ得る。下記の特許請求項において、不定冠詞「Ａ」または「Ａｎ」は、特に明示的に記されていない限り、冠詞の後に続く項目の１つまたは複数の数量を指す。「〜ための手段（ｍｅａｎｓ  ｆｏｒ）」という語句を使用する所定の特許請求項においてミーンズプラスファンクション制限が明示的に示されない限り、添付の特許請求項は、このような制限を含むように解釈されるものではない。
【図１Ａ】
2020523693.tif 000003
【図１Ｂ】
2020523693.tif 000004
【図２】
2020523693.tif 000005
【図３】
2020523693.tif 000006
【図４】
2020523693.tif 000007
【手続補正書】
【提出日】令和2年1月21日(2020.1.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストシステム上のターゲットシステムの１つまたは複数の構成要素が、前記ターゲットシステムのために書かれたターゲットシステムコードを、前記ホストシステムによって実行可能である対応するホストシステムコードに変換することによってエミュレートされる、前記ターゲットシステムのエミュレーションにおける、問題のあるターゲットコードブロックに対処するための方法であって、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、方法。
【請求項２】
前記問題のあるターゲットシステムコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項１に記載の方法。
【請求項３】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項２に記載の方法。
【請求項４】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項３に記載の方法。
【請求項５】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１に記載の方法。
【請求項６】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１に記載の方法。
【請求項７】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項２に記載の方法。
【請求項８】
前記ターゲットシステムコードを前記評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項７に記載の方法。
【請求項９】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項１に記載の方法。
【請求項１０】
前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項２に記載の方法。
【請求項１１】
前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項２に記載の方法。
【請求項１２】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、どのコードブロックに問題があるかを学習するように構成されるホストシステムを使用することを含む、請求項１に記載の方法。
【請求項１３】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項１に記載の方法。
【請求項１４】
実行される時、コンピュータシステムに、ターゲットシステムのために書かれたターゲットシステムコードを、ホストシステムによって実行可能である対応するホストシステムコードに変換する時に問題のあるターゲットコードに対処するための方法を実施させる実行可能命令を含有する非一時的なコンピュータ可読媒体であって、前記方法は、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、非一時的なコンピュータ可読媒体。
【請求項１５】
前記問題のあるターゲットコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項１６】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項１７】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項１６に記載の非一時的なコンピュータ可読媒体。
【請求項１８】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項１９】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２０】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項２１】
前記ターゲットシステムコードを前記評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項２０に記載の非一時的なコンピュータ可読媒体。
【請求項２２】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２３】
前記方法は、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項２４】
前記方法は、前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項１５に記載の非一時的なコンピュータ可読媒体。
【請求項２５】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、どのコードブロックに問題があるかを学習するように構成されるホストシステムを使用することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２６】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項１４に記載の非一時的なコンピュータ可読媒体。
【請求項２７】
コンピュータシステムであって、
１つまたは複数のシステムプロセッサと、
前記１つまたは複数のシステムプロセッサに結合されるメモリと、
前記メモリにおいて具現化されるプロセッサ実行可能命令セットであって、前記命令は、前記コンピュータシステムに、ターゲットシステムのために書かれたターゲットシステムコードを、ホストシステムによって実行可能である対応するホストシステムコードに変換する時に問題のあるターゲットコードに対処するための方法を実施させるように構成される、前記プロセッサ実行可能命令セットと、を含み、前記方法は、
ａ）問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することと、
ｂ）前記問題のあるターゲットコードブロックの変換をバイパスすることと、
ｃ）前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換することと、
ｄ）前記ホストシステムコードの対応する部分を、前記ホストシステムによって実行されるホストシステムコードを含有する実行ストリームに挿入することと、を含む、コンピュータシステム。
【請求項２８】
前記問題のあるターゲットコードブロックの変換をバイパスすることは、前記問題のあるターゲットコードブロックに対する代替ホストコードを選択すること、及び前記代替ホストコードを前記実行ストリームに挿入することを含む、請求項２７に記載のシステム。
【請求項２９】
前記代替ホストコードは、レジストリを、前記ターゲットシステムのレジストリレイアウトから前記ホストシステムのレジストリレイアウトに再マッピングする、請求項２８に記載のシステム。
【請求項３０】
前記ホストシステムは、前記ターゲットシステムより小さいレジスタを有する、請求項２９に記載のシステム。
【請求項３１】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロックによる冗長なまたは不要な動作に対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項２７に記載のシステム。
【請求項３２】
前記ターゲットシステムコードを評価することは、ターゲットシステムコードブロック内の非効率的に変換可能なベクトルユニットコードに対して１つまたは複数のターゲットシステムコードブロックを評価することを含む、請求項２７に記載のシステム。
【請求項３３】
前記代替ホストコードを挿入することは、前記ターゲットシステムコードが変換された後に行われる、請求項２８に記載のシステム。
【請求項３４】
前記ターゲットシステムコードを評価することは、問題のあるシステムコードブロックに参照ポインタを配置することを含み、前記参照ポインタ及び問題のあるターゲットコードブロックは、前記ターゲットシステムコードの問題のない部分を前記ホストシステムによるホストシステムコードの対応する部分に変換した後に代替ホストコードと置き換えられる、請求項３３に記載のシステム。
【請求項３５】
問題のあるターゲットコードブロックに対して前記ターゲットシステムコードを評価することは、最適に及ばない性能が検出されるまで前記ターゲットシステムコードを変換することを含む、請求項２７に記載のシステム。
【請求項３６】
前記方法は、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードをネットワーク上で前記ホストシステムに送ることをさらに含む、請求項２８に記載のシステム。
【請求項３７】
前記方法は、前記ホストシステムによって、前記実行ストリームにおける、前記ホストシステムコードの対応する部分及び前記代替ホストコードを実行することをさらに含む、請求項２８に記載のシステム。
【請求項３８】
前記ホストシステムは、どのコードブロックに問題があるかを学習するように構成される、請求項２７に記載のシステム。
【請求項３９】
問題のあるコードブロックに対して前記ターゲットコードを評価することは、問題のあるターゲットコードブロックとみなされる前記ターゲットコードにおけるメモリアクセスの特定のシーケンスを検出することを含む、請求項２７に記載のシステム。
【国際調査報告】
2020523693.tif 000008
2020523693.tif 000009