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
Links
- 239000000872 buffer Substances 0.000 claims abstract description 259
- 230000015654 memory Effects 0.000 claims abstract description 50
- 238000001514 detection method Methods 0.000 claims abstract description 11
- 238000000034 method Methods 0.000 claims description 21
- 230000001419 dependent effect Effects 0.000 abstract description 13
- 239000004020 conductor Substances 0.000 description 56
- 238000007726 management method Methods 0.000 description 28
- 230000006870 function Effects 0.000 description 20
- 230000008859 change Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 13
- 230000007246 mechanism Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000004044 response Effects 0.000 description 5
- 238000012790 confirmation Methods 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000010297 mechanical methods and process Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction 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
Description
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)は、実質的に共通の明細を有す
る。
数のトレース・バッファを有するプロセッサに関する。
フォーマンスを強化するために分岐予測および不適正順序実行(out of order e
xecution)などの技法を実行する。不適正順序実行パイプラインを有するプロセ
ッサは、所与の命令がフェッチされデコードされた順序とは異なる順序でその命
令を実行する。命令は、それに関する依存関係が存在しない命令に対して不適正
順序で実行することができる。不適正順序実行では、単にプログラム命令順序の
ために実行ユニットがアイドル状態にならないようにすることにより、プロセッ
サのパフォーマンスが向上する。命令結果は、実行後にリオーダされる。
限することによって簡略化される。その場合、プロセッサは、データがレジスタ
によりある命令から後続命令にどのように流れるかを識別することができる。プ
ログラムの正確さを保証するため、レジスタはリネームされ、命令はその入力オ
ペランドが生成されるまで予約ステーションで待機し、生成された時点で実行の
ために適切な機能ユニットに発行される。レジスタ・リネーマ、予約ステーショ
ン、および関連機構は、従属命令が依存している命令より先に実行されないよう
に、依存関係を有する複数の命令をまとめてリンクする。したがって、このよう
なプロセッサは、適正順序のフェッチおよびデコードによって制限される。
プロセッサは、より高レベルのキャッシュまたはメモリから命令ブロックがフェ
ッチされるまで、または予測が間違っている分岐が解決されるまで、待機しなけ
ればならず、間違った経路の実行はリセットされる。このような挙動の結果とし
て、命令キャッシュのミスおよび予測が間違っている分岐の前後の独立命令は並
列実行することができないが、そのようにすることは正しいことである可能性が
ある。
てきた。プロセッサが推論エラーから回復できるようにする改良された機構をプ
ロセッサ内に設ける必要がある。
とを含むメモリ・オーダ・バッファ(MOB)を含み、MOBは異なるスレッド
内のロード命令とストア命令とのデータの一貫性を維持するようにロード命令と
ストア命令を順序付ける。その際、そのスレッドのうちの少なくとも1つがその
スレッドのうちの少なくとも1つの他のスレッドに依存する。本発明の他の実施
態様では、プロセッサは複数スレッドの少なくとも一部分を同時に実行する実行
パイプラインを含み、そのスレッドのうちの少なくとも1つがそのスレッドのう
ちの少なくとも1つの他のスレッドに依存し、その実行パイプラインがロード命
令およびストア命令を順序付けるメモリ・オーダ・バッファを含む。また、プロ
セッサはロード・バッファ内のロード命令に関連する推論エラーを検出する検出
回路も含む。
より完全に理解されるだろうが、添付図面は、記載した特定の実施形態に本発明
を限定するものと解釈すべきではなく、説明および理解のみを目的とするもので
ある。
実行パイプライン12と、実行パイプライン12の外部にあるトレース・バッフ
ァ14とを含む。実行パイプライン12は、メモリ・オーダ・バッファを含む場
合もある。導体18上の命令は、実行のために実行パイプライン12に供給され
る。また、命令は、導体22を介してトレース・バッファ14にも供給される。
命令は、実行パイプライン12内で推論実行することができる。推論の例として
は、データ推論および依存関係推論を含む。多種多様の推論のいずれも含むこと
ができる。プロセッサ10は、推論エラー(誤推論)を検出し、それから回復す
るための機構をトレース・バッファ14に含む。
体24を介して実行パイプライン12に供給され、実行パイプライン12内で再
実施される。命令が「再実施」される場合、その命令とその命令に依存するすべ
ての命令は再実行されるが、必ずしも同時に行われるわけではない。命令が「完
全再実施」される場合、その命令とプログラム順序でその命令に続くすべての命
令が再実行される。プログラム順序とは、複数の命令が適正順序プロセッサ内で
実行されると思われる順序である。命令は、完全にプログラム順序でまたはプロ
グラム順序以外の何らかの順序で導体18を通過することができる。プロセッサ
10は、適正順序プロセッサである場合もあれば、不適正順序プロセッサである
場合もある。従属命令の再実行の結果、従属命令に依存する命令が再実施される
場合もある。命令の再実行の回数は、再実施をトリガする事象を制御することに
よって制御することができる。一般に、実行という用語は、最初の実行と、再実
行を含むことができる。命令の少なくとも一部の結果は、導体26を介してトレ
ース・バッファに供給される。最終リタイヤ・ロジック34は、命令が初めから
または再実行時に正しく実行されたことが保証された後で、トレース・バッファ
14内の命令を最終的にリタイヤする。
り大きいパイプラインの一セクションにすることもできる。実行パイプライン1
2は、多種多様のプロセッサとともに使用することができる。図2と図3に例を
示すが、図2は実行パイプライン108を有するプロセッサ50の構成要素を示
し、図3は実行パイプライン308を有するプロセッサ108を示している。図
2の本発明の実施形態の実行パイプライン108はレジスタ・リネームを含む。
他の実施形態の実行パイプラインはレジスタ・リネームを含まない。プロセッサ
は、(図2のプロセッサ50の場合のように)複数のスレッドを同時に処理する
場合もあれば、(図3のプロセッサ100の場合のように)複数のスレッドを同
時に処理しない場合もある。プロセッサ50について、まず説明する。
の実施形態に関して記載した特定の特徴、構造、または特性が本発明の少なくと
も1つの実施形態に含まれることを意味する。本明細書の様々な箇所に「一実施
形態では」という句が現れても、必ずしもすべて同じ実施形態について言及して
いるわけではない。
れる。デコーダ106は、Iキャッシュ104から命令を受け取るものとして示
されているが、命令がIキャッシュ104に到達する前にその命令をデコードす
ることもできる。選択したコンテキストおよび実施によっては、「命令」という
用語は、マクロ演算(マクロop)、マイクロ演算(μop)、またはその他の
形式の命令を含むことができる。縮小命令セット・コンピューティング(RIS
C)命令または複雑命令セット・コンピューティング(CISC)命令を含むが
これに限定されない様々な命令セットのいずれでも使用することができる。さら
に、デコーダ106は、CISC命令をRISC命令にデコードすることができ
る。Iキャッシュ104からの命令は、MUX110を介してパイプライン10
8に供給され、かつ、導体118を介してトレース・バッファ114に供給され
る。
タ値およびプログラム・カウンタ値などの関連信号とを含む。
12A、112B、・・・、112Xに開始計数値を供給することにより(Xは
プログラム・カウンタの数を表す)、Iキャッシュ104内のプログラムまたは
プロセスから様々なスレッドを作成する。一例として、Xは4またはそれ以上あ
るいはそれ以下にすることができる。スレッド管理ロジック124は、関連のプ
ログラム・カウンタを停止することにより、スレッドを終了する。その後、スレ
ッド管理ロジック124は、プログラム・カウンタに他のスレッドを開始させる
こともできる。様々なスレッドの一部分はIキャッシュ104から同時に読み取
られる。
に、スレッド管理ロジック124は、導体128を介してデコーダ106から命
令を読み取ることができる。スレッドは、プログラマまたはコンパイラによって
挿入され、スレッドの開始および終了を明示的に決定する命令を含むことができ
る。あるいは、スレッド管理ロジック124は、プログラムまたはプロセスの命
令を分析し、Iキャッシュ104に供給されたプログラムまたはプロセスを様々
なスレッドに分解することができる。たとえば、分岐、ループ、逆方向分岐、復
帰、ジャンプ、手続き呼出し、関数呼出しは、スレッドを分離するために適当な
ポイントである場合もある。スレッド管理ロジック124は、潜在的なスレッド
の長さ、含まれる変数の数、連続するスレッド間に共通する変数の数、ならびに
どこでスレッドを開始するかを考慮する際のその他の要因を考慮することができ
る。スレッド管理ロジック124は、スレッドの境界を決定する際にプログラム
順序を考慮することができる。プログラム順序とは、スレッドとスレッド内の命
令が適正順序プロセッサ上で実行されると思われる順序である。スレッド内の命
令は、(プログラム順序とは反対の)不適正順序で実行することができる。スレ
ッドは、本質的には、パイプライン108によって独立して処理することができ
る。スレッド管理ロジック124は、最適とは言えない選択を回避するために履
歴テーブルを含む予測機構を含むことができる。たとえば、スレッド管理ロジッ
ク124は、スレッドを作成し、次に、そのスレッドが実際にはプログラム順序
の一部ではなかったと後で判定する場合がある。その場合同じコードがもう一度
検出された場合、予測機構を使用して、同じスレッドをもう一度作成すべきかど
うかを判定することができるだろう。スレッド管理ロジック124は、スレッド
の動的作成と、コンパイラまたはプログラマからの明示的な命令ヒントの使用と
の組合せを使用して、命令内のどこでスレッドを作成すべきかを判定することが
できる。
コンパイルされたわけではないプログラムからスレッドを作成することであり、
スレッドの少なくとも1つは他のスレッドに依存する。プログラムは、実行パイ
プライン108およびスレッド管理ロジック124を含むチップから離れて作成
することができる。スレッドを動的に作成し、スレッドを実行し、実行時に推論
エラーを検出して訂正することを、動的マルチスレッド化と呼ぶ。
では、スレッドT2は条件付き分岐命令の次に実行される。時間順序では、スレ
ッドT2は、スレッドT1が最初に条件付き分岐命令に到達した時点から推論実
行される。したがって、スレッドT1およびT2の一部分は同時に実行される。
スレッドT2が誤推論を含む場合、スレッドT2の実施済み命令が再実施される
。
計数値をモニタすることができる。計数値をモニタする目的は、スレッドがいつ
終了すべきかを判定することである。たとえば、条件付き分岐の条件が満たされ
ないときに、スレッドT1のプログラム・カウンタが続行可能になっている場合
、それはスレッドT2の第1の命令まで進むことになるだろう。したがって、ス
レッド管理ロジック124は、条件が満たされないときにスレッドT1のプログ
ラム・カウンタを停止する。
は、呼出し命令に到達したときに、プログラム・カウンタはその関数の位置まで
ジャンプして復帰命令まで実行し、復帰命令の時点でプログラム・カウンタは呼
出し後の命令に復帰する。プログラム順序では、スレッドT2は復帰後の命令か
ら始まる。時間順序では、スレッドT2は、スレッドT1が最初に呼出しに到達
した時点から推論実行される。スレッドT2が誤推論を含む場合、スレッドT2
の実施済み命令が再実施される。スレッドT1は、そのプログラム・カウンタが
スレッドT2の第1の命令に到達したときに終了する。図5のロードMX命令お
よびストアMX命令について以下に説明する。
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の条件付き逆方向分岐の直後にある
命令から始まる。
チされ、デコードされ、実行される。プログラム順序に従わないので、これらの
スレッドは不適正順序でフェッチされ、デコードされ、実行される。時間順序で
は、スレッドT2、T3、T4の実行はポイントA、C、Eの命令の直後にそれ
ぞれ始まる。垂直破線は親子関係を示している。スレッドT2、T3、T4は、
レジスタまたはメモリ位置にあるデータが正確であることが確実になる前にその
データを頼りにすることにより、推論実行される。プロセッサ100は、誤推論
を検出し、誤推論した命令を再実施させるための機構を有する。スレッドT4が
プログラム順序の一部ではないことが判明する。スレッドT4は、スレッドT4
がプログラム順序の一部ではないことをスレッド管理ロジック124が判定する
まで実行することができる。その時点でスレッドT4はリセットすることができ
、プロセッサ100内のスレッドT4を保持または処理する資源は、割振り解除
し、次に他のスレッドのために割り振ることができる。プログラム順序では、ス
レッドT1、T2、T3は、まずスレッドT1、次にスレッドT3、次にスレッ
ドT2という順序で実行されることになる。
50によって受け取られ、そのユニットはレジスタ・ファイル152内のリネー
ムした物理レジスタの物理レジスタ識別子(PRID)を供給する。このPRI
Dはバイパス導体126を介してトレース・バッファ114に供給される。割振
りは、命令にレジスタを割り当てることと、スケジュール/発行ユニット156
の予約ステーションの項目を割り当てることを含む。予約ステーション内の特定
の命令のためにオペランドの準備ができると、実行ユニット158のうちの1つ
の実行ユニット(たとえば、整数、浮動小数点)またはアドレス生成ユニット(
AGU)172と、メモリ・オーダ・バッファ(MOB)178と、データ・キ
ャッシュ176とを含むメモリ実行パイプラインにその命令が発行される。命令
によっては、オペランドは導体168を介してレジスタ・ファイル152から供
給される場合もある。本発明の一実施形態では、1つのスレッド内の従属命令は
、不適正順序で実行されないようにリンクすることができる。しかし、様々なス
レッドからの従属命令は、同時にフェッチし、デコードし、不適正順序で実行す
ることができる。所与のスレッドの実行は推論実行にすることができる。
と高帯域幅命令発行の両方を有するように設計されている。この待ち時間と帯域
幅の要件は、予約ステーション内で待機できる命令の数に制限を加えるものであ
る。トレース・バッファ114をパイプライン108の外部に位置決めすること
により、パイプライン108のスループットを大幅に低下させることなく、多数
の命令を実行/再実施に使用イネーブルにすることができる。実行パイプライン
108とトレース・バッファ114との間の待ち時間の影響はパイプライン化に
より低減することができる。
ジスタの場合)を介し、さらにMUX 192と導体196を介してトレース・
バッファ114に書き込まれる。この結果と関連情報は、レジスタ・ファイル1
52と関連リオーダ・バッファ(ROB)164に書き込むこともできる。ある
命令の結果と情報がレジスタ・ファイル152およびROB164に書き込まれ
ると、その命令は、パイプライン108に関する限り、適正順序でリタイヤされ
る。このリタイヤは第1レベルまたは初期リタイヤと呼ばれる。第1レベル・リ
タイヤ時またはその前に、予約ステーション、レジスタ・ファイル152、RO
B164を含む、スケジュール/発行ユニット156内のリタイヤした命令用の
資源の割振りが解除される。しかし、その命令に関して必要なすべての詳細は、
後述する最終的なリタイヤまでトレース・バッファ114およびMOB178内
に維持される。
場合、後のスレッドと前のスレッドとの間に依存関係が存在する。このデータは
、メモリ命令または非メモリ命令によって前のスレッドで生成された可能性があ
る。たとえば、後のスレッド内のロード命令が前のスレッド内のストア命令と同
じアドレスを有する場合、後のスレッドは前のスレッドに依存する可能性がある
。また、後のスレッド内のある命令が前のスレッドで変更されたレジスタを必要
とする場合も、後のスレッドは前のスレッドに依存する可能性がある。同様に、
プログラム順序で後の命令が前の命令によって生成されたデータを使用する場合
、後の命令は前の命令に依存する。「依存関係」という用語は「依存関係推論」
という句でも使用する。依存関係推論の一例は、ロード命令と前のストア命令と
の間に依存関係がまったくないと推論することである。アドレスの突合せは、依
存関係推論エラーをチェックするための技法の一例である。データ推論の一例は
、レジスタ内のデータが正しいデータであると推論することである。レジスタの
突合せは、データ推論エラーをチェックするための技法の一例である。
、114B、114C、・・・、114Yを含む。Yはトレース・バッファの数
を表す。たとえば、Y=4(すなわち、Y=D)である場合、4つのトレース・
バッファが存在する。Yが3未満である場合、トレース・バッファ114は図8
に示すトレース・バッファをすべて含むわけではなくなる。YはX(プログラム
・カウンタの数)と同じかまたはXとは異なるものにすることができる。トレー
ス・バッファ114は、個別トレース・バッファに分割された単一メモリにする
か、物理的に別々のトレース・バッファにするか、あるいは両者の組合せにする
ことができる。
ドIDのプログラム順序(リタイヤ順序でもある)を指定するアレイ198を含
む。この例では、各トレース・バッファは固有のスレッドIDを有するかまたは
スレッドIDに対する1対1のマッピングを有する。たとえば、トレース・バッ
ファ114AにはスレッドID1が割り当てられ、トレース・バッファ114B
にはスレッドID2割り当てられ、以下同様である。スレッドIDはハードワイ
ヤードにするかまたはプログラミングすることができる。一実施形態では、各プ
ログラム・カウンタは特定のスレッドIDおよびトレース・バッファに関連付け
られる。(あるいは、このような制限された関係が存在しない。)
いる。この例では、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のように訂正されることになるだろう。
で実行されると思われる順序である。また、命令のプログラム順序は、命令が適
正順序プロセッサで実行されると思われる順序である。スレッド管理ロジック1
24は必ずしも最初にそのスレッド用の真のプログラム順序を決定するわけでは
ない。しかし、スレッド管理ロジック124は結局、真のプログラム順序を決定
する。
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または値が再実行中の命令に付随する場合もある。
接続されたバイパス導体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では、多重化またはイネーブル回路あるいは相当な数の
並列導体を使用することができる。トレース・バッファは同一またはいくらか異
なるものにすることができる。
態を示している。図11のトレース・バッファ114A’は、トレース・バッフ
ァの第2の実施形態を示している。トレース・バッファの他の実施形態は、トレ
ース・バッファ114Aおよび114A’の変形形態あるいはまったく異なるア
ーキテクチャを含むことができるだろう。
02Aと、データ及び依存関係(DAD)アレイ206Aと、入力レジスタ・フ
ァイル208Aと、出力レジスタ・ファイル210Aと、依存関係生成回路21
2Aと、制御回路224Aとを含む。「アレイ」という用語は、特定の形式に制
限せず、広い意味で複数方向の情報を含むためのものである。
構造と、それと他の構成要素との対話について、以下に説明する。命令待ち行列
アレイ202Aは、特定のスレッドの一部であるIキャッシュ104からフェッ
チされた命令を受け取る。1つのスレッド内の命令は、適正順序でフェッチされ
、命令待ち行列アレイ202Aに書き込まれる。他のスレッドの一部である命令
は、異なるトレース・バッファの命令待ち行列内に書き込まれるか、または異な
る時点で命令待ち行列アレイ202Aによって書き込まれる。命令待ち行列アレ
イ202Aは、各命令識別子(instrID)に関する様々な情報フィールド
を含む。様々な実施形態は、いくらか異なるフィールドと、異なる数の行を含む
ことができるだろう。命令待ち行列アレイ202Aのこの実施形態では、プログ
ラム・カウンタ値は考慮されないが、他の実施形態では考慮される可能性がある
。命令待ち行列アレイ202Aと添付図面に示す他のすべての構成要素は、図示
していない様々なフィールド、信号、および構造を含むことができる。このよう
なフィールド、信号、構造は図示していない。というのは、これらは実施に応じ
て変化するものであり、当業者によって理解されており、本明細書を非常に複雑
にし、本発明を不明確にする傾向があるからである。
いと判定されたという理由で)最終的にリタイヤまたは廃棄されるまで、トレー
ス・バッファ114A内で待機する。まだ実行されていない命令が依然としてト
レース内に存在する間に命令待ち行列アレイ202Aがいっぱいになった場合、
1つの命令が最終的に命令待ち行列アレイ202Aからリタイヤされ、1つの行
の割振りが解除されるまで、トレース内の命令はトレース・バッファ114また
はリネーム/割振りユニット150によって受け取られない。システム100内
の様々なアレイの項目は、先頭ポインタおよび末尾ポインタの移動によって割振
りおよび割振り解除を行うことができる。
14A以外のトレース・バッファはプログラム順序でトレース・バッファ114
Aより前にあることは明らかになるだろう。
先」、「ソース1」、「ソース2」の各フィールドは、命令の宛先、ソース1、
ソース2を識別する。「ソース1のインデックス」は、そのソースを含むトレー
ス・バッファ114A内の命令項目を識別する。たとえば、instrID0の
宛先はinstrID2のソース1に使用される。したがって、instrID
2の「ソース1のインデックス」フィールドには0が入る。instrID2の
宛先はinstrID3のソース2に使用される。したがって、instrID
3の「ソース2のインデックス」フィールドには2が入る。×は指定なしを意味
する。
レッドの外部からの命令によってあるinstrIDの対応するソース・オペラ
ンドが事前に生成されたときに第1の値(たとえば、論理0)にセットされ、そ
のスレッド内の命令によってあるinstrIDのソース・オペランドが事前に
生成されたときに第2の値(たとえば、論理1)にセットされるビットである。
instrID0のソース1(R1)は、命令待ち行列アレイ202A内のトレ
ースの外部で生成される。したがって、instrID0の有効1は論理0にな
る。instrID3のソース2はinstrID2の宛先から得られる。した
がって、instrID3の有効2は論理1になる。
ともに、特殊レジスタ(図示せず)に、ソース1フィールドに、または他の何ら
かの機構により格納することができる。図12では、instrID3のソース
1フィールドに×(指定なし)が示されている。あるいは、ソース1フィールド
に何らかのインジケータを入れることができるだろう。
内のストア命令に関連するSBIDを保持する。ロード・バッファ(LBID)
フィールドは、後述するロード・バッファ内のロード命令に関連するLBID項
目を保持する。SBID値とLBID値は、リネーム/割振りユニット150に
よって割り当てられ、バイパス導体126を介して命令待ち行列アレイに書き込
まれる。スレッドID番号フィールドは命令待ち行列アレイ202Aに含めるこ
とができるだろうが、暗黙のものなのでその必要はない。
令待ち行列アレイ202AのinstrID項目に対応する「instrID」
項目(行)を含む。実際に、命令待ち行列アレイ202AとDADアレイ206
Aは同じアレイの異なる部分にすることもできるだろう。しかし、一部の実施形
態では、命令待ち行列アレイ202AとDADアレイ206Aに関連する別々の
読取りポートが存在する。
ル152内のPRIDのいずれかを含む「値またはPRID」フィールドを含む
。この値は、ライトバック・ユニット162とライトバック・バス122および
196を介して実行ユニットからトレース・バッファ114Aにライトバックさ
れる。「状況」フィールドは、2ビットにすることができるものであり、「値ま
たはPRID」フィールドが「値」を含むか「PRID」を含むかを示す。一実
施形態では、「値またはPRID」が有効な「値」または有効な「PRID」の
いずれも保持しないことが可能である。「再実施計数値」フィールドは、命令デ
ィスパッチを明確に識別するものであり、同じinstrIDの命令がパイプラ
イン108で再実施されるたびに増分される。一実施形態では、パイプライン1
08内で1つの命令を複数回同時に再実施することも可能である。この場合、一
実施形態では、最高「再実施計数値」に関連する情報だけがDADアレイ206
Aにライトバックされる。
は、簡略化のため、4つの論理レジスタ(R1、R2、R3、R4)だけが表さ
れている。しかし、この数ははるかに大きいものにすることもできる。この例で
は、依存関係フィールド項目は、トレースへの入力値と命令項目との間にデータ
依存関係連鎖が存在することを示すために1にセットされ、依存関係がまったく
ない場合に0にセットされる。依存関係フィールド項目は、入力値が受け取られ
た場合に(値の誤推論が検出されたときなどに)トレース内のどの命令を実行す
る必要があるかを識別する。
れると、依存関係ビットが順次計算され、DADアレイ206Aに書き込まれる
。依存関係ビットは、命令を再実施すべきかどうかが判定される前に生成するこ
とができる。図13の依存関係ビットは、B.1.a項に前述したように6つの
命令I1〜I5に関するものである。
手法の1つを説明する前に、より直観的なレベルでの作成について説明する。
strID0のR1列とR2列には1が入り、R3列とR4列は0のままになる
(命令I0に関する情報を保持する)。
strID1のR1列とR2列には0が入り、R3列とR4列には1が入る。
にそれぞれ直接依存する。命令I0では、R1はトレースの先頭にあるR1値と
R2値に依存する。命令I2では、R2はトレースの先頭にあるR2値とR4値
に依存する。したがって、命令I2はトレースの先頭にあるR1〜R4値に間接
的に依存し、instrID2のR1〜R4列には1が入る。
がって、命令I2がトレースの先頭にあるR1〜R4値に依存するので、命令I
3はこれらの値に間接的に依存し、instrID3のR1〜R4列には1が入
る。
はトレースの先頭にあるレジスタR3値とR4値に依存する。したがって、in
strID4のR1列とR2列には0が入り、R3列とR4列には1が入る。
トレースの先頭にあるレジスタR1〜R4に依存する。したがって、instr
ID5のR1〜R4列には1が入る。
ジスタおよびアルゴリズムについて以下に説明する。図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つの結合レジスタ内に入れることができる。
それが論理レジスタを変更するためのトレース・バッファ114A内の最後の命
令を指し示す。変更ビットおよび最後の修飾子アドレスは、トレース・バッファ
114Aに書き込むべき次の命令に関する依存関係ビットを計算するために使用
する。
とを意味するだけであることに留意されたい。そのレジスタの内容が命令の結果
として異なるものになることを必ずしも意味するわけではない。たとえば、(命
令I0内のように)R1およびR2の内容が乗算され、その結果がレジスタR1
に書き込まれる場合、R1の内容は必ずしも命令I0の結果として異なるものに
なるわけではない。たとえば、命令前にR1の内容が「0」であるかまたはR2
が「1」である場合、命令後のR1の内容は異なるものにはならないだろう。
するためにある命令の各ソース・オペランド(たとえば、ソース1とソース2)
ごとに実行されるアルゴリズムを表している。ステップ252では、レジスタ2
40に関連ビットがセットされているかどうかが判定される。ステップ254に
記載するように、レジスタ240内のビットがセットされていない場合、そのレ
ジスタに関連する依存関係フィールドのビットは論理1にセットされる。ステッ
プ258に記載するように、レジスタ240内のビットがセットされている場合
、関連レジスタ用の指標レジスタ(230、232、234、または236)か
ら作成されたインデックスを使用してソース依存関係フィールドが読み取られる
。次に、ステップ262に記載するように、論理OR演算を使用してソース依存
関係ビットが現行命令の依存関係ビットとマージされる。このような論理OR演
算は図15のORゲート244に示す(同図では複数のビットが入力側に表され
ている)。図16のアルゴリズムを実行する際に参照される変更レジスタおよび
修飾子は、ある命令を実行する直前に存在したものである。
、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が変更されたことを
示す。
レジスタ240のR1論理レジスタ列は1にセットされたままになる。変更レジ
スタ240のR2列には論理1が入る。レジスタ232内の1は命令I1を表す
。
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を変更するための最も最新の命令であることを示す。
レジスタ240のR4列には論理1が加算され、レジスタ236には命令I3を
表す3が入る。論理ORは1111を生成する。
スタ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が入る。
I5およびI6は外部メモリ位置を変更するものであり、レジスタ230、23
2、234、236、240内の変更は行わない。
合もあれば、スケジュール/発行ユニット156がそれ専用の依存関係情報を導
出するだけの場合もある。
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アレイは、
再実施が始まる前に依存関係フィールドを作成したときにアセンブルすることが
できるだろう。
含む。本発明の一実施形態により、各トレース・バッファは、関連スレッドのレ
ジスタ・コンテキストを保持する出力レジスタ・ファイルと、プログラム順序で
直前のスレッドのレジスタ・コンテキストを受け取るための入力レジスタ・ファ
イルとを有する。レジスタ・コンテキストは、論理レジスタの内容または状態で
ある。出力レジスタ・ファイル変更の内容はしばしば更新され、おそらく、レジ
スタ内で変更が行われるたびに更新される。入力レジスタ・ファイルの内容は、
後述する比較の後でのみ更新される。
ァ114A内)と入力レジスタ・ファイル208B(トレース・バッファ114
B内)の実施形態を示すが、他の実施形態も使用できる。出力レジスタ・ファイ
ル208Aおよび入力レジスタ・ファイル210Bは、値またはPRIDフィー
ルドと状況フィールドとを含む。状況フィールドは、有効な値または有効なPR
IDが値またはPRIDフィールド内に保持されているかどうかを示す。一実施
形態では、有効な値または有効なPRIDのいずれかが存在する。他の実施形態
では、どちらも存在しないことがあり、その場合は、入力レジスタ・ファイルに
依存する命令が一方が存在するまで待機することがある。
以前は命令I0を含むスレッド内の命令の宛先ではなかったことに留意されたい
。しかし、レジスタR1およびR2の値またはPRIDは入力レジスタ・ファイ
ル208Aから入手可能であり、命令I0の実行時に使用されるだろう。
・ファイル208B(トレース・バッファ114B内)の内容と、プログラム順
序で直前のスレッドに関する出力レジスタ・ファイル210A(トレース・バッ
ファ114A内)の内容を比較する。この比較は、直前のスレッドの実行終了時
または先行スレッドの最初の実行中に行うことができる。また、この比較は、先
行スレッドのリタイヤ終了時にも行われる。一実施形態では、この比較は、先行
スレッドのリタイヤ終了時のみに行われる。
。この比較は推論エラーを検出するために行われる。入力レジスタ・ファイルと
出力レジスタ・ファイルとの間に違いがある場合、直前のスレッドの出力レジス
タのうちの1つまたは複数の値が変更されている。これに応答して、入力レジス
タ・ファイル208Bが更新され、再実施トリガ・ロジック284Bにより変更
されたレジスタ値とともに実施済み命令が再実施される。依存関係フィールドは
再実施トリガ・ロジック284Bによって使用できる。変更された値が結局正し
い値(すなわち、純粋に適正順序プロセッサ内で生成されたと思われるレジスタ
値)であるという保証はまったくない。その命令は、もう一度、おそらく数回再
実施する必要がある場合もある。
レジスタ・ファイルと、比較器と、その入力レジスタ・ファイルを含むトレース
・バッファ内に保持された命令内の所与の推論エラーを検出するための関連制御
回路とを含む。他の実施形態では、検出回路は多少異なる回路を含む可能性があ
る。
ース・バッファ114Bに関連付けられている。スレッドT1はスレッドT2の
直前のスレッドであり、トレース・バッファ114Aに関連付けられている。ス
レッドT1は、関数呼出しと、その関数と、関数呼出しからの復帰とを含む。ス
レッドT2の実行は関数呼出しの直後に始まる。関数呼出し時に存在した出力レ
ジスタ210Aの内容は、入力レジスタ・ファイル208B内にコピーされる。
スレッドT2の命令は、入力レジスタ・ファイル208B内のレジスタ・コンテ
キストに基づいて推論実行される。復帰命令の時点で入力レジスタ・ファイル2
08Bの内容は、比較器280Bによって出力レジスタ・ファイル210Aの内
容と比較される。違いがある場合、入力レジスタ・ファイル208Bは更新され
、スレッドT2内の実施済み命令が再実施される。この比較は、1つまたは複数
の中間時点で行うこともできる。これは、命令の再実施をより均一に分散するこ
とによりボトルネックを防止するのに役立つことがあるが、たとえば、出力レジ
スタ・ファイルの内容がその関数中に複数回変更された場合に追加の再実施を引
き起こす可能性がある。出力レジスタ・ファイルは絶えず変化しているので、出
力レジスタ・ファイル210Aの内容を受け取る中間バッファを備えていること
が望ましいであろう。その場合、比較は中間バッファと入力レジスタ・ファイル
208Bの内容同士で行われることがある。
出力レジスタ・ファイルと入力レジスタ・ファイルとの間で渡される。導体21
6は、直前のスレッド用のトレースを保持することができる各トレース・バッフ
ァの出力レジスタ・ファイルと各入力レジスタ・ファイルとを接続する。プログ
ラム順序がいつでも特定のトレース・バッファ順序に従うことが保証できる場合
、導体216のレイアウトはかなり単純なものになる可能性がある。出力レジス
タ・ファイルと入力レジスタ・ファイルは、図10および図11に示す制御回路
224Aによって制御することができる。
れかを供給することになるので、入力レジスタ・ファイル内の内容を受け取って
から、ソース・オペランドとして入力レジスタからのレジスタを使用して命令を
実行できるようになるまでに非常に小さい待ち時間が存在する可能性がある。値
が入手できない場合、パイプライン108内での実行のためにレジスタ・ファイ
ル152へのPRIDを使用することができる。
ときに多くの命令が複数回再実施されることが予想される。しかし、多くのプロ
グラムでは、大量の命令をまったく再実施しないか、あるいは比較的少数回再実
施することが必要になり、その結果、単位時間あたりに正しく実行される命令が
大幅に増加し、1つのプログラムを実行するのに必要な全時間が減少することも
予想される。
図10)と同様のものである。しかし、トレース・バッファ114A’内の依存
関係フィールドは、ある命令を再実施すべきであると決定された後で、依存関係
生成デコード回路218A内で生成される。これにより再実施時に何らかの初期
待ち時間が発生する可能性があるが、再実施用の命令の発行と依存関係の判定が
パイプライン方式で実行される場合、いったんプロセスが開始されると、追加の
待ち時間はほとんど発生しない可能性がある。
ールドを1つだけ保持する。(図13では、4つのフィールドが存在する。)こ
の同一フィールドは再使用可能である。たとえば、レジスタR1に依存する命令
の再実施中に、このフィールドを使用してレジスタR1に依存する命令をリスト
することができるだろう。また、レジスタR2に依存する命令の再実施中に、同
じフィールドを使用してレジスタR2に依存する命令をリストすることができ、
以下同様である。依存関係生成デコード回路218Aは、唯一の修飾子フィール
ドと1つの変更レジスタとを含むことができるだろう。(図14では、4つ存在
する。)あるいは、依存関係生成デコード回路218Aは複数の依存関係フィー
ルドとレジスタとを含むことができるだろう。依存関係生成デコード回路218
Aは、一度に数個の命令のみの依存関係を判定することができる。
同様に)各instrID項目ごとの値またはPRIDフィールドと、状況ビッ
ト・フィールドと、再実施計数値フィールドとを含む。あるいは、データ・アレ
イ214Aの内容を依存関係生成デコード回路218Aに入れて、データ・アレ
イ214Aを不要にすることができるだろう。データ・アレイ214Aと依存関
係生成デコード回路218Aを別々のものとして維持することが有利になりうる
理由は2つある。第1に、それらは異なる読取りポートを含む可能性があること
である。第2に、一実施形態では、依存関係生成デコード回路218Aは、命令
待ち行列アレイ202Aおよびデータ・アレイ214Aと同じ数の行を有してい
ないことである。換言すれば、一実施形態では、依存関係デコード回路218A
は、それが依存関係フィールドを再使用できるのと同様に、行を再使用する。当
然のことながら、多くの可能性が存在する。
いつ再実施すべきかを通知する。依存関係フィールド(図13のR1用のものと
同様)を有するアレイを生成して、再実施すべきロード命令に依存する命令をリ
ストすることができる。しかし、ロード命令の場合、従属命令のリストは、レジ
スタの場合のようにトレース内の最初の命令ではなく、そのロード命令から始ま
る。ロード命令用の依存関係フィールドは、依存関係生成デコード回路218A
(図11)内にある可能性がある。(当然のことながら、他のトレース用のロー
ド命令は他のトレース・バッファから再実施されるだろう。)一実施形態では、
依存関係生成デコード回路218Aは、ロード命令とレジスタの両方のための依
存関係フィールドに使用する。この同一フィールドは両方に使用することができ
る。他の実施形態では、レジスタ用の依存関係フィールドはDADアレイ206
A内にあり、ロード用の依存関係フィールドは依存関係生成デコード回路218
A内にある。
全に再実施される(すなわち、ロード後のすべての命令が再実行される)。
トリガ・ロジック(再実施トリガ・ロジック284Bなど)が判定すると、その
ロジックは対応するトレース・バッファ(トレース・バッファ114Bなど)を
トリガして、予測が間違っているソース・オペランドに直接的または間接的に依
存する、パイプライン108で再実施すべき命令をディスパッチする。直接的ま
たは間接的に依存する命令は、トレース・バッファ内のDADアレイの依存関係
フィールドからまたは図13のように他のアレイにより識別することができる。
ラム順序である)で実行するようにトレース・バッファからディスパッチされる
。たとえば、instrID0項目内の命令は、instrID1項目内の命令
より前にまたはその命令と同時にディスパッチされる。しかし、命令は、不適正
順序プロセッサの場合のように、スケジュール/発行ユニット156の制御下で
不適正順序で実行することができる。トレース・バッファからディスパッチされ
る命令には制御ビットが付加され、(1)レジスタ・リネームを実行すべきか、
(2)リネーム/割振りユニット150内のリネーム別名(alias)テーブル・ ルックアップをバイパスし、代わりに対応するトレース・バッファからのPRI
Dを使用すべきか、(3)リネームを完全にバイパスし、それが命令内の定数オ
ペランドである場合と同様にDADアレイからの値を使用すべきかをリネーム/
割振りユニット150に示す。
ドは、instrIDの対応するソース・オペランドがトレース・バッファ11
4A内のスレッド外部からの命令(たとえば、その宛先)によって生成されたと
きに第1の値(たとえば、論理0)にセットされ、instrID用のソース・
オペランドがスレッド内の命令によって生成されたときに第2の値(たとえば、
論理1)にセットされるビットである。トレース・バッファ114Aからディス
パッチされる再実施された命令は以下のように決定されたソース・オペランドを
持つであろう。
セットされた場合、ソース・オペランドを使用して、DADアレイ206A内の
対応する値またはPRIDを読み取る。DADアレイ状況フィールドの値ビット
またはPRIDビットのいずれも有効ではない場合、ソース・オペランド・レジ
スタがまだリネームされていないことを意味する。この場合、導体120および
MUX 110により論理0値を有する値およびPRID状況ビットとともにそ
の命令がディスパッチされ、リネーム/割振りユニット150はそれが通常行う
ように別名テーブル・ルックアップ(レジスタ・リネーム)を実行することがで
きる。PRIDまたは値が有効である場合、それは導体120およびMUX 1
10により命令とともにリネーム/割振りユニット150に渡され、それに応答
してそのユニットはリネーム・ステージをバイパスする。
れた場合、入力オペランドはトレース外部から得られる。ソース・レジスタ名を
使用して入力レジスタ・ファイル208Aにアクセスする。入力レジスタ・ファ
イル208Aからの値またはPRIDは命令とともにリネーム/割振りユニット
150に渡され、それに応答してそのユニットはリネーム・ステージをバイパス
する。
Dアレイ206A内の値およびPRID状況フィールド・ビットが論理0にリセ
ットされるか、または論理0のままになる。これにより2つの目的が達成される
。第1に、PRIDの前にディスパッチされたその後の従属命令がリネーム・ス
テージからその項目にコピーされ、リネーム別名テーブルからリネームできるこ
とが保証され、トレース・バッファ114Aからの古くなったPRIDの使用が
回避される。第2に、最後の実行インスタンスがライトバックされるまで命令が
リタイヤしないことが保証され、したがって、すべてのデータ予測間違いが訂正
された場合のみ命令がリタイヤ可能になる。
の再実施事象が処理されると、その命令はトレース・バッファ114から最終的
にリタイヤされる。言い換えると、ある命令が正しいソース・オペランドととも
に実行されたことを保証できる場合に、その命令は最終的にリタイヤされる。ス
レッドは適正順序でリタイヤされる。たとえば、スレッドX内の命令は、すべて
の先行スレッドがリタイヤされる(すなわち、すべての先行スレッドの命令がリ
タイヤされる)まで、リタイヤすることができない。あるスレッド内の命令は適
正順序でリタイヤされるが、リタイヤの準備ができているすべての命令は同時に
リタイヤすることができる。
明の一実施形態では、最終リタイヤは、(1)適正順序レジスタ・ファイルへの
結果のコミットメントと、(2)サービス割込み、例外、および/または分岐予
測間違いと、(3)トレース・バッファおよびMOB 178の資源項目の割振
り解除と、(4)リタイヤ済みとしてストアにマークを付け、それをメモリに対
して発行するようMOBに通知することを含む。項目の割振り解除は、ヘッド・
ポインタの移動を含むことができる。後述するように、MOB 178内のスト
ア命令は、関連データがデータ・キャッシュ176または他のメモリにコピーさ
れたことが確実になるまで割振り解除されない。MOB 178内のロード命令
およびストア命令の最終リタイヤに関する詳細については以下に説明する。
、・・・、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は様々な制御機能を実行する。
ア・バッファ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に含まれない可能性もある。
命令IDを保持する。スレッド・バッファIDは、ストア・バッファ184Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはストア命令の命令コードを保持する。ストア・アドレス・フィールドは
それに対してストア命令が向けられるアドレスを保持する。図示の実施形態では
、アドレスはAGU 172によって生成される。SBアドレス有効フィールド
は、ストア・アドレスが有効アドレスであるかどうかを示すビットを含む。デー
タ・フィールドは記憶すべきデータを保持する。データ有効フィールドは、その
データが有効であるかどうかを示すビットを含む。有効アドレスは有効データと
は異なる時点に到着する可能性があるので、アドレス有効ビットとデータ有効ビ
ットとして別々のビットを使用することができる。アドレスとデータはどちらも
ストア命令が実行される前に到着する。一実施形態では、データは命令の一部と
して含まれる。リタイヤ済みフィールドは、ストア命令がリタイヤすべきである
ことを最終リタイヤ・ロジック134が示すときにセットされ、メモリへのスト
アが完了したという確認をメモリから受け取ったときにリセットされるビットを
含む。ロードおよびストアのリタイヤについては後述する。再実施計数値フィー
ルドは再実施計数値数を含む(図13のDADアレイ206Aの再実施計数値フ
ィールドと同様のものである)。再実施計数値フィールドは必須のものではない
。一実施形態では、ストア命令は一度に1回しか再実施できないので、再実施計
数値フィールドはまったく存在しない。
ド・バッファ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に含まれない可能性もある。
命令IDを保持する。スレッド・バッファIDは、ロード・バッファ182Aと
トレース・バッファ114Aのどちらでも暗黙のものである。命令コード・フィ
ールドはロード命令の命令コードを保持する。ロード・アドレス・フィールドは
それからロード命令がロードされるアドレスを保持する。項目有効フィールドは
有効ロード命令によってその項目が占有されることを示すビットを含む。図示の
実施形態では、アドレスはAGU 172によってすでに生成されているので、
アドレス有効フィールドは含まれない。PRIDフィールドは、レジスタ・ファ
イル152内のロード命令の宛先を示す、リネーム/割振りユニット152から
のPRIDを保持する。SBヒット、SBID、スレッドID、再実施計数値フ
ィールド(1つ存在する場合)は、状況フィールドの一部と見ることができ、ス
トア命令の実行に関連して後述する。
に受け取られた時点で、ストア命令およびロード命令用の項目がストア・バッフ
ァ184およびロード・バッファ182内に割り振られ、ロードした値を受け取
るためのレジスタ用の項目はレジスタ・ファイル150およびROB 164内
に割り振られる。これらの項目は第1レベル・リタイヤの対象にはならないが、
トレース・バッファ114内の同様の項目は最終リタイヤまで割り振られたまま
になる。したがって、再実施時に項目の再割当ては行われない。ストア・バッフ
ァまたはロード・バッファがいっぱいである場合、それぞれIキャッシュ104
からのストア命令またはロード命令は、ある項目が解放されるまでリネーム/割
振りユニット150を通過することはない。しかし、トレース・バッファから再
実行中のロード命令またはストア命令はリネーム/割振りユニット150を通過
することになる。
れる前にスレッドT1内のストアMXが実行される。しかし、同時実行であるの
で、時間順序では、ロードMXの前または後にストアMXを実行することができ
る。時間順序でロードMXの前にストアMXが実行される場合、ロードMXの推
論実行はストアMXに関して正しい順序で行われることになる。プログラム順序
でストアMXの前にあるすべての命令がリタイヤされた場合、ロードMXがメモ
リ位置MXから正しい値をロードすることが確実になる。この正しい値は、適正
順序プロセッサによってスレッドが実行された場合にロードされたと思われる値
である。プログラム順序でストアMXの前にあるすべての命令がリタイヤされた
わけではない場合、ストアMX用のデータが間違っている可能性が常にある。
ロードMXの推論実行はストアMXに関して正しい順序で行われず、ロードMX
が正しい値をロードするという保証はまったくない。正しい値がたまたまメモリ
位置MX(またはストアMXが最終リタイヤされるまでストアMXを保持するス
トア・バッファ項目のデータ・フィールド)にあるのは単に偶然にすぎないだろ
う。実行の最終的な正確さを保証するため、MOB 178は、スレッド間のメ
モリ・データの一貫性を保証するための様々な機構を含む。
れ、ストア命令がある場合にどのストア命令が最接近先行一致ストア命令(CE
MSI)であるかを判定する。「一致」とは、ロード命令と同じアドレスを有す
ることを意味する。「先行」とは、CEMSIがプログラム順序でロード命令よ
り前であることを意味する。「最接近」とは、CEMSIと実行すべきロード命
令との間に他の一致ストア命令がまったくないことを意味する。先行一致ストア
命令が1つだけ存在する場合、それがCEMSIになる。
らそのデータを読み取る。CEMSIが存在しない場合、ロード命令はデータ・
キャッシュ176、L2キャッシュ、メイン・メモリなどのメモリからそのデー
タを取る。ストア・バッファ184またはメモリからのデータはMUX192を
通過し、スレッドIDおよびinstrIDによって指定されたトレース・バッ
ファ114内の項目に書き込まれる。また、このデータは、PRIDによって指
定されたレジスタ・ファイル152内のレジスタにも書き込むことができる。ま
た、このデータは、キャッシュ規則(たとえば、ライトバック、ライトスルーな
ど)に応じてデータ・キャッシュ176に記憶することもできる。MUX 19
2は、データ・キャッシュ176、L2キャッシュ、メイン・メモリなどのメモ
リをバイパスすることができるので、バイパスになる。
較を行うために、各ストア・バッファ184の各項目に異なる比較器が関連付け
られている。図25の比較器320は一例であり、ストア・バッファ184A内
の項目SBID1のストア・アドレスとロード命令アドレスを受け取る。導体3
22ならびに他の比較器からの出力導体はMOB制御回路302に接続される。
ESI)のLBIDを指し示す。CESIは、ロード命令と同じスレッドIDを
有するストア・バッファ内にある。CEMSIが存在する場合、それは、CES
Iになるかまたはプログラム順序でCESIより前になる。リネーム/割振りユ
ニット150は、プログラム内のストア命令およびロード命令の順序を追跡し、
SBID値およびLBID値を供給する。これらは、導体126を介してトレー
ス・バッファ114に書き込むことができる。一実施形態では、ロード命令に関
するCESIがまったく存在しない場合、その命令に関連するロードSBIDは
まったく存在しない。これは、トレース内の第1のメモリ命令がロードである場
合に発生する。有効ロードSBIDがまったく存在しないことを示すためにリネ
ーム/割振りユニット150が所与の信号を送信することを含み、このような状
況を処理するために様々な技法を使用することができる。後述するアレイ・ラッ
プアラウンド・ビットはこの目的に使用することができる。
れている。SBIDフィールド内のロードSBID値はロード・バッファ184
A内に示されている。たとえば、LBID項目1のSBIDフィールド内の2は
、ストア・バッファ184A内の項目SBID2にあるストア命令がLBID項
目1内のロード命令に関するCESIを保持することを示している。ストア0、
ストア1、ストア2、ロード0という命令はロード1より古い、すなわち前のも
のである。ストア3、ストア4、ロード2という命令はロード1より新しい、す
なわち後のものである。
2が判定するための様々な方法がある。この方法の例については図27に関連し
て説明するが、同図ではストア・バッファ184A、184B、184C、18
4DだけがMOB 178内のストア・バッファであり、スレッドA、B、C、
Dにそれぞれ関連付けられている。プログラム順序がスレッドA、スレッドB、
スレッドC、スレッドDであると想定する。この例では、実行すべきロード命令
はロード・バッファ182C内にある。CESIが存在し、ストア・バッファ1
84C内にある。
362、364、366、368は、比較器が比較を実行できるようにする制御
信号を供給する。様々な実施形態では、制御回路302は、(1)各ストア・バ
ッファ内のすべての項目用の比較器をイネーブルにするか、(2)プログラム順
序でロード命令のスレッドIDと同じであるかまたはそれより前のスレッドID
を有するストア・バッファ内にある比較器のみをイネーブルにするか、あるいは
(3)プログラム順序でロード命令より前の項目に関連する比較器のみをイネー
ブルにする。
SIであるかを判定する。図27では、ストア・バッファ184Cの上部部分内
のストアMX命令がCEMSIになる。ストアMX命令がストア・バッファ18
4C内にない場合、CEMSIは、ストア・バッファ184B内のストアMX命
令になるだろう。比較器および一致判定ロジック356がCEMSIが存在する
かどうかを判定する間に、CEMSIが存在しない場合に用意すべきデータ・キ
ャッシュ176(および他のメモリ)内でルックアップが行われる可能性がある
。一致判定ロジック356はデータ経路制御ロジック390を含み、これはMU
X 192がメモリまたはストア・バッファからのデータを渡すかどうかを制御
するための信号を導体370で供給する。
れる。一方は、ストア・バッファ内のストア命令の優先順位を判定するためのも
のである。もう一方は、ストア・バッファの優先順位を判定するためのものであ
る。これらの判定はいずれの順序で行うこともできる。桁上げ連鎖構造は、スト
ア・バッファ内の優先順位の判定の際に使用することができる。たとえば、一実
施形態では、ロード命令と同じスレッドIDを有するもの以外の各ストア・バッ
ファごとに、一致ストア命令がある場合にどの一致ストア命令がプログラム順序
で最も新しいかが判定される。ロード命令と同じスレッドIDを有するストア・
バッファの場合、一致命令がある場合にどの一致命令がプログラム順序でCES
Iに最も近い(等しいものを含む)かが判定される。次に、一致命令を有するス
トア・バッファのうち、どのストア・バッファがプログラム順序でロード命令の
スレッドIDに最も近いスレッドIDを有するかが判定される。
最初は、SBID値が大きいストア命令の方が新しい。しかし、ストア命令が割
振り解除され、割り振られるにつれて、末尾は結局、折り返すことになり、先頭
は末尾より大きいSBID項目を指し示すことになる。一実施形態では、末尾が
最高値から最低SBID値へ移行すると、ラップアラウンド・ビットが切り替え
られ、最接近一致判定ロジック356に供給される。
、(同じスレッドまたはそれより新しいスレッドから)プログラム順序でそれよ
り後のロード命令がある場合に、どのロード命令がストア命令と同じアドレスを
有するかを判定する。ストアSBIDによって指し示された最接近後続ロード命
令(CLLI)は、考慮可能な最も早いロード命令を示す。
項目ごとに異なる比較器が関連付けられている。比較器の1つは図26に示す比
較器324である。単に一例にすぎないが、比較器324はロード・バッファ1
82Aの項目LBID1に関連付けられている。比較器324は、一方の入力で
ストア命令のアドレスを受け取り、もう一方の入力でロード・バッファ182A
内の項目LBID1のロード・アドレス・フィールド内のアドレスを受け取る。
出力導体326上の信号は、両方のアドレスが同じであるかどうかを通知する。
導体326ならびに他の比較器からの出力導体はMOB制御回路302に接続さ
れている。比較器(比較器324など)は、後述するように、ストア命令の状況
ビットとロード・バッファ内の状況ビットとの比較も行うことができる。
182A〜182D内のロード命令アドレスが実行すべきスト命令のアドレスと
比較され、一致判定ロジック356は、ロード命令を再実施すべきかどうかを判
定する。一実施形態では、一致判定ロジックは、どのロード命令を再実施すべき
かをトレース・バッファに示すための信号を導体194上に供給する再実施トリ
ガ・ロジック394を含む。一実施形態では、一致判定ロジック356は、CL
LIから始めて、ストア命令とロード命令との一致について考慮する。様々なア
ルゴリズムを使用することができる。スレッド管理ロジック124は、プログラ
ム順序で実行中のストア命令のスレッドIDより後のスレッドIDを示す。一実
施形態では、すべての比較器が使用可能になっている。他の実施形態では、プロ
グラム順序でロード命令のスレッドIDと等しいかまたはそれより後のスレッド
IDを有するロード・バッファ内の導体だけが使用可能になる。さらに他の実施
形態では、CLLIおよびその後の命令に関連するロード・バッファ内の導体だ
けが使用可能になる。考慮すべきスレッドは、ロード・バッファ内のロード命令
がプログラム順序でストア命令より後になっているかに関する判定前、判定後、
あるいは判定中に決定することができる。
出回路は、ロード・バッファに関連する比較器と、一致判定ロジック356の一
部分と、関連の制御回路とを含む。他の実施形態では、この検出回路は多少異な
る回路を含むことができるだろう。推論エラーを検出するための検出回路が実行
パイプライン内にあることは必須ではない。データ経路制御ロジックおよび再実
施トリガ・ロジックに関連して異なる一致判定ロジックを使用することができる
だろう。
関する状況フィールド(SBヒット、SBID、スレッドID、再実施計数値(
使用する場合))が考慮される。状況フィールドは、ロード命令がそのデータを
メモリ(たとえば、データ・キャッシュ176)から獲得したかまたはストア・
バッファのデータ・フィールドから獲得したかを示す。SBヒット・フィールド
は、たとえば、データがメモリから得られた場合に0を有し、データがストア・
バッファから得られた場合に1を有する。SBIDフィールドとスレッドIDフ
ィールドは、そこからデータが得られたストア命令のSBIDとスレッドIDを
保持する。ストア命令のスレッドIDは、必ずしも、アドレス一致が存在するロ
ード命令のスレッドIDではない。ロード命令のスレッドIDはロード・バッフ
ァ内では暗黙のものである。再実施計数値フィールド(使用する場合)は、どの
再実施が含まれるかを示す。(SBヒットが0である場合、SBIDフィールド
、スレッドIDフィールド、再実施計数値フィールド内のデータは無意味なもの
になる。)
94によりロード・バッファからロード命令のスレッドIDによって識別される
トレース・バッファに通知され、そのロード命令とすべての従属命令はそのトレ
ース・バッファから再実施される。instrIDとスレッドIDは、どの命令
が再実施されるかを示すために導体194を通して渡される。
フィールド、スレッドIDフィールド、再実施計数値フィールド(使用する場合
)の値は、再実施をトリガするかどうかを制御する。第1のケースでは、特定の
ロード命令に関する状況フィールドのスレッドIDはストア命令のスレッドID
と等しく、特定のロード命令の状況フィールド内のSBIDはストア命令のSB
IDと一致する。この第1のケースでは、ロード命令の再実施計数値が状況フィ
ールド内の再実施計数値より大きい場合にそのロード命令が再実施される。再実
施計数値が存在しない場合(ストア命令は一度に1回しか再実施できないため)
、ロード命令は再実施される。
IDと等しいが、状況フィールド内のSBIDはストア命令のSBIDと一致し
ない。この第2のケースでは、状況フィールド内のSBIDがストア命令のSB
IDより小さい場合にそのロード命令が再実施され、状況フィールド内のSBI
Dがストア命令のSBIDより大きい場合にそのロード命令は再実施されない。
。これはまれなケースであると予想される。単純にするため、一実施形態では、
(プログラム順序に反する可能性がある場合でも)ロード命令が再実施される。
これは間違った再実施である可能性がある。ロード命令は、再実施されると、正
しいストア・データを受け取ることになる。他の手法を使用することもできるが
、このようなまれなケースに妥当なものよりかなり複雑なものである可能性があ
る。
リガされない。SBヒット=1である場合、状況フィールドのスレッドIDはス
トア命令のスレッドIDと一致し、状況フィールドのSBIDはストア命令のS
BIDと一致する。このケースでは、再実施が行われ、再実施したロード命令は
そのデータを新しい項目またはメモリから受け取る。
セットされる。しかし、他のスレッドからのロードによって、そのスレッド内の
ストア命令に関連するデータ・フィールドからデータが取られている可能性があ
る。スレッド管理ロジック124は制御回路302に信号を送信する。一実施形
態では、スレッドがリセットされると、リセットされたスレッドのスレッドID
が(おそらくリセットされたスレッドに対応するロード・バッファは除く)すべ
てのロード・バッファ内のすべてのロードと比較される。状況フィールド内のス
レッドIDがリセットされたスレッドのスレッドIDと一致する場合、ロード命
令に関する再実施がトリガされる。ロード命令は適切なトレース・バッファから
再実施される。
施形態では、レジスタ値が変更されたことを示すトレース・バッファ内のレジス
タ比較に応答してストア命令が再実施される。たとえば、図12および図13を
参照すると、トレース・バッファ114A内のinstrID4およびinst
rID5はストア命令であり、レジスタR1〜r4に依存するものとして示され
ている。
を有することは可能である。複雑なロジックを回避するための1つの手法では、
制御回路302が複数のロード・アドレス一致が存在する場合を検出し、トレー
ス内で最も早いロード以降のすべての命令を再実行させる。
ック134は、命令を最終リタイヤすべきであることを示す信号をトレース・バ
ッファ114およびMOB184に供給する。(instrIDおよびスレッド
IDによって識別される)トレース・バッファ内の項目の割振りが解除される。
ロード命令の場合には、(スレッドIDおよびLBIDによって識別される)ロ
ード・バッファ内の項目の割振りが解除される。ロード命令の場合には、最終リ
タイヤが完了する。ストア命令の場合には、割振り解除の前にデータ・フィール
ド内のデータをメモリにコミットしなければならない。ストア・バッファ内の項
目の割振り解除と、それ故の最終リタイヤは、そのストアが完了したという確認
を受け取るまで行われない。あるいは、確認前にその項目の最終リタイヤを行う
ことができるが、確認を受け取るまでその項目の再割振りを行うことができない
。導体200上の信号は、ストアの最終リタイヤが完了し、次のスレッドを開始
することができる時期をスレッド管理ロジック124に示すことができる。
きであることを最終リタイヤ・ロジック134が示した時点で、SBリタイヤ済
みフィールド内のビットがアサートされる。SBリタイヤ済みフィールドがアサ
ートされると、関連命令が適正順序でメモリに書き込まれる。命令がメモリに書
き込まれたことをMOB 184Aが知ると直ちにSBリタイヤ済みフィールド
がアサート解除され、その命令の割振りが解除される。
備えた待ち行列にすることができる。命令の割振りが解除されると、先頭は移動
する。ロード・バッファ184Aおよびトレース・バッファ114では、リタイ
ヤと割振り解除が同時に行われる場合もある。最終リタイヤ・ロジック134は
、導体136および140を介して信号を供給する。デマルチプレクサ188は
、ロード・バッファ182またはストア・バッファ184のうちの一方がリタイ
ヤ信号を受け取ることになることを選択する。デマルチプレクサ188は任意選
択のものであり、ロード・バッファ182およびストア・バッファ184内のイ
ネーブル・ポートで置き換えることができるだろう。
めにツリー構造を使用する。このツリー構造では、プログラム順序(リタイヤ順
序でもある)は上から下に流れ、右側のノードはプログラム順序で左側のノード
より早い。ルートはプログラム順序で最初のものである。ツリーとは抽象概念で
あり、ツリー構造はそのツリーを実施する回路である。
図4および図5のスレッドT2が示すように)逆方向分岐が行われなかったかま
たは関数が呼び出されなかったと想定して、スレッドは次の命令から始まる。こ
のように行う場合、スレッド(ノード)の見地によると、そのスレッドの子ノー
ドのプログラム順序は、スレッドが開始(作成)された順序の逆になる。たとえ
ば、図6では、時間順序ではスレッドT2の実行がスレッドT3の実行前に始ま
るが、プログラム順序ではスレッドT3がスレッドT2の前に行われる。
ある。すなわち、(1)ツリーのルートにあるスレッドは、そのスレッドがリタ
イヤされると除去される。ルートにあるスレッドがリタイヤされると、プログラ
ム順序で次のスレッド(ノード)がルートになり、それに応じてノードの再割当
てが行われる。(2)プログラム順序で最後のスレッドはツリーから除去され、
プログラム順序でより上位にあり、ツリーに追加すべきスレッドのためのスペー
スができる。これに関して、ツリーは後入れ先出し法(LIFO)スタックとし
て動作する。(3)その親スレッドのプログラム・カウンタが開始計数値から終
了計数値までの範囲の外にあることが発見されると、スレッドはリセットされ、
それによりツリーから除去することができる。逆方向分岐で子スレッド(たとえ
ば、図6および図29のスレッドT4)が作成される場合、開始計数値は逆方向
分岐のターゲットになり、終了計数値は逆方向分岐命令におけるプログラム・カ
ウンタ値になる。関数呼出し後に開始されたスレッドもリセットすることができ
る。というのは、このようなことが起こるのは極めてまれなことであるが、関数
からの復帰がまったく存在しないからである。関数からの復帰がまったく存在し
ない可能性を処理するための手法の1つは、この可能性を無視し、事象(2)の
ようにそれがプログラム順序の最下位になると結局、システムにツリーからスレ
ッドを除去させることである。スレッドがツリーから除去されると、そのスレッ
ドに割り振られた資源(トレース・バッファ、ストア・バッファ、ロード・バッ
ファなど)の割振りが解除される。
ドを含み、スレッド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になる。
順序では、スレッドは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の関数はツリーのノードで実行することができる。
位置決めされる。(ただし、スレッド管理ロジック124によって決定されたプ
ログラム順序は変わらない可能性がある。)あるスレッドは、プログラム順序で
ツリー内の次のスレッドを結合するかまたはそのプログラム計数値と一致する場
合に終了する。スレッドの子が1つだけである場合、それはプログラム順序で次
のスレッドになる。たとえば、図33では、スレッドT2はプログラム順序でツ
リー内の次のスレッドになる。
ー構造からまたはツリー構造の回路から直接に、情報を獲得する。ツリー構造と
、スレッド管理ロジック124の他のロジックおよび最終リタイヤ・ロジック1
34のロジックとの間にデコード回路が存在する可能性がある。アレイ198は
必須ではない場合がある。
供する。すなわち、(1)ツリーはリタイヤ順序を指定し、(2)ツリーは前述
のようにたとえばMOB 178が使用するプログラム順序を指定し、(3)ツ
リーは他のスレッドの開始命令を示すことによりスレッドの終了点を指定し、(
4)ツリーはどの資源が使用可能であり、どの資源が割振り解除されているかを
示すことによりスレッド資源割振りの際に使用する。
サ100はプロセッサ50と同様のものである。しかし、トレース・バッファ3
00は唯一のトレース・バッファであり、MOB 310は唯一のMOBである
。プロセッサ50は、複数スレッドを処理するように設計されていない。したが
って、プロセッサ100にはスレッド管理ロジックは不要である。トレース・バ
ッファ300は、たとえばトレース・バッファ114Aと同様のものにすること
ができるが、マルチスレッド特有の構成要素は不要である。たとえば、導体21
6および出力レジスタ・ファイル210は不要になるだろう。周知の回路を含む
様々な回路を使用して推論エラーを検出することができる。MOB 310はた
とえばMOB 178Aと同様のものにすることができるが、マルチスレッド特
有の特徴は不要である。たとえば、ロード・バッファではスレッドIDフィール
ドは不要になるだろう。プロセッサ100の他の構成要素は、マルチスレッド化
関連の特徴を除去するためにプロセッサ50内のそれぞれの構成に関して多少変
更される可能性がある。トレース・バッファ300およびMOB 310は様々
な推論ならびにその際のエラーからの回復に関連して使用することができる。ト
レース・バッファにより、最終リタイヤ前に可能な再実施のために、多数の命令
をパイプライン外部に保持することができる。
きるだろう。その場合、スレッド管理ロジック124は必ず同じスレッドIDを
プログラム順序で維持することができるだろう。あるいは、スレッド管理ロジッ
ク124は使用不能にすることができるだろう。非マルチスレッドの場合、唯一
のトレース・バッファ114と唯一のMOB 178が使用される。あるいは、
複数のトレース・バッファを結合してより大きいトレース・バッファにすること
ができ、複数のMOBを結合してより大きいMOBにすることができるだろう。
02を含むマルチプロセッサ(MP)チップである。マルチパイプライン・ユニ
ット400は、パイプライン全体(たとえば、各パイプラインごとに別々のリネ
ーム/割振りユニット)がマルチパイプライン・ユニット402の各パイプライ
ン0、1、・・・、Wとともに含まれるという点で図2の共用資源パイプライン
108とは異なる。(WはXと等しいかあるいはそれより大きいかまたは小さい
ものにすることができる。)そうではない場合、プロセッサ400はプロセッサ
50と本質的に同じであるかまたはプロセッサ50とは非常に異なる可能性があ
る。他のプロセッサは、マルチパイプライン・ユニット402の何らかの特徴と
、パイプライン108の何らかの特徴を含むことができる。
ることができる。図38を参照すると、単に一例にすぎないが、プロセッサ50
はコンピュータ・システム430の一部にすることができる。システム430は
第2のプロセッサ434も含むことができる。オンチップの第2レベル(L2)
キャッシュはプロセッサ50内に含まれていてもよい。プロセッサ50は、プロ
セッサ・バス442を介してメモリ・コントローラ440とやりとりすることが
できる。メモリ・コントローラ440はバス452および454を介してメイン
・メモリ446および周辺装置448とやりとりすることができる。
、レジスタ・リネームを使用しないプロセッサで使用することができるだろう。
このような場合、レジスタ・リネームに含まれる構成要素(たとえば、リネーム
/割振りユニット150)は、リネーム関連特徴を除去するために変更すること
ができるだろう。
に様々な他の回路および詳細を使用することができるだろう。さらに、サイズ、
待ち時間などの点で、様々な設計上の兼ね合いが存在する可能性がある。たとえ
ば、(たとえば、予約ステーション、レジスタ・ファイル、ROB内など)実行
経路内のバッファが大きすぎる場合、最大動作クロック周波数は低減しなければ
ならない可能性がある。ここに例示する構成要素は、様々な技法に応じて設計し
構築することができる。
可能性がある。導体によっては、例示したように連続的なものではなく、むしろ
中間構造によって分割することができる。図中のボックスの枠は例示のためのも
のである。実際の装置はこのように定義された境界を備えた構成要素を含まなけ
ればならないわけではないだろう。例示した構成要素の相対サイズは実際の相対
サイズを示唆するためのものではない。矢印は、所与の実施形態における所与の
データ・フローを示すが、データ要求など、すべての信号を示すわけではない。
論理ハイ信号が前述されている場合には論理ロー信号によって置き換えることが
でき、その逆も可能である。
ができる。あるいは、たとえば、トレース・バッファは実行パイプラインとは異
なるチップ上に置くことができるだろう。
限定されないが、間接接続または間接結合を含むことができる。「応答」という
用語および関連用語は、1つの信号または事象がある程度他の信号または事象の
影響を受けるが、必ずしも完全または直接的に影響を受けるわけではないことを
意味する。ある構成要素を含む「可能性がある」、含む「ことができるだろう」
、あるいは含む「ことが好ましい」と本明細書に記載されている場合、その特定
の構成要素を含むことが必須であるわけではない。
合せを使用できるだろう。
から他の多くの変形形態が可能であることが分かるだろう。したがって、本発明
の範囲を定義するものは、それに対する補正を含む、特許請求の範囲である。
である。
ある。
表現である。
図表現である。
す図表表現である。
部分を示す図表表現である。
よび変更レジスタの一実施形態を示す図である。
を示す図である。
形態を示す流れ図である。
内の位置および特定のレジスタを示す図表表現である。
を示す図表表現である。
を示す図表表現である。
力レジスタ・ファイルとともに使用する比較器および再実施トリガ・ロジックの
ブロック図である。
別MOBを示すブロック図である。
現である。
現である。
ック図表現である。
ック図表現である。
点t2における図29のスレッド内の関係を示すツリーである。
点t2における図29のスレッド内の関係を示すツリーである。
Claims (15)
- 【請求項1】 ロード・バッファとストア・バッファとを含むメモリ・オー
ダ・バッファ(MOB)を含み、前記MOBは異なるスレッド内のロード命令と
ストア命令とのデータの一貫性を維持するようにロード命令とストア命令を順序
付け、前記スレッドのうちの少なくとも1つが前記スレッドのうちの少なくとも
1つの他のスレッドに依存するプロセッサ。 - 【請求項2】 前記スレッドの動的作成を制御するスレッド管理ロジックを
さらに含む請求項1に記載のプロセッサ。 - 【請求項3】 プログラム順序およびリタイヤ順序の表示を行うスレッド管
理ロジックをさらに含む請求項1に記載のプロセッサ。 - 【請求項4】 複数スレッドが最終リタイヤ時にリタイヤ順序で前記MOB
からリタイヤされる請求項3に記載のプロセッサ。 - 【請求項5】 すべての命令が推論エラーなしで実行されたかまたはリセッ
トしたスレッドの一部であったことが保証された後で、複数スレッドが最終リタ
イヤ時にリタイヤ順序で前記MOBからリタイヤされる請求項3に記載のプロセ
ッサ。 - 【請求項6】 前記ストア・バッファがメモリに記憶すべきデータを保持す
るフィールドを含む請求項1に記載のプロセッサ。 - 【請求項7】 ロード・バッファが、ロード命令が前にメモリからデータを
受け取ったかまたは前記ストア・バッファ内のデータを受け取ったことに関する
表示を含む状況フィールドを含む請求項1に記載のプロセッサ。 - 【請求項8】 ロード・バッファが、そこから前記ロード命令が前にデータ
を受け取ったストア・バッファ項目のストア・バッファ識別番号(SBID)に
関する表示を含む状況フィールドを含む請求項1に記載のプロセッサ。 - 【請求項9】 ロード・バッファが、そこから前記ロード命令が以前データ
を受け取ったストア命令のスレッド識別番号に関する表示を含む状況フィールド
を含む請求項1に記載のプロセッサ。 - 【請求項10】 複数スレッドの少なくとも一部分を同時に実行する実行パ
イプラインであって、前記スレッドのうちの少なくとも1つが前記スレッドのう
ちの少なくとも1つの他のスレッドに依存し、前記実行パイプラインがロード命
令およびストア命令を順序付けるメモリ・オーダ・バッファを含む実行パイプラ
インと、 ロード・バッファ内のロード命令に関連する推論エラーを検出する検出回路と を含むプロセッサ。 - 【請求項11】 再実施トリガ回路をさらに含む請求項10に記載のプロセ
ッサ。 - 【請求項12】 前記実行パイプラインの外にあって、最終リタイヤまで前
記ロード命令およびストア命令を保持するトレース・バッファをさらに含む請求
項10に記載のプロセッサ。 - 【請求項13】 前記検出回路が前記実行パイプラインに含まれる請求項1
0に記載のプロセッサ。 - 【請求項14】 複数スレッドのロード命令を保持するロード・バッファと
、 前記スレッドのストア命令を保持するストア・バッファと、 実行すべき前記ロード命令のうちの1つの命令のアドレスと前記ストア・バッ
ファ内の前記ストア命令のうちの少なくとも1つの命令のアドレスとを比較する
比較回路と、 前記ロード命令がメモリからデータを読み取るかまたは前記ストア・バッファ
の1つからデータを読み取るかを判定するデータ経路制御ロジックと を含むメモリ・オーダ・バッファを含むプロセッサ。 - 【請求項15】 複数スレッドのロード命令を保持するロード・バッファと
、 前記スレッドのストア命令を保持するストア・バッファと、 実行すべき前記ストア命令のうちの1つの命令のアドレスおよび状況ビットと
前記ロード命令のうちの少なくとも1つの命令のアドレスおよび状況ビットとを
比較する比較回路と、 前記比較に基づいて前記ロード命令のうちの1つまたは複数の命令を再実施す
べきかどうかを判定する検出ロジックと を含むメモリ・オーダ・バッファを含むプロセッサ。
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)
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)
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)
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 |
-
1997
- 1997-12-16 US US08/991,734 patent/US6463522B1/en not_active Expired - Lifetime
-
1998
- 1998-12-11 KR KR10-2000-7006659A patent/KR100388952B1/ko not_active IP Right Cessation
- 1998-12-11 EP EP98963874A patent/EP1040423A4/en not_active Withdrawn
- 1998-12-11 WO PCT/US1998/026409 patent/WO1999031594A1/en active IP Right Grant
- 1998-12-11 AU AU19111/99A patent/AU1911199A/en not_active Abandoned
- 1998-12-11 CN CNB98813652XA patent/CN100392622C/zh not_active Expired - Fee Related
- 1998-12-11 BR BR9813653-4A patent/BR9813653A/pt not_active Application Discontinuation
- 1998-12-11 JP JP2000539422A patent/JP3957456B2/ja not_active Expired - Fee Related
- 1998-12-16 TW TW087120949A patent/TW425528B/zh not_active IP Right Cessation
-
2002
- 2002-08-01 US US10/211,892 patent/US20020194457A1/en not_active Abandoned
Cited By (3)
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 |