(57)【要約】      （修正有）【課題】並列性を抽出する可能性を損なわずにスタティックスケジューリング可能な並列プログラムを生成することが出来る並列化コンパイラを提供する。【解決手段】並列化コンパイラＣは、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存又は間接制御依存するタスクである後続タスクとを含むタスクグループを新たなタスクとして融合するＳＴＥＰ０２６を並列化コンパイル装置に実行させる。【選択図】図２
2018109943.tif 000002
【特許請求の範囲】
【請求項１】
逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータに生成させるコンパイラであって、
前記コンピュータに
前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを実行させることを特徴とする並列化コンパイラ。
【請求項２】
請求項１記載の並列化コンパイラにおいて、
前記データ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれを、前記複数の演算処理部のそれぞれに割り当てるスケジューリングを行うスケジューリングステップと、
前記スケジューリングの結果に基づいて、前記並列プログラムを生成する生成ステップと、
をさらに前記コンピュータに実行させることを特徴とする並列化コンパイラ。
【請求項３】
請求項２記載の並列化コンパイラにおいて、
前記依存解析ステップに含まれる前記データ依存及び制御依存の解析において得られた各タスク間のデータ依存及び各タスクの制御依存に基づいて前記複数のタスクのそれぞれの最早実行可能条件の解析を行う最早実行可能条件解析ステップを、
前記コンピュータに実行させることを特徴とする並列化コンパイラ。
【請求項４】
請求項１〜３のうちいずれか１項記載の並列化コンパイラにおいて、
前記基準タスクと前記基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存あるいは拡張制御依存するタスクである第１後続タスクのすべてとを含むタスクグループを特定する第１特定ステップと、
前記タスクグループに含まれる条件分岐のすべての分岐方向の各々に制御依存あるいは拡張制御依存するタスクである第２後続タスクのすべてを前記タスクグループに加える第２特定ステップと、
前記タスクグループに含まれる条件分岐のいずれの分岐方向にも制御依存あるいは拡張制御依存するタスクがなくなるまで前記第２特定ステップを繰り返す制御ステップと、
前記タスクグループを前記融合すべきタスクグループとして決定する融合すべきタスクグループ決定ステップと、
を前記コンピュータに実行させることを特徴とする並列化コンパイラ。
【請求項５】
請求項１〜４のうちいずれか１項記載の並列化コンパイラにおいて、
前記融合すべきタスクグループに含まれる前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクが、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないという並列実行可能条件を含む所定条件を充足するか否かを判定する条件判定ステップをさらに前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足しないと判定された場合、前記融合すべきタスクグループを前記新たなタスクとして融合する融合ステップを前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足すると判定された場合、前記基準タスクに含まれる条件分岐を複製する複製ステップと、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクを各々複製された条件分岐を含む複数の条件分岐の各々に後続させる後続ステップと、当該複数の条件分岐の各々と、当該複数の条件分岐の各々に後続させた前記複数のタスクとを組み合わせて複数のタスクグループを生成し、当該複数のタスクグループを新たな複数の融合すべきタスクグループとして決定し、当該複数の融合すべきタスクグループを各々前記新たなタスクとして融合するステップを前記コンピュータに実行させることを特徴とする並列化コンパイラ。
【請求項６】
逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムを生成する並列化コンパイル装置であって、
前記逐次プログラムを複数のタスクに分割し、
前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求め、
前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する演算処理要素を備えることを特徴とする並列化コンパイル装置。
【請求項７】
逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータにより生成する方法であって、
前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを含むことを特徴とする並列プログラムの生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法に関する。
【背景技術】
【０００２】
従来、シングルプロセッサシステムにより逐次実行される逐次プログラムからマルチプロセッサシステム用の並列プログラムを生成する並列化コンパイラが知られている。
【０００３】
この種の並列化コンパイラによる並列化処理においては、各タスクをいずれかのプロセッシングエレメント（以下、略称として「ＰＥ」を使うこともある）に割り当てるスケジューリング処理が必須となる。このスケジューリング処理としては、並列化プログラムの生成時に各タスクをいずれかのプロセッシングエレメントに割り当てるスタティックスケジューリングと、プログラムの実行時に各タスクをいずれかのプロセッシングエレメントに割り当てるダイナミックスケジューリングとが知られている。
【０００４】
ダイナミックスケジューリングは、条件分岐を含むタスクを有する逐次プログラムを並列化してマルチプロセッサシステム上で実行する際に起動されるよう並列プログラムの中で設定されるスケジューリング手法であるが、条件分岐に続く個々のタスクの処理の実行時間が短いと、実行時にマルチプロセッサシステムを構成するいずれかのプロセッシングエレメントに当該個々のタスクを割り当てるスケジューリング処理の時間、すなわちオーバーヘッドが相対的に大きくなるため、並列実行による高速化が困難になる。例えば、条件分岐を含むタスク及び後続処理の実行時間が１０クロックサイクルである一方、スケジューリング処理の実行時間が１０００クロックサイクルである場合、並列実行をすることにより、逆に多くの実行時間が必要となってしまう。それに対して、スタティックスケジューリングの場合には、並列化コンパイラによる並列プログラムを生成する段階で並列実行可能な各タスクの各ＰＥへの割当て処理が行われ、並列プログラムをマルチプロセッサシステム上で動作させる際にはスケジューリング処理の時間は要しない（但し、厳密には並列実行するＰＥ間の同期処理に短時間を要する）。従って、逐次プログラムを並列化して処理の高速化を実現しようとする場合には、スタティックスケジューリング手法を用いることが望ましい。このような意味で、本明細書においては、「並列実行可能」という用語は、特に断らない限り、「スタティックスケジューリング可能」に対応する言葉として使用し、同じ「並列実行」という表現でも、「ダイナミックスケジューリング」に対応する意味では使用しないこととする。
【０００５】
しかし、例えばループ構造がなく主に条件分岐、関数呼び出しと代入文とから構成されるを含む逐次プログラム、例えば車載制御装置の組み込みシステム向け逐次プログラムを並列化してマルチプロセッサシステム上で動作させようとする場合に、比較的最近までスタティックスケジューリングを用いることはできなかった。
【０００６】
このような点に鑑みて、スタティックスケジューリング手法を用いて、主に条件分岐、関数呼び出しと代入文とから構成される組み込みシステム向け逐次プログラムを並列プログラムに変換する方法とそれをソフトウェアとして具現化した並列化コンパイラが提案されるようになってきた。この方法は、条件分岐と後続するタスクとを一つのタスクにまとめ、このタスクを複数生成できこれらが並列実行可能であれば、スタティックスケジューリングによりこのタスクを個々のプロセッシングエレメントに割り当てるという方法である。この方法によれば、条件分岐がまとめられた一つのタスク内に隠蔽され、それが一つのプロセッシングエレメント内で実行されるために、ダイナミックスケジューリングを用いる必要がない。
【０００７】
このような並列化コンパイラの一つとして、車載装置用の組み込みシステム向け逐次プログラムを並列化するために、次の（１）〜（６）の処理をコンピュータに実行させる並列化コンパイラが提案されている（特許文献１参照）。
【０００８】
（１）字句解析及び構文解析の解析結果に基づき、逐次プログラムを複数のタスクに分割する。
【０００９】
ここで、タスクは、１または複数のステートメントからなる。ここで、タスクは、連続した代入及び条件分岐を含む基本ブロック（ＢＢ）と、繰り返し実行を含む繰り返しブロック（ＲＢ）と、関数を含むサブルーチンブロック（ＳＢ）との３種類の粗粒度タスクのうちのいずれかに分類される。
【００１０】
（２）各タスク間の制御依存性（本明細書における「制御フロー」に相当）に基づき、異なるタスクに分岐する処理を有するタスクを始端タスクとして特定するとともに、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちのいずれか一つを終端タスクとして特定する。ここで、「制御フロー」とは、逐次プログラムに記載された順番及び条件分岐等によって決定される、処理経路を意味する。
【００１１】
（３）特定された始端タスクと、始端タスクを始点とする処理における終端タスクと、始端タスクの実行後であって、終端タスクの実行前に実行されるすべてのタスクとを新たなタスクとして融合させる。
【００１２】
（４）前記融合がなされた後の当該新たなタスクを含むタスク間のデータ依存性（本明細書の「データ依存」に相当）及び制御依存性を解析する。そして、タスク間のデータ依存性及び制御依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニット（本明細書における「プロセッシングエレメントＰＥ」に相当、以下同様）により並列実行可能なタスクを抽出する。
【００１３】
（５）並列実行可能なタスクが異なるプロセッサユニットにより並列的に実行されるよう、それぞれのタスクをいずれかのプロセッサユニットに割り当てるスタティックスケジューリングを行う。
【００１４】
（６）スタティックスケジューリングの結果に基づき、並列プログラムを生成する。
【００１５】
当該並列化コンパイラによれば、条件分岐が含まれる逐次プログラムであっても、分岐処理を含むタスクが始端タスクとして特定され、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちいずれか一つが終端タスクとして特定され、当該始端タスクと終端タスクとを含む一連のタスクが新たなタスクとして融合される。この新たなタスクがスタティックスケジューリングにより、いずれかのプロセッサユニットに割り当てられる。
【００１６】
特許文献１の並列化コンパイラによれば、後続するタスクの実行時間が短いような条件分岐が多数含まれる逐次プログラムを並列化した場合でも、スタティックスケジューリングにより各マクロタスクがいずれかのプロセッサユニットに割り当てられるため、実行時のスケジューリング処理のオーバーヘッドの増大を防止でき、高速な処理が可能な並列プログラムを自動生成することが可能となる。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１５−００１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
しかしながら、特許文献１の並列化コンパイラには、改良の余地がある。たとえば、特許文献１の並列化コンパイラは、制御フローに基づいて始端タスクおよび終端タスクを決定し、始端タスクと終端タスクおよびそれらの間で実行されるすべてのタスクを一つのタスクに融合（グルーピング）しているところ、融合対象となった始端タスクの実行後でかつ終端タスクの実行前に実行される複数のタスクには、並列実行可能なタスクが存在する可能性がある。もし、並列実行可能な複数のタスクを融合することになれば、並列実行可能なタスクを抽出する可能性が損なわれる。
【００１９】
この問題に鑑みて、本発明は、特許文献１におけるこのような問題点を解消した、並列実行可能なタスクを抽出できる並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法を提供することを目的する。
【００２０】
次に、本発明において、使用される主要な用語である「（タスク間の）データ依存」、「（タスクの）制御依存」及び「タスク融合」の意味を以下に説明する。また、その他の用語についても説明の途中で必要に応じて適宜説明する。
【００２１】
まず、タスク間の「データ依存」の意味について説明する。よく知られているように、先行する一のタスクに含まれるステートメントと後続する他のタスクに含まれるステートメントとの間にステートメント間のデータ依存が存在する場合、当該他のタスクは当該一のタスクにデータ依存するという。この場合、二つのタスクのそれぞれに含まれるステートメント間にデータ依存がひとつでも存在すれば、二つのタスク間にはデータ依存が存在することとなる。タスク間にデータ依存が存在する場合、当該先行する一のタスクにおいて当該後続する他のタスクに含まれるステートメントとの間でデータ依存関係にあるすべてのステートメントの実行が終了すれば、当該後続する他のタスクの実行は開始できるが、実際のプログラムにおけるタスク間のデータ依存の解析上は、前述のような意味を踏まえつつ、「当該一のタスクの実行が終了するまで当該他のタスクの実行を開始してはならない」ことをもって「当該他のタスクが当該一のタスクにデータ依存する」ことを意味するものとして扱う。つまり、このようなデータ依存の解析においては、「（タスク間の）データ依存」が存在する場合、逐次プログラムで規定されている先行する一のタスクと後続する他のタスクとの実行順序を並列化の過程で変えることはできない。
【００２２】
ここで、「ステートメント間のデータ依存」とは、次の（Ａ）〜（Ｃ）の依存関係のうちの少なくともいずれか一つが成立することである。
【００２３】
（Ａ）先行ステートメントが定義した変数を後続ステートメントが使用する（これを「フロー依存」と称する）。変数の定義とは変数に数値を代入すること、変数の使用とは変数の値を参照することである。以下が一例である。
【００２４】
先行ステートメント：ｖａｒ＝ａ
後続ステートメント：Ｘ＝ｖａｒ
（Ｂ）先行ステートメントが定義した変数を後続ステートメントが再定義する（これを「出力依存」と称する）。再定義とは、すでに定義されている変数に新たな数値を代入することである。以下が一例である。
【００２５】
先行ステートメント：ｖａｒ＝ａ
後続ステートメント：ｖａｒ＝ｂ
（Ｃ）先行ステートメントが使用した変数を後続ステートメントが定義する（これを「逆依存」と称する）。以下が一例である。
【００２６】
先行ステートメント：Ｘ＝ｖａｒ
後続ステートメント：ｖａｒ＝ｃ
この場合は、先行ステートメントが使用した変数は、さらに先行するステーメントが定義したものである。
【００２７】
以上のように、フロー依存、出力依存、逆依存の関係にある両ステートメント間の実行順序が逆になると演算の結果が異なってくるので、並列化の過程でもこの実行順序が変わらないようにする必要がある。
【００２８】
次に、タスクの「制御依存」の意味について説明する。タスクの制御依存は、条件分岐のある特定の分岐方向に後続するタスクの条件分岐への依存関係に関する。条件分岐の分岐方向が一の分岐方向に確定したことにより、当該一の分岐方向に後続するタスクの実行が確定する場合、当該後続するタスクは当該条件分岐の一の分岐方向に制御依存するという。
【００２９】
また、タスクの（制御）依存関係は、タスク間のデータ依存に伴って現れる場合もある。詳細は、実施形態の説明において説明するが、ここでは一例を挙げておく。
【００３０】
例えば、二つの分岐方向を有する条件分岐の分岐方向が第１の分岐方向に確定した際に実行される第１のタスクに含まれるステートメントにおいてある変数が定義され、当該条件分岐の分岐方向がいずれであっても実行される第２のタスクに含まれるステートメントにおいて当該変数が再定義される場合、すなわち第２のタスクに含まれるステートメントが第１のタスクに含まれるステートメントに出力依存する場合を考える。
【００３１】
言い換えると、第１のタスクは条件分岐の第１の分岐方向に対して制御依存し、第２のタスクは第１のタスクにデータ依存している。なお、第２のタスクは当該条件分岐の分岐方向がいずれであっても実行されるから、第２のタスクは当該条件分岐のいずれの分岐方向にも制御依存していない。
【００３２】
この場合において、条件分岐の分岐方向が、当該第１の分岐方向に確定すると、当然のことながら第１のタスクが実行され、それにデータ依存する第２のタスクも実行できる。その際、このような例では、第１のタスクに含まれるステートメントで定義された変数は、第２のタスクに含まれるステートメントで再定義される。また、当該第１の分岐方向とは異なる第２の分岐方向に確定すると、第１のタスクの不実行が確定し第２のタスクは第１のタスクとの実行順序を考慮することなく実行ができるようになる。その際、第１のタスクでは当該変数の定義も実行されないが、第２のタスクに含まれるステートメントでは、当該変数が（再）定義されるので、その実行に支障はない。
【００３３】
すなわち、当該条件分岐の分岐方向が第２の分岐方向に確定することにより、第２のタスクの第１のタスクへのデータ依存が解消するとも言える。
【００３４】
以上の説明は、第１・第２のタスク間に「出力依存」というデータ依存が存在する場合を扱ったが、「逆依存」の場合も第２のタスクで当該変数が定義されるので、「出力依存」の場合と同様である。しかし、前述の両ステートメント間の「データ依存」が「フロー依存」である場合は、第２の分岐方向に決まる前に第２のタスクで使用する変数が定義されていることを前提として、条件分岐の分岐方向が前記第２の分岐方向に確定することにより、第１のタスクの不実行が確定し、第１のタスクとの実行順序を考慮することなく、第２のタスクの実行が可能となる。
【００３５】
このように、条件分岐の分岐方向が第２の分岐方向に確定することにより、第２のタスクの第１のタスクへのデータ依存が解消し、第２のタスクの実行の開始が可能になる。つまり、第２のタスクは、当該条件分岐のどの分岐方向にも制御依存はなく、第１のタスクへのデータ依存がなければ、当該条件分岐と並列に実行可能であるが、第１のタスクへのデータ依存があるために第１のタスクが終了するか、条件分岐の分岐方向が第２の分岐方向に確定するまで実行できない。このような場合、第２のタスクが、条件分岐の第２の分岐方向に拡張制御依存するという。
【００３６】
以上のように、データ依存及び制御依存並びにその組合せにより、あるタスクが実行可能になる条件を表現することが出来る。すなわち、データ依存、制御依存及び拡張制御依存は、逐次プログラムの並列化後のプログラムが元の逐次プログラムと同じ演算結果を生成するための条件となる。そのため、逐次プログラムの並列化にあたって、構成するタスクの依存関係の把握が重要となる。
【００３７】
続いて、「タスク融合」の意味について説明する。「タスク融合」とは、互いに関連する複数のタスクを含むタスクグループを一つの新たなタスクとして定めることを意味する。この「タスク融合」により生成される新たなタスクは、並列プログラムの生成時のスケジューリングにおいて一つのＰＥに割り当てることができる。また、この「タスク融合」は、繰り返しブロックの融合である「ループ融合」などのようなコード融合とは異なり、融合される当該複数のタスクの構造・機能等はそのまま維持されており変更されることはない。
【課題を解決するための手段】
【００３８】
前記課題を解決するために、本発明の並列化コンパイラは、逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータに生成させるコンパイラであって、
前記コンピュータに
前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に対して制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを実行させることを特徴とする。
【００３９】
本明細書において、「タスクが条件分岐のいずれかの分岐方向に間接制御依存する」との表現は、タスクと条件分岐のある分岐方向との間に制御依存又は拡張制御依存を２回以上繰り返す関係を意味する。例えば、条件分岐Ａのある分岐方向Ｂに条件分岐Ｃを含むタスクＤが制御依存し、条件分岐Ｃのある分岐方向ＥにタスクＦが拡張制御依存している場合、条件分岐Ａの分岐方向ＢとタスクＦとの間には制御依存又は拡張制御依存が２回繰り返されている。このような場合、タスクＦが条件分岐Ａの分岐方向Ｂに間接制御依存すると表す。間接制御依存は、制御依存及び拡張制御依存のいずれとも異なる概念であるが、拡張制御依存と同様に、データ依存及び制御依存の関係の組合せから導かれうる。
【００４０】
本発明の並列化コンパイラによれば、コンピュータがタスク分割ステップを実行することにより、逐次プログラムに含まれるタスクが複数のタスクに分割される。
【００４１】
当該複数のタスクに対し、コンピュータが依存解析ステップを実行することにより、当該複数のタスクそれぞれのデータ依存及び制御依存が解析される。
【００４２】
この解析結果に基づき、コンピュータが融合ステップを実行することにより、条件分岐を有する基準タスクと、当該基準タスクの条件分岐のすべての分岐方向の各々に対して制御依存、拡張制御依存又は間接制御依存する後続タスクのすべてとを含むタスクグループが一つの新タスクとして融合される。
【００４３】
なお、本明細書において、「後続タスク」が複数存在する場合には、これを「後続タスクグループ」と称することもある。
【００４４】
このように、融合ステップによってタスクグループが一つのタスクとして融合されることにより、条件分岐を含む基準タスクと条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存又は間接制御依存する後続タスクのすべてとを含んだタスクグループが一つのタスクとして扱われ、これにより、条件分岐が一つのタスク内に隠蔽される。
【００４５】
条件分岐を含む基準タスクと条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存又は間接制御依存するタスクである後続タスクとを含むタスクグループからさらに並列実行可能なタスクを抽出してスタティックスケジューリングにより並列実行することは、当該後続タスクが後述するように所定条件を満足しない限り一般的には困難であるので、これらを一つのタスクとして扱ってもタスク間の並列性を抽出する可能性は損なわれない。よって、本発明のコンパイラによれば、タスク間の並列性を抽出する可能性を損なわない観点から一のタスクとして扱うべきタスクグループを選択できるスタティックスケジューリング可能な並列プログラムを生成することが出来る。
【００４６】
本発明の並列化コンパイラにおいて、
前記データ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれを、前記複数の演算処理部のそれぞれに割り当てるスケジューリングを行うスケジューリングステップと、
前記スケジューリングの結果に基づいて、前記並列プログラムを生成する生成ステップと、
をさらに前記コンピュータに実行させることが好ましい。
【００４７】
当該構成の並列化コンパイラによれば、依存解析ステップにより、複数のタスク間のデータ依存が求められる。そして、コンピュータが前記「融合ステップ」実行後のスケジューリングステップにおいて、タスク間のデータ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれをいずれかの演算処理部に割り当て、このスケジューリングの結果に基づいて、並列プログラムを生成する。
【００４８】
以上の通り、本発明の並列化コンパイラによれば、データ依存、及び制御依存及び拡張制御依存が勘案された上でスケジューリングが行われるので、タスク間の並列性を抽出する可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。
【００４９】
当該構成の並列化コンパイラにおいて、
前記依存解析ステップにおいて求められた各タスク間のデータ依存及び各タスクの制御依存に基づいて、前記複数のタスクのそれぞれの最早実行可能条件の解析を行う最早実行可能条件解析ステップを、
前記コンピュータに実行させることが好ましい。
【００５０】
当該構成の並列化コンパイラによれば、各タスク間のデータ依存及び各タスクの制御依存に基づいて最早実行可能条件の解析が行われる。これにより、従来の並列化手法と整合を取ることが出来る。
【００５１】
本発明の並列化コンパイラにおいて、  
前記基準タスクと前記基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクである第１後続タスクのすべてとを含むタスクグループを特定する第１特定ステップと、
前記タスクグループに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクである第２後続タスクのすべてを前記タスクグループに加える第２特定ステップと、
前記タスクグループに含まれる条件分岐のいずれの分岐方向にも制御依存又は拡張制御依存するタスクがなくなるまで前記第２特定ステップを繰り返す制御ステップと、
前記タスクグループを前記融合すべきタスクグループとして決定する融合すべきタスクグループ決定ステップと、
を前記コンピュータに実行させることが好ましい。
【００５２】
当該構成の並列化コンパイラによれば、基準タスク、第１後続タスク又は第２後続タスクのいずれかに含まれる条件分岐のすべての分岐方向各々に制御依存又は拡張制御依存するタスクのタスクグループへの追加を繰り返すことにより、このようなタスクに含まれる条件分岐をすべて隠蔽するタスクグループが特定され、このタスクグループが一つの新タスクとして融合される。この結果、スタティックスケジューリングによっては並列化が困難とされたループ構造が少なく条件分岐が多い逐次プログラムから複数のタスクが「融合すべきタスクグループ」として抽出され、当該「融合すべきタスクグループ」が一つの新タスクとして融合される。
【００５３】
以上の通り、タスク間の並列性抽出の可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。
【００５４】
加えて、基準タスク、第１又は第２後続タスクのいずれかに含まれる条件分岐のすべての分岐方向各々に制御依存又は拡張制御依存するタスクを繰り返し抽出することにより、タスクグループを計算量を抑えながら抽出することが出来る。
【００５５】
本発明の並列化コンパイラにおいて、
前記融合すべきタスクグループに含まれる前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクが、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないという並列実行可能条件を含む所定条件を充足するか否かを判定する条件判定ステップを前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足しないと判定された場合、前記基準タスク及び前記後続タスクを融合する融合ステップを前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足すると判定された場合、前記基準タスクに含まれる条件分岐を複製する複製ステップと、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクを各々、複製された条件分岐を含む複数の条件分岐の各々に後続させる後続ステップと、
当該複数の条件分岐の各々と、当該複数の条件分岐の各々に後続させた前記複数のタスクとを組み合わせて複数のタスクグループを生成し、当該複数のタスクグループを新たな複数の融合すべきタスクグループとして決定し、当該複数の融合すべきタスクグループを各々前記新たなタスクとして融合するステップ
を前記コンピュータに実行させることが好ましい。
【００５６】
当該構成の並列化コンパイラによれば、コンピュータが条件判定ステップを実行することにより、前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクを並列実行可能とするための所定条件を充足しているか否かが判定される。そして、条件判定ステップにおいて所定条件を充足しないと判定された場合には、基準タスクと後続タスクとを含む「融合すべきタスクグループ」に対して融合ステップを実行する。この融合ステップにより生成される新たなタスクが複数存在し、それらが互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない場合、これら複数の新たなタスクを別個のＰＥに割り当てることが可能になる。また、前記新たなタスクが一つしか存在しない場合であっても、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないタスクが別に存在すれば、それらは互いに並列実行可能となる。
【００５７】
一方、条件判定ステップにおいて所定条件を充足すると判定された場合、コンピュータが複製ステップを実行することにより、基準タスクに含まれる条件分岐が複製される。そして、コンピュータが後続ステップを実行することにより、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクがそれぞれ異なる条件分岐に後続する。これにより、並列実行可能なタスクがそれぞれ異なる条件分岐とともに「融合すべきタスクグループ」に含められ、これら複数の「融合すべきタスクグループ」がそれぞれ新たなタスクに融合されので、それぞれ当該新たなタスクが別個のプロセッシングエレメントに割り当てることが可能となる。これにより、前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスク間の並列性の抽出の可能性が損なわれない。
【００５８】
ここで、前記所定条件としては、まず第一に「前記融合すべきタスクグループに並列実行可能なタスクが存在すること」を設定する。つまり、元の逐次プログラムからできるだけ多くの並列実行可能なタスクを抽出するという観点から、前記融合すべきタスクグループにも後述するような並列実行可能なタスクが存在するかどうかを解析することが本発明の目的にとって重要である。  
【００５９】
以上の通り、当該構成の並列化コンパイラによれば、タスク間の並列性を抽出する可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。  
【図面の簡単な説明】
【００６０】
【図１】一の実施形態の全体構成図。
【図２】一の実施形態の並列プログラム生成処理のフローチャート。
【図３】他の実施形態の並列プログラム生成処理のフローチャート。
【図４】プロファイラの差し込み箇所を説明する図。
【図５】タスクの複数階層展開の説明図。
【図６】マクロフローグラフ（ＭＦＧ）の第１例を示す図。
【図７】図６のＭＦＧにおける各タスクごとの最早実行可能条件を示す図。
【図８】図６のＭＦＧから生成したマクロタスクグラフ（ＭＴＧ）の第１例を示す図。
【図９】図２及び図３／ＳＴＥＰ０１８の融合すべきタスクグループ決定処理を詳細に展開したフローチャート。
【図１０】図９のフローチャートの説明のために図８のＭＴＧの一部を抜き出した図
【図１１】図１８のＭＴＧの第１例を基にした、基準タスクに含まれる条件分岐の複製に関する説明図で、図１１Ａは、複製前のマクロタスクグラフで、図８に含まれる基本ブロックＢＢ７〜ＢＢ１０及び基本ブロックＢＢ１２を含み、外部へのエッジを省略したマクロタスクグラフ、図１１Ｂは、条件分岐（基準タスク）複製後のマクロタスクグラフ。
【図１２】ＭＦＧの第２例を示す図で、基本ブロックＢＢ５が基本ブロックＢＢ１に制御依存し、基本ブロックＢＢ１１が基本ブロックＢＢ７に制御依存している場合のＭＦＧ。
【図１３】図１２のＭＦＧにおける各タスクごとの最早実行可能条件を示す図。
【図１４】図８のＭＴＧより生成した融合後のＭＴＧで、図１４Ａは、条件分岐の複製をしないで融合した後のＭＴＧ、図１４Ｂは、条件分岐の複製を行った場合の融合後のＭＴＧ、図１４Ｃは、従来技術によりタスクを融合した後のＭＴＧ。
【図１５】図１２のＭＦＧより生成したＭＴＧの第２例を示す図。
【図１６】図９のフローチャートの説明のために図１５のＭＴＧの一部を抜き出した図
【図１７】図１５のＭＴＧの第２例を基にした、基準タスクに含まれる条件分岐の複製に関する説明図で、図１７Ａは、複製前のマクロタスクグラフで、図１５に含まれる基本ブロックＢＢ７〜ＢＢ１１及び基本ブロックＢＢ１２を含み、外部へのエッジを省略したマクロタスクグラフ、図１７Ｂは、条件分岐（基準タスク）複製後のマクロタスクグラフ。
【図１８】図１５のＭＴＧより生成した融合後のＭＴＧで、図１８Ａは、条件分岐の複製をしないで融合した後のＭＴＧ、図１８Ｂは、条件分岐の複製を行った場合の融合後のＭＴＧ、図１８Ｃは、従来技術によりタスクを融合した後のＭＴＧ。
【図１９】特許文献1の融合方法の原理を説明するＭＦＧを示す図。
【図２０】図１９のＭＦＧを基に生成した本発明の原理を説明するＭＴＧを示す図。
【発明を実施するための形態】
【００６１】
図１〜図１８を参照して、本発明の実施形態について説明する。
【００６２】
（コンパイル装置の構成）
並列化コンパイル装置１００は、シングルプロセッサシステムで逐次実行可能な逐次プログラムＰ１と設定ファイルＣＦとを入力とし、当該マルチプロセッサシステム２００で並列実行可能なバイナリコードＰＢを出力とする装置である。なお、並列化コンパイル装置１００が、本発明の「コンピュータ」の一例に該当する。
【００６３】
この機能の実現のため、並列化コンパイル装置１００は、演算処理要素１１０と、読取装置１２０と、書出装置１３０と、記憶装置１４０とを備える。
【００６４】
演算処理要素１１０は、中央演算ユニット（ＣＰＵ）等を含んで構成され、並列化コンパイラＣをメモリ等の記憶装置１４０から読み出し、並列化コンパイラＣに従って後述する並列化処理のための演算処理を実行するように構成されている。並列化コンパイラＣに従って演算処理を実行することにより、演算処理要素１１０は、後述する図２あるいは図３におけるＳＴＥＰ００１からＳＴＥＰ０３２までの一連の処理を実行する。
【００６５】
読取装置１２０は、外部記憶媒体から情報を読み取る装置、例えば、ＣＤドライブ、ＤＶＤドライブまたはＢｌｕ−ｒａｙ（登録商標）ドライブ等により構成されている。読取装置１２０に代え、たとえば、キーボード等の入力装置又は通信装置を介して逐次プログラムＰ１及び設定ファイルＣＦが外部から入力されてもよいし、並列化コンパイル装置１００に接続された外部記憶媒体（ＵＳＢメモリ）等から逐次プログラムＰ１及び設定ファイルＣＦが読み取られてもよい。
【００６６】
逐次プログラムＰ１は、たとえばＦｏｒｔｒａｎ、Ｃ言語等の高級言語により記述されたソースコードである。
【００６７】
設定ファイルＣＦは、マルチプロセッサシステム２００を構成するプロセッシングエレメントの数、プロセッシングエレメントを構成するＣＰＵなどのプロセッサの種別及びローカルメモリの記憶容量やアクセス時間、マルチプロセッサシステム２００に搭載された共通の記憶領域の記憶容量やアクセス時間、マルチプロセッサシステム２００に搭載されたＯＳの情報などの、マルチプロセッサシステム２００で動作する並列プログラムの生成に必要な情報を記録したファイルである。
【００６８】
並列化コンパイル装置１００とマルチプロセッサシステム２００とが共通の記憶装置を使用している場合、並列化コンパイル装置１００は、当該記憶装置を参照することにより、設定ファイルＣＦに記録された情報を取得してもよい。
【００６９】
書出装置１３０は、外部記憶媒体に情報を書き出す装置、例えば、ＣＤ−Ｒドライブ、ＤＶＤ−ＲドライブまたはＢｌｕ−ｒａｙ（登録商標）ドライブ等により構成されている。書出装置１３０に代え、たとえば、通信装置を介してバイナリコードＰＢが外部に出力されてもよいし、並列化コンパイル装置１００に接続された外部記憶媒体（ＵＳＢメモリ）等にバイナリコードＰＢが書き出されてもよい。
【００７０】
バイナリコードＰＢは、マルチプロセッサシステム２００の各第１プロセッシングエレメントＰＥ１〜第ｎプロセッシングエレメントＰＥｎのそれぞれにより実行可能な実行用プログラムである。バイナリコードＰＢが、第１プロセッシングエレメントＰＥ１〜第ｎプロセッシングエレメントＰＥｎにより実行されることにより、逐次プログラムＰ１（のバイナリコード）がシングルプロセッサシステムで実行される場合と同一の処理結果が得られる。
【００７１】
記憶装置１４０は、ＲＯＭ、ＲＡＭ及びＨＤＤ等の記憶装置（主記憶装置及び補助記憶装置等）並びにＩ／Ｏ回路により構成されている。記憶装置１４０は、少なくとも不揮発性のメモリを含む。ＲＡＭは読み出し及び書き込み可能な揮発性メモリであり、ＲＯＭは読み出し専用の不揮発性メモリであり、ＨＤＤは読み出し及び書き込みが可能な不揮発性メモリである。ＲＯＭ及びＨＤＤには、演算処理要素１１０が読み出して実行するプログラム等が予め記憶されている。ＲＡＭは、演算処理要素１１０がＲＯＭ，及びＨＤＤに記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域又は作業用のデータを一時的に保存するための記憶領域として用いられる。また、これに加えてまたは代えて、ＨＤＤが一時的にそのプログラムを一時的に保存するための記憶領域又は作業用のデータを一時的に保存するための記憶領域として用いられてもよい。
【００７２】
記憶装置１４０の不揮発性メモリには、予めインストールされた並列化コンパイラＣ及び設定ファイルが格納されている。
【００７３】
（マルチプロセッサシステムの構成）
マルチプロセッサシステム２００は、バス結合またはクロスバス結合等の相互接続網により相互に接続された、ｎ個のプロセッシングエレメントとしてのＰＥ１〜ＰＥｎと、集中共有メモリ２１０と、マルチプロセッサシステムの入出力装置２２０とを備える。プロセッシングエレメントのそれぞれが本発明の「演算処理部」の一例に相当する。
【００７４】
第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）は、中央演算ユニットＣＰＵと、ローカルデータメモリＬＤＭと、データ転送ユニットＤＴＵと、分散共有メモリＤＳＭと、ローカルプログラムメモリＬＰＭとを備える。
【００７５】
第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）の構成は、所定の演算処理が出来れば、この構成と異なっていてもよい。例えば、第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）は、ローカルデータメモリＬＤＭ及びローカルプログラムメモリＬＰＭに加えて又は代えて、キャッシュメモリを備えてもよい。第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）は、クロック周波数又は電源電圧制御用のレジスタを備えてもよい。第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）は、中央演算ユニットＣＰＵに代えてまたは加えて、アクセラレータを備えてもよい。また、例えば、逆に、ＣＰＵ以外の構成要素（ＬＤＭ、ＬＰＭ、ＤＳＭ、ＤＴＵ）のうちのすべてあるいは一部を欠いてもよい。さらに、第ｋプロセッシングエレメントＰＥｋ（ｋ＝１，‥，ｎ）は、互いに異なる構成であってもよい。
【００７６】
中央演算ユニットＣＰＵは、汎用処理プロセッサである。
【００７７】
ローカルデータメモリＬＤＭは、当該ＬＤＭを含むプロセッシングエレメントからのみアクセス可能な記憶装置（ＲＡＭ等により構成される。）で構成される。
【００７８】
データ転送ユニットＤＴＵは、プロセッシングエレメント間、第ｋプロセッシングエレメントＰＥｋと集中共有メモリ２１０との間、又は第ｋプロセッシングエレメントＰＥｋとマルチプロセッサシステムの入出力装置２２０との間のデータ転送を管理するユニットである。
【００７９】
各プロセッシングエレメントの構成要素の一つである分散共有メモリＤＳＭは、他のプロセッシングエレメントからもアクセス可能な記憶装置（ＲＡＭ等により構成される。）であるが、必ずしも設けなくてもよい場合もある。
【００８０】
ローカルプログラムメモリＬＰＭは、当該ＬＰＭを含む第ｋプロセッシングエレメントＰＥｋが実行するプログラム（たとえばバイナリコードＰＢのうち第ｋプロセッシングエレメントＰＥｋに割り当てられた部分のプログラム）を記憶する。
【００８１】
一部のプロセッシングエレメントが、ＣＰＵに代えて、信号処理プロセッサ（Ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ：「ＤＳＰ」と略称）又は動的再構成可能プロセッサ（Ｄｙｎａｍｉｃａｌｌｙ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ：「ＤＲＰ」と略称）等を備えてもよい。
【００８２】
各プロセッシングエレメントＰＥ１〜ＰＥｎは、階層的なグループであるプロセッシンググループＰＧにグループ分けされていてもよい。このグループ分け手法の詳細については、参考文献１（宮沢稔、岡本雅巳、笠原博徳、「階層型マクロデータフロー処理におけるサブルーチン並列処理手法」、情報処理学会全国大会講演論文集、１９９４年）に開示されている。
【００８３】
なお、中央演算ユニットＣＰＵ、各プロセッシングエレメントＰＥ１〜ＰＥｎのそれぞれ又はプロセッシンググループＰＧが、本発明の「演算処理部」の一例に該当する。
【００８４】
集中共有メモリ２１０は、各プロセッシングエレメントＰＥ１〜ＰＥｎがアクセス可能な記憶媒体（ＲＡＭ、ＲＯＭ、ＨＤＤ等により構成される。）により構成される。
【００８５】
マルチプロセッサシステムの入出力装置２２０は、外部記憶媒体から情報を読み取る装置、例えば、ＣＤドライブ、ＤＶＤドライブまたはＢｌｕ−ｒａｙ（登録商標）ドライブ等により構成されている場合もある。マルチプロセッサシステムの入出力装置２２０に代え、たとえば、通信装置を介してバイナリコードＰＢが外部からマルチプロセッサシステム２００に入力されてもよいし、バイナリコードＰＢがマルチプロセッサシステムの記憶装置（集中共有メモリ２１０又はローカルプログラムメモリＬＰＭ）に直接書込まれることによってマルチプロセッサシステム２００に入力されてもよい。また、当然のことながら入出力装置２２０は、マルチプロセッサシステムで演算処理するデータを読み込んだり、演算処理結果を出力する機能も持っている。
【００８６】
特に、マルチプロセッサシステム２００が、車両等の制御対象の制御用に用いられる場合には、マルチプロセッサシステムの入出力装置２２０は、制御に必要な制御対象の状態を示す状態情報データ（例えば、車両のエンジンの回転数や温度など）をバイナリデータとしてリアルタイムに読み込み、並列プログラムで演算処理した後、制御対象を制御するための制御情報データをリアルタイムで出力する機能を持つ。
【００８７】
以上説明したように、プロセッシングエレメントＰＥ１〜ＰＥｎ又はそれらをグループ化したプロセッシンググループＰＧのそれぞれを備え、さらに共有記憶装置や入出力装置を備えるマルチプロセッサシステムが本発明の並列化コンパイラにより生成された並列プログラムを実行する「システム」に該当する。なお、本発明の「システム」は、一つの半導体チップに集積されたマルチプロセッサシステムや一つの筐体に複数の演算処理部を搭載したシステムに限らず、演算処理部としての複数のコンピュータを通信を介して互いに接続することにより構成したシステムも含む。
（並列プログラム生成処理）
次に、図２のフローチャートを参照しながら、続いてその他の例である図３を参照しながら、並列化コンパイル装置１００の演算処理要素１１０が並列化コンパイラＣを実行することにより行われる、並列プログラムＰ２及びそのバイナリコードＰＢの生成処理について説明する。
【００８８】
まず、図２の説明から始める。
【００８９】
演算処理要素１１０は、逐次プログラムＰ１及び設定ファイルＣＦを読取装置１２０を介して読み取ると、逐次プログラムＰ１に対して字句解析及び構文解析を実行する（図２／ＳＴＥＰ００２）。
【００９０】
演算処理要素１１０は、字句解析及び構文解析の解析結果に基づき、逐次プログラムＰ１を、代入文及び条件分岐を含む基本ブロック（ＢＢ）と、繰り返し実行を含む繰り返しブロック（ＲＢ）と、関数を含むサブルーチンブロック（ＳＢ）との３種類の粗粒度タスク（マクロタスク）に分割する（図２／ＳＴＥＰ００４）。なお、１又は複数の基本ブロック（ＢＢ）を融合した疑似代入文ブロック（ＢＰＡ）を１つのタスクとして扱ってもよい。なお、図２／ＳＴＥＰ００４の処理が、本発明の「タスク分割ステップ」の一例に該当する。
【００９１】
演算処理要素１１０は、各タスクの実行時間を含む実行コストを解析する（図２／ＳＴＥＰ００６）。
【００９２】
例えば、演算処理要素１１０は、図４に示されるように、タスクのそれぞれの前後にプロファイラｐｒｏ１〜８を差し込んで、所定のシナリオに沿って実行させることにより、実行コストとしての各タスクのタスク実行回数及び実行時間（ｅ）を計測する。例えば、タスクＭＴ１の実行コストを考える。ＭＴ１の前には、ｐｒｏ１（mp_prop_count(1); mp_prop_clock_start(1)）、後にはｐｒｏ２（mp_prop_clock_end(2)）が差し込まれており、ｐｒｏ１はＭＴ１を処理が通過する回数とその時のＭＴ１の処理の開始時刻を計測し、ｐｒｏ２はＭＴ１の処理の終了時刻を計測する。ＭＴ１の実行時間はＭＴ１の終了時刻の計測値から開始時刻の計測値を差し引いて求めることができる。
【００９３】
また、ｐｒｏ３（mp_prop_count(2); mp_prop_clock_start(2)）はＭＴ２の処理回数とともに処理開始時刻を計測し、ｐｒｏ４（mp_prop_clock_end(2)）はＭＴ２の処理の終了時刻を計測し、ｐｒｏ５（mp_prop_count(3); mp_prop_clock_start(3)）はＭＴ３の処理回数とともに処理開始時刻を計測し、ｐｒｏ６（mp_prop_clock_end(3)）はＭＴ３の処理の終了時刻を計測する。ＭＴ２とＭＴ３とはＭＴ１から分岐して後続しており、ＭＴ２とＭＴ３の処理回数の和はＭＴ１の処理回数に一致する。また、ＭＴ２の処理回数をＭＴ１の処理回数で割れば、ＭＴ１からＭＴ２に分岐する確率を計算できる。同様に、ＭＴ３に分岐する確率を計算できる。また、ＭＴ１の場合と同様に、ＭＴ２及びＭＴ３についても、それぞれの処理の終了時刻の計測値から処理の開始時刻の計測値を差し引けば、それぞれの実行時間を求めることができる。
【００９４】
このようにして他のすべてのタスクについても同様に実行時間（実行コスト）を計測できる。
【００９５】
実行時間及び条件分岐の各分岐方向への分岐の確率の計測ができれば、そのデータに基づいて、種々のタスクグループの実行コストの計算ができる。タスクの実行コスト計算については、参考文献２（宮沢稔、岡本雅巳、笠原博徳、「マルチグレイン並列処理のための階層的並列性制御手法」、情報処理学会論文誌、２００３年）に記載されている。
【００９６】
実行コストには、このような実行回数と実行時間のみならず、タスクを実行するための消費電力が含まれてもよい。この計測した各タスクの実行コストを用いて、タスクグループ（複数のタスクの集り）の実行コストを計算することができる。
【００９７】
実行コスト解析のＳＴＥＰ００６を実行した後、演算処理要素１１０は、特に実行コストの大きなサブルーチンブロックＳＢが含まれていれば、必要な場合には当該サブルーチンブロックＳＢに対してインライン展開を実行する。このインライン展開は、行われる場合も行われない場合もあるので、図２には（図３にも）示されていない。インライン展開とは、周知のようにプログラムに含まれるサブルーチンを含む関数呼び出しをサブルーチンＳＢの中のプログラムコードで置き換えることを意味する。図５にプログラムを構成する基本ブロックＢＢ、繰返しブロックＲＢ、サブルーチンブロックＳＢという３種類の（マクロ）タスクに含まれる可能性のある階層化された並列性について示している。図５は、例えば、ＳＢの中に含まれるプログラムコードが、当該ＳＢを呼び出している（関数呼び出しを行っている）階層（1st layer）の下の階層（2nd layerや3rd layer）に属し、同様にＢＢ、ＲＢ、ＳＢに分割され得ることを示している。このインライン展開は、サブルーチンＳＢの中のプログラムコードを上位の階層に展開しそれを含めて解析することによって並列性を抽出できる可能性が高くなる場合に用いるが、インライン展開を多用するとプログラムコードの規模が非常に大きくなる場合があるので、上位の階層から１階層ずつ行っていく。インライン展開を行う場合には、処理フローを再度ＳＴＥＰ００４タスク分割に戻すことになる。また、並列化処理フローの冒頭からインライン展開後のプログラムを並列化対象とすることもある。
【００９８】
実行コスト解析の終了後、演算処理要素１１０は、タスク分割処理において分割された各タスクに対し、制御フロー及びデータ依存を解析し（図２／ＳＴＥＰ０１０）、マクロフローグラフ（以下、「ＭＦＧ」と略称）を生成する（図２／ＳＴＥＰ０１２）。
【００９９】
このようにして生成されたＭＦＧの一例を図６に示す。ＭＦＧは、図６に示されるように、ノードとしてのタスクと、２つのノードを接続する実線エッジ及び破線エッジとからなる。また、図６の中で、ＥＭＴ１４は一群のタスクの終了を示す記号であってタスクではない。
【０１００】
各タスクは、基本ブロック（ＢＢ）（又は疑似代入文ブロック（ＢＰＡ））、繰り返しブロック（ＲＢ）及びサブルーチンブロック（ＳＢ）のうちのいずれかである。各実線エッジは、後処理のタスク（逐次プログラム上の後実行となるタスク）から先処理のタスク（逐次プログラム上の先実行となるタスク）へのデータ依存を示す。各破線エッジは、先行処理のタスクから後続処理のタスクへの制御フローを示す。ノード内の小円は、条件分岐を示す。
【０１０１】
例えば、図６においては、基本ブロックＢＢ１と基本ブロックＢＢ２及び基本ブロックＢＢ５のそれぞれとが破線エッジで結ばれているが、これは、基本ブロックＢＢ１に含まれる条件分岐の各分岐方向が基本ブロックＢＢ２及び基本ブロックＢＢ５となっていることを意味する。以下の説明では、ＭＦＧにおいて、基本ブロックＢＢ１に含まれる条件分岐の分岐方向がＢＢ２である分岐方向を、「ＢＢ１２」のように、条件分岐を含むタスクＢＢ１の名称ＢＢ１とともに制御フロー上の分岐方向の最初のタスクＢＢ２の番号２を下付数字で表す。同様に、基本ブロックＢＢ１に含まれる条件分岐の分岐方向がＢＢ５である分岐方向を「ＢＢ１５」と表す。
【０１０２】
また、図６において、基本ブロックＢＢ３とサブルーチンブロックＢＢ６とが実線エッジで結ばれているが、これは、サブルーチンブロックＢＢ６が基本ブロックＢＢ３にデータ依存を有していることを意味する。
【０１０３】
なお、図６におけるＭＦＧでは各エッジの矢印は省略されているが、各エッジの方向は下向きとしている。
【０１０４】
演算処理要素１１０は、ＭＦＧに対し、タスクの最早実行可能条件を解析する（図２／ＳＴＥＰ０１４）。なお、図２／ＳＴＥＰ０１４の処理が、本発明の「依存解析ステップ」に含まれる「最早実行可能条件解析ステップ」の一例に該当する。タスクの最早実行可能条件の解析は、ＭＦＧに基づいて各タスクの制御依存及びデータ依存を解析することにより行われるが、各タスクの制御依存及びデータ依存の解析が終了すれば、事実上最早実行可能条件解析は容易に実施できるので、本明細書では両者ともにあるいは両者のいずれかを依存解析とする。
【０１０５】
まず、制御依存及びデータ依存の解析を図６のＭＦＧに対して実施した場合について説明する。図６に示される基本ブロックＢＢ１の条件分岐の実行結果に応じて基本ブロックＢＢ２の実行の可否が決定されるので、基本ブロックＢＢ２は、基本ブロックＢＢ１に含まれる条件分岐の一の分岐方向ＢＢ１２に対して制御依存する。
【０１０６】
また、基本ブロックＢＢ２に含まれる条件分岐の分岐方向に応じて基本ブロックＢＢ３の実行の要否が決定されるので、基本ブロックＢＢ３は、基本ブロックＢＢ２に含まれる条件分岐の一の分岐方向ＢＢ２３に制御依存する。この場合、基本ブロックＢＢ３は、基本ブロックＢＢ１に含まれる条件分岐の一の分岐方向ＢＢ１２に間接制御依存する。
【０１０７】
また、基本ブロックＢＢ１の条件分岐の分岐方向がいずれとなろうとも基本ブロックＢＢ５が実行されるので、基本ブロックＢＢ５は、基本ブロックＢＢ１に含まれる条件分岐の全ての分岐方向ＢＢ１２、ＢＢ１５に制御依存しない。
【０１０８】
基本ブロックＢＢ６は、基本ブロックＢＢ３にデータ依存を有しているが、基本ブロックＢＢ１の条件分岐の一の分岐方向ＢＢ１５への確定により、基本ブロックＢＢ２の実行がされない（ひいては基本ブロックＢＢ３の実行がされない）ことが確定した場合にも、基本ブロックＢＢ６の実行をすることが出来る。このため、ＢＢ６は、基本ブロックＢＢ１に含まれる条件分岐の一の分岐方向ＢＢ１５に拡張制御依存する。
【０１０９】
また、基本ブロックＢＢ２の条件分岐の一の分岐方向ＢＢ２４への確定により、基本ブロックＢＢ３の実行がされないことが確定した場合にも、基本ブロックＢＢ６の実行をすることが出来るので、基本ブロックＢＢ６は、基本ブロックＢＢ２の条件分岐の一の分岐方向ＢＢ２４に拡張制御依存する。
【０１１０】
ＭＦＧは、逐次プログラムにおけるタスク間の制御フローとデータ依存を表すが、並列性は表していない。並列性を抽出するためには、これまでに説明してきた各タスクの制御依存と当該各タスク間のデータ依存の解析結果を基に最早実行可能条件解析を行う必要がある。あるタスクの最早実行可能条件とは、そのタスクが最も早い時点で実行可能になる条件である。ここで、各タスクには、次の関係が成り立つ（参考文献３（稲石大祐、木村啓二、藤本謙作、尾形航、岡本雅巳、笠原博徳、「最早実行可能条件解析を用いたキャッシュ最適化手法」、情報処理学会全国大会講演論文集、１９９９年）参照）。
【０１１１】
（１）第ｉタスクＭＴｉが第ｊタスクＭＴｊ（ｊ≠ｉ）に含まれる条件分岐の一の分岐方向に制御依存する場合、第ｊタスクＭＴｊの条件分岐の分岐方向が確定すれば、第ｊタスクＭＴｊの実行が終了しなくても、第ｉタスクＭＴｉは実行できる。
【０１１２】
（２）第ｉタスクＭＴｉが第ｋタスクＭＴｋ（ｋ≠ｉ）にデータ依存する場合、第ｋタスクＭＴｋの実行が終了するまで第ｉタスクＭＴｉは実行できない。
【０１１３】
これを整理すると、第ｉタスクＭＴｉの最早実行可能条件は、次の（３）かつ（４）と表すことが出来る。
【０１１４】
（３）第ｉタスクＭＴｉが制御依存する第ｊタスクＭＴｊの条件分岐が、第ｉタスクＭＴｉを含むパスに分岐する。
【０１１５】
（４）第ｉタスクＭＴｉがデータ依存する第ｋタスクＭＴｋ（ｋ≠ｉ）が全て終了するか又は第ｋタスクＭＴｋ（ｋ≠ｉ）の不実行が確定する。
【０１１６】
例えば、図６のマクロフローグラフ（ＭＦＧ）における基本ブロックＢＢ６（前記「ＭＴｉ」に相当）の最早実行可能実行条件は次の（５）かつ（６）で表すことが出来る。
【０１１７】
（５）基本ブロックＢＢ１（前記「ＭＴｊ」に相当）の実行が確定する。（基本ブロックＢＢ１の分岐方向がいずれであっても基本ブロックＢＢ６の実行が確定するため。）
（６）基本ブロックＢＢ６がデータ依存する基本ブロックＢＢ３（前記「ＭＴｋ」に相当）が終了する、又は、基本ブロックＢＢ６がデータ依存する基本ブロックＢＢ３が実行されないことが決定する。
【０１１８】
ここで、「基本ブロックＢＢ６がデータ依存する基本ブロックＢＢ３が実行されないことが決定する」とは、図６のＭＦＧでいえば、「基本ブロックＢＢ３が制御依存する基本ブロックＢＢ２における条件分岐の分岐方向が、基本ブロックＢＢ４を実行する分岐方向ＢＢ２４に確定すること」、または、「基本ブロックＢＢ３が間接制御依存する基本ブロックＢＢ１における条件分岐の分岐方向が基本ブロックＢＢ５を実行する分岐方向ＢＢ１５に確定すること」である。
【０１１９】
そして、「基本ブロックＢＢ３が制御依存する基本ブロックＢＢ２における条件分岐の分岐方向が、基本ブロックＢＢ４を実行する分岐方向ＢＢ２４に確定する」場合は、「基本ブロックＢＢ１の条件分岐の分岐方向が基本ブロックＢＢ２を実行する分岐方向ＢＢ１２に確定していること」が前提になるので、「基本ブロックＢＢ１の実行が確定する」場合を含んでいる。
【０１２０】
また、「基本ブロックＢＢ３が間接制御依存する基本ブロックＢＢ１における条件分岐の分岐方向が基本ブロックＢＢ５を実行する分岐方向ＢＢ１５に確定する」場合は、「基本ブロックＢＢ１の実行が確定する」場合を含んでいる。
【０１２１】
従って、図６のＭＦＧに示す基本ブロックＢＢ６の最早実行可能条件は、次のように簡略化できる。
【０１２２】
基本ブロックＢＢ３が終了する、又は、基本ブロックＢＢ１の条件分岐の分岐方向が基本ブロックＢＢ５を実行する分岐方向ＢＢ１５に確定する、又は、基本ブロックＢＢ２の条件分岐の分岐方向が基本ブロックＢＢ４を実行する分岐方向ＢＢ２４に確定する。なお、最早実行可能条件はこのように必ずしも簡略化されなくともよい。
【０１２３】
以上のように、基本ブロックＢＢ６に対して行ったと同様の再送実行可能条件解析を他のタスクに対しても行うと、各タスクの最早実行可能条件は、図７に示される表により表される。図７に示される表は、左側の欄がそれぞれのタスクの名称を示し、右側の欄が、それぞれのタスクがデータ依存するタスク又は制御依存若しくは拡張制御依存する分岐方向を示している。例えば、図７に示される表においては、ＢＢ２は、ＢＢ１の条件分岐の分岐方向ＢＢ１２に制御依存していることを示す。また、図７に示される表においては、ＢＢ６は、ＢＢ３にデータ依存し、ＢＢ１の条件分岐の分岐方向ＢＢ１５に制御依存し、ＢＢ２の条件分岐の分岐方向ＢＢ２４に拡張制御依存していることを示す。図７に示される表において、ｏｒは、いずれかの条件が満たされれば左欄のタスクが実行可能となることを示す。図７に示される表においては示していないが、複数の条件が満たされた場合に実行可能となることを示す場合には、（ＢＢ１５  ａｎｄ  ＢＢ３）のように、ａｎｄで表すことが出来る。
【０１２４】
演算処理要素１１０は、図２／ＳＴＥＰ０１４の最早実行可能条件解析の結果に基づいて、タスク間の並列性を抽出したマクロタスクグラフ（以下、「ＭＴＧ」と略称）を生成する（図２／ＳＴＥＰ０１６）。
【０１２５】
例えば、演算処理要素１１０は、すでに説明した通り、図６のＭＦＧにおける各タスクに対して図２／ＳＴＥＰ０１４の最早実行可能条件解析を実行しその結果に基づいて、図８に示されるＭＴＧを生成する。
【０１２６】
ＭＦＧと同様に、ＭＴＧにおけるノードはタスクを、ノード内の小円はタスク内の条件分岐を、実線のエッジはデータ依存を、破線のエッジは制御依存又は拡張制御依存を表す。また、図８のＭＴＧにおけるＥＭＴ１４は、図６で述べたように、タスクではなく一群のタスクの終了を示す記号である。
【０１２７】
また、各エッジを束ねるアークには２種類あり、実線アークは、当該アークによって束ねられた各エッジがＡＮＤ関係にあること、すなわち実線アークに束ねられた複数の破線エッジにそれぞれ後続するタスクは同時並行で実行可能であることを示し、破線アークは、当該アークによって束ねられた各エッジがＯＲ関係にあること、すなわち破線アークに束ねられた複数の破線エッジにそれぞれ後続する各タスクは条件分岐による選択の関係にあることを示している。
【０１２８】
例えば、図８に示すＭＴＧにおいて、基本ブロックＢＢ６は、基本ブロックＢＢ３にデータ依存を有しているため、データ依存を示す実線エッジによって基本ブロックＢＢ３と接続されている。
【０１２９】
例えば、図６のＭＦＧからわかるように、基本ブロックＢＢ６は基本ブロックＢＢ１に含まれる条件分岐の一の分岐方向ＢＢ１５及び基本ブロックＢＢ２に含まれる条件分岐の一の分岐方向ＢＢ２４に拡張制御依存を有しているため、基本ブロックＢＢ６は、制御依存又は拡張制御依存を示す破線エッジによって基本ブロックＢＢ１に含まれる条件分岐のＢＢ２及びＢＢ４に向かう分岐方向とは異なる分岐方向と、また基本ブロックＢＢ２に含まれる条件分岐のＢＢ３に向かう分岐方向とは異なる分岐方向とそれぞれ接続されている。
【０１３０】
また、図８のＭＴＧ中の基本ブロックＢＢ１２についても基本ブロックＢＢ６と同様の説明ができる。すなわち、まずＢＢ１２は基本ブロックＢＢ１１にデータ依存している。
【０１３１】
そして、図６のＭＦＧからわかるように、ＢＢ１２は基本ブロックＢＢ７に含まれる条件分岐の一の分岐方向ＢＢ７１１及び基本ブロックＢＢ８に含まれる条件分岐の一の分岐方向ＢＢ８１０に拡張制御依存を有しているため、ＢＢ１２は、制御依存又は拡張制御依存を示す破線エッジによって基本ブロックＢＢ７に含まれる条件分岐のＢＢ８及びＢＢ１０に向かう分岐方向とは異なる分岐方向と、また基本ブロックＢＢ８に含まれる条件分岐のＢＢ９に向かう分岐方向とは異なる分岐方向とそれぞれ接続されている。
【０１３２】
これらのエッジは、前述したようにＯＲ関係にあるので、破線アークで束ねられている。なお、ＭＴＧにおいて矢印が省略されているエッジの向きは下向きである。また、矢印を持つエッジは、オリジナルの制御フローを表す。
【０１３３】
また、例えば、基本ブロックＢＢ５は、図６のＭＦＧからわかるように、基本ブロックＢＢ１等の先行タスクの条件分岐がいずれに分岐しても実行されることが確定しているから、基本ブロックＢＢ１等の先行タスクに含まれる条件分岐の各分岐方向ＢＢ１２、ＢＢ１５に対する制御依存を有しない。また、基本ブロックＢＢ５は、先行タスクに対するデータ依存及び拡張制御依存も有しない。このため、図７の表にに示されるように、基本ブロックＢＢ５については最早実行可能条件の欄が空欄になっており、図８のＭＴＧにおける基本ブロックＢＢ５には、他の先行タスクからのエッジがない。すなわち、ＢＢ５は他のタスクあるいはタスクグループと並行して実行可能であることを示す。同様に、図６のＭＦＧ上では、基準タスクＢＢ７の後に実行される基本ブロックＢＢ１１、ＢＢ１３もＢＢ７に含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存もしていないので、図７の表の再送実行可能条件の欄が空欄になっており、図８のＭＴＧにおける基本ブロックＢＢ１１、ＢＢ１３には、先行タスクからのエッジがない。
【０１３４】
続いて、演算処理要素１１０は、ＭＴＧから、融合対象のタスクグループを決定する融合すべきタスクグループ決定処理を実行する（図２／ＳＴＥＰ０１８）。この図２／ＳＴＥＰ０１８の詳細を展開したフローチャートを図９に示すが、この図９を用いて、図２／ＳＴＥＰ０１８における処理の内容を詳しく説明する。また、この説明を具体的に行うために、図８のＭＴＧ中の基本ブロックＢＢ７に含まれる条件分岐のすべての分岐方向の各々に後続するすべてのタスクをまとめて図１０に示したＭＴＧを用意する。図１０のＭＴＧを基にした説明は、当然のことながら、図８のＭＴＧ中の基本ブロックＢＢ１に含まれる条件分岐のすべての分岐方向の各々に後続するタスクにも適用できる。
【０１３５】
以下に、図９及び図１０を参照して、融合すべきタスクグループ決定処理をより詳細に説明する。
【０１３６】
演算処理要素１１０は、ＭＴＧを参照して、他のタスクにデータ依存もせず、他のタスクに含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存も間接制御依存もせずかつ一つの条件分岐を含むタスクを基準タスクとして特定する（図９／ＳＴＥＰ２０２）。
【０１３７】
他のタスクにデータ依存もせず、他のタスクに含まれる条件分岐のいずれの分岐方向にも制御依存も拡張制御依存も間接制御依存もせずかつ一つの条件分岐を含むタスクを基準タスクとして特定する例として、演算処理要素１１０が、図１０に示されるＭＴＧを参照して、基本ブロックＢＢ７を基準タスクとして特定する処理を挙げることができる。
【０１３８】
続いて、演算処理要素１１０は、ＭＴＧを参照して、基準タスクと、基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクのすべてである第１後続タスクとをタスクグループとして特定する（図９／ＳＴＥＰ２０４）。なお、図９／ＳＴＥＰ２０４の処理が、本発明の「第１特定ステップ」の一例に該当する。
【０１３９】
図１０の例でいえば、演算処理要素１１０は、図１０に示されるＭＴＧを参照して、基準タスクとしての基本ブロックＢＢ７の条件分岐の実線アークで束ねられた分岐方向、すなわちＡＮＤ結ばれた分岐方向に制御依存する基本ブロックＢＢ８、ＢＢ１０と、基準タスクとしての基本ブロックＢＢ７の破線アークで束ねられた他の分岐方向に拡張制御依存する基本ブロックＢＢ１２とを第１後続タスクとして特定する。なお、「基本ブロックＢＢ７の条件分岐の実線アークで束ねられた分岐方向、すなわちＡＮＤ結ばれた分岐方向」は、図６における分岐方向BB7８をMTGの作成方法に従って複数に分けて表示したものである。また、「基本ブロックＢＢ７の破線アークで束ねられた他の分岐方向」は、図６における分岐方向BB７１１をMTGの作成方法に従って複数に分けて表示したものである。
【０１４０】
そして、演算処理要素１１０は、基準タスクと第１後続タスクとをタスクグループとして特定する（図９／ＳＴＥＰ２０４）。図９／ＳＴＥＰ２０４が、本発明における「第１特定ステップ」に相当する。
【０１４１】
演算処理要素１１０は、ＭＴＧを参照して、この特定されたタスクグループに含まれるタスクの条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクが存在するか否かを判定する（図９／ＳＴＥＰ２０６）。
【０１４２】
演算処理要素１１０は、図１０に示されるＭＴＧを参照して、基本ブロックＢＢ９が前述の特定されたタスクグループに含まれる基本ブロックＢＢ８に含まれる条件分岐のＢＢ９に向かう分岐方向に制御依存していることを特定する。このため、演算処理要素１１０は、図９のＳＴＥＰ２０６において当該タスクグループに含まれるタスクに含まれる条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクが存在する、すなわちＹＥＳと判定することとなり、この基本ブロックＢＢ９を第２後続タスクとする。この第２後続タスクとなる基本ブロックＢＢ９は、基準タスクＢＢ７に含まれる条件分岐のＢＢ８への分岐方向に間接制御依存していることが注目される。つまり、第２後続タスクを特定することは基準タスクに含まれる条件分岐の当該分岐方向に間接制御依存するタスクを特定することになる。
【０１４３】
前述のように、図９／ＳＴＥＰ２０６の判定結果がＹＥＳである場合には、演算処理要素１１０は、当該第２後続タスク（図１０の例では基本ブロックＢＢ９）を当該タスクグループに追加する（図９／ＳＴＥＰ２０８）。なお、図９／ＳＴＥＰ２０８の処理が、本発明の「第２特定ステップ」の一例に該当する。
【０１４４】
図９／ＳＴＥＰ２０８の後、演算処理要素１１０は、再度図９／ＳＴＥＰ２０６を実行して、第２後続タスクに含まれる条件分岐のいずれかの分岐方向に制御依存又は拡張制御依存するタスクの有無を判定する。
【０１４５】
演算処理要素１１０は、例えば図１０に示されるＭＴＧを参照して、基本ブロックＢＢ９を追加したあとのタスクグループに含まれる条件分岐のすべての分岐方向の各々について、制御依存又は拡張制御依存するタスクが存在しないと判定する。
【０１４６】
図９／ＳＴＥＰ２０６の判定結果が否定的である場合（図９／ＳＴＥＰ２０６‥ＮＯ）、演算処理要素１１０は、タスクグループを融合すべきタスクグループとして決定する（図９／ＳＴＥＰ２１０）。このようにして、図９／ＳＴＥＰ２０６〜ＳＴＥＰ２０８を繰り返す一連の処理が、本発明の「制御ステップ」の一例に該当する。
【０１４７】
以上、図２／ＳＴＥＰ０１８の「融合すべきタスクグループ決定」処理について、図９のより詳細なフローチャートを用いて、図８のＭＴＧから基本ブロックＢＢ７及びそのすべての分岐方向の各々に後続するタスクを切り出した図１０のＭＴＧを例として挙げながら説明してきた。この説明は、当然のことながら、図８のＭＴＧにおける基本ブロックＢＢ１とそれに含まれる条件分岐のすべての分岐方向の各々に後続するすべてのタスクに適用することができる。例えば、図１０における基本ブロックＢＢ７、ＢＢ１０、ＢＢ８、ＢＢ９、基本ブロックＢＢ１２をそれぞれ図８の基本ブロックＢＢ１、ＢＢ４、ＢＢ２、ＢＢ３、基本ブロックＢＢ６に置き換えれば、基本ブロックＢＢ７とそれに含まれるすべての条件分岐の各々に後続するタスクを切り出した図１０を基にした説明はすべて同様に成立する。つまり、図８のＭＴＧには、二つの融合すべきタスクグループの存在を確認することができる。
【０１４８】
また、図９／ＳＴＥＰ２０２〜ＳＴＥＰ２１０の処理に代えて、演算処理要素１１０は、例えばすべてのタスクが制御依存、拡張制御依存又は間接制御依存する条件分岐を含むタスクを判定し、当該判定結果に基づいて、融合すべきタスクグループを決定してもよい。また、タスクの実行コストを勘案して、タスクグループにデータ依存するタスクを含めるように、タスクグループを特定してもよい。
【０１４９】
次に、演算処理要素１１０は、図２／ＳＴＥＰ０１８で抽出したタスクグループを「融合すべきタスクグループ」として一つの新タスクとして融合する（図２／ＳＴＥＰ０２６）。
【０１５０】
例えば、情報処理要素１１０は、図１０あるいは図８のＭＴＧを参照して、図８の基本ブロックＢＢ１〜ＢＢ４及び基本ブロックＢＢ６を含む「融合すべきタスクグループ」を融合することにより、新たなタスクｂｌｏｃｋ１を生成する。演算処理要素１１０は、、情報処理要素１１０は、基本ブロックＢＢ７〜ＢＢ１０及び基本ブロックＢＢ１２を含む「融合すべきタスクグループ」を融合して新たなタスクｂｌｏｃｋ２を生成する。この結果、これらの新たなタスクｂｌｏｃｋ１及び新たなタスクｂｌｏｃｋ２図８に示される基本ブロックＢＢ５、ＢＢ１１及びＢＢ１３を含むＭＴＧが生成される。このＭＴＧを図１４Ａに示す。
【０１５１】
この図１４ＡのＭＴＧからわかるように、融合して生まれた新たなタスクｂｌｏｃｋ１及びｂｌｏｃｋ２など５つの並列実行可能なタスクを抽出することができた。
【０１５２】
次に、演算処理装置１１０は、図２／ＳＴＥＰ０２６を経て生成されたＭＴＧとともに、前述した設定ファイルＣＦ（ＰＥの種類、数、グルーピングの状況、メモリの状況などの情報を含む）に適合するようにスタティックスケジューリング処理を実行する。なお、図２／ＳＴＥＰ０２８の処理が、本発明の「スケジューリングステップ」の一例に該当する。
【０１５３】
例えば、設定ファイルＣＦにおいて、マルチプロセッサシステムのＰＥ数が５であるとすれば、演算処理要素１１０は、５つのタスクをそれぞれのPEに割り当てることができる。また、仮に設定ファイルCFに示されるＰＥ数が２であるとすると、演算処理要素１１０は、前記５つのタスクの実行コストを基に２つのＰＥでの実行コスト差が小さくなるように割り当てることになる。例えば演算処理要素１１０は、第１のＰＥであるＰＥ１にはｂｌｏｃｋ１とＢＢ５を、第２のＰＥであるＰＥ２にはｂｌｏｃｋ２、ＢＢ１１及びＢＢ１３という割り当てをなしうる。
【０１５４】
前述の例では、並列実行可能なタスク数が３〜５と少なかったが、この数が多くなるとともにマルチプロセッサシステムを構成するＰＥの数が多くなる場合は、スケジューリング処理は、前述のＰＥの数を基に行うといった単純なものではなく、諸々の条件を考慮する必要があり、一般に複雑になる。
【０１５５】
ここでスケジューリング方法としては、特許文献１に示される、スタティックスケジューリングにより、各タスクの階層に応じていずれかのプロセッシングエレメントＰＥ又はプロセッシンググループＰＧに割り当てる方法が採用されうる。
【０１５６】
また、マルチプロセッサシステム、なかんずく半導体チップ上に形成されたマルチプロセッサシステムにおいては、システムの中にプロセッシングエレメントなどの動作電圧をソフトウェアにより可変にする機構を設けているものが多い。それは、マルチプロセッサシステムの動作電圧を個々のタスクの実行状況などに応じて最適設定し、その消費電力を削減するためである。演算処理要素１１０は、当該推定された消費電力を実行コストとして、この実行コストに基づいて、各タスクの実行に適切なマルチプロセッサシステムを構成するプロセッシングエレメントなどの動作電圧を選択し、プロセッシングエレメントＰＥ又はプロセッシンググループＰＧを当該動作電圧で動作させる指示を挿入してもよい。なお、適切な動作電圧の選択の詳細については、特許第４０８２７０６号公報に記載されている。
【０１５７】
また、演算処理要素１１０は、依存があるグループ間でのキャッシュのグローバル最適化を試みることにより、キャッシュの最適化を行ってもよい。なお、グローバル最適化については特許第４１７７６８１号公報に記載されている。
【０１５８】
ここで、電圧制御及びキャッシュの最適化等については、特許文献１に開示される自動並列化ＡＰＩ標準解釈系及びマルチプロセッサシステム２００のプラットフォームに応じたランタイムライブラリ等を利用することにより、比較的容易に実現することが可能となる。
【０１５９】
演算処理要素１１０は、スケジューリングの結果に基づいて、並列プログラムＰ２を生成する（図２／ＳＴＰＥ０２８）。
【０１６０】
演算処理要素１１０は、設定ファイルＣＦに記載された情報に基づき、マルチプロセッサシステムの各種ＰＥに対応したバックエンドコンパイラを用いて、並列プログラム（ソースコード）Ｐ２からバイナリコードＰＢを生成する（図２／ＳＴＥＰ０３２）。このＳＴＥＰ０３２の処理は、マルチプロセッサシステム２００において実行されてもよい。なお、図２／ＳＴＥＰ０３０又は図２／ＳＴＥＰ０３２の処理が、本発明の「生成ステップ」の一例に該当する。
【０１６１】
以上の処理により、マルチプロセッサシステム２００により並列実行可能な並列プログラムＰ２（及びそのバイナリコードＰＢ）が生成される。演算処理要素１１０は、図２のフローチャートにおける並列化の一連の処理を終了する。
【０１６２】
以上、説明したように、本発明の技術では、従来技術に比してより多くの並列実行可能なタスクを抽出できることがあきらかになったが、さらに元の逐次プログラムの状態とマルチプロセッサシステムの構成によっては、より多くの並列実行可能なタスクを抽出することも可能である。以下にその他の例について説明する。
【０１６３】
それは、図２のＳＴＥＰ０１８で生成した「融合すべきタスクグループ」にさらに並列実行可能なタスクが存在する可能性がないか解析し、存在する場合及び存在しない場合の両方についての融合すべきタスクグループの取扱を決めるステップを図２／ＳＴＥＰ０１８の直後に挿入する例である。このようにして作成されたフローチャートを図３に示す。図３のＳＴＥＰ２〜ＳＴＥＰ０１８及びＳＴＥＰ０２６〜ＳＴＥＰ０３２は図２と同じである。
【０１６４】
この図３／ＳＴＥＰ０２０〜ＳＴＥＰ０２４において、演算処理要素１１０は、「融合すべきタスクグループ」に含まれる基準タスクの一の分岐方向に制御依存、拡張制御依存、さらには間接制御依存する複数のタスク相互間にデータ依存も制御依存もしないタスクが存在するかどうか判定し、存在しない場合には、そのまま融合すべきタスクグループに融合処理を施し、存在する場合にはそれらの複数のタスクを並列実行可能として扱う。
【０１６５】
図３に示されているこのような場合の処理フローの例を図２の処理フローの場合と同じく、図８のＭＴＧを例に挙げて以下に説明する。この場合、説明の見通しをよりよくするために、図１０と同じく、図８のＭＴＧから抜き出した基本ブロックＢＢ７を先頭とする「融合すべきタスクグループ」を若干表現を変更するものの構成を変えないで図１１Ａに再掲し、この図１１Ａを用いて以下の説明を行う。
【０１６６】
演算処理要素１１０は、図３／ＳＴＥＰ０１８「融合すべきタスクグループ決定」処理終了後、本発明の「条件判定ステップ」の一例である次の図３／ＳＴＥＰ０２０「複製のための所定条件充足」判定処理に進む。
【０１６７】
前述の基準タスク及びそれに第１後続タスク、第２後続タスクなどの後続タスクを加えたタスクグループ、すなわちこれまで説明してきた「融合すべきタスクグループ」に含まれる後続タスクグループの中に並列実行可能なタスクあるいはタスクグループが存在しない場合は、前述の基準タスク、第１後続タスク、第２後続タスクを含むタスクグループを一つのタスクに融合することにより条件分岐を有するタスクを一つの融合されたタスクの中に隠蔽することができる。つまり、この場合はこれまでの図２の処理フローと結果は同じなので、並列実行可能なタスクあるいはタスクグループが存在する場合を中心に以下に説明する。
【０１６８】
このようなタスクあるいはタスクグループが存在する場合、演算処理要素１１０は、基準タスクに含まれる条件分岐を当該並列実行可能なタスクあるいはタスクグループの数から１を引いた数だけ複製する。例えば、並列実行可能なタスクあるいはタスクグループの数が３である場合、演算処理要素１１０は、基準タスクに含まれる条件分岐を３−１＝２だけ複製し、基準タスクに含まれる条件分岐と併せて３つの条件分岐が存在するようにする。そして、基準タスクに含まれる条件分岐と、複製された条件分岐との各々に当該並列実行可能なタスクを後続させ、それぞれの条件分岐と当該条件分岐に後続するタスクを融合することにより、条件分岐と当該並列実行可能なタスクとをその数だけのマルチプロセッサシステムの（複数の）プロセッシングエレメントＰＥにそれぞれ実行させることができて並列度を増すことができる。
【０１６９】
条件分岐の複製処理の詳細については、特開２０１４−１６０４５３号公報に記載されているが、本発明においては、図２の並列プログラムの生成の処理フローと結合することにより、より多くの並列実行可能なタスクの抽出が可能である。以下、そのことを説明する。
【０１７０】
以下において、基準タスクに含まれる条件分岐を「対象の条件分岐」と適宜いう。
【０１７１】
演算処理要素１１０は、複製してタスク融合するか、複製しないでタスク融合するかを決定するために、複製のための所定条件を充足するか否かを判定する（図３／ＳＴＥＰ０２０）。
【０１７２】
所定条件は、少なくとも、対象の条件分岐の複数の分岐方向のうち、一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクまたはタスクグループの間に互いにデータ依存を有しないという並列実行可能条件を含む。このように、当該一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクまたはタスクグループの間に互いにデータ依存を有しない場合、当該一の分岐方向を以下、「対象の分岐方向」という。また、ここで言う「一の分岐方向」というのは、最早実行可能条件解析を行う前の状態、例えば図６のＭＦＧに表現されている状態で使われる表現であり、最早実行可能条件解析を行った後の状態、例えば図８のＭＴＧに表現されている状態では、実線アークで束ねられた破線エッジが示す（ＡＮＤの関係にある）複数の分岐方向として表現されることもある。当然のことながら、ＭＴＧ上でも「一つの分岐方向」であるばあいもある。そして、「対象の分岐方向」は、ＭＦＧ上では前記「一の分岐方向」を示し、ＭＴＧ上では実線アークで束ねられた破線エッジが示す（ＡＮＤの関係にある）複数の分岐方向を示すこともあるとする。
【０１７３】
図１１Ａに示されるように、基本ブロックＢＢ８、ＢＢ１０が基本ブロックＢＢ７の条件分岐のＡＮＤの関係にある（実線アークで束ねられた）分岐方向に制御依存している。また、基本ブロックＢＢ９が、基本ブロックＢＢ７の条件分岐の基本ブロックＢＢ８に向かう分岐方向に間接制御依存している。
【０１７４】
また、基本ブロックＢＢ１２が、基本ブロックＢＢ７に含まれる条件分岐の基本ブロックＢＢ８に向かう分岐方向とはＯＲの関係にある（破線アークで束ねられた）異なる分岐方向に拡張制御依存し、基本ブロックＢＢ８の条件分岐の基本ブロックＢＢ９に向かう分岐方向とはＯＲの関係にある異なる分岐方向にに拡張制御依存している。
【０１７５】
演算処理要素１１０は、図３／ＳＴＥＰ０２０において所定条件を充足すると判定すると（図３／ＳＴＥＰ０２０‥ＹＥＳ）、並列実行可能数から１引いた数まで、基準タスクを複製する（図３／ＳＴＥＰ０２２）。
【０１７６】
ここで、条件分岐あるいは基準タスクの複製の具体的な説明に入る前に、「条件分岐の複製」について、若干掘り下げて説明する。
【０１７７】
複製対象となる条件分岐を含む基準タスクには、一般的に条件分岐以外に、条件分岐がデータ依存するステートメントの集合、すなわち条件分岐の分岐方向を決める条件を設定するステートメントの集合が含まれる。本発明では、このようなステートメントの集合を「条件設定ステートメント群」と称する。さらに、条件分岐がデータ依存しないステートメントの集合、すなわち条件分岐とともに並列実行できる可能性のあるステートメントの集合も含まれる場合がある。同様に、このようなステートメントの集合を「並列実行可能性のあるステートメント群」と称する。
【０１７８】
そして、条件分岐（のみ）が複製され、スタティックスケジューリング時に、後続タスク（グループ）とともに、異なるＰＥに割り当てられた場合、基準タスク中の条件分岐以外のステートメント（前述の「条件設定ステートメント群」と「並列実行可能性のあるステートメント群」）は一つのＰＥにより実行され、その実行の結果（データ）は複製された条件分岐及び後続タスクを処理するＰＥに転送される。従って、この場合は実行結果の転送に要する時間が並列プログラムの処理時間に追加される。
【０１７９】
また、基準タスク全体を複製した場合には、各ＰＥは条件設定ステートメント群の処理を各々実行するので、ＰＥ間のデータ転送は不要であり、データ転送の時間は並列プログラムの処理時間に追加されない。しかし、複製された基準タスクを割り当てられたＰＥのすべてが実行するために、消費電力については増大する可能性がありやや不利となる。また、基準タスクに並列実行可能性のあるステートメント群があり、しかも条件分岐及び条件設定ステートメント群との間でデータ依存関係がなければ、条件分岐及び条件設定ステートメント群と並列実行可能である。従って、複製された基準タスクを実行するＰＥとは異なるＰＥに、並列実行可能性のあるステートメント群を割り当てれば、並列プログラムの処理時間を減らすことができる。
【０１８０】
従って、条件分岐のみを複製することに代えて、条件分岐及び条件設定ステートメント群だけを新たなタスクとし、これを複製することにより、各ＰＥが最低限の時間で条件分岐の条件設定を行い、しかもデータ転送を必要としないので、基準タスクを複製する場合に比して並列プログラムの処理時間を減らすことができる。
【０１８１】
このようなことに鑑みると、、単に条件分岐のみの複製のみならず、「条件分岐及び条件設定ステートメント群」の複製、そして基準タスクの複製（「並列実行可能性のあるステートメント群」が存在しない場合も含む）に従って生じる条件分岐の複製も、本発明の「条件分岐の複製」の例に該当する。
【０１８２】
ここで、再び図３／ＳＴＥＰ０２２「条件分岐の複製」の説明に戻る。
【０１８３】
例えば、図１１Ａに示される例では、基本ブロックＢＢ８及びＢＢ９と、基本ブロックＢＢ１０とが互いにデータ依存を有しないから、基本ブロックＢＢ７に含まれる条件分岐の対象の分岐方向に後続する並列実行可能数は２である。
【０１８４】
演算処理要素１１０は、図１１Ａに示される基準タスクとしての基本ブロックＢＢ７に含まれる条件分岐を並列実行可能数「２」から１引いた数「１」だけ複製する。これにより、演算処理要素１１０は、図１１Ｂに示されるように、基本ブロックＢＢ７である基準タスクＳＴ１、複製された条件分岐を含む基準タスクＳＴ２を生成する。
【０１８５】
そして、演算処理要素１１０は、対象の条件分岐の対象の分岐方向に制御依存、間接制御依存又は拡張制御依存しているタスクまたはタスクグループを、いずれかの基準タスクに後続させる（図３／ＳＴＥＰ０２４）。演算処理要素１１０は、対象の条件分岐の対象の分岐方向に制御依存、間接制御依存又は拡張制御依存しているタスクまたはタスクグループのうち、互いにデータ依存を有しないタスクまたはタスクグループを、複製された基準タスクも含むそれぞれ異なる基準タスクに含まれる条件分岐の対象の分岐方向に後続させるようにする。
【０１８６】
例えば、図１１Ａにおいて、基本ブロックＢＢ７に含まれる条件分岐の対象の分岐方向（図１１Ａで実線アーチで囲まれている分岐方向）に対し、基本ブロックＢＢ８及び基本ブロックＢＢ１０が制御依存し、基本ブロックＢＢ９及びＢＢ１２が間接制御依存している。従って、ＢＢ８、ＢＢ９及びＢＢ１２は後続タスクグループＦＴＧ２を構成し、ＦＴＧ２とデータ依存、制御依存のないＢＢ１０は後続タスクグループＦＴＧ１を構成する。そして、ＦＴＧ１とＦＴＧ２とは並列実行可能であるため、基準タスクＢＢ７を一つ複製してＳＴ２とし、ＢＢ７そのものはＳＴ１と名称変更する。そして、ＳＴ１に含まれる条件分岐の対象の分岐方向にＦＴＧ１を後続させ、ＳＴ２に含まれる条件分岐の対象の分岐方向にＦＴＧ２を後続させる。また、図１１ＡのＭＴＧにおいて、基本ブロックＢＢ７に含まれる条件分岐の対象の分岐方向とは異なる他の分岐方向（実線アーチで囲まれていない分岐方向）に対し、基本ブロックＢＢ１２が拡張制御依存している。
【０１８７】
このように、条件分岐の２つの分岐方向（この段落において、これらの２つの分岐方向を第１分岐方向、第２分岐方向という。）の双方に制御依存、間接制御依存または拡張制御依存している一のタスク（この段落において、第１タスクという。）がある場合には、演算処理要素１１０は、当該第１タスクを複製して第２タスクを生成し、第１タスクを一の条件分岐の第１分岐方向に後続させ、第２タスクを他の条件分岐の第２分岐方向に後続させてもよい。これに代えて、演算処理要素１１０は、第１タスクを一の条件分岐の第１分岐方向に後続させ、第２タスクを当該一の条件分岐の第２分岐方向に後続させてもよい。
具体的には、上記の場合、２つの分岐方向の双方に基本ブロックＢＢ１２が制御依存しているので、演算処理要素１１０は、ＢＢ１２を複製してＦＴＧ２に含まれるＢＢ１２と同じタスクをもう一つ生成し、当該他の分岐方向に対する後続タスクグループＦＴＧ３に含める。そして、ＳＴＧ１の実行とＳＴＧ２の実行とは、マルチプロセッサシステムの異なるプロセッシングエレメントに割り当てることができる。
【０１８８】
そのことをやや詳しく説明すると、図１１Ｂに示されるように、基準タスクＳＴ１に含まれる条件分岐の当該対象の分岐方向（図１１Ａで実線アーチで囲まれている分岐方向に対応する分岐方向）に、後続タスクグループＦＴＧ１（この例ではＳＢ１０で構成）が制御依存しており、ＳＴ１の他の分岐方向には後続タスクがないので、演算処理要素１１０は、ＳＴ１とＦＴＧ１とをまとめて「融合すべきタスクグループ」ＳＴＧ１を形成する。また、同じく図１１Ｂに示されるように、基準タスクＳＴ２に含まれる条件分岐の当該対象の分岐方向（図１１Ａで実線アーチで囲まれている分岐方向に対応する分岐方向）に、後続タスクグループＦＴＧ２（基本ブロックＢＢ８、ＢＢ９及び基本ブロックＢＢ１２で構成）が制御依存しており、ＳＴ２の他の分岐方向には後続タスクグループＦＴＧ３（この例ではＢＢ１２で構成）が拡張制御依存しているので、演算処理要素１１０は、ＳＴ２、ＦＴＧ２及びＦＴＧ３とをまとめて「融合すべきタスクグループ」ＳＴＧ２を生成する。ＢＢ１２がＦＴＧ２とＦＴＧ３との二つの後続タスクグループに含まれる理由は、図１１Ａに示されるように、ＢＢ１２が基準ブロックＢＢ７（複製後のＳＴ２）の条件分岐の対象の分岐方向に間接制御依存するとともに、ＢＢ７の条件分岐の対象の分岐方向ではない他の分岐方向に拡張制御依存しているためである。
【０１８９】
そして、ＳＴＧ１内の基準タスクＳＴ１に含まれる条件分岐の分岐方向がＦＴＧ１を実行する分岐方向に決まれば、ＳＴＧ２内の基準タスクＳＴ２に含まれる条件分岐の分岐方向もＦＴＧ２を実行する分岐方向に決まり、基準タスクＳＴ１に含まれる条件分岐の分岐方向がＦＴＧ１を実行する分岐方向とは異なる他の分岐方向に決まれば、基準タスクＳＴ２に含まれる条件分岐の分岐方向も同様に他の分岐方向に決まりＦＴＧ３が実行される。
【０１９０】
なお、ＦＴＧ３は、基準タスクＳＴ２に含まれる条件分岐の対象の分岐方向（ＦＴＧ２が制御依存している分岐方向）とは異なる分岐方向に制御依存しているが、タスクグループＳＴＧ１の基準タスクＳＴ１に含まれる条件分岐の対象の分岐方向（ＦＴＧ１が制御依存する分岐方向）とは異なる分岐方向に後続させることも可能であり、そのようにしても本発明の基本的な内容に反するものではない。
【０１９１】
このように、図３／ＳＴＥＰ０２２及びＳＴＥＰ０２４を実行することにより、図１１ＡのＭＴＧ（図８のＢＢ７を基準タスクとして含む「融合すべきタスクグループ」）から、図１１Ｂに示すように二つの（並列実行可能な）タスクグループＳＴＧ１及びＳＴＧ２を新たに抽出することができた。
【０１９２】
以上、条件分岐の複製について、図８のＭＴＧから抜き出した、ＢＢ７を基準タスクとして含む「融合すべきタスクグループ」から並列実行可能なタスクグループＳＴＧ１及びＳＴＧ２を抽出する過程を図１１Ａ及び図１１Ｂを用いて説明してきたが、同じく図８のＢＢ１を基準タスクとする「融合すべきタスクグループ」もＢＢ７を基準タスクとして含む「融合すべきタスクグループ」と同様の構成であるので、図１１Ａ・図１１Ｂと同様に２つの並列実行可能なタスクグループ（これをＳＴＧ３、ＳＴＧ４とする）を「融合すべきタスクグループ」として新たに抽出することができる。
【０１９３】
ここまで、図３／ＳＴＥＰ０２０において所定条件が充足されると判定された場合（図３／ＳＴＥＰ０２０‥ＹＥＳ）の融合すべきタスクグループ決定処理（図３ＳＴＥＰ０１８）について詳しく説明してきた。
【０１９４】
この後、新たに抽出した「融合すべきタスクグループ」を含むＭＴＧに基づいて、演算処理要素１１０は、さらに並列実行可能なタスクの有無を解析するために、図３／ＳＴＥＰ０１４に処理を戻し、再び図３／ＳＴＥＰ０２０を通ることになるが、その場合にタスク複製の所定条件である並列実行可能なタスクあるいはタスクグループが存在しないとすると図３／ＳＴＥＰ０２６の融合処理に進む。
【０１９５】
例えば、図８及び図１１Ａ・Ｂを基に説明したように新たに抽出した「融合すべきタスクグループ」ＳＴＧ１、ＳＴＧ２、ＳＴＧ３、ＳＴＧ４にはさらに並列実行可能なタスクが存在しないので、それらを融合処理して新たに４つのタスクを生成することになるが、それらの４つのタスクをそれぞれｂｌｏｃｋ３、ｂｌｏｃｋ４、ｂｌｏｃｋ５、ｂｌｏｃｋ６とすると、これらの新たに生成されたタスクを含むＭＴＧは図１４Ｂに示すように、並列実行可能なタスク数が７になり、単純にタスク融合する図１４Ａの場合に比して２多く、また従来の特許文献１のタスク融合の方法に比して４多くなる。このように並列実行可能なタスク数が多いとスケジューリングの自由度が増す。
【０１９６】
次に、演算処理要素１１０は、図２の処理フローの場合同様に、ＳＴＥＰ０２８のスケジューリング処理、続いてＳＴＥＰ０３０の並列プログラム（ソースコード）の生成、そしてＳＴＥＰ０３２のバイナリコードの生成を経て、すべての処理を終了する。ＳＴＥＰ０２８以降の処理は、図２における説明と同様なので、詳しくは説明しないが、図８に本発明を適用した場合の並列実行可能なタスク数が７に増えたことによって、前述したように、スケジューリングの自由度が増しより効果的な並列プログラムの生成が可能になる。
【０１９７】
これまで、図６のＭＦＧに示されるプログラムを例に挙げて、本発明（図２及び図３に示す並列化の処理フロー）を詳細に説明してきたが、もう一つの例として、図１２に示されるように、図６のＭＦＧとは異なるＭＦＧの例についても説明する。図１２のＭＦＧでは、基本ブロックＢＢ４からの制御フローを示す破線がＢＢ５ではなく基本ブロックＢＢ６に向き、基本ブロックＢＢ１０からの制御フローが基本ブロックＢＢ１１でなく、基本ブロックＢＢ１２に向いている点が、図６のＭＦＧと異なっている点である。
【０１９８】
この場合、基本ブロックＢＢ５は、基本ブロックＢＢ１の条件分岐の分岐方向ＢＢ１５に制御依存し、基本ブロックＢＢ１１は、基本ブロックＢＢ７の条件分岐の分岐方向ＢＢ７１１に制御依存する。
【０１９９】
演算処理要素１１０は、図６のＭＦＧの場合と同様に、各タスクの制御依存と当該各タスク間のデータ依存の両方を解析し、その結果を用いて最早実行可能条件解析を行う（図２又は図３／ＳＴＥＰ０１４）。その結果を図１３に示す。図１３と図７とを比較すれば、図７の最早実行可能条件の表では、ＢＢ５及びＢＢ１１の欄は空欄であったが、図１３の最早実行可能条件の表では、ＢＢ５の欄にはＢＢ１５が記載され、ＢＢ１１の欄にはＢＢ７１１が記載されている。すなわち、図７に比してＢＢ５及びＢＢ１１に依存関係のあることがわかる。
【０２００】
演算処理要素１１０は、最早実行可能条件解析の結果を用いて、ＭＴＧを生成する（図２又は図３／ＳＴＥＰ０１６）。具体的には、図１２のＭＦＧから生成されたＭＴＧを図１５に示す。このＭＴＧから、図６のＭＦＧより生成した図８のＭＴＧにおいては、ＢＢ５及びＢＢ１１は他のタスクあるいはタスクグループに依存関係を有しなかったが、図１５のＭＴＧの場合は、ＢＢ５及びＢＢ１１に依存関係が生じていることがわかる。そのため、図１５のＭＴＧを基に融合すべきタスクグループ決定処理」（図２又は図３／ＳＴＥＰ０１８）を実行すると、図８のＭＴＧを基にした場合と異なり、ＢＢ５はＢＢ１を基準タスクとして含む「融合すべきタスクグループ」に含まれ、ＢＢ１１はＢＢ７を基準タスクとして含む「融合すべきタスクグループ」に含まれることになる。そのことは、ＢＢ７を基準タスクとする融合すべきタスクグループを抜き出して示す図１６を見れば明らかである。従って、図２／ＳＴＥＰ０２６における融合処理により、ＢＢ１を基準タスクとする融合すべきタスクグループは新たなタスクｂｌｏｃｋ１に融合され、ＢＢ７を基準タスクとする融合すべきタスクグループは新たなタスクｂｌｏｃｋ２に融合され、二つの新たなタスクと依存関係のないＢＢ１３とともに図１８ＡのＭＴＧが生成される。この図からわかるように、ＢＢ５とＢＢ１１とがそれぞれｂｌｏｃｋ１及びｂｌｏｃｋ２に融合されたために、並列実行可能なタスク数は３となり、図１４Ａに比して少なくなっている。
【０２０１】
ここで、図１２のＭＦＧあるいは図１５のＭＴＧを基にした「融合すべきタスクグループ」に図３／ＳＴＥＰ０２０〜０２４を適用する。説明を簡明にするために、図１５のＭＴＧからＢＢ７を基準タスクとする融合すべきタスクグループを抜き出して図１７Ａに表示する。この図では、図１１Ａに加えてＢＢ１１が、基準タスクＢＢ７の条件分岐のＡＮＤの関係にある分岐方向に後続するＦＴＧ１（ＢＢ１０より構成）及びＦＴＧ２（ＢＢ８、ＢＢ９及びＢＢ１２より構成）、その分岐方向とは異なる分岐方向に後続するＦＴＧ３（複製したＢＢ１２）に加えて、ＦＴＧ３への分岐方向とＡＮＤの関係にある分岐方向に後続するように加えられる。このＢＢ１１を後続タスクグループＦＴＧ４とする。
【０２０２】
以上の説明からわかるように、ＢＢ７に後続する４つのタスクグループＦＴＧ１〜ＦＴＧ４のうち、ＦＴＧ１とＦＴＧ２とはデータ依存の関係も持たないので両者は並列実行可能であり、ＦＴＧ３とＦＴＧ４も同様にデータ依存の関係も持たないのでこの両者も並列実行可能である。そして、ＦＴＧ１／ＦＴＧ２とＦＴＧ３／ＦＴＧ４とはＢＢ７の条件分岐のＯＲの関係にある分岐方向に後続している。
【０２０３】
従って、図３／ＳＴＥＰ０２０では、演算処理要素１１０は、融合すべきタスクグループに並列実行可能なタスクあるいはタスクグループが存在すると判断して、図３／ＳＴＥＰ０２２において基準タスクＢＢ７を一つ複製してそれをＳＴ２とする（元の基準タスクＢＢ７は名称変更してＳＴ１とする）。そして、図３／ＳＴＥＰ０２４において、演算処理要素１１０は、新たに生成された基準タスクＳＴ１の一の分岐方向にＦＴＧ１を後続させ、当該一の分岐方向とは異なる分岐方向にＦＴＧ４を後続させ、基準タスクＳＴ２の当該一の分岐方向に対応する分岐方向にＦＴＧ２を後続させ、当該一の分岐方向とは異なる分岐方向に対応する分岐方向にＦＴＧ３を後続させる。ここで、ＳＴ１の条件分岐の分岐方向がＦＴＧ１を実行する方向である場合には、ＳＴ２の条件分岐の分岐方向はＦＴＧ２を実行する方向になり、ＳＴ１の条件分岐の分岐方向がＦＴＧ４を実行する方向である場合には、ＳＴ２の条件分岐の分岐方向はＦＴＧ３を実行する方向になる。
【０２０４】
次に、演算処理要素１１０は、図３／ＳＴＥＰ０１４に処理を戻し、ＳＴＥＰ０１６を経て、ＳＴＥＰ０１８において改めて融合すべきタスクグループ決定処理を行う。そのようにして、基準タスクＳＴ１、後続タスクグループＦＴＧ１及びＦＴＧ４は一つの融合すべきタスクグループＳＴＧ１となり、基準タスクＳＴＧ２、後続タスクグループＦＴＧ２及びＦＴＧ３はもう一つの融合すべきタスクグループＳＴＧ２が生成される。この結果を図１１ＢのＭＴＧに示す。この場合、融合すべきタスクグループＳＴＧ１は、ＳＴ１、ＦＴＧ１及びＦＴＧ３で、融合すべきタスクグループＳＴＧ２は、ＳＴ２、ＦＴＧ２及びＦＴＧ４で、それぞれ構成されてもよい。つまり、並列実行可能な後続タスクグループが同じ融合すべきタスクグループに含まれないように構成すればよい。
【０２０５】
続いて、演算処理要素１１０は、図３／ＳＴＥＰ０２０において、融合すべきタスクグループＳＴＧ１及びＳＴＧ２にさらに並列実行可能なタスクが存在しないかどうかの判定をし、存在しないと判定すれば、ＳＴＧ１及びＳＴＧ２の融合処理を行う（図３／ＳＴＥＰ０２６）。すなわち、ＳＴＧ１及びＳＴＧ２は、それぞれ融合によって生成されたタスクｂｌｏｃｋ３及びｂｌｏｃｋ４となる。
【０２０６】
以上、基準タスクＢＢ７を含む融合すべきタスクグループについて説明してきたが、基準タスクＢＢ１を含む融合すべきタスクグループについても同様の処理を行うことができる。つまり、ＢＢ７をＢＢ１に、ＢＢ８をＢＢ２に、ＢＢ９をＢＢ３に、ＢＢ１０をＢＢ４に、ＢＢ１１をＢＢ５に、ＢＢ１２をＢＢ６に対応させれば、図１７Ａ及び図１７ＢのＭＴＧはＢＢ１を含む融合すべきタスクグループにも適用できる。その結果として融合によってタスクｂｌｏｃｋ５、ｂｌｏｃｋ６を生成する。
【０２０７】
以上をまとめると、図１５のＭＴＧは融合処理の結果として、図１８Ｂのようになる。
この図からわかるように、図１５のＭＴＧに基準タスクの複製を含む図３／ＳＴＥＰ２０〜ＳＴＥＰ０２６の処理を行った場合の並列実行可能なタスク数は５になり、同様に図１４Ａの場合に比して少なくなっている。これは、図６と図１２に表されるプログラムの特性によるものである。
【０２０８】
（作用効果）
本実施形態の並列化コンパイラＣによれば、並列化コンパイル装置１００（コンピュータ）が、図２及び図３のＳＴＥＰ００２〜ＳＴＥＰ０３２、特に本発明の特徴であるＳＴＥＰ０１８〜ＳＴＥＰ０２６における並列化のためのタスク融合処理の技術を図６及び図１２のＭＦＧで表された逐次プログラムに適用して、それぞれ図１４Ａ／図１４Ｂ及び図１８Ａ／図１８Ｂに示されたＭＴＧを生成することができた。ここで図番末尾にＡがつく図は図２の処理フローにより生成されたＭＴＧを、同じくＢがつく図は図３の処理フローにより生成されたＭＴＧを示している。
【０２０９】
また、従来技術である特許文献１の融合技術を図６及び図１２のＭＦＧに適用して生成したＭＴＧをそれぞれ図１４Ｃ及び図１８Ｃに示す。
【０２１０】
まず、図１４Ａ／Ｂ／Ｃについて比較すると、図１４Ａの並列実行可能なタスク数は５（そのうち融合によって生成されたタスク数は２）であるが、図１４Ｃについては同じく並列実行可能なタスク数は３（同２）であり、並列実行可能なタスク数は本発明（図２の例）を適用した方が多くなる。また、図１４Ｂの並列実行可能なタスク数は７（同４）となり、条件分岐の複製技術と組み合わせた本発明（図３の例）を適用するとさらに多くなることがわかる。
【０２１１】
また、図１８Ａ／Ｂ／Ｃについても、図１４Ａ／Ｂ／Ｃの場合と同様、並列実行可能なタスク数は、図１８Ａの例では３、図１８Ｂの例では５、図１８Ｃの例では３となり、図３の処理フローを適用した場合（図１８Ｂ）が最も多い。そして、図２の処理フローを適用した場合（図１８Ａ）及び特許文献１の技術を適用した場合（図１８Ｃ）の両者の場合は同じとなる。図１２のＭＦＧで表された逐次プログラムに適用した場合は、図１８Ａの例におけるｂｌｏｃｋ１及びｂｌｏｃｋ２と、図１８Ｃの例におけるｂｌｏｃｋ７及びｂｌｏｃｋ８とそれぞれ同じタスクとなっている。図１４Ａ／Ｃとのこの差は、図６のＭＦＧで表される並列化対象となる逐次プログラムの構成との差異によるものである。このように、並列化対象である逐次プログラムの構成によっては融合処理によって抽出される並列実行可能なタスク数は従来技術と同じ場合もあるが、従来技術を下回ることはない。
【０２１２】
以上の整理からわかるように、本発明の並列化コンパイラによれば、従来技術に比して
並列実行可能なタスクの抽出可能性を損なうことがない。
【０２１３】
（変形態様）
図２/ＳＴＥＰ０２６では、タスク融合後のＭＴＧを生成していたが、この際には改めてデータ依存等の解析を行ってもよいし、タスク融合前のデータ依存等の関係に基づいてタスク融合後のＭＴＧを生成してもよい。すなわち、融合前のタスクグループに含まれるいずれかのタスク（タスクＴ１という。）がデータ依存を有しているタスク（タスクＴ２という。）があると仮定する。この場合、当該タスクグループを融合して生成した新たなタスク（以下、タスクＴ３という。）も、タスクＴ２にデータ依存する。このような関係を利用すれば、融合後に改めてタスク間のデータ依存を解析する必要はない。
【０２１４】
（特許文献１との対比）
特許文献１と比較した本発明の優位性については、すでに十分説明しているが、改めて図１９に示すような４つのタスクからなる簡単な逐次プログラムのＭＦＧ、および図２０に示すような図１６のＭＦＧから生成したＭＴＧを参照して、特許文献１と比較した本発明の優位性を簡明に説明する。
【０２１５】
まず、特許文献１の技術も本発明の技術も、条件分岐とそのすべての分岐方向の各々に後続するすべてのタスクを一つのタスクとして融合してそのタスクをマルチプロセッサシステムの一つのプロセッシングエレメントに割り当てること（スタティックスケジューリング）により、プログラム実行時のスケジューリング処理を不要にするという点では、同じ目的を持っている。このような条件分岐を含むタスクグループを一つのタスクとして融合することは、前述したように、融合によってタスクの中の条件分岐が見えなくなるので「条件分岐の隠蔽」という。
【０２１６】
しかし、特許文献１と本発明との間には、融合するタスクの範囲に差があり、後者では融合するタスクグループと依存関係のないタスクを並列実行可能なタスクとして抽出しやすいという大きな利点がある。その基本原理を前述の例を基に説明する。
【０２１７】
特許文献１の技術（本明細書の[背景技術]において説明した技術）によれば、図１９６のＭＦＧにおいて、各タスク間の制御依存性（本明細書の「制御フロー」に相当）に基づき、異なるタスクに分岐する処理を有するタスクＢＢ１０１を始端タスクとして特定するとともに、始端タスクＢＢ１０１を始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちのいずれか一つであるＳＢ１０４を終端タスクとして特定する。
【０２１８】
そして、特許文献１の技術では、特定された始端タスクＢＢ１０１と、始端タスクを始点とする処理における終端タスクＳＢ１０４と、始端タスクＢＢ１０１の実行後であって、終端タスクＳＢ１０４の実行前に実行されるすべてのタスクすなわちＳＢ１０２及びＳＢ１０３の、４つのタスクをを新たな一つのタスクとして融合させる。すなわち、特許文献１において、融合されるタスクは、図１９で一点鎖線で囲まれたタスクグループＴＧ１となり、それが融合されると同じ図１９に示すように新たなタスクｂｌｏｃｋＴ１が生成される。そして、タスク融合後のＭＴＧも同図に示されている。
【０２１９】
他方、本発明によれば、図２／ＳＴＥＰ０１２において、図１９に示されるＭＦＧが生成された後、図２／ＳＴＥＰ０１４の最早実行可能条件解析がなされる。
【０２２０】
図１９に示されるＭＦＧにおいては、基本ブロックＢＢ１０１の条件分岐の分岐方向ＢＢ１０１１０２にサブルーチンブロックＳＢ１０２が制御依存している。また、基本ブロックＢＢ１０１の条件分岐の分岐方向ＢＢ１０１１０３にサブルーチンブロックＳＢ１０３が制御依存している。
【０２２１】
しかし、基本ブロックＢＢ１０１の条件分岐の分岐方向が分岐方向ＢＢ１０１１０２、分岐方向ＢＢ１０１１０３のいずれになってもサブルーチンブロックＳＢ１０４は実行されるので、サブルーチンブロックＳＢ１０４は、基本ブロックＢＢ１０１の条件分岐の分岐方向ＢＢ１０１１０２及びＢＢ１０１１０３のいずれにも制御依存及び間接制御依存してない。また、サブルーチンブロックＳＢ１０４は、サブルーチンブロックＳＢ１０２、ＳＢ１０３にデータ依存もしていないので、基本ブロックＢＢ１０１の条件分岐の分岐方向ＢＢ１０１１０２及びＢＢ１０１１０３のいずれにも拡張制御依存もしていない。
【０２２２】
このような最早実行可能条件解析に基づいて、図２／ＳＴＥＰ０１６において、図１７に示されるＭＴＧが生成される。
【０２２３】
そして、図２／ＳＴＥＰ０１８の融合すべきタスクグループの決定において、このステップの詳細なフロー示す図９／ＳＴＥＰ２０２において、タスクＢ１０１が基準タスクとして特定される。そして、図９／ＳＴＥＰ２０４において、タスクＢＢ１０１の条件分岐に制御依存、間接制御依存又は拡張制御依存するタスクＳＢ１０２、ＳＢ１０３が第１後続タスクとして特定され、基準タスクＢＢ１０１と第１後続タスクＳＢ１０２、ＳＢ１０３とがタスクグループとして特定される。そして、図１９のＭＦＧの場合には当該タスクグループと依存関係（データ依存及び制御依存）を有するタスクは存在しない。すなわち、本発明において融合されるタスク（本明細書で言う「融合されるべきタスクグループ」）は、図２０に二点鎖線で囲まれたタスクグループＴＧ２となる。
【０２２４】
一方、サブルーチンブロックＳＢ１０４は、上述したように、基本ブロックＢＢ１０１の条件分岐のいずれの分岐方向にも制御依存、間接制御依存、及び拡張制御依存していない。このため、図２／ＳＴＥＰ０１８の融合すべきタスクグループの決定において、サブルーチンブロックＳＢ１０４は融合すべきタスクグループには含まれない。
【０２２５】
そして、図２／ＳＴＥＰ０２６において、融合すべきタスクグループＴＧ２が融合されて、新たなタスクｂｌｏｃｋＴ２が生成される。タスクグループＴＧ２には、上述したように、サブルーチンブロックＳＢ１０４は含まれていない。従って、融合後のＭＴＧは図２０のようになる。
【０２２６】
図１９及び図２０における融合後のＭＴＧを比較すれば明らかなように、抽出される並列実行可能なタスク数が、特許文献１の技術による場合が１（図１９）、本明細書の並列化技術による場合が２（図２０）となり、本発明によれば、並列性の抽出を特許文献１よりも適切に行うことが出来る。
【符号の説明】
【０２２７】
１００‥コンパイル装置、１１０‥演算処理要素、１２０‥読取装置、１３０‥書出装置、１４０‥記憶装置、２００‥マルチプロセッサシステム、２１０‥集中共有メモリ、２２０‥入出力装置、Ｃ‥並列化コンパイラ、ＰＥ１‥第１プロセッシングエレメント、ＰＥ２‥第２プロセッシングエレメント、ＰＥｎ‥第ｎプロセッシングエレメント、Ｐ１‥逐次プログラム、ＣＦ‥設定ファイル、Ｐ２‥並列プログラム、ＰＢ‥バイナリコード。
【図１】
2018109943.tif 000003
【図２】
2018109943.tif 000004
【図３】
2018109943.tif 000005
【図４】
2018109943.tif 000006
【図５】
2018109943.tif 000007
【図６】
2018109943.tif 000008
【図７】
2018109943.tif 000009
【図８】
2018109943.tif 000010
【図９】
2018109943.tif 000011
【図１０】
2018109943.tif 000012
【図１１】
2018109943.tif 000013
【図１２】
2018109943.tif 000014
【図１３】
2018109943.tif 000015
【図１４】
2018109943.tif 000016
【図１５】
2018109943.tif 000017
【図１６】
2018109943.tif 000018
【図１７】
2018109943.tif 000019
【図１８】
2018109943.tif 000020
【図１９】
2018109943.tif 000021
【図２０】
2018109943.tif 000022