計算機によるNUMAアーキテクチャ向け並列化プログラムの生成方法であって、前記計算機は、ソースコードを格納する記憶装置と、オプション解析部と、初期化処理追加部と、解析部とを備え、前記オプション解析部は、前記記憶装置からソースコードが入力される際に、ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、前記配列名と配列の次元を配列テーブルに格納し、前記初期化処理追加部は、前記ソースコード内に前記配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、前記解析部は、前記ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化するNUMAアーキテクチャ向け並列化プログラムの生成方法。NUMAアーキテクチャを採用した共有メモリ型マルチプロセッサ計算機システムでは、ローカルメモリへのアクセスとリモートメモリへのアクセスではアクセス時間が異なる。ローカルメモリアクセスとリモートメモリアクセスの一例を図1で説明する。ローカルメモリアクセス101とは、同じCPUカード102内にある演算器1103からメモリスイッチ104、メモリコントローラ105を通し主記憶装置1106へアクセスすることであり。リモートメモリアクセス107とは、演算器2107がメモリスイッチ108からチップ間バス109を通して違うCPUカード102内の主記憶装置1106へアクセスすることである。並列化プログラムを生成するコンパイラは、ソースコード内にあるループの依存関係のみを判定して並列化するため、ループで使用する配列データのメモリ配置まで意識していない。これによりリモートメモリへのデータアクセスが発生し、性能低下を招くことがある。例えば、図2に示す並列化プログラムの最初の2重ループ201では、内側202で並列化される。よって、配列aにおける1次元目の1から100までは演算器1103で計算される。この際、ファーストタッチルールにより、配列aにおける1次元目の1から100までは主記憶装置1106にアロケートされる。ファーストタッチルールとは、データを初めにアクセスする演算器と同じCPUカード内の主記憶装置にメモリ配置することである。配列aにおける1次元目の101から200までは演算器2107で計算される。この際、ファーストタッチルールにより、配列aにおける1次元目の101から200までは主記憶装置2110にアロケートされる。図3に最初の2重ループ201の配列aにおける演算器と主記憶装置への配置の関係を示す。2つ目の2重ループ203では、外側204で並列化される。よって、配列aにおける2次元目の1から100までは演算器1103で参照される。配列aにおける2次元目の101から200までは演算器2107で参照される。図4に2つ目の2重ループ203の配列aにおける演算器と主記憶装置への配置の関係を示す。図4では401と402はローカルアクセスとなり、403と404についてはリモートアクセスが発生していることが判る。現在、ローカルメモリへのデータアクセスを意識した並列化プログラムを生成するには、ソースコードに指示行等をプログラマが書き加える必要がある。本発明は、計算機によるNUMAアーキテクチャ向け並列化プログラムの生成方法であって、前記計算機は、ソースコードを格納する記憶装置と、オプション解析部と、初期化処理追加部と、解析部とを備え、前記オプション解析部は、前記記憶装置からソースコードが入力される際に、ローカルメモリにアクセスさせたい配列名と並列化させたい配列の次元がコンパイルオプションとして指定されていた場合に、前記配列名と配列の次元を配列テーブルに格納し、前記初期化処理追加部は、前記ソースコード内に前記配列テーブルに格納されている指定した配列をアロケートする処理がある場合に、アロケート処理の直後に指定した配列の初期化ループを追加し、前記解析部は、前記ソースコード内にあるループに指定した配列がある場合に、指定した次元に使用されている変数と同じ変数をループ制御変数として使用しているループを並列化する。本発明により生成された並列化プログラムを用いると、演算器からのメモリアクセスがローカルメモリアクセスとなり性能が向上する。また、コンパイラが自動で最適な並列化プログラムを生成するためプログラマによるソースコードの書き換えが不要となる。以下、実施例を図面を用いて説明する。図5は、本発明の実施例によるコンパイルを実行する計算機システムの構成図を示す。この計算機システムは、ディスプレイ装置501、キーボード502、演算器503、主記憶装置504、外部記憶装置505から構成される。並列化プログラム506を生成する際は、キーボード502から並列化プログラム生成のためのコマンドとコンパイルオプションを入力する。コンパイルオプションの指定方法は、図7で説明する。並列化プログラムの生成状況及びエラーメッセージや終了メッセージはディスプレイ装置501に表示される。外部記憶装置505には、ソースコード507と最終的に生成される並列化プログラム506が格納される。主記憶装置504には、オプション解析部508、初期化処理追加部509、解析部510、配列テーブル511が格納される。演算器503は、並列化プログラムの生成処理を制御する。図5のソースコードから並列化プログラムを生成する際の処理内容を図6に示す。ソースコード601とコンパイルオプション602をコンパイラ603に入力することで並列化プログラムを生成する。コンパイラ603は、オプション解析部604でプログラマが入力したコンパイルオプション602の解析する。図7で説明するコンパイルオプションが入力されている場合、配列テーブル605にコンパイルオプションで指定した配列名と次元を登録する。配列テーブル605の詳細について図8で説明する。初期化処理追加部606では、コンパイルオプションで指定した配列の初期化処理を追加する。解析部607は並列化について解析する。初期化処理追加部606の詳細については図9で、解析部607の詳細については図10で説明する。コンパイラ603は解析部607の結果を元に並列化プログラム608を生成する。図7に、図6のコンパイルオプション602の指定方法を示す。プログラマが入力するコンパイルオプションの指定方法を示す。本実施例で並列化プログラムを生成する際は、並列化方針のオプション701を入力し、その後に配列名702と次元703を指定する。配列名702はローカルメモリアクセスさせる配列名である。配列名と次元は704で示すように、複数指定することを可能とする。複数の配列を指定した場合は先に指定した配列名を優先して並列化する。図8に、図6の配列テーブル605の一例を示す。配列テーブルには、コンパイルオプションで先に指定した順に番号801を付け、802に配列名、803の配列の次元を登録する。図9に、図6の初期化処理追加部606のフロー図を示す。まず901の処理で開始する。902の処理では、配列テーブルにコンパイルオプションに指定した配列名が登録されているか解析する。配列名が登録されている場合は903の処理で、配列名を読み込む。903の処理で読み込む配列名は、コンパイルオプションで先に指定した順に読み込む。904の処理は読み込んだ配列がソースコード内でアロケート処理がある場合は、905の処理で、配列のアロケート処理の直後に配列の初期化ループを追加する。905の処理が終了したら902の処理に戻る。904の処理で、読み込んだ配列のアロケート処理が無い場合は902の処理に戻る。配列テーブルに登録されている全ての配列について解析するまで、902の処理から905の処理を繰り返す。図10に、図6の解析部607のフロー図を示す。まず1001で処理を開始する。1002の処理はソースコードにループがあるか解析する。ループがある場合は1003の処理に移動する。1003の処理は配列テーブルからコンパイルオプションに指定した配列名と次元を読み込む。1003の処理で読み込む配列名と次元は、コンパイルオプションで先に指定した順に配列名と次元を読み込む。1004の処理は読み込んだ配列名がループにあるか解析する。読み込んだ配列名がある場合は1005の処理に移動する。1005の処理で配列の次元に使用している変数がループ制御変数に使用している場合、106の処理でループを並列化する。ループの並列化については、図11及び図12で説明する。1006の処理が終了したら1002の処理に戻る。1004の処理で読み込んだ配列名がループ内に無い場合は、1007の処理に移動する。1007の処理は配列テーブルに読み込んだ配列以外に配列名が登録されているか解析する。他の配列が登録されている場合は、1008の処理で配列テーブルから他の配列名と次元を読み込む。1008の処理が終了したら1004の処理に戻る。1007の処理で他の配列名が、配列テーブルに登録されていない場合は1002の処理に戻る。1005の処理で配列の次元に使用している変数がループ制御変数に使用していない場合、1007の処理に移動する。ソースコード内の全てのループを解析するまで、1002から1006の処理を繰り返す。1002の処理でソースコード内にループが無い場合は、1009で解析部を終了する。本実施例によりコンパイルした並列化プログラムの一例を図1及び図11、図12を使用して説明する。まず、本実施例に示す、コンパイルオプションで、配列aと配列の次元に2を指定する。指定したコンパイルオプションに従い、コンパイラは配列aの初期化ループとして2重ループ1101を追加する。2重ループ1101の配列aの2次元目では、変数jが使用されている。変数jは外側1102の制御変数となるので、2重ループ1101は外側1102で並列化される。よって、配列aにおける2次元目の1から100までは、演算器1103で計算される。この際、ファーストタッチルールにより、配列aにおける2次元目の1から100までは、主記憶装置1106にアロケートされる。配列aにおける2次元目の101から200までは演算器2107で計算される。この際、ファーストタッチルールにより配列aにおける2次元目の101から200までは、主記憶装置2110にアロケートされる。図12に追加した2重ループ1101の配列aにおける演算器と主記憶装置への配置の関係を示す。2つ目の2重ループ1103では、コンパイルオプションの指定により外側ループ1104で並列化される。よって、配列aにおける2次元目の1から100までが演算器1103で計算される。配列aにおける101から200までが演算器2107で計算される。3つ目の2重ループ1104においても、コンパイルオプションの指定により外側ループ1106が並列化される。よって、配列aにおける2次元目の1から100までが演算器1103で参照され、配列aにおける101から200までが演算器2107で参照される。したがって、2つ目の2重ループ1103及び3つ目の2重ループ1105の配列aにおける演算器と主記憶装置への配置の関係についても図12と同じになり、配列aにおいてはリモートメモリアクセスが発生しなくなる。