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

2.4 モデルベース開発ソフトウェアの自動並列化フレー ムワークムワーク

2.4.1 プロファイルフェーズ

本フレームワークでは入力となるソフトウェアと対象のマルチコアプロセッサ 向けに最適化を行うために,プロファイルフェーズで自動生成コードのプロファ イリングを行う.プロファイルフェーズでは自動生成されたCコードを入力とし,

OSCAR自動並列化コンパイラがプロファイル用Cコードに変換する.このプロファ

イル用CコードをMATLAB/Simulink環境でSoftware-in-the-loop Simulation (SILS) もしくはターゲットの組み込みプロセッサ環境でProcessor-in-the-loop Simulation

(PILS)で実行することにより,プロファイルデータが生成される.検証時にプロ

ファイル用Cコードを用いることで,検証時に使われる実用的な入力からプロファ イルデータを作成可能となる.また,PILSでプロファイルを行う場合,ターゲッ トの組み込みプロセッサ向けの最適化が可能となる.

このプロファイルデータに対して,スクリプトを使用し,プロファイルデータ の集計・表示を行う.このスクリプトで集計されたプロファイルデータを並列実 行フェーズに活用する.

また,OSCAR自動並列化コンパイラによる解析結果に並列性がない場合は,こ

の並列性解析結果とこのプロファイル情報を可視的に表すことによって,モデル の改善に活用することができる.

2.4.2 並列実行フェーズ

自動生成されたCコードと2.4.1節前述のプロファイルデータを再度入力とし,

第3章以降で後述する種々の並列処理最適化を行った後に,並列化Cコードを自動 生成する.並列化Cコードの並列化指示文にはOSCAR API [KGAH+13]を使い,

OSCAR API標準解釈系を用いてターゲットプロセッサのランタイムライブラリに

変換し,任意のマルチコアプロセッサ上で動作可能とする[佐藤10].

図2.6: モデルベース開発ソフトウェアの自動並列化フレームワーク

また,用途に合わせて,MATLAB/Simulink上のAPIとなるMEX関数[Matd]を 自動生成して,SILSやPILSの環境上で並列処理の動作を実現する.

2.5 まとめ

本章ではMATLAB/Simulinkによるモデルベース開発の概要とMATLAB/Simulink におけるマルチコアプロセッサの利用方法について述べ,提案するモデルベース 開発ソフトウェアの並列化フレームワークを提案した.

現在の自動車分野や航空機分野を代表とした組み込みソフトウェアの開発では

MATLAB/Simulinkを使ったモデルベース開発が普及し,開発効率の改善や生産性

の向上に一定の効果が得られている.その中でも,このMATLAB/Simulinkでは

Embedded Coderを使った自動Cコード生成をサポートしており,開発者による設

計書ベースのコーディングを不要としている.

一方,現在の自動コード生成ツールでは,汎用的な組み込みハードウェアをター

ゲットとしていて,組み込み分野で普及しているマルチコアプロセッサを自動で 有効利用できるまでに至っていない.マルチコアプロセッサを支援する商用ツー ルとしては,Parallel Computing ToolboxやRTI-MP等が挙げられるが,開発者に よるモデルの分割を要する.そのため,現時点でモデルベース開発ソフトウェア をきめ細かく自動並列化をすることはできない.

関連研究では,抽象的なSimulinkモデル情報から自動で方程式レベル,サブシ ステムレベル,ブロックレベル等の並列化を行う手法が提案されているものの,並 列化の範囲が制約される等きめ細かな並列化をすることや任意のハードウェア向 けに最適化するような手法は提案されていない.

そこで,本論文ではこれらの手法とは異なり,OSCAR自動並列化コンパイラを 使った自動生成されたコードレベルから全域に渡って並列化を行うフレームワー クを提案した.自動生成されたコードレベルで並列性を抽出するため,任意のモ デルベース開発ツールに対応することも可能であり,さらには柔軟にターゲット ハードウェア向けに最適化することが可能である.

また,提案したモデルベース開発ソフトウェアの自動並列化フレームワークで はプロファイルフェーズと並列化フェーズに分かれる.プロファイルフェーズで

は,OSCAR自動並列化コンパイラを使って,プロファイリング用のCコードを生

成する.そのプロファイル用のCコードをSILS環境もしくはPILS環境で実行後,

スクリプトを使いプロファイル情報を統計する.その後,このプロファイル情報 を使い,設計モデルの改善もしくは並列化の際の最適化に役立てる.

並列化フェーズではこのプロファイル情報と自動生成Cコードを使い,種々の 最適化を行い,並列化Cコードを生成する.この並列化CコードにはOSCAR API を含み,任意のマルチコアプロセッサ環境で並列実行可能とする.

