JP2002508568A - 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム - Google Patents

不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム

Info

Publication number
JP2002508568A
JP2002508568A JP2000539422A JP2000539422A JP2002508568A JP 2002508568 A JP2002508568 A JP 2002508568A JP 2000539422 A JP2000539422 A JP 2000539422A JP 2000539422 A JP2000539422 A JP 2000539422A JP 2002508568 A JP2002508568 A JP 2002508568A
Authority
JP
Japan
Prior art keywords
instruction
thread
load
buffer
store
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2000539422A
Other languages
English (en)
Other versions
JP2002508568A5 (ja
JP3957456B2 (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 JP2002508568A publication Critical patent/JP2002508568A/ja
Publication of JP2002508568A5 publication Critical patent/JP2002508568A5/ja
Application granted granted Critical
Publication of JP3957456B2 publication Critical patent/JP3957456B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)

Abstract

(57)【要約】 本発明の一実施形態では、プロセッサはロード・バッファ(182)とストア・バッファ(184)とを含むメモリ・オーダ・バッファ(MOB)を含み、MOBは、異なるスレッド内のロード命令とストア命令とのデータの一貫性を維持するようにロード命令とストア命令を順序付け、そのスレッドのうちの少なくとも1つがそのスレッドのうちの少なくとも1つの他のスレッドに依存する。本発明の他の実施形態では、プロセッサは複数スレッドの少なくとも一部分を同時に実行する実行パイプラインを含み、そのスレッドのうちの少なくとも1つがそのスレッドのうちの少なくとも1つの他のスレッドに依存し、その実行パイプラインがロード命令およびストア命令を順序付けるメモリ・オーダ・バッファを含む。また、プロセッサはロード・バッファ内のロード命令に関連する推論エラーを検出するための検出回路も含む。

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】 (発明の概要) 本発明の一実施態様では、プロセッサはロード・バッファとストア・バッファ
とを含むメモリ・オーダ・バッファ(MOB)を含み、MOBは異なるスレッド
内のロード命令とストア命令とのデータの一貫性を維持するようにロード命令と
ストア命令を順序付ける。その際、そのスレッドのうちの少なくとも1つがその
スレッドのうちの少なくとも1つの他のスレッドに依存する。本発明の他の実施
態様では、プロセッサは複数スレッドの少なくとも一部分を同時に実行する実行
パイプラインを含み、そのスレッドのうちの少なくとも1つがそのスレッドのう
ちの少なくとも1つの他のスレッドに依存し、その実行パイプラインがロード命
令およびストア命令を順序付けるメモリ・オーダ・バッファを含む。また、プロ
セッサはロード・バッファ内のロード命令に関連する推論エラーを検出する検出
回路も含む。
【0008】 本発明は、以下に示す詳細な説明ならびに本発明の実施形態の添付図面により
より完全に理解されるだろうが、添付図面は、記載した特定の実施形態に本発明
を限定するものと解釈すべきではなく、説明および理解のみを目的とするもので
ある。
【0009】 (好ましい実施形態の詳細な説明) 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.追加情報および実施形態
【0010】 図1は、プロセッサ10の所与の構成要素を示している。プロセッサ10は、
実行パイプライン12と、実行パイプライン12の外部にあるトレース・バッフ
ァ14とを含む。実行パイプライン12は、メモリ・オーダ・バッファを含む場
合もある。導体18上の命令は、実行のために実行パイプライン12に供給され
る。また、命令は、導体22を介してトレース・バッファ14にも供給される。
命令は、実行パイプライン12内で推論実行することができる。推論の例として
は、データ推論および依存関係推論を含む。多種多様の推論のいずれも含むこと
ができる。プロセッサ10は、推論エラー(誤推論)を検出し、それから回復す
るための機構をトレース・バッファ14に含む。
【0011】 誤推論が検出されると、誤推論された命令は、トレース・バッファ14から導
体24を介して実行パイプライン12に供給され、実行パイプライン12内で再
実施される。命令が「再実施」される場合、その命令とその命令に依存するすべ
ての命令は再実行されるが、必ずしも同時に行われるわけではない。命令が「完
全再実施」される場合、その命令とプログラム順序でその命令に続くすべての命
令が再実行される。プログラム順序とは、複数の命令が適正順序プロセッサ内で
実行されると思われる順序である。命令は、完全にプログラム順序でまたはプロ
グラム順序以外の何らかの順序で導体18を通過することができる。プロセッサ
10は、適正順序プロセッサである場合もあれば、不適正順序プロセッサである
場合もある。従属命令の再実行の結果、従属命令に依存する命令が再実施される
場合もある。命令の再実行の回数は、再実施をトリガする事象を制御することに
よって制御することができる。一般に、実行という用語は、最初の実行と、再実
行を含むことができる。命令の少なくとも一部の結果は、導体26を介してトレ
ース・バッファに供給される。最終リタイヤ・ロジック34は、命令が初めから
または再実行時に正しく実行されたことが保証された後で、トレース・バッファ
14内の命令を最終的にリタイヤする。
【0012】 実行パイプライン12は、多種多様の実行パイプラインのいずれでもよく、よ
り大きいパイプラインの一セクションにすることもできる。実行パイプライン1
2は、多種多様のプロセッサとともに使用することができる。図2と図3に例を
示すが、図2は実行パイプライン108を有するプロセッサ50の構成要素を示
し、図3は実行パイプライン308を有するプロセッサ108を示している。図
2の本発明の実施形態の実行パイプライン108はレジスタ・リネームを含む。
他の実施形態の実行パイプラインはレジスタ・リネームを含まない。プロセッサ
は、(図2のプロセッサ50の場合のように)複数のスレッドを同時に処理する
場合もあれば、(図3のプロセッサ100の場合のように)複数のスレッドを同
時に処理しない場合もある。プロセッサ50について、まず説明する。
【0013】 本明細書において「一実施の形態」または「一実施形態」に言及する場合、そ
の実施形態に関して記載した特定の特徴、構造、または特性が本発明の少なくと
も1つの実施形態に含まれることを意味する。本明細書の様々な箇所に「一実施
形態では」という句が現れても、必ずしもすべて同じ実施形態について言及して
いるわけではない。
【0014】 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に供給され
る。
【0015】 トレースとは1組の命令セットである。スレッドは、そのトレースと、レジス
タ値およびプログラム・カウンタ値などの関連信号とを含む。
【0016】 スレッド管理ロジック124は、導体130を介してプログラム・カウンタ1
12A、112B、・・・、112Xに開始計数値を供給することにより(Xは
プログラム・カウンタの数を表す)、Iキャッシュ104内のプログラムまたは
プロセスから様々なスレッドを作成する。一例として、Xは4またはそれ以上あ
るいはそれ以下にすることができる。スレッド管理ロジック124は、関連のプ
ログラム・カウンタを停止することにより、スレッドを終了する。その後、スレ
ッド管理ロジック124は、プログラム・カウンタに他のスレッドを開始させる
こともできる。様々なスレッドの一部分はIキャッシュ104から同時に読み取
られる。
【0017】 プログラムまたはプロセス内のどこでスレッドを作成すべきかを判定するため
に、スレッド管理ロジック124は、導体128を介してデコーダ106から命
令を読み取ることができる。スレッドは、プログラマまたはコンパイラによって
挿入され、スレッドの開始および終了を明示的に決定する命令を含むことができ
る。あるいは、スレッド管理ロジック124は、プログラムまたはプロセスの命
令を分析し、Iキャッシュ104に供給されたプログラムまたはプロセスを様々
なスレッドに分解することができる。たとえば、分岐、ループ、逆方向分岐、復
帰、ジャンプ、手続き呼出し、関数呼出しは、スレッドを分離するために適当な
ポイントである場合もある。スレッド管理ロジック124は、潜在的なスレッド
の長さ、含まれる変数の数、連続するスレッド間に共通する変数の数、ならびに
どこでスレッドを開始するかを考慮する際のその他の要因を考慮することができ
る。スレッド管理ロジック124は、スレッドの境界を決定する際にプログラム
順序を考慮することができる。プログラム順序とは、スレッドとスレッド内の命
令が適正順序プロセッサ上で実行されると思われる順序である。スレッド内の命
令は、(プログラム順序とは反対の)不適正順序で実行することができる。スレ
ッドは、本質的には、パイプライン108によって独立して処理することができ
る。スレッド管理ロジック124は、最適とは言えない選択を回避するために履
歴テーブルを含む予測機構を含むことができる。たとえば、スレッド管理ロジッ
ク124は、スレッドを作成し、次に、そのスレッドが実際にはプログラム順序
の一部ではなかったと後で判定する場合がある。その場合同じコードがもう一度
検出された場合、予測機構を使用して、同じスレッドをもう一度作成すべきかど
うかを判定することができるだろう。スレッド管理ロジック124は、スレッド
の動的作成と、コンパイラまたはプログラマからの明示的な命令ヒントの使用と
の組合せを使用して、命令内のどこでスレッドを作成すべきかを判定することが
できる。
【0018】 スレッドを動的に作成することは、マルチスレッド化のために特に作成または
コンパイルされたわけではないプログラムからスレッドを作成することであり、
スレッドの少なくとも1つは他のスレッドに依存する。プログラムは、実行パイ
プライン108およびスレッド管理ロジック124を含むチップから離れて作成
することができる。スレッドを動的に作成し、スレッドを実行し、実行時に推論
エラーを検出して訂正することを、動的マルチスレッド化と呼ぶ。
【0019】 図4は、条件付き分岐命令を含むスレッドT1を示している。プログラム順序
では、スレッドT2は条件付き分岐命令の次に実行される。時間順序では、スレ
ッドT2は、スレッドT1が最初に条件付き分岐命令に到達した時点から推論実
行される。したがって、スレッドT1およびT2の一部分は同時に実行される。
スレッドT2が誤推論を含む場合、スレッドT2の実施済み命令が再実施される
【0020】 スレッド管理ロジック124は、導体130を介してプログラム・カウンタの
計数値をモニタすることができる。計数値をモニタする目的は、スレッドがいつ
終了すべきかを判定することである。たとえば、条件付き分岐の条件が満たされ
ないときに、スレッドT1のプログラム・カウンタが続行可能になっている場合
、それはスレッドT2の第1の命令まで進むことになるだろう。したがって、ス
レッド管理ロジック124は、条件が満たされないときにスレッドT1のプログ
ラム・カウンタを停止する。
【0021】 図5は、関数呼出し命令を含むスレッドT1を示している。プログラム順序で
は、呼出し命令に到達したときに、プログラム・カウンタはその関数の位置まで
ジャンプして復帰命令まで実行し、復帰命令の時点でプログラム・カウンタは呼
出し後の命令に復帰する。プログラム順序では、スレッドT2は復帰後の命令か
ら始まる。時間順序では、スレッドT2は、スレッドT1が最初に呼出しに到達
した時点から推論実行される。スレッドT2が誤推論を含む場合、スレッドT2
の実施済み命令が再実施される。スレッドT1は、そのプログラム・カウンタが
スレッドT2の第1の命令に到達したときに終了する。図5のロードMX命令お
よびストアMX命令について以下に説明する。
【0022】 図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の条件付き逆方向分岐の直後にある
命令から始まる。
【0023】 図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という順序で実行されることになる。
【0024】 図2を参照すると、MUX 110からの命令はリネーム/割振りユニット1
50によって受け取られ、そのユニットはレジスタ・ファイル152内のリネー
ムした物理レジスタの物理レジスタ識別子(PRID)を供給する。このPRI
Dはバイパス導体126を介してトレース・バッファ114に供給される。割振
りは、命令にレジスタを割り当てることと、スケジュール/発行ユニット156
の予約ステーションの項目を割り当てることを含む。予約ステーション内の特定
の命令のためにオペランドの準備ができると、実行ユニット158のうちの1つ
の実行ユニット(たとえば、整数、浮動小数点)またはアドレス生成ユニット(
AGU)172と、メモリ・オーダ・バッファ(MOB)178と、データ・キ
ャッシュ176とを含むメモリ実行パイプラインにその命令が発行される。命令
によっては、オペランドは導体168を介してレジスタ・ファイル152から供
給される場合もある。本発明の一実施形態では、1つのスレッド内の従属命令は
、不適正順序で実行されないようにリンクすることができる。しかし、様々なス
レッドからの従属命令は、同時にフェッチし、デコードし、不適正順序で実行す
ることができる。所与のスレッドの実行は推論実行にすることができる。
【0025】 高いパフォーマンスのため、予約ステーションおよび関連機構は、低待ち時間
と高帯域幅命令発行の両方を有するように設計されている。この待ち時間と帯域
幅の要件は、予約ステーション内で待機できる命令の数に制限を加えるものであ
る。トレース・バッファ114をパイプライン108の外部に位置決めすること
により、パイプライン108のスループットを大幅に低下させることなく、多数
の命令を実行/再実施に使用イネーブルにすることができる。実行パイプライン
108とトレース・バッファ114との間の待ち時間の影響はパイプライン化に
より低減することができる。
【0026】 実行の結果と関連情報は、ライトバック・ユニット162から導体122(レ
ジスタの場合)を介し、さらにMUX 192と導体196を介してトレース・
バッファ114に書き込まれる。この結果と関連情報は、レジスタ・ファイル1
52と関連リオーダ・バッファ(ROB)164に書き込むこともできる。ある
命令の結果と情報がレジスタ・ファイル152およびROB164に書き込まれ
ると、その命令は、パイプライン108に関する限り、適正順序でリタイヤされ
る。このリタイヤは第1レベルまたは初期リタイヤと呼ばれる。第1レベル・リ
タイヤ時またはその前に、予約ステーション、レジスタ・ファイル152、RO
B164を含む、スケジュール/発行ユニット156内のリタイヤした命令用の
資源の割振りが解除される。しかし、その命令に関して必要なすべての詳細は、
後述する最終的なリタイヤまでトレース・バッファ114およびMOB178内
に維持される。
【0027】 プログラム順序で後のスレッドで使用するデータが前のスレッドで生成される
場合、後のスレッドと前のスレッドとの間に依存関係が存在する。このデータは
、メモリ命令または非メモリ命令によって前のスレッドで生成された可能性があ
る。たとえば、後のスレッド内のロード命令が前のスレッド内のストア命令と同
じアドレスを有する場合、後のスレッドは前のスレッドに依存する可能性がある
。また、後のスレッド内のある命令が前のスレッドで変更されたレジスタを必要
とする場合も、後のスレッドは前のスレッドに依存する可能性がある。同様に、
プログラム順序で後の命令が前の命令によって生成されたデータを使用する場合
、後の命令は前の命令に依存する。「依存関係」という用語は「依存関係推論」
という句でも使用する。依存関係推論の一例は、ロード命令と前のストア命令と
の間に依存関係がまったくないと推論することである。アドレスの突合せは、依
存関係推論エラーをチェックするための技法の一例である。データ推論の一例は
、レジスタ内のデータが正しいデータであると推論することである。レジスタの
突合せは、データ推論エラーをチェックするための技法の一例である。
【0028】 B.トレース・バッファ114に関する詳細 図8を参照すると、トレース・バッファ114はトレース・バッファ114A
、114B、114C、・・・、114Yを含む。Yはトレース・バッファの数
を表す。たとえば、Y=4(すなわち、Y=D)である場合、4つのトレース・
バッファが存在する。Yが3未満である場合、トレース・バッファ114は図8
に示すトレース・バッファをすべて含むわけではなくなる。YはX(プログラム
・カウンタの数)と同じかまたはXとは異なるものにすることができる。トレー
ス・バッファ114は、個別トレース・バッファに分割された単一メモリにする
か、物理的に別々のトレース・バッファにするか、あるいは両者の組合せにする
ことができる。
【0029】 図9を参照すると、一実施形態では、スレッド管理ロジック124は、スレッ
ドIDのプログラム順序(リタイヤ順序でもある)を指定するアレイ198を含
む。この例では、各トレース・バッファは固有のスレッドIDを有するかまたは
スレッドIDに対する1対1のマッピングを有する。たとえば、トレース・バッ
ファ114AにはスレッドID1が割り当てられ、トレース・バッファ114B
にはスレッドID2割り当てられ、以下同様である。スレッドIDはハードワイ
ヤードにするかまたはプログラミングすることができる。一実施形態では、各プ
ログラム・カウンタは特定のスレッドIDおよびトレース・バッファに関連付け
られる。(あるいは、このような制限された関係が存在しない。)
【0030】 図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のように訂正されることになるだろう。
【0031】 前述のように、スレッドのプログラム順序は、スレッドが適正順序プロセッサ
で実行されると思われる順序である。また、命令のプログラム順序は、命令が適
正順序プロセッサで実行されると思われる順序である。スレッド管理ロジック1
24は必ずしも最初にそのスレッド用の真のプログラム順序を決定するわけでは
ない。しかし、スレッド管理ロジック124は結局、真のプログラム順序を決定
する。
【0032】 図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または値が再実行中の命令に付随する場合もある。
【0033】 トレース・バッファ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では、多重化またはイネーブル回路あるいは相当な数の
並列導体を使用することができる。トレース・バッファは同一またはいくらか異
なるものにすることができる。
【0034】 図10のトレース・バッファ114Aは、トレース・バッファの第1の実施形
態を示している。図11のトレース・バッファ114A’は、トレース・バッフ
ァの第2の実施形態を示している。トレース・バッファの他の実施形態は、トレ
ース・バッファ114Aおよび114A’の変形形態あるいはまったく異なるア
ーキテクチャを含むことができるだろう。
【0035】 1.トレース・バッファ114A 図10を参照すると、トレース・バッファ114Aは、命令待ち行列アレイ2
02Aと、データ及び依存関係(DAD)アレイ206Aと、入力レジスタ・フ
ァイル208Aと、出力レジスタ・ファイル210Aと、依存関係生成回路21
2Aと、制御回路224Aとを含む。「アレイ」という用語は、特定の形式に制
限せず、広い意味で複数方向の情報を含むためのものである。
【0036】 a.命令待ち行列アレイ202A 図12に関連して、本発明の一実施形態による命令待ち行列アレイ202Aの
構造と、それと他の構成要素との対話について、以下に説明する。命令待ち行列
アレイ202Aは、特定のスレッドの一部であるIキャッシュ104からフェッ
チされた命令を受け取る。1つのスレッド内の命令は、適正順序でフェッチされ
、命令待ち行列アレイ202Aに書き込まれる。他のスレッドの一部である命令
は、異なるトレース・バッファの命令待ち行列内に書き込まれるか、または異な
る時点で命令待ち行列アレイ202Aによって書き込まれる。命令待ち行列アレ
イ202Aは、各命令識別子(instrID)に関する様々な情報フィールド
を含む。様々な実施形態は、いくらか異なるフィールドと、異なる数の行を含む
ことができるだろう。命令待ち行列アレイ202Aのこの実施形態では、プログ
ラム・カウンタ値は考慮されないが、他の実施形態では考慮される可能性がある
。命令待ち行列アレイ202Aと添付図面に示す他のすべての構成要素は、図示
していない様々なフィールド、信号、および構造を含むことができる。このよう
なフィールド、信号、構造は図示していない。というのは、これらは実施に応じ
て変化するものであり、当業者によって理解されており、本明細書を非常に複雑
にし、本発明を不明確にする傾向があるからである。
【0037】 命令は、(たとえば、そのスレッドがプログラムの適正順序実行の一部ではな
いと判定されたという理由で)最終的にリタイヤまたは廃棄されるまで、トレー
ス・バッファ114A内で待機する。まだ実行されていない命令が依然としてト
レース内に存在する間に命令待ち行列アレイ202Aがいっぱいになった場合、
1つの命令が最終的に命令待ち行列アレイ202Aからリタイヤされ、1つの行
の割振りが解除されるまで、トレース内の命令はトレース・バッファ114また
はリネーム/割振りユニット150によって受け取られない。システム100内
の様々なアレイの項目は、先頭ポインタおよび末尾ポインタの移動によって割振
りおよび割振り解除を行うことができる。
【0038】 以下のコード行に関連して、命令待ち行列アレイ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より前にあることは明らかになるだろう。
【0039】 「命令コード」フィールドは、特定の命令に関連する命令コードを含む。「宛
先」、「ソース1」、「ソース2」の各フィールドは、命令の宛先、ソース1、
ソース2を識別する。「ソース1のインデックス」は、そのソースを含むトレー
ス・バッファ114A内の命令項目を識別する。たとえば、instrID0の
宛先はinstrID2のソース1に使用される。したがって、instrID
2の「ソース1のインデックス」フィールドには0が入る。instrID2の
宛先はinstrID3のソース2に使用される。したがって、instrID
3の「ソース2のインデックス」フィールドには2が入る。×は指定なしを意味
する。
【0040】 「有効1」と「有効2」のフィールドは、トレース・バッファ114A内のス
レッドの外部からの命令によってあるinstrIDの対応するソース・オペラ
ンドが事前に生成されたときに第1の値(たとえば、論理0)にセットされ、そ
のスレッド内の命令によってあるinstrIDのソース・オペランドが事前に
生成されたときに第2の値(たとえば、論理1)にセットされるビットである。
instrID0のソース1(R1)は、命令待ち行列アレイ202A内のトレ
ースの外部で生成される。したがって、instrID0の有効1は論理0にな
る。instrID3のソース2はinstrID2の宛先から得られる。した
がって、instrID3の有効2は論理1になる。
【0041】 命令I3は、定数「10」にR1を加算することを含む。この定数は、命令と
ともに、特殊レジスタ(図示せず)に、ソース1フィールドに、または他の何ら
かの機構により格納することができる。図12では、instrID3のソース
1フィールドに×(指定なし)が示されている。あるいは、ソース1フィールド
に何らかのインジケータを入れることができるだろう。
【0042】 ストア・バッファID(SBID)フィールドは、後述するストア・バッファ
内のストア命令に関連するSBIDを保持する。ロード・バッファ(LBID)
フィールドは、後述するロード・バッファ内のロード命令に関連するLBID項
目を保持する。SBID値とLBID値は、リネーム/割振りユニット150に
よって割り当てられ、バイパス導体126を介して命令待ち行列アレイに書き込
まれる。スレッドID番号フィールドは命令待ち行列アレイ202Aに含めるこ
とができるだろうが、暗黙のものなのでその必要はない。
【0043】 b.DADアレイ206Aおよび依存関係生成回路212A 図13を参照すると、DADアレイ206Aの一実施形態は、1対1方式で命
令待ち行列アレイ202AのinstrID項目に対応する「instrID」
項目(行)を含む。実際に、命令待ち行列アレイ202AとDADアレイ206
Aは同じアレイの異なる部分にすることもできるだろう。しかし、一部の実施形
態では、命令待ち行列アレイ202AとDADアレイ206Aに関連する別々の
読取りポートが存在する。
【0044】 DADアレイ206Aは、命令によって生成された値またはレジスタ・ファイ
ル152内のPRIDのいずれかを含む「値またはPRID」フィールドを含む
。この値は、ライトバック・ユニット162とライトバック・バス122および
196を介して実行ユニットからトレース・バッファ114Aにライトバックさ
れる。「状況」フィールドは、2ビットにすることができるものであり、「値ま
たはPRID」フィールドが「値」を含むか「PRID」を含むかを示す。一実
施形態では、「値またはPRID」が有効な「値」または有効な「PRID」の
いずれも保持しないことが可能である。「再実施計数値」フィールドは、命令デ
ィスパッチを明確に識別するものであり、同じinstrIDの命令がパイプラ
イン108で再実施されるたびに増分される。一実施形態では、パイプライン1
08内で1つの命令を複数回同時に再実施することも可能である。この場合、一
実施形態では、最高「再実施計数値」に関連する情報だけがDADアレイ206
Aにライトバックされる。
【0045】 「依存関係フィールド」は、各論理レジスタに関するビットを含む。図13で
は、簡略化のため、4つの論理レジスタ(R1、R2、R3、R4)だけが表さ
れている。しかし、この数ははるかに大きいものにすることもできる。この例で
は、依存関係フィールド項目は、トレースへの入力値と命令項目との間にデータ
依存関係連鎖が存在することを示すために1にセットされ、依存関係がまったく
ない場合に0にセットされる。依存関係フィールド項目は、入力値が受け取られ
た場合に(値の誤推論が検出されたときなどに)トレース内のどの命令を実行す
る必要があるかを識別する。
【0046】 命令がフェッチされ、デコードされ、トレース・バッファ114Aに書き込ま
れると、依存関係ビットが順次計算され、DADアレイ206Aに書き込まれる
。依存関係ビットは、命令を再実施すべきかどうかが判定される前に生成するこ
とができる。図13の依存関係ビットは、B.1.a項に前述したように6つの
命令I1〜I5に関するものである。
【0047】 依存関係フィールドは、機械的手法により作成することができる。このような
手法の1つを説明する前に、より直観的なレベルでの作成について説明する。
【0048】 i.直観レベル 命令I0の結果はレジスタR1およびR2のみに依存する。したがって、in
strID0のR1列とR2列には1が入り、R3列とR4列は0のままになる
(命令I0に関する情報を保持する)。
【0049】 命令I1の結果はレジスタR3およびR4のみに依存する。したがって、in
strID1のR1列とR2列には0が入り、R3列とR4列には1が入る。
【0050】 命令I2の結果は、命令I0およびI1で生成されたレジスタR1およびR2
にそれぞれ直接依存する。命令I0では、R1はトレースの先頭にあるR1値と
R2値に依存する。命令I2では、R2はトレースの先頭にあるR2値とR4値
に依存する。したがって、命令I2はトレースの先頭にあるR1〜R4値に間接
的に依存し、instrID2のR1〜R4列には1が入る。
【0051】 命令I3の結果は、命令I2で生成されたレジスタR1に直接依存する。した
がって、命令I2がトレースの先頭にあるR1〜R4値に依存するので、命令I
3はこれらの値に間接的に依存し、instrID3のR1〜R4列には1が入
る。
【0052】 命令I4の結果は、命令I1で生成されたレジスタR2に直接依存する。R2
はトレースの先頭にあるレジスタR3値とR4値に依存する。したがって、in
strID4のR1列とR2列には0が入り、R3列とR4列には1が入る。
【0053】 命令I5の結果は、命令I2で生成されたレジスタR1に直接依存し、これは
トレースの先頭にあるレジスタR1〜R4に依存する。したがって、instr
ID5のR1〜R4列には1が入る。
【0054】 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つの結合レジスタ内に入れることができる。
【0055】 各論理レジスタごとにトレース・バッファ・アドレス・レジスタが設けられ、
それが論理レジスタを変更するためのトレース・バッファ114A内の最後の命
令を指し示す。変更ビットおよび最後の修飾子アドレスは、トレース・バッファ
114Aに書き込むべき次の命令に関する依存関係ビットを計算するために使用
する。
【0056】 ただし、ここで使用するレジスタの変更とは、そのレジスタの値を書き込むこ
とを意味するだけであることに留意されたい。そのレジスタの内容が命令の結果
として異なるものになることを必ずしも意味するわけではない。たとえば、(命
令I0内のように)R1およびR2の内容が乗算され、その結果がレジスタR1
に書き込まれる場合、R1の内容は必ずしも命令I0の結果として異なるものに
なるわけではない。たとえば、命令前にR1の内容が「0」であるかまたはR2
が「1」である場合、命令後のR1の内容は異なるものにはならないだろう。
【0057】 図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のアルゴリズムを実行する際に参照される変更レジスタおよび
修飾子は、ある命令を実行する直前に存在したものである。
【0058】 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が変更されたことを
示す。
【0059】 命令I1の依存関係フィールドは、命令I0のものと同様に生成される。変更
レジスタ240のR1論理レジスタ列は1にセットされたままになる。変更レジ
スタ240のR2列には論理1が入る。レジスタ232内の1は命令I1を表す
【0060】 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を変更するための最も最新の命令であることを示す。
【0061】 命令I3の依存関係フィールドは、命令I2のものと同様に生成される。変更
レジスタ240のR4列には論理1が加算され、レジスタ236には命令I3を
表す3が入る。論理ORは1111を生成する。
【0062】 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が入る。
【0063】 命令I5の依存関係フィールドは、命令I4のものと同様に生成される。命令
I5およびI6は外部メモリ位置を変更するものであり、レジスタ230、23
2、234、236、240内の変更は行わない。
【0064】 この依存関係情報がスケジュール/発行ユニット156によって使用される場
合もあれば、スケジュール/発行ユニット156がそれ専用の依存関係情報を導
出するだけの場合もある。
【0065】 再実施時に一連の命令シーケンスまたは命令ストリングをトレース・バッファ
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アレイは、
再実施が始まる前に依存関係フィールドを作成したときにアセンブルすることが
できるだろう。
【0066】 c.出力レジスタ・ファイル210Aおよび入力レジスタ・ファイル208A トレース・バッファ114は、所与の推論エラーを検出するための検出回路を
含む。本発明の一実施形態により、各トレース・バッファは、関連スレッドのレ
ジスタ・コンテキストを保持する出力レジスタ・ファイルと、プログラム順序で
直前のスレッドのレジスタ・コンテキストを受け取るための入力レジスタ・ファ
イルとを有する。レジスタ・コンテキストは、論理レジスタの内容または状態で
ある。出力レジスタ・ファイル変更の内容はしばしば更新され、おそらく、レジ
スタ内で変更が行われるたびに更新される。入力レジスタ・ファイルの内容は、
後述する比較の後でのみ更新される。
【0067】 図18および図19は、出力レジスタ・ファイル208A(トレース・バッフ
ァ114A内)と入力レジスタ・ファイル208B(トレース・バッファ114
B内)の実施形態を示すが、他の実施形態も使用できる。出力レジスタ・ファイ
ル208Aおよび入力レジスタ・ファイル210Bは、値またはPRIDフィー
ルドと状況フィールドとを含む。状況フィールドは、有効な値または有効なPR
IDが値またはPRIDフィールド内に保持されているかどうかを示す。一実施
形態では、有効な値または有効なPRIDのいずれかが存在する。他の実施形態
では、どちらも存在しないことがあり、その場合は、入力レジスタ・ファイルに
依存する命令が一方が存在するまで待機することがある。
【0068】 ただし、上記の例の命令I0はレジスタR1およびR2を含み、そのいずれも
以前は命令I0を含むスレッド内の命令の宛先ではなかったことに留意されたい
。しかし、レジスタR1およびR2の値またはPRIDは入力レジスタ・ファイ
ル208Aから入手可能であり、命令I0の実行時に使用されるだろう。
【0069】 図20を参照すると、比較器280Bは、現行スレッドに関する入力レジスタ
・ファイル208B(トレース・バッファ114B内)の内容と、プログラム順
序で直前のスレッドに関する出力レジスタ・ファイル210A(トレース・バッ
ファ114A内)の内容を比較する。この比較は、直前のスレッドの実行終了時
または先行スレッドの最初の実行中に行うことができる。また、この比較は、先
行スレッドのリタイヤ終了時にも行われる。一実施形態では、この比較は、先行
スレッドのリタイヤ終了時のみに行われる。
【0070】 比較器280Bによる比較は、様々な事象によってトリガされる可能性がある
。この比較は推論エラーを検出するために行われる。入力レジスタ・ファイルと
出力レジスタ・ファイルとの間に違いがある場合、直前のスレッドの出力レジス
タのうちの1つまたは複数の値が変更されている。これに応答して、入力レジス
タ・ファイル208Bが更新され、再実施トリガ・ロジック284Bにより変更
されたレジスタ値とともに実施済み命令が再実施される。依存関係フィールドは
再実施トリガ・ロジック284Bによって使用できる。変更された値が結局正し
い値(すなわち、純粋に適正順序プロセッサ内で生成されたと思われるレジスタ
値)であるという保証はまったくない。その命令は、もう一度、おそらく数回再
実施する必要がある場合もある。
【0071】 一実施形態では、スレッド用の検出回路は、出力レジスタ・ファイルと、入力
レジスタ・ファイルと、比較器と、その入力レジスタ・ファイルを含むトレース
・バッファ内に保持された命令内の所与の推論エラーを検出するための関連制御
回路とを含む。他の実施形態では、検出回路は多少異なる回路を含む可能性があ
る。
【0072】 一例として、図21を参照すると、スレッドT2は現行スレッドであり、トレ
ース・バッファ114Bに関連付けられている。スレッドT1はスレッドT2の
直前のスレッドであり、トレース・バッファ114Aに関連付けられている。ス
レッドT1は、関数呼出しと、その関数と、関数呼出しからの復帰とを含む。ス
レッドT2の実行は関数呼出しの直後に始まる。関数呼出し時に存在した出力レ
ジスタ210Aの内容は、入力レジスタ・ファイル208B内にコピーされる。
スレッドT2の命令は、入力レジスタ・ファイル208B内のレジスタ・コンテ
キストに基づいて推論実行される。復帰命令の時点で入力レジスタ・ファイル2
08Bの内容は、比較器280Bによって出力レジスタ・ファイル210Aの内
容と比較される。違いがある場合、入力レジスタ・ファイル208Bは更新され
、スレッドT2内の実施済み命令が再実施される。この比較は、1つまたは複数
の中間時点で行うこともできる。これは、命令の再実施をより均一に分散するこ
とによりボトルネックを防止するのに役立つことがあるが、たとえば、出力レジ
スタ・ファイルの内容がその関数中に複数回変更された場合に追加の再実施を引
き起こす可能性がある。出力レジスタ・ファイルは絶えず変化しているので、出
力レジスタ・ファイル210Aの内容を受け取る中間バッファを備えていること
が望ましいであろう。その場合、比較は中間バッファと入力レジスタ・ファイル
208Bの内容同士で行われることがある。
【0073】 図8および図10に示すように、レジスタ・コンテキストは導体216により
出力レジスタ・ファイルと入力レジスタ・ファイルとの間で渡される。導体21
6は、直前のスレッド用のトレースを保持することができる各トレース・バッフ
ァの出力レジスタ・ファイルと各入力レジスタ・ファイルとを接続する。プログ
ラム順序がいつでも特定のトレース・バッファ順序に従うことが保証できる場合
、導体216のレイアウトはかなり単純なものになる可能性がある。出力レジス
タ・ファイルと入力レジスタ・ファイルは、図10および図11に示す制御回路
224Aによって制御することができる。
【0074】 出力レジスタ・ファイルと入力レジスタ・ファイルは値またはPRIDのいず
れかを供給することになるので、入力レジスタ・ファイル内の内容を受け取って
から、ソース・オペランドとして入力レジスタからのレジスタを使用して命令を
実行できるようになるまでに非常に小さい待ち時間が存在する可能性がある。値
が入手できない場合、パイプライン108内での実行のためにレジスタ・ファイ
ル152へのPRIDを使用することができる。
【0075】 正しいソース・オペランドが様々なスレッドのレジスタ・ファイルを通過する
ときに多くの命令が複数回再実施されることが予想される。しかし、多くのプロ
グラムでは、大量の命令をまったく再実施しないか、あるいは比較的少数回再実
施することが必要になり、その結果、単位時間あたりに正しく実行される命令が
大幅に増加し、1つのプログラムを実行するのに必要な全時間が減少することも
予想される。
【0076】 2.トレース・バッファ114’ 図11を参照すると、トレース・バッファ114A’はトレース・バッファ(
図10)と同様のものである。しかし、トレース・バッファ114A’内の依存
関係フィールドは、ある命令を再実施すべきであると決定された後で、依存関係
生成デコード回路218A内で生成される。これにより再実施時に何らかの初期
待ち時間が発生する可能性があるが、再実施用の命令の発行と依存関係の判定が
パイプライン方式で実行される場合、いったんプロセスが開始されると、追加の
待ち時間はほとんど発生しない可能性がある。
【0077】 一実施形態では、依存関係生成デコード回路218Aは依存関係情報用のフィ
ールドを1つだけ保持する。(図13では、4つのフィールドが存在する。)こ
の同一フィールドは再使用可能である。たとえば、レジスタR1に依存する命令
の再実施中に、このフィールドを使用してレジスタR1に依存する命令をリスト
することができるだろう。また、レジスタR2に依存する命令の再実施中に、同
じフィールドを使用してレジスタR2に依存する命令をリストすることができ、
以下同様である。依存関係生成デコード回路218Aは、唯一の修飾子フィール
ドと1つの変更レジスタとを含むことができるだろう。(図14では、4つ存在
する。)あるいは、依存関係生成デコード回路218Aは複数の依存関係フィー
ルドとレジスタとを含むことができるだろう。依存関係生成デコード回路218
Aは、一度に数個の命令のみの依存関係を判定することができる。
【0078】 データ・アレイ214Aは、(図10および図13のDADアレイ206Aと
同様に)各instrID項目ごとの値またはPRIDフィールドと、状況ビッ
ト・フィールドと、再実施計数値フィールドとを含む。あるいは、データ・アレ
イ214Aの内容を依存関係生成デコード回路218Aに入れて、データ・アレ
イ214Aを不要にすることができるだろう。データ・アレイ214Aと依存関
係生成デコード回路218Aを別々のものとして維持することが有利になりうる
理由は2つある。第1に、それらは異なる読取りポートを含む可能性があること
である。第2に、一実施形態では、依存関係生成デコード回路218Aは、命令
待ち行列アレイ202Aおよびデータ・アレイ214Aと同じ数の行を有してい
ないことである。換言すれば、一実施形態では、依存関係デコード回路218A
は、それが依存関係フィールドを再使用できるのと同様に、行を再使用する。当
然のことながら、多くの可能性が存在する。
【0079】 以下に詳述するように、MOB 178は、導体194を介してロード命令を
いつ再実施すべきかを通知する。依存関係フィールド(図13のR1用のものと
同様)を有するアレイを生成して、再実施すべきロード命令に依存する命令をリ
ストすることができる。しかし、ロード命令の場合、従属命令のリストは、レジ
スタの場合のようにトレース内の最初の命令ではなく、そのロード命令から始ま
る。ロード命令用の依存関係フィールドは、依存関係生成デコード回路218A
(図11)内にある可能性がある。(当然のことながら、他のトレース用のロー
ド命令は他のトレース・バッファから再実施されるだろう。)一実施形態では、
依存関係生成デコード回路218Aは、ロード命令とレジスタの両方のための依
存関係フィールドに使用する。この同一フィールドは両方に使用することができ
る。他の実施形態では、レジスタ用の依存関係フィールドはDADアレイ206
A内にあり、ロード用の依存関係フィールドは依存関係生成デコード回路218
A内にある。
【0080】 他の実施形態では、依存関係フィールドが不要になるように、ロード命令は完
全に再実施される(すなわち、ロード後のすべての命令が再実行される)。
【0081】 C.再実施シーケンス・アルゴリズム ソース・オペランド(またはその他の入力値)の予測が間違っていると再実施
トリガ・ロジック(再実施トリガ・ロジック284Bなど)が判定すると、その
ロジックは対応するトレース・バッファ(トレース・バッファ114Bなど)を
トリガして、予測が間違っているソース・オペランドに直接的または間接的に依
存する、パイプライン108で再実施すべき命令をディスパッチする。直接的ま
たは間接的に依存する命令は、トレース・バッファ内のDADアレイの依存関係
フィールドからまたは図13のように他のアレイにより識別することができる。
【0082】 識別された命令は、その命令がトレース・バッファ内に存在する順序(プログ
ラム順序である)で実行するようにトレース・バッファからディスパッチされる
。たとえば、instrID0項目内の命令は、instrID1項目内の命令
より前にまたはその命令と同時にディスパッチされる。しかし、命令は、不適正
順序プロセッサの場合のように、スケジュール/発行ユニット156の制御下で
不適正順序で実行することができる。トレース・バッファからディスパッチされ
る命令には制御ビットが付加され、(1)レジスタ・リネームを実行すべきか、
(2)リネーム/割振りユニット150内のリネーム別名(alias)テーブル・ ルックアップをバイパスし、代わりに対応するトレース・バッファからのPRI
Dを使用すべきか、(3)リネームを完全にバイパスし、それが命令内の定数オ
ペランドである場合と同様にDADアレイからの値を使用すべきかをリネーム/
割振りユニット150に示す。
【0083】 図8に関連して説明したように、「有効1」フィールドと「有効2」フィール
ドは、instrIDの対応するソース・オペランドがトレース・バッファ11
4A内のスレッド外部からの命令(たとえば、その宛先)によって生成されたと
きに第1の値(たとえば、論理0)にセットされ、instrID用のソース・
オペランドがスレッド内の命令によって生成されたときに第2の値(たとえば、
論理1)にセットされるビットである。トレース・バッファ114Aからディス
パッチされる再実施された命令は以下のように決定されたソース・オペランドを
持つであろう。
【0084】 (1)有効ビット1。命令待ち行列アレイ202A内の有効ビットが論理1に
セットされた場合、ソース・オペランドを使用して、DADアレイ206A内の
対応する値またはPRIDを読み取る。DADアレイ状況フィールドの値ビット
またはPRIDビットのいずれも有効ではない場合、ソース・オペランド・レジ
スタがまだリネームされていないことを意味する。この場合、導体120および
MUX 110により論理0値を有する値およびPRID状況ビットとともにそ
の命令がディスパッチされ、リネーム/割振りユニット150はそれが通常行う
ように別名テーブル・ルックアップ(レジスタ・リネーム)を実行することがで
きる。PRIDまたは値が有効である場合、それは導体120およびMUX 1
10により命令とともにリネーム/割振りユニット150に渡され、それに応答
してそのユニットはリネーム・ステージをバイパスする。
【0085】 (2)有効ビット0。ソース・オペランド用の有効ビットが論理0にセットさ
れた場合、入力オペランドはトレース外部から得られる。ソース・レジスタ名を
使用して入力レジスタ・ファイル208Aにアクセスする。入力レジスタ・ファ
イル208Aからの値またはPRIDは命令とともにリネーム/割振りユニット
150に渡され、それに応答してそのユニットはリネーム・ステージをバイパス
する。
【0086】 有効ビットが0であろうが1であろうが、各ディスパッチ済み命令ごとにDA
Dアレイ206A内の値およびPRID状況フィールド・ビットが論理0にリセ
ットされるか、または論理0のままになる。これにより2つの目的が達成される
。第1に、PRIDの前にディスパッチされたその後の従属命令がリネーム・ス
テージからその項目にコピーされ、リネーム別名テーブルからリネームできるこ
とが保証され、トレース・バッファ114Aからの古くなったPRIDの使用が
回避される。第2に、最後の実行インスタンスがライトバックされるまで命令が
リタイヤしないことが保証され、したがって、すべてのデータ予測間違いが訂正
された場合のみ命令がリタイヤ可能になる。
【0087】 D.第2レベルまたは最終リタイヤ すべての先行スレッド用のすべての命令がリタイヤし、ある命令に属すすべて
の再実施事象が処理されると、その命令はトレース・バッファ114から最終的
にリタイヤされる。言い換えると、ある命令が正しいソース・オペランドととも
に実行されたことを保証できる場合に、その命令は最終的にリタイヤされる。ス
レッドは適正順序でリタイヤされる。たとえば、スレッドX内の命令は、すべて
の先行スレッドがリタイヤされる(すなわち、すべての先行スレッドの命令がリ
タイヤされる)まで、リタイヤすることができない。あるスレッド内の命令は適
正順序でリタイヤされるが、リタイヤの準備ができているすべての命令は同時に
リタイヤすることができる。
【0088】 最終的なリタイヤは最終リタイヤ・ロジック134によって制御される。本発
明の一実施形態では、最終リタイヤは、(1)適正順序レジスタ・ファイルへの
結果のコミットメントと、(2)サービス割込み、例外、および/または分岐予
測間違いと、(3)トレース・バッファおよびMOB 178の資源項目の割振
り解除と、(4)リタイヤ済みとしてストアにマークを付け、それをメモリに対
して発行するようMOBに通知することを含む。項目の割振り解除は、ヘッド・
ポインタの移動を含むことができる。後述するように、MOB 178内のスト
ア命令は、関連データがデータ・キャッシュ176または他のメモリにコピーさ
れたことが確実になるまで割振り解除されない。MOB 178内のロード命令
およびストア命令の最終リタイヤに関する詳細については以下に説明する。
【0089】 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は様々な制御機能を実行する。
【0090】 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に含まれない可能性もある。
【0091】 instrIDフィールドは、命令待ち行列アレイ202A内のストア命令の
命令IDを保持する。スレッド・バッファIDは、ストア・バッファ184Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはストア命令の命令コードを保持する。ストア・アドレス・フィールドは
それに対してストア命令が向けられるアドレスを保持する。図示の実施形態では
、アドレスはAGU 172によって生成される。SBアドレス有効フィールド
は、ストア・アドレスが有効アドレスであるかどうかを示すビットを含む。デー
タ・フィールドは記憶すべきデータを保持する。データ有効フィールドは、その
データが有効であるかどうかを示すビットを含む。有効アドレスは有効データと
は異なる時点に到着する可能性があるので、アドレス有効ビットとデータ有効ビ
ットとして別々のビットを使用することができる。アドレスとデータはどちらも
ストア命令が実行される前に到着する。一実施形態では、データは命令の一部と
して含まれる。リタイヤ済みフィールドは、ストア命令がリタイヤすべきである
ことを最終リタイヤ・ロジック134が示すときにセットされ、メモリへのスト
アが完了したという確認をメモリから受け取ったときにリセットされるビットを
含む。ロードおよびストアのリタイヤについては後述する。再実施計数値フィー
ルドは再実施計数値数を含む(図13のDADアレイ206Aの再実施計数値フ
ィールドと同様のものである)。再実施計数値フィールドは必須のものではない
。一実施形態では、ストア命令は一度に1回しか再実施できないので、再実施計
数値フィールドはまったく存在しない。
【0092】 図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に含まれない可能性もある。
【0093】 instrIDフィールドは、命令待ち行列アレイ202A内のロード命令の
命令IDを保持する。スレッド・バッファIDは、ロード・バッファ182Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはロード命令の命令コードを保持する。ロード・アドレス・フィールドは
それからロード命令がロードされるアドレスを保持する。項目有効フィールドは
有効ロード命令によってその項目が占有されることを示すビットを含む。図示の
実施形態では、アドレスはAGU 172によってすでに生成されているので、
アドレス有効フィールドは含まれない。PRIDフィールドは、レジスタ・ファ
イル152内のロード命令の宛先を示す、リネーム/割振りユニット152から
のPRIDを保持する。SBヒット、SBID、スレッドID、再実施計数値フ
ィールド(1つ存在する場合)は、状況フィールドの一部と見ることができ、ス
トア命令の実行に関連して後述する。
【0094】 ストア命令およびロード命令がリネーム/割振りユニット150によって最初
に受け取られた時点で、ストア命令およびロード命令用の項目がストア・バッフ
ァ184およびロード・バッファ182内に割り振られ、ロードした値を受け取
るためのレジスタ用の項目はレジスタ・ファイル150およびROB 164内
に割り振られる。これらの項目は第1レベル・リタイヤの対象にはならないが、
トレース・バッファ114内の同様の項目は最終リタイヤまで割り振られたまま
になる。したがって、再実施時に項目の再割当ては行われない。ストア・バッフ
ァまたはロード・バッファがいっぱいである場合、それぞれIキャッシュ104
からのストア命令またはロード命令は、ある項目が解放されるまでリネーム/割
振りユニット150を通過することはない。しかし、トレース・バッファから再
実行中のロード命令またはストア命令はリネーム/割振りユニット150を通過
することになる。
【0095】 2.ロード・アドレスとストア・アドレスの比較 図5を参照すると、プログラム順序では、ロードMXがスレッドT2で実行さ
れる前にスレッドT1内のストアMXが実行される。しかし、同時実行であるの
で、時間順序では、ロードMXの前または後にストアMXを実行することができ
る。時間順序でロードMXの前にストアMXが実行される場合、ロードMXの推
論実行はストアMXに関して正しい順序で行われることになる。プログラム順序
でストアMXの前にあるすべての命令がリタイヤされた場合、ロードMXがメモ
リ位置MXから正しい値をロードすることが確実になる。この正しい値は、適正
順序プロセッサによってスレッドが実行された場合にロードされたと思われる値
である。プログラム順序でストアMXの前にあるすべての命令がリタイヤされた
わけではない場合、ストアMX用のデータが間違っている可能性が常にある。
【0096】 対照してみると、時間順序でロードMXの後にストアMXが実行される場合、
ロードMXの推論実行はストアMXに関して正しい順序で行われず、ロードMX
が正しい値をロードするという保証はまったくない。正しい値がたまたまメモリ
位置MX(またはストアMXが最終リタイヤされるまでストアMXを保持するス
トア・バッファ項目のデータ・フィールド)にあるのは単に偶然にすぎないだろ
う。実行の最終的な正確さを保証するため、MOB 178は、スレッド間のメ
モリ・データの一貫性を保証するための様々な機構を含む。
【0097】 a.ロード命令の実行 ロード命令が実行される前に、そのアドレスとストア命令のアドレスが比較さ
れ、ストア命令がある場合にどのストア命令が最接近先行一致ストア命令(CE
MSI)であるかを判定する。「一致」とは、ロード命令と同じアドレスを有す
ることを意味する。「先行」とは、CEMSIがプログラム順序でロード命令よ
り前であることを意味する。「最接近」とは、CEMSIと実行すべきロード命
令との間に他の一致ストア命令がまったくないことを意味する。先行一致ストア
命令が1つだけ存在する場合、それがCEMSIになる。
【0098】 CEMSIが存在する場合、ロード命令はCEMSIのデータ・フィールドか
らそのデータを読み取る。CEMSIが存在しない場合、ロード命令はデータ・
キャッシュ176、L2キャッシュ、メイン・メモリなどのメモリからそのデー
タを取る。ストア・バッファ184またはメモリからのデータはMUX192を
通過し、スレッドIDおよびinstrIDによって指定されたトレース・バッ
ファ114内の項目に書き込まれる。また、このデータは、PRIDによって指
定されたレジスタ・ファイル152内のレジスタにも書き込むことができる。ま
た、このデータは、キャッシュ規則(たとえば、ライトバック、ライトスルーな
ど)に応じてデータ・キャッシュ176に記憶することもできる。MUX 19
2は、データ・キャッシュ176、L2キャッシュ、メイン・メモリなどのメモ
リをバイパスすることができるので、バイパスになる。
【0099】 一実施形態では、実行すべきロードのアドレスとストア命令のアドレスとの比
較を行うために、各ストア・バッファ184の各項目に異なる比較器が関連付け
られている。図25の比較器320は一例であり、ストア・バッファ184A内
の項目SBID1のストア・アドレスとロード命令アドレスを受け取る。導体3
22ならびに他の比較器からの出力導体はMOB制御回路302に接続される。
【0100】 ロードSBIDは、実行すべきロード命令に関する最接近先行ストア命令(C
ESI)のLBIDを指し示す。CESIは、ロード命令と同じスレッドIDを
有するストア・バッファ内にある。CEMSIが存在する場合、それは、CES
Iになるかまたはプログラム順序でCESIより前になる。リネーム/割振りユ
ニット150は、プログラム内のストア命令およびロード命令の順序を追跡し、
SBID値およびLBID値を供給する。これらは、導体126を介してトレー
ス・バッファ114に書き込むことができる。一実施形態では、ロード命令に関
するCESIがまったく存在しない場合、その命令に関連するロードSBIDは
まったく存在しない。これは、トレース内の第1のメモリ命令がロードである場
合に発生する。有効ロードSBIDがまったく存在しないことを示すためにリネ
ーム/割振りユニット150が所与の信号を送信することを含み、このような状
況を処理するために様々な技法を使用することができる。後述するアレイ・ラッ
プアラウンド・ビットはこの目的に使用することができる。
【0101】 以下のプログラム順序のストア命令およびロード命令について検討する。 ストア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より新しい、す
なわち後のものである。
【0102】 ストア命令がある場合にどのストア命令がCEMSIであるかを制御回路30
2が判定するための様々な方法がある。この方法の例については図27に関連し
て説明するが、同図ではストア・バッファ184A、184B、184C、18
4DだけがMOB 178内のストア・バッファであり、スレッドA、B、C、
Dにそれぞれ関連付けられている。プログラム順序がスレッドA、スレッドB、
スレッドC、スレッドDであると想定する。この例では、実行すべきロード命令
はロード・バッファ182C内にある。CESIが存在し、ストア・バッファ1
84C内にある。
【0103】 導体342、344、346、348は様々な比較器の出力導体である。導体
362、364、366、368は、比較器が比較を実行できるようにする制御
信号を供給する。様々な実施形態では、制御回路302は、(1)各ストア・バ
ッファ内のすべての項目用の比較器をイネーブルにするか、(2)プログラム順
序でロード命令のスレッドIDと同じであるかまたはそれより前のスレッドID
を有するストア・バッファ内にある比較器のみをイネーブルにするか、あるいは
(3)プログラム順序でロード命令より前の項目に関連する比較器のみをイネー
ブルにする。
【0104】 一致判定ロジック356は、ストア命令がある場合にそのうちのどれがCEM
SIであるかを判定する。図27では、ストア・バッファ184Cの上部部分内
のストアMX命令がCEMSIになる。ストアMX命令がストア・バッファ18
4C内にない場合、CEMSIは、ストア・バッファ184B内のストアMX命
令になるだろう。比較器および一致判定ロジック356がCEMSIが存在する
かどうかを判定する間に、CEMSIが存在しない場合に用意すべきデータ・キ
ャッシュ176(および他のメモリ)内でルックアップが行われる可能性がある
。一致判定ロジック356はデータ経路制御ロジック390を含み、これはMU
X 192がメモリまたはストア・バッファからのデータを渡すかどうかを制御
するための信号を導体370で供給する。
【0105】 1つの手法では、MOB制御回路302によって2通りの優先順位判定が行わ
れる。一方は、ストア・バッファ内のストア命令の優先順位を判定するためのも
のである。もう一方は、ストア・バッファの優先順位を判定するためのものであ
る。これらの判定はいずれの順序で行うこともできる。桁上げ連鎖構造は、スト
ア・バッファ内の優先順位の判定の際に使用することができる。たとえば、一実
施形態では、ロード命令と同じスレッドIDを有するもの以外の各ストア・バッ
ファごとに、一致ストア命令がある場合にどの一致ストア命令がプログラム順序
で最も新しいかが判定される。ロード命令と同じスレッドIDを有するストア・
バッファの場合、一致命令がある場合にどの一致命令がプログラム順序でCES
Iに最も近い(等しいものを含む)かが判定される。次に、一致命令を有するス
トア・バッファのうち、どのストア・バッファがプログラム順序でロード命令の
スレッドIDに最も近いスレッドIDを有するかが判定される。
【0106】 ストア・バッファ184は、それぞれ先頭と末尾を有する循環アレイでよい。
最初は、SBID値が大きいストア命令の方が新しい。しかし、ストア命令が割
振り解除され、割り振られるにつれて、末尾は結局、折り返すことになり、先頭
は末尾より大きいSBID項目を指し示すことになる。一実施形態では、末尾が
最高値から最低SBID値へ移行すると、ラップアラウンド・ビットが切り替え
られ、最接近一致判定ロジック356に供給される。
【0107】 b.ストア命令の実行 ストア命令が実行されると、そのアドレスがロード命令のアドレスと比較され
、(同じスレッドまたはそれより新しいスレッドから)プログラム順序でそれよ
り後のロード命令がある場合に、どのロード命令がストア命令と同じアドレスを
有するかを判定する。ストアSBIDによって指し示された最接近後続ロード命
令(CLLI)は、考慮可能な最も早いロード命令を示す。
【0108】 一実施形態では、このような比較を行うために各ロード・バッファ182の各
項目ごとに異なる比較器が関連付けられている。比較器の1つは図26に示す比
較器324である。単に一例にすぎないが、比較器324はロード・バッファ1
82Aの項目LBID1に関連付けられている。比較器324は、一方の入力で
ストア命令のアドレスを受け取り、もう一方の入力でロード・バッファ182A
内の項目LBID1のロード・アドレス・フィールド内のアドレスを受け取る。
出力導体326上の信号は、両方のアドレスが同じであるかどうかを通知する。
導体326ならびに他の比較器からの出力導体はMOB制御回路302に接続さ
れている。比較器(比較器324など)は、後述するように、ストア命令の状況
ビットとロード・バッファ内の状況ビットとの比較も行うことができる。
【0109】 図28は図27と同様のものである。しかし、図28では、ロード・バッファ
182A〜182D内のロード命令アドレスが実行すべきスト命令のアドレスと
比較され、一致判定ロジック356は、ロード命令を再実施すべきかどうかを判
定する。一実施形態では、一致判定ロジックは、どのロード命令を再実施すべき
かをトレース・バッファに示すための信号を導体194上に供給する再実施トリ
ガ・ロジック394を含む。一実施形態では、一致判定ロジック356は、CL
LIから始めて、ストア命令とロード命令との一致について考慮する。様々なア
ルゴリズムを使用することができる。スレッド管理ロジック124は、プログラ
ム順序で実行中のストア命令のスレッドIDより後のスレッドIDを示す。一実
施形態では、すべての比較器が使用可能になっている。他の実施形態では、プロ
グラム順序でロード命令のスレッドIDと等しいかまたはそれより後のスレッド
IDを有するロード・バッファ内の導体だけが使用可能になる。さらに他の実施
形態では、CLLIおよびその後の命令に関連するロード・バッファ内の導体だ
けが使用可能になる。考慮すべきスレッドは、ロード・バッファ内のロード命令
がプログラム順序でストア命令より後になっているかに関する判定前、判定後、
あるいは判定中に決定することができる。
【0110】 一実施形態では、ロード命令の実行時に所与の推論エラーを検出するための検
出回路は、ロード・バッファに関連する比較器と、一致判定ロジック356の一
部分と、関連の制御回路とを含む。他の実施形態では、この検出回路は多少異な
る回路を含むことができるだろう。推論エラーを検出するための検出回路が実行
パイプライン内にあることは必須ではない。データ経路制御ロジックおよび再実
施トリガ・ロジックに関連して異なる一致判定ロジックを使用することができる
だろう。
【0111】 i.アドレス一致が存在するケース 再実施すべきかどうかを判定する際に、アドレス一致が存在する新しい命令に
関する状況フィールド(SBヒット、SBID、スレッドID、再実施計数値(
使用する場合))が考慮される。状況フィールドは、ロード命令がそのデータを
メモリ(たとえば、データ・キャッシュ176)から獲得したかまたはストア・
バッファのデータ・フィールドから獲得したかを示す。SBヒット・フィールド
は、たとえば、データがメモリから得られた場合に0を有し、データがストア・
バッファから得られた場合に1を有する。SBIDフィールドとスレッドIDフ
ィールドは、そこからデータが得られたストア命令のSBIDとスレッドIDを
保持する。ストア命令のスレッドIDは、必ずしも、アドレス一致が存在するロ
ード命令のスレッドIDではない。ロード命令のスレッドIDはロード・バッフ
ァ内では暗黙のものである。再実施計数値フィールド(使用する場合)は、どの
再実施が含まれるかを示す。(SBヒットが0である場合、SBIDフィールド
、スレッドIDフィールド、再実施計数値フィールド内のデータは無意味なもの
になる。)
【0112】 SBヒット=0(メモリからの前のデータ)である場合、再実施事象は導体1
94によりロード・バッファからロード命令のスレッドIDによって識別される
トレース・バッファに通知され、そのロード命令とすべての従属命令はそのトレ
ース・バッファから再実施される。instrIDとスレッドIDは、どの命令
が再実施されるかを示すために導体194を通して渡される。
【0113】 SBヒット=1(ストア・バッファからの前のデータ)である場合、SBID
フィールド、スレッドIDフィールド、再実施計数値フィールド(使用する場合
)の値は、再実施をトリガするかどうかを制御する。第1のケースでは、特定の
ロード命令に関する状況フィールドのスレッドIDはストア命令のスレッドID
と等しく、特定のロード命令の状況フィールド内のSBIDはストア命令のSB
IDと一致する。この第1のケースでは、ロード命令の再実施計数値が状況フィ
ールド内の再実施計数値より大きい場合にそのロード命令が再実施される。再実
施計数値が存在しない場合(ストア命令は一度に1回しか再実施できないため)
、ロード命令は再実施される。
【0114】 第2のケースでは、状況フィールド内のスレッドIDはストア命令のスレッド
IDと等しいが、状況フィールド内のSBIDはストア命令のSBIDと一致し
ない。この第2のケースでは、状況フィールド内のSBIDがストア命令のSB
IDより小さい場合にそのロード命令が再実施され、状況フィールド内のSBI
Dがストア命令のSBIDより大きい場合にそのロード命令は再実施されない。
【0115】 第3のケースでは、状況フィールドとストア命令のスレッドIDは一致しない
。これはまれなケースであると予想される。単純にするため、一実施形態では、
(プログラム順序に反する可能性がある場合でも)ロード命令が再実施される。
これは間違った再実施である可能性がある。ロード命令は、再実施されると、正
しいストア・データを受け取ることになる。他の手法を使用することもできるが
、このようなまれなケースに妥当なものよりかなり複雑なものである可能性があ
る。
【0116】 ii.アドレス一致が存在しないケース アドレスが一致しない場合、以下に示すまれなケースを除き、再実施は一切ト
リガされない。SBヒット=1である場合、状況フィールドのスレッドIDはス
トア命令のスレッドIDと一致し、状況フィールドのSBIDはストア命令のS
BIDと一致する。このケースでは、再実施が行われ、再実施したロード命令は
そのデータを新しい項目またはメモリから受け取る。
【0117】 c.リセット スレッドがプログラム順序になっていないと判定されると、そのスレッドはリ
セットされる。しかし、他のスレッドからのロードによって、そのスレッド内の
ストア命令に関連するデータ・フィールドからデータが取られている可能性があ
る。スレッド管理ロジック124は制御回路302に信号を送信する。一実施形
態では、スレッドがリセットされると、リセットされたスレッドのスレッドID
が(おそらくリセットされたスレッドに対応するロード・バッファは除く)すべ
てのロード・バッファ内のすべてのロードと比較される。状況フィールド内のス
レッドIDがリセットされたスレッドのスレッドIDと一致する場合、ロード命
令に関する再実施がトリガされる。ロード命令は適切なトレース・バッファから
再実施される。
【0118】 3.ストア命令の再実施 前述のように、ストア命令の実行に応答してロード命令が再実施される。一実
施形態では、レジスタ値が変更されたことを示すトレース・バッファ内のレジス
タ比較に応答してストア命令が再実施される。たとえば、図12および図13を
参照すると、トレース・バッファ114A内のinstrID4およびinst
rID5はストア命令であり、レジスタR1〜r4に依存するものとして示され
ている。
【0119】 4.複数ロード命令の再実施 ロード・バッファ内の複数のロード命令がストア命令との状況フィールド一致
を有することは可能である。複雑なロジックを回避するための1つの手法では、
制御回路302が複数のロード・アドレス一致が存在する場合を検出し、トレー
ス内で最も早いロード以降のすべての命令を再実行させる。
【0120】 5.ロード命令とストア命令の最終リタイヤ ロード命令またはストア命令を最終リタイヤすべき場合、最終リタイヤ・ロジ
ック134は、命令を最終リタイヤすべきであることを示す信号をトレース・バ
ッファ114およびMOB184に供給する。(instrIDおよびスレッド
IDによって識別される)トレース・バッファ内の項目の割振りが解除される。
ロード命令の場合には、(スレッドIDおよびLBIDによって識別される)ロ
ード・バッファ内の項目の割振りが解除される。ロード命令の場合には、最終リ
タイヤが完了する。ストア命令の場合には、割振り解除の前にデータ・フィール
ド内のデータをメモリにコミットしなければならない。ストア・バッファ内の項
目の割振り解除と、それ故の最終リタイヤは、そのストアが完了したという確認
を受け取るまで行われない。あるいは、確認前にその項目の最終リタイヤを行う
ことができるが、確認を受け取るまでその項目の再割振りを行うことができない
。導体200上の信号は、ストアの最終リタイヤが完了し、次のスレッドを開始
することができる時期をスレッド管理ロジック124に示すことができる。
【0121】 SBリタイヤ済みは、命令がリタイヤされたことを示す。命令をリタイヤすべ
きであることを最終リタイヤ・ロジック134が示した時点で、SBリタイヤ済
みフィールド内のビットがアサートされる。SBリタイヤ済みフィールドがアサ
ートされると、関連命令が適正順序でメモリに書き込まれる。命令がメモリに書
き込まれたことをMOB 184Aが知ると直ちにSBリタイヤ済みフィールド
がアサート解除され、その命令の割振りが解除される。
【0122】 ロード・バッファ182Aおよびストア・バッファ184Aは、先頭と末尾を
備えた待ち行列にすることができる。命令の割振りが解除されると、先頭は移動
する。ロード・バッファ184Aおよびトレース・バッファ114では、リタイ
ヤと割振り解除が同時に行われる場合もある。最終リタイヤ・ロジック134は
、導体136および140を介して信号を供給する。デマルチプレクサ188は
、ロード・バッファ182またはストア・バッファ184のうちの一方がリタイ
ヤ信号を受け取ることになることを選択する。デマルチプレクサ188は任意選
択のものであり、ロード・バッファ182およびストア・バッファ184内のイ
ネーブル・ポートで置き換えることができるだろう。
【0123】 F.スレッド管理ロジックおよび最終リタイヤ・ロジックに関する追加情報 一実施形態では、スレッド管理ロジック124は、スレッド順序を追跡するた
めにツリー構造を使用する。このツリー構造では、プログラム順序(リタイヤ順
序でもある)は上から下に流れ、右側のノードはプログラム順序で左側のノード
より早い。ルートはプログラム順序で最初のものである。ツリーとは抽象概念で
あり、ツリー構造はそのツリーを実施する回路である。
【0124】 スレッドは、逆方向分岐または関数呼出し後の命令から始まる。すなわち、(
図4および図5のスレッドT2が示すように)逆方向分岐が行われなかったかま
たは関数が呼び出されなかったと想定して、スレッドは次の命令から始まる。こ
のように行う場合、スレッド(ノード)の見地によると、そのスレッドの子ノー
ドのプログラム順序は、スレッドが開始(作成)された順序の逆になる。たとえ
ば、図6では、時間順序ではスレッドT2の実行がスレッドT3の実行前に始ま
るが、プログラム順序ではスレッドT3がスレッドT2の前に行われる。
【0125】 一実施形態では、3通りの事象によりスレッドがツリーから除去される場合が
ある。すなわち、(1)ツリーのルートにあるスレッドは、そのスレッドがリタ
イヤされると除去される。ルートにあるスレッドがリタイヤされると、プログラ
ム順序で次のスレッド(ノード)がルートになり、それに応じてノードの再割当
てが行われる。(2)プログラム順序で最後のスレッドはツリーから除去され、
プログラム順序でより上位にあり、ツリーに追加すべきスレッドのためのスペー
スができる。これに関して、ツリーは後入れ先出し法(LIFO)スタックとし
て動作する。(3)その親スレッドのプログラム・カウンタが開始計数値から終
了計数値までの範囲の外にあることが発見されると、スレッドはリセットされ、
それによりツリーから除去することができる。逆方向分岐で子スレッド(たとえ
ば、図6および図29のスレッドT4)が作成される場合、開始計数値は逆方向
分岐のターゲットになり、終了計数値は逆方向分岐命令におけるプログラム・カ
ウンタ値になる。関数呼出し後に開始されたスレッドもリセットすることができ
る。というのは、このようなことが起こるのは極めてまれなことであるが、関数
からの復帰がまったく存在しないからである。関数からの復帰がまったく存在し
ない可能性を処理するための手法の1つは、この可能性を無視し、事象(2)の
ようにそれがプログラム順序の最下位になると結局、システムにツリーからスレ
ッドを除去させることである。スレッドがツリーから除去されると、そのスレッ
ドに割り振られた資源(トレース・バッファ、ストア・バッファ、ロード・バッ
ファなど)の割振りが解除される。
【0126】 事象(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になる。
【0127】 事象(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の関数はツリーのノードで実行することができる。
【0128】 子スレッドのスレッドIDは、ツリー構造内のプログラム順序に応じて適切に
位置決めされる。(ただし、スレッド管理ロジック124によって決定されたプ
ログラム順序は変わらない可能性がある。)あるスレッドは、プログラム順序で
ツリー内の次のスレッドを結合するかまたはそのプログラム計数値と一致する場
合に終了する。スレッドの子が1つだけである場合、それはプログラム順序で次
のスレッドになる。たとえば、図33では、スレッドT2はプログラム順序でツ
リー内の次のスレッドになる。
【0129】 最終リタイヤ・ロジック134は、アレイ198をアセンブルするためにツリ
ー構造からまたはツリー構造の回路から直接に、情報を獲得する。ツリー構造と
、スレッド管理ロジック124の他のロジックおよび最終リタイヤ・ロジック1
34のロジックとの間にデコード回路が存在する可能性がある。アレイ198は
必須ではない場合がある。
【0130】 要約すると、このツリー構造は、少なくとも以下に示す目的のために情報を提
供する。すなわち、(1)ツリーはリタイヤ順序を指定し、(2)ツリーは前述
のようにたとえばMOB 178が使用するプログラム順序を指定し、(3)ツ
リーは他のスレッドの開始命令を示すことによりスレッドの終了点を指定し、(
4)ツリーはどの資源が使用可能であり、どの資源が割振り解除されているかを
示すことによりスレッド資源割振りの際に使用する。
【0131】 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は様々
な推論ならびにその際のエラーからの回復に関連して使用することができる。ト
レース・バッファにより、最終リタイヤ前に可能な再実施のために、多数の命令
をパイプライン外部に保持することができる。
【0132】 プロセッサ50は非マルチスレッド・プログラムに関連して使用することがで
きるだろう。その場合、スレッド管理ロジック124は必ず同じスレッドIDを
プログラム順序で維持することができるだろう。あるいは、スレッド管理ロジッ
ク124は使用不能にすることができるだろう。非マルチスレッドの場合、唯一
のトレース・バッファ114と唯一のMOB 178が使用される。あるいは、
複数のトレース・バッファを結合してより大きいトレース・バッファにすること
ができ、複数のMOBを結合してより大きいMOBにすることができるだろう。
【0133】 H.追加情報および実施形態 図37を参照すると、プロセッサ400は、マルチパイプライン・ユニット4
02を含むマルチプロセッサ(MP)チップである。マルチパイプライン・ユニ
ット400は、パイプライン全体(たとえば、各パイプラインごとに別々のリネ
ーム/割振りユニット)がマルチパイプライン・ユニット402の各パイプライ
ン0、1、・・・、Wとともに含まれるという点で図2の共用資源パイプライン
108とは異なる。(WはXと等しいかあるいはそれより大きいかまたは小さい
ものにすることができる。)そうではない場合、プロセッサ400はプロセッサ
50と本質的に同じであるかまたはプロセッサ50とは非常に異なる可能性があ
る。他のプロセッサは、マルチパイプライン・ユニット402の何らかの特徴と
、パイプライン108の何らかの特徴を含むことができる。
【0134】 ここで言及する各プロセッサは、様々なコンピュータ・システムの一部に含め
ることができる。図38を参照すると、単に一例にすぎないが、プロセッサ50
はコンピュータ・システム430の一部にすることができる。システム430は
第2のプロセッサ434も含むことができる。オンチップの第2レベル(L2)
キャッシュはプロセッサ50内に含まれていてもよい。プロセッサ50は、プロ
セッサ・バス442を介してメモリ・コントローラ440とやりとりすることが
できる。メモリ・コントローラ440はバス452および454を介してメイン
・メモリ446および周辺装置448とやりとりすることができる。
【0135】 パイプライン108または308(図2および図3)と同様のパイプラインは
、レジスタ・リネームを使用しないプロセッサで使用することができるだろう。
このような場合、レジスタ・リネームに含まれる構成要素(たとえば、リネーム
/割振りユニット150)は、リネーム関連特徴を除去するために変更すること
ができるだろう。
【0136】 ここに記載し例示した回路および詳細は例示的なものにすぎない。その代わり
に様々な他の回路および詳細を使用することができるだろう。さらに、サイズ、
待ち時間などの点で、様々な設計上の兼ね合いが存在する可能性がある。たとえ
ば、(たとえば、予約ステーション、レジスタ・ファイル、ROB内など)実行
経路内のバッファが大きすぎる場合、最大動作クロック周波数は低減しなければ
ならない可能性がある。ここに例示する構成要素は、様々な技法に応じて設計し
構築することができる。
【0137】 例示した2通りの構造の間に中間構造(バッファなど)または信号が存在する
可能性がある。導体によっては、例示したように連続的なものではなく、むしろ
中間構造によって分割することができる。図中のボックスの枠は例示のためのも
のである。実際の装置はこのように定義された境界を備えた構成要素を含まなけ
ればならないわけではないだろう。例示した構成要素の相対サイズは実際の相対
サイズを示唆するためのものではない。矢印は、所与の実施形態における所与の
データ・フローを示すが、データ要求など、すべての信号を示すわけではない。
論理ハイ信号が前述されている場合には論理ロー信号によって置き換えることが
でき、その逆も可能である。
【0138】 プロセッサ内に示した構成要素はすべて同じプロセッサ・チップ上に置くこと
ができる。あるいは、たとえば、トレース・バッファは実行パイプラインとは異
なるチップ上に置くことができるだろう。
【0139】 「接続」「結合」という用語、ならびに関連用語は直接接続または直接結合に
限定されないが、間接接続または間接結合を含むことができる。「応答」という
用語および関連用語は、1つの信号または事象がある程度他の信号または事象の
影響を受けるが、必ずしも完全または直接的に影響を受けるわけではないことを
意味する。ある構成要素を含む「可能性がある」、含む「ことができるだろう」
、あるいは含む「ことが好ましい」と本明細書に記載されている場合、その特定
の構成要素を含むことが必須であるわけではない。
【0140】 MOBは、予測間違いを検出するためにアドレスの突合せではなくデータの突
合せを使用できるだろう。
【0141】 本開示の恩恵を受ける当業者は、本発明の範囲内で上記の説明および添付図面
から他の多くの変形形態が可能であることが分かるだろう。したがって、本発明
の範囲を定義するものは、それに対する補正を含む、特許請求の範囲である。
【図面の簡単な説明】
【図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 (15)

    【特許請求の範囲】
  1. 【請求項1】 ロード・バッファとストア・バッファとを含むメモリ・オー
    ダ・バッファ(MOB)を含み、前記MOBは異なるスレッド内のロード命令と
    ストア命令とのデータの一貫性を維持するようにロード命令とストア命令を順序
    付け、前記スレッドのうちの少なくとも1つが前記スレッドのうちの少なくとも
    1つの他のスレッドに依存するプロセッサ。
  2. 【請求項2】 前記スレッドの動的作成を制御するスレッド管理ロジックを
    さらに含む請求項1に記載のプロセッサ。
  3. 【請求項3】 プログラム順序およびリタイヤ順序の表示を行うスレッド管
    理ロジックをさらに含む請求項1に記載のプロセッサ。
  4. 【請求項4】 複数スレッドが最終リタイヤ時にリタイヤ順序で前記MOB
    からリタイヤされる請求項3に記載のプロセッサ。
  5. 【請求項5】 すべての命令が推論エラーなしで実行されたかまたはリセッ
    トしたスレッドの一部であったことが保証された後で、複数スレッドが最終リタ
    イヤ時にリタイヤ順序で前記MOBからリタイヤされる請求項3に記載のプロセ
    ッサ。
  6. 【請求項6】 前記ストア・バッファがメモリに記憶すべきデータを保持す
    るフィールドを含む請求項1に記載のプロセッサ。
  7. 【請求項7】 ロード・バッファが、ロード命令が前にメモリからデータを
    受け取ったかまたは前記ストア・バッファ内のデータを受け取ったことに関する
    表示を含む状況フィールドを含む請求項1に記載のプロセッサ。
  8. 【請求項8】 ロード・バッファが、そこから前記ロード命令が前にデータ
    を受け取ったストア・バッファ項目のストア・バッファ識別番号(SBID)に
    関する表示を含む状況フィールドを含む請求項1に記載のプロセッサ。
  9. 【請求項9】 ロード・バッファが、そこから前記ロード命令が以前データ
    を受け取ったストア命令のスレッド識別番号に関する表示を含む状況フィールド
    を含む請求項1に記載のプロセッサ。
  10. 【請求項10】 複数スレッドの少なくとも一部分を同時に実行する実行パ
    イプラインであって、前記スレッドのうちの少なくとも1つが前記スレッドのう
    ちの少なくとも1つの他のスレッドに依存し、前記実行パイプラインがロード命
    令およびストア命令を順序付けるメモリ・オーダ・バッファを含む実行パイプラ
    インと、 ロード・バッファ内のロード命令に関連する推論エラーを検出する検出回路と を含むプロセッサ。
  11. 【請求項11】 再実施トリガ回路をさらに含む請求項10に記載のプロセ
    ッサ。
  12. 【請求項12】 前記実行パイプラインの外にあって、最終リタイヤまで前
    記ロード命令およびストア命令を保持するトレース・バッファをさらに含む請求
    項10に記載のプロセッサ。
  13. 【請求項13】 前記検出回路が前記実行パイプラインに含まれる請求項1
    0に記載のプロセッサ。
  14. 【請求項14】 複数スレッドのロード命令を保持するロード・バッファと
    、 前記スレッドのストア命令を保持するストア・バッファと、 実行すべき前記ロード命令のうちの1つの命令のアドレスと前記ストア・バッ
    ファ内の前記ストア命令のうちの少なくとも1つの命令のアドレスとを比較する
    比較回路と、 前記ロード命令がメモリからデータを読み取るかまたは前記ストア・バッファ
    の1つからデータを読み取るかを判定するデータ経路制御ロジックと を含むメモリ・オーダ・バッファを含むプロセッサ。
  15. 【請求項15】 複数スレッドのロード命令を保持するロード・バッファと
    、 前記スレッドのストア命令を保持するストア・バッファと、 実行すべき前記ストア命令のうちの1つの命令のアドレスおよび状況ビットと
    前記ロード命令のうちの少なくとも1つの命令のアドレスおよび状況ビットとを
    比較する比較回路と、 前記比較に基づいて前記ロード命令のうちの1つまたは複数の命令を再実施す
    べきかどうかを判定する検出ロジックと を含むメモリ・オーダ・バッファを含むプロセッサ。
JP2000539422A 1997-12-16 1998-12-11 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム Expired - Fee Related JP3957456B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/991,734 US6463522B1 (en) 1997-12-16 1997-12-16 Memory system for ordering load and store instructions in a processor that performs multithread execution
US08/991,734 1997-12-16
PCT/US1998/026409 WO1999031594A1 (en) 1997-12-16 1998-12-11 System for ordering load and store instructions that performs out-of-order multithread execution

Publications (3)

Publication Number Publication Date
JP2002508568A true JP2002508568A (ja) 2002-03-19
JP2002508568A5 JP2002508568A5 (ja) 2006-02-09
JP3957456B2 JP3957456B2 (ja) 2007-08-15

Family

ID=25537506

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000539422A Expired - Fee Related JP3957456B2 (ja) 1997-12-16 1998-12-11 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム

Country Status (9)

Country Link
US (2) US6463522B1 (ja)
EP (1) EP1040423A4 (ja)
JP (1) JP3957456B2 (ja)
KR (1) KR100388952B1 (ja)
CN (1) CN100392622C (ja)
AU (1) AU1911199A (ja)
BR (1) BR9813653A (ja)
TW (1) TW425528B (ja)
WO (1) WO1999031594A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011175669A (ja) * 2004-06-30 2011-09-08 Intel Corp 競合しないロック命令の投機実行のための方法及び装置
JP2022526057A (ja) * 2019-04-03 2022-05-23 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6665792B1 (en) * 1996-11-13 2003-12-16 Intel Corporation Interface to a memory system for a processor having a replay system
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
US6430649B1 (en) 1999-06-07 2002-08-06 Sun Microsystems, Inc. Method and apparatus for enforcing memory reference dependencies through a load store unit
US6591342B1 (en) 1999-12-14 2003-07-08 Intel Corporation Memory disambiguation for large instruction windows
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6708269B1 (en) * 1999-12-30 2004-03-16 Intel Corporation Method and apparatus for multi-mode fencing in a microprocessor system
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
US6915395B1 (en) 2000-05-03 2005-07-05 Sun Microsystems, Inc. Active address content addressable memory
US6950927B1 (en) * 2001-04-13 2005-09-27 The United States Of America As Represented By The Secretary Of The Navy System and method for instruction-level parallelism in a programmable multiple network processor environment
US7752423B2 (en) * 2001-06-28 2010-07-06 Intel Corporation Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
US7159216B2 (en) * 2001-11-07 2007-01-02 International Business Machines Corporation Method and apparatus for dispatching tasks in a non-uniform memory access (NUMA) computer system
US20030126409A1 (en) * 2001-12-28 2003-07-03 Toni Juan Store sets poison propagation
US7529912B2 (en) 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US7181596B2 (en) * 2002-02-12 2007-02-20 Ip-First, Llc Apparatus and method for extending a microprocessor instruction set
US7328328B2 (en) 2002-02-19 2008-02-05 Ip-First, Llc Non-temporal memory reference control mechanism
US7546446B2 (en) 2002-03-08 2009-06-09 Ip-First, Llc Selective interrupt suppression
US7395412B2 (en) 2002-03-08 2008-07-01 Ip-First, Llc Apparatus and method for extending data modes in a microprocessor
US7373483B2 (en) 2002-04-02 2008-05-13 Ip-First, Llc Mechanism for extending the number of registers in a microprocessor
US7380103B2 (en) 2002-04-02 2008-05-27 Ip-First, Llc Apparatus and method for selective control of results write back
US7302551B2 (en) 2002-04-02 2007-11-27 Ip-First, Llc Suppression of store checking
US7380109B2 (en) 2002-04-15 2008-05-27 Ip-First, Llc Apparatus and method for providing extended address modes in an existing instruction set for a microprocessor
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US20050060517A1 (en) * 2003-09-12 2005-03-17 Morrow Michael W. Switching processor threads during long latencies
US7263599B2 (en) * 2004-02-06 2007-08-28 Infineon Technologies Thread ID in a multithreaded processor
US7360203B2 (en) 2004-02-06 2008-04-15 Infineon Technologies North America Corp. Program tracing in a multithreaded processor
US20060026371A1 (en) * 2004-07-30 2006-02-02 Chrysos George Z Method and apparatus for implementing memory order models with order vectors
US7296120B2 (en) * 2004-11-18 2007-11-13 International Business Machines Corporation Mechanism that provides efficient multi-word load atomicity
US20060129764A1 (en) * 2004-12-09 2006-06-15 International Business Machines Corporation Methods and apparatus for storing a command
US7627804B2 (en) * 2006-06-30 2009-12-01 Intel Corporation Memory device with speculative commands to memory core
US8046656B2 (en) * 2006-10-31 2011-10-25 Hewlett-Packard Development Company, L.P. Rendering and correcting data
US7590826B2 (en) * 2006-11-06 2009-09-15 Arm Limited Speculative data value usage
US7917698B2 (en) * 2007-10-26 2011-03-29 Oracle America, Inc. Method and apparatus for tracking load-marks and store-marks on cache lines
US7882325B2 (en) * 2007-12-21 2011-02-01 Intel Corporation Method and apparatus for a double width load using a single width load port
US8122308B2 (en) * 2008-06-25 2012-02-21 Intel Corporation Securely clearing an error indicator
US8392891B2 (en) * 2008-06-26 2013-03-05 Microsoft Corporation Technique for finding relaxed memory model vulnerabilities
US8464029B2 (en) * 2009-05-29 2013-06-11 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
CN101847094A (zh) * 2009-05-29 2010-09-29 威盛电子股份有限公司 非循序执行的微处理器及其操作方法
US20110004718A1 (en) 2009-07-02 2011-01-06 Ross John Stenfort System, method, and computer program product for ordering a plurality of write commands associated with a storage device
US8332618B2 (en) * 2009-08-07 2012-12-11 Via Technologies, Inc. Out-of-order X86 microprocessor with fast shift-by-zero handling
KR101640848B1 (ko) * 2009-12-28 2016-07-29 삼성전자주식회사 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
CN101799771B (zh) * 2010-04-09 2012-12-12 上海华为技术有限公司 一种线程切换的矢量现场切换方法和装置
KR20120017294A (ko) 2010-08-18 2012-02-28 삼성전자주식회사 어플리케이션을 효율적으로 처리하는 스케쥴링 시스템 및 스케쥴링 방법
KR101818967B1 (ko) * 2012-06-15 2018-01-16 인텔 코포레이션 명확화 없는 비순차 load store 큐
CN104583957B (zh) * 2012-06-15 2018-08-10 英特尔公司 具有无消歧乱序加载存储队列的重新排序的推测性指令序列
US9535695B2 (en) * 2013-01-25 2017-01-03 Apple Inc. Completing load and store instructions in a weakly-ordered memory model
US10467010B2 (en) * 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
US9830224B2 (en) * 2013-03-15 2017-11-28 Nvidia Corporation Selective fault stalling for a GPU memory pipeline in a unified virtual memory system
US10725889B2 (en) * 2013-08-28 2020-07-28 Micro Focus Llc Testing multi-threaded applications
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US10180841B2 (en) 2014-12-22 2019-01-15 Centipede Semi Ltd. Early termination of segment monitoring in run-time code parallelization
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US9208066B1 (en) 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US20170010972A1 (en) * 2015-07-09 2017-01-12 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions
US10185561B2 (en) 2015-07-09 2019-01-22 Centipede Semi Ltd. Processor with efficient memory access
US20180157492A1 (en) * 2016-12-01 2018-06-07 Centipede Semi Ltd. Memory access control for parallelized processing
GB2572968B (en) * 2018-04-17 2020-09-02 Advanced Risc Mach Ltd Tracking speculative data caching
US11507379B2 (en) 2019-05-31 2022-11-22 Marvell Asia Pte, Ltd. Managing load and store instructions for memory barrier handling
CN110825343B (zh) * 2019-11-05 2021-12-03 中电科思仪科技股份有限公司 一种快速数据筛选方法及系统
CN111857825A (zh) * 2020-07-20 2020-10-30 北京百度网讯科技有限公司 指令执行方法、装置、电子设备和计算机可读存储介质
CN112415301B (zh) * 2020-10-27 2022-07-15 成都飞机工业(集团)有限责任公司 一种电子产品测试过程结构化描述方法
CN114489792B (zh) * 2021-03-25 2022-10-11 沐曦集成电路(上海)有限公司 处理器装置及其指令执行方法

Family Cites Families (39)

* 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
US5748937A (en) 1993-08-26 1998-05-05 Intel Corporation Computer system that maintains processor ordering consistency by snooping an external bus for conflicts during out of order execution of memory access instructions
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
US5680565A (en) 1993-12-30 1997-10-21 Intel Corporation Method and apparatus for performing page table walks in a microprocessor capable of processing speculative instructions
US5664137A (en) 1994-01-04 1997-09-02 Intel Corporation Method and apparatus for executing and dispatching store operations in a computer system
US5694574A (en) * 1994-01-04 1997-12-02 Intel Corporation Method and apparatus for performing load operations in a computer system
US5724536A (en) 1994-01-04 1998-03-03 Intel Corporation Method and apparatus for blocking execution of and storing load operations during their execution
US5826109A (en) 1994-01-04 1998-10-20 Intel Corporation Method and apparatus for performing multiple load operations to the same memory location in a computer system
US5420991A (en) 1994-01-04 1995-05-30 Intel Corporation Apparatus and method for maintaining processing consistency in a computer system having multiple processors
US5564028A (en) * 1994-01-11 1996-10-08 Texas Instruments Incorporated Pipelined data processing including instruction trace
US5671444A (en) 1994-02-28 1997-09-23 Intel Corporaiton Methods and apparatus for caching data in a non-blocking manner using a plurality of fill buffers
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
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
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
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
US5691639A (en) * 1996-08-28 1997-11-25 Honeywell Inc. Proximity sensor circuit with frequency changing capability
JP3139392B2 (ja) * 1996-10-11 2001-02-26 日本電気株式会社 並列処理システム
US5913925A (en) * 1996-12-16 1999-06-22 International Business Machines Corporation Method and system for constructing a program including out-of-order threads and processor and method for executing threads out-of-order
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
US5887166A (en) * 1996-12-16 1999-03-23 International Business Machines Corporation Method and system for constructing a program including a navigation instruction
US5999727A (en) * 1997-06-25 1999-12-07 Sun Microsystems, Inc. Method for restraining over-eager load boosting using a dependency color indicator stored in cache with both the load and store instructions
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
US6240509B1 (en) * 1997-12-16 2001-05-29 Intel Corporation Out-of-pipeline trace buffer for holding instructions that may be re-executed following misspeculation
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
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011175669A (ja) * 2004-06-30 2011-09-08 Intel Corp 競合しないロック命令の投機実行のための方法及び装置
JP2022526057A (ja) * 2019-04-03 2022-05-23 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ
JP7403541B2 (ja) 2019-04-03 2023-12-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド メモリ順序付け違反チェックバッファの排出遅延を許容するための投機的命令ウェイクアップ

Also Published As

Publication number Publication date
BR9813653A (pt) 2000-12-12
KR20010024751A (ko) 2001-03-26
TW425528B (en) 2001-03-11
AU1911199A (en) 1999-07-05
CN100392622C (zh) 2008-06-04
US20020194457A1 (en) 2002-12-19
EP1040423A1 (en) 2000-10-04
US6463522B1 (en) 2002-10-08
EP1040423A4 (en) 2002-07-17
JP3957456B2 (ja) 2007-08-15
KR100388952B1 (ko) 2003-06-25
CN1285064A (zh) 2001-02-21
WO1999031594A1 (en) 1999-06-24

Similar Documents

Publication Publication Date Title
JP3957456B2 (ja) 不適正順序マルチスレッド実行を実行するロード命令およびストア命令を順序付けるシステム
JP3957455B2 (ja) 実行パイプラインの外部に複数のプログラム・カウンタとトレース・バッファを有するプロセッサ
JP3971893B2 (ja) プロセッサ
US6772324B2 (en) Processor having multiple program counters and trace buffers outside an execution pipeline
JP3014773B2 (ja) プロセサアーキテクチャ
JP5415069B2 (ja) スレッドレベルの投機実行を拡張するためのプリミティブ
JP3093639B2 (ja) プロセッサ内の資源割当て追跡方法及びそのシステム
US20170060579A1 (en) Device and processing architecture for instruction memory efficiency
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
WO2005111794A1 (en) System and method for validating a memory file that links speculative results of load operations to register values
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
US9495225B2 (en) Parallel execution mechanism and operating method thereof
US10545765B2 (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
US20240311156A1 (en) Microprocessor with apparatus and method for replaying load instructions
US20230315474A1 (en) Microprocessor with apparatus and method for replaying instructions
Song Reducing register pressure through LAER algorithm

Legal Events

Date Code Title Description
A521 Request for written amendment filed

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 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061031

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070508

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20120518

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20130518

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees