"1つ以上の命令文からなるブロックを繰り返しN回N≧2処理するループ処理であって、i1≦i<N回目の実行に係る前記ブロック内の命令文で定義された変数が、ji<j≦N回目の実行に係る前記ブロック内の命令文で参照される依存関係にあるループ処理を含む対象ソースプログラムを参照することにより、新たなプログラムを生成するプログラム生成装置であって、i回目の実行に係る前記ブロックと、i回目以外の実行に係る1以上の前記ブロックとを対象ブロックとして、当該対象ブロックにおける変数表記の等価関係を算出する算出処理を行う算出手段と、前記算出手段が算出した変数表記の等価関係に基づいて、前記変数のうち、前記依存関係にある全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記を特定する特定処理を行う特定手段と、前記ループ処理のM回分M≦Nの処理を行うための、前記特定手段が特定した他の変数の表記を含んだ命令文を含むプログラムを生成する生成手段とを備えることを特徴とするプログラム生成装置。前記特定手段が特定する前記対象変数の表記と等価な前記依存関係のない他の変数の表記は、いずれの対象変数の表記とも異なる変数の表記であることを特徴とする請求項1記載のプログラム生成装置。前記算出手段は、i回目の実行に係る前記ブロックと、i1回目の実行に係る前記ブロックとを前記対象ブロックとして前記算出処理を行い、前記特定手段は、前記算出手段が前記算出処理を行う毎に、算出済みの各変数表記の等価関係に基づいて、全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記であって、いずれの対象変数の表記とも異なる変数の表記を特定できるか否かの判定を行い、当該判定処理の結果が否定的である間、iを1ずつ増加させながら、前記算出手段に前記算出処理を繰り返し行わせることを特徴とする請求項2記載のプログラム生成装置。前記プログラム生成装置が参照するプログラムは、単一のプロセッサで実行するためのプログラムであり、前記生成手段が生成するプログラムは、複数のプロセッサで並列実行するためのプログラムであることを特徴とする請求項2記載のプログラム生成装置。前記生成手段は、M<Nの場合に、生成したプログラムを前記ループ処理のN-M回分の処理をも行うように変更し、変更後のプログラムの処理と、前記対象ソースプログラムの処理とが、等価になるか否かを判定し、等価になる場合には、前記生成したプログラムを、当該変更後のプログラムに置き換えることを特徴とする請求項2記載のプログラム生成装置。1つ以上の命令文からなるブロックを繰り返しN回N≧2処理するループ処理であって、i1≦i<N回目の実行に係る前記ブロック内の命令文で定義された変数が、ji<j≦N回目の実行に係る前記ブロック内の命令文で参照される依存関係にあるループ処理を含む対象ソースプログラムを参照することにより、新たなプログラムを生産するプログラム生産方法であって、i回目の実行に係る前記ブロックと、i回目以外の実行に係る1以上の前記ブロックとを対象ブロックとして、当該対象ブロックにおける変数表記の等価関係を算出する算出処理を行う算出ステップと、前記算出ステップが算出した変数表記の等価関係に基づいて、前記変数のうち、前記依存関係にある全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記を特定する特定処理を行う特定ステップと、前記ループ処理のM回分M≦Nの処理を行うための、前記特定ステップが特定した他の変数の表記を含んだ命令文を含むプログラムを生成する生成ステップとを含むことを特徴とするプログラム生産方法。1つ以上の命令文からなるブロックを繰り返しN回N≧2処理するループ処理であって、i1≦i<N回目の実行に係る前記ブロック内の命令文で定義された変数が、ji<j≦N回目の実行に係る前記ブロック内の命令文で参照される依存関係にあるループ処理を含む対象ソースプログラムを参照することにより、新たなプログラムを生成するプログラム生成装置におけるプロセッサに、プログラム生成処理を行わせるためのプログラムであって、前記プログラム生成処理は、i回目の実行に係る前記ブロックと、i回目以外の実行に係る1以上の前記ブロックとを対象ブロックとして、当該対象ブロックにおける変数表記の等価関係を算出する算出処理を行う算出ステップと、前記算出ステップが算出した変数表記の等価関係に基づいて、前記変数のうち、前記依存関係にある全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記を特定する特定処理を行う特定ステップと、前記ループ処理のM回分M≦Nの処理を行うための、前記特定ステップが特定した他の変数の表記を含んだ命令文を含むプログラムを生成する生成ステップとを含むことを特徴とするプログラム。しかしながら、ソースプログラムに含まれるループ処理において、i1≦i<N回目の実行に係るブロック内の命令文で定義された変数を、ji<j≦N回目の実行に係るブロック内の命令文で参照するような依存関係が存在する場合には、特許文献1の方法では対応できない。つまり、特許文献1の方法では、このような依存関係を有するループ処理を含むソースプログラムからは、複数のプロセッサを用いてループ処理を高速に実行するためのプログラムを生成することはできない。そこで、本発明は係る問題に鑑みてなされたものであり、上記依存関係を有するループ処理を含むソースプログラムを参照することにより、複数のプロセッサを用いてループ処理を高速に実行するためのプログラムの生成に有用なプログラム生成装置を提供することを目的とする。上記課題を解決するために、本発明に係るプログラム生成装置は、1つ以上の命令文からなるブロックを繰り返しN回N≧2処理するループ処理であって、i1≦i<N回目の実行に係る前記ブロック内の命令文で定義された変数が、ji<j≦N回目の実行に係る前記ブロック内の命令文で参照される依存関係にあるループ処理を含む対象ソースプログラムを参照することにより、新たなプログラムを生成するプログラム生成装置であって、i回目の実行に係る前記ブロックと、i回目以外の実行に係る1以上の前記ブロックとを対象ブロックとして、当該対象ブロックにおける変数表記の等価関係を算出する算出処理を行う算出手段と、前記算出手段が算出した変数表記の等価関係に基づいて、前記変数のうち、前記依存関係にある全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記を特定する特定処理を行う特定手段と、前記ループ処理のM回分M≦Nの処理を行うための、前記特定手段が特定した他の変数の表記を含んだ命令文を含むプログラムを生成する生成手段とを備えることを特徴とする。上記構成を備える本発明に係るプログラム生成装置は、上記依存関係を有するループ処理を含むソースプログラムを参照することにより、複数のプロセッサを用いてループ処理を高速に実行するためのプログラムを生成し得る。以下、本発明の実施の形態について、図面を参照しながら説明する。≪実施の形態≫<概要>図2は、処理完了時において、配列b[k]0≦k≦99について、同一の処理結果を得ることが可能な等価な部分プログラムP1とP4とを示す図である。実施の形態に係るプログラム生成装置は、従来のコンパイラを改良したものであり、従来のコンパイラが、プログラマにより予め生成された、図2bに示す部分プログラムP4を含むソースプログラムを参照することにより生成し得たアセンブラプログラムと同様のアセンブラプログラムを、図2aに示す部分プログラムP1を含むソースプログラムを参照することにより生成するものである。ここで、部分プログラムP1は、真依存の関係を有するループ処理R1を含むものである。真依存の関係については、後に詳細に説明するが、ループ制御変数kがi0≦i<99である場合に実行されるブロックB1内の命令文で定義された変数が、ループ制御変数kがi1である場合に実行されるブロックB1内の命令文で参照されるような関係をいう。真依存の関係を有する命令文間の実行順序が、本来の実行順序と逆転してしまうと、正しい結果が得られないことになるため、このループ処理R1は、ループ制御変数kを1ずつ増加させながら、逐次実行されるのが一般的である。一方、部分プログラムP4に含まれるループ処理R4は、上述のような真依存の関係を有しないものである。従って、複数のプロセッサを用いて実行することが可能になる。例えば、ループ処理R4を、ループ制御変数kが0から49までの部分ループ処理と、ループ制御変数kが50から99までの部分ループ処理とに分けて、2つのプロセッサに独立して並列実行させることが可能である。これにより、1つのプロセッサでループ制御変数kが0から99までについてのループ処理R1を逐次実行する場合と比較し、より高速にループ処理を実行することができる。上述のように、実施の形態に係るプログラム生成装置は、図2aに示す部分プログラムP1を含むソースプログラムを参照することにより、従来のコンパイラが、図2bに示す部分プログラムP4を含むソースプログラムを参照することにより生成し得たアセンブラプログラムと同様のアセンブラプログラムを生成できる。従って、部分プログラムP1のように、真依存の関係を有するループ処理を含むソースプログラムが既に生成されている場合に、部分プログラムP4のように、真依存の関係を有しないループ処理を含むソースプログラムを生成しなおすことなく、並列実行に適したアセンブラプログラムを生成することができる点で、実施の形態に係るプログラム生成装置は有効である。なお、部分プログラムP1は、上述のように真依存の関係を有するループ処理R1を含むものの、以下説明する理由から、部分プログラムP4と比べて、単一のプロセッサでの高速実行に適したプログラムであるといえる。ここで、プログラム内の変数をなるべくレジスタに割り当てるようにすることで、プログラムをより高速に実行できることが一般的に知られている。これは、メモリと比較し、レジスタへのアクセスは、きわめて高速に行えるためである。一般的なコンパイラにおいては、部分プログラムP1に含まれるa0、a1、a2のような単純変数には、特定のレジスタが割り当てられる可能性が高い。従って、部分プログラムP1を実行する場合には、部分プログラムP4を実行する場合より、メモリへのアクセス回数を減らすことができる。つまり、単一のプロセッサを用いた場合、部分プログラムP1は、部分プログラムP4より高速に実行することができる。<データの依存関係>上記真依存をはじめとするデータの依存関係について、図3を用いて説明する。図3は、データの依存関係を説明するための図である。同図に示すように、命令文ST100で定義された変数aは、この命令文ST100より後に実行される命令文ST200で参照される関係にある。このような関係にある場合に、命令文ST100から命令文ST200への真依存があるという。また、同図に示すように、命令文ST200で参照された変数aは、この命令文ST200より後に実行される命令文ST300で定義される関係にある。このような関係にある場合に、命令文ST200から命令文ST300への逆依存があるという。また、同図に示すように、命令文ST100で定義された変数aは、命令文ST300で再定義される関係にある。このような関係にある場合に、命令文ST100から命令文ST300への出力依存があるという。また、以下では、真依存、逆依存及び出力依存の発生原因となっている変数を依存の原因となる変数という。図3では、変数aが、依存の原因となる変数である。なお、逆依存と出力依存については、依存関係にある各命令文において、依存の原因となる変数の表記を、相互に異なるものに置き換えることで、その依存が削除できることが知られている例えば、非特許文献1の120ページ参照。そのため、逆依存及び出力依存は、みせかけ依存と呼ばれることがある。上記部分プログラムP1におけるループ処理R1を例に、データの依存関係を具体的に説明する。図4は、図2aに示すループ処理R1におけるデータの依存関係を説明するための図である。以下では、ループ制御変数がmmはループ制御変数が取りうる任意の値である場合に実行されるループ内のブロックのことを、イタレーションmといい、イタレーションmを生成することを、mについてのイタレーション展開といい、このmのことを、イタレーション番号という。図4aは、図2aに示すループ処理R1におけるループ制御変数kが0である場合に実行されるブロックB1、つまり、イタレーション0を、図4bは、イタレーション1を示している。ここで、図4aに示すイタレーション0の命令文ST12、ST13、ST14でそれぞれ定義されている変数a0、a1、a2は、図4bに示すイタレーション1の命令文ST21で参照される関係にある。また、図4aに示すイタレーション0の命令文ST13、ST14でそれぞれ定義されている変数a1、a2は、図4bに示すイタレーション1の命令文ST22、ST23で参照される関係にある。即ち、変数a0を依存の原因とした、命令文ST12からST21への真依存がある。また、変数a1を依存の原因とした、命令文ST13からST21への真依存及び命令文ST13からST22への真依存がある。また、変数a2を依存の原因とした、命令文ST14からST21への真依存及び命令文ST14からST23への真依存がある。また、図4aに示すイタレーション0の命令文ST12で定義された変数a0は、図4bに示すイタレーション1の命令文ST22で再定義される関係にある。即ち、変数a0を依存の原因とした、命令文ST12からST22への出力依存がある。同様に、変数a1を依存の原因とした、命令文ST13からST23への出力依存があり、変数a2を依存の原因とした、命令文ST14からST24への出力依存がある。また、図4bに示すイタレーション1の命令文ST21で参照された変数a0、a1、a2は、命令文ST22~ST24でそれぞれ定義される関係にある。即ち、変数a0を依存の原因とした、命令文ST21からST22への逆依存があり、変数a1を依存の原因とした、命令文ST21からST23への逆依存があり、変数a2を依存の原因とした、命令文ST21からST24への逆依存がある。また、イタレーション0においても同様に、変数a0、変数a1、変数a2を依存の原因とした逆依存がある。なお、以下では、ループ処理における、あるイタレーション内の命令文から他のイタレーション内の命令文への依存があることを、イタレーション間に依存関係を有するともいう。<構成>図1は、実施の形態に係るプログラム生成装置100を含むコンパイラシステム1000の構成を示すブロック図である。コンパイラシステム1000は、上記部分プログラムP1のように、イタレーション間に真依存の関係を有するループ処理を含むソースプログラム11を参照することにより、複数のプロセッサによるループ処理の並列実行が可能な目的プログラム14を生成するものである。コンパイラシステム1000は、プロセッサ不図示と、メモリ不図示と、ハードディスク等の記憶装置10とを含むコンピュータ例えば、PCPersonalComputerにより実現される。コンパイラシステム1000は、同図に示すように、記憶装置10と、プログラム生成装置100と、アセンブラ210と、リンカ220とを含んで構成される。なお、プログラム生成装置100、アセンブラ210及びリンカ220の各機能は、上記プロセッサが、記憶装置10に記憶されている図示しないプログラムを上記メモリに読み込み、読み込んだプログラムを実行することによって実現される。ここで、プログラム生成装置100は、従来のコンパイラを改良したものであり、記憶装置10に記憶されている、C言語やC言語等の高級言語で記述されたソースプログラム11を参照して、アセンブラプログラム12を生成する機能を有する。プログラム生成装置100は、生成したアセンブラプログラム12を記憶装置10へ格納する。即ち、プログラム生成装置100は、イタレーション間に真依存の関係を有するループ処理を含むソースプログラム11を参照することにより、この真依存の関係が解消されたループ処理を実行するためのアセンブラプログラム12を生成する。また、アセンブラ210は、プログラム生成装置100により記憶装置10へ格納されたアセンブラプログラム12を参照して、機械語で記述された再配置可能バイナリプログラム13を生成する機能を有する。アセンブラ210は、生成した再配置可能バイナリプログラム13を記憶装置10へ格納する。また、リンカ220は、アセンブラ210により記憶装置10へ格納された再配置可能バイナリプログラム13において未解決なデータのアドレス配置等を決定し、必要なライブラリ等と連結することで、コンピュータが実行可能な目的プログラム14を生成する機能を有する。リンカ220は、生成した目的プログラム14を記憶装置10へ格納する。以下では、プログラム生成装置100の構成について、図1を用いて、より詳しく説明する。同図に示すように、プログラム生成装置100は、記憶部110と、取得部120と、算出部130と、特定部140と、生成部150とを備える。ここで、記憶部110は、ソースプログラム11や、算出部130、特定部140及び生成部150による処理結果を格納するためのメモリ領域である。即ち、以下では特に明記しないが、算出部130、特定部140及び生成部150間における処理結果のやり取りは、記憶部110を介して行われることとする。また、取得部120は、記憶装置10からソースプログラム11を読み出し、記憶部110に格納する機能を有する。算出部130は、取得部120により記憶部110に格納されたソースプログラム11に含まれているループ処理における、あるイタレーション及び他の1以上のイタレーションについての変数表記の等価関係を算出する機能を有する。算出部130は、イタレーション展開部131と、みせかけ依存削除部132と、等価関係算出部133とを含む。ここで、イタレーション展開部131は、ソースプログラム11に含まれているループ処理に基づいて、イタレーション展開を行う機能を有する。みせかけ依存削除部132は、イタレーション展開部131がイタレーション展開を行った、イタレーション番号が連続する2つのイタレーション間に存在するみせかけ依存即ち出力依存及び逆依存を削除する機能を有する。ここでは、依存関係にある2つの命令文における依存の原因となる変数の表記を相互に異なるものに置き換えるという従来から行われている方法と同様の方法を用いて、みせかけ依存の削除を行うこととする。等価関係算出部133は、みせかけ依存削除部132によりみせかけ依存が削除された後の上記2つのイタレーションの各命令文についての変数表記の等価関係を算出する機能を有する。ここでは、特許文献2において説明されている方法と同様の方法を用いて、変数表記の等価関係の算出を行うこととする。また、特定部140は、等価関係算出部133が算出した変数表記の等価関係に基づいて、上記2つのイタレーション間に存在する真依存の原因となる全ての変数を、等価な依存関係のない他の変数や式に置き換えることで、全ての真依存を削除できるか否かを判定する機能を有する。また、この判定結果に基づいて、特定部140は、算出部130による変数表記の等価関係の算出の実行を制御する機能及び以下説明する判定を行う機能を有する。即ち、この判定は、ソースプログラム11に含まれているループ処理内のブロックを、以下説明する生成部150により生成されたイタレーション変形候補で置き換えることができるか否かを判定するものである。生成部150は、特定部140が上記2つのイタレーション間に存在する全ての真依存を削除できると判定した際に、全ての真依存を削除したイタレーションに基づいて、イタレーション変形候補を生成する機能を有する。詳しくは後述するが図13a及びb参照、イタレーション変形候補は、上記全ての真依存を削除したイタレーションを、そのイタレーション番号以降のイタレーションにも適用できるように一般化したものである。また、生成部150は、特定部140がソースプログラム11に含まれているループ処理内のブロックをイタレーション変形候補で置き換えることができると判定した際に、アセンブラプログラム12を生成する機能を有する。このアセンブラプログラム12は、ソースプログラム11に含まれているループ処理内のブロックを、イタレーション変形候補で置き換えたソースプログラムに基づくものである。<動作>以下では、プログラム生成装置100の動作を説明する。図5~7は、プログラム生成装置100によるプログラム生成処理を示すフローチャートである。プログラム生成装置100の取得部120が、記憶装置10からソースプログラム11を読み出し、記憶部110に格納する。算出部130のイタレーション展開部131は、ソースプログラム11に含まれるループ処理におけるループ制御変数の任意の値を示すiと、i1とについてのイタレーション展開を行う図5のステップS1。算出部130のみせかけ依存削除部132は、イタレーションi及びイタレーションi1の各命令文間の依存関係を特定するステップS2。また、みせかけ依存削除部132は、みせかけ依存即ち、出力依存と逆依存の原因となる変数の表記を変更することで、みせかけ依存を削除するステップS3。算出部130の等価関係算出部133は、みせかけ依存を削除したイタレーションi及びイタレーションi1の各命令文についての変数表記の等価関係を算出するステップS4。この変数表記の等価関係の算出方法は、上述のように、特許文献2において説明されている方法と同様の方法であるため、以下、簡単に説明するが、結果として、図10に示すような等価式集合が得られることになる。ここで、図10a及びbに示す{と}とで括られたものを等価式集合といい、等価式集合の中に記載されているととで括られたものを等価式という。また、等価式の中に記載されているで区切られた各要素は等価であることを示していることとする。まず、等価関係算出部133は、イタレーションi及びイタレーションi1の各命令文を1つずつ順に処理対象として、以下の処理を行う。即ち、等価関係算出部133は、処理対象である命令文の右辺又は左辺に記述されている変数や式を含む等価式が、既に等価式集合に含まれているかを判定する。該当の等価式が等価式集合に含まれていないと判定した場合には、処理対象である命令文についての新たな等価式を等価式集合に追加する。また、処理対象である命令文の右辺に記述されている変数や式を含む等価式が、既に等価式集合に含まれていると判定した場合には、その等価式の要素として、その処理対象である命令文の左辺に記述されている変数や式を追加する。また、処理対象である命令文の左辺に記述されている変数や式を含む等価式が、既に等価式集合に含まれていると判定した場合には、その等価式に代えて、処理対象である命令文についての新たな等価式を等価式集合に追加する。プログラム生成処理の続きを説明する図5参照。ステップS4の処理が完了すると、特定部140は、等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS5。より詳細には、真依存の原因となる全ての変数の表記を、ステップS4で算出した変数表記の等価関係に基づいて、ステップS2で特定した依存の原因となる変数及びステップS3でみせかけ依存を削除するために導入した変数以外の等価な変数や式の表記に置き換えることができる場合には、全ての真依存を削除することができると判定するステップS5:YES。ここで、ステップS2で特定した依存の原因となる変数及びステップS3でみせかけ依存を削除するために導入した変数の表記に置き換えないのは、このような変数は、他のイタレーションにおいて新たな依存の原因となる可能性があるためである。即ち、このような変数の表記に置き換えても、結局のところ、イタレーション間の依存を削除することにならない可能性があるためである。全ての真依存を削除することができると判定した場合にはステップS5:YES、全ての真依存が削除できたイタレーションimにおけるmの値として、1を設定しステップS6、図6のステップS15の処理に進む。また、全ての真依存を削除することができないと判定した場合にはステップS5:NO、特定部140は、上記mの値を2に設定する図6のステップS7。また、特定部140は、mの値が、ソースプログラム11に含まれるループ制御変数が取り得る最大値以下、kmaxと表記するから、そのループ制御変数が取り得る最小値以下、kminと表記するを引いた値より小さいか否かを判定するステップS8。mの値がkmaxからkminを引いた値以上である場合にはステップS8:NO、真依存が削除できなかったものとして、プログラム生成装置100は、プログラム生成処理を終了する図7参照。一方、mの値がkmaxからkminを引いた値より小さい場合にはステップS8:YES、特定部140は、mの値を通知することで、算出部130に処理を指示する。処理を指示された算出部130のイタレーション展開部131は、ステップS1の処理と同様に、imについてのイタレーション展開を行うステップS9。また、みせかけ依存削除部132は、ステップS2の処理と同様に、イタレーションim-1及びイタレーションimの各命令文間の依存関係を特定しステップS10、ステップS3の処理と同様に、みせかけ依存を削除するステップS11。また、等価関係算出部133は、ステップS4の処理と同様に、みせかけ依存を削除したイタレーションim-1及びイタレーションimの各命令文についての変数表記の等価関係を算出するステップS12。続いて、特定部140は、ステップS5の処理と同様に、ステップS12で等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS13。ここで、特定部140は、ステップS5で説明したものと同様の理由により、ステップS2及びS10で特定した依存の原因となる変数及びステップS3及びS11でみせかけ依存を削除するために導入した変数の表記を、置き換えに用いない。全ての真依存を削除することができないと判定した場合にはステップS13:NO、特定部140は、mの値を1つ増加させてステップS14、再びステップS8から処理を行う。一方、特定部140が、全ての真依存を削除することができると判定した場合にはステップS13:YES、生成部150は、全ての真依存を削除したイタレーションimに基づいてイタレーション変形候補を生成するステップS15。ここで、iは、ソースプログラム11に含まれるループ処理におけるループ制御変数の任意の値を示す。従って、イタレーションimにおいて、全ての真依存が削除できるということは、イタレーションkminm以降のイタレーションで全ての真依存を削除できることを意味する。そこで、生成部150は、イタレーション番号が、kminmからkmaxまでのイタレーションにも適用できるように一般化したイタレーション変形候補を生成する。続いて、特定部140は、kmin及びm-1の値を通知することで、算出部130に処理を指示する。処理を指示された算出部130のイタレーション展開部131は、ステップS1の処理と同様に、kminからm-1までそれぞれについてのイタレーション展開を行う図7のステップS16。また、みせかけ依存削除部132は、イタレーションkminからイタレーションm-1までのそれぞれについて、ステップS2の処理と同様に、各命令文間の依存関係を特定しステップS17、ステップS3の処理と同様に、みせかけ依存を削除するステップS18。また、等価関係算出部133は、ステップS4の処理と同様に、みせかけ依存を削除したイタレーションkminからイタレーションm-1までのそれぞれの各命令文についての変数表記の等価関係を算出するステップS19。続いて、特定部140は、ステップS5の処理と同様に、ステップS19で等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS20。特定部140が、全ての真依存を削除することができないと判定した場合にはステップS20:NO、ループ制御変数が、kminからm-1の範囲では、真依存を削除できなかったものとして、プログラム生成装置100は、プログラム生成処理を終了する。また、特定部140が、全ての真依存を削除することができると判定した場合にはステップS20:YES、全ての真依存を削除したイタレーションkminからイタレーションm-1が、ステップS15で生成したイタレーション変形候補におけるイタレーションkminからイタレーションm-1と同形であるか否かを判定するステップS21。特定部140が、同形でないと判定した場合にはステップS21:NO、プログラム生成装置100は、プログラム生成処理を終了する。この場合、ループ制御変数がkminからm-1までの範囲に適用可能な真依存を削除したループ処理と、ループ制御変数がmからkmaxまでの範囲に適用可能な真依存を削除したループ処理とを1つのループ処理にまとめることはできないためである。一方、特定部140が、イタレーション変形候補におけるイタレーションkminからイタレーションm-1までと同形であると判定した場合にはステップS21:YES、生成部150は、以下のようにしてアセンブラプログラム12を生成するステップS22。即ち、生成部150は、ソースプログラム11のループ処理内のブロックを、イタレーション変形候補に置き換えたプログラムに、最適化や並列化を行った上で、アセンブラプログラム12を生成する。なお、最適化や並列化は、従来から行われている方法で実現できるため、ここでは、詳細な説明は省略し、最適化や並列化が行われた後のプログラムの具体例について後述する図18参照。生成部150は、生成したアセンブラプログラム12を、記憶装置10に格納し、プログラム生成装置100は、プログラム生成処理を終了する。<具体例>以下では、ソースプログラム11を、図2aに示す部分プログラムP1を含むものとした場合を例に、プログラム生成装置100の動作を、図5~7に示すフローチャートに即して説明する。プログラム生成装置100の取得部120が、記憶装置10からソースプログラム11を読み出し、記憶部110に格納する。算出部130のイタレーション展開部131は、ソースプログラム11に含まれるループ処理この例では、R1におけるループ制御変数この例では、kの任意の値を示すiと、i1とについてのイタレーション展開を行う図5のステップS1。図8aは、図2aに示すループ処理R1におけるイタレーションiを示す図であり、図8bは、イタレーションi1を示す図である。算出部130のみせかけ依存削除部132は、イタレーションi及びイタレーションi1の各命令文間の依存関係を特定するステップS2。また、みせかけ依存削除部132は、みせかけ依存即ち、出力依存と逆依存の原因となる変数の表記を変更することで、みせかけ依存を削除するステップS3。図8a及びbに示す例では、変数a0を依存の原因として、命令文ST42から命令文ST51への真依存と、命令文ST42から命令文ST52への出力依存と、命令文ST41から命令文ST42への逆依存と、命令文ST51からST52への逆依存とが存在する。また、変数a1を依存の原因として、命令文ST43から命令文ST51への真依存と、命令文ST43から命令文ST53への出力依存と、命令文ST41から命令文ST43への逆依存と、命令文ST51からST53への逆依存とが存在する。また、変数a2を依存の原因として、命令文ST44から命令文ST51への真依存と、命令文ST44から命令文ST54への出力依存と、命令文ST41から命令文ST44への逆依存と、命令文ST51からST54への逆依存が存在する。命令文ST42における変数a0の表記をa0_iに変更し、命令文ST52における変数a0の表記をa0_i1に変更することで、変数a0を依存の原因としたみせかけ依存を削除することができる。また、変数a0の場合と同様に、命令文ST43における変数a1の表記をa1_iに変更し、命令文ST53における変数a1の表記をa1_i1に変更することで、変数a1を依存の原因としたみせかけ依存を削除することができる。また、命令文ST44における変数a2の表記をa2_iに変更し、命令文ST54における変数a2の表記をa2_i1に変更することで、変数a2を依存の原因としたみせかけ依存を削除することができる。図9aは、図8aに示すイタレーションiからみせかけ依存を削除したイタレーションiを示す図であり、図9bは、図8bに示すイタレーションi1からみせかけ依存を削除したイタレーションi1を示す図である。なお、ステップS3の処理では、みせかけ依存を削除しただけなので、真依存は引き続き存在することになる。即ち、図9a及びbに示す例では、命令文ST46、ST47、ST48から命令文ST55への変数a0_i、a1_i、a2_iを依存の原因とした真依存と、命令文ST47、ST48から命令文ST56、ST57への変数a1_i、a2_iを依存の原因とした真依存が存在することになる。算出部130の等価関係算出部133は、みせかけ依存を削除したイタレーションi及びイタレーションi1の各命令文についての変数表記の等価関係を算出するステップS4。図9a及びbに示すみせかけ依存を削除したイタレーションi及びイタレーションi1の各命令文ST45~ST48、ST55~ST58について、変数表記の等価関係を算出すると以下のようになる。なお、以下の説明開始時点において、等価式集合にはいずれの等価式も含まれていないとする。まず、図9aに示す命令文ST45を処理対象とした場合には、命令文ST45の右辺及び左辺に記述されている変数や式を含む等価式が、等価式集合に含まれていないので、図10aに示す等価式集合E45のように、命令文ST45についての等価式が等価式集合に追加される。即ち、等価式集合E45は、命令文ST45が実行された直後では、変数b[i]と式a0a1a2が等価な関係にあることを示している。図9aに示す命令文ST46~ST48及び図9bの命令文ST55を処理対象とした場合にも、命令文ST45の場合と同様に処理される図10aの等価式集合E46~E48及び図10bの等価式集合E55参照。また、図9bに示す命令文ST56を処理対象とした場合には、命令文ST56の右辺に記述されている変数この例ではa1_iを含む等価式この例では、a1_ia2が、既に等価式集合E55に含まれている。従って、その等価式に、命令文ST56の左辺に記述されている変数この例では、a0_i1が追加される図10bの等価式集合E56参照。図9bに示す命令文ST57を処理対象とした場合も、命令文ST56の場合と同様に処理される図10bの等価式集合E57参照。また、図9bに示す命令文ST58を処理対象とした場合には、命令文ST45の場合と同様に、命令文ST58についての等価式が、等価式集合E57に追加される図10bの等価式集合E58参照。続いて、特定部140は、ステップS4で等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS5。上述のように、図9a及びbに示す例では、変数a0_i、a1_i、a2_iを依存の原因とした真依存が存在する。図10aに示す等価式集合E48によれば、真依存の原因となる変数a2_iは、変数a[i3]と等価である。また、この変数a[i3]は、ステップS2で特定した依存の原因となる変数及びステップS3でみせかけ依存を削除するために導入した変数ではない。従って、変数a2_iの表記を、変数a[i3]の表記に置き換えることができる。また、等価式集合E48によれば、真依存の原因となる変数a0_iは、変数a1と等価であり、真依存の原因となる変数a1_iは、変数a2と等価である。しかしながら、変数a1及び変数a2は、ステップS2で特定した依存の原因となる変数であるため、真依存の原因となる変数a0_i及び変数a1_iの各表記の置き換えはできない。従って、特定部140は、全ての真依存を削除することができないと判定するステップS5:NO。特定部140は、mの値を2に設定し図6のステップS7、この例では、mの値がkmaxこの例では99からkminこの例では0を引いた値より小さいのでステップS8:YES、mの値この例では2を通知し、算出部130に処理を指示する。イタレーション展開部131は、ステップS1の処理と同様に、imこの例ではi2についてのイタレーション展開を行うステップS9。また、算出部130のみせかけ依存削除部132は、イタレーションim-1この例ではi1と、イタレーションimとについて、ステップS3の処理と同様に、みせかけ依存を削除するステップS11。また、算出部130の等価関係算出部133は、ステップS4の処理と同様に、みせかけ依存を削除したイタレーションim-1及びイタレーションimの各命令文についての変数表記の等価関係を算出するステップS12。図11aは、みせかけ依存を削除したイタレーションi2を示す図であり、図11bは、みせかけ依存を削除したイタレーションi2の各命令文についての変数表記の等価関係を算出した結果を示す図である。ここで、図11bに示す等価式集合E65は、図11aに示す命令文ST65に基づいて、等価式b[i2],a0_i1a1_i1a2_i1を、図10bに示す等価式集合E58に追加したものになっている。特定部140は、ステップS5の処理と同様に、ステップS12で等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS13。図9b及び図11aに示す例では、変数a0_i1、a1_i1、a2_i1を依存の原因とした真依存が存在することになる。図10bに示す等価式集合E58によれば、真依存の原因となる変数a2_i1は、変数a[i4]と等価であり、真依存の原因となる変数a1_i1は、変数a[i3]と等価である。また、変数a[i4]及び変数a[i3]は、ステップS2及びS10で特定した依存の原因となる変数及びステップS3及びS7でみせかけ依存を削除するために導入した変数ではない。従って、変数a2_i1の表記を変数a[i4]の表記に、変数a1_i1の表記を変数a[i3]の表記に置き換えることができる。また、等価式集合E58によれば、真依存の原因となる変数a0_i1は、変数a1_i及び変数a2と等価である。しかしながら、変数a1_iは、ステップS3でみせかけ依存を削除するために用いた変数であり、変数a2は、ステップS2で特定した依存の原因となる変数である。従って、真依存の原因となる変数a0_i1の表記の置き換えはできない。よって、特定部140は、全ての真依存を削除することができないと判定するステップS13:NO。この例では、特定部140は、mの値を1つ増加させて3としステップS14、mの値がkmaxこの例では、99からkminこの例では、0を引いた値より小さいのでステップS8:YES、mの値を通知して算出部130に処理を指示する。処理を指示された算出部130は、上記同様、ステップS9~ステップS12の処理を行う。図12aは、みせかけ依存を削除したイタレーションi3を示す図であり、図12bは、みせかけ依存を削除したイタレーションi3の各命令文についての変数表記の等価関係を算出した結果を示す図である。図11a及び図12aに示す例では、変数a0_i2、a1_i2、a2_i2を依存の原因とした真依存が存在することになる。図11bに示す等価式集合E68によれば、真依存の原因となる変数a2_i2は、変数a[i5]と等価であり、真依存の原因となる変数a1_i2は、変数a[i4]と等価であり、真依存の原因となる変数a0_i2は、変数a[i3]と等価である。また、変数a[i5]、変数a[i4]及び変数a[i3]は、ステップS2及びS10で特定した依存の原因となる変数及びステップS3及びS7でみせかけ依存を削除するために導入した変数ではない。従って、変数a2_i2の表記を変数a[i5]の表記に、変数a1_i2の表記を変数a[i4]の表記に、変数a0_i2の表記を変数a[i3]の表記に置き換えることができる。よって、特定部140は、全ての真依存を削除することができると判定しステップS13:YES、生成部150は、全ての真依存が削除できたイタレーションimこの例ではi3に基づいてイタレーション変形候補を生成するステップS15。図13aは、全ての真依存を削除したイタレーションi3を示す図である。図13aに示す例では、生成部150は、i3をkとおいて、変数a0_i3の表記を変数a0_kの表記に、変数a1_i3の表記を変数a1_kの表記に、変数a2_i3の表記を変数a2_kの表記に置き換えたイタレーション変形候補を生成する。図13bは、生成部150が生成したイタレーション変形候補を示す図である。このイタレーション変形候補は、kが、kminmこの例では3からkmaxこの例では99までのイタレーションに適用できるものである。即ち、少なくとも3≦k<kmaxの範囲においては、図2aに示すループ処理R1のブロックB1を、イタレーション間に依存がない等価なブロックに置き換えることができることになる。続いて、特定部140は、kminこの例では0及びm-1この例では2の値を通知して、算出部130に処理を指示する。処理を指示された算出部130のイタレーション展開部131は、ステップS1の処理と同様に、kminからm-1までそれぞれについてのイタレーション展開を行う図7のステップS16。また、みせかけ依存削除部132は、イタレーションkminからイタレーションm-1について、ステップS2と同様に、各命令文間の依存関係を特定し図7のステップS17、ステップS3の処理と同様に、みせかけ依存を削除するステップS18。図14aに示すイタレーションI1~I3は、図2aに示すループ処理R1におけるイタレーション0~2を示している。また、図14bに示すイタレーションI10~I30は、図14aに示すイタレーション0~2からみせかけ依存を削除したイタレーション0~2を示している。また、図14bに示す命令文ST1~ST3は、図2aに示すループ処理R1の直前にある命令文ST1~ST3である。等価関係算出部133は、ステップS4の処理と同様に、みせかけ依存を削除したイタレーションkminからイタレーションm-1までのそれぞれの各命令文についての変数表記の等価関係を算出するステップS19。図15は、図14bに示す命令文ST1~ST3及びみせかけ依存を削除したイタレーション0~1の各命令文についての変数表記の等価関係を算出した結果を示す図である。また、図16は、図14bに示すみせかけ依存を削除したイタレーション2の各命令文についての変数表記の等価関係を算出した結果を示す図である。続いて、特定部140は、ステップS5の処理と同様に、ステップS19で等価関係算出部133が算出した変数表記の等価関係に基づいて、全ての真依存を削除することができるか否かを判定するステップS20。図15に示す等価式集合E3によれば、真依存の原因となる変数a0は、変数a[0]と等価であり、真依存の原因となる変数a1は、変数a[1]と等価であり、真依存の原因となる変数a2は、変数a[2]と等価である。また、変数a[0]、変数a1及び変数a[2]は、ステップS17で特定した依存の原因となる変数及びステップS18でみせかけ依存を削除するために導入した変数ではない。従って、図14bに示す命令文ST15の変数a0の表記を変数a[0]の表記に、変数a1の表記を変数a[1]の表記に、変数a2の表記を変数a[2]の表記に置き換えることができる。同様にして、図15に示す等価式集合E15に基づいて、図14bに示す命令文ST16の変数a1の表記を変数a[1]の表記に置き換えることができる。また、図15に示す等価式集合E16に基づいて、図14bに示す命令文ST17の変数a2の表記を変数a[2]の表記に置き換えることができる。同様にして、図15に示す等価式集合E18~E26に基づいて、図14bに示す命令文ST25~ST27の変数a0_0、変数a1_0及び変数a2_0の表記を置き換えることができる。また、図15に示す等価式集合E28及び図16に示す等価式集合E35、E36に基づいて、命令文ST35~ST37の変数a0_1、変数a1_1及び変数a2_1の表記を置き換えることができる。従って、特定部140は、全ての真依存を削除することができると判定しステップS20:YES、全ての真依存を削除したイタレーションkminこの例では0からイタレーションm-1この例では2が、ステップS15で生成したイタレーション変形候補におけるイタレーションkminからイタレーションm-1と同形であるか否かを判定するステップS21。図17aに示すイタレーションI11、I21、I31は、図14bに示すみせかけ依存を削除したイタレーション0~2I10、I20、I30から真依存を削除したイタレーションを示している。図13bに示すイタレーション変形候補についてのイタレーション0、イタレーション1、イタレーション3は、図17aに示すイタレーションI11、I21、I31と一致する。従って、この例では、特定部140は、同形であると判定しステップS21:YES、生成部150は、ソースプログラム11のループ処理R1のブロックB1を、イタレーション変形候補に置き換えて最適化や並列化したプログラムに基づくアセンブラプログラム12を生成するステップS22。図17bは、図2aに示す部分プログラムP1のブロックB1を、図13bに示すイタレーション変形候補に置き換えた部分プログラムP2を示している。この部分プログラムP2において、命令文ST1~ST3で定義される変数a0、変数a1及び変数a2と、命令文ST92~ST94で定義される変数a0_k、変数a1_k及び変数a2_kは、部分プログラムP2内の命令文では参照されない。従って、ソースプログラム11における、部分プログラムP2以外の部分でもこれらの変数が参照されないことを条件に、命令文ST1~ST3と、変数a0、変数a1及び変数a2を宣言する命令文ST4と、命令文ST92~ST94とを削除した最適化された部分プログラムP3図18参照を生成することができる。また、生成部150は、部分プログラムP3を並列化した部分プログラムP4図2b参照を生成する。また、生成部150は、この部分プログラムP4を含むソースプログラムに基づいて生成したアセンブラプログラム12を、記憶装置10に格納し、プログラム生成装置100は、プログラム生成処理を終了する。なお、図2bに示す部分プログラムP4における並列化を指示するための記述は、OpenMPの記述形式に沿ったものである。≪補足≫以上、本発明に係るプログラム生成装置を、実施の形態に基づいて説明したが、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りのプログラム生成装置に限られないことは勿論である。1実施の形態に係るプログラム生成装置100は、イタレーション番号が連続する2つのイタレーション間に真依存の関係を有するループ処理を含むソースプログラム11からアセンブラプログラム12を生成する場合を例に説明した。しかしながら、イタレーション番号が連続しない2つのイタレーション間に真依存の関係を有するループ処理例えば、図19aに示すループ処理R5や、図19cに示すループ処理R7を含むソースプログラム11からアセンブラプログラム12を生成するようにしてもよい。なお、図19bは、ループ処理R5と等価な上記真依存の関係を有しないループ処理R6を示している。また、図19dは、ループ処理R7と等価な上記真依存の関係を有しないループ処理R8を示している。そのためには、図5のステップS2の処理で依存関係を特定した結果、真依存の関係が存在しない場合には、真依存の関係を有する2つのイタレーションを特定する処理を行う。即ち、イタレーション番号si2≦s<Nについてイタレーション展開を行い、イタレーションi及びイタレーションsの各命令文間の依存関係を特定する。真依存の関係が存在しない場合には、sを1つずつ増やしながら、上記イタレーション展開及び依存関係の特定を繰り返し、真依存の関係が存在する場合には、ステップS3、S4におけるイタレーションi1を、イタレーションsに置き換えて、ステップS3、S4の処理を行う。また、ステップS6のmをsに設定するように変更し、図6のステップS7のmをs1に設定するように変更し、ステップS8以降は、実施の形態で説明したのと同様に処理できる。このように、この変形に係るプログラム生成装置によれば、例えば、図19aに示すループ処理R5や、図19cに示すループ処理R7を含むソースプログラムを参照することにより、従来のコンパイラが、図19bに示すループ処理R6や図19dに示すループ処理R8を含むソースプログラムを参照することにより生成し得たアセンブラプログラムと同様のアセンブラプログラムを生成できる。2実施の形態に係るプログラム生成装置100は、図7のステップS21において、全ての真依存を削除したイタレーションkminからイタレーションm-1が、図6のステップS15で生成したイタレーション変形候補におけるイタレーションkminからイタレーションm-1と同形でない場合にはステップS21:NO、アセンブラプログラム12を生成せずプログラム生成処理を終了するものとして説明した。しかしながら、ループ処理を、ループ制御変数がkminからm-1までの範囲の部分ループ処理Xと、ループ制御変数がmからkmaxまでの範囲の部分ループ処理Yとに分けて、ループ処理Yを複数のプロセッサにより並列実行可能に構成したアセンブラプログラム12を生成するようにしてもよい。3実施の形態に係るプログラム生成装置100は、ソースプログラム11を参照することにより、アセンブラプログラム12を生成するものとして説明した。しかしながら、プログラム生成装置が、アセンブラ210及びリンカ220を備えるように変形し、この変形に係るプログラム生成装置は、ソースプログラム11を参照することにより、目的プログラム14を生成するようにしてもよい。また、実施の形態に係るリンカ220は、未解決なデータのアドレス配置等を決定した再配置可能バイナリプログラム13と、必要なライブラリ等を連結するものとして説明したが、当然、複数の再配置可能バイナリプログラム13同士を連結するようにしてもよい。4実施の形態に係るプログラム生成装置100における算出部130の等価関係算出部133は、特許文献2において説明されている方法と同様の方法を用いて、変数表記の等価関係の算出を行うものとして説明したが、これは一例であり、他の方法により算出するようにしてもよい。例えば、命令文x=yにおける、xにyと同じ値が格納されているという関係、つまり、xとyとが等価であるという関係を利用して、命令文の表記を置き換えていくこと以下、コピー伝播というを繰り返し行う方法により算出するようにしてもよい。以下、この方法を簡単に説明する。例えば、図8aに示すイタレーションiの命令文ST44a2=a[i3]についてコピー伝播を行うことで、図8bに示すイタレーションi1の命令文ST51の表記はb[i1]=a0a1a[i3]に、命令文ST53の表記はa1=a[i3]に置き換えられる。また、この置き換えた後の命令文ST53と、命令文ST54とについてコピー伝播を行うことで、図20aに示すイタレーションi2の命令文ST61の表記はb[i2]=a0a[i3]a[i4]に置き換えられる。また、命令文ST62の表記はa0=a[i3]に、命令文ST63の表記はa1=a[i4]に置き換えられる。また、この置き換えた後の命令文ST62及びST63と、命令文ST64とについてコピー伝播を行うことで、図20bに示すイタレーションi3の命令文ST71の表記はb[i3]=a[i3]a[i4]a[i5]、命令文ST72の表記はa0=a[i4]に、命令文ST73の表記はa1=a[i5]に置き換えられる図20c参照。5実施の形態において説明したプログラム生成処理図5~7参照をプロセッサに実行させるためのプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ICカード、光ディスク、フレキシブルディスク、ROM、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるプロセッサで読み取り可能なメモリ等に格納されることにより利用に供され、そのプロセッサがそのプログラムを実行することにより実施の形態で示したプログラム生成装置の各機能が実現される。6実施の形態に係るプログラム生成装置100に、上記1~5の一部又は全部の変形を組み合わせて適用してもよい。7以下、更に本発明の一実施形態に係るプログラム生成装置の構成及びその変形例と各効果について説明する。a本発明の一実施形態に係るプログラム生成装置は、1つ以上の命令文からなるブロックを繰り返しN回N≧2処理するループ処理であって、i1≦i<N回目の実行に係る前記ブロック内の命令文で定義された変数が、ji<j≦N回目の実行に係る前記ブロック内の命令文で参照される依存関係にあるループ処理を含む対象ソースプログラムを参照することにより、新たなプログラムを生成するプログラム生成装置であって、i回目の実行に係る前記ブロックと、i回目以外の実行に係る1以上の前記ブロックとを対象ブロックとして、当該対象ブロックにおける変数表記の等価関係を算出する算出処理を行う算出手段と、前記算出手段が算出した変数表記の等価関係に基づいて、前記変数のうち、前記依存関係にある全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記を特定する特定処理を行う特定手段と、前記ループ処理のM回分M≦Nの処理を行うための、前記特定手段が特定した他の変数の表記を含んだ命令文を含むプログラムを生成する生成手段とを備える。上記構成を備える本発明の一実施形態に係るプログラム生成装置によれば、i回目の実行に係るブロック内の命令文と、j回目の実行に係るブロック内の命令文との間に、いわゆる真依存の関係を有するループ処理を含む対象ソースプログラムを参照することにより、そのループ処理のM回分の処理を行うための、真依存の関係にある全ての対象変数の表記について、当該対象変数の表記と等価な真依存の関係のない他の変数の表記を含んだ命令文を含むプログラムを生成できる。この生成したプログラムによれば、ループ処理のM回分の処理を、複数のプロセッサにより独立して並列実行し、ループ処理を高速に実行し得る。従って、このプログラム生成装置は、真依存の関係を有するループ処理を含むソースプログラムを参照することにより、複数のプロセッサを用いてループ処理を高速に実行するためのプログラムの生成に有用である。bまた、前記特定手段が特定する前記対象変数の表記と等価な前記依存関係のない他の変数の表記は、いずれの対象変数の表記とも異なる変数の表記であることとしてもよい。このプログラム生成装置によれば、真依存の関係を有するループ処理を含む対象ソースプログラムを参照することにより、そのループ処理のM回分の処理を行うための、真依存の関係にある全ての対象変数の表記と等価な真依存の関係のない他の変数の表記を含んだ命令文を含むプログラムを生成できる。つまり、このプログラム生成装置は、真依存の関係を有するループ処理を含む対象ソースプログラムを参照することにより、ループ処理のM回分の処理を、複数のプロセッサで独立して並列実行することで高速に実行することが可能なプログラムを生成できる。cまた、前記算出手段は、i回目の実行に係る前記ブロックと、i1回目の実行に係る前記ブロックとを前記対象ブロックとして前記算出処理を行い、前記特定手段は、前記算出手段が前記算出処理を行う毎に、算出済みの各変数表記の等価関係に基づいて、全ての対象変数の表記について、当該対象変数の表記と等価な前記依存関係のない他の変数の表記であって、いずれの対象変数の表記とも異なる変数の表記を特定できるか否かの判定を行い、当該判定処理の結果が否定的である間、iを1ずつ増加させながら、前記算出手段に前記算出処理を繰り返し行わせることとしてもよい。このプログラム生成装置によれば、iがnn<Nである場合に、真依存の関係にある全ての対象変数の表記について、当該対象変数の表記と等価な真依存の関係のない他の変数の表記を特定できた場合には、少なくともnからNまでのN-n回分のループ処理を行うための、真依存の関係にある全ての対象変数の表記と等価な真依存の関係のない他の変数の表記を含んだ命令文を含むプログラムを生成できる。従って、少なくとも、このN-n回分のループ処理を、複数のプロセッサで独立して並列実行することで高速に実行することが可能になる。dまた、前記プログラム生成装置が参照するプログラムは、単一のプロセッサで実行するためのプログラムであり、前記生成手段が生成するプログラムは、複数のプロセッサで並列実行するためのプログラムであることとしてもよい。このプログラム生成装置によれば、単一のプロセッサで実行するためのプログラムを参照することで、複数のプロセッサで並列実行するためのプログラムを生成できる。従って、例えばプログラマが作成した、単一のプロセッサで実行するためのプログラムが既にある場合に、わざわざ複数のプロセッサで並列実行するためのプログラムを作成しなおさなくてもよい。よって、プログラムを作成するための手間を省くことができる。eまた、前記生成手段は、M<Nの場合に、生成したプログラムを前記ループ処理のN-M回分の処理をも行うように変更し、変更後のプログラムの処理と、前記対象ソースプログラムの処理とが、等価になるか否かを判定し、等価になる場合には、前記生成したプログラムを、当該変更後のプログラムに置き換えることとしてもよい。このプログラム生成装置によれば、一旦生成した、ループ処理のMM<N回分の処理を行うためのプログラムを、ループ処理のN回分の処理を行うプログラムに変更しても、その処理が、対象ソースプログラムの処理と等価であることを条件に、最終的に、ループ処理のN回分の処理を行うためのプログラムを生成する。このループ処理のN回分の処理を行うためのプログラムは、真依存の関係にある全ての対象変数の表記について、当該対象変数の表記と等価な真依存の関係のない他の変数の表記を含んだ命令文を含むプログラムである。従って、N回分のループ処理を、複数のプロセッサで独立して並列実行することで高速に実行することが可能になる。"