JP2018124876A - 並列化方法、並列化ツール、車載制御装置 - Google Patents

並列化方法、並列化ツール、車載制御装置 Download PDF

Info

Publication number
JP2018124876A
JP2018124876A JP2017017776A JP2017017776A JP2018124876A JP 2018124876 A JP2018124876 A JP 2018124876A JP 2017017776 A JP2017017776 A JP 2017017776A JP 2017017776 A JP2017017776 A JP 2017017776A JP 2018124876 A JP2018124876 A JP 2018124876A
Authority
JP
Japan
Prior art keywords
core
program
executed
parallel
execution
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.)
Granted
Application number
JP2017017776A
Other languages
English (en)
Other versions
JP6690570B2 (ja
Inventor
貴之 永井
Takayuki Nagai
貴之 永井
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.)
Denso Corp
Original Assignee
Denso 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 Denso Corp filed Critical Denso Corp
Priority to JP2017017776A priority Critical patent/JP6690570B2/ja
Priority to DE102017222292.1A priority patent/DE102017222292A1/de
Publication of JP2018124876A publication Critical patent/JP2018124876A/ja
Application granted granted Critical
Publication of JP6690570B2 publication Critical patent/JP6690570B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Abstract

【課題】ロジックの管理が容易で、制御ロジック実行時における処理負荷の増加を抑制可能な並列プログラムを生成できる並列化方法、並列化ツール、及びデッドロック状態になることが抑制された車載制御装置。【解決手段】コンピュータは、異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に状態フラグをセットする状態セット処理と、状態フラグがセットされたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する(S11、S12)。また、コンピュータは、並列プログラムが実行される前に完了状態が記憶されているか否かを監視する同期監視処理と、完了状態が記憶されていない場合に実行される同期フェイルセーフ処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する(S13、S14)。【選択図】図3

Description

