JP2006228241A - プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 - Google Patents

プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 Download PDF

Info

Publication number
JP2006228241A
JP2006228241A JP2006076408A JP2006076408A JP2006228241A JP 2006228241 A JP2006228241 A JP 2006228241A JP 2006076408 A JP2006076408 A JP 2006076408A JP 2006076408 A JP2006076408 A JP 2006076408A JP 2006228241 A JP2006228241 A JP 2006228241A
Authority
JP
Japan
Prior art keywords
dependency
instruction
rop
store
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006076408A
Other languages
English (en)
Other versions
JP3919802B2 (ja
Inventor
David B Witt
ウィット,デイビッド・ビィ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US09/138,886 external-priority patent/US6212622B1/en
Priority claimed from US09/139,178 external-priority patent/US6212623B1/en
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2006228241A publication Critical patent/JP2006228241A/ja
Application granted granted Critical
Publication of JP3919802B2 publication Critical patent/JP3919802B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Abstract

【課題】プロセッサおよびプロセッサにおいて命令演算をスケジューリングするための方法を提供する。
【解決手段】プロセッサは、ストアアドレス命令演算に対するロード命令演算についてのオーダリング依存性を採用する。命令キューは、命令および依存性ベクトルを記憶し、依存性ベクトル内に示された各依存性が満たされるまで、命令のスケジューリングを禁止する。
【選択図】図2

Description

[技術分野]
この発明は、プロセッサの分野に関し、より特定的には、プロセッサにおける命令スケジューリングメカニズムに関する。
[背景となる技術]
スーパースカラプロセッサは、クロックサイクルごとに多数の命令を発行し実行することおよび設計と矛盾しない可能な最も高いクロック周波数を用いることにより、高性能を達成しようと試みる。クロックサイクルごとに実行される命令の数を増加させるための1つの方法は、アウトオブオーダ実行である。アウトオブオーダ実行においては、プログラムシーケンスの中で特定された順序(または「プログラム順序」)とは異なる順序で命令が実行されてもよい。プログラムシーケンス内で互いに近いある命令は、それらの同時実行を禁じる依存性を有し得るが、プログラムシーケンス内のその後の命令は以前の命令に対する依存性を有しない可能性がある。したがって、アウトオブオーダ実行は、(平均して)同時に実行される命令の数を増加させることによりスーパースカラプロセッサの性能を増し得る。
残念ながら、アウトオブオーダ実行のためのスケジューリング命令は、プロセッサにハードウェアのさらなる複雑さを与えてしまう。「スケジューリング」という用語は、命令を実行するための順序を選択することを一般的に指す。典型的には、プロセッサは、できる限り迅速に命令をスケジューリングして、(たとえばアウトオブオーダで命令を実行してさまざまな命令タイプの依存性およびハードウェアの利用可能性を扱うことにより)平均命令実行速度を最大化しようと試みる。これらの複雑さが、プロセッサが動作し得るクロック周波数を限定してしまうことがある。特に、命令間の依存性はスケジューリングハードウェアによって尊重されなければならない。一般的に、本明細書中では、「依存性」という用語は、第1の命令と、プログラム順で第1の命令に続く第2の命令であって、そのような第2の命令の実行に先立って第1の命令の実行を必要とするような第2の命令との間の関係を指す。さまざまな依存性が規定され得る。たとえば、第2の命令のソースオペランドが第1の命令のデスティネーションオペランドならば、オペランド依存性が発生する。
一般的に、命令は1つまたはそれ以上のソースオペランドおよび1つまたはそれ以上のデスティネーションオペランドを有してもよい。ソースオペランドは、命令定義に従って処理されて、(デスティネーションオペランドである)1つまたはそれ以上の結果をもたらすべき入力値である。ソースオペランドおよびデスティネーションオペランドは、プロセッサに対して外部のメモリ場所に記憶されたメモリオペランドであってもよく、またはプロセッサ内に含まれるレジスタ記憶場所に記憶されたレジスタオペランドであってもよい。プロセッサによって用いられる命令セットアーキテクチャは、アーキテクチャ上で設計された多数のレジスタを規定する。これらのレジスタは命令セットアーキテクチャによって存在が規定され、命令は、アーキテクチャ上で設計されたレジスタをソースおよびデスティネーションオペランドとして用いるようにコード化され得る。命令は、命令のオペランドフィールドの中のレジスタ番号(またはレジスタアドレス)を介して、特定のレジスタをソースまたはデスティネーションオペランドとして特定する。レジスタ番号は、ア
ーキテクチャ上で設計されたレジスタの間で、選択されたレジスタを一意に識別する。ソースオペランドはソースレジスタ番号によって識別され、デスティネーションオペランドはデスティネーションレジスタ番号によって識別される。
オペランド依存性に加えて、1つまたはそれ以上のタイプのオーダリング依存性がプロセッサによって要求されることがある。オーダリング依存性は、たとえば用いられるハードウェアを単純化するために、または正しいプログラム実行を行なわせるために用いられることがある。強制的にある命令が他の命令に対して順序付けて実行されるようにすることにより、命令のアウトオブオーダ実行の結果を扱うためのハードウェアが省略され得る。たとえば、ロードメモリ演算が、ストアメモリ演算に対してアウトオブオーダで行なわれることが許されるのであれば、ハードウェアは、(アウトオブオーダで行なわれていたかもしれない)その後のロードメモリ演算によってアクセスされた同じメモリ場所を更新する、先立つストアメモリ演算を検出する必要があり得る。一般的に、オーダリング依存性はマイクロアーキテクチャごとに変わり得る。
スケジューリングは、より多数の命令が「飛行中」(すなわちプロセッサ内で処理中)になるに従って、高い周波数で機能するのがますます困難になる。命令間の依存性は、これから完了しなければならないより多数の命令のためにさらに頻繁になり得る。さらに、依存性が満たされたとき(すなわち、第2の命令のスケジューリングを依存性が妨げる必要がない点に第1の命令の進行が進んだとき)に検出が困難になるのと同様、より多数の命令の間の依存性を検出することはさらに困難になり得る。したがって高周波数動作に対して修正可能なスケジューリングメカニズムが所望される。
さらに、マイクロアーキテクチャによって課され得る多種のオーダリング依存性を扱えるスケジューリングメカニズムが所望される。オーダリング依存性は、オペランド依存性に加えて、特定の命令が比較的多数の先行命令に依存するという結果を招く。したがって、多種の依存性を許容できる柔軟なスケジューリングメカニズムが所望される。
上述の問題は、ロード命令演算のための、ストアアドレス命令演算に対するオーダリング依存性を用いるプロセッサにより大部分が解決される。プロセッサは、ストア演算をストアアドレス命令演算およびストアデータ命令演算に分割する。ストアアドレス命令演算は記憶装置のアドレスを生成し、ストアデータ命令演算は対応するデータをロード/ストアユニットに経路指定する。プロセッサは処理中のストアアドレスの各々を示すストアアドレス依存性ベクトルを維持し、かつ各々のロード命令演算について、ストアアドレス命令演算に対するオーダリング依存性を記録する。したがって、各々の先行するストアアドレス命令演算がスケジューリングされてしまうまで、ロード命令演算はスケジューリングされない。効果として、ロード命令演算の実行の際のロードアドレスの依存性チェックに、ストアアドレスが利用可能である。メモリ依存性が存在すれば、ロード命令演算の実行の際にそれが検出され得る。
概して言えば、この発明は、ストアアドレスレジスタおよびそれに結合された依存性ベクトル生成ユニットを含むプロセッサを意図する。ストアアドレスレジスタは、プロセッサ内で処理中のストアアドレス命令演算を識別するストアアドレス依存性ベクトルを記憶するように構成される。依存性ベクトル生成ユニットは、命令演算に対する依存性ベクトルを生成するように構成される。ロード命令演算に対しては、依存性ベクトル生成ユニットは依存性ベクトルの中にストアアドレス依存性ベクトルを含むように構成される。
この発明はプロセッサ内でロード命令演算を行なうための方法をさらに意図する。プロセッサ内で処理中の各々のストアアドレス命令演算を示すストアアドレス依存性ベクトル
が維持される。ロード命令演算に対する依存性ベクトルは、ストアアドレス依存性ベクトルを含んで生成される。依存性ベクトルに示された各々の命令演算が完了するまで、ロード命令演算はスケジューリングを禁じられる。
命令キューおよびその中の、柔軟な依存性記録構造を可能にする依存性ベクトルを用いるプロセッサも開示される。依存性ベクトルは、命令演算をスケジューリングするためのユニバーサルメカニズムを有利に提供し得る、各々の命令キューエントリごとの依存性表示を含む。任意の数の依存性が、互いの命令演算に対する依存性まで、所与の命令演算に対して記録され得る。依存性ベクトルは任意の数の依存性を記録するように構成されるため、所与の命令演算はいかなる他の命令演算に対しても順序付けされ得る。したがって、同時実行または実行中の特定の命令演算の順序に対して、いかなるアーキテクチャ上のまたはマイクロアーキテクチャ上の制限が与えられてもよい。プロセッサの実現の進展の間に、(たとえば実現を単純化する)さらなる実行順序制限を加えることが望ましくなれば、オーダリング依存性を示すことにより依存性ベクトル内にさらなる制限を受入れてもよい。命令キューは、依存性ベクトルを評価しかつ、記録された依存性が満たされた各々の命令演算ごとにスケジューリングを要求する。柔軟性が高められることにより、命令キューの、さまざまなプロセッサの実現に向けた好適性が向上され得る。
したがって、この発明は、依存性ベクトル生成ユニットおよび命令キューを含むプロセッサも意図する。依存性ベクトル生成ユニットは、命令演算に対応する依存性ベクトルを生成するように構成される。依存性ベクトルおよび命令演算を受取るように結合されて、命令キューは、依存性ベクトル内に示された各々の依存性が満たされるまで、命令演算のスケジューリングを禁じるように構成される。依存性ベクトルは、命令キュー内の任意の数の他の命令演算に対する依存性を示すことができる。
この発明は、プロセッサにおいて命令演算をスケジューリングするための方法をさらに意図する。各々の命令演算に対応する依存性ベクトルが生成される。依存性ベクトルは、命令キューの中の他の命令演算に対する任意の数の依存性を示す。依存性ベクトルおよび対応する命令演算は命令キューに記憶される。依存性ベクトルにより示された任意の数の依存性の各々が満たされ、その後(依存性が満たされるのに応答して)対応する命令演算がスケジューリングされる。
この発明の他の目的および利点は、以下の詳細な説明を読むことおよび添付の図面を参照することにより明らかになる。
この発明は、さまざまな修正および代替的な形が可能であり、その特定の実施例が例示の目的のために図面で示されかつ本明細書中に詳細に説明される。しかしながら、その図面および詳細な説明は、この発明を開示された特定の形に制限することを意図するものではなく、一方、その意図は添付の請求項に記載されたこの発明の精神および範囲内のすべての修正、均等物および代替物を扱うことであることを認められたい。
図1を参照すると、プロセッサ10の1つの実施例のブロック図が示される。他の実施例が可能でありかつ意図される。図1の実施例では、プロセッサ10は、ライン予測子12、命令キャッシュ(I−キャッシュ)14、整列ユニット16、分岐履歴テーブル18、間接アドレスキャッシュ20、戻りスタック22、デコードユニット24、予測子ミスデコードユニット26、マイクロコードユニット28、マップユニット30、マップサイロ32、アーキテクチャリネームブロック34、1対の命令キュー36A−36B、1対のレジスタファイル38A−38B、1対の実行コア40A−40B、ロード/ストアユニット42、データキャッシュ(D−キャッシュ)44、外部インターフェイスユニット
46、PCサイロおよびリダイレクトユニット48ならびに命令TLB(ITB)50を含む。ライン予測子12は、ITB50、予測子ミスデコードユニット26、分岐履歴テーブル18、間接アドレスキャッシュ20、戻りスタック22、PCサイロおよびリダイレクトブロック48、整列ユニット16ならびにI−キャッシュ14に接続される。I−キャッシュ14は整列ユニット16に接続される。整列ユニット16は予測子ミスデコードユニット26およびデコードユニット24にさらに接続される。デコードユニット24はマイクロコードユニット28およびマップユニット30にさらに接続される。マップユニット30は、マップサイロ32、アーキテクチャリネームブロック34、命令キュー36A−36B、ロード/ストアユニット42、実行コア40A−40BならびにPCサイロおよびリダイレクトブロック48に接続される。命令キュー36A−36Bは、互いならびにそれぞれの実行コア40A−40Bおよびレジスタファイル38A−38Bに接続される。レジスタファイル38A−38Bは、互いおよびそれぞれの実行コア40A−40Bに接続される。実行コア40A−40Bは、ロード/ストアユニット42、データキャッシュ44ならびにPCサイロおよびリダイレクトユニット48にさらに接続される。ロード/ストアユニット42は、PCサイロおよびリダイレクトユニット48、D−キャッシュ44ならびに外部インターフェイスユニット46に接続される。D−キャッシュ44はレジスタファイル38に接続され、外部インターフェイスユニット46は外部インターフェイス52に接続される。文字が後に付く参照番号で本明細書中に示された要素は、参照番号のみによってまとめて参照される。たとえば、命令キュー36A−36Bは命令キュー36とまとめて参照される。
図1の実施例では、プロセッサ10は可変バイト長の複合命令セットコンピューティング(CISC)命令セットアーキテクチャを用いる。たとえば、プロセッサ10は(IA−32とも称される)x86命令セットアーキテクチャを用いてもよい。他の実施例は、固定長命令セットアーキテクチャおよび縮小命令セットコンピューティング(RISC)命令セットアーキテクチャを含む他の命令セットアーキテクチャを用いてもよい。図1に示されるある特徴はそのようなアーキテクチャでは省略されてもよい。
ライン予測子12はI−キャッシュ14のためのフェッチアドレスを生成するように構成され、命令演算のラインに関する情報を整列ユニット16に与えるようにさらに構成される。一般的に、ライン予測子12は、プロセッサ10によって以前に投機的にフェッチされた命令演算のラインおよびラインのフェッチの際に選択されるべき各々のラインに対応する1つまたはそれ以上の次のフェッチアドレスを記憶する。1つの実施例では、ライン予測子12は、各々が命令演算の1つのラインを規定する、1Kのエントリを記憶するように構成される。ライン予測子12は、所望により、たとえば各々256のエントリの4つのバンクにバンク化され、デュアルポート化なしに同時の読出および更新を可能にする。
ライン予測子12は、次のフェッチアドレスをI−キャッシュ14に与えて、対応する命令バイトをフェッチする。I−キャッシュ14は命令バイトを記憶するための高速キャッシュメモリである。1つの実施例に従うと、I−キャッシュ14はたとえば、256Kバイトの、64バイトのキャッシュラインを用いるフォーウェイセットアソシアティブ編成を含んでもよい。しかしながら、いずれのI−キャッシュ構造も好適であり得る。さらに、次のフェッチアドレスは入力としてライン予測子12に戻されて、命令演算の対応するラインに関する情報をフェッチする。次のフェッチアドレスは、PCサイロおよびリダイレクトユニット48に報告された例外条件に応答して、ITB50によって与えられたアドレスによってオーバライドされ得る。
ライン予測子によって与えられた次のフェッチアドレスは(ラインが非分岐命令で終了すれば)ライン内の最後の命令に続くアドレスであろう。これに代えて、次のフェッチア
ドレスはラインを終了させる分岐命令のターゲットアドレスであってもよい。さらに別の代替例では、ラインは戻り命令によって終了されてもよく、その場合次のフェッチアドレスは戻りスタック22から導かれる。
フェッチアドレスに応答して、ライン予測子12はフェッチアドレスで始まる命令演算のラインに関する情報を整列ユニット16に与える。整列ユニット16はフェッチアドレスに対応する命令バイトをI−キャッシュ14から受取り、命令バイトを選択して、与えられた命令演算情報に従って1組の発行位置とする。より特定的には、ライン予測子12は、ライン命令演算内の各々の命令ごとのシフト量および命令のマッピングを、ラインを含む命令演算の組に与える。命令は複数の命令演算に対応してもよく、したがってその命令に対応するシフト量が多数の発行位置への命令バイトの選択に用いられてもよい。発行位置は、ライン内の各々の可能な命令演算ごとに与えられる。1つの実施例では、命令演算のラインは6つまでの命令に対応する8つまでの命令演算を含み得る。一般的には、本明細書中は、命令演算のラインとはデコードユニット24に同時に発せられる命令演算群を指す。命令演算のラインは、1つの単位としてマイクロプロセッサ10のパイプラインを通って命令キュー36に進む。命令キュー36に記憶されると、個別の命令演算はどのような順序で実行されてもよい。
デコードユニット24内の発行位置(および命令キュー36までのその後のパイプライン段)が、それらのパイプライン段内のハードウェアに対するその、ライン内の命令演算のプログラム順序を規定する。整列ユニット16によって発行位置に整列された命令演算は、それが命令キュー36A−36B内に記憶されるまで、その発行位置に留まる。したがって、第1の発行位置は、第1の発行位置内の命令演算がプログラム順序の第2の発行位置内に同時にある命令演算に先行すれば、第2の発行位置に先行するものとされてもよい。同様に、第1の発行位置は、第1の発行位置内の命令演算がプログラム順序の第2の発行位置内に同時にある命令演算に続けば、第2の発行位置に続くものとされてもよい。発行位置内の命令演算はまた、ライン内の他の命令演算に先行するものまたは続くものとされてもよい。
本明細書中では、命令演算(またはROP)とは実行コア40A−40B内の実行ユニットが単一のエンティティとして実行するように構成される演算である。単純な命令は単一の命令演算に対応し得るが、より複雑な命令は多数の命令演算に対応し得る。より複雑な命令のうちあるものはマイクロコードユニット28内でマイクロコードルーチンとして実現され得る。さらに、非CISC命令セットを用いる実施例は各々の命令ごとに単一の命令演算を用い得る(すなわち命令および命令演算はこのような実施例においては同義であろう)。1つの特定の実施例では、ラインは6つまでの命令に対応する8つまでの命令演算を含み得る。さらに、特定の実施例は、分岐命令が検出されれば、6つの命令および/または8つの命令演算よりも少ないところでラインを終了させ得る。所望により、ラインに対する、命令演算に関するさらなる制限が用いられてもよい。
ライン予測子12によって生成される次のフェッチアドレスは、分岐履歴テーブル18、間接アドレスキャッシュ20および戻りスタック22に経路指定される。分岐履歴テーブル18は、次のフェッチアドレスによって識別されるラインの終わりとなる条件付分岐命令のために分岐履歴を与える。ライン予測子12は、分岐履歴テーブル18によって与えられた予測を用いて、ラインの終わりの条件付分岐命令がテークンいう予測がされるべきか、ノットテークンという予測がされるべきかを判断し得る。1つの実施例では、ライン予測子12はテークンまたはノットテークンを選択するのに用いられる分岐予測を記憶してもよく、分岐履歴テーブル18は、ライン予測子の予測を取消して異なる次のフェッチアドレスを選択させ得る、より正確な予測を与えるのに用いられる。間接アドレスキャッシュ20は頻繁に変化する間接分岐ターゲットアドレスを予測するのに用いられる。ラ
イン予測子12は、以前に生成された間接ターゲットアドレスを次のフェッチアドレスとして記憶してもよい。間接アドレスキャッシュ20は、対応するラインが間接分岐命令によって終われば、ライン予測子12によって与えられた次のフェッチアドレスをオーバライドしてもよい。さらに、命令演算のライン内の最後の命令に続くアドレスは、ラインがサブルーチン呼出命令によって終われば、戻りスタック22の上にプッシュされてもよい。戻りスタック22は、戻り命令によって終了されたラインのための潜在的な次のフェッチアドレスとして、その最上部に記憶されたアドレスをライン予測子12に与える。
次のフェッチアドレスおよび命令演算情報を上述のブロックに与えることに加え、ライン予測子12は、次のフェッチアドレスおよび命令演算情報をPCサイロおよびリダイレクトユニット48に与えるように構成される。PCサイロおよびリダイレクトユニット48はフェッチアドレスおよびライン情報を記憶し、命令の順序通りのリタイアだけでなく例外をフェッチする命令をリダイレクトする役割を担う。PCサイロおよびリダイレクトユニット48はプロセッサ10内で処理中であり得る命令演算の複数のラインに対応するフェッチアドレスおよび命令演算情報を記憶するための環形バッファを含み得る。命令のラインのリタイアの際、PCサイロおよびリダイレクトユニット48は、それぞれ条件付分岐および間接分岐の実行に従って分岐履歴テーブル18および間接アドレスキャッシュ20を更新するであろう。例外の処理の際に、PCサイロおよびリダイレクトユニット48は、例外を引起した命令に続くエントリを戻りスタック22から消去してもよい。さらに、PCサイロおよびリダイレクトユニット48は例外を引起した命令の表示を、マップユニット30、命令キュー36およびロード/ストアユニット42に与えて、それによりこれらのユニットは例外を引起した命令に続く命令を取消しかつこれに従って投機的状態を回復できる。
1つの実施例では、PCサイロおよびリダイレクトユニット48は各々の命令演算にシーケンス番号(R♯)を割当て、プロセッサ10内で処理中の命令演算の順序を識別する。PCサイロおよびリダイレクトユニット48は、ラインの各々の可能な命令演算にR♯を割当て得る。ラインが命令演算の最大数よりも少ない数しか含まなければ、割当てられたR♯のいくつかはそのラインに対しては使用されない。しかしながら、PCサイロおよびリダイレクトユニット48は命令演算の次のラインに次の組のR♯を割当てるように構成され、したがって割当てられたが未使用のR♯は、命令演算の対応するラインがリタイアするまで使用されないままである。この態様で、所与のラインに割当てられたR♯の一部分がプロセッサ10内のラインを識別するのに用いられ得る。1つの実施例では、最大で8つのROPが1つのラインに割当てられてもよい。したがって、各々のライン内の第1のROPは8の倍数であるR♯を割当てられ得る。したがって未使用のR♯は自動的にスキップされる。
前述の議論では、次のアドレスを予測しかつ命令演算のラインに対する命令演算情報を与えるライン予測子12が説明された。この演算は各々のフェッチアドレスがライン予測子12内にヒットする限り発生する。ライン予測子12内にミスを検出すると、整列ユニット16は対応する命令バイトをI−キャッシュ14から予測子ミスデコードユニット26に与える。予測子ミスデコードユニット26はミスしたフェッチアドレスによって特定されたオフセットで始まる命令をデコードし、命令演算情報のラインおよび次のフェッチアドレスを生成する。予測ミスデコードユニット26は、プロセッサ10が設計対象としたどのような命令演算(たとえば命令演算の最大数、命令の最大数、分岐命令の終了など)のラインに対しどのような制限でも課す。ラインのデコードを完了すると、予測子ミスデコードユニット26は、記憶のためにライン予測子12に情報を与える。注意すべきは、予測子ミスデコードユニット26が、命令がデコードされると同時に命令を発行するように構成され得ることである。これに替えて、予測子ミスデコードユニット26は命令情報のラインをデコードして、それを記憶のためにライン予測子12に与えてもよい。その
後、ミスを生じたフェッチアドレスがライン予測子12で再試行され、ヒットが検出され得る。さらに、ライン予測子12のヒットが検出され、I−キャッシュ14でミスが起こり得る。対応する命令バイトは外部インターフェイスユニット46を介してフェッチされかつI−キャッシュ14に記憶され得る。
1つの実施例では、ライン予測子12およびI−キャッシュ14は物理アドレス指定を用いる。しかしながら、例外を検出すると、PCサイロおよびリダイレクトユニット48は論理(または仮想)アドレスを与えられる。したがって、リダイレクトアドレスはライン予測子12への表示のためにITB50によって変換される。さらに、PCサイロおよびリダイレクトユニット48は相対分岐ターゲットアドレスなどのPC相対計算に用いるために仮想ルックアヘッドPCを維持する。各々のラインに対応する仮想ルックアヘッドPCはITB50によって変換され、対応する物理アドレスがライン予測子12によってもたらされる物理フェッチアドレスと一致するかを検証する。不一致が発生すれば、ライン予測子12は正しい物理アドレスで更新され、正しい命令がフェッチされる。PCサイロおよびリダイレクトユニット48は、保護バウンダリなどを超えるフェッチに関する例外をさらに扱う。PCサイロおよびリダイレクトユニット48は、最も最近リタイアされたもののアドレスを示すリタイアPC値も維持する。
デコードユニット24は、上述のように複数の発行位置の中の整列ユニット16から命令演算を受取るように構成される。デコードユニット24は、(命令バイトに対応するどの命令演算が特定の発行位置で生成されるべきかの表示とともに)各々の発行位置と整列された命令バイトを並列にデコードする。デコードユニット24は各々の命令演算ごとにソースおよびデスティネーションオペランドを識別して、実行コア40A−40Bによって用いられる命令演算コード化を生成する。デコードユニット24は、マイクロコードで実現される命令のためにマイクロコードユニット28からマイクロコードルーチンをフェッチするようにも構成される。
1つの特定の実施例に従うと、以下の命令演算がプロセッサ10によってサポートされる。すなわち、整数、(マルチメディアを含む)浮動小数点加算、(マルチメディアを含む)浮動小数点乗算、分岐、ロード、ストアアドレス生成およびストアデータである。各々の命令演算は2つまでのソースレジスタオペランドおよび1つのデスティネーションレジスタオペランドを用い得る。1つの特定の実施例に従うと、単一のデスティネーションレジスタオペランドは整数結果とコンディションコード(またはフラグ)更新の両者を記憶する整数ROPに割当てられ得る。対応する論理レジスタは両者とも整数演算のリタイアの際、対応するPR♯を受取る。ある命令は同じタイプの2つの命令演算を生成して、2つのデスティネーションレジスタを更新し得る(たとえば、ESPおよび特定のデスティネーションレジスタを更新するPOPなど)。
デコードされた命令演算ならびにソースおよびデスティネーションレジスタ番号がマップユニット30に与えられる。マップユニット30は、各々の命令演算の各々のデスティネーションレジスタオペランドおよびソースレジスタオペランドに物理レジスタ番号(PR♯)を割当てることにより、レジスタのリネームを行なうように構成される。物理レジスタ番号はレジスタファイル38A−38B内のレジスタを識別する。さらに、マップユニット30は各々の命令演算にキュー番号(IQ♯)を割当てて、命令演算を記憶するように割当てられた命令キュー36A−36B内の場所を識別する。マップユニット30は、命令演算のソースオペランドに割当てられた各々の物理レジスタ番号を更新する命令のキュー番号を与えることにより、各々の命令演算ごとの依存性の表示をさらに与える。マップユニット30は、物理レジスタ番号および(対応する論理レジスタ番号だけでなく)各々の命令演算に割当てられた番号への命令で、マップサイロ32を更新する。さらに、マップサイロ32は、命令のラインに先行する論理レジスタに対応するルックアヘッド状
態およびPCサイロに対して命令のラインを識別するR♯を記憶するように構成され得る。上述のPCサイロと同様に、マップサイロ32はエントリの環形バッファを含み得る。各々のエントリは命令演算の1つのラインに対応する情報を記憶するように構成され得る。
マップユニット30およびマップサイロ32は、PCサイロ48からリタイア表示を受取るようにさらに構成される。命令演算のラインをリタイアする際、マップサイロ32は、ラインに割当てられかつ論理レジスタ番号に対応するデスティネーション物理レジスタ番号を、記憶のためにアーキテクチャ的リネームブロック34に伝える。アーキテクチャ的リネームブロック34が各々の論理レジスタに対応する物理レジスタ番号を記憶し、各々の論理レジスタに対して確定されたレジスタ状態を表わす。対応する論理レジスタの、新たな物理レジスタ番号での更新の際、アーキテクチャ的リネームブロック34から外された物理レジスタ番号は、その後の命令への割当てのため、物理レジスタ番号のフリーリストに戻される。1つの実施例では、物理レジスタ番号をフリーリストに戻すのに先だって、物理レジスタ番号はアーキテクチャ的リネームブロック34内の残余の物理レジスタ番号と比較される。物理レジスタ番号が、外された後にもアーキテクチャ的リネームブロック34内で依然として示されていれば、物理レジスタ番号はフリーリストに加えられない。そのような実施例は、同じ物理レジスタ番号が命令の2つ以上の結果を記憶するのに使われる場合に用いられ得る。たとえば、x86命令セットアーキテクチャを用いる実施例は、浮動小数点オペランドを記憶するのに十分大きな物理レジスタを提供し得る。この態様では、いかなるタイプのオペランドを記憶するのにいかなる物理レジスタが用いられてもよい。しかしながら、整数オペランドおよびコンディションコードオペランドは所与の物理レジスタ内の空間を十分に利用していない。そのような実施例では、プロセッサ10は、命令の整数結果とコンディションコード結果の両者を記憶する単一の物理レジスタを割当ててもよい。その後の物理レジスタに対応するコンディションコード結果を上書きする命令のリタイアは同じ整数レジスタを更新せず、したがって物理レジスタは、新たなコンディションコード結果を確定してもフリーとはされない。同様に、その後の物理レジスタに対応する整数レジスタを更新する命令のリタイアはコンディションコードレジスタを更新せず、したがって物理レジスタは新たな整数結果を確定してもフリーとはされない。
さらに、マップユニット30およびマップサイロ32はPCサイロ48から例外表示を受取るよう構成される。例外を起こした命令演算を含むラインに続く命令演算のラインはマップサイロ32中で無効とマークされる。続く命令演算のラインに対応する物理レジスタ番号は対応するリタイア用のラインを選択する際に解放される(アーキテクチャのリネームブロック34は無効化されたデスティネーションレジスタによって更新されない)。加えて、マップユニット30によって維持されるルックアヘッドレジスタ状態は例外を起こした命令に対応するルックアヘッドレジスタ状態に復元される。
命令演算のライン、ソース物理レジスタ番号、ソースキュー番号、およびデスティネーション物理レジスタ番号は、マップユニット30によって割当てられるキュー数に従って命令キュー36A−36Bに記憶される。実施例の1つに従うと、命令キュー36A−36Bは対称であり、あらゆる命令を記憶できる。さらに、いずれかの命令キューに記憶される他の命令演算に関して特定の命令演算に対する依存性が起こり得る。たとえばマップユニット30は命令演算のラインを命令キュー36A−36Bの一方に記憶し、続く命令演算のラインを命令キュー36A−36Bの他方に記憶してもよい。少なくとも命令演算がスケジューリングされるまで、命令演算は命令キュー36A−36Bに残る。実施例の1つにおいて、命令演算はリタイアされるまで命令キュー36A−36Bに残る。
命令キュー36A−36Bは、実行のための特定の命令演算をスケジューリングする際
に、その特定の命令演算がどのクロックサイクルでレジスタファイル38A−38Bを更新するかを定める。実行コア40A−40B内の異なる実行ユニットは異なる数のパイプライン段(すなわち異なる待ち時間)を用いてもよい。さらに、特定の命令はパイプライン中で他のものより長い待ち時間を経験してもよい。したがって(いくつかのクロックサイクル中の)特定の命令演算に対する待ち時間を測定するカウントダウンが生成される。命令キュー36A−36Bは(レジスタファイルを読取る依存性命令演算に先立ち、またはそれと同時に更新が起こるまで)特定された数のクロックサイクルを待って、その特定の命令演算に依存する命令演算がスケジューリングされ得ることを示す。たとえば特定的な実施例の1つにおいては、依存性命令演算はそれらが依存する命令演算が完了しレジスタファイル38A−38Bを更新するのに2クロックサイクル先立ってスケジューリングされてもよい。別の実施例においては、依存性命令演算をそれらが依存する命令演算が完了しレジスタファイル38A−38Bを更新するのに先行または後続する種々の数のクロックサイクルにおいてスケジューリングしてもよい。各命令キュー36A−36Bはその命令キュー内での命令演算のためのカウントダウンを維持し、カウントダウンの終了の際に内部で依存性命令演算がスケジューリングされるようにする。加えて、命令キューはカウントダウンが終了した際に他の命令キューに表示を与える。続いて別の命令キューが依存性命令演算をスケジューリングしてもよい。この、他の命令キューに対する命令演算完了の遅延した伝達によって、レジスタファイル38A−38Bは実行コア40A−40Bの1つによって与えられる結果を他のレジスタファイルに伝搬できる。各レジスタファイル38A−38Bはプロセッサ10によって用いられる1組の物理レジスタを実現し、実行コア40A−40Bの1つによって更新される。次いでその更新が他のレジスタファイルに伝搬される。なお、命令キュー36A−36Bはその依存性が満たされたときに(すなわちキュー内での順序に関してアウトオブオーダーで)命令をスケジューリングしてもよい。
命令キュー36Aからスケジューリングされた命令演算はレジスタファイル38Aからのソース物理レジスタ番号に従ってソースオペランドを読取り、実行のために実行コア40Aに運ばれる。実行コア40Aは命令演算を実行し、レジスタファイル38A内のデスティネーションに割当てられた物理レジスタを更新する。いくつかの命令演算はデスティネーションレジスタを有さず、この場合に実行コア40Aはデスティネーション物理レジスタを更新しない。加えて、実行コア40Aは命令演算のR♯および命令演算に関する例外情報(あれば)をPCサイロおよびリダイレクトユニット48に伝達する。命令キュー36B、レジスタファイル38Bおよび実行コア40Bは類似の態様で動作してもよい。
実施例の1つにおいて、実行コア40Aおよび実行コア40Bは対称である。各実行コア40はたとえば浮動小数点加算ユニット、浮動小数点乗算ユニット、2つの整数ユニット、分岐ユニット、ロードアドレス生成ユニット、ストアアドレス生成ユニット、およびストアデータユニットなどを含んでもよい。それ以外の構成の実行ユニットも可能である。
デスティネーションレジスタを有さない命令演算には、ストアアドレス生成、ストアデータ演算、および分岐演算などがある。ストアアドレス/ストアデータ演算はロード/ストアユニット42に結果を与える。ロード/ストアユニット42はメモリデータ演算を行なうためのインターフェイスをD−キャッシュ44に与える。実行コア40A−40Bは命令のアドレスオペランドに基づいてロードROPおよびストアアドレスROPを実行し、それぞれロードおよびストアアドレスを生成する。より特定的には、ロードアドレスおよびストアアドレスは実行コア40A−40Bによる生成の際にD−キャッシュ44に(実行コア40A−40BとD−キャッシュ44との接続を介して直接的に)提供されてもよい。D−キャッシュ44でロードアドレスがヒットすると、データはD−キャッシュ44からレジスタファイル38に与えられる。他方で、ヒットしたストアアドレスはストア
キューエントリを割当てられる。続いて、ストアデータが(ストアデータをレジスタファイル38A−38Bからロード/ストアユニット42に経路付けるために用いられる)ストアデータ命令演算によって与えられる。ストア命令がリタイアされる際に、データはD−キャッシュ44に記憶される。加えてロード/ストアユニット42は、(外部インターフェイス46を介した)D−キャッシュ44をミスしたロード/ストアアドレスを、続いてキャッシュに格納するために記憶し、ミスしたロード/ストア演算を再び試みるためのロード/ストアバッファを含んでもよい。ロード/ストアユニット42はさらにロード/ストアメモリ依存性を取扱うために構成される。
図2に、命令キュー36Aの実施例の1つを例示するブロック図を示す。命令キュー36Bも同様に構成されてもよい。その他の実施例も可能であり、予期される。図2の実施例において、命令キュー36Aは依存性ベクトルキュー60A、キュー制御ユニット62A、オペコード/定数記憶装置64A、およびピック論理66Aを含む。依存性ベクトルキュー60Aはマップユニット30からの依存性ベクトルバス68、キュー制御ユニット62A、ピック論理66A、および命令キュー36Bに接続される。キュー制御ユニット62Aはマップユニット30からのテールポインタ制御バス70と、マップユニット30からのIQ♯バス72Aと、オペコード/定数記憶装置64Aとに接続される。オペコード/定数記憶装置64Aはピック論理66Aと、マップユニット30からのソース/デスティネーションPR♯バス72Bと、マップユニット30からのオペコード/R♯/即値フィールドバス74と、PCサイロ48とに接続される。オペコード/定数記憶装置64Aはさらにバス76に接続され、このバスを介して、選択されたオペコード、即値データ、PR♯、R♯およびIQ♯をレジスタファイル38Aおよび実行コア40Aに運び得る。ピック論理66AはストアアドレスIQ♯バス78Aに接続される。
一般的に、ROPにはマップユニット30によってそのROPに割当てられたIQ♯に対応して、依存性ベクトルキュー60Aおよびオペコード/定数記憶装置64A内のエントリが割当てられる。言換えると、IQ♯が依存性ベクトルキュー60Aおよびオペコード/定数記憶装置64A内のエントリを識別し、その中にROPに対応する情報が記憶される。割当てられたIQ♯はIQ♯バス72Aを通じて命令キュー36Aに与えられる。キュー制御ユニット62Aが割当てられたIQ♯を受取り、対応する書込イネーブル信号をアサートすることによって、依存性ベクトルキュー60Aおよびオペコード/定数記憶装置64Aは割当てられたエントリに受取った情報を記憶できる。
依存性ベクトルキュー60Aは命令キュー36A内に表わされた各ROPに対応する依存性ベクトルを記憶する。一般的に、「依存性ベクトル」は対応するROPに対して示される各依存性を記録する。その依存性はオペランド依存性でも、オーダリング依存性でもよい。依存性ベクトルの実施例の1つを以下に例示するが、他の実施例は異なる依存性ベクトルを用いてもよい。ROPは、対応する依存性ベクトルに記録された各依存性が満たされるまでスケジューリングされる資格がない。各依存性が満たされると、エントリに対応するスケジューリング要求ラインのスケジューリング要求信号が依存性ベクトルキュー60Aによってピック論理66Aにアサートされ、ピック論理は命令キュー36A内のROPを実行のためにスケジューリングする。命令キュー36Aによって受取られたROPのラインに対応する依存性ベクトルは依存性ベクトルバス68を通じて依存性ベクトルキュー60Aに運ばれる。
オペコード/定数記憶装置64AはROPをスケジューリングするために用いられる依存性情報以外の命令情報を記憶する。たとえば、ROPによって特定されるオペコードおよびあらゆる即値データがオペコード/定数記憶装置64Aに記憶される。加えて、PCサイロ48によってROPに割当てられたR♯もオペコード/定数記憶装置64Aに記憶される。ROPのラインに対応するオペコード、即値データおよびR♯は、マップユニッ
ト30からオペコード/R♯/即値フィールドバス74を介して受取られる。さらに、マップユニット30によってROPに割当てられたソースおよびデスティネーションPR♯がオペコード/定数記憶装置64Aに記憶される。ROPのラインに対応するソースおよびデスティネーションPR♯は、マップユニット30からソース/デスティネーションPR♯バス72Bを介して受取られる。オペコード/定数記憶装置64Aはたとえばランダムアクセスメモリ(RAM)を含んでもよい。代替的に、その他のさまざまな記憶装置(たとえば1組のレジスタまたはその他のクロックされる記憶デバイスなど)を用いてもよい。
ピック論理66Aは実行のためにスケジューリングされたROPのIQ♯をオペコード/定数記憶装置64Aに送る。オペコード/定数記憶装置64Aは選択されたIQ♯によって特定化されたエントリを読取り、対応するROPのオペコード、即値データ、PR♯、R♯、およびIQ♯をバス76を通じて実行コア40Aおよびレジスタファイル38Aに与える。レジスタファイル38AはソースPR♯を受取ってソースオペランドを読取る。実行コア40Aは残りの情報を受取ってROPを実行する。ピック論理66Aは、実行コア40A内の各実行ユニットに対するクロックサイクル当り1つまでの命令演算をスケジューリングするよう構成される。
実施例の1つにおいて、マップユニット30は所与のROPが実行される実行コア40A内の実行ユニットを割当てる。ある種のROPは実行ユニットの1つによってのみ実行されるかもしれず、よってその実行ユニットに割当てられる。他のROPは複数の実行ユニットによって実行されるかもしれず、それらは複数の実行ユニットの間になるべく平等に分割されてもよい。たとえば実施例の1つにおいて、実行コア40Aには2つの整数実行ユニットが含まれる。マップユニット30はROPのライン内の整数ROPを2つの整数実行ユニットに順番に割当ててもよい。ピック論理66AはROPの依存性が満たされると各ROPを割当てられた実行ユニットにスケジューリングする。特定的な実施例の1つにおいて、ピック論理66Aは依存性ベクトルキュー60Aおよびオペコード/定数記憶装置64Aによって受取られたROPのラインとともに、ROPのラインに対して割当てられた実行ユニットを受取る。代替的には、割当てられた実行ユニットは依存性ベクトルキュー60Aまたはオペコード/定数記憶装置64Aに記憶されて、スケジューリングに用いるためにピック論理66Aに運ばれてもよい。
ピック論理66Aは前述のカウントダウン回路を付加的に含むことによって、命令キュー36A−36B内の依存性ROPに関してスケジューリングされたROPが満たされたと考えられるクロックサイクルを定めてもよい。この実施例において、依存性はその依存性が見出されたROPの完了のいくらか前に満たされる。特に、命令キュー36A−36BからのROPのスケジューリングとROP読取レジスタファイル36A−36Bとの間には1つまたはそれ以上のパイプライン段が存在してもよい(たとえば1つの特定の実施例においては2段)。他の実施例はより多い段、または無段(すなわちレジスタファイル36A−36Bの更新の際にカウントダウンが終了する)を含むより少ない段を有してもよい。カウントダウンの終了の際に、完了するROPに割当てられた命令キュー36A内のエントリに対応するピック論理66Aによって、書込有効ラインの書込有効信号がアサートされる。書込有効信号は対応するキューエントリが別のROPに配置されるまでアサートされたままである。書込有効信号は対応する依存性が満たされたことを認識するために依存性ベクトルキュー60Aによって用いられる。言い換えると、完了されたROPに対して記録された依存性を有する各ROPは、その依存性が満たされたと認識し得る。その他の記録された依存性の各々が満たされると、依存性キュー60AはそのROPに対応するスケジューリング要求ラインのスケジューリング要求信号をアサートすることによってピック論理66Aにスケジューリングを要求してもよい。
各クロックサイクルにおいて、依存性ベクトルキュー60A内の各エントリは記憶された依存性ベクトルを評価することによってその依存性が満たされたかどうかを定める。記録された依存性が満たされると、対応するスケジューリング要求ラインの対応するスケジューリング要求信号がアサートされる。ここで、依存性ベクトルを「評価する」とは、どのROPが完了したかを示す書込有効信号とともに依存性ベクトル中に記録された依存性を調べて、どの依存性ベクトル記録が充足された依存性のみを記録しているかを判断することを示す。満たされた依存性のみを記録している依存性ベクトルに対応するROPは実行のために好適であり、ピック論理66Aにスケジューリング要求信号をアサートする。
この実施例において、ROPは最大2つのソースオペランドを有してもよく、したがって対応する依存性ベクトル内に示された最大2つのソースオペランド依存性を有してもよい。さらに、いくつかのオーダリング依存性はこの実施例においてロードROPに対して定められる。第1に、ロードROPは前のストアアドレスROPの各々に順序依存する。この依存性はロード/ストアユニット42によって用いられる依存性検査論理を簡略化するために課せられる。ロードROPの実行の際に前のストアのアドレスが入手不可能であるとき、(ストアのアドレスをロードのアドレスと比較することによって定められる)前のストアの1つに対する依存性を検出するための論理はより遅い時間における依存性をともかくも認識でき、かつ依存性を正確に取扱えることが必要である。他方で、各先行ストアアドレスROPに対するオーダリング依存性を強制することによって、ロードROPの実行の際にストアアドレスが入手可能となり、依存性検査を完了し得る。付加的には、後述のストア/ロード転送機構を介して特定のストアに対する依存性が予測されるとき、ロードROPはより早いストアデータROPに対するオーダリング依存性を経験してもよい。所望により他のタイプのオーダリング依存性を用いてもよい。たとえば、ある種の命令は同期命令である(すなわち、同期命令に先行する各命令は同期命令が実行される前に完了し、同期命令に後続する各命令は同期命令が実行される前には実行されない)。同期命令は各先行ROPに対する同期命令に係するオーダリング依存性を定め、および各後続ROPに対する同期命令に係するオーダリング依存性を定めることより達成されるであろう。
ロードROPに対するストアアドレスROPオーダリング依存性を記録するために、マップユニット30はストアアドレス依存性ベクトル(後述)を維持する。ストアアドレス依存性ベクトルは後続のロードROPに対する依存性ベクトルに含むために処理中のストアアドレスROPの各々を記録する。したがって、ストアアドレスROPが無事完了したことを定める際に、ピック論理66AはストアアドレスROPのIQ♯をストアアドレスIQ♯バス78Aを通じてマップユニット30に送る。
図2において例示されるとおり、この実施例の依存性ベクトルキュー60Aは命令キュー36B(およびより特定的には後述の図4に例示される類似の依存性ベクトルキュー)に接続される。依存性ベクトルキュー60Aはピック論理66Aによって与えられる書込有効ラインを命令キュー36B内の対応する依存性ベクトルキューに経路付け、命令キュー36Bに記憶されるROPに対応する書込有効ラインを受取る。論理的には、命令キュー36A−36Bは命令キュー36A内のエントリと命令キュー36B内のエントリとの合計に等しい数のエントリを有する単一の命令キューとして表わされてもよい。IQ♯の半分は命令キュー36A内のエントリを識別し、IQ♯の他方の半分は命令キュー36B内のエントリを識別する。たとえば、IQ♯の最上位ビットは、エントリを命令キュー36Aまたは命令キュー36B内にあるものとして識別してもよい。
依存性は、命令キュー36A−36Bの一方におけるROPと、他方の命令キュー内のROPとの間に存在してもよい。したがって、依存性ベクトルはどちらの命令キューからのROPに対応する依存性を記録してもよい。いずれの命令キューに対応する書込有効ラ
インも、記憶される依存性ベクトルの評価に用いるために各依存性ベクトルキューに経路付けられる。
キュー制御ユニット62Aはテールポインタ制御バス70を通じてマップユニット30と通信する。一般的にキュー制御ユニット62Aは、命令キュー36A内の最初の有効命令(プログラムオーダで)と命令キュー36A内の最後の有効命令(プログラムオーダで)とをそれぞれ示すヘッドおよびテールポインタを維持するよう構成される。キュー制御ユニット62Aは現在のテールポインタをテールポインタ制御バス70を通じてマップユニット30に運ぶ。マップユニット30が命令キュー36A内のキューエントリを割当てると、マップユニット30はテールポインタ制御バス70を介して、割当てられたキューエントリの数を戻すことによってキュー制御ユニット36Aがテールポインタを更新できるようにする。ROPのラインに対するテールポインタとヘッドポインタとの間の空間が不十分であるとき、キュー制御ユニット36Aはキュー空きなし信号をさらに送ってもよい。なおこの実施例において、命令キュー36Aに記憶される前にROPにはIQ♯、パイプライン段の数が割当てられてもよい。したがって、割当てられたIQ♯はROPとともに命令キュー36Aにパイプライン化されてもよい。マップユニット30内にIQ♯を割当ててテールポインタを更新する際に、マップユニット30および命令キュー36Aはパイプライン中にROPに対するキューエントリを実際上予約する。
PCサイロ48は、例外を経験するROPのR♯を、後続の命令を取消すためにプロセッサ10内のさまざまなパイプライン段に対して与えるよう構成される。したがって、オペコード/定数記憶装置64AはPCサイロ48から例外R♯を受取ってもよい。オペコード/定数記憶装置64Aは、例外R♯をそこに記憶されたR♯と比較する。オペコード/定数記憶装置64Aは、どのエントリがR♯をストアしているかをキュー制御ユニット62Aに対して示し、対応するROPが例外を経験するROPに後続することを示してもよい。そしてそれら示されたエントリは無効化され、テールポインタはキューから示されるエントリを削除するためにリセットされてもよい。
図3に、依存性ベクトル80の実施例の1つのブロック図を示す。その他の実施例も可能であり、予期される。図3に示されるとおり、依存性ベクトル80は各IQ♯(命令キュー36A−36B内のエントリの総数がNのとき、0からN−1)に対応する表示を含む。特定的な実施例の1つにおいて、Nは128であろうが、あらゆる好適な数を用いてもよい。各IQ♯に対応する表示は、対応するIQ♯が割当てられたROPに対して、依存性ベクトル80に対応するROPについての依存性が存在するかどうかを記録する。したがって依存性ベクトル80は対応するROPに対して任意の数の依存性(その他の処理中のROPの各々に対する依存性まで)を記録できる。特定の実施例の1つにおいては、各表示はセットされているときには対応するIQ♯が割当てられたROPに対する依存性を表示し、クリアされているときには対応するIQ♯が割当てられたROPに対する依存性がないことを表示するビットを含む。
依存性ベクトル80はROPをスケジューリングするためのユニバーサルな機構を提供するという効果がある。依存性ベクトル80は依存性の任意の数を記録するよう構成されるため、所与のROPをその他のあらゆるROPに関して順序付けできる。したがって、同時実行または実行における特定のROPの順序に対するあらゆるアーキテクチャ上またはマイクロアーキテクチャ上の制限を課すことができる。プロセッサ実装の開発中に、(たとえば実装を簡略化するために)付加的な実行順序制限を加えることが望ましいとき、その付加的な制限は依存性ベクトル80内でのオーダリング依存性を示すことによって可能となる。柔軟性が増すことにより、さまざまなプロセッサ実装に対する命令キュー36A−36Bの好適性を改善できる。
図4に、依存性ベクトルキュー60Aおよび命令キュー36Bからの依存性ベクトルキュー60Bの実施例の1つを例示するブロック図を示す。その他の実施例も可能であり、予期される。図4の実施例において、依存性ベクトルキュー60Aは第1の記憶装置90Aおよび第2の記憶装置90BならびにPH2ラッチ92AおよびPH1ラッチ94Aを含む。同様に、依存性ベクトルキュー60Bは第1の記憶装置90Cおよび第2の記憶装置90DならびにPH2ラッチ92BおよびPH1ラッチ94Bを含む。第1の記憶装置90AはPH2ラッチ92Aに接続され、さらに第2の記憶装置90Bに接続される。一方、第2の記憶装置90BはPH1ラッチ94Aに接続され、それはピック論理66A(図2に示す)に接続される。同様に、第2の記憶装置90DはPH1ラッチ94Bに接続され、さらに第1の記憶装置90Cに接続される。一方、第1の記憶装置90CはPH2ラッチ92Bに接続される。
より特定的には、PH1ラッチ94Aは1組のスケジューリング要求ライン96Aと1組の書込有効ライン98Aとに接続される。スケジューリング要求ライン96Aは第2の記憶装置90BからPH1ラッチ94Aを通って伝搬され、一方で書込有効ライン98AはPH1ラッチ94Aを通じて第2の記憶装置90Bおよび第2の記憶装置90Dに伝搬される。1組の中間スケジューリング要求ライン100AはPH2ラッチ92Aを通じて第1の記憶装置90Aから第2の記憶装置90Bに伝搬される。1組のスケジューリング要求ライン96Bおよび1組の書込有効ライン98BはPH2ラッチ92Bを通じてそれぞれピック論理66Bおよび第1の記憶装置90Cに同様に伝搬される。書込有効ライン98Bは第1の記憶装置90Aに同様に伝搬される。中間スケジューリング要求ライン100B上の1組の中間スケジューリング要求信号は第2の記憶装置90Dによって生成され、PH1ラッチ94Bを通じて第1の記憶装置90Cに伝搬される。各PH2ラッチ92A−92BはPH2クロック入力を受取り、一方各PH1ラッチ94A−94BはPH1クロック入力を受取る。依存性ベクトルキュー60Aおよび60Bはローテータ102に接続され、これはさらにマップユニット30からの依存性ベクトルバス68(たとえば、発行位置0に対する依存性ベクトルを与える依存性ベクトルバス68A、発行位置1に対する依存性ベクトルを与える依存性ベクトルバス68Bなど)に接続される。ローテータ102はキュー制御ユニット62からの入力を受取るマルチプレクサ(mux)104からローテート制御を受取るように接続される。さらに、依存性ベクトルキュー60Aはキュー制御ユニット62Aから1組の書込イネーブル106を受取り、依存性ベクトルキュー60Bは同様にキュー制御ユニット62Bから1組の書込イネーブル108を受取る。
図4に示すような依存性ベクトルキュー60Aおよび60Bは、命令キュー36A−36Bが動作し得るクロック周波数を高め得るいくつかの特徴を用いる。サポートされ得る命令キューエントリの数(たとえば1つの実施例においては128)が比較的多いため、依存性ベクトルの評価はいくつかの部分に分割されて連続的なクロックフェーズの間に行なわれる。依存性ベクトルの第1の部分は第1のフェーズにおいて評価され、たとえば依存性ベクトルキュー60Aの中間スケジューリング要求ライン100Aに対して中間スケジューリング要求信号を生成する。継続するクロックフェーズにおいて、依存性ベクトルの第2の部分が(中間スケジューリング要求信号に沿って)評価され、ピック論理66Aに対するスケジューリング要求信号を生成する。たとえば実施例の1つにおいて、中間スケジューリング要求ラインおよびスケジューリング要求ラインはワイヤでORされたラインであり、これは(依存性を示さない)高い状態にプリチャージされ、依存性ベクトルの対応する部分内の1つ以上の依存性が満たされないままであればディスチャージされる。したがって、評価を部分ごとに行なうことによってワイヤORライン上のロードは減少し、よってワイヤORラインのディスチャージは依存性に応答してより迅速に進行し得る。全体のクロック周波数が増加し得るという効果がある。動作の周波数を改善し得る別の特徴は、単一の論理命令キューを複数の命令キュー36A−36Bに分割することである。
ピック論理は実際には単一の論理命令キュー中の命令の一部分のみを考慮するため、各キューに対するピック論理はより複雑でなくなり、したがってより迅速に動作して命令をスケジューリングし得る。さらに命令キューは異なるクロックフェーズの間に命令をスケジューリングできるため、反対側の命令キューにおいてROPへの依存性が満足されたことを(完全なクロックサイクルに対して)1/2クロックサイクル中で命令キューに伝搬できる。伝搬のこの1/2クロックサイクルは、データを反対側のレジスタファイルからスケジューリング命令キューに対応するレジスタファイルに移動させるためにも用い得る。
ここで、クロック信号の「フェーズ」とはクロック信号の期間の一部分を表わす。各フェーズはそのフェーズに対応するクロック信号の上昇および下降によって区切られる。一般的に、クロックを受ける記憶デバイス(ラッチ、レジスタ、フリップフロップなど)はフェーズの1つの終結時に値をキャプチャする。加えてこのフェーズは典型的には重ならない。図4の実施例において、クロック期間は2つのフェーズ(PH1およびPH2)に分割され、その各々はクロック信号によって表わされる。PH1ラッチ94A−94BはPH1フェーズの終わりにおける値をキャプチャし、一方PH2ラッチ92A−92BはPH2フェーズの終わりにおける値をキャプチャする。
一般的に、第1の記憶装置90Aは命令キュー36A内のROPに対応する各依存性ベクトルに対して、IQ♯N−1からN/2に対応する依存性ベクトルの部分を記憶する。同様に、第1の記憶装置90Cは命令キュー36B内のROPに対応する各依存性ベクトルに対して、IQ♯N−1からN/2に対応する依存性ベクトルの部分を記憶する。第2の記憶装置90Bは命令キュー36A内のROPに対応する各依存性ベクトルに対して、IQ♯N/2−1から0に対応する依存性ベクトルの部分を記憶する。したがって、第1の記憶装置90Aおよび第1の記憶装置90Cは命令キュー36Bのエントリに対応する各依存性ベクトルの部分を記憶し、一方第2の記憶装置90Bおよび第2の記憶装置90Cは命令キュー36Aのエントリに対応する各依存性ベクトルの部分を記憶する。
図4に示す依存性ベクトルキュー60Aの動作について説明する。PH2フェーズにおいて、第1の記憶装置90Aはそこに記憶された各依存性ベクトルの部分(「第1の部分」)を評価し、中間スケジューリング要求ライン100Aの中間スケジューリング要求信号を生成する。依存性ベクトルキュー60A内の各エントリに対して中間スケジューリング要求ラインが含まれる。中間スケジューリング要求信号は、対応する依存性ベクトルの第1の部分に記録された各依存性が満たされるときにはアサートされ、第1の部分に記録された少なくとも1つの依存性が満たされないときにはデアサートされる。実施例の1つにおいては前述のとおり、中間スケジューリング要求ライン100AはワイヤによりORされている。中間スケジューリング要求ラインは(第1の記憶装置90Aに対するPH1フェーズにおいて)アサート状態にプリチャージされ、1つ以上の依存性が満たされないままであるときには(第1の記憶装置90Aに対するPH2フェーズにおいて)デアサート状態にディスチャージされる。PH2ラッチ92Aは中間スケジューリング要求ライン100Aの1組の中間スケジューリング要求信号をキャプチャし、PH1フェーズにおいてそれらを第2の記憶装置90Bに伝搬する。
第1の記憶装置90Aと同様の第2の記憶装置90Bは、依存性ベクトルの第2の部分を評価し、スケジューリング要求ライン96A上に1組のスケジューリング要求信号を生成する。各依存性ベクトルの第2の部分における依存性を評価してスケジューリング要求信号の組を生成するのに加えて、対応する中間スケジューリング要求信号が評価に含まれる。対応する中間スケジューリング要求信号がアサートされ、かつ依存性ベクトルの第2の部分に記録される依存性の各々が満たされた場合、スケジューリング要求信号がアサートされる。対応する中間スケジューリング要求信号がデアサートされるか、または依存性ベクトルの第2の部分に記憶された1つ以上の依存性が満たされなければ、スケジューリ
ング要求信号はデアサートされる。PH1ラッチ94Aは、スケジューリング要求信号をキャプチャし、スケジューリング要求信号をピック論理66Aに伝搬する。
ピック論理66Aは、書込有効信号をPH1ラッチ94Aに与える。書込有効信号は、命令キュー36A内の各キューエントリごとに与えられ、対応するROPへの依存性が満たされたことを示す。言い換えれば、アサートされた書込有効信号は、対応するROPへの依存性が満たされたことの表示である。したがって、ピック論理66Aからの書込有効信号は、第2の記憶装置90Bおよび第2の記憶装置90Dに伝搬する。同様に、ピック論理66Bからの書込有効信号は、第1の記憶装置90Aおよび第1の記憶装置90Cに経路付けされる。
依存性ベクトルキュー60Bは、依存性ベクトルキュー60Aと同様の態様で依存性ベクトルを評価する。しかしながら、第2の記憶装置90Dは、依存性ベクトルの第2の部分を評価して、PH1フェーズ中に中間スケジューリング要求信号を発生し、その後に依存性ベクトルの第1の部分の第1の記憶装置90C内での評価と中間スケジューリング要求信号が続き、PH2フェーズ中にスケジューリング要求信号を発生する。
依存性ベクトルキュー36A〜36Bを形成するトランジスタの数を低減するために、各エントリに1つの書込ラインを設けることが望ましいであろう(すなわちデータをエントリに転送するのにラインは1つ)。一般的には、マップユニット30によって与えられる第1のROP(発行位置0、依存性ベクトルバス68A上に対応する依存性ベクトルを備える)は、割当て時に、キューのテールポインタに基づいていずれかのキューエントリに割当て可能である。その後のROPは、(最大数8より少なくてもよい)最終ROPが与えられるまで、次の連続するキューエントリに割当てられる。したがって、ローテータ102が設けられる。ローテータの各出力は、1組のキューエントリに接続され、そこで組内の各エントリは、発行位置の数に等しいエントリの数分だけ組内の近傍のエントリから間隔をあけられている。たとえば、8個の発行位置を採用するこの実施例では、第1の出力は、エントリ0、8、16などに接続可能である。第2の出力は、エントリ1、9、17などに接続可能である。依存性ベクトルが、割当てられたキューエントリへの書込入力ライン上に与えられるために、ローテータ102は、発行位置0に割当てられたIQ♯の下位ビットに従って依存性ベクトルバス68に与えられた依存性ベクトルをローテートする。8個の発行位置を採用するこの実施例では、下位3ビットがローテーションの量を与える。たとえば、IQ♯0、8または16が発行位置0に割当てられた場合、0位置のローテーションが行なわれ、発行位置0に対応する依存性ベクトルがローテータの第1の出力に与えられる。他方で、IQ♯1、9または17が与えられた場合、1発行位置のローテーションが行なわれ、発行位置0に対応する依存性ベクトルがローテータの第2の出力に与えられる。第2の出力はエントリ1、9、17などに接続されるので、発行位置0に対応する依存性ベクトルは、割当てられたキューエントリに接続される書込ライン上に与えられる。残りの依存性ベクトルは、対応して、割当てられたキューエントリに接続される書込ライン上に与えられる。
ローテータ102は、命令キュー36A〜36Bのどちらが現在のクロックサイクル中にROPを受取るかに依存して、キュー制御ユニット62の1つからローテーションの量を受取るよう接続される。Mux104は、交互に、命令キュー36A内のキュー制御ユニット82Aと、命令キュー36B内のキュー制御ユニット82Bとから入力されるローテーションの量(発行位置0においてROPに割当てられたIQ♯に対応する)を選択する。加えて、キュー制御ユニット82Aまたは82Bは(どの命令キューがROPを受取っているかに依存して)、割当てられたIQ♯に対応する書込イネーブル信号をアサートし、割当てられたキューエントリが与えられた依存性ベクトルを記憶するようにする。
次に図5を参照して、依存性ベクトルキュー60A内の依存性ベクトルキューエントリ(エントリナンバーM)のある実施例の一部を例示する回路図が示される。他の実施例が可能であり企図される。図示の部分は、エントリMに記憶される依存性ベクトル内の1つの依存性表示(たとえば、IQ♯Nへの依存性の表示)に対応する。
IQ♯Nについての依存性表示は、ローテータ102から書込ライン110上に与えられる。書込イネーブルライン112上の書込イネーブル信号がキュー制御ユニット62Aによってアサートされた場合、依存性表示は、交差結合されたインバータ114A〜114Bによって表わされる記憶セルに記憶される。書込ライン110で受取られた依存性表示は実際の依存性表示の逆であるので、ノード116上の論理ハイが、IQ♯NのROPについて依存性が存在することを示す。
スケジューリング要求ライン96AA(図4に例示されるスケジューリング要求ライン96Aの1つ)が同様に図5に示される。プリチャージトランジスタ(図示せず)が、ワイヤORライン96AAをアサートされた状態にプリチャージする。ディスチャージトランジスタ118は、スケジューリング要求ライン96AAと接地との間に接続される。ディスチャージトランジスタ118に接続されるゲート120の出力が論理1である場合、ディスチャージトランジスタ118は、スケジューリング要求ライン96AAをディスチャージし、IQ♯Mに記憶されるROPはスケジューリングされない。他方で、ゲート120の出力が論理0である場合、ディスチャージトランジスタ118は、スケジューリング要求ライン96AAをディスチャージしない。依存性ベクトル内の他の依存性表示に対応する他の同様のディスチャージトランジスタがスケジューリング要求ライン96AAをディスチャージしなければ、IQ♯Aに記憶されるROPはスケジューリング可能である。
ゲート120は、図5に示すようにNORゲートである。したがって、依存性がインバータ114A〜114Bによって表わされる記憶セル内に示されなければ、記憶セルからゲート120への入力は論理1であり、ゲート120の出力は論理0であり、ディスチャージトランジスタ118が、デアサートされた状態にスケジューリング要求ライン96AAをディスチャージすることを防ぐ。このように、所与のIQ♯への依存性の欠如が、IQ♯NにおけるROPが完了しているかどうかにかかわらず、IQ♯MにおけるROPのスケジューリングを妨げることはない。他方で、依存性が記憶セル内に示されるならば、記憶セルからの入力は論理ゼロであり、ゲート120の出力は、書込有効ライン98AA(図4に示す書込有効ライン98Aの1つ)がローにアサートされるまで、論理1になる。図5の実施例では、依存性は、書込有効ラインの論理ローによって満たされたものと示される。書込有効ラインが一旦アサートされると、ゲート120の出力は論理0に切換わり、ディスチャージトランジスタ118は活性化されない。
次に図6を参照して、第2の記憶装置90Dから、第1の記憶装置90C内の対応するスケジューリング要求ライン96BA(図4に示すスケジューリング要求ライン96Bの1つ)への、中間スケジューリング要求ライン100BA(図4に示す中間スケジューリング要求ライン100Bの1つ)上の中間スケジューリング要求信号の伝搬のある実施例を例示する回路図が示される。他の実施例が可能であり企図される。
図6の実施例では、中間スケジューリング要求ライン100BA上の中間スケジューリング要求信号は、交差結合されたインバータ122A〜122Bによって表わされる記憶セル内にキャプチャされる。中間スケジューリング要求信号の反転された信号は、PH1フェーズに従って、パストランジスタ126を介してトランジスタ124に送られる。PH1フェーズの終わりには、中間スケジューリング要求信号の反転が、トランジスタ124のゲートに存在し、トランジスタ126によって記憶セルから分離される。PH2フェ
ーズの最初に、トランジスタ128は活性化される。トランジスタ124のゲートが論理1である(すなわち、中間要求信号がPH1フェーズの終わりにキャプチャされる際デアサートされた)場合、スケジューリング要求ライン96BAは、トランジスタ124および128を介してデアサートされた状態にディスチャージされる。他方で、トランジスタ124のゲートが論理0である(すなわち、中間要求ラインがPH1フェーズの終わりにキャプチャされる際アサートされた)場合、スケジューリング要求ライン96BAは、トランジスタ124および128を介してディスチャージされない。スケジューリング要求ライン96BAは、依存性ベクトルの第1の部分の評価に従ってデアサートされてもよく、またはエントリPのROPがスケジューリング可能であることを示すようアサートされたままであってもよい。
なお、インバータ122A〜122Bとトランジスタ124、126および128とは、PH1ラッチ94Bの一部を含み得る。さらになお、上述の記載は、アサートおよびデアサートされた信号について言及している。信号は、論理1状態のときにはアサートされ、論理0状態のときにはデアサートされるとに定義可能であるし、都合によって逆もまた可能である。たとえば、図5および図6では、スケジューリング要求ラインは、論理1状態でアサートされ、一方で書込有効ラインは、論理0状態でアサートされる。他の実施例は、所望に応じて、いかなる信号の意味をも逆にすることが可能である。
次に図7を参照して、マップユニット30およびストア/ロード転送検出ユニット148のある実施例のブロック図が示される。他の実施例が可能であり企図される。図7の実施例では、マップユニット30は、レジスタスキャンユニット130と、IQ♯/PR♯制御ユニット132と、仮想/物理的レジスタマップユニット136と、依存性ベクトル生成ユニット134と、ストアアドレスレジスタ138とを含む。レジスタスキャンユニット130は、バス140によりデコードユニット24からソースおよびデスティネーションレジスタ番号(および各々の有効表示)を受取るよう接続される。レジスタスキャンユニット130は、デスティネーションレジスタ番号およびソース仮想レジスタ番号を仮想/物理的レジスタマップユニット136に送るよう構成される。IQ♯/PR♯制御ユニット132は、デスティネーションレジスタ番号および、デスティネーションレジスタ番号に対応する有効表示を受取るようバス142に接続される。命令キュー36A〜36Bは、テールポインタをテールポインタバス70Aで与え(テールポインタ制御バス70の一部が図2に示される)、各キュー内のどのエントリが現在キューのテールであるかを示す。IQ♯/PR♯制御ユニット132はさらに、ROP割当バス70Bに接続される(テールポインタ制御バス70の一部が図2に示される)。加えて、IQ♯/PR♯制御ユニット132は、デスティネーションPR♯/IQ♯バス144に接続される。仮想/物理的レジスタマップユニット136は、マップサイロ32に接続され、ライン内の各ROPについてのソースPR♯、ソースIQ♯、デスティネーションPR♯およびIQ♯を、ソース/デスティネーションPR♯およびIQ♯バス72により命令キュー36A〜36Bに与える。フリーリスト制御ユニット(図示せず)は、ネクストフリーPR♯バス146を介してIQ♯/PR♯制御ユニット132に接続される。依存性ベクトル生成ユニット134は、仮想/物理的レジスタマップユニット136に接続され、ソース/デスティネーションIQ♯を受取り、さらにストアドレスレジスタ138およびストア/ロード転送検出ユニット148に接続される。依存性ベクトル生成ユニット134は、ROPのライン内のROPタイプの表示をROPタイプバス150により受取るよう接続され、かつストアドレスIQ♯バス78(命令キュー36AからのストアアドレスIQ♯バス78Aを含む)に接続される。なおさらに、依存性ベクトル生成ユニット134は、依存性ベクトルバス68に接続される。ストア/ロード転送検出ユニット148は、PCサイロ48からロードヒットストアデータバス152に、IQ♯/PR♯制御ユニット132からストアデータIQ♯バス154に、デコードユニット24からROPタイプおよびPCバス156に接続される。
一般的には、依存性ベクトル生成ユニット134は、命令キュー36A〜36B(すなわち、ライン内の各発行位置)にディスパッチされる各ROPごとの依存性ベクトルを生成するよう構成され、かつ依存性ベクトルバス68により命令キュー36A〜36Bにその依存性ベクトルを運ぶよう構成される。依存性ベクトル生成ユニット134は、デコードユニット24から、ライン内の各ROPごとのROPタイプの表示を受取る。いかなるROPタイプであっても、依存性ベクトル生成ユニット134は、各ソースオペランドについて依存性ベクトル内のオペランド依存性を記録するよう構成される。依存性ベクトル生成ユニット134は、仮想/物理的レジスタマップユニット136から各ソースオペランドに対応するIQ#を受取り、ソースIQ#をデコードして、依存性ベクトル内の対応す依存性表示をセットする。
上述のとおり、依存性ベクトルは、任意の数の依存性が特定のROPについて示されることを可能にするフレキシブルな依存性メカニズムである。たとえば、この実施例では、ロードROPは、先のストアアドレスROPにオーダリング依存するよう定義される。したがって、依存性ベクトル生成ユニット134は、ストアアドレスレジスタ138にストアアドレス依存性ベクトルを維持する。ストアアドレス依存性ベクトルは、各処理中のストアアドレスROPの表示を記録する(すなわち、この実施例ではIQ♯による)。依存性ベクトル生成ユニット134は、(デコードユニット24から受取られるROPタイプによって特定される)ライン内の各ストアアドレスROPに割当てられるIQ#の表示でストアアドレス依存性ベクトルを更新する。デスティネーションIQ#は、仮想/物理的レジスタマップユニット136から受取られる。各ストアアドレスROPは、対応するIQ#がストアアドレスIQ♯バス78により命令キュー36A〜36Bによって与えられるまで処理中である(依存性ベクトル生成ユニット134は、ストアアドレス依存性ベクトルを更新して、対応するIQ♯を削除する)。
ROPタイプバス150に示される各ロードROPについて、依存性ベクトル生成ユニット134は、そのロードROPについて生成された依存性ベクトルにストアアドレス依存性ベクトルを含む。より特定的には、ある実施例では、依存性ベクトルは各IQ♯ごとに1ビットを含む。ビットがセットされた場合、依存性は対応するIQ♯に割当てられたROPに記録される。そのような実施例では、ストアアドレス依存性ベクトルは、ソースオペランドに対応する依存性ベクトルとのORをとることが可能である。ストアアドレスレジスタ138に記憶されたストアアドレス依存性ベクトルに加えて、依存性ベクトル生成ユニット134は、ROPのライン内のある特定のロードROPに対するストアアドレスROPであって、かつライン内でその特定のロードROPより前のストアアドレスROPを検出可能である。依存性は、その特定のロードROPについても、ストアアドレスROPが検出されると依存性ベクトル内に記録される。
ストア/ロード転送検出ユニット148が特定のロードROPがロードヒットストアデータ状況を経るべきであると予測した場合、特定のロードROPは、ストアデータROPに依存するものとしてさらに記録され得る。上述したように、ロードROPは、先行のストアアドレスROPにオーダリング依存する。このオーダリングを実施することにより、同じメモリ場所にアクセスする先行のストアROPとロードROPとの間の依存性が決定可能である。先行のストアデータROPにロードROPのオーダリングが(一般的には)ないので、ロード/ストアユニット42による依存性の検出は、即座に、ストアデータの転送につながらないことがある(すなわち、ストアデータROPがまだ実行していなければ、データはまだ利用可能でない)。ストアデータがまだ転送不可能であれば、ロードROPは取消され、その後のクロックサイクルでリスケジューリングされる。残念ながら、取消されたロードROPに依存するROPも取消されてしまう。簡素化のために、命令キュー36A〜36Bは、取消されたロードROPの後にスケジューリングされたすべての
ROPを取消することがある。ストアデータROPについてロードROPを不当に遅延させることなしにROPの取消を回避するために、ストア/ロード転送検出ユニット148を用いて、ロードヒットストアデータ(利用不可能のストアデータを備える)状況を予測し、必要であれば、予測に応答して依存性を記録する。ロードヒットストアデータ状況が予測された場合、ストアデータROPのIQ♯は、ストア/ロード転送検出ユニット148によって依存性ベクトル生成ユニット134に与えられる。依存性ベクトル生成ユニット134は、対応するロードROPの依存性ベクトルにストアデータROPへのオーダリング依存性を記録する。
ストア/ロード転送検出ユニット148は、この実施例では1対のテーブルを維持し得る。第1のテーブルはロードPCアドレスによってインデックス付けされ、ロードヒットストアデータ状況が先に検出されたストアデータPCアドレスを記憶する。第2のテーブルは、ストアデータPCアドレスによってインデックス付けされ、ストアデータROPに割当てられたIQ♯を記録する。したがって、ストア/ロード転送検出ユニット148は、(デコードユニット24からのバス156に示される)マップユニット30によってマッピングされた各ロードROPのPCで第1のテーブルを指定する。指定されたエントリがロードヒットストアデータ状況が予測されることを示す場合、指定されたエントリに記憶されたストアPCアドレスを用いて第2のテーブルを指定する。指定されたエントリの第2のテーブル中のIQ♯は、ストア/ロード転送検出ユニット148によって依存性ベクトル生成ユニット134に運ばれ、対応するロードROPの依存性ベクトルに含められる。
ロードROPの実行中にロードヒットストアデータ状況を検出すると、ロード/ストアユニット42は、依存性が検出されるロードROPのR♯およびストアデータROPのR♯をPCサイロ48に報告する。PCサイロ48は、ロードヒットストアデータバス152によりロードROPおよびストアデータROPの対応する物理的PCアドレスを与える。ストア/ロード転送検出ユニット148は、ロードヒットストアデータ状況が検出されたストアデータROPのストアデータPCアドレスで、ロードPCアドレスによって指定されたエントリの第1のテーブルを更新する(かつ、ロードヒットストアデータ状況が検出されたという表示をセットする)。ある実施例では、第1のテーブルは2Kバイトであり、各エントリが6ビットのストアPCアドレスおよび対応するロードヒットストアデータ表示を記憶するツーウェイセットアソシアティブのテーブルである。
ストア/ロード転送検出ユニット148は、バス154でIQ♯/PR♯制御ユニット132からディスパッチされるストアデータROPのPCアドレスおよびIQ#を受取り、対応するストアデータPCアドレスによって指定される第2のテーブルのエントリにIQ♯を記録する。
図7の実施例では、マップユニット30は、2段のパイプライン設計を用いてレジスタリネーミングを行なう。他の実施例は、所望により、単一のパイプライン段または付加的な段でレジスタリネーミングを行なうことが可能である。第1の段では、レジスタスキャンユニット130は、仮想レジスタ数を各ソースレジスタに割当てる。並列して、IQ♯/PR♯制御ユニット132は、(命令キュー36A〜36Bによって与えられるテールポインタに基づく)IQ♯を各ROPに、RP♯を、デスティネーションレジスタを有するROPに割当てる。第2の段では、仮想/物理的レジスタマップユニット136は、(現在のルックアヘッド状態および割当てられたPR♯に基づいて)物理的レジスタ数に仮想レジスタ数をマッピングし、対応するROPの発行位置にIQ♯/PR♯制御ユニット132によって割当てられた物理的レジスタ数を経路付けする。
レジスタスキャンユニット130によって割当てられた仮想レジスタ番号は、物理的レ
ジスタ番号のソースを特定する。たとえば、この実施例では、ソースレジスタに対応する物理的レジスタ番号は、(マップユニット30によって先に処理されたROPのラインに対応する更新を反映し、かつ仮想/物理的レジスタマップユニット136によって維持される)ルックアヘッドレジスタ状態から、または(先行のROPのデスティネーションオペランドがソースオペランドと同じ、すなわちライン内依存性が存在する場合)ROPのライン内の先行の発行位置から引出すことが可能である。言い換えれば、ソースレジスタ数に対応する物理的レジスタ番号は、ライン内依存性が検出されなければ、ルックアヘッドレジスタ状態内の物理的レジスタ番号である。レジスタスキャンユニット130は、有効に、ライン内依存性チェックを行なう。他の実施例は、所望のごとく、ソースオペランドの他のソースを見込んでもよい。
IQ♯/PR♯制御ユニット132は、命令キュー36A〜36Bの1つのテールポインタで始まる命令キュー数を割当てる。言い換えれば、ライン内の第1のROPは、選択された命令キューのテールポインタをIQ♯として受取り、他のROPは、テールポインタから増大する順序でIQ♯を受取る。制御ユニット132は、ライン内のROPの各々を同じ命令キュー36A〜36Bに割当て、ROPの次のラインを他の命令キュー36A〜36Bに割当てる。制御ユニット132は、ROP割当バス70Bを介して命令キュー36A〜36Bに割当てられたROPの数の表示を運ぶ(テールポインタ制御バス70の一部が図2に示される)。したがって、受取る命令キューは、そのキューへのROPの割当てを反映するようにそのテールポインタを更新可能である。
制御ユニット132は、ネクストフリーPR♯バス146によりフリーリスト制御ユニットから1組のフリーPR♯を受取る。フリーPR♯の組は、命令演算のライン内のデスティネーションレジスタに割当てられる。ある実施例では、プロセッサ10は、ライン内の論理的レジスタ更新の数を4個に限っている(すなわち、予測子ミスデコードユニット26が第5の論理的レジスタ更新に出会った場合、ラインはその前の命令で終了される)。ゆえに、フリーリスト制御ユニットは、フリーリストから4個のPR♯を選択し、ネクストフリーPR♯バス146により制御ユニット132に選択されたレジスタを運ぶ。他の実施例は、ライン内の更新の数に対する異なった制限を採用可能であり、制限なしも含み得る(すなわち、各ROPは更新可能である。)。
フリーリスト制御ユニットは、物理的レジスタの解放を管理し、その後の命令の割当てのためにレジスタを選択する。フリーリスト制御ユニットは、アーキテクチャ的リネームブロック34からポップされた先行の物理的レジスタ数を受取り、これはまたアーキテクチャ的リネームの更新された組に対して先行の物理的レジスタ数をcam比較する。対応するcam比較の一致が検出されない各先行のPR♯は、フリーリストに加えられる。
仮想/物理的レジスタマップユニット136は、PR♯のソースがルックアヘッドレジスタ状態であることを示す仮想レジスタ番号を有する各ソースレジスタごとにルックアヘッドレジスタ状態によって示される対応する論理的レジスタのPR♯およびIQ♯を供給する。仮想レジスタ番号が先行の発行位置を示すソースレジスタには、制御ユニット132によって割当てられた対応するPR♯およびIQ♯が供給される。さらに、仮想/物理的レジスタマップユニット136は、ROPのラインによって特定される論理的デスティネーションレジスタおよび制御ユニット132によって割当てられるデスティネーションPR♯/IQ♯に従ってルックアヘッドレジスタ状態を更新する。
仮想/物理的レジスタマップユニット136はさらに、例外条件に応答してマップサイロ32によって与えられる復旧ルックアヘッドレジスタ状態を受取るよう構成される。仮想/物理的レジスタマップユニット136は、マップサイロ32によって与えられる復旧ルックアヘッド状態でレジスタスキャンユニット130およびIQ♯/PR♯制御ユニッ
ト132からの入力に従って生成される次のルックアヘッドレジスタ状態を無効にし得る。
なお、この実施例では、IQ♯は、対応するROPがどの命令キューエントリに依存しているかを示すために各ソースオペランドについて経路付けされる。命令キュー36A〜36Bは、実行のために依存ROPをスケジューリングするより前に対応する命令キューエントリにおけるROPの完了を待つ。
次に図8を参照して、依存性ベクトル生成ユニット134のある実施例の動作を例示するフローチャートが示される。他の実施例が可能であり企図される。わかりやすくするために図8では特定の順序でステップが示されるが、いかなる順序も好適であり得る。さらに、さまざまなステップが、依存性ベクトル生成ユニット134内の組合せ論理で並列に実行可能である。
依存性ベクトル生成ユニット134は、1つ以上のストアアドレスIQ♯が命令キュー36A〜36Bから受取られたかどうかを決定する(決定ブロック160)。ストアアドレスIQ♯が受取られた場合、依存性ベクトル生成ユニット134は、ストアアドレス依存性ベクトル内の対応する依存性表示を削除する(ステップ162)。たとえば、依存性ベクトルが、各IQ♯ごとに、セットされると依存性を示す1ビットを含む実施例では、受取られたIQ♯に対応するビットがリセットされる(またはクリアされる)。
依存性ベクトル生成ユニット134は、ライン内ストアアドレス依存性ベクトルを組立てる(ステップ164)。ライン内ストアアドレス依存性ベクトルは、依存性ベクトル生成ユニット134によって処理されるROPのライン内の各ストアアドレスROPについての依存性表示を記録する。依存性ベクトル生成ユニット134は、ROPのライン内の各ROPについての依存性ベクトル(すなわち、有効ROPを有する各発行位置に対応する依存性ベクトル)を組立てる(ステップ166)。依存性ベクトル生成ユニット134のある実施例に従う特定の発行位置についての依存性ベクトルの組立ては、以下図9に例示される。最後に、依存性ベクトル生成ユニット134は、ストアアドレスレジスタ138に記憶されるストアアドレス依存性ベクトルをライン内ストアアドレス依存性ベクトルとマージし、結果でストアアドレスレジスタ138を更新する(ステップ168)。
次に図9を参照して、依存性ベクトル生成ユニット134のある実施例に従うROPについての依存性ベクトルの組立て(すなわち、図8に示すステップ166)を例示するフローチャートが示される。図9に示すステップは、ライン内の各ROPについて実行可能である。他の実施例が可能であり企図される。わかりやすくするために図8では特定の順序でステップが示されるが、いかなる順序も好適であり得る。さらに、さまざまなステップが、依存性ベクトル生成ユニット134内の組合せ論理で並列に実行可能である。
依存性ベクトル生成ユニット134は、依存性ベクトルが組立てられるROPがロードROPであるかどうかを決定する(決定ブロック170)。上述したように、ライン内の各ROPのタイプは、デコードユニット24によって依存性ベクトル生成ユニット134によって与えられ、それから依存性ベクトル生成ユニット134はどのROPがロードROPであるかを決定可能である。ROPがロードROPである場合、依存性ベクトル生成ユニット134は、ロードROPに先行する発行位置にライン内ストアアドレス依存性ベクトルをマスクし、依存性ベクトルにマスクされた表示を記録する(ステップ172)。言い換えれば、ライン内のロードROPに先行するストアアドレスROPに対応する依存性表示は、依存性ベクトルに含まれ、ロードROPの後のストアアドレスROPに対応するその依存性表示は含まれない。ロードROPの後のストアアドレスROPに対応する依存性表示は、マスクオフされる、なぜならその後のストアアドレスROPの依存性をその
ロードROPについて指定するべきでないからである。
加えて、ストアアドレスレジスタ138に記憶されるストアアドレス依存性ベクトルは、ROPがロードROPである場合、依存性ベクトルに記録される(ステップ174)。さらになお、ロードヒットストアデータ状況がストア/ロード転送検出ユニット148によって予測される場合、依存性は予測されたストアデータROPに記録される(ステップ176)。
各ROPごとに、仮想/物理的レジスタマップユニット136によって与えられるソースIQ♯への依存性が記録される(ステップ178)。なお、ある実施例では、各依存性ベクトルは、各IQ♯ごとに、セットされた場合そのIQ♯に割当てられたROPへの依存性を示し、クリアされた場合、そのIQ♯への依存性の欠如を示すビットを含む。したがって、さまざまなソースからの記録依存性は、さまざまなソースからの依存性ベクトルのORをとることを含み得る。代替的に、依存性の各ソースは、依存性ベクトル内のどのビットがセットされるべきかを示し得る。
ここで図10を参照して、命令キュー36A〜36Bのある実施例の動作を例示するタイミング図が示される。クロックサイクルのフェーズは、垂直の点線によって区分される。各フェーズおよび各クロックサイクルは、区分された領域の上部のラベルにより示される。図10のタイミング図は、各命令キュー内の依存ROPのスケジューリングおよび書込有効ラインのアサーションにより(依存ROPがスケジューリング可能であるように)完了したものとして示されるROPのタイミングを例示する。
クロック0のPH2フェーズの間に、命令キュー36A内のピック論理は、ROPのための書込有効信号をアサートする(参照番号180)。クロック1のPH1フェーズの間に、第1の依存ROPのスケジューリング要求信号が第2の記憶装置90Bにおいて評価されアサートされる(他の依存性がまだアクティブでないと仮定する−参照番号182)。加えて、第2の依存ROPのための中間スケジューリング要求信号が第2の記憶装置90Dにおいて評価されアサートされる(やはり、他の依存性がまだアクティブでないと仮定する)。PH1ラッチ94Bは、アサートされた中間スケジューリング要求信号をラッチする(参照番号184)。
クロック1のPH2フェーズの間に、命令キュー36A内のピック論理は、実行のために、命令キュー36Aから第1の依存ROPをスケジューリングする(参照番号186)。加えて、第2の依存ROPが命令キュー36Bの第1の記憶装置90Cにおいて評価され、対応する要求信号がアサートされる(他の依存性がアクティブでないと仮定する−参照番号188)。
クロック2のPH1フェーズの間に、レジスタファイル38Aは、第1の依存ROPのソースオペランドのためにレジスタファイル読出を開始する。レジスタファイル読出は、クロック2のPH2フェーズの間に完了する(参照番号190)。クロック2のPH1フェーズの間にまた、命令キュー36B内のピック論理は、実行のために、第2の依存ROPをスケジューリングする(参照番号192)。レジスタファイル38Bは、クロック2のPH2フェーズ中に第2の依存ROPのソースオペランドのためにレジスタファイル読出を開始し、レジスタファイル読出はクロック3のPH1フェーズ中に完了する(参照番号194)。実行コア40Aは、クロック3のPH1フェーズ中に第1の依存ROPの実行を開始し、クロック3のPH2フェーズ中に実行を完了する(参照番号196)。同様に、実行コア40Bは、クロック3のPH2フェーズ中に依存ROPの実行を開始し、クロック4のPH1フェーズ中に実行を完了する(参照番号198)。
(図4および図10に例示されるように)依存性ベクトルを部分的に評価することによって、依存性ベクトル全体が同時に評価された場合よりも高い周波数の動作が達成可能である。部分の1つが評価されている間に、他の部分をプリチャージすることが可能である。プロセッサ10の性能は、より高い周波数の結果として増大可能である。命令キュー36Bから1/2クロックサイクルずらして命令キュー36Aを演算することにより、(かつ同様に、レジスタファイル38Bから1/2クロックサイクルずらしてレジスタファイル38Aを演算し、実行コア40Bから1/2クロックサイクルずらして実行コア40Aを演算することによって)、反対側の命令キューに記憶された依存ROPにROPの完了を伝搬するために1/2クロックサイクルを採用するだけで、より高い周波数が実現可能である。加えて、1/2クロックサイクル時間を用いて、ROPの結果をレジスタファイルに伝搬し、これを依存ROPが読出して結果にアクセスすることが可能である。1クロックサイクル全体を用いてキュー間の伝搬をする実施例により、命令スループット全体を増大させることが可能である。
なお、この実施例では、命令キューは物理的に命令キュー36A〜36Bに分割されるが、他の実施例では、命令キューを、独立して動作し得るさらに多数の命令キューに分割可能である。たとえば、(4個のレジスタファイルおよび4個の実行コアとともに)4個の命令キューを採用する実施例が採用可能であろう。命令キューの数は、いかなる好適な数であってもよい。さらに、依存性ベクトルの評価は、所望のごとく、連続したフェーズにおいて評価される3つ以上の部分に分割可能である。
ここで図11を参照して、バスブリッジ202を介してさまざまなシステム構成要素に結合されるプロセッサ10を含むコンピュータシステム200のある実施例のブロック図が示される。他の実施例が可能であり企図される。図示のシステムでは、主メモリ204は、メモリバス206を介してバスブリッジ202に結合され、グラフィックスコントローラ208はAGPバス210を介してバスブリッジ202に結合される。最後に、複数個のPCIデバイス212A〜212BがPCIバス214を介してバスブリッジ202に結合される。2次バスブリッジ216をさらに設けて、EISA/ISAバス220を介して1つ以上のEISAまたはISAデバイス218への電気的インターフェイスを可能にしてもよい。プロセッサ10は、外部インターフェイス52を介してバスブリッジ202に結合される。
バスブリッジ202は、プロセッサ10と、主メモリ204と、グラフィックスコントローラ208と、PCIバス214につながれたデバイスとのインターフェイスを与える。バスブリッジ202に接続されたデバイスの1つから演算が受取られると、バスブリッジ202は、演算のターゲット(たとえば、特定のデバイスまたは、PCIバス214の場合には、ターゲットはPCIバス214上にある)を特定する。バスブリッジ202は、ターゲットとされたデバイスに演算を経路付けする。バスブリッジ202は、一般的には、ソースデバイスまたはバスによって使用されるプロトコルからターゲットデバイスまたはバスによって使用されるプロトコルに演算を変換する。
PCIバス214についてISA/EISAバスへのインターフェイスを与えるのに加えて、2次バスブリッジ216はさらに、所望により、さらなる機能を組込んでもよい。外部から、または2次バスブリッジ216と一体化されるかのいずれかの入力/出力コントローラ(図示せず)をもコンピュータシステム200内に含めて、所望により、キーボードおよびマウス222のため、ならびにさまざまなシリアルポートおよびパラレルポートのための動作サポートを提供することが可能である。外部キャッシュユニット(図示せず)が、他の実施例では、プロセッサ10とバスブリッジ202との間の外部インターフェイス52に結合されてもよい。代替的に、外部キャッシュは、バスブリッジ202に結合されてもよく、外部のキャッシュのためのキャッシュ制御論理は、バスブリッジ202
に一体化されてもよい。
主メモリ204は、アプリケーションプログラムがそこに記憶され、プロセッサ10が主にそこから実行するメモリである。好適な主メモリ204は、DRAM(ダイナミック・ランダム・アクセス・メモリ)、および好ましくはSDRAM(シンクロナスDRAM)の複数個のバンクを含む。
PCIデバイス212A−212Bは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピィディスクドライブまたはドライブコントローラ、SCSI(スモール・コンピュータ・システム・インターフェイス)アダプタおよび電話機能カードなどのさまざまな周辺装置を例示するものである。同様に、ISAデバイス218は、モデム、サウンドカード、およびGPIBまたはフィールドバスインターフェイスカードなどのさまざまなデータ収集カードなどのさまざまなタイプの周辺装置を例示するものである。
グラフィックスコントローラ208は、ディスプレイ226上のテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ208は、先行技術に一般的に公知の典型的なグラフィックスアクセラレータを実現して、主メモリ204からおよびそこに効果的にシフト可能である3次元データ構造をレンダリングし得る。したがって、グラフィックスコントローラ208は、バスブリッジ202内のターゲットインターフェイスへのアクセスを要求しかつ受取り、これにより主メモリ204へのアクセスを獲得可能であるという点で、AGPバス210のマスタであり得る。専用グラフィックスバスが、主メモリ204からのデータの高速の取出しを可能にする。ある種の動作では、グラフィックスコントローラ208は、AGPバス210上にPCIプロトコルトランザクションを生成するようさらに構成可能である。バスブリッジ202のAGPインターフェイスは、したがって、AGPプロトコルトランザクションならびにPCIプロトコルターゲットおよびイニシエータトランザクションの両方をサポートする機能を含み得る。ディスプレイ226は、画像またはテキストを表示することのできるいかなる電子的ディスプレイでもある。好適なディスプレイ226は、陰極線管(「CRT」)、液晶ディスプレイ(「LCD」)などを含む。
なお、AGP、PCI、およびISAまたはEISAバスが上の説明では例として用いられたが、所望によりいかなるバスアーキテクチャで置き換えられてもよい。さらになお、コンピュータシステム200は、さらなるプロセッサ(たとえば、コンピュータシステム200のオプションの構成要素として示されるプロセッサ10a)を含むマルチプロセッシングコンピュータシステムであってもよい。プロセッサ10aは、プロセッサ10と同様であってもよい。より特定的には、プロセッサ10aは、プロセッサ10の同一のコピーであってもよい。プロセッサ10aは、(図11に示すとおり)プロセッサ10と外部インターフェイス52を共有してもよく、または独立のバスを介してバスブリッジ202に接続されてもよい。
[産業上の適用性]
この発明は、プロセッサおよびコンピュータシステムに適用可能であり得る。
プロセッサの1つの実施例のブロック図である。 図1に示された命令キューの1つの実施例のブロック図である。 依存性ベクトルの1つの実施例のブロック図である。 1対の依存性ベクトルキューの1つの実施例のブロック図である。 依存性ベクトルキューの1つの実施例の部分回路図である。 依存性ベクトルキューの1つの実施例の別の部分回路図である。 図1に示されたマップユニットの1つの実施例およびストア/ロード転送検出ユニットの1つの実施例のブロック図である。 図7に示された依存性ベクトル生成ユニットの1つの実施例の演算を示すフローチャートの図である。 図8に示されたステップの1つの実施例を示すフローチャートの図である。 図1に示された1対の命令キューの1つの実施例の演算を示すタイミングの図である。 図1に示されたプロセッサを含むコンピュータシステムの1つの実施例のブロック図である。
符号の説明
10 プロセッサ、12 ライン予測子、14 命令キャッシュ(I−キャッシュ)、16 整列ユニット、18 分岐履歴テーブル、20 間接アドレスキャッシュ、22 戻りスタック、24 デコードユニット、26 予測子ミスデコードユニット、28 マイクロコードユニット、30 マップユニット、32 マップサイロ、34 アーキテクチャリネームブロック、36A−36B 1対の命令キュー、38A−38B 1対のレジスタファイル、40A−40B 1対の実行コア、42 ロード/ストアユニット、44 データキャッシュ(D−キャッシュ)、46 外部インターフェイスユニット、48
PCサイロ、50 リダイレクトユニットならびに命令TLB(ITB)。

Claims (17)

  1. プロセッサであって、
    命令演算に対応する依存性ベクトルを生成するよう構成された依存性ベクトル生成ユニットと、
    前記依存性ベクトルおよび前記命令演算を受けるよう結合された命令キューとを含み、前記命令キューは、前記命令演算および前記依存性ベクトルを記憶するよう構成され、かつ前記依存性ベクトル内に示された各依存性が満たされるまで前記命令演算のスケジューリングを禁止するようさらに構成され、前記依存性ベクトルは、前記命令キュー内の各他の命令演算への依存性を示すことが可能であり、前記依存性が少なくとも1つのオーダリング依存性を含む、プロセッサ。
  2. 前記オーダリング依存性が、前記命令演算がロード命令演算であれば、先行のストアアドレス命令演算の各々に対して検出される、請求項1に記載のプロセッサ。
  3. 前記先行のストアアドレス命令演算の各々に対して検出される前記オーダリング依存性が、前記先行のストアアドレス命令演算の各々が実行されると満たされる、請求項2に記載のプロセッサ。
  4. 前記オーダリング依存性がストア−ロード転送依存性を含む、請求項1に記載のプロセッサ。
  5. 前記ストア−ロード転送依存性が、前記ストア−ロード転送依存性により特定されたストアデータ命令演算が実行されると満たされる、請求項4に記載のプロセッサ。
  6. 前記依存性がさらに、少なくとも1つのオペランド依存性を含む、請求項1に記載のプロセッサ。
  7. 前記オペランド依存性は、前記オペランドが前記命令演算に対して利用可能になると満たされる、請求項6に記載のプロセッサ。
  8. 前記オペランドは、結果として前記オペランドを生成する命令演算が実行されると利用可能になる、請求項7に記載のプロセッサ。
  9. プロセッサにおいて命令演算をスケジューリングするための方法であって、
    各命令演算に対応する依存性ベクトルを生成するステップを含み、前記依存性ベクトルは命令キュー内の各他の命令演算への依存性を示すことが可能であり、前記依存性は1つ以上のオーダリング依存性を含み、前記方法はさらに、
    前記命令キュー内に前記依存性ベクトルおよび対応の命令演算を記憶するステップと、
    前記依存性ベクトルにより示された前記依存性の各々を満たすステップと、
    前記満たすステップに応答して前記対応する命令演算をスケジューリングするステップとを含む、方法。
  10. 前記満たすステップが、前記オーダリング依存性が検出される先行の命令演算の実行を完了させるステップを含む、請求項9に記載の方法。
  11. 前記1つ以上のオーダリング依存性が、前記命令演算がロード命令演算であれば、先行のストアアドレス命令演算の各々に対して検出されるオーダリング依存性を含む、請求項9に記載の方法。
  12. 前記先行のストアアドレス命令演算の各々に対して検出される前記オーダリング依存性が、前記先行のストアアドレス命令演算の各々が実行されると満たされる、請求項11に記載の方法。
  13. 前記1つ以上のオーダリング依存性がストア−ロード転送依存性を含む、請求項12に記載の方法。
  14. 前記ストア−ロード転送依存性が、前記ストア−ロード転送依存性により特定されたストアデータ命令演算が実行されると満たされる、請求項13に記載の方法。
  15. 前記依存性がさらに、少なくとも1つのオペランド依存性を含む、
    請求項9に記載の方法。
  16. 前記オペランド依存性は、前記オペランドが前記命令演算に対して利用可能になると満たされる、請求項15に記載の方法。
  17. 前記オペランドは、結果として前記オペランドを生成する命令演算が実行されると利用可能になる、請求項16に記載の方法。
JP2006076408A 1998-08-24 2006-03-20 プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 Expired - Fee Related JP3919802B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/138,886 US6212622B1 (en) 1998-08-24 1998-08-24 Mechanism for load block on store address generation
US09/139,178 US6212623B1 (en) 1998-08-24 1998-08-24 Universal dependency vector/queue entry

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2000566743A Division JP3866921B2 (ja) 1998-08-24 1999-03-24 ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム

Publications (2)

Publication Number Publication Date
JP2006228241A true JP2006228241A (ja) 2006-08-31
JP3919802B2 JP3919802B2 (ja) 2007-05-30

Family

ID=26836653

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000566743A Expired - Fee Related JP3866921B2 (ja) 1998-08-24 1999-03-24 ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム
JP2006076408A Expired - Fee Related JP3919802B2 (ja) 1998-08-24 2006-03-20 プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2000566743A Expired - Fee Related JP3866921B2 (ja) 1998-08-24 1999-03-24 ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム

Country Status (5)

Country Link
EP (2) EP1122639A3 (ja)
JP (2) JP3866921B2 (ja)
KR (2) KR100611341B1 (ja)
DE (1) DE69922238T2 (ja)
WO (1) WO2000011548A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014182829A (ja) * 2013-03-15 2014-09-29 Samsung Electronics Co Ltd 直接依存命令及びネストされた依存命令のためのスケジューラー内の推測的ソース準備をリセットする効果的な方法
CN111694675A (zh) * 2019-03-15 2020-09-22 上海商汤智能科技有限公司 任务调度方法及装置、存储介质

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
US6564315B1 (en) 2000-01-03 2003-05-13 Advanced Micro Devices, Inc. Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
WO2001050253A1 (en) * 2000-01-03 2001-07-12 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
GB0023698D0 (en) * 2000-09-27 2000-11-08 Univ Bristol Instruction issue in a processor
US6862676B1 (en) * 2001-01-16 2005-03-01 Sun Microsystems, Inc. Superscalar processor having content addressable memory structures for determining dependencies
GB0302602D0 (en) * 2003-02-04 2003-03-12 Young Arthur P Equipment and methods for real time application
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
US7321964B2 (en) 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7506132B2 (en) * 2005-12-22 2009-03-17 International Business Machines Corporation Validity of address ranges used in semi-synchronous memory copy operations
US7380104B2 (en) * 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
US8639889B2 (en) 2011-01-31 2014-01-28 International Business Machines Corporation Address-based hazard resolution for managing read/write operations in a memory cache
US9116686B2 (en) * 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5201057A (en) * 1987-01-22 1993-04-06 Uht Augustus K System for extracting low level concurrency from serial instruction streams
US5655096A (en) * 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
JPH0820949B2 (ja) * 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
US5465336A (en) * 1994-06-30 1995-11-07 International Business Machines Corporation Fetch and store buffer that enables out-of-order execution of memory instructions in a data processing system
US5710902A (en) * 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US5835747A (en) * 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014182829A (ja) * 2013-03-15 2014-09-29 Samsung Electronics Co Ltd 直接依存命令及びネストされた依存命令のためのスケジューラー内の推測的ソース準備をリセットする効果的な方法
CN111694675A (zh) * 2019-03-15 2020-09-22 上海商汤智能科技有限公司 任务调度方法及装置、存储介质
JP2021520578A (ja) * 2019-03-15 2021-08-19 上▲海▼商▲湯▼智能科技有限公司Shanghai Sensetime Intelligent Technology Co., Ltd. タスクスケジューリング
JP7050957B2 (ja) 2019-03-15 2022-04-08 上▲海▼商▲湯▼智能科技有限公司 タスクスケジューリング
US11347546B2 (en) 2019-03-15 2022-05-31 Shanghai Sensetime Intelligent Technology Co., Ltd Task scheduling method and device, and computer storage medium

Also Published As

Publication number Publication date
KR100608389B1 (ko) 2006-08-09
EP1121635A1 (en) 2001-08-08
EP1121635B1 (en) 2004-11-24
KR20010085584A (ko) 2001-09-07
JP2002527798A (ja) 2002-08-27
DE69922238T2 (de) 2005-11-03
DE69922238D1 (de) 2004-12-30
JP3866921B2 (ja) 2007-01-10
EP1122639A2 (en) 2001-08-08
WO2000011548A1 (en) 2000-03-02
JP3919802B2 (ja) 2007-05-30
KR20060070576A (ko) 2006-06-23
EP1122639A3 (en) 2002-02-13
KR100611341B1 (ko) 2006-08-14

Similar Documents

Publication Publication Date Title
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US6122727A (en) Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) Universal dependency vector/queue entry
US6212622B1 (en) Mechanism for load block on store address generation
US6141747A (en) System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6247106B1 (en) Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US5887152A (en) Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss instructions
US5764946A (en) Superscalar microprocessor employing a way prediction unit to predict the way of an instruction fetch address and to concurrently provide a branch prediction address corresponding to the fetch address
US5768610A (en) Lookahead register value generator and a superscalar microprocessor employing same
US5832297A (en) Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5848433A (en) Way prediction unit and a method for operating the same
US6339822B1 (en) Using padded instructions in a block-oriented cache
US6604190B1 (en) Data address prediction structure and a method for operating the same
US6185675B1 (en) Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks
JP3871883B2 (ja) 間接分岐ターゲットを計算するための方法
US6393549B1 (en) Instruction alignment unit for routing variable byte-length instructions
US6119223A (en) Map unit having rapid misprediction recovery
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US8171240B1 (en) Misalignment predictor
US6266763B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
US5832249A (en) High performance superscalar alignment unit
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6230262B1 (en) Processor configured to selectively free physical registers upon retirement of instructions
US5822574A (en) Functional unit with a pointer for mispredicted resolution, and a superscalar microprocessor employing the same
US7783692B1 (en) Fast flag generation

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060926

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070123

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070213

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110223

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120223

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120223

Year of fee payment: 5

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120223

Year of fee payment: 5

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees