(57)【要約】【課題】  プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができるようにする。【解決手段】  まず、最適化部２からの指示により、依存関係検出部４はブロック間に依存関係があるかどうかを調べる。依存関係検出部４で依存関係が検出された場合、依存状態解析部３は依存関係にあるブロックの取り得るすべての状態を列挙できるかどうかを調査する。すべての状態を列挙できると判定された場合、プログラム変換部５は、ブロック２００を、ブロック１００による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部２に戻す。【選択図】  図１
2005267024.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースプログラムから実行コードを生成して処理を行う並列処理装置であって、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析手段と、
前記解析手段による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換手段と、を備えたことを特徴とする並列処理装置。
【請求項２】
前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、前記変換手段は、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項１記載の並列処理装置。
【請求項３】
前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、前記変換手段は、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項１または２記載の並列処理装置。
【請求項４】
入力されたソースプログラムから実行コードを生成して処理を行う並列処理方法であって、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析工程と、
前記解析工程による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換工程と、を備えたことを特徴とする並列処理方法。
【請求項５】
前記変換工程では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項４記載の並列処理方法。
【請求項６】
前記変換工程では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項４または５記載の並列処理方法。
【請求項７】
入力されたソースプログラムから実行コードを生成する並列処理プログラムであって、
コンピュータに、
被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、前記被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析処理と、
前記解析処理による解析結果に基づいて前記結果依存プログラムブロックを、前記被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換処理と、を実行させることを特徴とする並列処理プログラム。
【請求項８】
前記変換処理では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項７記載の並列処理プログラム。
【請求項９】
前記変換処理では、前記結果依存プログラムブロックが処理を行うために用いる前記被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの前記結果依存プログラムブロックが個別に処理を行うように変換することを特徴とする請求項７または８記載の並列処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令を同時に処理する機能を備えた並列処理装置、方法、およびプログラムに関する。
【背景技術】
【０００２】
一般に、マルチプロセッサシステム上で実行性能を上げるためには、可能な限り並列動作可能な範囲を広げて、システムに搭載されている複数のＣＰＵを有効に利用する必要がある。
このように、複数の命令を同時に処理する機能を備えた並列処理装置の処理能力を活かすためには、並列処理可能な範囲を広げることが重要となる。
【０００３】
こうした並列処理装置として、本出願人による特許文献１のものは、プログラム中に条件分岐命令がある場合、その条件分岐の判定をするのに必要なデータがそろうまでの間に、条件分岐命令以降の命令を投機的に実行することで、条件分岐命令の予測ミスによるペナルティを減らすようにしている。
【０００４】
また、特許文献２のものでは、与えられた命令列から分岐命令と該命令の分岐条件が決定される命令とを検索して移動し、分岐条件の成立時と非成立時とに各々実行の移動を空きフィールドに対して行い、実行すべきでないことが示される命令対の一方を無効化するものである。
【特許文献１】特開平１１−９６００５号公報
【特許文献２】特開平７−１５２５６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、従来の並列処理装置では、プログラムブロック（以下、単に「ブロック」とする）間に依存関係があると並列実行は不可能になり、単体のＣＰＵでしか実行できなくなってしまう。
すなわち、従来の技術では前のブロック内の結果を後ろのブロックで参照している場合など、ブロック間に依存関係があると前のブロックの実行の終了を待ってから後ろのブロックの実行を開始する必要があり、これらのブロックを並列に実行することはできない。このようにブロック間に依存関係があると、並列化をあきらめて逐次に実行を行うが、これでは実行性能が出ないという問題がある。
【０００６】
また、上述した特許文献１のものは、プログラム中に条件分岐命令がある場合についてその条件分岐命令以降の処理の高速化を図るものであり、条件分岐命令がない場合についてまで考慮されたものではない。
また、上述した特許文献１のものでは、例えば図８に示すようなプログラムコードを実行する際、０ｘ１０番地に条件分岐命令のｉｆ文が配置されているが、その条件分岐の判定に必要なデータ（図８におけるｒ１とｒ７）の値が確定するまでの間に投機的に処理を行うことにより結果が出るまでの処理を高速化できるよう工夫したものである。
すなわち、上述した特許文献１のものにおける処理の高速化は、１つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
【０００７】
また、上述した特許文献２のものも、プログラム中に条件分岐命令がある場合についてその条件分岐命令以降の処理の高速化を図るものであり、条件分岐命令がない場合についてまで考慮されたものではない。
また、処理の高速化についても、検索された１つの条件分岐命令の判定に対するものであり、いくつもの命令文からなるプログラムブロックの単位での処理の高速化についてまで考慮されたものではなかった。
【０００８】
本発明はこのような状況に鑑みてなされたものであり、プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができる並列処理装置、方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
かかる目的を達成するために、本発明の第１の態様としての並列処理装置は、入力されたソースプログラムから実行コードを生成して処理を行う並列処理装置であって、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析手段と、解析手段による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換手段と、を備えたことを特徴とする。
【００１０】
上記した結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、変換手段は、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【００１１】
上記した結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、変換手段は、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【００１２】
また、本発明の第２の態様としての並列処理方法は、入力されたソースプログラムから実行コードを生成して処理を行う並列処理方法であって、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析工程と、解析工程による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換工程と、を備えたことを特徴とする。
【００１３】
上記した変換工程では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【００１４】
上記した変換工程では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【００１５】
また、本発明の第３の態様としての並列処理プログラムは、入力されたソースプログラムから実行コードを生成する並列処理プログラムであって、コンピュータに、被依存プログラムブロックによる処理結果に基づいて結果依存プログラムブロックが処理を行うという依存関係にある複数のプログラムブロックを含んだソースプログラムをコンパイルする際に、被依存プログラムブロックの処理により取りうる全ての結果を列挙できるかどうかを解析し、列挙できる場合に該全ての結果を列挙して出力する解析処理と、解析処理による解析結果に基づいて結果依存プログラムブロックを、被依存プログラムブロックによる全ての結果それぞれに対して並列に処理可能なものに変換する変換処理と、を実行させることを特徴とする。
【００１６】
上記した変換処理では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が変数の値である場合、該処理結果として取りうる全ての変数の値に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【００１７】
上記した変換処理では、結果依存プログラムブロックが処理を行うために用いる被依存プログラムブロックの処理結果が条件分岐の判定である場合、該条件分岐として取りうる全ての選択肢に対して、並列化されたそれぞれの結果依存プログラムブロックが個別に処理を行うように変換することが好ましい。
【発明の効果】
【００１８】
以上のように、本発明によれば、プログラムブロック間における依存関係が、条件分岐の判定待ちであるかないかに関わらず、いくつもの命令文からなるプログラムブロックの単位での処理を並列化することができ、プログラムブロックの単位での処理の高速化を実現することができる。
【発明を実施するための最良の形態】
【００１９】
次に、本発明に係る並列処理装置、方法、およびプログラムを、図面を用いて詳細に説明する。
本実施形態の並列処理装置は、依存関係があるために従来技術では並列化することができなかったプログラムブロック（以下、単に「ブロック」とする）を並列実行可能とする好適なものを例示している。
【００２０】
本発明の実施形態としての並列処理装置の概要を図１に示す。
本実施形態としての並列処理装置は、この図１に示すように、ソースプログラムを受け取るプリプロセス部と、字句解析部と、解析された字句の意味を解析する意味解析部と、最適化部２と、最適化されたブロックに基づいて実行コードを生成する実行コード生成部と、最適化部２の指示により動作する依存関係検出部４と、プログラム変換部５とを備えたコンパイラ１に依存状態解析部３が追加されて構成されている。
すなわち、本実施形態としての並列処理装置は、入力されたソースプログラムから実行コードを生成するコンパイラ１を備えたコンピュータであって、入力されたソースプログラムから実行コードを生成するコンパイラ１の最適化部２に、依存状態解析部３を追加して構成されている。
【００２１】
まず、本実施形態の概要について説明する。
図２に示すようにブロック１００（被依存プログラムブロック）の結果をブロック２００（結果依存プログラムブロック）が参照しているプログラムにおいて、従来の技術では依存関係のために並列実行することは不可能であった。ところが、ブロック１００の取り得るすべての結果を列挙することが可能であれば、図３のようにプログラムを書き換えることによってブロック１００とブロック２００を並列に実行することが可能である。
すなわち、ブロック１００の取り得る結果の数だけブロック２００に相当するブロック（ブロック２０１〜ブロック２０ｎ）を用意し、それぞれ異なるＣＰＵでブロック１００と並列に実行する。ブロック１００の処理が終了した時点で、実際のブロック１００の結果を用いて実行したブロック２００に相当するブロックの結果を採用して後続の処理を続ける。
【００２２】
本実施形態としての並列処理装置は、図１に示すように構成されることで上述した並列処理を実現しようとするものであり、コンパイラ１の最適化部２に依存状態解析部３を追加した構成とすることで、依存関係検出部４で依存状態が検出された場合は依存状態解析部３に処理を移す変更処理と、プログラム変換部５に上述の図２に示す形式を図３に示す形式のように書き換える並列化処理とをさらに実行できるようになっている。
ここで、上記の依存関係検出部４が検出する対象は、入力されるソースプログラムに含まれる複数のプログラムブロックについて、被依存ブロック（ブロック１００）による処理結果に基づいて結果依存ブロック（ブロック２００）が処理を行うという依存関係にあるものである。
【００２３】
次に、図１に示す本実施形態としての並列処理装置によるプログラム並列化動作の概要について説明する。
まず、最適化部２からの指示により、依存関係検出部４はブロック間に依存関係があるかどうかを調べる。依存関係が検出されなかったブロックについては、従来の並列化処理方法を用いてプログラム変換部５で並列化が行われ、最適化部２に戻される。
【００２４】
依存関係検出部４で依存関係が検出された場合、依存状態解析部３は依存関係にあるブロックの取り得るすべての状態を列挙できるかどうかを調査する。すべての状態を列挙できると判定された場合、プログラム変換部５は上述の手順で図２に示す依存関係であるものを図３に示す形式のように書き換える並列化を行い、その後で処理を最適化部２に戻す。
すなわち、プログラム変換部５は、ブロック２００を、ブロック１００による全ての結果それぞれに対して並列に処理可能なものに変換して最適化部２に戻す。
依存状態にあるブロックの取り得るすべての状態を列挙できない場合、並列化をあきらめて処理が最適化部２に戻される。
【実施例１】
【００２５】
次に、本実施形態としての並列処理装置の実施例１として、コンパイラ１での処理対象となるブロックが図４に示すような依存関係にある場合について説明する。
すなわち、この第１の実施例は、図４に示すような依存関係にあるプログラムに適用して図５に示すような形式に書き換えるものである。
【００２６】
図４に示す依存関係としては、ブロック３００（被依存プログラムブロック）が例えばｎ＝１，２，３のいずれかを定義し、ブロック４００（結果依存プログラムブロック）がそのｎの値を参照して処理を行う。
このため、この図４と図５に示す例では、ＣＰＵ−０からＣＰＵ−３までの４つのＣＰＵを用いたコンピュータでの処理として、ブロック３００とブロック４００とをコンパイルする際に、ブロック４００をブロック４０１、４０２、４０３の各ブロックに変換することで、並列化処理を行っている。
【００２７】
図４のブロック３００では変数ｎを定義し、ブロック４００ではブロック３００で定義された変数ｎを参照している。図５のブロック４０１、４０２、４０３はブロック４００と同じ構成のブロックである。ＣＰＵ−０でブロック３００を、ＣＰＵ−１からＣＰＵ−３でそれぞれブロック４０１からブロック４０３を実行する構成になっている。
【００２８】
次に、第１の実施例の動作について、図１、図４、図５を参照して詳細に説明する。
図４に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図１の依存関係検出部４で変数ｎの依存関係を検出し、並列化をあきらめて逐次に実行を行う。
しかし、本発明では、図１の依存状態解析部３でｎの取り得る値がｎ＝１、２、３のいずれかになることを解析し、図１のプログラム変換部５でプログラムを図５のように変換する。すなわち、プログラム変換部５がブロック４００からブロック４０１、ブロック４０２、ブロック４０３を生成して、それぞれ異なるＣＰＵにより処理されるように最適化部２が割り当てる。
それぞれの処理として、ブロック４０１はｎ＝１を用いて処理を行い、ブロック４０２はｎ＝２を、ブロック４０３はｎ＝３をそれぞれ用いて処理を行う。
【００２９】
ＣＰＵ−０でブロック３００の処理が終了した時点で、ブロック３００で実際に定義されたｎの値を確認し、その値を用いて処理を行ったブロック４０１から４０３の何れかによる結果を用いて後続の処理を行う。変換されたプログラムは最適化部２に戻され、残りの最適化を行う。
【００３０】
プログラムの実行における具体例として説明すると、ブロック４０１、４０２、４０３とブロック３００とが並列に実行され、例えばブロック３００の処理結果によりｎ＝２と定義された場合、後続の処理としてはブロック４０２の結果を用いてプログラムの残りの処理が続けられる。
【００３１】
以上のように、本発明の実施例１によれば、プログラム全体のターンアラウンドタイムを短縮することができる。
その理由は、依存関係があるブロックの取り得るすべての状態を列挙できる場合に、そのすべての状態を別々のＣＰＵで並列実行させることができるからである。
換言すると、ブロック３００による変数の値の確定（定義）を受けてブロック４００が処理を行う依存関係であっても、その処理結果として取りうる全ての変数の値に対しての状態を列挙できる場合に、そのすべての状態を別々のＣＰＵで並列実行させることができるからである。
【実施例２】
【００３２】
次に、本実施形態としての並列処理装置の実施例２として、コンパイラ１での処理対象となるブロックが図６に示すような依存関係にある場合について説明する。
すなわち、この第２の実施例は、図６に示すような依存関係にあるプログラムに適用して図７に示すような形式に書き換えるものである。
【００３３】
図６に示す依存関係のプログラムは、ブロック５００（被依存プログラムブロック）で変数Ｘの値を定義し、ブロック６００（結果依存プログラムブロック）でその値が０．０未満かそれ以外かで処理が異なるプログラムである。
このため、この図６と図７に示す例では、ＣＰＵ−０からＣＰＵ−２までの３つのＣＰＵを用いたコンピュータでの処理として、ブロック５００とブロック６００とをコンパイルする際に、ブロック６００をブロック６０１、６０２の各ブロックに変換することで、並列化処理を行っている。
【００３４】
図７のブロック６０１は、Ｘ＜０．０の場合の図６のブロック６００に相当するブロックであり、ブロック６０２は、それ以外の場合のブロック６００に相当するブロックである。
並列処理としては、ＣＰＵ−０でブロック５００を実行し、ＣＰＵ−１でブロック６０１を、ＣＰＵ−２でブロック６０２をそれぞれ実行する構成である。
【００３５】
次に、第２の実施例の動作について、図１、図６、図７を参照して詳細に説明する。
図６に示すような依存関係のブロックを有するソースプログラムをコンパイルする際、従来技術では図１の依存関係検出部４でブロック５００および６００の間に変数Ｘに依存関係が存在することを検出し、プログラムの並列化をあきらめる。
しかし、本発明では、図１の依存関係検出部４で変数Ｘの依存関係を検出したあとで、依存状態解析部３に処理が移される。依存状態解析部３は、ブロック６００において変数ＸはＸ＜０．０またはＸ＞＝０．０のいずれかの状態を取り得ると解析し、プログラム変換部５でプログラムを図７のように変換する。
すなわち、プログラム変換部５は図７に示すようにブロック６０１と６０２とを生成し、最適化部２はそのブロック６０１と６０２とがそれぞれ異なるＣＰＵで処理されるように割り当てる。
【００３６】
ブロック５００の処理が完了した時点で処理結果としてのＸ＜０．０の真偽を確認し、ブロック６０１または６０２のうちブロック５００での処理結果に当てはまる方の処理結果を用いて後続の処理が行われる。変換されたプログラムは、図１の最適化部２に戻されて残りの最適化が行われる。
【００３７】
プログラムの実行における具体例として説明すると、ブロック５００と、ブロック６０１、６０２とが並列に実行され、ブロック５００で例えばＸ＝−１．０と定義された場合、後続の処理としてはブロック６０１の結果を用いてプログラムの残りの処理が続けられる。
【００３８】
以上のように、本発明の実施例２によっても、プログラム全体のターンアラウンドタイムを短縮することができる。
その理由は、この実施例２においても、ブロック５００と、ブロック６００に相当するブロック６０１および６０２とを別々のＣＰＵで並列実行させることができ、プログラム全体を早く終了させることができるからである。
換言すると、ブロック５００による分岐命令の判定結果を受けてブロック６００が処理を行う依存関係であっても、その条件分岐の判定として取りうる全ての選択肢に対しての状態を列挙できる場合に、そのすべての状態を別々のＣＰＵで並列実行させることができるからである。
【００３９】
なお、上述した各実施形態は、本発明の好適な実施形態であり、本発明の主旨を逸脱しない範囲内において、種々変形して実施することが可能である。
例えば、上述した各実施形態としての並列処理装置を実現するための処理手順をプログラムとして記録媒体に記録することにより、本発明の各実施形態による上述した各機能を、その記録媒体から供給されるプログラムによって、システムを構成するコンピュータのＣＰＵに処理を行わせて実現させることができる。
この場合、上記の記録媒体により、あるいはネットワークを介して外部の記録媒体から、プログラムを含む情報群を出力装置に供給される場合でも本発明は適用されるものである。
すなわち、記録媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記録媒体および該記録媒体から読み出された信号は本発明を構成することになる。
この記録媒体としては、例えば、フロッピー（登録商標）ディスク，ハードディスク，光ディスク，光磁気ディスク，ＣＤ−ＲＯＭ，ＣＤ−Ｒ，磁気テープ，不揮発性のメモリカード，ＲＯＭ，ＥＥＰＲＯＭ等を用いてよい。
【００４０】
この本発明に係るプログラムによれば、当該プログラムによって制御されるコンピュータに、上述した本発明に係る各実施形態としてのコンピュータにおける各機能を実現させることができる。
【産業上の利用可能性】
【００４１】
本発明は、マルチプロセッサシステムにおいて並列実行するプログラムを生成する自動並列化コンパイラなどに適用することができる。
【図面の簡単な説明】
【００４２】
【図１】本発明の実施形態としての並列処理装置の要部構成の概要を示すブロック図である。
【図２】ブロック１００と２００との依存関係を示す図である。
【図３】ブロック１００と２００とが並列処理できるよう書き換えられた状態を概念的に示す図である。
【図４】ブロック３００と４００との依存関係を示す図である。
【図５】ブロック３００と４００とが並列処理できるよう書き換えられた状態を概念的に示す図である。
【図６】ブロック５００と６００との依存関係を示す図である。
【図７】ブロック５００と６００とが並列処理できるよう書き換えられた状態を概念的に示す図である。
【図８】従来技術（特許文献１）におけるプログラムコード例を示す図である。
【符号の説明】
【００４３】
１    コンパイラ
２    最適化部
３    依存状態解析部（解析手段）
４    依存関係検出部
５    プログラム変換部（変換手段）
１００、３００、５００    ブロック（被依存プログラムブロック）
２００、４００、６００    ブロック（結果依存プログラムブロック）
【図１】
2005267024.tif 000003
【図２】
2005267024.tif 000004
【図３】
2005267024.tif 000005
【図４】
2005267024.tif 000006
【図５】
2005267024.tif 000007
【図６】
2005267024.tif 000008
【図７】
2005267024.tif 000009
【図８】
2005267024.tif 000010