本発明は、シングルコアマイコン用のプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成されたマルチコアマイコン用のプログラムを実装した車載制御装置に関する。
従来、シングルコアマイコン用にプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法の一例として特許文献1に開示された並列化コンパイル方法がある。
この並列化コンパイル方法では、シングルプロセッサシステムにより実行される組込みシステム用の逐次プログラムを複数のマクロタスクに分割した後、制御依存性を有するマクロタスクを一つのマクロタスクに融合する。その後、並列化コンパイル方法では、データ依存性に基づき並列実行可能なマクロタスクを抽出すると共に、スタティックスケジューリングを行い、並列プログラムを生成する。
特開2015−1807号公報
ところで、並列化方法では、並列化解析後、各コアへの通常処理の割り付けと、演算順序を維持するための同期処理を挿入することが考えられる。この同期処理としては、通常処理が完了したことを示す変数をセットする状態セットと、他コアにおいて変数がセットされることを待って自コアの通常処理に移行する待ち処理とを含む。
しかしながら、この変数は、ノイズなどによって、意図せず変わってしまうことも考えられる。このように変数が変わってしまった場合、マルチコアマイコンでは、少なくとも一つのコアにおいて、待ち処理が継続して、通常処理が実行できないデッドロックになってしまう。
このため、デッドロックを抑制する方法としては、従来技術ではないが、意図せず変わってしまった変数を元に戻す処理などのフェイルセーフ処理を、並列プログラムに挿入することが考えられる。この場合、並列プログラムは、シングルコアマイコン用のプログラムに相当する制御ロジックと、デッドロック状態を抑制するためのフェイルセーフロジックとを含んだロジック群となる。よって、上記方法で生成された並列プログラムは、並列プログラムを実行するコアにおける制御ロジックの管理が複雑で、制御ロジックを実行する際のコアの処理負荷が増加する並列プログラムになるという問題がある。
本開示は、上記問題点に鑑みなされたものであり、ロジックの管理が容易で、制御ロジック実行時における処理負荷の増加を抑制可能な並列プログラムを生成できる並列化方法、並列化ツール、及びデッドロック状態になることが抑制された車載制御装置を提供することを目的とする。
上記目的を達成するために本開示は、
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)から、複数の処理を並列化した、マルチコアマイコンにおける複数のコアが実行可能な並列プログラムを生成する並列化方法であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理を、並列プログラムに挿入する記憶処理挿入手順(S11)と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する待ち処理挿入手順(S12)と、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入手順(S13)と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、制御外プログラムに挿入するフェイルセーフ処理挿入手順(S14)と、を備えていることを特徴とする。
このように、本開示は、シングルプログラムにおける並列可能な複数の処理から、複数の処理を並列化した、複数のコアが実行可能な並列プログラムを生成する。そして、本開示は、先行処理の実行が完了した際に完了状態を記憶する記憶処理と、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理とを並列プログラムに挿入する。よって、本開示は、シングルコアマイコンが実行する制御用のシングルプログラムに相当する制御ロジックを含んだ並列プログラムを生成できる。
また、本開示は、並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理と、完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理とを、並列プログラムとは異なる制御外プログラムに挿入する。このため、本開示は、並列プログラムとは別に、監視ロジックとフェイルセーフロジックとを含む制御外プログラムを生成できる。よって、本開示は、意図せずに完了状態の記憶内容が変わってしまった場合、複数のコアにフェイルセーフ処理を実行させる制御外プログラムを生成できる。
従って、複数のコアは、並列プログラムを実行する際に、制御外プログラムを実行する必要がなく、制御ロジックの管理と、監視ロジックやフェイルセーフロジックの管理とを別に行える。よって、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易な並列プログラムを生成できる。また、本開示は、複数のコアが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラムを生成できる。
また、本開示のさらなる特徴は、
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)から、複数の処理を並列化した、マルチコアマイコンにおける複数のコアが実行可能な並列プログラムを生成する、コンピュータを含む並列化ツールであって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理を、並列プログラムに挿入する記憶処理挿入部(S11)と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する待ち処理挿入部(S12)と、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入部(S13)と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、制御外プログラムに挿入するフェイルセーフ処理挿入部(S14)と、を備えた並列化ツール。
このように、本開示では、上記並列化方法と同様に、並列プログラムを生成できる。よって、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易で、複数のコアが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラムを生成できる。
また、本開示のさらなる特徴は、
複数のコア(21c,21d)を有するマルチコアマイコン(21)と、コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)が並列化され複数のコアが実行可能な並列プログラム(21a1)と、を備えた車載制御装置であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
並列プログラムは、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理と、を含み、
さらに、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムを備えており、
制御外プログラムは、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理と、を含み、
マルチコアマイコンは、各コアが並列プログラムと制御外プログラムを実行することを特徴とする。
このように、本開示は、マルチコアマイコンと、上記のように生成された並列プログラムと制御外プログラムを備えている。そして、マルチコアマイコンは、各コアが並列プログラムと制御外プログラムを実行する。このため、本開示は、意図せず完了状態の記憶内容が変わってしまった場合に、フェイルセーフ処理を実行できる。また、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易で、複数のコアが制御ロジックを実行する際における処理負荷の増加が抑制可能である。
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
実施形態における並列化ツールの概略構成を示すブロック図である。 実施形態における車載制御装置の概略構成を示すブロック図である。 実施形態におけるコンピュータの処理動作を示すフローチャートである。 実施形態における並列プログラムを示すイメージ面である。 実施形態における車載制御装置の処理動作を示すフローチャートである。 実施形態における車載制御装置の処理動作を示すタイムチャートである。 実施形態におけるコンピュータの処理動作を示すフローチャートである。 変形例における車載制御装置の処理動作を示すフローチャートである。
以下において、図面を参照しながら、発明を実施するための形態を説明する。
本実施形態では、一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理を第1コア21cと第2コア21dを有するマルチコアマイコン用に並列化した並列プログラム21a1を生成するコンピュータ10を採用する。さらに、本実施形態のコンピュータ10は、並列プログラム21a1に加えて、第1コア21cと第2コア21dが実行可能な並列プログラム21a1とは異なる制御外プログラム21a2を生成する。よって、コンピュータ10は、並列プログラム21a1と制御外プログラム21a2を含むプログラム21a3を生成すると言える。
なお、並列プログラム21a1を生成する際には、特開2015−1807号公報に記載されているように、シングルプログラムを解析して、複数の処理を第1コア21cと第2コア21dに割り振る処理などを行う。この点に関しては、特開2015−1807号公報を参照して適用できる。
以下においては、処理を処理ブロックとも称する。本実施形態では、複数の処理ブロックとして、図4に示すように、第1処理ブロックT1〜第5処理ブロックT5、第6処理ブロックT6〜第11処理ブロックT11を採用する。また、複数の処理ブロックは、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。例えば、第1処理ブロックT1と第8処理ブロックT8とは、第1処理ブロックT1が先行処理であり、第8処理ブロックT8が後行処理である。また、第3処理ブロックT3と第8処理ブロックT8とは、第8処理ブロックT8が先行処理であり、第3処理ブロックT3が後行処理である。
まず、コンピュータ10と、車載制御装置20の構成に関して説明する。コンピュータ10は、並列化手順を実行する並列化ツールに相当する。また、コンピュータ10は、並列プログラム21a1と制御外プログラム21a2を含むプログラム21a3を生成するため、プログラム生成ツールとも言える。図1に示すように、コンピュータ10は、ディスプレイ11、HDD12、CPU13、ROM14、RAM15、入力装置16、読取部17などを備えて構成されている。また、コンピュータ10は、記憶媒体18に記憶された記憶内容を読み取り可能に構成されている。記憶媒体18には、自動並列化コンパイラ1が記憶されている。コンピュータ10及び記憶媒体18の構成は、特開2015−1807号公報に記載されたパーソナルコンピュータ100及び記憶媒体180を参照して適用できる。
自動並列化コンパイラ1は、並列化方法に相当する。つまり、自動並列化コンパイラ1は、並列化手順、言い換えると並列化方法が記述されたプログラムである。コンピュータ10は、自動並列化コンパイラ1を実行することで、並列プログラム21a1と制御外プログラム21a2を含むプログラム21a3を生成する。このため、自動並列化コンパイラ1は、プログラム生成方法とも言える。
自動並列化コンパイラ1は、特開2015−1807号公報に記載されたものを参照して適用できる。特に、自動並列化コンパイラ1は、状態セット処理の挿入手順、待ち処理の挿入手順、同期監視処理の挿入手順、同期フェイルセーフ処理の挿入手順を含んでいる。
状態セット処理の挿入手順は、状態セット処理F0〜F2,F4〜F6を並列プログラム21a1に挿入する手順である。状態セット処理F0〜F2,F4〜F6は、異なるコア間、すなわち第1コア21cと第2コア21dとで実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する処理である。つまり、状態セット処理の挿入手順は、コア21c,21dが先行処理の実行を完了した際に、コア21c,21dに状態セット処理を実行させるためである。なお、状態セット処理は、完了状態の記憶処理に相当する。よって、状態セット処理の挿入手順は、記憶処理挿入手順に相当する。
ここでは、完了状態の記憶方法として状態フラグA1、A3、A6、B8、B10、B11を採用している。各状態フラグは、1がセットされている場合に完了状態を示し、1がセットされていない場合、すなわち0の場合に完了状態でないこと(未完了状態)を示す。このように、車載制御装置20は、複数の先行処理のそれぞれに対応して状態フラグをセットできるように構成されている。なお、状態フラグのセットは、完了状態の記憶と同意である。
第1状態フラグA1は、第1処理ブロックT1に対応しており、第1処理ブロックT1が完了すると第1状態セット処理F1で1がセットされ未完了状態の場合に0とされる。第3状態フラグA3は、第3処理ブロックT3に対応しており、第3処理ブロックT3が完了すると第2状態セット処理F2で1がセットされ未完了状態の場合に0とされる。第8状態フラグB8は、第8処理ブロックT8に対応しており、第8処理ブロックT8が完了すると第5状態セット処理F5で1がセットされ未完了状態の場合に0とされる。第10状態フラグB10は、第10処理ブロックT10に対応しており、第10処理ブロックT10が完了すると第6状態セット処理F6で1がセットされ未完了状態の場合に0とされる。
なお、状態フラグAAは、第1コア21cの全状態フラグの状態を示すものであり、1がセットされている場合に状態フラグA1〜A6の全てが完了状態であることを示し、0の場合に状態フラグA1〜A6の全てが未完了状態であることを示す。状態フラグAAは、1がセットされている場合、第0状態セット処理F0でリセットされて0とされる。
一方、状態フラグBAは、第2コア21dの全状態フラグの状態を示すものであり、1がセットされている場合に状態フラグB8〜B11の全てが完了状態であることを示し、0の場合に状態フラグB8〜B11の全てが未完了状態であることを示す。状態フラグBAは、1がセットされている場合に第4状態セット処理F4でリセットされて0とされる。
待ち処理の挿入手順は、待ち処理W1、W2、W4、W5を並列プログラム21a1に挿入する手順である。待ち処理W1、W2、W4、W5は、第1コア21cと第2コア21dとで実行順序を維持するために、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させる処理である。つまり、待ち処理W1、W2、W4、W5の挿入手順は、コア21c,21dに対して、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させるためである。この待ち処理の挿入手順は、待ち処理挿入手順に相当する。本実施形態では、図4に示すように、待ち処理をwhile文、例えばwhile(B8=0)で表している。
第1待ち処理W1は、第8状態フラグB8に対応しており、第8状態フラグB8=0であるか否かの判定を繰り返して第8状態フラグB8=1になったことを条件に後行処理である第3処理ブロックT3の実行に移行させる処理である。第2待ち処理W2は、第10状態フラグB10に対応しており、第10状態フラグB10=0であるか否かの判定を繰り返して第10状態フラグB10=1になったことを条件に後行処理である第5処理ブロックT5の実行に移行させる処理である。
第4待ち処理W4は、第1状態フラグA1に対応しており、第1状態フラグA1=0であるか否かの判定を繰り返して第1状態フラグA1=1になったことを条件に後行処理である第8処理ブロックT8の実行に移行させる処理である。第5待ち処理W5は、第3状態フラグA3に対応しており、第3状態フラグA3=0であるか否かの判定を繰り返して第3状態フラグA3=1になったことを条件に後行処理である第10処理ブロックT10の実行に移行させる処理である。
同期監視処理の挿入手順は、並列プログラム21a1が実行される前に状態フラグがセットされているか否かを監視する監視処理を、制御外プログラム21a2に挿入する手順である。つまり、同期監視処理の挿入手順は、コア21c,21dに対して、並列プログラム21a1を実行する前に状態フラグが全て1となっているか否かを監視する監視処理を実行させるためである。言い換えると、同期監視処理の挿入手順は、コア21c,21dに対して、並列プログラム21a1を実行する前に状態フラグが全て1となっていることを確認させるためである。この同期監視処理の挿入手順は、監視処理挿入手順に相当する。なお、制御外プログラム21a2に関しては後程説明する。
同期フェイルセーフ処理の挿入手順は、同期監視処理にていずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理を、制御外プログラム21a2に挿入する手順である。つまり、同期フェイルセーフ処理の挿入手順は、コア21c,21dに対して、同期監視処理にていずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理を実行させるためである。この同期フェイルセーフ処理の挿入手順は、フェイルセーフ処理挿入手順に相当する。
なお、同期フェイルセーフ処理は、例えば、タスクのリセットや、マルチコアプロセッサ21のリセットや、退避動作モードや、車両の動作状態を示す車両情報のリセットなどを含む。タスクのリセットとは、第1コア21cと第2コア21dが実行するタスクを最初から実行する処理である。マルチコアプロセッサ21のリセットとは、マルチコアプロセッサ21のRAM21bやレジスタをリセットする処理である。退避動作モードとは、第1コア21cと第2コア21dに、並列プログラム21a1を実行させるのではなく、第1コア21cと第2コア21dに、車両を退避走行させる処理を実行させるモードである。車両情報のリセットとは、第1コア21cと第2コア21dが並列プログラム21a1を実行する際に参照したり書き込みしたりする車両の情報(変数)を、リセットする処理である。
また、本実施形態では、コア21c、21dの処理を同時に完了させるための同期処理として、並列プログラム21a1の最後に、状態セット処理と待ち処理を挿入する手順を有した自動並列化コンパイラ1を採用している。一例として、自動並列化コンパイラ1では、図4に示すように、第3状態セット処理F3と第3待ち処理W3、及び第7状態セット処理F7と第6待ち処理W6を挿入する手順を採用している。これによって、自動並列化コンパイラ1は、第1コア21cと第2コア21dが同時に処理を完了可能な並列プログラム21a1を生成できる。なお、第3状態セット処理F3と第3待ち処理W3、及び第7状態セット処理F7と第6待ち処理W6は、コア21c、21dのタスクを同時に完了させるための処理と言える。
第6状態フラグA6は、第5処理ブロックT5に対応しており、第5処理ブロックT5が完了すると第3状態セット処理F3で1がセットされ未完了状態の場合に0とされる。第11状態フラグB11は、第11処理ブロックT11に対応しており、第11処理ブロックT11が完了すると第7状態セット処理F7で1がセットされ未完了状態の場合に0とされる。
第3待ち処理W3は、第11状態フラグB11に対応しており、第11状態フラグB11=0であるか否かの判定を繰り返して第11状態フラグB11=1になったことを条件に処理を完了する処理である。第6待ち処理W6は、第6状態フラグA6に対応しており、第6状態フラグA6=0であるか否かの判定を繰り返して第6状態フラグA6=1になったことを条件に処理を完了する処理である。
コンピュータ10は、自動並列化コンパイラ1を実行することで、図4に示すような、各コア21c、21dに対応した制御ロジック群を含む並列プログラム21a1を生成する。制御ロジック群には、シングルコアマイコンが実行する制御用のシングルプログラムに相当する複数の制御ロジックを含んでいる。
さらに、コンピュータ10は、自動並列化コンパイラ1を実行することで、図4のタスク起床処理などで実行される、同期監視処理や同期フェイルセーフ処理を含んだ制御外プログラム21a2を生成する。制御外プログラム21a2は、監視ロジックとフェイルセーフロジックを含んでいると言える。よって、このように、並列プログラム21a1は、複数の制御ロジックを含んでいるものの、制御外プログラム21a2に含まれる監視ロジックとフェイルセーフロジックを含んでいないと言える。
車載制御装置20は、図2に示すように、マルチコアプロセッサ21、ROM21a、RAM21b、第1コア21c、第2コア21d、通信部22、センサ部23、入出力ポート24を備えて構成されている。車載制御装置20は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載制御装置20をエンジン制御装置に適用した例を採用する。この場合、並列プログラム21a1は、エンジン制御などの自動車制御プログラムと言える。なお、マルチコアプロセッサは、マルチコアマイコンに相当する。また、コアは、プロセッサエレメントとも称することができる。
RAM21b、通信部22、センサ部23、入出力ポート24は、特開2015−1807号公報に記載されたRAM420.通信部430、センサ部450、入出力ポート460を参照して適用できる。
ROM21aには、第1コア21cと第2コア21dとが実行可能なプログラム21a3が記憶されている。また、プログラム21a3には、並列化方法で生成された並列プログラム21a1が含まれている。第1コア21cと第2コア21dは、並列プログラム21a1を実行することで、エンジン制御などを行う。言い換えると、第1コア21cと第2コア21dは、並列プログラム21a1に従って制御ロジックを実行することで、エンジン制御などを行う。
さらに、プログラム21a3には、並列プログラム21a1とは異なる、並列化方法で生成された制御外プログラム21a2が含まれている。第1コア21cと第2コア21dは、制御外プログラム21a2を実行する。
なお、本実施形態では、マルチコアプロセッサ21が車載制御装置20に搭載された例を採用している。しかしながら、本発明は、これに限定されず、マルチコアプロセッサ21が、車載制御装置20とは異なる機器、例えばパソコンなどに搭載されていてもよい。
次に、図3、図4を用いて、コンピュータ10の処理動作に関して説明する。CPU13は、例えば入力装置16によって挿入処理の実行指示がなされた場合に、図3に示すフローチャートを実行する。CPU13は、自動並列化コンパイラ1を実行することで、シングルプログラムから並列プログラム21a1と制御外プログラム21a2を含むプログラム21a3を生成する。CPU13は、特開2015−1807号公報に記載された手順に従って並列プログラム21a1を生成する際に、下記のステップS11〜S14を実行する。
ステップS11では、状態セット処理の挿入を行う。CPU13は、自動並列化コンパイラ1における状態セット処理の挿入手順を実行する。つまり、CPU13は、状態セット処理F0〜F2,F4〜F6を並列プログラム21a1に挿入する。本実施形態では、図4に示すように、例えば、第1処理ブロックT1の後に第1状態セット処理F1、第8処理ブロックT8の後に第8状態セット処理F8を挿入する。このように、コンピュータ10は、機能ブロックとして、状態セット処理の挿入を行うブロックを備えている。よって、ステップS11は、記憶処理挿入部に相当すると言える。なお、CPU13は、ステップS11において、第3状態セット処理F3、第7状態セット処理F7を並列プログラム21a1に挿入してもよい。
なお、本実施形態では、ステップS11において、複数の状態セット処理F0〜F2,F4〜F6を並列プログラム21a1に挿入する例を採用している。しかしながら、本発明は、これに限定されず、一つの状態セット処理を並列プログラム21a1に挿入するものであっても採用できる。
ステップS12では、待ち処理の挿入を行う。CPU13は、自動並列化コンパイラ1における待ち処理の挿入手順を実行する。つまり、CPU13は、待ち処理W1、W2、W4、W5を並列プログラム21a1に挿入する。本実施形態では、図4に示すように、例えば、第8処理ブロックT8の前に第4待ち処理W4、第3処理ブロックT3の前に第1待ち処理W1を挿入する。このように、コンピュータ10は、機能ブロックとして、待ち処理の挿入を行うブロックを備えている。よって、ステップS12は、待ち処理挿入部に相当すると言える。なお、CPU13は、ステップS12において、第3待ち処理W3、第6待ち処理W6を並列プログラム21a1に挿入してもよい。
ステップS13では、同期監視処理の挿入を行う。CPU13は、自動並列化コンパイラ1における同期監視処理の挿入手順を実行する。つまり、CPU13は、同期監視処理を制御外プログラム21a2に挿入する。このように、コンピュータ10は、機能ブロックとして、同期監視処理の挿入を行うブロックを備えている。よって、ステップS13は、監視処理挿入部に相当すると言える。
ステップS14では、同期フェイルセーフ処理の挿入を行う。CPU13は、自動並列化コンパイラ1における同期フェイルセーフ処理の挿入手順を実行する。つまり、CPU13は、同期フェイルセーフ処理を制御外プログラム21a2に挿入する。このように、コンピュータ10は、機能ブロックとして、同期フェイルセーフ処理の挿入を行うブロックを備えている。よって、ステップS14は、フェイルセーフ処理挿入部に相当すると言える。
このように、本実施形態では、コンピュータ10が、ステップS11〜S14を実行することで、並列プログラム21a1と制御外プログラム21a2を生成する。生成された並列プログラム21a1の一例を図4に示す。この例では、第1コア21cに第1処理ブロックT1、第2処理ブロックT2、第3処理ブロックT3、第4処理ブロックT4、第5処理ブロックT5が割り振られている。一方、第2コア21dには、第7処理ブロックT7、第8処理ブロックT8、第9処理ブロックT9、第10処理ブロックT10、第11処理ブロックT12が割り振られている。
また、並列プログラム21a1では、第1処理ブロックT1の後や第8処理ブロックT8の後などに、第1状態セット処理F1や第5状態セット処理F5などが挿入されている。さらに、並列プログラム21a1では、第3処理ブロックT3の前や第8処理ブロックT8の前などに、第1待ち処理W1や第4待ち処理W4などが挿入されている。
また、生成された制御外プログラム21a2は、状態フラグが全て1となっているか否かを監視する監視処理や、いずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理などを含んでいる。
なお、本発明はこれに限定されない。作業者などが、特開2015−1807号公報に記載された並列化方法に加えて、ステップS11〜S14を行うことで、並列プログラム21a1と制御外プログラム21a2を生成してもよい。
次に、図4、図5、図6を用いて、第1コア21c及び第2コア21dの処理動作に関して説明する。第1コア21cと第2コア21dは、所定時間毎にタスク起床処理を行い、タスク起床すると、タスク起床処理を行った後に図4に示す各自に割り振られた処理を実行する。
また、第1コア21cと第2コア21dのそれぞれは、タスク起床処理において、つまり、並列プログラム21a1を実行する前に制御外プログラム21a2を実行する。第1コア21cと第2コア21dは、タスク起床処理において、図5のフローチャートに示す処理を実行する。よって、制御外プログラム21a2は、ステップS21〜S25の処理を含んでいるとみなせる。
なお、コア21c、21dは、同期フェイルセーフ処理の内容によっては、制御外プログラム21a2を実行して状態フラグのいずれかが0であった場合、並列プログラム21a1を実行することなく同期フェイルセーフ処理を実行することもある。第1コア21cと第2コア21dは、例えば退避動作モードが設定されていると、状態フラグのいずれかが0であった場合、並列プログラム21a1を実行することなく退避動作モードに対応して、車両を退避走行させる処理を実行する。
図6では、第1コア21cと第2コア21dの処理動作を示すタイムチャートであり、複数の状態フラグのうち、第1状態フラグA1のみを図示している。また、図6では、タイミングti0でタスク起床処理の実行を開始して同期フェイルセーフ処理を行う必要がなくタイミングti1でタスク起床し、タイミングti0から所定時間後のタイミングti6で次のタスク起床処理を実行する例を採用している。そして、図6では、タイミングti6でタスク起床処理の実行を開始して、タイミングti7で同期フェイルセーフ処理を行い、タイミングti8でタスク起床する例を採用している。
また、図6では、タイミングti3で、第1状態フラグA1の値が意図せずに変わってしまったことで、第4待ち処理W4の待ち状態が継続(デッドロック)し、これに伴って第1待ち処理W1がデッドロックした例を採用している。つまり、第1コア21cでは、タイミングti5からの第1待ち処理W1でデッドロックしている。第2コア21dでは、タイミングti4からの第4待ち処理W4でデッドロックしている。
ステップS21では、前回起床のタスク終了か否かを判定する。第1コア21cと第2コア21dは、タイミングti0の直後やタイミングti6の直後に示すように、前回起床のタスク終了か否かを判定する。第1コア21cと第2コア21dは、前回起床したタスクが終了しているか否かを判定し、タスクが終了していると判定した場合はステップS25へ進み、終了していないと判定した場合はステップS22へ進む。
例えば、第1コア21cと第2コア21dは、第11状態フラグB11に1がセットされ、第6状態フラグA6に1がセットされていると前回起床したタスクが終了していると判定する。一方、第1コア21cと第2コア21dは、第11状態フラグB11と第6状態フラグA6のいずれかに1がセットされていないと前回起床したタスクが終了していないと判定する。
ステップS25では、タスク起床する。第1コア21cと第2コア21dは、タスク起床して、タイミングti1やタイミングti8に示すように、並列プログラム21a1の実行を開始する。
ステップS22では、状態フラグのいずれかが0であるか否かを判定する。第1コア21cと第2コア21dは、状態フラグA1、A3、B8、B10のいずれかが0であるか否かを判定する。つまり、第1コア21cと第2コア21dは、処理ブロックのいずれかが未完了であるか否かを判定する。なお、第1コア21cと第2コア21dは、ステップS22で第6状態フラグA6、第11状態フラグB11を含めて、いずれかが0であるか否かを判定してもよい。
そして、第1コア21cと第2コア21dは、全ての状態フラグに1がセットされていると判定した場合、全ての処理ブロックが完了しているとみなしてステップS23へ進む。一方、第1コア21cと第2コア21dは、いずれか一つでも状態フラグが0であると判定した場合、少なくとも一つの処理ブロックが完了していないとみなしてステップS24へ進む。図6の場合、第1コア21cと第2コア21dは、タイミングti6〜ti8のタスク起床処理におけるステップS22でYES判定する。
ステップS24では、同期フェイルセーフ処理を実行する。第1コア21cと第2コア21dは、タイミングti6〜ti8のタスク起床処理内におけるタイミングti7で同期フェイルセーフ処理を実行する。なお、第1コア21cと第2コア21dは、タイミングti7の同期フェイルセーフ処理で、例えばタスクのリセットを行う。よって、第1コア21cと第2コア21dは、タイミングti8以降に示すように、並列プログラム21a1を実行する。
ステップS23では、タスク起床時のフェイルセーフを実行する。タスク起床時のフェイルセーフは、同期フェイルセーフ処理と異なるフェイルセーフであり、特に限定されない。第1コア21cと第2コア21dのそれぞれは、ステップS23が終了すると、ステップS25と同様にタスク起床する。
なお、本実施形態では、タスク起床処理で制御外プログラム21a2を実行するため、ステップS21、S25を含む制御外プログラム21a2を採用している。しかしながら、本発明は、これに限定されず、ステップS22、S24を含む制御外プログラム21a2であれば採用できる。
第1コア21cと第2コア21dは、タスク起床処理が終了すると、図4の並列プログラム21a1における自身に割り振られた処理を上から順番に実行する。第1コア21cは、タイミングti1で第0状態セット処理F0を実行してAA=0とする。つまり、第1コア21cは、状態フラグA1、A3、A6をリセット、すなわち0とする。第2コア21dは、タイミングti1で第4状態セット処理F4を実行してBA=0とする。つまり、第2コア21dは、状態フラグB8、B10、B11をリセット、すなわち0とする。
その後、第1コア21cは、第1処理ブロックT1を実行し、第1処理ブロックT1の実行が完了すると、第1状態セット処理F1を実行して第1状態フラグA1に1をセットする。第1コア21cは、第1状態フラグA1に1をセットした後、第2処理ブロックT2を実行する。しかしながら、本実施形態では、第1状態フラグA1が、タイミングti3で、ノイズなどによって意図せずリセットされる例を採用している。つまり、マルチコアプロセッサ21は、第1状態フラグA1の値が1から0になってしまう。
一方、第2コア21dは、BA=0とした後、第7処理ブロックT7を実行する。そして、第2コア21dは、第7処理ブロックT7の実行が完了すると、タイミングti4で第4待ち処理W4を実行して、第1状態フラグA1が1になるまでループする。
ところが、第1状態フラグA1は、タイミングti3でリセットされて0となっており、第1処理ブロックT1が完了しているにもかかわらず0のままである。このため、第2コア21dは、タイミングti4から第1状態フラグA1が1になるまでループし、デッドロックとなってしまう。
そして、第1コア21cは、第2処理ブロックT2の実行が完了すると、タイミングti5で第1待ち処理W1を実行して、第8状態フラグB8が1になるまでループする。しかしながら、第2コア21dは、上記のように第4待ち処理W4でデッドロックしているため、第8処理ブロックT8を実行できない。このため、第8状態フラグB8は0のまま継続している。よって、第1コア21cは、タイミングti5から第8状態フラグB8が1になるまでループし、デッドロックとなってしまう。
よって、第1コア21cと第2コア21dは、デッドロックとなったため、この回のタスクが終了しないままタイミングti6に示すように、所定時間後に次のタスク起床処理を実行することになる。第1コア21cと第2コア21dは、今回のタスク起床処理において、ステップS21でNO判定するため、ステップS22を実行することになる。そして、第1コア21cと第2コア21dは、ステップS22でYES判定することになり、タイミングti7で同期フェイルセーフ処理を実行する。
第1コア21cと第2コア21dは、タスク起床処理を行ったあと、タイミングti8以降において、上記と同様に、図4の並列プログラム21a1における自身に割り振られた処理を上から順番に実行する。なお、今回のタスク、すなわち図6のタイミングti8以降では、状態フラグが意図せずリセットされず、デッドロックが発生しない例を採用している。
そして、第1コア21cは、第3状態セット処理F3で第6状態フラグA6に1をセットし、第3待ち処理W3でB11=0であるかの判定を繰り返してB11=1になるのを待つ。第2コア21dは、第7状態セット処理F7で第11状態フラグB11に1をセットし、第6待ち処理W6でA6=0であるかの判定を繰り返してA6=1になるのを待つ。これによって、第1コア21cと第2コア21dは、同時にタスクを完了させることができる。
以上のように、自動並列化コンパイラ1は、シングルプログラムにおける並列可能な複数の処理から、複数の処理を並列化した、複数のコア21c、21dが実行可能な並列プログラム21a1を生成する。そして、自動並列化コンパイラ1は、先行処理の実行が完了した際に完了状態を記憶する状態セット処理と、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理とを並列プログラムに挿入する。よって、自動並列化コンパイラ1は、シングルコアマイコンが実行する制御用のシングルプログラムに相当する制御ロジックを含んだ並列プログラム21a1を生成できる。
また、自動並列化コンパイラ1は、同期監視処理と同期フェイルセーフ処理とを、並列プログラム21a1とは異なる制御外プログラム21a2に挿入する。このため、自動並列化コンパイラ1は、並列プログラム21a1とは別に、監視ロジックとフェイルセーフロジックとを含む制御外プログラム21a2を生成できる。よって、自動並列化コンパイラ1は、意図せずに状態フラグが1から0に変わってしまった場合、複数のコア21c、21dに同期フェイルセーフ処理を実行させる制御外プログラム21a2を生成できる。
従って、複数のコア21c、21dは、並列プログラム21a1を実行する際に、制御外プログラム21a2を実行する必要がなく、制御ロジックの管理と、監視ロジックやフェイルセーフロジックの管理とを別に行える。よって、自動並列化コンパイラ1は、並列プログラム21a1に制御外プログラム21a2が含まれている場合よりも、ロジックの管理が容易な並列プログラム21a1を生成できる。
例えば、並列プログラム21a1に制御外プログラム21a2が含まれていた場合、制御ロジックの管理と監視ロジックやフェイルセーフロジックの管理が複雑になる。並列プログラム21a1は、複数のコア21c、21dで実行される際にロジックが正しく管理されないと、誤った改変を誘発する可能性がある。しかしながら、自動並列化コンパイラ1は、ロジックの管理が容易な並列プログラム21a1を生成できるため、誤った改変を抑制できる。
さらに、自動並列化コンパイラ1は、制御外プログラム21a2を実行することによる複数のコア21c、21dの処理負荷が、並列プログラム21a1を実行することによる複数のコア21c、21dの処理負荷に含まれることを抑制できると言える。よって、自動並列化コンパイラ1は、複数のコア21c、21dが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラム21a1を生成できる。
また、制御に直接的に関係する並列プログラム21a1、及び並列プログラム21a1を含む車載制御装置20やマルチコアプロセッサの製造は、他社に委託することも考えられる。このような場合、自動並列化コンパイラ1は、例えばエンジンなどの制御に直接的に関係しない同期監視処理と同期フェイルセーフ処理を、制御に直接的に関係する並列プログラム21a1とは別の制御外プログラム21a2とすることができる。このため、自動並列化コンパイラ1は、製造を委託する側が要望する並列プログラム21a1に、制御外プログラム21a2が含まれないようにできるため好ましい。自動並列化コンパイラ1は、製造を委託する側が要望する並列プログラム21a1の実行に伴う処理負荷に、制御外プログラム21a2の実行に伴う処理負荷が含まれないようにできるため好ましい。
また、コンピュータ10では、自動並列化コンパイラ1を実行することで、並列プログラム21a1と制御外プログラム21a2を生成するため、上記自動並列化コンパイラ1と同様に、並列プログラム21a1を生成できる。よって、コンピュータ10は、自動並列化コンパイラ1と同様の効果を奏することができる。
このように、車載制御装置20は、マルチコアプロセッサ21と、上記のように生成された並列プログラム21a1と制御外プログラム21a2を備えている。そして、マルチコアプロセッサ21は、各コア21c、21dが並列プログラム21a1と制御外プログラム21a2を実行する。このため、車載制御装置20は、意図せず状態フラグが1から0に変わってしまった場合に、同期フェイルセーフ処理を実行できる。また、車載制御装置20は、並列プログラム21a1に制御外プログラム21a2が含まれている場合よりも、ロジックの管理が容易で、複数のコア21c、21dが制御ロジックを実行する際における処理負荷の増加が抑制可能である。
なお、本実施形態では、制御外プログラム21a2がタスク起床処理時に実行される例を採用している。しかしながら、本発明は、これに限定されず、並列プログラム21a1とは異なり、2つのコア21c、21dが実行可能なプログラムに監視処理と同期フェイルセーフ処理とを挿入する自動並列化コンパイラ1及びコンピュータ10であれば採用できる。監視処理と同期フェイルセーフ処理を挿入するプログラムは、例えば、2つのコア21c、21dが実行可能で、並列プログラム21a1よりも優先度が高いプログラムなどを採用できる。
また、本実施形態では、2つのコア21c、21dを備えたマルチコアプロセッサ21を採用している。このため、本実施形態では、シングルプログラムから、2つのコア21c、21dに対応して、2つのコア21c、21dが実行可能なプログラム21a3を生成する例を採用した。しかしながら、本発明は、3つ以上のコアを備えたマルチコアプロセッサ21であっても採用できる。この場合は、3つの以上のコアに対応したプログラム21a3を生成することになる。
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。以下において、本発明のその他の形態である変形例に関して説明する。上記実施形態及び変形例は、それぞれ単独で実施することも可能であるが、適宜組み合わせて実施することも可能である。
(変形例)
ここで、図7、図8を用いて、変形例に関して説明する。本変形例では、主に、上記実施形態と異なる部分に関して説明する。また、本変形例は、自動並列化コンパイラ1が制御外プログラム21a2に対して特定処理を挿入する手順を含んでいる点が上記実施形態と異なる。同様に、本変形例は、コンピュータ10が特定処理の挿入部を含んでいる点が上記実施形態と異なる。そして、本変形例は、各コア21c、21dが状態フラグ毎に同期監視処理と同期フェイルセーフ処理を実行する点が上記実施形態と異なる。なお、本変形例では、上記実施形態と同様の処理に同じステップ番号を付与しているため、上記実施形態を参照して適用できる。
まず、変形例におけるコンピュータ10の処理動作に関して説明する。CPU13は、例えば入力装置16によって挿入処理の実行指示がなされた場合に、図7に示すフローチャートを実行する。CPU13は、自動並列化コンパイラ1を実行することで、シングルプログラムから並列プログラム21a1と制御外プログラム21a2を含むプログラム21a3を生成する。CPU13は、特開2015−1807号公報に記載された手順に従って並列プログラム21a1を生成する際に、下記のステップS11〜S14、S131を実行する。
CPU13は、ステップS13の後に、ステップS131を行う。ステップS131では、特定処理を制御外プログラム21a2に挿入する(特定処理挿入手順、特定処理挿入部)。CPU13は、状態フラグがセットされていないことが検出された場合に、状態フラグがセットされていない状態セット処理を特定する特定処理を、制御外プログラム21a2に挿入する。なお、CPU13は、同期フェイルセーフ処理の挿入手順では、特定処理にて特定された状態フラグ毎に実行される同期フェイルセーフ処理を、制御外プログラム21a2に挿入する(ステップS14)。つまり、変形例のCPU13は、複数の状態フラグを個別に、状態フラグがセットされているか否か確認し、1がセットされていない状態フラグ毎に同期フェイルセーフ処理が実行されることを示す制御外プログラム21a2を生成する。
次に、8を用いて、第1コア21c及び第2コア21dの処理動作に関して説明する。第1コア21cと第2コア21dは、所定時間毎のタスク起床処理時に、図8のフローチャートに示す処理を実行する。
第1コア21cと第2コア21dは、ステップS22でYES判定した場合、ステップS31へ進む。
ステップS31では、第1状態フラグA1=1であるか否かを判定する(特定処理)。第2コア21dは、第1状態フラグA1に1がセットされていると判定した場合、第1処理ブロックT1が完了しているとみなしてステップS33へ進む。
一方、第2コア21dは、第1状態フラグA1に1がセットされていないと判定した場合、第1処理ブロックT1が完了していないとみなしてステップS32へ進む。つまり、第2コア21dは、状態フラグがセットされていない状態セット処理が、第1状態セット処理F1であると特定する。
また、これによって、第2コア21dは、処理が完了していない処理ブロックを特定できる。この場合、第2コア21dは、第1コア21cによる第1処理ブロックT1の処理が完了していないと特定できる。
ステップS32では、第1状態フラグA1に対応した同期フェイルセーフ処理を実行する。第2コア21dは、第1状態フラグA1に対応した同期フェイルセーフ処理、すなわち、第1処理ブロックT1が未完了である場合に適した同期フェイルセーフ処理を実行する。そして、第2コア21dは、ステップS33〜S36まで、対象の状態フラグをかえて同様に処理を行う。
ステップS37では、第8状態フラグB8=1であるか否かを判定する(特定処理)。第1コア21cは、第8状態フラグB8に1がセットされていると判定した場合、第8処理ブロックT8が完了しているとみなしてステップS39へ進む。
一方、第1コア21cは、第8状態フラグB8に1がセットされていないと判定した場合、第8処理ブロックT8が完了していないとみなしてステップS38へ進む。つまり、第1コア21cは、状態フラグがセットされていない状態セット処理が、第5状態セット処理F5であると特定する。
また、これによって、第1コア21cは、処理が完了していない処理ブロックを特定できる。この場合、第1コア21cは、第2コア21dによる第8処理ブロックT8の処理が完了していないと特定できる。
ステップS38では、第8状態フラグB8に対応した同期フェイルセーフ処理を実行する。第1コア21cは、第8状態フラグB8に対応した同期フェイルセーフ処理、すなわち、第8処理ブロックT8が未完了である場合に適した同期フェイルセーフ処理を実行する。そして、第1コア21cは、ステップS39〜S42まで、対象の状態フラグをかえて同様に処理を行う。
変形例の自動並列化コンパイラ1、コンピュータ10、及び車載制御装置20は、上記実施形態と同様の効果を奏することができる。さらに、変形例の自動並列化コンパイラ1、コンピュータ10は、コア21c、コア21dに対して、処理が完了していない処理ブロックに適した同期フェイルセーフ処理を実行させることができるので好ましい。また、車載制御装置20は、処理が完了していない処理ブロックに適した同期フェイルセーフ処理を実行できるので好ましい。
1…自動並列化コンパイラ、10…コンピュータ、11…ディスプレイ、12…HDD、13…CPU、14…ROM、15…RAM、16…入力装置、17…読取部、18…記憶媒体、20…車載制御装置、21…マルチコアプロセッサ、21a…ROM、21a1…並列プログラム、21b…RAM、21c…第1コア、21d…第2コア、22…通信部、23…センサ部、24…入出力ポート

