JP2014191655A - マルチプロセッサ、電子制御装置、プログラム - Google Patents

マルチプロセッサ、電子制御装置、プログラム Download PDF

Info

Publication number
JP2014191655A
JP2014191655A JP2013067621A JP2013067621A JP2014191655A JP 2014191655 A JP2014191655 A JP 2014191655A JP 2013067621 A JP2013067621 A JP 2013067621A JP 2013067621 A JP2013067621 A JP 2013067621A JP 2014191655 A JP2014191655 A JP 2014191655A
Authority
JP
Japan
Prior art keywords
processing
core
synchronization
asynchronous
processor
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
Application number
JP2013067621A
Other languages
English (en)
Inventor
Mitsuo Sawada
光男 沢田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toyota Motor Corp
Original Assignee
Toyota Motor Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toyota Motor Corp filed Critical Toyota Motor Corp
Priority to JP2013067621A priority Critical patent/JP2014191655A/ja
Publication of JP2014191655A publication Critical patent/JP2014191655A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Abstract

【課題】同期処理を行う複数のコアの一方が、同期待ちの時間を抑制して非同期処理を実行可能なマルチプロセッサを提供すること。
【解決手段】依存関係のあるプログラムを並列に処理する複数のプロセッサ21と、他のプロセッサが行った処理結果に同期処理を施す同期処理手段36と、プロセッサ毎にプロセッサの現在の実行プログラムアドレス値を保持するPC37と、他のプロセッサの現在PC値を読み出す読み出し手段33と、他のプロセッサが同期処理を開始するアドレス位置を記憶するアドレス位置記憶手段35と、現在PC値とアドレス位置とに基づいて他のプロセッサの同期処理開始までの進捗情報を算出する進捗情報算出手段34と、進捗情報に基づき他のプロセッサが同期処理を開始する前に自プロセッサが非同期処理を実行可能であると判定した場合に、非同期処理を実行する非同期処理手段38と、を有するマルチプロセッサ11を提供する。
【選択図】図3

Description

