(58)【調査した分野】(Int.Cl.,DB名)
前記複数のコアの内、前記マクロタスクを追加した前記分割プログラムの処理長さが短くなる方の前記コアに前記マクロタスクを割り当ててコンパイルすることを特徴とする請求項2に記載の並列化コンパイル方法。
前記複数のコアの内、前記マクロタスクを追加した前記分割プログラムの処理長さが短くなる方の前記コアに前記マクロタスクを割り当ててコンパイルすることを特徴とする請求項7に記載の並列化コンパイラ。
【発明を実施するための形態】
【0015】
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【0016】
1.自動並列化コンパイラについて
本実施形態の自動並列化コンパイラは、組込みシステム向けのシングルコアプロセッサシステム用のソースプログラム(逐次プログラム)から、組込みシステム向けのマルチコアプロセッサシステム用の並列化プログラム(分割プログラム)を生成する機能を有している。
【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)で表される。
【0028】
自動並列化コンパイラでは、従来のループ並列化に加え、ループ間,サブルーチン間における粗粒度タスク間の並列性を利用する粗粒度タスク並列処理や、ステートメント間の並列性を利用する近細粒度並列処理を効果的に組み合わせたマルチグレイン並列処理(参考文献1(本多弘樹, 岩田雅彦, 笠原博徳、「Fortranプログラム粗粒度タスク間の並列性検出手法」、電子情報通信学会論文誌、1990年)参照)を実現している。
【0029】
<粗粒度タスク並列処理>
自動並列化コンパイラは、BB,RB,SB等のMT間の制御依存性とデータ依存性を表現したマクロフローグラフ(MFG)を生成し、さらに、MFGから最早実行可能条件解析により引きだしたMT間の並列性を、マクロタスクグラフ(MTG)として表現する(参考文献1,参考文献2(笠原,合田,吉田,岡本,本多、「Fortranマクロデータフロー処理のマクロタスク生成手法」、信学論、1992年、Vol.J75-D-I、No.8、pp.511-525)参照)。
【0030】
その後、自動並列化コンパイラは、MTG上のMTを、1つ以上のプロセッサエレメント(PE)をグルーピングしたプロセッサグループ(PG)に割り当てる。
【0031】
<中粒度並列処理>
PGに割り当てられたMTが、DOALLループ、或いはイタレーションレベルで並列処理が可能なものであれば、そのMTには、プロセッサクラスタ内のプロセッサによって中粒度並列処理がなされる。この中粒度並列処理は、DOループイタレーション間の並列性を利用する並列処理のことであり、マルチコアプロセッサにおける並列処理では最も一般的なものである。
【0032】
<近細粒度並列処理>
ステートメントレベルの近細粒度タスクに対する並列処理を、近細粒度並列処理という。これによって、依存の無いステートメントも並列実行が可能になり、実行時間が短縮される。
【0033】
1−5.マクロタスクスケジューリング
粗粒度タスク並列処理では、各階層で生成されたマクロタスクは、PGに割り当てられて実行される。どのPGにマクロタスクを割り当てるかを決定するスケジューリング手法として、下記のダイナミックスケジューリングとスタティックスケジューリングがあり、これらは、マクロタスクグラフの形状や実行時非決定性等を元に選択される。
【0034】
<ダイナミックスケジューリング>
条件分岐等の実行時不確定性が存在する場合には、ダイナミックスケジューリングによって実行時にマクロタスクをPGに割り当てる。ダイナミックスケジューリングルーチンは、マクロタスクの終了や分岐方向の決定に応じてマクロタスク実行管理テーブルを操作し、各マクロタスクの最早実行可能条件を検査する。
【0035】
マクロタスクが実行可能であれば、レディキューにマクロタスクが投入される。レディキュー内のマクロタスクは、その優先順位に従ってソートされ、レディキューの先頭のマクロタスクが、アイドル状態のプロセッサクラスタに割り当てられる。
【0036】
また、ダイナミックスケジューリングコード生成時には、一つの専用のプロセッサがスケジューリングを行う集中スケジューリング方式と、スケジューリング機能を各プロセッサに分散した分散スケジューリング方式を、使用するプロセッサ台数,システムの同期オーバーヘッドに応じて使い分けることができる。
【0037】
<スタティックスケジューリング>
一方、スタティックスケジューリングは、マクロタスクグラフがデータ依存エッジのみを持つ場合に使用され、自動並列化コンパイラが、コンパイル時にPGへのマクロタスクの割り当てを決める方式である。
【0038】
スタティックスケジューリングは、実行時スケジューリングオーバーへッドを無くし、データ転送と同期のオーバーへッドを最小化することが可能であるため、粒度の細かいタスクのスケジューリングに対しても効果的に利用できる。
【0039】
また、スタティックスケジューリングの際、タスクのコストは自動並列化コンパイラでのタスクコスト推定値を適用するが、自動並列化コンパイラのプロファイル自動フィードバック機能を用いることで、実コストでタスクスケジューリングを行うことも可能である。
【0040】
プロファイル自動フィードバック機能を用いる場合、第1フェーズとして、逐次プログラムをMTに分解し、MT毎にプロファイラ関数を挿入して逐次プログラムを生成する。このプロファイラ関数では、タスク実行コスト(clock cycle)とタスク実行回数を計測する。このプロファイラ関数が挿入された逐次プログラムを一度ターゲットとなるマシン上で実行することで、ターゲットとなるマシン上でのタスク実行コストとタスク実行回数の情報を持つファイルを出力する。
【0041】
そして、第2フェーズにて、この出力ファイルと逐次プログラムを入力として、実コストに基づきスケジューリングした並列化プログラムが生成される。
【0042】
1−6.データローカライゼーション
自動並列化コンパイラは、プログラム全域に渡るキャッシュ最適化を行うことが可能である。自動並列化コンパイラは、ループ間などの並列性を解析した後、ループ間にデータ依存があることが分かると、依存があるループ間でのキャッシュのグローバル最適化を試みる(参考文献3(特許第4177681号公報)参照)。
【0043】
具体的には、各ループでアクセスされる配列を調査し、同一の分割ループは同一の配列部分にアクセスするように調整することにより、同一の分割ループを同一プロセッサに割り当てる。これにより、同一の分割ループでは、全ての配列データがキャッシュ上で再利用されるようになる。
【0044】
このローカライズ技術は、
(1)任意のサイズのローカルメモリ或いは分散共有メモリが与えられた時に、DMA(DTU)(参考文献4(特許第4476267号公報)参照)を用いアクセスされる前に、前記プロセッサに近接したローカル或いは分散共有メモリに事前ロードし、プログラム全域で再利用する。
(2)送付先のメモリが一杯の場合には、送付先プロセッサのDTUが、メモリからの掃き出し優先順位に従ってデータを共有メモリ等へ掃き出したことを同期フラグで知らされたら、自動的に空いたメモリにデータを転送する。
(3)将来再利用されるデータであるが、暫くの間使用されず、メモリの領域を開ける必要がある場合には、CPUによるタスク実行の裏側でDTUが当該データを集中共有メモリに待避し、使用時までに再ロードする。
といったローカルメモリ管理,データ転送技術へと進化している(参考文献5(英国特許第2478874号明細書)。
【0045】
1−7.並列化プログラムの生成
自動並列化コンパイラにおける並列化プログラムの生成は、自動並列化API(参考文献7(早稲田大学、「Optimally Scheduled Advanced Multiprocessor Application Program Interface」、2008年)参照)を用い、並列化C或いは並列化Fortranのような、source-to-sourceで並列化を行うことが可能である。
【0046】
この場合には、自動並列化コンパイラは、様々なプラットフォームにおいて並列化プログラムを実行可能とするため、後述する自動並列化API標準解釈系を用いて、各プロセッサ用のC或いはFortranのディレクティブ部分をランタイムライブラリコールに変換する。その後、自動並列化コンパイラは、各プロセッサ用のコードを逐次コンパイラでコンパイルしてバイナリを生成し、このバイナリをリンクすると、対象となるマルチコアプロセッサ上で並列化プログラムを実行可能となる。
【0047】
2.組み込みシステム用の逐次プログラムの並列化手順と手法
次に、組み込みシステム用の逐次プログラムの特徴について述べ、本実施形態の自動並列化コンパイラによる並列化手法について説明する。なお、組み込みシステムとは、例えば、車載装置であっても良いし、車載装置以外の電子装置であっても良い。また、逐次プログラムは、モデルベース設計により自動生成されたもの(一例として、MathWork社のMatlab(登録商標),Simulink(登録商標)にて自動生成されたもの)であっても良い。
【0048】
自動並列化コンパイラは、条件分岐と代入文により構成され、処理が細かい逐次プログラムに対して、インライン展開やリネーミングを行い、並列性を抽出する。また、リアルタイム性を順守するために条件分岐隠蔽のためのタスク融合を行い、オーバーヘッドが低くなるようにスタティックスケジューリングを行う。さらに、実コストでスタティックスケジューリングを行うために、プロファイル自動フィードバック機能を適用しても良い。
【0049】
また、逐次プログラムにおいて、条件コンパイルスイッチ(プリプロセッサへの命令)により、仕向地や機能やハードウェアの構成等が異なる組み込みシステムの各種別に応じてコンパイルの対象となる記述を選択する条件付コンパイルが行われる場合がある。このような場合、逐次プログラムの各条件コンパイルスイッチの引数として、いずれかの種別に対応する情報(仕向地等を示す情報)を設定することで、逐次プログラムから、該種別に対応するバイナリコードが生成される。
【0050】
これに対し、本実施形態の自動並列化コンパイラは、条件付コンパイルによるコンパイル対象の選択を無視し、逐次プログラムの全ての部分を対象としてマクロタスクの分割や並列性の抽出やスタティックスケジューリング等を行い、並列化プログラムを生成する。その後、並列化プログラムから、条件付コンパイルによりコンパイルの対象外となる記述を特定し、該記述を除いた状態で、マルチコアプロセッサを動作させるためのバイナリデータを生成する。
【0051】
2−1.自動並列化コンパイラの動作環境等について
自動並列化コンパイラ1は、例えば、DVD,CD−ROM,USBメモリ,メモリカード(登録商標)等の光ディスク,磁気ディスク,半導体製メモリ等として構成された記憶媒体18に記憶された状態で、ユーザに提供される(
図1参照)。無論、ネットワークを経由してユーザに提供されても良い。
【0052】
そして、自動並列化コンパイラ1がインストールされたパーソナルコンピュータ(PC)10は、自動並列化コンパイル装置として動作する。PC10は、ディスプレイ11,HDD12,CPU13,ROM14,RAM15,入力装置16,読取部17等を備える。
【0053】
ディスプレイ11は、CPU13から受けた映像信号を、ユーザに対して映像として表示する。
【0054】
入力装置16は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をCPU13に出力する。
【0055】
読取部17は、自動並列化コンパイラ1等が記憶された記憶媒体18からデータを読み取る部位である。
【0056】
RAM15は読み出し、書き込み可能な揮発性メモリであり、ROM14は読み出し専用の不揮発性メモリであり、HDD12は読み出し,書き込みが可能な不揮発性メモリである。ROM14,HDD12には、CPU13が読み出して実行するプログラム等が予め記憶されている。
【0057】
RAM15は、CPU13がROM14,HDD12に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域や、作業用のデータを一時的に保存するための記憶領域として用いられる。
【0058】
CPU13は、OSをHDD12から読み出して実行し、HDD12に記録されている各種プログラムをOS上のプロセスとして実行する。また、CPU13は、このプロセスにおいて、必要に応じて入力装置16から信号の入力を受け付け、ディスプレイ11に映像信号を出力し、RAM15,HDD12に対してデータの読み出し/書き込みの制御を行う。
【0059】
PC10には、読取部17を介して記憶媒体18から読み取られた自動並列化コンパイラ1がインストールされており、自動並列化コンパイラ1は、HDD12に保存され、OS上のプロセスとして実行されるアプリケーションの1つとなっている。
【0060】
なお、この自動並列化コンパイル装置は、車載装置等といった組み込みシステム向けの並列化プログラムの開発に用いられる。しかしながら、これに限定されることは無く、例えば情報家電等といった様々な用途の組込みシステム向けの並列化プログラムの開発や、組込みシステム以外の他の用途の並列化プログラムの開発に用いることができる。
【0061】
3.車載装置の構成について
続いて、本実施形態の自動並列化コンパイラ1により生成された並列化プログラムにより動作する車載装置20の構成について説明する(
図2参照)。無論、自動並列化コンパイラ1は、車載装置20に限らず、同様の構成を有する様々な電子装置を動作させる並列化プログラムを生成可能である。
【0062】
車載装置20は、マルチコアプロセッサ21,通信部22,センサ部23,入出力ポート24等を備える。
【0063】
マルチコアプロセッサ21は、ROM21aと、RAM21bと、複数のコア21c,21d…等を有している。
【0064】
ROM21aは、自動並列化コンパイラ1により生成された並列化プログラム21a−1(バイナリデータ)が保存されている。マルチコアプロセッサ21は、並列化プログラム21a−1に従い動作し、車載装置20を統括制御する。
【0065】
RAM21bは、コア21c,21d…等によりアクセスされる部位である。通信部22は、車内LAN等を介して接続された他のECUと通信を行う部位である。
【0066】
センサ部23は、制御対象等の状態を検出するための各種センサから構成される部位である。入出力ポート24は、制御対象を制御するための各種信号の送受信を行う部位である。
【0067】
[具体例について]
続いて、本実施形態の自動並列化コンパイラ1により並列化プログラムを生成する処理の具体例について説明する。以下の説明において、処理a等といった記載がなされるが、これは、各種演算や代入や分岐処理や関数コール等からなる一連の処理の記述を意味する。
【0068】
図3に示す具体例は、変更規模最小化オプションが無い場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理した分割プログラムを示し、(B)はマクロタスク追加後の逐次プログラム及びそれを並列化処理した分割プログラムを示している。
【0069】
図3の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0070】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
【0071】
図3の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。処理aから処理eまでと処理xをコア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理xと処理dとが割り付けられ、コア1には処理bと処理cと処理eとが割り付けられる。
【0072】
図3の(A)と(B)とを比較すると、確かに全体の処理時間が最も短くなるという観点からは最適な並列化であるといえるけれども、(A)ではコア0に割り付けられていた処理cが(B)ではコア1に割り付けられ、(A)ではコア1に割り付けられていた処理dが(B)ではコア0に割り付けられている。このように、処理c及び処理dは、コア間を移動するように割り付けられることなる。
【0073】
このように予め割り付けられた処理がコア間を移動するのを許容しないようにする変更規模最小化オプションについて説明する。
図4に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク追加(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
【0074】
図4の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0075】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
【0076】
図4の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。変更規模最小化オプションが有る場合は、
図4の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理d、処理eの割り付けを動かすこと無く、より処理時間の短いコア1に処理xを割り付ける。
【0077】
図3の(B)と
図4の(B)とを比較すると、全体の処理時間が最も短くなるという観点からは
図3の(B)に示す並列化が優れているけれども、既に割り付けられた処理の移動が最小限になっているという観点からは
図4の(B)に示す並列化が優れている。
【0078】
図4に示した変更規模最小化オプション有りの場合の並列化処理の変形例について、
図5を参照しながら説明する。
図5に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク追加前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク追加(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
【0079】
図5の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0080】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理bと処理cが割り付けられ、コア1には処理cと処理eとが割り付けられる。これら処理aから処理eの割り付けが
図4の(A)に示した並列化とは異なっている。
【0081】
図5の(B)では、逐次プログラムとして(A)の逐次プログラムにマクロタスクである処理xが追加されている。変更規模最小化オプションが有る場合は、
図5の(A)に示す既に各コアに割り付けられた処理を極力変更しないようにする。具体的には、コア0への処理a、処理b、処理dの割り付け、コア1への処理c、処理eの割り付けを動かすこと無く、より処理時間の短いコア0に処理xを割り付ける。
【0082】
続いて、マクロタスクを削除する場合の並列化について説明する。
図6に示す具体例は、変更規模最小化オプションが無い場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
【0083】
図6の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0084】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
【0085】
図6の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。処理aから処理eまでと処理xをコア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理cが割り付けられ、コア1には処理aと処理bと処理eとが割り付けられる。
【0086】
図6の(A)と(B)とを比較すると、確かに全体の処理時間が最も短くなるという観点からは最適な並列化であるといえるけれども、(A)ではコア0に割り付けられていた処理aが(B)ではコア1に割り付けられている。このように、処理aは、コア間を移動するように割り付けられることなる。
【0087】
このように予め割り付けられた処理がコア間を移動するのを許容しないようにする変更規模最小化オプションについて説明する。
図7に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
【0088】
図7の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0089】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
【0090】
図7の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。変更規模最小化オプションが有る場合は、
図7の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理eの割り付けを動かすこと無く、コア1に割り付けられていた処理dのみを削除する。
【0091】
図6の(B)と
図7の(B)とを比較すると、全体の処理時間が最も短くなるという観点からは
図6の(B)に示す並列化が優れているけれども、既に割り付けられた処理の移動が最小限になっているという観点からは
図7の(B)に示す並列化が優れている。
【0092】
続いて、
図7を参照しながら説明した並列化について、処理aと処理dとの間にデータ依存性があり、処理dと処理eとの間にもデータ依存性がある場合について
図8を参照しながら説明する。
【0093】
図8に示す具体例は、変更規模最小化オプションが有る場合の並列化処理を示すものであって、(A)はマクロタスク削除前の逐次プログラム及びそれを並列化処理(第1手順)した分割プログラムを示し、(B)はマクロタスク削除(第2手順)後の逐次プログラム及びそれを並列化処理(第3手順)した分割プログラムを示している。
【0094】
図8の(A)では、逐次プログラムとして、処理a、処理b、処理c、処理d、処理eが順次実行されるように構成されている。各処理に必要となる時間は、処理a、処理b、及び処理eが同じ時間で、処理dはその倍の時間、処理cは更にその倍の時間が必要となっている。
【0095】
処理aから処理eまでを、コア0とコア1とに分割し、全体の処理時間が最も短くなるように並列化すると、コア0には処理aと処理cとが割り付けられ、コア1には処理bと処理dと処理eとが割り付けられる。
【0096】
図8の(B)では、逐次プログラムとして(A)の逐次プログラムからマクロタスクである処理dが削除されている。変更規模最小化オプションが有る場合は、
図8の(A)に示す既に各コアに割り付けられた処理を変更しないようにする。具体的には、コア0への処理a、処理cの割り付け、コア1への処理b、処理eの割り付けを動かすことは無い。
【0097】
しかしながら、
図8に示す例では、上記したように、処理aと処理dとの間にデータ依存性があり、処理dと処理eとの間にもデータ依存性がある。ここで処理dを単純に削除してしまうと、処理dを介して処理aと処理eとの間にあったデータ依存性が切れてしまい、処理eの実行に不具合が生じる可能性がある。そこで本例では、処理dの処理コマンドのみを削除し、処理dと処理aとが依存関係にあり、処理dと処理eとも依存関係にあるという情報は残しておいている。このため、コア1では、処理dの処理コマンド分の負荷が低減されると共に、処理eの確実な実行が確保される。