(57)【要約】【課題】ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサにおいて、より効果的にスレッドを切り替えること。【解決手段】複数のスレッドが実行する予定の複数ステップの命令に対応し、この命令をレイテンシの大小に応じた二以上の種類に分類する識別用データが、最先の実行予定から順に複数ステップ分書き込まれる識別用データテーブルと、複数のスレッドのうち命令を実行する実行スレッドが命令を実行する際に、実行スレッドが実行する命令に対応した識別用データがレイテンシの大きい命令であることを示す第１の識別用データである場合には、識別用データテーブルに書き込まれた実行スレッド以外のスレッドの複数ステップ分の識別用データに基づいて一のスレッドを選択し、選択されたスレッドに実行スレッドを切り替えるスレッド制御手段と、を備えるマルチスレッド・プロセッサ。【選択図】図３
2012128791.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドがハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサであって、
前記複数のスレッドが実行する予定の複数ステップの命令に対応し、該命令をレイテンシの大小に応じた二以上の種類に分類する識別用データが、最先の実行予定から順に複数ステップ分書き込まれる識別用データテーブルと、
前記複数のスレッドのうち命令を実行する実行スレッドが命令を実行する際に、該実行スレッドが実行する命令に対応した前記識別用データがレイテンシの大きい命令であることを示す第１の識別用データである場合には、前記識別用データテーブルに書き込まれた前記実行スレッド以外のスレッドの複数ステップ分の識別用データに基づいて一のスレッドを選択し、該選択されたスレッドに実行スレッドを切り替えるスレッド制御手段と、
を備えるマルチスレッド・プロセッサ。
【請求項２】
請求項１に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを切り替えるのに加え、前記実行スレッドが直近に命令を実行した処理時間単位数が所定数以上となった場合にも、前記実行スレッドを切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項３】
請求項１又は２に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の命令に相当する識別用データを複数ステップ参照し、レイテンシの小さい命令であることを示す第２の識別用データが、最先の実行予定命令に相当する識別用データを起点として所定数以上並んでいるスレッドに前記実行スレッドを切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項４】
請求項３に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、前記実行スレッドが実行する命令に対応した前記識別用データが前記第１の識別用データである場合であっても前記実行スレッドを切り替えないことを特徴とする、
マルチスレッド・プロセッサ。
【請求項５】
請求項３に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、実行済み命令が少ない傾向のスレッドに前記実行スレッドを優先的に切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項６】
請求項３ないし５のいずれか１項に記載のマルチスレッド・プロセッサであって、
前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが多く並んでいるスレッドに前記実行スレッドを優先的に切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項７】
請求項１又は２に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の複数ステップの命令を参照し、レイテンシの小さい命令であることを示す第２の識別用データが一以上連続する各データ群について、該第２の識別用データが連続する個数に、該連続する個数が大きい程大きくなる傾向の係数を乗じた値を算出し、該算出した値を合計した加重和が大きいスレッドに前記実行スレッドを優先的に切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項８】
請求項７に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、前記実行スレッドが実行する命令に対応した前記識別用データが前記第１の識別用データである場合であっても前記実行スレッドを切り替えないことを特徴とする、
マルチスレッド・プロセッサ。
【請求項９】
複数のスレッドがハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサであって、
前記複数のスレッドが実行する予定の複数ステップの命令に対応し、該命令をレイテンシの大小に応じた二以上の種類に分類する識別用データが、最先の実行予定から順に複数ステップ分書き込まれる識別用データテーブルと、
前記識別用データに基づき前記複数のスレッドのうち命令を実行する実行スレッドを切り替えるスレッド制御手段と、を備え、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の複数ステップの命令を参照し、レイテンシの小さい命令であることを示す第２の識別用データが一以上連続する各データ群について、該第２の識別用データが連続する個数に、該連続する個数が大きい程大きくなる傾向の係数を乗じた値を算出し、該算出した値を合計した加重和が大きいスレッドに前記実行スレッドを優先的に切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項１０】
請求項９に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、過去に実行した命令に対応する識別用データをスレッド毎に記憶手段に記憶させ、該記憶手段に記憶された識別用データに基づいて把握されるスレッド毎の短サイクル命令と長サイクル命令の実行傾向に基づいて前記実行スレッドの切り替えを行うことを特徴とする、
マルチスレッド・プロセッサ。
【請求項１１】
請求項１ないし１０のいずれか１項に記載のマルチスレッド・プロセッサであって、
前記スレッド制御手段は、前記第１の識別用データに対応した命令を、前記実行スレッドの切り替え後に元スレッドが完了した際には、該元スレッドに実行スレッドを切り替えることを特徴とする、
マルチスレッド・プロセッサ。
【請求項１２】
請求項１ないし１１のいずれか１項に記載のマルチスレッド・プロセッサであって、
前記識別用データは、１ビットの数値データであることを特徴とする、
マルチスレッド・プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドが各自に処理を行うマルチスレッド・プロセッサに関し、特に、複数のスレッドによりハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサに関する。
【背景技術】
【０００２】
近年、プロセッサの性能向上に伴い、複数の機能を一つのプロセッサにより実現させるための技術が研究・実用化されている。例えば、車両に搭載される車載制御装置の分野では、ある車載機器を制御する制御装置と他の車載機器を制御する制御装置（例えば変速機の制御装置とエンジンの制御装置等）を統合して、コンピュータ・ハードウエアを縮小し、コストや重量の低減を図る動きが見られる。
【０００３】
こうしたハードウエア統合の一手法として、ハードウエア・マルチスレッディング処理と称されるものが知られている。ハードウエア・マルチスレッディング処理は、命令バッファや演算結果の格納場所（レジスタ）等を異にする複数のスレッドが、命令デコーダや演算回路等のハードウエアの一部を共有して処理を行なうものである。
【０００４】
ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサには、通常のコンピュータと同様、ＲＡＭ、ＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）等の記憶装置やＩ／Ｏ装置等のアクセス対象が存在する。
【０００５】
こうしたアクセス対象へのアクセスに係る制御周波数（メモリ制御周波数、バスアクセス周波数）は、プロセッサ周波数（各スレッドが命令を実行する周波数；以下同）の高速化に追いついていないのが現状である。このため、アクセス対象へのアクセス処理は、演算処理等、プロセッサの内部で行う処理に比して、多くの処理サイクル数（或いは処理クロック数）を要するものとなっている。すなわち、プロセッサの処理において、特定の処理のレイテンシが他の処理と比較して大きいものとなり、プロセッサ全体の処理性能の向上を妨げるという課題が存在する。こうした課題は、プロセッサの周波数が更に高速化される将来に向けて、ますます大きいものとなることが予想される。
【０００６】
このような課題に関連した文献が開示されている。特許文献１には、スレッド状態レジスタとスレッド切り替え制御レジスタを備え、これらの状態に基づいて、外部装置へのアクセス時にスレッド切り替えを行うマルチスレッド・プロセッサについて記載されている。
【０００７】
また、特許文献２には、ロード／ストアユニットを備え、このロード／ストアユニットが、通信の応答に時間がかかる場合に、スレッドの切替要求を出力するマルチスレッドコンピュータについて記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第１９９９／０２１０８１号
【特許文献２】特開２００４−２３４１２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記特許文献に記載の構成では、各スレッドが将来どのような処理を行う予定であるのかを把握しておらず、レイテンシの大きい処理が発生した時点の状態に基づいてスレッドの切り替えを行っているため、スレッドの切り替えを行う効果が薄いものとなる場合がある。例えば、スレッド切り替えによって実行スレッドとされたスレッドが、直ぐにメモリアクセスのようなレイテンシの大きい処理を実行する可能性がある。上記特許文献では、このような将来の見通しに関する考慮がなされておらず、スレッド切り替えが効果的でなくなってしまうという課題が存在する。
【００１０】
本発明はこのような課題を解決するためのものであり、ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサにおいて、より効果的にスレッドを切り替えることを、主たる目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するための本発明の第１の態様は、
複数のスレッドがハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサであって、
前記複数のスレッドが実行する予定の複数ステップの命令に対応し、該命令をレイテンシの大小に応じた二以上の種類に分類する識別用データが、最先の実行予定から順に複数ステップ分書き込まれる識別用データテーブルと、
前記複数のスレッドのうち命令を実行する実行スレッドが命令を実行する際に、該実行スレッドが実行する命令に対応した前記識別用データがレイテンシの大きい命令であることを示す第１の識別用データである場合には、前記識別用データテーブルに書き込まれた前記実行スレッド以外のスレッドの複数ステップ分の識別用データに基づいて一のスレッドを選択し、該選択されたスレッドに実行スレッドを切り替えるスレッド制御手段と、
を備えるマルチスレッド・プロセッサである。
【００１２】
この本発明の第１の態様によれば、ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサにおいて、より効果的にスレッドを切り替えることができる。
【００１３】
本発明の第１の態様において、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを切り替えるのに加え、前記実行スレッドが直近に命令を実行した処理時間単位数が所定数以上となった場合にも、前記実行スレッドを切り替えることを特徴とするものとしてもよい。
【００１４】
また、本発明の第１の態様において、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の命令に相当する識別用データを複数ステップ参照し、レイテンシの小さい命令であることを示す第２の識別用データが、最先の実行予定命令に相当する識別用データを起点として所定数以上並んでいるスレッドに前記実行スレッドを切り替えることを特徴とするものとしてもよい。
【００１５】
この場合、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、前記実行スレッドが実行する命令に対応した前記識別用データが前記第１の識別用データである場合であっても前記実行スレッドを切り替えないことを特徴とするものとしてもよい。
【００１６】
また、本発明の第１の態様において、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、実行済み命令が少ない傾向のスレッドに前記実行スレッドを優先的に切り替えることを特徴とするものとしてもよい。
【００１７】
また、本発明の第１の態様において、
前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが多く並んでいるスレッドに前記実行スレッドを優先的に切り替えることを特徴とするものとしてもよい。
【００１８】
本発明の第１の態様において、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の複数ステップの命令を参照し、レイテンシの小さい命令であることを示す第２の識別用データが一以上連続する各データ群について、該第２の識別用データが連続する個数に、該連続する個数が大きい程大きくなる傾向の係数を乗じた値を算出し、該算出した値を合計した加重和が大きいスレッドに前記実行スレッドを優先的に切り替えることを特徴とするものとしてもよい。
【００１９】
この場合、
前記スレッド制御手段は、前記識別用データに基づき前記実行スレッドを他のスレッドに切り替える際に、最先の実行予定命令に相当する識別用データを起点として前記第２の識別用データが所定数以上並んでいるスレッドが存在しない場合には、前記実行スレッドが実行する命令に対応した前記識別用データが前記第１の識別用データである場合であっても前記実行スレッドを切り替えないことを特徴とするものとしてもよい。
【００２０】
本発明の第２の態様は、
複数のスレッドがハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサであって、
前記複数のスレッドが実行する予定の複数ステップの命令に対応し、該命令をレイテンシの大小に応じた二以上の種類に分類する識別用データが、最先の実行予定から順に複数ステップ分書き込まれる識別用データテーブルと、
前記識別用データに基づき前記複数のスレッドのうち命令を実行する実行スレッドを切り替えるスレッド制御手段と、を備え、
前記スレッド制御手段は、前記識別用データに基づき実行スレッドを他のスレッドに切り替える際に、前記実行スレッド以外のスレッドが実行する予定の複数ステップの命令を参照し、レイテンシの小さい命令であることを示す第２の識別用データが一以上連続する各データ群について、該第２の識別用データが連続する個数に、該連続する個数が大きい程大きくなる傾向の係数を乗じた値を算出し、該算出した値を合計した加重和が大きいスレッドに前記実行スレッドを優先的に切り替えることを特徴とする、
マルチスレッド・プロセッサである。
【００２１】
この本発明の第２の態様によれば、ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサにおいて、より効果的にスレッドを切り替えることができる。
【００２２】
本発明の第２の態様において、
前記スレッド制御手段は、過去に実行した命令に対応する識別用データをスレッド毎に記憶手段に記憶させ、該記憶手段に記憶された識別用データに基づいて把握されるスレッド毎の短サイクル命令と長サイクル命令の実行傾向に基づいて前記実行スレッドの切り替えを行うことを特徴とするものとしてもよい、
マルチスレッド・プロセッサ。
【００２３】
本発明の第１又は第２の態様において、
前記スレッド制御手段は、前記第１の識別用データに対応した命令を、前記実行スレッドの切り替え後に元スレッドが完了した際には、該元スレッドに実行スレッドを切り替えることを特徴とするものとしてもよい。
【００２４】
また、本発明の第１又は第２の態様において、
前記識別用データは、１ビットの数値データであることを特徴とするものとしてもよい。
【発明の効果】
【００２５】
本発明によれば、ハードウエア・マルチスレッディング処理を行うマルチスレッド・プロセッサにおいて、より効果的にスレッドを切り替えることができる。
【図面の簡単な説明】
【００２６】
【図１】本発明の第１実施例に係るマルチスレッド・プロセッサ１のシステム構成例である。
【図２】命令監視ビット列格納部３２＃０〜３２＃Ｎに格納された命令監視ビット列を模式的に示す図である。
【図３】第１実施例に係るスレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートである。
【図４】実行スレッドの切り替えが行われる場面における命令監視ビット列を例示した図である。
【図５】実行スレッドの切り替えが行われない場面における命令監視ビット列を例示した図である
【図６】図４の場面から図５の場面を経てスレッド＃１に実行スレッドが復帰するまでの間の、命令番号の推移を示す図である。
【図７】第２施例に係るスレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートである。
【図８】スレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートの他の例である。
【図９】図８に係る処理が第１実施例に比して優位となる一場面を示す図である。
【図１０】スレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートの他の例である。
【発明を実施するための形態】
【００２７】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２８】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係るマルチスレッド・プロセッサ１について説明する。
【００２９】
［構成］
図１は、本発明の第１実施例に係るマルチスレッド・プロセッサ１のシステム構成例である。マルチスレッド・プロセッサ１は、主要な構成として、フラッシュＲＯＭ（Read  Only  Memory）１０と、プログラムカウンタ２０＃０〜２０＃Ｎと、命令監視ビット列格納部３２＃０〜３２＃Ｎを含む命令キュー３０と、ＡＬＵ（Arithmetic  Logic  Unit）４１、ＭＵＬ（Multiplier；乗算器）４２、ＤＩＶ（Divider；除算器）４３、ＬＳＵ（Load  Store  Unit）４４からなる実行ユニット４０と、ＣＰＵレジスタ５０＃０〜５０＃Ｎと、レジスタセット５２と、スレッド制御回路６０と、バス７０を介してこれらに接続されたＩ／Ｏ７２、ＲＡＭ（Random  Access  Memory）７４、ＤＭＡ（Direct  Memory  Access）７６、ＩＮＴＣ（Interrupt  Controller；割り込みコントローラ）７８等を備える。
【００３０】
なお、本実施例では、二以上の任意の数であるスレッド数がＮであるとし、「＃」の後の数字がスレッドナンバーを示すものとする。また、図１に示す構成は、ハードウエア・マルチスレッディング処理を行うための一般的な構成を例示したものであり、ハードウエア・マルチスレッディング処理を行うことが可能な構成であれば、任意の構成要素を置換、削除、追加等してよい。
【００３１】
ハードウエア・マルチスレッディング処理とは、複数のスレッドが、命令デコーダや演算回路等のハードウエアの一部を共有して処理を行なうものである。スレッドとは、ハードウエアを部分的に共有して処理を行なう仮想的な処理主体をいう。本実施例では、プログラムカウンタやＣＰＵレジスタ、命令キュー及び命令監視ビット列はスレッド毎に用意されているが、その他の構成要素はスレッド間で共用されるものとする。
【００３２】
フラッシュＲＯＭ１０は、プログラムメモリとして機能し、各スレッドが実行するプログラム（命令）を格納する。フラッシュＲＯＭ１０は、プログラムカウンタ２０＃０〜２０＃Ｎから命令の格納場所を示すアドレスが入力されると、当該アドレスに格納された命令を出力する（命令フェッチ）。
【００３３】
命令キュー３０は、図示しない通常の命令キューをスレッド毎に有し、各スレッドが実行する命令を複数ステップ分（例えば１０ステップ程度）、格納する。また、命令監視ビット列格納部３２＃０〜３２＃Ｎは、スレッド毎の命令監視ビット列を格納する。
【００３４】
命令監視ビット列格納部３２＃０〜３２＃Ｎに格納される命令監視ビット列は、命令監視ビットが並べられたものである。命令監視ビットは、各スレッドが実行する命令を、想定処理サイクル数の長短（レイテンシの大小）に応じて分類する。そして、各スレッドが実行する命令は、命令監視ビットによって、「０」（レイテンシが小さい＝想定処理サイクル数が少ない）と「１」（レイテンシが大きい＝想定処理サイクル数が多い）の二種類に予め分類されている。
【００３５】
ここで、「サイクル」とは、時間を表す単位であり、プロセッサに供給される「クロック」と同義であってもよいし、「数クロック」を「１サイクル」と称するものであっても構わない。以下、命令監視ビット「０」が付与された命令を短サイクル命令、命令監視ビット「１」が付与された命令を長サイクル命令と称する。複数の命令のセットが１ステップの長サイクル命令とみなされても構わない。
【００３６】
命令監視ビット列格納部３２＃０〜３２＃Ｎに格納された命令監視ビット列は、スレッド＃０〜＃Ｎが実行する予定の複数ステップの命令（すなわち命令キュー３０に格納されたスレッド＃０〜＃Ｎの実行予定命令）のそれぞれに対応しており、最先の実行予定命令に対応するものを起点として順に複数ステップ分、命令監視ビットが並べられている。
【００３７】
図２は、命令監視ビット列格納部３２＃０〜３２＃Ｎに格納された命令監視ビット列を模式的に示す図である。
【００３８】
命令監視ビット列格納部３２＃０〜３２＃Ｎに格納される命令監視ビットは、例えば、フラッシュＲＯＭ１０から命令がフェッチされる際に、各命令に付随してフラッシュＲＯＭ１０から出力される。そして、図示しない命令キュー３０の制御回路（オペレーティングシステム等であってもよい）が、命令本体部分と命令監視ビットに分離し、それぞれを通常の命令キューと命令監視ビット列格納部３２＃０〜３２＃Ｎに分離して格納する。また、これに限らず、通常の命令キューにおける各命令の末尾に、命令監視ビットが付加されたようなデータ構成であっても構わない。係る命令監視ビットの更新態様を採用する場合、命令監視ビット列の段数は、パイプライン段数と一致させると好適である。
【００３９】
通常の命令キュー及び命令監視ビット列格納部３２＃０〜３２＃Ｎは、例えばＦＩＦＯ（First  In，First  Out）に従って命令を入出力するように制御される。命令キューに格納された最先の実行予定命令は、図示しない命令デコーダによって解読され、解読結果である演算の種別、ソースオペランド、結果の格納場所等が、実行ユニット４０に出力される。
【００４０】
ＡＬＵ４１、ＭＵＬ４２、及びＤＩＶ４３は、それぞれスレッドの要求に応じて、四則演算その他の演算処理を行う。これらの演算処理手段は、ＦＰＧＡ（Field  Programmable  Gate  Array）等によって構成されてもよいし、逐次演算を行うものであってもよい。各スレッドにより実行された演算処理の結果は、原則としてスレッドに対応するＣＰＵレジスタ５０＃０〜５０＃Ｎに格納される。また、ＬＳＵ４４は、スレッドの要求に応じて、バス７０を介したストア命令やロード命令を実行する。
【００４１】
［スレッドの切り替え制御］
スレッド制御回路６０は、スレッドの切り替えを制御している。例えば原則として、スレッド＃０の処理を所定サイクル（例えば１０サイクル）分行わせると、次にスレッド＃１の処理を所定サイクル分行わせ、次にスレッド＃２の処理を所定サイクル分行わせるような切り替え制御を行っている。これらのスレッド処理時間の割り当ては、任意に設定することが可能である。
【００４２】
また、スレッド制御回路６０は、スレッド＃０〜＃Ｎのうち命令を実行するスレッド（以下、「実行スレッド」と称する）が１ステップの命令を実行する際に、実行スレッドが実行する命令に対応した命令監視ビットが「０」であるか「１」であるかを判定する。そして、実行スレッドが実行する命令に対応した命令監視ビットが「１」である場合は、後述する例外を除き、命令監視ビット列格納部３２＃０〜３２＃Ｎに格納された実行スレッド以外のスレッドの命令監視ビット列に基づいて、最適な一のスレッドを選択し、選択されたスレッドが実行スレッドとなるように制御する。
【００４３】
この際に、スレッド制御回路６０は、以下の最適スレッド探索アルゴリズムに基づき、実行スレッドを切り替える。
・（１）命令監視ビット「０」が、最先の実行予定命令（最も早く実行される予定の命令）に対応するものを起点として所定数以上（例えば三個以上）並んでいるスレッドに、実行スレッドを切り替える。
・（２）（１）に該当するスレッドが複数存在する場合には、命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として最も多く並んでいるスレッドに、実行スレッドを切り替える。
・（３）（１）に該当するスレッドが存在しない場合には、実行スレッドを切り替えない。
【００４４】
図３は、第１実施例に係るスレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートである。本フローは、マルチスレッド・プロセッサ１が起動している間、１サイクル毎に繰り返し実行される。
【００４５】
まず、スレッド制御回路６０は、実行スレッドの実行サイクルが所定サイクル以上となったか否かを判定する（Ｓ１００）。
【００４６】
現在の実行スレッドの実行サイクルが所定サイクル以上となった場合は、例えばスレッドナンバーを一つ繰り上げるように（スレッド＃１→スレッド＃２、スレッド＃Ｎ→スレッド＃０等）実行スレッドを切り替える（Ｓ１０２）。本ステップにおけるスレッド実行スレッドの切り替えは、これに限らず、予め定めた任意の規則に従ってよい。
【００４７】
現在の実行スレッドの実行サイクルが未だ所定サイクル未満である場合は、命令監視ビット列格納部３２＃０〜３２＃Ｎを参照し、実行スレッドが実行する命令に対応した命令監視ビットが「０」であるか「１」であるかを判定する（Ｓ１０４）。すなわち、実行スレッドが実行する命令が短サイクル命令であるか、長サイクル命令であるかを判定する。
【００４８】
実行スレッドが実行する命令に対応した命令監視ビットが「０」である場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ１０６）。これによって、実行スレッドにより短サイクル命令が実行される。
【００４９】
一方、実行スレッドが実行する命令に対応した命令監視ビットが「１」である場合は、命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として所定数以上並んでいるスレッドが存在するか否かを判定する（Ｓ１０８）。
【００５０】
このようなスレッドが存在しない場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ１０６）。
【００５１】
このようなスレッドが存在する場合は、命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として最も多く並んでいるスレッドに実行スレッドを切り替える（Ｓ１１０）。
【００５２】
なお、命令監視ビットに基づく実行スレッドの切り替えを行う際には、原則として元スレッドの長サイクル命令の実行を継続し、切り替えられた先の実行スレッドの処理との並行処理が行われる。但し、長サイクル命令の継続／中止の判断を、長サイクル命令の種類（特に、クロック割り当てが必要な命令かどうか）に基づいて行い、必要に応じて元スレッドの長サイクル命令の実行を中止しても構わない。
【００５３】
実行スレッドの切り替えを行う際に長サイクル命令の実行を継続する場合、長サイクル命令の実行が完了すると、当該長サイクル命令を実行していたスレッド（元スレッド）から割り込み通知がなされる（Ｓ１１２）。この結果、実行スレッドが切り替え先から元スレッドに復帰する。割り込み通知は、例えばレジスタセット５２を用いて行われる。
【００５４】
図４は、実行スレッドの切り替えが行われる場面における命令監視ビット列を例示した図である。本図に示すように、命令監視ビット列には、命令番号（最先の実行予定命令に対応するものを起点として最初に「１」が来るまでの命令ステップ数）が付与されてもよい。また、最先の実行予定命令に対応するものを起点として命令監視ビット「０」が三個以上並んでいるスレッド（「命令番号」が「４」以上であるスレッド）が存在しない場合には、実行スレッドの切り替えを行わないものとする。
【００５５】
図４において、実行スレッドはスレッド＃１である。スレッド制御回路６０は、実行スレッドが実行する命令に対応した命令監視ビットが「１」であるため、最適スレッドの探索を行い、実行スレッドの切り替えを行う。この場面においては、命令番号が「ＭＡＸ」となっているスレッド＃３が実行スレッドとして選択される。
【００５６】
その後、スレッド＃３が実行する命令に対応した命令監視ビットが「１」となると、スレッド＃２が実行スレッドとして選択されることになる。更にその後、スレッド＃２が実行する命令に対応した命令監視ビットが「１」となると、最適スレッドの探索が行われるが、その時点における最大の「命令番号」が、スレッド＃０の「３」であるため、実行スレッドの切り替えは行わない。図５は、係る場面（実行スレッドの切り替えが行われない場面）における命令監視ビット列を例示した図である。また、図６は、図４の場面から図５の場面を経てスレッド＃１に実行スレッドが復帰するまでの間の、命令番号の推移を示す図である。図中、「閾値」とは、実行スレッドの切り替えを行うか否かを判定するための値であり、「４」に設定されている。
【００５７】
このように、長サイクル命令が実行される際に、最適なスレッド探索を行って実行スレッドの切り替えを行うため、短サイクル命令を多く実行する予定のスレッドに対して優先的に実行時間が割り当てられ、プロセッサ全体の処理効率を向上させることができる。また、最先の実行予定命令に対応するものを起点として命令監視ビット「０」が所定数以上並んでいるスレッドが存在しない場合には実行スレッドの切り替えを行わないため、不要なスレッド切り替えを頻発することにより却って処理効率が低下するという不都合を回避することができる。
【００５８】
以上説明した本実施例のマルチスレッド・プロセッサ１によれば、長サイクル命令が実行される際に、その時点の状態にのみ基づいて実行スレッドが切り替えられるようなものと比較して、より効果的にスレッドを切り替えることができる。
【００５９】
＜第２実施例＞
以下、図面を参照し、本発明の第２実施例に係るマルチスレッド・プロセッサ２について説明する。
【００６０】
［構成］については、第１実施例と共通するため、図１を援用すると共に各構成要素について同一の符号が付されているものとし、各構成要素に関する詳細な説明は省略する。
【００６１】
［スレッドの切り替え制御］
第２実施例に係るスレッド制御回路６０は、例えば、スレッド＃０の処理を所定サイクル（例えば１０サイクル）分行わせると、以下の最適スレッド探索アルゴリズムに基づき、実行スレッドを切り替える。
・（１）各スレッドの命令監視ビット列に含まれる「０」が一以上連続した部分を抽出し、それぞれについて連続数ｎ（一個であれば１、二個であれば２…）をカウントする。
・（２）次式（１）により指標値Ｔを算出し、指標値Ｔが最も大きいスレッドに実行スレッドを切り替える。ここで、係数Ｃ（ｎ）は、例えば｛２×（連続数ｎ）｝のように、連続数ｎが大きくなるほど大きくなる係数である。係数Ｃ（ｎ）は、連続数ｎと等しい値であってもよい（Ｔ＝ｎ＾２）。
【００６２】
Ｔ＝Σ｛Ｃ（ｎ）×ｎ｝  …（１）
【００６３】
図７は、第２施例に係るスレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートである。本フローは、マルチスレッド・プロセッサ２が起動している間、１サイクル毎に繰り返し実行される。
【００６４】
まず、スレッド制御回路６０は、実行スレッドの実行サイクルが所定サイクル以上となったか否かを判定する（Ｓ２００）。
【００６５】
現在の実行スレッドの実行サイクルが未だ所定サイクル未満である場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ２０２）。これによって、実行スレッドにより命令が実行される。
【００６６】
現在の実行スレッドの実行サイクルが所定サイクル以上となった場合は、上式（１）により指標値Ｔを算出し（Ｓ２０４）、指標値Ｔが最も大きいスレッドに実行スレッドを切り替える（Ｓ２０６）。
【００６７】
このように、短サイクル命令の連続数に基づく最適なスレッド探索を行って実行スレッドの切り替えを行うため、短サイクル命令を連続して多く実行する予定のスレッドに対して優先的に実行時間が割り当てられ、プロセッサ全体の処理効率を向上させることができる。
【００６８】
また、第２実施例に係る処理は、実行スレッドにより超長サイクル命令（数十〜数百サイクルを要する命令）が実行される場面において、特に有効である。
【００６９】
第１実施例に係る処理では、最先の実行予定から命令監視ビット「１」が出現するまでの命令監視ビット「０」の個数に基づいて実行スレッドを切り替えている。これに対し、第２実施例に係る処理では、命令監視ビットをより長期的に（より遠い将来まで）参照して実行スレッドを切り替えることが可能である。第１実施例において実行スレッドの切り替え前に命令を実行していた元スレッドが超長サイクルを並行して実行している場合、実行スレッドの切り替え期間が非常に長くなる。このような場面において、直近の数ステップの命令監視ビットのみを参照して実行スレッドの切り替えを行うと、次々と実行スレッドの切り替えが生じ、結局は元スレッドの超長サイクル命令の終了待ちとなる可能性が高い。このような場面では、第２実施例のように命令監視ビットをより長期的に参照して実行スレッドを切り替える方が、効果的な切り替えとなる可能性が高い。
【００７０】
但し、このような超長サイクル命令が余り出現しないようなプロセッサのプログラム構成となっている場合は、第１実施例が適用された方が優位となる場合もある。
【００７１】
以上説明した本実施例のマルチスレッド・プロセッサ２によれば、長サイクル命令が実行される際に、その時点の状態にのみ基づいて実行スレッドが切り替えられるようなものと比較して、より効果的にスレッドを切り替えることができる。
【００７２】
＜第２実施例の変形例＞
なお、第２実施例においても、第１実施例と同様、長サイクル命令の実行時にも実行スレッドを切り替えるものとしてもよい。図８は、スレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートの他の例である。
【００７３】
まず、スレッド制御回路６０は、実行スレッドの実行サイクルが所定サイクル以上となったか否かを判定する（Ｓ３００）。
【００７４】
現在の実行スレッドの実行サイクルが所定サイクル以上となった場合は、例えばスレッドナンバーを一つ繰り上げるように（スレッド＃１→スレッド＃２、スレッド＃Ｎ→スレッド＃０等）実行スレッドを切り替える（Ｓ３０２）。本ステップにおけるスレッド実行スレッドの切り替えは、これに限らず、予め定めた任意の規則に従ってよい。
【００７５】
現在の実行スレッドの実行サイクルが未だ所定サイクル未満である場合は、命令監視ビット列格納部３２＃０〜３２＃Ｎを参照し、実行スレッドが実行する命令に対応した命令監視ビットが「０」であるか「１」であるかを判定する（Ｓ３０４）。すなわち、実行スレッドが実行する命令が短サイクル命令であるか、長サイクル命令であるかを判定する。
【００７６】
実行スレッドが実行する命令に対応した命令監視ビットが「０」である場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ３０６）。これによって、実行スレッドにより短サイクル命令が実行される。
【００７７】
一方、実行スレッドが実行する命令に対応した命令監視ビットが「１」である場合は、上式（１）により指標値Ｔを算出し（Ｓ３０８）、指標値Ｔが最も大きいスレッドに実行スレッドを切り替える（Ｓ３１０）。
【００７８】
なお、命令監視ビットに基づく実行スレッドの切り替えを行う際には、原則として元スレッドの長サイクル命令の実行を継続し、切り替えられた先の実行スレッドの処理との並行処理が行われる。但し、長サイクル命令の継続／中止の判断を、長サイクル命令の種類（特に、クロック割り当てが必要な命令かどうか）に基づいて行い、必要に応じて元スレッドの長サイクル命令の実行を中止しても構わない。
【００７９】
実行スレッドの切り替えを行う際に長サイクル命令の実行を継続する場合、長サイクル命令の実行が完了すると、当該長サイクル命令を実行していたスレッド（元スレッド）から割り込み通知がなされる（Ｓ３１２）。この結果、実行スレッドが切り替え先から元スレッドに復帰する。
【００８０】
図９は、図８に示した処理が第１実施例に比して優位となる一場面を示す図である。本図の場面では、第１実施例の最適スレッド探索アルゴリズムを適用すると実行スレッドはスレッド＃２に切り替えられるが、図９のフローを適用すると、スレッド＃３に実行スレッドが切り替えられる。この結果、短サイクル命令が連続して少なくとも４個存在するスレッド＃３がスレッド＃２よりも先に命令を実行することになるため、結果として処理効率が向上する可能性が高い。
【００８１】
また、図９に示したフローにおいて、命令監視ビット「０」が最先の実行予定命令に対応するものを起点として所定数以上並んでいるスレッドが存在しない場合には、実行スレッドの切り替えを行わないものとしてもよい。図１０は、スレッド制御回路６０により実行される特徴的な処理の流れを示すフローチャートの他の例である。
【００８２】
まず、スレッド制御回路６０は、実行スレッドの実行サイクルが所定サイクル以上となったか否かを判定する（Ｓ４００）。
【００８３】
現在の実行スレッドの実行サイクルが所定サイクル以上となった場合は、例えばスレッドナンバーを一つ繰り上げるように（スレッド＃１→スレッド＃２、スレッド＃Ｎ→スレッド＃０等）実行スレッドを切り替える（Ｓ４０２）。本ステップにおけるスレッド実行スレッドの切り替えは、これに限らず、予め定めた任意の規則に従ってよい。
【００８４】
現在の実行スレッドの実行サイクルが未だ所定サイクル未満である場合は、命令監視ビット列格納部３２＃０〜３２＃Ｎを参照し、実行スレッドが実行する命令に対応した命令監視ビットが「０」であるか「１」であるかを判定する（Ｓ４０４）。すなわち、実行スレッドが実行する命令が短サイクル命令であるか、長サイクル命令であるかを判定する。
【００８５】
実行スレッドが実行する命令に対応した命令監視ビットが「０」である場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ４０６）。これによって、実行スレッドにより短サイクル命令が実行される。
【００８６】
一方、実行スレッドが実行する命令に対応した命令監視ビットが「１」である場合は、命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として所定数以上並んでいるスレッドが存在するか否かを判定する（Ｓ４０８）。
【００８７】
このようなスレッドが存在しない場合は、実行スレッドの切り替えを行わず、通常処理を行う（Ｓ４０６）。
【００８８】
このようなスレッドが存在する場合は、命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として所定数以上並んでいるスレッドについて、上式（１）により指標値Ｔを算出し（Ｓ４１０）、指標値Ｔが最も大きいスレッドに実行スレッドを切り替える（Ｓ４１２）。
【００８９】
命令監視ビットに基づく実行スレッドの切り替えを行う際に長サイクル命令の実行を継続する場合、長サイクル命令の実行が完了すると、当該長サイクル命令を実行していたスレッド（元スレッド）から割り込み通知がなされる（Ｓ４１４）。この結果、実行スレッドが切り替え先から元スレッドに復帰する。
【００９０】
このような処理によって、少なくとも最初の数ステップの命令に対応する命令監視ビットが「０」であるスレッドに限定した上で、短サイクル命令を連続して多く実行する予定のスレッドに対して優先的に実行時間が割り当てられ、プロセッサ全体の処理効率を向上させることができる。
【００９１】
＜その他の変形、置換等＞
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００９２】
例えば、特に第２実施例において、過去に実行した命令に対応する命令監視ビットの流れをスレッド毎にＲＡＭ７４等に記憶させておき、記憶させたデータに基づいてスレッド毎の短サイクル命令と長サイクル命令の実行傾向を把握し、この実行傾向に基づいて実行スレッドの切り替えを行ってもよい。この場合、命令監視ビット列格納部３２＃０〜３２＃Ｎに保持された命令監視ビット列よりも、長期的な視点で実行スレッドの切り替えを行うことができる。
【００９３】
また、上記説明したいずれかの最適スレッド探索アルゴリズムを適用し、ある程度の時間が経過した段階で、各スレッドの処理時間（処理サイクル数）が極端に偏った場合には、各スレッドの処理時間を平均化するための実行スレッド切り替え制御が行われてもよい。
【００９４】
また、上記のような各スレッドの処理時間を平均化するための実行スレッド切り替え制御は、第１実施例又は第２実施例の変形例において、「命令監視ビット「０」が、最先の実行予定命令に対応するものを起点として所定数以上並んでいるスレッドが存在しない場合」に行われるようにしてもよい。すなわち、上記のような場合において、実行スレッドの切り替えを行わないのではなく、「所定の監視期間において、実行済み命令数が想定数と比較して少ない傾向のスレッドに（より具体的には、（実行済み命令数）／（想定数）の値が最も小さいスレッドに）実行スレッドを切り替える」としてよい。
【符号の説明】
【００９５】
１、２  マルチスレッド・プロセッサ
１０    フラッシュＲＯＭ
２０＃０〜２０＃Ｎ  プログラムカウンタ
３０    命令キュー
３２＃０〜３２＃Ｎ  命令監視ビット列格納部
４０    実行ユニット
４１    ＡＬＵ
４２    ＭＵＬ
４３    ＤＩＶ
４４    ＬＳＵ
５０＃０〜５０＃Ｎ  ＣＰＵレジスタ
５２    レジスタセット
６０    スレッド制御回路
７０    バス
７２    Ｉ／Ｏ
７４    ＲＡＭ
７６    ＤＭＡ
７８    ＩＮＴＣ
【図１】
2012128791.tif 000003
【図２】
2012128791.tif 000004
【図３】
2012128791.tif 000005
【図４】
2012128791.tif 000006
【図５】
2012128791.tif 000007
【図６】
2012128791.tif 000008
【図７】
2012128791.tif 000009
【図８】
2012128791.tif 000010
【図９】
2012128791.tif 000011
【図１０】
2012128791.tif 000012