JP2003519833A - 依存性連鎖の発行および再発行が可能なスケジューラ - Google Patents

依存性連鎖の発行および再発行が可能なスケジューラ

Info

Publication number
JP2003519833A
JP2003519833A JP2001550546A JP2001550546A JP2003519833A JP 2003519833 A JP2003519833 A JP 2003519833A JP 2001550546 A JP2001550546 A JP 2001550546A JP 2001550546 A JP2001550546 A JP 2001550546A JP 2003519833 A JP2003519833 A JP 2003519833A
Authority
JP
Japan
Prior art keywords
instruction
instruction operation
store
scheduler
memory
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.)
Pending
Application number
JP2001550546A
Other languages
English (en)
Other versions
JP2003519833A5 (ja
Inventor
ケラー,ジェイムズ・ビィ
ハダッド,ラムゼイ・ダブリュ
マイアー,ステファン・ジィ
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/476,322 external-priority patent/US6564315B1/en
Priority claimed from US09/476,204 external-priority patent/US6622235B1/en
Priority claimed from US09/476,578 external-priority patent/US6542984B1/en
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2003519833A publication Critical patent/JP2003519833A/ja
Publication of JP2003519833A5 publication Critical patent/JP2003519833A5/ja
Pending legal-status Critical Current

Links

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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 スケジューラは実行のための命令動作を発行するが命令動作の保留をも行なう。特定の命令動作が後で、非投機的に実行する必要があることが判明すると、特定の命令動作はスケジューラの中にまだストアされている。特定の命令動作が非投機的になったとの(特定の命令動作に先行する命令動作の発行および実行を介した)判断の後に、特定の命令動作はスケジューラから再発行され得る。非投機的に実行するべき命令動作の不正スケジューリングに対するペナルティは、特定の命令動作とパイプラインからのより若い命令動作とをパージして、特定の命令動作を再フェッチすることと比較すると、減じられる。さらに、スケジューラは、発行された命令動作ごとの依存性表示を維持し得る。もし特定の命令動作が再発行されれば、特定の命令動作に(直接または間接的に)依存する命令動作は、依存性表示を介して識別され得る。スケジューラはまた、依存性命令動作をも再発行する。プログラム順序において特定の命令動作の後に生じるが、特定の命令動作に依存していないものは再発行されない。したがって、非投機的に実行されるべき命令動作の不正スケジューリングに対するペナルティは、特定の命令とすべてのより若い命令動作とをパージし特定の命令動作を再フェッチすることに対して、さらに減じられる。

Description

【発明の詳細な説明】
【0001】 発明の背景 1.技術分野 この発明はプロセッサの分野に関し、より特定的には、プロセッサ内の命令ス
ケジューリング機構に関する。
【0002】 2.背景技術 スーパースカラプロセッサは、クロックサイクルごとに多数の命令を発行およ
び実行し、かつ設計に整合した可能な限り高いクロック周波数を採用することに
より、高性能を達成しようと試みる。クロックサイクルごとに実行される命令の
数を増加させるための1つの方法は、アウトオブオーダー実行である。アウトオ
ブオーダー実行においては、命令はプログラムシーケンス(または「プログラム
順序」)において指定されるものとは異なった順序で実行され得る。プログラム
シーケンスでは互いに近傍に位置するある命令は、それらの並行実行を禁止する
依存性を有し得るのに対し、プログラムシーケンスにおける後の命令は、前の命
令に対する依存性を有さない可能性がある。したがって、アウトオブオーダー実
行は、並行して実行される命令の数を(平均して)増加させることにより、スー
パースカラプロセッサの性能を向上させ得る。アウトオブオーダー実行に関連す
る別の方法は投機的実行であるが、ここで命令は、プログラムを投機的実行を含
む経路とは異なった経路を進んで実行させ得る、他の命令の後に行なわれる。た
とえば、もし命令が、例外を引起す特定の命令より後のものであれば、これは投
機的である。また、命令がまだ実行されていない予測条件付き分岐命令より後の
ものであれば、これも投機的命令である。同様に、命令のアウトオブオーダーま
たは投機的なスケジューリング、発行などが行なわれる。
【0003】 残念ながら、アウトオブオーダーまたは投機的実行に対するスケジューリング
命令は、プロセッサに対して付加的なハードウェアの複雑性を提示する。「スケ
ジューリング」という用語は一般的に、実行のための命令の選択を指す。典型的
には、プロセッサは平均命令実行速度を最大化するために、命令を可能な限り速
くスケジューリングしようと(たとえば、依存性およびさまざまな命令タイプに
対するハードウェア利用性に対処するために命令をアウトオブオーダーで実行す
ることにより)試みる。これらの複雑性は、プロセッサが動作し得るクロック周
波数を制限するおそれがある。特に、命令間の依存性は、スケジューリングハー
ドウェアによって考慮されねばならない。一般的に、ここで用いられる「依存性
」という用語は、プログラム順序における第1の命令と後の第2の命令との間の
、第1の命令の実行の後で第2の命令が実行されることが要求される関係を指す
。さまざまな依存性が定義され得る。たとえば、ソースオペランド依存性は、も
し第2の命令のソースオペランドが第1の命令のデスティネーションオペランド
である場合に発生する。
【0004】 一般的に、命令は1つ以上のソースオペランドおよび1つ以上のデスティネー
ションオペランドを有する。ソースオペランドは、命令定義に従って操作され、
1つ以上の結果(デスティネーションオペランド)を生じさせるべき入力値であ
る。ソースおよびデスティネーションオペランドは、プロセッサ外部の記憶場所
にストアされるメモリオペランドであるか、またはプロセッサ内に含まれるレジ
スタ記憶位置にストアされるレジスタオペランドである。プロセッサによって採
用される命令セットアーキテクチャは、アーキテクチャ化レジスタの数を規定す
る。これらのレジスタは、命令セットアーキテクチャによって存在すると規定さ
れ、かつ命令はアーキテクチャ化レジスタをソースおよびデスティネーションオ
ペランドとして用いるよう符号化される。命令は、命令のオペランドフィールド
におけるレジスタ番号(またはレジスタアドレス)を介して、特定のレジスタを
ソースまたはデスティネーションオペランドと指定する。レジスタ番号は独自に
、アーキテクチャ化レジスタから選択されたレジスタを識別する。ソースオペラ
ンドはソースレジスタ番号によって識別され、デスティネーションオペランドは
デスティネーションレジスタ番号によって識別される。
【0005】 オペランド依存性に加えて、1つ以上の種類の順序依存性が、プロセッサによ
って課され得る。順序依存性は、たとえば採用されるハードウェアを簡略化する
か、または正しいプログラム実行を生成するために用いられ得る。ある特定の実
行がある特定の他の命令に対して順序どおりに実行されることを課すことにより
、命令のアウトオブオーダー実行の帰結に対処するためのハードウェアをなくす
ことができる。たとえば、一般プロセッサ動作状態を含む特殊レジスタを更新す
る命令は、特殊レジスタに明示的にアクセスしないさまざまな後の命令の実行に
影響を与えるおそれがある。一般的に、順序依存性は、マイクロアーキテクチャ
からマクロアーキテクチャにわたる。
【0006】 スケジューリング機構は依存性を考慮するが、実現される性能利得を最大化す
るために、アウトオブオーダーおよび/または投機的に命令をスケジューリング
するにおいては可能な限りアグレッシブであるべきである。しかしながら、スケ
ジューリング機構がよりアグレッシブになるにつれ(すなわち、特定の命令がス
ケジューリングされることを妨げる条件が少なくなるにつれ)、不正に実行され
る命令は増加する。不正に実行された命令に対する回復機構は、一般的に不正に
実行された命令とプロセッサパイプラインからのすべての後に続く命令とをパー
ジし、不正に実行された命令(および後の命令)を再フェッチすることで行なわ
れてきた。しばしば、パージおよび再フェッチは、ハードウェアの簡潔性のため
に不正実行の回復から(たとえば、不正に実行された命令が一連の命令の中で最
も古い命令になるまで)遅延する。クロックサイクルごとに実際に実行される命
令の平均数は、不正実行および後のパージ事象のために減少する。より頻繁に不
正実行が生じるアグレッシブなスケジューリング機構に対しては、これらの回復
機構に起因する性能劣化は実質的なものになり得る。したがって、アグレッシブ
な投機的またはアウトオブオーダースケジューリングによって可能となる、性能
利得を保護する、不正投機的実行から回復するための機構が所望となる。
【0007】 発明の開示 上述の問題は、大部分がここに記載されるスケジューラによって解決される。
スケジューラは、実行のための命令動作を発行するが、また命令動作を保留する
。もし特定の命令動作が、後で不正に実行されたことが見出されると、特定の命
令動作はスケジューラから再発行される。有利には、命令実行の不正スケジュー
リングに対するペナルティは、特定の命令動作とパイプラインからのより若い命
令動作とをパージし、特定の命令動作をフェッチすることに比べると、減じられ
得る。性能は、不正実行に対するペナルティが減じられたことにより、向上する
。さらに、スケジューラは、不正実行に対するペナルティが減じられるために、
よりアグレッシブなスケジューリング機構を採用し得る。
【0008】 さらに、スケジューラは、発行された各命令動作に対する依存表示を保留し得
る。もし特定の命令動作が再発行されると、特定の命令動作に(直接にまたは間
接的に)依存する命令動作は、依存性表示によって識別され得る。スケジューラ
は、依存命令動作をも再発行する。プログラム順序において特定の命令動作の後
であるが、その特定の命令動作に依存はしない命令動作は、再発行されない。し
たがって、命令動作の不正スケジューリングに対するペナルティは、特定の命令
とすべてのより若い命令動作とをパージし、特定の命令動作を再フェッチするこ
とよりもさらに減じられる。性能は、こうしてさらに向上する。
【0009】 概略的には、スケジューラが企図される。スケジューラは、第1の命令動作を
ストアするよう構成される命令バッファと、命令バッファに結合される発行ピッ
ク回路と、制御回路とを含む。発行ピック回路は、命令バッファから発行するた
めに第1の命令動作を選択するよう構成される。発行ピック回路に結合されて、
制御回路は、第1の命令動作の第1の実行状態を維持するよう構成される。制御
回路は、発行ピック回路が第1の命令動作を発行のために選択したことに応答し
て、第1の実行状態を実行中状態に変えるよう構成される。さらに、制御回路は
、第1の実行命令が不正に実行されたことを示す第1の信号に応答して第1の実
行状態を非実行状態に変えるよう構成される。
【0010】 さらに、スケジューラと実行ユニットとを含むプロセッサが企図される。スケ
ジューラは、第1の命令動作をストアし、かつ実行のために命令動作を発行する
よう構成される。スケジューラは、第1の命令動作に対応する第1の実行状態を
維持するよう構成され、かつ第1の実行動作の発行に応答して第1の実行状態を
実行中状態に変えるよう構成される。実行ユニットは、第1の命令動作の発行に
応答して受取るようスケジューラに結合されて、第1の実行動作を実行するよう
構成される。制御回路は、第1の命令動作が不正に実行されたことを示す第1の
信号に応答して、第1の実行状態を非実行状態に変えるよう構成される。さらに
、プロセッサおよび入力/出力(I/O)装置を含むコンピュータシステムが企
図され、I/O装置は、コンピュータシステムとI/O装置が結合され得る他の
コンピュータシステムとの間で通信するよう構成される。
【0011】 さらに、方法が企図される。第1の命令動作は、スケジューラから実行ユニッ
トに発行される。第1の命令動作は、発行の後にスケジューラの中に保留される
。第1の命令動作が不正に実行されたという第1の信号が受取られる。第1の命
令動作が、第1の信号の受信に応答して再発行される。
【0012】 さらに、プロセッサが企図される。プロセッサは、スケジューラおよび実行ユ
ニットを含む。スケジューラは、第1の命令動作をストアし、第1の命令動作を
実行のために発行するよう構成される。スケジューラは、発行の後に第1の命令
動作を保留するよう構成され、かつ第1の命令動作が不正に実行されたことを示
す第1の信号を受けるよう結合される。第1の信号に応答して、スケジューラは
、第1の信号に応答して命令動作を再発行するよう構成される。実行ユニットは
、第1の命令動作の再発行に応答してこれを受けるようスケジューラに結合され
て、第1の命令動作を実行するよう構成される。
【0013】 この発明の他の目的および利点は、以下の詳細な説明を読み、添付の図面を参
照することにより明らかとなるであろう。
【0014】 この発明はさまざまな変更および代替的な形が可能であり、その特定の実施例
のみが例示のために図面に示され、以下に詳細に説明される。しかしながら、図
面およびその詳細な説明は、この発明を開示される特定の形に限定するものでは
なく、反対に、すべての変更、等価物および代替例を、前掲の特許請求の範囲に
よって規定されるこの発明の精神および範囲内にすべて含めることを意図する。
【0015】 発明を実行するためのモード プロセッサ概要 図1を参照すると、プロセッサ10の一実施例のブロック図が示される。他の
実施例も可能であり、企図される。図1の実施例においては、プロセッサ10は
ラインプレディクタ12、命令キャッシュ(Iキャッシュ)14、整列ユニット
16、分岐予測/フェッチPC生成ユニット18、複数のデコードユニット24
A−24D、プレディクタミスデコードユニット26、マイクロコードユニット
28、マップユニット30、リタイアキュー32、アーキテクチャ再命名ファイ
ル34、フューチャファイル20、スケジューラ36、整数レジスタファイル3
8A、浮動小数点レジスタファイル38B、整数実行コア40A、浮動小数点実
行コア40B、ロード/ストアユニット42、データキャッシュ(Dキャッシュ
)44、外部インターフェイスユニット46、およびPCサイロ48を含む。ラ
インプレディクタ12は、プレディクタミスデコードユニット26、分岐予測/
フェッチPC生成ユニット18、PCサイロ48、および整列ユニット16に結
合される。Iキャッシュ14は、整列ユニット16および分岐予測/フェッチP
C生成ユニット18に結合され、これはさらにPCサイロ48に結合される。整
列ユニット16はさらに、プレディクタミスデコードユニット26およびデコー
ドユニット24A−24Dに結合される。デコードユニット24A−24Dはさ
らに、マップユニット30に結合され、デコードユニット24Dはマイクロコー
ドユニット28に結合される。マップユニット30は、リタイアキュー32(ア
ーキテクチャ再命名ファイル34に結合される)、フューチャファイル20、ス
ケジュール36、およびPCサイロ48に結合される。アーキテクチャ再命名フ
ァイル34は、フューチャファイル20に結合される。スケジューラ36は、レ
ジスタファイル38A−38Bに結合され、これはさらにそれぞれの実行コア4
0A−40Bに結合される。実行コア40A−40Bはさらに、ロード/ストア
ユニット42およびスケジューラ36に結合される。実行コア40AはさらにD
キャッシュ44に結合される。ロード/ストアユニット42はスケジューラ36
、Dキャッシュ44、および外部インターフェイスユニット46に結合される。
Dキャッシュ44はレジスタファイル38に結合される。外部インターフェイス
ユニット46は、外部インターフェイス52およびIキャッシュ14に結合され
る。参照番号の後に文字が続く参照符号によってここに示される要素は、集合的
に参照番号のみにても示される。たとえば、デコードユニット24A−24Dは
、集合的にデコードユニット24として示される。
【0016】 図1の実施例においては、プロセッサ10は可変バイト長、複雑命令セットコ
ンピューティング(CISC)命令セットアーキテクチャを採用する。たとえば
、プロセッサ10はx86命令セットアーキテクチャ(IA−32とも称する)
を採用し得る。他の実施例は、固定長命令セットアーキテクチャおよび縮小命令
セットコンピューティング(RISC)命令セットアーキテクチャを含む他の命
令セットアーキテクチャを採用し得る。図1に示される特定の特徴は、そのよう
なアーキテクチャから省かれ得る。さらに、上述の実施例は、所望であれば64
ビットアーキテクチャを採用し得る。
【0017】 分岐予測/フェッチPC生成ユニット18は、フェッチアドレス(フェッチP
C)を、Iキャッシュ14、ラインプレディクタ12、およびPCサイロ48に
与えるよう構成される。分岐予測/フェッチPC生成ユニット18は、フェッチ
アドレスの生成を支援するために用いられる好適な分岐予測機構を含み得る。フ
ェッチアドレスに応答して、ラインプレディクタ12は、複数の命令に対応する
整列情報を整列ユニット16に与え、かつ与えられた命令情報によって識別され
る命令の後の命令をフェッチするための次のフェッチアドレスを与える。次のフ
ェッチアドレスは、分岐予測/フェッチPC生成ユニット18に与えられるか、
または直接Iキャッシュ14に所望のように与えられる。分岐予測/フェッチP
C生成ユニット18は、PCサイロ48からトラップアドレスを受取り(もしト
ラップが検出された場合)、トラップアドレスは分岐予測/フェッチPC生成ユ
ニット18によって生成されたフェッチPCを含み得る。そうでなければ、フェ
ッチPCは、分岐予測情報およびラインプレディクタ12からの情報を用いて生
成され得る。一般的に、ラインプレディクタ12は、プロセッサ10によって先
行して投機的にフェッチされた情報に対応する情報をストアする。一実施例にお
いては、ラインプレディクタ12は2Kエントリを含み、各々のエントリはここ
で命令の「ライン」と称する1つ以上の命令のグループを位置決めする。命令の
ラインは、スケジューラ36を通して、プロセッサ10の命令処理パイプライン
によって並行して処理され得る。
【0018】 Iキャッシュ14は、命令バイトをストアするための高速キャッシュメモリで
ある。一実施例に従うと、Iキャッシュ14は、たとえば128キロバイトの、
64バイトキャッシュラインを採用する4方向セットアソシアティブ編成を含む
。しかしながら、どのようなIキャッシュ構造も好適である(直接マッピング構
造を含む)。
【0019】 整列ユニット16は、ラインプレディクタ12からの命令整列情報と、Iキャ
ッシュ14からのフェッチアドレスに対応する命令バイトを受ける。整列ユニッ
ト16は、提供された命令動作情報に従って、命令バイトを各デコードユニット
24A−24Dに選択する。より特定的には、ラインプレディクタ12は、各デ
コードユニット24A−24Dに対応する命令ポインタを提供する。命令ポイン
タは、対応のデコードユニット24A−24Dへの伝達のためのフェッチされた
命令バイト内の命令を突き止める。一実施例においては、特定の命令は、1つ以
上のデコードユニット24A−24Dに伝達され得る。したがって、示される実
施例においては、ラインプレディクタ12からの命令のラインは最大4つまでの
命令を含み得るが、他の実施例はより多くまたはより少ないデコードユニット2
4を含み、1ライン内により多いまたはより少ない命令を提供し得る。
【0020】 デコードユニット24A−24Dは、提供された命令をデコードし、各デコー
ドユニット24A−24Dは、命令に対応する1つ以上の命令動作(またはRO
P)を識別する情報を生成する。一実施例においては、各デコードユニット24
A−24Dは、命令ごとに最大2つまでの命令動作を生成し得る。ここで用いら
れる場合、命令動作(またはROP)は、実行コア40A−40B内の実行ユニ
ットが、単一のエンティティとして実行するよう構成される動作を示す。簡単な
命令は単一の命令動作に対応し得る一方、より複雑な命令は多数の命令動作に対
応し得る。ある特定のより複雑な命令は、(本実施例においてはデコードユニッ
ト24Dを介して内部の読出専用メモリからフェッチされる)マイクロコードル
ーチンとしてマイクロコードユニット28内で実現され得る。さらに、他の実施
例は、命令ごとに単一の命令動作を採用し得る(すなわち、命令および命令動作
はそのような実施例においては同義語である)。
【0021】 PCサイロ48は、命令フェッチごとにフェッチアドレスおよび命令情報をス
トアし、かつ例外(たとえばプロセッサ10によって採用される命令セットアー
キテクチャによって規定される命令トラップ、分岐後予測、および他のマイクロ
アーキテクチャに規定されたトラップ)のフェッチにおいては命令をリダイレク
ションする働きを有する。PCサイロ48は、プロセッサ10内で未処理であり
得る多数の命令ラインに対応するフェッチアドレスおよび命令情報をストアする
ための循環バッファを含み得る。命令ラインのリタイアに応答して、PCサイロ
48は、対応のエントリを捨てる。例外に応答して、PCサイロ48は、分岐予
測/フェッチPC生成ユニット18へのトラップアドレスを提供し得る。リタイ
アおよび例外情報は、スケジューラ36によって提供され得る。一実施例におい
ては、マップユニット30は、各命令に連続番号(R♯)を割当てて、プロセッ
サ10内の未処理の命令の順序を識別する。スケジューラ36は、PCサイロ4
8にR♯を返し、例外または命令動作リタイアに遭遇する命令動作を識別する。
【0022】 ラインプレディクタ12にミスを検出すると、整列ユニット16は、Iキャッ
シュ14からプレディクタミスデコードユニット26に対応の命令バイトを経路
制御する。プレディクタミスデコードユニット26は、プロセッサ10が対応し
て設計されている命令ラインに何らかの制約を課す(たとえば、命令動作の最大
数、命令の最大数、分岐命令の終了など)命令をデコードする。ラインの終了時
に、プレディクタミスデコードユニット26は、ラインプレディクタ12に情報
を与えてストアさせる。プレディクタミスデコードユニット26は、デコードさ
れた情報をディスパッチするよう構成され得ることに留意されたい。これに代え
て、プレディクタミスデコードユニット26は、命令情報のラインをデコードし
、かつこれをラインプリデコーダ12に与えてストアさせてもよい。この後に、
失われたフェッチアドレスが、ラインプレディクタ12によって再試行され、ヒ
ットが検出され得る。
【0023】 ラインプレディクタ12におけるミス時の命令デコードに加えて、プレディク
タミスデコードユニット26は、もしラインプレディクタ12によって提供され
た命令情報が無効であれば命令をデコードするよう構成される。一実施例におい
ては、プロセッサ10は、ラインプレディクタ12における情報を、Iキャッシ
ュ14内の情報と整合させて保つことを試みない(たとえば、命令がIキャッシ
ュ14内で置き換えまたは無効化されている場合、対応の命令情報は無効化され
ていない可能性がある)。デコードユニット24A−24Dは、与えられた命令
情報を確認し、かつ無効命令情報が検出された場合にプレディクタミスデコード
ユニット26に信号を送る。特定の実施例に従うと、以下の命令動作がプロセッ
サ10によってサポートされる:整数(算術、論理、シフト/回転、および分岐
動作を含む)、浮動小数点(マルチメディア動作を含む)、およびロード/スト
アである。
【0024】 デコードされた命令、ソースおよびデスティネーションレジスタ番号が、マッ
プユニット30に与えられる。マップユニット30は、物理レジスタ番号(PR
♯)を、各命令動作の各デスティネーションレジスタオペランドおよびソースレ
ジスタオペランドに割当てるよう構成される。物理レジスタ番号は、レジスタフ
ァイル38A−38B内のレジスタを識別する。マップユニット30はさらに、
命令動作のソースオペランドに割当てられる物理レジスタ番号の各々を更新する
命令動作のR♯を与えることにより、各命令動作の依存性の表示を提供する。マ
ップユニット30は、対応の論理レジスタ番号に基づいて各デスティネーション
レジスタに割当てられた物理レジスタ番号(および対応の命令動作のR♯)でフ
ューチャファイル20を更新する。さらに、マップユニット30は、デスティネ
ーションレジスタの論理レジスタ番号、割当てられた物理レジスタ番号、および
リタイアキュー32における先行して割当てられた物理レジスタ番号を記憶する
。命令がリタイアされると(スケジューラ36によってマップユニット30に示
される)、リタイアキュー32は、アーキテクチャ再命名ファイル34を更新し
、かつ使われていないレジスタを空にする。したがって、アーキテクチャレジス
タファイル34における物理レジスタ番号は、プロセッサ10のコミットされた
アーキテクチャ状態をストアする物理レジスタを識別するのに対し、フューチャ
ファイル20は、プロセッサ10の投機的状態を表わす。言い換えると、アーキ
テクチャ再命名ファイル34は、各論理レジスタに対してコミットされるレジス
タ状態を表わす各論理レジスタに対応する物理レジスタ番号をストアする。フュ
ーチャファイル20は、各論理レジスタに対する投機的レジスタ状態を表わす各
論理レジスタに対応する物理レジスタ番号をストアする。
【0025】 命令動作のライン、ソース物理レジスタ番号、およびデスティネーション物理
レジスタ番号は、マップユニット30によって割当てられたR♯に従ってスケジ
ューラ36にストアされる。さらに、特定の命令動作に対する依存性は、スケジ
ューラにストアされた他の命令動作に対する依存性として記録される。一実施例
においては、命令動作はリタイアされるまでスケジューラ36内に留まる。
【0026】 スケジューラ36は、その命令動作に対して記録された依存性が満たされるま
で、各命令動作をストアする。実行のための特定の命令動作のスケジューリング
に応答して、スケジューラ36は、その特定の命令動作がどのクロックサイクル
でレジスタファイル38A−38Bを更新するかを判断する。異なった実行コア
40A−40B内の実行ユニットは、異なった数のパイプラインステージを(よ
って異なったレイテンシを)採用し得る。さらに、ある特定の命令は、他のもの
よりもパイプライン内でより多くのレイテンシを経験し得る。したがって、特定
の命令動作に対するレイテンシを測定するカウントダウンが(クロックサイクル
の数で)生成される。スケジューラ36は、(レジスタファイルを読出す依存性
命令動作の前または同時に更新が発生するまで)指定された数のクロックサイク
ルの分だけ待機する。次いで、スケジューラ36は、その特定の命令動作に依存
する命令動作がスケジュールされるべきことを示す。スケジューラ36は、その
依存性が満たされるとすぐその命令をスケジュールし得ることに留意されたい(
すなわち、スケジューラキューにおけるその順序に対して、アウトオブオーダー
である)。
【0027】 整数およびロード/ストア命令動作は、レジスタファイル38Aからのソース
物理レジスタ番号に従ってソースオペランドを読出し、かつ、実行のために実行
コア40Aに送られる。実行コア40Aは、命令動作を実行し、レジスタファイ
ル38A内のデスティネーションに割当てられた物理レジスタを更新する。さら
に、実行コア40Aは、命令動作についてのR♯と、(もしあれば)命令動作の
例外情報とを、スケジューラ36に報告する。レジスタファイル38Bおよび実
行コア40Bは、同様の態様で浮動小数点命令動作について動作する(かつ浮動
小数点ストアのためのストアデータをロード/ストアユニット42に提供し得る
)。依存性動作のためのオペランドは、それらが依存する動作が並行に完了する
のであれば、直接依存性動作にバイパスしてもよいことに留意されたい。
【0028】 一実施例においては、実行コア40Aは、たとえば、2つの整数ユニット、分
岐ユニットおよび2つのアドレス生成ユニットを含み得る(対応の変換索引バッ
ファ、またはTLBを備える)。実行コア40Bは、浮動小数点/マルチメディ
ア乗算器、浮動小数点マルチメディア加算器、およびストアデータをロード/ス
トアユニット42に配信するためのストアデータユニットを含み得る。実行ユニ
ットの他の構成も可能であり、組合せ浮動小数点/整数実行コアが含まれる。
【0029】 ロード/ストアユニット42は、Dキャッシュ44へインターフェイスを提供
し、これはメモリ動作および、Dキャッシュ44をミスするメモリ動作に対する
フィル動作をスケジューリングする。ロードメモリ動作は、アドレス生成を実行
し、かつデータを(Dキャッシュ44またはロード/ストアユニット42内のス
トアキューから)レジスタファイル38A−38Bに転送する実行コア40Aに
よって完了し得る。ストアアドレスは、その生成時に実行コア40AによってD
キャッシュ44に(実行コア40AとDキャッシュ44との間の接続を介して直
接)提示される。ストアアドレスは、ストアキューエントリに割当てられる。ス
トアデータは、設計選択に従って、並行して提供されるかまたは後に提供され得
る。ストア情報のリタイアの際に、データはDキャッシュ44にストアされる(
しかしながら、Dキャッシュ44のリタイアと更新との間にいくらかの遅延が生
じ得る)。さらに、ロード/ストアユニット42は、(外部インターフェイスユ
ニット46を介して)後にキャッシュフィルするためにDキャッシュ44をミス
するロード/ストアアドレスをストアし、かつミスされたロッド/ストア動作を
再試行するための、ロード/ストアバッファを含み得る。ロード/ストアユニッ
ト42はさらに、ロード/ストアメモリ依存性を扱うよう構成される。
【0030】 Dキャッシュ44は、プロセッサ10によってアクセスされるデータをストア
するための高速キャッシュメモリである。Dキャッシュ44は(直接マッピング
およびセットアソシアティブ構造を含む)いかなる好適な構造をも有し得るが、
Dキャッシュ44の一実施例は、128キロバイトの64バイトラインを有する
2方向セットアソシアティブキャッシュである。
【0031】 外部インターフェイスユニット46は、外部インターフェイス52を介して他
の装置と通信するよう構成される。L2キャッシュへのインターフェイスまたは
プロセッサ10を他の装置に接続するための外部バスを含む、どのような好適な
外部インターフェイス52をも用い得る。外部インターフェイスユニット46は
、Iキャッシュ16およびDキャッシュ44のためのフィルをフェッチし、かつ
外部インターフェイスにDキャッシュ44からの捨てられた更新キャッシュライ
ンを書込む。さらに、外部インターフェイスユニット46は、プロセッサ10に
よって生成されたキャッシュ不可能読出および書込をも行なう。
【0032】 図2を参照すると、プロセッサ10の一実施例によって採用し得るパイプライ
ンステージの例示的な組を示す例示的なパイプライン図が示される。他の実施例
は異なったパイプライン、または図2に示されるものよりもより多くのまたはよ
り少ないパイプラインステージを含むパイプラインを採用し得る。図2に示され
るステージは、垂直線によって区切られる。各ステージは、プロセッサ10内で
記憶要素(たとえばレジスタ、ラッチ、フロップなど)にクロックを与えるため
に用いられるクロック信号の1サイクルである。
【0033】 図2に示されるように、明示的パイプラインは、CAM0ステージ、CAM1
ステージ、ラインプレディクタ(LP)ステージ、命令キャッシュ(IC)ステ
ージ、整列(AL)ステージ、デコード(DEC)ステージ、マップ1(M1)
ステージ、マップ2(M2)ステージ、書込スケジューラ(WRSC)ステージ
、読出スケジューラ(RDSC)ステージ、レジスタファイル読出(RFRD)
ステージ、実行(EX)ステージ、レジスタファイル書込(RFWR)ステージ
、およびリタイア(RET)ステージを含む。いくつかの命令は、実行状態にお
いて多数のクロックサイクルを用いる。たとえば、メモリ動作、小数浮動点動作
、および整数乗算動作は、図2に拡大形式で示される。メモリ動作は、アドレス
生成(AGU)ステージ、変換(TLB)ステージ、データキャッシュ1(DC
1)ステージ、およびデータキャッシュ2(DC2)ステージを含む。同様に、
浮動小数点動作は、最大4つの浮動小数点実行(FEX1−FEX4)ステージ
を含み、整数乗算は最大4(IM1−IM4)ステージを含む。
【0034】 CAM0およびCAM1ステージの間に、ラインプレディクタ12は、分岐予
測/フェッチPC生成ユニット18によって提供されたフェッチアドレスを、そ
の中にストアされているラインのアドレスと比較する。さらに、フェッチアドレ
スは、仮想アドレス(たとえば、x86アーキテクチャにおける線形アドレス)
から、CAM0およびCAM1ステージの間に物理アドレスに変換される。CA
M0およびCAM1ステージの間のヒット検出に応答して、対応するヒット情報
がラインプレディクタステージの間にラインプレディクタから読出される。また
、Iキャッシュ14は、ラインプレディクタステージの間に(物理アドレスを用
いて)読出を開始する。読出は、命令キャッシュステージの間に完了する。
【0035】 図2に示されるパイプラインは2クロックサイクルを用いてフェッチアドレス
に対するラインプレディクタ12におけるヒットを検出する一方、他の実施例は
単一のクロックサイクル(およびステージ)を用いてこの動作を行なってもよい
ことに留意されたい。さらに、一実施例においては、ラインプレディクタ12は
、ヒットに対してIキャッシュ14に対する次のフェッチアドレスおよびライン
プレディクタ12における次のエントリを提供するので、ラインプレディクタ1
2内の先行のヒットから生じたフェッチに対してCAM0およびCAM1ステー
ジをスキップすることができる。
【0036】 Iキャッシュ14から提供された命令バイトは、ラインプレディクタ12から
の対応のライン情報に応答して、整列ステージの間に整列ユニット16によって
デコードユニット24A−24Dに整列される。いくつかの命令は、1つ以上の
デコードユニット24A−24Dに整列され得ることに留意されたい。デコード
ユニット24A−24Dは、与えられた命令をデコードして、デコードステージ
の間に命令に対応するROPおよびオペランド情報を識別する。マップユニット
30は、マップ1ステージの間に与えられた情報からROPを生成し、かつレジ
スタ再命名(フューチャファイル20の更新)を行なう。マップ2ステージの間
に、ROPおよび割当てられた再命名は、リタイアキュー32の中に記録される
。さらに、各ROPが依存するROPが決定される。各ROPは、フューチャフ
ァイルに記録される先行のROPに依存するレジスタ依存性であり得、かつ他の
種類の依存性をも示し得る(たとえば、先行の直列化命令などへの依存性)。
【0037】 生成されたROPは、書込スケジューラステージの間にスケジューラ36に書
込まれる。このステージまでに、特定の情報ラインによって突きとめられたRO
Pはユニットとしてパイプラインを通って流れる。マイクロコードルーチンを含
んだROPは、上述のステートメントに対しては例外的なものであることを留意
されたいが、これはこれらが多数のクロックサイクルをわたってマイクロコード
ROMから読出され得るためである。しかしながら、スケジューラ36への書込
の後に、ROPは異なった時間において残りのステージを独立して流れ得る。一
般的に、特定のROPはスケジューラ36によって実行のために選択されるまで
このステージにとどまる(たとえば、上述のように、特定のROPが依存するR
OPが実行のために選択された後)。したがって、特定のROPは、書込ステー
ジおよび読出スケジューラステージの間の1つ以上のクロックサイクルの遅延を
経験し得る。読出スケジューラステージの間に、特定のROPは、スケジューラ
36内の選択論理に関与し、実行のために選択され、かつスケジューラ36から
読出される。特定のROPは次いで、レジスタファイル読出ステージにおけるレ
ジスタファイル38A−38Bの一方(ROPのタイプに依存する)からの読出
レジスタファイル動作に進む。
【0038】 特定のROPおよびオペランドは、対応の実行コア40Aまたは40Bに与え
られ、命令動作は実行ステージの間にオペランドに対して行なわれる。上述のよ
うに、いくつかのROPは、実行のいくつかのパイプラインステージを有する。
たとえば、メモリ実行動作(たとえばロードおよびストア)は、アドレス生成ス
テージ(ここでメモリ命令動作によってアクセスされる記憶場所のデータアドレ
スが生成される)、変換ステージ(ここでアドレス生成ステージから提供された
仮想データアドレスが変換される)およびDキャッシュ44がアクセスされるデ
ータキャッシュステージの対を通して実行される。浮動小数点動作は、最大4ク
ロックサイクルの実行を用い得、整数乗算は、同様に最大4クロックサイクルの
実行を採用し得る。
【0039】 実行ステージを完了するにおいて、特定のROPは、レジスタファイル書込ス
テージの間に割当てられた物理レジスタを更新する。最終的に、特定のROPは
、各先行のROPが(リタイアステージにおいて)リタイアされた後に、リタイ
アされる。再び、特定のROPに対して1つ以上のクロックサイクルが、レジス
タファイル書込ステージおよびリタイアステージの間に経過し得る。さらに、特
定のROPは、先行技術において公知であるように、パイプラインストール条件
によって、どのステージにおいてもストールするおそれがある。
【0040】 スケジューラ 図3を参照すると、マップユニット30、フューチャファイル20、スケジュ
ーラ36、整数実行コア40A、およびロード/ストアユニット42の一実施例
を示すブロック図が示される。図3にある例示的な相互接続が、スケジューラ3
6以外のユニットの一実施例の内部の詳細と併せて示される。他の実施例も可能
であり企図される。図3の実施例においては、マップユニット30はデコードユ
ニット24A−24D、フューチャファイル20、およびスケジューラ36に結
合される。スケジューラ36は、外部インターフェイスユニット46、整数実行
コア40A、およびロード/ストアユニット42にさらに結合される。図3の実
施例においては、マップユニット30は、デスティネーション再命名回路60、
ライン間依存性チェック回路62、順序依存性回路64、1組の順序依存性レジ
スタ66A−66Nおよびマルチプレクサ68を含む。デスティネーション再命
名回路60、ライン間依存性チェック回路62、および順序依存性回路64は、
デコードユニット24A−24Nから命令動作を受けるよう結合される。デステ
ィネーション再命名回路60は、マルチプレクサ68およびスケジューラ36に
結合される。ライン間依存性チェック回路62は、マルチプレクサ68に結合さ
れ、これはさらにフューチャファイル20に結合される。フューチャファイル2
0は、マップユニット30によって受けられる命令動作に対応するソースオペラ
ンド識別子を受けるよう結合される。順序依存性回路64は、順序依存性レジス
タ66A−66Nおよびスケジューラ36に結合される。ロード/ストアユニッ
ト42は、ストアキュー70を含み、これは整数実行コア40Aから物理アドレ
スを受けるよう結合される。整数実行コア40Aは、アドレス生成ユニット40
AAを含み、変換索引バッファ(TLB)40ABに結合される。
【0041】 一般的に、マップユニット30は、デコードユニット24A−24Dから命令
動作を受ける。マップユニット30は、各命令動作に対してレジスタ再命名を行
ない、かつスケジューラ36内で進行中である(in flight)(または並行して
スケジューラ36にディスパッチされる)最も古い命令動作に依存する各命令動
作を判断する。マップユニット30は、ストアのために(および後の実行の発行
のために)スケジューラ36に命令動作とレジスタ再命名を提供する。さらに、
マップユニット30は、各命令動作に対して依存性の表示を提供する(図3にソ
ースオペランド依存性および順序依存性として示す)。より特定的には、マップ
ユニット30はR♯(スケジューラ36内の命令動作を識別する番号)によって
より古い命令動作を識別する。オペランドに割当てられる物理レジスタのPR♯
は、スケジューラ36に与えられて命令動作のための発行に用いられるが、依存
性の判断のためには用いられない。スケジューラ36は、命令動作および関連の
依存性をストアし、かつ満たされた対応の依存性に応答して命令動作をスケジュ
ールする。スケジュールされた命令動作は、その命令動作を実行するよう構成さ
れる実行リソースを有する実行コア40A−40Bに発行される。
【0042】 特定の命令動作は、発行されたときに実行を完了しないかもしれない。たとえ
ば、示される実施例においては、メモリ動作は実行を完了させないかもしれない
。もし命令動作が実行を完了しなければ、これは命令動作の実行に関与するユニ
ットによって「再試行」される。命令動作の再試行は、命令動作が再試行されて
いるとスケジューラ36に信号を送ることを含む。スケジューラ36は、発行さ
れた命令動作を保留し、もし発行された命令動作が再試行されれば、スケジュー
ラ36は命令動作を再発行する。一実施例においてより特定的には、スケジュー
ラ36は命令動作ごとに実行状態を維持する。先行して発行された命令動作の再
試行に応答して、スケジューラ36は命令動作の実行状態を「非実行」状態にリ
セットする。次いで、実行動作が再発行される。さらに、スケジューラ36は、
発行された各命令動作の依存性を保留する。再試行された命令動作に直接または
間接的に依存するどのような命令動作も、非実行状態に戻される。命令動作のグ
ループであって、第1のグループの命令動作が特定の命令動作に依存し、グルー
プ内の他の1つの命令動作が、各他の命令動作に依存し、かつその他の命令動作
を通して特定の命令動作に間接的に依存する命令動作のグループは、ここで「依
存性連鎖」と称する。命令動作の再試行、または命令動作が直接または間接的に
依存する別の命令動作の再試行に応答する、実行状態から非実行状態へのリセッ
トは、ここでその命令動作を「アンドゥ(undo)」と称する。
【0043】 命令動作の再試行(および再試行に応答する再発行)を可能にすることにより
、スケジューラ36は、実行のためにアグレッシブに命令動作をスケジュールし
、かつ不正にスケジュールされた命令動作を後で再発行することにより、不正ス
ケジューリングから回復する。不正スケジューリングに対するペナルティは、不
正にスケジュールされた命令動作およびすべてのより若い命令動作をパージして
不正にスケジュールされた命令動作で開始する再フェッチすることよりも、実質
的に小さい。
【0044】 マップユニット30は、デスティネーション再命名回路60、ライン間依存性
チェック回路62、フューチャファイル20、および順序依存性回路64を用い
て、各命令動作に対する依存性を判断する。デスティネーション再命名回路60
は、命令動作ごとに、命令動作がレジスタデスティネーションオペランドを有し
ているか、またはもし命令動作がレジスタデスティネーションオペランドを有し
ていればデスティネーションレジスタ番号を有しているかどうかに対する表示を
受ける。もし命令動作がレジスタデスティネーションオペランドを有していれば
、デスティネーション再命名回路60は、空き物理レジスタ番号を実行動作に割
当てる。割当てられたPR♯は命令動作とともにスケジューラ36に与えられる
。さらに、デスティネーション再命名回路60は、各命令オペランドのP♯およ
びPR♯をマルチプレクサ68に与える。
【0045】 フューチャファイル20は、ソースオペランドレジスタ番号ごとに、デスティ
ネーションオペランドとして最も直近に対応して構築されたレジスタを有する命
令動作のPR♯およびR♯を与える。より特定的には、フューチャファイル20
は、アーキテクチャ化レジスタごとのエントリを有する(およびマイクロコード
を用いる実施例においては、各マイクロコード一時レジスタを有する)テーブル
を含む。ソースオペランドレジスタ番号は、命令動作のソースオペランドに指定
されるレジスタのエントリを選択するために用いられる。各エントリは、最も古
い命令動作のR♯を(現在の命令動作ラインの前に)ストアし、そのレジスタと
、その最も古い命令動作のデスティネーションに割当てられた物理レジスタのP
R♯とを更新する。さらに、フューチャファイル20は、各エントリに有効ビッ
ト(V)を含む。有効ビットは、そのレジスタに対して記録されたR♯が有効で
あるかどうかを示す(すなわち、対応の命令オペレーションがスケジューラ36
において未だに有効であるかどうかを示す)。有効ビットは、R♯に対応する命
令動作のスケジューラ36へのディスパッチの際にセットされ、命令動作がリタ
イアされた場合にリセットされる。有効ビットは、エントリがソースオペランド
依存性として選択された場合にスケジューラ36に与えられる。スケジューラ3
6は、もし有効ビットがクリアであればそのソースオペランドに対して依存性を
記録せず、もし有効ビットがセットされていれば依存性を記録する。
【0046】 ライン間依存性チェック回路62は、各命令動作のソースおよびデスティネー
ションレジスタ番号を受け、かつマップユニット30によって受けられた命令動
作のライン内の依存性チェックを行なう。ライン間依存性チェック回路62は、
ライン内より古い命令動作の各々のデスティネーションレジスタ番号と、ライン
内の特定の命令動作のソースレジスタ番号とを比較する。もし整合が1つのソー
スオペランドに対して見出されれば、ライン間依存性チェック回路62は、その
ソースオペランドに対応するフューチャファイル20からのR♯およびPR♯を
、デスティネーション再命名回路60によって提供される対応のR♯およびPR
♯でオーバーライドする。もし整合が見出されなければ、フューチャファイル2
0からのR♯およびPR♯は、そのソースオペランドに対して正確なレジスタ再
命名および依存性を提供する。ライン間依存性チェック回路62は、マルチプレ
クサ68に対して、各命令動作の各ソースオペランドに対する適切なR♯および
PR♯を選択するためのマルチプレクサ選択ラインを生成する。マルチプレクサ
68は、ソースオペランド依存性を選択するためにいかなる適切な選択回路をも
表わし得ることに留意されたい。たとえば、マルチプレクサ68は、ライン内の
可能な命令動作の各々の可能なソースオペランドの各々に対する別々のマルチプ
レクサを表わし得る。
【0047】 ライン間依存性チェック回路は、さらにライン内の命令動作ごとのデスティネ
ーションレジスタ番号を比較して、ライン内の最も古い命令動作を判断し、ライ
ン内の1つ以上の命令動作のデスティネーションオペランドである各アーキテク
チャ化レジスタを更新する。フューチャファイル20は、次いでラインのデステ
ィネーションオペランドに対応するエントリにおいて、デスティネーション再命
名回路60によってR♯およびPR♯が割当てられて更新される。更新された経
路は、図面の簡略化のために図3には示さない。
【0048】 順序依存性回路64は、特定の命令動作に対して記録され得る順序依存性を追
跡する。たとえば、x86命令セットアーキテクチャを用いる一実施例において
は、順序依存性は以下のように定義される。(i)後のメモリ動作ごとの順序依
存性を発生させる、セグメントロード。(ii)後の浮動小数点命令動作ごとの順
序依存性を発生させる、浮動小数点制御ワード更新。一般的に、後の命令動作に
対する直線化バリアを生成させるどのような命令動作も、直線化命令動作から後
に影響された命令動作への順序依存性を生じさせる。「直列化バリア」とは、そ
のまわりではアウトオブオーダーまたは投機的実行が禁止されるプログラムシー
ケンスにおけるバリアのことである。いくつかの命令セットアーキテクチャは、
唯一の機能が直線バリアを提供することである命令を有する。
【0049】 上述の順序依存性は、順序依存性レジスタ66A−66Nを用いることにより
追跡することができる。順序依存性回路64は、順序依存性を生成する命令動作
に応答して、命令動作のR♯を順序依存性レジスタ66A−66Nの1つにスト
アする。1つの順序依存性レジスタ66A−66Nは、プロセッサ10によって
検出される各順序依存性に対して与えられる。さらに、有効ビットが含まれ、(
フューチャファイル20における有効ビットと同様に)R♯の記録に応答してセ
ットされ、対応の命令動作のリタイアの際にリセットされる。特定の順序依存性
によって順序依存性があると定義される命令動作に応答して、順序依存性回路6
4は、関連のR♯を、その命令動作に対する順序依存性の1つとして提供する。
【0050】 上述の状態に加えて、順序依存性回路64は、より古いストアメモリ動作の前
にスケジュールされ、その後(ローディングによってアクセスされるメモリオペ
ランドに対して)より古いストアメモリ動作に依存することが見出される、ロー
ドメモリ動作の先行の発生を追跡するテーブルを採用する。テーブルは、ロード
メモリ動作のフェッチアドレスによって索引付けされ、かつ実行の間に依存性が
検出された場合、より古いストアメモリ動作のフェッチアドレスにより学習され
た第1のテーブルを含む。第2のテーブルは、ストアメモリ動作のフェッチアド
レスによって索引付けされ、ストアメモリ動作のディスパッチの際にストアメモ
リ動作のR♯で更新される。もしロードメモリ動作がテーブル内のヒットである
と、対応のR♯がロードメモリ動作に対する順序依存性として提供される。
【0051】 上述のように、スケジューラ36は、その命令動作が満たされる各依存性の検
出に応答して適切な実行コアに対する命令動作をスケジューリングし発行する。
特定的には、メモリ動作は実行コア40A内のアドレス生成ユニット40AAに
対して発行される。アドレス生成ユニット40AAは、整数レジスタファイル3
8Aから読出されたレジスタオペランドを受け、メモリ動作に対応するメモリオ
ペランドのアドレスを生成する。アドレスは仮想アドレスであり、これはプロセ
ッサ10によって採用される命令セットアーキテクチャによって指定されるアド
レス変換方式によって、メモリ(およびDキャッシュ44)にアクセスするため
の物理アドレスに変換される。TLB40ABは、先行の変換の結果のためのキ
ャッシュであり、その中で対応の物理アドレスへヒットする仮想アドレスの急速
な変換、および変換機構を介した対応の記憶場所に割当てられるさまざまな属性
の急速な判定を可能にする。AGU40AAおよびTLB40ABの組合せは、
物理アドレスをロード/ストアユニット42に(およびDキャッシュ44および
スケジューラ36に並行に)与える。
【0052】 ロード/ストアユニット42は、メモリ動作が成功して実行を完了したか、ま
たは再試行されるべきであるかどうかを判断する。もし再試行状態が検出される
と、ロード/ストアユニット42は、スケジューラ36に対して再試行信号をア
サートし、再試行タイプ信号を介して再試行に対する理由を提供する。一実施例
においては、メモリ動作は以下の理由により再試行される: (i) メモリ動作はDキャッシュ44をミスするロードメモリ動作である; (ii) メモリ動作はフルであるロード/ストアユニット42内のバッファを
必要とする(たとえば、外部インターフェイスユニット46によってメインメモ
リからフェッチされるべきミスアドレスをストアするためのミスバッファ); (iii) メモリ動作は、並行してDキャッシュ44にアクセスする別のメモ
リ動作に対して、Dキャッシュ44内でバンクコンフリクトに遭遇する; (iv) メモリ動作は、ストアメモリ動作であり、自己修飾コード(SMC)
チェックを必要とする; (v) メモリ動作は、ストアキュー70内で1つ以上のストアメモリにヒッ
トするロードメモリ動作であり(すなわち、1つ以上のメモリ動作が、ロードメ
モリ動作によってアクセスされる少なくとも1バイトのメモリオペランドを供給
する)、ストアキュー70は対応のデータを転送することができない; (vi) メモリ動作は、非投機的に実行されるべきである。
【0053】 理由(i)は、スケジューラ36が、ロードメモリ動作をスケジューリングし
再発行する前に、外部インターフェイスユニット46によって与えられる整合フ
ィルアドレスを待機する、別の再試行タイプとして符号化される。外部インター
フェイスユニット46は、データがフィルアドレスからDキャッシュ44に対し
て記憶のために提供されたことを示すフィルアドレスを提供する(よって対応の
ロードメモリ動作はDキャッシュ44においてヒットであり得る)。スケジュー
ラ36は、(実行コア40Aによって提供される)ロードメモリ動作の物理アド
レスを記録し、フィルアドレスと比較する。理由(ii)、(iii)および(v)
は、単一の再試行タイプとして符号化され、ここでスケジューラ36は、特定の
待機要件なしで対応のメモリ動作を再スケジューリングすることにより応答する
。理由(iv)は、再試行タイプとして符号化され、スケジューラ36は、SMC
チェックが完了した後で対応のストアメモリ動作を再発行のためにスケジューリ
ングする。理由(vi)は、再試行タイプとして符号化され、スケジューラ36は
、対応のメモリ動作が非投機的になった後で、メモリ動作を再発行のためにスケ
ジューリングする。1つの特定的な実施例によれば、メモリ動作はもしメモリ動
作がページ境界を横断するメモリオペランドにアクセスすれば非投機的に行なわ
れるべきであり(すなわち、少なくとも1バイトのメモリオペランドが第1のア
ドレス変換によって第1のページに変換され、メモリ動作の少なくとも他の1バ
イトが、第1のアドレス変換とは異なった第2のアドレス変換によって第2のペ
ージに変換されてストアされる)、変換は、メモリオペランドのメモリタイプが
非投機的であること、またはメモリオペランドがTLBにおいてミスすることを
示す。非投機的に実行することに対する第1および最後の理由は、ハードウェア
を簡略化するための設計選択であり、中間の理由は、プロセッサ10によって用
いられる命令セットアーキテクチャによって義務づけられている。
【0054】 上述の説明はあるメモリ動作を非投機的に再発行することに関するが、他の命
令動作も非投機的に再発行されることに留意されたい。たとえば、例外に遭遇す
るどのような命令動作(たとえばアーキテクチャによって指定されるトラップま
たはフォールト、またはプロセッサ10によって実現される特定のマイクロアー
キテクチャに対して規定されるマイクロアーキテクチャの例外)も、非投機的に
再発行され得る。この態様で、例外に関する情報は非投機的実行の間に獲得され
る。こうして、例外情報をストアしトラッキングするために用いられるハードウ
ェアの量を減じることができる。
【0055】 ストアキュー70は、ヒットおよびストアR♯信号を介してストアキュー内の
ストアメモリ動作をヒットするロードメモリ動作に関する付加的な情報を提供す
る。ヒットおよびストアR♯は、ロードメモリ動作の再試行が起こったかどうか
にかかわらず提供される。ヒット信号は、ストアキューの中でヒットが検出され
たことを示し、ストアR♯は、ロードによってヒットされたストアのR♯を示す
。この情報は、ロードによってヒットされたストアが再実行され(かつ異なった
アドレスを受け)れば、ロードメモリ動作を再試行させるために用いられる。ス
トアR♯の使用は、以下により詳細に説明される。ストアR♯がこの例で用いら
れるが、ストアを識別するどのような識別子をも用い得ることに留意されたい。
たとえば、ロードによってヒットされるストアキュー70内のストアキューエン
トリを識別するストアキュー番号が提供され得る。そのような実施例が企図され
る。
【0056】 上述のように、ストアキュー70は、ストアキュー70におけるストアメモリ
動作をヒットするロードメモリ動作のすべての場合においてデータの転送が可能
なわけではない。たとえば、ストアキュー70における異なったストアによって
、さまざまなバイトのロードメモリオペランドが提供され得る。しかしながら、
ストアキュー70は、特定のロードメモリオペランドを転送し得る別々のストア
の数を限定し得る。たとえば、もしストアキュー70が、最大2つのストアメモ
リからのデータの転送が可能であると、特定のロードメモリオペランドの異なっ
たバイトに対する3つ以上のストアメモリ動作に対するヒットは、特定のロード
メモリオペランドのすべてのバイトの転送を妨害する。さらに、ストアキュー7
0のいくつかの実施例においては、ストアデータを受取る前にストアメモリオペ
ランドアドレスを受取る。もしストアデータが利用可能でなければ、ストアキュ
ーは、ヒットが検出されたとしてもストアデータを転送することができない。
【0057】 ここで命令動作は、他の命令動作よりも「古い」または「若い」と称すること
に留意されたい。第1の命令動作は、もし第1の命令動作がプログラム順序で第
2の命令動作の前に生じていれば、第2の命令動作よりも「古い」。これに対し
、もし第1の命令動作が、プログラム順序において第2の命令動作の後で起こる
ものであれば、第1の命令動作は第2の命令動作よりも「若い」。ここで用いら
れるように、「発行」という用語は、実行のために実行ユニットに命令動作を送
信することを指す。「再発行」という用語は、先行して発行された(かつ、命令
動作に対してスケジューラ36によって記録された依存性を介して、直接または
間接的に、不正に実行されたと見出された)命令動作を発行することを指す。さ
らに、「メモリ動作」という用語はここで、メモリ動作を有する命令動作を指す
。ロードメモリ動作は、ソースオペランド(およびレジスタデスティネーション
オペランド)としてメモリソースオペランドを有し、かつソースオペランドから
レジスタデスティネーションオペランドへのデータの転送を指定する。ストアメ
モリ動作は、レジスタソースオペランドとメモリデスティネーションオペランド
とを有し、かつレジスタソースオペランドからメモリデスティネーションオペラ
ンドへのデータ転送を指定する。図3にはアドレス生成ユニット40AAおよび
対応のTLB40ABが示されているが、さまざまな実施例がどのような数のア
ドレス生成ユニットおよびTLBをも含み得る。ロード/ストアユニット42は
、各AGUに対応するメモリ動作のための別々の再試行信号、再試行タイプ信号
、ヒット信号およびストアR♯を提供し得る。
【0058】 図4を参照すると、スケジューラ36の一実施例のブロック図が示される。他
の実施例も可能であり企図される。図4に示されるように、スケジューラ36は
命令動作(ROP)バッファ80、発行ピック回路82、リタイア制限ピック回
路84、ROP制御回路86、依存性バッファ88、物理アドレスバッファ90
、ストアR♯バッファ92、リタイア回路94、および依存性デコーダ回路96
を含む。ROPバッファ80は、(即時および変位データなどの情報を含む)命
令動作を受けるよう結合され、マップユニット30からPR♯を割当てられ、か
つレジスタファイル38A−38Bおよび実行コア40A−40Bに結合されて
発行された命令動作およびPR♯を提供する。ROPバッファ80はさらに、発
行ピック回路82に結合され、これはROP制御回路86に結合される。リタイ
ア制限ピック回路84は、リタイア回路94およびROP制御回路86に結合さ
れ、これはリタイア回路94、依存性バッファ88、物理アドレスバッファ90
、およびストアR♯バッファ92に結合される。ROP制御回路86はさらに、
ロード/ストアユニット42から再試行および再試行タイプ信号を受取るよう結
合される。依存性デコーダ回路96は、ソース依存性R♯および順序依存性R♯
をマップユニット30から受取るよう結合され、依存性バッファ88に結合され
る。物理アドレスバッファ90は、外部インターフェイスユニット46からフィ
ルアドレスを受取り、かつ1つ以上の物理アドレスを実行コア40Aから受取る
よう結合される。ストアR♯バッファ92は、ロード/ストアユニット42から
1つ以上のヒット信号および1つ以上のR♯を受けるよう結合される。
【0059】 依存性デコーダ回路96は、スケジューラ36に書込まれる各命令動作が依存
する命令動作を識別するR♯を受け、かつ対応の命令動作に対してR♯を依存性
表示にデコードする。上述のように、もし(たとえば、フューチャファイル20
から)R♯が無効であると表示されると、そのR♯に基づく依存性は示されない
。依存性デコーダ回路96に提供する代わりに、マップユニット30は(たとえ
ば、各命令動作ごとに図5に示されるような依存性ベクトルを提供することによ
り)直接各命令動作に対して依存性表示を生成し得る。一般的に、依存性表示は
、第1の命令動作および第2の命令動作に対して割当てられ、第1の命令動作の
第2の命令動作に対する依存性(またはその欠如)を識別する。たとえば、各依
存性表示は、セットされている場合には第1の命令動作の第2の命令動作に対す
る依存性を表わすビットを含み、かつクリアされている場合には第1の命令動作
の第2の命令動作に対する依存性の欠如を示すビットを含み得る。ビットのセッ
トおよびクリアの意味は、他の実施例においては逆であり得、他の依存性表示の
符号化もまた可能である。
【0060】 依存性デコーダ回路96は、記憶のために依存性表示を依存性バッファ88に
与える。依存性バッファ88は、多数の依存性エントリを含み、その各々がRO
Pバッファ80における2つのエントリに割当てられる。依存性エントリは、依
存性表示を記憶するが、これはROPバッファ80内の2つのエントリのうちの
一方にストアされる第1の命令動作の、2つのエントリの他方にストアされる第
2の命令動作に対する依存性またはその欠如を識別する。もし依存性表示が依存
性を示せば、第1の命令動作は、第2の命令動作が依存性を満たすまで、スケジ
ューリングに対し適切ではない。
【0061】 ROP制御回路86は、依存性バッファ88内の依存性表示およびこれらの依
存性を満足しているかをモニタし、スケジューリングに対して適切である命令動
作を識別する。ROP制御回路86は、発行ピック回路82に適切な命令動作を
識別するが、これは適切な命令動作をスキャンして、実行コア40A−40Bに
発行するための命令動作を選択する。選択された命令動作は、発行ピック回路8
2に応答してROPバッファ80から読出され、かつ実行のためにレジスタファ
イル38A−38Bおよび実行コア40A−40Bに与えられる。一般的に、発
行ピック回路82は、命令動作を(そのタイプの命令動作がスケジューリングに
対して適切である場合)各実行コア40A−40B内の実行ユニットごとに選択
するよう構成される。選択された命令動作は、スケジューリングに対して適切で
あるそのタイプの命令動作の最も古いものである。一実施例においては、発行ピ
ック回路82は、クロックサイクルごとに適切な命令動作を2回スキャンして、
所与のタイプの2つの命令動作の選択を可能にする。第2のスキャンは、所与の
タイプの第2の実行ユニットの発行のために第2の命令動作を選択する(たとえ
ば、実行コア40Aの一実施例においては2つのアドレス生成ユニットおよび2
つのALUが与えられる)。第2のスキャンにおいては、第1のスキャンにおい
て選択された命令動作はマスクされている(すなわち、不適切に見える)ので、
対応のタイプの2番目に古い命令動作が選択され得る。
【0062】 特定的な一実施例においては、発行ピック回路82は、各命令タイプに対する
独立したピック回路を含み得る。各ピック回路は、他のピック回路の動作と並行
して、対応のタイプの命令動作に対してスキャンし得る。各命令タイプは、他の
命令タイプとは異なった実行リソース(たとえば実行ユニット)を用い得、それ
により、ピック回路の独立した動作が可能になる。
【0063】 発行ピック回路82は、発行のためにどの命令動作が選択されたかを(ROP
制御回路86に)報告する。選択された命令動作はスケジューリングされたと称
され、命令動作は、それらがROPバッファ80から読出されるとすぐに発行さ
れる(または再発行される)。ROP制御回路86は、命令動作ごとの実行状態
を維持する。実行状態は広く、「非実行(non executed)」状態、「実行中(ex
ecuting)」状態、および「終了(done)」状態を含むよう定義される。これら
の状態の各々は、設計選択に従って、図8に示されるように例示的なステートマ
シンに表わされるように多数の状態を含み得る。命令動作は、命令動作が発行さ
れるまで、スケジューラ36へのストアの際に非実行であるとみなされる。命令
動作の実行状態は、発行に応答して実行中状態に変化し、その後実行の完了の際
に、終了状態に変化する。命令動作の実行状態は、もし実行状態が(たとえば、
ロード/ストアユニット42からの再試行信号を介して)再試行されるか、また
はもしその命令動作が(直接的または非直接的に)依存する別の命令動作が未終
了である場合に、どの時点においても非実行状態(または「非終了(undone)」
)に変えられる。一般的に、ROP制御回路86は、もし特定の命令動作が実行
されていない実行状態を有し、かつもし特定の実行状態の各依存性が満たされて
いれば、特定の命令動作をスケジューリングに対して適切であると識別し得る。
【0064】 命令動作の実行状態は、その命令状態に対する再試行に応答して非実行状態に
変化するために、命令動作は再試行に応答して再スケジューリングおよび再発行
のために適切となる。しかしながら、ある種の再試行タイプは、後の事象(たと
えば、ミスの発生するロードメモリ動作の場合にフィルアドレスが与えられるこ
と、または命令動作が非投機的になること)が発生しない限り、命令動作は再ス
ケジューリングされないことを指定し得る。そのような場合においては、ROP
制御回路86は、再試行ROPの実行状態を非実行状態に変化させ得るが、後の
事象が発生するまで、その命令動作がスケジューリングに対して適切であるとい
う信号を発しない。
【0065】 依存性表示が、対応の命令動作の発行に応答して依存性バッファ88から削除
されないので、依存性連鎖の中の命令動作は依存性が満たされると投機的に発行
され得る。特定の命令動作に対する他の命令動作の依存性は、もし特定の命令動
作が非終了状態であれば満たされていないとして再カテゴリ化され、よってこれ
らの他の命令動作もまた非終了状態となる。この態様で、投機的に発行された依
存性連鎖は非終了状態となり、連鎖の中の第1の命令動作の再試行に応答して再
発行される。
【0066】 ロードメモリ動作の実行の間に報告される再試行に加えて、ロードメモリ動作
はまた、ロードメモリ動作の後に発行されるより古いストアメモリ動作のために
も再試行され得る。物理アドレスバッファ90は、これらの再試行シナリオを検
出するために提供される。一般的に、ロードメモリ動作は、より古いストアメモ
リ動作に依存するとは(依存性バッファ88内の依存性表示を介して)示されな
い。その代わりに、ロードメモリ動作はより古いストアメモリ動作に関係なくス
ケジューリングされる(例外は、一実施例においては、上述の順序依存性機構で
ある)。しかしながら、ロードメモリ動作は、もしより古いストアメモリ動作が
ロードメモリ動作によってアクセスされるメモリオペランドの少なくとも1バイ
トを更新すれば、より古いメモリ動作に依存する可能性がある。このシナリオを
検出するために、物理アドレスバッファ90は、(実行コア40Aから受取られ
る)ロードによってアクセスされる物理アドレスをストアする。物理アドレスバ
ッファ90は、ROPバッファ80と同じ数のエントリを含み、そのエントリの
各々はロードメモリ動作に対する物理アドレス情報をストアすることが可能であ
り、かつROPバッファ80内の対応のエントリに割当てられる。実行ロードメ
モリ動作に対応するエントリは、ロードメモリ動作の物理アドレスで更新される
【0067】 ストアメモリ動作の実行の間に、ストアメモリ動作によって更新された物理ア
ドレスは実行コア40Aによって提供される。物理アドレスバッファ90は、ス
トアアドレスと、より新しいロードメモリ動作に対応する物理アドレスバッファ
90内の物理アドレスとを比較する。言い換えると、アドレス比較は、実行スト
アメモリ動作よりも若い命令動作に対応する物理アドレスバッファ90内のこれ
らのエントリに対してマスクされている。もしロードアドレス上のストアアドレ
スの検出がヒットすると、対応のロードメモリ動作は非終了状態となる(物理ア
ドレスバッファ90は、対応のロードメモリ動作がヒットしたことをROP制御
回路86に信号を送り、ROP制御回路86は、対応のロードメモリ動作の実行
状態を非実行状態に変える)。対応のロードメモリ動作は後で再発行される。再
発行の後の実行の間に、ロードメモリ動作は、ストアキュー70内のより古いス
トアメモリ動作をヒットするか(ストアデータが転送されるか、ロードメモリ動
作が再試行される)または、より古いストアメモリ動作がキャッシュおよび/ま
たはメインメモリを更新される。いずれの場合においても、ロードメモリ動作は
、再発行しかつ成功して実行を完了させた後で、正しいメモリオペランドを受け
る。一実施例においては、もしロードメモリ動作が、より古いストアが物理アド
レスバッファ90内の対応の物理アドレスをヒットしたことにより、非終了状態
であれば、ロードメモリ動作は、順序依存性回路64内のテーブルに記録される
ことに留意されたい。
【0068】 物理アドレスバッファ90が、ロードメモリ動作が依存するより古いストアメ
モリ動作の前に、ロードメモリ動作の不正スケジューリングから回復するための
機構を提供する一方、ロードメモリ動作を非終了にさせるおそれのある別の問題
が生じ得る。もしロードメモリ動作が、これが依存するストアメモリ動作の後に
スケジューリングされており、かつストアデータがロード/ストアユニット42
内のストアキューから転送されていたとしても、ストアメモリ動作それ自体は非
終了状態になり得る。(メモリ動作のメモリオペランドのアドレスを生成するた
めに用いられる)ストアメモリ動作のアドレスオペランドは、再発行の間に異な
り得る(すなわち、不正なアドレスオペランドの受信が再発行の理由となり得る
)ので、ストアアドレスは再発行実行の間に物理アドレスバッファ90をヒット
せず、ロードメモリ動作を非終了にするおそれがある。スケジューラ36は、こ
の可能性に対処するためにストアR♯バッファ92を装備する。
【0069】 ストアキュー70へのストアの際のロードメモリ動作のヒット検出に応答して
、ロード/ストアユニット42は、スケジューラ36にヒット信号を与え、かつ
ロードメモリ動作によってヒットされたメモリ動作のストアR♯を提供する。物
理アドレスバッファ90と同様に、ストアR♯バッファ92は、ROPバッファ
80と同じ数のエントリを含む。各エントリは、ROPバッファ80における対
応のエントリに割当てられる。もしヒット信号がロードメモリ動作の実行のため
にアサートされると、ストアR♯バッファ92は、ロード/ストアユニット42
から提供されるストアR♯をストアする。
【0070】 ロード/ストアユニット42は、ストアR♯バッファ92にも、実行ストアの
R♯を与える。ストアR♯は、ストアR♯バッファ92内にストアされるR♯と
比較される。もし整合が検出されると、ストアR♯バッファ92は、ROP制御
回路86に、対応のロードメモリ動作が未終了であることという信号を発する。
ROP制御回路86は信号に応答して、対応のロードメモリ動作の実行状態を非
実行状態に変える。次いで、ロードメモリ動作は再スケジューリングされ再発行
される。ストアR♯は、所望であれば実行コア40Aからのストアメモリ動作の
実行の間に与えられてもよいことに留意されたい。
【0071】 上述のようにロード依存性に対するストアの検出に加えて、物理アドレスバッ
ファ90は、他の目的に対しても用いられる。たとえば、物理アドレスバッファ
90は、Dキャッシュ44をミスしたロードメモリ動作がいつ再発行されるべき
かを判断するために用いられる。ロードメモリ動作は、外部インターフェイスユ
ニット46によって与えられる対応のデータの後に再発行される。したがって、
外部インターフェイスユニット46は、Dキャッシュ44に与えられるフィルデ
ータを識別するフィルアドレスを与える。物理アドレスバッファ90は、フィル
アドレスを、ストアされたアドレスと比較し、かつ整合があればROP制御回路
86に信号を送る。応答して、ROP制御回路86は、ロードメモリ動作に対す
るデータが与えられ、よって(ロードメモリ動作の他の依存性が満たされたと仮
定して)ロードメモリ動作が再スケジューリングされるべきことを記録する。
【0072】 外部インターフェイスユニット46はさらに、外部インターフェイスで受けら
れたプローブに対応するプローブアドレスを提供し得る。一般的に、プローブは
、コンピュータシステムにおけるキャッシュコヒーレンシを維持し、かつ別の装
置によって獲得されたキャッシュブロックおよび、もしプロセッサ10がキャッ
シュブロックのコピーを有していればそのキャッシュブロックに対する適切なキ
ャッシュ状態を特定するために用いられる。もしプローブアドレスが、物理アド
レスバッファ90内のロード物理アドレスをヒットすれば、対応のロードは、コ
ヒーレンシを維持し、かつプロセッサ10によって採用される命令セットアーキ
テクチャによって指定されるメモリ順序規則を維持するために再スケジューリン
グされる必要がある。たとえば、x86命令セットアーキテクチャは、強いメモ
リ順序付けを指定する。したがって、プローブによってヒットされた投機的ロー
ドは、もし先行のメモリ動作がスケジューラ36において存在し、かつまだ実行
されていなければ、再スケジューリングされる必要がある。
【0073】 上述のように、ROPバッファ80は、命令動作をストアし、かつ発行ピック
回路82に応答してレジスタファイル38A−38Bおよび実行コア40A−4
0Bに命令動作を発行する。ROPバッファ80は、各々が命令動作のストアが
可能である複数のエントリを含む。特定の命令動作に割当てられたエントリは、
命令動作のR♯によって識別される。したがって、ROPバッファ80内の各エ
ントリは、(i)依存性バッファ88内の依存性エントリの対応の第1の割当て
られた組であって、そのエントリ内の命令動作の、スケジューラ36内の他の命
令動作への依存性表示をストアする組;(ii)依存性エントリの対応の第2の割
当てられた組であって、スケジューラ36内の他の命令動作の、そのエントリ内
の命令動作への依存性表示をストアする組;(iii)対応の物理アドレスバッフ
ァエントリ;および(iv)対応のストアR♯バッファエントリ、を有する。集合
的に、所与のR♯に対応する、スケジューラ36のさまざまなバッファ内のエン
トリは、ここで「スケジューラエントリ」と称する。
【0074】 リタイア制限ピック回路84およびリタイア回路94は、スケジューラ36か
ら命令動作をリタイアするよう協働する。ROP制御回路86は、どの命令動作
が終了状態の実行状態を有するかをリタイア制限ピック回路に表示する。リタイ
ア制限ピック回路84は、スケジューラ36のヘッドから表示をスキャンし(す
なわち、スケジューラ36内の最も古い命令動作)、終了されていない実行状態
を有する第1の命令動作、または予め定められた最大数の命令動作、のいずれか
をスキャンし、すべて終了状態にさせる。したがって、リタイア制限ピック回路
84は、リタイアされるべき最も若い命令動作を決定する。リタイア制限ピック
回路84は、リタイアされるべき最も若い命令動作と通信し、リタイア回路94
は、いくつの命令動作が実際にリタイアされるべきかを判断する。リタイア回路
94は、リタイアされる最後の命令動作のR♯をブロードキャストし、命令動作
がリタイアされるROP制御回路86と通信する。リタイアされる命令動作ごと
に、ROP制御回路86は、ROPバッファ80、物理アドレスバッファ90、
およびストアR♯バッファ92内の対応のエントリを無効化する。さらに、リタ
イアされる命令動作ごとに、ROP制御回路86は、リタイアされる命令動作に
対する命令動作の依存性を表示する、依存性バッファ88内の各依存性エントリ
をクリアする。
【0075】 ここで用いられる場合、「バッファ」という用語は、情報の項目をストアする
よう構成されるメモリを指す。バッファは、1つ以上のエントリを含み得、その
各々はバッファが対応して設計される情報の項目の1つをストアするために十分
な記憶領域を含むメモリ内の記憶位置である。
【0076】 物理アドレスバッファ90およびストアR♯バッファ92が、ROPバッファ
80と同じ数のエントリを有すると説明されたが、他の実施例においてはより少
ないエントリを含むバッファを用い得ることに留意されたい。バッファ90また
は92内の各エントリは、たとえば、対応のロードメモリ動作をストアするRO
Pバッファ80におけるエントリを識別するタグを含む。さらに、上述のように
、ストアキュー番号は、ロードメモリ動作のヒットが検出されたストアメモリ動
作の再発行の検出に対するストアR♯の代わりに用いられてもよい。
【0077】 図5を参照すると、依存性ベクトル100の一実施例のブロック図が示される
。依存性ベクトル100は、複数の依存性表示102A−102Nを含む。各依
存性表示102A−102Nは、依存性ベクトル100に対応する命令動作のス
ケジューラ36内の1つの他の命令動作に対する依存性(またはその欠如)を示
す。命令動作は、こうして他の命令動作の任意の番号に依存し得る。さらに、依
存性は命令動作に従って記録され、依存性のタイプによっては記録されないので
、依存性は任意の理由に対して(たとえば、プロセッサ100の設計を簡略化さ
せるために)生成され得る。上述のように、依存性ベクトル100はマップユニ
ット30によって与えられる依存性R♯をデコードし、依存性ベクトル100内
の対応の依存性表示をセットして依存性を表示し、残りの依存性表示をセットし
て依存性の欠如を示すことにより生成され得る。これに代えて、マップユニット
30は記憶のためにスケジューラ36に図5に示される形で依存性ベクトルを提
供してもよい。
【0078】 図6を参照すると、依存性バッファ88の一実施例のブロック図が示される。
他の実施例も可能であり企図される。図6の実施例においては、依存性バッファ
88は依存性エントリ104A−104Lを含む複数の依存性エントリを含む。
スケジューラ36の特定のエントリにストアされる特定の命令動作の依存性を識
別する依存性エントリは(すなわち、ROPバッファ80におけるエントリおよ
び物理アドレスバッファ90およびストアR♯バッファ92内の対応のエントリ
)依存性エントリの行と列として構成される。依存性エントリの各行は、特定の
スケジューラエントリ内の特定の命令動作の依存性を特定する依存性表示をスト
アする。たとえば、スケジューラエントリ0内の命令動作の依存性を識別する依
存性エントリは、依存性エントリ104A−104G(および図示されないがそ
の行内の中間のエントリ)内に記録される。依存性エントリ104A−104G
に示される例示的な依存性表示は、スケジューラエントリ0内の命令動作の、ス
ケジューラエントリN−2内の命令動作に対する依存性を示す(依存性エントリ
104F)。さらに、依存性エントリの各列は、特定の命令動作に対する、各他
の命令動作の依存性を特定する。たとえば、スケジューラエントリ0内の命令動
作に対する、各他の命令動作の依存性は、依存性エントリ104H−104Lに
記録される。示される例示的な依存性表示は、スケジューラエントリ2における
命令動作の、スケジューラエントリ0内の命令動作に対する依存性を示す(依存
性エントリ104I)。
【0079】 依存性バッファ88は、1組の入力信号(Block(0)からBlock(N−1))を
受けるよう結合される。各Block信号は、スケジューラエントリの1つに対応す
る。Block信号は、アサートされた場合に、対応のスケジューラエントリに記憶
される命令動作が、その命令動作に対する依存性を満たさないことを示す。デア
サートされた場合は、Block信号は命令動作に対する依存性が満たされたことを
示す。一般的に、Block信号は、対応の命令動作をスケジューラ36に書込む場
合にアサートされ、対応の命令動作の実行の間にデアサートされる。もし命令動
作が再試行されるかまたは非終了となれば、Block信号は対応の命令動作が再実
行されるまで再アサートされる。Block信号は、ROP制御回路86によって、
対応の命令動作の実行状態に従ってアサートおよびデアサートされる。各Block
信号は、対応の命令動作に対する他の命令動作の依存性を記録する依存性エント
リに経路制御される。たとえば、Block(0)は、依存性エントリ104H−104
Lに経路制御される。Block信号がデアサートされた場合、対応の依存性は満た
されたとみなされる。たとえば、Block(0)がデアサートされた場合、スケジュー
ラエントリ2内の命令動作の、スケジューラエントリ0内の命令動作に対する依
存性が満たされたと判断される。
【0080】 依存性バッファ88は、さらに複数の出力信号を提供する(Not Blocked(0)か
らNot Blocked(N−1))。各Not Blocked信号は、スケジューラエントリの1
つに対応する。Not Blocked信号は、アサートされた場合に、対応のスケジュー
ラエントリ内にストアされる命令動作の依存性が満たされたことを示す。アサー
トされた場合、Not Blockedは、対応のスケジューラエントリにストアされる命
令動作の依存性が満たされていないことを示す。一般的に、Not Blocked信号は
対応の命令動作の依存性に対応する最後のBlock信号がデアサートされるまでデ
アサートされ、次いでNot Blocked信号がアサートされる。Not Blocked信号がア
サートされる命令動作は、少なくともその命令動作の依存性に関してはスケジュ
ーリングに適切である(すなわち、他の条件、たとえば後の事象に対する待機を
指定する再試行タイプなどはスケジューリングを阻むおそれがある)。Not Bloc
ked信号は、対応の命令動作の依存性を記録する依存性エントリに経路制御され
る。たとえば、Not Blocked(0)は、依存性エントリ104A−104Gに経路制
御される。Not Blocked信号は各々がワイヤ−ORラインであり得、これらはプ
リチャージされてアサートされ、次いで対応のBlock信号がアサートされる1つ
以上の依存性エントリによってデアサートされ、依存性表示は依存性を表示する
【0081】 リソースまたは依存性理由に基づくのではなく、スケジューラ内の命令動作の
位置に基づいて依存性を記録することにより(たとえばR♯により)、依存性バ
ッファ88は、実現し高周波数で動作することがより容易になり得る。依存性バ
ッファ88内の配線は非常に規則的である(すなわち、依存性バッファは配線に
関して過密ではなく、配線の重なり合いがほとんどない)。規則性は実現化を促
進し、かつ(たとえば、依存性バッファ88の高密度な実現化により)高周波動
作に貢献し得る。
【0082】 図6に示されるように、左上から右下への対角線上の依存性エントリは、命令
動作のそれ自体への依存性を示唆する。これらの依存性エントリは実現されない
であろう(これらのエントリは点線のボックスによって示される)。
【0083】 ここで用いられる場合、「アサートされた」という用語は、信号またはビット
に対し論理的に真の値を提供することを意味する。信号またはビットは、特定の
条件が示される値を保持する場合にアサートされ得る。反対に、信号またはビッ
トは、特定の条件が欠如することを示す値を含む場合に「デアサート」され得る
。信号またはビットは、これが論理0値を保持するか、または反対に、これらが
論理1値を保持している場合にアサートされていると定義され、信号またはビッ
トは、反対の論理値を保持する場合にデアサートしていると定義され得る。
【0084】 図7を参照すると、依存性バッファ88およびROP制御回路86の一実施例
の部分を示すブロック図が、より詳細に示される。他の実施例も可能であり企図
される。図7の実施例に従うと、ROP制御回路86は、複数の独立回路を含み
、各々がスケジューラ36内のエントリに対応する。たとえば、スケジューラ内
のエントリ(i)は図7に示される。ROP制御回路(i)86Aは、エントリ
(i)内にストアされる命令動作の実行状態を追跡するために示される。さらに
、エントリ(i)内にストアされる命令動作の依存性をストアするいくつかの依
存性エントリ104M−104Nが示される。より特定的には、エントリ(i)
にストアされる命令動作の、エントリ(j)にストアされる命令動作に対する依
存性(依存性エントリ104M)、およびエントリ(j+1)にストアされる命
令動作に対する依存性(依存性エントリ104N)を示す依存性エントリが示さ
れる。Block(i)およびNot Blocked(i)信号が、Block(j)およびBlock(j+1)
信号とともに示される。ROP制御回路(i)86Aは、Block(i)信号を提供す
るよう結合され、かつNot Blocked(i)信号を受けるよう結合される。さらに、R
OP制御回路(i)86Aは、retry PA(i)信号およびfill hit(i)信号を
物理アドレスバッファ90から、fill/probe信号を外部インターフェイスユニッ
ト46から、retry stq(i)信号をストアR♯バッファ92から、再試行信号
および再試行タイプ信号をロード/ストアユニット42から、almost done信号
を実行コア40A−40Bから、およびpick(i)信号を発行ピック回路82か
ら受けるよう結合される。さらに、ROP制御回路(i)86Aは、発行ピック
回路82にrequest(i)信号を提供するよう結合される。
【0085】 ROP制御回路(i)86Aは、命令動作のエントリ(i)への書込の際に、
エントリ(i)にストアされる命令動作の依存性のモニタを開始する。命令動作
がその命令動作に対する他の命令動作の依存性を満たすまで、ROP制御回路(
i)86Aは、(図6に示されるように、他の命令動作の命令動作に対する依存
性を記録する依存性エントリに経路制御される)Block(i)信号をアサートする。
命令動作は、命令動作の実行状態が非実行状態にある間は依存性を満たさず、実
行状態が実行中状態にあるが実行完了に近くなければ、依存性を満たす。さらに
、ROP制御回路(i)86Aは、Not Blocked(i)信号をモニタして、命令動作
の依存性がいつ満たされたかを判断する。
【0086】 命令動作の別の命令動作への依存性表示をストアする各依存性エントリ104
は、結合されてNot Blocked(i)信号をデアサートし、命令動作がブロックされた
ことを示す。たとえば、依存性エントリ104MはANDゲート106Aおよび
トランジスタ108Aに結合され、依存性エントリ104NはANDゲート10
6Bおよびトランジスタ108Bに結合される。もし依存性表示がストアされ、
依存性エントリが依存性を示し対応のBlock信号がアサートされると、ANDゲ
ートは対応のトランジスタを活性化させ、これがNot Blocked(i)信号をデアサー
トする。しかしながら、もし依存性表示が依存性を表示しないか、またはBlock
信号がデアサートされれば、ANDゲートは対応のトランジスタを非活性化させ
、したがってトランジスタはNot Blocked(i)信号をデアサートしない。したがっ
て、エントリ(i)内の命令動作が依存しない命令動作は、命令動作の発行をブ
ロックしない。エントリ(i)における命令動作が依存する命令動作は、依存性
が満たされるまでその命令動作の発行をブロックする(対応のBlock信号のデア
サートによって示される)。
【0087】 Not Blocked(i)のアサートに応答して、ROP制御回路(i)86Aはreques
t(i)信号を発行ピック回路82にアサートする。発行ピック回路82は、req
uest(i)信号を、他のエントリに対応する他の制御回路からの同様の信号とと
もにスキャンする。一旦発行ピック回路82が発行のために命令動作をスケジュ
ールすると、発行ピック回路82はpick(i)信号をアサートする。pick(i)
信号に応答して、ROP制御回路(i)は実行状態を実行中に変化させる。上述
のように、この実施例においては、スケジューラ36は命令動作のレイテンシを
記録し、命令動作の発行からのクロックサイクルをカウントして、依存性が満た
されるポイントを判断する。他の実施例は、たとえば他の実行ユニットから完了
信号を受取るか、または依存性が満たされたときを判断する他の代替的な機構を
用い得る。さらに、この実施例においては、ある命令動作は可変レイテンシを有
するか、またはカウントすることが所望であるより長いレイテンシを有し得る。
そのような命令動作に対しては、実行コア40A−40Bは、almost done信号
を与える。almost done信号は、可変レイテンシ命令動作が完了から予め定めら
れた数のクロックサイクルに達したことを実行コアが判断するときにアサートさ
れる。almost done信号は、ROP制御回路(i)86Aによって、予め定めら
れた数までのサイクルのカウントを開始するために用いられ、この時点で命令動
作は実行を完了する。
【0088】 もし命令動作がメモリ動作であれば、ROP制御回路(i)86Aは、再試行
ステータスがエントリ(i)内にストアされる命令動作に対して提供されている
クロックサイクルの間に、ロード/ストアユニット42から再試行信号をサンプ
リングする。アサートされた再試行信号に応答して、ROP制御回路(i)86
は、実行状態を非実行状態に変化させ、Block(i)信号を再アサートする。この態
様で、命令動作が実行前状態に戻され、命令動作を備えた依存性連鎖における後
の命令動作もまた発行前状態に(対応のNot Blocked(i)信号のデアサートを介し
て)戻される。さらに、ROP制御回路(i)86Aは、もし再試行信号がアサ
ートされていれば再試行タイプ信号をサンプリングする。もし再試行タイプが、
命令動作が再発行される前に後の事象が起こることを要求すれば、ROP制御回
路(i)86Aは、事象が観察されるべきことを記録し、かつ後の事象が生じる
まで、(request(i)信号を再アサートすることにより)要求再発行を禁止す
る。
【0089】 実行の間に再試行されることに加えて、ロードメモリ動作は、実行ストアメモ
リ動作の物理アドレスが、ロードメモリ動作の物理アドレス(物理アドレスバッ
ファ90内にストアされる)をヒットすることにより、または実行ストアメモリ
動作のR♯がロードメモリ動作に対して記録されるストアR♯をヒットすること
により、再試行され得る。前者の場合、物理アドレスバッファ90は、retry PA
(i)信号をアサートして、ROP制御回路(i)86Aと通信する(他のエン
トリごとに同様の信号を含み得る)。後者の場合、ストアR♯バッファ92は、
retry stq(i)信号をアサートして通信する(他のエントリごとに同様の信号
を含み得る)。いずれかの信号のアサートに応答して、ROP制御回路(i)8
6Aが、実行状態を非実行状態に変化させ、Block(i)信号を再アサートする。No
t Blocked(i)信号がアサートされたと仮定すると、ROP制御回路(i)86A
は、request(i)信号をアサートして、命令動作の再スケジューリングおよび
再発行の要求をする。
【0090】 再試行、retry PA(i)およびretry stq(i)信号に加えて、命令動作の状
態は、Not Blocked(i)信号がデアサートされていれば非実行状態に戻される。こ
の機構は、連鎖の開始における命令動作が非終了である場合、依存性連鎖の実行
済状態をアンドゥする(undo)ために用いられ、依存性連鎖内の命令動作を再発
行させる。したがって、もしNot Blocked(i)信号がデアサートされていれば、R
OP制御回路(i)86Aは、実行状態を非実行状態に変え、Block(i)信号を再
アサートする(これにより後で他のNot Blocked(i)がデアサートされ、さらに依
存性連鎖をアンドゥする)。
【0091】 物理アドレスバッファ90は、付加的な信号をROP制御回路(i)86Aに
与え、外部インターフェイスユニット46によって与えられるアドレスが、物理
アドレスバッファ90におけるロードの物理アドレスにヒットするかどうかを示
す。これをfill/hit(i)として図7に示す。物理アドレスバッファ90は、fi
ll/hit(i)信号をアサートして、外部インターフェイスユニット46によって
与えられたアドレスが、エントリ(i)に割当てられた物理アドレスバッファ9
0における物理アドレスにヒットすることを示す。外部インターフェイスユニッ
ト46はまた、fill/probe信号を与えて、与えられたアドレスのタイプを示す。
もしfill/probe信号がフィルを示すと、fill hit(i)信号のアサートは、ロー
ドメモリ動作の物理アドレスを含むキャッシュラインのためのフィルデータが提
供されたことを示す。もしロードメモリ動作が先行の発行の間のキャッシュミス
の検出により、スケジューリングを禁止されていれば、ロードメモリ動作は再ス
ケジューリングのために適切であり、ROP制御回路(i)86Aは、フィルア
ドレスヒットに応答してrequest(i)信号をアサートし得る。上述の実施例は
また、プローブを達成するために外部インターフェイスユニット46からのアド
レスを提供する。もしfill hit(i)信号がアサートされ、かつ外部インターフ
ェイスユニット46からのfill/probe信号がプローブを示せば、訂正動作を必要
とし得るプローブヒットが検出される。一実施例においては、プローブに対する
fill hit(i)信号のアサートは、ROP制御回路(i)86Aにその状態を実
行状態から非実行状態に変えさせる。他の実施例は、不所望に命令動作を再発行
することなく確実にメモリ順序付けを行なうために、より複雑な機構を試みる。
たとえば、ROP制御回路(i)86Aは、プローブアドレスによってヒットを
記録する。もしより古いロードメモリ動作が後でスケジューラからリタイアされ
ていれば、ROP制御回路(i)86Aは実行状態から非実行状態に変る。他の
代替例も可能である。
【0092】 図8を参照すると、ROP制御回路(i)86Aの一実施例によって採用され
得る、例示的なステートマシンが示される。他の制御回路は同様なステートマシ
ンを採用し得る。他の実施例が可能であり企図される。図8の実施例においては
、ステートマシンは無効状態110、ブロック状態112、要求状態114、実
行可変(ExecV)状態118、Exec6状態120、Exec5状態11
2、Exec4状態124、Exec3状態126、Exec2状態128、E
xec1状態130、および終了状態132を含む。
【0093】 ステートマシンは、対応のエントリが命令動作を含まない場合、無効状態11
0で開始する。命令動作の対応のエントリへの書込に応答して、ステートマシン
は、ブロック状態112または要求状態114のいずれかに遷移する。ブロック
状態112は、命令動作が1つ以上の満たされていない依存性を有する場合に選
択される。言換えると、ブロック状態112は、もしNot Blocked(i)信号がデア
サートされている場合に選択され、要求状態114はNot Blocked(i)信号がアサ
ートされている場合に選択される。他の実施例においては、命令動作は、(命令
動作が非実行状態に戻された後の再スケジューリングを禁止する事象と同様の態
様で)すべての依存性が満たされていたとしても、命令動作がスケジューリング
されることをブロックする予め定められた待機事象を備えてスケジューラに書込
まれる。そのような命令動作は、Not Blocked(i)信号がアサートされていたとし
ても、ブロック状態112への遷移を生じさせる。
【0094】 ステートマシンは、命令動作が非ブロック状態となるまでブロック状態112
にとどまる。無効状態110からブロック状態112または要求状態114への
遷移は、この実施例においてはNot Blocked(i)信号に基づくのに対し、ブロック
状態112から要求状態114への遷移は、命令動作が再スケジューリングに対
し適切となる前に後の事象が起こるべきことを特定する再試行条件の影響を考慮
する。図8のボックス134は、上述の実施例のための図8における矢印におい
て用いられたブロック遷移状態用語に対する方程式を含む。より特定的には、命
令動作は、もしNot Blocked(i)信号がデアサートされている場合、または先行の
発行が命令動作が非投機的に行なわれるべきこと(blocked non spec)を判断し
かつ未だに投機的である場合、または先行の発行がキャッシュミスをもたらし(
blocked until fill)かつフィルデータが未だに提供されていない場合に、ブロ
ックされる。他の実施例は所望のように、再スケジューリングをブロックする付
加的な事象を含み得る。命令動作がブロック解除されるとすぐに、ステートマシ
ンはブロック状態112から要求状態114に遷移する。
【0095】 ステートマシンが要求状態114にある間、ROP制御回路(i)86Aは、
request(i)信号をアサートする。もし命令動作が要求状態114にある間に再び
ブロックされると、ステートマシンはブロック状態112に遷移する。ステート
マシンは、pick(i)信号のアサートに応答して、(命令動作のレイテンシに基づ
いて)要求状態114から状態118−128のうちの1つに遷移する。一実施
例においては、pick(i)信号に応答して遷移した状態は、図2のパイプラインに
おける読出スケジューラステージに対応し得る。
【0096】 この実施例は、2から6クロックサイクルのレイテンシおよび、6クロックサ
イクルよりも大きな可変レイテンシをサポートする。ステートマシンは、実行コ
ア40A−40Bによってalmost done信号がアサートされるまでExecV状
態118にとどまり、次いでExec6状態120に遷移する。図8に示される
ように、Exec6状態120からExec2状態128の各々は、もし命令動
作が非終了でなければ、レイテンシ連鎖の次の下位の状態に遷移する。Exec
1状態130から、ステートマシンはもし命令状態が非終了でなければ、終了状
態132に遷移する。最後に、ステートマシンは、もし命令動作がリタイアの前
に非終了でなければ、無効状態110に遷移する。
【0097】 図面をわかりやすくするために、pick(i)信号は、ここから状態118−12
8の1つに入るピックノード116に入るように示される。ピックノード116
は、図面の混乱を避けるためにのみ用いられており、別の状態を示すものではな
い。
【0098】 この実施例においては、図8のステートマシンの目的に対する命令動作のレイ
テンシは、命令動作がその命令動作に対する依存性を満たす前のクロックサイク
ルの数である。このレイテンシは、命令動作が実行状態情報を返す前に(たとえ
ば、命令動作が例外に遭遇するかどうかにかかわらず)満了する可能性がある。
しかしながら、ステートマシンは、命令動作のスケジューリングと、その命令動
作のレジスタファイル38A−38Bからのオペランド読出との間のパイプライ
ン遅延を利用して、レジスタファイルの更新によって物理的に依存性が満たされ
る前に、その依存性が満たされているかどうかを示す。したがって、Block(i)信
号は、この実施例においてもし命令動作がExec2状態128に到達すればデ
アサートされ、もしステートマシンがExec1状態130、終了状態132、
または無効状態134(ボックス134を参照)であればデアサートされたまま
である。Block(i)信号は、他の状態に対してアサートされる。
【0099】 スケジュールされた(pick(i)がアサートされた)後のどの時点においても、
命令動作が非終了状態になり、非実行状態に戻る。この動作は、図8において示
され、各状態118−132が「アンドゥ(undo)」方程式(ボックス134)
に基づく中央点136への遷移を示し、ここから遷移は、ボックス134に示さ
れるブロック(blocked)方程式に基づいてブロック状態112または要求状態
114に遷移する。中央点136は、図面の混乱を減じるためにのみ用いられて
おり、別の状態を示すものではない。中央点136への遷移を示す各状態ごとに
、もしundo方程式が真でありblocked方程式が真であればブロック状態112へ
の遷移が行われ、もしundo方程式が真でありかつblocked方程式が偽であれば、
要求状態114への遷移が行なわれる。
【0100】 この実施例において、もし命令動作が直接再試行されるか、またはNot Blocke
d(i)信号がデアサートされれば、命令動作は「非終了(undone)」となる(すな
わち、非実行状態の実行状態に戻る)。ボックス134におけるundo方程式は再
試行条件をretry this op値として示し、エントリ(i)における命令状態が再
試行されたことを示す。ボックス138はさらに、示されたretry this op値を
、retry PA(i)信号またはretry stq(i)信号がアサートされているか、ま
たは命令動作が実行の間に再試行されていれば真である方程式として示す(たと
えば、ロード/ストアユニット42からの再試行信号)。retry this op方程式
はさらに、命令動作がExec1状態130にある場合の再試行信号のサンプリ
ングを示す。この実施例においては、再試行状態は、対応の命令動作がExec
1状態130にある場合にロード/ストアユニット42によって報告される。他
の実施例は、設計選択に従って、命令動作の実行の間の異なった時点で状態を報
告し得る。さらに、メモリ動作以外の命令動作を再試行する実施例においては、
設計選択に従って、これらの命令動作の実行の他の時点でこれらの信号をサンプ
リングし得る。
【0101】 上述のように、命令動作の実行状態は広義に、非実行、実行中、および終了状
態を含む。図8の実施例においては、非実行状態はブロック状態112または要
求状態114を含み得る。実行中状態は実行状態118−130を含み得る。終
了状態は終了状態132を含み得る。実行状態118−130の数は、実現化特
定のものであり、設計選択に従って変化し得ることに留意されたい。さらに、依
存性が満足される命令動作の実行における時点は、設計選択によって変化し得る
。変化は、部分的に、依存する命令動作がスケジューリングされるステージと、
オペランドまたは順序依存性などの満たすことが要求される特定のステージとの
間の、パイプラインステージの数に基づく。この実施例においては、特定のステ
ージはレジスタファイル読出ステージである。
【0102】 図9を参照すると、レジスタ140は、ROP制御回路(i)86Aによって
用いられ図8のステートマシンの状態と、所望であれば付加的な状態とを記憶す
る。他の実施例も可能であり企図される。図9の実施例においては、レジスタ1
40は状態142、blocked non spec表示144、blocked until fill表示14
6、および他の情報148をストアし得る。
【0103】 状態142は、図8に示されるステートマシンの現在の状態をストアする。状
態は、どのような好適な態様でも状態142内に符号化され得る。レジスタ14
2は、図8に示される状態遷移に従ってクロックサイクルごとに更新される。
【0104】 Blocked non spec表示144は、もし再試行タイプが命令動作が非投機的に行
なわれるべきことを示せば、命令動作の実行の間にロード/ストアユニット42
からの再試行信号の受信に応答して、ブロック状態を示すよう設定される。Bloc
ked non spec表示144は、図8のボックス134に示されるblocked方程式に
おいて用いられる。より特定的には、Blocked non spec表示144は、ブロック
された状態を示す間、命令動作は命令動作が非投機的になるまでスケジューリン
グの要求を禁止される。命令動作が非投機的になったことに応答して、Blocked non spec表示は、非ブロックを示すよう設定され、命令動作がスケジューリング
され得る。一実施例においては、命令動作はもしスケジューラ36内のより古い
命令動作の各々が終了の実行状態を有していれば、非投機的になる。
【0105】 blocked until fill表示146は、もし再試行タイプが命令動作がDキャッシ
ュ44をミスすることを示せば、命令動作の実行の間にロード/ストアユニット
42からの再試行信号の受信に応答して、ブロック状態を示すよう設定される。
blocked until fill表示146は、図8のボックス134に示されるblocked方
程式において用いられ得る。より特定的には、blocked until fill表示146が
ブロックされた状態を示す間に、命令動作は、対応のフィルデータが提供される
まで、スケジューリング要求を禁止される。フィルデータが提供されたという表
示に応答して、blocked until fill表示は非ブロックを示すよう設定され、命令
動作がスケジューリングされる。
【0106】 所望のように、他の情報もまた他の情報フィールド148に記録され得る。た
とえば、特定の実施例は、SMCチェックが行なわれるまでストア動作をリタイ
アすることを禁止する。他の情報フィールド148は、SMCチェック待機要件
を記録し、かつSMCチェックの完了を記録し得る。他のいかなる情報も記録さ
れ得る。さらに、他の情報が記録されない実施例も企図される。
【0107】 図10を参照すると、スケジューラ36の一実施例に従った依存連鎖をundoに
するための例が示される。クロックサイクルは、縦点線によって明示され、縦点
線の間の最上部のクロックサイクルごとの識別子がそのクロックサイクルを明示
する。(ROP制御回路86によって記録される)各命令動作に対する状態もま
た図10に(「状態」という語および括弧内の対応の命令動作のR♯の隣に)示
され、「done」は終了状態132を示し、「blkd」はブロック状態112を示す
。図10は、2つの依存性連鎖を含むボックス150を含む。第1の依存性連鎖
は、10のR♯を割当てられた命令動作I0によって始まり、さらに命令動作I
1、I2、I3を含む。命令動作I1はI0に依存し、15のR♯を有する。命
令動作I2は、I1に依存し、23のR♯を有する。命令動作Iは、I2に依存
し、34のR♯を有する。命令動作I4は、I0によって開始する第2の依存性
連鎖に存在し、よってI0に依存する。命令動作I4は45のR♯を有する。I
1およびI4は直接I0に依存し、一方でI2およびI3は間接的にI0に依存
する。各命令動作に対するBlock信号およびNot Blocked信号を、図10に示す(
括弧内に命令動作のR♯を示す)。他の事象を引き起こすある事象は、事象から
結果として生じる事象への矢印によって示される。たとえば、Not Blocked(1
0)のデアサートは、状態(10)をブロック状態へ変化させるが、これがNot Blocked(10)のデアサートから状態(10)のブロック状態への矢印によっ
て示される。
【0108】 クロックサイクルclk0の間に、各命令状態はdone状態にある。したがって、
対応のBlock信号はデアサートされ、Not Blocked信号がアサートされる。クロッ
クサイクルclk1の間に、(I0が依存する1つの以上の命令動作がundone状態
になることにより)Not Blocked(10)信号がデアサートされる。Not Blocked
(10)のデアサートに応答して、I0に対するステートマシン(状態(10)
)はブロック状態に戻り、こうしてBlock(10)信号はクロックサイクルclk2
において再アサートされる。Block(10)のアサートおよびI1ならびにI4
のI0に対する記録された依存性に応答して、Not Blocked(15)およびNot B
locked(45)信号はデアサートされる(クロックサイクルclk2)。次いで、N
ot Blocked(15)およびNot Blocked(45)信号のデアサートは、I1およ
び4のundoをもたらす(状態(15)および状態(45)がクロックサイクルcl
k3においてBlock状態に変化する)。その後、I2およびI3はそれぞれ、それ
らのI1およびI2に対する直接的な依存性により、かつ間接的なI0に対する
依存性により、非終了となる。クロックサイクルclk5の終了時において、示さ
れる例における依存性連鎖は、非終了であり、各命令動作に対応する実行状態(
I0からI4)は非実行状態である。その後、命令動作はそれらの依存性を満た
され、次いで依存性連鎖内の命令動作として再発行し、依存性連鎖内の他の命令
動作に対する依存性を満たし得る。
【0109】 BlockおよびNot Blocked信号が図10(および以下の図11、図12、および
図15)において特定のクロックサイクルの間にアサートまたはデアサートされ
ることが示されていないが、Block信号はNot Blocked信号をプリチャージさせる
ためにクロックサイクルの第1の部分の間は非活性化されており、次いでBlock
信号はクロックサイクルの第2の部分の間にパルスを発生し得ることに留意され
たい(かつ、Not Blocked信号は記録された依存性に従って、放電するかプリチ
ャージされたままとなる)。さらに、図10、図11、図12および図15のタ
イミング図は、示されるBlock信号の遷移に基づいたNot Blocked信号の遷移を示
す。したがって、示される例は、例示される依存性連鎖が、依存性連鎖内で命令
動作ごとに満たされるべき最後の依存性である例を示す。もし他の依存性が満た
されていなければ、Not Blocked信号は、それらの他の依存性が満たされるまで
デアサートされたままである。同様に、タイミング図は、タイミング図の簡略化
のために、要求に応答してすぐにスケジューリングされる命令動作を示す。しか
しながら、スケジューリングはもし他の、同じタイプのより若い命令動作がスケ
ジューリングを要求していれば、1またはそれ以上のクロックサイクル分だけ遅
延し得る。
【0110】 図11を参照すると、依存性連鎖における例示的な命令動作の発行および再発
行を示すタイミング図が示され、再発行は依存性連鎖における第1の命令動作の
再試行により発生する。クロックサイクルは、縦点線によって明示され、縦点線
の間の最上部のクロックサイクルごとの識別子がそのクロックサイクルを明示す
る。ボックス152は、例示的な依存性連鎖を示すが、これは図10の例の命令
動作I0からI2である。図10の例と同様に、命令動作ごとのBlock信号およ
びNot Blocked信号と、(ROP制御回路86によって記録される)各命令動作
の状態とが示される。図11に示される状態は、ブロックおよび終了状態を含み
、図11において図10と同様に「blkd」および「done」として表わされる。ま
た、要求状態114、Exec2状態128、Exec1状態130は、それぞ
れ「rqst」と、「ex2」、および「ex1」として示される。また図10と同様に
、他の事象を引き起こす事象は、原因となる事象から結果として生じる事象への
矢印によって示される。この例においては、命令動作I0およびI1は両方とも
レイテンシ2である。
【0111】 クロックサイクルclk0は、ブロック状態の命令動作I0−I2の各々を示し
、発行に適切になる前に、依存性が満たされるのを待機していることを示す。各
Not Blocked信号がデアサートされ、各Block信号がアサートされる。クロックサ
イクルclk1の間に、Not Blocked(10)がアサートされる。Not Blocked(1
0)のアサートに応答して、状態(10)はクロックサイクルclk2の間に要求
状態に変化する。I0は発行のためにピックされ、こうして状態(10)はクロ
ックサイクルclk3の間にExec2状態に遷移する。状態(10)のExec
1状態への遷移は、クロックサイクルclk4の間に起こる。
【0112】 状態(10)のExec2状態に応答して、Block(10)がクロックサイク
ルclk4の間にデアサートされる(これによりNot Blocked(15)がアサートさ
れる)。状態(15)は、Not Blocked(15)のアサートに応答してクロック
サイクルclk4の間に要求状態に遷移し、ピックされたことに応答してクロック
サイクルclk5の間にExec2状態に遷移する。
【0113】 状態(10)のExec1の間(クロックサイクルclk4)に、ROP制御回
路86は、I0の再試行を検出する(図10に再試行(R♯)信号を介して示さ
れる)。再試行は、I0のundoを引き起こし、こうして状態(10)はクロック
サイクルclk5において非実行状態に遷移する。より特定的には、Not Blocked(
10)がクロックサイクルclk4の間にアサートされているために、状態(10
)は要求状態に遷移する。状態(10)が非実行状態になることに応答して、Bl
ock(10)信号は再アサートされる(よってNot Blocked(15)はデアサート
される)。Not Blocked(15)のデアサートは、状態(15)を非実行状態に
戻す(クロックサイクルclk6)。
【0114】 この例におけるI0の再試行は、I0の即時の再発行を可能にする再試行タイ
プである。したがって、状態(10)はクロックサイクルclk5において要求状
態にある。I0は実行のためにピックされ、こうして状態(10)はExec2
、Exec1、および終了状態に、それぞれクロックサイクルclk6、clk7、お
よびclk8において遷移する。I0の再実行の間に、再試行は生じない。しかし
ながら、再試行は特定の命令動作が成功して完了する前に複数回起こり得ること
に留意されたい。
【0115】 一旦状態(10)がI0(クロックサイクルclk6)の再実行の間にExec
2状態に達すると、Block(10)信号がデアサートされ、Not Blocked(15)
信号はアサートされる。Not Blocked(15)のアサートに応答して、状態(1
5)は要求状態に遷移し(クロックサイクルclk7)、その後に発行のために選
択されることに応答してExec2状態に遷移する(クロックサイクルclk8)
。状態(15)は、Exec1および終了状態に、クロックサイクルclk9およ
びclk10においてそれぞれ遷移する。
【0116】 状態(15)のExec2状態の到達(クロックサイクルclk8)に応答して
、Block(15)信号はデアサートされる。Not Blocked(23)信号は、ブロッ
ク(15)のデアサートに応答してクロックサイクルclk8の間にアサートされ
、こうして状態(23)はクロックサイクルclk9の間に要求状態に遷移する。
I2の発行は、より後のクロックサイクル(図示せず)の間に生じ得る。
【0117】 図12を参照すると、命令動作の再試行を示すタイミング図が示され、命令動
作の再スケジューリングの前に後の事象が生じることを要求する再試行理由が示
される。より特定的には、図12は、非投機的に実行するべき命令動作の再試行
を示す。クロックサイクルは、縦点線によって明示され、縦点線の間の最上部の
クロックサイクルごとの識別子がそのクロックサイクルを明示する。ボックス1
52は、例示的な依存性連鎖を示し、これは図11の例と同じ命令動作I0〜I
2および依存性である。命令動作ごとのBlockおよびNot Blockedおよび、(RO
P制御回路86によって記録される)命令動作ごとの状態が示される。これは図
11の例と同様である。図12に示される状態は、図11に示されるものと同様
の態様で表される。再び図11と同様に、他の事象を引き起こす事象は、その事
象から結果として生じる事象への矢印によって示される。この例においては、命
令動作I0はレイテンシ2である。
【0118】 クロックサイクルclk0からclk6は、図11の対応のクロックサイクルclk0
からclk6と同様であるが、例外なのはクロックサイクルclk4におけるI0の再
試行は再試行として示されていることであり、これはI0が非投機的に実行され
るべきためである。こうして、I0は投機的に発行され、その非投機的な性質は
発行の後に明らかとなる。スケジューラ36は、この状態をI0(およびその依
存する命令動作I1およびI2)をundoし、発行する前に非投機的になることを
待機することにより、この状態を解決する。より特定的には、再試行タイプが「
非投機的を待機」になることに応答して、ROP制御回路86はI0に対応する
Blocked non spec表示を設定し得る。こうして、ROP制御回路86は、Not Bl
ocked(10)信号がアサートされているにもかかわらずI0が非投機的になる
まで、I0のスケジューリング要求を禁止される。いくつかの数のクロックサイ
クルが経過し、次いでROP制御回路86は、I0が非投機的であると判断し得
る(たとえば、図12のnon spec(R♯10)信号のアサートによって示される
図12におけるクロックサイクルclkn)。上述のように、スケジューラ36内
の(プログラム順の)先行の命令動作の各々が終了状態にあるとき、一実施例に
従うと、命令動作は非投機的であり得る。
【0119】 I0が非投機的になったことに応答して、状態(10)は要求状態に遷移する
(クロックサイクルclk+1)。その後、I0は発行のために選択され(クロック
サイクルclk+2における状態(10)のExec2状態)実行される。依存す
る命令動作I1およびI2はそれらのI0に対する依存性が満たされると、次い
で実行され得る。
【0120】 図13を参照すると、物理アドレスバッファ90の一実施例によって採用され
得る例示的な物理アドレスバッファエントリ160が示される。さらに、例示的
な組合せ論理回路172が示される。回路172は、fill hit(i)およびretr
y PA(i)信号を生成するために用いられ得る。他の実施例も可能であり企図さ
れる。より特定的には、図13に示す論理のブール等価物を含む、どのような好
適な組合せ論理回路をも用い得る。さらに、エントリ160に記憶されている情
報は設計選択に従って、形状および内容が変化し得る。図13の実施例において
は、エントリ160は有効ビット162、第1のロードPAフィールド164、
第1のバイトマスクフィールド166、第2のロードPAフィールド168、お
よび第2のバイトマスクフィールド170を含む。
【0121】 一般的に、もしエントリ160が割当てられる命令バッファエントリにおける
命令動作がロードメモリ動作であれば、エントリ160は、ロードメモリ動作に
よってアクセスされるメモリオペランド(「ロードメモリオペランド」)の物理
アドレス情報によって更新され、有効ビット162がセットされる。この実施例
においては、情報はロードメモリオペランドの第1のバイトを含むクワッドワー
ドの物理アドレス(第1ロードPAフィールド164)および、クワッドワード
内のどのバイトがロードメモリオペランドの一部であるかを示すバイトマスク(
第1のバイトマスクフィールド166)によって示される。バイトマスクは、各
クワッドワード内のバイトごとにビットを含む。もしビットがセットされていれ
ば、対応のバイトはロードメモリオペランドの一部である。もしビットがクリア
されていれば、対応のバイトはロードメモリオペランドの一部ではない。
【0122】 ロードメモリオペランドは、メモリ内で任意で整列されてもよい。したがって
、ロードメモリオペランドの1つ以上のバイトは、1つのクワッドワード内に存
在し、かつロードメモリオペランドの1つ以上のバイトは、次のシーケンシャル
なクワッドワード内にあり得る。こうして、エントリ160は第2のロードPA
フィールド168および第2のバイトマスクフィールド170を提供する。第2
のロードPAフィールド168は、第1ロードPAフィールド168に対する次
のシーケンシャルクワッドワードの物理アドレスをストアする。この実施例にお
いては、物理アドレスのページ内部分(in-page portion)は第2のロードPA
フィールド168にストアされる。この実施例においてページ境界を横断するロ
ードメモリ動作は非投機的であるので、次のシーケンシャルクワッドワードのペ
ージ内部分のみをストアすれば十分である(もしページが跨っていれば、ロード
メモリ動作は非投機的に再発行されて、ロードメモリ動作の再発行の後により古
いストアは発行されないからである)。他の実施例は、次のシーケンシャルクワ
ッドワードの全体をストアするか、または所望のように他のいずれか適切な部分
をストアしてもよい。さらに、この実施例がクワッドワード細分性に対するアド
レスをストアするのに対し、他の実施例は他の好適な細分性を用い得る(たとえ
ば、オクトワード、ダブルワードなど)。第2のバイトマスクフィールド170
は、第1のバイトマスクフィールド166と同様に、次のシーケンシャルクワッ
ドワード内のどのバイトがロードメモリオペランドの一部であるかを示す。
【0123】 実行コア40Aは、ストアメモリ動作の実行の間にストア物理アドレスおよび
対応のバイトマスクを提供する。回路172は、ストア物理アドレスと、第1の
ロードPAフィールド164および第2のロードPAフィールド168にストア
されている値の対応する部分とを比較する。さらに、対応するストアバイトマス
クが提供される。回路172内のストアおよびロードバイトマスクを受けるAN
Dゲートは、ストアメモリ動作によって少なくとも1バイトのロードメモリオペ
ランドが更新されたことを示して、ロードバイトマスク内の少なくとも1ビット
およびストアバイトマスク内の対応する少なくとも1ビットがセットされている
かどうかを判断する、論理を表わす。たとえば、ビットごとに、出力が論理和を
取られるANDゲートを用い得る。もしエントリ160が有効であり、物理アド
レス部分が整合し、対応のクワッドワード内の少なくとも1バイトがロードメモ
リオペランドの一部でありストアメモリ動作によって更新されれば、retry PA(
i)信号が生成される。retry PA(i)信号はまた、もしストアメモリ動作がプ
ログラム順序でメモリ動作の前になければ、マスクされることに留意されたい(
図3には示さず)。
【0124】 ストアメモリオペランドも、メモリセル内に任意で整列されてもよいことに留
意されたい。したがって、ストアメモリオペランドの1以上のバイトは、1クワ
ッドワード以内であり、ストアメモリオペランドの1以上のバイトは、次のシー
ケンシャルクワッドワード内以内であり得る。したがって、ストアPA+1は(
ロードPA+1と同様に)、ストアされたロードPAと比較されて、ロードPA
にヒットするストアPAを検出する。以下の数式は、retry PA(i)信号を表わ
す(もしA(n:0)の少なくとも1ビットがセットされ、B(n:0)の対応
のビットがセットされれば、MATCH(A(n:0),B(n:0)関数はバ
イナリ1を返す)。
【0125】
【数1】 4つの項の内の最後(Load_PA(11:3)+1とStore_(11
:3)+1とを比較する)は冗長であり、この実施例においては省略されてもよ
いことに留意されたいが、これは次のシーケンシャルクワッドワードにおいて有
効バイトを有するメモリオペランドに対しては、メモリオペランドは少なくとも
1つの有効バイト(バイト7、マスクビット7によって表わされる)を第1のク
ワッドワードに有するためである。こうして、4番目の項の中の整合は、第1の
項(Load_PA(11:3)+1とStore_(11:3)とを比較する
)の中でも整合があった場合にのみ、生じ得る。
【0126】 さらに、エントリ160は、外部インターフェイスユニット46によって与え
られるfill/probeアドレスと比較される。示される実施例においてはフィル内で
提供されるキャッシュラインのアドレスが、比較のために物理アドレスバッファ
90に与えられる。第1のロードPAフィールド164および第2のロードPA
フィールド168の対応部分は、フィルアドレスに対して比較される。もし整合
が検出されると、fill hit(i)信号がアサートされる。他の実施例においては
キャッシュラインは複数のパケットとしてDキャッシュ44に与えられ得る。そ
のような実施例において、キャッシュラインを識別するアドレス部分と与えられ
るパケットとが比較される。
【0127】 store PAに対応するストアメモリ動作が、エントリ160に対応するロードメ
モリ動作よりも若ければ、retry PA(i)信号はマスクされることに留意された
い。
【0128】 図14を参照すると、ストアR♯バッファ92の一実施例によって採用され得
る例示的なストアR♯バッファエントリ180が示される。さらに、例示的な組
合せ論理回路190が示される。回路190は、retry stq(i)信号を生成す
るために用いられる。他の実施例も可能であり企図される。より特定的には、図
14に示される論理のどのようなブール等価物をも含むどのような好適な組合せ
論理回路をも用い得る。さらに、設計選択に従って、エントリ180に含まれる
情報は形式および内容が異なり得る。図14の実施例においては、エントリ18
0は、有効ビット182および186およびストアR♯フィールド184および
188を含む。
【0129】 一般的に、もしエントリ180が割当てられる、命令バッファエントリ内の命
令動作がロードメモリ動作であれば、エントリ180は、ロードメモリ動作によ
ってヒットされるストアキュー70内のストアのストアR♯で更新される。この
実施例は、最大2つのストアメモリ動作からロードメモリ動作への転送を提供し
、こうして2つのR♯フィールド184および188が、各転送ストアのR♯を
記録するために提供される。それぞれの有効ビット182および186はもし対
応の転送ストアが検出されればセットされる。他の実施例は、一方のストアから
のみ転送し、かつエントリ180は一方のストアR♯のみを記録する。さらに別
の実施例においては、2つより多くのストアから転送が行なわれ、エントリ18
0は対応の数のストアR♯を記録する。
【0130】 ストアメモリ動作が実行されると、ロード/ストアユニット42が、ストアR
♯バッファ92にストアメモリ動作のR♯を与える。R♯は、エントリ180内
にストアされているR♯と比較され、もし整合が検出されると(かつ対応の有効
ビットがセットされると)、回路190はretry stq(i)信号をアサートする
。上述のように、別の代替例においては、ストアキュー番号はバッファ92内に
ストアされ、ストアキュー番号は比較のために提供される。
【0131】 図15を参照すると、物理アドレスバッファ90におけるヒットを介したロッ
ドメモリ動作の再試行を示すタイミング図が示される。ストアR♯バッファ92
におけるヒットを介したロードメモリ動作の再試行もまた同様である。クロック
サイクルは、縦点線で明示され、縦点線の間の最上部のクロックサイクルごとの
識別子がそのクロックサイクルを明示する。ボックス192は、図11の例の命
令動作I0〜I2および依存性と同様である(ここではI0がロードメモリ動作
であることのみ異なる)例示的な依存性連鎖を示す。図11の例と同様に、命令
動作ごとのBlockおよびNot Blocked信号および、(ROP制御回路86によって
記録された)命令動作ごとの状態が示される。図12に示される状態は、図11
と同様の態様で示される。さらに、Exec4およびExec3は、それぞれ「
ex4」および「ex3」として示される。再び図11と同様に、他の事象を引
起す特定の事象は、その事象から結果として生じる事象への矢印によって示され
る。この例においては、ロードメモリ動作I0はレイテンシ4である。
【0132】 クロックサイクルclk0において、各命令動作I0−I2は発行されかつ実行
され、こうして終了状態にある。対応のBlock信号はデアサートされ、Not Block
ed信号はアサートされる。しかしながら、物理アドレスバッファ90におけるヒ
ットはR♯10に対して検出される(retry PA(10)はクロックサイクルclk
0の間にアサートされる)。応答して、状態(10)は、クロックサイクルclk
1において要求状態に遷移する。さらに、Block(10)信号がアサートされ、
クロックサイクルclk2からclk3の間にI1およびI2が続いてundoとなる。
【0133】 ロードメモリ動作I0は、クロックサイクルclk2からclk6において、実行の
ために選択され、実行状態から終了状態に移る。I0がクロックサイクルclk4
においてExec2状態に到達するのに応答して、Block(10)信号はデアサ
ートされる(したがってNot Blocked信号(15)信号はアサートされる)。命
令動作I1およびI2はこうして図15に示されるように再スケジューリングさ
れ再発行される。
【0134】 図15は、ロード命令動作が、これが依存するストアメモリ動作の前に発行さ
れ実行され得ることを示す。その後、ストアメモリ動作が発行され、依存性が検
出される。依存性は、ロードメモリ動作(およびその依存性連鎖)を依存性の検
出の際にスケジューラ36から再発行することにより考慮される。retry stq(
10)信号がアサートされる同様のタイミング図は、不正に実行され後で再発行
された先行のストアメモリ動作に対する、ロードメモリ動作の偽依存性の検出を
示す。ここでも、スケジューラ36は、ロードメモリ動作およびその依存性連鎖
を再発行することによりこの問題に対処する。正しい動作は、最小限の性能劣化
のみで提供されるので、アブレッシブな投機的実行が行なわれ、より高い性能が
実現され得る。
【0135】 コンピュータシステム 図16を参照すると、バスブリッジ202を通してさまざまなシステム要素に
結合されるプロセッサ10を含むコンピュータシステム200の一実施例のブロ
ック図が示される。他の実施例も可能であり企図される。示されるシステムにお
いては、メインメモリ204はメモリバス206によってバスブリッジ202に
結合され、グラフィックコントローラ208はAGPバス210を介してバスブ
リッジ202に結合される。最後に、複数のPCI装置212A−212BがP
CIバス214を介してバスブリッジ202に結合される。二次的なバスブリッ
ジ216がさらに、EISA/ISAバス220を介した1つ以上のEISAま
たはISA装置218との電気的インターフェイスに対処するために設けられ得
る。プロセッサ10は、CPUバス224を介してバスブリッジ202に結合さ
れ、かつ任意のL2キャッシュ228に結合される。CPUバス224およびL
2キャッシュ228へのインターフェイスは併せて、外部インターフェイス52
を含み得る。
【0136】 バスブリッジ202は、プロセッサ10、メインメモリ204、グラフィック
コントローラ208、およびPCIバス214に装着される装置の間にインター
フェイスを提供する。バスブリッジ202に結合される装置の1つから動作が受
信されると、バスブリッジ202は動作の対象を識別する(たとえば、特定の装
置、またはPCIバス214の場合、対象はPCIバス214上にある)。バス
ブリッジ202は、目標となる装置に動作を経路制御する。バスブリッジ202
は、一般的にソース装置またはバスによって用いられるプロトコルから、目的の
装置またはバスによって用いられるプロトコルに動作を変換する。
【0137】 PCIバス214に対するISA/EISAへのインターフェイスを提供する
ことに加えて、二次的なバスブリッジ216はさらに所望のように付加的な機能
を含んでいてもよい。二次的なバスブリッジ216の外部からの、またはこの中
に組込まれた、入力/出力コントローラ(図示せず)もまた、コンピュータシス
テム200内に含まれて、所望のようにキーボードおよびマウス222とさまざ
まなシリアルおよびパラレルポートとに対する操作上のサポートを提供し得る。
外部キャッシュユニット(図示せず)はさらに、他の実施例においてはプロセッ
サ10とバスブリッジ202との間にCPUバス224を結合されてもよい。こ
れに代えて、外部キャッシュはバスブリッジ202に結合されて、外部キャッシ
ュに対するキャッシュ制御論理はバスブリッジ202に一体化されてもよい。L
2キャッシュ228はさらに、プロセッサ10の背部構成において示される。L
2キャッシュ228はプロセッサ10とは分離しているか、カートリッジ(たと
えばスロット1またはスロットA)でプロセッサ10に一体化されるか、または
プロセッサ10の半導体基板上に一体化されてもよい。
【0138】 メインメモリ204は、アプリケーションプログラムがストアされ、プロセッ
サ10が一次的に実行するメモリである。適切なメインメモリ204はDRAM
(ダイナミックランダムアクセスメモリ)を含む。たとえば、SDRAM(シン
クロナスDRAM)の複数のバンクまたはRambusDRAM(RDRAM)
が好適である。
【0139】 PCI装置212A−212Bは、たとえばネットワークインターフェイスカ
ード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー(R
)ディスクドライブまたはドライブコントローラ、SCSI(スモールコンピュ
ータシステムインターフェイス)アダプタおよび電話カードなどの、さまざまな
周辺機器を示す。同様に、ISA装置218は、モデム、サウンドカード、さま
ざまなGPIBまたはフィールドバスインターフェイスカードなどのデータ獲得
カードなどの、さまざまな種類の周辺装置を示す。
【0140】 グラフィックコントローラ208が設けられて、テキストおよび画像のディス
プレイ226上の制御を可能にする。グラフィックコントローラ208は、一般
的に当該分野において公知である典型的なグラフィックスアクセラレータを組入
れ、メインメモリ201との間で効率的にシフトできる3次元データ構造のレン
ダリングを行なう。したがってグラフィックコントローラ208は、メインメモ
リ204へのアクセスを得るためにバスブリッジ202内のターゲットインター
フェイスへのアクセスを要求および受信できる点で、AGPバス210へのマス
タとなる。専用グラフィックバスは、メインメモリ204からの高速なデータの
検索に対処する。ある特定の動作に対して、グラフィックコントローラ208は
さらに、AGPバス210にPCIプロトコルトランザクションを生成するよう
構成される。バスブリッジ202のAGPインターフェイスはこうして、AGP
プロトコルトランザクションとPCIプロトコルターゲットおよびイニシエータ
トランザクションとの両方をサポートする機能を含む。ディスプレイ226は、
画像またはテキストを表示し得る同様な電気的ディスプレイであってもよい。好
適なディスプレイ226は、陰極線管(「CRT」)、液晶ディスプレイ(LC
D)などを含む。
【0141】 上述の説明において、AGP、PCI、およびISAまたはEISAバスが例
として用いられてきたが、所望のようにどのようなバスアーキテクチャと置き換
えてもよいことに留意されたい。コンピュータシステム200は、付加的なプロ
セッサを含むマルチプロセシングコンピュータシステムであってもよい(たとえ
ば、プロセッサ10aがコンピュータシステム200の任意の構成要素として示
される)ことに、さらに留意されたい。プロセッサ10aは、プロセッサ10と
同様のものである。より特定的には、プロセッサ10aは、プロセッサ10と全
く同様の複製である。プロセッサ10aは、独立バスを介してバスブリッジ20
2に接続されるか(図16に示す)、またはプロセッサ10とCPUバス224
を共用する。さらに、プロセッサ10aは、L2キャッシュ228と同様に任意
のL2キャッシュ228aに結合される。
【0142】 図17を参照すると、コンピュータシステム300の別の実施例が示される。
他の実施例も可能であり企図される。図17の実施例において、コンピュータシ
ステム300はいくつかの処理ノード312A、312B、312C、312D
を含む。各処理ノードは、各処理ノード312A−312Dにそれぞれ含まれる
メモリコントローラ316A−316Dを介してそれぞれのメモリ314A−3
14Dに結合される。さらに、処理ノード312A−312Dは、処理ノード3
12A−312Dの間で通信するために用いるインターフェイス論理を含む。た
とえば、処理ノード312Aは、処理ノード312Bと通信するためのインター
フェイス論理318A、処理ノード312Cと通信するためのインターフェイス
論理318B、およびさらに別の処理ノード(図示せず)と通信するための第3
のインターフェイス論理318Cを含む。同様に、処理ノード312Bはインタ
ーフェイス論理318D、318E、および318Fを含む。処理ノード312
Cはインターフェイス論理318G、318H、および318Iを含む。処理ノ
ード312Dはインターフェイス論理318J、318K、および318Lを含
む。処理ノード312Dは、インターフェイス論理318Lを介して複数の入力
/出力装置(たとえばデイジーチェーン構成における装置320A−320B)
と通信するよう結合される。他の処理ノードは同様の態様で他のI/O装置と通
信し得る。
【0143】 処理ノード312A−312Dは、処理ノード間通信のためのパケットベース
リンクを実現する。この実施例においては、リンクは単方向リンクの組として実
現される(たとえばライン324Aは処理ノード312Aから312Bにパケッ
トを送信するために用いられ、ライン324Bは処理ノード312Bから処理ノ
ード312Aにパケットを送信するために用いられる)。他のライン組324C
−324Hは、図17に示されるように他の処理ノード間でパケットを送信する
ために用いられる。一般的に、各ライン組324は、1つ以上のデータライン、
データラインに対応する1つ以上のクロックライン、および運ばれるパケットの
タイプを示す1つ以上の制御ラインを含む。リンクは、処理ノード間通信のため
にキャッシュコヒーレント様式で動作されるか、または処理ノードとI/O装置
との間の(またはバスブリッジからPCIバスまたはISAバスなどの従来の構
造のI/Oバスへの)通信のためにキャッシュ非コヒーレント様式で動作される
。さらに、リンクは示されるようにI/O装置の間でデイジーチェーン構造を用
いて非コヒーレント様式でも動作される。1つの処理ノードから別のものへ送信
されるパケットは、1つ以上の中間ノードを通過することに留意されたい。たと
えば、図17に示されるように処理ノード312Aから312Dに送信されるパ
ケットは、処理ノード312Bまたは処理ノード312Cのいずれかを通過し得
る。他のいかなる適切な経路制御アルゴリズムをも用い得る。コンピュータシス
テム300の他の実施例は、図17に示される実施例よりも多くのまたは少ない
処理ノードを含み得る。
【0144】 一般的に、パケットはノード間でライン324上で1つ以上のビット時間とし
て送信される。ビット時間は、対応のクロックライン上でのクロック信号の立上
がりまたは立下がりエッジであり得る。パケットは、トランザクションを開始す
るためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブ
パケット、およびプローブとコマンドとに応答するための応答パケットを含み得
る。
【0145】 処理ノード312A−312Dは、メモリコントローラおよびインターフェイ
ス論理に加えて、1つ以上のプロセッサを含み得る。概して、処理ノードは、少
なくとも1つのプロセッサを含み、任意でメモリおよび所望の他の論理と通信す
るためにメモリコントローラを含む。より特定的には、処理ノード312A−3
12Dはプロセッサ10を含む。外部インターフェイスユニット46は、ノード
内にインターフェイス論理318およびメモリコントローラ316を含む。
【0146】 メモリ314A−314Dは、どのような好適なメモリ装置をも含む。たとえ
ば、メモリ314A−314Dは、1つ以上のRAMBUS DRAM(RDR
AM)、シンクロナスDRAM(SDRAM)、スタティックRAMなどを含み
得る。コンピュータシステム300のアドレス空間は、メモリ314A−314
Dに分割される。各処理ノード312A−312Dは、どのアドレスがどのメモ
リ314A−314Dにマッピングされるかを判断する、よってどの処理ノード
312A−312Dに特定のアドレスに対するメモリ要求が経路制御されるべき
かを判断するメモリマップを含む。一実施例においては、コンピュータシステム
300におけるコヒーレンシポイントは、アドレスに対応するバイトをストアす
るメモリに結合されるメモリコントローラ316A−316Dである。言い換え
ると、メモリコントローラ316A−316Dは、対応のメモリ314A−31
4Dに対する各メモリアクセスを確実にキャッシュコヒーレント様式で生じさせ
る責任を有する。メモリコントローラ316A−316Dは、メモリ314−A
314Dにインターフェイスするための制御回路を含み得る。さらに、メモリコ
ントローラ316A−316Dは、メモリ要求を待ち行列に入れるための要求キ
ューを含む。
【0147】 一般的に、インターフェイス論理318A−318Lは、リンク上で送信され
るべきパケットを受け、かつバッファリングするためのさまざまなバッファを含
み得る。コンピュータシステム300は、パケットを送信するためのいかなる好
適なフロー制御機構をも採用し得る。たとえば、一実施例においては、各インタ
ーフェイス論理318はインターフェイス論理が接続されるリンクの他端におけ
るレシーバ内に各種類のバッファの数のカウントをストアし得る。インターフェ
イス論理は、受取ったインターフェイス論理がパケットをストアするための空き
バッファを有さない限り、パケットを送信しない。受信バッファがパケットを次
に経路制御することにより空になると、受信インターフェイス論理は、バッファ
が空いたことを示すメッセージを送信インターフェイス論理に送信する。そのよ
うな機構を、「クーポンに基づく」システムと称する。
【0148】 I/O装置320A−320Bは、どのような好適なI/O装置であってもよ
い。たとえば、I/O装置320A−320Bは、ネットワークインターフェイ
スカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー
(R)ディスクドライブまたはドライブコントローラ、SCSI(スモールコン
ピュータシステムインターフェイス)アダプタおよび電話カード、モデム、サウ
ンドカード、およびさまざまなGPIBまたはフィールドバスインターフェイス
カードなどのデータ獲得カードを含み得る。
【0149】 上の開示を十分に理解することにより、当業者においてはさまざまな展開例お
よび変形が明らかとなるであろう。前掲の特許請求の範囲は、そのような展開例
および変形をすべて包括すると解釈される。
【0150】 産業上の用途 この発明は、プロセッサおよびコンピュータシステムの分野に適用される。
【図面の簡単な説明】
【図1】 プロセッサの一実施例のブロック図である。
【図2】 図1に示されるプロセッサの一実施例によって採用される例示的
なパイプラインの図である。
【図3】 図1に示されるマップユニット、スケジューラ、整数実行コア、
およびロード/ストアユニットの一実施例をより詳細に示すブロック図である。
【図4】 図1および図3に示されるスケジューラの一実施例のブロック図
である。
【図5】 依存性ベクトルの一実施例のブロック図である。
【図6】 依存性バッファの一実施例のブロック図である。
【図7】 図6に示される依存性バッファの部分の一実施例をより詳細に示
すブロック図である。
【図8】 スケジューラの一実施例内の1つの命令動作に対するステートマ
シン図である。
【図9】 スケジューラの一実施例内の命令動作ごとにストアされるステー
ト情報を示すブロック図である。
【図10】 依存性連鎖のアンドゥ(undo)を示すタイミング図である。
【図11】 スケジューラの一実施例からの命令動作の発行および再発行を
示すタイミング図である。
【図12】 スケジューラの一実施例からの命令動作の発行および非投機的
再発行を示すタイミング図である。
【図13】 図4に示される物理アドレスバッファの一実施例における例示
的なエントリおよび、エントリの際に動作されるべき例示的な論理の図である。
【図14】 図4に示されるストア識別バッファの一実施例における例示的
なエントリおよび、エントリの際に動作されるべき例示的な論理の図である。
【図15】 ストアアドレスのロードアドレスのヒットに応答してロードを
再試行する一実施例および、後の依存性動作のアンドゥを示すタイミング図であ
る。
【図16】 図1に示されるプロセッサを含むコンピュータシステムの第1
の実施例のブロック図である。
【図17】 図1に示されるプロセッサを含むコンピュータシステムの第2
の実施例のブロック図である。
【手続補正書】特許協力条約第34条補正の翻訳文提出書
【提出日】平成14年3月7日(2002.3.7)
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0006
【補正方法】変更
【補正の内容】
【0006】 スケジューリング機構は依存性を考慮するが、実現される性能利得を最大化す
るために、アウトオブオーダーおよび/または投機的に命令をスケジューリング
するにおいては可能な限りアグレッシブであるべきである。しかしながら、スケ
ジューリング機構がよりアグレッシブになるにつれ(すなわち、特定の命令がス
ケジューリングされることを妨げる条件が少なくなるにつれ)、不正に実行され
る命令は増加する。不正に実行された命令に対する回復機構は、一般的に不正に
実行された命令とプロセッサパイプラインからのすべての後に続く命令とをパー
ジし、不正に実行された命令(および後の命令)を再フェッチすることで行なわ
れてきた。しばしば、パージおよび再フェッチは、ハードウェアの簡潔性のため
に不正実行の回復から(たとえば、不正に実行された命令が一連の命令の中で最
も古い命令になるまで)遅延する。クロックサイクルごとに実際に実行される命
令の平均数は、不正実行および後のパージ事象のために減少する。より頻繁に不
正実行が生じるアグレッシブなスケジューリング機構に対しては、これらの回復
機構に起因する性能劣化は実質的なものになり得る。したがって、アグレッシブ
な投機的またはアウトオブオーダースケジューリングによって可能となる、性能
利得を保護する、不正投機的実行から回復するための機構が所望となる。 米国特許第5,987,594は、符号化された命令を受取り、実行のために
発行する命令スケジューリングユニットを用いて符号化命令を実行するプロセッ
サを開示する。プロセッサは、データがキャッシュに返されたときキャッシュに
おいてミスするメモリ動作と、そのメモリ動作に依存する命令とを再発行する。
さらに、プロセッサは「リードアフタライト」ハザードを検出し、書込データを
読出命令に転送することにより、メモリ動作のアウトオブオーダー実行を行ない
得る。
───────────────────────────────────────────────────── フロントページの続き (31)優先権主張番号 09/476,578 (32)優先日 平成12年1月3日(2000.1.3) (33)優先権主張国 米国(US) (31)優先権主張番号 09/476,204 (32)優先日 平成12年1月3日(2000.1.3) (33)優先権主張国 米国(US) (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),CN,JP,K R,SG (72)発明者 ケラー,ジェイムズ・ビィ アメリカ合衆国、94303 カリフォルニア 州、パロ・アルト、アイリス・ウェイ、 210 (72)発明者 ハダッド,ラムゼイ・ダブリュ アメリカ合衆国、95014 カリフォルニア 州、キューパーティーノ、セレステ・サー クル、20728 (72)発明者 マイアー,ステファン・ジィ アメリカ合衆国、94043 カリフォルニア 州、サニィベイル、ビーマー・アベニュ、 297 Fターム(参考) 5B013 AA12 AA17 CC01 CC07 DD00 【要約の続き】 作の不正スケジューリングに対するペナルティは、特定 の命令とすべてのより若い命令動作とをパージし特定の 命令動作を再フェッチすることに対して、さらに減じら れる。

Claims (18)

    【特許請求の範囲】
  1. 【請求項1】 スケジューラ(36)であって、 第1の命令動作をストアするよう構成されるバッファ(80)と、 前記バッファ(80)に結合される回路(82;86)とを含み、前記回路(
    82;86)は、前記第1の命令動作を前記バッファ(80)から発行のために
    選択するよう構成され、前記回路(82;86)は、発行の後に前記バッファ(
    80)における前記第1の命令動作を保留するよう構成され、前記回路(82;
    86)は、もし前記第1の命令動作が不正に実行されていれば前記第1の命令動
    作を再発行するよう構成される、スケジューラ。
  2. 【請求項2】 前記回路(82;86)に結合される依存性バッファ(88
    )をさらに含み、前記依存性バッファ(88)は、前記バッファ(80)内の前
    記第1の命令動作の第2の命令動作に対する依存性を示す第1の依存性表示をス
    トアするよう構成され、前記回路(82;86)は前記第2の命令動作の再発行
    に応答して前記第1の命令動作を再発行するよう構成される、請求項1に記載の
    スケジューラ。
  3. 【請求項3】 前記第1の命令動作が不正に実行されたことを示す第1の信
    号を実行ユニット(42)から受けるよう結合され、前記回路(82;86)は
    前記第1の信号に応答して前記第1の命令動作を再発行するよう構成され、前記
    第1の信号はさらに、前記第1の命令動作が非投機的に実行されるべきことを示
    し、前記回路(82;86)は、前記第1の命令動作が非投機的になるまで前記
    第1の命令動作の再発行を遅延させるよう構成される、請求項1に記載のスケジ
    ューラ。
  4. 【請求項4】 前記命令動作が不正に実行されたことを示す第1の信号を実
    行ユニット(42)から受けるよう結合され、前記回路は前記第1の信号に応答
    して第1の命令動作を再発行するよう構成される、請求項1に記載のスケジュー
    ラ。
  5. 【請求項5】 前記回路(82;86)に結合されるアドレスバッファ(9
    0)をさらに含み、前記第1の命令動作は第1のメモリ動作であり、前記アドレ
    スバッファ(90)は、前記第1のメモリ動作によってアクセスされる第1のア
    ドレスをストアするよう構成され、前記アドレスバッファは前記第1のアドレス
    を受けるよう結合される、請求項1に記載のスケジューラ。
  6. 【請求項6】 前記アドレスバッファ(90)は、ストアメモリ動作の第2
    のアドレスを受けるよう結合され、前記第1の命令動作は、もし前記ストアメモ
    リ動作が第1の命令動作によってアクセスされる少なくとも1バイトを更新し、
    かつ前記ストアメモリ動作がプログラム順序で前記第1のメモリに先行すれば、
    不正に実行される、請求項5に記載のスケジューラ。
  7. 【請求項7】 前記アドレスバッファ(90)はデータキャッシュ(44)
    に転送されるデータを表示するフィルアドレスを受けるよう結合され、もし第1
    のアドレスが前記データキャッシュに転送される前記データ内のデータを示せば
    、前記回路は第1のメモリ動作を再発行するよう構成される、請求項5に記載の
    スケジューラ。
  8. 【請求項8】 ストアメモリ動作に対応するストアタグを受けるよう結合さ
    れるタグバッファ(92)をさらに含み、前記第1の命令動作は第1のメモリ動
    作であり、前記ストアメモリ動作は前記第1のメモリ動作によってアクセスされ
    る少なくとも1バイトを更新し、前記ストアメモリ動作はプログラム順序におい
    て前記第1のメモリ動作に先行し、前記タグバッファ(92)は、前記第1のメ
    モリ動作の実行に応答して前記第1のメモリ動作に対応するエントリにおける前
    記ストアタグをストアするよう構成される、請求項1に記載のスケジューラ。
  9. 【請求項9】 前記タグバッファ(92)はさらに実行ストアに対応する第
    2のストアタグを受けるよう結合され、前記タグバッファ(92)は、前記第2
    のストアタグを前記ストアタグと比較するよう構成され、前記回路は、前記スト
    アタグと前記第2のストアタグとが等しいことに応答して前記第1のメモリ動作
    を再発行するよう構成される、請求項8に記載のスケジューラ。
  10. 【請求項10】 プロセッサ(10)であって、 請求項1から請求項9のいずれかに記載されるスケジューラ(36)と、 前記スケジューラに結合される実行ユニット(42)とを含み、前記実行ユニ
    ットは前記第1の命令動作を実行するよう構成される、プロセッサ(10)。
  11. 【請求項11】 方法であって、 実行のためにスケジューラ(36)から第1の命令動作を発行するステップと
    、 前記発行するステップの後に、前記スケジューラ(36)に前記第1の命令動
    作を保留するステップと、 前記第1の命令動作の不正な実行に応答して、前記スケジューラ(36)から
    前記第1の命令動作を実行のために再発行するステップとを含む、方法。
  12. 【請求項12】 前記第1の命令動作の前記第2の命令動作に対する依存性
    を検出するステップと、 第2の命令動作を再発行するステップとを含み、 前記第1の命令動作は、もし前記第2の命令動作が再発行されており、かつ前
    記第1の命令動作が前記第2の命令動作に依存していれば、不正に実行されてい
    る、請求項11に記載の方法。
  13. 【請求項13】 前記第1の命令動作が不正に実行されていることを示す信
    号を受けるステップをさらに含み、前記再発行するステップは前記信号に応答す
    る、請求項11に記載の方法。
  14. 【請求項14】 前記信号はさらに、前記第1の命令動作が非投機的に実行
    されるべきことを示し、前記第1の命令動作を再発行するステップは、前記第1
    の命令動作が非投機的になるまで遅延される、請求項13に記載の方法。
  15. 【請求項15】 前記発行に応答して前記第1の命令動作を実行するステッ
    プと、前記再発行するステップに応答して前記第1の命令動作を実行するステッ
    プとをさらに含む、請求項11に記載の方法。
  16. 【請求項16】 前記第1の命令動作は第1のメモリ動作であって、前記方
    法はさらに、 アドレスバッファ(90)に前記第1の命令動作の第1のアドレスをストアす
    るステップと、 前記第1の命令動作の発行の後に、プログラム順序で前記第1の命令動作に先
    行するメモリ動作を発行するステップと、 前記アドレスバッファ(90)内の前記第1のアドレスと、前記ストアメモリ
    動作に対応するストアアドレスとを比較するステップと、 もし前記比較するステップが、前記ストアメモリ動作が前記第1のメモリ動作
    によってアクセスされる少なくとも1バイトを更新していれば、前記第1の命令
    動作は不正に実行されていることを検出するステップとを含む、請求項11に記
    載の方法。
  17. 【請求項17】 前記第1の命令動作は第1のメモリ動作であって、方法は
    さらに、 アドレスバッファ(90)に前記第1の命令動作の第1のアドレスをストアす
    るステップと、 データキャッシュ(44)に転送されるデータを示すフィルアドレスを比較す
    るステップと、 もし前記第1のアドレスが前記データ内のデータが前記データキャッシュに送
    信されることを示せば、前記第1のメモリ動作を再発行するステップを含む、請
    求項11に記載の方法。
  18. 【請求項18】 前記第1の命令動作は第1のメモリ動作であって、方法は
    さらに、 ストアメモリ動作に対応するストアタグを、前記第1のメモリ動作に対応する
    タグバッファ(92)のエントリにストアするステップを含み、前記ストアメモ
    リ動作は、前記第1のメモリ動作によってアクセスされる少なくとも1バイトを
    更新し、前記ストアメモリ動作はプログラム順序で前記第1のメモリ動作に先行
    し、方法はさらに、 実行されたストアに対応する第2のストアタグと前記タグバッファ(92)内
    の前記ストアタグとを比較するステップと、 前記比較するステップが等しいことを示すことに応答して、前記第1のメモリ
    動作を再発行するステップとを含む、請求項11に記載の方法。
JP2001550546A 2000-01-03 2000-08-16 依存性連鎖の発行および再発行が可能なスケジューラ Pending JP2003519833A (ja)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US47657000A 2000-01-03 2000-01-03
US09/476,578 2000-01-03
US09/476,322 US6564315B1 (en) 2000-01-03 2000-01-03 Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
US09/476,204 2000-01-03
US09/476,204 US6622235B1 (en) 2000-01-03 2000-01-03 Scheduler which retries load/store hit situations
US09/476,322 2000-01-03
US09/476,578 US6542984B1 (en) 2000-01-03 2000-01-03 Scheduler capable of issuing and reissuing dependency chains
US09/476,570 2000-01-03
PCT/US2000/022458 WO2001050253A1 (en) 2000-01-03 2000-08-16 Scheduler capable of issuing and reissuing dependency chains

Publications (2)

Publication Number Publication Date
JP2003519833A true JP2003519833A (ja) 2003-06-24
JP2003519833A5 JP2003519833A5 (ja) 2007-09-06

Family

ID=27504212

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2001550546A Pending JP2003519833A (ja) 2000-01-03 2000-08-16 依存性連鎖の発行および再発行が可能なスケジューラ

Country Status (6)

Country Link
EP (1) EP1244962B1 (ja)
JP (1) JP2003519833A (ja)
KR (1) KR100747128B1 (ja)
CN (1) CN1210649C (ja)
DE (1) DE60005860T2 (ja)
WO (1) WO2001050253A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007529833A (ja) * 2004-07-15 2007-10-25 株式会社ソニー・コンピュータエンタテインメント アウト・オブ・オーダーのdmaコマンドキューにおけるコマンド順序の設定に関する技術
KR20140113304A (ko) * 2013-03-14 2014-09-24 삼성전자주식회사 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020138714A1 (en) * 2001-03-22 2002-09-26 Sun Microsystems, Inc. Scoreboard for scheduling of instructions in a microprocessor that provides out of order execution
US7165167B2 (en) * 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
EP3156896B1 (en) 2010-09-17 2020-04-08 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
CN103635875B (zh) 2011-03-25 2018-02-16 英特尔公司 用于通过使用由可分区引擎实例化的虚拟核来支持代码块执行的存储器片段
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
US20150039859A1 (en) 2011-11-22 2015-02-05 Soft Machines, Inc. Microprocessor accelerated code optimizer
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
EP2972794A4 (en) * 2013-03-15 2017-05-03 Soft Machines, Inc. A method for executing blocks of instructions using a microprocessor architecture having a register view, source view, instruction view, and a plurality of register templates
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
KR101708591B1 (ko) 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998033116A2 (en) * 1997-01-29 1998-07-30 Advanced Micro Devices, Inc. A line-oriented reorder buffer for a superscalar microprocessor
US5987594A (en) * 1997-06-25 1999-11-16 Sun Microsystems, Inc. Apparatus for executing coded dependent instructions having variable latencies

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5651124A (en) * 1995-02-14 1997-07-22 Hal Computer Systems, Inc. Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state
US5710902A (en) * 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
US6098166A (en) * 1998-04-10 2000-08-01 Compaq Computer Corporation Speculative issue of instructions under a load miss shadow
EP1121635B1 (en) * 1998-08-24 2004-11-24 Advanced Micro Devices, Inc. Mechanism for load block on store address generation and universal dependency vector

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1998033116A2 (en) * 1997-01-29 1998-07-30 Advanced Micro Devices, Inc. A line-oriented reorder buffer for a superscalar microprocessor
JP2002513486A (ja) * 1997-01-29 2002-05-08 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド スーパースカラマイクロプロセッサ用ライン指向型リオーダバッファ
US5987594A (en) * 1997-06-25 1999-11-16 Sun Microsystems, Inc. Apparatus for executing coded dependent instructions having variable latencies

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007529833A (ja) * 2004-07-15 2007-10-25 株式会社ソニー・コンピュータエンタテインメント アウト・オブ・オーダーのdmaコマンドキューにおけるコマンド順序の設定に関する技術
KR20140113304A (ko) * 2013-03-14 2014-09-24 삼성전자주식회사 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법
JP2014179101A (ja) * 2013-03-14 2014-09-25 Samsung Electronics Co Ltd ディペンデンシーを整理し、リビルディングするシステム及び方法
KR102010312B1 (ko) 2013-03-14 2019-08-13 삼성전자주식회사 디펜던시들을 정리하고 리빌딩하는 시스템 및 방법
US10552157B2 (en) 2013-03-14 2020-02-04 Samsung Electronics Co., Ltd. System and method to clear and rebuild dependencies

Also Published As

Publication number Publication date
CN1451115A (zh) 2003-10-22
EP1244962A1 (en) 2002-10-02
KR20020097149A (ko) 2002-12-31
CN1210649C (zh) 2005-07-13
DE60005860D1 (de) 2003-11-13
DE60005860T2 (de) 2004-08-05
KR100747128B1 (ko) 2007-08-09
WO2001050253A1 (en) 2001-07-12
EP1244962B1 (en) 2003-10-08

Similar Documents

Publication Publication Date Title
US6542984B1 (en) Scheduler capable of issuing and reissuing dependency chains
EP1244962B1 (en) Scheduler capable of issuing and reissuing dependency chains
US6564315B1 (en) Scheduler which discovers non-speculative nature of an instruction after issuing and reissues the instruction
EP1244961B1 (en) Store to load forwarding predictor with untraining
US5511175A (en) Method an apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US6721874B1 (en) Method and system for dynamically shared completion table supporting multiple threads in a processing system
US6502185B1 (en) Pipeline elements which verify predecode information
US8627044B2 (en) Issuing instructions with unresolved data dependencies
US6067616A (en) Branch prediction device with two levels of branch prediction cache
US6622235B1 (en) Scheduler which retries load/store hit situations
EP1296230B1 (en) Instruction issuing in the presence of load misses
US6622237B1 (en) Store to load forward predictor training using delta tag
US6694424B1 (en) Store load forward predictor training
US7363469B2 (en) Method and system for on-demand scratch register renaming
US7783870B2 (en) Branch target address cache
US20090063823A1 (en) Method and System for Tracking Instruction Dependency in an Out-of-Order Processor
EP1296229A2 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
US7849293B2 (en) Method and structure for low latency load-tagged pointer instruction for computer microarchitechture
US6721877B1 (en) Branch predictor that selects between predictions based on stored prediction selector and branch predictor index generation
US6647490B2 (en) Training line predictor for branch targets
US7844807B2 (en) Branch target address cache storing direct predictions
US5649137A (en) Method and apparatus for store-into-instruction-stream detection and maintaining branch prediction cache consistency
US20040168043A1 (en) Line predictor which caches alignment information
US6546478B1 (en) Line predictor entry with location pointers and control information for corresponding instructions in a cache line
EP1296228B1 (en) Instruction Issue and retirement in processor having mismatched pipeline depths

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070723

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070723

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100803

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100810

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110125