依存関係のあるプログラムを並列に処理する複数のプロセッサを備えたマルチプロセッサに関する。
1つのCPUが複数のコアを有するマルチコアや、複数のCPUが搭載されたマルチプロセッサと呼ばれる中央処理装置が知られている(以下、このような中央処理装置を単にマルチコアと称することとする)。マルチコアでは、複数のコアを有効に活用する試みとして、複数のコアが同じ処理を行い比較するロックステップによる信頼性向上や、複数のコアが異なる処理を行うことで負荷を分散する負荷分散などが可能である。
例えば、負荷分散のためデュアルコアで2つのコアに処理を分割した場合、一方のコア1が行う処理の処理時間と、他方のコア2が行う処理の処理時間を均等にすることで、稼働率が向上し複数のコアが有効に活用される。しかし、各制御の依存関係を考慮しつつ、均等に分割することは非常に困難である。また、分岐などの発生によりコアの処理時間が変動することもある。
そこで、複数のコアの稼働率を向上させる技術が考えられている(例えば、特許文献1参照。)。特許文献1には、処理が終了してアイドリング状態となったプロセッサがタスクメモリをアクセスし、多くのタスクを保持するプロセッサのタスクリストからタスクを取り出し実行するマルチプロセッサシステムが記載されている。
また、マルチコアではないが、処理の依存関係を考慮する技術が考えられている(例えば、特許文献2参照。)。特許文献2には、依存間関係にあるデコード済み命令が使用するリソースが現在から何サイクル後に使用可能になるのかでデコード済み命令の発行タイミングとして決定し、決定した発行タイミングでデコード済み命令が使用するリソースを確保する情報処理装置が開示されている。
特開平11−053327号公報 特開2012−173755号公報
しかしながら、特許文献1では、複数のコアが実行する処理の依存関係が考慮されておらず、引用文献2では依存関係にある命令が発行されるまでの間にコアが行う処理について考慮されていないという問題がある。すなわち、従来は、複数のコアが実行する命令に依存関係がある場合に、処理が終了したコアは自動的に稼働率を向上するための処理を行うだけであり、稼働率を向上するための処理に行うことが適切か否かが判断されていない。
図1を用いて説明する。図1(a)では、逐次処理を複数のコアで実行した場合の不都合を説明している。この逐次処理では4つの命令があり、4行目の命令を実行するためには、3行目までの命令の実行が完了している必要がある。プログラマなどが依存関係を考慮して1,2行目の命令をコア1に、3,4行目の命令をコア2に分散させた場合、コア2はコア1が1,2行目の実行を完了させないと、4行目の命令を実行できない。このようにコア2がコア1の実行完了まで待つことを同期待ちと称する。
上記のように、各コアの処理時間のバランスが悪い場合、コア2の同期待ちの時間が長くなるが、コア2はループを繰り返すなどの無駄な処理を行うだけである。同期待ちの時間がほぼ一定であれば、その時間内に終了する処理(以下、非同期処理という)を割り当てることができる。しかし、例えば1行目のfunc()のように処理時間が変動する命令があり、同期待ちの時間は変動する可能性がある。例えば、if文やswitch文による条件分岐で処理の内容が変化すれば、処理時間も変動する。また、ループ数が動的に決定されるfor文が存在すれば処理時間が変動する。したがって、ソフトウェアの設計段階で同期処理をコア1,2に均等に割り当てるように最適化することは困難である。このため、同期待ちの時間にコア2が非同期処理を実行すると、別の同期待ちが発生するという不都合が生じうる。
図1(b)はコア2が非同期処理を実行した場合の不都合を説明している。コア2が3行目の命令を実行した後、非同期処理(図では監視処理)を実行している。しかし、コア1が1,2行目の処理を短時間に実行したため、コア2が非同期処理を完了するまでの時間の方が、コア1が1,2行目を実行する処理時間よりも長くなっている。このため、コア1がコア2と同期するためには、コア2が4行目の命令を実行するまでの同期待ちが発生する。
したがって、複数のコアが実行する命令に依存関係がある同期処理では、処理が終了したコアが、他方のコアの処理が終了するまでに処理を実行すべきか又はするべきでないかについて適切に判断することが好ましい。
本発明は、上記課題に鑑み、同期処理を行う複数のコアの一方が、同期待ちの時間を抑制して非同期処理を実行可能なマルチプロセッサを提供することを目的とする。
本発明は、依存関係のあるプログラムを並列に処理する複数のプロセッサと、他のプロセッサが行った処理結果に同期処理を施す同期処理手段と、プロセッサ毎にプロセッサの現在の実行プログラムアドレス値を保持するプログラムカウンタと、他のプロセッサの現在の実行プログラムアドレス値を読み出す読み出し手段と、他のプロセッサが同期処理を開始するアドレス位置を記憶するアドレス位置記憶手段と、前記読み出し手段が読み出した実行プログラムアドレス値と、前記アドレス位置記憶手段に記憶された前記アドレス位置とに基づいて他のプロセッサの同期処理開始までの進捗情報を算出する進捗情報算出手段と、前記進捗情報に基づき他のプロセッサが同期処理を開始する前に自プロセッサが非同期処理を実行可能であると判定した場合に、非同期処理を実行する非同期処理手段と、を有することを特徴とする。
同期処理を行う複数のコアの一方が、同期待ちの時間を抑制して非同期処理を実行可能なマルチプロセッサを提供することができる。
逐次処理を複数のコアで実行した場合の不都合を説明している。 制御系ソフトウェアのタスクと分割例を説明する図の一例である。 本実施形態のマルチコアプロセッサによる同期処理の概略を説明する図の一例である。 マイコンの概略構成図の一例である。 同期処理の処理手順を説明する図の一例である。 コア1,コア2の機能を模式的に示す機能ブロック図の一例である。 目標PC位置について説明する図の一例である。 コア2が監視処理を実行する手順を示すフローチャート図の一例である。 同期開始通知領域のサイズ(監視可能閾値)の決定方法を説明する図の一例である。 分岐処理を避ける方法について説明する図の一例である。 コアが3つの場合の同期処理と監視処理を模式的に示す図の一例である。 コア1,コア2の機能を模式的に示す機能ブロック図の一例である(実施例2)。 コア2が監視処理を実行する手順を示すフローチャート図の一例である。
以下、本発明を実施するための形態について図面を参照しながら説明する。しかしながら、本発明の技術的範囲が、本実施の形態に限定されるものではない。
〔制御系ソフトウェアのマルチコアへの対応例〕
まず、1つのCPUが実行していたソフトウェアの複数のコアへの負荷分散について説明する。
図2は、制御系ソフトウェアのタスクと分割例を説明する図の一例である。
図2(a)は実装したいシングルコア用の制御系ソフトウェアを模式的に示している。シングルコアは、A〜Dの4つのタスクを有しており、現状では、150%程度の処理負荷となっている。このパーセント表示は例えば処理時間と相関し、マイコンは100%くらいの時間内に4つのタスクの実行を完了させることが望まれることを示している。
そこで、図2(b)に示すように、ソフトウェア設計時にタスクA〜Dを2つのコアに分散することで、各コアの処理負荷を100%くらいに抑制する。タスクは独立した処理であるため(タスクAがタスクBと同期しながら処理する必要性が低い)ため、タスク単位の負荷分散は比較的容易である。
しかし、図2(b)に示すように、タスク単位の負荷分散では、各タスクの実行時間が均一とは限らないため、コア1の処理負荷が100%を超える反面、コア2の稼働率が100%未満となり、CPU全体の稼働率が低下する場合がある。
そこで、図2(c)に示すように、1つのタスク(図ではタスクD)をコア1とコア2に負荷分散することで、CPU全体の稼働率を向上させることができる。したがって、マイコンの処理能力を有効活用できるようになる。しかし、図1にて説明したように1つのタスクには依存関係のある処理が含まれることが多いので、タスクを分割すると依存関係のある処理を異なるコアが実行する必要が生じうる。
図3は、本実施形態のマルチコアプロセッサ(以下、単にマルチコアという)による同期処理の概略を説明する図の一例である。逐次処理のタスクDを、コア1とコア2が分担して処理する。コア1の処理とコア2の処理に依存関係がある場合、コア2はコア1の処理が終了するまで同期待ちする。
同期待ちの時間は変動しうるので、同期待ちの時間が分からないと、CPU全体として同期待ちの時間を有効活用できない。
そこで、本実施形態では、マルチコアにおいて依存関係にある命令を実行しているタスクのうち、先に処理を実行完了したコア(図3ではコア2)が同期待ちの時間を動的に検出し、検出した時間に基づき非同期処理を実行するか否かを判断する。具体的には、処理を実行中のコア(図3ではコア1)のPC(プログラムカウンタ)の値を取得し、この値をコア1が実行している命令の現在位置として、現在位置と目標位置の差から、コア2が非同期処理を実行できるか否かを判断する。そして、実行可能な場合にのみ非同期処理を実行する。なお、PCの値は特許請求の範囲の「実行プログラムアドレス値」の一例である。
実行可否判断では、非同期処理の実行に必要な時間が考慮されるので、同期処理の待ち時間と同程度の場合にだけ非同期処理を行うと判断でき、同期処理を行うマルチコアの稼働率を向上させることができる。
なお、本実施例では、1つのタスクを分割した場合を例に説明するが、タスクA〜Dをタスク単位で負荷分散した場合においても、タスクA〜Dに依存関係がある場合、本実施形態の負荷分散の手法は有効である。
〔構成例〕
図4は、マイコン100の概略構成図の一例を示す。マイコン100はシステムバスB1に接続された、CPU11、RAM12、ROM13、INTC14、WDT15、DMAC16、周辺バス17を介して接続された複数のI/O19、及び、通信コントローラ18を有している。マイコン100は、この他、タイマなどマイコンに一般的な構成を有している。
CPU11は少なくとも2つ以上のコア21(以下、各コアをコア1,2と称す)及び共有メモリ20を有する。各コアは共有メモリ20を介してPCの値やデータを送受信したり、同期を取るためのフラグの状態を操作したり通知したりする。また、コア間は専用線で接続されており、コア1がコア2に(及びその逆に)PCの値やデータ、フラグの状態を操作したり通知したりすることができる。
なお、コア1,2の構造は同一でも異なっていてもよい。また、1つのチップに複数のコアを有するのでなく、マイコン100が複数のCPUを有していてもよい。
CPU11は、ROM13に記憶されたプログラムを実行することでマイコン全体を制御する。RAM12にはプログラムやデータが展開され、RAM12はCPU11がアクセスする作業メモリになる。また、ROM13にはプログラムの他、プラットホームが記憶されている。プラットホームは、例えばOS(Operating System)やデバイスドライバなどである。OSとしては、OSEK(Open system together with interfaces for automotive electronics)、AUTOSAR(AUTomotive Open System Architecture) OSなどのリアルタイムOSがあるが、これらに限定されるものではない。
INTC14は割込みマスク・マスクの解除などの設定が可能なレジスタと割込み要求が設定されるレジスタなどを有し、レジスタを監視して、周辺機器からの割り込み要求を割込みの優先順位に基づき調停してCPU11に通知する。WDT15は、動作クロックをカウントして計測した時間が予め定められたリセット時間に達すると(オーバーフローすると)、異常を検出する回路である。WDT15がオーバーフローすると、例えばマイコン100がリセットされるなどのフェールセーフが行われる。DMAC16は、RAM12と周辺回路の間やRAM12内で、CPU11を介することなくデータを転送する。
I/O19はUART、I2Cなど、外部と通信する入出力インタフェースである。通信コントローラ18は、マイコン100が通信バス40に接続された他のECU(Electronic Control Unit)と通信するための通信回路である。通信コントローラ18はメッセージを受信するとINTC14を介してCPU11に通知する。また、CPU11がメッセージを送信する際は、アプリケーションにより作成されたデータから通信コントローラ18がメッセージを作成し通信バス40に出力する。
マイコン100はECUに搭載されることが可能である。ECUには、エンジンを制御するエンジンECU、電気モータを制御するモータ用ECU、ボディECU、ナビECUなどがあり、本実施形態のマイコンはどのようなECUに搭載してもよい。
〔同期処理について〕
図5(a)は比較のために示した従来の同期処理の処理手順を説明する図の一例である。図では、コア1が処理1を実行する時間は、コア2が処理2を実行する時間より長い。 処理2の実行が完了したコア2は、コア1に処理終了通知を出力する。処理終了通知は、処理が終了したので同期処理が可能であることを通知することである。処理終了通知により、コア1は同期処理が実行可能であることを検出できる。このため、コア1は処理1が完了次第、同期処理を実行できる。
しかし、コア2は、処理2の実行が完了した時、コア1が処理1を実行中なので同期処理を実行できない。このため、コア2は、コア1がコア2に処理終了通知を出力するまで、同期待ち状態となる。図では、コア2は、処理2の後、すぐに同期処理を開始しているが、大半は無限ループなどによる同期待ちの時間である。
コア1は処理1の後に、コア2は処理2の後に、それぞれ同期処理を実行する。すなわち、コア1はコア2に処理結果(例えば、図1のX)を通知し、コア2はコア1による処理の実行結果を用いて、同期処理を行う(例えば図1のZ=X+Y)。このように、コア1又はコア2の双方が同期処理を行う。
図5(b)は本実施形態の同期処理の処理手順を説明する図の一例である。図5(b)ではコア2が先に処理2を実行完了した例を示している。コア1及びコア2が実行する処理1,2は、同期処理の直前の処理(処理1,2の終了付近の前の所定領域)において、「同期開始通知領域」を有している。同期開始通知領域は、処理の終了付近のアドレス範囲である。
(i)先に処理2の実行を終えたコア2は、コア1に処理終了通知を出力する。
(ii)コア2は、コア1のPCの値を読み出し、コア1のPCが同期開始通知領域か否かを判定する。
(iii) 同期開始通知領域ではないので、コア2は非同期処理(図では監視処理)を実行する。監視処理について後述する。
(iv) 非同期処理の実行が完了すると、コア2は、コア1のPCの値を読み出し、コア1のPCが同期開始通知領域か否かを判定する。
(v) 同期開始通知領域ではないので、コア2は非同期処理(図では監視処理)を実行する。
(vi) 非同期処理の実行が完了すると、コア2は、コア1のPCの値を読み出し、コア1のPCが同期開始通知領域か否かを判定する。
(vii) 同期開始通知領域なので、コア2は同期処理を実行する。
(viii) コア1は処理1の実行が終了すると、コア2に処理終了通知を出力する。これによりコア2はコア1の処理結果を取得して実質的な同期処理を行うことができる。コア1は、すでにコア2の処理終了通知を取得しているので、コア2のPCを取得しない。コア1がコア2のPCを取得してもよいが同期開始通知領域ではないので、コア1は同期処理を実行すると判定できる。
(ix) コア1は、同期処理を実行する。
このように同期開始通知領域が処理の終了付近のアドレス範囲であることを利用して、コア2は、コア1が処理1の終了間近であることを検出できる。コア1が処理1の終了間近であればコア2は同期処理を行い、コア1が処理1の終了間近でなければ非同期処理を行う。したがって、コア1による処理1の処理時間とコア2による処理2の処理時間が均一でなくても、また、処理時間が動的に変動しても、コア2の同期待ちの時間を所定値以下(同期開始通知領域の実行時間以下)に抑制することができる。
〔機能ブロック〕
図6は、コア1,コア2の機能を模式的に示す機能ブロック図の一例である。本実施形態の特徴部に関してはコア1とコア2の構成は同じでよい。ただし、メイン処理実行部32,42が行う処理は、それぞれが逐次処理の一部なので異なっている。
コア1はメイン処理実行部32により各処理の実行手順が制御されている。メイン処理実行部32は、機能A〜Cを順次提供し、各機能を提供する毎に、処理終了通知をコア2に出力する。処理終了通知は、コア1と2から参照可能な共有メモリのフラグをON(又はOFF)にセットすること、コア1からコア2及びコア2コア1にHigh信号(又はLow信号)を送信することなどで行われる。
また、機能Aを提供した後にコア2の処理結果と同期するための同期処理A部36a、機能Bを提供した後にコア2の処理結果と同期するための同期処理B部36b、機能Cを提供した後にコア2の処理結果と同期するための同期処理C部36c、を有している。
従来、コア1では各機能が以下の順番で動作していた。監視処理部38が行う監視処理は、コア1とコア2の不均一性を考慮して挿入されており、挿入されない場合もある。
機能A提供部→メイン処理実行部→(監視処理部)→同期処理A部
機能B提供部→メイン処理実行部→(監視処理部)→同期処理B部
機能C提供部→メイン処理実行部→(監視処理部)→同期処理C部
本実施形態では、以下のように、監視処理部38、PC取得部33、及び、判定部34が、同期処理A部(又は、同期処理B部、同期処理C部)の前に実行される。機能B,Cについても同様である。
機能A提供部→メイン処理実行部→「PC取得部→判定部→(0回以上、監視処理部が動作する)」→同期処理A部
例えば、機能A提供部31aはセンサから信号を検出する機能Aを提供し、機能B提供部31bは燃料噴射量を計算する機能Bを提供し、機能C提供部31cは点火タイミングを計算する機能を提供する。なお、機能A〜Cは一例であって、マイコン100が搭載される電子制御ユニットの種類などで異なるものである。
コア2の機能A〜Cは、コア1の機能A〜Cと同期して共通の機能A〜Cを提供する。具体的には、機能Aでは例えば、センサの検出信号を加工するための係数を演算する処理を行う。機能Bでは例えば、燃料を噴射するなどの処理を行い、機能Cでは例えば、点火するどの処理を行う。
同期処理A部36aはセンサの検出信号をコア2に送出する。同期処理A部46aは、コア1が送出したセンサ信号に、係数を乗じる同期処理を行う。同様に、同期処理B部36bはセンサの検出信号をコア2に送出する。同期処理A部46aは、コア1が送出したセンサ信号に、係数を乗じる同期処理を行う。同様に、コア1の同期処理B部36bは次回のサイクルで噴射するための燃料噴射量をコア2に出力する同期処理を行い、コア2の同期処理B部46bは次回のサイクルで噴射するための燃料噴射量をコア1から取得する同期処理を行う。コア1の同期処理C部36cは次回のサイクルの点火タイミングをコア2に出力する同期処理を行い、コア2の同期処理C部46cは次回のサイクルの点火タイミングをコア1から取得する同期処理を行う。
このように、同期処理は、主に、コア1又はコア2が他方のコアの処理結果を利用した処理である。また、利用した処理を行わなくても、同期が完了したことを確認する処理でもよい。
監視処理部38は非同期処理の一例であり、CPU全体の稼働率を向上させるために行われる処理の一例である。監視処理は、ROM13のプログラムのSUMチェック、マイコン100や周辺機器の異常検出、などを行う。つまり、メイン処理が行われていない空いた時間を利用して行われる処理なので、メイン処理や同期処理以外の処理であればどのような処理でもよい。
PC取得部33は、コア2のPC47の値を取得する。分岐処理やループ処理の例外を除けば、コア2はROM13のアドレス順にプログラムを実行する。上記のように、同期開始通知領域は、ROM13に記憶されたプログラムの終わり近くのアドレス領域である。したがって、判定部34は、PC47の値と予め登録されている目標PC位置35とを比較して、コア2が同期開始通知領域のプログラムを実行しているか否かを判定できる。 目標PC位置35,45については図7で説明するが、同期処理のプログラムが記憶されたアドレスと同期開始通知領域の間のアドレスを目標PC位置とする。同期処理のプログラムが記憶されたアドレスの手前が目標PC位置なので、目標PC位置は、機能A〜Cのどの機能が提供されているかによって異なる。このため、メイン処理実行部32は、提供している機能A〜Cを判定部34に通知するか、機能を切り替える毎に判定部34に通知する。これにより、判定部34は目標PC位置を切り替えることができる。
図7は、目標PC位置について説明する図の一例である。コア1について示すがコア2についても同様である。ROM13にはアドレスの小さい方から順に監視処理モジュール、モジュールA〜C、メイン処理モジュール、同期開始通知領域A、同期処理モジュールA、同期開始通知領域B、同期処理モジュールB、同期開始通知領域C、及び、同期処理モジュールCが記憶されている。このように、同期開始通知領域A〜Cは、ROM13のアドレスの終わり近くである。なお、同期開始通知領域A〜Cは、独立した機能を提供するプログラムの格納領域ではなく、アドレスの領域である。例えば、同期開始通知領域Aは、メイン処理の最終アドレス付近の領域であり、同期開始通知領域Bは、メイン処理が機能Bを提供する処理の終わり付近で実行されるアドレス領域であり、同期開始通知領域Cは、メイン処理が機能Cを提供する処理の終わり付近で実行されるアドレス領域である。
目標PC位置1は、同期開始通知領域Aと同期処理モジュールAの境界のアドレス、目標PC位置2は、同期開始通知領域Bと同期処理モジュールBの境界のアドレス、目標PC位置3は、同期開始通知領域Cと同期処理モジュールCの境界のアドレス、である。
したがって、コア2のPC取得部43がコア1のPC37の値を取得した場合に、同期開始通知領域Aであれば、コア2が同期処理Aを実行すべきことを検出できる。同様に、同期開始通知領域Bであれば、コア2が同期処理Bを実行すべきことを検出でき、同期開始通知領域Cであれば、コア2が同期処理Cを実行すべきことを検出できる。
また、コア2が実行する監視処理モジュールが、同期開始通知領域と同等の処理量(処理時間)であれば、監視処理によりコア1に同期待ちの時間が発生することを防止できる。したがって、コア2の監視処理モジュールは、コア1の同期開始通知領域と同等の処理量となるように設計されている。監視処理モジュールと同期開始通知領域との処理時間の調整については後述する。
〔動作手順〕
図8は、コア2が監視処理を実行する手順を示すフローチャート図の一例である。
コア2のメイン処理実行部42は、コア2のメイン処理の実行が完了したためコア2の処理完了通知をコア1に出力する(S10)。具体的には、フラグをONにセットする。
PC取得部43はコア1からPC37の値を取得する(S20)。
判定部44は、同期中の処理に応じて目標PC位置45を読み出し、目標PC位置と現在のPC37の値の差ΔPを算出する(S30)。
判定部44は、差ΔPが監視可能閾値より大きいか否かを判定する(S40)。監視可能閾値は同期開始通知領域の容量とほぼ等しい閾値である。差ΔPが監視可能閾値より大きい場合(S40のYes)、コア1は同期開始通知領域以外か又は同期処理モジュール以外を実行しているので、判定部44は監視処理モジュールを実行すると判断する(S50)。
監視処理の実行後、コア2は再度、ステップS20からの処理を実行する。
差ΔPが監視可能閾値より大きくない場合(S40のNo)、コア1は同期開始通知領域又は同期処理モジュールを実行しているので、判定部44は監視処理モジュールを実行できないと判断し、コア1から処理終了通知を取得する(S60)。すなわち、コア2はコア1から処理終了通知を取得するまで待機する(S70)。そして、コア1から処理終了通知を取得すると、同期処理モジュールを実行して同期を完了させる。
なお、図8はコア2が先にメイン処理を終了した場合のフローチャート図であるが、コア1が先にメイン処理を終了した場合も同様の手順で実行できる。
〔同期開始通知領域のサイズ(監視可能閾値)の決定方法〕
同期開始通知領域はROM13のアドレスの終わり付近の領域と説明したが、同期開始通知領域のサイズは、処理時間に変換した場合にコア2の監視処理モジュールの実行時間と同程度であることが好ましい。
図9は、同期開始通知領域のサイズ(監視可能閾値)の決定方法を説明する図の一例である。図9(a)は、同期開始通知領域の処理時間と監視処理モジュールの処理時間の時間差が大きい場合を示している。
(i)コア2がコア1のPCを読み出すが、同期開始通知領域でないため、コア2は監視処理を実行する。
(ii)監視処理の終了後、コア2がコア1のPCを読み出すが、同期開始通知領域でないため、コア2は監視処理を実行する。
(iii)しかし、コア1の同期処理通知領域の処理時間に対し、コア2の監視処理モジュールの処理時間が大きいので、コア1に同期待ち時間が発生してしまう(コア1はメイン処理の後、同期処理を開始しているが、実際に同期を取るまでにはコア2の監視処理の終了まで、遅延時間分、待つ必要がある)。
図9(b)は同期開始通知領域の処理時間と監視処理モジュールの処理時間がほぼ等しい場合を示している。
(i)コア2がコア1のPCを読み出すが、同期開始通知領域でないため、コア2は監視処理を実行する。
(ii)監視処理の終了後、コア2がコア1のPCを読み出すが、同期開始通知領域でないため、コア2は監視処理を実行する。
(iii)監視処理の終了後、コア2がコア1のPCを読み出すが、同期開始通知領域であるため、コア2は監視処理を実行しない。
(iv)したがって、コア2は同期処理を実行することができる。この後、コア1が同期開始通知領域の処理を終わらせるまで、コア2は待機するが、図9(a)の場合よりも同期完了までの時間を低減できることがわかる。
このように、コア1の同期開始通知領域の処理時間とコア2の監視処理モジュールの処理時間をほぼ等しくすることで、コア2が監視処理中にコア1が同期処理を開始することを防止できる。
なお、コア1の同期開始通知領域の処理時間よりもコア2の監視処理モジュールの処理時間の方が短くても、コア2が監視処理中にコア1が同期処理を開始することを防止できる。しかし、コア2の監視処理モジュールの処理時間の方が短か過ぎると、コア2の同期待ち時間が長くなるため、コア1の同期開始通知領域の処理時間よりもコア2の監視処理モジュールの処理時間の方があまりに短いことは好ましくない。したがって、コア1の同期開始通知領域の処理時間とコア2の監視処理モジュールの処理時間はほぼ等しいか、又は、コア2の監視処理モジュールの処理時間がコア1の同期開始通知領域の処理時間よりもやや短い程度(例えば70から90%)であることが好ましい。
〔同期開始通知領域の処理時間、監視処理モジュールの処理時間の調整方法〕
同期開始通知領域の処理時間、監視処理モジュールの処理時間の調整方法としては、例えば以下の2つが挙げられる。
方法1:ROMの容量と処理時間がほぼ等しい場合
コア1の同期開始通知領域のサイズとコア2の監視処理モジュールのサイズをほぼ同じにすればよい。具体的には、以下のように処理する。
・関数コールは避ける(コールされた関数のサイズが不特定であるため)
・分岐処理を避ける(分岐先の処理により実行されるプログラムサイズが変わるため)
・for文などの繰り返し処理は避ける(プログラムサイズと処理時間が一致しないため)
関数コールを避けるには、プログラマなどが関数を直接、同期開始通知領域又は監視処理モジュールに記述する。分岐処理を避ける方法は次述する。for文などの繰り返し処理を避けるには、繰り返しの数だけ処理を記述する。
方法2:ROMの容量が同じでも処理時間が異なる場合
コア1の同期開始通知領域の処理時間とコア2の監視処理モジュールの処理時間がほぼ同じにする。具体的には、以下のように処理する。
・分岐処理を避ける(分岐先の処理により実行されるプログラムサイズが変わるため)
・ループ数の動的な決定は避ける(ループ数で処理時間が変わるため)
ループ数の動的な決定を避けるには、ループ数を動的に決定する必要がある処理を同期開始通知領域又は監視処理モジュールから移動する。
図10は、分岐処理を避ける方法について説明する図の一例である。
図10(a)はif文、switch文を含む従来処理を模式的に示している。この処理は、車の速度等の走行状態に応じて最大限の燃費性能を発揮できるように、制御パターンを切り替える処理である。図の制御パターンは燃料消費量の計算であるが、どのような処理でもよい。
従来は、if文やswitch文により、パターンA(0〜10km/h)、パターンB(10〜30km/h)、パターンC(30〜50km/h)、パターンD(50〜80km/h)、パターンE(80〜km/h)、のいずれかの適切な燃料噴射量の計算に切り替えられていた。
本実施形態では、図10(b)に示すように、走行状況が変わっても同じパターンXを制御パターンとする。これにより、最大限の燃費性能を発揮できない可能性があっても、全車速領域で有効な燃料噴射量を行う。分岐処理がなくなるため、方法1及び2において、同期開始通知領域のサイズと監視処理モジュールのサイズを、サイズ及び処理時間のどちらで比較した場合でもほぼ同じにすることができる。
以上説明したように、本実施形態のマイコン100は、同期開始通知領域を実行しているか否かを監視して監視処理を行うことで、先に処理が終了したコア又は後に処理が終了したコアが同期待ちする時間を短くできる。
〔コアが3つ以上の場合〕
図11は、コアが3つの場合の同期処理と監視処理を模式的に示す図の一例である。図では3つのコアが依存関係のあるメイン処理1〜3を実行しているものとする。この場合、コア1はコア2、コア3からPCの値を読み出し、コア2はコア1、コア3からPCの値を読み出し、コア3はコア2、コア1からPCの値を読み出す。
(i) 最も先に処理が終了したコア2は処理終了通知をコア1とコア3に出力する。
(ii) コア2は、コア1とコア3のPCの値を取得する。
(iii) コア1とコア3のどちらも同期開始通知領域でないので、コア2は監視処理を行う。
(iv) 監視処理が終了したコア2は、コア1とコア3のPCの値を取得する。
(v) コア3は同期開始通知領域でだが、コア1が同期開始通知領域でないので、コア2は監視処理を行う。
(vi) コア3は、同期開始通知領域まで処理が終わったので、処理終了通知をコア1に出力する。
(vii) コア3はコア1からPCの値を取得する。
(viii) コア1が同期開始通知領域でないので、コア3は監視処理を実行する。
(ix) コア2,3はコア1からPCの値を取得する。
(x) コア2,3は、同期開始通知領域なので、コア2,3は同期処理を開始する。また、コア1も同期処理を実行する。
このように、3つ以上のコアが同期処理を実行する場合、最後の1つのコアが同期開始通知領域のアドレスに到達するまで、他のコアは監視処理を実行することができる。したがって、CPUの稼働率を向上させることができる。
本実施例では、目標PC位置と現在のPCの値の差ΔPに応じて、非同期処理を動的に選択するマイコン100について説明する。コアが複数の非同期処理を有する場合、目標PC位置と現在のPCの値のΔPが小さくてもΔP以下のサイズ(処理時間)の非同期処理を実行できるため、さらにCPUの稼働率を向上させることができる。
図12は、コア1,コア2の機能を模式的に示す機能ブロック図の一例である。本実施例において、実施例1にて同一の符号を付した構成要素については、同様の機能を果たすので、一度説明した構成要素の説明を省略あるいは相違点についてのみ説明する場合がある。
本実施例ではコア1,2が処理決定部51,61、サイズ決定部52,62、及び、複数の監視処理部38,48(以下、区別するため監視処理部x、y、zという)をそれぞれ有している。以下、コア2を例に説明する。サイズ決定部62は、判定部44が算出したΔPに基づき、ΔPに対応する処理時間で実行可能なサイズ又は処理時間を決定する。サイズに基づき決定する場合、コア2が実行可能なサイズはΔPと等しい。処理時間に基づき決定する場合、同期開始通知領域のサイズは実施例1と同様の調整により処理時間と相関するようになっているので、ΔPから処理時間を算出する。
処理決定部61は、監視処理部xの監視処理モジュールx〜zのサイズ及び処理時間を保持している。したがって、処理決定部61は、判定部44が算出したΔP以下の監視処理モジュールx〜zを決定できる。処理決定部61は、ΔPよりもサイズ又は処理時間が小さい監視処理モジュールx〜zのうち最もサイズ又は処理時間が大きい監視処理モジュールx〜zを実行する監視処理に決定する。これにより、サイズ又は処理時間が大きい監視処理モジュールを実行しやすくなる。
図13は、コア2が監視処理を実行する手順を示すフローチャート図の一例である。図8と異なる主要ステップを説明する。図13では、ステップS40で差ΔPが監視可能閾値より大きいと判定された場合(S40のYes)、サイズ決定部62はΔPからサイズ又は処理時間を決定し、処理決定部61がΔP以下の監視処理部を決定する(S45)。以降の処理は実施例1と同様である。
本実施例によれば、算出したΔPのサイズ又は処理時間により実行する非同期処理を決定するので、同期処理が始まるまでの時間に応じて適切な非同期処理を決定できる。
11 CPU
21 コア
13 ROM
32、42 メイン処理実行部
33,43 PC取得部
35,45 目標PC位置
38、48 監視処理部
100 マイコン

