(57)【要約】      （修正有）【課題】スレッド性能の精細な制御のために、マルチスレッドプロセッサのディスパッチ時にスレッドをブロックする方法、コンピュータプログラム、および装置を提供する。【解決手段】複数のスレッドは、プロセッサ内のパイプラインを共用使用する。したがって、１つのスレッドの命令に対する長い待ち時間の条件は、パイプラインを共用使用するスレッドのすべてを停止させることができる。ディスパッチブロック信号命令は、ディスパッチ時に長い待ち時間の条件を含むスレッドをブロックする。ブロックの長さは、待ち時間の長さと一致するため、長い待ち時間の条件が解除された後に、パイプラインは、ブロックされたスレッドから命令をディスパッチできる。ディスパッチ時に１つのスレッドをブロックすることにより、プロセッサは、ブロックの間、他のスレッドから命令をディスパッチできる。【選択図】図４
2006351008.tif 000002
【特許請求の範囲】
【請求項１】
マルチスレッドプロセッサの、複数のスレッドにより共用使用されるパイプラインのディスパッチ時点において、１つのスレッドをブロックする方法であって、
前記パイプライン内で、第１スレッドについての長い待ち時間の条件を検知するステップと、
前記長い待ち時間の条件に関係する正確な待ち時間を決定するステップと、
ディスパッチブロック信号命令を生成するステップと、
前記ディスパッチブロック信号命令に呼応して、所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックするステップと、
前記ブロックの間、前記パイプラインの他のブロックされていないスレッドから命令をディスパッチするステップと、
前記ブロックの後に、前記パイプラインの前記ブロックされていないスレッドのすべてから命令をディスパッチするステップとを有する
方法。
【請求項２】
前記方法が、コンピュータシステムまたはデータ処理システムにおいて用いられることを特徴とする請求項１に記載の方法。
【請求項３】
前記長い待ち時間の条件が、非パイプライン動作または従属関係であることを特徴とする請求項１に記載の方法。
【請求項４】
正確な待ち時間を決定する前記ステップが、さらに、
前記パイプライン内の可能な各長い待ち時間の条件に対する前記待ち時間を決定するステップと、
前記マルチスレッドプロセッサへの各待ち時間に対応するサイクル時間をプログラミングするステップとを含むことを特徴とする請求項１に記載の方法。
【請求項５】
ディスパッチブロック信号命令を生成する前記ステップが、さらに、前記待ち時間と一致する所定量のサイクルの間、前記第１スレッドをブロックするディスパッチブロック信号命令を生成するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記マルチスレッドプロセッサが、前記第１スレッドに前記ディスパッチブロック信号命令を書き加えることを特徴とする請求項５に記載の方法。
【請求項７】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する前記所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックする、１つのＮｏｐ命令であることを特徴とする請求項６に記載の方法。
【請求項８】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する前記所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックする、修正されたＯＲ命令であることを特徴とする請求項６に記載の方法。
【請求項９】
前記パイプラインが、命令パイプラインまたは実行パイプラインであることを特徴とする請求項１に記載の方法。
【請求項１０】
マルチスレッドプロセッサの、複数のスレッドにより共用使用されるパイプラインのディスパッチ時点において、１つのスレッドをブロックするコンピュータプログラムであって、前記コンピュータプログラムは、
前記パイプライン内で、第１スレッドについての長い待ち時間の条件を検知するコンピュータコードと、
前記長い待ち時間の条件に関係する正確な待ち時間を決定するコンピュータコードと、
ディスパッチブロック信号命令を生成するコンピュータコードと、
前記ディスパッチブロック信号命令に呼応して、所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックするコンピュータコードと、
前記ブロックの間、前記パイプラインの他のブロックされていないスレッドから命令をディスパッチするコンピュータコードと、
前記ブロックの後に、前記パイプラインの前記ブロックされていないスレッドのすべてから命令をディスパッチするコンピュータコードとを含む
コンピュータプログラム。
【請求項１１】
前記長い待ち時間の条件が、非パイプライン動作または従属関係であることを特徴とする請求項１０に記載のコンピュータプログラム。
【請求項１２】
正確な待ち時間の決定が、さらに、
前記パイプライン内の可能な各長い待ち時間の条件に対する前記待ち時間を決定するコンピュータコードと、
前記マルチスレッドプロセッサへの各待ち時間に対応する前記サイクル時間をプログラミングするコンピュータコードとを含むことを特徴とする請求項１０に記載のコンピュータプログラム。
【請求項１３】
ディスパッチブロック信号命令の生成が、さらに、
前記待ち時間と一致する所定量のサイクルの間、前記第１スレッドをブロックするディスパッチブロック信号命令を生成し、
前記第１スレッドに前記ディスパッチブロック信号命令を書き加えるコンピュータコードを含むことを特徴とする請求項１０に記載のコンピュータプログラム。
【請求項１４】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する前記所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックする、１つのＮｏｐ命令であることを特徴とする請求項１３に記載のコンピュータプログラム。
【請求項１５】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックする、修正されたＯＲ命令であることを特徴とする請求項１３に記載のコンピュータプログラム。
【請求項１６】
前記パイプラインが、命令パイプラインまたは実行パイプラインであることを特徴とする請求項１０に記載のコンピュータプログラム。
【請求項１７】
マルチスレッドプロセッサの、複数のスレッドにより共用使用されるパイプラインのディスパッチ時点において、１つのスレッドをブロックする装置であって、
少なくとも複数のスレッドから命令をディスパッチするように構成された、前記パイプラインに接続されたディスパッチメカニズムと、
少なくとも、
前記命令パイプライン内で、第１スレッドについての長い待ち時間の条件を検知し、
前記長い待ち時間の条件に関係する前記待ち時間を決定し、
前記待ち時間と一致する所定量のサイクルの間、前記ディスパッチ時点において前記第１スレッドをブロックするディスパッチブロック信号命令を生成し、
前記ディスパッチブロック信号命令を前記パイプラインに書き加えるように構成されたコンパイラと、
前記ディスパッチメカニズムと、少なくとも、
前記ディスパッチブロック信号命令に呼応して、前記第１スレッドについての命令の前記ディスパッチをブロックし、
かつ前記待ち時間と一致する所定量のサイクルの後に、前記ブロックされていないスレッドのすべてについての命令の前記ディスパッチを可能とするように構成された前記コンパイラと、に接続されたディスパッチ制御ブロックと、
を含む
装置。
【請求項１８】
前記マルチスレッドプロセッサが、コンピュータシステムまたはデータ処理システム内にあることを特徴とする請求項１７に記載の装置。
【請求項１９】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する所定量のサイクルの間、前記第１スレッドをブロックする、１つのＮｏｐ命令であることを特徴とする請求項１７に記載の装置。
【請求項２０】
前記ディスパッチブロック信号命令が、前記待ち時間と一致する所定量のサイクルの間、前記第１スレッドをブロックする、修正されたＯＲ命令であることを特徴とする請求項１７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マルチスレッドプロセッサのブロックメカニズムに関し、特に、スレッド性能の精細な制御を可能とするディスパッチブロックメカニズムに関する。
【背景技術】
【０００２】
マルチスレッド技術は、同じ単一の処理コア上で２つ以上の単独のスレッドが実行処理することを可能とする。スレッドは、プログラムの一部、または独立に実行処理することができる命令のグループである。したがって、単一スレッドの命令のグループは、プログラム順序で実行処理しなければならないのに対して、別個のスレッドの命令のグループは、独立に、および並行して実行処理することができる。プロセッサ内の複数のスレッドは、プロセッサがそのリソースをよりよく利用することを可能とする。マルチスレッド技術は、単一処理装置が、ソフトウェアから見て２台以上のプロセッサのように見えることを可能とする。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
各スレッドは、それ自身のリソース上で独立に動作することが理想的であろう。各スレッドは、それ自身の命令パイプラインおよび命令制御部、実行パイプラインおよび実行部などを利用するであろう。実際には、チップ上のリソースの領域および量が制限されているため、この実施形態は実行可能ではない。したがって、異なるスレッドは、いくつかのリソースを共用使用しなければならない。例えば、複数のスレッドが、同一命令発行部または実行パイプラインを共用使用できる。マルチスレッドプロセッサにおいては、リソースの共用使用、命令従属関係の取扱い、およびリソースへのアクセス優先度の決定に関する発行は、リソースの「障害」を生み出すため、性能にとっての問題となる。
【０００４】
スレッド間のリソースの共用使用の問題は、１つのスレッドの長い待ち時間（レイテンシ：ｌａｔｅｎｃｙ）を有する命令が、他のスレッドの命令の実行処理を停止させうるということである。例えば、スレッド１およびスレッド２は、同一命令発行部を共用使用する。命令制御部を共用使用しているため、スレッド１が命令制御部において多数サイクルの間停止しているとき、スレッド２もまた多数サイクルの間停止されるであろう。スレッド１は、実行処理される非パイプライン動作のために、または多数のサイクルが消去されるのを待つ従属関係のために、停止しているかもしれない。したがって、スレッド１から独立しているスレッド２は、命令を発行することができず、かつスレッド１を待たなければならない。この問題は、スレッド２の時間とリソースの無駄につながる。
【０００５】
この問題に対処する一方法は、スレッド間の発行時点を分離することである。この方法は有効な解決方法であるが、命令発行の複雑さを増加させる欠点を有するとともに、チップ上の相当な領域を要する。他の方法は、長い待ち時間の命令が検知されるとき、ディスパッチ時に命令をフラッシングすることである。この方法は、フラッシュペナルティが、命令の正確な待ち時間に適合しそうにないため、無駄なサイクルに通じ、問題が多い。同一リソースを共用使用する複数のスレッドが、サイクルを浪費することなく、真に独立に動作することを可能とする簡易システムまたは方法は、先行技術に対して著しい進歩をもたらすであろうことは明白である。
【課題を解決するための手段】
【０００６】
本発明は、マルチスレッドプロセッサのディスパッチ時にスレッドをブロックすることにより、スレッド性能の精細な制御方法、コンピュータプログラム、および装置を提供する。複数のスレッドは、プロセッサ内のパイプラインを共用使用する。したがって、１つのスレッドの命令に対する長い待ち時間の条件は、パイプラインを共用使用するスレッドのすべてを停止させることができる。長い待ち時間の条件は、非パイプライン動作または従属関係でありうる。コンパイラが、この長い待ち時間の条件を予知できると、コンパイラは、特定のスレッドをブロックするディスパッチブロック信号命令をプログラムコードに注入する。プロセッサは、この命令を検知して、命令により指示されたサイクル数の間（さらに、付加的な待ち時間が検知されるとき、ハードウェアが付加することができる任意の付加的なサイクルを加えて）、ディスパッチ時にスレッドをブロックする。ブロックの長さは、待ち時間の長さと一致するため、長い待ち時間の条件が解除された後に、パイプラインは、ブロックされたスレッドから命令をディスパッチできる。一実施例では、ディスパッチブロック信号命令は、修正されたＯＲ命令であり、他の実施例では、命令は、１つのＮｏｐ命令である。ＯＲ命令およびＮｏｐ命令は、条件の待ち時間と一致するサイクルの特定量の間、スレッドをブロックする。修正されたＯＲ命令は、プログラムの実行処理、レジスタファイル状態、メモリ状態、または入出力に影響を及ぼさず、あくまでディスパッチブロックとして動作するのみである。ディスパッチ時に１つのスレッドをブロックすることにより、プロセッサは、ブロックの間、他のスレッドから命令をディスパッチできる。これは、１つのスレッドの長い待ち時間の条件が、複数のスレッドの停止を引き起こさないことを保証し、かつ現在のスレッドが所要の正確なサイクル数の間停止されることを保証する。
【発明を実施するための最良の形態】
【０００７】
以下の議論では、多数の特定の詳細について、本発明の十分な理解を提供するために詳しく説明さている。しかしながら、当業者は、このような特定の詳細なしに、本発明を実施できることを理解するであろう。他の実例では、既知の構成要素が、不要な詳細において本発明を分かりにくくすることがないように、概略図またはブロック図で説明された。さらに、ネットワーク通信、電磁信号通信技術などに関する詳細の多くについては、このような詳細が、本発明の完全な理解を得るために必要とはみなされず、かつ当業者の理解の範囲にあるとみなされる限りにおいて省略された。
【０００８】
指摘された場合を除いて、本明細書で説明されたすべての機能は、ハードウェアまたはソフトウェア、ならびにそれらの何らかの組合せにおいて実行できる。しかしながら、好ましい実施例では、機能は、最も効果的実現を提供するために、ハードウェアにおいて実行される。あるいは、指摘された場合を除いて、コンピュータプログラムコード、ソフトウェアのようなプログラムコード、またはこのような機能を実行するようにコード化された集積回路、あるいはそれら全てまたはいくつかに従って、コンピュータまたは電子データ処理装置のようなプロセッサにより、機能を実行できる。
【０００９】
図１は、マルチスレッド機能を有するプロセッサ１００のブロック図を示す。このプロセッサは、メモリコントローラ１０２を含む。メモリコントローラ１０２は、プロセッサ１００に対する、およびプロセッサ１００からのデータおよび命令の流れを制御する。したがって、命令制御部１０４は、実行部１０６に送信される命令を発行する。メモリコントローラ１０２は、レベル２（Ｌ２）キャッシュ１０８と連動する。Ｌ２キャッシュ１０８は、命令およびデータを保存する。Ｌ２キャッシュは、命令制御部１０４および実行部１０６の個々のレベル１（Ｌ１）キャッシュと連動する。命令制御部１０４は、命令を保存するためにＬ１キャッシュ１１０を有し、実行部１０６は、データを保存するためにＬ１キャッシュ１１４を有する。命令制御部１０４は、Ｌ１キャッシュ１１０から命令を引き出し、実行部１０６は、Ｌ１キャッシュ１１４からデータを引き出し、かつＬ１キャッシュ１１４へデータを書き込む。プロセッサ１００は、図１に示されていない他の多数の構成要素を含むことができる。図１は、プロセッサの基本的な説明であり、本発明の範囲を限定するものではない。
【００１０】
図２は、複数のスレッドを収容できるプロセッサ内の命令パイプライン２００のブロック図を示す。この装置２００は、図１の命令制御部１０４内にあり、３つの個別のスレッド、スレッド０、スレッド１、およびスレッド２（図示せず）を収容する。上述したように、スレッドは、プログラム、または独立して実行処理することができる命令のグループである。命令フェッチ部２０２は、すべての３つのスレッドに対する命令をフェッチする。命令フェッチ部２０２は、優先度順に命令をフェッチする。通常、命令フェッチ部２０２は、各スレッドに命令パイプラインへの同等のアクセスを与えるために、３つのスレッドの間で順番に接続する。命令フェッチ部２０２は、これらの命令を命令バッファに伝送する。したがって、ＩＢＵＦ  ０  ２０４は、スレッド０に対する命令を保存し、ＩＢＵＦ  １  ２０６は、スレッド１に対する命令を保存し、およびＩＢＵＦ  ２  ２０８は、スレッド２に対する命令を保存する。命令バッファ２０４、２０６、および２０８は、命令をディスパッチメカニズム２１０に伝送する。図２は、３つの個別のスレッドを図示するが、この個数は任意であり、この形態の装置２００は、より大きい、またはより小さい数量のスレッドを取り扱うことができる。
【００１１】
ディスパッチメカニズム２１０は、命令パイプライン２１６にディスパッチする正しい命令を選択するマルチプレクサ（「ＭＵＸ」）である。図２は、ディスパッチメカニズム２１０としてＭＵＸを用いるが、同一の結果を達成するために、他の構成要素を実装することができる。ディスパッチメカニズム２１０は、各スレッドに命令パイプライン２１６への同等の優先度およびアクセスを与えるために、ＩＢＵＦ  ０  ２０４、ＩＢＵＦ  １  ２０６、またはＩＢＵＦ  ２  ２０８の出力の間で順番に切り換わる。ディスパッチ制御ブロック２１４は、どのスレッドがディスパッチされるかを選択する。ディスパッチ制御ブロック２１４が、修正されたＯＲ命令を検知するとき、ディスパッチ制御ブロック２１４は、ディスパッチメカニズム２１０の通常の切り換え機構を中断する。ディスパッチ後、命令は、命令パイプライン２１６をステージダウンする。命令パイプライン２１６は、図１からの実行部１０６を供給する。実行部１０６は、命令を実行処理する。この応用は、発行パイプライン、より正確に述べると、命令パイプラインに関する具体的な実施例を説明する。実施例は、リソース競合があるパイプラインの任意のポイントに適合する。例えば、実施例は実行パイプラインにも適合する。
【００１２】
具体的な実施例は、ディスパッチメカニズム２１０、ディスパッチ制御ブロック２１４、およびコンパイラ（図示せず）に関する。その結果、すべての３つのスレッドが命令パイプライン２１６を共用使用するため、スレッド０に対する停止を導く命令は、また、独立したスレッド１および２に対する停止を引き起こす。具体的な実施例は、ディスパッチブロック信号命令を用いることにより、パイプラインのディスパッチ時点（ディスパッチメカニズム２１０）においてブロックメカニズムを動作させる。コンパイラは、ディスパッチメカニズム２１０を制御し、スレッド０がディスパッチ時にブロックされている間に、スレッド１および２から命令をディスパッチできるようにする。これは、スレッド０がディスパッチ時にブロックされている間に、独立しているスレッド１および２が、命令パイプライン２１６において命令を実行処理し続けることを可能とする。このスレッド性能の精細なスレッド制御は、このマルチスレッドプロセッサに対する時間およびリソースを節約する。
【００１３】
一実施例では、コンパイラは、パイプラインに挿入される新たな形のＯＲ命令を用いることにより、これらのディスパッチブロック信号命令を実行処理する。これらの命令は、プログラム可能サイクル数の間、ディスパッチ時に特定のスレッドのすべての命令をブロックし、１つのスレッドのブロックの間、他のスレッドがディスパッチメカニズム２１０にアクセスすることを可能とする。特別の形のＯＲ命令は、ディスパッチ時点においてスレッドをブロックする以外、システムに何の影響も与えない。これらのＯＲ命令は、コンパイラに対して最良の結果を与える種々のブロック時間に、容易に復号化してかつ構成されうる。一実施例では、コンパイラは、種々の復号化された命令形態の各々に対するブロック遅延を構成できる。
【００１４】
具体的な実施例では、ディスパッチブロック信号命令は、Ｎｏｐ命令である。Ｎｏｐ命令は、プログラムの実行処理、レジスタファイル状態、メモリ状態、または入出力に影響を及ぼさない命令である。本実施例では、Ｎｏｐ命令は、ディスパッチブロックとして動作する。可変形態のＮｏｐ命令があり、その中のあるものは、スレッドをブロックせず、ただ何もなさない。システムに影響を及ぼさないようにＮｏｐ命令を設計することにより、プロセッサ１００は、ブロックを要求するためにいかなるレジスタリソースをも消費しない利点を受ける。一例として、ディスパッチ制御ブロック２１４は、１０サイクルの間、スレッド０をブロックすることが必要である。コンパイラは、１０個のＮｏｐ命令（通常の）をディスパッチでき、命令パイプライン２１６が停止することを防止する。これは、ブロックの間に、スレッド１および２がディスパッチされることを可能とする。実施例では、コンパイラは、１０サイクルの間、スレッド０を遅延させる１つの修正されたＮｏｐ命令をディスパッチする。１つの修正されたＮｏｐ命令を発行するだけで、コンパイラは、より小さいプログラムコードフットプリントを介して時間およびリソースを節約する。
【００１５】
ディスパッチメカニズム２１０に対する優先方式がある。したがって、ディスパッチメカニズム２１０は、命令パイプラインへの同等のアクセスを提供するために、スレッド０、１、および２の間で順番に切り換わる。本発明では、修正されたＮｏｐ（ＯＲ）命令は、ディスパッチメカニズム２１０が特定のスレッドを無視して、かつ他のスレッドの間で順番に切り換わるように誘導する。例えば、スレッド１についての１０サイクルに対するＮｏｐ命令は、ディスパッチメカニズム２１０が１０サイクルの間にスレッド０と２の間で順番に切り換わるようにさせる。したがって、スレッド１がディスパッチ時にブロックされている間、スレッド０および２は、排他的にディスパッチメカニズム２１０にアクセスする。
【００１６】
修正されたＯＲ命令の例として、下記のＯＲ命令は、下記のディスパッチ遅延を生じさせる。
ＯＲ  ２８，２８，２８  ／／８サイクルの間、ブロック
ＯＲ  ２９，２９，２９  ／／１０サイクルの間、ブロック
ＯＲ  ３０，３０，３０  ／／１２サイクルの間、ブロック
ＯＲ  ３１，３１，３１  ／／１６サイクルの間、ブロック
これらのサイクル数のグループは任意であり、あくまで修正されたＯＲ命令の例を提供するに過ぎない。これらの命令に対する固定されたタイミングは、ソフトウェアにプログラムされる。したがって、コンパイラが、命令パイプラインの停止による遅延に通じるであろう命令の特定のシーケンスを検知すると、コンパイラは、遅延に対処するために修正されたＯＲ命令を発行する。対応するＯＲ動作は、正確に長い待ち時間の条件と一致するか、または長い待ち時間の条件を近似できる。したがって、付加的な待ち時間が検知されるとき、ハードウェアがＯＲ命令にサイクルを付加できる。
【００１７】
図３は、マルチスレッド命令パイプライン内のこの修正されたディスパッチブロックメカニズムの使用を説明するフローチャート３００である。最初に、ステップ３０２で、命令フェッチ部２０２は命令をフェッチする。次に、ステップ３０４で、命令バッファ２０４、２０６、および２０８は命令を保存する。ステップ３０６で、ディスパッチメカニズム２１０は、ブロックされていない命令を優先度順にディスパッチする。上述したように、ディスパッチメカニズム２１０は、スレッド０、１、および２の間で順番に切り換わる。ステップ３０８で、ディスパッチメカニズム２１０は、修正されたＯＲ命令があるかどうかを判断する。修正されたＯＲ命令がないとき、ステップ３０６で、ディスパッチメカニズム２１０は、ブロックされていない命令を優先度順にディスパッチし続ける。修正されたＯＲ命令があるとき、ステップ３１２で、ディスパッチメカニズム２１０は、スレッドのディスパッチをブロックし、かつ「ＯＲ」命令の長さの間、ブロックされていない他のスレッドが命令をディスパッチすることを可能とする。したがって、複数のスレッドについての「ＯＲ」命令は、ディスパッチメカニズム２１０に、同時に複数のスレッドをブロックさせうる。この形態のブロッキングは、一度に、１つのスレッドに限定されない。
【００１８】
図４は、マルチスレッド命令パイプラインの１つのスレッドをブロックするために用いられる、修正されたＯＲメカニズムの具体例を説明するフローチャート４００である。この具体例は、浮動加算命令（「ＦＡＡ」）を含み、ＦＡＡに従属する他の浮動加算命令（「ＦＡＢ」）がその後に続く。これら２つの命令は、図２からのスレッド０に関する。この具体例では、スレッド０は、実行処理するか、または結果を与えるために１０サイクルを要する。したがって、従属動作ＦＡＢは、従属関係がクリアになるのを待つために、命令パイプライン２１６において１０サイクルの停止をしなければならない。したがって、コンパイラは、スレッド０についての従属浮動加算命令が後続する浮動加算命令は、ＯＲ命令ＯＲ２９，２９，２９に対応することを知らなければならない。コンパイラは、このＯＲ命令をスレッド０に書き加える。これは、従属命令ＦＡＢをブロックする時に、ディスパッチ制御部２１４が、これらの修正されたＯＲ命令のうちの１つの存在において、直ちに、ディスパッチをブロックできると仮定する。これが正しくなく、ディスパッチをブロックする前に待ち時間があるとき、コンパイラは、補正するために、修正されたＯＲ命令の後に通常のＮｏｐ命令を置くことができる。
【００１９】
最初に、ステップ４０２で、命令発行部２０２は、ＦＡＡ、修正されたＯＲ命令、およびＦＡＢをフェッチする。ステップ４０４で、ＩＢＵＦ  ０  ２０４は、ＦＡＡ、「ＯＲ」、およびＦＡＢを保存する。ＦＡＢは、命令フェッチ部２０２およびＩＢＵＦ  ０  ２０４を介してＦＡＡに追従するＯＲ命令に追従する。ステップ４０６で、スレッド０は、ＦＡＡをディスパッチしなければならない。次に、ステップ４０７で、スレッド０は、修正されたＯＲ命令をディスパッチする。ステップ４０８で、ＯＲ命令は、スレッド０を１０サイクルの間、ブロックし、ステップ４１２で、ディスパッチ制御部２１４は、ディスパッチメカニズム２１０が、１０サイクルの間、スレッド１および２から命令をディスパッチすることを可能とする。１０サイクル後に、ステップ４１４で、ディスパッチメカニズム２１０は、スレッド０、１、および２から命令をディスパッチする。スレッド１および２は、スレッド０に対するＯＲ命令により影響を受けることはない。実際には、スレッド１および２は、スレッド０についてのディスパッチブロックのために、より速く実行処理している。
【００２０】
また、１つのスレッドが非パイプライン動作を有するとき、この修正されたＯＲ命令が有益である場合がある。通常、非パイプライン命令は、実行処理に長い時間を要し、かつ同一リソースを用いる後続の命令は、パイプラインを使用することができない。したがって、後続の命令は、非パイプライン命令の実行処理が終了するまで待たなければならない。これは、命令パイプライン２１６において重大な停止を生じさせて、他のスレッドに不便をもたらす。コンパイラは、このような停止が結果として生じることを知っているとき、コンパイラは、修正されたＯＲ命令を用いることにより、非パイプライン命令をディスパッチした後に特定のサイクル数の間、スレッドをブロックできる。したがって、非パイプライン命令は、間接的に命令パイプライン２１６を停止させない。他のスレッドが現在実行処理している非パイプライン命令と同一リソースを利用しない限り、他のスレッドは、ディスパッチして、かつ発行できる。この修正されたＯＲ命令を利用することにより、命令パイプラインにおける多数の長い待ち時間の条件を回避できる。共用使用された発行パイプラインにおいて複数のスレッドから命令を発行する可能性は、たとえ１つのスレッドが長い待ち時間の条件を有するとしても、先行技術に対して明らかな進歩である。
【００２１】
図５は、本発明の実施例に基づいて、例えば、サーバ、加入者計算機器、ハンドヘルドデバイス、ノート、または他の形態のデータ処理システムとして実現することができるデータ処理システム５００のブロック図を示す。データ処理システム５００は、本発明の態様を実現することができ、対称マルチプロセッサ（「ＳＭＰ」）システム、またはシステムバス５０６に接続された複数のプロセッサ１００および１２０を有する非均質システムでもよい。あるいは、システムは、単一の処理装置１００を含んでもよい。
【００２２】
メモリコントローラ／キャッシュ５０８は、ローカルメモリ５０９に接続するためのインタフェースを提供し、システムバス５０６に接続する。Ｉ／Ｏバスブリッジ５１０は、システムバス５０６に接続し、Ｉ／Ｏバス５１２に接続するためのインタフェースを提供する。メモリコントローラ／キャッシュ５０８およびＩ／Ｏバスブリッジ５１０は、図示されたように一体化できる。Ｉ／Ｏバス５１２に接続された周辺機器相互接続（「ＰＣＩ」）バスブリッジ５１４は、ＰＣＩローカルバス５１６に接続するためのインタフェースを提供する。多くのモデムをＰＣＩローカルバス５１６に接続できる。典型的なＰＣＩバス装備機器は、４個のＰＣＩ拡張スロットまたはアドインコネクタをサポートする。モデム５１８およびネットワークアダプタ５２０は、アドインコネクタ（図示せず）を介してＰＣＩローカルバス５１６に接続された他の計算機器に接続するための通信リンクを提供する。付加的なＰＣＩバスブリッジ５２２および５２４は、付加的なモデムまたはネットワークアダプタ（図示せず）をサポートできる付加的なＰＣＩローカルバス５２６および５２８用のインタフェースを提供する。このように、データ処理システム５００は、複数のネットワークコンピュータとの接続を可能とする。また、図示されたように、メモリマップされたグラフィックスアダプタ５３０およびハードディスク５３２を、直接的、または間接的に、Ｉ／Ｏバス５１２に接続できる。
【００２３】
したがって、図５に示されたハードウェアは、変化しうる。また、例えば、光ディスクドライブなどの他の周辺装置を、図示されたハードウェアに付加して、または代わりに用いることができる。図示された具体例は、本発明に関する構成上の制限を意味するものではない。例えば、データ処理システム５００は、アドバンストインタラクティブエグゼクティブ（「ＡＩＸ」はＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎの商標）オペレーティングシステム、Ｌｉｎｕｘ（Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓの米国およびその他の国における商標）オペレーティングシステム、または他のオペレーティングシステムを実行する、ＩＢＭ（ＩＢＭはＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎの商標）社（インターナショナル・ビジネス・マシーンズ・コーポレーション社）により提供されているディープブルーシステム（ＩＢＭ  Ｃｏｒｐｏｒａｔｉｏｎの商標）、ＣＭＴ−５システム、ニューヨーク州アーモンクのインターナショナル・ビジネス・マシーンズ・コーポレーション社の製品、または他のマルチコアプロセッサシステムなどでもよい。
【産業上の利用可能性】
【００２４】
本発明は、多数の形式および実施例をとることができる。したがって、本発明の範囲を逸脱することなく、本設計のいくつかの変更を行うことができる。本明細書に概説された機能は、種々のネットワークモデルの実現性を考慮する。この開示は、特定のネットワークモデルを好むものとして読まれるべきではなく、これらのネットワークモデルを構築しうる基礎となる基本的概念に関する。
【００２５】
このように、いくつかの好ましい実施例を参照することにより本発明を説明したが、開示された実施例は、本質的に制限するためよりむしろ例を示したものであり、幅広い変形、修正、変更、および代用物が、上述の開示において想定され、ある場合には、対応する他の特徴を使用することなく、本発明のいくつかの特徴を用いることができる。好ましい実施例の上述の説明の再検討に基づいて、当業者は、このような多数の変形および修正を好ましいとみなすことができる。したがって、添付クレームは、幅広くかつ本発明の範囲と一致した方法で解釈されるべきである。
【図面の簡単な説明】
【００２６】
本発明およびその利点をさらに完全に理解するために、ここで、添付図面とともに、以下の説明を参照する。
【００２７】
【図１】マルチスレッド機能を有するプロセッサのブロック図。
【図２】複数のスレッドを収容できるプロセッサ内の命令パイプラインのブロック図。
【図３】マルチスレッド命令パイプライン内の修正されたディスパッチブロックメカニズムの使用を説明するフローチャート。
【図４】マルチスレッド命令パイプラインの１つのスレッドをブロックするために用いられる、修正されたＯＲメカニズムの具体例を説明するフローチャート。
【図５】データ処理システムを示すブロック図。
【符号の説明】
【００２８】
１００  プロセッサ
１０２  メモリコントローラ
１０４  命令制御部
１０６  実行部
１０８  Ｌ２キャッシュ
１１０  Ｌ１キャッシュ
１１４  Ｌ１キャッシュ
２０２  命令フェッチ部
２１０  ディスパッチメカニズム
２１４  ディスパッチ制御ブロック
２１６  命令パイプライン
５００  データ処理システム
５０６  システムバス
５０８  メモリコントローラ／キャッシュ
５０９  ローカルメモリ
５１０  Ｉ／Ｏブリッジ
５１２  Ｉ／Ｏバス
５１４  ＰＣＩバスブリッジ
５１６  ＰＣＩバス
５１８  モデム
５２０  ネットワークアダプタ
５３０  グラフィックスアダプタ
５３２  ハードディスク
【図１】
2006351008.tif 000003
【図２】
2006351008.tif 000004
【図３】
2006351008.tif 000005
【図４】
2006351008.tif 000006
【図５】
2006351008.tif 000007