JP2007504575A - 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 - Google Patents

二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 Download PDF

Info

Publication number
JP2007504575A
JP2007504575A JP2006536513A JP2006536513A JP2007504575A JP 2007504575 A JP2007504575 A JP 2007504575A JP 2006536513 A JP2006536513 A JP 2006536513A JP 2006536513 A JP2006536513 A JP 2006536513A JP 2007504575 A JP2007504575 A JP 2007504575A
Authority
JP
Japan
Prior art keywords
addressing pattern
stack
memory
register
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2006536513A
Other languages
English (en)
Other versions
JP4538462B2 (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 JP2007504575A publication Critical patent/JP2007504575A/ja
Application granted granted Critical
Publication of JP4538462B2 publication Critical patent/JP4538462B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline 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
    • 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

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)
  • Executing Machine-Instructions (AREA)

Abstract

システムは、メモリファイル(136)と実行コア(124)とを備え得る。メモリファイル(136)は、アドレス指定パターン(406)およびタグ(408)を記憶するように構成されたエントリ(420)を有し得る。メモリファイル(136)は、メモリオペレーションのアドレス指定パターンとエントリ(420)に記憶されているアドレス指定パターン(406)とが一致する場合に、タグ(408)が識別するデータ値をメモリオペレーションの投機的な結果にリンクするように構成され得る。メモリオペレーションのアドレス指定パターンは論理レジスタの識別子を含み、メモリファイル(136)は、メモリオペレーションのアドレス指定パターンとエントリ(420)に記憶されているアドレス指定パターン(406)とが一致するかどうかを判定するために、論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかを予測するように構成され得る。実行コア(124)は、このメモリオペレーションに依存する別のオペレーションを実行するときに、投機的な結果にアクセスするように構成され得る。

Description

