JP3604029B2 - マルチスレッドプロセッサ - Google Patents
マルチスレッドプロセッサ Download PDFInfo
- Publication number
- JP3604029B2 JP3604029B2 JP00586399A JP586399A JP3604029B2 JP 3604029 B2 JP3604029 B2 JP 3604029B2 JP 00586399 A JP00586399 A JP 00586399A JP 586399 A JP586399 A JP 586399A JP 3604029 B2 JP3604029 B2 JP 3604029B2
- Authority
- JP
- Japan
- Prior art keywords
- thread
- instruction
- register
- unit
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
Description
【発明が属する技術分野】
本発明は、情報処理装置において複数の命令を同時に実行するマルチスレッドマイクロプロセッサに関し、特に複数のスレッドの実行スケジューリング技術に特徴を有するマルチスレッドプロセッサに関する。
【0002】
【従来の技術】
シングルプログラムを高速実行する技術として、プログラムを複数のスレッド(命令流)に分割し、そのスレッドレベルで並列処理を行う技術がある。また、当該技術分野において、スレッドの生成、プロセッサ実行資源へのスレッド割り当て及び実行、スレッドの終了及び消滅といった基本的な処理を機械語命令レベルで実現することにより、より細粒度のスレッドでも高速な実行を目指す方式が提案されている。
【0003】
この種の従来技術として、例えば、文献「Multiscalar Processor」(G.S.Sohi,S.E.Breach and T.N.Vijaykumar,The 22nd International Symposium on Computer Architecture,IEEEComputer Society Press,1995,pp.414−425)に開示された技術や、文献「On−Chip Multiprocessor指向制御並列アーキテクチャMUSCATの提案」(鳥居、近藤、本村、小長谷、西、並列処理シンポジウムJSPP97論文集、情報処理学会、pp.229−236,May 1997)に開示された技術がある。
【0004】
これらの文献において開示されている技術によれば、C言語等のプログラミング言語で書かれたプログラムの中のベーシックブロックや、ベーシックブロックをいくつかまとめて見たマクロベーシックブロックのレベルで並列化して処理を高速化することが可能であり、非常に小さなプログラム粒度(μsecオーダ)においても高速化可能である。
【0005】
MultiscalarやMUSCAT等の細粒度スレッド実行方式における大きな特徴としては、高速なスレッド生成及び実行資源に割り付けるためのハードウェアスケジューリングと、スレッド間での高速なデータ授受を可能とするためのレジスタ内容継承がある。スレッドのハードウェアスケジューリングに係わる従来技術としては、例えば特開平10−27108号公報に開示されたスレッド実行方式がある。また、レジスタ内容継承に係わる技術として、本出願人による特許出願(特願平10−117666号)がある。これらの技術は、シーケンシャルな順序実行モデルに基づくプログラムを、細粒度で分割して並列実行し、高速実行を可能にする。また、プログラムのスレッド分割をコンパイラにて自動で行うことをも視野にいれた技術である。
【0006】
また、スレッド並列実行に係わる技術においては、前記のようなプロセッサハードウェアにおいてマルチスレッドをサポートしようとする技術の他に、プログラミングモデルとして陽に並列性を記述する並列プログラミングモデルも存在する。そして、SMP型マルチプロセッサを使用して実際に並列実行を可能とする試みもさかんである。例えば、文献「BSD UNIX上での移植性にすぐれた計量プロセス機構の実現」(阿部、松浦、谷口、情報処理学会論文誌、Vol.36,No.2,pp.296−303,Feb.1995.)に開示されるように、ソフトウェア技術において可能な範囲で、より軽量かつ高速なソフトウェアスレッドを実現すべく、ユーザレベルのライブラリスケジューラを用いた研究がさかんに行われている。
【0007】
これら従来の技術における、複数のスレッドの並列実行に対するハードウェアによるスケジューリングとソフトウェアによるスケジューリングとを比較した場合、一方の長所と短所とは、他方の短所と長所とになる。
【0008】
すなわち、ハードウェアによるアプローチにおいては、長所として、並列処理粒度が非常に小さくても並列処理による加速が可能であることが挙げられる。また、短所として、ハードウェアが直接管理、記憶保持するため、スケジューリング可能なスレッド数に制限が強いこと、ハードウェアによるスケジューリングは、必ずしもソフトウェアとして望む性能特質を実現するものとはならない場合も多く、柔軟性に欠けることが挙げられる。
【0009】
一方、ソフトウェアによるアプローチにおいては、長所として、管理可能なスレッド数をハードウェアアプローチと比べて非常に大きくすることが可能であり、GUI(Graphics User Interface)プログラムや通信トランザクション処理においてよく用いられる、イベント駆動型のプログラミングスタイルへの適用性が高いこと、スケジューリング方法が、対象アプリケーションごとに個別に要求される特性に対して個々にチューニング可能であり柔軟性が高いことが挙げられる。また、短所として、並列処理粒度が小さいとオーバヘッドが大きくなるため、高速化が難しいことが挙げられる。
【0010】
すなわち、ハードウェアアプローチとソフトウェアアプローチとは、互いに相手を補完する性質を備えるため、両方の機能を混在動作可能とし、かつ自在にいずれのアプローチをも組み合わせて使えることが望ましい。
【0011】
次に、ハードウェアスケジューリングとソフトウェアスケジューリングとの混在プログラムの実行に関する問題を一段掘り下げて説明する。図20乃至図22は、msecオーダの6個の並列処理可能な仕事(T0〜T5スレッド)を例題として並列化粒度とスケジューリングとの問題を説明する概念図である。
【0012】
図20は、元々のmsecオーダの仕事を、スレッドT0→スレッドT1→…→スレッドT5の順で生成及び実行を行う形として、MultiscalarやMUSCATにおいてハードウェアスケジューリングを行った場合のスケジューリングを示している。ここでは、高速なスレッド生成と実行資源への割り当てとを可能とするために、スレッド実行ユニット(PE#0〜PE#3)間は、方向リングで指し示される方向に対してのみ、新規スレッドの生成と実行開始が可能となっている。したがって、PE#3実行中のスレッドT3が新たなスレッドT4を生成しようとすると、PE#0がT0の実行を完了した後にT4が開始されることとなる。このため、T1やT2のようにT0よりも早期に終了してアイドル状態となっているPE#1やPE#2が有効活用されず、無駄時間が生じてしまう。この問題が解決可能かどうかは、現実にはスレッド粒度と密接な関係がある。すなわち、PE#1やPE#2のアイドル時間がμsecオーダであるならばこのアイドル時間を活用していくのは難しい面もあるが、アイドル時間がmsecオーダ以上であれば、ソフトウェアスケジューリングの方がうまくスケジューリングを行うことが可能である。
【0013】
図21は、ソフトウェアスケジューリングによる、ユーザレベルのライブラリスケジューラを用いてスケジューリングを行った場合を示している。ソフトウェアスケジューラを用いれば、アイドル状態となったPEは、ライブラリスケジューラに制御を移して次に実行すべきスレッドを探すことが可能である。これにより、PE#1やPE#2は各々T1とT2終了後に直ちにT4とT5を実行開始することが可能となる。このため、図20に対して全終了時刻を短縮することが可能となる。しかしながら、この図21の状態においては、最終的にT5の実行を受け持ったPE#2が処理終了するまでは、PE#0、#1、#3はアイドル状態で待機することとなるため、まだ効率が悪い面がある。
【0014】
そこで、図20や図21を参照して提示した問題を踏まえ、ハードウェアスケジューリングとソフトウェアスケジューリングとを混在させた実行例を図22に示す。図22においては、元々、T0〜T5の各仕事はその単位においてユーザレベルスケジューラを用いて並列化されたものを第一階層の並列化とする。そして、第二階層の並列化として、T0〜T5の内部をハードウェアスケジューラで処理される形に並列化したプログラムを想定している。すなわち、図22に示すように、最後に処置中のT5は、他のPE#0、#1、#3がアイドル状態になった時点で、ハードウェアスケジューリングレベルで粒度の小さい形での並列処理を行うことにより、さらに高速化を行うことを可能としている。
【0015】
しかし、図22に示すような処理を行わせるためには、T0〜T5の内部をハードウェアレベルで並列化可能としておき、プログラムに対して、他のPEが空き状態であるならば当該他のPEを使い、他のPEがソフトウェアスケジューリングにより使用中であるならば、ハードウェアレベルで起動しようとしている新しいスレッドを、自PE上で時間軸でシリアライズして処理できるように制御する必要があった。
【0016】
【発明が解決しようとする課題】
上述したように、従来のマルチスレッドプロセッサにおけるスレッド実行方法には、ハードウェアによるスケジューリングとソフトウェアによるスケジューリングとがある。そして、両アプローチには互いに相反する長所と短所とが存在することから、両方の機能を混在させ、自在に組み合わせて動作させることが望ましい。
【0017】
しかし、そのような動作を行うためには、複数のスレッドの内部をハードウェアレベルで並列化可能とし、各スレッド実行ユニットにおいて、他のスレッド実行ユニットの使用状況に応じてプログラムの処理方法を選択する制御を実現する必要があった。
【0018】
本発明の目的は、上記従来の課題を解決し、複数のスレッドの並列実行において、ハードウェアによるスケジューリング機能とソフトウェアによるスケジューリング機能とを混在させ、かつ自在に組み合わせて動作させることを実現したマルチスレッドプロセッサを提供することにある。
【0019】
【課題を解決するための手段】
上記の目的を達成する本発明は、複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、前記スレッド実行ユニットが、処理中のスレッドが高々1回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、さらに、前記スレッド生成手段により前記スレッド生成命令に基づいて生成される新しいスレッドを、スレッド生成命令を実行する前記スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアにて直接行うスレッド割り当て手段と、任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とする。
【0020】
また、上記の目的を達成する他の本発明は、複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、前記スレッド実行ユニットが、処理中のスレッドが高々1回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、前記複数のスレッド実行ユニットに共有され複数の物理レジスタからなる共有物理レジスタファイルと、前記複数のスレッド実行ユニットに設けられ前記スレッド実行ユニット内の1つの論理レジスタと前記共有物理レジスタファイル中の特定の複数の物理レジスタの1つとの間に写像関係を定義する変換テーブルと、前記複数のスレッド実行ユニットの変換テーブルの情報を隣接するスレッド実行ユニットにコピーする変換テーブル情報コピー手段とを有し、1つの前記論理レジスタとの間で写像関係が定義されている複数の前記物理レジスタ毎にグループ化し、該グループ内の位置を示す情報を前記変換テーブルの情報に付加して前記写像関係を定義することにより、レジスタ内容の継承を行うレジスタ内容継承装置と、任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とする。
【0021】
また、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする。
【0022】
また、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスXにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、前記命令アドレスXをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、前記スレッド実行終了命令実行検出手段が、前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスYにトラップし、前記レジスタコンテキスト復旧手段が、命令アドレスYをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧することを特徴とする。
【0023】
さらにまた、他の態様では、上記いずれかの本発明において、前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた1組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させることを特徴とする。
【0024】
【発明の実施の形態】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の一実施の形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。本実施形態のマルチスレッドプロセッサは、図1に示すように、4スレッド並列実行型プロセッサであり、スレッド管理ユニット30と、4組のスレッド実行ユニット(PE#0〜PE#3)10−0〜10−3と、物理共有レジスタファイル20と、実行ユニットステータス50とを備える。
【0025】
スレッド実行ユニット10−0〜10−3は、それぞれ、命令キャッシュ(#0〜#3)11−0〜11−3と、命令デコーダ(#0〜#3)12−0〜12−3と、レジスタ写像テーブル(#0〜#3)13−0〜13−3と、演算ユニット(#0〜#3)14−0〜14−3と、セレクタ15−0〜15−3とを備える。また、レジスタ写像テーブル13−0〜13−3は、それぞれ写像情報転送バス40によってリング状をなすように、隣接するレジスタ写像テーブルに接続されている。
【0026】
実行ユニットステータス50は、各スレッド実行ユニット(PE#0〜PE#3)10−0〜10−3内の命令デコーダ部12−0〜12−3と、物理共有レジスタファイル20から演算ユニット14−0〜14−3へデータ及びコマンドを接続するバスまたは演算ユニット14−0〜14−3から実行結果を物理共有レジスタ20に戻すバスを選択するセレクタ15−0〜15−3とに接続されている。
【0027】
なお、図1には、本実施形態における特徴的な構成のみを記載し、他の一般的な構成については記載を省略してある。例えば、プロセッサとしては、上記の構成の他にロードストアユニットやデータキャッシュメモリ、外部インタフェース等が必要であるのは言うまでもない。また、以下の説明では、スレッド実行ユニット10−0〜10−3及びスレッド実行ユニット10−0〜10−3の構成要素である命令キャッシュ11−0〜11−3、命令デコーダ12−0〜12−3、レジスタ写像テーブル13−0〜13−3、演算ユニット14−0〜14−3、セレクタ15−0〜15−3において、特に個々の構成要素を区別する必要がない場合は、適宜符号の添え字を省略し、例えばスレッド実行ユニット10、命令キャッシュ11、命令デコーダ12というように表記する。
【0028】
本実施形態のマルチスレッドプロセッサは、任意のスレッド実行ユニットにおいて処理中のスレッドが新たなスレッド生成を行うことを可能とする機械語命令及び任意のスレッド実行ユニットにおいて処理中のスレッドが終了することを可能とする機械語命令を備え、任意のスレッド実行ユニットにおいて処理中のスレッドは高々1回の新たなスレッド生成を行い、新たなスレッド生成を行う機械語命令の処理において、当該命令に基づいて生成される新しいスレッドを当該スレッド実行ユニット以外のスレッド実行ユニットに割り当てる制御をハードウェアが直接行うことにより実現されるレジスタ内容の継承手段を備えることが前提となっている。上述したスレッド管理ユニット30、スレッド実行ユニット10−0〜10−3及び物理共有レジスタファイル20が、レジスタ内容の継承手段を実現する。そこで、まず、当該レジスタ内容の継承手段について説明する。
【0029】
図12は、図1のスレッド実行ユニット10−0〜10−3のパイプラインステージを示す図である。図12を参照すると、スレッド実行ユニット10−0〜10−3のパイプラインステージにおいては、命令フェッチステージ1201、命令デコードステージ1202、レジスタ変換ステージ1203、実行ステージ1204、レジスタ書き戻しステージ1205の5段のステージを経て実行が完了する。
【0030】
図13は、図1の物理共有レジスタファイル20の詳細な構成を示す図である。図13を参照すると、物理レジスタファイル20は、論理レジスタ番号202毎にスレッド実行ユニット10−0〜10−3の数の2倍の物理レジスタ201を備えて構成される。したがって、本実施例では、1つの論理レジスタに対して8個の物理レジスタ201が対応付けられる。各物理レジスタ201は、グループ選択ビット203のA、Bの2つのグループ204、205に分けられ、それぞれ、スレッド実行ユニット10−0〜10−3の数分の物理拡張ビット206を持つ。
【0031】
図14は、図13の物理レジスタ201のフォーマットを示す図である。図14を参照すると、物理レジスタ201は、32本の論理レジスタセットを持つ命令セットの場合、物理拡張ビット206と、グループ選択ビット203と、論理レジスタ番号202とからなる。この場合、論理レジスタセットの数が変化すると論理レジスタ番号202を示すビット数が変化し、スレッド実行ユニット10−0〜10−3の数が変化すると物理拡張ビット206の値が変化する。
【0032】
図15は、図1のレジスタ写像テーブル13の詳細な構成を示す図である。図15を参照すると、レジスタ写像テーブル13は、論理レジスタ番号202ごとにグループ選択ビット1501によって選択されるA、Bのグループに分けられ、それぞれ、物理拡張ビット1503と、変更ビット1504と、書き戻しビット1505と、継承時グループ選択ビット1502と、グループ選択変更命令未完了ビット1506とから構成される。グループ選択ビット1501は、当該スレッド実行ユニット10−0〜10−3が参照する物理共有レジスタファイル20のグループを示しており、物理拡張ビット1503によって、その中のどの物理レジスタ201を参照するかを示している。変更ビット1504は、当該スレッド実行ユニット10−0〜10−3によって、グループ選択ビット1501により選択されている物理レジスタ201を更新する命令を1回以上デコードしたか否かを示す。書き戻しビット1505は、物理レジスタ201を更新した命令が1個以上実際に完了したか否かを示す。継承時グループ選択ビット1502は、レジスタを当該スレッド実行ユニット10−0〜10−3から別のスレッド実行ユニット10−0〜10−3に継承した時点でのグループ選択ビット1501の内容をコピーしたものである。
【0033】
図16は、図1のレジスタ写像テーブル13の1エントリの詳細な構成を示す図である。図16を参照すると、レジスタ写像テーブル13は、図15に示すビット以外に、加算機1601a、1601bと、マルチプレクサ1602a〜1602dと、書き込み動作論理1603とを備える。
【0034】
グループ選択ビット1501は、フォーク1回モデルにおけるフォーク、すなわちスレッド生成が行なわれた後に、当該スレッド実行ユニット10−0〜10−3の命令によって1回目にレジスタ値を変更した場合にセットされる。フォーク後の1回目の書き換えか否かの判断は、グループ選択ビット1501と継承時グループ選択ビット1502との値の排他的論理輪を取って行う。継承時グループ選択ビット1502は、スレッド生成時のグループ選択ビット1501のコピーを保持しているので、当該判断を行なうことができる。
【0035】
また、変更ビット1504a、1504bは、自スレッドの起動時にはリセットされる。その後、当該レジスタ値を変更する命令を命令デコーダ12−0〜12−3から受け取った際に、グループ選択ビット1501で選択されている側の変更ビット1504a、1504bがセットされる。
【0036】
書き戻しビット1505a、1505bは、自スレッドの起動時にリセットされており、演算ユニット14によって演算された実際の計算結果が物理共有レジスタファイル20に書き戻される際にセットされる。これによって、以下のような参照方針で、論理レジスタに対して物理レジスタ番号の拡張を行なう。
【0037】
まず、呼び出し参照時、マルチプレクサ1602a、1602bは、変更ビット1504a、1504bがリセットされているときに、物理拡張ビット1503a、1503bの値に、加算機1601a、1601bにより加算した値を出力する。物理拡張ビット1503a、1503bの値に1を加算することにより、非選択側が用いる物理共有レジスタファイル20において、レジスタの競合の発生を防止している。レジスタの競合の発生の防止は、非選択側における自ユニットでの変更時に用いられるため、前段のユニットと自ユニットとが、あるいは自ユニットと後段のユニットとが同じレジスタを使用しないようにすることで実現できる。
【0038】
マルチプレクサ1602cは、グループ選択ビット1501によって、AグループまたはBグループのどちらかの値を読み出して参照用の物理拡張ビット206として出力するかを選択する。一方、書き込み参照用の物理拡張ビット206は、AグループまたはBグループのどちらを選択するにしても、常に物理拡張ビット1503a、1503bに1を加算した値を出力する必要がある。
【0039】
したがって、マルチプレクサ1602dに対する入力は、AグループまたはBグループのどちらも物理拡張ビット1503a、1503bから加算機1601a、1601bを通った値を用いる。AグループまたはBグループの選択は、基本的にグループ選択ビット1501の値に従うが、上述したグループ選択ビット41を切り替える際には、先行して切り替え先の方のグループを選択する。この制御は、書き込み動作論理1603によって行われる。また、物理拡張ビット1503a、1503bは、加算によって用意された桁が溢れると、0に戻される。さらに、スレッド生成時には、グループ選択ビット1501及びマルチプレクサ1602a、1602bから出力される物理拡張ビット1503a、1503bをスレッド生成先のレジスタ写像テーブル13を介してコピーする。
【0040】
以下、スレッド起動後の通常のレジスタ参照動作、スレッド生成時の動作及びスレッド生成後のレジスタ参照動作について、それぞれ時間順序を追って説明する。以下の説明は、主に図12におけるレジスタ変換ステージ1203によって行なわれる動作である。
【0041】
図17は、通常の動作時のグループ選択ビット1501、物理拡張ビット1503a、1503b、変更ビット1504a、1504bの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明する図である。なお、書き戻しビット1505a、1505bの動作については後述する。
【0042】
スレッド実行ユニット(#0)10−0において、新規スレッドが起動した(イ)の時点では、グループ選択ビット1501は「A」となっており、物理拡張ビット1503a、1503bは0、変更ビット1504a、1504bは0となっている。この場合、論理レジスタは「A」の0に位置する物理レジスタ201を読み出して参照する。
【0043】
書き込み参照が生じた際、すなわちレジスタ変更(ロ)の時点では、「A」の変更ビット1504aが1にセットされる。変更は「A」の1に位置する物理レジスタ201に対して行われ、その後の読み出し参照も同一レジスタに対して行われる。その後、同一レジスタに対する書き込み参照が生じても、グループ選択ビット1501や変更ビット1504a、1504bは変更しない。
【0044】
次に、新たにスレッドを生成する(ハ)の時点では、グループ選択ビット1501は「A」であるので「A」をセットされ、変更ビット1504aは選択側でセットされており、変更ビット1504bは非選択側なので、物理拡張ビット1503a、1503bの値に1を加算した値を加算した値をスレッド実行ユニット(#1)10−1のレジスタ写像テーブル13−1対して送信する。
【0045】
スレッド実行ユニット(#0)10−0がスレッド生成後に初めてレジスタ書き込み参照を行う際、すなわち(ニ)の時点では、グループ選択ビット1501を「A」から「B」に変更し、変更ビット1504bをセットする。変更は「B」の1に位置する物理レジスタ201に対して行われ、その後の読み出し参照も同一レジスタに対して行われる。その後、同一レジスタに対する書き込み参照が生じても、グループ選択ビット1501や変更ビット1504a、1504bは変更しない。これによって、スレッド実行ユニット(#1)10−1で参照する可能性のあるレジスタは、「A」の0の位置で保持されたままとなる。
【0046】
スレッド実行ユニット(#1)10−1では、レジスタの書き込み参照を起こすことなく、(ホ)の時点で新スレッドを生成している。したがって、グループ選択側の「A」の物理拡張ビット1503aは、そのままの値を送信している。したがって、スレッド実行ユニット(#0)10−0で実行しているスレッドのレジスタの内容は、そのままスレッド実行ユニット(#2)10−2で実行されるスレッドに継承される。また、(ヘ)の時点で、レジスタ変更が行われた際には、フォーク後であるので、グループ選択ビット1501を「A」から「B」にする。
【0047】
図18は、投機的なスレッド生成を伴う場合のグループ選択ビット1501、物理拡張ビット1503a、1503b、変更ビット1504a、1504bの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明するための図である。図18に示した動作のうち、(イ)〜(ニ)は、図17の(イ)〜(ニ)の動作と同一である。
【0048】
図17の(ホ)の時点で、スレッド実行ユニット(#0)10−0は、(ハ)の時点において生成したスレッドの生成を取り消す。さらに、(ヘ)の時点で再びスレッドを生成する。グループ選択ビット1501は「B」であるので「B」をセットされ、変更ビット1504a「A」は選択側でセットされており、「B」は非選択側なので、物理拡張ビット1503a、1503bの値に1を加算した値をスレッド実行ユニット(#1)10−1のレジスタテーブル13−1に対して送信する。これによって、(ニ)の時点で変更された値が、スレッド実行ユニット(#1)10−1で実行されるスレッドに継承される。(ト)の時点で、再びレジスタが変更された場合は、グループ選択ビット1501を再び「A」に戻す。
【0049】
図19は、図12に示したパイプラインの動作における写像情報のコピーのタイミングを示す図である。図19を参照すると、レジスタ写像情報のコピーは、スレッド生成命令がレジスタ変換ステージ(図19ではサイクル5)においてスレッド実行ユニット(#0)10−0からレジスタ継承情報が送信され、サイクル6においてスレッド実行ユニット(#1)10−1のレジスタ写像テーブル13−1に書き込まれる。通常命令Eは、サイクル7において、当該レジスタ写像テーブル13−1を参照して継承したレジスタをアクセスする。なお、スレッド生成先のスレッド実行ユニット10−0〜10−3が他のスレッドを実行中であり、スレッドの新規生成要求を受けられない場合は、その後に受付け可能になった時点で、継承時グループ選択ビット1502の値を、グループ選択ビットの1501の代わりに送信すればよい。
【0050】
次に、書き戻しビット1505a、1505bの動作について説明する。書き戻しビット1505a、1505bは、レジスタを書き込み参照する命令が何らかの原因(例えば、条件分岐命令の予測の失敗等)により取り消された場合に、変更ビット1504a、1504bを正しい値に復帰するために用いられる。
【0051】
書き戻しビット1505a、1505bは、自スレッドの起動時にグループ選択ビット1501によってリセットされている。リセットされている書き戻しビット1505a、1505bは、演算ユニット14によって演算された実際の計算結果が物理共有レジスタファイル20に書き戻される際にセットされる。すなわち、変更ビット1504a、1504bがセットされており、かつ書き戻しビット1505a、1505bがセットされていないということは、まだ変更ビット1504a、1504bをセットした命令が完了していないことを意味する。したがって、この段階で命令取り消しの事象が発生した場合は、書き戻しビット1505a、1505bの内容を変更ビット1504a、1504bにコピーして初期値に戻すことによって、命令取り消しの際にレジスタ写像テーブル13を正しい値に復帰させる。
【0052】
さらに、グループ選択変更命令未完了ビット1506は、スレッド起動時にはリセットされており、グループ選択ビット1501を変更する命令がレジスタ変換ステージ1203に達した時にセットされ、レジスタ書き戻しステージ1205に達した時にリセットされる。すなわち、グループ選択変更命令未完了ビット1506がセットされている間は、グループ選択ビット1501を変更する命令が完了していないことになる。この状態で命令の取り消しが生じた場合は、セットされているグループ選択変更命令未完了ビット1506に対応してグループ選択ビット1501を反転させる。その後、グループ選択変更命令未完了ビット1506をリセットする。
【0053】
以上説明した方法により、レジスタの実内容のコピーを行うことなく、また共有資源を物理共有レジスタファイル20のみとして、レジスタの継承を実現することが可能となる。各物理拡張ビット206は、継承の際に高々1が加算されるだけであり、スレッド実行ユニット10−0〜10−3の数分のレジスタグループを2組持つことによって、これらの機構は実現可能である。
【0054】
次に、上述したレジスタ内容の継承装置を用いたプロセッサ装置において、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する本実施形態について説明する。
【0055】
本実施形態は、図1に示すように、レジスタ内容の継承手段を実現するスレッド管理ユニット30、スレッド実行ユニット10−0〜10−3及び物理共有レジスタファイル20からなる構成に、命令デコーダ12−0〜12−3に追加論理を加え、実行ユニットステータス50をさらに備える。当該実行ユニットステータス50が、任意のスレッド実行ユニットにおいて処理中のスレッドが新たなスレッド生成を行う機械語命令を処理しようとした際に、当該命令の要求に基づいて生成されるべき新しいスレッドを、当該スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアが直接行うべきかどうかをソフトウェアにおいて指示できるようにする。
【0056】
図2は、図1における実行ユニットステータス50の内部構造を示した回路図である。図2を参照すると、実行ユニットステータス50は、スレッド実行ユニットステータス#0〜#3(21−0〜21−3)と、NOR論理ゲート(22−0〜22−3)と、各スレッド実行ユニットからのステータス書き込み先を選択するためのセレクタ(23−0〜23−3)と、各スレッド実行ユニットからのステータス読み出しエントリを選択するためのセレクタ(24−0〜24−3)とを備える。
【0057】
図3は、図1における命令デコーダ12−0〜12−3の内部構造を示した回路図である。図3を参照すると、命令デコーダ12−0〜12−3は、上述したレジスタ内容の継承手段を用いたプロセッサ装置における命令デコーダ機能に相当する機能を備える命令デコーダ回路25と、ANDゲート26、インバータ27、セット/リセットフリップフロップ28とを備える。
【0058】
命令デコーダ回路25に付加された回路が果たす機能の全体との関連づけについては後述することとし、ここでは、その回路的な動作を説明する。
【0059】
命令デコード回路25は、実行中の命令シーケンス中にハードウェアスケジューリング対象の機械語による新しいスレッド生成命令を見出した場合、ANDゲート26の指示基づいて命令アドレスXへトラップすべきかどうかを判定して動作する。ANDゲート出力が値「0」をとる場合は、命令アドレスXへのトラップ動作を起こし、ANDゲート26の出力値が「1」の場合は、命令アドレスXへのトラップは起こさず直接ハードウェアスケジューリングによる新しいスレッド生成動作を行う。命令デコード回路25が命令アドレスXへトラップすべきと判定した場合、命令デコード回路25は、セット/リセットフリップフロップ28にセット動作を行い、フリップフロップ28の値を「1」とする。
【0060】
また、命令デコード回路25は、実行中の命令シーケンス中にハードウェアスケジューリング対象の機械語によるスレッド終了命令を見出した場合に、ANDゲート26の指示に基づいて命令アドレスYへトラップすべきかどうかを判定して動作する。ANDゲート出力が値「0」をとる場合は、命令アドレスYへのトラップ動作を起こし、ANDゲート26の出力値が「1」の場合は、命令アドレスYへのトラップは起こさず直接ハードウェアスケジューリングによるスレッド生成終了動作を行う。命令デコード回路25が命令アドレスXへトラップすべきと判定した場合、命令デコード回路25は、セット/リセットフリップフロップ28にリセット動作を行い、フリップフロップ28の値を「0」とする。
【0061】
セット/リセットフリップフロップ28の出力は、インバータ27を介してANDゲート26に接続される。これらの回路は、ある機械語命令による新しいスレッド生成命令をアドレスXにトラップする動作を一度行った場合は、当該機械語命令と対になるスレッド終了命令を再度命令デコーダ回路25が見出した際に、必ずアドレスYへトラップするように指示する。なお、セット/リセットフリップフロップ28は、プロセッサ初期化に際して、値「0」にセットされる。
【0062】
図3に示す、命令デコーダ回路25に追加された付加回路は、図1の実行ユニットステータス50との組み合わせにおいて、所定のスレッド実行ユニット10−0〜10−3において処理中のスレッドがスレッド実行終了命令を実行したことを検出する。
【0063】
次に、図22に示したソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を実現するプログラムの構造を、図4乃至図7のフローチャートを参照して説明する。
【0064】
図4は、最初にOS等から起動されて動作し始めるユーザプログラムの初期化において、ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行に係わる動作を示すフローチャートである。
【0065】
当該実行に係わる部分として、図4に示すプログラムを参照すると、最初にソフトウェアスケジューラにおいて管理されるスレッドT1〜T5を生成するものとし、スレッドT0はプログラム初期化を行ったPEが初期化完了後にそのまま自分で実行を開始するものとしている(ステップ401、402)。スレッドT1〜T5の生成は、ユーザプログラムの実行ロードモジュールを作成する際に、動的あるいは静的にリンケージされたユーザレベル・スレッドライブラリの中のスレッド生成ルーチンを呼び出すことにより行われる。また、ステップ401において記載している「スレッド実行ステータス」の変更は、ハードウェアスケジューリングの可否をソフトウェア側から制御することに係わる処理であり、図2中のスレッド実行ユニット#0〜#3ステータス(21−0〜21−3)の中から、ソフトウェアスケジューリングの下に起動を行おうとしているいずれか一台のスレッド実行ユニットのステータスを更新する処理である。
【0066】
図2において、スレッド実行ユニット#iステータスの値が「0」である場合が「スレッド実行ユニット#iはハードウェアスケジューリングで使用不可能な状態」であり、スレッド実行ユニット#iステータスが値「1」である場合が「スレッド実行ユニット#iはソフトウェアスケジューリングで使用可能な状態」であることを示している。したがって、図4のステップ401で行う「PEの「スレッド実行ステータス」をユーザレベル実行に設定」とは、起動対象となったPEに係わる図2のスレッド実行ユニットステータスを値「1」に設定することを表している。
【0067】
この更新処理は、図1において、スレッド生成処理を行っているPE#jからデータ及びコマンドを実行ユニットステータス50に送り込み、図2において目的とする#iのスレッド実行ユニットステータスの値を更新することである。これは、セレクタ23−0〜23−3のいずれかを制御することによって可能であり、そのインプリメンテーションは、ごく一般的なハードウェア設計知識を有する技術者においては明らかであるので説明を省略する。
【0068】
図5乃至図7は、ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートである。
【0069】
このユーザレベル・スレッドライブラリは、ハードウェアスケジューリングの下での並列実行環境から呼び出してはならない。ハードウェアスケジューリングの下での並列処理実行環境下からは、必ず1つのスレッド実行ユニットのみの実行状態になってから呼び出される。T0〜T5のスレッドを構成するプログラムにおいて、ユーザレベル・スレッドライブラリの呼び出し時に、必ず1つのスレッド実行ユニットのみの実行状態になってから呼び出しを行うようなプログラム構成とすることは可能であるし、また、ソフトウェアの指示の下にハードウェア的に1つのスレッド実行ユニットのみの実行状態になることを保証する手段は、例えば、特公平10−27108号公報スレッド実行方法」に開示されているので、ここでは、その詳細な説明は省略する。
【0070】
図5は、スレッド生成ルーチンを表す。図5に示すルーチンは、呼び出されると生成すべきスレッド情報を登録した後に(ステップ502)、待機中のスレッド実行ユニットが存在するかどうかを調べ、待機中のスレッド実行ユニットが存在するならば、その中から1台を選んで起動してディスパッチャーを実行させる(ステップ503)。スレッド実行ユニットが待機中であるかどうかについては、ライブラリスケジューラ内においてスレッド実行ユニットを起動あるいは終了に導く際にライブラリが使用するメモリ領域にフラグエリアを設けることにより、ソフトウェアで管理することが可能である。
【0071】
「スレッド生成処理」は、複数のスレッド実行ユニットが同時に処理すると、排他的にしかアクセスができないデータの破壊がおこる。そのため、図5に示すスレッド生成ルーチンは、ステップ501とステップ504とにおいて、スケジューラのロックの確保と開放を行うことにより、各スレッド実行ユニットからの呼び出しに対して排他的に動作することを保証しておく必要がある。
【0072】
図6は、スレッド終了ルーチンを表す。図6に示すルーチンにおいても、スレッド実行ユニット間で排他的に実行する必要がある。そのため、呼び出されるとスケジューラのロックを確保した後に(ステップ601)、スレッド終了処理としてライブラリが管理するスレッド情報から終了スレッドの情報を抹消する(ステップ602)。さらに、図6に示すスレッド終了ルーチンは、処理を終了したソフトウェアの管理対象であるユーザスレッドに実行制御を戻す必要はないので、そのまま新たに実行すべきスレッドを得るべくディスパッチャーに制御を渡す構造となっている。
【0073】
図7は、ディスパッチャーの処理を表す。図7に示す処理においても、スレッド実行ユニット間で排他的に実行する必要がある。そのため、呼び出されると、まずスケジューラのロックを確保する(ステップ701)。そして、スレッド管理情報を参照して、まだ処理されていない実行可能なユーザレベルスレッドの有無のチェックを行い(ステップ702)、実行すべきスレッドが存在する場合は、当該スレッド情報と取り出して(ステップ703)、自スレッド実行ユニットで実行すべく制御を取り出したスレッドに移行する。
【0074】
他方、実行すべきスレッドが存在しない場合は、待機中の状態に至る必要がある。具体的には、待機状態に至ろうとしているスレッド実行ユニットは、他の動作中のスレッド実行ユニットが1台より多いかどうかを判定する(ステップ705)。そして、1台よりも多い場合は、スケジューラのロックを解除して(ステップ706)、自スレッド実行ユニットの「スレッド実行ステータス」をハードウェアスケジューリングが可能となるように設定し、待機中の状態に至る(ステップ707)。
【0075】
また、自スレッド実行ユニットが待機状態になることにより残りの動作中のスレッド実行ユニットが1台となる場合は、当該最後に残るスレッド実行ユニットの「スレッド実行ステータス」をハードウェアスケジューリングが可能となるように設定する処理を付加的に行う(ステップ708)。
【0076】
ステップ705〜708の動作の意味するところは、動作中状態のスレッド実行ユニットが1台のみとなる場合は、当該スレッド実行ユニットがハードウェアスケジューリングの下に、既に待機状態にある2台のスレッド実行ユニットと今まさに待機状態に至ろうとしている1台のスレッド実行ユニットの、合わせて3台のスレッド実行ユニットを使用してよいことを伝えることにある。
【0077】
ステップ705〜708の処理の結果は、ステップ708及びステップ707を実行することによって、図2におけるスレッド実行ユニットステータスのフラグがすべて値「0」になることによりハードウェアに伝達される。ハードウェアが、以上の処理の結果をどのように解釈して動作するのかについては、後に全体の動作の観点から説明する。
【0078】
次に、図1、図2及び図3と、図8及び図9のフローチャートとを参照して、ソフトウェアが新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示を行った場合に、スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段と、保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、当該スレッド実行ユニット上に復旧することを可能とする手段について説明する。
【0079】
まず、図8及び図9に記載した処理は、各スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、各スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合に対応して動く動作を説明するフローチャートである。図8及び図9に記載された処理が起動されるかどうかの判断は、以下のように行われる。
【0080】
まず、図2におけるスレッド実行ユニット#iステータスの値が「0」であるか、または「1」であるかにより、NORゲート22−0〜22−3の出力が変化する。NORゲート22−0〜22−3の出力は、所定のスレッド実行ユニット#iから見て、自分以外のスレッド実行ユニットのスレッド実行ユニット#j(jはi以外)ステータスが値「0」となっているならば、すなわち自分以外のスレッド実行ユニットがハードウェアスケジュール可能な状態になっているならば、値「1」をとり、そうでなければ値「0」をとる。
【0081】
NORゲート22−0〜22−3の出力は、図3に示すように、ANDゲート26を介して各スレッド実行ユニットの命令デコード回路25に接続されている。セット/リセットフリップフロップ28は、初期値「0」であるため、この値が反転入力されたANDゲート26は、NORゲート22−0〜22−3の出力を道通状態で伝達する。
【0082】
したがって、各スレッド実行ユニットの命令デコード回路25は、接続された図2のNORゲート22−0〜22−3の出力が「0」であるならば、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド生成命令を見つけた場合に、シリアライズ実行しなければならないと解釈して、予めハードウェアにより定められた命令アドレスXにトラップする。
【0083】
他方、各スレッド実行ユニットの命令デコード回路25に入力されるNORゲート22−0〜22−3の出力が「1」であるならば、自分が実行しようとしている命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド生成命令を見つけた場合に、従来技術で示されているように隣接降番のスレッド実行ユニットに新しいスレッドを生成して実行させる。
【0084】
また、各スレッド実行ユニットが、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合も、図2のNORゲート22−0〜22−3は同様に振る舞うが、スレッド終了命令に関しては、図3の回路が付加的な役割も果たす。
【0085】
すなわち、各スレッド実行ユニットの命令デコード回路25は、接続された図2のNORゲートゲート22−0〜22−3の出力が「0」であるならば、自分が実行しようとする命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合に、予めハードウェアにより定められた命令アドレスYにトラップする。他方、各スレッド実行ユニットの命令デコーダ12に入力されるNORゲート22−0〜22−3の出力が「1」であるならば、自分が実行しようとしている命令列中において、ハードウェアスケジューリングを直接行う機械語命令のスレッド終了命令を見つけた場合に、従来技術で示されれているように直接スレッド実行を終了して待機状態に至ろうとする動作が基本となる。
【0086】
ただし、スレッド終了命令に対しては、最終的には図3の付加回路の働きにより、スレッド終了命令を見つける前に処理したスレッド生成命令をシリアライズ実行していた場合は、図2のNORゲート22−0〜22−3の出力は、図3のANDゲート26によりマスクされ、この場合も命令アドレスYへトラップする動作となる。
【0087】
プロセッサが機械語命令のスレッド生成や終了命令を実行しようとした際にアドレスXやアドレスYにトラップする仕組みに関しては、従来から、ワイアドロジックで実現するのが複雑な命令を、ソフトウェアあるいはファームウェアとしてトラップしてエミュレーションする技術として公知であるので、ここでは、その詳細な説明は省略する。
【0088】
次に、図8及び図9を参照して、アドレスXやアドレスYにトラップした後の処理を説明する。図8は、アドレスXより開始されるスレッド生成をシリアライズして実行する処理を示すフローチャートである。
【0089】
本実施形態のプロセッサにおいては、所定のスレッド実行ユニットがハードウェアスケジューリングの下に新しいスレッドを生成するという処理は、新しいスレッドを生成する命令であるfork命令が表れた時点のレジスタコンテキストを継承して子どもスレッドを生成することである。また、新しく生成されたスレッドは、その終了までに高々1回のみ新たなスレッド生成を行うことが可能である。誤ったスレッド生成を行った場合は、必ず誤って生成したスレッドを強制終了させた後に、スレッドの再生成を行う計算モデルとなっている。したがって、この計算モデルにおいては、スレッド生成命令を実行しようとした際に、その時点のレジスタコンテキストと生成されるスレッドの命令開始番地アドレスをセーブし、実行中だったスレッドの処理を継続実行してスレッド終了命令に実行が到達した後に、セーブしておいた生成すべき新しいスレッドのコンテキストをレジスタ上に復旧し、かつ、生成すべき新しいスレッドの命令開始番地に実行制御を渡すことにより、複数個のスレッド実行ユニットを用いずに、1つのスレッド実行ユニットのみを用いて複数スレッドをシリアライズして実行処理することが可能である。また、シリアライズした実行に必要なコンテキストのセーブエリアは、スレッド実行ユニット毎に高々1個のスレッド情報を保持できれば十分である。したがって、図8のステップ802において、各スレッド実行ユニットの個別のメモリ領域に、生成すべきハードウェア起動のスレッド情報(レジスタコンテキストとスレッド開始命令アドレス)を保存し、その後、トラップ元のアドレスに制御を復帰して元のスレッドの継続実行を行う。
【0090】
以上のようにして、ソフトウェアが新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示を行った場合に、スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段が実現される。
【0091】
また、図8の、アドレスXより開始されるスレッド生成をシリアライズして実行する処理においては、シリアライズ処理対象としてセーブした生成すべきスレッドを、後にスレッド終了命令を実行しようとした際に必ず復活可能とするために、図3のセット/リセットフリップフロップ28に対するセット動作もステップ801において行う。
【0092】
次に、各スレッド実行ユニットが、スレッド終了命令を検出し、かつシリアライズ実行中としてアドレスYに命令トラップした場合の処理を、図9を参照して説明する。図9に示すように、終了処理は、2通りの場合があり得る。
【0093】
第1のケースは、終了しようとするスレッドが新しいスレッド生成処理を行っていた場合であり、このケースでは、生成すべき新しいスレッドのコンテキストをレジスタに復旧し、また、新しいスレッドの開始番地に制御を移行する(ステップ902、903)。
【0094】
第2のケースは、終了しようとするスレッドが新しいスレッド生成処理を行っていなかった場合であり、このケースでは、スレッド実行ユニットは待機状態に至る(ステップ902、904)。
【0095】
これにより、保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、当該スレッド実行ユニット上に復旧することを可能とする手段が実現される。
【0096】
また、スレッド終了命令を検出し、かつシリアライズ実行中としてアドレスYに命令トラップした場合は、付加的な処理として、図3のセット/リセットフリップフロップ28のリセットも行う。
【0097】
次に、図10を参照して本実施形態の全体の動きを説明する。図10は、図22に示したソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を、時間軸上の分解能を細かくして示した図である。
【0098】
各スレッド実行ユニットの実行状態の記述において、右側に下方向への矢印付きの線に「値1」または「値0」と付した記述は、各スレッド実行ユニットに対する図2のスレッド実行ユニットステータス23−0〜23−3の値を示す。
【0099】
プログラム処理の流れは、まず、図4で示したプログラム初期化処理を、スレッド実行ユニットPE#0で開始することにより開始される。スレッド実行ユニットPE#0が、プログラム初期化処理を開始してステップ401の処理を行うことにより、スレッド実行ユニットPE#0のスレッド実行ステータスは値1(ソフトウェアスケジューリングで使用可能な状態)となる。これにより、スレッド実行ユニットPE#1〜#3において、ハードウェアスケジューリングにより生成されたスレッドはシリアライズして実行するモードとなる。
【0100】
引き続きプログラム初期化処理を行っているスレッド実行ユニットPE#0は、ステップ402の処理を行うことにより、図5のスレッド生成処理を5回実行してソフトウェアスケジューリング対象となるスレッドT1〜T5を生成すると共に、T1〜T3の生成時に、スレッド実行ユニットPE#1〜#3の各々のスレッド実行ユニットステータスをソフトウェアスケジューリングで使用可能な状態としてディスパッチャーを起動する。
【0101】
スレッド実行ユニットPE#1〜PE#3は、ディスパッチャーを介して処理すべきスレッドT1〜T3を受け取り、各々実行を開始する。また、スレッド実行ユニットPE#0は、ステップ402の処理を行った後、スレッドT0の実行を開始する。
【0102】
ここで、スレッドT0〜T3が並列実行されている状態においては、各ソフトウェアスケジューリング対象スレッドが、ハードウェアスケジューリング対象である機械語命令によるスレッド生成及び消滅を行ないながら処理を進めることになる。しかし、全てのスレッド実行ユニットのスレッド実行ユニットステータスは、ソフトウェアスケジューリング可能な状態で処理を進めているため、機械語命令によるスレッド生成命令及びスレッド終了命令を実行すると、これらの命令はトラップされ、図8及び図9を参照して説明した手段によりシリアライズ処理されていくことになる。スレッドT0〜T3の処理終了時点においては、ソフトウェアスケジューリング対象スレッドの実行終了として、各スレッド実行ユニットは、図6のスレッド終了処理を呼び出すことになる。
【0103】
時間軸上、最初にソフトウェアスケジューリング対象スレッドT1が終了し、次いでスレッドT2が終了するが、これらを実行していたスレッド実行ユニットPE#1とスレッド実行ユニットPE#2とは、各々図6のスレッド終了処理、続く図7のディスパッチャーへと処理が進んで、再度、まだ処理がされていないスレッドT4、T5を実行開始することとなる。
【0104】
次に、時間軸上ソフトウェアスケジューリング対象スレッドT0を実行していたスレッド実行ユニットPE#0が、実行終了状態に到達し、図6のスレッド終了処理を行って、続く図7のディスパッチャーに制御が移る。
【0105】
この時点において、ソフトウェアスケジューリング対象スレッドにおいてスレッド実行ユニットに割り当てられていないものは存在しない状態となっているため、スレッド実行ユニットPE#0は、ステップ707の処理に至って、自スレッド実行ユニットのスレッド実行ユニットステータスを、ハードウェアスケジューリングで使用可能な状態に変更して待機状態に陥る。
【0106】
次いで、同様にスレッドT4を実行していたスレッド実行ユニットPE#1も、処理を終了し、同様に自スレッド実行ユニットのスレッド実行ユニットステータスを、ハードウェアスケジューリングで使用可能な状態に変更して待機状態に陥る。
【0107】
さらに、スレッドT3を実行していたスレッド実行ユニットPE#3が、処理を終了し、図7のディスパッチャーに制御が移る。ここでは、ステップ705の処理において、自スレッド実行ユニットPE#3が待機状態に至ると、残る処理実行中のPEが一台のみになることを判定して、ステップ708の処理を行うことになる。ステップ708の処理が完了した時点においては、図2のスレッド実行ユニットステータスの内、スレッド実行ユニットPE#0とスレッド実行ユニットPE#1とスレッド実行ユニットPE#2とがハードウェアスケジューリング実行で使用可能な状態を指し示すこととなる。この時点で、NOR回路22−0〜22−3の出力は、順番に、「0」、「0」、「0」、「1」となる。当該出力が接続される、図1の各スレッド実行ユニットの命令デコーダ12−0〜12−3においては、スレッド実行ユニットPE#3のみがハードウェアスケジューリング対象のスレッドを直接実行可能と判断できる状態となる。
【0108】
他方、スレッド実行ユニットPE#3は、ステップ708の処理を実行した後にステップ707の処理を実行するため、この時点ではハードウェアスケジューリング処理対象のスレッドを生成することはない。しかし、ステップ707の処理を実行すると、図2のスレッド実行ユニットステータス21−0〜21−3は、全てがハードウェアスケジューリング実行で使用可能な状態を指し示すこととなる。この状態に到達すると、NOR回路22−0〜22−3の出力は、順番に、「1」、「1」、「1」、「1」となり、全てのPEがハードウェアスケジューリング対象のスレッドを実行可能な状態に到達する。
【0109】
ソフトウェアスケジューリング対象のスレッドT5を実行していたスレッド実行ユニットPE#2は、この時点以降において、ハードウェアスケジューリング対象のスレッド生成機械語命令を実行しようとすると、図5で示したトラップしてシリアライズする実行には陥らず、順次、全てのスレッド実行ユニット資源を利用してハードウェアスケジューリングの下に高速実行を行うこととなる。
【0110】
図6において、スレッドT5の符号に「T5a」と「T5b」のように最後の文字にa、bを付与しているのは、ハードウェアスケジューリングによるスレッド実行がシリアライズされて処理されている期間をT5a、ハードウェアスケジューリングにより直接複数のスレッド実行ユニット資源を用いて並列処理実行が行われている期間をT5bと区別して記載したものである。
【0111】
図11は、本発明の他の実施の形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【0112】
本実施形態本実施形態のマルチスレッドプロセッサは、図1に示した第1の実施形態と同様に、4スレッド並列実行型プロセッサであり、スレッド管理ユニット30と、4組のスレッド実行ユニット(PE#0〜PE#3)10−0〜10−3と、物理共有レジスタファイル20と、実行ユニットステータス50とを備える。
【0113】
スレッド実行ユニット110−0〜110−3は、それぞれ、第1の実施形態におけるスレッド実行ユニット10−0〜10−3と同様に、命令キャッシュ(#0〜#3)11−0〜11−3と、命令デコーダ(#0〜#3)12−0〜12−3と、レジスタ写像テーブル(#0〜#3)13−0〜13−3と、演算ユニット(#0〜#3)14−0〜14−3と、セレクタ15−0〜15−3とを備えると共に、待避記憶(#0〜#3)111−0〜111−3を備える。また、第1の実施形態と同様に、レジスタ写像テーブル13−0〜13−3は、それぞれ写像情報転送バス40によってリング状をなすように、隣接するレジスタ写像テーブルに接続されている。
【0114】
待避記憶111−0〜111−3は、ソフトウェアにおいて、新しいスレッドの割り当てをハードウェアが直接行うべきでないという指示がなされた場合に、当該スレッド生成要求に基づいて生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持する手段であり、ハードウェアスケジューリングの対象であるスレッドの情報を待避するために用いられる。
【0115】
待避記憶111−0〜111−3を設けたことにより、本実施形態は、ハードウェアスケジューリングの対象であるスレッドをシリアライズして実行する状態において、ハードウェアスケジューリングの対象となる機械語命令によるスレッド生成命令及びスレッド終了命令を実行しようとした場合に、図2で示したような命令トラップを用いたソフトウェア処理を行わず、直接、ハードウェアシーケンスにより各スレッド実行ユニットが備える待機記憶111−0〜111−3を用いてスレッドの情報の待避と復旧とを行うことが可能である。
【0116】
その他の構成要素及び動作については、図1乃至図107を参照して説明した第1の実施形態の構成要素及び動作と同一であるため、説明を省略する。
【0117】
以上好ましい実施形態をあげて本発明を説明したが、本発明は必ずしも上記実施形態に限定されるものではない。
【0118】
【発明の効果】
以上説明したように、本発明のマルチスレッドプロセッサによれば、ハードウェアスケジューリングに基づく細粒度での並列プログラム実行と、ソフトウェア・ライブラリ・スケジューラを用いた柔軟な並列実行スケジューリングとを混在して実行可能であるため、効率的にプログラムの実行を行うことにより、プログラム全体の処理時間を短縮できるという効果を有する。
【図面の簡単な説明】
【図1】本発明の一実施形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【図2】本実施形態における実行ユニットステータスの内部構造を示す回路図である。
【図3】本実施形態におけるスレッド実行ユニットの命令デコーダの内部構造を示す回路図である。
【図4】OS等から起動されて動作し始めるユーザプログラムの初期化において、ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行に係わる動作を示すフローチャートである。
【図5】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、スレッド生成ルーチンを示す図である。
【図6】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、スレッド終了ルーチンを示す図である。
【図7】ユーザレベル・スレッドライブラリのソフトウェア構造を表すフローチャートであり、ディスパッチャーの処理を示す図である。
【図8】スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合のスレッド生成動作を示すフローチャートである。
【図9】スレッド実行ユニットがソフトウェアスケジューリングの下で動作中に、スレッド実行ユニット内でハードウェアスケジューリングに基づくスレッド生成命令の実行が起動された場合のスレッド終了動作を示すフローチャートである。
【図10】ソフトウェアスケジューリングとハードウェアスケジューリングの混在実行を、時間軸上の分解能を細かくして示した図である。
【図11】本発明の他の実施形態によるマルチスレッドプロセッサにおける、ハードウェアスケジューリングとソフトウェアスケジューリングの切り替えを実現する構成を示すブロック図である。
【図12】本発明の実施形態におけるスレッド実行ユニットのパイプラインステージを示す図である。
【図13】本発明の実施形態における物理共有レジスタファイルの詳細な構成を示す図である。
【図14】本発明の実施形態における物理レジスタのフォーマットを示す図である。
【図15】本発明の実施形態におけるレジスタ写像テーブルの詳細な構成を示す図である。
【図16】本発明の実施形態におけるレジスタ写像テーブルの1エントリの詳細な構成を示す図である。
【図17】本発明の実施形態において、通常の動作時のグループ選択ビット、物理拡張ビット変更ビットの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明する図である。
【図18】本発明の実施形態において、投機的なスレッド生成を伴う場合のグループ選択ビット、物理拡張ビット、変更ビットの値の遷移と、それによってレジスタ継承が実現できる仕組みを説明するための図である。
【図19】図12に示すパイプラインの動作における写像情報のコピーのタイミングを示す図である。
【図20】ハードウェアスケジューリングによるスレッド実行方法を説明する図である。
【図21】ソフトウェアスケジューリングによるスレッド実行方法を説明する図である。
【図22】ハードウェアスケジューリングとソフトウェアスケジューリングとを混在させたスレッド実行方法を説明する図である。
【符号の説明】
10−0〜10−3 スレッド実行ユニット
11−0〜11−3 命令キャッシュ
12−0〜12−3 命令デコーダ
13−0〜13−3 レジスタ写像テーブル
14−0〜14−3 演算ユニット
15−0〜15−3 セレクタ
20 物理共有レジスタファイル
30 スレッド管理ユニット
40 写像情報転送バス
50 実行ユニットステータス
Claims (8)
- 複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、
前記スレッド実行ユニットが、処理中のスレッドが高々1回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、
さらに、前記スレッド生成手段により前記スレッド生成命令に基づいて生成される新しいスレッドを、スレッド生成命令を実行する前記スレッド実行ユニット以外のスレッド実行ユニットに割り当てる処理をハードウェアにて直接行うスレッド割り当て手段と、
任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とするマルチスレッドプロセッサ。 - 前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする請求項1に記載のマルチスレッドプロセッサ。
- 前記レジスタコンテキスト保持手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスXにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、
前記命令アドレスXをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、
トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、
前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、
前記スレッド実行終了命令実行検出手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスYにトラップし、
前記レジスタコンテキスト復旧手段が、
命令アドレスYをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、
主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧すること
を特徴とする請求項2に記載のマルチスレッドプロセッサ。 - 前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた1組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、
前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させること
を特徴とする請求項1に記載のマルチスレッドプロセッサ。 - 複数のプログラムカウンタを備え、前記複数のプログラムカウンタにしたがった複数のスレッドの命令を同時にフェッチ、解釈、実行する複数のスレッド実行ユニットを備えたマルチスレッドプロセッサにおいて、
前記スレッド実行ユニットが、処理中のスレッドが高々1回の新たなスレッドを生成するスレッド生成手段と、前記スレッド生成手段がスレッド生成を行うために実行するスレッド生成命令と、処理中のスレッドを終了するスレッド終了手段と、前記スレッド終了手段がスレッド終了を行うために実行するスレッド終了命令を備え、
前記複数のスレッド実行ユニットに共有され複数の物理レジスタからなる共有物理レジスタファイルと、前記複数のスレッド実行ユニットに設けられ前記スレッド実行ユニット内の1つの論理レジスタと前記共有物理レジスタファイル中の特定の複数の物理レジスタの1つとの間に写像関係を定義する変換テーブルと、前記複数のスレッド実行ユニットの変換テーブルの情報を隣接するスレッド実行ユニットにコピーする変換テーブル情報コピー手段とを有し、1つの前記論理レジスタとの間で写像関係が定義されている複数の前記物理レジスタ毎にグループ化し、該グループ内の位置を示す情報を前記変換テーブルの情報に付加して前記写像関係を定義することにより、レジスタ内容の継承を行うレジスタ内容継承装置と、
任意の前記スレッド実行ユニットにおいて処理中のスレッドがスレッド生成命令を実行する場合に、前記スレッド割り当て手段がスレッド割り当てを行なうかどうかをソフトウェアスケジューラにて指示するスレッド割り当て指示手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、前記スレッド生成命令に基づいて生成される新しいスレッドの実行開始に必要とされるレジスタコンテキストを記憶保持するレジスタコンテキスト保持手段と、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合、前記スレッド終了手段によりスレッド終了命令を実行した場合に、前記レジスタコンテキスト保持手段により保持された新たに生成すべきスレッドの実行開始に必要とされるレジスタコンテキストを、該スレッド実行ユニット上に復旧するレジスタコンテキスト復旧手段とを備えることを特徴とするマルチスレッドプロセッサ。 - 前記レジスタコンテキスト保持手段が、前記スレッド実行ユニットの主記憶上のメモリ領域へ、命令トラップを用いたソフトウェア処理により、生成される新しいスレッドの前記レジスタコンテキストを格納することを特徴とする請求項5に記載のマルチスレッドプロセッサ。
- 前記レジスタコンテキスト保持手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
新たなスレッド生成を行う機械語命令を処理しようとした際に、予めハードウェアにより定められた命令アドレスXにトラップすると共に、前記新たなスレッド生成を行う機械語命令を実行した命令番地を前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに記憶保持し、
前記命令アドレスXをエントリポイントとするプログラムにより、新たに生成されるべき新しいスレッドの実行開始に必要とされるレジスタコンテキストを前記主記憶上に待避し、
トラップ元指示アドレスレジスタに記憶保持された命令アドレスに基づいて前記の新たなスレッド生成を行う機械語命令が指示する、前記新たなスレッドの開始命令アドレス番地を算出して算出結果を主記憶上に待避し、
前記スレッド実行ユニットが固有に備えるトラップ元指示アドレスレジスタに保持された命令番地に基づいて、前記新たなスレッド生成を行う機械語命令を実行した命令の後続命令番地にプログラム制御を復旧し、
前記スレッド実行終了命令実行検出手段が、
前記スレッド割り当て指示手段が前記スレッド割り当て手段に対して前記スレッドの割り当てを実行させない旨の指示を行った場合に、
前記スレッド実行ユニットにおいて処理中のスレッドがスレッド実行終了命令を実行した際に、予めハードウェアにより定められた命令アドレスYにトラップし、
前記レジスタコンテキスト復旧手段が、
命令アドレスYをエントリポイントとするプログラムにより、主記憶上に待避していた新たに生成されるべき新しいスレッドの前記レジスタコンテキストをレジスタ上に復帰し、
主記憶上に待避していた新たなスレッドの開始命令アドレスを取り出して該アドレスにプログラム制御を復旧すること
を特徴とする請求項6に記載のマルチスレッドプロセッサ。 - 前記レジスタコンテキスト保持手段が、レジスタコンテキストセーブ用として前記各スレッド実行ユニット固有に備えられた1組みの記憶装置であり、直接、ハードウェアシーケンスにより、生成される新しいスレッドの前記レジスタコンテキストを格納し、
前記レジスタコンテキスト復旧手段が、直接、ハードウェアシーケンスにより、前記レジスタコンテキストセーブ用記憶装置に保持された前記レジスタコンテキストを前記スレッド実行ユニット上に復旧させること
を特徴とする請求項5に記載のマルチスレッドプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP00586399A JP3604029B2 (ja) | 1999-01-12 | 1999-01-12 | マルチスレッドプロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP00586399A JP3604029B2 (ja) | 1999-01-12 | 1999-01-12 | マルチスレッドプロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000207233A JP2000207233A (ja) | 2000-07-28 |
JP3604029B2 true JP3604029B2 (ja) | 2004-12-22 |
Family
ID=11622809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP00586399A Expired - Fee Related JP3604029B2 (ja) | 1999-01-12 | 1999-01-12 | マルチスレッドプロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3604029B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3661614B2 (ja) | 2001-07-12 | 2005-06-15 | 日本電気株式会社 | キャッシュメモリ制御方法及びマルチプロセッサシステム |
US7496494B2 (en) | 2002-09-17 | 2009-02-24 | International Business Machines Corporation | Method and system for multiprocessor emulation on a multiprocessor host system |
US7472258B2 (en) | 2003-04-21 | 2008-12-30 | International Business Machines Corporation | Dynamically shared group completion table between multiple threads |
US9189230B2 (en) | 2004-03-31 | 2015-11-17 | Intel Corporation | Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution |
GB0420442D0 (en) * | 2004-09-14 | 2004-10-20 | Ignios Ltd | Debug in a multicore architecture |
KR100974106B1 (ko) * | 2005-06-29 | 2010-08-04 | 인텔 코포레이션 | 캐싱 방법, 장치 및 시스템 |
US20110320766A1 (en) * | 2010-06-29 | 2011-12-29 | Youfeng Wu | Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type |
KR101603752B1 (ko) | 2013-01-28 | 2016-03-28 | 삼성전자주식회사 | 멀티 모드 지원 프로세서 및 그 프로세서에서 멀티 모드를 지원하는 방법 |
GB2580327B (en) * | 2018-12-31 | 2021-04-28 | Graphcore Ltd | Register files in a multi-threaded processor |
-
1999
- 1999-01-12 JP JP00586399A patent/JP3604029B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2000207233A (ja) | 2000-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3209205B2 (ja) | プロセッサにおけるレジスタ内容の継承装置 | |
JP4818918B2 (ja) | マルチスレッド化されたマイクロプロセッサで並行命令ストリームを開始する命令 | |
US7376954B2 (en) | Mechanisms for assuring quality of service for programs executing on a multithreaded processor | |
JP3702814B2 (ja) | マルチスレッド実行方法及び並列プロセッサシステム | |
Gupta | The fuzzy barrier: a mechanism for high speed synchronization of processors | |
JP5547208B2 (ja) | シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置 | |
JP3702813B2 (ja) | マルチスレッド実行方法及び並列プロセッサシステム | |
US20050050305A1 (en) | Integrated mechanism for suspension and deallocation of computational threads of execution in a processor | |
US20040073906A1 (en) | Processor with speculative multithreading and hardware to support multithreading software {including global registers and busy bit memory elements} | |
US20050188177A1 (en) | Method and apparatus for real-time multithreading | |
JP2005284749A (ja) | 並列処理コンピュータ | |
Miranda et al. | Erbium: A deterministic, concurrent intermediate representation to map data-flow tasks to scalable, persistent streaming processes | |
US20110314478A1 (en) | Allocation and Control Unit | |
JP3604029B2 (ja) | マルチスレッドプロセッサ | |
Palatin et al. | CAPSULE: Hardware-assisted parallel execution of component-based programs | |
Arvind et al. | Two fundamental issues in multiprocessing | |
Kissell | MIPS MT: A multithreaded RISC architecture for embedded real-time processing | |
Gupta et al. | High speed synchronization of processors using fuzzy barriers | |
Hirata et al. | Speculative memory: an architectural support for explicit speculations in multithreaded programming | |
Kluge et al. | Implementing AUTOSAR scheduling and resource management on an embedded SMT processor | |
Cardosi et al. | Specx: a C++ task-based runtime system for heterogeneous distributed architectures | |
Goldstein | Lazy threads: compiler and runtime structures for fine-grained parallel programming | |
Uddin | Microgrid-The microthreaded many-core architecture | |
Lankamp | Developing a reference implementation for a microgrid of microthreaded microprocessors | |
Pickett et al. | libspmt: A library for speculative multithreading |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040315 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040514 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040910 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040923 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071008 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081008 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091008 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091008 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101008 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111008 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121008 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131008 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |