(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タスク）に融合するタスク融合を行う。タスク融合を行うことで、ＭＦＧは制御依存性が無い状態となり、スタティックスケジューリングが可能となる。
【００８１】
Ｓ２２０では、自動並列化コンパイラ１は、タスク融合がなされたＭＦＧに基づき、各マクロタスクの最早実行可能条件を解析し、ＭＴＧを生成する。そして、本処理を終了する。
【００８２】
３．車載装置の構成について
次に、本実施形態の自動並列化コンパイラ１により生成された並列化プログラムにより動作する車載装置２０の構成について説明する（図４参照）。無論、自動並列化コンパイラ１は、車載装置２０に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。
【００８３】
車載装置２０は、マルチコアプロセッサ２１，通信部２２，センサ部２３，入出力ポート２４等を備える。
マルチコアプロセッサ２１は、ＲＯＭ２１ａと、ＲＡＭ２１ｂと、複数のＰＥ２１ｃ，２１ｄ…等を有している。
【００８４】
また、ＲＯＭ２１ａは、自動並列化コンパイラ１により生成された並列化プログラム２１ａ−１（バイナリデータ）が保存されている。マルチコアプロセッサ２１は、並列化プログラム２１ａ−１に従い動作し、車載装置２０を統括制御する。
【００８５】
また、ＲＡＭ２１ｂは、ＰＥ２１ｃ，２１ｄ…等によりアクセスされる部位である。
また、通信部２２は、車内ＬＡＮ等を介して接続された他のＥＣＵと通信を行う部位である。
【００８６】
また、センサ部２３は、制御対象等の状態を検出するための各種センサから構成される部位である。
また、入出力ポート２４は、制御対象を制御するための各種信号の送受信を行う部位である。
【００８７】
［具体例について］
次に、本実施形態の自動並列化コンパイラ１により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、処理Ａ等といった記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。
【００８８】
本具体例では、２種類の引数（“ＣＳＷ１，２”）を参照する条件付コンパイルが行われる逐次プログラム３００に基づき並列化プログラムが生成される（図５参照）。並列化プログラムは、２つのＰＥ（第１，第２コア）を有するマルチコアプロセッサにて実行され、各マクロタスクは、これらのコアに割り当てられる。なお、図中、逐次プログラム３００には“処理Ａ〜Ｅ”の処理が含まれているが、これら以外の処理がさらに含まれていても良い。
【００８９】
逐次プログラム３００では、“処理Ｂ及びＣ”，“処理Ｄ及びＥ”が条件付記述となっている。条件コンパイルスイッチ３０１により、“処理Ｂ”と“処理Ｃ”のうちの一方がコンパイルの対象として選択され、条件コンパイルスイッチ３０２により、“処理Ｄ”と“処理Ｅ”のうちの一方がコンパイルの対象として選択される。具体的には、“ＣＳＷ１＝Ａ”の場合には“処理Ｂ”が、“ＣＳＷ１≠Ａ”の場合には処理Ｃがコンパイルの対象として選択される。また、“ＣＳＷ２＝Ｂ”の場合には“処理Ｄ”が、“ＣＳＷ２≠Ｂ”の場合には処理Ｅがコンパイルの対象として選択される。
【００９０】
自動並列化コンパイラ１は、自動並列化処理のＳ１００にて、逐次プログラム３００の“処理Ｂ及びＣ”，“処理Ｄ及びＥ”の各々を条件付記述として特定する。
また、Ｓ１０５（ソフト構造解析処理）では、自動並列化コンパイラ１は、“処理Ａ〜Ｅ”の各々を異なるマクロタスク（“Ａ”〜“Ｅ”）に分割し、ＭＴＧを生成する。なお、マクロタスク“Ａ”〜“Ｅ”は、それぞれ、“処理Ａ〜Ｅ”に対応する。
【００９１】
そして、Ｓ１１０において、自動並列化コンパイラ１は、生成されたＭＴＧに基づきスタティックスケジューリングを行う。Ａ〜Ｄパターン３１０〜３１３は、該スタティックスケジューリングにより生成される可能性のある割当情報を示している。
【００９２】
スタティックスケジューリングにより、マクロタスクである“Ｂ，Ｃ”，“Ｄ，Ｅ”は、同じコアに割り当てられる。Ａパターン３１０では、“Ｂ，Ｃ”は第１コアに、“Ｄ，Ｅ”は第２コアに割り当てられ、Ｂパターン３１１では、“Ｂ，Ｃ”は第２コアに、“Ｄ，Ｅ”は第１コアに割り当てられる。また、Ｃパターン３１２では、“Ｂ，Ｃ”及び“Ｄ，Ｅ”は第１コアに割り当てられ、Ｄパターン３１３では、“Ｂ，Ｃ”及び“Ｄ，Ｅ”は第２コアに割り当てられる。
【００９３】
ここで、タスク融合により、１の条件付記述に基づく処理に対応するマクロタスクの一部と、該条件付記述の前後の記述に基づく処理に対応するマクロタスクが、１つのマクロタスクに融合される場合も想定される。このような場合、自動並列化コンパイラ１は、スタティックスケジューリングにおいて、融合されたマクロタスクと、該条件付記述に対応する残りのマクロタスクとを、１つのコアに割り当てる。
【００９４】
より詳しく説明すると、上記具体例においては、タスク融合の結果、“Ａ”，“Ｂ”が１のマクロタスク（マクロタスクＡ＋Ｂ）に融合される可能性もある。このような場合には、“Ｃ”とマクロタスクＡ＋Ｂとが同一のコアに割り当てられる。
【００９５】
また、タスク融合により、１の条件付記述に基づく処理に対応するマクロタスクの一部と、該条件付記述の前後の条件付記述に基づく処理に対応するマクロタスクの一部（又は全部）が、１つのマクロタスクに融合される場合も想定される。このような場合においても、自動並列化コンパイラ１は、スタティックスケジューリングにおいて、融合されたマクロタスクと、上記条件付記述に対応する残りのマクロタスクとを、１つのコアに割り当てる。
【００９６】
より詳しく説明すると、上記具体例においては、タスク融合の結果、“Ｃ”，“Ｄ”が１のマクロタスク（マクロタスクＣ＋Ｄ）に融合される可能性もある。このような場合には、“Ｂ”と“Ｅ”とマクロタスクＣ＋Ｄとが同一のコアに割り当てられる。また、上記具体例において、タスク融合の結果、“Ｃ”〜“Ｅ”が１のマクロタスク（マクロタスクＣ＋Ｄ＋Ｅ）に融合される可能性もある。このような場合には、“Ｂ”とマクロタスクＣ＋Ｄ＋Ｅとが同一のコアに割り当てられる。
【００９７】
なお、本具体例における条件付記述（“処理Ｂ，Ｃ”や“処理Ｄ，Ｅ”）は、１の引数を参照する条件付コンパイルスイッチにより、コンパイル対象とするか否かが切り替えられる２つの部分からなる一連の記述として構成されている。しかしながら、これに限らず、条件付記述は、２以上の引数を参照する条件付コンパイルスイッチにより構成されていても良いし、コンパイル対象とするか否かが切り替えられる３以上の部分から構成されていても良い。
【００９８】
［効果］
本実施形態の自動並列化コンパイラ１は、条件付記述を全て含んだ状態の逐次プログラムに基づきスタティックスケジューリング等を行い、並列化プログラムを生成する。そして、条件コンパイルスイッチの引数に応じて条件付記述の中からコンパイルの対象外となる部分を並列化プログラムから除去し、入力情報に対応する種別の並列化プログラムを生成する。
【００９９】
スタティックスケジューリングが行われた段階の並列化プログラムでは、１の条件付記述に基づく各処理は、同一のＰＧに割り当てられる。このため、条件コンパイルスイッチの引数を設定することで仕向地等の異なる複数の種別の並列化プログラムが生成される場合であっても、各種別の並列化プログラムの共通性をより一層高めることができ、その結果、並列化プログラムの品質の維持や管理が容易になる。
【０１００】
ここで、１の条件付記述に対応する各処理を異なるＰＧに割り当て可能（並列化可能）である場合には、これらの処理が同一のＰＧに割り当てることで、並列化プログラムの性能が低下してしまう。
【０１０１】
これに対し、自動並列化コンパイラ１は、対応する複数のマクロタスクを並列化可能な条件付記述を特定すると共に、並列化プログラムの性能を検証する。そして、並列化プログラムの性能が一定の水準に達しない場合には、対応するマクロタスクを並列化可能な条件付記述を示すレポートを生成することで、該条件付記述をユーザに報知する。
【０１０２】
これにより、本実施形態の自動並列化処理を行った結果、十分な性能の並列化プログラムを得られなかった場合には、ユーザは、上記レポートに基づき、並列化プログラムの性能を向上させるための対策を講じることができる。
【０１０３】
［他の実施形態］
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限定されることなく、種々の形態を採り得る。
【０１０４】
（１）本実施形態の自動並列化処理では、並列化可能な条件付記述が特定される（Ｓ１１５）と共に、生成された並列化プログラムの性能が検証され（Ｓ１２０）、性能が一定の水準に達しない場合には、並列化可能な条件付記述を示すレポートが生成される（Ｓ１３０）。
【０１０５】
しかしながら、生成された並列化プログラムの性能に関わらず、並列化可能な条件付記述を示すレポートを生成するようにしても良い。このような場合であっても、ユーザは、該レポートに基づき、並列化プログラムの性能をさらに向上させるための対策を講じることができる。
【０１０６】
また、並列化可能な条件付記述を特定すること無く、生成された並列化プログラムの性能の検証結果を報知しても良い。こうすることにより、本実施形態の自動並列化処理によりどの程度の性能の並列化プログラムが得られたかを把握することができ、自動並列化コンパイラ１の利便性を高めることができる。
【０１０７】
（２）本実施形態の自動並列化コンパイラ１は、ソフト構造解析処理のＳ２００にて逐次プログラムのインライン展開を行うと共に、Ｓ２０５にてローカル変数のリネームを行うが、これらの処理の双方または一方を行わない構成としても良い。このような場合であっても、逐次プログラムの構造によっては、同様の効果が得られる。
【０１０８】
（３）上記実施形態における１つの構成要素が有する機能を複数の構成要素として分散させたり、複数の構成要素が有する機能を１つの構成要素に統合させたりしても良い。また、上記実施形態の構成の少なくとも一部を、同様の機能を有する公知の構成に置き換えてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【０１０９】
（４）上述した自動並列化コンパイラや自動並列化コンパイル装置の他、自動並列化コンパイラを記憶した媒体や、自動並列化コンパイラにより行われる処理に相当する方法等、種々の形態で本発明を実現することもできる。
【０１１０】
［特許請求の範囲との対応］
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【０１１１】
自動並列化コンパイラ１が並列化コンパイラの一例に、車載装置２０が電子装置の一例に相当する。
また、ＰＧや、具体例におけるＰＥ（第１，第２コア）が、プロセッサユニットの一例に相当する。
【０１１２】
また、自動並列化処理のＳ１１０が、スケジューリング手順，スケジューリング手段の一例に、Ｓ１２０が検証手順，検証手段の一例に、Ｓ１３０が報知手順，報知手段の一例に相当する。
【０１１３】
また、ソフト構造解析処理のＳ２１０が、分割手順，分割手段の一例に、Ｓ２２０が、抽出手順，抽出手段の一例に相当する。
また、条件コンパイルスイッチの引数の値が、入力情報の一例に相当する。
【符号の説明】
【０１１４】
１…自動並列化コンパイラ、１０…ＰＣ、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ｂ…ＲＡＭ、２１ｃ，２１ｄ…プロセッサエレメント（ＰＥ）、２２…通信部、２３…センサ部、２４…入出力ポート。
【図１】
0006488738.tif 000002
【図２】
0006488738.tif 000003
【図３】
0006488738.tif 000004
【図４】
0006488738.tif 000005
【図５】
0006488738.tif 000006