Claims (9)

  1. コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)から、複数の前記処理を並列化した、マルチコアマイコンにおける複数の前記コアが実行可能な並列プログラムを生成する並列化方法であって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理を、前記並列プログラムに挿入する記憶処理挿入手順(S11)と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を、前記並列プログラムに挿入する待ち処理挿入手順(S12)と、
    前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理を、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入手順(S13)と、
    前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、前記制御外プログラムに挿入するフェイルセーフ処理挿入手順(S14)と、を備えた並列化方法。
  2. 前記記憶処理挿入手順は、複数の前記記憶処理を前記並列プログラムに挿入し、
    前記待ち処理挿入手順は、複数の前記待ち処理を前記並列プログラムに挿入し、
    前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を、前記制御外プログラムに挿入する特定処理挿入手順(S131)を備えた請求項1に記載の並列化方法。
  3. 前記フェイルセーフ処理挿入手順では、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を、前記制御外プログラムに挿入する請求項2に記載の並列化方法。
  4. コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)から、複数の前記処理を並列化した、マルチコアマイコンにおける複数の前記コアが実行可能な並列プログラムを生成する、コンピュータを含む並列化ツールであって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理を、前記並列プログラムに挿入する記憶処理挿入部(S11)と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を、前記並列プログラムに挿入する待ち処理挿入部(S12)と、
    前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理を、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入部(S13)と、
    前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、前記制御外プログラムに挿入するフェイルセーフ処理挿入部(S14)と、を備えた並列化ツール。
  5. 前記記憶処理挿入部は、複数の前記記憶処理を前記並列プログラムに挿入し、
    前記待ち処理挿入部は、複数の前記待ち処理を前記並列プログラムに挿入し、
    前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を、前記制御外プログラムに挿入する特定処理挿入部(S131)を備えた請求項4に記載の並列化ツール。
  6. 前記フェイルセーフ処理挿入部では、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を、前記制御外プログラムに挿入する請求項5に記載の並列化ツール。
  7. 複数のコア(21c,21d)を有するマルチコアマイコン(21)と、コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理(T1〜T5、T7〜T11)が並列化され複数の前記コアが実行可能な並列プログラム(21a1)と、を備えた車載制御装置であって、
    複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
    前記並列プログラムは、
    異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理と、
    異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理と、を含み、
    さらに、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムを備えており、
    前記制御外プログラムは、
    前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理と、
    前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理と、を含み、
    前記マルチコアマイコンは、各コアが前記並列プログラムと前記制御外プログラムを実行する車載制御装置。
  8. 前記並列プログラムは、複数の前記記憶処理と、複数の前記待ち処理とを含んでおり、
    前記制御外プログラムは、前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を含んでいる請求項7に記載の車載制御装置。
  9. 前記制御外プログラムは、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を含んでいる請求項8に記載の車載制御装置。
