(57)【特許請求の範囲】
【請求項１】
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド・モードを備えたＳＭＴプロセッサにおいて第１のスレッドおよび第２のスレッド用にデータを処理する共用パイプライン回路を動作させる方法であって、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードするステップと、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用の第１のデータを生成するステップと、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付し、前記第１のクロック時の間において前記入力ステージのロードと前記第１のデータとを同期させるステップと、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送するステップと
を備えた
方法。
【請求項２】
さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードするステップと、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドから前記データをロードするステップと
を備えた、
請求項１に記載の方法。
【請求項３】
さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータをアクセスするステップと、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成するステップと、
前記デコード・ステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成するステップと、
前記デコード・ステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成するステップと
を備えた、
請求項１に記載の方法。
【請求項４】
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルの遅延を有する、
請求項１に記載の方法。
【請求項５】
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
請求項４に記載の方法。
【請求項６】
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを備えたＳＭＴプロセッサであって、
第１のスレッドおよび第２のスレッド用にデータを処理する共用パイプライン回路と、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードする回路と、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用に第１のデータを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付して、前記第１のクロック時の間に前記入力ステージのロードと前記第１のデータとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送する回路と
を備えた
プロセッサ。
【請求項７】
さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す前記データをロードする回路と
備えた、
請求項６に記載のプロセッサ。
【請求項８】
さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータにアクセスする回路と、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成する回路と、
前記デコードするステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記デコードするステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
請求項６に記載のプロセッサ。
【請求項９】
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
請求項６に記載のプロセッサ。
【請求項１０】
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
請求項９に記載のプロセッサ。
【請求項１１】
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを有するＳＭＴプロセッサにおいて第１の命令スレッドおよび第２の命令スレッドが出す順次命令アドレスを交互に受領するデコード／ディスパッチ・パイプラインを動作させる方法であって、
第１のクロック時に前記第１のスレッドが出す命令アドレス、および第２のクロック時に前記第２のスレッドが出す命令アドレスを用いて前記デコード／ディスパッチ・パイプラインの命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）を交互にロードするステップと、
前記ＩＦＡＲに続く前記デコード／ディスパッチ・パイプラインの１ステージにおいて前記第１のスレッドの第１の命令のデコードに応答して目標アドレスを生成するステップと、
前記ＳＭＴモードが選択されている場合、前記目標アドレスを遅延経路を通じて前記ＩＦＡＲに送付し、前記第１のクロック時の間に前記ＩＦＡＲのロードと前記目標アドレスとを同期させるステップと、
前記単一スレッド・モードが選択されている場合、前記目標アドレスを前記ＩＦＡＲに直接に送付するステップと
を備えた
方法。
【請求項１２】
さらに、
フィードバック信号が第１の論理状態を有する場合、前記目標アドレスを前記ＩＦＡＲにロードするステップと、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す命令アドレスを前記ＩＦＡＲにロードするステップと
を備えた、
請求項１１に記載の方法。
【請求項１３】
さらに、
前記命令アドレス・レジスタにロードした第１の命令アドレスに対応する命令キャッシュ・メモリから第１の命令にアクセスするステップと、
前記第１の命令が分岐命令であるか否かを判断するステップと、
前記第１の命令が、採用されるよう予測された分岐命令である場合、前記フィードバック信号の前記第１の論理状態を生成するステップと、
前記第１の命令が、採用されるよう予測された分岐命令でない場合、前記フィードバック信号の前記第２の論理状態を生成するステップと                  備えた、
請求項１１に記載の方法。
【請求項１４】
前記遅延経路が、前記デコード／ディスパッチ・パイプラインを制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
請求項１１に記載の方法。
【請求項１５】
前記デコード／ディスパッチ・パイプラインが、前記クロック信号のＮサイクルに対応するサイクル長を有する、
請求項１４に記載の方法。
【請求項１６】
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを備えたＳＭＴプロセッサであって、
前記ＳＭＴプロセッサ内に設けられた共用デコード／ディスパッチ・パイプラインと、
第１のクロック時に前記第１のスレッドが出す命令アドレス、および第２のクロック時に前記第２のスレッドが出す命令アドレスを用いて前記デコード／ディスパッチ・パイプラインの命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）を交互にロードする回路と、
前記ＩＦＡＲに続く前記デコード／ディスパッチ・パイプラインの１ステージにおいて前記第１のスレッドの第１の命令のデコードに応答して目標アドレスを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記目標アドレスを遅延経路を通じて前記ＩＦＡＲに送付し、前記第１のクロック時の間に前記ＩＦＡＲのロードと前記目標アドレスとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記目標アドレスを前記ＩＦＡＲに直接に送付する回路と
を備えた
プロセッサ。
【請求項１７】
さらに、
フィードバック信号が第１の論理状態を有する場合、前記目標アドレスを前記ＩＦＡＲにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す命令アドレスを前記ＩＦＡＲにロードする回路と
を備えた、
請求項１６に記載のプロセッサ。
【請求項１８】
さらに、
前記命令アドレス・レジスタにロードした第１の命令アドレスに対応する命令キャッシュ・メモリから第１の命令にアクセスする回路と、
前記第１の命令が分岐命令であるか否かを判断する回路と、
前記第１の命令が、採用されるよう予測された分岐命令である場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記第１の命令が、採用されるよう予測された分岐命令でない場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
請求項１６に記載のプロセッサ。
【請求項１９】
前記遅延経路が、前記デコード／ディスパッチ・パイプラインを制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
請求項１６に記載のプロセッサ。
【請求項２０】
前記デコード／ディスパッチ・パイプラインが、前記クロック信号のＮサイクルに対応するサイクル長を有する、
請求項１９に記載のプロセッサ。
【請求項２１】
少なくとも１つの同時マルチスレッド化（ＳＭＴ）プロセッサを備えた中央処理装置（ＣＰＵ）と、
ランダム・アクセス・メモリ（ＲＡＭ）と、
入出力（Ｉ／Ｏ）アダプタと、
通信アダプタと、
前記ＣＰＵ、前記ＲＡＭ、前記Ｉ／Ｏアダプタ、および前記通信アダプタを接続するバスと、
第１のスレッドおよび第２のスレッド用にデータを処理する、前記ＳＭＴプロセッサ内に設けられた共用パイプライン回路と、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードする回路と、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用に第１のデータを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付して、前記第１のクロック時の間に前記入力ステージのロードと前記第１のデータとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送する回路と
を備えた
データ処理システム。
【請求項２２】
さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す前記データをロードする回路と
備えた、
請求項２１に記載のデータ処理システム。
【請求項２３】
さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータにアクセスする回路と、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成する回路と、
前記デコードするステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記デコードするステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
請求項２１に記載のデータ処理システム。
【請求項２４】
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
請求項２１に記載のデータ処理システム。
【請求項２５】
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
請求項２４に記載のデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に同時マルチスレッド化（simultaneous multithreading:ＳＭＴ）オペレーション・モードと単一スレッド・オペレーション・モードを備えたプロセッサ用の方法と回路に関する。
【背景技術】
【０００２】
長い間、性能を高める秘訣は１サイクル当りの命令実行数を多くすることであった。これは命令レベル並列処理（Instruction Level Parallelism:ＩＬＰ）とも呼ばれている。すなわち、命令の待ち時間を短くすることである。１サイクル当りの命令実行数を多くするには、機能ユニット（たとえば整数ユニット、不動小数点ユニット、ロード／ストア・ユニットなど）をより多く付加する必要がある。複数の命令を無矛盾に実行するには、アウト・オブ・オーダ処理（out-of-order processing:ＯＯＰ）と呼ばれる処理パラダイムを用いる。実際、この種の処理は主流になっている。
【０００３】
ＯＯＰが主流になったのは、処理パイプラインに送付済みの他の命令の結果に依存する命令が多いからである。この問題を軽減するには、直ちに実行しうるように多数の命令を格納しておくことである。こうする理由は、互いに依存しない命令をより多く発見するためである。直ちに実行可能な命令を格納するのに使用する記憶領域は再配置バッファと呼ばれている。再配置バッファの大きさは最新の商用コンピュータ・アーキテクチャでは増大し続け、一部のシステムでは１２６個もの命令を格納することができる。再配置バッファを大きくし続ける理由は単純である。すなわち、（複雑な構造のアレイとリンクしたリストをできるかぎり取り除くと）実行の観点からは、空間的に関連するコードは時間的にも関連する傾向があるからである。唯一の問題はこれらの命令が先行命令の結果にも依存する傾向があるということである。ＣＰＵが必要とするコードの量は増大し続けているから、独立した命令をより多く発見するために現在とりうる唯一の方法は再配置バッファのサイズを大きくすることである。
【０００４】
しかしながら、この手法を使うことにより、性能が向上するのと同じ速さでかなりの反動が生じている。事実、この手法を使うことによる見返りは低減し始めている。すなわち、今や同じ速さで性能の向上を達成するのにますます多くのトランジスタを使用している。ユニプロセッサ型のＩＬＰによって性能を引き出すことに過度に注視するのではなく、マルチスレッド化（マルチプロセス化）によって、しかしシステム・バスを主要な制約とすることなく、命令レベルまたはスレッド・レベルで性能を引き出すよりきめの粗い形態に注視すべきである。
【０００５】
単一のチップ上により多くのトランジスタを集積できるようになった結果、オンチップ・マルチプロセス化（on-chip multiprocessing:ＣＭＰ）が実現した。潜在的な性能の向上を利用するには、アーキテクチャはこれら複数のプロセッサをユニプロセッサ群として使用するのではなく、並列形態での命令実行を基にするマルチプロセス化を使用する必要がある。これには、ＣＭＰ上で実行するプログラムも純粋なシリアル形態すなわち逐次形態ではなく並列形態で実行しうるように作成する必要がある。アプリケーションを（マルチスレッド化した）並列形態で実行しうるように作成するものとすると、この形態で作成したプログラムを、付加したプロセッサの個数に比例した速度で実行するには固有の困難がある。
【０００６】
１つのダイ上に形成した複数のコアを使用することの背景にある一般概念は一度に２つのスレッドを実行することにより、性能を向上させることである。そうすることにより、ＣＰＵ群はともに機能ユニット総体の大部分に対して常に有益な仕事を行わせることができる。１つのプロセッサが多くの機能ユニットを保持していても、それら機能ユニットのうち常に有益な仕事をしているのは一部のものに過ぎない。オンチップ・マルチプロセッサでは、プロセッサ当りの機能ユニットの個数を少なくすることができる。各プロセッサには個別のタスク（すなわちスレッド）を配分する。このように、組み合わされた両タスクについてスループットを向上させることができる。比較対象のユニプロセッサはＣＭＰチップより高速にスレッド（すなわちタスク）を処理することができる。なぜなら、無駄な機能ユニットがあるけれども、ユニプロセッサが同時に複数個のデータを処理するとともに、利用可能な機能ユニットをすべて使用すると、アクティビティの「バースト（burst 、激発）」が生じるからである。マルチプロセッサの背景にある１つの概念は個々のプロセッサにこのようにアクティビティが激発する時間を経験させずに、各プロセッサにそれが利用可能なリソースをより頻繁に、したがって効率的に使用させることである。１クロック・サイクルの間に一部の機能ユニットを使用しないことは「水平方向の無駄（horizontal waste）」と呼ばれており、ＣＭＰが避けようとしているものである。
【０００７】
しかしながら、ＣＭＰには問題がある。伝統的なＣＭＰチップは２個以上のスレッドを迅速に完了させるために、単一スレッドの性能を犠牲にしている。このようにＣＭＰチップは一般的な用途には比較的柔軟性に欠けるが、それはスレッドが１つしかない場合、割り当てたリソースの半分がまったく使用されず完全に無用になる（これはちょうど伝統的なマルチプロセッサ（ＭＰ）システムにおいて、単一スレッドのプログラムを使用しているシステムに新たなプロセッサを付加するのと同じである）からである。ＣＭＰにおいて機能ユニットをより効率的にする１つの方法は粗粒度のマルチスレッド化（course(coarse)-grained multithreading:ＣＭＴ）を使用することである。ＣＭＴによれば、一定のクロック・サイクルの間、１つのスレッドを実行することにより、機能ユニットの使用効率を改善することができる。この使用効率の改善は「垂直方向の無駄（vertical waste）」が低減することによる。垂直方向の無駄とは１つのスレッドがストールしただけで動作する機能ユニットが無くなるという状況のことである。
【０００８】
別のスレッドに切り替えるとき、プロセッサは当該スレッドの状態を保存し（すなわちパイプライン中に存在する命令の場所や使用中のユニット名を保存し）、その後、別のスレッドに切り替える。これは複数のレジスタ・セットを使用して行う。このことの利点は、スレッドはキャッシュ・ミスが発生する前に、あるいは実行すべき独立の命令から逸脱して実行される前にあまり先に進むことができない場合が多いという事実によっている。このように、ＣＭＴプロセッサは自身がサポートしている個数のスレッドしか実行することができない。したがって、ＣＭＴプロセッサはこれらのスレッドの各々がその実行状態を格納する物理的な場所が存在する個数のスレッドしか格納することができない。それゆえ、ＮウエイのＣＭＴプロセッサはＮ個のスレッドの状態を格納する能力を保持している必要がある。
【０００９】
この概念に関する変形例として、キャッシュ・ミス（通常、Ｌ２（２次）キャッシュ・ミス）を経験するまで１つのスレッドを実行し、その時点でシステムが別のスレッドに切り替えるものがある。これにはプロセッサ中でスレッドを回転させるのに必要な論理回路を簡単化できるという利点がある。なぜなら、先行スレッドがストールしたら直ちに別のスレッドに切り替えるだけでよいからである。この結果、キャッシュに戻すべく要求されたブロックを待ち受けるペナルティが軽減される。これは一部のプロセッサが使用しているミス下のヒット（または複数ミス下のヒット）キャッシュ方式と類似しているが、命令ではなくスレッドに対して機能する点で異なる。ＣＭＴがＣＭＰに勝る利点はＣＭＴが単一スレッドの性能を犠牲にしない点である。そして、ハードウェアの重複が少ない（すなわち２つのプロセッサを対応するＣＭＴと「等しくする」のに半分以下のハードウェアで済む）。
【００１０】
マルチスレッド化に対するより積極的な手法は細粒度マルチスレッド化（fine-grained multithreading:ＦＭＴ）と呼ばれているものである。ＣＭＴと同様に、ＦＭＴの基礎はスレッド間における迅速な切り替えである。しかしながら、ＣＭＴと異なり、その概念は各サイクルごとに切り替えることである。ＣＭＴおよびＦＭＴの双方とも実際には１つのスレッドの完了は遅れるが、ＦＭＴは処理しているすべてのスレッドを迅速に完了させる。最大の関心事は全体のスループットである。
【００１１】
ＣＭＰはそれ自体で水平方向の無駄を一部取り除くことができる。ＣＭＴとＦＭＴは垂直方向の無駄を一部（または全部）取り除くことができる。しかしながら、水平方向の無駄および垂直方向の無駄の双方を低減するには、同時マルチスレッド化（Simultaneous Multithreading:ＳＭＴ）と呼ばれる最新形態のマルチスレッド化を使用する。ＳＭＴの主目標は様々なスレッドが出す命令を任意の所定時間に任意の所定機能ユニットで実行しうるようにすることである。ＳＭＴアーキテクチャはスレッド中で回転することによりＦＭＴと同様に動作し、様々なスレッドが出す命令を同時に実行することによりＣＭＰと同様に動作する。このため、アーキテクトは見返りの減少を心配することなくより広いコアを設計することができる。「不使用」の機能ユニットを異なるスレッド間で共用しうるから、ＳＭＴがＦＭＴより良好な効率を達成するのは道理にかなっている。このように、ＳＭＴはＣＭＰマシンの効率を達成している。しかしながら、ＣＭＰシステムと異なり、ＳＭＴシステムは単一スレッドの性能をほとんど、あるいはまったく犠牲にしない（少しの犠牲については後述する）。この理由は簡単である。単一のスレッドを実行しているときＣＭＰプロセッサの大部分は不使用のままであり、ＣＭＰチップ上の多くのプロセッサがこの問題を際立たせているが、ＳＭＴプロセッサでは機能ユニットがすべて単一のスレッドに専念する。これは明らかに、複数のスレッドを実行しうることほど重要ではないが、単一スレッド環境とマルチスレッド環境との間のバランスをとる能力はきわめて有用な機能である。すなわち、ＳＭＴプロセッサは、スレッド・レベル並列処理（thread-level parallelism: ＴＬＰ）が存在する場合にはそれを利用し、それが存在しない場合には命令レベル並列処理（instruction level parallelism:ＩＬＰ）に注意を集中させる。
【００１２】
複数のスレッドをサポートするために、ＳＭＴプロセッサは伝統的なスーパースカラー・プロセッサより多くのレジスタを必要とする。一般的な目標はサポートする各スレッド用にユニプロセッサの場合と同じ個数のレジスタを準備することである。これは、伝統的なＲＩＳＣ（reduced instruction set computer）チップの場合、Ｎの３２倍個のレジスタ、および何らかのリネーミング・レジスタを必要とする、ということを意味する（ただし、ＮはＳＭＴプロセッサが１サイクルで処理しうるスレッドの個数である）。４ウエイＳＭＴプロセッサ型ＲＩＳＣプロセッサの場合、これは１２８個のレジスタ、および何らかのリネーミング・レジスタを必要とする、ということを意味する。
【００１３】
大部分のＳＭＴモデルは既存のアウト・オブ・オーダー型プロセッサを単純に拡張したものである。スループットが実際に増大すると、命令発行幅に対する要求が大きくなる。そして、命令発行幅はそれ相応に増大される。上述したようにレジスタ・ファイルのサイズが増大するから、ＳＭＴパイプライン長を２ステージだけ長くしてクロック・サイクル長を長くしないようにする。したがって、レジスタ・リード・ステージとレジスタ・ライト・ステージは２つのパイプライン・ステージに分割する（１つのステージでレジスタ・バンクを選択し、残りのステージでリードまたはライトを実行する）。
【００１４】
１つのスレッドがパイプラインを支配できないようにするために、残りのスレッドが実行時間とリソースの現実的な部分を取得しうるように努力すべきである。機能ユニットがなすべき仕事を要求しているとき、フェッチ機構はパイプラインへの既投入命令が最も少ないようなスレッドにより高い優先度を付与する。無論、残りのスレッドになしうることがほとんど無い場合、前記スレッドが出す命令はパイプラインを既に支配している。
【００１５】
ＳＭＴでは共用できるものは何でも共用しようとする。しかしながら、一部の例ではこれにより、データの伝統的な構成および命令フローが混乱する。分岐予測ユニットは共用すると、効果的でなくなる。なぜなら、正確な予測をしようとすると、分岐予測ユニットはより多くの命令を備えたより多くのスレッドを追跡する必要があるので、効率が落ちるからである。すなわち、パイプラインは予測ミスによってフラッシュするが、上記欠陥を補償して余りあるスレッドを実行しうることによってより頻繁にフラッシュする必要がある。
【００１６】
ＳＭＴアーキテクチャでは、かなり大きなレジスタ・ファイルを必要とするから、使用するパイプラインが（２ステージ分だけ）長くなるので、予測ミスに対するペナルティが大きくなる。しかしながら、ＳＭＴアーキテクチャにおいて１スレッド当りに必要なレジスタの個数を最小化する手法が開発されている。これは次に示すものによって行う。すなわち、より効率的なオペレーティング・システム（ＯＳ）、レジスタの割り振り解除を良好に行うハードウェアによるサポート、および、別のスレッドがレジスタをまったく使用していない場合に当該別のスレッドとレジスタを共用する機能である。
【００１７】
別の課題はキャッシュのサイズ、キャッシュ・ラインのサイズ、およびそれらが提供する帯域幅に関連するスレッドの個数である。単一スレッドのプログラムの場合と同様に、キャッシュ・ラインのサイズを大きくすると、ミス率は小さくなるが、ミス・ペナルティは大きくなる。異なるデータをより多く使用するスレッドをより多くサポートすると、この問題が悪化する結果、各スレッドに対して効果的に機能するキャッシュは少なくなる。キャッシュに関するこの論点はマルチスレッド化した作業負荷よりもマルチプログラム化した作業負荷を扱うときにより顕著になる。したがって、使用するスレッドが多くなったら、キャッシュを大きくする必要がある。このことはＬ２キャッシュを備えたＣＭＰプロセッサにも当てはまる。
【００１８】
より多くのスレッドを使用すると、全体性能が向上するとともに、メモリ・データのアソシエーションにおける相違点がより迅速に明らかになる。明らかになっている点を挙げると、Ｌ１（主）キャッシュのサイズが一定の場合、よりアソシアティブ度の大きなキャッシュを使用すると、アクセス時間が長くなるにもかかわらず最高レベルの性能を達成することができる。アソシアティブ度の異なるブロックのサイズを変化させて性能を測定する試験を、スレッドの個数を変化させながら行った。上述したように、ブロックのアソシアティブ度を大きくすると、性能は常に向上した。しかし、２個を超えるスレッドを使用した場合、ブロックのサイズを大きくすると性能が低下した。したがって、ブロックのアソシアティブ度を大きくしても、ブロック・サイズが大きいことに起因する大きなミス・ペナルティという欠点を補償することはできない。
【００１９】
クロック・サイクルを増大させなくとも済むように、ＳＭＴプロセッサの一部はパイプラインとして実装する。たとえば、命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）をロードし、フェッチしたアドレスでキャッシュ・メモリにアクセスし、アクセスした命令が分岐命令である場合には予測を行う回路（分岐予測回路）用にパイプラインを実装する。命令が分岐命令である場合、分岐後の次の「目標」命令をキャッシュからロードしうるように、それが、採用される分岐であるか否かを予測することが重要である。パイプライン中の分岐予測論理回路は当該分岐が採用されると予測したら、分岐経路中の次の命令の目標アドレスを計算する。単一スレッドの場合、ＩＦＡＲとキャッシュ・ラインをフラッシュしたのち、予測し採用する分岐命令用に計算した目標アドレスでＩＦＡＲをロードする。この場合、単一スレッド用の命令は採用する分岐である分岐命令に基づいてプログラム順に維持される。このオペレーション用のパイプラインは明らかに単一スレッド・オペレーション用に最適化されている。
【００２０】
ＳＭＴモードでは、パイプラインの入力において２つのスレッドの各々（スレッド０（Ｔ０）とスレッド１（Ｔ１））から命令をＩＦＡＲ中に交互にロードする。たとえばＴ０を採用する分岐予測状態をが処理する場合、ＩＦＡＲへのフィードバックは通常、パイプラインの長さによって多数クロック・サイクル後に処理することになる。この時点ではＴ０とＴ１が出す命令をプログラム順に保つことが重要である。したがって、Ｔ０が出す命令の処理からのフィードバックがＴ１が出す命令の順序に影響せず、Ｔ１が出す命令の処理からのフィードバックがＴ０が出す命令の順序に影響しない、ということが重要である。要するに、こうするためにはＳＭＴモードではパイプラインが単一スレッド・モードの場合とは異なるサイクル長を有する必要があるということである。
【発明の開示】
【発明が解決しようとする課題】
【００２１】
したがって、パイプライン処理がＳＭＴモードにおいて複数のスレッドのうちの正しいものから入力を受領するように同期され、かつ、単一スレッドを実行する用途における最速のオペレーション用に最適化されるように、ＳＭＴシステムを構成する方法と回路が求められている。
【課題を解決するための手段】
【００２２】
命令フェッチ・ユニット（ＩＦＵ）は３クロック・サイクルのパイプラインを備えている。すなわち、当該パイプラインは命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）をロードする回路、命令キャッシュ（Ｉ−キャッシュ）にアクセスする回路、および命令が、採用されるよう予測されている分岐命令であるか否かを判断する回路から構成されている。ＳＭＴモードでは、交互クロック・サイクルにおいてスレッド０（Ｔ０）のプログラム・カウンタおよびスレッド１（Ｔ１）のプログラム・カウンタから交互にＩＦＡＲをロードする。１つのスレッド（たとえばＴ０）から分岐命令をロードすると、分岐予測回路は第３のクロック・サイクルになって初めて分岐が採用されるよう予測されているか否かを判断し、目標アドレス（分岐経路における次命令のアドレス）を計算する（３サイクル・パイプライン）。単一スレッド・モードでは、採用されるよう予測された分岐命令の検出に続く次クロック・サイクルである第４のクロック・サイクルで目標アドレスをＩＦＡＲにロードする。しかし、パイプラインは３サイクルであるから、これによりＳＭＴモードにおけるＴ１用の通常のロードが妨害される。本発明の一実施形態では、ＳＭＴモードが選択されており、採用されるよう予測された分岐が検出された場合、分岐予測論理回路が出す目標アドレスを１クロック・サイクルだけ遅延させる。これにより、Ｔ０用のサイクルの間に目標アドレスをＩＦＡＲにロードすることが保証されるから、Ｔ１は妨害されない。本発明では、単一スレッド・モード用の３サイクルのパイプラインからＳＭＴモード用の４サイクルのパイプラインへ効果的にパイプラインを切り替えている。
【発明を実施するための最良の形態】
【００２３】
以下の記述では、本発明の完全な理解を提供するために、個別の詳細を多数提示した。しかしながら、そのような個別の詳細がなくなとも本発明を実施しうることは当業者にとって明らかである。他の例として、不必要に詳細に提示して本発明を不明瞭にしないように、周知の回路はブロック図で示す。また、大部分の場合、タイミングに関する詳細や通信プロトコル内のデータ・フォーマットなどは、そのような詳細は本発明の完全な理解を得るのに不必要であるとともに、関連する技術分野の当業者の技能の範囲内のものであるから、省略してある。
【００２４】
次に、図面を参照する。図示した構成要素は必ずしも縮尺通りには示されていない。また、いくつかの図面を通じて同一または同様の構成要素には同じ参照符号が付してある。
【００２５】
図１を参照する。図１はＣＰＵ４１０の詳細を示す図である。ＣＰＵ４１０は１クロック・サイクル当り複数の命令を実行しうるように設計されている。したがって、任意の１クロック・サイクルの間に任意の実行ユニット（固定小数点ユニット（ＦＸＵ）１１４、浮動小数点ユニット（ＦＰＵ）１１８、およびロード／ストア・ユニット（ＬＳＵ）１１６）で複数の命令を実行することができる。同様に、ＣＰＵ４１０はＳＭＴモードにおいて複数のスレッドが出す命令を同時に実行することができる。
【００２６】
プログラム・カウンタ（ＰＣ）１３４は実行用の命令を有するスレッド０（Ｔ０）とスレッド１（Ｔ１）に対応している。スレッド・セクタ１３３はＴＯとＴ１を交互に選択して命令アドレスを命令フェッチ・ユニット（ＩＦＵ）１０８に送付する。命令アドレスは命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０３にロードする。ＩＦＡＲ１０３は命令キャッシュ（Ｉ−キャッシュ）１０４から各スレッドごとに交互に命令をフェッチする。命令は命令キュー（ＩＱ）にバッファする。ＩＱ１３５はＴ０用、ＩＱ１３６はＴ１用である。ＩＱ１３５とＩＱ１３６は命令ディスパッチ・ユニット（ＩＤＵ）１３２に接続されている。命令はスレッド優先度セクタ１３７の制御の下でＩＱ１３５およびＩＱ１３６から選択したのちリードする。通常、スレッド優先度セクタ１３７は各スレッドのプログラム制御された優先度に実質的に比例して、ＩＱ１３５およびＩＱ１３６から命令をリードする。
【００２７】
命令はＩＤＵ１３２内のデコーダ（図示せず）でデコードする。次いで、命令シーケンサ１１３が命令を様々なアルゴリズムで決められた順序にグループ化する。命令のグループは命令発行キュー（ＩＩＱ）１３１へ転送する。命令シーケンサ１１３は両スレッドからプログラム順に命令を受領するが、ＩＩＱ１３１からの命令の発行はプログラム順をはずれ、かつ両スレッドから行う。汎用レジスタ（ＧＰＲ）ファイル１１５と浮動小数点レジスタ（ＦＰＲ）ファイル１１７は複数の実行ユニットによって使用されるとともに、システムのプログラム状態を表わしている。これらのハードウェア・レジスタは「アーキテクチャ上の（architected)」レジスタと呼ばれている。命令を発行キューに投入したら、各アーキテクチャ上のレジスタをリネーム（名称変更）する。変更する各アーキテクチャ上のレジスタには物理レジスタを割り当て、対応するルックアップ・テーブルによってアーキテクチャ上のレジスタに付随する物理レジスタを特定する。したがって、発行キューにおいては、アーキテクチャ上のレジスタはリネームされている。この結果、１つのアーキテクチャ上のレジスタの複数のコピーが同時に存在しうる。これにより、ソース・オペランドが利用可能なかぎり命令をアウト・オブ・オーダーに実行することが可能になる。レジスタ・リネーミング・ユニット１４０はレジスタをリネームしてマップすることにより、特定の物理レジスタを参照しているすべての命令が完了し、当該特定の物理レジスタがアーキテクチャ上の最新の状態を格納していないときには不使用の物理レジスタを再割り当てしうるようにする。
【００２８】
命令はＩＩＱ１３１にキュー入れして適切な実行ユニットでの実行の用に供する。命令が固定小数点オペレーションを含んでいたら、複数の固定小数点ユニット（ＦＸＵ）１１４のうちの任意のものを使用する。すべての実行ユニット（ＦＸＵ１１４、ＦＰＵ１１８、およびＬＳＵ１１６）は完了テーブル（図示せず）を備えた完了ユニット１１９に接続されている。完了テーブルはどの発行済み命令が完了したかという情報、および他の状態情報を表わしている。完了ユニット１１９が出す情報はＩＦＵ１０８に転送する。ＩＤＵ１３２も完了ユニット１１９に情報を送付する。ＬＳＵ１１６が出すストア・オペレーションのデータはデータ・キャッシュ（Ｄ−キャッシュ）１０２に送付される。このデータは短期使用用にＤ−キャッシュ１０２に格納し、および／または、バス・インタフェース・ユニット（ＢＩＵ）１０１へ転送する。（「Ａおよび／またはＢ」は「ＡおよびＢ、Ａ、またはＢ」を表わす。）ＢＩＵ１０１はこのデータをバス４１２を介してメモリ１３９に送付する。また、ＬＳＵ１１６はＤ−キャッシュ１０２からデータをロードして実行ユニット（たとえばＦＸＵ１１４）による実行の用に供する。
【００２９】
図２は本発明の実施形態によるＩＦＵ１０８の詳細を示すブロック図である。プログラム・カウンタ１３４はプロセッサ４１０で実行中のスレッドに対応している。ＳＭＴモードでは、スレッド・セクタ１３３はクロック・サイクルごとにトグル動作を行い、Ｔ０とＴ１が出す命令アドレスを交互に選択する。この実施形態では一般に、クロック・サイクルごとにＩＦＡＲ１０３をロードして、順次アドレスをロードする。ただし、（先行してロードしたアドレスに由来する）リダイレクトを強要する古い命令がいくつか残っている場合はこの限りでない。その場合には、別の源からＩＦＡＲ１０３をロードする。本発明に関しては説明しないが、実際にはＩＦＡＲ１０３をロードするための源がいくつか存在する。
【００３０】
ＩＦＵ１０８は次に示す３サイクルから成るパイプラインを備えている。すなわち、ＩＦＡＲ１０３のロード、Ｉ−キャッシュ１０４へのアクセス、および、問題の命令が分岐予測論理回路２０３で採用される予測分岐であるか否かの判断である。分岐予測論理回路２０３は採用が予測される分岐命令を検出したら、ＩＦＡＲに書き込む目標アドレスを計算する。この結果、採用される経路に対応する次命令にＩ−キャッシュ１０４からアクセスすることが可能になる。単一スレッド・モードでは、出力２０４は入力２１１（目標アドレスとＩＦＡＲ１０３用の制御信号）に直結している。しかし、この実施形態の場合、分岐予測論理回路２０３が採用することが予測される分岐の検出に続く次サイクルで、分岐予測論理回路２０３が出す目標アドレスを用いてＩＦＡＲ１０３をロードする。
分岐命令に直結していた命令群はフラッシュする。
【００３１】
ＳＭＴモードでは、ＩＦＡＲ１０３をＴ０のプログラム・カウンタおよびＴ１のプログラム・カウンタから交互にロードする。他のサイクルは特定のスレッドに割り当てる。プログラムの命令順序を維持するために、このプロトコルを順守する必要がある。ＳＭＴモードでは、分岐予測論理回路２０３はＴ０が出す採用されると予測される分岐命令を検出し、目標アドレスを入力２０４からＩＦＡＲ１０３に直接に送付すると、そのロードはＴ１のサイクルにおいて行う。このような状態でＩＦＡＲ１０３のロードを行うと、プログラムの命令順序が壊れる。
【００３２】
この問題を解決するために、フィードバック・ステージを１クロック・サイクル拡張する手段を付加する。具体的には、ＭＵＸ２０８とレジスタ２０７を付加する。ＭＵＸ２０８はＳＭＴモード信号２０６の制御の下で入力２０４または入力２０９を選択する。ＳＭＴモードが選択されていない場合、信号２０６は入力２０４を選択し、目標アドレスと何らかの制御信号をＩＦＡＲ１０３の入力２１１に直結させる。入力２１１に接続された制御信号は目標アドレスを用いてＩＦＡＲをロードすべきか否かを表わしている。ＳＭＴモードが選択されている場合、信号２０６は入力２０９を選択してＩＦＡＲ１０３の入力２１１に接続させる。レジスタ２０７は制御信号と目標アドレスを受領するが、フィードバック経路に１クロック・サイクルの遅延を挿入する。これにより、分岐が分岐予測論理回路２０３において、採用されるように予測された場合、ＳＭＴモードの間にパイプラインを１ステージ分だけ効果的に増大させることが可能になる。
【００３３】
図３は本発明の一実施形態における方法ステップ群のフローチャートを示す図である。ステップ３０１では、クロック・サイクル２０１ごとに２つのスレッドが出す命令アドレスを交互に選択して、ＩＦＡＲ１０３の入力に接続する。この選択プロセスはＩＦＡＲ、Ｉ−キャッシュ、および分岐予測論理回路から成るパイプライン・ステージで何が起ころうとも、それとは無関係である。ステップ３０２では、現クロック・サイクルの間に分岐予測論理回路が、採用されるよう予測された分岐命令を検出したか否かを決める試験を行う。分岐命令は２クロック・サイクル先行してＩＦＡＲにロードされたアドレスに起因している。試験の結果がＮＯの場合には、ＩＦＡＲ１０３の入力において、選択したスレッドが出すアドレスを用いてＩＦＡＲ１０３をロードするだけである。ステップ３０２とステップ３０３では、第３のパイプライン・ステージにおいて分岐予測論理回路２０３が出す、採用されるよう予測された分岐を検出したことを示すフィードバックを待ち受けることを繰り返す。ステップ３０２の試験の結果がＹＥＳの場合、分岐予測論理回路は採用されるよう予測された分岐を検出しているとともに、とるべき経路用の目標アドレスを計算している。ＳＭＴモードまたは単一スレッド・モードのどちらが選択されているかによって、異なるオペレーションを行う。ステップ３０４では、ＳＭＴモードが選択されているか否かを判断する試験を行う。ＳＭＴモードが選択されていない場合、単一スレッド・モードのフィードバック・プロセスをステップ３０５で実行する。その場合、フラッシュ・サイクルにおいて、ＩＦＡＲと単一スレッド用のキャッシュ・ラインをフラッシュする。次いで、ステップ３０６では、採用されるよう予測された分岐の検出に続く次クロック・サイクルにおいて、分岐予測論理回路が出す目標アドレスを用いてＩＦＡＲ１０３をロードする。ステップ３０４の試験の結果がＹＥＳの場合、ＳＭＴモードが選択されており、採用されるよう予測された分岐が（たとえばＴ０から）検出されている。この場合、現クロック・サイクルにおいて現選択スレッド（Ｔ０）が出すアドレスを用いてＩＦＡＲ１０３をロードする。ステップ３０８では、採用されるよう予測された分岐命令に直結する命令群をフラッシュする。ステップ３０９では、目標アドレスおよび何らかの制御信号から成るフィードバックをレジスタ２０７を用いて１クロック・サイクルだけ遅延させる。分岐予測論理回路２０３における採用されるよう予測された分岐の検出に続く次クロック・サイクルは、採用されるよう予測され検出された分岐を出したＴ０用ではなくＴ１用のサイクルである。処理のこの時点におけるプログラム順序が維持されていることを保証するために、この１サイクルの遅延によって、ＳＭＴモードにおいてフィードバックが同期していることを保証している。レジスタ２０７はＳＭＴモードにおいて採用されるよう予測された分岐用に１クロック・サイクル付加する。これにより、パイプラインは１ステージだけ効果的に長くなる。単一スレッド・モードであろうがＳＭＴモードであろうが、採用されるよう予測される分岐が存在しない場合、パイプラインは３ステージのままである。ステップ３１０では、遅延サイクルに続く次クロック・サイクルにおいて、分岐予測論理回路２０３が計算した目標アドレスを用いてＩＦＡＲ１０３をロードする。ステップ３１０に続いて、ステップ３０２へ戻る分岐を辿る。
【００３４】
図３の方法において、ステップ３０３を実行するのは、採用されるよう予測される分岐命令が検出されなかったことを示す、ステップ３０２における試験の結果がＮＯの場合である。また、ＩＦＡＲ１０３の実際のオペレーションは命令の様々な場合をすべて考慮するとずっと複雑である。ここでは、本発明の説明を簡単化するために、すべての場合は考慮しなかった。たとえば、ＩＦＡＲ１０３中のアドレスに応答してフェッチした命令はＴ０用のの命令キュー１３５とＴ１用のの命令キュー１３６に格納する。本発明の一実施形態では、キュー１３５、１３６にフェッチした命令用の空きがある場合、並列にフェッチした命令の個数（たとえば３２バイト境界の場合には一度に８個の命令をフェッチしうる）だけＩＦＡＲ１０３をインクリメントする。キュー１３５、１３６に現在フェッチした命令用の空きがない場合には、ＩＦＡＲ１０３を保持する。しかし、これが真であるのは、後続するパイプラインが出すアドレスをフィードバックしている古い命令が存在しない場合のみである。そのような場合が発生するのは、分岐命令が誤予測された場合、例外状態を発生させた命令を再実行する必要がある場合、および、外部割込みが存在する場合である。
【００３５】
本発明を実施するための代表的なハードウェア環境を図４に示す。図４は本発明によるワークステーションの典型的なハードウェア構成を示す図である。前記ワークステーションは同時マルチスレッド（ＳＭＴ）処理を備えた中央処理装置（ＣＰＵ）４１０、およびシステム・バス４１２を介して相互接続された多数の他の装置を備えている。図４に示すワークステーションはＲＡＭ（random access memory）４１４、ＲＯＭ（read only memory）４１６、周辺装置（たとえばディスク装置４２０やテープ装置４４０）をバス４１２に接続する入出力（Ｉ／Ｏ）アダプタ４１８、キーボード４２４、マウス４２６、スピーカ４２８、マイクロフォン４３２、および／またはユーザ・インタフェース装置（たとえばタッチ画面装置（図示せず））をバス４１２に接続するユーザ・インタフェース・アダプタ４２２、ワークステーションをデータ処理ネットワーク４５１に接続する通信アダプタ４３４、ならびに、バス４１２を表示装置４３８に接続するディスプレイ・アダプタ４３６を備えている。
【００３６】
以上、本発明およびその利点を詳細に説明したが、理解すべき点を挙げると、特許請求の範囲によって定義した本発明の本旨と範囲の内で様々な変形、置換、および変更をなすことができる。
【００３７】
まとめとして以下の事項を開示する。
（１）
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド・モードを備えたＳＭＴプロセッサにおいて第１のスレッドおよび第２のスレッド用にデータを処理する共用パイプライン回路を動作させる方法であって、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードするステップと、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用の第１のデータを生成するステップと、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付し、前記第１のクロック時の間において前記入力ステージのロードと前記第１のデータとを同期させるステップと、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送するステップと
を備えた
方法。
（２）  さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードするステップと、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドから前記データをロードするステップと
を備えた、
上記（１）に記載の方法。
（３）  さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータをアクセスするステップと、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成するステップと、
前記デコード・ステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成するステップと、
前記デコード・ステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成するステップと
を備えた、
上記（１）に記載の方法。
（４）
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルの遅延を有する、
上記（１）に記載の方法。
（５）
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
上記（４）に記載の方法。
（６）
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを備えたＳＭＴプロセッサであって、
第１のスレッドおよび第２のスレッド用にデータを処理する共用パイプライン回路と、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードする回路と、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用に第１のデータを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付して、前記第１のクロック時の間に前記入力ステージのロードと前記第１のデータとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送する回路と
を備えた
プロセッサ。
（７）  さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す前記データをロードする回路と
備えた、
上記（６）に記載のプロセッサ。
（８）  さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータにアクセスする回路と、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成する回路と、
前記デコードするステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記デコードするステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
上記（６）に記載のプロセッサ。
（９）
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
上記（６）に記載のプロセッサ。
（１０）
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
上記（９）に記載のプロセッサ。
（１１）
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを有するＳＭＴプロセッサにおいて第１の命令スレッドおよび第２の命令スレッドが出す順次命令アドレスを交互に受領するデコード／ディスパッチ・パイプラインを動作させる方法であって、
第１のクロック時に前記第１のスレッドが出す命令アドレス、および第２のクロック時に前記第２のスレッドが出す命令アドレスを用いて前記デコード／ディスパッチ・パイプラインの命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）を交互にロードするステップと、
前記ＩＦＡＲに続く前記デコード／ディスパッチ・パイプラインの１ステージにおいて前記第１のスレッドの第１の命令のデコードに応答して目標アドレスを生成するステップと、
前記ＳＭＴモードが選択されている場合、前記目標アドレスを遅延経路を通じて前記ＩＦＡＲに送付し、前記第１のクロック時の間に前記ＩＦＡＲのロードと前記目標アドレスとを同期させるステップと、
前記単一スレッド・モードが選択されている場合、前記目標アドレスを前記ＩＦＡＲに直接に送付するステップと
を備えた
方法。
（１２）  さらに、
フィードバック信号が第１の論理状態を有する場合、前記目標アドレスを前記ＩＦＡＲにロードするステップと、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す命令アドレスを前記ＩＦＡＲにロードするステップと
を備えた、
上記（１１）に記載の方法。
（１３）  さらに、
前記命令アドレス・レジスタにロードした第１の命令アドレスに対応する命令キャッシュ・メモリから第１の命令にアクセスするステップと、
前記第１の命令が分岐命令であるか否かを判断するステップと、
前記第１の命令が、採用されるよう予測された分岐命令である場合、前記フィードバック信号の前記第１の論理状態を生成するステップと、
前記第１の命令が、採用されるよう予測された分岐命令でない場合、前記フィードバック信号の前記第２の論理状態を生成するステップと                  備えた、
上記（１１）に記載の方法。
（１４）
前記遅延経路が、前記デコード／ディスパッチ・パイプラインを制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
上記（１１）に記載の方法。
（１５）
前記デコード／ディスパッチ・パイプラインが、前記クロック信号のＮサイクルに対応するサイクル長を有する、
上記（１４）に記載の方法。
（１６）
同時マルチスレッド化（ＳＭＴ）モードおよび単一スレッド動作モードを備えたＳＭＴプロセッサであって、
前記ＳＭＴプロセッサ内に設けられた共用デコード／ディスパッチ・パイプラインと、
第１のクロック時に前記第１のスレッドが出す命令アドレス、および第２のクロック時に前記第２のスレッドが出す命令アドレスを用いて前記デコード／ディスパッチ・パイプラインの命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）を交互にロードする回路と、
前記ＩＦＡＲに続く前記デコード／ディスパッチ・パイプラインの１ステージにおいて前記第１のスレッドの第１の命令のデコードに応答して目標アドレスを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記目標アドレスを遅延経路を通じて前記ＩＦＡＲに送付し、前記第１のクロック時の間に前記ＩＦＡＲのロードと前記目標アドレスとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記目標アドレスを前記ＩＦＡＲに直接に送付する回路と
を備えた
プロセッサ。
（１７）  さらに、
フィードバック信号が第１の論理状態を有する場合、前記目標アドレスを前記ＩＦＡＲにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す命令アドレスを前記ＩＦＡＲにロードする回路と
を備えた、
上記（１６）に記載のプロセッサ。
（１８）  さらに、
前記命令アドレス・レジスタにロードした第１の命令アドレスに対応する命令キャッシュ・メモリから第１の命令にアクセスする回路と、
前記第１の命令が分岐命令であるか否かを判断する回路と、
前記第１の命令が、採用されるよう予測された分岐命令である場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記第１の命令が、採用されるよう予測された分岐命令でない場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
上記（１６）に記載のプロセッサ。
（１９）
前記遅延経路が、前記デコード／ディスパッチ・パイプラインを制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
上記（１６）に記載のプロセッサ。
（２０）
前記デコード／ディスパッチ・パイプラインが、前記クロック信号のＮサイクルに対応するサイクル長を有する、
上記（１９）に記載のプロセッサ。
（２１）
少なくとも１つの同時マルチスレッド化（ＳＭＴ）プロセッサを備えた中央処理装置（ＣＰＵ）と、
ランダム・アクセス・メモリ（ＲＡＭ）と、
入出力（Ｉ／Ｏ）アダプタと、
通信アダプタと、
前記ＣＰＵ、前記ＲＡＭ、前記Ｉ／Ｏアダプタ、および前記通信アダプタを接続するバスと、
第１のスレッドおよび第２のスレッド用にデータを処理する、前記ＳＭＴプロセッサ内に設けられた共用パイプライン回路と、
第１のクロック時に前記第１のスレッドが出すデータを用い、第２のクロック時に前記第２のスレッドが出すデータを用いて前記共用パイプライン回路の入力ステージを交互にロードする回路と、
前記入力ステージに続くパイプライン・ステージにおいて前記第１のスレッド用に第１のデータを生成する回路と、
前記ＳＭＴモードが選択されている場合、前記第１のデータを遅延経路を通じて前記入力ステージに送付して、前記第１のクロック時の間に前記入力ステージのロードと前記第１のデータとを同期させる回路と、
前記単一スレッド・モードが選択されている場合、前記第１のデータを前記入力ステージに直接に逆送する回路と
を備えた
データ処理システム。
（２２）  さらに、
前記パイプライン・ステージが出すフィードバック信号が第１の論理状態を有する場合、前記第１のデータを前記入力ステージにロードする回路と、
前記フィードバック信号が第２の論理状態を有する場合、前記第１のスレッドまたは前記第２のスレッドが出す前記データをロードする回路と
備えた、
上記（２１）に記載のデータ処理システム。
（２３）  さらに、
前記入力ステージにロードされた第１のアドレス・データに対応するキャッシュ・メモリから第１のストア済みデータにアクセスする回路と、
前記第１のストア済みデータをデコードして第１のフィードバック・データまたは第２のフィードバック・データを生成する回路と、
前記デコードするステップが前記第１のフィードバック・データを生成する場合、前記フィードバック信号の前記第１の論理状態を生成する回路と、
前記デコードするステップが前記第２のフィードバック・データを生成する場合、前記フィードバック信号の前記第２の論理状態を生成する回路と
を備えた、
上記（２１）に記載のデータ処理システム。
（２４）
前記遅延経路が、前記共用パイプライン回路を制御するとともに前記第１のクロック時および前記第２のクロック時を生成するクロック信号の少なくとも１つのクロック・サイクルから成る遅延を有する、
上記（２１）に記載のデータ処理システム。
（２５）
前記共用パイプライン回路が、前記クロック信号のＮサイクルに対応するサイクル長を有する、
上記（２４）に記載のデータ処理システム。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施形態によるＳＭＴプロセッサにおける機能ユニットのブロック図である。
【図２】本発明の実施形態の方法ステップ群を実装する回路のブロック図である。
【図３】本発明の実施形態の方法ステップ群のフローチャートを示す図である。
【図４】本発明を実施する代表的なハードウェア環境を示す図である。
【符号の説明】
【００３９】
１０１  バス・インタフェース・ユニット（ＢＩＵ）
１０２  Ｄ−キャッシュ
１０３  命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）
１０４  命令キャッシュ（Ｉ−キャッシュ）
１０８  命令フェッチ・ユニット（ＩＦＵ）
１１３  命令シーケンサ
１１４  固定小数点ユニット（ＦＸＵ）
１１６  ロード／ストア・ユニット（ＬＳＵ）
１１８  浮動小数点ユニット（ＦＰＵ）
１１９  完了ユニット
１３１  命令発行キュー（ＩＩＱ）
１３２  ＩＤＵ
１３３  スレッド・セクタ
１３４  プログラム・カウンタ（ＰＣ）
１３５  命令キュー（ＩＱ）
１３６  命令キュー（ＩＱ）
１３７  スレッド優先度セクタ
１３９  メモリ
１４０  レジスタ・リネーム
２０３  分岐予測論理回路
２０６  信号
２０７  レジスタ
２０８  ＭＵＸ
４１０  ＣＰＵ
４１２  バス
４１４  ＲＡＭ
４１６  ＲＯＭ
４２０  ディスク装置
４４０  テープ装置
４１８  入出力（Ｉ／Ｏ）アダプタ
４２２  ユーザ・インタフェース・アダプタ
４２４  キーボード
４２６  マウス
４２８  スピーカ
４３２  マイクロフォン
４３４  通信アダプタ
４３６  ディスプレイ・アダプタ
４５１  データ処理ネットワーク
【図１】
0003716414.tif 000002
【図２】
0003716414.tif 000003
【図３】
0003716414.tif 000004
【図４】
0003716414.tif 000005