(57)【特許請求の範囲】
【請求項１】
ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードを自動的に生成する機能をコンピュータに実現させる並列化ソースコード自動生成プログラムであって、
前記非並列化ソースコードのｎ重ループそれぞれの初期値式を、前記ｍ個のプロセッサに与えた、各プロセッサを一意に識別する０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いて下式
0003673809.tif 000009
で表される初期値式Ｓｊに書き換え、書き換えた初期値式Ｓｊおよび増分値δｊを用いることにより、前記ｎ重ループ構造部分を、前記ｍ個のプロセッサで分担処理できる構造に変換する機能を前記コンピュータに実現させることを特徴とする多重反復処理超並列化ソースコード自動生成プログラム。
【請求項２】
請求項１記載の多重反復処理超並列化ソースコード自動生成プログラムであって、
前記ｎ重ループそれぞれの増分値δ１、・・・、δｎは、対応するそれぞれのループの反復回数の約数であり、かつそれぞれの積δ１×・・・×δｎをｉｄｉｖと表した際に、当該ｉｄｉｖと前記プロセッサ数ｍとが一致していることを特徴とする多重反復処理超並列化ソースコード自動生成プログラム。
【請求項３】
請求項１記載の多重反復処理超並列化ソースコード自動生成プログラムであって、
前記ｍ個のプロセッサそれぞれに分担される前記ｎ重ループ構造部分の分担反復回数が均等であることを特徴とする多重反復処理超並列化ソースコード自動生成プログラム。
【請求項４】
請求項１記載の多重反復処理超並列化ソースコード自動生成プログラムであって、
前記ｎ重ループそれぞれのループの反復回数の積を走査空間ＰＡＮと表した際に、前記プロセッサ数ｍは、この走査空間ＰＡＮの約数であることを特徴とする多重反復処理超並列化ソースコード自動生成プログラム。
【請求項５】
請求項１記載の多重反復処理超並列化ソースコード自動生成プログラムであって、
前記ｎ重ループそれぞれのループの反復回数の積を走査空間数ＰＡＮと表した際に、前記プロセッサ数ｍが、この走査空間ＰＡＮの約数でない場合に、当該走査空間ＰＡＮを仮想的に拡張し、前記プロセッサ数ｍで割り切れるようにしたことを特徴とする多重反復処理超並列化ソースコード自動生成プログラム。
【請求項６】
ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードを自動的に生成する並列化ソースコード自動生成装置であって、
前記非並列化ソースコードのｎ重ループそれぞれの初期値式を、前記ｍ個のプロセッサに与えた、各プロセッサを一意に識別する０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いて下式
0003673809.tif 000010
で表される初期値式Ｓｊに書き換え、書き換えた初期値式Ｓｊおよび増分値δｊを用いることにより、前記ｎ重ループ構造部分を、前記ｍ個のプロセッサで分担処理できる構造に変換する手段を備えたことを特徴とする多重反復処理超並列化ソースコード自動生成装置。
【請求項７】
ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードが自動的に生成される並列化ソースコード自動生成方法であって、
前記非並列化ソースコードのｎ重ループそれぞれの初期値式が、前記ｍ個のプロセッサに与えられて、各プロセッサが一意に識別される０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊが用いられて下式
0003673809.tif 000011
で表される初期値式Ｓｊに書き換えられて、ｎ重ループ構造部分が、前記ｍ個のプロセッサで分担処理される構造に変換されることを特徴とする多重反復処理超並列化ソースコード自動生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通常の非並列のソースコード（ソースプログラム）から複数のプロセッサ（ＣＰＵ）で並列実行可能な並列化ソースコード（並列化ソースプログラム）を自動的に生成するための多重反復処理超並列化ソースコード自動生成プログラム、自動生成装置および自動生成方法に関する。
【０００２】
【従来の技術】
自然科学分野、工学分野等における数値モデリングやシミュレーション計算等では、膨大な回数の反復計算処理が必要とされている。
【０００３】
このような場合、１個のプロセッサ（ＣＰＵ）を用いて計算処理を実行していたのでは、処理時間が膨大になるため、複数のプロセッサを用いて並列処理を行うことにより、処理実行時間を実用化レベルにまで短縮させている。
【０００４】
複数のプロセッサを用いて並列処理を行うためには、複数のプロセッサが並列実行可能な並列化ソースコードが必要であり、この並列化ソースコードを生成する方法の１つに、通常の非並列なソースコードを複数のプロセッサで並列処理可能な並列化ソースコードに変換する方法が考えられている。
【０００５】
【発明が解決しようとする課題】
しかしながら、従来の並列化ソースコード生成する方法においては、多重にネストされた多重ループ構造を有する非並列化ソースコードを複数のプロセッサが実行可能な並列化ソースコードに自動的に変換するための具体的な方法については開示されておらず、上述した多重ループ構造を有する非並列化ソースコードを並列化ソースコードに自動変換することができる自動変換プログラム、自動変換装置および方法の開発が待望されていた。
【０００６】
本発明は上述した事情に鑑みてなされたものであり、多重にネストされた多重ループ構造を有する非並列化ソースコードを複数のプロセッサで並列実行可能な並列化ソースコードに自動的に変換するための具体的な自動生成プログラム、自動生成装置および自動生成方法を提供することにより、並列化処理の利用促進に寄与することをその第１の目的とする。
【０００７】
また、本発明は、上記第１の目的に加えて、複数のプロセッサをフルに利用して多重ループの反復処理を並列に行うとともに、そのプロセッサそれぞれに分担される多重ループの反復処理回数を均等化して、複数のプロセッサを用いた並列処理の高効率化を図ることをその第２の目的とする。
【０００８】
【課題を解決するための手段】
上述した目的を達成するための本発明の第１の態様によれば、ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードを自動的に生成する機能をコンピュータに実現させる並列化ソースコード自動生成プログラムであって、前記非並列化ソースコードのｎ重ループそれぞれの初期値式を、前記ｍ個のプロセッサに与えた、各プロセッサを一意に識別する０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）、およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いて下式
【数１】
0003673809.tif 000002
で表される初期値式Ｓｊに書き換え、書き換えた初期値式Ｓｊおよび増分値δｊを用いることにより、前記ｎ重ループ構造部分を、前記ｍ個のプロセッサで分担処理できる構造に変換する機能を前記コンピュータに実現させる。
【０００９】
本発明の第１の態様において、前記ｍ個のプロセッサそれぞれに分担される前記ｎ重ループ構造部分の分担反復回数が均等である。
【００１０】
また、上述した目的を達成するための本発明の第２の態様によれば、ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードを自動的に生成する並列化ソースコード自動生成装置であって、前記非並列化ソースコードのｎ重ループそれぞれの初期値式を、前記ｍ個のプロセッサに与えた、各プロセッサを一意に識別する０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）、およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いて下式
【数２】
0003673809.tif 000003
で表される初期値式Ｓｊに書き換え、書き換えた初期値式Ｓｊおよび増分値δｊを用いることにより、前記ｎ重ループ構造部分を、前記ｍ個のプロセッサで分担処理できる構造に変換する手段を備えている。
【００１１】
さらに、上述した目的を達成するための本発明の第３の態様によれば、ｎ（ｎは２以上の整数）重にネストされたループを含む非並列のソースコードから、ｍ（ｍは２以上の整数）個のプロセッサで並列実行可能な並列化ソースコードが自動的に生成される機能をコンピュータに実現させる並列化ソースコード自動生成方法であって、前記非並列化ソースコードのｎ重ループそれぞれの初期値式が、前記ｍ個のプロセッサに与えられて、各プロセッサが一意に識別される０から始まるｍ個の連続した整数ｉａｋ（ｋ＝０、・・・、ｍ−１）、およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いて下式
【数３】
0003673809.tif 000004
で表される初期値式Ｓｊに書き換えられて、ｎ重ループ構造部分が、前記ｍ個のプロセッサで分担処理される構造に変換される。
【００１２】
【発明の実施の形態】
本発明の多重反復処理超並列化ソースコード自動生成プログラム、自動生成装置および自動生成方法に係る実施の形態を添付図面を参照して説明する。
【００１３】
図１に示すように、多重反復処理超並列化ソースコード自動生成装置１は、互いに通信可能に接続されたＣＰＵ２およびメモリ３を備えている。
【００１４】
このＣＰＵ２は、予めメモリ３に記憶された多重反復処理超並列化ソースコード自動生成プログラム（コンパイラを含む）Ｐに従って動作することにより、例えばＣＤ−ＲＯＭやハードディスク、ＤＶＤ−ＲＯＭ等の記憶装置４に記憶されたｎ（ｎは２以上の整数）重にネストされたｎ重ループを含む非並列化ソースコードＳＣを読み出してメモリ３に格納する機能と、メモリ３に格納した非並列化ソースコードＳＣから、ｍ（ｍは２以上の整数）個のプロセッサｉａ０、・・・、ｉａｍ−１が並列実行可能な並列化ソースコードＰＳＣを自動的に生成する機能と、生成された並列化ソースコードＰＳＣをコンパイルして並列化オブジェクトコードＰＯＣを生成して各プロセッサｉａ０、・・・、ｉａｍ−１にロードする機能（ＳＩＭＤ：Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ
Ｄａｔａ方式に基づく並列化機能）とを実現するようになっている。
【００１５】
0003673809.tif 000005
のプロセッサ番号は、０から始まるｍ個の連続した整数に対応付けられており、例えば、本実施形態では、プロセッサｉａ０、・・・、ｉａｍ−１のプロセッサ番号（ｉａ０、・・・、ｉａｍ−１で表す）は、ｍ個の連続した整数０、・・・、ｍ−１に設定されている。
【００１６】
また、本実施形態では、プロセッサ数ｍの一例として、プロセッサ数ｍ＝３０とする。また、ｍ個のプロセッサは、１台のコンピュータに内蔵されていてもよく、あるいは、複数のコンピュータそれぞれに搭載されたものでもよい。
【００１７】
具体的には、例えば、上記ｍ個のプロセッサｉａ０、・・・、ｉａｍ−１を含む並列マシン（コンピュータ）に適用される場合には、多重反復処理超並列化ソースコード自動生成装置１は、並列マシンのコンパイラのプリプロセッサとして機能するようになっており、また、例えば、ネットワークで接続された同一あるいは異なるアーキテクチャの複数のコンピュータ（プロセッサ）に対するコンパイラのプリプロセッサとして機能するようになっている。
【００１８】
図２は、非並列化ソースコードＳＣの一例を概略的に示す図である。
【００１９】
図２に示すように、非並列化ソースコードＳＣは、例えばプログラム言語ＦＯＲＴＲＡＮで記述されたものであり、ｎ（ｎ＝３）重にネストされた非並列化ｎ重ループ（ｄｏループ）構造ＮＰを含んでおり、第１ループ（ループ変数ｉ１）の反復回数（終値式）は“５”、第２ループ（ループ変数ｉ２）の反復回数（終値式）は“４”、第３ループ（ループ変数ｉ３）の反復回数（終値式）は“３”であり、この３重ループで構成される走査空間ＰＡＮを、それぞれのループの反復回数の積で表すとすると、この非並列化３重ループ構造ＮＰの走査空間ＰＡＮは、５×４×３として示されており、上記プロセッサ数ｍ＝３０は、走査空間ＰＡＮ＝５×４×３の約数となるように予め設定されている。
【００２０】
一方、図３は、ＣＰＵ２の多重反復処理超並列化ソースコード自動生成プログラムＰに従った並列化ソースコード自動生成処理を含む全体処理の一例を示す概略フローチャートである。
【００２１】
図３に示すように、ＣＰＵ２は、記憶装置４に記憶された非並列化ソースコードＳＣを読み出してメモリ３に格納し（ステップＳ１）、格納した非並列化ソースコードＳＣを検索してそのコードＳＣ内の非並列化ｎ（＝３）重ループ構造ＮＰを見つけ出す（ステップＳ２）。
【００２２】
次いで、ＣＰＵ２は、見つけ出した非並列化３重ループ構造ＮＰにおける各ループそれぞれの初期値式（図２においては、ｉ１＝１、ｉ２＝１、ｉ３＝１である）を、３０個のプロセッサｉａ０、・・・、ｉａ２９にそれぞれ割り当てられたプロセッサ番号ｉａｋ（ｋ＝０、・・・、２９）、およびループｊ（ｊ＝１、・・・、３）毎に定められた増分値δｊを用いて下式
【数４】
0003673809.tif 000006
で表される初期値式Ｓｊに書き換え、ｎ重ループ構造部分を、前記ｍ個のプロセッサで分担処理できる構造に変換する（ステップＳ３）。
【００２３】
ここで、本明細書における“ｍｏｄ（ｘ，ｙ）”は、剰余を表す関数であり、例えば、ｍｏｄ（７，４）＝３（７÷４の余りが３で３となる）であり、同様に、ｍｏｄ（１０，５）＝０となる。
次に、本明細書における“Ｉｎｔ（ｚ）”は、整数化を表す関数であり、実数ｚを丸めて、とびとびの値をとる整数にすることである。
【００２４】
さらに、本明細書における
【数５】
0003673809.tif 000007
は、“δ１×・・・×δｊ”を表す。なお、δ０＝１である。
【００２５】
この結果、３重ループそれぞれの初期値式Ｓ１、Ｓ２、Ｓ３は、ｍ＝３０個のプロセッサにそれぞれ割り当てられたプロセッサ番号ｉａｋ（ｋ＝０、・・・、２９）および増分値δ１、δ２、δ３を用いて、それぞれ下式のように表される。
【００２６】
【数６】
Ｓ１＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ１）／δ０｝
Ｓ２＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ２×δ１）／δ１｝
Ｓ３＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ３×δ２×δ１）／（δ２×δ１）｝
【００２７】
続いて、ＣＰＵ２は、書き換えた初期値式Ｓ１、Ｓ２、Ｓ３、増分値δ１、δ２、δ３および各ループに対応する反復回数５、４、３を用いることにより、上記３重非並列化ループ構造ＮＰを含む非並列化ソースコードＳＣを、３０個のプロセッサで分担処理できる構造、すなわち、図４に示す並列化３重ループ構造ＰＮＰを含む並列化ソースコードＰＳＣに変換する（ステップＳ４）。
【００２８】
このとき、３重ループ構造における各ループｊ（ｊ＝１、・・・、３）毎の定められた増分値δ１、δ２、δ３、言いかえれば、各ループｊ（ｊ＝１、・・・、３）の分割数δ１、δ２、δ３を、対応するループの反復回数５、４、３の約数となる値で、かつそれぞれの積ｉｄｉｖ＝δ１×δ２×δ３がプロセッサ数ｍ＝３０と等しくなる値、すなわち、δ１＝５、δ２＝２、δ３＝３に設定する。
【００２９】
この結果、３重ループそれぞれの初期値式Ｓ１、Ｓ２、Ｓ３は、ｍ＝３０個のプロセッサにそれぞれ割り当てられたプロセッサ番号ｉａｋ（ｋ＝０、・・・、２９）および増分値δ１＝５、δ２＝２、δ３＝３を用いて、それぞれ下式のように表される。
【００３０】
【数７】
Ｓ１＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ１）／δ０｝
＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，５）｝
Ｓ２＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ２×δ１）／δ１｝
＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，１０）／５｝
Ｓ３＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，δ３×δ２×δ１）／（δ２×δ１）｝
＝１＋Ｉｎｔ｛ｍｏｄ（ｉａｋ，３０）／１０｝
【００３１】
したがって、図４に示す並列化ソースコードＰＳＣにおける並列化３重ループ構造ＰＮＰそれぞれのループ（ｉ１，ｉ２，ｉ３）｛＝（１，１，１）〜（５，４，３）｝は、それぞれ図５に示すプロセッサ番号のプロセッサに分担される。なお、図５のｉａ欄に示された数値は、それぞれのプロセッサに対応づけられた０からはじまる連続した、かつ重複しない整数であり、図５の例では３０プロセッサなので、０〜２９となっている。
ここでは一例としてプロセッサｉａＫを識別するＫの値と、当該プロセッサに対応づけられた数値が等しい場合を示しており、例えば、ループ（ｉ１，ｉ２，ｉ３）＝（１，３，１）の処理は、プロセッサｉａ０（図５中は“０”）に分担され、ループ（ｉ１，ｉ２，ｉ３）＝（５，３，２）の処理は、プロセッサｉａ１４（図５中は“１４”）に分担される。
【００３２】
ここで、本実施形態の３次元走査空間（３重ループ）構造（走査空間→５×４×３）の各ループ処理を、ｍ＝３０個のプロセッサｉａ０、・・・、ｉａｍ−１に割り振る（分担させる）際の概念的な内容について図６を用いて説明する。
【００３３】
すなわち、本実施形態の分担方式では、３次元走査空間（ｉ１，ｉ２，ｉ３）｛＝（１，１，１）〜（５，４，３）｝を、それぞれの次元方向の分割数（δ１，δ２，δ３）＝（５，２，３）に対応するプロセッサブロックで埋め尽くす発想であり、図６に示すように、プロセッサブロック（δ１×δ２×δ３）＝（５×２×３）→プロセッサｉａ０〜ｉａ２９を３次元走査空間（ｉ１，ｉ２，ｉ３）＝（１，１，１）〜（５，２，３）まで順次割り当て、次いで、プロセッサブロック（δ１×δ２×δ３）＝（５×２×３）→プロセッサｉａ０〜ｉａ２９を３次元走査空間（ｉ１，ｉ２，ｉ３）＝（１，３，１）〜（５，４，３）まで順次割り当てることにより、上記３次元走査空間（３重ループ）構造（走査空間→５×４×３）の各ループ処理を、ｍ＝３０個のプロセッサｉａ０、・・・、ｉａｍ−１に対して、全てのプロセッサの分担反復回数が均等（２回）となるように割り当てられる。
【００３４】
このようにして、非並列化３重ループ構造ＮＰを含む非並列化コードＳＣから、並列化３重ループ構造ＰＮＰを含む並列化ソースコードＰＳＣが生成されると、ＣＰＵ２は、その並列化ソースコードＰＳＣをコンパイルして並列化オブジェクトコードＰＯＣに変換し（ステップＳ５）、変換した並列化オブジェクトコードＰＯＣ、並列分担されるプロセッサ数ｍおよび各プロセッサ自体のプロセッサ番号を、その各プロセッサｉａ０、・・・、ｉａ２９にそれぞれロードする（ステップＳ６）。
【００３５】
この結果、各プロセッサｉａ０、・・・、ｉａ２９は、ロードされた並列化オブジェクトコードＰＯＣ、並列分担されるプロセッサ数および自らのプロセッサ番号に基づいて、自らのプロセッサに分担されたループ処理を並列的に実行することができる。
【００３６】
以上述べたように、本実施形態に基づく多重反復処理超並列化ソースコード自動生成プログラムＰに基づく多重反復処理超並列化ソースコード自動生成装置１を用いることにより、ｎ（ｎ＝３）重にネストされたｎ重ループ構造を含む非並列化ソースコードＳＣから、ｍ（ｍ＝３０）個のプロセッサｉａ０、・・・、ｉａ２９で並列処理できる並列化３重ループ構造ＰＮＰを含む並列化ソースコードＰＳＣを自動的かつ容易に生成することができるため、並列処理の利用・導入を促進させることができる。
【００３７】
また、本実施形態によれば、ｎ（ｎ＝３）重にネストされたｎ重ループ構造を含む非並列化ソースコードＳＣから、ｍ（ｍ＝３０）個のプロセッサｉａ０、・・・、ｉａ２９で並列処理できる並列化３重ループ構造ＰＮＰを含む並列化ソースコードＰＳＣを生成する際に、そのプロセッサｉａ０、・・・、ｉａ２９にお
0003673809.tif 000008
間で均等に設定することができるため、例えば、本実施形態で例示したように、多重ループを構成する各ループの反復回数（各ループの反復回数＝５，４，３）がプロセッサ数ｍ（ｍ＝３０）に比べて非常に小さい場合でも、その全てのプロセッサｉａ０、・・・、ｉａ２９に対して計算処理負荷を分散させることが可能になり、並列処理におけるプロセッサ利用効率を向上し、並列化処理速度をさらに向上させることができる。
【００３８】
なお、本実施形態においては、ｍ個のプロセッサｉａ０、・・・、ｉａｍ−１のプロセッサ番号を任意のｍ個の数に設定しておくことも可能であり、その設定されたプロセッサ番号とｍ個の連続した整数ｉａ０、・・・、ｉａｍ−１（０、・・・、ｍ−１：順不同）との対応関係を設定しておけば、上記（１）式を用いることができる。
【００３９】
また、本実施形態においては、非並列化ソースコードにおけるｎ重ループ構造の一例として、３重ループ構造を並列化する場合について説明したが、本発明はこれに限定されるものではなく、全ての多重ループ構造を並列化する場合に適用可能である。
【００４０】
さらに、プロセッサ数や各ループの反復回数も、単なる一例であり、様々なプロセッサ数および反復回数を用いることが可能である。
【００４１】
さらにまた、本実施形態においては、並列化対象としての非並列化ソースコードの記述言語を、プログラム言語ＦＯＲＴＲＡＮとし、その多重ループ構造をｄｏループ構造としたが、本発明はこれに限定されるものではなく、他のプログラム言語で記述された他のループ構造（例えば、ｉｆ文と“ｇｏ  ｔｏ”文によるループ構造や、ｆｏｒ文を用いたループ構造等）に対しても、適用可能である。
【００４２】
そして、本実施形態では、プロセッサ数ｍ＝３０を、ｎ重ループの走査空間ＰＡＮ、すなわち、ｎ重ループそれぞれのループ反復回数の積（５×４×３）の約数に設定することを、並列化ソースコード生成の条件としたが、本発明はこれに限定されるものではなく、例えば、プロセッサ数ｍ＝３０が、ｎ重ループの走査空間ＰＡＮの約数でない場合には、走査空間ＰＡＮを仮想的に拡張し、上記プロセッサ数ｍ＝３０で割り切れる値に設定すればよく、本実施形態の多重反復処理超並列化ソースコード自動生成手法を利用することが可能になる。
【００４３】
また、本実施形態では、多重反復処理超並列化ソースコード自動生成装置において、生成された並列化ソースコードをコンパイルしてオブジェクトコードを生成する処理も行うように説明したが、本発明はこれに限定されるものではなく、コンパイル処理は、他の装置や各プロセッサが行うように構成してもよい。
【００４４】
【発明の効果】
以上述べたように本発明に係る多重反復処理超並列化ソースコード自動生成プログラム、自動生成装置および自動生成方法によれば、ｎ重にネストされたループを含む非並列化ソースコードの初期値式を、ｍ個のプロセッサにそれぞれ割り当てられたプロセッサ番号ｉａｋ（ｋ＝０、・・・、ｍ−１）、およびループｊ（ｊ＝１、・・・、ｎ）毎に定められた増分値δｊを用いた初期値式Ｓｊに書き換えることにより、非並列化ソースコードのｎ重ループ構造部分を、ｍ個のプロセッサで分担処理できる構造に変換することができるため、非並列化ソースコードの並列化ソースコードへの変換を非常に容易に行うことができ、並列処理の利用・導入を促進させることができる。
【００４５】
また、本発明に係る多重反復処理超並列化ソースコード自動生成プログラム、自動生成装置および自動生成方法によれば、ｎ重にネストされたｎ重ループを含む非並列化ソースコードから、ｍ個のプロセッサで並列処理できる並列化ソースコードを生成する際に、そのプロセッサにおいて分担されるループ処理の回数を、全てのプロセッサ間で均等に設定することができるため、全てのプロセッサを利用して計算処理負荷を分散させることができる。この結果、並列処理におけるプロセッサ利用効率を向上し、並列化処理速度をさらに向上させることができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る多重反復処理超並列化ソースコード自動生成装置の概略構成を示すブロック図。
【図２】非並列化ソースコードの一例を概略的に示す図。
【図３】図１に示すＣＰＵの多重反復処理超並列化ソースコード自動生成プログラムに従った並列化ソースコード自動生成処理を含む全体処理の一例を示す概略フローチャート。
【図４】本実施形態におけるＣＰＵの並列化ソースコード自動生成処理により生成された並列化ソースコードの一例を概略的に示す図。
【図５】並列化３重ループ構造それぞれのループ（ｉ１，ｉ２，ｉ３）｛＝（１，１，１）〜（５，４，３）｝が分担されるプロセッサを示す図。
【図６】本実施形態の３次元走査空間（３重ループ）構造（走査空間→５×４×３）の各ループ処理を、ｍ＝３０個のプロセッサｉａ０、・・・、ｉａｍ−１に割り振る（分担させる）際の概念的な内容を説明するための図。
【符号の説明】
１  多重反復処理超並列化ソースコード自動生成装置（コンパイラを含む）
２  ＣＰＵ
３  メモリ
４  記憶装置
ｉａ０、・・・、ｉａｍ−１  プロセッサ
Ｐ  多重反復処理超並列化ソースコード自動生成プログラム（オブジェクトコードを生成するコンパイラを含む）
ＳＣ  非並列化ソースコード
ＰＯＣ  並列化オブジェクトコード
ＮＰ  非並列化ソースコードの非並列化ｎ重ループ構造
ＰＳＣ  並列化ソースコード
ＰＮＰ  並列化ソースコードの並列化ｎ重ループ構造
【図１】
0003673809.tif 000012
【図２】
0003673809.tif 000013
【図３】
0003673809.tif 000014
【図４】
0003673809.tif 000015
【図５】
0003673809.tif 000016
【図６】
0003673809.tif 000017