(57)【要約】      （修正有）【課題】先行する第１の命令と後続の第２の命令のオペランドが依存関係にあるとき、少なくとも第２の命令を、第１の命令と第２の命令と同一効果を有する組み合わされたオペランド生成動作を行う第３の命令と交換する方法を提供する。【解決手段】データ処理装置２は、第１のパイプライン段６と８、第２のパイプライン段１０および第３のパイプライン段１２を有する少なくとも１つの処理パイプライン４を有する。第１のパイプライン段６と８は、処理すべき命令ストリームに、第１の命令による第１のオペランド生成動作と第２の命令による第２のオペランド生成動作において、第２のオペランド生成動作が第１のオペランド生成動作の結果に依存する所定の命令シーケンスが含まれるかを検出する。この検出に応答して第１のパイプライン段６および８は、少なくとも第２の命令を第３の命令と交換されて変更された命令ストリームを生成する。【選択図】図１
2014238832.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサであって、
命令ストリームを処理するように構成された少なくとも１つの処理パイプラインであって、前記少なくとも１つの処理パイプラインは、第１のパイプライン段、第２のパイプライン段および第３のパイプライン段を含む、少なくとも１つの処理パイプライン
を含み、
前記第１のパイプライン段は、前記命令ストリームが所定の命令シーケンスを含むかを検出するように構成され、前記所定の命令シーケンスは、第１のオペランド生成動作を前記第３のパイプライン段において行うための第１の命令と、第２のオペランド生成動作を前記第２のパイプライン段において行うための第２の命令とを含み、前記第２のオペランド生成動作は、前記第１のオペランド生成動作の結果に依存し、
前記命令ストリームが前記所定の命令シーケンスを含むとの検出に応答して、前記第１のパイプライン段は、変更された命令ストリームを前記少なくとも１つの処理パイプラインによる処理対象として生成するように構成され、前記第２のオペランド生成動作が前記第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドを生成する組み合わされたオペランド生成動作を行うための第３の命令と、少なくとも前記第２の命令が、前記変更された命令ストリームにおいて交換されている、
プロセッサ。
【請求項２】
前記第１のパイプライン段における命令は、Ｘ処理サイクルが前記第２のパイプライン段に到達することおよびＹ処理サイクルが前記第３のパイプライン段に到達することを要求し、ＹおよびＸは整数であり、Ｙ≧Ｘである、請求項１に記載のプロセッサ。
【請求項３】
前記組み合わされたオペランド生成動作は、前記第１のオペランド生成動作の結果から独立する、請求項１および２のうちいずれかに記載のプロセッサ。
【請求項４】
前記オペランドはアドレスを含む、請求項１〜３のうちいずれか１項に記載のプロセッサ。
【請求項５】
前記第１のオペランド生成動作により、前記オペランドの第１の部分が生成され、前記第２のオペランド生成動作により、前記第１の部分および第２の部分を含むオペランドが生成され、前記組み合わされたオペランド生成動作により、前記第１の部分および前記第２の部分を含む前記オペランドが生成される、請求項１〜４のうちいずれか１項に記載のプロセッサ。
【請求項６】
前記オペランドは、前記命令ストリームの単一の命令の命令符号化において符号化することが可能なビット数より多くのビットを含む、請求項５に記載のプロセッサ。
【請求項７】
前記第１のオペランド生成動作は、保存位置中に保存されたベース値の少なくとも一部へオフセット値を付加することにより、前記オペランドの前記第１の部分を生成することを含む、請求項５および６のうちいずれかに記載のプロセッサ。
【請求項８】
前記オペランドはアドレスを含み、前記ベース値は、処理すべき命令のアドレスを示すプログラムカウンタを含む、請求項７に記載のプロセッサ。
【請求項９】
前記第１のパイプライン段は、前記所定の命令シーケンスとして命令シーケンスを検出するように構成され、前記命令シーケンス中において、前記第１の命令および前記第２の命令は、前記プログラムカウンタのうち少なくとも一部について同一の値を有する、請求項８に記載のプロセッサ。
【請求項１０】
前記ベース値のうち少なくとも一部は、前記ベース値の最上位部分を含む、請求項８および９のうちいずれかに記載のプロセッサ。
【請求項１１】
前記第１のオペランド生成動作は、前記ベース値の最下位部分をマスクすることを含む、請求項１０に記載のプロセッサ。
【請求項１２】
前記第２のオペランド生成動作は、前記第１のオペランド生成動作の結果の最下位部分へイミディエート値を加算することを含む、請求項１０および１１のうちいずれかに記載のプロセッサ。
【請求項１３】
前記第２の命令により、前記第２のオペランド生成動作によって生成されたオペランドを用いて処理動作が行われ、前記第３の命令により、前記組み合わされたオペランド生成動作によって生成されたオペランドを用いて前記処理動作が行われる、
請求項１〜１２のうちいずれかに記載のプロセッサ。
【請求項１４】
前記処理動作は、
ロード動作、
保存動作、
演算動作、および
論理動作
のうち少なくとも１つを含む、
請求項１３に記載のプロセッサ。
【請求項１５】
前記変更された命令ストリームは、前記第１の命令および前記第３の命令を含む、
請求項１〜１４のうちいずれか１項に記載のプロセッサ。
【請求項１６】
前記少なくとも１つの処理パイプラインは、前記第３の命令の処理を前記第１の命令の処理から独立してスケジュールするように構成される、請求項１５に記載のプロセッサ。
【請求項１７】
前記変更された命令ストリームは、前記第３の命令を含み、前記第１の命令を含まない、請求項１〜１４のうちいずれか１項に記載のプロセッサ。
【請求項１８】
前記第１のパイプライン段は、前記命令ストリームが第４の命令を含むかを決定するように構成され、前記第４の命令は、前記第１の命令の第１のオペランド生成動作の結果に依存し、
前記命令ストリームが前記第４の命令を含む場合、前記第１の処理段は、前記第２の命令を前記第３の命令と交換して、前記第１の命令、前記第３の命令および前記第４の命令を含む前記変更された命令ストリームを生成するように構成され、
前記命令ストリームが前記第４の命令を含まない場合、前記第１の処理段は、前記第１の命令および前記第２の命令を前記第３の命令と交換して、前記変更された命令ストリームを生成するように構成され、前記変更された命令ストリームは、前記第３の命令を含み、前記第１の命令を含まない、
請求項１〜１７のうちいずれか１項に記載のプロセッサ。
【請求項１９】
前記第１のパイプライン段は、前記命令ストリームの後続命令が前記第１の命令の第１のオペランド生成動作の結果に依存し得るかを決定するように構成され、
後続命令が前記第１のオペランド生成動作の結果に依存し得る場合、前記第１の処理段は、前記第２の命令を前記第３の命令と交換して、前記変更された命令ストリームを生成するように構成され、前記変更された命令ストリームは、前記第１の命令および前記第３の命令を含み、
前記第１のオペランド生成動作の結果に依存する後続命令が無い場合、前記第１の処理段は、前記第１の命令および前記第２の命令を前記第３の命令と交換して、前記変更された命令ストリームを生成するように構成され、前記変更された命令ストリームは、前記第３の命令を含み、前記第１の命令を含まない、
請求項１〜１７のうちいずれか１項に記載のプロセッサ。
【請求項２０】
前記第１のパイプライン段は、最大Ｎ個の介在命令を前記第１の命令と前記第２の命令との間に含む命令シーケンスを前記所定の命令シーケンスとして検出するように構成され、Ｎは整数であり、Ｎ≧０である、請求項１〜１９のうちいずれか１項に記載のプロセッサ。
【請求項２１】
Ｎ＞０である、請求項２０に記載のプロセッサ。
【請求項２２】
前記第１のパイプライン段は、前記少なくとも１つの処理パイプラインによって処理されるべき命令を復号するように構成された復号段を含み、前記変更された命令ストリームは、復号された命令のストリームを含む、請求項１〜２１のうちいずれか１項に記載のプロセッサ。
【請求項２３】
前記第１のパイプライン段は、前記少なくとも１つの処理パイプラインによる処理対象として命令を発行するように構成された発行段を含む、請求項１〜２１のうちいずれか１項に記載のプロセッサ。
【請求項２４】
前記第２のパイプライン段および前記第３のパイプライン段は、前記同一処理パイプラインのそれぞれの段である、請求項１〜２３のうちいずれか１項に記載のプロセッサ。
【請求項２５】
前記第２のパイプライン段および前記第３のパイプライン段は、同一のパイプライン段である、請求項１〜２４のうちいずれか１項に記載のプロセッサ。
【請求項２６】
前記第２のパイプライン段および前記第３のパイプライン段は、異なる処理パイプラインの段である、請求項１〜２３のうちいずれか１項に記載のプロセッサ。
【請求項２７】
前記プロセッサはインオーダープロセッサである、請求項１〜２６のうちいずれか１項に記載のプロセッサ。
【請求項２８】
前記命令ストリームは、所定のプログラム順序を有し、
前記少なくとも１つの処理パイプラインは、前記所定のプログラムの順序と同じ順序で処理されるべき命令を発行するように構成された発行段を含む、
請求項２７に記載のプロセッサ。
【請求項２９】
プロセッサであって、
命令ストリームを処理する少なくとも１つの処理パイプライン手段であって、前記少なくとも１つの処理パイプライン手段は、命令を処理するための第１のパイプライン段手段、第２のパイプライン段手段および第３のパイプライン段手段を含む、少なくとも１つの処理パイプライン手段、
を含み、
前記第１のパイプライン段手段は、第１のオペランド生成動作を前記第３のパイプライン段手段において行うための第１の命令および第２のオペランド生成動作を前記第２のパイプライン段手段において行うための第２の命令を含む所定の命令シーケンスが前記命令ストリームに含まれるかを検出するように構成され、前記第２のオペランド生成動作は、前記第１のオペランド生成動作の結果に依存し、
前記命令ストリームが前記所定の命令シーケンスを含むとの検出に応答して、前記第１のパイプライン段手段は、変更された命令ストリームを前記少なくとも１つの処理パイプライン手段による処理対象として生成するように構成され、前記第２のオペランド生成動作が前記第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドを生成する組み合わされたオペランド生成動作を行うための第３の命令と、少なくとも前記第２の命令が、前記変更された命令ストリームにおいて交換されている、
プロセッサ。
【請求項３０】
命令ストリームを処理するように構成された少なくとも１つの処理パイプラインを含むプロセッサのためのデータ処理方法であって、前記少なくとも１つの処理パイプラインは、第１のパイプライン段、第２のパイプライン段および第３のパイプライン段を含み、
第１のオペランド生成動作を前記第３のパイプライン段において行うための第１の命令および第２のオペランド生成動作を前記第２のパイプライン段において行うための第２の命令を含む所定の命令シーケンスが前記命令ストリームに含まれるかを前記第１のパイプライン段において検出することであって、前記第２のオペランド生成動作は、前記第１のオペランド生成動作の結果に依存することと、
前記命令ストリームが前記所定の命令シーケンスを含むとの検出に応答して、前記第１のパイプライン段が変更された命令ストリームを前記少なくとも１つの処理パイプラインによる処理対象として生成することであって、前記第２のオペランド生成動作が前記第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドを生成する組み合わされたオペランド生成動作を行うための第３の命令と、少なくとも前記第２の命令が、前記変更された命令ストリームにおいて交換されていることと
を含む方法。
【請求項３１】
少なくとも１つのコンピュータプログラムを保存する、コンピュータにより読出可能な記憶媒体であって、前記少なくとも１つのコンピュータプログラムが前記コンピュータ上において実行された場合、請求項１〜２９のいずれか１項に記載のプロセッサに対応する仮想マシン環境が得られるように前記コンピュータが制御される、コンピュータにより読出可能な記憶媒体。
【請求項３２】
少なくとも１つのコンピュータプログラムを保存する、コンピュータにより読出可能な記憶媒体であって、前記少なくとも１つのコンピュータプログラムが前記コンピュータ上において実行された場合、請求項３０に記載の方法を行うための仮想マシン環境が得られるように前記コンピュータが制御される、コンピュータにより読出可能な記憶媒体。
【請求項３３】
添付図面を参照して本明細書中に実質的に述べたようなプロセッサ。
【請求項３４】
添付図面を参照して本明細書中に実質的に述べたようなデータ処理方法。
【請求項３５】
添付図面を参照して本明細書中に実質的に述べたような、コンピュータにより読出可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理分野に関する。より詳細には、本発明は、プロセッサの少なくとも１つの処理パイプラインにおけるオペランド生成に関する。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
プロセッサは、処理パイプラインを持ち得る。処理パイプラインは、命令処理のためのいくつかのパイプライン段を有する。特定の動作を行うための命令に起因して、特定のパイプライン段が当該動作を行うことが要求され得る。オペランドを用いているパイプライン段に間に合うように必要なオペランドが利用不可能である場合、当該命令を遅延させて後続処理サイクルにおいて発行することが必要になり得、その結果処理性能が低下する。本技術は、この問題に対処し、処理パイプラインを通じた命令スループットの向上を目指す。
【課題を解決するための手段】
【０００３】
一態様から鑑みて、本発明が提供するプロセッサは、以下を含む：
命令ストリームを処理するように構成された少なくとも１つの処理パイプラインであって、少なくとも１つの処理パイプラインは、第１のパイプライン段、第２のパイプライン段および第３のパイプライン段を含み、
第１のパイプライン段は、命令ストリームが所定の命令シーケンスを含むかを検出するように構成され、所定の命令シーケンスは、第１のオペランド生成動作を第３のパイプライン段において行うための第１の命令と、第２のオペランド生成動作を第２のパイプライン段において行うための第２の命令とを含み、第２のオペランド生成動作は、第１のオペランド生成動作の結果に依存し、
命令ストリームが所定の命令シーケンスを含むとの検出に応答して、第１のパイプライン段は、少なくとも１つの処理パイプラインによる処理対象として変更された命令ストリームを生成するように構成され、変更された命令ストリーム中において、少なくとも第２の命令は、第２のオペランド生成動作が第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドを生成するための組み合わされたオペランド生成動作を行うための第３の命令と交換される。
【０００４】
処理パイプラインは、命令の所定のシーケンスを処理し得る。命令の所定のシーケンスにおいて、第１の命令は第１のオペランド生成動作を行い、第２の命令は、第１のオペランド生成動作の結果に依存する第２のオペランド生成動作を行う。この依存性に起因して、これらの命令を処理することが可能なタイミングが制限される。なぜならば、第２の命令が第１の命令の結果を待機した後、第２のオペランド生成動作に進む順序になっているからである。第２の命令を１サイクル以上にわたって遅延させる必要があり得、その結果、これらの命令の処理全体が遅延する。
【０００５】
この問題に対処するため、パイプラインの第１のパイプライン段は、処理すべき命令ストリームが所定の命令シーケンスを含むかを検出する。所定の命令シーケンスが検出された場合、変更された命令ストリームがパイプラインによる処理対象として生成され、少なくとも第２の命令が、組み合わされたオペランド生成動作を行うための第３の命令とが交換される。この組み合わされたオペランド生成動作は、第２のオペランド生成動作が第１のオペランド生成動作の後に行われた場合に発生するのと同じ効果を有する。２つのオペランド生成動作の組み合わせを１つの命令を用いて行うことが可能となるため、依存性の問題が無くなり、パイプラインが第３の命令のスケジューリングを第１の命令から独立して自由に行うことが可能になる。その結果、多くの場合において、第１の命令および第２の命令を元々の形態でパイプラインによって処理する場合よりも少なくとも１サイクル分だけ早く第３の命令を処理することが可能になる。
【０００６】
第１のパイプライン段、第２のパイプライン段および第３のパイプライン段において第１のパイプライン段における命令に起因して第２のパイプライン段に到達するために特定の数の処理サイクルが必要でありかつ第３のパイプライン段に到達するために少なくとも上記特定の数のサイクルが必要である場合において、この技術は特に有用である。第１のオペランド生成動作を行うための第３のパイプライン段が同一段にあるかまたは第２のオペランド生成動作を行うための第２のパイプライン段よりもさらに下方のパイプラインにあるため、第１の命令および第２の命令を連続的処理サイクルにおいてスケジューリングすることが困難になる。なぜならば、第３のパイプライン段における第１のオペランド生成動作の結果を第２のオペランド生成動作に間に合うように第２のパイプライン段へ転送して戻すことができないからである。そのため、第１の命令および第２の命令が元々の形態で処理した場合、パイプライン中にバブルが発生する可能性がある（パイプライン段によって処理される命令が無い場合の処理サイクル）ため、少なくとも第２の命令と組み合わされたオペランド生成動作を行うための変更された第３の命令とを交換することにより依存性を破壊することは、バブルの回避および処理速度アップのために有用である。
【０００７】
組み合わされたオペランド生成動作によって生成されるオペランドまたは第１のオペランド生成動作および第２のオペランド生成動作によって生成されるオペランドは、パイプラインによって処理される命令によって用いられる任意の値でよい。例えば、オペランドはアドレスであり得る。
【０００８】
一例において、第１のオペランド生成動作は、オペランドの第１の部分を生成するためのものであり、第２のオペランド生成動作は、第１の部分および第２の部分双方を含むフルオペランドを生成するためのものである。組み合わされたオペランド生成動作もまた、第１の部分および第２の部分双方を含むフルオペランドを生成するためのものである。このようなオペランドの２段生成は、生成すべきオペランドが単一の命令の符号化においてオペランドを表すために利用することが可能なビット数よりも大きい場合において、特に有用である。第３の命令は、１つの命令中においてより大きなオペランドを生成することができる。なぜならば、第３の命令は、プログラマまたはコンパイラによって符号化されたメモリ中の命令ではなく、第１のパイプライン段によって生成された内部生成された命令であるからである。よって、第３の命令は、用いられている命令セットに対する通常の符号化規則を遵守する必要が無い。第３の命令は、組み合わされたオペランド生成動作を実行するために少なくとも１つのパイプラインを制御するために必要な任意の情報を用いて、変更された命令ストリーム中に表現され得る。
【０００９】
第１のオペランド生成動作は、保存位置（例えば、レジスタ）中に保存されたベース値のうち少なくとも一部にオフセット値を付加することにより、オペランドの第１の部分を生成することを含み得る。例えば、ベース値はプログラムカウンタであり得、処理すべき命令のアドレス（例えば、現在処理されている命令または次に処理すべき命令）のアドレスを示す。この場合、第１のオペランド生成動作により、プログラムカウンタに相対してオフセットされたアドレスが生成される。
【００１０】
第１のパイプライン段は、第２の命令を第３の命令と交換する必要のある所定の命令シーケンスを表すものとして第１の命令および第２の命令の発生全てを検出する必要は無い。場合によっては、上記したような第１の命令および第２の命令が存在する場合であっても、第２の命令を第３の命令と交換しない方が望ましい場合がある。例えば、プログラムカウンタの一部に基づいてオペランドが生成される場合、第１のパイプライン段は、第１の命令および第２の命令がオペランド生成に用いられるプログラムカウンタ部分について同じ値を有する場合、所定の命令シーケンスを検出し得る。そうではない場合、（第２の命令と同じアドレスを持つことが多い）第３の命令は、第１の命令および第２の命令に対して異なる結果を付与し得る。なぜならば、第３の命令に対するプログラムカウンタ部分は、第１の命令のものと異なり得るからである。第１の命令および第２の命令がプログラムカウンタの関連部分について同一値を共有する場合にのみ第２の命令を第３の命令と交換することにより、正確な結果を保証することができる。
【００１１】
第１の動作生成動作は、オフセット値をベース値の最上位部分へ付加することができる。このオフセット値をこの付加実行の前にシフトさせる必要があり得、これにより、このオフセット値と、ベース値の最上位部分とがアライメントされる。プログラムカウンタの場合、最上位部分は、アドレスのページ部分を示し得、処理されている命令を含むメモリのページを示す。プログラムカウンタのページ部分へオフセットを付加することにより、第１のオペランド生成動作において、アドレス空間の異なるページ（例えば、アクセスすべきリテラル値を含むページ）のアドレスを決定することができる。第１のオペランド生成動作は、ベース値の最下位部分をマスクすることができ、これにより、メモリのページ内のページオフセットがこの動作によって決定されなくなる。その後、第２のオペランド生成動作において、第１のオペランド生成動作の結果の最下位部分へイミディエート値を付加することができ、これにより、アクセスすべきデータ値のフルメモリアドレスが得られる。いくつかのアーキテクチャにおいて、メモリアドレスは、オペランドの符号化に利用することが可能な命令中の符号化空間よりも大きなビット数を持ち得る（例えば、オペランドの符号化に利用することが可能な２１ビットのみを有する命令により、３２ビットアドレスを生成することができる）。この場合、シーケンス中の第１の命令および第２の命令を用いた二部アドレス生成が有用であり得、また、性能向上のために、少なくとも第２の命令と、フルメモリアドレスを単一の命令を用いて生成する第３の命令とを交換することができる。
【００１２】
所定のシーケンスの第２の命令は、第２のオペランド生成動作によって生成されたオペランドを用いて、さらなる処理動作を行い得る。同様に、第２の命令と交換された第３の命令は、同じ処理動作を行うことができる。この処理動作は、以下のうち少なくとも１つを含み得る：生成されたオペランドによって特定されるアドレスを有するデータ値をメモリからロードするロード動作、生成されたオペランドによって特定されるアドレスを有するデータ値をメモリへ保存する保存動作、生成されたオペランドを用いる演算動作（加算、減算または乗算動作）、および生成されたオペランドを用いる論理動作（例えば、ＡＮＤ、ＯＲ、ＮＡＮＤまたはＸＯＲ動作）。
【００１３】
あるいは、第２の命令およびその交代用の第３の命令は、生成されたオペランドを単純に保存位置（例えば、レジスタ）へ保存し得る。この保存位置（例えば、レジスタ）において、当該オペランドは別の命令によってアクセスされ得る。そのため、第２の命令および第３の命令が他の動作およびオペランド生成を行うことが必要である。変更されたシーケンス中の第２の命令の代わりに用いられる第３の命令は、パイプラインの特定のインプレメンテーションにおいて、第２のパイプライン段または第３のパイプライン段中において所望に処理され得る。
【００１４】
第３の命令は、第１の命令および第２の命令の第１のオペランド生成動作および第２のオペランド生成動作の組み合わせと同じ効果を有するため、第１の命令および第２の命令を変更されたストリームから省略することができ、これにより、所定の命令シーケンスの第１の命令および第２の命令双方の代わりに第３の命令が用いられる。
【００１５】
しかし、第２の命令は、第１の命令の結果を用いる唯一の命令ではない場合がある。例えば、同一の部分的オペランド生成をそれぞれ用いるいくつかの後続命令によって同じ第１の命令が共有される場合がある。例えば、第１の命令は、上記したようにメモリ中の特定のページのアドレスを生成した後、第２の命令に類似するいくつかの命令が同一ページ内の異なるアドレスへアクセスすることができる。この場合、第３の命令の実行には不要であるものの、第１の命令を完了させる必要があり得る。そのため、変更された命令ストリームは第１の命令および第３の命令双方を含み得、これにより、第２の命令のみが変更されたストリーム中の第３の命令と交換される。パイプラインは、第３の命令の処理を第１の命令の処理から独立してスケジューリングすることができる。第１の命令および第３の命令は、同一サイクルにおいて発行してもよいし、あるいは連続処理サイクルにおいて発行してもよく、第１の命令の結果が第３の命令に対して準備ができたかに関係無い。
【００１６】
変更された命令ストリームに第１の命令が未だに含まれる別の理由として、場合によっては、第２の命令に遭遇した時点において第１の命令が既に実行対象として発行されている場合がある。第２の命令の代わりの第３の命令に結果が不要ではあるが、第１の命令の実行を完了させると効率的である。
【００１７】
第１の命令を変更されたストリーム内に保持すべきかを決定するために、第１のパイプライン段は、命令ストリームが第４の命令を含むかを決定し得る。第４の命令は、第１の命令の第１のオペランド生成動作の結果に依存する。第１の命令の結果を用いた第４の命令が存在する場合、第１の命令を保持することができ、そうではない場合、第１の命令を省略することができる。
【００１８】
しかし、第１のパイプライン段は、命令ストリーム全体へのアクセスを持っていない場合または第１の命令の結果を利用する後続命令が存在するかを確信的に決定することができない場合がある。第１の命令を（この結果を利用する後続命令の在否に関係無く）変更された命令ストリーム中に常に含めることにすれば、ずっと単純である。このようにした場合、ハードウェアの観点において高効率が得られる。
【００１９】
あるいは、第１のパイプライン段は、第１の命令の結果を利用する後続命令があるかを常に決定することはできないものの、第１のオペランド生成動作の結果を利用する後続命令が存在し得ないことが保証される特定の状況があり得る。例えば、命令ストリーム中の第２の命令に追随する命令は、第１のオペランド生成動作の結果が第１の命令によって書き込まれているレジスタを上書きし得る。この場合、第１のオペランド生成動作の結果に依存する命令はそれ以上存在することが無いことが知られており、この場合、第１の命令の代わりに第３の命令を用いることができる。よって、第１のパイプライン段は、後続命令が第１のオペランド生成動作の結果に依存し得るかを決定することができ、後続の依存型命令が無いことが分かった場合、第１の命令および第２の命令の代わりに第３の命令を用いることができる。後続命令が依存型である場合、第２の命令のみが交換される。
【００２０】
第１の命令および第２の命令は、元々の命令ストリーム中において相互に隣接する必要は無い。第１のパイプライン段は、所定の命令シーケンスとして、第１の命令と第２の命令との間に１つ以上の介在命令を含む命令シーケンスを検出し得る。第１のパイプライン段がこのようなシーケンスを検出する際のハードウェアの複雑性を低減するために、このようなシーケンスの検出のために、第１の命令と第２の命令との間に発生し得る最大Ｎ個の介在命令を規定すると有用であり得る。実際は、いくつかの介在命令の発生後、第１の命令と第２の命令との間の依存性の問題は低減する。なぜならば、第２の命令が第２のパイプライン段に到達する前に第１の命令が完了する可能性が高くなるからである。第１の命令および第２の命令の存在について確認されるシーケンス中の連続する命令の数を低減することにより、この検出のハードウェアオーバーヘッドを低減することができる。
【００２１】
いくつかのパイプライン段は、最大数Ｎをゼロに設定することが可能であるため、相互に隣接する第１の命令および第２の命令を有する所定の命令シーケンスのみが検出される。他のシステムは、数が非ゼロである介在命令を規定し得る。例えば、Ｎ＝２である場合、第１のパイプライン段は、各組の４つの連続する命令を確認して、上記したような１対の第１の命令および第２の命令を含むかを検出する。
【００２２】
所定の命令シーケンスの検出を行う第１のパイプライン段は、パイプラインの任意の段であり得る。例えば、第１のパイプライン段は、命令を復号する復号段であり得、変更された命令ストリームは、復号された命令のストリームであり得る。よって、第２の命令が復号された場合、当該第２の命令が最近の第１の命令に追随するかが確認され、当該第２の命令が最近の第１の命令に追随する場合、当該第２の命令は、復号された第３の命令と交換される。あるいは、第１のパイプライン段は発行段であり得、パイプラインによる処理対象として命令が発行されたタイミングを制御する。第１のパイプライン段は、第２のパイプライン段および第３のパイプライン段のうちの１つとしての同一段であり得る。
【００２３】
第２のオペランド生成動作および第１のオペランド生成動作をそれぞれ行う第２のパイプライン段および第３のパイプライン段は、同一処理パイプライン内または異なるパイプライン内に配置され得る。また、第２のパイプライン段および第３のパイプライン段は、実際は特定のパイプライン内の同一パイプライン段であり得る。
【００２４】
本技術は、アウトオブオーダープロセッサ内において用いることが可能であるが、インオーダープロセッサにおいて特に有用である。アウトオブオーダープロセッサの場合、命令を実行対象として発行する順序を変更することにより、データ依存性ハザードが発生した場合でも進展を確保することができる。しかし、インオーダープロセッサの場合、命令の発行は元々のプログラム順序で行われるため、これは不可能である。インオーダー処理パイプラインにおいて、第１の命令および第２の命令が元々の形態でパイプラインによって処理され、連続するサイクルで発行された場合、第１の命令の結果は、第２のパイプライン段において第２の命令によって時間的に利用不可能であるため、第２の命令を１処理サイクル分だけ遅延させる必要が出てくる。プロセッサは順序通りに処理するため、別の命令を合間に処理することは不可能である。そのため、パイプライン中にバブルが発生し、処理性能が低下する。これとは対照的に、本技術を用いれば、第２の命令を第３の命令と交換することにより、データ依存性が回避されるため、第３の命令を発行するサイクルに制約は無くなる。第１の命令が変更されたストリーム中に残留している場合でも、第３の命令は第１の命令に依存しないため、これらの命令を同一処理サイクルにおいて発行または連続するサイクルにおいて発行することができる。
【００２５】
別の態様から見ると、本発明は、以下を含むプロセッサを提供する：
命令ストリームを処理する少なくとも１つの処理パイプライン手段であって、少なくとも１つの処理パイプライン手段は、命令を処理する第１のパイプライン段手段、第２のパイプライン段手段および第３のパイプライン段手段を含む。
【００２６】
第１のパイプライン段手段は、命令ストリームが第１のオペランド生成動作を第３のパイプライン段手段において行うための第１の命令および第２のオペランド生成動作を第２のパイプライン段手段において行うための第２の命令を含む所定の命令シーケンスを含むかを検出するように構成され、第２のオペランド生成動作は、第１のオペランド生成動作の結果に依存する。
【００２７】
命令ストリームが所定の命令シーケンスを含むとの検出に応答して、第１のパイプライン段手段は、少なくとも１つの処理パイプライン手段による処理対象として変更された命令ストリームを生成するように構成され、少なくとも第２の命令と、組み合わされたオペランド生成動作を行うための第３の命令とが交換されて、第２のオペランド生成動作が第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドが生成される。
【００２８】
さらなる態様から見ると、本発明は、プロセッサのためのデータ処理方法を提供する。このプロセッサは、命令ストリームを処理するように構成された少なくとも１つの処理パイプラインを含む。少なくとも１つの処理パイプラインは、第１のパイプライン段、第２のパイプライン段および第３のパイプライン段を含む、方法は、以下を含む：
第１のオペランド生成動作を第３のパイプライン段において行うための第１の命令および第２のオペランド生成動作を第２のパイプライン段において行うための第２の命令を含む所定の命令シーケンスを命令ストリームが含むかを第１のパイプライン段において検出することであって、第２のオペランド生成動作は、第１のオペランド生成動作の結果に依存する、ことと、
命令ストリームが所定の命令シーケンスを含むとの検出に応答して、第１のパイプライン段が少なくとも１つの処理パイプラインによる処理対象として変更された命令ストリームを生成することであって、少なくとも第２の命令と、組み合わされたオペランド生成動作を行うための第３の命令とが交換されて、第２のオペランド生成動作が第１のオペランド生成動作の後に行われた場合に生成されるオペランドに相当するオペランドが生成される。
【００２９】
別の態様から見ると、本発明は、少なくとも１つのコンピュータプログラムを記憶する、コンピュータにより読出可能な記憶媒体を提供する。少なくとも１つのコンピュータプログラムは、コンピュータ上において実行された場合、コンピュータを制御して、上記したプロセッサに対応する仮想マシン環境を提供する。
【００３０】
別の態様から見ると、本発明は、少なくとも１つのコンピュータプログラムを記憶する、コンピュータにより読出可能な記憶媒体を提供する。少なくとも１つのコンピュータプログラムは、コンピュータ上において実行された場合、コンピュータを制御して、上記した方法を行うための仮想マシン環境を提供させる。
【００３１】
これらのコンピュータにより読出可能な保存媒体は、非一時的であり得る。仮想マシンは、少なくとも１つのコンピュータプログラムによって実装され得る。これらの少なくとも１つのコンピュータプログラムは、コンピュータ上において実行されると、コンピュータを制御して上記したような１つ以上のパイプラインを有するプロセッサであるかのように機能させ、これにより、コンピュータがプロセッサと同じハードウェアおよび／またはアーキテクチャを持っていない場合でも、コンピュータ上において実行される命令が（プロセッサ上において実行されているかのように）実行される。仮想マシン環境により、非ネーティブコードの設計対象となる非ネーティブシステムに対応する仮想マシンを実行することにより、ネーティブシステムが非ネーティブコードを実行することが可能になる。よって、仮想マシン環境において、仮想マシンプログラムは、上記したように少なくとも第２の命令を第３の命令と交換することができる。
【００３２】
本発明の上記および他の目的、特徴および利点は、以下の例示的実施形態の詳細な説明から明らかとなる。これらの例示的な実施形態は、添付図面と共に読まれるべきである。
【図面の簡単な説明】
【００３３】
【図１】処理パイプラインの一例を示す。
【図２Ａ】元々の命令ストリームおよび変更された命令ストリームを示す。
【図２Ｂ】元々の命令ストリームおよび変更された命令ストリームを示す。
【図３】第１のアドレス生成動作を示す。
【図４】図４は、第２のアドレス生成動作を示す。
【図５】図示する組み合わされたアドレス生成動作は、第１のアドレス生成動作および第２のアドレス生成動作の組み合わせと同じ結果を有する。
【図６】タイミング図であり、図２Ａの命令を実行することが可能なタイミングを示す。
【図７】タイミング図であり、命令の二重発行を可能にするシステムにおいて図２Ｂの命令を実行することが可能なタイミングを示す。
【図８】タイミング図であり、１サイクル毎に単一の命令のみを発行するシステムにおいて図２Ｂの命令を実行することが可能なタイミングを示す。
【図９】パイプライン中の命令を処理する方法を示す。
【図１０】２つの処理パイプラインが存在する例を示す。
【図１１】本技術の仮想マシンインプレメンテーションを示す。
【発明を実施するための形態】
【００３４】
図１は、処理パイプライン４を有するデータ処理装置２の一部の例を示す。パイプライン４は、メモリからフェッチされた命令を復号化する復号段６と、後続段によって処理される命令を発行する発行段８と、命令実行に応答して多様な動作を行う第１の実行段１０、第２の実行段１２および第３の実行段１４とを有する。この例において、復号段６における命令においては、発行段８に到達するためには１処理サイクルが必要であり、第１の実行段１０、第２の実行段１２および第３の実行段１４それぞれに到達するには２処理サイクル、３処理サイクルおよび４処理サイクル必要である。プロセッサ２およびパイプライン４は、図１に示していない他の段および要素を含み得ることが理解される。
【００３５】
この例において、第１の実行段１０は、オペランド値をレジスタから読み出すレジスタ読出回路１６と、アドレスを生成するアドレス生成ユニット（ＡＧＵ）１８とを有する。第２の実行段１２は、演算動作（例えば、加算動作、減算動作、乗算動作および除算動作）ならびに論理動作（例えば、ビット単位のＡＮＤ、ＯＲ、またはＸＯＲ動作）を行う演算論理ユニット（ＡＬＵ）２０を含む。第２の実行段１２はまた、データキャッシュアクセス回路２２を含む。データキャッシュアクセス回路２２は、キャッシュへアクセスし、ロード／保存動作を実行する。ＡＧＵ１８は特殊なアドレス生成ユニットであり、いくつかの共通アドレス生成動作をパイプライン４の比較的早期の段において行うように設けられて、後続段によるアドレス利用を可能にする。例えば、第２の実行段１２中のデータキャッシュアクセス回路２２は、第１の実行段１０中のＡＧＵ１８によって生成されたアドレスを有するデータ値をロードまたは保存することができる。ＡＧＵ１８をパイプラインの早期段に設けることにより、メモリアクセス待ち時間の低減が支援される。他の回路も、第１の実行段１０および第２の実行段１２内ならびに第３の実行段１４および図１中に図示しない後続パイプライン段内に配置することができる。
【００３６】
図２Ａは、第１の命令３０および第２の命令３２を含む命令のシーケンスの例を示す。第１の命令３０はＡＤＲＰ命令であり、アドレスの第１の部分を生成するために用いられる。図３に示す第１のアドレス生成動作は、第２の実行段１２内のＡＬＵ２０によってＡＤＲＰ命令３０に応答して行われる。ＡＤＲＰ命令３０は、宛先レジスタｘ０およびイミディエート値＃ｉｍｍｈｉを指定する。ＡＤＲＰ命令３０はまた、データ処理装置２のプログラムカウンタレジスタ中に保存されたプログラムカウンタｐｃを用いる。プログラムカウンタｐｃは、処理すべき命令のアドレス（例えば、現在の命令または次の命令）を示す。プログラムカウンタは、ＡＤＲＰ命令３０の符号化において明示的に特定されない。図３に示すように、ＡＤＲＰ命令３０に応答して、ＡＬＵ２０は、ＡＮＤ動作を用いてプログラムカウンタ値４０およびマスク４２を組み合わせて、マスクされたプログラムカウンタ値４４を生成する。マスクされたプログラムカウンタ値４４は、プログラムカウンタレジスタの対応する部分と同じである上側部分４６と、ビット値が０である下側部分４８とを有する。プログラムカウンタの上側部分４６が処理すべき命令のアドレスを含むメモリのページのページアドレスに対応しかつ下側部分４８が当該ページ内のオフセットに対応するように、マスク４２が事前決定される。その後、ＡＬＵ２０は、シフト動作を行うことにより、マスクされたプログラムカウンタ値４４を、プログラムカウンタの上側部分４６とアライメントされたイミディエート値＃ｉｍｍｈｉへ加算する。マスクされたプログラムカウンタ値４４と、シフトされたイミディエート値５０との合計は、レジスタｘ０へと保存され、メモリアドレス空間の別のページのページアドレス５２を示す。所望であれば、別の実施形態において、第１のオペランド生成動作をＡＬＵ２０の代わりにＡＧＵ１８が行うことが可能である。
【００３７】
図２Ａの第２の命令３２は、現在レジスタ中に保存されているデータ値をメモリ内の位置へ保存せよとの保存命令ＳＴＲである。保存命令３２は、データ値のフルアドレスを得るために、メモリへ保存されるべきデータ値を保存するソースレジスタｗ１と、オペランドを保存する第２のレジスタｘ０と、レジスタｘ０中に保存されているオペランドへ加算されるべきイミディエート値＃ｉｍｍｌｏとを指定する。レジスタｘ０は、ＡＤＲＰ命令３０の宛先レジスタｘ０と同じであるため、保存命令３２は、ＡＤＲＰ命令３０に依存する。図４に示す第２のアドレス生成動作は、ＡＧＵ１８による保存命令３２に応答して行われる。ＡＤＲＰ３０命令の実行後、ソースレジスタｘ０は、第１のアドレス生成動作によって生成されたページアドレス５２を含む。保存命令３２に応答して、ＡＧＵ１８は、イミディエート値＃ｉｍｍｌｏ５４をページアドレス５２へ加算して、フルアドレス５６を生成する。フルアドレス５６は、ページアドレス５２と、イミディエート値＃ｉｍｍｌｏによって示されるページオフセット５４との双方を含む。フルアドレス５６は、データキャッシュアクセス回路２２による後続保存動作のために用いられる。
【００３８】
保存命令３２の第２のアドレス生成動作においてはＡＤＲＰ命令３０の結果が必要となるため、これらの命令を処理した場合、これらの命令をスケジューリングするタイミングに制約が発生する。図３の第１のアドレス生成動作はＡＬＵ２０において行われるため、この結果は、ＡＤＲＰ命令が第２の実行段１２に到達するまで利用することができない。図１のパイプラインにおいて転送経路６０が利用可能となる可能性もあるが、後続サイクルまでは、これらが第１のアドレス生成の結果をＡＧＵ１８へ返送することが可能性は低い。そのため、ＡＬＵ２０中における第１のアドレス生成の完了後のサイクルまでは、ＡＧＵ１８による保存命令３２の処理は不可能である。図６に示すように、これは、ＡＤＲＰ命令の結果を（保存命令の処理時における利用対象として）第１の実行段１０へ転送するための充分な時間が得られるようにするために、ＡＤＲＰ命令３０の２サイクル後に保存命令３２を発行する必要があることを意味する。そのため、パイプライン中にバブル６５が発生し得る（処理サイクル２において、第１の実行段によって処理されている命令は無い）。インオーダープロセッサにおいて、保存命令３２よりも先に別の命令を発行することによりこのバブルを充填することはできない。そのため、所与の期間内に処理することが可能な命令数が低減し、その結果性能低下に繋がる。
【００３９】
この問題に対処するため、復号段６は、受信された命令ストリームを確認して、図２Ａに示す種類のシーケンスを検出することができる。図２Ａに示す種類のシーケンスにおいて、第２のオペランド生成動作を行うための第２の命令３２は、第１のオペランド生成動作を行うための第１の命令３０に依存する。第１の命令３０および第２の命令３２は連続していなくてもよく、第１の命令３０と第２の命令３２との間には、１つよりも多くの介在命令が存在し得る。この種のシーケンスが検出された場合、復号段６は、このシーケンスを図２Ｂに示すように変更された命令シーケンスと交換し、少なくとも第２の命令が、変更された保存命令ＳＴＲ＊７０（「第３の命令」）と交換される。この変更された保存命令ＳＴＲ＊７０（「第３の命令」）は、組み合わされたアドレス生成動作を行う。組み合わされたアドレス生成動作はＡＧＵ１８によって行われ、これにより、以降のサイクルにおいてデータキャッシュアクセス回路２２による保存動作が可能となる。
【００４０】
図５に示すように、第３の命令に応答して行われる組み合わされたアドレス生成動作において、プログラムカウンタ４０およびマスク４２が組み合わされ、その後、マスクされたプログラムカウンタ値４４が組み合わされたイミディエート値７２へ加算される。組み合わされたイミディエート値７２において、上側イミディエート値＃ｉｍｍｈｉおよび下側イミディエート値＃ｉｍｍｌｏが連結される。マスクされたプログラムカウンタ値４４と、組み合わされたイミディエート値７２との合計により、（図４に示す第２のアドレス生成の結果と同一である）ページアドレス５２およびページオフセット５４双方を含むフルアドレス５６が得られる。よって、組み合わされたアドレス生成動作により、第１のアドレス生成動作および第２のアドレス生成動作が順次行われた場合に発生したであろう結果と同じ結果が得られる。その結果、組み合わされたアドレス生成を行うための変更された保存命令７０は、ＡＤＲＰ命令３０に依存しなくなるため、同一サイクルまたは連続するサイクルにおいて実行されるようにスケジューリングされ得る。図７に示すように、サイクル毎に複数の命令を発行することが可能なシステムにおいて、ＡＤＲＰ命令３０および変更された保存命令７０を同一サイクルにおいて発行して、処理性能を向上させることができる。
【００４１】
あるいは、パイプラインがサイクル毎に１つの命令のみを発行する場合、ＡＤＲＰならびに変更された保存命令３０および７０を図８に示すように連続するサイクルにおいて発行することができ、この場合も、保存命令７０を図６の場合よりも１サイクルだけ早く処理することが可能になる。
【００４２】
ＡＤＲＰ命令３０は、変更された保存命令７０についての正確な結果を生成するために必要ではなくなったため、ＡＤＲＰ命令３０によってレジスタｘ０内に配置された値を必要とする後続命令が存在し得るため、ＡＤＲＰ命令３０を実行する必要もまだあり得る。ｘ０中の値を利用する命令がもう無いことが分かった場合、例えば後続命令がｘ０中の値を上書きする場合、ＡＤＲＰ命令３０も、変更された保存命令７０と交換することができる。
【００４３】
アドレス生成命令３０の結果を利用する命令３２は、保存命令でなくてもよく、第１の命令３０によって生成された値を用いてＡＬＵ２０によって行われるロード命令または演算または論理命令であってもよい。これらの命令によって生成されたオペランドは、任意のオペランドであり得、単なるアドレスではない。組み合わされた動作は、パイプラインの任意の段において行うことが可能であるため、上記したように第１の実行段１０中のＡＧＵ１８を用いてこれを行うことは必須ではない。また、いくつかのインプレメンテーションにおいて、第１の実行段１０を単一のパイプライン段内の発行段８と組み合わせることにより、ＡＧＵ１８における命令発行、レジスタ読み出しおよびアドレス生成を全て同一処理サイクルにおいて行うことが可能になる。
【００４４】
上記した例において、復号段６は、所定の命令シーケンスを検出し、この命令シーケンスを変更された命令ストリームと交換するが、これは発行段８において行ってもよい。例えば、復号段６または発行段８は、ＦＩＦＯ（先入れ先出し）バッファを特定の数Ｎのエントリと共に持ち得る。段６および８によって受信された各命令はＦＩＦＯバッファへと書き込まれ、バッファからの最も古い命令が新規命令のために強制退去させられる。各処理サイクルにおいて、復号段６または発行段８は、ＦＩＦＯバッファが第１の命令３０と、第２の命令３２双方を含む場合、所定のシーケンスを検出することができる。第２の命令３２は、第１の命令３０に依存し、第１の命令３０および第２の命令３２が元々の形態で処理された場合、第１の命令３０は第２の命令３２に間に合うように第１の命令３０の結果を生成しないと予想される。ＦＩＦＯバッファ中のエントリＪの数により、所定のシーケンスによって検出される、第１の命令と第２の命令との間に発生し得る介在命令の最大数（Ｎ＝Ｊ−２）が決定される。
【００４５】
図９は、パイプライン中の命令を処理する方法を示す。ステップ１００において、第１のパイプライン段（例えば、復号段６または発行段８）は、第１のオペランド生成を行うための第１の命令と、第１のオペランド生成に依存する第２のオペランド生成を行うための第２の命令とを含む所定の命令シーケンスが処理すべき命令ストリームに含まれるかを検出する。オペランド生成においてプログラムカウンタのうち一部が用いられる場合、ステップ１００において、プログラムカウンタの関連部分について第１の命令および第２の命令が同一値を有するかについても確認する。プログラムカウンタの関連部分について第１の命令および第２の命令が同一値を持たない場合、所定の命令シーケンスを検出することはできない。所定の命令シーケンスは検出されない場合、命令交代は行われず、元々の命令がパイプラインによって処理される。その後、方法は、後続処理サイクルのためにステップ１００へ戻る。
【００４６】
所定の命令シーケンスが検出された場合、ステップ１０２において、第１の命令が既に発行されているかが決定されるか、または、第１の命令の結果を利用する後続命令が第２の命令以外に存在し得るかが決定される。第１の命令が既に発行されている場合、（その結果が他の任意の命令に必要ではない場合でも）当該命令を完了させる方がより効率的である。よって、ステップ１０４において、第２の命令のみが、変更された第３の命令と交換されて、第１のオペランド生成動作および第２のオペランド生成動作を順次行うのに相当する組み合わされたオペランド生成動作が得られる。また、第１の命令の結果に依存する第２の命令以外の後続命令が存在するかまたは存在し得る場合、第１の命令は変更されたストリーム中に残留しているはずであるため、ここでも、ステップ１０４において、第２の命令のみが第３の命令と交換される。一方、第１の命令が未だ発行されていない場合において、第１のオペランド生成の結果を利用する後続命令が存在し得ない場合、ステップ１０６において、第１の命令および第２の命令双方が組み合わされた命令と交換される。第１の命令および第２の命令双方の交換が可能である場合、有用である。なぜならば、第１の命令が無くなることにより、パイプライン中のスロットを別の命令の処理に用いることが可能になるからである。しかし、実際は、これが可能であるかを検出するハードウェアは複雑であり得るため、ステップ１０４を常に選択して、第２の命令のみを第３の命令と交換し、第１の命令を変更された命令ストリーム中に残留させるとより高効率である場合がある。その後、方法は、後続処理サイクルのためにステップ１００へ戻る。
【００４７】
図１において、図１０に示すように複数の処理経路が内部を通過する単一の処理パイプラインが図示されているが、複数の実行パイプライン１２０および１３０を設けることも可能である。パイプライン１２０および１３０双方によって共有される共通復号段６および共通発行段８が設けられる。発行段８は、各パイプラインにおいて利用可能な機能、命令の種類および／または各パイプライン１２０および１３０の現在の処理ワークロードに応じて、パイプライン１２０および１３０のうちどちらから命令を発行するかを決定する。図１０に示すように、ＡＬＵ２０およびＡＧＵ１８を含むパイプライン段は、異なるパイプライン１２０および１３０内にあり得るが、これらの段によって処理される命令間においてデータ依存性発行が行われる可能性が未だある。そのため、第２の命令３２を第３の命令７０と交換することにより、この実施形態においても性能向上が得られる。
【００４８】
図１１は、利用することが可能な仮想マシンインプレメンテーションを示す。上記した実施形態においては、技術をサポートする特定の処理ハードウェアを動作させるための装置および方法について本発明を実行したが、いわゆるハードウェアデバイスの仮想マシンインプレメンテーションを提供することも可能である。これらの仮想マシンインプレメンテーションは、ホストプロセッサ２００上において実行する。ホストプロセッサ２００は典型的には、仮想マシンプログラム２０４をサポートするホストオペレーティングシステム２０２を実行する。典型的には、ｅ合理的な速度で実行する仮想マシンインプレメンテーションを得るためには、大型の強力なプロセッサが必要となる。しかし、このようなアプローチは、特定の状況（例えば、適合性または再利用上の理由のために別のプロセッサに対してネーティブであるコードを実行することが望まれる場合）において合理的であり得る。仮想マシンプログラム２０４は、アプリケーションプログラム（またはオペレーティングシステム）２０６を実行して、実際のハードウェアデバイスによってプログラム実行した場合に得られるのと同じ結果をもたらすことができる。そのため、上記したプログラム命令は、仮想マシンプログラム２０４を用いてアプリケーションプログラム２０６内から実行することができ、これにより、実際のパイプライン（単数または複数）４または１２０および１３０の処理を複製することができる。
【００４９】
本明細書中、本発明の例示的な実施形態について添付図面を参照して詳述してきたが、本発明はこれらの実施形態のみに限定されず、当業者であれば、これらの実施形態において多様な変更および改変を（添付の特許請求の範囲によって規定されるような本発明の範囲および意図から逸脱することなく）行うことが可能であることが理解される。
【図１】
2014238832.tif 000003
【図２Ａ】
2014238832.tif 000004
【図２Ｂ】
2014238832.tif 000005
【図３】
2014238832.tif 000006
【図４】
2014238832.tif 000007
【図５】
2014238832.tif 000008
【図６】
2014238832.tif 000009
【図７】
2014238832.tif 000010
【図８】
2014238832.tif 000011
【図９】
2014238832.tif 000012
【図１０】
2014238832.tif 000013
【図１１】
2014238832.tif 000014
【外国語明細書】
2014238832000001.pdf