Claims (8)

  1. 依存関係のあるプログラムを並列に処理する複数のプロセッサと、
    他のプロセッサが行った処理結果に同期処理を施す同期処理手段と、
    プロセッサ毎にプロセッサの現在の実行プログラムアドレス値を保持するプログラムカウンタと、
    他のプロセッサの現在の実行プログラムアドレス値を読み出す読み出し手段と、
    他のプロセッサが同期処理を開始するアドレス位置を記憶するアドレス位置記憶手段と、
    前記読み出し手段が読み出した実行プログラムアドレス値と、前記アドレス位置記憶手段に記憶された前記アドレス位置とに基づいて他のプロセッサの同期処理開始までの進捗情報を算出する進捗情報算出手段と、
    前記進捗情報に基づき他のプロセッサが同期処理を開始する前に自プロセッサが非同期処理を実行可能であると判定した場合に、非同期処理を実行する非同期処理手段と、
    を有することを特徴とするマルチプロセッサ。
  2. 前記読み出し手段が読み出した実行プログラムアドレス値と、前記アドレス位置記憶手段に記憶された前記アドレス位置との差分に基づいて、自プロセッサが処理する予定の非同期処理のプログラムサイズを算出するプログラムサイズ算出手段と、
    前記プログラムサイズ算出手段が算出したプログラムサイズに応じて非同期処理手段が実行する非同期処理を決定する非同期処理決定手段と、
    を有することを特徴とする請求項1記載のマルチプロセッサ。
  3. 前記非同期処理決定手段は、処理時間が前記差分以下の非同期処理のうち、最も処理時間が大きい非同期処理を非同期処理手段が実行する非同期処理に決定する、
    ことを特徴とする請求項2記載のマルチプロセッサ。
  4. 依存関係のあるプログラムを並列に処理する複数のプロセッサが共通に提供する機能毎に前記同期処理手段を有し、
    前記アドレス位置記憶手段は、機能毎に異なる前記アドレス位置を記憶しており、
    前記進捗情報算出手段は、前記同期処理手段が同期処理を終了させ機能が切り替わる毎に、前記アドレス位置記憶手段から切り替えて読み出した前記アドレス位置と、前記読み出し手段が読み出した実行プログラムアドレス値とに基づいて他のプロセッサの同期処理開始までの進捗情報を算出する、
    ことを特徴とする請求項1〜3いずれか1項記載のマルチプロセッサ。
  5. 依存関係のあるプログラムを実行する他のプロセッサが複数ある場合、
    前記進捗情報算出手段は、全ての前記他のプロセッサから前記読み出し手段が読み出した実行プログラムアドレス値と、前記アドレス位置記憶手段に記憶された前記アドレス位置とに基づいて他のプロセッサの同期処理開始までの前記進捗情報を算出し、
    前記進捗情報に基づき全ての前記他のプロセッサのうち1つでも同期処理を開始する前に、自プロセッサが非同期処理を実行可能である場合、非同期処理手段が非同期処理を実行する、
    ことを特徴とする請求項1〜4いずれか1項記載のマルチプロセッサ。
  6. 前記非同期処理は自己診断処理である、ことを特徴とする請求項1〜5いずれか1項記載のマルチプロセッサ。
  7. 請求項1〜6いずれか1項記載のマルチプロセッサを搭載した車両用の電子制御ユニット。
  8. 依存関係のあるプログラムを並列に処理する複数のプロセッサのうちの少なくとも1つのプロセッサに、
    他のプロセッサが有する、プロセッサの現在の実行プログラムアドレス値を保持するプログラムカウンタから現在の実行プログラムアドレス値を読み出す読み出しステップと、
    前記読み出しステップで読み出された実行プログラムアドレス値と、他のプロセッサが同期処理を開始するアドレス位置を記憶するアドレス位置記憶手段に記憶された前記アドレス位置とに基づいて他のプロセッサの同期処理開始までの進捗情報を算出する進捗情報算出ステップと、
    前記進捗情報に基づき他のプロセッサが同期処理を開始する前に自プロセッサが非同期処理を実行可能であると判定した場合に、非同期処理を実行する非同期処理ステップと、
    自プロセッサが非同期処理を実行可能でないと判定した場合に、同期処理を実行する同期処理ステップと、
    を実行させるプログラム。
