(57)【要約】【課題】並列プログラムがマルチコアマイコンにて実行されることで、マルチコアマイコンにおける処理動作が正常になされているかを監視可能とする。【解決手段】並列プログラム３１ａ１は、マルチコアマイコン３１のハードウエアの異常診断処理ＣＫ１〜ＣＫ４を含んでいる。従って、マルチコアマイコン３１は、並列プログラム３１ａ１を実行することで、マルチコアマイコン３１のハードウエアが正常に動作しているかを診断することができ、ひいては、そのハードウエアを利用した処理動作が正常になされているかを監視することができる。異常診断処理は、処理単位が実行されない空き時間となるコア以外の別コアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、実行スケジュールが決定されたものである。【選択図】図６
2019159931.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラム（３１ａ１）を生成する並列化方法であって、
前記シングルプログラムに含まれる複数の処理単位（Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４）の依存関係を解析し、解析した前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けを行うとともに、前記複数の処理単位の実行スケジュールを決定する第１スケジューリング手順（１０ａ〜１０ｅ）と、
前記第１スケジューリング手順によって決定された、前記複数のコアにおける前記複数の処理単位の実行スケジュールに基づき、前記処理単位が実行されないコアの空き時間に、前記マルチコアマイコンのハードウエアの異常診断処理が実行されるように、当該異常診断処理の実行スケジュールを決定する第２スケジューリング手順（１０ｆ）と、を備え、
前記第１及び第２スケジューリング手順によって決定された実行スケジュールに従って、前記複数のコアにおいて前記複数の処理単位及び前記異常診断処理を実行するための前記並列プログラムを生成するものであり、
前記第２スケジューリング手順では、前記処理単位が実行されない空き時間となるコア以外のコアにおいて、前記空き時間と並行して実行される処理単位により利用されるハードウエアが、前記異常診断処理の診断対象となるハードウエアと重複しないことを条件として、前記空き時間に前記異常診断処理が実行されるように、前記異常診断処理の実行スケジュールが決定される並列化方法。
【請求項２】
前記第２スケジューリング手順では、さらに、前記異常診断処理の実行に要する時間が、前記空き時間よりも短いことを条件として、前記空き時間に前記異常診断処理が実行されるように前記異常診断処理の実行スケジュールが決定される請求項１に記載の並列化方法。
【請求項３】
前記第２スケジューリング手順では、前記異常診断処理が実行される前後の少なくとも一方の時間帯に、当該異常診断処理を実行するコア以外のコアにおいて、前記異常診断処理が診断対象とするハードウエアを利用する単位処理が実行されるスケジュールとなっている場合、当該ハードウエアを利用する単位処理が完了した後に前記異常診断処理が実行を開始するための同期処理、及び／又は、前記異常診断処理が完了した後に前記ハードウエアを利用する単位処理が実行を開始するための同期処理が追加される請求項１又は２に記載の並列化方法。
【請求項４】
前記異常診断処理の診断対象となるハードウエアは、前記マルチコアマイコンの書換え可能なメモリ（３１ｂ）であり、前記異常診断処理は、前記メモリのデータが正常に書換え可能であるかをチェックする書換えチェック処理である請求項１乃至３のいずれかに記載の並列化方法。
【請求項５】
前記書換えチェック処理は、前記シングルプログラムで定義されているデータを保存するために利用されるメモリ領域を個別に書換え可能かチェックするものである請求項４に記載の並列化方法。
【請求項６】
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラム（３１ａ１）を生成する並列化ツールであって、
前記シングルプログラムに含まれる複数の処理単位（Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４）の依存関係を解析し、解析した前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けを行うとともに、前記複数の処理単位の実行スケジュールを決定する第１スケジューリング部（１０ａ〜１０ｅ）と、
前記第１スケジューリング部によって決定された、前記複数のコアにおける前記複数の処理単位の実行スケジュールに基づき、前記処理単位が実行されないコアの空き時間に、前記マルチコアマイコンのハードウエアの異常診断処理が実行されるように、当該異常診断処理の実行スケジュールを決定する第２スケジューリング部（１０ｆ）と、を備え、
前記第１及び第２スケジューリング部によって決定された実行スケジュールに従って、前記複数のコアにおいて前記複数の処理単位及び前記異常診断処理を実行するための前記並列プログラムを生成するものであり、
前記第２スケジューリング部は、前記処理単位が実行されない空き時間となるコア以外のコアにおいて、前記空き時間と並行して実行される処理単位により利用されるハードウエアが、前記異常診断処理の診断対象となるハードウエアと重複しないことを条件として、前記空き時間に前記異常診断処理が実行されるように、前記異常診断処理の実行スケジュールを決定する並列化ツール。
【請求項７】
前記第２スケジューリング部は、さらに、前記異常診断処理の実行に要する時間が、前記空き時間よりも短いことを条件として、前記空き時間に前記異常診断処理が実行されるように前記異常診断処理の実行スケジュールを決定する請求項６に記載の並列化ツール。
【請求項８】
前記第２スケジューリング部は、前記異常診断処理が実行される前後の少なくとも一方の時間帯に、当該異常診断処理を実行するコア以外のコアにおいて、前記異常診断処理が診断対象とするハードウエアを利用する単位処理が実行されるスケジュールとなっている場合、当該ハードウエアを利用する単位処理が完了した後に前記異常診断処理が実行を開始するための同期処理、及び／又は、前記異常診断処理が完了した後に前記ハードウエアを利用する単位処理が実行を開始するための同期処理を追加する請求項６又は７に記載の並列化ツール。
【請求項９】
前記異常診断処理の診断対象となるハードウエアは、前記マルチコアマイコンの書換え可能なメモリ（３１ｂ）であり、前記異常診断処理は、前記メモリのデータが正常に書換え可能であるかをチェックする書換えチェック処理である請求項６乃至８のいずれかに記載の並列化ツール。
【請求項１０】
前記書換えチェック処理は、前記シングルプログラムで定義されているデータを保存するために利用されるメモリ領域を個別に書換え可能かチェックするものである請求項９に記載の並列化ツール。
【請求項１１】
コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラム（３１ａ１）を実行するマルチコアマイコンであって、
前記並列プログラムは、前記シングルプログラムに含まれていた複数の処理単位（Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４）と、前記マルチコアマイコンのハードウエアの異常診断処理とを含み、
前記複数の処理単位は、各処理単位の依存関係に基づき、前記複数のコアへ割り付けられるとともに、実行スケジュールが決定されたものであり、
前記異常診断処理は、前記複数のコアにおける前記複数の処理単位の実行スケジュールに基づき、前記処理単位が実行されないコアの空き時間に前記異常診断処理が実行されるように、実行スケジュールが決定されたものであり、
さらに、前記異常診断処理は、前記処理単位が実行されない空き時間となるコア以外のコアにおいて、前記空き時間と並行して実行される処理単位により利用されるハードウエアが、前記異常診断処理の診断対象となるハードウエアと重複しないことを条件として、前記空き時間に前記異常診断処理が実行されるように、実行スケジュールが決定されたものであるマルチコアマイコン。
【請求項１２】
前記マルチコアマイコンは、車両に搭載された車載機器を制御するための車載装置（３０）に適用され、前記並列プログラムを実行することで前記車載機器を制御するものである請求項１１に記載のマルチコアマイコン。
【請求項１３】
前記異常診断処理の実行に要する時間が、前記空き時間よりも短いことを条件として、前記空き時間に前記異常診断処理が実行されるように前記異常診断処理の実行スケジュールが決定される請求項１１又は１２に記載のマルチコアマイコン。
【請求項１４】
前記異常診断処理が実行される前後の少なくとも一方の時間帯に、当該異常診断処理を実行するコア以外のコアにおいて、前記異常診断処理が診断対象とするハードウエアを利用する単位処理が実行されるスケジュールとなっている場合、前記並列プログラムは、前記ハードウエアを利用する単位処理が完了した後に前記異常診断処理の実行を開始するための同期処理、及び／又は、前記異常診断処理が完了した後に前記ハードウエアを利用する単位処理の実行を開始するための同期処理を含み、
前記マルチコアマイコンは、前記同期処理を実行することにより、前記異常診断処理と、当該異常診断処理が診断対象とするハードウエアを利用する単位処理との実行時間がオーバーラップすることを防止する請求項１１乃至１３のいずれかに記載のマルチコアマイコン。
【請求項１５】
前記異常診断処理の診断対象となるハードウエアは、前記マルチコアマイコンの書換え可能なメモリ（３１ｂ）であり、前記異常診断処理は、前記メモリのデータが正常に書換え可能であるかをチェックする書換えチェック処理である請求項１１乃至１４のいずれかに記載のマルチコアマイコン。
【請求項１６】
前記書換えチェック処理は、前記シングルプログラムで定義されているデータを保存するために利用されるメモリ領域を個別に書換え可能かチェックするものである請求項１５に記載のマルチコアマイコン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のシングルプログラムからマルチコアマイコン用の並列プログラムを生成する並列化方法と並列化ツール、及びシングルプログラムから生成された並列プログラムを実行するマルチコアマイコンに関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として、特許文献１に開示された並列化コンパイル方法が知られている。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードの字句解析や構文解析を行って中間言語に展開し、この中間言語を用いて、複数のマクロタスクの依存関係の解析や最適化等を行う。また、従来の並列化コンパイル方法では、各マクロタスクの依存関係やマクロタスク毎の実行時間を基にコアへの割り付けやスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、特に自動車分野などで、制御対象機器に対する制御系の誤動作（機能不全）を防止するために制御装置の動作を監視する監視装置などを設けて、機能安全を図ることが求められている。しかしながら、従来の並列化方法で生成される並列プログラムは、このような機能安全確保のための制御装置の動作監視の仕組みについてはなんら考慮されていない。
【０００６】
本発明は、上述した点に鑑みてなされたものであり、並列プログラムがマルチコアマイコンにて実行されることによって、マルチコアマイコンにおける処理動作が正常になされているかを監視可能となる並列化方法、並列化ツール、及びマルチコアマイコンを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本開示の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラムを生成する並列化方法であって、
シングルプログラムに含まれる複数の処理単位（Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４）の依存関係を解析し、解析した複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けを行うとともに、複数の処理単位の実行スケジュールを決定する第１スケジューリング手順（１０ａ〜１０ｅ）と、
第１スケジューリング手順によって決定された、複数のコアにおける複数の処理単位の実行スケジュールに基づき、処理単位が実行されないコアの空き時間に、マルチコアマイコンのハードウエアの異常診断処理が実行されるように、当該異常診断処理の実行スケジュールを決定する第２スケジューリング手順（１０ｆ）と、を備え、
第１及び第２スケジューリング手順によって決定された実行スケジュールに従って、複数のコアにおいて複数の処理単位及び異常診断処理を実行するための並列プログラムを生成するものであり、
第２スケジューリング手順では、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、異常診断処理の実行スケジュールが決定される。
【０００８】
このように、本開示の並列化方法では、複数の処理単位の実行スケジュール及び異常診断処理の実行スケジュールに従って、複数のコアにおいて複数の処理単位及び異常診断処理を実行するための並列プログラムが生成される。このため、異常診断処理を含む並列プログラムがマルチコアマイコンにて実行されることで、マルチコアマイコンのハードウエアが正常に動作しているかを診断することができ、ひいては、そのハードウエアを利用したマルチコアマイコンによる処理動作が正常になされているかを監視することができる。
【０００９】
特に、本開示の並列化方法では、第２スケジューリング手順において、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、異常診断処理の実行スケジュールが決定される。このため、ハードウエアを利用する単位処理の実行に対してなんら影響を及ぼすことなく、そのハードウエアの異常診断処理を実行することが可能な並列プログラムが生成されえる。
【００１０】
本開示の他の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラムを生成する並列化ツールであって、
シングルプログラムに含まれる複数の処理単位（Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４）の依存関係を解析し、解析した複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けを行うとともに、複数の処理単位の実行スケジュールを決定する第１スケジューリング部（１０ａ〜１０ｅ）と、
第１スケジューリング部によって決定された、複数のコアにおける複数の処理単位の実行スケジュールに基づき、処理単位が実行されないコアの空き時間に、マルチコアマイコンのハードウエアの異常診断処理が実行されるように、当該異常診断処理の実行スケジュールを決定する第２スケジューリング部（１０ｆ）と、を備え、
第１及び第２スケジューリング部によって決定された実行スケジュールに従って、複数のコアにおいて複数の処理単位及び異常診断処理を実行するための並列プログラムを生成するものであり、
第２スケジューリング部は、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、異常診断処理の実行スケジュールを決定する。
【００１１】
このように、本開示の並列化ツールが生成する並列プログラムは、複数の処理単位と異常診断処理とを含む。このため、異常診断処理を含む並列プログラムがマルチコアマイコンにて実行されることで、マルチコアマイコンのハードウエアが正常に動作しているかを診断することができ、ひいては、そのハードウエアを利用したマルチコアマイコンによる処理動作が正常になされているかを監視することができる。
【００１２】
特に、本開示の並列化ツールでは、第２スケジューリング部は、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、異常診断処理の実行スケジュールを決定する。このため、並列化ツールは、ハードウエアを利用する単位処理の実行に対してなんら影響を及ぼすことなく、そのハードウエアの異常診断処理を実行することが可能な並列プログラムを生成することができる。
【００１３】
本開示の他の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（３１ｃ、３１ｄ）を有するマルチコアマイコン（３１）用の並列プログラムを実行するマルチコアマイコン（２１）であって、
並列プログラム（２１ａ１）は、シングルプログラムに含まれていた複数の処理単位（ＭＴ１〜ＭＴ８）と、マルチコアマイコンのハードウエアの異常診断処理とを含み、
複数の処理単位は、各処理単位の依存関係に基づき、複数のコアへ割り付けられるとともに、実行スケジュールが決定されたものであり、
異常診断処理は、複数のコアにおける複数の処理単位の実行スケジュールに基づき、処理単位が実行されないコアの空き時間に異常診断処理が実行されるように、実行スケジュールが決定されたものであり、
さらに、異常診断処理は、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、実行スケジュールが決定されたものである。
【００１４】
上記のように、並列プログラムは異常診断処理を含んでいるので、マルチコアマイコンは、この並列プログラムを実行することで、マルチコアマイコンのハードウエアが正常に動作しているかを診断することができ、ひいては、そのハードウエアを利用したマルチコアマイコンによる処理動作が正常になされているかを監視することができる。
【００１５】
そして、異常診断処理は、並列プログラムにおいて、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、実行スケジュールが決定されたものである。このため、マルチコアマイコンは、並列プログラムを実行することで、ハードウエアを利用する単位処理の実行に対してなんら影響を及ぼすことなく、そのハードウエアの異常診断処理を実行することが可能となる。
【００１６】
上記括弧内の参照番号は、本開示の理解を容易にすべく、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、なんら発明の範囲を制限することを意図したものではない。
【００１７】
また、上述した特徴以外の、特許請求の範囲の各請求項に記載した技術的特徴に関しては、後述する実施形態の説明及び添付図面から明らかになる。
【図面の簡単な説明】
【００１８】
【図１】実施形態における、自動並列化ツールとしてのコンピュータの概略構成を示すブロック図である。
【図２】実施形態における、自動並列化ツールとしてのコンピュータの機能を示すブロック図である。
【図３】シングルプログラムを、タスク毎に各処理単位の依存関係を解析した結果の一例を示す図である。
【図４】第１スケジューリング部による、複数の処理単位の複数のコアへの割り付けと実行順序とをスケジューリングした一例を示す図である。
【図５】第２スケジューリング部が実行する、異常監視処理を追加挿入するためのスケジュール更新処理を示すフローチャートである。
【図６】第２スケジューリング部による、複数の処理単位の実行スケジュールにおける空き時間に異常診断処理を挿入して、実行スケジュールを更新した結果を示す図である。
【図７】実施形態における、車載装置の概略構成を示すブロック図である。
【発明を実施するための形態】
【００１９】
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、並列化ツールとしてのコンピュータ１０が、コアが一つであるシングルコアマイコン用のシングルプログラムから、第１コア３１ｃと第２コア３１ｄとを有するマルチコアマイコン３１用に並列化した並列プログラム３１ａ１を生成する例について説明する。なお、マルチコアマイコン３１が備えるコアの数は２個に限られず、３個以上であってもよい。
【００２０】
このように、シングルプログラムから並列プログラム３１ａ１を生成する背景として、制御の高度化によりプログラム量は年々増加する傾向にあるのに対し、シングルプロセッサの性能向上には限界があることが挙げられる。つまり、例えばシングルプロセッサの動作周波数を高めて処理能力を向上しようとしても、動作周波数を高めるにも限界があり、また動作周波数を高めることにより発熱量の増大や消費電力の増加を招いてしまう。このため、コア数の増加により処理能力向上を図るマルチコアマイコンを適用することが有効と考えられている。
【００２１】
この際、プログラムの開発者が、マルチコアの能力を最大限に発揮させられるように、各コアに適切に処理を割り振ったり、そのスケジューリングも行ったりしなければならないとすると、プログラムの開発負荷が増加してしまう。このようなプログラムの開発負荷を低減するために、シングルプログラムから並列プログラム３１ａ１を自動生成することは技術的意義がある。さらに、シングルプログラムから並列プログラム３１ａ１を自動生成することにより、シングルプロセッサ用に開発した既存のソフト資産を有効に活用することも可能となる。
【００２２】
まず、図１を参照して、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、シングルプログラムから並列プログラム３１ａ１を生成するものである。なお、本実施形態では、コンピュータ１０は、Ｃ言語で記述されたシングルプログラムに基づき、Ｃ言語で記述された並列プログラム３１ａ１を生成するように構成される。このため、後述する車載装置３０（マルチコアマイコン３１）のＲＯＭ３１ａに記憶され、マルチコアマイコン３１によって実行される並列プログラム３１ａ１’は、図２に示すように、さらにコンパイラ２０によりコンパイルされて、バイナリコードに翻訳されたものとなる。
【００２３】
しかしながら、本発明は、これに限定されない。シングルプログラムは、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。また、並列プログラム３１ａ１は、例えば、シングルプログラムの解析時に使用する中間言語で記述されていてもよい。あるいは、コンピュータ１０は、Ｃ言語で記述された並列プログラムと中間言語で記述された並列プログラムとをともに生成してもよい。さらに、コンピュータ１０が、コンパイラ２０としての機能も取り込み、直接、バイナリコードの並列プログラム３１ａ１’を生成してもよい。
【００２４】
コンピュータ１０は、図１に示すように、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。コンピュータ１０は、読取部１７により、記憶媒体１８に記憶された記憶内容を読み取ることができる。図１に示すように、記憶媒体１８には、例えば、自動並列化コンパイラ１が記憶される。なお、コンピュータ１０及び記憶媒体１８は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０と同様であるため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００２５】
自動並列化コンパイラ１は、並列プログラム３１ａ１を生成するための手順をコンピュータ１０に実行させるソフトウエアである。よって、自動並列化コンパイラ１により、コンピュータ１０は並列化方法を実行可能となる。換言すれば、自動並列化コンパイラ１は、並列化方法を含むプログラムである。コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列化ツールとして、並列プログラム３１ａ１を生成する。
【００２６】
次に、図２を参照して、並列化ツールとしてのコンピュータ１０が有する、シングルプログラムから並列プログラム３１ａ１を生成するための各機能及び処理手順について説明する。図２は、コンピュータ１０の各機能及び処理手順を機能ブロックとして表した図である。図２に示すように、コンピュータ１０は、字句解析部１０ａ、構文・意味解析部１０ｂ、依存関係解析部１０ｃ、コア割付部１０ｄ、第１スケジューリング部１０ｅ、及び第２スケジューリング部１０ｆとしての機能を有している。
【００２７】
本実施形態では、図２に示すように、コンピュータ１０には、制御対象機器を制御するためのシングルプログラム全体を一度に解析して並列プログラムを生成するのではなく、独立した処理機能（タスク）毎に分割されたシングルプログラムを対象として、その並列プログラムを生成する。タスク毎に分割されたシングルプログラムは複数の処理単位を含み、その複数の処理単位が実行されることにより、タスク毎の目的とする処理機能を実現することができる。このように複数の処理単位は、目的とする処理機能を実現するために協働するものであり、例えば先の処理単位で処理された変数データを参照する後の処理単位や、先の処理単位の条件分岐によって実行される後の処理単位などを含む。
【００２８】
ここで、処理単位とは、各コアに割り振る際の最小単位であるコア配置単位や、関数をいう。コア配置単位は、処理ブロック、マクロタスク、あるいは単なる処理単位などと言い換えることができる。コア配置単位と関数との関係は、コア配置単位≧関数である。つまり、関数は、コア配置単位自体である場合や、コア配置単位に含まれる親関数やサブ関数の場合がある。
【００２９】
字句解析部１０ａ及び構文・意味解析部１０ｂは、Ｃ言語で記述されたシングルプログラムのソースコードを対象として、字句解析や、構文と意味の解析を行い、中間言語に展開する。字句解析部１０ａ及び構文・意味解析部１０ｂによって展開された中間言語は、汎用的な命令を含んでいる。なお、字句解析部１０ａ及び構文・意味解析部１０ｂは、特開２０１５−１８０７号公報のＦＥ３に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００３０】
依存関係解析部１０ｃは、中間言語に展開されたシングルプログラムに含まれる処理単位の依存関係を解析し、並列実行可能な処理単位を抽出する。依存関係には、後に実行される処理単位が先に実行される処理単位で更新された変数データを参照するなどのデータ依存関係と、後に実行される処理単位が先に実行される処理単位の条件分岐先となるなどの制御依存関係とが含まれる。このような依存関係がある複数の処理単位は、依存関係に従う処理順序で実行される必要がある。なお、本実施形態では、上述したようにタスク毎に分割されたシングルプログラムが並列化の対象である。タスク毎に分割されたシングルプログラムに含まれる複数の処理単位は、データ依存関係や制御依存関係を有している。
【００３１】
例えば、図３に示す例では、タスクＡは処理単位Ａ１〜Ａ３を含み、処理単位Ａ２、Ａ３は処理単位Ａ１に対して依存関係を有している。そして、処理単位Ａ２と処理単位Ａ３とは並列実行可能な処理単位である。また、タスクＢは処理単位Ｂ１〜Ｂ２を含み、処理単位Ｂ２は処理単位Ｂ１に対して依存関係を有している。さらに、タスクＣは処理単位Ｃ１〜Ｃ４を含み、処理単位Ｃ２は処理単位Ｃ１に対して依存関係を有し、処理単位Ｃ４は処理単位Ｃ３に対して依存関係を有している。処理単位Ｃ１、Ｃ２と処理単位Ｃ３、Ｃ４とは並列実行可能である。
【００３２】
コア割付部１０ｄは、依存関係解析部１０ｃで解析した解析結果に基づき、複数の処理単位を第１コア３１ｃ及び第２コア３１ｄに割り付ける（割り振る）。この際、コア割付部１０ｄは、例えば、並列実行可能な処理単位が第１コア３１ｃ及び第２コア３１ｄで並行して実行されるように、複数の処理単位の割り振りを行う。例えば、図３に示すように、各タスク毎に、処理単位の依存関係が解析された場合の、第１コア３１ｃ及び第２コア３１ｄへの各処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の割り振りの一例を説明する。まず、コア割付部１０ｄは、タスクＡの処理単位Ａ１〜Ａ３に関して、処理単位Ａ１、Ａ２を第１コア３１ｃに割り付け、処理単位Ａ２と並列に実行可能な処理単位Ａ３を第２コア３１ｄに割り付ける。また、コア割付部１０ｄは、タスクＢの処理単位Ｂ１、Ｂ２を第１コア３１ｃに割り付け、タスクＣの処理単位Ｃ１〜Ｃ４については、処理単位Ｃ１、Ｃ２を第１コア３１ｃに割り付け、それらと並列に実行可能な処理単位Ｃ３、Ｃ４を第２コア３１ｄに割り付ける。
【００３３】
そして、第１スケジューリング部１０ｅは、第１コア３１ｃ及び第２コア３１ｄに割り振られた複数の処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４のスケジューリングを行う。具体的には、第１スケジューリング部１０ｅは、各処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の実行時間や依存関係に基づいて、第１コア３１ｃ及び第２コア３１ｄに割り振られた各処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の実行スケジュールを決定する。なお、依存関係解析部１０ｃ、コア割付部１０ｄ、及び第１スケジューリング部１０ｅは、特開２０１５−１８０７号公報のＭＰ５に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００３４】
図４に、第１スケジューリング部１０ｅによるスケジューリング結果の一例を示す。タスクＡの各処理単位Ａ１〜Ａ３は、上述したように、処理単位Ａ１に対して、処理単位Ａ２と処理単位Ａ３とが依存する依存関係を有している。このため、図４に示す例のように、処理単位Ａ１が実行される第１コア３１ｃとは別の第２コア３１ｄで実行される処理単位Ａ３は、同期処理により、処理単位Ａ１の完了後に実行開始するようにスケジュールされる。同期処理は、例えば、処理単位Ａ１が完了したときに第１コア３１ｃが完了情報をＲＡＭ３１ｂに書き込み、第２コア３１ｄが、その完了情報をＲＡＭ３１ｂから読み出して確認したときに、処理単位Ａ３の実行を開始することによって実現することができる。あるいは、同期処理として、第１コア３１ｃが、処理単位Ａ１の完了後に、第２コア３１ｄに完了信号を通知するようにしてもよい。
【００３５】
また、図４に示す例では、タスクＡの各処理単位Ａ１〜Ａ３の完了後、実行タスクがタスクＢに切り替えられ、タスクＢの各処理単位Ｂ１〜Ｂ２が実行されるようにスケジューリングされている。さらに、タスクＢの各処理単位Ｂ１〜Ｂ２の完了後、実行タスクがタスクＣに切り替えられ、タスクＣの各処理単位Ｃ１〜Ｃ４が実行されるようにスケジューリングされている。
【００３６】
そして、図４に示す例では、タスクＡの処理単位Ａ１は、シンボルＰで表されるＲＡＭ３１ｂに保存される変数データにアクセスして、書き込みを行う関数を有している。また、タスクＡの処理単位Ａ２は、シンボルＸ、Ｚで表されるＲＡＭ３１ｂに保存される変数データにアクセスして、書き込みを行う関数を有している。さらに、タスクＢの処理単位Ｂ１は、シンボルＷで表される変数データにアクセスして、書き込みを行う関数を有し、処理単位Ｂ２は、シンボルＱで表される変数データにアクセスして書き込みを行う関数を有している。ただし、説明した例に限られず、各変数データのアクセスには、書き込みを行う関数によるばかりでなく、読み出しを行う関数による場合も含まれる。
【００３７】
本実施形態のコンピュータ１０は、図２に示すように、さらに第２スケジューリング部１０ｆを備えている。この第２スケジューリング部１０ｆは、第１スケジューリング部１０ｅによってスケジューリングされた、並列プログラムを構成する複数の処理単位の実行スケジュールにおける空き時間に、マルチコアマイコン３１のハードウエアの異常診断処理を挿入して、並列プログラムの実行スケジュールを更新するものである。換言すれば、第２スケジューリング部１０ｆは、第１スケジューリング部１０ｅによって決定された、第１コア３１ｃ及び第２コア３１ｄにおける複数の処理単位の実行スケジュールに基づき、処理単位が実行されないコアの空き時間に並行して、マルチコアマイコン３１のハードウエアの異常診断処理が実行されるように、当該異常診断処理の実行スケジュールを決定するものである。すなわち、第２スケジューリング部１０ｆ（コンピュータ１０）は、挿入すべき異常診断処理としてのプログラムを保有しており、その異常診断処理を実行可能な空き時間を探索し、探索された空き時間に異常診断処理を割り付ける。この結果、第２スケジューリング部１０ｆによって実行スケジュールが更新された並列プログラム３１ａ１は、シングルプログラムに含まれていた各タスクの処理単位に加えて、マルチコアマイコン３１のハードウエアの異常診断処理を含むものとなる。
【００３８】
ここで、マルチコアマイコン３１のハードウエアの異常診断処理について説明する。異常診断処理は、並列プログラム３１ａ１を実行するマルチコアマイコン３１のハードウエアに異常が発生していないかを診断するものである。このように、本実施形態による並列化ツールとしてのコンピュータ１０は、マルチコアマイコン３１のハードウエアの異常を診断する異常診断処理を含む並列プログラム３１ａ１を生成するように構成されている。このため、マルチコアマイコン３１は、生成された並列プログラム３１ａ１を実行することで、自身のハードウエアに異常が生じておらず、正常に動作しているかどうかを診断することができ、ひいては、該当するハードウエアを利用したマルチコアマイコン３１による処理動作が正常になされているかを監視することができる。
【００３９】
ハードウエアの異常診断処理の具体例としては、ＲＡＭ３１ｂの書換えチェック処理を挙げることができる。すなわち、異常診断処理の診断対象となるハードウエアは、マルチコアマイコン３１の書換え可能なメモリであるＲＡＭ３１ｂであり、異常診断処理としての書換えチェック処理は、ＲＡＭ３１ｂのデータが正常に書換え可能であるかをチェックするものである。例えば、書換えチェック処理は、以下の４つのステップにて実行することができる。まず、第１ステップとして、診断対象とする変数データの値が保存されているＲＡＭ３１ｂの該当領域から変数データの値を読み出して、他のメモリ領域に退避させる。次に、第２ステップとして、変数データを読み出した該当領域にテスト値を書き込む。そして、第３ステップとして、書き込んだテスト値を該当領域から読み出して、その読み出した値がテスト値に一致するかどうかを判定する。最後に、第４ステップとして、退避させた値を用いて、該当領域を元の変数データの値に書き戻す。このようにして、書換えチェック処理は、変数データを保存するために利用されるＲＡＭ３１ｂの記憶領域を個別に書換え可能かチェックする。
【００４０】
本実施形態では、書換えチェックが必要なＲＡＭ３１ｂの記憶領域に関する情報（ＲＡＭ情報）１９が、第２スケジューリング部１０ｆに与えられるように構成されている。より詳しく説明すると、シングルプログラムにおいて、変数データを示すシンボルとして使用されているシンボルデータをまとめた情報が、書換えチェックが必要なＲＡＭ情報１９として、第２スケジューリング部１０ｆに与えられる。並列プログラム３１ａ１がＣ言語や中間言語で記述される場合、各変数データは対応するシンボルによって表される。各シンボルによって表される各変数データがマルチコアマイコン３１のＲＡＭ３１ｂのどの記憶領域に保存されるかは、コンパイラ２０によって、関数や変数のシンボルなどが、具体的なアドレス情報に変換されることで初めて決定される。そのため、第２スケジューリング部１０ｆには、書換えチェックが必要なＲＡＭ情報１９として、変数データを示すシンボルをまとめた情報が与えられるのである。
【００４１】
書換えチェックが必要なＲＡＭ情報１９として、シングルプログラムを作成する際に、使用する変数データを示すシンボルをまとめておき、そのまとめた情報が使用され得る。この場合、まとめた情報を、ＲＡＭ情報１９としてコンピュータ１０に入力すればよい。あるいは、コンピュータ１０が、シングルプログラムを解析する際に、使用されている変数データを示すシンボルを抽出してまとめたものを、ＲＡＭ情報１９として使用してもよい。これにより、書換えチェック処理は、シングルプログラムで定義されている変数データを保存するために利用される記憶領域を個別に書換え可能かチェックすることができるようになる。
【００４２】
なお、第２スケジューリング部１０ｆは、すべての変数データに対して、共通の書換えチェック処理を実施するようにしてもよいが、変数データごとに、異なる書換えチェック処理を実施するようにしてもよい。例えば、異なる書換えチェック処理として、テスト値を異ならせたり、チェック回数を異ならせたりしてもよい。この場合、第２スケジューリング部１０ｆが、異なる変数データに対して異なる書換えチェック処理を自動的に割り当てるようにしてもよいし、第２スケジューリング部１０ｆに入力するＲＡＭ情報１９に、各変数データに対して使用する書換えチェック処理を指定する情報を含ませてもよい。
【００４３】
また、書換えチェック処理の対象とするＲＡＭ３１ｂの記憶領域は、シングルプログラムで使用される変数データが保存される記憶領域だけでなく、ＲＡＭ３１ｂの他のデータが記憶される記憶領域も対象に含めてもよい。逆に、変数データが保存されるＲＡＭ３１ｂの記憶領域のすべてを書換えチェック処理の対象とするのではなく、データが壊れても影響が小さい変数データの記憶領域は、書換えチェック処理の対象から除外してもよい。
【００４４】
次に、第２スケジューリング部１０ｆが、第１スケジューリング部１０ｅが決定したスケジュール結果に、ハードウエアの異常監視処理を追加挿入して、スケジュールを更新するスケジュール更新処理の具体的な処理内容の一例を、図５のフローチャートを参照して説明する。
【００４５】
まず、最初のステップＳ１００において、第２スケジューリング部１０ｆは、入力されたＲＡＭ情報１９の中から、１つのＲＡＭ情報を選択する。続くステップＳ１１０では、選択したＲＡＭ情報、すなわち選択した変数データを示すシンボルに関して、それが保存されるＲＡＭ３１ｂの記憶領域を書換えチェックするための異常診断処理の実行に必要な時間情報を取得する。異常診断処理の実行に必要な時間情報は予め定められ、異常診断処理とともにデータとして用意されている。
【００４６】
ステップＳ１２０では、第１スケジューリング部１０ｅでのスケジュール結果に基づき、第１コア３１ｃ及び第２コア３１ｄにおいて、処理単位が実行されないコアの空き時間をサーチする。そして、第２スケジューリング部１０ｆは、サーチした１つのコアの空き時間を対象として、以下に説明する処理を実行する。
【００４７】
まず、ステップＳ１３０では、サーチしたコアの空き時間に、別コアにて実行される処理単位が、異常診断処理が診断対象とするＲＡＭ３１ｂの同じ記憶領域にアクセスするものであるかどうかを判定する。つまり、別コアにて実行される処理単位が、ステップＳ１００で選択した変数データを示すシンボルと同じシンボルを対象として処理を行うものであるかどうかを判定する。例えば、図６に示す例において、第１〜第４異常診断処理ＣＫ１〜ＣＫ４の中の第３異常診断処理ＣＫ３は、変数データを示すシンボルＷに対するものである。この第３異常診断処理ＣＫ３が、別コアとしての第１コア３１ｃで処理単位Ｂ１が行われる時間帯に対応する、第２コア３１ｄの空き時間を対象として、その空き時間に挿入可能であるかどうかが判定された場合を想定する。処理単位Ｂ１は、図６に示すように、変数データを示すシンボルＷの書き込みを行う処理を含んでいる。従って、第３異常診断処理ＣＫ３の診断対象となるＲＡＭ記憶領域と、処理単位Ｂ１によりアクセスされるＲＡＭ記憶領域とは重複している。このため、判定対象とした第２コア３１ｄの空き時間に第３異常診断処理ＣＫ３を挿入したとすると、第３異常診断処理ＣＫ３によるＲＡＭ記憶領域の書換え処理により、第１コア３１ｃでの処理単位Ｂ１におけるＲＡＭアクセスが影響を受け、処理単位Ｂ１が正常な処理を行い得ない可能性が生じる。
【００４８】
そのため、ステップＳ１３０での判定処理において、異常診断処理が対象とするＲＡＭ３１ｂの記憶領域と別コアで実行される処理単位がアクセスするＲＡＭ３１ｂの記憶領域とが重複していると判定（肯定的判定）した場合、ステップＳ１５０の処理に進む。ステップＳ１５０では、ステップＳ１２０でサーチしたコアの空き時間は、選択した変数データのためのＲＡＭ記憶領域の書換えチェック処理を行うのに適していないとみなし、次の空き時間をサーチする。そして、サーチした次の空き時間を判定対象として、再び、ステップＳ１３０の処理を実行する。
【００４９】
例えば、図６に示す例において、第３異常診断処理ＣＫ３を挿入するための次の空き時間として、第１コア３１ｃで処理単位Ｂ２が行われる時間帯に対応する、第２コア３１ｄの空き時間がサーチされた場合を想定する。この場合、処理単位Ｂ２は、変数データを示すシンボルＱの書き込みを行う処理を含んでいるだけである。このため、ステップＳ１３０での判定処理では、異常診断処理が対象とするＲＡＭ３１ｂの記憶領域と別コアで実行される処理単位がアクセスするＲＡＭ３１ｂの記憶領域とは重複していないとの否定的な判定がなされることになる。この場合、第２スケジューリング部１０ｆは、ステップＳ１４０に処理を進める。
【００５０】
ステップＳ１４０では、サーチしたコアの空き時間が、ステップＳ１１０で取得した異常診断処理の実行必要時間よりも短いかどうかを判定する。短いと判定（肯定的判定）した場合には、判定対象としているコアの空き時間では、異常診断処理の実行を完了できない。そのため、ステップＳ１５０の処理に進んで、次のコアの空き時間をサーチすることにより、判定対象とするコアの空き時間を変更する。一方、ステップＳ１４０の判定処理において、コアの空き時間は短くないと判定（否定的判定）した場合には、ステップＳ１６０の処理に進む。
【００５１】
ステップＳ１６０において、第２スケジューリング部１０ｆは、選択した変数データのためのＲＡＭ記憶領域を書換えチェックするための異常診断処理を、判定対象としたコアの空き時間に挿入し（割り付け）て、第１スケジューリング部１０ｅが決定したスケジュールを更新する。従って、並列化ツールとしてのコンピュータ１０は、このように更新されたスケジュールに従って並列プログラム３１ａ１を生成することで、別コアでの単位処理の実行に対してなんら影響を及ぼすことなく、ＲＡＭ３１ｂの記憶領域の書換えチェックを実施可能な並列プログラムを生成することができる。
【００５２】
続くステップＳ１７０では、異常診断処理を挿入したコアの空き時間の前後で、別コアが、異常診断処理と同じＲＡＭ記憶領域にアクセスする処理単位を実行するスケジュールとなっているかどうかを判定する。そのようなスケジュールになっていると判定（肯定的判定）した場合、ステップＳ１８０の処理に進む。一方、そのようなスケジュールにはなっていないと判定（否定的判定）した場合、ステップＳ２００の処理に進む。ステップＳ１８０では、挿入した異常診断処理と、その異常診断処理の前後で、同じＲＡＭ記憶領域にアクセスする処理単位との間に同期処理が設定されているか否かを判定する。同期処理が設定されていない判定した場合、ステップＳ１９０の処理に進む。一方、同期処理が設定されていると判定した場合、ステップＳ２００の処理に進む。
【００５３】
ステップＳ１９０では、異常診断処理と、その前後で同じＲＡＭ記憶領域にアクセスする処理単位との間に同期処理を追加する。この同期処理の追加により、並列プログラム３１ａ１が実行される際には、同じＲＡＭ記憶領域にアクセスする単位処理が完了した後に異常診断処理が実行される、及び／又は、異常診断処理が完了した後に同じＲＡＭ記憶領域にアクセスする単位処理が実行されることになる。これにより、異常診断処理と、その異常診断処理が診断対象とするＲＡＭ記憶領域にアクセスする単位処理との実行時間がオーバーラップすることを確実に防止することができる。
【００５４】
例えば、第１スケジューリング部１０ｅにより、図３に示すような、複数の処理単位Ａ１〜Ａ３、Ｂ１〜Ｂ２、Ｃ１〜Ｃ４の実行スケジュールが決定された場合に、図６に示すように、第１コア３１ｃで処理単位Ａ１が行われる時間帯に対応する、第２コア３１ｄの空き時間に第１異常診断処理ＣＫ１が挿入された場合を想定する。この場合、図６に示すように、第１異常診断処理ＣＫ１の処理後に、第１コア３１ｃにて、第１異常診断処理ＣＫ１と同じＲＡＭ記憶領域にアクセスする処理を含む処理単位Ａ２が実行されるスケジュールとなっている。そのため、ステップＳ１７０では肯定的な判定がなされることになる。しかし、第１異常診断処理ＣＫ１と処理単位Ａ２との間には、すでに同期処理が設定されている。このため、ステップＳ１８０では肯定的な判定がなされるので、ステップＳ１９０の処理は実行されない。
【００５５】
一方、図６に示すように、第３異常診断処理ＣＫ３が、第１コア３１ｃで処理単位Ｂ２が行われる時間帯に対応する、第２コア３１ｄの空き時間に挿入された場合、その第３異常診断処理ＣＫ３の実行前に、同じＲＡＭ記憶領域にアクセスする処理を含む処理単位Ｂ１が第１コア３１ｃにて実行されるスケジュールとなっている。また、図３に示すように、処理単位Ｂ１と処理単位Ｂ２との間には同期処理が設定されていない。このため、ステップＳ１８０にて、第３異常診断処理ＣＫ３と処理単位Ｂ１との間には、同期処理は設定されていないと判定されることになる。従って、ステップＳ１９０の処理が実行され、図６に示すように、処理単位Ｂ１と第３異常診断処理ＣＫ３との間に同期処理が設定される。
【００５６】
最後に、ステップＳ２００では、第２スケジューリング部１０ｆは、与えられたＲＡＭ情報１９に含まれる全ＲＡＭ情報（すべての変数データに対応するすべてのシンボル）の選択が完了したかどうかを判定する。まだ全ＲＡＭ情報の選択が完了していないと判定した場合には、ステップＳ１００の処理に戻り、まだ選択していないＲＡＭ情報の中から１つのＲＡＭ情報を選択する。そして、上述したステップＳ１１０〜Ｓ２００の処理を繰り返す。
【００５７】
次に、車載装置３０の構成に関して説明する。車載装置３０は、図７に示すように、マルチコアマイコン３１、通信部３２、センサ部３３、入出力ポート３４を備えて構成されている。また、マルチコアマイコン３１は、ＲＯＭ３１ａ、ＲＡＭ３１ｂ、第１コア３１ｃ、及び第２コア３１ｄを備えて構成されている。車載装置３０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用され得る。以下、車載装置３０がエンジン制御装置として適用された例について説明する。
【００５８】
第１コア３１ｃと第２コア３１ｄは、ＲＯＭ３１ａに保存された並列プログラム３１ａ１’を実行することで、例えばエンジン制御を実行する。具体的には、制御対象機器としての各アクチュエータを駆動することにより燃料噴射量、点火時期、吸入空気量などを制御する。なお、ＲＯＭ３１ａには、エンジン制御で使用される定数データなども保存されている。ＲＡＭ３１ｂは、変数データなどを一時的に格納するものであり、マルチコアマイコン３１が並列プログラム３１ａ１’を実行するときに適宜アクセスされる。通信部３２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う。センサ部３３は、エンジンの状態を検出するための各種のセンサを含む。入出力ポート３４は、エンジンを制御するための各種信号の送受信を行う。
【００５９】
車載装置３０のマルチコアマイコン３１が実行する並列プログラム３１ａ１’は、上述したように、マルチコアマイコン３１のハードウエアの異常診断処理を含んでいる。このため、マルチコアマイコン３１は、この並列プログラム３１ａ１’を実行することで、マルチコアマイコン３１のハードウエアが正常に動作しているかを診断することができる。それにより、マルチコアマイコン３１、そのハードウエアを利用した処理動作が正常になされているかを監視することができる。そして、万一、異常診断処理としての書換えチェック処理によりＲＡＭ異常が検出された場合には、マルチコアマイコン３１は、異常が検出されたＲＡＭ記憶領域の使用を禁止したり、マルチコアマイコン３１のリセットや、燃料カットなどのフェールセーフ処理などの異常処置を実行したりすればよい。
【００６０】
また、異常診断処理は、並列プログラム３１ａ１’において、処理単位が実行されない空き時間となるコア以外のコアにおいて、空き時間と並行して実行される処理単位により利用されるハードウエアが、異常診断処理の診断対象となるハードウエアと重複しないことを条件として、空き時間に異常診断処理が実行されるように、実行スケジュールが決定されている。このため、マルチコアマイコン３１は、並列プログラム３１ａ１’を実行することで、ハードウエアを利用する単位処理の実行に対してなんら影響を及ぼすことなく、そのハードウエアの異常診断処理を実行することが可能となる。
【００６１】
さらに、マルチコアマイコン３１が実行する並列プログラム３１ａ１’は、異常診断処理が実行される前後の少なくとも一方の時間帯に、異常診断処理を実行するコア以外のコアにおいて、異常診断処理が診断対象とするハードウエアを利用する単位処理が実行されるスケジュールとなっている場合、当該ハードウエアを利用する単位処理が完了した後に異常診断処理の実行を開始するための同期処理、及び／又は、異常診断処理が完了した後にハードウエアを利用する単位処理の実行を開始するための同期処理を含んでいる。このため、マルチコアマイコン３１が並列プログラム３１ａ１’を実行した際に、異常診断処理と、その異常診断処理が診断対象とするハードウエアを利用する単位処理との実行時間がオーバーラップすることを確実に防止することができる。
【００６２】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００６３】
（変形例１）
例えば、上述した実施形態では、異常診断処理として、ＲＡＭ３１ｂの書換えチェック処理を実行する例について説明した。しかしながら、異常診断処理は、ＲＡＭ３１ｂ以外のマルチコアマイコン３１のハードウエアの異常診断を行うものであってもよい。例えば、異常診断処理は、書換え可能なフラッシュＲＯＭを診断対象としてもよい。さらに、異常診断処理は、マルチコアマイコン３１に内蔵されたカウンタ回路やＡ／Ｄ変換器を診断対象として、それらが正常に動作するものであるか否かをチェックするものであってもよい。
【符号の説明】
【００６４】
１…自動並列化コンパイラ、１０…コンピュータ、１０ａ…字句解析部、１０ｂ…構文・意味解析部、１０ｃ…依存関係解析部、１０ｄ…コア割付部、１０ｅ…スケジューリング部、１０ｆ…実行順序情報出力部、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…コンパイラ、３０…車載装置、３１…マルチコアマイコン、３１ａ…ＲＯＭ、３１ａ１（３１ａ１’）…並列プログラム、３１ｂ…ＲＡＭ、３１ｃ…第１コア、３１ｄ…第２コア、３２…通信部、３３…センサ部、３４…入出力ポート
【図１】
2019159931.tif 000003
【図２】
2019159931.tif 000004
【図３】
2019159931.tif 000005
【図４】
2019159931.tif 000006
【図５】
2019159931.tif 000007
【図６】
2019159931.tif 000008
【図７】
2019159931.tif 000009