"逐次処理用に記述された第1プログラムに基づいて、並列処理が可能で、且つ、並列処理実行時の各並列処理の入力データ数に制限数がある計算機システム上で動作する第2プログラムを生成する計算機であって、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリとを備え、前記プロセッサは、前記第1プログラムから、並列処理が可能な第1並列処理及び第2並列処理を抽出し、抽出された前記第2並列処理の入力データ数が前記制限数よりも大きい、且つ、抽出された前記第1並列処理の入力データと出力データとが、前記第2並列処理の入力データを含む場合に、前記第1並列処理の入力データ及び出力データを統合した統合データを、前記第1並列処理の出力データ及び前記第2並列処理の入力データとする手順を組み込んだ第2プログラムを生成することを特徴とする計算機。前記プロセッサは、前記第1プログラムから、所定の処理が繰り返し実行される第1ループ処理及び第2ループ処理を、それぞれ前記第1並列処理及び第2並列処理として抽出することを特徴とする請求項1に記載の計算機。前記プロセッサは、前記統合データが前記第2並列処理の入力データ以外のデータを含む場合に、前記統合データから、前記第2並列処理の入力データを抽出する手順を、前記第2並列処理に組み込んだ第2プログラムを生成することを特徴とする請求項1に記載の計算機。前記プロセッサは、前記第1並列処理の入力データと出力データとの組み合わせが前記第2並列処理の入力データ以外のデータを含む場合に、前記第1並列処理の入力データ及び出力データから抽出される前記第2並列処理の入力データを、前記統合データとする手順を、前記第1並列処理に組み込んだ第2プログラムを生成することを特徴とする請求項1に記載の計算機。逐次処理用に記述された第1プログラムに基づいて、並列処理が可能で、且つ、並列処理実行時の各並列処理の入力データ数に制限数がある計算機システム上で動作する第2プログラムを生成する計算機における並列処理プログラム生成方法であって、前記計算機は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリとを備え、前記方法は、前記プロセッサが、前記第1プログラムから、並列処理が可能な第1並列処理及び第2並列処理を抽出する手順と、抽出された前記第2並列処理の入力データ数が前記制限数よりも大きい、且つ、抽出された前記第1並列処理の入力データと出力データとが、前記第2並列処理の入力データを含む場合に、前記第1並列処理の入力データ及び出力データを統合した統合データを、前記第1並列処理の出力データ及び前記第2並列処理の入力データとする手順を組み込んだ第2プログラムを生成する手順と、を含むことを特徴とする並列処理プログラム生成方法。逐次処理用に記述された第1プログラムに基づいて、並列処理が可能で、且つ、並列処理実行時の各並列処理の入力データ数に制限数がある計算機システム上で動作する第2プログラムを生成するプログラムであって、前記第1プログラムから、並列処理が可能な第1並列処理及び第2並列処理を抽出する手順と、前記第2並列処理の入力データ数が前記制限数よりも大きい、且つ、前記第1並列処理の入力データと出力データとが、前記第2並列処理の入力データを含む場合に、前記第1並列処理の入力データ及び出力データを統合した統合データを、前記第1並列処理の出力データ及び前記第2並列処理の入力データとする手順を組み込んだ第2プログラムを生成する手順と、をコンピュータに実行させることを特徴とするプログラム。ところで、上記のように、ある区切られた入力データが格納されたコンピュータ上では、当該区切られた入力データのみに対するMap処理が実行される。すなわち、Map処理の処理対象は、1つの区切られた入力データのみである。そのため、複数の区切られた入力データに対してMap処理MapReduceモデルのプログラムを実行したい場合は、複数の入力データを予め統合結合する等により、1つの区切られた入力データを生成する必要があった。また、予め用意されたデータと、あるMapReduceモデルの第1プログラムの処理結果のデータとが、後続のMapReduceモデルの第2プログラムによって使用される場合は、MapReduceモデルの第2プログラムの実行前に、両データを統合する等により1つのデータを生成する必要があった。すなわち、ユーザによって定義された分散並列処理MapReduceモデルのプログラムを実行する実行基盤には、入力データ数が制限される実行基盤がある上記の例では入力データ数の制限数は1。このような実行基盤では、所定の分散並列処理が複数のデータを処理対象にする場合、予めこれら複数のデータを統合することによって、データ数を入力データ数の制限数以下にする必要があった。しかしながら、データを統合するための分散処理が別途必要になり、余計な時間がかかっていた。なお、非特許文献2のpp.253-258には、MapReduceモデルのプログラムの実行中に、複数のデータを統合して1つのデータを生成する方法の一例が記載されている。この方法によれば、複数のデータを1つのデータに統合することができる。しかしながら、データを統合するためのMapReduce処理が別途必要になり、余計な時間がかかっていた。本発明は、上述した問題を考慮したものであって、入力データ数に制限のある実行基盤において、入力データ数を制限数以下にするためのデータ統合処理を実行することなく、分散並列処理を実行可能な計算機、分散並列処理プログラム生成方法、及び、プログラムを提供することを目的とする。本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、逐次処理用に記述された第1プログラムに基づいて、並列処理が可能で、且つ、並列処理実行時の各並列処理の入力データ数に制限数がある計算機システム上で動作する第2プログラムを生成する計算機であって、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリとを備え、前記プロセッサは、前記第1プログラムから、並列処理が可能な第1並列処理及び第2並列処理を抽出し、抽出された前記第2並列処理の入力データ数が前記制限数よりも大きい、且つ、抽出された前記第1並列処理の入力データと出力データとが、前記第2並列処理の入力データを含む場合に、前記第1並列処理の入力データ及び出力データを統合した統合データを、前記第1並列処理の出力データ及び前記第2並列処理の入力データとする手順を組み込んだ第2プログラムを生成することを特徴とする。本発明によれば、入力データ数に制限のある実行基盤において、入力データ数を制限数以下にするためのデータ統合処理を実行することなく、分散並列処理を実行可能である。以下、図面を用いて本発明の実施の形態について説明する。なお、本発明の実施の形態では、分散並列処理のプログラミングモデルとして、Google社によって提唱されているMapReduceを用いて説明する。また、分散並列処理プログラミングモデルの実行基盤として、オープンソースソフトウェアのHadoopを用いて説明する。但し、本発明は、これらプログラミングモデル及び実行基盤に限定されるものではない。図1は、本発明の実施の形態のコンパイラ106が稼働する計算機システム1の構成例を示す図である。コンパイラ106は、コンパイル対象の逐次実行用のソースプログラム110を、コンピュータが実行可能なオブジェクトプログラム111機械語のプログラム等に変換するソフトウェアである。計算機システム1は、CPUCentralProcessingUnit101、ディスプレイ装置102、キーボード103、主記憶装置104、外部記憶装置105を備える。CPU101は、主記憶装置104に格納されたプログラムコンパイラ106を含むを実行する演算処理装置である。ディスプレイ装置102は、コンパイラ106によるコンパイル処理が終了した旨を示すメッセージや、エラーを示すエラーメッセージ等の各種情報を出力するための出力装置である。キーボード103は、ユーザが情報を入力するための入力装置である。マウス等であってもよい。ユーザは、キーボード103を介して、コンパイラ106の起動命令を入力する。主記憶装置104は、コンパイラ106等のプログラムを記憶するRAMRandomAccessMemory等の記憶装置である。この主記憶装置104は、プログラムの実行に必要なファイル、データ中間コード107、ループ表108、MapReduce情報109を含むも記憶する。中間コード107、ループ表108、MapReduce情報109は、コンパイラ106によるコンパイル過程で生成される各種データである。外部記憶装置105は、プログラムやファイル、データ等を記憶するHDDHardDiskDrive等の記憶装置である。この外部記憶装置105には、ソースプログラム110、オブジェクトプログラム111が記憶される。図2は、本発明の実施の形態のコンパイラ106の処理手順を示すフローチャートである。図2に示す各処理手順は、計算機システム1のCPU101によって実行される。コンパイラ106は、外部記憶装置105に記憶されたソースプログラム110を入力し、入力されたソースプログラム110に対し、構文解析201、MapReduce解析202、統合データ解析203、コード生成204の順で処理を実行することにより、オブジェクトプログラム111を生成し、出力する。構文解析201では、入力されたソースプログラム110の構文を解析する構文解析処理、構文の解析結果に基づいて抽出される処理間の依存関係制御フローを解析する制御フロー解析処理、及び、構文の解析結果に基づいて抽出されるループ処理を解析するループ解析処理を実行する。これにより、中間コード107と、ループ表108とを生成し、出力する。中間コード107は、ソースプログラム110内のループ処理の実行順序を特定するための制御フロー情報等を含む。ループ表108は、抽出されたループ処理に基づいて生成される。このループ表108については、図8を用いて後述する。なお、構文解析201における構文解析処理、制御フロー解析処理、ループ解析処理については、例えばエイホ、セシィ、ウルマン著:コンパイラサイエンス社、1990年に記載されているように既知の技術であるため、ここでは詳細な説明を省略する。MapReduce解析202では、構文解析201で生成された中間コード107と、ループ表108とに基づいて、分散並列化が可能なループ処理MapReduce処理に変換可能なループ処理に関する情報MapReduce情報を、MapReduce情報109に登録する。MapReduce情報は、ループ処理の入出力データの情報を含む。具体的には、まずループ表108に登録された各ループ処理について、分散並列化が可能か否かを確認する。その後、分散並列化が可能であると判定されたループ処理に関する情報を、MapReduce情報109に登録する。本発明の実施の形態では、各イタレーション間でデータ依存がないループ処理、又は、各イタレーション間に足し込み型のデータ依存があるループ処理は、分散並列化が可能であると判定される。MapReduce情報109については、図9A、図9Bを用いて後述する。統合データ解析203では、MapReduce解析202で生成されたMapReduce情報109と、構文解析201で生成された中間コード107とに基づいて、MapReduce情報109に登録された各MapReduce処理の入出力データのうち、統合すべきデータを解析する。具体的には、MapReduce情報109に登録されている所定のループ処理が、複数の入力データを入力している場合に、これら複数の入力データの全てを入出力データとしている他のループ処理先行ループ処理を探索する。その後、探索された先行ループ処理の入出力データを統合可能か否か判定する。統合可能な場合には、当該先行ループ処理の入出力データの該当箇所を、統合データに置き換える。同様に、所定のループ処理の入力データを、統合データに置き換える。コード生成204では、構文解析201によって生成された中間コード107を、オブジェクトプログラム111のコードに変換し出力する。統合データコード生成205は、統合データ解析203によって統合可能と判定された入力データと出力データとの組み合わせを、統合データとして入出力するためのコードを生成する。すなわち、コード生成204によって生成されたオブジェクトプログラム111のコードを、統合データ向けのコードに変更する。この統合データコード生成205は、コード生成204内で実行される。図3は、本発明の実施の形態のMapReduce解析202の処理手順を示すフローチャートである。ここでは、図2のMapReduce解析202の処理の詳細を説明する。まず、ステップ301において、CPU101は、ループ表108に登録されている各ループ処理のうち、ステップ302、303の処理を未処理のループ処理があるか否かを判定する301。未処理のループ処理がない場合は301でNO、処理を終了する。一方、未処理のループ処理がある場合は301でYES、CPU101は、当該未処理のループ処理が、MapReduce処理に変換可能か否か分散並列化が可能か否かを判定する302。MapReduce処理に変換可能でない場合は302でNO、ステップ301に戻って、次の未処理のループ処理について処理を繰り返す。一方、MapReduce処理に変換可能である場合は302でYES、CPU101は、MapReduce処理に変換可能であると判定されたループ処理の情報を、MapReduce情報109に登録する303。その後、ステップ301に戻って、次の未処理のループ処理について処理を繰り返す。以上に示す処理により、MapReduce解析202では、構文解析201で生成された中間コード107と、ループ表108とに基づいて、分散並列化が可能なループ処理に関する情報を、MapReduce情報109に登録する。図4は、本発明の実施の形態の統合データ解析203の処理手順を示すフローチャートである。ここでは、図2の統合データ解析203の処理の詳細を説明する。まずステップ401において、CPU101は、MapReduce情報109に登録されているループ処理MapReduce処理、並列分散処理のうち、複数の入力データを有するループ処理で、且つ、以降のステップ402~405の処理を未処理のループ処理があるか否かを判定する401。該当するループ処理がない場合は401でNO、処理を終了する。一方、該当するループ処理がある場合は401でYES、CPU101は、MapReduce情報109を参照し、該当するループ処理が有する複数の入力データの全てを、入出力データとして含む他のループ処理が有るか否かを判定する402。具体的には、まずCPU101は、複数の入力データを有するループ処理以下、対象ループ処理という。の前に実行される可能性のあるループ処理以下、先行ループ処理という。を、MapReduce情報109と中間コード107から取得する。その後、先行ループ処理の入力データと出力データとの組み合わせが、対象ループ処理の複数の入力データの全てを含むか否か判定する。先行ループ処理の入力データと出力データとの組み合わせが、対象ループ処理の複数の入力データの全てを含まない場合は402でNO、ステップ401に戻り、次のループ処理をチェックする。一方、先行ループ処理の入力データと出力データとの組み合わせが、対象ループ処理の複数の入力データの全てを含む場合は402でYES、ステップ403に進む。なお、ステップ403に進むということは、先行ループ処理の出力データを、対象ループ処理の複数の入力データの全てを含むように変更することによって、対象ループ処理の複数の入力データを統合するためのMapReduce処理が不要になることを示す。また、先行ループ処理の入力データと出力データとの組み合わせが、対象ループ処理の複数の入力データの全てを含む場合とは、先行ループ処理の入力データのみ又は出力データのみが、対象ループ処理の複数の入力データの全てを含む場合も含むものとする。ステップ403において、CPU101は、対象ループ処理の複数の入力データを、1つの統合データに置き換える403。統合データとは、複数の入力データを、1つのデータに統合したものである。次に、ステップ404において、CPU101は、先行ループ処理の出力データを、ステップ403で置き換えたものと同じ1つの統合データに置き換える404。以上のステップ403、404の処理により、異なるループ処理先行ループ処理と対象ループ処理間で、同一の統合データのやりとりが可能になる。なお、このステップ404では、先行ループ処理の入力データと出力データとの組み合わせが、対象ループ処理の入力データ以外のデータを含む場合には、先行ループ処理の入力データ及び出力データから、対象ループ処理に必要な入力データのみを抽出することによって得られる統合データに、先行ループ処理の出力データを置き換えてもよい。その後、ステップ405において、CPU101は、元の出力データ統合前の先行ループ処理の出力データを参照している箇所を、ステップ404で置き換えたものと同じ1つの統合データに置き換える405。これにより、元の出力データを入力データとしていたループ処理において、受け取る入力データがなくなってしまうという問題を回避することができる。その後、ステップ401に戻り、次のループ処理をチェックする。以上に示す処理により、MapReduce解析202で生成されたMapReduce情報109と、構文解析201で生成された中間コード107とに基づいて、統合すべきデータを解析する。図5は、本発明の実施の形態のコード生成204及び統合データコード生成205の処理手順を示すフローチャートである。ここでは、図2のコード生成204及び統合データコード生成205の処理の詳細を説明する。なお、ステップ501は、コード生成204の処理を示す。一方、ステップ502~508は、統合データコード生成205の処理を示す。まずステップ501において、CPU101は、中間コード107、ループ表108、及びMapReduce情報109に基づいて、MapReduce処理に変換可能なループ処理を実行するためのMapReduceコードや、MapReduceコードを呼び出すための呼出しコードを含むオブジェクトプログラム111のコードを生成する501。ステップ501で生成されるオブジェクトプログラム111のコードの具体例については、図10を用いて後述する。ステップ502において、CPU101は、MapReduce情報109に登録されたMapReduce情報のうち、未処理のMapReduce情報があるか否かを判定する502。未処理のMapReduce情報がない場合は502でNO、処理を終了する。一方、未処理のMapReduce情報がある場合は502でYES、CPU101は、該当するMapReduce情報の入力データが、統合されたデータであるか否かを判定する503。統合されたデータでない場合は503でNO、ステップ506に進む。一方、統合されたデータである場合は503でYES、CPU101は、ステップ501で生成されたコードを修正すべく、統合された入力データから統合前の各データを分割して取り出すためのコードを、入力データ参照コードの直後に挿入する504。挿入されるコードの具体例については、図11を用いて後述する。なお、このステップ504により、統合されたデータが対象ループ処理の入力データ以外のデータを含む場合に、対象ループ処理において、統合されたデータから、統合前の各データ対象ループ処理の入力データを含むを抽出するためのコードを組み込んでいる。次に、ステップ505において、CPU101は、入力データが統合データに変更されているため、入力ファイル名を変更する505。ここでは、統合データの種類に応じた入力ファイル名に変更する。具体的には、入力ファイル名を、統合されている複数の入力データの配列名を先頭から結合し、最後にファイル識別子として.datを付加したものにしてもよい。次に、ステップ506において、CPU101は、該当するMapReduce情報の出力データが、統合されたデータであるか否かを判定する506。統合されたデータでない場合は506でNO、ステップ502に戻って処理を繰り返す。一方、統合されたデータである場合は506でYES、CPU101は、ステップ501で生成されたコードを修正すべく、個別の出力データを統合された出力データに変更するためのコードを、データ出力コードの直前に挿入する507。挿入されるコードの具体例については、図12を用いて後述する。次に、ステップ508において、CPU101は、出力データが統合データに変更されているため、出力ファイル名を変更する508。ここでは、結合データの種類に応じた出力ファイル名に変更する。具体的には、出力ファイル名を、統合されている複数のデータの配列名を先頭から結合し、最後にファイル識別子として.datを付加したものにしてもよい。また、同じ統合データを入力データとするMapReduce情報がある場合、当該MapReduce情報の入力ファイル名と同じにしてもよい。以上に示す処理により、コード生成204では、構文解析201によって生成された中間コード107を、オブジェクトプログラム111のコードに変換し出力する図10参照。統合データコード生成205は、統合データ解析203によって統合可能と判定された入出力データを、統合データとして入出力するためのコードを生成する。すなわち、コード生成204によって生成されたオブジェクトプログラム111のコードを、統合データ向けのコードに変更する図11~図13参照。具体例以下、本発明の実施の形態の分散並列処理プログラムの生成方法の具体例について説明する。図6は、本発明の実施の形態の具体例で用いられるデータとプログラムの処理手順とを示す図である。図6において、座標データ601は、2次元座標上に点在する複数の座標データの集合である。所属クラスタデータ602は、座標データ601中の各座標データが所属するクラスタ部分集合を示すデータである。これら座標データ601、602は、外部記憶装置105に記憶される。図6のステップ603~606では、K-means法と呼ばれるプログラムの処理手順フローチャートを示している。これらステップ603~606で実現されるプログラムは、コンパイラ106によるコンパイル対象のソースプログラム110に対応する。K-means法とは、あるデータの集合を、K個のクラスタ部分集合に分類する手法である。本発明の実施の形態の具体例では、座標データ601に含まれる複数の座標データを、K個のクラスタに分類する。図6中の実線は処理の流れを示し、点線はデータの流れを示す。ステップ603において、CPU101は、座標データ601を入力し、座標データ601中の各座標データが所属する初期クラスタを決定し、所属クラスタデータ602を出力する603。ステップ603では、各座標データが所属する初期クラスタはランダムに決定される。次に、ステップ604において、CPU101は、座標データ601と所属クラスタデータ602の2つのデータを入力し、クラスタ毎の重心データを計算する604。具体的には、各クラスタについて、クラスタに所属する各座標データのX軸成分の総和とY軸成分の総和の各々を、クラスタに所属する座標データの個数で除算することにより、各クラスタの重心データを求める。なお、図6に重心データを図示してないのは、クラスタ個数をK個Kは座標データ数に比べて非常に小さい値とするとする場合、重心データのデータ数は高々K個であり、座標データ601や所属クラスタデータ602に比べ非常にデータ量が小さく、データの受け渡しは主記憶装置104内でのコピー等で実現可能であるためである。次に、ステップ605において、CPU101は、座標データ601とステップ604で求められた重心データを入力し、各座標データが所属するクラスタを再計算し、所属クラスタデータ602を出力する605。このステップ605によって、各座標データは、最も近い重心データを有するクラスタに割り当てられるものとする。次に、ステップ606において、CPU101は、予め設定された所定の回数を繰り返したか否かを判定する606。所定の回数を繰り返した場合は606でYES、処理を終了する。所定の回数を繰り返してない場合は606でNO、ステップ604に戻って、クラスタの重心データの計算604、所属クラスタの再計算605を繰り返す。以上の処理により、本発明の実施の形態の具体例では、複数の座標データ601を、K個のクラスタに分類することができる。なお、特にステップ604は、複数のデータ座標データ601と所属クラスタデータ602を処理対象にするプログラム文である。図7は、本発明の実施の形態の具体例に係るプログラム70の一例を示す図である。図7に示すプログラム70は、図6のステップ603~605を実行するプログラムを示している。なお、プログラム70では、図6の座標データ601を格納する配列をPos、所属クラスタデータ602を格納する配列をCluster、重心データを格納する配列をCentroidとしている。座標データPosと重心データCentroidはX軸成分とY軸成分の値とを有する。そのため、座標データのX軸成分のデータをPos.X、Y軸成分のデータをPos.Yで表す。同様に、重心データのX軸成分のデータをCentroid.X、Y軸成分のデータをCentroid.Yで表す。また、重心データで示される重心を有するクラスタに所属する座標データの数をCentroid.Cで表す。以下、プログラム701~704について説明する。プログラム701は、図6のステップ603に対応し、座標データ601中の各座標データが所属するクラスタを初期化する処理である。関数func1は、座標データを入力し、入力された座標データが所属する初期クラスタ番号を返却する関数である。返却されたクラスタ番号は、配列Clusterに代入される。初期クラスタ番号は、ランダムに決めてもよい。プログラム702と703は、図6のステップ604に対応し、座標データ601と所属クラスタデータ602とに基づいて、各クラスタの重心データを求める処理である。具体的には、各クラスタについて、当該クラスタに所属する各座標データのX軸成分の総和と、Y軸成分の総和とを求め、それぞれの総和を当該クラスタに所属する座標データの個数で除算することにより求める。プログラム702では、クラスタの番号をCluster[J2]によって取り出し、取り出されたクラスタの重心データに、当該クラスタに所属する各座標データの情報を繰り返し加算する。その結果、クラスタに所属する各座標データのX軸成分の総和を、Centroid[cnum].Xに代入する。同様に、クラスタに所属する各座標データのY軸成分の総和を、Centroid[cnum].Yに代入する。また、当該クラスタに所属する座標データの個数を、Centroid[cnum].Cに代入する。プログラム703では、クラスタに所属する各座標データのX軸成分の総和Centroid[cnum].Xと、Y軸成分の総和Centroid[cnum].Yとの各々を、クラスタに属する座標データの個数Centroid[cnum].Cで除算することにより、クラスタの重心データを計算する。プログラム704は、図6のステップ605に対応し、座標データ601とステップ604で求められた重心データとに基づいて、座標データ601中の各座標データが所属するクラスタを再計算する処理である。関数func2は、座標データ601とステップ604で計算された重心データを入力し、入力された座標データが所属すべきクラスタ番号を返却する関数である。返却されたクラスタ番号は、配列Clusterに代入される。所属すべきクラスタとは、全クラスタのうちの、入力された座標データからクラスタの重心データまでの距離が一番近いクラスタであるものとする。図8は、本発明の実施の形態の具体例に係るループ表108の一例を示す図である。図8に示すループ表108は、構文解析201図2参照によって、図7のプログラム701~704で示される各ループ処理に基づいて生成されたものである。このループ表108は、ループ識別番号801、参照データ802の欄を有する。このループ表108は、各ループ処理の参照データ入力データ及び出力データ802を格納する。ループ識別番号801は、構文解析201によって、ソースプログラム110ここではプログラム701~704から抽出されたループ処理を登録する毎に、昇順に割り当てられる番号である。このループ識別番号801によって、中間コード107中の各ループ処理の情報の格納箇所を特定することができる。参照データ802の欄には、ループ処理内で定義使用されるデータ配列名の情報が登録される。まず、プログラム701に示すループ処理では、配列Posが使用され、配列Clusterが定義されている。そのため、ループ表108の参照データ802には、Pos、Clusterが登録される。ループ識別番号801には、最初の登録なので1が登録される。次に、プログラム702に示すループ処理では、配列Clusterと配列Posとが使用され、配列Centroidが使用定義されている。そのため、ループ表108の参照データ802には、Cluster、Pos、Centroidが登録される。ループ識別番号801には、2番目の登録なので2が登録される。次に、プログラム703に示すループ処理では、配列Centroidが使用定義されている。そのため、ループ表108の参照データ802には、Centroidが登録される。ループ識別番号801には、3番目の登録なので3が登録される。最後に、プログラム704に示すループ処理では、配列Posと配列Centroidとが使用され、配列Clusterが定義されている。そのため、ループ表108の参照データ802には、Pos、Centroid、Clusterが登録される。ループ識別番号801には、4番目の登録なので4が登録される。以上に示すように、ループ表108には、各ループ処理の参照データ入力データ及び出力データが、各ループ処理に対応付けて格納される。図9Aは、本発明の実施の形態の具体例に係るMapReduce情報109の第一の例を示す図である。図9Aに示すMapReduce情報109は、MapReduce解析202図2参照によって、図8のループ表108に基づいて生成されたものである。このMapReduce情報テーブル109は、ループ識別番号901、入力データ902、入力変更903、出力データ904、出力変更905の欄を有する。このMapReduce情報109は、各MapReduce処理分散並列化が可能なループ処理の参照データ入力データ902及び出力データ904、及び、参照データが変更されたか否かを示す情報入力変更903及び出力変更905を格納する。ループ識別番号901は、MapReduce情報109に登録される各MapReduce処理分散並列処理を識別するための番号である。このループ識別番号901には、各ループ処理が図8のループ表108に登録される際に、各ループ処理に付与されたループ識別番号801が登録される。入力データ902には、図8のループ表108の参照データ802のうち、MapReduce処理分散並列処理で使用される分散データのみが登録される。なお、本発明の実施の形態では、分散ファイルシステムHDFS上に格納され、大きいデータ量で、且つ、MapReduce処理で定義または使用されるデータを、分散処理を実行するための分散データと呼ぶ。一方、分散データに比して非常に少ないデータ量のデータは分散データとは呼ばないものとする。入力変更903は、入力データ902が変更されたか否かを示すフラグである。この入力変更903には、なしが初期値として登録される。なお、入力データ902が複数のデータに基づいて生成される1つの統合データに変更された場合に、この入力変更903には、ありがセットされる。出力データ904は、図8のループ表108の参照データ802のうち、MapReduce処理で定義される分散データのみが登録される。出力変更905は、出力データ904が変更されたか否かを示すフラグである。この出力変更905には、なしが初期値として登録される。なお、出力データ904が複数のデータに基づいて生成される1つの統合データに変更された場合に、この出力変更905には、ありがセットされる。以下、図9Aに示すMapReduce情報109が生成される具体的手順を、図3、図7及び図8を参照しながら説明する。まず、ステップ301において、CPU101は、ループ表108に登録されている各ループ処理のうち、ループ識別番号801が1のループ処理以下、単に第1のループ処理という。を抽出する301でYES。次に、ステップ302において、CPU101は、第1のループ処理がMapReduce処理に変換可能なループ処理か否かを判定する302。第1のループ処理は、図7のプログラム701であって、各イタレーション間に足し込み型のデータ依存はないが、あるイタレーションで定義された値が異なるイタレーションで使用されることがなく、各イタレーション間で依存がないループ処理である。そのため、MapReduce処理に変換可能であると判定される302でYES。次に、ステップ303において、CPU101は、第1のループ処理の情報を、MapReduce情報109に登録する303。具体的には、ループ識別番号901の欄に、ループ識別番号801と同じ番号である1を登録する。入力データ902の欄に、対象のMapReduce処理ここでは第1のループ処理内で定義される前に使用されている分散データ、すなわちPosを登録する。出力データ904の欄に、第1のループ処理内で定義されている分散データ、すなわちClusterを登録する。なお、入力変更903、出力変更905の欄には、初期値としてなしを登録する。次に、ステップ301に戻って、CPU101は、ループ表108に登録されている各ループ処理のうち、ループ識別番号801が2のループ処理以下、単に第2のループ処理という。を抽出する301でYES。次に、ステップ302において、CPU101は、第2のループ処理がMapReduce処理に変換可能なループ処理か否かを判定する302。第2のループ処理は、図7のプログラム702であって、配列Centroidに配列Posの値を足し込んでいる足し込み型のデータ依存がある。そのため、MapReduceの処理に変換可能であると判定される302でYES。次に、ステップ303において、CPU101は、第2のループ処理の情報を、MapReduce情報109に登録する303。具体的には、ループ識別番号901の欄に、ループ識別番号801と同じ番号である2を登録する。入力データ902の欄に、第2のループ処理内で定義される前に使用されている分散データ、すなわちPos、Clusterを登録する。出力データ904の欄に、第2のループ処理内で定義されている分散データはないので、登録対象がない旨を示す情報ここでは-を登録する。なお、入力変更903、出力変更905の欄には、初期値としてなしを登録する。次に、ステップ301に戻って、CPU101は、ループ表108に登録されている各ループ処理のうち、ループ識別番号801が3のループ処理以下、単に第3のループ処理という。を抽出する301でYES。次に、ステップ302において、CPU101は、第3のループ処理がMapReduce処理に変換可能なループ処理か否かを判定する302。第3のループ処理は、図7のプログラム703であって、分散データを用いた処理プログラムではないので、MapReduce処理に変換可能でないと判定される302でNO。そのため、CPU101は、第3のループ処理の情報を、MapReduce情報109に登録しない。次に、ステップ301に戻って、CPU101は、ループ表108に登録されている各ループ処理のうち、ループ識別番号801が4のループ処理以下、単に第4のループ処理という。を抽出する301でYES。次に、ステップ302において、CPU101は、第4のループ処理が、MapReduce処理に変換可能なループ処理か否かを判定する302。第4のループ処理は、図7のプログラム704であって、プログラム701と同様に、各イタレーション間でデータ依存がないループ処理である。そのため、MapReduceの処理に変換可能であると判定される302でYES。次に、ステップ303において、CPU101は、第4のループ処理の情報を、MapReduce情報109に登録する303。具体的には、ループ識別番号901の欄に、ループ識別番号801と同じ番号である4を登録する。入力データ902の欄に、第4のループ処理内で定義される前に使用されている分散データ、すなわちPosを登録する。出力データ904の欄に、第4のループ処理内で定義されている分散データ、すなわちClusterを登録する。なお、入力変更903、出力変更905の欄には、初期値としてなしを登録する。以上に示す処理により、図9Aに示すMapReduce情報109は生成される。なお、MapReduce処理の処理対象データは、分散データを格納している配列データのみである。そのため、高々クラスタ数の要素クラスタ数をK個とする場合、高々K個の要素しか有さない配列Centroidは、MapReduce処理の処理対象データにはならないものとしている。そのため、MapReduce情報109の入力データ902、出力データ904の欄には、Centroidは登録されない。図9Bは、本発明の実施の形態の具体例に係るMapReduce情報109の第二の例を示す図である。図9Bに示すMapReduce情報109は、統合データ解析203図2参照によって、図9AのMapReduce情報109に基づいて生成されたものである。このMapReduce情報テーブル109の各欄は、図9Aに示すMapReduce情報109と同様であるため、ここでは説明を省略する。以下、図9Bに示すMapReduce情報109が生成される具体的手順を、図4、図9Aを参照しながら説明する。まずステップ401において、CPU101は、図9AのMapReduce情報109の入力データ902の欄を参照し、複数の入力データが登録されている第2のループ処理を抽出する401でYES。第2のループ処理の入力データ902の欄には、PosとClusterの2つの入力データが登録されている。以下の説明において、この第2のループ処理を、対象ループ処理という。次にステップ402において、CPU101は、MapReduce情報109を参照し、PosとClusterの2つの入力データの全てを、入出力データとして含む他のループ処理が有るか否かを判定する402。ステップ402において、具体的には、まずCPU101は、対象ループ処理の前に実行される可能性のある先行ループ処理として、第1のループ処理と、第4のループ処理とを抽出する。第1のループ処理と第4のループ処理とは、双方とも、PosとClusterの2つの入力データの全てを含む402でYES。そのため、このステップ402では、配列Posと配列Clusterの組が、統合すべきデータとして判定される。次にステップ403において、CPU101は、対象ループ処理の入力データ902の欄に登録された複数の入力データPos、Clusterを、1つの統合データ{Pos、Cluster}に置き換える403。ここでは、置き換え後の統合データを、新たな入力データとして登録する。また、入力データが統合データに置き換えられたので、入力変更903に、変更があったことを示すありを登録する。なお、統合データは、複数のデータを1つのデータのように扱うものであり、本発明の実施の形態の具体例に係るMapReduce情報109内では、{と}で囲んで表記している。また、統合データとして扱うデータ順は、{と}で囲まれた中に記載してあるデータ順と同じとする。例えば、第2のループ処理の入力データ902の欄には{Pos、Cluster}として登録されるので、統合データの先頭にPosのデータが、その後方にClusterのデータが配置される。次に、ステップ404において、CPU101は、先行ループ処理第1のループ処理と第4のループ処理の出力データ904の欄に登録された出力データを、ステップ403で置き換えたものと同じ1つの統合データ{Pos、Cluster}に置き換える404。ここでは、置き換え後の統合データを、新たな出力データとして登録する。また、出力データが統合データに置き換えられたので、出力変更905に、変更があったことを示すありを登録する。その後、ステップ405において、CPU101は、元の出力データ統合前の先行ループ処理の出力データを参照している箇所を、ステップ404で置き換えたものと同じ1つの統合データに置き換える405。本発明の実施の形態の具体例では、第2のループ処理以外に、先行ループ処理第1のループ処理と第4のループ処理の出力データを参照するループ処理が存在しないので、このステップ405の処理を実行しない。以上に示す処理により、図9Bに示すMapReduce情報109は生成される。図9Bに示すように、第2のループ処理の入力データ902の欄、及び、第1のループ処理と第4のループ処理の出力データ904の欄には、同じ統合データ{Pos、Cluster}が登録されている。次に、図10~図13を用いて、本発明の実施の形態の具体例において、コード生成204及び統合データコード生成205図2参照によって生成されるプログラムについて説明する。図10は、本発明の実施の形態の具体例においてコード生成204によって生成されるプログラム10を示す図である。図10に示すプログラム10は、図5のステップ501において、コード生成204によって生成される。図10に示すプログラム10は、MapReduceコード1001と、MapReduceコード1001を呼出すための呼出しコード1002とを含む。なお、MapReduce処理に変換可能なループ処理が複数ある場合には、各ループ処理について、MapReduceコード1001、呼出しコード1002が生成される。MapReduceコード1001は、ループ処理の処理内容に応じて、Map処理とReduce処理、又は、Map処理のみで構成される。一般に、総和を求める処理、最大値、最小値を求める処理のように、処理結果のデータ数が元のデータ数よりも小さい処理は、Map処理とReduce処理で構成される。それ以外の処理は、Map処理のみで構成される。呼出しコード1002は、MapReduceコード1001を呼出すためのコードJobClientrunJobと、MapReduceコード1001のクラス名を設定するためのコードsetMapperClasssetReducerClassと、入出力ファイル名を設定するためのコードFileInputFormatsetInputPathsFileOutputFormatsetOutPathとを含む。図11は、本発明の実施の形態の具体例において統合データコード生成205によって生成される第一のプログラム11を示す図である。プログラム11中のプログラムコード1101は、図5のステップ504において、統合データコード生成205によって生成され、プログラム11に挿入される。プログラムコード1101は、統合データ{Pos、Cluster}から、統合前の各入力データPos,Clusterを分割して取り出すためのデータ分割コードを示している。具体的には、統合データから統合前の各入力データを抽出し、抽出された各入力データを、それぞれの配列Pos.X、Pos.Y、Clusterに個別に代入して入力するコードである。後述のように、統合データを出力する場合、統合される各データの間にはスペースが埋め込まれている。そのため、st.nextTokenを用いて各データを取り出すことができる。また、st.nextTokenを用いて取り出されたString型の各データに、各データの型に応じた型変換を実行することによって、各データの型にあったデータを取り出すことができる。このプログラムコード1101は、入力データ参照コードの直後に挿入される。なお、プログラムコード1101は、図9Bの第2のループ処理の入力データ902の欄に登録された統合データ{Pos、Cluster}から、統合前の各入力データPos、Clusterを分割して取り出すためのデータ分割コードである。図12は、本発明の実施の形態の具体例において統合データコード生成205によって生成される第二のプログラム12を示す図である。プログラム12中のプログラムコード1201は、図5のステップ507において、統合データコード生成205によって生成され、プログラム12に挿入される。プログラムコード1201は、個別のデータPos、Clusterを、統合された出力データ{Pos、Cluster}に変更するためのデータ統合コードを示している。具体的には、各データを、1つのText型データとして出力するコードである。各データをString型データに型変換した後、統合される各データの間にスペースを埋め込んだ文字列を生成する。その後、データを出力するためのoutput.collectを用いて、String型データをText型に変換して出力する。このプログラムコード1201は、データ出力コードの直前に挿入される。なお、プログラムコード1201は、図9Bの第1のループ処理及び第4のループ処理の出力データ904の欄に登録された統合データ{Pos、Cluster}を生成するためのデータ統合コードである。図13は、本発明の実施の形態の具体例において統合データコード生成205によって生成される第三のプログラム13を示す図である。図13に示すプログラム13は、図10に示すプログラム10に基づいて、図5のステップ502~508の処理によって生成される。図13に示すプログラム13では、MapReduce処理の対象となる第1、第2、及び第4のループ処理が、それぞれMapper1図12参照、Mapper2図11参照、Reducer2及びMapper4のクラスコードで示される。runには、MapReduceコードを呼び出すためのコードであって、入力データや出力データのファイル名等を設定するためのコードが生成される。コード1301は、Mapper1第1のループ処理に対応の出力ファイル名を設定するためのコードである。図9Bに示すように、第1のループ処理の出力変更905の欄にはありが登録されている。そのため、出力ファイル名は変更される図5のステップ508参照。具体的には、出力ファイル名は、統合されている複数のデータの配列名Pos、Clusterを先頭から結合し、最後にファイル識別子として.datを付加したファイル名PosCluster.datに変更される。コード1302は、Mapper2第2のループ処理に対応の入力ファイル名を設定するためのコードである。図9Bに示すように、第2のループ処理の入力変更903の欄にはありが登録されている。そのため、入力ファイル名は変更される図5のステップ505参照。具体的には、コード1301と同様であるため、ここでは説明を省略する。コード1303は、Mapper4第4のループ処理に対応の出力ファイル名を設定するためのコードである。図9Bに示すように、第4のループ処理の出力変更905の欄にはありが登録されている。そのため、出力ファイル名は変更される図5のステップ508参照。具体的には、コード1301と同様であるため、ここでは説明を省略する。以上説明してきた図11~図13のプログラムを含むオブジェクトプログラム111が、本発明の実施の形態のコンパイラ106によって生成される。これにより、入力データ数に制限のある分散処理基盤において、分散処理内で制限数を超えた入力データを参照する場合に、先行する分散処理で統合データを出力することによって、入力データ数を制限数以下にするためのデータ統合用の処理を新たに設けることなく、入力データを参照して分散並列処理を実行することができるようになる。以上、本発明の実施の形態について説明したが、上記実施の形態は本発明の適用例の一つを示したものであり、本発明の技術的範囲を上記実施の形態の具体的構成に限定する趣旨ではない。"