(57)【特許請求の範囲】
【請求項１】
シングルプロセッサシステムにより実行されるプログラムであって、条件付コンパイルにより入力情報に応じてコンパイルするか否かが選択される条件付記述が含まれている逐次プログラムに記述された処理を、前記入力情報に関わらず複数のマクロタスクに分割する分割手順（Ｓ２１０）と、
前記マクロタスク間のデータ依存性に基づき、マルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手順（Ｓ２２０）と、
それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てる処理であって、並列実行可能な前記マクロタスクのうちの全部又は一部を、異なる前記プロセッサユニットに割り当て、前記マルチプロセッサシステムを動作させるための並列化プログラムを生成するスタティックスケジューリングを行うスケジューリング手順（Ｓ１１０）と、
を有することを特徴とする並列化コンパイル方法であって、
前記分割手順では、１の前記条件付記述により記述された処理は、１又は複数の前記マクロタスクとして、前記逐次プログラムに記述された他の処理から分割され、
前記スケジューリング手順において、予め定められた前記入力情報に対応して前記スタティックスケジューリングを行い、前記スタティックスケジューリングでは、対応する前記入力情報ではコンパイルの対象とならない前記条件付記述に対応する前記マクロタスクの処理負荷が無いものとみなすこと、
を特徴とする並列化コンパイル方法。
【請求項２】
請求項１に記載の並列化コンパイル方法において、
前記分割手順では、１の前記条件付記述により記述された処理は、１の前記マクロタスクとして、前記逐次プログラムに記述された他の処理から分割されること、
を特徴とする並列化コンパイル方法。
【請求項３】
請求項１又は請求項２に記載の並列化コンパイル方法において、
前記入力情報に基づきコンパイルの対象外となる前記条件付記述を特定し、前記スタティックスケジューリングにより生成された前記並列化プログラムにおける特定した前記条件付記述を除いた部分から、バイナリデータを生成する生成手順（Ｓ１３０，Ｓ１３５）をさらに有すること、
を特徴とする並列化コンパイル方法。
【請求項４】
シングルプロセッサシステムにより実行されるプログラムであって、条件付コンパイルにより入力情報に応じてコンパイルするか否かが選択される条件付記述が含まれている逐次プログラムに記述された処理を、前記入力情報に関わらず複数のマクロタスクに分割する分割手順（Ｓ２１０）と、
前記マクロタスク間のデータ依存性に基づき、マルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手順（Ｓ２２０）と、
それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てる処理であって、並列実行可能な前記マクロタスクのうちの全部又は一部を、異なる前記プロセッサユニットに割り当て、前記マルチプロセッサシステムにより実行される並列化プログラムを生成するスタティックスケジューリングを行うスケジューリング手順（Ｓ１１０）と、
を有することを特徴とする並列化コンパイル方法であって、
前記スケジューリング手順において、前記マクロタスクの処理負荷に基づき前記スタティックスケジューリングを行うと共に、予め定められた前記入力情報に対応して前記スタティックスケジューリングを行い、前記スタティックスケジューリングでは、対応する前記入力情報ではコンパイルの対象とならない前記条件付記述に対応する前記マクロタスクの処理負荷が無いものとみなすこと、
を特徴とする並列化コンパイル方法。
【請求項５】
請求項１から請求項４のうちのいずれか１項に記載の並列化コンパイル方法において、
前記スケジューリング手順において、予め定められた２種類以上の前記入力情報の各々に対応して前記スタティックスケジューリングを行い、各種類の前記入力情報に対応する前記並列化プログラムを生成し、
予め定められた前記入力情報に対応付けられており、前記スタティックスケジューリングにおいて生成されたそれぞれの前記並列化プログラムから、該入力情報によりコンパイルしないことが選択された前記条件付記述を除去したものを、比較プログラムとし、
前記並列化コンパイル方法は、
各々の前記スタティックスケジューリングについて、該スタティックスケジューリングにより生成された前記並列化プログラムから生じる、各種類の前記入力情報に対応付けられている前記比較プログラムの性能を検証する検証手順（Ｓ１２０）と、
前記検証手順による検証結果に基づき、いずれかの前記スタティックスケジューリングを選択する選択手順（Ｓ１２０）と、
をさらに有することを特徴とする並列化コンパイル方法。
【請求項６】
請求項５に記載の並列化コンパイル方法において、
前記検証手順において、それぞれの前記比較プログラムに関して、各々の前記プロセッサユニットについて、前記割り当てがなされている前記マクロタスクの処理負荷の総和を算出し、これらの総和のうちの最大値を、該比較プログラムの最大処理負荷とし、
前記選択手順において、前記最大処理負荷に基づき、前記スタティックスケジューリングを選択すること、
を特徴とする並列化コンパイル方法。
【請求項７】
請求項５に記載の並列化コンパイル方法において、
前記検証手順において、それぞれの前記比較プログラムに関して、該比較プログラムに従い動作する前記マルチプロセッサシステムと、該比較プログラムに対応する前記入力情報によりコンパイルしないことが選択された前記条件付記述を除いた前記逐次プログラムに従い動作する前記シングルプロセッサシステムとの性能の差を推定し、
前記選択手順において、前記性能の差の推定結果に基づき、前記スタティックスケジューリングを選択すること、
を特徴とする並列化コンパイル方法。
【請求項８】
請求項５に記載の並列化コンパイル方法において、
前記検証手順において、それぞれの前記比較プログラムに関して、各々の前記プロセッサユニットについて、前記割り当てがなされている前記マクロタスクの処理負荷の総和を算出し、該総和の最大値を、該比較プログラムの最大処理負荷とすると共に、該比較プログラムに従い動作する前記マルチプロセッサシステムと、該比較プログラムに対応する前記入力情報によりコンパイルしないことが選択された前記条件付記述を除いた前記逐次プログラムに従い動作する前記シングルプロセッサシステムとの性能の差を推定し、
前記選択手順において、前記最大処理負荷と前記性能の差の推定結果とに基づき、前記スタティックスケジューリングを選択すること、
を特徴とする並列化コンパイル方法。
【請求項９】
請求項５から請求項８のうちのいずれか１項に記載の並列化コンパイル方法において、
前記選択手順において、前記スタティックスケジューリングを選択することができなかった場合には、その旨を報知する報知手順（Ｓ１４５）をさらに有すること、
を特徴とする並列化コンパイル方法。
【請求項１０】
シングルプロセッサシステムにより実行されるプログラムであって、条件付コンパイルにより入力情報に応じてコンパイルするか否かが選択される条件付記述が含まれている逐次プログラムに記述された処理を、前記入力情報に関わらず複数のマクロタスクに分割する分割手段（Ｓ２１０）と、
前記マクロタスク間のデータ依存性に基づき、マルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手段（Ｓ２２０）と、
それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てる処理であって、並列実行可能な前記マクロタスクのうちの全部又は一部を、異なる前記プロセッサユニットに割り当て、前記マルチプロセッサシステムを動作させるための並列化プログラムを生成するスタティックスケジューリングを行うスケジューリング手段（Ｓ１１０）として、
コンピュータを動作させることを特徴とする並列化コンパイラ（１）であって、
前記分割手段は、１の前記条件付記述により記述された処理は、１又は複数の前記マクロタスクとして、前記逐次プログラムに記述された他の処理から分割し、
前記スケジューリング手段は、予め定められた前記入力情報に対応して前記スタティックスケジューリングを行い、前記スタティックスケジューリングでは、対応する前記入力情報ではコンパイルの対象とならない前記条件付記述に対応する前記マクロタスクの処理負荷が無いものとみなすこと、
を特徴とする並列化コンパイラ。
【請求項１１】
請求項１０に記載の並列化コンパイラにおいて、
前記入力情報に基づきコンパイルの対象外となる前記条件付記述を特定し、前記スタティックスケジューリングにより生成された前記並列化プログラムにおける特定した前記条件付記述を除いた部分から、バイナリデータを生成する生成手段（Ｓ１３０，Ｓ１３５）をさらに有すること、
を特徴とする並列化コンパイラ。
【請求項１２】
シングルプロセッサシステムにより実行されるプログラムであって、条件付コンパイルにより入力情報に応じてコンパイルするか否かが選択される条件付記述が含まれている逐次プログラムに記述された処理を、前記入力情報に関わらず複数のマクロタスクに分割する分割手段（Ｓ２１０）と、
前記マクロタスク間のデータ依存性に基づき、マルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手段（Ｓ２２０）と、
それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てる処理であって、並列実行可能な前記マクロタスクのうちの全部又は一部を、異なる前記プロセッサユニットに割り当て、前記マルチプロセッサシステムにより実行される並列化プログラムを生成するスタティックスケジューリングを行うスケジューリング手段（Ｓ１１０）として、
コンピュータを動作させることを特徴とする並列化コンパイラ（１）であって、
前記スケジューリング手段は、前記マクロタスクの処理負荷に基づき前記スタティックスケジューリングを行うと共に、予め定められた前記入力情報に対応して前記スタティックスケジューリングを行い、前記スタティックスケジューリングでは、対応する前記入力情報ではコンパイルの対象とならない前記条件付記述に対応する前記マクロタスクの処理負荷が無いものとみなすこと、
を特徴とする並列化コンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列化コンパイル方法、並列化コンパイラ、及び、電子装置に関する。
【背景技術】
【０００２】
マルチコアプロセッサが搭載された車載装置において、各コアに機能を分散させることでスループットを向上させることが知られている（非特許文献１）。また、シングルコアプロセッサ用のプログラム（逐次プログラム）から、マルチコアプロセッサにより並列処理可能な並列化プログラムを生成する並列化コンパイラが知られている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】K Seo，J Yoon，J Kim，T Chung，K Yi，N Chang、「Coordinated implementation and processing of a unified chassis control algorithm with multi-central processing unit」、JAUTO1346 IMechE、２００９年、Vol.224 Part D
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、逐次プログラムにおいて、条件コンパイルスイッチにより仕向地等に応じてコンパイル対象となる記述を選択する場合がある（条件付コンパイル）。並列化コンパイラを用いてこのような逐次プログラムから並列化プログラムを生成する場合、一般的に、まず、条件コンパイルスイッチに基づき逐次プログラムの中からコンパイルの対象となる部分が特定され、該部分から並列化プログラムが生成される。
【０００５】
しかしながら、コンパイルの対象となる部分が変更されると、逐次プログラムを構成するマクロタスク間のデータ依存性や制御依存性が変化する可能性がある。このため、同一の逐次プログラムから生成された仕向地等の異なる複数の並列化プログラムでは、同一の逐次プログラムから生成され、同等の機能を有するにも関わらず、各プロセッサコアに割り当てられる処理内容が大きく異なる可能性がある。その結果、品質の維持や並列化プログラムの管理が困難になる。
【０００６】
本発明は、並列化プログラムの品質の維持や管理を容易にすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面である並列化コンパイル方法は、シングルプロセッサシステムにより実行されるプログラムであって、条件付コンパイルにより入力情報に応じてコンパイルするか否かが選択される条件付記述が含まれている逐次プログラムに記述された処理を、入力情報に関わらず複数のマクロタスクに分割する分割手順（Ｓ２１０）と、マクロタスク間のデータ依存性に基づき、マルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能なマクロタスクを抽出する抽出手順（Ｓ２２０）と、それぞれのマクロタスクをいずれかのプロセッサユニットに割り当てる処理であって、並列実行可能なマクロタスクのうちの全部又は一部を、異なるプロセッサユニットに割り当て、マルチプロセッサシステムにより実行される並列化プログラムを生成するスタティックスケジューリングを行うスケジューリング手順（Ｓ１１０）と、を有する。
【０００８】
このような構成によれば、条件付記述を全て含んだ状態で逐次プログラムから並列化プログラムが生成される。そして、入力情報を設定することで、該並列化プログラムにおける条件付記述の中からコンパイルの対象外となる部分を除去することが可能となる。
【０００９】
このため、どのような入力情報が設定されても、条件付記述に対応する処理以外の処理（入力情報の内容に関わらず常に実行される処理）は、常に同じプロセッサユニットに割り当てられることになる。つまり、入力情報を設定することで仕向地等の異なる複数の種別の並列化プログラムが生成される場合であっても、各種別の並列化プログラムの共通性をより一層高めることができ、その結果、並列化プログラムの品質の維持や管理が容易になる。
【００１０】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、１つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】自動並列化コンパイラがインストールされたＰＣの構成を示すブロック図である。
【図２】自動並列化処理のフローチャートである。
【図３】ソフト構造解析処理のフローチャートである。
【図４】車載装置の構成を示すブロック図である。
【図５】具体例１における逐次プログラムや割当情報や比較プログラムの説明図である。
【図６】具体例１における逐次プログラムに記載された処理の処理時間等を示す表である。
【図７】具体例１で生成された比較プログラムの性能の検証結果を示す表である。
【図８】具体例２における逐次プログラムやＭＴＧの説明図である。
【図９】具体例２におけるＭＴＧや割当情報の説明図である。
【図１０】具体例２における逐次プログラムに記載された処理の処理時間等を示す表である。
【図１１】具体例２で生成された比較プログラムの並列実行時間を示す表である。
【図１２】具体例３で生成された比較プログラムの性能の検証結果を示す表である。
【図１３】具体例４における逐次プログラムの説明図である。
【図１４】具体例４における条件コンパイルスイッチの引数等を示す表である。
【図１５】具体例４における各種別に対応する条件コンパイルスイッチの引数の値を示す表である。
【図１６】具体例４で生成された比較プログラムの説明図である。
【図１７】具体例４で生成された比較プログラムの説明図である。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【００１３】
［本実施形態について］
１．自動並列化コンパイラについて
本実施形態の自動並列化コンパイラは、組込みシステム向けのシングルプロセッサシステム用のソースプログラム（逐次プログラム）から、組込みシステム向けのマルチプロセッサシステム用の並列化プログラムを生成する機能を有している。
【００１４】
１−１．自動並列化コンパイラの設計概念
本実施形態の自動並列化コンパイラは、以下の機能を有している。
（１）マルチグレイン並列処理
（２）コンパイル時のスタティックスケジューリングコードの挿入
（３）実行時のダイナミックスケジューリングコードの生成
（４）階層型マクロデータフローの実現
（５）マクロタスクの分割／融合，Loop distribution／interchange等の並列性抽出
（６）データローカライズによるデータ転送効率の向上
（７）コンパイラによる電力削減
１−２．自動並列化コンパイラの内部処理
自動並列化コンパイラは、Front End（ＦＥ），Middle Path（ＭＰ），Back End（ＢＥ）の３つのステージを有している。各ステージは実行形態として独立しており、ＦＥ，ＭＰから生成される中間言語によりコード授受が行われる。
【００１５】
なお、ＦＥは、逐次プログラムのソースコードを字句解析・構文解析を行い、ＭＰにおいてparse可能な中間言語を生成する部位である。ＦＥの生成する中間言語は、基本的に４つのオペランドを持つ解析木（parse tree）で表現されており、全体として１つのブロックを形成していて構造化は行われていない。
【００１６】
また、ＭＰは、制御依存性解析・データ依存性解析・最適化等を行う部位であり、そのデータを用いて粗粒度・中粒度・近細粒度並列化のマルチグレイン並列処理を行う。
また、ＢＥは、ＭＰが生成した並列化中間言語を読み込んで実際のマシンコードを生成する部位である。当該部位は、ターゲットとなっているマルチコアアーキテクチャのアセンブラコードを生成するＢＥの他、OpenMP用の並列化FortranコードやＣコードを生成するＢＥを有している。さらには、当該部位は、後述する並列化ＡＰＩによりメモリ配置，データ転送を含めて並列化したコードを生成するＢＥ等、多様なアーキテクチャに対応したコードを出力するＢＥを有している。
【００１７】
１−３．自動並列化コンパイラの並列性解析
自動並列化コンパイラは、逐次プログラムを、基本ブロック（ＢＢ），繰り返しブロック（ＲＢ），サブルーチンブロック（ＳＢ）の３種類の粗粒度タスク（マクロタスク（ＭＴ））に分割するマクロデータフロー処理を行う。
【００１８】
しかし、マクロデータフロー処理では、プログラムの形状によってはプロセッサの利用効率が上がらず、十分な粗粒度並列性が抽出できないという問題点がある。
そこで、自動並列化コンパイラでは、従来の単階層マクロデータフロー処理手法を拡張し、ＭＴ内部に対してマクロデータフロー処理を階層的に利用する階層型マクロデータフロー処理を採用している。階層的マクロデータフロー処理では、ＭＴの階層的な定義を行い、各階層のマクロタスクに対してマクロタスク間の並列性の解析を行う。
【００１９】
＜マクロフローグラフ（ＭＦＧ）の生成＞
自動並列化コンパイラは、まず、生成された各階層のマクロタスクに対して、マクロタスク間の制御依存性とデータ依存性を解析する。この解析結果は、マクロフローグラフ（ＭＦＧ）として表される。
【００２０】
＜マクロタスクグラフ（ＭＴＧ）の生成＞
ＭＦＧは、マクロタスク間の制御依存性とデータ依存性を表すが、並列性は表していない。並列性を抽出するためには、各マクロタスクに対し、制御依存性とデータ依存性の両方を考慮した最早実行可能条件解析を行う必要がある。最早実行可能条件とは、そのＭＴが最も早い時点で実行可能になる条件であり、次のような実行条件から求められる。
【００２１】
（１）ＭＴｉがＭＴｊにデータ依存するならば、ＭＴｊの実行が終了するまでＭＴｉは実行できない。
（２）ＭＴｊの条件分岐先が確定すれば、ＭＴｊの実行が終了しなくても、ＭＴｊに制御依存するＭＴｉは実行できる。
【００２２】
したがって、最早実行可能条件の一般形は次のようになる。
（ＭＴｉが制御依存するＭＴｊがＭＴｉに分岐する）
ＡＮＤ
（（ＭＴｉがデータ依存するＭＴｋ（０≦ｋ≦｜Ｎ｜））が終了）ＯＲ（ＭＴｋが実行されないことが決定する））
マクロタスクの最早実行可能条件は、マクロタスクグラフ（ＭＴＧ）で表される。
【００２３】
１−４．マルチグレイン並列処理
自動並列化コンパイラでは、従来のループ並列化に加え、ループ間，サブルーチン間における粗粒度タスク間の並列性を利用する粗粒度タスク並列処理や、ステートメント間の並列性を利用する近細粒度並列処理を効果的に組み合わせたマルチグレイン並列処理（参考文献１（本多弘樹, 岩田雅彦, 笠原博徳、「Fortranプログラム粗粒度タスク間の並列性検出手法」、電子情報通信学会論文誌、１９９０年）参照）を実現している。
【００２４】
＜粗粒度タスク並列処理＞
自動並列化コンパイラは、ＢＢ，ＲＢ，ＳＢ等のＭＴ間の制御依存性とデータ依存性を表現したマクロフローグラフ（ＭＦＧ）を生成し、さらに、ＭＦＧから最早実行可能条件解析により引きだしたＭＴ間の並列性を、マクロタスクグラフ（ＭＴＧ）として表現する（参考文献１，参考文献２（笠原，合田，吉田，岡本，本多、「Fortranマクロデータフロー処理のマクロタスク生成手法」、信学論、１９９２年、Vol.J75-D-I、No.8、pp.511-525）参照）。
【００２５】
その後、自動並列化コンパイラは、ＭＴＧ上のＭＴを、１つ以上のプロセッサエレメント（ＰＥ）をグルーピングしたプロセッサグループ（ＰＧ）に割り当てる。
＜中粒度並列処理＞
ＰＧに割り当てられたＭＴが、DOALLループ、或いはイタレーションレベルで並列処理が可能なものであれば、そのＭＴには、プロセッサクラスタ内のプロセッサによって中粒度並列処理がなされる。この中粒度並列処理は、ＤＯループイタレーション間の並列性を利用する並列処理のことであり、マルチプロセッサにおける並列処理では最も一般的なものである。
【００２６】
＜近細粒度並列処理＞
ステートメントレベルの近細粒度タスクに対する並列処理を、近細粒度並列処理という。これによって、依存の無いステートメントも並列実行が可能になり、実行時間が短縮される。
【００２７】
１−５．マクロタスクスケジューリング
粗粒度タスク並列処理では、各階層で生成されたマクロタスクは、ＰＧに割り当てられて実行される。どのＰＧにマクロタスクを割り当てるかを決定するスケジューリング手法として、下記のダイナミックスケジューリングとスタティックスケジューリングがあり、これらは、マクロタスクグラフの形状や実行時非決定性等を元に選択される。
【００２８】
＜ダイナミックスケジューリング＞
条件分岐等の実行時不確定性が存在する場合には、ダイナミックスケジューリングによって実行時にマクロタスクをＰＧに割り当てる。ダイナミックスケジューリングルーチンは、マクロタスクの終了や分岐方向の決定に応じてマクロタスク実行管理テーブルを操作し、各マクロタスクの最早実行可能条件を検査する。
【００２９】
マクロタスクが実行可能であれば、レディキューにマクロタスクが投入される。レディキュー内のマクロタスクは、その優先順位に従ってソートされ、レディキューの先頭のマクロタスクが、アイドル状態のプロセッサクラスタに割り当てられる。
【００３０】
また、ダイナミックスケジューリングコード生成時には、一つの専用のプロセッサがスケジューリングを行う集中スケジューリング方式と、スケジューリング機能を各プロセッサに分散した分散スケジューリング方式を、使用するプロセッサ台数，システムの同期オーバーヘッドに応じて使い分けることができる。
【００３１】
＜スタティックスケジューリング＞
一方、スタティックスケジューリングは、マクロタスクグラフがデータ依存エッジのみを持つ場合に使用され、自動並列化コンパイラが、コンパイル時にＰＧへのマクロタスクの割り当てを決める方式である。
【００３２】
スタティックスケジューリングは、実行時スケジューリングオーバーへッドを無くし、データ転送と同期のオーバーへッドを最小化することが可能であるため、粒度の細かいタスクのスケジューリングに対しても効果的に利用できる。
【００３３】
また、スタティックスケジューリングの際、タスクのコストは自動並列化コンパイラでのタスクコスト推定値を適用するが、自動並列化コンパイラのプロファイル自動フィードバック機能を用いることで、実コストでタスクスケジューリングを行うことも可能である。
【００３４】
プロファイル自動フィードバック機能を用いる場合、第１フェーズとして、逐次プログラムをＭＴに分解し、ＭＴ毎にプロファイラ関数を挿入して逐次プログラムを生成する。このプロファイラ関数では、タスク実行コスト（clock cycle）とタスク実行回数を計測する。このプロファイラ関数が挿入された逐次プログラムを一度ターゲットとなるマシン上で実行することで、ターゲットとなるマシン上でのタスク実行コストとタスク実行回数の情報を持つファイルを出力する。
【００３５】
そして、第２フェーズにて、この出力ファイルと逐次プログラムを入力として、実コストに基づきスケジューリングした並列化プログラムが生成される。
１−６．データローカライゼーション
自動並列化コンパイラは、プログラム全域に渡るキャッシュ最適化を行うことが可能である。自動並列化コンパイラは、ループ間などの並列性を解析した後、ループ間にデータ依存があることが分かると、依存があるループ間でのキャッシュのグローバル最適化を試みる（参考文献３（特許第４１７７６８１号公報）参照）。
【００３６】
具体的には、各ループでアクセスされる配列を調査し、同一の分割ループは同一の配列部分にアクセスするように調整することにより、同一の分割ループを同一プロセッサに割り当てる。これにより、同一の分割ループでは、全ての配列データがキャッシュ上で再利用されるようになる。
【００３７】
また、このローカライズ技術は、
（１）任意のサイズのローカルメモリ或いは分散共有メモリが与えられた時に、ＤＭＡ（ＤＴＵ）（参考文献４（特許第４４７６２６７号公報）参照）を用いアクセスされる前に、前記プロセッサに近接したローカル或いは分散共有メモリに事前ロードし、プログラム全域で再利用する。
【００３８】
（２）送付先のメモリが一杯の場合には、送付先プロセッサのＤＴＵが、メモリからの掃き出し優先順位に従ってデータを共有メモリ等へ掃き出したことを同期フラグで知らされたら、自動的に空いたメモリにデータを転送する。
【００３９】
（３）将来再利用されるデータであるが、暫くの間使用されず、メモリの領域を開ける必要がある場合には、ＣＰＵによるタスク実行の裏側でＤＴＵが当該データを集中共有メモリに待避し、使用時までに再ロードする。
【００４０】
といったローカルメモリ管理，データ転送技術へと進化している（参考文献５（英国特許第２４７８８７４号明細書）。
１−７．並列化プログラムの生成
自動並列化コンパイラにおける並列化プログラムの生成は、自動並列化ＡＰＩ（参考文献７（早稲田大学、「Optimally Scheduled Advanced Multiprocessor Application Program Interface」、２００８年）参照）を用い、並列化Ｃ或いは並列化Fortranのような、source-to-sourceで並列化を行うことが可能である。
【００４１】
この場合には、自動並列化コンパイラは、様々なプラットフォームにおいて並列化プログラムを実行可能とするため、後述する自動並列化ＡＰＩ標準解釈系を用いて、各プロセッサ用のＣ或いはFortranのディレクティブ部分をランタイムライブラリコールに変換する。その後、自動並列化コンパイラは、各プロセッサ用のコードを逐次コンパイラでコンパイルしてバイナリを生成し、このバイナリをリンクすると、対象となるマルチプロセッサ上で並列化プログラムを実行可能となる。
【００４２】
２．組み込みシステム用の逐次プログラムの並列化手順と手法
次に、組み込みシステム用の逐次プログラムの特徴について述べ、本実施形態の自動並列化コンパイラによる並列化手法について説明する。なお、組み込みシステムとは、例えば、車載装置であっても良いし、車載装置以外の電子装置であっても良い。また、逐次プログラムは、モデルベース設計により自動生成されたもの（一例として、MathWork社のMatlab（登録商標），Simulink（登録商標）にて自動生成されたもの）であっても良い。
【００４３】
自動並列化コンパイラは、条件分岐と代入文により構成され、処理が細かい逐次プログラムに対して、インライン展開やリネーミングを行い、並列性を抽出する。また、リアルタイム性を順守するために条件分岐隠蔽のためのタスク融合を行い、オーバーヘッドが低くなるようにスタティックスケジューリングを行う。さらに、実コストでスタティックスケジューリングを行うために、プロファイル自動フィードバック機能を適用しても良い。
【００４４】
また、逐次プログラムにおいて、条件コンパイルスイッチ（プリプロセッサへの命令）により、仕向地や機能やハードウェアの構成等が異なる組み込みシステムの各種別に応じてコンパイルの対象となる記述を選択する条件付コンパイルが行われる場合がある。このような場合、逐次プログラムの各条件コンパイルスイッチの引数として、いずれかの種別に対応する情報（仕向地等を示す情報）を設定することで、逐次プログラムから、該種別に対応するバイナリコードが生成される。
【００４５】
これに対し、本実施形態の自動並列化コンパイラは、条件付コンパイルによるコンパイル対象の選択を無視し、逐次プログラムの全ての部分を対象としてマクロタスクの分割や並列性の抽出やスタティックスケジューリング等を行い、並列化プログラムを生成する。その後、並列化プログラムから、条件付コンパイルによりコンパイルの対象外となる記述を特定し、該記述を除いた状態で、マルチコアプロセッサを動作させるためのバイナリデータを生成する。
【００４６】
２−１．自動並列化コンパイラの動作環境等について
自動並列化コンパイラ１は、例えば、ＤＶＤ，ＣＤ−ＲＯＭ，ＵＳＢメモリ，メモリカード（登録商標）等の光ディスク，磁気ディスク，半導体製メモリ等として構成された記憶媒体１８に記憶された状態で、ユーザに提供される（図１参照）。無論、ネットワークを経由してユーザに提供されても良い。
【００４７】
そして、自動並列化コンパイラ１がインストールされたパーソナルコンピュータ（ＰＣ）１０は、自動並列化コンパイル装置として動作する。ＰＣ１０は、ディスプレイ１１，ＨＤＤ１２，ＣＰＵ１３，ＲＯＭ１４，ＲＡＭ１５，入力装置１６，読取部１７等を備える。
【００４８】
ディスプレイ１１は、ＣＰＵ１３から受けた映像信号を、ユーザに対して映像として表示する。
また、入力装置１６は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１３に出力する。
【００４９】
また、読取部１７は、自動並列化コンパイラ１等が記憶された記憶媒体１８からデータを読み取る部位である。
また、ＲＡＭ１５は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ１４は読み出し専用の不揮発性メモリであり、ＨＤＤ１２は読み出し，書き込みが可能な不揮発性メモリである。ＲＯＭ１４，ＨＤＤ１２には、ＣＰＵ１３が読み出して実行するプログラム等が予め記憶されている。
【００５０】
また、ＲＡＭ１５は、ＣＰＵ１３がＲＯＭ１４，ＨＤＤ１２に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域や、作業用のデータを一時的に保存するための記憶領域として用いられる。
【００５１】
また、ＣＰＵ１３は、ＯＳをＨＤＤ１２から読み出して実行し、ＨＤＤ１２に記録されている各種プログラムをＯＳ上のプロセスとして実行する。また、ＣＰＵ１３は、このプロセスにおいて、必要に応じて入力装置１６から信号の入力を受け付け、ディスプレイ１１に映像信号を出力し、ＲＡＭ１５，ＨＤＤ１２に対してデータの読み出し／書き込みの制御を行う。
【００５２】
また、ＰＣ１０には、読取部１７を介して記憶媒体１８から読み取られた自動並列化コンパイラ１がインストールされており、自動並列化コンパイラ１は、ＨＤＤ１２に保存され、ＯＳ上のプロセスとして実行されるアプリケーションの１つとなっている。
【００５３】
なお、この自動並列化コンパイル装置は、車載装置等といった組み込みシステム向けの並列化プログラムの開発に用いられる。しかしながら、これに限定されることは無く、例えば情報家電等といった様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
【００５４】
２−２．自動並列化処理について
次に、条件付コンパイルがなされる逐次プログラムに基づき並列化プログラムを生成する自動並列化処理について、図２のフローチャートを用いて説明する。なお、条件付コンパイルにより、該逐次プログラムからは、条件コンパイルスイッチにて参照される引数の値に対応する種別の組み込みシステムに搭載されるバイナリデータが生成される。また、本処理は、ＰＣ１０にて動作している自動並列化コンパイラ１がユーザからの指示に応じて開始する。
【００５５】
Ｓ１００では、自動並列化コンパイラ１は、逐次プログラムに記述されている条件コンパイルスイッチに基づき、逐次プログラムのうち、条件付コンパイルによりコンパイルするか否かの選択の対象となる条件付記述を特定し、条件付記述を、１又は複数の条件付ブロックに分ける。なお、各条件付ブロックは、１のマクロタスク（条件付マクロタスク）に分割される。
【００５６】
ここで、１セットの条件コンパイルスイッチにより、引数の値に応じてコンパイル対象とするか否かが一括して選択される１つの一連の記述を、条件付ブロックとしても良いし、該選択の対象となる複数の一連の記述の各々を、条件付ブロックとしても良い。また、該一連の記述を組み合わせたものを、条件付ブロックとしても良い。なお、条件付ブロックの設定方法の具体例については、後述する具体例４を参照されたい。
【００５７】
Ｓ１０５では、自動並列化コンパイラ１は、ソフト構造解析処理（図３参照）を実行し、ＭＴＧを生成する。そして、逐次プログラムにより動作する組み込みシステムの種別の１つ（換言すれば、いずれかの種別に対応する条件コンパイルスイッチの引数の値）を選択し、Ｓ１１０に処理を移行する。
【００５８】
Ｓ１１０では、自動並列化コンパイラ１は、ソフト構造解析処理で生成されたＭＴＧに基づき、現在選択中の種別に対応するスタティックスケジューリングを行う。これにより、並列実行可能なマクロタスクが異なるＰＧに割り当てられ（該割り当ての結果を示す情報を割当情報とする）、並列化プログラム（以後、比較プログラムと記載）が生成される。この時、比較プログラムは、各種別に対応して生成される。つまり、１の種別に対応するスタティックスケジューリングで、各種別に対応して同じ内容の比較プログラムが複数生成される。以後、比較プログラムが対応する種別を、最終種別とする。
【００５９】
なお、比較プログラムでは、各条件付マクロタスクに対応する記述に対し、逐次プログラムにおける該記述に相当する条件付記述に設定されていた条件コンパイルスイッチと同等の内容の条件コンパイルスイッチが設定されている。このため、比較プログラムの条件コンパイルスイッチの引数をいずれかの種別に対応する値に設定すると、該種別に対応する並列化プログラムとなる。
【００６０】
また、自動並列化コンパイラ１は、スタティックスケジューリングにおいて、プロファイル自動フィードバック機能により各マクロタスクを実行する際の実コスト（一例として処理時間）を特定し、各ＰＧの処理負荷が同程度となるように、並列実行可能なマクロタスクを割り当てても良い。さらに、自動並列化コンパイラ１は、条件コンパイルスイッチに基づき、選択中の種別ではコンパイル対象とならないマクロタスクを特定し、該マクロタスクの処理負荷が無いものとみなしてスタティックスケジューリングを行っても良い。
【００６１】
また、この時、自動並列化コンパイラ１は、並列化プログラムを様々なプラットフォームで動作させるため、自動並列化ＡＰＩ標準解釈系を用いて、自動並列化ＡＰＩが加えられた並列化プログラムをランタイムライブラリが実装された並列化プログラムに変換しても良い。
【００６２】
Ｓ１１５では、自動並列化コンパイラ１は、逐次プログラムにより動作する組み込みシステムの全種別に対応するスタティックスケジューリングが終了したか否かを判定する。そして、肯定判定が得られた場合には（Ｓ１１５：Ｙｅｓ）、Ｓ１２０に処理を移行し、否定判定が得られた場合には（Ｓ１１５：Ｎｏ）、スタティックスケジューリングが行われていない他の種別を選択し、Ｓ１１０に移行する。
【００６３】
Ｓ１２０では、自動並列化コンパイラ１は、Ｓ１１０〜Ｓ１１５にて生成された全比較プログラムの性能を検証すると共に、検証結果に基づき適切なスタティックスケジューリングを選択し、Ｓ１２５に処理を移行する。この時、相対的に最も性能の良い比較プログラムを生成可能なスタティックスケジューリングを選択しても良いし、所定の性能を有する比較プログラムを生成可能なスタティックスケジューリングを選択しても良い（詳細は後述する）。
【００６４】
Ｓ１２５では、自動並列化コンパイラ１は、スタティックスケジューリングの選択に成功したか否かを判定する。具体的には、例えば、最も性能の良い比較プログラムを生成可能なスタティックスケジューリングが１つだけ存在する場合には、選択に成功したものとし、そうでない場合には、選択に失敗したものとしても良い。また、一定の性能を有するスタティックスケジューリングが存在する場合には、選択に成功したものとし、そうでない場合には、選択に失敗したものとしても良い。そして、肯定判定が得られた場合には（Ｓ１２５：Ｙｅｓ）、逐次プログラムにより動作する組み込みシステムの種別の１つを選択してＳ１３０に処理を移行し、否定判定が得られた場合には（Ｓ１２５：Ｎｏ）、Ｓ１４５に移行する。
【００６５】
Ｓ１３０では、自動並列化コンパイラ１は、選択されたスタティックスケジューリングにより生成され、選択中の種別に対応する比較プログラム（選択プログラム）に記述されているコンパイラスイッチを解析し、解析結果に応じた処理を行うプリプロ処理を実行する。この時、条件コンパイルスイッチに基づき、選択プログラムの中から選択中の種別ではコンパイルの対象外となる記述を特定し、Ｓ１３５に移行する。
【００６６】
Ｓ１３５では、自動並列化コンパイラ１は、選択プログラムにおけるコンパイルの対象となる記述から、マルチコアプロセッサを動作させるためのバイナリデータを生成し、Ｓ１４０に移行する。
【００６７】
Ｓ１４０では、自動並列化コンパイラ１は、全種別に対応するバイナリデータが生成されたか否かを判定する。そして、肯定判定が得られた場合には（Ｓ１４０：Ｙｅｓ）、本処理を終了し、否定判定が得られた場合には（Ｓ１４０：Ｎｏ）、バイナリデータが生成されていない他の種別を選択し、Ｓ１３０に移行する。
【００６８】
一方、Ｓ１４５では、自動並列化コンパイラ１は、ディスプレイ１１等を介して、スタティックスケジューリングの選択に失敗した旨を報知する。この時、比較プログラムの性能の検証結果として、例えば、各比較プログラムの並列実行時間，低減率や、各スタティックスケジューリングにより生成された比較プログラムにおける最大並列実行時間，最小低減率（詳細は後述する）等を表示しても良い。その後、自動並列化コンパイラ１は、本処理を終了する。
【００６９】
２−３．ソフト構造解析処理について
次に、逐次プログラムからＭＴＧを生成するソフト構造解析処理について、図３のフローチャートを用いて説明する。本処理は、自動並列化処理にて実行される。
【００７０】
Ｓ２００では、自動並列化コンパイラ１は、逐次プログラムに対し、インライン展開（サブルーチンをコールする記述を、該サブルーチンにて定義されている処理の記述に置き換える）を行い、Ｓ２０５に移行する。組み込みシステム用の逐次プログラムは、一般的に処理が細かく、粗い粒度での並列化が困難であるが、インライン展開を行うことで、サブルーチン内の並列性をも有効活用できるようになる。
【００７１】
Ｓ２０５では、自動並列化コンパイラ１は、ローカル変数のリネームを行う。例えばSimulinkモデルから自動生成された逐次プログラム等では、ＲＯＭ使用量削減のため、多くの箇所で同じローカル変数が繰り返し使用される場合があり、これにより、並列性解析の際にデータ依存があると特定され、並列性が十分引き出せなくなってしまう。そこで、使い回しされているローカル変数のリネームが行われる。
【００７２】
具体的には、自動並列化コンパイラ１は、逐次プログラムの各関数内において、同一名称のローカル変数が用いられている複数の処理ブロックを特定すると共に、特定した各処理ブロックにおいて独自の名称のローカル変数が用いられるよう、逐次プログラムを改変する。
【００７３】
なお、処理ブロックとは、例えば、ループ処理や、if文やswitch-case文等の分岐処理のステートメントと、これに付随する代入文等から構成される記述の集合体であっても良い。また、このほかにも、例えば、逐次プログラムを生成したSimulinkモデルにおける各ブロックに対応する記述の集合体を、処理ブロックとしても良い。
【００７４】
Ｓ２１０では、自動並列化コンパイラ１は、これらの処理がなされた逐次プログラムをマクロタスクに分割する。なお、上述したように、条件付ブロックは、１のマクロタスク（条件付マクロタスク）に分割される。そして、各マクロタスク間のデータ依存性と制御依存性を解析してＭＦＧを生成し、Ｓ２１５に移行する。
【００７５】
Ｓ２１５では、自動並列化コンパイラ１は、ＭＦＧが示す制御依存性に基づき、異なるマクロタスクに分岐するマクロタスクを始端タスクとして特定する。また、自動並列化コンパイラ１は、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるマクロタスクのうち、最初に実行されるものを終端タスクとして特定する。
【００７６】
そして、自動並列化コンパイラ１は、特定した始端タスクと、該始端タスクを始点とする処理における終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全てのマクロタスクとを、１つのマクロタスクに融合させ（タスク融合）、Ｓ２２０に移行する。
【００７７】
なお、マクロタスクの粒度を細かくするためには、Ｓ２１５での処理のように、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるマクロタスクのうち、最初に実行されるマクロタスクを終端タスクとして特定するのが好適である。しかし、これに限らず、これらのマクロタスクのうち、２番目以降に実行されるいずれか一つのマクロタスクを終端タスクとして特定しても良い。
【００７８】
組み込みシステム（特に車載装置）向けの逐次プログラムは、ループ構造が少ないため、近細粒度並列化か粗粒度タスク並列化を適用することが考えられるが、実行オーバーヘッドを小さく抑えるため、自動並列化コンパイラ１は、粗粒度タスク並列化を適用する。
【００７９】
また、逐次プログラムでは、各マクロタスクのコストは数１０クロック程度であるが、自動並列化コンパイラ１によりダイナミックスケジューリングを行った場合には、通常数１０から数１００クロックのオーバーヘッドが生じる。このため、ダイナミックスケジューリングは、逐次プログラムには不向きである。
【００８０】
しかしながら、条件分岐を持つマクロタスクは、その実行時に動的に分岐先が決定されるため、そのままでは、コンパイル時にプロセッサコアを割り当てるスタティックスケジューリングが適用できないという問題がある。
【００８１】
そこで、自動並列化コンパイラ１は、タスク融合アルゴリズムにより、条件分岐をもつマクロタスクと、その分岐先のマクロタスクまでを１つの粗粒度タスク（Blockタスク）に融合するタスク融合を行う。タスク融合を行うことで、ＭＦＧは制御依存性が無い状態となり、スタティックスケジューリングが可能となる。
【００８２】
Ｓ２２０では、自動並列化コンパイラ１は、タスク融合がなされたＭＦＧに基づき、各マクロタスクの最早実行可能条件を解析し、ＭＴＧを生成する。そして、本処理を終了する。
【００８３】
３．車載装置の構成について
次に、本実施形態の自動並列化コンパイラ１により生成された並列化プログラムにより動作する車載装置２０の構成について説明する（図４参照）。無論、自動並列化コンパイラ１は、車載装置２０に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。
【００８４】
車載装置２０は、マルチコアプロセッサ２１，通信部２２，センサ部２３，入出力ポート２４等を備える。
マルチコアプロセッサ２１は、ＲＯＭ２１ａと、ＲＡＭ２１ｂと、複数のＰＥ２１ｃ，２１ｄ…等を有している。
【００８５】
また、ＲＯＭ２１ａは、自動並列化コンパイラ１により生成された並列化プログラム２１ａ−１（バイナリデータ）が保存されている。マルチコアプロセッサ２１は、並列化プログラム２１ａ−１に従い動作し、車載装置２０を統括制御する。
【００８６】
また、ＲＡＭ２１ｂは、ＰＥ２１ｃ，２１ｄ…等によりアクセスされる部位である。
また、通信部２２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う部位である。
【００８７】
また、センサ部２３は、制御対象等の状態を検出するための各種センサから構成される部位である。
また、入出力ポート２４は、制御対象を制御するための各種信号の送受信を行う部位である。
【００８８】
［具体例について］
次に、本実施形態の自動並列化コンパイラ１により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、処理Ａ等といった記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。
【００８９】
１．具体例１について
具体例１では、２つの種別（Ａ仕様とＢ仕様）の組み込みシステムに対応する条件付コンパイルが行われる逐次プログラム３００に基づき比較プログラムが生成され、各比較プログラムの性能が検証される（図５参照）。
【００９０】
なお、具体例１では、２つのＰＥ（第１，第２コア）を有するマルチコアプロセッサにて実行される並列化プログラムが生成され、各マクロタスクは、これらのコアに割り当てられる。
【００９１】
また、逐次プログラム３００では、“処理Ｃ１及びＣ２”が条件付記述となっており、条件コンパイルスイッチ３０１により、“処理Ｃ１”と“処理Ｃ２”のうちの一方がコンパイルの対象として選択される。具体的には、Ａ仕様（“ＣＳＷ＝Ａ”）の場合には処理Ｃ１が、Ｂ仕様（“ＣＳＷ≠Ａ”）の場合には処理Ｃ２がコンパイルの対象として選択される（図６参照）。
【００９２】
自動並列化コンパイラ１は、自動並列化処理のＳ１００にて、逐次プログラム３００の“処理Ｃ１，Ｃ２”の各々を条件付ブロックとして特定する。無論、“処理Ｃ１及びＣ２”を、１つの条件付ブロックとして特定しても良い。
【００９３】
また、Ｓ１０５（ソフト構造解析処理）では、自動並列化コンパイラ１は、“処理Ａ〜Ｃ２”の各々をマクロタスクとし、ＭＴＧを生成する。
また、Ｓ１１０〜Ｓ１１５において、自動並列化コンパイラ１は、逐次プログラム３００に基づき、Ａ仕様に対応するスタティックスケジューリングＡと、Ｂ仕様に対応するスタティックスケジューリングＢを行う。
【００９４】
図５の３１０はスタティックスケジューリングＡにより生成された割当情報を、３１１はスタティックスケジューリングＢにより生成された割当情報を示している。
割当情報３１０，３１１における“処理Ａ”，“処理Ｂ”，“処理Ｃ１”，“処理Ｃ２”は、逐次プログラムにおける各処理に対応するマクロタスクを示している。各スタティックスケジューリングでは、一例として各処理の処理時間が処理負荷とみなされる。また、スタティックスケジューリングＡでは、“処理Ｃ２”の処理負荷が、スタティックスケジューリングＢでは、“処理Ｃ１”の処理負荷が無いものとみなされる。
【００９５】
上記スタティックスケジューリングにより、４つの比較プログラムＡＡ〜ＢＢが生成される。比較プログラムＡＡ，ＡＢは、スタティックスケジューリングＡにより生成されたものである。比較プログラムＡＡの最終種別はＡ仕様であり、比較プログラムＡＢの最終種別はＢ仕様である。また、比較プログラムＢＡ，ＢＢは、スタティックスケジューリングＢにより生成されたものである。比較プログラムＢＡの最終種別はＡ仕様であり、比較プログラムＢＢの最終種別はＢ仕様である。
【００９６】
図５の３２０は比較プログラムＡＡ及びＡＢを、３２２は比較プログラムＢＡ及びＢＢを示している。比較プログラム３２０，３２２における条件コンパイルスイッチ３２１，３２３の引数である“ＣＳＷ”の値を設定すると、比較プログラムＡＡ〜ＢＢのうちのいずれかが生成される。
【００９７】
また、Ｓ１２０において、自動並列化コンパイラ１は、Ｓ１１０〜Ｓ１１５にて生成された比較プログラムＡＡ〜ＢＢの性能を検証し、検証結果に基づき、最適なスタティックスケジューリングを選択する。この時、比較プログラムＡＡ〜ＢＢの各々の並列実行時間と低減率とが算出され、これらに基づき性能の検証が行われる。
【００９８】
並列実行時間とは、比較プログラムにおいて各コア（ＰＧ）に割り当てられたマクロタスクの処理時間の総和のうちの最大値を意味する。なお、該総和を算出する際、比較プログラムに係る最終種別ではコンパイルの対象外となるマクロタスクの処理時間は０となるのは、言うまでも無い。
【００９９】
また、低減率とは、比較プログラムにより動作するマルチコアプロセッサと、該比較プログラムと同一の種別の逐次プログラムにより動作するシングルコアプロセッサの性能の差の推定結果である。低減率は、比較プログラムの並列実行時間と、該比較プログラムに係る最終種別に対応する条件付コンパイルがなされた逐次プログラムにより動作するシングルコア用プロセッサが実行する各処理の処理時間の総和（総処理時間）との比率（％）として算出される。低減率は、（１−比較プログラムの並列実行時間／総処理時間）×１００により算出される。
【０１００】
図６の表は、“処理Ａ〜Ｃ２”の処理時間を示しており、図７の表は、比較プログラムＡＡ〜ＢＢについて算出された並列実行時間と低減率とを示している。なお、Ａ仕様の逐次プログラムの総処理時間は２４０μｓに、Ｂ仕様の逐次プログラムの総処理時間は１９０μｓとなる。
【０１０１】
スタティックスケジューリングＡにより生成された比較プログラムＡＡ，ＡＢでは、並列実行時間の最大値（最大並列実行時間）は１２０μｓ、低減率の最小値（最小低減率）は３７％となる。一方、スタティックスケジューリングＢにより生成された比較プログラムＢＡ，ＢＢでは、最大並列実行時間は１４０μｓ、最小低減率は４２％となる。
【０１０２】
このため、並列実行時間に基づき最適なスタティックスケジューリングを選択するとした場合、スタティックスケジューリングＡの最大並列実行時間が相対的に小さい。このため、スタティックスケジューリングＡにより生成された比較プログラムが、相対的に性能が良いと判断され、スタティックスケジューリングＡが選択される。
【０１０３】
一方、低減率に基づき最適なスタティックスケジューリングを選択するとした場合、スタティックスケジューリングＢの最小低減率が相対的に大きい。このため、スタティックスケジューリングＢにより生成された比較プログラムが、相対的に性能が良いと判断され、スタティックスケジューリングＢが選択される。
【０１０４】
なお、原則として最大並列実行時間に基づきスタティックスケジューリングを選択し、各スタティックスケジューリングの最大並列実行時間が同じ（又は同程度）である場合には、最小低減率に基づきスタティックスケジューリングを選択しても良い。反対に、原則として最小低減率に基づきスタティックスケジューリングを選択し、各スタティックスケジューリングの最小低減率が同じ（又は同程度）である場合には、最大並列実行時間に基づきスタティックスケジューリングを選択しても良い。
【０１０５】
また、種別が３以上存在する場合も、同様にして、最大並列実行時間や最小低減率に基づきスタティックスケジューリングを選択しても良い。
２．具体例２について
具体例２では、２つの種別（Ａ仕様とＢ仕様）の組み込みシステムに対応する条件付コンパイルが行われる逐次プログラム４００に基づき比較プログラムが生成され、各比較プログラムの性能が検証される（図８参照）。
【０１０６】
なお、具体例２では、２つのＰＥ（第１，第２コア）を有するマルチコアプロセッサにて実行される並列化プログラムが生成され、各マクロタスクは、これらのコアに割り当てられる。
【０１０７】
また、逐次プログラム４００では、“処理Ｄ１，Ｄ２，Ｆ，Ｇ”が条件付記述となっており、条件コンパイルスイッチ４０１〜４０３により、これらの条件付記述のうちの一部がコンパイルの対象として選択される。具体的には、Ａ仕様（“ＣＳＷ＝Ａ”）の場合には“処理Ｄ１，Ｆ”が、Ｂ仕様（“ＣＳＷ≠Ａ”）の場合には“処理Ｄ２，Ｇ”が選択される（図８，１０参照）。
【０１０８】
自動並列化コンパイラ１は、自動並列化処理のＳ１００にて、逐次プログラム４００の“処理Ｄ１，Ｄ２，Ｆ，Ｇ”の各々を条件付ブロックとして特定する。
無論、１セットの条件コンパイルスイッチ４０１により引数の値に応じてコンパイル対象とするか否かが一括して選択される２つの処理である“処理Ｄ１，Ｄ２”を、１の条件付ブロックとして特定しても良い。また、２セットの条件コンパイルスイッチ４０２，４０３により引数の値に応じてコンパイル対象とするか否かが一括して選択される２つの処理である“処理Ｆ，Ｇ”を、１の条件付ブロックとして特定しても良い。
【０１０９】
また、Ｓ１０５（ソフト構造解析処理）では、自動並列化コンパイラ１は、“処理Ａ〜Ｉ”の各々をマクロタスクとし、ＭＴＧを生成する。図８の４１０は、逐次プログラム４００に基づき生成されたＭＴＧである。なお、自動並列化処理では、条件コンパイルスイッチに関わらず、逐次プログラム４００に記述された全ての処理を対象に並列性が抽出されるため、ＭＴＧ４１０では、各種別でコンパイルの対象となる全マクロタスクのデータ依存が表現される。
【０１１０】
また、Ｓ１１０〜Ｓ１１５において、自動並列化コンパイラ１は、逐次プログラム４００に基づき、Ａ仕様に対応するスタティックスケジューリングＡと、Ｂ仕様に対応するスタティックスケジューリングＢを行う。これらのスタティックスケジューリングは、各マクロタスクの処理負荷（一例として処理時間）に基づき行われる（図１０参照）。
【０１１１】
図９の４１１は、逐次プログラム４００に基づくＭＴＧであって、Ａ仕様でコンパイルの対象となるマクロタスクを実線で、コンパイルの対象外となるマクロタスクを点線で示したものである。一方、４１２は、逐次プログラム４００に基づくＭＴＧであって、Ｂ仕様でコンパイルの対象となるマクロタスクを実線で、コンパイルの対象外となるマクロタスクを点線で示したものである。
【０１１２】
スタティックスケジューリングＡでは、ＭＴＧ４１１にて点線で示されたマクロタスクの処理負荷は無いものとみなされ、スタティックスケジューリングＢでは、ＭＴＧ４１２にて点線で示されたマクロタスクの処理負荷は無いものとみなされる。
【０１１３】
また、これらのスタティックスケジューリングでは、ＭＴＧから、データ依存により連なっている複数のマクロタスクのグループが特定される。具体的には、“処理Ａ，Ｂ，Ｄ２，Ｉ”と、“処理Ａ，Ｂ，Ｄ１，Ｉ”と、“処理Ａ，Ｃ，Ｉ”と、“処理Ａ，Ｃ，Ｆ，Ｉ”と、“処理Ａ，Ｇ，Ｈ，Ｉ”と、“処理Ａ，Ｈ，Ｉ”が特定される。
【０１１４】
そして、各グループに属するマクロタスクの処理時間の総和が算出され、該総和の最も大きいグループを構成するマクロタスクが、第１コアに割り当てられる。また、他のマクロタスクは、最大処理時間（各コアに割り当てられたマクロタスクの処理時間の総和のうちの最大値）が最小となるように、第１又は第２コアに割り当てられる。
【０１１５】
なお、原則として、データ依存を有している複数のマクロタスクは同一のコアに割り当てられるが、このようなマクロタスクが異なるコアに割り当てられる場合もある。このような場合には、一方のコアでの処理が完了するまで、他方のコアの処理が待たされることになる。各コアに割り当てられたマクロタスクの処理時間の総和とは、このような待ち時間も含む時間となる。
【０１１６】
４２０，４２１は、スタティックスケジューリングＡにより生成された割当情報を、４２２，４２３は、スタティックスケジューリングＢにより生成された割当情報を示している。割当情報４２０，４２２は、最終種別をＡ仕様とする場合に対応しており、割当情報４２１，４２３は、最終種別をＢ仕様とする場合に対応している。これらの割当情報においては、コンパイルの対象となるマクロタスクは実線で、対象外となるマクロタスクは点線で示されている。
【０１１７】
また、割当情報４２０〜４２３における“待ち”という記載は、第１コアにより“処理Ａ”や“処理Ｉ”が実行されている間、第２コアは、当該処理が終了するのを待つことを示している。
【０１１８】
上記スタティックスケジューリングにより、４つの比較プログラムＡＡ〜ＢＢが生成される。比較プログラムＡＡ，ＡＢは、スタティックスケジューリングＡにより生成されたものである。比較プログラムＡＡの最終種別はＡ仕様であり、比較プログラムＡＢの最終種別はＢ仕様である。また、比較プログラムＢＡ，ＢＢは、スタティックスケジューリングＢにより生成されたものである。比較プログラムＢＡの最終種別はＡ仕様であり、比較プログラムＢＢの最終種別はＢ仕様である。
【０１１９】
また、Ｓ１２０において、自動並列化コンパイラ１は、Ｓ１１０〜Ｓ１１５にて生成された比較プログラムＡＡ〜ＢＢの性能を検証し、検証結果に基づき、最適なスタティックスケジューリングを選択する。この時、比較プログラムＡＡ〜ＢＢの各々の並列実行時間が算出され、これらに基づき性能の検証が行われる。
【０１２０】
図１０の表は、処理Ａ〜Ｉの処理時間を示しており、図１１の表は、比較プログラムＡＡ〜ＢＢについて算出された並列実行時間を示している。
そして、スタティックスケジューリングＡの最大並列実行時間は２００μｓとなり、スタティックスケジューリングＢの最大並列実行時間は１９０μｓとなる。このため、並列実行時間に基づき最適なスタティックスケジューリングを選択するとした場合、スタティックスケジューリングＢが選択される。
【０１２１】
無論、具体例１と同様、低減率、又は、並列実行時間及び低減率に基づき、最適なスタティックスケジューリングを選択しても良い。
３．具体例３について
具体例３では、３つの種別（Ａ〜Ｃ仕様）の組み込みシステムに対応する条件付コンパイルが行われる逐次プログラムに基づき比較プログラムが生成され、各比較プログラムの性能が検証される。以下では、性能の検証方法について詳しく説明する。
【０１２２】
自動並列化処理のＳ１００〜Ｓ１１５により、９つの比較プログラムＡＡ〜ＡＣ，ＢＡ〜ＢＣ，ＣＡ〜ＣＣが生成される。
比較プログラムＡＡ〜ＡＣは、Ａ仕様に対応するスタティックスケジューリングＡにより生成されたものである。比較プログラムＡＡの最終種別はＡ仕様、比較プログラムＡＢの最終種別はＢ仕様、比較プログラムＡＣの最終種別はＣ仕様となっている。
【０１２３】
比較プログラムＢＡ〜ＢＣは、Ｂ仕様に対応するスタティックスケジューリングＢにより生成されたものである。比較プログラムＢＡの最終種別はＡ仕様、比較プログラムＢＢの最終種別はＢ仕様、比較プログラムＢＣの最終種別はＣ仕様となっている。
【０１２４】
比較プログラムＣＡ〜ＣＣは、Ｃ仕様に対応するスタティックスケジューリングＣにより生成されたものである。比較プログラムＣＡの最終種別はＡ仕様、比較プログラムＣＢの最終種別はＢ仕様、比較プログラムＣＣの最終種別はＣ仕様となっている。
【０１２５】
Ｓ１２０において、自動並列化コンパイラ１は、これらの比較プログラムの性能を検証し、検証結果に基づき、最適なスタティックスケジューリングを選択する。この時、各比較プログラムの並列実行時間と低減率とが算出される（図１２参照）。そして、各スタティックスケジューリングが、並列実行時間と低減率に基づき設定された選択条件を満たすか否かが判定される。なお、図１２の例では、種別がＡ仕様の逐次プログラムと、種別がＢ仕様の逐次プログラムと、種別がＣ仕様の逐次プログラムの総処理時間は、それぞれ、１００μｓ，５０μｓ，５０μｓとなっている。
【０１２６】
具体的には、例えば、最終種別がＡ仕様である比較プログラムの並列実行時間＜６５μｓ、且つ、最終種別がＢ仕様である比較プログラムの並列実行時間＜３５μｓ、且つ、最終種別がＣ仕様である比較プログラムの並列実行時間＜３５μｓ、という選択条件１が設定されていたとする。
【０１２７】
図１２に記載された例では、スタティックスケジューリングＢにより生成された比較プログラムＢＡ〜ＢＣは選択条件１を満たす。このため、スタティックスケジューリングＢが選択される。
【０１２８】
なお、選択条件１は、各種別の組み込みシステムに搭載されたマルチコアプロセッサの性能が異なっている場合に用いることが考えられる。
また、例えば、最終種別がＡ仕様である比較プログラムの並列実行時間＜６５μｓ、且つ、最終種別がＢ仕様である比較プログラムとＣ仕様である比較プログラムの低減率の最小値が相対的に大きい、という選択条件２が設定されていたとする。
【０１２９】
図１２に記載された例では、スタティックスケジューリングＢにより生成された比較プログラムは選択条件２を満たす。このため、スタティックスケジューリングＢが選択される。
【０１３０】
なお、選択条件２は、各種別の組み込みシステムに搭載されたマルチコアプロセッサの性能が同程度であり、Ａ仕様の逐次プログラムの処理負荷が他の種別の逐次プログラムよりも大きい場合に用いることが考えられる。
【０１３１】
４．具体例４について
具体例４では、異なる複数の引数が用いられる条件コンパイルスイッチ５０１〜５０３を用いて３つの種別（Ａ〜Ｃ仕様）の組み込みシステムに対応する条件付コンパイルが行われる逐次プログラムに基づき、比較プログラムが生成される。以下では、このような逐次プログラムの条件付記述５００をマクロタスクに分割する方法について詳しく説明する（図１３参照）。
【０１３２】
条件コンパイルスイッチ５０１〜５０３では、それぞれ、“ＮＡ”，“ＪＣ”，“ＴＭ”という引数が用いられる。図１４は、各引数に設定可能な値を示している。また、図１５は、各種別を選択する際に各引数に設定すべき値を示している。
【０１３３】
自動並列化コンパイラ１は、自動並列化処理のＳ１００にて、逐次プログラムの条件付記述５００に記載された“処理Ａ〜Ｅ”の各々を、条件付ブロックとして特定する。
また、Ｓ１０５（ソフト構造解析処理）では、自動並列化コンパイラ１は、条件付ブロックとして特定された“処理Ａ〜Ｅ”の各々をマクロタスクとし、ＭＴＧを生成する。“処理Ａ〜Ｅ”の各々に対応するマクロタスクを、それぞれ、“マクロタスクＡ〜Ｅ”とする。
【０１３４】
そして、自動並列化コンパイラ１は、Ｓ１１０〜Ｓ１１５にて、各種別に対応するスタティックスケジューリングを行い、“マクロタスクＡ〜Ｅ”をいずれかのＰＧに割り当てると共に、Ａ〜Ｃ仕様を最終種別とした比較プログラムを生成する。図１６の表は、比較プログラムにおける“マクロタスクＡ〜Ｅ”に対応する記述を示している。
【０１３５】
比較プログラムでは、“マクロタスクＡ〜Ｅ”に対応して“処理Ａ〜Ｅ”が記述されるが、これらの処理には、それぞれ、条件コンパイルスイッチが設定されている。“処理Ａ〜Ｅ”の各々に設定された条件コンパイルスイッチは、逐次プログラムにおける条件付記述５００において、該処理に設定された条件コンパイルスイッチと同等の内容になっている。
【０１３６】
このため、比較プログラムにおいて、条件コンパイルスイッチの引数を種別に対応する値に設定すると、種別に対応する処理がコンパイルの対象として選択される。
なお、Ｓ１００にて、逐次プログラムの条件付記述５００に記載された“処理Ａ〜Ｅ”のうち、“処理Ａ〜Ｃ”と“処理Ｄ，Ｅ”を別々の条件付ブロックとしても良い。
【０１３７】
このような場合、“処理Ａ〜Ｃ”，“処理Ｄ，Ｅ”の各々に対応して、“マクロタスクＸ，Ｙ”が生成される。そして、比較プログラムでは、“マクロタスクＸ”に対応して“処理Ａ〜Ｃ”が、“マクロタスクＹ”に対応して“処理Ｄ，Ｅ”が記述され、これらの処理には、それぞれ、条件コンパイルスイッチが設定されている。“処理Ａ〜Ｃ”，“処理Ｄ，Ｅ”の各々に設定された条件コンパイルスイッチもまた、逐次プログラムにおける条件付記述５００において、該処理に設定された条件コンパイルスイッチと同等の内容になっている（図１７参照）。
【０１３８】
［効果］
本実施形態の自動並列化コンパイラ１は、条件付記述を全て含んだ状態で逐次プログラムから並列化プログラムを生成する。そして、並列化プログラムから、該並列化プログラムに対応する種別ではコンパイルの対象外となる部分を除去し、該種別の組み込みシステム（マルチコアプロセッサを搭載したシステム）を動作させるバイナリコードを生成する。
【０１３９】
このため、各種別の並列化プログラムにおいて、条件付記述に対応する処理以外の処理（全種別の並列化プログラムで共通して実行される処理）を、常に同じＰＧに割り当てることができる。したがって、各種別の並列化プログラムの共通性をより一層高めることができ、並列化プログラムの品質の維持や管理が容易になる。
【０１４０】
また、自動並列化コンパイラ１は、マクロタスクの実コスト（処理負荷）に基づきスタティックスケジューリングを行う。具体的には、各ＰＧの処理負荷が同程度となるように、並列実行可能なマクロタスクが異なるＰＧに割り当てられる。これにより、並列化プログラムに従い動作するマルチコアプロセッサのパフォーマンスを向上させることができる。
【０１４１】
また、自動並列化コンパイラ１は、いずれかの逐次プログラムの種別に対応してスタティックスケジューリングを行うが、この時、対応する種別でコンパイルの対象外となるマクロタスクについては、処理負荷が無いものとみなされる。これにより、スタティックスケジューリングにより生成された比較プログラムから、該スタティックスケジューリングに対応する種別ではコンパイルの対象外となる記述を除去した場合には、最良のパフォーマンスが得られるようになる。したがって、自動並列化コンパイラ１により生成される並列化プログラムの性能を向上させることができる。
【０１４２】
また、自動並列化コンパイラ１は、各種別に対応するスタティックスケジューリングを行うと共に、各スタティックスケジューリングでは、各種別に対応する複数の比較プログラムを生成する。そして、各比較プログラムの性能を検証し、検証結果に基づき、最も性能の良い比較プログラムを生成可能なスタティックスケジューリングが選択される。
【０１４３】
さらに、選択されたスケジューリングにより生成された比較プログラムからコンパイルの対象外となる部分を除去し、各種別に対応する並列化プログラムを生成する。これにより、並列化プログラムにおける各種別で共通する処理は、常に同じＰＧに割り当てられることになり、各種別の並列化プログラムの共通性をより一層高めることができる。
【０１４４】
また、各比較プログラムの性能を検証結果に基づきスタティックスケジューリングが選択されるため、性能の良い並列化プログラムを生成可能となる。したがって、並列化プログラムの性能の低下を抑えつつ、並列化プログラムの品質の維持や管理を容易にすることができる。
【０１４５】
また、自動並列化コンパイラ１は、各比較プログラムの並列実行時間と低減率とを算出し、これらのうちの双方又は一方に基づき、各比較プログラムの性能を検証する。このため、各比較プログラムの性能を精度良く把握することができ、より適切にスタティックスケジューリングを選択することができる。
【０１４６】
また、自動並列化コンパイラ１は、スタティックスケジューリングの選択ができなかった場合には、その旨をユーザに報知する。これにより、自動並列化コンパイラ１の使い勝手を向上させることができる。
【０１４７】
［他の実施形態］
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されることなく、種々の形態を採り得る。
【０１４８】
（１）本実施形態の自動並列化処理では、逐次コンパイラの全種別に対応するスタティックスケジューリングが行われる。しかしながら、これに限らず、いずれか１つの種別に対応するスタティックスケジューリングを行い、該スタティックスケジューリングにより生成された比較プログラムを各種別に対応する並列化プログラムとしても良い。なお、該種別は、例えば、ユーザにより指定されたものであっても良い。
【０１４９】
また、逐次コンパイラの全種別のうちの一部に相当する複数の種別に対応するスタティックスケジューリングを行い、本実施形態と同様にして各比較プログラムの性能を検証していずれかのスタティックスケジューリングを選択しても良い。
【０１５０】
このような場合であっても、各種別の並列化プログラムの共通性をより一層高めることができ、並列化プログラムの品質の維持や管理が容易になる。
（２）本実施形態の自動並列化コンパイラ１は、ソフト構造解析処理のＳ２００にて逐次プログラムのインライン展開を行うと共に、Ｓ２０５にてローカル変数のリネームを行うが、これらの処理の双方または一方を行わない構成としても良い。このような場合であっても、逐次プログラムの構造によっては、同様の効果が得られる。
【０１５１】
（３）上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしても良い。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【０１５２】
（４）上述した自動並列化コンパイラや自動並列化コンパイル装置の他、自動並列化コンパイラを記憶した媒体や、自動並列化コンパイラにより行われる処理に相当する方法等、種々の形態で本発明を実現することもできる。
【０１５３】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【０１５４】
自動並列化コンパイラ１が並列化コンパイラの一例に、車載装置２０が電子装置の一例に相当する。
また、ＰＧがプロセッサユニットの一例に相当する。
【０１５５】
また、自動並列化処理のＳ１１０が、スケジューリング手順，スケジューリング手段の一例に、Ｓ１２０が検証手順，検証手段，選択手順，選択手段の一例に、Ｓ１４５が報知手順，報知手段の一例に相当する。
【０１５６】
また、ソフト構造解析処理のＳ２１０が、分割手順，分割手段の一例に、Ｓ２２０が、抽出手順，抽出手段の一例に相当する。
また、条件コンパイルスイッチの引数の値が、入力情報の一例に相当する。
【０１５７】
また、並列実行時間が、比較プログラムの最大処理負荷の一例に、低減率が、比較プログラムに従い動作するマルチプロセッサシステムと、逐次プログラムに従い動作するシングルプロセッサシステムとの性能の差の一例に相当する。
【符号の説明】
【０１５８】
１…自動並列化コンパイラ、１０…ＰＣ、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ｂ…ＲＡＭ、２１ｃ，２１ｄ…プロセッサエレメント（ＰＥ）、２２…通信部、２３…センサ部、２４…入出力ポート。
【図１】
0006488739.tif 000002
【図２】
0006488739.tif 000003
【図３】
0006488739.tif 000004
【図４】
0006488739.tif 000005
【図５】
0006488739.tif 000006
【図６】
0006488739.tif 000007
【図７】
0006488739.tif 000008
【図８】
0006488739.tif 000009
【図９】
0006488739.tif 000010
【図１０】
0006488739.tif 000011
【図１１】
0006488739.tif 000012
【図１２】
0006488739.tif 000013
【図１３】
0006488739.tif 000014
【図１４】
0006488739.tif 000015
【図１５】
0006488739.tif 000016
【図１６】
0006488739.tif 000017
【図１７】
0006488739.tif 000018