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