(57)【要約】【課題】スーパースカラ動作を行うマルチスレッド処理装置において、スレッドの作動割合を適切に調整すること。【解決手段】複数のスレッドがハードウエアを部分的に共有して処理を行なうと共に、前記複数のスレッドの少なくとも一部がスーパースカラ動作を行うマルチスレッド処理装置であって、各スレッドの作動割合を設定する作動割合設定手段と、スレッド毎のスーパースカラ動作状況を監視する監視手段と、を備え、前記作動割合設定手段は、前記監視手段により把握されたスーパースカラ動作の時間あたりの発生回数が、設定されている作動割合に対して少ないスレッドの作動割合が増加するように、前記複数のスレッドのうち少なくとも一部の作動割合を修正することを特徴とする、マルチスレッド処理装置。【選択図】図４
2011180991.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドがハードウエアを部分的に共有して処理を行なうと共に、前記複数のスレッドの少なくとも一部がスーパースカラ動作を行うマルチスレッド処理装置であって、
各スレッドの作動割合を設定する作動割合設定手段と、
スレッド毎のスーパースカラ動作状況を監視する監視手段と、を備え、
前記作動割合設定手段は、前記監視手段により把握されたスーパースカラ動作の時間あたりの発生回数が、設定されている作動割合に対して少ないスレッドの作動割合が増加するように、前記複数のスレッドのうち少なくとも一部の作動割合を修正することを特徴とする、
マルチスレッド処理装置。
【請求項２】
請求項１に記載のマルチスレッド処理装置であって、
前記監視手段は、スーパースカラ動作の時間あたりの発生回数を、設定されている作動割合で除した値に基づく指標値をスレッド毎に算出しており、
前記作動割合設定手段は、前記算出される指標値のスレッド間差分の絶対値が閾値に比して大きいことを、前記複数のスレッドのうち少なくとも一部の作動割合を修正するトリガーの一つとすることを特徴とする、
マルチスレッド処理装置。
【請求項３】
請求項１又は２に記載のマルチスレッド処理装置であって、
複数の作動割合パターンを記憶した記憶手段を備え、
前記作動割合設定手段は、前記記憶手段に記憶されている複数の作動割合パターンから一の作動割合パターンを選択することにより、前記複数のスレッドのうち少なくとも一部の作動割合を修正する手段である、
マルチスレッド処理装置。
【請求項４】
請求項１又は２に記載のマルチスレッド処理装置であって、
前記作動割合設定手段は、前記各スレッドの作動割合を規定値ずつ変更することにより、前記複数のスレッドのうち少なくとも一部の作動割合を修正する手段である、
マルチスレッド処理装置。
【請求項５】
車両に搭載され、前記複数のスレッドは車載機器制御のための処理を実行する、
請求項１ないし４のいずれか１項に記載のマルチスレッド処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドがハードウエアを部分的に共有して処理を行うマルチスレッド処理装置に関する。
【背景技術】
【０００２】
従来、複数のスレッド毎にソースプログラムやレジスタファイル等を有し、スレッド間で演算回路等を共有して並行処理を行うマルチスレッド装置が知られている。このように、スレッド毎の構成要素が存在するマルチスレッド装置の機能は、ハードウエア・マルチスレッディングと称される。
【０００３】
同時マルチスレッディングを行うマルチスレッド中央演算装置についての発明が開示されている（例えば、特許文献１参照）。この装置では、ＣＰＵ内で各スレッドの実行命令数の目標値が設定され、一定周期で各スレッドの周期当たり実行命令数がカウントされ、そして、実行命令数と目標値との比較に基づくフィードバック制御動作により、優先度を用いた命令処理順序／頻度が修正されている。
【０００４】
一方、演算器等を含む処理手段を複数個備え、プログラムの各処理を必要に応じて複数の処理手段に振り分け、並行処理を行うマイクロコンピュータが知られている。このように、処理を複数の処理手段に振り分ける動作は、スーパースカラ（或いはスーパースケーラ）動作と称されている。スーパースカラ動作を行うことによって、処理時間の短縮化、処理の効率性の向上を図ることができる。
【０００５】
スーパースカラ動作を行うスーパースカラ・プロセッサについての発明が開示されている（例えば、特許文献２参照）。このプロセッサは、複数の実行ユニットへ同時実行可能な命令を並列に発行し実行するものであり、複数の実行ユニットの動作電源電圧及び動作クロック信号を指定する動作モードがソフトウエア制御により実行ユニットごとにそれぞれ設定され、動作電源電圧及び動作クロック信号の動作状態に応じて命令の発行先を変更している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−３４３８７２号公報
【特許文献２】特開２００２−３６６３５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１に記載のようにスレッドの作動割合を調整することで、各スレッドの処理の公平性をある程度確保することができる。しかしながら、特許文献１に記載の装置はスーパースカラ動作を行うことについて考慮されていない。従って、スーパースカラ動作を行うマルチスレッド処理装置において、スレッドの作動割合を適切に調整することができない。また、特定のスレッドが優先的に処理されるため、スレッド毎の処理負荷に応じた最適なスレッドの作動割合が実現されない。
【０００８】
本発明はこのような課題を解決するためのものであり、スーパースカラ動作を行うマルチスレッド処理装置において、スレッドの作動割合を適切に調整することを、主たる目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するための本発明の一態様は、
複数のスレッドがハードウエアを部分的に共有して処理を行なうと共に、前記複数のスレッドの少なくとも一部がスーパースカラ動作を行うマルチスレッド処理装置であって、
各スレッドの作動割合を設定する作動割合設定手段と、
スレッド毎のスーパースカラ動作状況を監視する監視手段と、を備え、
前記作動割合設定手段は、前記監視手段により把握されたスーパースカラ動作の時間あたりの発生回数が、設定されている作動割合に対して少ないスレッドの作動割合が増加するように、前記複数のスレッドのうち少なくとも一部の作動割合を修正することを特徴とする、
マルチスレッド処理装置である。
【００１０】
この本発明の一態様によれば、監視手段により把握されたスーパースカラ動作の時間あたりの発生回数が、設定されている作動割合に対して少ないスレッドの作動割合が増加するように、複数のスレッドのうち少なくとも一部の作動割合を修正するため、スレッドの作動割合を適切に調整することができる。
【００１１】
なお、「前記作動割合設定手段は、前記監視手段により把握されたスーパースカラ動作の時間あたりの発生回数が、設定されている作動割合に対して多いスレッドの作動割合が減少するように、前記複数のスレッドのうち少なくとも一部の作動割合を修正することを特徴とする」としても同内容である。
【００１２】
本発明の一態様において、
前記監視手段は、スーパースカラ動作の時間あたりの発生回数を、設定されている作動割合で除した値に基づく指標値をスレッド毎に算出しており、
前記作動割合設定手段は、前記算出される指標値のスレッド間差分の絶対値が閾値に比して大きいことを、前記複数のスレッドのうち少なくとも一部の作動割合を修正するトリガーの一つとすることを特徴とするものとしてもよい。
【００１３】
また、本発明の一態様において、
複数の作動割合パターンを記憶した記憶手段を備え、
前記作動割合設定手段は、前記記憶手段に記憶されている複数の作動割合パターンから一の作動割合パターンを選択することにより、前記複数のスレッドのうち少なくとも一部の作動割合を修正する手段であるものとしてもよい。
【００１４】
また、本発明の一態様において、
前記作動割合設定手段は、前記各スレッドの作動割合を規定値ずつ変更することにより、前記複数のスレッドのうち少なくとも一部の作動割合を修正する手段であるものとしてもよい。
【００１５】
また、本発明の一態様は、
車両に搭載され、前記複数のスレッドは車載機器制御のための処理を実行するものとしてもよい。
【発明の効果】
【００１６】
本発明によれば、スーパースカラ動作を行うマルチスレッド処理装置において、スレッドの作動割合を適切に調整することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１実施例に係るマルチスレッド処理装置１のシステム構成例である。
【図２】第１実施例に係るマルチスレッド処理装置１の部分構成例であり、主に命令発行部１２、スレッドスケジュール制御部２４、及びスーパースカラ監視部２６の内部構成を、より詳細に示した図である。
【図３】スーパースカラ動作によって処理効率が向上する様子を説明するための説明図である。
【図４】第１実施例に係る実行差分検出部２６ｂが実行差分値ΔＲｔを算出して実行差分判定部２６ｃに優先スレッド通知を出力するための処理フローである。
【図５】第１実施例に係る実行差分判定部２６ｃにより実行される処理フローである。
【図６】第１実施例に係るマルチスレッド処理装置１のスケジューリング比率が変更される様子を示す図である。
【図７】第２実施例に係るマルチスレッド処理装置２の部分構成例であり、主に命令発行部１２、スレッドスケジュール制御部２４、及びスーパースカラ監視部２６の内部構成を、より詳細に示した図である。
【図８】第２実施例に係る実行差分判定部２６ｃにより実行される処理フローである。
【図９】第２実施例に係るマルチスレッド処理装置２のスケジューリング比率が変更される様子を示す図である。
【図１０】第１実施例に係るマルチスレッド処理装置１と第２実施例に係るマルチスレッド処理装置２が、同様の命令を実行した場合の、スケジューリング比率の想定変化を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００１９】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係るマルチスレッド処理装置１について説明する。マルチスレッド処理装置１は、例えば車両に搭載され、各スレッドが種々の車載機器制御のための命令を実行する制御装置に、好適に適用される。
【００２０】
車載機器制御の例としては、例えばエンジン制御、ブレーキ制御、パワーステアリング等を制御するステアリング制御、ドアロック等を制御するボデー制御、ＶＳＣ（Vehicle  Stability  Control）やＶＤＩＭ（Vehicle  Dynamics  Integrated  Management）等の車両安定化制御、ＡＣＣ（Adaptive  Cruise  Control）等の運転支援制御、ナビゲーション制御等が挙げられる。
【００２１】
［基本構成］
図１は、本発明の第１実施例に係るマルチスレッド処理装置１のシステム構成例である。マルチスレッド処理装置１は、主要な構成として、命令バッファ１０＃０、１０＃１と、命令発行部１２と、命令デコーダ１４Ａ、１４Ｂと、レジスタ取得部１６Ａ、１６Ｂと、演算器１８Ａ、１８Ｂと、レジスタ群２０＃０、２０＃１と、パイプライン制御部２２と、スレッドスケジュール制御部２４と、スーパースカラ監視部２６と、を備える。
【００２２】
命令バッファ１０＃０、１０＃１、及びレジスタ群２０＃０、２０＃１は、複数のスレッド（＃０、＃１）毎に設けられている。ここで、スレッドとは、ハードウエアを部分的に共有して処理を行なう仮想的な処理主体をいい、本実施例の場合、命令バッファ１０＃０、１０＃１、及びレジスタ群２０＃０、２０＃１はスレッド毎に用意されているが、それ以外の命令発行部１２、命令デコーダ１４Ａ、１４Ｂ、レジスタ取得部１６Ａ、１６Ｂ、演算器１８Ａ、１８Ｂは、スレッド間で共用される。また、本実施例では、スレッドが２個設定されるものとし、これらをスレッド＃０、＃１と称している。
【００２３】
また、２系統の処理手段（命令デコーダ１４Ａ、レジスタ取得部１６Ａ、演算器１８Ａ（これらを系統Ａと称する）と、命令デコーダ１４Ｂ、レジスタ取得部１６Ｂ、演算器１８Ｂ（これらを系統Ｂと称する））は、スーパースカラ動作を可能としている。例えば、スーパースカラ動作を行わない場合は系統Ａのみを用いて処理を行い、スーパースカラ動作を行う場合は系統Ａ及びＢを用いて処理を行う、等の態様で利用される。
【００２４】
命令バッファ１０＃０、１０＃１は、図示しないＲＯＭ（Read  Only  Memory）やＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）等のプログラムメモリから取得したプログラム（命令列）をスレッド毎に格納する。
【００２５】
命令発行部１２は、マルチスレッディングやスーパースカラの設定状態に応じて各スレッドの命令を発行する。詳しくは後述する。
【００２６】
命令デコーダ１４Ａ、１４Ｂは、命令発行部１２から供給される命令を解読（デコード）し、レジスタ取得部１６Ａ、１６Ｂに出力する。命令デコーダ１４Ａ、１４Ｂによる解読結果は、例えば、演算の種別、ソースオペランド、結果の格納場所等である。
【００２７】
レジスタ取得部１６Ａ、１６Ｂは、命令デコーダ１４Ａ、１４Ｂから入力された命令に従ってレジスタ群２０＃０、２０＃１から演算対象値等を取得する。
【００２８】
演算器１８Ａ、１８Ｂは、演算の種類に応じて、レジスタ群２０＃０、２０＃１に記憶され、レジスタ取得部１６Ａ、１６Ｂにより取得された演算対象値に演算を施す。演算の内容は、ストア、ロード、加算、乗算、除算、分岐等である。例えばストア命令の場合、演算器１８Ａ、１８Ｂは、演算したアドレスを指定してデータバス等を介してＲＡＭへデータを書き込む。
【００２９】
レジスタ群２０＃０、２０＃１は、演算器１８Ａ、１８Ｂによる演算結果やステータス等を格納している。
【００３０】
パイプライン制御部２２は、以上のようなパイプライン制御の各ステージを制御する。具体的には、例えば、内部クロックに応じて、スレッド＃０、＃１に対応して設定されているプログラムカウンタのアドレスをプログラムメモリに出力し、読み出した命令を命令バッファ１０＃０、１０＃１に格納する等の制御を行っている。
【００３１】
スレッドスケジュール制御部２４は、スレッド＃０、＃１を内部クロックに応じて順に作動させる。また、スレッドスケジュール制御部２４には、図示しないＯＳ等からスレッド＃０、＃１の作動割合（時間配分）が与えられている。以下、この作動割合を、スケジューリング比率と称する。スケジューリング比率が、例えば、｛＃０：＃１＝６７［％］：３３［％］｝で与えられているとすると、スレッドスケジュール制御部２４は、例えばスレッド＃０を２クロックの間作動させ、次にスレッド＃１を１クロックの間作動させる。そして、この順で繰り返し処理を実行させる。
【００３２】
［特徴的な構成］
図２は、マルチスレッド処理装置１の部分構成例であり、主に命令発行部１２、スレッドスケジュール制御部２４、及びスーパースカラ監視部２６の内部構成を、より詳細に示した図である。
【００３３】
命令発行部１２は、同時実行判定部１２ａと、セレクタ１２ｂ、１２ｃと、を有する。同時実行判定部１２ａは、命令バッファ１０＃０、１０＃１から入力された命令のうち次に発行される２命令について、同時発行が可能であるかどうかを判定する。
【００３４】
同時発行が可能であるかどうかの判定は、オペランドチェック（先の命令の演算結果を後の命令が用いて演算を行うかをチェックする等）その他の手法により行われる。また、スレッド毎にスーパースカラ動作の許可又は不許可が設定されている場合は、これが加味されてよい。同時実行判定部１２ａは、命令バッファ１０＃０、１０＃１から入力された複数個の命令を格納するバッファを備えてもよい。
【００３５】
スレッドスケジュール制御部２４は、スレッドスケジュール設定レジスタ２４ａ、２４ｂ、２４ｃと、を備える。セレクタ２４ｄと、スレッドスケジューリング部２４ｅと、を備える。
【００３６】
スレッドスケジュール設定レジスタ２４ａ、２４ｂ、２４ｃは、予め定められた複数パターンのスケジューリング比率を、それぞれ規定している。例えば、スレッドスケジュール設定レジスタ２４ａは、｛＃０：＃１＝６７［％］：３３［％］｝と規定しており、スレッドスケジュール設定レジスタ２４ｂは、｛＃０：＃１＝５０［％］：５０［％］｝と規定しており、スレッドスケジュール設定レジスタ２４ｃは、｛＃０：＃１＝３３［％］：６７［％］｝と規定している（以下、これを前提とする）。
【００３７】
セレクタ２４ｄは、後述するようにスーパースカラ監視部２６から入力される優先スレッド信号に基づいて、スレッドスケジュール設定レジスタ２４ａ、２４ｂ、２４ｃのいずれかに規定されたスケジューリング比率を選択して、スレッドスケジューリング部２４ｅ及びスーパースカラ監視部２６に出力する。
【００３８】
スレッドスケジューリング部２４ｅは、前述のように、内部クロックに応じて、且つ指定されているスレッドスケジュール設定レジスタが規定するスケジューリング比率を実現するようにスレッドを切り替える。具体的には、内部クロックに同期してセレクタ１２ｂ、１２ｃにセレクト信号を送出し、作動すべきスレッドの命令がデコーダ１４Ａ及び１４Ｂに出力されるように制御する。なお、同時実行判定部１２ａは、予め同時発行が可能であるかどうかの判定をスレッド毎に行っており、その結果を内部に保持しているものとする。
【００３９】
同時実行判定部１２ａが同時発行を行う場合、セレクタ１２ｂ、１２ｃに、当該スレッドの連続する２つの命令がそれぞれ出力される。これによって、２つの命令が命令デコーダ１４Ａ、１４Ｂに同時に発行されることになり、スーパースカラ動作が行われる。
【００４０】
図３は、スーパースカラ動作によって処理効率が向上する様子を説明するための説明図である。図中、左側の処理の流れは、シングルスレッドマイコンがシングルスカラ（スーパースカラ動作を行わない）によって処理を行う様子を模式的に示している。本図において、命令Ａ３と命令Ａ４は、レイテンシの大きいメモリアクセスを含む等の理由により２クロックを要する命令である（パイプラインストールが１クロック分生じる）。
【００４１】
一方、図３中、右側の処理の流れは、シングルスレッドマイコンがスーパースカラ動作を行って処理を行う様子を模式的に示している。本図において、命令Ａ１と命令Ａ２、及び命令Ａ４と命令Ａ５は同時実行が不可能な命令である。こうした命令組に対しては、命令の同時発行がされず、スーパースカラ動作は行われない。他方、命令Ａ２と命令Ａ３、命令Ａ５と命令Ａ６は、同時実行が可能な命令である。こうした命令組に対しては、命令の同時発行がされてスーパースカラ動作が行われる。この結果、左側の処理の流れに比して、処理効率が向上していることが判る。
【００４２】
［スケジューリング比率（作動割合）の修正］
スーパースカラ監視部２６は、スレッド毎のスーパースカラ動作状況を監視しており、スレッド毎のスーパースカラ実行カウンタ２６ａ＃０、２６ａ＃１と、実行差分検出部２６ｂと、実行差分判定部２６ｃと、実行差分閾値レジスタ２６ｄと、監視周期レジスタ２６ｅと、を備える。
【００４３】
そして、スレッドスケジュール制御部２４は、スーパースカラ監視部２６により把握された各スレッドのスーパースカラ動作の時間あたりの発生回数に近づくように、スケジューリング比率（作動割合）を修正する。以下、これについて説明する。
【００４４】
スーパースカラ実行カウンタ２６ａ＃０、２６ａ＃１は、それぞれスレッド＃０とスレッド＃１におけるスーパースカラ動作が実行された回数Ｃｎｔ＃０、Ｃｎｔ＃１をカウントしている。
【００４５】
実行差分検出部２６ｂには、前述したセレクタ２４ｄから出力され、その時点において各スレッドに割り当てられているスケジューリング比率を示す信号Ｗ＃０、Ｗ＃１が入力されており、以下のように実行差分値ΔＲｔを算出する。
【００４６】
図４は、実行差分検出部２６ｂが実行差分値ΔＲｔを算出して実行差分判定部２６ｃに優先スレッド通知を出力するための処理フローである。本フローは、例えば以下に説明する監視周期毎に実行される。
【００４７】
まず、実行差分検出部２６ｂは、各スレッドのスーパースカラ実行比率Ｒｔ＃０、Ｒｔ＃１を、次式（１）、（２）に従って算出する（Ｓ１００）。式中、Ｔｃｌｋは、監視周期であり、監視周期レジスタ２６ｅによって保持されている。各スレッドのスーパースカラ実行比率Ｒｔ＃０、Ｒｔ＃１は、それぞれ、その時点におけるスケジューリング比率に対するスーパースカラ動作の発生回数を示している。
【００４８】
Ｒｔ＃０＝Ｃｎｔ＃０／Ｔｃｌｋ／Ｗ＃０  …（１）
Ｒｔ＃１＝Ｃｎｔ＃１／Ｔｃｌｋ／Ｗ＃１  …（２）。
【００４９】
次に、実行差分検出部２６ｂは、次式（３）に従って実行差分値ΔＲｔを算出する（Ｓ１０２）。
【００５０】
ΔＲｔ＝Ｒｔ＃０−Ｒｔ＃１  …（３）。
【００５１】
そして、実行差分値ΔＲｔを閾値Ｔｈ、−Ｔｈと比較する（Ｓ１０４〜Ｓ１０６）。閾値Ｔｈは、実行差分閾値レジスタ２６ｄによって保持されている。
【００５２】
実行差分値ΔＲｔが−Ｔｈ未満である場合は、スレッド＃０を優先すべき旨の優先スレッド通知を出力する（Ｓ１０８）。実行差分値ΔＲｔが−Ｔｈ未満であるとは、スレッド＃０におけるスーパースカラ動作の発生回数が、スケジューリング比率に対して少ないことを意味している。従って、後述するような処理によってスレッド＃０のスケジューリング比率を増加させ、各スレッドのスループットを平準化することを意図している。
【００５３】
実行差分値ΔＲｔが−Ｔｈ以上、Ｔｈ以下である場合は、スレッド優先なしを旨とする優先スレッド通知を出力する（Ｓ１１０）。実行差分値ΔＲｔが−Ｔｈ以上、Ｔｈ以下であるとは、スレッド＃０、＃１におけるスーパースカラ動作の発生回数が、概ねスケジューリング比率と合致していることを意味している。従って、各スレッド＃のスケジューリング比率を基準比率（例えば、｛＃０：＃１＝５０［％］：５０［％］｝）に戻す。
【００５４】
実行差分値ΔＲｔがＴｈを超えるである場合は、スレッド＃１を優先すべき旨の優先スレッド通知を出力する（Ｓ１１２）。実行差分値ΔＲｔがＴｈを超えるとは、スレッド＃１におけるスーパースカラ動作の発生回数が、スケジューリング比率に対して少ないことを意味している。従って、後述するような処理によってスレッド＃１のスケジューリング比率を増加させ、各スレッドのスループットを平準化することを意図している。
【００５５】
Ｓ１１０〜Ｓ１１４の処理が終了すると、スーパースカラ実行カウンタ２６ａ＃０、２６ａ＃１のカウンタ値をリセットする（Ｓ１１４）。
【００５６】
図５は、実行差分判定部２６ｃにより実行される処理フローである。本フローは、例えば所定周期毎に繰り返し実行される。
【００５７】
まず、実行差分判定部２６ｃは、実行差分検出部２６ｂから優先スレッド通知が入力されるまで待機する（Ｓ２００）。
【００５８】
そして、優先スレッド通知がいずれであるかを判定する（Ｓ２０２〜Ｓ２０４）。
【００５９】
優先スレッド通知が、スレッド＃０を優先すべき旨の通知である場合、スレッドスケジュール設定レジスタ２４ａに規定されたスケジューリング比率（前述のように、｛＃０：＃１＝６７［％］：３３［％］｝）を選択して、スケジューリング比率を示す信号を出力するように、セレクタ２４ｄに指示信号を出力する（Ｓ２０６）。
【００６０】
優先スレッド通知が、スレッド優先なしを旨とする通知である場合、スレッドスケジュール設定レジスタ２４ｂに規定されたスケジューリング比率（前述のように、｛＃０：＃１＝５０［％］：５０［％］｝）を選択して、スケジューリング比率を示す信号を出力するように、セレクタ２４ｄに指示信号を出力する（Ｓ２０８）。
【００６１】
優先スレッド通知が、スレッド＃１を優先すべき旨の通知である場合、スレッドスケジュール設定レジスタ２４ｃに規定されたスケジューリング比率（前述のように、｛＃０：＃１＝３３［％］：６７［％］｝）を選択して、スケジューリング比率を示す信号を出力するように、セレクタ２４ｄに指示信号を出力する（Ｓ２１０）。
【００６２】
図６は、図４及び図５で説明した処理を実行することにより、マルチスレッド処理装置１のスケジューリング比率が変更される様子を示す図である。本図において、監視周期Ｔｃｌｋは１２８クロック、スケジューリング比率の初期状態は｛＃０：＃１＝５０［％］：５０［％］｝、実行差分閾値Ｔｈ＝３０とする。
【００６３】
まず、第１の監視区間（Ｎ）において、スレッド＃０、＃１のスーパースカラ動作の発生回数Ｃｎｔ＃０、Ｃｎｔ＃１は、それぞれ４８、２４であった。この場合、実行差分検出部２６ｂが算出する実行差分値ΔＲｔは、｛４８／１２８／０．５｝−｛２４／１２８／０．５｝＝３７．５となる。係る数値は、閾値Ｔｈ（＝３０）を超えており、スレッド＃０におけるスーパースカラ動作の発生回数がスケジューリング比率に比してかなり多いことを意味している。この結果、設定されているスケジューリング比率を加味して、スレッド＃０が処理する命令数はスレッド＃１が処理する命令数に対して多くなり、スレッド間でスループットが偏っていることになる（スケジューリング比率によって意図されているスループットから乖離している）。
【００６４】
従って、第２の監視区間に移行する際に、スレッド＃０のスケジューリング比率が小さくなるように、スケジューリング比率が修正される（図４におけるＳ１１２参照）。修正されたスケジューリング比率は、｛＃０：＃１＝３３［％］：６７［％］｝となる。
【００６５】
第２の監視区間（Ｎ＋１）において、スレッド＃０、＃１のスーパースカラ動作の発生回数Ｃｎｔ＃０、Ｃｎｔ＃１は、それぞれ３２、３２であった。この場合、実行差分検出部２６ｂが算出する実行差分値ΔＲｔは、｛３２／１２８／０．３３｝−｛３２／１２８／０．６７｝＝０となる。係る数値は、閾値−Ｔｈ以上、Ｔｈ以下であり、スレッド＃０におけるスーパースカラ動作の発生回数がスケジューリング比率と概ね合致していることを意味している。
【００６６】
従って、第３の監視区間に移行する際に、スケジューリング比率が基準比率に戻される（図４におけるＳ１１０参照）。修正されたスケジューリング比率は、｛＃０：＃１＝５０［％］：５０［％］｝となる。
【００６７】
第３の監視区間（Ｎ＋２）において、スレッド＃０、＃１のスーパースカラ動作の発生回数Ｃｎｔ＃０、Ｃｎｔ＃１は、それぞれ４０、２８であった。この場合、実行差分検出部２６ｂが算出する実行差分値ΔＲｔは、｛４０／１２８／０．５０｝−｛２８／１２８／０．５０｝＝１８．７５となる。係る数値は、閾値−Ｔｈ以上、Ｔｈ以下であり、スレッド＃０におけるスーパースカラ動作の発生回数がスケジューリング比率と概ね合致していることを意味している。
【００６８】
従って、図示しない第４の監視区間に移行する際に、スケジューリング比率が基準比率に戻されるが、第３の監視区間においても基準比率を採用しているため、修正されたスケジューリング比率は、｛＃０：＃１＝５０［％］：５０［％］｝のままである。
【００６９】
以上説明した本実施例のマルチスレッド処理装置１によれば、スケジューリング比率の割にスーパースカラ動作の発生回数が少ないスレッドについては、スケジューリング比率を増加させるように修正を行うため、スケジューリング比率によって意図されているスループットからの乖離を抑制することができる。この結果、スレッドのスケジューリング比率（作動割合）を適切に調整することができる。
【００７０】
＜第２実施例＞
以下、図面を参照し、本発明の第１実施例に係るマルチスレッド処理装置２について説明する。マルチスレッド処理装置２は、例えば車両に搭載され、各スレッドが種々の車載機器制御のための命令を実行する制御装置に、好適に適用される。
【００７１】
車載機器制御の例としては、例えばエンジン制御、ブレーキ制御、パワーステアリング等を制御するステアリング制御、ドアロック等を制御するボデー制御、ＶＳＣ（Vehicle  Stability  Control）やＶＤＩＭ（Vehicle  Dynamics  Integrated  Management）等の車両安定化制御、ＡＣＣ（Adaptive  Cruise  Control）等の運転支援制御、ナビゲーション制御等が挙げられる。
【００７２】
［基本構成］
基本構成については、第１実施例と同様であるため、図１を参照することとし、説明を省略する。
【００７３】
［特徴的な構成］
図７は、マルチスレッド処理装置２の部分構成例であり、主に命令発行部１２、スレッドスケジュール制御部２４、及びスーパースカラ監視部２６の内部構成を、より詳細に示した図である。
【００７４】
命令発行部１２については、第１実施例と同様であるため、説明を省略する。
【００７５】
スレッドスケジュール制御部２４は、スレッドスケジュール設定レジスタ２４ｆと、スレッドスケジュール補正部２４ｇと、スレッドスケジューリング部２４ｈと、を備える。
【００７６】
スレッドスケジュール設定レジスタ２４ａは、スケジューリング比率の初期値を記憶している。スケジューリング比率の初期値は、例えば、｛＃０：＃１＝５０［％］：５０［％］｝である。
【００７７】
スレッドスケジュール補正部２４ｇは、後述するようにスーパースカラ監視部２６から入力される優先スレッド信号に基づいてスケジューリング比率を補正し、補正後のスケジューリング比率をスレッドスケジューリング部２４ｈ及びスーパースカラ監視部２６に出力する。なお、スレッドスケジュール補正部２４ｇは、自己が補正したスケジューリング比率の現行値を保持するためのレジスタ等を内蔵する。
【００７８】
スレッドスケジューリング部２４ｈは、第１実施例におけるスレッドスケジューリング部２４ｅと同様の機能を有するため、説明を省略する。
【００７９】
［スケジューリング比率（作動割合）の修正］
スーパースカラ監視部２６は、スレッド毎のスーパースカラ動作状況を監視しており、スレッド毎のスーパースカラ実行カウンタ２６ａ＃０、２６ａ＃１と、実行差分検出部２６ｂと、実行差分判定部２６ｃと、実行差分閾値レジスタ２６ｄと、監視周期レジスタ２６ｅと、を備える。なお、これらの構成要素の機能は、実行差分判定部２６ｃを除き、第１実施例と同様であるため、それぞれについての説明は省略する、
図８は、第２実施例に係る実行差分判定部２６ｃにより実行される処理フローである。本フローは、例えば所定周期毎に繰り返し実行される。
【００８０】
まず、実行差分判定部２６ｃは、実行差分検出部２６ｂから優先スレッド通知が入力されるまで待機する（Ｓ３００）。
【００８１】
そして、優先スレッド通知がいずれであるかを判定する（Ｓ３０２〜Ｓ３０４）。
【００８２】
優先スレッド通知が、スレッド＃０を優先すべき旨の通知である場合、スレッド＃０のスケジューリング比率を５［％］増加させ、スレッド＃１のスケジューリング比率を５［％］減少させるように指示する信号をスレッドスケジュール補正部２４ｇに出力する（Ｓ３０６）。
【００８３】
優先スレッド通知が、スレッド＃１を優先すべき旨の通知である場合、スレッド＃０のスケジューリング比率を５［％］減少させ、スレッド＃１のスケジューリング比率を５［％］増加させるように指示する信号をスレッドスケジュール補正部２４ｇに出力する（Ｓ３０８）。
【００８４】
優先スレッド通知が、スレッド優先なしを旨とする通知である場合、何も処理を行わない。この結果、現行のスケジューリング比率が維持されることになる。
【００８５】
なお、図９は、マルチスレッド処理装置２のスケジューリング比率が変更される様子を示す図である。本図においては、ＣＰＵが１２８［ＭＨｚ］で動作し、スケジューリング比率は１／１６刻みで変更されるものとした。図中、レジスタ設定とは、スレッドスケジュール補正部２４ｇが内蔵するレジスタの設定値を意味する。
【００８６】
以上説明した本実施例のマルチスレッド処理装置２によれば、第１実施例と同様、スケジューリング比率の割にスーパースカラ動作の発生回数が少ないスレッドについては、スケジューリング比率を増加させるように修正を行うため、スケジューリング比率によって意図されているスループットからの乖離を抑制することができる。この結果、スレッドのスケジューリング比率（作動割合）を適切に調整することができる。
【００８７】
以下、第１実施例と第２実施例の比較について述べる。図１０は、第１実施例に係るマルチスレッド処理装置１と第２実施例に係るマルチスレッド処理装置２が、同様の命令を実行した場合の、スケジューリング比率の想定変化を示す図である。図１０（Ａ）は、第１実施例に係るマルチスレッド処理装置１におけるスケジューリング比率の想定変化を示しており、図１０（Ｂ）は、第２実施例に係るマルチスレッド処理装置２におけるスケジューリング比率の想定変化を示している。
【００８８】
図示するように、第１実施例に係るマルチスレッド処理装置１では、スケジューリング比率が、｛＃０：＃１＝５０［％］：５０［％］｝→（スレッド＃１優先）→｛＃０：＃１＝３３［％］：６７［％］｝→（優先なし）→｛＃０：＃１＝５０［％］：５０［％］｝→（スレッド＃１）優先→｛＃０：＃１＝３３［％］：６７［％］｝…のように、比較的大きい刻みでスケジューリング比率が変更されることが想定される。
【００８９】
一方、第２実施例に係るマルチスレッド処理装置２では、スケジューリング比率が、｛＃０：＃１＝５０［％］：５０［％］｝→（スレッド＃１優先）→｛＃０：＃１＝４５［％］：５５［％］｝→（スレッド＃１優先）→｛＃０：＃１＝４０［％］：６０［％］｝→（優先なし）→｛＃０：＃１＝４０［％］：６０［％］｝…のように、比較的小さい刻みで緩やかにスケジューリング比率が変更されることが想定される。
【００９０】
すなわち、第２実施例に係るマルチスレッド処理装置２の方が、より細やかにスケジューリング比率を調整することができる。反面、スケジューリング比率補正のための加算機能減算機能（一定幅でなく一定割合変化させる場合は乗算機能や除算機能）を有する必要があるため、装置のコストや重量が増加するというデメリットが存在する。
【００９１】
従って、第１実施例と第２実施例のいずれを採用するかは、高精度な調整と、コストや重量の低減とのいずれを重視するかによって決定される。
【００９２】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００９３】
例えば、第１実施例、第２実施例共に、スレッド数が２個であるものとして説明したが、本発明は、スレッド数が３個以上である場合にも適用可能である。この場合、例えばスーパースカラ実行比率Ｒｔが最も大きいスレッドと最も小さいスレッドの間で実行差分値ΔＲｔを算出し、これについて第１実施例や第２実施例と同様の処理を行うものとすればよい。
【００９４】
また、第２実施例において、スケジューリング比率を一定幅変化させるのではなく、一定割合変化させる（例えば１割ずつ変化させる場合、５０［％］→４５［％］→４０．５［％］等）ものとしてもよい。
【符号の説明】
【００９５】
１、２  マルチスレッド処理装置
１０＃、１０＃１  命令バッファ
１２    命令発行部
１２ａ  同時実行判定部
１２ｂ、１２ｃ  セレクタ
１４Ａ、１４Ｂ  命令デコーダ
１６Ａ、１６Ｂ  レジスタ取得部
１８Ａ、１８Ｂ  演算器
２０＃０、２０＃１  レジスタ群
２２    パイプライン制御部
２４    スレッドスケジュール制御部
２４ａ、２４ｂ、２４ｃ、２４ｆ  スレッドスケジュール設定レジスタ
２４ｄ  セレクタ
２４ｅ、２４ｈ  スレッドスケジューリング部
２４ｇ  スレッドスケジュール補正部
２６    スーパースカラ監視部
２６ａ＃０、２６ａ＃１  スーパースカラ実行カウンタ
２６ｂ  実行差分検出部
２６ｃ  実行差分判定部
２６ｄ  実行差分閾値レジスタ
２６ｅ  監視周期レジスタ
【図１】
2011180991.tif 000003
【図２】
2011180991.tif 000004
【図３】
2011180991.tif 000005
【図４】
2011180991.tif 000006
【図５】
2011180991.tif 000007
【図６】
2011180991.tif 000008
【図７】
2011180991.tif 000009
【図８】
2011180991.tif 000010
【図９】
2011180991.tif 000011
【図１０】
2011180991.tif 000012