(57)【要約】【課題】  マルチスレッド処理を高速に処理することができるようにすることを目的とする。【解決手段】  演算器１５による命令処理に使用されるデータを格納可能なレジスタウィンドウ１３をスレッド毎にそなえるとともに、複数のレジスタウィンドウ１３との間及び演算器１５との間でデータを相互に転送可能なワークレジスタ１４と、演算器１５により処理を実行するスレッドを識別するための実行スレッド識別子に基づいて、複数のレジスタウィンドウ１３とワークレジスタ１４と演算器１５との間におけるデータ転送を制御するマルチスレッド制御部１１とをそなえる。【選択図】        図１
2006039815.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、
前記複数のレジスタウィンドウとの間及び該演算器との間で該データを相互に転送可能なワークレジスタと、
該演算器により処理を実行する該スレッドを識別するための実行スレッド識別子に基づいて、前記複数のレジスタウィンドウと該ワークレジスタと該演算器との間におけるデータ転送を制御するマルチスレッド制御部とをそなえることを特徴とする、マルチスレッドプロセッサ。
【請求項２】
該マルチスレッド制御部が、
該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なうことを特徴とする、請求項１記載のマルチスレッドプロセッサ。
【請求項３】
該マルチスレッド制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに前記更新された該データの転送を行なうように、前記データ転送を制御することを特徴とする、請求項２記載のマルチスレッドプロセッサ。
【請求項４】
該マルチスレッド制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、前記切替え後に実行対象になるスレッドに対応するレジスタウィンドウから該ワークレジスタへの該データの転送が完了し、該ワークレジスタから該演算器による当該データの読み出しが可能になるまで、命令解読ステージで実行パイプラインをストールさせることを特徴とする、請求項３記載のマルチスレッドプロセッサ。
【請求項５】
複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、
該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、
該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえることを特徴とする、マルチスレッドプロセッサ。
【請求項６】
該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルをそなえ、
該レジスタ制御部が、該レジスタ識別テーブルを参照して該データ転送を制御することを特徴とする、請求項５記載のマルチスレッドプロセッサ。
【請求項７】
該レジスタ制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、該レジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択し、当該選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換するとともに、該データの置換結果に基づいて該レジスタ識別テーブルを更新することを特徴とする、請求項６記載のマルチスレッドプロセッサ。
【請求項８】
前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、
該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、
該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえることを特徴とする、請求項１〜請求項４のいずれか１項に記載のマルチスレッドプロセッサ。
【請求項９】
複数のスレッドを１以上の演算器により並列的に実行可能であり、該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、各レジスタウィンドウとの間で該データを相互に転送可能なワークレジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、
該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なうレジスタ更新ステップと、
該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに、該レジスタ更新ステップにおいて更新された該データの転送を行なうデータ転送ステップとをそなえることを特徴とする、レジスタ制御方法。
【請求項１０】
複数のスレッドを１以上の演算器により並列的に実行可能であり、前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、
該演算器による処理対象の該スレッドの切替えを行なうに際して、該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択する選択ステップと、
該選択ステップにおいて選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換する置換ステップと、
該レジスタ識別テーブルを該置換ステップにおける置換結果に基づいて更新する更新ステップとをそなえることを特徴とする、レジスタ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッドプロセッサにおけるスレッド切り替えにかかるレジスタ制御に関する。
【背景技術】
【０００２】
近年、コンピュータアーキテクチャの代表的なものとしては、複雑な処理を一命令で行なうＣＩＳＣ（Complex Instruction Set Computer）アーキテクチャの他、一命令中に実行する処理を簡素化したＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャ，複数の同時処理可能な命令をソフトウェアで１つの長い命令にまとめたＶＬＩＷ（Very Long Instruction Word）アーキテクチャ等が知られている。
【０００３】
また、これらのアーキテクチャを実現するコンピュータの中央演算器装置（ＣＰＵ；Central Processing Unit）における処理手法は、インオーダ実行型とアウトオブオーダ実行型との２つに大別することができる。
図８はインオーダ実行型の処理方法を説明するための図、図９はアウトオブオーダ実行型の処理方法を説明するための図である。インオーダ実行型は、図８に示すように、
プログラム順に沿って命令処理を行なう手法であり、アウトオブオーダ実行型は、図９に示すように、命令間の依存関係を見て、依存関係のない命令ならばプログラム順を追い越してでも処理を行なう手法である。
【０００４】
そして、近年においては、一のプロセッサにおいて一のプログラム（スレッド）を実行するシングルスレッド処理の他に、物理的に一のプロセッサにおいて複数のスレッドを並列的に実行するマルチスレッドプロセッサ方式が注目されている。
図１０（ａ），（ｂ）はマルチスレッドプロセッサ方式を説明するための図であり、図１０（ａ）はシングルスレッド処理を説明するための図、図１０（ｂ）はマルチスレッド処理を説明するための図である。なお、図１０（ｂ）においては、２つのＣＰＵでＡ，Ｂの２つのプログラムを並列的に処理するマルチスレッド処理の例を示している。
【０００５】
一般に、ＣＰＵは、ソフトウェアから可視なレジスタや状態レジスタ（ＣＰＵ状態レジスタ）に加え、加減算や乗算，除算、またメモリデータをレジスタに読み出すロード処理や、レジスタのデータをメモリに書き込むストア処理を実行する資源を有する。マルチスレッドプロセッサとは、１つのＣＰＵ内にソフトウェアから可視なレジスタを多重化し、別々なプログラムを実行するようにしながら、加減算などの命令実行資源を複数のプログラムで共有するものである（例えば、特許文献１参照）。
【０００６】
上述の如きマルチスレッド処理を実現するための方式としては、複数のスレッドを同時に実行する、fine grained multithreading方式やSimultaneous multithreading（ＳＭＴ）方式（図１１参照）の他、複数のスレッドを同時には実行せず、キャッシュミスのような事象が起きたときに別のスレッドに切り替えて実行する、coarse grained multithreading方式やVertical multithreading（ＶＭＴ）方式（図１２参照）がある。
【０００７】
図１１はＳＭＴ方式を説明するための図、図１２はＶＭＴ方式を説明するための図である。
ＶＭＴ方式は、処理に長時間かかるキャッシュミスした命令処理を隠蔽することを狙い、キャッシュミスを検出したときに、メモリからキャッシュまでデータを持ってくる処理をキャッシュ制御部（図示省略）が実行している間に、メモリアクセス以外の処理について、実行部や制御部（ともに図示省略）において他のスレッドに切り替え、実行するというものである。又、このＶＭＴ方式においては、キャッシュミスが発生しにくいスレッドに関しては、一定時間経過した時点で他のスレッドに切り替えるようになっている。
【特許文献１】特開２００３−２４１９６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、マルチスレッド処理を実現するために、複数のスレッドでＣＰＵの命令解読器や演算器等を共有する必要があり、又、ソフトウェアから可視のレジスタ類はスレッドごとに多重化する必要がある。従って、取り扱うレジスタ数が増えるため、レジスタ分の面積が増大し、レジスタ読み出し処理が遅くなるという課題がある。又、このように増加したレジスタを取り扱うための選択回路を追加する必要があり、これによっても、回路が複雑化してレジスタ読み出し処理が遅くなる。
【０００９】
本発明は、このような課題に鑑み創案されたもので、マルチスレッド処理を高速に処理することができるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
このため、本発明のマルチスレッドプロセッサ（請求項１）は、複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、前記複数のレジスタウィンドウとの間及び該演算器との間で該データを相互に転送可能なワークレジスタと、該演算器により処理を実行する該スレッドを識別するための実行スレッド識別子に基づいて、前記複数のレジスタウィンドウと該ワークレジスタと該演算器との間におけるデータ転送を制御するマルチスレッド制御部とをそなえることを特徴としている。
【００１１】
なお、該マルチスレッド制御部が、該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なってもよい（請求項２）。
また、該マルチスレッド制御部が、該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに前記更新された該データの転送を行なうように、前記データ転送を制御してもよい（請求項３）。
【００１２】
さらに、該マルチスレッド制御部が、該演算器による処理対象の該スレッドの切替えを行なうに際して、前記切替え後に実行対象になるスレッドに対応するレジスタウィンドウから該ワークレジスタへの該データの転送が完了し、該ワークレジスタから該演算器による当該データの読み出しが可能になるまで、命令解読ステージで実行パイプラインをストールさせてもよい（請求項４）。
【００１３】
また、本発明のマルチスレッドプロセッサ（請求項５）は、複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえることを特徴としている。
【００１４】
なお、該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルをそなえ、該レジスタ制御部が、該レジスタ識別テーブルを参照して該データ転送を制御してもよい（請求項６）。
また、該レジスタ制御部が、該演算器による処理対象の該スレッドの切替えを行なうに際して、該レジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択し、当該選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換するとともに、該データの置換結果に基づいて該レジスタ識別テーブルを更新してもよい（請求項７）。
【００１５】
さらに、前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえてもよい（請求項８）。
【００１６】
また、本発明のレジスタ制御方法（請求項９）は、複数のスレッドを１以上の演算器により並列的に実行可能であり、該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、各レジスタウィンドウとの間で該データを相互に転送可能なワークレジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なうレジスタ更新ステップと、該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに、該レジスタ更新ステップにおいて更新された該データの転送を行なうデータ転送ステップとをそなえることを特徴としている。
【００１７】
さらに、本発明のレジスタ制御方法（請求項１０）は、複数のスレッドを１以上の演算器により並列的に実行可能であり、前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、該演算器による処理対象の該スレッドの切替えを行なうに際して、該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択する選択ステップと、該選択ステップにおいて選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換する置換ステップと、該レジスタ識別テーブルを該置換ステップにおける置換結果に基づいて更新する更新ステップとをそなえることを特徴としている。
【発明の効果】
【００１８】
本発明によれば、マルチスレッド処理を行なう場合においても、レジスタからの読み出し処理を高速に行なうことができる利点がある。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の実施の形態を説明する。
図１は本発明の一実施形態としてのマルチスレッドプロセッサの構成を示すブロック図、図２および図３はそれぞれ本マルチスレッドプロセッサにおけるジョイントワークレジスタの機能構成を説明するための図である。
本発明の一実施形態としてのマルチスレッドプロセッサであるＣＰＵ（Central Processing Unit）１は、ＳＰＡＲＣ（Scalable Processor ARChitecture；Sun Microsystems社）等のレジスタウィンドウ方式（詳細は後述）のアーキテクチャをそなえるプロセッサであり、複数のスレッド（プログラム）を１以上の演算器１５（図２参照）により並列的に実行可能なマルチスレッドプロセッサとして構成されている。
【００２０】
本ＣＰＵ１は、図１に示すように、マルチスレッド制御部１１，状態レジスタ部１２０，レジスタウィンドウ１３，ジョイントワークレジスタ（ワークレジスタ）１４，実行部１５０，命令制御部１６，ＴＬＢ（論理アドレス・物理アドレス変換部）１７，Ｌ１命令キャッシュ１８，Ｌ１データキャッシュ１９およびＬ２キャッシュ２０をそなえて構成され、又、バス２２を介してメインメモリ２１と通信可能に接続されている。
【００２１】
Ｌ１命令キャッシュ１８は、実行部１５０が実行した命令を格納するための１次キャッシュであり、Ｌ１データキャッシュ１９は、実行部１５０が命令の実行に際して使用された各種データを格納するための１次キャッシュである。Ｌ２キャッシュ２０は、各種命令やデータを格納するための２次キャッシュである。
命令制御部１６は、１次命令キャッシュ１８やＬ２キャッシュ，メインメモリ２１から命令を取得して実行部１５０により実行させるための制御を行なうものであり、ＴＬＢ（Translation Look-aside Buffer；論理アドレス・物理アドレス変換部）１７は、論理アドレスから物理アドレスへの変換で発生するページテーブル参照のペナルティを小さくするために設けられた一種のキャッシュメモリであり、参照されたアドレスと変換情報の履歴を保存しておき、アドレス変換の高速化を実現するものである。
【００２２】
実行部（演算器）１５０は、レジスタウィンドウ１３やジョイントワークレジスタ１４，状態レジスタ１２等を用いて、演算等の種々の処理（命令処理）を行なうものであり、例えば種々の演算処理を実行する演算器（実行演算器）１５として機能するようになっており、レジスタ読み出しバス２３を介してジョイントワークレジスタ１４に接続されるとともに（図２参照）、レジスタ書き込みバス２５を介してジョイントワークレジスタ１４と、又、レジスタ書き込みバス２４−１〜２４−４を介して各レジスタウィンドウ１３−１〜１３−４とそれぞれ接続されている（図３参照）。
【００２３】
具体的には、実行部１５０は、レジスタ書き込みバス２４−１を介してレジスタウィンドウ１３−１と、レジスタ書き込みバス２４−２を介してレジスタウィンドウ１３−２と、レジスタ書き込みバス２４−３を介してレジスタウィンドウ１３−３と、レジスタ書き込みバス２４−４を介してレジスタウィンドウ１３−４とそれぞれ接続されている。
メインメモリ２１は、ＣＰＵ１の外部にそなえられたメモリであって、種々の命令やデータを格納するものであり、ＣＰＵ１とバス２２を介して通信可能に接続され、実行部１５０による処理・実行に必要とされる命令やデータがＬ１命令キャッシュ１８，Ｌ１データキャッシュ１９およびＬ２キャッシュ２０に格納されていない場合（キャッシュミス時）には、ＣＰＵ１はバス２２等を介してこのメインメモリ２１から命令やデータを読み出すようになっている。
【００２４】
レジスタウィンドウ１３は、実行部１５０による命令処理に使用されるデータを格納可能な記憶領域であり、図３に示すように、スレッド毎にそれぞれそなえられている。すなわち、本ＣＰＵ１は、マルチスレッドを実装するために、スレッドに対応させてレジスタ（レジスタウィンドウ１３）を多重化して構成されているのである。なお、このレジスタウィンドウ１３に対するデータの書き込みや読み出しは、後述するマルチスレッド制御部１１による制御に従って行なわれるようになっている。以下、本実施形態においてはＣＰＵ１がスレッド０〜スレッド３の４つのスレッドを並列的に実行（処理）する例について説明するものであり、本ＣＰＵ１が４つのレジスタウィンドウ１３−１〜１３−４をそなえて構成されている例について説明する。
【００２５】
なお、以下、レジスタウィンドウを示す符号としては、複数のレジスタウィンドウのうち１つを特定する必要があるときには符号１３−１〜１３−４を用いるが、任意のレジスタウィンドウを指すときには符号１３を用いる。又、一般に、プロセッサ等にそなえられるレジスタは、実際には数ビットのデータを保持可能な複数のレジスタの集合（レジスタ群）として構成されるものであるが、本実施形態においては、便宜上、単にレジスタと称する。
【００２６】
図２に示す例においては、スレッド０がレジスタウィンドウ１３−１を、スレッド１がレジスタウィンドウ１３−２を、スレッド２がレジスタウィンドウ１３−３を、スレッド３がレジスタウィンドウ１３−４をそれぞれ用いるようになっており、マルチスレッド制御部１１によって、これらのレジスタウィンドウ１３−１〜１３−４がジョイントワークレジスタ１４を共有するように制御されるようになっている。又、この図２中においては、演算処理毎に演算器１５が示されている。
【００２７】
ジョイントワークレジスタ（ワークレジスタ）１４は、上記複数（４つ）のレジスタウィンドウ１３と実行部１５０との間にそなえられ、各レジスタウィンドウ１３及び実行部１５０との間でデータを相互に転送可能に構成されている。すなわち、ジョイントワークレジスタ１４は、各レジスタウィンドウ１３から転送されるデータを格納したり、又、各レジスタウィンドウ１３にデータを転送したりするように構成されている。このジョイントワークレジスタ１４には、演算器１５によって実行されるスレッドにかかるデータが格納され、演算器１５は、このジョイントワークレジスタ１４に格納されたデータを用いて種々の演算処理を行なうようになっている。
【００２８】
さて、本レジスタウィンドウ方式においては、例えば、１つのウィンドウが３２ワードで構成され、８ワードのグローバルレジスタ，８ワードのインレジスタ，８ワードのアウトレジスタおよび８ワードのローカルレジスタによって１つのウィンドウが構成されている。なお、本実施形態においては、ウィンドウ数＝８、すなわち、８ウィンドウの例について説明する。
【００２９】
図４はレジスタウィンドウ方式を説明するための図である。本ＣＰＵ１において採用されているレジスタウィンドウ方式においては、この図４に示すように、複数のレジスタウィンドウがリング状に連結されている。
このレジスタウィンドウ方式においては、図４に示すように、ＣＷＰ（Current Window Pointer）を用いて現在のウィンドウ（カレントウィンドウ）が示されるようになっており、このＣＷＰによって指し示されるウィンドウ番号のレジスタを一時にプログラムで扱うことができるようになっている。なお、図４においては、ＣＷＰ＝２の例を示している。
【００３０】
そして、サブルーチンコールのときには、SAVE命令を実行してＣＷＰをプラス１して更新し、サブルーチンリターンのときには、RESTORE命令やRETURN命令を実行してＣＷＰをマイナス１して更新するようになっている。ウィンドウポインタがプラス１したものは、プラス１する前のウィンドウのアウトレジスタ（outs）8ワードをインレジスタ（ins）として扱い、逆にマイナス1したものは、マイナス１する前のウィンドウのインレジスタをアウトレジスタとして扱うようになっており、このようにして、隣のウィンドウと8ワード分共有するようになっている。
【００３１】
なお、グローバルレジスタは、ウィンドウポインタを変更しても変わらないものであり、割り込み処理などが生じたとき等の特別な処理時にのみ入れ替えられるようになっている。
また、ＣＷＰを更新、つまりウィンドウを切り替えると、新しいレジスタを用いて処理が可能になり、レジスタのメモリ退避のペナルティ損失を軽減できるようになっている。
【００３２】
この図４に示すレジスタウィンドウにおいて、ＣＷＰによって特定されるカレントウィンドウと、その両隣のウィンドウとをジョイントワークレジスタ（ＪＷＲ（Joint-Work-Register；結合作業レジスタ）領域と呼ぶ。具体的には、このＪＷＲ領域は、ＣＷＰ，ＣＷＰ＋１およびＣＷＰ−１の3ウィンドウ分のインレジスタ、アウトレジスタ、ローカルレジスタ、さらにＣＷＰに関係ないグローバルレジスタを有する合計６４ワードの領域として構成される。
【００３３】
ウィンドウを切り替えるのに最も用いられるSAVE命令やRESTORE命令，RETURN命令の実行の際には、ウィンドウが切り替わった場合も、隣のウィンドウがすでにＪＷＲ領域内に格納されているため、命令処理をインターロックせずに、ＣＷＰを更新し、その後、隣のウィンドウ内のレジスタ読み出しを可能にしている。そして、上記命令の完了の際に、さらに一つ隣のウィンドウがバックグラウンドでＪＷＲ領域に転送されるようになっている。
【００３４】
そして、このＪＷＲ領域のデータが、前述したジョイントワークレジスタ１４内に格納されるようになっている。
また、演算器１５の演算結果等のジョイントワークレジスタ１４に対するデータの書き込みや、ジョイントワークレジスタ１４からのデータの読み出しは、マルチスレッド制御部１１による制御に従って行なわれるようになっている。
【００３５】
マルチスレッド制御部１１は、実行部１５０（演算器１５）により処理を実行するスレッドを識別するための実行スレッド識別子に基づいて、複数のレジスタウィンドウ１３とワークレジスタ１４と演算器１５との間におけるデータ転送を制御するものである。
このマルチスレッド制御部１１は、図３に示すように、実行部１５０による命令完了時のレジスタ更新を、ジョイントワークレジスタ１４と、その命令にかかるスレッドに対応するレジスタウィンドウ１３との両方に対してそれぞれ行なわせるように制御するようになっている（レジスタ更新ステップ）。そして、演算器１５によるスレッド実行中におけるレジスタ読み出しは、このジョイントワークレジスタ１４から行なわれるようになっている。
【００３６】
また、マルチスレッド制御部１１は、演算器１５による処理対象のスレッドの切替えを行なうに際して、切替え後に実行対象になるスレッドに対応するレジスタウィンドウ１３からジョイントワークレジスタ１４にデータの転送を行なうように（データ転送ステップ）、そのデータ転送を制御するようになっている。
さらに、マルチスレッド制御部１１は、演算器１５による処理対象のスレッドの切替えを行なうに際して、切替え後に実行対象になるスレッドに対応するレジスタウィンドウ１３からジョイントワークレジスタ１４へのデータの転送が完了し、ジョイントワークレジスタ１４から演算器１５による当該データの読み出しが可能になるまで、命令解読ステージで実行パイプラインをストールさせるようになっている。
【００３７】
図５は本ＣＰＵ１におけるスレッドの命令処理の開始タイミングの例を示す図である。例えば、キャッシュミスの発生時や最後にスレッド切り替えを行なった後の一定時間経過時等のタイミングでスレッドを切り替える際には、先ずＣＷＰを新しいスレッドに置き換え、その後、LOAD-CWP信号やＣＷＰをマルチスレッド制御部１１から送信し、さらにこのマルチスレッド制御部１１から新しいスレッド識別子を送信する。レジスタウィンドウ１３からジョイントワークレジスタ１４へは、LOAD-CWP信号により転送を開始するが、その時点のスレッド識別子を参照して、新しいスレッドのレジスタウィンドウを選択するようにしている。
【００３８】
さて、図５に示す例において３ウィンドウ分のレジスタをレジスタウィンドウ１３からジョイントワークレジスタ１４に転送するためには９サイクルかかる。この間ジョイントワークレジスタ１４から演算器１５にデータを読み出すことができないため、マルチスレッド制御部１１は、図５に示すように、インターロック（Ｄ＿インターロック）を行なうことにより命令解読ステージで実行パイプラインをストールさせるのである。
【００３９】
図６は本発明の一実施形態としてのマルチスレッドプロセッサにおける状態レジスタ部１２０の構成を説明するための図であり、図７はそのスレッド切り替え時における状態レジスタ部１２０の処理を説明するための図である。
状態レジスタ部１２０は、例えば、実行部１５０が演算命令を実行したときの実行結果の状態等、プロセッサの状態を示す情報を保持するものであり、図６に示すように、休止用プロセッサ状態レジスタ（第２レジスタ）１２−１，１２−２，１２−３，実行用プロセッサ状態レジスタ（第１レジスタ；ハードウェア制御用プロセッサ状態レジスタ）１２１およびレジスタ識別テーブル１２２をそなえて構成されている。
【００４０】
実行用プロセッサ状態レジスタ１２１は、複数のスレッドのうち演算器１５により実行される実行対象スレッドに関するデータを格納可能なものであり、本実施形態においては１つそなえられている。
休止用プロセッサ状態レジスタ（第２レジスタ）１２−１〜１２−３は、実行用プロセッサ状態レジスタ（第１レジスタ）１２１との間で該データを相互に転送可能に構成され、複数のスレッドのうち実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、これらの休止スレッドと同数（本実施形態では３つ）そなえられている。
【００４１】
なお、以下、休止用プロセッサ状態レジスタを示す符号としては、複数の休止用プロセッサ状態レジスタ１２のうち１つを特定する必要があるときには符号１２−１〜１２−３を用いるが、任意の休止用プロセッサ状態レジスタを指すときには符号１２を用いる。
また、マルチスレッド制御部１１（レジスタ制御部）は、休止用プロセッサ状態レジスタ１２と実行用プロセッサ状態レジスタ１２１との間におけるデータ転送を制御するようになっており、休止スレッドとその休止スレッドに関するデータとを対応付けて成るレジスタ識別テーブル１２２をそなえ、このレジスタ識別テーブル１２２を参照してデータ転送を制御するようになっている。
【００４２】
なお、本実施形態においては、レジスタ識別テーブル１２２は、休止スレッドのスレッド番号と、その休止スレッドにかかる休止用プロセッサ状態レジスタ１２の格納位置（物理スタック；スタック＃（番号））とを対応付けて管理している（スレッド対スタックのマップ）。
そして、マルチスレッド制御部１１は、演算器１５による処理対象のスレッドの切替えを行なうに際して、レジスタ識別テーブル１２２を参照して、切替え後に実行対象になるスレッド（実行対象スレッド）に対応する休止用プロセッサ状態レジスタ１２を選択し（選択ステップ）、この休止用プロセッサ状態レジスタ１２に格納されているデータと、実行用プロセッサ状態レジスタ１２１に格納されているデータとを置換し、更に、レジスタ識別テーブル１２２を置換後の状態に更新するようになっている。
【００４３】
すなわち、スレッドの切り替えを行なう場合には、図７に示すように、マルチスレッド制御部１１は、実行スレッド識別子に基づいて新たに実行対象スレッドを認識し、現在実行中のスレッド（図７に示す例においてはスレッド０）から、新たに実行状態になる実行対象スレッド（図７に示す例においてはスレッド１）への切り替え指示がスレッド切り替え制御部から行なわれると、マルチスレッド制御部１１は、レジスタ識別テーブル１２２を参照して、実行対象スレッド（スレッド１）にかかる休止用プロセッサ状態レジスタ１２のスタック番号（スタック０）を取得する。
【００４４】
マルチスレッド制御部１１は、この取得したスタック０から実行用プロセッサ状態レジスタ１２１にデータを転送するとともに、スタック0が空くので、実行用プロセッサ状態レジスタ１２１のデータをスタック0番に転送する。これにより、選択された休止用プロセッサ状態レジスタ１２と実行用プロセッサ状態レジスタ１２１とのレジスタ内のデータの入れ替えを行なう（置換ステップ）。
【００４５】
また、マルチスレッド制御部１１は、レジスタ識別テーブル１２２の更新を行なう（更新ステップ）。すなわち、レジスタ識別テーブル１２２のスレッド0に対応するスタック番号に、次に実行状態になるスレッド1のスタック番号０をコピーし、つまりスタック0番を書き込む。
なお、レジスタ識別テーブル１２２においては、現在実行中のスレッドに対応するスタック＃は、実行前にスタックされていた番号が入ったままとなっている（図７における更新後のレジスタ識別テーブル１２２のスレッド１参照）。
【００４６】
また、プロセッサ状態レジスタの入れ替えは、スレッド切り替え後すぐに新しいスレッドの命令フェッチを開始するため、１サイクルで行なう。同時に行なうレジスタウィンドウからジョイントワークレジスタ１４へのデータ転送に比べて処理サイクルが少ないので、プロセッサ状態レジスタ転送用には特別にインターロックをかけない。
このように、本発明の一実施形態としてのＣＰＵ１によれば、レジスタウィンドウ方式のアーキテクチャであり、カレントウィンドウを含んだジョイントワークレジスタ１４を備えるプロセッサで、キャッシュミスや一定時間でスレッドを切り替えるマルチスレッド処理を行なう場合に、マルチスレッド用にウィンドウレジスタ１３を多重化する際に、異なるスレッド（レジスタ）間でジョイントワークレジスタ１４を共有することにより、演算器１５のレジスタ読み出しをマルチスレッドをしない場合と同等に高速に行なうことが可能になる。
【００４７】
また、スレッド数だけ多重化されたレジスタウィンドウ１３とジョイントワークレジスタ１４とを相互に通信可能に構成して、ジョイントワークレジスタ１４を複数のスレッドで共有可能に構成することにより、マルチスレッドを実装し、スレッド実行中のレジスタ読み出しをマルチスレッド処理しない場合と同様に行なうことを可能にしている。
さらに、命令完了時のレジスタ書き込みは、ジョイントワークレジスタ１４と同時にレジスタウィンドウにも行なうことにより、ジョイントワークレジスタ１４からレジスタウィンドウに書き戻す処理が不要であり、処理を高速化することができる。すなわち、スレッド切り替えの際には、次に実行状態になるスレッドのレジスタウィンドウ１３からジョイントワークレジスタ１４に転送を行なうだけでよく、切り替わる前のスレッドにかかるデータをジョイントワークレジスタ１４からそのスレッドにかかるレジスタウィンドウ１３への転送をする必要がない。
【００４８】
また、ＣＰＵ１の状態を示すプロセッサ状態レジスタなどのように、常に参照する可能性があるためにワークレジスタ（ジョイントワークレジスタ）を持たないレジスタに関しては、実行用プロセッサ状態レジスタ１２１と、休止スレッド用の休止用プロセッサ状態レジスタ１２とをそなえ、スレッドを切り替えるごとに実行用プロセッサ状態レジスタ１２１の内容を、対応する休止用プロセッサ状態レジスタ１２と入れ替えて格納し、スレッドの実行時に、実行用プロセッサ状態レジスタ１２１のみを用いるようにすることにより、マルチスレッドをしない場合と同等にレジスタ参照を高速に行なうことが可能になる。
【００４９】
本発明では、キャッシュミスや一定時間経過をトリガーにして、実行するスレッドを切り替えるマルチスレッド方式を採用するプロセッサにおいて、レジスタウィンドウ１３を多重化し、これらのレジスタウィンドウ１３によりレジスタ読み出し用のジョイントワークレジスタ（ワークレジスタ）１４を共有することにより、マルチスレッドでレジスタが増大した場合も、スレッド実行状態の命令処理中のレジスタ読み出しにおいてマルチスレッド方式をしない場合と同じように高速に行なうことが可能になる。又、ワークレジスタをとらない状態レジスタにおいても、実行用プロセッサ状態レジスタ１２１と休止用プロセッサ状態レジスタ１２とをそなえ、スレッドを切り替える時に実行用プロセッサ状態レジスタ１２１と、次に実行するスレッドを格納するスタックとを入れ替えることにより、マルチスレッドでレジスタが増大した場合も、スレッド実行状態の命令処理中のレジスタ読み出しにおいてマルチスレッド方式をしない場合と同じように高速に行なうことが可能になる。
【００５０】
そして、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
例えば、上述した実施形態においては、マルチスレッドの例として４スレッドを実行する例について説明しているが、これに限定されるものではなく、３以下もしくは５以上のスレッドを実行してもよい。
【００５１】
また、上述した実施形態においては、ワークレジスタを持たないレジスタの例として状態レジスタを用いて説明しているが、これに限定されるものではなく、状態レジスタ以外の他のレジスタに上記手法を適用してもよい。
なお、本発明の各実施形態が開示されていれば、本発明を当業者によって実施・製造することが可能である。
【００５２】
そして、本発明は、以下に示すように要約することができる。
（付記１）  複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、
前記複数のレジスタウィンドウとの間及び該演算器との間で該データを相互に転送可能なワークレジスタと、
該演算器により処理を実行する該スレッドを識別するための実行スレッド識別子に基づいて、前記複数のレジスタウィンドウと該ワークレジスタと該演算器との間におけるデータ転送を制御するマルチスレッド制御部とをそなえることを特徴とする、マルチスレッドプロセッサ。
【００５３】
（付記２）  該マルチスレッド制御部が、
該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なうことを特徴とする、付記１記載のマルチスレッドプロセッサ。
（付記３）  該マルチスレッド制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに前記更新された該データの転送を行なうように、前記データ転送を制御することを特徴とする、付記２記載のマルチスレッドプロセッサ。
【００５４】
（付記４）  該マルチスレッド制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、前記切替え後に実行対象になるスレッドに対応するレジスタウィンドウから該ワークレジスタへの該データの転送が完了し、該ワークレジスタから該演算器による当該データの読み出しが可能になるまで、命令解読ステージで実行パイプラインをストールさせることを特徴とする、付記３記載のマルチスレッドプロセッサ。
【００５５】
（付記５）  複数のスレッドを１以上の演算器により並列的に実行可能なマルチスレッドプロセッサであって、
前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、
該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、
該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえることを特徴とする、マルチスレッドプロセッサ。
【００５６】
（付記６）  該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルをそなえ、
該レジスタ制御部が、該レジスタ識別テーブルを参照して該データ転送を制御することを特徴とする、付記５記載のマルチスレッドプロセッサ。
（付記７）  該レジスタ制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、該レジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択し、当該選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換するとともに、該データの置換結果に基づいて該レジスタ識別テーブルを更新することを特徴とする、付記６記載のマルチスレッドプロセッサ。
【００５７】
（付記８）  前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、
該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタと、
該第２レジスタと該第１レジスタとの間におけるデータ転送を制御するレジスタ制御部とをそなえることを特徴とする、付記１〜付記４のいずれか１項に記載のマルチスレッドプロセッサ。
【００５８】
（付記９）  該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルをそなえ、
該レジスタ制御部が、該レジスタ識別テーブルを参照して該データ転送を制御することを特徴とする、付記８記載のマルチスレッドプロセッサ。
（付記１０）  該レジスタ制御部が、
該演算器による処理対象の該スレッドの切替えを行なうに際して、該レジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択し、当該選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換するとともに、該データの置換結果に基づいて該レジスタ識別テーブルを更新することを特徴とする、付記９記載のマルチスレッドプロセッサ。
【００５９】
（付記１１）  複数のスレッドを１以上の演算器により並列的に実行可能であり、該演算器による命令処理に使用されるデータを格納可能なレジスタウィンドウを該スレッド毎にそなえるとともに、各レジスタウィンドウとの間で該データを相互に転送可能なワークレジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、
該演算器による命令完了時のレジスタ更新を、該ワークレジスタとともに当該命令完了にかかるスレッドに対応するレジスタウィンドウに対しても行なうレジスタ更新ステップと、
該演算器による処理対象の該スレッドの切替えを行なうに際して、切替え後に実行対象になる該スレッドに対応する該レジスタウィンドウから該ワークレジスタに、該レジスタ更新ステップにおいて更新された該データの転送を行なうデータ転送ステップとをそなえることを特徴とする、レジスタ制御方法。
【００６０】
（付記１２）  該演算器による処理対象の該スレッドの切替えを行なうに際して、前記切替え後に実行対象になるスレッドに対応するレジスタウィンドウから該ワークレジスタへの該データの転送が完了し、該ワークレジスタから該演算器による当該データの読み出しが可能になるまで、命令解読ステージで実行パイプラインをストールさせるストールステップをそなえることを特徴とする、付記１１記載のレジスタ制御方法。
【００６１】
（付記１３）  複数のスレッドを１以上の演算器により並列的に実行可能であり、前記複数のスレッドのうち該演算器により実行される実行対象スレッドに関するデータを格納可能な第１レジスタと、該第１レジスタとの間で該データを相互に転送可能に構成され、前記複数のスレッドのうち該実行対象スレッド以外の休止スレッドに関するデータを格納可能であり、該休止スレッドと同数そなえられた第２レジスタとをそなえるマルチスレッドプロセッサにおけるレジスタ制御方法であって、
該演算器による処理対象の該スレッドの切替えを行なうに際して、該休止スレッドと当該休止スレッドに関するデータを格納している該第２レジスタとを対応付けて成るレジスタ識別テーブルを参照して、切替え後に実行対象になる該スレッドに対応する該第２レジスタを選択する選択ステップと、
該選択ステップにおいて選択された該第２レジスタに格納されている該データと、該第１レジスタに格納されている該データとを置換する置換ステップと、
該レジスタ識別テーブルを該置換ステップにおける置換結果に基づいて更新する更新ステップとをそなえることを特徴とする、レジスタ制御方法。
【産業上の利用可能性】
【００６２】
ＳＰＡＲＣ等の比較的大きなレジスタ領域を有するプロセッサでマルチスレッド処理を行なう際のレジスタ制御に適用できる。
【図面の簡単な説明】
【００６３】
【図１】本発明の一実施形態としてのマルチスレッドプロセッサの構成を示すブロック図である。
【図２】本発明の一実施形態としてのマルチスレッドプロセッサにおけるジョイントワークレジスタの機能構成を説明するための図である。
【図３】本発明の一実施形態としてのマルチスレッドプロセッサにおけるジョイントワークレジスタの機能構成を説明するための図である。
【図４】レジスタウィンドウ方式を説明するための図である。
【図５】本発明の一実施形態としてのマルチスレッドプロセッサにおけるスレッドの命令処理の開始タイミングの例を示す図である。
【図６】本発明の一実施形態としてのマルチスレッドプロセッサにおける状態レジスタ部の構成を説明するための図
【図７】本発明の一実施形態としてのマルチスレッドプロセッサにおけるスレッド切り替え時における状態レジスタ部の処理を説明するための図である。
【図８】インオーダ実行型の処理方法を説明するための図である。
【図９】アウトオブオーダ実行型の処理方法を説明するための図である。
【図１０】（ａ），（ｂ）はマルチスレッドプロセッサ方式を説明するための図である。
【図１１】ＳＭＴ方式を説明するための図である。
【図１２】ＶＭＴ方式を説明するための図である。
【符号の説明】
【００６４】
１    ＣＰＵ（マルチスレッドプロセッサ）
１１    マルチスレッド制御部（レジスタ制御部）
１２−１〜１２−３，１２    休止用プロセッサ状態レジスタ（第２レジスタ）
１３，１３−１〜１３−４    レジスタウィンドウ
１４    ジョイントワークレジスタ（ワークレジスタ）
１５    演算器
１６    命令制御部
１７    ＴＬＢ
１８    Ｌ１命令キャッシュ
１９    Ｌ１データキャッシュ
２０    Ｌ２キャッシュ
２１    メインメモリ
２２    バス
２３    レジスタ読み出しバス
２４−１〜２４−４，２５    レジスタ書き込みバス
１２０    状態レジスタ部
１２１    実行用プロセッサ状態レジスタ（第１レジスタ）
１２２    レジスタ識別テーブル
１５０    実行部
【図１】
2006039815.tif 000003
【図２】
2006039815.tif 000004
【図３】
2006039815.tif 000005
【図４】
2006039815.tif 000006
【図５】
2006039815.tif 000007
【図６】
2006039815.tif 000008
【図７】
2006039815.tif 000009
【図８】
2006039815.tif 000010
【図９】
2006039815.tif 000011
【図１０】
2006039815.tif 000012
【図１１】
2006039815.tif 000013
【図１２】
2006039815.tif 000014