(57)【要約】プロセッサが、順不同（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）かつ投機的なロード命令のための正確なトラップ処理を実行する。プロセッサは、ロードバッファおよびロードアネックスを含む共用構造（ｓｈａｒｅｄ ｓｃｈｅｍｅ）においてロード命令の年齢の追跡を続ける。全ての正確な例外が、ロードパイプラインのＴステージで検出される。キャッシュにヒットするロード命令に関するデータおよび制御情報は、同じ或いは先の命令パケットにおける全ての例外が検出されるまで、Ａ１、Ａ２、Ａ３、およびＴパイプラインステージの間、ロードアネックスにステージされる。他の全てのロード命令からのデータおよび制御情報は、ロードデータが回収された後にロードアネックスにステージされる。例外が生じると、例外を引き起こした命令と同じ命令パケットの全てのロードがキャンセルされる。例外を引き起こした命令より若いロード命令も全てキャンセルされる。ロード命令の年齢は、命令のパイプラインステージを追跡して決定される。トラップが起こると、非ゼロの年齢インジケーターをもつ全てのロード命令がキャンセルされる。
2004520634.tif 000002
【特許請求の範囲】
【請求項１】
ロードバッファ及びアネックスを含み、順不同（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）かつ投機的なロード命令のための正確な例外の処理を容易にするプロセッサにおいて、ロード命令処理を共有する方法であって、
ロードバッファにおける第１の複数のステージビットを含むロードバッファ年齢インジケータでロード命令の年齢を追跡するステップと、
前記ロード命令における指定されたデータが回収されたか否かを決定するステップと、
前記ロード命令における前記指定されたデータが回収された場合、前記ロード命令、回収された前記データ、及び前記ロードバッファ年齢インジケータを前記ロードバッファからアネックスにおくるステップと、
前記ロード命令における指定されたデータが回収された場合、第２の複数のステージビットを含むアネックス年齢インジケータの中に前記第１の複数のステージビットをフォーマットするステップと、
前記ロード命令における指定されたデータが回収された場合、前記アネックスの前記アネックス年齢インジケータで前記ロード命令の年齢を追跡するステップと、
第２の命令が正確なトラップを引き起こしたことを検出するステップと、
前記正確なトラップが起きた時に、前記ロード命令が前記第２の命令の前に発行されたか否かを決定するステップと、
前記正確なトラップが起きた時に、前記ロード命令が前記第２の命令の前に発行されていない場合、前記ロード命令を無効にするステップとを含むことを特徴とする方法。
【請求項２】
前記ロード命令が、複数の連続したパイプラインステージで実行され、
前記第１の複数のステージビットのそれぞれが、前記複数の連続したパイプラインステージに含まれる前記連続したパイプラインステージの異なった１つに対応し、
前記第２の複数のステージビットそれぞれが、前記複数のパイプラインステージに含まれる前記連続したパイプラインステージの異なった１つに対応することを特徴とする請求項１に記載の方法。
【請求項３】
前記複数のパイプラインステージが、第１のパイプラインステージ、第２のパイプラインステージ、第３のパイプラインステージ、及び第４のパイプラインステージを含み、
前記第１の複数のステージビットが、前記第１のパイプラインステージに対応する第１のステージビット、前記第２のパイプラインステージに対応する第２のステージビット、前記第３のパイプラインステージに対応する第３のステージビット、及び前記第４のパイプラインステージに対応する第４のステージビットを含み、
前記第２の複数のステージビットが、前記第２のパイプラインステージに対応する第５のステージビット、前記第３のパイプラインステージに対応する第６のステージビット、及び前記第４のパイプラインステージに対応する第７のステージビットを含むことを特徴とする請求項２に記載の方法。
【請求項４】
ロードバッファ年齢インジケータでロード命令の年齢を追跡する前記ステップが、
前記ロード命令の実行が前記第１のパイプラインステージに入った時に前記第１のステージビットをセットするステップと、
前記ロード命令の実行が前記第１のパイプラインステージから前記第２のパイプラインステージに移行する時に第１の移行を検出するステップと、
前記第１の移行を検出した時に、前記第１のステージビットをリセットし前記第２のステージビットをセットするステップと、
前記ロード命令の実行が前記第２のパイプラインステージから前記第３のパイプラインステージに移行する時に第２の移行を検出するステップと、
前記第２の移行を検出した時に、前記第２のステージビットをリセットし前記第３のステージビットをセットするステップと、
前記ロード命令の実行が前記第３のパイプラインステージから前記第４のパイプラインステージに移行する時に第３の移行を検出するステップと、
前記第３の移行を検出した時に、前記第３のステージビットをリセットし前記第４のステージビットをセットするステップと、
前記ロード命令の実行が前記第４のパイプラインステージから移行する時に第４の移行を検出するステップと、
前記第４の移行を検出した時に、前記第１の複数のステージビットを含む全てのビットをリセットするステップとを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記アネックス年齢インジケータで前記ロード命令の年齢を追跡する前記ステップが、
前記ロード命令の実行が前記第２のパイプラインステージに入った時に前記第５のステージビットをセットするステップと、
前記ロード命令の実行が前記第２のパイプラインステージから前記第３のパイプラインステージに移行する時に第１の移行を検出するステップと、
前記第１の移行を検出した時に、前記第５のステージビットをリセットし前記第６のステージビットをセットするステップと、
前記ロード命令の実行が前記第３のパイプラインステージから前記第４のパイプラインステージに移行する時に第２の移行を検出するステップと、
前記第２の移行を検出した時に、前記第６のステージビットをリセットし前記第７のステージビットをセットするステップと、
前記ロード命令の実行が前記第４のパイプラインステージから移行する時に第３の移行を検出するステップと、
前記第３の移行を検出した時に、前記第２の複数のステージビットを含む全てのビットをリセットするステップとを含むことを特徴とする請求項３に記載の方法。
【請求項６】
前記ロード命令が前記第２の命令の前に発行されたか否かを決定する前記ステップがさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックス年齢インジケータが非ゼロの値を含むか否かを決定するステップと、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファ年齢インジケータが非ゼロの値を含むか否かを決定するステップとを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記無効にするステップがさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックスの前記ロード命令に関連する有効ビットをリセットするステップと、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファにおける前記ロード命令に関連する有効ビットをリセットするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記ロードバッファから前記アネックスに送られた後に、前記ロード命令における指定された前記情報を前記アネックスからバイパスできるようにするステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項９】
ｏｕｔ−ｏｆ−ｏｒｄｅｒかつ投機的なロード命令のための正確な例外を処理するための共用アネックス及びロードバッファ処理を提供するためのコンピュータシステムであって、
メインメモリと、
前記メインメモリに接続された複数のプロセシングユニットと、
前記複数のプロセシングユニットに接続された、ロードバッファに含まれると共に第１の複数のステージビットを含むロードバッファ年齢インジケータでロード命令の年齢を追跡するためのロードバッファ手段と、
前記複数のプロセシングユニットに接続された、前記ロード命令における指定されたデータが回収されたか否かを決定するための手段と、
前記ロード命令における指定された前記データが回収された場合は、前記ロード命令、回収された前記データ、及び前記ロードバッファ年齢インジケータを前記ロードバッファからアネックスに送る、前記複数のプロセシングユニットに接続された手段と、
前記ロード命令における指定された前記データが回収された場合は、前記第１の複数のステージビットをアネックス年齢インジケータの中にフォーマットする、前記複数のプロセシングユニットに接続された手段と、
前記複数のプロセシングユニットに接続された、前記アネックスに含まれると共に第２の複数のステージビットを含むアネックス年齢インジケータで前記ロード命令の前記年齢を追跡するためのアネックス手段と、
第２の命令が正確なトラップを引き起こしたことを決定するための手段と、
前記正確なトラップが起きた時に、前記ロード命令が前記第２の命令の前に発行されたか否かを決定するための手段と、
前記正確なトラップが起きた時に、前記ロード命令が前記第２の命令の前に発行されていない場合、前記ロード命令を無効にするための手段とを含むことを特徴とするコンピュータシステム。
【請求項１０】
前記ロード命令が、複数の連続したパイプラインステージで実行され、
前記第１の複数のステージビットのそれぞれが、前記複数の連続したパイプラインステージに含まれる前記連続したパイプラインステージの異なった１つに対応し、
前記第２の複数のステージビットのそれぞれが、前記複数のパイプラインステージに含まれる前記連続したパイプラインステージの異なった１つに対応することを特徴とする請求項９に記載のコンピュータシステム。
【請求項１１】
前記複数の連続したパイプラインステージが、第１のパイプラインステージ、第２のパイプラインステージ、第３のパイプラインステージ、及び第４のパイプラインステージを含み、
前記第１の複数のステージビットが、前記第１のパイプラインステージに対応する第１のステージビット、前記第２のパイプラインステージに対応する第２のステージビット、前記第３のパイプラインステージに対応する第３のステージビット、及び前記第４のパイプラインステージに対応する第４のステージビットを含み、
前記第２の複数のステージビットが、前記第２のパイプラインステージに対応する第５のステージビット、前記第３のパイプラインステージに対応する第６のステージビット、及び前記第４のパイプラインステージに対応する第７のステージビットを含むことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１２】
追跡するための前記ロードバッファ手段がさらに、
前記ロード命令の実行が前記第１のパイプラインステージに入った時に前記第１のステージビットをセットするための手段と、
前記ロード命令の実行が前記第１のパイプラインステージから前記第２のパイプラインステージに移行した時の第１の移行を検出するための手段と、
前記第１の移行を検出した時に、前記第１のステージビットをリセットし前記第２のステージビットをセットするための手段と、
前記ロード命令の実行が前記第２のパイプラインステージから前記第３のパイプラインステージに移行する時に、第２の移行を検出するための手段と、
前記第２の移行を検出した時に、前記第２のステージビットをリセットし前記第３のステージビットをセットするための手段と、
前記ロード命令の実行が前記第３のパイプラインステージから前記第４のパイプラインステージに移行する時に第３の移行を検出するための手段と、
前記第３の移行を検出した時に、前記第３のステージビットをリセットし前記第４のステージビットをセットするための手段と、
前記ロード命令の実行が前記第４のパイプラインステージから移行する時に、第４の移行を検出するための手段と、
前記第４の移行を検出した時に、前記第１の複数のステージビットを含む全てのビットをリセットするための手段とを含むことを特徴とする請求項１１に記載のコンピュータシステム。
【請求項１３】
追跡するための前記アネックス手段がさらに、
前記ロード命令の実行が前記第２のパイプラインステージに入った時に、前記第５のステージビットをセットするための手段と、
前記ロード命令の実行が前記第２のパイプラインステージから前記第３のパイプラインステージに移行する時に、第１の移行を検出するための手段と、
前記第１の移行を検出した時に、前記第５のステージビットをリセットし前記第６のステージビットをセットするための手段と、
前記ロード命令の実行が前記第３のパイプラインステージから前記第４のパイプラインステージに移行する時に、第２の移行を検出するための手段と、
前記第２の移行を検出した時に、前記第３のステージビットをリセットし前記第４のステージビットをセットするための手段と、
前記ロード命令の実行が前記第４のパイプラインステージから移行する時に、第３の移行を検出するための手段と、
前記第３の移行を検出した時に、前記第２の複数のステージビットを含む全てのビットをリセットするための手段とを含むことを特徴とする請求項１１に記載のコンピュータシステム。
【請求項１４】
前記ロード命令が前記第２の命令の前に発行されたか否かを決定するための前記手段がさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックス年齢インジケータが非ゼロの値を含むか否かを決定するための手段と、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファ年齢インジケータが非ゼロの値を含むか否かを決定するための手段とを含むことを特徴とする請求項９に記載のコンピュータシステム。
【請求項１５】
無効にするための前記手段がさらに、
前記ロード命令における指定された前記データが回収された場合、前記アネックスにおける前記ロード命令に関連する有効ビットをリセットするための手段と、
前記ロード命令における指定された前記データが回収されなかった場合、前記ロードバッファにおける前記ロード命令に関連する有効ビットをリセットするための手段とを含むことを特徴とする請求項９に記載の方法。
【請求項１６】
ｏｕｔ−ｏｆ−ｏｒｄｅｒかつ投機的なロード命令のための正確な例外の処理のための共用アネックス及びロードバッファ処理を提供する装置であって、
メインメモリと、
前記メインメモリに接続された複数のプロセシングユニットと、
前記複数のプロセシングユニットに接続された、前記ロード命令における指定されたロードデータを回収するように構成されたロードバッファと、
前記ロードバッファに含まれるロードバッファ年齢インジケータであって、複数の連続したパイプラインステージに対応する第１の複数のステージビットを含み、前記ステージビットのそれぞれが、前記連続したパイプラインステージの異なった１つに対応する前記第１の複数のステージビットを含む、該ロードバッファ年齢インジケータと、
前記ロードデータが前記ロードバッファによって回収された時に、前記ロードデータ及び前記ロード命令を前記ロードバッファから受け取るように構成されたアネックスと、
前記アネックスに含まれるアネックス年齢インジケータであって、前記複数の連続したパイプラインステージに対応する第２の複数のステージビットを含み、前記ステージビットのそれぞれが、前記連続したパイプラインステージの異なった１つに対応する前記第２の複数のステージビットを含む、該アネックス年齢インジケータとを含むことを特徴とする装置。
【請求項１７】
ロードバッファ及びアネックスを含むプロセッサにおいてロード命令の処理を共用するための方法であって、
ロード命令における指定されたデータがロードバッファに回収されたか否かを決定するステップと、
前記ロード命令における指定された前記データが回収された場合、前記ロード命令及び前記回収されたデータを前記ロードバッファからアネックスに送るステップと、
前記回収されたデータを前記アネックスから１或いは複数の機能ユニットにバイパスできるようにするステップと、
回収された前記データをレジスタファイルに供給するステップとを含むことを特徴とする方法。
【請求項１８】
前記ロード命令が複数のロード命令に含まれ、前記プロセッサが複数のクロックサイクルを供給し、前記方法がさらに、
前記複数のロード命令の１つにおける指定されたデータがロードバッファに回収されたか否かを決定するステップと、
前記複数のロード命令の１つにおける指定された前記データが回収された場合、前記複数のロード命令の１つ及び回収された前記データを前記ロードバッファからアネックスに送るステップであって、前記アネックスが、前記複数のクロックサイクルの各サイクルで、回収された唯１つのデータおよび唯１つのロード命令のみを受け取ることができ、前記アネックスが、回収された１或いは複数の前記データおよび前記複数のロード命令の１或いは複数を格納することができる、該ステップとを含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記アネックスが、前記複数のクロックサイクルの各サイクルで、回収された１つのデータを前記レジスタファイルに供給することを特徴とする請求項１８に記載の方法。
【発明の詳細な説明】
【０００１】
クロス・リファレンス
本明細書は、１９９８年１２月１２日に出願された米国特許出願第０９／２０４，４８０号（名称：「Ａ Ｍｕｌｔｉｐｌｅ−Ｔｈｒｅａｄ Ｐｒｏｃｅｓｓｏｒ ｆｏｒ Ｔｈｒｅａｄｅｄ Ｓｏｆｔｗａｒｅ Ａｐｐｌｉｃａｔｉｏｎｓ」、発明者：Ｍａｒｃ ＴｒｅｍｂｌａｙおよびＷｉｌｌｉａｍ Ｊｏｙ）に関連し、言及することをもって本明細書の一部とする。
【０００２】
本明細書は、１９９９年１０月１日に出願された米国特許出願第０９／４１１，８２４号（名称：「Ａ Ｍｅｔｈｏｄ ｆｏｒ Ｆａｃｉｌｉｔａｔｉｎｇ Ｐｒｅｃｉｓｅ Ｔｒａｐ Ｈａｎｄｌｉｎｇ ｗｉｔｈ Ｓｐｅｃｕｌａｔｉｖｅ ａｎｄ Ｏｕｔ−ｏｆ−Ｏｒｄｅｒ Ｌｏａｄｓ」、発明者：Ｍａｒｃ Ｔｒｅｍｂｌａｙ、Ｊｅｆｆｒｅｙ Ｍｅｎｇ Ｗａｈ Ｃｈａｎ、Ｓｕｂｒａｍａｎｉａ Ｓｕｄｈａｒｓａｎａｎ、Ｓｈａｒａｄａ Ｙｅｌｕｒｉ、及びＢｉｙｕ Ｐａｎ）に関連し、言及することをもって本明細書の一部とする。
【０００３】
発明の背景
発明の分野
本発明は、正確なトラップ処理を実行するプロセッサにおける順不同（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）かつ投機的なロード命令の処理、追跡、および管理に関連する。
【０００４】
特に、ロードバッファ及びアネックスがロード命令によって回収されたデータを共用し、ロード命令の年齢を追跡する機能、並びにロード命令がＴｒａｐパイプラインステージまでその実行を完了する前に、先に発行された命令が正確なトラップを引き起こした場合、ロード命令を無効にする機能を共用することに関する。
【０００５】
関連分野の説明
マルチスレッド処理において、様々な処理アプリケーションのための自動化されたシステムは、複数の事象を同時に対処する或いは同時に処理し得る。１つの処理は制御のスレッドまたは「スレッド」と呼び、システム内の独立した動的動作における処理の基本的な単位である。プログラムは少なくとも１つのスレッドを有する。同時処理を実行するシステムは、通常は多くのスレッドを有し、その内のあるものは一過性であり、またあるものは持続性である。マルチプロセッサ間で実行するシステムは真の同時スレッドを可能にする。単一プロセッサシステムは、通常はプロセッサの実行のタイムスライシングによって得られ、複数のスレッド間で共用される仮想の同時スレッドを有するだけである。
【０００６】
マルチスレッドをサポートするために特別に設計されたプログラム言語がある。このような言語には、抽象演算装置であるＪａｖａ仮想マシン（商標）を用いて有利に実行するＪａｖａ（商標）プログラム言語がある。Ｊａｖａ仮想マシンは、一度に複数のスレッドを実行することができる。マルチスレッドは、共用メインメモリに存在するＪａｖａ値およびオブジェクトにおいて動作するＪａｖａコードを独立して実行する。マルチスレッドは、１つのハードウエアプロセッサのタイムスライシング或いは多くのハードウエアプロセッサのタイムスライシングによって、複数のハードウエアプロセッサを用いてサポートされ得る。１９９０年に、サン・マイクロシステムズ社のプログラマーが汎用プログラム言語を開発した。このプログラム言語は、「Ｊａｖａ（商標）プログラム言語」として知られる。「Ｊａｖａ（商標）」、「Ｓｕｎ」、「Ｓｕｎ Ｍｉｃｒｏｓｙｓｔｅｍｓ」、および「Ｓｕｎ Ｌｏｇｏ」は米国およびその他の国に所在するサン・マイクロシステムズ社の登録商標である。「ＵｌｔｒａＳＰＡＲＣ Ｉ」および「ＵｌｔｒａＳＰＡＲＣ ＩＩ」を含む「Ａｌｌ ＳＰＡＲＣ（商標）」はライセンス許可の下で使用され、米国およびその他の国に所在するＳＰＡＲＣ Ｉｎｔｅｒｎａｔｉｏｎａｌ社の商標である。商標「ＳＰＡＲＣ」を付した製品は、サン・マイクロシステムズ社によって開発されたアーキテクチャに基づいている。
【０００７】
発明の要約
ｏｕｔ−ｏｆ−ｏｒｄｅｒかつ投機的なロード命令のための正確なトラップ処理を容易にするための方法がロード命令の年齢（ａｇｅ）を追跡する。ロード命令の年齢は、連続したパイプラインステージにおいてロード命令が実行されているステージによって決定される。このロード命令の年齢は、ロード命令における指定された情報がデータキャッシュまたはメインメモリから回収されるまで、ロードバッファにおけるロードバッファ年齢インジケータで追跡される。このロードバッファ年齢インジケータは第１の複数のビットを含む。一実施例では、第１の複数のビットのそれぞれが、Ａ１、Ａ２、Ａ３、及びＴパイプラインステージの１つに対応する。
【０００８】
情報が回収された後、情報及びロード命令がアネックスに送られる。ロードバッファ年齢インジケータにおけるビットが１ビット右にシフトし、３ビットがアネックス年齢インジケータに格納される。アネックス年齢インジケータは、第２の複数のビットを含む。一実施例では、第２の複数のステージビットのそれぞれは、Ａ２、Ａ３、及びＴパイプラインステージの１つに対応する。
【０００９】
この方法は、正確なトラップが起こった時に決定する。正確なトラップが起こると、ロード命令がトラッピング命令によって発行されたか否かを決定する。ロード命令がトラッピング命令によって発行されたか否かは、ロード命令における指定されたデータが回収されなかった場合はロードバッファ年齢インジケータを検査し、データが回収された場合はアネックス年齢インジケータを検査して決定する。好適な年齢インジケータが、ロード命令がその実行を全てのパイプラインステージで完了する前にトラッピング命令がトラップされたことを示す場合、ロード命令は、トラッピング命令と同じ或いはそれより若く、ロード命令は無効にされる。一実施例では、ロード命令の年齢は、好適な年齢インジケータは非ゼロの値を含むか否かによって決定される。値が非ゼロの場合は、ロード命令は正確なトラップが起きた時に無効にされる。ロード命令がアネックスに送られた場合、アネックスの有効ビットをリセットすることによって無効にされる。その他の場合、ロードバッファのロード命令に関連する有効ビットをリセットすることによって無効にされる。無効にされることよってロード命令が効果的にキャンセルされる。
【００１０】
ロード命令における指定されたデータであるロードデータは、アネックスに送られるまでその他の機能ユニットにバイパスすることができない。
【００１１】
一実施例では、上記したようにプロセッサがｏｕｔ−ｏｆ−ｏｒｄｅｒかつ投機的なロード命令のための正確なトラップ処理をするための方法を実行するように構成されている。このプロセッサは、メインメモリおよび複数のプロセシングユニットを含む。このプロセッサは、ロードバッファおよびロードアネックスを含む共用構造において、ロード命令の年齢の追跡を続ける。全ての正確な例外がロードパイプラインのＴステージにおいて検出される。キャッシュにヒットするロード命令に関するデータおよび制御情報は、同じ或いはそれより先の命令パケットにおける全ての例外が検出されるまで、Ａ２、Ａ３、およびＴパイプラインステージの間、ロードアネックスにステージされる。他の全てのロード命令からのデータおよび制御情報は、ロードデータが回収された後にロードアネックスにステージされる。例外が起こると、例外を引き起こした命令と同じ命令パケットの全てのロード命令がキャンセルされる。例外を引き起こした命令より若い全てのロード命令もキャンセルされる。ロード命令の年齢は、その命令のパイプラインステージを追跡して決定する。トラップが起こると、非ゼロの年齢インジケータを有する全てのロード命令がキャンセルされる。
【００１２】
好適な実施例の説明
添付の図面を用いた説明によって、当業者には本発明、本発明の目的、特徴、および利点が明らかになるであろう。異なった図面における同じ参照符号は、同一或いは類似の要素を表すものとする。
【００１３】
図１を参照すると、プロセッサ１００の模式的なブロック図の例が示されている。このプロセッサ１００は、この図では２つのメディアプロセシングユニット１１０および１１２として示される、複数の独立した並列実行経路を含む、高度並列構造に基づいてマルチスレッド処理するための改良したアーキテクチャを有する。実行経路は、各スレッドに渡って並列に実行し、スレッド内に複数命令パラレル経路を含む。複数の独立した並列実行経路は、マルチスレッド環境に有利な特殊なデータ処理命令を含む命令のセットを実行する機能ユニットを含む。
【００１４】
プロセッサ１００のマルチスレッディングアーキテクチャは、マルチスレッドＪＡＶＡ仮想マシンにおいてマルチスレッド処理システムの下で動作するＪＡＶＡ言語などの言語を用いるマルチスレッド化アプリケーションの実行において使用するのに好都合である。例示したプロセッサ１００は、２つの独立した並列実行経路を成すメディアプロセシングユニット１１０および１１２の２つの独立したプロセッシングユニットを含む。ＪＡＶＡプログラム言語などのマルチスレッドをサポートする言語は２つのスレッドを生成し、ほとんどオーバーヘッドを負うことなくそれぞれを２つの並列な実行経路において実行する。マルチスレッド化プロセッサによって実行される特殊な命令には、アレイへのアクセスのための命令および不要部分の整理をサポートするための命令が含まれる。
【００１５】
１つの集積回路チップによって具現されるプロセッサ１００は、メインメモリとインターフェースをとるためのメモリインターフェース１０２と、ジオメトリ解凍部１０４と、２つのメディアプロセシングユニット１１０および１１２と、共用データキャッシュ１０６と、いくつかのコントローラとを含む。インターフェースコントローラは、１つのダイ上にメモリ機能、グラフィックス機能、および入出力ブリッジ機能の基本要素を集積することによってリアルタイム制約条件で相互的なグラフィックス環境をサポートする。各要素は相互に接続され、また広帯域幅の低い待ち時間の通信チャネルでプロセッサコアと接続され、複数の広帯域幅データストリームを効率的かつ短い応答時間で管理する。インターフェースコントローラは、ＵｌｔｒａＰｏｒｔ Ａｒｃｈｉｔｅｃｔｕｒｅ Ｉｎｔｅｒｃｏｎｎｅｃｔ （ＵＰＡ）コントローラ１１６と周辺要素相互接続（ＰＣＩ）コントローラ１２０とを含む。図示されているメモリインターフェース１０２は、ダイレクトランバスＤＲＡＭ（ＤＲＤＲＡＭ）コントローラである。共用データキャッシュ１０６は、メディアプロセシングユニット１１０および１１２の間で共用されるデュアルポート記憶装置であって、各ポートがそれぞれメディアプロセシングユニット１１０および１１２に割り当てられている。データキャッシュ１０６は、４ウエイセットアソシエイティブであって、ライトバックプロトコルに従い、フィルバッファ（図示せず）におけるヒットをサポートする。データキャッシュ１０６によって迅速なデータの共用が可能となり、それによって両メディアプロセシングユニット１１０および１１２間の複雑でエラーが発生し易いキャッシュコヒーレンスプロトコルが必要なくなる。
【００１６】
プロセッサ１００は順番に命令を出しそれを回収する。しかしながら、プロセッサ１００は、命令がｏｕｔ−ｏｆ−ｏｒｄｅｒ実行して完了することが可能となる、動的な命令リスケジューリングおよびロード命令の投機的な実行を実施する。オペレーションがｏｕｔ−ｏｆ−ｏｒｄｅｒ命令実行を終了し、ｏｕｔ−ｏｆ−ｏｒｄｅｒ命令実行で例外（ｅｘｃｅｐｔｉｏｎ）がたとえ生成されたとしても、プロセッサ１００は正確なトラップ処理を実施し、トラップ後のｉｎ−ｏｒｄｅｒ実行の外観を維持する。
【００１７】
図２を参照すると、プロセッサ１００のコアを示す模式的なブロック図である。メディアプロセシングユニット１１０および１１２はそれぞれ、命令キャッシュ２１０と、命令アライナー（ｉｎｓｔｒｕｃｔｉｏｎ ａｌｉｇｎｅｒ）２１２と、命令バッファ２１４と、パイプライン制御ユニット（ＰＣＵ）２２６と、分割レジスタファイル２１６と、複数の機能ユニットと、ロード／ストアユニット２１８とを含む。例示したプロセッサ１００では、メディアプロセシングユニット１１０および１１２は、命令を実行するために複数の機能ユニットを用いている。メディアプロセシングユニット１１０のための機能ユニットは、３つのメディア機能ユニット（ＭＦＵ）２２０と、１つの一般的な機能ユニット（ＧＦＵ）２２２とを含む。
【００１８】
それぞれ独立した並列実行経路１１０または１１２は、命令供給ブロックおよび命令準備ブロックを含む処理ユニットと、機能ユニット２２０および２２２と、レジスタファイル２１６とを有する。このレジスタファイル２１６は、複数の独立した並列実行経路の他の経路の処理ユニットから分離独立している。命令供給ブロックは個々の独立した並列実行経路のための個別の命令キャッシュ２１０を含むが、複数の独立した並列実行経路は、マルチスレッドがデータを時々共有するため、１つのデータキャッシュ１０６を共用する。データキャッシュ１０６はデュアルポートであるため、１サイクルで実行経路１１０および１１２の両方におけるデータアクセスが可能である。独立したプロセッサ要素１１０および１１２がデータキャッシュ１０６を共用することによって、データ処理が簡潔化し、キャッシュ協調プロトコルの必要性およびプロトコルの制御におけるオーバーヘッドが回避できるという利点がある。
【００１９】
命令キャッシュ２１０に加えて、実行経路における命令供給ブロックは、命令アライナー２１２と命令バッファ２１４とを含み、それらによってレジスタファイル２１６へのアクセスを準備するべく、４つの命令からなる完全な命令グループが正確にフォーマットされ整列される。個々の実行経路は、複数のレジスタファイルセグメント２２４に物理的に分割された１つのレジスタファイル２１６を含む。それぞれのレジスタファイルセグメント２２４は、複数の機能ユニットの特定の機能ユニットと対応する。常に、各機能ユニットに割り当てられたレジスタファイルセグメントはそれぞれ同じ内容を含む。マルチポートレジスタファイルは、ポートの数の二乗に比例する回路によって占有される領域部分のみが通常は金属である。プロセッサ１００は、複数の分離独立したレジスタファイルに分割されたレジスタファイル構造を有し、改良されたレイアウト効率を有するレイアウト構造を形成している。全てのレジスタファイル構造２１６の読み出しポートは、別個のレジスタファイルに割り当てられている。個々のレジスタファイルのそれぞれは、全レジスタファイル構造の書き込みポートの合計数に応じた書き込みポートを有する。書き込みは完全にブロードキャストされるため、各レジスタファイルは全てコヒーレンスを有する。
【００２０】
メディア機能ユニット２２０は、複数の単一命令マルチデータ（ＭＳＩＭＤ）メディア機能ユニットである。メディア機能ユニット２２０はそれぞれ、並列１６ビットデータを処理する能力がある。様々な並列１６ビット演算は、加算、乗算−加算、桁送り、比較などを含むプロセッサ１００のための単一命令マルチデータ能力を実現する。メディア機能ユニット１２０は、デジタル信号プロセッサ（ＤＳＰ）に接続され、それと共に動作する。各メディア機能ユニット２２０は、個別のサブ命令ストリームを有するが、３つ全てのメディア機能ユニット２２０が同期して実行するため、サブ命令はパイプラインステージを経てロックステップ（ｌｏｃｋ−ｓｔｅｐ）に進む。
【００２１】
プロセッサ１００の動作中にトラップが起こり得る。トラップは、所定の条件の発生に応答してプロセッサ１００によって行われる特権ソフトウエア（ｐｒｉｖｉｌｅｇｅｄ ｓｏｆｔｗａｒｅ）への制御のベクトル転送である。トラップは内部の事象または外部の事象によって起こり得る。トラップを引き起こす外部条件は割り込みである。割り込みは、機能ユニットの外部の装置によって機能ユニットに送られたサービスのための要求である。割り込みは、割り込みを受け取る機能ユニットの命令ストリームに同期していない。内部的なトラップは例外によって起こり得る。例外は、機能ユニット内の命令の実行によって引き起こされる。例外は、ソフトウエアの介入なしで機能ユニットが現在の命令ストリームの実行を継続できなくなるような状態である。機能ユニットはある種の例外を無視するようにセットすることが可能である。しかしながら、機能ユニットは、例外が無視できないタイプの例外のような場合、その例外を無視するようにはセットできず、その例外によってトラップが引き起こされる。
【００２２】
トラップの種類の中には、命令を実行しようとして生成される特殊なタイプの「正確なトラップ」がある。通常の実行を不可能にするような条件が発生すると、命令が例外を生成する場合がある。このような例外によって正確なトラップを生成される場合がある。正確なトラップは、特定の命令によって誘導され、トラップ誘導性の命令によってプロセッサ１００のプログラム管理下の状態が変わる前に生成される。ロード命令の場合、トラップ誘導性のロードの結果がレジスタファイルに書き込まれる前にトラップが起こるという意味である。
【００２３】
手動或いはコンパイラのいずれかによってプロセッサ１００に対する命令が生成される場合、命令は命令のパケットに編成される。この命令パケットは、１からＮ個の命令を含み得る。このＮは、メディアプロセシングユニット１１０および１１２に含まれる機能ユニットの数である。少なくとも一実施例では、命令パケットは４つの命令を含む。各命令パケットは、実行を完了するか或いは例外を引き起こす。
【００２４】
任意の命令が修復可能なエラーを生成する場合、プロセッサ１００は例外が発生したときの装置の状態に戻して、正確なトラップ処理を実施して動作を再開する。正確なトラップが起こった場合、トラップを誘導した命令パケットの前に出された全ての命令パケットの実行を完了して正確な状態にする。さらに、プロセッサ１００は、たとえトラップ誘導命令の前にｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を終了していたとしても、トラップを誘導した命令パケットの後に出された全ての命令パケットを実行しないようにする。従って、例外の時にプロセッサ１００はそれ自体をその状態に復元する。このような復元の後に実行が再開され得る。動作は、トラッピング命令から或いはトラッピング命令の後の命令から再開され得る。このような方式では、プロセッサ１００は、他のパケット命令或いはその他のパケットに対するｏｕｔ−ｏｆ−ｏｒｄｅｒ命令実行を終了してから例外を生成するが、エラーが修正可能なエラーである場合（すなわち、エラーが例外時の装置の状態の復元を妨害しない場合）は、プロセッサ１００が正確な状態で動作を再開することを可能にする命令を供給する。
【００２５】
ところが、プロセッサ１００は、破局的なエラーに対しては正確なトラップ処理を実行することができない。破局的なエラーとは、ハードウエアの誤作動によって生じ、エラーの特性によって例外時の装置の状態に復元することができないエラーである。装置の状態が復元できないため、破局的なエラーによって引き起こされた例外の後の実行は再開されない可能性がある。このような破局的なエラーの例には、修正不可能なバスのパリティーエラーがある。
【００２６】
図３はロード命令に対する正確なトラップ処理の説明に適しており、ロード命令が投機的にスケジュールされ、かつｏｕｔ−ｏｆ−ｏｒｄｅｒ命令を実行するようにスケジュールされ得ることを理解できるであろう。プロセッサ１００は、ロードおよびストアメモリの演算を処理するための専用のロード／ストアパイプ３００を保持する。図３は、専用のロード／ストアパイプ３００の一実施例を例示する模式的なタイミングダイアグラムである。ロード／ストアパイプ３００は、３つの開始ステージと、複数の実行ステージと、２つの終了ステージを含む９つの連続するステージを含む。
【００２７】
図２および図３を参照すると、ＧＦＵロード／ストアパイプ３００の動作は、パイプ制御ユニット（ＰＣＵ）２２６によって制御されている。ロード／ストアパイプライン３００の開始ステージの第１は、フェッチステージ３１０（Ｆステージ）である。Ｆステージ３１０で、プロセッサ１００は命令キャッシュ２１０から命令を取り出す。取り出された命令は、命令アライナー２１２において整列され、整列ステージ３１２（Ａステージ）すなわち開始ステージの第２のステージで命令バッファ２１４に送られる。
【００２８】
開始ステージの第３のステージである解読ステージ３１４（Ｄステージ）では、ＰＣＵ２２６は命令パケットから取り出して整列した命令を解読する。Ｄステージ３１４で、ＰＣＵ２２６は現在のロード命令に関する情報をＬＳＵ２１９に送る。４つのレジスタファイルセグメント２２４はそれぞれ、浮動小数点データ或いは整数データのいずれかを保持する。レジスタファイル２１６は解読ステージ３１４で読み出される。
【００２９】
Ｄステージ３１４ではまた、スコアボード（図示せず）が読み出されて更新される。スコアボードは、終了していないロードについての情報を備えた構造である。スコアボードは、任意の終了していないロード処理と若い命令との間のハードウエアインターロックを実現する。この若い命令は、その終了していないロード処理に従属性のデータ／出力を含む。新しい命令がＤステージ３１４に入ると、新しい命令の元および宛先レジスタのオペランドと全てのスコアボードエントリとを比較する。終了していないロードに対して割り当てられたスコアボードにおけるエントリの数は、後述するＬＳＵのロードバッファ４００（図４）におけるエントリの数に等しい。少なくとも一実施例では、スコアボードは少なくとも５つのロード命令エントリを含む。ロード命令に対するそれぞれのスコアボードエントリは、終了していない命令がどの程度古いかを示す５ビットのステージフィールドを有する。このステージフィールドは以下に記載するロードバッファ状態語４１０（図４）に類似している。このステージビットは、パイプラインステージが実行される度に右に１つシフトする。ロード命令のステージフィールドがＷＢステージ（１Ｂ’００００’）を示す前にトラップが検出される場合は、スコアボードエントリが無効になる。
【００３０】
解読ステージ３１４の後、実行ステージが実行される。実行ステージの第１のステージであるＥステージ３３２では、ＧＦＵ２２２が各ロード命令およびストア命令のアドレスを計算する。Ｅステージ３３２ではまた、命令パケットにおける全てのロード命令およびストア命令が、実行のためにロード／ストアユニット（ＬＳＵ）２１８に送られる。
【００３１】
図３および図４を参照すると、残っているパイプラインステージ３３４、３３６、３３８、３６０、および３６２でのロード命令の処理が以下に記載するように行なわれる。Ｅステージ３３２からＴステージ３６０まで、ＬＳＵ２１８はロード命令の年齢（ａｇｅ）の追跡を続ける。ＥステージでＬＳＵ２１８に送られると、ロード命令はＬＳＵのロードバッファ４００の中に配置される。少なくとも一実施例では、ロードバッファ４００は５つのエントリを有するため、最大５つのロード命令を維持することができる。少なくとも一実施例では、以下に記載するようにプロセッサ１００は４つのヒットミスの下で１つのヒットを許容するため、５つのエントリが必要である。これを達成するために、上記したように、５つのロードエントリがロードバッファ４００にサポートされ、５つのロードエントリがスコアボードによってサポートされている。
【００３２】
「ヒットアンダーヒットミス（ｈｉｔ ｕｎｄｅｒ ｍｉｓｓ）」は図２に示されている。ＬＳＵ２１８がロード処理で要求された情報のアイテムにアクセスしようとすると、このアイテムがデータキャッシュ１０６にすでに存在しているか、或いは存在していないかの何れかである。存在する場合は、キャッシュのヒットが起こる。ＬＳＵ２１８によって要求された時にデータキャッシュ１０６にアイテムが存在しない場合は、キャッシュミスが起こる。キャッシュミスが起こると、ＬＳＵ２１８によって要求された情報は、ＬＳＵ２１８がアクセスできるように、メモリから取り出してデータキャッシュ１０６に入れなければならない。キャッシュミスの後のデータキャッシュ１０６にストアされていない情報のアイテムの探索は、比較的時間がかかるプロセスである。プロセッサ１００は、先に提示されたロード命令がキャッシュミスする前に、後で提示されたロード命令がヒットし、データキャッシュ１０６から情報を得ることを許容する。この状態を、「ヒットアンダーヒットミス」と呼ぶ。
【００３３】
図３および図４を参照し、ロード／ストアパイプ３００の実行ステージでのロード命令処理の説明に戻る。各ロード命令に沿って、ＬＳＵ２１８が、命令が無効であるか否かおよびロード命令のパイプラインの年齢の追跡を続ける。有効ビット４２０は、ロード命令がトラップによってキャンセルされていないことを示す。言い換えれば、有効ビットのリセットによって効果的にロード命令がキャンセルされる。年齢の情報は状態語４１０に保持される。それぞれの状態語４１０Ａ、４１０Ｂ、４１０Ｃ、４１０Ｄ、および４１０Ｅは４つのステージビットを含み、それぞれが、Ｃ／Ａ１、Ａ２、Ａ３、またはＴパイプラインステージの１つに対応する。ＬＳＵはあるパイプラインステージから次のパイプラインステージへの移行を検出し、それぞれの移行時にステージビットを１つ右の位置にシフトする。ロード命令の年齢は以下の表１に示されているように状態語４１０において追跡される。
【００３４】
【表１】
2004520634.tif 000003
【００３５】
ＬＳＵ２１８は、ロード／ストアパイプライン３００のＣ／Ａ１ステージ３３４におけるデータキャッシュ１０６にアクセスする。ロードがデータキャッシュ１０６にヒットする場合、データはデータキャッシュ１０６から戻されて同じサイクルでＰＣＵ２２６に送られる。ＬＳＵ２１８はまた、ロードの年齢を有する状態語４１０をＰＣＵ２２６に送る。ロードがＣ／Ａ１ステージ３３４のデータキャッシュ１０６にヒットすると、状態語はＣ／Ａ１パイプラインステージ３３４に対応するロードの年齢を示す値１Ｂ’１０００’を反映する。このようにキャッシュにヒットすると、ＬＳＵ２１８がデータキャッシュ１０６にアクセスするＣ／Ａ１ステージ３３４で、ロードデータがＰＣＵ２２６に戻される。しかしながら、正確なトラップ処理を確実にするために、ヒットからの結果は、命令パケットにおけるその他全ての命令が完了するまでレジスタファイル２１６に書き込むことができない。ロードがＣ／Ａ１ステージ３３４でヒットすると、得られるデータは、残っている実行ステージが完了するまでレジスタファイル２１６に書き込むことができない。
【００３６】
ロードがデータキャッシュ１０６でキャッシュミスすると、ＬＳＵ２１８がメインメモリインターフェース１０２（図１）からデータを得た後にのみ、データがＬＳＵ２１８からＰＣＵ２２６に戻される。従って、ロード命令は、データを回収するまでＬＳＵ２１８のロードバッファに保持される。これとは対照的に、データが回収された後、全てのロード命令およびそれらの回収されたデータがＬＤＸ５００に送られる。この方式では、ロードバッファ４００およびＬＤＸ５００は、ロード命令の年齢を追跡し、古い命令がトラックされた時に若い命令を無効にする機能を共用する。以下に説明するが、一般にこの機能は、Ｔステージ３６０における、トラッピング命令と同じ命令パケットの全てのロード命令に関連する有効ビットのリセット、トラッピング命令より若いその他全てのロード命令に対する有効ビットのリセットを含む。
【００３７】
図５を参照すると、ＰＣＵ２２６によってロードデータが受け取られた後、そのロードデータはすぐにはレジスタファイル２２４に書き込まれない。すぐに書込まれると、投機的かつｏｕｔ−ｏｆ−ｏｒｄｅｒにロード命令を実行する装置のデータがコヒーレンスでなくなる可能性がある。その代わりに、ロードデータおよび関連するロード情報がロードアネックス（ＬＤＸ）５００に入る。ロードデータが十分なサイクル数の間、ＬＤＸ５００にステージされ、それによってロード命令が、そのデータがレジスタファイル２２４にブロードキャストされる前にＴパイプラインステージに到達できるようなる。ロードデータがＬＤＤＸ５００にステージされている間、データを別の機能ユニットにバイパスすることができる。トラップが検出されなかった場合は、ロードデータをＴステージ３６０でレジスタファイルにブロードキャストする。トラップがＴパイプラインステージ３６０（図３）で検出される。
【００３８】
少なくとも一実施例では、ロードデータはレジスタファイル２２４にブロードキャストされる前に３つのステージの間、ＬＤＸ５００にステージされる。３サイクルの間、ＬＤＸ５００にロードデータをステージすることによって、ロード命令自体か、或いはロード命令と同じ或いは古い命令パケットのその他の命令のいずれかによって引き起こされた全ての正確な例外が、ロード命令のキャンセルを引き起こす。すなわち、ロード命令がＷＢステージ３６２に到達する前にトラップが検出されると、ロード命令に対する有効ビットがリセットされる。ロードデータがレジスタファイル２２４にブロードキャストされると、レジスタファイル２２４は局所的にデータを保持し、次のクロックサイクルでレジスタを更新する。
【００３９】
図５は、ｌｄｘ１、ｌｄｘ２、ｌｄｘ３、およびｌｄｘ４の名称がつけられた４つのエントリを含むＬＤＸ５００を例示する。これらのＬＤＸエントリはＦＩＦＯキューとして働き、ＬＳＵ２１８からの新しいロードデータはｌｄｘ１に配置され、古いロードデータはｌｄｘ４からレジスタファイル２２４に書き込まれる。レジスタファイル２２４はロード命令のための専用の書き込みポートを有するため、ロードデータは各クロックサイクル毎にＦＩＦＯＬＤＸ５００において１エントリー下にシフトする。
【００４０】
図５には、ロードデータがステージされのは３サイクルの間であるが、ｌｄｘ１、ｌｄｘ２、ｌｄｘ３、およびｌｄｘ４の４つのエントリを含むＬＤＸ５００が例示されている。４番目のエントリｌｄｘ４を用いて、レジスタファイル２２４にロードデータを書き込む。ロードデータがレジスタファイル２２４に書き込まれたサイクルと同じサイクルではそのデータにアクセスすることができないため、追加のｌｄｘ４エントリが、ロードデータが書き込まれている間そのロードデータを保持する。
【００４１】
それぞれのＬＤＸエントリｌｄｘ１、ｌｄｘ２、ｌｄｘ３、およびｌｄｘ４は、ステージフィールド５１０を含む。このステージフィールド５１０は、それがＰＣＵ２２６に入る時にＬＤＸエントリに関連するロードバッファ状態語４１０の値から得られる。ステージフィールド５１０の値は、ＬＤＸエントリにおけるロード命令の年齢を示す。特定のロード命令に対する状態語４１０がＬＤＸ５００に送られると、Ｃ／Ａ１ステージは適切でなくなる。その代わりに、ロードデータはＣ／Ａ１ステージの早い時期にＬＤＸ５００によって受け取られるため、データキャッシュ１０６にヒットしないロード命令からのデータが、特定のロード命令がＴステージを完了するまでレジスタファイル２２４に書き込まれないようにするために、ＬＤＸ５００は、Ａ２、Ａ３、およびＴステージの間の特定のロード命令の年齢の追跡のみが必要である。従って、特定のロード命令に対する４ビット状態語４１０におけるステージビットは、１ビット右にシフトし、Ａ２、Ａ３、およびＴステージに対応するステージビットは、特定のロード命令に関連するＬＤＸエントリの３ビットステージフィールド５１０に配置される。ＰＣＵ２２６は、あるパイプラインステージから次のステージへの移行を検出する。このような移行の度に、ＰＣＵ２２６はステージフィールド５１０におけるステージビットを１ビット右にシフトする。最大でも１回に１ビットのみがロード命令に対してセットされるため、右へのシフトによって効果的に最後のステージに対するステージビットをリセットし、現在のステージに対するステージビットをセットする。ＬＤＸが追跡する各パイプラインステージに対するステージフィールド５１０の値を以下の表２に示す。
【００４２】
【表２】
2004520634.tif 000004
【００４３】
表２に例示されているように、あるパイプラインステージから別のパイプラインステージへのそれぞれの逐次的な移行のための連続的な右シフト方式は、ＷＢステージ３６２およびロード命令がＷＢステージ３６２に到達した後に起こる全てのステージに対して全てのステージビットがリセットされるという効果がある。ロード命令がＷＢステージ３６２に到達する前にトラップが検出されると、そのロード命令は無効となる。少なくとも一実施例では、ＬＤＸエントリにおける有効ビット５２０は、ＰＣＵ２２６がトラップを検出したことを示すｐｃｕ＿ｔｒａｐ信号によってリセットされる。
【００４４】
それぞれのＬＤＸエントリｌｄｘ１、ｌｄｘ２、ｌｄｘ３、およびｌｄｘ４はまた、ｄｓｉｚｅフィールドを含む。このｄｓｉｚｅフィールドは、ロード命令に関連するデータが６４ビットのデータワードであるか或いは３２ビットのデータワードであるかを示す。
【００４５】
Ｃ／Ａ１ステージ３３４、Ａ２ステージ３３６、およびＡ３ステージ３３８の後の次の２つの実行ステージは、追加の実行ステージである。Ｃ／Ａ１ステージ３３４で、キャッシュデータ１０６にアクセスしてそれらのデータを戻したロード命令の場合、データがＡ２ステージ３３６およびＡ３ステージ３３８でＬＤＸ５００にステージされる。トラップ状態が、ロード／ストアパイプライン３００のＴステージ３６０でＰＣＵ２２６によって検出される。
【００４６】
図３に例示されているように、ロード／ストアパイプ３００の２つの終了ステージは、トラップ処理ステージ３６０（Ｔステージ）と、得られたデータがレジスタファイル２１６にライトバックされるライトバックステージ３６２（ＷＢステージ）とを含む。これらのステージの各ステージにおけるロード命令の処理を後述する。
【００４７】
図５に例示されているように、ＰＣＵ２２６がトラップを検出すると、トラップ信号ｐｃｕ＿ｔｒａｐを生成する。Ｔステージ３６０でこの信号を用いて、トラッピング命令より若いロード命令に対するＬＤＸエントリの有効ビットをリセットする。さらに、ＰＣＵ２２６がｐｃｕ＿ｔｒａｐ信号をＬＳＵ２１８に送り、次にＬＳＵ２１８が、トラッピング命令より若いロードバッファ４００の全てのロード命令に対する有効ビット４２０Ａ、４２０Ｂ、４２０Ｃ、４２０Ｄ、および４２０Ｅをリセットする。ＬＤＸ５００では、トラップが検出された時にロード命令がＷＢ３６２ステージに到達していない場合にのみロード命令が無効となる。言い換えれば、ＷＢ３６２ステージに到達した全てのロード命令は、そのパイプラインのトラップステージ或いはその前のステージでロード命令がにキャンセルされていないのが明らかなため、ロード命令の年齢にかかわらずレジスタファイル２２４に書き込むことができる。
【００４８】
ＬＳＵ２１８およびＰＣＵ２２６は、以下のように、ロード命令がトラッピング命令より若いか否かを決定する。ＬＤＸステージフィールド５１０およびロードバッファ状態語４１０はそれぞれ、ロード命令の年齢の追跡を続ける。ＬＤＸ５００は、最も早くてもＬＳＵ２１８がロード命令を受け取った１サイクル後にロード命令を受け取り、ステージフィールド５１０は、ＰＣＵ２２６が１つ少ないステージの追跡を続けるため、状態語４１０より１ビット少ない。上記した表１および表２に示されているように、状態語４１０およびステージフィールド５１０はロード命令がＷＢステージ３６２に到達するまで常に非ゼロの値を有する。従って、ＰＣＵ２２６およびＬＳＵ２１８は、トラップがＴ３６０ステージで検出されているため、ロード命令の年齢が非ゼロの場合、ロード命令がトラッピング命令より若いと決定する。
【００４９】
ＬＤＸ５００では、ステージフィールド５１０が非ゼロの全てのＬＤＸエントリｌｄｘ１、ｌｄｘ２、およびｌｄｘ３に対する有効ビット５２０をリセットする。少なくとも一実施例では、トラップがサイクルＮで発生すると、ＬＤＸエントリｌｄｘ１、ｌｄｘ２、およびｌｄｘ３が１つ下のサイクルＮ＋１にシフトする前に、有効ビット５２０がリセットされる。次に、ＰＣＵ２２６では、ステージフィールド５１０における全てゼロの値は、ロードデータがＴステージ３６０を過ぎて少なくともＷＢステージ３６２に到達しているため、ロードデータをレジスタファイル２２４にブロードキャストしても安全であることを示す。
【００５０】
ＬＳＵ２１８において、状態語４１０の値が全てゼロということは、比較的長時間に渡ってキャッシュミスが起こっていることを意味する。キャッシュミスしたまたは別の方法でそれらのデータが回収されなかったロード命令のみがロードバッファに保持され、キャッシュにヒットしたロード命令およびメモリインターフェース１０２から回収したデータを有するロード命令は上記したようにＬＤＸ５００に送られる。ロードバッファ４００におけるロード命令に対する状態語４１０における全てゼロは、ロード命令のパイプラインステージが完了してＷＢステージ３６２に移行した或いはＷＢステージ３６２を過ぎた時にキャッシュミスが起こったことを意味する。この場合、ロード命令はトラッピング命令より古いため、ロード命令をキャンセルする必要がない。これとは対照的に、ＬＳＵ２１８は、ＰＣＵ２２６からｐｃｕ＿ｔｒａｐ信号を受け取った時に、状態語４１０に非ゼロの値を有する全てのロード命令をキャンセルする。
【００５１】
ＷＢステージ３６２で、ロード／ストアパイプライン３００のＴステージ３６０からのデータが、レジスタファイル２２４にブロードキャストされる。レジスタファイル２２４は、そのデータを書き込む前に、ＷＢステージフリップフロップラッチ（図示せず）にデータを保持する。
【００５２】
本発明の特定の実施例を用いて説明してきたが、当業者であれば、本発明から逸脱することなく本明細書の開示に基づいて更なる変更や変形が可能であり、請求の範囲が本発明の範囲内であるそのような全ての変更や変形を含むことを理解できよう。
【００５３】
【図面の簡単な説明】
【図１】
マルチスレッドプロセッサの一実施例を例示する模式的なブロック図である。
【図２】
マルチスレッドプロセッサの一実施例の要部を示す模式的なブロック図である。
【図３】
専用のロード／ストアパイプラインの一実施例を例示する模式的なタイミングダイアグラムである。
【図４】
ロード／ストアユニットの少なくとも１つの実施例のブロック図である。
【図５】
ロード命令に関する情報を共用するパイプ制御ユニットおよびロード／ストアユニットを例示する模式的なダイアグラムである。
【図１】
2004520634.tif 000005
【図２】
2004520634.tif 000006
【図３】
2004520634.tif 000007
【図４】
2004520634.tif 000008
【図５】
2004520634.tif 000009
【国際公開パンフレット】
2004520634.tif 000010
2004520634.tif 000011
2004520634.tif 000012
2004520634.tif 000013
2004520634.tif 000014
2004520634.tif 000015
2004520634.tif 000016
2004520634.tif 000017
2004520634.tif 000018
2004520634.tif 000019
2004520634.tif 000020
2004520634.tif 000021
2004520634.tif 000022
2004520634.tif 000023
2004520634.tif 000024
2004520634.tif 000025
2004520634.tif 000026
2004520634.tif 000027
2004520634.tif 000028
2004520634.tif 000029
2004520634.tif 000030
2004520634.tif 000031
2004520634.tif 000032
2004520634.tif 000033
2004520634.tif 000034
2004520634.tif 000035
2004520634.tif 000036
2004520634.tif 000037
2004520634.tif 000038
【国際調査報告】
2004520634.tif 000039
2004520634.tif 000040