【文献】
薄井弘之ほか,Responsive Multithreaded Processorにおける実時間処理用命令供給機構,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2004年 3月11日,Vol.103 No.735,15−20ページ
(58)【調査した分野】(Int.Cl.,DB名)
複数のハードウェアスレッドを有し、前記ハードウェアスレッドを所定のスケジュールに従って切り替えながら、前記ハードウェアスレッドにより生成される命令流を実行するマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法であって、
前記マルチスレッドプロセッサは、
前記複数のハードウェアスレッドのうち次実行サイクルにおいて使用するハードウェアスレッドを選択するスレッド選択信号を出力するスレッドスケジューラと、
前記スレッド選択信号に応じて前記複数のハードウェアスレッドのいずれか1つを選択して、選択したハードウェアスレッドにより生成された命令を出力するセレクタと、
を有し、
前記スレッドスケジューラは、
各スロットが第1の情報を保持し、この第1の情報を書き換え可能とする複数のスロットを含むスレッド制御レジスタと、
前記複数のスロットのうち1つを指定する第2の情報を格納し、この第2の情報を書き換え可能とする格納部と、
をさらに有し、
前記スレッド制御レジスタの前記複数のスロットの第1のスロットからスロットを順々に選択し、
前記複数のスロットの中から前記第2の情報により指定された第2のスロットを選択したときには、前記第1のスロットに戻ってスロットを再び順次選択し、
順次選択されたスロットが保持する前記第1の情報に基づき、ハードウェアスレッドを前記セレクタに選択させ、
前記第1のスロットから前記第2のスロットが選択されるまでのスレッド選択処理の長さが前記第2の情報を書き換えることにより変更可能なマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
前記第1の情報、及び前記第2の情報は、前記セレクタから出力される命令を実行する演算回路で実行される管理プログラムにより前記スロット及び前記格納部に設定される請求項1に記載のマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
前記スレッドスケジューラは、前記スロットの番号を示すカウント値を所定の周期でカウントアップし、前記カウント値が前記第2の情報で示される値に達したことに応じて前記カウント値がリセットされるカウンタを有する請求項1又は2に記載のマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
前記第1の情報が、ハードウェアスレッド番号を含む請求項1乃至3のいずれか1項に記載のマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
前記管理プログラムは、前記マルチスレッドプロセッサの起動後に実行される請求項2に記載のマルチスレッドプロセッサにおけるハードウェアスレッドのスケジュール方法。
【背景技術】
【0002】
近年、プロセッサの処理能力を向上させるためにマルチスレッドプロセッサが提案されている。マルチスレッドプロセッサは、それぞれが独立した命令流を生成するスレッドを有する。そして、マルチスレッドプロセッサは、パイプライン処理により命令を処理する演算回路に対していずれのスレッドにより生成された命令流を処理させるかを切り替えながら演算処理を実行する。このとき、マルチスレッドプロセッサは、1つのスレッドにより生成された命令をパイプライン中の1つの実行ステージで実行しながら、他の実行ステージにおいて他のスレッドにより生成された命令を処理することができる。つまり、マルチスレッドプロセッサの演算回路では、互いに独立関係にある命令がそれぞれ異なる実行ステージで実行されることになる。これにより、マルチスレッドプロセッサは、それぞれの命令流を円滑に処理しながら、パイプラインの実行ステージが何も処理しない時間を削減し、プロセッサの処理能力を向上させる。
【0003】
このようなマルチスレッドプロセッサの一例が特許文献1に開示されている。特許文献1に記載のマルチスレッドプロセッサでは、複数のプロセッサエレメントと、各プロセッサエレメントのスレッドを切り替える並列プロセッサ制御部とを備える。そして、並列プロセッサ制御部は、プロセッサエレメントにおいて実行されているスレッドの実行時間をカウントし、カウントした時間がスレッドの割り当て時間に達したときにタイムアウト信号を出力し、タイムアウト信号と実行順序レジスタに保持された実行順序情報とに基づきプロセッサエレメントが実行すべきスレッドを切り替える。
【0004】
このようにマルチスレッドプロセッサでは、演算回路においていずれのスレッドが生成する命令流を処理させるかをスケジュールに従って切り替える。このレッドのスケジュール方法の一例が特許文献2において開示されている。特許文献2に記載のマルチスレッドプロセッサでは、複数のスレッドを巡回的に、そのスレッドに割り当てられた時間ずつ実行する。つまり、特許文献2では、固定的に定められたスケジュールを巡回的に実行することで所定の実行時間比で各スレッドが実行される。
【0005】
また、スレッドの別のスケジュール方法が特許文献3に開示されている。特許文献3では、スレッドのスケジューリングの方法としてラウンドロビン方式とプライオリティ方式とが記載されている。ラウンドロビン方式では、待ち行列に入っているスレッドを一定時間毎に順番に選んで実行する。そのため、ラウンドロビン方式では、待ち行列にあるスレッドが一定時間ごとに公平にCPUに割り当てられて実行される。また、プライオリティ方式は、スレッドの優先度の順にスレッドを実行する。より具体的には、プライオリティ方式では、優先度毎に設けられた待ち行列に各優先度のスレッドがキューイングされ、優先度の高い待ち行列から順にスレッドが選択されCPUに割り当てられて実行される。
【発明を実施するための形態】
【0012】
実施の形態1
以下、図面を参照して本発明の実施の形態について説明する。
図1に本実施の形態にかかるマルチスレッドプロセッサ1を含むプロセッサシステムのブロック図を示す。本実施の形態にかかるプロセッサシステムでは、システムバスを介してマルチスレッドプロセッサ1とメモリ2が接続される。なお、図示はしていないが、システムバスには、入出力インタフェースなどの他の回路も接続されるものとする。
【0013】
まず、本実施の形態にかかるマルチスレッドプロセッサ1について説明する。マルチスレッドプロセッサ1は、複数のハードウェアスレッドを備える。ハードウェアスレッドは、スレッドプログラムカウンタ、命令メモリ、汎用レジスタ、及び制御レジスタ(本実施の形態ではパイプライン制御回路16に内蔵されるものとする)等の回路群により構成される。そして、ハードウェアスレッドとは、マルチスレッドプロセッサ1に内蔵されるスレッドプログラムカウンタにより出力される命令フェッチアドレスに従って命令メモリから読み出される一連の命令群により構成される命令流を生成する系のことをいう。つまり、1つのハードウェアスレッドにより生成される命令流に含まれる命令は、互いに関連性の高い命令である。本実施の形態では、マルチスレッドプロセッサ1が複数のスレッドプログラムカウンタを備えることでその数に応じた数のハードウェアスレッドが実装される。以下では、マルチスレッドプロセッサ1についてさらに詳細に説明する。
【0014】
図1に示すようにマルチスレッドプロセッサ1は、演算回路10、割り込みコントローラ11、PC生成回路12、スレッドプログラムカウンタTPC0〜TPC3、セレクタ13、18、命令メモリ14、命令バッファ15、パイプライン制御回路16、命令フェッチコントローラ17、スレッドスケジューラ19を有する。
【0015】
演算回路10は、セレクタ18によって選択されたハードウェアスレッドが生成する命令に基づき演算処理を実行する。より具体的には、演算回路10は、命令デコーダ21、実行ユニット22、データレジスタ23を有する。命令デコーダ21は受信した命令をデコードして、実行ユニット22に対して演算制御信号SCを出力する。また、命令デコーダ21は、命令のデコード結果に基づきデータの格納位置を示すデータレジスタアドレスRaddの出力を行う。実行ユニット22は、演算制御信号SCに応じて各種の演算を実行する。なお、実行ユニット22は、複数の実行ステージを有し、パイプライン処理により演算を行う。また、実行ユニット22において実行された演算結果は、その演算結果の種類に応じてPC生成回路12、メモリ2、データレジスタ23に送信される。データレジスタ23は、実行ユニット22において用いられるデータが格納される。そして、データレジスタ23は、データレジスタアドレスRaddにより指定したアドレスのデータを出力する。
図1に示す例では、データレジスタ23は、データレジスタアドレスRaddに応じてデータaとデータbとを出力する形態となる。また、データレジスタ23は、データレジスタアドレスRaddにより指定されるアドレスに実行ユニット22が出力する演算結果を格納する。
【0016】
割り込みコントローラ11は、割り込み要求信号を受けて、マルチスレッドプロセッサ1内に割り込み処理の実行を指示する割り込み指示信号を出力する。より具体的には、割り込みコントローラ11は、割り込み要求信号を受信すると、割り込み要因や割り込み処理の優先度等を判定し、当該割り込み要因に関連した処理を行うようにPC生成回路12及びパイプライン制御回路16に割り込み処理の実行を指示する。この割り込み要求は、マルチスレッドプロセッサ1が出力するものの他に、マルチスレッドプロセッサ1以外の回路からも出力される。
【0017】
PC生成回路12は、システムバスを介して入力される新たなプログラム命令信号、割り込みコントローラ11が出力する割り込み指示信号及び実行ユニット22における処理に基づき出力される分岐指示信号を受けて、プログラムカウント更新値を生成する。そして、PC生成回路12は、プログラムカウント更新値をスレッドプログラムカウンタTPC0〜TPC3のいずれかに与える。なお、PC生成回路12は、生成したプログラムカウント更新値をいずれのスレッドプログラムカウンタに与えるかを判断する機能も有する。
【0018】
スレッドプログラムカウンタTPC0〜TPC3は、処理すべき命令が格納される命令メモリ14のアドレス(このアドレスを命令フェッチアドレスIMaddと称す)を生成する。また、スレッドプログラムカウンタTPC0〜TPC3は、PC生成回路12からプログラムカウント更新値が与えられた場合は、命令フェッチアドレスIMaddをプログラムカウント更新値に応じて更新する。一方、スレッドプログラムカウンタTPC0〜TPC3は、プログラムカウント更新値の入力がない場合は、アドレスを昇順に計算し、連続する次の命令フェッチアドレスを算出する。なお、
図1においては、スレッドプログラムカウンタの数を4つとしたが、プログラムスレッドカウンタの数は、マルチスレッドプロセッサの仕様に応じて任意に設定することができる。
【0019】
セレクタ13は、命令フェッチコントローラが出力するスレッド指定信号に応じてスレッドプログラムカウンタTPC0〜TPC3のうちいずれか1つを選択し、選択したスレッドプログラムカウンタが出力する命令フェッチアドレスIMaddを出力する。なお、
図1のセレクタ13において入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
【0020】
命令メモリ14は、複数のハードウェアスレッドにより共通して用いられるメモリ領域である。命令メモリ14は、マルチスレッドプロセッサ1において実行される演算で用いられる各種命令が格納される。そして、命令メモリ14は、セレクタ13を介して入力される命令フェッチアドレスIMaddにより指定された命令を出力する。このとき、命令メモリ14は、セレクタ13がスレッドプログラムカウンタTPC0〜TPC3のいずれが出力した命令フェッチアドレスIMaddであるかを判別し、判別結果に応じて命令の出力先を振り分ける。本実施の形態では、命令バッファ15は、スレッドプログラムカウンタTPC0〜TPC3に対応した命令バッファ領域BUF0〜BUF3を有する。そこで、命令メモリ14は、命令フェッチアドレスIMaddの出力元に応じて命令バッファ領域BUF0〜BUF3のいずれかに読み出された命令を振り分ける。なお、命令メモリ14は、メモリ2に含まれる所定のメモリ領域であっても良い。また、命令バッファ領域BUF0〜BUF3は、FIFO(First In First Out)形式のバッファ回路である。また、命令バッファ領域BUF0〜BUF3は、1つのバッファ内において領域分割されたものでも良く、分離された領域に形成されたものであっても良い。
【0021】
パイプライン制御回路16は、命令バッファ15の先頭に格納された命令と実行ユニット22において実行されている命令とをモニタする。そして、パイプライン制御回路16は、割り込みコントローラ11から割り込み指示信号が入力された場合には、割り込み処理に関係するハードウェアスレッドに属する命令を廃棄する指示を命令バッファ15及び実行ユニット22に対して行う。
【0022】
命令フェッチコントローラ17は、命令バッファ15に格納されている命令の個数に応じていずれのハードウェアスレッドに属する命令をフェッチすべきかを判断し、その判断結果に基づきスレッド指定信号を出力する。例えば、命令フェッチコントローラ17は、命令バッファ領域BUF0に格納される命令キューの数が他の命令バッファ領域に格納される命令キューの数よりも少なければ、0番のハードウェアスレッドに属する命令をフェッチすべきと判断し、0番のハードウェアスレッドを示すスレッド指定信号を出力する。これにより、セレクタ13は、スレッドプログラムカウンタTPC0を選択する。なお、命令フェッチコントローラ17は、ラウンドロビン方式による手順で選択するハードウェアスレッドを決定しても良い。
【0023】
セレクタ18は、第1のセレクタとして機能するセレクタである。セレクタ18は、スレッドスケジューラ19が出力するスレッド選択信号TSELに応じて命令バッファ領域BUF0〜BUF3のいずれか1つを選択し、選択した命令バッファ領域から読み出した命令を演算回路10に出力する。つまり、セレクタ18は、スレッド選択信号TSELに応じて複数のハードウェアスレッドから1つのハードウェアスレッドを選択し、選択したハードウェアスレッドが出力する命令を演算回路10に出力する。なお、セレクタ18においても、入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
【0024】
スレッドスケジューラ19は、予め設定されたスケジュールに従って、複数のハードウェアスレッドのうち次の実行サイクルにおいて実行される1つのハードウェアスレッドを指定するスレッド選択信号TSELを出力する。つまり、スレッドスケジューラ19は、複数のハードウェアスレッドのどのような順序で処理するかをスケジュールにより管理し、そのスケジュールに沿った順序でハードウェアスレッドにより生成される命令が実行されるようにスレッド選択信号TSELを出力する。なお、本実施の形態にかかるマルチスレッドプロセッサ1では、このスケジュールをマルチスレッドプロセッサ1の起動の直後に実行される管理プログラムにより設定する。
【0025】
本実施の形態にかかるマルチスレッドプロセッサ1では、特にスレッドスケジューラ19において行われるハードウェアスレッドのスケジューリング方法に特徴を有する。以下では、スレッドスケジューラ19及びそのスケジューリングの方法について説明を行う。
【0026】
図2にスレッドスケジューラ19のブロック図を示す。
図2に示すように、スレッドスケジューラ19は、第2のセレクタ(例えば、セレクタ30)、第1のスケジューラ31、第2のスケジューラ32を有する。セレクタ30は、実時間ビット信号の信号レベルに応じて第1のスケジューラ31が出力するスレッド番号Aと第2のスケジューラ32が出力するスレッド番号Bとのいずれか一方を選択して、選択したスレッド番号をスレッド選択信号TSELとして出力する。このスレッド選択信号TSELにおいて示されるスレッド番号が次の実行サイクルにおいて実行されるハードウェアスレッドの番号となる。
【0027】
第1のスケジューラ31は、第1の実行期間と第2の実行期間とを切り替える選択信号(例えば、実時間ビット信号)を出力すると共に、実時間ビット信号が第1の実行期間を指定している期間において予め設定された実行順序で実行されるハードウェアスレッドを指定する第1のハードウェアスレッド番号(例えばスレッド番号A)を出力する。ここで、第1の実行期間とは、後述する実時間ビット信号が1である期間であり、第2の実行期間とは、後述する実時間ビット信号が0である期間をいう。また、第1の実行期間においては、選択されるハードウェアスレッド番号が予め設定されており、第2の実行期間においては、選択されるハードウェアスレッド番号が例えば、第2のスケジューラ32により任意に設定される。この第1のスケジューラ31は、スレッド制御レジスタ33、カウンタ34、カウント最大値格納部35、一致比較回路36、第3のセレクタ(例えば、セレクタ37)を有する。
【0028】
スレッド制御レジスタ33は、複数のスロット(例えば、スロットSLT0〜SLT7)を備える。このスロットの構成を
図3に示す。
図3に示すように、スロットSLT0〜SLT7は、それぞれハードウェアスレッド番号が格納される番号格納部と、当該スロットが選択された場合における実時間ビット信号の論理レベルを決定する期間属性設定フラグが格納される実時間ビット格納部とを有する。
【0029】
カウンタ34は、所定の間隔でカウント値CNTを更新する。より具体的には、本実施の形態におけるカウンタ34は、図示しないマルチスレッドプロセッサ1の動作クロックに同期してカウント値CNTをカウントアップする。カウント最大値格納部35は、カウンタ34のカウント値CNTの上限値を定めるカウント最大値CNTMを格納する。一致比較回路36は、カウント値CNTとカウント最大値CNTMとを比較し、カウント値CNTとカウント最大値CNTMが一致した場合に、カウンタ34のカウント値をリセットするリセット信号RSTを出力する。つまり、カウンタ34は、所定の周期でカウント値CNTを初期化しながら、カウントアップ動作を繰り返すことで、循環的に値が更新されるカウント値CNTを出力する。
【0030】
セレクタ37は、カウント値CNTに応じてスレッド制御レジスタ33内のスロットの1つを選択し、選択したスロットに格納される値に基づき実時間ビット信号とスレッド番号Aを出力する。より具体的には、セレクタ37は、カウント値CNTが0であればスロットSLT0を選択し、スロットSLT0の番号格納部に格納されたハードウェアスレッド番号をスレッド番号Aとし、スロットSLT0の実時間ビット格納部に格納される期間属性設定フラグの値を実時間ビット信号の論理レベルとする。
【0031】
なお、第1のスケジューラ31のスレッド制御レジスタ33のスロットに格納される値、カウンタ34のカウント値CNTの初期値、カウント最大値格納部35のカウント最大値CNTMは、マルチスレッドプロセッサ1の起動時に実行される管理プログラムにより設定される。また、管理プログラムは、メモリ2からこれら設定値を読み込むものとする。
【0032】
第2のスケジューラ32は、例えば、ラウンドロビン方式やプライオリティ方式の手順に従って任意のハードウェアスレッドを選択する。この第2のスケジューラ32が出力するハードウェアスレッド番号をスレッド番号Bと称する。
【0033】
続いて、スレッドスケジューラ19を用いたマルチスレッドプロセッサ1の動作について説明する。
図4に、マルチスレッドプロセッサ1の電源投入時から通常処理の開始までの動作の手順を示すフローチャートを示す。
図4に示すように、マルチスレッドプロセッサ1は、電源が投入されるとまずハードウェアリセットにより回路の状態を初期化する(ステップS1)。続いて、マルチスレッドプロセッサ1は、シングルスレッドモードにおいて動作を開始する(ステップS2)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0、命令メモリ14、命令バッファ領域BUF0が活性化され、他のスレッドプログラムカウンタTPC1〜TPC3及び命令バッファ領域BUF1〜BUF3はスタンバイ状態のまま待機する。
【0034】
そして、マルチスレッドプロセッサ1は、管理プログラムをメモリ2又は図示しない他の記憶装置から読み出し、管理プログラムを実行する(ステップS3)。その後、管理プログラムに従って、マルチスレッドプロセッサ1は、スレッド制御レジスタ33内のスロットへの値の設定(ステップS4)、カウンタ34のカウント値CNTの初期化(ステップS5)、カウント最大値CNTMの設定(ステップS6)を行う。これらの各種レジスタの設定が完了すると、マルチスレッドプロセッサ1はマルチスレッドモードにて動作を開始する(ステップS7)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0〜TCP3、命令メモリ14、命令バッファ領域BUF0〜BUF3が活性化される。そして、マルチスレッドプロセッサ1は、マルチスレッドモードにて通常動作を開始する。
【0035】
次に、通常動作開始後のマルチスレッドプロセッサ1の動作について説明する。以下の説明では、特に、スレッドスケジューラ19の動作について説明する。なお、以下の説明では、設定の一例として、カウンタ34のカウント値CNTの初期値を0、カウント最大値CNTMを4とする。また、スレッド制御レジスタ33のスロットの各値は、スロットSLT0〜SLT2、SLT4、SLT5、SLT7の実時間ビットを1とし、スロットSLT3、SLT6の実時間ビットを0とする。さらに、スロットSLT0、SLT2、SLT5、SLT7のハードウェアスレッド番号を0、スロットSLT1、SLT4のハードウェアスレッド番号を1、スロットSLT3のハードウェアスレッド番号を2とする。
【0036】
上記条件においてスレッドスケジューラ19が出力するスレッド選択信号TSELが選択するハードウェアスレッド番号を
図5の表に示す。
図5の表では、スレッドスケジューラ19が選択するハードウェアスレッドを切り替える一タイミングを一時刻とし、時刻の経過と共にスレッド選択信号TSELがどのように切り替わるかを示した。
【0037】
図5に示すように、まず時刻t1におけるカウント値CNTが0とすると、セレクタ37は、スロットSLT0を選択する。従って、セレクタ37は、実時間ビット信号の論理レベルを1とし、スレッド番号Aを0番とする。これにより、セレクタ30は、スレッド選択信号TSELとしてスレッド番号Aの0番を出力する。
【0038】
続いて、時刻t2ではカウント値CNTが1にカウントアップされる。そのため、セレクタ37は、スロットSLT1を選択する。従って、セレクタ37は、実時間ビット信号の論理レベルを1とし、スレッド番号Aを1番とする。これにより、セレクタ30は、スレッド選択信号TSELとしてスレッド番号Aの1番を出力する。
【0039】
次いで、時刻t3ではカウント値CNTが2にカウントアップされる。そのため、セレクタ37は、スロットSLT2を選択する。従って、セレクタ37は、実時間ビット信号の論理レベルを0とし、スレッド番号Aを1番とする。これにより、セレクタ30は、スレッド選択信号TSELとしてスレッド番号Bとして出力されるハードウェアスレッド番号の番号(例えばn番)を出力する。
【0040】
次いで、時刻t4ではカウント値CNTが3にカウントアップされる。そのため、セレクタ37は、スロットSLT3を選択する。従って、セレクタ37は、実時間ビット信号の論理レベルを1とし、スレッド番号Aを2番とする。これにより、セレクタ30は、スレッド選択信号TSELとしてスレッド番号Aの2番を出力する。
【0041】
次いで、時刻t5ではカウント値CNTが4にカウントアップされる。そのため、セレクタ37は、スロットSLT4を選択する。従って、セレクタ37は、実時間ビット信号の論理レベルを1とし、スレッド番号Aを1番とする。これにより、セレクタ30は、スレッド選択信号TSELとしてスレッド番号Aの1番を出力する。
【0042】
そして、時刻t5では、カウント値CNTがカウント最大値CNTMに達するため、時刻t6の経過後にカウント値CNTはリセットされる。これにより、時刻t6〜t10の期間のスレッドスケジューラ19は、時刻t1〜t5の動作を繰り返すことになる。マルチスレッドプロセッサ1では。カウント値CNTがリセットされる周期をスレッド選択処理の一周期とする。
【0043】
続いて、上記スレッドスケジューラ19が出力するスレッド選択信号TSELに基づくマルチスレッドプロセッサ1の動作のタイミングチャートを
図6に示す。この
図6において選択されるハードウェアスレッド及び時刻は、
図5において説明したスレッド選択信号TSEL及び時刻に基づくものである。
【0044】
図6に示すように、マルチスレッドプロセッサ1は、時刻t1においては、スレッド選択信号TSELが0番のハードウェアスレッドを選択するため、0番のハードウェアスレッドに属する命令0を実行する。次いで、時刻t2においては、スレッド選択信号TSELが1番のハードウェアスレッドを選択するため、1番のハードウェアスレッドに属する命令0を実行する。次いで、時刻t3においては、スレッド選択信号TSELが第2のスケジューラ32が選択した任意のハードウェアスレッド(例えばn番)を選択するため、n番のハードウェアスレッドに属する命令0を実行する。次いで、時刻t4においては、スレッド選択信号TSELが2番のハードウェアスレッドを選択するため、2番のハードウェアスレッドに属する命令0を実行する。次いで、時刻t5においては、スレッド選択信号TSELが1番のハードウェアスレッドを選択するため、1番のハードウェアスレッドに属する命令1を実行する。そして、マルチスレッドプロセッサ1は、時刻t5が経過する時点でスレッド選択の周期を1つ終了させ、次のスレッド選択処理の周期を開始する。
【0045】
次のスレッド選択処理の周期(時刻t6〜t10)では、時刻t1〜t5の周期と同様の順序でハードウェアスレッドを選択するが、選択されたハードウェアスレッドにおいて処理される命令は、前の周期の続きの命令群となる。
【0046】
例えば、時刻t6においては、スレッド選択信号TSELが0番のハードウェアスレッドを選択するため、0番のハードウェアスレッドに属する命令1を実行する。次いで、時刻t7においては、スレッド選択信号TSELが1番のハードウェアスレッドを選択するため、1番のハードウェアスレッドに属する命令2を実行する。次いで、時刻t8においては、スレッド選択信号TSELが第2のスケジューラ32が選択した任意のハードウェアスレッド(例えばn番)を選択するため、n番のハードウェアスレッドに属する命令1を実行する。次いで、時刻t9においては、スレッド選択信号TSELが2番のハードウェアスレッドを選択するため、2番のハードウェアスレッドに属する命令1を実行する。次いで、時刻t10においては、スレッド選択信号TSELが1番のハードウェアスレッドを選択するため、1番のハードウェアスレッドに属する命令3を実行する。
【0047】
このように、スレッドスケジューラ19が循環的に選択するハードウェアスレッドを切り替えた場合、1つのスレッド選択処理周期において処理されるハードウェアスレッドの実行時間は所定の比率となる。
図6に示す例では、第1の実行期間において0番のハードウェアスレッドは1回、1番のハードウェアスレッドは2回、2番のハードウェアスレッドは1回実行される。また、第2の実行期間において任意(n番)のハードウェアスレッドが1回実行されることになる。つまり、第1の実行期間と第2の実行期間とのプロセッサ占有時間の比率は80:20である。また、0番のハードウェアスレッドは少なくとも20%のプロセッサ占有時間を確保し、1番のハードウェアスレッドは少なくとも40%のプロセッサ占有時間を確保し、2番のハードウェアスレッドは少なくとも20%のプロセッサ占有時間を確保する。また、第2の実行期間として割り当てられた20%のプロセッサ占有時間の間は、マルチスレッドプロセッサ1におけるスレッドの処理状況に応じた任意のハードウェアスレッドを実行される。
【0048】
上記説明より、本実施の形態にかかるマルチスレッドプロセッサ1では、スレッドスケジューラ19が実時間ビット信号の論理レベルが1となる第1の実行期間において予め設定された順序により予め設定されたハードウェアスレッドを選択し、実時間ビット信号の論理レベルが0となる第2の実行期間は、任意のハードウェアスレッドを選択する。これにより、マルチスレッドプロセッサ1は、第1の実行期間において選択されるハードウェアスレッドのプロセッサ占有時間の最低時間を保証する。また、第2の実行期間において任意のハードウェアスレッドを選択することで、マルチスレッドプロセッサ1は、その処理状況に応じて任意のハードウェアスレッドのプロセッサ占有時間を増加させることができる。
【0049】
また、本実施の形態におけるマルチスレッドプロセッサ1では、第1の実行期間と第2の実行期間との比率、及び、第1の実行期間の間に実行されるハードウェアスレッドの比率を管理プログラムにより任意に設定することができる。つまり、管理プログラムにより設定されるスレッド制御レジスタ33内のスロットへの値及びカウント最大値CNTMの値を、マルチスレッドプロセッサ1に対する処理要求に応じて変更することで柔軟なハードウェアスレッドの選択方法を選ぶことが可能になる。より具体的には、スレッド制御レジスタ33内のスロットの実時間ビットの値及びハードウェアスレッド番号の値を変更することで第1の実行時間中に実行されるべきハードウェアスレッドを選択することができ、さらに、第1の実行時間と第2の実行時間との比率を変更することができる。また、カウント最大値CNTMにどのような値を設定するかにより、一スレッド選択処理周期の長さを変更することができる。
【0050】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、第2のスケジューラにおけるスレッドのスケジューリング方法は、マルチスレッドプロセッサの仕様に応じて適宜変更することが可能である。