JP6600888B2 - 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法 - Google Patents

並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法 Download PDF

Info

Publication number
JP6600888B2
JP6600888B2 JP2017178110A JP2017178110A JP6600888B2 JP 6600888 B2 JP6600888 B2 JP 6600888B2 JP 2017178110 A JP2017178110 A JP 2017178110A JP 2017178110 A JP2017178110 A JP 2017178110A JP 6600888 B2 JP6600888 B2 JP 6600888B2
Authority
JP
Japan
Prior art keywords
task
tasks
control
branch
conditional branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017178110A
Other languages
English (en)
Other versions
JP2018109943A (ja
Inventor
博徳 笠原
啓二 木村
弾 梅田
広紀 見神
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Waseda University
Original Assignee
Waseda University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Waseda University filed Critical Waseda University
Priority to EP17210290.7A priority Critical patent/EP3343351B1/en
Priority to US15/856,306 priority patent/US10698670B2/en
Priority to CN201711469305.7A priority patent/CN108255492A/zh
Publication of JP2018109943A publication Critical patent/JP2018109943A/ja
Application granted granted Critical
Publication of JP6600888B2 publication Critical patent/JP6600888B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法に関する。
従来、シングルプロセッサシステムにより逐次実行される逐次プログラムからマルチプロセッサシステム用の並列プログラムを生成する並列化コンパイラが知られている。
この種の並列化コンパイラによる並列化処理においては、各タスクをいずれかのプロセッシングエレメント(以下、略称として「PE」を使うこともある)に割り当てるスケジューリング処理が必須となる。このスケジューリング処理としては、並列化プログラムの生成時に各タスクをいずれかのプロセッシングエレメントに割り当てるスタティックスケジューリングと、プログラムの実行時に各タスクをいずれかのプロセッシングエレメントに割り当てるダイナミックスケジューリングとが知られている。
ダイナミックスケジューリングは、条件分岐を含むタスクを有する逐次プログラムを並列化してマルチプロセッサシステム上で実行する際に起動されるよう並列プログラムの中で設定されるスケジューリング手法であるが、条件分岐に続く個々のタスクの処理の実行時間が短いと、実行時にマルチプロセッサシステムを構成するいずれかのプロセッシングエレメントに当該個々のタスクを割り当てるスケジューリング処理の時間、すなわちオーバーヘッドが相対的に大きくなるため、並列実行による高速化が困難になる。例えば、条件分岐を含むタスク及び後続処理の実行時間が10クロックサイクルである一方、スケジューリング処理の実行時間が1000クロックサイクルである場合、並列実行をすることにより、逆に多くの実行時間が必要となってしまう。それに対して、スタティックスケジューリングの場合には、並列化コンパイラによる並列プログラムを生成する段階で並列実行可能な各タスクの各PEへの割当て処理が行われ、並列プログラムをマルチプロセッサシステム上で動作させる際にはスケジューリング処理の時間は要しない(但し、厳密には並列実行するPE間の同期処理に短時間を要する)。従って、逐次プログラムを並列化して処理の高速化を実現しようとする場合には、スタティックスケジューリング手法を用いることが望ましい。このような意味で、本明細書においては、「並列実行可能」という用語は、特に断らない限り、「スタティックスケジューリング可能」に対応する言葉として使用し、同じ「並列実行」という表現でも、「ダイナミックスケジューリング」に対応する意味では使用しないこととする。
しかし、例えばループ構造がなく主に条件分岐、関数呼び出しと代入文とから構成されるを含む逐次プログラム、例えば車載制御装置の組み込みシステム向け逐次プログラムを並列化してマルチプロセッサシステム上で動作させようとする場合に、比較的最近までスタティックスケジューリングを用いることはできなかった。
このような点に鑑みて、スタティックスケジューリング手法を用いて、主に条件分岐、関数呼び出しと代入文とから構成される組み込みシステム向け逐次プログラムを並列プログラムに変換する方法とそれをソフトウェアとして具現化した並列化コンパイラが提案されるようになってきた。この方法は、条件分岐と後続するタスクとを一つのタスクにまとめ、このタスクを複数生成できこれらが並列実行可能であれば、スタティックスケジューリングによりこのタスクを個々のプロセッシングエレメントに割り当てるという方法である。この方法によれば、条件分岐がまとめられた一つのタスク内に隠蔽され、それが一つのプロセッシングエレメント内で実行されるために、ダイナミックスケジューリングを用いる必要がない。
このような並列化コンパイラの一つとして、車載装置用の組み込みシステム向け逐次プログラムを並列化するために、次の(1)〜(6)の処理をコンピュータに実行させる並列化コンパイラが提案されている(特許文献1参照)。
(1)字句解析及び構文解析の解析結果に基づき、逐次プログラムを複数のタスクに分割する。
ここで、タスクは、1または複数のステートメントからなる。ここで、タスクは、連続した代入及び条件分岐を含む基本ブロック(BB)と、繰り返し実行を含む繰り返しブロック(RB)と、関数を含むサブルーチンブロック(SB)との3種類の粗粒度タスクのうちのいずれかに分類される。
(2)各タスク間の制御依存性(本明細書における「制御フロー」に相当)に基づき、異なるタスクに分岐する処理を有するタスクを始端タスクとして特定するとともに、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちのいずれか一つを終端タスクとして特定する。ここで、「制御フロー」とは、逐次プログラムに記載された順番及び条件分岐等によって決定される、処理経路を意味する。
(3)特定された始端タスクと、始端タスクを始点とする処理における終端タスクと、始端タスクの実行後であって、終端タスクの実行前に実行されるすべてのタスクとを新たなタスクとして融合させる。
(4)前記融合がなされた後の当該新たなタスクを含むタスク間のデータ依存性(本明細書の「データ依存」に相当)及び制御依存性を解析する。そして、タスク間のデータ依存性及び制御依存性に基づき、車載装置に搭載されたマルチプロセッサシステムを構成する複数のプロセッサユニット(本明細書における「プロセッシングエレメントPE」に相当、以下同様)により並列実行可能なタスクを抽出する。
(5)並列実行可能なタスクが異なるプロセッサユニットにより並列的に実行されるよう、それぞれのタスクをいずれかのプロセッサユニットに割り当てるスタティックスケジューリングを行う。
(6)スタティックスケジューリングの結果に基づき、並列プログラムを生成する。
当該並列化コンパイラによれば、条件分岐が含まれる逐次プログラムであっても、分岐処理を含むタスクが始端タスクとして特定され、始端タスクを始点として順次実行される複数の一連の処理の全てにおいて共通して実行されるタスクのうちいずれか一つが終端タスクとして特定され、当該始端タスクと終端タスクとを含む一連のタスクが新たなタスクとして融合される。この新たなタスクがスタティックスケジューリングにより、いずれかのプロセッサユニットに割り当てられる。
特許文献1の並列化コンパイラによれば、後続するタスクの実行時間が短いような条件分岐が多数含まれる逐次プログラムを並列化した場合でも、スタティックスケジューリングにより各マクロタスクがいずれかのプロセッサユニットに割り当てられるため、実行時のスケジューリング処理のオーバーヘッドの増大を防止でき、高速な処理が可能な並列プログラムを自動生成することが可能となる。
特開2015−001807号公報
しかしながら、特許文献1の並列化コンパイラには、改良の余地がある。たとえば、特許文献1の並列化コンパイラは、制御フローに基づいて始端タスクおよび終端タスクを決定し、始端タスクと終端タスクおよびそれらの間で実行されるすべてのタスクを一つのタスクに融合(グルーピング)しているところ、融合対象となった始端タスクの実行後でかつ終端タスクの実行前に実行される複数のタスクには、並列実行可能なタスクが存在する可能性がある。もし、並列実行可能な複数のタスクを融合することになれば、並列実行可能なタスクを抽出する可能性が損なわれる。
この問題に鑑みて、本発明は、特許文献1におけるこのような問題点を解消した、並列実行可能なタスクを抽出できる並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法を提供することを目的する。
次に、本発明において、使用される主要な用語である「(タスク間の)データ依存」、「(タスクの)制御依存」及び「タスク融合」の意味を以下に説明する。また、その他の用語についても説明の途中で必要に応じて適宜説明する。
まず、タスク間の「データ依存」の意味について説明する。よく知られているように、先行する一のタスクに含まれるステートメントと後続する他のタスクに含まれるステートメントとの間にステートメント間のデータ依存が存在する場合、当該他のタスクは当該一のタスクにデータ依存するという。この場合、二つのタスクのそれぞれに含まれるステートメント間にデータ依存がひとつでも存在すれば、二つのタスク間にはデータ依存が存在することとなる。タスク間にデータ依存が存在する場合、当該先行する一のタスクにおいて当該後続する他のタスクに含まれるステートメントとの間でデータ依存関係にあるすべてのステートメントの実行が終了すれば、当該後続する他のタスクの実行は開始できるが、実際のプログラムにおけるタスク間のデータ依存の解析上は、前述のような意味を踏まえつつ、「当該一のタスクの実行が終了するまで当該他のタスクの実行を開始してはならない」ことをもって「当該他のタスクが当該一のタスクにデータ依存する」ことを意味するものとして扱う。つまり、このようなデータ依存の解析においては、「(タスク間の)データ依存」が存在する場合、逐次プログラムで規定されている先行する一のタスクと後続する他のタスクとの実行順序を並列化の過程で変えることはできない。
ここで、「ステートメント間のデータ依存」とは、次の(A)〜(C)の依存関係のうちの少なくともいずれか一つが成立することである。
(A)先行ステートメントが定義した変数を後続ステートメントが使用する(これを「フロー依存」と称する)。変数の定義とは変数に数値を代入すること、変数の使用とは変数の値を参照することである。以下が一例である。
先行ステートメント:var=a
後続ステートメント:X=var
(B)先行ステートメントが定義した変数を後続ステートメントが再定義する(これを「出力依存」と称する)。再定義とは、すでに定義されている変数に新たな数値を代入することである。以下が一例である。
先行ステートメント:var=a
後続ステートメント:var=b
(C)先行ステートメントが使用した変数を後続ステートメントが定義する(これを「逆依存」と称する)。以下が一例である。
先行ステートメント:X=var
後続ステートメント:var=c
この場合は、先行ステートメントが使用した変数は、さらに先行するステーメントが定義したものである。
以上のように、フロー依存、出力依存、逆依存の関係にある両ステートメント間の実行順序が逆になると演算の結果が異なってくるので、並列化の過程でもこの実行順序が変わらないようにする必要がある。
次に、タスクの「制御依存」の意味について説明する。タスクの制御依存は、条件分岐のある特定の分岐方向に後続するタスクの条件分岐への依存関係に関する。条件分岐の分岐方向が一の分岐方向に確定したことにより、当該一の分岐方向に後続するタスクの実行が確定する場合、当該後続するタスクは当該条件分岐の一の分岐方向に制御依存するという。
また、タスクの(制御)依存関係は、タスク間のデータ依存に伴って現れる場合もある。詳細は、実施形態の説明において説明するが、ここでは一例を挙げておく。
例えば、二つの分岐方向を有する条件分岐の分岐方向が第1の分岐方向に確定した際に実行される第1のタスクに含まれるステートメントにおいてある変数が定義され、当該条件分岐の分岐方向がいずれであっても実行される第2のタスクに含まれるステートメントにおいて当該変数が再定義される場合、すなわち第2のタスクに含まれるステートメントが第1のタスクに含まれるステートメントに出力依存する場合を考える。
言い換えると、第1のタスクは条件分岐の第1の分岐方向に対して制御依存し、第2のタスクは第1のタスクにデータ依存している。なお、第2のタスクは当該条件分岐の分岐方向がいずれであっても実行されるから、第2のタスクは当該条件分岐のいずれの分岐方向にも制御依存していない。
この場合において、条件分岐の分岐方向が、当該第1の分岐方向に確定すると、当然のことながら第1のタスクが実行され、それにデータ依存する第2のタスクも実行できる。その際、このような例では、第1のタスクに含まれるステートメントで定義された変数は、第2のタスクに含まれるステートメントで再定義される。また、当該第1の分岐方向とは異なる第2の分岐方向に確定すると、第1のタスクの不実行が確定し第2のタスクは第1のタスクとの実行順序を考慮することなく実行ができるようになる。その際、第1のタスクでは当該変数の定義も実行されないが、第2のタスクに含まれるステートメントでは、当該変数が(再)定義されるので、その実行に支障はない。
すなわち、当該条件分岐の分岐方向が第2の分岐方向に確定することにより、第2のタスクの第1のタスクへのデータ依存が解消するとも言える。
以上の説明は、第1・第2のタスク間に「出力依存」というデータ依存が存在する場合を扱ったが、「逆依存」の場合も第2のタスクで当該変数が定義されるので、「出力依存」の場合と同様である。しかし、前述の両ステートメント間の「データ依存」が「フロー依存」である場合は、第2の分岐方向に決まる前に第2のタスクで使用する変数が定義されていることを前提として、条件分岐の分岐方向が前記第2の分岐方向に確定することにより、第1のタスクの不実行が確定し、第1のタスクとの実行順序を考慮することなく、第2のタスクの実行が可能となる。
このように、条件分岐の分岐方向が第2の分岐方向に確定することにより、第2のタスクの第1のタスクへのデータ依存が解消し、第2のタスクの実行の開始が可能になる。つまり、第2のタスクは、当該条件分岐のどの分岐方向にも制御依存はなく、第1のタスクへのデータ依存がなければ、当該条件分岐と並列に実行可能であるが、第1のタスクへのデータ依存があるために第1のタスクが終了するか、条件分岐の分岐方向が第2の分岐方向に確定するまで実行できない。このような場合、第2のタスクが、条件分岐の第2の分岐方向に拡張制御依存するという。
以上のように、データ依存及び制御依存並びにその組合せにより、あるタスクが実行可能になる条件を表現することが出来る。すなわち、データ依存、制御依存及び拡張制御依存は、逐次プログラムの並列化後のプログラムが元の逐次プログラムと同じ演算結果を生成するための条件となる。そのため、逐次プログラムの並列化にあたって、構成するタスクの依存関係の把握が重要となる。
続いて、「タスク融合」の意味について説明する。「タスク融合」とは、互いに関連する複数のタスクを含むタスクグループを一つの新たなタスクとして定めることを意味する。この「タスク融合」により生成される新たなタスクは、並列プログラムの生成時のスケジューリングにおいて一つのPEに割り当てることができる。また、この「タスク融合」は、繰り返しブロックの融合である「ループ融合」などのようなコード融合とは異なり、融合される当該複数のタスクの構造・機能等はそのまま維持されており変更されることはない。
前記課題を解決するために、本発明の並列化コンパイラは、逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータに生成させるコンパイラであって、
前記コンピュータに
前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に対して制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを実行させることを特徴とする。
本明細書において、「タスクが条件分岐のいずれかの分岐方向に間接制御依存する」との表現は、タスクと条件分岐のある分岐方向との間に制御依存又は拡張制御依存を2回以上繰り返す関係を意味する。例えば、条件分岐Aのある分岐方向Bに条件分岐Cを含むタスクDが制御依存し、条件分岐Cのある分岐方向EにタスクFが拡張制御依存している場合、条件分岐Aの分岐方向BとタスクFとの間には制御依存又は拡張制御依存が2回繰り返されている。このような場合、タスクFが条件分岐Aの分岐方向Bに間接制御依存すると表す。間接制御依存は、制御依存及び拡張制御依存のいずれとも異なる概念であるが、拡張制御依存と同様に、データ依存及び制御依存の関係の組合せから導かれうる。
本発明の並列化コンパイラによれば、コンピュータがタスク分割ステップを実行することにより、逐次プログラムに含まれるタスクが複数のタスクに分割される。
当該複数のタスクに対し、コンピュータが依存解析ステップを実行することにより、当該複数のタスクそれぞれのデータ依存及び制御依存が解析される。
この解析結果に基づき、コンピュータが融合ステップを実行することにより、条件分岐を有する基準タスクと、当該基準タスクの条件分岐のすべての分岐方向の各々に対して制御依存、拡張制御依存又は間接制御依存する後続タスクのすべてとを含むタスクグループが一つの新タスクとして融合される。
なお、本明細書において、「後続タスク」が複数存在する場合には、これを「後続タスクグループ」と称することもある。
このように、融合ステップによってタスクグループが一つのタスクとして融合されることにより、条件分岐を含む基準タスクと条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存又は間接制御依存する後続タスクのすべてとを含んだタスクグループが一つのタスクとして扱われ、これにより、条件分岐が一つのタスク内に隠蔽される。
条件分岐を含む基準タスクと条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存又は間接制御依存するタスクである後続タスクとを含むタスクグループからさらに並列実行可能なタスクを抽出してスタティックスケジューリングにより並列実行することは、当該後続タスクが後述するように所定条件を満足しない限り一般的には困難であるので、これらを一つのタスクとして扱ってもタスク間の並列性を抽出する可能性は損なわれない。よって、本発明のコンパイラによれば、タスク間の並列性を抽出する可能性を損なわない観点から一のタスクとして扱うべきタスクグループを選択できるスタティックスケジューリング可能な並列プログラムを生成することが出来る。
本発明の並列化コンパイラにおいて、
前記データ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれを、前記複数の演算処理部のそれぞれに割り当てるスケジューリングを行うスケジューリングステップと、
前記スケジューリングの結果に基づいて、前記並列プログラムを生成する生成ステップと、
をさらに前記コンピュータに実行させることが好ましい。
当該構成の並列化コンパイラによれば、依存解析ステップにより、複数のタスク間のデータ依存が求められる。そして、コンピュータが前記「融合ステップ」実行後のスケジューリングステップにおいて、タスク間のデータ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれをいずれかの演算処理部に割り当て、このスケジューリングの結果に基づいて、並列プログラムを生成する。
以上の通り、本発明の並列化コンパイラによれば、データ依存、及び制御依存及び拡張制御依存が勘案された上でスケジューリングが行われるので、タスク間の並列性を抽出する可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。
当該構成の並列化コンパイラにおいて、
前記依存解析ステップにおいて求められた各タスク間のデータ依存及び各タスクの制御依存に基づいて、前記複数のタスクのそれぞれの最早実行可能条件の解析を行う最早実行可能条件解析ステップを、
前記コンピュータに実行させることが好ましい。
当該構成の並列化コンパイラによれば、各タスク間のデータ依存及び各タスクの制御依存に基づいて最早実行可能条件の解析が行われる。これにより、従来の並列化手法と整合を取ることが出来る。
本発明の並列化コンパイラにおいて、
前記基準タスクと前記基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクである第1後続タスクのすべてとを含むタスクグループを特定する第1特定ステップと、
前記タスクグループに含まれる条件分岐のすべての分岐方向の各々に制御依存又は拡張制御依存するタスクである第2後続タスクのすべてを前記タスクグループに加える第2特定ステップと、
前記タスクグループに含まれる条件分岐のいずれの分岐方向にも制御依存又は拡張制御依存するタスクがなくなるまで前記第2特定ステップを繰り返す制御ステップと、
前記タスクグループを前記融合すべきタスクグループとして決定する融合すべきタスクグループ決定ステップと、
を前記コンピュータに実行させることが好ましい。
当該構成の並列化コンパイラによれば、基準タスク、第1後続タスク又は第2後続タスクのいずれかに含まれる条件分岐のすべての分岐方向各々に制御依存又は拡張制御依存するタスクのタスクグループへの追加を繰り返すことにより、このようなタスクに含まれる条件分岐をすべて隠蔽するタスクグループが特定され、このタスクグループが一つの新タスクとして融合される。この結果、スタティックスケジューリングによっては並列化が困難とされたループ構造が少なく条件分岐が多い逐次プログラムから複数のタスクが「融合すべきタスクグループ」として抽出され、当該「融合すべきタスクグループ」が一つの新タスクとして融合される。
以上の通り、タスク間の並列性抽出の可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。
加えて、基準タスク、第1又は第2後続タスクのいずれかに含まれる条件分岐のすべての分岐方向各々に制御依存又は拡張制御依存するタスクを繰り返し抽出することにより、タスクグループを計算量を抑えながら抽出することが出来る。
本発明の並列化コンパイラにおいて、
前記融合すべきタスクグループに含まれる前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクが、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないという並列実行可能条件を含む所定条件を充足するか否かを判定する条件判定ステップを前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足しないと判定された場合、前記基準タスク及び前記後続タスクを融合する融合ステップを前記コンピュータに実行させ、
前記条件判定ステップにおいて前記所定条件を充足すると判定された場合、前記基準タスクに含まれる条件分岐を複製する複製ステップと、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクを各々、複製された条件分岐を含む複数の条件分岐の各々に後続させる後続ステップと、
当該複数の条件分岐の各々と、当該複数の条件分岐の各々に後続させた前記複数のタスクとを組み合わせて複数のタスクグループを生成し、当該複数のタスクグループを新たな複数の融合すべきタスクグループとして決定し、当該複数の融合すべきタスクグループを各々前記新たなタスクとして融合するステップ
を前記コンピュータに実行させることが好ましい。
当該構成の並列化コンパイラによれば、コンピュータが条件判定ステップを実行することにより、前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクを並列実行可能とするための所定条件を充足しているか否かが判定される。そして、条件判定ステップにおいて所定条件を充足しないと判定された場合には、基準タスクと後続タスクとを含む「融合すべきタスクグループ」に対して融合ステップを実行する。この融合ステップにより生成される新たなタスクが複数存在し、それらが互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない場合、これら複数の新たなタスクを別個のPEに割り当てることが可能になる。また、前記新たなタスクが一つしか存在しない場合であっても、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないタスクが別に存在すれば、それらは互いに並列実行可能となる。
一方、条件判定ステップにおいて所定条件を充足すると判定された場合、コンピュータが複製ステップを実行することにより、基準タスクに含まれる条件分岐が複製される。そして、コンピュータが後続ステップを実行することにより、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクがそれぞれ異なる条件分岐に後続する。これにより、並列実行可能なタスクがそれぞれ異なる条件分岐とともに「融合すべきタスクグループ」に含められ、これら複数の「融合すべきタスクグループ」がそれぞれ新たなタスクに融合されので、それぞれ当該新たなタスクが別個のプロセッシングエレメントに割り当てることが可能となる。これにより、前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスク間の並列性の抽出の可能性が損なわれない。
ここで、前記所定条件としては、まず第一に「前記融合すべきタスクグループに並列実行可能なタスクが存在すること」を設定する。つまり、元の逐次プログラムからできるだけ多くの並列実行可能なタスクを抽出するという観点から、前記融合すべきタスクグループにも後述するような並列実行可能なタスクが存在するかどうかを解析することが本発明の目的にとって重要である。
以上の通り、当該構成の並列化コンパイラによれば、タスク間の並列性を抽出する可能性を損なわずにスタティックスケジューリングを可能にする観点から、より適切な並列プログラムが生成される。
一の実施形態の全体構成図。 一の実施形態の並列プログラム生成処理のフローチャート。 他の実施形態の並列プログラム生成処理のフローチャート。 プロファイラの差し込み箇所を説明する図。 タスクの複数階層展開の説明図。 マクロフローグラフ(MFG)の第1例を示す図。 図6のMFGにおける各タスクごとの最早実行可能条件を示す図。 図6のMFGから生成したマクロタスクグラフ(MTG)の第1例を示す図。 図2及び図3/STEP018の融合すべきタスクグループ決定処理を詳細に展開したフローチャート。 図9のフローチャートの説明のために図8のMTGの一部を抜き出した図 図18のMTGの第1例を基にした、基準タスクに含まれる条件分岐の複製に関する説明図で、図11Aは、複製前のマクロタスクグラフで、図8に含まれる基本ブロックBB7〜BB10及び基本ブロックBB12を含み、外部へのエッジを省略したマクロタスクグラフ、図11Bは、条件分岐(基準タスク)複製後のマクロタスクグラフ。 MFGの第2例を示す図で、基本ブロックBB5が基本ブロックBB1に制御依存し、基本ブロックBB11が基本ブロックBB7に制御依存している場合のMFG。 図12のMFGにおける各タスクごとの最早実行可能条件を示す図。 図8のMTGより生成した融合後のMTGで、図14Aは、条件分岐の複製をしないで融合した後のMTG、図14Bは、条件分岐の複製を行った場合の融合後のMTG、図14Cは、従来技術によりタスクを融合した後のMTG。 図12のMFGより生成したMTGの第2例を示す図。 図9のフローチャートの説明のために図15のMTGの一部を抜き出した図 図15のMTGの第2例を基にした、基準タスクに含まれる条件分岐の複製に関する説明図で、図17Aは、複製前のマクロタスクグラフで、図15に含まれる基本ブロックBB7〜BB11及び基本ブロックBB12を含み、外部へのエッジを省略したマクロタスクグラフ、図17Bは、条件分岐(基準タスク)複製後のマクロタスクグラフ。 図15のMTGより生成した融合後のMTGで、図18Aは、条件分岐の複製をしないで融合した後のMTG、図18Bは、条件分岐の複製を行った場合の融合後のMTG、図18Cは、従来技術によりタスクを融合した後のMTG。 特許文献1の融合方法の原理を説明するMFGを示す図。 図19のMFGを基に生成した本発明の原理を説明するMTGを示す図。
図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である分岐方向を、「BB1」のように、条件分岐を含むタスクBB1の名称BB1とともに制御フロー上の分岐方向の最初のタスクBB2の番号2を下付数字で表す。同様に、基本ブロックBB1に含まれる条件分岐の分岐方向がBB5である分岐方向を「BB1」と表す。
また、図6において、基本ブロックBB3とサブルーチンブロックBB6とが実線エッジで結ばれているが、これは、サブルーチンブロックBB6が基本ブロックBB3にデータ依存を有していることを意味する。
なお、図6におけるMFGでは各エッジの矢印は省略されているが、各エッジの方向は下向きとしている。
演算処理要素110は、MFGに対し、タスクの最早実行可能条件を解析する(図2/STEP014)。なお、図2/STEP014の処理が、本発明の「依存解析ステップ」に含まれる「最早実行可能条件解析ステップ」の一例に該当する。タスクの最早実行可能条件の解析は、MFGに基づいて各タスクの制御依存及びデータ依存を解析することにより行われるが、各タスクの制御依存及びデータ依存の解析が終了すれば、事実上最早実行可能条件解析は容易に実施できるので、本明細書では両者ともにあるいは両者のいずれかを依存解析とする。
まず、制御依存及びデータ依存の解析を図6のMFGに対して実施した場合について説明する。図6に示される基本ブロックBB1の条件分岐の実行結果に応じて基本ブロックBB2の実行の可否が決定されるので、基本ブロックBB2は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB1に対して制御依存する。
また、基本ブロックBB2に含まれる条件分岐の分岐方向に応じて基本ブロックBB3の実行の要否が決定されるので、基本ブロックBB3は、基本ブロックBB2に含まれる条件分岐の一の分岐方向BB2に制御依存する。この場合、基本ブロックBB3は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB1に間接制御依存する。
また、基本ブロックBB1の条件分岐の分岐方向がいずれとなろうとも基本ブロックBB5が実行されるので、基本ブロックBB5は、基本ブロックBB1に含まれる条件分岐の全ての分岐方向BB12、BB1に制御依存しない。
基本ブロックBB6は、基本ブロックBB3にデータ依存を有しているが、基本ブロックBB1の条件分岐の一の分岐方向BB1への確定により、基本ブロックBB2の実行がされない(ひいては基本ブロックBB3の実行がされない)ことが確定した場合にも、基本ブロックBB6の実行をすることが出来る。このため、BB6は、基本ブロックBB1に含まれる条件分岐の一の分岐方向BB1に拡張制御依存する。
また、基本ブロックBB2の条件分岐の一の分岐方向BB2への確定により、基本ブロックBB3の実行がされないことが確定した場合にも、基本ブロックBB6の実行をすることが出来るので、基本ブロックBB6は、基本ブロックBB2の条件分岐の一の分岐方向BB2に拡張制御依存する。
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を実行する分岐方向BB2に確定すること」、または、「基本ブロックBB3が間接制御依存する基本ブロックBB1における条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB1に確定すること」である。
そして、「基本ブロックBB3が制御依存する基本ブロックBB2における条件分岐の分岐方向が、基本ブロックBB4を実行する分岐方向BB2に確定する」場合は、「基本ブロックBB1の条件分岐の分岐方向が基本ブロックBB2を実行する分岐方向BB1に確定していること」が前提になるので、「基本ブロックBB1の実行が確定する」場合を含んでいる。
また、「基本ブロックBB3が間接制御依存する基本ブロックBB1における条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB1に確定する」場合は、「基本ブロックBB1の実行が確定する」場合を含んでいる。
従って、図6のMFGに示す基本ブロックBB6の最早実行可能条件は、次のように簡略化できる。
基本ブロックBB3が終了する、又は、基本ブロックBB1の条件分岐の分岐方向が基本ブロックBB5を実行する分岐方向BB1に確定する、又は、基本ブロックBB2の条件分岐の分岐方向が基本ブロックBB4を実行する分岐方向BB2に確定する。なお、最早実行可能条件はこのように必ずしも簡略化されなくともよい。
以上のように、基本ブロックBB6に対して行ったと同様の再送実行可能条件解析を他のタスクに対しても行うと、各タスクの最早実行可能条件は、図7に示される表により表される。図7に示される表は、左側の欄がそれぞれのタスクの名称を示し、右側の欄が、それぞれのタスクがデータ依存するタスク又は制御依存若しくは拡張制御依存する分岐方向を示している。例えば、図7に示される表においては、BB2は、BB1の条件分岐の分岐方向BB1に制御依存していることを示す。また、図7に示される表においては、BB6は、BB3にデータ依存し、BB1の条件分岐の分岐方向BB1に制御依存し、BB2の条件分岐の分岐方向BB2に拡張制御依存していることを示す。図7に示される表において、orは、いずれかの条件が満たされれば左欄のタスクが実行可能となることを示す。図7に示される表においては示していないが、複数の条件が満たされた場合に実行可能となることを示す場合には、(BB1and 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に含まれる条件分岐の一の分岐方向BB1及び基本ブロックBB2に含まれる条件分岐の一の分岐方向BB2に拡張制御依存を有しているため、基本ブロック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等の先行タスクに含まれる条件分岐の各分岐方向BB1、BB1に対する制御依存を有しない。また、基本ブロック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における分岐方向BB7を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の条件分岐の分岐方向BB1に制御依存し、基本ブロックBB11は、基本ブロックBB7の条件分岐の分岐方向BB711に制御依存する。
演算処理要素110は、図6のMFGの場合と同様に、各タスクの制御依存と当該各タスク間のデータ依存の両方を解析し、その結果を用いて最早実行可能条件解析を行う(図2又は図3/STEP014)。その結果を図13に示す。図13と図7とを比較すれば、図7の最早実行可能条件の表では、BB5及びBB11の欄は空欄であったが、図13の最早実行可能条件の表では、BB5の欄にはBB1が記載され、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よりも適切に行うことが出来る。
100‥コンパイル装置、110‥演算処理要素、120‥読取装置、130‥書出装置、140‥記憶装置、200‥マルチプロセッサシステム、210‥集中共有メモリ、220‥入出力装置、C‥並列化コンパイラ、PE1‥第1プロセッシングエレメント、PE2‥第2プロセッシングエレメント、PEn‥第nプロセッシングエレメント、P1‥逐次プログラム、CF‥設定ファイル、P2‥並列プログラム、PB‥バイナリコード。

Claims (7)

  1. 逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータに生成させるコンパイラであって、
    前記コンピュータに
    前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
    前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
    前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを実行させることを特徴とする並列化コンパイラ。
  2. 請求項1記載の並列化コンパイラにおいて、
    前記データ依存に基づいて、前記新たなタスクを含む複数のタスクのそれぞれを、前記複数の演算処理部のそれぞれに割り当てるスケジューリングを行うスケジューリングステップと、
    前記スケジューリングの結果に基づいて、前記並列プログラムを生成する生成ステップと、
    をさらに前記コンピュータに実行させることを特徴とする並列化コンパイラ。
  3. 請求項2記載の並列化コンパイラにおいて、
    前記依存解析ステップに含まれる前記データ依存及び制御依存の解析において得られた各タスク間のデータ依存及び各タスクの制御依存に基づいて前記複数のタスクのそれぞれの最早実行可能条件の解析を行う最早実行可能条件解析ステップを、
    前記コンピュータに実行させることを特徴とする並列化コンパイラ。
  4. 請求項1〜3のうちいずれか1項記載の並列化コンパイラにおいて、
    前記基準タスクと前記基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存あるいは拡張制御依存するタスクである第1後続タスクのすべてとを含むタスクグループを特定する第1特定ステップと、
    前記タスクグループに含まれる条件分岐のすべての分岐方向の各々に制御依存あるいは拡張制御依存するタスクである第2後続タスクのすべてを前記タスクグループに加える第2特定ステップと、
    前記タスクグループに含まれる条件分岐のいずれの分岐方向にも制御依存あるいは拡張制御依存するタスクがなくなるまで前記第2特定ステップを繰り返す制御ステップと、
    前記タスクグループを前記融合すべきタスクグループとして決定する融合すべきタスクグループ決定ステップと、
    を前記コンピュータに実行させることを特徴とする並列化コンパイラ。
  5. 請求項1〜4のうちいずれか1項記載の並列化コンパイラにおいて、
    前記融合すべきタスクグループに含まれる前記基準タスクに含まれる条件分岐の一の分岐方向に制御依存、間接制御依存又は拡張制御依存する複数のタスクが、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しないという並列実行可能条件を含む所定条件を充足するか否かを判定する条件判定ステップをさらに前記コンピュータに実行させ、
    前記条件判定ステップにおいて前記所定条件を充足しないと判定された場合、前記融合すべきタスクグループを前記新たなタスクとして融合する融合ステップを前記コンピュータに実行させ、
    前記条件判定ステップにおいて前記所定条件を充足すると判定された場合、前記基準タスクに含まれる条件分岐を複製する複製ステップと、互いに制御依存、間接制御依存、拡張制御依存及びデータ依存を有しない前記複数のタスクを各々複製された条件分岐を含む複数の条件分岐の各々に後続させる後続ステップと、当該複数の条件分岐の各々と、当該複数の条件分岐の各々に後続させた前記複数のタスクとを組み合わせて複数のタスクグループを生成し、当該複数のタスクグループを新たな複数の融合すべきタスクグループとして決定し、当該複数の融合すべきタスクグループを各々前記新たなタスクとして融合するステップを前記コンピュータに実行させることを特徴とする並列化コンパイラ。
  6. 逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムを生成する並列化コンパイル装置であって、
    前記逐次プログラムを複数のタスクに分割し、
    前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求め、
    前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する演算処理要素を備えることを特徴とする並列化コンパイル装置。
  7. 逐次プログラムから、演算処理を実行する複数の演算処理部を備えるシステムで実行可能な並列プログラムをコンピュータにより生成する方法であって、
    前記逐次プログラムを複数のタスクに分割するタスク分割ステップと、
    前記複数のタスクを解析することにより、前記複数のタスクそれぞれのデータ依存及び制御依存を求める依存解析ステップと、
    前記複数のタスクのうち、条件分岐を有するタスクである基準タスクと、該基準タスクに含まれる条件分岐のすべての分岐方向の各々に制御依存、拡張制御依存、又は間接制御依存するタスクである後続タスクのすべてとを含むタスクグループを融合すべきタスクグループとして決定し、当該融合すべきタスクグループを新たなタスクとして融合する融合ステップとを含むことを特徴とする並列プログラムの生成方法。

JP2017178110A 2016-12-28 2017-09-15 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法 Active JP6600888B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
EP17210290.7A EP3343351B1 (en) 2016-12-28 2017-12-22 Parallel program generating method and parallelization compiling apparatus
US15/856,306 US10698670B2 (en) 2016-12-28 2017-12-28 Parallel program generating method and parallelization compiling apparatus
CN201711469305.7A CN108255492A (zh) 2016-12-28 2017-12-28 并行程序的生成方法以及并行化编译装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2016255938 2016-12-28
JP2016255938 2016-12-28

Publications (2)

Publication Number Publication Date
JP2018109943A JP2018109943A (ja) 2018-07-12
JP6600888B2 true JP6600888B2 (ja) 2019-11-06

Family

ID=62845177

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017178110A Active JP6600888B2 (ja) 2016-12-28 2017-09-15 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法

Country Status (1)

Country Link
JP (1) JP6600888B2 (ja)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150363230A1 (en) * 2013-01-23 2015-12-17 Waseda University Parallelism extraction method and method for making program
JP6018022B2 (ja) * 2013-06-14 2016-11-02 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置

Also Published As

Publication number Publication date
JP2018109943A (ja) 2018-07-12

Similar Documents

Publication Publication Date Title
EP3343351B1 (en) Parallel program generating method and parallelization compiling apparatus
JP6319880B2 (ja) 並列性の抽出方法及びプログラムの作成方法
JP6018022B2 (ja) 並列化コンパイル方法、並列化コンパイラ、並列化コンパイル装置、及び、車載装置
TWI423133B (zh) 設定為處理轉譯應用程式的運算系統
US20110119660A1 (en) Program conversion apparatus and program conversion method
JP4042604B2 (ja) プログラム並列化装置,プログラム並列化方法およびプログラム並列化プログラム
US8683468B2 (en) Automatic kernel migration for heterogeneous cores
JP6427054B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP4580827B2 (ja) 動作合成装置及び自動動作合成方法
JPWO2008090665A1 (ja) プログラム並列化方法及び装置
US20120054722A1 (en) Trace generating unit, system, and program of the same
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
JP2016177454A (ja) 動作合成方法、動作合成プログラムおよび動作合成装置
US8266416B2 (en) Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system
KR20150112017A (ko) 병렬 파이프라인에서의 분기에 대한 하드웨어 및 소프트웨어 해법
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
JP6488739B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
Welton et al. Exposing hidden performance opportunities in high performance GPU applications
JP6600888B2 (ja) 並列化コンパイラ、並列化コンパイル装置、及び並列プログラムの生成方法
JP3675623B2 (ja) プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体
JP6488738B2 (ja) 並列化コンパイル方法、及び、並列化コンパイラ
WO2022130883A1 (ja) コンパイル装置、コンパイル方法、及びコンパイルプログラム記録媒体
JP4819442B2 (ja) コンパイル処理方法、コンパイル処理装置及びコンパイル処理プログラム
JP2022011264A (ja) ソフトウェア開発支援装置及びソフトウェア開発支援方法
JP2001202252A (ja) プログラム処理方法および記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190823

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190903

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190919

R150 Certificate of patent or registration of utility model

Ref document number: 6600888

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250