(57)【要約】【課題】タスク数が多いプログラムに対して、短時間で並列化スケジューリング結果を得る。【解決手段】プログラムを記憶する記憶部と、プログラム中のタスクの実行条件の全ての条件下での処理時間を求めて処理時間のタスクごとの最長処理時間と最短処理時間との差が所定値より小さいタスクを固定タスクとし、前記差が所定値より大きいタスクを変化タスクとして判別して記憶部に判別した結果を記憶するタスク判別部と、変化タスクは、全ての実行条件ごとに当該変化タスクの処理時間を計算し、固定タスクは、当該タスクの処理時間が最長となる実行条件での当該固定タスクの処理時間として計算して複数の演算処理装置を有する並列演算処理装置の並列化スケジュールの処理時間の計算を行うスケジューリング部と、前記並列化スケジュールの中で、最長処理時間が最短の前記並列化スケジュールを出力する出力部を備えた。【選択図】図３
2010262471.tif 000002
【特許請求の範囲】
【請求項１】
１の実行条件及び前記実行条件下での処理を含むタスクを構成要素とするプログラムを記憶する記憶部と、
前記プログラム中の前記タスクの前記実行条件の全ての条件下での処理時間を求めて前記処理時間の前記タスクごとの最長処理時間と最短処理時間との差の順に前記タスクを並べ、最も前記差が大きいタスクから所定数の前記タスクを変化タスクとし、前記変化タスク以外を固定タスクとして判別して前記記憶部に前記判別した結果を記憶する解析対象抽出部と、
前記変化タスクに対しては、全ての実行条件ごとに当該変化タスクの処理時間を計算し、前記固定タスクに対しては、当該タスクの処理時間が最長となる実行条件での当該固定タスクの処理時間として計算して複数の演算処理装置を有する並列演算処理装置の並列化スケジュールの処理時間の計算を行うスケジューリング部と、
前記並列化スケジュールの中で、最長処理時間が最短の前記並列化スケジュールを出力する出力部を備えた並列化スケジューリング装置。
【請求項２】
変数により表現された１の実行条件を表す条件節及び前記実行条件が真及び偽となる場合の処理を表す帰結節を含むタスクを構成要素とするプログラムを記憶する記憶部と、
前記プログラム中の前記条件節に現れる前記変数ごと前記タスクごとに前記実行条件が真の場合の処理時間及び偽の場合の処理時間を求め、前記変数ごとの前記実行条件が真の場合の処理時間の積算値と偽の場合の処理時間の積算値との差が大きい前記変数を前記条件節に含む前記タスクから順に所定数の前記タスクを変化タスクとし、前記プログラム中の前記変化タスク以外のタスクを固定タスクとして前記記憶部に記憶する解析対象抽出部と、
前記変化タスクは、全ての実行条件ごとに当該変化タスクの処理時間を計算し、前記固定タスクは、当該タスクの処理時間が最長となる実行条件での当該固定タスクの処理時間として計算して数の演算処理装置を有する並列演算処理装置の並列化スケジュールの処理時間の計算を行うスケジューリング部と、
前記並列化スケジュールの中で、最長処理時間が最短の前記並列化スケジュールを出力する出力部を備えた並列化スケジューリング装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行条件とその条件下での処理の組合せで表現されるプログラムを並列化された演算装置で処理するための並列化スケジューリング装置に関するものである。
【背景技術】
【０００２】
従来の並列スケジューリング装置においては、実行条件とその条件下での処理の組合せで表現されるプログラムを並列化された演算装置で処理する並列化スケジュールを求めるものである。従来の並列スケジューリング装置は、全ての実行条件に対して並列化スケジューリングを行い、全ての並列化スケジューリング結果に対して、それぞれ全ての実行条件下での処理の時間を総当りで当てはめて、各並列化スケジューリング結果における最長スケジュール長（以下、最悪実行時間）を求め、この最悪実行時間が最短となる並列化スケジューリング結果を出力する（例えば、非特許文献１参照。）。
【０００３】
ここで、実行条件とこの実行条件下での処理の組み合わせで表現されるプログラムの中で、一組の実行条件とこの実行条件下での処理の組み合わせをスケジューリングの最小単位であるタスクとして扱うとする。すると、総当りで上述の並列化スケジュール結果を計算するには、タスク数をＮとして、２の２Ｎ乗のスケジュール長の計算が必要になる。
【０００４】
具体的には、タスク数をＮとすると、各タスクが１つの実行条件を持つため、実行条件の組合せの数は２のＮ乗通りになる。この２のＮ乗通りの実行条件のそれぞれについて、並列化スケジューリングを行うため、２のＮ乗通りの並列化スケジュールが得られる。この２のＮ乗通りの並列化スケジュールの中から、全ての実行条件下において、最悪実行時間が最短となる並列化スケジュールを特定する。このため、ここで得られた２のＮ乗通りの並列化スケジュールのそれぞれに対して、２のＮ乗通りの実行条件における各タスクの処理時間を総当りで当てはめてスケジュール長を算出する。このスケジュール長を計算する処理は、タスク数をＮとすると、２の２Ｎ乗通りの計算（並列化スケジュールの計算）が必要になる。
【０００５】
従来の並列スケジューリング装置では、タスク数増加に伴う上記計算量の指数関数的な増加を緩和するため、タスク間の実行条件の相関関係を解析して、当該プログラムの処理時間に影響を与える実行条件のみを抽出し、抽出した実行条件に対して、総当りでスケジュール長を算出することが開示されている（例えば、非特許文献１参照。）。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】佐々木、南出、「条件解析による並列化スケジューリングの効率化」、２００８年度電気学会Ｃ部門大会講演論文集、９２４ページ
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来の並列スケジューリング装置では、全ての並列化スケジューリング結果に対して、全ての実行条件下での処理時間を総当りで当てはめて、各並列化スケジューリング結果の最悪実行時間が最短となる並列化スケジューリング結果を求めるので、タスクが多くなると、処理に時間を要する。例えば、タスク数が１０以上では、１分から数分以上の時間を要し、タスク数の増加に対して指数関数的に処理時間が長くなる問題があった。
【０００８】
また、タスク間の実行条件の間に相関関係が無い場合には、計算量を削減できないという問題もあった。
【０００９】
この発明は、上述のような問題を解決するためになされたもので、タスク数が多くなっても短時間で並列化スケジューリング結果を出力する並列化スケジューリング装置を得るものである。
【課題を解決するための手段】
【００１０】
本発明に係る並列化スケジューリング装置は、１の実行条件及び前記実行条件下での処理を含むタスクを構成要素とするプログラムを記憶する記憶部と、前記プログラム中の前記タスクの前記実行条件の全ての条件下での処理時間を求めて前記処理時間の前記タスクごとの最長処理時間と最短処理時間との差が所定値より小さい前記タスクを固定タスクとし、前記差が前記所定値より大きいタスクを変化タスクとして判別して前記記憶部に前記判別した結果を記憶するタスク判別部と、前記変化タスクは、全ての実行条件ごとに当該変化タスクの処理時間を計算し、前記固定タスクは、当該タスクの処理時間が最長となる実行条件での当該固定タスクの処理時間として計算して複数の演算処理装置を有する並列演算処理装置の並列化スケジュールの処理時間の計算を行うスケジューリング部と、前記並列化スケジュールの中で、最長処理時間が最短の前記並列化スケジュールを出力する出力部を備えたものである。
【発明の効果】
【００１１】
この発明は、実行条件によりタスクの処理時間の差が大きいタスクを解析対象として抽出する機能によって、タスク数が多いプログラムに対して、短時間で並列化スケジューリング結果を得ることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１の並列処理装置の構成図である。
【図２】実施の形態１の入力プログラムを示す図である。
【図３】実施の形態１の並列化スケジューリング装置の構成図である。
【図４】実施の形態１の並列化スケジューリングの探索を示す図である。
【図５】実施の形態１の実行条件パターンの削減を示す図である。
【図６】実施の形態１の入力プログラムの先行制約と、ＴＨＥＮ節及びＥＬＳＥ節実行時の処理時間を示す図である。
【図７】実施の形態１のタスク間の実行条件の相関関係を求めるための二分木の説明図である。
【図８】実施の形態１の実行条件解析部の処理手順を示すフローチャートである。
【図９】実施の形態１の解析対象タスクリストを示す図である。
【図１０】実施の形態１の実行条件の解析対象抽出の処理手順を示すフローチャートである。
【図１１】実施の形態２の入力プログラムのモデルを示す図である。
【図１２】実施の形態２の解析対象タスク抽出表を示す図である。
【図１３】実施の形態２の実行条件の解析対象抽出の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
実施の形態１．
図１は、この発明を実施するための実施の形態１における並列処理装置の構成図である。図において、並列処理装置には、２以上のプロセッシングエレメント１２（以下、「ＰＥ」と呼ぶ。）と、それぞれのＰＥ１２に接続されたローカルメモリ１０と、ＰＥ１２を相互に接続するためのバス１３と、バス１３に接続された共有メモリ１４とが設けられている。ここで、プロセッシングエレメントとは、種々の命令を実行可能な演算装置である。なお、ここでは、２個のＰＥ１２を有する並列処理装置の例を示したが、さらに多数のＰＥ１２がある構成でもよく、各ＰＥ１２は、バス１３に接続され、各ＰＥ１２にローカルメモリ１０が接続される。並列化スケジューリング装置は、並列処理装置の複数の演算装置（ＰＥ１２）で、実行する対象プログラムを並列処理させる並列化スケジュールを作成する。
【００１４】
ローカルメモリ１０は、対象プログラム全体の中で、当該ローカルメモリ１０が接続されているＰＥ１２で実行するプログラムを記憶する。ここで、プログラムとは、１の実行条件（条件節）及び当該実行条件下での処理（帰結節）を記述したタスクを構成要素とする。タスクは、変数と演算により表現されている。また、ローカルメモリ１０は、当該ローカルメモリ１０が接続されているＰＥ１２以外の他のＰＥ１２で実行されるプログラムと関係しない変数（他のプログラムで記載されていない変数）を記憶する。
【００１５】
共有メモリ１４は、並列化スケジューリング装置によって、異なるＰＥ１２に割当てられる並列化されたプログラム間で値の受渡しが必要となる変数である共有変数を記憶する。
【００１６】
ＰＥ１２は、接続されたローカルメモリ１２に記憶された並列化されたプログラムを順次実行する。各ＰＥ１２は、ローカルメモリ１２に記憶されたプログラムを実行する際に、当該ローカルメモリ１２及び共有メモリ１４との間で、値の読み書きを行う。
【００１７】
また、ＰＥ１２は、同期機構を持つ。この同期機構は、並列化されたプログラム間が持つ先行制約を満たすように、ＰＥ１２間で同期を取りながら処理を進め、演算結果の整合性を保つために用いられる。この先行制約は、変数間のフロー依存、逆依存、出力依存によって生じるものである。
【００１８】
同期機構は、ＰＥ１２間で同期を指示する信号である同期イベントを受け渡すことで、同期処理を実現する。ＰＥ１２は、同期イベントを送信する命令と、同期イベントを受信する命令を持つ。同期イベントの送信命令は、同期イベントの送信先のＰＥ１２を指定して同期イベントを送信する。一方、同期イベントの受信命令は、同期イベントの送信元のＰＥ１２を指定する。同期イベントの送信及び同期イベントの受信は、１つのＰＥ１２のみを指定することもできるし、複数のＰＥ１２を指定することもできる。１つのＰＥ１２を指定する場合は、同期イベントの送信命令、受信命令は、共に指定したＰＥ１２に対して、送信、受信の処理を行う。また、複数のＰＥ１２を指定する場合は、送信命令は指定した複数のＰＥ１２に対して一斉に同期イベントを送信し、受信命令は指定した全てのＰＥ１２からの同期イベントが揃う（受信する）まで待機する。
【００１９】
上述の同期イベントの送受信を行う命令は、並列化されたプログラムの間に設定された先行制約に応じて、並列化スケジューリング装置が、並列化されたプログラムの中に自動的に生成する。
【００２０】
具体的な処理について、変数Ａに関してフロー依存の関係にある２つの式を、２つのＰＥ１２に割り当てる際に、一方のＰＥ１（１２）で定義された変数を他方のＰＥ２（１２）が使用する場合を例に説明する。この場合には、一方のＰＥ１（１２）で、変数Ａを定義した直後に、他方のＰＥ２（１２）への同期イベントの送信命令を生成する。他方のＰＥ２（１２）は、変数Ａを使用する直前に、ＰＥ１（１２）からの同期イベントからの同期イベントの受信命令を生成する。
【００２１】
次に、上記の変数Ａに加えて、変数Ｂも、一方のＰＥ１（１２）から他方のＰＥ２（１２）に対してフロー依存の関係があり、変数Ａの先行制約が、変数Ｂの変更制約の前に存在し、変数Ａ、Ｂ間の先行制約に対して、他の変数の先行制約が関係しない場合を例に説明する。この場合には、変数Ａについての同期イベントの送受信と、変数Ｂについての同期イベントの送受信をまとめて、１つの同期イベントの受け渡しをすることができ、演算結果の整合性を保つことができる。
【００２２】
この例では、変数Ｂについての同期イベントの送信命令と、変数Ａについての同期イベントの受信命令を同期イベントの送受信の対として残し、変数Ａについての同期イベントの送信命令と、変数Ｂについての同期イベントの受信命令は、削除することができる。
【００２３】
以上のように、プログラムサイズの削減と、処理時間の短縮を目的にして、冗長な同期命令を１つの同期命令へまとめることができる。
【００２４】
図２は、この実施の形態１による入力プログラム２０を示す図である。プログラムは、条件判定とその条件下での処理の組合せによって構成される。図において、条件節を“条件判定１”、ＴＨＥＮ節を“処理１−Ａ，処理１−Ｂ，・・”、ＥＬＳＥ節を“処理１−ａ，処理１−ｂ，・・”で表現している。この条件節並びに帰結節（THEN節及びELSE節）の一まとまりをタスクと呼ぶ。
【００２５】
この図では、タスク１に続き、条件節として“条件判定２”、帰結節のＴＨＥＮ節が“処理２−Ａ，処理２−Ｂ，・・”、帰結節のＥＬＳＥ節が“処理２−ａ，処理２−ｂ，・・”がタスク２として記述されている例を示している。
【００２６】
本実施の形態のプログラムは、１階層のＩＦ文による条件判定（条件節）並びにこの条件判定結果が真の場合の処理を記述したＴＨＥＮ節及び条件判定結果が偽の場合意の処理を記述したＥＬＳＥ節を一まとまりとして、当該一まとまりの集合（タスク）で構成される。
【００２７】
また、ＩＦ文のＴＨＥＮ節またはＥＬＳＥ節の中に、ＩＦ文を持つ、階層構造を持つＩＦ節については、外側のＩＦ節の条件節と内側のＩＦ節の条件節の論理積を条件節とする、新たなＩＦ文を生成する。以上のようにして、構想構造を持つＩＦ文についても、上記１階層のＩＦ文によるプログラムへ変換（再構成）することによって、全て１階層のＩＦ文として処理できる。
また、図２の条件節は、変数同士や変数と定数の間における比較演算、論理演算またはこれらを組合せた演算で表現される。
【００２８】
図６は、本実施の形態による入力プログラムの先行制約と、ＴＨＥＮ節実行時及びＥＬＳＥ節実行時のそれぞれの処理時間との例を示す図である。図において、４つのタスクａ，ｂ，ｃ及びｄが存在する。この図は、入力プログラムの先行制約として、タスクａの実行後に、タスクｂ，ｃの実行が可能となり、タスクｂ及びタスクｃの両方の実行完了後に、タスクｄが実行可能となることを示している。
【００２９】
また、各タスクを示す丸の右側の記載は、（ＴＨＥＮ節の処理時間）／（ＥＬＳＥ節の処理時間）となっている。例えば、タスクａは、ＴＨＥＮ節実行の際は、２単位の処理時間を要し、ＥＬＳＥ節実行の際は、１単位の処理時間を要することを示している。
【００３０】
図３は、本実施の形態による並列化スケジューリング装置の構成を示す図である。以下、図に従って説明する。図において、並列化スケジューリング装置は、入力プログラム記憶部３０に記憶された入力プログラムを読み出して、字句構文解析部３１が字句及び構文解析を行い、スケジューリング部３２が並列化スケジューリングを行い、実行コード生成部３７が並列化スケジューリング結果に基づき実行コードを生成する。
【００３１】
入力プログラム記憶部３０は、図２に示すような条件判定とその条件下での処理の組合せによって構成されるプログラムが記憶された入力プログラム記憶部である。
【００３２】
字句構文解析部３１は、入力プログラム記憶部３０に記憶された入力プログラムを読み出して、入力プログラムに記述されている字句を取り出した後、構文解析を行い、並列化スケジューリング装置が持つプログラムの内部表現へ変換する。
【００３３】
スケジューリング部３２は、入力プログラム３０の内部表現に対して並列化スケジューリングを行い、指定されたＰＥ１２の数へ分割する。
【００３４】
実行コード生成部３７は、並列化スケジューリング装置の内部表現から、実行する並列処理装置が処理可能な実行コードを生成する。
【００３５】
スケジューリング部３２は、依存性解析部３３、実行条件の解析対象抽出部３４、実行条件解析部３５及び並列化スケジューリング部３６から構成される。
【００３６】
依存性解析部３３は、入力プログラムに記述された演算の対象である変数の使用と定義の関係から、フロー依存、逆依存及び出力依存の各依存関係の解析を行う。この解析によって、演算の間の先行制約が明らかとなる。以降の並列化スケジューリングにおいては、この演算の間の先行制約を満たすように、ＰＥ１２に対してタスクの割り当てを行う。
【００３７】
実行条件の解析対象抽出部３４は、与えられた基準に基づいて、入力プログラムのタスクの中から、後述する実行条件解析部３５が解析対象とするタスクを選択する処理を行う。
【００３８】
実行条件解析部３５は、並列化スケジューリング部３６が対象とする、タスクの実行条件の組合せを削減する処理を行う。なお、実行条件解析部３５の詳細は、後述する。
【００３９】
並列化スケジューリング部３６は、（１）実行条件解析部３５によって、削減された実行条件のパターンそれぞれに対して、並列化スケジューリングを行い、（２）これらの並列化スケジューリング結果に対して、総当りで各実行条件下での各タスクの実行時間の割り当てを行うことで、各並列化スケジューリング結果に対する最悪処理時間を求め、（３）最悪のスケジュール長が最も短い（最悪実行時間が最短となる）並列化スケジューリング結果を最適な並列化スケジューリング結果として特定する処理を行う。ここで、並列化スケジューリングのアルゴリズムの例として、クリティカルパス法が挙げられるが、この方法に限定される訳ではない。
【００４０】
また、並列化スケジューリング装置は、コンピュータによって実現され、字句・構文解析部３１や、依存性解析部３３、実行条件の解析対象抽出部３４、実行条件解析部３５、並列化スケジューリング部３６を含むスケジューリング部３２及び実行コード生成部３７に対応したソフトウェアと、これらのソフトウェアを実行するためのＣＰＵやメモリ等のハードウェアから構成されている。あるいは、字句・構文解析部３１並びに依存性解析部３３、実行条件の解析対象抽出部３４、実行条件解析部３５及び並列化スケジューリング部３６を含むスケジューリング部３２並びに実行コード生成部３７は、専用のハードウェアから構成されている。
【００４１】
また、並列化スケジューリング装置と、並列処理装置とは、例えばネットワークケーブルやＵＳＢケーブルなどの伝送線によって接続され、並列化スケジューリング装置によって並列化されたプログラムを、並列処理装置のプログラムを格納するＰＥ１２毎のローカルメモリ１０へ転送するよう構成されている。
【００４２】
図４は、本実施の形態による実行条件パターンと、実行条件パターン毎のスケジュールの総当りによる最適なスケジューリングの探索の説明図である。入力プログラムに含まれるタスク数がＮの場合、タスク群の実行条件のパターン数は、真偽の値がタスク数分だけ存在することになる。したがって、実行条件のパターン数は、２のＮ乗になる。最適な並列化スケジューリングは、この図に示すとおり、各実行条件のパターンにおける並列化スケジューリング結果を対象に、全ての実行条件パターンを割当てて、スケジュール長が最短となる並列化スケジューリングを特定するため、計算量は、２の２Ｎ乗のスケジュール長の計算となる。
【００４３】
図５は、実行条件解析部３５による、実行条件の組合せの削減の説明図である。図において、実行条件列ｋは、タスクｉの実行条件の真偽値ｋｉの集合であり、ｋ＝（ｋ１，ｋ２，・・・，ｋＮ）である。また、実行条件列の集合Ｋは、ｋの集合である。このＫは、タスク間の実行条件の相関関係を考慮していないため、存在しない実行条件の真偽値の組合せを含んでいる。
【００４４】
ここで、存在しない実行条件の真偽値の組合せとは、タスクが持つ実行条件の相関関係から、実際にはとり得ない実行条件の真偽値の組合せである。タスク１の条件節が変数Ａと定数ゼロの比較演算である“（Ａ＞０）”で、タスク２の条件節が同じく変数Ａと定数ゼロの比較演算である“（Ａ＞０）”の場合を例に挙げる。この場合、タスク１の実行条件の真偽値ｋ１が真の時、タスク２の実行条件の真偽値ｋ２も真となる。また、ｋ１が偽の時はｋ２も偽となる。しかし、ｋ１が真の時ｋ２が偽となることはなく、ｋ１が偽の時ｋ２が真となることもない。このように、タスクが持つ実行条件の相関関係から、タスクの実行条件の真偽値の組合せとして、存在するものと、存在しないものがある。存在しないタスクの実行条件の真偽値の組合せは、並列化スケジューリングを実施する際の対象から外すことができる。
【００４５】
一方、ＫＰはタスク間の実行条件の相関関係を考慮したｋの集合である。ＫＰタスク間の実行条件を考慮しているため、存在する実行条件の組合せのみを含んでいる。
【００４６】
このように、並列化スケジューリング部３６で総当りにより、最適な並列化スケジューリング結果を求める際に、実行条件解析部３５によって、対象となるタスク及び実行条件のパターンを削減しておくことで、総当りによる計算量を抑制することができる。
【００４７】
実行条件解析部３５では、タスク間の実行条件の相関関係を基に、存在しない実行条件の組合せを削除することで、最適な並列化スケジューリングを求めるための、総当りの計算量を抑制する。
【００４８】
次に、実行条件解析部３５による実行条件パターンの削減方法について述べる。図７は、実行条件解析部３５が、タスク間の実行条件の相関関係を求める際に作成する、二分木の説明図である。図において、実行条件の解析対象タスクをノードとし、そのタスクの条件節が真の場合をノードの左下に延びる実線で、そのタスクの条件節が偽の場合をノードの右下に延びる破線で表現している。例えば、図の実線７０は、タスク１の条件節が真となり、かつタスク２の条件節も真となる実行条件の組合せが存在することを表す。また、図の Ｘ印７１は、タスク１の条件節が真となり、タスク２の条件節が偽となる実行条件の組合せが存在しないことを表す。
【００４９】
この実行条件の組合せの存在の有無は、各タスクの条件節に記述された実行条件の組合せに対する充足可能性判定を行うことで求める。ここで、充足可能性判定とは、論理式が与えられたとき、その論理式に含まれる全ての変数の値を真または偽に定めることで、論理式の値を真にできるか否かを判定することである。
【００５０】
図８に実行条件解析部３５の処理の流れを示す。以下、図のフローチャートに沿って説明する。まず、ステップＳ３０は、実行条件解析対象のプログラムの先頭タスクを注目タスクに設定する。これは、図７のタスク１を注目タスクに設定する処理である。
【００５１】
次に、ステップＳ３１で注目タスクの条件節の論理式を作成する。これは、図７のタスク１の条件節の論理式を作成する処理であり、タスク１から左下に伸びる実線が示すパスである。
【００５２】
ステップ３３は、プログラム上での順序が注目タスクの次にくるタスクが存在するかを確認する。次にくるタスクがなければＡの呼出し元へ戻る。存在すれば、ステップＳ３４へ進む。
【００５３】
ステップＳ３４は、プログラム上での順序が注目タスクの次のタスクの条件節の論理式を作成する。これは、図７のタスク２の条件節の論理式を作成する処理である。タスク２から左下に伸びる実線が示すパスである。
【００５４】
ステップＳ３５は、注目タスクと次のタスクの論理式の論理積について充足可能性を評価する。これは図７の注目タスクであるタスク１の条件節の論理式と、タスク２の条件節の論理式の間で論理積をとり、この論理式間の論理積に対して、充足可能性を評価する処理である。
【００５５】
ステップ３６は、充足可能かどうかによって分岐を行なう。充足可能である場合は、ステップＳ４０ヘ進み、注目タスクと次のタスクを新たに注目タスクとして扱い、注目タスクと次のタスクの２つの論理式の論理積を新たな注目タスクの条件節の論理式とする。これは、図７の注目タスクであるタスク１とその次のタスクであるタスク２をまとめて新たな注目タスクとし、タスク１とタスク２の条件節の論理式の論理積を、この新たな注目タスクの条件節の論理式とする処理である。この処理を行った後、新たな注目タスクに対して、再帰的にステップＳ３３へ進む。
【００５６】
一方、ステップＳ３６で充足可能でない場合は、ステップＳ３７へ進む。ステップＳ３７は、注目タスクと、次のタスクの条件節の論理を反転した論理式を作成する。これは、図７のタスク２の条件節の反転した論理式を作成する処理である。この処理は、タスク２から右下に伸びる破線が示すパスを作成するものである。
【００５７】
ステップＳ３８は、注目タスクの論理式と次のタスクの反転した論理式の論理積について充足可能性を評価する。これは、図７の注目タスクであるタスク１の条件節の論理式と、タスク２の条件節の反転した論理式の間で論理積をとり、この論理式間の論理積に対して、充足可能性を評価する処理である。
【００５８】
ステップＳ３９は、充足可能かどうかによって分岐を行なう。充足可能である場合は、ステップＳ４０へ進む。一方、充足不可能でる場合は、Ａの呼出し元へ戻る。
【００５９】
以上のように、注目タスクを更新しながら、再帰的に実行条件の充足可能性判定を進める。
【００６０】
以上は、ステップＳ３１において設定した注目タスクの条件節の論理式を作成した後の処理である。図７では、タスク１の左下に伸びる実線から下についての充足可能性の判定に相当する。これらの処理を再帰的に行った後は、ステップＳ３２において、タスク１の条件節の論理を反転した論理式を作成し、同様に後続のタスクの実行条件との間で充足可能性判定を再帰的に行なう。これは、図７のタスク１から右下に伸びる破線から下についての充足可能性の判定に相当する。
【００６１】
このように、充足不能となる実行条件の組合せを、並列化スケジューリングの対象外とすることにより、並列化スケジューリング部で総当りによって最適な並列化スケジューリング結果を求める際に、対象となるタスク及び実行条件のパターンを削減することができるため、総当りによる計算量を抑制することができる。
【００６２】
ただし、相関関係を求めるための計算量も、タスク数Ｎの増加に伴って指数関数的に増加するため、タスク数Ｎが１０を超えると、計算量は多大となる。また、タスク間に相関関係が無い場合は、実行条件解析部でタスク間の相関関係を求めても、実行条件の組合せを削減することはできず、最適な並列化スケジューリングを求めるための、総当りの計算量は削減できない。そこで、実行条件の解析対象を抽出し、計算対象を限定する。
【００６３】
実行条件の解析対象抽出部３４は、与えられた条件に基づいて、実行条件解析部３５で対象とするタスクを、変化タスクとして予め抽出する。実行条件解析部３５では、抽出された変化タスクについての実行条件のみを解析し、残りのタスクである固定タスクの実行条件については解析の対象としない。
【００６４】
この時、解析の対象としない固定タスクについては、ＴＨＥＮ節及びＥＬＳＥ節の実行時間のうち、長い方の実行時間をそのタスクの実行時間として、固定的に（固定長の処理時間を）割当てる。
【００６５】
並列化スケジューリング部３６は、実行条件の解析対象抽出部３４で抽出した変化タスクについては、ＴＨＥＮ節及びＥＬＳＥ節の実行条件と処理時間を考慮する。実行条件の解析対象抽出部３４で抽出した変化タスク以外の固定タスクについては、固定長の処理時間を持つとして、抽出された実行条件に対して総当りで並列化スケジューリングを行い、最適となる並列化スケジューリングを求める。
【００６６】
本実施の形態では、ＴＨＥＮ節とＥＬＳＥ節の処理時間の差が大きいタスクを、実行条件の解析対象抽出部３４で抽出する変化タスクの条件とする。そして、タスクの処理時間の差が大きい上位Ｎ個のタスクを変化タスクとしてタスクに属性を付けて記憶し、実行条件解析部３５での実行条件の相関関係の解析対象とする。
【００６７】
タスクの処理時間の差が大きいタスク（変化タスク）を抽出するために、図９に示す解析対象タスクリストを用いる。この解析対象タスクリストは、タスクごとにＴＨＥＮ節とＥＬＳＥ節の処理時間の差を求め、ＴＨＥＮ節とＥＬＳＥ節の処理時間の差が大きいものから順にタスクを並べたものである。
【００６８】
次に、タスクの処理時間の差が大きいタスク（変化タスク）の抽出の処理を、図１０のフローチャートに沿って説明する。
【００６９】
まず、ステップＳ１０は、プログラムの先頭タスクを注目タスクとして設定する。ステップＳ１１からステップＳ１７の注目タスクに関する処理ループは、プログラムに未処理のタスクがある間繰り返す。
【００７０】
この処理ループにおいて、ステップＳ１２は、注目タスクのＴＨＥＮ節／ＥＬＳＥ節の処理時間の差を求める。次に、ステップＳ１３は、ステップＳ１２で求めた注目タスクのＴＨＥＮ節／ＥＬＳＥ節の処理時間の差について、図９の解析対象タスクリストの最後尾のタスクのＴＨＥＮ節／ＥＬＳＥ節処理時間差と比較する。次に、ステップＳ１４は、注目タスクのＴＨＥＮ節／ＥＬＳＥ節の処理時間差が大きければ、解析対象タスクリストの最後尾のタスクを、注目タスクに置き換える。そして、ステップＳ１５は、解析対象タスクリストを処理時間の差に関して降順にソートする。そして、ステップＳ１６は、プログラム中の注目タスクを次のタスクへ進める。
【００７１】
一方、ステップＳ１３での比較において、注目タスクのＴＨＥＮ節／ＥＬＳＥ節の処理時間差が、解析対象タスクリストの最後尾のタスクのＴＨＥＮ節／ＥＬＳＥ節の処理時間差より小さいか、同じであれば、解析対象タスクリストの内容は更新せず、ステップＳ１６へ進み、プログラム中の注目タスクを次のタスクへ進める。全てのタスクについて、処理を終えるとループを終了する（ステップS１７）。
【００７２】
このように、プログラム中の全てのタスクについて、図１０に示すフローチャートを実行すると、処理時間差の大きい上位Ｎ個のタスクを抽出することができる。ここで抽出したＮ個のタスクを変化タスクとし、変化タスク以外を固定タスクとする。変化タスクを対象に、実行条件解析部３５において、これらのタスク間の実行条件の相関関係を基に、存在しない実行条件の組合せを削除し、最適な並列化スケジューリングを求めるための、総当りの計算量を抑制する。
【００７３】
そして、並列化スケジューリング部３６において、存在しない実行条件の組合せを削減した後の各パターン全てについて並列化スケジューリングを行う。こうして求めた並列化スケジューリング結果に対して、総当りで各実行条件下での各タスクの実行時間を割り当て、各並列化スケジューリングに対する最悪のスケジュール長を求める。この最悪のスケジュール長が最も短く、最悪実行時間が最短となる並列化スケジューリングを、最適な並列化スケジューリング結果として出力する。
【００７４】
処理時間差の大きい上位Ｎ個を対象にするが、Ｎの決め方の例として、最適な並列化スケジュールを得るまでの時間に基づいて決める方法がある。また、実行条件解析後のスケジューリングのパターン数に基づいて求める方法がある。
【００７５】
まず、最適な並列化スケジューリングを得るまでの時間に基づいた方法について説明する。この方法では、最初にＮを２や３といった小さな値に設定し、最適な並列化スケジューリングを求める。この時間が、例えば１時間未満など実用的な時間であれば、Ｎの値を１加算し、実行条件の解析対象のタスクを増やした上で、改めて最適な並列化スケジューリングを求める。このように、実行条件の解析対象タスクの数を、最適な並列化スケジューリングを得るまでの処理時間に基づいて繰り返し増加させることで、例えば１時間など許容可能な設定時間内で計算を終えるＮまで、最適なスケジューリング結果を得ることができる。設定した時間までに最適なスケジューリング結果が得られない場合は、その前のＮの値で得られたスケジューリング結果を、最適なスケジューリング結果として扱うことができる。
【００７６】
次に、並列化スケジューリングを行う前の段階で、実行条件解析後のスケジューリングのパターン数を基にＮを設定する方法について説明する。この方法も先の方法と同様に、最初にＮを２や３といった小さな値に設定し、実行条件の解析を行う。実行条件の解析を行った結果、並列化スケジューリングのパターン数が小さければ、Ｎの値を１加算し、実行条件の解析対象のタスクを増やした上で、改めて実行条件の解析を行う。並列化スケジューリングのパターン数については、例えば５１２などの値を用いる。この値を特定するため、別のプログラムを対象に５１２パターンなど、様々なパターン数における最適な並列化スケジューリング結果を得るまでの処理時間を事前に求めておき、並列化スケジューリングの入力とするパターン数とそのパターン数での処理時間の関係を概算値として保持しておく。上位タスク数Ｎを決定する際には、上位Ｎタスクから得られるスケジューリングのパターン数が、希望する処理時間に収まるパターン数かどうかで判断することができる。
【００７７】
本実施の形態によれば、実行条件によりタスクの処理時間の差が大きいタスクを解析対象として抽出する機能によって、タスク数が多いプログラムに対して、短時間で並列化スケジューリング結果を得ることができる。
【００７８】
また、本実施の形態によれば、実行条件によりタスクの処理時間の差が小さいタスクを最悪実行時間の固定長のタスクとして、並列化スケジューリングをするので、総当りの計算量を抑制できる効果がある。
【００７９】
実施の形態２．
本実施の形態は、実施の形態１の実行条件の解析対象抽出部３４とは別のタスク抽出方法の実行条件の解析対象抽出部３４を持つ実施の形態である。実施の形態１とは異なり、本実施の形態の実行条件の解析対象抽出部３４は、変数ごとに、当該変数が条件節に現れるタスクの条件の違いによる処理時間の差を積算し、積算した処理時間の差が大きい変数を含むタスクを変化タスクとして、実行条件解析部の解析対象とするものである。なお、実行条件解析部３５にて対象とするタスク（変化タスク）を抽出し、変化タスク以外を固定タスクとした後は、実施の形態１と同様の処理を行う。
【００８０】
本実施の形態では、まず、プログラム中の条件節に現れる全ての変数を取り出して列挙する。次に列挙したすべての変数について、各々の変数が条件節に表れるタスク毎に、当該タスクのＴＨＥＮ節とＥＬＳＥ節との処理時間の差を積算する。この積算したタスクの処理時間の差が大きい変数を含む上位Ｎ個のタスクを、実行条件解析部での実行条件の相関関係の解析対象とする変化タスクとし、変化タスク以外を固定タスクとする。本実施の形態は、変数毎に、プログラムの処理時間に与える影響を調べ、同じ変数がプログラムの複数の部分（条件節）で使用されていることを考慮するものである。
【００８１】
図３は、本実施の形態による並列化スケジューリング装置に構成である。以下、図に従って説明する。図において、並列化スケジューリング装置は、入力プログラム記憶部３０に記憶された入力プログラムを読み出して、字句構文解析部３１が、字句及び構文解析を行い、スケジューリング部３２が並列化スケジューリングを行い、実行コード生成部３７が並列化スケジューリング結果に基づき実行コードを生成する。この点において、実施の形態１と同様である。
【００８２】
また、スケジューリング部３２は、依存性解析部３３、実行条件の解析対象抽出部３４、実行条件解析部３５及び並列化スケジューリング部３６から構成される点で、実施の形態１と同様である。ただし、実行条件の解析対象抽出部３４の処理内容は、実施の形態１と異なる。実行条件の解析対象抽出部３４を処理した後は、抽出したＮ個の変化タスクについて実行条件を解析する処理になるため、実施の形態１と同様である。
【００８３】
上述の積算した処理時間差が大きいタスク（変化タスク）を抽出するためには、例えば、図１１に示す入力プログラムのモデルと、図１２に示す解析タスク抽出表を用いる。図１３は、積算した処理時間差が大きいタスク（変化タスク）の抽出の処理を示すフローチャートである。以下、図に沿って説明する。
【００８４】
まず、ステップＳ２０は、プログラムの先頭タスクを注目タスクとして設定する。ステップＳ２１は、注目タスクについて、プログラムに未処理のタスクがある間、以下の処理を繰り返す。ステップＳ２２は、注目タスクの条件節に含まれる各変数に対し、ＴＨＥＮ節の処理時間及びＥＬＳＥ節の処理時間を割当てる。図１１の例では、まずタスク１を注目タスクとする。次に、タスク１の条件節に含まれる変数a、及びｃについて、ＴＨＥＮ節の処理時間／ＥＬＳＥ節の処理時間を、図１２の該当する箇所（実行条件内の変数の列で注目タスクの行に該当する欄に相当する記憶領域）に設定する。
【００８５】
図１１に示す入力プログラムの場合、タスク１の条件節は、変数ａと変数ｃから成る。また、タスク１のＴＨＥＮ節の処理時間は１００（単位時間）、ＥＬＳＥ節の処理時間は２（単位時間）である。このため、図１２の解析対象タスク抽出表のタスク１の行の変数ａおよび変数ｃの列に、ＴＨＥＮ節／ＥＬＳＥ節の処理時間である１００／２を設定する。
【００８６】
注目タスクについて、ステップＳ２２の処理を終えると、ステップＳ２３は、プログラム中の注目ステップを次のタスクへ進める。ここで、プログラムは、図１１のようにタスクがシーケンシャルに並んでおり、注目タスクをタスク１とした処理が終了すると、注目タスクをタスク２とする。そして、ステップＳ２４は、プログラムに含まれる全てのタスクについて、ステップＳ２２の処理を完了すると、ループを終了する。
【００８７】
次に、ステップＳ２５は、条件節に含まれる各変数に対し、ＴＨＥＮ節およびＥＬＳＥ節それぞれの処理時間の合計を求め、この合計したＴＨＥＮ節の処理時間とＥＬＳＥ節の処理時間との差を求める。次に、ステップＳ２６は、求めたＴＨＥＮ節の処理時間とＥＬＳＥ節の処理時間との処理時間の差が最大の実行条件内の変数を求める。このとき、タスクの条件節が変数aや変数ｃの負論理であれば、変数aや変数ｃの位置には、ＴＨＥＮ節とＥＬＳＥ節の処理時間を入れ換えて、ＥＬＳＥ節／ＴＨＥＮ節の処理時間を設定する。つまり、図１２の各変数について、それぞれ、正論理、負論理での処理時間の合計と差を求める。
【００８８】
次に、ステップＳ２７は、対象となるタスク数がＭ個以下の間、以下の処理を繰り返す。まず、ステップＳ２８は、ステップＳ２６で求めた処理時間の差が最大の変数を含むタスクを、図１２の解析対象タスク抽出表から求め、対象タスク（変化タスク）に加える。ここで、加える対象タスクが、すでに対象タスクにある場合は、加える処理は行わない。さらに、ステップＳ２９は、処理時間の差が次に大きい変数を求める。この時点で、対象となるタスク（変化タスク）の数がＭ個を超えている場合は、ループを終了する（ステップＳ３０）。
【００８９】
上述のＭの決め方としては、実施例１で実行条件の解析対象タスクをＮ個へ限定する場合と同様に、最適な並列化スケジュールを得るまでの時間に基づいて決める方法と、実行条件解析後のスケジューリングのパターン数に基づいて求める方法がある。
【００９０】
図１１に示す入力プログラムの場合、全てのタスクについて、解析対象タスク抽出表を設定した結果が図１２となる。
【００９１】
図１２において、処理時間の差は、変数ａが最も大きい。この変数ａを含むタスクは、タスク１、タスク３、タスク４の３つのタスクが解析対象である。ここで、解析対象とする変化タスクの数Ｍを３に設定している場合、この時点では、対象の変化タスク数が設定数を超えていないため、次の変数を候補に加える。
【００９２】
図１２では、変数ａに次いで、変数ｄの処理時間の差が大きい。このため、変数ｄを含むタスクであるタスク３を解析対象（変化タスク）に加える。ただし、この例では、既にタスク３を解析対象（変化タスク）としているため、解析対象タスクの数は増えない。そこで、次に処理時間の差が大きい変数ｂを含むタスクであるタスク２を候補とする。タスク２は、これまで解析対象としている変化タスクに含まれていないため、解析対象タスク（変化タスク）数が３を超えることになる。解析対象とするタスク数Ｍを３に設定している場合は、この時点で解析対象タスク（変化タスク）の選択を終了する。この時点で解析対象となっている変化タスクは、タスク１、タスク３、タスク４の３つのタスクである。
【００９３】
このように、実行条件の解析対象抽出部３４で抽出したＭ個の変化タスクを対象に、実行条件解析部３５において、これらのタスク間の実行条件の相関関係を基に、存在しない実行条件の組合せを削除し、最適な並列化スケジューリングを求めるための、総当りの計算量を抑制する。
【００９４】
そして、並列化スケジューリング部３６において、存在しない実行条件の組合せを削減した後の各パターン全てについて、並列化スケジューリングを行う。並列化スケジューリングした結果の並列化スケジューリング結果に対して、総当りで各実行条件下での各タスクの実行時間を割り当て、各並列化スケジューリングに対する最悪のスケジュール長を求める。この最悪のスケジュール長が最も短く、最悪実行時間が最短となる並列化スケジューリングを、最適な並列化スケジューリング結果として出力する。
【００９５】
本実施の形態によれば、タスクのＴＨＥＮ節とＥＬＳＥ節との処理時間の差が大きい変数を含むタスクを解析対象（変化タスク）として抽出するので、タスク数が多いプログラムに対して、短時間で並列化スケジューリング結果を得ることができる。
【符号の説明】
【００９６】
１０  ローカルメモリ、１２  プロセッシングエレメント（ＰＥ）、１３  バス、１４  共有メモリ、３０  入力プログラム記憶部、３１  字句構文解析部、３２  スケジューリング部、３３  依存性解析部、３４  実行条件の解析対象抽出部、３５  実行条件解析部、３６  並列化スケジューリング部。
【図１】
2010262471.tif 000003
【図２】
2010262471.tif 000004
【図３】
2010262471.tif 000005
【図４】
2010262471.tif 000006
【図５】
2010262471.tif 000007
【図６】
2010262471.tif 000008
【図７】
2010262471.tif 000009
【図８】
2010262471.tif 000010
【図９】
2010262471.tif 000011
【図１０】
2010262471.tif 000012
【図１１】
2010262471.tif 000013
【図１２】
2010262471.tif 000014
【図１３】
2010262471.tif 000015