(57)【要約】  アウトオブオーダー(OOO)プロセッサにおける早期命令実行を提供すること、ならびに関連する装置、方法、およびコンピュータ可読媒体が開示される。一態様では、装置は、OOOプロセッサのフロントエンド命令パイプラインおよびバックエンド命令パイプラインに通信可能に結合された早期実行エンジンを含む。早期実行エンジンは、入来命令をフロントエンド命令パイプラインから受けることと、入来命令の1つまたは複数の入力オペランドのうちの1つのオペランドが、早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定することとを行うように構成される。早期実行エンジンはまた、入力オペランドが対応するエントリ内に存在すると決定したことに応答して、入力オペランドを対応するエントリ内に記憶されている非投機的イミディエート値で置換するように構成される。いくつかの態様では、早期実行エンジンは、早期実行ユニットを使用して入来命令を実行し、早期レジスタキャッシュを更新することができる。
2017537408.tif 000002
【特許請求の範囲】
【請求項１】
早期実行エンジンを含む装置であって、
前記早期実行エンジンが、アウトオブオーダー(OOO)プロセッサのフロントエンド命令パイプラインおよびバックエンド命令パイプラインに通信可能に結合され、
前記早期実行エンジンが、
早期実行ユニットと、
早期レジスタキャッシュとを含み、
前記早期実行エンジンが、
入来命令を前記フロントエンド命令パイプラインから受けることと、
前記入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、前記早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定することと、
前記入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、前記入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換することとを行うように構成される、装置。
【請求項２】
前記早期実行エンジンが、前記入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にすることと、
送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うようにさらに構成される、請求項1に記載の装置。
【請求項３】
前記早期実行エンジンが、
前記入来命令が早期実行適格命令であるかどうかを決定することと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの前記早期実行ユニットを使用して前記早期実行適格命令を実行することと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリに書き込むことと、
送出命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うようにさらに構成される、請求項1に記載の装置。
【請求項４】
前記早期実行エンジンが、前記入来命令が前記早期実行適格命令でないと決定したことに応答して、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にすることと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うようにさらに構成される、請求項3に記載の装置。
【請求項５】
前記早期実行エンジンが、
1つまたは複数のアーキテクチャ上レジスタ値を前記OOOプロセッサから受けることであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュ内の前記1つまたは複数のエントリに対応する、受けることと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新することとを行うようにさらに構成される、請求項1に記載の装置。
【請求項６】
前記早期実行エンジンが、
パイプラインフラッシュの表示を受けることと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にすることとを行うようにさらに構成される、請求項1に記載の装置。
【請求項７】
前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリが、狭幅オペランドを記憶するように構成される、請求項1に記載の装置。
【請求項８】
前記早期レジスタキャッシュの前記1つまたは複数のエントリが、前記OOOプロセッサの複数のアーキテクチャ上レジスタのサブセットに対応する、請求項1に記載の装置。
【請求項９】
集積回路(IC)に組み込まれる、請求項1に記載の装置。
【請求項１０】
セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定位置データユニット、モバイル位置データユニット、モバイル電話、セルラー電話、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤから構成されたグループから選択されたデバイスに組み込まれる、請求項1に記載の装置。
【請求項１１】
アウトオブオーダー(OOO)プロセッサの早期実行エンジンを含む装置であって、前記早期実行エンジンが、
入来命令を前記OOOプロセッサのフロントエンド命令パイプラインから受けるための手段と、
前記入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、前記早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するための手段と、
前記入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、前記入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換するための手段とを含む、装置。
【請求項１２】
早期命令実行を提供するための方法であって、
入来命令をアウトオブオーダー(OOO)プロセッサのフロントエンド命令パイプラインから、前記OOOプロセッサの早期実行エンジンによって受けるステップと、
前記入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、前記早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するステップと、
前記入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、前記入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換するステップとを含む、方法。
【請求項１３】
前記入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にするステップと、
送出命令として前記入来命令を、実行のために前記OOOプロセッサのバックエンド命令パイプラインに供給するステップとをさらに含む、請求項12に記載の方法。
【請求項１４】
前記入来命令が早期実行適格命令であるかどうかを決定するステップと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの早期実行ユニットを使用して前記早期実行適格命令を実行するステップと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリに書き込むステップと、
送出命令を、実行のために前記OOOプロセッサのバックエンド命令パイプラインに供給するステップとをさらに含む、請求項12に記載の方法。
【請求項１５】
前記入来命令が前記早期実行適格命令でないと決定したことに応答して、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にするステップと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給するステップとをさらに含む、請求項14に記載の方法。
【請求項１６】
1つまたは複数のアーキテクチャ上レジスタ値を前記OOOプロセッサから受けるステップであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュの前記1つまたは複数のエントリに対応する、受けるステップと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新するステップとをさらに含む、請求項12に記載の方法。
【請求項１７】
パイプラインフラッシュの表示を受けるステップと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にするステップとをさらに含む、請求項12に記載の方法。
【請求項１８】
前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリが、狭幅オペランドを記憶するように構成される、請求項12に記載の方法。
【請求項１９】
前記早期レジスタキャッシュの前記1つまたは複数のエントリが、前記OOOプロセッサの複数のアーキテクチャ上レジスタのサブセットに対応する、請求項12に記載の方法。
【請求項２０】
コンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体であって、前記コンピュータ実行可能命令が、プロセッサによって実行されたとき、前記プロセッサに、
入来命令を前記プロセッサのフロントエンド命令パイプラインから受けることと、
前記入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定することと、
前記入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、前記入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換することとを行わせる、非一時的コンピュータ可読媒体。
【請求項２１】
プロセッサによって実行されたとき、前記入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、前記プロセッサに、さらに、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にすることと、
送出命令として前記入来命令を、実行のために前記プロセッサのバックエンド命令パイプラインに供給することとを行わせるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項２２】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
前記入来命令が早期実行適格命令であるかどうかを決定することと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの早期実行ユニットを使用して前記早期実行適格命令を実行することと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリに書き込むことと、
送出命令を、実行のために前記プロセッサのバックエンド命令パイプラインに供給することとを行わせるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項２３】
プロセッサによって実行されたとき、前記入来命令が前記早期実行適格命令でないと決定したことに応答して、前記プロセッサに、さらに、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にすることと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行わせるコンピュータ実行可能命令を記憶している、請求項22に記載の非一時的コンピュータ可読媒体。
【請求項２４】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
1つまたは複数のアーキテクチャ上レジスタ値を受けることであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュの前記1つまたは複数のエントリに対応する、受けることと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新することとを行わせるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項２５】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
パイプラインフラッシュの表示を受けることと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にすることとを行わせるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項２６】
プロセッサによって実行されたとき、前記プロセッサに、さらに、狭幅オペランドを前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリに記憶させるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【請求項２７】
プロセッサによって実行されたとき、前記プロセッサに、さらに、前記早期レジスタキャッシュの前記1つまたは複数のエントリを、前記プロセッサの複数のアーキテクチャ上レジスタのサブセットと関連付けさせるコンピュータ実行可能命令を記憶している、請求項20に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
本出願は、参照によりその全体が本明細書に組み込まれている、2014年12月12日に出願した、「PROVIDING EARLY INSTRUCTION EXECUTION IN AN OUT-OF-ORDER (OOO) PROCESSOR, AND RELATED APPARATUSES, METHODS, AND COMPUTER-READABLE MEDIA」と題する、米国特許出願第14/568,637号の優先権を主張するものである。
【０００２】
本開示の技術は、一般に、アウトオブオーダー(OOO)プロセッサによる命令の実行に関する。
【背景技術】
【０００３】
アウトオブオーダー(OOO)プロセッサは、コンピュータプログラム内の命令の出現の順序にかかわらず、各命令の入力オペランドの利用可能性によって決定される順序でコンピュータプログラム命令を実行することが可能なコンピュータプロセッサである。命令を、順序を守らないで(Out-of-Order)実行することによって、OOOプロセッサは、データアクセス動作が完了するのをOOOプロセッサが待つ間に本来ならば無駄に進行するプロセッサクロックサイクルを、十分に利用することが可能である。たとえば、より以前のプログラム命令のために入力データが検索されている間、「停止」する(すなわち、意図的に処理の遅延を導入する)必要があるのではなく、OOOプロセッサは、直ちに実行可能な、より新しくフェッチされた命令を実行することを進めることができる。このようにして、プロセッサクロックサイクルは、OOOプロセッサによってより生産的に利用され得、その結果、OOOプロセッサがプロセッサクロックサイクル当たりに処理し得る命令の数が増加する。
【０００４】
しかしながら、クロックサイクル当たりに処理される命令の数が増加する程度は、命令間に存在する依存性によって制限される場合がある。たとえば、以下の命令シーケンスを考える。
【０００５】
I1: MOV R1, 0x0000;  値0x0000をレジスタR1にロードする
【０００６】
I2: MOVT R1, 0x1000;  値0x10000000をレジスタR1にロードする
【０００７】
I3: R3 = R1 + R1;  R1の値を自体に加算してレジスタR3に記憶する
【０００８】
I4: R4 = memory [R3];  メモリアドレスR3における値をレジスタR4に記憶する
【０００９】
上記の命令シーケンスでは、命令I3は値を入力オペランドとしてレジスタR1から受けるので、命令I3とI1との間、および命令I3とI2との間には、依存性が存在する。したがって、命令I3は、命令I1とI2の両方が完了するまでは実行することができない。同様に、命令I4は、レジスタR3の値が命令I3によって計算され終わるまでは実行することができない。
【００１０】
いくつかの従来のコンピュータマイクロアーキテクチャは、命令が実行のためのレジスタ値を生成するのを待つことなく、特定のレジスタ値をキャッシュするための専用構造を設けることによって命令依存性の問題に対処することを試みている。1つのそのような構造は、直近にイミディエート値でロードされたレジスタのセットを維持し得る定数キャッシュである。同様に、他のマイクロアーキテクチャは、(たとえば、スタックポインタ更新のための)特定のレジスタの早期実行を可能にし得るIntelスタックエンジンなどの構造を提供する場合がある。しかしながら、これらの例の両方において、キャッシュレジスタ値は、ごく限られた命令のセットによって生成されるレジスタ更新値に限られる。
【発明の概要】
【課題を解決するための手段】
【００１１】
発明を実施するための形態で開示する態様は、アウトオブオーダー(OOO)プロセッサにおける早期命令実行を提供することを含む。関連する装置、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、早期実行エンジンを含む装置が提供される。早期実行エンジンは、いくつかの態様ではレジスタに記憶されている非投機的イミディエート値(Non-Speculative Immediate Value)をキャッシュするための専用構造である早期レジスタキャッシュを含む。いくつかの態様では、早期実行エンジンはまた、命令の早期実行を実行するために使用され得る早期実行ユニットを含む。早期実行エンジンは、入来命令(Incoming Instruction)をOOOプロセッサのフロントエンド命令パイプラインから受けて、入来命令の入力オペランドが早期レジスタキャッシュ内のエントリ内に存在するかどうかを決定する。存在する場合、早期実行エンジンは、入来命令の入力オペランドを早期レジスタキャッシュのエントリ内にキャッシュされている非投機的イミディエート値で置換する。このようにして、入力オペランドはキャッシュされたイミディエート値と置き換えられ、したがって入来命令がレジスタアクセスを必要とすることなく実行されることが可能になる。いくつかの態様では、早期実行エンジンは、さらに、入来命令が早期実行適格命令(Early-Execution-Eligible Instruction)(たとえば、早期実行ユニットによってサポートされる比較的簡単な算術演算、論理演算またはシフト演算)であるかどうかを決定する場合がある。入来命令が早期実行適格命令である場合、早期実行エンジンは、早期実行ユニットを使用して入来命令を実行してもよい。次いで、早期実行エンジンは、入来命令の早期実行の結果として得られた出力値を早期レジスタキャッシュに書き込んでよい。いくつかの態様では、入来命令は、次いで、OOOプロセッサのバックエンド命令パイプラインに供給される送出命令(Outgoing Instruction)によって置き換えられてよい。
【００１２】
別の態様では、早期実行エンジンを含む装置が提供される。早期実行エンジンは、OOOプロセッサのフロントエンド命令パイプラインおよびバックエンド命令パイプラインに通信可能に結合される。早期実行エンジンは、早期実行ユニットおよび早期レジスタキャッシュを含む。早期実行エンジンは、入来命令をフロントエンド命令パイプラインから受けるように構成される。早期実行エンジンは、入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するようにさらに構成される。早期実行エンジンはまた、入力オペランドが対応するエントリ内に存在すると決定したことに応答して、入力オペランドを対応するエントリ内に記憶されている非投機的イミディエート値で置換するように構成される。
【００１３】
別の態様では、OOOプロセッサの早期実行エンジンを含む装置が提供される。早期実行エンジンは、入来命令をOOOプロセッサのフロントエンド命令パイプラインから受けるための手段を含む。早期実行エンジンは、入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するための手段をさらに含む。早期実行エンジンはまた、入力オペランドが対応するエントリ内に存在すると決定したことに応答して、入力オペランドを対応するエントリ内に記憶されている非投機的イミディエート値で置換するための手段を含む。
【００１４】
別の態様では、早期命令実行を提供するための方法が提供される。方法は、入来命令をOOOプロセッサのフロントエンド命令パイプラインから、OOOプロセッサの早期実行エンジンによって受けるステップを含む。方法は、入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するステップをさらに含む。方法はまた、入力オペランドが対応するエントリ内に存在すると決定したことに応答して、入力オペランドを対応するエントリ内に記憶されている非投機的イミディエート値で置換するステップを含む。
【００１５】
別の態様では、コンピュータ実行可能命令を記憶した非一時的コンピュータ可読媒体が提供される。プロセッサによって実行されたとき、コンピュータ実行可能命令は、プロセッサに、入来命令をプロセッサのフロントエンド命令パイプラインから受けさせる。コンピュータ実行可能命令は、プロセッサに、さらに、入来命令の1つまたは複数の入力オペランドのうちの1つの入力オペランドが、早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定させる。コンピュータ実行可能命令はまた、プロセッサに、入力オペランドが対応するエントリ内に存在すると決定したことに応答して、入力オペランドを対応するエントリ内に記憶されている非投機的イミディエート値で置換させる。
【図面の簡単な説明】
【００１６】
【図１】早期命令実行を行うための早期実行エンジンを含む例示的なアウトオブオーダー(OOO)プロセッサのブロック図である。
【図２】図1の早期実行エンジンの例示的な早期レジスタキャッシュの内容を示すブロック図である。
【図３Ａ】入力オペランドを検出して置き換えるため、および入来する早期実行適格命令の早期実行を行うための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図３Ｂ】入力オペランドを検出して置き換えるため、および入来する早期実行適格命令の早期実行を行うための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図３Ｃ】入力オペランドを検出して置き換えるため、および入来する早期実行適格命令の早期実行を行うための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図４Ａ】早期実行がサポートされない入来命令の入力オペランドを検出して置き換えるため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図４Ｂ】早期実行がサポートされない入来命令の入力オペランドを検出して置き換えるため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図４Ｃ】早期実行がサポートされない入来命令の入力オペランドを検出して置き換えるため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図５Ａ】オペランドが利用可能でない入来命令を検出して取り扱うため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図５Ｂ】オペランドが利用可能でない入来命令を検出して取り扱うため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図５Ｃ】オペランドが利用可能でない入来命令を検出して取り扱うため、および早期レジスタキャッシュに対する更新を受けるための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図６】パイプラインフラッシュを検出してそこから復元するための、図1の早期実行エンジンに対する例示的な通信フローを示す図表である。
【図７Ａ】図1の早期実行エンジンによる早期命令実行を行うための例示的なプロセスを示すフローチャートである。
【図７Ｂ】図1の早期実行エンジンによる早期命令実行を行うための例示的なプロセスを示すフローチャートである。
【図８】受けたアーキテクチャ上レジスタ値に基づいて早期レジスタキャッシュを更新するための追加の例示的な動作を示すフローチャートである。
【図９】パイプラインフラッシュを検出してそこから復元するための追加の例示的な動作を示すフローチャートである。
【図１０】図1の早期実行エンジンを含み得る例示的なプロセッサベースシステムのブロック図である。
【発明を実施するための形態】
【００１７】
次に図面を参照しながら、本開示のいくつかの例示的な態様について述べる。本明細書において、「例示的」という語は、「例、実例、または例証としての働きをする」ことを意味するために使用される。本明細書で「例示的」として記述されるどんな態様も、他の態様よりも好ましいかまたは有利であると解釈されるべきとは必ずしも限らない。
【００１８】
発明を実施するための形態で開示する態様は、アウトオブオーダー(OOO)プロセッサにおける早期命令実行を提供することを含む。関連する装置、方法、およびコンピュータ可読媒体も開示される。この点について、一態様では、早期実行エンジンを含む装置が提供される。早期実行エンジンは、いくつかの態様ではレジスタに記憶されている非投機的イミディエート値をキャッシュするための専用構造である早期レジスタキャッシュを含む。いくつかの態様では、早期実行エンジンはまた、命令の早期実行を実行するために使用され得る早期実行ユニットを含む。早期実行エンジンは、入来命令をOOOプロセッサのフロントエンド命令パイプラインから受けて、入来命令の入力オペランドが早期レジスタキャッシュ内のエントリ内に存在するかどうかを決定する。存在する場合、早期実行エンジンは、入来命令の入力オペランドを早期レジスタキャッシュのエントリ内にキャッシュされている非投機的イミディエート値で置換する。このようにして、入力オペランドはキャッシュされたイミディエート値と置き換えられ、したがって入来命令がレジスタアクセスを必要とすることなく実行されることが可能になる。いくつかの態様では、早期実行エンジンは、さらに、入来命令が早期実行適格命令(たとえば、早期実行ユニットによってサポートされる比較的簡単な算術演算、論理演算またはシフト演算)であるかどうかを決定する場合がある。入来命令が早期実行適格命令である場合、早期実行エンジンは、早期実行ユニットを使用して入来命令を実行してもよい。次いで、早期実行エンジンは、入来命令の早期実行の結果として得られた出力値を早期レジスタキャッシュに書き込んでよい。いくつかの態様では、入来命令は、次いで、OOOプロセッサのバックエンド命令パイプラインに供給される送出命令によって置き換えられてよい。
【００１９】
この点について、図1は、本明細書で開示するように、早期命令実行を行う早期実行エンジン102を含む例示的なOOOプロセッサ100のブロック図である。OOOプロセッサ100は、入力/出力回路104と、命令キャッシュ106と、データキャッシュ108とを含む。OOOプロセッサ100は、数ある要素の中でも、既知のデジタル論理素子、半導体回路、処理コアおよび/もしくはメモリ構造のいずれか1つ、またはその組合せを含む場合がある。本明細書で説明する態様は、要素の任意の特定の構成には限定されず、開示される技法は、半導体ダイまたはパッケージ上の様々な構造およびレイアウトに容易に拡張することができる。
【００２０】
OOOプロセッサ100は、フロントエンド命令パイプライン112およびバックエンド命令パイプライン114に細分割され得る実行パイプライン110をさらに含む。本明細書で使用する「フロントエンド命令パイプライン112」は、従来、実行パイプライン110の「始端」に位置し、フェッチング、復号、および/または命令待ち行列機能を提供するパイプラインステージを指す場合がある。この点について、図1のフロントエンド命令パイプライン112は、1つまたは複数のフェッチ/復号パイプラインステージ116と、1つまたは複数の命令待ち行列ステージ118とを含む。非限定的な例として、1つまたは複数のフェッチ/復号パイプラインステージ116は、F1、F2および/またはF3フェッチ/復号ステージ(図示せず)を含む場合がある。本明細書では、「バックエンド命令パイプライン114」は、実行のための命令を発行するため、命令の実際の実行を遂行するため、ならびに/あるいは命令実行によって必要とされるかもしくは生成されるデータをロードおよび/もしくは記憶するための、実行パイプライン110の後続のパイプラインステージを指す。図1の例では、バックエンド命令パイプライン114は、リネームステージ120、レジスタアクセスステージ122、予約ステージ124、1つまたは複数の割り振りステージ126、および1つまたは複数の実行ユニット128を含む。図1に示すフロントエンド命令パイプライン112のステージ116、118およびバックエンド命令パイプライン114のステージ120、122、124、126、128は、説明のためだけに提供されること、およびOOOプロセッサ100の他の態様は、本明細書で示されるものに追加の、またはそれより少ないパイプラインステージを含有し得ることを理解されたい。
【００２１】
OOOプロセッサ100は、複数のレジスタ132(0)〜132(X)に対する物理ストレージを提供するレジスタファイル130を追加で含む。いくつかの態様では、レジスタ132(0)〜132(X)は、1つまたは複数の汎用レジスタ(GPR)、プログラムカウンタ(図示せず)、および/またはリンクレジスタ(図示せず)を含む場合がある。OOOプロセッサ100によってコンピュータプログラムを実行する間、レジスタ132(0)〜132(X)は、レジスタマップテーブル136を使用して1つまたは複数のアーキテクチャ上レジスタ(Architectural Register)134にマッピングされ得る。
【００２２】
例示的な動作では、非限定的な例として、実行パイプライン110のフロントエンド命令パイプライン112は、命令(図示せず)を命令キャッシュ106からフェッチし、いくつかの態様では、命令キャッシュ106は、オンチップのレベル1(L1)キャッシュである場合がある。命令は、フロントエンド命令パイプライン112の1つまたは複数のフェッチ/復号パイプラインステージ116によってさらに復号され、バックエンド命令パイプライン114への発行を保留する1つまたは複数の命令待ち行列ステージ118に渡されてよい。命令がバックエンド命令パイプライン114に発行された後、バックエンド命令パイプライン114のステージ(たとえば、実行ユニット128)は、次いで、発行された命令を実行し、実行された命令をリタイアさせる。
【００２３】
上記で説明したように、OOOプロセッサ100は、命令処理の並列度を高めるために、命令のOOO処理を提供する場合がある。しかしながら、上述のように、OOO処理性能は、命令間の依存性の存在によって悪影響を及ぼされる場合がある。たとえば、先行する命令によって生成された値を入力として取る命令の処理は、先行する命令が完了して入力値が生成されるまで、OOOプロセッサ100によって遅延される場合がある。
【００２４】
この点について、OOOプロセッサ100は、早期命令実行を行うための早期実行エンジン102を含む。早期実行エンジン102は、明快のためにフロントエンド命令パイプライン112およびバックエンド命令パイプライン114とは別個の要素として示されているが、早期実行エンジン102は、フロントエンド命令パイプライン112のステージ116、118のうちの1つまたは複数に組み込まれてもよいことを理解されたい。早期実行エンジン102は、生成され、レジスタ132(0)〜132(X)に対応するアーキテクチャ上レジスタ134に記憶されるイミディエート値をキャッシュするための1つまたは複数のエントリ(図示せず)を含有する早期レジスタキャッシュ138を含む。早期実行エンジン102はまた、命令が、バックエンド命令パイプライン114に到達する前に実行されることを可能にし得る早期実行ユニット140を含んでよい。早期実行ユニット140は、非限定的な例として、1つまたは複数の算術論理ユニット(ALU)または浮動小数点ユニット(図示せず)を含む場合がある。このようにして、命令間の依存性は、実行パイプライン110内のずっと早い段階に解消され得、改善されたOOO処理性能がもたらされる。
【００２５】
例示的な動作では、早期実行エンジン102は、入来命令(図示せず)をフロントエンド命令パイプライン112から受け、命令の入力オペランドが早期レジスタキャッシュ138のエントリに記憶されているかどうかを決定するために入来命令の入力オペランド(図示せず)を検査する。入力オペランドに対応する有効なエントリが早期レジスタキャッシュ138内で発見される場合、早期実行エンジン102は、入来命令の入力オペランドを対応するエントリからのキャッシュされた非投機的イミディエート値で置換する。その結果、早期実行エンジン102によって修正された入来命令は、入力値を取り出すために1つまたは複数のレジスタアクセス動作を必要とするのではなく、イミディエート値を入力として含み得る。
【００２６】
早期実行エンジン102のいくつかの態様では、命令のサブセットは、早期実行(すなわち、実行パイプライン110のバックエンド命令パイプライン114に到達する前の実行)に適格として指定され得る。たとえば、算術演算、論理演算、またはシフト演算など、比較的低レベルの複雑さを有する命令は、早期実行適格命令として指定され得る。早期実行適格命令は、早期実行エンジン102の早期実行ユニット140によって実行されてよく、早期実行ユニット140からの出力値(存在する場合)は、早期レジスタキャッシュ138に書き込まれる。早期実行適格命令を処理することにおける早期実行エンジン102の例示的な態様の動作が、図3A〜図3Cに関して以下でさらに詳細に説明される。
【００２７】
早期実行エンジン102によって観測される入来命令が処理され得ない(すなわち、早期レジスタキャッシュ138が命令のすべての入力オペランドに対してキャッシュされたイミディエート値を含有しないので、または命令が早期実行適格命令として指定されていないので)場合、早期実行エンジン102は、入来命令に対する出力オペランド対応する任意のエントリを、早期レジスタキャッシュ138において無効としてマークすることになる。次いで、入来命令は、従来の処理のためにバックエンド命令パイプライン114に渡される。早期実行エンジン102は、その後、OOOプロセッサ100からの入来命令に対する出力値および/または任意の取り出された入力値を受けて、早期レジスタキャッシュ138を受けた値で更新してよい。早期実行ユニット140によって処理され得ない命令を取り扱うための早期実行エンジン102の例示的な態様の動作が、図4A〜図4Cおよび図5A〜図5Cに関して以下でさらに詳細に説明される。
【００２８】
いくつかの態様では、早期実行適格命令は、早期実行エンジン102内で実行され得る分岐命令を含む場合があることを理解されたい。早期実行エンジン102による分岐命令の早期実行は、結果としてプロセッサ性能および電力消費の改善をもたらすことができる。分岐命令の早期実行はまた、結果として実行パイプライン110の認識深さ(Perceived Depth)の低減をもたらし、分岐予測子トレーニング(Branch Predictor Training)を高速化することができる。
【００２９】
早期実行エンジン102のいくつかの態様は、狭幅オペランド(すなわち、OOOプロセッサ100によってサポートされる最大サイズより小さいサイズを有する入力オペランドおよび/または出力オペランド)のみをサポートすることによって性能をさらに改善することができる。いくつかの態様では、早期実行エンジン102の早期レジスタキャッシュ138は、その中にキャッシュされる各イミディエート値の低次ビットだけを記憶するように構成され得る。加えて、早期実行ユニット140は、狭幅オペランド上でのみを動作するように構成され得る。
【００３０】
いくつかの態様において図1の早期レジスタキャッシュ138に対応し得る例示的な早期レジスタキャッシュ200を示すために、図2が提供される。図1の要素は、明快のために、図2を説明する際に参照される。図2に示すように、早期レジスタキャッシュ200は複数のエントリ202(0)〜202(Y)を含み、各々は、図1のレジスタ132(0)〜132(X)のうちの1つに対応する1つまたは複数のアーキテクチャ上レジスタ134のうちの1つに関連付けられる。各エントリ202(0)〜202(Y)は、エントリ202(0)〜202(Y)のうちの1つに対応する1つまたは複数のアーキテクチャ上レジスタ134のうちの1つに対する識別子を表すレジスタ識別(ID)フィールド204を含む。いくつかの態様では、レジスタIDフィールド204は、関連するアーキテクチャ上レジスタ134のインデックス番号を記憶する場合があるが、いくつかの態様は、レジスタIDフィールド204が、関連するアーキテクチャ上レジスタ134のアドレスを記憶することを提供する場合がある。いくつかの態様によれば、レジスタIDフィールド204は、コンピュータプログラムの実行中、OOOプロセッサ100によって動的に割り当てられ、および/または修正される場合がある。
【００３１】
エントリ202(0)〜202(Y)の各々はまた、イミディエート値フィールド206を含む。イミディエート値フィールド206は、エントリ202(0)〜202(Y)に対応するアーキテクチャ上レジスタ134に記憶するために、(たとえば、図1の早期実行ユニット140および/または1つもしくは複数の実行ユニット128による命令の実行によって)前に生成された非投機的イミディエート値をキャッシュしてよい。続いて入来命令がエントリ202(0)〜202(Y)に対応する入力オペランドを有することが検出されると、早期実行エンジン102は、入力オペランドをイミディエート値フィールド206の内容で置換してよい。いくつかの態様では、イミディエート値フィールド206は、「狭い」イミディエート値(すなわち、OOOプロセッサ100によってサポートされるイミディエート値の最大サイズより小さいサイズを有するイミディエート値)だけを記憶してよい。非限定的な例として、OOOプロセッサ100は32ビットイミディエート値をサポートし得るが、イミディエート値フィールド206は、キャッシュされたイミディエート値の下位16ビットだけを記憶する場合がある。いくつかの態様は、早期レジスタキャッシュ200のイミディエート値フィールド206が狭いイミディエート値または「広い」(すなわち、フルサイズの)イミディエート値のいずれかを記憶し得ることを提供する場合がある。
【００３２】
早期レジスタキャッシュ200のエントリ202(0)〜202(Y)の各々はまた、エントリ202(0)〜202(Y)の有効性を示す有効フラグフィールド208を含む。いくつかの態様では、早期実行エンジン102は、エントリ202(0)〜202(Y)を更新する際に、エントリ202(0)〜202(Y)のうちの1つの有効フラグフィールド208を設定し得る。早期実行エンジン102は、エントリ202(0)〜202(Y)が、(たとえば、パイプラインフラッシュまたはサポートされていない命令の結果として)無効にされていることを示すために、エントリ202(0)〜202(Y)のうちの1つまたは複数の有効フラグフィールド208をクリアし得る。
【００３３】
いくつかの態様は、早期レジスタキャッシュ200のエントリ202(0)〜202(Y)が、図2に示すフィールド204、206および208に加えて他のフィールドを含み得ることを提供する場合があることを理解されたい。さらに、いくつかの態様における早期レジスタキャッシュ200が、当技術分野で知られている結合および置き換えポリシー(associativity and replacement policy)に従って構成されるキャッシュとして実装される場合があることを理解されたい。図2の例では、早期レジスタキャッシュ200は、単一のデータ構造として示されている。しかしながら、いくつかの態様では、早期レジスタキャッシュ200はまた、2つ以上のデータ構造またはデータキャッシュを含む場合がある。
【００３４】
早期実行エンジン102のいくつかの態様は、早期レジスタキャッシュ200への帯域幅を低減するため、ならびに/またはほとんど使用されないレジスタをキャッシュおよび更新することを回避するために、イミディエート値を選択的にキャッシュするための多様なメカニズムを利用する場合がある。たとえば、早期実行エンジン102のいくつかの態様は、早期レジスタキャッシュ200内の図1の1つまたは複数のアーキテクチャ上レジスタ134のサブセットだけをキャッシュするように構成される場合がある。非限定的な例として、早期実行エンジン102は、スタックポインタだけ、および/またはプロシージャ呼出しパラメータを渡すために使用されるレジスタだけをキャッシュする場合がある。いくつかの態様では、イミディエート値がキャッシュされ得るレジスタの選択は、早期実行エンジン102内に配線接続されてよく、ソフトウェアによってプログラム可能であってよく、および/またはハードウェアによって動的に決定されてもよい。
【００３５】
本明細書で開示するいくつかの態様によれば、早期実行エンジン102は、入来命令に基づいてイミディエート値をキャッシュするかどうかを決定するように構成されてよい。たとえば、早期実行エンジン102は、いくつかの共通のオペコードの入力オペランドもしくは出力オペランドだけをキャッシュしてよく、および/または観測された命令の履歴に基づいて特定の動的命令(図示せず)の入力オペランドもしくは出力オペランドだけをキャッシュしてもよい。いくつかの態様は、早期実行エンジン102が、ループ命令変数(図示せず)をキャッシュするように構成されることを提供する場合がある。いくつかの態様では、早期実行エンジン102は、重要な命令(たとえば、予測を誤ることが多い分岐命令、またはキャッシュミスをもたらすことが多いロード命令)の計算をフィードするレジスタをキャッシュするように構成されてよい。
【００３６】
図3A〜図3Cは、入力オペランドを検出して置き換えるため、および早期実行適格入来命令の早期実行を行うための、図1の早期実行エンジン102に対する例示的な通信フローを示す。図3A〜図3Cでは、図1のOOOプロセッサ100の例示的な態様に対応し得るOOOプロセッサ300が提供される。OOOプロセッサ300は、フロントエンド命令パイプライン302およびバックエンド命令パイプライン304を含み、それらの各々は、それぞれ、図1のフロントエンド命令パイプライン112およびバックエンド命令パイプライン114の態様を表すことができる。OOOプロセッサ300はまた、図1の早期実行エンジン102の態様に対応し得る早期実行エンジン306を提供する。早期実行エンジン306は、早期実行ユニット308および早期レジスタキャッシュ310を含む。早期レジスタキャッシュ310は、図1の1つまたは複数のアーキテクチャ上レジスタ134のうちのアーキテクチャ上レジスタR0〜R3を表すエントリ312(0)〜312(3)を含む。エントリ312(0)〜312(3)の各々は、図2に関して上記で説明したように、レジスタIDフィールド314、イミディエート値フィールド316、および有効フラグフィールド318を含む。図3の例では、早期レジスタキャッシュ310は、レジスタR0に対してキャッシュされた#x12のイミディエート値を有するエントリ312(0)、レジスタR2に対してキャッシュされた#x2のイミディエート値を有するエントリ312(2)、およびレジスタR3に対してキャッシュされた#xFFのイミディエート値を有するエントリ312(3)の3つの有効エントリを記憶する。
【００３７】
図3Aでは、早期実行エンジン306は、入来命令320を受ける。この例における入来命令320は、入力オペランド322および324(それぞれ、レジスタR0およびR2に対応する)の値を合計して、その結果をレジスタR1に記憶するように意図されたADD命令である。説明の目的で、ADD命令は、OOOプロセッサ300によって早期実行適格として指定されている命令のサブセット内に入ることが仮定されている。
【００３８】
入来命令320を受けると、早期実行エンジン306は、入力オペランド322、324のいずれかが早期レジスタキャッシュ310の対応するエントリ312(0)〜312(3)内に存在するかどうかを決定する。矢印326および328で示すように、図3Aの早期実行エンジン306は、入力オペランド322、324に対応する有効エントリ312(0)および312(2)を正常に位置特定する。その結果、早期実行エンジン306は、入力オペランド322、324をエントリ312(0)および312(2)内に記憶されているキャッシュされたイミディエート値と置き換えることができる。
【００３９】
次に図3Bを参照すると、早期実行エンジン306は、図3Aの入力オペランド322および324をそれぞれ、矢印334および336で示すエントリ312(0)および312(2)のイミディエート値フィールド316内に記憶されている非投機的イミディエート値330および332で置換する。得られた入来命令320'は、今や、入力値を取得するためにレジスタR0およびR2にアクセスすることなく実行され得る。このようにして、OOOプロセッサ300の性能は、早期実行エンジン306内の命令依存性を除去することによって改善され得る。
【００４０】
いくつかの態様では、OOOプロセッサ300の性能は、早期実行エンジン306による命令の早期実行によってさらに改善され得る。この点について、図3Cでは、早期実行エンジン306は、入来命令320'が早期実行適格命令であるかどうかを決定するために、入来命令320'を評価する。図3Cの例では、入来命令320'は、早期実行適格命令320'であると決定され、矢印338で示すように、実行のために早期実行ユニット308に渡される。早期実行適格命令320'の実行が完了した後、早期実行ユニット308は、矢印342で示すように、出力オペランド340に対応する早期レジスタキャッシュ310のエントリ312(1)を出力値341で更新する。エントリ312(1)の有効フラグフィールド318はまた、エントリ312(1)が有効であることを示すために、343の値1に更新される。
【００４１】
いくつかの態様によれば、早期実行適格命令320'が正常に実行されると、早期実行エンジン306は、早期実行適格命令320'を、バックエンド命令パイプライン304内の早期実行適格命令320'の実行の結果を再現する送出命令と置き換えることができる。図3Cの例では、早期実行適格命令320'がバックエンド命令パイプライン304によって実行されていた場合、その結果は、アーキテクチャ上レジスタR1に記憶されている値#x14であったことになる。したがって、矢印344で示すように、早期実行エンジン306は、早期実行適格命令320'を送出命令346と置き換えてよく、送出命令346は、この例では、#x14のイミディエート値をレジスタR1にロードするMOV命令である。次いで、送出命令346は、矢印348で示すように、実行のためにバックエンド命令パイプライン304に供給される。
【００４２】
図4A〜図4Cは、早期実行がサポートされない入来命令を検出して入力オペランドを置き換えるため、および早期レジスタキャッシュ310に対する更新を受けるための、図3A〜図3Cの早期実行エンジン306に対する例示的な通信フローを示す図表である。図4A〜図4Cを説明する際に、明快にするために図3A〜図3Cの要素が参照される。図4Aに示すように、早期実行エンジン306は、入来命令400を受ける。この例では、入来命令400は、レジスタR1の値および入力オペランド402によって示されるレジスタR2に記憶されているイミディエート値オフセットによって示されるメモリロケーションにアクセスするためのLDR命令である。次いで、LDR命令は、メモリアクセスの結果をレジスタR3に記憶する。説明の目的で、比較的複雑なメモリアクセス動作を伴う場合があるLDR命令は、早期実行エンジン306による早期実行に対して適格でないことが仮定される。
【００４３】
早期実行エンジン306は、矢印404によって示すように、入力オペランド402が早期レジスタキャッシュ310のエントリ312(0)〜312(3)のうちの1つの中に存在するかどうかを決定するために、最初に早期レジスタキャッシュ310を調べる。この例では、入力オペランド402は、エントリ312(2)に対応する。したがって、図4Bに示すように、早期実行エンジン306は、図4Aの入力オペランド402を、矢印408で示すように、エントリ312(2)のイミディエート値フィールド316内に記憶されている非投機的イミディエート値406で置換し、結果として入来命令400'を得る。
【００４４】
次いで、早期実行エンジン306は、図4B内の入来命令400'が早期実行適格命令であるかどうかを決定する。入来命令400'のLDR命令が早期実行に対して適格でないと決定されると、早期実行エンジン306は、入来命令400'の出力オペランド410に対応する早期レジスタキャッシュ310のエントリ312(3)を無効にする。図4Bの例では、これは、エントリ312(3)の有効フラグフィールド318を412の値ゼロ(0)に設定することによって達成される。
【００４５】
次に図4Cを参照すると、矢印416および418によって示すように、早期実行エンジン306は、入来命令400'を、実行のために送出命令414としてバックエンド命令パイプライン304に供給する。いくつかの態様では、バックエンド命令パイプライン304に供給される送出命令414は、それの出力が早期実行エンジン306の早期レジスタキャッシュ310に書き戻されるべきであることを示すために、OOOプロセッサ300によってマークされてよい。いくつかの態様は、早期レジスタキャッシュ310のエントリ312(0)〜312(3)に対応する出力オペランド410を有する送出命令414だけが、OOOプロセッサ300によってマークされることを提供する場合がある。
【００４６】
図4Cの例では、送出命令414がバックエンド命令パイプライン304によって実行された後、早期実行エンジン306は、得られたイミディエート値420をOOOプロセッサ300からフィードバック経路422を介して受ける。イミディエート値420は、出力オペランド410(すなわち、レジスタR3)に対応するエントリ312(3)に記憶され、エントリ312(3)の有効フラグフィールド318は、エントリ312(3)が現在有効であることを示す412'の値1に設定される。いくつかの態様は、早期実行エンジン306は、図1のレジスタファイル130からの内容を早期レジスタキャッシュ310にコピーするために、OOOプロセッサ300の従来の復元メカニズムを介してイミディエート値420を受け得ることを提供する場合がある。
【００４７】
図5A〜図5Cは、オペランドが利用可能でない入来命令を検出して取り扱うため、および早期レジスタキャッシュ310に対する更新を受けるための、図3A〜図3Cおよび図4A〜図4Cの早期実行エンジン306に対する例示的な通信フローを示す図表である。図5A〜図5Cを説明する際に、明快にするために図3A〜図3Cの要素が参照される。図5Aの例では、早期レジスタキャッシュ310は、レジスタR0に対してキャッシュされた#x12のイミディエート値を有するエントリ312(0)、およびレジスタR1に対してキャッシュされた#x14のイミディエート値を有するエントリ312(1)の2つの有効エントリだけを含む。
【００４８】
図5Aでは、早期実行エンジン306は、入来命令500を受ける。図3Aの入来命令320と同様に、入来命令500は、入力オペランド502および504(それぞれ、レジスタR0およびR2に対応する)の値を合計して、その結果をレジスタR1に記憶するADD命令である。入来命令500を受けると、早期実行エンジン306は、入力オペランド502、504のいずれかが早期レジスタキャッシュ310の対応するエントリ312(0)〜312(3)内に存在するかどうかを決定する。矢印506で示すように、図5Aの早期実行エンジン306は、早期レジスタキャッシュ310の中で、入力オペランド502に対応する有効エントリ312(0)を正常に位置特定する。その結果、早期実行エンジン306は、入力オペランド502をエントリ312(0)内に記憶されているキャッシュされたイミディエート値と置き換えることができる。しかしながら、入力オペランド504に対応する早期レジスタキャッシュ310内のエントリ312(2)は、矢印508で示すように、無効であることを発見される。
【００４９】
次に図5Bを参照すると、矢印510で示すように、早期実行エンジン306は、図5Aの入力オペランド502を、エントリ312(0)のイミディエート値フィールド316内に記憶されている非投機的イミディエート値509で置換する。したがって、得られた入来命令500'が実行されるとき、レジスタR0は、入力値を取得するためにアクセスされる必要はないことになる。しかしながら、図5Aの入力オペランド504は早期レジスタキャッシュ310内の有効エントリ312(0)〜312(3)に対応しないので、入来命令500は、早期実行エンジン306によって処理されるのに適格でない。結果として、図5Bに示すように、早期実行エンジン306は、入来命令500の出力オペランド511(すなわち、レジスタR1)に対応する早期レジスタキャッシュ310のエントリ312(1)を無効にする。図5Bに示すように、これは、この例では、エントリ312(1)の有効フラグフィールド318を512の値ゼロ(0)に設定することによって達成される。
【００５０】
次に図5Cを参照すると、矢印516によって示すように、早期実行エンジン306は、次いで、入来命令500'を、実行のために送出命令514としてバックエンド命令パイプライン304に供給する。図4Cに関して上述したように、バックエンド命令パイプライン304に供給される送出命令514は、それの出力が早期実行エンジン306の早期レジスタキャッシュ310に書き戻されるべきであることを示すために、OOOプロセッサ300によってマークされてよい。いくつかの態様は、早期レジスタキャッシュ310のエントリ312(0)〜312(3)に対応する出力オペランド511を有する送出命令514だけが、OOOプロセッサ300によってマークされることを提供する場合がある。
【００５１】
図5Cの例では、入来命令500'がバックエンド命令パイプライン304によって実行された後、早期実行エンジン306は、得られたアーキテクチャ上レジスタ値518をOOOプロセッサ300からフィードバック経路520を介して受ける。アーキテクチャ上レジスタ値518は、出力オペランド511(すなわち、レジスタR1)に対応するエントリ312(1)に記憶され、エントリ312(1)の有効フラグフィールド318は512'の値1に設定され、エントリ312(1)が現在有効であることを示す。入来命令500'を実行することの一部として、バックエンド命令パイプライン304はまた、図5Aの入来命令500の入力オペランド504に対応する、レジスタR2に対するアーキテクチャ上レジスタ値522を取り出すことに留意されたい。したがって、早期実行エンジン306はまた、OOOプロセッサ300からフィードバック経路524を介してアーキテクチャ上レジスタ値522を受けることができる。アーキテクチャ上レジスタ値522は、入力オペランド504(すなわち、レジスタR2)に対応するエントリ312(2)に記憶され、エントリ312(2)の有効フラグフィールド318は526の値1に設定され、エントリ312(2)が現在有効であることを示す。
【００５２】
アウトオブオーダー処理を実行することにおいて、OOOプロセッサ300は、たとえば、条件分岐命令(図示せず)がどのように決定するかに対する予測に基づいて、命令を頻繁に投機的に実行する場合がある。条件分岐命令によって取られる実際の経路は、条件分岐命令がバックエンド命令パイプライン304内で実行されるまでは、知られ得ない。したがって、OOOプロセッサ300は、フロントエンド命令パイプライン302および/またはバックエンド命令パイプライン304からの誤って予測された分岐命令に基づいて、間違ってフェッチされた命令をフラッシュするためのメカニズムを含む。
【００５３】
パイプラインフラッシュの場合、いくつかの態様における早期実行エンジン306は、投機的に生成されたイミディエート値をどれも無効にするために、早期レジスタキャッシュ310の内容を更新しなければならない。この点について、図6は、パイプラインフラッシュを検出してそこから復元するための、図3A〜図3Cの早期実行エンジン306に対する例示的な通信フローを示す。図6では、早期実行エンジン306は、パイプラインフラッシュの表示600をOOOプロセッサ300から受ける。応答して、早期実行エンジン306は、パイプラインフラッシュを引き起こした誤予測から復元するために、OOOプロセッサ300によって提供されるいくつかの復元メカニズムのいずれかを遂行することができる。いくつかの態様では、早期実行エンジン306は、単に、エントリ312(0)〜312(3)のすべてを無効にする場合がある。これは図6に示されており、ゼロ値602、604、606および608が、それぞれ、エントリ312(0)、312(1)、312(2)および312(3)の有効フラグフィールド318に書き込まれる。いくつかの態様では、早期実行エンジン306は、OOOプロセッサ300によって回復されるレジスタマップテーブルエントリに基づいてエントリ312(0)〜312(3)を選択的に無効にする場合がある。いくつかの態様は、図1のレジスタマップテーブル136はOOOプロセッサ300によって復元されるので、早期レジスタキャッシュ310に対する更新を元に戻すことによる、よりアグレッシブな手法を取る場合がある。
【００５４】
早期実行エンジン306によって提供される性能上の利点を最大化するために、早期実行エンジン306のいくつかの態様は、パイプラインフラッシュの影響、および/または早期実行エンジン306による処理に対して適格でない命令との影響を最小化にすることを追求する場合がある。いくつかの戦略が、OOOプロセッサ300によって提供される特定のアーキテクチャに基づいて、早期実行エンジン306および/またはOOOプロセッサ300によって利用されてよい。たとえば、早期実行エンジン306のいくつかの態様は、命令を予約ステージ124に挿入する前に、図1のレジスタアクセスステージ122を提供するマイクロアーキテクチャ上で実装され得る。そのような態様では、イミディエート値は、早期実行エンジン306によって受けられ、レジスタ読取り時間において早期レジスタキャッシュ310に直接挿入されてよい。
【００５５】
いくつかの態様では、OOOプロセッサ300が命令を現在処理していない状況が、(すなわち、フロントエンド命令パイプライン302内のパイプライン停止によって、またはパイプラインフラッシュを処理した後で)生じる場合がある。そのような状況では、図1のレジスタファイル130の内容は、レジスタ書込みを保留していない、最新のものであることが、OOOプロセッサ300によって知られ得る。結果として、早期実行エンジン306は、早期レジスタキャッシュ310の内容を単純なコピー動作を介して再ロードすることができる。
【００５６】
いくつかの態様によれば、早期実行エンジン306は、イミディエート値が、図1のレジスタファイル130から早期レジスタキャッシュ310に安全にコピーされ得るときを決定するために、保留されているアーキテクチャ上レジスタへの書込みを追跡することができる。たとえば、早期実行エンジン306は、各アーキテクチャ上レジスタへの未処理の書込みの数を示す、アーキテクチャ上レジスタごとに1つのカウンタ(図示せず)を維持することができる。カウンタは、ゼロに初期化されてよく、アーキテクチャ上レジスタに書き込む入来命令が早期実行エンジン306によって観測されるとインクリメントされてよい。カウンタはまた、命令がバックエンド命令パイプライン304によって完遂されると、早期実行エンジン306によってデクリメントされてよい。カウンタ値が1からゼロ(0)に遷移すると、保留されているアーキテクチャ上レジスタへの書込みは存在せず、したがって早期実行エンジン306は、イミディエート値をアーキテクチャ上レジスタから早期レジスタキャッシュ310に安全にコピーすることができる。
【００５７】
いくつかの態様では、入来命令の複数のバージョンが、同時にインフライト(In-Flight)である場合がある。アーキテクチャ上レジスタのどのバージョンが、更新のためのそれの内容を早期レジスタキャッシュ310に供給すべきかを追跡するために、早期実行エンジン306は、OOOプロセッサ300によって各インフライト命令に割り当てられたタグ(図示せず)を利用することができる。タグは、早期レジスタキャッシュ310を更新するために使用されるべきアーキテクチャ上レジスタ更新のバージョンを早期実行エンジン306に示すことができる。
【００５８】
図3A〜図3Cの早期実行エンジン306によって早期命令実行を行うための例示的なプロセスを示すために、図7Aおよび図7Bが提供される。図7Aは、入来命令に対する入力オペランドが早期実行エンジン306によってキャッシュされるかどうかを決定するため、および早期実行適格命令を検出するための例示的な動作を示す。図7Bは、早期実行適格命令の早期実行を遂行するための例示的な動作を示す。明快にするために、図7Aおよび図7Bについて説明する際に、図1および図3A〜図3Cの要素が参照される。
【００５９】
動作は、図7Aにおいて、OOOプロセッサ300の早期実行エンジン306が、入来命令320をOOOプロセッサ300のフロントエンド命令パイプライン302から受ける(ブロック700)ことから始まる。次に、早期実行エンジン306は、入来命令320の1つまたは複数の入力オペランド322、324のうちの1つの入力オペランド322または324が、早期実行エンジン306の早期レジスタキャッシュ310内の1つまたは複数のエントリ312(0)〜312(3)のうちの対応するエントリ312(0)、312(2)内に存在するかどうかを決定する(ブロック702)。入力オペランド322、324のうちの1つまたは複数が早期レジスタキャッシュ310内に存在しないものと、早期実行エンジン306が決定した場合、早期実行エンジン306は、入来命令320の出力オペランド340に対応する早期レジスタキャッシュ310のエントリ312(1)を無効にしてよい(ブロック704)。次いで、早期実行エンジン306は、入来命令320を送出命令346として、実行のためにOOOプロセッサ300のバックエンド命令パイプライン304に供給してよい(ブロック706)。
【００６０】
しかしながら、決定ブロック702において、入力オペランド322、324の各々が早期レジスタキャッシュ310内に存在するものと早期実行エンジン306が決定した場合、早期実行エンジン306は、入力オペランド322または324を、対応するエントリ312(0)、312(2)内に記憶されている非投機的イミディエート値330、332で置換する(ブロック708)。このようにして、入来命令320は、それの入力オペランド322、324を取り出すためのレジスタアクセスを必要とすることなく実行され得る。
【００６１】
いくつかの態様では、次に、早期実行エンジン306は、入来命令320が早期実行適格命令320'であるかどうかを決定する(ブロック710)。いくつかの態様では、早期実行適格命令320'は、早期実行ユニット308によってサポートされる比較的簡単な算術演算、論理演算、またはシフト演算であってよい。いくつかの態様は、早期実行適格命令320'が、早期実行エンジン306による検出のためにOOOプロセッサ300によって復号の間にマークされることを提供する場合がある。
【００６２】
決定ブロック710において、入来命令320が早期実行適格命令320'でないものと、早期実行エンジン306が決定した場合、処理は、入来命令320の入力オペランド322、324のうちの1つまたは複数が早期レジスタキャッシュ310内でキャッシュされない場合と同様にして、ブロック704において入来命令320の取り扱いを再開してよい。しかしながら、入来命令320が早期実行適格命令320'である場合、処理は、図7Bのブロック712において再開する。
【００６３】
次に図7Bを参照すると、早期実行エンジン306の早期実行ユニット308は、早期実行適格命令320'を実行してよい(ブロック712)。実行した後、早期実行ユニット308は、早期実行適格命令320'の出力値341を、早期実行適格命令320'の出力オペランド340に対応する早期レジスタキャッシュ310のエントリ312(1)に書き込んでよい(ブロック714)。このようにして、早期実行適格命令320'を実行した結果が、直ちに後続の命令に対して利用可能にされ得る。
【００６４】
早期実行適格命令320'の早期実行に続いて、早期実行エンジン306は、送出命令346を、実行のためにOOOプロセッサ300のバックエンド命令パイプライン304に供給してよい(ブロック716)。いくつかの態様では、送出命令346は、早期実行適格命令320'がバックエンド命令パイプライン304内で実行されたかのように、結果(たとえば、レジスタへの書込み)を再現することができる。このようにして、レジスタ132(0)〜132(X)の実際の内容は、早期レジスタキャッシュ310の内容と一致したままであり得る。
【００６５】
図8は、受けたアーキテクチャ上レジスタ値に基づいて図1の早期レジスタキャッシュ138を更新するための追加の例示的な動作を示す。たとえば、いくつかの態様では、アーキテクチャ上レジスタ値は、バックエンド命令パイプライン114による命令の実行に続いて、早期レジスタキャッシュ138によって受けられてよい。図8を説明する際に、明快のために図5A〜図5Cの要素が参照される。
【００６６】
図8では、動作は、早期実行エンジン306が1つまたは複数のアーキテクチャ上レジスタ値518、522を受けることから始まり、1つまたは複数のアーキテクチャ上レジスタ値518、522は、早期レジスタキャッシュ310のエントリ312(1)、312(2)のうちの1つまたは複数に対応する(ブロック800)。いくつかの態様では、1つまたは複数のアーキテクチャ上レジスタ値518、522は、バックエンド命令パイプライン304によって実行され、早期実行エンジン306によって受けられた早期実行不適格命令の結果を表す場合がある。いくつかの態様は、1つまたは複数のアーキテクチャ上レジスタ値518、522が、レジスタ132(0)〜132(X)から入力オペランド504をフェッチした結果を表し得ることを提供する場合がある。いくつかの態様によれば、1つまたは複数のアーキテクチャ上レジスタ値518、522は、OOOプロセッサ300からフィードバック経路520、524を介して受けられてよい。1つまたは複数のアーキテクチャ上レジスタ値518、522を受けると、早期実行エンジン306は、次いで、1つまたは複数のアーキテクチャ上レジスタ値518、522を記憶するために、早期レジスタキャッシュ310の1つまたは複数のエントリ312(1)、312(2)を更新してよい(ブロック802)。
【００６７】
図1の早期実行エンジン102のいくつかの態様に従って、パイプラインフラッシュを検出してそこから復元するための、追加の例示的な動作を説明するために、図9を提供する。明快のために、図9を説明する際に、図6の要素が参照される。図9では、動作は、早期実行エンジン306がパイプラインフラッシュの表示600を受けることから始まる(ブロック900)。いくつかの態様では、表示600は、バックエンド命令パイプライン304内で検出される誤って予測された分岐などの発生に応答してOOOプロセッサ300から受けられてよい。パイプラインフラッシュの表示600を受けたことに応答して、早期実行エンジン306は、早期レジスタキャッシュ310の1つまたは複数のエントリ312(0)〜312(3)を無効にする(ブロック902)。いくつかの態様では、早期レジスタキャッシュ310のすべてのエントリ312(0)〜312(3)が無効にされる場合があるが、いくつかの態様は、エントリ312(0)〜312(3)が選択的に無効にされることを提供する場合がある。
【００６８】
本明細書で開示する態様に従ってOOOプロセッサにおいて早期命令実行を提供することは、任意のプロセッサベースのデバイスで実現されるか、またはそれに組み込まれ得る。例としては、限定はしないが、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤが含まれる。
【００６９】
この点について、図10は、図1および図3A〜図3Cの早期実行エンジン102、306を採用することができる、プロセッサベースシステム1000の一例を示す。この例では、プロセッサベースのシステム1000は、各々が1つまたは複数のプロセッサ1004を含む、1つまたは複数の中央処理ユニット(CPU)1002を含む。1つまたは複数のプロセッサ1004は、図1および図3A〜図3Cの早期実行エンジン(EEE)102、306を含むことができる。CPU1002はマスターデバイスとすることができる。CPU1002は、一時的に記憶されたデータへの高速アクセスのためにプロセッサ1004に結合されるキャッシュメモリ1006を有する場合がある。CPU1002は、システムバス1008に結合され、プロセッサベースシステム1000内に含まれるマスターデバイスとスレーブデバイスとを相互結合することができる。よく知られているように、CPU1002は、システムバス1008を介してアドレス情報、制御情報、およびデータ情報を交換することによって、これらの他のデバイスと通信する。たとえば、CPU1002は、スレーブデバイスの一例として、メモリコントローラ1010にバストランザクション要求を通信することができる。
【００７０】
他のマスターデバイスおよびスレーブデバイスがシステムバス1008に接続され得る。図10に示すように、これらのデバイスは、例として、メモリシステム1012、1つまたは複数の入力デバイス1014、1つまたは複数の出力デバイス1016、1つまたは複数のネットワークインターフェースデバイス1018、ならびに1つまたは複数のディスプレイコントローラ1020を含み得る。入力デバイス1014は、限定はしないが、入力キー、スイッチ、音声プロセッサなどを含む、任意のタイプの入力デバイスを含むことができる。出力デバイス1016は、限定はしないが、オーディオインジケータ、ビデオインジケータ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。ネットワークインターフェースデバイス1018は、ネットワーク1022との間のデータ交換を可能にするように構成される任意のデバイスであり得る。ネットワーク1022は、限定はしないが、ワイヤードまたはワイヤレスネットワーク、専用または公衆ネットワーク、ローカルエリアネットワーク(LAN)、ワイドローカルエリアネットワーク(WLAN)、およびインターネットを含む、任意のタイプのネットワークであってもよい。ネットワークインターフェースデバイス1018は、所望の任意のタイプの通信プロトコルをサポートするように構成されることが可能である。メモリシステム1012は、メモリコントローラ1010および1つまたは複数のメモリユニット1024(0〜N)を含み得る。
【００７１】
CPU1002はまた、1つまたは複数のディスプレイ1026に送信される情報を制御するために、システムバス1008を介してディスプレイコントローラ1020にアクセスするように構成することができる。ディスプレイコントローラ1020は、1つまたは複数のビデオプロセッサ1028を介して、表示されるべき情報をディスプレイ1026に送信し、ビデオプロセッサ1028は、表示されるべき情報を、ディスプレイ1026に適したフォーマットになるように処理する。ディスプレイ1026は、限定はしないが、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイなどを含む任意のタイプのディスプレイを含み得る。
【００７２】
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、回路、およびアルゴリズムは、電子ハードウェア、メモリもしくは別のコンピュータ可読媒体に記憶され、プロセッサもしくは他の処理デバイスによって実行される命令、またはその両方の組合せとして実現できることは、当業者はさらに理解されよう。本明細書において説明するマスターデバイスおよびスレーブデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップにおいて利用されてもよい。本明細書において開示するメモリは、任意のタイプおよびサイズのメモリであってもよく、所望の任意のタイプの情報を記憶するように構成されてもよい。この互換性を明確に説明するために、上記では、種々の例示的な構成要素、ブロック、モジュール、回路、およびステップは、概してそれらの機能に関して説明した。そのような機能がどのように実現されるかは、特定の適用例、設計上の選択、および/またはシステム全体に課された設計制約によって決まる。当業者は、説明した機能を特定の適用例ごとに様々な方法で実現することができるが、そのような実施態様の決定は、本開示の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【００７３】
本明細書において開示される態様に関して説明される種々の例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタロジック、個別ハードウェア構成要素、または本明細書において説明される機能を実行するように設計されるそれらの任意の組合せを用いて実現または実行することができる。プロセッサはマイクロプロセッサであってよいが、代替では、プロセッサは、任意の従来型プロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと併用される1つもしくは複数のマイクロプロセッサ、または他の任意のそのような構成として実装されることもある。
【００７４】
本明細書で開示する態様は、ハードウェアにおいて、また、ハードウェアに記憶された命令において具現される場合があり、命令は、たとえば、ランダムアクセスメモリ(RAM)、フラッシュメモリ、読取り専用メモリ(ROM)、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野において知られている任意の他の形態のコンピュータ可読媒体内に存在する場合がある。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、プロセッサに結合される。代替案において、記憶媒体は、プロセッサに一体とすることができる。プロセッサおよび記憶媒体は、ASICに存在する場合がある。ASICは、遠隔局内に存在してもよい。代替では、プロセッサおよび記憶媒体は、遠隔局、基地局、またはサーバ内に個別構成要素として存在してもよい。
【００７５】
本明細書の例示的な態様のいずれかにおいて説明される動作ステップは、例および検討を提供するために説明されることにも留意されたい。説明される動作は、図示されるシーケンス以外の多数の異なるシーケンスにおいて実行される場合がある。さらに、単一の動作ステップにおいて説明される動作は、実際には複数の異なるステップにおいて実行される場合がある。さらに、例示的な態様において論じられる1つまたは複数の動作ステップが組み合わせられる場合がある。フローチャート図に示された動作ステップは、当業者には容易に明らかであるように、多数の異なる変更を受け得ることが理解されるべきである。当業者は、情報および信号が様々な異なる技術および技法のいずれかを使用して表され得ることも理解するであろう。たとえば、上記の説明全体を通して参照される場合があるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは磁性粒子、光場もしくは光学粒子、またはそれらの任意の組合せによって表される場合がある。
【００７６】
本開示の上記の説明は、当業者が本開示を実施するかまたは使用することを可能にするために与えられている。本開示に対する種々の変更が、当業者には容易に明らかになり、本明細書において規定される一般原理は、本開示の趣旨または範囲を逸脱することなく、他の変形形態に適用することができる。したがって、本開示は、本明細書において説明される例および設計に限定されるものではなく、本明細書において開示される原理および新規の特徴と一致する最も広い範囲を与えられるものとする。
【符号の説明】
【００７７】
100  アウトオブオーダー(OOO)プロセッサ
102  早期実行エンジン(EEE)
104  入力/出力回路
106  命令キャッシュ
108  データキャッシュ
110  実行パイプライン
112  フロントエンド命令パイプライン
114  バックエンド命令パイプライン
116  フェッチ/復号パイプラインステージ
118  命令待ち行列ステージ
120  リネームステージ
122  レジスタアクセスステージ
124  予約ステージ
126  割り振りステージ
128  実行ユニット
130  レジスタファイル
132(0)  レジスタ
132(1)  レジスタ
132(2)  レジスタ
132(X)  レジスタ
134  アーキテクチャ上レジスタ
136  レジスタマップテーブル
138  早期レジスタキャッシュ
140  早期実行ユニット
200  早期レジスタキャッシュ
202(0)  早期レジスタキャッシュのエントリ
202(Y)  早期レジスタキャッシュのエントリ
204  レジスタIDフィールド
206  イミディエート値フィールド
208  有効フラグフィールド
300  OOOプロセッサ
302  フロントエンド命令パイプライン
304  バックエンド命令パイプライン
306  早期実行エンジン(EEE)
308  早期実行ユニット
310  早期レジスタキャッシュ
312(0)  早期レジスタキャッシュのエントリ
312(1)  早期レジスタキャッシュのエントリ
312(2)  早期レジスタキャッシュのエントリ
312(3)  早期レジスタキャッシュのエントリ
314  レジスタIDフィールド
316  イミディエート値フィールド
318  有効フラグフィールド
320  入来命令
320'  入来命令
322  入力オペランド
324  入力オペランド
326  矢印
328  矢印
330  非投機的イミディエート値
332  非投機的イミディエート値
334  矢印
336  矢印
338  矢印
340  出力オペランド
341  出力値
342  矢印
343  値
344  矢印
346  送出命令
348  矢印
400  入来命令
400'  入来命令
402  入力オペランド
404  矢印
406  非投機的イミディエート値
408  矢印
410  出力オペランド
412  値
412'  値
414  送出命令
416  矢印
418  矢印
420  イミディエート値
422  フィードバック経路
500  入来命令
500'  入来命令
502  入力オペランド
504  入力オペランド
506  矢印
508  矢印
509  非投機的イミディエート値
510  矢印
511  出力オペランド
512  値
512'  値
514  送出命令
516  矢印
518  アーキテクチャ上レジスタ値
520  フィードバック経路
522  アーキテクチャ上レジスタ値
524  フィードバック経路
526  値
600  表示
602  ゼロ値
604  ゼロ値
606  ゼロ値
608  ゼロ値
1000  プロセッサベースシステム
1002  中央処理ユニット(CPU)
1004  プロセッサ
1006  キャッシュメモリ
1008  システムバス
1010  メモリコントローラ
1012  メモリシステム
1014  入力デバイス
1016  出力デバイス
1018  ネットワークインターフェースデバイス
1020  ディスプレイコントローラ
1022  ネットワーク
1024(0)  メモリユニット
1024(N)  メモリユニット
1026  ディスプレイ
1028  ビデオプロセッサ
【図１】
2017537408.tif 000003
【図２】
2017537408.tif 000004
【図３Ａ】
2017537408.tif 000005
【図３Ｂ】
2017537408.tif 000006
【図３Ｃ】
2017537408.tif 000007
【図４Ａ】
2017537408.tif 000008
【図４Ｂ】
2017537408.tif 000009
【図４Ｃ】
2017537408.tif 000010
【図５Ａ】
2017537408.tif 000011
【図５Ｂ】
2017537408.tif 000012
【図５Ｃ】
2017537408.tif 000013
【図６】
2017537408.tif 000014
【図７Ａ】
2017537408.tif 000015
【図７Ｂ】
2017537408.tif 000016
【図８】
2017537408.tif 000017
【図９】
2017537408.tif 000018
【図１０】
2017537408.tif 000019
【手続補正書】
【提出日】平成29年6月13日(2017.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
早期実行エンジンを含む装置であって、
前記早期実行エンジンが、アウトオブオーダー(OOO)プロセッサのフロントエンド命令パイプラインおよびバックエンド命令パイプラインに通信可能に結合され、
前記早期実行エンジンが、
早期実行ユニットと、
早期レジスタキャッシュとを含み、
前記早期実行エンジンが、
入来命令を前記フロントエンド命令パイプラインから受けることと、
前記入来命令の1つまたは複数の入力オペランドの各入力オペランドが、前記早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定することと、
各入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、各入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換することと、
各入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にすることと、
送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うように構成される、装置。
【請求項２】
前記早期実行エンジンが、
各入力オペランドが前記対応するエントリ内に存在すると決定したことにさらに応答して、前記入来命令が早期実行適格命令であるかどうかを決定することと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの前記早期実行ユニットを使用して前記早期実行適格命令を実行することと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリに書き込むことと、
前記送出命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うようにさらに構成される、請求項1に記載の装置。
【請求項３】
前記早期実行エンジンが、前記入来命令が前記早期実行適格命令でないと決定したことに応答して、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にすることと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行うようにさらに構成される、請求項2に記載の装置。
【請求項４】
前記早期実行エンジンが、
1つまたは複数のアーキテクチャ上レジスタ値を前記OOOプロセッサから受けることであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュ内の前記1つまたは複数のエントリに対応する、受けることと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新することとを行うようにさらに構成される、請求項1に記載の装置。
【請求項５】
前記早期実行エンジンが、
パイプラインフラッシュの表示を受けることと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にすることとを行うようにさらに構成される、請求項1に記載の装置。
【請求項６】
前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリが、狭幅オペランドを記憶するように構成される、請求項1に記載の装置。
【請求項７】
前記早期レジスタキャッシュの前記1つまたは複数のエントリが、前記OOOプロセッサの複数のアーキテクチャ上レジスタのサブセットに対応する、請求項1に記載の装置。
【請求項８】
集積回路(IC)に組み込まれる、請求項1に記載の装置。
【請求項９】
セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定位置データユニット、モバイル位置データユニット、モバイル電話、セルラー電話、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末(PDA)、モニタ、コンピュータモニタ、テレビジョン、チューナ、ラジオ、衛星ラジオ、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク(DVD)プレーヤ、およびポータブルデジタルビデオプレーヤから構成されたグループから選択されたデバイスに組み込まれる、請求項1に記載の装置。
【請求項１０】
アウトオブオーダー(OOO)プロセッサの早期実行エンジンを含む装置であって、前記早期実行エンジンが、
入来命令を前記OOOプロセッサのフロントエンド命令パイプラインから受けるための手段と、
前記入来命令の1つまたは複数の入力オペランドの各入力オペランドが、前記早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するための手段と、
各入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、各入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換するための手段と、
各入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にするための手段、および送出命令として前記入来命令を、実行のためにバックエンド命令パイプラインに供給するための手段とを含む、装置。
【請求項１１】
早期命令実行を提供するための方法であって、
入来命令をアウトオブオーダー(OOO)プロセッサのフロントエンド命令パイプラインから、前記OOOプロセッサの早期実行エンジンによって受けるステップと、
前記入来命令の1つまたは複数の入力オペランドの各入力オペランドが、前記早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定するステップと、
各入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、各入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換するステップと、
各入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にするステップと、
送出命令として前記入来命令を、実行のために前記OOOプロセッサのバックエンド命令パイプラインに供給するステップとを含む、方法。
【請求項１２】
各入力オペランドが前記対応するエントリ内に存在すると決定したことにさらに応答して、前記入来命令が早期実行適格命令であるかどうかを決定するステップと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの早期実行ユニットを使用して前記早期実行適格命令を実行するステップと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリに書き込むステップと、
前記送出命令を、実行のために前記OOOプロセッサの前記バックエンド命令パイプラインに供給するステップとをさらに含む、請求項11に記載の方法。
【請求項１３】
前記入来命令が前記早期実行適格命令でないと決定したことに応答して、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にするステップと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給するステップとをさらに含む、請求項12に記載の方法。
【請求項１４】
1つまたは複数のアーキテクチャ上レジスタ値を前記OOOプロセッサから受けるステップであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュの前記1つまたは複数のエントリに対応する、受けるステップと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新するステップとをさらに含む、請求項12に記載の方法。
【請求項１５】
パイプラインフラッシュの表示を受けるステップと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にするステップとをさらに含む、請求項11に記載の方法。
【請求項１６】
前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリが、狭幅オペランドを記憶するように構成される、請求項11に記載の方法。
【請求項１７】
前記早期レジスタキャッシュの前記1つまたは複数のエントリが、前記OOOプロセッサの複数のアーキテクチャ上レジスタのサブセットに対応する、請求項11に記載の方法。
【請求項１８】
コンピュータ実行可能命令を記憶した非一時的コンピュータ可読記憶媒体であって、前記コンピュータ実行可能命令が、プロセッサによって実行されたとき、前記プロセッサに、
入来命令を前記プロセッサのフロントエンド命令パイプラインから受けることと、
前記入来命令の1つまたは複数の入力オペランドの各入力オペランドが、早期実行エンジンの早期レジスタキャッシュ内の1つまたは複数のエントリのうちの対応するエントリ内に存在するかどうかを決定することと、
各入力オペランドが前記対応するエントリ内に存在すると決定したことに応答して、各入力オペランドを前記対応するエントリ内に記憶されている非投機的イミディエート値で置換することと、
各入力オペランドが前記対応するエントリ内に存在しないと決定したことに応答して、
前記入来命令の出力オペランドに対応する前記早期レジスタキャッシュのエントリを無効にすることと、
送出命令として前記入来命令を、実行のために前記プロセッサのバックエンド命令パイプラインに供給することとを行わせる、非一時的コンピュータ可読記憶媒体。
【請求項１９】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
各入力オペランドが前記対応するエントリ内に存在すると決定したことにさらに応答して、前記入来命令が早期実行適格命令であるかどうかを決定することと、
前記入来命令が前記早期実行適格命令であると決定したことに応答して、
前記早期実行エンジンの早期実行ユニットを使用して前記早期実行適格命令を実行することと、
前記早期実行適格命令の出力値を、前記早期実行適格命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリに書き込むことと、
前記送出命令を、実行のために前記プロセッサの前記バックエンド命令パイプラインに供給することとを行わせるコンピュータ実行可能命令を記憶している、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
プロセッサによって実行されたとき、前記入来命令が前記早期実行適格命令でないと決定したことに応答して、前記プロセッサに、さらに、
前記入来命令の前記出力オペランドに対応する前記早期レジスタキャッシュの前記エントリを無効にすることと、
前記送出命令として前記入来命令を、実行のために前記バックエンド命令パイプラインに供給することとを行わせるコンピュータ実行可能命令を記憶している、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【請求項２１】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
1つまたは複数のアーキテクチャ上レジスタ値を受けることであって、前記1つまたは複数のアーキテクチャ上レジスタ値が前記早期レジスタキャッシュの前記1つまたは複数のエントリに対応する、受けることと、
前記1つまたは複数のアーキテクチャ上レジスタ値を記憶するために、前記早期レジスタキャッシュの前記1つまたは複数のエントリを更新することとを行わせるコンピュータ実行可能命令を記憶している、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【請求項２２】
プロセッサによって実行されたとき、前記プロセッサに、さらに、
パイプラインフラッシュの表示を受けることと、
前記パイプラインフラッシュの前記表示を受けたことに応答して、前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの1つまたは複数を無効にすることとを行わせるコンピュータ実行可能命令を記憶している、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【請求項２３】
プロセッサによって実行されたとき、前記プロセッサに、さらに、狭幅オペランドを前記早期レジスタキャッシュの前記1つまたは複数のエントリのうちの少なくとも1つのエントリに記憶させるコンピュータ実行可能命令を記憶している、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【請求項２４】
プロセッサによって実行されたとき、前記プロセッサに、さらに、前記早期レジスタキャッシュの前記1つまたは複数のエントリを、前記プロセッサの複数のアーキテクチャ上レジスタのサブセットと関連付けさせるコンピュータ実行可能命令を記憶している、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【国際調査報告】
2017537408.tif 000020
2017537408.tif 000021