(57)【要約】【課題】  アウトオブオーダー設計技法を用いることなくインオーダー・マルチスレッディング・プロセッサのスループットを改善するためのシステムおよび方法を提供する。  【解決手段】  インオーダー・マルチスレッディング・プロセッサのスループットを向上させるためのシステムおよび方法を提供する。第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別する。依存命令をもっと前のパイプライン・ステージに供給することによって、それをリサイクルする。依存命令をディスパッチにおいて遅延させる。第１のスレッドから少なくとも１つの長いレイテンシ命令の完了を検出する。長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とする。
2006509282.tif 000002
【特許請求の範囲】
【請求項１】
インオーダー・マルチスレッディング・プロセッサのスループットを向上させるための方法であって、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するステップと、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするステップと、
前記依存命令をディスパッチにおいて遅延させるステップと、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するステップと、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするステップと、
を含む、前記の方法。
【請求項２】
前記依存命令をディスパッチにおいて遅延させるステップが、前記依存命令を命令バッファに保持することを有する、請求項１に記載の方法。
【請求項３】
ディスパッチ・ブロック・マークによって、前記依存命令を前記命令バッファに保持することを示す、請求項２に記載の方法。
【請求項４】
前記ディスパッチ・ブロック・マークをリセットして、前記依存命令を前記命令バッファから解放することを示す、請求項３に記載の方法。
【請求項５】
前記少なくとも１つの長いレイテンシ命令がロード・ミスである、請求項１に記載の方法。
【請求項６】
ロード／保存命令を発行するステップと、
前記ロード／保存命令のターゲット依存を追跡するステップと、
前記ロード／保存命令をミス・キューにセーブするステップと、
前記ロード／保存命令を実行するステップと、
ロード・ミスを通知するステップと、
後続の依存命令をフラッシュするステップと、
前記依存命令をディスパッチに保持しながら、代替的なスレッドのための他の命令をディスパッチするステップと、
前記依存命令をディスパッチするステップと、
を更に有する、請求項５に記載の方法。
【請求項７】
前記少なくとも１つの長いレイテンシ命令がアドレス変換ミスである、請求項１に記載の方法。
【請求項８】
前記少なくとも１つの長いレイテンシ命令が固定小数点複合命令である、請求項１に記載の方法。
【請求項９】
前記少なくとも１つの長いレイテンシ命令が浮動小数点複合命令である、請求項１に記載の方法。
【請求項１０】
前記少なくとも１つの長いレイテンシ命令が浮動小数点非正規化命令である、請求項１に記載の方法。
【請求項１１】
２つ以上のスレッドを有するインオーダー・マルチスレッディング・プロセッサであって、  
複数の命令フェッチ・アドレス・レジスタであって、該命令フェッチ・アドレス・レジスタの少なくとも１つが前記２つ以上のスレッドの各々に割り当てられた、複数の命令フェッチ・アドレス・レジスタと、
前記複数の命令フェッチ・アドレス・レジスタに結合された命令キャッシュと、
複数の命令バッファであって、該命令バッファの少なくとも１つが各スレッドに割り当てられ、前記複数の命令バッファが前記命令キャッシュに結合されて前記命令キャッシュから１つ以上の命令を受信する、複数の命令バッファと、
前記命令キャッシュおよび前記複数の命令バッファの双方に結合された命令ディスパッチ・ステージと、
前記命令ディスパッチ・ステージに結合された命令発行ステージと、
前記命令発行ステージに結合され、前記第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別する依存チェック論理と、
を含み、前記依存チェック論理が、前記依存命令をもっと前のパイプラン・ステージに供給することによって前記依存命令をリサイクルし、
前記依存チェック論理が、前記依存命令をディスパッチにおいて遅延させ、
前記依存チェック論理が、前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出し、
前記依存チェック論理が、前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とする、インオーダー・マルチスレッディング・プロセッサ。
【請求項１２】
前記発行ステージが、少なくとも１つのレジスタ・ファイルおよび該レジスタ・ファイルに結合された少なくとも１つの実行ユニットを有する、請求項１１に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１３】
前記少なくとも１つのレジスタ・ファイルがベクトル・レジスタ・ファイル（ＶＲＦ）を有し、前記少なくとも１つの実行ユニットがベクトル／ＳＩＭＤマルチメディア拡張（ＶＭＸ）を有する、請求項１２に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１４】
前記少なくとも１つのレジスタ・ファイルが浮動小数点レジスタ・ファイル（ＶＰＲ）を有し、前記少なくとも１つの実行ユニットが浮動小数点ユニット（ＦＰＵ）を有する、請求項１２に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１５】
前記少なくとも１つのレジスタ・ファイルが汎用レジスタ・ファイル（ＧＰＲ）を有し、前記少なくとも１つの実行ユニットが固定小数点ユニット（ＦＸＵ）およびロード／保存ユニット（ＬＳＵ）を有する、請求項１２に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１６】
前記少なくとも１つのレジスタ・ファイルが、条件レジスタ・ファイル（ＣＲ）、リンク・レジスタ・ファイル（ＬＮＫ）、およびカウント・レジスタ・ファイル（ＣＮＴ）を有し、前記少なくとも１つの実行ユニットがブランチを有する、請求項１２に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１７】
２つ以上のスレッドを有するインオーダー・マルチスレッディング・プロセッサであって、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するための手段と、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするための手段と、
前記依存命令をディスパッチにおいて遅延させるための手段と、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するための手段と、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするための手段と、
を含む、インオーダー・マルチスレッディング・プロセッサ。
【請求項１８】
前記依存命令をディスパッチにおいて遅延させるための手段が、前記依存命令を命令バッファに保持するための手段を有する、請求項１７に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１９】
ディスパッチ・ブロック・マークによって、前記依存命令を前記命令バッファに保持することを示す、請求項１８に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項２０】
前記ディスパッチ・マークをリセットして、前記依存命令を前記命令バッファから解放することを示す、請求項１９に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項２１】
前記少なくとも１つの長いレイテンシ命令がロード・ミスである、請求項１７に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項２２】
ロード／保存命令を発行するための手段と、
前記ロード／保存命令のターゲット依存を追跡するための手段と、
前記ロード／保存命令をミス・キューにセーブするための手段と、
前記ロード／保存命令を実行するための手段と、
ロード・ミスを通知するための手段と、
後続の依存命令をフラッシュするための手段と、
前記依存命令をディスパッチに保持しながら、代替的なスレッドのための他の命令をディスパッチするための手段と、
前記依存命令をディスパッチするための手段と、
を更に含む、請求項２１に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項２３】
インオーダー・マルチスレッディング・プロセッサのスループットを向上させるためのコンピュータ・プログラムであって、媒体において具現化され、前記コンピュータ・プログラムが、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するためのコンピュータ・プログラム・コードと、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするためのコンピュータ・プログラム・コードと、
前記依存命令をディスパッチにおいて遅延させるためのコンピュータ・プログラム・コードと、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するためのコンピュータ・プログラム・コードと、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするためのコンピュータ・プログラム・コードと、
を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、インオーダー（in-order）・プロセッサのスループットの改善に関し、更に具体的には、インオーダー・プロセッサにおけるマルチスレッディング技法に関する。
【背景技術】
【０００２】
「マルチスレッディング」は、コンピュータ・システムにおいて用いられる一般的な技法であり、多数のスレッドが共有データフロー上で実行することを可能とする。単一プロセッサ・システムにおいて用いられる場合、マルチスレッディングによって、単一プロセッサ・システムのオペレーティング・システム・ソフトウエアは、マルチプロセッサ・システムの様相を呈する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来技術において、いくつかのマルチスレッディング技法が用いられている。例えば、コース・グレイン・マルチスレッディング（coarse-grain multithreading）は、１度に１つのみのスレッドがアクティブになることを可能とし、スレッド・スワップがある場合はいつでも全パイプラインをフラッシュする。この技法では、単一のスレッドがキャッシュ・ミス等のイベントに遭遇するまで実行し、次いでパイプラインを空にし、代替的なスレッドがアクティブになる（すなわちスワップインされる）。
【０００４】
別の例では、同時マルチスレッディング（ＳＭＴ：simultaneous multithreading）によって、多数のスレッドが同時にアクティブになることができ、レジスタ名変更、および完了順序付けバッファ等のアウトオブオーダー（out-of-order）設計のリソースを用いて、多数のアクティブなスレッドを追跡する。ＳＭＴは、ハードウエア実施では相当に高価である可能性がある。
【０００５】
従って、アウトオブオーダー設計技法を用いることなく、インオーダー・マルチスレッディング・プロセッサのスループットを改善するためのシステムおよび方法に対する要望がある。
【課題を解決するための手段】
【０００６】
本発明は、インオーダー・マルチスレッディング・プロセッサのスループットを向上させるためのシステムおよび方法を提供する。第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別する。依存命令をもっと前のパイプライン・ステージに供給することによって、それをリサイクルする。依存命令をディスパッチにおいて遅延させる。第１のスレッドから少なくとも１つの長いレイテンシ命令の完了を検出する。長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とする。
【０００７】
本発明およびその利点のいっそう完全な理解のため、ここで、添付図面に関連付けられた以下の説明を参照する。
【発明を実施するための最良の形態】
【０００８】
以下の考察では、多数の特定の詳細事項を述べて、本発明の完全な理解を与える。しかしながら、当業者には、かかる特定の詳細事項がなくても本発明を実施可能であることは明らかであろう。他の例では、本発明を必要以上に詳細にしてかえってあいまいにすることのないように、概略図またはブロック図の形態で周知の要素を図示している。
【０００９】
更に、特に指示しない限り、本明細書中に記載する全ての機能は、ハードウエアまたはソフトウエア、またはそれらの何らかの組み合わせで実行可能であることに留意すべきである。しかしながら、好適な実施形態では、それらの機能は、特に指示しない限り、コンピュータまたは電子データ・プロセッサ等のプロセッサによって、コンピュータ・プログラム・コード、ソフトウエア、もしくはかかる機能を実行するように符号化された集積回路またはそれら全てに従って、実行される。
【００１０】
図面の図１を参照すると、参照番号１００は、マルチスレッディング命令フローを有するプロセッサ１００の大体をブロック図で示す。好ましくは、プロセッサ１００は、インオーダー・マルチスレッディング・プロセッサである。プロセッサ１００は、２つのスレッド（ＡおよびＢ）を有するが、３つ以上のスレッドを有する場合もある。
【００１１】
プロセッサ１００は、それぞれスレッドＡおよびＢのための命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０２および１０４を含む。ＩＦＡＲ１０２および１０４は、ＩＣ１、ＩＣ２、およびＩＣ３を有する命令キャッシュ（ＩＣＡＣＨＥ）１０６に結合されている。また、プロセッサ１００は、それぞれスレッドＡおよびＢのための命令バッファ（ＩＢＵＦ）１０８および１１０を含む。ＩＢＵＦ１０８および１１０の各々は、２エントリの深さおよび４命令の広さである。具体的には、ＩＢＵＦ１０８は、ＩＢＵＦ  Ａ（０）およびＩＢＵＦ  Ａ（１）を含む。同様に、ＩＢＵＦ１１０は、ＩＢＵＦ  Ｂ（０）およびＩＢＵＦ  Ｂ（１）を含む。プロセッサ１００は、更に、命令ディスパッチ・ブロックＩＤ１  １１２およびＩＤ２  １１４を含む。ＩＤ１  １１２は、マルチプレクサ１１６を含み、これはＩＣＡＣＨＥ１０６ならびにＩＢＵＦ１０８および１１０に結合されている。マルチプレクサ１１６は、スレッド・ディスパッチ要求信号１１８を制御信号として受信するように構成されている。また、ＩＤ１  １１２は、ＩＤ２  １１４にも結合されている。
【００１２】
プロセッサ１００は、更に、命令発行ブロックＩＳ１  １２０およびＩＳ２  １２２を含む。ＩＳ１  １２０は、ＩＤ２  １１４に結合されて、命令を受信する。また、ＩＳ１  １２０は、ＩＳ２  １２２に結合されて、命令をＩＳ２  １２２に送信する。プロセッサ１００は、更に、命令を処理するために実行ユニットに結合された様々なレジスタ・ファイルを含む。具体的には、プロセッサ１００は、ベクトル／ＳＩＭＤマルチメディア拡張（ＶＭＸ）１２６に結合されたベクトル・レジスタ・ファイル（ＶＲＦ）１２４を含む。また、プロセッサ１００は、浮動小数点ユニット（ＦＰＵ）１３０に結合された浮動小数点レジスタ・ファイル（ＦＰＲ）１２８を含む。更に、プロセッサ１００は、固定小数点ユニット／ロード保存ユニット（ＦＸＵ／ＬＳＵ）１３４およびデータ・キャッシュ（ＤＣＡＣＨＥ）１３６に結合された汎用レジスタ・ファイル（ＧＰＲ）１３２を含む。また、プロセッサ１００は、条件レジスタ・ファイル／リンク・レジスタ・ファイル／カウント・レジスタ・ファイル（ＣＲ／ＬＮＫ／ＣＮＴ）１３８およびブランチ１４０を含む。ＩＳ２  １２２は、ＶＲＦ１２４、ＦＰＲ１２８、ＧＰＲ１３２、およびＣＲ／ＬＮＫ／ＣＮＴ１３８に結合されている。また、プロセッサ１００は、依存チェック論理１４２を含み、これはＩＳ２  １２２に結合されていると好ましい。
【００１３】
命令フェッチは、スレッドごとに別個のＩＦＡＲ１０２および１０４を維持する。フェッチは、スレッド間でサイクルごとに交番する。命令フェッチは、パイプライン型であり、この実施において３サイクルを要する。３サイクルの終了時に、４つの命令がＩＣＡＣＨＥ１０６からフェッチされ、ＩＤ１  １１２に転送される。４つの命令は、ＩＢＵＦ１０８もしくは１１０またはその双方にディスパッチされるかまたは挿入される。
【００１４】
ＩＤ１  １１２において、スレッド切り替えのための選択が決定される。この決定は、スレッド・ディスパッチ要求信号１１８およびそのスレッドに利用可能な命令に基づいている。好ましくは、スレッド・ディスパッチ要求信号１１８は、スレッドごとに毎サイクル、トグルする（toggle）。所与のスレッドに利用可能な命令があり、そのスレッドについてアクティブなスレッドである場合、そのスレッドのために命令がディスパッチされる。アクティブ・スレッド・サイクルの間にスレッドに利用できる命令が存在しない場合、代替的なスレッドが利用可能な命令を有するならばこのディスパッチ・スロットを用いることができる。
【００１５】
従来技術のシステムでは、長いレイテンシ命令の後に第１のスレッド（例えばスレッドＡ）における依存命令がある場合、長いレイテンシ命令が処理されるまで、依存命令を実行することができない。従って、長いレイテンシ命令が処理されるまで、依存命令はＩＳ２  １２２に保存される。しかしながら、本発明では、依存チェック論理１４２が、長いレイテンシ命令の後の依存命令を識別する。好ましくは、依存命令は、依存チェック論理がこれを識別することができるように標示される。依存命令をもっと前のパイプライン・ステージ（例えばフェッチ・ステージ）に供給することによって、依存命令をリサイクルする。依存命令は、ディスパッチにおいて遅延される。長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することができる。長いレイテンシ命令が完了すると、第１のスレッドの依存命令が実行される。
【００１６】
ここで、図２を参照すると、タイミング図２００が、通常のスレッド切り替えを示す。タイミング図２００は、通常のフェッチ、ディスパッチ、および発行プロセスを示し、ブランチ・リダイレクトもパイプライン・ストールもない。好ましくは、フェッチ、ディスパッチ、および発行プロセスは、サイクルごとにスレッド間で交番する。具体的には、Ａ（０：３）は、スレッドＡのためにフェッチされる４つの命令から成る群である。同様に、Ｂ（０：３）は、スレッドＢのためにフェッチされる４つの命令から成る群である。ブランチがないので、フェッチおよびディスパッチは双方とも、サイクルごとにスレッドをトグルする。
【００１７】
ここで、図３を参照すると、タイミング図３００は、スレッドＡ上のＤＣＡＣＨＥロード・ミスの後にスレッドＡ上の依存命令が来ることを示す。サイクル１では、ロード３０２は、パイプライン・ステージＥＸ２にある。サイクル１では、スレッドＡの依存命令３０４は、パイプライン・ステージＩＳ２にある。サイクル４で、ＤＣＡＣＨＥミス信号３０６が活性化される。次いで、これによって、スレッドＡのためのライトバック・イネーブル信号３０８が無効になる。サイクル７では、スレッドＡの依存命令３０４は、ＦＬＵＳＨ（Ａ）信号３１０によってフラッシュされる。次いで、依存命令３０４は、リサイクルされ、ＤＣＡＣＨＥをミスしたロードからデータが戻るまでディスパッチに保持される。フラッシュが起こった後、スレッドＢには、サイクル２１で開始するディスパッチ・スロットが全て与えられる。これは、ＤＣＡＣＨＥロード・データが戻るまで継続する。
【００１８】
ロード３０２が完全に実行された後、スレッドＡは、実行のため、パイプラインを介して依存命令３０４を送信することに留意すべきである。
【００１９】
長いレイテンシ命令は、多くの異なる形態を取ることができる。図３に示すようなロード・ミスは、長いレイテンシ命令の１例である。更に、（１）アドレス変換ミス、（２）固定小数点複合命令、（３）浮動小数点複合命令、および（４）浮動小数点非正規化命令を含むがこれらには限定されない、他のタイプの長いレイテンシ命令がある。図３はロード・ミスの場合を示すが、本発明は他のタイプの長いレイテンシ命令にも適用可能であることは、当業者には一般に理解されよう。
【００２０】
前述の記載から、本発明の真の精神から逸脱することなく、本発明の好適な実施形態に様々な変更および変形を行い得ることは理解されよう。この記載は、例示の目的のためのみであり、限定の意味で解釈すべきではない。本発明の範囲は、特許請求の範囲の文言によってのみ限定されるものとする。
【図面の簡単な説明】
【００２１】
【図１】プロセッサにおけるマルチスレッディング命令フローを示すブロック図である。
【図２】通常のスレッド切り替えを示すタイミング図である。
【図３】スレッドにおいてロード・ミスの後に依存命令が続く場合のスレッド切り替えを示すタイミング図である。
【図１】
2006509282.tif 000003
【図２】
2006509282.tif 000004
【図３】
2006509282.tif 000005
【手続補正書】
【提出日】平成17年2月21日(2005.2.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
インオーダー・マルチスレッディング・プロセッサのスループットを向上させるための方法であって、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するステップと、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするステップと、
前記依存命令をディスパッチにおいて遅延させるステップと、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するステップと、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするステップと、
を含む、前記の方法。
【請求項２】
前記依存命令をディスパッチにおいて遅延させるステップが、前記依存命令を命令バッファに保持することを有する、請求項１に記載の方法。
【請求項３】
ディスパッチ・ブロック・マークによって、前記依存命令を前記命令バッファに保持することを示す、請求項２に記載の方法。
【請求項４】
前記ディスパッチ・ブロック・マークをリセットして、前記依存命令を前記命令バッファから解放することを示す、請求項３に記載の方法。
【請求項５】
前記少なくとも１つの長いレイテンシ命令がロード・ミスである、請求項１に記載の方法。
【請求項６】
ロード／保存命令を発行するステップと、
前記ロード／保存命令のターゲット依存を追跡するステップと、
前記ロード／保存命令をミス・キューにセーブするステップと、
前記ロード／保存命令を実行するステップと、
ロード・ミスを通知するステップと、
後続の依存命令をフラッシュするステップと、
前記依存命令をディスパッチに保持しながら、代替的なスレッドのための他の命令をディスパッチするステップと、
前記依存命令をディスパッチするステップと、
を更に有する、請求項５に記載の方法。
【請求項７】
前記少なくとも１つの長いレイテンシ命令がアドレス変換ミスである、請求項１に記載の方法。
【請求項８】
前記少なくとも１つの長いレイテンシ命令が固定小数点複合命令である、請求項１に記載の方法。
【請求項９】
前記少なくとも１つの長いレイテンシ命令が浮動小数点複合命令である、請求項１に記載の方法。
【請求項１０】
前記少なくとも１つの長いレイテンシ命令が浮動小数点非正規化命令である、請求項１に記載の方法。
【請求項１１】
２つ以上のスレッドを有するインオーダー・マルチスレッディング・プロセッサであって、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するための手段と、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするための手段と、
前記依存命令をディスパッチにおいて遅延させるための手段と、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するための手段と、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするための手段と、
を含む、インオーダー・マルチスレッディング・プロセッサ。
【請求項１２】
前記依存命令をディスパッチにおいて遅延させるための手段が、前記依存命令を命令バッファに保持するための手段を有する、請求項１１に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１３】
ディスパッチ・ブロック・マークによって、前記依存命令を前記命令バッファに保持することを示す、請求項１２に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１４】
前記ディスパッチ・マークをリセットして、前記依存命令を前記命令バッファから解放することを示す、請求項１３に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１５】
前記少なくとも１つの長いレイテンシ命令がロード・ミスである、請求項１１に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１６】
ロード／保存命令を発行するための手段と、
前記ロード／保存命令のターゲット依存を追跡するための手段と、
前記ロード／保存命令をミス・キューにセーブするための手段と、
前記ロード／保存命令を実行するための手段と、
ロード・ミスを通知するための手段と、
後続の依存命令をフラッシュするための手段と、
前記依存命令をディスパッチに保持しながら、代替的なスレッドのための他の命令をディスパッチするための手段と、
前記依存命令をディスパッチするための手段と、
を更に含む、請求項１５に記載のインオーダー・マルチスレッディング・プロセッサ。
【請求項１７】
インオーダー・マルチスレッディング・プロセッサのスループットを向上させるためのコンピュータ・プログラムであって、媒体において具現化され、前記コンピュータ・プログラムが、
第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別するためのコンピュータ・プログラム・コードと、
前記依存命令をもっと前のパイプライン・ステージに供給することによって前記依存命令をリサイクルするためのコンピュータ・プログラム・コードと、
前記依存命令をディスパッチにおいて遅延させるためのコンピュータ・プログラム・コードと、
前記第１のスレッドから前記少なくとも１つの長いレイテンシ命令の完了を検出するためのコンピュータ・プログラム・コードと、
前記少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とするためのコンピュータ・プログラム・コードと、
を含む、コンピュータ・プログラム・プロダクト。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、インオーダー（in-order）・プロセッサのスループットの改善に関し、更に具体的には、インオーダー・プロセッサにおけるマルチスレッディング技法に関する。
【背景技術】
【０００２】
「マルチスレッディング」は、コンピュータ・システムにおいて用いられる一般的な技法であり、多数のスレッドが共有データフロー上で実行することを可能とする。単一プロセッサ・システムにおいて用いられる場合、マルチスレッディングによって、単一プロセッサ・システムのオペレーティング・システム・ソフトウエアは、マルチプロセッサ・システムの様相を呈する。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来技術において、いくつかのマルチスレッディング技法が用いられている。例えば、コース・グレイン・マルチスレッディング（coarse-grain multithreading）は、１度に１つのみのスレッドがアクティブになることを可能とし、スレッド・スワップがある場合はいつでも全パイプラインをフラッシュする。この技法では、単一のスレッドがキャッシュ・ミス等のイベントに遭遇するまで実行し、次いでパイプラインを空にし、代替的なスレッドがアクティブになる（すなわちスワップインされる）。
【０００４】
別の例では、同時マルチスレッディング（ＳＭＴ：simultaneousmultithreading）によって、多数のスレッドが同時にアクティブになることができ、レジスタ名変更、および完了順序付けバッファ等のアウトオブオーダー（out-of-order）設計のリソースを用いて、多数のアクティブなスレッドを追跡する。ＳＭＴは、ハードウエア実施では相当に高価である可能性がある。
【０００５】
従って、アウトオブオーダー設計技法を用いることなく、インオーダー・マルチスレッディング・プロセッサのスループットを改善するためのシステムおよび方法に対する要望がある。
【課題を解決するための手段】
【０００６】
本発明は、インオーダー・マルチスレッディング・プロセッサのスループットを向上させるためのシステムおよび方法を提供する。第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別する。依存命令をもっと前のパイプライン・ステージに供給することによって、それをリサイクルする。依存命令をディスパッチにおいて遅延させる。第１のスレッドから少なくとも１つの長いレイテンシ命令の完了を検出する。長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とする。
【０００７】
本発明およびその利点のいっそう完全な理解のため、ここで、添付図面に関連付けられた以下の説明を参照する。
【発明を実施するための最良の形態】
【０００８】
以下の考察では、多数の特定の詳細事項を述べて、本発明の完全な理解を与える。しかしながら、当業者には、かかる特定の詳細事項がなくても本発明を実施可能であることは明らかであろう。他の例では、本発明を必要以上に詳細にしてかえってあいまいにすることのないように、概略図またはブロック図の形態で周知の要素を図示している。
【０００９】
更に、特に指示しない限り、本明細書中に記載する全ての機能は、ハードウエアまたはソフトウエア、またはそれらの何らかの組み合わせで実行可能であることに留意すべきである。しかしながら、好適な実施形態では、それらの機能は、特に指示しない限り、コンピュータまたは電子データ・プロセッサ等のプロセッサによって、コンピュータ・プログラム・コード、ソフトウエア、もしくはかかる機能を実行するように符号化された集積回路またはそれら全てに従って、実行される。
【００１０】
図面の図１を参照すると、参照番号１００は、マルチスレッディング命令フローを有するプロセッサ１００の大体をブロック図で示す。好ましくは、プロセッサ１００は、インオーダー・マルチスレッディング・プロセッサである。プロセッサ１００は、２つのスレッド（ＡおよびＢ）を有するが、３つ以上のスレッドを有する場合もある。
【００１１】
プロセッサ１００は、それぞれスレッドＡおよびＢのための命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）１０２および１０４を含む。ＩＦＡＲ１０２および１０４は、ＩＣ１、ＩＣ２、およびＩＣ３を有する命令キャッシュ（ＩＣＡＣＨＥ）１０６に結合されている。また、プロセッサ１００は、それぞれスレッドＡおよびＢのための命令バッファ（ＩＢＵＦ）１０８および１１０を含む。ＩＢＵＦ１０８および１１０の各々は、２エントリの深さおよび４命令の広さである。具体的には、ＩＢＵＦ１０８は、ＩＢＵＦ  Ａ（０）およびＩＢＵＦ  Ａ（１）を含む。同様に、ＩＢＵＦ１１０は、ＩＢＵＦ  Ｂ（０）およびＩＢＵＦ  Ｂ（１）を含む。プロセッサ１００は、更に、命令ディスパッチ・ブロックＩＤ１  １１２およびＩＤ２  １１４を含む。ＩＤ１  １１２は、マルチプレクサ１１６を含み、これはＩＣＡＣＨＥ１０６ならびにＩＢＵＦ１０８および１１０に結合されている。マルチプレクサ１１６は、スレッド・ディスパッチ要求信号１１８を制御信号として受信するように構成されている。また、ＩＤ１  １１２は、ＩＤ２  １１４にも結合されている。
【００１２】
プロセッサ１００は、更に、命令発行ブロックＩＳ１  １２０およびＩＳ２  １２２を含む。ＩＳ１  １２０は、ＩＤ２  １１４に結合されて、命令を受信する。また、ＩＳ１  １２０は、ＩＳ２  １２２に結合されて、命令をＩＳ２  １２２に送信する。プロセッサ１００は、更に、命令を処理するために実行ユニットに結合された様々なレジスタ・ファイルを含む。具体的には、プロセッサ１００は、ベクトル／ＳＩＭＤマルチメディア拡張（ＶＭＸ）１２６に結合されたベクトル・レジスタ・ファイル（ＶＲＦ）１２４を含む。また、プロセッサ１００は、浮動小数点ユニット（ＦＰＵ）１３０に結合された浮動小数点レジスタ・ファイル（ＦＰＲ）１２８を含む。更に、プロセッサ１００は、固定小数点ユニット／ロード保存ユニット（ＦＸＵ／ＬＳＵ）１３４およびデータ・キャッシュ（ＤＣＡＣＨＥ）１３６に結合された汎用レジスタ・ファイル（ＧＰＲ）１３２を含む。また、プロセッサ１００は、条件レジスタ・ファイル／リンク・レジスタ・ファイル／カウント・レジスタ・ファイル（ＣＲ／ＬＮＫ／ＣＮＴ）１３８およびブランチ１４０を含む。ＩＳ２  １２２は、ＶＲＦ１２４、ＦＰＲ１２８、ＧＰＲ１３２、およびＣＲ／ＬＮＫ／ＣＮＴ１３８に結合されている。また、プロセッサ１００は、依存チェック論理１４２を含み、これはＩＳ２  １２２に結合されていると好ましい。
【００１３】
命令フェッチは、スレッドごとに別個のＩＦＡＲ１０２および１０４を維持する。フェッチは、スレッド間でサイクルごとに交番する。命令フェッチは、パイプライン型であり、この実施において３サイクルを要する。３サイクルの終了時に、４つの命令がＩＣＡＣＨＥ１０６からフェッチされ、ＩＤ１  １１２に転送される。４つの命令は、ＩＢＵＦ１０８もしくは１１０またはその双方にディスパッチされるかまたは挿入される。
【００１４】
ＩＤ１  １１２において、スレッド切り替えのための選択が決定される。この決定は、スレッド・ディスパッチ要求信号１１８およびそのスレッドに利用可能な命令に基づいている。好ましくは、スレッド・ディスパッチ要求信号１１８は、スレッドごとに毎サイクル、トグルする（toggle）。所与のスレッドに利用可能な命令があり、そのスレッドについてアクティブなスレッドである場合、そのスレッドのために命令がディスパッチされる。アクティブ・スレッド・サイクルの間にスレッドに利用できる命令が存在しない場合、代替的なスレッドが利用可能な命令を有するならばこのディスパッチ・スロットを用いることができる。
【００１５】
従来技術のシステムでは、長いレイテンシ命令の後に第１のスレッド（例えばスレッドＡ）における依存命令がある場合、長いレイテンシ命令が処理されるまで、依存命令を実行することができない。従って、長いレイテンシ命令が処理されるまで、依存命令はＩＳ２  １２２に保存される。しかしながら、本発明では、依存チェック論理１４２が、長いレイテンシ命令の後の依存命令を識別する。好ましくは、依存命令は、依存チェック論理がこれを識別することができるように標示される。依存命令をもっと前のパイプライン・ステージ（例えばフェッチ・ステージ）に供給することによって、依存命令をリサイクルする。依存命令は、ディスパッチにおいて遅延される。長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することができる。長いレイテンシ命令が完了すると、第１のスレッドの依存命令が実行される。
【００１６】
ここで、図２を参照すると、タイミング図２００が、通常のスレッド切り替えを示す。タイミング図２００は、通常のフェッチ、ディスパッチ、および発行プロセスを示し、ブランチ・リダイレクトもパイプライン・ストールもない。好ましくは、フェッチ、ディスパッチ、および発行プロセスは、サイクルごとにスレッド間で交番する。具体的には、Ａ（０：３）は、スレッドＡのためにフェッチされる４つの命令から成る群である。同様に、Ｂ（０：３）は、スレッドＢのためにフェッチされる４つの命令から成る群である。ブランチがないので、フェッチおよびディスパッチは双方とも、サイクルごとにスレッドをトグルする。
【００１７】
ここで、図３を参照すると、タイミング図３００は、スレッドＡ上のＤＣＡＣＨＥロード・ミスの後にスレッドＡ上の依存命令が来ることを示す。サイクル１では、ロード３０２は、パイプライン・ステージＥＸ２にある。サイクル１では、スレッドＡの依存命令３０４は、パイプライン・ステージＩＳ２にある。サイクル４で、ＤＣＡＣＨＥミス信号３０６が活性化される。次いで、これによって、スレッドＡのためのライトバック・イネーブル信号３０８が無効になる。サイクル７では、スレッドＡの依存命令３０４は、ＦＬＵＳＨ（Ａ）信号３１０によってフラッシュされる。次いで、依存命令３０４は、リサイクルされ、ＤＣＡＣＨＥをミスしたロードからデータが戻るまでディスパッチに保持される。フラッシュが起こった後、スレッドＢには、サイクル２１で開始するディスパッチ・スロットが全て与えられる。これは、ＤＣＡＣＨＥロード・データが戻るまで継続する。
【００１８】
ロード３０２が完全に実行された後、スレッドＡは、実行のため、パイプラインを介して依存命令３０４を送信することに留意すべきである。
【００１９】
このように、２つ以上のスレッドを有するインオーダー・マルチスレッディング・プロセッサを記載した。これは、複数の命令フェッチ・アドレス・レジスタであって、該命令フェッチ・アドレス・レジスタの少なくとも１つが２つ以上のスレッドの各々に割り当てられた、複数の命令フェッチ・アドレス・レジスタと、複数の命令フェッチ・アドレス・レジスタに結合された命令キャッシュと、複数の命令バッファであって、該命令バッファの少なくとも１つが各スレッドに割り当てられ、複数の命令バッファが命令キャッシュに結合されて命令キャッシュから１つ以上の命令を受信する、複数の命令バッファと、命令キャッシュおよび複数の命令バッファの双方に結合された命令ディスパッチ・ステージと、命令ディスパッチ・ステージに結合された命令発行ステージと、命令発行ステージに結合され、第１のスレッドからのレジスタ依存によって少なくとも１つの長いレイテンシ命令の後の依存命令を識別する依存チェック論理と、を含み、依存チェック論理が、依存命令をもっと前のパイプラン・ステージに供給することによって依存命令をリサイクルし、依存チェック論理が、依存命令をディスパッチにおいて遅延させ、依存チェック論理が、第１のスレッドから少なくとも１つの長いレイテンシ命令の完了を検出し、依存チェック論理が、少なくとも１つの長いレイテンシ命令を実行している間に、代替的なスレッドが１つ以上の命令を発行することを可能とする。
【００２０】
長いレイテンシ命令は、多くの異なる形態を取ることができる。図３に示すようなロード・ミスは、長いレイテンシ命令の１例である。更に、（１）アドレス変換ミス、（２）固定小数点複合命令、（３）浮動小数点複合命令、および（４）浮動小数点非正規化命令を含むがこれらには限定されない、他のタイプの長いレイテンシ命令がある。図３はロード・ミスの場合を示すが、本発明は他のタイプの長いレイテンシ命令にも適用可能であることは、当業者には一般に理解されよう。
【００２１】
前述の記載から、本発明の真の精神から逸脱することなく、本発明の好適な実施形態に様々な変更および変形を行い得ることは理解されよう。この記載は、例示の目的のためのみであり、限定の意味で解釈すべきではない。本発明の範囲は、特許請求の範囲の文言によってのみ限定されるものとする。
【図面の簡単な説明】
【００２２】
【図１】プロセッサにおけるマルチスレッディング命令フローを示すブロック図である。
【図２】通常のスレッド切り替えを示すタイミング図である。
【図３】スレッドにおいてロード・ミスの後に依存命令が続く場合のスレッド切り替えを示すタイミング図である。
【国際調査報告】
2006509282.tif 000006
2006509282.tif 000007
2006509282.tif 000008