本発明は、マイクロプロセッサの分野に関し、より詳細には、マイクロプロセッサにおいてデータ投機的実行を行うことに関する。
スーパースカラマイクロプロセッサは、複数の命令を同時に実行すると共に、その設計と整合した可能な最短のクロックサイクルを使用することで高性能を達成している。しかし、命令間でのデータと制御のフローの依存性により、所定の時間に発行可能な命令の数が制限されることがある。この結果、一部のマイクロプロセッサでは、パフォーマンスの一層の向上を達成するために、投機的実行に対応している。
投機の一種に、制御フローの投機がある。制御フローの投機では、プログラムの制御が進行する方向を予測する。例えば、分岐が成立するかどうかを予測するために分岐予測が使用され得る。多くの種類の分岐予測が利用可能であり、これには、毎回ただ同じ予測をする方法から、履歴に基づいた予測を行うために、過去に行った分岐の高度な履歴をプログラム内に保持する方法まで多岐にわたる。分岐予測は、ハードウェアの最適化、コンパイラによる最適化、またはこの両者によって行うことができる。分岐予測メカニズムが行う予測に基づいて、命令が投機的にフェッチおよび実行され得る。分岐命令を最終的に評価する際に、分岐命令を検証することができる。予測が正しくなかった場合、誤った予測に基づいて投機的に実行された命令は破棄され得る。
提唱されている別の種類の投機に、データの投機がある。例えば、データ項目の値を予測する値予測では、データのパターンを観察し、そのパターンを予測のベースとすることが行われる(例えば、インデックスカウンタ変数の値が、その変数が以前取っていた値がどのようにインクリメントまたはデクリメントされるかを観察することによって予測できる)。アドレス予測では、データの位置の予測が行われる。さらに別の種類のデータ投機に、メモリシステムオプティミズム(optimism)と呼ばれる手法がある。マルチプロセッサシステムでは、メモリシステムオプティミズムは、コヒーレンシチェックが完了する前に、プロセッサがそのプロセッサのローカルキャッシュにあるデータを使用して命令を投機的に実行する場合に行われる。同様に、別の種類のデータ投機では、ロードがアクセスするアドレスと同じアドレスに、ストアがデータをストアする可能性がある場合であっても、そのロードの実行時にまだ計算されていないアドレスを有するストアに先行して、ロードを投機的に実行することができるようにする。上記に挙げた種類のデータ投機の全てにおいて、基礎をなす条件が最終的に評価されて、これにより、投機の検証または取り消しが可能となる。投機が結局誤っていた場合、投機的なデータを使用して実行された命令が、(例えば、更新したデータおよび/または非投機的なデータを使用して)再実行され得る。
投機によって、依存性のチェックが完了する前に実行が進行するようになるため、正しい投機から得られる性能向上が、誤った投機による性能損失を上回れば、大幅なパフォーマンスの向上を達成することができる。したがって、マイクロプロセッサにおいてデータ投機を実行できるようにすると共に、投機ミスに対する効率的な回復メカニズムを提供することが望ましい。
多くのプロセッサは、動作中に、「スタック」と呼ばれるメインメモリの一部を使用できるようにする必要がある。初期のx86マイクロプロセッサでは、例外および割り込みの処理中に、スタックを使用して状態情報を保存していた。メインメモリのスタック部分にあるメモリ位置には、スタックセグメントとスタックポインタ(SS:SPまたはSS:ESP)のレジスタ対を使用してアクセスすることができる。16ビットのSS(スタックセグメント)レジスタは、メインメモリのスタックを含む部分のベースアドレス(すなわちスタックの「最下位」のアドレス)を定義している。16ビットのSP(スタックポインタ)レジスタは、スタックの現在の「最上位」について、ベースアドレスからのオフセットを示し得る。これより新しいx86プロセッサは、32ビットESP(拡張スタックポインタ)レジスタを有する。
スタックは、後入れ先出し(LIFO)記憶メカニズムとして実施されている。スタックの最上位は、最後にスタックに記憶されたデータを格納している記憶場所である。データがスタックに「プッシュ」され(すなわち、スタックの最上位に記憶され)、スタックから「ポップ」される(すなわち、スタックの最上位から取り出される)。データがスタックにプッシュされると、通常はESPレジスタがデクリメントされる。換言すれば、x86スタックは、通常はベースアドレスから下に向かって伸びていく。スタックがポップされるときに、取り出されるデータは、スタックに最後にプッシュされたデータとなる。
x86アーキテクチャでは、ソフトウェアプログラムの実行中に操作されるデータを記憶するために用いることができるレジスタが比較的少ない。この結果、ソフトウェアプログラムの実行中に使用されるデータが、頻繁にスタックに記憶される。このため、スタックに記憶されているデータへのアクセスのし易さが、高性能のマイクロプロセッサを実現するうえで特に重要となる。一方、スタックは、メインメモリの一部であり、メインメモリへのアクセスは比較的低速である。このため、メインメモリのスタック部分へのアクセスを高速化することが望ましい。
ロードオペレーションの投機的な結果をレジスタ値にリンクさせる方法および装置の各種実施形態が、異なるオペレーションに含まれるアドレス指定パターンを比較することによって実施され得る。一実施形態では、システムは、メモリファイルと実行コアとを備え得る。メモリファイルは、アドレス指定パターンおよびタグを記憶するように構成されたエントリを有し得る。メモリファイルは、メモリオペレーション(すなわちメモリ内のアドレスに対して値をロードおよび/またはストアするオペレーション)のアドレス指定パターンと、エントリに記憶されているアドレス指定パターンとが一致する場合に、タグが識別するデータ値をメモリオペレーションの投機的な結果にリンクするように構成され得る。メモリオペレーションのアドレス指定パターンは論理レジスタの識別子を含み、メモリファイルは、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが一致するかどうかを判定するために、論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかを予測するように構成され得る。実行コアは、このメモリオペレーションに依存する別のオペレーションを実行するときに、投機的な結果にアクセスするように構成され得る。
一部実施形態では、メモリファイルが、メモリオペレーションのアドレス指定パターンに含まれる論理レジスタがスタックフレームポインタレジスタとして使用されると予測する場合に、メモリファイルは、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが一致しないと判定し得る。これに対して、メモリファイルが、論理レジスタが汎用レジスタとして使用されると予測する場合に、メモリファイルは、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが等しければ、メモリオペレーションのアドレス指定パターンとエントリに記憶されている前記アドレス指定パターンとが一致していると判定し得る。メモリファイルが、メモリオペレーションのアドレス指定パターンに含まれる論理レジスタがスタックフレームポインタレジスタとして使用されると予測する場合に、メモリファイルは、メモリオペレーションのアドレス指定パターンを記憶するための新しいエントリを割り当てないようにも構成され得る。しかし、メモリファイルが、論理レジスタが汎用レジスタとして使用されると予測する場合に、メモリファイルは、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが等しければ、メモリオペレーションのアドレス指定パターンを記憶するための新しいエントリを割り当てるように構成され得る。
多くの実施形態では、メモリファイルは、数個のエントリを有し得る。メモリファイルが、論理レジスタがスタックフレームポインタレジスタとして使用されると予測する場合に、メモリファイルは、メモリオペレーションのアドレス指定パターンが、どのエントリに記憶されているアドレス指定パターンとも一致しないと判定するように構成され得る。
一実施形態では、メモリファイルは、呼び出し命令またはエンター(enter)命令が検出されると、論理レジスタがスタックフレームポインタレジスタとして使用されると予測するように構成され得る。また、メモリファイルは、リターン命令またはリーブ(leave)命令が検出されると、論理レジスタが汎用レジスタとして使用されると予測するようにも構成され得る。
別の実施形態では、メモリファイルは、現在の呼び出し深さを追跡することによって論理レジスタがどのように使用されるかを予測するように構成され得る。メモリファイルは、コール命令が検出されると現在の呼び出し深さを増加させ、リターン命令が検出されると現在の呼び出し深さを減少させるように構成され得る。初期値以外の値は全て、1つ以上のサブルーチン呼出しが行われたことによる現在のサブルーチンの呼び出し深さを示し得る。エントリが割り当てられたときに、エントリの呼び出し深さに、現在の呼び出し深さの値が記憶され得る。メモリファイルは、メモリオペレーションの処理時の現在の呼び出し深さが、エントリに記憶されている呼び出し深さと一致しない場合に、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが一致しないと判定するように構成され得る。
メモリファイルは、メモリオペレーションの処理時の現在の呼び出し深さが、エントリに記憶されている呼び出し深さと一致する場合に、メモリオペレーションのアドレス指定パターンとエントリに記憶されているアドレス指定パターンとが等しければ、メモリオペレーションのアドレス指定パターンとエントリに記憶されている前記アドレス指定パターンとが一致していると判定するように構成され得る。メモリファイルは、メモリオペレーションの処理時の現在の呼び出し深さが、エントリに記憶されている呼び出し深さと一致する場合に、そのメモリオペレーションのアドレス指定パターンを記憶するための新しいエントリを割り当て、メモリオペレーションの処理時の現在の呼び出し深さの値をその新しいエントリに記憶するように構成され得る。
メモリファイルは、エントリに記憶されているアドレス指定パターンが論理レジスタを識別しており、メモリオペレーションの処理時の現在の呼び出し深さが、エントリに記憶されている呼び出し深さと一致する場合、実行されると論理レジスタの値を変更するオペレーションがディスパッチされると、そのエントリを無効にするように構成され得る。しかし、メモリファイルは、メモリオペレーションの処理時の現在の呼び出し深さが、エントリに記憶されている呼び出し深さと一致しない場合には、オペレーションがディスパッチされても、そのエントリを無効にしないように構成され得る。
一部実施形態では、メモリファイルは、スタック−相対アドレス指定パターンと非スタック−相対アドレス指定パターンとを追跡し得る。例えば、一実施形態では、メモリファイルは、スタック−相対アドレス指定パターンを記憶するエントリを有し得る。メモリファイルは、オペレーションのアドレス指定パターンとエントリに記憶されているスタック−相対アドレス指定パターンとが一致するかどうかを判定する際に、スタックポインタに対する調整を補正するためのメカニズムを使用するように構成され得る。例えば、メモリファイルは、実行されるとスタックフレームポインタの値を変更するオペレーションがディスパッチされると、エントリに記憶されている変位を変更して、スタックポインタに対する調整を補正するように構成され得る。別の実施形態では、メモリファイルは、新しいオペレーションのアドレス指定パターンとエントリに記憶されているスタック−相対アドレス指定パターンとを比較する前に、アドレス指定パターン調整値を変更して、このアドレス指定パターン調整値を新しいオペレーションのアドレス指定パターンに適用することで、スタックポインタに対する調整を補正するように構成され得る。
一部実施形態では、システムは、スタックファイルとメモリファイルとを有し得る。スタックファイルは、オペレーションのアドレス指定パターンが、スタックファイルのどのエントリに記憶されているアドレス指定パターンとも一致せず、かつオペレーションのアドレス指定パターンが論理レジスタの識別子を含む場合、オペレーションのアドレス指定パターンを記憶するための新しいエントリを割り当てるように構成され得る。メモリファイルも、この同じオペレーションを受けてエントリを割り当て得る。別の実施形態では、メモリファイルは、論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかの予測に応じてオペレーションにエントリを選択的に割り当て得る。メモリファイルは、アドレス指定パターンにスタックポインタレジスタの識別子を含むメモリファイルエントリには一切エントリを割り当てないが、スタックファイルはこのようなオペレーションにエントリを常に割り当て得る。一実施形態では、スタックファイルは、スタックポインタのアドレス指定パターン調整値とスタックフレームポインタのアドレス指定パターン調整値とを保持し得る。メモリファイルは、論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかを、スタックフレームポインタのアドレス指定ポインタ調整値が有効かどうかに基づいて予測するように構成され得る。
方法の一実施形態は、メモリオペレーションのアドレス指定パターンにおいて識別される論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして使用されるかを予測するステップと、この予測に応じて、メモリオペレーションのアドレス指定パターンと以前のオペレーションのアドレス指定パターンとが一致するかどうかを判定するステップと、前記メモリオペレーションの前記アドレス指定パターンと以前のオペレーションのアドレス指定パターンとが一致する場合に、前記以前のオペレーションのオペランドのタグが識別するデータ値を前記メモリオペレーションの投機的な結果にリンクするステップと、タグが識別するデータ値にアクセスすることにより、メモリオペレーションの結果に依存するオペランドソースを有するオペレーションを実行するステップと、を実行し得る。
本発明は、添付の図面を考慮して以下の詳細な説明を読めば、よりよく理解することができる。
本発明は、様々に変形及び他の形態をとり得るが、その特定の実施形態は、例として図面に図示され、かつ本明細書に詳細に記載される。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことを意図することが理解されるべきである。本明細書中に使用されている見出しは、分類のみを意図しており、本明細書または特許請求の範囲を限定するものではない。さらに、本願にわたり「し得る、してもよい(may)」との用語は許容の意味(すなわち、可能性があること、できること)に用いられ、義務的な意味(すなわち必須)の意味には用いられていない点に留意されたい。「含む、備える(include)」との用語ならびにその派生語は、「含むがこれに限定されない」ことを意味する。「接続されている(connected)」との用語は、「直接的または間接的に接続されている」ことを意味し、「結合されている(coupled)」との用語は、「直接的または間接的に結合されている」ことを意味する。
図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は、先入先出構成で実施され得、この構成では、オペレーションはその妥当性が検証されるとバッファの「一番下」に移動し、キューの「先頭」に新しいエントリが入ることができる空きが生じる。オペレーションがリタイアされると、リタイアキュー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)によってこのデータ値を受け取るために使用することができる。オペランドがメモリ位置に対応している場合、このオペランド値が、ロード/ストアユニット222を介して(結果転送および/またはレジスタファイル116内の記憶領域のため)結果バスに提供され得る。このオペレーションがスケジューラ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とを、統合したキャッシュとして実施してもよい。
(スタック領域)
マイクロプロセッサ100がサポートする1つの論理レジスタ(x86アプリケーションにおけるSSなどのスタックセグメントレジスタなど)が、メモリ200のスタック領域のベースアドレスを識別し得る。別の論理レジスタ(ESPなど)が、スタックポインタレジスタとして用いられ、スタック領域の現在の最上位を識別し得る。スタックの現在の最上位のアドレスは、スタック領域のベースアドレスと、スタックポインタレジスタに指定されているスタック内でのオフセットとを組み合わせることで得られる。このアドレスは、スタックに値をプッシュしたり、スタックから値をポップするために使用することができる。
命令の中には、1つ以上のレジスタの内容をスタックに「プッシュ」させるものがある。例えば、サブルーチンの呼出し中に、1つ以上の論理レジスタに現在格納されている内容が、メモリのスタック領域にプッシュされ得る。プッシュ命令は、スタックポインタを変更し、続いて、変更後のスタックポインタが指すようになったスタックの最上位に、データ値をストアする。例えば、x86の実施形態では、プッシュ命令は、スタックにプッシュしようとしているオペランドのサイズに相当する分だけスタックポインタレジスタの値をデクリメントして、この変更後の値を使用してスタックの最上位にオペランド値をストアし得る。同様に、ポップ命令は、スタックの最上位からレジスタまたはメモリ位置にオペランドをロードしたのち、新たなスタックの最上位をポイントするようにスタックポインタを変更し、事実上ポップされたオペランドをスタックからに除去する。サブルーチンが終了したら、サブルーチンの開始時に保存した値がスタックからポップされて、レジスタファイル116内の適切な位置に戻され得る。
サブルーチンは、プロシージャ、割り込み処理ルーチンまたは例外処理ルーチンであり得る。レジスタ値の一部(リターンアドレスを示すコードセグメントレジスタ値および/または命令ポインタレジスタ値など)は、サブルーチンコール命令の実行時に自動的に保存され得る。それ以外のレジスタ値は、呼び出し元のサブルーチン内の特定のストア命令が実行されるか、またはサブルーチンが開始されるときに保存され得る(例えば、“PUSH EAX”または“MOV [EBP - 2], EAX”によってEAXの値が保存される)。
リターン命令が実行されると、特定のレジスタ値がスタックから自動的にポップされ得る。その他のレジスタ値は、サブルーチン中のポップ命令またはストア命令を受けて、スタックからポップされ得る。一部実施形態では、マイクロプロセッサは、実行されると、全ての論理レジスタ値をスタックにプッシュするか、スタックからポップするか、この両方を行う命令をサポートしてもよい。割り込みと例外によっても、レジスタ値がスタックにプッシュされることがある点に留意されたい。
各サブルーチンは、関連するスタックフレームをスタック領域内に有し得、ここには、そのサブルーチンに渡されるローカル変数とパラメータが記憶される。現在のサブルーチンのスタックフレームのベースアドレスを示すスタックフレームポインタとして、ベースポインタレジスタ(EBPなど)が使用され得る。サブルーチン内の命令は、サブルーチンに渡すパラメータおよびサブルーチン内で使用されるローカル値へのアクセスに使用されるアドレス指定パターンを有するスタックフレームポインタを使用し得る。一実施形態では、パラメータにアクセスするには、スタックフレームポインタに対し正のオフセットを使用し、ローカル変数にアクセスするには、スタックフレームポインタに対し負のオフセットを使用し得る。
このように、スタック−相対アドレス指定パターンは、スタックポインタレジスタかスタックフレームポインタレジスタのいずれかを使用して指定することができる。呼び出し元のルーチンがスタックにプッシュしたパラメータ値は、スタックポインタを使用してアドレス指定することができる。呼び出し先のサブルーチン内のパラメータ値には、スタックフレームポインタを使用してアドレス指定してアクセスすることができる。サブルーチンが呼び出されると、スタックフレームポインタレジスタ(呼び出し元のルーチン内で使用される)の現在の値がスタックの最上位に保存され得る。次に、サブルーチンは、スタックポインタレジスタの現在の値をスタックフレームポインタレジスタにコピーして、サブルーチンのスタックフレームに対するフレームポインタを確立し得る。サブルーチンが終了すると、呼び出し元のルーチンのフレームポインタ値がフレームポインタレジスタに戻され得る。
(スタック−相対アドレス指定パターンに基づく投機)
マイクロプロセッサ100は、各種オペレーションのスタック−相対アドレス指定パターン(すなわち、メモリのスタック領域にアクセスするアドレス指定パターン)を用いて予測されたデータ値を使用して、データ投機的実行を行うように構成され得る。例えば、あるオペレーションがスケジューラ118にディスパッチされると、このオペレーションのオペランドのアドレス指定パターンと、スタックファイルに現在記憶されているアドレス指定パターンとを比較することで、オペレーションの1つ以上のオペランドの投機的な値が識別され得る。一部実施形態では、スケジューラ118は、この投機的な値を使用して、実行のためこのオペレーションを発行し得る。後からこの投機が誤っていたと判定された場合、非投機的な値を使用してオペレーションが再発行され得る。
図2Aは、オペランドのアドレス指定パターンに基づいて投機的なオペランド値を識別するように構成され得るディスパッチユニット104の一実施形態を示す。この実施形態では、ディスパッチユニット104は、レジスタマップ134とスタックファイル132を備える。前述のように、レジスタマップ134は、レジスタリネーミングを提供するように構成され得る。レジスタマップ134は、各命令(またはオペレーション)のソースオペランドおよびデスティネーションオペランドそれぞれの論理レジスタ名を受け取り、その論理レジスタに最後に割り当てられた物理レジスタの物理レジスタ名を出力し得る。レジスタマップ134は、オペレーションの結果を記憶する物理レジスタを割り当て得る。スタックファイル132は、スタックファイルコントローラ202とスタックファイル記憶部204を備える。一部実施形態では、スタックファイル記憶部204は、数個のレジスタ、ラッチ、カウンタ、加算器/減算器、フリップフロップ、およびその他のクロック動作する記憶部から実施され得る。別の実施形態では、スタックファイル記憶部204は、1つ以上のランダムアクセスメモリ(RAM:Random Access Memory)セルを備え得る。
スタックファイル記憶部204は、1つ以上のエントリ220を有する。各エントリ220は、アドレス指定パターン206と、そのエントリのアドレス指定パターン206に関連付けられているタグ208とを有し得る。各タグは、データ値が生成されるときに、そのデータ値を記憶する場所(リオーダバッファ内またはレジスタファイル116内など)を示すことで、データ値を識別し得る。例えば、例示した実施形態に示すように、各タグは、レジスタマップ134が示している、そのデータ値を記憶するために割り当てられた物理レジスタを識別し得る。各アドレス指定パターンは、特定のスタック位置を識別するための情報を少なくとも一部有し得る。例えば、図2Bを手短に参照すると、例示的なアドレス指定パターン206が示される。この実施形態では、アドレス指定パターン206は、論理レジスタ名210と変位214を有する。論理レジスタ名210は、スタック内のデータへのアクセスに使用する論理レジスタの名前である(スタックポインタレジスタまたはスタックフレームポインタレジスタなど)。変位は、論理レジスタに現在記憶されているアドレスから加算または減算すべき値を示し得る。また、一部のアドレス指定パターン206では、他の情報(セグメント論理レジスタ名またはインデックスレジスタ名など)を有していてもよい。
スタックファイル記憶部204の内のエントリ220は、命令またはオペレーションのアドレス指定パターンが、メモリのスタック領域内の位置を指定している場合に、その命令またはオペレーションに対して割り当てられ得る。例えば、エントリは、スタック領域内のメモリ位置に(物理レジスタなどから)値をストアするストアオペレーションを受けて割り当てられ得る。ストアオペレーションを含む命令の例に、プッシュ命令がある。ストアオペレーションを含む命令のほかの例に、デスティネーションにメモリ位置を指定する移動(move)命令がある。スタックファイルコントローラ202は、メモリのスタック領域の内のメモリ位置にデータ値をストアするストアオペレーションを、(例えば、オペレーションのオペコードおよび/またはアドレス指定パターンに基づいて)検出し得る。検出されたストアオペレーションのアドレス指定パターンがスタックファイルエントリ220に存在しない場合、スタックファイルコントローラ202は、そのアドレス指定パターンを記憶するための新しいエントリ220を割り当て得る。また、スタックファイルコントローラは、ストアオペレーションによってストアされようとしているデータ値を識別するタグを記憶し得る。例えば、スタックファイルコントローラ202が“PUSH EAX”命令を検出した場合、スタックファイルコントローラは、論理レジスタEAXに現在割り当てられている物理レジスタを識別するタグを、PUSH命令を受けて割り当てられたスタックファイルエントリ220に記憶し得る。スタックファイルコントローラは、PUSH命令のアドレス指定パターンとして、“ESP + 0”(+0はバイト単位の変位)を記憶し得る。割り当てに使用できる空きのエントリがスタックファイル記憶部204内に存在しない場合、スタックファイルコントローラ202は、LRU(最低使用頻度法)、FIFO(先入れ先出し法)、ランダム置換などの置き換え方式を使用して、上書きするエントリを選択し得る。
オペレーションのアドレス指定パターンがスタックファイルエントリに既に存在する場合、スタックファイルコントローラ202は、一致するエントリに記憶されているタグを、オペレーションに指定されているタグで上書きし得る。例えば、ストアオペレーションのアドレス指定パターンがスタックファイル記憶部204でヒットした場合、スタックファイルコントローラ202は、ストアオペレーションのソースオペランドのタグによって、一致するエントリ220に記憶されているタグを上書きし得る。
スタックファイルコントローラ202は、未ディスパッチのオペレーションで指定されているアドレス指定パターンと、スタックファイル記憶部204のエントリに記憶されているアドレス指定パターンとを比較し得る。オペレーションのアドレス指定パターンと、スタックファイル記憶部204のエントリに記憶されているアドレス指定パターンとが一致した(例えば、オペレーションのスタックの相対変位がスタックファイル記憶部204でヒットした)場合、スタックファイルコントローラ202は、(前述のように)一致したアドレス指定パターンを含むエントリを使用するか変更し得る。スタックからレジスタに値をロードするオペレーションが処理されようとしている場合、スタックファイルコントローラ202は、スタックファイル記憶部204内の一致するエントリ220に記憶されているタグ(物理レジスタ名など)を出力し得る。本明細書において、スタックからレジスタに値をロードするオペレーションをロードオペレーションと呼ぶ。ロードオペレーションを含む命令の例に、ポップ命令がある。x86命令セットを実施している実施形態では、MOV命令を使用することでストアオペレーションとロードオペレーションの両方を実行できる点に留意されたい。
スタックポインタ値は、スタックにデータを記憶するオペレーションやスタックからデータを取り出すオペレーションを受けて頻繁に変更されるため(例えば、プッシュ命令およびポップ命令は一般にスタックポインタ値を更新する)、スタックファイルコントローラ202は、スタックファイル値が変更されると、この変更を反映するようにエントリ220を更新するか、あるいはスタックファイル132に入力されたアドレス指定パターンを変更して、変更したアドレス指定パターンと、スタックファイルの各エントリ220のアドレス指定パターンとを比較することで、スタックファイル値に対する変更を補正するように構成され得る。
一実施形態では、スタックファイルコントローラ202は、スタックポインタ値が変更される度に、スタックファイルエントリ220に記憶されている相対変位を変更することで、スタックポインタ値に対する変更を補正し得る。例えば、スタックファイル132は、プッシュ命令およびポップ命令を受けて、スタックファイルの各エントリ220を更新するように構成された減算器および/または加算器(または、別の実施形態ではアップカウンタおよび/またはダウンカウンタ)を備え得る。このときの更新量は、オペランドのサイズによって変わり得る。例えば、プッシュ命令によってスタックに4バイトのオペランドがプッシュされると、スタックファイルコントローラ202は、アドレス指定パターン206にスタックポインタを指定している各エントリの変位に4を加算し得る。同様に、ポップ命令によってスタックから2バイトのオペランドが取り出されると、スタックファイルコントローラは、スタックポインタを指定している各アドレス指定パターン206に含まれる相対変位から2を減算し得る。このようにして、各エントリのアドレス指定パターンは、スタックポインタの現在の位置を正確に反映したものとなる。
別の実施形態では、スタックファイルコントローラ202は、1つ以上のアドレス指定パターン調整値を追跡しており、スタックファイル132に入力されたアドレス指定パターンにこれらの調整値を適用してから、入力されたアドレス指定パターンと、スタックファイルの各エントリ220に含まれるアドレス指定パターンとを比較することで、スタックポインタ値の変更を補正し得る。スタックファイルコントローラは、メモリのスタック領域に存在するデータのアドレス指定に使用する論理レジスタ(一部のx86実施形態におけるESPおよびEBPなど)のそれぞれについて、アドレス指定パターン調整値を追跡し得る。例えば、スタックファイルコントローラは、各アドレス指定パターン調整値を記憶する加算器またはカウンタを備え得る。加算器またはカウンタはそれぞれ、スタック領域にあるデータのアドレス指定に使用する論理レジスタのうちの1つに関連付けられ得る。アドレス指定パターン調整値に関連付けられている論理レジスタの値を変更するオペレーションがディスパッチされる度に、この変更を反映するため、アドレス指定パターン調整値がインクリメントまたはデクリメントされるか、新しい値がロードされるか、クリアされるか、無効にされる。例えば、プッシュ命令がディスパッチされる度に、スタックポインタレジスタに関連付けられているカウンタがデクリメントされ得る(例えば、“PUSH EBX”を受けて“count = count - 4”が実行される)。
スタックファイルが新しいオペレーションを処理する度に、スタックファイルコントローラ202は、その新しいオペレーションのアドレス指定パターンがスタックファイル記憶部でヒットするかどうかを判定するために、当該アドレス指定パターンに、適切なアドレス指定パターン調整値を適用し得る。例えば、現在のESP−相対アドレス指定パターン調整値が−12であり、オペレーション“MOV EAX, [ESP + 8]”が受信された場合、スタックファイルコントローラ202は、アドレス指定パターンにこのアドレス指定パターン調整値を加算し得、この結果、アドレス指定パターンは“[ESP + 8 - 12]”、すなわち“[ESP - 4]”となる。変更後のアドレス指定パターン“[ESP - 4]”がスタックファイルエントリ220に格納されている場合、スタックファイルコントローラ202は、当該スタックファイルエントリに格納されている物理レジスタ識別子を出力し得る。
スタックファイルコントローラ202は、スタックファイルに入力されたアドレス指定パターンに、アドレス指定パターン調整値を適用するための加算器を1つ以上備え得る。例えば、毎クロックサイクルに2つのオペレーションがスタックファイルに入力され得る場合、スタックファイルコントローラ202は、アドレス指定パターン調整値を適用するための加算器を2つ備え得る。このような実施形態では、スタックファイルの全てのエントリに格納されている相対変位を変更することでスタックポインタに対する変更を補正する実施形態よりも、必要な加算器および/またはカウンタの数が少なくて済むことがある。さらに、多くのサブルーチンには、大きなローカルスタックフレームを割り当てるために、スタックポインタから比較的大きな数の減算を実行するオペレーションが含まれることがある。このオペレーションをスタックファイル内で扱う実施形態では、この大きなオフセットを処理するために、比較的コストの高い加算器および/またはカウンタが必要となることがある。このような状況では、加算器および/またはカウンタの数を減らすことが、設計上の重要事項となり得る。
アドレス指定パターン調整値を追跡する一部実施形態では、アドレス指定パターン調整値は、スタックファイルエントリに記憶しようとしているアドレス指定パターンを調整するためにも使用され得る。例えば、第1のオペレーションのシーケンス、“MOV [ESP - 4], EAX”、“MOV [ESP - 8], EBX”、“MOV [ESP - 12], ECX”、“ADD ESP, -12”と、これに続く第2のオペレーションのシーケンス、“MOV [ESP - 4], ESI”、“MOV [ESP - 8], EDI”、“MOV [ESP - 12], EBP”、“ADD ESP, -12”を考える。これらのシーケンスは、一連のPUSH命令を、MOVオペレーションおよびADDオペレーションにデコードして、デコードしたオペレーションに対して、定数伝搬(constant value propagation)を行うことで生成され得る。第1のオペレーションのシーケンスがスタックファイルコントローラによって処理されるときに、スタックファイルコントローラ202は、アドレス指定パターン“[ESP - 4]”、“[ESP - 8]”、および“[ESP -12]”をそれぞれ有するエントリを割り当てるか変更し得る。第1のシーケンスの加算オペレーションを受けて、スタックファイルコントローラ202は、スタックポインタのアドレス指定パターン調整値をゼロから−12に更新し得る。第2のオペレーションのシーケンスの処理時に、スタックファイルコントローラ202は、各オペレーションについて、そのオペレーションにエントリを割り当てる前に、アドレス指定パターン調整値をそのオペレーションのアドレスパターンに加算し得る。このため、第2のオペレーションのシーケンスに割り当てられるスタックファイルエントリのアドレス指定パターンは、“[ESP -16]”、“[ESP - 20]”、および“[ESP - 24]”となり得る。第2のシーケンスの加算オペレーションを受けて、スタックファイルコントローラ202は、スタックポインタのアドレス指定パターン調整値を−24に更新し得る。
(例えば、サブルーチンの開始時に)スタックポインタがスタックフレームポインタにコピーされると(“MOV EBP, ESP”など)、スタックファイルコントローラ202は、任意選択でこの更新も補正し得る。例えば、一実施形態では、スタックファイルコントローラ202は、アドレス指定パターン206でスタックポインタレジスタを識別している全てのエントリ220を、スタックフレームポインタレジスタのほうを識別するように更新し得る。x86の一実施形態では、命令“MOV EBP, ESP”を受けて、ESPを指定している全てのエントリが、EBPを指定するように更新され得る。同様に、スタックフレームポインタをスタックポインタにコピーするオペレーション(サブルーチン終了時の“MOV ESP, EBP”など)を受けて、スタックファイルコントローラは、スタックフレームポインタを識別している全てのエントリ220を、スタックポインタのほうを識別するように更新し得る。別の実施形態では、アドレス指定パターンの一部に、このようなコピーオペレーションのデスティネーションレジスタを指定しているオペレーションは全て無効にされ得る。例えば、コピーオペレーション“MOV EBP, ESP”を受けて、アドレス指定パターンが“EBP + 4”のエントリが無効にされ得る。
別の実施形態では、スタックファイルコントローラ202は、スタックフレームポインタをスタックポインタにコピーするか、その逆にコピーするコピーオペレーションが発生すると、1つ以上のフラグまたはその他の状態標識(status indication)を設定することでこれを補正し得る。フラグを1つ使用する場合、このフラグは、ある種類のコピー(“MOV EBP, ESP”など)が検出されるとセットされて、別の種類のコピー(“MOV ESP, EBP”など)が検知されるとクリアされ得る。スタックポインタがスタックフレームポインタにコピーされたことを示すフラグまたは状態標識がセットされている場合、スタックファイルコントローラ202は、スタックファイル記憶部204内の、スタックポインタレジスタを指定しているアドレス指定パターンが、ディスパッチされていないオペレーション内の、スタックフレームポインタを指定しているアドレス指定パターンと等しいと判断する(または、発生したコピーの種類によってはこの逆を行なう)。例えば、スタックファイルエントリのアドレス指定パターン206が“ESP + 8”で、ディスパッチされていないロードオペレーションのアドレス指定パターンが“ESP + 8”であり、かつ状態標識がセットされている場合、スタックファイルコントローラ202は、ディスパッチされていないロードオペレーションのアドレス指定パターンと、このエントリに格納されているアドレス指定パターンとが一致すると判定し得る。このため、スタックファイルコントローラ202は、ディスパッチされていないロードオペレーションに対して、このエントリに記憶されているタグを出力し得る。
スタックファイルコントローラ202がアドレス指定パターン調整値を追跡する実施形態では、スタックポインタがスタックフレームポインタにコピーされると、スタックファイルコントローラ202は、スタックポインタのアドレス指定パターン調整値をスタックフレームポインタのアドレス指定パターン調整値にコピーすることでこれを補正し得る。例えば、オペレーション“MOV EBP, ESP”がディスパッチされると、スタックファイルコントローラ202は、EBPのアドレス指定パターン調整値を、ESPの現在のアドレス指定パターン調整値に設定し得る。スタックファイルコントローラ202は、このEBPのアドレス指定パターン調整値を、その後処理されるEBP−相対アドレス指定パターンを指定しているオペレーションに適用し得る。スタックファイルコントローラ202は、EBPのアドレス指定パターンの値が有効な間、スタックファイル132に入力されたオペレーションのEBP−相対アドレス指定パターンと、スタックファイルエントリ内のESP−相対アドレス指定パターンとを比較するように構成され得る。変更後のEBP−相対アドレス指定パターンと変位が等しいESP−相対アドレス指定パターンを有するエントリ220がスタックファイルに存在する場合、変更後のEBP−相対アドレス指定パターンはスタックファイルでヒットする。一部実施形態では、デスティネーションレジスタとしてEBPを指定している(“MOV EBP, ESP”以外の)オペレーションがディスパッチされると、EBPのアドレス指定パターン調整値が無効にされ得る。スタックファイルコントローラ202は、EBPのアドレス指定パターン調整値が無効の間はEBP−相対アドレス指定パターンを有するオペレーションを処理しないことがある。一部実施形態では、スタックファイルコントローラ202は、(上記に加えて、あるいはその代わりに)リターン命令を受けてEBPのアドレス指定パターン調整値を無効にし得る。
あるオペレーションがスタックポインタの値を調整する(“ADD ESP, 12”または“MOV ESP, EBP”など)場合、スタックファイルコントローラ202は、スタックフレームポインタのアドレス指定パターン調整値の値を更新し得る。例えば、スタックファイルコントローラは、スタックフレームポインタをスタックポインタへコピーするオペレーションを受けて、スタックフレームポインタ調整値をスタックポインタ調整値にコピーし、スタックフレームポインタ調整値を無効し得る。スタックファイルコントローラ202は、スタックポインタ値を変更するオペレーション(例えばADDオペレーション)を受けて、この変更を反映させるためスタックポインタ調整値を更新し得る。例えば、オペレーション“ADD ESP, 12”を使用して、スタックフレームが以前の状態に戻された場合、スタックファイルコントローラは、この加算オペレーションのディスパッチ時に、スタックポインタのアドレス指定パターン調整値を、12を加算して変更し得る。
一部実施形態では、スタックファイル132は、ネストされたサブルーチンの処理を処理する際に、それぞれのサブルーチンについて調整値を保存しておき、リターン命令が処理される度に、以前のスタックフレームに対応する調整値に戻し得る。例えば、スタックファイルコントローラ202は、コール命令が処理される度に、戻りアドレススタックと類似するLIFO(後入れ先出し)構造に、現在のアドレス指定パターン調整値を保存し得る。対応するリターン命令の処理時に、保存しておいた調整値が、この構造からスタックファイルコントローラ202に戻され得る。
一部実施形態では、アドレス指定パターン調整値が、スタックポインタとスタックフレームポインタとの間のオフセットを示すオフセット値を有し得る。オペレーションによってこの2つのポインタが同じ値に設定される度に、このオフセット値がゼロにリセットされ得る。例えば、あるオペレーションによって、スタックポインタ値がスタックフレームポインタ値に設定されるか(“MOV ESP, EBP”など)、この逆の操作が行われると、オフセット値がゼロにリセットされ得る。オペレーションによってESPの値とEBPの値が変更されると、オフセット値が適宜変更され得る。例えば、プッシュ命令(これによりESPが減少される)を受けて、このESPの変更を反映するためにオフセット値が増加され得る。EBPからある値を減算するオペレーションを受けて、オフセット値が減少され得る。オフセット値は、正負両方のオフセットを表すことができるように、符号が設定され得る。スタックファイルによってオペレーションが処理される際に、このオフセット値(および/またはスタックポインタのアドレス指定パターン調整値)を使用して、スタックファイル記憶部204での一致するエントリの有無の判定に使用されるアドレス指定パターンが変更されるほか、アドレス指定パターンを新しいスタックファイルエントリとして記憶する前にこのアドレス指定パターンが変更される。例えば、EBP−相対アドレス指定パターンを有するオペレーションがスタックファイル132に入力された場合、スタックファイルコントローラ202は、ESP−相対アドレス指定パターン調整値とEBP-ESPオフセット値をこのオペレーションのアドレス指定パターンに適用してから、このアドレス指定パターンと、スタックファイルエントリ220に記憶されているアドレス指定パターンとを比較する。一部実施形態では、オフセット値は、スタックフレームポインタ調整値の代わりとして使用されるか、スタックフレームポインタ調整値に加えて使用され得る。
ロードオペレーションのアドレス指定パターンがスタックファイル記憶部204でヒットした場合、スタックファイルコントローラ202が出力するタグが、このタグが識別する値をそのロードオペレーションの投機的な結果にリンクするために使用され得る。例えば、一部実施形態では、ロードオペレーションがスケジューラ118にディスパッチされると、メモリファイル132が出力するタグがスケジューラにも(例えば、投機的なソースオペランドのタグとして)提供され得る。スケジューラ118は、このタグが識別する値が(例えば、レジスタファイル116内、または結果バス130上で)利用可能になると、ロードオペレーションを発行し得る。実行コア124は、このロードオペレーションを実行し、この結果、リンクされている値が、ロードオペレーションの投機的な結果として結果バス130を介してブロードキャストされ得る(一部実施形態では、ロードの結果として生成される値にフラグを設定したり、あるいはこの値を投機的な値として識別しなくてもよい点に留意されたい)。別の実施形態では、後述するように、タグを投機マップに記憶することで、値がロードオペレーションの投機的な結果にリンクされ得る。
リンクが確立されたことで、タグが識別するデータ値が(例えば、レジスタファイル116内、または結果バス130上で)ひとたび利用可能になると、投機的な結果を使用して依存関係のあるオペレーションを実行できるように、このデータ値が、ロードオペレーションの投機的な結果として転送され得る。多くの場合、投機的な結果を使用して依存関係のあるオペレーションを実行できるようになり、ロードオペレーションの非投機的な結果が利用可能になるまで待たされる場合よりもオペレーションを早く実行できるようになる。
一部実施形態では、ロードオペレーションを実行することでデータ値が転送され、この結果、データ値がロードオペレーションの投機的な結果として結果バス130に出力され得る。例えば、一実施形態では、3サイクルを要してロードオペレーションを非投機的に実行する代わりに(このオペレーションがデータキャッシュ128でヒットすると仮定した場合)、データ値とそのデータ値を識別するタグをオペレーションの結果として出力することで、ロードオペレーションを1サイクルで実行することができる。別の実施形態では、依存関係のあるオペレーションがそれぞれディスパッチされるときに、スタックファイルコントローラ202が出力するタグを、依存関係のあるオペレーション(ロードオペレーションによって生成されるオペランドを取るオペレーション)に投機的なオペランドソースとして直接提供することで、より間接的な方法でデータ値を転送してもよい。データ値を転送する手段は、ロードオペレーションを、投機的なレジスタ間移動オペレーションとして実行されるように変更するか、あるいは、依存関係のあるオペレーションに投機的なオペランドソースのタグとしてタグを提供するように構成された1つ以上のディスパッチユニットと、リンクされているデータ値が利用可能かどうかに応じて、変更したロードオペレーションおよび/または依存関係のあるオペレーションを発行するように構成されたスケジューラと、リンクされているデータ値をロードの結果として出力するか、またはリンクされているデータ値を使用して依存関係のあるオペレーションを実行するように構成された実行コアの1つ以上を備え得る。
ロード/ストアユニット126(またはマイクロプロセッサ100に存在し、リンクを検証するための別の手段)は、スタックファイル132によって識別される物理レジスタに記憶されている値と、ロードオペレーションの投機的な結果とのリンクを検証し得る。リンクが正しくない場合、ロード/ストアユニット126はロードオペレーションを再発行させるか、ロードオペレーションの正しい結果を結果バス130上にブロードキャストするか、この両方を実行し得る。ロードが再発行されると、ロードの投機的な結果を使用して実行された依存関係のある全てのオペレーションが再発行され、更新後の非投機的な値を使用して実行される。別の実施形態では、リンクが正しくない場合、プロセッサ100は投機ミス後に発生したオペレーションを破棄して、ロードオペレーションの正しい結果を使用してこれらのオペレーションの実行を再開し得る。スタックファイルコントローラ202は、スタックファイル記憶部204内のエントリが、値とロードオペレーションの投機的な結果とを誤ってリンクしている場合、そのエントリを無効にし得る。
前述のように、スタックファイル132は、データキャッシュ128(またはシステムメモリ200)内のデータにアクセスするオペレーションのアドレス指定パターンを追跡している。この結果、スタックファイル132が、物理レジスタに記憶されているレジスタ値を、メモリの特定のアドレスに記憶されている値にリンクできるようになる。
一実施形態では、スタックファイル記憶部204に記憶されている相対変位206は、変位フィールド214内で変位の指定に使用されている総ビット数よりも少なくてもよい点に留意されたい。別の実施形態では、スタックファイルコントローラ202は、スタックファイルのエントリが、特定のオペレーションのアドレス指定情報を全て記憶できるかどうかに応じて、スタックファイル記憶部204のエントリを割り当てるかどうかを選択的に選択してもよい。例えば、スタックファイル記憶部204の各エントリが変位情報を最大で16ビット記憶することができ、特定のオペレーションの変位情報が24ビットの場合、スタックファイルコントローラ202は、そのオペレーションにスタックファイルエントリを割り当てなくてもよい。
スタックファイル132の一実施形態のオペレーションをさらに詳しく説明するため、ディスパッチユニット104が処理する命令のシーケンスが図2Cに示す命令を含むとする。図2Cは、例示のための呼び出し元ルーチンに含まれ得る代表的な命令と、サブルーチンSUB1に含まれ得る命令とを示す。図2Cに示す命令は、プログラムの順序内で1つ以上の介入命令(図示せず)によって分けられる可能性がある点に留意されたい。図2Dは、このサブルーチンの呼出しの直前の、スタックの内容とスタックファイルの内容を示す。図2Eは、サブルーチン命令“MOV [EBP - 4], EBX”の直後の、スタックの内容とスタックファイルの内容を示す。別の実施形態ではこれらの命令を別の方法で処理してもよい点に留意されたい(例えば、一部実施形態では、スタックポインタが変更される際に、スタックファイルに記憶しているアドレス指定パターンを更新する代わりに、アドレス指定パターン調整値を更新してもよい)。
呼び出し元ルーチンの最初の命令“PUSH EBX”により、論理レジスタ値(本例ではEBX)がサブルーチンによって変更されないようにスタックに保存され得る。“PUSH EBX”を遂行するために用いられるストアオペレーションのアドレス指定パターンがスタックファイル132に提供されると、スタックファイルコントローラ202は、スタックファイル記憶部204でこれと一致するアドレス指定パターンを探し得る。このアドレス指定パターンがスタックファイル記憶部204でヒットしないとすると、スタックファイルコントローラ202は、エントリを割り当てて(その際、未割当のエントリを使用するか、割り当て済みのエントリに上書きする)、このプッシュ命令のアドレス指定パターンおよびソースオペランドのタグの少なくとも一部を記憶し得る。例示した実施形態では、このタグは、EBXに現在割り当てられている物理レジスタの物理レジスタ識別子である(しかし、図2D,2Eでは、わかりやすいようにタグを論理レジスタ識別子として示している)。スタックファイルコントローラはこのアドレス指定パターンを“ESP + 0”として記憶し得る。このアドレス指定パターンはスタックファイル記憶部204でヒットしないため、スタックファイルコントローラ202は、このアドレス指定パターンのタグを出力することができない。
次の2つの命令によって、2つのパラメータ(EDIおよびESIに記憶されている値)が、サブルーチン側で使用できるようにスタックに記憶され得る。呼び出し元ルーチンの次の2つのストアオペレーション(“PUSH EDI”および“PUSH ESI”を遂行するために用いられる)のアドレス指定パターンも、スタックファイル記憶部204でヒットしないとすると、スタックファイルコントローラ202は、これらのストアオペレーションのそれぞれについて、さらに2つのエントリを割り当ててタグとアドレス指定パターンを記憶し得る。さらに、スタックファイルコントローラは、プッシュ命令(スタックポインタをデクリメントさせる)が検出される度に、スタックファイルの既存のエントリのうち、アドレス指定パターンにスタックポインタESPを指定しているエントリに格納されている変位を変更し得る。このため、“PUSH EDI”が検出されると、スタックファイルコントローラ204は、“PUSH EBX”に対して割り当てたエントリの変位に4を加算する(この結果、エントリの変位が“ESP + 4”となる)。同様に、“PUSH ESI”が検出されると、スタックファイルコントローラ204は、“PUSH EBX”に対して割り当てたエントリと、“PUSH EDI”に対して割り当てたエントリの両方の変位を増加させ得る。このため、“PUSH EBX”に対して割り当てたエントリのアドレス指定パターンは更新されて“ESP + 8”を指定するようになり、“PUSH EDI”に対して割り当てたエントリのアドレス指定パターンは更新されて“ESP + 4”を指定するようになり得る。したがって、命令“PUSH パラメータ1”に含まれるオペレーションがディスパッチされたのちは、スタックファイルに格納されているアドレス指定パターンは図2Dに示す状態をとり得る。
命令“CALL SUB1”を受けて、命令ポインタが(リターンアドレスとして使用できるようにするために)スタックにプッシュされる。このCALL命令を受けてスタックポインタが変更されるため、スタックファイルエントリのうち、アドレス指定パターンにスタックポインタを指定しているエントリに格納されている変位が更新され得る。例えば、“PUSH EBX”に対して割り当てたエントリのアドレス指定パターンが変更されて、“ESP + 12”を指定するようになり得る。このCALL命令は、スタックファイルを更新するストアオペレーションを含んでいてもよい。例えば、“CALL SUB 1”を受けて、スタックファイルは、さらにスタックファイルエントリ(図2D〜2Eに図示せず)を割り当ててもよい(例えば、このエントリのタグはEIPに現在割り当てられている物理レジスタの物理レジスタ識別子、アドレス指定パターンは“ESP + 0”となる)。
サブルーチンSUB1内で、命令“PUSH EBP”によって、新しいスタックファイルエントリが割り当てられ得る(このエントリのタグはEBPに現在割り当てられている物理レジスタの物理レジスタ識別子、アドレス指定パターンは“ESP + 0”となる)。さらに、このプッシュによってスタックポインタが変更されるため、スタックポインタを指定しているアドレス指定パターンに含まれている変位も変更され得る(例えば、各々4ずつインクリメントされ得る)。
命令“MOV EBP, ESP”を受けて、スタックファイルコントローラは、図2Eに示すように、アドレス指定パターンにESPを指定している全てのエントリを、EBPを指定するように更新し得る。このため、アドレス指定パターン“ESP + 12”は“EBP + 12”を指定するように更新され、他のエントリも同様に更新され得る。
次の命令“SUB ESP, 4”は、サブルーチンがローカル変数を記憶するために、スタックの最上位に空間を割り当てる。本例では、スタックファイルは、現在EBPの変更を追跡しているため、この命令が実行されても、スタックファイルはエントリを割り当てたり変更しなくてもよい。しかし、アドレス指定パターン調整値を使用する実施形態など、他の実施形態では、このような命令の結果、ESPの変更を反映するために、アドレス指定パターン調整値および/またはエントリのアドレス指定パターンの1つ以上が更新され得る。
“MOV EAX, [EBP + 8]”のアドレス指定パターンがスタックファイルに提供されると、ソースオペランドのアドレス指定パターン“[EBP + 8]”は、スタックファイルに含まれるアドレス指定パターンのうちの1つと一致する。このため、スタックファイルは、一致するエントリにあるタグを出力し得る。ここで、一致するエントリのタグは、この一致するエントリの割り当て時にESIに割り当てられた物理レジスタの物理レジスタ識別子である。このタグを使用して、その物理レジスタ内のデータ値が“MOV EAX, [EBP + 8]”の投機的な結果にリンクされ得る。同様に、“MOV EBX, [EBP + 12]”のアドレス指定パターンがスタックファイルに提供されると、このアドレス指定パターンは、既存のエントリに一致し、スタックファイルは、一致するエントリに格納されているタグを出力し得る。本例では、このタグは、このエントリの割り当て時にEDIに割り当てられた物理レジスタを識別している。
“MOV [EBP - 4], EBX”のデスティネーションオペランドのアドレス指定パターンは、スタックファイル132でヒットなしとなり得る。このため、スタックファイルは、新しいエントリを割り当て得、このエントリのアドレス指定パターンは“EBP - 4”、タグは、現在EBXに割り当てられている物理レジスタの物理レジスタ識別子となる。“ADD EAX, [EBP - 4]”に含まれるロードオペレーションのソースオペランドのアドレス指定パターンがスタックファイルに提供されると、このアドレス指定パターンはヒットとなり、一致するエントリに記憶されているタグ(この一致するエントリの作成時にEBXに割り当てられた物理レジスタを識別している)が出力される。
命令“MOV ESP, EBP”は、スタックフレームポインタ値をスタックポインタにコピーする。このコピー命令を受けて、スタックファイルコントローラは、アドレス指定パターンにESPを指定している全てのスタックファイルエントリを無効にし得る。さらに、スタックファイルコントローラは、アドレス指定パターンにEBPを指定している全てのスタックファイルエントリを、ESPを指定するように更新し得る。一実施形態では、スタックファイルコントローラは、アドレス指定パターンが変更されて、負の変位およびスタックポインタを指定するようになるエントリを全て無効にするように構成され得る。例えば、このような実施形態では、“MOV [EBP - 4], EBX”に対して割り当てられたエントリは、アドレス指定パターンが“ESP - 4”を指定するように変更された場合に無効にされ得る。
命令“POP EBP”は、スタックフレームポインタ値を、呼び出し元ルーチンが以前取っていた値に戻す。このPOP命令に含まれるロードオペレーションのソースオペランド(ESP)のアドレス指定パターンは、(前述のように、アドレス指定パターン“EBP + 0”が“ESP + 0”を指定するように変更された後は)スタックファイルでヒットするため、スタックファイルは、ヒットしたエントリに格納されているタグを出力し得る。POP命令に含まれる加算オペレーションによって、ポップされた値のロード後にスタックポインタ値が変更されるため、スタックファイルコントローラは、スタックポインタを指定している全てのアドレスパターンを(例えば、各アドレスパターンに含まれる変位から4を引くことで)変更し得る。
プッシュ命令およびポップ命令などの一部の命令は、ストアオペレーションまたはロードオペレーションなどの構成要素オペレーション(component operation)を幾つか含んでいるが、一部実施形態では、これらの命令が、1つの命令としてディスパッチおよびスケジュールされ得る点に留意されたい。別の実施形態では、このような命令に含まれる1つ以上の構成要素オペレーションが、別個にディスパッチおよびスケジュールされてもよい。例えば、ポップ命令では、スタックポインタをインクリメントするオペレーションは、スタックの最上位にあるデータを特定のレジスタにロードするオペレーションとは別にディスパッチおよびスケジュールされ得る。
スタックファイル132は投機的な構造として使用されているため、スタックファイル記憶部204に記憶されている情報が正確であるかどうかによって、マイクロプロセッサ100の正常な動作が重大な影響を受け得ない(例えば、スタックファイル132内の予測ミスによって、マイクロプロセッサ100の出力のエラーが発生し得ない)。しかし、ロードオペレーションの投機的な結果と物理レジスタに記憶されている値とを正確にリンクすること、および/または予測ミスとなった投機的なリンクによって引き起こされる性能ペナルティーを低減することによって得られる恩恵を高めるために、スタックファイル132の精度を改善することは望ましいといえる。一部実施形態では、特定のアドレスにあるデータに別のデバイスが書込みアクセスを取得したことが検知される(snoop)と、スタックファイル記憶部204内のエントリが無効にされ得る。同様に、予測ミスが検出されると、エントリが無効にされ得る。通常、スタックファイル記憶部204のエントリの精度に影響を及ぼす可能性のある条件などの多くの条件が監視されて、エントリを無効にすべきタイミングを決定するために使用され得る。しかし、スタックファイル132は投機的な構造であるため、これらの監視方法の一部を実施しない実施形態もある(例えば、特定の監視方法を実施するために必要となる追加ハードウェアのコストが、スタックファイルの精度を改善できる可能性を上回る場合)。
スタックファイル132が、オペレーションストリームから相互に相対的に取り出され、値を投機的な結果にリンクするのに用いられる複数のオペレーション間の依存性を許容する点に留意されたい。このため、スタックファイルは、数個の介入オペレーションによって分けられる可能性のある複数のオペレーション間の依存性の履歴(dependency history)を提供し得る。
図3は、ロードオペレーションの投機的な結果をレジスタ値にリンクする方法の一実施形態のフローチャートである。301において、タグとアドレス指定パターンとが関連付けられ、両者が同じデータ値を識別している可能性が高いことが示される。タグとアドレス指定パターンは、いずれも最初のロードオペレーションまたはストアオペレーションに対して指定される。例えば、最初のオペレーションがロードオペレーションの場合、タグは、ロードの結果を記憶するために割り当てられた物理レジスタを識別しており、アドレス指定パターンは、ロードのアドレスの算出に使用されるパターンであり得る。あるいは、最初のオペレーションがストアオペレーションの場合、アドレス指定パターンはストアのデスティネーションのアドレスを示しており、タグはストアオペレーションによってストアされるデータを識別し得る。一部実施形態では、タグとアドレス指定パターンとは、この両者をスタックファイルエントリに記憶することで関連付けられ得る。アドレス指定パターンは、(例えば、スタックポインタ値に対してこれまでに行われた変更を追跡することによって得られる)アドレス指定パターン調整値に従って変更されてから、タグに関連付けられてもよい点に留意されたい。
303〜305に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致する場合、ロードの投機的な結果が、最初のオペレーションに対して指定されたタグが識別するデータ値にリンクされ得る。303〜311に示すように、ロードオペレーションのアドレス指定パターンと最初のオペレーションのアドレス指定パターンとが一致しない場合、ロードのアドレス指定パターンと、ロードのデスティネーションのタグとが(例えば、この両者をスタックファイルのエントリに記憶することにより)関連付けられ得る。さらに、313に示すように、データキャッシュにアクセスすることにより、ロードが通常通り実行され得る。一実施形態では、ロードオペレーションのアドレス指定パターンと、以前に実行された1つ以上、あるいは二つ以上のオペレーションのアドレス指定パターンとが比較され得る。例えば、ロードのアドレス指定パターンと、現在スタックファイルに記憶されているアドレス指定パターンの各々とが比較され得る。また、一部実施形態では、ロードオペレーションのアドレス指定パターンは、アドレス指定パターン調整値に従って変更されてから、以前に実行されたオペレーションのアドレス指定パターンと比較されてもよい点に留意されたい。
ロードの投機的な結果が、タグが識別するデータ値にリンクされた場合、307に示すように、そのデータ値が、ロードオペレーションの投機的な結果として1つ以上の依存関係のあるオペレーションに転送され得る。このデータ値は、後で詳しく説明するように、結果転送によって転送されるか、あるいは依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標(indication)を転送することで転送され得る。一実施形態では、データ値が結果転送によって転送される場合、このデータ値を生成したオペレーションの実行が完了した1サイクル後に、転送されたデータ値を使用して依存関係のあるオペレーションが実行され得る。データ値が、依存関係のあるオペレーションが、そのデータ値を投機的なオペランドソースとして使用することができるようにする指標の形で転送された場合、そのデータ値を生成したオペレーションが実行を完了した直後に、依存関係のあるオペレーションを発行することができる。309に示すように、投機的な結果が転送されてから、投機的な結果が検証され得る。投機的な結果は、データキャッシュにアクセスすることなく転送することができる(つまり、投機的な結果は、データキャッシュにアクセスすることで得られる非投機的な結果よりも早く転送することができる)。
309において、投機的な結果が正しいことが検証された場合、データキャッシュへのアクセスを実行せずに、ロードオペレーションを完了することができる。別の実施形態では、投機的な結果が正しいことが検証されたかどうかを問わず、ロードオペレーションが実行されてもよい。309において、投機的な結果が正しくないと判定された場合、正しい結果を取得するため、データキャッシュに対するアクセスが実行され得る(図示せず)。この場合、ロードの投機的な結果を使用して実行された依存関係のある全てのオペレーションが、ロードの正しい結果を使用して再実行され得る。場合によっては、(307において)リンクされているデータ値をロードの投機的な結果として転送する前に、(309において)検証を実行してもよい点に留意されたい。このような状況では、ロードは通常通り実行されるか、あるいはリンクが正しいと判定された場合は、データ値がロードオペレーションの非投機的な結果として転送され得る。
(メモリファイル)
図4Aは、メモリファイル136を備えたディスパッチユニット104の一実施形態である。メモリファイル136は、メモリファイルコントローラ402とメモリファイル記憶部404とを備える。メモリファイル136は、アドレス指定パターンに基づいて、物理レジスタに記憶されているレジスタ値を、メモリの特定のアドレスに記憶されている値にリンクするものであり得る。メモリファイルは、スタックファイルとは異なり、レジスタ値を、スタック領域以外のメモリ領域内のメモリ値にリンクするのに用いられ得る。一部実施形態では、メモリファイル136は、このほかに、レジスタ値をメモリのスタック領域内のメモリ値にリンクするために、前述したスタックファイル132の機能の一部も実施してもよい。別の実施形態では、ディスパッチユニット104は、このような機能を実施するためにスタックファイル132を別に備えていてもよい。
メモリファイル記憶部404は、1つ以上のエントリ420を有する。各エントリ420は、アドレス指定パターン406と、そのエントリのアドレス指定パターンに関連付けられているタグ408を有し得る。各タグ408は、データ値が生成されるときに、そのデータ値を記憶する場所(リオーダバッファ内またはレジスタファイル116内など)を示すことで、データ値を識別し得る。例えば、例示した実施形態に示すように、各タグ408は、レジスタマップ134が示す、そのデータ値を記憶するために割り当てられた物理レジスタを識別し得る。各アドレス指定パターン406は、オペレーション内のアドレスを指定するための情報を少なくとも一部有し得る。メモリファイル136に記憶されているアドレス指定パターン406は、スタックファイル132に記憶されているアドレス指定パターン206と同様の情報を含み得る。一部実施形態では、メモリファイル記憶部404に記憶されているアドレス指定パターン406は、オペレーションで指定された全アドレス指定情報よりも少なくてもよい点に留意されたい。別の実施形態では、メモリファイルコントローラ402は、メモリファイルのエントリが、特定のオペレーションのアドレス指定情報を全て記憶できるかどうかに応じて、メモリファイル記憶部404のエントリを割り当てるかどうかを選択的に選択してもよい。スタックファイル記憶部204と同様に、メモリファイル記憶部404は、数個のレジスタ、ラッチ、フリップフロップ、1つ以上のランダムアクセスメモリ(RAM)セルなどから実施され得る。
メモリファイルコントローラ402は、未ディスパッチのオペレーションで指定されているアドレス指定パターンと、メモリファイル記憶部404のエントリに記憶されているアドレス指定パターンとを比較し得る。オペレーションのアドレス指定パターンが、現在メモリファイル記憶部404に記憶されているどのエントリのアドレス指定パターン406とも一致しない(すなわち、オペレーションのアドレス指定パターンが、メモリファイル記憶部でヒットしない)場合、メモリファイルコントローラ402は、メモリファイル記憶部404に新しいエントリ420を割り当て、そのオペレーションのアドレス指定パターンの少なくとも一部を記憶し得る。割り当てに使用できる空きのエントリがメモリファイル記憶部404内に存在しない場合、メモリファイルコントローラ402は、LRU(最低使用頻度法)、FIFO(先入れ先出し法)、ランダム置換などの置き換え方式を使用して、上書きするエントリを選択し得る。メモリファイルコントローラ402は、割り当てたエントリにオペレーションのアドレス指定パターンを記憶するほか、そのオペレーションのアドレス指定パターンが識別しているメモリ位置からロードしようとしているか、またはそこにストアしようとしている値を識別するタグ408(物理レジスタの名前など)も記憶し得る。例えば、メモリからデータをロードするオペレーションが処理されようとしている場合、そのオペレーションを受けて割り当てられるエントリ420は、ロードオペレーションの結果を記憶するために割り当てられる物理レジスタの名前を記憶し得る。メモリ位置にデータをストアするオペレーションが処理されようとしている場合、メモリファイルコントローラ402は、そのストアオペレーションによってストアされようとしている値を記憶しているレジスタの物理レジスタ名をメモリファイル記憶部404に記憶し得る。
オペレーションのアドレス指定パターン(またはそのパターンの一部)がメモリファイル404内のエントリに既に記憶されている(すなわち、オペレーションのアドレス指定パターンがメモリファイル記憶部でヒットする)場合、メモリファイルコントローラ402は、一致したアドレス指定パターンを含むエントリを使用するか変更し得る。ロードオペレーション(特定のアドレスからレジスタに値をロードするオペレーション)が処理されようとしている場合、メモリファイルコントローラ402は、メモリファイル記憶部404内の一致するエントリに記憶されている物理レジスタ名を出力し得る。ストアオペレーション(レジスタから特定のアドレスに値をストアするオペレーション)が処理されようとしている場合、メモリファイルコントローラ402は、一致するエントリに記憶されているタグ(物理レジスタ名など)を、ストアしようとしているデータのタグで上書きし得る。
一部実施形態では、(スタックポインタおよびスタックフレームポインタの記憶に使用される論理レジスタ以外の)特定の論理レジスタをデスティネーションオペランドとして指定しているオペレーションがディスパッチされた場合、メモリファイルコントローラ402は、アドレス指定パターン406の一部にその論理レジスタを含むエントリ420を全て無効にし得る。このため、エントリの無効処理を実行するために、各オペレーションのデスティネーションレジスタの論理レジスタ名が、メモリファイル136に入力され得る。さらに、一部実施形態では、特定のアドレスにあるデータに別のデバイスが書込みアクセスを取得したことが検知されると、メモリファイル記憶部404内のエントリが無効にされ得る。同様に、予測ミスが検出されると、エントリが無効にされ得る。
メモリファイル136が、アドレス指定パターンにメモリのスタック領域内の位置を指定しているオペレーションにもエントリを割り当てる場合には、メモリファイルコントローラ402は、それらのエントリに使用するため、前述のスタックファイル補正メカニズムの1つを備え得る。あるいは、このようなエントリは、独立したスタックファイル132に保持されていてもよい(すなわち、メモリファイル136は、アドレス指定パターンにスタック内の位置を指定しているオペレーションにエントリを割り当てることができない)。一般に、メモリファイルコントローラ402は、各アドレス指定パターンに含まれる論理レジスタ識別子を基に、スタック領域内の位置を指定するアドレス指定パターンと、メモリ内のそれ以外の位置を指定しているアドレス指定パターンとを区別し得る。メモリファイル136は投機的な構造であるため、このようなメカニズムを使用してアドレス指定パターンを区別することによって生じるおそれのある誤りは許容され得る。
一部のアーキテクチャでは、スタックフレームポインタの指定に使用する論理レジスタ(例えばEBPなどのベースポインタレジスタ)は、汎用レジスタとしても使用することができる。このため、このような二重用途レジスタを含むアドレス指定パターン406は、メモリのスタック領域内の位置を指定していることもあれば、スタック領域以外の位置を指定していることもある。このようなアドレス指定パターンを区別するために、メモリファイルコントローラ402は、ベースポインタレジスタが、現在スタックフレームポインタとして使用されている尤度(likelihood)を追跡するメカニズムを備え得る。このメカニズムはフラグを備え得、このフラグは、ベースポインタレジスタがスタックフレームポインタとして機能している可能性が高い場合はセットされ、ベースポインタレジスタが汎用レジスタとして機能している可能性が高い場合はクリアされる。例えば、このフラグは、CALL命令を受けてセットされ、RETオペレーションを受けてクリアされ得る。別の実施形態では、このフラグは、ENTER命令を受けてセットされ、LEAVE命令を受けてクリアされ得る。別の実施形態では、このフラグは、オペレーション“MOV EBP, ESP”がディスパッチされるとセットされ、“MOV ESP, EBP”がディスパッチされるとクリアされ得る。(メモリファイル136がスタックファイルの機能を備えない実施形態では)このフラグがセットされている場合、メモリファイルコントローラ402は、アドレス指定パターンにベースポインタレジスタが含まれるオペレーションの処理を禁止し得る。このような状況では、スタックファイル132が代わりにそのオペレーションを処理しても、あるいはそのオペレーションが全く処理されなくてもよい。メモリファイル136がスタックファイルの機能も実施する別の実施形態では、メモリファイルコントローラ402は、メモリファイルにこのようなオペレーションが入力され、フラグがセットされている場合、そのオペレーションをスタック−相対アドレス指定パターンを有するオペレーションとして処理し得る。このようなオペレーションがメモリファイルに入力された場合、フラグがクリアされていれば、そのオペレーションは、スタック−相対アドレス指定パターンを有さないオペレーションとして処理され得る。
一部実施形態では、ネストされたサブルーチンのコンテキストにおいて、二重用途(dual-use)論理レジスタをより正確に処理できるように、メモリファイルコントローラ402は追加の情報を保持し得る。例えば、メモリファイルコントローラ402は、CALL命令の処理の有無を示すフラグのみを保持する代わりに、“呼び出し深さ”を追跡し得る。呼び出し深さは、現在のネストのレベルを表しており、メモリファイルコントローラ402が特定のベースポインタレジスタのアドレス指定パターンを処理すべき方法(または、このようなオペレーションを本当に処理すべきかどうか)を決定するために使用することができる。
一実施形態では、メモリファイルコントローラ402は、呼び出し深さを追跡するカウンタを備え得る。一部実施形態では、呼び出し深さカウンタの初期値はゼロにセットされ得る。メモリファイルコントローラ402は、CALL命令が処理される度に、呼び出し深さカウンタをインクリメントし得る。メモリファイルコントローラ402は、RET命令が処理される度に、呼び出し深さカウンタをデクリメントし得る。メモリファイルコントローラ402は、エントリ420を割り当てる際に、アドレス指定パターン406にベースポインタの論理レジスタ識別子が含まれる場合は、そのエントリに現在の呼び出し深さを付加し得る。
その後、アドレス指定パターンにベースポインタレジスタを含むオペレーションがメモリファイルコントローラ402によって処理されるときに、現在の呼び出し深さと各エントリに記憶されている呼び出し深さとが比較され得る。呼び出し深さが一致しない場合、そのオペレーションはメモリファイル136でヒットしないとされる。例えば、命令のシーケンスに以下が含まれるとする。
MOV EAX, [EBP + 20]
CALL
<サブルーチンのためにEBPの新しい値を設定するオペレーション>
MOV EBX, [EBP + 20]
RET <CALL以前のEBPの値を戻す>
MOV ECX, [EBP + 20]
各命令は、1つ以上の介入命令によって分けられる可能性がある。ディスパッチユニット104がこの命令のシーケンスを処理する前の、メモリファイルコントローラ402の呼び出し深さを1とする。オペレーション“MOV EAX, [EBP + 20]”の処理時に、メモリファイルコントローラ402は、呼び出し深さ=1を有する“EBP + 20”と、メモリファイル記憶部404にあるその他のエントリに記憶されているアドレス指定パターンとを比較し得る。一致するアドレス指定パターンが存在しないとすると、メモリファイルコントローラ402は、新しいエントリを割り当て、アドレス指定パターン“EBP + 20”と、EAXを識別するタグを記憶し得る。さらに、メモリファイルコントローラ402は、この新しいエントリ内の呼び出し深さフィールドに現在の呼び出し深さ(1など)を識別する値を付加し得る。多くの実施形態では、メモリファイルコントローラ402は、ベースポインタを含むアドレス指定パターンを記憶しているエントリに、この値を付加するだけでもよい点に留意されたい。
CALLオペレーションがディスパッチされると、メモリファイルコントローラ402は、現在の呼び出し深さを(例えば、現在の呼び出し深さを2に増やすことにより)更新し得る。呼び出し先のサブルーチンに含まれるオペレーションが、スタックフレームポインタEBPの値を更新するとする(“MOV EBP, ESP”など)。エントリの呼び出し深さが現在の呼び出し深さと一致しないため、メモリファイルコントローラ402は、EBPが更新されてもこのエントリを無効にしなくてもよい。また、EBPが更新されたことで、現在アドレス指定パターン“EBP + 20”を有するメモリファイルエントリは異なるEBPの値に基づいているため“MOV EBX, [EBP + 20]”がメモリファイルでヒットしてはならない。メモリファイルコントローラは、“MOV EBX, [EBP + 20]”のアドレス指定パターンと、メモリファイル記憶部に既に記憶されているアドレス指定パターンとが一致しないことを正しく判定するために、現在の呼び出し深さ(2)と既存のエントリの呼び出し深さ(1)とを比較し得る。現在の呼び出し深さが既存のエントリの呼び出し深さと一致しないため、メモリファイルコントローラは、新しい命令がメモリファイルでヒットしないと判定することができる。このため、メモリファイルコントローラは、エントリを割り当てて“EBP + 20”を記憶し、そのエントリに現在の呼び出し深さを示す値を付加し得る。この時点で、アドレス指定パターン“EBP + 20”を有するメモリファイルエントリは(少なくとも)2つ存在する点に留意されたい。RET命令の処理時に、メモリファイルコントローラは現在の呼び出し深さを減らし(1に戻すなど)得る。現在の呼び出し深さは、“MOV EAX, [EBP + 20]”にエントリを割り当てた時点の呼び出し深さと等しいため、“MOV ECX, [EBP + 20]”はメモリファイルでヒットし得る。一部実施形態では、メモリファイルコントローラ402は、呼び出し深さが現在の呼び出し深さよりも大きいエントリを無効にしてもよい点に留意されたい。
スタックファイル132とメモリファイル136の両方を有する実施形態では、これらの構造のうちのいずれが、特定のオペレーションを受けてエントリを割り当てるかを各種メカニズムによって決定し得る。一部実施形態では、スタック−相対アドレス指定パターン(EBPまたはESPを含むアドレス指定パターンなど)を有するオペレーションを受けて、スタックファイル132とメモリファイル136の両方がエントリを割り当ててもよい。別の実施形態では、スタックファイル132とメモリファイル136を1つの構造に統一することで、この割り当ての重複をなくしてもよい。
別の代替の実施形態では、メモリファイル136はエントリを割り当てず、アドレス指定パターンにスタックポインタを指定しているオペレーションのメモリファイルでのヒットの有無を判定しなくてもよい。メモリファイル136は、ベースポインタレジスタまたはその他の二重用途論理レジスタを指定しているアドレス指定パターンを有するオペレーションを選択的に処理し得る(あるいは一切処理しない)。一実施形態では、メモリファイル136が、アドレス指定パターンにベースポインタレジスタを指定しているオペレーションを選択的に処理する場合、メモリファイル136は、前述のように、スタックファイルコントローラ202内のスタックフレームポインタのアドレス指定パターン調整値が有効かどうかに基づいて、またはサブルーチンが処理されようとしているかどうかを表すフラグに基づいて、特定のオペレーションを処理すべきかどうかを判定し得る。スタックファイル132は、スタックフレームポインタのアドレス指定パターン調整値が有効な間は、ベースポインタレジスタを含むアドレス指定パターンを処理し得る。メモリファイル136は、スタックフレームポインタのアドレス指定パターン調整値が無効な間は、このようなオペレーションを処理することができない。
ロードオペレーションが処理されようとしており、このロードオペレーションがメモリファイル記憶部404でヒットする場合、メモリファイルコントローラ402が出力するタグが、このタグが記憶し識別している値を、そのロードオペレーションの投機的な結果にリンクするために使用され得る。例えば、一部実施形態では、ロードオペレーションがスケジューラ118にディスパッチされると、メモリファイル136が出力するタグがスケジューラにも(例えば、投機的なソースオペランドのタグとして)提供され得る。スケジューラ118は、このタグが識別する値が(例えば、レジスタファイル116内、または結果バス130上で)利用可能になると、このオペレーションを発行し得る。実行コア124は、このロードオペレーションを実行し、この結果、リンクされている値が、ロードオペレーションの投機的な結果として結果バス130を介してブロードキャストされ得る(一部実施形態では、ロードの結果として生成される値にフラグを設定したり、あるいはこの値を投機的な値として識別しなくてもよい点に留意されたい)。別の実施形態では、後述するように、タグを投機マップに記憶することで、データ値がロードオペレーションの投機的な結果にリンクされ得る。
メモリファイル136をさらに詳しく説明するため、ディスパッチユニット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のアドレス指定パターンがメモリファイル136に提供されると、メモリファイルコントローラ402は、LOAD1のアドレス指定パターンと一致するアドレス指定パターンがないか、メモリファイル記憶部404を調べ得る。このアドレス指定パターンがメモリファイル記憶部404でヒットしないとすると、メモリファイルコントローラ402は、エントリを割り当てて(その際、未割当のエントリを使用するか、割り当て済みのエントリに上書きする)、ロードオペレーションのアドレス指定パターンと、レジスタマップ134によって提供されるロードオペレーションのデスティネーションの物理レジスタの物理レジスタ名との少なくとも一部を記憶し得る。このロードオペレーションはメモリファイル記憶部でヒットしないため、メモリファイルコントローラ402は、このロードオペレーションのタグを出力することができない。
続いて、メモリファイル136によってLOAD2が処理されると、(介入オペレーションによってLOAD1のエントリが上書きされていないとすると、)そのアドレス指定パターンは、LOAD1に対して割り当てられたエントリのアドレス指定パターンに一致し得る。LOAD2のアドレス指定パターンがメモリファイル記憶部404でヒットすると、メモリファイルコントローラ402は、LOAD1の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力し得る。この物理レジスタ名は、LOAD1によってロードされたデータ値を、LOAD2の投機的な結果にリンクするために使用され得る。
メモリファイル136によってSTORE1が処理されると、(この場合も、介入オペレーションによってLOAD1のエントリが上書きされていないとすると、)そのアドレス指定パターンは、LOAD1に対して割り当てられたエントリにヒットし得る。メモリファイルコントローラ402は、(LOAD2のときのように)LOAD1の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力するのではなく、そのエントリに記憶されている物理レジスタ名を、STORE1によってストアされようとしているデータを格納しているレジスタの物理レジスタ名で上書きし得る。このため、その後処理されるロードオペレーションがこのエントリにヒットすると、メモリファイルコントローラ402は、LOAD1のデスティネーションレジスタの物理レジスタ名ではなく、STORE1のソースの物理レジスタの物理レジスタ名を出力するようになる。
前述のように、スタックファイル132および/またはメモリファイル136は、データキャッシュ128(またはシステムメモリ200)のデータにアクセスするオペレーションのアドレス指定パターンを追跡している。この結果、物理レジスタに記憶されているレジスタ値を、メモリの特定のアドレスに記憶されている値にリンクできるようになる。
(投機的なソースを有するオペレーションのスケジューリング)
各種の実施形態では、多種多様な方法によって、ロードオペレーションの投機的な結果をレジスタのデータ値にリンクすることができる。一部実施形態では、オペランドについて投機的なソースと非投機的なソースの2種類のソースを識別することで値をリンクし得る。投機的なソースとは、リンクされたデータ値であり得る。ロードの投機的な結果にリンクされているデータ値を示すために、投機的なソースがそのロードオペレーションに提供され得る。一部実施形態では、投機的なソースは、このようなロードオペレーションに依存しているオペレーションにも提供され得る。このため、オペランドのなかには、投機的なソースを識別するタグと、非投機的なソースを識別するタグの2つのタグを有するものがあり得る。このような実施形態では、図5に示すように、各スケジューラ118は、投機的なオペランドと非投機的なオペランドの両方のためのタグの記憶領域を提供し得る。
図5は、マイクロプロセッサに備えられ得るスケジューラ118の一実施形態を示す。例示した実施形態では、スケジューラ118は、スケジューラコントローラ502とオペレーション記憶部504とを備える。スケジューラコントローラ502は、ディスパッチユニットがオペレーションをディスパッチすると、そのオペレーションに対応する情報を記憶するためのエントリを、オペレーション記憶部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を使用して予測ミスを通知する)。
図6は、投機的なオペランドソースと非投機的なオペランドソースの両方を有するオペレーションを発行および再発行するための方法の一実施形態のフローチャートである。801〜803に示すように、あるオペレーションの投機的なオペランドソースが利用可能な場合、そのオペレーションが発行され得る。データ値がレジスタファイル内の特定のレジスタに存在するか、またはデータ値が結果バスに出力されている場合には、オペレーションの投機的なオペランドソースが利用可能であるとされ得る。場合によっては、同じオペランドについて、オペレーションの非投機的なオペランドソースが、投機的なオペランドソースよりも先に利用可能となることがある点に留意されたい。このような状況では、投機的なオペランドソースが利用可能になる前にオペレーションが発行され得る。一部実施形態では、投機的なソースが後から利用可能となっても、オペレーションが再発行されなくてもよい。
805に示すように、発行されたオペレーションが、投機的なオペランドソースが提供するデータ値を使用して実行され得、807に示すように、このオペレーションの結果がブロードキャストされ得る。オペレーションの結果がブロードキャストされると、依存関係のあるオペレーションが実行できるようになる。
その少し後、投機的なソースが正しくないと判定された場合(例えば、投機的なソースが提供するデータ値と非投機的なソースが提供するデータ値とが一致しないか、あるいは投機的なソースのタグの生成に使用した投機的なリンクが正しくない場合)、非投機的なソースのタグが、投機的なソースの値が正しくないことを知らせる指標としてブロードキャストされ得る。非投機的なソースのタグをブロードキャストする際には、スケジューラが、オペレーションを再発行することで応答できるように、タグがブロードキャストされる。例えば、一部実施形態では、タグがブロードキャストされており、このタグに関連付けられている状態フラグが特定の値にセットされている場合に、スケジューラが応答してもよく、別の実施形態では、関連する状態フラグを使用せず、スケジューラは、非投機的なタグがブロードキャストされる度にオペレーションを再発行するように構成されていてもよい。
(投機レジスタマップ)
図7は、マイクロプロセッサ100に備えられ得るディスパッチユニット104の別の実施形態を示す。この実施形態では、ディスパッチユニット104は、レジスタマップ134、スタックファイル132(および/または不図示のメモリファイル136)、および投機レジスタマップ800を備える。レジスタマップ134と同様に、投機レジスタマップ800は、論理レジスタ名を物理レジスタ名に変換し得る。しかし、投機レジスタマップ800は、スタックファイル132(および/またはメモリファイル136)が、物理レジスタに記憶されている値をロードオペレーションの投機的な結果にリンクすると、論理レジスタ名を物理レジスタ名に投機的にマップし得る。投機レジスタマップ800によって、アドレス指定パターンを含まないオペレーションの投機的なオペランド値を、レジスタのデータ値にリンクできるようになり得る。例えば、論理レジスタEAXについて有効な投機マップが存在する場合、ソースオペランドとしてEAXを有するオペレーションは、レジスタマップ134が提供する非投機的なタグと、投機レジスタマップ800が提供する投機的なタグの2つのソースタグを有し得る。投機的なソースが利用可能になると直ちにオペレーションが発行できるため、投機レジスタマップ800は、介入するロードおよびストアを全て迂回して、投機的なオペランドのタグを介して、データの使用先をデータの作成元に直接連結し得る。一部実施形態(投機的なレジスタ状態を記憶するための記憶領域を備えたリオーダバッファを有する実施形態など)では、投機マップが、物理レジスタ名以外のタグを記憶してもよい点に留意されたい。
投機レジスタマップ800は、投機レジスタマップコントローラ802と投機レジスタマップ記憶部804を備える。投機レジスタマップ記憶部は、1つ以上のエントリ820を有し得る。各エントリ820は、特定の論理レジスタと関連付けられており、その論理レジスタが現在投機的にマップされている物理レジスタの物理レジスタ識別子812を示し得る。また、各投機レジスタマップエントリ820は、そのエントリが現在有効かどうかを示す指標(図示せず)も有し得る。一実施形態では、投機レジスタマップ記憶部804は、論理レジスタ毎に1つのエントリを有し得る。別の実施形態では、投機レジスタマップ804は、論理レジスタの個数よりも少ない数のエントリを有し得る。このような実施形態では、各エントリ820は、現在そのエントリに対応している論理レジスタを示す指標を有し得る。
投機レジスタマップコントローラ802は、ロードオペレーションの投機的な結果が、特定の物理レジスタ名によって識別されるデータ値にリンクされたという指標を受けて、エントリ820を更新するように構成され得る。例示した実施形態では、この指標はスタックファイル132から提供される。別の実施形態では、この指標は、メモリファイル136からも提供されるか、スタックファイル132の代わりにメモリファイル136から提供され得る。更新対象となるエントリ820は、ロードオペレーションのデスティネーションとして指定されている論理レジスタに対応するエントリである。このエントリは、当該ロードオペレーションに対してスタックファイル132が出力する物理レジスタ識別子を有するように更新され得る。
一部実施形態では、オペレーションがレジスタマップ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および/またはメモリファイル136のほか、数サイクルにわたって依存性を追跡する構造(後述するように投機レジスタマップ800など)が使用され得る。例えば、ディスパッチユニット104は、スタックファイル132またはメモリファイル136がリンクを識別すると、オペレーションに対する投機的なタグを生成し得る。一部実施形態では、このような投機マップを使用せずに投機的なタグが生成され得る。例えば、命令のシーケンスに以下が含まれるとする。
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は、図8に示すように、依存関係のあるオペレーションに投機的なロード結果を提供するために、ロードオペレーションを、レジスタ間移動オペレーションを含む1つ以上のオペレーションに変換するように構成されたオペレーションコンバータ180を備え得る。ロードオペレーションの変換は、ロードオペレーションの投機的な結果と、特定の物理レジスタ名によって識別されるデータ値との間にリンクが存在することを示す指標を受けて実行され得る。この指標はリンク検出器182によって提供され、一部実施形態では、このリンク検出器182はスタックファイル132および/またはメモリファイル136を有し得る。別の実施形態では、リンク検出器182は、前述のように、条件付きの移動オペレーションなどのオペレーションを受けて、データ値をリンクするように構成された論理回路を有してもよい。
一実施形態では、オペレーションコンバータ180は、オペレーションの入力オペコードのほか、そのオペレーションについて、レジスタ値と、そのオペレーションの投機的な結果との間にリンクが検出されているかどうかを知らせる指標を受信し得る。オペレーションがロードであり、投機的なリンクが検出されている場合、オペレーションコンバータ180は、レジスタ間移動オペレーションのオペコードを出力し得る。ディスパッチユニット104は、レジスタ間移動オペレーションをディスパッチし、その際、リンク検出ユニット182が出力するタグを、レジスタ間移動のソースオペランドのタグとして使用し得る。
一部実施形態では、オペレーションコンバータ180は、レジスタ間移動をディスパッチするように構成され得、この結果、スケジューラが得られたレジスタ間移動オペレーションに必要なオペランドのタグと、そのレジスタ間移動に割り当てられたエントリにある変更前のロードオペレーションに必要なオペランドのタグの両方を記憶するようになる。これによって、レジスタ間移動オペレーションの投機的な結果が正しくなかったことが検出された場合に、このオペレーションを変更前のロードオペレーションとして再発行できるようになる。これを実施するために、ロードオペレーションを変更して得られる各レジスタ間移動オペレーションに、付加的なソースオペランドが追加され得る(あるいは、別の実施形態では、これを実施するために既存のソースオペランドが変更され得る)。一部実施形態では、変更前のロードのアドレス計算を実行するか、リンクされているデータ値と実際のロード結果のデータ値とを比較するか、この両方を実行することで、レジスタ間移動オペレーションの投機的な結果が検証され得る。投機的な結果が正しくない場合、ロードの正しい結果を取得するために、データキャッシュがアクセスされ得る。ロードの正しい結果が再ブロードキャストされて、これにより、スケジューラ118は、間違った値を使用して実行された依存関係のある全てのオペレーションを再発行し得る。
一部実施形態では、オペレーションコンバータ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は、このレジスタ間移動を再発行できないように、このオペレーションに現在割り当てられているスケジューラのエントリの割り当てを解除し得る)。多くの実施形態では、スケジューラは、ロード結果のタグが結果バスに再送信されると、投機的なロード結果を使用して実行された依存関係のある全てのオペレーションを再発行するように構成され得る。別の実施形態では、スケジューラ118は、リンクされている2つのオペレーションを同時に発行するように構成され得る。このような実施形態では、リンクされている2つのオペレーションは、元のLOAD1オペレーションが変更されなければ使用したであろう物理レジスタファイルへの読出しポートを使用する。
図9は、投機的なレジスタ間移動オペレーションを含むようにロードオペレーションを変換する方法の一実施形態である。図に示すように、1401において、特定のタグが識別するレジスタのデータ値と、ロードオペレーションの投機的な結果との間に(例えば、スタックファイルまたはメモリファイルによる)リンクが検出された場合、1403に示すように、ロードオペレーションが、レジスタ間移動オペレーションを含み、ソースオペランドのタグが、投機的なロード結果にリンクされているデータ値のタグと等しくなるように変更される。1405において、レジスタ間移動オペレーションが実行されて、その際、ロードの結果のタグと共に、そのタグが識別するデータ値が結果バスに出力され得る。
1409において、(元のロードのアドレス計算を実行するなどにより)投機的な結果が検証され得る。投機的な結果が正しい場合、ロードの結果が結果バスに再ブロードキャストされることはない(あるいは、別の実施形態では、ロードの結果と共に、結果が再ブロードキャストされても依存関係のあるオペレーションの再発行が不要であることを知らせる指標が再ブロードキャストされ得る)。投機的な結果が正しくない場合、データキャッシュにアクセスしてロードの正しい結果が取得され、ロードの正しい結果が結果バスにブロードキャストされ得る。これにより、投機的な結果値を使用して発行された依存関係のある全てのオペレーションが再発行され得る。場合によっては、投機的な結果が検証されてから、レジスタ間移動オペレーションが実行されてもよい点に留意されたい。投機的な結果が正しくない場合、レジスタ間移動オペレーションは実行されなくてもよい。
ロードオペレーションの投機的な結果とレジスタのデータ値との間にリンクが検出されない(例えばロードのアドレス指定パターンがスタックファイルでヒットしない場合)、ロードを変更することができない。ロードは、通常通り実行され得、1417,1419に示すように、データキャッシュがアクセスされて、その結果が結果バスにブロードキャストされる。
(トレースキャッシュ)
図1Aは、一実施形態によるマイクロプロセッサを示す。本実施形態では、マイクロプロセッサは、命令および/または少なくとも部分的にデコードされたオペレーションのトレースをキャッシュするように構成されたトレースキャッシュ160を備える。例示した実施形態では、トレースキャッシュ160は、マイクロプロセッサのバックエンドに配置されており、この結果、オペレーションがリタイアされるとトレースフィルユニット162によってトレースが作成される。トレースにあるオペレーションを再フェッチする場合、そのオペレーションは、命令キャッシュ106またはシステムメモリ200からフェッチされずに、トレースキャッシュ160からフェッチされ得る。別の実施形態では、トレースフィルユニット162は、マイクロプロセッサのフロントエンド(例えば、ディスパッチユニット104の前に)に設けられていてもよい点に留意されたい。
図10は、トレースキャッシュ160の一実施形態を示す。この図に示すように、トレースキャッシュ160は、1つ以上のトレースキャッシュエントリ170を有し得る。各トレースキャッシュエントリ170は、命令またはオペレーションのトレース172を記憶している。トレース172は、複数の基本ブロックにある数個の命令またはオペレーションを含み得る。トレースには、そのトレースに含まれる1つ以上の分岐オペレーションに依存しているオペレーションもあれば、同じトレースにその分岐オペレーションに依存していないオペレーションがあってもよい。また、一部実施形態では、トレース172は、各トレースに含まれるオペレーションが、当該トレースにある1つ以上の分岐オペレーションに依存しているかどうか、および当該トレースが作成されたときにその分岐オペレーションが成立したかどうかを示すフロー制御情報と、この分岐オペレーションの次回の実行時に、分岐オペレーションが異なって決定(resolve)された場合に、制御を移すべきオペレーションまたは命令を識別するラベルも有し得る。
各トレースに含まれるオペレーションは、事前に最適され得る。最適化では、トレース内のオペレーションがトレースキャッシュエントリ170および/またはスケジューラ118で占有する領域が小さくなるように、そのトレース内のオペレーションのサイズが縮小されるか、オペレーションの個数が減らされるか、この両方が行われ得る。また、最適化では、トレース内の1つ以上のオペレーションをより迅速に再発行できるように(例えば、同じトレースにあるオペレーション間のデータ依存性を下げることで)調整され得る。
各トレースキャッシュエントリ170は、そのトレース172内の命令および/またはオペレーションが実行されたことによるスタックポインタ(ESPなど)の変更(変更された場合)を示す情報174を有し得る。トレースに含まれるオペレーションの処理時に、スタックファイルコントローラ202(またはメモリファイル136がスタックファイルの機能を実施している場合はメモリファイルコントローラ402)は、この情報を使用して、スタックポインタのアドレス指定調整値を更新したり、スタックファイルに入力されるオペレーションのアドレス指定パターンを調整したり、スタックファイル記憶部内のエントリのアドレス指定パターンを調整する。例えば、それぞれがスタックポインタの値に4を加算する3つのオペレーションを含むトレースキャッシュエントリ170は、その3つのオペレーションのディスパッチ時に、スタックファイルコントローラおよび/またはメモリファイルコントローラに対して、スタックポインタのアドレス指定パターン調整値に12を加算する必要があることを知らせ得る。別のオペレーションが、スタックフレームポインタをスタックポインタと等しい値に設定する場合、トレースキャッシュエントリ170は、そのオペレーションのディスパッチ時に、スタックファイルコントローラおよび/またはメモリファイルコントローラが、オフセット値をゼロに設定する(またはスタックフレームポインタのアドレス指定パターン調整値を、スタックポインタのアドレス指定パターン調整値の値に設定する)必要があることを知らせる情報を有し得る。
各トレースキャッシュエントリ170に、スタックポインタおよび/またはスタックフレームポインタの変更を示す情報174が含まれることにより、数個のトレースがディスパッチされた後であっても、スタックファイルおよび/またはメモリファイルを正確な内容に維持することができる。この情報がなければ、トレースにあるオペレーションを最適化した結果、その最適化されたオペレーションがスタックファイルおよび/またはメモリファイルによって処理されると、スタックファイルおよび/またはメモリファイルの内部が破壊される可能性がある。例えば、命令のシーケンスに以下が含まれるとする。
PUSH <>
MOV EBP, ESP
PUSH <>
これらの命令は、以下のオペレーションのシーケンスにデコードされ得る。
MOV [ESP - 4], <>
ADD ESP, ESP, -4
MOV EBP, ESP
ADD ESP, ESP, -4
MOV [ESP], <>
上記のオペレーションのほとんどは、前に実行されるオペレーションが生成するデータ値に依存している点に留意されたい。このため、これらのオペレーションは、前のオペレーションの結果が利用可能になるまで待機している間に、スケジューラ内でストールする可能性が高い。トレースフィルユニット162がこのオペレーションのシーケンスを処理して、トレースキャッシュエントリ170内にトレース172の一部として記憶すると、トレースフィルユニット162は、オペレーション間のデータ依存性を下げるために、特定の変換を実行し得る。例えば、上記のオペレーションのシーケンスは、次のように最適化され得る。
MOV [ESP - 4], <>
ADD o1, ESP, -4
MOV EBP, o1
MOV [ESP - 8], <>
ADD ESP, ESP, -8
さらに、トレース内のESPのオフセットの合計が−8であり、ESP−EBP間のオフセットが+4であることを示す情報174が、トレースキャッシュエントリ170に格納され得る。トレースフィルユニット162は、元のオペレーションを1つ処理する度に、この情報を各オペレーションにつき1回更新し、最終的に得た値を、最適化されたオペレーションのトレース172を含むトレースキャッシュエントリ170に記憶し得る。
オペレーションに対して変換を実行した結果、上記の例の最適化後の各オペレーションは、ESPの値のみに依存するようになる。このため、ESPの値が利用可能になると直ちに、トレース内の全オペレーションが発行可能となり得る。しかし、ADDオペレーション中のESPを一時レジスタo1に“スロット割り当てを行った(slotified)”最適化など、ある種の最適化においては、情報の隠蔽がなされる場合がある。例えば、スタックファイルおよび/またはメモリファイルを正確な内容に維持するためにスタックファイルコントローラおよび/またはメモリファイルコントローラによって使用される情報の隠蔽がなされる。この例では、このスロット割り当て変換は、オペレーション“MOV EBP, o1”が、実際にはスタックポインタの現在の値をEBPに割り当てているという事実を、単にレジスタの論理識別子を比較することでこのような割り当てを検出するように構成されたスタックファイルコントローラおよび/またはメモリファイルコントローラから隠蔽する。トレースキャッシュエントリ170に含まれる情報174は、トレース172内のオペレーションの実行により、ESP-EBP間のオフセットが+4に等しいということが、スタックファイルコントローラおよび/またはメモリファイルコントローラによって、トレース内のオペレーションの処理を受けてアドレス指定パターン調整値、アドレス指定パターンおよび/またはオフセット値を適宜に調整するために使用され得ることを示している。
このため、一部の実施形態では、前述のスロット割り当て変換などの最適化は、一部のオペレーションを、そのオペレーションの最適化前のものが、スタックファイルおよび/またはメモリファイル内でヒットするか、あるいは1つ以上のアドレス指定パターン、アドレス指定パターン調整値および/またはオフセット値の更新によって、スタックファイルおよび/またはメモリファイルによって認識されてしまう場合であっても、スタックファイルおよび/またはメモリファイルにおいて認識されないような形式でトレースキャッシュエントリ170内に記憶されるようにし得る。しかし、これらのオペレーションが隠蔽されても、各トレースキャッシュエントリ170に情報174が含まれることにより、スタックファイルおよび/またはメモリファイルを正確な内容に維持することができる。
複数の基本ブロックのオペレーションが1つのトレースに含まれる場合、そのトレースは、同じ基本ブロックに含まれるオペレーションの組のそれぞれに対し情報174を有し得る。スタックファイルコントローラおよび/またはメモリファイルコントローラは、各調整値に関連付けられている基本ブロックが、ディスパッチされるかどうか、および/または実行されると予測される(または実際に実行される)かどうかに応じて、情報174の各組を使用し得る。例えば、あるトレースが、2つの異なる基本ブロックのオペレーションと、そのオペレーション群のそれぞれに対応する情報174の組とを有し得る。第2のオペレーションの組の実行は、第1のオペレーションの組に含まれる分岐が成立することが条件となり得る。トレースがディスパッチされるときに、この分岐が成立しないと予測された場合、スタックファイルコントローラおよび/またはメモリファイルコントローラは、第1のオペレーションの組に対応する情報174を使用して調整を行ない得る。しかし、スタックファイルコントローラおよび/またはメモリファイルコントローラは、別のオペレーションの組に関連する情報174については、分岐予測によりこれらのオペレーションが実行されないとされたので無視し得る。
(例示的なコンピュータシステム)
図11は、バスブリッジ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は、(図11に示すように)独立したバスを介してバスブリッジ402に結合されていても、プロセッサ100との間でCPUバス224を共用してもよい。さらに、プロセッサ100aは、L2キャッシュ428と類似した追加のL2キャッシュ428aと結合されてもよい。
図12を参照すると、前述のディスパッチユニット104、スタックファイル132、スケジューラ118および/または投機レジスタマップ800を備え得るコンピュータシステム400の別の実施形態が示される。他の実施形態も可能であり、考察される。図12の実施形態では、コンピュータシステム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は、図12に示すように、その他の処理ノード間でパケットを送信するために使用される。一般に、ラインの各組624は、1本以上のデータラインと、このデータラインに対応する1本以上のクロックラインと、伝達するパケットの種類を示す1本以上の制御ラインとを含み得る。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとI/Oデバイス間の通信(あるいは、バスブリッジから、PCIバスまたはISAバスなどの従来の構成のI/Oバスへの通信)で非コヒーレントな方法で動作し得る。また、図に示すように、このリンクは、I/Oデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。1つのプロセッサから別のプロセッサに送信されるパケットが、1つ以上の中間ノードを通過し得る点に留意されたい。例えば、図12に示すように、処理ノード612Aによって処理ノード612Dに送信されるパケットは、処理ノード612Bか処理ノード612Cのいずれかを通過し得る。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。コンピュータシステム400の別の実施形態では、処理ノードの数が、図12に示した実施形態よりも上下してもよい。
一般に、パケットは、ノード間のライン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. アドレス指定パターン(406)およびタグ(408)を記憶するように構成されたエントリ(420)を有するメモリファイル(136)を有し、前記メモリファイル(136)は、メモリオペレーションのアドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致する場合に、前記タグ(408)が識別するデータ値を前記メモリオペレーションの投機的な結果にリンクするように構成されており、
    前記メモリファイル(136)に結合された実行コア(124)を有し、この実行コア(124)は、前記メモリオペレーションに依存する別のオペレーションを実行するときに、前記投機的な結果にアクセスするように構成されており、
    前記メモリオペレーションの前記アドレス指定パターンは論理レジスタの識別子を含み、前記メモリファイル(136)は、前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致するかどうかを判定するために、前記論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかを予測するように構成されているシステム(100)。
  2. 前記メモリファイル(136)は、前記メモリオペレーションの前記アドレス指定パターンに含まれる前記論理レジスタが前記スタックフレームポインタレジスタとして使用されると予測する場合に、前記メモリファイル(136)が前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致しないと判定するように構成されており、
    前記メモリファイル(136)は、前記論理レジスタが前記汎用レジスタとして使用されると予測する場合に、前記メモリファイル(136)が前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが等しければ、前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致していると判定するように構成されている請求項1に記載のシステム(100)。
  3. 前記メモリファイル(136)は、現在の呼び出し深さを追跡することによって前記論理レジスタがどのように使用されるかを予測するように構成されており、前記メモリファイル(136)は、コール命令が検出されると前記現在の呼び出し深さを増加させ、リターン命令が検出されると前記現在の呼び出し深さを減少させるように構成されている請求項1に記載のシステム(100)。
  4. 前記メモリファイル(136)は別のエントリ(420)を有しており、前記別のエントリ(420)はスタック−相対アドレス指定パターンを記憶しており、前記メモリファイル(136)は、スタックポインタに対する調整を補正するためのメカニズムを有し、前記メモリファイル(136)は、オペレーションのアドレス指定パターンと前記別のエントリ(420)に記憶されている前記スタック−相対アドレス指定パターンとが一致するかどうかを判定する際に、前記スタックポインタに対する調整を補正するための前記メカニズムを使用するように構成されている請求項1に記載のシステム(100)。
  5. 前記メモリファイル(136)は、所定のオペレーションがディスパッチされると、スタックフレームポインタのアドレス指定パターン調整値を変更するように構成されており、かつ、前記所定のオペレーションは、実行されると前記スタックフレームポインタの値を変更するものであり、
    前記メモリファイル(136)は、前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致するかどうかを判定するために、前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)との比較に先だって、前記スタックフレームポインタのアドレス指定パターン調整値を前記メモリオペレーションの前記アドレス指定パターンに適用するように構成されている請求項1に記載のシステム(100)。
  6. メモリオペレーションのアドレス指定パターンにおいて識別される論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして使用されるかを予測するステップと、
    前記予測に応じて、前記メモリオペレーションの前記アドレス指定パターンと以前のオペレーションのアドレス指定パターンとが一致するかどうかを判定するステップと、
    前記メモリオペレーションの前記アドレス指定パターンと以前のオペレーションのアドレス指定パターンとが一致する場合に、前記以前のオペレーションのオペランドのタグが識別するデータ値を前記メモリオペレーションの投機的な結果にリンクするステップと、
    前記メモリオペレーションの結果に依存するオペランドソースを有するオペレーションを実行するステップと、を有し、前記実行するステップは、前記タグが識別する前記データ値にアクセスするステップを、有する方法。
  7. 前記予測において、前記メモリオペレーションの前記アドレス指定パターンに含まれる前記論理レジスタが前記スタックフレームポインタレジスタとして使用されると予測された場合に、前記判定するステップでは、前記メモリオペレーションの前記アドレス指定パターンと前記以前のオペレーションの前記アドレス指定パターンとが一致しないと判定がなされ、
    前記予測において、前記論理レジスタが前記汎用レジスタとして使用されていると予測された場合に、前記判定するステップでは、前記メモリオペレーションの前記アドレス指定パターンが前記以前のオペレーションの前記アドレス指定パターンと等しければ、前記メモリオペレーションの前記アドレス指定パターンと前記以前のオペレーションの前記アドレス指定パターンとが一致していると判定される、請求項6に記載の方法。
  8. 前記予測するステップは、コール命令が検出されると現在の呼び出し深さを増加させ、リターン命令が検出されると前記現在の呼び出し深さを減少させることにより、前記現在の呼び出し深さを追跡するステップを有する請求項6に記載の方法。
  9. 前記以前のオペレーションの前記アドレス指定パターンはメモリファイル(136)のエントリ(420)に記憶され、前記メモリファイル(136)の別のエントリ(420)にスタック−相対アドレス指定パターンが記憶され、
    前記方法は、スタックポインタに対する変更を追跡することにより、オペレーションのアドレス指定パターンと前記スタック−相対アドレス指定パターンとが一致するかどうかを判定するステップをさらに有する請求項6に記載の方法。
  10. システムメモリ(200)と、
    前記システムメモリ(200)に結合されたマイクロプロセッサ(100)とを備えたコンピュータシステム(400)であって、
    前記マイクロプロセッサ(100)は、アドレス指定パターン(406)およびタグ(408)を記憶するように構成されたエントリ(420)を有するメモリファイル(136)を有し、
    前記マイクロプロセッサ(100)は、前記メモリファイル(136)に結合された実行コア(124)をさらに有し、
    前記メモリファイル(136)は、メモリオペレーションのアドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致する場合に、前記タグ(408)が識別するデータ値を前記メモリオペレーションの投機的な結果にリンクするように構成されており、
    前記実行コア(124)は、前記メモリオペレーションに依存する別のオペレーションを実行するときに、前記投機的な結果にアクセスするように構成されており、
    前記メモリオペレーションのアドレス指定パターンは論理レジスタの識別子を含み、
    前記メモリファイル(136)は、前記メモリオペレーションの前記アドレス指定パターンと前記エントリ(420)に記憶されている前記アドレス指定パターン(406)とが一致するかどうかを判定するために、前記論理レジスタが、汎用レジスタまたはスタックフレームポインタレジスタかいずれとして指定されるかを予測するように構成されているコンピュータシステム(400)。