また,用途に合わせてMEX関数を自動生成し,MATLAB/SimulinkのSILS環 境で並列実行を実現する.これにより,モデルベース開発の中でシームレスにマ

ルチコアプロセッサを利用することが可能になると考えられる.

第 3

モデルベース開発ソフトウェアの粗粒 度タスク並列処理

本章は論文「MATLAB/Simulinkで設計されたエンジン制御Cコードのマルチコア用自動並列 化」に基づく.

3.1 まえがき

モデルベース開発は様々なリアルタイム制御のような組み込みソフトウェアで 用いられて,現在までにソフトウェアの開発期間の削減や開発効率の改善が報告 されている[KLBS04, HHZ+14, WHKS14, Car14, KLBS14,下浦].モデルベース開 発によりソフトウェアの生産性が改善されている一方で,現在ではこのような組 み込みソフトウェアは複雑化・大規模化が顕著となっていて,リアルタイム性の 確保が難しくなっている.そのため,リアルタイム性を確保するために,今後の リアルタイム制御系ソフトウェアでは高速化が必要不可欠となっている.

このような問題に対して,現在では組み込みプロセッサにおける動作周波数向 上の限界の面から,マルチコアプロセッサを使ったリアルタイム制御系ソフトウェ アの高速化が期待されている.例えば,リアルタイム制御で代表的なエンジン制 御でマルチコアプロセッサの活用は未だ報告されていないものの,近年ではこの ようなエンジン制御ソフトウェアに対して,マルチコアプロセッサを利用するた めの研究がされており[FWJR15, SJK15, MGW15],2015年から2016年にはマル チコアプロセッサを使ったElectronic Control Unit (ECU)の開発が始まると言われ ている[MGW15].

現在までに,このようなエンジン制御のようなリアルタイム制御向けのマル チコアプロセッサの有効性や並列タスクの割り当て方式等が提案されてきている [FWJR15, SJK15, MGW15].また,parMERASAではこのようなリアルタイム制御 をマルチコアプロセッサ上で並列実行する試みがなされており[UBG+13],Parallel

Design Patterns (PDPs)を基にしたリアルタイム制御系ソフトウェアの並列化を提

案している[JGU13, JGU14].

上記の従来研究では,並列タスクの割り当て方式や並列化ソフトウェアの開発 方法を提案しているものの,自動でマルチコアプロセッサを利用するための並列タ スクの自動抽出や自動割り当てに関しては一切提案されていない.そのため,今

後複雑化が顕著なエンジン制御のようなリアルタイム制御をマルチコアプロセッ サでリアルタイム実行するには自動並列処理技術が必要不可欠である.

そこで,本章ではモデルベース開発されたリアルタイム制御系ソフトウェアを マルチコアプロセッサ向けに自動並列化を行い,高速化を行う.このようなリア ルタイム制御には商用のIntelコンパイラ[Int]やPGIコンパイラ[PGI]等で自動並 列化が可能なループ構造を持たないため,代入文や条件分岐,関数間に存在する 粗粒度タスク間の並列性に着目し,モデルベース開発されたリアルタイム制御系 ソフトウェアのマルチコアプロセッサ上での粗粒度タスク並列処理手法の提案を 行う.

特に,少ない粗粒度並列性の中から最大限の性能向上を得るために,モデルベー ス開発ソフトウェアの粗粒度タスク並列性の向上手法,オーバーヘッドを最小化 した粗粒度タスク並列処理手法及びリアルタイム制御向けローカルメモリ活用手 法について提案する.さらには,リアルタイム制御系ソフトウェアの代表例とし てモデルベース開発されたエンジン制御ソフトウェアに対して,提案手法を使っ た性能評価を行い,その結果について述べる.

本章の構成は以下の通りである.まず,第3.2節ではMATLAB/Simulinkでモデ ルベース開発されたリアルタイム制御系ソフトウェアの特徴について述べ,第3.3 節では従来から提案されているOSCAR自動並列化コンパイラを使ったモデルベー ス開発ソフトウェアの粗粒度タスク並列処理の概要について述べる.次に,第3.4 節ではリアルタイム制御系ソフトウェアの少ない粗粒度タスク並列性から最大限 の並列性を抽出するための並列性向上手法について述べ,第3.5節ではリアルタイ ム制御系ソフトウェアを効果的に粗粒度タスク並列処理するためのオーバーヘッド 削減手法について述べる.さらには第3.6節ではプロファイリングを使った精度改 善手法,第3.7節ではリアルタイム制御系プロセッサ特有のローカルメモリを有効 利用する手法について述べる.そして,第3.8節では提案手法を使ったモデルベー