JP2002508567A - 誤推論後の命令再実施のためのアウトオブパイプライン・トレース・バッファ - Google Patents

誤推論後の命令再実施のためのアウトオブパイプライン・トレース・バッファ

Info

Publication number
JP2002508567A
JP2002508567A JP2000539419A JP2000539419A JP2002508567A JP 2002508567 A JP2002508567 A JP 2002508567A JP 2000539419 A JP2000539419 A JP 2000539419A JP 2000539419 A JP2000539419 A JP 2000539419A JP 2002508567 A JP2002508567 A JP 2002508567A
Authority
JP
Japan
Prior art keywords
instruction
thread
buffer
execution
processor
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
JP2000539419A
Other languages
English (en)
Other versions
JP2002508567A5 (ja
JP3971893B2 (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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2002508567A publication Critical patent/JP2002508567A/ja
Publication of JP2002508567A5 publication Critical patent/JP2002508567A5/ja
Application granted granted Critical
Publication of JP3971893B2 publication Critical patent/JP3971893B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 本発明の一実施形態では、プロセッサ(10)は命令を実行するための実行パイプラインを含み、その命令のうちの少なくとも一部が推論実行される。また、プロセッサは命令を保持するために実行パイプラインの外にトレース・バッファ(114)を含み、推論エラーに関連する命令が命令を実行するために実行パイプライン内で再実施され、その命令のうちの少なくとも一部が推論実行される。また、プロセッサは命令と命令の実行結果を保持するためにも実行パイプラインの外にトレース・バッファを含み、その命令のうちの少なくとも一部はパイプライン内での実行後に初期リタイヤされるが、最終リタイヤ(134)までトレース・バッファ内に存続する。

Description

【発明の詳細な説明】
【0001】 関連出願:本出願ならびに本出願と同時に出願され、「Processor
Having Multiple Program Counters and
Trace Buffers Outside an Execution
Pipeline」という名称の特許出願第 号(整理番号4239
0.P4662)および「Memory System for Orderi
ng Load and Store Instructions in a
Processor That Performs Out−Of−Order
Multithread Execution」という名称の特許出願第
号(整理番号42390.P4665)は、実質的に共通の明細を有す
る。
【0002】 (発明の背景) 発明の技術分野:本発明は、プロセッサに関し、より詳細には、1つまたは複
数のトレース・バッファを有するプロセッサに関する。
【0003】 背景技術:マイクロプロセッサなど、現行のスーパスカラ・プロセッサは、パ
フォーマンスを強化するために分岐予測および不適正順序実行(out of order e
xecution)などの技法を実行する。不適正順序実行パイプラインを有するプロセ
ッサは、所与の命令がフェッチされデコードされた順序とは異なる順序でその命
令を実行する。命令は、それに関する依存関係が存在しない命令に対して不適正
順序で実行することができる。不適正順序実行では、単にプログラム命令順序の
ために実行ユニットがアイドル状態にならないようにすることにより、プロセッ
サのパフォーマンスが向上する。命令結果は、実行後にリオーダされる。
【0004】 データの依存関係を処理する作業は、命令でコードを適正順序であることに制
限することによって簡略化される。その場合、プロセッサは、データがレジスタ
によりある命令から後続命令にどのように流れるかを識別することができる。プ
ログラムの正確さを保証するため、レジスタはリネームされ、命令はその入力オ
ペランドが生成されるまで予約ステーションで待機し、生成された時点で実行の
ために適切な機能ユニットに発行される。レジスタ・リネーマ、予約ステーショ
ン、および関連機構は、従属命令が依存している命令より先に実行されないよう
に、依存関係を有する複数の命令をまとめてリンクする。したがって、このよう
なプロセッサは、適正順序のフェッチおよびデコードによって制限される。
【0005】 命令キャッシュからの命令がミスするかまたは分岐予測が間違っている場合、
プロセッサは、より高レベルのキャッシュまたはメモリから命令ブロックがフェ
ッチされるまで、または予測が間違っている分岐が解決されるまで、待機しなけ
ればならず、間違った経路の実行はリセットされる。このような挙動の結果とし
て、命令キャッシュのミスおよび予測が間違っている分岐の前後の独立命令は並
列実行することができないが、そのようにすることは正しいことである可能性が
ある。
【0006】 様々な推論は推論エラーに至る可能性がある。プロセッサが推論エラーから回
復できるようにする改良された機構をプロセッサ内に設ける必要がある。
【0007】 (発明の概要) 本発明の一実施態様では、プロセッサは命令を実行するための実行パイプライ
ンを含み、その命令のうちの少なくとも一部が推論実行される。また、プロセッ
サは命令を保持するために実行パイプラインの外部にあるトレース・バッファも
含み、推論エラーに関連する命令がトレース・バッファから実行パイプライン内
で再実施される。
【0008】 他の実施態様では、プロセッサは命令を実行するための実行パイプラインを含
み、その命令のうちの少なくとも一部が推論実行される。また、プロセッサは命
令と命令の実行結果を保持するために実行パイプラインの外部にあるトレース・
バッファも含み、その命令のうちの少なくとも一部はパイプライン内での実行後
に初期リタイヤされるが、最終リタイヤまでトレース・バッファ内に存続する。
【0009】 本発明は、以下に示す詳細な説明ならびに本発明の実施形態の添付図面により
より完全に理解されるだろうが、添付図面は、記載した特定の実施形態に本発明
を限定するものと解釈すべきではなく、説明および理解のみを目的とするもので
ある。
【0010】 (好ましい実施形態の詳細な説明) A.スレッドの作成およびパイプライン108の概要 B.トレース・バッファ114に関する詳細 1.トレース・バッファ114A a.命令待ち行列アレイ202A b.DADアレイ206Aおよび依存関係生成回路212A c.出力レジスタ・ファイル210Aと入力レジスタ・ファイル208A 2.トレース・バッファ114’ C.再実施シーケンス・アルゴリズム D.第2レベルまたは最終リタイヤ E.メモリ・システム 1.ストア・バッファおよびロード・バッファ 2.ロード・アドレスとストア・アドレスの比較 a.ロード命令の実行 b.ストア命令の実行 c.リセット 3.ストア命令の再実施 4.複数ロード命令の再実施 5.ロード命令とストア命令の最終リタイヤ F.スレッド管理ロジックおよび最終リタイヤ・ロジックに関する追加情報 G.マルチスレッド化を含まない実施形態 H.追加情報および実施形態
【0011】 図1は、プロセッサ10の所与の構成要素を示している。プロセッサ10は、
実行パイプライン12と、実行パイプライン12の外部にあるトレース・バッフ
ァ14とを含む。実行パイプライン12は、メモリ・オーダ・バッファを含む場
合もある。導体18上の命令は、実行のために実行パイプライン12に供給され
る。また、命令は、導体22を介してトレース・バッファ14にも供給される。
命令は、実行パイプライン12内で推論実行することができる。推論の例として
は、データ推論および依存関係推論を含む。多種多様の推論のいずれも含むこと
ができる。プロセッサ10は、推論エラー(誤推論)を検出し、それから回復す
るための機構をトレース・バッファ14に含む。
【0012】 誤推論が検出されると、誤推論された命令は、トレース・バッファ14から導
体24を介して実行パイプライン12に供給され、実行パイプライン12内で再
実施される。命令が「再実施」される場合、その命令とその命令に依存するすべ
ての命令は再実行されるが、必ずしも同時に行われるわけではない。命令が「完
全再実施」される場合、その命令とプログラム順序でその命令に続くすべての命
令が再実行される。プログラム順序とは、複数の命令が適正順序プロセッサ内で
実行されると思われる順序である。命令は、完全にプログラム順序でまたはプロ
グラム順序以外の何らかの順序で導体18を通過することができる。プロセッサ
10は、適正順序プロセッサである場合もあれば、不適正順序プロセッサである
場合もある。従属命令の再実行の結果、従属命令に依存する命令が再実施される
場合もある。命令の再実行の回数は、再実施をトリガする事象を制御することに
よって制御することができる。一般に、実行という用語は、最初の実行と、再実
行を含むことができる。命令の少なくとも一部の結果は、導体26を介してトレ
ース・バッファに供給される。最終リタイヤ・ロジック34は、命令が初めから
または再実行時に正しく実行されたことが保証された後で、トレース・バッファ
14内の命令を最終的にリタイヤする。
【0013】 実行パイプライン12は、多種多様の実行パイプラインのいずれでもよく、よ
り大きいパイプラインの一セクションにすることもできる。実行パイプライン1
2は、多種多様のプロセッサとともに使用することができる。図2と図3に例を
示すが、図2は実行パイプライン108を有するプロセッサ50の構成要素を示
し、図3は実行パイプライン308を有するプロセッサ108を示している。図
2の本発明の実施形態の実行パイプライン108はレジスタ・リネームを含む。
他の実施形態の実行パイプラインはレジスタ・リネームを含まない。プロセッサ
は、(図2のプロセッサ50の場合のように)複数のスレッドを同時に処理する
場合もあれば、(図3のプロセッサ100の場合のように)複数のスレッドを同
時に処理しない場合もある。プロセッサ50について、まず説明する。
【0014】 本明細書において「一実施の形態」または「一実施形態」に言及する場合、そ
の実施形態に関して記載した特定の特徴、構造、または特性が本発明の少なくと
も1つの実施形態に含まれることを意味する。本明細書の様々な箇所に「一実施
形態では」という句が現れても、必ずしもすべて同じ実施形態について言及して
いるわけではない。
【0015】 A.スレッドの作成およびパイプライン108の概要 命令は、導体102を介して命令キャッシュ(Iキャッシュ)104に供給さ
れる。デコーダ106は、Iキャッシュ104から命令を受け取るものとして示
されているが、命令がIキャッシュ104に到達する前にその命令をデコードす
ることもできる。選択したコンテキストおよび実施によっては、「命令」という
用語は、マクロ演算(マクロop)、マイクロ演算(μop)、またはその他の
形式の命令を含むことができる。縮小命令セット・コンピューティング(RIS
C)命令または複雑命令セット・コンピューティング(CISC)命令を含むが
これに限定されない様々な命令セットのいずれでも使用することができる。さら
に、デコーダ106は、CISC命令をRISC命令にデコードすることができ
る。Iキャッシュ104からの命令は、MUX110を介してパイプライン10
8に供給され、かつ、導体118を介してトレース・バッファ114に供給され
る。
【0016】 トレースとは1組の命令セットである。スレッドは、そのトレースと、レジス
タ値およびプログラム・カウンタ値などの関連信号とを含む。
【0017】 スレッド管理ロジック124は、導体130を介してプログラム・カウンタ1
12A、112B、・・・、112Xに開始計数値を供給することにより(Xは
プログラム・カウンタの数を表す)、Iキャッシュ104内のプログラムまたは
プロセスから様々なスレッドを作成する。一例として、Xは4またはそれ以上あ
るいはそれ以下にすることができる。スレッド管理ロジック124は、関連のプ
ログラム・カウンタを停止することにより、スレッドを終了する。その後、スレ
ッド管理ロジック124は、プログラム・カウンタに他のスレッドを開始させる
こともできる。様々なスレッドの一部分はIキャッシュ104から同時に読み取
られる。
【0018】 プログラムまたはプロセス内のどこでスレッドを作成すべきかを判定するため
に、スレッド管理ロジック124は、導体128を介してデコーダ106から命
令を読み取ることができる。スレッドは、プログラマまたはコンパイラによって
挿入され、スレッドの開始および終了を明示的に決定する命令を含むことができ
る。あるいは、スレッド管理ロジック124は、プログラムまたはプロセスの命
令を分析し、Iキャッシュ104に供給されたプログラムまたはプロセスを様々
なスレッドに分解することができる。たとえば、分岐、ループ、逆方向分岐、復
帰、ジャンプ、手続き呼出し、関数呼出しは、スレッドを分離するために適当な
ポイントである場合もある。スレッド管理ロジック124は、潜在的なスレッド
の長さ、含まれる変数の数、連続するスレッド間に共通する変数の数、ならびに
どこでスレッドを開始するかを考慮する際のその他の要因を考慮することができ
る。スレッド管理ロジック124は、スレッドの境界を決定する際にプログラム
順序を考慮することができる。プログラム順序とは、スレッドとスレッド内の命
令が適正順序プロセッサ上で実行されると思われる順序である。スレッド内の命
令は、(プログラム順序とは反対の)不適正順序で実行することができる。スレ
ッドは、本質的には、パイプライン108によって独立して処理することができ
る。スレッド管理ロジック124は、最適とは言えない選択を回避するために履
歴テーブルを含む予測機構を含むことができる。たとえば、スレッド管理ロジッ
ク124は、スレッドを作成し、次に、そのスレッドが実際にはプログラム順序
の一部ではなかったと後で判定する場合がある。その場合同じコードがもう一度
検出された場合、予測機構を使用して、同じスレッドをもう一度作成すべきかど
うかを判定することができるだろう。スレッド管理ロジック124は、スレッド
の動的作成と、コンパイラまたはプログラマからの明示的な命令ヒントの使用と
の組合せを使用して、命令内のどこでスレッドを作成すべきかを判定することが
できる。
【0019】 スレッドを動的に作成することは、マルチスレッド化のために特に作成または
コンパイルされたわけではないプログラムからスレッドを作成することであり、
スレッドの少なくとも1つは他のスレッドに依存する。プログラムは、実行パイ
プライン108およびスレッド管理ロジック124を含むチップから離れて作成
することができる。スレッドを動的に作成し、スレッドを実行し、実行時に推論
エラーを検出して訂正することを、動的マルチスレッド化と呼ぶ。
【0020】 図4は、条件付き分岐命令を含むスレッドT1を示している。プログラム順序
では、スレッドT2は条件付き分岐命令の次に実行される。時間順序では、スレ
ッドT2は、スレッドT1が最初に条件付き分岐命令に到達した時点から推論実
行される。したがって、スレッドT1およびT2の一部分は同時に実行される。
スレッドT2が誤推論を含む場合、スレッドT2の実施済み命令が再実施される
【0021】 スレッド管理ロジック124は、導体130を介してプログラム・カウンタの
計数値をモニタすることができる。計数値をモニタする目的は、スレッドがいつ
終了すべきかを判定することである。たとえば、条件付き分岐の条件が満たされ
ないときに、スレッドT1のプログラム・カウンタが続行可能になっている場合
、それはスレッドT2の第1の命令まで進むことになるだろう。したがって、ス
レッド管理ロジック124は、条件が満たされないときにスレッドT1のプログ
ラム・カウンタを停止する。
【0022】 図5は、関数呼出し命令を含むスレッドT1を示している。プログラム順序で
は、呼出し命令に到達したときに、プログラム・カウンタはその関数の位置まで
ジャンプして復帰命令まで実行し、復帰命令の時点でプログラム・カウンタは呼
出し後の命令に復帰する。プログラム順序では、スレッドT2は復帰後の命令か
ら始まる。時間順序では、スレッドT2は、スレッドT1が最初に呼出しに到達
した時点から推論実行される。スレッドT2が誤推論を含む場合、スレッドT2
の実施済み命令が再実施される。スレッドT1は、そのプログラム・カウンタが
スレッドT2の第1の命令に到達したときに終了する。図5のロードMX命令お
よびストアMX命令について以下に説明する。
【0023】 図6は、あるプログラムの一セクションの一部であるスレッドT1、T2、T
3、T4を示している。様々なプログラム・カウンタがスレッドT1、T2、T
3、T4を生成する。スレッドT1は、ポイントA(関数呼出し命令)までの命
令を含み、次にポイントBからポイントC(条件付き逆方向分岐命令)、ポイン
トDまで、さらにもう一度ポイントCまでの命令を含む(このループは数回繰り
返すことができる)。スレッドT2は、プログラム順序でポイントAで呼び出さ
れた関数の復帰命令の直後にある命令から始まる。スレッドT3は、プログラム
順序でポイントCの条件付き逆方向分岐の直後にある命令から始まり、ポイント
E、ポイントF、ポイントG、ポイントH、さらにポイントIまで継続し、ポイ
ントIはスレッドT2が始まるポイントAの直後の命令への復帰命令である。素
レットT4は、プログラム順序でポイントEの条件付き逆方向分岐の直後にある
命令から始まる。
【0024】 図7に示すように、スレッドT1、T2、T3、T4の一部分は同時にフェッ
チされ、デコードされ、実行される。プログラム順序に従わないので、これらの
スレッドは不適正順序でフェッチされ、デコードされ、実行される。時間順序で
は、スレッドT2、T3、T4の実行はポイントA、C、Eの命令の直後にそれ
ぞれ始まる。垂直破線は親子関係を示している。スレッドT2、T3、T4は、
レジスタまたはメモリ位置にあるデータが正確であることが確実になる前にその
データを頼りにすることにより、推論実行される。プロセッサ100は、誤推論
を検出し、誤推論した命令を再実施させるための機構を有する。スレッドT4が
プログラム順序の一部ではないことが判明する。スレッドT4は、スレッドT4
がプログラム順序の一部ではないことをスレッド管理ロジック124が判定する
まで実行することができる。その時点でスレッドT4はリセットすることができ
、プロセッサ100内のスレッドT4を保持または処理する資源は、割振り解除
し、次に他のスレッドのために割り振ることができる。プログラム順序では、ス
レッドT1、T2、T3は、まずスレッドT1、次にスレッドT3、次にスレッ
ドT2という順序で実行されることになる。
【0025】 図2を参照すると、MUX 110からの命令はリネーム/割振りユニット1
50によって受け取られ、そのユニットはレジスタ・ファイル152内のリネー
ムした物理レジスタの物理レジスタ識別子(PRID)を供給する。このPRI
Dはバイパス導体126を介してトレース・バッファ114に供給される。割振
りは、命令にレジスタを割り当てることと、スケジュール/発行ユニット156
の予約ステーションの項目を割り当てることを含む。予約ステーション内の特定
の命令のためにオペランドの準備ができると、実行ユニット158のうちの1つ
の実行ユニット(たとえば、整数、浮動小数点)またはアドレス生成ユニット(
AGU)172と、メモリ・オーダ・バッファ(MOB)178と、データ・キ
ャッシュ176とを含むメモリ実行パイプラインにその命令が発行される。命令
によっては、オペランドは導体168を介してレジスタ・ファイル152から供
給される場合もある。本発明の一実施形態では、1つのスレッド内の従属命令は
、不適正順序で実行されないようにリンクすることができる。しかし、様々なス
レッドからの従属命令は、同時にフェッチし、デコードし、不適正順序で実行す
ることができる。所与のスレッドの実行は推論実行にすることができる。
【0026】 高いパフォーマンスのため、予約ステーションおよび関連機構は、低待ち時間
と高帯域幅命令発行の両方を有するように設計されている。この待ち時間と帯域
幅の要件は、予約ステーション内で待機できる命令の数に制限を加えるものであ
る。トレース・バッファ114をパイプライン108の外部に位置決めすること
により、パイプライン108のスループットを大幅に低下させることなく、多数
の命令を実行/再実施に使用イネーブルにすることができる。実行パイプライン
108とトレース・バッファ114との間の待ち時間の影響はパイプライン化に
より低減することができる。
【0027】 実行の結果と関連情報は、ライトバック・ユニット162から導体122(レ
ジスタの場合)を介し、さらにMUX 192と導体196を介してトレース・
バッファ114に書き込まれる。この結果と関連情報は、レジスタ・ファイル1
52と関連リオーダ・バッファ(ROB)164に書き込むこともできる。ある
命令の結果と情報がレジスタ・ファイル152およびROB164に書き込まれ
ると、その命令は、パイプライン108に関する限り、適正順序でリタイヤされ
る。このリタイヤは第1レベルまたは初期リタイヤと呼ばれる。第1レベル・リ
タイヤ時またはその前に、予約ステーション、レジスタ・ファイル152、RO
B164を含む、スケジュール/発行ユニット156内のリタイヤした命令用の
資源の割振りが解除される。しかし、その命令に関して必要なすべての詳細は、
後述する最終的なリタイヤまでトレース・バッファ114およびMOB178内
に維持される。
【0028】 プログラム順序で後のスレッドで使用するデータが前のスレッドで生成される
場合、後のスレッドと前のスレッドとの間に依存関係が存在する。このデータは
、メモリ命令または非メモリ命令によって前のスレッドで生成された可能性があ
る。たとえば、後のスレッド内のロード命令が前のスレッド内のストア命令と同
じアドレスを有する場合、後のスレッドは前のスレッドに依存する可能性がある
。また、後のスレッド内のある命令が前のスレッドで変更されたレジスタを必要
とする場合も、後のスレッドは前のスレッドに依存する可能性がある。同様に、
プログラム順序で後の命令が前の命令によって生成されたデータを使用する場合
、後の命令は前の命令に依存する。「依存関係」という用語は「依存関係推論」
という句でも使用する。依存関係推論の一例は、ロード命令と前のストア命令と
の間に依存関係がまったくないと推論することである。アドレスの突合せは、依
存関係推論エラーをチェックするための技法の一例である。データ推論の一例は
、レジスタ内のデータが正しいデータであると推論することである。レジスタの
突合せは、データ推論エラーをチェックするための技法の一例である。
【0029】 B.トレース・バッファ114に関する詳細 図8を参照すると、トレース・バッファ114はトレース・バッファ114A
、114B、114C、・・・、114Yを含む。Yはトレース・バッファの数
を表す。たとえば、Y=4(すなわち、Y=D)である場合、4つのトレース・
バッファが存在する。Yが3未満である場合、トレース・バッファ114は図8
に示すトレース・バッファをすべて含むわけではなくなる。YはX(プログラム
・カウンタの数)と同じかまたはXとは異なるものにすることができる。トレー
ス・バッファ114は、個別トレース・バッファに分割された単一メモリにする
か、物理的に別々のトレース・バッファにするか、あるいは両者の組合せにする
ことができる。
【0030】 図9を参照すると、一実施形態では、スレッド管理ロジック124は、スレッ
ドIDのプログラム順序(リタイヤ順序でもある)を指定するアレイ198を含
む。この例では、各トレース・バッファは固有のスレッドIDを有するかまたは
スレッドIDに対する1対1のマッピングを有する。たとえば、トレース・バッ
ファ114AにはスレッドID1が割り当てられ、トレース・バッファ114B
にはスレッドID2割り当てられ、以下同様である。スレッドIDはハードワイ
ヤードにするかまたはプログラミングすることができる。一実施形態では、各プ
ログラム・カウンタは特定のスレッドIDおよびトレース・バッファに関連付け
られる。(あるいは、このような制限された関係が存在しない。)
【0031】 図9は、時点t1と時点t2におけるスレッドのリタイヤ順序の一例を示して
いる。この例では、4つのトレース・バッファと4つのスレッドIDのみが存在
する。関連スレッド番号は括弧内に示す。実施によっては、括弧内のスレッド番
号は実際にはアレイ198に含まれなくなる。時点t1では、図6の例のように
、プログラムおよびリタイヤ順序はスレッドT1、T3、T2、T4になる。時
点t1と時点t2との間には、スレッドT4がプログラム順序内にないことが判
定される。したがって、スレッドT4はリセットされ、トレース・バッファ11
4D内にスレッドT5(図5には図示せず)のためのスペースができる。スレッ
ドT5はスレッドID4に関連付けられる。スレッドT1はリタイヤし、トレー
ス・バッファ114A内にスレッドT6のためのスペースができる。スレッドT
6はスレッドID1に関連付けられる。時点t2では、プログラムおよびリタイ
ヤ順序はT3、T2、T5、T6になる。(スレッドT4がリセットされる前に
スレッドT1がリタイヤした場合、スレッドT5およびT6は異なるスレッドI
Dを有することになるが、プログラムおよびリタイヤ順序は変わらないだろう。
)使用するアルゴリズムによっては、スレッドT2は最初はアレイ198内のス
レッドT3より前にあった可能性があるが、プログラムおよびリタイヤ順序は時
点t1におけるアレイ198のように訂正されることになるだろう。
【0032】 前述のように、スレッドのプログラム順序は、スレッドが適正順序プロセッサ
で実行されると思われる順序である。また、命令のプログラム順序は、命令が適
正順序プロセッサで実行されると思われる順序である。スレッド管理ロジック1
24は必ずしも最初にそのスレッド用の真のプログラム順序を決定するわけでは
ない。しかし、スレッド管理ロジック124は結局、真のプログラム順序を決定
する。
【0033】 図8を参照すると、トレース・バッファ114A、114B、・・・、114
Yは、導体118に接続された導体118A、118B、・・・、118Yを介
して命令を受け取る。導体118A、118B、・・・、118Yの間にはデマ
ルチプレクシング回路が存在する場合もある。あるいは、どのトレース・バッフ
ァが活動化されるかをイネーブル信号によって制御することもできる。さらに、
並列トランザクションを処理するために十分な並列導体が存在する場合もある。
トレース・バッファ114A、114B、・・・、114Yは、導体120に接
続された導体120A、120B、・・・、120Yを介してパイプライン10
8に対して再実施のために命令および関連情報を供給する。ただし、トレース・
バッファ114からの複数の命令が再実行のために導体120およびMUX 1
10を同時に通過する場合もあることに留意されたい。同時に、デコーダ106
からの複数の命令も初めてMUX 110を通過することができる。スレッドI
Dおよび命令ID(instrID)はパイプラインにより各命令に付随する。
また、再実施計数値もその命令に付随する場合がある。ロード命令およびストア
命令の場合、ロード・バッファID(LBID)とストア・バッファID(SB
ID)もその命令に付随する場合がある。一実施形態では、LBIDとSBID
がどの命令にも付随するが、ロードまたはストアではない命令の場合、LBID
値とSBID値は無意味なものになる可能性がある。以下に説明するように、P
RIDまたは値が再実行中の命令に付随する場合もある。
【0034】 トレース・バッファ114A、114B、・・・、114Yは、導体126に
接続されたバイパス導体126A、126B、・・・、126Yを介してリネー
ム/割振りユニット150からPRID値、LBID値、SBID値を受け取る
。また、トレース・バッファ114A、114B、・・・、114Yは、導体1
22に接続された導体122A、122B、・・・、122Yと、導体196に
接続された導体196A、196B、・・・、196Yを介してライトバック結
果情報と関連信号を受け取る。再実施信号は、導体194に接続された導体19
4A、194B、・・・、194Yを介して供給される。導体120、126、
122、194、196では、多重化またはイネーブル回路あるいは相当な数の
並列導体を使用することができる。トレース・バッファは同一またはいくらか異
なるものにすることができる。
【0035】 図10のトレース・バッファ114Aは、トレース・バッファの第1の実施形
態を示している。図11のトレース・バッファ114A’は、トレース・バッフ
ァの第2の実施形態を示している。トレース・バッファの他の実施形態は、トレ
ース・バッファ114Aおよび114A’の変形形態あるいはまったく異なるア
ーキテクチャを含むことができるだろう。
【0036】 1.トレース・バッファ114A 図10を参照すると、トレース・バッファ114Aは、命令待ち行列アレイ2
02Aと、データ及び依存関係(DAD)アレイ206Aと、入力レジスタ・フ
ァイル208Aと、出力レジスタ・ファイル210Aと、依存関係生成回路21
2Aと、制御回路224Aとを含む。「アレイ」という用語は、特定の形式に制
限せず、広い意味で複数方向の情報を含むためのものである。
【0037】 a.命令待ち行列アレイ202A 図12に関連して、本発明の一実施形態による命令待ち行列アレイ202Aの
構造と、それと他の構成要素との対話について、以下に説明する。命令待ち行列
アレイ202Aは、特定のスレッドの一部であるIキャッシュ104からフェッ
チされた命令を受け取る。1つのスレッド内の命令は、適正順序でフェッチされ
、命令待ち行列アレイ202Aに書き込まれる。他のスレッドの一部である命令
は、異なるトレース・バッファの命令待ち行列内に書き込まれるか、または異な
る時点で命令待ち行列アレイ202Aによって書き込まれる。命令待ち行列アレ
イ202Aは、各命令識別子(instrID)に関する様々な情報フィールド
を含む。様々な実施形態は、いくらか異なるフィールドと、異なる数の行を含む
ことができるだろう。命令待ち行列アレイ202Aのこの実施形態では、プログ
ラム・カウンタ値は考慮されないが、他の実施形態では考慮される可能性がある
。命令待ち行列アレイ202Aと添付図面に示す他のすべての構成要素は、図示
していない様々なフィールド、信号、および構造を含むことができる。このよう
なフィールド、信号、構造は図示していない。というのは、これらは実施に応じ
て変化するものであり、当業者によって理解されており、本明細書を非常に複雑
にし、本発明を不明確にする傾向があるからである。
【0038】 命令は、(たとえば、そのスレッドがプログラムの適正順序実行の一部ではな
いと判定されたという理由で)最終的にリタイヤまたは廃棄されるまで、トレー
ス・バッファ114A内で待機する。まだ実行されていない命令が依然としてト
レース内に存在する間に命令待ち行列アレイ202Aがいっぱいになった場合、
1つの命令が最終的に命令待ち行列アレイ202Aからリタイヤされ、1つの行
の割振りが解除されるまで、トレース内の命令はトレース・バッファ114また
はリネーム/割振りユニット150によって受け取られない。システム100内
の様々なアレイの項目は、先頭ポインタおよび末尾ポインタの移動によって割振
りおよび割振り解除を行うことができる。
【0039】 以下のコード行に関連して、命令待ち行列アレイ202Aについて説明する。 I0:mul R1,R2→R1 I1:mul R3,R4→R2 I2:add R1,R2→R1 I3:add 10,R1→R4 I4:store R2→Mx I5:store R1→My これらは、1つのスレッド内の最初の6つの命令である。トレース・バッファ1
14A以外のトレース・バッファはプログラム順序でトレース・バッファ114
Aより前にあることは明らかになるだろう。
【0040】 「命令コード」フィールドは、特定の命令に関連する命令コードを含む。「宛
先」、「ソース1」、「ソース2」の各フィールドは、命令の宛先、ソース1、
ソース2を識別する。「ソース1のインデックス」は、そのソースを含むトレー
ス・バッファ114A内の命令項目を識別する。たとえば、instrID0の
宛先はinstrID2のソース1に使用される。したがって、instrID
2の「ソース1のインデックス」フィールドには0が入る。instrID2の
宛先はinstrID3のソース2に使用される。したがって、instrID
3の「ソース2のインデックス」フィールドには2が入る。×は指定なしを意味
する。
【0041】 「有効1」と「有効2」のフィールドは、トレース・バッファ114A内のス
レッドの外部からの命令によってあるinstrIDの対応するソース・オペラ
ンドが事前に生成されたときに第1の値(たとえば、論理0)にセットされ、そ
のスレッド内の命令によってあるinstrIDのソース・オペランドが事前に
生成されたときに第2の値(たとえば、論理1)にセットされるビットである。
instrID0のソース1(R1)は、命令待ち行列アレイ202A内のトレ
ースの外部で生成される。したがって、instrID0の有効1は論理0にな
る。instrID3のソース2はinstrID2の宛先から得られる。した
がって、instrID3の有効2は論理1になる。
【0042】 命令I3は、定数「10」にR1を加算することを含む。この定数は、命令と
ともに、特殊レジスタ(図示せず)に、ソース1フィールドに、または他の何ら
かの機構により格納することができる。図12では、instrID3のソース
1フィールドに×(指定なし)が示されている。あるいは、ソース1フィールド
に何らかのインジケータを入れることができるだろう。
【0043】 ストア・バッファID(SBID)フィールドは、後述するストア・バッファ
内のストア命令に関連するSBIDを保持する。ロード・バッファ(LBID)
フィールドは、後述するロード・バッファ内のロード命令に関連するLBID項
目を保持する。SBID値とLBID値は、リネーム/割振りユニット150に
よって割り当てられ、バイパス導体126を介して命令待ち行列アレイに書き込
まれる。スレッドID番号フィールドは命令待ち行列アレイ202Aに含めるこ
とができるだろうが、暗黙のものなのでその必要はない。
【0044】 b.DADアレイ206Aおよび依存関係生成回路212A 図13を参照すると、DADアレイ206Aの一実施形態は、1対1方式で命
令待ち行列アレイ202AのinstrID項目に対応する「instrID」
項目(行)を含む。実際に、命令待ち行列アレイ202AとDADアレイ206
Aは同じアレイの異なる部分にすることもできるだろう。しかし、一部の実施形
態では、命令待ち行列アレイ202AとDADアレイ206Aに関連する別々の
読取りポートが存在する。
【0045】 DADアレイ206Aは、命令によって生成された値またはレジスタ・ファイ
ル152内のPRIDのいずれかを含む「値またはPRID」フィールドを含む
。この値は、ライトバック・ユニット162とライトバック・バス122および
196を介して実行ユニットからトレース・バッファ114Aにライトバックさ
れる。「状況」フィールドは、2ビットにすることができるものであり、「値ま
たはPRID」フィールドが「値」を含むか「PRID」を含むかを示す。一実
施形態では、「値またはPRID」が有効な「値」または有効な「PRID」の
いずれも保持しないことが可能である。「再実施計数値」フィールドは、命令デ
ィスパッチを明確に識別するものであり、同じinstrIDの命令がパイプラ
イン108で再実施されるたびに増分される。一実施形態では、パイプライン1
08内で1つの命令を複数回同時に再実施することも可能である。この場合、一
実施形態では、最高「再実施計数値」に関連する情報だけがDADアレイ206
Aにライトバックされる。
【0046】 「依存関係フィールド」は、各論理レジスタに関するビットを含む。図13で
は、簡略化のため、4つの論理レジスタ(R1、R2、R3、R4)だけが表さ
れている。しかし、この数ははるかに大きいものにすることもできる。この例で
は、依存関係フィールド項目は、トレースへの入力値と命令項目との間にデータ
依存関係連鎖が存在することを示すために1にセットされ、依存関係がまったく
ない場合に0にセットされる。依存関係フィールド項目は、入力値が受け取られ
た場合に(値の誤推論が検出されたときなどに)トレース内のどの命令を実行す
る必要があるかを識別する。
【0047】 命令がフェッチされ、デコードされ、トレース・バッファ114Aに書き込ま
れると、依存関係ビットが順次計算され、DADアレイ206Aに書き込まれる
。依存関係ビットは、命令を再実施すべきかどうかが判定される前に生成するこ
とができる。図13の依存関係ビットは、B.1.a項に前述したように6つの
命令I1〜I5に関するものである。
【0048】 依存関係フィールドは、機械的手法により作成することができる。このような
手法の1つを説明する前に、より直観的なレベルでの作成について説明する。
【0049】 i.直観レベル 命令I0の結果はレジスタR1およびR2のみに依存する。したがって、in
strID0のR1列とR2列には1が入り、R3列とR4列は0のままになる
(命令I0に関する情報を保持する)。
【0050】 命令I1の結果はレジスタR3およびR4のみに依存する。したがって、in
strID1のR1列とR2列には0が入り、R3列とR4列には1が入る。
【0051】 命令I2の結果は、命令I0およびI1で生成されたレジスタR1およびR2
にそれぞれ直接依存する。命令I0では、R1はトレースの先頭にあるR1値と
R2値に依存する。命令I2では、R2はトレースの先頭にあるR2値とR4値
に依存する。したがって、命令I2はトレースの先頭にあるR1〜R4値に間接
的に依存し、instrID2のR1〜R4列には1が入る。
【0052】 命令I3の結果は、命令I2で生成されたレジスタR1に直接依存する。した
がって、命令I2がトレースの先頭にあるR1〜R4値に依存するので、命令I
3はこれらの値に間接的に依存し、instrID3のR1〜R4列には1が入
る。
【0053】 命令I4の結果は、命令I1で生成されたレジスタR2に直接依存する。R2
はトレースの先頭にあるレジスタR3値とR4値に依存する。したがって、in
strID4のR1列とR2列には0が入り、R3列とR4列には1が入る。
【0054】 命令I5の結果は、命令I2で生成されたレジスタR1に直接依存し、これは
トレースの先頭にあるレジスタR1〜R4に依存する。したがって、instr
ID5のR1〜R4列には1が入る。
【0055】 ii.機械的手法 本発明の一実施形態による依存関係フィールドを生成するために使用できるレ
ジスタおよびアルゴリズムについて以下に説明する。図14を参照すると、依存
関係生成回路212Aは、各論理レジスタごとに1つずつの一時レジスタ230
、232、234、236と、追加の一時レジスタ240とを含む。一時レジス
タ230、232、234、236は、論理レジスタR1、R2、R3、R4用
の修飾子を含む。変更レジスタ240は、トレース内の命令によってどの論理レ
ジスタを変更すべきかを示す1組のビットを含む。レジスタ230、232、2
34、236、240は、新しい命令がトレース・バッファに書き込まれるたび
に更新される。レジスタ間の境界はいくらか任意のものである。たとえば、これ
らはすべて1つの結合レジスタ内に入れることができる。
【0056】 各論理レジスタごとにトレース・バッファ・アドレス・レジスタが設けられ、
それが論理レジスタを変更するためのトレース・バッファ114A内の最後の命
令を指し示す。変更ビットおよび最後の修飾子アドレスは、トレース・バッファ
114Aに書き込むべき次の命令に関する依存関係ビットを計算するために使用
する。
【0057】 ただし、ここで使用するレジスタの変更とは、そのレジスタの値を書き込むこ
とを意味するだけであることに留意されたい。そのレジスタの内容が命令の結果
として異なるものになることを必ずしも意味するわけではない。たとえば、(命
令I0内のように)R1およびR2の内容が乗算され、その結果がレジスタR1
に書き込まれる場合、R1の内容は必ずしも命令I0の結果として異なるものに
なるわけではない。たとえば、命令前にR1の内容が「0」であるかまたはR2
が「1」である場合、命令後のR1の内容は異なるものにはならないだろう。
【0058】 図16の流れ図250は、DADアレイ206Aの依存関係フィールドを作成
するためにある命令の各ソース・オペランド(たとえば、ソース1とソース2)
ごとに実行されるアルゴリズムを表している。ステップ252では、レジスタ2
40に関連ビットがセットされているかどうかが判定される。ステップ254に
記載するように、レジスタ240内のビットがセットされていない場合、そのレ
ジスタに関連する依存関係フィールドのビットは論理1にセットされる。ステッ
プ258に記載するように、レジスタ240内のビットがセットされている場合
、関連レジスタ用の指標レジスタ(230、232、234、または236)か
ら作成されたインデックスを使用してソース依存関係フィールドが読み取られる
。次に、ステップ262に記載するように、論理OR演算を使用してソース依存
関係ビットが現行命令の依存関係ビットとマージされる。このような論理OR演
算は図15のORゲート244に示す(同図では複数のビットが入力側に表され
ている)。図16のアルゴリズムを実行する際に参照される変更レジスタおよび
修飾子は、ある命令を実行する直前に存在したものである。
【0059】 I0に関して説明すると、命令I0の前にレジスタ240はR1、R2、R3
、R4用として論理0を有し、レジスタ230、232、234、236の値は
×(指定なし)になる。ステップ252では、R1およびR2用のレジスタ24
0内の変更ビットはそれぞれ0になる。したがって、ステップ254では、R1
およびR2用の依存関係フィールド・ビットは、DADアレイ206Aのins
trID0行でそれぞれ1にセットされる。レジスタR3およびR4は含まれな
いので、instrID0の行は0のままになる。命令I0はレジスタR1を変
更するものである。したがって、レジスタ230には0が入り、命令I0がレジ
スタR1を変更するための最も最新の命令であることを示す。レジスタ232、
234、236内の値は×(指定なし)のままになる。レジスタ240のR1ビ
ットは1にセットされ、そのトレース内の命令によってR1が変更されたことを
示す。
【0060】 命令I1の依存関係フィールドは、命令I0のものと同様に生成される。変更
レジスタ240のR1論理レジスタ列は1にセットされたままになる。変更レジ
スタ240のR2列には論理1が入る。レジスタ232内の1は命令I1を表す
【0061】 I2に関して説明すると、命令I2の前にステップ252では、R1およびR
2用のレジスタ240内の変更ビットはそれぞれ論理1になる(すなわち、セッ
トされる)。ステップ258では、命令I2の直前のR1(230)およびR2
(232)用の指標レジスタがインデックスとして使用される。レジスタ230
は命令I0に関する0を含む。DADアレイ206AのinstrID0の命令
I0用の依存関係フィールドは0011になる。レジスタ232は命令I1に関
する1を含む。instrID1の命令I1用の依存関係フィールドは1100
になる。ステップ262では、0011と1100の論理ORが1111になる
。したがって、instrID2用のDADアレイ206Aの依存関係フィール
ドには1111が入る。R1は命令I2によって変更される。しかし、レジスタ
R1用のレジスタ240にはすでに1が入っている。レジスタ230にはA2が
入り、命令I2が命令R1を変更するための最も最新の命令であることを示す。
【0062】 命令I3の依存関係フィールドは、命令I2のものと同様に生成される。変更
レジスタ240のR4列には論理1が加算され、レジスタ236には命令I3を
表す3が入る。論理ORは1111を生成する。
【0063】 I4に関して説明すると、命令I4の前にステップ252では、R2用のレジ
スタ240内の変更ビットは1にセットされる。ステップ258では、命令I4
の直前のR2(232)用の指標レジスタがインデックスとして使用される。レ
ジスタ232は命令I1に関する1を含む。DADアレイ206Aのinstr
ID1の命令I1用の依存関係フィールドは1100になる。ステップ262で
は、1100(instrID1からのソース1)と0000(ソース2がまっ
たくない)の論理ORが1100になる。したがって、instrID4行用の
DADアレイ206Aの依存関係フィールドには1100が入る。
【0064】 命令I5の依存関係フィールドは、命令I4のものと同様に生成される。命令
I5およびI6は外部メモリ位置を変更するものであり、レジスタ230、23
2、234、236、240内の変更は行わない。
【0065】 この依存関係情報がスケジュール/発行ユニット156によって使用される場
合もあれば、スケジュール/発行ユニット156がそれ専用の依存関係情報を導
出するだけの場合もある。
【0066】 再実施時に一連の命令シーケンスまたは命令ストリングをトレース・バッファ
114Aから発行できる方法は様々である。1つの方法は、トレース・バッファ
を順次読み取って、依存関係ビットがセットされた命令を抽出し、それを再実施
のために送信する方法である。しかし、ゼロはパイプライン内にバブルを作り出
す効果を有する可能性がある。もう1つの手法は、実行/再実施のために命令を
送信する前に論理をパックすることによりバブルを除去させる方法である。図1
7を参照すると、もう1つの手法は、各論理レジスタごとにアレイ268を含む
追加のハードウェアを必要とする。アレイ268は、レジスタR1に依存する命
令のinstrID値を含む。アレイ268内の値は、命令待ち行列アレイ20
2A内のinstrID項目全体を指すポインタとして動作する。このため、命
令バッファからの非常に高速な読取りが可能になる。1ブロック分の命令(おそ
らく、2つまたは4つ)が一度に読み取られる。トレース・バッファ114Aは
、マルチポート化し、4つのデコーダを有し、レジスタ・アレイから得られたイ
ンデックスのそれぞれ1つをデコーダ内に渡すことができるので、命令I0、I
2、I3、I5は1サイクルで読み取ることができる。レジスタR1アレイは、
再実施が始まる前に依存関係フィールドを作成したときにアセンブルすることが
できるだろう。
【0067】 c.出力レジスタ・ファイル210Aおよび入力レジスタ・ファイル208A トレース・バッファ114は、所与の推論エラーを検出するための検出回路を
含む。本発明の一実施形態により、各トレース・バッファは、関連スレッドのレ
ジスタ・コンテキストを保持する出力レジスタ・ファイルと、プログラム順序で
直前のスレッドのレジスタ・コンテキストを受け取るための入力レジスタ・ファ
イルとを有する。レジスタ・コンテキストは、論理レジスタの内容または状態で
ある。出力レジスタ・ファイル変更の内容はしばしば更新され、おそらく、レジ
スタ内で変更が行われるたびに更新される。入力レジスタ・ファイルの内容は、
後述する比較の後でのみ更新される。
【0068】 図18および図19は、出力レジスタ・ファイル208A(トレース・バッフ
ァ114A内)と入力レジスタ・ファイル208B(トレース・バッファ114
B内)の実施形態を示すが、他の実施形態も使用できる。出力レジスタ・ファイ
ル208Aおよび入力レジスタ・ファイル210Bは、値またはPRIDフィー
ルドと状況フィールドとを含む。状況フィールドは、有効な値または有効なPR
IDが値またはPRIDフィールド内に保持されているかどうかを示す。一実施
形態では、有効な値または有効なPRIDのいずれかが存在する。他の実施形態
では、どちらも存在しないことがあり、その場合は、入力レジスタ・ファイルに
依存する命令が一方が存在するまで待機することがある。
【0069】 ただし、上記の例の命令I0はレジスタR1およびR2を含み、そのいずれも
以前は命令I0を含むスレッド内の命令の宛先ではなかったことに留意されたい
。しかし、レジスタR1およびR2の値またはPRIDは入力レジスタ・ファイ
ル208Aから入手可能であり、命令I0の実行時に使用されるだろう。
【0070】 図20を参照すると、比較器280Bは、現行スレッドに関する入力レジスタ
・ファイル208B(トレース・バッファ114B内)の内容と、プログラム順
序で直前のスレッドに関する出力レジスタ・ファイル210A(トレース・バッ
ファ114A内)の内容を比較する。この比較は、直前のスレッドの実行終了時
または先行スレッドの最初の実行中に行うことができる。また、この比較は、先
行スレッドのリタイヤ終了時にも行われる。一実施形態では、この比較は、先行
スレッドのリタイヤ終了時のみに行われる。
【0071】 比較器280Bによる比較は、様々な事象によってトリガされる可能性がある
。この比較は推論エラーを検出するために行われる。入力レジスタ・ファイルと
出力レジスタ・ファイルとの間に違いがある場合、直前のスレッドの出力レジス
タのうちの1つまたは複数の値が変更されている。これに応答して、入力レジス
タ・ファイル208Bが更新され、再実施トリガ・ロジック284Bにより変更
されたレジスタ値とともに実施済み命令が再実施される。依存関係フィールドは
再実施トリガ・ロジック284Bによって使用できる。変更された値が結局正し
い値(すなわち、純粋に適正順序プロセッサ内で生成されたと思われるレジスタ
値)であるという保証はまったくない。その命令は、もう一度、おそらく数回再
実施する必要がある場合もある。
【0072】 一実施形態では、スレッド用の検出回路は、出力レジスタ・ファイルと、入力
レジスタ・ファイルと、比較器と、その入力レジスタ・ファイルを含むトレース
・バッファ内に保持された命令内の所与の推論エラーを検出するための関連制御
回路とを含む。他の実施形態では、検出回路は多少異なる回路を含む可能性があ
る。
【0073】 一例として、図21を参照すると、スレッドT2は現行スレッドであり、トレ
ース・バッファ114Bに関連付けられている。スレッドT1はスレッドT2の
直前のスレッドであり、トレース・バッファ114Aに関連付けられている。ス
レッドT1は、関数呼出しと、その関数と、関数呼出しからの復帰とを含む。ス
レッドT2の実行は関数呼出しの直後に始まる。関数呼出し時に存在した出力レ
ジスタ210Aの内容は、入力レジスタ・ファイル208B内にコピーされる。
スレッドT2の命令は、入力レジスタ・ファイル208B内のレジスタ・コンテ
キストに基づいて推論実行される。復帰命令の時点で入力レジスタ・ファイル2
08Bの内容は、比較器280Bによって出力レジスタ・ファイル210Aの内
容と比較される。違いがある場合、入力レジスタ・ファイル208Bは更新され
、スレッドT2内の実施済み命令が再実施される。この比較は、1つまたは複数
の中間時点で行うこともできる。これは、命令の再実施をより均一に分散するこ
とによりボトルネックを防止するのに役立つことがあるが、たとえば、出力レジ
スタ・ファイルの内容がその関数中に複数回変更された場合に追加の再実施を引
き起こす可能性がある。出力レジスタ・ファイルは絶えず変化しているので、出
力レジスタ・ファイル210Aの内容を受け取る中間バッファを備えていること
が望ましいであろう。その場合、比較は中間バッファと入力レジスタ・ファイル
208Bの内容同士で行われることがある。
【0074】 図8および図10に示すように、レジスタ・コンテキストは導体216により
出力レジスタ・ファイルと入力レジスタ・ファイルとの間で渡される。導体21
6は、直前のスレッド用のトレースを保持することができる各トレース・バッフ
ァの出力レジスタ・ファイルと各入力レジスタ・ファイルとを接続する。プログ
ラム順序がいつでも特定のトレース・バッファ順序に従うことが保証できる場合
、導体216のレイアウトはかなり単純なものになる可能性がある。出力レジス
タ・ファイルと入力レジスタ・ファイルは、図10および図11に示す制御回路
224Aによって制御することができる。
【0075】 出力レジスタ・ファイルと入力レジスタ・ファイルは値またはPRIDのいず
れかを供給することになるので、入力レジスタ・ファイル内の内容を受け取って
から、ソース・オペランドとして入力レジスタからのレジスタを使用して命令を
実行できるようになるまでに非常に小さい待ち時間が存在する可能性がある。値
が入手できない場合、パイプライン108内での実行のためにレジスタ・ファイ
ル152へのPRIDを使用することができる。
【0076】 正しいソース・オペランドが様々なスレッドのレジスタ・ファイルを通過する
ときに多くの命令が複数回再実施されることが予想される。しかし、多くのプロ
グラムでは、大量の命令をまったく再実施しないか、あるいは比較的少数回再実
施することが必要になり、その結果、単位時間あたりに正しく実行される命令が
大幅に増加し、1つのプログラムを実行するのに必要な全時間が減少することも
予想される。
【0077】 2.トレース・バッファ114’ 図11を参照すると、トレース・バッファ114A’はトレース・バッファ(
図10)と同様のものである。しかし、トレース・バッファ114A’内の依存
関係フィールドは、ある命令を再実施すべきであると決定された後で、依存関係
生成デコード回路218A内で生成される。これにより再実施時に何らかの初期
待ち時間が発生する可能性があるが、再実施用の命令の発行と依存関係の判定が
パイプライン方式で実行される場合、いったんプロセスが開始されると、追加の
待ち時間はほとんど発生しない可能性がある。
【0078】 一実施形態では、依存関係生成デコード回路218Aは依存関係情報用のフィ
ールドを1つだけ保持する。(図13では、4つのフィールドが存在する。)こ
の同一フィールドは再使用可能である。たとえば、レジスタR1に依存する命令
の再実施中に、このフィールドを使用してレジスタR1に依存する命令をリスト
することができるだろう。また、レジスタR2に依存する命令の再実施中に、同
じフィールドを使用してレジスタR2に依存する命令をリストすることができ、
以下同様である。依存関係生成デコード回路218Aは、唯一の修飾子フィール
ドと1つの変更レジスタとを含むことができるだろう。(図14では、4つ存在
する。)あるいは、依存関係生成デコード回路218Aは複数の依存関係フィー
ルドとレジスタとを含むことができるだろう。依存関係生成デコード回路218
Aは、一度に数個の命令のみの依存関係を判定することができる。
【0079】 データ・アレイ214Aは、(図10および図13のDADアレイ206Aと
同様に)各instrID項目ごとの値またはPRIDフィールドと、状況ビッ
ト・フィールドと、再実施計数値フィールドとを含む。あるいは、データ・アレ
イ214Aの内容を依存関係生成デコード回路218Aに入れて、データ・アレ
イ214Aを不要にすることができるだろう。データ・アレイ214Aと依存関
係生成デコード回路218Aを別々のものとして維持することが有利になりうる
理由は2つある。第1に、それらは異なる読取りポートを含む可能性があること
である。第2に、一実施形態では、依存関係生成デコード回路218Aは、命令
待ち行列アレイ202Aおよびデータ・アレイ214Aと同じ数の行を有してい
ないことである。換言すれば、一実施形態では、依存関係デコード回路218A
は、それが依存関係フィールドを再使用できるのと同様に、行を再使用する。当
然のことながら、多くの可能性が存在する。
【0080】 以下に詳述するように、MOB 178は、導体194を介してロード命令を
いつ再実施すべきかを通知する。依存関係フィールド(図13のR1用のものと
同様)を有するアレイを生成して、再実施すべきロード命令に依存する命令をリ
ストすることができる。しかし、ロード命令の場合、従属命令のリストは、レジ
スタの場合のようにトレース内の最初の命令ではなく、そのロード命令から始ま
る。ロード命令用の依存関係フィールドは、依存関係生成デコード回路218A
(図11)内にある可能性がある。(当然のことながら、他のトレース用のロー
ド命令は他のトレース・バッファから再実施されるだろう。)一実施形態では、
依存関係生成デコード回路218Aは、ロード命令とレジスタの両方のための依
存関係フィールドに使用する。この同一フィールドは両方に使用することができ
る。他の実施形態では、レジスタ用の依存関係フィールドはDADアレイ206
A内にあり、ロード用の依存関係フィールドは依存関係生成デコード回路218
A内にある。
【0081】 他の実施形態では、依存関係フィールドが不要になるように、ロード命令は完
全に再実施される(すなわち、ロード後のすべての命令が再実行される)。
【0082】 C.再実施シーケンス・アルゴリズム ソース・オペランド(またはその他の入力値)の予測が間違っていると再実施
トリガ・ロジック(再実施トリガ・ロジック284Bなど)が判定すると、その
ロジックは対応するトレース・バッファ(トレース・バッファ114Bなど)を
トリガして、予測が間違っているソース・オペランドに直接的または間接的に依
存する、パイプライン108で再実施すべき命令をディスパッチする。直接的ま
たは間接的に依存する命令は、トレース・バッファ内のDADアレイの依存関係
フィールドからまたは図13のように他のアレイにより識別することができる。
【0083】 識別された命令は、その命令がトレース・バッファ内に存在する順序(プログ
ラム順序である)で実行するようにトレース・バッファからディスパッチされる
。たとえば、instrID0項目内の命令は、instrID1項目内の命令
より前にまたはその命令と同時にディスパッチされる。しかし、命令は、不適正
順序プロセッサの場合のように、スケジュール/発行ユニット156の制御下で
不適正順序で実行することができる。トレース・バッファからディスパッチされ
る命令には制御ビットが付加され、(1)レジスタ・リネームを実行すべきか、
(2)リネーム/割振りユニット150内のリネーム別名(alias)テーブル・ ルックアップをバイパスし、代わりに対応するトレース・バッファからのPRI
Dを使用すべきか、(3)リネームを完全にバイパスし、それが命令内の定数オ
ペランドである場合と同様にDADアレイからの値を使用すべきかをリネーム/
割振りユニット150に示す。
【0084】 図8に関連して説明したように、「有効1」フィールドと「有効2」フィール
ドは、instrIDの対応するソース・オペランドがトレース・バッファ11
4A内のスレッド外部からの命令(たとえば、その宛先)によって生成されたと
きに第1の値(たとえば、論理0)にセットされ、instrID用のソース・
オペランドがスレッド内の命令によって生成されたときに第2の値(たとえば、
論理1)にセットされるビットである。トレース・バッファ114Aからディス
パッチされる再実施された命令は以下のように決定されたソース・オペランドを
持つであろう。
【0085】 (1)有効ビット1。命令待ち行列アレイ202A内の有効ビットが論理1に
セットされた場合、ソース・オペランドを使用して、DADアレイ206A内の
対応する値またはPRIDを読み取る。DADアレイ状況フィールドの値ビット
またはPRIDビットのいずれも有効ではない場合、ソース・オペランド・レジ
スタがまだリネームされていないことを意味する。この場合、導体120および
MUX 110により論理0値を有する値およびPRID状況ビットとともにそ
の命令がディスパッチされ、リネーム/割振りユニット150はそれが通常行う
ように別名テーブル・ルックアップ(レジスタ・リネーム)を実行することがで
きる。PRIDまたは値が有効である場合、それは導体120およびMUX 1
10により命令とともにリネーム/割振りユニット150に渡され、それに応答
してそのユニットはリネーム・ステージをバイパスする。
【0086】 (2)有効ビット0。ソース・オペランド用の有効ビットが論理0にセットさ
れた場合、入力オペランドはトレース外部から得られる。ソース・レジスタ名を
使用して入力レジスタ・ファイル208Aにアクセスする。入力レジスタ・ファ
イル208Aからの値またはPRIDは命令とともにリネーム/割振りユニット
150に渡され、それに応答してそのユニットはリネーム・ステージをバイパス
する。
【0087】 有効ビットが0であろうが1であろうが、各ディスパッチ済み命令ごとにDA
Dアレイ206A内の値およびPRID状況フィールド・ビットが論理0にリセ
ットされるか、または論理0のままになる。これにより2つの目的が達成される
。第1に、PRIDの前にディスパッチされたその後の従属命令がリネーム・ス
テージからその項目にコピーされ、リネーム別名テーブルからリネームできるこ
とが保証され、トレース・バッファ114Aからの古くなったPRIDの使用が
回避される。第2に、最後の実行インスタンスがライトバックされるまで命令が
リタイヤしないことが保証され、したがって、すべてのデータ予測間違いが訂正
された場合のみ命令がリタイヤ可能になる。
【0088】 D.第2レベルまたは最終リタイヤ すべての先行スレッド用のすべての命令がリタイヤし、ある命令に属すすべて
の再実施事象が処理されると、その命令はトレース・バッファ114から最終的
にリタイヤされる。言い換えると、ある命令が正しいソース・オペランドととも
に実行されたことを保証できる場合に、その命令は最終的にリタイヤされる。ス
レッドは適正順序でリタイヤされる。たとえば、スレッドX内の命令は、すべて
の先行スレッドがリタイヤされる(すなわち、すべての先行スレッドの命令がリ
タイヤされる)まで、リタイヤすることができない。あるスレッド内の命令は適
正順序でリタイヤされるが、リタイヤの準備ができているすべての命令は同時に
リタイヤすることができる。
【0089】 最終的なリタイヤは最終リタイヤ・ロジック134によって制御される。本発
明の一実施形態では、最終リタイヤは、(1)適正順序レジスタ・ファイルへの
結果のコミットメントと、(2)サービス割込み、例外、および/または分岐予
測間違いと、(3)トレース・バッファおよびMOB 178の資源項目の割振
り解除と、(4)リタイヤ済みとしてストアにマークを付け、それをメモリに対
して発行するようMOBに通知することを含む。項目の割振り解除は、ヘッド・
ポインタの移動を含むことができる。後述するように、MOB 178内のスト
ア命令は、関連データがデータ・キャッシュ176または他のメモリにコピーさ
れたことが確実になるまで割振り解除されない。MOB 178内のロード命令
およびストア命令の最終リタイヤに関する詳細については以下に説明する。
【0090】 E.メモリ・システム 図22は、図2のMOB 178の一実施形態がMOB 178A、178B
、・・・、178Yを含み、YがMOBの数を表し、トレース・バッファ114
の数と一致することを示している。MOB 178A、178B、・・・、17
8Yは、トレース・バッファ114A、114B、・・・、114Y内のトレー
スのロード命令およびストア命令のコピーをそれぞれ保持する。ロード命令はロ
ード・バッファ182A、182B、・・・、182Y内に保持される。ストア
命令はストア・バッファ184A、184B、・・・、184Y内に保持される
。導体292は、MOB 178との間で信号を伝達する様々な導体を表してい
る。再実施導体194は、ロード命令を再実施すべきであることをトレース・バ
ッファ114に警告する信号をMOB 178からトレース・バッファ114に
供給する。制御回路302は様々な制御機能を実行する。
【0091】 1.ストア・バッファおよびロード・バッファ 図23はストア・バッファ184Aの一実施形態を示しているが、これはスト
ア・バッファ184B、・・・、184Yを代表するものである。他の様々な実
施形態も使用できるだろう。ストア・バッファ184Aは、ストア・バッファ項
目の行に関する様々なフィールドを含む。各項目はストア・バッファID(SB
ID)によって識別される。リネーム/割振りユニット150は、各ストア命令
が再実施時ではなく最初にフェッチされ実行されたときに、その命令にSBID
項目を割り振る。このストア命令は、最終リタイヤまで同じSBID値を有する
。たとえば、図23では、ストア0という命令の場合に項目SBID0が割り振
られる。ストア1という命令の場合に項目SBID1が割り振られ、以下同様で
ある。後述する「ストアLBID」値を保持するLBIDフィールドが図23に
示されている。一実施形態では、命令待ち行列アレイ202A(図12)の項目
がストア命令を保持する場合、命令待ち行列アレイ202AのSBIDフィール
ドはストア命令を保持するストア・バッファ184A内の項目を識別するSBI
Dを保持し、LBIDフィールドはそのストア命令用として1つ存在する場合に
そのストアLBIDを保持する。SBIDおよびストアLBIDはパイプライン
108によりストア命令に付随する。その実施形態では、LBIDフィールドは
ストア・バッファ184Aに含まれない可能性もある。
【0092】 instrIDフィールドは、命令待ち行列アレイ202A内のストア命令の
命令IDを保持する。スレッド・バッファIDは、ストア・バッファ184Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはストア命令の命令コードを保持する。ストア・アドレス・フィールドは
それに対してストア命令が向けられるアドレスを保持する。図示の実施形態では
、アドレスはAGU 172によって生成される。SBアドレス有効フィールド
は、ストア・アドレスが有効アドレスであるかどうかを示すビットを含む。デー
タ・フィールドは記憶すべきデータを保持する。データ有効フィールドは、その
データが有効であるかどうかを示すビットを含む。有効アドレスは有効データと
は異なる時点に到着する可能性があるので、アドレス有効ビットとデータ有効ビ
ットとして別々のビットを使用することができる。アドレスとデータはどちらも
ストア命令が実行される前に到着する。一実施形態では、データは命令の一部と
して含まれる。リタイヤ済みフィールドは、ストア命令がリタイヤすべきである
ことを最終リタイヤ・ロジック134が示すときにセットされ、メモリへのスト
アが完了したという確認をメモリから受け取ったときにリセットされるビットを
含む。ロードおよびストアのリタイヤについては後述する。再実施計数値フィー
ルドは再実施計数値数を含む(図13のDADアレイ206Aの再実施計数値フ
ィールドと同様のものである)。再実施計数値フィールドは必須のものではない
。一実施形態では、ストア命令は一度に1回しか再実施できないので、再実施計
数値フィールドはまったく存在しない。
【0093】 図24はロード・バッファ182Aの一実施形態を示しているが、これはロー
ド・バッファ182B、・・・、182Yを代表するものである。他の様々な実
施形態も使用できるだろう。ロード・バッファ182Aは、ロード・バッファ項
目の行に関する様々なフィールドを含む。各項目はロード・バッファID(LB
ID)によって識別される。リネーム/割振りユニット150は、各ロード命令
が再実施時ではなく最初にフェッチされ実行されたときに、その命令にLBID
項目を割り振る。このロード命令は、最終リタイヤまで同じLBID値を有する
。たとえば、図24では、ロード0という命令の場合に項目LBID0が割り振
られる。ロード1という命令の場合に項目LBID1が割り振られ、以下同様で
ある。(LBID項目番号とSBIDフィールドはMOB IDと呼ぶことがで
きる。)後述する「ロードSBID」値を保持するSBIDフィールドについて
は図24に示す。一実施形態では、命令待ち行列アレイ202A(図12)の項
目がロード命令を保持する場合、命令待ち行列アレイ202AのLBIDフィー
ルドはロード命令を保持するロード・バッファ182A内の項目を識別するLB
IDを保持し、SBIDフィールドはそのロード命令用として1つ存在する場合
にそのロードSBIDを保持する。LBIDおよびロードSBIDはパイプライ
ン108によりロード命令に付随する。その実施形態では、SBIDフィールド
はロード・バッファ182Aに含まれない可能性もある。
【0094】 instrIDフィールドは、命令待ち行列アレイ202A内のロード命令の
命令IDを保持する。スレッド・バッファIDは、ロード・バッファ182Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはロード命令の命令コードを保持する。ロード・アドレス・フィールドは
それからロード命令がロードされるアドレスを保持する。項目有効フィールドは
有効ロード命令によってその項目が占有されることを示すビットを含む。図示の
実施形態では、アドレスはAGU 172によってすでに生成されているので、
アドレス有効フィールドは含まれない。PRIDフィールドは、レジスタ・ファ
イル152内のロード命令の宛先を示す、リネーム/割振りユニット152から
のPRIDを保持する。SBヒット、SBID、スレッドID、再実施計数値フ
ィールド(1つ存在する場合)は、状況フィールドの一部と見ることができ、ス
トア命令の実行に関連して後述する。
【0095】 ストア命令およびロード命令がリネーム/割振りユニット150によって最初
に受け取られた時点で、ストア命令およびロード命令用の項目がストア・バッフ
ァ184およびロード・バッファ182内に割り振られ、ロードした値を受け取
るためのレジスタ用の項目はレジスタ・ファイル150およびROB 164内
に割り振られる。これらの項目は第1レベル・リタイヤの対象にはならないが、
トレース・バッファ114内の同様の項目は最終リタイヤまで割り振られたまま
になる。したがって、再実施時に項目の再割当ては行われない。ストア・バッフ
ァまたはロード・バッファがいっぱいである場合、それぞれIキャッシュ104
からのストア命令またはロード命令は、ある項目が解放されるまでリネーム/割
振りユニット150を通過することはない。しかし、トレース・バッファから再
実行中のロード命令またはストア命令はリネーム/割振りユニット150を通過
することになる。
【0096】 2.ロード・アドレスとストア・アドレスの比較 図5を参照すると、プログラム順序では、ロードMXがスレッドT2で実行さ
れる前にスレッドT1内のストアMXが実行される。しかし、同時実行であるの
で、時間順序では、ロードMXの前または後にストアMXを実行することができ
る。時間順序でロードMXの前にストアMXが実行される場合、ロードMXの推
論実行はストアMXに関して正しい順序で行われることになる。プログラム順序
でストアMXの前にあるすべての命令がリタイヤされた場合、ロードMXがメモ
リ位置MXから正しい値をロードすることが確実になる。この正しい値は、適正
順序プロセッサによってスレッドが実行された場合にロードされたと思われる値
である。プログラム順序でストアMXの前にあるすべての命令がリタイヤされた
わけではない場合、ストアMX用のデータが間違っている可能性が常にある。
【0097】 対照してみると、時間順序でロードMXの後にストアMXが実行される場合、
ロードMXの推論実行はストアMXに関して正しい順序で行われず、ロードMX
が正しい値をロードするという保証はまったくない。正しい値がたまたまメモリ
位置MX(またはストアMXが最終リタイヤされるまでストアMXを保持するス
トア・バッファ項目のデータ・フィールド)にあるのは単に偶然にすぎないだろ
う。実行の最終的な正確さを保証するため、MOB 178は、スレッド間のメ
モリ・データの一貫性を保証するための様々な機構を含む。
【0098】 a.ロード命令の実行 ロード命令が実行される前に、そのアドレスとストア命令のアドレスが比較さ
れ、ストア命令がある場合にどのストア命令が最接近先行一致ストア命令(CE
MSI)であるかを判定する。「一致」とは、ロード命令と同じアドレスを有す
ることを意味する。「先行」とは、CEMSIがプログラム順序でロード命令よ
り前であることを意味する。「最接近」とは、CEMSIと実行すべきロード命
令との間に他の一致ストア命令がまったくないことを意味する。先行一致ストア
命令が1つだけ存在する場合、それがCEMSIになる。
【0099】 CEMSIが存在する場合、ロード命令はCEMSIのデータ・フィールドか
らそのデータを読み取る。CEMSIが存在しない場合、ロード命令はデータ・
キャッシュ176、L2キャッシュ、メイン・メモリなどのメモリからそのデー
タを取る。ストア・バッファ184またはメモリからのデータはMUX192を
通過し、スレッドIDおよびinstrIDによって指定されたトレース・バッ
ファ114内の項目に書き込まれる。また、このデータは、PRIDによって指
定されたレジスタ・ファイル152内のレジスタにも書き込むことができる。ま
た、このデータは、キャッシュ規則(たとえば、ライトバック、ライトスルーな
ど)に応じてデータ・キャッシュ176に記憶することもできる。MUX 19
2は、データ・キャッシュ176、L2キャッシュ、メイン・メモリなどのメモ
リをバイパスすることができるので、バイパスになる。
【0100】 一実施形態では、実行すべきロードのアドレスとストア命令のアドレスとの比
較を行うために、各ストア・バッファ184の各項目に異なる比較器が関連付け
られている。図25の比較器320は一例であり、ストア・バッファ184A内
の項目SBID1のストア・アドレスとロード命令アドレスを受け取る。導体3
22ならびに他の比較器からの出力導体はMOB制御回路302に接続される。
【0101】 ロードSBIDは、実行すべきロード命令に関する最接近先行ストア命令(C
ESI)のLBIDを指し示す。CESIは、ロード命令と同じスレッドIDを
有するストア・バッファ内にある。CEMSIが存在する場合、それは、CES
Iになるかまたはプログラム順序でCESIより前になる。リネーム/割振りユ
ニット150は、プログラム内のストア命令およびロード命令の順序を追跡し、
SBID値およびLBID値を供給する。これらは、導体126を介してトレー
ス・バッファ114に書き込むことができる。一実施形態では、ロード命令に関
するCESIがまったく存在しない場合、その命令に関連するロードSBIDは
まったく存在しない。これは、トレース内の第1のメモリ命令がロードである場
合に発生する。有効ロードSBIDがまったく存在しないことを示すためにリネ
ーム/割振りユニット150が所与の信号を送信することを含み、このような状
況を処理するために様々な技法を使用することができる。後述するアレイ・ラッ
プアラウンド・ビットはこの目的に使用することができる。
【0102】 以下のプログラム順序のストア命令およびロード命令について検討する。 ストア0 ストア1 ロード0 ストア2 ロード1 ストア3 ストア4 ロード2 LBIDフィールド内のストアLBID値はストア・バッファ182A内に示さ
れている。SBIDフィールド内のロードSBID値はロード・バッファ184
A内に示されている。たとえば、LBID項目1のSBIDフィールド内の2は
、ストア・バッファ184A内の項目SBID2にあるストア命令がLBID項
目1内のロード命令に関するCESIを保持することを示している。ストア0、
ストア1、ストア2、ロード0という命令はロード1より古い、すなわち前のも
のである。ストア3、ストア4、ロード2という命令はロード1より新しい、す
なわち後のものである。
【0103】 ストア命令がある場合にどのストア命令がCEMSIであるかを制御回路30
2が判定するための様々な方法がある。この方法の例については図27に関連し
て説明するが、同図ではストア・バッファ184A、184B、184C、18
4DだけがMOB 178内のストア・バッファであり、スレッドA、B、C、
Dにそれぞれ関連付けられている。プログラム順序がスレッドA、スレッドB、
スレッドC、スレッドDであると想定する。この例では、実行すべきロード命令
はロード・バッファ182C内にある。CESIが存在し、ストア・バッファ1
84C内にある。
【0104】 導体342、344、346、348は様々な比較器の出力導体である。導体
362、364、366、368は、比較器が比較を実行できるようにする制御
信号を供給する。様々な実施形態では、制御回路302は、(1)各ストア・バ
ッファ内のすべての項目用の比較器をイネーブルにするか、(2)プログラム順
序でロード命令のスレッドIDと同じであるかまたはそれより前のスレッドID
を有するストア・バッファ内にある比較器のみをイネーブルにするか、あるいは
(3)プログラム順序でロード命令より前の項目に関連する比較器のみをイネー
ブルにする。
【0105】 一致判定ロジック356は、ストア命令がある場合にそのうちのどれがCEM
SIであるかを判定する。図27では、ストア・バッファ184Cの上部部分内
のストアMX命令がCEMSIになる。ストアMX命令がストア・バッファ18
4C内にない場合、CEMSIは、ストア・バッファ184B内のストアMX命
令になるだろう。比較器および一致判定ロジック356がCEMSIが存在する
かどうかを判定する間に、CEMSIが存在しない場合に用意すべきデータ・キ
ャッシュ176(および他のメモリ)内でルックアップが行われる可能性がある
。一致判定ロジック356はデータ経路制御ロジック390を含み、これはMU
X 192がメモリまたはストア・バッファからのデータを渡すかどうかを制御
するための信号を導体370で供給する。
【0106】 1つの手法では、MOB制御回路302によって2通りの優先順位判定が行わ
れる。一方は、ストア・バッファ内のストア命令の優先順位を判定するためのも
のである。もう一方は、ストア・バッファの優先順位を判定するためのものであ
る。これらの判定はいずれの順序で行うこともできる。桁上げ連鎖構造は、スト
ア・バッファ内の優先順位の判定の際に使用することができる。たとえば、一実
施形態では、ロード命令と同じスレッドIDを有するもの以外の各ストア・バッ
ファごとに、一致ストア命令がある場合にどの一致ストア命令がプログラム順序
で最も新しいかが判定される。ロード命令と同じスレッドIDを有するストア・
バッファの場合、一致命令がある場合にどの一致命令がプログラム順序でCES
Iに最も近い(等しいものを含む)かが判定される。次に、一致命令を有するス
トア・バッファのうち、どのストア・バッファがプログラム順序でロード命令の
スレッドIDに最も近いスレッドIDを有するかが判定される。
【0107】 ストア・バッファ184は、それぞれ先頭と末尾を有する循環アレイでよい。
最初は、SBID値が大きいストア命令の方が新しい。しかし、ストア命令が割
振り解除され、割り振られるにつれて、末尾は結局、折り返すことになり、先頭
は末尾より大きいSBID項目を指し示すことになる。一実施形態では、末尾が
最高値から最低SBID値へ移行すると、ラップアラウンド・ビットが切り替え
られ、最接近一致判定ロジック356に供給される。
【0108】 b.ストア命令の実行 ストア命令が実行されると、そのアドレスがロード命令のアドレスと比較され
、(同じスレッドまたはそれより新しいスレッドから)プログラム順序でそれよ
り後のロード命令がある場合に、どのロード命令がストア命令と同じアドレスを
有するかを判定する。ストアSBIDによって指し示された最接近後続ロード命
令(CLLI)は、考慮可能な最も早いロード命令を示す。
【0109】 一実施形態では、このような比較を行うために各ロード・バッファ182の各
項目ごとに異なる比較器が関連付けられている。比較器の1つは図26に示す比
較器324である。単に一例にすぎないが、比較器324はロード・バッファ1
82Aの項目LBID1に関連付けられている。比較器324は、一方の入力で
ストア命令のアドレスを受け取り、もう一方の入力でロード・バッファ182A
内の項目LBID1のロード・アドレス・フィールド内のアドレスを受け取る。
出力導体326上の信号は、両方のアドレスが同じであるかどうかを通知する。
導体326ならびに他の比較器からの出力導体はMOB制御回路302に接続さ
れている。比較器(比較器324など)は、後述するように、ストア命令の状況
ビットとロード・バッファ内の状況ビットとの比較も行うことができる。
【0110】 図28は図27と同様のものである。しかし、図28では、ロード・バッファ
182A〜182D内のロード命令アドレスが実行すべきスト命令のアドレスと
比較され、一致判定ロジック356は、ロード命令を再実施すべきかどうかを判
定する。一実施形態では、一致判定ロジックは、どのロード命令を再実施すべき
かをトレース・バッファに示すための信号を導体194上に供給する再実施トリ
ガ・ロジック394を含む。一実施形態では、一致判定ロジック356は、CL
LIから始めて、ストア命令とロード命令との一致について考慮する。様々なア
ルゴリズムを使用することができる。スレッド管理ロジック124は、プログラ
ム順序で実行中のストア命令のスレッドIDより後のスレッドIDを示す。一実
施形態では、すべての比較器が使用可能になっている。他の実施形態では、プロ
グラム順序でロード命令のスレッドIDと等しいかまたはそれより後のスレッド
IDを有するロード・バッファ内の導体だけが使用可能になる。さらに他の実施
形態では、CLLIおよびその後の命令に関連するロード・バッファ内の導体だ
けが使用可能になる。考慮すべきスレッドは、ロード・バッファ内のロード命令
がプログラム順序でストア命令より後になっているかに関する判定前、判定後、
あるいは判定中に決定することができる。
【0111】 一実施形態では、ロード命令の実行時に所与の推論エラーを検出するための検
出回路は、ロード・バッファに関連する比較器と、一致判定ロジック356の一
部分と、関連の制御回路とを含む。他の実施形態では、この検出回路は多少異な
る回路を含むことができるだろう。推論エラーを検出するための検出回路が実行
パイプライン内にあることは必須ではない。データ経路制御ロジックおよび再実
施トリガ・ロジックに関連して異なる一致判定ロジックを使用することができる
だろう。
【0112】 i.アドレス一致が存在するケース 再実施すべきかどうかを判定する際に、アドレス一致が存在する新しい命令に
関する状況フィールド(SBヒット、SBID、スレッドID、再実施計数値(
使用する場合))が考慮される。状況フィールドは、ロード命令がそのデータを
メモリ(たとえば、データ・キャッシュ176)から獲得したかまたはストア・
バッファのデータ・フィールドから獲得したかを示す。SBヒット・フィールド
は、たとえば、データがメモリから得られた場合に0を有し、データがストア・
バッファから得られた場合に1を有する。SBIDフィールドとスレッドIDフ
ィールドは、そこからデータが得られたストア命令のSBIDとスレッドIDを
保持する。ストア命令のスレッドIDは、必ずしも、アドレス一致が存在するロ
ード命令のスレッドIDではない。ロード命令のスレッドIDはロード・バッフ
ァ内では暗黙のものである。再実施計数値フィールド(使用する場合)は、どの
再実施が含まれるかを示す。(SBヒットが0である場合、SBIDフィールド
、スレッドIDフィールド、再実施計数値フィールド内のデータは無意味なもの
になる。)
【0113】 SBヒット=0(メモリからの前のデータ)である場合、再実施事象は導体1
94によりロード・バッファからロード命令のスレッドIDによって識別される
トレース・バッファに通知され、そのロード命令とすべての従属命令はそのトレ
ース・バッファから再実施される。instrIDとスレッドIDは、どの命令
が再実施されるかを示すために導体194を通して渡される。
【0114】 SBヒット=1(ストア・バッファからの前のデータ)である場合、SBID
フィールド、スレッドIDフィールド、再実施計数値フィールド(使用する場合
)の値は、再実施をトリガするかどうかを制御する。第1のケースでは、特定の
ロード命令に関する状況フィールドのスレッドIDはストア命令のスレッドID
と等しく、特定のロード命令の状況フィールド内のSBIDはストア命令のSB
IDと一致する。この第1のケースでは、ロード命令の再実施計数値が状況フィ
ールド内の再実施計数値より大きい場合にそのロード命令が再実施される。再実
施計数値が存在しない場合(ストア命令は一度に1回しか再実施できないため)
、ロード命令は再実施される。
【0115】 第2のケースでは、状況フィールド内のスレッドIDはストア命令のスレッド
IDと等しいが、状況フィールド内のSBIDはストア命令のSBIDと一致し
ない。この第2のケースでは、状況フィールド内のSBIDがストア命令のSB
IDより小さい場合にそのロード命令が再実施され、状況フィールド内のSBI
Dがストア命令のSBIDより大きい場合にそのロード命令は再実施されない。
【0116】 第3のケースでは、状況フィールドとストア命令のスレッドIDは一致しない
。これはまれなケースであると予想される。単純にするため、一実施形態では、
(プログラム順序に反する可能性がある場合でも)ロード命令が再実施される。
これは間違った再実施である可能性がある。ロード命令は、再実施されると、正
しいストア・データを受け取ることになる。他の手法を使用することもできるが
、このようなまれなケースに妥当なものよりかなり複雑なものである可能性があ
る。
【0117】 ii.アドレス一致が存在しないケース アドレスが一致しない場合、以下に示すまれなケースを除き、再実施は一切ト
リガされない。SBヒット=1である場合、状況フィールドのスレッドIDはス
トア命令のスレッドIDと一致し、状況フィールドのSBIDはストア命令のS
BIDと一致する。このケースでは、再実施が行われ、再実施したロード命令は
そのデータを新しい項目またはメモリから受け取る。
【0118】 c.リセット スレッドがプログラム順序になっていないと判定されると、そのスレッドはリ
セットされる。しかし、他のスレッドからのロードによって、そのスレッド内の
ストア命令に関連するデータ・フィールドからデータが取られている可能性があ
る。スレッド管理ロジック124は制御回路302に信号を送信する。一実施形
態では、スレッドがリセットされると、リセットされたスレッドのスレッドID
が(おそらくリセットされたスレッドに対応するロード・バッファは除く)すべ
てのロード・バッファ内のすべてのロードと比較される。状況フィールド内のス
レッドIDがリセットされたスレッドのスレッドIDと一致する場合、ロード命
令に関する再実施がトリガされる。ロード命令は適切なトレース・バッファから
再実施される。
【0119】 3.ストア命令の再実施 前述のように、ストア命令の実行に応答してロード命令が再実施される。一実
施形態では、レジスタ値が変更されたことを示すトレース・バッファ内のレジス
タ比較に応答してストア命令が再実施される。たとえば、図12および図13を
参照すると、トレース・バッファ114A内のinstrID4およびinst
rID5はストア命令であり、レジスタR1〜r4に依存するものとして示され
ている。
【0120】 4.複数ロード命令の再実施 ロード・バッファ内の複数のロード命令がストア命令との状況フィールド一致
を有することは可能である。複雑なロジックを回避するための1つの手法では、
制御回路302が複数のロード・アドレス一致が存在する場合を検出し、トレー
ス内で最も早いロード以降のすべての命令を再実行させる。
【0121】 5.ロード命令とストア命令の最終リタイヤ ロード命令またはストア命令を最終リタイヤすべき場合、最終リタイヤ・ロジ
ック134は、命令を最終リタイヤすべきであることを示す信号をトレース・バ
ッファ114およびMOB184に供給する。(instrIDおよびスレッド
IDによって識別される)トレース・バッファ内の項目の割振りが解除される。
ロード命令の場合には、(スレッドIDおよびLBIDによって識別される)ロ
ード・バッファ内の項目の割振りが解除される。ロード命令の場合には、最終リ
タイヤが完了する。ストア命令の場合には、割振り解除の前にデータ・フィール
ド内のデータをメモリにコミットしなければならない。ストア・バッファ内の項
目の割振り解除と、それ故の最終リタイヤは、そのストアが完了したという確認
を受け取るまで行われない。あるいは、確認前にその項目の最終リタイヤを行う
ことができるが、確認を受け取るまでその項目の再割振りを行うことができない
。導体200上の信号は、ストアの最終リタイヤが完了し、次のスレッドを開始
することができる時期をスレッド管理ロジック124に示すことができる。
【0122】 SBリタイヤ済みは、命令がリタイヤされたことを示す。命令をリタイヤすべ
きであることを最終リタイヤ・ロジック134が示した時点で、SBリタイヤ済
みフィールド内のビットがアサートされる。SBリタイヤ済みフィールドがアサ
ートされると、関連命令が適正順序でメモリに書き込まれる。命令がメモリに書
き込まれたことをMOB 184Aが知ると直ちにSBリタイヤ済みフィールド
がアサート解除され、その命令の割振りが解除される。
【0123】 ロード・バッファ182Aおよびストア・バッファ184Aは、先頭と末尾を
備えた待ち行列にすることができる。命令の割振りが解除されると、先頭は移動
する。ロード・バッファ184Aおよびトレース・バッファ114では、リタイ
ヤと割振り解除が同時に行われる場合もある。最終リタイヤ・ロジック134は
、導体136および140を介して信号を供給する。デマルチプレクサ188は
、ロード・バッファ182またはストア・バッファ184のうちの一方がリタイ
ヤ信号を受け取ることになることを選択する。デマルチプレクサ188は任意選
択のものであり、ロード・バッファ182およびストア・バッファ184内のイ
ネーブル・ポートで置き換えることができるだろう。
【0124】 F.スレッド管理ロジックおよび最終リタイヤ・ロジックに関する追加情報 一実施形態では、スレッド管理ロジック124は、スレッド順序を追跡するた
めにツリー構造を使用する。このツリー構造では、プログラム順序(リタイヤ順
序でもある)は上から下に流れ、右側のノードはプログラム順序で左側のノード
より早い。ルートはプログラム順序で最初のものである。ツリーとは抽象概念で
あり、ツリー構造はそのツリーを実施する回路である。
【0125】 スレッドは、逆方向分岐または関数呼出し後の命令から始まる。すなわち、(
図4および図5のスレッドT2が示すように)逆方向分岐が行われなかったかま
たは関数が呼び出されなかったと想定して、スレッドは次の命令から始まる。こ
のように行う場合、スレッド(ノード)の見地によると、そのスレッドの子ノー
ドのプログラム順序は、スレッドが開始(作成)された順序の逆になる。たとえ
ば、図6では、時間順序ではスレッドT2の実行がスレッドT3の実行前に始ま
るが、プログラム順序ではスレッドT3がスレッドT2の前に行われる。
【0126】 一実施形態では、3通りの事象によりスレッドがツリーから除去される場合が
ある。すなわち、(1)ツリーのルートにあるスレッドは、そのスレッドがリタ
イヤされると除去される。ルートにあるスレッドがリタイヤされると、プログラ
ム順序で次のスレッド(ノード)がルートになり、それに応じてノードの再割当
てが行われる。(2)プログラム順序で最後のスレッドはツリーから除去され、
プログラム順序でより上位にあり、ツリーに追加すべきスレッドのためのスペー
スができる。これに関して、ツリーは後入れ先出し法(LIFO)スタックとし
て動作する。(3)その親スレッドのプログラム・カウンタが開始計数値から終
了計数値までの範囲の外にあることが発見されると、スレッドはリセットされ、
それによりツリーから除去することができる。逆方向分岐で子スレッド(たとえ
ば、図6および図29のスレッドT4)が作成される場合、開始計数値は逆方向
分岐のターゲットになり、終了計数値は逆方向分岐命令におけるプログラム・カ
ウンタ値になる。関数呼出し後に開始されたスレッドもリセットすることができ
る。というのは、このようなことが起こるのは極めてまれなことであるが、関数
からの復帰がまったく存在しないからである。関数からの復帰がまったく存在し
ない可能性を処理するための手法の1つは、この可能性を無視し、事象(2)の
ようにそれがプログラム順序の最下位になると結局、システムにツリーからスレ
ッドを除去させることである。スレッドがツリーから除去されると、そのスレッ
ドに割り振られた資源(トレース・バッファ、ストア・バッファ、ロード・バッ
ファなど)の割振りが解除される。
【0127】 事象(1)および(3)は図29に示されているが、同図は図6の例のスレッ
ドを含み、スレッドT5およびT6が追加されている。スレッドT5はポイント
Jの逆方向分岐命令に続いて開始され、スレッドT6はポイントKの関数呼出し
に続いて開始される。トレース・バッファは4つだけであると想定する。図30
は時点t1におけるツリー構造を示している。スレッドT2は、スレッドT3が
ツリーに追加される前にツリーに追加される。スレッドT4は、スレッドT3が
ツリーに追加された後でツリーに追加される。スレッドT2およびT2はスレッ
ドT1の子である。スレッドT4はスレッドT3の子である。上から下へ、右か
ら左へという規則に従うと、プログラム順序およびリタイヤ順序はスレッドT1
、T3、T4、T2になる。図31は、スレッドT1がリタイヤする前にスレッ
ドT4がリセットされると想定した時点t2におけるツリー構造を示している。
プログラム順序およびリタイヤ順序はスレッドT1、T3、T2、T5になる。
図32は、スレッドT4がリセットされる前にスレッドT1がリタイヤすると想
定した時点t2におけるツリー構造を示している。プログラム順序およびリタイ
ヤ順序はスレッドT3、T4、T2、T5になる。図33は、時点t3における
ツリー構造を示しているが、これはスレッドT1がリタイヤし、スレッドT4が
リセットされた後である。プログラム順序およびリタイヤ順序はT3、T2、T
5、T6になる。
【0128】 事象(2)は図34に示されているが、同図はネストされた関数を含む。時間
順序では、スレッドはT1、T2、T3、T4、T5の順序で作成(開始)され
る。しかし、プログラム順序はT1、T5、T4、T3、T2である。この例で
は、トレース・バッファは4つだけである。したがって、5つのスレッドがすべ
て同時に存在するわけではない。図35は、時点t1におけるツリー構造を示し
ているが、これはスレッドT5が開始される前である。プログラム順序およびリ
タイヤ順序はスレッドT1、T4、T3、T2になる。スレッドT5はまだツリ
ー構造の一部になっていない。図36は、時点t2におけるツリー構造を示して
いるが、これはスレッドT5が開始された後である。スレッドT2はプログラム
順序で最下位であり、スレッドT5のためのスペースを作るためにツリー構造か
ら除去される。ツリーから除去されたスレッドは、後で再開することができる。
あるいは、他のスレッドでは、ツリーから除去されたスレッドの命令の全部また
は一部を実行することができる。一実施形態では、リセットの場合、スレッドは
リセットされたスレッドではなく、次に続くスレッドを結合しようとする可能性
がある。あるいは、そのスレッドはその他の方法で終了されるまで続行される可
能性がある。アレイ198の関数はツリーのノードで実行することができる。
【0129】 子スレッドのスレッドIDは、ツリー構造内のプログラム順序に応じて適切に
位置決めされる。(ただし、スレッド管理ロジック124によって決定されたプ
ログラム順序は変わらない可能性がある。)あるスレッドは、プログラム順序で
ツリー内の次のスレッドを結合するかまたはそのプログラム計数値と一致する場
合に終了する。スレッドの子が1つだけである場合、それはプログラム順序で次
のスレッドになる。たとえば、図33では、スレッドT2はプログラム順序でツ
リー内の次のスレッドになる。
【0130】 最終リタイヤ・ロジック134は、アレイ198をアセンブルするためにツリ
ー構造からまたはツリー構造の回路から直接に、情報を獲得する。ツリー構造と
、スレッド管理ロジック124の他のロジックおよび最終リタイヤ・ロジック1
34のロジックとの間にデコード回路が存在する可能性がある。アレイ198は
必須ではない場合がある。
【0131】 要約すると、このツリー構造は、少なくとも以下に示す目的のために情報を提
供する。すなわち、(1)ツリーはリタイヤ順序を指定し、(2)ツリーは前述
のようにたとえばMOB 178が使用するプログラム順序を指定し、(3)ツ
リーは他のスレッドの開始命令を示すことによりスレッドの終了点を指定し、(
4)ツリーはどの資源が使用可能であり、どの資源が割振り解除されているかを
示すことによりスレッド資源割振りの際に使用する。
【0132】 G.マルチスレッド化を含まない実施形態 図3は、パイプライン308を含むプロセッサ100を示している。プロセッ
サ100はプロセッサ50と同様のものである。しかし、トレース・バッファ3
00は唯一のトレース・バッファであり、MOB 310は唯一のMOBである
。プロセッサ50は、複数スレッドを処理するように設計されていない。したが
って、プロセッサ100にはスレッド管理ロジックは不要である。トレース・バ
ッファ300は、たとえばトレース・バッファ114Aと同様のものにすること
ができるが、マルチスレッド特有の構成要素は不要である。たとえば、導体21
6および出力レジスタ・ファイル210は不要になるだろう。周知の回路を含む
様々な回路を使用して推論エラーを検出することができる。MOB 310はた
とえばMOB 178Aと同様のものにすることができるが、マルチスレッド特
有の特徴は不要である。たとえば、ロード・バッファではスレッドIDフィール
ドは不要になるだろう。プロセッサ100の他の構成要素は、マルチスレッド化
関連の特徴を除去するためにプロセッサ50内のそれぞれの構成に関して多少変
更される可能性がある。トレース・バッファ300およびMOB 310は様々
な推論ならびにその際のエラーからの回復に関連して使用することができる。ト
レース・バッファにより、最終リタイヤ前に可能な再実施のために、多数の命令
をパイプライン外部に保持することができる。
【0133】 プロセッサ50は非マルチスレッド・プログラムに関連して使用することがで
きるだろう。その場合、スレッド管理ロジック124は必ず同じスレッドIDを
プログラム順序で維持することができるだろう。あるいは、スレッド管理ロジッ
ク124は使用不能にすることができるだろう。非マルチスレッドの場合、唯一
のトレース・バッファ114と唯一のMOB 178が使用される。あるいは、
複数のトレース・バッファを結合してより大きいトレース・バッファにすること
ができ、複数のMOBを結合してより大きいMOBにすることができるだろう。
【0134】 H.追加情報および実施形態 図37を参照すると、プロセッサ400は、マルチパイプライン・ユニット4
02を含むマルチプロセッサ(MP)チップである。マルチパイプライン・ユニ
ット400は、パイプライン全体(たとえば、各パイプラインごとに別々のリネ
ーム/割振りユニット)がマルチパイプライン・ユニット402の各パイプライ
ン0、1、・・・、Wとともに含まれるという点で図2の共用資源パイプライン
108とは異なる。(WはXと等しいかあるいはそれより大きいかまたは小さい
ものにすることができる。)そうではない場合、プロセッサ400はプロセッサ
50と本質的に同じであるかまたはプロセッサ50とは非常に異なる可能性があ
る。他のプロセッサは、マルチパイプライン・ユニット402の何らかの特徴と
、パイプライン108の何らかの特徴を含むことができる。
【0135】 ここで言及する各プロセッサは、様々なコンピュータ・システムの一部に含め
ることができる。図38を参照すると、単に一例にすぎないが、プロセッサ50
はコンピュータ・システム430の一部にすることができる。システム430は
第2のプロセッサ434も含むことができる。オンチップの第2レベル(L2)
キャッシュはプロセッサ50内に含まれていてもよい。プロセッサ50は、プロ
セッサ・バス442を介してメモリ・コントローラ440とやりとりすることが
できる。メモリ・コントローラ440はバス452および454を介してメイン
・メモリ446および周辺装置448とやりとりすることができる。
【0136】 パイプライン108または308(図2および図3)と同様のパイプラインは
、レジスタ・リネームを使用しないプロセッサで使用することができるだろう。
このような場合、レジスタ・リネームに含まれる構成要素(たとえば、リネーム
/割振りユニット150)は、リネーム関連特徴を除去するために変更すること
ができるだろう。
【0137】 ここに記載し例示した回路および詳細は例示的なものにすぎない。その代わり
に様々な他の回路および詳細を使用することができるだろう。さらに、サイズ、
待ち時間などの点で、様々な設計上の兼ね合いが存在する可能性がある。たとえ
ば、(たとえば、予約ステーション、レジスタ・ファイル、ROB内など)実行
経路内のバッファが大きすぎる場合、最大動作クロック周波数は低減しなければ
ならない可能性がある。ここに例示する構成要素は、様々な技法に応じて設計し
構築することができる。
【0138】 例示した2通りの構造の間に中間構造(バッファなど)または信号が存在する
可能性がある。導体によっては、例示したように連続的なものではなく、むしろ
中間構造によって分割することができる。図中のボックスの枠は例示のためのも
のである。実際の装置はこのように定義された境界を備えた構成要素を含まなけ
ればならないわけではないだろう。例示した構成要素の相対サイズは実際の相対
サイズを示唆するためのものではない。矢印は、所与の実施形態における所与の
データ・フローを示すが、データ要求など、すべての信号を示すわけではない。
論理ハイ信号が前述されている場合には論理ロー信号によって置き換えることが
でき、その逆も可能である。
【0139】 プロセッサ内に示した構成要素はすべて同じプロセッサ・チップ上に置くこと
ができる。あるいは、たとえば、トレース・バッファは実行パイプラインとは異
なるチップ上に置くことができるだろう。
【0140】 「接続」「結合」という用語、ならびに関連用語は直接接続または直接結合に
限定されないが、間接接続または間接結合を含むことができる。「応答」という
用語および関連用語は、1つの信号または事象がある程度他の信号または事象の
影響を受けるが、必ずしも完全または直接的に影響を受けるわけではないことを
意味する。ある構成要素を含む「可能性がある」、含む「ことができるだろう」
、あるいは含む「ことが好ましい」と本明細書に記載されている場合、その特定
の構成要素を含むことが必須であるわけではない。
【0141】 MOBは、予測間違いを検出するためにアドレスの突合せではなくデータの突
合せを使用できるだろう。
【0142】 本開示の恩恵を受ける当業者は、本発明の範囲内で上記の説明および添付図面
から他の多くの変形形態が可能であることが分かるだろう。したがって、本発明
の範囲を定義するものは、それに対する補正を含む、特許請求の範囲である。
【図面の簡単な説明】
【図1】 プロセッサの一実施形態における所与の構成要素の高レベル・ブロック図表現
である。
【図2】 本発明の一実施形態によるプロセッサのブロック図である。
【図3】 本発明の他の実施形態によるプロセッサのブロック図である。
【図4】 2つのスレッドの一例を示す流れ図である。
【図5】 2つのスレッドの他の例を示す流れ図である。
【図6】 4つのスレッドの一例を示す流れ図である。
【図7】 図6のスレッドのオーバラップ実行を示すグラフである。
【図8】 本発明の一実施形態による個別トレース・バッファを示すブロック図である。
【図9】 2通りの時点におけるプログラムおよびリタイヤ順序を示すアレイを示す図で
ある。
【図10】 図8のトレース・バッファの一実施形態における所与の構成要素のブロック図
表現である。
【図11】 図8のトレース・バッファの他の実施形態における所与の構成要素のブロック
図表現である。
【図12】 図10のトレース・バッファの命令待ち行列アレイの一実施形態の一部分を示
す図表表現である。
【図13】 図10のトレース・バッファのデータおよび依存関係アレイの一実施形態の一
部分を示す図表表現である。
【図14】 図10のアレイの依存関係フィールドを作成する際に使用する指標レジスタお
よび変更レジスタの一実施形態を示す図である。
【図15】 図13のアレイの依存関係フィールドを作成する際に使用する論理ORゲート
を示す図である。
【図16】 図13のアレイの依存関係フィールドを作成するために使用する操作の一実施
形態を示す流れ図である。
【図17】 本発明の一実施形態によりそれに対する依存関係を有するトレース・バッファ
内の位置および特定のレジスタを示す図表表現である。
【図18】 図10のトレース・バッファの出力レジスタ・ファイルの一実施形態の一部分
を示す図表表現である。
【図19】 図10のトレース・バッファの入力レジスタ・ファイルの一実施形態の一部分
を示す図表表現である。
【図20】 本発明の一実施形態による図18の出力レジスタ・ファイルおよび図19の入
力レジスタ・ファイルとともに使用する比較器および再実施トリガ・ロジックの
ブロック図である。
【図21】 出力レジスタ・ファイルの内容を使用できる時点を示す流れ図である。
【図22】 本発明の一実施形態による図2のメモリ・オーダ・バッファ(MOB)内の個
別MOBを示すブロック図である。
【図23】 図22のMOBの1つのストア・バッファの一実施形態の一部分を示す図表表
現である。
【図24】 図22のMOBの1つのロード・バッファの一実施形態の一部分を示す図表表
現である。
【図25】 ロード命令とストア命令のアドレスを比較する比較器を示す図である。
【図26】 ストア命令とロード命令のアドレスを比較する比較器を示す図である。
【図27】 本発明の一実施形態によるMOB制御回路およびストア・バッファを示すブロ
ック図表現である。
【図28】 本発明の一実施形態によるMOB制御回路およびロード・バッファを示すブロ
ック図表現である。
【図29】 6つのスレッドの一例を示す流れ図である。
【図30】 時点t1における図29のスレッド内の関係を示すツリーである。
【図31】 スレッドT1がリタイヤする前にスレッドT4がリセットされると想定し、時
点t2における図29のスレッド内の関係を示すツリーである。
【図32】 スレッドT4がリセットされる前にスレッドT1がリタイヤすると想定し、時
点t2における図29のスレッド内の関係を示すツリーである。
【図33】 時点t3における図29のスレッド内の関係を示すツリーである。
【図34】 5つのスレッドを含む一例を示す流れ図である。
【図35】 時点t1における図34のスレッド内の関係を示すツリーである。
【図36】 時点t2における図34のスレッド内の関係を示すツリーである。
【図37】 図2のものに代わる実施形態によるプロセッサのブロック図表現である。
【図38】 図2のプロセッサを含むコンピュータ・システムである。
【手続補正書】
【提出日】平成12年7月27日(2000.7.27)
【手続補正1】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正内容】
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
───────────────────────────────────────────────────── フロントページの続き (81)指定国 EP(AT,BE,CH,CY, DE,DK,ES,FI,FR,GB,GR,IE,I T,LU,MC,NL,PT,SE),OA(BF,BJ ,CF,CG,CI,CM,GA,GN,GW,ML, MR,NE,SN,TD,TG),AP(GH,GM,K E,LS,MW,SD,SZ,UG,ZW),EA(AM ,AZ,BY,KG,KZ,MD,RU,TJ,TM) ,AL,AM,AT,AZ,BA,BB,BG,BR, BY,CA,CH,CN,CU,CZ,DE,DK,E E,ES,FI,GB,GD,GE,GH,GM,HR ,HU,ID,IL,IN,IS,JP,KE,KG, KP,KR,KZ,LC,LK,LR,LS,LT,L U,LV,MD,MG,MK,MN,MW,MX,NO ,NZ,PL,PT,RO,RU,SD,SE,SG, SI,SK,SL,TJ,TM,TR,TT,UA,U G,US,UZ,VN,YU,ZW

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 命令を実行するための実行パイプラインであって、その命令
    のうちの少なくとも一部が推論実行される実行パイプラインと、 前記命令を保持するために前記実行パイプラインの外部にあるトレース・バッ
    ファとを含み、推論エラーに関連する命令はそのトレース・バッファから実行パ
    イプライン内で再実施されることを特徴とするプロセッサ。
  2. 【請求項2】 前記命令のうちの一部は前記実行パイプライン内でのその実
    行の終わりに初期リタイヤされるが、その命令は最終リタイヤまで前記トレース
    ・バッファ内に存続する請求項1に記載のプロセッサ。
  3. 【請求項3】 最終リタイヤを行うべき命令を保持する項目の割振り解除を
    行うよう前記トレース・バッファに信号送出するための最終リタイヤ・ロジック
    をさらに含む請求項1に記載のプロセッサ。
  4. 【請求項4】 共用資源のマルチスレッド化の際に前記実行パイプラインを
    使用できる請求項1に記載のプロセッサ。
  5. 【請求項5】 前記トレース・バッファが第1のトレース・バッファであり
    、前記プロセッサが追加のトレース・バッファをさらに含み、前記第1および追
    加のトレース・バッファが異なるスレッドからのトレースを保持する請求項1に
    記載のプロセッサ。
  6. 【請求項6】 実行ユニットがレジスタ・リネーム・ユニットを含み、前記
    トレース・バッファが再実施中の前記命令に付随する制御ビットを提供する請求
    項1に記載のプロセッサ。
  7. 【請求項7】 再実施中の前記命令および前記制御ビットの状態に応じて、
    前記レジスタ・リネーム・ユニットが前記命令に関連するレジスタのリネームを
    バイパスする請求項6に記載のプロセッサ。
  8. 【請求項8】 再実施中の前記命令および前記制御ビットの状態に応じて、
    前記レジスタ・リネーム・ユニットが(1)レジスタのリネームを行うか、(2
    )リネームをバイパスし、その代わりに前記トレース・バッファからの物理レジ
    スタ識別番号を使用するか、(3)前記トレース・バッファからの値を定数とし
    て使用する請求項6に記載のプロセッサ。
  9. 【請求項9】 前記実行パイプラインが、ストア・バッファとロード・バッ
    ファとを含むメモリ・オーダ・バッファ(MOB)を含む請求項1に記載のプロ
    セッサ。
  10. 【請求項10】 命令を実行するための実行パイプラインであって、その命
    令のうちの少なくとも一部が推論実行される実行パイプラインと、 前記命令と前記命令の実行結果を保持するために前記実行パイプラインの外部
    にあるトレース・バッファとを含み、前記命令のうちの少なくとも一部は前記パ
    イプライン内での実行後に初期リタイヤされるが、最終リタイヤまで前記トレー
    ス・バッファ内に存続することを特徴とするプロセッサ。
  11. 【請求項11】 前記命令の実行の際に推論エラーを検出するための検出回
    路をさらに含む請求項10に記載のプロセッサ。
  12. 【請求項12】 前記検出回路の少なくとも一部が前記トレース・バッファ
    内に含まれる請求項10に記載のプロセッサ。
  13. 【請求項13】 前記命令の実行の際に推論エラーを検出するための検出回
    路と、推論エラーに関連する命令の再実施をトリガするための再実施トリガ回路
    とをさらに含む請求項10に記載のプロセッサ。
  14. 【請求項14】 前記実行パイプラインがロード命令とストア命令を保持す
    るメモリ・オーダ・バッファを含み、前記ロード命令とストア命令が初期リタイ
    ヤされず、最終リタイヤまで前記メモリ・オーダ・バッファ内に存続する請求項
    10に記載のプロセッサ。
  15. 【請求項15】 ロード命令とストア命令を保持するためのメモリ・オーダ
    ・バッファ(MOB)をさらに含み、誤推論を訂正するために前記トレース・バ
    ッファ内の命令を再実施することができ、前記ロード命令またはストア命令が前
    記パイプラインを初めて通過したときに前記MOB内の項目の割振りを行うが、
    前記命令が再実施されたときに前記項目の再割振りを行わないリネーム割振りユ
    ニットを実行ユニットが含む請求項10に記載のプロセッサ。
  16. 【請求項16】 前記トレース・バッファが、複数スレッドのトレースを保
    持するために前記実行パイプラインの外部にある複数のトレース・バッファのう
    ちの1つであり、前記実行パイプラインが複数スレッドの少なくとも一部分を同
    時に実行し、前記複数スレッドのうちの少なくとも1つが前記複数スレッドのう
    ちの他の少なくとも1つに依存する請求項10に記載のプロセッサ。
  17. 【請求項17】 最終リタイヤ・ロジックをさらに含み、前記トレース・バ
    ッファ内の前記命令が前記最終リタイヤ・ロジックの制御下で最終リタイヤされ
    るが、前記実行パイプライン内での実行後に前記命令の一部を初期リタイヤする
    ことができる請求項10に記載のプロセッサ。
  18. 【請求項18】 前記トレース・バッファが命令待ち行列アレイを含む請求
    項10に記載のプロセッサ。
  19. 【請求項19】 デコーダをさらに含み、前記実行パイプラインと前記トレ
    ース・バッファが前記デコーダから同時に命令を受け取る請求項1に記載のプロ
    セッサ。
  20. 【請求項20】 命令を実行するための実行パイプラインであって、その命
    令のうちの少なくとも一部が推論実行される実行パイプラインと、 前記命令を保持するために前記実行パイプラインの外部にあるトレース・バッ
    ファとを含み、検出された誤推論に応答して前記トレース・バッファから前記命
    令を再実施することができ、前記命令が正しく実行されたことが保証されるまで
    前記命令が前記トレース・バッファ内に存続することを特徴とするプロセッサ。
JP2000539419A 1997-12-16 1998-12-11 プロセッサ Expired - Fee Related JP3971893B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/991,269 US6240509B1 (en) 1997-12-16 1997-12-16 Out-of-pipeline trace buffer for holding instructions that may be re-executed following misspeculation
US08/991,269 1997-12-16
PCT/US1998/026408 WO1999031589A1 (en) 1997-12-16 1998-12-11 Out-of-pipeline trace buffer for instruction replay following misspeculation

Publications (3)

Publication Number Publication Date
JP2002508567A true JP2002508567A (ja) 2002-03-19
JP2002508567A5 JP2002508567A5 (ja) 2006-02-09
JP3971893B2 JP3971893B2 (ja) 2007-09-05

Family

ID=25537042

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000539419A Expired - Fee Related JP3971893B2 (ja) 1997-12-16 1998-12-11 プロセッサ

Country Status (11)

Country Link
US (1) US6240509B1 (ja)
EP (1) EP1040421B1 (ja)
JP (1) JP3971893B2 (ja)
KR (1) KR100382126B1 (ja)
CN (1) CN100342349C (ja)
AU (1) AU1911099A (ja)
BR (1) BR9814290A (ja)
DE (1) DE69829778T2 (ja)
HK (1) HK1029194A1 (ja)
TW (1) TW388811B (ja)
WO (1) WO1999031589A1 (ja)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6212626B1 (en) 1996-11-13 2001-04-03 Intel Corporation Computer processor having a checker
US6463522B1 (en) * 1997-12-16 2002-10-08 Intel Corporation Memory system for ordering load and store instructions in a processor that performs multithread execution
US6772324B2 (en) 1997-12-17 2004-08-03 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6412067B1 (en) 1998-08-11 2002-06-25 Intel Corporation Backing out of a processor architectural state
SE9901145D0 (sv) 1998-11-16 1999-03-29 Ericsson Telefon Ab L M A processing system and method
SE9901146D0 (sv) 1998-11-16 1999-03-29 Ericsson Telefon Ab L M A processing system and method
SE9803901D0 (sv) * 1998-11-16 1998-11-16 Ericsson Telefon Ab L M a device for a service network
JP4489958B2 (ja) * 1998-11-16 2010-06-23 テレフオンアクチーボラゲット エル エム エリクソン(パブル) イベントベースシステムの同時処理
SE9902373D0 (sv) * 1998-11-16 1999-06-22 Ericsson Telefon Ab L M A processing system and method
US6571359B1 (en) * 1999-12-13 2003-05-27 Intel Corporation Systems and methods for testing processors
US6658554B1 (en) * 1999-03-09 2003-12-02 Wisconsin Alumni Res Found Electronic processor providing direct data transfer between linked data consuming instructions
EP1050807A1 (en) * 1999-05-03 2000-11-08 Sgs Thomson Microelectronics Sa Memory access in a computer memory
US6463526B1 (en) * 1999-06-07 2002-10-08 Sun Microsystems, Inc. Supporting multi-dimensional space-time computing through object versioning
US7100027B1 (en) * 1999-12-13 2006-08-29 Intel Corporation System and method for reproducing system executions using a replay handler
US6892380B2 (en) * 1999-12-30 2005-05-10 Texas Instruments Incorporated Method for software pipelining of irregular conditional control loops
US6643767B1 (en) * 2000-01-27 2003-11-04 Kabushiki Kaisha Toshiba Instruction scheduling system of a processor
US6609247B1 (en) * 2000-02-18 2003-08-19 Hewlett-Packard Development Company Method and apparatus for re-creating the trace of an emulated instruction set when executed on hardware native to a different instruction set field
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6880069B1 (en) * 2000-06-30 2005-04-12 Intel Corporation Replay instruction morphing
US6877086B1 (en) * 2000-11-02 2005-04-05 Intel Corporation Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter
US6981129B1 (en) 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7207035B2 (en) * 2001-08-23 2007-04-17 International Business Machines Corporation Apparatus and method for converting an instruction and data trace to an executable program
US7047395B2 (en) * 2001-11-13 2006-05-16 Intel Corporation Reordering serial data in a system with parallel processing flows
US6950924B2 (en) * 2002-01-02 2005-09-27 Intel Corporation Passing decoded instructions to both trace cache building engine and allocation module operating in trace cache or decoder reading state
CN100449478C (zh) * 2002-05-31 2009-01-07 德拉华州大学 用于实时多线程处理的方法和装置
US7010665B1 (en) 2002-06-27 2006-03-07 Intel Corporation Method and apparatus for decompressing relative addresses
US7941651B1 (en) 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
US7103751B1 (en) 2002-06-27 2006-09-05 Intel Corporation Method and apparatus for representation of an address in canonical form
US7111148B1 (en) 2002-06-27 2006-09-19 Intel Corporation Method and apparatus for compressing relative addresses
US7194603B2 (en) * 2003-04-23 2007-03-20 International Business Machines Corporation SMT flush arbitration
US20040225870A1 (en) * 2003-05-07 2004-11-11 Srinivasan Srikanth T. Method and apparatus for reducing wrong path execution in a speculative multi-threaded processor
US20040255104A1 (en) * 2003-06-12 2004-12-16 Intel Corporation Method and apparatus for recycling candidate branch outcomes after a wrong-path execution in a superscalar processor
CN100442244C (zh) * 2004-05-12 2008-12-10 Nxp股份有限公司 具有跟踪协处理器的数据处理设备、系统和方法
US7496735B2 (en) * 2004-11-22 2009-02-24 Strandera Corporation Method and apparatus for incremental commitment to architectural state in a microprocessor
US7508396B2 (en) 2005-09-28 2009-03-24 Silicon Integrated Systems Corp. Register-collecting mechanism, method for performing the same and pixel processing system employing the same
US8219885B2 (en) * 2006-05-12 2012-07-10 Arm Limited Error detecting and correcting mechanism for a register file
US20100306509A1 (en) * 2009-05-29 2010-12-02 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
CN102567137B (zh) * 2010-12-27 2013-09-25 北京国睿中数科技股份有限公司 在分支预测失败时使用rob恢复rat内容的系统和方法
US9612934B2 (en) * 2011-10-28 2017-04-04 Cavium, Inc. Network processor with distributed trace buffers
CN104823168B (zh) * 2012-06-15 2018-11-09 英特尔公司 用于实现从由加载存储重新排序和优化导致的推测性转发遗漏预测/错误中恢复的方法和系统
US9830224B2 (en) * 2013-03-15 2017-11-28 Nvidia Corporation Selective fault stalling for a GPU memory pipeline in a unified virtual memory system
US10209992B2 (en) * 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register
US9710272B2 (en) 2014-04-25 2017-07-18 Avago Technologies General Ip (Singapore) Pte. Ltd. Computer processor with generation renaming
US9996354B2 (en) 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
CN104657145B (zh) * 2015-03-09 2017-12-15 上海兆芯集成电路有限公司 用于微处理器的重发停靠的系统和方法
GB2572968B (en) * 2018-04-17 2020-09-02 Advanced Risc Mach Ltd Tracking speculative data caching
CN110688160B (zh) * 2019-09-04 2021-11-19 苏州浪潮智能科技有限公司 一种指令流水线处理方法、系统、设备及计算机存储介质

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5153848A (en) 1988-06-17 1992-10-06 Bipolar Integrated Technology, Inc. Floating point processor with internal free-running clock
US5134693A (en) 1989-01-18 1992-07-28 Intel Corporation System for handling occurrence of exceptions during execution of microinstructions while running floating point and non-floating point instructions in parallel
US5142634A (en) 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5309561A (en) 1990-09-28 1994-05-03 Tandem Computers Incorporated Synchronous processor unit with interconnected, separately clocked processor sections which are automatically synchronized for data transfer operations
US5524250A (en) 1991-08-23 1996-06-04 Silicon Graphics, Inc. Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers
US5546593A (en) 1992-05-18 1996-08-13 Matsushita Electric Industrial Co., Ltd. Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream
US5313634A (en) 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US5420990A (en) * 1993-06-17 1995-05-30 Digital Equipment Corporation Mechanism for enforcing the correct order of instruction execution
US5548776A (en) * 1993-09-30 1996-08-20 Intel Corporation N-wide bypass for data dependencies within register alias table
US5588126A (en) 1993-12-30 1996-12-24 Intel Corporation Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system
US5664137A (en) 1994-01-04 1997-09-02 Intel Corporation Method and apparatus for executing and dispatching store operations in a computer system
US5564028A (en) * 1994-01-11 1996-10-08 Texas Instruments Incorporated Pipelined data processing including instruction trace
US5586278A (en) 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US5613083A (en) * 1994-09-30 1997-03-18 Intel Corporation Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions
US5802272A (en) * 1994-12-19 1998-09-01 Digital Equipment Corporation Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
US5724565A (en) 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
US5832260A (en) * 1995-12-29 1998-11-03 Intel Corporation Processor microarchitecture for efficient processing of instructions in a program including a conditional program flow control instruction
US5778210A (en) * 1996-01-11 1998-07-07 Intel Corporation Method and apparatus for recovering the state of a speculatively scheduled operation in a processor which cannot be executed at the speculated time
US5754818A (en) * 1996-03-22 1998-05-19 Sun Microsystems, Inc. Architecture and method for sharing TLB entries through process IDS
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5887166A (en) 1996-12-16 1999-03-23 International Business Machines Corporation Method and system for constructing a program including a navigation instruction
US5961639A (en) 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5881280A (en) * 1997-07-25 1999-03-09 Hewlett-Packard Company Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor

Also Published As

Publication number Publication date
HK1029194A1 (en) 2001-03-23
EP1040421A4 (en) 2002-07-17
DE69829778D1 (de) 2005-05-19
KR20010024750A (ko) 2001-03-26
BR9814290A (pt) 2001-10-30
TW388811B (en) 2000-05-01
US6240509B1 (en) 2001-05-29
CN1286771A (zh) 2001-03-07
AU1911099A (en) 1999-07-05
EP1040421B1 (en) 2005-04-13
EP1040421A1 (en) 2000-10-04
DE69829778T2 (de) 2006-01-26
WO1999031589A1 (en) 1999-06-24
CN100342349C (zh) 2007-10-10
KR100382126B1 (ko) 2003-05-09
JP3971893B2 (ja) 2007-09-05

Similar Documents

Publication Publication Date Title
JP2002508567A (ja) 誤推論後の命令再実施のためのアウトオブパイプライン・トレース・バッファ
JP3957456B2 (ja) 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム
JP3957455B2 (ja) 実行パイプラインの外部に複数のプログラム・カウンタとトレース・バッファを有するプロセッサ
US6772324B2 (en) Processor having multiple program counters and trace buffers outside an execution pipeline
US7263600B2 (en) System and method for validating a memory file that links speculative results of load operations to register values
JP6095670B2 (ja) コンピュータ・システム内のオペランド活性情報の維持
JP5118652B2 (ja) アウトオブオーダープロセッサにおけるトランザクショナルメモリ
JP3014773B2 (ja) プロセサアーキテクチャ
JP3093639B2 (ja) プロセッサ内の資源割当て追跡方法及びそのシステム
US9495225B2 (en) Parallel execution mechanism and operating method thereof
US10474469B2 (en) Apparatus and method for determining a recovery point from which to resume instruction execution following handling of an unexpected change in instruction flow
US20180336037A1 (en) Multi-level history buffer for transaction memory in a microprocessor
JP3808314B2 (ja) 長レイテンシ命令に対する命令属性およびステータス情報を示す処理システムおよび方法
US10255071B2 (en) Method and apparatus for managing a speculative transaction in a processing unit
US7937569B1 (en) System and method for scheduling operations using speculative data operands
US20230315474A1 (en) Microprocessor with apparatus and method for replaying instructions
Song Reducing register pressure through LAER algorithm

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051212

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060801

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061027

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070611

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20100615

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20110615

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120615

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20120615

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130615

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees