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