(57)【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）から複数の前記コアを有するマルチコアマイコン用に並列化した並列プログラムを生成するコンピュータが実行する方法であり、前記シングルプログラムにおける複数の前記処理の依存関係を解析して、複数の前記処理を前記マルチコアマイコンの異なる前記コア用に割り振る並列化方法であって、
各コアに割り振られる複数の前記処理毎に、依存関係がある前記処理を依存タスクに割り振り、依存関係がない前記処理を非依存タスクに割り振る分割処理手順（Ｓ１０〜Ｓ１２）と、
他コアの前記依存タスクに割り振られた前記処理の実行が完了したことを条件に、自コアの前記依存タスクに割り振られた前記処理の実行を開始するため前記自コアの前記依存タスクを待ち状態とする場合に、前記自コアの前記非依存タスクに割り振られた前記処理が実行される機能を前記並列プログラムに付与する付与処理手順（Ｓ１５）と、を備えている並列化方法。
【請求項２】
前記依存タスクと前記非依存タスクの起床時に、前記コア毎に、前記依存タスクと前記非依存タスクを一旦起床させ、前記非依存タスクを待ち状態にする機能を前記並列プログラムに付与する起床処理手順（Ｓ１４）を備えている請求項１に記載の並列化方法。
【請求項３】
前記自コアの前記依存タスクに割り振られた前記処理の実行が完了し、前記他コアの前記依存タスクが待ち状態であった場合、前記他コアの前記非依存タスクを待ち状態とし、且つ、前記他コアの前記依存タスクの待ち状態を解除する機能を前記並列プログラムに付与する切替処理手順（Ｓ１６）を備えている請求項１又は２に記載の並列化方法。
【請求項４】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）から複数の前記コアを有するマルチコアマイコン用に並列化した並列プログラムを生成するツールであり、前記シングルプログラムにおける複数の前記処理の依存関係を解析して、複数の前記処理を前記マルチコアマイコンの異なる前記コア用に割り振るコンピュータを含む並列化ツールであって、
前記コンピュータは、
各コアに割り振られる複数の前記処理毎に、依存関係がある前記処理を依存タスクに割り振り、依存関係がない前記処理を非依存タスクに割り振る分割処理手順（Ｓ１０〜Ｓ１２）と、
他コアの前記依存タスクに割り振られた前記処理の実行が完了したことを条件に、自コアの前記依存タスクに割り振られた前記処理の実行を開始するため前記自コアの前記依存タスクを待ち状態とする場合に、前記自コアの前記非依存タスクに割り振られた前記処理が実行される機能を前記並列プログラムに付与する付与処理手順（Ｓ１５）と、を実行する並列化ツール。
【請求項５】
前記依存タスクと前記非依存タスクの起床時に、前記コア毎に、前記依存タスクと前記非依存タスクを一旦起床させ、前記非依存タスクを待ち状態にする機能を前記並列プログラムに付与する起床処理手順（Ｓ１４）を更に実行する請求項４に記載の並列化ツール。
【請求項６】
前記自コアの前記依存タスクに割り振られた前記処理の実行が完了し、前記他コアの前記依存タスクが待ち状態であった場合、前記他コアの前記非依存タスクを待ち状態とし、且つ、前記他コアの前記依存タスクの待ち状態を解除する機能を前記並列プログラムに付与する切替処理手順（Ｓ１６）を更に実行する請求項４又は５に記載の並列化ツール。
【請求項７】
複数のコアを有するマルチコアマイコンを備え、前記コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）から前記マルチコアマイコン用に並列化されたものであり、複数の前記処理の依存関係を解析して、複数の前記処理が前記マルチコアマイコンの異なる前記コア用に割り振られた並列プログラムを記憶する車載装置であって、
前記並列プログラムは、
各コアの夫々に対して、依存関係がある前記処理が割り振られた依存タスクと、依存関係がない前記処理が割り振られた非依存タスクと、を含み、
前記マルチコアマイコンは、
他コアの前記依存タスクに割り振られた前記処理の実行が完了したことを条件に、自コアの前記依存タスクに割り振られた前記処理の実行を開始するため前記自コアの前記依存タスクを待ち状態とする場合に、前記自コアの前記非依存タスクに割り振られた前記処理を実行させる非依存タスク実行部（Ｓ５５、Ｓ５６）と、を備えている車載装置。
【請求項８】
前記マルチコアマイコンは、前記依存タスクと前記非依存タスクの起床時に、前記コア毎に、前記依存タスクと前記非依存タスクを一旦起床させ、前記非依存タスクを待ち状態にする起床処理部（Ｓ２１〜Ｓ２６）を備えている請求項７に記載の車載装置。
【請求項９】
前記マルチコアマイコンは、前記自コアの前記依存タスクに割り振られた前記処理の実行が完了し、前記他コアの前記依存タスクが待ち状態であった場合、前記他コアの前記非依存タスクを待ち状態とし、且つ、前記他コアの前記依存タスクの待ち状態を解除する切替処理部（Ｓ５３、Ｓ５４）を備えている請求項７又は８に記載の車載装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成された並列プログラムを実装した車載装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプロセッサシステムにより実行される組込みシステム用の逐次プログラムを複数のマクロタスク（以下、ＭＴ）に分割した後、制御依存性を有するＭＴを一つのＭＴに融合する。その後、並列化コンパイル方法では、データ依存性に基づき並列実行可能なＭＴを抽出するとともに、スタティックスケジューリングを行い、並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１で生成された並列プログラムでは、あるコアに割り振られたＭＴの実行が完了するのを待って、他のコアに割り振られたＭＴを実行させる同期処理が含まれる。このように、この並列プログラムでは、コアがＭＴを実行させるための待ち状態が発生するため、マルチコアマイコンの性能を使いきれないという問題がある。
【０００６】
本発明は、上記問題点に鑑みなされたものであり、待ち状態を減らすことができる並列プログラムを生成できる並列化方法、並列化ツール、及び、待ち状態が減らすことができる車載装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本発明は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）から複数のコアを有するマルチコアマイコン用に並列化した並列プログラムを生成するコンピュータが実行する方法であり、シングルプログラムにおける複数の処理の依存関係を解析して、複数の処理をマルチコアマイコンの異なるコア用に割り振る並列化方法であって、
各コアに割り振られる複数の処理毎に、依存関係がある処理を依存タスクに割り振り、依存関係がない処理を非依存タスクに割り振る分割処理手順（Ｓ１０〜Ｓ１２）と、
他コアの依存タスクに割り振られた処理の実行が完了したことを条件に、自コアの依存タスクに割り振られた処理の実行を開始するため自コアの依存タスクを待ち状態としている場合に、自コアの非依存タスクに割り振られた処理が実行される機能を並列プログラムに付与する付与処理手順（Ｓ１５）と、を備えている。
【０００８】
このように、本発明は、各コアに割り振られる複数の処理毎に、依存関係がある処理を依存タスクに割り振り、依存関係がない処理を非依存タスクに割り振る。これによって、各コアには、依存関係がある処理を含む依存タスクと、依存関係がない処理を含む非依存タスクが割り振られる。さらに、本発明では、自コアの依存タスクを待ち状態としている場合に、自コアの非依存タスクに割り振られた処理が実行される機能を並列プログラムに付与する。よって、本発明では、各コアが依存タスクの処理の実行を待ち状態としている間に、非依存タスクの処理を実行する並列プログラムとすることができる。つまり、本発明では、各コアが依存タスクの処理と非依存タスクの処理の両方を実行しない待ち状態を減らすことができる並列プログラムを生成できる。
【０００９】
また、本発明のさらなる特徴は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）から複数のコアを有するマルチコアマイコン用に並列化した並列プログラムを生成するツールであり、シングルプログラムにおける複数の処理の依存関係を解析して、複数の処理をマルチコアマイコンの異なるコア用に割り振るコンピュータを含む並列化ツールであって、
コンピュータは、
各コアに割り振られる複数の処理毎に、依存関係がある処理を依存タスクに割り振り、依存関係がない処理を非依存タスクに割り振る分割処理手順（Ｓ１０〜Ｓ１２）と、
他コアの依存タスクに割り振られた処理の実行が完了したことを条件に、自コアの依存タスクに割り振られた処理の実行を開始するため自コアの依存タスクを待ち状態としている場合に、自コアの非依存タスクに割り振られた処理が実行される機能を並列プログラムに付与する付与処理手順（Ｓ１５）と、を実行する点にある。
【００１０】
これによって、上記と同様に、待ち状態を減らすことができる並列プログラムを生成できる。
【００１１】
また、本発明のさらなる特徴は、
複数のコアを有するマルチコアマイコンを備え、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（Ａ１１〜Ａ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２）からマルチコアマイコン用に並列化されたものであり、複数の処理の依存関係を解析して、複数の処理がマルチコアマイコンの異なるコア用に割り振られた並列プログラムを記憶する車載装置であって、
並列プログラムは、
各コアの夫々に対して、依存関係がある処理が割り振られた依存タスクと、依存関係がない処理が割り振られた非依存タスクと、を含み、
マルチコアマイコンは、
他コアの依存タスクに割り振られた処理の実行が完了したことを条件に、自コアの依存タスクに割り振られた処理の実行を開始するため自コアの依存タスクを待ち状態としている場合に、自コアの非依存タスクに割り振られた処理を実行させる非依存タスク実行部（Ｓ５５）と、を備えている点にある。
【００１２】
このように、本発明は、各コアの夫々に対して、依存関係がある処理が割り振られた依存タスクと、依存関係がない処理が割り振られた非依存タスクとを含む並列プログラムを含んでいる。この並列プログラムは、マルチコアマイコン用に並列化されたものである。そして、マルチコアマイコンは、自コアが依存タスクを待ち状態としている場合に、自コアの非依存タスクに割り振られた処理を実行させる。このため、本発明は、各コアが依存タスクの処理と非依存タスクの処理の両方を実行しない待ち状態を減らすことができる。
【００１３】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態における並列化ツールの概略構成を示すブロック図である。
【図２】第１実施形態における車載装置の概略構成を示すブロック図である。
【図３】第１実施形態における並列化方法の一部を示す図面である。
【図４】実施形態における並列プログラムの概略構成を示すイメージ図である。
【図５】実施形態におけるタスク起床時の処理動作を示すフローチャートである。
【図６】実施形態における依存タスク実行時の処理動作を示すフローチャートである。
【図７】実施形態における非依存タスク実行時の処理動作を示すフローチャートである。
【図８】実施形態における同期処理時の処理動作を示すフローチャートである。
【図９】実施形態における第１終了処理時の処理動作を示すフローチャートである。
【図１０】実施形態における第２終了処理時の処理動作を示すフローチャートである。
【図１１】実施形態における第１コアと第２コアの処理動作を示す図面である。
【発明を実施するための形態】
【００１５】
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理Ａ１１〜Ａ１４などから第１コア２１ｃと第２コア２１ｄを有するマルチコアマイコン２１用に並列化した並列プログラム２１ａ１を生成する例を採用する。この処理は、処理ブロックやマクロタスク（以下、ＭＴ）などと言い換えることができる。また、マルチコアマイコンは、マルチコアプロセッサと言い換えることができる。
【００１６】
このように、シングルプログラムから並列プログラム２１ａ１を生成する背景としては、マイコンの発熱量増大や消費電力増加、クロック周波数の限界問題から、コアを複数もつマルチコアマイコンが主流になることなどがあげられる。また、並列プログラム２１ａ１としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
【００１７】
なお、並列プログラム２１ａ１を生成する際には、特開２０１５−１８０７号公報に記載されているように、シングルプログラムにおける複数のＭＴの依存関係を解析して、複数のＭＴをマルチコアプロセッサ２１の異なるコア２１ｃ、２１ｄ用に割り振る。この点に関しては、特開２０１５−１８０７号公報を参照されたい。
【００１８】
本実施形態では、シングルプログラムの一例として、処理Ａ１１〜Ｓ１４、Ａ２１、Ａ２２、Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２を備えたものを採用する。この複数の処理Ａ１１などは、お互いに依存関係がある処理が含まれている。本実施形態では、処理Ａ２１、Ａ２２、Ｂ２１、Ｂ２２が依存関係のない処理であり、処理Ａ１１などが他の処理と依存関係がある例を採用する。
【００１９】
依存関係とは、例えば、ある処理が、自身よりも先に実行された処理で更新されたデータを参照するなどの関係である。つまり、複数の処理は、シングルプログラムにおける実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。そして、後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。
【００２０】
ここで、図１を用いて、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、並列プログラム２１ａ１を生成する。コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体１８には、自動並列化コンパイラ１が記憶されている。なお、ＨＤＤは、hard disk driveの略称である。ＣＰＵは、Central Processing Unitの略称である。ＲＯＭは、Read Only Memoryの略称である。ＲＡＭは、Random Access Memoryの略称である。コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照されたい。
【００２１】
自動並列化コンパイラ１は、並列プログラム２１ａ１を生成するための手順を含んでいる。自動並列化コンパイラ１は、並列化方法に相当する。つまり、自動並列化コンパイラ１は、並列化方法を含むプログラムである。自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものに加えて、分割処理手順と付与処理手順を含んでいる。分割処理手順と付与処理手順は、後程説明する。
【００２２】
次に、車載装置２０構成に関して説明する。車載装置２０は、図２に示すように、マルチコアプロセッサ２１、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。また、マルチコアプロセッサ２１は、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄを備えて構成されている。車載装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。しかしながら、並列プログラム２１ａ１は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
【００２３】
ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０、通信部４３０、センサ部４５０、入出力ポート４６０を参照されたい。
【００２４】
ＲＯＭ２１ａには、自動並列化コンパイラ１を用いて生成された並列プログラム２１ａ１が記憶されている。第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御を行う。並列プログラム２１ａ１は、第１コア２１ｃが実行するプログラムと、第２コア２１ｄが実行するプログラムとを含んでいる。
【００２５】
次に、図３、図４を用いて、コンピュータ１０が自動並列化コンパイラ１を実行した際の処理動作に関して説明する。コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。
【００２６】
コンピュータ１０は、特開２０１５−１８０７号公報に記載された方法と同様に、シングルプログラムの各処理単位でデータの依存関係を解析したり、シングルプログラムから並列化可能な処理を抽出したりする。そして、コンピュータ１０は、特開２０１５−１８０７号公報に記載された方法と同様に、依存関係と処理時間をもとに、複数の処理を第１コア２１ｃと第２コア２１ｄとに割り振る。ここでは、この時点で、処理Ａ１１〜Ａ１４、Ａ２１、Ａ２２が第１コア２１ｃに割り振られ、処理Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２が第２コア２１ｄに割り振られる例を採用する。以下においては、第１コア２１ｃに割り振られた処理Ａ１１〜Ａ１４、Ａ２１、Ａ２２を第１処理群、第２コア２１ｄに割り振られた処理Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２を第２処理群とも称する。
【００２７】
その後、コンピュータ１０は、各処理群を対象として、図３のフローチャートで示すように動作する。
【００２８】
ステップＳ１０では、依存関係があるか否かを判定する（分割処理）。コンピュータ１０は、処理に依存関係があるか否かを判定し、依存関係があると判定した場合、ステップＳ１１へ進み、依存関係があると判定しなかった場合、ステップＳ１２へ進む。コンピュータ１０は、例えば今回の対象が処理Ａ１１であった場合、依存関係があると判定するためステップＳ１１へ進み、今回の対象が処理Ａ２１であった場合、依存関係があると判定しないためステップＳ１２へ進む。
【００２９】
ステップＳ１１では、依存タスクに割り振る（分割処理）。コンピュータ１０は、ステップＳ１０で依存関係ありと判定した処理を依存タスクに割り振る。一方、ステップＳ１２では、非依存タスクに割り振る（分割処理）。コンピュータ１０は、ステップＳ１０で依存関係ありと判定しなかった処理を非依存タスクに割り振る。
【００３０】
ステップＳ１３では、全処理の割り振りが終了したか否かを判定する。コンピュータ１０は、全処理の割り振りが終了したと判定した場合、ステップＳ１４へ進み、全処理の割り振りが終了したと判定しなかった場合、ステップＳ１０へ戻る。
【００３１】
よって、コンピュータ１０は、図４に示すように、第１処理群の処理Ａ１１〜Ａ１４、Ａ２１、Ａ２２を対象とした場合、処理Ａ１１〜Ａ１４を依存タスクである第１タスクに割り振り、処理Ａ２１、Ａ２２を非依存タスクである第２タスクに割り振る。また、コンピュータ１０は、第２処理群の処理Ｂ１１〜Ｂ１４、Ｂ２１、Ｂ２２を対象とした場合、処理Ｂ１１〜Ｂ１４を依存タスクである第３タスクに割り振り、処理Ｂ２１、Ｂ２２を非依存タスクである第４タスクに割り振る。
【００３２】
このように、コンピュータ１０は、ステップＳ１０〜Ｓ１２を実行することで、各コア２１ｃ、２１ｄに割り振られる複数の処理毎に、依存関係がある処理を依存タスクに割り振り、依存関係がない処理を非依存タスクに割り振る。よって、ステップＳ１０〜Ｓ１２は、分割処理手順に相当するとも言える。
【００３３】
なお、第１タスク〜第４タスクは、プログラムの実行単位である。第１タスク〜第４タスクは、例えば８ｍｓなどの所定時間毎に実行される。処理Ａ１１などは、各タスクで行われる演算の関数などである。また、各タスクは、SUSPENDED状態、READY状態、RUNNING状態、WAITING状態がある。後程説明する待ち状態及び処理待ち状態は、WAITING状態に相当する。
【００３４】
ステップＳ１４では、タスク起床時にコア毎に依存タスクと非依存タスクを同時起床させ、非依存タスクを処理待ち状態とする機能を並列プログラム２１ａ１に付与する（起床処理）。このように、コンピュータ１０は、第１タスクと第２タスクの起床時に、第１タスクと第２タスクを一旦起床させ、第２タスクを待ち状態にする機能を並列プログラム２１ａ１に付与する。また、コンピュータ１０は、第３タスクと第４タスクの起床時に、第３タスクと第４タスクを一旦起床させ、第４タスクを待ち状態にする機能を並列プログラム２１ａ１に付与する。よって、ステップＳ１４は、起床処理手順に相当するとも言える。
【００３５】
なお、起床時とは、処理を実行するうえで必要となる準備が整っている状態から、整っている状態に遷移した時である。起床後は、より高い優先度または同一優先度を持つタスクの処置が実行中のため、各コア２１ｃ、２１ｄなどのデバイスの利用権が割り当てられるのを待っている状態に遷移する。また、各コア２１ｃ、２１ｄなどのデバイス利用権が割り当てられると実行中状態に遷移する。
【００３６】
ステップＳ１５では、同期待ち状態になった時、依存タスクを処理待ち状態とし、非依存タスクの処理待ち状態を解除する機能を並列プログラム２１ａ１に付与する（付与処理）。このように、コンピュータ１０は、他コアの依存タスクに割り振られた処理の実行が完了したことを条件として自コアの依存タスクに割り振られた処理の実行を開始するために、自コアの依存タスクを待ち状態とする機能を並列プログラム２１ａ１に付与する。この待ち状態は、同期待ち状態及び処理待ち状態に相当する。そして、コンピュータ１０は、同期待ち状態としているときに、自コアの非依存タスクに割り振られた処理が実行される機能を並列プログラム２１ａ１に付与する。よって、ステップＳ１５は、付与処理手順に相当するとも言える。
【００３７】
例えば、コンピュータ１０は、第３タスクに割り振られた処理Ｂ１１の実行が完了したことを条件として第１タスクに割り振られた処理Ａ１２の実行を開始するために、第１タスクを待ち状態とする機能を並列プログラム２１ａ１に付与する。さらに、コンピュータ１０は、待ち状態としているときに、第２タスクに割り振られた処理Ａ２１が実行される機能を並列プログラム２１ａ１に付与する。
【００３８】
ステップＳ１６では、同期完了時、非依存タスクを処理待ち状態とし、依存タスクの処理待ち状態を解除する機能を並列プログラム２１ａ１に付与する（切替処理）。同期完了時とは、同期待ちの対象である他コアの処理の実行が完了した時点を示す。言い換えると、同期完了時とは、自コアの処理の実行が完了して、同期待ち状態であった他コアの処理の実行が可能になった時点である。このように、コンピュータ１０は、自コアの依存タスクに割り振られた処理の実行が完了し、他コアの依存タスクが待ち状態であった場合、他コアの非依存タスクを待ち状態とし、他コアの依存タスクの待ち状態を解除する機能を並列プログラム２１ａ１に付与する。よって、ステップＳ１６は、切替処理手順に相当するとも言える。例えば、コンピュータ１０は、第１タスクに割り振られた処理の実行が完了したとき、第３タスクが待ち状態であった場合、第４タスクを待ち状態とし、且つ、第３タスクの待ち状態を解除する機能を並列プログラム２１ａ１に付与する。
【００３９】
コンピュータ１０は、自動並列化コンパイラ１を実行することで、図４に示す並列プログラム２１ａ１を生成する。並列プログラム２１ａ１は、第１タスクに割り振られた処理Ａ１１〜Ａ１４、及び第２タスクに割り振られたＡ２１、Ａ２２が第１コア２１ｃが実行するプログラムである。また、並列プログラム２１ａ１は、第３タスクに割り振られた処理Ｂ１１〜Ｂ１４、及び第４タスクに割り振られたＢ２１、Ｂ２２が第２コア２１ｄが実行するプログラムである。
【００４０】
なお、本実施形態では、コンピュータ１０が自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する例を採用した。しかしながら、本発明は、これに限定されない。本発明は、作業者などが、特開２０１５−１８０７号公報に記載された並列化方法に加えて、ステップＳ１０〜Ｓ１６を行うことで、並列プログラム２１ａ１を生成してもよい。
【００４１】
ここで、図５〜図１１を用いて、車載装置２０の動作に関して説明する。
【００４２】
まず、車載装置２０は、タスク起床時に、図５のフローチャートで示すように動作する。ステップＳ２０では、処理を実行する。ここでの処理とは、第１処理群や第２処理群とは別の処理であり、例えば１ｍｓ毎に実行される処理である。
【００４３】
その後、マルチコアプロセッサ２１は、第１タスクと第２タスクを起床させ、第２タスクを処理待ち状態とする（起床処理部、ステップＳ２１〜Ｓ２３）。同様に、マルチコアプロセッサ２１は、第３タスクと第４タスクを起床させ、第３タスクを処理待ち状態とする（起床処理部、ステップＳ２４〜Ｓ２６）。
【００４４】
なお、本実施形態では、二つのコア２１ｃ、２１ｄを有した例を採用している。マルチコアプロセッサ２１は、三つ以上のコアを有していた場合、全てのコアに対して、依存タスクと非依存タスクを一旦起床させ、非依存タスクを待ち状態にする（起床処理部）。
【００４５】
ステップＳ２７では、処理を実行する。ここでの処理とは、第１処理群や第２処理群とは別の処理であり、例えば１ｍｓ毎に実行される処理である。
【００４６】
これによって、各コア２１ｃ、２１ｄは、タスク起床後に、依存タスクを実行することになる。各コア２１ｃ、２１ｄは、依存タスクを実行する場合、図６のフローチャートに示すように動作する。
【００４７】
各コア２１ｃ、２１ｄは、ステップＳ３０で処理を実行し、ステップＳ３１で同期処理を行う。第１コア２１ｃは、ステップＳ３０とステップＳ３１を繰り返し行う。つまり、第１コア２１ｃは、初回のステップＳ３０で処理Ａ１１を実行し、次のステップＳ３０で処理Ａ１２を実行するなどして、処理Ａ１１〜Ａ１４を順番に実行する。一方、第２コア２１ｄは、ステップＳ３０とステップＳ３１を繰り返し行う。つまり、第２コア２１ｄは、初回のステップＳ３０で処理Ｂ１１を実行し、次のステップＳ３０で処理Ｂ１２を実行するなどして、処理Ｂ１１〜Ｂ１４を順番に実行する。
【００４８】
例えば、図１１に示すように、第１コア２１ｃは、処理Ａ１１の実行が完了して同期処理を行うことで、第２コア２１ｄによる処理Ｂ１１の実行が完了するのを待つ処理待ち状態となる。また、第１コア２１ｃは、第２コア２１ｄによる処理Ｂ１１の実行時間が伸びた場合などに、処理待ち状態となる。
【００４９】
同様に、第２コア２１ｄは、処理Ｂ１２の実行が完了して同期処理を行うことで、第１コア２１ｃによる処理Ａ１２の実行が完了するのを待つ処理待ち状態となる。また、第２コア２１ｄは、第１コア２１ｃによる処理Ａ１２の実行時間が伸びた場合などに、処理待ち状態となる。
【００５０】
そして、ステップＳ３２では、第１終了処理を行う。この第１終了処理に関して、後程説明する。
【００５１】
ここで、同期処理に関して、図８を用いて説明する。各コア２１ｃ、２１ｄは、同期処理を行う場合、図８にフローチャートで示すように動作する。なお、ここでは、一例として、自コアを第１コア２１ｃ、他コアを第２コア２１ｄとする。
【００５２】
ステップＳ５０では、自コア同期待ちを記憶する。言い換えると、ステップＳ５０では、同期待ち履歴を保存する。マルチコアプロセッサ２１は、第１コア２１ｃが同期処理を行う場合、第１コア２１ｃが同期待ちしていることをＲＡＭ２１ｂなどに記憶する。
【００５３】
ステップＳ５１では、他コアが全て同期待ち状態であるか否かを判定する。マルチコアプロセッサ２１は、ＲＡＭ２１ｂなどを確認して、第２コア２１ｄが同期待ち状態であるか否かを判定し、同期待ち状態であると判定した場合はステップＳ５２へ進み、同期待ち状態であると判定しなかった場合はステップＳ５５へ進む。なお、コアが三つ以上の場合、自コアは、他のコアが全て同期待ち状態であると判定した場合にステップＳ５２へ進み、他のコアが全て同期待ち状態であると判定してない場合にステップＳ５５へ進む。
【００５４】
ステップＳ５２では、同期待ち履歴をクリアする。マルチコアプロセッサ２１は、第１コア２１ｃの同期待ち履歴だけでなく、第２コア２１ｄの同期待ち履歴をクリアする。
【００５５】
ステップＳ５３では、他コアの依存タスクの処理待ち状態を解除する（切替処理部）。そして、ステップＳ５４では、他コアの非依存タスクを処理待ち状態に設定する（切替処理部）。このように、マルチコアプロセッサ２１は、自コアの依存タスクにおける処理の事項が完了し、他コアの依存タスクが待ち状態であった場合、他コアの非依存タスクを待ち状態とし、且つ、他コアの依存タスクの待ち状態を解除することになる。よって、第１コア２１ｃは、第１タスクにおける処理の実行が完了して同期処理を行う際に、第３タスクが処理待ち状態であった場合、第４タスクを処理待ち状態とし、第３タスクの処理待ち状態を解除する。
【００５６】
ステップＳ５５では、自コアの非依存タスクの処理待ち状態を解除する（非依存タスク実行部）。そして、ステップＳ５６では、自コアの依存タスクを処理待ち状態に設定する（非依存タスク実行部）。つまり、マルチコアプロセッサ２１は、第３タスクに割り振られた処理の実行が完了したことを条件に、第１タスクに割り振られた処理の実行を開始するために第１タスクを待ち状態とする場合に、第２タスクに割り振られた処理を実行させる。例えば、第１コア２１ｃは、図１１に示すように、第２コア２１ｄによる処理Ｂ１１の実行が完了したことを条件に、処理Ａ１２を開始するために第１タスクを処理待ち状態とする場合に、処理Ａ２１を実行させる。
【００５７】
このように、第１タスク及び第３タスクは、自コアで処理待ち状態とし、他コアから処理待ち状態が解除される。一方、第２タスク及び第４タスクは、他コアから処理待ち状態とされ、自コアで処理待ち状態を解除する。
【００５８】
ここで、各コア２１ｃ、２１ｄは、非依存タスクを実行する場合、図７のフローチャートに示すように動作する。各コア２１ｃ、２１ｄは、ステップＳ４０で処理を実行し、ステップＳ４１で第２終了処理を行う。第１コア２１ｃは、第２タスクに割り振られた処理の分だけステップＳ４０を繰り返し行う。つまり、第１コア２１ｃは、初回のステップＳ４０で処理Ａ２１を実行し、次のステップＳ４０で処理Ａ２２を実行した後に、第２終了処理を実行する。このように、第１コア２１ｃは、第２タスクに割り振られた処理Ａ２１、Ａ２２を順番に実行する。一方、第２コア２１ｄは、第４タスクに割り振られた処理の分だけステップＳ４０を繰り返し行う。つまり、第２コア２１ｄは、初回のステップＳ４０で処理Ｂ２１を実行し、次のステップＳ４０で処理Ｂ２２を実行した後に、第２終了処理を実行する。このように、第２コア２１ｄは、第４タスクに割り振られた処理Ｂ２１、Ｂ２２を順番に実行する。
【００５９】
このように、第１コア２１ｃは、第１タスクの処理待ち状態のときに、第２タスクの処理を実行する。同様に、第２コア２１ｄは、第３タスクの処理待ち状態のときに、第４タスクの処理を実行する。例えば、図１１に示すように、第１コア２１ｃは、処理Ｂ１１の実行が完了するのを待つ処理待ち状態の間に処理Ａ２１を実行する。また、第２コア２１ｄは、処理Ａ１２の実行が完了するのを待つ処理待ち状態の間に処理Ｂ２１を実行する。
【００６０】
なお、各コア２１ｃ、２１ｄは、処理の実行中に処理待ち状態になると、その処理を中断する。そして、各コア２１ｃ、２１ｄは、処理を中断している際に、処理待ち状態が解除されると、中断していた処理の実行を再開する。例えば、図１１の例では、第１コア２１ｃは、処理Ａ２１を実行中に第２タスクが処理待ち状態になり、その後、処理Ａ１３の実行が完了して第１タスクが処理待ち状態になり、且つ第２タスクの処理待ち状態が解除されると、処理Ａ２１の実行を再開する。さらに、第１コア２１ｃは、処理Ａ２１の実行が完了した時点で、第１タスクの処理待ち状態が継続していた場合は、処理Ａ２２を実行する。
【００６１】
ここで、第１終了処理に関して、図９を用いて説明する。各コア２１ｃ、２１ｄは、第１終了処理を行う場合、図９にフローチャートで示すように動作する。
【００６２】
ステップＳ６０では、自コアの依存タスクの完了履歴を記憶する。第１コア２１ｃは、第１タスクの完了履歴をＲＡＭ２１ｂなどに記憶する。同様に、第２コア２１ｄは、第３タスクの完了履歴をＲＡＭ２１ｂなどに記憶する。
【００６３】
ステップＳ６１では、自コアの非依存タスクが完了か否かを判定する。第１コア２１ｃは、第２タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ６４へ進み、完了していると判定しなかった場合はステップＳ６２へ進む。同様に、第２コア２１ｄは、第４タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ６４へ進み、完了していると判定しなかった場合はステップＳ６２へ進む。
【００６４】
ステップＳ６２では、自コアの非依存タスクの処理待ち状態を解除する。第１コア２１ｃは、第２タスクの処理待ち状態を解除する。同様に、第２コア２１ｄは、第４タスクの処理待ち状態を解除する。
【００６５】
ステップＳ６３では、自コアの依存タスクを処理待ち状態に設定する。第１コア２１ｃは、第１タスクを処理待ち状態とする。同様に、第２コア２１ｄは、第３タスクを処理待ち状態とする。
【００６６】
ステップＳ６４では、他コアのタスクが全て完了しているか否かを判定する。第１コア２１ｃは、第３タスクと第４タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ６５へ進み、完了していると判定しなかった場合はステップＳ６４の判定を繰り返す。同様に、第２コア２１ｄは、第１タスクと第２タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ６５へ進み、完了していると判定しなかった場合はステップＳ６４の判定を繰り返す。
【００６７】
ステップＳ６５では、全コアのタスクを全て終了する。第１コア２１ｃ及び第２コア２１ｄは、全コアのタスクを全て終了する。例えば、第１コア２１ｃは、自身のタスクに加えて、第２コア２１ｄのタスクを含む全てのタスクを終了する。しかしながら、本発明は、これに限定されない。また、ここでの全てのタスクとは、図５のフローチャートで起床した全てのタスクである。
【００６８】
このように、各コア２１ｃ、２１ｄは、自コアの非依存タスクが完了していない時は、非依存タスクを実行し、非依存タスクが完了している時は、他コアの完了を待つ。
【００６９】
次に、第２終了処理に関して、図１０を用いて説明する。各コア２１ｃ、２１ｄは、第２終了処理を行う場合、図１０にフローチャートで示すように動作する。
【００７０】
ステップＳ７０では、自コアの非依存タスクの完了履歴を記憶する。第１コア２１ｃは、第２タスクの完了履歴をＲＡＭ２１ｂなどに記憶する。同様に、第２コア２１ｄは、第４タスクの完了履歴をＲＡＭ２１ｂなどに記憶する。
【００７１】
ステップＳ７１では、自コアの依存タスクが完了しているか否かを判定する。第１コア２１ｃは、第１タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ７２へ進み、完了していると判定しなかった場合はステップＳ７１での判定を繰り返す。同様に、第２コア２１ｄは、第３タスクが完了しているか否かを判定し、完了していると判定した場合はステップＳ７２へ進み、完了していると判定しなかった場合はステップＳ７１での判定を繰り返す。
【００７２】
ステップＳ７２では、自コアの依存タスクの処理待ち状態を解除する。第１コア２１ｃは、第１タスクの処理待ち状態を解除する。同様に、第２コア２１ｄは、第３タスクの処理待ち状態を解除する。このように、各コア２１ｃ、２１ｄは、自身に割り振られた依存タスクが完了していない間、ステップＳ７１をループして、同期待ちする。
【００７３】
ステップＳ７３では、自コアの非依存タスクを処理待ち状態に設定する。第１コア２１ｃは、第２タスクを処理待ち状態とする。同様に、第２コア２１ｄは、第４タスクを処理待ち状態とする。
【００７４】
以上のように、自動並列化コンパイラ１は、各コア２１ｃ、２１ｄに割り振られる複数の処理毎に、依存関係がある処理を第１タスク及び第３タスクに割り振り、依存関係がない処理を第２タスク及び第４タスクに割り振る。これによって、各コア２１ｃ、２１ｄには、依存関係がある処理を含む第１タスク及び第３タスクと、依存関係がない処理を含む第２タスクと第４タスクが割り振られる。
【００７５】
さらに、自動並列化コンパイラ１では、第１コア２１ｃの第１タスクを待ち状態としている場合に、第１コア２１ｃの第２タスクに割り振られた処理が実行される機能を並列プログラム２１ａ１に付与する。よって、自動並列化コンパイラ１では、第１コア２１ｃが第１タスクの処理の実行を待ち状態としている間に、第２タスクの処理を実行する並列プログラム２１ａ１とすることができる。同様に、自動並列化コンパイラ１では、第２コア２１ｄが第３タスクの処理の実行を待ち状態としている間に、第４タスクの処理を実行する並列プログラム２１ａ１とすることができる。
【００７６】
つまり、自動並列化コンパイラ１では、第１コア２１ｃが第１タスクの処理と、第２タスクの処理の両方を実行しない待ち状態を減らすことができる並列プログラム２１ａ１を生成できる。同様に、自動並列化コンパイラ１では、第２コア２１ｄが第３タスクの処理と、第４タスクの処理の両方を実行しない待ち状態を減らすことができる並列プログラム２１ａ１を生成できる。
【００７７】
この事により、自動並列化コンパイラ１は、同期方式のメリットを生かしたまま、待ち状態によるマルチコアマイコン２１の性能低下を抑える事が可能な並列プログラム２１ａ１を生成できる。また、自動並列化コンパイラ１は、待ち状態を減らすための分割やスケジューリング調整にかかる工数も抑える事ができる。
【００７８】
また、コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。よって、コンピュータ１０は、自動並列化コンパイラ１と同様の効果を奏することができる。
【００７９】
また、車載装置２０は、各コア２１ｃ、２１ｄの夫々に対して、依存関係がある処理が割り振られた第１タスクまたは第３タスクと、依存関係がない処理が割り振られた第２タスクまたは第４タスクとを含む並列プログラム２１ａ１を含んでいる。この並列プログラム２１ａ１は、マルチコアマイコン２１に並列化されたものである。そして、マルチコアマイコン２１は、第１コア２１ｃが第１タスクを待ち状態としている場合に、第２タスクに割り振られた処理を実行させる。同様に、マルチコアマイコン２１は、第２コア２１ｄが第３タスクを待ち状態としている場合に、第４タスクに割り振られた処理を実行させる。このため、車載装置２０は、第１コア２１ｃが第１タスクの処理と、第２タスクの処理の両方を実行しない待ち状態を減らすことができる。同様に、車載装置２０は、第２コア２１ｄが第３タスクの処理と、第４タスクの処理の両方を実行しない待ち状態を減らすことができる。
【００８０】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【符号の説明】
【００８１】
１  自動並列化コンパイラ、１０  コンピュータ、１１  ディスプレイ、１２  ＨＤＤ、１３  ＣＰＵ、１４  ＲＯＭ、１５  ＲＡＭ、１６  入力装置、１７  読取部、１８  記憶媒体、２０  車載装置、２１  マルチコアプロセッサ、２１ａ  ＲＯＭ、２１ａ１  並列プログラム、２１ｂ  ＲＡＭ、２１ｃ  第１コア、２１ｄ  第２コア、２２  通信部、２３  センサ部、２４  入出力ポート
【図１】
0006464982.tif 000002
【図２】
0006464982.tif 000003
【図３】
0006464982.tif 000004
【図４】
0006464982.tif 000005
【図５】
0006464982.tif 000006
【図６】
0006464982.tif 000007
【図７】
0006464982.tif 000008
【図８】
0006464982.tif 000009
【図９】
0006464982.tif 000010
【図１０】
0006464982.tif 000011
【図１１】
0006464982.tif 000012