JP2006536513A 2003-01-21 2004-01-09 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機 Expired - Fee Related JP4538462B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/348,144 US7024537B2 (en) 2003-01-21 2003-01-21 Data speculation based on addressing patterns identifying dual-purpose register
PCT/US2004/000477 WO2004068341A1 (en) 2003-01-21 2004-01-09 Data speculation based on addressing patterns identifying dual-purpose register

Publications (2)

Publication Number Publication Date
JP2007504575A true JP2007504575A (ja) 2007-03-01
JP4538462B2 JP4538462B2 (ja) 2010-09-08

Family

ID=32712491

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006536513A Expired - Fee Related JP4538462B2 (ja) 2003-01-21 2004-01-09 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機

Country Status (8)

Country Link
US (1) US7024537B2 (ja)
EP (1) EP1586029B1 (ja)
JP (1) JP4538462B2 (ja)
KR (1) KR101019224B1 (ja)
CN (1) CN1742257B (ja)
DE (1) DE602004015568D1 (ja)
TW (1) TWI333629B (ja)
WO (1) WO2004068341A1 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7366352B2 (en) * 2003-03-20 2008-04-29 International Business Machines Corporation Method and apparatus for performing fast closest match in pattern recognition
US7227994B2 (en) * 2003-03-20 2007-06-05 International Business Machines Corporation Method and apparatus for imbedded pattern recognition using dual alternating pointers
US7003629B1 (en) * 2003-07-08 2006-02-21 Advanced Micro Devices, Inc. System and method of identifying liveness groups within traces stored in a trace cache
US7133969B2 (en) * 2003-10-01 2006-11-07 Advanced Micro Devices, Inc. System and method for handling exceptional instructions in a trace cache based processor
US7555633B1 (en) 2003-11-03 2009-06-30 Advanced Micro Devices, Inc. Instruction cache prefetch based on trace cache eviction
US20050114627A1 (en) * 2003-11-26 2005-05-26 Jacek Budny Co-processing
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7213126B1 (en) 2004-01-12 2007-05-01 Advanced Micro Devices, Inc. Method and processor including logic for storing traces within a trace cache
US7197630B1 (en) 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US7415597B2 (en) 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US7870541B1 (en) * 2004-11-01 2011-01-11 Wind River Systems, Inc. Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer
US7831811B2 (en) * 2005-10-31 2010-11-09 Intel Corporation System and method for managing a register-based stack of operand tags
US7624253B2 (en) * 2006-10-25 2009-11-24 Arm Limited Determining register availability for register renaming
US7730289B2 (en) * 2007-09-27 2010-06-01 Faraday Technology Corp. Method for preloading data in a CPU pipeline
US8458671B1 (en) * 2008-02-12 2013-06-04 Tilera Corporation Method and system for stack back-tracing in computer programs
US20100070730A1 (en) * 2008-09-17 2010-03-18 Sebastian Pop Minimizing memory access conflicts of process communication channels
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US8832500B2 (en) 2012-08-10 2014-09-09 Advanced Micro Devices, Inc. Multiple clock domain tracing
US8959398B2 (en) 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9411590B2 (en) * 2013-03-15 2016-08-09 Qualcomm Incorporated Method to improve speed of executing return branch instructions in a processor
US9164697B2 (en) * 2013-06-24 2015-10-20 Samsung Electronics Co., Ltd. Method and architecture for highly scalable data storage
US9524164B2 (en) * 2013-08-30 2016-12-20 Advanced Micro Devices, Inc. Specialized memory disambiguation mechanisms for different memory read access types
GB2518912B (en) * 2014-01-17 2015-08-26 Imagination Tech Ltd Stack pointer value prediction
CN107710153B (zh) * 2015-07-09 2022-03-01 森蒂彼得塞米有限公司 具有有效的存储器访问的处理器
US10162526B2 (en) * 2015-10-20 2018-12-25 Micron Technology, Inc. Logical address history management in memory device
US10157268B2 (en) * 2016-09-27 2018-12-18 Microsoft Technology Licensing, Llc Return flow guard using control stack identified by processor register
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
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
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
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
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
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
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
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing 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
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
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
US10185595B1 (en) * 2018-06-04 2019-01-22 Confia Systems, Inc. Program verification using hash chains

