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

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

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

特許6427054並列化コンパイル方法、及び並列化コンパイラ
<>
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000002
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000003
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000004
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000005
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000006
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000007
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000008
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000009
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000010
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000011
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000012
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000013
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000014
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000015
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000016
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000017
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000018
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000019
  • 特許6427054-並列化コンパイル方法、及び並列化コンパイラ 図000020
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6427054
(24)【登録日】2018年11月2日
(45)【発行日】2018年11月21日
(54)【発明の名称】並列化コンパイル方法、及び並列化コンパイラ
(51)【国際特許分類】
   G06F 8/41 20180101AFI20181112BHJP
【FI】
   G06F8/41 130
【請求項の数】2
【全頁数】20
(21)【出願番号】特願2015-72813(P2015-72813)
(22)【出願日】2015年3月31日
(65)【公開番号】特開2016-192153(P2016-192153A)
(43)【公開日】2016年11月10日
【審査請求日】2017年10月19日
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(73)【特許権者】
【識別番号】899000068
【氏名又は名称】学校法人早稲田大学
(74)【代理人】
【識別番号】100140486
【弁理士】
【氏名又は名称】鎌田 徹
(74)【代理人】
【識別番号】100170058
【弁理士】
【氏名又は名称】津田 拓真
(74)【代理人】
【識別番号】100139066
【弁理士】
【氏名又は名称】伊藤 健太郎
(72)【発明者】
【氏名】矢頭 義弘
(72)【発明者】
【氏名】鈴木 範幸
(72)【発明者】
【氏名】峰田 憲一
(72)【発明者】
【氏名】笠原 博徳
(72)【発明者】
【氏名】木村 啓二
(72)【発明者】
【氏名】見神 広紀
(72)【発明者】
【氏名】梅田 弾
【審査官】 坂庭 剛史
(56)【参考文献】
【文献】 特開2015−001807(JP,A)
【文献】 米国特許出願公開第2003/0131346(US,A1)
【文献】 特開2009−129179(JP,A)
【文献】 特開2013−122633(JP,A)
【文献】 国際公開第2010/047174(WO,A1)
【文献】 特開2002−149416(JP,A)
【文献】 特開2000−066898(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
(57)【特許請求の範囲】
【請求項1】
シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサ(21)で処理可能なように並列化した分割プログラムを生成するコンピュータが実行する並列化コンパイル方法であって、
前記逐次プログラムは複数のマクロタスクによって構成され、前記複数のマクロタスクに含まれる少なくとも2以上のマクロタスクは相互にデータ依存関係を有しており、
前記逐次プログラムを前記分割プログラムにコンパイルするにあたって、前記データ依存関係の少なくとも一部を無効化する無効化情報の有無を判断する無効化手順と、
前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記データ依存関係の少なくとも一部を無効化して前記分割プログラムをコンパイルする生成手順と、
前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記無効化手順において無効化情報有りとされた前記2以上のマクロタスクに含まれる第1マクロタスクが、別のマクロタスクとデータ依存関係を有していたものの、前記2以上のマクロタスクに含まれる第2マクロタスクとのデータ依存関係を有することにより前記別のマクロタスクとのデータ依存関係が不要になったためそのデータ依存関係が解消されているか否かを判断するタイミング判断手順と、を備え
前記生成手順では、前記分割プログラムのコンパイルにあたって、前記別のマクロタスクと前記第1マクロタスクとのデータ依存関係を回復させる、ことを特徴とする並列化コンパイル方法。
【請求項2】
シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコア
プロセッサ(21)で処理可能なように並列化した分割プログラムをコンピュータに生成させるための並列化コンパイラ(1)であって、
前記逐次プログラムは複数のマクロタスクによって構成され、前記複数のマクロタスクに含まれる少なくとも2以上のマクロタスクは相互にデータ依存関係を有しており、
前記逐次プログラムを前記分割プログラムにコンパイルするにあたって、前記データ依存関係の少なくとも一部を無効化する無効化情報の有無を判断する無効化手順と、
前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記データ依存関係の少なくとも一部を無効化して前記分割プログラムをコンパイルする生成手順と、
前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記無効化手順において無効化情報有りとされた前記2以上のマクロタスクに含まれる第1マクロタスクが、別のマクロタスクとデータ依存関係を有していたものの、前記2以上のマクロタスクに含まれる第2マクロタスクとのデータ依存関係を有することにより前記別のマクロタスクとのデータ依存関係が不要になったためそのデータ依存関係が解消されているか否かを判断するタイミング判断手順と、前記コンピュータに実行可能にさせるように構成され、
前記生成手順では、前記分割プログラムのコンパイルにあたって、前記別のマクロタスクと前記第1マクロタスクとのデータ依存関係を回復させる、ことを特徴とする並列化コンパイラ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シングルコアプロセッサ用に記述された逐次プログラムからマルチコアプロセッサ用に並列化した分割プログラムを生成する並列化コンパイル方法、及び並列化コンパイラに関する。
【背景技術】
【0002】
自動車における制御系,情報系の高度化,統合化のためには、それらを実現するためのプロセッサの高能力化が重要となる。例えば、安全,快適で燃費の良い自動車開発のために重要なエンジン制御系を高度化するためには、制御アルゴリズムの高度化や新たな制御機能の実現等、計算負荷の増大が避けられない。このような問題を解決する為には、リアルタイム制御を実現しているプロセッサの高速化が必須となる。
【0003】
しかし、従来のようにプロセッサの動作周波数を向上させることは、消費電力が周波数の三乗に比例して増大するため、困難となっている。このため、1チップ上に低動作周波数のプロセッサコアを複数集積し、電力削減のために低周波数化・低電圧化したプロセッサコアを並列動作させることで、処理の高速化と低電力化を同時に実現可能なマルチコアプロセッサへの移行が急ピッチで行われている。
【0004】
マルチコアプロセッサにて、シングルコアプロセッサよりも高速な処理を行うためには、シングルコアプロセッサ用の逐次プログラムの処理を分割し、プロセッサコア間の通信が最小になる形で各プロセッサコアに各処理を割り当てる必要がある。従来、このような逐次プログラムの並列化の作業は人手で行う必要があったが、このような作業は大変困難で長期間を要し、開発費の増加や並列化されたプログラムの信頼性等、多くの課題が生じている。
【0005】
下記特許文献1では、開発期間や開発費を抑えつつ、信頼性が高く、高速な処理が可能な車載装置用の組込みシステム向けの並列化プログラムを作成することができる並列化コンパイル方法が提案されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2015−1807号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
従来の並列化手法では、複数のマクロタスク間のデータ依存関係と分割後の処理時間とを勘案し、シングルコアプロセッサ用に記述された逐次プログラムをマルチコアプロセッサ用の分割プログラムにコンパイルしていた。しかしながら、特に自動車分野の逐次プログラムでは、逐次プログラムに含まれる複数のマクロタスク間のデータ依存関係が複雑であり、それら全てのデータ依存関係を勘案することも難しい。またデータ依存関係を勘案した分割プログラムを生成しても、そのデータ依存関係に縛られて処理時間が平均化されず並列化の効果を十分に発揮できていない状況にあった。
【0008】
本発明はこのような課題に鑑みてなされたものであり、その目的は、逐次プログラムを構成するマクロタスクが相互に複雑なデータ依存関係を有している場合であっても、処理時間の平均化を図ることが可能な並列化コンパイル方法、及び並列化コンパイラを提供することにある。
【課題を解決するための手段】
【0009】
上記課題を解決するために、本発明に係る並列化コンパイル方法は、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した分割プログラムを生成する並列化コンパイル方法であって、前記逐次プログラムは複数のマクロタスクによって構成され、前記複数のマクロタスクに含まれる少なくとも2以上のマクロタスクは相互にデータ依存関係を有しており、前記逐次プログラムを前記分割プログラムにコンパイルするにあたって、前記データ依存関係の少なくとも一部を無効化する無効化情報の有無を判断する無効化手順と、前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記データ依存関係の少なくとも一部を無効化して前記分割プログラムをコンパイルする生成手順と、を備えることを特徴とする。
【0010】
上記課題を解決するために、本発明に係る並列化コンパイル方法は、シングルコアプロセッサで処理可能なように記述された逐次プログラムからマルチコアプロセッサで処理可能なように並列化した分割プログラムを生成するコンピュータが実行する並列化コンパイル方法であって、前記逐次プログラムは複数のマクロタスクによって構成され、前記複数のマクロタスクに含まれる少なくとも2以上のマクロタスクは相互にデータ依存関係を有しており、前記逐次プログラムを前記分割プログラムにコンパイルするにあたって、前記データ依存関係の少なくとも一部を無効化する無効化情報の有無を判断する無効化手順と、前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記データ依存関係の少なくとも一部を無効化して前記分割プログラムをコンパイルする生成手順と、前記無効化手順における判断の結果、前記無効化情報が有る場合に、前記無効化手順において無効化情報有りとされた前記2以上のマクロタスクに含まれる第1マクロタスクが、別のマクロタスクとデータ依存関係を有していたものの、前記2以上のマクロタスクに含まれる第2マクロタスクとのデータ依存関係を有することにより前記別のマクロタスクとのデータ依存関係が不要になったためそのデータ依存関係が解消されているか否かを判断するタイミング判断手順と、を備え、前記生成手順では、前記分割プログラムのコンパイルにあたって、前記別のマクロタスクと前記第1マクロタスクとのデータ依存関係を回復させる、ことを特徴とする。
【発明の効果】
【0012】
本発明によれば、逐次プログラムを構成するマクロタスクが相互に複雑なデータ依存関係を有している場合であっても、処理時間の平均化を図ることが可能な並列化コンパイル方法、及び並列化コンパイラを提供することができる。
【図面の簡単な説明】
【0013】
図1】本発明の第1実施形態、第2実施形態、第3実施形態に係る並列化コンパイラを示すブロック図である。
図2】本発明の第1実施形態、第2実施形態、第3実施形態に係る車載装置を示すブロック図である。
図3】本発明の第1実施形態に係る並列化コンパイル方法を説明するためのフローチャートである。
図4】データ依存関係無効化情報が無い場合の並列化コンパイル方法を説明するための図である。
図5】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
図6】本発明の第2実施形態に係る並列化コンパイル方法を説明するためのフローチャートである。
図7】本発明の第2実施形態に係る並列化コンパイル方法を説明するための図であって、データ依存関係の一例を説明するための図である。
図8】データ依存関係無効化情報が無い場合の並列化コンパイル方法を説明するための図である。
図9】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
図10】データ依存関係無効化情報が有り同期条件も有る場合の並列化コンパイル方法を説明するための図である。
図11】データ依存関係無効化情報が有り同期条件も有る場合の並列化コンパイル方法を説明するための図である。
図12】本発明の第3実施形態に係る並列化コンパイル方法を説明するためのフローチャートである。
図13】本発明の第3実施形態に係る並列化コンパイル方法を説明するための図であって、データ依存関係の一例を説明するための図である。
図14】データ依存関係無効化情報が無い場合の並列化コンパイル方法を説明するための図である。
図15】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
図16】データ依存関係無効化情報が有り擬似依存条件も有る場合の並列化コンパイル方法を説明するための図である。
図17】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
図18】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
図19】データ依存関係無効化情報が有る場合の並列化コンパイル方法を説明するための図である。
【発明を実施するための形態】
【0014】
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【0015】
1.自動並列化コンパイラについて
【0016】
本実施形態(第1実施形態、第2実施形態、第3実施形態)の自動並列化コンパイラは、組込みシステム向けのシングルコアプロセッサシステム用のソースプログラム(逐次プログラム)から、組込みシステム向けのマルチコアプロセッサシステム用の並列化プログラム(分割プログラム)を生成する機能を有している。
【0017】
1−1.自動並列化コンパイラの設計概念
本実施形態の自動並列化コンパイラは、以下の機能を有している。
(1)マルチグレイン並列処理
(2)コンパイル時のスタティックスケジューリングコードの挿入
(3)実行時のダイナミックスケジューリングコードの生成
(4)階層型マクロデータフローの実現
(5)マクロタスクの分割/融合,Loop distribution/interchange等の並列性抽出
(6)データローカライズによるデータ転送効率の向上
(7)コンパイラによる電力削減
【0018】
1−2.自動並列化コンパイラの内部処理
自動並列化コンパイラは、Front End(FE),Middle Path(MP),Back End(BE)の3つのステージを有している。各ステージは実行形態として独立しており、FE,MPから生成される中間言語によりコード授受が行われる。
【0019】
FEは、逐次プログラムのソースコードを字句解析・構文解析を行い、MPにおいてparse可能な中間言語を生成する部位である。FEの生成する中間言語は、基本的に4つのオペランドを持つ解析木(parse tree)で表現されており、全体として1つのブロックを形成していて構造化は行われていない。
【0020】
MPは、制御依存性解析・データ依存性解析・最適化等を行う部位であり、そのデータを用いて粗粒度・中粒度・近細粒度並列化のマルチグレイン並列処理を行う。
【0021】
BEは、MPが生成した並列化中間言語を読み込んで実際のマシンコードを生成する部位である。当該部位は、ターゲットとなっているマルチコアアーキテクチャのアセンブラコードを生成するBEの他、OpenMP用の並列化FortranコードやCコードを生成するBEを有している。さらには、当該部位は、後述する並列化APIによりメモリ配置,データ転送を含めて並列化したコードを生成するBE等、多様なアーキテクチャに対応したコードを出力するBEを有している。
【0022】
1−3.自動並列化コンパイラの並列性解析
自動並列化コンパイラは、逐次プログラムを、基本ブロック(BB),繰り返しブロック(RB),サブルーチンブロック(SB)の3種類の粗粒度タスク(マクロタスク(MT))に分割するマクロデータフロー処理を行う。しかし、マクロデータフロー処理では、プログラムの形状によってはプロセッサの利用効率が上がらず、十分な粗粒度並列性が抽出できないという問題点がある。
【0023】
そこで、自動並列化コンパイラでは、従来の単階層マクロデータフロー処理手法を拡張し、MT内部に対してマクロデータフロー処理を階層的に利用する階層型マクロデータフロー処理を採用している。階層的マクロデータフロー処理では、MTの階層的な定義を行い、各階層のマクロタスクに対してマクロタスク間の並列性の解析を行う。
【0024】
<マクロフローグラフ(MFG)の生成>
自動並列化コンパイラは、まず、生成された各階層のマクロタスクに対して、マクロタスク間の制御依存性とデータ依存性を解析する。この解析結果は、マクロフローグラフ(MFG)として表される。
【0025】
<マクロタスクグラフ(MTG)の生成>
MFGは、マクロタスク間の制御依存性とデータ依存性を表すが、並列性は表していない。並列性を抽出するためには、各マクロタスクに対し、制御依存性とデータ依存性の両方を考慮した最早実行可能条件解析を行う必要がある。最早実行可能条件とは、そのMTが最も早い時点で実行可能になる条件であり、次のような実行条件から求められる。
(1)MTiがMTjにデータ依存するならば、MTjの実行が終了するまでMTiは実行できない。
(2)MTjの条件分岐先が確定すれば、MTjの実行が終了しなくても、MTjに制御依存するMTiは実行できる。
【0026】
したがって、最早実行可能条件の一般形は次のようになる。
(MTiが制御依存するMTjがMTiに分岐する)AND((MTiがデータ依存するMTk(0≦k≦|N|))が終了)OR(MTkが実行されないことが決定する))
マクロタスクの最早実行可能条件は、マクロタスクグラフ(MTG)で表される。
【0027】
1−4.マルチグレイン並列処理
自動並列化コンパイラでは、従来のループ並列化に加え、ループ間,サブルーチン間における粗粒度タスク間の並列性を利用する粗粒度タスク並列処理や、ステートメント間の並列性を利用する近細粒度並列処理を効果的に組み合わせたマルチグレイン並列処理(参考文献1(本多弘樹, 岩田雅彦, 笠原博徳、「Fortranプログラム粗粒度タスク間の並列性検出手法」、電子情報通信学会論文誌、1990年)参照)を実現している。
【0028】
<粗粒度タスク並列処理>
自動並列化コンパイラは、BB,RB,SB等のMT間の制御依存性とデータ依存性を表現したマクロフローグラフ(MFG)を生成し、さらに、MFGから最早実行可能条件解析により引きだしたMT間の並列性を、マクロタスクグラフ(MTG)として表現する(参考文献1,参考文献2(笠原,合田,吉田,岡本,本多、「Fortranマクロデータフロー処理のマクロタスク生成手法」、信学論、1992年、Vol.J75-D-I、No.8、pp.511-525)参照)。
【0029】
その後、自動並列化コンパイラは、MTG上のMTを、1つ以上のプロセッサエレメント(PE)をグルーピングしたプロセッサグループ(PG)に割り当てる。
【0030】
<中粒度並列処理>
PGに割り当てられたMTが、DOALLループ、或いはイタレーションレベルで並列処理が可能なものであれば、そのMTには、プロセッサクラスタ内のプロセッサによって中粒度並列処理がなされる。この中粒度並列処理は、DOループイタレーション間の並列性を利用する並列処理のことであり、マルチコアプロセッサにおける並列処理では最も一般的なものである。
【0031】
<近細粒度並列処理>
ステートメントレベルの近細粒度タスクに対する並列処理を、近細粒度並列処理という。これによって、依存の無いステートメントも並列実行が可能になり、実行時間が短縮される。
【0032】
1−5.マクロタスクスケジューリング
粗粒度タスク並列処理では、各階層で生成されたマクロタスクは、PGに割り当てられて実行される。どのPGにマクロタスクを割り当てるかを決定するスケジューリング手法として、下記のダイナミックスケジューリングとスタティックスケジューリングがあり、これらは、マクロタスクグラフの形状や実行時非決定性等を元に選択される。
【0033】
<ダイナミックスケジューリング>
条件分岐等の実行時不確定性が存在する場合には、ダイナミックスケジューリングによって実行時にマクロタスクをPGに割り当てる。ダイナミックスケジューリングルーチンは、マクロタスクの終了や分岐方向の決定に応じてマクロタスク実行管理テーブルを操作し、各マクロタスクの最早実行可能条件を検査する。
【0034】
マクロタスクが実行可能であれば、レディキューにマクロタスクが投入される。レディキュー内のマクロタスクは、その優先順位に従ってソートされ、レディキューの先頭のマクロタスクが、アイドル状態のプロセッサクラスタに割り当てられる。
【0035】
また、ダイナミックスケジューリングコード生成時には、一つの専用のプロセッサがスケジューリングを行う集中スケジューリング方式と、スケジューリング機能を各プロセッサに分散した分散スケジューリング方式を、使用するプロセッサ台数,システムの同期オーバーヘッドに応じて使い分けることができる。
【0036】
<スタティックスケジューリング>
一方、スタティックスケジューリングは、マクロタスクグラフがデータ依存エッジのみを持つ場合に使用され、自動並列化コンパイラが、コンパイル時にPGへのマクロタスクの割り当てを決める方式である。
【0037】
スタティックスケジューリングは、実行時スケジューリングオーバーへッドを無くし、データ転送と同期のオーバーへッドを最小化することが可能であるため、粒度の細かいタスクのスケジューリングに対しても効果的に利用できる。
【0038】
また、スタティックスケジューリングの際、タスクのコストは自動並列化コンパイラでのタスクコスト推定値を適用するが、自動並列化コンパイラのプロファイル自動フィードバック機能を用いることで、実コストでタスクスケジューリングを行うことも可能である。
【0039】
プロファイル自動フィードバック機能を用いる場合、第1フェーズとして、逐次プログラムをMTに分解し、MT毎にプロファイラ関数を挿入して逐次プログラムを生成する。このプロファイラ関数では、タスク実行コスト(clock cycle)とタスク実行回数を計測する。このプロファイラ関数が挿入された逐次プログラムを一度ターゲットとなるマシン上で実行することで、ターゲットとなるマシン上でのタスク実行コストとタスク実行回数の情報を持つファイルを出力する。
【0040】
そして、第2フェーズにて、この出力ファイルと逐次プログラムを入力として、実コストに基づきスケジューリングした並列化プログラムが生成される。
【0041】
1−6.データローカライゼーション
自動並列化コンパイラは、プログラム全域に渡るキャッシュ最適化を行うことが可能である。自動並列化コンパイラは、ループ間などの並列性を解析した後、ループ間にデータ依存があることが分かると、依存があるループ間でのキャッシュのグローバル最適化を試みる(参考文献3(特許第4177681号公報)参照)。
【0042】
具体的には、各ループでアクセスされる配列を調査し、同一の分割ループは同一の配列部分にアクセスするように調整することにより、同一の分割ループを同一プロセッサに割り当てる。これにより、同一の分割ループでは、全ての配列データがキャッシュ上で再利用されるようになる。
【0043】
このローカライズ技術は、
(1)任意のサイズのローカルメモリ或いは分散共有メモリが与えられた時に、DMA(DTU)(参考文献4(特許第4476267号公報)参照)を用いアクセスされる前に、前記プロセッサに近接したローカル或いは分散共有メモリに事前ロードし、プログラム全域で再利用する。
(2)送付先のメモリが一杯の場合には、送付先プロセッサのDTUが、メモリからの掃き出し優先順位に従ってデータを共有メモリ等へ掃き出したことを同期フラグで知らされたら、自動的に空いたメモリにデータを転送する。
(3)将来再利用されるデータであるが、暫くの間使用されず、メモリの領域を開ける必要がある場合には、CPUによるタスク実行の裏側でDTUが当該データを集中共有メモリに待避し、使用時までに再ロードする。
といったローカルメモリ管理,データ転送技術へと進化している(参考文献5(英国特許第2478874号明細書)。
【0044】
1−7.並列化プログラムの生成
自動並列化コンパイラにおける並列化プログラムの生成は、自動並列化API(参考文献7(早稲田大学、「Optimally Scheduled Advanced Multiprocessor Application Program Interface」、2008年)参照)を用い、並列化C或いは並列化Fortranのような、source-to-sourceで並列化を行うことが可能である。
【0045】
この場合には、自動並列化コンパイラは、様々なプラットフォームにおいて並列化プログラムを実行可能とするため、後述する自動並列化API標準解釈系を用いて、各プロセッサ用のC或いはFortranのディレクティブ部分をランタイムライブラリコールに変換する。その後、自動並列化コンパイラは、各プロセッサ用のコードを逐次コンパイラでコンパイルしてバイナリを生成し、このバイナリをリンクすると、対象となるマルチコアプロセッサ上で並列化プログラムを実行可能となる。
【0046】
2.組み込みシステム用の逐次プログラムの並列化手順と手法
次に、組み込みシステム用の逐次プログラムの特徴について述べ、本実施形態の自動並列化コンパイラによる並列化手法について説明する。なお、組み込みシステムとは、例えば、車載装置であっても良いし、車載装置以外の電子装置であっても良い。また、逐次プログラムは、モデルベース設計により自動生成されたもの(一例として、MathWork社のMatlab(登録商標),Simulink(登録商標)にて自動生成されたもの)であっても良い。
【0047】
自動並列化コンパイラは、条件分岐と代入文により構成され、処理が細かい逐次プログラムに対して、インライン展開やリネーミングを行い、並列性を抽出する。また、リアルタイム性を順守するために条件分岐隠蔽のためのタスク融合を行い、オーバーヘッドが低くなるようにスタティックスケジューリングを行う。さらに、実コストでスタティックスケジューリングを行うために、プロファイル自動フィードバック機能を適用しても良い。
【0048】
また、逐次プログラムにおいて、条件コンパイルスイッチ(プリプロセッサへの命令)により、仕向地や機能やハードウェアの構成等が異なる組み込みシステムの各種別に応じてコンパイルの対象となる記述を選択する条件付コンパイルが行われる場合がある。このような場合、逐次プログラムの各条件コンパイルスイッチの引数として、いずれかの種別に対応する情報(仕向地等を示す情報)を設定することで、逐次プログラムから、該種別に対応するバイナリコードが生成される。
【0049】
これに対し、本実施形態の自動並列化コンパイラは、条件付コンパイルによるコンパイル対象の選択を無視し、逐次プログラムの全ての部分を対象としてマクロタスクの分割や並列性の抽出やスタティックスケジューリング等を行い、並列化プログラムを生成する。その後、並列化プログラムから、条件付コンパイルによりコンパイルの対象外となる記述を特定し、該記述を除いた状態で、マルチコアプロセッサを動作させるためのバイナリデータを生成する。
【0050】
2−1.自動並列化コンパイラの動作環境等について
自動並列化コンパイラ1は、例えば、DVD,CD−ROM,USBメモリ,メモリカード(登録商標)等の光ディスク,磁気ディスク,半導体製メモリ等として構成された記憶媒体18に記憶された状態で、ユーザに提供される(図1参照)。無論、ネットワークを経由してユーザに提供されても良い。
【0051】
そして、自動並列化コンパイラ1がインストールされたパーソナルコンピュータ(PC)10は、自動並列化コンパイル装置として動作する。PC10は、ディスプレイ11,HDD12,CPU13,ROM14,RAM15,入力装置16,読取部17等を備える。
【0052】
ディスプレイ11は、CPU13から受けた映像信号を、ユーザに対して映像として表示する。
【0053】
入力装置16は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をCPU13に出力する。
【0054】
読取部17は、自動並列化コンパイラ1等が記憶された記憶媒体18からデータを読み取る部位である。
【0055】
RAM15は読み出し、書き込み可能な揮発性メモリであり、ROM14は読み出し専用の不揮発性メモリであり、HDD12は読み出し,書き込みが可能な不揮発性メモリである。ROM14,HDD12には、CPU13が読み出して実行するプログラム等が予め記憶されている。
【0056】
RAM15は、CPU13がROM14,HDD12に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域や、作業用のデータを一時的に保存するための記憶領域として用いられる。
【0057】
CPU13は、OSをHDD12から読み出して実行し、HDD12に記録されている各種プログラムをOS上のプロセスとして実行する。また、CPU13は、このプロセスにおいて、必要に応じて入力装置16から信号の入力を受け付け、ディスプレイ11に映像信号を出力し、RAM15,HDD12に対してデータの読み出し/書き込みの制御を行う。
【0058】
PC10には、読取部17を介して記憶媒体18から読み取られた自動並列化コンパイラ1がインストールされており、自動並列化コンパイラ1は、HDD12に保存され、OS上のプロセスとして実行されるアプリケーションの1つとなっている。
【0059】
なお、この自動並列化コンパイル装置は、車載装置等といった組み込みシステム向けの並列化プログラムの開発に用いられる。しかしながら、これに限定されることは無く、例えば情報家電等といった様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
【0060】
3.車載装置の構成について
続いて、本実施形態の自動並列化コンパイラ1により生成された並列化プログラムにより動作する車載装置20の構成について説明する(図2参照)。無論、自動並列化コンパイラ1は、車載装置20に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。
【0061】
車載装置20は、マルチコアプロセッサ21,通信部22,センサ部23,入出力ポート24等を備える。
【0062】
マルチコアプロセッサ21は、ROM21aと、RAM21bと、複数のコア21c,21d…等を有している。
【0063】
ROM21aは、自動並列化コンパイラ1により生成された並列化プログラム21a−1(バイナリデータ)が保存されている。マルチコアプロセッサ21は、並列化プログラム21a−1に従い動作し、車載装置20を統括制御する。
【0064】
RAM21bは、コア21c,21d…等によりアクセスされる部位である。通信部22は、車内LAN等を介して接続された他のECUと通信を行う部位である。
【0065】
センサ部23は、制御対象等の状態を検出するための各種センサから構成される部位である。入出力ポート24は、制御対象を制御するための各種信号の送受信を行う部位である。
【0066】
[具体例について]
続いて、本実施形態の自動並列化コンパイラ1により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、処理A等といった記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。
【0067】
(第1実施形態)
図3に示されるように、第1実施形態に係る並列化コンパイル方法では、ステップS101においてデータ依存関係無効化情報の有無を判断する(無効化手順)。データ依存関係無効化情報が有ればステップS103の処理に進み、データ依存関係無効化情報が無ければステップS102の処理に進む。
【0068】
ステップS102では、従来と同等の並列化処理を実行し、分割プログラムを生成する。この分割プログラムの生成における具体例の一つを図4に示す。図4に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理Dを含んでおり、処理Aと処理Bとの間にデータ依存関係が有るものとする。処理Aの処理時間は100、処理Bの処理時間は20、処理Cの処理時間は30、処理Dの処理時間は35とする(これら処理時間の値は相対値である)。
【0069】
処理Aと処理Bとの依存関係があるので、処理Aと処理Bがコア0に割り当てられる。この前提で全体の処理時間を最短なものとするように、処理Cと処理Dがコア1に割り当てられる。この例の場合、コア0の処理時間は120となり、コア1の処理時間は65となる。
【0070】
ステップS103では、データ依存関係無効化情報を取得する。本例の場合、処理Aと処理Bとの間ではデータ依存関係を無効化しても構わないというデータ依存関係無効化情報があるものとする。ステップS103に続くステップS104では、依存関係無効化部分を付与し、並列化処理を実行し、分割プログラムを生成する(生成手順)。
【0071】
この分割プログラムの生成における具体例の一つを図5に示す。図5に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理Dを含んでおり、処理Aと処理Bとの間にデータ依存関係が有るものとする。処理Aの処理時間は100、処理Bの処理時間は20、処理Cの処理時間は30、処理Dの処理時間は35とする(これら処理時間の値は相対値である)。
【0072】
まず、処理Aと処理Bとの依存関係が無効化される。処理Aと処理Bとの依存関係が無くなったので、全体の処理時間を最短なものとなるように並列化される。本例の場合は、コア0に処理Aが割り当てられ、コア1に処理B、処理C、処理Dが割り当てられる。この例の場合、コア0の処理時間は100となり、コア1の処理時間は85となる。ステップS102の処理で説明した例と比較すると、全体の処理時間が改善されている。
【0073】
(第2実施形態)
図6に示されるように、第2実施形態に係る並列化コンパイル方法では、ステップS201においてデータ依存関係無効化情報の有無を判断する(無効化手順)。データ依存関係無効化情報が有ればステップS203の処理に進み、データ依存関係無効化情報が無ければステップS202の処理に進む。
【0074】
ステップS202では、従来と同等の並列化処理を実行し、分割プログラムを生成する。この分割プログラムの生成における具体例の一つを図8に示す。図8に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理D、処理Eを含んでいる。処理Aから処理Eは、図7に示されるようなデータ依存関係が有る。図7に示されるように、処理Bと処理Dとの間、処理Cと処理D及び処理Eとの間、処理Dと処理Eとの間にそれぞれデータ依存関係が有るものとする。処理Aの処理時間は15、処理Bの処理時間は10、処理Cの処理時間は50、処理Dの処理時間は30、処理Eの処理時間は20とする(これら処理時間の値は相対値である)。
【0075】
これらデータ依存関係を考慮し、全体の処理時間を最短なものとするように、処理A、処理B、処理D、処理Eがコア0に割り当てられ、処理Cがコア1に割り当てられる。処理Bと処理Dとの間には、処理Cと処理Dとのデータ依存関係を維持するように待ち時間が設けられる。この例の場合、コア0の処理時間は100となり、コア1の処理時間は50となる。
【0076】
ステップS203では、データ依存関係無効化情報を取得する。本例の場合、処理Cと処理Dとの間ではデータ依存関係を無効化しても構わないというデータ依存関係無効化情報があるものとする。
【0077】
ステップS203に続くステップS204では、参照データ周期タイミング(処理同期タイミング)の依存関係有無を判断する(タイミング判断手順)。参照データ周期タイミングの依存関係が有ればステップS206の処理に進み、参照データ周期タイミングの依存関係が無ければステップS205の処理に進む。
【0078】
このように参照データ周期タイミングを確認するのは、各処理の処理時間に基づいて分割プログラムを生成しても、処理時間は一定値ではなく平均値や最大値であるため、実際の処理時間が増減する場合があるためである。このように処理時間の増減が発生すると、データ依存関係の無効化が許可されても、処理の前後関係は維持したい処理同士において不都合が発生するので、その前後関係を維持することが別途必要となる。ステップS204ではこの点を確認している。
【0079】
ステップS205では、依存関係無効化部分を付与し、並列化処理を実行し、分割プログラムを生成する(生成手順)。
【0080】
この分割プログラムの生成における具体例の一つを図9に示す。図9に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理D、処理Eを含んでおり、図7に示されたようなデータ依存関係が有るものとする。
【0081】
まず、図7に示されたデータ依存関係が無効化される。データ依存関係が無くなったので、全体の処理時間を最短なものとなるように並列化される。本例の場合は、コア0に処理B、処理D、処理Aが割り当てられ、コア1に処理C、処理Eが割り当てられる。この例の場合、コア0の処理時間は55となり、コア1の処理時間は70となる。
【0082】
ステップS206では、参照データ周期タイミング同期設定が取得される。本例では、処理Cの後に処理Dを実行することが、処理周期毎に入れ替わらないことが条件となっている。
【0083】
ステップS206に続くステップS207では、同期条件付きの並列化処理が実行され、分割プログラムが生成される。図10に、同期条件付きの並列化処理の一例を示す。図10に示される例は、開始同期の例であって、コア1に処理B、処理D、処理Aが割り当てられ、コア0に処理C、処理Eが割り当てられている。処理Dを処理Cの処理順が入れ替わらないようにするため、処理Cの開始時期を調整するための待ち時間が設けられている。この例では、コア0の処理時間が55となり、コア1の処理時間が80となる。
【0084】
図11に、同期条件付きの並列化処理の別例を示す。図11に示される例は、終了同期の例であって、コア1に処理B、処理D、処理Aが割り当てられ、コア0に処理C、処理Eが割り当てられている。処理Dを処理Cの処理順が入れ替わらないようにするため、処理Dの終了時期を調整するための待ち時間が設けられている。この例では、コア0の処理時間が65となり、コア1の処理時間が70となる。
【0085】
図10に示した開始同期を用いるか、図11に示した終了同期を用いるかは、優先したい別の条件によって定まる。例えば、全体の処理時間を短くしたい条件であれば、図11に示した終了同期を用い、処理時間の短い方をより重視するのであれば図10に示した開始同期を用いる。優先したい別の条件としては、この他に各コアの処理量や、メモリの容量等が用いられる。
【0086】
(第3実施形態)
図12に示されるように、第3実施形態に係る並列化コンパイル方法では、ステップS301においてデータ依存関係無効化情報の有無を判断する(無効化手順)。データ依存関係無効化情報が有ればステップS303の処理に進み、データ依存関係無効化情報が無ければステップS302の処理に進む。
【0087】
ステップS302では、従来と同等の並列化処理を実行し、分割プログラムを生成する。この分割プログラムの生成における具体例の一つを図14に示す。図14に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理D、処理Eを含んでいる。処理Aから処理Eは、図13に示されるようなデータ依存関係が有る。図13に示されるように、処理Aと処理Cとの間、処理Bと処理Cとの間、処理Cと処理Dとの間、処理Dと処理Eとの間にそれぞれデータ依存関係が有るものとする。処理Aの処理時間は15、処理Bの処理時間は10、処理Cの処理時間は30、処理Dの処理時間は50、処理Eの処理時間は20とする(これら処理時間の値は相対値である)。
【0088】
これらデータ依存関係を考慮し、全体の処理時間を最短なものとするように、処理A、処理C、処理D、処理Eがコア0に割り当てられ、処理Bがコア1に割り当てられる。この例の場合、コア0の処理時間は115となり、コア1の処理時間は10となる。
【0089】
ステップS303では、データ依存関係無効化情報を取得する。本例の場合、処理Cと処理Dとの間ではデータ依存関係を無効化しても構わないというデータ依存関係無効化情報があるものとする。
【0090】
ステップS303に続くステップS304では、参照データ周期タイミング(処理同期タイミング)の依存関係有無を判断する(タイミング判断手順)。参照データ周期タイミングの依存関係が有ればステップS306の処理に進み、参照データ周期タイミングの依存関係が無ければステップS305の処理に進む。
【0091】
このように参照データ周期タイミングを確認するのは、各処理の処理時間に基づいて分割プログラムを生成しても、処理時間は一定値ではなく平均値や最大値であるため、実際の処理時間が増減する場合があるためである。このように処理時間の増減が発生すると、データ依存関係の無効化が許可されても、処理の前後関係は維持したい処理同士において不都合が発生するので、その前後関係を維持することが別途必要となる。ステップS304ではこの点を確認している。
【0092】
ステップS305では、依存関係無効化部分を付与し、並列化処理を実行し、分割プログラムを生成する(生成手順)。
【0093】
この分割プログラムの生成における具体例の一つを図15に示す。図15に示されるように、逐次プログラムであるCソフトが処理A、処理B、処理C、処理D、処理Eを含んでおり、図13に示されたようなデータ依存関係が有るものとする。
【0094】
まず、図13に示されたデータ依存関係が無効化される。データ依存関係が無くなったので、全体の処理時間を最短なものとなるように並列化される。本例の場合は、コア0に処理A、処理B、処理Cが割り当てられ、コア1に処理D、処理Eが割り当てられる。この例の場合、コア0の処理時間は55となり、コア1の処理時間は70となる。
【0095】
ステップS306では、擬似データ依存設定が取得される。本例では、処理Cと処理Dとのデータ依存関係が逆になることが条件となっている。具体的には、処理Cが完了してから処理Dが実行されるデータ依存関係にあるところ、その関係が逆転し、処理Dが完了してから処理Cが実行されるデータ依存関係になることが条件となっている。
【0096】
ステップS306に続くステップS307では、擬似データ依存条件付きの並列化処理が実行され、分割プログラムが生成される。図16に、擬似データ依存条件付きの並列化処理の一例を示す。図16に示される例は、コア0に処理A、処理B、処理Cが割り当てられ、コア1に処理D、処理Eが割り当てられている。処理Dに対して処理Cの処理順が入れ替わらないようにするため、擬似的なデータ依存関係が付与されている。この例では、コア0の処理時間が80となり、コア1の処理時間が70となる。
【0097】
本実施形態では、無効化情報有りとされた2以上のマクロタスクに含まれる第1マクロタスクが、別のマクロタスクとデータ依存関係を有していたものの、2以上のマクロタスクに含まれる第2マクロタスクとのデータ依存関係を有することにより別のマクロタスクとのデータ依存関係が不要になったためそのデータ依存関係が解消されているか否かを判断し、分割プログラムのコンパイルにあたって、別のマクロタスクと第1マクロタスクとのデータ依存関係を回復させることができる。
【0098】
この具体的な例を図17を参照しながら説明する。図17の(A)では、処理Xと処理Cとの間、処理Aと処理Cとの間、処理Bと処理Cとの間、処理Cと処理Dとの間、処理Dと処理Eとの間にそれぞれデータ依存関係があるものとしている。例えば、処理Xが初期値cを与える処理であり、処理Cは演算a+bによって値cを与える処理であり、処理Dが値cによって値dを得る処理である場合、処理Xと処理Dとの間のデータ依存関係は冗長であるので解消される。
【0099】
この状態で、処理Cと処理Dとの間のデータ依存性が解消されると、処理Dにおいて処理Xの結果が必要になるので、解消していた処理Xと処理Dとの間のデータ依存関係を回復させる。
【0100】
更に別例について図18を参照しながら説明する。図18の(A)では、処理A及び処理Bと処理Cとの間、処理Cと処理Dとの間、処理Dと処理Eとの間にそれぞれデータ依存関係がある。処理Aが値aを与える処理であり、処理Bが値bを与える処理であり、処理Cがa+bの演算によって値cを与える処理であり、処理Dがc+a+bの演算に寄って値dを与える処理であるものとする。
【0101】
処理Cと処理Dとの間のデータ依存関係が解消されると、処理Dにおいて処理A及び処理Bの処理結果が必要になるので、図18の(B)に示されるように、処理A及び処理Bと処理Dとの間のデータ依存関係を構築する。
【0102】
更に別例について図19を参照しながら説明する。図19の(A)では、処理A及び処理Bと処理Cとの間、処理Cと処理Dとの間、処理Dと処理Eとの間にそれぞれデータ依存関係がある。処理Cと処理Dとの間のデータ依存関係が解消されると図19の(B)の状態になる。ここで、処理周期毎の順序変化を解消するため、処理Dから処理Cへの擬似データ依存関係を構築する(図19の(C)参照)。
【符号の説明】
【0103】
1:自動並列化コンパイラ
20:車載装置
21:マルチコアプロセッサ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19