JP5294632B2 - 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ - Google Patents

読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ Download PDF

Info

Publication number
JP5294632B2
JP5294632B2 JP2007531161A JP2007531161A JP5294632B2 JP 5294632 B2 JP5294632 B2 JP 5294632B2 JP 2007531161 A JP2007531161 A JP 2007531161A JP 2007531161 A JP2007531161 A JP 2007531161A JP 5294632 B2 JP5294632 B2 JP 5294632B2
Authority
JP
Japan
Prior art keywords
read
read operation
given
operations
global
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.)
Active
Application number
JP2007531161A
Other languages
English (en)
Other versions
JP2008512769A (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 JP2008512769A publication Critical patent/JP2008512769A/ja
Application granted granted Critical
Publication of JP5294632B2 publication Critical patent/JP5294632B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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 or 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 or 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
    • 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
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • 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 or 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 or 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 or 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 or 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

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)
  • Debugging And Monitoring (AREA)
  • Investigating Or Analysing Biological Materials (AREA)

Description

本発明は、プロセッサの分野に関し、より詳細には、プロセッサにおいてデータの投機的実行を行うことに関する。
スーパースカラプロセッサは、複数の命令を同時に実行し、その設計に適合する最短のクロックサイクルを使用することで高性能を達成している。
しかし、命令間におけるデータと制御のフロー依存性により、所定の時間に発行可能な命令の数が制限されてしまう。
この結果、一部のプロセッサでは、更なるパフォーマンスゲイン(性能向上)を図るために投機的実行をサポートしている。
このような投機あるいはスペキュレーションの1つのタイプとして、コントロールフロー投機(control flow speculation)が挙げられる。
コントロールフロー投機は、プログラム制御が進行する方向を予測する。例えば、分岐が発生するかどうかを予測するために分岐予測が用いられる。様々なタイプの分岐予測が利用可能であり、単純に毎回同じ予測を行う方法から、履歴に基づいた予測を行うために、プログラム中の過去の分岐の詳細な履歴を維持する方法まである。
分岐予測は、ハードウェアの最適化、コンパイラの最適化、またはこの両方によって容易になる。
分岐予測機構によって提供される予測に基づいて、命令は投機的にフェッチされ、実行され得る。
分岐命令が最終的に評価されるときに、分岐予測を検証することができる。予測が誤っていれば、誤った予測に基づいて投機的に実行された全ての命令は破棄され得る。
別の投機のタイプとしては、データ値を予測するデータ投機がある。すでに提案されたデータ投機の形式は、メモリオペレーション用にアドレスを投機的に生成し、コンピュータオペレーションで使用するためにデータ値を投機的に生成する。
コントロール投機と同様に、投機的に値を生成するために使用された根本的な条件を最終的に評価し、投機を検証済みとするか、あるいは投機を実行しないようにする。
投機を行うことで、投機条件がわかるまで待機することなく実行を進めることができるので、正しい投機によって得られる性能が、誤投機による性能損失を超えていれば、大幅な性能向上を図ることができる。
従って、誤った投機に起因するパフォーマンスペナルティを減らすことが望ましい。
データ投機プロセッサにおいて、(プログラム順序で)それ以前の(より古い)書込みオペレーションへの、読出しオペレーションの依存性を予測する方法およびシステムの様々な実施形態が開示される。
一実施形態では、プロセッサはオペレーションを発行するように構成されたスケジューラと、スケジューラによって発行されたメモリオペレーションを受信するように結合され、メモリオペレーションを実行するように構成された読出し/書き込みユニットを含み得る。
読出し/書き込みユニットはさらに、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、その所与の読出しオペレーションがそれ以前の書込みオペレーションから独立しているという予測に応答してそれ以前の書込みオペレーションのアドレスが計算される前に所与の読出しオペレーションを実行し、所与の読出しオペレーションがそれ以前の書込みオペレーションから独立しているという予測の後に、所与の読出しオペレーションが予測ミスしたかどうかを検出し、かつ、所与の読出しオペレーションが予測ミスしたことの検出を受けて、スケジューラに読出しオペレーションを再発行しなければならないことを示すリプレイ指示を与えるよう構成できる。
1つの特定の実施形態では、読出し/書き込みユニットは複数のローカルプレディクタエントリからなるローカルプレディクタを含むことができる。
複数のローカルプレディクタエントリの各々は、依存予測値を含んでもよく、読出し/書き込みユニットはさらに、所与の読出しオペレーションに対応する所与のローカルプレディクタにアクセスし、所与のローカルプレディクタエントリに含まれる所与の依存予測値を評価することによって、所与の読出しオペレーションがそれ以前の読出しオペレーションに依存しているかどうかを予測するように構成することができる。
別の特定の実施形態では、読出し/書き込みユニットは、グローバルヒストリレジスタおよび複数のグローバルプレディクタエントリを含むグローバルプレディクタを含んでもよい。
このグローバルヒストリレジスタは、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成されてもよい。
複数のグローバルプレディクタエントリの各々は、依存予測値を含むことができる。
読出し/書き込みユニットはさらに、グローバルヒストリレジスタに対応する所与のグローバルプレディクタエントリにアクセスし、この所与のグローバルプレディクタエントリに含まれる所与の依存予測値を評価することで、所与のロードオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成されてもよい。
さらに別の特定の実施形態では、読出し/書き込みユニットは、ローカルプレディクタとグローバルプレディクタとを含むことができる。ローカルプレディクタは、各々が依存予測値を含み得る複数のローカルプレディクタエントリを備える。グローバルプレディクタは、グローバルヒストリレジスタと複数のグローバルプレディクタエントリとを備える。このグローバルヒストリレジスタは、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成することができ、この複数のグローバルプレディクタエントリの各々は、依存予測値を含み得る。
読出し/書き込みユニットはさらに、所与の読出しオペレーションが動的な読出しオペレーションであるかどうかを判定することでそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成されてもよい。
所与の読出しオペレーションが動的な読出しオペレーションではないという判定を受けて、読出し/書き込みユニットは、所与の読出しオペレーションに対応する所与のローカルプレディクタにアクセスし、この所与のローカルプレディクタエントリに含まれるローカル依存予測値を評価することができる。
所与の読出しオペレーションが動的な読出しオペレーションであるという判定にを受けて、読出し/書き込みユニットは、グローバルヒストリレジスタに対応する所与のグローバルプレディクタエントリにアクセスし、この所与のグローバルプレディクタエントリに含まれるグローバル依存予測値を評価することができる。
添付の図面と併せて下記の詳細な説明を読めば、本発明をさらに理解することができる。本発明は、様々に変形することができ、他の形態を取り得るが、その特定の実施形態を、例として図面に図示し、かつ本明細書に詳細に記載する。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。
本明細書中に使用されている見出しは、分類のみを意図しており、本明細書または特許請求の範囲を限定するものではない。
さらに、本願にわたり「し得る、してもよい(may)」との用語は許容の意味(すなわち、可能性があること、できること)に用いられ、義務的な意味[すなわち必須(must)]の意味には用いられていない点に留意されたい。「含む、備える」との用語ならびにその派生語は、「含むがこれに限定されない」ことを意味する。
「接続されている」との用語は、「直接的または間接的に接続されている」ことを意味し、「結合されている」との用語は、「直接的または間接的に結合されている」ことを意味する。
図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に対するアクセスを実行するように構成された読出し/書込みユニットを含み得る。
実行コア124によって生成された結果は、結果バス130に出力され得る。これらの結果は、続いて発行される命令のためのオペランド値として使用可能であり、および/または、レジスタファイル116に記録される。リタイアキュー102は、スケジューラ118およびディスパッチユニット104に結合することができる。このリタイアキュー102は、発行されたオペレーションのそれぞれがいつリタイア可能であるかを決定するように構成することができる。一実施形態では、プロセッサ100は、x86アーキテクチャと互換性を持つように設計されてもよい。プロセッサ100はその他多くの要素を含み得る点に留意されたい。例えば、プロセッサ100は、分岐予測ユニット(図示せず)を含むことができる。
命令キャッシュ106は、ディスパッチユニット104が命令を受信する前に命令を一時的に記録することができる。命令コードは、システムメモリ200からプリフェッチユニット108を介してコードをプリフェッチすることにより、命令キャッシュ106に供給できる。命令キャッシュ106は、様々な構成で実施可能である(例えば、セットアソシエーティブ、フルアソシアティブ、またはダイレクトマッピング)。ある実施形態では、命令キャッシュ106および/あるいはデータキャッシュ128の多数レベルがあり得る。いくつかのレベルのキャッシュは、図示しているように、プロセッサ100と一体化してもよく、一方、他のレベルのキャッシュはプロセッサの外部に拡張してもよい。
プリフェッチユニット108は、命令キャッシュ106に記録するために命令コードをシステムメモリ200からプリフェッチすることができる。一実施形態では、プリフェッチユニット108は、システムメモリ200から命令キャッシュ106にコードをバースト転送させるように構成してもよい。プリフェッチユニット108は様々な特定のコードプリフェッチ技術およびアルゴリズムを採用することができる。
ディスパッチユニット104は、オペランドのアドレス情報、即値データおよび/または変位データに加えて、実行コア124が実行可能なビットエンコードされたオペレーションを含む信号を出力可能である。ある実施形態では、ディスパッチユニット104は、ある特定の命令を実行コア124内で実行可能なオペレーションにデコードするためのデコード回路(図示せず)を含むことができる。単純な命令は、単一のオペレーションに対応する。ある実施形態では、より複雑な命令は複数のオペレーションに対応する。オペレーションがレジスタの更新を伴う場合、投機レジスタ状態を記録するためにレジスタファイル116内のレジスタ位置が予約される(別の実施形態では、リオーダーバッファが各レジスタに対する1以上の投機レジスタ状態を記録するために用いられる)。ある実施形態では、ディスパッチユニット104は、レジスタのリネームを容易にするために、ソースおよび目的オペランドの論理レジスタ名を物理レジスタ名に変換可能なレジスタマップを実装してもよい。このようなレジスタマップは、レジスタファイル116内のどのレジスタが現在割り当てられているのかを追跡することができる。
図1のプロセッサ100は、アウトオブオーダー実行をサポートする。リタイアキュー102は、レジスタの読出しオペレーションおよび書込みオペレーションのために元のプログラムシーケンスの記録を行い、投機的命令実行および分岐予測ミスからの復帰を許可し、正確な例外処理を容易にする。リタイアキュー102は、有効になったオペレーションがバッファの”ボトム”に移動し、それによって待ち行列の”トップ”に新しいエントリのための空きを作る、先入れ先出し構造で実装されてもよい。
リタイアキュー102は、オペレーションが実行を完了したことに応答してオペレーションを停止し、プログラムオーダーでそのオペレーションを含むオペレーションまでのいずれのオペレーションに対して実行されたいずれのデータおよび制御スペキュレーションが照合すなわちベリファイされる。リタイアキュー102は、物理レジスタで値を生成したオペレーションが停止した場合に、プロセッサ100のアーキテクチャ状態に対する物理レジスタの投機的状態のコミットメントを行う。ある実施形態においては、リタイアキュー102はリオーダバッファの一部として実装されてもよい。
そのようなリオーダバッファは、レジスタのリネーミングをサポートするために、投機レジスタ状態のデータ値記録部を提供してもよい。他の形態では、リタイアキュー102は、データ値記録部を提供しなくてもよい点に留意されたい。これに代えて、オペレーションが停止すると、リタイアキュー102は、投機レジスタ状態を記録する必要がなくなったレジスタファイル116内のレジスタの割当てを解除し、現在空いているレジスタを示す信号をレジスタマップ134に送る。
レジスタファイル116内(他の実施形態では、リオーダバッファ内)の投機レジスタ状態を、それらの状態を生成したオペレーションが有効になるまで維持することによって、分岐予測が間違っていた場合に、予測ミスされたパスに従って投機的に実行されたオペレーションの結果をレジスタファイル116内で無効とすることができる。
特定のオペレーションの所要のオペランドがレジスタ位置の場合、レジスタのアドレス情報をレジスタマップ134(またはリオーダバッファ)に転送することができる。例えば、x86アーキテクチャでは、8つの32ビット論理レジスタ(例えばEAX、EBX、ECX、EDX、EBP、ESI、EDIおよびESP)が存在する。物理レジスタファイル116(またはリオーダバッファ)は、これらの論理レジスタの内容を変更した結果を記録するストレージを備えており、これによりアウトオブオーダー実行が可能となる。レジスタファイル116の物理レジスタは、各論理レジスタのうち1つの内容を変更すると判定された各オペレーションの結果を記録するよう割り当てられてもよい。
このため、ある特定のプログラムを実行している間の任意の時点で、レジスタファイル116(または別の実施形態ではリオーダバッファ)は、投機的に実行された所与の論理レジスタの内容を含むレジスタを1つ以上有し得る。
レジスタマップ134は、オペレーションの目的オペランドとして指定されたある特定の論理レジスタに物理レジスタを割り当ててもよい。
ディスパッチユニット104は、レジスタファイル116が、ある所与のオペレーションでソースオペランドとして指定された論理レジスタに割当てられた、すでに割当て済みの1つ以上の物理レジスタを有するという判定をし得る。レジスタマップ134は、その論理レジスタに最も最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル116内のオペランドのデータ値にアクセスするために使用してもよく、あるいは、結果バス130上の結果転送を介してデータ値を受信するために使用してもよい。
このオペランドがメモリ位置に対応している場合、このオペランド値は、読出し/書込みユニット126Cを介して結果バスに供給される(結果転送および/またはレジスタファイル11118への記録のため)。このオペレーションがスケジューラ118のうちの1つによって発行されると、オペランドデータ値が実行コア124に供給される。別の実施形態では、オペレーションが発送されると、オペランド値が対応するスケジューラ118に供給されてもよい点に留意されたい(オペレーションが発行されたときに、対応する実行コア124に供給する代わりに)。
ディスパッチユニット104の出力で与えられたビット符号化されたオペレーションおよび即値データを1以上のスケジューラ118にルーティングしてもよい。本文に使用しているように、スケジューラとは、オペレーションの実行の準備ができたことを検出して、1以上のファンクショナルユニットに準備オペレーションを発行するデバイスであるという点に留意されたい。例えば、予約ステーションは、スケジューラである。スケジューラあるいはスケジューラのグループにおけるオペレーションは、命令またはオペレーションウインドウまたはスケジューリングウインドウとしても称され得る。
各スケジューラ118は、実行コア124への発行を待ついくつかのペンディングオペレーションに関するオペレーション情報(例えば、オペランド値、オペランドタグおよび/または即値データの他に、ビット符号化された実行ビット)を保持することができる。ある実施形態においては、各スケジューラ118は、オペランド値を記録することはできない。その代わりに、オペランド値がファンクショナルユニットによって(例えば、レジスタファイルあるいは結果バスから)読出し可能となる時点を判定するために、各スケジューラは、レジスタファイル116において利用可能な発行済みオペレーションおよび結果を監視することができる。
ある実施形態では、各スケジューラ118は、専用のファンクショナルユニットに関連付けられてもよい。別の実施形態では、1つのスケジューラ118が、1つ以上のファンクショナルユニット126にオペレーションを発行してもよい。
スケジューラ118は、実行コア124によって実行されるオペレーション情報を一時的に記録するために提供されてもよい。前述のように、各スケジューラ118は、ペンディング中のオペレーションのためにオペレーション情報を記録することができる。さらに、各スケジューラは、すでに実行済みであるが再発行される可能性のあるオペレーションのためのオペレーション情報を記録することができる。オペレーションは、必要な任意のオペランドの値が実行に間に合うように利用可能になると、実行のため実行コア124に発行される。
このため、オペレーションの実行順序は、元のプログラム命令のシーケンスの順序と一致しないことがある。データ投機を伴うオペレーションを非投機的になるまでスケジューラ118にとどめ、データ投機が誤っていれば再発行することができる。
図1に例示しているように、読出し/書込みユニット126Cは、スケジューラ118に再発行される1つ以上のオペレーションを識別するリプレイ指示を供給することができる。例えば、一実施形態では、そのようなリプレイ指示は、リプレイされる各オペレーションのタグを含むことができる。別の実施形態では、そのようなリプレイ指示は、特定のビットが対応のリプレイされるオペレーションを識別できるよう、対応するビットをスケジューラ118内の各読出し/書込みオペレーションに含むことができる。スケジューラ118はリプレイ指示によって識別されたオペレーションを応答可能なように再発行し得る。
一実施形態では、実行コア124のそれぞれはいくつかのファンクショナルユニット126(例、図1に示すファンクショナルユニット126A〜126C)を含んでもよい。例えば、126Aのようないくつかのファンクショナルユニットは、シフト、ローテート、論理オペレーション、及び分岐オペレーションの他に加算及び減算の整数演算オペレーションを実行するように構成されてもよい。例えば、128Bのような他のファンクショナルユニットは、浮動小数点オペレーションに対応できるように構成されてもよい。例えば、126Cのようなファンクショナルユニットによって実行される読出し/書込みオペレーション用のアドレスを生成するために、一つあるいはそれ以上のファンクショナルユニットが構成されてもよい。
一実施形態では、126Cのようなファンクショナルユニットは、ペンディング中の読出しおよび/または書込みに関するデータ及びアドレス情報のためのいくつかのストレージロケーションを備えた読出し/書込みバッファで構成されてもよい。本文中では、ファンクショナルユニット126Cは読出し/書込みユニットとも称され得る。
一つあるいはそれ以上のファンクショナルユニット126が分岐予測ユニットに条件付き分岐命令の実行に関する情報も与えることができ、それによってもし分岐予測ミスが発生したときに、分岐予測ユニットが命令プロセッシングパイプラインに入力された予測ミスした分岐に後続する命令をフラッシュすることができ、プリフェッチユニット106にリダイレクトすることができるようにする。このリダイレクトされたプリフェッチユニット106は、次に命令キャッシュ106またはシステムメモリ200から正しい命令セットのフェッチを開始する。そのような状況では、投機的に実行され、レジスタファイル116に一時的に記録されたものを含む、予測ミスした分岐命令の後に発生した元のプログラムシーケンスにおける命令の結果は廃棄される。
実行コア124内のファンクショナルユニット126によって生成された結果は、レジスタの値が更新されていれば、結果バス130においてレジスタファイル116に対して出力される。メモリ位置の内容が変更されていれば、実行コア124内で生成された結果は、読出し/書込みユニット126Cに供給され得る。データキャッシュ128は、実行コア124とシステムメモリ200との間で転送されたデータを一時的に記録するために提供されるキャッシュメモリである。上述の命令キャッシュ106と同様に、データキャッシュ128はセットアソシアティブ構成を含む、様々な特定のメモリ構成において実装可能である。さらに、ある実施形態では、データキャッシュ106および命令キャッシュ128は、一体化されたキャッシュに実装可能である。
ある実施形態では、プロセッサ100は、一体化されたメモリコントローラ160を含んでもよく、これによりプロセッサはシステムメモリ200に直接インターフェース接続できる。他の実施形態では、メモリコントローラ160は、プロセッサ100をシステムメモリ200に間接的に結合するバスブリッジに含まれてもよい。
依存予測
本文に記載しているように、データ値の誤りが見つけられ、結果として再計算される可能性があれば、データ値は投機的であるとする。投機的なデータ値とは正しいか誤っているかを確定的に識別できないものである。データ値が、いくつかのデータ投機が実行されたことに対するオペレーションの結果である場合、あるいはデータ値が他の投機的データ値に依存する場合(例えば、このデータ値が、1つ以上の投機的なオペランドを有するオペレーションの結果として生成される場合)、このデータ値を再計算してもよい。非投機的な値とは、いずれのデータ投機にも依存しない値である(しかし、そのような値はなおもコントロール投機に影響され得る)。
マイクロプロセッサ100における各種メカニズムはデータ投機を実行することができる。例えば、一実施形態では、読出し/書込みユニット126Cは、書込みアドレスが計算される前に、所与の読出しが以前の書込みオペレーションに依存しているかどうかを予測できる。以前の書込みから独立していると予測された読出しは、書込みオペレーションに対して自由にスケジュールでき、投機的に実行できる。このタイプのデータ投機は、本文では依存予測と称される。
依存予測の別の例では、1つのオペレーションの結果を他のオペレーション用の投機的なオペランドとして使用可能であることをディスパッチユニット104が検出することができる。例えば、読出しオペレーションが先行の書込みオペレーションによってデータキャッシュ128に記録されたデータにアクセスすることをディスパッチユニット104が予測することができる。ディスパッチユニット104は、書き込みオペレーションのソースとして使用されたレジスタに記録されたデータ値を、読み出しオペレーションの投機結果として応答可能に識別できる。
読出しオペレーションの結果をオペランドとして特定するオペレーション用の投機的オペランドソースとして書込みオペレーションのソースをリンクすることによって、依存予測をディスパッチユニット104に拡張してもよい。
いくつかの投機的結果を生成するために、タイプの異なる複数のデータ投機を行ってもよい。例えば、整数オペレーションの投機的結果は、予測したデータ値を使用して生成可能である。この投機的結果はその後、書込みオペレーションによって記録することができる。ある読出しオペレーションは依存予測を通じてこの書込みに依存するように予測され得、よって、この読出しオペレーションの投機的結果は、整数オペレーションの投機的結果となる。
データ投機が行われたオペレーションの結果に依存したオペレーションは、投機的結果を生成する場合もある。例えば、アドレス予測が読出しオペレーションの投機的結果を生成するように使用されれば、オペランドとして読出しの投機的結果を使用して実行する任意の依存オペレーションは投機的結果を生成することができ、次にこれを他の依存オペレーションによってオペランドとして使用することも可能である。従って、読出しオペレーションにおいて基礎となる投機が誤りであると決定されれば、依存オペレーションの結果も誤っている可能性がある。このため、正確な結果を生成するために、この読出しに依存するオペレーションの全体的な依存チェーンを再実行することが求められる。他方では、基礎となる投機が正確であると判れば、(これらの結果がどのような投機的値にも基づかないものと仮定して)依存オペレーションの結果は正しいであろう。
データ投機が実行された多くのオペレーションは、ファンクショナルユニットによってこれらのオペレーションが実行されるときにベリファイ、すなわち検証することができる。例えば、あるオペレーションの結果を投機的に生成するように使用されたデータ予測は、ファンクショナルユニット126によって検証可能であり、このファンクショナルユニット126は、実際のオペレーションの結果と投機的結果を比較することでこのオペレーションを実行する。
正確な結果がすでに利用可能であるので、データ投機が誤っていてもオペレーションを再実行する必要はない。他のオペレーションは、完全に実行されなくても検証可能である。例えば、未計算のアドレスで読出しが早期書込み結果を転送した場合(例えば、依存予測またはアドレス予測に起因して)、読出しの投機結果は、読出しアドレスが計算されるときに検証可能である。データ投機が誤っていれば、正しい結果を生成するためにそのようなオペレーションを(少なくとも一部)再実行することが求められる。
データ投機が実行されたオペレーションとそれに依存するオペレーションとを再実行する必要があることから、リタイアキュー102は、基礎となるデータ投機が解決されたオペレーションをリタイアするためだけに構成することができる。
依存予測(メカニズム)を備えた読出し/書込みユニット
上述したように、データの投機的実行をサポートするプロセッサでは、読出し/書込みユニット126Cは、読出しオペレーションが以前の書込みオペレーションに依存しているかどうかを予測するために構成することができる。また、この読出し/書込みユニット126Cは、独立していると予測された読出しオペレーションが書込みオペレーションに対して自由にスケジュールすることを可能にする。
さらに、読出し/書込みユニット126Cは、検証メカニズムを備えることができる。この検証メカニズムは 誤った依存予測を検出し、誤って予測したオペレーションをリプレイしなければならないことをスケジューラに知らせ、その後、スケジューラが読出し/書込みユニット126Cにこれらのオペレーションを再発行させる。
本文中で用いられているように、その他のオペレーションより古いもしくは新しい読出しオペレーションまたは書込みオペレーションについての言及は、比較されるオペレーションのプログラム順序に関連する点に留意されたい。つまり、プログラム順序で第2オペレーションよりも早くに現れる第1オペレーションは第2オペレーションよりも古いオペレーションと呼ばれ、第2オペレーションは第1オペレーションよりも新しいオペレーションと呼ばれ得る。
図2は、読出しオペレーションのために依存予測を実行するように構成された読出し/書込みユニット126Cの一実施形態を例示する。例示的実施形態では、読出し/書込みユニット126Cは依存予測ロジック303と依存検証ロジック305とを含み、各回路は相互に結合されているとともに、オペレーションストレージ(operation storage)307に結合されている。
依存予測ロジック303は、読出し/書込みユニット126Cに発行された読出しオペレーションの依存予測を実行するように構成してもよい。図3〜図3Cの説明と併せて以下に詳細を説明しているように、依存予測ロジック303は、読出しオペレーションに対応する依存予測値を記録するように構成されたローカルおよび/またはグローバル予測データ構造を含むことができる。依存予測ロジック303は、オペレーションストレージ307内に記録された所与の読出しオペレーションに対応する依存予測値にアクセスするように構成してもよい。この対応する依存予測値が、所与の読出しオペレーションが以前の書込みオペレーションから独立していると予測されることを示せば、読出し/書込み書込みユニット126Cは、この所与の読出しオペレーションを、1以上の以前の書込みオペレーションが計算される前に実行させることができる。
以下に詳述しているように、依存検証ロジック305は、依存予測ロジック303にてって実行されたデータ投機を検証するように構成してもよい。
依存検証ロジック305はまた、プロセッサ100の他の部分によって実行されたデータ投機を検証するようにを構成することもできる。例えば、ディスパッチユニット104が依存予測を実行するように(読出しの結果を早期書込みのソースに投機的にリンクすることで)構成されれば、その依存予測を検証するように依存検証ロジック305を構成してもよい。
オペレーションストレージ307は、(例えば、スケジューラ118によって)読出し/書込みユニット126Cに発行済みであるが、実行が未完了のオペレーションを記録するように構成してもよい。データの投機が実行済みの読出し/書込みユニットに発行されたオペレーションは、そのオペレーションが依存検証ロジック305によって検証されるまでは停止できない。オペレーションストレージ307は、読出し/書き込みユニット126C内の未処理の全オペレーションをトラッキングつまり追跡可能である。オペレーションストレージ307は、未処理の読出しおよび書込みのそれぞれについてエントリ310を含むことができる。
エントリ310はまた、エントリが読出しまたは書込みに割り当てされたかどうかを示すld/st情報313を含むことができる(あるいは、ある実施形態では、あるエントリは、そのエントリがメモリアドレスから読出された値でオペレーションを行い、メモリアドレスにその結果を記録するオペレーションに対応すれば、そのエントリは読出しおよび書込み両方を含むことを示し得る)。加えて、エントリ310は、タグ315(例えば、プロセッサ100内のオペレーションとその結果を識別する)、アドレス317、および/あるいはデータ319を含む。ある実施形態では、タグ315はメモリオペレーションに対応するプログラムカウンタ値を含んでもよい(例えば、x86アーキテクチャを実装する実施形態ではEIP値)。
ある実施形態では、各エントリのデータフィールド319は、投機的データおよび非投機的データ双方のためのストレージを含み得る。同様に、ある実施形態では、アドレスフィールド317はある1つのオペレーションのアドレスの複数の値(例えば、アドレス予測によって生成された投機的なアドレスとオペレーションの実行により生成された新しいアドレス値)のためのストレージを含むことができる。
ある実施形態では、エントリは、データ投機としてオペレーションおよび/あるいはオペランドを識別するよう追加のフィールドを含むことができる。例えば、フラグ321は、ある特定の読出しオペレーションが以前の書込みから独立していると予測されることを示し得る。さらに、以下に詳述しているように、フラグ321は、ある特定のオペレーションが動的に予測可能であるかどうかを示し得る。
エントリ310は、オペレーションを読出し/書込みユニット126Cに発行するスケジューラ118に応じて割り当てられ、このオペレーションの実行を完了する読出し/書込みユニット126Cに応じて割り当て解除される。
依存検証ロジック305は、オペレーションの投機的結果をオペレーションの実際の結果と比較することによって、依存予測のある種の形式を検証することができる。例えば、読出しオペレーションの投機結果は、オペレーションストレージ307内の読出しのエントリ310に記録できる。この読出しオペレーションの実際の結果がデータキャッシュ128から受信されると、依存検証ロジックは実際の結果をオペレーションストレージ307に記録された投機的結果と比較し得る。
依存検証ロジック305は、オペレーションのアドレスを1つ以上のより早期のオペレーションのアドレスと比較することによって、依存予測の別の形式を検証可能である。例えば、依存検証ロジック305は、専用の依存検証コンパレータ(図示せず)を備えてもよく、あるいは、読出し/書込みユニット126Cのある実施形態に実装された書込みから読出しへの(store-to-load)転送コンパレータを使用してもよい。一実施形態では、ある読出しは、1以上の以前のアドレスが計算される前に、依存予測ロジック303によって以前の書込みから独立していると予測され得る。1以上の以前の書込みのアドレスが利用可能になると、コンパレータは、独立していると予測された読出しオペレーションのアドレスに対して、以前の書込みアドレスを比較するように構成することもできる。
任意の以前の書込みのアドレスが、独立していると予測された読出しオペレーションのアドレスと一致すれば、依存検証ロジック305は、その読出しオペレーションが予測ミスされたことを示し得る。ある実施形態では、依存検証ロジック305は、独立していると予測された読出しオペレーションだけを監視し検証するように構成されてもよい(例えば、そのような予測を示すフラグ値321を有するオペレーションストレージ307に記録された読出しオペレーション)。他の実施形態では、依存していると予測された読出しオペレーションが実際にはそれ以前の書込みオペレーションから独立しているかどうかを検出するように依存検証ロジック305を構成してもよい。
依存検証ロジック305は、予測ミスした読出しオペレーションの依存性の検出に応じて、予測ミスした読出しオペレーション(および、ある実施形態では、予測ミスした読出しオペレーションに依存したオペレーションあるいは予測ミスした読出しオペレーションよりも新しいオペレーション)をリプレイさせるとともに、依存予測ロジック303が更新されるようにする。以下に詳細を記載する。
あるオペレーションは、そのオペレーションを識別するリプレイ信号をスケジューラ118に送ることによってリプレイされ得る。スケジューラ118は、そのような信号に応答して、リプレイに関するオペレーションのマーキングを行うことができる(例えば、そのオペレーションがリプレイされなければならないことを示すようにそのオペレーションに関連付けられたステート情報を変更することによって)。一実施形態では、依存検証ロジック305は、オペレーションをリプレイしなければならないことを示すフラグとともにオペレーションのタグをスケジューラ118に提供することでオペレーションをリプレイさせることができる。
依存していると予測された読出しオペレーションの予測ミスを検出する実施形態では、依存検証ロジック305は、予測ミスした読出しオペレーションをリプレイせずに依存予測回路303の更新だけを行ってよい。その理由は、読出しオペレーションの依存性を誤って予測することで、計算を間違えるのではなく、単にパフォーマンスが低下するに過ぎないからである。
さらに、以下にさらに詳述するように、依存予測ロジック303が予測履歴を提供するように構成されたカウンタを備えている実施形態において、依存検証ロジック305は、予測が正確な場合だけでなく予測ミスした場合にも依存予測ロジック303を更新するように構成してもよい。
ある実施形態では、依存性が予測ミスされた読出しオペレーションの正確な結果がすでに利用可能であり得る。例えば、独立していると予測された読出しオペレーションは、実際には書込みオペレーションに依存している可能性もあり、また、例えば、その書込みオペレーションに対応するエントリ310のデータ319などで書込みデータが利用可能である。
誤って投機された読出しオペレーションの正確な結果がすでに利用可能である場合、ある実施形態では、依存検証ロジック305は、読出し/書き込みユニット126Cに、誤って投機された読出しオペレーションの正確な結果をプロセッサの他の要素に送信させることができ、それにより、正確な値を使用してプロセッサの他の部分中の依存オペレーションを再実行できる。そのような実施形態では、データ投機検証ロジック305は、誤って投機されたそのような読出しオペレーションをリプレイさせない。
読出し/書込みユニット126Cは、たとえこのオペレーションをリプレイされたとしても、未処理のオペレーションの実行を完了可能であることに留意されたい。
依存予測ロジック303は、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成された、各種のデータ構造を実装することができる。各種実施形態において、依存予測のためにローカルプレディクタ、グローバルプレディクタ、および、ハイブリッドプレディクタを用いることができる。
図3Aはローカルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態において、依存予測ロジック303は、複数のプレディクタエントリ335を含むローカルプレディクタ330を含む。各ローカルプレディクタエントリ335は、インデックスタグ336と依存予測値337とを含む。例示の実施形態では、各ローカルプレディクタエントリ335はまた、カウンタ338を含む。しかし、以下に詳述しているように、ある実施形態ではこのカウンタを省いてもよい。
カウンタ338は、カウンタの最大値と最小値において飽和するように構成されたマルチビットカウンタを含むことができる。
各ローカルプレディクタエントリ335は、ある所与の読出しオペレーションに対応する依存予測情報を記録するように構成されてもよい。ある所与のローカルプレディクタエントリ335は、インデックスタグ336によって指し示されてもよく、このローカルプレディクタエントリ335は、一実施形態では、対応する読出しオペレーションのプログラムカウンタ値を含んでもよい。
その他の実施形態では、インデックスタグ336は、プログラムカウンタ値以外の、対応する読出しオペレーションを識別する値、例えば、目的タグ値あるいはロードアドレス値、を含んでもよい。インデックスタグ336は、対応するローカルプレディクタエントリ335が有効である(つまり、所与の読出しオペレーションに割り当てられている)という表示を含むことができる。
読出しオペレーションに対応する識別情報、例えば、そのプログラムカウンタ値は、読出しオペレーションが読出し/書込みユニット126Cに発行されると依存予測ロジック303に提供され得る。例示した実施形態では、ローカルプレディクタ330は、コンテンツアドレッサブルメモリ(CAM:Content Addressable Memory)のオペレーションに類似したアソシアティブな、あるいは連携的な方法で、読出しの識別情報を各ローカルプレディクタエントリのインデックスタグ336と比較し、読出しオペレーションに対応する有効なプレディクタエントリが存在するかどうかを判定する。
有効なプレディクタエントリが存在する場合、それに対応する依存予測値337(カウンタ値338が存在する場合は、カウンタ値338も同様に)が読み出され、オペレーションストレージ307の読出しオペレーションに対応するエントリ310内に記録され得る。有効なプレディクタエントリが存在せずに、利用可能なフリーローカルプレディクタエントリ335がある場合、このフリーエントリは読出しオペレーションと、このフリーエントリのインデックスタグ336に記録された読出しの識別情報とに割り当てられる。さらに、デフォルト予測値がこのフリーエントリの依存予測値337に記録されてもよい。
例えば、読出しオペレーションは、デフォルト設定では以前の書込みから独立していると予測され得る。よって、この場合、独立していると予測されたことを示す予測値を記録できる。
読出し/書込みユニット126Cは、ローカルプレディクタ330から読み出された依存予測値情報を評価することができ、これにより、独立していると予測された読出しオペレーションを、それ以前の書込みオペレーションのアドレスが計算される前に実行できる。
上述したように、依存検証ロジック305は、所与の読出しオペレーションの依存予測が誤りであることを検出することができる。この場合、依存検証ロジック305は、予測ミスした読出しオペレーションに対応するローカルプレディクタエントリ335を更新させることができる。
例えば、上述の方法に類似した方法で、依存検証ロジック305はまず、読出しオペレーションの識別情報を提供することによって、対応するローカルプレディクタエントリ335をローカルプレディクタ330内にアクセスさせることができる。適切なローカルプレディクタエントリ335が選択されると、依存検証ロジック305は、予測ミスを反映するよう対応の依存予測値337を更新させることができる。
カウンタ338が実装されない実施形態では、依存予測値337は、依存検証ロジック305によって決定された正確な依存情報を記録するように更新されてもよい。カウンタ338を含む実施形態では、カウンタ値は予測ミスの場合に減少し、正しい予測の場合に増加する可能性がある。また、依存予測値337は、対応するカウンタ338が最小値のときだけ予測ミスを更新することができる。
そのような実施形態では、カウンタ338は、依存予測に対して履歴を提供することができ、これにより、1つの正確な予測あるいは誤った予測に応じて依存予測を急峻に変化させないようにする。そのような実施形態では、カウンタ338は依存予測の強さを示してもよい(例えば、カウンタ値がより大きければ、より強い予測を、カウンタ値がより小さければ、より弱い予測を示し得る)。
直前に記載したように、一実施形態において、ローカルプレディクタ330は依存しているあるいは独立していると予測された読出しオペレーションに対応するエントリを含むことができる。
しかし、別の実施形態では、ローカルプレディクタ330は依存していると予測された読出しオペレーションに対してだけにエントリの割り当てを行うように構成されてもよい。そのような実施形態では、所与の読出しオペレーションが読出し/書き込みユニット126Cに発行されたときに、この所与の読出しオペレーションの識別情報がローカルプレディクタ330の任意のエントリと一致しなければ、この読出しオペレーションはデフォルト設定によって独立していると予測されてよい。続いて、依存検証ロジック305が、そのようなデフォルト設定の予測が誤りであることを検出すれば、依存検証ロジック305は正確な予測を伴ってローカルプレディクタ330にエントリを割り当てさせる。
同様に、ある実施形態では、依存検証ロジック305が、依存していると予測された読出しオペレーションが実際にはそれ以前の書込みオペレーションから独立していることを検出すれば、依存検証ロジック305は予測ミスした読出しオペレーションに対応するローカルプレディクタエントリ335の割り当て解除を行うように構成されてもよい。ローカルプレディクタ330が、依存していると予測されたロードオペレーションに対してだけにエントリを割り当てるように構成された実施形態では、依存予測値337は各ローカルプレディクタエントリ335から省いてもよい。
ローカルプレディクタ330は、特定の読出しオペレーションを予測するときにその特定の読出しオペレーションの過去の動作だけに依存し、その他の読出しオペレーションの過去の動作には依存しない。よって、読出しプレディクタ330は、動作が相対的に静的な読出しオペレーションに関する依存性を予測する場合に実効的である。
しかし、場合によっては、ある所与の読出しオペレーションの依存動作は、その他の読出しオペレーションの動作によって変化する可能性がある(つまり、所与の読出しオペレーションの依存動作は動的である)。
例えば、所与の読出しオペレーションが発行されるが、この所与の読出しオペレーションは、発行された読出しオペレーションのうち一回おきのもののみを以前の書込みオペレーションに依存するようにしてもよく、これは、個々の読出しオペレーションの動作によって決定される。そのような場合、ある所与の読出しオペレーションの動作を予測するときにいくつかの読出しオペレーションの動作を考慮するグローバルプレディクタは、より正確な予測を行うことができる。
図3Bは、グローバルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態では、依存予測ロジック303は、グローバルプレディクタ340を含む。このグローバルプレディクタ340は、コンビネーションロジック346を介して複数のグローバルプレディクタエントリ345に結合されたグローバルヒストリレジスタ342を含む。各グローバルプレディクタエントリ345は、グローバル依存値347とグローバルカウンタ348とを含む。グローバルカウンタ348はカウンタの最大値と最小値において飽和するように構成されたマルチビットカウンタを含んでもよい。
グローバルヒストリレジスタ342は、複数のビットを記録するように構成されたシフトレジスタであってもよく、このレジスタにおいて、各ビットは実行された各々の読出しオペレーションの依存動作に対応する。
一実施形態では、依存動作は実行された各々の読出しオペレーションの実際の依存動作に対応し得る。つまり、実行された各々の読出しオペレーションが、実際にはそれ以前の書込みオペレーションから独立していたか、それ以前の書込みオペレーションに依存していたか、である。
別の実施形態では、依存動作は、実行された各々の読出しオペレーションの、予測した依存動作に対応し得る。この予測した依存動作は実際の依存動作よりも早く利用できる。グローバルヒストリレジスタ342に記録されたビット数と、そのグローバルヒストリレジスタ342に示される実行された読出しオペレーション数とは、各種実施形態で変化してよい。一実施形態では、グローバルヒストリレジスタ342は、プログラム可能幅シフトレジスタ(programmable-width shift register)として実装することができる。
一実施形態では、読出しオペレーションを実行するたびにグローバルヒストリレジスタ342を更新してもよい。更新後、新たに実行された読出しオペレーションの依存動作をグローバルヒストリレジスタ342の最下位ビット位置にシフトし、グローバルヒストリレジスタ342の残った全てのビット位置を1ビット位置左にシフトし、グローバルヒストリレジスタ342の最上位ビットを破棄する。
別の実施形態では、グローバルヒストリレジスタ342は、右シフトレジスタとして実装することができる。この形態において、新たに実行された読出しオペレーションの依存動作を最上位ビット位置にシフトし、最小位ビットを破棄する。ある実施形態では、グローバルヒストリレジスタ342は、同時に実行している複数の読出しオペレーションに適応するよう、一度に1以上のビット位置をシフトしてもよい。
所与のグローバルプレディクタエントリ345のグローバル依存予測値347は、依存あるいは独立していると予測された、対応する読出しオペレーションの依存予測を示すことができる。
グローバルプレディクタカウンタ348は、所与の読出しオペレーションに対して、対応するグローバル依存予測値347の強度を示す値を記録するように構成することもできる。
ある実施形態では、グローバルプレディクタカウンタ348は、ローカルプレディクタ330に関して上述した方法と類似した方法で、誤った予測あるいは正確な予測が検出されたときに依存検証ロジック305によって更新され得る。
コンビネーションロジック346は、所与の読出しオペレーションが読出し/書き込みユニット126Cに発行されたときに、グローバルヒストリレジスタ342に含まれる値を所与の読出しオペレーションの識別情報と組合せてインデックス値を生成するように構成することもできる。その後、生成されたインデックス値は、特定のグローバルプレディクタエントリ345にアクセスするために使用することができる。また、対応するグローバル依存予測値347が読み出され、オペレーションストレージ307の読出しオペレーションに対応するエントリ310に記録される。このエントリにおいて、生成されたインデックス値(it)は、ローカルプレディクタ330に関して上述した方法に類似した方法で、読出しオペレーションのスケジューリングを変更するように使用することができる。
ある実施形態では、グローバルプレディクタエントリ345は、信頼性即ちバリディティ情報を含むことができる。その理由は、グローバルプレディクタ340内の割当て解除されたエントリにアクセスする読出しオペレーションがデフォルト予測を受信できるようにするためである。
コンビネーションロジック346は、グローバルヒストリレジスタ342内に含まれる値(複数の、最近実行した読出しオペレーションの依存履歴を示す)を、予測が所望される所与の読出しオペレーションのいくつかの特定の識別情報と組合わせるように構成することができる。例えば、一実施形態では、所与の読出しオペレーションに対応するプログラムカウンタ値を使用してもよく、別の実施形態では、目的タグや読出しアドレスなどの識別情報を使用することができる。コンビネーションロジック346によって実行される精密なコンビネーションの機能は、各種実施形態において異なってもよい。
一実施形態では、コンビネーションロジック346は、グローバルヒストリレジスタ342の値を、論理的排他的OR(XOR)機能を使用した所与の読出し命令のプログラムカウンタ値からなる選択されたビット(最下位ビットなど)と組合せて、特定のグローバルプレディクタエントリ345を選択するために使用され得るインデックス値を生成するように構成することができる。
別の実施形態では、インデックス値は、グローバルヒストリレジスタ342の全ての値あるいは一部の値を、所与の読出し命令のプログラムカウンタ値からなる選択されたビットと連結することで生成することができる。
グローバルプレディクタ340は、1以上の読出しオペレーションの依存履歴を含んでいることから、グローバルプレディクタ340は読出しオペレーションの結果を動的な依存履歴を使ってより正確に予測することができる。
しかし、実施形態によっては、環境が違えば、ローカルプレディクタ330はグローバルプレディクタ340よりも優れた予測正確性を示す可能性があり、また、グローバルプレディクタ340はローカルプレディクタ330よりも優れた予測正確性を示す可能性がある。
このため、ある実施形態では、ローカルタイプとグローバルタイプ両方のプレディクタを使用したハイブリッドプレディクタを使用してもよい。
図3Cは、ハイブリッドプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態では、依存予測ロジック303は、ハイブリッドプレディクタ350を含む。このハイブリッドプレディクタ350には、各々がセレクタ355に結合されたローカルプレディクタ330とグローバルプレディクタ340とを含む。このローカルプレディクタ330およびグローバルプレディクタ340の構造および動作はそれぞれ、図3Aおよび図3Bとともに上述したようなものであってよい。
一実施形態では、ローカルプレディクタ330は、デフォルトプレディクタとして構成することができる。このデフォルトプレディクタの予測は、所与の読出しオペレーションが動的読出しオペレーションであると判定されない限りは選択されてよい。
他の実施形態では、ある読出しは、ローカルプレディクタ330がある特定の回数その読出しを予測ミスしたような場合、依存検証ロジック305によって動的な読出しオペレーションとされてよい。他の実施形態では、他のファンクショナルユニットは動的な読出し状態を示すことができる。例えば、実施形態によっては、ある読出しは、そのオペランドあるいはアドレス指定パターンに基づいたオペレーションデコードステージにおいて、動的であるとされてもよい。
一実施形態では、読出し/書込みユニット126Cのオペレーションストレージ307に記録された読出しオペレーションは、その読出しが、例えば所与のエントリ310のフラグフィールド321に記録された動的な読出しオペレーションであるかどうかについて、対応の表示(indication)を含むことができる。そのような実施形態では、動的な読出しの表示は、セレクタ355を構成でき、その読出しが静的あるいは動的であると示されれば、ローカルプレディクタ330あるいはグローバルプレディクタ340の出力をそれぞれ選択する。さらに、そのような実施形態において、未使用のプレディクタは、選択されたプレディクタがアクセスされる間は静止状態であってよく、これによりハイブリッドプレディクタ350の電力消費を減らすことができる。
他の実施形態では、動的な読出し状態の表示は、この動的な読出しオペレーションに対応するローカルプレディクタエントリ335内に記録することができる。例えば、各ローカルプレディクタエントリ335は、動的な読出し状態を示す追加のフィールド(図示せず)を示すように構成してもよい。そのような実施形態の1つのバージョンでは、ローカルプレディクタ330およびグローバルプレディクタ340の双方は、所与の読出しオペレーションに対して同時にアクセスされてもよい。また、対応するローカルプレディクタエントリ335に記録された動的な読出し状態表示は、適切なプレディクタの出力を選択するようにセレクタ355を構成することができる。そのような実施形態の別のバージョンでは、グローバルプレディクタ340は対応するローカルプレディクタエントリ355に記録された動的な読出し状態表示の値に応じてアクセスされてもよい。
メモリファイルおよび依存予測
プロセッサ100のある実施形態では、メモリファイルは、読出しと書込み命令間の、依存性の表示を容易にするように実装することができる。そのような実施形態では、メモリファイルオペレーションの結果は、読出しオペレーションの依存予測を実行するように使用してもよい。
図4Aは、ディスパッチユニット104の一実施形態を示す。この実施形態では、ディスパッチユニット104は、レジスタマップ134とメモリファイル132を備える。図1の説明とあわせて上述したように、レジスタマップ134は、レジスタのリネーミングを行うように構成することができる。レジスタマップ134は、各ソースオペランドおよび目的オペランドの論理レジスタ名を受け取り、その論理レジスタに最後に割り当てられた物理レジスタの物理レジスタ名を出力することができる。メモリファイル132は、メモリファイルコントローラ202とメモリファイルストレージ204とを備える。
メモリファイルストレージ204は、1つ以上のエントリ220を含む。各エントリ220は、アドレス指定パターン206と、エントリ220のアドレス指定パターンに関連付けられたタグ208を含むことができる。各タグは、データ値が生成されるときに、そのデータ値を記録する場所(リオーダバッファ内またはレジスタファイル116内など)を示すことで、データ値を識別することができる。例えば、例示した実施形態に示すように、各タグは、レジスタマップ134によって示された、そのデータ値を記録するために割り当てられた物理レジスタを識別することができる。
各アドレス指定パターンは、オペレーション内のアドレスを指定するための情報を少なくとも一部有し得る。例えば、図4Bを手短に参照すると、例示的なアドレス指定パターン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上で)利用可能になると、読出しの投機的結果として転送されてもよい。これにより、多くの場合、読出しオペレーションの投機的な結果を使用して依存関係したオペレーションを実行できるようになり、読出しオペレーションの非投機的な結果が利用可能になるまで待たされる場合よりもオペレーションを早く実行できるようになる。
さらに、上述したように、読出しオペレーションがデータ値とリンクされる場合、メモリファイル132は、リンクの表示を読出しオペレーションのオペランドタグ情報とともにスケジューラ118に運ぶように構成されてもよい(例えば、メモリファイル132はリンクを示す状態の追加のビットを送ることができる)。読出しオペレーションがリンクされているという表示とともに、読出しオペレーションが読出し/書込みユニット126Cへ発行されると、読出しオペレーションに割り当てられたエントリ310のフラグ321は、この読出しオペレーションが依存していると予測されたものであることを示すように構成することができる。一実施形態では、依存予測ロジック303は、リンクの状態を検出し、それに応じて依存度の予測を示すことができる。しかし、別の実施形態では、依存予測ロジック303と依存度検証ロジック305とは、読出し/書き込みユニット126Cから省いてもよい。そのような実施形態では、メモリファイル132は、読出しオペレーションに関する依存予測だけを表示し得る。
図5は、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測する方法の一実施形態を例示する。図1から図4Bを総合的に参照すると、オペレーションはブロック500において開始し、このブロック500では、読出しオペレーションが読出し/書込みユニット126Cにおいて発行される。依存予測ロジック303は、発行される読出しオペレーションを受けて、読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成することができる(ブロック502)。
例えば、一実施形態では、依存予測ロジック303は、読出しの依存性を予測するよう、ローカルプレディクタ330にアクセスするように構成されてもよく、別の実施形態では、グローバルプレディクタ340あるいはハイブリッドプレディクタ350が使用されてもよい。あるいは、メモリファイル132などのその他のユニットから依存予測情報を受け取ることもできる。
読出し/書込みユニット126は、その予測に応じて、予測の種類を判定するように構成することができる(ブロック504)。読出しオペレーションが依存していると予測されれば、読出し/書き込みユニット126Cは、その読出しオペレーションよりも以前の書込みオペレーションのアドレスが計算されるまではその読出しオペレーションを実行させないように構成することができる。読出しオペレーションが独立していると予測されれば、読出し/書き込みユニット126Cは、1つ以上のそれ以前の書込みオペレーションのアドレスが計算される前にその読出しオペレーションを実行可能とするように構成することができる。
読出しオペレーションが独立していると予測されたものであるとの判定後、読出し/書き込みユニット126Cは、この読出しオペレーションが予測ミスをしたかどうかを検出するように構成することができる(ブロック510)。例えば、一実施形態では、読出し/書き込みユニット126Cは、独立していると予測されたt読出しオペレーションのアドレスが、それ以前の書込みオペレーションのアドレスと一致するかどうかを検出するように構成された、書込みから読出しへの転送コンパレータ(store-to-load forwarding comparator)を含んでもよい。予測ミスがなければ、この読出しオペレーションは、読出しオペレーションが終わると停止することができる(ブロック512)。
予測ミスが検出されれば、読出し/書き込みユニット126Cは、その予測ミスを受けて、スケジューラ118に独立していると予測された読出しオペレーションを将来的に再発行しなければならないことを示すリプレイ指示を供給するように構成することができる(ブロック514)。
読出し/書き込みユニット126Cの特徴として、ローカルプレディクタおよびグローバルプレディクタの様々な組合せを含む依存予測ロジック303の各種実施形態を説明してきたが、ある実施形態では、これらの依存予測ロジック303の変形をディスパッチユニット104などのマイクロプロセッサ100の別のユニット内に設けてもよい点に留意されたい。さらに、図3Aから図4までの実施形態を各種組合せることもできる。
例えば、ローカルプレディクタあるいはグローバルプレディクタがあってもなくても、メモリファイル134から生じる依存予測を実装することができる。
例示的コンピュータシステム
図6は、バスブリッジ902を介して様々なシステムコンポーネントに結合されたプロセッサ100を含むコンピュータシステム900の一実施形態のブロック図を示す。プロセッサ100は、上述のように読出し/書込みユニットの一実施形態を含み得る。
コンピュータシステムのその他の実施形態も可能であり、考察される。図中のシステムにおいて、メインメモリ200は、メモリバス906を介してバスブリッジ902に結合され、グラフィックコントローラ908は、AGPバス910を介してバスブリッジ902に結合される。PCIバス914を介して複数のPCIデバイス912A〜912Bがバスブリッジ902に結合される。
EISA/ISAバス920を介して1台以上のEISAデバイスまたはISAデバイス918を電気的に接続できるように、セカンダリバスブリッジ916を設けてもよい。この例では、プロセッサ100は、CPUバス924を介してバスブリッジ902に結合されるともに、任意のL2キャッシュ928にも結合されている。ある実施形態では、プロセッサ100は、一体化されたL1キャッシュ(図示せず)を含むことができる。
バスブリッジ902は、プロセッサ100、メインメモリ200、グラフィックコントローラ908、およびPCIバス914に取り付けられたデバイス間にインタフェース接続を行う。バスブリッジ902に接続されたデバイスの1つからオペレーションを受信すると、バスブリッジ902はこのオペレーションのターゲットを識別する(例えば、特定のデバイス、あるいは、PCIバス914の場合、ターゲットはPCIバス914上にある)。バスブリッジ902は、このオペレーションをターゲットのデバイスに転送する。バスブリッジ902は通常、ソースデバイス又はバスによって使用されるプロトコルから、ターゲットのデバイス又はバスによって使用されるプロトコルにオペレーションを変換する。
セカンダリバスブリッジ416は、PCIバス914に対してISA/EISAバスに電気的接続を供給すると共に、追加の機能を有することができる。セカンダリバスブリッジ916の外部に設けるか、セカンダリバスブリッジ916に内蔵した入出力コントローラ(図示せず)をコンピュータシステム900に設けて、キーボードおよびマウス922、および、各種シリアルポートおよびパラレルポートの動作をサポートしてもよい。
他の実施形態では、プロセッサ100とバスブリッジ902間のCPUバス924に、外部のキャッシュユニット(図示せず)を結合してもよい。他の形態では、外部キャッシュをバスブリッジ902に結合してもよく、この外部キャッシュのためのキャッシュ制御ロジックをバスブリッジ902に搭載してもよい。L2キャッシュ928は、プロセッサ100のバックサイド構成(backside configuration)として図示されている。
L2キャッシュ928は、プロセッサ100から独立していても、プロセッサ100とともにカートリッジ(例えば、スロット1又はスロットA)と一体化されていても、あるいは、プロセッサ100とともに半導体基板上に搭載されていてもよいという点に留意されたい。
メインメモリ200はアプリケーションプログラムの書込み先であるとともに、プロセッサ100が主な実行先のメモリである。適合可能なメインメモリ200は、DRAM(Dynamic Random Access Memory)有する。例えば、複数バンク構成のSDRAM(同期DRAM)あるいはラムバスDRAM (RDRAM)が適切であり得る。
PCIデバイス912Aおよび912Bの例に、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードあるいはフロッピイディスクドライブあるいはドライブコントローラ、SCSI(Small Computer System Interface)アダプタ、およびテレフォニーカードのような多様な周辺機器がある。同様に、ISAデバイス918の例には、モデム、サウンドカードなどの様々なタイプの周辺機器のほか、種々のデータ取得カード(GPIBあるいはフィールドバスインターフェースカード等)などがある。
グラフィックスコントローラ908は、ディスプレイ926上の文字及び画像の表示を制御するために設けられる。グラフィックスコントローラ908は、メインメモリ200内外へ効果的にシフトできる3次元データ構造をレンダリングする、当該技術分野で通常知られる代表的なグラフィックスアクセラレータを具体化してもよい。したがって、グラフィックスコントローラ908は、バスブリッジ902内のターゲットインターフェースへのアクセスを要求するとともに受取り、これによりメインメモリ200へのアクセスを取得可能であるという点でACPバス910のマスタであり得る。
専用のグラフィックスバスによって、メインメモリ200から高速にデータを取得することが可能となる。グラフィックコントローラ908はさらに、特定のオペレーションのために、AGPバス910上でPCIプロトコルを生成するように構成されてもよい。このため、バスブリッジ902のAGPインターフェースは、AGPプロトコルのトランザクションと、PCIプロトコルターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を備えることができる。
ディスプレイ926は、画像あるいは文字を表示可能な任意の電子ディスプレイである。適切なディスプレイ926には、陰極線管(“CRT;Cathode Ray Tube”)ディスプレイや液晶ディスプレイ(“LCD;Liquid Crystal Display”)等がある。
上記の説明においてAGP、PCI、およびISAバスあるいはEISAバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点に留意されたい。さらに、コンピュータシステム900は、追加のプロセッサ(コンピュータシステム900の任意の構成要素として示したプロセッサ100aなど)を備えたマルチプロセッシングコンピュータシステムであってもよいという点に留意されたい。プロセッサ100aはプロセッサ100と類似のものであってもよい。より詳細には、プロセッサ100aは、プロセッサ100と全く同一であってもよい。
プロセッサ100aは、(図6に示すように)独立したバスを介してバスブリッジ902に結合されていても、プロセッサ100との間でCPUバス924を共用してもよい。さらに、プロセッサ100aは、L2キャッシュ928と類似した任意のL2キャッシュ928aと結合することができる。
図7を参照すると、前述の読出し/書き込みユニットの実施形態を有するプロセッサ100を備え得るコンピュータシステム900の別の実施形態が示される。他の実施形態も可能であり、考察される。図7の実施形態では、コンピュータシステム900は、複数の処理ノード1012A、1012B、1012C、1012Dを備える。各処理ノードは、処理ノード1012A〜1012Dにそれぞれ設けられているメモリコントローラ1016A〜1016Dを介して各々のメモリ200A〜200Dに結合されている。
さらに、処理ノード1012A〜1012Dは、処理ノード1012A〜1012D間の通信に使用するインタフェースロジックを備える。例えば、処理ノード1012Aは、処理ノード1012Bと通信するためのインタフェースロジック1018Aと、処理ノード1012Cと通信するためのインタフェースロジック1018Bと、さらに別の処理ノード(図示せず)と通信するための第3のインタフェースロジック1018Cとを備える。
同様に、処理ノード1012Bは、インタフェースロジック1018D、1018E、1018Fを備え、処理ノード1012Cは、インタフェースロジック1018G、1018H、1018Iを備え、処理ノード1012Dは、インタフェースロジック1018J、1018K、1018Lを備える。処理ノード1012Dは、インタフェースロジック1018Lを介して複数の入出力デバイス(例えば、デイジーチェーン構成のデバイス1020A〜1020B)と通信するように結合される。
その他の処理ノードも、同様にその他のI/Oデバイスと通信してもよい。
処理ノード1012A〜1012Dは、処理ノード間で通信を行うためにパケットベースのリンクを実施している。この実施形態では、このリンクは、一方向のラインのセットとして実装される(例えば、ライン1024Aは、処理ノード1012Aから処理ノード1012Bにパケットを送信するために使用され、ライン1024Bは、処理ノード1012Bから処理ノード1012Aにパケットを送信するために使用される)。ラインのその他のセット1024C〜1024Hは、図7に示すように、その他の処理ノード間でパケットを送信するために使用される。
一般に、ライン1024の各セットは、1本以上のデータラインと、このデータラインに対応する1本以上のクロックラインと、伝達するパケットの種類を示す1本以上の制御ラインとを含み得る。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとI/Oデバイス間の通信(あるいは、バスブリッジから、PCIバスまたはISAバスなどの従来の構成のI/Oバスへの通信)で非コヒーレントな方法で動作し得る。また、図に示すように、このリンクは、I/Oデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。
1つの処理ノードから別の処理ノードに送信されるパケットが、1つ以上の中間ノードを通過し得る点に留意されたい。例えば、図7に示すように、処理ノード1012Aによって処理ノード1012Dに送信されるパケットは、処理ノード1012Bか処理ノード1012Cのいずれかを通過し得る。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。
コンピュータシステム900の別の実施形態では、処理ノードの数が、図7に示した実施形態よりも上下してもよい。
一般に、パケットは、ノード間のライン1024を伝わる1つ以上のビットタイミング(bit time)で送信できる。ビットタイミングは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりエッジとすることができる。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどがある。
処理ノード1012A〜1012Dは、メモリコントローラおよびインタフェースロジックに加えて、1つ以上のプロセッサを有していてもよい。概して、処理ノードは、少なくとも1つのプロセッサを備えており、必要に応じてメモリおよびその他のロジックと通信するためのメモリコントローラを任意に備えていてもよい。より詳細には、各処理ノード1012A〜1012Dは、プロセッサ100のコピーを1つ以上備えていてもよい。外部インタフェースユニットは、メモリコントローラ1016のほかに、ノード内にインタフェースロジック1018を備え得る。
メモリ200A〜200Dは任意の好適なメモリ素子を含んでいてもよい。例えば、メモリ200A〜200Dは、1つ以上のラムバスDRAM(RDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAMなどを含んでいてもよい。コンピュータシステム900のアドレス空間は、メモリ200A〜200Dに分割されている。各処理ノード1012A〜1012Dは、アドレスとメモリ200A〜200Dとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード1012A〜1012Dの決定に用いるメモリマップを備えていてもよい。
一実施形態では、コンピュータシステム900内のアドレスのコヒーレンシポイント(coherency point)は、そのアドレスに対応しているバイトを記録しているメモリに結合されたメモリコントローラ1016A〜1016Dである。換言すれば、メモリコントローラ1016A〜1016Dは、対応するメモリ200A〜200Dへの各メモリアクセスが、キャッシュコヒーレントな方法で行われることを保証する責任を負っている。メモリコントローラ1016A〜1016Dは、メモリ200A〜200Dとインタフェース接続するための制御回路を備え得る。さらに、メモリコントローラ1016A〜1016Dは、メモリ要求を待ち行列に入れるための要求キューを備えていてもよい。
インタフェースロジック1018A〜1018Lは、リンクからパケットを受信すると共に、リンクに送信するパケットをバッファするための各種バッファを備え得る。コンピュータシステム900は、パケットを送信するための任意の適切なフロー制御メカニズムを使用することができる。例えば、一実施形態では、各インタフェースロジック1018は、そのインタフェースロジックに接続されているリンクの反対側にある受信装置内の各種バッファの数のカウントを記録している。インタフェースロジックは、パケットを記録するための空きバッファが受信側のインタフェースロジックになければパケットを送信しない。パケットを前方にルーティングしたことで受信側のバッファに空きが生ずると、受信側のインタフェースロジックは、バッファに空きが生じたことを知らせるメッセージを、送信側のインタフェースロジックに送信する。このようなメカニズムは、「クーポンベースの」システムと呼ぶことができる。
I/Oデバイス1020A〜1020Bは、適したI/Oデバイスであれば、どのようなものであってもよい。例えば、I/Oデバイス1020A〜1020Bは、別のコンピュータシステムに結合され、そのコンピュータシステムと通信するための装置(ネットワークインタフェースカードやモデムなど)を含んでいてもよい。また、I/Oデバイス1020A〜1020Bは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、SCSI(Small Computer Systems Interface)アダプタ、テレフォニーカード、サウンドカード、およびGPIBインタフェースカードまたはフィールドバスインタフェースカードなどの様々なデータ収集カードを含んでいてもよい。本明細書において、「I/Oデバイス」との用語と「周辺機器」との用語は同義であるとされる点に留意されたい。
本明細書中で使用されるように、「クロックサイクル」との用語は、命令処理パイプラインの各種ステージがタスクを完了する時間間隔を指す。クロックサイクルを定義しているクロック信号に従って、命令および計算値がメモリ素子(レジスタまたはアレイなど)によって取得される。例えば、メモリ素子が、クロック信号の立ち上がりまたは立ち下がりエッジに従って値を取得し得る。
これまでに述べてきた考察は、信号を“アサートされた(asserted)”ものとして説明するものである。ある信号が、情報のある特定の一部を示す値を伝送する場合、その信号は“アサートされる”として定義することができる。特定の信号がバイナリ1の値を伝送する場合、あるいは他の形態では、バイナリ0の値を伝送する場合、その特定の信号は“アサートされる”として定義することができる。
上記の開示を完全に理解できれば、当業者にとって数多くの変形例および変更例が明らかとなるであろう。添付の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
概して、本発明はプロセッサの分野に応用可能である。
一実施形態によるプロセッサを例示したブロック図。 一実施形態による読出し/書き込みユニットを例示したブロック図。 ローカルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。 グローバルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。 ハイブリッドプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。 ディスパッチユニットの一実施形態を例示したブロック図。 一実施形態による例示的アドレス指定パターンを例示したブロック図。 所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測する方法の一実施形態を例示したフローチャート。 一実施形態による例示的コンピュータシステムを例示したブロック図。 別の実施形態による例示的コンピュータシステムを例示したブロック図。

Claims (6)

  1. オペレーションを発行するように構成されたスケジューラ(118)と、
    前記スケジューラ(118)によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し/書込みユニット(126C)と、を含み、
    前記読出し/書込みユニット(126C)は、グローバルヒストリレジスタ(342)と複数のグローバルプレディクタエントリ(345)とを備えたグローバルプレディクタ(340)を含み、前記グローバルヒストリレジスタ(342)は、実行された複数の読出しオペレーションのそれぞれが、それ以前の書込みオペレーションに依存していたかどうかを示す、又は前記実行された複数の読出しオペレーションのそれぞれが前記それ以前の書込みオペレーションに依存すると予測されていたかどうかを示す複数の依存値を記録するように構成され、少なくとも前記実行された複数の読出しオペレーションのうちの2つは異なる読出しオペレーションであり、
    前記読出し/書込みユニット(126C)はさらに、
    記グローバルヒストリレジスタ(342)に記録された異なる前記実行された複数の読出しオペレーションに対応する2つ以上の前記複数の依存値に応じて、所与の読出しオペレーションに対して所与の前記複数のグローバルプレディクタエントリ(345)のうちの一つを選択し、
    前記所与のグローバルプレディクタエントリ(345)に応じて、前記所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、
    前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
    前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたかどうかを検出し、
    前記所与の読出しオペレーションが予測ミスしたとの検出に応答して、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラに送るように構成されている、マイクロプロセッサ(100)。
  2. 前記読出し/書込みユニット(126C)は、複数のローカルプレディクタエントリ(335)を備えたローカルプレディクタ(330)を含み、前記複数のローカルプレディクタエントリ(335)の各々は、依存予測値(337)を含み、前記読出し/書込みユニット(126C)はさらに、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ(335)にアクセスし、前記所与のローカルプレディクタエントリ(335)に含まれる所与の依存予測値(337)を評価することで前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項1に記載のマイクロプロセッサ(100)。
  3. 前記読出し/書込みユニット(126C)は、
    各々が依存予測値(337)を含む複数のローカルプレディクタエントリ(335)を備えたローカルプレディクタ(330)を含み、
    前記読出し/書込みユニット(126C)はさらに、
    前記所与の読出しオペレーションがその他の読出しオペレーションの動作によって依存動作が変化する動的な読出しオペレーションであるかどうかを判定し、
    前記所与の読出しオペレーションが動的な読出しオペレーションでないという前記判定を受けて、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ(335)にアクセスし、前記所与のローカルプレディクタエントリ(335)に含まれるローカル依存予測値(337)を評価し、かつ、
    前記所与の読出しオペレーションが動的読出しオペレーションであるという前記判定を受けて、前記グローバルヒストリレジスタ(342)に応じて、前記所与の読出しオペレーションに対して所与のグローバルプレディクタエントリ(345)を選択するとともに前記所与のグローバルプレディクタエントリ(345)に含まれるグローバル依存予測値を評価する、
    ことで、前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項1に記載のマイクロプロセッサ(100)。
  4. 読出しオペレーションを受信するステップと、
    前記読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するステップと、
    前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記読出しオペレーションを実行するステップと、
    前記読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記読出しオペレーションが予測ミスしたかどうかを検出するステップと、
    前記読出しオペレーションが予測ミスしたという検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示をスケジューラ(118)に送るステップ、とを含み、
    前記読出しオペレーションが前記より以前の書込みオペレーションに依存しているかどうかを予測するステップは、
    ローバルヒストリレジスタ(342)に記録された2つ以上の依存値に応じて前記読み出しオペレーションに対する複数のグローバルプレディクタエントリ(345)のうちの所与の一つを選択するステップと、
    前記複数のグローバルプレディクタエントリ(345)のうちの所与の一つに含まれる依存予測値(347)を評価するステップとを含み、
    前記グローバルヒストリレジスタ(342)は、実行された複数の読出しオペレーションのそれぞれが、それ以前の書込みオペレーションに依存していたかどうかを示す、又は前記実行された複数の読出しオペレーションのそれぞれが前記それ以前の書込みオペレーションに依存すると予測されていたかどうかを示す複数の依存値を記録するように構成されており、
    前記2つ以上の依存値はそれぞれ異なる実行された読出しオペレーションの依存動作を示すものである、方法。
  5. 前記読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、
    前記読出しオペレーションがその他の読出しオペレーションの動作によって依存動作が変化する動的な読出しオペレーションであるかどうかを判定するステップを含み、
    前記読出しオペレーションが動的な読出しオペレーションではないという前記判定を受けて、前記読出しオペレーションに対応するローカルプレディクタエントリ(335)にアクセスし、前記ローカルプレディクタエントリ(335)に含まれるローカル依存予測値(337)の評価を行うとともに、
    前記読出しオペレーションが動的な読出しオペレーションであるという前記判定を受けて、前記グローバルヒストリレジスタ(342)に依存したグローバルグローバルプレディクタエントリ(345)を選択し、前記グローバルプレディクタエントリ(345)に含まれるグローバル依存予測値(347)を評価し、前記実行された複数の読出しオペレーションの2つ以上に応じて前記依存予測値が決定される、請求項4に記載の方法。
  6. メモリ(200)と、
    前記メモリ(200)に結合されたプロセッサ(100)と、を含み、前記プロセッサ(100)は、
    オペレーションを発行するように構成されたスケジューラ(118)、および、
    前記スケジューラ(118)によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し/書込みユニット(126C)を含み、
    前記読出し/書込みユニット(126C)はグローバルヒストリレジスタ(342)および複数のグローバルプレディクタエントリ(345)を備えたグローバルプレディクタ(340)を含み、
    前記グローバルヒストリレジスタ(342)は実行された複数の読出しオペレーションのそれぞれが、それ以前の書込みオペレーションに依存していたかどうかを示す、又は前記実行された複数の読出しオペレーションのそれぞれが前記それ以前の書込みオペレーションに依存すると予測されていたかどうかを示す各々の複数の依存値を記録するように構成され、少なくとも前記実行された複数の読出しオペレーションのうちの2つは異なる読出しオペレーションであり、
    前記読出し/書込みユニット(126C)はさらに、
    記グローバルヒストリレジスタ(342)に記録された異なる前記実行された複数の読出しオペレーションに対応する2つ以上の前記複数の依存値に応じて所与の読出しオペレーションに対して所与の前記複数のグローバルプレディクタエントリ(345)のうちの一つを選択し、
    所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを前記所与のグローバルプレディクタエントリに応じて予測し、
    前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているとの予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
    前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたかどうかを検出し、
    前記所与の読出しオペレーションが予測ミスしたことの検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラ(118)に送るように構成されている、コンピュータシステム。
JP2007531161A 2004-09-08 2005-06-23 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ Active JP5294632B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/936,296 US7415597B2 (en) 2004-09-08 2004-09-08 Processor with dependence mechanism to predict whether a load is dependent on older store
US10/936,296 2004-09-08
PCT/US2005/022426 WO2006028555A2 (en) 2004-09-08 2005-06-23 Processor with dependence mechanism to predict whether a load is dependent on older store

Publications (2)

Publication Number Publication Date
JP2008512769A JP2008512769A (ja) 2008-04-24
JP5294632B2 true JP5294632B2 (ja) 2013-09-18

Family

ID=35159735

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007531161A Active JP5294632B2 (ja) 2004-09-08 2005-06-23 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ

Country Status (8)

Country Link
US (1) US7415597B2 (ja)
JP (1) JP5294632B2 (ja)
KR (1) KR101192814B1 (ja)
CN (1) CN100524206C (ja)
DE (1) DE112005002173B4 (ja)
GB (1) GB2432693B (ja)
TW (1) TWI383320B (ja)
WO (1) WO2006028555A2 (ja)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2881246B1 (fr) * 2005-01-21 2007-03-23 Meiosys Soc Par Actions Simpli Procede perdictif de gestion, de journalisation ou de rejeu d'operations non deterministes au sein du deroulement d'un processus applicatif
US7590825B2 (en) * 2006-03-07 2009-09-15 Intel Corporation Counter-based memory disambiguation techniques for selectively predicting load/store conflicts
JP5145809B2 (ja) * 2007-07-31 2013-02-20 日本電気株式会社 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム
US20090138890A1 (en) * 2007-11-21 2009-05-28 Arm Limited Contention management for a hardware transactional memory
US8285947B2 (en) * 2009-02-06 2012-10-09 Apple Inc. Store hit load predictor
US8464029B2 (en) * 2009-05-29 2013-06-11 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
US20100325395A1 (en) * 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
CN101907984B (zh) * 2009-08-07 2014-10-29 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
CN101944012B (zh) * 2009-08-07 2014-04-23 威盛电子股份有限公司 指令处理方法以及其所适用的超纯量管线微处理器
US8601240B2 (en) * 2010-05-04 2013-12-03 Oracle International Corporation Selectively defering load instructions after encountering a store instruction with an unknown destination address during speculative execution
US8918625B1 (en) 2010-11-24 2014-12-23 Marvell International Ltd. Speculative scheduling of memory instructions in out-of-order processor based on addressing mode comparison
US9442735B1 (en) * 2012-04-13 2016-09-13 Marvell International Ltd. Method and apparatus for processing speculative, out-of-order memory access instructions
US9128725B2 (en) * 2012-05-04 2015-09-08 Apple Inc. Load-store dependency predictor content management
US9600289B2 (en) 2012-05-30 2017-03-21 Apple Inc. Load-store dependency predictor PC hashing
US9384002B2 (en) * 2012-11-16 2016-07-05 International Business Machines Corporation Speculative finish of instruction execution in a processor core
US9158691B2 (en) 2012-12-14 2015-10-13 Apple Inc. Cross dependency checking logic
US9141803B2 (en) 2013-02-26 2015-09-22 Microsoft Technology Licensing, Llc Self-healing of operating system components
US9619750B2 (en) * 2013-06-29 2017-04-11 Intel Corporation Method and apparatus for store dependence prediction
US9524164B2 (en) 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
US9286073B2 (en) * 2014-01-07 2016-03-15 Samsung Electronics Co., Ltd. Read-after-write hazard predictor employing confidence and sampling
US9710268B2 (en) 2014-04-29 2017-07-18 Apple Inc. Reducing latency for pointer chasing loads
US10514925B1 (en) 2016-01-28 2019-12-24 Apple Inc. Load speculation recovery
US10437595B1 (en) 2016-03-15 2019-10-08 Apple Inc. Load/store dependency predictor optimization for replayed loads
US20170329607A1 (en) * 2016-05-16 2017-11-16 International Business Machines Corporation Hazard avoidance in a multi-slice processor
US10528353B2 (en) 2016-05-24 2020-01-07 International Business Machines Corporation Generating a mask vector for determining a processor instruction address using an instruction tag in a multi-slice processor
US10467008B2 (en) 2016-05-31 2019-11-05 International Business Machines Corporation Identifying an effective address (EA) using an interrupt instruction tag (ITAG) in a multi-slice processor
US10740107B2 (en) * 2016-06-01 2020-08-11 International Business Machines Corporation Operation of a multi-slice processor implementing load-hit-store handling
US10684859B2 (en) * 2016-09-19 2020-06-16 Qualcomm Incorporated Providing memory dependence prediction in block-atomic dataflow architectures
CN108920191B (zh) * 2018-06-05 2020-11-20 上海兆芯集成电路有限公司 处理器电路及其操作方法
US11243774B2 (en) 2019-03-20 2022-02-08 International Business Machines Corporation Dynamic selection of OSC hazard avoidance mechanism
US10929142B2 (en) * 2019-03-20 2021-02-23 International Business Machines Corporation Making precise operand-store-compare predictions to avoid false dependencies
US10606603B1 (en) * 2019-04-08 2020-03-31 Ye Tao Methods and apparatus for facilitating a memory mis-speculation recovery
US20220121447A1 (en) * 2021-12-23 2022-04-21 Intel Corporation Hardening cpu predictors with cryptographic computing context information

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5666506A (en) * 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
JPH11212788A (ja) * 1998-01-28 1999-08-06 Toshiba Corp プロセッサのデータ供給装置
US6658554B1 (en) * 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6542984B1 (en) * 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
JP3729087B2 (ja) * 2001-05-23 2005-12-21 日本電気株式会社 マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US7024545B1 (en) * 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US7028166B2 (en) * 2002-04-30 2006-04-11 Advanced Micro Devices, Inc. System and method for linking speculative results of load operations to register values
US7058795B2 (en) * 2002-06-25 2006-06-06 Intel Corporation Method and apparatus of branch prediction
US6944744B2 (en) 2002-08-27 2005-09-13 Advanced Micro Devices, Inc. Apparatus and method for independently schedulable functional units with issue lock mechanism in a processor
US6950925B1 (en) * 2002-08-28 2005-09-27 Advanced Micro Devices, Inc. Scheduler for use in a microprocessor that supports data-speculative execution
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7165167B2 (en) * 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism

Also Published As

Publication number Publication date
TW200620118A (en) 2006-06-16
DE112005002173T5 (de) 2007-09-27
DE112005002173B4 (de) 2009-04-16
US7415597B2 (en) 2008-08-19
US20060095734A1 (en) 2006-05-04
GB0704887D0 (en) 2007-04-18
KR101192814B1 (ko) 2012-10-18
GB2432693A (en) 2007-05-30
GB2432693B (en) 2008-03-12
WO2006028555A3 (en) 2006-08-10
WO2006028555A2 (en) 2006-03-16
KR20070068351A (ko) 2007-06-29
JP2008512769A (ja) 2008-04-24
CN101014934A (zh) 2007-08-08
CN100524206C (zh) 2009-08-05
TWI383320B (zh) 2013-01-21

Similar Documents

Publication Publication Date Title
JP5294632B2 (ja) 読出しが以前の書込みに依存しているかどうかを予測する依存性メカニズムを備えたプロセッサ
JP4105684B2 (ja) ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
JP4538462B2 (ja) 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機
US7133969B2 (en) System and method for handling exceptional instructions in a trace cache based processor
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
US6622237B1 (en) Store to load forward predictor training using delta tag
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
US6694424B1 (en) Store load forward predictor training
KR101093784B1 (ko) 리플레이 메커니즘을 구비한 로드 저장 유닛
JP4624988B2 (ja) データ推測マイクロプロセッサにおいて実行中のオペレーションのインスタンスがオペレーションのリプレイの割込みを防ぐためのシステム及び方法
US8799628B2 (en) Early branch determination
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
JP4745960B2 (ja) マイクロプロセッサにおいてデータ推測オペレーションを識別する推測ポインタ
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080604

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

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110719

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110803

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111102

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111110

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20111201

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20111208

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120104

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120112

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120202

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120905

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20121205

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20121212

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130107

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130115

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130205

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130305

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130522

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130611

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5294632

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250