JP2004520634A - ロード命令を処理するための方法および装置 - Google Patents
ロード命令を処理するための方法および装置 Download PDFInfo
- Publication number
- JP2004520634A JP2004520634A JP2001528797A JP2001528797A JP2004520634A JP 2004520634 A JP2004520634 A JP 2004520634A JP 2001528797 A JP2001528797 A JP 2001528797A JP 2001528797 A JP2001528797 A JP 2001528797A JP 2004520634 A JP2004520634 A JP 2004520634A
- Authority
- JP
- Japan
- Prior art keywords
- stage
- load
- instruction
- load instruction
- pipeline
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims description 44
- 238000000034 method Methods 0.000 title claims description 19
- 230000007704 transition Effects 0.000 claims description 47
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000001427 coherent effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006698 induction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- 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/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- 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
-
- 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
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3875—Pipelining a single stage, e.g. superpipelining
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
Abstract
プロセッサが、順不同(out−of−order)かつ投機的なロード命令のための正確なトラップ処理を実行する。プロセッサは、ロードバッファおよびロードアネックスを含む共用構造(shared scheme)においてロード命令の年齢の追跡を続ける。全ての正確な例外が、ロードパイプラインのTステージで検出される。キャッシュにヒットするロード命令に関するデータおよび制御情報は、同じ或いは先の命令パケットにおける全ての例外が検出されるまで、A1、A2、A3、およびTパイプラインステージの間、ロードアネックスにステージされる。他の全てのロード命令からのデータおよび制御情報は、ロードデータが回収された後にロードアネックスにステージされる。例外が生じると、例外を引き起こした命令と同じ命令パケットの全てのロードがキャンセルされる。例外を引き起こした命令より若いロード命令も全てキャンセルされる。ロード命令の年齢は、命令のパイプラインステージを追跡して決定される。トラップが起こると、非ゼロの年齢インジケーターをもつ全てのロード命令がキャンセルされる。
Description
【0001】
クロス・リファレンス
本明細書は、1998年12月12日に出願された米国特許出願第09/204,480号(名称:「A Multiple−Thread Processor for Threaded Software Applications」、発明者:Marc TremblayおよびWilliam Joy)に関連し、言及することをもって本明細書の一部とする。
【0002】
本明細書は、1999年10月1日に出願された米国特許出願第09/411,824号(名称:「A Method for Facilitating Precise Trap Handling with Speculative and Out−of−Order Loads」、発明者:Marc Tremblay、Jeffrey Meng Wah Chan、Subramania Sudharsanan、Sharada Yeluri、及びBiyu Pan)に関連し、言及することをもって本明細書の一部とする。
【0003】
発明の背景
発明の分野
本発明は、正確なトラップ処理を実行するプロセッサにおける順不同(out−of−order)かつ投機的なロード命令の処理、追跡、および管理に関連する。
【0004】
特に、ロードバッファ及びアネックスがロード命令によって回収されたデータを共用し、ロード命令の年齢を追跡する機能、並びにロード命令がTrapパイプラインステージまでその実行を完了する前に、先に発行された命令が正確なトラップを引き起こした場合、ロード命令を無効にする機能を共用することに関する。
【0005】
関連分野の説明
マルチスレッド処理において、様々な処理アプリケーションのための自動化されたシステムは、複数の事象を同時に対処する或いは同時に処理し得る。1つの処理は制御のスレッドまたは「スレッド」と呼び、システム内の独立した動的動作における処理の基本的な単位である。プログラムは少なくとも1つのスレッドを有する。同時処理を実行するシステムは、通常は多くのスレッドを有し、その内のあるものは一過性であり、またあるものは持続性である。マルチプロセッサ間で実行するシステムは真の同時スレッドを可能にする。単一プロセッサシステムは、通常はプロセッサの実行のタイムスライシングによって得られ、複数のスレッド間で共用される仮想の同時スレッドを有するだけである。
【0006】
マルチスレッドをサポートするために特別に設計されたプログラム言語がある。このような言語には、抽象演算装置であるJava仮想マシン(商標)を用いて有利に実行するJava(商標)プログラム言語がある。Java仮想マシンは、一度に複数のスレッドを実行することができる。マルチスレッドは、共用メインメモリに存在するJava値およびオブジェクトにおいて動作するJavaコードを独立して実行する。マルチスレッドは、1つのハードウエアプロセッサのタイムスライシング或いは多くのハードウエアプロセッサのタイムスライシングによって、複数のハードウエアプロセッサを用いてサポートされ得る。1990年に、サン・マイクロシステムズ社のプログラマーが汎用プログラム言語を開発した。このプログラム言語は、「Java(商標)プログラム言語」として知られる。「Java(商標)」、「Sun」、「Sun Microsystems」、および「Sun Logo」は米国およびその他の国に所在するサン・マイクロシステムズ社の登録商標である。「UltraSPARC I」および「UltraSPARC II」を含む「All SPARC(商標)」はライセンス許可の下で使用され、米国およびその他の国に所在するSPARC International社の商標である。商標「SPARC」を付した製品は、サン・マイクロシステムズ社によって開発されたアーキテクチャに基づいている。
【0007】
発明の要約
out−of−orderかつ投機的なロード命令のための正確なトラップ処理を容易にするための方法がロード命令の年齢(age)を追跡する。ロード命令の年齢は、連続したパイプラインステージにおいてロード命令が実行されているステージによって決定される。このロード命令の年齢は、ロード命令における指定された情報がデータキャッシュまたはメインメモリから回収されるまで、ロードバッファにおけるロードバッファ年齢インジケータで追跡される。このロードバッファ年齢インジケータは第1の複数のビットを含む。一実施例では、第1の複数のビットのそれぞれが、A1、A2、A3、及びTパイプラインステージの1つに対応する。
【0008】
情報が回収された後、情報及びロード命令がアネックスに送られる。ロードバッファ年齢インジケータにおけるビットが1ビット右にシフトし、3ビットがアネックス年齢インジケータに格納される。アネックス年齢インジケータは、第2の複数のビットを含む。一実施例では、第2の複数のステージビットのそれぞれは、A2、A3、及びTパイプラインステージの1つに対応する。
【0009】
この方法は、正確なトラップが起こった時に決定する。正確なトラップが起こると、ロード命令がトラッピング命令によって発行されたか否かを決定する。ロード命令がトラッピング命令によって発行されたか否かは、ロード命令における指定されたデータが回収されなかった場合はロードバッファ年齢インジケータを検査し、データが回収された場合はアネックス年齢インジケータを検査して決定する。好適な年齢インジケータが、ロード命令がその実行を全てのパイプラインステージで完了する前にトラッピング命令がトラップされたことを示す場合、ロード命令は、トラッピング命令と同じ或いはそれより若く、ロード命令は無効にされる。一実施例では、ロード命令の年齢は、好適な年齢インジケータは非ゼロの値を含むか否かによって決定される。値が非ゼロの場合は、ロード命令は正確なトラップが起きた時に無効にされる。ロード命令がアネックスに送られた場合、アネックスの有効ビットをリセットすることによって無効にされる。その他の場合、ロードバッファのロード命令に関連する有効ビットをリセットすることによって無効にされる。無効にされることよってロード命令が効果的にキャンセルされる。
【0010】
ロード命令における指定されたデータであるロードデータは、アネックスに送られるまでその他の機能ユニットにバイパスすることができない。
【0011】
一実施例では、上記したようにプロセッサがout−of−orderかつ投機的なロード命令のための正確なトラップ処理をするための方法を実行するように構成されている。このプロセッサは、メインメモリおよび複数のプロセシングユニットを含む。このプロセッサは、ロードバッファおよびロードアネックスを含む共用構造において、ロード命令の年齢の追跡を続ける。全ての正確な例外がロードパイプラインのTステージにおいて検出される。キャッシュにヒットするロード命令に関するデータおよび制御情報は、同じ或いはそれより先の命令パケットにおける全ての例外が検出されるまで、A2、A3、およびTパイプラインステージの間、ロードアネックスにステージされる。他の全てのロード命令からのデータおよび制御情報は、ロードデータが回収された後にロードアネックスにステージされる。例外が起こると、例外を引き起こした命令と同じ命令パケットの全てのロード命令がキャンセルされる。例外を引き起こした命令より若い全てのロード命令もキャンセルされる。ロード命令の年齢は、その命令のパイプラインステージを追跡して決定する。トラップが起こると、非ゼロの年齢インジケータを有する全てのロード命令がキャンセルされる。
【0012】
好適な実施例の説明
添付の図面を用いた説明によって、当業者には本発明、本発明の目的、特徴、および利点が明らかになるであろう。異なった図面における同じ参照符号は、同一或いは類似の要素を表すものとする。
【0013】
図1を参照すると、プロセッサ100の模式的なブロック図の例が示されている。このプロセッサ100は、この図では2つのメディアプロセシングユニット110および112として示される、複数の独立した並列実行経路を含む、高度並列構造に基づいてマルチスレッド処理するための改良したアーキテクチャを有する。実行経路は、各スレッドに渡って並列に実行し、スレッド内に複数命令パラレル経路を含む。複数の独立した並列実行経路は、マルチスレッド環境に有利な特殊なデータ処理命令を含む命令のセットを実行する機能ユニットを含む。
【0014】
プロセッサ100のマルチスレッディングアーキテクチャは、マルチスレッドJAVA仮想マシンにおいてマルチスレッド処理システムの下で動作するJAVA言語などの言語を用いるマルチスレッド化アプリケーションの実行において使用するのに好都合である。例示したプロセッサ100は、2つの独立した並列実行経路を成すメディアプロセシングユニット110および112の2つの独立したプロセッシングユニットを含む。JAVAプログラム言語などのマルチスレッドをサポートする言語は2つのスレッドを生成し、ほとんどオーバーヘッドを負うことなくそれぞれを2つの並列な実行経路において実行する。マルチスレッド化プロセッサによって実行される特殊な命令には、アレイへのアクセスのための命令および不要部分の整理をサポートするための命令が含まれる。
【0015】
1つの集積回路チップによって具現されるプロセッサ100は、メインメモリとインターフェースをとるためのメモリインターフェース102と、ジオメトリ解凍部104と、2つのメディアプロセシングユニット110および112と、共用データキャッシュ106と、いくつかのコントローラとを含む。インターフェースコントローラは、1つのダイ上にメモリ機能、グラフィックス機能、および入出力ブリッジ機能の基本要素を集積することによってリアルタイム制約条件で相互的なグラフィックス環境をサポートする。各要素は相互に接続され、また広帯域幅の低い待ち時間の通信チャネルでプロセッサコアと接続され、複数の広帯域幅データストリームを効率的かつ短い応答時間で管理する。インターフェースコントローラは、UltraPort Architecture Interconnect (UPA)コントローラ116と周辺要素相互接続(PCI)コントローラ120とを含む。図示されているメモリインターフェース102は、ダイレクトランバスDRAM(DRDRAM)コントローラである。共用データキャッシュ106は、メディアプロセシングユニット110および112の間で共用されるデュアルポート記憶装置であって、各ポートがそれぞれメディアプロセシングユニット110および112に割り当てられている。データキャッシュ106は、4ウエイセットアソシエイティブであって、ライトバックプロトコルに従い、フィルバッファ(図示せず)におけるヒットをサポートする。データキャッシュ106によって迅速なデータの共用が可能となり、それによって両メディアプロセシングユニット110および112間の複雑でエラーが発生し易いキャッシュコヒーレンスプロトコルが必要なくなる。
【0016】
プロセッサ100は順番に命令を出しそれを回収する。しかしながら、プロセッサ100は、命令がout−of−order実行して完了することが可能となる、動的な命令リスケジューリングおよびロード命令の投機的な実行を実施する。オペレーションがout−of−order命令実行を終了し、out−of−order命令実行で例外(exception)がたとえ生成されたとしても、プロセッサ100は正確なトラップ処理を実施し、トラップ後のin−order実行の外観を維持する。
【0017】
図2を参照すると、プロセッサ100のコアを示す模式的なブロック図である。メディアプロセシングユニット110および112はそれぞれ、命令キャッシュ210と、命令アライナー(instruction aligner)212と、命令バッファ214と、パイプライン制御ユニット(PCU)226と、分割レジスタファイル216と、複数の機能ユニットと、ロード/ストアユニット218とを含む。例示したプロセッサ100では、メディアプロセシングユニット110および112は、命令を実行するために複数の機能ユニットを用いている。メディアプロセシングユニット110のための機能ユニットは、3つのメディア機能ユニット(MFU)220と、1つの一般的な機能ユニット(GFU)222とを含む。
【0018】
それぞれ独立した並列実行経路110または112は、命令供給ブロックおよび命令準備ブロックを含む処理ユニットと、機能ユニット220および222と、レジスタファイル216とを有する。このレジスタファイル216は、複数の独立した並列実行経路の他の経路の処理ユニットから分離独立している。命令供給ブロックは個々の独立した並列実行経路のための個別の命令キャッシュ210を含むが、複数の独立した並列実行経路は、マルチスレッドがデータを時々共有するため、1つのデータキャッシュ106を共用する。データキャッシュ106はデュアルポートであるため、1サイクルで実行経路110および112の両方におけるデータアクセスが可能である。独立したプロセッサ要素110および112がデータキャッシュ106を共用することによって、データ処理が簡潔化し、キャッシュ協調プロトコルの必要性およびプロトコルの制御におけるオーバーヘッドが回避できるという利点がある。
【0019】
命令キャッシュ210に加えて、実行経路における命令供給ブロックは、命令アライナー212と命令バッファ214とを含み、それらによってレジスタファイル216へのアクセスを準備するべく、4つの命令からなる完全な命令グループが正確にフォーマットされ整列される。個々の実行経路は、複数のレジスタファイルセグメント224に物理的に分割された1つのレジスタファイル216を含む。それぞれのレジスタファイルセグメント224は、複数の機能ユニットの特定の機能ユニットと対応する。常に、各機能ユニットに割り当てられたレジスタファイルセグメントはそれぞれ同じ内容を含む。マルチポートレジスタファイルは、ポートの数の二乗に比例する回路によって占有される領域部分のみが通常は金属である。プロセッサ100は、複数の分離独立したレジスタファイルに分割されたレジスタファイル構造を有し、改良されたレイアウト効率を有するレイアウト構造を形成している。全てのレジスタファイル構造216の読み出しポートは、別個のレジスタファイルに割り当てられている。個々のレジスタファイルのそれぞれは、全レジスタファイル構造の書き込みポートの合計数に応じた書き込みポートを有する。書き込みは完全にブロードキャストされるため、各レジスタファイルは全てコヒーレンスを有する。
【0020】
メディア機能ユニット220は、複数の単一命令マルチデータ(MSIMD)メディア機能ユニットである。メディア機能ユニット220はそれぞれ、並列16ビットデータを処理する能力がある。様々な並列16ビット演算は、加算、乗算−加算、桁送り、比較などを含むプロセッサ100のための単一命令マルチデータ能力を実現する。メディア機能ユニット120は、デジタル信号プロセッサ(DSP)に接続され、それと共に動作する。各メディア機能ユニット220は、個別のサブ命令ストリームを有するが、3つ全てのメディア機能ユニット220が同期して実行するため、サブ命令はパイプラインステージを経てロックステップ(lock−step)に進む。
【0021】
プロセッサ100の動作中にトラップが起こり得る。トラップは、所定の条件の発生に応答してプロセッサ100によって行われる特権ソフトウエア(privileged software)への制御のベクトル転送である。トラップは内部の事象または外部の事象によって起こり得る。トラップを引き起こす外部条件は割り込みである。割り込みは、機能ユニットの外部の装置によって機能ユニットに送られたサービスのための要求である。割り込みは、割り込みを受け取る機能ユニットの命令ストリームに同期していない。内部的なトラップは例外によって起こり得る。例外は、機能ユニット内の命令の実行によって引き起こされる。例外は、ソフトウエアの介入なしで機能ユニットが現在の命令ストリームの実行を継続できなくなるような状態である。機能ユニットはある種の例外を無視するようにセットすることが可能である。しかしながら、機能ユニットは、例外が無視できないタイプの例外のような場合、その例外を無視するようにはセットできず、その例外によってトラップが引き起こされる。
【0022】
トラップの種類の中には、命令を実行しようとして生成される特殊なタイプの「正確なトラップ」がある。通常の実行を不可能にするような条件が発生すると、命令が例外を生成する場合がある。このような例外によって正確なトラップを生成される場合がある。正確なトラップは、特定の命令によって誘導され、トラップ誘導性の命令によってプロセッサ100のプログラム管理下の状態が変わる前に生成される。ロード命令の場合、トラップ誘導性のロードの結果がレジスタファイルに書き込まれる前にトラップが起こるという意味である。
【0023】
手動或いはコンパイラのいずれかによってプロセッサ100に対する命令が生成される場合、命令は命令のパケットに編成される。この命令パケットは、1からN個の命令を含み得る。このNは、メディアプロセシングユニット110および112に含まれる機能ユニットの数である。少なくとも一実施例では、命令パケットは4つの命令を含む。各命令パケットは、実行を完了するか或いは例外を引き起こす。
【0024】
任意の命令が修復可能なエラーを生成する場合、プロセッサ100は例外が発生したときの装置の状態に戻して、正確なトラップ処理を実施して動作を再開する。正確なトラップが起こった場合、トラップを誘導した命令パケットの前に出された全ての命令パケットの実行を完了して正確な状態にする。さらに、プロセッサ100は、たとえトラップ誘導命令の前にout−of−order実行を終了していたとしても、トラップを誘導した命令パケットの後に出された全ての命令パケットを実行しないようにする。従って、例外の時にプロセッサ100はそれ自体をその状態に復元する。このような復元の後に実行が再開され得る。動作は、トラッピング命令から或いはトラッピング命令の後の命令から再開され得る。このような方式では、プロセッサ100は、他のパケット命令或いはその他のパケットに対するout−of−order命令実行を終了してから例外を生成するが、エラーが修正可能なエラーである場合(すなわち、エラーが例外時の装置の状態の復元を妨害しない場合)は、プロセッサ100が正確な状態で動作を再開することを可能にする命令を供給する。
【0025】
ところが、プロセッサ100は、破局的なエラーに対しては正確なトラップ処理を実行することができない。破局的なエラーとは、ハードウエアの誤作動によって生じ、エラーの特性によって例外時の装置の状態に復元することができないエラーである。装置の状態が復元できないため、破局的なエラーによって引き起こされた例外の後の実行は再開されない可能性がある。このような破局的なエラーの例には、修正不可能なバスのパリティーエラーがある。
【0026】
図3はロード命令に対する正確なトラップ処理の説明に適しており、ロード命令が投機的にスケジュールされ、かつout−of−order命令を実行するようにスケジュールされ得ることを理解できるであろう。プロセッサ100は、ロードおよびストアメモリの演算を処理するための専用のロード/ストアパイプ300を保持する。図3は、専用のロード/ストアパイプ300の一実施例を例示する模式的なタイミングダイアグラムである。ロード/ストアパイプ300は、3つの開始ステージと、複数の実行ステージと、2つの終了ステージを含む9つの連続するステージを含む。
【0027】
図2および図3を参照すると、GFUロード/ストアパイプ300の動作は、パイプ制御ユニット(PCU)226によって制御されている。ロード/ストアパイプライン300の開始ステージの第1は、フェッチステージ310(Fステージ)である。Fステージ310で、プロセッサ100は命令キャッシュ210から命令を取り出す。取り出された命令は、命令アライナー212において整列され、整列ステージ312(Aステージ)すなわち開始ステージの第2のステージで命令バッファ214に送られる。
【0028】
開始ステージの第3のステージである解読ステージ314(Dステージ)では、PCU226は命令パケットから取り出して整列した命令を解読する。Dステージ314で、PCU226は現在のロード命令に関する情報をLSU219に送る。4つのレジスタファイルセグメント224はそれぞれ、浮動小数点データ或いは整数データのいずれかを保持する。レジスタファイル216は解読ステージ314で読み出される。
【0029】
Dステージ314ではまた、スコアボード(図示せず)が読み出されて更新される。スコアボードは、終了していないロードについての情報を備えた構造である。スコアボードは、任意の終了していないロード処理と若い命令との間のハードウエアインターロックを実現する。この若い命令は、その終了していないロード処理に従属性のデータ/出力を含む。新しい命令がDステージ314に入ると、新しい命令の元および宛先レジスタのオペランドと全てのスコアボードエントリとを比較する。終了していないロードに対して割り当てられたスコアボードにおけるエントリの数は、後述するLSUのロードバッファ400(図4)におけるエントリの数に等しい。少なくとも一実施例では、スコアボードは少なくとも5つのロード命令エントリを含む。ロード命令に対するそれぞれのスコアボードエントリは、終了していない命令がどの程度古いかを示す5ビットのステージフィールドを有する。このステージフィールドは以下に記載するロードバッファ状態語410(図4)に類似している。このステージビットは、パイプラインステージが実行される度に右に1つシフトする。ロード命令のステージフィールドがWBステージ(1B’0000’)を示す前にトラップが検出される場合は、スコアボードエントリが無効になる。
【0030】
解読ステージ314の後、実行ステージが実行される。実行ステージの第1のステージであるEステージ332では、GFU222が各ロード命令およびストア命令のアドレスを計算する。Eステージ332ではまた、命令パケットにおける全てのロード命令およびストア命令が、実行のためにロード/ストアユニット(LSU)218に送られる。
【0031】
図3および図4を参照すると、残っているパイプラインステージ334、336、338、360、および362でのロード命令の処理が以下に記載するように行なわれる。Eステージ332からTステージ360まで、LSU218はロード命令の年齢(age)の追跡を続ける。EステージでLSU218に送られると、ロード命令はLSUのロードバッファ400の中に配置される。少なくとも一実施例では、ロードバッファ400は5つのエントリを有するため、最大5つのロード命令を維持することができる。少なくとも一実施例では、以下に記載するようにプロセッサ100は4つのヒットミスの下で1つのヒットを許容するため、5つのエントリが必要である。これを達成するために、上記したように、5つのロードエントリがロードバッファ400にサポートされ、5つのロードエントリがスコアボードによってサポートされている。
【0032】
「ヒットアンダーヒットミス(hit under miss)」は図2に示されている。LSU218がロード処理で要求された情報のアイテムにアクセスしようとすると、このアイテムがデータキャッシュ106にすでに存在しているか、或いは存在していないかの何れかである。存在する場合は、キャッシュのヒットが起こる。LSU218によって要求された時にデータキャッシュ106にアイテムが存在しない場合は、キャッシュミスが起こる。キャッシュミスが起こると、LSU218によって要求された情報は、LSU218がアクセスできるように、メモリから取り出してデータキャッシュ106に入れなければならない。キャッシュミスの後のデータキャッシュ106にストアされていない情報のアイテムの探索は、比較的時間がかかるプロセスである。プロセッサ100は、先に提示されたロード命令がキャッシュミスする前に、後で提示されたロード命令がヒットし、データキャッシュ106から情報を得ることを許容する。この状態を、「ヒットアンダーヒットミス」と呼ぶ。
【0033】
図3および図4を参照し、ロード/ストアパイプ300の実行ステージでのロード命令処理の説明に戻る。各ロード命令に沿って、LSU218が、命令が無効であるか否かおよびロード命令のパイプラインの年齢の追跡を続ける。有効ビット420は、ロード命令がトラップによってキャンセルされていないことを示す。言い換えれば、有効ビットのリセットによって効果的にロード命令がキャンセルされる。年齢の情報は状態語410に保持される。それぞれの状態語410A、410B、410C、410D、および410Eは4つのステージビットを含み、それぞれが、C/A1、A2、A3、またはTパイプラインステージの1つに対応する。LSUはあるパイプラインステージから次のパイプラインステージへの移行を検出し、それぞれの移行時にステージビットを1つ右の位置にシフトする。ロード命令の年齢は以下の表1に示されているように状態語410において追跡される。
【0034】
【表1】
【0035】
LSU218は、ロード/ストアパイプライン300のC/A1ステージ334におけるデータキャッシュ106にアクセスする。ロードがデータキャッシュ106にヒットする場合、データはデータキャッシュ106から戻されて同じサイクルでPCU226に送られる。LSU218はまた、ロードの年齢を有する状態語410をPCU226に送る。ロードがC/A1ステージ334のデータキャッシュ106にヒットすると、状態語はC/A1パイプラインステージ334に対応するロードの年齢を示す値1B’1000’を反映する。このようにキャッシュにヒットすると、LSU218がデータキャッシュ106にアクセスするC/A1ステージ334で、ロードデータがPCU226に戻される。しかしながら、正確なトラップ処理を確実にするために、ヒットからの結果は、命令パケットにおけるその他全ての命令が完了するまでレジスタファイル216に書き込むことができない。ロードがC/A1ステージ334でヒットすると、得られるデータは、残っている実行ステージが完了するまでレジスタファイル216に書き込むことができない。
【0036】
ロードがデータキャッシュ106でキャッシュミスすると、LSU218がメインメモリインターフェース102(図1)からデータを得た後にのみ、データがLSU218からPCU226に戻される。従って、ロード命令は、データを回収するまでLSU218のロードバッファに保持される。これとは対照的に、データが回収された後、全てのロード命令およびそれらの回収されたデータがLDX500に送られる。この方式では、ロードバッファ400およびLDX500は、ロード命令の年齢を追跡し、古い命令がトラックされた時に若い命令を無効にする機能を共用する。以下に説明するが、一般にこの機能は、Tステージ360における、トラッピング命令と同じ命令パケットの全てのロード命令に関連する有効ビットのリセット、トラッピング命令より若いその他全てのロード命令に対する有効ビットのリセットを含む。
【0037】
図5を参照すると、PCU226によってロードデータが受け取られた後、そのロードデータはすぐにはレジスタファイル224に書き込まれない。すぐに書込まれると、投機的かつout−of−orderにロード命令を実行する装置のデータがコヒーレンスでなくなる可能性がある。その代わりに、ロードデータおよび関連するロード情報がロードアネックス(LDX)500に入る。ロードデータが十分なサイクル数の間、LDX500にステージされ、それによってロード命令が、そのデータがレジスタファイル224にブロードキャストされる前にTパイプラインステージに到達できるようなる。ロードデータがLDDX500にステージされている間、データを別の機能ユニットにバイパスすることができる。トラップが検出されなかった場合は、ロードデータをTステージ360でレジスタファイルにブロードキャストする。トラップがTパイプラインステージ360(図3)で検出される。
【0038】
少なくとも一実施例では、ロードデータはレジスタファイル224にブロードキャストされる前に3つのステージの間、LDX500にステージされる。3サイクルの間、LDX500にロードデータをステージすることによって、ロード命令自体か、或いはロード命令と同じ或いは古い命令パケットのその他の命令のいずれかによって引き起こされた全ての正確な例外が、ロード命令のキャンセルを引き起こす。すなわち、ロード命令がWBステージ362に到達する前にトラップが検出されると、ロード命令に対する有効ビットがリセットされる。ロードデータがレジスタファイル224にブロードキャストされると、レジスタファイル224は局所的にデータを保持し、次のクロックサイクルでレジスタを更新する。
【0039】
図5は、ldx1、ldx2、ldx3、およびldx4の名称がつけられた4つのエントリを含むLDX500を例示する。これらのLDXエントリはFIFOキューとして働き、LSU218からの新しいロードデータはldx1に配置され、古いロードデータはldx4からレジスタファイル224に書き込まれる。レジスタファイル224はロード命令のための専用の書き込みポートを有するため、ロードデータは各クロックサイクル毎にFIFOLDX500において1エントリー下にシフトする。
【0040】
図5には、ロードデータがステージされのは3サイクルの間であるが、ldx1、ldx2、ldx3、およびldx4の4つのエントリを含むLDX500が例示されている。4番目のエントリldx4を用いて、レジスタファイル224にロードデータを書き込む。ロードデータがレジスタファイル224に書き込まれたサイクルと同じサイクルではそのデータにアクセスすることができないため、追加のldx4エントリが、ロードデータが書き込まれている間そのロードデータを保持する。
【0041】
それぞれのLDXエントリldx1、ldx2、ldx3、およびldx4は、ステージフィールド510を含む。このステージフィールド510は、それがPCU226に入る時にLDXエントリに関連するロードバッファ状態語410の値から得られる。ステージフィールド510の値は、LDXエントリにおけるロード命令の年齢を示す。特定のロード命令に対する状態語410がLDX500に送られると、C/A1ステージは適切でなくなる。その代わりに、ロードデータはC/A1ステージの早い時期にLDX500によって受け取られるため、データキャッシュ106にヒットしないロード命令からのデータが、特定のロード命令がTステージを完了するまでレジスタファイル224に書き込まれないようにするために、LDX500は、A2、A3、およびTステージの間の特定のロード命令の年齢の追跡のみが必要である。従って、特定のロード命令に対する4ビット状態語410におけるステージビットは、1ビット右にシフトし、A2、A3、およびTステージに対応するステージビットは、特定のロード命令に関連するLDXエントリの3ビットステージフィールド510に配置される。PCU226は、あるパイプラインステージから次のステージへの移行を検出する。このような移行の度に、PCU226はステージフィールド510におけるステージビットを1ビット右にシフトする。最大でも1回に1ビットのみがロード命令に対してセットされるため、右へのシフトによって効果的に最後のステージに対するステージビットをリセットし、現在のステージに対するステージビットをセットする。LDXが追跡する各パイプラインステージに対するステージフィールド510の値を以下の表2に示す。
【0042】
【表2】
【0043】
表2に例示されているように、あるパイプラインステージから別のパイプラインステージへのそれぞれの逐次的な移行のための連続的な右シフト方式は、WBステージ362およびロード命令がWBステージ362に到達した後に起こる全てのステージに対して全てのステージビットがリセットされるという効果がある。ロード命令がWBステージ362に到達する前にトラップが検出されると、そのロード命令は無効となる。少なくとも一実施例では、LDXエントリにおける有効ビット520は、PCU226がトラップを検出したことを示すpcu_trap信号によってリセットされる。
【0044】
それぞれのLDXエントリldx1、ldx2、ldx3、およびldx4はまた、dsizeフィールドを含む。このdsizeフィールドは、ロード命令に関連するデータが64ビットのデータワードであるか或いは32ビットのデータワードであるかを示す。
【0045】
C/A1ステージ334、A2ステージ336、およびA3ステージ338の後の次の2つの実行ステージは、追加の実行ステージである。C/A1ステージ334で、キャッシュデータ106にアクセスしてそれらのデータを戻したロード命令の場合、データがA2ステージ336およびA3ステージ338でLDX500にステージされる。トラップ状態が、ロード/ストアパイプライン300のTステージ360でPCU226によって検出される。
【0046】
図3に例示されているように、ロード/ストアパイプ300の2つの終了ステージは、トラップ処理ステージ360(Tステージ)と、得られたデータがレジスタファイル216にライトバックされるライトバックステージ362(WBステージ)とを含む。これらのステージの各ステージにおけるロード命令の処理を後述する。
【0047】
図5に例示されているように、PCU226がトラップを検出すると、トラップ信号pcu_trapを生成する。Tステージ360でこの信号を用いて、トラッピング命令より若いロード命令に対するLDXエントリの有効ビットをリセットする。さらに、PCU226がpcu_trap信号をLSU218に送り、次にLSU218が、トラッピング命令より若いロードバッファ400の全てのロード命令に対する有効ビット420A、420B、420C、420D、および420Eをリセットする。LDX500では、トラップが検出された時にロード命令がWB362ステージに到達していない場合にのみロード命令が無効となる。言い換えれば、WB362ステージに到達した全てのロード命令は、そのパイプラインのトラップステージ或いはその前のステージでロード命令がにキャンセルされていないのが明らかなため、ロード命令の年齢にかかわらずレジスタファイル224に書き込むことができる。
【0048】
LSU218およびPCU226は、以下のように、ロード命令がトラッピング命令より若いか否かを決定する。LDXステージフィールド510およびロードバッファ状態語410はそれぞれ、ロード命令の年齢の追跡を続ける。LDX500は、最も早くてもLSU218がロード命令を受け取った1サイクル後にロード命令を受け取り、ステージフィールド510は、PCU226が1つ少ないステージの追跡を続けるため、状態語410より1ビット少ない。上記した表1および表2に示されているように、状態語410およびステージフィールド510はロード命令がWBステージ362に到達するまで常に非ゼロの値を有する。従って、PCU226およびLSU218は、トラップがT360ステージで検出されているため、ロード命令の年齢が非ゼロの場合、ロード命令がトラッピング命令より若いと決定する。
【0049】
LDX500では、ステージフィールド510が非ゼロの全てのLDXエントリldx1、ldx2、およびldx3に対する有効ビット520をリセットする。少なくとも一実施例では、トラップがサイクルNで発生すると、LDXエントリldx1、ldx2、およびldx3が1つ下のサイクルN+1にシフトする前に、有効ビット520がリセットされる。次に、PCU226では、ステージフィールド510における全てゼロの値は、ロードデータがTステージ360を過ぎて少なくともWBステージ362に到達しているため、ロードデータをレジスタファイル224にブロードキャストしても安全であることを示す。
【0050】
LSU218において、状態語410の値が全てゼロということは、比較的長時間に渡ってキャッシュミスが起こっていることを意味する。キャッシュミスしたまたは別の方法でそれらのデータが回収されなかったロード命令のみがロードバッファに保持され、キャッシュにヒットしたロード命令およびメモリインターフェース102から回収したデータを有するロード命令は上記したようにLDX500に送られる。ロードバッファ400におけるロード命令に対する状態語410における全てゼロは、ロード命令のパイプラインステージが完了してWBステージ362に移行した或いはWBステージ362を過ぎた時にキャッシュミスが起こったことを意味する。この場合、ロード命令はトラッピング命令より古いため、ロード命令をキャンセルする必要がない。これとは対照的に、LSU218は、PCU226からpcu_trap信号を受け取った時に、状態語410に非ゼロの値を有する全てのロード命令をキャンセルする。
【0051】
WBステージ362で、ロード/ストアパイプライン300のTステージ360からのデータが、レジスタファイル224にブロードキャストされる。レジスタファイル224は、そのデータを書き込む前に、WBステージフリップフロップラッチ(図示せず)にデータを保持する。
【0052】
本発明の特定の実施例を用いて説明してきたが、当業者であれば、本発明から逸脱することなく本明細書の開示に基づいて更なる変更や変形が可能であり、請求の範囲が本発明の範囲内であるそのような全ての変更や変形を含むことを理解できよう。
【0053】
【図面の簡単な説明】
【図1】
マルチスレッドプロセッサの一実施例を例示する模式的なブロック図である。
【図2】
マルチスレッドプロセッサの一実施例の要部を示す模式的なブロック図である。
【図3】
専用のロード/ストアパイプラインの一実施例を例示する模式的なタイミングダイアグラムである。
【図4】
ロード/ストアユニットの少なくとも1つの実施例のブロック図である。
【図5】
ロード命令に関する情報を共用するパイプ制御ユニットおよびロード/ストアユニットを例示する模式的なダイアグラムである。
クロス・リファレンス
本明細書は、1998年12月12日に出願された米国特許出願第09/204,480号(名称:「A Multiple−Thread Processor for Threaded Software Applications」、発明者:Marc TremblayおよびWilliam Joy)に関連し、言及することをもって本明細書の一部とする。
【0002】
本明細書は、1999年10月1日に出願された米国特許出願第09/411,824号(名称:「A Method for Facilitating Precise Trap Handling with Speculative and Out−of−Order Loads」、発明者:Marc Tremblay、Jeffrey Meng Wah Chan、Subramania Sudharsanan、Sharada Yeluri、及びBiyu Pan)に関連し、言及することをもって本明細書の一部とする。
【0003】
発明の背景
発明の分野
本発明は、正確なトラップ処理を実行するプロセッサにおける順不同(out−of−order)かつ投機的なロード命令の処理、追跡、および管理に関連する。
【0004】
特に、ロードバッファ及びアネックスがロード命令によって回収されたデータを共用し、ロード命令の年齢を追跡する機能、並びにロード命令がTrapパイプラインステージまでその実行を完了する前に、先に発行された命令が正確なトラップを引き起こした場合、ロード命令を無効にする機能を共用することに関する。
【0005】
関連分野の説明
マルチスレッド処理において、様々な処理アプリケーションのための自動化されたシステムは、複数の事象を同時に対処する或いは同時に処理し得る。1つの処理は制御のスレッドまたは「スレッド」と呼び、システム内の独立した動的動作における処理の基本的な単位である。プログラムは少なくとも1つのスレッドを有する。同時処理を実行するシステムは、通常は多くのスレッドを有し、その内のあるものは一過性であり、またあるものは持続性である。マルチプロセッサ間で実行するシステムは真の同時スレッドを可能にする。単一プロセッサシステムは、通常はプロセッサの実行のタイムスライシングによって得られ、複数のスレッド間で共用される仮想の同時スレッドを有するだけである。
【0006】
マルチスレッドをサポートするために特別に設計されたプログラム言語がある。このような言語には、抽象演算装置であるJava仮想マシン(商標)を用いて有利に実行するJava(商標)プログラム言語がある。Java仮想マシンは、一度に複数のスレッドを実行することができる。マルチスレッドは、共用メインメモリに存在するJava値およびオブジェクトにおいて動作するJavaコードを独立して実行する。マルチスレッドは、1つのハードウエアプロセッサのタイムスライシング或いは多くのハードウエアプロセッサのタイムスライシングによって、複数のハードウエアプロセッサを用いてサポートされ得る。1990年に、サン・マイクロシステムズ社のプログラマーが汎用プログラム言語を開発した。このプログラム言語は、「Java(商標)プログラム言語」として知られる。「Java(商標)」、「Sun」、「Sun Microsystems」、および「Sun Logo」は米国およびその他の国に所在するサン・マイクロシステムズ社の登録商標である。「UltraSPARC I」および「UltraSPARC II」を含む「All SPARC(商標)」はライセンス許可の下で使用され、米国およびその他の国に所在するSPARC International社の商標である。商標「SPARC」を付した製品は、サン・マイクロシステムズ社によって開発されたアーキテクチャに基づいている。
【0007】
発明の要約
out−of−orderかつ投機的なロード命令のための正確なトラップ処理を容易にするための方法がロード命令の年齢(age)を追跡する。ロード命令の年齢は、連続したパイプラインステージにおいてロード命令が実行されているステージによって決定される。このロード命令の年齢は、ロード命令における指定された情報がデータキャッシュまたはメインメモリから回収されるまで、ロードバッファにおけるロードバッファ年齢インジケータで追跡される。このロードバッファ年齢インジケータは第1の複数のビットを含む。一実施例では、第1の複数のビットのそれぞれが、A1、A2、A3、及びTパイプラインステージの1つに対応する。
【0008】
情報が回収された後、情報及びロード命令がアネックスに送られる。ロードバッファ年齢インジケータにおけるビットが1ビット右にシフトし、3ビットがアネックス年齢インジケータに格納される。アネックス年齢インジケータは、第2の複数のビットを含む。一実施例では、第2の複数のステージビットのそれぞれは、A2、A3、及びTパイプラインステージの1つに対応する。
【0009】
この方法は、正確なトラップが起こった時に決定する。正確なトラップが起こると、ロード命令がトラッピング命令によって発行されたか否かを決定する。ロード命令がトラッピング命令によって発行されたか否かは、ロード命令における指定されたデータが回収されなかった場合はロードバッファ年齢インジケータを検査し、データが回収された場合はアネックス年齢インジケータを検査して決定する。好適な年齢インジケータが、ロード命令がその実行を全てのパイプラインステージで完了する前にトラッピング命令がトラップされたことを示す場合、ロード命令は、トラッピング命令と同じ或いはそれより若く、ロード命令は無効にされる。一実施例では、ロード命令の年齢は、好適な年齢インジケータは非ゼロの値を含むか否かによって決定される。値が非ゼロの場合は、ロード命令は正確なトラップが起きた時に無効にされる。ロード命令がアネックスに送られた場合、アネックスの有効ビットをリセットすることによって無効にされる。その他の場合、ロードバッファのロード命令に関連する有効ビットをリセットすることによって無効にされる。無効にされることよってロード命令が効果的にキャンセルされる。
【0010】
ロード命令における指定されたデータであるロードデータは、アネックスに送られるまでその他の機能ユニットにバイパスすることができない。
【0011】
一実施例では、上記したようにプロセッサがout−of−orderかつ投機的なロード命令のための正確なトラップ処理をするための方法を実行するように構成されている。このプロセッサは、メインメモリおよび複数のプロセシングユニットを含む。このプロセッサは、ロードバッファおよびロードアネックスを含む共用構造において、ロード命令の年齢の追跡を続ける。全ての正確な例外がロードパイプラインのTステージにおいて検出される。キャッシュにヒットするロード命令に関するデータおよび制御情報は、同じ或いはそれより先の命令パケットにおける全ての例外が検出されるまで、A2、A3、およびTパイプラインステージの間、ロードアネックスにステージされる。他の全てのロード命令からのデータおよび制御情報は、ロードデータが回収された後にロードアネックスにステージされる。例外が起こると、例外を引き起こした命令と同じ命令パケットの全てのロード命令がキャンセルされる。例外を引き起こした命令より若い全てのロード命令もキャンセルされる。ロード命令の年齢は、その命令のパイプラインステージを追跡して決定する。トラップが起こると、非ゼロの年齢インジケータを有する全てのロード命令がキャンセルされる。
【0012】
好適な実施例の説明
添付の図面を用いた説明によって、当業者には本発明、本発明の目的、特徴、および利点が明らかになるであろう。異なった図面における同じ参照符号は、同一或いは類似の要素を表すものとする。
【0013】
図1を参照すると、プロセッサ100の模式的なブロック図の例が示されている。このプロセッサ100は、この図では2つのメディアプロセシングユニット110および112として示される、複数の独立した並列実行経路を含む、高度並列構造に基づいてマルチスレッド処理するための改良したアーキテクチャを有する。実行経路は、各スレッドに渡って並列に実行し、スレッド内に複数命令パラレル経路を含む。複数の独立した並列実行経路は、マルチスレッド環境に有利な特殊なデータ処理命令を含む命令のセットを実行する機能ユニットを含む。
【0014】
プロセッサ100のマルチスレッディングアーキテクチャは、マルチスレッドJAVA仮想マシンにおいてマルチスレッド処理システムの下で動作するJAVA言語などの言語を用いるマルチスレッド化アプリケーションの実行において使用するのに好都合である。例示したプロセッサ100は、2つの独立した並列実行経路を成すメディアプロセシングユニット110および112の2つの独立したプロセッシングユニットを含む。JAVAプログラム言語などのマルチスレッドをサポートする言語は2つのスレッドを生成し、ほとんどオーバーヘッドを負うことなくそれぞれを2つの並列な実行経路において実行する。マルチスレッド化プロセッサによって実行される特殊な命令には、アレイへのアクセスのための命令および不要部分の整理をサポートするための命令が含まれる。
【0015】
1つの集積回路チップによって具現されるプロセッサ100は、メインメモリとインターフェースをとるためのメモリインターフェース102と、ジオメトリ解凍部104と、2つのメディアプロセシングユニット110および112と、共用データキャッシュ106と、いくつかのコントローラとを含む。インターフェースコントローラは、1つのダイ上にメモリ機能、グラフィックス機能、および入出力ブリッジ機能の基本要素を集積することによってリアルタイム制約条件で相互的なグラフィックス環境をサポートする。各要素は相互に接続され、また広帯域幅の低い待ち時間の通信チャネルでプロセッサコアと接続され、複数の広帯域幅データストリームを効率的かつ短い応答時間で管理する。インターフェースコントローラは、UltraPort Architecture Interconnect (UPA)コントローラ116と周辺要素相互接続(PCI)コントローラ120とを含む。図示されているメモリインターフェース102は、ダイレクトランバスDRAM(DRDRAM)コントローラである。共用データキャッシュ106は、メディアプロセシングユニット110および112の間で共用されるデュアルポート記憶装置であって、各ポートがそれぞれメディアプロセシングユニット110および112に割り当てられている。データキャッシュ106は、4ウエイセットアソシエイティブであって、ライトバックプロトコルに従い、フィルバッファ(図示せず)におけるヒットをサポートする。データキャッシュ106によって迅速なデータの共用が可能となり、それによって両メディアプロセシングユニット110および112間の複雑でエラーが発生し易いキャッシュコヒーレンスプロトコルが必要なくなる。
【0016】
プロセッサ100は順番に命令を出しそれを回収する。しかしながら、プロセッサ100は、命令がout−of−order実行して完了することが可能となる、動的な命令リスケジューリングおよびロード命令の投機的な実行を実施する。オペレーションがout−of−order命令実行を終了し、out−of−order命令実行で例外(exception)がたとえ生成されたとしても、プロセッサ100は正確なトラップ処理を実施し、トラップ後のin−order実行の外観を維持する。
【0017】
図2を参照すると、プロセッサ100のコアを示す模式的なブロック図である。メディアプロセシングユニット110および112はそれぞれ、命令キャッシュ210と、命令アライナー(instruction aligner)212と、命令バッファ214と、パイプライン制御ユニット(PCU)226と、分割レジスタファイル216と、複数の機能ユニットと、ロード/ストアユニット218とを含む。例示したプロセッサ100では、メディアプロセシングユニット110および112は、命令を実行するために複数の機能ユニットを用いている。メディアプロセシングユニット110のための機能ユニットは、3つのメディア機能ユニット(MFU)220と、1つの一般的な機能ユニット(GFU)222とを含む。
【0018】
それぞれ独立した並列実行経路110または112は、命令供給ブロックおよび命令準備ブロックを含む処理ユニットと、機能ユニット220および222と、レジスタファイル216とを有する。このレジスタファイル216は、複数の独立した並列実行経路の他の経路の処理ユニットから分離独立している。命令供給ブロックは個々の独立した並列実行経路のための個別の命令キャッシュ210を含むが、複数の独立した並列実行経路は、マルチスレッドがデータを時々共有するため、1つのデータキャッシュ106を共用する。データキャッシュ106はデュアルポートであるため、1サイクルで実行経路110および112の両方におけるデータアクセスが可能である。独立したプロセッサ要素110および112がデータキャッシュ106を共用することによって、データ処理が簡潔化し、キャッシュ協調プロトコルの必要性およびプロトコルの制御におけるオーバーヘッドが回避できるという利点がある。
【0019】
命令キャッシュ210に加えて、実行経路における命令供給ブロックは、命令アライナー212と命令バッファ214とを含み、それらによってレジスタファイル216へのアクセスを準備するべく、4つの命令からなる完全な命令グループが正確にフォーマットされ整列される。個々の実行経路は、複数のレジスタファイルセグメント224に物理的に分割された1つのレジスタファイル216を含む。それぞれのレジスタファイルセグメント224は、複数の機能ユニットの特定の機能ユニットと対応する。常に、各機能ユニットに割り当てられたレジスタファイルセグメントはそれぞれ同じ内容を含む。マルチポートレジスタファイルは、ポートの数の二乗に比例する回路によって占有される領域部分のみが通常は金属である。プロセッサ100は、複数の分離独立したレジスタファイルに分割されたレジスタファイル構造を有し、改良されたレイアウト効率を有するレイアウト構造を形成している。全てのレジスタファイル構造216の読み出しポートは、別個のレジスタファイルに割り当てられている。個々のレジスタファイルのそれぞれは、全レジスタファイル構造の書き込みポートの合計数に応じた書き込みポートを有する。書き込みは完全にブロードキャストされるため、各レジスタファイルは全てコヒーレンスを有する。
【0020】
メディア機能ユニット220は、複数の単一命令マルチデータ(MSIMD)メディア機能ユニットである。メディア機能ユニット220はそれぞれ、並列16ビットデータを処理する能力がある。様々な並列16ビット演算は、加算、乗算−加算、桁送り、比較などを含むプロセッサ100のための単一命令マルチデータ能力を実現する。メディア機能ユニット120は、デジタル信号プロセッサ(DSP)に接続され、それと共に動作する。各メディア機能ユニット220は、個別のサブ命令ストリームを有するが、3つ全てのメディア機能ユニット220が同期して実行するため、サブ命令はパイプラインステージを経てロックステップ(lock−step)に進む。
【0021】
プロセッサ100の動作中にトラップが起こり得る。トラップは、所定の条件の発生に応答してプロセッサ100によって行われる特権ソフトウエア(privileged software)への制御のベクトル転送である。トラップは内部の事象または外部の事象によって起こり得る。トラップを引き起こす外部条件は割り込みである。割り込みは、機能ユニットの外部の装置によって機能ユニットに送られたサービスのための要求である。割り込みは、割り込みを受け取る機能ユニットの命令ストリームに同期していない。内部的なトラップは例外によって起こり得る。例外は、機能ユニット内の命令の実行によって引き起こされる。例外は、ソフトウエアの介入なしで機能ユニットが現在の命令ストリームの実行を継続できなくなるような状態である。機能ユニットはある種の例外を無視するようにセットすることが可能である。しかしながら、機能ユニットは、例外が無視できないタイプの例外のような場合、その例外を無視するようにはセットできず、その例外によってトラップが引き起こされる。
【0022】
トラップの種類の中には、命令を実行しようとして生成される特殊なタイプの「正確なトラップ」がある。通常の実行を不可能にするような条件が発生すると、命令が例外を生成する場合がある。このような例外によって正確なトラップを生成される場合がある。正確なトラップは、特定の命令によって誘導され、トラップ誘導性の命令によってプロセッサ100のプログラム管理下の状態が変わる前に生成される。ロード命令の場合、トラップ誘導性のロードの結果がレジスタファイルに書き込まれる前にトラップが起こるという意味である。
【0023】
手動或いはコンパイラのいずれかによってプロセッサ100に対する命令が生成される場合、命令は命令のパケットに編成される。この命令パケットは、1からN個の命令を含み得る。このNは、メディアプロセシングユニット110および112に含まれる機能ユニットの数である。少なくとも一実施例では、命令パケットは4つの命令を含む。各命令パケットは、実行を完了するか或いは例外を引き起こす。
【0024】
任意の命令が修復可能なエラーを生成する場合、プロセッサ100は例外が発生したときの装置の状態に戻して、正確なトラップ処理を実施して動作を再開する。正確なトラップが起こった場合、トラップを誘導した命令パケットの前に出された全ての命令パケットの実行を完了して正確な状態にする。さらに、プロセッサ100は、たとえトラップ誘導命令の前にout−of−order実行を終了していたとしても、トラップを誘導した命令パケットの後に出された全ての命令パケットを実行しないようにする。従って、例外の時にプロセッサ100はそれ自体をその状態に復元する。このような復元の後に実行が再開され得る。動作は、トラッピング命令から或いはトラッピング命令の後の命令から再開され得る。このような方式では、プロセッサ100は、他のパケット命令或いはその他のパケットに対するout−of−order命令実行を終了してから例外を生成するが、エラーが修正可能なエラーである場合(すなわち、エラーが例外時の装置の状態の復元を妨害しない場合)は、プロセッサ100が正確な状態で動作を再開することを可能にする命令を供給する。
【0025】
ところが、プロセッサ100は、破局的なエラーに対しては正確なトラップ処理を実行することができない。破局的なエラーとは、ハードウエアの誤作動によって生じ、エラーの特性によって例外時の装置の状態に復元することができないエラーである。装置の状態が復元できないため、破局的なエラーによって引き起こされた例外の後の実行は再開されない可能性がある。このような破局的なエラーの例には、修正不可能なバスのパリティーエラーがある。
【0026】
図3はロード命令に対する正確なトラップ処理の説明に適しており、ロード命令が投機的にスケジュールされ、かつout−of−order命令を実行するようにスケジュールされ得ることを理解できるであろう。プロセッサ100は、ロードおよびストアメモリの演算を処理するための専用のロード/ストアパイプ300を保持する。図3は、専用のロード/ストアパイプ300の一実施例を例示する模式的なタイミングダイアグラムである。ロード/ストアパイプ300は、3つの開始ステージと、複数の実行ステージと、2つの終了ステージを含む9つの連続するステージを含む。
【0027】
図2および図3を参照すると、GFUロード/ストアパイプ300の動作は、パイプ制御ユニット(PCU)226によって制御されている。ロード/ストアパイプライン300の開始ステージの第1は、フェッチステージ310(Fステージ)である。Fステージ310で、プロセッサ100は命令キャッシュ210から命令を取り出す。取り出された命令は、命令アライナー212において整列され、整列ステージ312(Aステージ)すなわち開始ステージの第2のステージで命令バッファ214に送られる。
【0028】
開始ステージの第3のステージである解読ステージ314(Dステージ)では、PCU226は命令パケットから取り出して整列した命令を解読する。Dステージ314で、PCU226は現在のロード命令に関する情報をLSU219に送る。4つのレジスタファイルセグメント224はそれぞれ、浮動小数点データ或いは整数データのいずれかを保持する。レジスタファイル216は解読ステージ314で読み出される。
【0029】
Dステージ314ではまた、スコアボード(図示せず)が読み出されて更新される。スコアボードは、終了していないロードについての情報を備えた構造である。スコアボードは、任意の終了していないロード処理と若い命令との間のハードウエアインターロックを実現する。この若い命令は、その終了していないロード処理に従属性のデータ/出力を含む。新しい命令がDステージ314に入ると、新しい命令の元および宛先レジスタのオペランドと全てのスコアボードエントリとを比較する。終了していないロードに対して割り当てられたスコアボードにおけるエントリの数は、後述するLSUのロードバッファ400(図4)におけるエントリの数に等しい。少なくとも一実施例では、スコアボードは少なくとも5つのロード命令エントリを含む。ロード命令に対するそれぞれのスコアボードエントリは、終了していない命令がどの程度古いかを示す5ビットのステージフィールドを有する。このステージフィールドは以下に記載するロードバッファ状態語410(図4)に類似している。このステージビットは、パイプラインステージが実行される度に右に1つシフトする。ロード命令のステージフィールドがWBステージ(1B’0000’)を示す前にトラップが検出される場合は、スコアボードエントリが無効になる。
【0030】
解読ステージ314の後、実行ステージが実行される。実行ステージの第1のステージであるEステージ332では、GFU222が各ロード命令およびストア命令のアドレスを計算する。Eステージ332ではまた、命令パケットにおける全てのロード命令およびストア命令が、実行のためにロード/ストアユニット(LSU)218に送られる。
【0031】
図3および図4を参照すると、残っているパイプラインステージ334、336、338、360、および362でのロード命令の処理が以下に記載するように行なわれる。Eステージ332からTステージ360まで、LSU218はロード命令の年齢(age)の追跡を続ける。EステージでLSU218に送られると、ロード命令はLSUのロードバッファ400の中に配置される。少なくとも一実施例では、ロードバッファ400は5つのエントリを有するため、最大5つのロード命令を維持することができる。少なくとも一実施例では、以下に記載するようにプロセッサ100は4つのヒットミスの下で1つのヒットを許容するため、5つのエントリが必要である。これを達成するために、上記したように、5つのロードエントリがロードバッファ400にサポートされ、5つのロードエントリがスコアボードによってサポートされている。
【0032】
「ヒットアンダーヒットミス(hit under miss)」は図2に示されている。LSU218がロード処理で要求された情報のアイテムにアクセスしようとすると、このアイテムがデータキャッシュ106にすでに存在しているか、或いは存在していないかの何れかである。存在する場合は、キャッシュのヒットが起こる。LSU218によって要求された時にデータキャッシュ106にアイテムが存在しない場合は、キャッシュミスが起こる。キャッシュミスが起こると、LSU218によって要求された情報は、LSU218がアクセスできるように、メモリから取り出してデータキャッシュ106に入れなければならない。キャッシュミスの後のデータキャッシュ106にストアされていない情報のアイテムの探索は、比較的時間がかかるプロセスである。プロセッサ100は、先に提示されたロード命令がキャッシュミスする前に、後で提示されたロード命令がヒットし、データキャッシュ106から情報を得ることを許容する。この状態を、「ヒットアンダーヒットミス」と呼ぶ。
【0033】
図3および図4を参照し、ロード/ストアパイプ300の実行ステージでのロード命令処理の説明に戻る。各ロード命令に沿って、LSU218が、命令が無効であるか否かおよびロード命令のパイプラインの年齢の追跡を続ける。有効ビット420は、ロード命令がトラップによってキャンセルされていないことを示す。言い換えれば、有効ビットのリセットによって効果的にロード命令がキャンセルされる。年齢の情報は状態語410に保持される。それぞれの状態語410A、410B、410C、410D、および410Eは4つのステージビットを含み、それぞれが、C/A1、A2、A3、またはTパイプラインステージの1つに対応する。LSUはあるパイプラインステージから次のパイプラインステージへの移行を検出し、それぞれの移行時にステージビットを1つ右の位置にシフトする。ロード命令の年齢は以下の表1に示されているように状態語410において追跡される。
【0034】
【表1】
【0035】
LSU218は、ロード/ストアパイプライン300のC/A1ステージ334におけるデータキャッシュ106にアクセスする。ロードがデータキャッシュ106にヒットする場合、データはデータキャッシュ106から戻されて同じサイクルでPCU226に送られる。LSU218はまた、ロードの年齢を有する状態語410をPCU226に送る。ロードがC/A1ステージ334のデータキャッシュ106にヒットすると、状態語はC/A1パイプラインステージ334に対応するロードの年齢を示す値1B’1000’を反映する。このようにキャッシュにヒットすると、LSU218がデータキャッシュ106にアクセスするC/A1ステージ334で、ロードデータがPCU226に戻される。しかしながら、正確なトラップ処理を確実にするために、ヒットからの結果は、命令パケットにおけるその他全ての命令が完了するまでレジスタファイル216に書き込むことができない。ロードがC/A1ステージ334でヒットすると、得られるデータは、残っている実行ステージが完了するまでレジスタファイル216に書き込むことができない。
【0036】
ロードがデータキャッシュ106でキャッシュミスすると、LSU218がメインメモリインターフェース102(図1)からデータを得た後にのみ、データがLSU218からPCU226に戻される。従って、ロード命令は、データを回収するまでLSU218のロードバッファに保持される。これとは対照的に、データが回収された後、全てのロード命令およびそれらの回収されたデータがLDX500に送られる。この方式では、ロードバッファ400およびLDX500は、ロード命令の年齢を追跡し、古い命令がトラックされた時に若い命令を無効にする機能を共用する。以下に説明するが、一般にこの機能は、Tステージ360における、トラッピング命令と同じ命令パケットの全てのロード命令に関連する有効ビットのリセット、トラッピング命令より若いその他全てのロード命令に対する有効ビットのリセットを含む。
【0037】
図5を参照すると、PCU226によってロードデータが受け取られた後、そのロードデータはすぐにはレジスタファイル224に書き込まれない。すぐに書込まれると、投機的かつout−of−orderにロード命令を実行する装置のデータがコヒーレンスでなくなる可能性がある。その代わりに、ロードデータおよび関連するロード情報がロードアネックス(LDX)500に入る。ロードデータが十分なサイクル数の間、LDX500にステージされ、それによってロード命令が、そのデータがレジスタファイル224にブロードキャストされる前にTパイプラインステージに到達できるようなる。ロードデータがLDDX500にステージされている間、データを別の機能ユニットにバイパスすることができる。トラップが検出されなかった場合は、ロードデータをTステージ360でレジスタファイルにブロードキャストする。トラップがTパイプラインステージ360(図3)で検出される。
【0038】
少なくとも一実施例では、ロードデータはレジスタファイル224にブロードキャストされる前に3つのステージの間、LDX500にステージされる。3サイクルの間、LDX500にロードデータをステージすることによって、ロード命令自体か、或いはロード命令と同じ或いは古い命令パケットのその他の命令のいずれかによって引き起こされた全ての正確な例外が、ロード命令のキャンセルを引き起こす。すなわち、ロード命令がWBステージ362に到達する前にトラップが検出されると、ロード命令に対する有効ビットがリセットされる。ロードデータがレジスタファイル224にブロードキャストされると、レジスタファイル224は局所的にデータを保持し、次のクロックサイクルでレジスタを更新する。
【0039】
図5は、ldx1、ldx2、ldx3、およびldx4の名称がつけられた4つのエントリを含むLDX500を例示する。これらのLDXエントリはFIFOキューとして働き、LSU218からの新しいロードデータはldx1に配置され、古いロードデータはldx4からレジスタファイル224に書き込まれる。レジスタファイル224はロード命令のための専用の書き込みポートを有するため、ロードデータは各クロックサイクル毎にFIFOLDX500において1エントリー下にシフトする。
【0040】
図5には、ロードデータがステージされのは3サイクルの間であるが、ldx1、ldx2、ldx3、およびldx4の4つのエントリを含むLDX500が例示されている。4番目のエントリldx4を用いて、レジスタファイル224にロードデータを書き込む。ロードデータがレジスタファイル224に書き込まれたサイクルと同じサイクルではそのデータにアクセスすることができないため、追加のldx4エントリが、ロードデータが書き込まれている間そのロードデータを保持する。
【0041】
それぞれのLDXエントリldx1、ldx2、ldx3、およびldx4は、ステージフィールド510を含む。このステージフィールド510は、それがPCU226に入る時にLDXエントリに関連するロードバッファ状態語410の値から得られる。ステージフィールド510の値は、LDXエントリにおけるロード命令の年齢を示す。特定のロード命令に対する状態語410がLDX500に送られると、C/A1ステージは適切でなくなる。その代わりに、ロードデータはC/A1ステージの早い時期にLDX500によって受け取られるため、データキャッシュ106にヒットしないロード命令からのデータが、特定のロード命令がTステージを完了するまでレジスタファイル224に書き込まれないようにするために、LDX500は、A2、A3、およびTステージの間の特定のロード命令の年齢の追跡のみが必要である。従って、特定のロード命令に対する4ビット状態語410におけるステージビットは、1ビット右にシフトし、A2、A3、およびTステージに対応するステージビットは、特定のロード命令に関連するLDXエントリの3ビットステージフィールド510に配置される。PCU226は、あるパイプラインステージから次のステージへの移行を検出する。このような移行の度に、PCU226はステージフィールド510におけるステージビットを1ビット右にシフトする。最大でも1回に1ビットのみがロード命令に対してセットされるため、右へのシフトによって効果的に最後のステージに対するステージビットをリセットし、現在のステージに対するステージビットをセットする。LDXが追跡する各パイプラインステージに対するステージフィールド510の値を以下の表2に示す。
【0042】
【表2】
【0043】
表2に例示されているように、あるパイプラインステージから別のパイプラインステージへのそれぞれの逐次的な移行のための連続的な右シフト方式は、WBステージ362およびロード命令がWBステージ362に到達した後に起こる全てのステージに対して全てのステージビットがリセットされるという効果がある。ロード命令がWBステージ362に到達する前にトラップが検出されると、そのロード命令は無効となる。少なくとも一実施例では、LDXエントリにおける有効ビット520は、PCU226がトラップを検出したことを示すpcu_trap信号によってリセットされる。
【0044】
それぞれのLDXエントリldx1、ldx2、ldx3、およびldx4はまた、dsizeフィールドを含む。このdsizeフィールドは、ロード命令に関連するデータが64ビットのデータワードであるか或いは32ビットのデータワードであるかを示す。
【0045】
C/A1ステージ334、A2ステージ336、およびA3ステージ338の後の次の2つの実行ステージは、追加の実行ステージである。C/A1ステージ334で、キャッシュデータ106にアクセスしてそれらのデータを戻したロード命令の場合、データがA2ステージ336およびA3ステージ338でLDX500にステージされる。トラップ状態が、ロード/ストアパイプライン300のTステージ360でPCU226によって検出される。
【0046】
図3に例示されているように、ロード/ストアパイプ300の2つの終了ステージは、トラップ処理ステージ360(Tステージ)と、得られたデータがレジスタファイル216にライトバックされるライトバックステージ362(WBステージ)とを含む。これらのステージの各ステージにおけるロード命令の処理を後述する。
【0047】
図5に例示されているように、PCU226がトラップを検出すると、トラップ信号pcu_trapを生成する。Tステージ360でこの信号を用いて、トラッピング命令より若いロード命令に対するLDXエントリの有効ビットをリセットする。さらに、PCU226がpcu_trap信号をLSU218に送り、次にLSU218が、トラッピング命令より若いロードバッファ400の全てのロード命令に対する有効ビット420A、420B、420C、420D、および420Eをリセットする。LDX500では、トラップが検出された時にロード命令がWB362ステージに到達していない場合にのみロード命令が無効となる。言い換えれば、WB362ステージに到達した全てのロード命令は、そのパイプラインのトラップステージ或いはその前のステージでロード命令がにキャンセルされていないのが明らかなため、ロード命令の年齢にかかわらずレジスタファイル224に書き込むことができる。
【0048】
LSU218およびPCU226は、以下のように、ロード命令がトラッピング命令より若いか否かを決定する。LDXステージフィールド510およびロードバッファ状態語410はそれぞれ、ロード命令の年齢の追跡を続ける。LDX500は、最も早くてもLSU218がロード命令を受け取った1サイクル後にロード命令を受け取り、ステージフィールド510は、PCU226が1つ少ないステージの追跡を続けるため、状態語410より1ビット少ない。上記した表1および表2に示されているように、状態語410およびステージフィールド510はロード命令がWBステージ362に到達するまで常に非ゼロの値を有する。従って、PCU226およびLSU218は、トラップがT360ステージで検出されているため、ロード命令の年齢が非ゼロの場合、ロード命令がトラッピング命令より若いと決定する。
【0049】
LDX500では、ステージフィールド510が非ゼロの全てのLDXエントリldx1、ldx2、およびldx3に対する有効ビット520をリセットする。少なくとも一実施例では、トラップがサイクルNで発生すると、LDXエントリldx1、ldx2、およびldx3が1つ下のサイクルN+1にシフトする前に、有効ビット520がリセットされる。次に、PCU226では、ステージフィールド510における全てゼロの値は、ロードデータがTステージ360を過ぎて少なくともWBステージ362に到達しているため、ロードデータをレジスタファイル224にブロードキャストしても安全であることを示す。
【0050】
LSU218において、状態語410の値が全てゼロということは、比較的長時間に渡ってキャッシュミスが起こっていることを意味する。キャッシュミスしたまたは別の方法でそれらのデータが回収されなかったロード命令のみがロードバッファに保持され、キャッシュにヒットしたロード命令およびメモリインターフェース102から回収したデータを有するロード命令は上記したようにLDX500に送られる。ロードバッファ400におけるロード命令に対する状態語410における全てゼロは、ロード命令のパイプラインステージが完了してWBステージ362に移行した或いはWBステージ362を過ぎた時にキャッシュミスが起こったことを意味する。この場合、ロード命令はトラッピング命令より古いため、ロード命令をキャンセルする必要がない。これとは対照的に、LSU218は、PCU226からpcu_trap信号を受け取った時に、状態語410に非ゼロの値を有する全てのロード命令をキャンセルする。
【0051】
WBステージ362で、ロード/ストアパイプライン300のTステージ360からのデータが、レジスタファイル224にブロードキャストされる。レジスタファイル224は、そのデータを書き込む前に、WBステージフリップフロップラッチ(図示せず)にデータを保持する。
【0052】
本発明の特定の実施例を用いて説明してきたが、当業者であれば、本発明から逸脱することなく本明細書の開示に基づいて更なる変更や変形が可能であり、請求の範囲が本発明の範囲内であるそのような全ての変更や変形を含むことを理解できよう。
【0053】
【図面の簡単な説明】
【図1】
マルチスレッドプロセッサの一実施例を例示する模式的なブロック図である。
【図2】
マルチスレッドプロセッサの一実施例の要部を示す模式的なブロック図である。
【図3】
専用のロード/ストアパイプラインの一実施例を例示する模式的なタイミングダイアグラムである。
【図4】
ロード/ストアユニットの少なくとも1つの実施例のブロック図である。
【図5】
ロード命令に関する情報を共用するパイプ制御ユニットおよびロード/ストアユニットを例示する模式的なダイアグラムである。
Claims (19)
- ロードバッファ及びアネックスを含み、順不同(out−of−order)かつ投機的なロード命令のための正確な例外の処理を容易にするプロセッサにおいて、ロード命令処理を共有する方法であって、
ロードバッファにおける第1の複数のステージビットを含むロードバッファ年齢インジケータでロード命令の年齢を追跡するステップと、
前記ロード命令における指定されたデータが回収されたか否かを決定するステップと、
前記ロード命令における前記指定されたデータが回収された場合、前記ロード命令、回収された前記データ、及び前記ロードバッファ年齢インジケータを前記ロードバッファからアネックスにおくるステップと、
前記ロード命令における指定されたデータが回収された場合、第2の複数のステージビットを含むアネックス年齢インジケータの中に前記第1の複数のステージビットをフォーマットするステップと、
前記ロード命令における指定されたデータが回収された場合、前記アネックスの前記アネックス年齢インジケータで前記ロード命令の年齢を追跡するステップと、
第2の命令が正確なトラップを引き起こしたことを検出するステップと、
前記正確なトラップが起きた時に、前記ロード命令が前記第2の命令の前に発行されたか否かを決定するステップと、
前記正確なトラップが起きた時に、前記ロード命令が前記第2の命令の前に発行されていない場合、前記ロード命令を無効にするステップとを含むことを特徴とする方法。 - 前記ロード命令が、複数の連続したパイプラインステージで実行され、
前記第1の複数のステージビットのそれぞれが、前記複数の連続したパイプラインステージに含まれる前記連続したパイプラインステージの異なった1つに対応し、
前記第2の複数のステージビットそれぞれが、前記複数のパイプラインステージに含まれる前記連続したパイプラインステージの異なった1つに対応することを特徴とする請求項1に記載の方法。 - 前記複数のパイプラインステージが、第1のパイプラインステージ、第2のパイプラインステージ、第3のパイプラインステージ、及び第4のパイプラインステージを含み、
前記第1の複数のステージビットが、前記第1のパイプラインステージに対応する第1のステージビット、前記第2のパイプラインステージに対応する第2のステージビット、前記第3のパイプラインステージに対応する第3のステージビット、及び前記第4のパイプラインステージに対応する第4のステージビットを含み、
前記第2の複数のステージビットが、前記第2のパイプラインステージに対応する第5のステージビット、前記第3のパイプラインステージに対応する第6のステージビット、及び前記第4のパイプラインステージに対応する第7のステージビットを含むことを特徴とする請求項2に記載の方法。 - ロードバッファ年齢インジケータでロード命令の年齢を追跡する前記ステップが、
前記ロード命令の実行が前記第1のパイプラインステージに入った時に前記第1のステージビットをセットするステップと、
前記ロード命令の実行が前記第1のパイプラインステージから前記第2のパイプラインステージに移行する時に第1の移行を検出するステップと、
前記第1の移行を検出した時に、前記第1のステージビットをリセットし前記第2のステージビットをセットするステップと、
前記ロード命令の実行が前記第2のパイプラインステージから前記第3のパイプラインステージに移行する時に第2の移行を検出するステップと、
前記第2の移行を検出した時に、前記第2のステージビットをリセットし前記第3のステージビットをセットするステップと、
前記ロード命令の実行が前記第3のパイプラインステージから前記第4のパイプラインステージに移行する時に第3の移行を検出するステップと、
前記第3の移行を検出した時に、前記第3のステージビットをリセットし前記第4のステージビットをセットするステップと、
前記ロード命令の実行が前記第4のパイプラインステージから移行する時に第4の移行を検出するステップと、
前記第4の移行を検出した時に、前記第1の複数のステージビットを含む全てのビットをリセットするステップとを含むことを特徴とする請求項3に記載の方法。 - 前記アネックス年齢インジケータで前記ロード命令の年齢を追跡する前記ステップが、
前記ロード命令の実行が前記第2のパイプラインステージに入った時に前記第5のステージビットをセットするステップと、
前記ロード命令の実行が前記第2のパイプラインステージから前記第3のパイプラインステージに移行する時に第1の移行を検出するステップと、
前記第1の移行を検出した時に、前記第5のステージビットをリセットし前記第6のステージビットをセットするステップと、
前記ロード命令の実行が前記第3のパイプラインステージから前記第4のパイプラインステージに移行する時に第2の移行を検出するステップと、
前記第2の移行を検出した時に、前記第6のステージビットをリセットし前記第7のステージビットをセットするステップと、
前記ロード命令の実行が前記第4のパイプラインステージから移行する時に第3の移行を検出するステップと、
前記第3の移行を検出した時に、前記第2の複数のステージビットを含む全てのビットをリセットするステップとを含むことを特徴とする請求項3に記載の方法。 - 前記ロード命令が前記第2の命令の前に発行されたか否かを決定する前記ステップがさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックス年齢インジケータが非ゼロの値を含むか否かを決定するステップと、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファ年齢インジケータが非ゼロの値を含むか否かを決定するステップとを含むことを特徴とする請求項1に記載の方法。 - 前記無効にするステップがさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックスの前記ロード命令に関連する有効ビットをリセットするステップと、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファにおける前記ロード命令に関連する有効ビットをリセットするステップとを含むことを特徴とする請求項1に記載の方法。 - 前記ロードバッファから前記アネックスに送られた後に、前記ロード命令における指定された前記情報を前記アネックスからバイパスできるようにするステップを更に含むことを特徴とする請求項1に記載の方法。
- out−of−orderかつ投機的なロード命令のための正確な例外を処理するための共用アネックス及びロードバッファ処理を提供するためのコンピュータシステムであって、
メインメモリと、
前記メインメモリに接続された複数のプロセシングユニットと、
前記複数のプロセシングユニットに接続された、ロードバッファに含まれると共に第1の複数のステージビットを含むロードバッファ年齢インジケータでロード命令の年齢を追跡するためのロードバッファ手段と、
前記複数のプロセシングユニットに接続された、前記ロード命令における指定されたデータが回収されたか否かを決定するための手段と、
前記ロード命令における指定された前記データが回収された場合は、前記ロード命令、回収された前記データ、及び前記ロードバッファ年齢インジケータを前記ロードバッファからアネックスに送る、前記複数のプロセシングユニットに接続された手段と、
前記ロード命令における指定された前記データが回収された場合は、前記第1の複数のステージビットをアネックス年齢インジケータの中にフォーマットする、前記複数のプロセシングユニットに接続された手段と、
前記複数のプロセシングユニットに接続された、前記アネックスに含まれると共に第2の複数のステージビットを含むアネックス年齢インジケータで前記ロード命令の前記年齢を追跡するためのアネックス手段と、
第2の命令が正確なトラップを引き起こしたことを決定するための手段と、
前記正確なトラップが起きた時に、前記ロード命令が前記第2の命令の前に発行されたか否かを決定するための手段と、
前記正確なトラップが起きた時に、前記ロード命令が前記第2の命令の前に発行されていない場合、前記ロード命令を無効にするための手段とを含むことを特徴とするコンピュータシステム。 - 前記ロード命令が、複数の連続したパイプラインステージで実行され、
前記第1の複数のステージビットのそれぞれが、前記複数の連続したパイプラインステージに含まれる前記連続したパイプラインステージの異なった1つに対応し、
前記第2の複数のステージビットのそれぞれが、前記複数のパイプラインステージに含まれる前記連続したパイプラインステージの異なった1つに対応することを特徴とする請求項9に記載のコンピュータシステム。 - 前記複数の連続したパイプラインステージが、第1のパイプラインステージ、第2のパイプラインステージ、第3のパイプラインステージ、及び第4のパイプラインステージを含み、
前記第1の複数のステージビットが、前記第1のパイプラインステージに対応する第1のステージビット、前記第2のパイプラインステージに対応する第2のステージビット、前記第3のパイプラインステージに対応する第3のステージビット、及び前記第4のパイプラインステージに対応する第4のステージビットを含み、
前記第2の複数のステージビットが、前記第2のパイプラインステージに対応する第5のステージビット、前記第3のパイプラインステージに対応する第6のステージビット、及び前記第4のパイプラインステージに対応する第7のステージビットを含むことを特徴とする請求項10に記載のコンピュータシステム。 - 追跡するための前記ロードバッファ手段がさらに、
前記ロード命令の実行が前記第1のパイプラインステージに入った時に前記第1のステージビットをセットするための手段と、
前記ロード命令の実行が前記第1のパイプラインステージから前記第2のパイプラインステージに移行した時の第1の移行を検出するための手段と、
前記第1の移行を検出した時に、前記第1のステージビットをリセットし前記第2のステージビットをセットするための手段と、
前記ロード命令の実行が前記第2のパイプラインステージから前記第3のパイプラインステージに移行する時に、第2の移行を検出するための手段と、
前記第2の移行を検出した時に、前記第2のステージビットをリセットし前記第3のステージビットをセットするための手段と、
前記ロード命令の実行が前記第3のパイプラインステージから前記第4のパイプラインステージに移行する時に第3の移行を検出するための手段と、
前記第3の移行を検出した時に、前記第3のステージビットをリセットし前記第4のステージビットをセットするための手段と、
前記ロード命令の実行が前記第4のパイプラインステージから移行する時に、第4の移行を検出するための手段と、
前記第4の移行を検出した時に、前記第1の複数のステージビットを含む全てのビットをリセットするための手段とを含むことを特徴とする請求項11に記載のコンピュータシステム。 - 追跡するための前記アネックス手段がさらに、
前記ロード命令の実行が前記第2のパイプラインステージに入った時に、前記第5のステージビットをセットするための手段と、
前記ロード命令の実行が前記第2のパイプラインステージから前記第3のパイプラインステージに移行する時に、第1の移行を検出するための手段と、
前記第1の移行を検出した時に、前記第5のステージビットをリセットし前記第6のステージビットをセットするための手段と、
前記ロード命令の実行が前記第3のパイプラインステージから前記第4のパイプラインステージに移行する時に、第2の移行を検出するための手段と、
前記第2の移行を検出した時に、前記第3のステージビットをリセットし前記第4のステージビットをセットするための手段と、
前記ロード命令の実行が前記第4のパイプラインステージから移行する時に、第3の移行を検出するための手段と、
前記第3の移行を検出した時に、前記第2の複数のステージビットを含む全てのビットをリセットするための手段とを含むことを特徴とする請求項11に記載のコンピュータシステム。 - 前記ロード命令が前記第2の命令の前に発行されたか否かを決定するための前記手段がさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックス年齢インジケータが非ゼロの値を含むか否かを決定するための手段と、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファ年齢インジケータが非ゼロの値を含むか否かを決定するための手段とを含むことを特徴とする請求項9に記載のコンピュータシステム。 - 無効にするための前記手段がさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックスにおける前記ロード命令に関連する有効ビットをリセットするための手段と、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファにおける前記ロード命令に関連する有効ビットをリセットするための手段とを含むことを特徴とする請求項9に記載の方法。 - out−of−orderかつ投機的なロード命令のための正確な例外の処理のための共用アネックス及びロードバッファ処理を提供する装置であって、
メインメモリと、
前記メインメモリに接続された複数のプロセシングユニットと、
前記複数のプロセシングユニットに接続された、前記ロード命令における指定されたロードデータを回収するように構成されたロードバッファと、
前記ロードバッファに含まれるロードバッファ年齢インジケータであって、複数の連続したパイプラインステージに対応する第1の複数のステージビットを含み、前記ステージビットのそれぞれが、前記連続したパイプラインステージの異なった1つに対応する前記第1の複数のステージビットを含む、該ロードバッファ年齢インジケータと、
前記ロードデータが前記ロードバッファによって回収された時に、前記ロードデータ及び前記ロード命令を前記ロードバッファから受け取るように構成されたアネックスと、
前記アネックスに含まれるアネックス年齢インジケータであって、前記複数の連続したパイプラインステージに対応する第2の複数のステージビットを含み、前記ステージビットのそれぞれが、前記連続したパイプラインステージの異なった1つに対応する前記第2の複数のステージビットを含む、該アネックス年齢インジケータとを含むことを特徴とする装置。 - ロードバッファ及びアネックスを含むプロセッサにおいてロード命令の処理を共用するための方法であって、
ロード命令における指定されたデータがロードバッファに回収されたか否かを決定するステップと、
前記ロード命令における指定された前記データが回収された場合、前記ロード命令及び前記回収されたデータを前記ロードバッファからアネックスに送るステップと、
前記回収されたデータを前記アネックスから1或いは複数の機能ユニットにバイパスできるようにするステップと、
回収された前記データをレジスタファイルに供給するステップとを含むことを特徴とする方法。 - 前記ロード命令が複数のロード命令に含まれ、前記プロセッサが複数のクロックサイクルを供給し、前記方法がさらに、
前記複数のロード命令の1つにおける指定されたデータがロードバッファに回収されたか否かを決定するステップと、
前記複数のロード命令の1つにおける指定された前記データが回収された場合、前記複数のロード命令の1つ及び回収された前記データを前記ロードバッファからアネックスに送るステップであって、前記アネックスが、前記複数のクロックサイクルの各サイクルで、回収された唯1つのデータおよび唯1つのロード命令のみを受け取ることができ、前記アネックスが、回収された1或いは複数の前記データおよび前記複数のロード命令の1或いは複数を格納することができる、該ステップとを含むことを特徴とする請求項17に記載の方法。 - 前記アネックスが、前記複数のクロックサイクルの各サイクルで、回収された1つのデータを前記レジスタファイルに供給することを特徴とする請求項18に記載の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/410,842 US6542988B1 (en) | 1999-10-01 | 1999-10-01 | Sending both a load instruction and retrieved data from a load buffer to an annex prior to forwarding the load data to register file |
PCT/US2000/026873 WO2001025904A1 (en) | 1999-10-01 | 2000-09-29 | Method and apparatus for processing load instructions |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004520634A true JP2004520634A (ja) | 2004-07-08 |
Family
ID=23626462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001528797A Pending JP2004520634A (ja) | 1999-10-01 | 2000-09-29 | ロード命令を処理するための方法および装置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6542988B1 (ja) |
EP (1) | EP1221088B1 (ja) |
JP (1) | JP2004520634A (ja) |
AU (1) | AU7988900A (ja) |
DE (1) | DE60042416D1 (ja) |
WO (1) | WO2001025904A1 (ja) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7188232B1 (en) * | 2000-05-03 | 2007-03-06 | Choquette Jack H | Pipelined processing with commit speculation staging buffer and load/store centric exception handling |
US6681317B1 (en) * | 2000-09-29 | 2004-01-20 | Intel Corporation | Method and apparatus to provide advanced load ordering |
US6725338B2 (en) * | 2000-11-21 | 2004-04-20 | Sun Microsystems, Inc. | Method and apparatus for preventing cache pollution in microprocessors with speculative address loads |
US20030005423A1 (en) * | 2001-06-28 | 2003-01-02 | Dong-Yuan Chen | Hardware assisted dynamic optimization of program execution |
US7124331B2 (en) | 2002-05-14 | 2006-10-17 | Sun Microsystems, Inc. | Method and apparatus for providing fault-tolerance for temporary results within a CPU |
US7360220B2 (en) * | 2002-10-31 | 2008-04-15 | Intel Corporation | Methods and apparatus for multi-threading using differently coded software segments to perform an algorithm |
US8667252B2 (en) * | 2002-11-21 | 2014-03-04 | Stmicroelectronics, Inc. | Method and apparatus to adapt the clock rate of a programmable coprocessor for optimal performance and power dissipation |
US7730282B2 (en) * | 2004-08-11 | 2010-06-01 | International Business Machines Corporation | Method and apparatus for avoiding data dependency hazards in a microprocessor pipeline architecture using a multi-bit age vector |
US7200742B2 (en) | 2005-02-10 | 2007-04-03 | International Business Machines Corporation | System and method for creating precise exceptions |
US10387151B2 (en) | 2007-12-31 | 2019-08-20 | Intel Corporation | Processor and method for tracking progress of gathering/scattering data element pairs in different cache memory banks |
US7984273B2 (en) | 2007-12-31 | 2011-07-19 | Intel Corporation | System and method for using a mask register to track progress of gathering elements from memory |
US8447962B2 (en) * | 2009-12-22 | 2013-05-21 | Intel Corporation | Gathering and scattering multiple data elements |
US8239843B2 (en) * | 2008-03-11 | 2012-08-07 | Oracle America, Inc. | Value predictable variable scoping for speculative automatic parallelization with transactional memory |
US8380964B2 (en) | 2009-04-03 | 2013-02-19 | International Business Machines Corporation | Processor including age tracking of issue queue instructions |
US10175990B2 (en) | 2009-12-22 | 2019-01-08 | Intel Corporation | Gathering and scattering multiple data elements |
US9626333B2 (en) | 2012-06-02 | 2017-04-18 | Intel Corporation | Scatter using index array and finite state machine |
US8972697B2 (en) | 2012-06-02 | 2015-03-03 | Intel Corporation | Gather using index array and finite state machine |
US9395990B2 (en) * | 2013-06-28 | 2016-07-19 | Intel Corporation | Mode dependent partial width load to wider register processors, methods, and systems |
US10936321B2 (en) * | 2019-02-01 | 2021-03-02 | International Business Machines Corporation | Instruction chaining |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4893233A (en) * | 1988-04-18 | 1990-01-09 | Motorola, Inc. | Method and apparatus for dynamically controlling each stage of a multi-stage pipelined data unit |
US5689653A (en) * | 1995-02-06 | 1997-11-18 | Hewlett-Packard Company | Vector memory operations |
US5903918A (en) | 1995-08-23 | 1999-05-11 | Sun Microsystems, Inc. | Program counter age bits |
US5905881A (en) * | 1995-11-30 | 1999-05-18 | Unisys Corporation | Delayed state writes for an instruction processor |
US5781790A (en) * | 1995-12-29 | 1998-07-14 | Intel Corporation | Method and apparatus for performing floating point to integer transfers and vice versa |
US5987598A (en) * | 1997-07-07 | 1999-11-16 | International Business Machines Corporation | Method and system for tracking instruction progress within a data processing system |
US6615338B1 (en) | 1998-12-03 | 2003-09-02 | Sun Microsystems, Inc. | Clustered architecture in a VLIW processor |
US6336168B1 (en) * | 1999-02-26 | 2002-01-01 | International Business Machines Corporation | System and method for merging multiple outstanding load miss instructions |
AU7622400A (en) | 1999-10-01 | 2001-05-10 | Sun Microsystems, Inc. | A method for precise trap handling in case of speculative and out-of-order loads |
US6598122B2 (en) * | 2000-04-19 | 2003-07-22 | Hewlett-Packard Development Company, L.P. | Active load address buffer |
-
1999
- 1999-10-01 US US09/410,842 patent/US6542988B1/en not_active Expired - Lifetime
-
2000
- 2000-09-29 EP EP00970519A patent/EP1221088B1/en not_active Expired - Lifetime
- 2000-09-29 DE DE60042416T patent/DE60042416D1/de not_active Expired - Lifetime
- 2000-09-29 JP JP2001528797A patent/JP2004520634A/ja active Pending
- 2000-09-29 AU AU79889/00A patent/AU7988900A/en not_active Abandoned
- 2000-09-29 WO PCT/US2000/026873 patent/WO2001025904A1/en active Search and Examination
Also Published As
Publication number | Publication date |
---|---|
US6542988B1 (en) | 2003-04-01 |
EP1221088B1 (en) | 2009-06-17 |
AU7988900A (en) | 2001-05-10 |
EP1221088A1 (en) | 2002-07-10 |
DE60042416D1 (de) | 2009-07-30 |
WO2001025904A1 (en) | 2001-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6021485A (en) | Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching | |
JP3588755B2 (ja) | コンピュータシステム | |
US5931957A (en) | Support for out-of-order execution of loads and stores in a processor | |
US6651163B1 (en) | Exception handling with reduced overhead in a multithreaded multiprocessing system | |
US8180977B2 (en) | Transactional memory in out-of-order processors | |
US5887161A (en) | Issuing instructions in a processor supporting out-of-order execution | |
JP4578042B2 (ja) | 接近して結合される多重プロセッサのための高速マルチスレッディング | |
US6098167A (en) | Apparatus and method for fast unified interrupt recovery and branch recovery in processors supporting out-of-order execution | |
EP1221088B1 (en) | Method and apparatus for processing load instructions | |
US5913048A (en) | Dispatching instructions in a processor supporting out-of-order execution | |
US20030061470A1 (en) | Power consumption reduction mechanism for pipeline stalls | |
JPH0659887A (ja) | 高性能プロセッサ用の分岐予測 | |
JP2007536626A (ja) | ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 | |
US20030074530A1 (en) | Load/store unit with fast memory data access mechanism | |
EP1221087A1 (en) | A method for precise trap handling in case of speculative and out-of-order loads | |
US7089405B2 (en) | Index-based scoreboarding system and method | |
US6928534B2 (en) | Forwarding load data to younger instructions in annex | |
JPH0659979A (ja) | 高性能プロセッサ用のキャッシュ・セット選択 | |
JPH10283178A (ja) | 命令を発行するための方法及びシステム |