(57)【要約】【課題】処理負荷の変動に柔軟に対応することが可能なマルチスレッド処理装置、及びその帯域変更制御方法を提供すること。【解決手段】複数のスレッドがハードウエアを部分的に共有して処理を行なうマルチスレッド処理装置であって、前記複数のスレッドに対して、スレッドの作動割合である帯域を設定する帯域設定手段と、前記複数のスレッドに含まれる各スレッドの処理負荷を監視し、該各スレッドの処理負荷が平滑化するような帯域変更を前記帯域設定手段に指示する帯域変更制御手段と、を備えるマルチスレッド処理装置。【選択図】図１
2011128767.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドがハードウエアを部分的に共有して処理を行なうマルチスレッド処理装置であって、
前記複数のスレッドに対して、スレッドの作動割合である帯域を設定する帯域設定手段と、
前記複数のスレッドに含まれる各スレッドの処理負荷を監視し、該各スレッドの処理負荷が平滑化するような帯域変更を前記帯域設定手段に指示する帯域変更制御手段と、
を備えるマルチスレッド処理装置。
【請求項２】
前記帯域変更制御手段は、
前記複数のスレッドに含まれる各スレッドの単位時間あたりの有効命令実行数を監視する実行状況監視手段と、
前記実行状況監視手段から取得した各スレッドの単位時間あたりの有効命令実行数に前記帯域設定手段によりその時点で設定されている帯域を加味して、前記複数のスレッドに含まれる各スレッドの処理負荷を算出する処理負荷算出手段と、
該処理負荷算出手段により算出された処理負荷の低いスレッドから処理負荷の高いスレッドに帯域を移動させるように前記帯域設定手段に指示する帯域変更管理手段と、
を備える手段である、
請求項１に記載のマルチスレッド処理装置。
【請求項３】
前記帯域変更管理手段は、前記処理負荷算出手段により算出された処理負荷の差が所定値量以上である場合に、処理負荷の低いスレッドから処理負荷の高いスレッドに帯域を移動させるように前記帯域設定手段に指示する手段である、
請求項２に記載のマルチスレッド処理装置。
【請求項４】
前記複数のスレッドのうちいずれかが実行中のタスクの残存時間を監視する残存時間監視手段を備え、
前記帯域変更制御手段は、前記残存時間監視手段により監視されているタスクの残存時間を基準としたタイミングで、前記帯域設定手段への指示を実行する手段である、
請求項１ないし３のいずれか１項に記載のマルチスレッド処理装置。
【請求項５】
前記帯域変更制御手段は、前記残存時間監視手段により監視されているタスクの残存時間の減少に応じて前記各スレッドの処理負荷の差を段階的に減少させるような帯域変更を、前記帯域設定手段に指示する手段である、
請求項４に記載のマルチスレッド処理装置。
【請求項６】
前記残存時間監視手段は、前記タスクの残存時間が経過したときに該タスクが終了していない場合には、該タスクを強制終了させる手段である、
請求項４又は５に記載のマルチスレッド処理装置。
【請求項７】
前記帯域変更監視手段は、前記複数のスレッドのうち処理期限が設定されているタスクを実行中のスレッドの処理負荷が、処理期限が設定されていないタスクを実行中のスレッドの処理負荷に比して低い場合には、処理期限が設定されているタスクを実行中のスレッドから処理期限が設定されていないタスクを実行中のスレッドへ帯域を移動させる指示を行わないことを特徴とする、
請求項１ないし６のいずれか１項に記載のマルチスレッド処理装置。
【請求項８】
複数のスレッドがハードウエアを部分的に共有して処理を行なうマルチスレッド処理装置において、前記複数のスレッドに対して設定される、スレッドの作動割合である帯域の変更制御方法であって、
前記複数のスレッドに含まれる各スレッドの処理負荷を算出する第１のステップと、
前記算出した各スレッドの処理負荷のうち最も高いものと最も低いものとの差が閾値以上であるか否かを判定する第２のステップと、
前記算出した各スレッドの処理負荷のうち最も高いものと最も低いものとの差が閾値以上である場合に、前記最も処理負荷が低いスレッドから最も処理負荷が高いスレッドに帯域を規定量移動させる第３のステップと、
を所定時間毎に繰り返し実行することを特徴とする、
マルチスレッド処理装置における帯域変更制御方法。
【請求項９】
前記第３のステップにおいて、前記最も処理負荷が低いスレッドが実行中のタスクに処理期限が設定されている場合には、前記算出した各スレッドの処理負荷のうち最も高いものと最も低いものとの差が閾値以上である場合であっても、前記最も処理負荷が低いスレッドから最も処理負荷が高いスレッドに帯域を規定量移動させないことを特徴とする、
請求項８に記載のマルチスレッド処理装置における帯域変更制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプログラムを独立に実行可能なマルチスレッド処理装置に関し、特に、複数のスレッドがハードウエアを部分的に共有して処理を行なうハードウエア・マルチスレッディング機能を有するマルチスレッド処理装置、及びその帯域変更制御方法に関する。
【背景技術】
【０００２】
近年、プロセッサの性能向上に伴い、複数の機能を一つのプロセッサにより実現させるための技術が研究・実用化されている。例えば、車両に搭載される車載制御装置の分野では、ある車載機器を制御する制御装置と他の車載機器を制御する制御装置（例えば変速機の制御装置とエンジンの制御装置等）を統合して、コンピュータ・ハードウエアを縮小し、コストや重量の低減を図る動きが見られる。
【０００３】
こうしたハードウエア統合の一手法として、ハードウエア・マルチスレッディングと称されるものが知られている。ハードウエア・マルチスレッディングは、命令の出所や演算結果の格納場所を異にする複数のスレッドが、命令デコーダや演算回路等のハードウエアを共有して処理を行なうものである。ハードウエア・マルチスレッディングにおいては、異なるスレッドが同時に処理を行なうことは困難であるため、各スレッドに帯域を設定する処理（スケジューリング）が行われている。帯域とは、各スレッドがハードウエアを使用可能な時間の割合、すなわち各スレッドの作動割合を意味する。
【０００４】
これに対し、単一または複数種類のプロセッサユニットを複数個有するシステムについての発明が開示されている（例えば、特許文献１参照）。このシステムでは、入力プログラムの解析を行って当該入力プログラムの並列性を抽出し、処理プロセッサ情報に基づいてプロセッサユニットに対するプログラム部分の割り当て（スケジューリング）を行なっている。更には、並列タスク中で、専用コンパイラにより効率的に処理可能な部分の抽出、及び処理時間の見積もりを行なうことにより、スケジューリングを行なっている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−３２８４１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、マルチスレッド処理装置が現実に使用される場面においては、割り込みの発生等によって処理の遅延が生じたり、同一タスクであっても扱うデータ量が変動することによって処理負荷が変動したりするため、プログラムの内容やハードウエアの性能のみから処理負荷を事前に正確に見積もることは困難である。
【０００７】
従って、上記特許文献１に記載のシステムでは、プロセッサ間の特質の違い等の起因する静的な処理負荷のバラツキを解消することは可能であるが、環境等に応じてタスクの処理負荷が変動する動的な処理負荷のバラツキを解消することができない。
【０００８】
ここで、動的な処理負荷のバラツキを吸収可能とすべく、プロセッサの演算能力を過剰に高いものにすると、装置のコストが増大してしまう。これでは、前述したようなハードウエアの統合によるコストや重量の低減という目的を達成することはできない。
【０００９】
本発明はこのような課題を解決するためのものであり、処理負荷の変動に柔軟に対応することが可能なマルチスレッド処理装置、及びその帯域変更制御方法を提供することを、主たる目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明の一態様は、
複数のスレッドがハードウエアを部分的に共有して処理を行なうマルチスレッド処理装置であって、
前記複数のスレッドに対して、スレッドの作動割合である帯域を設定する帯域設定手段と、
前記複数のスレッドに含まれる各スレッドの処理負荷を監視し、該各スレッドの処理負荷が平滑化するような帯域変更を前記帯域設定手段に指示する帯域変更制御手段と、
を備えるマルチスレッド処理装置である。
【００１１】
この本発明の一態様によれば、複数のスレッドに含まれる各スレッドの処理負荷を監視し、各スレッドの処理負荷が平滑化するような帯域変更を帯域設定手段に指示するため、処理負荷の変動に柔軟に対応することができる。
【００１２】
本発明の一態様において、
前記帯域変更制御手段は、
前記複数のスレッドに含まれる各スレッドの単位時間あたりの有効命令実行数を監視する実行状況監視手段と、
前記実行状況監視手段から取得した各スレッドの単位時間あたりの有効命令実行数に前記帯域設定手段によりその時点で設定されている帯域を加味して、前記複数のスレッドに含まれる各スレッドの処理負荷を算出する処理負荷算出手段と、
該処理負荷算出手段により算出された処理負荷の低いスレッドから処理負荷の高いスレッドに帯域を移動させるように前記帯域設定手段に指示する帯域変更管理手段と、
を備える手段であるものとしてもよい。
【００１３】
また、本発明の一態様において、
前記帯域変更管理手段は、前記処理負荷算出手段により算出された処理負荷の差が所定値量以上である場合に、処理負荷の低いスレッドから処理負荷の高いスレッドに帯域を移動させるように前記帯域設定手段に指示する手段であるものとしてもよい。
【００１４】
また、本発明の一態様において、
前記複数のスレッドのうちいずれかが実行中のタスクの残存時間を監視する残存時間監視手段を備え、
前記帯域変更制御手段は、前記残存時間監視手段により監視されているタスクの残存時間を基準としたタイミングで、前記帯域設定手段への指示を実行する手段であるものとしてもよい。
【００１５】
この場合、
前記帯域変更制御手段は、前記残存時間監視手段により監視されているタスクの残存時間の減少に応じて前記各スレッドの処理負荷の差を段階的に減少させるような帯域変更を、前記帯域設定手段に指示する手段であるものとしてもよい。
【００１６】
また、本発明の一態様において、
前記残存時間監視手段は、前記タスクの残存時間が経過したときに該タスクが終了していない場合には、該タスクを強制終了させる手段であるものとしてもよい。
【００１７】
また、本発明の一態様において、
前記帯域変更監視手段は、前記複数のスレッドのうち処理期限が設定されているタスクを実行中のスレッドの処理負荷が、処理期限が設定されていないタスクを実行中のスレッドの処理負荷に比して低い場合には、処理期限が設定されているタスクを実行中のスレッドから処理期限が設定されていないタスクを実行中のスレッドへ帯域を移動させる指示を行わないことを特徴とするものとしてもよい。
【００１８】
こうすれば、比較的緊急性の高い、処理期限が設定されているタスクを優先的に実行することができる。
【００１９】
本発明の他の態様は、
複数のスレッドがハードウエアを部分的に共有して処理を行なうマルチスレッド処理装置において、前記複数のスレッドに対して設定される、スレッドの作動割合である帯域の変更制御方法であって、
前記複数のスレッドに含まれる各スレッドの処理負荷を算出する第１のステップと、
前記算出した各スレッドの処理負荷のうち最も処理負荷が高いものと最も処理負荷が低いものとの差が閾値以上であるか否かを判定する第２のステップと、
前記算出した各スレッドの処理負荷のうち最も高いものと最も低いものとの差が閾値以上である場合に、前記最も処理負荷が低いスレッドから最も処理負荷が高いスレッドに帯域を規定量移動させる第３のステップと、
を所定時間毎に繰り返し実行することを特徴とする、
マルチスレッド処理装置における帯域変更制御方法である。
【００２０】
この本発明の他の態様によれば、算出した各スレッドの処理負荷のうち最も処理負荷が高いものと最も処理負荷が低いものとの差が閾値以上である場合に、最も処理負荷が低いスレッドから最も処理負荷が高いスレッドに帯域を規定量移動させるため、処理負荷の変動に柔軟に対応することができる。
【００２１】
本発明の他の態様において、
前記第３のステップにおいて、前記最も処理負荷が低いスレッドが実行中のタスクに処理期限が設定されている場合には、前記算出した各スレッドの処理負荷のうち最も高いものと最も低いものとの差が閾値以上である場合であっても、前記最も処理負荷が低いスレッドから最も処理負荷が高いスレッドに帯域を規定量移動させないことを特徴とするものとしてもよい。
【００２２】
こうすれば、比較的緊急性の高い、処理期限が設定されているタスクを優先的に実行することができる。
【発明の効果】
【００２３】
本発明によれば、処理負荷の変動に柔軟に対応することが可能なマルチスレッド処理装置、及びその帯域変更制御方法を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施例に係るマルチスレッド処理装置１のシステム構成例である。
【図２】残存時間監視装置５０の構成及び接続関係を示す図である。
【図３】実行状況監視装置３０の構成及び接続関係を示す図である。
【図４】スケジュールフィードバック装置４０の構成及び接続関係を示す図である。
【図５】帯域変更管理部４４が、残存時間監視装置５０により監視されているタスクの残存時間を基準としたタイミングで各スレッドの処理負荷の差を段階的に減少させる様子を示す図である。
【図６】本実施例のスケジュールフィードバック装置４０により実行される特徴的な処理の流れを示すフローチャートである。
【図７】スケジュールフィードバック装置４０のような帯域変更のための構成を有さない従来構成のマルチスレッド処理装置が複数のタスクを実行する際の処理の流れを示す図である。
【図８】図７と同様の従来構成のマルチスレッド処理装置が時間内にタスクを終了できなかった場合の処理の流れを示す図である。
【図９】本実施例のマルチスレッド処理装置１による処理の流れを概念的に示す図である。
【図１０】２つのＣＰＵがそれぞれ実行していた処理の計算量を示す図である。
【図１１】従来構成のマルチスレッド処理装置が実行する場合の計算量を示す図である。
【図１２】本実施例のマルチスレッド処理装置１により、２つのＣＰＵが実行する処理を統合した場合の計算量の変動を模式的に示す図である。
【発明を実施するための形態】
【００２５】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００２６】
［基本構成］
以下、図面を参照し、本発明の一実施例に係るマルチスレッド処理装置１について説明する。図１は、本発明の一実施例に係るマルチスレッド処理装置１のシステム構成例である。マルチスレッド処理装置１は、主要な構成として、命令側メモリ・バス７０及びデータ側メモリ・バス７２に接続されたプロセッサ部１０と、残存時間監視装置５０と、を備える。
【００２７】
プロセッサ１０は、複数の命令バッファ１２と（後にスレッドを＃０，＃１，＃２と表現するため、必要に応じて命令バッファ１２＃０，１２＃１，１２＃２等と表現する）、セレクタ１４と、スレッドスケジュール装置１６と、命令デコーダ１８と、複数のレジスタファイル２０と、演算回路２２と、パイプライン制御回路２４と、実行状況監視装置３０と、スケジュールフィードバック装置４０と、を備える。
【００２８】
命令バッファ１２＃０〜１２＃２は、それぞれ命令側メモリ・バス７０に接続されている。命令側メモリ・バス７０は、複数のプログラムを記憶したＲＯＭ、ＥＥＰＲＯＭ等の記憶装置に接続されている。
【００２９】
スレッドスケジュール装置１６は、命令バッファ１２＃０〜１２＃２に対応して設定されているプログラムカウンタのアドレスを命令側メモリ・バス７０に出力し、命令バッファ１２＃０〜１２＃２にプログラムを順次読み出す。命令バッファ１２＃０〜１２＃２は、セレクタ１４に接続されている。
【００３０】
また、スレッドスケジュール装置１６は、命令を発行する命令バッファを選択し、選択した命令バッファと命令デコーダ１８を接続するようにセレクタ１４を制御する。
【００３１】
命令デコーダ１８は、命令バッファ１２＃０〜１２＃２のいずれかから入力された命令を解読し、解読結果をレジスタファイル２０及びパイプライン制御回路２４に出力する。レジスタファイル２０は、演算回路２２の演算結果、及び、データ側メモリ・バス７２を介して読み出されたデータを一時的に記憶する一群のレジスタである。命令デコーダ１８による解読結果は、例えば、演算の種別、１以上のソースオペランド、結果の格納場所、等である。ソースオペランドはレジスタファイル２０に供給されるので、演算回路２２が演算に使用するレジスタが指定される。
【００３２】
命令デコーダ１８が演算の種類をパイプライン制御回路２４に送出すると、パイプライン制御回路２４は演算回路２２が実行する演算を指定する。演算回路２２は、演算の種類に応じて、レジスタファイル２０に記憶されたデータに演算を施す。演算の内容は、ストア、ロード、加算、乗算、除算、分岐等、演算回路２２に応じて種々のものが用意されている。そして、ストアやロード命令の場合、演算回路２２は演算したアドレスを指定してデータ側メモリ・バス７２からデータをフェッチする。そして、演算回路２２は、加算等の演算結果、又は、読み出したデータを、レジスタファイル２０の、結果の格納場所により指定されるレジスタにライトバックする。また、演算回路２２の演算結果は、必要に応じてデータ側メモリ・バス７２に出力され、外部機器によって使用される。
【００３３】
パイプライン制御回路２４は、以上のパイプライン制御の各ステージ（命令フェッチ、命令デコード、命令実行、オペランドフェッチ、ライトバック等）を動作クロックに基づき制御する。
【００３４】
以降、命令バッファ１２＃０から入力された命令が命令デコーダ１８に解読され、演算回路２２において演算処理が行われる命令処理の流れをスレッド＃０と称する。同様に、命令バッファ１２＃１から入力された命令による流れをスレッド＃１と、命令バッファ１２＃２から入力された命令による流れをスレッド＃２と、それぞれ称する。なお、スレッド数は３に限定されず、２以上の任意の数であってよい。
【００３５】
スレッドスケジュール装置１６は、スレッド＃０〜＃２を１クロックで切り替えて（同じスレッドが連続して作動してもよい）異なるプログラムを実行するので、プロセッサ１０は、物理的には一つの存在であり乍ら、複数の仮想的なＣＰＵを有するように振る舞う（ハードウエア・マルチスレッディング機能）。このように、仮想的なＣＰＵを複数有することで、異なるプログラムを独立・並行して実行することができる。
【００３６】
スレッドスケジュール装置１６は、このようなスレッドの切り替えを、例えばＯＳ（Operating  System）から与えられた初期配分に基づいて実行開始する。初期配分は、例えば命令実行の１サイクルが１６クロックであるものとすると、「スレッド＃０に対して８／１６、スレッド＃１に対して６／１６、スレッド＃２に対して２／１６」のような形式で与えられる。
【００３７】
スレッドスケジュール装置１６は、与えられた初期配分が上記のようなものであった場合、例えば［＃０，＃０，＃０，＃０，＃０，＃０，＃０，＃０，＃１，＃１，＃１，＃１，＃１，＃１，＃２，＃２］の順にスレッドが作動するように、セレクタ１４を制御する。
【００３８】
なお、このように、各スレッドに与えられるハードウエアを使用可能な時間の割合、すなわち各スレッドの作動割合を「帯域」と称し、この帯域が実現されるようにセレクタ１４を制御することを、「帯域を設定する」と称する。
【００３９】
残存時間監視装置５０は、複数のデクリメントカウンター５２を中心として構成される。残存時間監視装置５０は、各スレッドが実行する一連の命令（以下、タスクと称する）のうち、デッドライン（処理期限）が設定されているタスクに関して、デッドラインまでの残存時間を監視している。そして、デッドラインに至る（＝残存時間がゼロとなり、デクリメントカウンター５２が満了する）と、割り込みコントローラ６０に指示して当該タスクを強制的に終了させる（異常終了通知）。デクリメントカウンター５２が複数個存在することによって、複数のタスクにデッドラインが設定されている場合に対応することができる。なお、タスクに関するデッドラインの設定情報は、例えばＯＳから残存時間監視装置５０に与えられている。
【００４０】
割り込みコントローラ６０は、上記残存時間監視装置５０からの指示の他、ＡＤコンバータ、ＤＭＡコントローラ、ＣＡＮコントローラ（車載装置の場合）等、周辺回路から割り込み通知がなされる。
【００４１】
ところで、このようにしてハードウエア・マルチスレッディングを行なうマルチスレッド処理装置１においては、各スレッドの処理負荷の動的変動という課題が存在する。すなわち、ＯＳから与えられた帯域の初期配分は、各スレッドが実行する一連の命令の処理負荷に応じたものとなっているが、各スレッドにおける処理負荷は、プロセッサ１０の処理とは非同期に発生する割り込み通知によって処理の遅延が生じたり、同一タスクであっても扱うデータ量が変動する等、種々の要因によって変動するものである。このため、あるスレッドにおける処理負荷が増大すると、処理の遅延によってデッドラインに至り、強制終了される場合が多く生じる可能性があり、好ましくない。
【００４２】
そこで、本実施例のマルチスレッド処理装置１では、以下のような構成によって処理負荷の変動に動的に対応している。
【００４３】
［帯域変更について］
図２は、残存時間監視装置５０の構成及び接続関係を示す図である。図示するように、残存時間監視装置５０は、スケジュールフィードバック装置４０及び割り込みコントローラ６０に接続されており、スケジュールフィードバック装置４０にはデクリメントカウンター５２によりカウントされている各スレッドに関する残存時間を、割り込みコントローラ６０には前述の異常終了通知を、それぞれ出力している。
【００４４】
図３は、実行状況監視装置３０の構成及び接続関係を示す図である。図示するように、実行状況監視装置３０はパイプライン制御回路２４及びスケジュールフィードバック装置４０に接続されている。パイプライン制御回路２４から実行状況監視装置３０には命令実行完了情報が入力され、実行状況監視装置３０からスケジュールフィードバック装置４０には単位時間あたりの有効命令実行数が出力されている。
【００４５】
なお、パイプライン制御回路２４は、前述のように、命令バッファ１２やレジスタファイル２０、演算回路２２の対応付け（スレッド定義）を行っているため、例えばレジスタへのライトバックが行われたこと等によって各スレッドの命令実行完了状況を把握している。
【００４６】
実行状況監視装置３０は、実行状況監視部３２と、複数のカウンター部３４と、を有する。実行状況監視部３２は、パイプライン制御回路２４から各スレッドの命令実行完了情報が入力されると、カウンター部３４のうち各スレッドに対応したものを１インクリメントさせる。但し、装置のアイドル動作時には、ＮＯＰ命令等が実行されている場合があるため、実行状況監視部３２は、ＮＯＰ命令等を除外してインクリメントを行なう。
【００４７】
そして、図示しないグローバルタイマーの出力によって把握される単位時間が経過すると、カウンター部３４は、各スレッドに対応するカウンター値をスケジュールフィードバック装置４０に出力した後に、カウンター値をゼロクリアする。
【００４８】
図４は、スケジュールフィードバック装置４０の構成及び接続関係を示す図である。図示するように、スケジュールフィードバック装置４０には、スレッドスケジュール装置１６からその時点で設定されている帯域に関する情報が、実行状況監視装置３０から単位時間あたりの有効命令実行数が、残存時間監視装置５０から各スレッドに関する残存時間が、それぞれ入力されている。また、スケジュールフィードバック装置４０からスレッドスケジュール装置１６には、帯域変更要求信号が出力される。
【００４９】
スケジュールフィードバック装置４０は、処理負荷算出部４２と、帯域変更管理部４４と、を備える。
【００５０】
処理負荷算出部４２は、各スレッドについて、単位時間あたりの有効命令実行数を、その時点で設定されている帯域で除して、処理負荷を示す値を算出する。例えば、単位時間あたりの有効命令実行数が１１０、その時点で設定されている帯域が８／１６であるとすると、処理負荷を示す値は２２０となる。有効命令実行数を帯域で除するのは、単に有効命令実行数を処理負荷とすると、設定帯域が大きいスレッドの処理負荷が相対的に高く見積もられてしまうからである。
【００５１】
帯域変更管理部４４は、処理負荷算出部４２により算出された処理負荷の低いスレッドから、処理負荷の高いスレッドに帯域を移動させるように、スレッドスケジュール装置１６に帯域変更要求信号を出力する。具体的には、例えば、処理負荷算出部４２により算出された各スレッド処理負荷の差を閾値と比較し、差が閾値よりも大きい場合に帯域変更要求信号を出力する。
【００５２】
また、帯域変更管理部４４は、残存時間監視装置５０により監視されているタスクの残存時間を基準としたタイミングで、各スレッドの処理負荷の差を段階的に減少させるように、帯域変更要求信号を出力する。
【００５３】
具体的には、残存時間監視装置５０により監視されているタスクの残存時間をＴａとすると、これをｎ分割した基準時間の経過毎（Ｔａ／ｎ，２Ｔａ／ｎ，…，ｎＴａ／ｎ＝Ｔａの各時間の経過毎）に、前述の処理負荷に関する判定を行なって、帯域変更要求信号を出力するか否かを決定する。
【００５４】
そして、帯域変更要求信号を出力する際には、ハンチング等により制御が不安定な状態とならないように、帯域を所定幅ずつ変更するように、帯域変更要求信号を出力する。
【００５５】
例えば、前述のように命令実行の１サイクルが１６クロックであり、スレッド＃０に対して８／１６、スレッド＃１に対して６／１６、スレッド＃２に対して２／１６の帯域が設定されているとする。Ｔａ／ｎ経過時に、スレッド＃０の処理負荷がスレッド＃１の処理負荷よりも閾値以上高い場合、スレッド＃０に対して９／１６、スレッド＃１に対して５／１６に帯域を変更する。次に２Ｔａ／ｎ経過時に、スレッド＃０の処理負荷がスレッド＃１の処理負荷よりも依然として閾値以上高い場合、スレッド＃０に対して１０／１６、スレッド＃１に対して４／１６に帯域を変更する。
【００５６】
図５は、帯域変更管理部４４が、残存時間監視装置５０により監視されているタスクの残存時間を基準としたタイミングで各スレッドの処理負荷の差を段階的に減少させる様子を示す図である。本図における初期条件は、有効実装スレッド数が３（＃０，＃１，＃２）、設定帯域がスレッド＃０に対して８／１６、スレッド＃１に対して６／１６、スレッド＃２に対して２／１６となっている。図示するように、あるスレッドのデッドラインが設定されているタスクが起動したタイミングで帯域変更管理部４４の制御が開始される。時間がＴａ／ｎ経過すると（図中（２））、前述のようにスレッド＃０に対して９／１６、スレッド＃１に対して５／１６に帯域が変更される。次いで、時間が２Ｔａ／ｎ経過すると（図中（３））、スレッド＃０に対して１０／１６、スレッド＃１に対して４／１６に帯域が変更され、時間が３Ｔａ／ｎ経過すると（図中（４））、スレッド＃０に対して１１／１６、スレッド＃１に対して３／１６に帯域が変更される。
【００５７】
このようにして、スケジュールフィードバック装置４０は、各スレッドの処理負荷を監視し、各スレッドの処理負荷が平滑化するような帯域変更をスレッドスケジュール装置１６に指示する。
【００５８】
但し、スケジュールフィードバック装置４０は（帯域変更管理部４４は）複数のスレッドのうちデッドラインが設定されているタスクを実行中のスレッドの処理負荷が、デッドラインの設定されていないタスクを実行中のスレッドの処理負荷に比して低い場合には、これらが処理負荷の最も低いものと最も高いものであっても、帯域変更要求信号を出力しないものとしてよい。これは、デッドラインが設定されているタスクは相対的に緊急性が高く、他方、デッドラインが設定されていないタスクは処理の終了が若干遅くなっても許容される場合が多いからである。
【００５９】
図６は、本実施例のスケジュールフィードバック装置４０により実行される特徴的な処理の流れを示すフローチャートである。本フローは、デッドラインの設定されているタスクが起動するタイミングで開始される。なお、デッドラインの設定されているタスクが複数起動した場合、図６のようなフローが並行して実行されてよい。
【００６０】
まず、帯域変更管理部４４は、時間がｋ×Ｔａ／ｎ経過するまで待機する（Ｓ１００）。なお、値ｋは初期値としてゼロが設定されている制御パラメータであり、帯域変更管理部４４の内部メモリ等に格納される。
【００６１】
時間ｋ×Ｔａ／ｎ経過すると、処理負荷算出部４２が、各スレッドについて、前述のように処理負荷を示す値を算出する（Ｓ１０２）。
【００６２】
そして、最も処理負荷が高いスレッドの処理負荷と、最も処理負荷が低いスレッドの処理負荷との差が閾値以上であるかを判定する（Ｓ１０４）。
【００６３】
最も処理負荷が高いスレッドの処理負荷と、最も処理負荷が低いスレッドの処理負荷との差が閾値未満である場合は、値ｋを１インクリメントさせ（Ｓ１０６）、本フローの１ルーチンを終了する。
【００６４】
一方、最も処理負荷が高いスレッドの処理負荷と、最も処理負荷が低いスレッドの処理負荷との差が閾値以上である場合は、処理負荷が低い側のスレッドにデッドラインが設定されているか否かを判定する（Ｓ１０８）。
【００６５】
処理負荷が低い側のスレッドにデッドラインが設定されていない場合は、最も処理負荷が高いスレッドの帯域を規定量増加させると共に最も処理負荷が低いスレッドの帯域を規定量減少させるようにスレッドスケジュール装置１６に指示し（Ｓ１１０）、値ｋを１インクリメントさせ（Ｓ１０６）、本フローの１ルーチンを終了する。
【００６６】
処理負荷が低い側のスレッドにデッドラインが設定されている場合は、最も処理負荷が高いスレッドの処理負荷と、２番目に処理負荷が低いスレッドの処理負荷との差が閾値以上であるかを判定する（Ｓ１１２）。
【００６７】
最も処理負荷が高いスレッドの処理負荷と、２番目に処理負荷が低いスレッドの処理負荷との差が閾値未満である場合は、値ｋを１インクリメントさせ（Ｓ１０６）、本フローの１ルーチンを終了する。
【００６８】
一方、最も処理負荷が高いスレッドの処理負荷と、２番目に処理負荷が低いスレッドの処理負荷との差が閾値以上である場合は、処理負荷が低い側のスレッド（この場合、２番目に処理負荷が低いスレッド）にデッドラインが設定されているか否かを判定する（Ｓ１１４）。
【００６９】
処理負荷が低い側のスレッドにデッドラインが設定されていない場合は、最も処理負荷が高いスレッドの帯域を規定量増加させると共に２番目に処理負荷が低いスレッドの帯域を規定量減少させるようにスレッドスケジュール装置１６に指示し（Ｓ１１６）、値ｋを１インクリメントさせ（Ｓ１０６）、本フローの１ルーチンを終了する。
【００７０】
処理負荷が低い側のスレッドにデッドラインが設定されている場合は、値ｋを１インクリメントさせ（Ｓ１０６）、本フローの１ルーチンを終了する。
【００７１】
なお、本フローはスレッド数が３であることを前提としているため以上の構成としたが、スレッド数が４以上である場合は、Ｓ１１２〜Ｓ１１６のような処理を更に「３番目に処理負荷が低いスレッド…」について行なってよい。また、スレッド数が２であれば、Ｓ１１２〜Ｓ１１６の処理は不要であるし、デッドラインの設定されていないタスクを実行中のスレッドの帯域を減少させることも許容する場合には、Ｓ１０８の判定は不要である。
【００７２】
図７は、スケジュールフィードバック装置４０のような帯域変更のための構成を有さない従来構成のマルチスレッド処理装置が複数のタスクを実行する際の処理の流れを示す図である。図示するように、先ず、タスク＃ａが実行され、これが終了すると、ＯＳがタスクスケジューリングを行なう。そして、残存時間監視装置５０にデッドラインを通知して設定させると共に、タスク＃ｂをいずれかのスレッドに開始させる。時間内にタスク＃ｂが終了すると、デッドラインがクリアされる（正常終了）。
【００７３】
一方、図８は、図７と同様の従来構成のマルチスレッド処理装置が時間内にタスクを終了できなかった場合の処理の流れを示す図である。図示するように、先ず、タスク＃ａが実行され、これが終了すると、ＯＳがタスクスケジューリングを行なう。そして、残存時間監視装置５０にデッドラインを通知して設定させると共に、タスク＃ｂをいずれかのスレッドに開始させる。ところが、割り込みの発生やデータ量の増大等によってタスク＃ｂを実行しているスレッドの処理負荷が高くなり、時間内にタスク＃ｂが終了しない場合、残存時間監視装置５０から割り込みコントローラ６０にデッドライン通知割り込みが通知され、タスク＃ｂが強制終了されることになる（異常終了）。この場合タスク＃ｂは無効となってしまう。
【００７４】
これに対し図９は、本実施例のマルチスレッド処理装置１による処理の流れを概念的に示す図である。本実施例のマルチスレッド処理装置１では、タスク＃ｂをいずれかのスレッドが開始した後に、他のスレッドに比して処理負荷が高い場合には、帯域が他のスレッドから配分され、処理時間の割合が増加する。図９においてタスク＃ｂの起動後の線の太さが、帯域の量を示している。このように、処理負荷の高いスレッドについて、段階的に帯域が増加する。従って、デッドライン前にタスクを終了することができる可能性を高めることができる。
【００７５】
また、図１０及び図１１は、２つのＣＰＵが実行する処理を、従来構成のマルチスレッド処理装置に統合した場合の計算量の変動を模式的に示す図である。図１０は、２つのＣＰＵがそれぞれ実行していた処理の計算量を示しており、図１１は、従来構成のマルチスレッド処理装置が実行する場合の計算量を示している。図１１に示すように、従来構成のマルチスレッド処理装置では、前述の異常終了を回避するために、各スレッドの計算量の上限近くにまで帯域をそれぞれ割り当てる必要があるため、結果としてＣＰＵの性能を高いものにしなければならなかった。従って、装置のコスト低減といった目的を達成するのが困難であった。
【００７６】
これに対し、図１２は、本実施例のマルチスレッド処理装置１により、２つのＣＰＵが実行する処理を統合した場合の計算量の変動を模式的に示す図である。図示するように、本実施例のマルチスレッド処理装置１では、必要に応じて処理負荷の高いスレッドの設定帯域が増加するように帯域を変更するため、演算資源を有効に活用することができる。この結果、ＣＰＵ（プロセッサ）の性能を過剰に高いものにする必要がなくなり、装置のコスト低減といった目的を達成することができるため、車載制御装置等に好適に適用することができる。
【００７７】
以上説明した本実施例のマルチスレッド処理装置１によれば、処理負荷の低いスレッドから処理負荷の高いスレッドに帯域を移動させるように制御するため、処理負荷の変動に柔軟に対応することができる。
【００７８】
また、複数のＣＰＵ（プロセッサ）が有していた機能を統合する際に、プログラミング構造を維持することが可能となるため、統合コストの低減を実現することができる。
【００７９】
また、タスクの起動タイミングに関する検討が不要となるため、ソフトウエアの流通性を高めることができる。
【００８０】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００８１】
例えば、スケジュールフィードバック装置４０において、時間Ｔａ／ｎの経過毎に帯域変更のための処理を行なうものとしたが、制御の基準時間幅を一定時間とするのではなく、例えば時間の経過と共に長く（又は短く）なる制御の基準時間幅を用いて帯域変更を行なってもよい。
【００８２】
また、処理負荷の差に拘わらず帯域を規定量移動させるものとしたが、処理負荷の差が大きい場合には帯域を多く移動させ、処理負荷の差が小さい場合には帯域を少なく移動させるような制御を行なってもよい。
【符号の説明】
【００８３】
１  マルチスレッド処理装置
１０  プロセッサ
１２  命令バッファ
１４  セレクタ
１６  スレッドスケジュール装置
１８  命令デコーダ
２０  レジスタファイル
２２  演算回路
２４  パイプライン制御回路
３０  実行状況監視装置
３２  実行状況監視部
３４  カウンター部
４０  スケジュールフィードバック装置
４２  処理負荷算出部
４４  帯域変更管理部
５０  残存時間監視装置
５２  デクリメントカウンター
６０  割り込みコントローラ
７０  命令側メモリ・バス
７２  データ側メモリ・バス
【図１】
2011128767.tif 000003
【図２】
2011128767.tif 000004
【図３】
2011128767.tif 000005
【図４】
2011128767.tif 000006
【図５】
2011128767.tif 000007
【図６】
2011128767.tif 000008
【図７】
2011128767.tif 000009
【図８】
2011128767.tif 000010
【図９】
2011128767.tif 000011
【図１０】
2011128767.tif 000012
【図１１】
2011128767.tif 000013
【図１２】
2011128767.tif 000014