(57)【要約】マルチスレッドプロセッサは、複数のハードウェアスレッドユニットと、スレッドユニットから受け取った命令をデコードするためにスレッドユニットに結合された命令デコーダと、デコードされた命令を実行するための複数の実行ユニットを含む。マルチスレッドプロセッサは、ハードウェアスレッドユニットのそれぞれに関連付けられたスレッド用の命令発行シーケンスを制御するように構成される。所与のプロセッサクロックサイクルで、指定された１つのスレッドのみが１つまたは複数の命令を発行することが可能になるが、命令を発行することが可能になる指定されたスレッドは、命令発行シーケンスに従って、複数のクロックサイクルにわたって変化する。命令は、スレッドのうちの少なくとも所与の１つが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化される。
2007533007.tif 000002
【特許請求の範囲】
【請求項１】
複数のハードウェアスレッドユニットと、
前記ハードウェアスレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、
デコードされた前記命令を実行する複数の実行ユニットと、を含むマルチスレッドプロセッサであって、
前記マルチスレッドプロセッサは、前記ハードウェアスレッドユニットのそれぞれに関連付けられた複数のスレッド用の命令発行シーケンスを制御するように構成され、
所与のプロセッサクロックサイクルでは、指定された１つのスレッドのみが１つまたは複数の命令を発行することが可能になり、前記指定されたスレッドは、前記命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能であり、
前記命令は、所与の少なくとも１つのスレッドが、多重同時命令パイプラインをサポートすることが可能であるようにパイプライン化されていることを特徴とするプロセッサ。
【請求項２】
前記命令発行シーケンスが、トークントリガスレッディングを用いて決定されることを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項３】
前記プロセッサがＮ個のスレッドをサポートし、そして、前記Ｎ個のスレッドのそれぞれが、Ｎ個の連続する前記プロセッサクロックサイクルのシーケンスにわたって、前記Ｎ個の連続するプロセッサクロックサイクルのうちの対応する１つのみにおいて、命令を発行することが可能であることを特徴とする請求項２に記載のマルチスレッドプロセッサ。
【請求項４】
前記スレッドのそれぞれが、前記プロセッサクロックサイクルのうちの対応する１つに対し、２つまたはそれ以上の命令を発行することが可能であることを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項５】
前記スレッドのそれぞれが、前記プロセッサクロックサイクルのうちの対応する１つに対し３つまでの命令を発行することが可能であることを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項６】
前記命令がパイプライン化され、そして前記所与のクロックサイクルにおいて３つまでの命令の発行が可能であることを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項７】
前記命令がパイプライン化され、そして少なくとも５個の別々の命令パイプラインが、前記スレッドのうちの異なるスレッドのために同時に実行することが可能であることを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項８】
前記パイプライン化された命令が、ロード／格納命令、演算論理ユニット命令、整数乗算命令、ベクトル乗算命令、ベクトル乗算およびリダクション命令のうちの少なくとも１つを含むことを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項９】
前記演算論理ユニット命令が、その命令デコードステージとレジスタファイル読出しステージの間に少なくとも１つのウェイトステージを含むパイプラインを有し、前記ウェイトステージにより、前記ロード／格納命令と前記演算論理命令が１組のレジスタファイル読出しポートを共有することが可能であることを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１０】
前記整数乗算命令が、その命令デコードステージとレジスタファイル読出しステージの間に少なくとも１つのウェイトステージを含むパイプラインを有し、前記ウェイトステージにより、前記整数乗算命令と前記演算論理命令が１組のレジスタファイル読出しポートを共有することが可能であることを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１１】
前記ベクトル乗算命令が、演算論理ユニットおよび整数乗算命令とは異なる１組の実行ユニットリソースを使用し、したがって前記命令のどちらとも同時に実行することができることを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１２】
前記ベクトル乗算およびリダクション命令が、プロセッサのスレッド総数より多い複数のステージを用いてパイプライン化されていることを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１３】
前記ベクトル乗算およびリダクション命令が、少なくとも１１個のステージを有するパイプラインを含むことを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１４】
前記ベクトル乗算およびリダクション命令が、命令デコードステージと、ベクトルレジスタファイル読出しステージと、少なくとも２つの乗算ステージと、少なくとも２つの加算ステージと、アキュムレータ読出しステージと、複数のリダクションステージと、アキュムレータライトバックステージとを含むことを特徴とする請求項１３に記載のマルチスレッドプロセッサ。
【請求項１５】
前記アキュムレータ読出しステージが、前記加算ステージの１つと組み合わされていることを特徴とする請求項１４に記載のマルチスレッドプロセッサ。
【請求項１６】
それぞれのベクトル乗算およびリダクション命令用のパイプラインが、複数のパイプラインステージだけ互いに対してシフトされていることを特徴とする請求項８に記載のマルチスレッドプロセッサ。
【請求項１７】
前記パイプライン化された命令が、計算サイクルが前記マルチスレッドプロセッサの発行サイクルより長いパイプラインを有するベクトル乗算およびリダクション命令を含むことを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項１８】
前記プロセッサが集積回路を含むことを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項１９】
メモリと、
前記メモリに結合されたマルチスレッドプロセッサとを含む集積回路であって、
前記マルチスレッドプロセッサは、
複数のハードウェアスレッドユニットと、
前記ハードウェアスレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、
デコードされた命令を実行する複数の実行ユニットとを含み、
前記マルチスレッドプロセッサは、前記ハードウェアスレッドユニットのそれぞれに関連付けられた複数のスレッド用の命令発行シーケンスを制御するように構成され、
所与のプロセッサクロックサイクルでは、指定された１つのスレッドのみが１つまたは複数の命令を発行することが可能であり、前記指定されたスレッドは、前記命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能であり、そして、
前記命令は、所与の少なくとも１つのスレッドが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化されていることを特徴とする集積回路。
【請求項２０】
それぞれのスレッドに関連付けられた複数のハードウェアスレッドユニットと、前記スレッドユニットから受け取った命令をデコードする、前記スレッドユニットに結合された命令デコーダと、デコードされた命令を実行する複数の実行ユニットとを含むマルチスレッドプロセッサで用いられる方法であって、
所与のプロセッサクロックサイクルで、指定された１つのスレッドのみが１つまたは複数の命令を発行することが可能になる工程と、
命令発行シーケンスに従って複数のクロックサイクルにわたって変化する命令を発行することが可能である前記指定されたスレッドを変化させる工程と、
前記スレッドのうちの少なくとも所与の１つが、多重同時命令パイプラインをサポートすることを可能にするようにパイプライン化する工程とを含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００４年４月７日に出願された、「Ｐｒｏｃｅｓｓｏｒ  Ｐｉｐｅｌｉｎｅ  Ｗｉｔｈ  Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｓｕｐｐｏｒｔ」と題する米国特許仮出願第６０／５６０，１９９号の優先権を主張するものであり、それを参照により本明細書に組み込む。
【０００２】
本出願はまた、２００４年５月７日に出願された、「Ｐｒｏｃｅｓｓｏｒ  Ｒｅｄｕｃｔｉｏｎ  Ｕｎｉｔ  ｆｏｒ  Ａｃｃｕｍｕｌａｔｉｏｎ  ｏｆ  Ｍｕｌｔｉｐｌｅ  Ｏｐｅｒａｎｄｓ  Ｗｉｔｈ  ｏｒ  Ｗｉｔｈｏｕｔ  Ｓａｔｕｒａｔｉｏｎ」と題する米国特許出願第１０／８４１，２６１号に関連し、それを参照により本明細書に組み込む。
【０００３】
本発明は一般に、ディジタルデータプロセッサの分野に関し、より詳細にはディジタル信号プロセッサ（ＤＳＰ）またはその他のタイプのディジタルデータプロセッサで用いられるマルチスレッディング、およびパイプライン化の技法に関する。
【背景技術】
【０００４】
パイプライン化は、実行時に複数の命令がオーバラップされる、良く知られたプロセッサの実装技法である。従来のパイプライン技法は、たとえば、Ｊｏｈｎ  Ｌ．Ｈｅｎｎｅｓｓｙ及びＤａｖｉｄ  Ａ．Ｐａｔｔｅｒｓｏｎの「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ」（Ｔｈｉｒｄ  Ｅｄｉｔｉｏｎ、Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｅｒｓ，Ｉｎｃ．、Ｓａｎ  Ｆｒａｎｃｉｓｃｏ、Ｃａｌｉｆｏｒｎｉａ、２００３年）に記載されている。
【０００５】
図１Ａは、オーバラップのない２つの命令の実行を含む例を示している。この例では２つの命令は、整数加算命令ａｄｄｉ  ｒ０、ｒ２、８、および整数乗算命令ｍｕｌｉ  ｒ８、ｒ３、４である。第１の命令ａｄｄｉは、レジスタｒ２の内容と即値（ｉｍｍｅｄｉａｔｅ  ｖａｌｕｅ）８を加算し、結果をレジスタｒ０に格納する。説明を簡単明瞭にするために、それぞれの命令は、命令取出し（ＩＦ）、読出し（ＲＤ）、実行（ＥＸ）、およびライトバック（ＷＢ）として示される同じ４つのパイプラインステージを含むものとする。
【０００６】
第１ステージ（ＩＦ）では、メモリから命令が取り出され、デコードされる。第２ステージ（ＲＤ）では、レジスタファイルからオペランドが読み出される。第３ステージ（ＥＸ）では、加算が実行される。最後に第４ステージ（ＷＢ）では、結果がロケーションｒ０にてレジスタファイルに書き戻される。ａｄｄｉ命令が完了したとき、次の命令ｍｕｌｉが開始される。ｍｕｌｉ命令は、レジスタｒ３の内容と即値４の加算を行い、結果をレジスタｒ８に格納する。
【０００７】
図１Ｂは、同じ２つの命令を示すが、従来のパイプライン技法を用いてそれらをいかにオーバラップすることができるかを示している。それぞれのパイプラインステージ（ＩＦ、ＲＤ、ＥＸ、およびＷＢ）は一般に、クロック境界上で実行される。第２の命令ｍｕｌｉは追加のハードウェアを必要とせずに、第２のクロックサイクルで開始することができる。ＩＦ、ＲＤ、ＥＸ、およびＷＢステージに関連するハードウェアは、２つの命令間で共有されるが、１つの命令の各ステージは、時間的に他方の各ステージに対してシフトされる。
【０００８】
図２は、パイプラインの実装において生じる複雑さを示している。この例では、ｍｕｌｉ命令は、オペランドとしてレジスタｒ０の内容が必要であり、したがってａｄｄｉ命令が計算を行って、加算の演算結果をｒ０に書き戻すまではｒ０を読み出せない。ｍｕｌｉ命令の処理は、ａｄｄｉ命令の開始に続く次のクロックサイクルで始まるが、この処理は停止し、ａｄｄｉ命令の実行およびライトバックステージが完了するのを待たなければならない。オペランドが使用可能になるまでｍｕｌｉ命令が待たなければならない空のサイクルは通常、パイプライン中の「バブル」と呼ばれる。
【０００９】
単一スレッドのプロセッサでは、パイプラインバブルを低減する通常の方法はバイパスとして知られており、その場合、ＷＢステージにおいて計算された値をレジスタファイルに書き戻す代わりに、結果は、結果を必要とするプロセッサ実行ユニットに直接送られる。これにより、高度にパイプライン化された機械では、バブルは低減されるが解消されない。これはまた一般に、依存関係チェックおよびバイパスハードウェアを必要とし、プロセッサのコストと複雑さが必要以上に増大する。
【００１０】
パイプライン停止はまた、マルチスレッディング（ｍｕｌｔｉｔｈｒｅａｄｉｎｇ）を用いることによって低減することが可能である。マルチスレッドプロセッサは、複数の異なる命令シーケンス、すなわち「スレッド（ｔｈｒｅａｄ）」の同時実行をサポートするプロセッサである。従来のスレッド技法は、たとえば、Ｍ．Ｊ．Ｆｌｙｎｎの「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ｐｉｐｅｌｉｎｅｄ  ａｎｄ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ  Ｄｅｓｉｇｎ」（Ｊｏｎｅｓ  ａｎｄ  Ｂａｒｔｌｅｔｔ  Ｐｕｂｌｉｓｈｅｒｓ、Ｂｏｓｔｏｎ、ＭＡ、１９９５年）、および  Ｇ．Ａ．Ｂｌａａｕｗ及びＦｒｅｄｅｒｉｃｋ  Ｐ．Ｂｒｏｏｋｓの「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ｃｏｎｃｅｐｔｓ  ａｎｄ  Ｅｖｏｌｕｔｉｏｎ」（Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ、Ｒｅａｄｉｎｇ、Ｍａｓｓａｃｈｕｓｅｔｔｓ、１９９７年）に記載されており、その両方を参照により本明細書に組み込む。
【特許文献１】米国特許仮出願第６０／５６０，１９９号
【特許文献２】米国特許出願第１０／８４１，２６１号
【特許文献３】米国特許出願第１０／２６９，３７２号
【特許文献４】米国特許出願第１０／２６９，２４５号
【特許文献５】米国特許第６，８４２，８４８号
【特許文献６】米国特許出願第１０／２６９，３７３号
【非特許文献１】Ｊｏｈｎ  Ｌ．Ｈｅｎｎｅｓｓｙ及びＤａｖｉｄ  Ａ．Ｐａｔｔｅｒｓｏｎ、「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ」（Ｔｈｉｒｄ  Ｅｄｉｔｉｏｎ、Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｅｒｓ，Ｉｎｃ．、Ｓａｎ  Ｆｒａｎｃｉｓｃｏ、Ｃａｌｉｆｏｒｎｉａ、２００３年）
【非特許文献２】Ｍ．Ｊ．Ｆｌｙｎｎ、「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ｐｉｐｅｌｉｎｅｄ  ａｎｄ  Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｏｒ  Ｄｅｓｉｇｎ」（Ｊｏｎｅｓ  ａｎｄ  Ｂａｒｔｌｅｔｔ  Ｐｕｂｌｉｓｈｅｒｓ、Ｂｏｓｔｏｎ、ＭＡ、１９９５年）
【非特許文献３】Ｇ．Ａ．Ｂｌａａｕｗ及びＦｒｅｄｅｒｉｃｋ  Ｐ．Ｂｒｏｏｋｓ、「Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ：Ｃｏｎｃｅｐｔｓ  ａｎｄ  Ｅｖｏｌｕｔｉｏｎ」（Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ、Ｒｅａｄｉｎｇ、Ｍａｓｓａｃｈｕｓｅｔｔｓ、１９９７年）
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、上記その他の従来手法は、スレッドごとの多重同時パイプラインは可能でなく、パイプラインシフトもサポートしていない。
【００１２】
したがって、マルチスレッドディジタルデータプロセッサにおいては、改良されたパイプラインを提供できる技法が必要である。
【課題を解決するための手段】
【００１３】
有利には、本発明は例示的な実施形態において、スレッドごとの多重同時パイプラインが可能になり、かつパイプラインシフトをサポートするマルチスレッドプロセッサを提供する。
【００１４】
本発明の一態様によれば、マルチスレッドプロセッサは、複数のハードウェアスレッドユニットと、スレッドユニットから受け取った命令をデコードするためにスレッドユニットに結合された命令デコーダと、デコードされた命令を実行するための複数の実行ユニットを含む。マルチスレッドプロセッサは、ハードウェアスレッドユニットのそれぞれに関連付けられたスレッド用の命令発行シーケンスを制御するように構成される。所与のプロセッサクロックサイクルで、指定された１つのスレッドだけが１つまたは複数の命令を発行することができるが、命令を発行できるように指定されるスレッドは、複数のクロックサイクルにわたって、命令発行シーケンスに従って変化する。命令は、少なくとも所与の１つのスレッドが多重同時命令パイプラインをサポートできるようにパイプライン化される。
【００１５】
例示的な実施形態では、命令発行シーケンスは、トークントリガスレッディング手法によって決定される。より具体的には、プロセッサがＮ個のスレッドをサポートする構成では、Ｎ個の連続するプロセッサクロックサイクルにわたって、Ｎ個のスレッドのそれぞれは、Ｎ個の連続するプロセッサクロックサイクルの対応する１つのみにおいて命令を発行することができる。
【００１６】
例示的な実施形態では、それぞれのスレッドは、その対応するプロセッサクロックサイクルの１つにおいて、３つまでの命令を発行することが可能になる。命令はパイプライン化され、少なくとも５個の別々の命令パイプラインが、異なるスレッドを同時に実行することができるようになる。
【００１７】
例示的な実施形態におけるパイプライン化された命令は、ロード／格納命令、演算論理ユニット命令、整数乗算命令、ベクトル乗算命令、およびベクトル乗算およびリダクション命令を含む。
【００１８】
本発明の他の態様によれば、ベクトル乗算およびリダクション命令は、プロセッサのスレッド総数より多い複数のステージを用いてパイプライン化される。たとえば、ベクトル乗算およびリダクション命令は、命令デコードステージ、ベクトルレジスタファイル読出しステージ、少なくとも２つの乗算ステージ、少なくとも２つの加算ステージ、アキュムレータ読出しステージ、複数のリダクションステージ、およびアキュムレータライトバックステージを含めた少なくとも１１個のステージを有するパイプラインを含むことができる。アキュムレータ読出しステージは、他のステージ、たとえば加算ステージと組み合わせてもよい。それぞれのベクトル乗算およびリダクション命令用の各パイプラインは、複数のパイプラインステージだけ互いにシフトすることができる。
【００１９】
本発明は、例示的な実施形態において、従来技法に対していくつかの重要な利点をもたらす。たとえば、従来技法を用いて得られるものより高度の同時処理が得られる。また、計算結果が、同じスレッドからの次の命令によって必要となる前に、適切なレジスタファイルに書き戻されることが保証されるので、依存関係チェックおよびバイパスハードウェアが不要になる。さらに、この技法はプロセッサの消費電力を制限するのに役立つ。
【発明を実施するための最良の形態】
【００２０】
マルチスレッドプロセッサの例に関連して、本発明を説明する。しかし、本発明は示された具体的な構成が必要ではなく、他のタイプのディジタルデータプロセッサおよび付随する処理回路を用いて実施できることが理解されるべきである。
【００２１】
ここで説明する所与のプロセッサは、１つまたは複数の集積回路の形で実施することができる。
【００２２】
本発明は、例示的な実施形態において、マルチスレッドプロセッサでの使用に適したパイプライン技法を提供する。この技法を用いて、複数のスレッドからの複数の命令を、効率の良い形で、同時に実行することができる。以下に詳細に述べられるように例示的な実施形態では、低電力動作を保ったままで同時実行を得るために、可変長パイプライン、スタガ実行、および循環型開始実行が用いられる。例示的な実施形態は、従来の手法を用いて得られるものより高度の同時処理が得られる。
【００２３】
図３は、パイプライン化された実行によって生じる「バブル」を除去する、マルチスレッドパイプラインの例を示す。ここでの前の例のように、説明を簡単明瞭にするために、この例では発行される命令はそれぞれ、同じ４つのパイプラインステージ、すなわち、ＩＦ、ＲＤ、ＥＸ、およびＷＢを含むものとする。さらに、スレッドが３つあり、したがって命令を順次発行するハードウェアスレッドユニットすなわち「コンテキスト」が３つあるものとする。通常のマルチスレッドプロセッサの実装形態では一般に、所与のスレッドは、ハードウェアとしてだけでなくソフトウェアとしても見ることができる。したがって所与のスレッドに関連する具体的なプロセッサハードウェアは、ここではより詳細にはハードウェアスレッドユニット、または単に「コンテキスト」と呼ぶ。
【００２４】
この例では、まず整数加算命令ａｄｄｉ  ｒ０，ｒ２，８が、最初のクロックサイクルで、第１のコンテキストによって発行される。他の２つのコンテキストは、それぞれの後続のクロックサイクルで、命令を発行する。それぞれのコンテキストが命令を発行するには、合計３つのクロックサイクルを要する。第４のクロックサイクルで、第１のコンテキストが、もう１つの命令、すなわち整数乗算命令ｍｕｌｉ  ｒ８，ｒ０，４を発行する。
【００２５】
より具体的には、サイクル１で、ａｄｄｉ命令のためにスレッド１のＩＦステージが実行される。サイクル２では、スレッド１のＲＤステージが実行されるのと同時に、スレッド２のＩＦステージが実行される。サイクル３では、スレッド３のＩＦステージが実行され、スレッド２のＲＤステージが実行され、かつスレッド１のＥＸステージが実行される。サイクル４では、ｍｕｌｉ命令のスレッド１のＩＦステージが、ａｄｄｉ命令のＷＢステージと同時に実行される。同時に、スレッド２のＥＸステージが実行され、かつスレッド３のＲＤステージが実行される。
【００２６】
この例から、同じスレッドおよび異なるスレッドからの複数の命令がオーバラップされ、同時に実行されることがわかる。またａｄｄｉ命令の結果がｍｕｌｉ命令によって必要であるにもかかわらず、パイプライン中にはバブルがないことがわかる。したがって図３の例は、適切に構成されたパイプラインおよび十分な数のスレッドによって、サイクルごと、コンテキストごとに１つの命令が発行されるだけであるにもかかわらず、すべてのハードウェアコンテキストが同時に実行され得ることを示している。具体的なスレッドおよびパイプラインステージの数は、説明のためだけのものであり、好ましい実装形態を反映するものではない。当業者には、ここで得られる教示により、特定の応用例に対するスレッドおよびパイプラインステージの適切な数を容易に決定することができるであろう。
【００２７】
前に示したように本発明は、マルチスレッドプロセッサ内に有利に実施することができる。本発明を実施することができるよりマルチスレッドプロセッサのより具体的な例は、本願の譲受人に譲渡された、２００２年１０月１１日出願の「Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｗｉｔｈ  Ｅｆｆｉｃｉｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ  Ｆｏｒ  Ｃｏｎｖｅｒｇｅｎｃｅ  Ｄｅｖｉｃｅ  Ａｐｐｌｉｃａｔｉｏｎｓ」という名称の米国特許出願第１０／２６９，３７２号に記載されており、それを参照により本明細書に組み込む。このマルチスレッドプロセッサは、ＲＩＳＣ（登録商標）ベース制御コード、ＤＳＰコード、Ｊａｖａ（登録商標）コード、およびネットワーク処理コードを実行するように構成することができる。これには、単一命令多重データ（ＳＩＭＤ）ベクトル処理ユニット、リダクションユニット、および長命令語（ＬＩＷ）複合命令実行が含まれる。この例示のマルチスレッドプロセッサに用いるのに適したスレッディングおよびパイプライン化技法は、本願の譲受人に譲渡された、２００２年１０月１１日出願の「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｔｏｋｅｎ  Ｔｒｉｇｇｅｒｅｄ  Ｍｕｌｔｉｔｈｒｅａｄｉｎｇ」という名称の米国特許出願第１０／２６９，２４５号で、米国特許第６，８４２，８４８号として発行されたものに記載されており、同特許を参照により本明細書に組み込む。
【００２８】
本発明は、他のマルチスレッドプロセッサ、またはより一般に他のタイプのディジタルデータプロセッサ内に実施することができる。次に、このような他のプロセッサについて図４を参照して説明する。
【００２９】
図４は、リダクションユニット４０２、およびアキュムレータレジスタファイル４０６を組み込んだマルチスレッドプロセッサ４００の例を示す。プロセッサ４００は、米国特許出願第１０／２６９，３７２号に記載されているものと概ね同様であるが、上に引用した米国特許出願第１０／８４１，２６１号に記載のように構成されたリダクションユニット４０２と、アキュムレータレジスタファイル４０６が組み込まれている。
【００３０】
マルチスレッドプロセッサ４００は、要素の中でも、マルチスレッドキャッシュメモリ４１０、マルチスレッドデータメモリ４１２、命令バッファ４１４、命令デコーダ４１６、レジスタファイル４１８、およびメモリ管理ユニット（ＭＭＵ）４２０を含む。マルチスレッドキャッシュ４１０は、複数のスレッドキャッシュ４１０−１、４１０−２、４１０−Ｎを含み、ただしＮは一般にマルチスレッドプロセッサ４００によってサポートされているスレッドの数を示し、この具体的な例では、Ｎ＝４で与えられる。もちろん、他のＮの値を用いてもよく、当業者には容易に明らかであろう。
【００３１】
したがって各スレッドは、マルチスレッドキャッシュ４１０内で、それに関連付けられた対応するスレッドキャッシュを有する。同様に、データメモリ４１２は、図示のようにデータメモリ４１２−１、４１２−２、４１２−Ｎとして示されたＮ個の異なるデータメモリインスタンスを含む。
【００３２】
マルチスレッドキャッシュ４１０は、ＭＭＵ４２０を介してプロセッサ４００の外部のメインメモリ（図示せず）とのインタフェースを有する。ＭＭＵ４２０は、キャッシュ４１０と同様に、プロセッサによってサポートされるＮ個のスレッドのそれぞれのために別々のインスタンスを含む。ＭＭＵ４２０は、メインメモリからの適切な命令が、マルチスレッドキャッシュ４１０にロードされるのを確実にする。
【００３３】
図では接続が明示されていないが、データメモリ４１２はまた、上記の外部メインメモリに直接接続される。データメモリ４１２にはまた、データバッファ４３０が付随する。
【００３４】
一般に、マルチスレッドキャッシュ４１０は、マルチスレッドプロセッサ４００によって実行されるべき命令を格納するのに用いられ、データメモリ４１２は、命令が作用する対象となるデータを格納する。命令は、命令デコーダ４１６によってマルチスレッドキャッシュ４１０から取り出され、デコードされる。以下に説明するように、命令デコーダ４１６は、命令タイプに応じて、プロセッサ内の様々な他のユニットへ所与の命令または関連する情報を送ることができる。
【００３５】
プロセッサ４００は、ブランチ命令待ち行列（ＩＱ）４４０、およびプログラムカウンタ（ＰＣ）レジスタ４４２を含む。プログラムカウンタレジスタ４４２は、各スレッド用に１つのインスタンスを含む。ブランチ命令待ち行列４４０は、命令デコーダ４１６から命令を受け取り、プログラムカウンタレジスタ４４２と連動して、図ではキャリー伝播加算器（Ｃａｒｒｙ−Ｐｒｏｐａｇａｔｅ  Ａｄｄｅｒ：ＣＰＡ）を含む加算器ブロック４４４に入力を供給する。要素４４０、４４２、および４４４は全体で、プロセッサ４００のブランチユニットを構成する。図には示されていないが、プロセッサ４００内に補助レジスタを含むことができる。
【００３６】
レジスタファイル４１８は、整数の結果の一時的な記憶をもたらす。命令デコーダ４１６から整数命令待ち行列（ＩＱ）４５０に送られた命令はデコードされ、それぞれのスレッド用に別個のインスタンスを含むように図示されているオフセットユニット４５２を用いることにより、正しいハードウェアスレッドユニットが選択される。オフセットユニット４５２は、レジスタファイルのアドレスに明示ビットを挿入し、独立のスレッドのデータが損なわれないようにする。所与のスレッドに対して、これらの明示ビットは、たとえば対応するスレッド識別子を含むことができる。
【００３７】
図に示されるように、レジスタファイル４１８は、入力レジスタＲＡおよびＲＢに結合され、その出力は、加算器を含むことができる演算論理ユニット（ＡＬＵ）ブロック４５４に結合される。入力レジスタＲＡおよびＲＢは、命令パイプライン化を実施するのに使用される。ＡＬＵブロック４５４の出力は、データメモリ４１２に結合される。
【００３８】
レジスタファイル４１８、整数命令待ち行列４５０、オフセットユニット４５２、要素ＲＡおよびＲＢ、ならびにＡＬＵブロック４５４は、全体で例示の整数ユニットを構成する。
【００３９】
プロセッサ４００内で実行可能な命令タイプは、ブランチ、ロード、格納、整数、およびベクトル／ＳＩＭＤ命令タイプを含む。所与の命令がブランチ、ロード、格納、または整数演算を指定しない場合は、それはベクトル／ＳＩＭＤ命令である。その他の命令タイプを用いる、あるいは代替として用いることもできる。整数、およびベクトル／ＳＩＭＤ命令タイプは、ここではより一般的にそれぞれ、整数、およびベクトル命令タイプと呼ぶものの例である。
【００４０】
ベクトルＩＱ４５６は、命令デコーダ４１６から送られるベクトル／ＳＩＭＤ命令を受け取る。対応するオフセットユニット４５８は、それぞれのスレッド用に別個のインスタンスを有するように図示されており、独立のスレッドデータが損なわれないことを確実にするために適切なビットを挿入する。
【００４１】
プロセッサ４００のベクトルユニット４６０は、Ｎ個の異なる並列部分に分離され、同様に分割されたベクトルファイル４６２を含む。ベクトルファイル４６２は、ＶＲ００からＶＲ３１として示される３２個のレジスタを含む。ベクトルファイル４６２は、それがベクトル／ＳＩＭＤ命令タイプに対して作用する点を除いて、レジスタファイル４１８とほぼ同じ目的で働く。
【００４２】
典型的には、ベクトルユニット４６０は、ベクトル命令待ち行列４５６、オフセットユニット４５８、ベクトルファイル４６２、ならびにそれらに関連する演算および記憶要素を含む。
【００４３】
ベクトルユニット４６０の動作は、以下の通りである。小数または整数いずれかのデータタイプとして符号化されたベクトル／ＳＩＭＤデータブロックは、ベクトルファイル４６２から読み出され、構造上可視のレジスタＶＲＡ、ＶＲＢ、ＶＲＣに格納される。フローは、そこから、ベクトル／ＳＩＭＤデータの並列同時乗算を実行する乗算器（ＭＰＹ）を通って進む。キャリースキップ加算器（ＣＳＡ）、およびＣＰＡを含む加算器ユニットは、追加の算術演算を行うことができる。たとえば、当業者には理解されるように、ベクトルレジスタファイルからのアキュムレータ値への加算に１つまたは複数のＣＳＡを用いることができ、乗算動作を完了するための最後の加算を行うために１つまたは複数のＣＰＡを用いることができる。計算結果は、結果レジスタ４６４に格納され、リダクションユニット４０２に入力オペランドとして供給される。リダクションユニット４０２は、生成される合計結果が、各動作が直列に実行された場合に得られるものと同じになるように、各入力オペランドを合計する。リダクションされた合計は、さらに処理するために、アキュムレータレジスタファイル４０６に格納される。
【００４４】
ベクトル内積を行うとき、ＭＰＹブロックは４つの乗算を並列に行い、ＣＳＡおよびＣＰＡユニットは、追加の加算演算を行うか、あるいは単に乗算結果を記憶するために結果レジスタ４６４に転送し、リダクションユニット４０２は、乗算結果をアキュムレータレジスタファイル４０６に格納されたアキュムレータ値と共に合計する。次いで、リダクションユニットによって発生された結果は前述のように、次の繰り返しに用いるためにアキュムレータレジスタファイルに格納される。
【００４５】
この例ではアキュムレータレジスタファイル４０６は、ＡＣＣ００〜ＡＣＣ１５として示される合計１６個のアキュムレータレジスタを含む。
【００４６】
マルチスレッドプロセッサ４００は、本願の譲受人に譲渡された、２００２年１０月１１日出願の「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｒｅｇｉｓｔｅｒ  Ｆｉｌｅ  Ｐｏｒｔ  Ｒｅｄｕｃｔｉｏｎ  ｉｎ  ａ  Ｍｕｌｔｉｔｈｒｅａｄｅｄ  Ｐｒｏｃｅｓｓｏｒ」という名称の米国特許出願第１０／２６９，３７３号に記載されているような、レジスタファイルへのスレッドベースのアクセス技法を利用することができ、それを参照により本明細書に組み込む。
【００４７】
マルチスレッドプロセッサ４００は、前に引用した米国特許出願第１０／８４１，２６１号に記載されているような、ベクトル内積、およびその他のタイプの並列ベクトル乗算およびリダクション演算を行う場合の使用に適切である。
【００４８】
本発明の例示的な実施形態では、トークントリガスレッディング（ｔｏｋｅｎ  ｔｏｒｒｉｇｅｒ  ｔｈｒｅａｄｉｎｇ）として知られる手法が利用される。トークントリガスレッディングは、前に引用した米国特許第６，８４２，８４８号として発行された米国特許出願第１０／２６９，２４５号に記載されている。通常、トークントリガスレッディングは、マルチスレッドプロセッサの複数のスレッドのそれぞれに異なるトークンを割り当てる。たとえば、トークントリガスレッディングは、現在のプロセッサクロックサイクルと関連して、後続のクロックサイクルにおいて命令を発行することが可能になる、プロセッサのスレッドの特定の１つを識別するためにトークンを利用することができる。
【００４９】
図５は、スレッド数Ｎが８であるマルチスレッドプロセッサの実装形態用のトークントリガスレッディングの例を示す。一般に、すべてのスレッドは同時に動作し、それぞれがスレッドキャッシュ１１０およびデータメモリ１１２の対応するインスタンスにアクセスする。図５に示されるように、８個のスレッドは、スレッド０、スレッド１、スレッド２、スレッド７として示され、リング状に直列に相互接続されて示されている。
【００５０】
図５のトークントリガスレッディングによれば、すべてのハードウェアスレッドユニットすなわちコンテキストは同時に命令を実行することが可能であるが、プロセッサの特定のクロックサイクル内では、１つのコンテキストだけが命令を発行することができる。言い換えれば、すべてのコンテキストは同時に実行するが、特定のクロックサイクルでは１つのコンテキストだけがアクティブとなる。したがって、合計Ｃ個のコンテキストがあれば、すべてのコンテキストから命令を発行するには、Ｃ個のクロックサイクルが必要になる。各クロックサイクルでは、コンテキストの１つが命令を発行し、次に命令を発行するスレッドはトークンによって示される。
【００５１】
図５の例では、トークンは順次式またはラウンドロビン状（ｒｏｕｎｄ−ｒｏｂｉｎ  ｍａｎｎｅｒ）に配列され、各コンテキストは順次的に命令を発行する。しかし、次に命令を発行するコンテキストを示すトークンは、偶数／奇数の交互パターンなど他のパターンを用いて構成することもできる。また上記のように、本発明と共に他のタイプのスレッディングを用いることもできる。
【００５２】
例示的な実施形態ではトークントリガスレッディングが用いられているが、本発明はこの特定のタイプのマルチスレッディングが必要ではなく、他のタイプのマルチスレッディング技法を用いることができる。
【００５３】
図６は、本発明によるマルチスレッドプロセッサ４００内で、例としての命令機能がパイプライン化される様子を示す。本発明の例示的な実施形態では、好ましくは、このタイプのパイプライン化が前述のトークントリガスレッディングと併せて用いられるが、本発明を実施するのに、他の数多くのパイプライン化とスレッディングの組合せを用いてもよいことが理解されよう。
【００５４】
図は、ロード／格納（Ｌｄ／Ｓｔ）、演算論理ユニット（ＡＬＵ）、整数乗算（Ｉ＿Ｍｕｌ）、ベクトル乗算（Ｖ＿Ｍｕｌ）、ならびにベクトル乗算およびリダクション（Ｖ＿Ｍｕｌ  Ｒｅｄｕｃｅ）命令）に対するパイプラインの例を示す。この実装形態では、３個までのパイプラインを同時に開始することができ、５個すべてが同時に様々な実行フェーズをもつことができる。
【００５５】
Ｌｄ／Ｓｔパイプラインは、ステージ０〜ステージ８として示される９個のステージを有する。第１のステージ、ステージ０（Ｉｎｓｔ  Ｄｅｃ）では、命令が取り出され、デコードされる。このステージは５個すべてのパイプラインに共通であり、命令がどの待ち行列に送られるかを決定する。ステージ１（ＲＦ  Ｒｅａｄ）では、レジスタファイルのオペランドが読み出される。これは、ロードまたは格納動作に対する基準アドレスとなる。格納命令の場合は、格納されるべきデータも読み出される。ステージ２（Ａｇｅｎ）では、即値がアドレスに加算され、完全なアドレスが発生される。ステージ３（Ｘｆｅｒ）では、計算されたアドレスがメモリサブシステムに転送される。ステージ４（Ｉｎｔ／Ｅｘｔ）では、メモリアクセスが、内部メモリに対するものか外部メモリに対するものかが決定される。ステージ５〜７（Ｍｅｍ０、Ｍｅｍ１、Ｍｅｍ２）では、メモリから値が読み出されるか、メモリに値が書き込まれる。ステージ８（ＷＢ）では、ロード命令でメモリから読み出された値がレジスタファイルに書き込まれる。
【００５６】
ＡＬＵパイプラインは、ステージ０〜ステージ６として示される７個のステージを有する。Ｌｄ／Ｓｔパイプラインの場合のように、第１のステージ、ステージ０（Ｉｎｓｔ  Ｄｅｃ）では、すべての命令が取り出され、デコードされる。ステージ１（Ｗａｉｔ）では、ウェイトサイクルが挿入される。これにより、Ｌｄ／ＳｔおよびＡＬＵハードウェアが、同じレジスタファイルの読出しポートを共有できるようになる。後続のステージ、ステージ２（ＲＦ  Ｒｅａｄ）では、演算機能用のオペランドがレジスタファイルから読み出される。ステージ３および４（Ｅｘｅｃ１、Ｅｘｅｃ２）では、演算（たとえば、加算、比較、シフトなど）の結果が計算される。ステージ５（Ｘｆｅｒ）では、結果がレジスタファイルに転送される。ステージ６（ＷＢ）では、結果がレジスタファイルに書き戻される。
【００５７】
Ｉ＿Ｍｕｌパイプラインは、ＡＬＵパイプラインと同様であり、これらは共通の構成上のリソースを共有する。図は、Ｉ＿Ｍｕｌパイプラインでの追加のステージ（Ｅｘｅｃ３）を除いて、各パイプラインステージは同一であることを示している。これにより、乗算結果を計算するための追加のサイクルが利用可能になる。
【００５８】
Ｖ＿Ｍｕｌパイプラインは、先に述べたＡＬＵおよびＩ＿Ｍｕｌパイプラインとは異なる構成上のリソースを使用する。したがってＶ＿Ｍｕｌパイプラインは、リソース競合なしにそれらの命令と同時に実行することができる。ステージ０（Ｉｎｓｔ  Ｄｅｃ）は、すべての命令と同様であり、デコードされた命令を正しいパイプラインへ送ることができるようにする。ステージ１（ＶＲＦ  Ｒｅａｄ）では、ベクトルレジスタファイルのオペランドが読み出される。ステージ２〜５（ＭＰＹ１、ＭＰＹ２、Ａｄｄ１、Ａｄｄ２）は、複数要素ベクトル演算を行う。乗算結果をキャリーセーブ形式から２の補数形式に戻すために、２つの加算ステージがある。さらに、各ベクトルが簡単な演算のみを要するならば、これは各加算ステージで行うことができる。ステージ６（Ｘｆｅｒ）では、結果がベクトルレジスタファイルに戻され、ステージ７（ＷＢ）では結果が書き戻される。
【００５９】
Ｖ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインは、追加のリダクション演算が行われることを除いて、Ｖ＿Ｍｕｌパイプラインと同様である。リダクションはアキュムレータオペランドと共に、４個のベクトル要素の積をとり、単一のスカラー要素へのリダクションを行う。通常これは、すべての積をアキュムレータに加算する、あるいはすべての積をアキュムレータから減算するものであるが、他の組合せも可能である。Ｖ＿ＭｕｌパイプラインとＶ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインは、ステージ５までは同じである。ステージ５（Ａｄｄ２、ＡＣＣ  Ｒｅａｄ）では、追加の構成上のアキュムレータレジスタファイルが読み出される。この値は、ベクトル要素と演算的に組み合わされ、単一のスカラーにリダクションされる。４個のステージ（Ｒｅｄｕｃｅ１、Ｒｅｄｕｃｅ２、Ｒｅｄｕｃｅ３、Ｒｅｄｕｃｅ４）がこのリダクションに充てられ、次いでステージ１０（ＡＣＣ  ＷＢ）では、このスカラー値がアキュムレータレジスタファイル（すなわち、ベクトルレジスタファイルとは異なる構成上の空間）に書き戻される。
【００６０】
図２のように、単一のスレッドが各サイクルで命令を発行したならば、パイプライン中にバブルが誘起される。しかし、１つのタイプのパイプラインだけがある図３の簡略化されたケースのように、例示的な実施形態では５個すべてのプロセッサパイプラインが、バブルを避けるためにインタリーブされマルチスレッド化される。図５に示されるトークントリガスレッディングによれば、各ハードウェアスレッドユニットは、３個までの命令を発行する。これにより、どのスレッドも停止せず、すべてのスレッドがデッドロックなしに完了することになる。
【００６１】
前述のように、この実装形態では、５個すべてのパイプラインが、複数のハードウェアスレッドユニットからの命令に対して同時にアクティブとなり得る。これにより、パイプライン中の潜在的なバブルが、他のスレッドユニットからの作業によって埋められる。
【００６２】
Ｖ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインの相次ぐリダクション動作はバブルを生じないので、所与のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインは、Ｖ＿Ｍｕｌパイプラインから局所的にシフトできることに留意すべきである。Ｖ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインの所要時間が、ハードウェアスレッドユニットの数（この実装形態では８）より長いので、このようなシフトによってパイプラインバブルが生じ得るように見える。言い換えれば、パイプラインの計算サイクル（Ｖ＿Ｍｕｌ  Ｒｅｄｕｃｅにでは１１クロックサイクル）は、発行サイクル（各スレッドは、８クロックサイクルごとに発行するようになる。）より長い。実際には、アキュムレータレジスタファイルの読出しフェーズが、Ｖ＿Ｍｕｌパイプラインの計算からシフトされるので、これは生じない。
【００６３】
図７は、発行サイクルよりも長い計算サイクルを可能にするために、複数のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインを、互いに対してシフトすることができる様子を示している。図は、第１のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅ命令のサイクル５から始まっていることに注意されたい。この実装形態では８個のスレッドユニットがあるので、次のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅ命令はサイクル８で発行される。図からわかるように、アキュムレータレジスタファイルはサイクル１０で書き戻される。しかし、各オペランドはサイクル１３まで、第２の命令によって読み出されない。第２のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインは、第１のＶ＿Ｍｕｌ  Ｒｅｄｕｃｅパイプラインから局所的にシフトされたと考えることができる。これにより、パイプライン中にバブルを発生せずに、実行フェーズを長くすることが可能になる。
【００６４】
上述の例示的な実施形態は、有利に、スレッドごとの多重同時パイプラインを可能にし、高度にマルチスレッド化されたパイプラインでのパイプラインシフトを提供する。これはまた、同じスレッドからの次の命令によって必要となる前に、結果がレジスタファイルに書き戻されることが保証されるので、依存関係チェック、およびバイパスハードウェアが不要になる。
【００６５】
図に示された特定のプロセッサ、マルチスレッディング、パイプライン化、およびシフトの構成は、例示のためのみに示されたものであり、当業者には明らかなように、明示されていない追加要素または代替要素を含めることができることに留意されたい。
【００６６】
また、本発明は、図４に示される特定のマルチスレッドプロセッサ構成は必要でないことが強調されるべきである。本発明は、その他の多種多様なマルチスレッドプロセッサ構成中で実施することができる。
【００６７】
したがって、上述の本発明の実施形態は、例示のみのためであり、当業者には添付の特許請求の範囲の範囲内で、数多くの代替実施形態が明らかとなるであろう。たとえば、図４に示される特定のハードウェアスレッドユニット、命令デコーダ、および実行ユニットは、他の実施形態において変更することができ、本発明がこのような要素のいかなる特定のタイプまたは構成が必要であると解釈されるべきではない。また、上記のように、パイプライン構成、スレッドのタイプ、および命令形式は、所与の応用例に対する具体的な必要性に適合させるために変更することができる。
【図面の簡単な説明】
【００６８】
【図１】図１Ａ及び図１Ｂは、従来の手法を用いた命令実行の例を示す図である。
【図２】従来のプロセッサのパイプラインにおいて、停止が起き得る様子を示す図である。
【図３】本発明の一実施形態における、マルチスレッドのパイプライン化されたプロセッサのパイプラインの例を示す図である。
【図４】本発明を実施することができる、マルチスレッドプロセッサの例を示す図である。
【図５】本発明の一実施形態において使用することができる、トークントリガマルチスレッディングの例を示す図である。
【図６】本発明の一実施形態における、いくつかのパイプラインの例を示す図である。
【図７】本発明の一実施形態により、発行サイクルよりも長い計算サイクルが可能になるように、パイプラインをシフトできる様子を示す図である。
【図１】
2007533007.tif 000003
【図２】
2007533007.tif 000004
【図３】
2007533007.tif 000005
【図４】
2007533007.tif 000006
【図５】
2007533007.tif 000007
【図６】
2007533007.tif 000008
【図７】
2007533007.tif 000009
【国際調査報告】
2007533007.tif 000010
2007533007.tif 000011