JP2007536626A - ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 - Google Patents

ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 Download PDF

Info

Publication number
JP2007536626A
JP2007536626A JP2007511351A JP2007511351A JP2007536626A JP 2007536626 A JP2007536626 A JP 2007536626A JP 2007511351 A JP2007511351 A JP 2007511351A JP 2007511351 A JP2007511351 A JP 2007511351A JP 2007536626 A JP2007536626 A JP 2007536626A
Authority
JP
Japan
Prior art keywords
load
speculative
tag
register
store
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
JP2007511351A
Other languages
English (en)
Other versions
JP2007536626A5 (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
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2007536626A publication Critical patent/JP2007536626A/ja
Publication of JP2007536626A5 publication Critical patent/JP2007536626A5/ja
Pending 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
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/383Operand prefetching
    • 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/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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
    • 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/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

ロードオペレーションの投機的な結果をレジスタ値にリンクするためのシステムおよび方法。システム(100)は、第1のアドレス指定パターン(206)および第1のタグ(208)を記憶するように構成されたエントリ(220)含むメモリファイル(132)を有する。メモリファイル(132)は、第1のアドレス指定パターン(206)を、ロードオペレーションの第2のアドレス指定パターン(206)と比較して、一致した場合に、第1のタグ(208)によって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。システム(100)は、メモリファイル(132)に結合され、ロードオペレーションに依存する第2のオペレーションを実行する際に、この投機的な結果にアクセスするように構成された実行コア(124)と、メモリファイル(132)に結合され、1つ以上のアドレスの比較を実行することによって、データ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニット(126)とをさらに有する。

Description

本発明は、プロセッサの分野に関し、より詳細には、プロセッサにおいてデータ投機的な実行を行うことに関する。
スーパースカラプロセッサは、複数の命令を同時に実行すると共に、その設計と整合した可能な最短のクロックサイクルを使用することで高性能を達成している。しかし、命令間でのデータと制御のフローの依存性により、所定の時間に発行可能な命令の数が制限されることがある。この結果、一部のプロセッサでは、パフォーマンスの一層の向上を達成するために、投機的実行に対応している。
投機の一種に、制御フローの投機がある。制御フローの投機では、プログラムの制御が進行する方向を予測する。例えば、分岐が成立するかどうかを予測するために分岐予測が使用され得る。多くの種類の分岐予測が利用可能であり、これには、毎回ただ同じ予測をする方法から、履歴に基づいた予測を行うために、過去に行った分岐の高度な履歴をプログラム内に保持する方法まで多岐にわたる。分岐予測は、ハードウェアの最適化、コンパイラによる最適化、またはこの両者によって行うことができる。分岐予測メカニズムが行う予測に基づいて、命令が投機的にフェッチおよび実行され得る。分岐命令を最終的に評価する際に、分岐命令を検証することができる。予測が正しくなかった場合、誤った予測に基づいて投機的に実行された命令が破棄され得る。
提唱されている別の種類の投機に、データの投機がある。例えば、データ項目の値を予測する値予測では、データのパターンを観察し、そのパターンを予測のベースとすることが行われる(例えば、インデックスカウンタ変数の値が、その変数が以前取っていた値がどのようにインクリメントまたはデクリメントされるかを観察することによって予測できる)。アドレス予測では、データの位置の予測が行われる。さらに別の種類のデータ投機に、メモリシステムオプティミズム(optimism)と呼ばれる手法がある。マルチプロセッサシステムでは、メモリシステムオプティミズムは、コヒーレンシチェックが完了する前に、プロセッサがそのプロセッサのローカルキャッシュにあるデータを使用して命令を投機的に実行する場合に行われる。同様に、別の種類のデータ投機では、ロードがアクセスするアドレスと同じアドレスに、ストアがデータをストアする可能性がある場合であっても、そのロードの実行時にまだ計算されていないアドレスを有するストアに先行して、ロードを投機的に実行することができるようにする。上記に挙げた種類のデータ投機のすべてにおいて、基礎をなす条件が最終的に評価されて、これにより、投機の検証または取り消しが可能となる。投機が結局誤っていた場合、投機的なデータを使用して実行された命令が、(例えば、更新したデータおよび/または非投機的なデータを使用して)再実行され得る。
投機によって、依存性のチェックが完了する前に実行が進行するようになるため、正しい投機から得られる性能向上が、誤った投機による性能損失を上回れば、大幅なパフォーマンスの向上を達成することができる。したがって、プロセッサにおいてデータ投機を実行できるようにすると共に、投機ミスに対する効率的な回復メカニズムを提供することが望ましい。
ロードオペレーションの投機的な結果をレジスタ値にリンクするためのシステムおよび方法の各種実施形態が開示される。一実施形態では、システムは、第1のアドレス指定パターンおよび第1のタグを記憶するように構成されたエントリを含むメモリファイルを有し、このメモリファイルは、エントリに含まれる第1のアドレス指定パターンを、ロードオペレーションの第2のアドレス指定パターンと比較するように構成されており、メモリファイルは、第2のアドレス指定パターンがエントリに記憶されている第1のアドレス指定パターンと一致する場合、第1のタグによって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。上記システムは、メモリファイルに結合された実行コアをさらに有し、この実行コアは、ロードオペレーションに依存する第2のオペレーションを実行する際に、この投機的な結果にアクセスするように構成されており、これに加え、メモリファイルに結合され、1つ以上のアドレスの比較を実行することによって、第1のタグによって識別されるデータ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニットも有する。
別の実施形態では、システムは、第1のアドレス指定パターンおよび第1のタグを記憶するように構成されたエントリを含むメモリファイルを有し、このメモリファイルは、エントリに含まれる第1のアドレス指定パターンを、ロードオペレーションの第2のアドレス指定パターンと比較するように構成されており、メモリファイルは、第2のアドレス指定パターンがエントリに記憶されている第1のアドレス指定パターンと一致する場合、第1のタグによって識別されるデータ値をロードオペレーションの投機的な結果にリンクするように構成されている。上記システムは、メモリファイルに結合された実行コアをさらに有し、この実行コアは、ロードオペレーションに依存する第2のオペレーションを実行する際に、この投機的な結果にアクセスするように構成されており、これに加え、メモリファイルに結合され、ロードオペレーションの投機的な結果と実結果との比較を実行することによって、第1のタグによって識別されるデータ値と、ロードオペレーションの投機的な結果とのリンクを検証するように構成された機能ユニットも有する。
本発明は、様々に変形することができ、代替形態を取り得るが、その特定の実施形態を、例として図面に図示し、かつ本明細書に詳細に記載する。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本明細書中に使用されている見出しは、分類のみを意図しており、本明細書または特許請求の範囲を限定するものではない。さらに、本願にわたり「し得る、してもよい」との用語は許容の意味(すなわち、可能性があること、できること)に用いられ、義務的な意味(すなわち必須)の意味には用いられていない点に留意されたい。「含む、備える」との用語ならびにその派生語は、「含むがこれに限定されない」ことを意味する。「接続されている」との用語は、「直接的または間接的に接続されている」ことを意味し、「結合されている」との用語は、「直接的または間接的に結合されている」ことを意味する。
本発明は、添付の図面を考慮して以下の詳細な説明を読めば、よりよく理解することができる。
図1は、プロセッサ100の一実施形態のブロック図である。プロセッサ100は、システムメモリ200に記憶されている命令を実行するように構成されている。この命令の多くは、システムメモリ200に記憶されているデータに対して操作を行う。システムメモリ200はコンピュータシステムの全体にわたって物理的に分散されており、1つ以上のプロセッサ100によってアクセスされてもよい点に留意されたい。
プロセッサ100は、命令キャッシュ106とデータキャッシュ128とを備え得る。プロセッサ100は、命令キャッシュ106に結合されたプリフェッチユニット108を備え得る。ディスパッチユニット104は、命令キャッシュ106から命令を受け取って、スケジューラ118にオペレーション(operation)をディスパッチするように構成され得る。1つ以上のスケジューラ118は、ディスパッチユニット104からディスパッチされたオペレーションを受け取って、1つ以上の実行コア124にオペレーションを発行するようにこれらに結合され得る。実行コア124は、データキャッシュ128に対するアクセスを実行するように構成されたロード/ストアユニット126を備え得る。実行コア124によって得られた結果は、結果バス130に出力され得る。この結果は、後から発行される命令のためのオペランド値として使用されるか、レジスタファイル116に記憶されるか、この両方が行われ得る。スケジューラ118とディスパッチユニット104にリタイアキュー102が結合され得る。リタイアキューは、発行した各オペレーションをリタイア(完了)させるタイミングを決定するように構成され得る。一実施形態では、プロセッサ100は、x86アーキテクチャと互換性を有するように設計され得る。プロセッサ100はこのほかの数多くの構成要素を備えていてもよい点に留意されたい。例えば、プロセッサ100は、分岐予測ユニット(図示せず)を備えていてもよい。
命令キャッシュ106は、ディスパッチユニット104が命令を受け取る前に、その命令を一時的に記憶し得る。プリフェッチユニット108を介して命令コードがシステムメモリ200からプリフェッチされて、命令キャッシュ106に提供され得る。命令キャッシュ106は、様々な構成(セットアソシエーティブ構成、フルアソシエーティブ構成、ダイレクトマップド構成など)で実施することができる。
プリフェッチユニット108は、命令キャッシュ106に記憶させる命令コードをシステムメモリ200からプリフェッチし得る。一実施形態では、プリフェッチユニット108は、システムメモリ200から命令キャッシュ106にコードをバースト転送(burst)させるように構成され得る。プリフェッチユニット108は、コードをプリフェッチするための各種手法およびアルゴリズムを使用し得る。
ディスパッチユニット104は、実行コア124が実行可能なビット符号化されたオペレーションが含まれる信号に加えて、オペランドのアドレス情報、即値データおよび/または変位データを出力し得る。一部実施形態では、ディスパッチユニット104は、特定の命令を、実行コア124内で実行可能なオペレーションにデコードするためのデコード回路(図示せず)を備えていてもよい。単純な命令は、1つのオペレーションに対応し得る。一部実施形態では、より複雑な命令は、複数のオペレーションに対応し得る。レジスタの更新に関連するオペレーションのデコード時に、投機的なレジスタ状態を記憶するため、レジスタファイル116内のレジスタ位置が予約され得る(別の実施形態では、レジスタ毎に、1つ以上の投機的なレジスタ状態を記憶するためにリオーダバッファが使用され得る)。レジスタマップ134は、レジスタリネーミングを容易にするために、ソースおよびデスティネーションのオペランドの論理レジスタ名を物理レジスタ名に変換し得る。レジスタマップ134は、レジスタファイル116内のレジスタのうち、どのレジスタが現在割り当て済みで、どのレジスタが未割り当てであるかを追跡し得る。
図1のプロセッサ100は、アウトオブオーダー実行に対応している。リタイアキュー102は、レジスタの読出しオペレーションおよび書込みオペレーションについて元のプログラムの順序を記録し、投機的な命令の実行と分岐予測ミスからの回復を可能にすると共に、正確な例外を促進し得る。一部実施形態では、リタイアキュー102も、投機的なレジスタ状態のデータの値を記憶することで、レジスタリネーミングに対応し得る。多くの実施形態では、リタイアキュー102は、リオーダバッファと同じように機能し得る。しかし、リタイアキュー102は、代表的なリオーダバッファとは異なり、どのようなデータ値でも記憶できないことがある。一部実施形態では、リタイアキュー102は、先入れ先出し(First-in-First-out)構成で実施され得、この構成では、オペレーションはその妥当性が検証されるとバッファの「一番下」に移動し、キューの「先頭」に新しいエントリが入ることができる空きが生じる。オペレーションがリタイアされると、リタイアキュー102は、レジスタファイル116内の、投機的なレジスタ状態を記憶する必要がなくなったレジスタの割当てを解除して、現在未使用のレジスタを通知する信号をレジスタマップ134に供給し得る。投機的なレジスタ状態を生成したオペレーションの妥当性が検証されるまで、その状態をレジスタファイル116内に(または、別の実施形態では、リオーダバッファ内に)保持しておくことにより、分岐予測が正しくなかった場合に、予測ミスとなった経路に沿って投機的に実行されたオペレーションの結果を、レジスタファイル116内で無効にすることができる。
特定のオペレーションのデコード時に、必要なオペランドがレジスタ位置の場合、レジスタのアドレス情報がレジスタマップ134(またはリオーダバッファ)に転送され得る。例えば、x86アーキテクチャでは、8つの32ビットレジスタ(EAX、EBX、ECX、EDX、EBP、ESI、EDIおよびESPなど)が存在する。物理レジスタファイル116(またはリオーダバッファ)は、アウトオブオーダー実行が可能となるように、これらの論理レジスタの内容を変える結果を格納するための記憶領域を備えている。デコード時に、論理レジスタのうちの1つの内容を変更すると判断された各オペレーションの結果を記憶するために、レジスタファイル116の物理レジスタが割り当てられ得る。このため、あるプログラムの実行中の様々な時点で、レジスタファイル116(または別の実施形態ではリオーダバッファ)は、特定の論理レジスタについて投機的に実行された内容を格納しているレジスタを1つ以上有し得る。
レジスタマップ134は、オペレーションのデスティネーションオペランドとして指定されている特定の論理レジスタに物理レジスタを割り当て得る。ディスパッチユニット104は、あるオペレーションのソースオペランドとして指定されている論理レジスタに割り当てられている割り当て済みの1つ以上の物理レジスタが、レジスタファイル116に存在することを判定し得る。レジスタマップ134は、その論理レジスタに最後に割り当てられた物理レジスタのタグを提供し得る。このタグは、レジスタファイル116にあるオペランドのデータ値にアクセスするか、または結果バス130を介した結果転送(result forwarding)によってこのデータ値を受け取るために使用することができる。オペランドがメモリ位置に対応している場合、このオペランド値が、ロード/ストアユニット126を介して(結果転送および/またはレジスタファイル118内の記憶領域のため)結果バスに提供され得る。このオペレーションがスケジューラ118のうちの1つによって発行されると、オペランドのデータ値が実行コア124に提供され得る。別の実施形態では、オペレーションがディスパッチされたときに、対応するスケジューラ118にオペランド値が提供されてもよい(オペレーションの発行時に、対応する実行コア124に提供されるのではない)点に留意されたい。
ディスパッチユニット104の出力に提供されたビット符号化されたオペレーションおよび即値データが、1つ以上のスケジューラ118に転送され得る。本明細書においては、スケジューラとは、オペレーションの実行の準備が整っていることを検出して、1つ以上の実行ユニットに準備が整ったオペレーションを発行する装置であるという点に留意されたい。例えば、リザベーションステーションは、スケジューラである。各スケジューラ118は、実行コア124への発行を待機している数個の未処理のオペレーションについて、オペレーション情報(ビット符号化された実行ビットのほか、オペランド値、オペランドのタグおよび/または即値データなど)を保持する機能を備え得る。一部実施形態では、各スケジューラ118は、オペランド値の記憶領域を有さない。その代わりに、各スケジューラは、実行コア124がオペランド値を(レジスタファイル116または結果バス130から)利用することができるようになるタイミングを決定するために、レジスタファイル116内で利用可能な発行済みのオペレーションと結果を監視し得る。一部実施形態では、各スケジューラ118は、特定の実行コア124に専用に使用され得る。別の実施形態では、1つのスケジューラ118が、1つ以上の実行コア124にオペレーションを発行し得る。
スケジューラ118は、実行コア124が実行するオペレーション情報を一時的に記憶するために設けられ得る。前述のように、各スケジューラ118は、未処理のオペレーションに関するオペレーション情報を記憶することができる。さらに、各スケジューラは、実行は既に完了しているが、再度発行される可能性のあるオペレーションのオペレーション情報を記憶することができる。オペレーションは、必要な任意のオペランドの値が実行に間に合うように利用可能になると、実行のため実行コア124に発行される。このため、オペレーションの実行順序は、元のプログラム命令のシーケンスの順序と一致しないことがある。データ投機を伴うオペレーションは、データ投機が誤っていた場合に再発行できるように、そのオペレーションが投機的でなくなるまでスケジューラ118内に保持され得る。
一実施形態では、各実行コア124は、加算と減算の整数演算オペレーションのほか、シフト、ローテート、論理演算オペレーションおよび分岐オペレーションを実行するように構成された構成要素を備え得る。このほか、浮動小数点演算オペレーションに対応するために浮動小数点ユニットが備えられていてもよい。実行コア124の1つ以上は、ロード/ストアユニット126が実行するロードおよびストアのメモリオペレーションのために、アドレス生成を実行するように構成され得る。
また、実行コア124は、条件分岐命令の実行に関する情報を分岐予測ユニットに提供し得、この結果、その分岐が予測ミスとなった場合に、分岐予測ユニットは、予測ミスとなった分岐に後続する命令のうち、命令処理パイプラインに既に入っている命令を破棄し、プリフェッチユニット106をリダイレクトし得る。その後、リダイレクトされたプリフェッチユニット106は、命令キャッシュ106またはシステムメモリ200から、正しい命令の組のフェッチを開始し得る。このような状況では、元のプログラム順序にある命令のうち、予測ミスとなった分岐命令の後にくる命令の結果を放棄することができ、これには、投機的に実行され、レジスタファイル116に一時的に記憶されたものも含まれる。レジスタ値を更新する場合には、実行コア124内の構成要素によって得られた結果が、結果バス130を介してレジスタファイル116に出力され得る。メモリ位置の内容を変更する場合には、実行コア124内で得られた結果がロード/ストアユニット126に提供され得る。
ロード/ストアユニット126は、実行コア124とデータキャッシュ128との間のインタフェースを取る。一実施形態では、ロード/ストアユニット126は、未処理のロードおよびストアのためにデータとアドレス情報を記憶する数個の記憶場所を有するロード/ストアバッファを備えて構成され得る。また、ロード/ストアユニット126は、データコヒーレンシが維持されるように、ロード命令と未処理のストア命令との依存性のチェックを実行し得る。
データキャッシュ128は、ロード/ストアユニット126とシステムメモリ200の間で転送されるデータを一時的に記憶するために設けられたキャッシュメモリである。前述の命令キャッシュ106と同様に、データキャッシュ128は、セットアソシエーティブ構成などの各種のメモリ構成で実施することができる。さらに、一部実施形態では、データキャッシュ106と命令キャッシュ128とを、統合したキャッシュとして実施してもよい。
メモリファイル
図2Aは、ディスパッチユニット104の一実施形態を示す。この実施形態では、ディスパッチユニット104は、レジスタマップ134とメモリファイル132を備える。前述のように、レジスタマップ134は、レジスタリネーミングを提供するように構成され得る。レジスタマップ134は、各ソースオペランドおよびデスティネーションオペランドの論理レジスタ名を受け取り、その論理レジスタに最後に割り当てられた物理レジスタの物理レジスタ名を出力し得る。メモリファイル132は、メモリファイルコントローラ202とメモリファイル記憶部204とを備える。
メモリファイル記憶部204は、1つ以上のエントリ220を有する。各エントリ220は、アドレス指定パターン206と、そのエントリのアドレス指定パターンに関連付けられているタグ208を有し得る。各タグは、データ値が生成されるときに、そのデータ値を記憶する場所(リオーダバッファ内またはレジスタファイル116内など)を示すことで、データ値を識別し得る。例えば、例示した実施形態に示すように、各タグは、レジスタマップ134が示している、そのデータ値を記憶するために割り当てられた物理レジスタを識別し得る。各アドレス指定パターンは、オペレーション内のアドレスを指定するための情報を少なくとも一部有し得る。例えば、図2Bを手短に参照すると、例示的なアドレス指定パターン206が示される。この実施形態では、アドレス指定パターン206は、ベース論理レジスタ名210、インデックス論理レジスタ名212、および変位214を有する。一部のアドレス指定パターン206は、メモリ内の特定のセグメントを識別しているレジスタのセグメント論理レジスタ名を有し得る。一部実施形態では、メモリファイル記憶部204は、数個のレジスタ、ラッチ、フリップフロップ、およびその他のクロック動作する記憶部から実施され得る。別の実施形態では、メモリファイル記憶部204は、1つ以上のランダムアクセスメモリ(RAM:Random Access Memory)セルを備え得る。
一部実施形態では、メモリファイル記憶部204に記憶されているアドレス指定パターン206は、オペレーションで指定された全アドレス指定情報よりも少なくてもよい点に留意されたい。例えば、メモリファイル記憶部204のエントリが記憶しているビット数は、変位フィールド214中において変位の指定に用いられる全ビットよりも少なくてもよい。別の実施形態では、メモリファイルコントローラ202は、メモリファイルのエントリが、特定のオペレーションのアドレス指定情報をすべて記憶できるかどうかに応じて、メモリファイル記憶部204のエントリを割り当てるかどうかを選択的に選択してもよい。例えば、メモリファイル記憶部204の各エントリが変位情報を最大で16ビット記憶することができ、あるオペレーションのアドレス指定情報が24ビットの変位情報を含む場合、メモリファイルコントローラ202は、そのオペレーションのアドレス指定情報にメモリファイルエントリを割り当てないこともある。
メモリファイルコントローラ202は、未ディスパッチのオペレーションで指定されているアドレス指定パターンと、メモリファイル記憶部204のエントリに記憶されているアドレス指定パターンとを比較し得る。オペレーションのアドレス指定パターンが、現在メモリファイル記憶部204に記憶されているどのエントリのアドレス指定パターンとも一致しない(すなわち、オペレーションのアドレス指定パターンが、メモリファイル記憶部でヒットしない)場合、メモリファイルコントローラ202は、メモリファイル記憶部204に新しいエントリを割り当て、そのオペレーションのアドレス指定パターンの少なくとも一部を記憶し得る。割り当てに使用できる空きのエントリがメモリファイル記憶部204内に存在しない場合、メモリファイルコントローラ202は、LRU(最低使用頻度法)、FIFO(先入れ先出し法)、ランダム置換などの置き換え方式を使用して、上書きするエントリを選択し得る。
メモリファイルコントローラ202は、割り当てたエントリにオペレーションのアドレス指定パターンを記憶するほか、そのオペレーションのアドレス指定パターンが識別しているメモリ位置からロードしようとしているか、またはそこにストアしようとしている値を識別するタグを含むことがある物理レジスタ名208(物理レジスタの名前など)も記憶し得る。例えば、メモリからデータをロードするロードオペレーションが処理されようとしている場合、そのロードオペレーションを受けて割り当てられるエントリは、ロードオペレーションの結果を記憶するために割り当てられる物理レジスタの名前を記憶し得る。メモリ位置にデータを書き込むストアオペレーションが処理されようとしている場合、メモリファイルコントローラ202は、そのストアのソース値が記憶されているレジスタの物理レジスタ名をメモリファイル記憶部204に記憶し得る。
オペレーションのアドレス指定パターン(またはそのパターンの一部)がメモリファイル204内のエントリに既に記憶されている(すなわち、オペレーションのアドレス指定パターンがメモリファイル記憶部でヒットする)場合、メモリファイルコントローラ202は、一致したアドレス指定パターンを含むエントリを使用するか変更し得る。ロードオペレーション(特定のアドレスからレジスタに値をロードするオペレーション)が処理されようとしている場合、メモリファイルコントローラ202は、一致するエントリに記憶されている物理レジスタ名208を出力し得る。ストアオペレーション(レジスタから特定のアドレスに値をストアするオペレーション)が処理されようとしている場合、メモリファイルコントローラ202は、一致するエントリに記憶されているタグ(物理レジスタ名208など)を、ストアしようとしているデータのタグで上書きし得る。
ロードオペレーションが処理されようとしており、このロードオペレーションがメモリファイル記憶部204でヒットする場合、メモリファイルコントローラ202が出力するタグが、このタグが識別する記憶された値を、そのロードオペレーションの投機的な結果にリンクするために使用され得る。例えば、一部実施形態では、ロードオペレーションがスケジューラ118にディスパッチされると、メモリファイル132が出力するタグがスケジューラにも(例えば、投機的なソースオペランドのタグとして)提供され得る。スケジューラ118は、このタグが識別する値が(例えば、レジスタファイル116内、または結果バス130上で)利用可能になると、ロードオペレーションを発行し得る。実行コア124は、このロードオペレーションを実行し、この結果、リンクされている値が、ロードオペレーションの投機的な結果として結果バス130を介してブロードキャストされ得る(一部実施形態では、ロードの結果として生成されるデータ値にフラグを設定したり、あるいはこの値を投機的な値として識別しなくてもよい点に留意されたい)。別の実施形態では、後述するように、タグを投機マップに記憶することで、データ値がロードオペレーションの投機的な結果にリンクされ得る。
リンクが確立されたことで、タグが識別するデータ値が(例えば、レジスタファイル116内、または結果バス130上で)ひとたび利用可能になると、投機的な結果を使用して依存関係のあるオペレーションを実行できるように、このデータ値が、ロードの投機的な結果として転送され得る。多くの場合、ロードオペレーションの投機的な結果を使用して依存関係のあるオペレーションを実行できるようになり、ロードオペレーションの非投機的な結果が利用可能になるまで待たされる場合よりもオペレーションを早く実行できるようになる。一部実施形態では、ロードオペレーションを実行することでデータ値が転送され、この結果、データ値がロードオペレーションの投機的な結果として結果バス130に出力され得る。例えば、一実施形態では、3サイクルを要してロードを非投機的に実行する代わりに(このロードがデータキャッシュ128でヒットすると仮定した場合)、データ値とそのデータ値を識別するタグをロードの結果として出力することで、ロードを1サイクルで実行することができる。別の実施形態では、ディスパッチ時に、メモリファイルコントローラ202が出力するタグを、依存関係のあるオペレーション(ロードオペレーションによって生成されるオペランドをとるオペレーション)に投機的なオペランドソースとして直接提供することで、より間接的な方法でデータ値を転送してもよい。データ値を転送する手段は、ロードオペレーションを、投機的なレジスタ間移動オペレーションとして実行されるように変更するか、あるいは、依存関係のあるオペレーションに投機的なオペランドソースのタグとしてタグを提供するように構成された1つ以上のディスパッチユニットと、リンクされているデータ値が利用可能かどうかに応じて、変更したロードオペレーションおよび/または依存関係のあるオペレーションを発行するように構成されたスケジューラと、リンクされているデータ値をロードの結果として出力するか、またはリンクされているデータ値を使用して依存関係のあるオペレーションを実行するように構成された実行コアの1つ以上を備え得る。
前述のように、メモリファイル132は、データキャッシュ128(またはシステムメモリ200)内のデータにアクセスするオペレーションのアドレス指定パターンを追跡している。この結果、物理レジスタに記憶されているレジスタ値を、メモリの特定のアドレスに記憶されている値にリンクできるようになる。メモリファイル132が、オペレーションストリームから相互に相対的に取り出され、レジスタ値を投機的なロードの結果にリンクするのに用いられる複数のオペレーション間の依存性を許容する点に留意されたい。このため、メモリファイルは、数個の介入オペレーションによって分けられる可能性のある複数のオペレーション間の依存性の履歴(dependency history)を提供し得る。
図3は、ロードオペレーションの投機的な結果をレジスタ値にリンクする方法の一実施形態のフローチャートである。301において、レジスタタグとアドレス指定パターンとが関連付けられ、レジスタとアドレスの両方が同じデータ値を記憶している可能性が高いことが示される。タグとアドレス指定パターンは、いずれも最初のロードオペレーションまたはストアオペレーションに対して指定される。例えば、最初のオペレーションがロードオペレーションの場合、タグは、ロードの結果を記憶するために割り当てられた物理レジスタを識別しており、アドレス指定パターンは、ロードのアドレスの算出に使用されるパターンであり得る。あるいは、最初のオペレーションがストアオペレーションの場合、アドレス指定パターンはストアのデスティネーションのアドレスを示しており、タグはストアオペレーションによってストアされるデータを識別し得る。一部実施形態では、タグとアドレス指定パターンとは、この両者をメモリファイルのエントリに記憶することで関連付けられ得る。
ステップ303〜305に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致する場合、ロードの投機的な結果が、最初のオペレーションに対して指定されたタグが識別するデータ値にリンクされ得る。ステップ303〜311に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致しない場合、ロードのアドレス指定パターンと、ロードのデスティネーションのタグとが(例えば、この両者をメモリファイルのエントリに記憶することにより)関連付けられ得る。さらに、ステップ313に示すように、データキャッシュにアクセスすることにより、ロードが通常通り実行され得る。一実施形態では、ロードオペレーションのアドレス指定パターンと、以前に実行された2つ以上のオペレーションのアドレス指定パターンとが比較され得る。例えば、ロードのアドレス指定パターンと、現在メモリファイルに記憶されているアドレス指定パターンの各々とが比較され得る。
ロードの投機的な結果が、タグが識別するデータ値にリンクされた場合、ステップ307に示すように、そのデータ値が、ロードオペレーションの投機的な結果として1つ以上の依存関係のあるオペレーションに転送され得る。このデータ値は、後で詳しく説明するように、結果転送によって転送されるか、あるいは依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標(indication)を転送することで転送され得る。一実施形態では、データ値が結果転送によって転送される場合、このデータ値を生成したオペレーションの実行が完了した1サイクル後に、転送されたデータ値を使用して依存関係のあるオペレーションが実行され得る。データ値が、依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標の形で転送された場合、そのデータ値を生成したオペレーションが実行を完了した直後に、依存関係のあるオペレーションを発行することができる。309に示すように、投機的な結果が転送されてから、投機的な結果が検証され得る。投機的な結果は、データキャッシュにアクセスすることなく転送することができる(つまり、投機的な結果は、データキャッシュにアクセスすることで得られる非投機的な結果よりも早く転送することができる)。
ステップ309において、投機的な結果が正しいことが検証された場合、データキャッシュへのアクセスを実行せずに、ロードオペレーションを完了することができる。しかし、ステップ309において、投機的な結果が正しくないと判定された場合、正しい結果を取得するため、データキャッシュに対するアクセスが実行され得る(図示せず)。この場合、ロードの投機的な結果を使用して実行された依存関係のある全てのオペレーションが、ロードの正しい結果を使用して再実行され得る。場合によっては、(ステップ307において)リンクされているデータ値をロードの投機的な結果として転送する前に、(ステップ309において)検証を実行してもよい点に留意されたい。このような状況では、ロードは通常通り実行されるか、あるいはリンクが正しいと判定された場合は、データ値がロードオペレーションの非投機的な結果として転送され得る。
メモリファイル132の動作をさらに詳しく説明するため、ディスパッチユニット104が処理する命令のシーケンスに次の命令が含まれるとする。
MOV EBX, [EDX + EAX - 変位A] (LOAD1)

MOV ECX, [EDX + EAX - 変位A] (LOAD2)

MOV [EDX + EAX - 変位A], EAX (STORE1)
これらのオペレーションの各々は、プログラムの順序内で1つ以上の介入命令によって分けられる可能性がある。上に示すように、これらの3つのオペレーションは、同じアドレス指定パターン(EDX + EAX - 変位A)を有する。
LOAD1のアドレス指定パターンがメモリファイル132に提供されると、メモリファイルコントローラ202は、LOAD1のアドレス指定パターンと一致するアドレス指定パターンがないか、メモリファイル記憶部204を調べ得る。このアドレス指定パターンがメモリファイル記憶部204でヒットしないとすると、メモリファイルコントローラ202は、エントリを割り当てて(その際、未割当のエントリを使用するか、割り当て済みのエントリに上書きする)、ロードオペレーションのアドレス指定パターンと、レジスタマップ134によって提供されるロードオペレーションのデスティネーションの物理レジスタの物理レジスタ名との少なくとも一部を記憶し得る。このロードオペレーションはメモリファイル記憶部でヒットしないため、メモリファイルコントローラ202は、このロードオペレーションのタグを出力することができない。
続いて、メモリファイル132によってLOAD2が処理されると、(介入オペレーションによってLOAD1のエントリが上書きされていないとすると、)そのアドレス指定パターンは、LOAD1に対して割り当てられたエントリのアドレス指定パターンに一致し得る。LOAD2のアドレス指定パターンがメモリファイル記憶部204でヒットすると、メモリファイルコントローラ202は、LOAD1の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力し得る。この物理レジスタ名は、LOAD1によってロードされたデータ値を、LOAD2の投機的な結果にリンクするために使用され得る。
メモリファイル132によってSTORE1が処理されると、(この場合も、介入オペレーションによってLOAD1のエントリが上書きされていないとすると、)そのアドレス指定パターンは、LOAD1に対して割り当てられたエントリにヒットし得る。メモリファイルコントローラ202は、(LOAD2のときのように)LOAD1の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力するのではなく、そのエントリに記憶されている物理レジスタ名を、STORE1によってストアされようとしているデータを格納しているレジスタの物理レジスタ名208で上書きし得る。このため、その後処理されるロードオペレーションがこのエントリにヒットすると、メモリファイルコントローラ202は、LOAD1のデスティネーションレジスタの物理レジスタ名ではなく、STORE1のソースの物理レジスタの物理レジスタ名を出力するようになる。
メモリファイル132は投機的な構造として使用されているため、メモリファイル記憶部204に記憶されている情報が正確であるかどうかによって、プロセッサ100の正常な動作が重大な影響を受け得ない(例えば、メモリファイル132内の予測ミスによって、プロセッサ100の出力のエラーが発生しないことがある)。しかし、ロードオペレーションの投機的な結果と物理レジスタに記憶されている値とを正確にリンクすること、および/または予測ミスとなった投機的なリンクによって引き起こされる性能ペナルティーを低減することによって得られる恩恵を高めるために、メモリファイル132の精度を改善することは望ましいといえる。一部実施形態では、アドレスの指定に使用するレジスタに対する更新が検出された場合に、メモリファイル記憶部204のエントリを無効にすることによって、メモリファイル132の精度を向上させることができる。例えば、各アドレス指定パターンに、アドレス計算のためのベースおよびインデックスの識別に使用する1つ以上の論理レジスタ識別子が含まれ得る。後続のオペレーションが、エントリのアドレス指定パターン206の一部として指定されている論理レジスタの1つを変更する場合、そのエントリが無効にされ得る。このため、図2Aに示すように、エントリの無効処理を実行するために、各オペレーションのデスティネーションレジスタの論理レジスタ名が、メモリファイル132に入力され得る。
さらに、一部実施形態では、特定のアドレスにあるデータに別のデバイスが書込みアクセスを取得したことが検知されると、メモリファイル記憶部204内のエントリが無効にされ得る。同様に、予測ミスが検出されると、エントリが無効にされ得る。通常、メモリファイル記憶部204のエントリの精度に影響を及ぼす可能性のある条件などの多くの条件が監視されて、エントリを無効にすべきタイミングを決定するために使用され得る。しかし、メモリファイル132は投機的な構造であるため、特定の監視方法を実施するために必要となる追加ハードウェアのコストが、メモリファイルの精度を改善できる可能性を上回る場合、これらの監視方法の一部を実施しない実施形態もある。
メモリファイルの検証
ロード/ストアユニット126(またはプロセッサ100に存在し、リンクを検証するための別の手段)は、メモリファイル132によって識別される物理レジスタに記憶されている値と、ロードオペレーションの投機的な結果とのリンクを検証し得る。リンクが正しくない場合、ロードストアユニット126はロードオペレーションを再発行させるか、ロードオペレーションの正しい結果を結果バス130上にブロードキャストするか、この両方を実行し得る。ロードが再発行されると、ロードの投機的な結果を使用して実行された依存関係のあるすべてのオペレーションが再発行され、更新後の非投機的な値を使用して実行される。別の実施形態では、リンクが正しくない場合、プロセッサ100は投機ミス後に発生したオペレーションを破棄して、ロードオペレーションの正しい結果を使用してこれらのオペレーションの実行を再開し得る。
一部実施形態では、リンク検証は、ロードストアユニット126において、オペレーションのアドレスを比較することによって実行され得る。ロードストアユニット126は、様々なメモリオペレーションのアドレスを比較して、本来リンクされるべきであったオペレーションを検出し得る。一実施形態では、ロードストアユニット126は、ストアからロードへの(store-to-load)転送比較器を使用して、投機的なリンクを検証し得る。ストアからロードへの転送比較器は、リンク検証に使用されるほか、先のストアから後のロードの結果を転送するために使用され得る。例えば、ロードストアユニットは、ストアからロードへの転送を実行するために使用される比較器を備え得る。これらの比較器は、未処理の各ロードのアドレスを、先のストアの組のアドレスと比較し得る。後のロードのアドレスと一致するアドレスを有する先のストアの組のうち、最も新しいものが選択され得る。その後、先のストアの組から選択したストアによってストアされたデータが、ロードの結果として転送され得る。
図4Aは、オペレーションのアドレスを比較することによってリンク検証を実行するために、ストアからロードへの転送(store-to-load forwarding:STLF)比較器280を使用するように構成されたロードストアユニット126の一実施形態を示す。図に示すように、ロードストアユニット126は、未処理のロードとストアのための記憶部を備え得る。図に示した実施形態では、ロードとストアのそれぞれの記憶部が(ロード記憶部250とストア記憶部260内に)設けられているが、別の実施形態では、ロードとストアが同じオペレーション記憶部に記憶されてもよい(例えば、追加のフィールドにより、各オペレーションがロード、ストア、またはこの両者であるかを示すなど)。一部実施形態では、このオペレーション記憶部は、スケジューラ18の一部であってもよい。
各ロードオペレーションを識別する情報が、ロード記憶部250のエントリ252に格納され得る。この情報には、ロードオペレーションを識別するタグ254、ロードの投機的な結果がリンクされている値を持つメモリオペレーション(別のロードまたはストア)を識別する転送タグ256、およびロードのターゲットのアドレスを示すアドレス258が含まれ得る。他のフィールド(図示せず)が含まれてもよい。
転送タグ256は、メモリファイル132内でロードオペレーションのヒットがみつかると、メモリファイル132によって生成され得る(このロードオペレーションは、その投機的な結果を、メモリファイルが生成するタグによって識別されるデータ値にリンクしており、“リンク先(linking)ロード”と呼ぶ)。メモリファイル132は、タグ208とアドレス指定パターン206をメモリファイルの各エントリ220に記憶するほかに、そのエントリ220の割当を生じさせた元のメモリオペレーション(ロードまたはストアなど)を識別するタグを記憶し得る。このタグは転送タグ256として出力され得、先のメモリオペレーション(そのオペランドが後のメモリオペレーションの投機的な結果にリンクされている)を識別している。
各ストアオペレーションを識別する情報が、ストア記憶部260内のエントリ262に記憶され得る。この情報には、そのストアオペレーションを識別するタグ264と、そのストアオペレーションのターゲットのアドレスを示すアドレス268が含まれる。
STLF比較器280は、ロードが、データをそこから転送してくるストア(存在する場合)を決定するように構成され得る。さらに、STLF比較器280は、ロードオペレーションの投機的な結果と値とのリンクを検証し得る。このリンクは、前述のようにメモリファイル132によって生成され得る。STLF比較器280は、ロードオペレーションのアドレス258を、1つ以上のストアオペレーションのアドレス268と比較して、そのロードが本来そこからデータを転送すべきだったストア(存在する場合)を検索することによって、ロードオペレーションの投機的な結果とストアのオペランドとのリンクを検証するように構成され得る。一致するストア(リンク元のロードと同じアドレスを持つストア)がみつからないが、ロードの投機的な結果がデータ値にリンクされていることをロードの転送タグ256が示す場合、STLF比較器280は、リンクが正しくないという指標を出力し得る(後述するように、ロードがそこからテータを転送した可能性のあるロードがほかに特定されない場合)。一致するストアがみつかったが、この一致したストアのタグ264が、ロードオペレーションの転送タグ256と一致しない場合、STLF比較器280は、同様にリンクが正しくないという指標を出力し得る。一致するストアがみつかり、この一致したストアのタグ264が、ロードオペレーションの転送のロードと一致した場合、STLF比較器280は、リンクを検証したことを示す指標を出力し得る(または、単にリンクが正しくないという指標を出力しない)。一部実施形態では、この検証プロセスの少なくとも一部分が、ロードに対し、ストアからロードへの転送が実行されるプロセスとほぼ同時に行われ得る。
特定のロードの投機的な結果が別のメモリオペレーションのオペランドにリンクされていない場合、そのロードの転送タグ256が、無効な値にセットされるか、あるいはそのロードに対してリンク検証を実行する必要がないことを示す値にセットされ得る。STLF比較器280は、このようなロードに対して、ストアからロードへの転送を実行するが、リンクの検証は実行しないことがある。
STLF比較器280は、ロードの投機的な結果とストアのオペランドとのリンクの検証のほかに、ロードの投機的な結果と他のロードのオペランドとのリンクを検証するようにも構成され得る。例えば、メモリファイル132が、後のロードの投機的な結果を、先のロードのオペランドにリンクしていることがある。このため、後のロードの転送タグ256が、先のロードを識別していることがある。STLF比較器280は、プログラムの順序において、リンクされたロード同士の間に、後のロードのアドレスと一致するストアアドレスを有するストアが存在しないことを検証することによって、このようなロード間リンクを検証することができる。後のロードと先のストア間のリンクの検証と同様に、STLF比較器280が、リンクが正しくない(例えば、介在するストアのアドレスが、後のロードのアドレスと一致するため)と判定した場合、STLF比較器280は、リンクが正しくないという指標を出力し得る。
一実施形態において、STLF比較器は、リンク元のロードよりも先のロードおよびストアの組から、その投機的な結果が先のオペレーションのオペランドにリンクされているロードオペレーションのアドレスと一致するアドレスを有するオペレーションのうち、最も後のものを検索することによって、一対のロードオペレーション間のリンクを検証し得る。一致する最も後のオペレーションが、リンク元のロードオペレーションと共に記憶された転送タグ256によって識別されるオペレーションである場合、STLF比較器はリンクが正しいと判定し得る。一致するオペレーションがみつからないか、あるいは一致するオペレーションが、転送タグ256によって識別されるオペレーションでない場合、STLF比較器280はリンクが正しくないという指標を出力し得る。
別の実施形態では、STLF比較器280は、(リンク元のロードより先で、かつリンク元のロードのアドレスと一致するアドレスを有するロードの組から)一致する最も後のロードと、(リンク元のロードより先で、かつリンク元のロードのアドレスと一致するアドレスを有するストアの組から)一致する最も後のストアを検索し得る。一致する最も後のロードが一致する最も後のストアよりも(プログラムの順序において)後で、かつ一致する最も後のロードが、リンク元のロードの転送タグ256によって識別されるオペレーションである場合、STLF比較器280は、リンクが正しいと判定し得る。一致する最も後のロードが一致する最も後のストアよりも先の場合、STLF比較器280はリンクが正しくないと判定し得る(この理由は、例えば、リンク元のロードは本来、一致する最も後のストアにリンクされているはずだからである)。
リンク元のロードが、リンク元のロードよりも先のストアのうち、最も後のものよりも、プログラムの順序において後にくる一致する任意のロードに適切にリンクされている場合もある(一致する先のロードのうちの最も後のロードのみに適切にリンクされているのではない)ため、STLF比較器280は、一対のロード間のリンクの検証中に、複数の一致するロードを比較し得る。このため、STLF比較器は、一致する最も後のロードを識別するのみならず、一致するロードの組を識別して、その組の任意の1つが、リンク元のロードの転送タグ256によって識別されるリンク先ロードであるかどうかを判定し得る。
場合によっては、リンク先のメモリオペレーションが、リンクが検証される前に、リタイアされてしまう、すなわちプロセッサ100から削除されてしまうことがある。このため、先のオペレーションが削除されたため、リンクが他の点では正しい場合であっても、STLF比較器280は、削除されたオペレーションのオペランドにその投機的な結果がリンクされているロードについて、一致するメモリオペレーションを特定できない可能性がある。リンクが検証できない状況では、STLF比較器280は、リンクが正しくないという指標を出力し得る。
リンクが正しくないという指標を受けると、メモリファイル132の全部または一部が無効にされ得る。例えば、一実施形態では、当該ロードの投機的な結果を提供するために使用されたメモリファイルのエントリが、無効にされ得る。別の実施形態では、STLF比較器280によって正しくないリンクが検出されると、メモリファイル132の全体が無効にされ得る。さらに、ロードの結果に依存している、依存関係のあるオペレーションが、メモリファイル132から取得される投機的な結果の代わりに、ロードの非投機的な結果を使用して実行され得る(あるいは、オペレーションが既に実行されている場合は再実行される)。
図に示した実施形態ではSTLF比較器を用いてリンク検証を実行しているが、他の実施形態では、メモリオペレーションのアドレスおよび/またはアドレス指定パターンを比較することによってリンク検証を実行するために、ストアからロードへの転送に用いられない専用の比較器を使用してもよいことに留意されたい。
一部実施形態では、メモリファイル132が、ロードの投機的な結果がリンクされるデータ値を識別するタグを出力する度に、メモリファイル132は、そのロードにリンクされるメモリオペレーションに関連付けられたフラグをセットさせ得る。例えば、ロードのアドレス指定パターンがメモリファイルのエントリでヒットしたことを受けて、ロードの投機的な結果が、先のストアオペレーションのストアオペランドにリンクされると、メモリファイル132は、投機的な結果にリンクするためにデータ値のタグを出力し、先のストアが後のロードにリンクされたことを示す指標を出力し得る。この指標を受けて、ロードストアユニット126は、図4Bに示すように、先のストアに関連付けられているリタイアフラグ269をセットし得る。ロードストアユニット126は、ストアのオペランドにその投機的な結果がリンクされている後のロードオペレーションがすべて検証されるまで、リタイアフラグ269を保持し続け得る。一部実施形態では、後のロードの投機的な結果が、先のロードオペレーション(図示せず)のデスティネーションオペランドにリンクされている場合にも、先のロードに関連付けられているリタイアフラグがセットされ得る点に留意されたい。
ロードストアユニット126および/またはリタイアキュー102は、各ストアオペレーションに関連付けられているリタイアフラグ269を用いて、そのストアオペレーションに割り当てられたエントリ262の割当を解除すべきタイミング、およびそのストアオペレーションをリタイアさせるタイミングを決定することができる。ストアオペレーションのリタイアフラグがセットされている場合、ロードストアユニット126は、ストアのオペランドと後のストアの投機的な結果とのリンクが検証可能なように、そのストアオペレーションに対するエントリ262の割当を保持し得る。同様に、リタイアフラグ269がセットされている間は、リタイアキュー102はオペレーションをリタイアさせることができない。ロードオペレーションに関連付けられているリタイアフラグを使用する実施形態では、ロードストアユニット126および/またはリタイアキュー102は、ストアオペレーションに関して記載したのと同様の方法で、各ロードオペレーションに関連付けられているリタイアフラグを用いて、そのロードオペレーションに割り当てられているエントリ252の割当を解除すべきタイミング、およびそのロードオペレーションをリタイアさせるタイミングを決定することができる。
図5Aは、一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証する方法を示すフローチャートである。ステップ321および323に示すように、ロードの投機的な結果が、(プログラムの順序において)先のメモリオペレーションのオペランドにリンクされている場合、リンク先の先行オペレーションのタグが、リンク元の(後の)ロードと共に保存され得る。例えば、図2Aに示したものなどのメモリファイルを使用して、リンク元のロードの投機的な結果が、先のストアによってストアされたデータ値に、あるいは先のロードによってロードされたデータ値にリンクされ得る。先のロードまたはストアのタグは、リンク元のロードがリンクされているオペレーションを識別するために、そのリンク元ロードと共に(例えば、スケジューラおよび/またはロードストアユニット内に)記憶され得る。
ステップ325に示すように、ある時点で、ロードストアユニットは、リンク元のロードとリンク先の先行オペレーションとのリンクを検証し得る。一部実施形態では、ロードストアユニットは、STLF比較器を使用してこの検証を実行し得る。STLF比較器は、リンク検証の実行のほかに、ストアからロードへの転送を実行するためにも使用され得る。別の実施形態では、ロードストアユニットが、リンク検証のみを実行する専用の論理回路を有してもよい。
ステップ325で判定したように、ロードストアユニットが、リンクが正しいと判定すると、ステップ327に示すように、ロードストアユニットは、ロードオペレーションの投機的な結果が、(少なくともメモリファイルによって実行される予測に関して)非投機的であると判定し得る。一部実施形態では、ロードストアユニットは、プロセッサの他の構成要素(スケジューラなど)に対して、リンクが検証されたことを通知し得る。
ステップ325および329に示すように、ロードストアユニットが、リンクが正しくないと判定した場合、ロードストアユニットは、リンクが正しくないという指標を(例えば、スケジューラおよび/またはディスパッチユニットに)出力し得る。この指標に応えて、リンク元のロードの新しい結果が生成され得る。例えば、STLF比較器を使用してリンクを検証する場合、STLF比較器は、検証プロセス中に、リンク元のロードが本来、そこからデータを転送すべきであった元のストアを特定した可能性がある。特定されたストアによってストアされたデータが、ロードオペレーションの非投機的な結果として転送され得る。さらに、正しくないリンクが検出されると、メモリファイル(またはメモリファイルの少なくとも1つのエントリ)が無効にされ得る。
図5Bは、一実施形態による、メモリオペレーションに関連するリンクが検証されたかどうかに基づいて、そのメモリオペレーションをリタイアさせる方法のフローチャートである。ステップ331〜333に示すように、後のロードの投機的な結果が、先のメモリオペレーションによって操作された(例えば、ロードまたはストアされた)データにリンクされている場合、先のオペレーション(リンク先オペレーション)に関連付けられているフラグがセットされ得る。一部実施形態では、このフラグは、スケジューラまたはロードストアユニットに備えられ得る。
ステップ335〜337に示すように、オペレーションのフラグがセットされている場合、後のロードの投機的な結果と先のオペレーションによって操作されたデータとのリンクが検証されるまで、オペレーションのリタイアが遅延され得る。ステップ339に示すように、フラグがセットされていない場合、先のオペレーションは通常通りリタイアされ得る。
上記の例では、アドレス比較を用いて(すなわち、メモリオペレーションによってアクセスされるアドレスを比較することによって)リンク検証を実行しているが、他の実施形態では、値の比較を用いて(すなわち、メモリオペレーションのアクセスによって生成されるデータ値を比較することによって)リンク検証を実行してもよい。例えば、アドレス計算に特定のレジスタ値を使用しないロードオペレーションについて、投機的なリンクの検証のために、そのレジスタ値を使用することによって、リンクが検証されてもよい。アドレス計算に使用されないレジスタが、ロードオペレーションの結果に投機的にリンクされている値をストアするために使用され得る。ロードオペレーションの実結果が得られると、ロードストアユニット(または実行コア)は、本来であれば未使用のレジスタ内の値を、実結果の値と比較し得る。この2つが等しい場合、リンクは正しい。等しくない場合、リンクは誤っており、訂正内容をプロセッサ全体に伝達するために、ロードオペレーションの正しい非投機的な結果がブロードキャストされ得る。さらに、正しくないリンクが検出されたことを受けて、メモリファイルの全部または一部が無効にされ得る。
一実施形態では、投機的にリンクされた結果値を記憶するために使用するレジスタは、インデックスレジスタでありうる。メモリファイルコントローラは、アドレス計算にインデックスレジスタを使用しないメモリオペレーションに対して、メモリファイル記憶部内にエントリを単に割り当てるように構成され得る。
一実施形態では、図6Aに示すように、ロードストアユニット126において、値に基づくリンク検証が実行されてもよい。この場合、ロードストアユニット126は、(ストアからロードへの転送により、あるいはデータキャッシュおよび/またはメモリにアクセスすることにより)ロードオペレーションによってロードされた実際値255を、ロードオペレーションの投機的な結果257と比較するように構成された専用の値比較器282を備える。この2つの値が等しい場合、ロードストアユニット126はリンクが正しいと判定し得る。等しくない場合、ロードストアユニット126は、ロードオペレーションの正しい結果(ロードした値255)をブロードキャストし、その結果、任意の依存関係のあるオペレーションが正しい値を用いて実行(または再実行)可能となる。また、ロードストアユニット126は、正しくないリンクが検出されると、メモリファイル132の1つ以上のエントリを無効にすべきことを示す信号を、ディスパッチユニット104に供給し得る。
別の実施形態では、図6Bに示すように、値に基づくリンク検証が、実行コア124において実行されてもよい。これらの実施形態では、その投機的な結果が、メモリファイル132によって識別されるデータ値にリンクされているロードが、ディスパッチユニット104によって、ロードオペレーションと比較オペレーションの組み合わせに変換され得る。これらのオペレーションは、ロードストアユニット126と機能ユニット126にそれぞれ発行され得る。ロードストアユニット126は、通常通りロードを実行し得る。ロードの非投機的な結果が利用可能な場合、未使用のアドレス計算レジスタ(インデックスレジスタなど)を介して投機的な結果にアクセスし、この投機的な結果を、ロードストアユニット126が生成した非投機的な結果と比較することによって、比較オペレーションが実行され得る。この2つが等しい場合、リンクは正しいが、そうではない場合、リンクは誤っている。
図7は、一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを、値比較を使用して検証する方法のフローチャートである。ステップ341〜343に示すように、ロードの投機的な結果が、(例えばメモリファイルによって)先のメモリオペレーションのオペランドにリンクされている場合、ロードのアドレス計算に必要ではないオペランドが、ロードの投機的な結果を記憶するために使用され得る。例えば、ロードがアドレス計算にインデックスレジスタを使用しない場合、インデックスレジスタが、ロードの投機的な結果を記憶するために使用され得る。
ステップ345および347に示すように、ロードの実結果がロードの投機的な結果と一致する(例えば、機能ユニットにおいて値比較を実行することによって判定される)場合、リンクが正しく、投機的な結果は非投機的となり得る。一致しない場合、リンクが誤っており、349に示すように、任意の依存関係のあるオペレーションに正しい結果を伝達するために、ロードの実結果が結果バスでブロードキャストされ得る。
ロードの投機的な結果の、ソースオペランドとしての転送
各種の実施形態では、多種多様な方法によって、ロードオペレーションの投機的な結果をレジスタのデータ値にリンクすることができる。一部実施形態では、オペランドについて投機的なソースと非投機的なソースの2種類のソースを識別することで値をリンクし得る。投機的なソースとは、リンクされたデータ値であり得る。ロードの投機的な結果にリンクされているデータ値を示すために、投機的なソースがそのロードオペレーションに提供され得る。一部実施形態では、投機的なソースは、このようなロードオペレーションに依存しているオペレーションにも提供され得る。このため、オペランドのなかには、投機的なソースを識別するタグと、非投機的なソースを識別するタグの2つのタグを有するものがあり得る。このような実施形態では、図8に示すように、各スケジューラ118は、投機的なオペランドと非投機的なオペランドの両方のためのタグの記憶領域を提供し得る。
図8は、プロセッサに備えられ得るスケジューラ118の一実施形態を示す。例示した実施形態では、スケジューラ118は、スケジューラコントローラ502とオペレーション記憶部504とを備える。スケジューラコントローラ502は、ディスパッチユニット104がオペレーションをディスパッチすると、そのオペレーションに対応する情報を記憶するためのエントリを、オペレーション記憶部504内に割り当て得る。例えば、オペレーション記憶部504のエントリ522は、オペコードフィールド510、1つ以上のオペランドフィールドおよび結果フィールド516を有し得る。結果フィールド516は、そのエントリのオペレーションの結果を記憶すべき物理レジスタを識別するタグを記憶し得る。オペレーションが発行されると、このタグが、1つ以上のタグバス520のうちの1つを介して、各スケジューラ118に転送され得る。各スケジューラは、未処理のオペレーションについて、その未処理のオペレーションのオペランドが利用可能になるタイミングを決定するために、タグバス520を介して転送されたタグと、オペランドのタグ(後述するように投機的なタグと非投機的なタグの両方)とを比較し得る。このため、オペレーションのソースオペランドのタグがタグバス520に出力されると、そのオペレーションが発行され得る(あるいは発行の準備が整っていることを知らせるようにマークされ得る)。
各オペランドフィールドは、投機的なオペランドソースを識別している投機的なタグと、非投機的なオペランドソースを識別している非投機的なタグの両方の記憶領域を有し得る。例示したエントリ522では、オペランド1の2つのソースは、非投機的なタグ512と投機的なタグ514とによって識別される。スケジューラ118は、オペレーションのオペランドが利用可能となったことを知らせる指標を1つ以上受け取ると、オペレーションを発行するように構成され得る。オペランドは、投機的なソースまたは非投機的なソースのいずれか一方から利用可能であれば、利用可能といえる。オペランドが投機的なソースと非投機的なソースの両方から利用可能な場合、非投機的なソースから利用可能な値を使用してオペレーションが実行され得る。一部実施形態では、スケジューラ118は、投機的なオペランドソースのみしか利用できないオペレーションよりも、非投機的なオペランドソースが利用可能なオペレーションを優先して発行するように優先順位を決定し得る。
オペレーションが、一部の、投機的なソースを持つオペランドと、他の、投機的なソースを持たないオペランドとを含みうることに留意されたい。また、同じソースが、オペレーションによって、投機的なソースとなったり、非投機的なソースとなったりすることがある点にも留意されたい。一部実施形態では、オペレーションの実行時に、各オペランドについて、1つのデータ値しか読み出されなくてもよい(例えば、実行コア124が、投機的なオペランドソースと、非投機的なオペランドソースの一方を読み出し、両方共読み出すことはない)。これにより、レジスタファイル116に追加ポートを追加しなくても済むようになり得る。一部実施形態では、投機的なソースと物理的なソースが同じ記憶場所に(例えば、レジスタファイル116内に)記憶されており、投機的なソースは、フラグの設定か、あるいは別の方法によって投機的なソースとして識別されなくてもよい。
多くの実施形態では、オペレーションが実行コアに124を発行されたのちも、スケジューラ118が、そのオペレーションに割り当てられたエントリを保持するように構成することができる。1つ以上の投機的なオペランドが利用可能となり、スケジューラ118によってオペレーションが発行されたときに、スケジューラはそのオペレーションに割り当てられたエントリ522を保持し、この結果、投機的なリンクが正しくない場合に当該オペレーションを再発行できるようになる。一部実施形態では、ロード/ストアユニットは、投機的なロード結果が物理レジスタに記憶されているデータ値にリンクされたときに確立される投機的なリンクを検証するように構成され得る。リンクが正しい場合、正しい結果がリンクを介して既に利用可能となっているため、ロードストアユニットは、ロードの非投機的な結果をブロードキャストしないように構成され得る。その場合、オペレーションの非投機的なオペランドソースを識別するタグが、結果バス130を介してブロードキャストされていれば、スケジューラ118は、そのオペレーションを再発行するように構成され得る。
別の実施形態では、ロード/ストアユニットは、ストアの結果を追加の状態ビットと併せてブロードキャストすることができ、この状態ビットは、ブロードキャストをマスクするか、または投機的なリンクが正しくロードの再発行が不要であることを示す。しかし、投機的なリンクが正しくない場合、ロード/ストアユニットは、ロードの正しい結果を取得して、ロードの結果をブロードキャストするために、データキャッシュおよび/またはメモリへのアクセスを実行し得る。結果が常にブロードキャストされる実施形態では、この追加の状態ビットが、投機的なリンクが誤っていたことを通知してもよい。このため、多くの実施形態では、投機的なリンクが正しくないことを通知するために、プロセッサに既に設けられている同じタグバスと結果バスが使用され得る。別の実施形態では、代替の指標メカニズムが実施されてもよい(例えば、別の結果バス130および/または結果タグバス520を使用して予測ミスを通知する)。
図9は、投機的なオペランドソースと非投機的なオペランドソースの両方を有するオペレーションを発行および再発行するための方法の一実施形態のフローチャートである。ステップ801〜803に示すように、あるオペレーションの投機的なオペランドソースが利用可能な場合、そのオペレーションが発行され得る。データ値がレジスタファイル内の特定のレジスタに存在するか、またはデータ値が結果バスに出力されている場合には、オペレーションの投機的なオペランドソースが利用可能であるとされ得る。場合によっては、同じオペランドについて、オペレーションの非投機的なオペランドソースが、投機的なオペランドソースよりも先に利用可能となることがある点に留意されたい。このような状況では、投機的なオペランドソースが利用可能になる前にオペレーションが発行され得る。一部実施形態では、投機的なソースが後から利用可能となっても、オペレーションが再発行されなくてもよい。
ステップ805に示すように、発行されたオペレーションが、投機的なオペランドソースが提供するデータ値を使用して実行され、807に示すように、このオペレーションの結果がブロードキャストされ得る。オペレーションの結果がブロードキャストされると、依存関係のあるオペレーションが実行できるようになる。
その少し後、投機的なソースが正しくないと判定された場合(例えば、投機的なソースが提供するデータ値と非投機的なソースが提供するデータ値とが一致しないか、あるいは投機的なソースのタグの生成に使用した投機的なリンクが正しくない場合)、非投機的なソースのタグが、投機的なソースの値が正しくないことを知らせる指標としてブロードキャストされ得る。非投機的なソースのタグをブロードキャストする際には、スケジューラが、オペレーションを再発行することで応答できるように、タグがブロードキャストされる。例えば、一部実施形態では、タグがブロードキャストされており、このタグに関連付けられている状態フラグが特定の値にセットされている場合に、スケジューラが応答してもよく、別の実施形態では、関連する状態フラグを使用せず、スケジューラは、非投機的なタグがブロードキャストされる度にオペレーションを再発行するように構成されていてもよい。
ソースが投機的であるか非投機的であるかに基づく発行の準備状態の判定
図10に示すような一部実施形態では、スケジューラ118は、オペランドの投機的なソースが利用可能であること、またはオペランドの非投機的なソースが利用可能であることの一方(同時にこの両者ではない)によって示される、特定のオペランドの準備状態(readiness)を判定するように構成され得る。これにより、結果タグバス520に対する潜在的に有害なロードの影響(loading effect)を低減できる可能性がある。
図10において、スケジューラは、比較器534を使用して、マルチプレクサ532によって選択される、オペランドの投機的なソースのタグ514かオペランドの非投機的なソースのタグ512の一方を、結果タグバス520に現在出力されているタグと比較することによって、オペレーションのオペランドの準備状態を判定する。このため、スケジューラは、結果タグバス520で投機的なソースが利用可能であること、または非投機的なソースが利用可能であることの一方(この両者ではない)を監視することによって、オペレーションが発行の準備が整っているかどうかを判定し得る。このように、スケジューラは、結果タグバスにブロードキャストされているそれぞれの結果タグを、オペランドの投機的なソースのタグとオペランドの非投機的なソースのタグの両方と比較する代わりに、ブロードキャストされている結果タグをオペランドのソースタグの一方と比較するだけで済む。オペレーションの全オペランドが(投機的なソースか非投機的なソースの一方から)利用可能な場合、そのオペレーションのレディフラグ508がセットされ、オペレーションの発行の準備が整っていることが示され得る。
誤投機検出論理回路530は、スケジューラが、オペレーションの投機的なソースか非投機的なソースの一方に基づいて、オペレーションの発行の準備が整っていることを判定するかどうかを制御し得る。一部実施形態では、各オペレーションが、結果バス520上で、投機的なソースか非投機的なソースの一方を個々に監視することができるように、誤投機検出論理回路530は、スケジューラ内の未処理のオペレーションの各々に対して重複して設けられ得る。別の実施形態では、全オペレーションが投機的なソース(利用可能な場合)を監視中か、あるいは全オペレーションが非投機的なソースを監視中となるように、未処理の全オペレーションが同様に制御され得る。
誤投機検出論理回路530は、誤った投機が検出されていない間は、スケジューラが、オペレーションが発行の準備が整っているかどうかを、その投機的なソースが利用可能であることに基づいて判定するように、スケジューラ118の挙動を制御するように構成され得る。誤った投機が検出されると、誤投機検出論理回路530は、非投機的なソースの準備状態を監視するように「切り替わり(flip)」得る。例えば、ロードストアユニット126が、アドレスまたは値の比較により正しくないリンクを検出した場合、誤投機論理回路530は、非投機的なソースを使用して、オペレーションの発行の準備状態を判定するように切り替わり得る。また、正しくないリンクが検出されると、メモリファイル132の全部または一部、あるいは投機の他のソースが無効にされ得る。誤投機検出論理回路530は、投機のソースが再設定されるか、あるいは別の方法によって誤った投機が是正されるまで、投機的なソースの代わりに非投機的なソースを監視し続け得る。
誤投機検出論理回路530が、非投機的なソースが利用可能であることの監視から、投機的なソースが利用可能であることの監視に「切り替え」たときに、スケジューラ118が、非投機的なソースが利用可能であるかどうかに関する情報を持っていない可能性がある。一部実施形態では、スケジューラ118は、非投機的なソースが全て利用可能であり、このためオペレーションは発行の準備が整っていると仮定し得る。この仮定が正しくない場合、非投機的なソースが実際に利用可能になったとき(例えば、非投機的なソースのタグが、結果タグバス520にブロードキャストされていることが検出された場合など)に、オペレーションが再発行され得る。
投機レジスタマップ
図11は、プロセッサ100に備えられ得るディスパッチユニット104の別の実施形態を示す。この実施形態では、ディスパッチユニット104は、レジスタマップ134、メモリファイル132、および投機レジスタマップ800を備える。レジスタマップ134と同様に、投機レジスタマップ800は、論理レジスタ名を物理レジスタ名に変換し得る。しかし、投機レジスタマップ800は、(メモリファイル132が、物理レジスタに記憶されている値をロードオペレーションの投機的な結果にリンクした場合など)、論理レジスタ名を物理レジスタ名に投機的にマップし得る。投機レジスタマップ800によって、アドレス指定パターンを含まないオペレーションの投機的なオペランド値を、レジスタのデータ値にリンクできるようになり得る。例えば、論理レジスタEAXについて有効な投機マップが存在する場合、ソースオペランドとしてEAXを有するオペレーションは、レジスタマップ134が提供する非投機的なタグと、投機レジスタマップ800が提供する投機的なタグの2つのソースタグを有し得る。投機的なソースが利用可能になると直ちにオペレーションが発行できるため、投機レジスタマップ800は、介入するロードおよびストアをすべて迂回して、投機的なオペランドのタグを介して、データの使用先をデータの作成元に直接連結し得る。一部実施形態(投機的なレジスタ状態を記憶するための記憶領域を備えたリオーダバッファを有する実施形態など)では、投機マップが、物理レジスタ名以外のタグを記憶してもよい点に留意されたい。
投機レジスタマップ800は、投機レジスタマップコントローラ802と投機レジスタマップ記憶部804を備える。投機レジスタマップ記憶部は、1つ以上のエントリ820を有し得る。各エントリ820は、特定の論理レジスタと関連付けられており、その論理レジスタが現在投機的にマップされている物理レジスタの物理レジスタ識別子812を示し得る。また、各投機レジスタマップエントリ820は、そのエントリが現在有効かどうかを示す指標(図示せず)も有し得る。一実施形態では、投機レジスタマップ記憶部804は、論理レジスタ毎に1つのエントリを有し得る。別の実施形態では、投機レジスタマップ804は、論理レジスタの個数よりも少ない数のエントリを有し得る。このような実施形態では、各エントリ820は、現在そのエントリに対応している論理レジスタを示す指標を有し得る。
投機レジスタマップコントローラ802は、ロードオペレーションの投機的な結果が、特定の物理レジスタ名によって識別されるデータ値にリンクされたという指標を受けて、エントリ820を更新するように構成され得る。例示した実施形態では、この指標はメモリファイル132から提供される。更新対象となるエントリ820は、ロードオペレーションのデスティネーションとして指定されている論理レジスタに対応するエントリである。このエントリは、当該ロードオペレーションに対してメモリファイル132が出力する物理レジスタ識別子を有するように更新され得る。別の実施形態では、投機レジスタマップのエントリは、メモリファイル132が提供する以外の指標を受けて作成され得る(これらの実施形態の一部では、ディスパッチユニット104がメモリファイルを備えていなくてもよい)。例えば、ディスパッチユニット104は、条件付きの転送命令“CMOV EAX, EBX if Z”を検出し、これに対して、EAXの投機レジスタマップのエントリが、現在EBXにマップされている物理レジスタを識別すべきことを示し得る。一般に、投機レジスタマップエントリは、論理レジスタが特定の物理レジスタに投機的にマップされるべきことを示す任意の予測機構に応えて作成され得る。
一部実施形態では、オペレーションがレジスタマップ134に提供されるサイクル中に、投機レジスタマップ800にもオペレーションが提供され得る。レジスタマップ134が、オペレーションに対し非投機的なレジスタリネーミングを実行すると、投機レジスタマップ800は、そのオペレーションの投機的なソースオペランドの1つを記憶していると示される論理レジスタのいずれかが、特定の物理レジスタにリンクされているかどうかを通知し得る。そのオペレーションの論理レジスタソースのうちの1つに対応する有効なエントリが、投機レジスタマップ記憶部804に存在する場合、投機レジスタマップコントローラ802は、その論理レジスタのエントリに記憶されている物理レジスタ名を出力し得る。オペレーションがスケジューラ118にディスパッチされるときに、ディスパッチユニット104は、この投機的な物理レジスタ名を投機的なソースとして出力し得る。このため、ADDオペレーションが投機レジスタマップ800に提供され、ADDオペレーションのソースのうちの1つに対応する有効なエントリが投機レジスタマップ記憶部804に存在する場合、そのエントリにおいて識別される物理レジスタのタグが、投機的なソースオペランドのタグとしてスケジューラ118に提供され得る。前述のように、スケジューラは、投機的なオペランドのタグと非投機的なオペランドのタグの両方を記憶するように構成され得、一部実施形態では、結果バスに非投機的なタグがブロードキャストされると、オペレーションを(発行済みの場合に)再発行するように構成され得る。
特定の論理レジスタのデータ値が変更されたことを示す指標を受けると、投機マップ内のエントリが無効にされ得る。例えば、オペレーション“ADD EAX, ECX”がディスパッチユニット104によって処理されると、ADDオペレーションによってEAXレジスタの値が変更されるため、投機レジスタマップコントローラ802は、EAXに現在割り当てられている投機マップエントリを無効にし得る。
一般に、1つのオペレーションの投機的な結果がレジスタのデータ値にリンクされる度に、投機的なオペランドのタグがスケジューラ118に提供され得る。一部実施形態では、投機的な結果をレジスタ値にリンクするために、メモリファイル132および数サイクルにわたって依存性を追跡する他の構造(後述するように投機レジスタマップなど)が使用され得る。例えば、ディスパッチユニット104は、メモリファイル132がリンクを識別すると、オペレーションに対する投機的なタグを生成し得る。一部実施形態では、このような投機マップを使用せずに投機的なタグが生成され得る。例えば、命令のシーケンスに以下が含まれるとする。
ADD EBX, EBX (ADD1)
MOV [アドレス指定パターンA], EBX (STORE1)
ADD [アドレス指定パターンA], ECX (ADD2)
これらの命令は、連続する命令であり得る(例えば、これらの命令は、プログラムの順序内で連続的に実行され得る)。これらの命令は、実行コア124内での実行のため、以下の構成要素オペレーション(物理アドレスに変換した論理アドレスで示す)に分離され得る。
ADD PR2, PR2, PR1 (ADD1)
MOV [アドレス指定パターンA], PR2 (STORE1)
MOV PR3, [アドレス指定パターンA] (ADD2のロード)
ADD PR4, PR3, PR5 (ADD2の加算)
MOV [アドレス指定パターン], PR4 (ADD2のストア)
ディスパッチユニット104は、ADD2の構成要素オペレーションであるロード、加算およびストアの各オペレーションをディスパッチする前に、このシーケンス内の構成要素オペレーション間に、投機的な結果にリンクできるようにする依存性が存在するかどうかを検出し得る。さらに、STORE1によってストアされるデータは、ロードの投機的な結果に(例えば、メモリファイルによって)リンクすることができる。介入オペレーションが存在しないため、ディスパッチユニットは、ロードオペレーションと加算オペレーション(いずれのオペレーションも同じ命令に由来する)の間の同じディスパッチサイクルにおける依存性を検出するために必要な情報をすべて有し得る。ディスパッチユニット104は、この2つの依存性に基づいて、STORE1によってストアされるデータのタグ(PR2)を、ADD2の一部として実行されるロードオペレーションの投機的な結果にリンクし得る。ディスパッチユニットは、今度はこの投機的なリンクによって、ADD2の一部として実行される加算オペレーションのソースを、PR2に記憶されている値にリンクすることができる。このため、ディスパッチユニット104は、PR2が加算のオペランドのうちの1つのソースとして投機的に使用できるが、PR3はこのオペランドの非投機的なソースであることを示す指標を出力し得る。このため、一実施形態では、ディスパッチユニットが出力するオペレーションとオペランド識別子は、以下のように指定され得る。
ADD PR2, PR2, PR1 (ADD1)
MOV [アドレス指定パターンA], PR2 (STORE1)
MOV PR3, [アドレス指定パターンA] (ADD2のロード)
ADD PR4, PR2, PR3, PR5 (ADD2の加算であり、PR2はECXの投機的なソースであり、PR3はECXの非投機的なソースである)
MOV [アドレス指定パターン], PR4 (ADD2のストア)
別の実施形態では、ディスパッチユニット104は、ロードオペレーションに依存するオペレーションについて、投機的なソースオペランドを識別するようには構成されていなくてもよい。その代わりに、ディスパッチユニット104は、図12に示すように、依存関係のあるオペレーションに投機的なロード結果を提供するために、ロードオペレーションを、レジスタ間移動オペレーションを含む1つ以上のオペレーションに変換するように構成されたオペレーションコンバータ180を備え得る。ロードオペレーションの変換は、ロードオペレーションの投機的な結果と、特定の物理レジスタ名によって識別されるデータ値との間にリンクが存在することを示す指標を受けて実行され得る。この指標はリンク検出器182によって提供され、一部実施形態では、このリンク検出器182はメモリファイル132を有し得る。別の実施形態では、リンク検出器182は、前述のように、条件付きの移動オペレーションなどのオペレーションを受けて、データ値をリンクするように構成された論理回路を有してもよい。
一実施形態では、オペレーションコンバータは、オペレーションの入力オペコードのほか、そのオペレーションについて、レジスタ値と、そのオペレーションの投機的な結果との間にリンクが検出されているかどうかを知らせる指標を受信し得る。オペレーションがロードであり、投機的なリンクが検出されている場合、オペレーションコンバータは、レジスタ間移動オペレーションのオペコードを出力し得る。ディスパッチユニット104は、レジスタ間移動オペレーションをディスパッチし、その際、リンク検出ユニットが出力するタグを、レジスタ間移動のソースオペランドのタグとして使用し得る。
一部実施形態では、オペレーションコンバータは、レジスタ間移動をディスパッチするように構成され得、この結果、スケジューラが得られたレジスタ間移動オペレーションに必要なオペランドのタグと、そのレジスタ間移動に割り当てられたエントリにある変更前のロードオペレーションに必要なオペランドのタグの両方を記憶するようになる。これによって、レジスタ間移動オペレーションの投機的な結果が正しくなかったことが検出された場合に、このオペレーションを変更前のロードオペレーションとして再発行できるようになる。これを実施するために、ロードオペレーションを変更して得られる各レジスタ間移動オペレーションに、付加的なソースオペランドが追加され得る(あるいは、別の実施形態では、これを実施するために既存のソースオペランドが変更され得る)。一部実施形態では、変更前のロードのアドレス計算を実行するか、リンクされているデータ値と実際のロード結果のデータ値とを比較するか、この両方を実行することで、レジスタ間移動オペレーションの投機的な結果が検証され得る。投機的な結果が正しくない場合、ロードの正しい結果を取得するために、データキャッシュがアクセスされ得る。ロードの正しい結果が再ブロードキャストされて、これにより、スケジューラは、間違った値を使用して実行された依存関係のある全てのオペレーションを再発行し得る。
一部実施形態では、オペレーションコンバータ180は、ロードオペレーションを二重(dual-nature)オペレーションに変換するように構成され得る。ロードオペレーションと同様に、この二重オペレーションでは、アドレス計算とデータの移動が実行され得る。ロードとは異なり、二重オペレーションが開始するデータの転送は、レジスタ間移動である。さらに、二重オペレーションが開始するデータの移動は、アドレス計算の完了前に行われ得る。このアドレス計算は、投機的なリンクが正しかったかどうかの検証に使用され得る。投機的なリンクが誤っていた場合、二重オペレーションは通常のロードオペレーションとして再発行されて、データキャッシュへのアクセスの完了後、その結果が、依存しているオペレーションに再ブロードキャストされ得る。
以下の例では、この例示的なオペレーションのシーケンスを変換する各種実施形態を示す。
ADD PR2, PR1, PR1 (ADD1)

STORE [アドレス指定パターンA], PR2 (STORE1)

LOAD PR3, [アドレス指定パターンA] (LOAD1)

ADD PR4, PR3, PR3 (ADD2)
このシーケンスでは、指定されたオペレーションが1つ以上の介入オペレーションによって分けられる可能性がある。しかし、介入オペレーションによって、アドレス指定パターンAで使用されている値が変更されたり、アドレス指定パターンAから計算されたアドレスに記憶されているデータ値とPR2に記憶されているデータ値が変更されることがないとすると、PR2に記憶されているデータ値とアドレス指定パターンAから算出されたアドレスに記憶されているデータ値との間に投機的なリンクが検出され得る。
一実施形態では、投機的リンク検出器182がこの投機的なリンクを検出すると、オペレーションコンバータ180は、LOAD1を、二重移動オペレーション“MOV PR3, PR2”に変換し得る。この二重移動オペレーションは、レジスタのソースおよびデスティネーションを指定しているほか、LOAD1のアドレス計算を実行できるように、アドレス指定パターンAも指定し得る。しかし、ECXが利用可能になると直ちに、二重移動オペレーションの移動部分が発行され得る。二重オペレーションの移動部分の結果がブロードキャストされるとすぐに、ADD2が、この移動オペレーションの投機的な結果をオペランドとして使用して発行され得る。アドレス計算が実行されると、投機的なリンクが検証され得る。投機的なリンクが正しくない場合、ロード/ストアユニットは、二重移動オペレーションをロードオペレーションとして再発行するようにスケジューラに指示する指標を、スケジューラに提供し得る。ロードオペレーションの結果がブロードキャストされると、ADD2など、移動の投機的な結果を使用して実行された依存関係のあるすべてのオペレーションが再発行され得る。この二重オペレーションはスケジューラの1つのエントリを占有してスケジュールされ得るという点と、スケジューラ118が、二重オペレーションを2度(ロードのアドレス計算で1度、レジスタ間移動で1度)発行するように選択し得るという点に留意されたい。
別の実施形態では、オペレーションコンバータ180は、投機的なリンクを検出すると、LOAD1を、“LOAD PR3, [アドレス指定パターンA]”と“MOV PR3, PR2”の2つのリンクされたオペレーションに変換し得る。二重オペレーションを使用する前述の例とは異なり、これらのリンクされたオペレーションは、スケジューラの1つのエントリを共有するのではなく、それぞれがスケジューラ118のエントリを占有し得る。このレジスタ間移動オペレーションが発行されると、ADD2などの依存関係のあるオペレーションが、PR3の投機的な値をオペランド値として使用して発行され得る。このLOADオペレーションは、投機的なリンクが正しいと判定された場合に、ロード結果のタグがブロードキャストされないよう、特別な種類のロードオペレーションとしてタグ付けされ得る(または、移動の結果が正しく、依存関係のあるオペレーションの再発行が不要であることを知らせる指標を付けてブロードキャストされるようになる)。また、ロードオペレーションと移動オペレーションの両方が同じサイクルでそれぞれの結果をブロードキャストした場合、移動の結果ではなくロードの結果が、依存しているオペレーションで使用されるようにする指標が提供され得る。一部実施形態では、このために、スケジューラが応答すべきタグを示す余分のビットが、プロセッサ100内の各タグバスに追加され得る。投機的なリンクが正しくない(例えば、このことがロード結果のタグのブロードキャストによって示される)場合、移動オペレーションがキャンセルされ得る(例えば、この移動オペレーションをスケジュールするスケジューラ118は、このレジスタ間移動を再発行できないように、このオペレーションに現在割り当てられているスケジューラのエントリの割り当てを解除し得る)。多くの実施形態では、スケジューラは、ロード結果のタグが結果バスに再送信されると、投機的なロード結果を使用して実行された依存関係のあるすべてのオペレーションを再発行するように構成され得る。
一実施形態では、特定のタグが識別するレジスタのデータ値と、ロードオペレーションの投機的な結果との間に(例えば、メモリファイルによる)リンクが検出された場合、ロードオペレーションが、レジスタ間移動オペレーションを含み、ソースオペランドのタグが、投機的なロード結果にリンクされているデータ値のタグと等しくなるように変更される。レジスタ間移動オペレーションが実行されて、その際、ロードの結果のタグと共に、そのタグが識別するデータ値が結果バスに出力され得る。
(元のロードのアドレス計算を実行するなどにより)投機的な結果が検証され得る。投機的な結果が正しい場合、ロードの結果が結果バスに再ブロードキャストされることはない(あるいは、別の実施形態では、ロードの結果と共に、結果が再ブロードキャストされても依存関係のあるオペレーションの再発行が不要であることを知らせる指標が再ブロードキャストされ得る)。投機的な結果が正しくない場合、データキャッシュにアクセスしてロードの正しい結果が取得され、ロードの正しい結果が結果バスにブロードキャストされ得る。これにより、投機的な結果値を使用して発行された依存関係のあるすべてのオペレーションが再発行され得る。場合によっては、投機的な結果が検証されてから、レジスタ間移動オペレーションが実行されてもよい点に留意されたい。投機的な結果が正しくない場合、レジスタ間移動オペレーションは実行されなくてもよい。
ロードオペレーションの投機的な結果とレジスタのデータ値との間にリンクが検出されない(例えばロードのアドレス指定パターンがメモリファイルでヒットしない場合)、ロードを変更することができない。ロードは、通常通り実行され、データキャッシュがアクセスされて、その結果が結果バスにブロードキャストされ得る。
タグのカラー指定
場合によっては、メモリファイル132が、ロードオペレーションの投機的な結果を、特定の論理レジスタ内の値にリンクすることがある。場合によっては、その論理レジスタが上書きされることがあり、レジスタマップによってその論理レジスタに割り当てられていた物理レジスタが、フリーリスト(割当可能な空き物理レジスタのリスト)に戻される。その後、その物理レジスタが、別の値を記憶するために再割り当てされ得る。物理レジスタがフリーリストに戻されるか、物理レジスタが再割り当てされるか、この両方が行われても、その物理レジスタを指定しているメモリファイルのエントリは変更されない。このため、その後、メモリファイル132によってリンクが作成されても、物理レジスタの再割当が考慮されないことになる。例えば、次の命令のシーケンスを考える。
MOV [EBP+50], EAX
XOR EAX, EAX
MOV EBX, [EBP+50]
このシーケンスに対して、メモリファイル132は、最初のストアオペレーションを受けて、アドレス指定パターン“EBP+50”と、EAXに割り当てられた物理レジスタにエントリを割り当て得る。EAXがXOR演算によって上書きされると、EAXの現在の値は、メモリファイル132内のアドレス指定パターンにリンクされている値にもはや対応しなくなる。しかし、メモリファイル132は、後続のロードオペレーションのアドレス指定パターンと先のストアのアドレス指定パターンが一致することに基づいて、このロードの投機的な結果を古い値にリンクし得る。
一部実施形態では、レジスタファイル116内の各物理レジスタに、カラーが割り当てられ得る。このカラーは、各レジスタのタグと関連付けられ得、レジスタのタグと共に、プロセッサ全体に伝達され得る。本明細書中で使用されるように、「カラー」とは、レジスタが再割り当てされたかどうかを示す1ビット以上の情報である。一実施形態では、カラーは1ビットであって、レジスタがフリーリストに戻るか、フリーリストから取り出される度にトグルされ得る。あるレジスタのタグを指定しているエントリが、メモリファイル内に割り当てられている場合、メモリファイルは、割り当てられたエントリ中に、そのレジスタに関連付けられたカラーも記憶し得る。同様に、図13に示すように、投機レジスタマップは、各タグのカラー814を記憶し得る。カラーは、レジスタマップ134およびスケジューラ118内に、タグと共に記憶されてもよい。レジスタのタグが結果バス520に出力されると、そのタグに関連付けられているカラーも結果バス520に出力され得る。
例えば、カラーが最初は‘0’である物理レジスタを考える。この物理レジスタは、カラーが0であり、レジスタマップ134によって特定の論理レジスタに割り当てられ得る。さらに、この物理レジスタは、カラーが0であり、投機レジスタマップ800の論理レジスタに割り当てられ得る。投機レジスタマップ800のエントリが割り当てられた後、ある時点で、この物理レジスタがフリーリストに戻され、その後、再割当のために選択され得る。物理レジスタがフリーリストから取り出されると、そのカラーが‘1’に更新され得る。レジスタのカラーが更新された後、ある時点で、投機レジスタマップ800が、このレジスタが再割り当てされる前に割り当てられたエントリに基づいて、レジスタのタグとカラー‘0’により、オペレーションの投機的なソースを特定し得る。投機的なソースを識別するこの情報はスケジューラ118に記憶され得る。このオペレーションが発行される前に、別のオペレーションがそのレジスタの新しい値を生成し、タグと現在のカラー‘1’が結果バス520にブロードキャストされ得る。スケジューラ118は、レジスタのタグに関連付けられている現在のカラー‘1’と、投機レジスタマップエントリのレジスタのタグに関連付けられているカラー‘0’とを比較することによって、タグがもはや同じ値を識別していないと判定し得る。一部実施形態では、スケジューラ118はこの状態を誤った投機として扱い、図10を参照して上述したように、そのオペランドについて非投機的なソースの監視に切り替え得る。この切り替えは、カラーの不一致が検出された特定のオペレーションのみに限られ得る(スケジューラ内の未処理のオペレーションの全てが切り替えられる訳ではない)。
一般に、物理レジスタ再割当の管理の問題を生じさせずに、依存関係グラフからレジスタ間移動オペレーションを除去することは困難である。例えば、2つの論理レジスタの番号が同じ物理レジスタ番号を参照するように、レジスタマップ134を更新することによって、レジスタ間の移動を実装している場合、その物理レジスタ番号によって識別される物理レジスタがフリーリストに戻されるべき時点を特定するのは困難となり得る。レジスタのカラー指定は、このようなシステムに代えて用いることができる。
一部実施形態では、投機レジスタマップ800を使用することで、レジスタ間の移動の性能を最適化する際に、レジスタのカラー指定を用いることができる。例えば、投機レジスタマップ800を使用して、依存関係グラフからレジスタ間移動オペレーションを除去することができる(すなわち、レジスタ間移動オペレーションの結果に依存するオペレーションは、移動のソースが既に利用可能である場合には、その移動オペレーションの実行を待つ必要がなくなる)。投機レジスタマップ800は、レジスタ間移動オペレーションが検出される度に、その移動オペレーションで指定されているソースおよびデスティネーションのレジスタをリンクしているエントリを割り当て得る。各物理レジスタのカラーは、作成された投機レジスタマップ800のエントリに記憶され得る。このシステムでは、複数の論理レジスタが同じ物理レジスタに関連付けられるように、レジスタマップ134が更新されるシステムで発生する問題を招くことなく、物理レジスタを正常に再割り当てすることができる。カラー指定を用いているシステムにおいて物理レジスタが再割り当てされた際に、物理レジスタが現在割り当てられている特定の値を、その物理レジスタを識別している各タグに関連付けられているカラーによって、その物理レジスタが再割り当てされる前に同じ物理レジスタに割り当てられていた他の値と区別できる。
投機レジスタマップ800は、整数レジスタと浮動小数点レジスタの両方を扱うように構成することができ、これにより、投機レジスタマップが、依存関係グラフから浮動小数点レジスタ間移動操作を除去できるようになる。これにより、非常にレーテンシの大きなFXCH(スタックの所定の要素と、現在スタックの最上位にある要素を交換する)などのオペレーションを、依存関係グラフから除去することが可能となる。投機レジスタマップ800を使用することで、レジスタ間の移動を依存関係グラフから除去できるものの、レジスタ間の移動は実行されることがある点に留意されたい。
例示的なコンピュータシステム
図14は、バスブリッジ402を介して各種のシステムコンポーネントに結合されているプロセッサ100を備えたコンピュータシステム400の一実施形態のブロック図を示す。プロセッサ100は、前述のようにディスパッチユニット104、メモリファイル132、スケジューラ118および/または投機レジスタマップ800の一実施形態を備え得る。コンピュータシステムのこれ以外の実施形態も可能であり、考察される。図中のシステムにおいて、メインメモリ200は、メモリバス406を介してバスブリッジ402に結合され、グラフィックコントローラ408は、AGPバス410を介してバスブリッジ402に結合されている。PCIバス414を介して複数のPCIデバイス412A〜412Bがバスブリッジ402に結合されている。EISA/ISAバス420を介して1台以上のEISAデバイスまたはISAデバイス418を電気的に接続できるように、セカンダリバスブリッジ416を設けてもよい。この例では、プロセッサ100は、CPUバス424を介してバスブリッジ402に結合されているほか、任意選択で設けられるL2キャッシュ428にも結合されている。一部実施形態では、プロセッサ100は、一体化されたL1キャッシュ(図示せず)を備えていてもよい。
バスブリッジ402は、プロセッサ100、メインメモリ404、グラフィックコントローラ408、およびPCIバス414に取付けられたデバイス間にインタフェースを提供する。バスブリッジ402に接続されたデバイスのうちの1台からオペレーション(operation)を受信すると、バスブリッジ402は、このオペレーションのターゲット(例えば、特定のデバイスか、ターゲットがPCIバス414に接続している場合はPCIバス414)を識別する。バスブリッジ402は、このオペレーションをターゲットのデバイスに転送する。バスブリッジ402は通常、ソースのデバイスまたはバスによって用いられるプロトコルからターゲットのデバイスまたはバスによって用いられるプロトコルにオペレーションを変換する。
セカンダリバスブリッジ416は、PCIバス414に対するインタフェースをISA/EISAバスに提供すると共に、追加の機能も有していてもよい。また、必要に応じて、セカンダリバスブリッジ416の外部に設けたか、セカンダリバスブリッジ416に内蔵した入出力コントローラ(図示せず)をコンピュータシステム400に設けて、キーボードおよびマウス422、ならび各種シリアルポートおよびパラレルポートの動作をサポートしてもよい。別の実施形態においては、プロセッサ100とバスブリッジ402の間のCPUバス424に、外部キャッシュユニット(図示せず)を結合してもよい。別法として、外部キャッシュをバスブリッジ402に結合してもよく、この外部キャッシュのためのキャッシュ制御論理回路をバスブリッジ402に搭載してもよい。L2キャッシュ428は、プロセッサ100のバックサイド構成(backside configuration)として図示されている。L2キャッシュ428は、プロセッサ100から独立していても、プロセッサ100にカートリッジ(例えば、スロット1またはスロットA)と統合されていても、プロセッサ100と共に半導体基板に搭載されていてもよいという点に留意されたい。
メインメモリ200は、アプリケーションプログラムのストア先であると共に、プロセッサ100の主な実行元のメモリである。適切なメインメモリ200は、DRAM(ダイナミックランダムアクセスメモリ)を有する。例えば、複数バンク構成のSDRAM(シンクロナスDRAM)のまたはラムバスDRAM(RDRAM)が適切であり得る。
PCIデバイス412Aおよび412Bの例に、ネットワークインタフェースカード、ビデオアクセラレータ、オーディオカード、ハードディスクもしくはフロッピーディスクドライブまたはドライブコントローラ、SCSI(Small Computer Systems Interface)アダプタ、およびテレフォニーカードなどの様々な周辺機器がある。同様に、ISAデバイス418の例には、モデム、サウンドカード等の様々なタイプの周辺機器のほか、種々のデータ取得カード(GPIBインタフェースカードまたはフィールドバスインタフェースカード等)などがある。
グラフィックコントローラ408は、ディスプレイ426への文字および画像の表示を制御するために設けられる。グラフィックコントローラ408は、メインメモリ200の内外へ効果的に移動できる3次元データ構造をレンダリングする、当該技術分野では一般的に知られた代表的なグラフィックアクセラレータを具体化していてもよい。したがって、グラフィックコントローラ408は、バスブリッジ402内のターゲットインタフェースへのアクセスを要求すると共に受取り、これによりメインメモリ200へのアクセスを取得可能であるという点で、AGPバス410のマスタであり得る。専用のグラフィックバスによって、メインメモリ404から高速にデータを取得することが可能となる。グラフィックコントローラ408は、特定のオペレーションのために、AGPバス410上でPCIプロトコルトランザクションを生成するようにさらに構成され得る。このため、バスブリッジ402のAGPインタフェースは、AGPプロトコルのトランザクションと、PCIプロトコルのターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を備え得る。ディスプレイ426は、画像または文字を表現可能な任意の電子ディスプレイである。適切なディスプレイ426には、陰極線管(「CRT」)ディスプレイや液晶ディスプレイ(「LCD」)などがある。
上記の説明においてAGPバス、PCIバス、およびISAバスまたはEISAバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点に留意されたい。さらに、コンピュータシステム400は、追加のプロセッサ(コンピュータシステム400の追加の構成要素として示したプロセッサ100aなど)を備えたマルチプロセッシングコンピュータシステムであってもよいという点に留意されたい。プロセッサ100aはプロセッサ100と類似のものであってもよい。より詳細には、プロセッサ100aは、プロセッサ100と全く同一であってもよい。プロセッサ100aは、(図14に示すように)独立したバスを介してバスブリッジ402に結合されていても、プロセッサ100との間でCPUバス224を共用してもよい。さらに、プロセッサ100aは、L2キャッシュ428と類似した追加のL2キャッシュ428aと結合されてもよい。
図15を参照すると、前述のディスパッチユニット104、メモリファイル132、スケジューラ118および/または投機レジスタマップ800を備え得るコンピュータシステム400の別の実施形態が示される。他の実施形態も可能であり、考察される。図15の実施形態では、コンピュータシステム400は、複数の処理ノード612A,612B,612C,612Dを備える。各処理ノードは、処理ノード612A〜612Dにそれぞれ設けられているメモリコントローラ616A〜616Dを介して各々のメモリ614A〜614Dに結合されている。さらに、処理ノード612A〜612Dは、処理ノード612A〜612D間の通信に使用するインタフェースロジックを備える。例えば、処理ノード612Aは、処理ノード612Bと通信するためのインタフェースロジック618Aと、処理ノード612Cと通信するためのインタフェースロジック618Bと、さらに別の処理ノード(図示せず)と通信するための第3のインタフェースロジック618Cとを備える。同様に、処理ノード612Bは、インタフェースロジック618D,618E,618Fを備え、処理ノード612Cは、インタフェースロジック618G,618H,618Iを備え、処理ノード612Dは、インタフェースロジック618J,618K,618Lを備える。処理ノード612Dは、インタフェースロジック618Lを介して複数の入出力デバイス(例えばデイジーチェーン構成のデバイス620A〜620B)と通信するように結合される。その他の処理ノードも、同様にその他のI/Oデバイスと通信してもよい。
処理ノード612A〜612Dは、処理ノード間で通信を行うためにパケットベースのリンクを実施している。この実施形態では、このリンクは、一方向のラインの組として実施されてもよい(例えば、ライン624Aは、処理ノード612Aから処理ノード612Bにパケットを送信するために使用され、ライン624Bは、処理ノード612Bから処理ノード612Aにパケットを送信するために使用される)。ラインのその他の組624C〜624Hは、図15に示すように、その他の処理ノード間でパケットを送信するために使用される。一般に、ラインの各組624は、1本以上のデータラインと、このデータラインに対応する1本以上のクロックラインと、伝達するパケットの種類を示す1本以上の制御ラインとを含み得る。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとI/Oデバイス間の通信(あるいは、バスブリッジから、PCIバスまたはISAバスなどの従来の構成のI/Oバスへの通信)で非コヒーレントな方法で動作し得る。また、図に示すように、このリンクは、I/Oデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。1つのプロセッサから別のプロセッサに送信されるパケットが、1つ以上の中間ノードを通過し得る点に留意されたい。例えば、図15に示すように、処理ノード612Aによって処理ノード612Dに送信されるパケットは、処理ノード612Bか処理ノード612Cのいずれかを通過し得る。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム400の別の実施形態では、処理ノードの数が、図15に示した実施形態よりも上下してもよい。
一般に、パケットは、ノード間のライン624を伝わる1つ以上のビットタイミング(bit time)として送信され得る。ビットタイミングは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりであり得る。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどがあり得る。
処理ノード612A〜612Dは、メモリコントローラおよびインタフェースロジックに加えて、1つ以上のプロセッサを有していてもよい。概して、処理ノードは、少なくとも1つのプロセッサを備えており、必要に応じてメモリおよびその他の論理回路と通信するためのメモリコントローラを任意選択で備えていてもよい。より詳細には、各処理ノード612A〜612Dは、プロセッサ100のコピーを1つ以上備えていてもよい。外部インタフェースユニット18は、メモリコントローラ616のほかにノード内にインタフェースロジック618を備える。
メモリ614A〜614Dは任意の好適なメモリ素子を含んでいてもよい。例えば、メモリ614A〜614Dは、1つ以上のラムバスDRAM(RDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAMなどを含んでいてもよい。コンピュータシステム400のアドレス空間は、メモリ614A〜614Dに分割されている。各処理ノード612A〜612Dは、アドレスとメモリ614A〜614Dとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード614A〜614Dの決定に用いるメモリマップを備えていてもよい。一実施形態では、コンピュータシステム400内のアドレスのコヒーレンシポイント(coherency point)は、そのアドレスに対応しているバイトを記憶しているメモリに結合されたメモリコントローラ616A〜616Dである。換言すれば、メモリコントローラ616A〜616Dは、対応するメモリ614A〜614Dへのあらゆるメモリアクセスが、キャッシュコヒーレントな方法で行われることを保証する責任を負っている。メモリコントローラ616A〜616Dは、メモリ614A〜614Dとインタフェースするための制御回路を備え得る。さらに、メモリコントローラ616A〜616Dは、メモリ要求をキューに記憶するための要求キューを備えていてもよい。
インタフェースロジック618A〜618Lは、リンクからパケットを受信すると共に、リンクに送信するパケットをバッファするための各種バッファを備え得る。コンピュータシステム400は、パケットを送信するための任意の適切なフロー制御メカニズムを使用することができる。例えば、一実施形態では、各インタフェースロジック618は、そのインタフェースロジックに接続されているリンクの反対側にある受信装置内の各種バッファの数のカウントを記憶している。インタフェースロジックは、パケットを記憶するための空きバッファが受信側のインタフェースロジックになければ、パケットを送信しない。パケットを前方にルーティングしたことで受信側のバッファに空きが生ずると、受信側のインタフェースロジックは、バッファに空きが生じたことを知らせるメッセージを、送信側のインタフェースロジックに送信する。このようなメカニズムは、「クーポンベースの」システムと呼ぶことができる。
I/Oデバイス620A〜620Bは、適したI/Oデバイスであれば、どのようなものであってもよい。例えば、I/Oデバイス620A〜620Bは、別のコンピュータシステムに結合され、そのコンピュータシステムと通信するための装置(ネットワークインタフェースカードやモデムなど)を含んでいてもよい。また、I/Oデバイス620A〜620Bは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、SCSIアダプタ、テレフォニーカード、サウンドカード、およびGPIBインタフェースカードまたはフィールドバスインタフェースカードなどの様々なデータ収集カードを含んでいてもよい。本明細書において、「I/Oデバイス」との用語と「周辺機器」との用語は同義であるとされる点に留意されたい。
本明細書中で使用されるように、「クロックサイクル」または「サイクル」との用語は、命令処理パイプラインの各種ステージがタスクを完了する時間間隔を指す。クロックサイクルを定義しているクロック信号に従って、命令および計算値がメモリ素子(レジスタまたはアレイなど)によって取得される。例えば、メモリ素子が、クロック信号の立ち上がりまたは立ち下がりに従って値を取得し得る。
上記の開示を完全に理解できれば、当業者にとって数多くの変形例および変更例が明らかとなるであろう。添付の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
本発明は、一般に、プロセッサの分野に適用可能でありうる。
プロセッサの一実施形態を示す図である。 ディスパッチユニットの一実施形態のブロック図である。 一実施形態において使用され得る例示的なメモリファイル記憶部のエントリを示す図である。 ロードオペレーションの投機的な結果を、特定のタグが識別するデータ値にリンクする方法の一実施形態を示すフローチャートである。 一実施形態によるロードストアユニットのブロック図である。 別の実施形態によるロードストアユニットのブロック図である。 一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証する方法を示すフローチャートである。 一実施形態による、メモリオペレーションに関連するリンクが検証されたかどうかに基づいて、そのメモリオペレーションをリタイアさせる方法のフローチャートである。 一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証するように構成されたロードストアユニットのブロック図である。 一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを検証するように構成された実行コアのブロック図である。 一実施形態による、ロードオペレーションの投機的な結果と特定のタグによって識別されるデータ値とのリンクを、値比較によって検証する方法のフローチャートである。 スケジューラの一実施形態を示すブロック図である。 オペレーションを発行し、データ投機が誤っていたことを示す指標を受けてオペレーションを再発行する方法の一実施形態のフローチャートである。 一実施形態による、投機的なオペランドのソースと非投機的なオペランドのソースの一方に基づいて、オペレーションの発行の準備状態を選択的に判定するように構成されたスケジューラのブロック図である。 ディスパッチユニットの別の実施形態のブロック図である。 ディスパッチユニットのさらに別の実施形態のブロック図である。 一実施形態による、特定のオペランドのタグに関連付けられたカラーの指標を保持するように構成された投機レジスタマップを示す図である。 コンピュータシステムの一実施形態を示す図である。 コンピュータシステムの別の実施形態を示す図である。

Claims (10)

  1. 第1のアドレス指定パターン(206)および第1のタグ(208)を記憶するように構成されたエントリ(220)を含むメモリファイル(132)であって、前記メモリファイル(132)は、前記エントリ(220)に含まれる前記第1のアドレス指定パターン(206)を、ロードオペレーションの第2のアドレス指定パターン(206)と比較するように構成されており、前記メモリファイル(132)は、前記第2のアドレス指定パターン(206)が前記エントリ(220)に記憶されている前記第1のアドレス指定パターン(206)と一致する場合、前記第1のタグ(208)によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするように構成されているメモリファイル(132)と、
    前記メモリファイル(132)に結合され、前記ロードオペレーションに依存する第2のオペレーションを実行する際に、前記投機的な結果にアクセスするように構成された実行コア(124)と、
    前記メモリファイル(132)に結合され、1つ以上のアドレスの比較を実行することによって、前記第1のタグ(208)によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するように構成された機能ユニット(126)とを備えるシステム(100)。
  2. 前記機能ユニット(126)は、前記比較を実行し、かつ非投機的なストアからロードへの転送を実行するように構成されたストアからロードへの転送比較器(280)を有する請求項1記載のシステム(100)。
  3. 前記エントリ(220)は、前記エントリ(220)の割り当てを生じさせたロードオペレーションまたはストアオペレーションを識別する転送タグ(256)を記憶し、かつ前記第2のアドレス指定パターン(206)が、前記エントリ(220)に記憶されている前記第1のアドレス指定パターンと一致する場合、前記転送タグ(256)を出力するようにさらに構成されている請求項1記載のシステム(100)。
  4. 前記機能ユニット(126)は、前記転送タグ(256)を受け取るために結合されており、前記ロードオペレーションより先で、かつ前記ロードオペレーションのアドレスと一致するアドレスを有するオペレーションのうち最も後のものを選択し、前記転送タグ(256)を前記選択された最も後のオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されており、前記選択された最も後のオペレーションは、ロードオペレーションまたはストアオペレーションである請求項3記載のシステム(100)。
  5. 前記機能ユニット(126)は、前記転送タグ(256)を受け取るために結合されており、それぞれが前記ロードオペレーションより先で、かつそれぞれが前記ロードオペレーションのアドレスと一致するアドレスを有する最も後のロードオペレーションと最も後のストアオペレーションとを選択し、前記選択された最も後のロードオペレーションが前記選択された最も後のストアオペレーションよりもプログラムの順序において後であると判定して、前記転送タグ(256)を前記選択された最も後のロードオペレーションの識別タグと比較することによって、前記比較を実行するようにさらに構成されている請求項3記載のシステム(100)。
  6. 第1のアドレス指定パターン(206)および第1のタグ(208)を含むエントリ(220)を記憶するステップと、
    前記エントリ(220)の記憶の後に、前記エントリ(220)に含まれる前記第1のアドレス指定パターン(206)を、ロードオペレーションの第2のアドレス指定パターン(206)と比較するステップと、
    前記比較を受けて、前記第2のアドレス指定パターン(206)が前記エントリ(220)に記憶されている前記第1のアドレス指定パターン(206)と一致する場合、前記第1のタグ(208)によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするステップと、
    前記リンク後、前記ロードオペレーションに依存する第2のオペレーションを実行する際に、前記投機的な結果にアクセスするステップと、
    前記リンク後、1つ以上のアドレスの比較を実行することによって、前記第1のタグ(208)によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するステップとを有する方法。
  7. 前記エントリ(220)は、前記ロードオペレーションよりもプログラムの順序において先にくるストアオペレーションを受けて割り当てられており、前記方法は、前記タグによって識別される前記データ値が前記ロードオペレーションの前記投機的な結果にリンクされたことを受けて、前記ストアオペレーションに関連付けられているフラグ(269)をセットするステップをさらに有する請求項6記載の方法。
  8. 前記比較を実行することによって前記リンクが検証されるまで、前記ストアオペレーションに関連する情報を保持するステップをさらに有し、前記保持は、前記フラグ(269)のセットを受けて行われる請求項7記載の方法。
  9. 前記フラグ(269)のセットを受けて、前記ストアオペレーションを前記リンクが検証されるまでリタイアさせないステップをさらに有する請求項8記載の方法。
  10. 第1のアドレス指定パターン(206)および第1のタグ(208)を含むエントリ(220)を記憶するステップと、
    前記エントリ(220)の記憶の後に、前記エントリ(220)に含まれる前記第1のアドレス指定パターン(206)を、ロードオペレーションの第2のアドレス指定パターン(206)と比較するステップと、
    前記比較を受けて、前記第2のアドレス指定パターン(206)が前記エントリ(220)に記憶されている前記第1のアドレス指定パターン(206)と一致する場合、前記第1のタグ(208)によって識別されるデータ値を前記ロードオペレーションの投機的な結果にリンクするステップと、
    前記リンク後、前記ロードオペレーションに依存する第2のオペレーションを実行する際に、前記投機的な結果にアクセスするステップと、
    前記リンク後、前記ロードオペレーションの前記投機的な結果と実結果との比較を実行することによって、前記第1のタグ(208)によって識別される前記データ値と前記ロードオペレーションの前記投機的な結果との前記リンクを検証するステップとを有する方法。
JP2007511351A 2004-05-05 2004-12-17 ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 Pending JP2007536626A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/839,474 US7263600B2 (en) 2004-05-05 2004-05-05 System and method for validating a memory file that links speculative results of load operations to register values
PCT/US2004/042683 WO2005111794A1 (en) 2004-05-05 2004-12-17 System and method for validating a memory file that links speculative results of load operations to register values

Publications (2)

Publication Number Publication Date
JP2007536626A true JP2007536626A (ja) 2007-12-13
JP2007536626A5 JP2007536626A5 (ja) 2008-02-14

Family

ID=34959784

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007511351A Pending JP2007536626A (ja) 2004-05-05 2004-12-17 ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法

Country Status (7)

Country Link
US (1) US7263600B2 (ja)
JP (1) JP2007536626A (ja)
CN (1) CN100424635C (ja)
DE (1) DE112004002848B4 (ja)
GB (1) GB2429557B (ja)
TW (1) TWI362613B (ja)
WO (1) WO2005111794A1 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013515306A (ja) * 2009-12-22 2013-05-02 インターナショナル・ビジネス・マシーンズ・コーポレーション アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア・比較ハザードの予測及び回避
JP2014002735A (ja) * 2012-06-14 2014-01-09 Apple Inc ゼロサイクルロード
KR20190033084A (ko) * 2016-08-19 2019-03-28 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7571304B2 (en) * 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20080010440A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight stores in an out-of-order processor
US20080010441A1 (en) * 2006-07-05 2008-01-10 International Business Machines Corporation Means for supporting and tracking a large number of in-flight loads in an out-of-order processor
US7624253B2 (en) * 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
US20080162889A1 (en) * 2007-01-03 2008-07-03 International Business Machines Corporation Method and apparatus for implementing efficient data dependence tracking for multiprocessor architectures
US7689812B2 (en) * 2007-02-14 2010-03-30 International Business Machines Corporation Method and system for restoring register mapper states for an out-of-order microprocessor
US9069672B2 (en) * 2009-06-12 2015-06-30 Intel Corporation Extended fast memory access in a multiprocessor computer system
US8468325B2 (en) 2009-12-22 2013-06-18 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
US9135014B2 (en) * 2012-02-15 2015-09-15 Freescale Semiconductor, Inc Data processing system with latency tolerance execution
US10467010B2 (en) * 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US9436476B2 (en) 2013-03-15 2016-09-06 Soft Machines Inc. Method and apparatus for sorting elements in hardware structures
US10198265B2 (en) 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table
US9471480B2 (en) * 2013-12-02 2016-10-18 The Regents Of The University Of Michigan Data processing apparatus with memory rename table for mapping memory addresses to registers
GB2518022B (en) * 2014-01-17 2015-09-23 Imagination Tech Ltd Stack saved variable value prediction
GB2532232A (en) * 2014-11-12 2016-05-18 Ibm Verifying a graph-based coherency verification tool
US10185561B2 (en) * 2015-07-09 2019-01-22 Centipede Semi Ltd. Processor with efficient memory access
EP3320428A4 (en) * 2015-07-09 2019-07-17 Centipede Semi Ltd. PROCESSOR WITH EFFICIENT MEMORY ACCESS
US20170010973A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient processing of load-store instruction pairs
US9575897B2 (en) 2015-07-09 2017-02-21 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions from nearby memory addresses
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10620961B2 (en) * 2018-03-30 2020-04-14 Intel Corporation Apparatus and method for speculative conditional move operation
US11334485B2 (en) * 2018-12-14 2022-05-17 Eta Scale Ab System and method for dynamic enforcement of store atomicity
US11061683B2 (en) * 2019-06-13 2021-07-13 Microsoft Technology Licensing, Llc Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor
US11392387B2 (en) 2020-11-04 2022-07-19 Microsoft Technology Licensing, Llc Predicting load-based control independent (CI) register data independent (DI) (CIRDI) instructions as CI memory data dependent (DD) (CIMDD) instructions for replay in speculative misprediction recovery in a processor

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
JP2002287959A (ja) * 2001-03-28 2002-10-04 Handotai Rikougaku Kenkyu Center:Kk ロード・ストアキュー
WO2003093982A1 (en) * 2002-04-30 2003-11-13 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778219A (en) 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
US5428807A (en) 1993-06-17 1995-06-27 Digital Equipment Corporation Method and apparatus for propagating exception conditions of a computer system
US5584009A (en) 1993-10-18 1996-12-10 Cyrix Corporation System and method of retiring store data from a write buffer
US5452426A (en) 1994-01-04 1995-09-19 Intel Corporation Coordinating speculative and committed state register source data and immediate source data in a processor
US5799179A (en) * 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US6237082B1 (en) 1995-01-25 2001-05-22 Advanced Micro Devices, Inc. Reorder buffer configured to allocate storage for instruction results corresponding to predefined maximum number of concurrently receivable instructions independent of a number of instructions received
US5751983A (en) * 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5892936A (en) 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
US6108769A (en) 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US6021485A (en) * 1997-04-10 2000-02-01 International Business Machines Corporation Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6044430A (en) 1997-12-17 2000-03-28 Advanced Micro Devices Inc. Real time interrupt handling for superscalar processors
US6112296A (en) 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Floating point stack manipulation using a register map and speculative top of stack values
US6041405A (en) * 1997-12-18 2000-03-21 Advanced Micro Devices, Inc. Instruction length prediction using an instruction length pattern detector
US6175910B1 (en) 1997-12-19 2001-01-16 International Business Machines Corportion Speculative instructions exection in VLIW processors
JPH11212788A (ja) 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6202204B1 (en) 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6108770A (en) 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets
US6463580B1 (en) 1998-11-18 2002-10-08 Intel Corporation Parallel processing utilizing highly correlated data values
US6349382B1 (en) 1999-03-05 2002-02-19 International Business Machines Corporation System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order
US6658554B1 (en) 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
US6393536B1 (en) * 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
US6266744B1 (en) 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US6438673B1 (en) 1999-12-30 2002-08-20 Intel Corporation Correlated address prediction
US6643767B1 (en) 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor
US6675287B1 (en) * 2000-04-07 2004-01-06 Ip-First, Llc Method and apparatus for store forwarding using a response buffer data path in a write-allocate-configurable microprocessor
DE10121792C2 (de) * 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
US6671780B1 (en) * 2000-05-31 2003-12-30 Intel Corporation Modified least recently allocated cache replacement method and apparatus that allows skipping a least recently allocated cache block
US6883086B2 (en) * 2002-03-06 2005-04-19 Intel Corporation Repair of mis-predicted load values

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
JP2002287959A (ja) * 2001-03-28 2002-10-04 Handotai Rikougaku Kenkyu Center:Kk ロード・ストアキュー
WO2003093982A1 (en) * 2002-04-30 2003-11-13 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US20040177236A1 (en) * 2002-04-30 2004-09-09 Pickett James K. System and method for linking speculative results of load operations to register values
JP2005532613A (ja) * 2002-04-30 2005-10-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013515306A (ja) * 2009-12-22 2013-05-02 インターナショナル・ビジネス・マシーンズ・コーポレーション アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア・比較ハザードの予測及び回避
JP2015228237A (ja) * 2009-12-22 2015-12-17 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation アウトオブオーダー型マイクロプロセッサにおけるオペランド・ストア比較ハザードの予測及び回避
US9430235B2 (en) 2009-12-22 2016-08-30 International Business Machines Corporation Predicting and avoiding operand-store-compare hazards in out-of-order microprocessors
JP2014002735A (ja) * 2012-06-14 2014-01-09 Apple Inc ゼロサイクルロード
US9996348B2 (en) 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
KR20190033084A (ko) * 2016-08-19 2019-03-28 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
JP2019525355A (ja) * 2016-08-19 2019-09-05 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated ロードストアユニットをバイパスすることによるストア及びロードの追跡
JP7084379B2 (ja) 2016-08-19 2022-06-14 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロードストアユニットをバイパスすることによるストア及びロードの追跡
KR102524565B1 (ko) 2016-08-19 2023-04-21 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group

Also Published As

Publication number Publication date
US7263600B2 (en) 2007-08-28
GB2429557A (en) 2007-02-28
GB2429557B (en) 2007-09-05
DE112004002848T5 (de) 2007-04-05
GB0622878D0 (en) 2006-12-27
CN100424635C (zh) 2008-10-08
US20050247774A1 (en) 2005-11-10
CN1954290A (zh) 2007-04-25
WO2005111794A1 (en) 2005-11-24
TW200606709A (en) 2006-02-16
DE112004002848B4 (de) 2010-06-17
TWI362613B (en) 2012-04-21

Similar Documents

Publication Publication Date Title
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
JP4538462B2 (ja) 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機
JP5294632B2 (ja) 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ
JP4105684B2 (ja) ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
JP3866261B2 (ja) ロード/ストア操作をバイパスするために投機的ソースオペランドを使用するシステムおよび方法
WO2005041024A2 (en) System and method for handling exceptional instructions in a trace cache based processor
KR101093784B1 (ko) 리플레이 메커니즘을 구비한 로드 저장 유닛
JP4624988B2 (ja) データ推測マイクロプロセッサにおいて実行中のオペレーションのインスタンスがオペレーションのリプレイの割込みを防ぐためのシステム及び方法
US7043626B1 (en) Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7937569B1 (en) System and method for scheduling operations using speculative data operands
JP4745960B2 (ja) マイクロプロセッサにおいてデータ推測オペレーションを識別する推測ポインタ
US7222226B1 (en) System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation
KR20070019750A (ko) 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071214

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071214

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100421

RD05 Notification of revocation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7425

Effective date: 20100902

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101215

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110629