発明の実施の形態1
以下、本発明を適用した具体的な実施の形態1について、図面を参照しながら詳細に説明する。図1に本実施の形態にかかるマルチスレッドプロセッサ1を含むプロセッサシステムのブロック図を示す。本実施の形態にかかるプロセッサシステムでは、システムバスを介してマルチスレッドプロセッサ1とメモリ2が接続される。なお、図示はしていないが、システムバスには、入出力インタフェースなどの他の回路も接続されるものとする。
まず、本実施の形態にかかるマルチスレッドプロセッサ1について説明する。マルチスレッドプロセッサ1は、複数のハードウェアスレッドを備える。ハードウェアスレッドは、スレッドプログラムカウンタ、命令メモリ、汎用レジスタ、及び制御レジスタ(本実施の形態ではパイプライン制御回路16に内蔵されるものとする)等の回路群により構成される。そして、ハードウェアスレッドとは、マルチスレッドプロセッサ1に内蔵されるスレッドプログラムカウンタにより出力される命令フェッチアドレスに従って命令メモリから読み出される一連の命令群により構成される命令流を生成する系のことを言う。つまり、1つのハードウェアスレッドにより生成される命令流に含まれる命令は、互いに関連性の高い命令である。本実施の形態では、マルチスレッドプロセッサ1が複数のスレッドプログラムカウンタを備えることでその数に応じた数のハードウェアスレッドが実装される。以下では、マルチスレッドプロセッサ1について更に詳細に説明する。
図1に示すようにマルチスレッドプロセッサ1は、演算回路10、割り込みコントローラ11、PC生成回路12、スレッドプログラムカウンタTPC0〜TPC3、セレクタ13、18、命令メモリ14、命令バッファ15、パイプライン制御回路16、命令フェッチコントローラ17、スレッドスケジューラ19を有する。
演算回路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が出力する演算結果を格納する。なお、実行ユニット22が有する実行ステージの数は、少なくとも上記ハードウェアスレッドの数よりも多いものとする。
割り込みコントローラ11は、割り込み要求信号を受けて、マルチスレッドプロセッサ1内に割り込み処理の実行を指示する割り込み指示信号を出力する。より具体的には、割り込みコントローラ11は、割り込み要求信号を受信すると、割り込み要因や割り込み処理の優先度等を判定し、当該割り込み要因に関連した処理を行うようにPC生成回路12、パイプライン制御回路16、スレッドスケジューラ19に割り込み処理の実行を指示する。この割り込み要求は、マルチスレッドプロセッサ1が出力するものの他に、マルチスレッドプロセッサ1以外の回路からも出力される。
PC生成回路12は、システムバスを介して入力される新たなプログラム命令信号、割り込みコントローラ11が出力する割り込み指示信号及び実行ユニット22における処理に基づき出力される分岐指示信号を受けて、プログラムカウント更新値を生成する。そして、PC生成回路12は、プログラムカウント更新値をスレッドプログラムカウンタTPC0〜TPC3のいずれかに与える。なお、PC生成回路12は、生成したプログラムカウント更新値をいずれのスレッドプログラムカウンタに与えるかを判断する機能も有する。
スレッドプログラムカウンタTPC0〜TPC3は、処理すべき命令が格納される命令メモリ14のアドレス(このアドレスを命令フェッチアドレスIMaddと称す)を生成する。また、スレッドプログラムカウンタTPC0〜TPC3は、PC生成回路12からプログラムカウント更新値が与えられた場合は、命令フェッチアドレスIMaddをプログラムカウント更新値に応じて更新する。一方、スレッドプログラムカウンタTPC0〜TPC3は、プログラムカウント更新値の入力がない場合は、アドレスを昇順に計算し、連続する次の命令フェッチアドレスを算出する。なお、図1においては、スレッドプログラムカウンタの数を4つとしたが、プログラムスレッドカウンタの数は、マルチスレッドプロセッサの仕様に応じて任意に設定することができる。
セレクタ13は、命令フェッチコントローラが出力するスレッド指定信号に応じてスレッドプログラムカウンタTPC0〜TPC3のうちいずれか1つを選択し、選択したスレッドプログラムカウンタが出力する命令フェッチアドレスIMaddを出力する。なお、図1のセレクタ13において入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
命令メモリ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つのバッファ内において領域分割されたものでも良く、分離された領域に形成されたものであっても良い。
パイプライン制御回路16は、命令バッファ15の先頭に格納された命令と実行ユニット22において実行されている命令とをモニタする。そして、パイプライン制御回路16は、割り込みコントローラ11から割り込み指示信号が入力された場合には、割り込み処理に関係するハードウェアスレッドに属する命令を廃棄する指示を命令バッファ15及び実行ユニット22に対して行う。
命令フェッチコントローラ17は、命令バッファ16に格納されている命令の個数に応じていずれのハードウェアスレッドに属する命令をフェッチすべきかを判断し、その判断結果に基づきスレッド指定信号を出力する。例えば、命令フェッチコントローラ17は、命令バッファ領域BUF0に格納される命令キューの数が他の命令バッファ領域に格納される命令キューの数よりも少なければ、0番のハードウェアスレッドに属する命令をフェッチすべきと判断し、0番のハードウェアスレッドを示すスレッド指定信号を出力する。これにより、セレクタ13は、スレッドプログラムカウンタTPC0を選択する。なお、命令フェッチコントローラ17は、ラウンドロビン方式による手順で選択するハードウェアスレッドを決定しても良い。
セレクタ18は、スレッドスケジューラ19が出力するスレッド選択信号に応じて命令バッファ領域BUF0〜BUF3のいずれか1つを選択し、選択した命令バッファ領域から読み出した命令を演算回路10に出力する。つまり、セレクタ18は、スレッド選択信号TSELに応じて複数のハードウェアスレッドから1つのハードウェアスレッドを選択し、選択したハードウェアスレッドが出力する命令を演算回路10に出力する。なお、セレクタ18においても、入力端子に0〜4の数字を付したが、この数字は、ハードウェアスレッドの番号を示すものである。
スレッドスケジューラ19は、予め設定されたスケジュールに従って、複数のハードウェアスレッドのうち次の実行サイクルにおいて実行される1つのハードウェアスレッドを指定するスレッド選択信号TSELを出力する。つまり、スレッドスケジューラ19は、複数のハードウェアスレッドをどのような順序で処理するかをスケジュールにより管理し、そのスケジュールに沿った順序でハードウェアスレッドにより生成される命令が実行されるようにスレッド選択信号TSELを出力する。なお、スレッドスケジューラ19は、割り込みコントローラ11からの割り込み指示信号を入力すると、その割り込み指示信号に応じた割り込み処理用のスケジュールを選択し、その割り込み処理用のスケジュールに基づいたスレッド選択信号を出力する。また、本実施の形態にかかるマルチスレッドプロセッサ1では、このスケジュールをマルチスレッドプロセッサ1の起動の直後に実行される管理プログラムにより設定する。
本実施の形態にかかるマルチスレッドプロセッサ1では、特にスレッドスケジューラ19において行われるハードウェアスレッドのスケジューリング方法に特徴を有する。以下では、スレッドスケジューラ19及びそのスケジューリングの方法について説明を行う。以下に、スレッドスケジューラ19について、図面を参照しながら詳細に説明する。図2にスレッドスケジューラ19のブロック図を示す。図2に示すように、スレッドスケジューラ19(第1のスケジューラ)は、スレッド制御レジスタ部101と、スケジュールレジスタ選択部102と、セレクタ103と、カウンタ111と、カウンタ上限レジスタ112と、一致比較回路113と、割り込み制御部120とを有する。
スレッド制御レジスタ部101は、スレッドスケジュールレジスタSKR1(第1の記憶部)、SKR2(第2の記憶部)を有する。スレッドスケジュールレジスタSKR1、SKR2は、それぞれ複数のスロットを備える。また、スレッドスケジュールレジスタSKR1、SKR2は、それぞれスケジュールパターンが格納されている。図3、図4にスレッドスケジュールレジスタSKR1、SKR2が格納するそれぞれのスケジュールパターンの模式図を示す。なお、便宜上、符号「SKR1」「SKR2」は、各スレッドスケジュールレジスタ名を示すと同時に、そのスレッドスケジュールレジスタが格納するスケジュールパターンを示すものとする。以後、必要に応じて他のスレッドスケジュールレジスタ、スケジュールパターンについても同様とする。
図3に示すように、スレッドスケジュールレジスタSKR1は、符号SLT1〜SLTnで示すn個(nは2以上の整数)のスロットを有する。各スロットには、それぞれ上述したハードウェアスレッドのスレッド番号が格納されている。例えば、本例では、スロットSLT1にはハードウェアスレッド番号「0」、スロットSLT2にはハードウェアスレッド番号「1」、スロットSLT3にはハードウェアスレッド番号「0」、スロットSLT4にはハードウェアスレッド番号「2」、・・・が格納されている。これらのスロットSLT1〜SLTnに格納されたハードウェアスレッド番号が、上述したハードウェアスレッドのスケジュールパターン(スケジュールSKR1(第1のスケジュール))となる。なお、本例におけるスケジュールSKR1に占める、ハードウェアスレッド番号「0」の割合は40%、ハードウェアスレッド番号「1」の割合は55%、ハードウェアスレッド番号「2」の割合は5%とする。
また、図4に示すように、スレッドスケジュールレジスタSKR2も、スレッドスケジュールレジスタSKR1と同様、符号SLT1〜SLTnで示すn個のスロットを有する。但し、スレッドスケジュールレジスタSKR2は、スロットSLT4にハードウェアスレッド番号「2」を格納する以外は、他のスロット全てハードウェアスレッド番号「0」を格納する。これらのスロットSLT1〜SLTnに格納されたハードウェアスレッド番号が、スケジュールパターン(スケジュールSKR2(第2のスケジュール))となる。なお、本例におけるスケジュールSKR2に占める、ハードウェアスレッド番号「0」の割合は95%、ハードウェアスレッド番号「1」の割合は0%、ハードウェアスレッド番号「2」の割合は、スケジュールSKR1と同様5%とする。
ここで、スケジュールSKR1に設定されているスケジュールパターンは、マルチスレッドプロセッサ1が通常動作を行う場合(第1の状態)のスケジュールパターンとする。また、スケジュールSKR2に設定されているスケジュールパターンは、マルチスレッドプロセッサ1が割り込み処理動作を行う場合(第2の状態)のスケジュールパターンとする。
なお、スケジュールSKR1、SKR2に設定されているスケジュールパターンは、マルチスレッドプロセッサ1の起動時に実行される管理プログラムにより設定される。また、管理プログラムは、メモリ2からこれら設定値を読み込み、システムバスを通してスケジュールパターンを書き込むものとする。更に、スケジュールパターンは、システムバスを通して書き換えることも可能である。
スケジュールレジスタ選択部102は、割り込み制御部120からの制御信号に応じてスレッド制御レジスタ部101のスレッドスケジュールレジスタSKR1、SKR2のうち一方を選択し、選択したスレッドスケジュールレジスタとセレクタ103を接続する。よって、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1、SKR2のうち選択した一方に設定されたスケジュールパターンをセレクタ103に出力する。
カウンタ111は、所定の間隔でカウント値CNTを更新する。より具体的には、カウンタ111は、図示しないマルチスレッドプロセッサ1の動作クロックに同期してカウント値CNTをカウントアップする。また、カウンタ111のカウント値CNTは、システムバスからのリセット信号によりリセットされる。
カウンタ上限レジスタ112は、カウンタ111のカウント値CNTの上限値を定めるカウント最大値CNTMを格納する。このカウント最大値CNTMには、0〜kまでの任意の数が設定される(kは0以上、n−1以下の整数)。また、カウント最大値CNTMの設定は、システムバスから設定可能である。
一致比較回路112は、カウント値CNTとカウント最大値CNTMとを比較し、カウント値CNTとカウント最大値CNTMが一致した場合に、カウンタ111のカウント値をリセットするリセット信号RSTを出力する。つまり、カウンタ111は、所定の周期でカウント値CNTを初期化しながら、カウントアップ動作を繰り返すことで、循環的に値が更新されるカウント値CNTを出力する。
セレクタ103は、スケジュールレジスタ選択部102が選択するスレッドスケジュールレジスタのスロットの1つを、カウント値CNTに応じて選択する。そして、その選択したスロットに格納されているスレッド番号を、スレッド選択信号TSELとして出力する。このスレッド選択信号TSELにおいて示されるスレッド番号が次の実行サイクルにおいて実行されるハードウェアスレッドの番号となる。
以下に、このセレクタ103が出力するスレッド選択信号TSELについてより具体的に説明する。なお、この説明では、スケジュールレジスタ選択部102がスレッドスケジュールレジスタSKR1を選択した場合を想定する。図5に、セレクタ103が出力するスレッド選択信号TSELとカウンタ111のカウント値CNTとの関係を示す表を示す。なお、以下の説明では、カウンタ111のカウント値CNTの初期値を「0」、カウント上限値レジスタの値CNTMを「4」とする。
図5に示すように、時刻t1では、カウンタ111のカウント値CNTが「0」である。よって、セレクタ103は、スロットSLT1に格納されているハードウェアスレッド番号「0」をスレッド選択信号TSELとして出力する。次に、時刻t2では、カウンタ111のカウント値CNTが「1」である。よって、セレクタ103は、スロットSLT2に格納されているハードウェアスレッド番号「1」をスレッド選択信号TSELとして出力する。時刻t3では、カウンタ111のカウント値CNTが「2」である。よって、セレクタ103は、スロットSLT3に格納されているハードウェアスレッド番号「0」をスレッド選択信号TSELとして出力する。時刻t4では、カウンタ111のカウント値CNTが「3」である。よって、セレクタ103は、スロットSLT4に格納されているハードウェアスレッド番号「2」をスレッド選択信号TSELとして出力する。時刻t5では、カウンタ111のカウント値CNTが「4」である。よって、セレクタ103は、スロットSLT5に格納されているハードウェアスレッド番号「1」をスレッド選択信号TSELとして出力する。
このように、時刻t1からt5までカウンタ111のカウント値CNTが1ずつ増加し、そのカウント値に応じたスロットが選択され、その選択スロットに格納されているハードウェアスレッド番号がスレッド選択信号TSELとして出力される。但し、時刻t5でカウント値CNTが「4」に達するため、カウンタ111のカウント値CNTがリセットされ「0」となる。このため、時刻t6では、カウンタ111のカウント値CNTが「0」となる。よって、時刻t6では、セレクタ103は、再び時刻t1と同様の動作を行う。よって、時刻t6以降、セレクタ103は、時刻t1〜t5と同様の動作を繰り返し行う。
図6に上述した動作を説明するタイミングチャートを示す。なお、図5と図6の時刻は同じものを指している。まず、時刻t1では上述のようにハードウェアスレッド番号「0」が、セレクタ103からスレッド選択信号TSELとして出力される。このため、図6に示すように、このスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド「0」に対応した命令(図6中の「命令0」)を演算回路10に出力する。次に、時刻t2では、ハードウェアスレッド番号「1」が、セレクタ103からスレッド選択信号TSELとして出力される。このため、このスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド「1」に対応した「命令0」を演算回路10に出力する。
更に、時刻t3では、ハードウェアスレッド番号「1」が、セレクタ103からスレッド選択信号TSELとして出力される。このため、このスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド「0」に対応した「命令1」を演算回路10に出力する。時刻t4では、ハードウェアスレッド番号「2」が、セレクタ103からスレッド選択信号TSELとして出力される。このため、このスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド「2」に対応した「命令0」を演算回路10に出力する。時刻t5では、ハードウェアスレッド番号「1」が、セレクタ103からスレッド選択信号TSELとして出力される。このため、このスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド「1」に対応した「命令0」を演算回路10に出力する。
このように、時刻t1〜t5において、セレクタ103からのスレッド選択信号TSELに応じてセレクタ18が、ハードウェアスレッド番号に対応した命令を演算回路10に出力する。更に、時刻t6以降は、時刻t1〜時刻t5までの動作を繰り返し行う。この時刻t1〜時刻t5までを1周期と考えると、1周期内において、このスケジュールにおけるマルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が40%、ハードウェアスレッド「1」が40%、ハードウェアスレッド「2」が20%となる。
なお、ハードウェアスレッド「0」でマルチスレッドプロセッサ1が実行するプログラムは、例えば、車内LANの通信データ処理に対応したものがある。また、ハードウェアスレッド「1」でマルチスレッドプロセッサ1が実行するプログラムは、例えば、映像データのエンコード処理に対応したものがある。更に、ハードウェアスレッド番号「2」でマルチスレッドプロセッサ1が実行するプログラムは、例えば、タイマー処理に対応したものがある。
割り込み制御部120は、割り込みハンドラ121と、スケジュール選択回路122とを有する。割り込みハンドラ121は、割り込みコントローラ11からの割り込み指示信号を入力すると、その割り込み指示信号に応じて、マルチスレッドプロセッサ1の動作モードを通常動作から割り込み処理動作に切り替えるよう判定する。
スケジュール選択回路122は、割り込みハンドラ121が判定した結果により、スケジュールレジスタ選択部102にスレッドスケジュールレジスタSKR1、SKR2のどちらか一方を選択させるための制御信号を出力する。
続いて、スレッドスケジューラ19を用いたマルチスレッドプロセッサ1の動作について説明する。図7に、マルチスレッドプロセッサ1の電源投入時から通常処理の開始までの動作の手順を示すフローチャートを示す。図7に示すように、マルチスレッドプロセッサ1は、電源が投入されるとまずハードウェアリセットにより回路の状態を初期化する(ステップS1)。続いて、マルチスレッドプロセッサ1は、シングルスレッドモードにおいて動作を開始する(ステップS2)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0、命令メモリ14、命令バッファ領域BUF0が活性化され、他のスレッドプログラムカウンタTPC1〜TPC3及び命令バッファ領域BUF1〜BUF3はスタンバイ状態のまま待機する。
そして、マルチスレッドプロセッサ1は、管理プログラムをメモリ2又は図示しない他の記憶装置から読み出し、管理プログラムを実行する(ステップS3)。その後、管理プログラムに従って、マルチスレッドプロセッサ1は、スレッド制御レジスタ部101のスレッドスケジュールレジスタSKR1、SKR2にスケジュールパターンを設定する(ステップS4)。更に、割り込み制御部120からの制御信号に応じてスケジュールレジスタ選択部102が、通常動作用のスケジュールパターンが格納されているスレッドスケジュールレジスタSKR1を選択する(ステップS5)。
カウンタ111のカウント値CNTの初期化(ステップS6)、カウンタ上限値レジスタ112のカウント最大値CNTMの設定(ステップS7)を行う。これらの各種レジスタの設定が完了すると、マルチスレッドプロセッサ1はマルチスレッドモードにて動作を開始する(ステップS8)。このシングルスレッドモードでは、例えば、スレッドプログラムカウンタTPC0〜TCP3、命令メモリ14、命令バッファ領域BUF0〜BUF3が活性化される。そして、マルチスレッドプロセッサ1は、マルチスレッドモードにて通常動作を開始する。
次に、通常動作開始後のマルチスレッドプロセッサ1の動作について説明する。以下の説明では、特に、スレッドスケジューラ19の動作について説明する。図8にスケジュールレジスタ選択部102によるスレッドスケジュールレジスタSKR1、SKR2の選択動作を説明するための模式図を示す。
まず、図8に示すように、スケジュールレジスタ選択部102は、割り込み制御部120からの制御信号によりスレッドスケジュールレジスタSKR1もしくはSKR2に格納されたスケジュールパターンのどちらか一方を選択し、選択したスケジュールパターンをセレクタ103に出力する。ここで、通常動作時には、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1に格納されたスケジュールパターンを出力する。また、割り込み指示信号が割り込み制御部120に入力されると、割り込み制御部120から制御信号が出力される。この制御信号に応じてスケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1のスケジュールパターンからスレッドスケジュールレジスタSKR2のスケジュールパターンに切り替え、出力する。
図9に、このスケジュールレジスタ選択部102の選択動作により、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合の変化を説明するタイミングチャートを示す。但し、カウンタ111のカウント値CNTの初期値を「0」、カウント上限値レジスタの値CNTMを「n−1」とする。つまり、スレッドスケジュールレジスタSKR1もしくはSKR2のスケジュールパターンがマルチスレッドプロセッサ1により全て実行されるものとする。
図9に示すように、時刻t1以前では、マルチスレッドプロセッサ1は、通常動作を行っており、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1のスケジュールパターン(スケジュールSKR1)を出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が40%、ハードウェアスレッド「1」が55%、ハードウェアスレッド「2」が5%となっている。
なお、例えば、ハードウェアスレッド「0」が車内LANの通信データ処理、ハードウェアスレッド「1」が画像データのデコード処理、ハードウェアスレッド「2」がタイマー処理にかかるハードウェアスレッドであるものとする。
時刻t1で、例えば、プロセッサ外部からの車内LAN通信要求がある場合、通信データを処理するため、マルチスレッドプロセッサ1に対して割り込み処理要求が発生する。このため、割り込みコントローラ11からの割り込み指示信号を割り込み制御部120が入力する。よって、割り込み制御部120の制御信号により、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR2を選択し、スレッドスケジュールレジスタSKR2のスケジュールパターンを出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が95%、ハードウェアスレッド「1」が0%、ハードウェアスレッド「2」が5%となる。
時刻t2で、割り込み処理動作が終了し、マルチスレッドプロセッサ1が再び通常動作に復帰する。このため、割り込み制御部120の制御信号により、スケジュールレジスタ選択部102は、再びスレッドスケジュールレジスタSKR1を選択し、スレッドスケジュールレジスタSKR1のスケジュールパターンを出力する。よって、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、時刻t1以前と同様の値となる。
このように、本実施の形態1のマルチスレッドプロセッサ1は、スレッド制御レジスタ部101がスレッドスケジュールレジスタSKR1、SKR2を有している。このスレッドスケジュールレジスタSKR1、SKR2が有するスケジュールパターンには、マルチスレッドプロセッサ1の動作モード(通常動作、割り込み処理動作)に適したハードウェアスレッドの割合が設定されている。そして、割り込み処理要求が発生した場合には、割り込み制御部120により、自動的にこのスレッドスケジュールレジスタSKR1、SKR2のスケジュールパターンを切り替えることが可能である。このため、本実施の形態1のマルチスレッドプロセッサ1は、プロセッサの動作モードに応じた最適なスケジュールパターンが提供できるようになり、従来技術では困難であった割り込み応答時での自動的且つ即時のスケジュールパターンの切り替えが可能となる。
また、図9のハードウェアスレッド「2」のように、通常動作及び割り込み処理動作の両方の動作モードに関わらず、マルチスレッドプロセッサ1が実行するハードウェアスレッドを一定の割合で確保することができる。これは、各スレッドスケジュールレジスタのスロットに一定の割合でハードウェアスレッド番号「2」を格納しておくことで実現できる。このことにより、マルチスレッドプロセッサ1は、システムが利用するタイマー動作や、常時システムを監視するようなシステム監視処理等を、プロセッサの動作モードに関係なく行うことができる。よって、本実施の形態1では、システム維持等のため必ず実行しなければならない処理動作を、マルチスレッドプロセッサにおいても確実に確保することが可能となる。
発明の実施の形態2
以下、本発明を適用した具体的な実施の形態2について、図面を参照しながら詳細に説明する。この実施の形態2は、実施の形態1のスレッド制御レジスタ部101のスレッドスケジュールレジスタSKR2をスレッドスケジュールレジスタSKR3に変更した構成となっている。なお、スレッドスケジュールレジスタSKR3は、物理的なレジスタの変更ではなく、レジスタ内に格納されているスケジュールパターンがSKR2からSKR3に書き換えられる場合であってもよい。他の構成は、実施の形態1と同様なため、詳細な説明は省略する。
スレッドスケジュールレジスタSKR3は、マルチスレッドプロセッサ1が特定の固定的なスケジュール動作を行うためのハードウェアスレッド番号を有する。本例では、スレッドスケジュールレジスタSKR3が、ハードウェアスレッド番号「3」のみを有する。例えば、図10で示す模式図のように、スレッドスケジュールレジスタSKR3が、1つのスロットのみを有し、そのスロットにハードウェアスレッド番号「3」が格納されるようにしてもよい。なお、この場合、カウンタ111のカウント値CNTが「0」のみを出力するか、セレクタ103がカウント値CNTに関わらず、スロット1に格納された値のみを出力するようにする。また、スレッドスケジュールレジスタSKR3が備えるn個の全スロットにハードウェアスレッド番号「3」が格納されていてもよい。
図10に本実施の形態2におけるスケジュールレジスタ選択部102によるスレッドスケジュールレジスタSKR1、SKR3の選択動作を説明するための模式図を示す。図10に示すように、スケジュールレジスタ選択部102は、割り込み制御部120からの制御信号によりスレッドスケジュールレジスタSKR1もしくはSKR3に格納されたスケジュールパターンのどちらか一方を選択し、選択したスケジュールパターンをセレクタ103に出力する。ここで、通常動作時には、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1のスケジュールパターンを出力する。また、割り込み指示信号が割り込み制御部120に入力されると、割り込み制御部120からの制御信号によりスケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR3のスケジュールパターンを出力する。
図11に、スケジュールレジスタ選択部102の選択動作により、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合の変化を説明するタイミングチャートを示す。但し、カウンタ111のカウント値CNTの初期値を「0」、カウント上限値レジスタの値CNTMを「n−1」とする。つまり、スレッドスケジュールレジスタSKR1のスケジュールパターンがマルチスレッドプロセッサ1により全て実行されるものとする。
図11に示すように、時刻t1以前では、マルチスレッドプロセッサ1は、通常動作を行っており、スケジュールレジスタ選択部102は、実施の形態1と同様、スレッドスケジュールレジスタSKR1のスケジュールパターンを出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が40%、ハードウェアスレッド「1」が55%、ハードウェアスレッド「2」が5%、ハードウェアスレッド「3」が0%となっている。
時刻t1で、例えば、プロセッサ外部からの車内LAN通信要求がある場合、通信データを処理するため、マルチスレッドプロセッサ1に対して割り込み処理要求が発生する。更に本例では、通信データが大幅に増加し、システムエラーを回避するため通信データの処理のみを優先しなければならない状態が発生した場合を考える。この場合、マルチスレッドプロセッサ1に対して割り込み処理要求が発生する。このため、割り込みコントローラ11からの割り込み指示信号を割り込み制御部120が入力する。よって、割り込み制御部120の制御信号により、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR3を選択し、スレッドスケジュールレジスタSKR3のスケジュールパターンを出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が0%、ハードウェアスレッド「1」が0%、ハードウェアスレッド「2」が0%、ハードウェアスレッド「3」が100%となっている。
時刻t2で、割り込み処理動作が終了し、マルチスレッドプロセッサ1が再び通常動作に復帰する。このため、割り込み制御部120の制御信号により、スレッドスケジュールレジスタ選択部102は、再びスレッドスケジュールレジスタSKR1を選択し、スレッドスケジュールレジスタSKR1に格納されたスケジュールパターンを出力する。よって、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、時刻t1以前と同様の値となる。
このように、実施の形態2では、スレッド制御レジスタ部101のスレッドスケジュールレジスタSKR3のスケジュールパターンを固定された値のハードウェアスレッド番号(本例では「3」)とする。このことにより、マルチスレッドプロセッサ1が実行する処理動作が特定のハードウェアスレッドのみに限定され、マルチスレッドプロセッサ1の演算回路等のハードウェアリソースを全てこのハードウェアスレッドで利用できる。よって、例えば、システムエラー等を回避するための緊急用の割り込み処理が必要となった場合、この処理を自動的且つ即時に行うことができる。そして、この緊急用の割り込み処理を短時間で終了させることが可能となる。
また、レジスタのような記憶装置にハードウェアスレッド番号「3」を格納するのではなく、ROM等に予め書き込まれたハードウェアスレッド番号「3」の情報を利用してもよい。この場合、スケジュールレジスタ選択部102は、スレッド制御レジスタ部101とROMからの信号線を選択して、切り替えることになる。このとき、セレクタ103を経由せず、ROMから出力されるハードウェアスレッド番号「3」を直接、スレッド選択信号TSELとなるようにしてもよい。このことにより、ハードウエア資源の効率化が図れることになる。
発明の実施の形態3
以下、本発明を適用した具体的な実施の形態3について、図面を参照しながら詳細に説明する。図12に本実施の形態3にかかるスレッドスケジューラ19のブロック図を示す。本実施の形態3は、実施の形態1とは異なり、更に別のスケジューラであるノーマルスケジューラ201等を有している。また、スレッド制御レジスタ部101内のスレッドスケジュールレジスタが有する各スロットが、ハードウェアスレッド番号以外に実時間ビット信号を生成するためのフラグ情報を格納する。その他の構成は、実施の形態1と同様である。よって、本実施の形態3では、実施の形態1と相違する部分を中心に説明を行う。
図12に示すように、本実施の形態3にかかるスケジューラ19は、スケジューラユニット100と、ノーマルスケジューラ201(第2のスケジューラ)と、セレクタ202とを有している。スケジューラユニット100は、実施の形態1のスケジューラ19に該当する。このため、構成及び動作は実施の形態1のものとほぼ同様であり、相違する部分以外の説明は省略する。
本実施の形態3のスレッド制御レジスタ部101は、スレッドスケジュールレジスタSKR11、SKR12を有する。スレッドスケジュールレジスタSKR11、SKR12は、それぞれ複数のスロットを備える。このスロットの構成を図13に示す。図13に示すように、各スロットは、ハードウェアスレッド番号が格納される番号格納部と、実時間ビットフラグが格納されるフラグ格納部を有する。実時間ビットフラグとは、当該スロットが選択された場合に実時間ビット信号の論理レベルを決定するフラグである。このように、本実施の形態3の各スロットは、ハードウェアスレッド番号の情報だけでなく、実時間ビット信号の論理レベルを決定するフラグ情報も有している。
スレッドスケジュールレジスタSKR11、SKR12は、それぞれ図14、図15に示すようなスケジュールパターンが格納されている。図14、図15にスレッドスケジュールレジスタSKR11、SKR12が格納するそれぞれのスケジュールパターンの模式図を示す。
スケジュールSKR11は、図14に示すように、符号SLT1〜SLTnで示すn個のスロットを有する。本例では、スロットSLT1にはハードウェアスレッド番号「0」及び実時間ビットフラグ「1」、スロットSLT2にはハードウェアスレッド番号「1」及び実時間ビットフラグ「1」、スロットSLT3には任意のハードウェアスレッド番号及び実時間ビットフラグ「0」、スロットSLT4にはハードウェアスレッド番号「2」及び実時間ビットフラグ「1」、・・・が格納されている。ここで例えば、本スケジュールSKR11に占める、実時間ビットフラグ「1」、且つハードウェアスレッド番号「0」の割合は40%、実時間ビットフラグ「1」且つハードウェアスレッド番号「1」の割合は50%、実時間ビットフラグ「1」且つハードウェアスレッド番号「2」の割合は5%、実時間ビットフラグ「0」の割合は5%(ハードウェアスレッド番号は任意)とする。
また、スケジュールSKR12は、図15に示すように、符号SLT1〜SLTnで示すn個のスロットを有する。本例では、スロットSLT1〜SLTnの実時間ビットフラグの値は全て「1」とする。更に、スケジュールSKR12は、スロットSLT4にハードウェアスレッド番号「2」を格納する以外は、他のスロットに全てハードウェアスレッド番号「0」を格納している。ここで例えば、本スケジュールSKR12に占める、ハードウェアスレッド番号「0」の割合は95%、ハードウェアスレッド番号「1」の割合は0%、ハードウェアスレッド番号「2」の割合は、スケジュールSKR11と同様5%、実時間ビットフラグ「0」の割合は0%(ハードウェアスレッド番号は任意)とする。
ここで、スレッドスケジュールレジスタSKR11に設定されているスケジュールパターンは、マルチスレッドプロセッサ1が通常動作を行う場合のスケジュールパターンとする。また、スレッドスケジュールレジスタSKR12に設定されているスケジュールパターンは、マルチスレッドプロセッサ1が割り込み動作を行う場合のスケジュールパターンとする。なお、スレッドスケジュールレジスタSKR11、SKR12に設定されているスケジュールパターンは、マルチスレッドプロセッサ1の起動時にシステムバスを通して書き込まれる。更に、システムバスを通して書き換えることも可能である。
セレクタ103は、実施の形態1の機能に加え、選択したスロットのフラグ格納部の値に基づき実時間ビット信号を出力する。より具体的には、セレクタ103は、選択したスロットの番号格納部の値が「0」、フラグ格納部の値が「1」の場合、ハードウェアスレッド番号「0」、実時間ビット信号「1」を出力する。また、選択したスロットのフラグ格納部の値が「0」の場合、実時間ビット信号「0」を出力する。なお、フラグ格納部の値が「0」の場合、スロットの番号格納部の任意の値を出力してもよいし、しなくてもよい。
ノーマルスケジューラ201は、例えば、ラウンドロビン方式やプライオリティ方式の手順に従って任意のハードウェアスレッドを選択するため、その手順に応じたハードウェアスレッド番号「m」を出力する。但し、この番号「m」は、マルチスレッドプロセッサ1が有するハードウェアスレッドに割り当てられた番号であるものとする。具体的には、マルチスレッドプロセッサ1がハードウェアスレッド「0」〜「3」を有する場合、番号「m」も「0」〜「3」のうち任意の番号となる。
セレクタ202は、実時間ビット信号が「1」である場合、スケジューラユニット100からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。また、セレクタ202は、実時間ビット信号が「0」であれば、ノーマルスケジューラ201からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。
以下、実施の形態3のスレッドスケジューラ19を用いたマルチスレッドプロセッサ1の動作について説明する。まず、スケジュールレジスタ選択部102がスレッドスケジュールレジスタSKR11を選択した場合であって、セレクタ202が出力するスレッド選択信号TSELとカウンタ111のカウント値CNTとの関係を示す表を図16に示す。なお、以下の説明では、カウンタ111のカウント値CNTの初期値を「0」、カウント上限値レジスタの値CNTMを「4」とする。
図16に示すように、時刻t1では、カウンタ111のカウント値CNTが「0」である。よって、セレクタ103は、スロットSLT1に割り当てられている値に応じて実時間ビット信号「1」及びハードウェアスレッド番号「0」を出力する。実時間ビット信号「1」であるため、セレクタ202は、セレクタ103からのハードウェアスレッド番号(スケジューラユニット100からのハードウェアスレッド番号)をスレッド選択信号TSELとして出力する。次に、時刻t2では、カウンタ111のカウント値CNTが「1」である。よって、セレクタ103は、スロットSLT2に割り当てられている値に応じて実時間ビット信号「1」及びハードウェアスレッド番号「1」を出力する。実時間ビット信号「1」であるため、セレクタ202は、セレクタ103からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。
時刻t3では、カウンタ111のカウント値CNTが「2」である。よって、セレクタ103は、スロットSLT3に割り当てられている値に応じて実時間ビット信号「0」及びハードウェアスレッド番号「x」(xは任意の番号)を出力する。ここで、実時間ビット信号「0」であるため、セレクタ202は、ノーマルスケジューラ201からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。このときのノーマルスケジューラ201からのハードウェアスレッド番号は、任意のハードウェアスレッド番号mが出力される。この任意のハードウェアスレッド番号mは、上述したように、例えば、ラウンドロビン方式やプライオリティ方式の手順に従ってスレッドスケジューラ19が、任意のハードウェアスレッドを選択するための番号である。
時刻t4では、カウンタ111のカウント値CNTが「3」である。よって、セレクタ103は、スロットSLT4に割り当てられている値に応じて実時間ビット信号「1」及びハードウェアスレッド番号「2」を出力する。実時間ビット信号「1」であるため、セレクタ202は、セレクタ103からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。時刻t5では、カウンタ111のカウント値CNTが「4」である。よって、セレクタ103は、スロットSLT5に割り当てられている値に応じて実時間ビット信号「1」及びハードウェアスレッド番号「1」を出力する。実時間ビット信号「1」であるため、セレクタ202は、セレクタ103からのハードウェアスレッド番号をスレッド選択信号TSELとして出力する。時刻t6でカウント値CNTが「0」にもどるため、再び時刻t1と同様の動作を行う。時刻t6以降、時刻t1〜t5と同様の動作を繰り返し行う。
この場合、このスケジュールにおけるマルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が20%、ハードウェアスレッド「1」が40%、ハードウェアスレッド「2」が20%、任意のハードウェアスレッド「m」が20%となる。
図17に、このスケジュールレジスタ選択部102の選択動作により、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合の変化を説明するタイミングチャートを示す。但し、カウンタ111のカウント値CNTの初期値を「0」、カウント上限値レジスタの値CNTMを「n−1」とする。つまり、スレッドスケジュールレジスタSKR11もしくはSKR12のスケジュールパターンがマルチスレッドプロセッサ1により全て実行されるものとする。
図17に示すように、時刻t1以前では、マルチスレッドプロセッサ1は、通常動作を行っており、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR11のスケジュールパターン(スケジュールSKR11)を出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が40%、ハードウェアスレッド「1」が50%、ハードウェアスレッド「2」が5%、更に、ノーマルスケジューラ201により選択される任意のハードウェアスレッド「m」が5%となっている。
なお、ハードウェアスレッド「0」が、例えば車内LANの通信データ処理、ハードウェアスレッド「1」が画像データのデコード処理、ハードウェアスレッド「2」がタイマー処理にかかるハードウェアスレッドであるものとする。
時刻t1で、例えば、プロセッサ外部からの車内LAN通信要求がある場合、通信データを処理するため、マルチスレッドプロセッサ1に対して割り込み処理要求が発生する。このため、割り込みコントローラ11からの割り込み指示信号を割り込み制御部120が入力する。よって、割り込み制御部120の制御信号により、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR12を選択し、スレッドスケジュールレジスタSKR12に格納されたスケジュールパターンを出力する。このため、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、ハードウェアスレッド「0」が95%、ハードウェアスレッド「1」が0%、ハードウェアスレッド「2」が5%、ノーマルスケジューラ201により選択される任意のハードウェアスレッド「m」が0%となっている。
時刻t2で、割り込み処理動作が終了し、マルチスレッドプロセッサ1が再び通常動作に復帰する。このため、割り込み制御部120の制御信号により、スケジュールレジスタ選択部102は、再びスレッドスケジュールレジスタSKR11を選択し、スレッドスケジュールレジスタSKR11に格納されたスケジュールパターンを出力する。よって、マルチスレッドプロセッサ1が実行する各ハードウェアスレッドの割合は、時刻t1以前と同様の値となる。
なお、この例では、時刻t1〜t2の割り込み処理動作時に、ノーマルスケジューラ201により選択される任意のハードウェアスレッド「m」の割合を0%としている。この例に限らず、時刻t1〜t2の割り込み処理動作時に、ノーマルスケジューラ201により選択される任意のハードウェアスレッド「m」の割合を所定の割合を占めるように、スレッドスケジュールレジスタ2のスケジュールパターンを設定してもよい。
以上のように、本実施の形態3のマルチスレッドプロセッサ1では、スレッドスケジュールレジスタSKR11、SKR12のスロットに格納されたスケジュールパターンに実時間ビットフラグを持たせている。この実時間ビットフラグに応じて生成される実時間ビット信号の値に基づいて、予め決められたスレッドスケジュールレジスタSKR11、SKR12のスケジュールパターンでのハードウェアスレッドか、もしくはノーマルスケジューラ201が生成する任意のハードウェアスレッドを選択することができる。このため、本実施の形態3のマルチスレッドプロセッサ1では、実施の形態1の動作に加え、更に、予め決められていない任意のハードウェアスレッドも実行することができる。このことから、マルチスレッドプロセッサ1は、処理状況に応じて任意のハードウェアスレッドのプロセッサ占有率を増加させることができる。よって、実施の形態1に比べて、柔軟なハードウェアスレッドの選択が可能になる。
発明の実施の形態4
以下、本発明を適用した具体的な実施の形態4について、図面を参照しながら詳細に説明する。図18に本実施の形態4にかかるスレッドスケジューラ19のブロック図を示す。本実施の形態4は、実施の形態1とは異なり、スレッド制御レジスタ部101がスレッドスケジュールレジスタを2つ有するだけでなく、更に複数のスレッドスケジュールレジスタを有している。また、割り込み制御部120が、スケジュールレジスタ選択部102に対して上記複数のスレッドスケジュールレジスタのうちいずれか1つを選択するよう制御を行う。その他の構成は、実施の形態1と同様である。よって、本実施の形態4では、実施の形態1と相違する部分を中心に説明を行う。
図18に示すように、本実施の形態4にかかるスケジューラ19のスレッド制御レジスタ部101は、スレッドスケジュールレジスタSKR1〜SKRrを有する。但し、「r」は3以上の整数である。スレッドスケジュールレジスタSKR1〜SKRrには、それぞれ異なるスケジュールパターンが格納されている。例えば、上述した実施の形態1のスケジュールSKR1、SKR2、実施の形態2のスケジュールSKR3等がある。
割り込み制御部120の割り込みハンドラ121は、割り込み指示信号に応じて、マルチスレッドプロセッサ1がどの割り込み処理を行うかを判定する。スケジュール選択回路122は、割り込みハンドラ121の判定結果に応じてスケジュールレジスタ選択部102を制御する制御信号を出力する。この制御信号により、スケジュールレジスタ選択部102は、結果的に割り込み指示信号に応じたスレッドスケジュールレジスタSKR1〜SKRrのうちいずれか1つを選択することができる。
図19に本実施の形態4におけるスケジュールレジスタ選択部102によるスレッドスケジュールレジスタSKR1〜SKRrの選択動作を説明するための模式図を示す。
図19の模式図に示すように、スケジュールレジスタ選択部102は、割り込み制御部120からの制御信号によりスレッドスケジュールレジスタSKR1〜SKRrに格納されたスケジュールパターンのいずれか1つを選択し、選択したスケジュールパターンをセレクタ103に出力する。但し、通常動作時には、スケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR1に格納されたスケジュールパターンを出力する。よって、この場合、割り込み指示信号が割り込み制御部120に入力されると、割り込み制御部120からの制御信号によりスケジュールレジスタ選択部102は、スレッドスケジュールレジスタSKR2〜SKRrに格納されたスケジュールパターンのいずれか1つを出力する。
この割り込み制御部120のより具体的な動作例として以下のような制御が行われるようにしてもよい。まず、スレッドスケジュールレジスタSKR1〜SKRrに、それぞれに対応したポインタを付しておく。そして、割り込みハンドラ121が割り込み指示信号に応じた割り込み処理動作を判定し、その判定結果をスケジュール選択回路122に送る。スケジュール選択回路122は、この判定結果に応じたポインタを指定し、ポインタ情報を制御信号としてスケジュールレジスタ選択部102に出力する。スケジュールレジスタ選択部102は、この制御信号のポインタ情報に該当するスレッドスケジュールレジスタSKR2〜SKRrのいずれか1つを選択し、その選択したスレッドスケジュールレジスタのスケジュールパターンを出力する。
そして、一連の割り込み処理が終了するとスケジュール選択回路122は、スレッドスケジュールレジスタSKR1に対応するポインタを指定し、ポインタ情報を制御信号としてスケジュールレジスタ選択部102に出力する。このことにより、マルチスレッドプロセッサ1は割り込み処理動作前の通常動作に戻る。
このように、本実施の形態4では、スレッド制御レジスタ部101に3以上の複数のスレッドスケジュールレジスタを有する。更に割り込み制御部120により、割り込み処理の種類に応じて、この複数のスレッドスケジュールレジスタが格納する最適なスケジュールパターンを選択できる。このことにより、本実施の形態4のマルチスレッドプロセッサ1は、プロセッサの内部状態に対して適切な割り込み処理時のスケジュールパターンの切り替えを自動的に行い、且つ、その切り替えを高速に行うことができる。
また、上述したようなポインタを用いる場合、スレッド制御レジスタ部101の各スレッドスケジュールレジスタのスケジュールパターンが書き換えられたとしても、対応するポインタの情報を変更するだけでよく、物理的な配線の変更等が生じない利点がある。
なお、本発明は上記実施の形態に限られたものでなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、実施の形態2、4と実施の形態3の構成を組み合わせてもよい。