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