(57)【要約】【課題】従来のマルチスレッドプロセッサでは、ハードウェアスレッドの最低実行時間を保証しながら、柔軟なハードウェアスレッドの選択ができない問題があった。【解決手段】本発明にかかるマルチスレッドプロセッサは、それぞれが独立した命令流を生成する複数のハードウェアスレッドと、次実行サイクルにおいて実行するハードウェアスレッドを指定するスレッド選択信号ＴＳＥＬを出力するスレッドスケジューラ１９と、スレッド選択信号ＴＳＥＬに応じて選択したハードウェアスレッドにより生成された命令を出力する第１のセレクタと、第１のセレクタから出力される命令を実行する演算回路と、を有し、スレッドスケジューラ１９は、予め決められた第１の実行期間において固定的に選択された少なくとも１つのハードウェアスレッドの実行を指定し、第２の実行期間において任意のハードウェアスレッドの実行を指定するものである。【選択図】図２
2010086128.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが独立した命令流を生成する複数のハードウェアスレッドと、
スケジュールに従って、前記複数のハードウェアスレッドのうち次実行サイクルにおいて実行するハードウェアスレッドを指定するスレッド選択信号を出力するスレッドスケジューラと、
前記スレッド選択信号に応じて前記複数のハードウェアスレッドのいずれか１つを選択して、選択したハードウェアスレッドにより生成された命令を出力する第１のセレクタと、
前記第１のセレクタから出力される命令を実行する演算回路と、を有し、
前記スレッドスケジューラは、予め決められた第１の実行期間において前記複数のハードウェアスレッドのうちから固定的に選択された少なくとも１つの前記ハードウェアスレッドの実行を指定し、前記第１の実行期間以外の第２の実行期間において任意の前記ハードウェアスレッドの実行を指定するマルチスレッドプロセッサ。
【請求項２】
前記スレッドスケジューラは、前記スケジュールを循環的に実行する請求項１に記載のマルチスレッドプロセッサ。
【請求項３】
前記スレッドスケジューラは、前記第２の実行期間において所定のアルゴリズムに従って決定された任意の前記ハードウェアスレッドを指定する請求項１又は２に記載のマルチスレッドプロセッサ。
【請求項４】
前記スレッドスケジューラは、
前記第１の実行期間と前記第２の実行期間とを切り替える選択信号を出力すると共に、前記選択信号が前記第１の実行期間を指定している期間において予め設定された実行順序で実行される前記ハードウェアスレッドを特定する第１のハードウェアスレッド番号を出力する第１のスケジューラと、
所定のアルゴリズムに従って前記複数のハードウェアスレッドのうち１つの前記ハードウェアスロットを指定する第２のハードウェアスレッド番号を出力する第２のスケジューラと、
前記選択信号に応じて、前記第１のハードウェアスレッド番号と前記第２のハードウェアスレッド番号とのいずれか一方を選択して前記スレッド選択信号として出力する第２のセレクタと、
を有する請求項１乃至３のいずれか１項に記載のマルチスレッドプロセッサ。
【請求項５】
前記第１のスケジューラは、
複数のスロットを含むスレッド制御レジスタと、
所定の間隔でカウント値を更新するカウンタと、
前記カウント値に応じて前記複数のスロットのうち１つのスロットを選択し、選択した前記スロットに格納される値に基づき前記選択信号及び第１のハードウェアスレッド番号を出力する第３のセレクタと、を有し、
前記スロットには、それぞれ前記ハードウェアスレッド番号と、当該スロットが選択された場合における前記選択信号の論理レベルを決定する期間属性設定フラグと、が格納される請求項４に記載のマルチスレッドプロセッサ。
【請求項６】
前記カウンタは、所定の周期で前記カウント値がリセットされる請求項５に記載のマルチスレッドプロセッサ。
【請求項７】
前記スレッドスケジューラが前記第１の実行期間において指定する前記ハードウェアスレッドは、前記マルチスレッドプロセッサの起動後に実行される管理プログラムにより値が設定される請求項１乃至６に記載のマルチスレッドプロセッサ。
【請求項８】
複数のハードウェアスレッドを有し、前記ハードウェアスレッドを所定のスケジュールに従って切り替えながら、前記ハードウェアスレッドにより生成される命令流を実行するマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法であって、
実行される前記ハードウェアスレッドが予め設定される第１の実行期間と、実行される前記ハードウェアスレッドが任意に設定される第２の実行期間と、を含むスレッド実行スケジュールを巡回的に実行し、
前記スレッド実行スケジュールに従って指定された前記ハードウェアスレッドにより生成される命令流を順次実行するマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明にかかるマルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法に関し、特に複数のハードウェアスレッドの実行順序をスケジュールするスレッドスケジューラを有するマルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法に関する。
【背景技術】
【０００２】
近年、プロセッサの処理能力を向上させるためにマルチスレッドプロセッサが提案されている。マルチスレッドプロセッサは、それぞれが独立した命令流を生成するスレッドを有する。そして、マルチスレッドプロセッサは、パイプライン処理により命令を処理する演算回路に対していずれのスレッドにより生成された命令流を処理させるかを切り替えながら演算処理を実行する。このとき、マルチスレッドプロセッサは、１つのスレッドにより生成された命令をパイプライン中の１つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理することができる。つまり、マルチスレッドプロセッサの演算回路では、互いに独立関係にある命令がそれぞれ異なる実行ステージで実行されることになる。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
【０００３】
このようなマルチスレッドプロセッサの一例が特許文献１に開示されている。特許文献１に記載のマルチスレッドプロセッサでは、複数のプロセッサエレメントと、各プロセッサエレメントのスレッドを切り替える並列プロセッサ制御部とを備える。そして、並列プロセッサ制御部は、プロセッサエレメントにおいて実行されているスレッドの実行時間をカウントし、カウントした時間がスレッドの割り当て時間に達したときにタイムアウト信号を出力し、タイムアウト信号と実行順序レジスタに保持された実行順序情報とに基づきプロセッサエレメントが実行すべきスレッドを切り替える。
【０００４】
このようにマルチスレッドプロセッサでは、演算回路においていずれのスレッドが生成する命令流を処理させるかをスケジュールに従って切り替える。このレッドのスケジュール方法の一例が特許文献２において開示されている。特許文献２に記載のマルチスレッドプロセッサでは、複数のスレッドを巡回的に、そのスレッドに割り当てられた時間ずつ実行する。つまり、特許文献２では、固定的に定められたスケジュールを巡回的に実行することで所定の実行時間比で各スレッドが実行される。
【０００５】
また、スレッドの別のスケジュール方法が特許文献３に開示されている。特許文献３では、スレッドのスケジューリングの方法としてラウンドロビン方式とプライオリティ方式とが記載されている。ラウンドロビン方式では、待ち行列に入っているスレッドを一定時間毎に順番に選んで実行する。そのため、ラウンドロビン方式では、待ち行列にあるスレッドが一定時間ごとに公平にＣＰＵに割り当てられて実行される。また、プライオリティ方式は、スレッドの優先度の順にスレッドを実行する。より具体的には、プライオリティ方式では、優先度毎に設けられた待ち行列に各優先度のスレッドがキューイングされ、優先度の高い待ち行列から順にスレッドが選択されＣＰＵに割り当てられて実行される。
【特許文献１】特開２００７−３１７１７１号公報
【特許文献２】特開２００８−５２７５０号公報
【特許文献３】特開２００６−１５５４８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、ラウンドロビン方式及びプライオリティ方式に共通する問題として、スレッドの最低実行時間を保証しながら、柔軟にスレッドの実行時間を設定できない問題がある。例えば、ラウンドロビン方式では、スレッド数が増加した場合、各スレッドの実行時間が均等に減少し、優先度の高いスレッドに十分な実行時間が割り当てられない問題がある。また、プライオリティ方式では、優先度の高いスレッドの処理が続いた場合、優先度の低いスレッドが処理できない問題がある。
【課題を解決するための手段】
【０００７】
本発明にかかるマルチスレッドプロセッサの一態様は、それぞれが独立した命令流を生成する複数のハードウェアスレッドと、スケジュールに従って、前記複数のハードウェアスレッドのうち次実行サイクルにおいて実行するハードウェアスレッドを指定するスレッド選択信号を出力するスレッドスケジューラと、前記スレッド選択信号に応じて前記複数のハードウェアスレッドのいずれか１つを選択して、選択したハードウェアスレッドにより生成された命令を出力する第１のセレクタと、前記第１のセレクタから出力される命令を実行する演算回路と、を有し、前記スレッドスケジューラは、予め決められた第１の実行期間において前記複数のハードウェアスレッドのうちから固定的に選択された少なくとも１つの前記ハードウェアスレッドの実行を指定し、前記第１の実行期間以外の第２の実行期間において任意の前記ハードウェアスレッドの実行を指定するものである。
【０００８】
また、本発明にかかるマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法の一態様は、複数のハードウェアスレッドを有し、前記ハードウェアスレッドを所定のスケジュールに従って切り替えながら、前記ハードウェアスレッドにより生成される命令流を実行するマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法であって、実行される前記ハードウェアスレッドが予め設定される第１の実行期間と、実行される前記ハードウェアスレッドが任意に設定される第２の実行期間と、を含むスレッド実行スケジュールを巡回的に実行し、前記スレッド実行スケジュールに従って指定された前記ハードウェアスレッドにより生成される命令流を順次実行するものである。
【０００９】
本発明にかかるマルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法によれば、第１の実行期間において実行されるハードウェアスレッドは、他のハードウェアスレッドの優先度にかかわらず実行される。また、第２の実行期間には、任意のハードウェアスレッドを実行することができる。これにより、本発明にかかるマルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法によれば、第１の実行期間に最低実行時間を保証したいハードウェアスレッドを定義し、第２の実行期間にはそのときの処理状況に応じた任意のハードウェアスレッドを定義することができる。
【発明の効果】
【００１０】
本発明にかかるマルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法によれば、ハードウェアスレッドの最低実行時間を保証しながら、柔軟にハードウェアスレッドの実行時間を設定できる。
【発明を実施するための最良の形態】
【００１１】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。図１に本実施の形態にかかるマルチスレッドプロセッサ１を含むプロセッサシステムのブロック図を示す。本実施の形態にかかるプロセッサシステムでは、システムバスを介してマルチスレッドプロセッサ１とメモリ２が接続される。なお、図示はしていないが、システムバスには、入出力インタフェースなどの他の回路も接続されるものとする。
【００１２】
まず、本実施の形態にかかるマルチスレッドプロセッサ１について説明する。マルチスレッドプロセッサ１は、複数のハードウェアスレッドを備える。ハードウェアスレッドは、スレッドプログラムカウンタ、命令メモリ、命令メモリ、及び制御レジスタ（本実施の形態ではパイプライン制御回路１６に内蔵されるものとする）等の回路群により構成される。そして、ハードウェアスレッドとは、マルチスレッドプロセッサ１に内蔵されるスレッドプログラムカウンタにより出力される命令フェッチアドレスに従って命令メモリから読み出される一連の命令群により構成される命令流を生成する系のことをいう。つまり、１つのハードウェアスレッドにより生成される命令流に含まれる命令は、互いに関連性の高い命令である。本実施の形態では、マルチスレッドプロセッサ１が複数のスレッドプログラムカウンタを備えることでその数に応じた数のハードウェアスレッドが実装される。以下では、マルチスレッドプロセッサ１についてさらに詳細に説明する。
【００１３】
図１に示すようにマルチスレッドプロセッサ１は、演算回路１０、割り込みコントローラ１１、ＰＣ生成回路１２、スレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３、セレクタ１３、１８、命令メモリ１４、命令バッファ１５、パイプライン制御回路１６、命令フェッチコントローラ１７、スレッドスケジューラ１９を有する。
【００１４】
演算回路１０は、セレクタ１８によって選択されたハードウェアスレッドが生成する命令に基づき演算処理を実行する。より具体的には、演算回路１０は、命令デコーダ２１、実行ユニット２２、データレジスタ２３を有する。命令デコーダ２１は受信した命令をデコードして、実行ユニット２２に対して演算制御信号ＳＣを出力する。また、命令デコーダ２１は、命令のデコード結果に基づきデータの格納位置を示すデータレジスタアドレスＲａｄｄの出力を行う。実行ユニット２２は、演算制御信号ＳＣに応じて各種の演算を実行する。なお、実行ユニット２２は、複数の実行ステージを有し、パイプライン処理により演算を行う。また、実行ユニット２２において実行された演算結果は、その演算結果の種類に応じてＰＣ生成回路１２、メモリ２、データレジスタ２３に送信される。データレジスタ２３は、実行ユニット２２において用いられるデータが格納される。そして、データレジスタ２３は、データレジスタアドレスＲａｄｄにより指定したアドレスのデータを出力する。図１に示す例では、データレジスタ２３は、データレジスタアドレスＲａｄｄに応じてデータａとデータｂとを出力する形態となる。また、データレジスタ２３は、データレジスタアドレスＲａｄｄにより指定されるアドレスに実行ユニット２２が出力する演算結果を格納する。
【００１５】
割り込みコントローラ１１は、割り込み要求信号を受けて、マルチスレッドプロセッサ１内に割り込み処理の実行を指示する割り込み指示信号を出力する。より具体的には、割り込みコントローラ１１は、割り込み要求信号を受信すると、割り込み要因や割り込み処理の優先度等を判定し、当該割り込み要因に関連した処理を行うようにＰＣ生成回路１２及びパイプライン制御回路１６に割り込み処理の実行を指示する。この割り込み要求は、マルチスレッドプロセッサ１が出力するものの他に、マルチスレッドプロセッサ１以外の回路からも出力される。
【００１６】
ＰＣ生成回路１２は、システムバスを介して入力される新たなプログラム命令信号、割り込みコントローラ１１が出力する割り込み指示信号及び実行ユニット２２における処理に基づき出力される分岐指示信号を受けて、プログラムカウント更新値を生成する。そして、ＰＣ生成回路１２は、プログラムカウント更新値をスレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３のいずれかに与える。なお、ＰＣ生成回路１２は、生成したプログラムカウント更新値をいずれのスレッドプログラムカウンタに与えるかを判断する機能も有する。
【００１７】
スレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３は、処理すべき命令が格納される命令メモリ１４のアドレス（このアドレスを命令フェッチアドレスＩＭａｄｄと称す）を生成する。また、スレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３は、ＰＣ生成回路１２からプログラムカウント更新値が与えられた場合は、命令フェッチアドレスＩＭａｄｄをプログラムカウント更新値に応じて更新する。一方、スレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３は、プログラムカウント更新値の入力がない場合は、アドレスを昇順に計算し、連続する次の命令フェッチアドレスを算出する。なお、図１においては、スレッドプログラムカウンタの数を４つとしたが、プログラムスレッドカウンタの数は、マルチスレッドプロセッサの仕様に応じて任意に設定することができる。
【００１８】
セレクタ１３は、命令フェッチコントローラが出力するスレッド指定信号に応じてスレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３のうちいずれか１つを選択し、選択したスレッドプログラムカウンタが出力する命令フェッチアドレスＩＭａｄｄを出力する。なお、図１のセレクタ１３において入力端子に０〜４の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
【００１９】
命令メモリ１４は、複数のハードウェアスレッドにより共通して用いられるメモリ領域である。命令メモリ１４は、マルチスレッドプロセッサ１において実行される演算で用いられる各種命令が格納される。そして、命令メモリ１４は、セレクタ１３を介して入力される命令フェッチアドレスＩＭａｄｄにより指定された命令を出力する。このとき、命令メモリ１４は、セレクタ１３がスレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３のいずれが出力した命令フェッチアドレスＩＭａｄｄであるかを判別し、判別結果に応じて命令の出力先を振り分ける。本実施の形態では、命令バッファ１５は、スレッドプログラムカウンタＴＰＣ０〜ＴＰＣ３に対応した命令バッファ領域ＢＵＦ０〜ＢＵＦ３を有する。そこで、命令メモリ１４は、命令フェッチアドレスＩＭａｄｄの出力元に応じて命令バッファ領域ＢＵＦ０〜ＢＵＦ３のいずれかに読み出された命令を振り分ける。なお、命令メモリ１４は、メモリ２に含まれる所定のメモリ領域であっても良い。また、命令バッファ領域ＢＵＦ０〜ＢＵＦ３は、ＦＩＦＯ（First In First Out）形式のバッファ回路である。また、命令バッファ領域ＢＵＦ０〜ＢＵＦ３は、１つのバッファ内において領域分割されたものでも良く、分離された領域に形成されたものであっても良い。
【００２０】
パイプライン制御回路１６は、命令バッファ１５の先頭に格納された命令と実行ユニット２２において実行されている命令とをモニタする。そして、パイプライン制御回路１６は、割り込みコントローラ１１から割り込み指示信号が入力された場合には、割り込み処理に関係するハードウェアスレッドに属する命令を廃棄する指示を命令バッファ１５及び実行ユニット２２に対して行う。
【００２１】
命令フェッチコントローラ１７は、命令バッファ１５に格納されている命令の個数に応じていずれのハードウェアスレッドに属する命令をフェッチすべきかを判断し、その判断結果に基づきスレッド指定信号を出力する。例えば、命令フェッチコントローラ１７は、命令バッファ領域ＢＵＦ０に格納される命令キューの数が他の命令バッファ領域に格納される命令キューの数よりも少なければ、０番のハードウェアスレッドに属する命令をフェッチすべきと判断し、０番のハードウェアスレッドを示すスレッド指定信号を出力する。これにより、セレクタ１３は、スレッドプログラムカウンタＴＰＣ０を選択する。なお、命令フェッチコントローラ１７は、ラウンドロビン方式による手順で選択するハードウェアスレッドを決定しても良い。
【００２２】
セレクタ１８は、第１のセレクタとして機能するセレクタである。セレクタ１８は、スレッドスケジューラ１９が出力するスレッド選択信号ＴＳＥＬに応じて命令バッファ領域ＢＵＦ０〜ＢＵＦ３のいずれか１つを選択し、選択した命令バッファ領域から読み出した命令を演算回路１０に出力する。つまり、セレクタ１８は、スレッド選択信号ＴＳＥＬに応じて複数のハードウェアスレッドから１つのハードウェアスレッドを選択し、選択したハードウェアスレッドが出力する命令を演算回路１０に出力する。なお、セレクタ１８においても、入力端子に０〜４の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
【００２３】
スレッドスケジューラ１９は、予め設定されたスケジュールに従って、複数のハードウェアスレッドのうち次の実行サイクルにおいて実行される１つのハードウェアスレッドを指定するスレッド選択信号ＴＳＥＬを出力する。つまり、スレッドスケジューラ１９は、複数のハードウェアスレッドのどのような順序で処理するかをスケジュールにより管理し、そのスケジュールに沿った順序でハードウェアスレッドにより生成される命令が実行されるようにスレッド選択信号ＴＳＥＬを出力する。なお、本実施の形態にかかるマルチスレッドプロセッサ１では、このスケジュールをマルチスレッドプロセッサ１の起動の直後に実行される管理プログラムにより設定する。
【００２４】
本実施の形態にかかるマルチスレッドプロセッサ１では、特にスレッドスケジューラ１９において行われるハードウェアスレッドのスケジューリング方法に特徴を有する。以下では、スレッドスケジューラ１９及びそのスケジューリングの方法について説明を行う。
【００２５】
図２にスレッドスケジューラ１９のブロック図を示す。図２に示すように、スレッドスケジューラ１９は、第２のセレクタ（例えば、セレクタ３０）、第１のスケジューラ３１、第２のスケジューラ３２を有する。セレクタ３０は、実時間ビット信号の信号レベルに応じて第１のスケジューラ３１が出力するスレッド番号Ａと第２のスケジューラ３２が出力するスレッド番号Ｂとのいずれか一方を選択して、選択したスレッド番号をスレッド選択信号ＴＳＥＬとして出力する。このスレッド選択信号ＴＳＥＬにおいて示されるスレッド番号が次の実行サイクルにおいて実行されるハードウェアスレッドの番号となる。
【００２６】
第１のスケジューラ３１は、第１の実行期間と第２の実行期間とを切り替える選択信号（例えば、実時間ビット信号）を出力すると共に、実時間ビット信号が第１の実行期間を指定している期間において予め設定された実行順序で実行されるハードウェアスレッドを指定する第１のハードウェアスレッド番号（例えばスレッド番号Ａ）を出力する。ここで、第１の実行期間とは、後述する実時間ビット信号が１である期間であり、第２の実行期間とは、後述する実時間ビット信号が０である期間をいう。また、第１の実行期間においては、選択されるハードウェアスレッド番号が予め設定されており、第２の実行期間においては、選択されるハードウェアスレッド番号が例えば、第２のスケジューラ３２により任意に設定される。この第１のスケジューラ３１は、スレッド制御レジスタ３３、カウンタ３４、カウント最大値格納部３５、一致比較回路３６、第３のセレクタ（例えば、セレクタ３７）を有する。
【００２７】
スレッド制御レジスタ３３は、複数のスロット（例えば、スロットＳＬＴ０〜ＳＬＴ７）を備える。このスロットの構成を図３に示す。図３に示すように、スロットＳＬＴ０〜ＳＬＴ７は、それぞれハードウェアスレッド番号が格納される番号格納部と、当該スロットが選択された場合における実時間ビット信号の論理レベルを決定する期間属性設定フラグが格納される実時間ビット格納部とを有する。
【００２８】
カウンタ３４は、所定の間隔でカウント値ＣＮＴを更新する。より具体的には、本実施の形態におけるカウンタ３４は、図示しないマルチスレッドプロセッサ１の動作クロックに同期してカウント値ＣＮＴをカウントアップする。カウント最大値格納部３５は、カウンタ３４のカウント値ＣＮＴの上限値を定めるカウント最大値ＣＮＴＭを格納する。一致比較回路３６は、カウント値ＣＮＴとカウント最大値ＣＮＴＭとを比較し、カウント値ＣＮＴとカウント最大値ＣＮＴＭが一致した場合に、カウンタ３４のカウント値をリセットするリセット信号ＲＳＴを出力する。つまり、カウンタ３４は、所定の周期でカウント値ＣＮＴを初期化しながら、カウントアップ動作を繰り返すことで、循環的に値が更新されるカウント値ＣＮＴを出力する。
【００２９】
セレクタ３７は、カウント値ＣＮＴに応じてスレッド制御レジスタ３３内のスロットの１つを選択し、選択したスロットに格納される値に基づき実時間ビット信号とスレッド番号Ａを出力する。より具体的には、セレクタ３７は、カウント値ＣＮＴが０であればスロットＳＬＴ０を選択し、スロットＳＬＴ０の番号格納部に格納されたハードウェアスレッド番号をスレッド番号Ａとし、スロットＳＬＴ０の実時間ビット格納部に格納される期間属性設定フラグの値を実時間ビット信号の論理レベルとする。
【００３０】
なお、第１のスケジューラ３１のスレッド制御レジスタ３３のスロットに格納される値、カウンタ３４のカウント値ＣＮＴの初期値、カウント最大値格納部３５のカウント最大値ＣＮＴＭは、マルチスレッドプロセッサ１の起動時に実行される管理プログラムにより設定される。また、管理プログラムは、メモリ２からこれら設定値を読み込むものとする。
【００３１】
第２のスケジューラ３２は、例えば、ラウンドロビン方式やプライオリティ方式の手順に従って任意のハードウェアスレッドを選択する。この第２のスケジューラ３２が出力するハードウェアスレッド番号をスレッド番号Ｂと称する。
【００３２】
続いて、スレッドスケジューラ１９を用いたマルチスレッドプロセッサ１の動作について説明する。図４に、マルチスレッドプロセッサ１の電源投入時から通常処理の開始までの動作の手順を示すフローチャートを示す。図４に示すように、マルチスレッドプロセッサ１は、電源が投入されるとまずハードウェアリセットにより回路の状態を初期化する（ステップＳ１）。続いて、マルチスレッドプロセッサ１は、シングルスレッドモードにおいて動作を開始する（ステップＳ２）。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタＴＰＣ０、命令メモリ１４、命令バッファ領域ＢＵＦ０が活性化され、他のスレッドプログラムカウンタＴＰＣ１〜ＴＰＣ３及び命令バッファ領域ＢＵＦ１〜ＢＵＦ３はスタンバイ状態のまま待機する。
【００３３】
そして、マルチスレッドプロセッサ１は、管理プログラムをメモリ２又は図示しない他の記憶装置から読み出し、管理プログラムを実行する（ステップＳ３）。その後、管理プログラムに従って、マルチスレッドプロセッサ１は、スレッド制御レジスタ３３内のスロットへの値の設定（ステップＳ４）、カウンタ３４のカウント値ＣＮＴの初期化（ステップＳ５）、カウント最大値ＣＮＴＭの設定（ステップＳ６）を行う。これらの各種レジスタの設定が完了すると、マルチスレッドプロセッサ１はマルチスレッドモードにて動作を開始する（ステップＳ７）。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタＴＰＣ０〜ＴＣＰ３、命令メモリ１４、命令バッファ領域ＢＵＦ０〜ＢＵＦ３が活性化される。そして、マルチスレッドプロセッサ１は、マルチスレッドモードにて通常動作を開始する。
【００３４】
次に、通常動作開始後のマルチスレッドプロセッサ１の動作について説明する。以下の説明では、特に、スレッドスケジューラ１９の動作について説明する。なお、以下の説明では、設定の一例として、カウンタ３４のカウント値ＣＮＴの初期値を０、カウント最大値ＣＮＴＭを４とする。また、スレッド制御レジスタ３３のスロットの各値は、スロットＳＬＴ０〜ＳＬＴ２、ＳＬＴ４、ＳＬＴ５、ＳＬＴ７の実時間ビットを１とし、スロットＳＬＴ３、ＳＬＴ６の実時間ビットを０とする。さらに、スロットＳＬＴ０、ＳＬＴ２、ＳＬＴ５、ＳＬＴ７のハードウェアスレッド番号を０、スロットＳＬＴ１、ＳＬＴ４のハードウェアスレッド番号を１、スロットＳＬＴ３のハードウェアスレッド番号を２とする。
【００３５】
上記条件においてスレッドスケジューラ１９が出力するスレッド選択信号ＴＳＥＬが選択するハードウェアスレッド番号を図５の表に示す。図５の表では、スレッドスケジューラ１９が選択するハードウェアスレッドを切り替える一タイミングを一時刻とし、時刻の経過と共にスレッド選択信号ＴＳＥＬがどのように切り替わるかを示した。
【００３６】
図５に示すように、まず時刻ｔ１におけるカウント値ＣＮＴが０とすると、セレクタ３７は、スロットＳＬＴ０を選択する。従って、セレクタ３７は、実時間ビット信号の論理レベルを１とし、スレッド番号Ａを０番とする。これにより、セレクタ３０は、スレッド選択信号ＴＳＥＬとしてスレッド番号Ａの０番を出力する。
【００３７】
続いて、時刻ｔ２ではカウント値ＣＮＴが１にカウントアップされる。そのため、セレクタ３７は、スロットＳＬＴ１を選択する。従って、セレクタ３７は、実時間ビット信号の論理レベルを１とし、スレッド番号Ａを１番とする。これにより、セレクタ３０は、スレッド選択信号ＴＳＥＬとしてスレッド番号Ａの１番を出力する。
【００３８】
次いで、時刻ｔ３ではカウント値ＣＮＴが２にカウントアップされる。そのため、セレクタ３７は、スロットＳＬＴ２を選択する。従って、セレクタ３７は、実時間ビット信号の論理レベルを０とし、スレッド番号Ａを１番とする。これにより、セレクタ３０は、スレッド選択信号ＴＳＥＬとしてスレッド番号Ｂとして出力されるハードウェアスレッド番号の番号（例えばｎ番）を出力する。
【００３９】
次いで、時刻ｔ４ではカウント値ＣＮＴが３にカウントアップされる。そのため、セレクタ３７は、スロットＳＬＴ３を選択する。従って、セレクタ３７は、実時間ビット信号の論理レベルを１とし、スレッド番号Ａを２番とする。これにより、セレクタ３０は、スレッド選択信号ＴＳＥＬとしてスレッド番号Ａの２番を出力する。
【００４０】
次いで、時刻ｔ５ではカウント値ＣＮＴが４にカウントアップされる。そのため、セレクタ３７は、スロットＳＬＴ４を選択する。従って、セレクタ３７は、実時間ビット信号の論理レベルを１とし、スレッド番号Ａを１番とする。これにより、セレクタ３０は、スレッド選択信号ＴＳＥＬとしてスレッド番号Ａの１番を出力する。
【００４１】
そして、時刻ｔ５では、カウント値ＣＮＴがカウント最大値ＣＮＴＭに達するため、時刻ｔ６の経過後にカウント値ＣＮＴはリセットされる。これにより、時刻ｔ６〜ｔ１０の期間のスレッドスケジューラ１９は、時刻ｔ１〜ｔ５の動作を繰り返すことになる。マルチスレッドプロセッサ１では。カウント値ＣＮＴがリセットされる周期をスレッド選択処理の一周期とする。
【００４２】
続いて、上記スレッドスケジューラ１９が出力するスレッド選択信号ＴＳＥＬに基づくマルチスレッドプロセッサ１の動作のタイミングチャートを図６に示す。この図６において選択されるハードウェアスレッド及び時刻は、図５において説明したスレッド選択信号ＴＳＥＬ及び時刻に基づくものである。
【００４３】
図６に示すように、マルチスレッドプロセッサ１は、時刻ｔ１においては、スレッド選択信号ＴＳＥＬが０番のハードウェアスレッドを選択するため、０番のハードウェアスレッドに属する命令０を実行する。次いで、時刻ｔ２においては、スレッド選択信号ＴＳＥＬが１番のハードウェアスレッドを選択するため、１番のハードウェアスレッドに属する命令０を実行する。次いで、時刻ｔ３においては、スレッド選択信号ＴＳＥＬが第２のスケジューラ３２が選択した任意のハードウェアスレッド（例えばｎ番）を選択するため、ｎ番のハードウェアスレッドに属する命令０を実行する。次いで、時刻ｔ４においては、スレッド選択信号ＴＳＥＬが２番のハードウェアスレッドを選択するため、２番のハードウェアスレッドに属する命令０を実行する。次いで、時刻ｔ５においては、スレッド選択信号ＴＳＥＬが１番のハードウェアスレッドを選択するため、１番のハードウェアスレッドに属する命令１を実行する。そして、マルチスレッドプロセッサ１は、時刻ｔ５が経過する時点でスレッド選択の周期を１つ終了させ、次のスレッド選択処理の周期を開始する。
【００４４】
次のスレッド選択処理の周期（時刻ｔ６〜ｔ１０）では、時刻ｔ１〜ｔ５の周期と同様の順序でハードウェアスレッドを選択するが、選択されたハードウェアスレッドにおいて処理される命令は、前の周期の続きの命令群となる。
【００４５】
例えば、時刻ｔ６においては、スレッド選択信号ＴＳＥＬが０番のハードウェアスレッドを選択するため、０番のハードウェアスレッドに属する命令１を実行する。次いで、時刻ｔ７においては、スレッド選択信号ＴＳＥＬが１番のハードウェアスレッドを選択するため、１番のハードウェアスレッドに属する命令２を実行する。次いで、時刻ｔ８においては、スレッド選択信号ＴＳＥＬが第２のスケジューラ３２が選択した任意のハードウェアスレッド（例えばｎ番）を選択するため、ｎ番のハードウェアスレッドに属する命令１を実行する。次いで、時刻ｔ９においては、スレッド選択信号ＴＳＥＬが２番のハードウェアスレッドを選択するため、２番のハードウェアスレッドに属する命令１を実行する。次いで、時刻ｔ１０においては、スレッド選択信号ＴＳＥＬが１番のハードウェアスレッドを選択するため、１番のハードウェアスレッドに属する命令３を実行する。
【００４６】
このように、スレッドスケジューラ１９が循環的に選択するハードウェアスレッドを切り替えた場合、１つのスレッド選択処理周期において処理されるハードウェアスレッドの実行時間は所定の比率となる。図６に示す例では、第１の実行期間において０番のハードウェアスレッドは１回、１番のハードウェアスレッドは２回、２番のハードウェアスレッドは１回実行される。また、第２の実行期間において任意（ｎ番）のハードウェアスレッドが１回実行されることになる。つまり、第１の実行期間と第２の実行期間とのプロセッサ占有時間の比率は８０：２０である。また、０番のハードウェアスレッドは少なくとも２０％のプロセッサ占有時間を確保し、１番のハードウェアスレッドは少なくとも４０％のプロセッサ占有時間を確保し、２番のハードウェアスレッドは少なくとも２０％のプロセッサ占有時間を確保する。また、第２の実行期間として割り当てられた２０％のプロセッサ占有時間の間は、マルチスレッドプロセッサ１におけるスレッドの処理状況に応じた任意のハードウェアスレッドを実行される。
【００４７】
上記説明より、本実施の形態にかかるマルチスレッドプロセッサ１では、スレッドスケジューラ１９が実時間ビット信号の論理レベルが１となる第１の実行期間において予め設定された順序により予め設定されたハードウェアスレッドを選択し、実時間ビット信号の論理レベルが０となる第２の実行期間は、任意のハードウェアスレッドを選択する。これにより、マルチスレッドプロセッサ１は、第１の実行期間において選択されるハードウェアスレッドのプロセッサ占有時間の最低時間を保証する。また、第２の実行期間において任意のハードウェアスレッドを選択することで、マルチスレッドプロセッサ１は、その処理状況に応じて任意のハードウェアスレッドのプロセッサ占有時間を増加させることができる。
【００４８】
また、本実施の形態におけるマルチスレッドプロセッサ１では、第１の実行期間と第２の実行期間との比率、及び、第１の実行期間の間に実行されるハードウェアスレッドの比率を管理プログラムにより任意に設定することができる。つまり、管理プログラムにより設定されるスレッド制御レジスタ３３内のスロットへの値及びカウント最大値ＣＮＴＭの値を、マルチスレッドプロセッサ１に対する処理要求に応じて変更することで柔軟なハードウェアスレッドの選択方法を選ぶことが可能になる。より具体的には、スレッド制御レジスタ３３内のスロットの実時間ビットの値及びハードウェアスレッド番号の値を変更することで第１の実行時間中に実行されるべきハードウェアスレッドを選択することができ、さらに、第１の実行時間と第２の実行時間との比率を変更することができる。また、カウント最大値ＣＮＴＭにどのような値を設定するかにより、一スレッド選択処理周期の長さを変更することができる。
【００４９】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、第２のスケジューラにおけるスレッドのスケジューリング方法は、マルチスレッドプロセッサの仕様に応じて適宜変更することが可能である。
【図面の簡単な説明】
【００５０】
【図１】実施の形態１にかかるマルチスレッドプロセッサのブロック図である。
【図２】実施の形態１にかかるスレッドスケジューラのブロック図である。
【図３】実施の形態１にかかるスロットの構成を示す模式図である。
【図４】実施の形態１にかかるマルチスレッドプロセッサの起動時の動作手順を示すフローチャートである。
【図５】実施の形態１にかかるスレッドスケジューラの動作を示す表である。
【図６】実施の形態１にかかるマルチスレッドプロセッサの動作を示すタイミングチャートである。
【符号の説明】
【００５１】
１    マルチスレッドプロセッサ
２    メモリ
１０    演算回路
１１    割り込みコントローラ
１２    ＰＣ生成回路
１３、１８、３０、３７    セレクタ
１４    命令メモリ
１５    命令バッファ
１６    パイプライン制御回路
１７    命令フェッチコントローラ
１９    スレッドスケジューラ
２１    命令デコーダ
２２    実行ユニット
２３    データレジスタ
３１    第１のスケジューラ
３２    第２のスケジューラ
３３    スレッド制御レジスタ
３４    カウンタ
３５    カウント最大値格納部
３６    一致比較回路
ａ、ｂ    データ
ＢＵＦ０〜ＢＵＦ０    命令バッファ領域
ＩＭａｄｄ    命令フェッチアドレス
Ｒａｄｄ    データレジスタアドレス
ＳＣ    演算制御信号
ＴＳＥＬ    スレッド選択信号
ＣＮＴ    カウント値
ＣＮＴＭ    カウント最大値
ＲＳＴ    リセット信号
ＳＬＴ０〜ＳＬＴ７    スロット
ＴＰＣ０〜ＴＣＰ３    スレッドプログラムカウンタ
【図１】
2010086128.tif 000003
【図２】
2010086128.tif 000004
【図３】
2010086128.tif 000005
【図４】
2010086128.tif 000006
【図５】
2010086128.tif 000007
【図６】
2010086128.tif 000008