特許第6018022号(P6018022)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社デンソーの特許一覧 ▶ 学校法人早稲田大学の特許一覧

特許6018022並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6018022
(24)【登録日】2016年10月7日
(45)【発行日】2016年11月2日
(54)【発明の名称】並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
(51)【国際特許分類】
   G06F 9/45 20060101AFI20161020BHJP
【FI】
   G06F9/44 322F
【請求項の数】6
【全頁数】28
(21)【出願番号】特願2013-125607(P2013-125607)
(22)【出願日】2013年6月14日
(65)【公開番号】特開2015-1807(P2015-1807A)
(43)【公開日】2015年1月5日
【審査請求日】2015年11月11日
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(73)【特許権者】
【識別番号】899000068
【氏名又は名称】学校法人早稲田大学
(74)【代理人】
【識別番号】110000578
【氏名又は名称】名古屋国際特許業務法人
(72)【発明者】
【氏名】森 裕司
(72)【発明者】
【氏名】谷 充弘
(72)【発明者】
【氏名】笠原 博徳
(72)【発明者】
【氏名】木村 啓二
(72)【発明者】
【氏名】梅田 弾
(72)【発明者】
【氏名】林 明宏
(72)【発明者】
【氏名】見神 広紀
(72)【発明者】
【氏名】金羽木 洋平
【審査官】 多賀 実
(56)【参考文献】
【文献】 特開2007−328416(JP,A)
【文献】 特開平2−163833(JP,A)
【文献】 金羽木 洋平 外6名,「自動車エンジン制御ソフトウェアにおけるマルチコア上での並列処理」,情報処理学会研究報告 2012(平成24)年度(5)[CD−ROM],一般社団法人情報処理学会,2013年 2月15日,pp.1−8
【文献】 笠原 博徳 外4名,「Fortranマクロデータフロー処理のマクロタスク生成手法」,電子情報通信学会論文誌,社団法人電子情報通信学会,1992年 8月25日,第J75−D−I巻,第8号,pp.511−525
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/45
(57)【特許請求の範囲】
【請求項1】
シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムを、予め定められた方法に従い複数のマクロタスクに分割する分割手順(S210)と、
前記マクロタスク間の制御依存性に基づき、異なる前記マクロタスクに分岐する処理を有する前記マクロタスクを始端タスクとして特定すると共に、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行される前記マクロタスクのうちのいずれか一つを終端タスクとして特定する特定手順(S215)と、
前記特定手順により特定された前記始端タスクと、該始端タスクを始点とする処理における前記終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全ての前記マクロタスクとを、新たな前記マクロタスクとして融合させる融合手順(S215)と、
前記融合手順による融合がなされた後の前記マクロタスク間のデータ依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手順(S220)と、
並列実行可能な前記マクロタスクが異なる前記プロセッサユニットにより並列的に実行されるよう、それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てるスタティックスケジューリングを行うスケジューリング手順(S225)と、
前記スタティックスケジューリングの結果に基づき、前記マルチプロセッサシステムにより実行される並列化プログラムを生成する生成手順(S225,S230)と、
を有することを特徴とする並列化コンパイル方法。
【請求項2】
請求項1に記載の並列化コンパイル方法において、
前記逐次プログラムにおける関数をコールする記述を、該関数における処理の記述に置き換えるインライン展開を行う置換手順(S200)をさらに備え、
前記分割手順では、前記インライン展開がなされた前記逐次プログラムを、前記マクロタスクに分割すること、
を特徴とする並列化コンパイル方法。
【請求項3】
請求項1または請求項2に記載の並列化コンパイル方法において、
前記逐次プログラムに記述された関数における特定の目的を実現するための記述の集まりを処理ブロックとし、関数における同一名称のローカル変数が用いられた異なる前記処理ブロックを特定すると共に、これらの処理ブロックにおいて異なる名称のローカル変数が用いられるよう、該関数の記述を変更するリネーム手順(S205)と、
前記特定手順では、前記リネーム手順によりローカル変数の名称の変更がなされた後に、前記マクロタスク間の制御依存性を解析し、前記始端タスクと前記終端タスクとを特定すること、
を特徴とする並列化コンパイル方法。
【請求項4】
シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムを、予め定められた方法に従い複数のマクロタスクに分割する分割手順(S210)と、
前記マクロタスク間の制御依存性に基づき、異なる前記マクロタスクに分岐する処理を有する前記マクロタスクを始端タスクとして特定すると共に、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行される前記マクロタスクのうちのいずれか一つを終端タスクとして特定する特定手順(S215)と、
前記特定手順により特定された前記始端タスクと、該始端タスクを始点とする処理における前記終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全ての前記マクロタスクとを、新たな前記マクロタスクとして融合させる融合手順(S215)と、
前記融合手順による融合がなされた後の前記マクロタスク間のデータ依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手順(S220)と、
並列実行可能な前記マクロタスクが異なる前記プロセッサユニットにより並列的に実行されるよう、それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てるスタティックスケジューリングを行うスケジューリング手順(S225)と、
前記スタティックスケジューリングの結果に基づき、前記マルチプロセッサシステムにより実行される並列化プログラムを生成する生成手順(S225,S230)と、
をコンピュータに実行させることを特徴とする並列化コンパイラ。
【請求項5】
シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムを、予め定められた方法に従い複数のマクロタスクに分割する分割手段(S210)と、
前記マクロタスク間の制御依存性に基づき、異なる前記マクロタスクに分岐する処理を有する前記マクロタスクを始端タスクとして特定すると共に、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行される前記マクロタスクのうちのいずれか一つを終端タスクとして特定する特定手段(S215)と、
前記特定手段により特定された前記始端タスクと、該始端タスクを始点とする処理における前記終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全ての前記マクロタスクとを、新たな前記マクロタスクとして融合させる融合手段(S215)と、
前記融合手段による融合がなされた後の前記マクロタスク間のデータ依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手段(S220)と、
並列実行可能な前記マクロタスクが異なる前記プロセッサユニットにより並列的に実行されるよう、それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てるスタティックスケジューリングを行うスケジューリング手段(S225)と、
前記スタティックスケジューリングの結果に基づき、前記マルチプロセッサシステムにより実行される並列化プログラムを生成する生成手段(S225,S230)と、
を備えることを特徴とする並列化コンパイル装置。
【請求項6】
シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムを、予め定められた方法に従い複数のマクロタスクに分割する分割手順(S210)と、
前記マクロタスク間の制御依存性に基づき、異なる前記マクロタスクに分岐する処理を有する前記マクロタスクを始端タスクとして特定すると共に、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行される前記マクロタスクのうちのいずれか一つを終端タスクとして特定する特定手順(S215)と、
前記特定手順により特定された前記始端タスクと、該始端タスクを始点とする処理における前記終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全ての前記マクロタスクとを、新たな前記マクロタスクとして融合させる融合手順(S215)と、
前記融合手順による融合がなされた後の前記マクロタスク間のデータ依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能な前記マクロタスクを抽出する抽出手順(S220)と、
並列実行可能な前記マクロタスクが異なる前記プロセッサユニットにより並列的に実行されるよう、それぞれの前記マクロタスクをいずれかの前記プロセッサユニットに割り当てるスタティックスケジューリングを行うスケジューリング手順(S225)と、
前記スタティックスケジューリングの結果に基づき、前記マルチプロセッサシステムにより実行される並列化プログラムを生成する生成手順(S225,S230)と、
を有する並列化コンパイル方法により生成された前記並列化プログラムにより動作する前記マルチプロセッサシステムを備えることを特徴とする車載装置(400)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シングルプロセッサシステムにより逐次実行される車載装置向けの組込みシステム用の逐次プログラムから、車載装置に搭載されたマルチプロセッサシステム用の並列化プログラムを生成する並列化コンパイル方法,並列化コンパイラ,並列化コンパイル装置と、マルチプロセッサシステムが搭載された車載装置に関する。
【背景技術】
【0002】
より安全,快適,低価格且つ省エネを実現する世代自動車の開発のため、エンジン制御のようなリアルタイム制御系、人認識・他車認識や運転に必要な情報の提示や音楽・映像等の出力を行う情報系の高度化及び統合化が重要となっている。
【0003】
制御系,情報系の高度化,統合化のためには、それらを実現するためのプロセッサの高能力化が重要となる。例えば、安全,快適で燃費の良い自動車開発のために重要なエンジン制御系を高度化するためには、制御アルゴリズムの高度化や新たな制御機能の実現等、計算負荷の増大を避けられない。このような問題を解決する為には、リアルタイム制御を実現しているプロセッサの高速化が必須となる。
【0004】
しかし、従来のようにプロセッサの動作周波数を向上させることは、消費電力が周波数の三乗に比例して増大するため、困難となっている。このため、1チップ上に低動作周波数のプロセッサコアを複数集積し、電力削減のために低周波数化・低電圧化したプロセッサコアを並列動作させることで、処理の高速化と低電力化を同時に実現可能なマルチコアプロセッサへの移行が急ピッチで行われている。
【0005】
ここで、マルチコアプロセッサにて、シングルコアプロセッサよりも高速な処理を行うためには、シングルコアプロセッサ用の逐次プログラムの処理を分割し、プロセッサコア間の通信が最小になる形で各プロセッサコアに各処理を割り当てる必要がある。従来、このような逐次プログラムの並列化の作業は人手で行う必要があったが、このような作業は大変困難で長期間を要し、開発費の増加や並列化されたプログラムの信頼性等、多くの課題が生じている。
【0006】
ここで、非特許文献1には、マルチコアプロセッサが搭載された車載装置において、各プロセッサコアに機能を分散させることで、スループットを向上させることが記載されている。
【先行技術文献】
【非特許文献】
【0007】
【非特許文献1】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、2009年、Vol.224 Part D
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、各プロセッサコアの処理能力を最大限利用するためには、並列実行可能な処理を抽出して異なるプロセッサコアに割り当てる必要がある。このため、単に各プロセッサコアに機能を分散させるのみでは、スループットを向上させることはできてもレイテンシを削減することができず、高速な処理を行うことはできない。
【0009】
本願発明は上記課題に鑑みてなされたものであり、開発期間や開発費を抑えつつ、信頼性が高く、高速な処理が可能な車載装置用の組込みシステム向けの並列化プログラムを作成することができる並列化コンパイル方法等を提供する。
【課題を解決するための手段】
【0010】
上記課題に鑑みてなされた請求項1に係る並列化コンパイル方法は、シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムを、予め定められた方法に従い複数のマクロタスクに分割する分割手順と、マクロタスク間の制御依存性に基づき、異なるマクロタスクに分岐する処理を有するマクロタスクを始端タスクとして特定すると共に、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるマクロタスクのうちのいずれか一つを終端タスクとして特定する特定手順と、を有する。
【0011】
また、当該コンパイル方法は、特定手順により特定された始端タスクと、該始端タスクを始点とする処理における終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全てのマクロタスクとを、新たなマクロタスクとして融合させる融合手順と、融合手順による融合がなされた後のマクロタスク間のデータ依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニットにより並列実行可能なマクロタスクを抽出する抽出手順と、を有する。
【0012】
また、当該コンパイル方法は、並列実行可能なマクロタスクが異なるプロセッサユニットにより並列的に実行されるよう、それぞれのマクロタスクをいずれかの前記プロセッサユニットに割り当てるスタティックスケジューリングを行うスケジューリング手順と、スタティックスケジューリングの結果に基づき、マルチプロセッサシステムにより実行される並列化プログラムを生成する生成手順と、を有する。
【0013】
逐次プログラムを並列化する方法としては、粗粒度並列化,中粒度並列化,近細粒度並列化を組み合わせて行うマルチグレイン並列処理が知られている。
しかし、車載装置用の組込みシステム向けの逐次プログラムは、ループ構造が存在しないか、或いは非常に少なく、主に条件分岐と代入文から構造されているため、中粒度並列化(ループ内イタレーションレベルの並列化)を適用することはできない。さらに、処理が非常に細かいため、マルチプロセッサシステムにより並列実行される際のオーバーヘッドを抑える必要がある。
【0014】
そこで、請求項1に記載の並列化コンパイル方法では、シングルプロセッサシステムにより実行される車載装置向けの組込みシステム用の逐次プログラムをマクロタスクに分割すると共に、各マクロタスクの並列性を抽出し、並列実行可能なマクロタスクを異なるプロセッサユニットに割り当てる粗粒度並列化が行われる。
【0015】
また、車載装置用の組込みシステム向けの逐次プログラムから得られた各マクロタスクは、サイクルが短いため、ダイナミックスケジューリングを適用するとオーバーヘッドが大きくなり、高速化が困難となる。そこで、スタティックスケジューリングを適用することが考えられるが、マクロタスク間に制御依存性がある場合には、これを適用することはできない。
【0016】
これに対し、請求項1に記載の並列化コンパイル方法では、融合手順により制御依存性のある複数のマクロタスクが一つのタスクに融合された後にスタティックスケジューリングが行われ、並列実行可能なマクロタスクが異なるプロセッサユニットに割り当てられる。
【0017】
これにより、車載装置用の組込みシステム向けの逐次プログラムから、高速な処理が可能な並列化プログラムを自動生成することができる。したがって、従来のように人手により逐次プログラムの並列化を行う場合に比べ、開発期間や開発費を抑えつつ、高い信頼性を有する車載装置用の組込みシステム向けの並列化プログラムを作成することができる。
【0018】
なお、本発明は、上述した並列化コンパイル方法のほか、種々の形態で実現することができる。このような形態の具体例としては、当該並列化コンパイル方法をコンピュータに実現させるためのプログラムである並列化コンパイラや、当該並列化コンパイル方法を実現するための並列化コンパイル装置等が考えられる。また、当該並列化コンパイル方法により生成されたプログラムにより動作するマルチプロセッサシステムを備える車載装置等が考えられる。
【図面の簡単な説明】
【0019】
図1】自動並列化コンパイラの構成を示すブロック図である。
図2】階層的に定義されるマクロタスクについての説明図である。
図3】マクロフローグラフの一例である。
図4】マクロタスクグラフの一例である。
図5】プロファイル自動フィードバック機能を用いた場合のコンパイル手順についての説明図である。
図6】プロファイル自動フィードバック機能を用いた場合のコンパイル手順についてのフローチャートである。
図7】マクロタスクグラフの一例である。
図8】依存があるループ間におけるキャッシュのグローバル最適化のための分割がなされたマクロタスクグラフの一例である。
図9】分割ループのプロセッサへの割り当ての様子を示す説明図である。
図10】最速実行モードでの、各PGに割り当てられたマクロタスクの実行状態についての説明図である。
図11】リアルタイムモードでの、各PGに割り当てられたマクロタスクの実行状態についての説明図である。
図12】自動並列化APIの一例である。
図13】本実施形態のマルチコアアーキテクチャのブロック図である。
図14】自動並列化API標準解釈系と開発環境についての説明図である。
図15】自動並列化APIの指示文の一例である。
図16】自動並列化API標準解釈系により生成されたランタイムライブラリ関数の一例である。
図17】自動並列化コンパイラがインストールされたPCの構成を示すブロック図である。
図18】自動並列化処理のフローチャートである。
図19】自動車制御プログラムの一例である。
図20】自動車制御モデルと、これに基づき自動生成されたC言語の自動車制御プログラムの一例である。
図21】インライン展開後のマクロフローグラフの一例である。
図22】インライン展開前のマクロタスクグラフの一例である。
図23】インライン展開後のマクロタスクグラフの一例である。
図24】ローカル変数が繰り返し使用された自動車制御プログラムの一例である。
図25】タスク融合前のマクロフローグラフの一例である。
図26】タスク融合前のマクロタスクグラフの一例である。
図27】タスク融合後のマクロフローグラフの一例である。
図28】タスク融合後のマクロタスクグラフの一例である。
図29】エンジン制御ECUの構成を示すブロック図である。
【発明を実施するための形態】
【0020】
以下、本発明の実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。
【0021】
1.自動並列化コンパイラについて
本実施形態の自動並列化コンパイラ1は、組込みシステム向けのシングルプロセッサシステム用のソースプログラム(逐次プログラム)から、組込みシステム向けのマルチプロセッサシステム用の並列化プログラムを生成する機能を有している。
【0022】
1−1.自動並列化コンパイラ1の設計概念
本実施形態の自動並列化コンパイラ1は、以下の機能を有している。
(1)マルチグレイン並列処理
(2)コンパイル時のスタティックスケジューリングコードの挿入
(3)実行時のダイナミックスケジューリングコードの生成
(4)階層型マクロデータフローの実現
(5)マクロタスクの分割/融合,Loop distribution/interchange等の並列性抽出
(6)データローカライズによるデータ転送効率の向上
(7)コンパイラによる電力削減
1−2.自動並列化コンパイラの内部処理
自動並列化コンパイラ1は、Front End(FE3),Middle Path(MP5),Back End(BE7)の3つのステージを有している(図1参照)。各ステージは実行形態として独立しており、FE3,MP5から生成される中間言語4,6(Intermediate language)によりコード授受が行われる。
【0023】
なお、FE3は、逐次プログラムのソースコード2を字句解析・構文解析を行い、MP5においてparse可能な中間言語4を生成する部位である。FE3の生成する中間言語4は、基本的に4つのオペランドを持つ解析木(parse tree)で表現されており、全体として1つのブロックを形成していて構造化は行われていない。
【0024】
また、MP5は、制御依存性解析・データ依存性解析・最適化等を行う部位であり、そのデータを用いて粗粒度(Macro Data Flow)・中粒度(Micro tasking/Doall loop parallelize)・近細粒度(Near fine grain)並列化のマルチグレイン並列処理を行う。
【0025】
また、BE7は、MP5が生成した並列化中間言語6を読み込んで実際のマシンコードを生成する部位である。当該部位は、ターゲットとなっているマルチコアアーキテクチャのアセンブラコード8aを生成するBEの他、OpenMP用の並列化FortranコードやCコードを生成するBEを有している。さらには、当該部位は、後述する並列化API9によりメモリ配置,データ転送を含めて並列化したコード8b,8cを生成するBE等、多様なアーキテクチャに対応したコードを出力するBEを有している。
【0026】
1−3.自動並列化コンパイラの並列性解析
自動並列化コンパイラ1は、逐次プログラムを、基本ブロック(BB),繰り返しブロック(RB),サブルーチンブロック(SB)の3種類の粗粒度タスク(マクロタスク(MT))に分割するマクロデータフロー処理を行う。
【0027】
しかし、マクロデータフロー処理では、プログラムの形状によってはプロセッサの利用効率が上がらず、十分な粗粒度並列性が抽出できないという問題点がある。
そこで、自動並列化コンパイラ1では、従来の単階層マクロデータフロー処理手法を拡張し、MT内部に対してマクロデータフロー処理を階層的に利用する階層型マクロデータフロー処理を採用している。階層的マクロデータフロー処理では、図2に示すようなMTの階層的な定義を行う。その上で、生成された各階層のマクロタスクに対して、マクロタスク間の並列性の解析を行う。
【0028】
<マクロフローグラフ(MFG)の生成>
自動並列化コンパイラ1は、まず、生成された各階層のマクロタスクに対して、マクロタスク間の制御依存性とデータ依存性を解析する。この解析結果は、マクロフローグラフ(MFG)として表される(図3参照)。
【0029】
図3においては、ノードはマクロタスクを、実線エッジはデータ依存を、点線エッジは制御依存を、ノード内の小円は条件分岐を表す。なお、該MFGではエッジの矢印は省略されているが、エッジの方向は下向を仮定している。
【0030】
<マクロタスクグラフ(MTG)の生成>
MFGは、マクロタスク間の制御依存性とデータ依存性を表すが、並列性は表していない。並列性を抽出するためには、各マクロタスクに対し、制御依存性とデータ依存性の両方を考慮した最早実行可能条件解析を行う必要がある。最早実行可能条件とは、そのMTが最も早い時点で実行可能になる条件であり、次のような実行条件から求められる。
【0031】
(1)MTiがMTjにデータ依存するならば、MTjの実行が終了するまでMTiは実行できない。
(2)MTjの条件分岐先が確定すれば、MTjの実行が終了しなくても、MTjに制御依存するMTiは実行できる。
【0032】
したがって、最早実行可能条件の一般形は次のようになる。
(MTiが制御依存するMTjがMTiに分岐する)
AND
((MTiがデータ依存するMTk(0≦k≦|N|))が終了)OR(MTkが実行されないことが決定する))
例えば、図3のMFGのMT6の最早実行可能条件は、次のようになる。
【0033】
((MT1がMT3に分岐)OR(MT2がMT4に分岐))
AND
((MT3が終了する)OR(MT1がMT2に分岐))
MFGにおける制御依存性を考えると、MT3が終了するということは、MT1はMT3に分岐したということを含み、また、MT2がMT4に分岐するということは、MT1はMT2に分岐しているので、この条件は、簡略化されて次のようになる。
【0034】
((MT3が終了する)OR(MT2がMT4に分岐))
マクロタスクの最早実行可能条件は、図4に示すようなマクロタスクグラフ(MTG)で表される。
【0035】
MFGと同様に、MTGにおけるノードはマクロタスクを、ノード内の小円はマクロタスク内の条件分岐を、実線のエッジはデータ依存を、点線のエッジは拡張された制御依存を表す。なお、拡張された制御依存とは、通常の制御依存だけでなく、データ依存と制御依存を複合的に満足させるため、先行ノードが実行されないことが確定するという条件分岐を含んでいる。
【0036】
また、エッジを束ねるアークには2つの意味があり、実線アークは、当該アークによって束ねられたエッジがAND関係にあることを、点線アークは、当該アークによって束ねられたエッジがOR関係にあることを示している。
【0037】
また、MTGにおいてはエッジの矢印は省略されているが、下向きが想定されている。また、矢印を持つエッジは、オリジナルの制御依存性を表す。
1−4.マルチグレイン並列処理
自動並列化コンパイラ1では、従来のループ並列化に加え、ループ間,サブルーチン間における粗粒度タスク間の並列性を利用する粗粒度タスク並列処理や、ステートメント間の並列性を利用する近細粒度並列処理を効果的に組み合わせたマルチグレイン並列処理(参考文献1(本多弘樹, 岩田雅彦, 笠原博徳、「Fortranプログラム粗粒度タスク間の並列性検出手法」、電子情報通信学会論文誌、1990年)参照)を実現している。
【0038】
<粗粒度タスク並列処理>
自動並列化コンパイラ1は、BB,RB,SB等のMT間の制御依存性とデータ依存性を表現したマクロフローグラフ(MFG)を生成し、さらに、MFGから最早実行可能条件解析により引きだしたMT間の並列性を、マクロタスクグラフ(MTG)として表現する(参考文献1,参考文献2(笠原,合田,吉田,岡本,本多、「Fortranマクロデータフロー処理のマクロタスク生成手法」、信学論、1992年、Vol.J75-D-I、No.8、pp.511-525)参照)。
【0039】
その後、自動並列化コンパイラ1は、MTG上のMTを、1つ以上のプロセッサエレメント(PE)をグルーピングしたプロセッサグループ(PG)に割り当てる。
<中粒度並列処理>
PGに割り当てられたMTが、DOALLループ、或いはイタレーションレベルで並列処理が可能なものであれば、そのMTには、プロセッサクラスタ内のプロセッサによって中粒度並列処理がなされる。この中粒度並列処理は、DOループイタレーション間の並列性を利用する並列処理のことであり、マルチプロセッサにおける並列処理では最も一般的なものである。
【0040】
<近細粒度並列処理>
ステートメントレベルの近細粒度タスクに対する並列処理を、近細粒度並列処理という。これによって、依存の無いステートメントも並列実行が可能になり、実行時間が短縮される。これが行われるのは、分岐のない逐次実行される基本ブロックと、シーケンシャルループ内のボディ部である。近細粒度並列処理では、ステートメントを、コンパイラによるスタティックスケジューリングによって各PEに割り当て、自動並列化コンパイラ1は、各PE用のマクロタスクコードとして、必要な同期,データ転送コードと共に割り当てられたステートメントのみを生成する。近細粒度並列処理は、ステートメントという小さな粒度のタスクを用いた並列処理であり、タスクの実行時間は短いものが多い。したがって、効率的に行うためには、PE間の高速なデータ転送がサポートされていることが必要である。
【0041】
1−5.マクロタスクスケジューリング
粗粒度タスク並列処理では、各階層で生成されたマクロタスクは、PGに割り当てられて実行される。どのPGにマクロタスクを割り当てるかを決定するスケジューリング手法として、下記のダイナミックスケジューリングとスタティックスケジューリングがあり、これらは、マクロタスクグラフの形状や実行時非決定性等を元に選択される。
【0042】
<ダイナミックスケジューリング>
条件分岐等の実行時不確定性が存在する場合には、ダイナミックスケジューリングによって実行時にマクロタスクをPGに割り当てる。ダイナミックスケジューリングルーチンは、マクロタスクの終了や分岐方向の決定に応じてマクロタスク実行管理テーブルを操作し、各マクロタスクの最早実行可能条件を検査する。
【0043】
マクロタスクが実行可能であれば、レディキューにマクロタスクが投入される。レディキュー内のマクロタスクは、その優先順位に従ってソートされ、レディキューの先頭のマクロタスクが、アイドル状態のプロセッサクラスタに割り当てられる。
【0044】
また、ダイナミックスケジューリングコード生成時には、一つの専用のプロセッサがスケジューリングを行う集中スケジューリング方式と、スケジューリング機能を各プロセッサに分散した分散スケジューリング方式を、使用するプロセッサ台数,システムの同期オーバーヘッドに応じて使い分けることができる。
【0045】
<スタティックスケジューリング>
一方、スタティックスケジューリングは、マクロタスクグラフがデータ依存エッジのみを持つ場合に使用され、自動並列化コンパイラ1が、コンパイル時にPGへのマクロタスクの割り当てを決める方式である。
【0046】
スタティックスケジューリングは、実行時スケジューリングオーバーへッドを無くし、データ転送と同期のオーバーへッドを最小化することが可能であるため、粒度の細かいタスクのスケジューリングに対しても効果的に利用できる。
【0047】
また、スタティックスケジューリングの際、タスクのコストは自動並列化コンパイラ1でのタスクコスト推定値を適用するが、自動並列化コンパイラ1のプロファイル自動フィードバック機能を用いることで、実コストでタスクスケジューリングを行うことも可能である。
【0048】
プロファイル自動フィードバック機能を用いた場合のコンパイルフローを、図5,6に示す。プロファイル自動フィードバック機能を用いる場合、第1フェーズとして、逐次プログラムをMTに分解し、MT毎にプロファイラ関数を挿入して逐次プログラムを生成する(図5参照)。このプロファイラ関数では、タスク実行コスト(clock cycle)とタスク実行回数を計測する。このプロファイラ関数が挿入された逐次プログラムを一度ターゲットとなるマシン上で実行することで、ターゲットとなるマシン上でのタスク実行コストとタスク実行回数の情報を持つファイルを出力する。
【0049】
そして、第2フェーズにて、この出力ファイルと逐次プログラムを入力として、実コストに基づきスケジューリングした並列化プログラムが生成される(図6参照)。
1−6.データローカライゼーション
自動並列化コンパイラ1は、プログラム全域に渡るキャッシュ最適化を行うことが可能である。自動並列化コンパイラ1は、ループ間などの並列性を解析した後、図7の網掛けされた6つのMT2,3,7,8,11,14が、実線で示すデータ依存エッジで結ばれたマクロタスクグラフのようにループ間にデータ依存があることが分かると、依存があるループ間でのキャッシュのグローバル最適化を試みる(参考文献3(特許第4177681号公報)参照)。
【0050】
具体的には、各ループでアクセスされる配列を調査し、図8の4つのループ20,21,22,23に分割し、同一の分割ループは同一の配列部分にアクセスするように調整することにより、同一の分割ループを同一プロセッサに割り当てる(図9参照)。これにより、同一の分割ループでは、全ての配列データがキャッシュ上で再利用されるようになる。
【0051】
また、このローカライズ技術は、
(1)任意のサイズのローカルメモリ或いは分散共有メモリが与えられた時に、DMA(DTU)(参考文献4(特許第4476267号公報)参照)を用いアクセスされる前に、前記プロセッサに近接したローカル或いは分散共有メモリに事前ロードし、プログラム全域で再利用する。
【0052】
(2)送付先のメモリが一杯の場合には、送付先プロセッサのDTUが、メモリからの掃き出し優先順位に従ってデータを共有メモリ等へ掃き出したことを同期フラグで知らされたら、自動的に空いたメモリにデータを転送する。
【0053】
(3)将来再利用されるデータであるが、暫くの間使用されず、メモリの領域を開ける必要がある場合には、CPUによるタスク実行の裏側でDTUが当該データを集中共有メモリに待避し、使用時までに再ロードする。
【0054】
といったローカルメモリ管理,データ転送技術へと進化している(参考文献5(英国特許第2478874号明細書)。
1−7.自動並列化コンパイラによる電力削減
自動並列化コンパイラ1では、タスクのプロセッサへのスケジュール結果を解析し、自動的に各プロセッサの周波数電圧制御、パワーゲーティング制御により電力を削減することが可能である。
【0055】
図10に示す最速実行モードの際には、タスクグラフのクリティカルパス上のタスク集合はフルスピード(100%の周波数)で実行される必要があり、PG0に割り当てられたMT1と、PG1に割り当てられたMT3が最大周波数で実行される。
【0056】
しかし、MT3は、MT1の計算結果を必要とするので、MT2の実行後、PG1は同期のためのビジーウエイト状態となり、PG0がMT1の出力データをPG1上の分散共有メモリにストアし、MT1の終了を通知する同期フラグを分散共有メモリ上にセットするのを待つ。
【0057】
この際、ビジーウエイトは電力を消費してしまうので、自動並列化コンパイラ1は、MT2を低周波数・低電力で実行するか、もしくは、電源遮断するのに十分な待ち時間があれば、PG1の電源を一時遮断する。
【0058】
また、図11に示すリアルタイム実行モードでは、処理終了後からデッドラインまでの待ち時間の電力消費を避けるため、MT1の周波数を1/4に、MT2の周波数を1/2に下げ、低電力で実行させるか、クロックゲーティング或いはパワーゲーティングにより各PGを停止させる。
【0059】
この時、自動並列化コンパイラ1は、電源状態遷移オーバーヘッドも考慮して、ヒューリスティック的に適切な電力モードを自動選択する(参考文献6(特許第4082706号公報)参照)。
【0060】
1−8.並列化プログラムの生成
自動並列化コンパイラ1における並列化プログラムの生成は、自動並列化API(参考文献7(早稲田大学、「Optimally Scheduled Advanced Multiprocessor Application Program Interface」、2008年)参照)を用い、並列化C或いは並列化Fortranのような、source-to-sourceで並列化を行うことが可能である。
【0061】
この場合には、自動並列化コンパイラ1は、様々なプラットフォームにおいて並列化プログラムを実行可能とするため、後述する自動並列化API標準解釈系を用いて、各プロセッサ用のC或いはFortranのディレクティブ部分をランタイムライブラリコールに変換する。その後、自動並列化コンパイラ1は、各プロセッサ用のコードを逐次コンパイラでコンパイルしてバイナリを生成し、このバイナリをリンクすると、対象となるマルチプロセッサ上で並列化プログラムを実行可能となる。
【0062】
1−9.自動並列化API
自動並列化APIは、後述する情報家電用のマルチコアアーキテクチャを意識したものであり、共有メモリ型マルチコアプロセッサで要求される、データのメモリ配置,DMAを用いたデータ転送,電力制御,グループバリア同期,リアルタイム制御を行うことができる。
【0063】
自動並列化APIの使用例として、自動並列化コンパイラ1とターゲットとなるマルチコア用コンパイラとの間の中間表現としての利用があげられる。
例えば、自動並列化コンパイラ1を用いることにより、Fortran77或いはポインタ利用等に制限をつけた逐次Cプログラムを、自動的に自動並列化APIを加えた並列化Fortran 或いはCプログラムに翻訳できる。この並列化プログラムをサーバ上で動作させるときには、OpenMPコンパイラを通すことにより実行バイナリを生成することができる。
【0064】
また,組込みシステム用のマルチコアプロセッサで使用する場合には、専用API解釈系によりランタイムライブラリを含むコードを生成し、逐次コンパイラを通すことによっても、実行バイナリを生成することができる。
【0065】
図12における自動並列化APIの例では、“threadprivate”,“distributedshared”,“onchipshared”は、メモリ配置APIであり、変数をどのメモリに配置するかを指定している。
【0066】
また、“pararell subsections”の部分が自動並列化APIであり、“subsection”を2つ配置することで、2スレッドを生成して処理を実行可能となっている。
また、“dma transfer”はデータ転送APIで、“dma contiguous parameter”はDTUによる連続転送を表すAPIである。具体的には、該連続転送APIは、第1引数が転送元アドレス,第2引数が転送先アドレス,第3引数が転送サイズ,第4引数が転送終了時に値が設定されるフラグ変数,第5引数がフラグに設定する値となっている。
【0067】
1−10.マルチコアアーキテクチャと自動並列化API標準解釈系
自動並列化API標準解釈系とは、自動並列化コンパイラ1で生成した並列化プログラムのポータビリティの実現を図るためのものである。自動並列化コンパイラ1は、生成した並列化プログラムを多様なアーキテクチャで動作させるため、自動並列化API標準解釈系により生成コードをランタイムライブラリに変換し、様々なプラットフォームに合わせた並列化プログラムを生成することができる。
【0068】
自動並列化コンパイラ1と自動並列化APIにより、後述するマルチコアアーキテクチャにおいて、逐次プログラムの並列化や電力制御を自動的に行うことができるようになった。しかし、自動並列化APIのメモリ配置APIやデータ転送APIを利用するには、ターゲットとなるプラットフォーム用にAPI解釈系を用意する必要があり、開発期間の短縮,開発の容易化が求められる状況において、プラットフォーム毎にAPI解釈系を開発するのは大きな負担となっている。
【0069】
そこで、指示文やソースプログラムを解釈して変換する部分等のように、プラットフォームへの依存度が低い部分を自動並列化API標準解釈系として提供する。これにより、多くの組込み用のマルチコアプロセッサが備えるランタイムライブラリや、比較的容易に作成可能なランタイムライブラリをプラットフォーム毎に用意すれば、並列化プログラムを生成可能となる。その結果、様々なマルチコアプロセッサにおいて、非常に低コストで、自動並列化コンパイラ1により並列化や電力制御を行うことが可能となる。
【0070】
以下では、情報家電向けのマルチコアアーキテクチャの一例と、自動並列化API標準解釈系の構造と変換例について述べる。
1−11.マルチコアアーキテクチャについて
マルチコアプロセッサにおけるメモリアーキテクチャであるローカルメモリアーキテクチャは、キャッシュアーキテクチャとは異なり、ソフトウェア上で明示的なローカルメモリ管理を行うことで性能を引き出すことが可能である。
【0071】
本実施形態のマルチコアアーキテクチャ50では、1つのチップ上に複数のプロセッサエレメント(PE51,52,53)を持つ(図13参照)。各PEには、中央演算処理装置(CPU51a),ローカルプログラムメモリ(LPM51b),ローカルデータメモリ(LDM51c),分散共有メモリ(DSM51d),CPUと非同期に動作しデータ転送を行うことができるデータ転送ユニット(DTU51d)が設けられている。チップ上の全てのPEは、バスやクロスバーといったInterconnection Network54によって、オンチップ集中共有メモリ(OnChipCSM55)や、オフチップ集中共有メモリに接続されている。
【0072】
1−12.自動並列化API標準解釈系の構造
本実施形態の自動並列化API標準解釈系70は、自動並列化APIを含むCプログラム71(或いはFortranプログラム)を入力とし、設定ファイル72の設定に従いランタイムライブラリ関数を含むCプログラム73(或いはFortranプログラム)を出力する(図14参照)。
【0073】
設定ファイル72は、アーキテクチャ毎の設定を記述することができ、分散共有メモリ(DSM)のアドレスや、ネイティブコンパイラに対する指示を伝搬可能とする“comment指示文”や、データ転送API及び電力制御APIの変換や、プロセッサコア間で任意のグループによるバリア同期を実現する“groupbarrier 指示文”や、モジュール名とモジュール番号の対応付け等に関する設定ができる。
【0074】
また、出力されたランタイムライブラリ関数を含むCプログラム73を、各開発環境80のコンパイラ81でコンパイルし、ランタイムライブラリ82,83とリンクすることで、実行ファイル84を生成することができる。
【0075】
1−13.ランタイムライブラリコールへの変換
自動並列化APIの指示文は、Cプログラムでは“pragma”により記述されるが、これらの自動並列化APIの指示文は、自動並列化API標準解釈系によりランタイムライブラリ関数へ変換される。
【0076】
<並列実行指示文>
図15の自動並列化APIの指示文では、“parallel subsections指示文”により4つのスレッドを生成している。図16のソースプログラムのように、自動並列化API標準解釈系では、スレッドとして実行するプログラム部分を、“thread_function_000〜003”という関数として切り出す。これらの切り出された関数のうち、“thread_function_001〜003”は、“oscar_thread_create関数”によりスレッドとして実行し、“thread_function_000”は、そのまま通常の関数として実行する。最後に、“oscar_thread_join”関数により、スレッド終了の待ち合わせを行う。
【0077】
また、“pthreadライブラリ”が利用可能なプラットフォームでは、“oscar_thread_create”及び“oscar_thread_join”を、pthread create 及びpthread join を用いてそれぞれ実装すれば良い。
【0078】
1−14.メモリ配置属性の指定
“thread private 指示文”等のメモリ配置指定は、ランタイムライブラリでは実現できない。そのため、これらのメモリ配置指定は、ネイティブコンパイラ用のメモリ属性指定の記述に変換する必要がある。
【0079】
具体例を挙げると、“#pragma oscar onchipshared(var1)”という記述は、変数“var1”をオンチップ集中共有メモリに配置するように指定するものである(“onchipshared 指示文”)。
【0080】
ネイティブコンパイラとしてgccを用いる場合、上記記述は、“int__attribute((subsection("OSCAR_SHARED")))var1;”という記述に変換される。該記述では、“attribute記述”により、変数“var1”を“OSCAR SHAREDセクション”に配置している。対象プラットフォーム用リンカの設定ファイルにより“OSCAR SHARED”セクションをオンチップ集中共有メモリに配置することで、リンカが変数“var1”がオンチップ集中共有メモリ上に配置される。
【0081】
2.自動車制御プログラムの並列化手順と手法
次に、モデルベース設計で自動生成された自動車制御プログラムの特徴について述べ、自動並列化コンパイラ1による並列化手法について説明する。
【0082】
具体的には、自動並列化コンパイラ1は、条件分岐と代入文により構成され、処理が細かい自動車制御プログラムに対して、インライン展開やリネーミングを行い、並列性を抽出する。また、リアルタイム性を順守するために条件分岐隠蔽のためのタスク融合を行い、オーバーヘッドが低くなるようにスタティックスケジューリングを行う。さらに、実コストでスタティックスケジューリングを行うために、プロファイル自動フィードバック機能を適用しても良い。
【0083】
2−1.自動並列化コンパイラの動作環境等について
自動並列化コンパイラ1は、例えば、DVD,CD−ROM,USBメモリ,メモリカード(登録商標)等の光ディスク,磁気ディスク,半導体製メモリ等として構成された記憶媒体180に記憶された状態で、ユーザに提供される(図17参照)。無論、ネットワークを経由してユーザに提供されても良い。
【0084】
そして、自動並列化コンパイラ1がインストールされたパーソナルコンピュータ(PC)100は、自動並列化コンパイル装置として動作する。PC100は、ディスプレイ110,HDD120,CPU130,ROM140,RAM150,入力装置160,読取部170等を備える。
【0085】
ディスプレイ110は、CPU130から受けた映像信号を、ユーザに対して映像として表示する。
また、入力装置160は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をCPU130に出力する。
【0086】
また、読取部170は、自動並列化コンパイラ1等が記憶された記憶媒体180からデータを読み取る部位である。
また、RAM150は読み出し、書き込み可能な揮発性メモリであり、ROM140は読み出し専用の不揮発性メモリであり、HDD120は読み出し,書き込みが可能な不揮発性メモリである。ROM140,HDD120には、CPU130が読み出して実行するプログラム等が予め記憶されている。
【0087】
また、RAM150は、CPU130がROM140,HDD120に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域や、作業用のデータを一時的に保存するための記憶領域として用いられる。
【0088】
また、CPU130は、OSをHDD120から読み出して実行し、HDD120に記録されている各種プログラムをOS上のプロセスとして実行する。また、CPU130は、このプロセスにおいて、必要に応じて入力装置160から信号の入力を受け付け、ディスプレイ110に映像信号を出力し、RAM150,HDD120に対してデータの読み出し/書き込みの制御を行う。
【0089】
また、PC100には、読取部170を介して記憶媒体180から読み取られた自動並列化コンパイラ1がインストールされており、自動並列化コンパイラ1は、HDD120に保存され、OS上のプロセスとして実行されるアプリケーションの1つとなっている。
【0090】
なお、この自動並列化コンパイル装置は、車載装置等といった組み込みシステム向けの並列化プログラムの開発に用いられる。しかしながら、これに限定されることは無く、例えば情報家電等といった様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
【0091】
2−2.並列化の手順
本実施形態では、自動並列化コンパイラ1は、一例として、MathWork社のMatlab(登録商標),Simulink(登録商標)にてモデルベース設計により自動生成された自動車制御プログラム(逐次プログラム)から並列化プログラムを生成する。
【0092】
具体的には、まず、Embedded Coderを用いて、Simulinkによりモデルベース設計された自動車制御モデルからC言語で記述された自動車制御プログラムが自動生成される。そして、自動並列化コンパイラ1は、自動並列化処理を行い、自動車制御プログラム250を解析して並列化プログラム251を生成する(図18)。
【0093】
自動並列化処理では、自動並列化コンパイラ1は、自動車制御プログラム250に対し、インライン展開と(S200)、ローカル変数のリネームとを行う(S205)。そして、自動並列化コンパイラ1は、これらの処理がなされた自動車制御プログラム250をマクロタスクに分割し、データ依存性と制御依存性を解析してMFGを生成する(S210)。
【0094】
続くS215では、自動並列化コンパイラ1は、MFGが示す制御依存性に基づき、異なるマクロタスクに分岐するマクロタスクを始端タスクとして特定する。また、自動並列化コンパイラ1は、該始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるマクロタスクのうち、最初に実行されるものを終端タスクとして特定する。
【0095】
そして、自動並列化コンパイラ1は、特定した始端タスクと、該始端タスクを始点とする処理における終端タスクと、該始端タスクの実行後であって、該終端タスクの実行前に実行される全てのマクロタスクとを、1つのマクロタスクに融合させ(タスク融合)、S220に処理を移行する。
【0096】
なお、タスク融合を行うことで、MFGは制御依存性が無い状態となる。
また、マクロタスクの粒度を細かくするためには、S215での処理のように、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるマクロタスクのうち、最初に実行されるマクロタスクを終端タスクとして特定するのが好適である。しかし、これに限らず、これらのマクロタスクのうち、2番目以降に実行されるいずれか一つのマクロタスクを終端タスクとして特定しても良い。
【0097】
S220では、自動並列化コンパイラ1は、タスク融合がなされたMFGに基づき、各マクロタスクの最早実行可能条件を解析し、MTGを生成する。また、自動並列化コンパイラ1は、MTGに基づきスタティックスケジューリングを行い、並列実行可能なマクロタスクを異なるPEに割り当て、並列化プログラム251を生成する(S225)。
【0098】
なお、このとき、自動並列化コンパイラ1は、並列化プログラム251を様々なプラットフォームで動作させるため、自動並列化API標準解釈系を用いて、自動並列化APIが加えられた並列化プログラムをランタイムライブラリが実装された並列化プログラムに変換しても良い。
【0099】
そして、自動並列化コンパイラ1は、並列化プログラム251からバイナリデータ252を生成する(S230)。
2−3.自動車制御プログラムの特徴
例えば、エンジン制御を行う自動車制御プログラムは、基本的に、初期化関数と、繰り返し実行される主要エンジン制御計算関数から構成される。
【0100】
図19に例示されたエンジン制御用の自動車制御プログラムは、“Model_step関数”を繰り返し実行することでリアルタイム制御が行われる。自動車制御はデッドラインが短いため、“Model_step関数”では、1周期が長くてもマイクロ秒オーダーであり、プログラムの粒度は極めて細かい。この“Model_step関数”では、Simulinkモデルに記述されたブロックに該当するすべての処理が計算される。
【0101】
また、図20は、自動車制御モデル300,301と、これに基づき自動生成されたC言語の自動車制御プログラム302,304とを示している。図20が示すように、例えば、モデル301の“Saturationブロック”は、“if”と“if else”と“else”から構成されるプログラムに変換される。また、モデル301の“Switchブロック”は、“if”と“else”のプログラムに変換される。
【0102】
この自動車制御プログラムにおける“Model_step関数”は、この自動車制御モデル上の制御関数に対応しているため、本実施形態では、この制御関数を並列化し、高速化を行う。
【0103】
また、このような自動車制御プログラムの特徴は、従来の並列化コンパイラが並列化の対象としてきたループが存在しない(或いは少ししか存在しない)という点である。そして、図20が示すように、自動車制御では、センサー情報等によって処理を変化させる必要があるので、“Switchブロック”や“Saturationブロック”を多用して設計を行うことが多く、基本的に条件分岐文と代入文の組み合わせで構成されている。
【0104】
すなわち、自動車制御プログラムには、従来行われていたループ内イタレーションレベルでの並列化が適用できない。このため、自動並列化コンパイラ1は、上述した自動並列化処理において、Simulinkモデルレベルでの並列性を粗粒度レベルタスク並列化機能により抽出する。
【0105】
また、モデルベース設計された制御関数は、サブルーチン間の並列性が乏しく、並列性を細かく引き出す必要性があるため、自動並列化コンパイラ1はインライン展開(自動並列化処理のS200)を行う。図21にはインライン展開後のMFGの一例が記載されている(該MFGにおけるBBは基本ブロックを示している)。該MFGからわかるように、モデルベース開発された逐次プログラムには、処理コストが大きい並列化可能なループが存在せず、ノード内の小円により表される条件分岐を持つ基本ブロックが多数存在する。
【0106】
また、各ノードの処理時間は長くても数十クロックサイクル程度であり、大変処理が細かく、従来の手法では並列化が困難であり、オーバーヘッドを最大限抑えることが重要とある。
【0107】
2−4.自動車制御プログラムのリストラクチャリング手法と並列化手法
そこで、自動並列化コンパイラ1は、Simulinkモデルから自動生成された自動車制御プログラムから十分に並列性を抽出し、よりオーバーヘッドを低くした状態で並列化が可能になるように、プログラムのリストラクチャリングを行う。
【0108】
<関数のインライン展開(自動並列化処理のS200)>
自動車制御プログラムは、処理が細かく、粗い粒度での並列化が困難であるため、制御関数内のサブルーチン内の並列性をも有効活用すべきである。このため、自動並列化コンパイラ1は、制御関数内のサブルーチンのインライン展開を行う(サブルーチンをコールする記述を、該サブルーチンにて定義されている処理の記述に置き換える)。
【0109】
インライン展開が有効な例を挙げると、図22のMTG320は、“sb2”と”sb3”とが依存関係を有しており、並列性が存在しない。しかし、“sb2”,“sb3”のMTG321,322が示すように、これらのサブルーチンの内部処理には並列性があるため、“sb2”と“sb3”をインライン展開することにより、これらのサブルーチンの並列性を利用することができる。なお、図23は、“sb2”と“sb3”をインライン展開した後のMTG323を示している。
【0110】
<ローカル変数のリネーミング(自動並列化処理のS205)>
Simulinkモデルから自動生成された自動車制御プログラムでは、ROM使用量削減のため、多くの箇所でローカル変数が繰り返し使用されている。一例として、図24に記載の自動車制御プログラムでは、複数の箇所330,331でローカル変数“tmp”が繰り返し使用されている。
【0111】
これにより、並列性解析の際にデータ依存があると特定され、並列性が十分引き出せなくなってしまう。そこで、自動並列化処理のS205では、使い回しされているローカル変数のリネームを行う。
【0112】
具体的には、自動並列化コンパイラ1は、制御関数内において、同一名称のローカル変数が用いられている複数の処理ブロックを特定すると共に、特定した各処理ブロックにおいて独自の名称のローカル変数が用いられるよう、自動車制御プログラムを改変する。
【0113】
なお、処理ブロックとは、例えば、ループ処理や、if文やswitch-case文等の分岐処理のステートメントと、これに付随する代入文等から構成される記述の集合体であっても良い。また、このほかにも、例えば、自動車制御プログラムを生成したSimulinkモデルにおける各ブロックに対応する記述の集合体を、処理ブロックとしても良い。
【0114】
図24の自動車制御プログラムを例に挙げると、if-else文からなるステートメントと代入文及び関数コールから構成される処理ブロック330,331では、同一名称のローカル変数“tmp”が用いられている。リネームにより、例えば、処理ブロック330にてアクセスされるローカル変数の名称が“tmp1”に、処理ブロック331にてアクセスされるローカル変数の名称が“tmp2”に変更される。
【0115】
なお、Embedded Coderを用いてSimulinkモデルから自動車制御プログラムを自動生成する際、Embedded Coderをローカル変数の使い回しがされない設定(各ブロックに対応する記述毎に別の名称のローカル変数が用いられる設定)としても良い。これにより、S205の処理を行わなくても、マクロタスク間に不要なデータ依存が生じてしまうことを防ぐことができる。
【0116】
<条件分岐隠蔽のためのタスク融合(自動並列化処理のS215)>
上述したように、自動車制御プログラムにはループ構造が存在しないため、近細粒度並列化か粗粒度タスク並列化を適用することが考えられるが、実行オーバーヘッドを相対的に小さく抑えるため、自動並列化コンパイラ1は、粗粒度タスク並列化を適用する。
【0117】
また、自動車制御プログラムでは、各マクロタスクのコストは数10クロック程度であるが、自動並列化コンパイラ1によりダイナミックスケジューリングを行った場合には、通常数10から数100クロックのオーバーヘッドが生じる。このため、ダイナミックスケジューリングは、自動車制御プログラムには不向きである。
【0118】
しかしながら、条件分岐を持つマクロタスクは、その実行時に動的に分岐先が決定されるため、そのままでは、コンパイル時にプロセッサコアを割り当てるスタティックスケジューリングが適用できないという問題がある。
【0119】
そこで、自動並列化処理のS215では、自動並列化コンパイラ1は、タスク融合アルゴリズムにより、条件分岐をもつマクロタスクと、その分岐先のマクロタスクまでを1つの粗粒度タスク(Blockタスク) に融合するタスク融合を行う。
【0120】
具体的には、MFG350(図25参照)からMTG351(図26参照)が生成されるが、該MFG350に対してタスク融合を行うと、MFG352(図27参照)が生成され、MFG352からは、MTG353(図28参照)が生成される。
【0121】
MFG350に対するタスク融合では、条件分岐を有する“bb1”,“bb6”が始端タスクとして特定される。
また、“bb1”を始点とする一連の処理として、“bb1”,“bb2”,“bb4”…と、“bb1”,“bb3”,“bb4”…とが特定される。また、これらの一連の処理において共通して実行されるマクロタスクのうち、最初に実行される“bb4”が、終端タスクとして特定される。
【0122】
そして、始端タスクである“bb1”と、終端タスクである“bb4”と、“bb1”の後であって、“bb4”の前に実行される“bb2”,“bb3”とが、1つのマクロタスク(MFG352の“Block1”)に融合される。
【0123】
また、MFG350に対するタスク融合では、“bb6”を始点とする一連の処理として、“bb6”,“bb7”,“bb12”…と、“bb6”,“bb8”,“bb10”,“bb11”,“bb12”…と、“bb6”,“bb8”,“bb9”,“bb11”,“bb12”…と、が特定される。また、これらの一連の処理において共通して実行されるマクロタスクのうち、最初に実行される“bb12”が、終端タスクとして特定される。
【0124】
そして、始端タスクである“bb6”と、終端タスクである“bb12”と、“bb6”の後であって、“bb12”の前に実行される“bb7〜11”とが、1つのマクロタスク(MFG352の“Block3”)に融合される。
【0125】
タスク融合により生成されたMFG352には条件分岐が存在しない(制御依存性が存在しない)ため、スタティックスケジューリングが可能となる。
3.性能評価について
次に、本実施形態の自動並列化コンパイラ1により生成された並列化プログラムにより動作するマルチコアプロセッサが搭載された車載装置の性能評価の結果について説明する。
【0126】
3−1.車載装置の構成について
まず、自動並列化コンパイラ1により生成された並列化プログラムにより動作するエンジン制御ECU400の構成について説明する(図29参照)。
【0127】
エンジン制御ECU400は、ROM410,RAM420,通信部430,マルチコアプロセッサ440,センサ部450,入出力ポート460等を備える。
ROM410は、自動並列化コンパイラ1により生成された並列化プログラムのバイナリデータを保存する部位であり、マルチコアプロセッサ440は、該バイナリデータに従い動作し、エンジン制御ECU400を統括制御する。
【0128】
また、RAM420は、マルチコアプロセッサ440によりアクセスされる部位である。
また、通信部430は、車内LAN等を介して接続された他のECUと通信を行う部位である。
【0129】
また、センサ部450は、エンジン470の状態を検出するための各種センサから構成される部位である。
また、入出力ポート460は、エンジン470を制御するための各種信号の送受信を行う部位である。
【0130】
また、マルチコアプロセッサ440は、複数のPE441,442を有しており、例えば、情報家電用マルチコアであるRP2や、ルネサスエレクトロニクス株式会社のV850E2R等であっても良い。
【0131】
RP2は、SH4a(SH−X3)コアを8個搭載したホモジニアスマルチコアであり、各コアには、中央演算処理装置(CPU),ローカルプログラムメモリ(LPM),ローカルデータメモリ(LDM),分散共有メモリ(DSM)が設けられている。また、各コアには、CPUと非同期に動作し、データ転送を行うことができるデータ転送ユニット(DTU)が設けられている。
【0132】
なお、エンジン制御ECU400に限らず、マルチコアプロセッサが搭載された他のECU(例えば、ナビゲーション装置等)を、自動並列化コンパイラ1により生成された並列化プログラムにより動作させても良い。また、車載装置に限らず、マルチコアプロセッサが搭載された情報家電等の電子装置を、自動並列化コンパイラ1により生成された並列化プログラムにより動作させても良い。
【0133】
3−2.エンジン制御ECUの評価結果について
エンジン制御ECU400の制御システムのモデルは、ECUモデル,Driverモデル,Carモデル,Sensorモデルの4つのサブシステムを有している。マルチコアプロセッサ440としてRP2とV850E2Rを用いた場合における、エンジン制御ECU400の制御システム全体の性能評価や、各サブシステムの性能評価の結果について説明する。
【0134】
<RP2での性能評価>
まず、ECUモデル,Driverモデル,Sensorモデル,Carモデルを、2コアにより並列動作するRP2と、1コアにより逐次動作するRP2により動作させた。なお、これらのモデルから生成されたプログラムには、サイズ優先の最適化が施されている。
【0135】
ECUモデルに関しては、1コアのPR2では1周期あたりの実行時間が119μsであったのに対し、2コアのPR2では1周期あたりの実行時間が63μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ、1.89倍の性能向上が得られた。
【0136】
また、Driverモデルに関しては、1コアのPR2では1周期あたりの実行時間が41μsであったのに対し、2コアのPR2では1周期あたりの実行時間が27μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ、1.52倍の性能向上が得られた。
【0137】
また、Sensorモデルに関しては、1コアのPR2では1周期あたりの実行時間が40μsであったのに対し、2コアのPR2では1周期あたりの実行時間が26μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ、1.52倍の性能向上が得られた。
【0138】
また、Carモデルに関しては、1コアのPR2では1周期あたりの実行時間が2382μsであったのに対し、2コアのPR2では1周期あたりの実行時間が1291μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ、1.84倍の性能向上が得られた。
【0139】
次に、エンジン制御ECU400の制御システム全体を、4コアにより並列動作するRP2と、2コアにより並列動作するRP2と、1コアにより逐次動作するRP2により動作させた。なお、制御システム全体のモデルから生成されたプログラムには、サイズ優先の最適化が施されている。
【0140】
その結果、1コアのPR2では1周期あたりの実行時間が4161μsであったのに対し、2コアのPR2では1周期あたりの実行時間が2397μsに、4コアのPR2では1周期あたりの実行時間が1273μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ1.74倍の性能向上が得られ、4コアのPR2は、1コアのPR2に比べ3.27倍の性能向上が得られた。
【0141】
<V850E2Rでの性能評価>
また、ECUモデルを、2コアにより並列動作するV850E2Rと、1コアにより逐次動作するV850E2Rにより動作させた。なお、ECUモデルから生成されたプログラムには、サイズ優先の最適化が施されている。
【0142】
その結果、速度向上率に関して、2コアのV850E2Rは、1コアのV850E2Rに比べ、1.91倍の性能向上が得られた。
3−3.エンジン燃料噴射制御モデルでの評価結果について
また、自動並列化コンパイラ1によりエンジン燃料噴射制御モデルから生成された並列化プログラムを、RP2とV850E2Rで動作させた場合の性能評価の結果について説明する。
【0143】
<RP2での性能評価>
エンジン燃料噴射制御モデルを、4コアにより並列動作するRP2と、2コアにより並列動作するRP2と、1コアにより逐次動作するRP2により動作させた。なお、エンジン燃料噴射制御モデルから生成されたプログラムには、サイズ優先の最適化が施されている。
【0144】
その結果、1コアのPR2では1周期あたりの実行時間が157μsであったのに対し、2コアのPR2では1周期あたりの実行時間が87μsに、4コアのPR2では1周期あたりの実行時間が42μsに短縮された。また、速度向上率に関しては、2コアのPR2は、1コアのPR2に比べ1.81倍の性能向上が得られ、4コアのPR2は、1コアのPR2に比べ3.76倍の性能向上が得られた。
【0145】
<V850E2Rでの性能評価>
また、エンジン燃料噴射制御モデルを、2コアにより並列動作するV850E2Rと、1コアにより逐次動作するV850E2Rにより動作させた。なお、エンジン燃料噴射制御モデルから生成されたプログラムには、サイズ優先の最適化が施されている。
【0146】
その結果、速度向上率に関して、2コアのV850E2Rは、1コアのV850E2Rに比べ、1.79倍の性能向上が得られた。
[他の実施形態]
(1)本実施形態の自動並列化コンパイラ1は、自動並列化処理のS200にて逐次プログラムのインライン展開を行うと共に、S205にてローカル変数のリネームを行うが、これらの処理の双方または一方を行わない構成としても良い。このような場合であっても、逐次プログラムの構造によっては、同様の効果が得られる。
【0147】
(2)本実施形態の自動並列化コンパイラ1は、生成した並列化プログラムに対し、投機的実行を行うための最適化を行っても良い。こうすることにより、より一層、並列化プログラムの性能の向上を図ることができる。
【0148】
[特許請求の範囲との対応]
上記実施形態の説明で用いた用語と、特許請求の範囲の記載に用いた用語との対応を示す。
【0149】
自動並列化処理のS200が並列化コンパイル方法の置換手順の一例に、S205がリネーム手順の一例に相当する。
また、S210が、並列化コンパイル方法,並列化コンパイラの分割手順と、並列化コンパイル装置の分割手段の一例に、S215が、並列化コンパイル方法,並列化コンパイラの特定手順,融合手順と、並列化コンパイル装置の特定手段,融合手段の一例に相当に相当する。
【0150】
また、S220が、並列化コンパイル方法,並列化コンパイラの抽出手順と、並列化コンパイル装置の抽出手段の一例に、S225が、並列化コンパイル方法,並列化コンパイラのスケジューリング手順と、並列化コンパイル装置のスケジューリング手段の一例に相当する。
【0151】
また、S225,S230が、並列化コンパイル方法,並列化コンパイラの生成手順と、並列化コンパイル装置の生成手段の一例に相当する。
また、PE,PG,プロセッサコアが、プロセッサユニットの一例に相当する。
【0152】
また、エンジン制御ECU400が車載装置の一例に相当する。
【符号の説明】
【0153】
1…自動並列化コンパイラ、3…FE、4…中間言語、5…MP、6…中間言語、7…BE、9…並列化API、50…マルチコアアーキテクチャ、70…自動並列化API標準解釈系、100…PC、110…ディスプレイ、120…HDD、130…CPU、140…ROM、150…RAM、160…入力装置、170…読取部、180…記憶媒体、250…自動車制御プログラム、400…エンジン制御ECU、410…ROM、420…RAM、430…通信部、440…マルチコアプロセッサ、450…センサ部、460…入出力ポート。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29