JP2017017776A 2017-02-02 2017-02-02 並列化方法、並列化ツール、車載制御装置 Active JP6690570B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017017776A JP6690570B2 (ja) 2017-02-02 2017-02-02 並列化方法、並列化ツール、車載制御装置
DE102017222292.1A DE102017222292A1 (de) 2017-02-02 2017-12-08 Parallelisierungsverfahren, parallelisierungs-tool und fahrzeuginterne steuervorrichtung

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017017776A JP6690570B2 (ja) 2017-02-02 2017-02-02 並列化方法、並列化ツール、車載制御装置

Publications (2)

Publication Number Publication Date
JP2018124876A true JP2018124876A (ja) 2018-08-09
JP6690570B2 JP6690570B2 (ja) 2020-04-28

Family

ID=62843516

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017017776A Active JP6690570B2 (ja) 2017-02-02 2017-02-02 並列化方法、並列化ツール、車載制御装置

Country Status (2)

Country Link
JP (1) JP6690570B2 (ja)
DE (1) DE102017222292A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007264997A (ja) * 2006-03-28 2007-10-11 Toyota Motor Corp 分散制御装置
JP2013097719A (ja) * 2011-11-04 2013-05-20 Toyota Motor Corp 制御装置および制御方法
JP2015001807A (ja) * 2013-06-14 2015-01-05 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007264997A (ja) * 2006-03-28 2007-10-11 Toyota Motor Corp 分散制御装置
JP2013097719A (ja) * 2011-11-04 2013-05-20 Toyota Motor Corp 制御装置および制御方法
JP2015001807A (ja) * 2013-06-14 2015-01-05 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Also Published As

