(57)【特許請求の範囲】
【請求項１】
マルチスレッド・コンピュータ・プロセッサのプロセッサ・パイプライン内の複数のスレッドの１つをフラッシュする方法であって、
（ａ）前記マルチスレッド・コンピュータ・プロセッサ内での同時処理のために前記複数のスレッドを取り出すステップであって、前記マルチスレッド・コンピュータ・プロセッサが、少なくとも１つの共用されるパイプライン・ステージを有するステップと、
（ｂ）前記共用されるパイプライン・ステージ内でストールした命令を認識するステップであって、前記ストールした命令が、前記共用されるパイプライン・ステージの前の前記プロセッサ・パイプラインに存在する少なくとも２つのスレッドのそれ以上の処理を妨げ、前記ストールした命令が前記少なくとも２つのスレッドの１つに属するステップと、
（ｃ）前記共用されるパイプライン・ステージおよび前記共用されるパイプライン・ステージの前の前記プロセッサ・パイプライン内のすべてのステージから、前記少なくとも２つのスレッドの前記１つのすべての命令をフラッシュするステップと、
（ｄ）前記プロセッサ・パイプライン内の前記少なくとも２つのスレッドのもう１つを処理するステップと
を含む方法。
【請求項２】
前記ストールした命令が、複数のスレッドの前記１つによって要求される私用リソースがブロックされるのでストールする、請求項１に記載の方法。
【請求項３】
前記ストールした命令が、前記ストールした命令によって要求される非リネームド・レジスタがブロックされるのでストールする、請求項１に記載の方法。
【請求項４】
前記ストールした命令が、同期化されたロード／ストア動作を必要とする命令であり、前記動作が遅延される、請求項１に記載の方法。
【請求項５】
（ａ）前記ストールした命令が、マイクロコード化された命令のグループの最初であることを判定するステップ
をさらに含む、請求項１に記載の方法。
【請求項６】
（ａ）前記少なくとも２つのスレッドの前記１つに関連する他の命令が、他の関連するフラッシュ条件を有するかどうかを判定するステップ
をさらに含む、請求項１に記載の方法。
【請求項７】
（ａ）前記少なくとも２つのスレッドの前記１つの前記ストールした命令または関連するフラッシュ条件を有する前記他の命令が、まずフラッシュされなければならないかどうかを判定するステップと、
（ｂ）前記他の命令がより古いので、前記関連するフラッシュ条件に従って、前記関連するフラッシュ条件を有する前記他の命令をまずフラッシュするステップと
をさらに含む、請求項６に記載の方法。
【請求項８】
前記共用されるパイプライン・ステージが、ディスパッチ・ステージである、請求項１に記載の方法。
【請求項９】
（ａ）前記ストールした命令に関連する前記少なくとも２つのスレッドの前記１つの前記命令をデコード・パイプラインから除去するステップ
をさらに含む、請求項８に記載の方法。
【請求項１０】
（ａ）前記ストールした命令に関連する前記少なくとも２つのスレッドの前記１つの前記命令を命令バッファから除去するステップ
をさらに含む、請求項８に記載の方法。
【請求項１１】
（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動するステップ
をさらに含む、請求項８に記載の方法。
【請求項１２】
（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動する前記ステップの前に、前記ストールした命令を前記ディスパッチ・ステージでストールさせた条件が解決されるまで待つステップ
をさらに含む、請求項１１に記載の方法。
【請求項１３】
（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動する前記ステップの前に、ある個数の前記プロセッサ・サイクルだけ待つステップ
をさらに含む、請求項１１に記載の方法。
【請求項１４】
ハードウェア・マルチスレッド・パイプライン・プロセッサ内のディスパッチ・フラッシュ機構であって、前記パイプライン・プロセッサが、複数のスレッドを同時に処理し、前記ディスパッチ・フラッシュ機構が、
（ａ）前記パイプライン・プロセッサの取出ステージと、
（ｂ）前記取出ステージに接続された、前記パイプライン・プロセッサのデコード・ステージと、
（ｃ）前記デコード・ステージに接続された、前記パイプライン・プロセッサのディスパッチ・ステージと、
（ｄ）前記パイプライン・プロセッサの前記取出ステージ、前記デコード・ステージ、および前記ディスパッチ・ステージに接続された、フラッシュ優先順位付けロジックと、
（ｅ）前記ディスパッチ・ステージに接続された、前記パイプライン・プロセッサの発行キューと、
（ｆ）前記発行キューに接続された、前記スレッドのそれぞれに専用の複数の私用リソースと、
（ｇ）前記パイプライン・プロセッサ内のスレッド選択ロジックと
を含み、前記複数のスレッドの１つの前記複数の命令の１つが、前記複数の私用リソースの１つが使用不能なので前記発行キューに渡されなくなり、前記スレッド選択ロジックが、前記複数のスレッドの前記１つに属する、前記ディスパッチ・ステージ、前記デコード・ステージ、および前記取出ステージ内のすべての命令を選択し、前記フラッシュ優先順位付けロジックが、前記すべての命令を除去する信号を発行する、ディスパッチ・フラッシュ機構。
【請求項１５】
プロセッサ効率を高める装置であって、
（ａ）複数のスレッドからハードウェア・マルチスレッド式パイプライン・プロセッサに命令を取り出す手段と、
（ｂ）前記命令を複数のスレッドの１つに区別する手段と、
（ｃ）前記命令をデコードする手段と、
（ｄ）前記命令が、前記命令のディスパッチに十分な私用リソースおよび共用されるリソースを有するかどうかを判定する手段と、
（ｅ）前記命令をディスパッチする手段と、
（ｆ）前記判定手段が、前記複数のスレッドの前記１つの前記命令の１つが、前記命令をディスパッチするために十分な前記ディスパッチ手段用の私用リソースを有しないと判定する時に、前記複数のスレッドの前記１つの前記命令のすべてを、前記取出手段、前記デコード手段、および前記ディスパッチ手段から除去する手段と
を含む装置。
【請求項１６】
コンピュータ処理システムであって、
（ａ）中央処理装置と、
（ｂ）前記中央処理装置に接続された半導体メモリ・ユニットと、
（ｃ）取外し可能メモリを有することができる少なくとも１つのメモリ・ドライブと、
（ｄ）ユーザが前記コンピュータ処理システムと対話するためにキーボードまたはポインティング・デバイスもしくはその両方への接続のために前記中央処理装置に接続されるキーボード／ポインティング・デバイス・コントローラと、
（ｅ）他のコンピュータ、ネットワーク、周辺装置、およびディスプレイ装置との通信のために少なくとも１つの入出力装置に接続するために前記中央処理装置に接続される複数のアダプタと、
（ｆ）少なくとも２つの独立の実行のスレッドを処理するための、前記中央処理装置内のハードウェア・マルチスレッディング・パイプライン式プロセッサであって、取出ステージ、デコード・ステージ、およびディスパッチ・ステージを含むハードウェア・マルチスレッディング・パイプライン式プロセッサと、
（ｇ）前記ディスパッチ・ステージで前記スレッドの１つの命令によって要求されるリソースが使用不能であり、したがって、前記命令が前記ディスパッチ・ステージでストールされる時を検出する命令ストール検出器と、
（ｈ）前記ストールした命令を有する前記スレッドが前のフラッシュ条件を有するかどうかを判定するフラッシュ・デコード・ロジックと、
（ｉ）他の前のフラッシュ条件が存在しない場合、または前記前のフラッシュ条件が前記ストールした命令より低い優先順位を有し、その結果、前記プロセッサが、前記プロセッサ・パイプラインを用いて前記独立の実行のスレッドのもう１つを処理することができる場合に、前記取出ステージ、前記デコード・ステージ、および前記ディスパッチ・ステージから前記ストールした命令を有する前記スレッドをフラッシュするディスパッチ・フラッシュ機構と
を含むコンピュータ処理システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、全般的には改良されたデータ処理システムに関し、具体的には、スレッドの実行がマルチスレッド・パイプライン式プロセッサのディスパッチ・ステージでストールした時の実行のスレッドの切替およびパイプラインの前のステージからのストールしたスレッドのフラッシュのための改良されたシステムおよび方法に関する。
【０００２】
【従来の技術】
コンピュータのハードウェアの観点から、ほとんどのシステムは、基本的に同一の形で動作する。コンピュータ・プロセッサは、実際には、算術演算、論理比較、ある位置から別の位置へのデータの移動など、非常に単純な動作をすばやく実行する。しかし、コンピュータ・システムの新しい機能または改良された機能としてユーザによって知覚されるものは、実際には、同一の単純な動作を超高速で実行する計算機である場合がある。コンピュータ・システムに対する改良の継続は、これらのプロセッサ・システムをさらに高速にすることを必要とする。
【０００３】
コンピュータ・システムの総合速度の尺度の１つをスループットとも称するが、これは、単位時間あたりに実行される動作の数として測定される。概念上、システム速度に対するすべての可能な改良のうちで最も単純なものは、さまざまな構成要素のクロック速度、特にプロセッサのクロック速度を高めることである。したがって、すべてが２倍の速度で走行するが、それ以外は正確に同一の形で機能する場合、そのシステムは、所与のタスクを半分の時間で実行することになる。以前に別個の構成要素から構成されていたコンピュータ・プロセッサは、構成要素のサイズの縮小と個数の減少とによって大幅に高速に動作するようになり、最終的には、プロセッサ全体が、単一チップ上の集積回路としてパッケージされるようになった。サイズの縮小によって、プロセッサのクロック速度を高めることが可能になり、したがって、システム速度を高めることが可能になった。
【０００４】
集積回路から得られる速度の大幅な向上にもかかわらず、さらに高速のコンピュータ・システムに対する需要がいまだに存在する。ハードウェア設計者は、より大規模の集積、回路のサイズのさらなる縮小および他の技法によって、さらなる速度の向上を得ることができた。しかし、設計者は、物理的なサイズの縮小を際限なく継続することは不可能であり、継続的にプロセッサ・クロック速度を高めることに限界があると考えている。したがって、コンピュータ・システムの総合スループットをさらに改善するために、他の手法に注意が向けられた。
【０００５】
クロック速度を変更しなくても、複数のプロセッサを使用することによってシステム速度を改善することが可能である。集積回路チップにパッケージされた個々のプロセッサのコストが適度であるので、これが実用的になった。スレーブ・プロセッサを使用すると、作業を中央処理装置（ＣＰＵ）からスレーブ・プロセッサにオフロードすることによって、システム速度がかなり改善される。たとえば、スレーブ・プロセッサは、通常は、入出力装置の通信および制御など、反復的で単純な特殊目的プログラムを実行する。複数のＣＰＵを単一のコンピュータ・システム、通常は複数のユーザを同時にサービスするホストベース・システム内に配置することも可能である。異なるＣＰＵのそれぞれが、異なるユーザのために異なるタスクを別々に実行することができ、したがって、複数のタスクを同時に実行するシステムの総合速度が高まる。
【０００６】
複数のＣＰＵの間でさまざまな機能の実行および結果の配布を調整することは、注意を要する作業である。スレーブ入出力プロセッサの場合、機能が事前に定義され、制限されているので、これはそれほど困難ではないが、汎用アプリケーション・プログラムを実行する複数のＣＰＵの場合、機能を調整することがはるかに困難になる。システム設計者が、プログラムの詳細を事前に知らないことがしばしばである。ほとんどのアプリケーション・プログラムは、プロセッサによって実行されるステップの単一の経路または流れに従う。この単一の経路を複数の並列経路に分割することが可能である場合もあるが、それを行うための万能のアプリケーションは、まだ研究中である。一般に、複数のプロセッサによる並列処理のために長いタスクを小さいタスクに分割することは、コードを記述するソフトウェア・エンジニアによって、ケースバイケースで行われる。この、その場限りの手法は、必ずしも反復的でなく、予測可能でもない商業トランザクションを実行する場合に特に問題がある。
【０００７】
したがって、複数のプロセッサによって総合的なシステム性能は改善されるが、アプリケーション・プログラムなどの単一のタスクが実行される速度を改善することは、はるかに困難である。ＣＰＵクロック速度が与えられた場合、１クロック・サイクルあたりに実行される動作の「平均」数を増やすことによって、ＣＰＵの速度すなわち１秒あたりに実行される動作の数をさらに増やすことが可能である。高性能単一チップ・マイクロプロセッサのための一般的なアーキテクチャが、高速実行のために頻繁に使用される命令の小さい簡略されたセットを特徴とする縮小命令セット・コンピュータ（ＲＩＳＣ）アーキテクチャであり、これらの単純な動作は、前に述べたものより高速に実行される。半導体技術が進歩するにつれて、ＲＩＳＣアーキテクチャの目標は、計算機の各クロック・サイクルに１つまたは複数の命令を実行できるプロセッサの開発になってきた。１クロック・サイクルあたりに実行される動作の「平均」数を増やすためのもう１つの手法が、ＣＰＵ内のハードウェアを変更することである。この命令あたりのクロック・サイクル数というスループット尺度は、高性能プロセッサのアーキテクチャの特徴を表すのに一般的に使用されている。
【０００８】
ＣＤＣ−６６００およびＣｒａｙ−１などの１９７０年代の高性能ベクトル・プロセッサおよびメインフレーム・コンピュータで開拓されたプロセッサ・アーキテクチャ上の諸概念が、ＲＩＳＣマイクロプロセッサに現れつつある。初期のＲＩＳＣ計算機は、非常に単純な単一チップ・プロセッサであった。超大規模集積回路（ＶＬＳＩ）技術が進歩するにつれて、追加のスペースが半導体チップ上で使用可能になる。プロセッサ・アーキテクチャの複雑さを増やすのではなく、ほとんどの開発者は、追加スペースを使用して単一ＣＰＵの実行を改善する技法を実施することを決定した。使用された２つの主要な技法が、オンチップ・キャッシュおよび命令パイプラインである。キャッシュ・メモリには、頻繁に使用されるデータがプロセッサの近くで保管され、キャッシュ・メモリを用いて、ほとんどの場合に、主記憶のフル・アクセス・タイムを待つことなしに、命令実行を継続できるようになる。並列に実行される命令を見つけるために投機的にルック・アヘッドを行うハードウェアを有する複数の実行ユニットを用いるいくつかの改良も実証された。パイプライン命令実行を用いると、前に発行された命令が完了する前に、後続の命令の実行を開始できるようになる。
【０００９】
スーパースカラ・プロセッサが、パイプライン・プロセッサの例である。従来のＲＩＳＣプロセッサの性能を、スーパースカラ・コンピュータおよびＶｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ（ＶＬＩＷ）コンピュータでさらに高めることができ、これらの両方が、１プロセッサ・サイクルあたりに複数の命令を並列に実行する。これらのアーキテクチャでは、複数の機能ユニットまたは実行ユニットが、並列に接続されて、複数のパイプラインを稼動させる。その名前から、これらのプロセッサが、各サイクルに複数の命令を実行することのできるスカラ・プロセッサであることが暗示される。スーパースカラ・パイプライン式実行の要素には、キャッシュ・メモリから１時に複数の命令を取り出す命令取出ユニット、命令が独立であり、同時に実行可能であるかどうかを判定する命令デコード・ロジック、および１時に複数の命令を実行するのに十分な数の実行ユニットが含まれる。実行ユニットは、パイプライン式とすることもでき、たとえば、浮動小数点加算器または浮動小数点乗算器が、取出ステージおよびデコード・ステージのサイクル・タイムと一致する、各実行ステージのサイクル・タイムを有することができる。
【００１０】
スーパースカラ・アーキテクチャでは、命令は、インオーダー（ｉｎ−ｏｒｄｅｒ）またはアウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）で完了することができる。インオーダー完了とは、ある命令の前にディスパッチされたすべての命令が完了するまでは、その命令を完了できないことを意味する。アウトオブオーダー完了とは、事前に定義された規則が満たされる限り、ある命令の前のすべての命令が完了する前に、その命令が完了することを許可されることを意味する。パイプライン・スーパースカラ・プロセッサ内では、命令は、まず取り出され、デコードされ、その後、バッファリングされる。リソースおよびオペランドが使用可能である時に、命令を実行ユニットにディスパッチすることができる。さらに、採用される分岐に関する予測に基づいて、命令を投機的に取り出し、ディスパッチすることができる。その結果が、どれもが最終結果を書き込むことによって完了されていない、さまざまな実行のステージの命令のプールである。リソースが使用可能になり、分岐が解決された時に、命令をプログラム順で「退却」させ、したがって、命令をプログラム順で実行する計算機の外見を保つ。
【００１１】
スーパースカラ・プロセッサは、通常は完了バッファを使用して、投機的に実行された命令を追跡または管理する。バッファ内の実行された命令のそれぞれが、一般にリネームされたレジスタおよび例外フラグに保管される結果と関連する。しかし、命令がアウト・オブ・オーダーで実行された時、具体的には、命令の１つがエラー状態に遭遇した時に、問題が生じる。その命令が後続命令および計算機状態に影響する可能性があるので、プロセッサは、エラーを有する命令で停止しなければならない。
【００１２】
スーパースカラ・システムでの命令のインオーダー完了およびアウトオブオーダー完了の両方について、これらのパイプラインが、ある情況の下で停止し、ストールする。まだ完了していない、前にディスパッチされた命令の結果に依存する命令が、パイプラインのストールを引き起こす可能性がある。たとえば、必要なデータがキャッシュ内にないすなわちキャッシュ・ミスがあるロード／ストア命令に依存する命令は、そのデータがキャッシュ内で使用可能になるまでは完了することができない。
【００１３】
ハードウェア・マルチスレッディングと称するもう１つの技法は、スレッドまたはコンテキストと称する命令のより小さいシーケンスを単一プロセッサ内で独立に実行することである。ＣＰＵが、多数の理由のいずれかのために、ストールし、これらのスレッドの１つの処理または実行を継続できない時に、ＣＰＵは、別のスレッドに切り替え、そのスレッドを実行する。コンピュータ・アーキテクチャ界で定義される用語「マルチスレッディング」は、１つのタスクを複数の関連するスレッドに分割するというソフトウェアでのこの用語の使用法と同一ではない。ソフトウェア・マルチスレッディングには、実質的に、スレッド切替が発生する前にデータを操作し、レジスタから主記憶に保管し、関係する命令および依存する命令のプログラム順を維持するオペレーティング・システムが伴う。ソフトウェア・マルチスレッディングは、ハードウェア・マルチスレッディングを必要とせず、関係もなく、逆も同様である。ハードウェア・マルチスレッディングでは、ハードウェア設計済みのレジスタおよび実行ユニットとパイプライン式プロセッサを操作して、１つまたは複数の、スレッドと称する命令の独立に実行される組の状態を、プロセッサ・ハードウェア内で維持する。スレッドは、たとえば、マルチタスク・システム内の異なるタスク、ソフトウェア・マルチスレッディング・システムからコンパイルされた異なるスレッド、または異なる入出力プロセッサから、導出することができる。しかし、ハードウェア・マルチスレッディングを、すべてのこれらのシステムと異なる、独自のものにしているのは、複数のスレッドを、プロセッサのレジスタ内で独立に維持することである。
【００１４】
ハードウェア・マルチスレッディングは、無数の形態をとることができる。マルチスレッディングによって、プロセッサが、プロセッサのレジスタ内で複数のスレッドに対して有用な作業を行うために非パイプライン・アーキテクチャまたはパイプライン式アーキテクチャのいずれかを有することができるようになる。粗粒度マルチスレッディングと称する場合もあるマルチスレッディングの１形態は、実行中のスレッドが、メモリからのデータまたは命令の取出、またはプロセッサ割込みなどの、長い待ち時間のイベントを経験するまで、１つのスレッドを実行することである。その一方で、細粒度マルチスレッディングでは、サイクル単位でスレッドをインターリーブするか切り替える。同時ハードウェア・マルチスレッディングでは、プロセッサ内でＮ個のスレッドまたはＮ個の状態が並列に維持され、同時にＮ個のスレッドが並列に実行される。Ｎ個のスレッドのそれぞれについてプロセッサ・レジスタを複製することによって、下記のレジスタの一部がＮ回複製される結果になる：汎用レジスタ、浮動小数点レジスタ、条件レジスタ、浮動小数点状況および制御レジスタ、カウント・レジスタ、リンク・レジスタ、例外レジスタ、保管／復元レジスタ、特殊目的レジスタなど。セグメント・ルックアサイド・バッファなどの特殊なバッファを、複製することができるが、複製されない場合には、各項目に、スレッド番号を用いてタグを付け、スレッド切替のたびにフラッシュすることができる。また、たとえば相関レジスタおよびリターン・スタックなどの一部の分岐予測機構も、複製することができる。マルチスレッディングは、特定の属性のための特定の機能をとりあげ、選択することによって、１つまたはすべての形態の特徴を有することもでき、たとえば、プロセッサの特徴のすべてをスレッドごとに複製する必要はなく、いくつかの共用されるレジスタといくつかの複製されるレジスタを有することができ、パイプライン内にいくつかの別々の並列ステージを有することができ、パイプラインの他の共用されるステージを有することができる。幸い、レベル１命令キャッシュ、レベル１データ・キャッシュ、命令バッファ、ストア・キュー、命令ディスパッチャ、機能ユニットまたは実行ユニット、パイプライン、変換索引緩衝機構（ＴＬＢ）、および分岐ヒストリ・テーブルなどの、プロセッサのより大きい機能の一部を複製する必要はない。しかし、別のキューまたは私用キューもしくは他のリソースがあり、プロセッサがいくつかの共用されるパイプライン・ステージを有する時に、問題が存在し、したがって、共用されるステージで命令がストールする時に、そのスレッドがその共用されるステージでストールするだけではなく、その共用されるステージ内またはそのステージの後の他のスレッドも、ストールし、実行できなくなる。
【００１５】
【発明が解決しようとする課題】
したがって、マルチスレッド・プロセッサの共用されるパイプライン・ステージおよびその前のパイプライン・ステージ内のストールしたスレッドを効率的にフラッシュすることによって、同時マルチスレッディングを機能強化する必要が、当業界に存在する。
【００１６】
【課題を解決するための手段】
これらの必要および当業者に明白になる他の必要は、マルチスレッド式コンピュータ・プロセッサのプロセッサ・パイプライン内で複数のスレッドの１つをフラッシュする方法であって、（ａ）少なくとも１つの共用されるパイプライン・ステージを有するマルチスレッド・プロセッサ内での同時処理のために複数のスレッドを取り出すステップと、（ｂ）共用されるパイプライン・ステージ内でストールした命令を認識するステップであって、ストールした命令が、プロセッサ・パイプラインに存在する少なくとも２つのスレッドのそれ以上の処理を妨げ、ストールした命令がプロセッサ・パイプラインに存在するスレッドの１つに属するステップと、（ｃ）共用されるパイプライン・ステージおよび共用されるパイプライン・ステージの前のプロセッサ・パイプライン内のすべてのステージから、ストールした命令を有する１つのスレッドのすべての命令をフラッシュするステップと、（ｄ）プロセッサ・パイプライン内のもう１つのスレッドを処理するステップとを含む方法によって満足される。ストールした命令は、ストールしたスレッドが必要とする私用リソースがブロックされているのでストールした可能性がある。命令は、ストールした命令が必要とする非リネームド・レジスタがブロックされているのでストールした可能性がある。ストールした命令は、同期化されたロード動作／ストレージ動作を必要とする命令であり、その動作が遅延された可能性がある。ストールした命令は、マイクロコード化された命令のグループの最初の命令である可能性がある。
【００１７】
この方法には、さらに、ストールした命令を有するスレッドに関連する他の命令が、他の関連するフラッシュ条件を有するかどうかを判定するステップを含めることができる。この方法には、さらに、複数のスレッドの１つのストールした命令または関連するフラッシュ条件を有する他の命令を、まずフラッシュしなければならないかどうかを判定するステップと、他の命令の方が古いので、関連するフラッシュ条件に従って、関連するフラッシュ条件を有する他の命令をまずフラッシュするステップとを含めることができる。
【００１８】
この方法には、共用されるパイプライン・ステージがディスパッチ・ステージであることも含まれる。これらの情況の下で、この方法に、ストールした命令に関連するスレッドの命令をデコード・パイプラインから除去するステップも含めることができる。この方法には、ストールした命令に関連するスレッドの命令を命令バッファから除去するステップも含めることができる。この方法には、命令がディスパッチ・ステージおよびディスパッチ・ステージの前のプロセッサ・パイプライン内のすべてのステージからフラッシュされたスレッドを再始動するステップも含めることができる。再始動のステップは、ストールした命令をディスパッチ・ステージでストールさせた条件が解決されるまで遅延することができる。フラッシュされたスレッドを再始動するステップは、複数のプロセッサ・サイクルが過ぎるまで遅延することもできる。
【００１９】
本発明は、さらに、ハードウェア・マルチスレッド・パイプライン・プロセッサ内のディスパッチ・フラッシュ機構であって、パイプライン・プロセッサが、複数のスレッドを同時に処理し、ディスパッチ・フラッシュ機構が、パイプライン・プロセッサの取出ステージと、取出ステージに接続されたパイプライン・プロセッサのデコード・ステージと、デコード・ステージに接続されたパイプライン・プロセッサのディスパッチ・ステージと、パイプライン・プロセッサの取出ステージ、デコード・ステージ、およびディスパッチ・ステージに接続されたフラッシュ優先順位付けロジックと、ディスパッチ・ステージに接続されたパイプライン・プロセッサの発行キューと、発行キューに接続されたスレッドのそれぞれに専用の複数の私用リソースと、パイプライン・プロセッサ内のスレッド選択ロジックとを含み、複数のスレッドの１つの複数の命令の１つが、複数の私用リソースの１つが使用不能なので発行キューにディスパッチされず、スレッド選択ロジックが、複数のスレッドの１つに属する、ディスパッチ・ステージ、デコード・ステージ、および取出ステージのすべての命令を選択し、フラッシュ優先順位付けロジックが、すべての命令を除去する信号を発行する、ディスパッチ・フラッシュ機構と見なすことができる。
【００２０】
本発明は、プロセッサ効率を高める装置であって、複数のスレッドからハードウェア・マルチスレッド式パイプライン・プロセッサに命令を取り出す手段と、命令を複数のスレッドの１つに区別する手段と、命令をデコードする手段と、命令が、命令のディスパッチに十分な私用リソースおよび共用されるリソースを有するかどうかを判定する手段と、命令をディスパッチする手段と、判定手段が、複数のスレッドの内の１つのスレッドの命令の１つが、ディスパッチ手段が命令をディスパッチするのに十分な私用リソースを有しないと判定する時に、複数のスレッドの１つの命令のすべてを、取出手段、デコード手段、およびディスパッチ手段から除去する手段とを含む、プロセッサ効率を高める装置とも見なされる。
【００２１】
本発明は、コンピュータ処理システムであって、中央処理装置と、中央処理装置に接続された半導体メモリ・ユニットと、取外し可能メモリを有することができる少なくとも１つのメモリ・ドライブと、ユーザがコンピュータ処理システムと対話するためのキーボードまたはポインティング・デバイスもしくはその両方への接続のために中央処理装置に接続されるキーボード／ポインティング・デバイス・コントローラと、他のコンピュータ、ネットワーク、周辺装置、およびディスプレイ装置との通信のために少なくとも１つの入出力装置に接続するために中央処理装置に接続される複数のアダプタと、少なくとも２つの独立の実行のスレッドを処理するための、中央処理装置内のハードウェア・マルチスレッディング・パイプライン式プロセッサであって、取出ステージ、デコード・ステージ、およびディスパッチ・ステージを含むハードウェア・マルチスレッディング・パイプライン式プロセッサと、ディスパッチ・ステージでスレッドの１つの命令によって要求されるリソースが使用不能であり、したがって、命令がディスパッチ・ステージでストールする時を検出する命令ストール検出器と、ストールした命令を有するスレッドが前のフラッシュ条件を有するかどうかを判定するフラッシュ・デコード・ロジックと、他の前のフラッシュ条件が存在しない場合、または前のフラッシュ条件がストールした命令より低い優先順位を有し、その結果、プロセッサが、プロセッサ・パイプライン内のもう１つの独立の実行のスレッドを処理することができる場合に、取出ステージ、デコード・ステージ、およびディスパッチ・ステージからストールした命令を有するスレッドをフラッシュするディスパッチ・フラッシュ機構とを含むコンピュータ処理システムでもある。
【００２２】
【発明の実施の形態】
ここで図面を参照すると、図では、同様の符号が図面全体を通じて同一または類似の要素を指すが、図１を参照すると、処理装置１１２の主要な構成要素のブロック図が示されており、中央処理装置（ＣＰＵ）１２６が、システム・バス１３４を介してＲＡＭ１５８、ディスケット・ドライブ１２２、ハード・ディスク１２３、ＣＤドライブ１２４、キーボード／ポインティング・デバイス・コントローラ１８４、パラレル・ポート・アダプタ１７６、ネットワーク・アダプタ１８５、ディスプレイ・アダプタ１７０、およびメディア通信インターフェース１８７に接続される。システム・バス１３４は、異なる装置の間でのデータ、コマンド、および他の情報の転送をサポートし、単一のバスとして簡略化された形で図示されているが、通常は、複数のバスとして構成され、階層的な形で配置することができる。
【００２３】
ＣＰＵ１２６は、ＲＡＭ１５８に保管された命令を実行する、汎用プログラム可能マルチスレッド・プロセッサである。マルチスレッド機能を有する単一のＣＰＵが図１に示されているが、いくつかがマルチスレッド機能を有しないものとすることができる複数のＣＰＵを有するコンピュータ・システムが、サーバで一般的であり、１つのＣＰＵがマルチスレッディング機能を有する限り、本発明の原理に従って使用できることを理解されたい。図１の他のさまざまな構成要素は、単一の実体として図示されているが、これらのそれぞれが、複数の実体からなり、複数のレベルに存在することも一般的である。ＣＰＵ１２６には、適当なマルチスレッド・プロセッサのどれであっても使用することができるが、マルチスレッディング性能を有するＩＢＭ社から入手可能なＰｏｗｅｒＰＣ系列のマイクロプロセッサの１つであることが好ましい。ＣＰＵ１２６は、揮発性のランダム・アクセス・メモリであるＲＡＭ１５８との間でデータおよび命令にアクセスし、これらを保管する。ＣＰＵは、図面の流れ図で詳細に説明される好ましい実施形態を実行するようにプログラムされることが好ましい。
【００２４】
ＲＡＭ１５８は、データおよびプログラムを保管するランダム・アクセス半導体メモリ（ＲＡＭ）であり、概念上単一のモノリシックな実体として図示されているが、メモリは、しばしばキャッシュおよび他のメモリ・デバイスの階層に配置されることを理解されたい。ＲＡＭ１５８には、通常は、電力が処理装置１１２に供給されている間にオペレーティング・システムおよびアプリケーション・ソフトウェアのセグメントを記憶する複数の個々の揮発性メモリ・モジュールが含まれる。ソフトウェア・セグメントは、１つまたは複数の仮想メモリ・ページに区分することができ、各仮想メモリ・ページに、均一な数の仮想メモリ・アドレスが含まれる。ソフトウェアの実行が、ＲＡＭ１５８内に記憶できるもの以上の仮想メモリのページを必要とする時には、現在必要ではないページが、必要なページとスワップされ、そのページは、不揮発性記憶装置であるディスケット・ドライブ１２２、ハード・ディスク１２３、またはＣＤドライブ１２４に保管される。他のタイプのデータ記憶装置を使用することができるが、ハード・ディスク１２３およびＣＤドライブ１２４に、１つまたは複数の回転式磁気ハード・ディスク・ドライブ装置または光学ハード・ディスク・ドライブ装置が含まれることが好ましい。
【００２５】
キーボード／ポインティング・デバイス・コントローラ１８４は、処理装置１１２をキーボードおよびグラフィカル・ポインティング・デバイスにインターフェースする。代替実施形態では、キーボード用とグラフィカル・ポインティング・デバイス用の別々のコントローラを設けることができる。ディスプレイ・アダプタ１７０は、ＣＰＵ１２６からのグラフィックス・データを、ディスプレイ装置の駆動に使用されるビデオ信号に変換する。ディスプレイ・アダプタ１７０は、単一または複数の端末の接続をサポートすることができ、１つまたは複数の電子回路カードまたは他のユニットとして実施することができる。
【００２６】
処理装置１１２には、ネットワーク・アダプタ１８５、メディア通信インターフェース１８７、およびパラレル・ポート・アダプタ１７６を含めることができ、これらのすべてが、処理装置１１２と周辺装置または他のデータ処理システムとの間の通信を促進する。パラレル・ポート・アダプタ１７６は、パラレル・ポートを介してプリンタにプリンタ制御信号を送ることができる。ネットワーク・アダプタ１８５は、処理装置１１２をローカル・エリア・ネットワーク（ＬＡＮ）に接続することができる。ＬＡＮは、処理装置１１２のユーザに、ソフトウェアを含む情報を、リモート・コンピュータまたはネットワーク論理記憶装置と電子的に通信する手段を提供する。さらに、ＬＡＮは、分散処理をサポートし、これによって、処理装置１１２が、ＬＡＮにリンクされた他のデータ処理システムとタスクを共用することが可能になる。たとえば、処理装置１１２を、イーサネット（Ｒ）、トークン・リング、または他のプロトコルを使用するＬＡＮを介してローカル・サーバ・コンピュータ・システムに接続することができ、そのサーバが、インターネットに接続される。メディア通信インターフェース１８７には、電話回線に接続されたモデムを含めることができ、これを介して、インターネット・アクセス・プロバイダまたはオンライン・サービス・プロバイダに到達する。しかし、ますます、他のより高帯域幅のインターフェースが実施され、したがって、メディア通信インターフェース１８７は、ケーブル・テレビジョン、無線通信、または高帯域幅通信回線および他のタイプの接続とインターフェースすることもできる。オンライン・サービスは、メディア通信インターフェース１８７を介して処理装置１１２にダウンロードできるソフトウェアを提供することができる。さらに、メディア通信インターフェース１８７を介して、処理装置１１２は、サーバ、電子メール、または電子掲示板、およびインターネットまたはワールド・ワイド・ウェブなどの他のソフトウェアの供給源にアクセスすることができる。
【００２７】
図２および図３には、本発明の好ましい実施形態によるマルチスレッド・コンピュータ・プロセッサ・アーキテクチャ２１０が示されている。図示されているのは、米国特許出願第１０８１６０号明細書、米国特許出願第２１３３２３号明細書、米国特許出願第２１３３３１号明細書、米国特許出願第３３２４１３号明細書、および米国特許出願第４３４０９５号明細書で開示されているものなどのアウトオブオーダー・パイプライン式プロセッサである。
【００２８】
上の特許出願に開示されたプロセッサは、同時ハードウェア・マルチスレッディング動作を可能にするために、下で説明するように変更された。本発明の文脈でのマルチスレッディング動作は、命令のシーケンスすなわちスレッドが、他のスレッドから独立に実行され、ハードウェア設計済みレジスタ、実行ユニット、およびパイプライン式プロセッサが、スレッドと称する１つまたは複数の独立に実行される命令の組の状態をプロセッサ・ハードウェア内で維持する、ハードウェア・マルチスレッディングを意味する。同時マルチスレッディングでは、複数のスレッドが、プロセッサのパイプライン内で同時にアクティブになる。したがって、プロセッサのパイプラインは、あるスレッドについてパイプライン・ストール条件が検出される時に、異なるスレッドに対して有用な作業を実行することができる。さらに、本発明の１実施形態を、１時に２つのスレッドだけがプロセッサのパイプライン内およびレジスタ内にあるデュアル・マルチスレッディング動作に関して説明するが、本発明のディスパッチ・フラッシュ機能の原理および文脈は、プロセッサのパイプラインの異なるステージ内および設計済みレジスタ内に３つ以上のスレッドを有することに適する。さらに、当業者は、上記特許出願に記載のアウトオブオーダー実行またはレジスタおよびキューの特定の組を有しないマルチスレッド・パイプライン式プロセッサ・アーキテクチャも、本発明のディスパッチ・フラッシュ機構を利用できることを諒解するであろう。
【００２９】
図２および図３のマルチスレッド・パイプライン・プロセッサのブロック図は、非常に簡略化されており、さまざまな要素の間の多数の接続および制御信号線が、本発明の原理によるディスパッチ・フラッシュ機能の理解を容易にするために省略されている。図２および３を参照すると、図の上部中央に命令キャッシュ２１４があり、パイプライン内のスレッドの命令が、Ｌ２キャッシュまたは主記憶２１２から命令キャッシュ２１４に取り出される。Ｌ２キャッシュまたは主記憶２１２は、単一のユニットとして簡略化されているが、実際には、これらは、システム・バスによってそれぞれから分離されており、Ｌ２キャッシュと主記憶の間またはＬ２キャッシュと命令キャッシュ２１４の間に中間キャッシュがある場合がある。アドレス追跡および命令キャッシュ２１４への制御は、１スレッドごとに少なくとも１つのアドレス、おそらくは複数のアドレスを有する命令取出アドレス・レジスタ２７０によって供給される。スレッド選択２８０ａを、特定のアドレスに関係する特定のスレッドの選択のために、命令取出アドレス・レジスタ２７０と命令キャッシュ２１４の間に入れることができる。命令キャッシュ２１４から、命令は、命令バッファ２１６に転送され、命令バッファ２１６では、分岐条件の評価が、分岐予測ロジック２７６と共に行われる。命令バッファ２１６は、フラッシュ優先順位付けロジック２６０からの入力制御信号も受け取って、本発明のディスパッチ・フラッシュ機能に従ってフラッシュされるスレッドに関連する命令が存在する場合に、どの命令がそれであるかを判定する。命令バッファ２１６の好ましい実施形態では、各スレッドの命令が、他のスレッドの命令から区別可能である。第２のスレッド選択２８０ｂが、デコード・ユニット２１８に出力される特定のスレッドの命令を選択することができる。本発明のディスパッチ・フラッシュ機能に従って、命令が、命令バッファ２１６からフラッシュされ、フラッシュされた命令に関連する分岐予測ロジック２７６内のすべての条件および命令取出アドレス・レジスタ２７０内のアドレスも、フラッシュされる。
【００３０】
デコード・ユニット２１８は、その機能を完了するのに複数のサイクルを必要とする場合があり、したがって、複数のパイプライン・ステージ２１８ａ、２１８ｂなどを有する場合がある。各パイプライン・ステージ２１８ａおよび２１８ｂが、別個のスレッドを有することが好ましい。デコード・ユニット２１８内では、後続のプロセッサ・パイプライン・ステージによる処理を簡単にするために、複雑な命令を簡略化するか異なる形で表現することができる。デコード・ユニット２１８内で発生する可能性がある他のイベントには、命令フィールド内のビットの再シャフリングまたは拡張、たとえば分岐予測または命令グループ作成のための、さまざまなフィールドからの情報の抽出が含まれる。ｌｏａｄ  ｍｕｌｔｉｐｌｅ命令またはｓｔｏｒｅ  ｍｕｌｔｉｐｌｅ命令などの一部の命令は、非常に複雑であり、命令を、一連の、マイクロコードと称するより単純な動作または命令に分割することによって、より多く処理される。デコード中に、これらの複雑な命令が、マイクロコードにデコードされ、複雑な命令を含むより単純な命令のすべてが、グループとして追跡される。デコード・ユニット２１８は、フラッシュ優先順位付けロジック２６０から制御信号を受け取って、同一のスレッドの複数のフラッシュがパイプラインの異なるステージで示される場合に、どこでフラッシュを行うかを判定する。本発明のディスパッチ・フラッシュ機能によれば、下で説明するように、ストールしたスレッドに関連する命令が、デコード・ユニット２１８からフラッシュされる。
【００３１】
デコード・ユニット２１８から、命令が、ディスパッチ・ユニット２２０に転送される。ディスパッチ・ユニット２２０は、参照された特許出願によるディスパッチ制御２４０から、およびフラッシュ優先順位付けロジック２６０から、制御信号を受け取ることができる。プロセッサ・パイプラインのディスパッチ・ユニット２２０では、すべてのリソース、キュー、およびリネームド・プールを検査して、それらがディスパッチ・ユニット２２０内の命令のために使用可能であるかどうかを判定する。異なる命令は、異なる要件を有し、命令をディスパッチ・ユニット２２０を超えてディスパッチする前に、これらの要件のすべてを満たさなければならない。ディスパッチ制御２４０およびディスパッチ・ユニット２２０は、マイクロコード化された命令または、上で説明したように複数のより単純な命令にデコードされた他の複雑な命令のディスパッチを制御する。１実施形態のプロセッサ・パイプラインは、通常は、マイクロコード化された命令グループの途中でディスパッチせず、マイクロコードの最初の命令を、成功裡にディスパッチしなければならず、後続の命令は、順番にディスパッチされる。本発明のマルチスレッド実施形態では、所与のプロセッサ・クロック・サイクル中に、１つのスレッドだけからの命令が、ディスパッチ・ユニット２２０から発行キュー２２２にディスパッチされると仮定することができる。本発明のディスパッチ・フラッシュ機構によれば、ストールしたスレッドの命令は、ディスパッチ・ユニット２２０からフラッシュされる。
【００３２】
ディスパッチ・ユニット２２０から、命令は、発行キュー２２２に入る。複数の発行キュー２２２ａおよび２２２ｂを設けることができ、アーキテクチャの選択に応じて、発行キュー２２２ａおよび２２２ｂのそれぞれに複数のスレッドが存在するか、スレッドごと１つの発行キューがあるものとすることができる。発行キュー２２２は、完了制御ロジック２３６から、ディスパッチ制御２４０から、および、非リネームド・レジスタ追跡機構２４２、ロード・リオーダ・キュー（ＬＲＱ）２４４、ストア・リオーダ・キュー（ＳＲＱ）２４６、グローバル完了テーブル（ＧＣＴ）２４８、およびリネームド・プール２５０を含めることができるがこれに制限されないさまざまなキューの組合せから、制御信号を受け取ることができる。ＬＲＱ２４４、ＳＲＱ２４６、またはＧＣＴ２４８は、スレッドの間で分割することができ、スレッドの間で共用することができ、別々のリソースまたは共用されるリソースに関して下で説明するように、スレッドごとに別のキューが存在することができる。追跡について、命令の順序を維持するために、命令をＧＣＴ２４８内で単独でまたはグループで追跡することができる。ＬＲＱ２４４およびＳＲＱ２４６は、それぞれロード命令およびストア命令の順序を維持することができ、プログラム順に関するアドレスを維持することができる。非リネームド・レジスタ追跡機構２４２は、特殊目的レジスタなどのレジスタ内の命令を追跡することができる。命令は、もう１つのマシン・サイクルに、指定された実行ユニットにディスパッチされ、この実行ユニットは、１つまたは複数の条件レジスタ・ユニット２２４、分岐ユニット２２６、固定小数点ユニット２２８、浮動小数点ユニット２３０、または、データ・キャッシュ２３４との間でデータをロードまたはストアするロード／ストア・ユニット２３２とすることができる。
【００３３】
命令の実行の成功裡の完了、または、その一方での、誤予測された分岐または実行ユニット内で発生した可能性があるエラーの通知は、完了制御ロジック２３６に転送され、この完了制御ロジック２３６は、ｆｌｕｓｈ／ｒｅｆｅｔｃｈ（フラッシュ／再取出）信号２３８を生成し、フラッシュ優先順位付けロジック２６０、複数のキューのいずれか、非リネームド・レジスタ追跡機構２４２、ＬＲＱ２４４、ＳＲＱ２４６、ＧＣＴ２４８、またはリネームド・プール２５０に送る。
【００３４】
命令がディスパッチ・ユニット２２０でストールする理由には、満杯または他の理由で命令に使用不能であるなど、命令追跡キューがブロックされている、同期命令を実行できない、満杯または他の理由で使用不能であるなど、命令が必要とするリソースがブロックされている、非リネームド・レジスタとの間でのスレッド状態の移動などが含まれる。専用のＬＲＱ２４４または専用のＳＲＱ２４６または専用のＧＣＴ２４８のいずれかがブロックされている場合には、これらのキューの後でパイプラインがストールする。使用可能なリネームド・プール２５０が不十分である場合には、パイプラインがストールする。あるプロセスが、データまたはリネームされない必要なリソースに対して直列化される、たとえば、Ｑ１がＱ２の前に発生しなければならない場合に、非リネームド・レジスタもプロセッサ・パイプラインをストールさせることができる。場合によっては、発行キュー２２２が満杯または進行のためにオペランドを待っており、パイプラインがストールする。複数の命令または複雑な命令から導出されたグループのより単純な命令の１つが、ディスパッチ・ステージでストールする可能性がある。同期命令またはアウトオブオーダー・プロセッサ内で記憶を同期化させる他の命令が、追加の情報を必要とするので、または、ＬＲＱ２４４またはＳＲＱ２４６をクリアするなどのそれ自体のスレッドのダウンストリーム・アクティビティが原因でディスパッチ・ステージで待たなければならないので、パイプラインをストールさせる可能性がある。本発明のディスパッチ・フラッシュ態様は、ストールを引き起こす条件がスレッドに固有である時の、ディスパッチでプロセッサのパイプラインをストールさせるすべての条件に適用される。
【００３５】
スレッドに関して、私用リソースまたは別のリソース、または共用されるリソースが存在する可能性がある。私用リソースの一部が、特定のスレッドの排他的使用に専用のレジスタまたはキューである。スレッドごとに１つのキューが存在するか、各キューを分割してスレッドごとに予約済みのスペースを有することができる。私用リソースの例には、非リネームド・レジスタ追跡機構２４２、発行キュー２２２、ＬＲＱ２４４、ＳＲＱ２４６、ＧＣＴ２４８、およびリネームド・プール２５０を含めることができる。私用リソースは、異なるスレッドからのポインタが、異なるデータ構造をアドレッシングし、チップの異なる部分でのキューの有利な配置を可能にするという点で、管理を単純にする。いくつかの特殊目的レジスタなどのいくつかの設計済み非リネームド・レジスタに関する命令の正しい順序付けを保証するための方法の１つが、命令をディスパッチ・ステージでストールさせて、ストールした命令が後に必要とするデータを前の命令が非リネームド・レジスタに書き込むのを待つことである。いくつかの実施形態では、複数の非リネームド・レジスタの読取／書込を単一の実体として追跡することを選択することができる。この場合には、非リネームド・レジスタ追跡機構２４２を、私用リソースとみなすことが好ましい。同様に、パイプライン内のそれ自体スレッドのダウンストリームのアクティビティを待っているのでディスパッチ・ユニット２２０でストールした時の特定のスレッドの同期命令も、私用リソースとみなすことができる。
【００３６】
しかし、その一方で、別のデータ構造は、さまざまなレジスタに関する必要が動的であるのに構造間の区分が固定されているので、共用される構造ほど効率的ではない。したがって、本発明では、さらに、データ構造およびレジスタを、共用されるリソースとして設計することもできるようにすることが企図されている。共用されるリソースとは、別々にまたは同時にのいずれかでスレッドによって共用することができるプロセッサ・レジスタおよびキューである。情況によっては、非リネームド・レジスタ追跡機構２４２、ＬＲＱ２４４、ＳＲＱ２４６、ＧＣＴ２４８、リネームド・プール２５０、および発行キュー２２２を、スレッドの間で共用することができる。一部のリソースを共用し、それ以外のリソースを私用にすることができ、たとえば、ＧＣＴ２４８を共用し、ＬＲＱ２４４およびＳＲＱ２４６を私用にすることができる。
【００３７】
本発明の好ましい実施形態によれば、私用リソースおよび「ディスパッチ・フラッシュ」と称する新しい機構を使用することによって、共用されるキューの場合に対してチップ面積を増やさずに、共用されるキュー構造に類似する性能の利益がもたらされる。命令がストールし、私用リソースがブロックされているのでその命令がパイプラインの先に進行できないことと、その命令がそのリソースにアクセスできないことが示される時に、必ず、その命令を有するスレッドのディスパッチ・フラッシュが、本発明に従って行われる。ディスパッチ・フラッシュは、ディスパッチ・ユニット２２０でストールした命令を有するスレッドを、パイプラインの命令取出部分およびデコード部分と、ディスパッチ・ユニット２２０を含めてそこまでのプロセッサのパイプラインの他のすべての部分からフラッシュさせる。フラッシュ制御信号２６２が、ｄｉｓｐａｔｃｈ  ｆｌｕｓｈ（ディスパッチ・フラッシュ）および通常のｆｌｕｓｈ／ｒｅｆｅｔｃｈ信号２３８の両方に、特定のスレッドの命令をディスパッチ・ユニット２２０およびその前のパイプライン・ステージからフラッシュさせる。しかし、ｄｉｓｐａｔｃｈ  ｆｌｕｓｈによって、他のスレッドが進行できるようになり、通常のｆｌｕｓｈ／ｒｅｆｅｔｃｈと異なって、発行キュー２２２内での命令の継続実行が可能になる。本発明のフラッシュ機能が、バイパス・キューまたは他のバイパス機構を備えないパイプライン内でスレッドの間で共用されるマルチスレッド・パイプライン・プロセス内のすべてのステージに適用されることを、当業者は理解するであろう。共用されるステージが、好ましい実施形態でディスパッチ・ステージであることは、例としてのみ解釈されなければならず、制限とみなしてはならない。
【００３８】
しかし、レジスタ・リネームド・プールが満杯または他の理由でブロックされているなど、共用されるリソースが原因でスレッドがストールした場合には、ディスパッチ・フラッシュは実行されない。これらの情況の下では、すべてのスレッドがブロックされ、通常のフラッシュが行われるか、ストール条件が解決されるまでプロセッサが待機するかのいずれかなる。ストールした命令が、デコードされた複数の命令または複雑な命令から生成された命令のグループの命令であるが、ストールした命令がグループの最初の命令でない時には、ディスパッチ・フラッシュは実行されない。
【００３９】
図４および図５は、ディスパッチ制御２４０内で実施されることが好ましい、ディスパッチ・フラッシュ機構および方法の簡略化された流れ図である。ステップ３１０で、命令がディスパッチ・ユニット２２０内にあり、ステップ３１２で、ディスパッチの必要条件が検査される。これらの必要条件の１つが、ステップ３１４にさらに示されており、ステップ３１４では、すべての必要な私用リソースが使用可能であるかどうかが判定される。図２および図３のプロセッサ・アーキテクチャでは、これらの私用リソースに、専用のまたは分離されたＬＲＱ２４４、専用のまたは分離されたＳＲＱ２４６、専用のまたは分離されたＧＣＴ２４８、またはスレッドに一意に割り振られる他のレジスタおよびリソースを含めることができる。私用リソースが使用可能である場合には、ステップ３１６で、計算機の状態を問い合わせて、同期命令がブロックされているかどうかを判定する。同期命令がブロックされていない場合には、ステップ３１８で、ディスパッチ制御２４０が、特殊目的レジスタまたは他の頻繁には使用されないレジスタなどの非リネームド・レジスタがブロックされているかどうかを調べる。
【００４０】
しかし、ステップ３１４で私用リソースまたは専用リソースが使用可能でない場合、またはステップ３１６で同期命令がブロックされている場合、またはステップ３１８で特殊目的レジスタまたは他の非リネームド・レジスタがブロックされている場合には、この処理は、ストール条件が存在するかどうかを判定する。その場合に、この処理は、ステップ３２２で、ストールした命令がマイクロコードの１つであるかどうかを問い合わせる。そうである場合には、好ましくは、ステップ３３２で他のディスパッチ・フラッシュ条件をフラッシュ優先順位付けロジック２６０内で評価する前に、ステップ３２４で、その命令がマイクロコード化された命令または複数の命令のグループの最初の命令でなければならない。しかし、ステップ３２２および３２４の判定で、命令が、マイクロコードの一部であるが、グループの先頭ではない場合には、ステップ３２６で、プロセッサ・パイプラインがディスパッチ・ステージでストールする。
【００４１】
プロセッサのハードウェア・アーキテクチャが必要とするすべての私用リソースが使用可能であり、ステップ３２０で、共用されるキューなどのすべての他の条件によって、命令が実行の準備ができていると判定される場合には、ステップ３３８で、命令を発行キューにディスパッチする。しかし、上の条件のどれかが満足されない、すなわち、私用リソースが使用可能でない（ステップ３１４）か、同期命令がブロックされている（ステップ３１６）か、非リネームド・レジスタがブロックされている（ステップ３１８）か、別の条件が満足されない（ステップ３２０）場合には、ストール条件が存在し、その条件自体が解決されるまで、スレッドのそれ以上の実行が、ステップ３２６でブロックされる。
【００４２】
フラッシュ優先順位付けロジック２６０は、ステップ３３２で、ｆｌｕｓｈ／ｒｅｆｅｔｃｈ信号、分岐誤予測、または他の設計済みフラッシュ機構などの他のフラッシュ条件が、ストールした命令を有するスレッドについてイネーブルされているかどうかを判定する。他のフラッシュ条件が存在する場合には、ステップ３３４で、フラッシュ優先順位付けロジック２６０による優先順位付けも加えて、同一のスレッドの前の命令について他のフラッシュ条件が存在するかどうかを判定する。そのスレッドを保留したもう１つのフラッシュ条件がある場合には、ステップ３３６で、フラッシュ条件について確立された優先順位方式に従って、同一のスレッドの命令をフラッシュする。ステップ３３４で、前の命令がフラッシュ条件を有しない場合、または、他の優先順位方式から、同一のスレッドの別の命令が優先順位を有しないと判定される場合、または、ステップ３３２でスレッドに関連する他のフラッシュ条件がない場合には、ステップ３３０のディスパッチ・フラッシュを実行する。
【００４３】
前に述べたように、ディスパッチ・フラッシュでは、ストールした命令および同一スレッドの後続命令が、ディスパッチ・ステージ、および、プロセッサのパイプラインの前のステージからのすべてのレジスタとプロセッサ・ステージから、除去またはフラッシュされる。たとえば、ストールしたスレッドの命令および後続命令が、ディスパッチ・ユニット２２０、デコード・ユニット２１８、命令バッファ２１６、および分岐予測ロジック２７６から除去され、アドレスが、命令取出アドレス・レジスタ２７０からクリアされる。そのスレッドは、フラッシュされた最も古い命令の位置から再取出されなければならず、命令取出アドレス・レジスタ内のアドレス、分岐予測レジスタ内のアドレス、およびそのスレッドの他の関連する設計済みレジスタの状態が、復元されなければならない。
【００４４】
スレッドは、ディスパッチ・フラッシュされ、復元された後に、通常通りにパイプラインに再入する。そのスレッドが、ディスパッチ・ブロックまたは異なるブロックにもう一度遭遇する場合には、ディスパッチ・フラッシュをもう一度行うことができる。同期命令、Ｌ２キャッシュ・ミス、またはスレッドの他の長い待ち時間イベントによって引き起こされるディスパッチ・ブロックは、長時間存続する可能性があり、したがって、ストールしたスレッドの再始動を遅延させることができ、これによって、他のスレッドにより多くのサイクルが与えられる。どの場合でも、たとえばストールした条件自体が解決されるまで、または所定の数のマシン・サイクルが過ぎるまで、スレッド選択２８０ａおよび２８０ｂでストールしたスレッドをもう一度取り出すかデコードすることをしないことが好ましい。
【００４５】
下の表で、ディスパッチ・フラッシュ機能の使用と共に分離されたキューまたは私用キューを有する同時マルチスレッド（ＳＭＴ）プロセッサで得られる性能を比較する。
【００４６】
【表１】
0003548132.tif 000002
【００４７】
最初のケースでは、共用されるキューを用い、単一スレッド式設計に対して２スレッドを用いて３５％の性能向上がある。面積コストは、Ｌ２キャッシュおよびＬ３キャッシュを除いたプロセッサ・コアの１０％である。キューが、スレッド間で単純に分割され、その結果、面積が一定に保たれる場合には、キューの柔軟でない区分のために性能が劇的に低下する。元の性能向上は、より大きいキューを用いて達成することができるが、面積が増加する。より多くのキュー項目によって、スレッドを識別するデータ構造にいくつかのビットが追加されるが、線形より大きい面積増加がもたらされる。ディスパッチ・フラッシュを追加することによって、性能が適度に高くなるが、重要なことに、コア面積が大幅に減少する。
【００４８】
不正な分岐予測からの回復に使用されるものなどの既存のフラッシュ機構とは異なって、ディスパッチ・フラッシュでは、ストールしたスレッドが、発行キューに入らなくなり、したがって、フラッシュしなければならないリソースが減り、回復が高速になる。ディスパッチ・フラッシュとは異なって、所与の分岐命令に対して、分岐では、ターゲットが予測され、ターゲットが取り出されて、デコード・パイプライン内の次の命令になる。したがって、分岐命令および予測された命令は、結局は発行キューにパイプライン化される。しかし、分岐が実行され、誤った経路であると判定されたので、信号が生成され、ＧＣＴまたは他の命令追跡キューに送られ、その結果、グループ全体のすべての命令がフラッシュされる、すなわち、発行キュー、ＬＲＱ、ＳＲＱ、ＧＣＴまたは他の命令追跡および完了テーブル、リネームド・プール、命令バッファ、デコード・パイプライン、およびディスパッチ・パイプラインの、そのスレッドに関連するすべての命令が、フラッシュされ、新しい命令が取り出される。ディスパッチ・フラッシュと通常のフラッシュのもう１つの相違は、ディスパッチ・ステージの命令が、ＧＣＴ項目を有しておらず、したがって、ＧＣＴをフラッシュする必要がないことである。さらに、ディスパッチ・フラッシュは、パイプラインの取出／デコード／ディスパッチ部分だけがフラッシュされるという点で、より安価である。
【００４９】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５０】
（１）マルチスレッド・コンピュータ・プロセッサのプロセッサ・パイプライン内の複数のスレッドの１つをフラッシュする方法であって、
（ａ）前記マルチスレッド・コンピュータ・プロセッサ内での同時処理のために前記複数のスレッドを取り出すステップであって、前記マルチスレッド・コンピュータ・プロセッサが、少なくとも１つの共用されるパイプライン・ステージを有するステップと、
（ｂ）前記共用されるパイプライン・ステージ内でストールした命令を認識するステップであって、前記ストールした命令が、前記共用されるパイプライン・ステージの前の前記プロセッサ・パイプラインに存在する少なくとも２つのスレッドのそれ以上の処理を妨げ、前記ストールした命令が前記少なくとも２つのスレッドの１つに属するステップと、
（ｃ）前記共用されるパイプライン・ステージおよび前記共用されるパイプライン・ステージの前の前記プロセッサ・パイプライン内のすべてのステージから、前記少なくとも２つのスレッドの前記１つのすべての命令をフラッシュするステップと、
（ｄ）前記プロセッサ・パイプライン内の前記少なくとも２つのスレッドのもう１つを処理するステップと
を含む方法。
（２）前記ストールした命令が、複数のスレッドの前記１つによって要求される私用リソースがブロックされるのでストールする、上記（１）に記載の方法。
（３）前記ストールした命令が、前記ストールした命令によって要求される非リネームド・レジスタがブロックされるのでストールする、上記（１）に記載の方法。
（４）前記ストールした命令が、同期化されたロード／ストア動作を必要とする命令であり、前記動作が遅延される、上記（１）に記載の方法。
（５）（ａ）前記ストールした命令が、マイクロコード化された命令のグループの最初であることを判定するステップ
をさらに含む、上記（１）に記載の方法。
（６）（ａ）前記少なくとも２つのスレッドの前記１つに関連する他の命令が、他の関連するフラッシュ条件を有するかどうかを判定するステップ
をさらに含む、上記（１）に記載の方法。
（７）（ａ）前記少なくとも２つのスレッドの前記１つの前記ストールした命令または関連するフラッシュ条件を有する前記他の命令が、まずフラッシュされなければならないかどうかを判定するステップと、
（ｂ）前記他の命令がより古いので、前記関連するフラッシュ条件に従って、前記関連するフラッシュ条件を有する前記他の命令をまずフラッシュするステップと
をさらに含む、上記（６）に記載の方法。
（８）前記共用されるパイプライン・ステージが、ディスパッチ・ステージである、上記（１）に記載の方法。
（９）（ａ）前記ストールした命令に関連する前記少なくとも２つのスレッドの前記１つの前記命令をデコード・パイプラインから除去するステップ
をさらに含む、上記（８）に記載の方法。
（１０）（ａ）前記ストールした命令に関連する前記少なくとも２つのスレッドの前記１つの前記命令を命令バッファから除去するステップ
をさらに含む、上記（８）に記載の方法。
（１１）（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動するステップ
をさらに含む、上記（８）に記載の方法。
（１２）（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動する前記ステップの前に、前記ストールした命令を前記ディスパッチ・ステージでストールさせた条件が解決されるまで待つステップ
をさらに含む、上記（１１）に記載の方法。
（１３）（ａ）その命令が前記ディスパッチ・ステージおよび前記ディスパッチ・ステージの前の前記プロセッサ・パイプライン内のすべてのステージからフラッシュされた前記少なくとも２つのスレッドの前記１つを再始動する前記ステップの前に、ある個数の前記プロセッサ・サイクルだけ待つステップ
をさらに含む、上記（１１）に記載の方法。
（１４）ハードウェア・マルチスレッド・パイプライン・プロセッサ内のディスパッチ・フラッシュ機構であって、前記パイプライン・プロセッサが、複数のスレッドを同時に処理し、前記ディスパッチ・フラッシュ機構が、
（ａ）前記パイプライン・プロセッサの取出ステージと、
（ｂ）前記取出ステージに接続された、前記パイプライン・プロセッサのデコード・ステージと、
（ｃ）前記デコード・ステージに接続された、前記パイプライン・プロセッサのディスパッチ・ステージと、
（ｄ）前記パイプライン・プロセッサの前記取出ステージ、前記デコード・ステージ、および前記ディスパッチ・ステージに接続された、フラッシュ優先順位付けロジックと、
（ｅ）前記ディスパッチ・ステージに接続された、前記パイプライン・プロセッサの発行キューと、
（ｆ）前記発行キューに接続された、前記スレッドのそれぞれに専用の複数の私用リソースと、
（ｇ）前記パイプライン・プロセッサ内のスレッド選択ロジックと
を含み、前記複数のスレッドの１つの前記複数の命令の１つが、前記複数の私用リソースの１つが使用不能なので前記発行キューに渡されなくなり、前記スレッド選択ロジックが、前記複数のスレッドの前記１つに属する、前記ディスパッチ・ステージ、前記デコード・ステージ、および前記取出ステージ内のすべての命令を選択し、前記フラッシュ優先順位付けロジックが、前記すべての命令を除去する信号を発行する、ディスパッチ・フラッシュ機構。
（１５）プロセッサ効率を高める装置であって、
（ａ）複数のスレッドからハードウェア・マルチスレッド式パイプライン・プロセッサに命令を取り出す手段と、
（ｂ）前記命令を複数のスレッドの１つに区別する手段と、
（ｃ）前記命令をデコードする手段と、
（ｄ）前記命令が、前記命令のディスパッチに十分な私用リソースおよび共用されるリソースを有するかどうかを判定する手段と、
（ｅ）前記命令をディスパッチする手段と、
（ｆ）前記判定手段が、前記複数のスレッドの前記１つの前記命令の１つが、前記命令をディスパッチするために十分な前記ディスパッチ手段用の私用リソースを有しないと判定する時に、前記複数のスレッドの前記１つの前記命令のすべてを、前記取出手段、前記デコード手段、および前記ディスパッチ手段から除去する手段と
を含む装置。
（１６）コンピュータ処理システムであって、
（ａ）中央処理装置と、
（ｂ）前記中央処理装置に接続された半導体メモリ・ユニットと、
（ｃ）取外し可能メモリを有することができる少なくとも１つのメモリ・ドライブと、
（ｄ）ユーザが前記コンピュータ処理システムと対話するためにキーボードまたはポインティング・デバイスもしくはその両方への接続のために前記中央処理装置に接続されるキーボード／ポインティング・デバイス・コントローラと、
（ｅ）他のコンピュータ、ネットワーク、周辺装置、およびディスプレイ装置との通信のために少なくとも１つの入出力装置に接続するために前記中央処理装置に接続される複数のアダプタと、
（ｆ）少なくとも２つの独立の実行のスレッドを処理するための、前記中央処理装置内のハードウェア・マルチスレッディング・パイプライン式プロセッサであって、取出ステージ、デコード・ステージ、およびディスパッチ・ステージを含むハードウェア・マルチスレッディング・パイプライン式プロセッサと、
（ｇ）前記ディスパッチ・ステージで前記スレッドの１つの命令によって要求されるリソースが使用不能であり、したがって、前記命令が前記ディスパッチ・ステージでストールされる時を検出する命令ストール検出器と、
（ｈ）前記ストールした命令を有する前記スレッドが前のフラッシュ条件を有するかどうかを判定するフラッシュ・デコード・ロジックと、
（ｉ）他の前のフラッシュ条件が存在しない場合、または前記前のフラッシュ条件が前記ストールした命令より低い優先順位を有し、その結果、前記プロセッサが、前記プロセッサ・パイプラインを用いて前記独立の実行のスレッドのもう１つを処理することができる場合に、前記取出ステージ、前記デコード・ステージ、および前記ディスパッチ・ステージから前記ストールした命令を有する前記スレッドをフラッシュするディスパッチ・フラッシュ機構と
を含むコンピュータ処理システム。
【図面の簡単な説明】
【図１】本発明の実施形態に従って使用することができるコンピュータの簡略化されたブロック図である。
【図２】本発明の好ましい実施形態のディスパッチ・フラッシュ機能を使用することができる、さまざまなパイプライン、レジスタ、および実行ユニットを有するコンピュータ処理装置の簡略化されたブロック図である。
【図３】本発明の好ましい実施形態のディスパッチ・フラッシュ機能を使用することができる、さまざまなパイプライン、レジスタ、および実行ユニットを有するコンピュータ処理装置の簡略化されたブロック図である。
【図４】本発明の実施形態のディスパッチ・フラッシュ機能の簡略化された流れ図である。
【図５】本発明の実施形態のディスパッチ・フラッシュ機能の簡略化された流れ図である。
【符号の説明】
３１２  ディスパッチ必要条件を検査するステップ
３１４  必要な専用リソースが使用可能かどうかを判定するステップ
３１６  同期命令がブロックされているかどうかを判定するステップ
３１８  非リネームド・レジスタがブロックされているかどうかを判定するステップ
３２０  すべての条件がＯＫかどうかを判定するステップ
３２２  命令がマイクロコードの一部かどうかを判定するステップ
３２４  マイクロコード・グループの最初の命令かどうかを判定するステップ
３２６  ストール、ブロック、およびディスパッチのステップ
３３０  このスレッドをディスパッチ・フラッシュするステップ
３３２  このスレッドの他のフラッシュ条件があるかどうかを判定するステップ
３３４  このスレッドの前の命令の他のフラッシュ条件があるかどうかを判定するステップ
３３６  他のフラッシュを実行するステップ
３３８  ディスパッチするステップ
【図１】
0003548132.tif 000003
【図２】
0003548132.tif 000004
【図３】
0003548132.tif 000005
【図４】
0003548132.tif 000006
【図５】
0003548132.tif 000007