(57)【要約】【課題】ロジックの管理が容易で、制御ロジック実行時における処理負荷の増加を抑制可能な並列プログラムを生成できる並列化方法、並列化ツール、及びデッドロック状態になることが抑制された車載制御装置。【解決手段】コンピュータは、異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に状態フラグをセットする状態セット処理と、状態フラグがセットされたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する（Ｓ１１、Ｓ１２）。また、コンピュータは、並列プログラムが実行される前に完了状態が記憶されているか否かを監視する同期監視処理と、完了状態が記憶されていない場合に実行される同期フェイルセーフ処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する（Ｓ１３、Ｓ１４）。【選択図】図３
2018124876.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）から、複数の前記処理を並列化した、マルチコアマイコンにおける複数の前記コアが実行可能な並列プログラムを生成する並列化方法であって、
複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理を、前記並列プログラムに挿入する記憶処理挿入手順（Ｓ１１）と、
異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を、前記並列プログラムに挿入する待ち処理挿入手順（Ｓ１２）と、
前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理を、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入手順（Ｓ１３）と、
前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、前記制御外プログラムに挿入するフェイルセーフ処理挿入手順（Ｓ１４）と、を備えた並列化方法。
【請求項２】
前記記憶処理挿入手順は、複数の前記記憶処理を前記並列プログラムに挿入し、
前記待ち処理挿入手順は、複数の前記待ち処理を前記並列プログラムに挿入し、
前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を、前記制御外プログラムに挿入する特定処理挿入手順（Ｓ１３１）を備えた請求項１に記載の並列化方法。
【請求項３】
前記フェイルセーフ処理挿入手順では、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を、前記制御外プログラムに挿入する請求項２に記載の並列化方法。
【請求項４】
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）から、複数の前記処理を並列化した、マルチコアマイコンにおける複数の前記コアが実行可能な並列プログラムを生成する、コンピュータを含む並列化ツールであって、
複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理を、前記並列プログラムに挿入する記憶処理挿入部（Ｓ１１）と、
異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理を、前記並列プログラムに挿入する待ち処理挿入部（Ｓ１２）と、
前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理を、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入部（Ｓ１３）と、
前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、前記制御外プログラムに挿入するフェイルセーフ処理挿入部（Ｓ１４）と、を備えた並列化ツール。
【請求項５】
前記記憶処理挿入部は、複数の前記記憶処理を前記並列プログラムに挿入し、
前記待ち処理挿入部は、複数の前記待ち処理を前記並列プログラムに挿入し、
前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を、前記制御外プログラムに挿入する特定処理挿入部（Ｓ１３１）を備えた請求項４に記載の並列化ツール。
【請求項６】
前記フェイルセーフ処理挿入部では、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を、前記制御外プログラムに挿入する請求項５に記載の並列化ツール。
【請求項７】
複数のコア（２１ｃ，２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）が並列化され複数の前記コアが実行可能な並列プログラム（２１ａ１）と、を備えた車載制御装置であって、
複数の前記処理は、異なる前記コアに割り振られた、実行順序が先である先行処理と、前記先行処理の実行が完了した後に実行させる後行処理とを含み、
前記並列プログラムは、
異なる前記コア間で前記実行順序を維持するために、前記先行処理の実行が完了した際に完了状態を記憶する記憶処理と、
異なる前記コア間で前記実行順序を維持するために、前記完了状態が記憶されるのを待って、前記完了状態が記憶されたことを条件に前記後行処理の実行に移行させる待ち処理と、を含み、
さらに、複数の前記コアが実行可能な前記並列プログラムとは異なる制御外プログラムを備えており、
前記制御外プログラムは、
前記並列プログラムが実行される前に前記完了状態が記憶されているか否かを監視する監視処理と、
前記完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理と、を含み、
前記マルチコアマイコンは、各コアが前記並列プログラムと前記制御外プログラムを実行する車載制御装置。
【請求項８】
前記並列プログラムは、複数の前記記憶処理と、複数の前記待ち処理とを含んでおり、
前記制御外プログラムは、前記完了状態が記憶されていないことが検出された場合に、前記完了状態が記憶されていない前記記憶処理を特定する特定処理を含んでいる請求項７に記載の車載制御装置。
【請求項９】
前記制御外プログラムは、前記特定処理にて特定された前記記憶処理毎に実行される前記フェイルセーフ処理を含んでいる請求項８に記載の車載制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成されたマルチコアマイコン用のプログラムを実装した車載制御装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用にプログラムから、マルチコアマイコン用のプログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプロセッサシステムにより実行される組込みシステム用の逐次プログラムを複数のマクロタスクに分割した後、制御依存性を有するマクロタスクを一つのマクロタスクに融合する。その後、並列化コンパイル方法では、データ依存性に基づき並列実行可能なマクロタスクを抽出すると共に、スタティックスケジューリングを行い、並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、並列化方法では、並列化解析後、各コアへの通常処理の割り付けと、演算順序を維持するための同期処理を挿入することが考えられる。この同期処理としては、通常処理が完了したことを示す変数をセットする状態セットと、他コアにおいて変数がセットされることを待って自コアの通常処理に移行する待ち処理とを含む。
【０００６】
しかしながら、この変数は、ノイズなどによって、意図せず変わってしまうことも考えられる。このように変数が変わってしまった場合、マルチコアマイコンでは、少なくとも一つのコアにおいて、待ち処理が継続して、通常処理が実行できないデッドロックになってしまう。
【０００７】
このため、デッドロックを抑制する方法としては、従来技術ではないが、意図せず変わってしまった変数を元に戻す処理などのフェイルセーフ処理を、並列プログラムに挿入することが考えられる。この場合、並列プログラムは、シングルコアマイコン用のプログラムに相当する制御ロジックと、デッドロック状態を抑制するためのフェイルセーフロジックとを含んだロジック群となる。よって、上記方法で生成された並列プログラムは、並列プログラムを実行するコアにおける制御ロジックの管理が複雑で、制御ロジックを実行する際のコアの処理負荷が増加する並列プログラムになるという問題がある。
【０００８】
本開示は、上記問題点に鑑みなされたものであり、ロジックの管理が容易で、制御ロジック実行時における処理負荷の増加を抑制可能な並列プログラムを生成できる並列化方法、並列化ツール、及びデッドロック状態になることが抑制された車載制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために本開示は、
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）から、複数の処理を並列化した、マルチコアマイコンにおける複数のコアが実行可能な並列プログラムを生成する並列化方法であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理を、並列プログラムに挿入する記憶処理挿入手順（Ｓ１１）と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する待ち処理挿入手順（Ｓ１２）と、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入手順（Ｓ１３）と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、制御外プログラムに挿入するフェイルセーフ処理挿入手順（Ｓ１４）と、を備えていることを特徴とする。
【００１０】
このように、本開示は、シングルプログラムにおける並列可能な複数の処理から、複数の処理を並列化した、複数のコアが実行可能な並列プログラムを生成する。そして、本開示は、先行処理の実行が完了した際に完了状態を記憶する記憶処理と、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理とを並列プログラムに挿入する。よって、本開示は、シングルコアマイコンが実行する制御用のシングルプログラムに相当する制御ロジックを含んだ並列プログラムを生成できる。
【００１１】
また、本開示は、並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理と、完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理とを、並列プログラムとは異なる制御外プログラムに挿入する。このため、本開示は、並列プログラムとは別に、監視ロジックとフェイルセーフロジックとを含む制御外プログラムを生成できる。よって、本開示は、意図せずに完了状態の記憶内容が変わってしまった場合、複数のコアにフェイルセーフ処理を実行させる制御外プログラムを生成できる。
【００１２】
従って、複数のコアは、並列プログラムを実行する際に、制御外プログラムを実行する必要がなく、制御ロジックの管理と、監視ロジックやフェイルセーフロジックの管理とを別に行える。よって、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易な並列プログラムを生成できる。また、本開示は、複数のコアが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラムを生成できる。
【００１３】
また、本開示のさらなる特徴は、
コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）から、複数の処理を並列化した、マルチコアマイコンにおける複数のコアが実行可能な並列プログラムを生成する、コンピュータを含む並列化ツールであって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理を、並列プログラムに挿入する記憶処理挿入部（Ｓ１１）と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理を、並列プログラムに挿入する待ち処理挿入部（Ｓ１２）と、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理を、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムに挿入する監視処理挿入部（Ｓ１３）と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理を、制御外プログラムに挿入するフェイルセーフ処理挿入部（Ｓ１４）と、を備えた並列化ツール。
【００１４】
このように、本開示では、上記並列化方法と同様に、並列プログラムを生成できる。よって、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易で、複数のコアが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラムを生成できる。
【００１５】
また、本開示のさらなる特徴は、
複数のコア（２１ｃ，２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコンが実行する制御用のシングルプログラムにおける並列可能な複数の処理（Ｔ１〜Ｔ５、Ｔ７〜Ｔ１１）が並列化され複数のコアが実行可能な並列プログラム（２１ａ１）と、を備えた車載制御装置であって、
複数の処理は、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含み、
並列プログラムは、
異なるコア間で実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する記憶処理と、
異なるコア間で実行順序を維持するために、完了状態が記憶されるのを待って、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理と、を含み、
さらに、複数のコアが実行可能な並列プログラムとは異なる制御外プログラムを備えており、
制御外プログラムは、
並列プログラムが実行される前に完了状態が記憶されているか否かを監視する監視処理と、
完了状態が記憶されていないことが検出された場合に実行されるフェイルセーフ処理と、を含み、
マルチコアマイコンは、各コアが並列プログラムと制御外プログラムを実行することを特徴とする。
【００１６】
このように、本開示は、マルチコアマイコンと、上記のように生成された並列プログラムと制御外プログラムを備えている。そして、マルチコアマイコンは、各コアが並列プログラムと制御外プログラムを実行する。このため、本開示は、意図せず完了状態の記憶内容が変わってしまった場合に、フェイルセーフ処理を実行できる。また、本開示は、並列プログラムに制御外プログラムが含まれている場合よりも、ロジックの管理が容易で、複数のコアが制御ロジックを実行する際における処理負荷の増加が抑制可能である。
【００１７】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１８】
【図１】実施形態における並列化ツールの概略構成を示すブロック図である。
【図２】実施形態における車載制御装置の概略構成を示すブロック図である。
【図３】実施形態におけるコンピュータの処理動作を示すフローチャートである。
【図４】実施形態における並列プログラムを示すイメージ面である。
【図５】実施形態における車載制御装置の処理動作を示すフローチャートである。
【図６】実施形態における車載制御装置の処理動作を示すタイムチャートである。
【図７】実施形態におけるコンピュータの処理動作を示すフローチャートである。
【図８】変形例における車載制御装置の処理動作を示すフローチャートである。
【発明を実施するための形態】
【００１９】
以下において、図面を参照しながら、発明を実施するための形態を説明する。
【００２０】
本実施形態では、一つのコアを有するシングルコアマイコン用のシングルプログラムにおける並列可能な複数の処理を第１コア２１ｃと第２コア２１ｄを有するマルチコアマイコン用に並列化した並列プログラム２１ａ１を生成するコンピュータ１０を採用する。さらに、本実施形態のコンピュータ１０は、並列プログラム２１ａ１に加えて、第１コア２１ｃと第２コア２１ｄが実行可能な並列プログラム２１ａ１とは異なる制御外プログラム２１ａ２を生成する。よって、コンピュータ１０は、並列プログラム２１ａ１と制御外プログラム２１ａ２を含むプログラム２１ａ３を生成すると言える。
【００２１】
なお、並列プログラム２１ａ１を生成する際には、特開２０１５−１８０７号公報に記載されているように、シングルプログラムを解析して、複数の処理を第１コア２１ｃと第２コア２１ｄに割り振る処理などを行う。この点に関しては、特開２０１５−１８０７号公報を参照して適用できる。
【００２２】
以下においては、処理を処理ブロックとも称する。本実施形態では、複数の処理ブロックとして、図４に示すように、第１処理ブロックＴ１〜第５処理ブロックＴ５、第６処理ブロックＴ６〜第１１処理ブロックＴ１１を採用する。また、複数の処理ブロックは、異なるコアに割り振られた、実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。例えば、第１処理ブロックＴ１と第８処理ブロックＴ８とは、第１処理ブロックＴ１が先行処理であり、第８処理ブロックＴ８が後行処理である。また、第３処理ブロックＴ３と第８処理ブロックＴ８とは、第８処理ブロックＴ８が先行処理であり、第３処理ブロックＴ３が後行処理である。
【００２３】
まず、コンピュータ１０と、車載制御装置２０の構成に関して説明する。コンピュータ１０は、並列化手順を実行する並列化ツールに相当する。また、コンピュータ１０は、並列プログラム２１ａ１と制御外プログラム２１ａ２を含むプログラム２１ａ３を生成するため、プログラム生成ツールとも言える。図１に示すように、コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。記憶媒体１８には、自動並列化コンパイラ１が記憶されている。コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照して適用できる。
【００２４】
自動並列化コンパイラ１は、並列化方法に相当する。つまり、自動並列化コンパイラ１は、並列化手順、言い換えると並列化方法が記述されたプログラムである。コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１と制御外プログラム２１ａ２を含むプログラム２１ａ３を生成する。このため、自動並列化コンパイラ１は、プログラム生成方法とも言える。
【００２５】
自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものを参照して適用できる。特に、自動並列化コンパイラ１は、状態セット処理の挿入手順、待ち処理の挿入手順、同期監視処理の挿入手順、同期フェイルセーフ処理の挿入手順を含んでいる。
【００２６】
状態セット処理の挿入手順は、状態セット処理Ｆ０〜Ｆ２，Ｆ４〜Ｆ６を並列プログラム２１ａ１に挿入する手順である。状態セット処理Ｆ０〜Ｆ２，Ｆ４〜Ｆ６は、異なるコア間、すなわち第１コア２１ｃと第２コア２１ｄとで実行順序を維持するために、先行処理の実行が完了した際に完了状態を記憶する処理である。つまり、状態セット処理の挿入手順は、コア２１ｃ，２１ｄが先行処理の実行を完了した際に、コア２１ｃ，２１ｄに状態セット処理を実行させるためである。なお、状態セット処理は、完了状態の記憶処理に相当する。よって、状態セット処理の挿入手順は、記憶処理挿入手順に相当する。
【００２７】
ここでは、完了状態の記憶方法として状態フラグＡ１、Ａ３、Ａ６、Ｂ８、Ｂ１０、Ｂ１１を採用している。各状態フラグは、１がセットされている場合に完了状態を示し、１がセットされていない場合、すなわち０の場合に完了状態でないこと（未完了状態）を示す。このように、車載制御装置２０は、複数の先行処理のそれぞれに対応して状態フラグをセットできるように構成されている。なお、状態フラグのセットは、完了状態の記憶と同意である。
【００２８】
第１状態フラグＡ１は、第１処理ブロックＴ１に対応しており、第１処理ブロックＴ１が完了すると第１状態セット処理Ｆ１で１がセットされ未完了状態の場合に０とされる。第３状態フラグＡ３は、第３処理ブロックＴ３に対応しており、第３処理ブロックＴ３が完了すると第２状態セット処理Ｆ２で１がセットされ未完了状態の場合に０とされる。第８状態フラグＢ８は、第８処理ブロックＴ８に対応しており、第８処理ブロックＴ８が完了すると第５状態セット処理Ｆ５で１がセットされ未完了状態の場合に０とされる。第１０状態フラグＢ１０は、第１０処理ブロックＴ１０に対応しており、第１０処理ブロックＴ１０が完了すると第６状態セット処理Ｆ６で１がセットされ未完了状態の場合に０とされる。
【００２９】
なお、状態フラグＡＡは、第１コア２１ｃの全状態フラグの状態を示すものであり、１がセットされている場合に状態フラグＡ１〜Ａ６の全てが完了状態であることを示し、０の場合に状態フラグＡ１〜Ａ６の全てが未完了状態であることを示す。状態フラグＡＡは、１がセットされている場合、第０状態セット処理Ｆ０でリセットされて０とされる。
【００３０】
一方、状態フラグＢＡは、第２コア２１ｄの全状態フラグの状態を示すものであり、１がセットされている場合に状態フラグＢ８〜Ｂ１１の全てが完了状態であることを示し、０の場合に状態フラグＢ８〜Ｂ１１の全てが未完了状態であることを示す。状態フラグＢＡは、１がセットされている場合に第４状態セット処理Ｆ４でリセットされて０とされる。
【００３１】
待ち処理の挿入手順は、待ち処理Ｗ１、Ｗ２、Ｗ４、Ｗ５を並列プログラム２１ａ１に挿入する手順である。待ち処理Ｗ１、Ｗ２、Ｗ４、Ｗ５は、第１コア２１ｃと第２コア２１ｄとで実行順序を維持するために、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させる処理である。つまり、待ち処理Ｗ１、Ｗ２、Ｗ４、Ｗ５の挿入手順は、コア２１ｃ，２１ｄに対して、状態フラグがセットされるのを待って、状態フラグがセットされたことを条件に後行処理の実行に移行させるためである。この待ち処理の挿入手順は、待ち処理挿入手順に相当する。本実施形態では、図４に示すように、待ち処理をwhile文、例えばwhile(B8=0)で表している。
【００３２】
第１待ち処理Ｗ１は、第８状態フラグＢ８に対応しており、第８状態フラグＢ８＝０であるか否かの判定を繰り返して第８状態フラグＢ８＝１になったことを条件に後行処理である第３処理ブロックＴ３の実行に移行させる処理である。第２待ち処理Ｗ２は、第１０状態フラグＢ１０に対応しており、第１０状態フラグＢ１０＝０であるか否かの判定を繰り返して第１０状態フラグＢ１０＝１になったことを条件に後行処理である第５処理ブロックＴ５の実行に移行させる処理である。
【００３３】
第４待ち処理Ｗ４は、第１状態フラグＡ１に対応しており、第１状態フラグＡ１＝０であるか否かの判定を繰り返して第１状態フラグＡ１＝１になったことを条件に後行処理である第８処理ブロックＴ８の実行に移行させる処理である。第５待ち処理Ｗ５は、第３状態フラグＡ３に対応しており、第３状態フラグＡ３＝０であるか否かの判定を繰り返して第３状態フラグＡ３＝１になったことを条件に後行処理である第１０処理ブロックＴ１０の実行に移行させる処理である。
【００３４】
同期監視処理の挿入手順は、並列プログラム２１ａ１が実行される前に状態フラグがセットされているか否かを監視する監視処理を、制御外プログラム２１ａ２に挿入する手順である。つまり、同期監視処理の挿入手順は、コア２１ｃ，２１ｄに対して、並列プログラム２１ａ１を実行する前に状態フラグが全て１となっているか否かを監視する監視処理を実行させるためである。言い換えると、同期監視処理の挿入手順は、コア２１ｃ，２１ｄに対して、並列プログラム２１ａ１を実行する前に状態フラグが全て１となっていることを確認させるためである。この同期監視処理の挿入手順は、監視処理挿入手順に相当する。なお、制御外プログラム２１ａ２に関しては後程説明する。
【００３５】
同期フェイルセーフ処理の挿入手順は、同期監視処理にていずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理を、制御外プログラム２１ａ２に挿入する手順である。つまり、同期フェイルセーフ処理の挿入手順は、コア２１ｃ，２１ｄに対して、同期監視処理にていずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理を実行させるためである。この同期フェイルセーフ処理の挿入手順は、フェイルセーフ処理挿入手順に相当する。
【００３６】
なお、同期フェイルセーフ処理は、例えば、タスクのリセットや、マルチコアプロセッサ２１のリセットや、退避動作モードや、車両の動作状態を示す車両情報のリセットなどを含む。タスクのリセットとは、第１コア２１ｃと第２コア２１ｄが実行するタスクを最初から実行する処理である。マルチコアプロセッサ２１のリセットとは、マルチコアプロセッサ２１のＲＡＭ２１ｂやレジスタをリセットする処理である。退避動作モードとは、第１コア２１ｃと第２コア２１ｄに、並列プログラム２１ａ１を実行させるのではなく、第１コア２１ｃと第２コア２１ｄに、車両を退避走行させる処理を実行させるモードである。車両情報のリセットとは、第１コア２１ｃと第２コア２１ｄが並列プログラム２１ａ１を実行する際に参照したり書き込みしたりする車両の情報（変数）を、リセットする処理である。
【００３７】
また、本実施形態では、コア２１ｃ、２１ｄの処理を同時に完了させるための同期処理として、並列プログラム２１ａ１の最後に、状態セット処理と待ち処理を挿入する手順を有した自動並列化コンパイラ１を採用している。一例として、自動並列化コンパイラ１では、図４に示すように、第３状態セット処理Ｆ３と第３待ち処理Ｗ３、及び第７状態セット処理Ｆ７と第６待ち処理Ｗ６を挿入する手順を採用している。これによって、自動並列化コンパイラ１は、第１コア２１ｃと第２コア２１ｄが同時に処理を完了可能な並列プログラム２１ａ１を生成できる。なお、第３状態セット処理Ｆ３と第３待ち処理Ｗ３、及び第７状態セット処理Ｆ７と第６待ち処理Ｗ６は、コア２１ｃ、２１ｄのタスクを同時に完了させるための処理と言える。
【００３８】
第６状態フラグＡ６は、第５処理ブロックＴ５に対応しており、第５処理ブロックＴ５が完了すると第３状態セット処理Ｆ３で１がセットされ未完了状態の場合に０とされる。第１１状態フラグＢ１１は、第１１処理ブロックＴ１１に対応しており、第１１処理ブロックＴ１１が完了すると第７状態セット処理Ｆ７で１がセットされ未完了状態の場合に０とされる。
【００３９】
第３待ち処理Ｗ３は、第１１状態フラグＢ１１に対応しており、第１１状態フラグＢ１１＝０であるか否かの判定を繰り返して第１１状態フラグＢ１１＝１になったことを条件に処理を完了する処理である。第６待ち処理Ｗ６は、第６状態フラグＡ６に対応しており、第６状態フラグＡ６＝０であるか否かの判定を繰り返して第６状態フラグＡ６＝１になったことを条件に処理を完了する処理である。
【００４０】
コンピュータ１０は、自動並列化コンパイラ１を実行することで、図４に示すような、各コア２１ｃ、２１ｄに対応した制御ロジック群を含む並列プログラム２１ａ１を生成する。制御ロジック群には、シングルコアマイコンが実行する制御用のシングルプログラムに相当する複数の制御ロジックを含んでいる。
【００４１】
さらに、コンピュータ１０は、自動並列化コンパイラ１を実行することで、図４のタスク起床処理などで実行される、同期監視処理や同期フェイルセーフ処理を含んだ制御外プログラム２１ａ２を生成する。制御外プログラム２１ａ２は、監視ロジックとフェイルセーフロジックを含んでいると言える。よって、このように、並列プログラム２１ａ１は、複数の制御ロジックを含んでいるものの、制御外プログラム２１ａ２に含まれる監視ロジックとフェイルセーフロジックを含んでいないと言える。
【００４２】
車載制御装置２０は、図２に示すように、マルチコアプロセッサ２１、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄ、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。車載制御装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載制御装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。なお、マルチコアプロセッサは、マルチコアマイコンに相当する。また、コアは、プロセッサエレメントとも称することができる。
【００４３】
ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０．通信部４３０、センサ部４５０、入出力ポート４６０を参照して適用できる。
【００４４】
ＲＯＭ２１ａには、第１コア２１ｃと第２コア２１ｄとが実行可能なプログラム２１ａ３が記憶されている。また、プログラム２１ａ３には、並列化方法で生成された並列プログラム２１ａ１が含まれている。第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御などを行う。言い換えると、第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１に従って制御ロジックを実行することで、エンジン制御などを行う。
【００４５】
さらに、プログラム２１ａ３には、並列プログラム２１ａ１とは異なる、並列化方法で生成された制御外プログラム２１ａ２が含まれている。第１コア２１ｃと第２コア２１ｄは、制御外プログラム２１ａ２を実行する。
【００４６】
なお、本実施形態では、マルチコアプロセッサ２１が車載制御装置２０に搭載された例を採用している。しかしながら、本発明は、これに限定されず、マルチコアプロセッサ２１が、車載制御装置２０とは異なる機器、例えばパソコンなどに搭載されていてもよい。
【００４７】
次に、図３、図４を用いて、コンピュータ１０の処理動作に関して説明する。ＣＰＵ１３は、例えば入力装置１６によって挿入処理の実行指示がなされた場合に、図３に示すフローチャートを実行する。ＣＰＵ１３は、自動並列化コンパイラ１を実行することで、シングルプログラムから並列プログラム２１ａ１と制御外プログラム２１ａ２を含むプログラム２１ａ３を生成する。ＣＰＵ１３は、特開２０１５−１８０７号公報に記載された手順に従って並列プログラム２１ａ１を生成する際に、下記のステップＳ１１〜Ｓ１４を実行する。
【００４８】
ステップＳ１１では、状態セット処理の挿入を行う。ＣＰＵ１３は、自動並列化コンパイラ１における状態セット処理の挿入手順を実行する。つまり、ＣＰＵ１３は、状態セット処理Ｆ０〜Ｆ２，Ｆ４〜Ｆ６を並列プログラム２１ａ１に挿入する。本実施形態では、図４に示すように、例えば、第１処理ブロックＴ１の後に第１状態セット処理Ｆ１、第８処理ブロックＴ８の後に第８状態セット処理Ｆ８を挿入する。このように、コンピュータ１０は、機能ブロックとして、状態セット処理の挿入を行うブロックを備えている。よって、ステップＳ１１は、記憶処理挿入部に相当すると言える。なお、ＣＰＵ１３は、ステップＳ１１において、第３状態セット処理Ｆ３、第７状態セット処理Ｆ７を並列プログラム２１ａ１に挿入してもよい。
【００４９】
なお、本実施形態では、ステップＳ１１において、複数の状態セット処理Ｆ０〜Ｆ２，Ｆ４〜Ｆ６を並列プログラム２１ａ１に挿入する例を採用している。しかしながら、本発明は、これに限定されず、一つの状態セット処理を並列プログラム２１ａ１に挿入するものであっても採用できる。
【００５０】
ステップＳ１２では、待ち処理の挿入を行う。ＣＰＵ１３は、自動並列化コンパイラ１における待ち処理の挿入手順を実行する。つまり、ＣＰＵ１３は、待ち処理Ｗ１、Ｗ２、Ｗ４、Ｗ５を並列プログラム２１ａ１に挿入する。本実施形態では、図４に示すように、例えば、第８処理ブロックＴ８の前に第４待ち処理Ｗ４、第３処理ブロックＴ３の前に第１待ち処理Ｗ１を挿入する。このように、コンピュータ１０は、機能ブロックとして、待ち処理の挿入を行うブロックを備えている。よって、ステップＳ１２は、待ち処理挿入部に相当すると言える。なお、ＣＰＵ１３は、ステップＳ１２において、第３待ち処理Ｗ３、第６待ち処理Ｗ６を並列プログラム２１ａ１に挿入してもよい。
【００５１】
ステップＳ１３では、同期監視処理の挿入を行う。ＣＰＵ１３は、自動並列化コンパイラ１における同期監視処理の挿入手順を実行する。つまり、ＣＰＵ１３は、同期監視処理を制御外プログラム２１ａ２に挿入する。このように、コンピュータ１０は、機能ブロックとして、同期監視処理の挿入を行うブロックを備えている。よって、ステップＳ１３は、監視処理挿入部に相当すると言える。
【００５２】
ステップＳ１４では、同期フェイルセーフ処理の挿入を行う。ＣＰＵ１３は、自動並列化コンパイラ１における同期フェイルセーフ処理の挿入手順を実行する。つまり、ＣＰＵ１３は、同期フェイルセーフ処理を制御外プログラム２１ａ２に挿入する。このように、コンピュータ１０は、機能ブロックとして、同期フェイルセーフ処理の挿入を行うブロックを備えている。よって、ステップＳ１４は、フェイルセーフ処理挿入部に相当すると言える。
【００５３】
このように、本実施形態では、コンピュータ１０が、ステップＳ１１〜Ｓ１４を実行することで、並列プログラム２１ａ１と制御外プログラム２１ａ２を生成する。生成された並列プログラム２１ａ１の一例を図４に示す。この例では、第１コア２１ｃに第１処理ブロックＴ１、第２処理ブロックＴ２、第３処理ブロックＴ３、第４処理ブロックＴ４、第５処理ブロックＴ５が割り振られている。一方、第２コア２１ｄには、第７処理ブロックＴ７、第８処理ブロックＴ８、第９処理ブロックＴ９、第１０処理ブロックＴ１０、第１１処理ブロックＴ１２が割り振られている。
【００５４】
また、並列プログラム２１ａ１では、第１処理ブロックＴ１の後や第８処理ブロックＴ８の後などに、第１状態セット処理Ｆ１や第５状態セット処理Ｆ５などが挿入されている。さらに、並列プログラム２１ａ１では、第３処理ブロックＴ３の前や第８処理ブロックＴ８の前などに、第１待ち処理Ｗ１や第４待ち処理Ｗ４などが挿入されている。
【００５５】
また、生成された制御外プログラム２１ａ２は、状態フラグが全て１となっているか否かを監視する監視処理や、いずれかの状態フラグがセットされていないことが検出された場合に実行される同期フェイルセーフ処理などを含んでいる。
【００５６】
なお、本発明はこれに限定されない。作業者などが、特開２０１５−１８０７号公報に記載された並列化方法に加えて、ステップＳ１１〜Ｓ１４を行うことで、並列プログラム２１ａ１と制御外プログラム２１ａ２を生成してもよい。
【００５７】
次に、図４、図５、図６を用いて、第１コア２１ｃ及び第２コア２１ｄの処理動作に関して説明する。第１コア２１ｃと第２コア２１ｄは、所定時間毎にタスク起床処理を行い、タスク起床すると、タスク起床処理を行った後に図４に示す各自に割り振られた処理を実行する。
【００５８】
また、第１コア２１ｃと第２コア２１ｄのそれぞれは、タスク起床処理において、つまり、並列プログラム２１ａ１を実行する前に制御外プログラム２１ａ２を実行する。第１コア２１ｃと第２コア２１ｄは、タスク起床処理において、図５のフローチャートに示す処理を実行する。よって、制御外プログラム２１ａ２は、ステップＳ２１〜Ｓ２５の処理を含んでいるとみなせる。
【００５９】
なお、コア２１ｃ、２１ｄは、同期フェイルセーフ処理の内容によっては、制御外プログラム２１ａ２を実行して状態フラグのいずれかが０であった場合、並列プログラム２１ａ１を実行することなく同期フェイルセーフ処理を実行することもある。第１コア２１ｃと第２コア２１ｄは、例えば退避動作モードが設定されていると、状態フラグのいずれかが０であった場合、並列プログラム２１ａ１を実行することなく退避動作モードに対応して、車両を退避走行させる処理を実行する。
【００６０】
図６では、第１コア２１ｃと第２コア２１ｄの処理動作を示すタイムチャートであり、複数の状態フラグのうち、第１状態フラグＡ１のみを図示している。また、図６では、タイミングｔｉ０でタスク起床処理の実行を開始して同期フェイルセーフ処理を行う必要がなくタイミングｔｉ１でタスク起床し、タイミングｔｉ０から所定時間後のタイミングｔｉ６で次のタスク起床処理を実行する例を採用している。そして、図６では、タイミングｔｉ６でタスク起床処理の実行を開始して、タイミングｔｉ７で同期フェイルセーフ処理を行い、タイミングｔｉ８でタスク起床する例を採用している。
【００６１】
また、図６では、タイミングｔｉ３で、第１状態フラグＡ１の値が意図せずに変わってしまったことで、第４待ち処理Ｗ４の待ち状態が継続（デッドロック）し、これに伴って第１待ち処理Ｗ１がデッドロックした例を採用している。つまり、第１コア２１ｃでは、タイミングｔｉ５からの第１待ち処理Ｗ１でデッドロックしている。第２コア２１ｄでは、タイミングｔｉ４からの第４待ち処理Ｗ４でデッドロックしている。
【００６２】
ステップＳ２１では、前回起床のタスク終了か否かを判定する。第１コア２１ｃと第２コア２１ｄは、タイミングｔｉ０の直後やタイミングｔｉ６の直後に示すように、前回起床のタスク終了か否かを判定する。第１コア２１ｃと第２コア２１ｄは、前回起床したタスクが終了しているか否かを判定し、タスクが終了していると判定した場合はステップＳ２５へ進み、終了していないと判定した場合はステップＳ２２へ進む。
【００６３】
例えば、第１コア２１ｃと第２コア２１ｄは、第１１状態フラグＢ１１に１がセットされ、第６状態フラグＡ６に１がセットされていると前回起床したタスクが終了していると判定する。一方、第１コア２１ｃと第２コア２１ｄは、第１１状態フラグＢ１１と第６状態フラグＡ６のいずれかに１がセットされていないと前回起床したタスクが終了していないと判定する。
【００６４】
ステップＳ２５では、タスク起床する。第１コア２１ｃと第２コア２１ｄは、タスク起床して、タイミングｔｉ１やタイミングｔｉ８に示すように、並列プログラム２１ａ１の実行を開始する。
【００６５】
ステップＳ２２では、状態フラグのいずれかが０であるか否かを判定する。第１コア２１ｃと第２コア２１ｄは、状態フラグＡ１、Ａ３、Ｂ８、Ｂ１０のいずれかが０であるか否かを判定する。つまり、第１コア２１ｃと第２コア２１ｄは、処理ブロックのいずれかが未完了であるか否かを判定する。なお、第１コア２１ｃと第２コア２１ｄは、ステップＳ２２で第６状態フラグＡ６、第１１状態フラグＢ１１を含めて、いずれかが０であるか否かを判定してもよい。
【００６６】
そして、第１コア２１ｃと第２コア２１ｄは、全ての状態フラグに１がセットされていると判定した場合、全ての処理ブロックが完了しているとみなしてステップＳ２３へ進む。一方、第１コア２１ｃと第２コア２１ｄは、いずれか一つでも状態フラグが０であると判定した場合、少なくとも一つの処理ブロックが完了していないとみなしてステップＳ２４へ進む。図６の場合、第１コア２１ｃと第２コア２１ｄは、タイミングｔｉ６〜ｔｉ８のタスク起床処理におけるステップＳ２２でＹＥＳ判定する。
【００６７】
ステップＳ２４では、同期フェイルセーフ処理を実行する。第１コア２１ｃと第２コア２１ｄは、タイミングｔｉ６〜ｔｉ８のタスク起床処理内におけるタイミングｔｉ７で同期フェイルセーフ処理を実行する。なお、第１コア２１ｃと第２コア２１ｄは、タイミングｔｉ７の同期フェイルセーフ処理で、例えばタスクのリセットを行う。よって、第１コア２１ｃと第２コア２１ｄは、タイミングｔｉ８以降に示すように、並列プログラム２１ａ１を実行する。
【００６８】
ステップＳ２３では、タスク起床時のフェイルセーフを実行する。タスク起床時のフェイルセーフは、同期フェイルセーフ処理と異なるフェイルセーフであり、特に限定されない。第１コア２１ｃと第２コア２１ｄのそれぞれは、ステップＳ２３が終了すると、ステップＳ２５と同様にタスク起床する。
【００６９】
なお、本実施形態では、タスク起床処理で制御外プログラム２１ａ２を実行するため、ステップＳ２１、Ｓ２５を含む制御外プログラム２１ａ２を採用している。しかしながら、本発明は、これに限定されず、ステップＳ２２、Ｓ２４を含む制御外プログラム２１ａ２であれば採用できる。
【００７０】
第１コア２１ｃと第２コア２１ｄは、タスク起床処理が終了すると、図４の並列プログラム２１ａ１における自身に割り振られた処理を上から順番に実行する。第１コア２１ｃは、タイミングｔｉ１で第０状態セット処理Ｆ０を実行してＡＡ＝０とする。つまり、第１コア２１ｃは、状態フラグＡ１、Ａ３、Ａ６をリセット、すなわち０とする。第２コア２１ｄは、タイミングｔｉ１で第４状態セット処理Ｆ４を実行してＢＡ＝０とする。つまり、第２コア２１ｄは、状態フラグＢ８、Ｂ１０、Ｂ１１をリセット、すなわち０とする。
【００７１】
その後、第１コア２１ｃは、第１処理ブロックＴ１を実行し、第１処理ブロックＴ１の実行が完了すると、第１状態セット処理Ｆ１を実行して第１状態フラグＡ１に１をセットする。第１コア２１ｃは、第１状態フラグＡ１に１をセットした後、第２処理ブロックＴ２を実行する。しかしながら、本実施形態では、第１状態フラグＡ１が、タイミングｔｉ３で、ノイズなどによって意図せずリセットされる例を採用している。つまり、マルチコアプロセッサ２１は、第１状態フラグＡ１の値が１から０になってしまう。
【００７２】
一方、第２コア２１ｄは、ＢＡ＝０とした後、第７処理ブロックＴ７を実行する。そして、第２コア２１ｄは、第７処理ブロックＴ７の実行が完了すると、タイミングｔｉ４で第４待ち処理Ｗ４を実行して、第１状態フラグＡ１が１になるまでループする。
【００７３】
ところが、第１状態フラグＡ１は、タイミングｔｉ３でリセットされて０となっており、第１処理ブロックＴ１が完了しているにもかかわらず０のままである。このため、第２コア２１ｄは、タイミングｔｉ４から第１状態フラグＡ１が１になるまでループし、デッドロックとなってしまう。
【００７４】
そして、第１コア２１ｃは、第２処理ブロックＴ２の実行が完了すると、タイミングｔｉ５で第１待ち処理Ｗ１を実行して、第８状態フラグＢ８が１になるまでループする。しかしながら、第２コア２１ｄは、上記のように第４待ち処理Ｗ４でデッドロックしているため、第８処理ブロックＴ８を実行できない。このため、第８状態フラグＢ８は０のまま継続している。よって、第１コア２１ｃは、タイミングｔｉ５から第８状態フラグＢ８が１になるまでループし、デッドロックとなってしまう。
【００７５】
よって、第１コア２１ｃと第２コア２１ｄは、デッドロックとなったため、この回のタスクが終了しないままタイミングｔｉ６に示すように、所定時間後に次のタスク起床処理を実行することになる。第１コア２１ｃと第２コア２１ｄは、今回のタスク起床処理において、ステップＳ２１でＮＯ判定するため、ステップＳ２２を実行することになる。そして、第１コア２１ｃと第２コア２１ｄは、ステップＳ２２でＹＥＳ判定することになり、タイミングｔｉ７で同期フェイルセーフ処理を実行する。
【００７６】
第１コア２１ｃと第２コア２１ｄは、タスク起床処理を行ったあと、タイミングｔｉ８以降において、上記と同様に、図４の並列プログラム２１ａ１における自身に割り振られた処理を上から順番に実行する。なお、今回のタスク、すなわち図６のタイミングｔｉ８以降では、状態フラグが意図せずリセットされず、デッドロックが発生しない例を採用している。
【００７７】
そして、第１コア２１ｃは、第３状態セット処理Ｆ３で第６状態フラグＡ６に１をセットし、第３待ち処理Ｗ３でＢ１１＝０であるかの判定を繰り返してＢ１１＝１になるのを待つ。第２コア２１ｄは、第７状態セット処理Ｆ７で第１１状態フラグＢ１１に１をセットし、第６待ち処理Ｗ６でＡ６＝０であるかの判定を繰り返してＡ６＝１になるのを待つ。これによって、第１コア２１ｃと第２コア２１ｄは、同時にタスクを完了させることができる。
【００７８】
以上のように、自動並列化コンパイラ１は、シングルプログラムにおける並列可能な複数の処理から、複数の処理を並列化した、複数のコア２１ｃ、２１ｄが実行可能な並列プログラム２１ａ１を生成する。そして、自動並列化コンパイラ１は、先行処理の実行が完了した際に完了状態を記憶する状態セット処理と、完了状態が記憶されたことを条件に後行処理の実行に移行させる待ち処理とを並列プログラムに挿入する。よって、自動並列化コンパイラ１は、シングルコアマイコンが実行する制御用のシングルプログラムに相当する制御ロジックを含んだ並列プログラム２１ａ１を生成できる。
【００７９】
また、自動並列化コンパイラ１は、同期監視処理と同期フェイルセーフ処理とを、並列プログラム２１ａ１とは異なる制御外プログラム２１ａ２に挿入する。このため、自動並列化コンパイラ１は、並列プログラム２１ａ１とは別に、監視ロジックとフェイルセーフロジックとを含む制御外プログラム２１ａ２を生成できる。よって、自動並列化コンパイラ１は、意図せずに状態フラグが１から０に変わってしまった場合、複数のコア２１ｃ、２１ｄに同期フェイルセーフ処理を実行させる制御外プログラム２１ａ２を生成できる。
【００８０】
従って、複数のコア２１ｃ、２１ｄは、並列プログラム２１ａ１を実行する際に、制御外プログラム２１ａ２を実行する必要がなく、制御ロジックの管理と、監視ロジックやフェイルセーフロジックの管理とを別に行える。よって、自動並列化コンパイラ１は、並列プログラム２１ａ１に制御外プログラム２１ａ２が含まれている場合よりも、ロジックの管理が容易な並列プログラム２１ａ１を生成できる。
【００８１】
例えば、並列プログラム２１ａ１に制御外プログラム２１ａ２が含まれていた場合、制御ロジックの管理と監視ロジックやフェイルセーフロジックの管理が複雑になる。並列プログラム２１ａ１は、複数のコア２１ｃ、２１ｄで実行される際にロジックが正しく管理されないと、誤った改変を誘発する可能性がある。しかしながら、自動並列化コンパイラ１は、ロジックの管理が容易な並列プログラム２１ａ１を生成できるため、誤った改変を抑制できる。
【００８２】
さらに、自動並列化コンパイラ１は、制御外プログラム２１ａ２を実行することによる複数のコア２１ｃ、２１ｄの処理負荷が、並列プログラム２１ａ１を実行することによる複数のコア２１ｃ、２１ｄの処理負荷に含まれることを抑制できると言える。よって、自動並列化コンパイラ１は、複数のコア２１ｃ、２１ｄが制御ロジックを実行する際における処理負荷の増加を抑制可能な並列プログラム２１ａ１を生成できる。
【００８３】
また、制御に直接的に関係する並列プログラム２１ａ１、及び並列プログラム２１ａ１を含む車載制御装置２０やマルチコアプロセッサの製造は、他社に委託することも考えられる。このような場合、自動並列化コンパイラ１は、例えばエンジンなどの制御に直接的に関係しない同期監視処理と同期フェイルセーフ処理を、制御に直接的に関係する並列プログラム２１ａ１とは別の制御外プログラム２１ａ２とすることができる。このため、自動並列化コンパイラ１は、製造を委託する側が要望する並列プログラム２１ａ１に、制御外プログラム２１ａ２が含まれないようにできるため好ましい。自動並列化コンパイラ１は、製造を委託する側が要望する並列プログラム２１ａ１の実行に伴う処理負荷に、制御外プログラム２１ａ２の実行に伴う処理負荷が含まれないようにできるため好ましい。
【００８４】
また、コンピュータ１０では、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１と制御外プログラム２１ａ２を生成するため、上記自動並列化コンパイラ１と同様に、並列プログラム２１ａ１を生成できる。よって、コンピュータ１０は、自動並列化コンパイラ１と同様の効果を奏することができる。
【００８５】
このように、車載制御装置２０は、マルチコアプロセッサ２１と、上記のように生成された並列プログラム２１ａ１と制御外プログラム２１ａ２を備えている。そして、マルチコアプロセッサ２１は、各コア２１ｃ、２１ｄが並列プログラム２１ａ１と制御外プログラム２１ａ２を実行する。このため、車載制御装置２０は、意図せず状態フラグが１から０に変わってしまった場合に、同期フェイルセーフ処理を実行できる。また、車載制御装置２０は、並列プログラム２１ａ１に制御外プログラム２１ａ２が含まれている場合よりも、ロジックの管理が容易で、複数のコア２１ｃ、２１ｄが制御ロジックを実行する際における処理負荷の増加が抑制可能である。
【００８６】
なお、本実施形態では、制御外プログラム２１ａ２がタスク起床処理時に実行される例を採用している。しかしながら、本発明は、これに限定されず、並列プログラム２１ａ１とは異なり、２つのコア２１ｃ、２１ｄが実行可能なプログラムに監視処理と同期フェイルセーフ処理とを挿入する自動並列化コンパイラ１及びコンピュータ１０であれば採用できる。監視処理と同期フェイルセーフ処理を挿入するプログラムは、例えば、２つのコア２１ｃ、２１ｄが実行可能で、並列プログラム２１ａ１よりも優先度が高いプログラムなどを採用できる。
【００８７】
また、本実施形態では、２つのコア２１ｃ、２１ｄを備えたマルチコアプロセッサ２１を採用している。このため、本実施形態では、シングルプログラムから、２つのコア２１ｃ、２１ｄに対応して、２つのコア２１ｃ、２１ｄが実行可能なプログラム２１ａ３を生成する例を採用した。しかしながら、本発明は、３つ以上のコアを備えたマルチコアプロセッサ２１であっても採用できる。この場合は、３つの以上のコアに対応したプログラム２１ａ３を生成することになる。
【００８８】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。以下において、本発明のその他の形態である変形例に関して説明する。上記実施形態及び変形例は、それぞれ単独で実施することも可能であるが、適宜組み合わせて実施することも可能である。
【００８９】
（変形例）
ここで、図７、図８を用いて、変形例に関して説明する。本変形例では、主に、上記実施形態と異なる部分に関して説明する。また、本変形例は、自動並列化コンパイラ１が制御外プログラム２１ａ２に対して特定処理を挿入する手順を含んでいる点が上記実施形態と異なる。同様に、本変形例は、コンピュータ１０が特定処理の挿入部を含んでいる点が上記実施形態と異なる。そして、本変形例は、各コア２１ｃ、２１ｄが状態フラグ毎に同期監視処理と同期フェイルセーフ処理を実行する点が上記実施形態と異なる。なお、本変形例では、上記実施形態と同様の処理に同じステップ番号を付与しているため、上記実施形態を参照して適用できる。
【００９０】
まず、変形例におけるコンピュータ１０の処理動作に関して説明する。ＣＰＵ１３は、例えば入力装置１６によって挿入処理の実行指示がなされた場合に、図７に示すフローチャートを実行する。ＣＰＵ１３は、自動並列化コンパイラ１を実行することで、シングルプログラムから並列プログラム２１ａ１と制御外プログラム２１ａ２を含むプログラム２１ａ３を生成する。ＣＰＵ１３は、特開２０１５−１８０７号公報に記載された手順に従って並列プログラム２１ａ１を生成する際に、下記のステップＳ１１〜Ｓ１４、Ｓ１３１を実行する。
【００９１】
ＣＰＵ１３は、ステップＳ１３の後に、ステップＳ１３１を行う。ステップＳ１３１では、特定処理を制御外プログラム２１ａ２に挿入する（特定処理挿入手順、特定処理挿入部）。ＣＰＵ１３は、状態フラグがセットされていないことが検出された場合に、状態フラグがセットされていない状態セット処理を特定する特定処理を、制御外プログラム２１ａ２に挿入する。なお、ＣＰＵ１３は、同期フェイルセーフ処理の挿入手順では、特定処理にて特定された状態フラグ毎に実行される同期フェイルセーフ処理を、制御外プログラム２１ａ２に挿入する（ステップＳ１４）。つまり、変形例のＣＰＵ１３は、複数の状態フラグを個別に、状態フラグがセットされているか否か確認し、１がセットされていない状態フラグ毎に同期フェイルセーフ処理が実行されることを示す制御外プログラム２１ａ２を生成する。
【００９２】
次に、８を用いて、第１コア２１ｃ及び第２コア２１ｄの処理動作に関して説明する。第１コア２１ｃと第２コア２１ｄは、所定時間毎のタスク起床処理時に、図８のフローチャートに示す処理を実行する。
【００９３】
第１コア２１ｃと第２コア２１ｄは、ステップＳ２２でＹＥＳ判定した場合、ステップＳ３１へ進む。
【００９４】
ステップＳ３１では、第１状態フラグＡ１＝１であるか否かを判定する（特定処理）。第２コア２１ｄは、第１状態フラグＡ１に１がセットされていると判定した場合、第１処理ブロックＴ１が完了しているとみなしてステップＳ３３へ進む。
【００９５】
一方、第２コア２１ｄは、第１状態フラグＡ１に１がセットされていないと判定した場合、第１処理ブロックＴ１が完了していないとみなしてステップＳ３２へ進む。つまり、第２コア２１ｄは、状態フラグがセットされていない状態セット処理が、第１状態セット処理Ｆ１であると特定する。
【００９６】
また、これによって、第２コア２１ｄは、処理が完了していない処理ブロックを特定できる。この場合、第２コア２１ｄは、第１コア２１ｃによる第１処理ブロックＴ１の処理が完了していないと特定できる。
【００９７】
ステップＳ３２では、第１状態フラグＡ１に対応した同期フェイルセーフ処理を実行する。第２コア２１ｄは、第１状態フラグＡ１に対応した同期フェイルセーフ処理、すなわち、第１処理ブロックＴ１が未完了である場合に適した同期フェイルセーフ処理を実行する。そして、第２コア２１ｄは、ステップＳ３３〜Ｓ３６まで、対象の状態フラグをかえて同様に処理を行う。
【００９８】
ステップＳ３７では、第８状態フラグＢ８＝１であるか否かを判定する（特定処理）。第１コア２１ｃは、第８状態フラグＢ８に１がセットされていると判定した場合、第８処理ブロックＴ８が完了しているとみなしてステップＳ３９へ進む。
【００９９】
一方、第１コア２１ｃは、第８状態フラグＢ８に１がセットされていないと判定した場合、第８処理ブロックＴ８が完了していないとみなしてステップＳ３８へ進む。つまり、第１コア２１ｃは、状態フラグがセットされていない状態セット処理が、第５状態セット処理Ｆ５であると特定する。
【０１００】
また、これによって、第１コア２１ｃは、処理が完了していない処理ブロックを特定できる。この場合、第１コア２１ｃは、第２コア２１ｄによる第８処理ブロックＴ８の処理が完了していないと特定できる。
【０１０１】
ステップＳ３８では、第８状態フラグＢ８に対応した同期フェイルセーフ処理を実行する。第１コア２１ｃは、第８状態フラグＢ８に対応した同期フェイルセーフ処理、すなわち、第８処理ブロックＴ８が未完了である場合に適した同期フェイルセーフ処理を実行する。そして、第１コア２１ｃは、ステップＳ３９〜Ｓ４２まで、対象の状態フラグをかえて同様に処理を行う。
【０１０２】
変形例の自動並列化コンパイラ１、コンピュータ１０、及び車載制御装置２０は、上記実施形態と同様の効果を奏することができる。さらに、変形例の自動並列化コンパイラ１、コンピュータ１０は、コア２１ｃ、コア２１ｄに対して、処理が完了していない処理ブロックに適した同期フェイルセーフ処理を実行させることができるので好ましい。また、車載制御装置２０は、処理が完了していない処理ブロックに適した同期フェイルセーフ処理を実行できるので好ましい。
【符号の説明】
【０１０３】
１…自動並列化コンパイラ、１０…コンピュータ、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載制御装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ａ１…並列プログラム、２１ｂ…ＲＡＭ、２１ｃ…第１コア、２１ｄ…第２コア、２２…通信部、２３…センサ部、２４…入出力ポート
【図１】
2018124876.tif 000003
【図２】
2018124876.tif 000004
【図３】
2018124876.tif 000005
【図４】
2018124876.tif 000006
【図５】
2018124876.tif 000007
【図６】
2018124876.tif 000008
【図７】
2018124876.tif 000009
【図８】
2018124876.tif 000010