Citations (1)

* 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

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5127103A (en) * 1987-10-14 1992-06-30 North American Philips Corporation Real-time tracing of dynamic local data in high level languages in the presence of process context switches
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
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
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
US5832205A (en) * 1996-08-20 1998-11-03 Transmeta Corporation Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed
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
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
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
DE10121792C2 (de) * 2000-05-26 2003-09-25 Ibm Universelle Ladeadresse/Wertevorhersageschema
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

Patent Citations (1)

* 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

Also Published As

Publication number Publication date
CN1742257A (zh) 2006-03-01
US20040143721A1 (en) 2004-07-22
KR20050089030A (ko) 2005-09-07
TW200422948A (en) 2004-11-01
EP1586029A1 (en) 2005-10-19
CN1742257B (zh) 2010-04-28
KR101019224B1 (ko) 2011-03-04
WO2004068341A1 (en) 2004-08-12
US7024537B2 (en) 2006-04-04
JP4538462B2 (ja) 2010-09-08
DE602004015568D1 (de) 2008-09-18
TWI333629B (en) 2010-11-21
EP1586029B1 (en) 2008-08-06

Similar Documents

Publication Publication Date Title
JP4538462B2 (ja) 二重用途レジスタを識別しているアドレス指定パターンに基づいたデータ投機
US7089400B1 (en) Data speculation based on stack-relative addressing patterns
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
KR100958705B1 (ko) 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
KR101192814B1 (ko) 로드가 선행하는 스토어에 의존적인지를 예측하는 의존성 매커니즘을 구비한 프로세서
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
KR101093784B1 (ko) 리플레이 메커니즘을 구비한 로드 저장 유닛
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
JP4745960B2 (ja) マイクロプロセッサにおいてデータ推測オペレーションを識別する推測ポインタ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070109

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070110

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090901

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091222

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20100319

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20100329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100422

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: 20100525

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100621

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

Free format text: PAYMENT UNTIL: 20130625

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100714

RD05 Notification of revocation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7425

Effective date: 20100902

A072 Dismissal of procedure [no reply to invitation to correct request for examination]

Free format text: JAPANESE INTERMEDIATE CODE: A072

Effective date: 20101104

A072 Dismissal of procedure [no reply to invitation to correct request for examination]

Free format text: JAPANESE INTERMEDIATE CODE: A072

Effective date: 20101222

LAPS Cancellation because of no payment of annual fees