(57)【特許請求の範囲】
【請求項１】
シングルコアプロセッサ用のプログラムである逐次プログラム（Ｐ１）を解析することにより当該プログラムを複数の処理に分割し、当該複数の処理から、マルチコアプロセッサ（３０）により並列化処理の可能な並列化プログラム（Ｐ２）を生成するコンピュータが実行する並列化コンパイル方法であって、
前記複数の処理のうちのいずれかの処理が変更された際に、予め定められたパラメータに基づき前記複数の処理の処理順序に制約を設けてコンパイルを行い、処理の変更の影響が処理順序の制約に応じた局所的な範囲に抑えられることにより前記逐次プログラムから前記並列化プログラムを生成するものであり、
前記パラメータとして、前記逐次プログラムにおいて前後の処理の優先度を変更、又は前記前後の処理の依存関係を追加する指示子を用い、予め定められている優先度によらず、追加された前記依存関係に基づいて前記並列化プログラムを生成することを特徴とする並列化コンパイル方法。
【請求項２】
シングルコアプロセッサ用のプログラムである逐次プログラム（Ｐ１）を解析することにより当該プログラムを複数の処理に分割し、当該複数の処理から、マルチコアプロセッサ（３０）により並列化処理の可能な並列化プログラム（Ｐ２）を生成するコンパイル処理をコンパイラ装置（２）に実行させる並列化コンパイラ（ＣＰ）であって、
前記複数の処理のうちのいずれかの処理が変更された際に、予め定められたパラメータに基づき前記複数の処理の処理順序に制約を設けて前記コンパイル処理を行い、処理の変更の影響が処理順序の制約に応じた局所的な範囲に抑えられるものであり、
前記パラメータとして、前記逐次プログラムにおいて前後の処理の優先度を変更、又は前記前後の処理の依存関係を追加する指示子を用い、予め定められている優先度によらず、追加された前記依存関係に基づいて前記並列化プログラムを生成するコンパイル処理を前記コンパイラ装置に実行させることを特徴とする並列化コンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列化コンパイル方法、及び並列化コンパイラに関する。
【背景技術】
【０００２】
車載装置にマルチコアプロセッサを搭載させることにより、プログラムを各コアに分散させることができるため、スループットを向上させることが可能である。マルチコアプロセッサが搭載された車載装置では、従来のシングルコアプロセッサ用のプログラムである逐次プログラムに代えて、マルチコアプロセッサにより並列処理可能な並列化プログラムが必要となる。従来、並列化プログラムの生成を容易にすべく、逐次プログラムから並列化プログラムを自動的に生成する並列化コンパイラが提案されている。この種の並列化コンパイラとしては、特許文献１に記載の並列化コンパイラがある。特許文献１に記載の並列化コンパイラは、逐次プログラムを構成する処理間のデータ依存性や制御依存性を解析し、その解析結果に基づいて逐次プログラムから並列化プログラムを自動的に生成する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、例えばバージョンアップにより逐次プログラム中の一部の処理が変更されると、逐次プログラムを構成する処理間のデータ依存性や制御依存性が変化する可能性がある。そのため、何の対処も無しに変更後の逐次プログラムを並列化コンパイラによりコンパイルすると、変更箇所のみならず、それ以外の部分も含めて並列化プログラムの処理順序が大幅に入れ替わる可能性がある。すなわち、逐次プログラムの小規模な変更が並列化プログラム全体の変更へと波及するおそれがある。この場合、並列化プログラムが正常であるか否かの検証を並列化プログラム全体に対して再度行う必要があるため、検証コストが増大するおそれがある。
【０００５】
本発明は、こうした実情に鑑みてなされたものであり、その目的は、プログラムの変更時に並列化プログラムの検証を容易に行うことのできる並列化コンパイル方法、及び並列化コンパイラを提供することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、シングルコアプロセッサ用のプログラムである逐次プログラム（Ｐ１）を解析することにより当該プログラムを複数の処理に分割し、当該複数の処理から、マルチコアプロセッサにより並列化処理の可能な並列化プログラム（Ｐ２）を生成するコンピュータが実行する並列化コンパイル方法は、前記複数の処理のうちのいずれかの処理が変更された際に、予め定められたパラメータに基づき前記複数の処理の処理順序に制約を設けてコンパイルを行い、処理の変更の影響が処理順序の制約に応じた局所的な範囲に抑えられることにより前記逐次プログラムから前記並列化プログラムを生成するものであり、前記パラメータとして、前記逐次プログラムにおいて前後の処理の優先度を変更、又は前記前後の処理の依存関係を追加する指示子を用い、予め定められている優先度によらず、追加された前記依存関係に基づいて前記並列化プログラムを生成することを特徴とする。
【０００７】
また、シングルコアプロセッサ用のプログラムである逐次プログラム（Ｐ１）を解析することにより当該プログラムを複数の処理に分割し、当該複数の処理から、マルチコアプロセッサにより並列化処理の可能な並列化プログラム（Ｐ２）を生成するコンパイル処理をコンパイラ装置（２）に実行させる並列化コンパイラ（ＣＰ）は、前記複数の処理のうちのいずれかの処理が変更された際に、予め定められたパラメータに基づき前記複数の処理の処理順序に制約を設けて前記コンパイル処理を行い、処理の変更の影響が処理順序の制約に応じた局所的な範囲に抑えられるものであり、前記パラメータとして、前記逐次プログラムにおいて前後の処理の優先度を変更、又は前記前後の処理の依存関係を追加する指示子を用い、予め定められている優先度によらず、追加された前記依存関係に基づいて前記並列化プログラムを生成するコンパイル処理を前記コンパイラ装置に実行させることを特徴とする。
【０００９】
この構成によれば、複数の処理のうちのいずれかの処理が変更された際、複数の処理の処理順序に制約が設けられた状態でコンパイルが行われるため、処理の変更の影響が処理順序の制約に応じた局所的な範囲に抑えられる。すなわち、処理の変更は、並列化プログラム全体に影響を及ぼすことはなく、並列化プログラムの局所的な範囲に影響を及ぼすだけである。よって、並列化プログラムの局所的な範囲のみを検証すればよいため、プログラムの検証が容易となる。
【発明の効果】
【００１０】
本発明によれば、プログラムの変更時に並列化プログラムの検証を容易に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】並列化コンパイラの第１実施形態がインストールされるコンパイラ装置の概略構成を示すブロック図である。
【図２】第１実施形態のコンパイラ装置及びＥＣＵの概略構成を示すブロック図である。
【図３】第１実施形態の並列化コンパイラの処理手順を示すブロック図である。
【図４】第１実施形態の並列化コンパイラについて逐次プログラムの分割方法の一例を模式的に示す図である。
【図５】第１実施形態の並列化コンパイラについて処理の依存関係を模式的に示す図である。
【図６】第１実施形態の並列化コンパイラについてそのスケジューリングの一例を模式的に示す図である。
【図７】並列化コンパイラの第２実施形態についてその処理手順を示すブロック図である。
【図８】第２実施形態の並列化コンパイラについて処理の依存関係を模式的に示す図である。
【図９】並列化コンパイラの第３実施形態についてその処理手順を示すブロック図である。
【図１０】第３実施形態の並列化コンパイラについてその逐次プログラムの一例を模式的に示す図である。
【図１１】第３実施形態の並列化コンパイラについてそのスケジューリングの一例を模式的に示す図である。
【図１２】並列化コンパイラの第４実施形態についてその処理手順を示すブロック図である。
【図１３】第４実施形態の並列化コンパイラについてその逐次プログラムの一例を模式的に示す図である。
【図１４】並列化コンパイラの第５実施形態についてその処理手順を示すブロック図である。
【図１５】第５実施形態の並列化コンパイラについてそのスケジューリングの一例を模式的に示す図である。
【図１６】並列化コンパイラの第６実施形態についてその処理手順を示すブロック図である。
【図１７】第６実施形態の並列化コンパイラについてそのスケジューリングの一例を模式的に示す図である。
【図１８】並列化コンパイラの他の実施形態についてスケジューリングの一例を模式的に示す図である。
【発明を実施するための形態】
【００１２】
＜第１実施形態＞
以下、並列化コンパイル方法、並列化コンパイラ、及び車載装置の第１実施形態について説明する。
【００１３】
図１に示されるように、本実施形態の並列化コンパイラＣＰは、記憶媒体１に記憶された状態でユーザに提供される。
【００１４】
並列化コンパイラＣＰは、組込みシステム向けのシングルコアプロセッサ用のソースプログラムから、組込みシステム向けのマルチコアプロセッサ用のソースプログラムを生成する。以下、シングルコアプロセッサ用のプログラムを「逐次プログラム」と称する。また、マルチコアプロセッサ用のソースプログラムを「並列化プログラム」と称する。
【００１５】
記憶媒体１は、例えばＤＶＤやＣＤ−ＲＯＭ、ＵＳＢメモリ、メモリカード（登録商標）等の光ディスク、磁気ディスク、半導体メモリからなる。並列化コンパイラＣＰは記憶媒体１を介してコンパイラ装置２にインストールされる。
【００１６】
コンパイラ装置２は、例えば車載装置の組込みシステム向けの並列化プログラムの開発に用いられる。コンパイラ装置２は、ディスプレイ２０と、ハードディスクドライブ（ＨＤＤ）２１と、ＣＰＵ２２と、ＲＯＭ２３と、ＲＡＭ２４と、入力装置２５と、読み取り部２６とを備えている。
【００１７】
ディスプレイ２０は、ＣＰＵ２２から出力される映像信号に基づく映像を表示する。
入力装置２５は、キーボードやマウス等により構成されている。入力装置２５は、ユーザの操作に応じた信号をＣＰＵ２２に出力する。
【００１８】
読み取り部２６は、記憶媒体１から並列化コンパイラＣＰを読み取る部分である。
ＲＡＭ２４は、ＲＯＭ２３やＨＤＤ２１に記憶されたプログラムをＣＰＵ２２が実行する際に、そのプログラムを一時的に保存するための記憶領域や、演算処理用のデータを一時的に保存するための記憶領域として用いられる。
【００１９】
ＣＰＵ２２は、オペレーティングシステム（ＯＳ）をＨＤＤ２１から読み込んで実行することにより、ＨＤＤ２１に記憶されている各種プログラムをＯＳ上のプロセスとして実行する。ＣＰＵ２２は、このプロセスにおいて、入力装置２５からの信号の入力の受け付け、ディスプレイ２０への映像信号の出力、並びにＲＡＭ２４及びＨＤＤ２１に対するデータの読み出し／書き込みの制御等を行う。
【００２０】
コンパイラ装置２には、読み取り部２６を介して記憶媒体１から読み取られる並列化コンパイラＣＰがインストールされている。インストールされた並列化コンパイラＣＰは、ＨＤＤ２１に保存されており、ＯＳ上のプロセスとして実行されるアプリケーションの一つとなっている。
【００２１】
コンパイラ装置２では、ユーザの指示に基づいて並列化コンパイラＣＰが並列化処理を実行する。図２に示されるように、並列化処理は、逐次プログラムＰ１から並列化プログラムＰ２を自動的に生成する処理である。コンパイラ装置２により生成される並列化プログラムＰ２はＥＣＵ（ Electrical Control Unit）３に記憶される。ＥＣＵ３は、マルチコアプロセッサ３０と、通信部３１と、入出力ポート３２とを備えている。本実施形態では、ＥＣＵ３が車載装置に相当する。
【００２２】
入出力ポート３２は、車両に搭載された各種センサ５の検出信号を取り込んだり、車載アクチュエータ等の制御対象４に制御信号を送信する部分である。ＥＣＵ３から制御対象４に送信される制御信号により、制御対象４の駆動が制御される。
【００２３】
マルチコアプロセッサ３０は、ＲＯＭ３０１と、ＲＡＭ３０２と、複数のコア３０３ａ，３０３ｂ，…等を有している。ＲＯＭ３０１には、コンパイラ装置２により生成される並列化プログラムＰ２のバイナリデータが記憶されている。マルチコアプロセッサ３０は、ＲＯＭ３０１に記憶された並列化プログラムＰ２に基づいて動作し、制御対象４の駆動を統括的に制御する。
【００２４】
通信部３１は、ＣＡＮ（ Controller Area Network）等の車載ネットワークを介して接続された他の車載ＥＣＵ（ Electrical Control Unit）と通信を行う部分である。
【００２５】
次に、並列化コンパイラＣＰにより逐次プログラムＰ１から並列化プログラムＰ２を生成する処理について具体的に説明する。
【００２６】
図３に示されるように、並列化コンパイラＣＰは、まず、逐次プログラムＰ１のプログラム構造解析を行う（ステップＳ１）。具体的には、並列化コンパイラＣＰは、逐次プログラムＰ１の字句解析や構文・意味解析等を行う。
【００２７】
この際、並列化コンパイラＣＰは、逐次プログラムＰ１に対してインライン展開を行う。インライン展開とは、プログラム内のサブルーチンをコールする記述を、当該サブルーチンにて定義されている処理の記述に置き換える処理である。組込みシステム用のプログラムは一般的に処理が細かいため、粗い粒度での並列化が困難であるが、インライン展開を行うことで、サブルーチン内の並列性をも有効活用することが可能となる。
【００２８】
また、並列化コンパイラＣＰは、逐次プログラムＰ１の各関数内において、同一名称のローカル変数が用いられている複数の処理ブロックを特定すると共に、特定した各処理ブロックにおいて独自の名称のローカル変数が用いられるように逐次プログラムＰ１を改変する。処理ブロックは、例えばループ処理や、if文やswitch- case文等の分岐処理のステートメントと、これに付随する代入文等から構成される記述の集合体である。
【００２９】
並列化コンパイラＣＰは、ステップＳ１により解析された字句や構文・意味等に基づいて逐次プログラムＰ１を複数の処理（マクロタスク）Ａ，Ｂ，…に分割する（ステップＳ２）。各処理Ａ，Ｂ，…は、各種演算や代入、分岐処理、関数コール等からなる一連の処理である。例えば、図４に示されるように、並列化コンパイラＣＰは、逐次プログラムＰ１を処理Ａ〜Ｈに分割する。
【００３０】
図３に示されるように、ステップＳ２に続いて、並列化コンパイラＣＰは、各処理Ａ，Ｂ，…間の制御依存性及びデータ依存性を解析する（ステップＳ３，Ｓ４）。そして、並列化コンパイラＣＰは、各処理Ａ，Ｂ，…間のデータ依存性及び制御依存性に基づいて処理グラフ（マクロタスクグラフ）ＭＴＧを生成する（ステップＳ５）。並列化コンパイラＣＰは、例えば以下の条件（ａ１），（ａ２）に基づいて処理グラフＭＴＧを生成する。
【００３１】
（ａ１）処理ｘが処理ｙにデータ依存する場合には、処理ｘの実行が終了するまで処理ｙを実行できない。
（ａ２）処理ｙの条件分岐先が確定すれば、処理ｙの実行が終了していなくても、処理ｙに制御依存する処理ｘを実行できる。
【００３２】
処理グラフＭＴＧでは、全処理Ａ，Ｂ，…のデータ依存性が表現される。例えば、並列化コンパイラＣＰは、図４に示される処理Ａ〜Ｈから、図５に示されるような処理グラフＭＴＧを生成する。
【００３３】
ステップＳ５に続いて、並列化コンパイラＣＰは、予め定められた処理単位の優先度情報Ｉ１に基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する（ステップＳ６）。優先度情報Ｉ１は、例えば図中に示されるような処理Ａ，Ｂ，…単位の優先度を数字で表すものである。優先度情報Ｉ１は、優先度の数字が小さいほど、優先度の高い処理であることを示している。また、数字が同一の処理は、処理順序の優先度に差が無いことを示している。優先度情報Ｉ１は、例えば入力装置２５から入力情報として入力されたり、記憶媒体１に予め記憶されている。本実施形態では、優先度情報Ｉ１が、予め定められたパラメータに相当する。
【００３４】
ステップＳ６の処理に続いて、並列化コンパイラＣＰは、ステップＳ５で生成される処理グラフＭＴＧ、及びステップＳ６により解析される各処理Ａ，Ｂ，…の処理順序の制約に基づいて、各処理Ａ，Ｂ，…を複数のプロセッサグループＰＧ１，ＰＧ２，…に割り当てるスケジューリングを行う（ステップＳ７）。プロセッサグループＰＧ１，ＰＧ２，…は、マルチコアプロセッサ３０のコア３０３ａ，３０３ｂ，…に対応した数だけ設けられている。例えばマルチコアプロセッサ３０に設けられるコアの数が２つの場合には、プロセッサグループは２つ用意される。具体的には、並列化コンパイラＣＰは、以下の条件（ｂ１），（ｂ２）を満たしつつ、並列処理の実行可能な処理のうちの全部又は一部を異なるプロセッサグループＰＧ１，ＰＧ２，…に割り当てる。
【００３５】
（ｂ１）優先度の高い処理は、優先度の低い処理よりも先に実行される。
（ｂ２）優先度の低い処理の開始時期は、優先度の高い処理の終了時期よりも遅い。
【００３６】
また、並列化コンパイラＣＰは、必要に応じてプロセッサグループＰＧ１，ＰＧ２，…に待ち時間を挿入する。これにより、並列化コンパイラＣＰは、例えば図５に示される処理グラフＭＴＧと、優先度情報Ｉ１とに基づいて、図６に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。
【００３７】
なお、並列化コンパイラＣＰは、プロセッサグループＰＧ１，ＰＧ２，…の比較例を複数生成し、複数の比較例の中から最適なプロセッサグループＰＧ１，ＰＧ２，…を選択してもよい。プロセッサグループＰＧ１，ＰＧ２，…が最適であるか否かの判定は、例えばプロセッサグループＰＧ１，ＰＧ２，…のそれぞれの実行時間の長さや、所定の評価関数に基づき演算される評価値等を用いて行われる。
【００３８】
並列化コンパイラＣＰは、プロセッサグループＰＧ１，ＰＧ２，…の生成が完了した後、プロセッサグループＰＧ１，ＰＧ２，…に基づいて並列化プログラムＰ２のバイナリデータを生成する。このようにして生成される並列化プログラムＰ２がマルチコアプロセッサ３０のＲＯＭ３０１に記憶される。
【００３９】
次に、本実施形態の並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の作用及び効果について説明する。
【００４０】
図６に示されるように、バージョンアップ等に起因する逐次プログラムＰ１の変更により、例えば処理Ｅの内容に変更が生じたとする。この場合、並列化コンパイラＣＰが逐次プログラムＰ１から並列化プログラムＰ２を生成すると、処理Ｅを含め、それと同一の優先度の処理Ｄ及び処理ＦについてはプロセッサグループＰＧ１，ＰＧ２への割り当てが変更される可能性がある。しかしながら、処理Ｄ〜Ｆを除く処理Ａ〜Ｃ，Ｇ，Ｈについては、プロセッサグループＰＧ１，ＰＧ２への割り当てが維持される。すなわち、処理Ｅの変更は、並列化プログラムＰ２全体に影響を及ぼすことはなく、図中に二点鎖線で示される並列化プログラムの局所的な範囲に影響を及ぼすだけである。よって、並列化プログラムＰ２の局所的な範囲、具体的には処理Ｄ〜Ｆの範囲だけを検証すればよいため、並列化プログラムＰ２の検証を容易に行うことができる。
【００４１】
一方、プログラム仕様書には、関数単位で処理順序の規定が存在する場合があるため、処理グラフＭＴＧのデータ依存関係だけを考慮してプロセッサグループＰＧ１，ＰＧ２，…への割り当てを行と、プロセッサグループＰＧ１，ＰＧ２，…に割り当てられる処理が仕様不一致になるおそれがある。すなわち、並列化プログラムＰ２が仕様不一致になる可能性がある。この点、本実施形態の並列化コンパイラＣＰによれば、仕様に沿うように優先度情報Ｉ１を設定することにより、例えば処理Ｅが変更された際に並列化プログラムＰ２が仕様不一致になることを回避できる。
【００４２】
＜第２実施形態＞
次に、並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の第２実施形態について説明する。以下、第１実施形態との相違点を中心に説明する。
【００４３】
図７に示されるように、本実施形態の並列化コンパイラＣＰは、ステップＳ６の工程において、処理単位の優先度情報Ｉ１に代えて、依存関係情報Ｉ２に基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する。依存関係情報Ｉ２は、処理グラフＭＴＧにおいて規定される処理単位のデータ依存性とは別に、任意に設定可能な処理単位のデータ依存性を表すものである。依存関係情報Ｉ２は、例えば図中に示されるように各処理Ａ，Ｂ，…のデータ依存性を表す。依存関係情報Ｉ２は、依存関係元の欄に記載される処理と、依存関係先の欄に記載される処理とのデータ依存関係を示している。例えば処理Ａは、処理Ｄ〜Ｆとデータ依存関係があることを表している。依存関係情報Ｉ２は、例えば入力装置２５から入力情報として入力されたり、記憶媒体１に予め記憶されている。本実施形態では、依存関係情報Ｉ２が、予め定められたパラメータに相当する。これにより、例えば処理Ａには、図８に二点鎖線で示されるような架空のデータ依存性を追加することができる。なお、図８では、便宜上、処理Ａの架空のデータ依存性のみを示している。
【００４４】
また、並列化コンパイラＣＰは、ステップＳ５で生成される処理グラフＭＴＧ、及びステップＳ６により解析される各処理Ａ，Ｂ，…の処理順序の制約に基づいて、各処理Ａ，Ｂ，…を複数のプロセッサグループＰＧ１，ＰＧ２，…に割り当てるスケジューリングを行う（ステップＳ７）。その際、並列化コンパイラＣＰは、上記（ｂ１），（ｂ２）の条件を用いずにスケジューリングを行う。すなわち、並列化コンパイラＣＰは、例えば図８に示されるような架空のデータ依存性が追加された処理グラフＭＴＧに基づいて、並列実行可能な処理のうちの全部又は一部を異なるプロセッサグループＰＧ１，ＰＧ２に割り当てる。これにより、並列化コンパイラＣＰは、処理Ａ〜Ｃの実行が終了した後に処理Ｄ〜Ｆが実行されるようにプロセッサグループＰＧ１，ＰＧ２への割り当てを行う。また、並列化コンパイラＣＰは、処理Ｄ〜Ｆの実行が終了した後に処理Ｇ，Ｈが実行されるようにプロセッサグループＰＧ１，ＰＧ２への割り当てを行う。よって、並列化コンパイラＣＰは、例えば図６に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。
【００４５】
次に、本実施形態の並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の作用及び効果について説明する。
【００４６】
図６に示されるように、処理Ｅの内容に変更が生じた場合でも、並列化コンパイラＣＰは、依存関係情報Ｉ２により、処理Ａ〜Ｃの実行が終了した後に処理Ｄ〜Ｆが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。また、並列化コンパイラＣＰは、処理Ｄ〜Ｆの実行が終了した後に処理Ｇ，Ｈが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。したがって、処理Ｅの変更は、図中に二点鎖線で囲まれる範囲、すなわち並列化プログラムＰ２の局所的な範囲に影響を及ぼすだけである。よって、上記第１実施形態と同様の効果を得ることができる。
【００４７】
＜第３実施形態＞
次に、並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の第２実施形態について説明する。以下、第１実施形態との相違点を中心に説明する。
【００４８】
図９に示されるように、本実施形態の並列化コンパイラＣＰは、ステップＳ６の工程において、処理単位の優先度情報Ｉ１に代えて、逐次プログラムＰ１の関数Ｆａ，Ｆｂ，…単位の優先度情報Ｉ３に基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する。例えば、図１０に示されるような関数Ｆａ，Ｆｂ，Ｆｃが逐次プログラムＰ１に記載されているとする。関数Ｆａは処理Ａ〜Ｃを含んでいる。関数Ｆｂは処理Ｄ〜Ｆを含んでいる。関数Ｆｃは処理Ｇ，Ｈを含んでいる。なお、ステップＳ１のプログラム構造解析のインライン展開時には、処理Ａ〜Ｈは親関数の処理順序をそのまま承継する。
【００４９】
この場合、優先度情報Ｉ３は、例えば図９に示されるように、関数Ｆａ〜Ｆｃ単位の優先度を数字で表したものとなる。優先度情報Ｉ３は、優先度の数字が小さいほど、処理の優先度の高い関数であることを示している。優先度情報Ｉ３は、例えば入力装置２５から入力情報として入力されたり、記憶媒体１に予め記憶されている。本実施形態では、優先度情報Ｉ３が、予め定められたパラメータに相当する。
【００５０】
ステップＳ６の処理に続いて、並列化コンパイラＣＰは、ステップＳ５で生成される処理グラフＭＴＧ、及びステップＳ６により解析される各処理Ａ，Ｂ，…の処理順序の制約に基づいて、各処理Ａ，Ｂ，…を複数のプロセッサグループＰＧ１，ＰＧ２，…に割り当てるスケジューリングを行う（ステップＳ７）。具体的には、並列化コンパイラＣＰは、以下の条件（ｃ１），（ｃ２）を満たしつつ、並列処理の実行可能な処理のうちの全部又は一部を異なるプロセッサグループＰＧ１，ＰＧ２，…に割り当てる。
【００５１】
（ｃ１）優先度の高い関数は、優先度の低い関数よりも先に実行される。
（ｃ２）優先度の低い関数の開始時期は、優先度の高い関数の終了時期よりも遅い。
【００５２】
これにより、並列化コンパイラＣＰは、例えば図５に示される処理グラフＭＴＧと、優先度情報Ｉ３とに基づいて、図１１に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。
【００５３】
次に、本実施形態の並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の作用及び効果について説明する。
【００５４】
図１１に示されるように、処理Ｅの内容に変更が生じた場合でも、並列化コンパイラＣＰは、優先度情報Ｉ３により、関数Ｆａの実行が終了した後に関数Ｆｂが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。また、並列化コンパイラＣＰは、関数Ｆｂの実行が終了した後に関数Ｆｃが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。したがって、処理Ｅの変更は、図中に二点鎖線で示される範囲、すなわち並列化プログラムＰ２の局所的な範囲に影響を及ぼすだけである。よって、上記第１実施形態と同様の効果を得ることができる。
【００５５】
＜第４実施形態＞
次に、並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の第２実施形態について説明する。以下、第１実施形態との相違点を中心に説明する。
【００５６】
図１２に示されるように、本実施形態の並列化コンパイラＣＰは、ステップＳ６の工程において、逐次プログラムＰ１中に記載された指示子Ｉｎｄに基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する。指示子Ｉｎｄは、逐次プログラムＰ１中において前後の処理の優先度を変更するものである。例えば図１３に示されるように、前後の処理の優先度を変更する指示子Ｉｎｄが逐次プログラムＰ１に記載されているとする。この場合、並列化コンパイラＣＰは、指示子Ｉｎｄがプログラム中で登場する都度、処理順序の優先度を下げていく。結果的に、処理Ａ〜Ｃ、処理Ｄ〜Ｆ、及び処理Ｇ，Ｈの順で処理順序の優先度が低くなる。本実施形態では、指示子Ｉｎｄが予め定められたパラメータに相当する。
【００５７】
このような構成によれば、第１実施形態と同様に各処理Ａ，Ｂ，…に優先順位を設けることができるため、第１実施形態と同様の作用及び効果を得ることができる。
【００５８】
＜第５実施形態＞
次に、並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の第５実施形態について説明する。以下、第１実施形態との相違点を中心に説明する。
【００５９】
図１４に示されるように、本実施形態の並列化コンパイラＣＰは、ステップＳ６の処理において、処理単位の優先度情報Ｉ１に代えて、処理フォルダＦＤａ，ＦＤｂ，…毎の優先度情報Ｉ４に基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する。処理フォルダには、単数又は複数の処理ファイルが格納されている。処理ファイルには、単数又は複数の処理が記載されている。
【００６０】
例えば逐次プログラムＰ１が、処理フォルダＦＤａ，ＦＤｂ，ＦＤｃにより構成されているとする。処理フォルダＦＤａには、処理Ａ〜Ｃの内容が記載された処理ファイルが格納されている。処理フォルダＦＤｂには、処理Ｄ〜Ｆの内容が記載された処理ファイルが格納されている。処理フォルダＦＤｃには、処理Ｇ，Ｈの内容が記載された処理ファイルが格納されている。並列化コンパイラＣＰは、処理フォルダＦＤａ〜ＦＤｃに格納されている処理ファイルを実行する。この場合、優先度情報Ｉ４は、例えば図１４に示されるように、処理フォルダＦＤａ〜ＦＤｃ単位の優先度を数字で表したものとなる。優先度情報Ｉ４は、優先度の数字が小さいほど、処理の優先度の高い処理フォルダであることを示している。優先度情報Ｉ４は、例えば入力装置２５から入力情報として入力されたり、記憶媒体１に予め記憶されている。本実施形態では、優先度情報Ｉ４が、予め定められたパラメータに相当する。
【００６１】
ステップＳ６の処理に続いて、並列化コンパイラＣＰは、ステップＳ５で生成される処理グラフＭＴＧ、及びステップＳ６により解析される各処理Ａ，Ｂ，…の処理順序の制約に基づいて、各処理Ａ，Ｂ，…を複数のプロセッサグループＰＧ１，ＰＧ２，…に割り当てるスケジューリングを行う（ステップＳ７）。具体的には、並列化コンパイラＣＰは、以下の条件（ｄ１），（ｄ２）を満たしつつ、並列処理の実行可能な処理のうちの全部又は異物を異なるプロセッサグループＰＧ１，ＰＧ２，…に割り当てる。
【００６２】
（ｄ１）優先度の高い処理フォルダは、優先度の低い処理フォルダよりも先に実行される。
（ｄ２）優先度の低い処理フォルダの開始時期は、優先度の高い処理フォルダの終了時期よりも遅い。
【００６３】
これにより、並列化コンパイラＣＰは、例えば図５に示される処理グラフＭＴＧと、優先度情報Ｉ３とに基づいて、図１５に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。
【００６４】
次に、本実施形態の並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の作用及び効果について説明する。
【００６５】
図１５に示されるように、処理Ｅの内容に変更が生じた場合でも、並列化コンパイラＣＰは、優先度情報Ｉ３により、処理フォルダＦＤａの実行が終了した後に処理フォルダＦＤｂが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。また、並列化コンパイラＣＰは、処理フォルダＦＤｂの実行が終了した後に処理フォルダＦＤｃが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。したがって、処理Ｅの変更は、図中に二点鎖線で示される範囲、すなわち並列化プログラムＰ２の局所的な範囲に影響を及ぼすだけである。よって、上記第１実施形態と同様の効果を得ることができる。
【００６６】
＜第６実施形態＞
次に、並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の第６実施形態について説明する。以下、第１実施形態との相違点を中心に説明する。
【００６７】
図１６に示されるように、本実施形態の並列化コンパイラＣＰは、ステップＳ６の処理において、処理単位の優先度情報Ｉ１に代えて、処理ファイルＦＬａ，ＦＬｂ，…毎の優先度情報Ｉ５に基づいて各処理Ａ，Ｂ，…の処理順序の制約を解析する。処理ファイルには、単数又は複数の処理が記載されている。
【００６８】
例えば逐次プログラムＰ１が処理ファイルＦＬａ，ＦＬｂ，ＦＬｃにより構成されているとする。処理ファイルＦＬａには、処理Ａ〜Ｃの内容が記載されている。処理ファイルＦＬｂには、処理Ｄ〜Ｆの内容が記載されている。処理ファイルＦＬｃには、処理Ｇ，Ｈの内容が記載されている。並列化コンパイラＣＰは、処理ファイルＦＬａ〜ＦＬｃに格納されている処理ファイルを実行する。この場合、優先度情報Ｉ４は、例えば図１６に示されるように、処理ファイルＦＬａ〜ＦＬｃ単位の優先度を数字で表したものとなる。優先度情報Ｉ４は、優先度の数字が小さいほど、処理の優先度の高い処理ファイルであることを示している。優先度情報Ｉ４は、例えば入力装置２５から入力情報として入力されたり、記憶媒体１に予め記憶されている。本実施形態では、優先度情報Ｉ４が、予め定められたパラメータに相当する。
【００６９】
ステップＳ６の処理に続いて、並列化コンパイラＣＰは、ステップＳ５で生成される処理グラフＭＴＧ、及びステップＳ６により解析される各処理Ａ，Ｂ，…の処理順序の制約に基づいて、各処理Ａ，Ｂ，…を複数のプロセッサグループＰＧ１，ＰＧ２，…に割り当てるスケジューリングを行う（ステップＳ７）。具体的には、並列化コンパイラＣＰは、以下の条件（ｅ１），（ｅ２）を満たしつつ、並列処理の実行可能な処理のうちの全部又は一部を異なるプロセッサグループＰＧ１，ＰＧ２，…に割り当てる。
【００７０】
（ｅ１）優先度の高い処理ファイルは、優先度の低い処理ファイルよりも先に実行される。
（ｅ２）優先度の低い処理ファイルの開始時期は、優先度の高い処理ファイルの終了時期よりも遅い。
【００７１】
これにより、並列化コンパイラＣＰは、例えば図５に示される処理グラフＭＴＧと、優先度情報Ｉ５とに基づいて、図１７に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。
【００７２】
次に、本実施形態の並列化コンパイル方法、並列化コンパイラＣＰ、及びＥＣＵ３の作用及び効果について説明する。
【００７３】
図１７に示されるように、処理Ｅの内容に変更が生じた場合でも、並列化コンパイラＣＰは、優先度情報Ｉ３により、処理ファイルＦＬａの実行が終了した後に処理ファイルＦＬｂが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。また、並列化コンパイラＣＰは、処理ファイルＦＬｂの実行が終了した後に処理ファイルＦＬｃが実行されるようなプロセッサグループＰＧ１，ＰＧ２を生成する。したがって、処理Ｅの変更は、図中に二点鎖線で示される範囲、すなわち並列化プログラムＰ２の局所的な範囲に影響を及ぼすだけである。よって、上記第１実施形態と同様の効果を得ることができる。
【００７４】
＜他の実施形態＞
なお、上記実施形態は、以下の形態にて実施することもできる。
・第１実施形態の並列化コンパイラＣＰは、ステップＳ７のスケジューリングの際の条件（ｂ２）に代えて、以下の条件（ｂ３）を用いてもよい。
【００７５】
（ｂ３）優先度の低い処理の開始時期は、優先度の高い処理の開始時期よりも遅い。
【００７６】
これにより、並列化コンパイラＣＰは、例えば図５に示される処理グラフＭＴＧと、優先度情報Ｉ１とに基づいて、図１８に示されるようなプロセッサグループＰＧ１，ＰＧ２を生成することができるため、並列化プログラムＰ２の実行時間を短縮することができる。第３実施形態の条件（ｃ２）、第５実施形態の条件（ｄ２）、及び第６実施形態の条件（ｅ２）についても同様に変更してもよい。
【００７７】
・第４実施形態の指示子Ｉｎｄは、逐次プログラムＰ１中の前後の処理の依存関係を追加するものであってもよい。このような構成であっても、第４実施形態と同様の作用及び効果を得ることができる。
【００７８】
・並列化コンパイラＣＰは、ネットワークを介してコンパイラ装置２にインストールされるものであってもよい。
【００７９】
・コンパイラ装置２は、車載装置に限らず、情報家電等の様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
【００８０】
・本発明は上記の具体例に限定されるものではない。すなわち、上記の具体例に、当業者が適宜設計変更を加えたものも、本発明の特徴を備えている限り、本発明の範囲に包含される。例えば、前述した各具体例が備える各要素及びその配置や条件等は、例示したものに限定されるわけではなく適宜変更することができる。また、前述した実施形態が備える各要素は、技術的に可能な限りにおいて組み合わせることができ、これらを組み合わせたものも本発明の特徴を含む限り本発明の範囲に包含される。
【符号の説明】
【００８１】
ＣＰ：並列化コンパイラ
Ｐ１：逐次プログラム
Ｐ２：並列化プログラム
２：コンパイラ装置
３：ＥＣＵ（車載装置）
３０：マルチコアプロセッサ
【図１】
0006427055.tif 000002
【図２】
0006427055.tif 000003
【図３】
0006427055.tif 000004
【図４】
0006427055.tif 000005
【図５】
0006427055.tif 000006
【図６】
0006427055.tif 000007
【図７】
0006427055.tif 000008
【図８】
0006427055.tif 000009
【図９】
0006427055.tif 000010
【図１０】
0006427055.tif 000011
【図１１】
0006427055.tif 000012
【図１２】
0006427055.tif 000013
【図１３】
0006427055.tif 000014
【図１４】
0006427055.tif 000015
【図１５】
0006427055.tif 000016
【図１６】
0006427055.tif 000017
【図１７】
0006427055.tif 000018
【図１８】
0006427055.tif 000019