図1〜図18を参照して、本発明の実施形態について説明する。
(コンパイル装置の構成)
並列化コンパイル装置100は、シングルプロセッサシステムで逐次実行可能な逐次プログラムP1と設定ファイルCFとを入力とし、当該マルチプロセッサシステム200で並列実行可能なバイナリコードPBを出力とする装置である。なお、並列化コンパイル装置100が、本発明の「コンピュータ」の一例に該当する。
この機能の実現のため、並列化コンパイル装置100は、演算処理要素110と、読取装置120と、書出装置130と、記憶装置140とを備える。
演算処理要素110は、中央演算ユニット(CPU)等を含んで構成され、並列化コンパイラCをメモリ等の記憶装置140から読み出し、並列化コンパイラCに従って後述する並列化処理のための演算処理を実行するように構成されている。並列化コンパイラCに従って演算処理を実行することにより、演算処理要素110は、後述する図2あるいは図3におけるSTEP001からSTEP032までの一連の処理を実行する。
読取装置120は、外部記憶媒体から情報を読み取る装置、例えば、CDドライブ、DVDドライブまたはBlu−ray(登録商標)ドライブ等により構成されている。読取装置120に代え、たとえば、キーボード等の入力装置又は通信装置を介して逐次プログラムP1及び設定ファイルCFが外部から入力されてもよいし、並列化コンパイル装置100に接続された外部記憶媒体(USBメモリ)等から逐次プログラムP1及び設定ファイルCFが読み取られてもよい。
逐次プログラムP1は、たとえばFortran、C言語等の高級言語により記述されたソースコードである。
設定ファイルCFは、マルチプロセッサシステム200を構成するプロセッシングエレメントの数、プロセッシングエレメントを構成するCPUなどのプロセッサの種別及びローカルメモリの記憶容量やアクセス時間、マルチプロセッサシステム200に搭載された共通の記憶領域の記憶容量やアクセス時間、マルチプロセッサシステム200に搭載されたOSの情報などの、マルチプロセッサシステム200で動作する並列プログラムの生成に必要な情報を記録したファイルである。
並列化コンパイル装置100とマルチプロセッサシステム200とが共通の記憶装置を使用している場合、並列化コンパイル装置100は、当該記憶装置を参照することにより、設定ファイルCFに記録された情報を取得してもよい。
書出装置130は、外部記憶媒体に情報を書き出す装置、例えば、CD−Rドライブ、DVD−RドライブまたはBlu−ray(登録商標)ドライブ等により構成されている。書出装置130に代え、たとえば、通信装置を介してバイナリコードPBが外部に出力されてもよいし、並列化コンパイル装置100に接続された外部記憶媒体(USBメモリ)等にバイナリコードPBが書き出されてもよい。
バイナリコードPBは、マルチプロセッサシステム200の各第1プロセッシングエレメントPE1〜第nプロセッシングエレメントPEnのそれぞれにより実行可能な実行用プログラムである。バイナリコードPBが、第1プロセッシングエレメントPE1〜第nプロセッシングエレメントPEnにより実行されることにより、逐次プログラムP1(のバイナリコード)がシングルプロセッサシステムで実行される場合と同一の処理結果が得られる。
記憶装置140は、ROM、RAM及びHDD等の記憶装置(主記憶装置及び補助記憶装置等)並びにI/O回路により構成されている。記憶装置140は、少なくとも不揮発性のメモリを含む。RAMは読み出し及び書き込み可能な揮発性メモリであり、ROMは読み出し専用の不揮発性メモリであり、HDDは読み出し及び書き込みが可能な不揮発性メモリである。ROM及びHDDには、演算処理要素110が読み出して実行するプログラム等が予め記憶されている。RAMは、演算処理要素110がROM,及びHDDに記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域又は作業用のデータを一時的に保存するための記憶領域として用いられる。また、これに加えてまたは代えて、HDDが一時的にそのプログラムを一時的に保存するための記憶領域又は作業用のデータを一時的に保存するための記憶領域として用いられてもよい。
記憶装置140の不揮発性メモリには、予めインストールされた並列化コンパイラC及び設定ファイルが格納されている。
(マルチプロセッサシステムの構成)
マルチプロセッサシステム200は、バス結合またはクロスバス結合等の相互接続網により相互に接続された、n個のプロセッシングエレメントとしてのPE1〜PEnと、集中共有メモリ210と、マルチプロセッサシステムの入出力装置220とを備える。プロセッシングエレメントのそれぞれが本発明の「演算処理部」の一例に相当する。
第kプロセッシングエレメントPEk(k=1,‥,n)は、中央演算ユニットCPUと、ローカルデータメモリLDMと、データ転送ユニットDTUと、分散共有メモリDSMと、ローカルプログラムメモリLPMとを備える。
第kプロセッシングエレメントPEk(k=1,‥,n)の構成は、所定の演算処理が出来れば、この構成と異なっていてもよい。例えば、第kプロセッシングエレメントPEk(k=1,‥,n)は、ローカルデータメモリLDM及びローカルプログラムメモリLPMに加えて又は代えて、キャッシュメモリを備えてもよい。第kプロセッシングエレメントPEk(k=1,‥,n)は、クロック周波数又は電源電圧制御用のレジスタを備えてもよい。第kプロセッシングエレメントPEk(k=1,‥,n)は、中央演算ユニットCPUに代えてまたは加えて、アクセラレータを備えてもよい。また、例えば、逆に、CPU以外の構成要素(LDM、LPM、DSM、DTU)のうちのすべてあるいは一部を欠いてもよい。さらに、第kプロセッシングエレメントPEk(k=1,‥,n)は、互いに異なる構成であってもよい。
中央演算ユニットCPUは、汎用処理プロセッサである。
ローカルデータメモリLDMは、当該LDMを含むプロセッシングエレメントからのみアクセス可能な記憶装置(RAM等により構成される。)で構成される。
データ転送ユニットDTUは、プロセッシングエレメント間、第kプロセッシングエレメントPEkと集中共有メモリ210との間、又は第kプロセッシングエレメントPEkとマルチプロセッサシステムの入出力装置220との間のデータ転送を管理するユニットである。
各プロセッシングエレメントの構成要素の一つである分散共有メモリDSMは、他のプロセッシングエレメントからもアクセス可能な記憶装置(RAM等により構成される。)であるが、必ずしも設けなくてもよい場合もある。
ローカルプログラムメモリLPMは、当該LPMを含む第kプロセッシングエレメントPEkが実行するプログラム(たとえばバイナリコードPBのうち第kプロセッシングエレメントPEkに割り当てられた部分のプログラム)を記憶する。
一部のプロセッシングエレメントが、CPUに代えて、信号処理プロセッサ(Digital signal processor:「DSP」と略称)又は動的再構成可能プロセッサ(Dynamically Reconfigurable Processor:「DRP」と略称)等を備えてもよい。
各プロセッシングエレメントPE1〜PEnは、階層的なグループであるプロセッシンググループPGにグループ分けされていてもよい。このグループ分け手法の詳細については、参考文献1(宮沢稔、岡本雅巳、笠原博徳、「階層型マクロデータフロー処理におけるサブルーチン並列処理手法」、情報処理学会全国大会講演論文集、1994年)に開示されている。
なお、中央演算ユニットCPU、各プロセッシングエレメントPE1〜PEnのそれぞれ又はプロセッシンググループPGが、本発明の「演算処理部」の一例に該当する。
集中共有メモリ210は、各プロセッシングエレメントPE1〜PEnがアクセス可能な記憶媒体(RAM、ROM、HDD等により構成される。)により構成される。
マルチプロセッサシステムの入出力装置220は、外部記憶媒体から情報を読み取る装置、例えば、CDドライブ、DVDドライブまたはBlu−ray(登録商標)ドライブ等により構成されている場合もある。マルチプロセッサシステムの入出力装置220に代え、たとえば、通信装置を介してバイナリコードPBが外部からマルチプロセッサシステム200に入力されてもよいし、バイナリコードPBがマルチプロセッサシステムの記憶装置(集中共有メモリ210又はローカルプログラムメモリLPM)に直接書込まれることによってマルチプロセッサシステム200に入力されてもよい。また、当然のことながら入出力装置220は、マルチプロセッサシステムで演算処理するデータを読み込んだり、演算処理結果を出力する機能も持っている。
特に、マルチプロセッサシステム200が、車両等の制御対象の制御用に用いられる場合には、マルチプロセッサシステムの入出力装置220は、制御に必要な制御対象の状態を示す状態情報データ(例えば、車両のエンジンの回転数や温度など)をバイナリデータとしてリアルタイムに読み込み、並列プログラムで演算処理した後、制御対象を制御するための制御情報データをリアルタイムで出力する機能を持つ。
以上説明したように、プロセッシングエレメントPE1〜PEn又はそれらをグループ化したプロセッシンググループPGのそれぞれを備え、さらに共有記憶装置や入出力装置を備えるマルチプロセッサシステムが本発明の並列化コンパイラにより生成された並列プログラムを実行する「システム」に該当する。なお、本発明の「システム」は、一つの半導体チップに集積されたマルチプロセッサシステムや一つの筐体に複数の演算処理部を搭載したシステムに限らず、演算処理部としての複数のコンピュータを通信を介して互いに接続することにより構成したシステムも含む。
(並列プログラム生成処理)
次に、図2のフローチャートを参照しながら、続いてその他の例である図3を参照しながら、並列化コンパイル装置100の演算処理要素110が並列化コンパイラCを実行することにより行われる、並列プログラムP2及びそのバイナリコードPBの生成処理について説明する。
まず、図2の説明から始める。
演算処理要素110は、逐次プログラムP1及び設定ファイルCFを読取装置120を介して読み取ると、逐次プログラムP1に対して字句解析及び構文解析を実行する(図2/STEP002)。
演算処理要素110は、字句解析及び構文解析の解析結果に基づき、逐次プログラムP1を、代入文及び条件分岐を含む基本ブロック(BB)と、繰り返し実行を含む繰り返しブロック(RB)と、関数を含むサブルーチンブロック(SB)との3種類の粗粒度タスク(マクロタスク)に分割する(図2/STEP004)。なお、1又は複数の基本ブロック(BB)を融合した疑似代入文ブロック(BPA)を1つのタスクとして扱ってもよい。なお、図2/STEP004の処理が、本発明の「タスク分割ステップ」の一例に該当する。
演算処理要素110は、各タスクの実行時間を含む実行コストを解析する(図2/STEP006)。
例えば、演算処理要素110は、図4に示されるように、タスクのそれぞれの前後にプロファイラpro1〜8を差し込んで、所定のシナリオに沿って実行させることにより、実行コストとしての各タスクのタスク実行回数及び実行時間(e)を計測する。例えば、タスクMT1の実行コストを考える。MT1の前には、pro1(mp_prop_count(1); mp_prop_clock_start(1))、後にはpro2(mp_prop_clock_end(2))が差し込まれており、pro1はMT1を処理が通過する回数とその時のMT1の処理の開始時刻を計測し、pro2はMT1の処理の終了時刻を計測する。MT1の実行時間はMT1の終了時刻の計測値から開始時刻の計測値を差し引いて求めることができる。
また、pro3(mp_prop_count(2); mp_prop_clock_start(2))はMT2の処理回数とともに処理開始時刻を計測し、pro4(mp_prop_clock_end(2))はMT2の処理の終了時刻を計測し、pro5(mp_prop_count(3); mp_prop_clock_start(3))はMT3の処理回数とともに処理開始時刻を計測し、pro6(mp_prop_clock_end(3))はMT3の処理の終了時刻を計測する。MT2とMT3とはMT1から分岐して後続しており、MT2とMT3の処理回数の和はMT1の処理回数に一致する。また、MT2の処理回数をMT1の処理回数で割れば、MT1からMT2に分岐する確率を計算できる。同様に、MT3に分岐する確率を計算できる。また、MT1の場合と同様に、MT2及びMT3についても、それぞれの処理の終了時刻の計測値から処理の開始時刻の計測値を差し引けば、それぞれの実行時間を求めることができる。
このようにして他のすべてのタスクについても同様に実行時間(実行コスト)を計測できる。
実行時間及び条件分岐の各分岐方向への分岐の確率の計測ができれば、そのデータに基づいて、種々のタスクグループの実行コストの計算ができる。タスクの実行コスト計算については、参考文献2(宮沢稔、岡本雅巳、笠原博徳、「マルチグレイン並列処理のための階層的並列性制御手法」、情報処理学会論文誌、2003年)に記載されている。
実行コストには、このような実行回数と実行時間のみならず、タスクを実行するための消費電力が含まれてもよい。この計測した各タスクの実行コストを用いて、タスクグループ(複数のタスクの集り)の実行コストを計算することができる。
実行コスト解析のSTEP006を実行した後、演算処理要素110は、特に実行コストの大きなサブルーチンブロックSBが含まれていれば、必要な場合には当該サブルーチンブロックSBに対してインライン展開を実行する。このインライン展開は、行われる場合も行われない場合もあるので、図2には(図3にも)示されていない。インライン展開とは、周知のようにプログラムに含まれるサブルーチンを含む関数呼び出しをサブルーチンSBの中のプログラムコードで置き換えることを意味する。図5にプログラムを構成する基本ブロックBB、繰返しブロックRB、サブルーチンブロックSBという3種類の(マクロ)タスクに含まれる可能性のある階層化された並列性について示している。図5は、例えば、SBの中に含まれるプログラムコードが、当該SBを呼び出している(関数呼び出しを行っている)階層(1st layer)の下の階層(2nd layerや3rd layer)に属し、同様にBB、RB、SBに分割され得ることを示している。このインライン展開は、サブルーチンSBの中のプログラムコードを上位の階層に展開しそれを含めて解析することによって並列性を抽出できる可能性が高くなる場合に用いるが、インライン展開を多用するとプログラムコードの規模が非常に大きくなる場合があるので、上位の階層から1階層ずつ行っていく。インライン展開を行う場合には、処理フローを再度STEP004タスク分割に戻すことになる。また、並列化処理フローの冒頭からインライン展開後のプログラムを並列化対象とすることもある。
実行コスト解析の終了後、演算処理要素110は、タスク分割処理において分割された各タスクに対し、制御フロー及びデータ依存を解析し(図2/STEP010)、マクロフローグラフ(以下、「MFG」と略称)を生成する(図2/STEP012)。
このようにして生成されたMFGの一例を図6に示す。MFGは、図6に示されるように、ノードとしてのタスクと、2つのノードを接続する実線エッジ及び破線エッジとからなる。また、図6の中で、EMT14は一群のタスクの終了を示す記号であってタスクではない。
各タスクは、基本ブロック(BB)(又は疑似代入文ブロック(BPA))、繰り返しブロック(RB)及びサブルーチンブロック(SB)のうちのいずれかである。各実線エッジは、後処理のタスク(逐次プログラム上の後実行となるタスク)から先処理のタスク(逐次プログラム上の先実行となるタスク)へのデータ依存を示す。各破線エッジは、先行処理のタスクから後続処理のタスクへの制御フローを示す。ノード内の小円は、条件分岐を示す。
例えば、図6においては、基本ブロックBB1と基本ブロックBB2及び基本ブロックBB5のそれぞれとが破線エッジで結ばれているが、これは、基本ブロックBB1に含まれる条件分岐の各分岐方向が基本ブロックBB2及び基本ブロックBB5となっていることを意味する。以下の説明では、MFGにおいて、基本ブロックBB1に含まれる条件分岐の分岐方向がBB2である分岐方向を、「BB12」のように、条件分岐を含むタスクBB1の名称BB1とともに制御フロー上の分岐方向の最初のタスクBB2の番号2を下付数字で表す。同様に、基本ブロックBB1に含まれる条件分岐の分岐方向がBB5である分岐方向を「BB15」と表す。
また、図6において、基本ブロックBB3とサブルーチンブロックBB6とが実線エッジで結ばれているが、これは、サブルーチンブロックBB6が基本ブロックBB3にデータ依存を有していることを意味する。
なお、図6におけるMFGでは各エッジの矢印は省略されているが、各エッジの方向は下向きとしている。
演算処理要素110は、MFGに対し、タスクの最早実行可能条件を解析する(図2/STEP014)。なお、図2/STEP014の処理が、本発明の「依存解析ステップ」に含まれる「最早実行可能条件解析ステップ」の一例に該当する。タスクの最早実行可能条件の解析は、MFGに基づいて各タスクの制御依存及びデータ依存を解析することにより行われるが、各タスクの制御依存及びデータ依存の解析が終了すれば、事実上最早実行可能条件解析は容易に実施できるので、本明細書では両者ともにあるいは両者のいずれかを依存解析とする。
まず、制御依存及びデータ依存の解析を図6のMFGに対して実施した場合について説明する。図6に示される基本ブロックBB1の条件分岐の実行結果に応じて基本ブロックBB2の実行の可否が決定されるので、基本ブロックBB2は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB12に対して制御依存する。
また、基本ブロックBB2に含まれる条件分岐の分岐方向に応じて基本ブロックBB3の実行の要否が決定されるので、基本ブロックBB3は、基本ブロックBB2に含まれる条件分岐の一の分岐方向BB23に制御依存する。この場合、基本ブロックBB3は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB12に間接制御依存する。
また、基本ブロックBB1の条件分岐の分岐方向がいずれとなろうとも基本ブロックBB5が実行されるので、基本ブロックBB5は、基本ブロックBB1に含まれる条件分岐の全ての分岐方向BB12、BB15に制御依存しない。
基本ブロックBB6は、基本ブロックBB3にデータ依存を有しているが、基本ブロックBB1の条件分岐の一の分岐方向BB15への確定により、基本ブロックBB2の実行がされない(ひいては基本ブロックBB3の実行がされない)ことが確定した場合にも、基本ブロックBB6の実行をすることが出来る。このため、BB6は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB15に拡張制御依存する。
また、基本ブロックBB2の条件分岐の一の分岐方向BB24への確定により、基本ブロックBB3の実行がされないことが確定した場合にも、基本ブロックBB6の実行をすることが出来るので、基本ブロックBB6は、基本ブロックBB2の条件分岐の一の分岐方向BB24に拡張制御依存する。
MFGは、逐次プログラムにおけるタスク間の制御フローとデータ依存を表すが、並列性は表していない。並列性を抽出するためには、これまでに説明してきた各タスクの制御依存と当該各タスク間のデータ依存の解析結果を基に最早実行可能条件解析を行う必要がある。あるタスクの最早実行可能条件とは、そのタスクが最も早い時点で実行可能になる条件である。ここで、各タスクには、次の関係が成り立つ(参考文献3(稲石大祐、木村啓二、藤本謙作、尾形航、岡本雅巳、笠原博徳、「最早実行可能条件解析を用いたキャッシュ最適化手法」、情報処理学会全国大会講演論文集、1999年)参照)。
(1)第iタスクMTiが第jタスクMTj(j≠i)に含まれる条件分岐の一の分岐方向に制御依存する場合、第jタスクMTjの条件分岐の分岐方向が確定すれば、第jタスクMTjの実行が終了しなくても、第iタスクMTiは実行できる。
(2)第iタスクMTiが第kタスクMTk(k≠i)にデータ依存する場合、第kタスクMTkの実行が終了するまで第iタスクMTiは実行できない。
これを整理すると、第iタスクMTiの最早実行可能条件は、次の(3)かつ(4)と表すことが出来る。
(3)第iタスクMTiが制御依存する第jタスクMTjの条件分岐が、第iタスクMTiを含むパスに分岐する。
(4)第iタスクMTiがデータ依存する第kタスクMTk(k≠i)が全て終了するか又は第kタスクMTk(k≠i)の不実行が確定する。
例えば、図6のマクロフローグラフ(MFG)における基本ブロックBB6(前記「MTi」に相当)の最早実行可能実行条件は次の(5)かつ(6)で表すことが出来る。
(5)基本ブロックBB1(前記「MTj」に相当)の実行が確定する。(基本ブロックBB1の分岐方向がいずれであっても基本ブロックBB6の実行が確定するため。)
(6)基本ブロックBB6がデータ依存する基本ブロックBB3(前記「MTk」に相当)が終了する、又は、基本ブロックBB6がデータ依存する基本ブロックBB3が実行されないことが決定する。
ここで、「基本ブロックBB6がデータ依存する基本ブロックBB3が実行されないことが決定する」とは、図6のMFGでいえば、「基本ブロックBB3が制御依存する基本ブロックBB2における条件分岐の分岐方向が、基本ブロックBB4を実行する分岐方向BB24に確定すること」、または、「基本ブロックBB3が間接制御依存する基本ブロックBB1における条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB15に確定すること」である。
そして、「基本ブロックBB3が制御依存する基本ブロックBB2における条件分岐の分岐方向が、基本ブロックBB4を実行する分岐方向BB24に確定する」場合は、「基本ブロックBB1の条件分岐の分岐方向が基本ブロックBB2を実行する分岐方向BB12に確定していること」が前提になるので、「基本ブロックBB1の実行が確定する」場合を含んでいる。
また、「基本ブロックBB3が間接制御依存する基本ブロックBB1における条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB15に確定する」場合は、「基本ブロックBB1の実行が確定する」場合を含んでいる。
従って、図6のMFGに示す基本ブロックBB6の最早実行可能条件は、次のように簡略化できる。
基本ブロックBB3が終了する、又は、基本ブロックBB1の条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB15に確定する、又は、基本ブロックBB2の条件分岐の分岐方向が基本ブロックBB4を実行する分岐方向BB24に確定する。なお、最早実行可能条件はこのように必ずしも簡略化されなくともよい。
以上のように、基本ブロックBB6に対して行ったと同様の再送実行可能条件解析を他のタスクに対しても行うと、各タスクの最早実行可能条件は、図7に示される表により表される。図7に示される表は、左側の欄がそれぞれのタスクの名称を示し、右側の欄が、それぞれのタスクがデータ依存するタスク又は制御依存若しくは拡張制御依存する分岐方向を示している。例えば、図7に示される表においては、BB2は、BB1の条件分岐の分岐方向BB12に制御依存していることを示す。また、図7に示される表においては、BB6は、BB3にデータ依存し、BB1の条件分岐の分岐方向BB15に制御依存し、BB2の条件分岐の分岐方向BB24に拡張制御依存していることを示す。図7に示される表において、orは、いずれかの条件が満たされれば左欄のタスクが実行可能となることを示す。図7に示される表においては示していないが、複数の条件が満たされた場合に実行可能となることを示す場合には、(BB15 and BB3)のように、andで表すことが出来る。
演算処理要素110は、図2/STEP014の最早実行可能条件解析の結果に基づいて、タスク間の並列性を抽出したマクロタスクグラフ(以下、「MTG」と略称)を生成する(図2/STEP016)。
例えば、演算処理要素110は、すでに説明した通り、図6のMFGにおける各タスクに対して図2/STEP014の最早実行可能条件解析を実行しその結果に基づいて、図8に示されるMTGを生成する。
MFGと同様に、MTGにおけるノードはタスクを、ノード内の小円はタスク内の条件分岐を、実線のエッジはデータ依存を、破線のエッジは制御依存又は拡張制御依存を表す。また、図8のMTGにおけるEMT14は、図6で述べたように、タスクではなく一群のタスクの終了を示す記号である。
また、各エッジを束ねるアークには2種類あり、実線アークは、当該アークによって束ねられた各エッジがAND関係にあること、すなわち実線アークに束ねられた複数の破線エッジにそれぞれ後続するタスクは同時並行で実行可能であることを示し、破線アークは、当該アークによって束ねられた各エッジがOR関係にあること、すなわち破線アークに束ねられた複数の破線エッジにそれぞれ後続する各タスクは条件分岐による選択の関係にあることを示している。
例えば、図8に示すMTGにおいて、基本ブロックBB6は、基本ブロックBB3にデータ依存を有しているため、データ依存を示す実線エッジによって基本ブロックBB3と接続されている。
例えば、図6のMFGからわかるように、基本ブロックBB6は基本ブロックBB1に含まれる条件分岐の一の分岐方向BB15及び基本ブロックBB2に含まれる条件分岐の一の分岐方向BB24に拡張制御依存を有しているため、基本ブロックBB6は、制御依存又は拡張制御依存を示す破線エッジによって基本ブロックBB1に含まれる条件分岐のBB2及びBB4に向かう分岐方向とは異なる分岐方向と、また基本ブロックBB2に含まれる条件分岐のBB3に向かう分岐方向とは異なる分岐方向とそれぞれ接続されている。
また、図8のMTG中の基本ブロックBB12についても基本ブロックBB6と同様の説明ができる。すなわち、まずBB12は基本ブロックBB11にデータ依存している。
そして、図6のMFGからわかるように、BB12は基本ブロックBB7に含まれる条件分岐の一の分岐方向BB711及び基本ブロックBB8に含まれる条件分岐の一の分岐方向BB810に拡張制御依存を有しているため、BB12は、制御依存又は拡張制御依存を示す破線エッジによって基本ブロックBB7に含まれる条件分岐のBB8及びBB10に向かう分岐方向とは異なる分岐方向と、また基本ブロックBB8に含まれる条件分岐のBB9に向かう分岐方向とは異なる分岐方向とそれぞれ接続されている。
これらのエッジは、前述したようにOR関係にあるので、破線アークで束ねられている。なお、MTGにおいて矢印が省略されているエッジの向きは下向きである。また、矢印を持つエッジは、オリジナルの制御フローを表す。
また、例えば、基本ブロックBB5は、図6のMFGからわかるように、基本ブロックBB1等の先行タスクの条件分岐がいずれに分岐しても実行されることが確定しているから、基本ブロックBB1等の先行タスクに含まれる条件分岐の各分岐方向BB12、BB15に対する制御依存を有しない。また、基本ブロックBB5は、先行タスクに対するデータ依存及び拡張制御依存も有しない。このため、図7の表にに示されるように、基本ブロックBB5については最早実行可能条件の欄が空欄になっており、図8のMTGにおける基本ブロックBB5には、他の先行タスクからのエッジがない。すなわち、BB5は他のタスクあるいはタスクグループと並行して実行可能であることを示す。同様に、図6のMFG上では、基準タスクBB7の後に実行される基本ブロックBB11、BB13もBB7に含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存もしていないので、図7の表の再送実行可能条件の欄が空欄になっており、図8のMTGにおける基本ブロックBB11、BB13には、先行タスクからのエッジがない。
続いて、演算処理要素110は、MTGから、融合対象のタスクグループを決定する融合すべきタスクグループ決定処理を実行する(図2/STEP018)。この図2/STEP018の詳細を展開したフローチャートを図9に示すが、この図9を用いて、図2/STEP018における処理の内容を詳しく説明する。また、この説明を具体的に行うために、図8のMTG中の基本ブロックBB7に含まれる条件分岐のすべての分岐方向の各々に後続するすべてのタスクをまとめて図10に示したMTGを用意する。図10のMTGを基にした説明は、当然のことながら、図8のMTG中の基本ブロックBB1に含まれる条件分岐のすべての分岐方向の各々に後続するタスクにも適用できる。
以下に、図9及び図10を参照して、融合すべきタスクグループ決定処理をより詳細に説明する。
演算処理要素110は、MTGを参照して、他のタスクにデータ依存もせず、他のタスクに含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存も間接制御依存もせずかつ一つの条件分岐を含むタスクを基準タスクとして特定する(図9/STEP202)。
他のタスクにデータ依存もせず、他のタスクに含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存も間接制御依存もせずかつ一つの条件分岐を含むタスクを基準タスクとして特定する例として、演算処理要素110が、図10に示されるMTGを参照して、基本ブロックBB7を基準タスクとして特定する処理を挙げることができる。
続いて、演算処理要素110は、MTGを参照して、基準タスクと、基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクのすべてである第1後続タスクとをタスクグループとして特定する(図9/STEP204)。なお、図9/STEP204の処理が、本発明の「第1特定ステップ」の一例に該当する。
図10の例でいえば、演算処理要素110は、図10に示されるMTGを参照して、基準タスクとしての基本ブロックBB7の条件分岐の実線アークで束ねられた分岐方向、すなわちAND結ばれた分岐方向に制御依存する基本ブロックBB8、BB10と、基準タスクとしての基本ブロックBB7の破線アークで束ねられた他の分岐方向に拡張制御依存する基本ブロックBB12とを第1後続タスクとして特定する。なお、「基本ブロックBB7の条件分岐の実線アークで束ねられた分岐方向、すなわちAND結ばれた分岐方向」は、図6における分岐方向BB78をMTGの作成方法に従って複数に分けて表示したものである。また、「基本ブロックBB7の破線アークで束ねられた他の分岐方向」は、図6における分岐方向BB711をMTGの作成方法に従って複数に分けて表示したものである。
そして、演算処理要素110は、基準タスクと第1後続タスクとをタスクグループとして特定する(図9/STEP204)。図9/STEP204が、本発明における「第1特定ステップ」に相当する。
演算処理要素110は、MTGを参照して、この特定されたタスクグループに含まれるタスクの条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクが存在するか否かを判定する(図9/STEP206)。
演算処理要素110は、図10に示されるMTGを参照して、基本ブロックBB9が前述の特定されたタスクグループに含まれる基本ブロックBB8に含まれる条件分岐のBB9に向かう分岐方向に制御依存していることを特定する。このため、演算処理要素110は、図9のSTEP206において当該タスクグループに含まれるタスクに含まれる条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクが存在する、すなわちYESと判定することとなり、この基本ブロックBB9を第2後続タスクとする。この第2後続タスクとなる基本ブロックBB9は、基準タスクBB7に含まれる条件分岐のBB8への分岐方向に間接制御依存していることが注目される。つまり、第2後続タスクを特定することは基準タスクに含まれる条件分岐の当該分岐方向に間接制御依存するタスクを特定することになる。
前述のように、図9/STEP206の判定結果がYESである場合には、演算処理要素110は、当該第2後続タスク(図10の例では基本ブロックBB9)を当該タスクグループに追加する(図9/STEP208)。なお、図9/STEP208の処理が、本発明の「第2特定ステップ」の一例に該当する。
図9/STEP208の後、演算処理要素110は、再度図9/STEP206を実行して、第2後続タスクに含まれる条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクの有無を判定する。
演算処理要素110は、例えば図10に示されるMTGを参照して、基本ブロックBB9を追加したあとのタスクグループに含まれる条件分岐のすべての分岐方向の各々について、制御依存又は拡張制御依存するタスクが存在しないと判定する。
図9/STEP206の判定結果が否定的である場合(図9/STEP206‥NO)、演算処理要素110は、タスクグループを融合すべきタスクグループとして決定する(図9/STEP210)。このようにして、図9/STEP206〜STEP208を繰り返す一連の処理が、本発明の「制御ステップ」の一例に該当する。
以上、図2/STEP018の「融合すべきタスクグループ決定」処理について、図9のより詳細なフローチャートを用いて、図8のMTGから基本ブロックBB7及びそのすべての分岐方向の各々に後続するタスクを切り出した図10のMTGを例として挙げながら説明してきた。この説明は、当然のことながら、図8のMTGにおける基本ブロックBB1とそれに含まれる条件分岐のすべての分岐方向の各々に後続するすべてのタスクに適用することができる。例えば、図10における基本ブロックBB7、BB10、BB8、BB9、基本ブロックBB12をそれぞれ図8の基本ブロックBB1、BB4、BB2、BB3、基本ブロックBB6に置き換えれば、基本ブロックBB7とそれに含まれるすべての条件分岐の各々に後続するタスクを切り出した図10を基にした説明はすべて同様に成立する。つまり、図8のMTGには、二つの融合すべきタスクグループの存在を確認することができる。
また、図9/STEP202〜STEP210の処理に代えて、演算処理要素110は、例えばすべてのタスクが制御依存、拡張制御依存又は間接制御依存する条件分岐を含むタスクを判定し、当該判定結果に基づいて、融合すべきタスクグループを決定してもよい。また、タスクの実行コストを勘案して、タスクグループにデータ依存するタスクを含めるように、タスクグループを特定してもよい。
次に、演算処理要素110は、図2/STEP018で抽出したタスクグループを「融合すべきタスクグループ」として一つの新タスクとして融合する(図2/STEP026)。
例えば、情報処理要素110は、図10あるいは図8のMTGを参照して、図8の基本ブロックBB1〜BB4及び基本ブロックBB6を含む「融合すべきタスクグループ」を融合することにより、新たなタスクblock1を生成する。演算処理要素110は、、情報処理要素110は、基本ブロックBB7〜BB10及び基本ブロックBB12を含む「融合すべきタスクグループ」を融合して新たなタスクblock2を生成する。この結果、これらの新たなタスクblock1及び新たなタスクblock2図8に示される基本ブロックBB5、BB11及びBB13を含むMTGが生成される。このMTGを図14Aに示す。
この図14AのMTGからわかるように、融合して生まれた新たなタスクblock1及びblock2など5つの並列実行可能なタスクを抽出することができた。
次に、演算処理装置110は、図2/STEP026を経て生成されたMTGとともに、前述した設定ファイルCF(PEの種類、数、グルーピングの状況、メモリの状況などの情報を含む)に適合するようにスタティックスケジューリング処理を実行する。なお、図2/STEP028の処理が、本発明の「スケジューリングステップ」の一例に該当する。
例えば、設定ファイルCFにおいて、マルチプロセッサシステムのPE数が5であるとすれば、演算処理要素110は、5つのタスクをそれぞれのPEに割り当てることができる。また、仮に設定ファイルCFに示されるPE数が2であるとすると、演算処理要素110は、前記5つのタスクの実行コストを基に2つのPEでの実行コスト差が小さくなるように割り当てることになる。例えば演算処理要素110は、第1のPEであるPE1にはblock1とBB5を、第2のPEであるPE2にはblock2、BB11及びBB13という割り当てをなしうる。
前述の例では、並列実行可能なタスク数が3〜5と少なかったが、この数が多くなるとともにマルチプロセッサシステムを構成するPEの数が多くなる場合は、スケジューリング処理は、前述のPEの数を基に行うといった単純なものではなく、諸々の条件を考慮する必要があり、一般に複雑になる。
ここでスケジューリング方法としては、特許文献1に示される、スタティックスケジューリングにより、各タスクの階層に応じていずれかのプロセッシングエレメントPE又はプロセッシンググループPGに割り当てる方法が採用されうる。
また、マルチプロセッサシステム、なかんずく半導体チップ上に形成されたマルチプロセッサシステムにおいては、システムの中にプロセッシングエレメントなどの動作電圧をソフトウェアにより可変にする機構を設けているものが多い。それは、マルチプロセッサシステムの動作電圧を個々のタスクの実行状況などに応じて最適設定し、その消費電力を削減するためである。演算処理要素110は、当該推定された消費電力を実行コストとして、この実行コストに基づいて、各タスクの実行に適切なマルチプロセッサシステムを構成するプロセッシングエレメントなどの動作電圧を選択し、プロセッシングエレメントPE又はプロセッシンググループPGを当該動作電圧で動作させる指示を挿入してもよい。なお、適切な動作電圧の選択の詳細については、特許第4082706号公報に記載されている。
また、演算処理要素110は、依存があるグループ間でのキャッシュのグローバル最適化を試みることにより、キャッシュの最適化を行ってもよい。なお、グローバル最適化については特許第4177681号公報に記載されている。
ここで、電圧制御及びキャッシュの最適化等については、特許文献1に開示される自動並列化API標準解釈系及びマルチプロセッサシステム200のプラットフォームに応じたランタイムライブラリ等を利用することにより、比較的容易に実現することが可能となる。
演算処理要素110は、スケジューリングの結果に基づいて、並列プログラムP2を生成する(図2/STPE028)。
演算処理要素110は、設定ファイルCFに記載された情報に基づき、マルチプロセッサシステムの各種PEに対応したバックエンドコンパイラを用いて、並列プログラム(ソースコード)P2からバイナリコードPBを生成する(図2/STEP032)。このSTEP032の処理は、マルチプロセッサシステム200において実行されてもよい。なお、図2/STEP030又は図2/STEP032の処理が、本発明の「生成ステップ」の一例に該当する。
以上の処理により、マルチプロセッサシステム200により並列実行可能な並列プログラムP2(及びそのバイナリコードPB)が生成される。演算処理要素110は、図2のフローチャートにおける並列化の一連の処理を終了する。
以上、説明したように、本発明の技術では、従来技術に比してより多くの並列実行可能なタスクを抽出できることがあきらかになったが、さらに元の逐次プログラムの状態とマルチプロセッサシステムの構成によっては、より多くの並列実行可能なタスクを抽出することも可能である。以下にその他の例について説明する。
それは、図2のSTEP018で生成した「融合すべきタスクグループ」にさらに並列実行可能なタスクが存在する可能性がないか解析し、存在する場合及び存在しない場合の両方についての融合すべきタスクグループの取扱を決めるステップを図2/STEP018の直後に挿入する例である。このようにして作成されたフローチャートを図3に示す。図3のSTEP2〜STEP018及びSTEP026〜STEP032は図2と同じである。
この図3/STEP020〜STEP024において、演算処理要素110は、「融合すべきタスクグループ」に含まれる基準タスクの一の分岐方向に制御依存、拡張制御依存、さらには間接制御依存する複数のタスク相互間にデータ依存も制御依存もしないタスクが存在するかどうか判定し、存在しない場合には、そのまま融合すべきタスクグループに融合処理を施し、存在する場合にはそれらの複数のタスクを並列実行可能として扱う。
図3に示されているこのような場合の処理フローの例を図2の処理フローの場合と同じく、図8のMTGを例に挙げて以下に説明する。この場合、説明の見通しをよりよくするために、図10と同じく、図8のMTGから抜き出した基本ブロックBB7を先頭とする「融合すべきタスクグループ」を若干表現を変更するものの構成を変えないで図11Aに再掲し、この図11Aを用いて以下の説明を行う。
演算処理要素110は、図3/STEP018「融合すべきタスクグループ決定」処理終了後、本発明の「条件判定ステップ」の一例である次の図3/STEP020「複製のための所定条件充足」判定処理に進む。
前述の基準タスク及びそれに第1後続タスク、第2後続タスクなどの後続タスクを加えたタスクグループ、すなわちこれまで説明してきた「融合すべきタスクグループ」に含まれる後続タスクグループの中に並列実行可能なタスクあるいはタスクグループが存在しない場合は、前述の基準タスク、第1後続タスク、第2後続タスクを含むタスクグループを一つのタスクに融合することにより条件分岐を有するタスクを一つの融合されたタスクの中に隠蔽することができる。つまり、この場合はこれまでの図2の処理フローと結果は同じなので、並列実行可能なタスクあるいはタスクグループが存在する場合を中心に以下に説明する。
このようなタスクあるいはタスクグループが存在する場合、演算処理要素110は、基準タスクに含まれる条件分岐を当該並列実行可能なタスクあるいはタスクグループの数から1を引いた数だけ複製する。例えば、並列実行可能なタスクあるいはタスクグループの数が3である場合、演算処理要素110は、基準タスクに含まれる条件分岐を3−1=2だけ複製し、基準タスクに含まれる条件分岐と併せて3つの条件分岐が存在するようにする。そして、基準タスクに含まれる条件分岐と、複製された条件分岐との各々に当該並列実行可能なタスクを後続させ、それぞれの条件分岐と当該条件分岐に後続するタスクを融合することにより、条件分岐と当該並列実行可能なタスクとをその数だけのマルチプロセッサシステムの(複数の)プロセッシングエレメントPEにそれぞれ実行させることができて並列度を増すことができる。
条件分岐の複製処理の詳細については、特開2014−160453号公報に記載されているが、本発明においては、図2の並列プログラムの生成の処理フローと結合することにより、より多くの並列実行可能なタスクの抽出が可能である。以下、そのことを説明する。
以下において、基準タスクに含まれる条件分岐を「対象の条件分岐」と適宜いう。
演算処理要素110は、複製してタスク融合するか、複製しないでタスク融合するかを決定するために、複製のための所定条件を充足するか否かを判定する(図3/STEP020)。
所定条件は、少なくとも、対象の条件分岐の複数の分岐方向のうち、一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクまたはタスクグループの間に互いにデータ依存を有しないという並列実行可能条件を含む。このように、当該一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクまたはタスクグループの間に互いにデータ依存を有しない場合、当該一の分岐方向を以下、「対象の分岐方向」という。また、ここで言う「一の分岐方向」というのは、最早実行可能条件解析を行う前の状態、例えば図6のMFGに表現されている状態で使われる表現であり、最早実行可能条件解析を行った後の状態、例えば図8のMTGに表現されている状態では、実線アークで束ねられた破線エッジが示す(ANDの関係にある)複数の分岐方向として表現されることもある。当然のことながら、MTG上でも「一つの分岐方向」であるばあいもある。そして、「対象の分岐方向」は、MFG上では前記「一の分岐方向」を示し、MTG上では実線アークで束ねられた破線エッジが示す(ANDの関係にある)複数の分岐方向を示すこともあるとする。
図11Aに示されるように、基本ブロックBB8、BB10が基本ブロックBB7の条件分岐のANDの関係にある(実線アークで束ねられた)分岐方向に制御依存している。また、基本ブロックBB9が、基本ブロックBB7の条件分岐の基本ブロックBB8に向かう分岐方向に間接制御依存している。
また、基本ブロックBB12が、基本ブロックBB7に含まれる条件分岐の基本ブロックBB8に向かう分岐方向とはORの関係にある(破線アークで束ねられた)異なる分岐方向に拡張制御依存し、基本ブロックBB8の条件分岐の基本ブロックBB9に向かう分岐方向とはORの関係にある異なる分岐方向にに拡張制御依存している。
演算処理要素110は、図3/STEP020において所定条件を充足すると判定すると(図3/STEP020‥YES)、並列実行可能数から1引いた数まで、基準タスクを複製する(図3/STEP022)。
ここで、条件分岐あるいは基準タスクの複製の具体的な説明に入る前に、「条件分岐の複製」について、若干掘り下げて説明する。
複製対象となる条件分岐を含む基準タスクには、一般的に条件分岐以外に、条件分岐がデータ依存するステートメントの集合、すなわち条件分岐の分岐方向を決める条件を設定するステートメントの集合が含まれる。本発明では、このようなステートメントの集合を「条件設定ステートメント群」と称する。さらに、条件分岐がデータ依存しないステートメントの集合、すなわち条件分岐とともに並列実行できる可能性のあるステートメントの集合も含まれる場合がある。同様に、このようなステートメントの集合を「並列実行可能性のあるステートメント群」と称する。
そして、条件分岐(のみ)が複製され、スタティックスケジューリング時に、後続タスク(グループ)とともに、異なるPEに割り当てられた場合、基準タスク中の条件分岐以外のステートメント(前述の「条件設定ステートメント群」と「並列実行可能性のあるステートメント群」)は一つのPEにより実行され、その実行の結果(データ)は複製された条件分岐及び後続タスクを処理するPEに転送される。従って、この場合は実行結果の転送に要する時間が並列プログラムの処理時間に追加される。
また、基準タスク全体を複製した場合には、各PEは条件設定ステートメント群の処理を各々実行するので、PE間のデータ転送は不要であり、データ転送の時間は並列プログラムの処理時間に追加されない。しかし、複製された基準タスクを割り当てられたPEのすべてが実行するために、消費電力については増大する可能性がありやや不利となる。また、基準タスクに並列実行可能性のあるステートメント群があり、しかも条件分岐及び条件設定ステートメント群との間でデータ依存関係がなければ、条件分岐及び条件設定ステートメント群と並列実行可能である。従って、複製された基準タスクを実行するPEとは異なるPEに、並列実行可能性のあるステートメント群を割り当てれば、並列プログラムの処理時間を減らすことができる。
従って、条件分岐のみを複製することに代えて、条件分岐及び条件設定ステートメント群だけを新たなタスクとし、これを複製することにより、各PEが最低限の時間で条件分岐の条件設定を行い、しかもデータ転送を必要としないので、基準タスクを複製する場合に比して並列プログラムの処理時間を減らすことができる。
このようなことに鑑みると、、単に条件分岐のみの複製のみならず、「条件分岐及び条件設定ステートメント群」の複製、そして基準タスクの複製(「並列実行可能性のあるステートメント群」が存在しない場合も含む)に従って生じる条件分岐の複製も、本発明の「条件分岐の複製」の例に該当する。
ここで、再び図3/STEP022「条件分岐の複製」の説明に戻る。
例えば、図11Aに示される例では、基本ブロックBB8及びBB9と、基本ブロックBB10とが互いにデータ依存を有しないから、基本ブロックBB7に含まれる条件分岐の対象の分岐方向に後続する並列実行可能数は2である。
演算処理要素110は、図11Aに示される基準タスクとしての基本ブロックBB7に含まれる条件分岐を並列実行可能数「2」から1引いた数「1」だけ複製する。これにより、演算処理要素110は、図11Bに示されるように、基本ブロックBB7である基準タスクST1、複製された条件分岐を含む基準タスクST2を生成する。
そして、演算処理要素110は、対象の条件分岐の対象の分岐方向に制御依存、間接制御依存又は拡張制御依存しているタスクまたはタスクグループを、いずれかの基準タスクに後続させる(図3/STEP024)。演算処理要素110は、対象の条件分岐の対象の分岐方向に制御依存、間接制御依存又は拡張制御依存しているタスクまたはタスクグループのうち、互いにデータ依存を有しないタスクまたはタスクグループを、複製された基準タスクも含むそれぞれ異なる基準タスクに含まれる条件分岐の対象の分岐方向に後続させるようにする。
例えば、図11Aにおいて、基本ブロックBB7に含まれる条件分岐の対象の分岐方向(図11Aで実線アーチで囲まれている分岐方向)に対し、基本ブロックBB8及び基本ブロックBB10が制御依存し、基本ブロックBB9及びBB12が間接制御依存している。従って、BB8、BB9及びBB12は後続タスクグループFTG2を構成し、FTG2とデータ依存、制御依存のないBB10は後続タスクグループFTG1を構成する。そして、FTG1とFTG2とは並列実行可能であるため、基準タスクBB7を一つ複製してST2とし、BB7そのものはST1と名称変更する。そして、ST1に含まれる条件分岐の対象の分岐方向にFTG1を後続させ、ST2に含まれる条件分岐の対象の分岐方向にFTG2を後続させる。また、図11AのMTGにおいて、基本ブロックBB7に含まれる条件分岐の対象の分岐方向とは異なる他の分岐方向(実線アーチで囲まれていない分岐方向)に対し、基本ブロックBB12が拡張制御依存している。
このように、条件分岐の2つの分岐方向(この段落において、これらの2つの分岐方向を第1分岐方向、第2分岐方向という。)の双方に制御依存、間接制御依存または拡張制御依存している一のタスク(この段落において、第1タスクという。)がある場合には、演算処理要素110は、当該第1タスクを複製して第2タスクを生成し、第1タスクを一の条件分岐の第1分岐方向に後続させ、第2タスクを他の条件分岐の第2分岐方向に後続させてもよい。これに代えて、演算処理要素110は、第1タスクを一の条件分岐の第1分岐方向に後続させ、第2タスクを当該一の条件分岐の第2分岐方向に後続させてもよい。
具体的には、上記の場合、2つの分岐方向の双方に基本ブロックBB12が制御依存しているので、演算処理要素110は、BB12を複製してFTG2に含まれるBB12と同じタスクをもう一つ生成し、当該他の分岐方向に対する後続タスクグループFTG3に含める。そして、STG1の実行とSTG2の実行とは、マルチプロセッサシステムの異なるプロセッシングエレメントに割り当てることができる。
そのことをやや詳しく説明すると、図11Bに示されるように、基準タスクST1に含まれる条件分岐の当該対象の分岐方向(図11Aで実線アーチで囲まれている分岐方向に対応する分岐方向)に、後続タスクグループFTG1(この例ではSB10で構成)が制御依存しており、ST1の他の分岐方向には後続タスクがないので、演算処理要素110は、ST1とFTG1とをまとめて「融合すべきタスクグループ」STG1を形成する。また、同じく図11Bに示されるように、基準タスクST2に含まれる条件分岐の当該対象の分岐方向(図11Aで実線アーチで囲まれている分岐方向に対応する分岐方向)に、後続タスクグループFTG2(基本ブロックBB8、BB9及び基本ブロックBB12で構成)が制御依存しており、ST2の他の分岐方向には後続タスクグループFTG3(この例ではBB12で構成)が拡張制御依存しているので、演算処理要素110は、ST2、FTG2及びFTG3とをまとめて「融合すべきタスクグループ」STG2を生成する。BB12がFTG2とFTG3との二つの後続タスクグループに含まれる理由は、図11Aに示されるように、BB12が基準ブロックBB7(複製後のST2)の条件分岐の対象の分岐方向に間接制御依存するとともに、BB7の条件分岐の対象の分岐方向ではない他の分岐方向に拡張制御依存しているためである。
そして、STG1内の基準タスクST1に含まれる条件分岐の分岐方向がFTG1を実行する分岐方向に決まれば、STG2内の基準タスクST2に含まれる条件分岐の分岐方向もFTG2を実行する分岐方向に決まり、基準タスクST1に含まれる条件分岐の分岐方向がFTG1を実行する分岐方向とは異なる他の分岐方向に決まれば、基準タスクST2に含まれる条件分岐の分岐方向も同様に他の分岐方向に決まりFTG3が実行される。
なお、FTG3は、基準タスクST2に含まれる条件分岐の対象の分岐方向(FTG2が制御依存している分岐方向)とは異なる分岐方向に制御依存しているが、タスクグループSTG1の基準タスクST1に含まれる条件分岐の対象の分岐方向(FTG1が制御依存する分岐方向)とは異なる分岐方向に後続させることも可能であり、そのようにしても本発明の基本的な内容に反するものではない。
このように、図3/STEP022及びSTEP024を実行することにより、図11AのMTG(図8のBB7を基準タスクとして含む「融合すべきタスクグループ」)から、図11Bに示すように二つの(並列実行可能な)タスクグループSTG1及びSTG2を新たに抽出することができた。
以上、条件分岐の複製について、図8のMTGから抜き出した、BB7を基準タスクとして含む「融合すべきタスクグループ」から並列実行可能なタスクグループSTG1及びSTG2を抽出する過程を図11A及び図11Bを用いて説明してきたが、同じく図8のBB1を基準タスクとする「融合すべきタスクグループ」もBB7を基準タスクとして含む「融合すべきタスクグループ」と同様の構成であるので、図11A・図11Bと同様に2つの並列実行可能なタスクグループ(これをSTG3、STG4とする)を「融合すべきタスクグループ」として新たに抽出することができる。
ここまで、図3/STEP020において所定条件が充足されると判定された場合(図3/STEP020‥YES)の融合すべきタスクグループ決定処理(図3STEP018)について詳しく説明してきた。
この後、新たに抽出した「融合すべきタスクグループ」を含むMTGに基づいて、演算処理要素110は、さらに並列実行可能なタスクの有無を解析するために、図3/STEP014に処理を戻し、再び図3/STEP020を通ることになるが、その場合にタスク複製の所定条件である並列実行可能なタスクあるいはタスクグループが存在しないとすると図3/STEP026の融合処理に進む。
例えば、図8及び図11A・Bを基に説明したように新たに抽出した「融合すべきタスクグループ」STG1、STG2、STG3、STG4にはさらに並列実行可能なタスクが存在しないので、それらを融合処理して新たに4つのタスクを生成することになるが、それらの4つのタスクをそれぞれblock3、block4、block5、block6とすると、これらの新たに生成されたタスクを含むMTGは図14Bに示すように、並列実行可能なタスク数が7になり、単純にタスク融合する図14Aの場合に比して2多く、また従来の特許文献1のタスク融合の方法に比して4多くなる。このように並列実行可能なタスク数が多いとスケジューリングの自由度が増す。
次に、演算処理要素110は、図2の処理フローの場合同様に、STEP028のスケジューリング処理、続いてSTEP030の並列プログラム(ソースコード)の生成、そしてSTEP032のバイナリコードの生成を経て、すべての処理を終了する。STEP028以降の処理は、図2における説明と同様なので、詳しくは説明しないが、図8に本発明を適用した場合の並列実行可能なタスク数が7に増えたことによって、前述したように、スケジューリングの自由度が増しより効果的な並列プログラムの生成が可能になる。
これまで、図6のMFGに示されるプログラムを例に挙げて、本発明(図2及び図3に示す並列化の処理フロー)を詳細に説明してきたが、もう一つの例として、図12に示されるように、図6のMFGとは異なるMFGの例についても説明する。図12のMFGでは、基本ブロックBB4からの制御フローを示す破線がBB5ではなく基本ブロックBB6に向き、基本ブロックBB10からの制御フローが基本ブロックBB11でなく、基本ブロックBB12に向いている点が、図6のMFGと異なっている点である。
この場合、基本ブロックBB5は、基本ブロックBB1の条件分岐の分岐方向BB15に制御依存し、基本ブロックBB11は、基本ブロックBB7の条件分岐の分岐方向BB711に制御依存する。
演算処理要素110は、図6のMFGの場合と同様に、各タスクの制御依存と当該各タスク間のデータ依存の両方を解析し、その結果を用いて最早実行可能条件解析を行う(図2又は図3/STEP014)。その結果を図13に示す。図13と図7とを比較すれば、図7の最早実行可能条件の表では、BB5及びBB11の欄は空欄であったが、図13の最早実行可能条件の表では、BB5の欄にはBB15が記載され、BB11の欄にはBB711が記載されている。すなわち、図7に比してBB5及びBB11に依存関係のあることがわかる。
演算処理要素110は、最早実行可能条件解析の結果を用いて、MTGを生成する(図2又は図3/STEP016)。具体的には、図12のMFGから生成されたMTGを図15に示す。このMTGから、図6のMFGより生成した図8のMTGにおいては、BB5及びBB11は他のタスクあるいはタスクグループに依存関係を有しなかったが、図15のMTGの場合は、BB5及びBB11に依存関係が生じていることがわかる。そのため、図15のMTGを基に融合すべきタスクグループ決定処理」(図2又は図3/STEP018)を実行すると、図8のMTGを基にした場合と異なり、BB5はBB1を基準タスクとして含む「融合すべきタスクグループ」に含まれ、BB11はBB7を基準タスクとして含む「融合すべきタスクグループ」に含まれることになる。そのことは、BB7を基準タスクとする融合すべきタスクグループを抜き出して示す図16を見れば明らかである。従って、図2/STEP026における融合処理により、BB1を基準タスクとする融合すべきタスクグループは新たなタスクblock1に融合され、BB7を基準タスクとする融合すべきタスクグループは新たなタスクblock2に融合され、二つの新たなタスクと依存関係のないBB13とともに図18AのMTGが生成される。この図からわかるように、BB5とBB11とがそれぞれblock1及びblock2に融合されたために、並列実行可能なタスク数は3となり、図14Aに比して少なくなっている。
ここで、図12のMFGあるいは図15のMTGを基にした「融合すべきタスクグループ」に図3/STEP020〜024を適用する。説明を簡明にするために、図15のMTGからBB7を基準タスクとする融合すべきタスクグループを抜き出して図17Aに表示する。この図では、図11Aに加えてBB11が、基準タスクBB7の条件分岐のANDの関係にある分岐方向に後続するFTG1(BB10より構成)及びFTG2(BB8、BB9及びBB12より構成)、その分岐方向とは異なる分岐方向に後続するFTG3(複製したBB12)に加えて、FTG3への分岐方向とANDの関係にある分岐方向に後続するように加えられる。このBB11を後続タスクグループFTG4とする。
以上の説明からわかるように、BB7に後続する4つのタスクグループFTG1〜FTG4のうち、FTG1とFTG2とはデータ依存の関係も持たないので両者は並列実行可能であり、FTG3とFTG4も同様にデータ依存の関係も持たないのでこの両者も並列実行可能である。そして、FTG1/FTG2とFTG3/FTG4とはBB7の条件分岐のORの関係にある分岐方向に後続している。
従って、図3/STEP020では、演算処理要素110は、融合すべきタスクグループに並列実行可能なタスクあるいはタスクグループが存在すると判断して、図3/STEP022において基準タスクBB7を一つ複製してそれをST2とする(元の基準タスクBB7は名称変更してST1とする)。そして、図3/STEP024において、演算処理要素110は、新たに生成された基準タスクST1の一の分岐方向にFTG1を後続させ、当該一の分岐方向とは異なる分岐方向にFTG4を後続させ、基準タスクST2の当該一の分岐方向に対応する分岐方向にFTG2を後続させ、当該一の分岐方向とは異なる分岐方向に対応する分岐方向にFTG3を後続させる。ここで、ST1の条件分岐の分岐方向がFTG1を実行する方向である場合には、ST2の条件分岐の分岐方向はFTG2を実行する方向になり、ST1の条件分岐の分岐方向がFTG4を実行する方向である場合には、ST2の条件分岐の分岐方向はFTG3を実行する方向になる。
次に、演算処理要素110は、図3/STEP014に処理を戻し、STEP016を経て、STEP018において改めて融合すべきタスクグループ決定処理を行う。そのようにして、基準タスクST1、後続タスクグループFTG1及びFTG4は一つの融合すべきタスクグループSTG1となり、基準タスクSTG2、後続タスクグループFTG2及びFTG3はもう一つの融合すべきタスクグループSTG2が生成される。この結果を図11BのMTGに示す。この場合、融合すべきタスクグループSTG1は、ST1、FTG1及びFTG3で、融合すべきタスクグループSTG2は、ST2、FTG2及びFTG4で、それぞれ構成されてもよい。つまり、並列実行可能な後続タスクグループが同じ融合すべきタスクグループに含まれないように構成すればよい。
続いて、演算処理要素110は、図3/STEP020において、融合すべきタスクグループSTG1及びSTG2にさらに並列実行可能なタスクが存在しないかどうかの判定をし、存在しないと判定すれば、STG1及びSTG2の融合処理を行う(図3/STEP026)。すなわち、STG1及びSTG2は、それぞれ融合によって生成されたタスクblock3及びblock4となる。
以上、基準タスクBB7を含む融合すべきタスクグループについて説明してきたが、基準タスクBB1を含む融合すべきタスクグループについても同様の処理を行うことができる。つまり、BB7をBB1に、BB8をBB2に、BB9をBB3に、BB10をBB4に、BB11をBB5に、BB12をBB6に対応させれば、図17A及び図17BのMTGはBB1を含む融合すべきタスクグループにも適用できる。その結果として融合によってタスクblock5、block6を生成する。
以上をまとめると、図15のMTGは融合処理の結果として、図18Bのようになる。
この図からわかるように、図15のMTGに基準タスクの複製を含む図3/STEP20〜STEP026の処理を行った場合の並列実行可能なタスク数は5になり、同様に図14Aの場合に比して少なくなっている。これは、図6と図12に表されるプログラムの特性によるものである。
(作用効果)
本実施形態の並列化コンパイラCによれば、並列化コンパイル装置100(コンピュータ)が、図2及び図3のSTEP002〜STEP032、特に本発明の特徴であるSTEP018〜STEP026における並列化のためのタスク融合処理の技術を図6及び図12のMFGで表された逐次プログラムに適用して、それぞれ図14A/図14B及び図18A/図18Bに示されたMTGを生成することができた。ここで図番末尾にAがつく図は図2の処理フローにより生成されたMTGを、同じくBがつく図は図3の処理フローにより生成されたMTGを示している。
また、従来技術である特許文献1の融合技術を図6及び図12のMFGに適用して生成したMTGをそれぞれ図14C及び図18Cに示す。
まず、図14A/B/Cについて比較すると、図14Aの並列実行可能なタスク数は5(そのうち融合によって生成されたタスク数は2)であるが、図14Cについては同じく並列実行可能なタスク数は3(同2)であり、並列実行可能なタスク数は本発明(図2の例)を適用した方が多くなる。また、図14Bの並列実行可能なタスク数は7(同4)となり、条件分岐の複製技術と組み合わせた本発明(図3の例)を適用するとさらに多くなることがわかる。
また、図18A/B/Cについても、図14A/B/Cの場合と同様、並列実行可能なタスク数は、図18Aの例では3、図18Bの例では5、図18Cの例では3となり、図3の処理フローを適用した場合(図18B)が最も多い。そして、図2の処理フローを適用した場合(図18A)及び特許文献1の技術を適用した場合(図18C)の両者の場合は同じとなる。図12のMFGで表された逐次プログラムに適用した場合は、図18Aの例におけるblock1及びblock2と、図18Cの例におけるblock7及びblock8とそれぞれ同じタスクとなっている。図14A/Cとのこの差は、図6のMFGで表される並列化対象となる逐次プログラムの構成との差異によるものである。このように、並列化対象である逐次プログラムの構成によっては融合処理によって抽出される並列実行可能なタスク数は従来技術と同じ場合もあるが、従来技術を下回ることはない。
以上の整理からわかるように、本発明の並列化コンパイラによれば、従来技術に比して
並列実行可能なタスクの抽出可能性を損なうことがない。
(変形態様)
図2/STEP026では、タスク融合後のMTGを生成していたが、この際には改めてデータ依存等の解析を行ってもよいし、タスク融合前のデータ依存等の関係に基づいてタスク融合後のMTGを生成してもよい。すなわち、融合前のタスクグループに含まれるいずれかのタスク(タスクT1という。)がデータ依存を有しているタスク(タスクT2という。)があると仮定する。この場合、当該タスクグループを融合して生成した新たなタスク(以下、タスクT3という。)も、タスクT2にデータ依存する。このような関係を利用すれば、融合後に改めてタスク間のデータ依存を解析する必要はない。
(特許文献1との対比)
特許文献1と比較した本発明の優位性については、すでに十分説明しているが、改めて図19に示すような4つのタスクからなる簡単な逐次プログラムのMFG、および図20に示すような図16のMFGから生成したMTGを参照して、特許文献1と比較した本発明の優位性を簡明に説明する。
まず、特許文献1の技術も本発明の技術も、条件分岐とそのすべての分岐方向の各々に後続するすべてのタスクを一つのタスクとして融合してそのタスクをマルチプロセッサシステムの一つのプロセッシングエレメントに割り当てること(スタティックスケジューリング)により、プログラム実行時のスケジューリング処理を不要にするという点では、同じ目的を持っている。このような条件分岐を含むタスクグループを一つのタスクとして融合することは、前述したように、融合によってタスクの中の条件分岐が見えなくなるので「条件分岐の隠蔽」という。
しかし、特許文献1と本発明との間には、融合するタスクの範囲に差があり、後者では融合するタスクグループと依存関係のないタスクを並列実行可能なタスクとして抽出しやすいという大きな利点がある。その基本原理を前述の例を基に説明する。
特許文献1の技術(本明細書の[背景技術]において説明した技術)によれば、図196のMFGにおいて、各タスク間の制御依存性(本明細書の「制御フロー」に相当)に基づき、異なるタスクに分岐する処理を有するタスクBB101を始端タスクとして特定するとともに、始端タスクBB101を始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちのいずれか一つであるSB104を終端タスクとして特定する。
そして、特許文献1の技術では、特定された始端タスクBB101と、始端タスクを始点とする処理における終端タスクSB104と、始端タスクBB101の実行後であって、終端タスクSB104の実行前に実行されるすべてのタスクすなわちSB102及びSB103の、4つのタスクをを新たな一つのタスクとして融合させる。すなわち、特許文献1において、融合されるタスクは、図19で一点鎖線で囲まれたタスクグループTG1となり、それが融合されると同じ図19に示すように新たなタスクblockT1が生成される。そして、タスク融合後のMTGも同図に示されている。
他方、本発明によれば、図2/STEP012において、図19に示されるMFGが生成された後、図2/STEP014の最早実行可能条件解析がなされる。
図19に示されるMFGにおいては、基本ブロックBB101の条件分岐の分岐方向BB101102にサブルーチンブロックSB102が制御依存している。また、基本ブロックBB101の条件分岐の分岐方向BB101103にサブルーチンブロックSB103が制御依存している。
しかし、基本ブロックBB101の条件分岐の分岐方向が分岐方向BB101102、分岐方向BB101103のいずれになってもサブルーチンブロックSB104は実行されるので、サブルーチンブロックSB104は、基本ブロックBB101の条件分岐の分岐方向BB101102及びBB101103のいずれにも制御依存及び間接制御依存してない。また、サブルーチンブロックSB104は、サブルーチンブロックSB102、SB103にデータ依存もしていないので、基本ブロックBB101の条件分岐の分岐方向BB101102及びBB101103のいずれにも拡張制御依存もしていない。
このような最早実行可能条件解析に基づいて、図2/STEP016において、図17に示されるMTGが生成される。
そして、図2/STEP018の融合すべきタスクグループの決定において、このステップの詳細なフロー示す図9/STEP202において、タスクB101が基準タスクとして特定される。そして、図9/STEP204において、タスクBB101の条件分岐に制御依存、間接制御依存又は拡張制御依存するタスクSB102、SB103が第1後続タスクとして特定され、基準タスクBB101と第1後続タスクSB102、SB103とがタスクグループとして特定される。そして、図19のMFGの場合には当該タスクグループと依存関係(データ依存及び制御依存)を有するタスクは存在しない。すなわち、本発明において融合されるタスク(本明細書で言う「融合されるべきタスクグループ」)は、図20に二点鎖線で囲まれたタスクグループTG2となる。
一方、サブルーチンブロックSB104は、上述したように、基本ブロックBB101の条件分岐のいずれの分岐方向にも制御依存、間接制御依存、及び拡張制御依存していない。このため、図2/STEP018の融合すべきタスクグループの決定において、サブルーチンブロックSB104は融合すべきタスクグループには含まれない。
そして、図2/STEP026において、融合すべきタスクグループTG2が融合されて、新たなタスクblockT2が生成される。タスクグループTG2には、上述したように、サブルーチンブロックSB104は含まれていない。従って、融合後のMTGは図20のようになる。
図19及び図20における融合後のMTGを比較すれば明らかなように、抽出される並列実行可能なタスク数が、特許文献1の技術による場合が1(図19)、本明細書の並列化技術による場合が2(図20)となり、本発明によれば、並列性の抽出を特許文献1よりも適切に行うことが出来る。