(57)【要約】【課題】より多くの処理単位が並列化された並列プログラムを作成できる並列化方法、並列化ツール、及びより多くの処理単位が並列化された並列プログラムを実行可能な車載装置を提供すること。【解決手段】コンピュータは、シングルコアマイコン用のシングルプログラムにおける複数の処理単位の依存関係を解析して、シングルプログラムからマルチコアマイコン用の並列プログラムを生成する。コンピュータは、複数の処理単位における依存関係の解析が不能な不能処理に対する、依存関係を判断するための依存関係情報を取得する（１０ａ）。また、コンピュータは、複数の処理単位における依存関係の解析が可能な可能処理に関して、依存関係を解析する（１０ｂ）。そして、コンピュータは、取得した依存関係情報と、解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コアに割り当てる。【選択図】図４
2017224288.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位の依存関係を解析して、前記シングルプログラムから複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用の並列プログラム（２１ａ１）を生成する並列化方法であって、
複数の前記処理単位における前記依存関係の解析が不能な不能処理に対する、前記依存関係を判断するための依存関係情報を取得する取得手順（１０ａ）と、
複数の前記処理単位における前記依存関係の解析が可能な可能処理に関して、前記依存関係を解析する解析手順（１０ｂ）と、
前記取得手順で取得した前記依存関係情報と、前記解析手順で解析した解析結果とに基づいて、前記不能処理と前記可能処理を、前記依存関係を満たしつつ各コアに割り当てる割り当て手順（１０ｄ）と、を備えている並列化方法。
【請求項２】
前記依存関係情報は、前記不能処理と前記依存関係がある前記処理単位の名称を含んでいる請求項１に記載の並列化方法。
【請求項３】
前記依存関係情報は、前記不能処理が実行される際にアクセスされるリソースの名称を含んでいる請求項１に記載の並列化方法。
【請求項４】
同一の前記リソースへのアクセスを示す複数の前記処理単位の夫々において、前記リソースに対して異なる名称が定義されている場合、前記依存関係情報は、同一の前記リソースを示す複数の前記名称どうしが紐付けられている請求項３に記載の並列化方法。
【請求項５】
前記シングルプログラムが複数の翻訳単位を含んで構成されており、各翻訳単位は、他の翻訳単位と重複することなく前記リソースが定義されるものであって、
前記依存関係情報は、同一の前記リソースを示す複数の前記名称どうしが紐付けられており、且つ、前記名称と、前記名称の前記リソースが定義された前記翻訳単位とが紐付けられている請求項４に記載の並列化方法。
【請求項６】
前記処理単位は、関数である請求項１乃至５のいずれか一項に記載の並列化方法。
【請求項７】
前記割り当て手順は、前記関数を少なくとも一つ含むコア配置単位毎に、前記依存関係を満たしつつ各コアに割り当てるものであり、
上位の前記関数である上位関数と前記上位関数にコールされる下位の前記関数である下位関数とを含む前記コア配置単位の前記依存関係情報は、前記コア配置単位に含まれている最上位の前記上位関数の情報としてマージされている請求項６に記載の並列化方法。
【請求項８】
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位の依存関係を解析して、前記シングルプログラムから複数の前記コア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用の並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
複数の前記処理単位における前記依存関係の解析が不能な不能処理に対する、前記依存関係を判断するための依存関係情報を取得する取得部（１０ａ）と、
複数の前記処理単位における前記依存関係の解析が可能な可能処理に関して、前記依存関係を解析する解析部（１０ｂ）と、
前記取得部で取得した前記依存関係情報と、前記解析部で解析した解析結果とに基づいて、前記不能処理と前記可能処理を、前記依存関係を満たしつつ各コアに割り当てる割り当て部（１０ｄ）と、を備えている並列化ツール。
【請求項９】
前記依存関係情報は、前記不能処理と依存関係がある前記処理単位の名称を含んでいる請求項８に記載の並列化ツール。
【請求項１０】
前記依存関係情報は、前記不能処理が実行される際にアクセスされるリソースの名称を含んでいる請求項８に記載の並列化ツール。
【請求項１１】
同一の前記リソースへのアクセスを示す複数の前記処理単位の夫々において、前記リソースに対して異なる名称が定義されている場合、前記依存関係情報は、同一の前記リソースを示す複数の前記名称どうしが紐付けられている請求項１０に記載の並列化ツール。
【請求項１２】
前記シングルプログラムが複数の翻訳単位を含んで構成されており、各翻訳単位は、他の翻訳単位と重複することなく前記リソースが定義されるものであって、
前記依存関係情報は、同一の前記リソースを示す複数の前記名称どうしが紐付けられており、且つ、前記名称と、前記名称の前記リソースが定義された前記翻訳単位とが紐付けられている請求項１１に記載の並列化ツール。
【請求項１３】
前記処理単位は、関数である請求項８乃至１２のいずれか一項に記載の並列化ツール。
【請求項１４】
前記割り当て部は、前記関数を少なくとも一つ含むコア配置単位毎に、前記依存関係を満たしつつ各コアに割り当てるものであり、
上位の前記関数である上位関数と前記上位関数にコールされる下位の前記関数である下位関数とを含む前記コア配置単位の前記依存関係情報は、前記コア配置単位に含まれている最上位の前記上位関数の情報としてマージされている請求項１３に記載の並列化ツール。
【請求項１５】
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、前記コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位から前記マルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
前記並列プログラムは、
複数の前記処理単位における依存関係の解析が不能な不能処理に対する、前記依存関係を判断するための依存関係情報と、
複数の前記処理単位における前記依存関係の解析が可能な可能処理に関して、前記依存関係が解析された解析結果とに基づいて、前記不能処理と前記可能処理が、前記依存関係を満たしつつ各コアに割り当てられており、
前記マルチコアマイコンは、各コアが自身に割り当てられた前記処理単位を実行する車載装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び並列化方法で生成された並列プログラムを実装した車載装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードを字句解析や構文解析を行って中間言語を生成し、この中間言語を用いて、複数のマクロタスク（以下、処理ＭＴ）の依存関係の解析や最適化等を行う。また、並列化コンパイル方法では、各処理ＭＴの依存関係や処理ＭＴ毎の実行時間を基にスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、シングルプログラムの処理ＭＴや関数である処理単位には、依存関係の解析が不能な処理単位である不能処理も含まれている。マルチコアマイコンは、この不能処理を並列実行した場合、適切に動作できない可能性がある。このため、並列化コンパイル方法では、不能処理を並列化できない。
【０００６】
本発明は、上記問題点に鑑みなされたものであり、より多くの処理単位が並列化された並列プログラムを作成できる並列化方法、並列化ツール、及びより多くの処理単位が並列化された並列プログラムを実行可能な車載装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本開示の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位の依存関係を解析して、シングルプログラムから複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用の並列プログラム（２１ａ１）を生成する並列化方法であって、
複数の処理単位における依存関係の解析が不能な不能処理に対する、依存関係を判断するための依存関係情報を取得する取得手順（１０ａ）と、
複数の処理単位における依存関係の解析が可能な可能処理に関して、依存関係を解析する解析手順（１０ｂ）と、
取得手順で取得した依存関係情報と、解析手順で解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コアに割り当てる割り当て手順（１０ｄ）と、を備えている。
【０００８】
このように、並列化方法では、依存関係の解析が不能な不能処理であっても、不能処理の依存関係を判断するための依存関係情報を取得できる。そして、並列化方法では、依存関係情報と、可能処理における解析結果とに基づいて、不能処理と可能処理とを各コアに割り当てる。このため、並列化方法では、可能処理に加えて、不能処理も並列化できる。従って、並列化方法では、より多くの処理単位が並列化された並列プログラムを作成できる。
【０００９】
本開示の他の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位の依存関係を解析して、シングルプログラムから複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）用の並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
複数の処理単位における依存関係の解析が不能な不能処理に対する、依存関係を判断するための依存関係情報を取得する取得部（１０ａ）と、
複数の処理単位における依存関係の解析が可能な可能処理に関して、依存関係を解析する解析部（１０ｂ）と、
取得部で取得した依存関係情報と、解析部で解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コアに割り当てる割り当て部（１０ｄ）と、を備えている。
【００１０】
このように、並列化ツールでは、上記並列化方法と同様に、より多くの処理単位が並列化された並列プログラムを作成できる。
【００１１】
本開示の他の一つは、
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位からマルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
並列プログラムは、
複数の処理単位における依存関係の解析が不能な不能処理に対する、依存関係を判断するための依存関係情報と、
複数の処理単位における依存関係の解析が可能な可能処理に関して、依存関係が解析された解析結果とに基づいて、不能処理と可能処理が、依存関係を満たしつつ各コアに割り当てられており、
マルチコアマイコンは、各コアが自身に割り当てられた処理単位を実行する。
【００１２】
このように、車載装置は、より多くの処理単位が並列化された並列プログラムを含んでいる。これによって、本発明は、各処理単位を最適に実行できる。
【００１３】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１４】
【図１】実施形態におけるコンピュータの概略構成を示すブロック図である。
【図２】実施形態における車載装置の概略構成を示すブロック図である。
【図３】実施形態におけるコンピュータの機能を示すブロック図である。
【図４】実施形態におけるコンピュータの処理を示すフローチャートである。
【図５】実施形態における処理単位によって依存関係を指定する依存関係情報を示すイメージ図である。
【図６】変形例１におけるリソースによって依存関係を指定する依存関係情報を示すイメージ図である。
【図７】変形例２における処理単位の一例を示すイメージ図である。
【図８】変形例２における依存関係情報の一例を示すイメージ図である。
【図９】変形例５におけるコンピュータの処理を示すフローチャートである。
【図１０】変形例２における並列化後の処理単位を示すイメージ図である。
【図１１】変形例３における処理単位とリソースの関係を示すイメージ図である。
【図１２】変形例３における処理単位によって依存関係を指定する依存関係情報を示すイメージ図である。
【図１３】変形例３におけるリソースによって依存関係を指定する依存関係情報を示すイメージ図である。
【図１４】変形例４における処理単位とリソースの関係を示すイメージ図である。
【図１５】変形例４におけるリソースによって依存関係を指定する依存関係情報を示すイメージ図である。
【図１６】変形例４におけるリソースとモジュールが紐付けられた依存関係情報を示すイメージ図である。
【図１７】変形例５における処理単位を示すイメージである。
【発明を実施するための形態】
【００１５】
以下において、図面を参照しながら、発明を実施するための複数の形態を説明する。各形態において、先行する形態で説明した事項に対応する部分には同一の参照符号を付して重複する説明を省略する場合がある。各形態において、構成の一部のみを説明している場合は、構成の他の部分については先行して説明した他の形態を参照し適用することができる。
【００１６】
本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラムにおける複数の処理単位から第１コア２１ｃと第２コア２１ｄを有するマルチコアプロセッサ２１用に並列化した並列プログラム２１ａ１を生成する例を採用する。なお、プロセッサは、マイコンと言い換えることができる。よって、マルチコアプロセッサは、マルチコアマイコンと言い換えることができる。
【００１７】
上記処理単位とは、各コアに割り振る際の最小単位であるコア配置単位や、関数である。コア配置単位は、処理ブロックやマクロタスクや処理ＭＴなどと言い換えることができる。これらの処理単位の関係は、コア配置単位≧関数である。つまり、関数は、コア配置単位自体である場合や、コア配置単位に含まれる親関数やサブ関数の場合がある。なお、本実施形態では、処理単位として処理ＭＴを採用する。
【００１８】
このように、並列プログラム２１ａ１を生成する背景としては、プロセッサの発熱量増大や消費電力増加、クロック周波数の限界問題から、マルチコアプロセッサ２１が主流になることなどがあげられる。そして、マルチコアプロセッサ２１は、車載装置の分野においても適用が必要となっている。また、並列プログラム２１ａ１としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
【００１９】
ここで、図１を用いて、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、並列プログラム２１ａ１を生成する。コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体１８には、自動並列化コンパイラ１が記憶されている。
【００２０】
コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照されたい。なお、自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものに加えて、図３に示すように、読み取り部１０ａなどを含んでいる。この読み取り部１０ａに関しては、後程説明する。
【００２１】
自動並列化コンパイラ１は、並列プログラム２１ａ１を生成するための手順を含んでいる。よって、自動並列化コンパイラ１は、並列化方法に相当する。つまり、自動並列化コンパイラ１は、並列化方法を含むプログラムである。コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する。
【００２２】
例えば、コンピュータ１０は、Ｃ言語で記述されたソースコードであるシングルプログラムから、Ｃ言語で記述されたソースコードである並列プログラム２１ａ１を生成する。しかしながら、本発明は、これに限定されない。シングルプログラムは、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。同様に、並列プログラム２１ａ１は、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。
【００２３】
なお、並列プログラム２１ａ１を生成する際には、シングルプログラムにおける複数の処理ＭＴの依存関係を解析して、複数の処理ＭＴをマルチコアプロセッサ２１の異なるコア２１ｃ、２１ｄに割り振る。言い換えると、シングルコアマイコン用に記述されたプログラムを解析し、マルチコアマイコン用に並列化可能な処理ＭＴを並列化したソフトウェアを生成する。割り振ることは、配置するや、割り当てるや、割り付けると言い替えることもできる。
【００２４】
割り当てる際には、複数の処理ＭＴの依存関係を維持しつつ、複数の処理ＭＴの夫々を第１コア２１ｃと第２コア２１ｄとに割り当てる。この点に関しては、特開２０１５−１８０７号公報を参照されたい。
【００２５】
依存関係とは、例えば、ある処理ＭＴが、自身よりも先に実行された処理ＭＴで更新されたデータを参照するなどの関係である。つまり、複数の処理ＭＴは、シングルプログラムにおける実行順序が先である先行処理と、先行処理の実行が完了した後に実行させる後行処理とを含んでいる。そして、後行処理は、先行処理の影響を受ける処理ＭＴであり、例えば、先行処理で内容が更新される可能性があるデータなどを用いる処理ＭＴである。さらに詳述するならば、先行処理も後行処理もデータを参照するだけの場合、２つの処理順序を入れ替えても処理結果が変わらず、このような場合には依存関係はないと言える。
【００２６】
しかしながら、シングルプログラムには、依存関係の解析が不能もしくは困難な処理ＭＴである不能処理も含まれている。また、依存関係の解析が不能もしくは困難とは、後程説明するコンピュータ１０における依存関係解析部１０ｂでの依存関係の解析が不能もしくは困難であることを意味している。この不能処理には、例えばポインタ関連の処理ＭＴがある。理由は、変数の値推測（動作推測）を伴わないと完全に解析不可能なためである。しかしながら、不能処理は、ポインタ関連の処理ＭＴに限定されない。なお、シングルプログラムの処理ＭＴのうち、依存関係解析部１０ｂでの依存関係の解析が可能な処理ＭＴは、可能処理と称する。
【００２７】
このように、不能処理は、依存関係解析部１０ｂによる依存関係の解析ができないため、並列化できない。不能処理が並列化できない場合、並列プログラム２１ａ１は、シングルプログラムにおける可能処理のみが並列化されたものとなる。可能処理のみが並列化された並列プログラム２１ａ１は、可能処理と不能処理とが並列化された場合よりも、第１コア２１ｃと第２コア２１ｄとによって並列実行できる処理ＭＴが少なくなる。よって、可能処理のみが並列化された並列プログラム２１ａ１は、可能処理と不能処理とが並列化された場合よりも、効率よく第１コア２１ｃと第２コア２１ｄを動作させることができない。そこで、コンピュータ１０は、不能処理における依存関係を示す依存関係情報３０を用いて、不能処理に関しても依存関係を判断する。この依存関係情報３０に関しては、後程説明する。
【００２８】
コンピュータ１０は、図３に示すように、機能ブロックとして、上記読み取り部１０ａや依存関係解析部１０ｂに加えて、処理時間解析部１０ｃ、コア割付部１０ｄ、スケジューリング部１ｅを備えている。なお、図示や説明は省略するが、コンピュータ１０は、周知の字句解析部などを備えて構成されている。
【００２９】
読み取り部１０ａは、不能処理における依存関係を判断するために、依存関係情報３０を読み取る。つまり、コンピュータ１０は、依存関係情報３０が入力される。読み取り部１０ａは、特許請求の範囲の取得部に相当する。なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで依存関係情報３０を読み取る。このため、読み取り部１０ａは、特許請求の範囲の取得手順にも相当するとみなせる。
【００３０】
依存関係情報３０は、上記のように不能処理における依存関係を判断するための情報であり、例えばシングルプログラムを設計する際に用いられた情報の一部である。よって、依存関係情報３０は、設計情報と言い換えることもできる。
【００３１】
特に、本実施形態の依存関係情報３０は、不能処理と依存関係がある処理ＭＴを示す情報である。言い換えると、依存関係情報３０は、依存関係解析部１０ｂでは依存関係の解析ができないが、実際は依存関係がある複数の処理ＭＴに関して、依存関係があることを示す情報である。つまり、本実施形態の依存関係情報３０は、不能処理と、その不能処理と依存関係がある処理ＭＴとが直接的に紐付けられている。よって、依存関係情報３０は、直接型情報３０と言い換えることもできる。
【００３２】
直接型情報３０は、例えば、不能処理と依存関係がある処理ＭＴの名称を含んでいる。つまり、直接型情報３０は、不能処理の名称と、不能処理と依存関係がある処理ＭＴの名称とを含んでおり、依存関係がある処理ＭＴどうしの名称が紐付けされている。
【００３３】
なお、不能処理の名称と、不能処理と依存関係がある処理ＭＴの名称とが紐付けられた各情報は、リストと称することができる。よって、依存関係情報３０は、不能処理毎のリストを含んでいると言える。そして、依存関係情報３０は、依存関係情報３０を読み取る際に、不能処理に対応したリストを読み取る。つまり、依存関係情報３０は、複数のリストを含む依存関係情報３０から、対象の不能処理のリストを読み取る。
【００３４】
ここで、図５に示す例を用いて説明する。第１処理ＭＴは、変数Ｖ１にWrite（書き込み）する。第２処理ＭＴは、0x000000AAにRead（読出し）する。そして、変数Ｖ１と0x000000AAとが同じデータである。この場合、第１処理ＭＴと第２処理ＭＴは、依存関係がある。しかしながら、依存関係解析部１０ｂでは、変数Ｖ１と0x000000AAとが同じデータであるか否かを判定できない。この場合の直接型情報３０は、第１処理ＭＴの名称と、第２処理ＭＴの名称とが紐付けられている。このため、コンピュータ１０は、直接型情報３０を用いることで、第１処理ＭＴと第２処理ＭＴとに依存関係があると判定できる。
【００３５】
依存関係解析部１０ｂは、可能処理に関して、依存関係を解析する。言い換えると、依存関係解析部１０ｂは、可能処理の依存関係を解析することで、可能処理における依存関係を判断するための情報を抽出する。なお、依存関係解析部１０ｂは、周知技術である。このため、依存関係解析部１０ｂの詳しい説明は、省略する。この依存関係解析部１０ｂは、特許請求の範囲の解析部に相当する。なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで依存関係を解析する。このため、依存関係解析部１０ｂは、特許請求の範囲の解析手順にも相当するとみなせる。
【００３６】
コア割付部１０ｄは、読み取り部１０ａで取得した依存関係情報３０と、依存関係解析部１０ｂで解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コア２１ｃ、２１ｄに割り当てる。上記のように、コンピュータ１０は、依存関係情報３０を取得するため、不能処理に関しても依存関係を判断できる。よって、コア割付部１０ｄは、可能処理だけではなく、不能処理に関しても、各コア２１ｃ、２１ｄに割り当てることができる。
【００３７】
このコア割付部１０ｄは、特許請求の範囲の割り当て部に相当する。なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで、各処理ＭＴを各コアへ割り当てる。このため、コア割付部１０ｄは、特許請求の範囲の割り当て手順にも相当するとみなせる。
【００３８】
なお、処理時間解析部１０ｃ及びスケジューリング部１０ｅは、周知技術である。このため、処理時間解析部１０ｃ及びスケジューリング部１０ｅに関する詳しい説明は、省略する。
【００３９】
次に、図４を用いて、コンピュータ１０が自動並列化コンパイラ１を実行した際の処理動作に関して説明する。コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。なお、図４の各ステップは、自動並列化コンパイラ１における手順に相当するとみなすこともできる。
【００４０】
ステップＳ１０では、未解析の処理ＭＴをサーチする。コンピュータ１０は、シングルプログラムにおける複数の処理ＭＴの夫々を対象として、個別に図４の処理を実行する。つまり、コンピュータ１０は、ステップＳ１０において、シングルプログラムにおける複数の処理ＭＴのうち、ステップＳ１２以降の処理を行っていない処理ＭＴをサーチする。言い換えると、コンピュータ１０は、シングルプログラムにおける複数の処理ＭＴから、ステップＳ１２以降の処理を行っていない処理ＭＴを抽出する。
【００４１】
なお、今回のステップＳ１０で抽出された不能処理は、対象ＭＴとも称する。例えば、第１処理ＭＴ、第２処理ＭＴ、第ｎ処理ＭＴを含むシングルプログラムにおいて、今回のステップＳ１０で第２処理ＭＴが抽出された場合、対象ＭＴは第２処理ＭＴである。ｎは３以上の自然数である。
【００４２】
ステップＳ１２では、依存関係情報（直接型情報３０）に対象ＭＴがあるか否かを判定する。コンピュータ１０は、ステップＳ１０で抽出した対象ＭＴに紐付けられた処理ＭＴが、直接型情報３０に含まれているか否かを判定する。コンピュータ１０は、直接型情報３０に対象ＭＴが含まれていると判定した場合はステップＳ１６へ進み、直接型情報３０に対象ＭＴが含まれていると判定した場合はステップＳ１４へ進む。
【００４３】
ステップＳ１４では、対象ＭＴ内のコードを解析して依存関係を抽出する。つまり、コンピュータ１０の依存関係解析部１０ｂは、周知のように各対象ＭＴの依存関係を抽出する。言い換えると、コンピュータ１０の依存関係解析部１０ｂは、ステップＳ１４において、各対象ＭＴにおける依存関係を判断するための情報、すなわち、アクセス先のリソースとリソースに対する処理内容を抽出する。そして、コンピュータ１０の依存関係解析部１０ｂは、対象ＭＴと依存関係がある処理ＭＴを抽出する。
【００４４】
なお、アクセス先のリソースとは、処理ＭＴが実行された際にコアによってアクセスされるリソースである。また、リソースに対する処理内容とは、リソースに対する書き込み、又は読出しである。さらに、リソースとは、データやレジスタや順序制約を含む。そして、処理単位におけるアクセス先のリソースと、処理単位のリソースに対する処理内容とが紐付けられた情報は、リソースアクセス情報とも言える。
【００４５】
一方、ステップＳ１６では、直接型情報３０に基づいて対象ＭＴの依存関係とする。つまり、コンピュータ１０は、直接型情報３０で対象ＭＴに紐付けされた処理ＭＴを対象ＭＴの依存関係とする。言い換えると、コンピュータ１０は、対象ＭＴに対して、直接型情報３０で対象ＭＴに紐付けされた処理ＭＴを依存関係がある処理ＭＴとする。
【００４６】
コンピュータ１０は、ステップＳ１０〜Ｓ１６を繰り返し実行することで、シングルプログラムにおける全ての処理ＭＴを対象として図４のフローチャートを実行する。そして、コンピュータ１０は、依存関係情報と、依存関係解析部１０ｂで解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コアに割り当てる。
【００４７】
なお、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置されることもある。よって、並列プログラム２１ａ１は、依存関係がある二つの処理ＭＴが別々のコア２１ｃ、２１ｄに配置される場合、他コアに割り振られた処理順序が先の処理ＭＴの実行が完了するのを待って、処理順序が後の処理ＭＴを実行する同期処理を含んでいる。つまり、並列プログラム２１ａ１は、自コアに割り振られた処理ＭＴの実行が完了した場合に、他コアに割り振られた処理ＭＴの実行が完了するのを待って、自コアに割り振られた次の処理ＭＴを実行させる同期処理を含んでいる。そして、ここでの他コアに割り振られた処理ＭＴは、自コアに割り振られた次の処理ＭＴと依存関係があり、自コアに割り振られた次の処理ＭＴよりも実行順序が先である。
【００４８】
このため、第１コア２１ｃと第２コア２１ｄは、同期処理を行うために、自身に割り振られた処理ＭＴの実行が完了した場合、ＲＡＭ２１ｂにアクセスして、同期待ちであることを示す情報（以下、完了情報）をＲＡＭ２１ｂに記憶する。そして、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、処理ＭＴを実行することなく、定期的にＲＡＭ２１ｂにアクセスして、ＲＡＭ２１ｂに完了情報が記憶されているか否かを確認する。つまり、他コアにおける依存関係がある処理ＭＴの実行完了を待っている自コアは、非動作中に定期的に動作して、ＲＡＭ２１ｂにアクセスし、完了情報が記憶されているか否かを確認する。このように、第１コア２１ｃと第２コア２１ｄは、お互いに待合せをしながら、言い換えると同期を取りながら、処理ＭＴの実行を行う。よって、同期処理は、待合わせ処理と言うこともできる。なお、並列プログラム２１ａ１は、第１コア２１ｃが実行するプログラムと、第２コア２１ｄが実行するプログラムとを含んでいる。
【００４９】
次に、車載装置２０の構成に関して説明する。車載装置２０は、図２に示すように、マルチコアプロセッサ２１、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。また、マルチコアプロセッサ２１は、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄを備えて構成されている。車載装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。ここでは、一例として、車載装置２０をエンジン制御装置に適用した例を採用する。この場合、並列プログラム２１ａ１は、エンジン制御などの自動車制御プログラムと言える。しかしながら、並列プログラム２１ａ１は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
【００５０】
第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御を行う。詳述すると、第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１のうち自身に割り当てられた処理ＭＴを実行するとともに待合せ処理などを実行することでエンジン制御を行う。ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０、通信部４３０、センサ部４５０、入出力ポート４６０を参照されたい。
【００５１】
以上のように、コンピュータ１０では、依存関係の解析が不能な不能処理であっても、不能処理の依存関係を示す直接型情報３０を取得できる。そして、コンピュータ１０では、直接型情報３０と、可能処理における解析結果とに基づいて、不能処理と可能処理とを各コア２１ｃ、２１ｄに割り当てる。このため、コンピュータ１０では、可能処理に加えて、不能処理も並列化できる。従って、コンピュータ１０では、より多くの処理ＭＴが並列化された並列プログラム２１ａ１を作成できる。つまり、コンピュータ１０は、可能処理だけが並列化された並列プログラムよりも、多くの処理ＭＴが並列化された並列プログラム２１ａ１を作成できる。
【００５２】
なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで依存関係を解析する。このため、自動並列化コンパイラ１は、コンピュータ１０と同様の効果を奏することができる。
【００５３】
さらに、車載装置２０は、より多くの処理ＭＴが並列化された並列プログラム２１ａ１を含んでいる。このため、車載装置２０は、各処理ＭＴを最適に実行できる。つまり、車載装置２０は、並列プログラム２１ａ１を含んでいるため、第１コア２１ｃと第２コア２１ｄを有効に活用できると言える。言い換えると、車載装置２０は、可能処理だけが並列化された並列プログラムを含んでいる場合よりも、第１コア２１ｃと第２コア２１ｄを備えたマルチコアプロセッサ２１の性能を発揮しやすい。
【００５４】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。以下に、本発明のその他の形態として、変形例１〜５に関して説明する。上記実施形態及び変形例１〜５は、夫々単独で実施することも可能であるが、適宜組み合わせて実施することも可能である。本発明は、実施形態において示された組み合わせに限定されることなく、種々の組み合わせによって実施可能である。
【００５５】
（変形例１）
変形例１の依存関係情報３１は、図６に示すように、不能処理が実行される際にアクセスされるリソースの名称を含んでいる。つまり、依存関係情報３１は、名称は不明であるが、同じデータを示すリソースどうしが紐付けられている。言い換えると、依存関係情報３１は、不能処理と、その不能処理と依存関係がある処理ＭＴとがリソースを介して間接的に紐付けられている。よって、依存関係情報３１は、間接型情報３１と言える。
【００５６】
ここで、図６に示す例を用いて説明する。第１処理ＭＴは、変数Ｖ１にWrite（書き込み）する。第２処理ＭＴは、0x000000AAにRead（読出し）する。そして、変数Ｖ１と0x000000AAとが同じデータである。この場合、第１処理ＭＴと第２処理ＭＴは、依存関係がある。しかしながら、依存関係解析部１０ｂでは、変数Ｖ１と0x000000AAとが同じデータであるか否かを判定できない。この場合の間接型情報３１は、変数Ｖ１の名称と、0x000000AAの名称とが紐付けられている。つまり、間接型情報３１は、変数Ｖ１と0x000000AAとが同じデータであることを示す情報（リスト）を含んでいる。さらに、間接型情報３１は、変数Ｖ１と0x000000AAとが同じリソースであることを示す情報である。
【００５７】
このため、コンピュータ１０は、間接型情報３１を用いることで、第１処理ＭＴと第２処理ＭＴとに依存関係があると判定できる。なお、リソースと、他のリソースとが同じリソースであることを示す各情報は、リストと称することができる。よって、依存関係情報３１は、リソース毎のリストを含んでいると言える。
【００５８】
変形例１のコンピュータ１０は、上記実施形態と同様の効果を奏することができる。同様に、変形例１の自動並列化コンパイラ１及び車載装置２０は、上記実施形態と同様の効果を奏することができる。
【００５９】
（変形例２）
変形例２では、図７、図８、図９に示すように、処理単位として関数を採用する。関数は、処理ＭＴに含まれる。また、処理ＭＴには、複数の関数を含んでいるものもある。
【００６０】
図７に示すように、funcA()関数は、変数Ｘの書き込みである。funcC()関数は、変数Ｙの書き込みである。funcD()関数は、変数Ｘの読み込み、変数Ｙの読み込み、及び変数Ｚの書き込みである。よって、依存関係解析部１０ｂは、funcA()関数、funcC()関数、funcD()関数に関して、依存関係の解析が可能である。このため、funcA()関数、funcC()関数、funcD()関数は、可能処理とみなすことができる。
【００６１】
しかしながら、funcB()関数は、依存関係解析部１０ｂがリソースを把握できないｐ＝0x…を含んでいる。よって、依存関係解析部１０ｂは、funcB()関数に関して、依存関係の解析ができない。このため、funcB()関数は、不能処理とみなすことができる。なお、ｐ＝0x…は、変数Ｗのアドレスである。つまり、funcB()関数は、変数Ｗの書き込みであり、変数Ｘ、変数Ｙ、変数Ｚとは関係がない。
【００６２】
この場合、依存関係情報３２は、図８に示すように、funcB()関数のリソース情報として、変数Ｗの書き込み（Ｗ）であることを示す情報を含んでいる。このように、依存関係情報３２は、不能処理に対して、不能処理におけるアクセス先のリソースと、不能処理のリソースに対する処理内容とが紐付けられている。なお、不能処理と、不能処理におけるアクセス先のリソースと、不能処理のリソースに対する処理内容とが紐付けられている各情報は、リストと称することができる。よって、依存関係情報３２は、不能処理毎のリストを含んでいると言える。
【００６３】
言い換えると、依存関係情報３２は、不能処理と、その不能処理と依存関係がある関数とをリソースを介して間接的に紐付けることができる情報である。よって、依存関係情報３２は、間接型情報と言える。
【００６４】
コンピュータ１０は、依存関係情報３２を参照することで、各不能処理が実行された際にアクセスされるリソースを把握できる。従って、コンピュータ１０は、依存関係情報３２を参照することで、不能処理と依存関係がある関数を把握できる。
【００６５】
なお、図８に示すように、依存関係情報３２は、各処理単位の依存関係を判断するための情報に加えて、リソースの定義を示すリソースリストを含んでいてもよい。また、リソースリストは、関数毎のリソースアクセス情報とセットであってもよい。この場合、どこの関数のリソースと同一のリソースであるかという紐付け情報をリソースリストに付加する。
【００６６】
また、自関数からコールする別モジュールの関数の情報は、自動並列化時に解析する。コール関係を基にコール元の処理（コア配置単位）にマージして解析することで、コア配置時に必要な情報を得ることができる。
【００６７】
次に、図９を用いて、変形例２におけるコンピュータ１０が自動並列化コンパイラ１を実行した際の処理動作に関して説明する。コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラム２１ａ１を生成する。なお、図９の各ステップは、自動並列化コンパイラ１における手順に相当するとみなすこともできる。
【００６８】
ステップＳ２０では、未解析の関数をサーチする。コンピュータ１０は、シングルプログラムにおける複数の関数の夫々を対象として、個別に図９の処理を実行する。つまり、コンピュータ１０は、ステップＳ２０において、シングルプログラムにおける複数の関数のうち、ステップＳ２２以降の処理を行っていない関数をサーチする。言い換えると、コンピュータ１０は、シングルプログラムにおける複数の関数から、ステップＳ１２以降の処理を行っていない関数を抽出する。
【００６９】
なお、今回のステップＳ２０で抽出された不能処理は、対象関数とも称する。例えば、funcA()関数〜funcD()関数を含むシングルプログラムにおいて、今回のステップＳ２０でfuncB()関数が抽出された場合、対象関数はfuncB()関数である。
【００７０】
ステップＳ２２では、依存関係情報３２に対象関数があるか否かを判定する。つまり、コンピュータ１０は、ステップＳ２０で抽出した対象関数のリソース情報が依存関係情報３２に含まれているか否かを判定する。コンピュータ１０は、依存関係情報３２に対象関数のリソース情報が含まれていた場合に、依存関係情報３２に対象関数があるとみなしてステップＳ２６へ進む。逆に、コンピュータ１０は、依存関係情報３２に対象関数のリソース情報が含まれていなかった場合に、依存関係情報３２に対象関数がないとみなしてステップＳ２４へ進む。
【００７１】
ステップＳ２４では、対象関数内のコードを解析して依存関係を抽出する。つまり、コンピュータ１０の依存関係解析部１０ｂは、周知のように対象関数の依存関係を抽出する。言い換えると、コンピュータ１０の依存関係解析部１０ｂは、ステップＳ２４において、各対象関数における依存関係を判断するための情報、すなわち、アクセス先のリソースとリソースに対する処理内容を抽出する。そして、コンピュータ１０の依存関係解析部１０ｂは、対象関数と依存関係がある処理ＭＴを抽出する。
【００７２】
一方、ステップＳ２６では、依存関係情報３２に基づいて対象関数の依存関係とする。つまり、コンピュータ１０は、依存関係情報３２に含まれる対象処理に関する情報を、依存関係を解析するための情報とする。言い換えると、コンピュータ１０は、依存関係情報３２から、対象関数における依存関係を判断するための情報、すなわち、アクセス先のリソースとリソースに対する処理内容を抽出する。例えば、対象関数がfuncB()関数の場合、コンピュータ１０は、funcB()関数における依存関係を解析するための情報として、変数Ｗの書き込みを採用する。つまり、コンピュータ１０は、依存関係情報３２からfuncB()関数に関する情報、すなわち変数Ｗの書き込みであることを抽出する。
【００７３】
ステップＳ２８では、対象関数の依存関係を対象関数が属するＭＴの依存関係に追加する。コンピュータ１０は、ステップＳ２４で抽出した依存関係を解析するための情報と、ステップＳ２６で抽出した依存関係を解析するための情報を、各対象関数が属する処理ＭＴに追加する。
【００７４】
コンピュータ１０は、ステップＳ２０〜Ｓ２８を繰り返し実行することで、シングルプログラムにおける全ての処理ＭＴを対象として図９のフローチャートを実行する。そして、コンピュータ１０は、依存関係情報と、依存関係解析部１０ｂで解析した解析結果とに基づいて、不能処理と可能処理を、依存関係を満たしつつ各コアに割り当てる。この結果、funcA()関数〜funcD()関数は、図１０に示すように並列化される。なお、図１０では、各処理ＭＴに、関数として一つの関数のみが含まれている例を採用している。
【００７５】
変形例２のコンピュータ１０は、上記実施形態と同様の効果を奏することができる。同様に、変形例２の自動並列化コンパイラ１及び車載装置２０は、上記実施形態と同様の効果を奏することができる。さらに、処理ＭＴよりも細かい単位で分担してソフト開発している場合であっても、変形例２のコンピュータ１０及び自動並列化コンパイラ１は、上記実施形態と同様の効果を奏することができる。
【００７６】
（変形例３）
図１１、図１２、図１３を用いて、変形例３に関して説明する。変形例３では、図１１に示すように、処理単位として処理ＭＴである第１１処理ＭＴ、第１２処理ＭＴ、第１３処理ＭＴを採用する。また、第１１処理ＭＴは、変数Ｖ１への書き込み、及び変数Ｖ２の書き込みを行う。第１２処理ＭＴは、変数Ｖ１の読み込みを行う。第１３処理ＭＴは、変数Ｖ２の読み込みを行う。
【００７７】
変形例３では、図１２に示す直接型情報である依存関係情報３３や、図１３に示す間接型情報である依存関係情報３４を採用できる。依存関係情報３３では、第１１処理ＭＴに対して、依存関係のある処理ＭＴ名として第１２処理ＭＴと第１３処理ＭＴとが紐付けされている。さらに、依存関係情報３３では、第１２処理ＭＴ及び第１３処理ＭＴに対して、依存関係のある処理ＭＴ名として第１１処理ＭＴが紐付けされている。なお、依存関係情報３３は、各項目が別々のリストとして管理されている場合を含む。
【００７８】
一方、依存関係情報３４では、第１１処理ＭＴに対して、第１１処理ＭＴにおけるアクセス先のリソースである変数Ｖ１と、第１１処理ＭＴの変数Ｖ１に対する処理内容であるWriteとが紐付けられている。また、第１１処理ＭＴに対しては、第１１処理ＭＴにおけるアクセス先のリソースである変数Ｖ２と、第１１処理ＭＴの変数Ｖ２に対する処理内容であるWriteとが紐付けられている。
【００７９】
さらに、依存関係情報３４では、第１２処理ＭＴに対して、第１２処理ＭＴにおけるアクセス先のリソースである変数Ｖ１と、第１２処理ＭＴの変数Ｖ１に対する処理内容であるReadとが紐付けられている。また、依存関係情報３４では、第１３処理ＭＴに対して、第１３処理ＭＴにおけるアクセス先のリソースである変数Ｖ２と、第１３処理ＭＴの変数Ｖ２に対する処理内容であるReadとが紐付けられている。なお、依存関係情報３４は、処理ＭＴ毎に別々のリストとして管理されている場合を含む。
【００８０】
変形例３のコンピュータ１０は、上記実施形態と同様の効果を奏することができる。同様に、変形例３の自動並列化コンパイラ１及び車載装置２０は、上記実施形態と同様の効果を奏することができる。
【００８１】
（変形例４）
図１４、図１５、図１６を用いて、変形例４に関して説明する。変形例４では、図１４に示すように、処理単位として関数であるfunc1a関数、func2a関数、func3a関数を採用する。また、func1a関数は、0xFFFF0000への書き込み、及びポインタアクセス*Pへの書き込みを行う。ポインタアクセス*Pは、指先解析不能である。func2a関数は、変数Ｖ１の読み込みを行う。func3a関数は、0xFFFF0004の読み込みを行う。
【００８２】
なお、ここでは、同一のリソースへのアクセスを示す複数の関数の夫々において、リソースに対して異なる名称が定義されている場合を採用する。例えば、0xFFFF0000と変数Ｖ１とは、同一のリソースを示すものである。しかしながら、func1a関数では、0xFFFF0000がUnknown2と定義されている。また、ポインタアクセス*Pと0xFFFF0004とは同一のリソースを示すものである。しかしながら、func1a関数では、ポインタアクセス*PがUnknown3と定義されている。一方、func3a関数では、0xFFFF0004がUnknown4と定義されている。
【００８３】
さらに、0xFFFF0000及び変数Ｖ１は、第１Moduleに定義されたデータである。そして、ポインタアクセス*P及び0xFFFF0004は、第２Moduleに定義されたデータである。以下においては、Moduleをモジュールとも記載する。
【００８４】
なお、モジュールとは、機能の単位で、ソフトウェアの開発単位である。また、モジュールは、翻訳単位とも称することができ、一つのソースファイルを一つの翻訳単位に対応させることで実現されている。ただし、ヘッダファイルのインクルードの処理があるので、厳密には、一つのソースファイルに前処理を行った後のプログラムテキストが翻訳単位になる。そして、モジュールは、この翻訳単位に相当する。また、各モジュールは、他のモジュールと重複することなくリソースが定義されている。
【００８５】
変形例３では、図１５に示す間接型情報である依存関係情報３５や、図１６に示す間接型情報である依存関係情報３６を採用できる。
【００８６】
依存関係情報３５は、図１３と同様に、各処理単位に対して、各処理単位におけるアクセス先のリソースと、各処理単位のアクセス先であるリソースに対する処理内容とが紐付けられている。さらに、依存関係情報３５は、同一のリソースを示す複数の名称どうしが紐付けられている。例えば、図１５に示すように、依存関係情報３５は、0xFFFF0000とUnknown2とが紐付けられており、Unknown3とUnknown4とが紐付けされている。このようにすることで、コンピュータ１０は、同じリソースであるにもかかわらず、各処理単位で異なる名称が定義されていた場合であっても依存関係を解析できる。さらに、コンピュータ１０は、各処理単位で定義されたリソース名の整合をとらなくてもよい。
【００８７】
依存関係情報３６は、同一のリソースを示す複数の名称どうしが紐付けられており、且つ、その名称と、名称のリソースが定義されたモジュールとが紐付けられている。例えば、図１６に示すように、第１モジュールに変数Ｖ１が紐付けされている。また、第２モジュールには、Unknown2が紐付けされている。
【００８８】
変形例４のコンピュータ１０は、上記実施形態と同様の効果を奏することができる。同様に、変形例４の自動並列化コンパイラ１及び車載装置２０は、上記実施形態と同様の効果を奏することができる。
【００８９】
（変形例５）
図１７を用いて、変形例５に関して説明する。ここでは、関数を少なくとも一つ含む処理ＭＴ毎に、依存関係を満たしつつ各コアに割り当てるコンピュータ１０を採用する。よって、自動並列化コンパイラ１は、関数を少なくとも一つ含む処理ＭＴ毎に、依存関係を満たしつつ各コアに割り当てる手順を含んでいる。また、変形例５では、図１７に示すように、第２１処理ＭＴ、第２２処理ＭＴなどを含んでいるシングルプログラムを採用する。
【００９０】
コンピュータ１０は、並列化解析の対象である処理全体の関数コール関係を抽出する。コンピュータ１０は、関数コール関係に沿って関数をサーチする。コンピュータ１０は、対象関数内のリスト入力の対象処理の有無を判断する。コンピュータ１０は、対象関数内のリソースアクセスを解析する。コンピュータ１０は、リスト入力の対象範囲を特定する。なお、このリスト入力の対象範囲とは、リソースアクセスのリストに書かれる関数を指している。つまり、リストにより、リソースアクセスが紐付けられる処理単位（ＭＴや関数）のことである。
【００９１】
コンピュータ１０は、依存関係情報からリストを読み取る。コンピュータ１０は、対象関数内の処理において、対象範囲については取得したリストをソースアクセス情報として記憶し、対象外についてはリソースアクセス解析結果を対象関数のリソースアクセス情報として記憶する。コンピュータ１０は、各対象関数の記憶結果を関数コール関係に従い、処理ＭＴとなるまで親関数の情報としてマージする。よって、上位の関数である上位関数と上位関数にコールされる下位の関数である下位関数とを含む処理ＭＴの依存関係情報は、処理ＭＴに含まれている最上位の上位関数の情報としてマージされている。
【００９２】
つまり、コンピュータ１０は、処理ＭＴ内における不能処理と可能処理とを判定する。なお、ここでの不能処理は、人間が不能処理と判断してリソースアクセスリストを入力した処理を指している。一方、ここでの可能処理は、不能処理以外の処理を指している。そして、コンピュータ１０は、依存関係情報から不能処理に対応するリソースアクセス情報を取得して記憶するとともに、可能処理のリソースアクセス情報を記憶する。さらに、コンピュータ１０は、記憶したリソースアクセス情報を、処理ＭＴにおける最上位の関数（親関数）のリソースアクセス情報としてマージする。よって、この処理ＭＴの依存関係情報、すなわちリソースアクセス情報は、処理ＭＴ内の不能処理のリソースアクセス情報と、可能処理のリソースアクセス情報とがマージされた情報となっている。
【００９３】
なお、対象範囲は、処理ＭＴの全体又は一部である。リストには、対象範囲の処理がアクセスするＲＡＭのシンボル名を含んでいる。リストには、対象範囲の処理がアクセスするリソースの名前を含んでいる。リソースの名前は、プログラム全体で一意の処理単位名に紐付けられている。
【００９４】
ここで、一例として、図１７に示すシングルプログラムを用いて説明する。図１７における各関数の内容は、点線の吹き出しで示している。このシングルプログラムでは、第２１処理ＭＴをサーチした結果、関数Ｆ１が対象関数となる。この関数Ｆ１は、不能処理である関数Ｆ２と、可能処理である関数Ｆ３と、不能処理であるロジックを指示する指示子を含んでいる。
【００９５】
コンピュータ１０は、関数Ｆ２内のリソースアクセス情報を解析（抽出）せず、依存関係情報からリソースアクセス情報を取得して記憶する。例えば、関数Ｆ２のリソースアクセス情報は、変数ｙへのWriteである。さらに、コンピュータ１０は、関数Ｆ２のサブ関数Ｆ４の解析に移る。
【００９６】
また、コンピュータ１０は、関数Ｆ３が変数ｘにWriteしている可能処理であるため、依存関係情報からリソースアクセス情報を取得しない。そして、コンピュータ１０は、変数ｘにWriteしていることを、関数Ｆ３のリソースアクセス情報として記憶する。
【００９７】
さらに、コンピュータ１０は、指示子の指定範囲のリソースアクセス情報を解析（抽出）せず、依存関係情報からリソースアクセス情報を取得して記憶する。例えば、指示子の指定範囲のリソースアクセス情報は、第３モジュールに定義されているUnknown4というリソースへのWriteである。
【００９８】
そして、コンピュータ１０は、上記のように記憶した複数のリソースアクセス情報を、関数Ｆ１のリソースアクセス情報としてマージする。つまり、第２１処理ＭＴ配下の関数のリソースアクセス情報をマージした結果、第２１処理ＭＴは、変数ｘ、変数ｙ、変数ｖ、変数ｗ、及び第３モジュールに定義されているUnknown5というリソースに対して書込みを行う処理となる。コンピュータ１０は、依存関係の解析時に、マージしたリソースアクセス情報を用いる。なお、第２１処理ＭＴは、上記のリソース（データ等）に対して同様にアクセスを行う他の処理ＭＴとの間に依存関係が発生する。
【００９９】
変形例５のコンピュータ１０は、上記実施形態と同様の効果を奏することができる。同様に、変形例５の自動並列化コンパイラ１及び車載装置２０は、上記実施形態と同様の効果を奏することができる。
【０１００】
さらに、変形例５のコンピュータ１０は、各関数毎（ソフト開発担当者毎）に解析可否判断（解析できない部分の明確化）及び解析不能部分の情報を取得できる。よって、変形例５のコンピュータ１０は、従来の解析不能部分も含めて依存関係の解析と並列化が可能となる。
【符号の説明】
【０１０１】
１…自動並列化コンパイラ、１０…コンピュータ、１０ａ…読み取り部、１０ｂ…依存関係解析部、１０ｃ…処理時間解析部、１０ｄ…コア割付部、１０ｅ…スケジューリング部、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ａ１…並列プログラム、２１ｂ…ＲＡＭ、２１ｃ…第１コア、２１ｄ…第２コア、２２…通信部、２３…センサ部、２４…入出力ポート、３０〜３６…依存関係情報
【図１】
2017224288.tif 000003
【図２】
2017224288.tif 000004
【図３】
2017224288.tif 000005
【図４】
2017224288.tif 000006
【図５】
2017224288.tif 000007
【図６】
2017224288.tif 000008
【図７】
2017224288.tif 000009
【図８】
2017224288.tif 000010
【図９】
2017224288.tif 000011
【図１０】
2017224288.tif 000012
【図１１】
2017224288.tif 000013
【図１２】
2017224288.tif 000014
【図１３】
2017224288.tif 000015
【図１４】
2017224288.tif 000016
【図１５】
2017224288.tif 000017
【図１６】
2017224288.tif 000018
【図１７】
2017224288.tif 000019