JP2007515715A - 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法 - Google Patents

命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法 Download PDF

Info

Publication number
JP2007515715A
JP2007515715A JP2006542625A JP2006542625A JP2007515715A JP 2007515715 A JP2007515715 A JP 2007515715A JP 2006542625 A JP2006542625 A JP 2006542625A JP 2006542625 A JP2006542625 A JP 2006542625A JP 2007515715 A JP2007515715 A JP 2007515715A
Authority
JP
Japan
Prior art keywords
trace
instruction
cache
branch
microprocessor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006542625A
Other languages
English (en)
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 JP2007515715A publication Critical patent/JP2007515715A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • 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
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

トレースキャッシュ(160)を含み、命令キャッシュ(106)からラベル境界上のみのトレースキャッシュ(160)へとフェッチングを遷移させるマイクロプロセッサ(100)を実現する方法およびシステムの様々な形態例が開示されている。一形態例では、マイクロプロセッサ(100)は、命令キャッシュ(106)、ブランチ予測ユニット(132)およびトレースキャッシュ(160)を備える。プリフェッチユニット(108)は、分岐予測ユニット(132)が分岐命令の予測ターゲットアドレスを出力するまで、命令キャッシュ(106)から命令をフェッチしてもよい。分岐予測ユニット(132)が予測ターゲットアドレスを出力すると、プリフェッチユニット(108)は、トレースキャッシュ(160)内で予測ターゲットアドレスにマッチするエントリ(162)を調べる。マッチするエントリ(162)が見つかると、プリフェッチユニット(108)は、命令キャッシュ(106)からのフェッチ命令に従う代わりに、トレースキャッシュ(160)から1又は複数のトレース(166)をフェッチする。

Description

