(57)【特許請求の範囲】
【請求項１】
複数のスレッドを同時に実行するマルチスレッドプロセッサで、且つ論理レジスタより多数の物理レジスタからなるレジスタウィンド構成のレジスタファイルを備えるプロセッサにおいて、
レジスタファイル全体を複数のスレッドで共有し、各スレッド毎に割り当てられるレジスタファイルの、ウィンドスタート位置とウィンドエンド位置を記入する特殊レジスタを設け、各スレッドに連続した物理レジスタを割り当てることを特徴とする共有レジスタファイル制御方式。
【請求項２】
請求項１の共有レジスタファイル制御方式において、
マルチスレッドプロセッサで同時実行可能なスレッド数で前記レジスタファイルを複数のグループに分割し、
コンテクストの動作状態を示す特殊レジスタを設け、
動作状態にあるコンテクストに、前記分割されたグループを割り当てることを特徴とする共有レジスタファイル制御方式。
【請求項３】
請求項１の共有レジスタファイル制御方式において、
動作スレッドの実行状態に応じて、コンテクスト割り当てをレジスタウィンド単位で動的に変更することを特徴とする共有レジスタファイル制御方式。
【請求項４】
請求項２又は請求項３の共有レジスタファイル制御方式において、
各グループ毎あるいは各レジスタウィンド毎にアクセス回数を示すアクセスカウンタを設け、アクセス回数の少ないグループ又はレジスタウィンドを、より多くのグループ又はレジスタウィンドを必要としているコンテクストに割り当てることを特徴とする共有レジスタファイル制御方式。
【請求項５】
請求項２又は請求項３の共有レジスタ制御方式において、
レジスタウィンドが不足した際に発生するメモリ領域への一時待避が行われた回数を測定するｓｐｉｌｌカウンタを各コンテクスト毎に設け、その一時待避の発生頻度が高いコンテクストに、低いものよりも多くのレジスタウィンドを割り当てることを特徴とする共有レジスタファイル制御方式。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、論理レジスタセットより多くの物理レジスタからなるレジスタウィンド構成を備えるプロセッサで、複数のスレッドが同時に実行されるマルチスレッドプロセッサにおいて、複数スレッドでレジスタファイルを共有してその有効利用をはかることにより、レジスタファイルの容量を抑えつつ高処理性能を実現するようにした、共有レジスタファイル制御方式に関する。
【０００２】
【従来の技術】
近年、複数の命令流（スレッド）が同時に実行されるマルチスレッドプロセッサが注目されており、ＭＴ（Ｍｕｌｔｉ  Ｔｈｒｅａｄｉｎｇ）、ＳＭＴ（Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ  Ｔｈｒｅａｄｉｎｇ）と呼ばれるアーキテクチャの研究が行われている。
【０００３】
この様なマルチスレッドプロセッサでは、命令キャッシュミス時などの命令フェッチができない場合に、フェッチするスレッドを積極的に切り替えることで、複数スレッドで共有する機能ユニットやキャッシュなどのハードウェア資源を有効利用し、少ないハードウェアコストで高性能を実現することを狙ったものである。
【０００４】
但し、従来のマルチスレッドプロセッサにおいては、複数のスレッドを同時実行するのに必要なプログラム・カウンタやレジスタセットなどのコンテクストについては、同時実行可能なスレッド数分がハードウェア実装される。
【０００５】
【発明が解決しようとする課題】
従来のプロセッサでは、アプリケーションから明示的にアクセスされる論理レジスタの数は限られているが、多くの実効レジスタを実現するためにレジスタウィンドと呼ばれる構成をとることが多い。図１１はレジスタウィンドの概念図を示す。
【０００６】
レジスタウィンド構成のレジスタファイル１０２では、アプリケーションから明示的にアクセスされる論理レジスタセット１０１よりも多くの物理レジスタをハードウェア実装する。レジスタファイル１０２は、論理レジスタセット１０１に相当する複数のレジスタウィンド１０３に分けることができる。図１１の例では、レジスタウィンド１０３−０、１０３−１・・・１０３−７に分けることができる。そして参照するレジスタウィンド１０３について、これを１０３−０→１０３−１・・・と右にずらしていく（ＳＡＶＥ）ことで、新しく異なる論理レジスタセット１０１と対応させて利用する。論理レジスタセット１０１は例えば３２個の論理レジスタで構成され、レジスタウィンド１０３−０〜１０３−７は例えば３２個の物理レジスタで構成されている。
【０００７】
また参照するレジスタウィンド１０３を、１０３−７→・・・１０３−１→１０３−０と左にずらしていく（ＲＥＳＴＯＲＥ）ことで、以前に対応づけられた論理レジスタセットに戻ることができる。図１１には、各レジスタウィンドに対応づけられた論理レジスタセットのＩＤ（レジスタウィンド１０３−０、１０３−１・・・を、０番目、１番目・・・の論理レジスタに対応させる）の例を示している。
【０００８】
全てのレジスタウィンド１０３が論理レジスタセットに対応済で、新しい論理レジスタセット１０１との対応がとれない場合には、最も古いレジスタウィンドの値をメモリ領域に一時待避させ、該当レジスタウィンドを新しい論理レジスタに対応させて使用する。図１１中の例では、最も古く使用された０番目の論理レジスタセットに対応したレジスタウィンド１０３−０の値をメモリ領域１０４に一時待避し、該当レジスタウィンド１０３−０を新しく８番目の論理レジスタセット１０１に対応させて使用している。このようにレジスタウィンドが不足するとき、時間のかかるメモリ領域１０４へのアクセスが発生するため処理性能低下が起きる。
【０００９】
マルチスレッドプロセッサにおいては、同時実行可能なスレッド数分のレジスタセットが必要となる。図１２は同時実行可能なスレッド数分のレジスタウィンドを、コンテクスト（プログラムカウンタとか、処理される値を保持する論理レジスタセット等の如く、マルチスレッドプロセッサで実行されているスレッドの状態を保持するもの）ごとに実装したときの概念図である。
【００１０】
マルチスレッドプロセッサでは、複数の独立したコンテクスト（論理レジスタセット２０３やプログラムカウンタ２０４を有する）が存在する。図１２はコンテクスト０〜３の４つのコンテクストの存在する例を示す。各コンテクスト毎に論理レジスタ２０３とレジスタファイル２０１内のレジスタウィンド２０２の対応がとられている。
【００１１】
ところでこのような図１２に示す如き構成では、コンテクスト毎に十分な容量のレジスタウィンドを実装するとハードウェアコストが問題となり、またスレッドが実行されていない、停止状態のコンテクストが存在する場合には、レジスタファイルの利用効率が悪い。
【００１２】
一方ハードウェアコストを抑えるためにスレッド毎のレジスタファイルの容量を小さくすることは、レジスタウィンドの不足につながり、メモリ領域へのアクセス増加にもとづく処理性能低下が問題となる。
【００１３】
したがって本発明の目的はこのような問題を解決した、コンテクスト毎に十分な容量のレジスタウィンドを実装することなく処理性能低下を抑制したマルチスレッドプロセッサにおける共有ファイル制御方式を提供することである。
【００１４】
【課題を解決するための手段】
本発明の原理図を図１に示す。図１において３００はマルチスレッドプロセッサ、３０１はレジスタファイル、３０２−０、３０２−１・・・３０２−１５はレジスタウィンド、３０３−０、３０３−１・・・３０３−３は論理レジスタセットであって１つ以上の論理レジスタで構成されるもの、３０４−０、３０４−１・・・３０４−３はプログラムカウンタ、３０５は命令読出部、３０６−０、３０６−１・・・３０６−３は命令バッファ、３０７は命令解読部、３０８は命令発行部、３０９は命令実行部、３２１−０、３２１−１、３２１−２は対応処理手段である。
【００１５】
マルチスレッドプロセッサ３００は、プロセッサ上に複数のスレッドが同時実行可能なプロセッサであり、論理レジスタセット３０３−０〜３０３−３、プログラムカウンタ３０４−０〜３０４−３、命令バッファ３０６−０〜３０６−３などは同時実行可能なスレッド（コンテクスト）ごとに設けられる。命令読出部３０５、命令解読部３０７、命令発行部３０８、命令実行部３０９などは複数のスレッドで共有される。
【００１６】
本発明では、プロセッサ上に複数存在するコンテクストごとにレジスタファイルを実装するのではなく、複数コンテクストで共有されるレジスタファイル３０１を実装し、レジスタウィンド３０２−０、３０２−１・・・３０２−１５を適当な数で各コンテクストに割り当てる。各コンテクストは、割り当てられたレジスタウィンドの範囲内で論理レジスタとレジスタウィンドの対応関係を切り替えることで、コンテクスト毎のレジスタウィンドとして機能する。
【００１７】
図１の例では、コンテクスト３が停止状態にあるため、動作状態にあるコンテクスト０にレジスタファイル３０１のレジスタウィンド３０２−０、３０２−１の２個を割り当て、コンテクスト１にレジスタウィンド３０２−２〜３０２−９の８個を割り当て、コンテクスト２にレジスタウィンド３０２−１０〜３０２−１５の６個を割り当てて使用しているものを示す。
【００１８】
レジスタウィンドの割り当て制御を行う粒度つまり切り替え単位については後述する図５に示す如く、例えば４個のレジスタウィンドで構成されるグループ単位や、１個毎のレジスタウィンド単位等が考えられる。
【００１９】
▲１▼レジスタファイルを、マルチスレッドプロセッサで同時実行可能なコンテクスト数で等分したグループに分割し、動作状態のコンテクスト数に応じてグループ単位で割り当てを行う。この場合、動作状態のコンテクスト数に依存するので、スレッド生成／終了時にコンテクストの割り当てを行う。
【００２０】
▲２▼例えば１個のレジスタウィンド単位の如く、細かい単位のレジスタウィンド／物理レジスタ単位で割り当てを行う。この場合、各コンテクストの動作状況によって動的にレジスタウィンドの割り当てを変更することで、より効率的なレジスタファイルの利用ができる。
【００２１】
またスレッド生成／終了時に、レジスタウィンドのグループ単位でコンテクスト割り当てを行う場合の具体的な制御方式として、以下のａ、ｂのようなものがあげられる。
【００２２】
ａ．レジスタウィンドのグループ毎に参照頻度に関する統計情報を測定しておき、スレッドが生成され新しいコンテクストにレジスタウィンドのグループを割り当てる際には、参照頻度の低いグループを新しいコンテクストに割り当てる。
【００２３】
ｂ．各コンテクストにおける、レジスタウィンドのメモリ領域への一時待避の回数を測定しておき、一時待避の発生頻度が高くレジスタウィンドが不足しがちなコンテクストに、スレッド終了により解放されたグループを追加して割り当てる。
【００２４】
更に、動作状態にある各コンテクストのスレッド実行の状態に応じて、一定期間ごと、もしくはレジスタウィンド不足時に、動的に細かい粒度（例えば１個のレジスタウィンド）でレジスタウィンド割り当てを変更することで、より高いレジスタファイルの利用率が実現できる。具体的な制御方式として、以下のイ、ロのようなものがあげられる。
【００２５】
イ．各コンテクストにおけるレジスタウィンドのメモリ領域への一時待避の回数を測定し、一時待避の発生頻度が高く、レジスタウィンドが不足しがちなスレッドにより多くのレジスタウィンドを割り当てる。
【００２６】
ロ．各レジスタウィンドの参照頻度に関する統計情報を測定しておき、スレッドに割り当てられたレジスタウィンドが不足した際に、隣接する他のコンテクストのレジスタウィンドの参照頻度が低ければ、割り当ての境界をずらして該当コンテクストに割り当て直す。
【００２７】
本発明の前記目的は下記（１）〜（５）により達成することができる。
【００２８】
（１）複数のスレッドを同時に実行するマルチスレッドプロセッサで、且つ論理レジスタより多数の物理レジスタからなるレジスタウィンド構成のレジスタファイルを備えるプロセッサにおいて、レジスタファイル３０１全体を複数のスレッドで共有し、各スレッド毎に割り当てられるレジスタファイル３０１の、ウィンドスタート位置とウィンドエンド位置を記入する特殊レジスタを設け、各スレッドに連続した物理レジスタを割り当てることを特徴とする共有レジスタファイル制御方式。
【００２９】
（２）前記（１）の共有レジスタファイル制御方式において、マルチスレッドプロセッサ３００で同時実行可能なスレッド数で前記レジスタファイル３０１を複数のグループに分割し、コンテクストの動作状態を示す特殊レジスタを設け、動作状態にあるコンテクストに、前記分割されたグループを割り当てることを特徴とする共有レジスタファイル制御方式。
【００３０】
（３）前記（１）の共有レジスタファイル制御方式において、動作スレッドの実行状態に応じて、コンテクスト割り当てをレジスタウィンド単位で動的に変更することを特徴とする共有レジスタファイル制御方式。
【００３１】
（４）前記（２）、（３）の共有レジスタファイル制御方式において、各グループ毎あるいは各レジスタウィンド毎にアクセス回数を示すアクセスカウンタを設け、アクセス回数の少ないグループ又はレジスタウィンドを、より多くのグループ又はレジスタウィンドを必要としているコンテクストに割り当てることを特徴とする共有レジスタファイル制御方式。
【００３２】
（５）前記（２）、（３）の共有レジスタ制御方式において、レジスタウィンドが不足した際に発生するメモリ領域への一時待避が行われた回数を測定するｓｐｉｌｌカウンタを各コンテクスト毎に設け、その一時待避の発生頻度が高いコンテクストに、低いものよりも多くのレジスタウィンドを割り当てることを特徴とする共有レジスタファイル制御方式。
【００３３】
これにより下記の作用効果を奏する。
【００３４】
（１）レジスタファイル全体を複数のスレッドで共有し、各スレッド毎に割り当てられるレジスタファイルの、ウィンドスタート位置とウィンドエンド位置を記入する特殊レジスタを設け、各スレッドに連続した物理レジスタを割り当てるので、レジスタファイルの容量を抑制しつつ、高性能の処理を遂行することができる。
【００３５】
（２）レジスタファイルを同時実行可能なスレッド数で複数のグループに分割するとともに、動作状態にあるコンテクストにこの分割したグループを割り当てることにより、割り当て直すときのオーバヘッドが軽くなるので、レジスタファイルの容量を抑制しつつ高性能の処理を遂行することができる。
【００３６】
（３）動作スレッドの実行状態に応じて、コンテクスト割り当てをレジスタウィンド単位で動的に変更するので、動作スレッドの実行状態に応じて、細かい粒度のレジスタウィンド又は物理レジスタ単位で、動的にコンテクスト割り当てを変更することが可能となり、処理の実態に対応した細かい粒度での割り当てを行うことが可能となり、これまたレジスタファイルの容量を抑制しつつ高性能の処理を遂行することができる。
【００３７】
（４）各グループ毎あるいは各レジスタウィンド毎にアクセス回数を示すアクセスカウンタを設け、アクセス回数の少ないグループ又はレジスタウィンドを、より多くのグループ又はレジスタウィンドを必要としているコンテクストに割り当てることができ、割り当てのときのオーバヘッドを軽くするとともにレジスタファイルの容量を抑制し、高性能の処理を遂行できる。
【００３８】
（５）レジスタウィンドが不足した際に発生するメモリ領域への一時待避が行われた回数を測定するｓｐｉｌｌカウンタを各コンテクスト毎に設け、その一時待避の発生頻度が高いコンテクストに、低いものよりも多くのレジスタウィンドを割り当てるので、メモリ領域への一時待避の発生頻度の高いコンテクストに、低いものより多くのレジスタウィンドを動的に割り当てることができ、メモリ領域への一時待避の発生頻度を抑制できるので、レジスタファイルの容量を抑制し、高性能の処理を遂行できる。
【００３９】
【発明の実施の形態】
本発明の一実施の形態を図１〜図４に基づき説明する。図１は本発明の一実施の形態であって本発明の共有レジスタファイルを持つマルチスレッドプロセッサの一般的な概念図、図２は複数スレッドで共有するレジスタファイルの制御方式の一実施例説明図であって図１中の対応処理手段の実現例、図３は新しくレジスタウィンドと論理レジスタの対応をとる場合の動作説明図であって図２に示す特殊レジスタ群を用いた対応手段の動作説明図、図４は既に論理レジスタと対応づけられているレジスタウィンドに参照を戻す場合の動作説明図であって、図２で示す特殊レジスタ群を用いた対応処理手段の動作説明図である。
【００４０】
図中、３００はマルチスレッドプロセッサ、３０１はレジスタファイル、３０２−０〜３０２−１５はレジスタウィンド、３０３−０〜３０３−３は論理レジスタセット、３０４−０〜３０４−３はプログラムカウンタ、３０５は命令読出部、３０６−０〜３０６−３は命令バッファ、３０７は命令解読部、３０８は命令発行部、３０９は命令実行部、３２１−０〜３２１−２は対応処理手段である。
【００４１】
マルチスレッドプロセッサ３００は、複数のスレッドを同時に実行するプロセッサである。
【００４２】
レジスタファイル３０１は、複数のコンテクスト０〜コンテクスト３で共有されるものであって、レジスタウィンド３０２−０、３０２−１・・・３０２−１５で構成される。
【００４３】
論理レジスタセット３０３−０は、コンテクスト０により読み出されるアプリケーションのスレッドから明示的にアクセスされるレジスタである。同様に論理レジスタセット３０３−１〜３０３−３は、コンテクスト１〜３により読み出されるアプリケーションのスレッドから明示的にアクセスされるレジスタである。
【００４４】
プログラムカウンタ３０４−０はコンテクスト０により制御されるスレッドを構成するプログラムを読み出すものである。同様にプログラムカウンタ３０４−１〜３０４−３はコンテクスト１〜３により制御されるスレッドを構成するプログラムを読み出すものである。
【００４５】
命令読出部３０５はマルチスレッドプロセッサ３００が処理すべき命令を読み出すものである。読み出された命令は、各コンテクスト毎に設けられる命令バッファ３０６−０〜３０６−３に一時保持される。
【００４６】
命令解読部３０７は、命令バッファ３０６−０〜３０６−３に保持された命令が存在する場合、これを解読するものである。
【００４７】
命令発行部３０８は、前記命令解読部３０７により命令を解読した結果にもとづき命令実行部３０９が実行すべき命令を発行するものである。
【００４８】
命令実行部３０９は、前記命令発行部３０８から伝達された命令を実行するものである。
【００４９】
対応処理手段３２１−０は、動作状態にあるコンテクスト０をレジスタファイル３０１のどのレジスタウィンドに割り当てるかを対応処理するものであり、対応処理手段３２１−１、３２１−２は動作状態にあるコンテクスト１、２をレジスタファイル３０１のどのレジスタウィンドに割り当てるかを対応処理するものである。図１の例では、コンテクスト０にレジスタファイル３０１のレジスタウィンド３０２−０、３０２−１が割り当てられ、コンテクスト１にレジスタウィンド３０２−２〜３０２−９が割り当てられ、コンテクスト２にレジスタウィンド３０２−１０〜３０２−１５が割り当てられ、コンテクスト３は停止状態にあるためコンテクスト３にはレジスタウィンドの割り当てがない場合を示す。
【００５０】
もしコンテクスト３が動作状態にあれば、例えばレジスタウィンド３０２−１４、３０２−１５が割り当てられる。
【００５１】
コンテクスト０〜コンテクスト３には、図２に示す如く、特殊レジスタ４０３、４０４、４０５、４０６、４０７、４０８が具備されている。４０３は該当コンテクスト（スレッド）が動作状態か否かを現す（例えば「１」なら動作状態、「０」なら非動作状態）、つまりステータス（ＳＴＡＴＵＳ）を示すレジスタである。４０４は該当コンテクストに割り当てられているレジスタウィンドの開始ＩＤ（図２のレジスタウィンド４０２中に記入された数字）を示すレジスタである。ウィンエンド（ＷＩＮＥＮＤ）レジスタ４０５は該当コンテクストに割り当てられているレジスタウィンドの最終ＩＤを示す。ＣＷＰ（Ｃｕｒｒｅｎｔ  Ｗｉｎｄｏｗ  Ｐｏｉｎｔｅｒ）レジスタ４０６は現在アプリケーションから参照されているレジスタウィンドを指すポインタである。キャンセーブ（ＣＡＮＳＡＶＥ）レジスタ４０７は、論理レジスタセットとして対応づけられていないレジスタウィンドの数が記入される。キャンリストア（ＣＡＮＲＥＳＴＯＲＥ）レジスタ４０８は既に論理レジスタセットと対応済みのレジスタウィンドの数（ただしＣＷＰは除く）を示す。
【００５２】
本発明の第一の実施の形態の動作を図２〜図４にもとづき説明する。図２はレジスタファイル４０１が０〜１５の番号の付されたレジスタウィンド４０２で構成され、コンテクスト０〜２が動作状態にあり、コンテクスト０は０番と１番のレジスタウィンド４０２が割り当てられ、コンテクスト１は２番〜９番のレジスタウィンド４０２が割り当てられ、コンテクスト２は１０番〜１５番のレジスタウィンド４０２が割り当てられ、コンテクスト３は非動作状態にあり、コンテクスト０では現在アプリケーションから参照されているレジスタウィンドが０番であり、コンテクスト１では同じく６番であり、コンテクスト２では１１番である場合を示す。この各コンテクスト０、１、２に対するレジスタウィンドの割り当ては、ＯＳがスレッドの生成や、動作終了を行うので、このようなときにＯＳにより行われる。
【００５３】
先ず図３に基づき、アプリケーションから論理レジスタに新しくレジスタウィンドを参照させるためにポインタを右に移動させる指令が到達した場合に、コンテクスト１について説明する。図３の処理はハードにより、図１に示す対応処理手段３２１−１が行う。
【００５４】
Ｓ１．先ずＣＷＰ値と、ＷＩＮＥＮＤレジスタ４０５の値が等しくないかどうか判別する。
【００５５】
Ｓ２．等しくなければ、図２においてＣＷＰのポインタの示している６番の右側には未参照のレジスタウィンドが存在していることが判別できるので、ＣＷＰのポインタの値を１つ右にずらす。この場合は７にする。
【００５６】
Ｓ３．前記Ｓ１において等しければＣＷＰのポインタの値は右端を指しているので右に移動できないため、左端のレジスタウィンドの開始ＩＤであるＷＩＮＳＴＡＲＴの値にする。
【００５７】
Ｓ４．前記Ｓ２又はＳ３において、レジスタ４０７のＣＡＮＳＡＶＥの値が０か否か判別する。
【００５８】
Ｓ５．０でなければまた論理レジスタセットとの対応付けの行われていないものを示しているので、ＣＡＮＳＡＶＥの値を１つ減らし、それからＣＡＮＲＥＳＴＯＲＥの値を１つ増やす。
【００５９】
Ｓ６．前記Ｓ４において０であれば、すでに割り当てられたレジスタウィンド全部が論理レジスタと対応づけられている状態なので、該当レジスタウィンドの内容をメモリ領域に一時待避させ、前のデータが消去されることを防止する。
【００６０】
Ｓ７．それから前記Ｓ２あるいはＳ３で更新したＣＷＰのポインタで示す該当レジスタウィンドを新しく論理レジスタと対応させて使用する。
【００６１】
次に図４にもとづき、コンテクストごとに割り当てられたレジスタウィンドを用い、既に論理レジスタと対応づけられたレジスタウィンドに参照を戻す場合（図２において、ＣＷＰのポインタを６→４の如く移動）の動作を説明する。このような動作命令はアプリケーションが発生するが、処理は、前記対応処理手段３２１−１等がハードにより行う。
【００６２】
Ｓ８．ＣＷＰのポインタの値と、ＷＩＮＳＴＡＲＴのレジスタ４０４の値が等しくないかどうか判別する。
【００６３】
Ｓ９．等しくなければ、現在のポインタの位置が左端にないことを示しており、左側には余裕があるのでＣＷＰのポインタの値を１つ左にずらす。図２の場合は５にする。
【００６４】
Ｓ１０．前記Ｓ８において等しければＣＷＰのポインタの値は左端にあることを示しているので、ＣＷＰのポインタを、１番右端に位置させるため、ＷＩＮＥＮＤの値にする。
【００６５】
Ｓ１１．前記Ｓ９またはＳ１０においてレジスタ４０８の示すＣＡＮＲＥＳＴＯＲＥの値が０か否か判別する。
【００６６】
Ｓ１２．０でなければ、メモリ領域から読み込まないでそのままリストアできることを示しているので、ＣＡＮＳＡＶＥの値を１つ増やし、ＣＡＮＲＥＳＴＯＲＥの値を１つ減らす。
【００６７】
Ｓ１３．前記Ｓ１１において０であれば、今度はＣＡＮＲＥＳＴＯＲＥしようとするレジスタウィンドには別のものが記入されていることを示しているので、メモリ領域に一時待避してある該当論理レジスタの内容を該当レジスタウィンドに回復させる。
【００６８】
Ｓ１４．それからＳ９あるいはＳ１０で更新したＣＷＰのポインタで示す該当レジスタウィンドを既に対応済みのレジスタウィンドとして使用する。
【００６９】
次に図５により、本発明の第２の実施の形態として、レジスタファイル７０１をコンテクスト数のグループに分割して割り当て制御を行う場合について説明する。図５においては図２で示す特殊レジスタＣＷＰ、ＣＡＮＳＡＶ、ＣＡＮＲＥＳＴＯＲＥ等も必要であるが、これらは省略している。
【００７０】
図５においては、マルチスレッドプロセッサで同時に実行可能なコンテクスト数（図５の例では４）で分割したレジスタウィンドのグループ単位での、動作状態にあるコンテクストへのレジスタウィンドの割り当て例を示す。
【００７１】
図５の例では、マルチスレッドプロセッサはコンテクスト０〜コンテクスト３の４つのコンテクストを持ち、レジスタウィンド７０２をグループ７０２−０、７０２−１、７０２−２、７０２−３の４つのグループに分けている。各コンテクストには、図５の▲１▼に代表的に示す如く、動作状態を示すステータスレジスタ７０３、ウィンスタートレジスタ７０４、ウィンエンドレジスタ７０５が設けられ、動作状態、レジスタウィンドの範囲等が示される。
【００７２】
図５には、動作状態にあるスレッド数が１スレッド（コンテクスト）のとき、▲１▼で示す如く、レジスタウィンド７０２の０〜１５が割り当てられる。動作状態にあるスレッド数が２スレッド（コンテクスト）のとき、▲２▼で示す如く、レジスタウィンド７０２の０〜７（グループ０、１）、とレジスタウィンド７０２の８〜１５（グループ２、３）との範囲で割り当てられ、動作状態にあるスレッド数が３スレッド（コンテクスト）のとき、▲３▼で示す如く、コンテクスト０にはレジスタウィンド７０２の０〜７（グループ０、１）が割り当てられ、コンテクスト２、３にはレジスタウィンド７０２の８〜１１（グループ２）、１２〜１５（グループ３）が割り当てられる。そして動作状態にあるスレッド数が４スレッド（コンテクスト）のとき、▲４▼で示す如く、コンテクスト０にはレジスタウィンド７０２の０〜３（グループ０）が割り当てられ、コンテクスト１には４〜７（グループ１）が割り当てられ、コンテクスト２には８〜１１（グループ２）が割り当てられ、コンテクスト３には１２〜１５（グループ３）が割り当てられる。
【００７３】
このようにグループ管理することによりレジスタウィンドを割り当て直すときの、ＯＳのオーバヘッドが軽くできる。
【００７４】
本発明の第３の実施の形態を図６により説明する。図６は、図５で示したグループ単位でのレジスタウィンド割り当て方法を示すものであって、レジスタウィンドのグループの利用頻度に基づいたスレッド生成時のレジスタウィンド割り当て状態を示す。
【００７５】
図６において、レジスタウィンド８０２はグループ８０２−０からグループ８０２−３までの４つのグループに分けられている。そして各グループ８０２−０〜８０２−３毎にアクセスカウンタ８０１（図６では４個）を持ち、各グループが一定期間中に該当コンテクストからアクセスされた回数を測定しておく。図６では先ずレジスタウィンド８０２はグループ０と１及びグループ２、３に分けられてた状態で２つのコンテクストに割り当てられ、その後３つのコンテクストに割り当てられた状態を示している。
【００７６】
新しいスレッドが生成される際には、各コンテクストのＣＷＰで指示されていないグループ（図６の例ではグループ１と３）のアクセス値２と１を比較し、利用頻度の低いグループ３を新しいコンテクストに割り当てる。なお図６（Ａ）はグループ０〜３の利用頻度が１０、２、８、１であることを示す。このようにして図６の（Ｂ）に示す如く、レジスタウィンド８０２のグループ０、１を１つのコンテクストに割り当て、グループ２を他のコンテクストに割り当て、さらにグループ３を新しいコンテクストに割り当てる。図６（Ｂ）に示す如く、新しいコンテクストに割り当てられたアクセスカウンタの値は、初め０を示している。
【００７７】
このようにして利用頻度にもとづき、正確にグループ分けすることができる。
【００７８】
本発明の第４の実施の形態を図７により説明する。図７は、図５で示したグループ単位でのレジスタウィンドの割り当て方法を示すものであって、スレッド終了時に解放されたレジスタウィンドの割り当て直した状態を示す。
【００７９】
図７において、レジスタウィンド９０２はグループ９０２−０からグループ９０２−３までの４つのグループに分けられている。またコンテクスト０〜３に、それぞれスピル（ｓｐｉｌｌ）カウンタ９０１を有し、各コンテクストに、レジスタウィンドが不足してメモリ領域への一時待避が行われた回数を測定しておく。
【００８０】
動作状態にあったスレッドが終了し、レジスタウィンドのグループが解放されるときに、動作が続行しているコンテクストのスピル（ｓｐｉｌｌ）カウント値をもとにして、レジスタウィンドが不足がちなコンテクストに、解放されたグループを追加して割り当てる。
【００８１】
図７では、グループ３が割り当てられていたコンテクスト３のスレッドが終了したとき、コンテクスト２のスピルカウンタの値が大きいので、これにグループ３を追加して割り当て、図７（Ｃ）に示す如く、コンテクスト２にグループ２と３を割り当てるものである。このようにしてスピルによるメモリアクセスの回数の多いものにレジスタウィンドを追加割り当てし、スピルによるメモリアクセス回数の減少をはかることができる。
【００８２】
ところで前記図５〜図７の説明では、レジスタファイルを複数のレジスタウィンド構成されるグループに等分し、スレッド生成／終了時にグループの割り当てを変更する場合について説明した。しかしレジスタウィンドの割り当てを細かい粒度のウィンド単位で行う例について次に説明する。動作スレッドの状態に応じてより細かい粒度でレジスタウィンドの割り当てを変化させるため、制御は複雑になるが、より効率的なレジスタウィンドの利用が可能である。
【００８３】
本発明の第５の実施の形態を図８により説明する。図８は、レジスタウィンド単位でのレジスタウィンド割り当て方法を示すもので、レジスタ不足によるメモリ領域への一時待避の発生回数に基づいた動的レジスタウィンド割り当て状態を示す。
【００８４】
図８においては、コンテクスト０〜３に、それぞれスピルカウンタ１００１を有し、各コンテクストに、レジスタウィンドが不足しメモリ領域へ一時待避が行われた回数を測定する。図８（Ａ）に示す状態では、コンテクスト０ではメモリ領域へ一時待避が行われた回数が１００回、コンテクスト１では１０回、コンテクスト２では１０回であったことを示している。
【００８５】
図８では一定期間中のスピルカウンタの値がコンテクスト１よりも極端に大きいコンテクスト０に対して、ウィンエンドに相当するレジスタウィンド１００２−１に隣接する、レジスタウィンド１００２−２を該当スレッド（コンテクスト０）に割り当て直している。なお極端に大きいとは、例えば差の値があらかじめ決めた閾値を越えた場合等で決める。
【００８６】
レジスタウィンドのコンシステンシを保つため、つまり一貫性を保つため、レジスタウィンドのコンテクスト割り当ての変更は、当該コンテクストのＣＷＰがレジスタウィンド１００２−１にある時点、つまりＣＷＰがそのコンテクストに割り当てられたレジスタウィンドの最右端にある時点に行う。このようにして図８（Ｂ）の割り当て状態を図８（Ｃ）に示す割り当て状態にすることができ、効率的なレジスタウィンドの利用が可能となる。
【００８７】
本発明の第６の実施の形態を図９により説明する。図９は、レジスタウィンド単位でのレジスタウィンド割り当て方法を示すもので、レジスタウィンドの利用頻度に基づいた動的レジスタウィンド割り当て状態を示す。
【００８８】
図９においては、レジスタウィンドごとにアクセスカウンタ１１０１を有し、各レジスタウィンドが一定期間中に該当コンテクストからアクセスされた回数を測定する。図９（Ａ）ではレジスタウィンド１１０２−０、１１０２−１がコンテクスト０（図示省略）に割り当てられ、レジスタウィンド１１０２−２〜１１０２−９がコンテクスト１（図示省略）に割り当てられ、レジスタウィンド１１０２−１０〜１１０２−１５がコンテクスト２（図示省略）に割り当てられた例を示す。
【００８９】
ＣＷＰがＷＩＮＥＮＤに相当するレジスタウィンド１１０２−１にある時点でコンテクスト０（図示省略）のレジスタが不足した場合、コンテクスト１（図示省略）に割り当てられている隣接するレジスタウィンド１１０２−２のアクセスカウンタをチェックし、利用回数が低ければ（この場合はアクセスカウント値は０）、このレジスタウィンド１１０２−２を、図９（Ｂ）に示す如く、レジスタウィンド１１０２−０、１１０２−１と同じ該当コンテクスト０（図示省略）に割り当て直す。
【００９０】
図１０により、動的にレジスタウィンド割り当てを変更する際の制御について説明する。割り当てを変更するとき、レジスタウィンドのコンシステンシを保つために、レジスタウィンドを増やしたいコンテクストのＣＷＰがＷＩＮＥＮＤの位置を指す場合にのみコンテクスト割り当ての変更を行う。この変更は図１に示す対応処理手段がハードで行う。
【００９１】
Ｓ１５．レジスタウィンドの割り当てを増やしたいコンテクストが存在したとき、そのコンテクストのＣＷＰがＷＩＮＥＮＤと等しいか否か判別する。
【００９２】
Ｓ１６．ＣＷＰとＷＩＮＥＮＤが等しい場合には、ＣＷＰ（該当コンテクストのＷＩＮＥＮＤ）の右隣に隣接するレジスタウィンドはコンテクストに割り当てられているか否かをチェックする。具体的には、他コンテクストのＷＩＮＳＴＡＲＴレジスタと比較して一致しなければ割り当てられていないことがわかる。
【００９３】
Ｓ１７．隣接するレジスタウィンドが既に他コンテクストに割り当てられている場合には、隣接するコンテクストのＷＩＮＳＴＡＲＴは論理レジスタに対応ずみか（ＣＬＥＡＮでないか）否かチェックする。
【００９４】
Ｓ１８．対応ずみであれば、ＣＬＥＡＮでないつまり有意義な値が存在するので、隣接するコンテクストのＣＡＮＳＡＶＥは０か否かチェックする。
【００９５】
Ｓ１９．０でなければ割り当てを減らす隣接するコンテクストのレジスタウィンドのうちＣＬＥＡＮなレジスタウィンドを右（ＷＩＮＥＮＤ）から探索し、該当レジスタウィンドの値をコピーする。
【００９６】
Ｓ２０．それから割り当てを減らす隣接するコンテクストのＣＡＮＳＡＶＥを１つ減らし、ＷＩＮＳＴＡＲＴを１つ右にずらす。また前記Ｓ１７において対応ずみでない（ＣＬＥＡＮな状態の場合）も、同様な処理が行われる。
【００９７】
Ｓ２１．それから右隣に隣接するレジスタウィンドを該当コンテクストに追加する。そして該当コンテクストのＣＡＮＳＡＶＥを１つ増やしＷＩＮＥＮＤを１つ右にずらす。前記Ｓ１６において割り当てられていない場合も同様な処理が行われる。
【００９８】
Ｓ２２．前記Ｓ１５においてＣＷＰとＣＩＮＥＮＤが等しくない場合はレジスタウィンドの割り当ては変更しない。また前記Ｓ１８において隣接するコンテクストのＣＡＮＳＡＶＥが０の場合は、レジスタウィンドが全部使用されている状態であるので、レジスタウィンドの割り当ては変更しない。
【００９９】
本発明によれば複数スレッドが同時に実行されるマルチスレッドプロセッサにおいて、レジスタウィンド構成のレジスタファイルを複数コンテクストで共有することでレジスタファイルの容量を抑えると共に、各コンテクストの状態に応じて適当な数のレジスタウィンドを割り当てることでレジスタウィンドを有効利用し、高性能の動作が実現される。
【０１００】
【発明の効果】
本発明により下記の効果を奏することができる。
【０１０１】
（１）レジスタファイル全体を複数のスレッドで共有し、各スレッド毎に割り当てられるレジスタファイルの、ウィンドスタート位置とウィンドエンド位置を記入する特殊レジスタを設け、各スレッドに連続した物理レジスタを割り当てるので、レジスタファイルの容量を抑制しつつ、高性能の処理を遂行することができる。
【０１０２】
（２）レジスタファイルを同時実行可能なスレッド数で複数のグループに分割するとともに、動作状態にあるコンテクストにこの分割したグループを割り当てることにより、割り当て直すときのオーバヘッドが軽くなるので、レジスタファイルの容量を抑制しつつ高性能の処理を遂行することができる。
【０１０３】
（３）動作スレッドの実行状態に応じて、コンテクスト割り当てをレジスタウィンド単位で動的に変更するので、動作スレッドの実行状態に応じて、細かい粒度のレジスタウィンド／物理レジスタ単位で、動的にコンテクスト割り当てを変更することが可能となり、処理の実態に対応した細かい粒度での割り当てを行うことが可能となり、これまたレジスタファイルの容量を抑制しつつ高性能の処理を遂行することができる。
【０１０４】
（４）各グループ毎あるいは各レジスタウィンド毎にアクセス回数を示すアクセスカウンタを設け、アクセス回数の少ないグループ又はレジスタウィンドを、より多くのグループ又はレジスタウィンドを必要としているコンテクストに割り当てることができ、割り当てのときのオーバヘッドを軽くするとともにレジスタファイルの容量を抑制し、高性能の処理を遂行できる。
【０１０５】
（５）レジスタウィンドが不足した際に発生するメモリ領域への一時待避が行われた回数を測定するｓｐｉｌｌカウンタを各コンテクスト毎に設け、その一時待避の発生頻度が高いコンテクストに、低いものよりも多くのレジスタウィンドを割り当てるので、メモリ領域への一時待避の発生頻度の高いコンテクストに、低いものより多くのレジスタウィンドを動的に割り当てることができ、メモリ領域への一時待避の発生頻度を抑制できるので、レジスタファイルの容量を抑制し、高性能の処理を遂行できる。
【図面の簡単な説明】
【図１】本発明の第一の実施の形態である。
【図２】本発明の複数スレッドで共有するレジスタファイル制御状態説明図である。
【図３】本発明の第一の実施の形態の動作説明図である。
【図４】本発明の第一の実施の形態において、既に論理レジスタと対応づけられているレジスタウィンドに参照を戻す場合の動作説明図である。
【図５】本発明の第２の実施の形態であって、レジスタファイルをコンテクスト数のグループに分割して割り当てて制御を行う場合の説明図である。
【図６】本発明の第３の実施の形態であって、レジスタウィンドのグループの利用頻度にもとづいてスレッド生成時のレジスタウィンド割り当てを行う場合の説明図である。
【図７】本発明の第４の実施の形態であって、スレッド終了時に解放されたレジスタウィンドの割り当て直しの場合の説明図である。
【図８】本発明の第５の実施の形態であって、レジスタ不足によるメモリ領域への一時待避の発生回数にもとづいた動的レジスタウィンド割り当てを行う場合の説明図である。
【図９】本発明の第６の実施の形態であって、レジスタウィンドの利用頻度にもとづいた動的レジスタウィンド割り当てを行う場合の説明図である。
【図１０】図８、９に示す、動的にレジスタウィンド割り当てを変更する場合の制御例である。
【図１１】レジスタウィンドの概念図である。
【図１２】従来のマルチスレッドプロセッサにおける複数コンテクスト固有レジスタファイルの概念図である。
【符号の説明】
３００  マルチスレッドプロセッサ
３０１  レジスタファイル
３０２−０〜３０２−１５  レジスタウィンド
３０３−０〜３０３−３  論理レジスタセット
３０４−０〜３０４−３  プログラムカウンタ
３０５  命令読出部
３０６−０〜３０６−３  命令バッファ
３０７  命令解読部
３０８  命令発行部
３０９  命令実行部
３２１−０〜３２１−２  対応処理手段
【図１】
0003727887.tif 000002
【図２】
0003727887.tif 000003
【図３】
0003727887.tif 000004
【図４】
0003727887.tif 000005
【図５】
0003727887.tif 000006
【図６】
0003727887.tif 000007
【図７】
0003727887.tif 000008
【図８】
0003727887.tif 000009
【図９】
0003727887.tif 000010
【図１０】
0003727887.tif 000011
【図１１】
0003727887.tif 000012
【図１２】
0003727887.tif 000013