(57)【要約】制御系のプログラムＡＰ１１から生成されたタスクを、ＣＰＵコア1-nに割り当てて実行するマルチコアシステム１００であって、第１のＣＰＵコア１が実行するタスクを、第２のＣＰＵコア２に切り替えて実行する際、タスクを第２のＣＰＵコア２に試験実行させる試験実行指示手段３３と、第１のＣＰＵコア１の実行結果と第２のＣＰＵコアの実行結果が一致したか否かを判定する判定手段３６と、第１のＣＰＵコア１の実行結果と第２のＣＰＵコア２の実行結果が一致すると判定された場合、タスクの割り当て先を第２のＣＰＵコア２に確定する割り当て確定手段３８と、を有することを特徴とする。
2010010723.tif 000002
【特許請求の範囲】
【請求項１】
制御系のプログラムから生成されたタスクを、ＣＰＵコアに割り当てて実行するマルチコアシステムであって、
第１のＣＰＵコアが実行する前記タスクを、第２のＣＰＵコアに切り替えて実行する際、前記タスクを第２のＣＰＵコアに試験実行させる試験実行指示手段と、
第１のＣＰＵコアの実行結果と第２のＣＰＵコアの実行結果が一致したか否かを判定する判定手段と、
第１のＣＰＵコアの実行結果と第２のＣＰＵコアの実行結果が一致すると判定された場合、前記タスクの割り当て先を第２のＣＰＵコアに確定する割り当て確定手段と、
を有することを特徴とするマルチコアシステム。
【請求項２】
前記試験実行指示手段は、前記タスクを二以上の第２のＣＰＵコアに試験実行させ、
前記判定手段は、第１のＣＰＵコアの実行結果と二以上の第２のＣＰＵコアの実行結果をそれぞれ比較し、
前記割り当て確定手段は、二以上の第２のＣＰＵコアのうち、最も早く第１のＣＰＵコアの実行結果と一致したＣＰＵコアに、前記タスクの割り当て先を確定する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項３】
第１のＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記処理負荷検出手段により、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷又は高負荷になることが予測された場合、
前記試験実行指示手段は、前記タスクを第２のＣＰＵコアに試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項４】
前記タスクを第１のＣＰＵコアが実行していない場合、
前記試験実行指示手段は、第１のＣＰＵコアに前記タスクを試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項５】
第１及び第２のＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記処理負荷検出手段が、第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを検出した場合、又は、偏りを予測した場合、
前記試験実行指示手段は、処理負荷の高い第１又は第２のＣＰＵコアが実行する前記タスクを、第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項６】
前記判定手段は、第１のＣＰＵコアの実行結果の値と第２のＣＰＵコアの実行結果の値の差が、所定範囲内であれば一致したと判定する、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項７】
前記差は、前記タスクに応じて予め定められている、
ことを特徴とする請求項６記載のマルチコアシステム。
【請求項８】
前記判定手段は、第１のＣＰＵコア及び第２のＣＰＵコアの実行結果が一致しない場合、予め定められた待機時間の範囲内で一致するまで判定を繰り返す、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項９】
優先的に割り当てるＣＰＵコアを前記タスクに対応づけて登録した優先テーブルを有し、
前記試験実行指示手段は、前記優先テーブルを参照して前記タスクを試験実行させるＣＰＵコアを決定する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項１０】
前記試験実行指示手段が第２のＣＰＵコアに試験実行させるタスクは、
前記処理負荷検出手段が、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷となったことを検出した時若しくは高負荷になることを予測した時、又は、複数のＣＰＵコアの処理負荷の偏りを検出した時若しくは偏りを予測した時、
に第１のＣＰＵコアが実行しているタスクである、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項１１】
第１のＣＰＵコアは、
前記処理負荷検出手段が、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷となったことを検出した時若しくは高負荷になることを予測した時、又は、複数のＣＰＵコアの処理負荷の偏りを検出した時若しくは偏りを予測した時、に実行しているタスクの実行結果を、制御対象に出力する、
ことを特徴とする請求項１０記載のマルチコアシステム。
【請求項１２】
前記処理負荷検出手段は、所定時間に対する前記タスクの実行時間の割合であるＣＰＵコア使用率が閾値ＴＲ１より大、又は、待機しているタスクの数が閾値ＴＮ１より大、の少なくともいずれかを満たす場合に、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷であることを検出し、
ＣＰＵコア使用率の増加率が閾値ＴｄＲ１より大、又は、待機しているタスクの数の増加率が閾値ＴｄＮ１よりも大、の少なくともいずれかを満たす場合に、第１のＣＰＵコアの処理負荷が高負荷になることを予測する、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１３】
前記処理負荷検出手段は、車両の状態を示す状態値が閾値ＴＳより大の場合に、第１のＣＰＵコアの処理負荷が閾値よりも高負荷であることを検出し、
車両の状態を示す状態値の増加率が閾値ＴｄＳより大の場合に、第１のＣＰＵコアの処理負荷が高負荷になることを予測する、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１４】
前記処理負荷検出手段は、
所定時間に対する前記タスクの実行時間の割合である第１のＣＰＵコアのＣＰＵコア使用率と第２のＣＰＵコアのＣＰＵコア使用率の差が閾値ＴＲ１２より大、又は、第１のＣＰＵコアによる実行を待機しているタスクの数と第２のＣＰＵコアによる実行を待機しているタスクの数の差が、閾値ＴＮ１２より大、の少なくともいずれかを満たす場合に、
第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを検出し、
第１のＣＰＵコアのＣＰＵコア使用率と第２のＣＰＵコア使用率との差の増加率が閾値ＴｄＲ１２より大、又は、第１のＣＰＵコアによる実行を待機しているタスクの数と第２のＣＰＵコアによる実行を待機しているタスクの数の差の増加率が閾値ＴｄＮ１２より大、の少なくともいずれかを満たす場合に、
第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを予測する、
ことを特徴とする請求項５記載のマルチコアシステム。
【請求項１５】
前記処理負荷検出手段が、第２のＣＰＵコアの処理負荷が第２の閾値よりも低いことを検出した場合、
前記試験実行指示手段は、第２のＣＰＵコアが実行する前記タスクを、第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させ、
前記判定手段は、第１のＣＰＵコアと第２のＣＰＵコアの実行結果が一致したか否かを判定し、
前記判定手段が一致すると判定した場合、前記タスクを実行するＣＰＵコアを第２のＣＰＵコアから第１のＣＰＵコアに切り替え、第２のＣＰＵコアを停止させる、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１６】
前記制御系のプログラムは、過去の実行結果を次のタスクの実行に用いるプログラムである、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項１７】
請求項１〜１６いずれか１項記載のマルチコアシステムと、
前記制御系のプログラムを記憶した記憶手段と、
アクチュエータと接続されるインターフェイスと、
を有することを特徴とする車両用電子制御ユニット。
【請求項１８】
制御系のプログラムから生成されたタスクを、ＣＰＵコアに割り当てて実行するマルチコアシステムのタスク切り替え方法であって、
第１のＣＰＵコアが実行する前記タスクを、第２のＣＰＵコアに切り替えて実行する際、試験実行指示手段が、第１のＣＰＵコアが実行する前記タスクを第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させるステップと、
判定手段が、第１のＣＰＵコアの実行結果と第２のＣＰＵコアの実行結果が一致したか否かを判定するステップと、
第１のＣＰＵコアの実行結果と第２のＣＰＵコアの実行結果が一致すると判定された場合、割り当て確定手段が、前記タスクの割り当て先を第２のＣＰＵコアに確定するステップと、  
を有することを特徴とするタスク切り替え方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵコアがタスク毎に処理を実行するマルチコアシステム、車両用電子制御ユニット及びタスク切り替え方法に関する。
【背景技術】
【０００２】
プログラムの実行処理では、プログラムからＣＰＵの実行単位であるタスクを生成し、複数のタスクをスケジューリングしながら実行している。実行時間を保証する必要のある処理では、スケジューラが各タスクの優先度を決定し、優先度に応じてディスパッチャがＣＰＵにタスクを割り当てることができる。【０００３】
そして複数のＣＰＵコアが実装されたコンピュータでは、複数のタスクを各ＣＰＵコアに時間的に重複して割り当てることで、処理効率を向上させている（例えば、特許文献１参照。）。特許文献１には、各タスクの並列処理可能度を算出し、並列処理可能度と処理時間の大小に応じて、各タスクを各ＣＰＵコアへ割り当てるマルチプロセッサシステムが記載されている。【０００４】
また、複数のＣＰＵコアを別のＯＳ上で動作させ、各ＯＳでそれぞれタスクを分担して実行する場合がある（例えば、特許文献２参照。）。特許文献２には、ＯＳ毎に負荷を判定し、処理負荷の低いＯＳ上で作動しているＣＰＵコアを処理負荷の大きいＯＳ上で作動させることで、ＯＳ間の処理負荷を調整するマルチプロセッサシステムが記載されている。【０００５】
しかしながら、特許文献２に記載されているようにＣＰＵコアに動的にタスクを割り当てると、不都合が生じる場合がある。例えば、モータ制御の一連のプロセスでは、前回のタスクの実行結果を次のタスクのフィードバック制御に適用してタスクを実行することが多い。例えば、電気モータの回転数を急激に増大させることは困難なので、電気モータの通電量をフィードバック制御により決定するタスクは、前回の通電量に応じた目標値が得られるように電気モータの通電量を演算する。【０００６】
このように、制御系のマルチコアシステムでは、前回のタスクの実行結果を利用できないと期待した実行結果が得られないことがあり、処理負荷に応じて単にタスクを割り当てるＣＰＵコアを切り替えたり、新たなＣＰＵコアに並列処理を依頼すると制御量が急変し制御が破綻するおそれがあるという問題がある。【０００７】
一般に、複数のＣＰＵコアは共有メモリやＩＰＣ（Inter Process Communication）などにより実行結果を受け渡すことができるが、共有メモリの内容が破壊されたり、プロセス間通信が遅延したりすることがあるため、かかる仕組みに期待するだけでは十分でない。【０００８】
また、このようなマルチコアシステムの負荷分散は、情報処理系のタスクにおいては従来から知られているが、情報処理系のタスクではデータの入力と出力がほぼ一対一に対応し、前回のタスクの実行結果が次のタスクに必要となることは少ないため、制御処理系のタスクでは、前回のタスクの実行結果を考慮したタスクの割り当てについて、これまで提案されていない。
【特許文献１】特開平１０−１４３３８０号公報
【特許文献２】特開２００７−１８８２１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記課題に鑑み、本発明は、制御の急変を生じさせずにタスクを実行するＣＰＵコアを切り替えることができるマルチコアシステム、車両用電子制御ユニット及びタスク切り替え方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題に鑑み、本発明は、制御系のプログラムから生成されたタスクを、ＣＰＵコアに割り当てて実行するマルチコアシステムであって、第１のＣＰＵコア１が実行する前記タスクを、第２のＣＰＵコア２に切り替えて実行する際、タスクを第２のＣＰＵコア２に試験実行させる試験実行指示手段（例えば、ディスパッチャ３３）と、第１のＣＰＵコア１の実行結果と第２のＣＰＵコア２の実行結果が一致したか否かを判定する判定手段と、第１のＣＰＵコア１の実行結果と第２のＣＰＵコア２の実行結果が一致すると判定された場合、タスクの割り当て先を第２のＣＰＵコア２に確定する割り当て確定手段と、を有することを特徴とする。
【発明の効果】
【００１１】
制御の急変を生じさせずにタスクを実行するＣＰＵコアを切り替えることができるマルチコアシステム、車両用電子制御ユニット及びタスク切り替え方法を提供することができる。
【図面の簡単な説明】
【００１２】
【図１Ａ】マルチコアシステムによる負荷分散を模式的に説明する図の一例である。
【図１Ｂ】ＣＰＵコア１とＣＰＵコア２の処理負荷に偏りがある場合の負荷分散を模式的に示す図である。
【図２】マルチコアシステムが実現するプラットフォームを模式的に示す図の一例である。
【図３】マルチコアシステムを搭載したＥＣＵ（電子制御ユニット）の概略構成図の一例である。
【図４】マルチコアシステムの機能ブロック図の一例である。
【図５Ａ】優先テーブルの一例を示す図である。
【図５Ｂ】一致判定テーブルの一例を示す図である。
【図６】マルチコアシステムがタスクをＣＰＵコアに割り当てる手順を示すフローチャート図の一例である。
【図７】処理の平準化、CPUコアの停止の手順の一例を示すフローチャート図の一例である。
【図８】ＣＰＵコアが３以上の場合の処理負荷の平準化を模式的に示す図の一例である。
【図９】マルチコアシステムによる負荷分散を模式的に説明する図の一例を示す（実施例２）。
【図１０】マルチコアシステムの機能ブロック図の一例である（実施例２）。
【図１１】マルチコアシステムが、高負荷となったＣＰＵコア１と、タスクＡの実行結果が最も早く一致したＣＰＵコア２にタスクＡの割り当て先を決定する手順を示すフローチャート図の一例である。
【符号の説明】
【００１３】
１１      ＡＰ（制御系のプログラム）
１２      ＯＳ
１３      ＯＳ間連携部
１４      ハードウェアリソース（ＨＷ）
２５      センサ類
２６      アクチュエータ類
５０      ＥＣＵ（電子制御ユニット）
１００    マルチコアシステム
【発明を実施するための最良の形態】
【００１４】
以下、本発明を実施するための最良の形態について図面を参照しながら実施例を挙げて説明する。
【実施例１】
【００１５】
図１Ａは、本実施形態のマルチコアシステム１００による負荷分散を模式的に説明する図の一例を示す。図１Ａのマルチコアシステム１００は、２つのＣＰＵコア１とＣＰＵコア２（以下、区別しない場合、ＣＰＵコア1~nという）とを有し、ＣＰＵコア１はスケジューリングされた結果に応じてタスク１、タスク２を実行している。そして、例えばＯＳ（Operating  System）がＣＰＵコア１の処理負荷が高くなったこと又は高くなる可能性（以下、高負荷推定という場合がある）を検出すると、ＣＰＵコア２がＣＰＵコア１から所定のタスク（図ではタスクＡ）のコンテキストを受け取り（必ずしも受け取らなくてもよい）、ＣＰＵコア２がタスクＡを試験実行する。また、ＣＰＵコア１は、制御上の要請によりタスクＡを実行（以下、実需の実行という場合がある）するか、又は、ＣＰＵコア１もタスクＡを試験実行する。すなわち、いずれの場合もＣＰＵコア１がタスクＡを実行する。【００１６】
そして、ＯＳはＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致するか否かを判定し、一致する場合に、タスクＡを実行するＣＰＵコア1~nをＣＰＵコア１からＣＰＵコア２に切り替える。【００１７】
ＣＰＵコア１とＣＰＵコア２の実行結果を検証した後に、タスクＡを実行するＣＰＵコア1~nを切り替えることで、前回の実行結果が今回の実行結果に反映される制御系の処理においても、タスクＡの演算結果に基づく制御に破綻をきたすことなく実行するＣＰＵコア1~nを切り替えることができる。また、タスクＡを割り当てた後、ＣＰＵコア１はタスクＢを実行し、ＣＰＵコア２はタスクＡを実行するので、マルチコアシステム１００の処理負荷を分散することができる。【００１８】
図１Ｂは、ＣＰＵコア１とＣＰＵコア２の処理負荷に偏りがある場合の負荷分散を模式的に示す図である。例えば、ＯＳがＣＰＵコア１と２の処理負荷に偏りを検出するか又は偏りを予測すると（以下、偏り推定という場合がある）、図１Ａと同様に、ＣＰＵコア２がＣＰＵコア１から所定のタスク（図ではタスクＡ）のコンテキストを受け取り（必ずしも受け取らなくてもよい）、両者がタスクＡを実行する。ＯＳは、両者でタスクＡを実行し実行結果が一致した場合に、タスクＡを実行するＣＰＵコア1~nをＣＰＵコア２に切り替える。したがって、ＣＰＵコア２が起動している状態でも、実行結果を検証した後、負荷分散することができる。【００１９】
図２は、マルチコアシステム１００が実現するプラットフォームを模式的に示す図の一例である。マルチコアシステム１００は、１つのハードウェアリソース（以下、ＨＷという）１４上で１以上のＯＳ１、ＯＳ２（以下、区別しない場合、ＯＳ１２という）を独立かつ並行に動作させることができる。また、ＯＳ１上ではアプリケーションＡＰ１〜ＡＰｎ（以下、区別しない場合、単にＡＰ１１という）が独立に実行可能であり、例えばＡＰ１の処理がＡＰ２の処理結果に影響を与えないようになっている。【００２０】
このＡＰ１１のそれぞれが例えば、エンジン制御プログラム、白線や歩行者を認識する撮影系を処理するカメラ制御プログラム、ナビゲーションプログラム、等である。本実施形態のマルチコアシステム１００は、エンジンやアクチュエータなどのハードウェアを制御する制御系のＡＰ１１（ＡＰ１１から生成されるタスク）の実行時における、負荷分散を可能とする。また、カメラ制御プログラムは、カメラで撮影した画像を処理するものであるが、処理結果（例えば、幅員、曲率などの白線情報が得られる）を用いて例えば電動パワーステアリングの操舵角を制御することがあるため、制御系のプログラムと一体である。また、このように車外を撮影するカメラだけでなく、運転者の脇見や眠気の強さを検出するカメラ制御プログラムにおいても、脇見や眠気の強さの検出結果がブザー音を吹鳴するなどの制御に利用されるので制御系のプログラムに含まれる。同様に、ナビゲーションプログラムにおいても自車位置が交差点手前やカーブ手前に来るとシフトダウンや減速するなどの車両制御に関わるため、制御系のプログラムに含まれる。また、照明、施錠／解錠、ワイパー等を制御するボディ系を制御するプログラムも制御系のプログラムに含まれる。【００２１】
また、マルチコアシステム１００に好適なＡＰ１１は制御の有無により判別されるだけでなく、処理態様からも判別可能である。ＡＰ１１のタスクが、電気モータの通電量やエンジン回転数のように物理状態が連続的に変化するハードウェアを制御するタスクの場合、ＣＰＵコア1~nは同じタスクの過去の実行結果が用いてタスクを実行する。したがって、制御系のＡＰ１１とは、ＣＰＵコア1~nが過去の実行結果を用いて同じタスクを実行するプログラム、又は、過去の実行結果が次の実行結果に反映されるプログラムと定義することができる。このような制御はフィードバック制御に多く実装されている。【００２２】
本実施形態では、ＣＰＵコア１とＣＰＵコア２によりＯＳ１を実行し、ＣＰＵコア１とＣＰＵコア２でＡＰ１１のタスクＡ〜Ｃを実行しているものとする。各タスクＡ〜ＣとＡＰ１〜ＡＰｎは１対１に対応してもよいし、しなくてもよい。なお、図ではＡＰ１１はＯＳ１上で実行されているが、マルチコアシステム１００がマルチＯＳのプラットフォームの場合、ＡＰ１１の一部又は全てがＯＳ２で実行されていてもよい。【００２３】
ＨＷ１４は、ＣＰＵコア１〜ｎに加え、メモリ（ＲＡＭ２１、ＣＰＵコアのキャッシュメモリ、記憶装置２２）１４ａ、Ｉ／Ｏデバイス（例えば、アクチュエータとのインターフェイス、スイッチ素子、タッチパネル、ディスプレイ等）１４ｂ、その他のハードウェアを有する。ＨＷ１４には少なくとも２以上のＣＰＵコア１，２（マルチコア型）又は複数のＣＰＵ（マルチＣＰＵ型）が備えられている。ＣＰＵコア１とＣＰＵコア２は、それぞれが同じアーキテクチャのホモジニアスでもよいし、異なるアーキテクチャを用いたヘテロジニアスでもよい。【００２４】
ＯＳ間連携部１３は、ユーザ（例えば運転者）が存在を意識することのない常駐型のソフトウェアで、ＯＳ１とＯＳ２に対しＨＷ１４を論理的（時間的にも）に分割して割り当てる。したがって、マルチＯＳでないマルチコアシステム１００ではＯＳ間連携部１３は不要となる。後述するＯＳの機能は、ＯＳ１又はＯＳ間連携部１３いずれにより提供されてもよく、ＯＳ間連携部１３がない場合はＯＳ１により後述する機能を提供する。【００２５】
ＯＳ間連携部１３は、この論理分割を利用して複数の仮想的な計算機の実行環境を作り、それらの実行環境の上でＯＳ１を動作させる。ＨＷ１４はＯＳ間連携部１３によりＯＳ１から隠蔽されている。ＯＳ間連携部１３は、ＯＳ１の負荷状況を監視しており、例えば、負荷が大きくなるとＣＰＵコア３にＯＳ２を新たに割り当て実行環境を生成したり、実行後はＯＳ１とＯＳ２が情報交換するためのＯＳ間通信手段を提供する。なお、ＯＳ１はシステムコールを発行することで各種のサービスをＯＳ間連携部１３に要求することができ、ＯＳ１とＯＳ間連携部１３とは相互に通信可能である。【００２６】
〔車両用電子制御ユニットへの適用〕
車両に搭載される制御システムは多様化しており、ＣＰＵ間で生じる負荷の調整に対するニーズが高くなっている。このため、本実施形態のマルチコアシステム１００の一応用例として、車両用電子制御ユニットに好適に搭載することができる。【００２７】
図３は、マルチコアシステム１００を搭載したＥＣＵ（電子制御ユニット）５０の概略構成図の一例を示す。ＥＣＵ５０は、例えばエンジンを制御するエンジンＥＣＵ、ハイブリッド車のモータジェネレータを制御するモータＥＣＵ、又は、エンジンとモータに必要なトルク指令値を指示するハイブリッドＥＣＵ等である。上述したように、ナビＥＣＵ等にマルチコアシステム１００を適用してもよい。【００２８】
ＥＣＵ５０は、マルチコアシステム１００、ＲＡＭ２１、記憶装置２２、通信インターフェイス２３及び入出力インターフェイス２４、が内部バスで接続されている。通信インターフェイス２３は、例えばＣＡＮ（Controller
Area Network）やＬＩＮ（Local Interconnect Network）、ＦｌｅｘＲａｙ等の車載ＬＡＮに接続されており、他のＥＣＵ５との間で通信データを送受信する。例えば、通信インターフェイス２３は、ナビゲーションシステムを制御するナビＥＣＵやブレーキＥＣＵ等と接続されており、各ＥＣＵとの協調制御が可能となる。【００２９】
また、入出力インターフェイス２４には、センサ類２５及びアクチュエータ類２６が接続されている。ＥＣＵ５０がエンジンを制御する場合、センサ類２５は、例えば、エアフローセンサ、クランクポジションセンサ、Ｏ２センサ等の各種のセンサであり、アクチュエータ類２６はスロットルバルブ、燃料噴射弁等の各種のアクチュエータである。また、ＥＣＵ５０がモータＥＣＵの場合、センサ類２５は、例えば相電流の電流値を検出する電流センサ、モータのロータの回転角を検出するレゾルバ等であり、アクチュエータ類２６は、例えばモータジェネレータである。【００３０】
記憶装置２２はＥＥＰＲＯＭ、ハードディスクドライブやフラッシュメモリ等を実体とし、ＯＳのプログラムやデータが格納されたＯＳファイル、ＡＰ１１のプログラムやデータが格納されたＡＰファイルを記憶している。例えば、イグニッションのオンによりＥＣＵ５０に電力が供給されると、ＣＰＵコア１がＯＳファイルを実行し、ＯＳ間連携部１３を起動した後、ＯＳ１と予め定められたＡＰ１１を起動する。【００３１】
〔マルチコアシステム１００の機能ブロック図〕
マルチコアシステム１００の機能ブロックについて図４を用いて説明する。図４の各ブロックは、ＯＳ１又はＯＳ間連携部１３により提供される。後述する優先テーブル３４や一致判定テーブル３７は、予めＨＷ１４のメモリ１４ａに記憶されていてもよいし、起動時に記憶装置２２からメモリ１４ａにコピーされてもよい。【００３２】
ＯＳ１は、ＡＰ１１をＣＰＵの処理単位であるタスクに区分して、複数のタスクをスケジューリングしながら実行していく。タスクは、ＯＳ１が取り扱う処理の最小単位である。タスクは、ＡＰ１１のオブジェクトコードを実体とする。タスクはＴＣＢ（Task Control Block）により管理されており、ＴＣＢにはタスクの状態（実行可能状態、実行中状態、待機中状態）、タスクの識別情報、タスクへのポインタ、属性（再配置可能、再使用可能、再入可能等）、前のタスクのリンク情報、次のタスクのリンク情報、タスクの所有者（ＡＰ１１の識別情報）、コンテキスト（レジスタの内容等ＣＰＵコアの状態）等が登録されている。なお、コンテキストには、タスクの直前の実行結果が含まれる。【００３３】
〔タスクスケジューリング〕
タスクスケジューラ３１は、タスクの優先度やタスクの状態に基づきメモリ１４ａ上にあるタスクの中から次にＣＰＵコア１及びＣＰＵコア２に割り当てるタスクを決定している。タスクスケジューラ３１は適切な優先度を付与して、タスクＡ、Ｂをタスクキューに登録する。ソフトウェア割り込み、ハードウェア割り込み、Ｉ／Ｏ割込み、システムコールなどの優先度の高い割込みが生じた場合は、タスクスケジューラ３１は強制的にタスクを切り替える（プリエンプション）。このようにタスクＡ、Ｂの優先度は、割込みなどの優先度に応じて相対的に定められるようになっている。なお、図では優先度の値が小さいほど優先度が高いとした。【００３４】
優先度の最も高いタスクが先頭にくるよう、タスクキューはタイムスライス毎にソートされ、優先度が同じタスクの場合は、ＦＩＦＯ形式で順に実行される。【００３５】
ディスパッチャ３３は各タスクの実行完了や他のタスクの割込みを検出すると、実行していたタスクのコンテキストをメモリ１４ａに保存して、次のタスクをＣＰＵコア１に実行させる。例えば、タスクキューを参照して最も優先度の高いタスクをそのＣＰＵコア１に割り当て、格納してあるそのタスクのコンテキストをＣＰＵコア１に復帰させる。この処理を繰り返し、１つのＣＰＵコア１で複数のタスクを実行する。【００３６】
複数のＣＰＵコア１，２を備えるマルチコアシステム１００では、ＣＰＵコア毎にタスクキューが設けられることが多い。原則的に、同じタスクは同じＣＰＵコアのタスクキューに登録される。これにより、フィードバック制御のように過去の実行結果を利用するタスクから別のタスクにコンテキストスイッチする際、退避するコンテキストを低減してオーバヘッドを抑制し、また、退避するコンテキストに漏れがあっても、同じＣＰＵコアにより同じタスクを実行する限り、実行結果に連続性を保つことができる。【００３７】
ＣＰＵコアとタスクの割り付けにはいくつか方法がある。例えば、ＣＰＵコア１とＣＰＵコア２の処理負荷を均等にするのであれば、タスク数が均等になるようにタスクＡ、Ｂ等を各タスクキューに割り当てればよい。一方、可能な限りＣＰＵコア１のみで全てのタスクを処理することで、他方のＣＰＵコア２を停止しておき消費電力を低減したい場合がある。このような場合、可能な限りＣＰＵコア１のタスクキューにタスクを登録しておき、ＣＰＵコア１の処理負荷が高くなった場合に、ＣＰＵコア２のタスクキューにタスクを登録すればよい。また、いったん複数のＣＰＵコア１，２が作動した状態では、タスクを均等に割り当てることで、ＣＰＵコア間の処理負荷を平準化することができる。本実施形態のマルチコアシステム１００は、このような考え方から、図示するように、当初（ＥＣＵ５０の起動時）、ＣＰＵコア１にのみタスクを割り当て消費電力の低減を図り、ＣＰＵコア２が起動した後は処理負荷を平準化する。【００３８】
〔高負荷推定、偏り推定〕
負荷推定部３２は、ＣＰＵコア２が起動していない状態では、ＣＰＵコア１の処理負荷が高くなったこと、又は、高くなる可能性があることを検出し（高負荷推定）、ＣＰＵコア２が起動した後はＣＰＵコア１とＣＰＵコア２の処理負荷の差が所定値以上になったこと又はなる可能性があることを検出する（偏り推定）。【００３９】
・ＣＰＵコア２が起動していない状態
処理負荷が高くなったことは、ＣＰＵコア１の使用率Ｒ１、タスクキューに登録されたタスク数Ｎ１、又は、制御対象の状態、のいずれか１以上から検出される。使用率Ｒ１は、所定時間Ｔ０（例えば、数十ミリ秒から数秒程度）におけるＣＰＵコア１がタスクを実行した時間Ｔの割合である。したがって、使用率Ｒ１＝Ｔ／Ｔ０。ＯＳ１が起動しただけの定常状態をアイドル状態というが、アイドル状態の処理負荷は十分に低いので、使用率Ｒ１が閾値Ｒ０より高ければタスクの実行による処理負荷が高いことが検出できる。同様の考え方により、タスクキューのタスク数Ｎ１が所定数Ｎ０より大きいの場合、ＣＰＵコア１の処理負荷が高くなったことを検出できる。また、乗員がＡＰ１１を起動する場合があるので、この起動操作から処理負荷が高くなったことを検出してもよい。【００４０】
また、制御対象の状態から処理負荷が高くなったことを検出することができる。一般に、高速に状態が変化する制御対象を制御する場合、同じ制御対象を制御する場合でも状態変化が遅い場合よりも処理負荷が高くなる。例えば、エンジン回転数が高くなると、回転数制御や点火制御の時間間隔が回転数に比例して短くなるので、処理負荷は回転数に比例して高くなる。モータのトルクを制御する場合も同様である。したがって、センサ類２５から検出されるクランクポジションやロータの回転角速度が閾値以上になった場合に、処理負荷が高くなったことを検出することができる。なお、この場合、車速も大きくなっているので、車速が閾値以上になったことから処理負荷が高くなったことを検出してもよい。【００４１】
以上から、負荷推定部３２は、処理負荷が高くなったことを次の条件のいずれか又は２以上の組み合わせにより検出する。ＴＲ１〜２、ＴＮ１〜２、ＴｄＲ１〜２、ＴｄＮ１〜２、ＴＲ１２、ＴＮ１２、ＴｄＲ１２、ＴｄＮ１２、ＴＳ、は閾値である。
使用率Ｒ１（＝Ｔ／Ｔ０）＞  ＴＲ１
、タスク数Ｎ１ ＞ＴＮ１ 、車両の状態値Ｓ ＞ ＴＳ
一方、処理負荷が高くなる可能性は、使用率Ｒ１の時間的な変化速度ｄＲ、タスク数Ｎ１の時間的な変化速度ｄＮ１、車両の状態値Ｓの時間的な変化速度ｄＳ、から検出することができる。負荷推定部３２は、使用率Ｒ１、タスク数Ｎ１、車両の状態値Ｓ、をそれぞれ時系列に監視し、変化速度ｄＲ１、ｄＮ１、ｄＳがそれぞれの閾値を超えた状態が所定時間Ｐ以上となった場合に、処理負荷が高くなる可能性があることを検出する。以上から、負荷推定部３２は、処理負荷が高くなる可能性のあることを次の条件のいずれか又は２以上の組み合わせにより検出する。【００４２】
なお、使用率Ｒ１、タスク数Ｎ１、車両の状態値Ｓ、のいずれか又は２以上の組み合わせから、処理負荷が高くなる可能性を検出してもよい。【００４３】
使用率Ｒ１の増加率ｄＲ１  ＞  ＴｄＲ１  、タスク数Ｎ１の増加率ｄＮ１  ＞  ＴｄＮ１  、車両の状態値Ｓの増加率ｄＳ＞ＴｄＳ
・ＣＰＵコア２が起動した後
ＣＰＵコア２が起動した後も、ＣＰＵコア２の使用率Ｒ２，タスク数Ｎ２、車両の状態値Ｓは、ＣＰＵコア１と同様に算出される。そして、負荷推定部３２は、ＣＰＵコア１とＣＰＵコア２の処理負荷が偏っていること、又は、偏る可能性のあることを検出する。【００４４】
負荷推定部３２は、次の条件のいずれか又は組み合わせにより、ＣＰＵコア１とＣＰＵコア２の処理負荷が偏っていることを検出する。【００４５】
使用率Ｒ１−使用率Ｒ２  ＞  ＴＲ１２ 
タスク数Ｎ１−タスク数Ｎ２  ＞  ＴＮ１２、    
この場合、ＣＰＵコア１の処理負荷が高いことを意味するので、ＣＰＵコア２にタスクを割り当てる。【００４６】
使用率Ｒ２−使用率Ｒ１  ＞  ＴＲ１２ 
タスク数Ｎ２−タスク数Ｎ１  ＞  ＴＮ１２、    
この場合、ＣＰＵコア２の処理負荷が高いことを意味するので、ＣＰＵコア１にタスクを割り当てる。こうすることで、処理負荷を平準化できる。なお、車両の状態値Ｓは、ＣＰＵコア１，２に共通なので偏りを検出するには適当でないため、高負荷推定部３２は偏り推定に車両の状態値Ｓを用いない。【００４７】
同様に、負荷推定部３２は、次の条件のいずれか又は組み合わせにより、ＣＰＵコア１とＣＰＵコア２の処理負荷が偏る可能性のあることを検出する。【００４８】
使用率Ｒ１の増加率ｄＲ１−使用率Ｒ２の増加率ｄＲ２  ＞  ＴｄＲ１２  、
タスク数Ｎ１の増加率ｄＮ１−タスク数Ｎ２の増加率ｄＮ２＞  ＴｄＮ１２
以上のようにして、負荷推定部３２は、高負荷推定及び偏り推定を検出する。【００４９】
なお、ＣＰＵコア１又は２の処理負荷が低くなった場合（使用率Ｒ１がＴＲ１より小さい閾値以下、タスク数Ｎ１がＴＮ１より小さい閾値以下、のいずれか1以上の条件を満たす場合）、処理負荷が低くなったＣＰＵコア１又は２を停止させてもよい。一部のＣＰＵコア1~nを停止させることで消費電力を低減できる。この場合、停止するＣＰＵコア1~nで実行していたタスクは、別のＣＰＵコア1~nに割り当てられるが、これまで説明したように、実行結果が一致するか否かを判定した後に割り当てることで、制御の急変を防止する。【００５０】
〔タスクの試験実行〕
ディスパッチャ３３が、処理負荷の低いＣＰＵコア２が試験実行するタスクＡを決定する方法について説明する。なお、図１Ａにて説明したように、ＣＰＵコア1~nがタスクを実行する場合、本実施例のマルチコアシステム１００では、制御上の要請（実需）によりタスクを実行する場合と、試験的にタスクを実行する場合がある。いずれの場合も、ディスパッチャ３３がタスクをＣＰＵコア1~nに割り当てる。また、タスクの実行が、試験的な実行から実需の実行に移行することもある。このため、「割り当て」と「試験実行」の区別は明確でないが、本実施例ではＣＰＵコア1~nが試験実行することに特徴があるため、ディスパッチャ３３によるタスクの割り当てを、ＣＰＵコア1~nに「試験実行させる」と表記する場合がある。【００５１】
ＣＰＵコア２が試験実行するタスクＡを決定する方法には、静的な決定方法と動的な決定方法がある。静的な決定方法は、各タスクを優先的に実行するＣＰＵコア1~nを定めておく方法である。【００５２】
図５Ａは優先テーブル３４の一例を示す図である。優先テーブル３４には、タスク毎に、優先的に試験実させるＣＰＵコア1~nが優先順位と共に登録されている。図１Ａに示したようにＣＰＵコア２の起動前、タスクＡはＣＰＵコア１で実行されているが、優先テーブル３４によればタスクＡはＣＰＵコア２で優先的に実行すべきことになる。したがってＣＰＵコア２が起動した後は、ディスパッチャ３３は、タスクＡをＣＰＵコア２に試験実行させることを決定できる。【００５３】
ディスパッチャ３３は、ＣＰＵコア２の起動後も優先テーブル３４に従い、タスクＡを試験実行させるＣＰＵコア２を決定することができる。例えば図１Ｂの状態で処理負荷の偏り推定が検出された場合、優先テーブル３４によれば処理負荷の高いＣＰＵコア１で実行されているタスクＡはＣＰＵコア２で優先的に実行すべきなので、ディスパッチャ３３は、タスクＡをＣＰＵコア２に試験実行させることを決定できる。【００５４】
その後、例えばＣＰＵコア２の処理負荷が高くなった場合、タスクＡ又はタスクＣを他のＣＰＵコアに移動するが、優先テーブル３４によれば、タスクＡ及びＣはいずれも最も優先的に割り当てられるＣＰＵコア２に割り当てられている。このため、ディスパッチャ３３は優先テーブル３４を参照して、優先順位が２番目のＣＰＵコア１にタスクＡを試験実行させる。なお、ＣＰＵコア１の処理負荷も高ければＣＰＵコア３を起動すればよい。【００５５】
したがって、優先テーブル３４を適切に調整しておけば、ディスパッチャ３３が優先順位にしたがいタスクを試験実行させるＣＰＵコアを決定し、処理負荷を平準化することができる。【００５６】
これに対し、動的な決定方法は、高負荷推定時又は偏り推定時の、ＣＰＵコア１（又はＣＰＵコア２）の状態に応じて、ディスパッチャ３３が、タスクを試験実行させるＣＰＵコア1~nを決定する方法である。例えば、ＣＰＵコア１でタスクＡを実行中であれば、タスクＡはそのままＣＰＵコア１で実行し、タスクＢはＣＰＵコア２で実行することで、コンテキストスイッチに伴うオーバヘッドを低減し、また、退避や復帰に伴うエラーを低減できる。この場合、ＣＰＵコア１は、タスクＡの実行結果をＩ／Ｏデバイス１４ｂを介してアクチュエータ類２６に供給できるので、制御を継続しながら試験実行できる。【００５７】
タスクＢ以外に、ＣＰＵコア１で実行中でないタスクが複数ある場合がある（タスクＢとタスクＣがある場合）、どちらをＣＰＵコア２に試験実行させるかを決定する必要がある。この場合、ディスパッチャ３３はタスクキューに登録された各タスクの優先度を参照し、最も優先度の低いタスク又はタスクキューの最後尾のタスクをＣＰＵコア２に試験実行させる。こうすることで、後述する一致判定を行う時間的な余裕が生まれる。【００５８】
〔試験実行に伴う実行結果の取り扱い〕
ところで、ＣＰＵコア１又はＣＰＵコア２で実行した実行結果（数値）は、ＣＰＵコア１、２のレジスタ１、２からそれぞれのデータバッファに格納された後、バスの調停を経て、ＲＡＭ２１、通信インターフェイス２３又は入出力インターフェイス２４に送出される。しかしながら、ＣＰＵコア２が試験的に実行したタスクＡの実行結果は、まだ実行結果の検証が不十分な状態である。また、ＣＰＵコア１によるタスクＡの実行は、車両制御上の要請による実需の実行とは限らない。また、仮にＣＰＵコア２の実行結果が正しく、ＣＰＵコア１の実行が実需によるものでも、同じ複数の実行結果は不要である。【００５９】
すなわち、タスクＡを試験実行することにより、不要な実行結果が入出力インターフェイス２４等に出力されるおそれを生じさせる。そこで、ディスパッチャ３３がタスクＡをＣＰＵコア２に試験実行させた場合、有効化無効化切り替部３５は、ＣＰＵコア２が実行結果を入出力インターフェイス２４等に出力することを禁止する。また、ディスパッチャ３３が実需でないタスクＡをＣＰＵコア１に試験実行させた場合、有効化無効化切り替部３５は、ＣＰＵコア１が実行結果を入出力インターフェイス２４等に出力することを禁止する。こうすることで実需の実行結果のみが入出力インターフェイス２４に出力される。具体的には、有効化無効化切り替部３５は、例えばＣＰＵコア１やＣＰＵコア２のレジスタからデータバッファへの格納を禁止したり、データバッファに格納された実行結果を消去する。【００６０】
〔実行結果の一致の判定〕
負荷推定部３２が高負荷推定又は偏り推定を検出すると、以上のようにディスパッチャ３３は、静的又は動的な方法でＣＰＵコア２にタスクＡを試験実行させるタスクを決定する。ディスパッチャ３３は割込み発生時と同様に、ＣＰＵコア１におけるコンテキストをＣＰＵコア２に復帰させる。なお、ＣＰＵコア１からＣＰＵコア２へコンテキスト（実行結果）を受け渡すことは必ずしも必要でない。これは、本実施形態では実行結果の一致を判定するからである。しかし、コンテキストを復帰することで、ＣＰＵコア１とＣＰＵコア２の実行結果が一致するまでの時間を短縮できることが期待できる。【００６１】
そして、一致判定部３６はＣＰＵコア１によるタスクＡの実行結果と、ＣＰＵコア２によるタスクＢの実行結果とを比較し、両者が一致するか否かを判定する。実行結果は、ＣＰＵコア１と２のレジスタに格納されるので、一致判定部３６は２つのレジスタの内容の排他的論理和（Ｘｏｒ）をとり、全ビットが「０」であれば一致すると判定する。【００６２】
一致する場合、割り当て確定部３８は、タスクＡを割り当てるＣＰＵコア1~nをＣＰＵコア２に確定する。割り当て確定部３８は、有効化無効化切り替部３５、ディスパッチャ３３及びタスクスケジューラ３１に確定したＣＰＵコア２を通知する。これにより、有効化無効化切り替部３５は、ＣＰＵコア２が実行結果を出力することを許可する。また、ディスパッチャ３３は、ＣＰＵコア１で実行しているタスクＡを強制的に終了させる。また、タスクスケジューラ３１は、ＣＰＵコア１のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア２のタスクキューに登録する。【００６３】
ところで、一致判定においては、実行結果が完全には一致しないものの、比較の結果に大きな差異がない場合がある。エンジンやモータ制御の場合、目標制御量とのわずかな差異であればそれを許容して、ＣＰＵコア間の処理負荷を平準化した方が好ましいとも考えられる。また、このような許容値はタスク毎に異なると考えられる。【００６４】
そこで、マルチコアシステム１００は、一致判定テーブル３７に、タスク毎の実行結果の差異の許容値を登録しておく。図５Ｂは一致判定テーブル３７の一例を示す。一致判定部３６は、タスク毎に一致判定テーブル３７を参照して、許容範囲であれば一致すると判定する。以下では、許容範囲に入った場合を含めて「一致」したという。【００６５】
また、一致しない場合、タスクＡを別のＣＰＵコア２に割り当てないと、ＣＰＵコア間の処理負荷の平準化を図れず、実行結果が遅延するおそれがある。そこで、一致判定部３６は、比較の結果が一致しない場合、一致するまで待機する。これにより、処理の平準化を促すことができる。【００６６】
一方、長時間の待機は実需の演算の遅延をもたらすので、図５Ｂの一致判定テーブル３７には最大待機時間がタスク毎に登録されている。一致判定部３６は、比較の結果が一致しない場合、最大待機時間の間、繰り返しタスクを実行し、一致するまで待機する。最大待機時間内に、実行結果が一致しない場合、ディスパッチャ３３は次のタスク（例えば、タスクＢ）をＣＰＵコア２に試験実行させて、一致判定部３６は、再度、ＣＰＵコア１とＣＰＵコア２によるタスクＢの実行結果が一致するか否かを判定する。こうすることで、実行結果が一致しやすいタスクをＣＰＵコア２に割り当てることができる。なお、最大待機時間内であっても、タスクキューに優先度の高いタスクが登録されれば、一致判定のタスクはディスパッチャ３３により強制的に終了させられる。【００６７】
〔マルチコアシステム１００の処理手順〕
・ＣＰＵコア２の起動前
以上の構成に基づき、マルチコアシステム１００がタスクＡをＣＰＵコア２に移動させる手順を図６のフローチャート図に基づき説明する。図６の手順は、マルチコアシステム１００が起動中、所定のサイクル時間毎に繰り返し実行される。スタート時、ＣＰＵコア２は起動しておらず、ＣＰＵコア１が全てのタスクを実行しており、負荷推定部３２はＣＰＵコア１の処理負荷を常時監視している。【００６８】
サイクル時間毎に、負荷推定部３２は、処理負荷が高くなったか否か又は高くなる可能性があるか否かを判定する（Ｓ１０）。高負荷推定されなければ（Ｓ１０のＮｏ）、図６の処理はそのまま終了する。【００６９】
高負荷推定した場合（Ｓ１０のＹｅｓ）、負荷推定部３２はディスパッチャ３３にタスクの試験実行を要求する。ディスパッチャ３３は、静的又は動的のいずれかの予め定められた方法で、割り当てるタスクＡを決定し、ＣＰＵコア２に試験実行させる。ＣＰＵコア１がタスクＡを実行していない場合、ディスパッチャ３３はＣＰＵコア１にタスクＡを実行させる（Ｓ２０）。【００７０】
なお、ＣＰＵコア２が起動している場合は、ＣＰＵコア２の処理負荷が十分に低いことを確認しておく。また、タスクＡをＣＰＵコア２に試験実行させる際、有効化無効化切り替部３５は、ＣＰＵコア２による実行結果の出力を禁止する。同様に、ＣＰＵコア１によるタスクＡの実行が実需の実行でない場合、有効化無効化切り替部３５はＣＰＵコア１による実行結果の出力を禁止する。【００７１】
そして、一致判定部３６は、ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果を比較する（Ｓ３０）。一致判定部３６は、一致判定テーブル３７を参照し差異が許容量の範囲内であるか否かに応じて、一致したか否かを判定する（Ｓ４０）。【００７２】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致した場合（Ｓ４０のＹｅｓ）、割り当て確定部３８はタスクＡの割り当て先をＣＰＵコア２に確定する（Ｓ５０）。これにより、ディスパッチャ３３は、ＣＰＵコア１に対するタスクＡの割り当てを終了し、有効化無効化切り替部３５はＣＰＵコア２によるタスクＡの実行結果の出力を許可し、タスクスケジューラ３１は、ＣＰＵコア１のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア２のタスクキューに登録する。【００７３】
以上で、処理負荷が低い間は消費電力を低減し、処理負荷が高くなった場合には２つのＣＰＵコアの処理負荷を平準化し、実行時間を保証することができる。【００７４】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致しない場合（Ｓ４０のＮｏ）、一致判定部３６は、一致判定テーブル３７のタスクＡの最大待機時間の間、繰り返し実行されるタスクＡの実行結果を比較する（Ｓ６０、Ｓ７０）。フィードバック制御であれば、実行の繰り返しにより２つの処理結果が接近することが期待できるので、待機することで処理の平準化を促進することができる。【００７５】
・ＣＰＵコア２の起動後
続いて、ＣＰＵコア１とＣＰＵコア２がいずれもタスクを実行している状態で、処理負荷が偏った場合又は偏るおそれがあることが検出された場合の、処理手順について図７に基づき説明する。【００７６】
サイクル時間毎に、負荷推定部３２は、処理負荷が偏ったか否か又は偏る可能性があるか否かを判定する（Ｓ１１）。【００７７】
負荷推定部３２が偏り推定した場合（Ｓ１１のＹｅｓ）、負荷推定部３２はディスパッチャ３３にタスクの試験実行を要求する。ディスパッチャ３３は、静的又は動的のいずれかの予め定められた方法で、割り当てるタスクＡを決定し、ＣＰＵコア２に試験実行させる。また、ＣＰＵコア１がタスクＡを実行していない場合、ディスパッチャ３３はＣＰＵコア１にタスクＡを試験実行させる（Ｓ２０）。タスクＡをＣＰＵコア１に試験実行させる際、有効化無効化切り替部３５は、ＣＰＵコア２による実行結果の出力を禁止する。同様に、ＣＰＵコア１によるタスクＡの実行が実需の実行でない場合、有効化無効化切り替部３５はＣＰＵコア１による実行結果の出力を禁止する。【００７８】
そして、一致判定部３６は、ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果を比較する（Ｓ３０）。一致判定部３６は、一致判定テーブル３７を参照し差異が許容量の範囲内であるか否かに応じて、一致したか否かを判定する（Ｓ４０）。【００７９】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致した場合（Ｓ４０のＹｅｓ）、割り当て確定部３８はタスクＡの割り当て先をＣＰＵコア１に確定する（Ｓ５０）。これにより、ディスパッチャ３３は、ＣＰＵコア１に対するタスクＡの割り当てを終了し、有効化無効化切り替部３５はＣＰＵコア２によるタスクＡの実行結果の出力を許可し、タスクスケジューラ３１は、ＣＰＵコア１のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア２のタスクキューに登録する。以上で、２つのＣＰＵコア１，２間で処理負荷が偏った場合は処理負荷を平準化することができる。【００８０】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致しない場合（Ｓ４０のＮｏ）、一致判定部３６は、一致判定テーブル３７のタスクＡの最大待機時間の間、繰り返し実行されるタスクＡの実行結果を比較する（Ｓ６０、Ｓ７０）。これにより、可能な限り、処理を平準化することができる。【００８１】
なお、図７では、ＣＰＵコアが２つの場合を説明したが、３つ以上のＣＰＵコアがそれぞれタスクを実行している場合、ディスパッチャ３３は、処理負荷の最も高いＣＰＵコアのタスクを最も低いＣＰＵコアに割り当てる。図８は、ＣＰＵコアが３以上の場合の処理負荷の平準化を模式的に示す図の一例である。図８では、ＣＰＵコア１の処理負荷が大、ＣＰＵコア２の処理負荷が小、ＣＰＵコア３の処理負荷が中、である。この場合、ディスパッチャ３３は、ＣＰＵコア１で実行されているタスクＡ又はＢを、ＣＰＵコア２に割り当てる。【００８２】
また、平準化するのでなく、ＣＰＵコア２で実行されているタスクＣを、処理負荷が中程度のＣＰＵコア３に割り当てることで、ＣＰＵコア２を停止させ消費電力を低減できる場合がある。平準化するか消費電力の低減を図るかは、ＣＰＵコア１の処理負荷の大きさや、ＣＰＵコア２を停止させた際、ＣＰＵコア３の処理負荷がどの程度になるか等に応じて、定めることができる。【００８３】
動的な決定方法の場合、ＣＰＵコア１で実行しているタスクＡをＣＰＵコア２にも試験実行させればよいが、静的な決定方法の場合、ＣＰＵコア２に試験実行させるタスクを決定する。静的な決定方法の場合、ディスパッチャ３３は、処理負荷の最も低いＣＰＵコア２に優先的に割り当てられているタスクであって、現在は処理負荷の最も高いＣＰＵコア１に割り当てられてるタスクを、優先テーブル３４を参照して決定する。そしてそのタスクを最も処理負荷の高いＣＰＵコア１と低いＣＰＵコア２に試験実行させる。試験実行させるタスクを優先テーブル３４により決定することで、処理負荷の平準化が容易になる。【００８４】
ステップＳ１１に戻り、偏り推定されない場合（Ｓ１１のＮｏ）、負荷推定部３２は、ＣＰＵコア２の処理負荷が低いか否かを判定する（Ｓ１１０）。この判定の閾値は、ＣＰＵコア２を停止しそのタスクをＣＰＵコア１にて実行しても、ＣＰＵコア１の処理負荷が高くなることのないように定められる。したがって、使用率Ｒ１、タスク数Ｎ１、車両の状態値Ｓを判定する各閾値は、ＴＲ１
、ＴＮ１ 、ＴＳよりも小さい。【００８５】
ＣＰＵコア２の処理負荷が低い場合（Ｓ１１０のＹｅｓ）、高負荷推定された場合と同様の処理によりＣＰＵコア２を停止させることができる。【００８６】
具体的には、負荷推定部３２は、負荷推定部３２はディスパッチャ３３にタスクの試験実行を要求する。ディスパッチャ３３は、静的又は動的のいずれかの予め定められた方法で、割り当てるタスクＡを決定し、ＣＰＵコア１に試験実行させる。また、ＣＰＵコア２がタスクＡを実行していない場合、ディスパッチャ３３はＣＰＵコア２にタスクＡを試験実行させる（Ｓ１２０）。タスクＡを試験実行させる際、有効化無効化切り替部３５は、ＣＰＵコア１が実行結果を出力することを禁止し、ＣＰＵコア２によるタスクＡの実行が実需の実行でない場合、ＣＰＵコア２が実行結果を出力することを禁止する。【００８７】
そして、一致判定部３６は、ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果を比較する（Ｓ１３０）。一致判定部３６は、一致判定テーブル３７を参照し差異が許容量の範囲内であるか否かに応じて、一致したか否かを判定する（Ｓ１４０）。【００８８】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致した場合（Ｓ１４０のＹｅｓ）、割り当て確定部３８はタスクＡの割り当て先をＣＰＵコア１に確定する（Ｓ１５０）。これにより、ディスパッチャ３３は、ＣＰＵコア２に対するタスクＡの割り当てを終了し、有効化無効化切り替部３５はＣＰＵコア１によるタスクＡの実行結果の出力を許可し、タスクスケジューラ３１は、ＣＰＵコア２のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア１のタスクキューに登録する。【００８９】
また、マルチタスクシステム１００は、例えばクロックの供給を終了してＣＰＵコア２を停止する。これにより、消費電力を低減できる。このようにして、処理負荷が低いＣＰＵコア２を停止して、消費電力を低減することができる。【００９０】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が一致しない場合（Ｓ１４０のＮｏ）、一致判定部３６は、一致判定テーブル３７のタスクＡの最大待機時間の間、繰り返し実行されるタスクＡの実行結果を比較する。待機することで消費電力の低減を促進しやすくなる。【００９１】
以上説明したように、本実施形態のマルチコアシステム１００は、制御系のプログラムから生成されたタスクの実行結果を急変させずに、タスクを実行するＣＰＵコアを切り替えることができる。
【実施例２】
【００９２】
実施例１のマルチコアシステム１００は、最大待機時間を上限に、ＣＰＵコア１とＣＰＵコア２の実行結果が一致するまで待機した。しかし、負荷分散では、高負荷となった例えばＣＰＵコア１から、可能な限り早くタスクＡを他のＣＰＵコア２に割り当てることが好ましい。【００９３】
ところで、複数のＣＰＵコア1~nがある場合、処理負荷を分散するためにタスクの割り当て先は最も処理負荷の小さいＣＰＵコアとすることが一般的である。しかし、制御系のタスクでは、制御の連続性を確保したままタスクの割り当て先を切り替える必要があるので、処理負荷の低いＣＰＵコア1~nにタスクを割り当てるよりも、早く処理負荷を分散できるという観点から、割り当て先のＣＰＵコア1~nを選定する方が好ましい場合もある。すなわち、処理負荷が低いＣＰＵコア1~nにタスクを割り当てて、実行結果が一致するまで時間を掛けるよりも、多少、処理負荷が高くても、早く一致する実行結果が得られるＣＰＵコアの方が割り当て先として最適となる場合がある。【００９４】
そこで、本実施例では、割り当て先として複数のＣＰＵコア1~nがある場合、最も早く実行結果が一致したＣＰＵコア1~nにタスクを割り当てるマルチコアシステム１００について説明する。【００９５】
図９は、本実施例のマルチコアシステム１００による負荷分散を模式的に説明する図の一例を示す。本実施例のマルチコアシステム１００は、複数のＣＰＵコア1~nに同じタスクを試験実行させ、最も早く実行結果が一致したＣＰＵコア1~nをタスクの割り当て先に確定する。【００９６】
図９では、マルチコアシステム１００は４つのＣＰＵコア１〜４を有する。ＣＰＵコア１はタスクＡ、タスクＢを、ＣＰＵコア４はタスクＤをそれぞれ実行している。ＣＰＵコア１が高負荷になったので、実施例１と同様に例えばディスパッチャ３３がタスクＡをＣＰＵコア２〜３に試験実行させる。高負荷判定部は、各ＣＰＵコア1~nの処理負荷を監視しており、処理負荷が所定値以下のＣＰＵコア1~nを抽出し、ディスパッチャ３３に通知する。図９では、ＣＰＵコア４の処理負荷が高いので、ディスパッチャ３３はＣＰＵコア４にタスクＡを試験実行させない。【００９７】
一致判定部３６は、ＣＰＵコア１によるタスクＡの実行結果とＣＰＵコア２によるタスクＡの実行結果を比較し、ＣＰＵコア１によるタスクＡの実行結果とＣＰＵコア３によるタスクＡの実行結果を比較する。そして、一致判定部３６は、ＣＰＵコア１によるタスクＡの実行結果に、最も早く実行結果が一致したＣＰＵコア1~nを検出する。割り当て確定部３８は最も早く実行結果が一致したタスクＡの割り当て先をＣＰＵコア２に確定する。【００９８】
こうすることで、割り当て先のＣＰＵコア1~nを確定するまでの時間を短縮できるので、複数のＣＰＵコア1~n間で処理負荷を分散する際に、制御が不安定になるリスクを低減できる。【００９９】
〔マルチコアシステム１００の機能ブロック〕
図１０は、本実施例におけるマルチコアシステム１００の機能ブロック図の一例を示す。なお、図１０において図４と同一部には同一の符号を付しその説明は省略する。負荷推定部３２は、全てのＣＰＵコア1~nの処理負荷を監視している。そして、いずれかのＣＰＵコア1~nの処理負荷が高くなったこと、又は、高くなる可能性があることを検出する。なお、全てのＣＰＵコア1~nの処理負荷が一様に高負荷推定されることは少ないので、本実施例では、高負荷推定と偏り推定は同義としてよい。負荷推定部３２が、例えば、ＣＰＵコア１について高負荷推定した場合、負荷推定部３２は、例えば、処理負荷が所定値以下のＣＰＵコア２、３を、タスクＡを割り当てる候補のＣＰＵコア1~nに決定する。【０１００】
ディスパッチャ３３は、候補に決定されたＣＰＵコア２，３に、それぞれタスクＡを試験実行させる。また、高負荷のＣＰＵコア１がタスクＡを実行していない場合は、ディスパッチャ３３はＣＰＵコア１にタスクＡを試験実行させる。こうすることで、各ＣＰＵコア１〜３は、それぞれタスクＡを実行する。なお、ＣＰＵコア２とＣＰＵコア３がタスクＡの実行を開始する時刻は、ＣＰＵコア２とＣＰＵコア３の処理状況により定まるので、ＣＰＵコア２とＣＰＵコア３が同時にタスクＡの実行を開始するとは限らない。【０１０１】
そして、本実施例の一致判定部３６は、高負荷のＣＰＵコア１によるタスクＡの実行結果と、判定用にタスクＡが割り当てられた各ＣＰＵコア２の実行結果、高負荷のＣＰＵコア１によるタスクＡの実行結果と、判定用にタスクＡが割り当てられた各ＣＰＵコア３によるタスクＡの実行結果をそれぞれ比較する。一致判定部３６は、最も早く実行結果が一致した例えばＣＰＵコア２の識別情報を割り当て確定部３８に通知する。【０１０２】
割り当て確定部３８はタスクＡの割り当て先をＣＰＵコア２に確定する。割り当て確定部３８は、有効化無効化切り替部３５、ディスパッチャ３３及びタスクスケジューラ３１に確定したＣＰＵコア２の識別情報を通知する。これにより、有効化無効化切り替部３５は、ＣＰＵコア２が実行結果を出力することを許可する。また、ディスパッチャ３３は、ＣＰＵコア１とＣＰＵコア３で実行しているタスクＡを強制的に終了させる。また、タスクスケジューラ３１は、ＣＰＵコア１のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア２のタスクキューに登録する。【０１０３】
こうすることで、マルチコアシステム１００は、高負荷となったＣＰＵコア１と、タスクＡの実行結果が最も早く一致したＣＰＵコア２をタスクＡの割り当て先に確定でき、割り当て先のＣＰＵコア1~nを確定するまでの時間を短縮できる。【０１０４】
〔マルチコアシステム１００の処理手順〕
図１１は、マルチコアシステム１００が、高負荷となったＣＰＵコア１と、タスクＡの実行結果が最も早く一致したＣＰＵコア２にタスクＡの割り当て先を確定する手順を示すフローチャート図の一例を示す。なお、ＣＰＵコア１〜４は起動していてもよいし、起動していなくてもよい。【０１０５】
負荷推定部３２はＣＰＵコア１〜４の処理負荷を常時監視している。負荷推定部３２は、処理負荷が高くなったか否か又は高くなる可能性があるか否かを判定する（Ｓ１０）。高負荷推定されなければ（Ｓ１０のＮｏ）、負荷分散する必要はないので、図６の処理はそのまま終了する。【０１０６】
高負荷推定された場合（Ｓ１０のＹｅｓ）、負荷推定部３２はタスクＡの仮の割り当て先を決定する（Ｓ１２）。仮の割り当て先は処理負荷が所定値以下のＣＰＵコア２，３である。【０１０７】
ディスパッチャ３３は、静的又は動的のいずれかの予め定められた方法で決定されたタスクＡをＣＰＵコア２とＣＰＵコア３に試験実行させる（Ｓ２１）。高負荷のＣＰＵコア１がタスクＡを実行していない場合は、ディスパッチャ３３はＣＰＵコア１にタスクＡを試験実行させる。【０１０８】
ディスパッチャ３３がタスクＡをＣＰＵコア２，ＣＰＵコア３に試験実行させる際、有効化無効化切り替部３５は、ＣＰＵコア２、３による実行結果の出力を禁止し、ＣＰＵコア１によるタスクＡの実行が実需の実行でない場合、ＣＰＵコア１による実行結果の出力を禁止する。【０１０９】
そして、一致判定部３６は、ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果、ＣＰＵコア１とＣＰＵコア３によるタスクＡの実行結果、をそれぞれ比較する（Ｓ３０）。一致判定部３６は、一致判定テーブル３７を参照し差異が許容量の範囲内であるか否かに応じて、一致したか否かを判定する（Ｓ４０）。【０１１０】
ＣＰＵコア１とＣＰＵコア２によるタスクＡの実行結果が最も早く一致した場合（Ｓ４０のＹｅｓ）、割り当て確定部３８はタスクＡの実行結果をＣＰＵコア２に確定し、ＣＰＵコア１とＣＰＵコア３によるタスクＡの実行結果が最も早く一致した場合（Ｓ４０のＹｅｓ）、割り当て確定部３８はタスクＡの実行結果をＣＰＵコア３に確定する（Ｓ５０）。一致するか否かの判定は、実施例１と同様に最大待機時間の間、繰り返される。【０１１１】
割り当て確定部３８は、有効化無効化切り替部３５、ディスパッチャ３３及びタスクスケジューラ３１に確定したＣＰＵコアを通知する。これにより、有効化無効化切り替部３５は、ＣＰＵコア２が実行結果を出力することを許可する。また、ディスパッチャ３３は、ＣＰＵコア１とＣＰＵコア３で実行しているタスクＡを強制的に終了させる。また、タスクスケジューラ３１は、ＣＰＵコア１のタスクキューからタスクＡを消去し、消去したタスクＡをＣＰＵコア２のタスクキューに登録する。【０１１２】
本実施例のマルチコアシステム１００によれば、割り当て先のＣＰＵコア1~nを確定するまでの時間を短縮できるので、複数のＣＰＵコア間で処理負荷を分散する際に、制御が不安定になるリスクを低減できる。【０１１３】
なお、本国際出願は、２００８年７月２２日に出願した日本国特許出願２００８−１８８８３０号に基づく優先権を主張するものであり、日本国特許出願２００８−１８８８３０号の全内容を本国際出願に援用する。
【図１Ａ】
2010010723.tif 000003
【図１Ｂ】
2010010723.tif 000004
【図２】
2010010723.tif 000005
【図３】
2010010723.tif 000006
【図４】
2010010723.tif 000007
【図５Ａ】
2010010723.tif 000008
【図５Ｂ】
2010010723.tif 000009
【図６】
2010010723.tif 000010
【図７】
2010010723.tif 000011
【図８】
2010010723.tif 000012
【図９】
2010010723.tif 000013
【図１０】
2010010723.tif 000014
【図１１】
2010010723.tif 000015
【手続補正書】
【提出日】平成22年5月7日(2010.5.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
制御系のプログラムから生成されたタスクを、ＣＰＵコアに割り当てて実行するマルチコアシステムであって、
第１のＣＰＵコアが実行する前記タスクを、第２のＣＰＵコアに切り替えて実行する際、前記タスクを第２のＣＰＵコアに試験実行させる試験実行指示手段と、
第１のＣＰＵコアの実行結果と第２のＣＰＵコアの試験実行結果が一致したか否かを判定する判定手段と、
第１のＣＰＵコアの実行結果と第２のＣＰＵコアの試験実行結果が一致すると判定された場合、前記タスクの割り当て先を第２のＣＰＵコアに確定する割り当て確定手段と、
を有することを特徴とするマルチコアシステム。
【請求項２】
前記試験実行指示手段は、前記タスクを二以上の第２のＣＰＵコアに試験実行させ、
前記判定手段は、第１のＣＰＵコアの実行結果と二以上の第２のＣＰＵコアの試験実行結果をそれぞれ比較し、
前記割り当て確定手段は、二以上の第２のＣＰＵコアのうち、最も早く第１のＣＰＵコアの実行結果と一致したＣＰＵコアに、前記タスクの割り当て先を確定する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項３】
第１のＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記処理負荷検出手段により、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷又は高負荷になることが予測された場合、
前記試験実行指示手段は、前記タスクを第２のＣＰＵコアに試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項４】
前記タスクを第１のＣＰＵコアが実行していない場合、
前記試験実行指示手段は、第１のＣＰＵコアに前記タスクを試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項５】
第１及び第２のＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記処理負荷検出手段が、第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを検出した場合、又は、偏りを予測した場合、
前記試験実行指示手段は、処理負荷の高い第１又は第２のＣＰＵコアが実行する前記タスクを、第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させる、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項６】
前記判定手段は、第１のＣＰＵコアの実行結果の値と第２のＣＰＵコアの試験実行結果の値の差が、所定範囲内であれば一致したと判定する、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項７】
前記差は、前記タスクに応じて予め定められている、
ことを特徴とする請求項６記載のマルチコアシステム。
【請求項８】
前記判定手段は、第１のＣＰＵコアの実行結果と第２のＣＰＵコアの試験実行結果が一致しない場合、予め定められた待機時間の範囲内で一致するまで判定を繰り返す、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項９】
優先的に割り当てるＣＰＵコアを前記タスクに対応づけて登録した優先テーブルを有し、
前記試験実行指示手段は、前記優先テーブルを参照して前記タスクを試験実行させるＣＰＵコアを決定する、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項１０】
ＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記試験実行指示手段が第２のＣＰＵコアに試験実行させるタスクは、
前記処理負荷検出手段が、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷となったことを検出した時若しくは高負荷になることを予測した時、又は、複数のＣＰＵコアの処理負荷の偏りを検出した時若しくは偏りを予測した時、
に第１のＣＰＵコアが実行しているタスクである、
ことを特徴とする請求項１又は２記載のマルチコアシステム。
【請求項１１】
第１のＣＰＵコアは、
前記処理負荷検出手段が、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷となったことを検出した時若しくは高負荷になることを予測した時、又は、複数のＣＰＵコアの処理負荷の偏りを検出した時若しくは偏りを予測した時、に実行しているタスクの実行結果を、制御対象に出力する、
ことを特徴とする請求項１０記載のマルチコアシステム。
【請求項１２】
前記処理負荷検出手段は、所定時間に対する前記タスクの実行時間の割合であるＣＰＵコア使用率が閾値ＴＲ１より大、又は、待機しているタスクの数が閾値ＴＮ１より大、の少なくともいずれかを満たす場合に、第１のＣＰＵコアの処理負荷が第１の閾値よりも高負荷であることを検出し、
ＣＰＵコア使用率の増加率が閾値ＴｄＲ１より大、又は、待機しているタスクの数の増加率が閾値ＴｄＮ１よりも大、の少なくともいずれかを満たす場合に、第１のＣＰＵコアの処理負荷が高負荷になることを予測する、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１３】
前記処理負荷検出手段は、車両の状態を示す状態値が閾値ＴＳより大の場合に、第１のＣＰＵコアの処理負荷が閾値よりも高負荷であることを検出し、
車両の状態を示す状態値の増加率が閾値ＴｄＳより大の場合に、第１のＣＰＵコアの処理負荷が高負荷になることを予測する、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１４】
前記処理負荷検出手段は、
所定時間に対する前記タスクの実行時間の割合である第１のＣＰＵコアのＣＰＵコア使用率と第２のＣＰＵコアのＣＰＵコア使用率の差が閾値ＴＲ１２より大、又は、第１のＣＰＵコアによる実行を待機しているタスクの数と第２のＣＰＵコアによる実行を待機しているタスクの数の差が、閾値ＴＮ１２より大、の少なくともいずれかを満たす場合に、
第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを検出し、
第１のＣＰＵコアのＣＰＵコア使用率と第２のＣＰＵコア使用率との差の増加率が閾値ＴｄＲ１２より大、又は、第１のＣＰＵコアによる実行を待機しているタスクの数と第２のＣＰＵコアによる実行を待機しているタスクの数の差の増加率が閾値ＴｄＮ１２より大、の少なくともいずれかを満たす場合に、
第１のＣＰＵコアと第２のＣＰＵコアの処理負荷の偏りを予測する、
ことを特徴とする請求項５記載のマルチコアシステム。
【請求項１５】
第２のＣＰＵコアの処理負荷を検出する処理負荷検出手段を有し、
前記処理負荷検出手段が、第２のＣＰＵコアの処理負荷が第２の閾値よりも低いことを検出した場合、
前記試験実行指示手段は、第２のＣＰＵコアが実行する前記タスクを、第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させ、
前記判定手段は、第１のＣＰＵコアと第２のＣＰＵコアの試験実行結果が一致したか否かを判定し、
前記判定手段が一致すると判定した場合、前記タスクを実行するＣＰＵコアを第２のＣＰＵコアから第１のＣＰＵコアに切り替え、第２のＣＰＵコアを停止させる、
ことを特徴とする請求項３記載のマルチコアシステム。
【請求項１６】
前記制御系のプログラムは、過去の実行結果を次のタスクの実行に用いるプログラムである、
ことを特徴とする請求項１記載のマルチコアシステム。
【請求項１７】
請求項１〜１６いずれか１項記載のマルチコアシステムと、
前記制御系のプログラムを記憶した記憶手段と、
アクチュエータと接続されるインターフェイスと、
を有することを特徴とする車両用電子制御ユニット。
【請求項１８】
制御系のプログラムから生成されたタスクを、ＣＰＵコアに割り当てて実行するマルチコアシステムのタスク切り替え方法であって、
第１のＣＰＵコアが実行する前記タスクを、第２のＣＰＵコアに切り替えて実行する際、試験実行指示手段が、第１のＣＰＵコアが実行する前記タスクを第１のＣＰＵコア及び第２のＣＰＵコアに試験実行させるステップと、
判定手段が、第１のＣＰＵコアの試験実行結果と第２のＣＰＵコアの試験実行結果が一致したか否かを判定するステップと、
第１のＣＰＵコアの試験実行結果と第２のＣＰＵコアの試験実行結果が一致すると判定された場合、割り当て確定手段が、前記タスクの割り当て先を第２のＣＰＵコアに確定するステップと、
を有することを特徴とするタスク切り替え方法。
【国際調査報告】
2010010723.tif 000016
2010010723.tif 000017
2010010723.tif 000018
2010010723.tif 000019