(57)【特許請求の範囲】
【請求項１】
複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、
前記スレッド実行ユニットが、処理中のスレッドが高々１回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、
さらに、前記スレッド生成手段により前記スレッド生成命令に基づいて生成される新しいスレッドを、スレッド生成命令を実行する前記スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアにて直接行うスレッド割り当て手段と、
任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とするマルチスレッドプロセッサ。
【請求項２】
前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項３】
前記レジスタコンテキスト保持手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスＸにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、
前記命令アドレスＸをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、
トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、
前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、
前記スレッド実行終了命令実行検出手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスＹにトラップし、
前記レジスタコンテキスト復旧手段が、
命令アドレスＹをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、
主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧すること
を特徴とする請求項２に記載のマルチスレッドプロセッサ。
【請求項４】
前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた１組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、
前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させること
を特徴とする請求項１に記載のマルチスレッドプロセッサ。
【請求項５】
複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、
前記スレッド実行ユニットが、処理中のスレッドが高々１回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、
前記複数のスレッド実行ユニットに共有され複数の物理レジスタからなる共有物理レジスタファイルと、前記複数のスレッド実行ユニットに設けられ前記スレッド実行ユニット内の１つの論理レジスタと前記共有物理レジスタファイル中の特定の複数の物理レジスタの１つとの間に写像関係を定義する変換テーブルと、前記複数のスレッド実行ユニットの変換テーブルの情報を隣接するスレッド実行ユニットにコピーする変換テーブル情報コピー手段とを有し、１つの前記論理レジスタとの間で写像関係が定義されている複数の前記物理レジスタ毎にグループ化し、該グループ内の位置を示す情報を前記変換テーブルの情報に付加して前記写像関係を定義することにより、レジスタ内容の継承を行うレジスタ内容継承装置と、
任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とするマルチスレッドプロセッサ。
【請求項６】
前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする請求項５に記載のマルチスレッドプロセッサ。
【請求項７】
前記レジスタコンテキスト保持手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスＸにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、
前記命令アドレスＸをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、
トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、
前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、
前記スレッド実行終了命令実行検出手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスＹにトラップし、
前記レジスタコンテキスト復旧手段が、
命令アドレスＹをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、
主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧すること
を特徴とする請求項６に記載のマルチスレッドプロセッサ。
【請求項８】
前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた１組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、
前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させること
を特徴とする請求項５に記載のマルチスレッドプロセッサ。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、情報処理装置において複数の命令を同時に実行するマルチスレッドマイクロプロセッサに関し、特に複数のスレッドの実行スケジューリング技術に特徴を有するマルチスレッドプロセッサに関する。
【０００２】
【従来の技術】
シングルプログラムを高速実行する技術として、プログラムを複数のスレッド（命令流）に分割し、そのスレッドレベルで並列処理を行う技術がある。また、当該技術分野において、スレッドの生成、プロセッサ実行資源へのスレッド割り当て及び実行、スレッドの終了及び消滅といった基本的な処理を機械語命令レベルで実現することにより、より細粒度のスレッドでも高速な実行を目指す方式が提案されている。
【０００３】
この種の従来技術として、例えば、文献「Ｍｕｌｔｉｓｃａｌａｒ  Ｐｒｏｃｅｓｓｏｒ」（Ｇ．Ｓ．Ｓｏｈｉ，Ｓ．Ｅ．Ｂｒｅａｃｈ  ａｎｄ  Ｔ．Ｎ．Ｖｉｊａｙｋｕｍａｒ，Ｔｈｅ  ２２ｎｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，ＩＥＥＥＣｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｐｒｅｓｓ，１９９５，ｐｐ．４１４−４２５）に開示された技術や、文献「Ｏｎ−Ｃｈｉｐ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ指向制御並列アーキテクチャＭＵＳＣＡＴの提案」（鳥居、近藤、本村、小長谷、西、並列処理シンポジウムＪＳＰＰ９７論文集、情報処理学会、ｐｐ．２２９−２３６，Ｍａｙ  １９９７）に開示された技術がある。
【０００４】
これらの文献において開示されている技術によれば、Ｃ言語等のプログラミング言語で書かれたプログラムの中のベーシックブロックや、ベーシックブロックをいくつかまとめて見たマクロベーシックブロックのレベルで並列化して処理を高速化することが可能であり、非常に小さなプログラム粒度（μｓｅｃオーダ）においても高速化可能である。
【０００５】
ＭｕｌｔｉｓｃａｌａｒやＭＵＳＣＡＴ等の細粒度スレッド実行方式における大きな特徴としては、高速なスレッド生成及び実行資源に割り付けるためのハードウェアスケジューリングと、スレッド間での高速なデータ授受を可能とするためのレジスタ内容継承がある。スレッドのハードウェアスケジューリングに係わる従来技術としては、例えば特開平１０−２７１０８号公報に開示されたスレッド実行方式がある。また、レジスタ内容継承に係わる技術として、本出願人による特許出願（特願平１０−１１７６６６号）がある。これらの技術は、シーケンシャルな順序実行モデルに基づくプログラムを、細粒度で分割して並列実行し、高速実行を可能にする。また、プログラムのスレッド分割をコンパイラにて自動で行うことをも視野にいれた技術である。
【０００６】
また、スレッド並列実行に係わる技術においては、前記のようなプロセッサハードウェアにおいてマルチスレッドをサポートしようとする技術の他に、プログラミングモデルとして陽に並列性を記述する並列プログラミングモデルも存在する。そして、ＳＭＰ型マルチプロセッサを使用して実際に並列実行を可能とする試みもさかんである。例えば、文献「ＢＳＤ  ＵＮＩＸ上での移植性にすぐれた計量プロセス機構の実現」（阿部、松浦、谷口、情報処理学会論文誌、Ｖｏｌ．３６，Ｎｏ．２，ｐｐ．２９６−３０３，Ｆｅｂ．１９９５．）に開示されるように、ソフトウェア技術において可能な範囲で、より軽量かつ高速なソフトウェアスレッドを実現すべく、ユーザレベルのライブラリスケジューラを用いた研究がさかんに行われている。
【０００７】
これら従来の技術における、複数のスレッドの並列実行に対するハードウェアによるスケジューリングとソフトウェアによるスケジューリングとを比較した場合、一方の長所と短所とは、他方の短所と長所とになる。
【０００８】
すなわち、ハードウェアによるアプローチにおいては、長所として、並列処理粒度が非常に小さくても並列処理による加速が可能であることが挙げられる。また、短所として、ハードウェアが直接管理、記憶保持するため、スケジューリング可能なスレッド数に制限が強いこと、ハードウェアによるスケジューリングは、必ずしもソフトウェアとして望む性能特質を実現するものとはならない場合も多く、柔軟性に欠けることが挙げられる。
【０００９】
一方、ソフトウェアによるアプローチにおいては、長所として、管理可能なスレッド数をハードウェアアプローチと比べて非常に大きくすることが可能であり、ＧＵＩ（Ｇｒａｐｈｉｃｓ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）プログラムや通信トランザクション処理においてよく用いられる、イベント駆動型のプログラミングスタイルへの適用性が高いこと、スケジューリング方法が、対象アプリケーションごとに個別に要求される特性に対して個々にチューニング可能であり柔軟性が高いことが挙げられる。また、短所として、並列処理粒度が小さいとオーバヘッドが大きくなるため、高速化が難しいことが挙げられる。
【００１０】
すなわち、ハードウェアアプローチとソフトウェアアプローチとは、互いに相手を補完する性質を備えるため、両方の機能を混在動作可能とし、かつ自在にいずれのアプローチをも組み合わせて使えることが望ましい。
【００１１】
次に、ハードウェアスケジューリングとソフトウェアスケジューリングとの混在プログラムの実行に関する問題を一段掘り下げて説明する。図２０乃至図２２は、ｍｓｅｃオーダの６個の並列処理可能な仕事（Ｔ０〜Ｔ５スレッド）を例題として並列化粒度とスケジューリングとの問題を説明する概念図である。
【００１２】
図２０は、元々のｍｓｅｃオーダの仕事を、スレッドＴ０→スレッドＴ１→…→スレッドＴ５の順で生成及び実行を行う形として、ＭｕｌｔｉｓｃａｌａｒやＭＵＳＣＡＴにおいてハードウェアスケジューリングを行った場合のスケジューリングを示している。ここでは、高速なスレッド生成と実行資源への割り当てとを可能とするために、スレッド実行ユニット（ＰＥ＃０〜ＰＥ＃３）間は、方向リングで指し示される方向に対してのみ、新規スレッドの生成と実行開始が可能となっている。したがって、ＰＥ＃３実行中のスレッドＴ３が新たなスレッドＴ４を生成しようとすると、ＰＥ＃０がＴ０の実行を完了した後にＴ４が開始されることとなる。このため、Ｔ１やＴ２のようにＴ０よりも早期に終了してアイドル状態となっているＰＥ＃１やＰＥ＃２が有効活用されず、無駄時間が生じてしまう。この問題が解決可能かどうかは、現実にはスレッド粒度と密接な関係がある。すなわち、ＰＥ＃１やＰＥ＃２のアイドル時間がμｓｅｃオーダであるならばこのアイドル時間を活用していくのは難しい面もあるが、アイドル時間がｍｓｅｃオーダ以上であれば、ソフトウェアスケジューリングの方がうまくスケジューリングを行うことが可能である。
【００１３】
図２１は、ソフトウェアスケジューリングによる、ユーザレベルのライブラリスケジューラを用いてスケジューリングを行った場合を示している。ソフトウェアスケジューラを用いれば、アイドル状態となったＰＥは、ライブラリスケジューラに制御を移して次に実行すべきスレッドを探すことが可能である。これにより、ＰＥ＃１やＰＥ＃２は各々Ｔ１とＴ２終了後に直ちにＴ４とＴ５を実行開始することが可能となる。このため、図２０に対して全終了時刻を短縮することが可能となる。しかしながら、この図２１の状態においては、最終的にＴ５の実行を受け持ったＰＥ＃２が処理終了するまでは、ＰＥ＃０、＃１、＃３はアイドル状態で待機することとなるため、まだ効率が悪い面がある。
【００１４】
そこで、図２０や図２１を参照して提示した問題を踏まえ、ハードウェアスケジューリングとソフトウェアスケジューリングとを混在させた実行例を図２２に示す。図２２においては、元々、Ｔ０〜Ｔ５の各仕事はその単位においてユーザレベルスケジューラを用いて並列化されたものを第一階層の並列化とする。そして、第二階層の並列化として、Ｔ０〜Ｔ５の内部をハードウェアスケジューラで処理される形に並列化したプログラムを想定している。すなわち、図２２に示すように、最後に処置中のＴ５は、他のＰＥ＃０、＃１、＃３がアイドル状態になった時点で、ハードウェアスケジューリングレベルで粒度の小さい形での並列処理を行うことにより、さらに高速化を行うことを可能としている。
【００１５】
しかし、図２２に示すような処理を行わせるためには、Ｔ０〜Ｔ５の内部をハードウェアレベルで並列化可能としておき、プログラムに対して、他のＰＥが空き状態であるならば当該他のＰＥを使い、他のＰＥがソフトウェアスケジューリングにより使用中であるならば、ハードウェアレベルで起動しようとしている新しいスレッドを、自ＰＥ上で時間軸でシリアライズして処理できるように制御する必要があった。
【００１６】
【発明が解決しようとする課題】
上述したように、従来のマルチスレッドプロセッサにおけるスレッド実行方法には、ハードウェアによるスケジューリングとソフトウェアによるスケジューリングとがある。そして、両アプローチには互いに相反する長所と短所とが存在することから、両方の機能を混在させ、自在に組み合わせて動作させることが望ましい。
【００１７】
しかし、そのような動作を行うためには、複数のスレッドの内部をハードウェアレベルで並列化可能とし、各スレッド実行ユニットにおいて、他のスレッド実行ユニットの使用状況に応じてプログラムの処理方法を選択する制御を実現する必要があった。
【００１８】
本発明の目的は、上記従来の課題を解決し、複数のスレッドの並列実行において、ハードウェアによるスケジューリング機能とソフトウェアによるスケジューリング機能とを混在させ、かつ自在に組み合わせて動作させることを実現したマルチスレッドプロセッサを提供することにある。
【００１９】
【課題を解決するための手段】
上記の目的を達成する本発明は、複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、前記スレッド実行ユニットが、処理中のスレッドが高々１回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、さらに、前記スレッド生成手段により前記スレッド生成命令に基づいて生成される新しいスレッドを、スレッド生成命令を実行する前記スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアにて直接行うスレッド割り当て手段と、任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とする。
【００２０】
また、上記の目的を達成する他の本発明は、複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、前記スレッド実行ユニットが、処理中のスレッドが高々１回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、前記複数のスレッド実行ユニットに共有され複数の物理レジスタからなる共有物理レジスタファイルと、前記複数のスレッド実行ユニットに設けられ前記スレッド実行ユニット内の１つの論理レジスタと前記共有物理レジスタファイル中の特定の複数の物理レジスタの１つとの間に写像関係を定義する変換テーブルと、前記複数のスレッド実行ユニットの変換テーブルの情報を隣接するスレッド実行ユニットにコピーする変換テーブル情報コピー手段とを有し、１つの前記論理レジスタとの間で写像関係が定義されている複数の前記物理レジスタ毎にグループ化し、該グループ内の位置を示す情報を前記変換テーブルの情報に付加して前記写像関係を定義することにより、レジスタ内容の継承を行うレジスタ内容継承装置と、任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とする。
【００２１】
また、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする。
【００２２】
また、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスＸにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、前記命令アドレスＸをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、前記スレッド実行終了命令実行検出手段が、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスＹにトラップし、前記レジスタコンテキスト復旧手段が、命令アドレスＹをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧することを特徴とする。
【００２３】
さらにまた、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた１組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させることを特徴とする。
【００２４】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
図１は、本発明の一実施の形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。本実施形態のマルチスレッドプロセッサは、図１に示すように、４スレッド並列実行型プロセッサであり、スレッド管理ユニット３０と、４組のスレッド実行ユニット（ＰＥ＃０〜ＰＥ＃３）１０−０〜１０−３と、物理共有レジスタファイル２０と、実行ユニットステータス５０とを備える。
【００２５】
スレッド実行ユニット１０−０〜１０−３は、それぞれ、命令キャッシュ（＃０〜＃３）１１−０〜１１−３と、命令デコーダ（＃０〜＃３）１２−０〜１２−３と、レジスタ写像テーブル（＃０〜＃３）１３−０〜１３−３と、演算ユニット（＃０〜＃３）１４−０〜１４−３と、セレクタ１５−０〜１５−３とを備える。また、レジスタ写像テーブル１３−０〜１３−３は、それぞれ写像情報転送バス４０によってリング状をなすように、隣接するレジスタ写像テーブルに接続されている。
【００２６】
実行ユニットステータス５０は、各スレッド実行ユニット（ＰＥ＃０〜ＰＥ＃３）１０−０〜１０−３内の命令デコーダ部１２−０〜１２−３と、物理共有レジスタファイル２０から演算ユニット１４−０〜１４−３へデータ及びコマンドを接続するバスまたは演算ユニット１４−０〜１４−３から実行結果を物理共有レジスタ２０に戻すバスを選択するセレクタ１５−０〜１５−３とに接続されている。
【００２７】
なお、図１には、本実施形態における特徴的な構成のみを記載し、他の一般的な構成については記載を省略してある。例えば、プロセッサとしては、上記の構成の他にロードストアユニットやデータキャッシュメモリ、外部インタフェース等が必要であるのは言うまでもない。また、以下の説明では、スレッド実行ユニット１０−０〜１０−３及びスレッド実行ユニット１０−０〜１０−３の構成要素である命令キャッシュ１１−０〜１１−３、命令デコーダ１２−０〜１２−３、レジスタ写像テーブル１３−０〜１３−３、演算ユニット１４−０〜１４−３、セレクタ１５−０〜１５−３において、特に個々の構成要素を区別する必要がない場合は、適宜符号の添え字を省略し、例えばスレッド実行ユニット１０、命令キャッシュ１１、命令デコーダ１２というように表記する。
【００２８】
本実施形態のマルチスレッドプロセッサは、任意のスレッド実行ユニットにおいて処理中のスレッドが新たなスレッド生成を行うことを可能とする機械語命令及び任意のスレッド実行ユニットにおいて処理中のスレッドが終了することを可能とする機械語命令を備え、任意のスレッド実行ユニットにおいて処理中のスレッドは高々１回の新たなスレッド生成を行い、新たなスレッド生成を行う機械語命令の処理において、当該命令に基づいて生成される新しいスレッドを当該スレッド実行ユニット以外のスレッド実行ユニットに割り当てる制御をハードウェアが直接行うことにより実現されるレジスタ内容の継承手段を備えることが前提となっている。上述したスレッド管理ユニット３０、スレッド実行ユニット１０−０〜１０−３及び物理共有レジスタファイル２０が、レジスタ内容の継承手段を実現する。そこで、まず、当該レジスタ内容の継承手段について説明する。
【００２９】
図１２は、図１のスレッド実行ユニット１０−０〜１０−３のパイプラインステージを示す図である。図１２を参照すると、スレッド実行ユニット１０−０〜１０−３のパイプラインステージにおいては、命令フェッチステージ１２０１、命令デコードステージ１２０２、レジスタ変換ステージ１２０３、実行ステージ１２０４、レジスタ書き戻しステージ１２０５の５段のステージを経て実行が完了する。
【００３０】
図１３は、図１の物理共有レジスタファイル２０の詳細な構成を示す図である。図１３を参照すると、物理レジスタファイル２０は、論理レジスタ番号２０２毎にスレッド実行ユニット１０−０〜１０−３の数の２倍の物理レジスタ２０１を備えて構成される。したがって、本実施例では、１つの論理レジスタに対して８個の物理レジスタ２０１が対応付けられる。各物理レジスタ２０１は、グループ選択ビット２０３のＡ、Ｂの２つのグループ２０４、２０５に分けられ、それぞれ、スレッド実行ユニット１０−０〜１０−３の数分の物理拡張ビット２０６を持つ。
【００３１】
図１４は、図１３の物理レジスタ２０１のフォーマットを示す図である。図１４を参照すると、物理レジスタ２０１は、３２本の論理レジスタセットを持つ命令セットの場合、物理拡張ビット２０６と、グループ選択ビット２０３と、論理レジスタ番号２０２とからなる。この場合、論理レジスタセットの数が変化すると論理レジスタ番号２０２を示すビット数が変化し、スレッド実行ユニット１０−０〜１０−３の数が変化すると物理拡張ビット２０６の値が変化する。
【００３２】
図１５は、図１のレジスタ写像テーブル１３の詳細な構成を示す図である。図１５を参照すると、レジスタ写像テーブル１３は、論理レジスタ番号２０２ごとにグループ選択ビット１５０１によって選択されるＡ、Ｂのグループに分けられ、それぞれ、物理拡張ビット１５０３と、変更ビット１５０４と、書き戻しビット１５０５と、継承時グループ選択ビット１５０２と、グループ選択変更命令未完了ビット１５０６とから構成される。グループ選択ビット１５０１は、当該スレッド実行ユニット１０−０〜１０−３が参照する物理共有レジスタファイル２０のグループを示しており、物理拡張ビット１５０３によって、その中のどの物理レジスタ２０１を参照するかを示している。変更ビット１５０４は、当該スレッド実行ユニット１０−０〜１０−３によって、グループ選択ビット１５０１により選択されている物理レジスタ２０１を更新する命令を１回以上デコードしたか否かを示す。書き戻しビット１５０５は、物理レジスタ２０１を更新した命令が１個以上実際に完了したか否かを示す。継承時グループ選択ビット１５０２は、レジスタを当該スレッド実行ユニット１０−０〜１０−３から別のスレッド実行ユニット１０−０〜１０−３に継承した時点でのグループ選択ビット１５０１の内容をコピーしたものである。
【００３３】
図１６は、図１のレジスタ写像テーブル１３の１エントリの詳細な構成を示す図である。図１６を参照すると、レジスタ写像テーブル１３は、図１５に示すビット以外に、加算機１６０１ａ、１６０１ｂと、マルチプレクサ１６０２ａ〜１６０２ｄと、書き込み動作論理１６０３とを備える。
【００３４】
グループ選択ビット１５０１は、フォーク１回モデルにおけるフォーク、すなわちスレッド生成が行なわれた後に、当該スレッド実行ユニット１０−０〜１０−３の命令によって１回目にレジスタ値を変更した場合にセットされる。フォーク後の１回目の書き換えか否かの判断は、グループ選択ビット１５０１と継承時グループ選択ビット１５０２との値の排他的論理輪を取って行う。継承時グループ選択ビット１５０２は、スレッド生成時のグループ選択ビット１５０１のコピーを保持しているので、当該判断を行なうことができる。
【００３５】
また、変更ビット１５０４ａ、１５０４ｂは、自スレッドの起動時にはリセットされる。その後、当該レジスタ値を変更する命令を命令デコーダ１２−０〜１２−３から受け取った際に、グループ選択ビット１５０１で選択されている側の変更ビット１５０４ａ、１５０４ｂがセットされる。
【００３６】
書き戻しビット１５０５ａ、１５０５ｂは、自スレッドの起動時にリセットされており、演算ユニット１４によって演算された実際の計算結果が物理共有レジスタファイル２０に書き戻される際にセットされる。これによって、以下のような参照方針で、論理レジスタに対して物理レジスタ番号の拡張を行なう。
【００３７】
まず、呼び出し参照時、マルチプレクサ１６０２ａ、１６０２ｂは、変更ビット１５０４ａ、１５０４ｂがリセットされているときに、物理拡張ビット１５０３ａ、１５０３ｂの値に、加算機１６０１ａ、１６０１ｂにより加算した値を出力する。物理拡張ビット１５０３ａ、１５０３ｂの値に１を加算することにより、非選択側が用いる物理共有レジスタファイル２０において、レジスタの競合の発生を防止している。レジスタの競合の発生の防止は、非選択側における自ユニットでの変更時に用いられるため、前段のユニットと自ユニットとが、あるいは自ユニットと後段のユニットとが同じレジスタを使用しないようにすることで実現できる。
【００３８】
マルチプレクサ１６０２ｃは、グループ選択ビット１５０１によって、ＡグループまたはＢグループのどちらかの値を読み出して参照用の物理拡張ビット２０６として出力するかを選択する。一方、書き込み参照用の物理拡張ビット２０６は、ＡグループまたはＢグループのどちらを選択するにしても、常に物理拡張ビット１５０３ａ、１５０３ｂに１を加算した値を出力する必要がある。
【００３９】
したがって、マルチプレクサ１６０２ｄに対する入力は、ＡグループまたはＢグループのどちらも物理拡張ビット１５０３ａ、１５０３ｂから加算機１６０１ａ、１６０１ｂを通った値を用いる。ＡグループまたはＢグループの選択は、基本的にグループ選択ビット１５０１の値に従うが、上述したグループ選択ビット４１を切り替える際には、先行して切り替え先の方のグループを選択する。この制御は、書き込み動作論理１６０３によって行われる。また、物理拡張ビット１５０３ａ、１５０３ｂは、加算によって用意された桁が溢れると、０に戻される。さらに、スレッド生成時には、グループ選択ビット１５０１及びマルチプレクサ１６０２ａ、１６０２ｂから出力される物理拡張ビット１５０３ａ、１５０３ｂをスレッド生成先のレジスタ写像テーブル１３を介してコピーする。
【００４０】
以下、スレッド起動後の通常のレジスタ参照動作、スレッド生成時の動作及びスレッド生成後のレジスタ参照動作について、それぞれ時間順序を追って説明する。以下の説明は、主に図１２におけるレジスタ変換ステージ１２０３によって行なわれる動作である。
【００４１】
図１７は、通常の動作時のグループ選択ビット１５０１、物理拡張ビット１５０３ａ、１５０３ｂ、変更ビット１５０４ａ、１５０４ｂの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明する図である。なお、書き戻しビット１５０５ａ、１５０５ｂの動作については後述する。
【００４２】
スレッド実行ユニット（＃０）１０−０において、新規スレッドが起動した（イ）の時点では、グループ選択ビット１５０１は「Ａ」となっており、物理拡張ビット１５０３ａ、１５０３ｂは０、変更ビット１５０４ａ、１５０４ｂは０となっている。この場合、論理レジスタは「Ａ」の０に位置する物理レジスタ２０１を読み出して参照する。
【００４３】
書き込み参照が生じた際、すなわちレジスタ変更（ロ）の時点では、「Ａ」の変更ビット１５０４ａが１にセットされる。変更は「Ａ」の１に位置する物理レジスタ２０１に対して行われ、その後の読み出し参照も同一レジスタに対して行われる。その後、同一レジスタに対する書き込み参照が生じても、グループ選択ビット１５０１や変更ビット１５０４ａ、１５０４ｂは変更しない。
【００４４】
次に、新たにスレッドを生成する（ハ）の時点では、グループ選択ビット１５０１は「Ａ」であるので「Ａ」をセットされ、変更ビット１５０４ａは選択側でセットされており、変更ビット１５０４ｂは非選択側なので、物理拡張ビット１５０３ａ、１５０３ｂの値に１を加算した値を加算した値をスレッド実行ユニット（＃１）１０−１のレジスタ写像テーブル１３−１対して送信する。
【００４５】
スレッド実行ユニット（＃０）１０−０がスレッド生成後に初めてレジスタ書き込み参照を行う際、すなわち（ニ）の時点では、グループ選択ビット１５０１を「Ａ」から「Ｂ」に変更し、変更ビット１５０４ｂをセットする。変更は「Ｂ」の１に位置する物理レジスタ２０１に対して行われ、その後の読み出し参照も同一レジスタに対して行われる。その後、同一レジスタに対する書き込み参照が生じても、グループ選択ビット１５０１や変更ビット１５０４ａ、１５０４ｂは変更しない。これによって、スレッド実行ユニット（＃１）１０−１で参照する可能性のあるレジスタは、「Ａ」の０の位置で保持されたままとなる。
【００４６】
スレッド実行ユニット（＃１）１０−１では、レジスタの書き込み参照を起こすことなく、（ホ）の時点で新スレッドを生成している。したがって、グループ選択側の「Ａ」の物理拡張ビット１５０３ａは、そのままの値を送信している。したがって、スレッド実行ユニット（＃０）１０−０で実行しているスレッドのレジスタの内容は、そのままスレッド実行ユニット（＃２）１０−２で実行されるスレッドに継承される。また、（ヘ）の時点で、レジスタ変更が行われた際には、フォーク後であるので、グループ選択ビット１５０１を「Ａ」から「Ｂ」にする。
【００４７】
図１８は、投機的なスレッド生成を伴う場合のグループ選択ビット１５０１、物理拡張ビット１５０３ａ、１５０３ｂ、変更ビット１５０４ａ、１５０４ｂの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明するための図である。図１８に示した動作のうち、（イ）〜（ニ）は、図１７の（イ）〜（ニ）の動作と同一である。
【００４８】
図１７の（ホ）の時点で、スレッド実行ユニット（＃０）１０−０は、（ハ）の時点において生成したスレッドの生成を取り消す。さらに、（ヘ）の時点で再びスレッドを生成する。グループ選択ビット１５０１は「Ｂ」であるので「Ｂ」をセットされ、変更ビット１５０４ａ「Ａ」は選択側でセットされており、「Ｂ」は非選択側なので、物理拡張ビット１５０３ａ、１５０３ｂの値に１を加算した値をスレッド実行ユニット（＃１）１０−１のレジスタテーブル１３−１に対して送信する。これによって、（ニ）の時点で変更された値が、スレッド実行ユニット（＃１）１０−１で実行されるスレッドに継承される。（ト）の時点で、再びレジスタが変更された場合は、グループ選択ビット１５０１を再び「Ａ」に戻す。
【００４９】
図１９は、図１２に示したパイプラインの動作における写像情報のコピーのタイミングを示す図である。図１９を参照すると、レジスタ写像情報のコピーは、スレッド生成命令がレジスタ変換ステージ（図１９ではサイクル５）においてスレッド実行ユニット（＃０）１０−０からレジスタ継承情報が送信され、サイクル６においてスレッド実行ユニット（＃１）１０−１のレジスタ写像テーブル１３−１に書き込まれる。通常命令Ｅは、サイクル７において、当該レジスタ写像テーブル１３−１を参照して継承したレジスタをアクセスする。なお、スレッド生成先のスレッド実行ユニット１０−０〜１０−３が他のスレッドを実行中であり、スレッドの新規生成要求を受けられない場合は、その後に受付け可能になった時点で、継承時グループ選択ビット１５０２の値を、グループ選択ビットの１５０１の代わりに送信すればよい。
【００５０】
次に、書き戻しビット１５０５ａ、１５０５ｂの動作について説明する。書き戻しビット１５０５ａ、１５０５ｂは、レジスタを書き込み参照する命令が何らかの原因（例えば、条件分岐命令の予測の失敗等）により取り消された場合に、変更ビット１５０４ａ、１５０４ｂを正しい値に復帰するために用いられる。
【００５１】
書き戻しビット１５０５ａ、１５０５ｂは、自スレッドの起動時にグループ選択ビット１５０１によってリセットされている。リセットされている書き戻しビット１５０５ａ、１５０５ｂは、演算ユニット１４によって演算された実際の計算結果が物理共有レジスタファイル２０に書き戻される際にセットされる。すなわち、変更ビット１５０４ａ、１５０４ｂがセットされており、かつ書き戻しビット１５０５ａ、１５０５ｂがセットされていないということは、まだ変更ビット１５０４ａ、１５０４ｂをセットした命令が完了していないことを意味する。したがって、この段階で命令取り消しの事象が発生した場合は、書き戻しビット１５０５ａ、１５０５ｂの内容を変更ビット１５０４ａ、１５０４ｂにコピーして初期値に戻すことによって、命令取り消しの際にレジスタ写像テーブル１３を正しい値に復帰させる。
【００５２】
さらに、グループ選択変更命令未完了ビット１５０６は、スレッド起動時にはリセットされており、グループ選択ビット１５０１を変更する命令がレジスタ変換ステージ１２０３に達した時にセットされ、レジスタ書き戻しステージ１２０５に達した時にリセットされる。すなわち、グループ選択変更命令未完了ビット１５０６がセットされている間は、グループ選択ビット１５０１を変更する命令が完了していないことになる。この状態で命令の取り消しが生じた場合は、セットされているグループ選択変更命令未完了ビット１５０６に対応してグループ選択ビット１５０１を反転させる。その後、グループ選択変更命令未完了ビット１５０６をリセットする。
【００５３】
以上説明した方法により、レジスタの実内容のコピーを行うことなく、また共有資源を物理共有レジスタファイル２０のみとして、レジスタの継承を実現することが可能となる。各物理拡張ビット２０６は、継承の際に高々１が加算されるだけであり、スレッド実行ユニット１０−０〜１０−３の数分のレジスタグループを２組持つことによって、これらの機構は実現可能である。
【００５４】
次に、上述したレジスタ内容の継承装置を用いたプロセッサ装置において、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する本実施形態について説明する。
【００５５】
本実施形態は、図１に示すように、レジスタ内容の継承手段を実現するスレッド管理ユニット３０、スレッド実行ユニット１０−０〜１０−３及び物理共有レジスタファイル２０からなる構成に、命令デコーダ１２−０〜１２−３に追加論理を加え、実行ユニットステータス５０をさらに備える。当該実行ユニットステータス５０が、任意のスレッド実行ユニットにおいて処理中のスレッドが新たなスレッド生成を行う機械語命令を処理しようとした際に、当該命令の要求に基づいて生成されるべき新しいスレッドを、当該スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアが直接行うべきかどうかをソフトウェアにおいて指示できるようにする。
【００５６】
図２は、図１における実行ユニットステータス５０の内部構造を示した回路図である。図２を参照すると、実行ユニットステータス５０は、スレッド実行ユニットステータス＃０〜＃３（２１−０〜２１−３）と、ＮＯＲ論理ゲート（２２−０〜２２−３）と、各スレッド実行ユニットからのステータス書き込み先を選択するためのセレクタ（２３−０〜２３−３）と、各スレッド実行ユニットからのステータス読み出しエントリを選択するためのセレクタ（２４−０〜２４−３）とを備える。
【００５７】
図３は、図１における命令デコーダ１２−０〜１２−３の内部構造を示した回路図である。図３を参照すると、命令デコーダ１２−０〜１２−３は、上述したレジスタ内容の継承手段を用いたプロセッサ装置における命令デコーダ機能に相当する機能を備える命令デコーダ回路２５と、ＡＮＤゲート２６、インバータ２７、セット／リセットフリップフロップ２８とを備える。
【００５８】
命令デコーダ回路２５に付加された回路が果たす機能の全体との関連づけについては後述することとし、ここでは、その回路的な動作を説明する。
【００５９】
命令デコード回路２５は、実行中の命令シーケンス中にハードウェアスケジューリング対象の機械語による新しいスレッド生成命令を見出した場合、ＡＮＤゲート２６の指示基づいて命令アドレスＸへトラップすべきかどうかを判定して動作する。ＡＮＤゲート出力が値「０」をとる場合は、命令アドレスＸへのトラップ動作を起こし、ＡＮＤゲート２６の出力値が「１」の場合は、命令アドレスＸへのトラップは起こさず直接ハードウェアスケジューリングによる新しいスレッド生成動作を行う。命令デコード回路２５が命令アドレスＸへトラップすべきと判定した場合、命令デコード回路２５は、セット／リセットフリップフロップ２８にセット動作を行い、フリップフロップ２８の値を「１」とする。
【００６０】
また、命令デコード回路２５は、実行中の命令シーケンス中にハードウェアスケジューリング対象の機械語によるスレッド終了命令を見出した場合に、ＡＮＤゲート２６の指示に基づいて命令アドレスＹへトラップすべきかどうかを判定して動作する。ＡＮＤゲート出力が値「０」をとる場合は、命令アドレスＹへのトラップ動作を起こし、ＡＮＤゲート２６の出力値が「１」の場合は、命令アドレスＹへのトラップは起こさず直接ハードウェアスケジューリングによるスレッド生成終了動作を行う。命令デコード回路２５が命令アドレスＸへトラップすべきと判定した場合、命令デコード回路２５は、セット／リセットフリップフロップ２８にリセット動作を行い、フリップフロップ２８の値を「０」とする。
【００６１】
セット／リセットフリップフロップ２８の出力は、インバータ２７を介してＡＮＤゲート２６に接続される。これらの回路は、ある機械語命令による新しいスレッド生成命令をアドレスＸにトラップする動作を一度行った場合は、当該機械語命令と対になるスレッド終了命令を再度命令デコーダ回路２５が見出した際に、必ずアドレスＹへトラップするように指示する。なお、セット／リセットフリップフロップ２８は、プロセッサ初期化に際して、値「０」にセットされる。
【００６２】
図３に示す、命令デコーダ回路２５に追加された付加回路は、図１の実行ユニットステータス５０との組み合わせにおいて、所定のスレッド実行ユニット１０−０〜１０−３において処理中のスレッドがスレッド実行終了命令を実行したことを検出する。
【００６３】
次に、図２２に示したソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を実現するプログラムの構造を、図４乃至図７のフローチャートを参照して説明する。
【００６４】
図４は、最初にＯＳ等から起動されて動作し始めるユーザプログラムの初期化において、ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行に係わる動作を示すフローチャートである。
【００６５】
当該実行に係わる部分として、図４に示すプログラムを参照すると、最初にソフトウェアスケジューラにおいて管理されるスレッドＴ１〜Ｔ５を生成するものとし、スレッドＴ０はプログラム初期化を行ったＰＥが初期化完了後にそのまま自分で実行を開始するものとしている（ステップ４０１、４０２）。スレッドＴ１〜Ｔ５の生成は、ユーザプログラムの実行ロードモジュールを作成する際に、動的あるいは静的にリンケージされたユーザレベル・スレッドライブラリの中のスレッド生成ルーチンを呼び出すことにより行われる。また、ステップ４０１において記載している「スレッド実行ステータス」の変更は、ハードウェアスケジューリングの可否をソフトウェア側から制御することに係わる処理であり、図２中のスレッド実行ユニット＃０〜＃３ステータス（２１−０〜２１−３）の中から、ソフトウェアスケジューリングの下に起動を行おうとしているいずれか一台のスレッド実行ユニットのステータスを更新する処理である。
【００６６】
図２において、スレッド実行ユニット＃ｉステータスの値が「０」である場合が「スレッド実行ユニット＃ｉはハードウェアスケジューリングで使用不可能な状態」であり、スレッド実行ユニット＃ｉステータスが値「１」である場合が「スレッド実行ユニット＃ｉはソフトウェアスケジューリングで使用可能な状態」であることを示している。したがって、図４のステップ４０１で行う「ＰＥの「スレッド実行ステータス」をユーザレベル実行に設定」とは、起動対象となったＰＥに係わる図２のスレッド実行ユニットステータスを値「１」に設定することを表している。
【００６７】
この更新処理は、図１において、スレッド生成処理を行っているＰＥ＃ｊからデータ及びコマンドを実行ユニットステータス５０に送り込み、図２において目的とする＃ｉのスレッド実行ユニットステータスの値を更新することである。これは、セレクタ２３−０〜２３−３のいずれかを制御することによって可能であり、そのインプリメンテーションは、ごく一般的なハードウェア設計知識を有する技術者においては明らかであるので説明を省略する。
【００６８】
図５乃至図７は、ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートである。
【００６９】
このユーザレベル・スレッドライブラリは、ハードウェアスケジューリングの下での並列実行環境から呼び出してはならない。ハードウェアスケジューリングの下での並列処理実行環境下からは、必ず１つのスレッド実行ユニットのみの実行状態になってから呼び出される。Ｔ０〜Ｔ５のスレッドを構成するプログラムにおいて、ユーザレベル・スレッドライブラリの呼び出し時に、必ず１つのスレッド実行ユニットのみの実行状態になってから呼び出しを行うようなプログラム構成とすることは可能であるし、また、ソフトウェアの指示の下にハードウェア的に１つのスレッド実行ユニットのみの実行状態になることを保証する手段は、例えば、特公平１０−２７１０８号公報スレッド実行方法」に開示されているので、ここでは、その詳細な説明は省略する。
【００７０】
図５は、スレッド生成ルーチンを表す。図５に示すルーチンは、呼び出されると生成すべきスレッド情報を登録した後に（ステップ５０２）、待機中のスレッド実行ユニットが存在するかどうかを調べ、待機中のスレッド実行ユニットが存在するならば、その中から１台を選んで起動してディスパッチャーを実行させる（ステップ５０３）。スレッド実行ユニットが待機中であるかどうかについては、ライブラリスケジューラ内においてスレッド実行ユニットを起動あるいは終了に導く際にライブラリが使用するメモリ領域にフラグエリアを設けることにより、ソフトウェアで管理することが可能である。
【００７１】
「スレッド生成処理」は、複数のスレッド実行ユニットが同時に処理すると、排他的にしかアクセスができないデータの破壊がおこる。そのため、図５に示すスレッド生成ルーチンは、ステップ５０１とステップ５０４とにおいて、スケジューラのロックの確保と開放を行うことにより、各スレッド実行ユニットからの呼び出しに対して排他的に動作することを保証しておく必要がある。
【００７２】
図６は、スレッド終了ルーチンを表す。図６に示すルーチンにおいても、スレッド実行ユニット間で排他的に実行する必要がある。そのため、呼び出されるとスケジューラのロックを確保した後に（ステップ６０１）、スレッド終了処理としてライブラリが管理するスレッド情報から終了スレッドの情報を抹消する（ステップ６０２）。さらに、図６に示すスレッド終了ルーチンは、処理を終了したソフトウェアの管理対象であるユーザスレッドに実行制御を戻す必要はないので、そのまま新たに実行すべきスレッドを得るべくディスパッチャーに制御を渡す構造となっている。
【００７３】
図７は、ディスパッチャーの処理を表す。図７に示す処理においても、スレッド実行ユニット間で排他的に実行する必要がある。そのため、呼び出されると、まずスケジューラのロックを確保する（ステップ７０１）。そして、スレッド管理情報を参照して、まだ処理されていない実行可能なユーザレベルスレッドの有無のチェックを行い（ステップ７０２）、実行すべきスレッドが存在する場合は、当該スレッド情報と取り出して（ステップ７０３）、自スレッド実行ユニットで実行すべく制御を取り出したスレッドに移行する。
【００７４】
他方、実行すべきスレッドが存在しない場合は、待機中の状態に至る必要がある。具体的には、待機状態に至ろうとしているスレッド実行ユニットは、他の動作中のスレッド実行ユニットが１台より多いかどうかを判定する（ステップ７０５）。そして、１台よりも多い場合は、スケジューラのロックを解除して（ステップ７０６）、自スレッド実行ユニットの「スレッド実行ステータス」をハードウェアスケジューリングが可能となるように設定し、待機中の状態に至る（ステップ７０７）。
【００７５】
また、自スレッド実行ユニットが待機状態になることにより残りの動作中のスレッド実行ユニットが１台となる場合は、当該最後に残るスレッド実行ユニットの「スレッド実行ステータス」をハードウェアスケジューリングが可能となるように設定する処理を付加的に行う（ステップ７０８）。
【００７６】
ステップ７０５〜７０８の動作の意味するところは、動作中状態のスレッド実行ユニットが１台のみとなる場合は、当該スレッド実行ユニットがハードウェアスケジューリングの下に、既に待機状態にある２台のスレッド実行ユニットと今まさに待機状態に至ろうとしている１台のスレッド実行ユニットの、合わせて３台のスレッド実行ユニットを使用してよいことを伝えることにある。
【００７７】
ステップ７０５〜７０８の処理の結果は、ステップ７０８及びステップ７０７を実行することによって、図２におけるスレッド実行ユニットステータスのフラグがすべて値「０」になることによりハードウェアに伝達される。ハードウェアが、以上の処理の結果をどのように解釈して動作するのかについては、後に全体の動作の観点から説明する。
【００７８】
次に、図１、図２及び図３と、図８及び図９のフローチャートとを参照して、ソフトウェアが新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示を行った場合に、スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段と、保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、当該スレッド実行ユニット上に復旧することを可能とする手段について説明する。
【００７９】
まず、図８及び図９に記載した処理は、各スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、各スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合に対応して動く動作を説明するフローチャートである。図８及び図９に記載された処理が起動されるかどうかの判断は、以下のように行われる。
【００８０】
まず、図２におけるスレッド実行ユニット＃ｉステータスの値が「０」であるか、または「１」であるかにより、ＮＯＲゲート２２−０〜２２−３の出力が変化する。ＮＯＲゲート２２−０〜２２−３の出力は、所定のスレッド実行ユニット＃ｉから見て、自分以外のスレッド実行ユニットのスレッド実行ユニット＃ｊ（ｊはｉ以外）ステータスが値「０」となっているならば、すなわち自分以外のスレッド実行ユニットがハードウェアスケジュール可能な状態になっているならば、値「１」をとり、そうでなければ値「０」をとる。
【００８１】
ＮＯＲゲート２２−０〜２２−３の出力は、図３に示すように、ＡＮＤゲート２６を介して各スレッド実行ユニットの命令デコード回路２５に接続されている。セット／リセットフリップフロップ２８は、初期値「０」であるため、この値が反転入力されたＡＮＤゲート２６は、ＮＯＲゲート２２−０〜２２−３の出力を道通状態で伝達する。
【００８２】
したがって、各スレッド実行ユニットの命令デコード回路２５は、接続された図２のＮＯＲゲート２２−０〜２２−３の出力が「０」であるならば、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド生成命令を見つけた場合に、シリアライズ実行しなければならないと解釈して、予めハードウェアにより定められた命令アドレスＸにトラップする。
【００８３】
他方、各スレッド実行ユニットの命令デコード回路２５に入力されるＮＯＲゲート２２−０〜２２−３の出力が「１」であるならば、自分が実行しようとしている命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド生成命令を見つけた場合に、従来技術で示されているように隣接降番のスレッド実行ユニットに新しいスレッドを生成して実行させる。
【００８４】
また、各スレッド実行ユニットが、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合も、図２のＮＯＲゲート２２−０〜２２−３は同様に振る舞うが、スレッド終了命令に関しては、図３の回路が付加的な役割も果たす。
【００８５】
すなわち、各スレッド実行ユニットの命令デコード回路２５は、接続された図２のＮＯＲゲートゲート２２−０〜２２−３の出力が「０」であるならば、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合に、予めハードウェアにより定められた命令アドレスＹにトラップする。他方、各スレッド実行ユニットの命令デコーダ１２に入力されるＮＯＲゲート２２−０〜２２−３の出力が「１」であるならば、自分が実行しようとしている命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合に、従来技術で示されれているように直接スレッド実行を終了して待機状態に至ろうとする動作が基本となる。
【００８６】
ただし、スレッド終了命令に対しては、最終的には図３の付加回路の働きにより、スレッド終了命令を見つける前に処理したスレッド生成命令をシリアライズ実行していた場合は、図２のＮＯＲゲート２２−０〜２２−３の出力は、図３のＡＮＤゲート２６によりマスクされ、この場合も命令アドレスＹへトラップする動作となる。
【００８７】
プロセッサが機械語命令のスレッド生成や終了命令を実行しようとした際にアドレスＸやアドレスＹにトラップする仕組みに関しては、従来から、ワイアドロジックで実現するのが複雑な命令を、ソフトウェアあるいはファームウェアとしてトラップしてエミュレーションする技術として公知であるので、ここでは、その詳細な説明は省略する。
【００８８】
次に、図８及び図９を参照して、アドレスＸやアドレスＹにトラップした後の処理を説明する。図８は、アドレスＸより開始されるスレッド生成をシリアライズして実行する処理を示すフローチャートである。
【００８９】
本実施形態のプロセッサにおいては、所定のスレッド実行ユニットがハードウェアスケジューリングの下に新しいスレッドを生成するという処理は、新しいスレッドを生成する命令であるｆｏｒｋ命令が表れた時点のレジスタコンテキストを継承して子どもスレッドを生成することである。また、新しく生成されたスレッドは、その終了までに高々１回のみ新たなスレッド生成を行うことが可能である。誤ったスレッド生成を行った場合は、必ず誤って生成したスレッドを強制終了させた後に、スレッドの再生成を行う計算モデルとなっている。したがって、この計算モデルにおいては、スレッド生成命令を実行しようとした際に、その時点のレジスタコンテキストと生成されるスレッドの命令開始番地アドレスをセーブし、実行中だったスレッドの処理を継続実行してスレッド終了命令に実行が到達した後に、セーブしておいた生成すべき新しいスレッドのコンテキストをレジスタ上に復旧し、かつ、生成すべき新しいスレッドの命令開始番地に実行制御を渡すことにより、複数個のスレッド実行ユニットを用いずに、１つのスレッド実行ユニットのみを用いて複数スレッドをシリアライズして実行処理することが可能である。また、シリアライズした実行に必要なコンテキストのセーブエリアは、スレッド実行ユニット毎に高々１個のスレッド情報を保持できれば十分である。したがって、図８のステップ８０２において、各スレッド実行ユニットの個別のメモリ領域に、生成すべきハードウェア起動のスレッド情報（レジスタコンテキストとスレッド開始命令アドレス）を保存し、その後、トラップ元のアドレスに制御を復帰して元のスレッドの継続実行を行う。
【００９０】
以上のようにして、ソフトウェアが新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示を行った場合に、スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段が実現される。
【００９１】
また、図８の、アドレスＸより開始されるスレッド生成をシリアライズして実行する処理においては、シリアライズ処理対象としてセーブした生成すべきスレッドを、後にスレッド終了命令を実行しようとした際に必ず復活可能とするために、図３のセット／リセットフリップフロップ２８に対するセット動作もステップ８０１において行う。
【００９２】
次に、各スレッド実行ユニットが、スレッド終了命令を検出し、かつシリアライズ実行中としてアドレスＹに命令トラップした場合の処理を、図９を参照して説明する。図９に示すように、終了処理は、２通りの場合があり得る。
【００９３】
第１のケースは、終了しようとするスレッドが新しいスレッド生成処理を行っていた場合であり、このケースでは、生成すべき新しいスレッドのコンテキストをレジスタに復旧し、また、新しいスレッドの開始番地に制御を移行する（ステップ９０２、９０３）。
【００９４】
第２のケースは、終了しようとするスレッドが新しいスレッド生成処理を行っていなかった場合であり、このケースでは、スレッド実行ユニットは待機状態に至る（ステップ９０２、９０４）。
【００９５】
これにより、保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、当該スレッド実行ユニット上に復旧することを可能とする手段が実現される。
【００９６】
また、スレッド終了命令を検出し、かつシリアライズ実行中としてアドレスＹに命令トラップした場合は、付加的な処理として、図３のセット／リセットフリップフロップ２８のリセットも行う。
【００９７】
次に、図１０を参照して本実施形態の全体の動きを説明する。図１０は、図２２に示したソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を、時間軸上の分解能を細かくして示した図である。
【００９８】
各スレッド実行ユニットの実行状態の記述において、右側に下方向への矢印付きの線に「値１」または「値０」と付した記述は、各スレッド実行ユニットに対する図２のスレッド実行ユニットステータス２３−０〜２３−３の値を示す。
【００９９】
プログラム処理の流れは、まず、図４で示したプログラム初期化処理を、スレッド実行ユニットＰＥ＃０で開始することにより開始される。スレッド実行ユニットＰＥ＃０が、プログラム初期化処理を開始してステップ４０１の処理を行うことにより、スレッド実行ユニットＰＥ＃０のスレッド実行ステータスは値１（ソフトウェアスケジューリングで使用可能な状態）となる。これにより、スレッド実行ユニットＰＥ＃１〜＃３において、ハードウェアスケジューリングにより生成されたスレッドはシリアライズして実行するモードとなる。
【０１００】
引き続きプログラム初期化処理を行っているスレッド実行ユニットＰＥ＃０は、ステップ４０２の処理を行うことにより、図５のスレッド生成処理を５回実行してソフトウェアスケジューリング対象となるスレッドＴ１〜Ｔ５を生成すると共に、Ｔ１〜Ｔ３の生成時に、スレッド実行ユニットＰＥ＃１〜＃３の各々のスレッド実行ユニットステータスをソフトウェアスケジューリングで使用可能な状態としてディスパッチャーを起動する。
【０１０１】
スレッド実行ユニットＰＥ＃１〜ＰＥ＃３は、ディスパッチャーを介して処理すべきスレッドＴ１〜Ｔ３を受け取り、各々実行を開始する。また、スレッド実行ユニットＰＥ＃０は、ステップ４０２の処理を行った後、スレッドＴ０の実行を開始する。
【０１０２】
ここで、スレッドＴ０〜Ｔ３が並列実行されている状態においては、各ソフトウェアスケジューリング対象スレッドが、ハードウェアスケジューリング対象である機械語命令によるスレッド生成及び消滅を行ないながら処理を進めることになる。しかし、全てのスレッド実行ユニットのスレッド実行ユニットステータスは、ソフトウェアスケジューリング可能な状態で処理を進めているため、機械語命令によるスレッド生成命令及びスレッド終了命令を実行すると、これらの命令はトラップされ、図８及び図９を参照して説明した手段によりシリアライズ処理されていくことになる。スレッドＴ０〜Ｔ３の処理終了時点においては、ソフトウェアスケジューリング対象スレッドの実行終了として、各スレッド実行ユニットは、図６のスレッド終了処理を呼び出すことになる。
【０１０３】
時間軸上、最初にソフトウェアスケジューリング対象スレッドＴ１が終了し、次いでスレッドＴ２が終了するが、これらを実行していたスレッド実行ユニットＰＥ＃１とスレッド実行ユニットＰＥ＃２とは、各々図６のスレッド終了処理、続く図７のディスパッチャーへと処理が進んで、再度、まだ処理がされていないスレッドＴ４、Ｔ５を実行開始することとなる。
【０１０４】
次に、時間軸上ソフトウェアスケジューリング対象スレッドＴ０を実行していたスレッド実行ユニットＰＥ＃０が、実行終了状態に到達し、図６のスレッド終了処理を行って、続く図７のディスパッチャーに制御が移る。
【０１０５】
この時点において、ソフトウェアスケジューリング対象スレッドにおいてスレッド実行ユニットに割り当てられていないものは存在しない状態となっているため、スレッド実行ユニットＰＥ＃０は、ステップ７０７の処理に至って、自スレッド実行ユニットのスレッド実行ユニットステータスを、ハードウェアスケジューリングで使用可能な状態に変更して待機状態に陥る。
【０１０６】
次いで、同様にスレッドＴ４を実行していたスレッド実行ユニットＰＥ＃１も、処理を終了し、同様に自スレッド実行ユニットのスレッド実行ユニットステータスを、ハードウェアスケジューリングで使用可能な状態に変更して待機状態に陥る。
【０１０７】
さらに、スレッドＴ３を実行していたスレッド実行ユニットＰＥ＃３が、処理を終了し、図７のディスパッチャーに制御が移る。ここでは、ステップ７０５の処理において、自スレッド実行ユニットＰＥ＃３が待機状態に至ると、残る処理実行中のＰＥが一台のみになることを判定して、ステップ７０８の処理を行うことになる。ステップ７０８の処理が完了した時点においては、図２のスレッド実行ユニットステータスの内、スレッド実行ユニットＰＥ＃０とスレッド実行ユニットＰＥ＃１とスレッド実行ユニットＰＥ＃２とがハードウェアスケジューリング実行で使用可能な状態を指し示すこととなる。この時点で、ＮＯＲ回路２２−０〜２２−３の出力は、順番に、「０」、「０」、「０」、「１」となる。当該出力が接続される、図１の各スレッド実行ユニットの命令デコーダ１２−０〜１２−３においては、スレッド実行ユニットＰＥ＃３のみがハードウェアスケジューリング対象のスレッドを直接実行可能と判断できる状態となる。
【０１０８】
他方、スレッド実行ユニットＰＥ＃３は、ステップ７０８の処理を実行した後にステップ７０７の処理を実行するため、この時点ではハードウェアスケジューリング処理対象のスレッドを生成することはない。しかし、ステップ７０７の処理を実行すると、図２のスレッド実行ユニットステータス２１−０〜２１−３は、全てがハードウェアスケジューリング実行で使用可能な状態を指し示すこととなる。この状態に到達すると、ＮＯＲ回路２２−０〜２２−３の出力は、順番に、「１」、「１」、「１」、「１」となり、全てのＰＥがハードウェアスケジューリング対象のスレッドを実行可能な状態に到達する。
【０１０９】
ソフトウェアスケジューリング対象のスレッドＴ５を実行していたスレッド実行ユニットＰＥ＃２は、この時点以降において、ハードウェアスケジューリング対象のスレッド生成機械語命令を実行しようとすると、図５で示したトラップしてシリアライズする実行には陥らず、順次、全てのスレッド実行ユニット資源を利用してハードウェアスケジューリングの下に高速実行を行うこととなる。
【０１１０】
図６において、スレッドＴ５の符号に「Ｔ５ａ」と「Ｔ５ｂ」のように最後の文字にａ、ｂを付与しているのは、ハードウェアスケジューリングによるスレッド実行がシリアライズされて処理されている期間をＴ５ａ、ハードウェアスケジューリングにより直接複数のスレッド実行ユニット資源を用いて並列処理実行が行われている期間をＴ５ｂと区別して記載したものである。
【０１１１】
図１１は、本発明の他の実施の形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【０１１２】
本実施形態本実施形態のマルチスレッドプロセッサは、図１に示した第１の実施形態と同様に、４スレッド並列実行型プロセッサであり、スレッド管理ユニット３０と、４組のスレッド実行ユニット（ＰＥ＃０〜ＰＥ＃３）１０−０〜１０−３と、物理共有レジスタファイル２０と、実行ユニットステータス５０とを備える。
【０１１３】
スレッド実行ユニット１１０−０〜１１０−３は、それぞれ、第１の実施形態におけるスレッド実行ユニット１０−０〜１０−３と同様に、命令キャッシュ（＃０〜＃３）１１−０〜１１−３と、命令デコーダ（＃０〜＃３）１２−０〜１２−３と、レジスタ写像テーブル（＃０〜＃３）１３−０〜１３−３と、演算ユニット（＃０〜＃３）１４−０〜１４−３と、セレクタ１５−０〜１５−３とを備えると共に、待避記憶（＃０〜＃３）１１１−０〜１１１−３を備える。また、第１の実施形態と同様に、レジスタ写像テーブル１３−０〜１３−３は、それぞれ写像情報転送バス４０によってリング状をなすように、隣接するレジスタ写像テーブルに接続されている。
【０１１４】
待避記憶１１１−０〜１１１−３は、ソフトウェアにおいて、新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示がなされた場合に、当該スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段であり、ハードウェアスケジューリングの対象であるスレッドの情報を待避するために用いられる。
【０１１５】
待避記憶１１１−０〜１１１−３を設けたことにより、本実施形態は、ハードウェアスケジューリングの対象であるスレッドをシリアライズして実行する状態において、ハードウェアスケジューリングの対象となる機械語命令によるスレッド生成命令及びスレッド終了命令を実行しようとした場合に、図２で示したような命令トラップを用いたソフトウェア処理を行わず、直接、ハードウェアシーケンスにより各スレッド実行ユニットが備える待機記憶１１１−０〜１１１−３を用いてスレッドの情報の待避と復旧とを行うことが可能である。
【０１１６】
その他の構成要素及び動作については、図１乃至図１０７を参照して説明した第１の実施形態の構成要素及び動作と同一であるため、説明を省略する。
【０１１７】
以上好ましい実施形態をあげて本発明を説明したが、本発明は必ずしも上記実施形態に限定されるものではない。
【０１１８】
【発明の効果】
以上説明したように、本発明のマルチスレッドプロセッサによれば、ハードウェアスケジューリングに基づく細粒度での並列プログラム実行と、ソフトウェア・ライブラリ・スケジューラを用いた柔軟な並列実行スケジューリングとを混在して実行可能であるため、効率的にプログラムの実行を行うことにより、プログラム全体の処理時間を短縮できるという効果を有する。
【図面の簡単な説明】
【図１】本発明の一実施形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【図２】本実施形態における実行ユニットステータスの内部構造を示す回路図である。
【図３】本実施形態におけるスレッド実行ユニットの命令デコーダの内部構造を示す回路図である。
【図４】ＯＳ等から起動されて動作し始めるユーザプログラムの初期化において、ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行に係わる動作を示すフローチャートである。
【図５】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、スレッド生成ルーチンを示す図である。
【図６】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、スレッド終了ルーチンを示す図である。
【図７】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、ディスパッチャーの処理を示す図である。
【図８】スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合のスレッド生成動作を示すフローチャートである。
【図９】スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合のスレッド終了動作を示すフローチャートである。
【図１０】ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を、時間軸上の分解能を細かくして示した図である。
【図１１】本発明の他の実施形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【図１２】本発明の実施形態におけるスレッド実行ユニットのパイプラインステージを示す図である。
【図１３】本発明の実施形態における物理共有レジスタファイルの詳細な構成を示す図である。
【図１４】本発明の実施形態における物理レジスタのフォーマットを示す図である。
【図１５】本発明の実施形態におけるレジスタ写像テーブルの詳細な構成を示す図である。
【図１６】本発明の実施形態におけるレジスタ写像テーブルの１エントリの詳細な構成を示す図である。
【図１７】本発明の実施形態において、通常の動作時のグループ選択ビット、物理拡張ビット変更ビットの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明する図である。
【図１８】本発明の実施形態において、投機的なスレッド生成を伴う場合のグループ選択ビット、物理拡張ビット、変更ビットの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明するための図である。
【図１９】図１２に示すパイプラインの動作における写像情報のコピーのタイミングを示す図である。
【図２０】ハードウェアスケジューリングによるスレッド実行方法を説明する図である。
【図２１】ソフトウェアスケジューリングによるスレッド実行方法を説明する図である。
【図２２】ハードウェアスケジューリングとソフトウェアスケジューリングとを混在させたスレッド実行方法を説明する図である。
【符号の説明】
１０−０〜１０−３    スレッド実行ユニット
１１−０〜１１−３    命令キャッシュ
１２−０〜１２−３    命令デコーダ
１３−０〜１３−３    レジスタ写像テーブル
１４−０〜１４−３    演算ユニット
１５−０〜１５−３    セレクタ
２０    物理共有レジスタファイル
３０    スレッド管理ユニット
４０    写像情報転送バス
５０    実行ユニットステータス
【図１】
0003604029.tif 000002
【図２】
0003604029.tif 000003
【図３】
0003604029.tif 000004
【図４】
0003604029.tif 000005
【図５】
0003604029.tif 000006
【図６】
0003604029.tif 000007
【図７】
0003604029.tif 000008
【図８】
0003604029.tif 000009
【図９】
0003604029.tif 000010
【図１０】
0003604029.tif 000011
【図１１】
0003604029.tif 000012
【図１２】
0003604029.tif 000013
【図１３】
0003604029.tif 000014
【図１４】
0003604029.tif 000015
【図１５】
0003604029.tif 000016
【図１６】
0003604029.tif 000017
【図１７】
0003604029.tif 000018
【図１８】
0003604029.tif 000019
【図１９】
0003604029.tif 000020
【図２０】
0003604029.tif 000021
【図２１】
0003604029.tif 000022
【図２２】
0003604029.tif 000023