(57)【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）から、共通のバス（２１ｅ）にアクセスする複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
前記並列プログラムは、自コアに割り振られた前記処理の実行が完了した場合に、他コアに割り振られた前記処理の実行が完了するのを待って、自コアに割り振られた次の前記処理を実行させる同期処理を含むものであり、
前記並列プログラムから前記同期処理が行われる場所を検出する検出手順（Ｓ１０）と、
検出された前記同期処理において、前記自コアに割り振られた前記処理の実行が完了してから、前記他コアに割り振られた前記処理の実行が完了するまでの待ち時間を算出する算出手順（Ｓ１１、Ｓ１２）と、
前記自コアが待っている間に前記自コアによる前記バスへのアクセスを抑制する抑制処理を、前記並列プログラムに追加する手順であり、算出された前記待ち時間に応じて前記抑制処理の実行時間である抑制時間を決定し、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理を追加する追加手順（Ｓ１３）と、を備えている並列化方法。
【請求項２】
前記追加手順では、前記抑制処理として、前記自コアに対して前記バスへのアクセスを禁止する禁止命令を追加するものであり、前記抑制時間に対応した回数の前記禁止命令を追加する請求項１に記載の並列化方法。
【請求項３】
前記追加手順では、前記自コアに割り振られた前記処理の実行が完了してから、予め設定した条件を満たすまで前記自コアによる前記バスへのアクセスを禁止することで、前記抑制時間の間、前記自コアによる前記バスへのアクセスを禁止する前記抑制処理を追加する請求項１に記載の並列化方法。
【請求項４】
前記追加手順では、前記自コアに割り振られた前記処理の実行が完了してからの経過時間が、前記条件として予め設定した時間に達するまで前記自コアによる前記バスへのアクセスを禁止することで、前記抑制時間の間、前記自コアによる前記バスへのアクセスを禁止する前記抑制処理を追加する請求項３に記載の並列化方法。
【請求項５】
前記追加手順では、前記自コアに割り振られた前記処理の実行が完了してからの前記自コアの動作タイミングが、前記条件として予め設定した回数に達するまで前記自コアによる前記バスへのアクセスを禁止することで、前記抑制時間の間、前記自コアによる前記バスへのアクセスを禁止する前記抑制処理を追加する請求項３に記載の並列化方法。
【請求項６】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）から、共通のバス（２１ｅ）にアクセスする複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成するコンピュータを備えた並列化ツールであって、
前記並列プログラムは、自コアに割り振られた前記処理の実行が完了した場合に、他コアに割り振られた前記処理の実行が完了するのを待って、自コアに割り振られた次の前記処理を実行させる同期処理を含むものであり、
前記並列プログラムから前記同期処理が行われる場所を検出する検出部（Ｓ１０）と、
検出された前記同期処理において、前記自コアに割り振られた前記処理の実行が完了してから、前記他コアに割り振られた前記処理の実行が完了するまでの待ち時間を算出する算出部（Ｓ１１、Ｓ１２）と、
前記自コアが待っている間に前記自コアによる前記バスへのアクセスを抑制する抑制処理を、前記並列プログラムに追加するものであり、算出された前記待ち時間に応じて前記抑制処理の実行時間である抑制時間を決定し、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理を追加する追加部（Ｓ１３）と、を備えている並列化ツール。
【請求項７】
前記追加部では、前記抑制処理として、前記自コアに対して前記バスへのアクセスを禁止する禁止命令を追加するものであり、前記抑制時間に対応した回数の前記禁止命令を追加する請求項６に記載の並列化ツール。
【請求項８】
前記追加部では、前記自コアに割り振られた前記処理の実行が完了してから、予め設定した条件を満たすまで前記自コアによる前記バスへのアクセスを禁止することで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理を追加する請求項６に記載の並列化ツール。
【請求項９】
前記追加部では、前記自コアに割り振られた前記処理の実行が完了してからの経過時間が、前記条件として予め設定した時間に達するまで前記自コアによる前記バスへのアクセスを禁止することで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理を追加する請求項８に記載の並列化ツール。
【請求項１０】
前記追加部では、前記自コアに割り振られた前記処理の実行が完了してからの前記自コアの動作タイミングが、前記条件として予め設定した回数に達するまで前記自コアによる前記バスへのアクセスを禁止することで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理を追加する請求項８に記載の並列化ツール。
【請求項１１】
共通のバス（２１ｅ）にアクセスする複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、前記コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）から前記マルチコアマイコン用に並列化されたものであり複数の前記処理が前記マルチコアマイコンの異なる前記コア用に割り振られた並列プログラム（２１ａ１）と、を備えた車載装置であって、
前記並列プログラムは、
自コアに割り振られた前記処理の実行が完了した場合に、他コアに割り振られた前記処理の実行が完了するのを待って、自コアに割り振られた次の前記処理を実行させる同期処理を含むものであり、
前記並列プログラムから前記同期処理が行われる場所が検出され、
検出された前記同期処理において、前記自コアに割り振られた前記処理の実行が完了してから、前記他コアに割り振られた前記処理の実行が完了するまでの待ち時間が算出され、
前記並列プログラムには、前記自コアが待っている間に前記自コアによる前記バスへのアクセスを抑制時間の間禁止する抑制処理が追加されており、前記抑制処理の実行時間である前記抑制時間が、算出された前記待ち時間に応じて決定されており、
複数の前記コアの夫々は、自身に割り振られた前記処理と、前記同期処理と、前記抑制処理を実行する車載装置。
【請求項１２】
前記並列プログラムは、前記抑制処理として、前記自コアに対して前記バスへのアクセスを禁止する禁止命令が追加されており、前記抑制時間に対応した回数の前記禁止命令が追加されている請求項１１に記載の車載装置。
【請求項１３】
前記並列プログラムは、前記自コアに割り振られた前記処理の実行が完了してから、予め設定した条件を満たすまで前記自コアによる前記バスへのアクセスを禁止させることで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理が追加されている請求項１１に記載の車載装置。
【請求項１４】
前記並列プログラムは、前記自コアに割り振られた前記処理の実行が完了してからの経過時間が、前記条件として予め設定した時間に達するまで前記自コアによる前記バスへのアクセスを禁止させることで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理が追加されている請求項１３に記載の車載装置。
【請求項１５】
前記並列プログラムは、前記自コアに割り振られた前記処理の実行が完了してからの前記自コアの動作タイミングが、前記条件として予め設定した回数に達するまで前記自コアによる前記バスへのアクセスを禁止させることで、前記自コアによる前記バスへのアクセスを前記抑制時間の間禁止する前記抑制処理が追加されている請求項１３に記載の車載装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成された並列プログラムを実装した車載装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプロセッサシステムにより実行される組込みシステム用の逐次プログラムを複数のマクロタスク（以下、ＭＴ）に分割した後、制御依存性を有するＭＴを一つのＭＴに融合する。その後、並列化コンパイル方法では、データ依存性に基づき並列実行可能なＭＴを抽出するとともに、スタティックスケジューリングを行い、並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１で生成された並列プログラムでは、あるコアに割り振られたＭＴの実行が完了するのを待って、他のコアに割り振られたＭＴを実行させる待合せ処理が含まれる。
【０００６】
従来技術ではないが、マルチコアマイコンでは、コア間で共通に使用しているバスを介して記憶部に、各コアがＭＴの実行が完了したことを示す値を記憶するとともに、記憶部の値をポーリングしながら待合せ処理を行うことが考えられる。
【０００７】
この場合、ＭＴの実行中であるコアは、ＭＴを実行するためにバスにアクセスする。一方、既にＭＴの実行が完了している待ち状態のコアは、他のコアがＭＴの実行が完了したか否かを確認するためにバスにアクセスする。よって、マルチコアマイコンでは、バスアクセスが競合するという問題がおこりうる。
【０００８】
また、従来技術ではないが、このような競合を抑制するために、並列化方法では、コアが待ち状態時にバスアクセスすることを抑制するためにｎｏｐ（no operationの略称）命令を並列プログラムに付与することも考えられる。さらに、このｎｏｐ命令の回数は、経験的であったり、トライアンドエラーで決められることが考えられる。このため、並列プログラムは、ｎｏｐ命令の回数が適切な回数よりも多かったり少なかったりすることが起こりうる。従って、並列プログラムは、待ち状態の時間が長くなり、マルチコアマイコンの性能を活かしきれないという問題がある。
【０００９】
本発明は、上記問題点に鑑みなされたものであり、バスアクセスの競合を減らしつつ、待ち時間が長くなることを抑制可能な並列プログラムを作成できる並列化方法、並列化ツール、及びバスアクセスの競合が減り且つ待ち時間が長くなることを抑制できる車載装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）から、共通のバスにアクセスする複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
並列プログラムは、自コアに割り振られた処理の実行が完了した場合に、他コアに割り振られた処理の実行が完了するのを待って、自コアに割り振られた次の処理を実行させる同期処理を含むものであり、
並列プログラムから同期処理が行われる場所を検出する検出手順（Ｓ１０）と、
検出された同期処理において、自コアに割り振られた処理の実行が完了してから、他コアに割り振られた処理の実行が完了するまでの待ち時間を算出する算出手順（Ｓ１１、Ｓ１２）と、
自コアが待っている間に自コアによるバスへのアクセスを抑制する抑制処理を、並列プログラムに追加する手順であり、算出された待ち時間に応じて抑制処理の実行時間である抑制時間を決定し、自コアによるバスへのアクセスを抑制時間の間禁止する抑制処理を追加する追加手順（Ｓ１３）と、を備えている点にある。
【００１１】
このように、本発明は、抑制処理を並列プログラムに追加するため、他コアが処理を実行している間に、自コアとバスへのアクセスが競合することを低減可能な並列プログラムにできる。さらに、本発明は、並列プログラムから同期処理の場所を検出し、その同期処理における自コアの待ち時間を算出する。そして、本発明は、この待ち時間に応じて、抑制時間を決定するため、待ち時間が長くなることを抑制可能な並列プログラムとすることができる。
【００１２】
また、本発明のさらなる特徴は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）から、共通のバスにアクセスする複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成するコンピュータを備えた並列化ツールであって、
並列プログラムは、自コアに割り振られた処理の実行が完了した場合に、他コアに割り振られた処理の実行が完了するのを待って、自コアに割り振られた次の処理を実行させる同期処理を含むものであり、
並列プログラムから同期処理が行われる場所を検出する検出部（Ｓ１０）と、
検出された同期処理において、自コアに割り振られた処理の実行が完了してから、他コアに割り振られた処理の実行が完了するまでの待ち時間を算出する算出部（Ｓ１１、Ｓ１２）と、
自コアが待っている間に自コアによるバスへのアクセスを抑制する抑制処理を、並列プログラムに追加するものであり、算出された待ち時間に応じて抑制処理の実行時間である抑制時間を決定し、自コアによるバスへのアクセスを抑制時間の間禁止する抑制処理を追加する追加部（Ｓ１３）と、を備えている点にある。
【００１３】
これによって、上記と同様に、待ち時間が長くなることを抑制可能な並列プログラムとすることができる。
【００１４】
また、本発明のさらなる特徴は、
共通のバス（２１ｅ）にアクセスする複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ１〜ＭＴ７）からマルチコアマイコン用に並列化されたものであり複数の処理がマルチコアマイコンの異なるコア用に割り振られた並列プログラム（２１ａ１）と、を備えた車載装置であって、
並列プログラムは、
自コアに割り振られた処理の実行が完了した場合に、他コアに割り振られた処理の実行が完了するのを待って、自コアに割り振られた次の処理を実行させる同期処理を含むものであり、
並列プログラムから同期処理が行われる場所が検出され、
検出された同期処理において、自コアに割り振られた処理の実行が完了してから、他コアに割り振られた処理の実行が完了するまでの待ち時間が算出され、
並列プログラムには、自コアが待っている間に自コアによるバスへのアクセスを抑制時間の間禁止する抑制処理が追加されており、抑制処理の実行時間である抑制時間が、算出された待ち時間に応じて決定されており、
複数のコアの夫々は、自身に割り振られた処理と、同期処理と、抑制処理を実行する点にある。
【００１５】
これによって、本発明の並列プログラムは、抑制処理を並列プログラムに追加するため、他コアが処理を実行している間に、自コアとバスへのアクセスが競合することを低減可能である。さらに、本発明の並列プログラムは、並列プログラムから同期処理の場所を検出し、その同期処理における自コアの待ち時間を算出されている。そして、本発明の並列プログラムは、この待ち時間に応じて、抑制時間を決定されているため、待ち時間が長くなることを抑制可能である。よって、本発明のコアは、自身に割り振られた処理と、同期処理と、抑制処理を実行するため、バスアクセスの競合が減り且つ待ち時間が長くなることを抑制できる。
【００１６】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１７】
【図１】第１実施形態におけるコンピュータの概略構成を示すブロック図である。
【図２】第１実施形態における車載装置の概略構成を示すブロック図である。
【図３】実施形態におけるコンピュータの機能を示すブロック図である。
【図４】実施形態におけるコンピュータの処理動作を示すフローチャートである。
【図５】実施形態における並列プログラムの概略構成を示すイメージ図である。
【図６】比較例における車載装置の処理動作を示す図面である。
【発明を実施するための形態】
【００１８】
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理ＭＴ１〜ＭＴ７などから第１コア２１ｃと第２コア２１ｄを有するマルチコアマイコン２１用に並列化した並列プログラム２１ａ１を生成する例を採用する。この処理は、処理ブロックやマクロタスクなどと言い換えることができる。また、マルチコアマイコンは、マルチコアプロセッサと言い換えることができる。
【００１９】
このように、並列プログラム２１ａ１を生成する背景としては、マイコンの発熱量増大や消費電力増加、クロック周波数の限界問題から、マルチコアプロセッサ２１が主流になることなどがあげられる。そして、マルチコアプロセッサ２１は、車載装置の分野においても適用が必要となっている。また、並列プログラム２１ａ１としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
【００２０】
なお、並列プログラム２１ａ１を生成する際には、シングルプログラムにおける複数の処理ＭＴ１〜ＭＴ７の依存関係を解析して、複数の処理ＭＴ１〜ＭＴ７をマルチコアプロセッサ２１の異なるコア２１ｃ、２１ｄ用に割り振る。この点に関しては、特開２０１５−１８０７号公報を参照されたい。
【００２１】
本実施形態では、シングルプログラムの一例として、第１処理ＭＴ１〜第７処理ＭＴ７を備えたものを採用する。この複数の処理ＭＴ１〜ＭＴ７は、お互いに依存関係がある処理が含まれている。本実施形態では、例えば第１処理ＭＴ１と第４処理ＭＴ４が依存関係のある例を採用する。
【００２２】
依存関係とは、例えば、ある処理が、自身よりも先に実行された処理で更新されたデータを参照するなどの関係である。つまり、複数の処理は、シングルプログラムにおける実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。そして、後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。
【００２３】
ここで、図１を用いて、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、並列プログラム２１ａ１を生成する。コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体１８には、自動並列化コンパイラ１が記憶されている。なお、ＨＤＤは、hard disk driveの略称である。ＣＰＵは、Central Processing Unitの略称である。ＲＯＭは、Read Only Memoryの略称である。ＲＡＭは、Random Access Memoryの略称である。コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照されたい。
【００２４】
自動並列化コンパイラ１は、並列プログラム２１ａ１を生成するための手順を含んでいる。よって、自動並列化コンパイラ１は、並列化方法に相当する。つまり、自動並列化コンパイラ１は、並列化方法を含むプログラムである。自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものに加えて、検出手順と算出手順と追加手順を含んでいる。検出手順と算出手順と追加手順は、後程説明する。
【００２５】
次に、車載装置２０構成に関して説明する。車載装置２０は、図２に示すように、マルチコアプロセッサ２１、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。また、マルチコアプロセッサ２１は、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄ、バス２１ｅを備えて構成されている。車載装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。しかしながら、並列プログラム２１ａ１は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
【００２６】
ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０、通信部４３０、センサ部４５０、入出力ポート４６０を参照されたい。
【００２７】
ＲＯＭ２１ａには、自動並列化コンパイラ１を用いて生成された並列プログラム２１ａ１が記憶されている。第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御を行う。詳述すると、第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、バス２１ｅにアクセスしてＲＡＭ２１ｂの一時的な記憶機能を利用しつつ、エンジン制御を行う。よって、バス２１ｅは、第１コア２１ｃと第２コア２１ｄに共通に設けられている。同様に、ＲＡＭ２１ｂは、第１コア２１ｃと第２コア２１ｄに共通に設けられている。なお、第１コア２１ｃと第２コア２１ｄは、図示しない発振回路から出力されるクロック信号に同期して動作するものである。
【００２８】
また、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置されることもある。よって、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置される場合、他コアに割り振られた処理順序が先の処理ＭＴの実行が完了するのを待って、処理順序が後の処理ＭＴを実行する同期処理を含んでいる。つまり、並列プログラム２１ａ１は、自コアに割り振られた処理ＭＴの実行が完了した場合に、他コアに割り振られた処理ＭＴの実行が完了するのを待って、自コアに割り振られた次の処理ＭＴを実行させる同期処理を含んでいる。そして、ここでの他コアに割り振られた処理ＭＴは、自コアに割り振られた次の処理ＭＴと依存関係があり、自コアに割り振られた次の処理ＭＴよりも実行順序が先である。
【００２９】
このため、第１コア２１ｃと第２コア２１ｄは、同期処理を行うために、自身に割り振られた処理ＭＴの実行が完了した場合にバス２１ｅにアクセスして、同期待ちであることを示す情報（以下、完了情報）をＲＡＭ２１ｂに記憶する。そして、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、処理ＭＴを実行することなく、定期的にバス２１ｅにアクセスして、ＲＡＭ２１ｂに完了情報が記憶されているか否かを確認する。つまり、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、非動作中に定期的に動作して、バス２１ｅを介してＲＡＭ２１ｂにアクセスし、完了情報が記憶されているか否かを確認する。このように、第１コア２１ｃと第２コア２１ｄは、お互いに待合せをしながら、言い換えると同期を取りながら、処理ＭＴの実行を行う。よって、同期処理は、待合わせ処理と言うこともできる。
【００３０】
並列プログラム２１ａ１は、周知のｎｏｐ命令を含んでいる。よって、第１コア２１ｃと第２コア２１ｄは、ｎｏｐ命令を実行した場合、何もしない非動作状態となるため、バス２１ｅへもアクセスしない。よって、ｎｏｐ命令は、自コアが待っている間に自コアによるバス２１ｅへのアクセスを抑制する抑制処理に相当する。また、ｎｏｐ命令は、禁止命令にも相当する。
【００３１】
なお、並列プログラム２１ａ１は、第１コア２１ｃが実行するプログラムと、第２コア２１ｄが実行するプログラムとを含んでいる。また、バス２１ｅへのアクセスは、ＲＡＭアクセスと言い換えることもできる。
【００３２】
次に、図３、図４を用いて、コンピュータ１０が自動並列化コンパイラ１を実行した際の処理動作に関して説明する。コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。
【００３３】
図３は、コンピュータ１０の処理を機能ブロックで表した図面である。コンピュータ１０は、依存関係解析部１０ａ、処理時間解析部１０ｂ、コア割付部１０ｃ、スケジューリング部１０ｄ、算出部１０ｅ、コード生成部１０ｆを含んで構成されている。
【００３４】
依存関係解析部１０ａは、シングルプログラムの依存関係を解析し、並列化可能な処理ＭＴを抽出する。処理時間解析部１０ｂは、各処理ＭＴ１〜ＭＴ７の処理時間、すなわち、各処理ＭＴ１〜ＭＴ７の実行に要する時間を解析する。コア割付部１０ｃは、各処理ＭＴ１〜ＭＴ７を各コア２１ｃ、２１ｄに割り付ける（言い換えると、割り振る）。スケジューリング部１０ｄは、各処理ＭＴ１〜ＭＴ７のスケジューリングを行うことで、各処理ＭＴ１〜ＭＴ７を並び替えたりする。ここまでは、特開２０１５−１８０７号公報を参照されたい。ここでは、この時点で、図５に示すように、各処理ＭＴ１〜ＭＴ７が各コア２１ｃ、２１ｄに割り振られて並べられている例を採用する。このように、コンピュータ１０は、特開２０１５−１８０７号公報に記載された方法と同様に、依存関係と処理時間をもとに、複数の処理ＭＴ１〜ＭＴ７を第１コア２１ｃと第２コア２１ｄとに割り振る。この時点での各処理ＭＴ１〜ＭＴ７は、並列プログラム２１ａ１として用いることもできる。しかしながら、各処理ＭＴ１〜ＭＴ７では、上記のように待ち時間が長くなる可能性がある。
【００３５】
そこで、コンピュータ１０は、算出部１０ｅとコード生成部１０ｆを備えている。算出部１０ｅとコード生成部１０ｆでは、図４にフローチャートで示す処理を実行する。なお、この時点における第１コア２１ｃと第２コア２１ｄとに割り振られた複数の処理ＭＴ１〜ＭＴ７は、プレプログラムと言える。また、第１コア２１ｃと第２コア２１ｄとで最初に実行される処理ＭＴは、処理開始が開始時間ｔ０で同期がとられている。また、各処理ＭＴ１〜ＭＴ７は、開始時間及び終了時間が予測値として解っている。開始時間及び終了時間は、開始時間ｔ０を基準とした時間である。
【００３６】
まず、ステップＳ１０では、ｎｏｐ命令が挿入されていない待合わせ処理があるか否かを判定する。なお、コンピュータ１０のスケジューリング部１０ｄは、算出部１０ｅとコード生成部１０ｆでの処理の前に、ステップＳ１０を行う。
【００３７】
コンピュータ１０は、プレプログラムから待合せ処理が行われる場所を検出する（検出部）。そして、コンピュータ１０は、その待合せ処理にｎｏｐ命令が挿入されていないものがあるか否かを判定する。そして、コンピュータ１０は、ｎｏｐ命令が挿入されていないものがあると判定した場合はステップＳ１１へ進み、ｎｏｐ命令が挿入されていないものがあると判定しなかった場合は図４のフローチャートを終了する。言い換えると、コンピュータ１０は、プレプログラムから抽出した待合せ処理毎に、ｎｏｐ命令が挿入されているか否かを判定する。
【００３８】
図５の例の場合、コンピュータ１０は、第１待合せ処理Ｗ１や第２待合せ処理Ｗ２が検出されることになる。そして、コンピュータ１０は、第１待合せ処理Ｗ１や第２待合せ処理Ｗ２からｎｏｐ命令が挿入されていない待合せ処理の有無を判定する。
【００３９】
なお、上記のように、プレプログラムは、並列プログラム２１ａ１として用いることもできる。よって、ステップＳ１０は、並列プログラム２１ａ１から待合せ処理が行われる場所を検出し、その待合せ処理にｎｏｐ命令が挿入されていないものがあるか否かを判定するとも言える。また、コンピュータ１０は、自動並列化コンパイラ１を実行することで、ステップＳ１０を実行する。よって、ステップＳ１０は、検出手順に相当すると言える。
【００４０】
ステップＳ１１では、算出部１０ｅは、待合わせ直前処理の終了時間ｔｂを取得する。そして、ステップＳ１２では、算出部１０ｅは、待合わせ直後処理の開始時間ｔａを取得する。これは、検出された待合せ処理において、自コアに割り振られた処理の実行が完了してから、他コアに割り振られた処理の実行が完了するまでの待ち時間を算出するためである。算出部１０ｅは、ｎｏｐ命令が挿入されていない待合せ処理の直前に実行される処理ＭＴの終了時間ｔｂと、その待合せ処理の直後に実行される処理ＭＴの開始時間ｔａとを取得する。そして、算出部１０ｅは、終了時間ｔｂから開始時間ｔａを減算することで、待ち時間を算出する。
【００４１】
例えば、今回の対象が第１待合せ処理Ｗ１であった場合、算出部１０ｅは、終了時間ｔｂとして時間ｔｅ２と、開始時間ｔａとして時間ｔｓ４を取得して、時間ｔｅ２−時間ｔｓ４の演算を実行することで待ち時間を算出する。また、今回の対象が第２待合せ処理Ｗ２であった場合、算出部１０ｅは、終了時間ｔｂとして時間ｔｅ４と、開始時間ｔａとして時間ｔｓ７を取得して、時間ｔｅ４−時間ｔｓ７の演算を実行することで待ち時間を算出する。
【００４２】
なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで、ステップＳ１１、Ｓ１２を実行する。よって、ステップＳ１１、Ｓ１２は、算出手順に相当すると言える。
【００４３】
ステップＳ１３では、(tb-ta)×比率により算出したｎｏｐ数を待合せ処理内に追加する。コード生成部１０ｆは、ＲＯＭ１４などに記憶された比率情報２を取得する。この比率情報２には、ステップＳ１３で用いる比率が記憶されている。詳述すると、比率情報２には、待ち時間とｎｏｐ命令の関係から比率を決定するための定数又はテーブル（線形補間）を含んでいる。この定数やテーブルは、待ち時間が必要以上に長くならないように、待ち時間に応じたｎｏｐ命令回数を決めるためのものである。
【００４４】
他コアによる処理ＭＴの実行が完了するのを待っている自コアは、ｎｏｐ命令を実行している間、バス２１ｅへアクセスしない。この自コアによるバス２１ｅへのアクセスは、自コアよるｎｏｐ命令の実行時間の分だけ抑制される。よって、自コアがｎｏｐ命令を実行している時間は、他コアによる処理ＭＴの実行が完了するのを待っている自コアによる、バス２１ｅへのアクセスを抑制する抑制時間に相当する。つまり、ｎｏｐ命令の回数は、抑制時間に対応していると言える。
【００４５】
このように、コード生成部１０ｆは、自コアが待っている間に自コアによるバス２１ｅへのアクセスを抑制する抑制処理を、並列プログラム２１ａ１の待合せ処理内に追加するものである。そして、コード生成部１０ｆは、算出された待ち時間に応じてｎｏｐ命令の回数を決定し、自コアによるバス２１ｅへのアクセスを抑制時間の間禁止するｎｏｐ命令を追加する。詳述すると、コード生成部１０ｆは、プレプログラムにおける待合せ処理内に、決定した回数のｎｏｐ命令を追加する。例えば、コード生成部１０ｆは、決定した回数のｎｏｐ命令を追加する場合、時間的に均等な間隔でｎｏｐ命令が実行されるように、追加する。なお、コード生成部１０ｆは、算出した待ち時間に応じて、並列プログラム２１ａ１に追加するｎｏｐ命令の回数を調整すると言える。
【００４６】
よって、コード生成部１０ｆは、追加部に相当する。なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで、ステップＳ１３を実行する。このため、ステップＳ１３は、追加手順に相当すると言える。
【００４７】
このようにして、コンピュータ１０は、図５に示すような、並列プログラム２１ａ１を生成する。第１待合せ処理Ｗ１には、待ち時間（ｔｅ２−ｔｓ４）の長さに応じた回数のｎｏｐ命令が追加されている。同様に、第２待合せ処理Ｗ２には、待ち時間（ｔｅ４−ｔｓ７）の長さに応じた回数のｎｏｐ命令が追加されている。第１待合せ処理Ｗ１と第２待合せ処理Ｗ２は、待ち時間の長さが異なる。よって、第１待合せ処理Ｗ１のｎｏｐ回数と第２待合せ処理Ｗ２のｎｏｐ回数は、異なる。
【００４８】
また、コンピュータ１０は、並列プログラム２１ａ１のソースを生成するとも言える。そして、並列プログラム２１ａ１のソースは、コンパイル及び書き込みによって、車載装置２０のＲＯＭ２１ａに保存される。
【００４９】
なお、第１処理ＭＴ１は、開始時間ｔｓ１、終了時間ｔｅ１である。また、第２処理ＭＴ２は、開始時間ｔｓ２、終了時間ｔｅ２である。そして、開始時間ｔｓ１と開始時間ｔｓ２は、処理開始ｔ０と等しい同時間である。また、第３処理ＭＴ３の開始時間ｔｓ３は、終了時間ｔｅ１及び開始時間ｔｓ４と等しい。このように、第３処理ＭＴ３の実行開始と、第４処理ＭＴ４の実行開始は、同期がとれている。そして、第３処理ＭＴ３の実行が終了すると第５処理ＭＴ５が実行されるため、第３処理ＭＴ３の終了時間ｔｅ３は、第５処理ＭＴ５の開始時間ｔｓ５と等しい。
【００５０】
同様に、第６処理ＭＴ６の開始時間ｔｓ６は、第５処理ＭＴ５の終了時間ｔｅ５及び第７処理ＭＴ７の開始時間ｔｓ７と等しい。このように、第６処理ＭＴ６の実行開始と、第７処理ＭＴ７の実行開始は、同期がとれている。
【００５１】
なお、ｔｅ４は、第４処理ＭＴ４の終了時間である。ｔｅ６は、第６処理ＭＴ６の終了時間である。ｔｅ７は、第７処理ＭＴ７の終了時間である。
【００５２】
ここで、図６の比較例を参照しながら、コンピュータ１０の効果に関して説明する。比較例では、第１段目に図示するように、依存関係がある第１処理ＭＴ１と第３処理ＭＴ３が第１コアに割り振られ、第３処理と依存関係がある第２処理ＭＴ２が第２コアに割り振られている例を採用する。そして、比較例では、図６の中段に、待合せ処理中のｎｏｐ命令の回数が比較的少ない例を図示し、図６の下段に、待合せ処理中のｎｏｐ命令の回数が比較的多い例を図示している。比較例１のマルチコアプロセッサは、図６の中段に示すように第１処理ＭＴ１〜第３処理ＭＴ３を実行する。また、比較例２のマルチコアプロセッサは、図６の下段に示すように第１処理ＭＴ１〜第３処理ＭＴ３を実行する。
【００５３】
比較例１のマルチコアプロセッサは、ｎｏｐ命令が少ないため、第１コアが第１処理ＭＴ１を実行するためのＲＡＭアクセスと、第２コアが完了情報を確認するためのＲＡＭアクセスとが競合しやすくなる。よって、比較例１のマルチコアプロセッサは、ｎｏｐ命令が多い場合よりも、競合の頻度が増え、待ち時間が長くなりやすい。
【００５４】
一方、比較例２のマルチコアプロセッサは、ｎｏｐ命令が多いため、第１コアが第１処理ＭＴ１を実行するためのＲＡＭアクセスと、第２コアが完了情報を確認するためのＲＡＭアクセスとが競合しにくい。しかしながら、比較例２のマルチコアプロセッサは、ｎｏｐ命令の回数が多いため、待ち時間が長くなりやすい。また、比較例２のマルチコアプロセッサは、第１処理ＭＴ１の次の処理である第３処理ＭＴ３の実行開始が遅れやすい。
【００５５】
コンピュータ１０は、ｎｏｐ命令を並列プログラム２１ａ１に追加するため、比較例と同様に、他コアが処理ＭＴを実行している間に、自コアとバス２１ｅへのアクセスが競合することを低減可能な並列プログラム２１ａ１にできる。コンピュータ１０は、例えば、第１コア２１ｃが第１処理ＭＴ１を実行している間に、第１待合せ処理Ｗ１中の第２コア２１ｄがバス２１ｅへアクセスすることを抑制可能な並列プログラム２１ａ１にできる。よって、コンピュータ１０は、第１コア２１ｃと第２コア２１ｄとでバス２１ｅへのアクセスが競合することを低減可能な並列プログラム２１ａ１にできる。
【００５６】
さらに、コンピュータ１０は、並列プログラム２１ａ１から待合せ処理の場所を検出し、その待合せ処理における待ち時間を算出する。そして、コンピュータ１０は、この待ち時間に応じて、ｎｏｐ命令の回数を決定するため、待ち時間が長くなることを抑制可能な並列プログラム２１ａ１とすることができる。同様に、自動並列化コンパイラ１は、待ち時間が長くなることを抑制可能な並列プログラム２１ａ１とすることができる。
【００５７】
また、上記のように、各処理ＭＴ１〜ＭＴ７を並列化する際には、各処理ＭＴ１〜ＭＴ７の処理時間の情報を解析してスケジューリングする。このため、待合せ処理を実行している際に、他のコアで実行されている処理ＭＴが解っている。つまり、あるコアが、他コアで処理ＭＴの実行が完了を待っている場合、他コアが実行している処理ＭＴが解っている。よって、並列化方法では、自コアがどれだけ待たされるかを計算することができる。コンピュータ１０は、この計算結果を利用して、ｎｏｐ命令の回数を自動的に調整するものである。従って、コンピュータ１０は、容易に、上記のような並列プログラム２１ａ１とすることができる。また、自動並列化コンパイラ１は、コンピュータ１０と同様の効果を奏することができる。
【００５８】
また、マルチコアプロセッサ２１は、以上のように生成された並列プログラム２１ａ１を実行するものである。つまり、各コア２１ｃ、２１ｄの夫々は、自身に割り振られた処理ＭＴと、待合せ処理と、抑制処理を実行する。このため、各コア２１ｃ、２１ｄの夫々は、バス２１ｅへのアクセスの競合が減り且つ待ち時間が長くなることを抑制できる。
【００５９】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００６０】
自動並列化コンパイラ１は、自コアに割り振られた処理ＭＴの実行が完了してから、予め設定した条件を満たすまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加手順）。このように、自動並列化コンパイラ１は、予め設定した条件を満たすまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを抑制時間の間だけ禁止する抑制処理を追加してもよい。
【００６１】
同様に、コンピュータ１０は、自コアに割り振られた処理ＭＴの実行が完了してから、予め設定した条件を満たすまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加部）。このように、コンピュータ１０は、予め設定した条件を満たすまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを抑制時間の間だけ禁止する抑制処理を追加してもよい。
【００６２】
よって、車載装置２０は、上記のように抑制処理が追加された並列プログラム２１ａ１を備えていてもよい。
【００６３】
また、自動並列化コンパイラ１は、自コアに割り振られた処理ＭＴの実行が完了してからの経過時間が、条件として予め設定した時間に達するまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加手順）。このように、自動並列化コンパイラ１は、予め設定した時間に達するまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加してもよい。
【００６４】
同様に、コンピュータ１０は、自コアに割り振られた処理ＭＴの実行が完了してからの経過時間が、条件として予め設定した時間に達するまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加部）。このように、コンピュータ１０は、予め設定した時間に達するまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加してもよい。
【００６５】
よって、車載装置２０は、上記のように抑制処理が追加された並列プログラム２１ａ１を備えていてもよい。
【００６６】
また、自動並列化コンパイラ１は、自コアに割り振られた処理ＭＴの実行が完了してからの自コアの動作タイミングが、条件として予め設定した回数に達するまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加手順）。このように、自動並列化コンパイラ１は、動作タイミングが予め設定した回数に達するまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加してもよい。なお、動作タイミングとは、クロック信号に同期して動作するタイミングである。
【００６７】
同様に、コンピュータ１０は、自コアに割り振られた処理ＭＴの実行が完了してからの自コアの動作タイミングが、条件として予め設定した回数に達するまで自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加するものであってもよい（追加部）。このように、コンピュータ１０は、動作タイミングが予め設定した回数に達するまで自コアによるバス２１ｅへのアクセスを禁止することで、自コアによるバス２１ｅへのアクセスを禁止する抑制処理を追加してもよい。
【００６８】
よって、車載装置２０は、上記のように抑制処理が追加された並列プログラム２１ａ１を備えていてもよい。
【符号の説明】
【００６９】
１  自動並列化コンパイラ、２  比率情報、１０  コンピュータ、１０ｅ  算出部、１０ｆ  コード生成部、１１  ディスプレイ、１２  ＨＤＤ、１３  ＣＰＵ、１４  ＲＯＭ、１５  ＲＡＭ、１６  入力装置、１７  読取部、１８  記憶媒体、２０  車載装置、２１  マルチコアプロセッサ、２１ａ  ＲＯＭ、２１ａ１  並列プログラム、２１ｂ  ＲＡＭ、２１ｃ  第１コア、２１ｄ  第２コア、２１ｅ  バス、２２  通信部、２３  センサ部、２４  入出力ポート
【図１】
0006617511.tif 000002
【図２】
0006617511.tif 000003
【図３】
0006617511.tif 000004
【図４】
0006617511.tif 000005
【図５】
0006617511.tif 000006
【図６】
0006617511.tif 000007