JP2013067621A 2013-03-27 2013-03-27 マルチプロセッサ、電子制御装置、プログラム Pending JP2014191655A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013067621A JP2014191655A (ja) 2013-03-27 2013-03-27 マルチプロセッサ、電子制御装置、プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013067621A JP2014191655A (ja) 2013-03-27 2013-03-27 マルチプロセッサ、電子制御装置、プログラム

Publications (1)

Publication Number Publication Date
JP2014191655A true JP2014191655A (ja) 2014-10-06

Family

ID=51837828

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013067621A Pending JP2014191655A (ja) 2013-03-27 2013-03-27 マルチプロセッサ、電子制御装置、プログラム

Country Status (1)

Country Link
JP (1) JP2014191655A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107531250A (zh) * 2015-04-20 2018-01-02 奥托立夫开发公司 车辆安全电子控制系统
WO2019009068A1 (ja) * 2017-07-03 2019-01-10 日立オートモティブシステムズ株式会社 車両制御装置用の検証装置及び車両制御装置
CN111290866A (zh) * 2020-02-11 2020-06-16 支付宝(杭州)信息技术有限公司 业务处理方法及装置
JP2021076936A (ja) * 2019-11-05 2021-05-20 株式会社デンソー 電子制御装置およびその動作方法ならびに制御プログラム
US11256537B2 (en) 2018-07-30 2022-02-22 Mitsubishi Electric Corporation Interrupt control apparatus, interrupt control method, and computer readable medium
KR20230101569A (ko) 2021-12-29 2023-07-06 현대오토에버 주식회사 가상 워치독 제공 방법 및 그 방법이 적용된 연산 장치

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107531250A (zh) * 2015-04-20 2018-01-02 奥托立夫开发公司 车辆安全电子控制系统
JP2018528111A (ja) * 2015-04-20 2018-09-27 オートリブ ディベロップメント エービー 車両安全電子制御システム
US11360864B2 (en) 2015-04-20 2022-06-14 Veoneer Sweden Ab Vehicle safety electronic control system
WO2019009068A1 (ja) * 2017-07-03 2019-01-10 日立オートモティブシステムズ株式会社 車両制御装置用の検証装置及び車両制御装置
JP2019016021A (ja) * 2017-07-03 2019-01-31 日立オートモティブシステムズ株式会社 車両制御装置用の検証装置及び車両制御装置
US11256537B2 (en) 2018-07-30 2022-02-22 Mitsubishi Electric Corporation Interrupt control apparatus, interrupt control method, and computer readable medium
JP2021076936A (ja) * 2019-11-05 2021-05-20 株式会社デンソー 電子制御装置およびその動作方法ならびに制御プログラム
JP7243575B2 (ja) 2019-11-05 2023-03-22 株式会社デンソー 電子制御装置およびその動作方法ならびに制御プログラム
CN111290866A (zh) * 2020-02-11 2020-06-16 支付宝(杭州)信息技术有限公司 业务处理方法及装置
CN111290866B (zh) * 2020-02-11 2023-06-30 支付宝(杭州)信息技术有限公司 业务处理方法及装置
KR20230101569A (ko) 2021-12-29 2023-07-06 현대오토에버 주식회사 가상 워치독 제공 방법 및 그 방법이 적용된 연산 장치

