ここではMATLAB/Simulink向けのマルチコアプロセッサのための自動並列化の
関連研究について述べる.従来までに,方程式レベル並列化,サブシステムレベ ル並列化,ブロックレベル並列化が提案されている.各関連研究について述べた 後に,本論文の手法の差異について述べる.
2.3.1 方程式レベル並列化
方程式レベル並列化ではStrand [CYK10]を使ったIntegratorブロック,Derivative ブロック,Unit Delayブロック等のMealyブロックに着目して並列化コードを生成 する手法を提案している.この手法ではMealyブロックの下記の規則に着目して いる.
ouputnew = f(inputprev,statecurr) (2.1) statenew=g(inputcurr,statecurr) (2.2)
図2.4: strandにより方程式レベル並列化[CYK10]
Mealyブロックの次の出力は前の入力と現在の状態により,次の状態は現在の入力
と現在の状態により算出される.そのため,図2.4.(a)に示される逐次に結線され たモデルから(b)のようにMealyブロック間でデータ依存を切ることでMealyブ ロック間で並列化が実現している.しかしながら,Strandによる性能向上はこの
Mealyブロックの使われ方に依存し,方程式レベル並列性に限られる.従来から方
程式レベル並列性とタスク並列性を使った並列化が提案されているように,方程 式レベル並列化のみではきめ細かな並列処理に向いていない[笠原87].また,一 般的に離散系アプリケーションではMealyブロックを使用しないため,方程式レ ベル並列化ではリアルタイム制御等の離散系アプリケーションが動作する組み込 みプロセッサで動作するソフトウェアを対象としていない.
2.3.2 サブシステムレベル並列化
サブシステムレベル並列化ではSimulinkモデルの中のサブシステム(関数)間の並 列性を開発者の指示もしくは自動で抽出する手法を提案がされている[MSKKH11,
MKH11, MSKKH12].この手法では並列化すべき階層をサブシステム化し,モデ
ルの状態や結線情報からデータ依存グラフを作り,並列化コードを生成する.そ
のため,モデルの手動並列化と同様に,開発者によるモデルのサブシステムへの 分割を要する.サブシステムレベル並列化では並列化の粒度がサブシステムに制 約され,並列化による性能向上はサブシステムの使われ方に左右される.
2.3.3 ブロックレベル並列化
ブロックレベル並列化ではSimulinkモデルファイルを入力として,Simulinkブ ロック間の並列性を抽出し,並列化コードを生成する手法を提案している[久村11, TYN+12, TFL15].この手法ではSimulinkモデル内の結線をデータ依存に見立て たCSP (Communicating Sequential Processes)理論 [Hoa78]により,並列性をタス クグラフとして抽出する.その後,この並列性を自動生成コードに対応させるこ とで並列化コードの生成を実現している.そのため,サブシステムレベル並列化
[MSKKH11, MKH11, MSKKH12]と比較して,開発者による分割が必要なく自動
並列化が実現できる.しかしながら,モデル上に表現される抽象的な情報より,並 列化行うため,ブロック内の並列性の利用やターゲットプロセッサ向けの最適化 が困難である.また,入力がSimulinkモデルファイルであるため,使用するモデ ルベース開発ツールの表現に強く依存するという特徴がある.
2.3.4 関連研究との差異
関連研究では図2.5.(a)に示すように,モデル中に表現される方程式やサブシス テム,ブロックの結線情報から並列性解析を行う.その後,その並列性解析情報 と自動生成Cコードの対応関係を取り,並列化コードを生成する.そのため,モ デルと生成コードの並列性が1対1に対応すると仮定している.
一方,本研究では,図2.5.(b)に示すように,ツールにより自動生成されたCコー ドから並列性解析・並列処理最適化を行い,並列化コード生成を行う.並列化には,
従来から提案されているOSCAR自動並列化コンパイラ[HHA+91]を使う.この
OSCAR自動並列化コンパイラではソースコードを入力として,コード中に現れる
様々な並列性を抽出し,コードレベルで並列処理最適化を行った並列化コードを生成 する.具体的には,関数ポインタや複雑なポインタの扱いを制限したParallelizable C [間瀬09]から粗粒度タスク並列性,ループ並列性,細近粒度並列性を複合した マルチグレイン並列化を行う[HHA+91, KHM+92].また,本論文で対象とする自 動生成されたCコードはMISRA-C [MIS]に適合し,ポインタの扱いや動的処理に 対する制約が設けられている.さらにはツールによりシステマティックにコード生 成されるため,OSCAR自動並列化コンパイラとの親和性が高く,従来のOSCAR 自動並列化コンパイラを使った研究とは異なり,Parallelizable Cへの書き換えが不 要である.
これらを踏まえて,本研究では,関連研究と異なり,コードレベルで並列性解 析・最適化を行うことで,設計モデルとは依存がなく,自動生成されたコードレ ベルで柔軟に最適化または最大限の並列性の抽出が可能である.また,よりCPU 側に近い記述であるコードから最適化を行うため,任意のハードウェア向けに最 適化することが可能である.次節で提案するモデルベース開発ソフトウェアの並 列化フレームワークについて述べる.