• 検索結果がありません。

モデルベース開発ソフトウェアのための粗粒度タス ク並列性向上手法ク並列性向上手法

これまでに,モデルベース開発ソフトウェア特徴と従来から開発されている粗 粒度タスク並列処理の概念について述べた.本節ではモデルベース開発ソフトウェ

アに対して,より効果的な粗粒度タスク並列処理を行うために,モデルベース開 発ソフトウェアのための粗粒度タスク並列性向上手法について述べる.

3.4.1 基本ブロック分割

図3.1に示すように,通常ベーシックブロックは複数の算術演算もしくは条件分 岐を持つ.本章で対象とするモデルベース開発されたリアルタイム制御系ソフト ウェアでは十分な並列性がないため,最大限に並列性を抽出できるように,基本 ブロックを分割する[合田91].また,第3.4.2節で後述する変数リネーミング,第

3.5.1節,第3.5.2節で後述するマクロタスク融合では粗粒度タスク単位で最適化を

行うため,前処理として基本ブロック分割を行う. 基本ブロック分割が有効な例 を図3.7に示す.図3.7.(a)に基本ブロック分割前のマクロタスクグラフ,図3.7.(b) に基本ブロック分割後のマクロタスクグラフを示す.図3.7.(a)ではbb2において,

先行タスクであるsb1の後処理(c = b * b)と後続タスクであるbb4とbb4の前処理 (if (d>N) goto L1)が行われており,このままではsb1,bb2,bb3,bb4,sb5が逐 次実行されなければならない.このとき,図3.7.(b)に示すようにbb2とbb3に分 割することにより,sb1,bb2とbb3,bb4,bb5,sb6の間で粗粒度タスク並列性を 抽出することができる.

本論文では基本ブロック内の算術演算もしくは条件分岐前後のステートメント 間で依存関係のない箇所で,基本ブロック分割を行う.図3.5のマクロタスクグラ フに対して,基本ブロック分割したマクロタスクグラフを図3.8に示す.例えば,

図3.5のbb1が図3.8ではbb1とbb2に分割されている.また,図3.5のbb12が図 3.8でbb16とbb17に分割され,横並びの粗粒度タスクが増え,粗粒度タスク並列 性が向上している.このようにして,ステートメント間で依存関係がない範囲で 基本ブロック分割を行い,粗粒度タスク並列度を向上させる.

図3.7: 基本ブロック分割が有効なマクロタスクグラフ

3.4.2 変数リネーミング

Embedded Coderで自動生成されるCコードには使い回しのある変数が存在する

場合がある.例えば,図3.2では,ローカル変数のrtb Product2が13行目で定義さ れ,17,19行目で使用・定義される.次に,rtb Product2が25行目で使用される.

そして,rtb Product2が30行目で再定義され,32行目で使用・定義もしくは40行 目で定義される.その後,rtb Product2が45行目で使用される.すなわち,30行

目以降でrtb Product2が使い回しされていることがわかる.変数の使い回しがある

と,プログラム上データ依存があると解析され,並列性が阻害される可能性があ る.そのため,使い回しのある変数を変数リネーミングすることでデータ依存関 係を解消する.この変数リネーミングではリネーミング対象を必要最低限に抑え るために,粗粒度タスク間の生死解析情報を利用する.すなわち,ここでは逆依 存関係もしくは出力依存関係にある変数を粗粒度タスクの単位でリネーミングを 行う.

図3.8: 基本ブロック分割適用後のマクロタスクグラフ

ローカル変数のrtb Product2の使い回しの発生しているマクロタスク(bb9から

bb13)の生死解析の例を図3.9示す.上図では対象となるマクロタスクグラフの一部

と該当するCコードを,下図では粗粒度タスク毎の生死解析情報を示す.また,上 図の緑のデータ依存エッジが変数の使い回しによる依存を示し,下図のINはマクロ タスクの開始時に生きている変数の集合,OUTはマクロタスクの終了時に生きてい る変数の集合を示す.ここでは,簡略化のため,生死解析ではマクロタスク中に現れ る変数以外は省略するものとする.例えば,bb9では,rtb Product2,rtU.es o.speed, rtU.es o.map,rtb enable integrationが含まれるが,OUTではrtb enable integration

図3.9: 生死解析による変数リネーミング

のみが含まれる.rtb Product2によるデータ依存がある一方で,OUTにはrtb Product2 が含まれていない.また,bb11のOUTでは再びrtb Product2が含まれる.それ以 降のsb12からbb14までのすべてのINとOUTにrtb Product2が含まれていること がわかる.すなわち,bb9のrtb Product2とbb11以降のrtb Product2は意味的に異 なる変数とわかる.そこで,bb11以降のように新たにOUTされるrtb Product2の ような変数を別名にリネーミングする.

図3.8のマクロタスクグラフに変数リネーミングを適用したマクロタスクグラ フを図3.10に示す.図3.8でbb9がbb11とbb14にデータ依存関係を持っていた のに対して,図3.10のbb9ではリネーミングにより依存関係が解消された.この ようにして,粗粒度タスク間の生死解析情報に基づき変数のリネーミングを行い,

粗粒度タスク並列性を向上する.

図3.10: 変数リネーミング適用後のマクロタスクグラフ

3.4.3 インライン展開

モデルベース開発ソフトウェアではS-Functionによるユーザー定義関数やサブ システム指定による関数等により関数呼び出しが存在する場合がある.しかしな がら,このような関数化により粗粒度タスク並列性が十分に抽出できない可能性 が存在する.

図3.11に階層的なマクロタスクグラフとインライン展開を適用したマクロタス クグラフの例を示す.図3.11.(a)では関数呼び出しを持ち,階層的な表現をしたマ クロタスクグラフである.最外側階層のマクロタスクグラフはMTG0である.そ のため,このマクロタスクグラフではsb1,sb2,sb3,bb4を逐次的に実行しなけ ればならない.一方,sb2の呼び出し先のMTG2内には粗粒度タスク並列性が存 在し,loop1(MTG2)がsb1(MTG0)にのみ依存する.そのため,このsb2(MTG0)を インライン展開することにより,図3.11.(b)のように粗粒度タスク並列性をもった

図3.11: 階層的なマクロタスクグラフとインライン展開を適用したマクロタスクグ ラフ

マクロタスクグラフを得ることができる.

そこで,インライン展開を行い,関数呼び出し内の粗粒度タスク並列性を上位 階層の粗粒度タスク並列性に併せ,粗粒度並列性を向上させる.従来ではインラ イン展開によりマルチグレイン並列性を抽出することを目的として,幅広くイン ライン展開する手法を提案している[白子04].一方,本研究ではクリティカルパ ス長の削減を行うために,クリティカルパス上にある関数に着目して,階層的に インライン展開を適用する.このようにして,インライン展開を行い,上位階層 に関数内の粗粒度タスク並列性を併せることで粗粒度タスク並列性を向上する.

3.5 モデルベース開発ソフトウェアのための粗粒度タス