(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0021】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、特別な説明が無い限り、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【0022】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0023】
<第1の実施の形態>
図1は、第1の実施の形態にかかるプロセッサシステム100を示す図である。プロセッサシステム100は、システムバス120を介して接続されたメモリ110とマルチスレッドプロセッサ130を有する。なお、図示していないが、システムバス120には、入出力インタフェースなどの他の回路も接続される。
【0024】
マルチスレッドプロセッサ130は、複数のハードウェアスレッドを備える。ハードウェアスレッドは、マルチスレッドプロセッサ130に内蔵されるスレッドプログラムカウンタにより出力される命令フェッチアドレスに従って命令メモリから読み出される一連の命令群により構成される命令流を生成する系のことであり、スレッドプログラムカウンタ、命令メモリ、汎用レジスタ、制御レジスタ(本実施の形態ではパイプライン制御回路160に内蔵されるものとする)等の回路群により構成される。本実施の形態では、マルチスレッドプロセッサ130は、複数のスレッドプログラムカウンタを備え、スレッドプログラムカウンタの数と同数のハードウェアスレッドが実装されている。
【0025】
図示のように、マルチスレッドプロセッサ130は、演算回路140、割込コントローラ150、PC生成回路152、スレッドプログラムカウンタTPC0〜TPC4、セレクタ154、命令メモリ156、命令バッファ158、パイプライン制御回路160、命令フェッチコントローラ162、セレクタ164、スケジューラ200を備える。
【0026】
演算回路140は、セレクタ164によって選択されたハードウェアスレッドが生成する命令に基づき演算処理を実行する。より具体的には、演算回路140は、命令デコーダ142、実行ユニット144、データレジスタ146を有する。
【0027】
命令デコーダ142は、受信した命令をデコードして、実行ユニット144に対して演算制御信号SCを出力する。また、命令デコーダ142は、命令のデコード結果に基づきデータの格納位置を示すデータレジスタアドレスRaddとデータレジスタアドレスWaddの出力を行う。
【0028】
実行ユニット144は、演算制御信号SCに応じて各種の演算を実行する。なお、実行ユニット144は、複数の実行ステージを有し、パイプライン処理により演算を行う。また、実行ユニット144において実行された演算結果は、その演算結果の種類に応じてPC生成回路152、メモリ110、データレジスタ146に送信される。
【0029】
データレジスタ146は、実行ユニット144において用いられるデータが格納されており、データレジスタアドレスRaddにより指定されるアドレスのデータを出力する。
図1に示す例では、データレジスタ146は、データレジスタアドレスRaddに応じてデータaとデータbを出力する。また、データレジスタ146は、実行ユニット144が出力する演算結果をデータレジスタアドレスWaddにより指定されるアドレスに格納する。
【0030】
割込コントローラ150は、割込要求信号を受けて、マルチスレッドプロセッサ130内に割込処理の実行を指示する割込指示信号を出力する。より具体的には、割込コントローラ150は、割込要求信号を受信すると、割込要因や割込処理の優先度等を判定し、当該割込要因に関連した処理を行うようにPC生成回路152及びパイプライン制御回路160に割込処理の実行を指示する。この割込要求は、マルチスレッドプロセッサ130が出力するものの他に、マルチスレッドプロセッサ130以外の回路からも出力される。
【0031】
PC生成回路152は、プログラムカウンタの更新値(以下「プログラムカウント更新値」という)を生成するものであり、システムバス120を介して入力される新たなプログラム命令信号、割込コントローラ150が出力する割込指示信号及び実行ユニット144における処理に基づき出力される分岐指示信号を受けて、プログラムカウント更新値を生成する。PC生成回路152は、生成したプログラムカウント更新値をスレッドプログラムカウンタTPC0〜TPC4のいずれかに与える。なお、PC生成回路152は、生成したプログラムカウント更新値をいずれのスレッドプログラムカウンタに与えるかを判断する機能も有する。
【0032】
スレッドプログラムカウンタTPC0〜TPC4は、処理すべき命令が格納される命令メモリ156のアドレス(「命令フェッチアドレスIMadd」という)を生成するものである。具体的には、スレッドプログラムカウンタTPC0〜TPC4は、PC生成回路152からプログラムカウント更新値が与えられた場合には、命令フェッチアドレスIMaddを該プログラムカウント更新値に応じて更新する。一方、プログラムカウント更新値の入力がない場合には、スレッドプログラムカウンタTPC0〜TPC4は、アドレスを昇順に計算し、連続する次の命令フェッチアドレスIMaddを算出する。
【0033】
なお、例として、
図1において、スレッドプログラムカウンタの数をTPC0〜TPC4の5つとしており、マルチスレッドプロセッサ130におけるハードウェアスレッドの数も5つとなる。スレッドプログラムカウンタ乃至ハードウェアスレッドの数は、5に限られることがない。
【0034】
セレクタ154は、命令フェッチコントローラ162が出力するスレッド指定信号に応じてスレッドプログラムカウンタTPC0〜TPC4のうちいずれか1つを選択し、選択したスレッドプログラムカウンタが出力する命令フェッチアドレスIMaddを出力する。なお、
図1において、セレクタ154の入力端子に付した数字0〜4は、ハードウェアスレッドの番号を示すものである。
【0035】
なお、ハードウェアスレッドA1、A2、B1〜B3は、0、1、2、3、4の番号が夫々付与されているとする。
【0036】
命令メモリ156は、マルチスレッドプロセッサ130の全て(本実施の形態では5つ)のハードウェアスレッドにより共用されるメモリ領域であり、マルチスレッドプロセッサ130において実行される演算で用いられる各種命令が格納される。
【0037】
命令フェッチコントローラ162が出力するスレッド指定信号は、命令メモリ156にも入力される。命令メモリ156は、命令フェッチコントローラ162が出力するスレッド指定信号に従って、セレクタ154を介して入力される命令フェッチアドレスIMaddにより指定された命令の出力先を振り分ける。
【0038】
本実施の形態では、命令バッファ158は、スレッドプログラムカウンタTPC0〜TPC4に対応した命令バッファ領域BUF0〜BUF4を有する。命令メモリ156は、命令バッファ領域BUF0〜BUF4のうちの、命令フェッチコントローラ162が出力するスレッド指定信号に対応する領域に命令を出力する。なお、命令メモリ156は、メモリ110に含まれる所定のメモリ領域であってもよい。
【0039】
命令バッファ領域BUF0〜BUF4は、FIFO(First In First Out)形式のバッファ回路である。また、命令バッファ領域BUF0〜BUF4は、1つのバッファ内において領域分割されたものであってもよいし、異なるバッファ内に夫々形成されたものであっても良い。
【0040】
パイプライン制御回路160は、命令バッファ158の先頭に格納された命令と実行ユニット144において実行されている命令とをモニタする。そして、パイプライン制御回路160は、割込コントローラ150から割込指示信号が入力された場合には、割込処理に関係するハードウェアスレッドに属する命令を廃棄する指示を命令バッファ158及び実行ユニット144に対して行う。
【0041】
命令フェッチコントローラ162は、命令バッファ158に格納されている命令の個数に応じていずれのハードウェアスレッドに属する命令をフェッチすべきかを判断し、その判断結果に基づきセレクタ154にスレッド指定信号を出力する。例えば、命令フェッチコントローラ162は、命令バッファ領域BUF0に格納される命令キューの数が他の命令バッファ領域に格納される命令キューの数よりも少なければ、0番のハードウェアスレッドに属する命令をフェッチすべきと判断し、0番のハードウェアスレッドを示すスレッド指定信号を出力する。これにより、セレクタ154は、スレッドプログラムカウンタTPC0を選択する。なお、命令フェッチコントローラ162は、ラウンドロビン方式など従来知られているいかなる方式による手順で選択するハードウェアスレッドを決定してもよい。
【0042】
セレクタ164は、スケジューラ200が出力するスレッド選択信号TSELに応じて命令バッファ領域BUF0〜BUF4のいずれか1つを選択し、選択した命令バッファ領域から読み出した命令を演算回路140に出力する。つまり、セレクタ164は、スレッド選択信号TSELに従って複数のハードウェアスレッドから1つのハードウェアスレッドを選択し、選択したハードウェアスレッドが出力する命令を演算回路140に出力する。なお、セレクタ164の入力端子に付した数字0〜4は、ハードウェアスレッドの番号を示す。
【0043】
スケジューラ200は、予め設定されたスケジュールを基に、5つのハードウェアスレッドのうち次の実行サイクルにおいて実行される1つのハードウェアスレッドを指定するスレッド選択信号TSELを出力する。マルチスレッドプロセッサ130では、このスケジュールは、マルチスレッドプロセッサ130の利用者、すなわちマルチスレッドプロセッサ130上で動作するプログラムの設計者により設計され、例えば、マルチスレッドプロセッサ130の起動の直後に実行される管理プログラムにより設定される。
【0044】
以下において説明しやすいように、マルチスレッドプロセッサ130における5つのハードウェアスレッド(番号:0〜4)を夫々A1、A2、B1、B2、B3とする。A1とA2は、例えば実時間スレッドであり、第1のグループを構成する。B1−B3は、実時間スレッド以外のスレッド(非実時間スレッド)であり、第2のグループを構成する。
【0045】
なお、以下の説明及び各図面において、「A1」や「B2」のように、AまたはBの後に数字が付されている表記は、該当するハードウェアスレッドを表し、「A」や「B」のように数字が付されていない表記は、該当するグループ内のいずれか1つのハードウェアスレッドを表す。例えば、「A1」と「B2」は、ハードウェアスレッドA1とハードウェアスレッドB2を夫々表し、「A」と「B」は、第1のグループ内のいずれか1つのハードウェアスレッド(ハードウェアスレッドA1またはハードウェアスレッドA2)と、第2のグループ内のいずれか1つのハードウェアスレッド(ハードウェアスレッドB1またはハードウェアスレッドB2)を夫々表す。
【0046】
上記スケジュールは、A1の実行時間と、A2の実行時間と、Bの実行時間の比が一定となるように設定されている。例として、この比は、「1:1:2」に設定されているとする。
【0047】
本実施の形態において、スケジューラ200が行うスケジューリングは、スレッドスケジューリングと、再スケジューリングからなる。ここで、スレッドスケジューリングと再スケジューリングを具体的に説明する。
【0048】
<スレッドスケジューリング>
スレッドスケジューリングは、予め設定されたスケジュールを繰り返し実行するスケジューリングである。スレッドスケジューリングでは、スケジューラ200は、各循環周期において、「A1の指定が1回、A2の指定が1回、B(B1、B2、B3のいずれか1つ)の指定が2回」となるようにハードウェアスレッドの指定を行う。
【0049】
<再スケジューリング>
再スケジューリングは、上記スレッドスケジューリングにより次に実行するハードウェアスレッドとしてA(A1またはA2)が指定されるものの、指定されたハードウェアスレッドが実行不可であるときに行われる。ハードウェアスレッドが実行不可となる要因は、例えばI/O待ちなどがある。
【0050】
再スケジューリングでは、スケジューラ200は、スレッドスケジューリングにより指定されたハードウェアスレッドAの代わりに、第2のグループ内のいずれか1つのハードウェアスレッド(ハードウェアスレッドB)を指定し直す。
【0051】
すなわち、スケジューラ200は、原則として、予め設定されたスケジュールを繰り返すスケジューリング(スレッドスケジューリング)を行う。そして、スレッドスケジューリングによりハードウェアスレッドAを指定するものの、該ハードウェアスレッドAが実行不能であるときに、ハードウェアスレッドAの代わりに、ハードウェアスレッドBを指定する。そのため、スレッドスケジューリングにより指定されたハードウェアスレッドAが実行不能である場合においても、実行スロットに空きが生じることを回避できる。
【0052】
すなわち、スケジューラ200は、予め設定したスケジュール通りのスケジューリングによる各スレッドの実行時間の確保と、マルチスレッドプロセッサ130の性能低下の回避との両方において、ベストエフォートを実現する。
【0053】
ここで、再スケジューリングの際に、ハードウェアスレッドA(例えばA1)の代わりに指定するハードウェアスレッドが、他のハードウェアスレッドA(例えばA2)ではなく、ハードウェアスレッドBであることを注目されたい。
【0054】
ハードウェアスレッドA1、A2、Bの実行回数に関して、マルチスレッドプロセッサ130の設計者が実現したい割合は、「1:1:2」である。すなわち、4回のうちに、A1が1回指定され、A2が1回指定され、Bが2回指定される。
【0055】
スレッドスケジューリングにより指定されたハードウェアスレッドA1が実行不能であるときに、ハードウェアスレッドA1の代わりにハードウェアスレッドA2を指定し直すのでは、該循環周期において、A1が0回指定され、A2が2回指定され、Bが2回指定されるようになる。これでは、ハードウェアスレッドA2の割合が変わってしまう。
【0056】
一方、本実施の形態におけるスケジューラ200によれば、スレッドスケジューリングにより指定されたハードウェアスレッドA1が実行不能であるときに、ハードウェアスレッドA1の代わりにハードウェアスレッドBを指定し直すため、該循環周期において、A1が0回指定され、A2が1回指定され、Bが3回指定されるようになる。
【0057】
第1のグループに含まれるハードウェアスレッドA1とハードウェアスレッドA2は、第2のグループの各ハードウェアスレッドより、実行の割合を保証したいハードウェアスレッドである。なお、「実行の割合を保証する」ことは、「実行時間を減らさない」のみならず、「実行時間を無闇に増やさない」ことも含む。従って、スレッドスケジューリングにより指定されたハードウェアスレッドA1が実行不能であるときに、ハードウェアスレッドA1の代わりにハードウェアスレッドBを指定し直すスケジューラ200は、実行の割合を特に保証したいハードウェアスレッドについて、設計者が当初意図して設計したハードウェアスレッドの実行割合により近い割合で実行することができる。
【0058】
図2を参照して、スケジューラ200の具体的な回路構成の一例を説明する。
図2に示す例では、スケジューラ200は、第1のスケジューラ210、再スケジューラ220、セレクタ222、スレッド状態管理ユニット230、第2のスケジューラ240、セレクタ250を有する。第1のスケジューラ210、第2のスケジューラ240、セレクタ250は、前述したスレッドスケジューリングを担い、再スケジューラ220、スレッド状態管理ユニット230は、前述した再スケジューリングを担う。
【0059】
第1のスケジューラ210は、第1のグループと第2のグループとを切り替える選択信号REAL0を出力すると共に、ハードウェアスレッドの番号を出力する。以下、第1のスケジューラ210が出力する番号を「第1の番号SN1」という。
【0060】
前述したように、例として、第1のグループの各ハードウェアスレッドが実時間スレッドであり、第2のグループ内の各ハードウェアスレッドが非実時間スレッドである。そのため、以下、選択信号REAL0を「実時間ビット信号」ともいう。また、実時間ビット信号REAL0は、「1」と「0」により第1のグループと第2のグループを夫々示すとする。
【0061】
図示のように、第1のスケジューラ210は、スレッド制御レジスタ211、カウンタ212、カウンタ最大値格納部213、比較回路214、セレクタ215を有する。
【0062】
スレッド制御レジスタ211は、1循環周期において指定されるハードウェアスレッドの総数(ここでは4)以上の数のスロット(図示の例では、スロットSLT0〜SLT7の8つ)を備える。夫々のスロットは、
図3に示すように、ハードウェアスレッド番号が格納される番号格納部と、当該スロットが選択された場合における実時間ビット信号の論理レベルを示すフラグ(すなわち実時間ビット信号REAL0の値)が格納される実時間ビット格納部とを有する。
【0063】
本実施の形態において、スロットSLT0とスロットSLT2に、実時間ビット信号REAL0の論理レベルを示すフラグとして、「1」が夫々格納され、ハードウェアスレッドの番号として、「0」(A1)、「1」(A2)が夫々格納される。
【0064】
また、スロットSLT1とスロットSLT3には、実時間ビット信号REAL0の論理レベルを示すフラグとして、「0」が夫々格納されている。後の説明で分かるように、フラグとして「0」を格納するスロットが選択された場合、該スロットに格納されるハードウェアスレッドの番号も第1の番号SN1として出力されるが、このときの第1の番号SN1が使用されない。そのため、スロットSLT1とスロットSLT3には、ハードウェアスレッドの番号として、任意の値を格納してもよい。
【0065】
また、この例の場合には、スロットSLT4〜スロットST7は、使用されないため、任意の値が格納される。
【0066】
カウンタ212は、所定の間隔でカウント値CNTを更新する。具体的には、本実施の形態におけるカウンタ212は、マルチスレッドプロセッサ130の動作クロック(図示せず)に同期してカウント値CNTをカウントアップする。
【0067】
カウント最大値格納部213は、カウンタ212のカウント値CNTの上限値を定めるカウント最大値CNTMを格納する。このカウント最大値CNTMは、スケジューラ200が1循環周期において指定するハードウェアスレッドの数であり、ここでは「4」となる。
【0068】
比較回路214は、カウント値CNTとカウント最大値CNTMとを比較し、カウント値CNTとカウント最大値CNTMが一致した場合に、カウンタ212のカウント値をリセットするリセット信号RSTを出力する。つまり、カウンタ212は、所定の周期でカウント値CNTを初期化しながら、カウントアップ動作を繰り返すことで、循環的に値が更新されるカウント値CNTを出力する。
【0069】
セレクタ215は、カウント値CNTに応じてスレッド制御レジスタ211内のスロットの1つを選択し、選択したスロットに格納される値に基づき実時間ビット信号REAL0と第1の番号SN1を出力する。具体的には、セレクタ215は、カウント値CNTが0であればスロットSLT0を選択し、スロットSLT0の番号格納部に格納されたハードウェアスレッド番号を第1の番号SN1とし、スロットSLT0の実時間ビット格納部に格納されるフラグの値を実時間ビット信号REAL0の論理レベルとする。
【0070】
なお、スレッド制御レジスタ211のスロットに格納される値、カウンタ212のカウント値CNTの初期値、カウント最大値格納部213に格納されるカウント最大値CNTMは、マルチスレッドプロセッサ130の起動時に実行される管理プログラムにより設定される。また、管理プログラムは、メモリ110からこれら設定値を読み込むものとする。
【0071】
再スケジューラ220は、第1のスケジューラ210からの実時間ビット信号REAL0と、セレクタ222からの信号(後述する状態信号STA)とが入力され、実時間ビット信号REAL1を出力する。
【0072】
スレッド状態管理ユニット230は、マルチスレッドプロセッサ130の各ハードウェアスレッドが実行可能と実行不可のいずれの状態にあるかを監視し、監視結果をセレクタ222に出力する。例えば、ハードウェアスレッドA1、A2、B1−B3は、夫々、「実行可能」、「実行不可」、「実行可能」、「実行可能」、「実行可能」であるときに、スレッド状態管理ユニット230は、信号「10111」をセレクタ222に出力する。
【0073】
スレッド状態管理ユニット230からの信号と、第1のスケジューラ210からの第1の番号SN1は、セレクタ222に入力される。セレクタ222は、スレッド状態管理ユニット230からの信号の各ビットのうちに、第1の番号SN1が示すハードウェアスレッドの状態を示すビットを選択して状態信号STAとして再スケジューラ220に出力する。
【0074】
再スケジューラ220は、第1のスケジューラ210からの実時間ビット信号REAL0が「0」であるときに、実時間ビット信号REAL1として「0」を出力する。
【0075】
一方、実時間ビット信号REAL0が「1」であるときに、セレクタ222からの状態信号STAに応じて、実時間ビット信号REAL1として「0」と「1」のいずれか一方を出力する。具体的には、状態信号STAが「1」であるときには「1」を、状態信号STAが「0」であるときには「0」を実時間ビット信号REAL1として出力する。
【0076】
例えば、第1のスケジューラ210から、「1」である実時間ビット信号REAL0と、「0」である第1の番号SN1が出力されたとする。この場合、第1の番号SN1が示すハードウェアスレッドA1が実行可能であるときには、セレクタ222から状態信号STAとして「1」が出力されるため、再スケジューラ220は、実時間ビット信号REAL1として「1」を出力する。一方、ハードウェアスレッドA1が実行不可であるときには、セレクタ222から状態信号STAとして「0」が出力されるため、再スケジューラ220は、実時間ビット信号REAL1として「0」を出力する。
【0077】
図4は、再スケジューラ220の回路構成の1例を示す。該例では、再スケジューラ220は、AND回路で構成されている。すなわち、再スケジューラ220は、セレクタ222からの状態信号STAと、第1のスケジューラ210からの実時間ビット信号REAL0が入力され、それらの論理積を実時間ビット信号REAL1として出力する。
【0078】
図2に戻って説明する。
再スケジューラ220は、上述した通りに、第1のスケジューラ210からの実時間ビット信号REAL0と、セレクタ222からの状態信号STAとに基づいて実時間ビット信号REAL1を生成してセレクタ250に出力する。この実時間ビット信号REAL1は、セレクタ250の制御信号となる。
【0079】
セレクタ250には、再スケジューラ220からの実時間ビット信号REAL1に基づいて、第1のスケジューラ210が出力した第1の番号SN1と、第2のスケジューラ240が出力した第2の番号SN2のいずれか一方を選択する。
【0080】
第2のスケジューラ240は、マルチスレッドプロセッサ130の5つのハードウェアスレッドのうちの第2のグループの各ハードウェアスレッド(B1−B3)をスケジューリングするものである。具体的には、第2のスケジューラ240は、ハードウェアスレッドB1−B3から任意の1つを選択すると共に、選択したハードウェアスレッドの番号をセレクタ250に出力する。第2のスケジューラ240からセレクタ250に出力される番号は、第2の番号SN2である。
【0081】
なお、第2のスケジューラ240によるスケジューリング手法は、従来知られているラウンドロビン方式やプライオリティ方式など任意の手法とすることができる。
【0082】
セレクタ250は、実時間ビット信号REAL1が「1」であるときに第1の番号SN1を選択し、実時間ビット信号REAL1が「0」であるときに第2の番号SN2を選択する。セレクタ250が選択した番号は、スレッド選択信号TSELとして、マルチスレッドプロセッサ130のセレクタ164に出力される。
【0083】
前述したように、セレクタ164は、5つのハードウェアスレッドのうちの、次に実行するハードウェアスレッドが生成した命令を選択して演算回路140に出力するものである。すなわち、スレッド選択信号TSELにより、マルチスレッドプロセッサ130が次に実行するハードウェアスレッドが決まる。
【0084】
第1のスケジューラ210、再スケジューラ220、第2のスケジューラ240の動作をまとめる。
【0085】
第1のスケジューラ210は、循環周期毎に(すなわち、ハードウェアスレッドの4回の指定毎に)、第1のグループと第2のグループのいずれかを示す実時間ビット信号REAL0と第1の番号SN1として、「1」及び「0」(ハードウェアスレッドA1)、「1」及び「1」(ハードウェアスレッドA2)、「0」及び任意の番号を順次出力する。
【0086】
再スケジューラ220は、第1のスケジューラ210からの実時間ビット信号REAL0が「0」であるときに、実時間ビット信号REAL0と同値すなわち「0」である実時間ビット信号REAL1をセレクタ250に出力する。一方、実時間ビット信号REAL0が「1」であるときに、再スケジューラ220は、第1の番号SN1が示すハードウェアスレッドが実行可能である場合には実時間ビット信号REAL1と同値すなわち「1」である実時間ビット信号REAL1を出力するが、第1の番号SN1が示すハードウェアスレッドが実行不可である場合には「0」である実時間ビット信号REAL1を出力する。
【0087】
第2のスケジューラ240は、第2の番号SN2として、第2のグループ内のハードウェアスレッド(B1〜B3)のうちの任意のハードウェアスレッドの番号をセレクタ250に出力する。
【0088】
セレクタ250は、スレッド選択信号TSELとして、再スケジューラ220からの実時間ビット信号REAL1が「1」であるときに第1のスケジューラ210からの第1の番号SN1を、再スケジューラ220からの実時間ビット信号REAL1が「0」であるときに第2のスケジューラ240からの第2の番号SN2を選択して、セレクタ164に出力する。
【0089】
ここで、スケジューラ200において再スケジューラ220が無いと仮定した場合に、スケジューラ200によるスケジューリングの一例を考える。
図5は、この仮定の場合におけるスケジューラ200の回路構成例を示す。
【0090】
図5において、ドットにより塗り潰されたものは、存在しないと仮定されたき機能ブロックを示す。図示のように、この場合、再スケジューラ220、セレクタ222、スレッド状態管理ユニット230が無い。そのため、第1のスケジューラ210からの実時間ビット信号REAL0は、直接セレクタ250に入力される。
【0091】
図6は、
図5に示す回路構成の場合におけるスケジューラ200のスケジューリングの一例を示す。
図6及び以降の各図面において、「可」と「不可」は、当該ハードウェアスレッドが「実行可能」、「実行不可」を夫々示し、「空」は、何も実行されないことを示す。また、「B」は、第2のグループ(B1〜B3)内のいずれか1つを示す。
【0092】
また、「ID」、「EX」、「WB」、「MEM」、「MEM WB」は、パイプライン処理のステージ「命令デコード」、「命令実行」、「レジスタライトバック」、「メモリアクセス」、「メモリライトバック」を夫々示す。なお、これらのステージは、例示であり、プロセッサの仕様によっては、パイプラインのステージが異なる。
【0093】
図6に示すように、クロックの第1のサイクル(T1)において、スロットSLT0が選択されるため、実時間ビット信号REAL0と第1の番号SN1として、「1」、「0」(A1)がセレクタ250に出力される。そのため、セレクタ250から、次に実行するハードウェアスレッドとして、A1の番号「0」が出力される。その結果、ハードウェアスレッドA1が生成した命令が実行される。具体的には、ハードウェアスレッドA1が生成した命令の「ID」ステージの処理が開始される。
【0094】
クロックの第2サイクル(T2)において、スロットSLT1が選択されるため、実時間ビット信号REAL0と第1の番号SN1として、「0」と「*」(任意の番号)が、第2の番号SN2として、3〜5のいずれか(ハードウェアスレッドB)がセレクタ250に出力される。そのため、セレクタ250から、次に実行するハードウェアスレッドとして、ハードウェアスレッドBの番号(3〜5のいずれか1つ)が出力される。その結果、ハードウェアスレッドBが生成した命令が実行される。
【0095】
同様に、クロックの第3のサイクル(T3)において、ハードウェアスレッドA2の番号(1)が選択され、ハードウェアスレッドA2が生成した命令が実行される。次いで、第4のサイクル(T4)において、ハードウェアスレッドBの番号が選択され、ハードウェアスレッドBが生成した命令が実行される。
【0096】
なお、サイクルT3では、ハードウェアスレッドA1の「MEM」ステージの処理が実行されるが、I/O待ちにより、次のステージへ進むことができず、「実行不可」となっている。
図6の例では、ハードウェアスレッドA1の「実行不可」状態は、サイクルT9まで続く。
【0097】
サイクルT1〜T4は、スケジューリングの1循環周期である。図示のように、該循環周期において、A1、A2、Bに割り得てられた実行時間の比は、予め設定されたスケジュール通りの「1:1:2」である。
【0098】
次いで、次の循環周期(サイクルT5〜T8)のスケジューリングが行われる。サイクルT1〜T4の循環周期のときと同様に、セレクタ250から、A1、B、A2、Bの番号が順次出力される。
【0099】
ところが、サイクルT5において、次に実行するハードウェアスレッドとしてハードウェアスレッドA1が指定されているが、ハードウェアスレッドA1は、「実行不可」である。そのため、サイクルT5において、「ID」ステージでは、何も実行されないこととなる。その結果、サイクルT6における「EX」ステージと、サイクルT7における「WB」ステージでも、何も実行されない。
【0100】
同様のことは、サイクルT9〜サイクルT12の循環周期においても発生する。
なお、サイクルT10において、ハードウェアスレッドA1は、I/0アクセスが完了し、「実行可能」状態に復帰する。そのため、サイクルT12の次のサイクルから始まる循環周期(図示せず)においては、パイプライン処理は、サイクルT1〜サイクルT4の循環周期と同様になる。
【0101】
図6から明らかなように、ハードウェアスレッドA1が「実行不可」状態になることにより、実行スロットに空きが生じ、プロセッサの性能が低下してしまう。
【0102】
図6を参照して、再スケジューラ220が無いと仮定した場合にスケジューラ200によるスケジューリングの一例を説明した。
【0103】
図7は、上記仮定が無い場合、すなわち本実施の形態におけるスケジューラ200によるスケジューリングの例を示す図である。
【0104】
図7に示すように、サイクルT1〜T4の循環周期において、
図6に示す例と同様に、ハードウェアスレッドA1、ハードウェアスレッドB、ハードウェアスレッドA2、ハードウェアスレッドBの順に夫々のハードウェアスレッドが指定され、実行される。
【0105】
サイクルT5では、スロットSLT0が選択され、第1のスケジューラ210から実時間ビット信号REAL0と第1の番号SN1として、「1」と「0」(A1)が出力される。しかし、ハードウェアスレッドA1が実行不可であるため、再スケジューラ220は、実時間ビット信号REAL1に「0」を出力する。その結果、該サイクルでは、セレクタ250から、スレッド選択信号TSELとして、ハードウェアスレッドBを示す第2の番号SN2が出力される。
【0106】
すなわち、スレッドスケジューリングにより一旦ハードウェアスレッドA1が指定されるものの、再スケジューリングにより、ハードウェアスレッドA1の代わりに、ハードウェアスレッドBが指定される。
【0107】
図7及び以降の図面において、スレッド選択信号TSELについて、細線枠はスレッドスケジューリングの結果を示し、実線の太線枠は、再スケジューリングの結果を示す。
【0108】
図7に示すように、サイクルT9においても、再スケジューリングが行われ、スレッドスケジューリングにより指定されたハードウェアスレッドA1の代わりに、ハードウェアスレッドBが指定されている。
【0109】
その結果、ハードウェアスレッドA1が「実行不可」状態に入ったとしても、実行スロットに空きが生じていない。その結果、プロセッサの性能低下は、回避される。
【0110】
<第2の実施の形態>
第2の実施の形態も、プロセッサシステムである。なお、第2の実施の形態にかかるプロセッサシステムは、第1の実施の形態のプロセッサシステム100に対して、スケジューラ200の代わりにスケジューラ300を設けた点を除き、プロセッサシステム100と同様である。そのため、該第2の実施の形態にプロセッサシステムについては、スケジューラ300のみを説明する。また、説明に際して、プロセッサシステム100における複数のハードウェアスレッドと同様の例を用いる。
【0111】
スケジューラ300は、前述したスレッドスケジューリングと、再スケジューリングに加え、さらに、後述する浪費回数のカウント及び復旧スケジューリングを行う。
【0112】
スケジューラ300は、第1のグループのそれぞれのハードウェアスレッド(A1、A2)が再スケジューリングされる毎に、それぞれの浪費回数をカウントアップする。
【0113】
前記したように、再スケジューリングは、スレッドスケジューリングにより第1のグループのハードウェアスレッドが指定されるものの、該ハードウェアスレッドが実行不可であるときに、該ハードウェアスレッドの代わりに第2のグループのハードウェアスレッド(B)を指定し直す処理である。すなわち、ハードウェアスレッドA1またはハードウェアスレッドA2に対してカウントアップされる浪費回数とは、該ハードウェアスレッドが実行不可であるときにスレッドスケジューリングにより指定され、再スケジューリングにより第2グループのハードウェアスレッド(B)が代わりに指定される回数になる。
【0114】
スケジューラ300は、第1のグループの夫々のハードウェアスレッドの浪費回数に基づいて、復旧スケジューリングを行う。具体的には、スレッドスケジューリングにより第2のグループのハードウェアスレッドが指定されたときに、スケジューラ300は、第1のグループのうちに、浪費回数が「1」以上のハードウェアスレッドの有無を確認する。
【0115】
第1のグループ内に該当するハードウェアスレッドがあり、かつ、該ハードウェアスレッドが実行可能である場合には、スケジューラ300は、スレッドスケジューリングにより指定されたハードウェアスレッドBの代わりに、第1のグループ内の該当するハードウェアスレッドを指定し直す(復旧スケジューリング)。同時に、該ハードウェアスレッドの浪費回数をカウントダウンする。
【0116】
一方、第1のグループ内に該当するハードウェアスレッドが無い場合、または、該当するハードウェアスレッドがあるものの、該ハードウェアスレッドが実行不可である場合には、スケジューラ300は、復旧スケジューリングをしない。すなわち、この場合、スケジューラ300は、スレッドスケジューリングにより指定されたハードウェアスレッドBを指定する。
【0117】
つまり、スケジューラ300は、原則として、予め設定されたスケジュールを繰り返すスレッドスケジューリングを行う。そして、スレッドスケジューリングによりハードウェアスレッドAを指定するものの、該ハードウェアスレッドAが実行不能であるときに、該ハードウェアスレッドAの代わりに、ハードウェアスレッドBを指定し直す再スケジューリングを行うと共に、該ハードウェアスレッドAの浪費回数をカウントアップする。
【0118】
また、スレッドスケジューリングによりハードウェアスレッドBが指定されたときに、浪費回数が1以上であるハードウェアスレッドAがあり、かつ、該ハードウェアスレッドAが実行可能であれば、スケジューラ300は、該ハードウェアスレッドAを、スレッドスケジューリングにより指定されたハードウェアスレッドBの代わりに指定し直す復旧スケジューリングを行うと共に、該ハードウェアスレッドAの浪費回数をカウントダウンする。
【0119】
このように、スケジューラ300は、第1の実施の形態のスケジューラ200と同様に、予め設定したスケジュール通りのスケジューリングと、マルチスレッドプロセッサ130の性能低下の回避との両方において、ベストエフォートを実現する。
【0120】
さらに、スケジューラ300は、第1のグループのハードウェアスレッド毎に浪費回数をカウントし、浪費回数に基づいて復旧スケジューリングを行うことにより、個々の循環周期で第1のグループのハードウェアスレッドについて設計者が設計した通りの割合で実行させることができなくても、複数の循環周期を通してみれば、第1のグループのハードウェアスレッドの実行の割合を設計者の設定に近付けることができる。
【0121】
図8は、スケジューラ300の回路構成の一例を示す。
図8に示すように、スケジューラ300は、
図2に示すスケジューラ200に対して、さらに、第1の復旧スケジューラ320を設けた点を除き、スケジューラ200と同様である。ここで、第1の復旧スケジューラ320に重点をおいて説明する。なお、スケジューラ300では、
図2に示すスケジューラ200における第1のスケジューラ210が出力する第1の番号SN1と、再スケジューラ220が出力する実時間ビット信号REAL0の代わりに、セレクタ250には、第1の復旧スケジューラ320が出力する第3の番号SN3と実時間ビット信号REAL3が入力される。
【0122】
図9は、第1の復旧スケジューラ320の回路構成の一例を示す。図示のように、該例では、第1の復旧スケジューラ320は、インバータ321、AND回路322、カウンタ更新部323、スレッド浪費カウンタWCN1、スレッド浪費カウンタWCN2、復旧スケジューラコア324、OR回路325を備える。
【0123】
セレクタ222が出力した状態信号STAは、第1の復旧スケジューラ320のインバータ321にも入力され、インバータ321により反転されてAND回路322に出力される。また、AND回路322には、第1のスケジューラ210からの実時間ビット信号REAL0も入力される。
【0124】
AND回路322は、状態信号STAの反転信号と、実時間ビット信号REAL0の論理積(信号UP)をカウンタ更新部323に出力する。
【0125】
従って、信号UPは、実時間ビット信号REAL0が「1」であり、かつ、状態信号STAが「実行不可」であるときにおいてのみ、「1」となる。言い換えれば、信号UPは、スケジューラ300により再スケジューリングが行われるときにおいてのみ「1」となる。
【0126】
カウンタ更新部323は、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2のカウント動作を制御するものである。スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2は、第1のグループ内の2つのハードウェアスレッド(A1、A2)に夫々対応し、カウンタ更新部323の制御に従って当該ハードウェアスレッドの浪費回数をカウントする。
【0127】
カウンタ更新部323は、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2に夫々制御信号を出力することによりこの2つのスレッド浪費カウンタのカウント動作を制御する。
【0128】
カウントアップの制御に関して、カウンタ更新部323は、AND回路322からの信号UPと、第1のスケジューラ210からの第1の番号SN1とに基づいて、信号UPが「1」であるときにのみ、第1の番号SN1が示すハードウェアスレッドAに対応するスレッド浪費カウンタをカウントアップさせる。
【0129】
具体的には、例えば、信号UPが「1」であり、第1の番号SN1がハードウェアスレッドA1を示す「0」であるときに、カウンタ更新部323は、スレッド浪費カウンタWCN1をカウントアップさせ、スレッド浪費カウンタWCN2をカウントアップさせないようにスレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2に夫々制御信号を出力する。
【0130】
同様に、信号UPが「1」であり、第1の番号SN1がハードウェアスレッドA2を示す「1」であるときに、カウンタ更新部323は、スレッド浪費カウンタWCN1をカウントアップさせず、スレッド浪費カウンタWCN2をカウントアップさせるようにスレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2に夫々制御信号を出力する。
【0131】
なお、信号UPが「0」であるときには、カウンタ更新部323は、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2の両方に対してカウントアップさせない制御信号を出力する。
カウントダウンの制御に関しては、後述する。
【0132】
復旧スケジューラコア324は、スレッド浪費カウンタWCN1のカウント値、スレッド浪費カウンタWCN2のカウント値、第1のスケジューラ210からの実時間ビット信号REAL0と第1の番号SN1、スレッド状態管理ユニット230からの各スレッドの状態を示す信号が入力され、実時間ビット信号REAL2と第3の番号SN3を出力する。
【0133】
具体的には、復旧スケジューラコア324は、実時間ビット信号REAL0が「0」であり、かつ、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2の少なくとも一方のカウント値(浪費回数)が1以上であり、かつ、該一方の浪費カウンタに対応するハードウェアスレッドAが実行可能であるときにのみ、第1の番号SN1を、上記一方の浪費カウンタに対応するハードウェアスレッドAを示す番号に変更して第3の番号SN3として出力すると共に、実時間ビット信号REAL2に「1」を出力する。それ以外の場合には、復旧スケジューラコア324は、第1のスケジューラ210からの第1の番号SN1をそのまま出力し、実時間ビット信号REAL2に「0」を出力する。
【0134】
なお、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2の両方のカウント値とも1以上であり、かつ両方とも実行可能である場合には、復旧スケジューラコア324は、第3の番号SN3として、例えば、カウント値が大きい方のスレッド浪費カウンタに対応するハードウェアスレッドAを示す番号を出力したり、この場合に対して予め設定された片方のスレッド浪費カウンタに対応するハードウェアスレッドAを示す番号を出力したりするなどすればよい。
【0135】
復旧スケジューラコア324から出力された実時間ビット信号REAL2は、カウンタ更新部323とOR回路325に入力される。また、第3の番号SN3は、セレクタ250とカウンタ更新部323に入力される。
【0136】
カウンタ更新部323は、実時間ビット信号REAL2をカウントダウンの制御に用いる。そのため、実時間ビット信号REAL2は、信号DOWNともいう。
【0137】
カウンタ更新部323は、カウントダウンの制御に関して、具体的には、実時間ビット信号REAL2すなわち信号DOWNが「1」であるときにのみ、第3の番号SN3が示すハードウェアスレッドAに対応するスレッド浪費カウンタをカウントダウンさせる。
【0138】
具体的には、例えば、信号DOWNが「1」であり、第3の番号SN3がハードウェアスレッドA1を示す「0」であるときに、カウンタ更新部323は、スレッド浪費カウンタWCN1をカウントダウンさせ、スレッド浪費カウンタWCN2をカウントダウンさせないようにスレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2に夫々制御信号を出力する。
【0139】
同様に、信号DOWNが「1」であり、第3の番号SN3がハードウェアスレッドA2を示す「1」であるときに、カウンタ更新部323は、スレッド浪費カウンタWCN1をカウントダウンさせず、スレッド浪費カウンタWCN2をカウントダウンさせるようにスレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2に夫々制御信号を出力する。
【0140】
なお、信号DOWNが「0」であるときには、カウンタ更新部323は、スレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2の両方に対してカウントDOWNさせない制御信号を出力する。
【0141】
OR回路325は、再スケジューラ220からの実時間ビット信号REAL1と、復旧スケジューラコア324からの実時間ビット信号REAL2の論理和(実時間ビット信号REAL3)をセレクタ250に出力する。
【0142】
セレクタ250は、スレッド選択信号TSELとして、実時間ビット信号REAL3が「1」であるときに第3の番号SN3を、実時間ビット信号REAL3が「0」であるときに第2のスケジューラ240からの第2の番号SN2を選択する。
【0143】
図10を参照して、本実施の形態におけるスケジューラ300によるスケジューリングの例を説明する。なお、
図10において、
図7と同様に、スレッド選択信号TSELについて、細線枠はスレッドスケジューリングの結果を示し、実線の太線枠は、再スケジューリングの結果を示す。さらに、点線の太線枠は、復旧スケジューリングの結果を示す。
【0144】
図10に示すように、第1の循環周期(サイクルT1〜T4)において、スレッドスケジューリングにより、ハードウェアスレッドA1、ハードウェアスレッドB、ハードウェアスレッドA2、ハードウェアスレッドBの順に夫々のハードウェアスレッドが指定され、実行される。
【0145】
サイクルT5では、スロットSLT0が選択され、第1のスケジューラ210から実時間ビット信号REAL0と第1の番号SN1として、「1」と「0」(A1)が出力される。しかし、ハードウェアスレッドA1が実行不可であるため、再スケジューリングが行われ、セレクタ250から、スレッド選択信号TSELとして、ハードウェアスレッドBを示す第2の番号SN2が出力される。
【0146】
また、該サイクルにおいて、ハードウェアスレッドA1について再スケジューリングがなされたため、信号UPが「1」となり、ハードウェアスレッドA1に対応するスレッド浪費カウンタWCN1のカウント値は、カウントアップにより0から1になる。
【0147】
第2の循環周期のサイクルT6〜T8までは、スレッドスケジューリングにより、ハードウェアスレッドB、ハードウェアスレッドA2、ハードウェアスレッドBが順次指定される。
【0148】
なお、サイクルT6とT8において、スレッドスケジューリングによりハードウェアスレッドBが指定され、スレッド浪費カウンタWCN1のカウント値が1である。しかし、ハードウェアスレッドA1が相変わらず実行不可であるため、復旧スケジューリングはなされない。
【0149】
第3の循環周期に入り、サイクルT9において、スレッドスケジューリングによりハードウェアスレッドA1が指定される。しかし、ハードウェアスレッドA1が相変わらず実行不可であるため、再スケジューリングがなされ、ハードウェアスレッドA1からハードウェアスレッドBへの指定の変更が行われ、信号UPが再び「1」になり、スレッド浪費カウンタWCN1のカウント値は、カウントアップにより1から2になる。
【0150】
サイクルT10において、スレッドスケジューリングによりハードウェアスレッドBが指定される。しかし、スレッド浪費カウンタWCN1のカウント値が「2」であり、かつ、ハードウェアスレッドA1が実行可能になったため、復旧スケジューリングがなされ、ハードウェアスレッドBからハードウェアスレッドA1への指定の変更がなされる。同時に、実時間ビット信号REAL2(DOWN)が「1」となり、スレッド浪費カウンタWCN1のカウント値は、カウントダウンにより2から1になる。
【0151】
同様に、サイクルT12においても、復旧スケジューリングがなされ、ハードウェアスレッドBからハードウェアスレッドA1への指定の変更がなされる。同時に、実時間ビット信号REAL2(DOWN)が再び「1」になり、スレッド浪費カウンタWCN1のカウント値は、カウントダウンにより1から0になる。
【0152】
図10から分かるように、再スケジューリングまたは復旧スケジューリングが発生した循環周期では、ハードウェアスレッドA1、A2、Bの実行回数の比が「1:1:2」ではない。しかし、サイクルT1〜T12からなる3つの循環周期を通してみれば、ハードウェアスレッドA1、A2、Bの実行回数の比は、設計通りの「1:1:2」になっている。
【0153】
<第3の実施の形態>
第3の実施の形態も、プロセッサシステムである。なお、第3の実施の形態にかかるプロセッサシステムは、第1の実施の形態のプロセッサシステム100に対して、スケジューラ200の代わりにスケジューラ400を設けた点を除き、プロセッサシステム100と同様である。そのため、該第3の実施の形態にプロセッサシステムについては、スケジューラ400のみを説明する。また、説明に際して、プロセッサシステム100における複数のハードウェアスレッドと同様の例を用いる。
【0154】
スケジューラ400は、第2の実施の形態のスケジューラ300と同様に、スレッドスケジューリングと、再スケジューリングに加え、さらに、浪費回数のカウント及び復旧スケジューリングを行う。但し、スケジューラ300がハードウェアスレッドA毎に浪費回数をカウントするに対して、スケジューラ400は、第1のグループ全体に対して浪費回数のカウントを行う。従って、スケジューラ400が行う復旧スケジューリングも、スケジューラ300が行う復旧スケジューリングと異なる。以下において、スケジューラ400がカウントする浪費回数を「グループ浪費回数」という。
【0155】
スケジューラ400は、第1のグループ内のいずれか1つのハードウェアスレッドについて再スケジューリングがなされると、グループ浪費回数をカウントアップする。
【0156】
前記したように、再スケジューリングは、スレッドスケジューリングにより第1のグループのハードウェアスレッドが指定されるものの、該ハードウェアスレッドが実行不可であるときに、該ハードウェアスレッドの代わりに第2のグループのハードウェアスレッド(B)を指定し直す処理である。すなわち、グループ浪費回数は、第1のグループのいずれか1つのハードウェアスレッドが実行不可であるときにスレッドスケジューリングにより該ハードウェアスレッドが指定される回数になる。
【0157】
スケジューラ400は、グループ浪費回数に基づいて、復旧スケジューリングを行う。具体的には、スレッドスケジューリングにより第2のグループのハードウェアスレッドが指定されたときに、スケジューラ400は、グループ浪費回数が「1」以上であるか否かを確認する。
【0158】
グループ浪費回数が1以上であり、かつ、第1のグループ内に実行可能なハードウェアスレッドがある場合に、スケジューラ400は、スレッドスケジューリングにより指定されたハードウェアスレッドBの代わりに、第1のグループ内の、実行可能なハードウェアスレッドを指定し直す。同時に、グループ浪費回数をカウントダウンする。
【0159】
一方、グループ浪費回数が0であり、または、グループ浪費回数が1以上であるものの、実行可能なハードウェアスレッドAが無い場合には、スケジューラ400は、復旧スケジューリングをしない。すなわち、この場合、スケジューラ400は、スレッドスケジューリングにより指定されたハードウェアスレッドBを指定する。
【0160】
つまり、スケジューラ400は、原則として、予め設定されたスケジュールを繰り返すスレッドスケジューリングを行う。そして、スレッドスケジューリングによりハードウェアスレッドAを指定するものの、該ハードウェアスレッドAが実行不能であるときに、該ハードウェアスレッドAの代わりに、ハードウェアスレッドBを指定し直す再スケジューリングを行うと共に、グループ浪費回数をカウントアップする。
【0161】
また、スレッドスケジューリングによりハードウェアスレッドBが指定されたときに、グループ浪費回数が1以上であり、かつ、実行可能なハードウェアスレッドAがある場合に、スケジューラ400は、実行可能な該ハードウェアスレッドAを、スレッドスケジューリングにより指定されたハードウェアスレッドBの代わりに指定し直す復旧スケジューリングを行うと共に、グループ浪費回数をカウントダウンする。
【0162】
このように、スケジューラ400は、第1の実施の形態のスケジューラ200と同様に、予め設定したスケジュール通りのスケジューリングと、マルチスレッドプロセッサ130の性能低下の回避との両方において、ベストエフォートを実現する。
【0163】
さらに、スケジューラ400は、第1のグループに対してグループ浪費回数をカウントし、グループ浪費回数に基づいて復旧スケジューリングを行うことにより、複数の循環周期を通してみた際に、第1のグループと第2のグループ間でのハードウェアスレッドの実行の割合を、設計者の設定に近付けることができる。
【0164】
図11は、スケジューラ400の回路構成の一例を示す。スケジューラ400は、
図2に示すスケジューラ200に対して、さらに、第2の復旧スケジューラ420を設けた点を除き、スケジューラ200と同様である。ここで、第2の復旧スケジューラ420に重点をおいて説明する。なお、スケジューラ400では、
図2に示すスケジューラ200における第1のスケジューラ210が出力する第1の番号SN1と、再スケジューラ220が出力する実時間ビット信号REAL0の代わりに、セレクタ250には、第2の復旧スケジューラ420が出力する第4の番号SN4と実時間ビット信号REAL4が入力される。
【0165】
図12は、第2の復旧スケジューラ420の回路構成の一例を示す。図示のように、該例では、第2の復旧スケジューラ420は、インバータ321、AND回路322、OR回路325、カウンタ更新部421、グループ浪費カウンタ422、復旧スケジューラコア424を備える。
【0166】
インバータ321、AND回路322、OR回路325は、第1の復旧スケジューラ320に含まれる同一の符号のものと夫々同様である。
【0167】
カウンタ更新部421は、グループ浪費カウンタ422のカウント動作を制御するものである。グループ浪費カウンタ422は、カウンタ更新部421の制御に従って第1のグループに対して、グループ浪費回数をカウントする。
【0168】
カウントアップの制御に関して、AND回路322からの信号UPが「1」であれば、カウンタ更新部421は、グループ浪費カウンタ422にカウントアップさせる制御信号を出力する。一方、信号UPが「0」であれば、カウンタ更新部421は、グループ浪費カウンタ422にカウントアップさせない。
カウントダウンの制御に関しては、後述する。
【0169】
復旧スケジューラコア424は、グループ浪費カウンタ422のカウント値、第1のスケジューラ210からの実時間ビット信号REAL0と第1の番号SN1、スレッド状態管理ユニット230からの各スレッドの状態を示す信号が入力され、実時間ビット信号REAL2と第4の番号SN4を出力する。
【0170】
具体的には、復旧スケジューラコア424は、実時間ビット信号REAL0が「0」であり、かつ、グループ浪費カウンタ422のカウント値(グループ浪費回数)が1以上であり、かつ、第1のグループ内に実行可能なハードウェアスレッドがあるときにのみ、第1のグループ内の実行可能な該ハードウェアスレッドの番号を第4の番号SN4として出力すると共に、実時間ビット信号REAL2に「1」を出力する。それ以外の場合には、復旧スケジューラコア424は、第1の番号SN1をそのまま第4の番号SN4として出力し、実時間ビット信号REAL2に「0」を出力する。
【0171】
なお、第1のグループ内に実行可能なハードウェアスレッドが複数ある場合には、復旧スケジューラコア424は、例えば、第1のグループ内のハードウェアスレッドに対して予め設定された優先順位で、第4の番号SN4に対応するハードウェアスレッドを選択すればよい。勿論、この場合におけるハードウェアスレッドの選択手法は、この例に限られることが無い。
【0172】
復旧スケジューラコア424から出力された実時間ビット信号REAL2は、カウンタ更新部421とOR回路325に入力される。また、第4の番号SN4は、セレクタ250とカウンタ更新部421に入力される。
【0173】
カウンタ更新部421は、実時間ビット信号REAL2をカウントダウンの制御に用いる。カウントダウンの制御に関して、カウンタ更新部421は、実時間ビット信号REAL2すなわち信号DOWNが「1」であるときにのみ、グループ浪費カウンタ422をカウントダウンさせる。
【0174】
OR回路325は、再スケジューラ220からの実時間ビット信号REAL1と、復旧スケジューラコア424からの実時間ビット信号REAL2の論理和(実時間ビット信号REAL4)をセレクタ250に出力する。
【0175】
セレクタ250は、スレッド選択信号TSELとして、実時間ビット信号REAL4が「1」であるときに第4の番号SN4を、実時間ビット信号REAL4が「0」であるときに第2のスケジューラ240からの第2の番号SN2を選択する。
【0176】
図13を参照して、本実施の形態におけるスケジューラ400によるスケジューリングの例を説明する。なお、
図13において、
図7と同様に、スレッド選択信号TSELについて、細線枠はスレッドスケジューリングの結果を示し、実線の太線枠は、再スケジューリングの結果を示す。さらに、点線の太線枠は、復旧スケジューリングの結果を示す。なお、スケジューラ400では、ハードウェアスレッドA毎の浪費回数がカウントされないが、スケジューラ400がカウントするグループ浪費回数と比較するために、
図13において、点線の細線枠によりハードウェアスレッドA毎の浪費回数を示している。
【0177】
図13に示すように、第1の循環周期(サイクルT1〜T4)において、スレッドスケジューリングにより、ハードウェアスレッドA1、ハードウェアスレッドB、ハードウェアスレッドA2、ハードウェアスレッドBの順に夫々のハードウェアスレッドが指定され、実行される。
【0178】
サイクルT5では、スロットSLT0が選択され、第1のスケジューラ210から実時間ビット信号REAL0と第1の番号SN1として、「1」と「0」(A1)が出力される。しかし、ハードウェアスレッドA1が実行不可であるため、再スケジューリングが行われ、セレクタ250から、スレッド選択信号TSELとして、ハードウェアスレッドBを示す第2の番号SN2が出力される。
【0179】
また、該サイクルにおいて、再スケジューリングがなされたため、信号UPが「1」となり、グループ浪費カウンタ422のカウント値(グループ浪費回数)は、カウントアップにより0から1になる。
【0180】
第2の循環周期のサイクルT6〜T8までは、スレッドスケジューリングにより、ハードウェアスレッドB、ハードウェアスレッドA2、ハードウェアスレッドBが順次指定される。
【0181】
サイクルT6において、スレッドスケジューリングによりハードウェアスレッドBが指定され、グループ浪費回数が1である。しかし、ハードウェアスレッドA1とハードウェアスレッドA2のいずれも実行不可であるため、復旧スケジューリングはなされない。
【0182】
サイクルT7において、スロットSLT2が選択され、第1の番号SN1がハードウェらスレッドA2を示すが、ハードウェアスレッドA2が実行不可であるため、再スケジューリングが行われる。その結果、セレクタ250から、スレッド選択信号TSELとして、ハードウェアスレッドBを示す第2の番号SN2が出力され、信号UPが再び「1」になり、グループ浪費回数は、1から2になる。
【0183】
なお、サイクルT8において、スレッドスケジューリングによりハードウェアスレッドBが指定され、グループ浪費回数が2である。しかし、ハードウェアスレッドA1とハードウェアスレッドA2のいずれも実行不可であるため、復旧スケジューリングはなされない。
【0184】
第3の循環周期に入り、サイクルT9において、スレッドスケジューリングによりハードウェアスレッドA1が指定される。しかし、ハードウェアスレッドA1が相変わらず実行不可であるため、再スケジューリングがなされ、ハードウェアスレッドA1からハードウェアスレッドBへの指定の変更が行われ、信号UPが再び「1」になり、グループ浪費回数は、2から3になる。
【0185】
サイクルT10において、スレッドスケジューリングによりハードウェアスレッドBが指定される。しかし、グループ浪費回数が「3」であり、かつ、ハードウェアスレッドA1が実行可能になったため、復旧スケジューリングがなされ、ハードウェアスレッドBからハードウェアスレッドA1への指定の変更がなされる。同時に、実時間ビット信号REAL2(DOWN)が「1」となり、グループ浪費回数は、3から2になる。
【0186】
サイクルT11において、スレッドスケジューリングによりハードウェアスレッドA2が指定される。しかし、ハードウェアスレッドA2が相変わらず実行不可であるため、再スケジューリングがなされ、ハードウェアスレッドA2からハードウェアスレッドBへの指定の変更が行われ、信号UPが再び「1」になり、グループ浪費回数は、2から3になる。
【0187】
サイクルT12において、スレッドスケジューリングによりハードウェアスレッドBが指定される。しかし、グループ浪費回数が「3」であり、かつ、ハードウェアスレッドA1が実行可能になったため、復旧スケジューリングがなされ、ハードウェアスレッドBからハードウェアスレッドA1への指定の変更がなされる。同時に、実時間ビット信号REAL2(DOWN)が再び「1」になり、グループ浪費回数は、3から2になる。
【0188】
このようにして、スケジューラ400によれば、再スケジューリングまたは復旧スケジューリングが発生した循環周期では、ハードウェアスレッドA、Bの実行回数の比が設計通りの「2:2」ではない。しかし、複数の循環周期を通してみれば、ハードウェアスレッドA、Bの実行回数の比は、設計通りの「2:2」になる。
【0189】
<第4の実施の形態>
第4の実施の形態の前に、まず、
図14を参照して、
図8に示すスケジューラ300によるスケジューリングの別の一例を示す。
【0190】
図14に示す例は、サイクルT9〜T12において、ハードウェアスレッドA2が実行不可になり、サイクルT11〜T12において、実行可能なハードウェアスレッドBがない点において、
図10が示す例と異なる。
【0191】
サイクルT1〜T9までは、
図8に示すスケジューラ300により、
図10に示す例と同様なスケジューリングがなされる。
【0192】
サイクルT10において、スレットスケジューリングによりハードウェアスレッドBが指定されるが、ハードウェアスレッドA1の浪費回数が2であり、かつ、ハードウェアスレッドA1が実行可能であるため、復旧スケジューリングにより、ハードウェアスレッドBの代わりにハードウェアスレッドA1が指定される。同時に、ハードウェアスレッドA1の浪費回数は、2から1になる。
【0193】
サイクルT11において、スレッドスケジューリングによりハードウェアスレッドA2が指定されるものの、ハードウェアスレッドA2が実行不可であるため、再スケジューリングによりハードウェアスレッドBが指定される。同時に、ハードウェアスレッドA2の浪費回数は、0から1になる。
【0194】
しかし、該サイクルでは、実行可能なハードウェアスレッドBがない。従って、「ID」ステージの実行スロットが空になってしまう。
【0195】
サイクルT12において、スレッドスケジューリングによりハードウェアスレッドBが指定されるが、実行可能なハードウェアスレッドA1の浪費回数が1であるため、復旧スケジューリングにより、ハードウェアスレッドA1が指定される。同時に、ハードウェアスレッドA1の浪費回数は、1から0になる。
【0196】
図14から分かるように、実行可能なハードウェアスレッドBが無いときに再スケジューリングをしたことに起因して、実行スロットに空が生じる。
【0197】
第4の実施の形態のスケジューラは、
図8に示すスケジューラ300に対して、復旧スケジューリングとして、第2のグループ内のハードウェアスレッドの実行時間を第1のグループ内のハードウェアスレッドに融通すると共に、第1のグループ内のハードウェアスレッド同士間でも、実行時間を融通するように変更したものである。
【0198】
つまり、第4の実施の形態のスケジューラは、原則として、予め設定されたスケジュールを繰り返すスレッドスケジューリングを行う。そして、スレッドスケジューリングによりハードウェアスレッドAを指定するものの、該ハードウェアスレッドAが実行不能であるときに、他のハードウェアスレッドAの浪費回数と状態に応じて、再スケジューリングと復旧スケジューリングのいずれか一方を行う。
【0199】
例えば、スレッドスケジューリングにより、実行不可であるハードウェアスレッドA1が指定されたとする。この場合、第4の実施の形態のスケジューラは、ハードウェアスレッドA2の浪費回数が0であるときには、再スケジューリングを行い、ハードウェアスレッドBを指定する。一方、ハードウェアスレッドA2の浪費回数が1以上であり、かつ、ハードウェアスレッドA2が実行可能であるときには、第4の実施の形態のスケジューラは、ハードウェアスレッドA2に対して復旧スケジューリングを行い、ハードウェアスレッドA2を指定する。
【0200】
なお、スレッドスケジューリングによりハードウェアスレッドBが指定されたときは、スケジューラ300と同様に、浪費回数が1以上であるハードウェアスレッドAがあり、かつ、該ハードウェアスレッドAが実行可能であれば、復旧スケジューリングを行い、該ハードウェアスレッドAを、スレッドスケジューリングにより指定されたハードウェアスレッドBの代わりに指定する。
【0201】
なお、第4の実施の形態のスケジューラは、スケジューラ300の回路構成を変更することで容易に実現することができるため、ここで、第4の実施の形態のスケジューラの具体的な回路構成の例の説明を省略する。
【0202】
図15は、スケジューラ300によるスケジューリングの例と比較するための、第4の実施の形態のスケジューラによるスケジューリングの例を示す。
【0203】
図15に示すように、サイクルT10までは、本第4の実施の形態のスケジューラによるスケジューリングの結果と、スケジューラ300によるスケジューリングの結果が同様である。
【0204】
サイクルT11において、スケジューラ300は、再スケジューリングを行い、ハードウェアスレッドA2の代わりにハードウェアスレッドBを指定する。対して、第4の実施の形態のスケジューラは、ハードウェアスレッドA1の浪費回数が1であり、かつ、ハードウェアスレッドA1が実行可能であるため、再スケジューリングの代わりに復旧スケジューリングを行い、ハードウェアスレッドA2の代わりにハードウェアスレッドA1を指定する。
【0205】
その結果、スケジューラ300より、浪費回数が1以上のハードウェアスレッドAに対して、早めに復旧スケジューリングを行うことができる。
【0206】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の増減、変更が可能であることはいうまでもない。
【0207】
スレッドスケジューリングは、設計者が設計した通りのスケジューリングである。そのため、再スケジューリングの回数が多いことは、スケジューリングが設計から頻繁に外れることを意味する。そのため、例えば、
図8に示すスケジューラ300に対して、いずれか1つのハードウェアスレッドAの浪費回数(スレッド浪費カウンタWCN1のカウント値とスレッド浪費カウンタWCN2のカウント値のいずれか一方)、または、全てのハードウェアスレッドAの浪費回数の総和が閾値に到達したときに、外部に警告を出す機能を追加することが好ましい。このような警告がなされることにより、設計者は、異常に気付き、設計の見直しなどが可能になる。なお、警告に関しては、例えばCPUに対して割込みを発生させるなどの手法が考えられる。
【0208】
勿論、
図11に示すスケジューラ400に対しても同様に、グループ浪費回数(グループ浪費カウンタ422のカウント値)が閾値に到達したときに、外部に警告を出す機能を追加してもよい。
【0209】
また、再スケジューリングが必要な状況、すなわちスレッドスケジューリングにより指定された第1のグループのハードウェアスレッドが実行不可である状況は、該ハードウェアスレッドがI/O待ちなどで予期した時間内でそのステージの処理を完了しない場合に発生する。マルチスレッドプロセッサにおけるハードウェアスレッドの数が少ないなどのときに、このような状況をある程度予想することができる。そのため、スレッドスケジューリングの元となるスケジュールを設計する際に、このような状況の発生を予想し、I/O待ちの時間などを考慮したスケジュールを設計することも可能である。このような場合にも対応可能になるように、例えば、スケジューラ300のスレッド浪費カウンタWCN1とスレッド浪費カウンタWCN2や、スケジューラ400のグループ浪費カウンタ422を、カウント動作の許可と禁止を、対象プログラムの動作前に動的に変更可能であるように構成することが好ましい。
【0210】
こうすることにより、動作する回路を減らすことができ、ひいては処理速度を速め、消費電力を削減することができる。
【0211】
なお、上記警告機能のための閾値の設定や、浪費カウンタまたはグループ浪費カウンタの動作を禁止するか否かの設定を可能にするためには、例えば、それらの用途に応じたレジスタを設ければよい。
【0212】
また、上述した各実施の形態において、例として、スレッドのグループ分けが、実時間スレッドであるか否かに応じてなされているが、スレッドのグループ分けの手法がこの例に限定されないことは、言うまでも無い。