本発明は、マイクロプロセッサ、より具体的には、トレースキャッシュを有するマイクロプロセッサの技術に関する。
背景
マイクロプロセッサ内で処理される命令は、1と0の連続としてエンコードされている。あるマイクロプロセッサ・アーキテクチャでは、命令が、ある特定のバイト数のように、固定された長さでエンコードされる。x86のような他のマイクロプロセッサアーキテクチャでは、命令の長さは可変である。x86マイクロプロセッサアーキテクチャは、可変長命令セット(すなわち、様々な命令がそれぞれ異なるバイト数で指定される命令セット)を指定する。例えば、80386マイクロプロセッサおよび後期型のx86マイクロプロセッサは、特定の命令を指定するために1バイトから15バイトのバイト数を用いる。命令は、1〜2バイトの操作符号を有し、かつ、実行される命令に関する、アドレッシングモード、オペランドおよび付加的な詳細を特定するための付加的なバイトが追加される。
あるマイクロプロセッサ・アーキテクチャでは、各命令は、実行前に、一つあるいは複数のより簡単な処理にデコードされる。命令をデコードするステップは、命令マップ内の各論理レジスタが命令の結果を格納する物理レジスタを決定するために、および/又は、命令の結果を格納する物理レジスタを割り当てるために、レジスタリネイミングマップにアクセスすることを含む。
典型的には、命令は、システムメモリから、このシステムメモリに隣接するブロック内の命令キャッシュにフェッチされる。これらのブロックに含まれる命令は、コンパイルされた順番で、命令キャッシュ内に格納される。プログラムの実行中は、分岐がコード内に取り込まれたときのように、異なる順序で命令が実行されることがしばしばある。このようなケースでは、分岐命令と同じサイクルの間は、概して、取り込まれた分岐命令に続く複数の命令を、命令キャッシュからフェッチすることができない。これは、これら複数の命令が互いに隣接する複数のロケーションに格納されていないためである。この命令フェッチバンド幅の制約を解決するために、多くのスーパースカラマイクロプロセッサは、トレースキャッシュを一体化している。
トレースキャッシュ内に格納された命令は、典型的には、コンパイルされる順番とは反対となる実行される順番で格納される点において、トレースキャッシュは、命令キャッシュとは異なる。実行する順番にオペレーションを格納することは、シングルサイクルの間に、取り込まれる分岐オペレーションを含む命令シーケンスにトレースキャッシュからアクセスすることを許容する。これに対して、命令キャッシュから同一の命令シーケンスにアクセスするには、何サイクルも必要である。
スーパースカラマイクロプロセッサは、典型的には、クロックサイクル毎に複数の命令をデコードする。トレースキャッシュ内のトレースのスターティングアドレスとともにデコードされる一つのグループ内の各命令のアドレスにマッチさせるために必要なハードウェアの量は、多大な量である。これは、いくつかのケースにおいて、トレースキャッシュ内でのヒットを決定するための困難性を非常に増大させる。
トレースキャッシュを含み、命令キャッシュからラベル境界上のみのトレースキャッシュへとフェッチングを遷移させるマイクロプロセッサを実現する方法およびシステムの様々な形態例が開示されている。一形態例では、マイクロプロセッサは、命令キャッシュ、ブランチ予測ユニットおよびトレースキャッシュを備える。プリフェッチユニットは、分岐予測ユニットが分岐命令の予測ターゲットアドレスを出力するまで、命令キャッシュから命令をフェッチする。分岐予測ユニットが予測ターゲットアドレスを出力すると、プリフェッチユニットは、トレースキャッシュ内で予測ターゲットアドレスにマッチするエントリを調べる。トレースキャッシュ内で予測ターゲットアドレスにマッチするエントリが見つからない場合は、プリフェッチユニットは、命令キャッシュから命令をフェッチすることに代えて、トレースキャッシュから1又は複数のトレースをフェッチする。
分岐予測ユニットは、分岐が取り込まれると予測された分岐命令に遭遇すると、予測のターゲットアドレス(予測ターゲットアドレス)を出力する。例えば、これは、分岐条件が満足されると予測された、あらゆる条件付き分岐命令、または、あらゆる条件なし分岐命令のためのケースである。マイクロプロセッサのいずれかの要素が、分岐予測ミスの発生を発見すると、分岐予測ユニットは、予測ターゲットアドレスを出力する。条件付き分岐命令が実行パイプラインに入力されると、機能ユニットは、必要なデータが妥当であるときの、関係する分岐条件を評価する。いくつかの場合では、この評価は、その命令がフェッチされたときに取り込まれないと予測されていても、その命令の取り込みを生じさせる場合がある。また、これとは逆の状況が生じる場合もあるし、いずれの場合でも、分岐予測ユニットに分岐ターゲットアドレスを出力させる分岐予測ミスを生じる結果になることがある。
マイクロプロセッサは、トレースジェネレータ(trace generator)を含んでもよい。ある形態例では、トレースジェネレータは既に実行されてリトライされている命令からのトレースを組み立てる。他の形態例では、トレースジェネレータは、実行する前に、全体あるいは一部がデコードされた命令からトレースを組み立ててもよい。ある形態例では、トレースは、タグと関係付けられていてもよい。このタグは、一番初めの命令のアドレスを含み、プログラムの順序に従って、トレース内に格納されている。トレースは、命令のためのラベルを含むフロー制御フィールドを備えていてもよい。この命令の制御が、トレース内に含まれる各分岐命令に渡される。
トレースジェネレータは、新たなトレースを組み立て始める前に、分岐ターゲットアドレスに対応する命令を受信するまで待機してもよい。ひとたびトレースの組み立てが始まると、トレースジェネレータは、トレースキャッシュを確認してトレースの複製(a duplicate copy)を調べてもよいし、複製が見つかれば、トレースジェネレータは、組み立て中のトレースを破棄してもよい。ある形態例では、トレースジェネレータがトレースキャッシュ内で組み立て中のトレースの複製を識別する際に、トレースキャッシュを確認して、生成される次のトレースに対応するエントリがあるか調べてもよい。そのようなエントリが見つかった場合は、トレースジェネレータは、組み立て中のトレースを破棄するようにしてもよい。
本発明に様々な形態の改良や変更を施すことができるが、図面を用いて以下で詳細に説明する特定の形態は一例として示すものである。従って、図面および詳細な説明は、本発明を開示した特定の形態に限定しようとするものではなく、むしろ、添付の特許請求の範囲によって規定される本発明の思想および範囲に含まれるすべての改良形態、均等形態、および、代替形態を含むように意図してある。各項目は、書誌的なものであり、詳細な説明又は特許請求の範囲を限定又は妨害するために用いられているのではない。さらに、”(何々)してもよい/でもよい (may)”なる語は、許容的な意味(すなわち、潜在性を有する(having the potential to)、または、可能性(being able to))を表すものであり、強制的な意味(すなわち、マスト(must))ではない。「接続される(connected)」なる語は、直接的または間接的に接続されることを意味し、「結合される(coupled)」なる語は、直接的又は間接的に結合されることを意味する。
図1は、一形態例によるマイクロプロセッサ100に含まれる論理要素を示すブロック図である。このマイクロプロセッサ100は、ラベル境界上での命令キャッシュ106からトレースキャッシュ160への遷移を行う。マイクロプロセッサ100は、システムメモリ200内に格納された命令を実行するように構成されている。これらの命令の殆どは、システムメモリ200内に格納されたデータを処理(オペレート)する。システムメモリ200は、コンピュータシステム内において物理的に分類されていてもよく、1又は複数のマイクロプロセッサ100からアクセス可能に構成されていてもよい。ある形態例では、マイクロプロセッサ100は、x86アーキテクチャと適合可能に設計してもよい。マイクロプロセッサ100は、ここに示す要素以外のさらに他の多くの要素を含み、および/又は、さらに他の多くの要素に結合されていてもよい。例えば、キャッシュの付加的なレベルを(マイクロプロセッサ100の内部および/又は外部で)マイクロプロセッサ100およびシステムメモリ200の間に備えていてもよい。同様に、ある形態例では、マイクロプロセッサ100は、システムメモリ200を制御するように構成されたメモリコントローラを含む。これに加えて、論理素子同士の間の結合は、形態例によって異なってもよい。
マイクロプロセッサ100は、命令キャッシュ106およびデータキャッシュ128を含んでもよい。マイクロプロセッサ100は、システムメモリ200に接続されたプリフェッチユニット108を備えていてもよい。プリフェッチユニット108は、命令キャッシュ106内に格納するために、命令コードをシステムメモリ200からプリフェッチする。一形態例では、プリフェッチユニット108は、システムメモリ200から命令キャッシュ106内に、コードをバーストするように構成される。プリフェッチユニット108は、特定のコードをプリフェッチする様々な技術とアルゴリズムを使用する。プリフェッチユニット108は、命令キャッシュから命令をフェッチし、トレースキャッシュ160からディスパッチユニット104にトレースする。命令は、トレースキャッシュ160内で不明の所定の命令アドレスに応じて、命令キャッシュ106からフェッチされる。同様に、命令は、命令キャッシュ106内にある所定のアドレスに応じて、システムメモリ200からフェッチされる。
ディスパッチユニット104は、命令キャッシュ106から命令を受け取るとともに、全体および/又は一部がデコードされたオペレーションをトレースキャッシュ160から受け取る。ディスパッチユニット104は、命令キャッシュ106から受け取った命令をデコードするデコードユニット140を備えていてもよい。ディスパッチユニット104は、マイクロコード化された命令を取り扱うときに用いる、マイクロコードユニットを備えていてもよい。
ディスパッチユニット104は、スケジューラ118への処理をディスパッチするように構成される。1又は複数のスケジューラ118は、ディスパッチされた処理をディスパッチユニット104から受け取るとともに、1又は複数の実行コア124に処理を発行するように結合されていてもよい。実行コア124は、データキャッシュ128にアクセスするように構成されたロード/格納ユニット126を備えていてもよい。実行コア124によって生成される結果は、リザルトバス130に出力される。これらの結果は、後続して発効された命令のためのオペランド値として用いられ、および/又は、レジスタファイル116に格納される。リタイアキュー102は、スケジューラ118およびディスパッチユニット104に結合されていてもよい。リタイアキューは、発行された各処理がリタイアするときに判定されるように構成してもよい。
命令キャッシュ106は、命令がディスパッチユニット104によって受け取られる前に、その命令を一時的に格納してもよい。命令コードは、システムメモリ200からプリフェッチユニット108を介して命令キャッシュ106にコードをプリフェッチすることによって供給されもよい。命令キャッシュ106は、様々な構成(例えば、セットアソシアイティブ(set-associative)、フルアソシエイティブ(fully-associative)、または、ダイレクトマップ(direct-mapped))で実現してもよい。
ディスパッチユニット104は、実行コア124が実行可能なビットエンコード処理を含む信号とともに、オペランドアドレス情報、即時データおよび/または置換データを出力してもよい。ある命令を実行コア124内で実行可能な1又は複数のオペレーションにデコードするためにデコードユニット140を用いてもよい。単純な命令は、単純な処理に対応する。より複雑な命令は、マルチ処理に対応する。レジスタのアップデートを含む処理を受け取ると、ディスパッチユニット104は、レジスタファイル116内におけるレジスタ位置を確保し、投機的レジスタ状態を格納する(これに代わる形態例では、各レジスタに1又は複数の投機的レジスタ状態を格納するためにリオーダバッファを用いる)。レジスタマップは、レジスタのリネイム処理を容易にするために、供給元(source)と宛先オペランド(destination operands)の論理レジスタ名を物理レジスタ名に翻訳する。このようなレジスタマップにより、レジスタファイル116内のどのレジスタが現在割り当てられていて、どのレジスタが現在割り当てられていないのかを追跡できる。
ディスパッチユニット104によって処理が行われるときに、要求されたオペランドがレジスタ位置である場合、レジスタアドレス情報は、レジスタマップ又はリオーダバッファに送られてもよい。例えば、x86アーキテクチャでは、8つの32ビット論理レジスタ(例えば、EAX,EBX,ECX,EDX,EBP,ESI,EDIおよびESP)がある。物理レジスタファイル116(またはリオーダバッファ)は、これらの論理レジスタの内容を変える結果のためのストレージを含み、アウト・オブ・オーダの実行を可能にする。レジスタファイル116内の物理レジスタは、複数の論理レジスタのうちの一つの内容を変更する各処理の結果を格納するために割り当てられている。それゆえ、特定のプログラムによる処理を実行している間の様々な時点で、レジスタファイル116(または、これに代わる形態例ではリオーダバッファ)は、投機的に実行される所望の論理レジスタの内容を含む1又は複数のレジスタを有する。
レジスタマップは、処理のための宛先オペランドとして特定の論理レジスタに物理レジスタを割り振ってもよい。レジスタファイル116は、1又は複数の前もって割り当てられた物理レジスタを有してもよい。この物理レジスタは、所定の処理の供給元オペランドとして特定された論理レジスタに割り振られたものであってもよい。レジスタマップは、その論理レジスタに対して最も新しく割り振られた物理レジスタにタグを供給してもよい。このタグは、レジスタファイル116内のオペランドのデータ値にアクセスするため、または、リザルトバス130上で送信される結果からデータ値を受け取るために、用いられてもよい。オペランドがメモリ位置に対応すれば、オペランド値は、ロード/格納ユニット126を介して(結果を送るため、および/または、レジスタファイル116に格納するために)リザルトバス上に供給される。(1又は複数の)スケジューラのうちのひとつによって、オペレーションが発行されると、オペランドデータ値は、実行コア124送られてもよい。これに代えて、オペレーションがディスパッチされたときに(オペランドが発行されたときに、対応する実行コア124に送られる代わりに)、オペランド値が対応するスケジューラ118に送られるようにしてもよい。
図1のマイクロプロセッサ100は、アウト・オブ・オーダの実行が可能である。リタイアキュー102(又は、これに代えて、リオーダバッファ)は、レジスタの読み込み処理および書き込み処理のために元のプログラムの順序を保持してもよく、投機的命令の実行および分岐命令の予測ミスのリカバリを許容し、正確な例外処理を容易にしてもよい。いくつかの形態例では、リタイヤキュー102は、データ値の格納を行わない。これに代わる形態例では、リタイヤキュー102が、レコーダバッファのように機能し、投機的なレジスタ状態のためにデータ値を格納することにより、レジスタのリネイミングをサポートするようにしてもよい。いくつかの形態例では、リタイアキュー102は、オペレーションが有効にされると当該オペレーションをバッファのボトムに移動させる先入れ先出し処理を行うように実現され、キューのトップに新しいエントリのための余地を作るように構成してもよい。オペレーションがリタイアすると、リタイアキュー102は、レジスタファイル116内において投機的レジスタ状態の格納に不要となったレジスタの割り振りを解除し、どのレジスタが現在フリーであるかを示す信号をレジスタマップに送ってもよい。投機的レジスタ状態を生成したオペレーションが有効になるまで、レジスタファイル116内に(あるいは、これに代わる形態例では、レコーダバッファ内に)投機的レジスタ状態を保持することにより、分岐命令の予測が正しくない場合は、予測ミスされたパスに沿って投機的に実行されたオペレーションの結果は、レジスタファイル116内で無効にされてもよい。
リタイアキュー102は、トレースジェネレータ170をトレースするためのプログラムを特定するための信号も供給してもよい。トレースジェネレータ170は、フィルユニット(fill unit)として構成されていてもよい。トレースジェネレータ170は、リタイアキュー102によって特定されるトレースをトレースキャッシュ160内に格納してもよい。各トレースは、幾つもの異なる基本ブロックの一部であるオペレーションを含んでもよい。基本ブロックは、連続した命令の対として定義され、ここで、基本ブロック内のいずれかの命令が実行されると、そのブロック内のすべての命令が実行されることになるものである。一形式による基本ブロックは、分岐命令の直後に開始し、他の分岐オペレーションとともに終了する命令対であってもよい。いくつかの形態例では、トレースキャッシュ160内に格納されるトレースは、一部又は全体がデコードされたいくつもの命令を含んでもよい。一部又は全体がデコードされた命令をオペレーションという。ここで、「トレース」とは、命令又はオペレーションのグループであり、トレースキャッシュ160内の単一のトレースキャッシュエントリ内に格納される。
プリフェッチユニット108は、トレースキャッシュ160からディスパッチユニット104内にオペレーションをフェッチしてもよい。いくつかの形態例では、トレースは、リタイアキュー102から得る、一部又は全体がデコードされた命令によって組み立てられてもよい。このようなトレースがトレースキャッシュからフェッチされると、デコードユニット140は、少なくとも部分的にバイパスされ、トレースがキャッシュされたオペレーションのためのディスパッチサイクルの数が減少することになる。それゆえ、トレースキャッシュ160は、トレースが一度以上実行される場合に、幾度もの実行の繰り返しにわたって、キャッシュされたオペレーションを部分的に(又は全体的に)デコードするのに要する時間をディスパッチユニット104が償却することを可能にしてもよい。
ディスパッチユニット104の出力端に供給される、ビットがエンコードされたオペレーションおよび即時データは、1又は複数のスケジューラ118に送られてもよい。ここで、スケジューラとは、オペレーションがいつ実行可能であるかを検出すると、1又は複数の実行ユニットに実行可能オペレーションを発行する装置をいう。例えば、予約ステーション(reservation station)はスケジューラである。各スケジューラ118は、実行コア124への発行待ちの幾つもの保留オペレーションのためのオペレーション情報(例えば、ビットがエンコードされた実行ビット、オペランド値、オペランドタグ、および/又は、即時データ)を保持することができてもよい。いくつかの形態例では、各スケジューラ118は、オペランド値を格納しない。その代わり、各スケジューラは、オペランド値がいつ(レジスタファイル116またはリザルトバス130から)実行コア124によって読み込み可能になるかを判定するために、発行されるオペレーションおよびレジスタファイル116内で使用可能な結果を監視してもよい。いくつかの形態例では、各スケジューラ118は、専用実行コア124と関係付けられていてもよい。他の形態例では、単一のスケジューラは1又は複数の実行コア124に対してオペレーションを発行するように構成されてもよい。
スケジューラ118は、実行コア124によって実行されるオペレーション情報を一時的に格納するために供給されてもよい。上述したように、各スケジューラ118は、オペレーションを保留するために、オペレーション情報を格納してもよい。これに加えて、各スケジューラは、既に実行されたが再発行されるかも知れないオペレーションのためのオペレーション情報を格納してもよい。オペレーションは、実行に間に合うように、実行コア124に発行されてもよい。従って、オペレーションが実行される順番は、元のプログラム命令による順番と同一でなくてもよい。
一形態例では、各実行コア124は、加減算、桁送り、回転、論理オペレーション、および分岐オペレーションからなる整数演算オペレーションを実行するように構成された要素を含んでもよい。浮動小数点オペレーションに適応するための浮動小数点ユニットも含むように構成されていてもよい。1又は複数の実行コア124は、ロード/格納ユニット126によって行われるロードメモリオペレーションおよび格納メモリオペレーションのためのアドレス生成を行うように構成されていてもよい。
実行コア124は、条件付き分岐命令の実行に関する情報を分岐予測ユニット132に提供してもよい。実行コア124からの情報が分岐予測が正しくないことを示す場合は、分岐予測ユニット132は、既に命令処理パイプラインに入っている予測ミスされた分岐命令に続く命令を無視し、プリフェッチユニット108をリダイレクトしてもよい。リダイレクトされたプリフェッチユニット108は、命令キャッシュ106、トレースキャッシュ160および/又はシステムメモリ200から正しい酩酊の対をフェッチしてもよい。このような状況では、予測ミスされた分岐命令の後に生じた元のプログラムの順番における命令の結果は破棄されてもよい。この命令の結果には、投機的に実行され、一時的にロード/格納ユニット126および/又はレジスタファイル116に格納された命令の結果が含まれてもよい。
レジスタ地がアップデートされると、実行コア124内で生成された結果は、リザルトバス130上にレジスタファイル116へと出力されてもよい。メモリ位置の内容がチャージされると、実行コア124内で生成される結果は、ロード/格納ユニット126に送られてもよい。
トレースキャッシュ
トレースジェネレータ170は、リタイアキュー102からリタイアオペレーションの基本ブロックを受け取るとともに、これらの基本ブロックをトレースキャッシュ160内に格納するように構成されていてもよい。これに代えて、トレースジェネレータ170は、マイクロプロセッサの前段(front-end)に(例えば、ディスパッチユニットの前あるいは後)結合されていてもよく、そのときにマイクロプロセッサ内のパイプライン内で検出された基本ブロックからトレースを生成するように構成されていてもよい。トレースを組み立てている間は、トレースジェネレータ170は、トレースを生成するために、リタイアキュー102から受け取ったオペレーションの基本ブロック上で遷移を実行してもよい。いくつかの形態例では、これらの遷移は、オペレーションのリオーダおよびオペレーションの削除を含んでもよい。
図2は、一形態例によるトレースキャッシュ160を、このトレースキャッシュに結合される、および/又は、相互作用(interact)するマイクロプロセッサ100のいくつかの要素とともに示す。トレースキャッシュ160は、幾つものトレースキャッシュエントリ162を有していてもよい。各トレースキャッシュエントリ162は、トレース166として示すオペレーションのグループを格納してもよい。トレース166に加えて、各トレースキャッシュエントリ162は、識別タグ164およびフロー制御(F.C.;flow control)情報168を有していてもよい。トレースキャッシュエントリ162は、トレースに含まれる各分岐命令のためのフロー制御フィールド168を備えてもよい。各制御フィールド168は、分岐命令が取り込まれた場合、又は、取り込まれなかった場合に、どの命令を実行するかを判定するためのアドレス情報を有してもよい。例えば、フロー制御フィールド168Aは、トレースキャッシュエントリ162に含まれる第1分岐命令に対応する。この第1分岐命令は条件付きであり、フロー制御フィールド168Aは、二つのアドレスを含んでもよい。これらのアドレスのうちの一つは、条件が正しい場合の分岐命令の後に実行される命令のアドレスであってもよい。他方のアドレスは、分岐条件が誤りである場合に、次に実行される命令を示してもよい。フロー制御フィールド168Bは、トレースキャッシュ162内に含まれる第2分岐命令に対応してもよい。この分岐命令は条件付きではなく、それゆえ、フロー制御フィールド168Bは、いかなる環境下においても制御フローにパスされる命令のアドレスのみを含んでもよい。
タグ164は、命令タグ106内のタグと同様であり、与えられたオペレーションがトレースキャッシュ160内にあるかないかの判定をプリフェッチユニット108に行わせる。例えば、タグ164は、トレースキャッシュエントリ内でオペレーションを識別するアドレスビットのすべて又はいくつかを含んでもよい(例えば、そのトレース内で、タグは、プログラム内において順序の一番早いオペレーションのアドレスを含む)。いくつかの形態例では、タグは、いくつかのオペレーションがトレース内で独立的にアドレス可能になるように、十分な情報を有してもよい。他の形態例では、トレース内の一番目のオペレーションのみアドレス可能であってもよい。
いくつかの形態例では、フロー制御情報168は、トレース内に含まれる各分岐オペレーションのためのラベルを含んでもよい。このラベルは、制御が分岐するアドレスを識別するための指標であってもよい。例えば、アセンブリ言語コードのセクションは、実行のフローの制御を、そのコードが書き込まれた順番の分岐命令に速やかに従う命令に遷移させる分岐命令を含んでもよい。コーダに対する都合により、いくつかのコンパイラは、分岐命令とともに、1又は複数のアルファベットおよび数字のシンボルを含むことを許容してもよい。このラベルは、分岐命令によってターゲットとされる命令を即座に処理するアッセンブリコード内に含まれていてもよい。アッセンブリコードをコンパイルしている間は、コンパイラは、分岐命令によってターゲットとされる命令のアドレスを決定するとともに、このアドレスを分岐命令に含まれるアルファベットおよび数字のシンボルに置き換え、目的とされた命令のアドレスはラベルになってもよい。他の形態例では、命令のあらゆる基本ブロックを識別するためにラベルを用いてもよい。ラベルの境界は、コード内のあらゆるポイントであって、そのポイントにおいて、アドレスがラベルである命令に制御のフローが遷移されるポイントになってもよい。トレースの生成、および、トレースキャッシュのヒットの試みは、ラベル境界における命令の実行を生じさせてもよい。
多くの実現例において、トレースキャッシュ162は、複数の分岐命令(multiple branch instructions)および複数のフロー制御フィールド(multiple flow control field)168を含んでもよい。フロー制御情報168の各フィールドは、特定の分岐オペレーションと関係付けられてもよい。例えば、一形態例では、トレース内のひとつの制御情報格納位置168Aは、そのトレース内の第1分岐オペレーションと関係付けられ、他のフロー制御情報格納位置168Bは、そのトレース内の第2分岐命令と関係付けられてもよい。これに代えて、フロー制御情報は、タグ、又は、そのフロー制御情報と関係付けられる分岐オペレーションを特定するその他の情報を含んでもよい。さらに、分岐予測、および/又は、どのフロー制御情報が分岐オペレーションに対応するかを特定する情報が、オペレーションストレージ166内のその分岐オペレーションとともに格納されてもよい。
プリフェッチユニット108は、メモリ200から命令のラインをひとつフェッチし、そのラインを命令キャッシュ106内に格納してもよい。命令は、コンパイルされた順に、命令キャッシュ106内に格納されてもよい。ランタイムの状況次第では、命令キャッシュ106内の命令の実行順は、しばしば、コンパイルされた順から変わりうる。例えば、命令キャッシュ106からの分岐命令の実行は、フロー制御に、コンパイルされた順に従った多数の介在命令によって分岐命令から独立した命令へのジャンプを生じさせることがあってもよい。分岐命令のターゲットは、命令キャッシュ106内に存在しない。これにより、プリフェッチユニット108が、システムメモリ200から命令の他のラインをフェッチすることを生じさせてもよい。次のラインが命令キャッシュ内にロードされる間の時間は、実行コア124が次のオペレーションを待つためのアイドル時間となる。
いくつかの形態例では、プリフェッチユニット108は、トレースキャッシュ160内に指標を付けるために分岐ターゲットアドレスの一部を用いてもよい。指標が付けられた位置に有効なトレースキャッシュエントリ162が存在する場合は、プリフェッチユニットはタグフィールド164を分岐ターゲットアドレスと比較してもよい。違うがターゲットアドレスと一致する場合は、プリフェッチユニット108は、実行するためにトレース166をディスパッチユニット104にフェッチする。実行コアから受け取る情報、および/又は、分岐予測ユニットによって、プリフェッチユニット108は、次に実行される命令のアドレスに対応するタグを有するエントリが見つからなくなるまで、トレースキャッシュ160からディスパッチユニット104にトレースをフェッチし続けてもよい。プリフェッチユニット108は、命令キャッシュ106から命令をフェッチすることを再開してもよい。
図3は、一形態例による、命令を命令キャッシュからフェッチする方法、または、トレースをトレースキャッシュからフェッチする方法を示すフローチャートである。ブロック301に示すように、1又は複数の命令が命令キャッシュからフェッチされてもよい。例えば、これは、いかなる分岐オペレーションも命令からデコードされず、または、デコードされたいかなる分岐オペレーションも取り込まれない状況において実際に生じてもよい。このような状況下では、303に示すように、命令キャッシュからの命令のフェッチは、続行される。
その他のケースでは、フェッチされた命令の処理は、分岐ターゲットアドレスを生成する結果となってもよい。例えば、条件付き分岐命令(conditional branch)の条件が充足されていると予測する場合、あるいは、条件なし分岐命令(unconditional branch)に遭遇する場合、または、分岐ターゲットの予測ミスが生じる場合は、分岐ターゲットアドレスが生成されてもよい。これらのケースでは、トレースキャッシュのサーチが実行される。307に示すように、生成された分岐ターゲットアドレスの一部がトレースキャッシュ内での指標付けに用いられ、また、対応する位置に有効なエントリが格納されている場合は、エントリのタグフィールドは、分岐ターゲットアドレスの他の部分と比較されてもよい。309に示すように、比較の結果が一致する場合は、プリフェッチユニットは、トレースをトレースキャッシュ内の対応するエントリからディスパッチユニットにフェッチしてもよい。プリフェッチユニットは、トレースキャッシュの存在しないアドレスに遭遇するまで、トレースのフェッチを続行する。この点では、フェッチは、命令キャッシュから継続してもよい。
上述のように、分岐命令が取り込まれると予測された命令キャッシュから分岐命令をフェッチすることは、分岐ターゲット命令を含むラインのフェッチをプリフェッチユニットに開始させる結果をもたらしてもよい。このことは、ディスパッチユニットに命令を送る際に、特に、分岐ターゲット命令を格納するラインが命令キャッシュ内に存在しない場合は、重大な遅れを生じさせることになってもよい。
分岐命令およびこれに続く命令がリタイアするときは、トレースジェネレータ170は、分岐ラベル境界をスパンするトレースを組み立ててもよい。分岐命令とターゲット命令が命令キャッシュ内の異なるラインに格納されていたとしても、その分岐命令とターゲット命令は、同時にリタイアし、トレースジェネレータ170は、両方の命令に対応するオペレーションを含むトレースを組み立ててもよい。
続いて、分岐命令を含むコードの部分が再度トラバースされると、プリフェッチユニットは、命令キャッシュ106から命令をフェッチするよりもむしろ、対応するトレースをトレースキャッシュ160からフェッチしてもよい。分岐命令によってターゲットにされる命令は、既にトレース内に組み込まれているため、トレースは、命令キャッシュ106から親命令を実行するよりも、かなりの高速で実行されてもよい。
命令キャッシュ106よりもむしろトレースキャッシュ160からフェッチすることによって得られるマイクロプロセッサのパフォーマンスの増大度は、トレースの長さ(トレースが含むオペレーションの数)に比例してもよい。従って、可能な限り多くのオペレーションを含むトレースを組み立てることが望ましい。いくつかの形態例では、トレースジェネレータ170は、命令キャッシュ106からフェッチされた、リタイアしたオペレーションからトレースを組み立ててもよい。プリフェッチユニットが、命令キャッシュから命令をフェッチすることから、トレースキャッシュからトレースをキャッシュすることに切り替えるとき、トレースジェネレータは、トレースの組み立てを終了(terminate) してもよい。従って、命令キャッシュからのフェッチからトレースキャッシュからのフェッチへのフェッチの切り替えが生じるレートを制限することが望ましい。これは、プリフェッチユニットがトレースキャッシュをヒットすることによる制限を、ラベル境界までに制限することによって実現される。
トレースジェネレータ170によって組み立てられるトレースの長さは、プリフェッチユニット108がトレースキャッシュをヒットする頻度に反比例してもよい。例えば、命令キャッシュからフェッチされた各命令に対して、トレースキャッシュをヒットしようとすると、プリフェッチユニットは、対応するトレースを頻繁に特定し、命令のフェッチからトレースのフェッチに切り替える。トレースジェネレータは、トレースの組み立てを終了し、前回の切り替え後からリタイアしていたオペレーションを含むトレースを生成してもよい。前回のトレースキャッシュのヒットが数個の命令のうちに生じていた場合は、暫定的にリタイアしていたオペレーションの数は少なく、少数のオペレーションを含むトレースを生成することになる。
上述のように生成される短いトレースのフェッチおよび実行は、プリフェッチユニット108が命令とトレースキャッシュを切り替える頻度をさらに上げる結果となる。例えば、トレースジェネレータ170が、命令キャッシュからトレースキャッシュへとフェッチを切り替えることにより、トレースの組み立てを終了(terminate)するとき、組み立ての終了したトレースに組み込まれるはずだったいくつかのオペレーションは、トランスジェネレータによる切り替えの前にリタイアしたことがないため、トレースに組み込まれない。早期に終了されたトレースの実行は、存在しない命令をフェッチすることになるために、トレースキャッシュから命令キャッシュへと切り替える結果となる。短いトレースの実行は、マイクロプロセッサの効率改善に関しては、命令キャッシュからの親命令を実行する場合に比べて、少しは利益がある。
いくつかの形態例では、プリフェッチユニット108は、分岐予測ユニット132がターゲット命令のアドレスを生成するまで、トレースキャッシュをヒットすることを遅延させてもよい。命令キャッシュからの分岐命令のフェッチは、分岐予測ユニット132に、実行時に分岐が取り込まれるか取り込まれないかを予測させてもよい。分岐命令が取り込まれないと予測した場合は、分岐予測ユニットは、分岐命令によってターゲットとされる命令のアドレスを生成してもよい。分岐予測ユニット132は、分岐の予測ミスが生じる場合に備えて、分岐命令の後に実行される次の命令のアドレスも生成してもよい。例えば、条件付き分岐命令がフェッチされ、分岐予測ユニット132が、その分岐が取り込まれると予測するが、条件の解析において、その分岐命令は取り込まれるべきではないと判定されると、プリフェッチユニット108は、コンパイルされた順序がその条件付き分岐命令に続く次の命令の予め生成されたアドレスを用いる。取り込まれると予測された分岐か予測ミスされた分岐のいずれかのための分岐ターゲットが有効になるまで、トレースキャッシュ160のヒットを遅延させることにより、より長いトレースを生成することができる。
トレースキャッシュをヒットする前に、プリフェッチユニットがラベル境界を待つ形態例では、マッチングに用いられるアドレスは、通常、分岐ターゲットであってもよい。上述したように、フェッチの遷移は、いかなるときも、トレースキャッシュに存在しない命令をフェッチするために、トレースキャッシュから命令キャッシュへと行われる。従って、トレースジェネレータ170に要求される命令のストリームは、ラベル境界に関するいかなる点においても開始可能である。ラベル境界のみにおいてトレースキャッシュをヒットしようとするいくつかの形態例では、トレースの組み立てもラベル境界と同時に生じるように遅延される。これは、トレースの第1命令のアドレスがラベルであることを保証する。
トレースジェネレータがトレースキャッシュをサーチするときに、存在するエントリが新たに完成したトレースのタグにマッチすることが分かると、そのマッチするエントリは無効にされ、その新たに完成されたトレースは破棄され、そして、トレースジェネレータは、新たなトレースの組み立てが始まる前に、リタイアする次の分岐境界からのオペレーションを待ってもよい。いくつかの形態例では、トレースジェネレータがトレースキャッシュ内で組み立て中のトレースの複製(duplicate copy)を識別すると、トレースジェネレータは、生成される次のトレースに対応するエントリを求めてトレースキャッシュを調べてもよい。そして、エントリが見つからないと、トレースジェネレータは、組み立て中のトレースを破棄してもよい。他の形態例では、トレースジェネレータは、トレースを破棄する前であって、ラベル境界に到達するまで新たな組み立てを遅延させる前に、2つ以上の連続して生成されたトレースエントリがトレース内に存在するエントリを複製するまで待機してもよい。さらに他の形態例では、二重に存在するエントリがトレースキャッシュ内で識別されるときに、これらのエントリを無効にする。
図4は、一形態例による、トレースを組み立てる方法を示すフローチャートである。ブロック351は、受け取る命令を示す。353では、ひとつのトレース、又は、組み立て中のトレースおよび/又は次に生成されるトレースを複製する複数のトレースが、トレースキャッシュ内で識別されない場合は、その命令に対応するオペレーションは、355に示すように、トレースのための空オペレーション位置を埋めるために用いられてもよい。一方、ひとつのまたは複数の複製トレースが353で識別された場合は、命令は、それが分岐ラベルに対応するものであるかを判定する。357において、命令が分岐ラベルに対応していないと判定した場合は、命令は破棄される。命令は、分岐ラベルに対応する命令を受け取るまで、破棄され続けてもよい。
357に示すように、受け取ったオペレーションのうちの一つが分岐ラベルにおける第1オペレーションであると判定された場合は、359に示すように、新しいトレース内のオペレーション位置を埋める処理を開始してもよい。ブロック361は、トレースが完了したときに、トレースキャッシュが検索され、363に示すように対応するエントリを識別してもよい。マッチするエントリが識別されると、367に示すように、完成したてのトレースが破棄されてもよい。363で複製のエントリが見つからない場合は、新しいトレースがトレースキャッシュエントリに格納されてもよい。いくつかの形態例では、複製エントリは、多数の連続する複製エントリが見つかるまで、破棄されない。
例示的なコンピュータシステム
図5は、一形態例のコンピュータシステム400を示す。このコンピュータシステム400は、バスブリッジ402を介して様々なシステム要素に結合されたマイクロプロセッサ100を備える。マイクロプロセッサ100は、この形態例では、上述したようにトレースキャッシュジェネレータ170を備えてもよい。コンピュータシステムは、他の形態例に構成することが可能であり、考えられるであろう。ここに示すシステムでは、メインメモリ200はメモリバス406を介してバスブリッジ402に結合され、グラフィックコントローラ408はAGPバス410を介してバスブリッジ402に結合されている。多数のPCIデバイス412A−412Bは、PCIバス414を介してバスブリッジ402に結合されている。セカンダリバスブリッジ416は、EISA/ISAバス420を介して、電気的なインターフェイスを1又は複数のEISAまたはISAデバイス418に適合させるために用いられてもよい。この形態例では、マイクロプロセッサ100は、CPUバス424を介してバスブリッジ402に結合されるとともに、任意的なL2キャッシュ428に結合される。いくつかの形態例では、マイクロプロセッサ100は、集積L1キャッシュ(図示せず)を備えてもよい。
バスブリッジ402は、マイクロプロセッサ100、メインメモリ404、グラフィックコントローラ408、および、PCIバス414に接続されるデバイスの間にインターフェイスをもたらす。バスブリッジ402に接続された複数のデバイスのうちのひとつからオペレーションを受け取ると、バスブリッジ402は、オペレーションのターゲットを特定する(すなわち、特定のデバイス、あるいは、PCIバス414のケースでは、ターゲットはPCIバス414上にある)。バスブリッジ402は、オペレーションをターゲットデバイスに送る。バスブリッジ402は、オペレーションをソースデバイス又はバスで用いられているプロトコルからターゲットデバイス又はバスで用いられているプロトコルに翻訳する。
PCIバス414のためのISA/EISAにインターフェイスをもたらすことに加えて、セカンダリバスブリッジ416は、付加的な機能を有してもよい。バスブリッジ416の外部にある、または、バスブリッジ416に統合された、いずれかの形態例をとる入力/出力コントローラ(図示せず)が、コンピュータシステム400内に含まれ、キーボードやマウス、および、様々なシリアルポートおよびパラレルポートに対してオペレーションに関するサポートを行ってもよい。他の形態例では、マイクロプロセッサ100およびバスブリッジ402の間において、CPUバス424に外部キャッシュユニット(図示せず)が結合されてもよい。これに代えて、バスブリッジ402に外部キャッシュが結合されており、この外部キャッシュのためのキャッシュコントロールロジックがバスブリッジ402内に統合されている。L2キャッシュ428は、マイクロプロセッサ100の裏側に示されている。L2キャッシュ428は、マイクロプロセッサ100から分離されていてもよいし、マイクロプロセッサ100のカートリッジ(すなわち、スロット1またはスロットA)内に統合されていてもよいし、あるいは、マイクロプロセッサ100の半導体基板上に集積されていてもよい。
メインメモリ200は、アプリケーションプログラムが格納されるメモリであって、マイクロプロセッサ100は最初にこのアプリケーションプログラムを実行する。適当なメインメモリ200は、DRAM(Dynamic Random Access Memory)を含む。例えば、複数のバンクからなるSDRAM(Synchronous DRAM)またはラムバス(Rambus)DRAM(RDRAM)が適当である。
PCIデバイス412A―412Bは、例えば、ネットワークインターフェイスカード、ビデオアクセラレータ(video accelerators)、オーディオカード、ハードディスク、フロッピーディスクまたはドライブコントローラ、SCSI(Small Computer Systems Interface)アダプタ、および、電話カード(telephony cards)のような様々な周辺デバイスである。同様に、ISAデバイス418は、例えば、モデム、サウンドカード、および、GPIBのようなデータ取得カード又はフィールドバスインターフェイスカードのような様々な周辺デバイスである。
グラフィックコントローラ408は、ディスプレイ426におけるテキストおよびイメージのレンダリング(rendering)を制御する。グラフィックコントローラ408は、効果的にメインメモリ200内にシフトされるとともに、このメインメモリ200からシフトされる3次元データストラクチャをレンダ(render)する技術分野において一般的に知られている、典型的なグラフィックアクセラレータで実現できる。それゆえ、グラフィックコントローラ408は、AGPバス410のマスターであってもよい。このAGPバス410内において、グラフィックコントローラ408は、バスブリッジ402内のターゲットインターフェイスへのアクセスを要求および受領することができ、その結果、メインメモリ200にアクセスすることができてもよい。専用グラフィックバスは、メインメモリ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は、(図5に示すような)独立バスを通じてバスブリッジ402に接続されていてもよく、または、マイクロプロセッサ100とCPUバス224を共用していてもよい。さらに、マイクロプロ背差100aは、L2キャッシュ428と同様の、任意的なL2キャッシュ428aに結合されていてもよい。
図6は、上述したトレースキャッシュジェネレータ170を含むコンピュータシステム400の他の形態例を示す。これ以外の形態例も可能である。図6に示す例では、コンピュータシステム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は、図6に示すように他のプロセッシングノードとの間でパケットを送るために用いられる。一般的に、各セットのライン624は、1又は複数のデータライン、このデータラインに対応する1又は複数のクロックライン、および、伝送されるパケットのタイプを示す1又は複数のコントロールラインを含む。リンクは、複数のプロセッシングノード間での通信のためのキャッシュコヒーレント形式(cache coherent fashion)、または、プロセッシングノードとI/Oデバイス(あるいは、PCIバスまたはISAバスのようなお決まりの構成のI/Oバスへのバスブリッジ)の間の通信のためのノンコヒーレント形式でオペレートされる。さらに、リンクは、図示するような複数のI/Oデバイス間のデイジーチェーン構造を用いたノンコヒーレント形式でオペレートされてもよい。一つのプロセッシングノードから他のプロセッシングノードに送られるパケットは、1又は複数の中間ノードを通過してもよい。例えば、プロセッシングノード612Aからプロセッシングノード612Dへと送られるパケットは、図6に示すプロセッシングノード612Bまたはプロセッシングノード612Cのどちらかを通る。あらゆる適切な経路設定アルゴリズムを用いることができる。コンピュータシステム400の他の形態例は、図6に示す形態例より多くのプロセシングノード、あるいは、これより少ないプロセッシングノードを含んでもよい。
一般的に、パケットは、複数のノード間のライン624上を1又は複数のビットタイムで送られてもよい。パケットは、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシーを保持するためのプローブパケット、および、プローブパケットおよびコマンドパケットに応答するための応答パケットを備えてもよい。
プロセッシングノード612A〜612Dは、メモリコントローラおよびインターフェイスロジックに加えて、1又は複数のマイクロプロセッサを備えていてもよい。プロセッシングノードは、少なくとも一つのプロセッサを含み、必要に応じて、任意的に、メモリおよびその他のロジックと通信を行うためのメモリコントローラを含んでもよい。より具体的には、各プロセッシングノード612A〜612Dは、マイクロプロセッサ100の1又は複数の複製を含んでもよい。外部インターフェイスユニット18は、ノード内のインターフェイスロジック618を含んでもよく、これと同様に、メモリコントローラ616を含んでもよい。
メモリ614A〜614Dは、あらゆる適切なメモリデバイスでありうる。例えば、メモリ614A〜614Dは、1又は複数のラムバスDRAM(RDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM等を含んでもよい。コンピュータ400のアドレススペースは、メモリ614A〜614Dの間で分割される。各プロセッシングノード612A〜612Dは、どのアドレスに、どのメモリ614A〜614Dがマップされているか、それゆえ、あるアドレスへのメモリリクエストがどのプロセッシングノード612A〜612Dに経路設定されているのか、を判定するために用いるメモリマップを備えてもよい。言い換えれば、メモリコントローラ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(Small Computer System Interface)アダプタ、電話カード、サウンドカード、および、GPIBまたはフィールドバスインターフェイスカードのような様々なデータ取得カードを含んでもよい。「I/Oデバイス」という語と、「周辺デバイス」という語は、ここでは類義語として扱う。
ここで用いるように、「クロックサイクル」という語と、「サイクル」という語は、命令プロセッシングパイプラインの様々な段階でタスクを完了する時間のインターバルをいう。命令値および計算値は、クロックサイクルを確定するクロックシグナルに従って、(レジスタ又はアレイのような)メモリ素子によって取得される。例えば、メモリ素子は、クロックシグナルのライジングエッジ(rising edge)またはフォーリングエッジ(falling edge)に従って、値を取得してもよい。
上記の詳細な説明を一度理解すれば、当業者にとって多くの変更形態および改変形態が自明であろう。特許請求の範囲は、そのようなすべての変更形態および改変形態を含むように解釈されるものである。
本発明は、概して、マイクロプロセッサに適用可能なものである。
一形態例によるトレースキャッシュを含むマイクロプロセッサを示す。 一形態例によるトレースキャッシュエントリを示す。 一形態例において命令を命令キャッシュからフェッチする方法またはトレースをトレースキャッシュからフェッチする方法を示すフローチャートである。 一形態例によるトレースを組み立てる方法を示すフローチャートである。 一形態例によるコンピュータシステムを示す。 他の形態例によるコンピュータシステムを示す。

Claims (10)

  1. 命令を格納する命令キャッシュ(106)、
    分岐予測ユニット(132)、
    命令の複数のトレース(166)を格納するトレースキャッシュ(160)、および、
    前記命令キャッシュ(106)、前記分岐予測ユニット(132)および前記トレースキャッシュ(160)に結合されたプリフェッチユニット(108)を備えるマイクロプロセッサ(100)において、
    前記プリフェッチユニット(108)は、前記分岐予測ユニット(132)が予測ターゲットアドレスを出力するまで、前記命令キャッシュ(106)から命令をフェッチし、
    前記プリフェッチユニット(108)は、前記トレースキャッシュ(160)内で前記予測ターゲットアドレスのマッチを識別すると、前記トレースキャッシュ(160)から1又は複数の前記トレース(166)をフェッチする、マイクロプロセッサ。
  2. 前記マイクロプロセッサ(100)は、トレースジェネレータ(170)をさらに備え、このトレースジェネレータ(170)は、ラベル境界に対応する命令のトレース(166)を開始する、請求項1記載のマイクロプロセッサ(100)。
  3. 前記トレースジェネレータ(170)は、トレースキャッシュ(160)を確認し、当該トレースジェネレータ(170)が組み立てるトレース(166)の複製を調べる、請求項2記載のマイクロプロセッサ(100)。
  4. 前記トレース(166)の各々は、部分的にデコードされた命令を含む、請求項1記載のマイクロプロセッサ(100)。
  5. 前記トレース(166)の各々は、そのトレース(166)内に格納された命令のうち、プログラムの順序が一番初めの命令のアドレスを有するタグと関係付けられる、請求項1記載のマイクロプロセッサ(100)。
  6. 前記トレース(166)の各々は、フロー制御フィールド(168)と関係付けられており、このフロー制御フィールド(168)は、命令のラベルを含み、そのトレース(166)内の各分岐オペレーションは、制御フローによって前記命令のラベルにパスされる、請求項1記載のマイクロプロセッサ(100)。
  7. システムメモリ(404)、および、
    前記システムメモリ(404)に結合されたマイクロプロセッサ(100)を備えるコンピュータシステム(400)において、
    前記マイクロプロセッサは、
    命令を格納する命令キャッシュ(106)、
    分岐予測ユニット(132)、
    命令の複数のトレース(166)を格納するトレースキャッシュ(160)、および、
    前記命令キャッシュ(106)、前記分岐予測ユニット(132)および前記トレースキャッシュ(160)に結合されたプリフェッチユニット(108)を備えるマイクロプロセッサ(100)において、
    前記プリフェッチユニット(108)は、前記分岐予測ユニット(132)が予測ターゲットアドレスを出力するまで、前記命令キャッシュ(106)から命令をフェッチし、
    前記プリフェッチユニット(108)は、前記トレースキャッシュ(160)内で前記予測ターゲットアドレスのマッチを識別すると、前記トレースキャッシュ(160)から1又は複数の前記トレース(166)をフェッチする、コンピュータシステム(400)。
  8. 命令キャッシュ(106)から命令をフェッチするステップと、
    分岐ターゲットアドレスが生成されるまで、前記命令キャッシュ(106)からの命令のフェッチを続けるステップと、
    分岐ターゲットアドレスが生成されると、前記分岐ターゲットアドレスに対応するエントリ(162)をトレースキャッシュ(160)から探すステップとを備える方法。
  9. 前記分岐ターゲットアドレスに対応するエントリ(162)がトレースキャッシュ(160)内で識別されると、前記トレースキャッシュ(160)から1又は複数のトレース(166)をフェッチするステップをさらに備える、請求項8記載の方法。
  10. リタイアした命令を受け取るステップと、
    前記受け取った命令が分岐ラベルと関係付けられていれば、新たなトレース(166)の組み立てを開始するステップと、
    以前の組み立て中のトレース(166)が前記トレースキャッシュ(160)内でトレース(166)を複製すると、受け取る命令が分岐ラベルに対応するまで、新たなトレース(166)の組み立てを遅延するステップと
    をさらに備える請求項8記載の方法。
JP2006542625A 2003-12-03 2004-11-22 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法 Pending JP2007515715A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/726,902 US8069336B2 (en) 2003-12-03 2003-12-03 Transitioning from instruction cache to trace cache on label boundaries
PCT/US2004/039269 WO2005062167A2 (en) 2003-12-03 2004-11-22 Transitioning from instruction cache to trace cache on label boundaries

Publications (1)

Publication Number Publication Date
JP2007515715A true JP2007515715A (ja) 2007-06-14

Family

ID=34633400

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006542625A Pending JP2007515715A (ja) 2003-12-03 2004-11-22 命令キャッシュからラベル境界上のトレースキャッシュに遷移させる方法

Country Status (8)

Country Link
US (1) US8069336B2 (ja)
JP (1) JP2007515715A (ja)
KR (1) KR20070001900A (ja)
CN (1) CN100520712C (ja)
DE (1) DE112004002365T5 (ja)
GB (1) GB2423852B (ja)
TW (1) TWI363992B (ja)
WO (1) WO2005062167A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012003771A (ja) * 2010-06-21 2012-01-05 Arm Ltd 推測的に実行される命令のトレーシング

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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
US20050273559A1 (en) * 2004-05-19 2005-12-08 Aris Aristodemou Microprocessor architecture including unified cache debug unit
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US20060212654A1 (en) * 2005-03-18 2006-09-21 Vinod Balakrishnan Method and apparatus for intelligent instruction caching using application characteristics
US7814298B1 (en) 2005-09-28 2010-10-12 Oracle America, Inc. Promoting and appending traces in an instruction processing circuit based upon a bias value
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7747088B2 (en) 2005-09-28 2010-06-29 Arc International (Uk) Limited System and methods for performing deblocking in microprocessor-based video codec applications
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
TWI446356B (zh) 2005-09-30 2014-07-21 Mosaid Technologies Inc 具有輸出控制之記憶體及其系統
US11948629B2 (en) 2005-09-30 2024-04-02 Mosaid Technologies Incorporated Non-volatile memory device with concurrent bank operations
US7652922B2 (en) 2005-09-30 2010-01-26 Mosaid Technologies Incorporated Multiple independent serial link memory
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
TWI448901B (zh) * 2006-03-28 2014-08-11 Mosaid Technologies Inc 非揮發性記憶體系統及控制非揮發性記憶體系統之方法
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
TWI502357B (zh) * 2009-08-11 2015-10-01 Via Tech Inc 資料預先提取方法、裝置及電腦系統
KR101086457B1 (ko) * 2009-12-28 2011-11-25 전남대학교산학협력단 저 전력 트레이스 캐쉬 및 명령어 세트 예측기를 구비한 프로세서 시스템
CN102306092B (zh) * 2011-07-29 2014-04-09 北京北大众志微系统科技有限责任公司 超标量处理器实现指令缓存路选择的方法及装置
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US9158696B2 (en) * 2011-12-29 2015-10-13 Intel Corporation Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US9311247B1 (en) 2012-03-20 2016-04-12 Marvell International Ltd. Method and apparatus for detecting patterns of memory accesses in a computing system with out-of-order program execution
WO2013147828A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Preempting fixed function media devices
US9164900B1 (en) 2012-05-23 2015-10-20 Marvell International Ltd. Methods and systems for expanding preload capabilities of a memory to encompass a register file
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
KR20140134421A (ko) * 2013-05-14 2014-11-24 한국전자통신연구원 이중 명령어 페치 장치 및 방법
US10140210B2 (en) * 2013-09-24 2018-11-27 Intel Corporation Method and apparatus for cache occupancy determination and instruction scheduling
US10740105B2 (en) * 2014-04-04 2020-08-11 Texas Instruments Incorporated Processor subroutine cache
US20160335089A1 (en) * 2015-05-11 2016-11-17 Qualcomm Incorporated Eliminating redundancy in a branch target instruction cache by establishing entries using the target address of a subroutine
US20180054374A1 (en) * 2016-08-19 2018-02-22 Andes Technology Corporation Trace information encoding apparatus, encoding method thereof, and readable computer medium
US10606599B2 (en) * 2016-12-09 2020-03-31 Advanced Micro Devices, Inc. Operation cache
CN107103116B (zh) * 2017-03-27 2019-07-30 中国科学院计算技术研究所 一种复用追踪缓存的触发装置及设计方法
US10268630B1 (en) * 2017-10-24 2019-04-23 Hewlett Packard Enterprise Development Lp Noncoherent interprocessor communication remapping node controller
CN112286577B (zh) * 2020-10-30 2022-12-06 上海兆芯集成电路有限公司 处理器及其操作方法
US20230305992A1 (en) * 2022-03-25 2023-09-28 Nokia Solutions And Networks Oy Processor using target instructions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11328031A (ja) * 1998-03-12 1999-11-30 Hewlett Packard Co <Hp> 動的変換システムにおけるトレ―スのランク付け方法
US6014742A (en) * 1997-12-31 2000-01-11 Intel Corporation Trace branch prediction unit
JP2003509733A (ja) * 1997-10-23 2003-03-11 インテル・コーポレーション トレースに基づく命令キャッシング

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3896419A (en) * 1974-01-17 1975-07-22 Honeywell Inf Systems Cache memory store in a processor of a data processing system
US5210843A (en) 1988-03-25 1993-05-11 Northern Telecom Limited Pseudo set-associative memory caching arrangement
WO1993017385A1 (en) 1992-02-27 1993-09-02 Intel Corporation Dynamic flow instruction cache memory
US5896528A (en) 1995-03-03 1999-04-20 Fujitsu Limited Superscalar processor with multiple register windows and speculative return address generation
EP0870228B1 (en) 1995-10-06 2003-08-13 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5745724A (en) 1996-01-26 1998-04-28 Advanced Micro Devices, Inc. Scan chain for rapidly identifying first or second objects of selected types in a sequential list
US6167536A (en) 1997-04-08 2000-12-26 Advanced Micro Devices, Inc. Trace cache for a microprocessor-based device
US6185675B1 (en) 1997-10-24 2001-02-06 Advanced Micro Devices, Inc. Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks
US6256728B1 (en) 1997-11-17 2001-07-03 Advanced Micro Devices, Inc. Processor configured to selectively cancel instructions from its pipeline responsive to a predicted-taken short forward branch instruction
US5930497A (en) 1997-12-11 1999-07-27 International Business Machines Corporation Method and means for generation of realistic access patterns in storage subsystem benchmarking and other tests
US6216206B1 (en) 1997-12-16 2001-04-10 Intel Corporation Trace victim cache
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
GB2381101B (en) 1998-04-20 2003-06-25 Intel Corp System and method for maintaining branch information
US6256727B1 (en) 1998-05-12 2001-07-03 International Business Machines Corporation Method and system for fetching noncontiguous instructions in a single clock cycle
US6493821B1 (en) 1998-06-09 2002-12-10 Intel Corporation Recovery from writeback stage event signal or micro-branch misprediction using instruction sequence number indexed state information table
US6339822B1 (en) 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
US6233678B1 (en) 1998-11-05 2001-05-15 Hewlett-Packard Company Method and apparatus for profiling of non-instrumented programs and dynamic processing of profile data
US6247097B1 (en) 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6345295B1 (en) 1999-01-22 2002-02-05 International Business Machines Corporation Conducting traces in a computer system attachment network
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6357016B1 (en) 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US7260684B2 (en) 2001-01-16 2007-08-21 Intel Corporation Trace cache filtering
US6578128B1 (en) 2001-03-29 2003-06-10 Emc Corporation Address management for a shared memory region on a multi-processor controller board
US20020144101A1 (en) 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
US6973543B1 (en) 2001-07-12 2005-12-06 Advanced Micro Devices, Inc. Partial directory cache for reducing probe traffic in multiprocessor systems
US6823428B2 (en) 2002-05-17 2004-11-23 International Business Preventing cache floods from sequential streams
US7139902B2 (en) 2002-10-29 2006-11-21 Broadcom Corporation Implementation of an efficient instruction fetch pipeline utilizing a trace cache
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7143273B2 (en) 2003-03-31 2006-11-28 Intel Corporation Method and apparatus for dynamic branch prediction utilizing multiple stew algorithms for indexing a global history
US7178134B2 (en) 2003-04-24 2007-02-13 International Business Machines Corporation Method and apparatus for resolving memory allocation trace data in a computer system
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
US8069336B2 (en) 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7219207B2 (en) 2003-12-03 2007-05-15 Intel Corporation Reconfigurable trace cache

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003509733A (ja) * 1997-10-23 2003-03-11 インテル・コーポレーション トレースに基づく命令キャッシング
US6014742A (en) * 1997-12-31 2000-01-11 Intel Corporation Trace branch prediction unit
JPH11328031A (ja) * 1998-03-12 1999-11-30 Hewlett Packard Co <Hp> 動的変換システムにおけるトレ―スのランク付け方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012003771A (ja) * 2010-06-21 2012-01-05 Arm Ltd 推測的に実行される命令のトレーシング
US8769344B2 (en) 2010-06-21 2014-07-01 Arm Limited Tracing speculatively executed instructions
US9639361B2 (en) 2010-06-21 2017-05-02 Arm Limited Tracing speculatively executed instructions

Also Published As

Publication number Publication date
GB2423852B (en) 2007-05-30
US8069336B2 (en) 2011-11-29
TW200530912A (en) 2005-09-16
WO2005062167A3 (en) 2006-02-09
CN1890631A (zh) 2007-01-03
DE112004002365T5 (de) 2006-11-09
GB0611775D0 (en) 2006-07-26
US20050125632A1 (en) 2005-06-09
WO2005062167A2 (en) 2005-07-07
CN100520712C (zh) 2009-07-29
GB2423852A (en) 2006-09-06
TWI363992B (en) 2012-05-11
KR20070001900A (ko) 2007-01-04

Similar Documents

Publication Publication Date Title
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
US7003629B1 (en) System and method of identifying liveness groups within traces stored in a trace cache
US6950925B1 (en) Scheduler for use in a microprocessor that supports data-speculative execution
US7133969B2 (en) System and method for handling exceptional instructions in a trace cache based processor
US7487340B2 (en) Local and global branch prediction information storage
KR100958705B1 (ko) 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US20020091915A1 (en) Load prediction and thread identification in a multithreaded microprocessor
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
EP1586029A1 (en) Data speculation based on addressing patterns identifying dual-purpose register
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
WO2003093983A1 (en) System and method of using speculative source operands in order to bypass load/store operations
US7366885B1 (en) Method for optimizing loop control of microcoded instructions
EP1644823B1 (en) Load store unit with replay mechanism
US8799628B2 (en) Early branch determination
JP5335440B2 (ja) オペランドの早期の条件付き選択
WO2004099977A2 (en) System and method for operation replay within a data-speculative microprocessor
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7266673B2 (en) Speculation pointers to identify data-speculative operations in microprocessor
US7694110B1 (en) System and method of implementing microcode operations as subroutines
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution
WO1998002805A1 (en) A load/store unit with multiple pointers for completing store and load-miss instructions

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20071102

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20100421

RD05 Notification of revocation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7425

Effective date: 20100902

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101027

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20110323