(57)【要約】【課題】あるプロセッサ事象または条件に対処するために、異なる命令スレッドからの命令をインタリーブするためにＳＭＴプロセッサ内の命令スレッドを選択する命令スレッド間の選択を変更する装置および方法を提供すること。【解決手段】プロセッサ・クロック・サイクルごとに、インタリーブ規則執行構成要素が、インタリーブされた命令ストリームに命令を渡す特定の１つの命令スレッドを指示する少なくとも１つの基準命令スレッド選択信号を生成する。スレッド選択の変更は、基準スレッド選択信号と、さまざまなプロセッサ要素内の１つまたは複数の条件または事象に由来するフィードバック信号とに基づいて最終スレッド選択信号を生成するインタリーブ変更構成要素によって提供される。この最終スレッド選択信号は、インタリーブされた命令ストリームに命令を渡す命令スレッドとして、基準スレッド選択信号が指示した命令スレッドと同じ命令スレッドを指示し、または別の命令スレッドを指示することができる。【選択図】図２
2004326765.tif 000002
【特許請求の範囲】
【請求項１】
同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する方法であって、
（ａ）前記いくつかの命令スレッドの中の処理する第１の命令スレッドを指示する基準スレッド選択信号を、命令インタリーブ執行規則に少なくとも部分的に基づいて生成する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる特定の命令スレッドを指示する最終スレッド選択信号を、前記基準スレッド選択信号と前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたフィードバック信号とに基づいて生成する段階と、
（ｃ）インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つの命令スレッドを選択する選択に、前記最終スレッド選択信号を適用する段階と
を含む方法。
【請求項２】
（ａ）前記いくつかの命令スレッドの中の処理する追加の命令スレッドを指示する追加の基準スレッド選択信号を、前記命令インタリーブ執行規則に少なくとも部分的に基づいて生成する段階と、
（ｂ）前記いくつかの命令スレッドに含まれるそれぞれの命令スレッドを指示する追加の最終スレッド選択信号を、前記追加の基準スレッド選択信号と前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられた追加のフィードバック信号とに基づいて生成する段階と
をさらに含む、請求項１に記載の方法。
【請求項３】
前記最終スレッド選択信号と前記追加のスレッド選択信号を結合してスレッド選択ＭＵＸ制御信号を生成する段階をさらに含む、請求項２に記載の方法。
【請求項４】
前記追加の基準スレッド選択信号が前記基準スレッド選択信号の２進補数である、請求項２に記載の方法。
【請求項５】
（ａ）前記最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる第１の命令スレッドに関連付けられた保留入力に適用する段階と、
（ｂ）前記追加の最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる追加の命令スレッドに関連付けられた保留入力に適用する段階と
をさらに含む、請求項２に記載の方法。
【請求項６】
前記フィードバック信号が前記第１の命令スレッドに関連付けられている、請求項１に記載の方法。
【請求項７】
前記いくつかの命令スレッドが異なる処理優先度を有するときに前記フィードバック信号を無効にする段階をさらに含む、請求項１に記載の方法。
【請求項８】
同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する方法であって、
（ａ）命令インタリーブ執行規則に少なくとも部分的に基づく基準スレッド選択信号を受け取る段階であって、前記基準スレッド選択信号が、前記いくつかの命令スレッドに含まれる処理のために選択された第１の命令スレッドを指示する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたフィードバック信号を命令処理要素から受け取る段階と、
（ｃ）前記いくつかの命令スレッドに含まれる特定の命令スレッドを指示する最終スレッド選択信号を、前記基準スレッド選択信号および前記フィードバック信号に基づいて生成する段階と、
（ｄ）インタリーブされた命令ストリームに命令をインタリーブするために１つの前記命令スレッドを選択する選択に、前記最終スレッド選択信号を適用する段階と
を含む方法。
【請求項９】
（ａ）前記命令インタリーブ執行規則に少なくとも部分的に基づく追加の基準スレッド選択信号を受け取る段階であって、前記追加の基準スレッド選択信号が、前記いくつかの命令スレッドに含まれる処理のために選択された追加の命令スレッドを指示する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられた追加のフィードバック信号を命令処理要素から受け取る段階と、
（ｃ）前記いくつかの命令スレッドに含まれるそれぞれの命令スレッドを指示する追加の最終スレッド選択信号を、前記基準スレッド選択信号および前記フィードバック信号に基づいて生成する段階と
をさらに含む、請求項８に記載の方法。
【請求項１０】
前記最終スレッド選択信号と前記追加の最終スレッド選択信号を結合してスレッド選択ＭＵＸ制御信号を生成する段階をさらに含む、請求項９に記載の方法。
【請求項１１】
前記追加の基準スレッド選択信号が前記基準スレッド選択信号の２進補数である、請求項９に記載の方法。
【請求項１２】
（ａ）前記最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる第１の命令スレッドに関連付けられた保留入力に適用する段階と、
（ｂ）前記追加の最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる追加の命令スレッドに関連付けられた保留入力に適用する段階と
をさらに含む、請求項９に記載の方法。
【請求項１３】
前記フィードバック信号が前記第１の命令スレッドに関連付けられている、請求項８に記載の方法。
【請求項１４】
前記いくつかの命令スレッドが異なる処理優先度を有するときに前記フィードバック信号を無効にする段階をさらに含む、請求項８に記載の方法。
【請求項１５】
同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する回路であって、
（ａ）前記いくつかの命令スレッドの中の第１の命令スレッドを指示する第１のスレッド選択信号を受け取るように接続された第１の選択入力と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたプロセッサ要素フィードバック信号を受け取るように接続されたフィードバック入力と、
（ｃ）前記基準スレッド選択信号および前記フィードバック信号に基づいて最終スレッド選択信号を生成する変更構成要素と、
（ｄ）インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つ命令スレッドを選択する選択に前記最終スレッド選択信号を適用する出力構成要素と
を含む回路。
【請求項１６】
前記いくつかの命令スレッドの中の第２の命令スレッドを指示する第２の基準スレッド選択信号を受け取るように接続された第２の選択入力をさらに含む、請求項１５に記載の回路。
【請求項１７】
（ａ）前記変更構成要素がさらに、前記第２のスレッド選択信号および第２のフィードバック信号に基づいて追加の最終スレッド選択信号を生成し、
（ｂ）前記出力構成要素がさらに、インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つの命令スレッドを選択する選択に前記追加の最終スレッド選択信号を適用する、
請求項１６に記載の回路。
【請求項１８】
（ａ）前記最終スレッド選択信号の状態に基づいて第１の命令スレッドを選択的に保留する第１のスレッド保留要素と、
（ｂ）前記追加の最終スレッド選択信号の状態に基づいて第２の命令スレッドを選択的に保留する第２のスレッド保留要素と
をさらに含む、請求項１７に記載の回路。
【請求項１９】
前記第１のフィードバック信号と前記第２のフィードバック信号のそれぞれに対するフィードバック・オーバライド回路をさらに含み、前記フィードバック・オーバライド回路が、前記いくつかの命令スレッドが異なる処理優先度を有するときにそれぞれの前記フィードバック信号を無効にする、請求項１７に記載の回路。
【請求項２０】
前記いくつかの命令スレッドが異なる処理優先度を有するときに前記第１のフィードバック信号を無効にする第１のフィードバック・オーバライド回路をさらに含む、請求項１５に記載の回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インタリーブされた複数の命令スレッドを優先規則に従ってサイクル単位で処理するデータ・プロセッサに関する。詳細には本発明は、命令スレッドに関連した事象または条件に基づいて処理する、特定の命令スレッドを選択することに関する。
【背景技術】
【０００２】
データ・プロセッサがソフトウェア・プログラムを実行する速度を向上させる目的にはいくつかの技法が使用される。これらの技法には、プロセッサのクロック速度を高めること、キャッシュ・メモリを使用すること、および分岐予測を使用することが含まれる。プロセッサのクロック速度を高めると、プロセッサは、与えられた時間内に相対的に多くの演算を実行できるようになる。キャッシュ・メモリは、プロセッサのすぐ近くに置かれ、メイン・メモリよりも速く動作する。これによってプロセッサがデータおよび命令にアクセスするのに要する時間が短縮される。分岐予測では、プロセッサが、以前の命令の結果に関する予測に基づいてある種の命令を実行することができ、そのため実結果を待つ必要がなくなり、これによって処理速度が向上する。
【０００３】
いくつかのプロセッサはさらに、パイプライン方式の命令実行を使用してシステム性能を強化している。パイプライン命令実行では、処理タスクが、いくつかのパイプライン・ステップまたはステージに分割される。パイプライン処理では、以前に発行された命令が特定のプロセスを完了させる前に後続の命令が処理を開始できるようにすることによって、処理速度を高めることができる。プロセッサは、ある命令が完全に処理されるのを待つことなく次の命令の処理を開始することができる。
【０００４】
パイプライン処理を使用するプロセッサは、プロセッサ内での異なるアクティビティに充てられる異なるいくつかのパイプラインを含むことができる。例えばプロセッサは、一連の命令を、フェッチ・ステージ、解読／ディスパッチ・ステージ、発行ステージ、実行ステージ、終了ステージおよび完了ステージで処理することができる。これらの個々のステージはそれぞれ、自体のパイプライン・ステージ・セットを使用して、所望の処理タスクを実行することができる。
【０００５】
マルチスレッド命令処理は、パイプライン処理とともに使用して処理速度を高めることができる追加の技法である。マルチスレッド命令処理は、１つのプログラム命令セットを、２つ以上の別個の命令群ないし命令スレッドに分割することを含む。このマルチスレッド技法では、何らかの理由で１つのスレッドが処理できない場合でも、その間に、別の１つのスレッドからの命令をパイプライン処理することができる。これによって、シングル・スレッド命令処理において遭遇する、例えば特定の命令を実行するのに必要なデータがすぐには使用できないキャッシュ・ミス状況などで特定の命令を実行できない間、全ての命令が停止される状況が回避される。複数の命令スレッドを処理する能力を有するデータ・プロセッサはしばしば、同時マルチスレッディング（simultaneous multithreading：ＳＭＴ）プロセッサと呼ばれる。
【０００６】
ソフトウェア分野での用語「マルチスレッディング」の使用方法と、コンピュータ・アーキテクチャ分野での用語「マルチスレッディング」の使用方法とは異なることに留意されたい。ソフトウェア分野では用語「マルチスレッディング」が、複数の関連スレッドに細分されたある１つのタスクについて使用される。コンピュータ・アーキテクチャ分野では、用語「マルチスレッディング」が、互いに独立したスレッドを含むスレッドに対して使用される。本明細書では用語「マルチスレッディング」を、コンピュータ・アーキテクチャ分野で使用されている意味と同じ意味で使用する。
【０００７】
マルチスレッディングを容易にするため、異なるスレッドからの命令は、プロセッサ・パイプライン上のあるポイントで何らかの方法でインタリーブされる。ＳＭＴプロセッサで処理する命令をインタリーブする技法には一般に異なる２つの技法がある。１つの技法は、１つのスレッドの処理において遅延を引き起こすキャッシュ・ミスなどのある長い待ち時間事象（long latency event）に基づいてスレッドをインタリーブすることを含む。この技法では、ある長い待ち時間事象によって１つのスレッドの処理に遅延が生じるまで、全てのプロセッサ・リソースがその１つのスレッドに向けられる。長い待ち時間事象が出現すると、プロセッサはすぐに別のスレッドに切り替わり、そのスレッドに対してある長い待ち時間事象が生じるか、または先のスレッドを停止させた状況が解決されるまで、そのスレッドの処理を進める。
【０００８】
ＳＭＴプロセッサにおいて複数の命令スレッドからの命令をインタリーブするもう１つの一般的な技法は、命令を、あるインタリービング規則に従ってサイクル単位でインタリーブすることを含む。単純なサイクル単位のインタリービング技法は、異なるスレッドからの命令を１命令ずつインタリーブする。例えば２スレッドＳＭＴプロセッサでは、第１のクロック・サイクルで第１のスレッドから１つの命令を取り出し、第２のクロック・サイクルで第２のスレッドから１つの命令を取り出し、第３のクロック・サイクルで第１のスレッドの別の命令を取り出し、．．．というように、２つの命令スレッド間で交互に命令を処理することができる。より複雑なサイクル単位のインタリービング技法は、ソフトウェア命令を使用してそれぞれの命令スレッドに優先度を割り当て、次いで異なるスレッドからの命令をインタリーブして、相対的なスレッド優先度に基づくある規則を執行することを含む。例えば、２スレッドＳＭＴプロセッサにおいて、一方のスレッドに他方のスレッドよりも高い優先度が割り当てられている場合、単純なインタリービング規則は例えば、優先度が高いほうのスレッドからインタリーブされた命令ストリームに含める命令の数を、優先度が低いほうのスレッドから含める命令の数の２倍にすることを要求する。
【０００９】
現在使用されているより複雑なサイクル単位インタリービング規則では、それぞれのスレッドに「１」から「７」までの優先度を割り当て、優先度が低いほうのスレッドからの命令を、関数１／（２｜Ｘ−Ｙ｜＋１）に基づいてインタリーブされた命令ストリームに入れる。ただし、Ｘ＝ソフトウェアによって第１のスレッドに割り当てられた優先度、Ｙ＝ソフトウェアによって第２のスレッドに割り当てられた優先度、である。２つのスレッドの優先度が等しい場合、例えばＸ＝３、Ｙ＝３のときには、この関数から比１／２が得られ、２つのスレッドからそれぞれ２クロック・サイクルに１回、１つの命令が、インタリーブされた命令ストリームに入れられる。スレッド優先度の差が２の場合、例えばＸ＝２、Ｙ＝４のときには、この関数から比１／８が得られ、優先度の低いほうのスレッドから、８クロック・サイクルに１回、１つの命令が、インタリーブされた命令ストリームに入れられる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
特定のスレッドからの命令をインタリーブされた命令ストリームに含める頻度を優先規則を使用して選択するのは、一般に、それぞれのスレッドの優先度に基づいてプロセッサ・リソースが割り当てられることを保証するためである。マルチスレッディング・プロセッサ内の複数の命令スレッドの優先度が等しいときには、一般に、これらの命令スレッドはプロセッサ・リソースを同等に共用しなければならない。しかし、異なる全ての命令スレッドがソフトウェアによって割り当てられた同じ優先度を有するときでも、１つの命令スレッドがプロセッサ・リソースを過度に使用する状況がＳＭＴプロセッサ内に存在する可能性がある。命令スレッドの優先度が等しいときにプロセッサ・リソースがこのように不均等に使用されると、軽視された命令スレッドの処理が思うように進まず、全体的な処理効率が低下する可能性がある。
【課題を解決するための手段】
【００１１】
本発明は、異なる命令スレッドからの命令をインタリーブするためにＳＭＴプロセッサ内の命令スレッドを選択する命令スレッド間の選択を変更する装置および方法を提供する。プロセッサ・クロック・サイクルごとに、インタリーブ規則執行構成要素または回路が、インタリーブされた命令ストリームに命令を渡す特定の１つの命令スレッドを指示する少なくとも１つの基準スレッド選択信号を生成する。本発明によれば、インタリーブ変更構成要素は、基準スレッド選択信号と、さまざまなプロセッサ要素内の１つまたは複数の条件または事象に由来するフィードバック信号とに基づいて最終スレッド選択信号を生成する。この最終スレッド選択信号は、インタリーブされた命令ストリームに命令を渡す命令スレッドとして、基準スレッド選択信号が指示した命令スレッドと同じ命令スレッドを指示し、または別の命令スレッドを指示することができる。
【００１２】
本発明に基づく命令スレッド選択の調整または変更は特に、処理優先度が同じかまたは同様である異なる命令スレッド間でプロセッサ・リソースを適切に割り当てる際に適用することができる。本発明の一形態によれば、命令スレッドが、異なる処理優先度または実質的に異なる処理優先度を有するときには、異なる命令スレッドからの命令は、インタリーブ規則執行構成要素が執行するインタリーブ規則に従ってインタリーブされる。しかし、全ての命令スレッドの優先度が等しいか、またはほとんど等しいときには、インタリーブ変更構成要素が、インタリーブ規則によって決定された命令スレッドとは異なる命令スレッドを、インタリーブされたストリームに命令を追加する命令スレッドとして選択することができる。このスレッド選択の変更は、同様の優先度を有する命令スレッド間のプロセッサ・リソースの割当ての均等化を容易にする。
【００１３】
本発明に基づく最終スレッド選択信号を直接に適用して、インタリーブされた命令ストリームに命令をインタリーブする命令スレッドの選択を制御することができる。本発明の好ましい一形態は、それぞれがそれぞれの基準スレッド選択信号およびプロセッサ内の命令スレッドに対応する２つの最終スレッド選択信号を生成する。この２つの最終スレッド選択信号を出力構成要素で結合して、インタリーブされた命令ストリームに命令を渡す命令スレッドを選択する２つの命令スレッド間の選択に使用することができる選択制御信号を生成する。
【００１４】
プロセッサ内の別個のそれぞれの命令スレッドに対して最終スレッド選択信号を生成する本発明の形態では、ある状況下でそれぞれの最終選択信号が、インタリーブされたストリームに命令を渡す命令スレッドとしてそれぞれの命令スレッドを選択しないことを指示するように、変更構成要素を構成することができる。本発明のこれらの形態では、それぞれの最終スレッド選択信号を保留信号として使用し、プロセッサ内のそれぞれの保留要素に適用して、それぞれの命令スレッドからの有効な命令が、処理するインタリーブされたストリームに渡されることを防ぐ。
【００１５】
１つまたは複数の基準スレッド選択信号が変更構成要素の影響を受けないようにして、それぞれの最終スレッド選択信号が、それぞれの基準スレッド選択信号が指示するスレッドと同じスレッドを指示するようにすることが望ましい状況が存在する可能性がある。これらの状況に対処するため、本発明の好ましい形態はフィードバック・オーバライド構成要素または回路を含む。フィードバック・オーバライド構成要素はそれぞれ、それぞれの基準スレッド選択信号からそれぞれの最終スレッド選択信号への変更を指示するそれぞれのフィードバック信号を選択的に無効にする（オーバライドする）。例えば、本発明に基づくフィードバック・オーバライド構成要素は、インタリーブする命令スレッドのスレッド優先度が等しくない場合に、それぞれのフィードバック信号を選択的に無効にすることができる。
【００１６】
本発明のこれらの利点および特徴、ならびにその他の利点および特徴は、好ましい実施形態の以下の説明を添付の図面とともに検討することによって明白となろう。
【発明を実施するための最良の形態】
【００１７】
図１に、本発明の原理を具体化したプロセッサ１００を示す。プロセッサ１００はマルチスレッディングに対応し、第１の命令待ち行列１０１（Ｑｕｅｕｅ＿０）、第２の命令待ち行列１０２（Ｑｕｅｕｅ＿１）、選択マルチプレクサ（ＭＵＸ）１０５、および選択コントローラ１０６を含む。命令待ち行列１０１および１０２はそれぞれ、それぞれの命令スレッド中の命令の取扱いに携わる。具体的には、第１の命令待ち行列１０１は第１の命令スレッドＴ０からの命令を待ち行列に入れ、第２の命令待ち行列１０２は第２の命令スレッドＴ１からの命令を待ち行列に入れる。シーケンシャル・フェッチャ（sequential fetcher）１２０は、この２つの異なる命令スレッドを構成する命令群を、命令キャッシュ／メモリ管理ユニット（memorymanagement unit：ＭＭＵ）１１８から命令待ち行列１０１および１０２に転送する。命令待ち行列１０１および１０２は最終的に、それぞれの命令を選択ＭＵＸ１０５の２つの入力に供給する。選択コントローラ１０６は、この２つの異なる命令スレッドからの命令を、インタリーブされた処理のための単一の命令ストリームにインタリーブする選択ＭＵＸ１０５を制御する。
【００１８】
図２および３を参照して後に詳細に説明するとおり、それぞれの命令スレッドには優先度が割り当てられ、選択コントローラ１０６に含まれるインタリーブ規則執行構成要素は、これらの優先度を使用して、それぞれの待ち行列（１０１または１０２）からの命令を、インタリーブされた処理ストリームに入れる頻度に関する規則を執行する。選択コントローラ１０６の出力は、スレッド選択制御経路１５４に適用される制御信号を含む。スレッド選択制御経路１５４上のこの制御信号は、ＭＵＸ１０５に適用し、後段の処理のために特定の１クロック・サイクルの間に通過させるＭＵＸの入力を指定する。ＭＵＸ１０５のそれぞれの入力は、異なるスレッドからの命令を含む命令待ち行列に結合されているので、ＭＵＸ１０５の特定の入力を選択することは、処理をおこなう特定の命令スレッドを選択する効果を有する。
【００１９】
図１に示した例示的な実施形態では、プロセッサ１００が、単一の集積回路スーパースカラ・マイクロプロセッサを含む。したがってプロセッサ１００は、さまざまな実行ユニット、レジスタ、バッファ、メモリ・デバイスおよび他の機能単位を含む。これらは全て集積回路設計によって形成される。本明細書では、マイクロプロセッサに適用するとして本発明を説明しているが、当然ながら、この選択コントローラ配置はマイクロプロセッサだけに限定されず、他のタイプのプロセッサに実装することもできる。さらに、図１に示した全体プロセッサ配置は、第１の命令待ち行列１０１、第２の命令待ち行列１０２および選択ＭＵＸ１０５に対する選択コントローラ１０６の動作を説明する際の例として示したに過ぎない。本明細書において説明し請求する選択コントローラは、複数の命令スレッドの同時処理をサポートする能力を有する実質的に任意のプロセッサ配置で利用することができることを当業者は理解されたい。
【００２０】
図１に示すプロセッサ１００は、バス・インタフェース・ユニット（ＢＩＵ）１１４およびプロセッサ・バス１１５を介してシステム・バス１１３に結合されている。システム・バス１１３およびプロセッサ・バス１１５はともに、個別に示されてはいないが、アドレス・バス、データ・バスおよび制御バスを含む。ＢＩＵ１１４はバス裁定に関与して、プロセッサ１００と、メイン・メモリ１１６、不揮発性大容量記憶装置１１７などのシステム・バス１１３に結合された他の装置との間の情報の転送を制御する。図１に示したデータ処理システムは、システム・バス１１３に結合した他の装置を含むことが好ましいが、本発明の理解にこれらの装置は不要であり、そのため無用な詳細によって本発明が不明瞭にならないようこれらは図面から除外した。
【００２１】
ＢＩＵ１１４は、命令キャッシュ／ＭＭＵ（メモリ管理ユニット）１１８およびデータ・キャッシュ／ＭＭＵ１１９に接続されている。命令キャッシュ／ＭＭＵ１１８およびデータ・キャッシュ／ＭＭＵ１１９中のキャッシュなどの高速キャッシュは、メイン・メモリ１１６から以前にキャッシュに転送されたデータまたは命令のサブセットにプロセッサ１００が相対的に高速にアクセスすることを可能にし、したがって全体的な処理速度を向上させる。それぞれデータ・キャッシュ１１９および命令キャッシュ１１８に記憶されたデータおよび命令は、メイン・メモリ１１６中のデータまたは命令の実アドレスに関係付けられた実効アドレスによって識別され、アクセスされる。
【００２２】
命令キャッシュ／ＭＭＵ１１８はさらに、シーケンシャル・フェッチャ１２０に結合されている。シーケンシャル・フェッチャ１２０は、実行する命令を、各プロセッサ・サイクルの間に命令キャッシ／ＭＭＵ１１８からフェッチする。シーケンシャル・フェッチャ１２０は、命令キャッシュ／ＭＭＵ１１８からフェッチした分岐命令を、これを実行する分岐処理ユニット（ＢＰＵ）１２１に伝送し、また、第１の命令待ち行列１０１および第２の命令待ち行列１０２中の一連の命令を一時的に記憶する。記憶された命令はいずれ、解読をする命令解読ユニット１２３、および実行ユニット１３０、１４０または１５０へのディスパッチする順序付けユニット１２４に転送される。
【００２３】
シーケンシャル・フェッチャ１２０は、第１の命令待ち行列１０１と第２の命令待ち行列１０２の両方に命令を供給する。命令待ち行列１０１および１０２はともに、後段の処理のために選択ＭＵＸ１０５を通して解読ユニット１２３に命令が発行されるたびに、その中の命令を、１つの待ち行列位置から次の待ち行列位置へシフトさせるように構成されている。第１の命令待ち行列１０１の最後の記憶要素は第１のラッチ１０３（ＬＣＨ＿０）を含み、第２の命令待ち行列１０２の最後の記憶要素は第２のラッチ１０４（ＬＣＨ＿１）を含む。ラッチ１０３および１０４は、ラッチされた命令を、選択ＭＵＸ１０５のそれぞれの入力で使用可能なように維持し、そのため、ＭＵＸの１つの入力が選択されると、選択された入力に存在する命令が命令解読ユニット１２３に転送される。なお、ラッチ１０３および１０４を含む図示のさまざまな要素は、一度に１つの命令だけを取り扱うように構成し、または複数の命令を取り扱うように構成することができることに留意されたい。本発明の好ましい一形態では、プロセッサ１００の図示のさまざまな要素が、複数の命令を同時に取り扱うことができる。例えば、命令待ち行列１０１および１０２中のそれぞれの待ち行列位置、ならびにラッチ１０３および１０４は、５つの命令を収容するのに十分な記憶要素を含むことができる。したがってこの例では、それぞれの命令スレッド（Ｔ０およびＴ１）、ならびに選択ＭＵＸ１０５の出力のインタリーブされた命令ストリームが実際に５つの命令に相当する幅を有する。本発明は、スレッドＴ０およびＴ１を通過する任意の命令幅を包含する。
【００２４】
プロセッサ１００の実行回路は、一連の命令を実行する３つの別個の実行ユニット１３０、１４０および１５０を含む。個々の実行ユニット１３０、１４０および１５０はそれぞれ、特定の実行ユニットに固有の一連のパイプライン・ステージで命令を実行することが好ましい。この例示プロセッサの第１の実行ユニット１３０（ＥＸＵ＿１）および第２の実行ユニット１４０（ＥＸＵ＿２）はともに、固定小数点数値演算および論理演算、ならびにメモリからデータをロードするロード操作を実行するように適合させることができる。プロセッサ１００の第３の実行ユニット１５０（ＥＸＵ＿３）は、複雑な固定小数点演算を実行するように適合させることができる。第３の実行ユニット１５０はさらに、メモリにデータを記憶する記憶操作を実行することができる。オペランドおよび演算結果を一時的に記憶するためにさまざまな汎用および浮動小数点レジスタが実行ユニット１３０、１４０および１５０に関連付けられていることを当業者は理解されたい。本発明の選択コントローラ配置を理解するのにこれらのレジスタの動作の理解は不要なので、図１にこれらのレジスタは示されていない。実行ユニット１３０、１４０および１５０には、命令のアウト・オブ・オーダ（out of order）実行をサポートするのに使用するさまざまな待ち行列、レジスタ、テーブルなど、他の数多くの要素を関連付けることができる。無用な詳細によって本発明が不明瞭にならないよう、これらの追加のプロセッサ要素も図１から除かれている。
【００２５】
プロセッサ１００は一連のそれぞれの命令を、別個のパイプライン・ステージ、すなわちフェッチ、解読／ディスパッチ、発行／順序付け、実行、終了および完了ステージで処理する。それぞれ２つの命令待ち行列１０１および１０２に記憶された２つのスレッドＴ０およびＴ１からの命令は、解読／ディスパッチ・ステージの直前に、選択コントローラ１０６が執行する優先規則に従って単一の命令ストリームにインタリーブされる。２つのスレッドからの命令は、解読ユニット１２３によって実行される解読／ディスパッチ・ステージの前にサイクル単位でインタリーブされるので、解読／ディスパッチ以降の各ステージは、所与のクロック・サイクルに、いずれかのスレッドから命令を受け取ることができる。例えば、所与のクロック・サイクルに、プロセッサ１００は、第１のスレッドからの命令を完了ユニット１９０で完了させ、第１または第２のスレッドからの命令を実行ユニット１３０、１４０および１５０で実行し、第２のスレッドからの命令を解読している。異なるスレッドからの命令を同時に処理することによって、一方の命令スレッドの中のある命令に関連した長い待ち時間事象によってその特定のスレッドが機能停止した場合でも、プロセッサ１００は命令を処理し続けることができる。例えば、（第１の命令待ち行列１０１に入れられた）スレッドＴ０からの命令が、この命令がすぐに処理されるのを妨げるある長い待ち時間事象を経験しているとする。（第２の命令待ち行列１０２に入れられた）第２の命令スレッドＴ１からの命令はスレッドＴ０からの命令とインタリーブされているので、第２の命令スレッドからの命令は処理され続け、第２の命令待ち行列Ｔ１を通過することができる。
【００２６】
フェッチ・ステージの間に、シーケンシャル・フェッチャ１２０は、１つまたは複数のメモリ・アドレスに関連付けられた１つまたは複数の命令を命令キャッシュ／ＭＭＵ１１８から取り出す。シーケンシャル・フェッチャ１２０は、命令キャッシュ／ＭＭＵ１１８からフェッチした一連の命令を、第１の命令待ち行列１０１に記憶して第１の命令スレッドＴ０の一部とするか、または第２の命令待ち行列１０２に記憶して第２の命令スレッドＴｌの一部とする。両方のスレッドの分岐命令はシーケンシャル・フェッチャ１２０によって抜き取られ（removed or folded out）、実行のためＢＰＵ１２１に送られる。ＢＰＵ１２１は、分岐予測機構（別個には示されていない）を含む。一実施形態では分岐予測機構が、分岐履歴テーブルなどの動的予測機構（図示せず）を含む。この分岐履歴テーブルによってＢＰＵ１２１は、分岐するかか否かを予測することによって未解決の条件付き分岐命令を推測で実行することができる。
【００２７】
第１および第２の命令待ち行列１０１および１０２を通過した命令は単一の命令ストリームにインタリーブされ、後段の処理のために命令解読ユニット１２３に送達される。命令解読ユニット１２３はこれらの命令を解読し、順序付けおよび実行ユニット１３０、１４０および１５０へのディスパッチをおこなう順序付けユニット１２４に渡す。実行ユニット１３０、１４０および１５０は、順序付けユニット１２４から発行された命令を実行する。発行された命令が完全に実行されると、実行ユニット１３０、１４０および１５０は、結果があればそれを関連汎用レジスタまたは他のレジスタ（図示せず）に記憶し、さらに、命令の実行が終了したことを完了ユニット１９０に通知する。
【００２８】
図１に示した特定のプロセッサ構造は単に例示目的で示したに過ぎないこと、および本発明に基づく変更したスレッド選択はこの特定の構造とともに使用することだけに限定されないことを理解されたい。例えば、プロセッサ１００には、シーケンシャル・フェッチャ１２０が命令ストリームから抜き取った分岐命令が示されているが、別のプロセッサ構造はこの分岐命令ユニットを、他の実行ユニット１３０、１４０および１５０と一緒の別の実行ユニットとして取り扱うことができる。いずれにせよ、本発明に基づく変更したスレッド選択は、実質的に任意の同時マルチスレッディング・プロセッサに組み込むことができる。
【００２９】
さらに、図示のプロセッサ１００は、２つの命令スレッドＴ０とＴ１をインタリーブして、フェッチ・ステージ後の各種プロセッサ・パイプライン・ステージで処理するインタリーブされた単一のストリームとするように適合されているが、他の実施形態では、２つ以上の命令スレッドをインタリーブして、インタリーブされた単一の命令ストリームとするように適合させることもできることに留意されたい。同時に処理している命令スレッドの数に関わらず、所与のクロック・サイクルにインタリーブされた命令ストリームに渡すことができる命令は一般に、単一のスレッドからの命令（またはパイプラインが複数の命令に相当する幅を有する場合には命令セット）だけであることに留意されたい。したがって、ＭＵＸ１０５などの選択装置を介して２つ以上のスレッドをインタリーブする場合には、装置は、ＭＵＸを通して転送する特定の１つのスレッドを選択するのに適したＭＵＸ制御信号を生成する論理を含んでいなければならない。図１に示した本発明の２スレッド形態では、信号経路１５４を通してＭＵＸ制御信号を適用することができる。しかし、２つ以上の入力を有する選択ＭＵＸに対する制御信号には、必要なＭＵＸ制御信号を収容する追加の信号経路が必要となる。
【００３０】
本発明の好ましい実施形態は、一方または両方の命令スレッドＴ０、Ｔ１からの命令を保留し、それによって保留されたそれぞれのスレッドからの有効な命令が渡されて処理されないようにする能力を有する。この保留能力は、２つのラッチ１０３および１０４に適用された保留信号によって実装することができる。図１には、選択コントローラ１０６から２つのラッチ１０３および１０４への破線１５２および１５３が示されている。選択コントローラ１０６は、それぞれのスレッドに対して必要な保留信号を生成し、それらを信号経路１５２または１５３に適用する。ラッチ１０３または１０４に適用されると、保留信号は、そのラッチに記憶された１つまたは複数の命令に実行無効の印を付ける。本発明に基づく保留信号については後に図３を参照して詳細に論じる。
【００３１】
図２に、２つの命令スレッドからの命令のインタリービングを制御するように適合された好ましい選択コントローラ１０６を示す。選択コントローラは、インタリーブ規則執行構成要素２０３、変更構成要素２０５および出力構成要素２２５を含む。インタリーブ規則執行構成要素２０３は、別々の２つの基準スレッド選択信号を変更構成要素２０５に供給する。基準スレッド選択信号はそれぞれ、プロセッサ１００内でインタリーブされる命令スレッドの１つに関連付けられている。変更構成要素２０５は、それぞれの基準スレッド選択信号について、基準スレッド選択信号の状態およびプロセッサ１００の他の要素の事象または条件に由来するフィードバック信号に基づいて、別々の最終スレッド選択信号を生成する。この２つの最終スレッド選択信号は出力構成要素２２５によって結合されて、処理するインタリーブされた命令ストリームにインタリーブするためにプロセッサ１００内の２つの命令スレッドの一方を選択する際に使用する単一のスレッド選択制御信号が生成される。出力構成要素２２５の好ましい一形態を図３を参照して後に詳細に説明する。それぞれの命令スレッドの保留信号としてこの最終スレッド選択信号を使用することについても図３を参照して論じる。
【００３２】
図２を詳細に参照する。インタリーブ規則執行構成要素２０３は優先度信号ＴＰ０およびＴＰ１を受け取り、別々の２つの出力信号をノード２１５および２１７に適用する。優先度信号ＴＰ０は命令スレッドＴ０に割り当てられた優先度を指示し、優先度信号ＴＰ１は命令スレッドＴ１に割り当てられた優先度を指示する。インタリーブ規則執行構成要素２０３によって生成され、ノード２１５および２１７に適用される２つの出力は、特定のスレッドにそれぞれ関連付けられた基準スレッド選択信号を含む。ノード２１５の基準スレッド選択信号はスレッドＴ０に関連付けられており、入力優先度ＴＰ０およびＴＰ１に基づく２つのスレッド間のインタリービング規則の執行に使用することができる２進信号を含む。ノード２１７の基準スレッド選択信号はスレッドＴ１に関連付けられており、ノード２１５の信号の補数である２進信号を含み、したがってやはり、２つのスレッド間のインタリービング規則の執行に使用することができる。例えば、所与のクロック・サイクルにインタリーブ規則執行構成要素から出力されたノード２１５のレベル０の信号は、そのクロック・サイクルにスレッドＴ０を選択して、インタリーブされた命令ストリームへ命令を渡すことを指示する。ノード２１５のレベル１の論理信号は、そのクロック・サイクルにスレッドＴ１を選択して、インタリーブされた命令ストリームへ命令を渡すことを指示する。この例では、ノード２１７のレベル０の信号が、そのクロック・サイクルにスレッドＴ１を選択して、インタリーブされた命令ストリームへ命令を渡すことを指示し、ノード２１７のレベル１の論理信号が、そのクロック・サイクルにスレッドＴ０を選択することを指示する。
【００３３】
インタリーブ規則執行構成要素２０３は、所望のインタリーブ規則を執行する特定の命令スレッドを指示する所望の出力信号を生成する適当な任意の構成要素または回路を含むことができる。無用な詳細によって本発明が不明瞭にならないよう、インタリーブ規則執行構成要素２０３のこれ以上の詳細は省く。
【００３４】
ノード２１５および２１７の基準スレッド選択信号と同様に、図２の変更構成要素２０５によって生成されるノード２５３および２５５の最終スレッド選択信号もそれぞれ、インタリーブされた命令ストリーム処理に命令を渡すために選択する命令スレッドを指示する。しかし、最終スレッド選択信号が指示する命令スレッドと基準スレッド選択信号が指示する命令スレッドとは異なる場合がある。具体的には、変更構成要素２０５は、プロセッサに含まれるさまざまな要素内でのある事象または条件を考慮して、所与のクロック・サイクルにおける所与の最終スレッド選択信号の状態を、基準スレッド選択信号の状態とは逆の状態にすることができる。したがって本発明は、サイクル単位でインタリーブされるＳＭＴプロセッサのインタリーブ規則執行構成要素の下流でスレッド選択を変更して、単に命令スレッド間の優先規則を執行することによって可能な競合命令スレッド間のプロセッサ・リソースの割当てよりも望ましい割当てを達成する能力を有する。
【００３５】
図２の変更構成要素２０５は、２組のフィードバック入力経路２１９および２２１を通して、プロセッサ事象または条件フィードバックを受け取る。本発明の図示の形態では、フィードバック入力経路２１９がスレッドＴ０に関連付けられており、フィードバック経路２２１がスレッドＴｌに関連付けられている。これらの２つのフィードバック経路セット上の信号は、それぞれのＯＲゲート２３１および２３３によって結合されて、変更構成要素２０５が使用するフィードバック信号が生成される。これらのフィードバック信号は、ノード２１５および２１７の基準スレッド選択信号とともに、ノード２５３および２５５の２つの最終スレッド選択信号を生成するのに使用される。本発明の好ましい一形態では、後に詳細に論じるフィードバック・オーバライド信号の制御下で、これらのフィードバック信号がそれぞれＡＮＤゲート２１１および２１３によってゲートされる。
【００３６】
例示のため図２に示した変更構成要素２０５は、２つの命令スレッドＴ０およびＴ１ならびにノード２１５および２１７に適用された２つの基準スレッド選択信号に対応する２本のブランチを含む。この別個のブランチの配置は、後に論じるように、最終スレッド選択信号を保留信号として使用することを容易にする。図２に示した変更構成要素２０５の上側のブランチは、ノード２１５の信号を受け取り、さらにＯＲゲート２３１および２３３によって生成され、最終的にノード２３２および２３４に適用された両方のフィードバック信号を受け取る。ノード２１５の信号は、Ｔ０基準スレッド選択信号と呼ぶことができ、ＡＮＤゲート２２９および２３０の入力２２７および２２８に適用される。ノード２３２のフィードバック信号は、ＡＮＤゲート２２９の入力２３５およびＡＮＤゲート２３７の入力２３６に適用される。ノード２３４のフィードバック信号はインバータ２４１および２４３によって反転され、ＡＮＤゲート２３０の入力ノード２４５およびＡＮＤゲート２３７の入力ノード２４９に適用される。ＡＮＤゲート２２９、２３０および２３７の出力はＯＲゲート２５１の入力に適用されており、そのため、これらのＡＮＤゲートの１つが、アサートされた（論理レベル１の）出力信号を生成する場合には、ＯＲゲート２５１の出力ノード２５３もアサートされる。
【００３７】
変更構成要素２０５の上ブランチのこの論理装置配置は、ノード２１５、２３２、２３４および２５３の信号レベルを表す以下の真理値表を与える。
ノード２１５      ノード２３２      ノード２３４      ノード２５３
（１）    ０                ０                ０                ０
（２）    ０                ０                １                ０
（３）    ０                １                ０                １
（４）    ０                １                １                ０
（５）    １                ０                ０                １
（６）    １                ０                １                ０
（７）    １                １                ０                １
（８）    １                １                １                １
表１
【００３８】
上の真理値表から、本発明のこの形態では、ノード２１５のＴ０基準選択信号とノード２５３の最終スレッド選択信号が異なるのは２例だけであることが分かる。表の第６行に示す最初の事例では、Ｔ０基準スレッド選択信号が１であり、この特定の論理においてこれは、当初、構成要素２０３によって執行されたインタリーブ規則に単純に基づいて、スレッドＴ０は処理するスレッドとして選択されていないことを指示している。しかし、変更構成要素２０５は、ノード２１５のこの状態の信号を変更し、そのクロック・サイクルにインタリーブされたストリームに命令を導入するスレッドとしてＴ０スレッドを選択することを指示するレベル０の最終スレッド選択信号をノード２５３に生成する。このことが起こるのは、ノード２３２の信号の論理レベルが０、ノード２３４の信号の論理レベルが１のときだけである。ノード２３４の信号は、任意のＴ１フィードバック入力経路がアサートされているとき、したがってその経路がスレッドＴ１に関連したある事象または条件を指示しているときに論理レベル１をとることができる。２１９のフィードバック入力はいずれもアサートされておらず、したがってスレッドＴ０が正常に処理されていることを指示しているので、変更構成要素２０５は、２１５のＴ０基準スレッド選択信号を変更して、Ｔ１命令スレッドの代わりにＴ０命令スレッドを選択することを指示するレベル０の最終スレッド選択信号をノード２５３に生成する。
【００３９】
２番目の事例を表の（３）行に示す。ノード２１５の論理値０の基準スレッド選択信号が指示しているように、この例では当初、スレッドＴ０は処理するスレッドとして選択されている。しかし、ノード２３２のフィードバック信号は論理レベル１にアサートされており、したがってスレッドＴ０に関連したあるプロセッサ条件を指示しており、かつノード２３４のフィードバック信号の論理レベルは０であり、スレッドＴ１に関連した遅延プロセッサ条件がないことを指示しているので、変更構成要素２０５は、インタリーブされたストリームへ命令を渡すスレッドとしてＴ０スレッドを選択しないことを指示する、Ｔ０基準スレッド選択信号とは逆のＴ０スレッド最終スレッド選択信号をノード２５３に生成する。
【００４０】
論理要素２２９ａ、２３０ａ、２３７ａ、２５１ａ、２４１ａおよび２４３ａを含む図２に示した変更構成要素２０５の下側のブランチは上ブランチの鏡像となっていることに留意されたい。したがって、変更構成要素２０５の下ブランチの論理に関連した真理値表は、上ブランチ論理に関して先に示した真理値表の鏡像であり、ノード２５３の最終スレッド選択信号とノード２５５の最終スレッド選択信号は全てのケースで互いの補数となる。
【００４１】
本発明は、ノード２５３の最終スレッド選択信号とノード２５５の最終スレッド選択信号が常に互いの補数であるケースに限定されないことに留意されたい。変更構成要素２０５の代替論理配置では、ノード２５３の最終スレッド選択信号とノード２５５の最終スレッド選択信号がともに、インタリーブされた命令ストリームに命令を送るスレッドとしてそれぞれのスレッドを選択しないことを指示することができる。この状況については図３を参照して後に詳細に論じる。さらに、本発明は、セット２１９および２２１の特定のフィードバック入力に限定されないことに留意されたい。これらのフィードバック信号を、キャッシュ・ミスなどのある長い待ち時間事象、またはスレッド選択信号を変更することが好ましい他のプロセッサ事象に応答してアサートすることができる。
【００４２】
本発明の好ましい一形態では、ＯＲゲート２３１および２３３からのフィードバック信号出力がそれぞれＡＮＤゲート２１１および２１３によってゲートされる。ＡＮＤゲート２１１および２１３はそれぞれ、フィードバック信号の禁止ないしオーバライドを容易にする信号経路２６１および２６２上のフィードバック・オーバライド制御信号によって制御される。具体的には、経路２６１および２６２上の信号がアサートされている場合、すなわちその論理レベルが１である場合に、セット２１９および２２１の中の任意の入力のアサートされた信号が最終的にノード２３２および２３４に渡される。しかし、信号経路２６１および２６２の低レベル論理信号は、高レベル信号がノード２３２および２３４に渡されることを事実上阻止する。変更構成要素の上ブランチに対する先の真理値表によれば、ノード２３２および２３４の高レベル論理信号が阻止されると、ノード２５３の最終スレッド選択信号の状態が、ノード２１５の基準スレッド選択信号の状態とは異なる状態をとることはない。すなわち、ゲート２１１および２１３によってフィードバックを無効にする（にオーバライドする）ことによって、変更構成要素２０５は基準スレッド選択信号を事実上変更なしに通過させる。
【００４３】
図２に示した本発明の形態は、ＯＲゲート２３１および２３３の出力に生成されるフィードバック信号をゲートするが、本発明の代替形態は、フィードバック入力経路セット２１９および２２１に含まれる個々のフィードバック入力経路をゲートする。本発明のこれらの代替形態では、セット２１９および２２１に含まれる個々のフィードバック入力がそれぞれ、ゲート２１１および２１３と同様の別個のゲートを含む。これらの個々のフィードバック入力経路ゲートはそれぞれ、他のフィードバック入力経路を使用可にしたままそれぞれのフィードバック入力経路を希望どおりに使用禁止にするそれぞれの制御信号によって制御される。ゲートまたは同様の装置を使用して１つまたは複数のフィードバック経路２１９および２２１を禁止にする本発明の任意の形態の制御信号は、ソフトウェアによって制御可能なレジスタによって供給することができる。
【００４４】
本発明の一形態では、フィードバック・オーバライド制御構成要素２６４を使用して、オーバライド信号経路２６１および２６２上に信号を生成する。フィードバック信号を無効にするためにオーバライド信号を適用する具体的な１つの状況は、入力スレッド優先度が等しくない状況である。したがって、フィードバック・オーバライド制御２６４は、図２の破線２６５および２６６によって指示されているようにＴＰ０およびＴＰ１の値を受け取ることができ、ＴＰ０とＴＰ１が等しいかまたはほぼ等しい場合にだけ高レベル論理信号をゲート２１１および２１３に供給する論理を含むことができる。ＴＰ０とＴＰ１が等しくない場合には、フィードバック・オーバライド制御２６２の論理は、経路２６１および２６２上の低レベル阻止信号をそれぞれゲート２１１および２１３に生成して、ＯＲゲート２３１および２３３の出力のフィードバック信号を事実上使用禁止にする。ＴＰ０の値とＴＰ１の値が等しくない場合にフィードバック信号を使用禁止にするこのプロセスは、スレッド優先度の大きな違いによって決定されたスレッド選択頻度が変更構成要素２０５の影響を受けることを防ぐ。
【００４５】
図１および２に示した選択コントローラ１０６の最終副構成要素である出力構成要素２２５は、ノード２５３および２５５からの最終スレッド選択信号を結合し、選択制御信号を生成する。この選択制御信号は信号経路１５４に適用される。図１に示したとおり、経路１５４上のこの信号は、２つのスレッドからの命令をインタリーブするための２つの命令スレッド間の選択を実施するＭＵＸ１０５を制御する。
【００４６】
図３に、選択コントローラ１０６で使用される出力構成要素２２５の好ましい一形態を示す。この特定の出力構成要素２２５は、スレッドＴ０に関連したノード２５３の最終スレッド選択信号およびスレッドＴ１に関連したノード２５５の最終スレッド選択信号がともに、それぞれの関連スレッドを処理するスレッドとして選択しないことを指示している、すなわち両方の信号が論理１である状況に対処する。図示の選択結合構成要素２２５は、ＡＮＤゲート４０３、ＡＮＤゲート４０７およびＯＲゲート４１１を含んでいる。ＡＮＤゲート４０３は、ノード２５３からＴ０最終スレッド選択信号を受け取り、さらに反転されたＴ１最終スレッド信号を受け取るように接続されている。反転されたＴ１最終スレッド信号は、インバータ４１７によって反転された後のノード２５５の信号を含む。ＡＮＤゲート４０７は、ノード２５３からＴ０最終スレッド選択信号を受け取り、ノード２５５からＴ１最終スレッド選択信号を受け取るように接続されている。ＡＮＤゲート４０７の第３の入力は、１クロック・サイクルごとに両方の論理状態間を交互にトグルするトグル信号を含む。インタリーブ規則執行構成要素はトグル信号発生器を含むので、この信号は、図３に示すようにインタリーブ規則執行構成要素２０３から得ることができる。しかし、このトグル信号は適当な任意の方法で生成することができることを理解されたい。ＡＮＤゲート４０３および４０７の出力はともにＯＲゲート４１１に入力される。ＯＲゲート４１１は論理ＯＲ演算を実行して、ＭＵＸ１０５（図１にも示されている）に適用される選択制御信号を信号経路１５４上に生成する。
【００４７】
本発明の図示の形態に適用される論理では、レベル０の最終スレッド選択信号は、その信号に関連付けられたスレッドを、その特定のクロック・サイクルにインタリーブされたストリームに命令を含めるスレッドとして選択することを指示する。ノード２５３の信号とノード２５５の信号を互いの補数信号とし、または両方の信号がともに論理レベル１をとることができることに留意されたい。ただし、ノード２５３の信号とノード２５５の信号の論理レベルがともに０となることはない。図示の出力構成要素２２５の論理構成では、ノード２５３とノード２５５がともに論理１であるときを除いて、経路１５４上の信号はノード２５３の信号と同じになる。この場合、ゲート４０７のトグル信号は、ノード２５３および２５５の信号がともに論理レベル１である限り、経路１５４上の信号出力が論理０と論理１の間を交互に切り替わるように強制する。
【００４８】
両方の最終スレッド選択信号がそのクロック・サイクルにそれぞれの関連スレッドを選択しないことを指示することができる本発明の実施態様では特に、最終スレッド選択信号（図３のノード２５３および２５５）を、図１の待ち行列１０１および１０２の命令に保留信号として適用することが有利であることがある。このような保留能力は、前の段落で論じたように出力構成要素２２５からの選択信号の制御下でＭＵＸ１０５が２つの命令スレッド間を交互にトグルしたときに、待ち行列１０１および１０２からの有効な命令がＭＵＸ１０５を介してインタリーブされた命令ストリームに入ることを妨げる。したがって、図３に示した本発明の形態は、ノード２５３のＴ０最終スレッド選択信号を保留信号経路１５３を通してラッチ１０３の保留入力に適用する。同様に、ノード２５５のＴ１最終スレッド選択信号は、保留信号経路１５２を通してラッチ１０４の保留入力に適用される。図１のラッチ１０３および１０４はそれぞれ、待ち行列１０１および１０２の最終位置を含むことに留意されたい。ラッチ１０３および１０４はそれぞれ、アサートされた（論理レベル１の）保留信号に応答して、それぞれの１つまたは複数の記憶位置を無効状態にセットする。したがって、１つまたは複数の命令に対するデータはそれぞれのラッチに保持され、ＭＵＸ１０５に駆動され、ＭＵＸがその特定のラッチの出力を選択したときにインタリーブされた命令ストリームに駆動されるが、無効と指示された命令は完全には処理されない。したがって、無効命令がさまざまなプロセッサ要素から「見える」場合であっても、ラッチ１０３および１０４は保留要素の働きをする。このようにインタリーブされたストリームに無効命令をインタリーブすることができることはいくつかの状況で有益であろう。
【００４９】
以下の例は、スレッド選択ＭＵＸ１０５の制御にも関与しながら保留信号としても機能するノード２５３および２５５の最終スレッド選択信号の働きを説明するのに役立つ。フィードバックが処理上の問題を指示しているため、Ｔ０命令スレッドとＴ１命令スレッドの両方を保留すると仮定する。本発明の図示の実施態様では両方の信号の論理レベルが１である。これらの高レベル論理信号はさらにラッチ１０３および１０４に適用され、これによって、ラッチされた命令が無効であることを指示するようにラッチがセットされる。ノード２５３および２５５のＴ０およびＴ１最終スレッド選択信号が、どちらのスレッドからの命令も処理にまわされないことを指示する高論理レベルにある場合でも、ＡＮＤゲート４０７のトグル入力が、選択ＭＵＸ１０５の２つの入力間を交互に切り替わるよう経路１５４の出力を強制する。したがって、両方のスレッドが保留されている間も、それぞれのラッチ１０３および１０４に保持された命令がインタリーブされたストリームに渡される。しかし、これらの命令は無効と指示されているので、プロセッサを通過しても処理されない。
【００５０】
本発明は、さまざまなスレッドに対する最終スレッド選択信号が相互排除であり、そのため、インタリーブされたストリームに命令をインタリーブするスレッドとして、１クロック・サイクルごとに１つのスレッドから命令が選択される実施形態を包含することに留意されたい。これらの実施形態では、最終スレッド選択信号を、命令待ち行列に関連付けられたラッチの保留信号として適用する必要はない。これらの実施形態では最終スレッド選択信号が、図１のＭＵＸ１０５などの選択ＭＵＸの選択制御信号を生成するためだけに使用される。命令スレッド間の排他性はさらに、本出願の図２および３、ならびに参照によって本明細書に組み込まれる関連出願に示した二重命令ブランチ配置を不要にすることを容易にする。
【００５１】
以上に記載した好ましい実施形態は、本発明の原理を説明することを意図したものであり、本発明の範囲を限定しようとするものではない。当業者であれば、上記請求項の範囲から逸脱することなく、他のさまざまな実施形態およびこれらの好ましい実施形態に対するさまざまな変更が可能である。例えば、図示の論理および他の回路は、開示の発明を実現する方法の具体的な例を提供するが、開示の回路は正または負論理で実現することもできる。さらに、異なる組合せの論理ゲートを使用して同じ結果を得ることができ、このような変更は開示の構造と等価であるとみなされるべきである。命令スレッドをインタリーブする開示のさまざまな方法に対する変更は、本発明をさまざまなプロセッサ・タイプおよびアーキテクチャに適合させるために本発明の範囲から逸脱することなくなされたものとみなされるべきである。具体的には、２スレッドＳＭＴ処理配置を説明し図示したが、本発明は、２つの命令スレッドしか処理できないＳＭＴプロセッサに限定されるわけではない。むしろ、本発明による変更したスレッド選択は、サイクル単位のインタリーブ規則執行を使用する任意のＳＭＴプロセッサとともに使用することができる。
【００５２】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５３】
（１）同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する方法であって、
（ａ）前記いくつかの命令スレッドの中の処理する第１の命令スレッドを指示する基準スレッド選択信号を、命令インタリーブ執行規則に少なくとも部分的に基づいて生成する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる特定の命令スレッドを指示する最終スレッド選択信号を、前記基準スレッド選択信号と前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたフィードバック信号とに基づいて生成する段階と、
（ｃ）インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つの命令スレッドを選択する選択に、前記最終スレッド選択信号を適用する段階と
を含む方法。
（２）（ａ）前記いくつかの命令スレッドの中の処理する追加の命令スレッドを指示する追加の基準スレッド選択信号を、前記命令インタリーブ執行規則に少なくとも部分的に基づいて生成する段階と、
（ｂ）前記いくつかの命令スレッドに含まれるそれぞれの命令スレッドを指示する追加の最終スレッド選択信号を、前記追加の基準スレッド選択信号と前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられた追加のフィードバック信号とに基づいて生成する段階と
をさらに含む、上記（１）に記載の方法。
（３）前記最終スレッド選択信号と前記追加のスレッド選択信号を結合してスレッド選択ＭＵＸ制御信号を生成する段階をさらに含む、上記（２）に記載の方法。
（４）前記追加の基準スレッド選択信号が前記基準スレッド選択信号の２進補数である、上記（２）に記載の方法。
（５）（ａ）前記最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる第１の命令スレッドに関連付けられた保留入力に適用する段階と、
（ｂ）前記追加の最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる追加の命令スレッドに関連付けられた保留入力に適用する段階と
をさらに含む、上記（２）に記載の方法。
（６）前記フィードバック信号が前記第１の命令スレッドに関連付けられている、上記（１）に記載の方法。
（７）前記いくつかの命令スレッドが異なる処理優先度を有するときに前記フィードバック信号を無効にする段階をさらに含む、上記（１）に記載の方法。
（８）同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する方法であって、
（ａ）命令インタリーブ執行規則に少なくとも部分的に基づく基準スレッド選択信号を受け取る段階であって、前記基準スレッド選択信号が、前記いくつかの命令スレッドに含まれる処理のために選択された第１の命令スレッドを指示する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたフィードバック信号を命令処理要素から受け取る段階と、
（ｃ）前記いくつかの命令スレッドに含まれる特定の命令スレッドを指示する最終スレッド選択信号を、前記基準スレッド選択信号および前記フィードバック信号に基づいて生成する段階と、
（ｄ）インタリーブされた命令ストリームに命令をインタリーブするために１つの前記命令スレッドを選択する選択に、前記最終スレッド選択信号を適用する段階と
を含む方法。
（９）（ａ）前記命令インタリーブ執行規則に少なくとも部分的に基づく追加の基準スレッド選択信号を受け取る段階であって、前記追加の基準スレッド選択信号が、前記いくつかの命令スレッドに含まれる処理のために選択された追加の命令スレッドを指示する段階と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられた追加のフィードバック信号を命令処理要素から受け取る段階と、
（ｃ）前記いくつかの命令スレッドに含まれるそれぞれの命令スレッドを指示する追加の最終スレッド選択信号を、前記基準スレッド選択信号および前記フィードバック信号に基づいて生成する段階と
をさらに含む、上記（８）に記載の方法。
（１０）前記最終スレッド選択信号と前記追加の最終スレッド選択信号を結合してスレッド選択ＭＵＸ制御信号を生成する段階をさらに含む、上記（９）に記載の方法。
（１１）前記追加の基準スレッド選択信号が前記基準スレッド選択信号の２進補数である、上記（９）に記載の方法。
（１２）（ａ）前記最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる第１の命令スレッドに関連付けられた保留入力に適用する段階と、
（ｂ）前記追加の最終スレッド選択信号を、前記いくつかの命令スレッドに含まれる追加の命令スレッドに関連付けられた保留入力に適用する段階と
をさらに含む、上記（９）に記載の方法。
（１３）前記フィードバック信号が前記第１の命令スレッドに関連付けられている、上記（８）に記載の方法。
（１４）前記いくつかの命令スレッドが異なる処理優先度を有するときに前記フィードバック信号を無効にする段階をさらに含む、上記（８）に記載の方法。
（１５）同時マルチスレッディング・プロセッサにおけるいくつかの命令スレッド間の命令のサイクル単位のインタリービングを制御する回路であって、
（ａ）前記いくつかの命令スレッドの中の第１の命令スレッドを指示する第１のスレッド選択信号を受け取るように接続された第１の選択入力と、
（ｂ）前記いくつかの命令スレッドに含まれる１つの前記命令スレッドに関連付けられたプロセッサ要素フィードバック信号を受け取るように接続されたフィードバック入力と、
（ｃ）前記基準スレッド選択信号および前記フィードバック信号に基づいて最終スレッド選択信号を生成する変更構成要素と、
（ｄ）インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つ命令スレッドを選択する選択に前記最終スレッド選択信号を適用する出力構成要素と
を含む回路。
（１６）前記いくつかの命令スレッドの中の第２の命令スレッドを指示する第２の基準スレッド選択信号を受け取るように接続された第２の選択入力をさらに含む、上記（１５）に記載の回路。
（１７）（ａ）前記変更構成要素がさらに、前記第２のスレッド選択信号および第２のフィードバック信号に基づいて追加の最終スレッド選択信号を生成し、
（ｂ）前記出力構成要素がさらに、インタリーブされた命令ストリームに命令をインタリーブするために前記いくつかの命令スレッドのうちの１つの命令スレッドを選択する選択に前記追加の最終スレッド選択信号を適用する、
上記（１６）に記載の回路。
（１８）（ａ）前記最終スレッド選択信号の状態に基づいて第１の命令スレッドを選択的に保留する第１のスレッド保留要素と、
（ｂ）前記追加の最終スレッド選択信号の状態に基づいて第２の命令スレッドを選択的に保留する第２のスレッド保留要素と
をさらに含む、上記（１７）に記載の回路。
（１９）前記第１のフィードバック信号と前記第２のフィードバック信号のそれぞれに対するフィードバック・オーバライド回路をさらに含み、前記フィードバック・オーバライド回路が、前記いくつかの命令スレッドが異なる処理優先度を有するときにそれぞれの前記フィードバック信号を無効にする、上記（１７）に記載の回路。
（２０）前記いくつかの命令スレッドが異なる処理優先度を有するときに前記第１のフィードバック信号を無効にする第１のフィードバック・オーバライド回路をさらに含む、上記（１５）に記載の回路。
【図面の簡単な説明】
【００５４】
【図１】本発明に基づくスレッド選択配置を含むプロセッサのブロック図である。
【図２】本発明の原理を具体化したスレッド選択変更構成要素を含む、図１のスレッド選択コントローラの好ましい一形態のブロック図／構成図である。
【図３】本発明に基づく選択制御回路を示すブロック図／構成図である。
【符号の説明】
【００５５】
１００  プロセッサ
１０１  第１の命令待ち行列
１０２  第２の命令待ち行列
１０３  第１のラッチ
１０４  第２のラッチ
１０５  選択マルチプレクサ
１０６  選択コントローラ
１１３  システム・バス
１１４  バス・インタフェース・ユニット
１１５  プロセッサ・バス
１１６  メイン・メモリ
１１７  不揮発性大容量記憶装置
１１８  命令キャッシュ／メモリ管理ユニット
１１９  データ・キャッシュ／メモリ管理ユニット
１２０  シーケンシャル・フェッチャ
１２１  分岐処理ユニット
１２３  命令解読ユニット
１２４  順序付けユニット
１３０  実行ユニット
１４０  実行ユニット
１５０  実行ユニット
１５２  保留信号経路
１５３  保留信号経路
１５４  スレッド選択制御経路
１９０  完了ユニット
２０３  インタリーブ規則執行構成要素
２０５  変更構成要素
２１１  ＡＮＤゲート
２１３  ＡＮＤゲート
２１５  基準スレッド選択信号
２１７  基準スレッド選択信号
２１９  フィードバック入力経路
２２１  フィードバック入力経路
２２５  出力構成要素
２２９  ＡＮＤゲート
２２９ａ  ＡＮＤゲート
２３０  ＡＮＤゲート
２３０ａ  ＡＮＤゲート
２３１  ＯＲゲート
２３３  ＯＲゲート
２３７  ＡＮＤゲート
２３７ａ  ＡＮＤゲート
２４１  インバータ
２４１ａ  インバータ
２４３  インバータ
２４３ａ  インバータ
２５１  ＯＲゲート
２５１ａ  ＯＲゲート
２５３  最終スレッド選択信号
２５５  最終スレッド選択信号
２６４  フィードバック・オーバライド制御構成要素
４０３  ＡＮＤゲート
４０７  ＡＮＤゲート
４１１  ＯＲゲート
４１７  インバータ
【図１】
2004326765.tif 000003
【図２】
2004326765.tif 000004
【図３】
2004326765.tif 000005