(57)【要約】【課題】依存関係の解析における誤りを抑制しつつ並列プログラムを作成できる並列化方法、並列化ツール、及び依存関係の解析における誤りが抑制された並列プログラムを実行可能な車載装置を提供すること。【解決手段】コンピュータ１０は、シングルプログラムにおける複数の処理から並列プログラム２１ａ１を生成する。コンピュータ１０は、複数の処理とともにメモリ空間に記憶される複数のデータのうち、各処理が実行される際にアクセスされるデータのメモリ空間におけるアドレスと、各処理が実行される際にアクセスされるデータのシンボル名を抽出する。また、コンピュータ１０は、抽出したシンボル名に対して、抽出したシンボル名のデータが記憶されるメモリ空間のアドレスを関連付ける。そして、コンピュータ１０は、抽出されたアドレスと関連付けられたアドレスとに基づいて各処理間での依存関係を解析する。【選択図】図１
2017107448.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）から、複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
複数の前記処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされる前記データの前記記憶領域におけるアドレスと、各処理が実行される際にアクセスされる前記データのシンボル名を抽出する抽出手段（Ｓ１１、Ｓ１２）と、
抽出された前記シンボル名に対して、抽出された前記シンボル名の前記データが記憶される前記記憶領域の前記アドレスを関連付ける関連付手順（Ｓ１３）と、
複数の前記処理のうち並列化可能な前記処理を決めるために、抽出された前記アドレスと前記関連付けられた前記アドレスとに基づいて各処理間での依存関係を解析し、同じ前記アドレスにアクセスする二つの前記処理は依存関係があるとみなし、同じ前記アドレスにアクセスしない二つの前記処理は依存関係がないとみなす解析手順（Ｓ１４）と、を備えている並列化方法。
【請求項２】
依存関係を解析する際に基にする前記アドレスは、前記記憶領域のレジスタにおけるアドレスを含んでいる請求項１に記載の並列化方法。
【請求項３】
依存関係を解析する際に基にする前記アドレスは、前記シングルプログラムをコンパイルして各データをアドレスマッピングした結果におけるアドレスを含んでいる請求項１又は２に記載の並列化方法。
【請求項４】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）から、複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
複数の前記処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされる前記データの前記記憶領域におけるアドレスと、各処理が実行される際にアクセスされる前記データのシンボル名を抽出する抽出部（Ｓ１１、Ｓ１２）と、
抽出された前記シンボル名に対して、抽出された前記シンボル名の前記データが記憶される前記記憶領域の前記アドレスを関連付ける関連付部（Ｓ１３）と、
複数の前記処理のうち並列化可能な前記処理を決めるために、抽出された前記アドレスと前記関連付けられた前記アドレスとに基づいて各処理間での依存関係を解析し、同じ前記アドレスにアクセスする二つの前記処理は依存関係があるとみなし、同じ前記アドレスにアクセスしない二つの前記処理は依存関係がないとみなす解析部（Ｓ１４）と、を備えている並列化ツール。
【請求項５】
依存関係を解析する際に基にする前記アドレスは、前記記憶領域のレジスタにおけるアドレスを含んでいる請求項４に記載の並列化ツール。
【請求項６】
依存関係を解析する際に基にする前記アドレスは、前記シングルプログラムをコンパイルして各データをアドレスマッピングした結果におけるアドレスを含んでいる請求項４又は５に記載の並列化ツール。
【請求項７】
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、前記コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）から前記マルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
前記並列プログラムは、
複数の前記処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされる前記データの前記記憶領域におけるアドレスと、各処理が実行される際にアクセスされる前記データのシンボル名を抽出され、
抽出された前記シンボル名に対して、抽出された前記シンボル名の前記データが記憶される前記記憶領域の前記アドレスが関連付けられ、
複数の前記処理のうち並列化可能な前記処理を決めるために、抽出された前記アドレスと前記関連付けられた前記アドレスとに基づいて各処理間での依存関係を解析し、同じ前記アドレスにアクセスする二つの前記処理は依存関係があるとみなし、同じ前記アドレスにアクセスしない二つの前記処理は依存関係がないとみなされ、
複数の前記処理の夫々が各コアに割り当てられており、
前記マルチコアマイコンは、各コアが自身に割り当てられた前記処理を実行する車載装置。
【請求項８】
依存関係を解析する際に基にする前記アドレスは、前記記憶領域のレジスタにおけるアドレスを含んでいる請求項７に記載の車載装置。
【請求項９】
依存関係を解析する際に基にする前記アドレスは、前記シングルプログラムをコンパイルして各データをアドレスマッピングした結果におけるアドレスを含んでいる請求項７又は８に記載の車載装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成された並列プログラムを実装した車載装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードを字句解析や構文解析を行って中間言語を生成し、この中間言語を用いて、複数のマクロタスク（以下、処理ＭＴ）の依存関係の解析や最適化等を行う。また、並列化コンパイル方法では、各処理ＭＴの依存関係や処理ＭＴ毎の実行時間を基にスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、依存関係の解析では、二つの処理ＭＴが同一のデータにアクセスする内容でない場合、依存関係がないとみなされる。つまり、この二つの処理ＭＴは、並列実行が可能である。
【０００６】
また、処理ＭＴが実行された際にアクセスするデータの指定方法は、記憶領域のアドレスにより指定するアドレス指定と、変数名などのシンボル名により指定するシンボル指定とがある。しかしながら、アドレスが示すデータとシンボル名が示すデータとは、同一であるか否かの判定が難しい。つまり、アドレス指定である処理ＭＴとシンボル指定である他の処理ＭＴとが、同一のデータにアクセスするのか否かを判定することが難しい。このため、依存関係の解析では、アドレス指定の処理ＭＴとシンボル指定の処理ＭＴの依存関係を判定することが困難である。従って、依存関係の解析では、誤りが生じる可能性がある。
【０００７】
本発明は、上記問題点に鑑みなされたものであり、依存関係の解析における誤りを抑制しつつ並列プログラムを作成できる並列化方法、並列化ツール、及び依存関係の解析における誤りが抑制された並列プログラムを実行可能な車載装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）から、複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
複数の処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされるデータの記憶領域におけるアドレスと、各処理が実行される際にアクセスされるデータのシンボル名を抽出する抽出手段（Ｓ１１、Ｓ１２）と、
抽出されたシンボル名に対して、抽出されたシンボル名のデータが記憶される記憶領域のアドレスを関連付ける関連付手順（Ｓ１３）と、
複数の処理のうち並列化可能な処理を決めるために、抽出されたアドレスと関連付けられたアドレスとに基づいて各処理間での依存関係を解析し、同じアドレスにアクセスする二つの処理は依存関係があるとみなし、同じアドレスにアクセスしない二つの処理は依存関係がないとみなす解析手順（Ｓ１４）と、を備えていることを特徴とする。
【０００９】
このように、本発明は、各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされるデータの記憶領域におけるアドレスと、各処理が実行される際にアクセスされるデータのシンボル名を抽出する。そして、本発明は、シンボル名に対して、シンボル名に対応する記憶領域のアドレスを関連付ける。これによって、各処理が実行される際にシンボル名が指定されてアクセスされるデータに、記憶領域のアドレスが関連付けられる。
【００１０】
そして、本発明は、各処理においてデータを指定しているアドレスに基づいて各処理間での依存関係を解析し、同じデータにアクセスする二つの処理は依存関係があり、同じデータにアクセスしない二つの処理は依存関係がないと解析する。このように、本発明は、アドレスに基づいて、各処理の依存関係を解析できる。このため、本発明は、依存関係の解析における誤りを抑制しつつ並列プログラムを作成できる。
【００１１】
また、本発明のさらなる特徴は、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）から、複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用に並列化した並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
複数の処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされるデータの記憶領域におけるアドレスと、各処理が実行される際にアクセスされるデータのシンボル名を抽出する抽出部（Ｓ１１、Ｓ１２）と、
抽出されたシンボル名に対して、抽出されたシンボル名のデータが記憶される記憶領域のアドレスを関連付ける関連付部（Ｓ１３）と、
複数の処理のうち並列化可能な処理を決めるために、抽出されたアドレスと関連付けられたアドレスとに基づいて各処理間での依存関係を解析し、同じアドレスにアクセスする二つの処理は依存関係があるとみなし、同じアドレスにアクセスしない二つの処理は依存関係がないとみなす解析部（Ｓ１４）と、を備えている点にある。
【００１２】
これによって、上記と同様に、依存関係の解析における誤りを抑制しつつ並列プログラムを作成できる。
【００１３】
また、本発明のさらなる特徴は、
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理（ＭＴ０〜ＭＴ１１）からマルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
並列プログラムは、
複数の処理とともに記憶領域に記憶され各処理が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされるデータの記憶領域におけるアドレスと、各処理が実行される際にアクセスされるデータのシンボル名を抽出され、
抽出されたシンボル名に対して、抽出されたシンボル名のデータが記憶される記憶領域のアドレスが関連付けられ、
複数の処理のうち並列化可能な処理を決めるために、抽出されたアドレスと関連付けられたアドレスとに基づいて各処理間での依存関係を解析し、同じアドレスにアクセスする二つの処理は依存関係があるとみなし、同じアドレスにアクセスしない二つの処理は依存関係がないとみなされ、
複数の処理の夫々が各コアに割り当てられており、
マルチコアマイコンは、各コアが自身に割り当てられた処理を実行する点にある。
【００１４】
このように、本発明は、上記のように、依存関係の解析における誤りを抑制しつつ作成された並列プログラムを含んでいる。これによって、本発明は、各処理を最適に実行できる。
【００１５】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、ひとつの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１６】
【図１】実施形態におけるコンピュータの概略構成を示すブロック図である。
【図２】実施形態における車載装置の概略構成を示すブロック図である。
【図３】実施形態におけるコンピュータの機能を示すブロック図である。
【図４】実施形態におけるコンピュータの処理を示すフローチャートである。
【図５】実施形態におけるメモリ空間の記憶内容とアドレスとの関係を示すイメージ図である。
【図６】実施形態における各処理のデータの指定方法を示すイメージ図である。
【図７】実施形態におけるシングルプログラムを示すイメージ図である。
【図８】実施形態における並列プログラムを示すイメージ図である。
【図９】比較例における各処理のデータの指定方法を示すイメージ図である。
【発明を実施するための形態】
【００１７】
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理ＭＴ０〜ＭＴ１１などから第１コア２１ｃと第２コア２１ｄを有するマルチコアプロセッサ２１用に並列化した並列プログラム２１ａ１を生成する例を採用する。この処理は、処理ブロックやマクロタスクなどと言い換えることができる。なお、プロセッサは、マイコンと言い換えることができる。よって、マルチコアプロセッサは、マルチコアマイコンと言い換えることができる。
【００１８】
このように、並列プログラム２１ａ１を生成する背景としては、プロセッサの発熱量増大や消費電力増加、クロック周波数の限界問題から、マルチコアプロセッサ２１が主流になることなどがあげられる。そして、マルチコアプロセッサ２１は、車載装置の分野においても適用が必要となっている。また、並列プログラム２１ａ１としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
【００１９】
なお、並列プログラム２１ａ１を生成する際には、シングルプログラムにおける複数の処理ＭＴ０〜ＭＴ１１の依存関係を解析して、複数の処理ＭＴ０〜ＭＴ１１をマルチコアプロセッサ２１の異なるコア２１ｃ、２１ｄに割り振る。割り振るは、配置するや、割り当てるや、割り付けると言い替えることもできる。割り当てる際には、複数の処理ＭＴ０〜ＭＴ１１の依存関係を維持しつつ、複数の処理ＭＴ０〜ＭＴ１１の夫々を第１コア２１ｃと第２コア２１ｄとに割り当てる。この点に関しては、特開２０１５−１８０７号公報を参照されたい。なお、本実施形態では、一例として、Ｃ言語で記述されたシングルプログラムを採用する。しかしながら、本発明は、これに限定されない。シングルプログラムは、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。
【００２０】
本実施形態では、図７に示すように、シングルプログラムの一例として、第１処理ＭＴ０〜第１２処理ＭＴ１１を備えたものを採用する。そして、本実施形態では、図８に示すように、第１処理ＭＴ０〜第１２処理ＭＴ１１の夫々を第１コア２１ｃと第２コア２１ｄの夫々に割り付ける。
【００２１】
この複数の処理ＭＴ０〜ＭＴ１１は、お互いに依存関係がある処理ＭＴが含まれている。図７では、依存関係がある処理同士を矢印で繋いで図示している。よって、本実施形態では、例えば第１処理ＭＴ０と第４処理ＭＴ３などが、依存関係がある。
【００２２】
依存関係とは、例えば、ある処理が、自身よりも先に実行された処理で更新されたデータを参照するなどの関係である。つまり、複数の処理は、シングルプログラムにおける実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。そして、後行処理は、先行処理の影響を受ける処理であり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理である。更に詳述するならば、先行処理も後行処理もデータを参照するだけの場合、２つの処理順序を入れ替えても処理結果が変わらず、このような場合には依存関係はないと言える。依存関係は依存性とも言える。
【００２３】
ここで、図１を用いて、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、並列プログラム２１ａ１を生成する。コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。なお、ＨＤＤは、hard disk driveの略称である。ＣＰＵは、Central Processing Unitの略称である。ＲＯＭは、Read Only Memoryの略称である。ＲＡＭは、Random Access Memoryの略称である。
【００２４】
コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体１８には、自動並列化コンパイラ１が記憶されている。自動並列化コンパイラ１は、並列プログラム２１ａ１を生成するための手順を含んでいる。よって、自動並列化コンパイラ１は、並列化方法に相当する。つまり、自動並列化コンパイラ１は、並列化方法を含むプログラムである。コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する。
【００２５】
コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照されたい。なお、自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものに加えて、抽出手段と関連付手順などを含んでいる。抽出手順と関連付手順に関しては、後程説明する。また、自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものと、依存関係の解析の内容が異なる。
【００２６】
さらに、コンピュータ１０は、図３に示すように、機能ブロックとして、字句解析部１０ａ、関連付部１０ｂ、依存関係解析部１０ｃを備えている。コンピュータ１０は、マイコンレジスタ情報４１及び第１メモリマッピング情報４２を取得可能に構成されている。そして、コンピュータ１０は、Ｃ言語で記述されたソースコードであるシングルプログラムから、Ｃ言語で記述されたソースコードである並列プログラム２１ａ１を生成する。コンピュータ１０の処理動作に関しては、後程詳しく説明する。なお、図示や説明は省略するが、コンピュータ１０は、周知の見積部、コア割付部、スケジューリング部などを備えて構成されている。また、字句解析部１０ａに関しても周知であるため、詳しい説明は省略する。
【００２７】
マイコンレジスタ情報４１は、レジスタ２１ｅの情報である。レジスタ２１ｅは、後程説明するが、入力ポートレジスタや出力ポートレジスタなどを含むものである。言い換えると、レジスタ２１ｅは、入力ポートレジスタや出力ポートレジスタなどが定義されている。そして、マイコンレジスタ情報４１は、レジスタ２１ｅにおける入力ポートレジスタや出力ポートレジスタなどのアドレスを含んでいる。ここでのアドレスは、後程説明するメモリ空間におけるアドレスとも言える。また、本実施形態では、入力ポートレジスタや出力ポートレジスタをなどレジスタ２１ｅの定義をシンボル名として用いる。このため、マイコンレジスタ情報４１は、シンボル名とメモリ空間のアドレスとを関連付けるための関連付情報と言える。マイコンレジスタ情報４１は、関連付部１０ｂで用いられる。
【００２８】
第１メモリマッピング情報４２は、シングルプログラムを第２コンパイラ３２でコンパイルして、メモリマッピングした結果である。第２コンパイラ３２は、字句解析部、構文意味解析部、アセンブラ展開部などを含んで構成されている。そして、第２コンパイラ３２は、Ｃ言語で記述されたシングルプログラムをコンパイルしてアセンブリ言語に展開するなどしてバイナリデータ５０に変換するとともに第１メモリマッピング情報４２を生成する。
【００２９】
第１メモリマッピング情報４２は、シングルプログラムのソースコードを暫定的にメモリマッピングした結果であり、変数のメモリマッピング情報である。このため、第１メモリマッピング情報４２は、変数と、ＲＡＭ２１ｂにおける変数が定義された領域のアドレスとが関連付けられた情報と言える。
【００３０】
なお、第２メモリマッピング情報４３は、第１メモリマッピング情報４２と異なり、並列プログラム２１ａ１のソースコードをメモリマッピングした結果であり、変数のメモリマッピング情報である。この第２メモリマッピング情報４３は、第１メモリマッピング情報４２と同様の使い方ができる。
【００３１】
メモリ空間の一部（ここではＲＡＭ２１ｂ）は、後程説明するが、変数名が定義されている。また、本実施形態では、定義された変数の名称（変数名）をシンボル名として用いる。このため、第１メモリマッピング情報４２は、シンボル名とメモリ空間のアドレスとを関連付けるための関連付情報と言える。第１メモリマッピング情報４２は、関連付部１０ｂで用いられる。
【００３２】
第１コンパイラ３１は、字句解析部、構文意味解析部、アセンブラ展開部などを含んで構成されている。第１コンパイラ３１と第２コンパイラ３２とは、対象のソースコードが並列化前のものと並列化後のもので異なるだけで同一のコンパイラである。そして、第１コンパイラ３１は、Ｃ言語で記述された並列プログラム２１ａ１をコンパイルしてアセンブリ言語に展開するなどしてバイナリデータに変換する。つまり、Ｃ言語で記述された並列プログラム２１ａ１は、第１コンパイラ３１によってバイナリデータなどの機械語で構成された並列プログラム２１ａ１に変換される。そして、ＲＯＭ２１ａには、バイナリデータで構成された、すなわち各コア２１ｃ、２１ｄで実行可能な形式の並列プログラム２１ａ１が記憶される。このように、第１コンパイラ３１で変換される前の並列プログラム２１ａ１と、ＲＯＭ２１ａに記憶された並列プログラム２１ａ１は、記述方式が異なるだけであり、同等のプログラムと言える。また、第１コンパイラ３１は、第２メモリマッピング情報４３を生成する。
【００３３】
なお、アセンブリ言語は、ニーモニックとオペランドを含んで構成される。ニーモニックは、第１コア２１ｃや第２コア２１ｄなどの演算部が実行する命令である。オペランドは、ニーモニックの対象を示すものである。
【００３４】
ニーモニックは、例えば、ＡＤＤ、ＬＤ、ＳＴ、ＡＮＤ、ＮＯＰなどと記述されている。なお、ＡＤＤは、加算を示す命令である。ＬＤは、ロードを示す命令である。ＳＴはストアを示す命令である。ＡＮＤは、論理積を示す命令である。ＮＯＰは、何もしないことを意味する命令である。さらに、ニーモニックには、これらの汎用的な命令だけでなく、汎用性が乏しい特殊な命令（以下、特殊命令）もある。この特殊命令とは、あるプロセッサに特有の命令である。よって、特殊命令は、あるプロセッサでは実行可能であるが、他のプロセッサでは実行できないことがある。
【００３５】
第２コンパイラ３２は、マルチコアプロセッサ２１に対応した構成を有している。言い換えると、第２コンパイラ３２は、マルチコアプロセッサ２１専用のコンパイラである。よって、第２コンパイラ３２は、シングルプログラムをアセンブリ言語に展開する際に、マルチコアプロセッサ２１に特有の特殊命令を含むアセンブリ言語に展開できる。この第２コンパイラ３２は、マイコン用コンパイラに相当する。
【００３６】
ところで、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置されることもある。よって、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置される場合、他コアに割り振られた処理順序が先の処理ＭＴの実行が完了するのを待って、処理順序が後の処理ＭＴを実行する同期処理を含んでいる。つまり、並列プログラム２１ａ１は、自コアに割り振られた処理ＭＴの実行が完了した場合に、他コアに割り振られた処理ＭＴの実行が完了するのを待って、自コアに割り振られた次の処理ＭＴを実行させる同期処理を含んでいる。そして、ここでの他コアに割り振られた処理ＭＴは、自コアに割り振られた次の処理ＭＴと依存関係があり、自コアに割り振られた次の処理ＭＴよりも実行順序が先である。
【００３７】
このため、第１コア２１ｃと第２コア２１ｄは、同期処理を行うために、自身に割り振られた処理ＭＴの実行が完了した場合、ＲＡＭ２１ｂにアクセスして、同期待ちであることを示す情報（以下、完了情報）をＲＡＭ２１ｂに記憶する。そして、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、処理ＭＴを実行することなく、定期的にＲＡＭ２１ｂにアクセスして、ＲＡＭ２１ｂに完了情報が記憶されているか否かを確認する。つまり、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、非動作中に定期的に動作して、ＲＡＭ２１ｂにアクセスし、完了情報が記憶されているか否かを確認する。このように、第１コア２１ｃと第２コア２１ｄは、お互いに待合せをしながら、言い換えると同期を取りながら、処理ＭＴの実行を行う。よって、同期処理は、待合わせ処理と言うこともできる。なお、並列プログラム２１ａ１は、第１コア２１ｃが実行するプログラムと、第２コア２１ｄが実行するプログラムとを含んでいる。
【００３８】
次に、車載装置２０の構成に関して説明する。車載装置２０は、図２に示すように、マルチコアプロセッサ２１、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。また、マルチコアプロセッサ２１は、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄ、レジスタ２１ｅを備えて構成されている。車載装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。しかしながら、並列プログラム２１ａ１は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
【００３９】
第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御を行う。詳述すると、第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１のうち自身に割り当てられた処理ＭＴを実行するとともに待合せ処理などを実行することでエンジン制御を行う。ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０、通信部４３０、センサ部４５０、入出力ポート４６０を参照されたい。
【００４０】
ＲＯＭ２１ａ、ＲＡＭ２１ｂ、レジスタ２１ｅは、図５に示すように、一連のアドレス（0x00000000〜0xFFFFFFFF）で管理されたメモリ空間を構成している。メモリ空間は、記憶領域に相当する。ＲＯＭ２１ａは、図５に示すように、例えばコードフラッシュ（CodeFlash）とデータフラッシュ（DataFlash）とを含んで構成されている。ＲＯＭ２１ａには、コンピュータ１０が自動並列化コンパイラ１に従い生成した並列プログラム２１ａ１が書き込まれて記憶されている。具体的には、コードフラッシュには、並列プログラム２１ａ１の関数Ｆ１（）、Ｆ２（）、Ｆ３（）などが記憶されている。関数Ｆ１（）などは、各処理ＭＴに含まれている。よって、言い換えると、コードフラッシュには、各処理ＭＴが記憶されている。また、データフラッシュには、定数Ｃ１、Ｃ２、Ｃ３などが記憶されている。なお、ＲＯＭ２１ａに記憶されている並列プログラム２１ａ１は、上記のようにバイナリデータなどの機械語で構成されている。
【００４１】
ＲＡＭ２１ｂには、ソフトで変数名が定義されている第５領域６５と、ソフトで変数名が定義されていない第６領域６６とに区分けすることができる。ここでは、変数名の一例として、Ｖ１、Ｖ２、Ｖ３を採用している。また、変数名が定義されていないデータの一例として、未定義１、未定義２を採用している。この変数名は、上記のようにシンボル名に相当する。なお、第６領域６６のデータは、アドレス直値でアクセス可能である。
【００４２】
レジスタ２１ｅは、例えば、入力ポートレジスタや出力ポートレジスタなどを含んで構成されている。よって、レジスタ２１ｅは、データとして、入力値、および出力値が記憶されている。この入力ポートレジスタや出力ポートレジスタのレジスタ名（言い換えるとリソース名）は、上記のようにシンボル名に相当する。なお、レジスタ２１ｅは、第４領域６４と称することができる。この第４領域６４は、アドレス直値でレジスタ２１ｅを操作可能である。
【００４３】
第４領域６４と第５領域６５の各データには、各データが記憶されているメモリ空間のアドレスが関連付けられている（関連付手順、関連付部１０ｂ）。言い換えると、第４領域６４と第５領域６５の各データのシンボル名には、各データが記憶されているメモリ空間のアドレスが関連付けられている（関連付手順、関連付部１０ｂ）。例えば、入力ポートレジスタには0x00000000、出力ポートレジスタには0x00000004、変数名Ｖ１には0x10000000が関連付けられている。なお、第６領域６６の各データは、アドレス直値でアクセス可能であるため、各データが記憶されているメモリ空間のアドレスが関連付けられているとも言える。
【００４４】
また、メモリ空間は、第１領域６１、第２領域６２、第３領域６３という区分けができる。第１領域６１は、レジスタ２１ｅに相当する領域であり、ソフトによって変化しない部分である。第１領域６１は、マイコン予約領域とも言える。第２領域６２は、ＲＯＭ２１ａとＲＡＭ２１ｂに相当する領域であり、ソフトによって変化する部分である。第２領域６２は、ユーザー領域とも言える。第３領域６３は、ＲＡＭ２１ｂとレジスタ２１ｅに相当する領域であり、マイコン動作時に書換えられる領域である。
【００４５】
なお、並列プログラム２１ａ１とシングルプログラムとでは、メモリ空間におけるデータ及びプログラム（コード）の配置が異なる。
【００４６】
この点に関して、データとプログラムとに分けて説明する。まず、データに関して説明する。本来、非同期で動作する複数のコアにおいて、シングルプログラムと動作を変えずに処理させるために、データ依存関係がある場合、上記のように同期処理が必要となる。同期処理は、元々シングルプログラムにはなく、並列化する過程で、並列プログラム２１ａ１に追加される。同期処理は、データの読み書きにより複数コア２１ｃ，２１ｄの進捗状況を共有する処理であるので、専用のデータが追加定義される。これによって、データは、並列化前後でメモリ空間における配置が異なる。また、通常、マイコンは、コアが増えると、各データを格納するＲＡＭの構成が変化する。このように、ＲＡＭ構成が違えば最適なデータ配置も異なる。よって、データは、最適となるように再配置することで、並列化前後でメモリ空間における配置が異なる。
【００４７】
次に、プログラムに関して説明する。プログラムは、上記のように、同期処理が追加となるため、並列化前後でメモリ空間における配置が異なる。また、マルチコアプロセッサ２１では、各コア２１ｃ，２１ｄにシングルプログラムで実行していた関数が割り当てられるため、コール順序が変化し、プログラムの一部が異なるものになる。よって、プログラムは、並列化前後でメモリ空間における配置が異なる。
【００４８】
次に、図４を用いて、コンピュータ１０が自動並列化コンパイラ１を実行した際の処理動作に関して説明する。コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。なお、図４の各ステップＳは、自動並列化コンパイラ１における手順に相当する。
【００４９】
ステップＳ１０では、シンボル名のないリソースにアクセスするか否かを判定する。コンピュータ１０は、複数の処理ＭＴ０〜ＭＴ１１の夫々が、第４領域６４及び第５領域６５のデータへのアクセスを指定しているか、第６領域６６のデータへのアクセスを指定しているかによって、シンボル名のないリソースにアクセスするか否かを判定する。また、コンピュータ１０は、複数の処理ＭＴ０〜ＭＴ１１の夫々が実行された際のアクセス先が、第４領域６４及び第５領域６５であるか、第６領域６６のデータであるかを判定するとも言える。
【００５０】
そして、コンピュータ１０は、第４領域６４及び第５領域６５のデータへのアクセスを指定している処理ＭＴの場合、シンボル名のないリソースにアクセスしないと判定（ＮＯ判定）することになり、ステップＳ１１へ進む。また、コンピュータ１０は、第６領域６６のデータへのアクセスを指定している処理ＭＴの場合、シンボル名のないリソースにアクセスすると判定（ＹＥＳ判定）することになり、ステップＳ１２へ進む。このステップＳ１０は、関連付部１０ｂで行われる処理である。
【００５１】
なお、以下においては、シンボル名によってアクセス先を指定することを単にシンボル指定、アドレスによってアクセス先を指定することを単にアドレス指定と称することもある。
【００５２】
ステップＳ１１では、各処理ＭＴのアクセス先であるシンボル名を抽出する（抽出手段、抽出部）。つまり、コンピュータ１０は、複数の処理ＭＴ０〜ＭＴ１１のうち、シンボル指定と判定した各処理ＭＴのアクセス先であるシンボル名を抽出する。一方、ステップＳ１２では、各処理ＭＴのアクセス先であるアドレスを抽出する（抽出手段、抽出部）。つまり、コンピュータ１０は、複数の処理ＭＴ０〜ＭＴ１１のうち、アドレス指定と判定した各処理ＭＴのアクセス先であるアドレスを抽出する。このステップＳ１１、Ｓ１２は、関連付部１０ｂで行われる処理である。このように、コンピュータ１０は、複数の処理ＭＴ０〜ＭＴ１１とともにメモリ空間に記憶され各処理ＭＴ０〜ＭＴ１１が実行される際にアクセスされる複数のデータのアドレスとシンボル名を抽出する。
【００５３】
ステップＳ１３では、抽出したシンボル名とアクセスのリストとに基づいて、シンボル名をアドレスに置換する。つまり、コンピュータ１０は、抽出されたシンボル名に対して、抽出されたシンボル名のデータが記憶されるメモリ空間のアドレスを関連付ける（関連付手順）。コンピュータ１０は、マイコンレジスタ情報４１と第１メモリマッピング情報４２とを用いて、シンボル名に対してアドレスを関連付ける。これによって、抽出されたシンボル名は、メモリ空間のアドレスに紐付けられる。
【００５４】
これは、シンボル指定の処理ＭＴとアドレス指定の処理ＭＴの両方に関して、依存関係を解析するためである。言い換えると、ステップＳ１３は、シンボル指定の処理ＭＴ同士の依存関係の解析、アドレス指定の処理ＭＴ同士の依存関係の解析、及びシンボル指定の処理ＭＴとアドレス指定の処理ＭＴの依存関係の解析を行うためである。
【００５５】
よって、依存関係を解析する際に基にするアドレスは、メモリ空間のレジスタ２１ｅにおけるアドレスを含んでいると言える。また、依存関係を解析する際に基にするアドレスは、シングルプログラムをコンパイルして各データをアドレスマッピングした結果におけるアドレスを含んでいると言える。
【００５６】
このように、コンピュータ１０は、ステップＳ１１を実行することで、図５に示すように、第４領域６４と第５領域６５におけるシンボル名を抽出することになる。具体的には、コンピュータ１０は、シンボル名として入力ポートレジスタ、出力ポートレジスタ、変数Ｖ１〜変数Ｖ３を抽出することになる。そして、コンピュータ１０は、図５に示すように、ステップＳ１３を実行することで、入力ポートレジスタとアドレス0x00000000とを関連付ける。同様に、コンピュータ１０は、出力ポートレジスタとアドレス0x00000004、変数Ｖ１とアドレス0x10000000、変数Ｖ２とアドレス0x10000004、変数Ｖ３とアドレス0x10000008の夫々を関連付ける。
【００５７】
また、コンピュータ１０は、ステップＳ１２を実行することで、図５に示すように、第６領域６６における未定義１のアドレスとして0x1000000C、未定義２のアドレスとして0x10000010を抽出することになる。
【００５８】
なお、ステップＳ１３は、関連付部１０ｂで行われる処理である。また、本発明は、レジスタ２１ｅにおけるアドレスと、アドレスマッピングした結果におけるアドレスの少なくとも一方を含んでいればよい。
【００５９】
ステップＳ１４では、同じアドレスにアクセスしている処理ＭＴ間に依存関係を追加する。つまり、コンピュータ１０は、複数の処理ＭＴのうち並列化可能な処理を決めるために、抽出されたアドレスと関連付けられたアドレスとに基づいて各処理間での依存関係を解析し、同じアドレスにアクセスする二つの処理ＭＴは依存関係があるとみなす。なお、コンピュータ１０は、同じアドレスにアクセスしない二つの処理ＭＴは依存関係がないとみなす（解析手順）。このステップＳ１４は、依存関係解析部１０ｃで行われる処理である。また、依存関係解析部１０ｃは、解析部に相当する。
【００６０】
ステップＳ１５では、得られた依存関係を基に、各処理ＭＴのスケジューリングを実施する（スケジューリング部）。そして、ステップＳ１６では、スケジューリング結果に従い、並列プログラム２１ａ１を生成する（コア割付部）。
【００６１】
ここで、本発明の効果に関して、図６と、図９に示す比較例と対比しつつ説明する。比較例は、シンボル名とアドレスを関連付ける処理を行わないものである。ここでは、シンボル指定の第２処理ＭＴ１と、アドレス指定の第３処理ＭＴ２を用いる。第２処理ＭＴ１は、実行される際にシンボル名である変数Ｖ１を指定するものである。一方、第３処理ＭＴ２は、実行される際にアドレスである0x000000AAを指定するものである。さらに、変数Ｖ１のデータは、アドレスが0x000000AAであるものとする。
【００６２】
比較例では、第２処理ＭＴ１がシンボル名である変数Ｖ１を指定しており、第３処理ＭＴ２がアドレスである0x000000AAを指定しているため、変数Ｖ１と0x000000AAとが同一のデータを示しているのか否かを判断できない。よって、比較例では、第２処理ＭＴ１と第３処理ＭＴ２との依存関係を解析できない。
【００６３】
これに対して、コンピュータ１０は、図６に示すように、シンボル名である変数Ｖ１にアドレス0x000000AAを紐付けている。よって、コンピュータ１０は、第２処理ＭＴ１が指定しているデータのアドレスを把握できる。このため、コンピュータ１０は、第２処理ＭＴ１が指定しているシンボル名に対応するアドレスと、第３処理ＭＴ２が指定しているアドレスとを比較することで、第２処理ＭＴ１と第３処理ＭＴ２とが同一のデータを指定しているのか否かを判断できる。従って、コンピュータ１０は、第２処理ＭＴ１と第３処理ＭＴ２との依存関係を解析できる。なお、この例の場合、コンピュータ１０は、第２処理ＭＴ１と第３処理ＭＴ２とがアドレス0x000000AAのデータを指定している、すなわち、第２処理ＭＴ１と第３処理ＭＴ２とが同じデータへのアクセスを指定しているとみなして、依存関係があると判断する。
【００６４】
以上のように、コンピュータ１０は、各処理ＭＴ０〜ＭＴ１１が実行される際にアクセスされる複数のデータのうち、各処理ＭＴ０〜ＭＴ１１が実行される際にアクセスされるデータのメモリ空間におけるアドレスを抽出する。さらに、コンピュータ１０は、各処理ＭＴ０〜ＭＴ１１が実行される際にアクセスされる複数のデータのうち、各処理が実行される際にアクセスされるデータのシンボル名を抽出する。つまり、コンピュータ１０は、各処理ＭＴ０〜ＭＴ１１でアドレスが指定されている場合はアドレスを抽出し、シンボル名が指定されている場合はシンボル名を抽出する。そして、本発明は、抽出したシンボル名に対して、シンボル名に対応するメモリ空間のアドレスを関連付ける。これによって、各処理ＭＴ０〜ＭＴ１１が実行される際にシンボル名が指定されてアクセスされるデータに、メモリ空間のアドレスが関連付けられる。
【００６５】
そして、コンピュータ１０は、各処理ＭＴ０〜ＭＴ１１においてデータを指定しているアドレスに基づいて各処理間での依存関係を解析する。コンピュータ１０は、同じデータにアクセスする二つの処理は依存関係があり、同じデータにアクセスしない二つの処理は依存関係がないと解析する。このように、コンピュータ１０は、アドレスに基づいて、各処理ＭＴ０〜ＭＴ１１の依存関係を解析できる。このため、コンピュータ１０は、依存関係の解析における誤りを抑制しつつ並列プログラムを作成できる。
【００６６】
また、コンピュータ１０は、アドレス指定の処理ＭＴとシンボル指定の処理ＭＴの両方に関して依存関係を解析できる。つまり、コンピュータ１０は、アドレス指定の処理ＭＴ同士、シンボル指定の処理ＭＴ同士、アドレス指定の処理ＭＴとシンボル指定の処理ＭＴ同士のいずれでも依存関係を解析できる。このため、コンピュータ１０は、アドレス指定の処理ＭＴ同士のみで依存関係を解析する場合や、シンボル指定の処理ＭＴ同士のみで依存関係を解析する場合よりも、多くの処理ＭＴの依存関係を解析できる。よって、コンピュータ１０は、シングルプログラムにおけるアドレス指定の処理ＭＴのみ、又はシンボル指定の処理ＭＴのみを並列化する場合よりも、多くの処理ＭＴを並列化できる。
【００６７】
また、コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する。よって、自動並列化コンパイラ１は、上記コンピュータ１０と同様の効果を奏することができる。
【００６８】
さらに、車載装置２０は、依存関係の解析における誤りを抑制しつつ作成された並列プログラム２１ａ１を実行するため、各処理ＭＴ０〜ＭＴ１１を最適に実行できる。また、車載装置２０は、上記のように、シングルプログラムにおける多くの処理ＭＴが並列化された並列プログラム２１ａ１を実行するため、効率よく第１コア２１ｃと第２コア２１ｄを動作させることができる。
【００６９】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００７０】
なお、本実施形態では、二つの第１コア２１ｃと第２コア２１ｄを備えた車載装置２０を採用した。しかしながら、本発明は、これに限定されず、三つ以上のコアを備えた車載装置であっても採用できる。よって、本発明は、シングルプログラムから、三つ以上のコアに対応した並列プログラムを生成するためのコンピュータ及び自動並列化コンパイラであっても採用できる。また、並列プログラム２１ａ１は、車載装置２０とは異なる装置で実行されるプログラムであってもよい。
【符号の説明】
【００７１】
１…自動並列化コンパイラ、１０…コンピュータ、１０ａ…字句解析部、１０ｂ…関連付部、１０ｃ…依存関係解析部、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ａ１…並列プログラム、２１ｂ…ＲＡＭ、２１ｃ…第１コア、２１ｄ…第２コア、２１ｅ…レジスタ、２２…通信部、２３…センサ部、２４…入出力ポート、３１…第１コンパイラ、３２…第２コンパイラ、４１…マイコンレジスタ情報、４２…第１メモリマッピング情報、４３…、第２メモリマッピング情報、５０…バイナリデータ
【図１】
2017107448.tif 000003
【図２】
2017107448.tif 000004
【図３】
2017107448.tif 000005
【図４】
2017107448.tif 000006
【図５】
2017107448.tif 000007
【図６】
2017107448.tif 000008
【図７】
2017107448.tif 000009
【図８】
2017107448.tif 000010
【図９】
2017107448.tif 000011