Similar Documents

Publication Publication Date Title
JP2014191655A (ja) マルチプロセッサ、電子制御装置、プログラム
US6675191B1 (en) Method of starting execution of threads simultaneously at a plurality of processors and device therefor
US9164799B2 (en) Multiprocessor system
US9251308B2 (en) Simulation method, system, and program
JP5829890B2 (ja) 半導体データ処理装置、タイムトリガ通信システム及び通信システム
CN115033356B (zh) 一种基于异构可重构的动态资源调度方法及系统
EP2282265A1 (en) A hardware task scheduler
JP2017073000A (ja) 並列化方法、並列化ツール、車載装置
JP5726006B2 (ja) タスクおよびリソースのスケジューリング装置及びその方法並びに制御装置
US8601488B2 (en) Controlling the task switch timing of a multitask system
JP2013152636A (ja) 情報処理装置、タスクスケジューリング方法
JP2007133744A (ja) Cpu間データ転送装置
JP2011170619A (ja) マルチスレッド処理装置
EP2541404B1 (en) Technique for task sequence execution
JP2011002993A (ja) ウォッチドックタイマ監視装置、ウォッチドックタイマ監視方法
JP2010140239A (ja) 割り込みレイテンシーを短縮する装置及び方法
JP2013054625A (ja) 情報処理装置、情報処理方法
US11645124B2 (en) Program execution control method and vehicle control device
JP2010140319A (ja) 半導体装置
CN112445587A (zh) 一种任务处理的方法以及任务处理装置
JP2008217623A (ja) データプロセッサ
JP2019179414A (ja) 情報処理装置
JP2018049406A (ja) 複数プロセッサ間のタスク連携装置
JP5299681B2 (ja) プログラム検査方法
JP2011248454A (ja) プロセッサ装置及びプロセッサ装置の制御方法