JP2011141782A - 情報処理装置、電子制御ユニット、タスク割り当て方法 - Google Patents
情報処理装置、電子制御ユニット、タスク割り当て方法 Download PDFInfo
- Publication number
- JP2011141782A JP2011141782A JP2010002553A JP2010002553A JP2011141782A JP 2011141782 A JP2011141782 A JP 2011141782A JP 2010002553 A JP2010002553 A JP 2010002553A JP 2010002553 A JP2010002553 A JP 2010002553A JP 2011141782 A JP2011141782 A JP 2011141782A
- Authority
- JP
- Japan
- Prior art keywords
- task
- cpu
- load
- sensor
- processing load
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】処理負荷を予測して、CPUコアに処理を割り当てられる情報処理装置、電子制御ユニット及びタスク割り当て方法を提供すること。
【解決手段】複数のセンサ11のセンサ値を受け付ける入力インターフェイス24と、複数のタスクプログラムが記憶されたタスク記憶手段15と、タスクプログラムを実行してセンサ値に演算処理を施す複数のCPU13,14と、を有する情報処理装置100であって、複数のCPUの処理負荷を検出する処理負荷検出手段42と、センサ値の増減傾向を検出する増減検出手段38と、センサ値に演算処理を施すCPUを特定し、処理負荷と増減傾向から前記CPUの予測処理負荷を算出する処理負荷予測手段48と、複数のCPUの予測処理負荷を比較して、第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てる負荷分散手段44と、を有することを特徴とする。
【選択図】図1
【解決手段】複数のセンサ11のセンサ値を受け付ける入力インターフェイス24と、複数のタスクプログラムが記憶されたタスク記憶手段15と、タスクプログラムを実行してセンサ値に演算処理を施す複数のCPU13,14と、を有する情報処理装置100であって、複数のCPUの処理負荷を検出する処理負荷検出手段42と、センサ値の増減傾向を検出する増減検出手段38と、センサ値に演算処理を施すCPUを特定し、処理負荷と増減傾向から前記CPUの予測処理負荷を算出する処理負荷予測手段48と、複数のCPUの予測処理負荷を比較して、第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てる負荷分散手段44と、を有することを特徴とする。
【選択図】図1
Description
本発明は、複数のCPUコアを有するマルチコア型のCPUにおいて、各CPUコアの負荷を分散する情報処理装置、電子制御ユニット及びタスク割り当て方法に関する。
複数のCPUコアを有するマルチコア型のCPUでは、各CPUコアが独自に処理を実行することができ、処理効率を向上させることができるようになっている。このマルチコア型のCPUを搭載した情報処理装置では、各CPUコアへの負荷を分散させることで、さらに処理効率の向上が可能になる。例えば、各CPUコアがそれぞれOSを実行できるようにしておき、このOSが自身の処理負荷を検出して、処理負荷が大きくなると、CPUコアに別のOSを起動させる情報処理装置が考案されている(例えば、特許文献1参照。)。
また、より直接にCPUコアの処理負荷を監視して、負荷を分散することも考えられている(例えば、特許文献2、3参照。)。特許文献2には、タスク走行時間によりCPUコアの負荷率を計測し、負荷率の少ないCPUコアにだけ割り込みを発生させ処理を実行させるマルチCPUシステムが開示されている。
特許文献3には、分散装置の負荷率の移動平均値を監視して、移動平均値が所定値以下になると、分散装置の個別動作ジャーナルファイルと異常ログファイルを中央装置に送信する分散型制御システムが開示されている。
しかしながら、特許文献2のように現在のCPUコアの処理負荷を算出して処理を割り当てると、割り当てた際には別の処理で処理負荷が増大している可能性があるという問題がある。また、特許文献3のように、負荷率の移動平均値を指標とした場合、移動平均値は過去の負荷率に影響されるので、必ずしも現在のCPUコアの負荷率を現していないという問題がある。
また、特許文献3のように、過去の負荷率が影響しやすい移動平均値により将来の負荷率を予測することは好ましくなく、タスクを割り当てる際の処理負荷を的確に予測することは困難である。
本発明は、上記課題に鑑み、処理負荷を予測して、CPUコアに処理を割り当てられる情報処理装置、電子制御ユニット及びタスク割り当て方法を提供することを目的とする。
上記課題に鑑み、本発明は、複数のセンサのセンサ値を受け付ける入力インターフェイスと、複数のタスクプログラムが記憶されたタスク記憶手段と、前記タスクプログラムを実行してセンサ値に演算処理を施す複数のCPUと、を有する情報処理装置であって、複数の前記CPUの処理負荷を検出する処理負荷検出手段と、前記センサ値の増減傾向を検出する増減検出手段と、前記センサ値に演算処理を施す前記CPUを特定し、前記処理負荷と前記増減傾向から前記CPUの予測処理負荷を算出する処理負荷予測手段と、複数の前記CPUの前記予測処理負荷を比較して、第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てる負荷分散手段と、を有することを特徴とする。
処理負荷を予測して、CPUコアに処理を割り当てられる情報処理装置、電子制御ユニット及びタスク割り当て方法を提供することができる。
以下、本発明を実施するための形態について図面を参照しながら説明する。
図1は、本実施例の情報処理装置200による負荷分散を模式的に説明する図の一例である。情報処理装置100はホストCPU12及び複数のサブCPU13,14を有する。各サブCPU13,14は負荷情報を例えば定期的にホストCPU12に通知する。ホストCPU12の例えばOS30は、負荷情報に基づき各サブCPU13,14の負荷率を算出し、処理負荷が分散されるように各サブCPU13,14へのタスクの割り当てを変更する。
したがって、各サブCPU13,14の負荷率に大きな偏りが生じないように(例えば、同程度になるように)タスクを割り当てることができ、情報処理装置100の各サブCPU13,14の負荷率を分散させることができる。
図2は、本実施例の情報処理装置100の概略構成図の一例を示す。車載された情報処理装置100は、ECU(Electronic Control Unit)又は電子制御ユニットと称されることがある。情報処理装置100は、複数のCPUコアを有するマルチコア型の設計となっている。複数のCPUコアを搭載することで、従来は別々のECUで実行されていた処理を、1つのECUにて処理することが可能になる。これにより、車載されるECUの数を低減でき、省スペース化や省電力化が可能になる。本実施例ではCPUコアをサブCPU13,14と称している。
情報処理装置100は、バス16に接続された、センサ部11、ホストCPU12、サブCPU13(以下、サブECU1という)、サブCPU14(以下、サブCPU2という)、Flash ROM15、RAM17、タイマ23、タイマ25及びDMAC18を有する。サブCPU1とサブCPU2は同じ構成を有するので、サブCPU1を例にして説明する。なお、サブCPU1,2の数は、3以上でもよい。
また、ホストCPU12と各サブCPU1,2は、同じ構造でもよいし、異なる構造でもよい。本実施例では、ホストCPU12は後述するアイドル検出回路37を備えていなくてもよいので、ホストCPU12とサブCPU1,2は構造が異なっている。したがって、サブCPU1,2間の関係では「SMP(Symmetric Multi-Processing):対称型マルチプロセッサ)」と言え、ホストCPU12とサブCPU1,2の関係ではAMP(Asymmetric Multiprocessing:非対称型マルチプロセッサ)と言える。
サブCPU1は、バス16に接続された2つのレジスタセット33、34、レジスタセット33、34に接続されたマルチプレクサ32、マルチプレクサ32と接続された演算ユニット35、Flash ROM15と接続されたプログラムカウンタ31及び命令キュー36、とを有する。
レジスタセット33、34には、センサ部11が出力したセンサ値、又は、RAM17に記憶されているデータ等がバス16を介して読み出される。マルチプレクサ32は、プログラムの指定に従い演算ユニット35に接続するレジスタセット33、34を切り替える。
プログラムカウンタ31にはホストCPU1が実行するFlash ROM15のアドレスが記憶される。プログラムカウンタ31がクロックに同期してアドレスをFlash ROM15に出力すると、そのアドレスの命令が命令キュー36に読み出される。
プログラムカウンタ31は、1つの命令を読み出すことに、命令長の長さ(例えば、16〜32ビット)だけ、記憶しているアドレスの値を大きくして次の命令の読み出しに備える。また、演算ユニット35の実行した命令が分岐命令であれば、演算ユニット35が分岐先のアドレスをプログラムカウンタ31にセットする。また、演算ユニット35の実行した命令がサブルーチンの呼び出し命令であれば、演算ユニット35はサブルーチンの呼び出し命令の次の命令をスタックに退避させ、サブルーチンの先頭アドレスをプログラムカウンタ31にセットする。サブルーチンの処理が終了すると(リターン命令が実行されると)、演算ユニット35がスタックのアドレスをプログラムカウンタ31にセットする。
命令キュー36は、FIFO(First In, First Out)型の記憶手段で、複数の命令(例えば、5〜20程度)を保持させておくことができる。例えば、同期クロックに連動して、命令キュー36には実行順に命令が読み込まれる。また、例えば、分岐命令やサブルーチンの呼び出し命令が生じた場合、演算ユニット35が命令キュー36を初期化(フラッシュ)して、プログラムカウンタ31が示すアドレスから順番に、命令キュー36に分岐先の命令が読み込まれる。
演算ユニット35がプログラムを終了すると、プログラムカウンタ31に新たなアドレスがセットされなくなり、命令キュー36の命令もゼロになる。本実施例では、命令キュー36の命令がゼロの状態をCPUアイドル状態として、アイドル検出回路37は命令キュー36の命令がゼロの状態をINTC1に通知する。
命令キュー36に格納された命令は命令デコーダで解読され、不図示のレジスタファイルに記憶される。レジスタファイルには演算の種別、ソースオペランド(演算対象のデータのアドレス)等が記憶される。ソースオペランドが例えばレジスタセット33、34を指定すれば、演算ユニット35はレジスタセット33、34からデータを読み出す。演算ユニット35は、演算の種別に応じた演算をソースオペランドのデータに施す。図示するように、演算ユニット35は、一般的なALU(Arithmetic Logic Unit)35aの他、LSU(Load Store Unit)35b、MUL(Multiply)35c、DIV(Divide)35d等の演算が可能になっている。演算結果は、不図示のレジスタファイルに記憶され、プログラムの指示に応じてしてRAM17に書き込まれる。
DMAC18は、入力I/F24、タイマA1、タイマA2からRAM17へ、不図示のI/OからRAM17へ、又は、RAM17から不図示のI/Oへ、演算ユニット35を介することなくデータを転送する。
また、INTC20は、タイマ19に設定された値が経過するとCPUに割り込みを生じさせる割り込みコントローラである。例えば、サイクル時間毎に処理したいプログラムがある場合、そのプログラムはタイマ19にサイクル時間を設定してサブCPU1を停止する。INTC20はタイマ19がゼロになるとタイマ19に対応した割り込みベクタをサブCPU1に実行させる。割り込みベクタは指定されたプログラムのアドレスをプログラムカウンタ31に設定するので、再度、サイクル時間毎に処理したいプログラムが実行される。
INTC22(以下、INTC1という)は、タイマ21(以下、単にタイマBという)に設定された時間の間、命令キューの状況に応じてタイマ23(以下、タイマA1という)に割り込みを生じさせる割り込みコントローラである。タイマA1は、後に詳述するように、タイマBに設定された時間の間、命令キューの命令がゼロの時間を計測する。
なお、サブCPU2と接続されたINTC26(以下、INTC2という)とタイマ25(以下、単にタイマA2という)の機能は、サブCPU1に接続されたINTC1と同じであるので説明を省略する。タイマBをサブCPU1とは別に搭載してもよい。
センサ部11は、1以上のセンサ1〜センサn及び入力I/F24を有する。センサ1〜nは、例えば、回転速度センサ、アクセル開度センサ、及び、車内温度センサ等である。回転速度センサはクランクアングルセンサと呼ばれることもある。エンジン制御のタスクは、例えばアクセル開度センサが検出するアクセル開度によりエンジン回転数の維持・増加・減少を判断し、回転速度センサが検出する回転速度に基づき、燃料噴射量、燃料噴射タイミング、吸排気弁の開放タイミング、スロットル開度、イグナイタの点火タイミング等を演算する。
入力I/F24は、センサ1〜センサnのセンサ値を選択的に受け付けるインターフェイスである。入力I/F24はセンサ1〜センサnからの割り込みを受けて割り込みしたセンサからセンサ値を取得したり、又は、入力I/F24から予め定められた順番でセンサ1〜nに接続する。入力I/F24は、必要であればセンサ値をA/D変換した後、センサ1〜センサnのセンサ値をバス16に送出する。
また、入力I/F24は、現在、バス16を流れるセンサ値がどのセンサ1〜センサnのものかを信号線27によりホストCPU12に通知する。こうすることで、ホストCPU12はサブCPU1,2にセンサ値を取得すべきことを通知できる。
ホストCPU12は、処理負荷を分散するため、各サブCPU1,2が実行しているタスクを把握している。各サブCPU1,2はバス16上の全てのセンサ値を取得しうるが、各サブCPU1、2が全てのセンサ値を取得する必要はなく、サブCPU1,2は、自身が実行しているタスクに必要なセンサ値だけを取得できればよい。このため、ホストCPU12は、バス16に流れるセンサ値を取得すべきサブCPU1,2に対し取得するタイミングを指示するか、又は、現在、バス16を流れるセンサ値の識別情報をサブCPU1,2に通知する。なお、サブCPU1,2が全てのセンサ値を取得してもよい。
図3を用いて、ホストCPU12の機能について説明する。図3は、ホストCPU12の機能ブロック図の一例を示す。ホストCPU12は、Flash ROM15に記憶されたOS30又はプログラムを実行することで実現される、負荷率算出制御部41、負荷率算出部42、負荷率比較部43、負荷分散部44及び処理状況登録部45を有する。これらの機能の1以上をハード的に実装してもよい。
負荷率算出制御部41は、ホストCPU12による各サブCPU1,2の負荷率の算出を制御する。負荷率算出制御部41は、主に、負荷率を算出するタイミングを制御する。負荷率算出部42は負荷情報を用いて負荷率を算出する。負荷率比較部43は、サブCPU1、2間の負荷率を比較して、タスクの割り当てを変更すべきか否か、変更すべき場合は負荷率を低減すべきサブCPU、負荷率を増大可能なサブCPUを特定し、負荷分散部44に通知する。
負荷分散部44は、実行タスクテーブル47を参照して、タスク1〜nをサブCPU1又はサブCPU2に割り当て、割り当て結果を処理状況登録部45に通知する。実行タスクテーブル47は、各サブCPU1、2が現在、実行しているタスクを登録したテーブル状のデータである。また、センサ対応テーブル46は、タスクに必要なセンサ1〜センサnをタスクに対応づけたテーブルである。図では、タスク1にはセンサ1のセンサ値が、タスク2にはセンサ2のセンサ値が、タスクnにはセンサnのセンサ値が、それぞれ必要であることが登録されている。
また、サブCPU1、2から見たタスクとは、例えばC言語の1つのメイン関数である。具体的なタスク1〜nの内容は多岐にわたる。これは、本実施例の情報処理装置100が複数のECUを統合したものであるためである。上記の燃料噴射量等の決定以外では、タスク1〜nは、例えば、エンジン制御のための、エンジン回転数を決定する処理、吸気バルブの開放時間の決定処理、空燃比の決定処理、ブレーキ制御のための各輪のホイルシリンダ圧の決定、サスペンション制御ためのダンパー油圧の決定処理、エアコン制御のためのコンプレッサの冷媒吐出量やヒータコアによる加熱量等の決定処理、等である。
また、ハイブリッドECUが実行していたタスクであれば、タスク1〜nは、例えば、アクセル操作量、傾斜、車速等をパラメータとして運転モードを切り換える処理である。このタスクは、運転者が要求する駆動力の増加率や、一定時間内の駆動力の増加量(変化量)が所定値より大きい場合、モータ運転モードから、エンジン+モータ運転モードに切り替えたる。また、運転者が要求する駆動力が低下すれば、エンジン+モータ運転モードからモータ運転モードに切り替えたる。なお、センサ対応テーブル46に、各タスクのおよその処理負荷を登録しておいてもよい。
なお、ホストCPU12は、センサ対応テーブル46を参照して、サブCPU1、2に取得すべきセンサ値又は取得すべきタイミングを指示する。
処理状況登録部45は、情報処理装置100の起動時(電源オン時)に初期の処理状況を実行タスクテーブル47に登録し、その後、負荷分散部44からの通知に基づき、実行タスクテーブル47を更新する。
図4を用いて、負荷情報を算出するまでの手順を説明する。図4は、INTC1がタイマA1を制御する手順を示すフローチャート図の一例である。
負荷率算出制御部41は、各サブCPU1、2の負荷率を監視するため、定期的、又は、新たな車載装置の起動等を検出するとサブCPU1,2の負荷率を算出するタイミングになったと判定する(S10のYes)。
負荷率算出制御部41は、各サブCPU1、2の負荷率を監視するため、定期的、又は、新たな車載装置の起動等を検出するとサブCPU1,2の負荷率を算出するタイミングになったと判定する(S10のYes)。
すると、負荷率算出制御部41は、タイマBをリセットすると共にスタートさせる(S20)。負荷率算出制御部41は予め定められた時間(例えば、数ミリ〜数十ミリ、数百ミリ秒)をタイマBにセットする。
タイマBはリセット及びスタートされるとINTC1に割り込みするので、INTC1がタイマA1をリセットする(S30)。すなわち、タイマBのリセット・スタートとタイマA1のリセットはほぼ同時である。タイマA1には例えば「ゼロ」がセットされる。
アイドル検出回路37は、命令キューに命令が1つもない状況になると、INCT1と接続された信号線28をHigh状態に保つ。アイドル検出回路37は、命令キューに命令が読み込まれると、INCT1と接続された信号線28をLow状態に保つ。すなわち、アイドル検出回路37は、ホストCPU1がアイドル状態であることをINCT1に通知する。
このアイドル状態の時間を計測するため、タイマBにセットされた値がゼロになるまで(S40のYes)、INCT1は信号線28の状態に応じてホストCPU1がアイドル状態か否かを判定する(S50)。
INCT1は、ホストCPU1がアイドル状態の場合(S50のYes)、タイマA1のカウントをスタートさせ(S60)、ホストCPU1がアイドル状態でない場合(S50のNo)、タイマA1のカウントをストップさせる(S70)。このように、タイマA1は、ホストCPU1がアイドル状態の時間を計測する。
タイマBにセットされた値がゼロになると、タイマBはINCT1に割り込みする。すなわち、ステップS40に戻り、タイマBにセットされた値がゼロになると(S40のNo)、INCT1がタイマA1に割り込みして、タイマA1がそれまでにカウントした値をRAM17に記憶させる(S80)。この値が、上述した負荷情報である。
同様の処理を、サブCPU2も実行するので、RAM17には各サブCPU1,2の負荷情報が記憶されている。
図5を用いて、ホストCPU12が負荷を分散する手順を説明する。図5は、ホストCPU12が負荷を分散する手順を示すフローチャート図の一例である。
図3の負荷率算出制御部41は、タイマBにセットされた値がゼロになったことをタイマBの割り込み等で検出し、所定クロック数待機した後、負荷率算出部42に負荷率の算出を指示する。負荷率算出部42は、RAM17から各サブCPU1、2の負荷情報を読み出す。
負荷率算出部42は、タイマBにセットされた値と負荷情報から負荷率を算出する(S110)。
負荷率=(負荷情報/タイマBにセットされた値)×100〔%〕
したがって、負荷率が大きいサブCPU1、2ほど、処理負荷が大きいことが分かる。
負荷率=(負荷情報/タイマBにセットされた値)×100〔%〕
したがって、負荷率が大きいサブCPU1、2ほど、処理負荷が大きいことが分かる。
負荷率比較部43は、サブCPU1の負荷率1とサブCPU2の負荷率2を比較して、負荷率1と負荷率2の差が閾値以上か否かを判定する(S120)。
|負荷率1−負荷率2|≧閾値
負荷率1と負荷率2の差が閾値以上である場合(S120のYes)、負荷率比較部43は、負荷率の大きいサブCPU1又は2と、負荷率の小さいサブCPU2又は1を、負荷分散部44に通知する(S130)。負荷率1と負荷率2の差が閾値以上でない場合(S120のNo)、タスクの割り当てが変更されることなく図5の処理は終了する。
負荷率1と負荷率2の差が閾値以上である場合(S120のYes)、負荷率比較部43は、負荷率の大きいサブCPU1又は2と、負荷率の小さいサブCPU2又は1を、負荷分散部44に通知する(S130)。負荷率1と負荷率2の差が閾値以上でない場合(S120のNo)、タスクの割り当てが変更されることなく図5の処理は終了する。
なお、サブCPUが3以上ある場合、負荷率比較部43は、最も大きい負荷率と最も小さい負荷率の差が閾値以上か否かを判定する。最も大きい負荷率と最も小さい負荷率の差が閾値以上である場合、負荷率比較部43は、最も負荷率の大きいサブCPUと、最も負荷率の小さいサブCPUを、負荷分散部44に通知する。したがって、サブCPUが3以上ある場合も、負荷分散(タスクの割り当ての変更)を繰り返すことで、サブCPUが2つの場合と同様に負荷を分散できる。以下では、説明のため、サブCPU1の負荷率1の方がサブCPU2の負荷率2よりも閾値以上大きいとする。
負荷分散部44は、実行タスクテーブル47を参照して、負荷率の大きいサブCPU1が実行しているタスクと、負荷率の小さいサブCPU2が実行しているタスクを特定する(S140)。例えば、図3では、サブCPU1が、タスク1、タスク2、タスク3及びタスク4を、サブCPU2がタスク5及びタスク6を実行している。
本実施例では、サブCPU1、2はSMPであるとしたので、サブCPU1がタスク1〜タスク6のどのタスクを実行してもよいし、サブCPU2がタスク1〜タスク6のどのタスクを実行してもよい。したがって、負荷分散部44は、例えば、サブCPU1が実行しているタスク1〜タスク6のうち、命令キューに入っていないタスクを、サブCPU2割り当てると決定する。命令キューに入っていないタスクの割り当て先のサブCPU1、2を変更することで、割り当ての変更によるオーバーヘッドを小さくできる。なお、タスク1〜4が、命令キューに入っているか否かは、負荷分散部44がサブCPU1に問い合わせることで取得する。
また、負荷分散部44は、サブCPU1が実行しているタスクの内、最も大きい処理負荷のタスクをサブCPU2に割り当てると決定してもよい。こうすることで、サブCPU1とサブCPU2の負荷率の差を大きく改善できる。タスク毎の処理負荷は、センサ対応テーブル46に登録されているものとする。
負荷分散部44は、サブCPU1からサブCPU2に割り当てを変更するタスクを処理状況登録部45に通知する(S150)。処理状況登録部45は、実行タスクテーブル47において、サブCPU1に対応づけられているタスクのうち、サブCPU2に割り当てを変更されるタスクを消去し、消去したタスクをサブCPU2に対応付けて実行タスクテーブル47に登録する(S160)。
また、負荷分散部44は、サブCPU1に割り当てられていたタスクをサブCPU2に割り当てる(S170)。負荷分散部44は、例えば割り当て終了命令とタスク番号をサブCPU1に通知することで、サブCPU1に割り当てられていたタスクの終了をサブCPU1に命令する。これにより、サブCPU1は終了されたタスクを実行しないようになる。
また、負荷分散部44は、例えば割り当て命令とタスク番号をサブCPU2の命令キューに格納することで、サブCPU2に新たにタスクを割り当てる。また、負荷分散部44は割り当てるタスクの先頭アドレスをサブCPU2のプログラムカウンタ31に設定する。こうすることで、サブCPU2は新たなタスクの実行を開始できる。
なお、サブCPU2が既に別のタスクを実行している場合もあるので、負荷分散部44は、プログラムカウンタ31に割り当てるタスクの先頭アドレスを設定するタイミングを調整する。例えば、サブCPU2の命令キューに命令が1つも登録されていない場合、負荷分散部44は割り当てるタスクの先頭アドレスをサブCPU2のプログラムカウンタ31に設定する。命令キューに命令が1つも登録されていないことは、アイドル検出回路37からの信号を取得することで検出できる。
また、負荷分散部44は、サブCPU2の命令キューの最後に、割り当てられたタスクの先頭アドレスをサブCPU2のバッファ等に格納させる命令を挿入してもよい。この場合、サブCPU2は、割り当て命令と先頭アドレスから、既に実行しているタスクの終了時に割り当てられたタスクを開始することができる。
また、サブCPU2の命令キューにおける命令の有無に関係なく、サブCPU2が新たに割り当てられたタスクを実行するタイミングで、負荷分散部44が該タスクの先頭アドレスをサブCPU2のプログラムカウンタ31に設定してもよい。実行するタイミングとは、例えば、サブCPU2が実行するタスクが使用するセンサ値が、入力I/F24からバス16に出力されたタイミングである。
また、例えば、各サブCPU1、2に処理対象のタスクとタスクの先頭アドレスが登録されたテーブルを持たせ、該テーブルに、負荷分散部44が、新たなタスクとそのタスクの先頭アドレスを登録してもよい。この場合、タスクを割り当てた後、ホストCPU12は、入力I/F24がセンサ1〜nのいずれのセンサ値をバス16に出力したかに応じて、該センサのセンサ値を使用するタスクを実行するサブCPU2に該タスクの実行を指示する。サブCPU2は、センサ値をレジスタセットに取得し、タスクの先頭アドレスをプログラムカウンタにセットすることで、センサ値に対する処理を開始する。
タスクの割り当ての変更により、サブCPU1,2の処理負荷を分散することができた。サブCPU1,2の処理負荷を動的に分散するので、起動している車載装置など車両の状況に応じて常に処理負荷を分散できる。
以上のように、本実施例の情報処理装置100は、各サブCPU1、2の負荷率を比較して、各サブCPU1、2へのタスクの割り当てを変更することで、情報処理装置100の各サブCPU1、2の処理負荷を分散させることができる。処理負荷を分散できれば、CPUリソースを最大限に活用することもできる。また、サブCPU1、2の能力を大きめ見積もって設計する必要もないので、情報処理装置100の仕様を最適化でき、コストを低減することができる。また、サブCPU1,2の処理負荷を動的に算出するので、サブCPU1,2の処理負荷を事前に算出しておく等の工程を省略できる。
本実施例では、実施例1の情報処理装置100のように、動的に算出されたサブCPU1、2の処理負荷に加え、さらに、センサ値からサブCPU1、2の負荷率を予測して、サブCPU1、2の処理負荷を分散させる情報処理装置100について説明する。
図6は、本実施例の情報処理装置100によるサブCPU1,2の負荷率の予測を模式的に説明する図の一例である。情報処理装置100は、各種のセンサ1〜センサnが検出するセンサ値に演算を施し、アクチュエータ等の制御量を決定する。演算のタイミングは、エンジンの回転数などのセンサ値が大きいほど早まる傾向にあるので(エンジンでは1回転毎に処理すべきタスクが複数ある)、サブCPU1、2の負荷率も大きくなる。したがって、センサ値が大きくなる傾向では、近い将来のサブCPU1、2の負荷率が増大すると予測できる。逆に、センサ値が小さくなる傾向では、近い将来のサブCPU1、2の負荷率が減少すると予測できる。
情報処理装置100は、このようにサブCPU1,2の負荷率を予測して、負荷率が減少傾向にあるサブCPU1,2に、負荷率が増大傾向にあるサブCPU1,2のタスクを割り当てる。現在の処理負荷ではなくサブCPU1,2の将来の負荷率に基づき負荷分散するので、タスクの割り当てにより生じるタイムラグを低減して、負荷分散が可能になる。
図7は、本実施例の情報処理装置100の概略構成図の一例を示す。図7において図2と同一部には同一の符号を付しその説明は省略する。図7の情報処理装置100は、微分値算出回路38を有する。微分値算出回路38は、センサ値の微分値Bを算出する。なお、実施例1と同様、センサ値もバス16に送出される。ホストCPU12は、センサ値の微分値Bを取得して、所定時間先の未来のサブCPU1、2の負荷率を予測する。
〔微分値B〕
図8は、センサ値とその微分値Bを模式的に説明する図の一例である。図8では、センサ1〜センサnのいずれかのセンサ値が時系列に登録されている。センサ値は時間軸の中央付近でピークを示している。したがって、このセンサのセンサ値を使用するサブCPU1、2は、センサ値がピークの頃に負荷率が最も高いと考えられる。換言すれば、時間T1のセンサ値の傾きから所定時間先では負荷率が増大することが、時間T2のセンサ値の傾きから所定時間先では負荷率が減少することが予測できる。
図8は、センサ値とその微分値Bを模式的に説明する図の一例である。図8では、センサ1〜センサnのいずれかのセンサ値が時系列に登録されている。センサ値は時間軸の中央付近でピークを示している。したがって、このセンサのセンサ値を使用するサブCPU1、2は、センサ値がピークの頃に負荷率が最も高いと考えられる。換言すれば、時間T1のセンサ値の傾きから所定時間先では負荷率が増大することが、時間T2のセンサ値の傾きから所定時間先では負荷率が減少することが予測できる。
微分値Bを算出することは、センサ値の傾きを算出することと同義なので、微分値Bは、例えば、一定時間内のセンサ値の差分を取ることで算出できる。微分値Bは例えば以下のようにして算出される。次式において、「D(t)」は時刻tのセンサ値を、「t」は時刻を、「N」はサンプル数を、それぞれ表す。
B=Σ(D(t)−D(t-1))/N …(1)
「t-(t-1)」はセンサ値のサンプリング時間であるので、「D(t)-D(t-1)」は、サンプリング時間におけるセンサ値の変化量である。したがって、「Σ(D(t)-D(t-1))」は、センサ値の変化量をいくつか合計したものである。センサ値が一様な増大傾向又一様な減少傾向になければ、「Σ(D(t)-D(t-1))」はほぼゼロになる。センサ値が一様な増大傾向又一様な減少傾向にあれば、「Σ(D(t)-D(t-1))」は比較的大きな正値又は負値となる。「N」は例えば3〜10程度であり、小さすぎないように定めることでノイズ等による瞬間的な変動を排除でき、大きすぎないように定めることでセンサ値の増大傾向と減少傾向の時間を両方含めず感度のよい微分値Bを算出できる。
B=Σ(D(t)−D(t-1))/N …(1)
「t-(t-1)」はセンサ値のサンプリング時間であるので、「D(t)-D(t-1)」は、サンプリング時間におけるセンサ値の変化量である。したがって、「Σ(D(t)-D(t-1))」は、センサ値の変化量をいくつか合計したものである。センサ値が一様な増大傾向又一様な減少傾向になければ、「Σ(D(t)-D(t-1))」はほぼゼロになる。センサ値が一様な増大傾向又一様な減少傾向にあれば、「Σ(D(t)-D(t-1))」は比較的大きな正値又は負値となる。「N」は例えば3〜10程度であり、小さすぎないように定めることでノイズ等による瞬間的な変動を排除でき、大きすぎないように定めることでセンサ値の増大傾向と減少傾向の時間を両方含めず感度のよい微分値Bを算出できる。
なお、図8では、センサ値が大きければ負荷率も大きいという前提で説明したが、センサ値が小さいほど負荷率が大きくなるセンサ値もある。この場合の典型的なセンサ値は、負値を取るセンサであり、センサ値が負値であってもセンサ値の絶対値が大きいほど負荷率が大きくなることがある。このような場合は、式(1)で絶対値を採用すればよい。
また、センサ値の絶対値が小さいほど負荷率が大きくなるセンサ値がある場合、予めホストCPU12に当該センサの識別情報を登録しておき、センサ毎に適切な方法で微分値Bを算出する。
なお、センサ値の微分値Bは、ホストCPU12のOS30又はプログラムが算出することもできる。
〔負荷率の予測〕
図9は、本実施例のホストCPU12の機能ブロック図の一例を示す。図9において図3と同一部には同一の符号を付しその説明は省略する。図9のホストCPU12は、負荷率予測部48を有する。負荷率予測部48は、実行タスクテーブル47とセンサ対応テーブル46を参照して、サブCPU1、2毎に、所定時間未来の予測負荷率Yを予測する。
図9は、本実施例のホストCPU12の機能ブロック図の一例を示す。図9において図3と同一部には同一の符号を付しその説明は省略する。図9のホストCPU12は、負荷率予測部48を有する。負荷率予測部48は、実行タスクテーブル47とセンサ対応テーブル46を参照して、サブCPU1、2毎に、所定時間未来の予測負荷率Yを予測する。
図10は、負荷率の予測を模式的に説明する図の一例である。図10では、時間軸(右に行くほど未来を表す)に対しサブCPU1、2の負荷率算出タイミングと、タスク割り当てタイミングが図示されている。サブCPU1、2の負荷率算出タイミングに対し、負荷分散部44がタスクを割り当てるまではタイムラグが生じてしまう。このタイムラグのため、タスク割り当てタイミングのサブCPU1,2の負荷率が、負荷率算出タイミングの負荷率とは異なっている可能性が生じてしまう。したがって、負荷率予測部48が、タイムラグ程度の時間だけ先のサブCPU1、2の負荷率を予測できれば、タスク割り当てタイミングの負荷率を予測できることになる。
ところで、サブCPU1、2の負荷率がセンサ値及び微分値Bと相関するのは、サブCPU1、2がセンサ値を用いて処理する場合である。したがって、センサ値の微分値Bを用いた負荷率の予測の際、負荷率予測部48は実行タスクテーブル47とセンサ対応テーブル46を参照する必要がある。図9の実行タスクテーブル47では、サブCPU1がタスク1を実行している。また、センサ対応テーブル46によれば、タスク1ではセンサ1のセンサ値が必要になる。したがって、負荷率予測部48がサブCPU1の負荷率を予測する際は、センサ1のセンサ値の微分値Bを用いる。
負荷率予測部48は、タスク割り当てタイミングのサブCPU1の予測負荷率Yを例えば次式から予測する。次式において、「B」は、負荷率算出タイミングのセンサ1の微分値Bである(厳密には、負荷率と次元を合わせ、センサ値を負荷率に変換するための係数も含まれている)。「c」は、負荷率算出タイミングのサブCPU1の負荷率である。「x」はタイムラグを表し、負荷分散部44が負荷率算出タイミングからタスクを割り当てるまでの時間を表す。この時間は、情報処理装置100の仕様等に応じて変わるものであり、例えば数マイクロ秒から数ミリ秒とすることができる。また、「x」をタスク毎に可変としたり、タスク割り当てタイミングを予測して決定してもよい。
Y=Bx+c …(2)
図11は、負荷率予測部48が、各サブCPU1、2の予測負荷率Yを算出する手順を示すフローチャート図の一例を示す。
Y=Bx+c …(2)
図11は、負荷率予測部48が、各サブCPU1、2の予測負荷率Yを算出する手順を示すフローチャート図の一例を示す。
予測負荷率Yの算出には、負荷率算出タイミングの負荷率が必要なので、まず、図4のフローチャート図で説明したように、INTC1がタイマA1を制御し、負荷率算出部42が各サブCPU1、2の負荷率を算出する(S210)。
この負荷率の算出の間にタイマBにセットされた時間が経過していることになるので、レジスタセット33、34又はRAM17には各センサ毎に1つ以上の微分値Bが記憶されているとしてよい。
負荷率予測部48は、各センサの微分値Bをレジスタセット33、34又はRAM17から読み出す(S220)。なお、1つのセンサの微分値Bが複数個、RAM17に記憶されている場合は最新の微分値Bを読み出す。
負荷率予測部48は、実行タスクテーブル47を参照して、各サブCPU1、2が実行しているタスクを特定する(S230)。これにより、サブCPU1はタスク1〜4を、サブCPU2はタスク5,6を実行していることが特定される。
負荷率予測部48は、センサ対応テーブル46を参照して、タスク毎に、必要なセンサ値を特定する(S240)。例えば、タスク1にセンサ1のセンサ値が、タスク2にセンサ2のセンサ値が、タスク3にセンサ3のセンサ値が、タスク4にセンサ4のセンサ値が、タスク5にセンサ5のセンサ値が、タスク6にセンサ6のセンサ値が、必要であるとする。
負荷率予測部48は、サブCPU1、2毎に、実行しているタスクに必要なセンサ値の微分値Bを用いて、予測負荷率Yを算出する(S250)。
例えば、サブCPU1の予測負荷率Y1は以下により算出される。ただし、「c1」は、負荷率算出タイミングのサブCPU1の負荷率、「c2」は、負荷率算出タイミングのサブCPU2の負荷率である。「Bi(i=1〜6)」は、センサ1〜6のセンサ値の微分値である。
Y1=B1x+c1+B2x+c1+B3x+c1+B4x+c1
また、サブCPU2の予測負荷率Y2は以下により算出される。
Y2=B5x+c2+B6x+c2
以上のように、負荷率予測部48は、各サブCPU1、2の予測負荷率Yを算出することができる。
例えば、サブCPU1の予測負荷率Y1は以下により算出される。ただし、「c1」は、負荷率算出タイミングのサブCPU1の負荷率、「c2」は、負荷率算出タイミングのサブCPU2の負荷率である。「Bi(i=1〜6)」は、センサ1〜6のセンサ値の微分値である。
Y1=B1x+c1+B2x+c1+B3x+c1+B4x+c1
また、サブCPU2の予測負荷率Y2は以下により算出される。
Y2=B5x+c2+B6x+c2
以上のように、負荷率予測部48は、各サブCPU1、2の予測負荷率Yを算出することができる。
<予測負荷率の算出の変形例>
また、変形例として、負荷率予測部48がセンサ対応テーブル46を参照しないで、サブCPU1、2の予測負荷率を算出する方法について説明する。
また、変形例として、負荷率予測部48がセンサ対応テーブル46を参照しないで、サブCPU1、2の予測負荷率を算出する方法について説明する。
図12は、本実施例のホストCPU12の機能ブロック図の一例を示す。図12において図9と同一部には同一の符号を付しその説明は省略する。図12のホストCPU12は、センサ対応テーブル46を有していない。
図12では、Flash ROM15のタスク1〜nから成るプログラムが図示されている。各タスク1〜nは、タスクを識別するための制御タグが記述されている。制御タグは、所定ビット数(例えば、16、32,64等)のビット列である。制御タグは、Flash ROM15の各タスクの例えば先頭アドレスに記述されており、ホストCPU12が制御タグを参照することで、タスク1〜nを識別できるようになっている。
プログラム(タスク)に制御タグを記述しておくことで、負荷率予測部48は、各タスクの処理の内容を検出できる。
図13は、制御タグをさらに詳細に説明する図の一例である。制御タグに対応づけて、ビット列がBit(n)〜Bit(0)まで登録されている。したがって、制御タグは2n+1個のタスクを識別できる。
図13は、制御タグをさらに詳細に説明する図の一例である。制御タグに対応づけて、ビット列がBit(n)〜Bit(0)まで登録されている。したがって、制御タグは2n+1個のタスクを識別できる。
Bit(n)〜Bit(0)には、タスクの制御内容に応じて「1」又は「0」が登録されている。例えば、図ではBit(0)はエンジン制御に使用されるタスクの制御タグでは「ON=1」になり、Bit(1)はエアコン制御に使用されるタスクの制御タグでは「ON=1」になる。したがって、制御タグ1が付与されたタスク1は、エンジン制御のタスクなので、エンジン制御に必要なセンサ値を必要とすることが分かる。
負荷率予測部48には、予め、Bit(n)〜Bit(0)とセンサ値(微分値)の対応が登録されている。例えば、エンジン回転数センサの微分値BはBit(0)と、室温センサの微分値BはBit(1)と、対応づけられている。こうすることで、例えば、制御タグ1が付与されたタスク1はエンジン制御に使用されるので、エンジン回転数センサの微分値BをBit(0)=「1」に乗じることができ、室温センサの微分値BをBit(1)=「0」に乗じることができる。このように、Bit(n)〜(0)に「1」又は「0」とすることで、各タスクの負荷率に影響のあるセンサ値の微分値Bだけを予測負荷率Yの算出に取り込むことができる。
したがって、負荷率予測部48は、上記(1)式と同様にサブCPU1、2の予測負荷率Yを算出することができる。図11の実行タスクテーブル47では、サブCPU1がタスク1を実行している。負荷率予測部48は、タスク1の制御タグを取得し、各センサ1〜nの微分値Bを機械的に制御タグのBit(n)〜(0)と乗じることで、タスク1に必要なセンサ1〜nの微分値Bを取捨できる。
このように、負荷率予測部48は実行タスクテーブル47と制御タグから、各サブCPU1、2のタスク割り当てタイミングの予測負荷率Yを算出することができる。
図14は、本変形例において、負荷率予測部48が、各サブCPU1、2の予測負荷率Yを算出する手順を示すフローチャート図の一例を示す。図14のステップS230までの処理は図11と同様である。
ステップS230までの処理により、負荷率予測部48は、実行タスクテーブル47を参照して、各サブCPU1、2が実行しているタスクを特定する(S230)。これにより、サブCPU1はタスク1〜4を、サブCPU2はタスク5,6を実行していることが特定される。
負荷率予測部48は、各タスクの制御タグをFlash ROM15から読み出す(S310)。制御タグは一度、ホストCPU12で取得しておけば、以降はホストCPU12に記憶しておくことができる。
負荷率予測部48は、制御タグのBit(n)〜(0)を予め決められた対応にしたがい各センサの微分値Bに乗じて、微分値Bを取捨する(S320)。
以降の処理は図11と同様であり、負荷率予測部48は、サブCPU1、2毎に、実行しているタスクに必要なセンサ値の微分値Bを用いて、予測負荷率Yを算出する(S250)。
例えば、サブCPU1の予測負荷率Y1は以下により算出される。
Y1=B1x+c1+B2x+c1+B3x+c1+B4x+c1
また、サブCPU2の予測負荷率Y2は以下により算出される。
Y2=B5x+c2+B6x+c2
この変形を含めて、負荷率予測部48がサブCPU1の負荷率を予測する際は、センサ1のセンサ値の微分値Bを用いればよいことが分かる。
例えば、サブCPU1の予測負荷率Y1は以下により算出される。
Y1=B1x+c1+B2x+c1+B3x+c1+B4x+c1
また、サブCPU2の予測負荷率Y2は以下により算出される。
Y2=B5x+c2+B6x+c2
この変形を含めて、負荷率予測部48がサブCPU1の負荷率を予測する際は、センサ1のセンサ値の微分値Bを用いればよいことが分かる。
なお、既存のソフトウェアで制御タグが埋め込まれていないプログラムでは、負荷率予測部48は、制御タグのBit(n)〜Bit(0)を全て「OFF=0」として予測負荷率Yを算出する。予測精度は劣化するが、既存のソフトウェアと制御タグが含まれるソフトウェアが混在していても不具合を生じないようにできる。
<センサ値が複数ある場合の予測について>
図11又は図14のステップS250のように、各センサに起因する予測負荷率Yを線形加算することで、あるセンサの微分値Bが正値で、あるセンサの微分値Bが負値の場合のように、センサ毎に負荷率の増減の傾向が一致しない場合でも、負荷率予測部48は、各サブCPU1、2の全体の傾向を把握することが可能になる。
図11又は図14のステップS250のように、各センサに起因する予測負荷率Yを線形加算することで、あるセンサの微分値Bが正値で、あるセンサの微分値Bが負値の場合のように、センサ毎に負荷率の増減の傾向が一致しない場合でも、負荷率予測部48は、各サブCPU1、2の全体の傾向を把握することが可能になる。
逆に、各サブCPU1、2の大多数の微分値Bが正値又は負値になれば、各サブCPU1、2の負荷率の傾向を増幅して把握することが可能になる。
予測負荷率Yを線形加算するのでなく、各サブCPU1、2で処理するセンサ値の微分値Bの平均を算出してから、予測負荷率Yを算出しても同様の効果を得られる。この場合、予測負荷率Yは、例えば次式から算出される。
Y1=(B1〜B4の平均)・x+c1
Y2=(B5、B6の平均)・x+c2
また、予測負荷率Yの算出に、全てのセンサ値の微分値Bを考慮するのでなく代表値を用いて予測負荷率Yを算出してもよい。代表値は、例えば、中央値、最大値、又は、最小値である。中央値を採用した場合、予測負荷率Yは次式から算出される。
Y1=(B1〜B4の中央値)・x+c1
Y2=(B5又はB6)・x+c2
微分値Bの中央値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の代表的な傾向を把握することが可能になる。
Y1=(B1〜B4の平均)・x+c1
Y2=(B5、B6の平均)・x+c2
また、予測負荷率Yの算出に、全てのセンサ値の微分値Bを考慮するのでなく代表値を用いて予測負荷率Yを算出してもよい。代表値は、例えば、中央値、最大値、又は、最小値である。中央値を採用した場合、予測負荷率Yは次式から算出される。
Y1=(B1〜B4の中央値)・x+c1
Y2=(B5又はB6)・x+c2
微分値Bの中央値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の代表的な傾向を把握することが可能になる。
最大値又は最小値を採用した場合、予測負荷率Yは次式から算出される。
Y1=(B1〜B4の最大値又は最小値)・x+c1
Y2=(B5又はB6)・x+c2
微分値Bの最大値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の傾向が大きくなるものと予測しやすくなり、タスクの割り当ての変更を行いやすくなる。微分値Bの最小値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の傾向が小さくなるものと予測しやすくなり、タスクの割り当ての変更を行いにくくなる。
Y1=(B1〜B4の最大値又は最小値)・x+c1
Y2=(B5又はB6)・x+c2
微分値Bの最大値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の傾向が大きくなるものと予測しやすくなり、タスクの割り当ての変更を行いやすくなる。微分値Bの最小値に基づき予測負荷率Yを算出することで、各サブCPU1、2の負荷率の傾向が小さくなるものと予測しやすくなり、タスクの割り当ての変更を行いにくくなる。
〔予測負荷率Yに基づく負荷分散〕
予測負荷率Yに基づく負荷分散について説明する。負荷分散の方法は、予測負荷率Yの算出方法に影響されないので、図9又は図12のどちらのホストCPU12の機能ブロック図を用いてもよい。
予測負荷率Yに基づく負荷分散について説明する。負荷分散の方法は、予測負荷率Yの算出方法に影響されないので、図9又は図12のどちらのホストCPU12の機能ブロック図を用いてもよい。
図15は、ホストCPU12が負荷を分散する手順を示すフローチャート図の一例である。図15のフローチャート図は、図11又は図14の予測負荷率Yの算出後に実行される。
負荷率比較部43は、サブCPU1の予測負荷率Y1とサブCPU2の予測負荷率Y2を比較して、予測負荷率Y1と予測負荷率Y2の差が閾値以上か否かを判定する(S410)。
|予測負荷率Y1−予測負荷率Y2| ≧ 閾値
予測負荷率Y1と予測負荷率Y2の差が閾値以上である場合(S410のYes)、負荷率比較部43は、予測負荷率Y1の大きい例えばサブCPU1と、予測負荷率Y2の小さい例えばサブCPU2を、負荷分散部44に通知する(S420)。予測負荷率Y1と予測負荷率Y2の差が閾値以上でない場合(S410のNo)、タスクの割り当てが変更されることなく図15の処理は終了する。
予測負荷率Y1と予測負荷率Y2の差が閾値以上である場合(S410のYes)、負荷率比較部43は、予測負荷率Y1の大きい例えばサブCPU1と、予測負荷率Y2の小さい例えばサブCPU2を、負荷分散部44に通知する(S420)。予測負荷率Y1と予測負荷率Y2の差が閾値以上でない場合(S410のNo)、タスクの割り当てが変更されることなく図15の処理は終了する。
なお、サブCPUが3以上ある場合、負荷率比較部43は、最も大きい予測負荷率Yと最も小さい予測負荷率Yの差が閾値以上か否かを判定する。最も大きい予測負荷率Yと最も小さい予測負荷率Yの差が閾値以上である場合、負荷率比較部43は、最も予測負荷率Yの大きいサブCPUと、最も予測負荷率Yの小さいサブCPUを、負荷分散部44に通知する。したがって、サブCPUが3以上ある場合も、負荷分散(タスクの割り当ての変更)を繰り返すことで、サブCPUが2つの場合と同様に負荷を分散できる。以下では、説明のため、サブCPU1の予測負荷率Y1の方がサブCPU2の予測負荷率Y2よりも閾値以上大きいとする。
負荷分散部44は、実行タスクテーブル47を参照して、予測負荷率Y1の大きいサブCPU1が実行しているタスクと、予測負荷率Y2の小さいサブCPU2が実行しているタスクを特定する(S430)。例えば、図9又は図12では、サブCPU1が、タスク1、タスク2、タスク3及びタスク4を、サブCPU2がタスク5及びタスク6を実行している。
本実施例では、サブCPU1、2はSMPであるとしたので、サブCPU1がタスク1〜タスク6のどのタスクを実行してもよいし、サブCPU2がタスク1〜タスク6のどのタスクを実行してもよい。したがって、負荷分散部44は、例えば、サブCPU1が実行しているタスク1〜タスク6のうち、命令キューに入っていないタスクを、サブCPU2割り当てると決定する。命令キューに入っていないタスクの割り当て先のサブCPUを変更することで、割り当ての変更によるオーバーヘッドを小さくできる。なお、タスク1〜4が、命令キューに入っているか否かは、負荷分散部44がサブCPU1に問い合わせることで取得する。
また、負荷分散部44は、サブCPU1が実行しているタスクの内、最も大きい処理負荷のタスクをサブCPU2に割り当てると決定してもよい。こうすることで、サブCPU1とサブCPU2の負荷率の差を大きく改善できる。タスク毎の処理負荷は、センサ対応テーブル46又は制御タグに登録されているものとする。
負荷分散部44は、サブCPU1からサブCPU2に割り当てを変更するタスクを処理状況登録部46に通知する(S440)。処理状況登録部46は、実行タスクテーブル47において、サブCPU1に対応づけられているタスクのうち、サブCPU2に割り当てを変更されるタスクを消去し、消去したタスクをサブCPU2に対応付けて実行タスクテーブル47に登録する(S450)。
また、負荷分散部44は、サブCPU1に割り当てられていたタスクをサブCPU2に割り当てる(S460)。割り当ての方法は、実施例1で説明した場合と同様であるが、タイムラグに相当する時間「x」が経過した頃に、サブCPU2がタスクを実行できるように、負荷分散部44はタスクを割り当てる。
本実施例では、サブCPU1,2のタスク割り当てタイミングにおける予測負荷率Yに基づき負荷を分散させるので、負荷率の算出からタスクの割の変更までにタイムラグがあっても、タスク割り当てタイミングの処理負荷がサブCPU1、2間で分散されるようにすることができる。
以上説明したように、本実施形態の情報処理装置100は、各サブCPU1、2の負荷率に基づき各サブCPU1、2の処理負荷を分散することができる。また、タスク割り当てタイミングにおける各サブCPU1、2の予測負荷率Yに基づき、各サブCPU1、2の処理負荷を分散することができる。
11:センサ部、 12:ホストCPU、 13、14:サブCPU
15:Flash ROM 31:プログラムカウンタ 36:命令キュー
37:アイドル検出回路 38:微分値算出回路 41:負荷率算出制御部
42:負荷率算出部 43:負荷率比較部 44:負荷分散部
45:処理状況登録部 46:センサ対応テーブル
47:実行タスクテーブル 48:負荷率予測部
15:Flash ROM 31:プログラムカウンタ 36:命令キュー
37:アイドル検出回路 38:微分値算出回路 41:負荷率算出制御部
42:負荷率算出部 43:負荷率比較部 44:負荷分散部
45:処理状況登録部 46:センサ対応テーブル
47:実行タスクテーブル 48:負荷率予測部
Claims (11)
- 複数のセンサのセンサ値を受け付ける入力インターフェイスと、複数のタスクプログラムが記憶されたタスク記憶手段と、前記タスクプログラムを実行してセンサ値に演算処理を施す複数のCPUと、を有する情報処理装置であって、
複数の前記CPUの処理負荷を検出する処理負荷検出手段と、
前記センサ値の増減傾向を検出する増減検出手段と、
前記センサ値に演算処理を施す前記CPUを特定し、前記処理負荷と前記増減傾向から前記CPUの予測処理負荷を算出する処理負荷予測手段と、
複数の前記CPUの前記予測処理負荷を比較して、第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てる負荷分散手段と、
を有することを特徴とする情報処理装置。 - 前記処理負荷予測手段は、
前記処理負荷検出手段が前記処理負荷を検出してから、前記負荷分散手段が第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てるまでの、割り当て時間が経過する際の前記CPUの予測処理負荷を算出する、
を有することを特徴とする請求項1記載の情報処理装置。 - 前記CPUが実行している前記タスクプログラムを前記CPU毎に登録した実行タスクテーブルを有し、
前記タスクプログラムは、前記タスクプログラムに用いられる前記センサ値を示す制御タグを記憶しており、
前記処理負荷予測手段は、前記実行タスクテーブルを参照して特定した、前記CPUが実行している前記タスクプログラムの前記制御タグに基づき、前記CPUが演算処理を施す前記センサ値を特定する、
ことを特徴とする請求項1又は2記載の情報処理装置。 - 前記CPUが実行している前記タスクプログラムを前記CPU毎に登録した実行タスクテーブルと、前記タスクプログラムに用いられる前記センサ値を出力する前記センサを対応づけたセンサ対応テーブルとを有し、
前記処理負荷予測手段は、前記実行タスクテーブルを参照して特定した、前記CPUが実行している前記タスクプログラムに用いられる前記センサ値を、前記センサ対応テーブルを参照して特定する、
ことを特徴とする請求項1又は2記載の情報処理装置。 - 前記増減検出手段は前記センサ値の微分値を検出する手段であり、
前記処理負荷予測手段は、前記微分値に前記割り当て時間を乗じて前記処理負荷に加えた値を前記CPUの前記予測処理負荷とする、
ことを特徴とする請求項2記載の情報処理装置。 - 前記CPUが実行している1以上の前記タスクプログラムに用いられる前記センサ値が複数ある場合、
前記処理負荷予測手段は、前記微分値に前記割り当て時間を乗じて前記処理負荷に加えた値を、前記タスクプログラム毎にさらに加算して、前記CPUの前記予測処理負荷とする、
ことを特徴とする請求項5記載の情報処理装置。 - 前記CPUが実行している1以上の前記タスクプログラムに用いられる前記センサ値が複数ある場合、
前記処理負荷予測手段は、前記微分値の平均に前記割り当て時間を乗じて前記処理負荷に加えた値を、前記CPUの前記予測処理負荷とする、
ことを特徴とする請求項5記載の情報処理装置。 - 前記CPUが実行している1以上の前記タスクプログラムに用いられる前記センサ値が複数ある場合、
前記処理負荷予測手段は、最も大きい前記微分値又は最も小さい前記微分値に前記割り当て時間を乗じて前記処理負荷に加えた値を、前記CPUの前記予測処理負荷とする、
ことを特徴とする請求項5記載の情報処理装置。 - 前記処理負荷検出手段は、
第一の時間を計測する第一のタイマと、
前記CPUが前記タスクプログラムを実行している第二の時間を計測する第二のタイマと、を有し、
前記第一の時間に対する前記第二の時間の比から前記処理負荷を検出する、
ことを特徴とする請求項1〜8いずれか1項記載の情報処理装置。 - 請求項1〜9いずれか1項記載の情報処理装置を搭載した電子制御ユニット。
- 複数のセンサのセンサ値を受け付ける入力インターフェイスと、複数のタスクプログラムが記憶されたタスク記憶手段と、前記タスクプログラムを実行してセンサ値に演算処理を施す複数のCPUと、を有する情報処理装置のタスク割り当て方法であって、
処理負荷検出手段が、複数の前記CPUの処理負荷を検出するステップと、
増減検出手段が、前記センサ値の増減傾向を検出するステップと、
処理負荷予測手段が、前記センサ値に演算処理を施す前記CPUを特定し、前記処理負荷と前記増減傾向から前記CPUの予測処理負荷を算出するステップと、
負荷分散手段が、複数の前記CPUの前記予測処理負荷を比較して、第一の前記CPUに割り当てられていた前記タスクプログラムを第二の前記CPUに割り当てるステップと、
を有することを特徴とするタスク割り当て方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010002553A JP2011141782A (ja) | 2010-01-08 | 2010-01-08 | 情報処理装置、電子制御ユニット、タスク割り当て方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010002553A JP2011141782A (ja) | 2010-01-08 | 2010-01-08 | 情報処理装置、電子制御ユニット、タスク割り当て方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011141782A true JP2011141782A (ja) | 2011-07-21 |
Family
ID=44457569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010002553A Pending JP2011141782A (ja) | 2010-01-08 | 2010-01-08 | 情報処理装置、電子制御ユニット、タスク割り当て方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011141782A (ja) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013121545A1 (ja) * | 2012-02-15 | 2013-08-22 | トヨタ自動車株式会社 | 車両用電子制御装置、データ受信方法 |
WO2013140517A1 (ja) * | 2012-03-19 | 2013-09-26 | 富士通株式会社 | 検出装置、通知方法、および通知プログラム |
US9342365B2 (en) | 2012-03-15 | 2016-05-17 | Samsung Electronics Co., Ltd. | Multi-core system for balancing tasks by simultaneously comparing at least three core loads in parallel |
JP2016118818A (ja) * | 2014-12-18 | 2016-06-30 | 本田技研工業株式会社 | 車両の制御装置 |
JP2017076364A (ja) * | 2015-10-13 | 2017-04-20 | 富士電機株式会社 | 情報処理システム及び情報処理装置 |
JP2018147339A (ja) * | 2017-03-08 | 2018-09-20 | 日本電気株式会社 | システム管理装置、システム管理方法、プログラム、情報処理システム |
JP2019109744A (ja) * | 2017-12-19 | 2019-07-04 | 日立オートモティブシステムズ株式会社 | 自動車用電子制御装置 |
KR20190140608A (ko) * | 2018-06-12 | 2019-12-20 | 현대자동차주식회사 | 차량 및 그의 제어기 부하 최적화 방법 |
JP2021047513A (ja) * | 2019-09-17 | 2021-03-25 | 株式会社デンソー | 電子制御装置 |
-
2010
- 2010-01-08 JP JP2010002553A patent/JP2011141782A/ja active Pending
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2013121545A1 (ja) * | 2012-02-15 | 2015-05-11 | トヨタ自動車株式会社 | 車両用電子制御装置、データ受信方法 |
WO2013121545A1 (ja) * | 2012-02-15 | 2013-08-22 | トヨタ自動車株式会社 | 車両用電子制御装置、データ受信方法 |
US9342365B2 (en) | 2012-03-15 | 2016-05-17 | Samsung Electronics Co., Ltd. | Multi-core system for balancing tasks by simultaneously comparing at least three core loads in parallel |
CN104169880B (zh) * | 2012-03-19 | 2017-08-22 | 富士通株式会社 | 检测装置以及通知方法 |
CN104169880A (zh) * | 2012-03-19 | 2014-11-26 | 富士通株式会社 | 检测装置、通知方法、以及通知程序 |
US9465646B2 (en) | 2012-03-19 | 2016-10-11 | Fujitsu Limited | Detection apparatus, notification method, and computer product |
WO2013140517A1 (ja) * | 2012-03-19 | 2013-09-26 | 富士通株式会社 | 検出装置、通知方法、および通知プログラム |
JP2016118818A (ja) * | 2014-12-18 | 2016-06-30 | 本田技研工業株式会社 | 車両の制御装置 |
JP2017076364A (ja) * | 2015-10-13 | 2017-04-20 | 富士電機株式会社 | 情報処理システム及び情報処理装置 |
JP2018147339A (ja) * | 2017-03-08 | 2018-09-20 | 日本電気株式会社 | システム管理装置、システム管理方法、プログラム、情報処理システム |
US11362890B2 (en) | 2017-03-08 | 2022-06-14 | Nec Corporation | System management device, system management method, program, and information processing system |
JP2019109744A (ja) * | 2017-12-19 | 2019-07-04 | 日立オートモティブシステムズ株式会社 | 自動車用電子制御装置 |
KR20190140608A (ko) * | 2018-06-12 | 2019-12-20 | 현대자동차주식회사 | 차량 및 그의 제어기 부하 최적화 방법 |
KR102626249B1 (ko) * | 2018-06-12 | 2024-01-17 | 현대자동차주식회사 | 차량 및 그의 제어기 부하 최적화 방법 |
JP2021047513A (ja) * | 2019-09-17 | 2021-03-25 | 株式会社デンソー | 電子制御装置 |
JP7334552B2 (ja) | 2019-09-17 | 2023-08-29 | 株式会社デンソー | 電子制御装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2011141782A (ja) | 情報処理装置、電子制御ユニット、タスク割り当て方法 | |
US8302098B2 (en) | Hardware utilization-aware thread management in multithreaded computer systems | |
KR101834195B1 (ko) | 다중코어 시스템 및 로드 밸런싱 방법 | |
US8856196B2 (en) | System and method for transferring tasks in a multi-core processor based on trial execution and core node | |
JP5564564B2 (ja) | 計算ユニットの性能を性能感度に従い不均等に変化させる方法及び装置 | |
KR101455899B1 (ko) | 다수의 가상 서버들 사이에 공유 자원들의 할당을 통한 소프트웨어 제어기능을 갖는 마이크로 프로세서 | |
JP5347451B2 (ja) | マルチプロセッサシステム、競合回避プログラム及び競合回避方法 | |
US11876731B2 (en) | System and methods for sharing memory subsystem resources among datacenter applications | |
US20080077928A1 (en) | Multiprocessor system | |
US20110093857A1 (en) | Multi-Threaded Processors and Multi-Processor Systems Comprising Shared Resources | |
US20120233616A1 (en) | Stream data processing method and stream processor | |
EP2793133B1 (en) | Multi-core processor | |
JP2010271930A (ja) | マルチコアプロセッサシステム | |
JP2009151774A (ja) | マルチコア・プロセッサ上での自律型ワークロード分配のための方法、装置、およびシステム | |
JP2013539121A (ja) | コア単位電圧及び周波数制御の提供 | |
KR101553650B1 (ko) | 멀티코어 시스템에서의 로드 밸런싱 장치 및 방법 | |
US7665000B2 (en) | Meeting point thread characterization | |
CN114880102B (zh) | 安全芯片及其多任务调度方法和装置、存储介质 | |
US20030177163A1 (en) | Microprocessor comprising load monitoring function | |
JP5136658B2 (ja) | 仮想計算機の割当方法及び割当プログラム並びに仮想計算機環境を有する情報処理装置 | |
JP2014191655A (ja) | マルチプロセッサ、電子制御装置、プログラム | |
JP2013149221A (ja) | プロセッサの制御装置およびその方法 | |
JP6477260B2 (ja) | アプリケーションを実行する方法及びリソースマネジャ | |
JP2010280356A (ja) | 車載システム、負荷分散方法 | |
JP5699896B2 (ja) | 情報処理装置、異常判定方法 |