Publication number Publication date
DE102017222292A1 (de) 2018-08-02
JP6690570B2 (ja) 2020-04-28

Similar Documents

Publication Publication Date Title
US10296316B2 (en) Parallelization method, parallelization tool, and in-vehicle apparatus
JP6464982B2 (ja) 並列化方法、並列化ツール、車載装置
JP2010009495A (ja) 情報処理装置、プログラム処理方法及びコンピュータプログラム
WO2020121840A1 (ja) 演算制御装置
US20170039091A1 (en) Vehicle Control Apparatus
JP2008158759A (ja) プログラミング方法、プログラム処理方法、処理プログラム及び情報処理装置
CA2433379A1 (en) Modulo scheduling of multiple instruction chains
JP2017228029A (ja) 並列化方法、並列化ツール、車載装置
JP6427055B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP4840605B2 (ja) Osの起動方法
US10255119B2 (en) Parallelization method, parallelization tool and vehicle-mounted device
JP6690570B2 (ja) 並列化方法、並列化ツール、車載制御装置
JP5614699B2 (ja) マルチコアシステムのためのタスク割り当て関連方法、その装置、そのシステム、及びそのプログラム
JP6428557B2 (ja) 並列化方法、並列化ツール
JP6617511B2 (ja) 並列化方法、並列化ツール、車載装置
WO2019188175A1 (ja) デッドロック回避方法、デッドロック回避装置
Jahr et al. Model-based parallelization and optimization of an industrial control code
JP6933001B2 (ja) 並列化方法、並列化ツール
JP6488953B2 (ja) 並列化方法、並列化ツール、車載装置
JP6558310B2 (ja) 並列化方法、並列化ツール
JP2021039666A (ja) コア割当装置及びコア割当方法
JPWO2018198745A1 (ja) 計算資源管理装置、計算資源管理方法、及びプログラム
JP7441861B2 (ja) 演算装置及び検査方法
US10379828B2 (en) Parallelization method, parallelization tool, and in-vehicle device
JP2009169862A (ja) プログラム変換装置、方法、プログラムおよび記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190404

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200227

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200310

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200323

R151 Written notification of patent or utility model registration

Ref document number: 6690570

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250