(57)【特許請求の範囲】
【請求項１】
それぞれ独立に動作し、割り当てられた実行プロセスを並列実行する複数のノードプロセッサと、
与えられたプログラム中の記述にしたがって生成した前記実行プロセスを前記ノードプロセッサの各々へ割り当てるホストプロセッサとを備えた並列計算機システムにおいて、
前記ホストプロセッサは、前記プログラム中に記述された繰り返し実行すべき所定の処理手順を含む原始ループについて、
前記ノードプロセッサ数によって余ることなく割り切れる前記原始ループのループ長に満たない整数値のうち、前記ノードプロセッサごとに割り当てられた実行プロセスをループ展開する際のループ展開数によっても余ることなく割り切れる最大の整数値を被除数とし、前記ノードプロセッサ数を除数とする除算を行って分割ループ長を求め、
前記分割ループ長を有する前記ノードプロセッサ数と同数の分割ループを前記原始ループから生成し、これら分割ループの実行プロセスをそれぞれ前記ノードプロセッサへ割り当てるとともに、前記原始ループの残余の実行プロセスを前記ホストプロセッサ自身へ割り当てることを特徴とする並列計算機システム。
【請求項２】
それぞれ独立に動作し、割り当てられた実行プロセスを並列実行する複数のノードプロセッサと、
与えられたプログラム中の記述にしたがって生成した前記実行プロセスを前記ノードプロセッサの各々へ割り当てるホストプロセッサとを備えた並列計算機システムにおけるプロセッサへの実行プロセスの割り当て方法において、
前記ホストプロセッサは、前記プログラム中に記述された繰り返し実行すべき所定の処理手順を含む原始ループについて、
前記ノードプロセッサ数によって余ることなく割り切れる前記原始ループのループ長に満たない整数値のうち、前記ノードプロセッサごとに割り当てられた実行プロセスをループ展開する際のループ展開数によっても余ることなく割り切れる最大の整数値を被除数とし、前記ノードプロセッサ数を除数とする除算を行って分割ループ長を求め、
前記分割ループ長を有する前記ノードプロセッサ数と同数の分割ループを前記原始ループから生成し、これら分割ループの実行プロセスをそれぞれ前記ノードプロセッサへ割り当てるとともに、前記原始ループの残余の実行プロセスを前記ホストプロセッサ自身へ割り当てることを特徴とする実行プロセスの割り当て方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は複数のノードプロセッサを有する並列計算機システム及び実行プロセスの割り当て方法に係り、特に、ループを各ノードプロセッサ対応にループ分割して並列実行させる並列計算機システム及び並列計算機システムを構成する各プロセッサへの実行プロセスの割り当て方法に関する。
【０００２】
【従来の技術】
従来より、複数のプロセッサを有する並列計算機システムは、プログラム中のループを各プロセッサ対応にループ分割して並列実行させることにより、全体的な計算処理の高速化が図られている。例えば、“Ｈａｎｓ  Ｚｉｍａ／Ｂａｒｂａｒａ  Ｃｈａｐｍａｎ  共著  村岡洋一訳  「スーパーコンパイラ」  ｐ３０３”には、プログラム中に記述された当初のループ（以下、原始ループと記述する）を各プロセッサ対応にループ分割する手法が紹介されている。この手法は、原始ループのループ長をＮ（整数値）、ノードプロセッサ数をＮｐ（整数値）としたとき、原始ループ長Ｎをノードプロセッサ数Ｎｐで除算した商を切り上げて整数としたループ長Ｂを求め、このループ長Ｂを有する分割ループを第１〜第（Ｎｐ−１）のノードプロセッサにそれぞれ割り当てるとともに、残りのループすなわち〔Ｎ−Ｂ＊（Ｎｐ−１）〕のループ長を有する分割ループを第Ｎｐのノードプロセッサに割り当てるというものである。
【０００３】
例えば、原始ループの原始ループ長Ｎ＝１８、ノードプロセッサ数Ｎｐ＝４の場合、上述したループ長Ｂ＝５となる。したがって、この原始ループは、ループ長５を有する３個の分割ループと、ループ長３を有する残りの１個の分割ループとにループ分割されることになる。
【０００４】
【発明が解決しようとする課題】
上述した従来の手法では、Ｎｐ個のノードプロセッサのうちの（Ｎｐ−１）個に割り当てられる分割ループのループ長は必ず同一の値となる。これに対して、Ｎｐ個のノードプロセッサのうちの残りの１個に割り当てられる分割ループのループ長は、原始ループ長Ｎの値がノードプロセッサ数Ｎｐの整数倍の値でなければ、他の分割ループのループ長に満たない値となる。そして、このように１つの分割ループのループ長が他の分割ループのループ長に満たない場合、前者の分割ループの実行プロセスが後者の分割ループの実行プロセスより先に終了し、前者の分割ループが割り当てられたノードプロセッサがアイドル状態になるため、並列計算機システムの全体的な処理性能の劣化を招くという問題点があった。
【０００５】
また、各々のノードプロセッサごとに、割り当てられた分割ループをさらにループ展開する際にも、他にくらべてループ長の短い端数ループを生成しなければならない場合があり、この端数ループによっても並列計算機システムの全体的な処理性能の劣化を招くという問題点があった。
【０００６】
したがって本発明の目的は、上記の問題点を解決して、プログラム中に記述された原始ループをループ分割及びループ展開する際、各ノードプロセッサで並列実行される各ループのループ長を同一の値に揃え、上述した端数ループの生成を抑止できる並列計算機システム及び並列計算機システムを構成する各プロセッサへの実行プロセスの割り当て方法を提供することにある。
【０００７】
【課題を解決するための手段】
上記の目的を達成するため、本発明の請求項１、２に係る並列計算機システム及び実行プロセスの割り当て方法は、それぞれ独立に動作し、割り当てられた実行プロセスを並列実行する複数のノードプロセッサと、与えられたプログラム中の記述にしたがって生成した前記実行プロセスを前記ノードプロセッサの各々へ割り当てるホストプロセッサとを備えた並列計算機システム及び実行プロセスの割り当て方法において、前記ホストプロセッサは、前記プログラム中に記述された繰り返し実行すべき所定の処理手順を含む原始ループについて、前記ノードプロセッサ数によって余ることなく割り切れる前記原始ループのループ長に満たない整数値のうち、前記ノードプロセッサごとに割り当てられた実行プロセスをループ展開する際のループ展開数によっても余ることなく割り切れる最大の整数値を被除数とし、前記ノードプロセッサ数を除数とする除算を行って分割ループ長を求め、前記分割ループ長を有する前記ノードプロセッサ数と同数の分割ループを前記原始ループから生成し、これら分割ループの実行プロセスをそれぞれ前記ノードプロセッサへ割り当てるとともに、前記原始ループの残余の実行プロセスを前記ホストプロセッサ自身へ割り当てるものである。
【０００８】
前述の請求項１、２の発明によれば、複数のノードプロセッサで並列実行される分割ループのループ長が同一の値に揃えられるので、各々のノードプロセッサに割り当てられた分割ループの実行プロセスは、いずれも同時に終了する。また、上記分割ループ長にくらべると、ホストプロセッサ自身に割り当てられる残余の実行プロセスのループ長は常に短くなるので、この実行プロセスは、同時に開始した各ノードプロセッサにおける実行プロセスより必ず早く終了する。
【００１０】
また、前記の請求項１、２の発明によれば、割り当てられた分割ループの実行プロセスをそれぞれのノードプロセッサごとにループ展開する際、端数ループの生成が抑止される。
【００１１】
【発明の実施の形態】
以下、本発明の並列計算機システムの実施の形態を図面を用いて詳細に説明する。
【００１２】
本実施形態の並列計算機システムには、複数のノードプロセッサ（図示なし）と１つのホストプロセッサ（図示なし）とが備えられている。複数のノードプロセッサはそれぞれ独立に動作し、割り当てられた実行プロセスを並列実行する。ホストプロセッサは、与えられたプログラム中の記述にしたがって実行プロセスを生成し、この実行プロセスをノードプロセッサの各々へ割り当てる。こうした構成の並列計算機システムの処理性能は、上述したノードプロセッサのすべてが何らかの実行プロセスを同時に実行中であり、アイドル状態のノードプロセッサが存在しないとき、最大限に発揮される。したがって、与えられたプログラム中に記述された各種の処理手順のうち、行列演算や微積分のようにほぼ同一の処理手順を繰り返し実行するループすなわち原始ループについて、ループ長が同一の値に揃えられたノードプロセッサ数と同数の分割ループを生成し、これらの分割ループの実行プロセスをそれぞれノードプロセッサへ割り当てるようにすれば、すべてのノードプロセッサに割り当てられた実行プロセスが同時に終了し、いずれかのノードプロセッサがアイドル状態になることが抑止されるので、並列計算機システムの処理性能を最大限に発揮させることができる。
【００１３】
本実施形態の並列計算機システムは、上述した考え方に立脚し、  Ｆｏｒｔｒａｎ言語などの高級言語で記述された原始プログラムを計算機の機種に固有のマシン命令コードからなる目的プログラムにコンパイルする際に、原始プログラム中に記述された繰り返し実行すべき所定の処理手順を含む原始ループについて、ループ長が同一の値に揃えられたノードプロセッサ数と同数の分割ループとなるよう自動的にループ分割するコンパイル処理を行うものである。
【００１４】
図１は、本発明の並列計算機システムによる原始プログラムのコンパイル処理の概念を示す図である。同図中、１０１は計算機の機種に依存しない言語である例えば  Ｆｏｒｔｒａｎ言語により記述された原始プログラム、１０２は原始プログラム１０１の記述内容に基づいて計算機の機種に固有のマシン命令コードを生成する本発明の主要部分であるコンパイラ、１０９はコンパイラ１０２により生成されたマシン命令コードからなる目的プログラムである。コンパイラ１０２は、入力される原始プログラム１０１に相当する中間言語を生成する中間言語生成部１０３，生成された中間言語を計算機の構成に応じて並列化する中間言語並列化部１０４，並列化された中間言語を最適化する最適化部１０７，最適化された中間言語にしたがってマシン命令コードを生成するコード生成部１０８の各処理部からなる。中間言語並列化部１０４は、中間言語生成部１０３により生成された中間言語中から原始ループを検出してその並列化すなわち後述する分割ループの生成を行うループ変換部１０５と、原始ループの解析を行って並列化が可能か否かを判定するループ解析部１０６とからなる。
【００１５】
すなわち、上記コンパイラ１０２によるコンパイル処理では、入力された原始プログラム１０１に相当する目的プログラム１０９を生成する。中間言語生成部１０３は、原始プログラム１０１を中間言語に変換する。中間言語並列化部１０４は、中間言語生成部１０３が生成した中間言語を入力する。中間言語並列化部１０４のループ変換部１０５は、入力した中間言語から原始ループを検出し、検出した原始ループの並列化が可能であるかどうかをループ解析部１０６に問い合わせる。ループ解析部１０６による解析の結果、原始ループの並列化が可能であると判定された場合、ループ変換部１０６は、この原始ループの並列化を行う。並列化によって得られた中間言語は最適化部１０７により最適化された後、コード生成部１０８によってマシン命令コードに変換される。
【００１６】
続いて、図１中の中間言語並列化部１０４による処理内容について、図１〜図３を用いて説明する。図２は本発明の並列計算機システムによるループ分割の対象となる原始ループを記述した原始プログラムの一例を示す図、図３は図１に示したコンパイル処理で図２中の原始プログラムをループ分割することにより得られるプログラム構造の一例を示す図である。図２の原始プログラムは、Ｉをループ変数，Ｎを原始ループ長とする原始ループを表し、
Ｘ＝Ｘ＋Ａ（Ｉ）＋Ｂ（Ｉ）    ………（２０１）
は、あらかじめテーブル変数Ａ（Ｉ）及びＢ（Ｉ）に格納されている数値を変数Ｘにすべて合算する処理を表す。また、図３は  Ｆｏｒｔｒａｎ言語によって疑似的にプログラム構造を表したものであり、実際のプログラム構造は中間言語からなる。図３中、Ｎｕは原始ループの１回の繰り返しでの処理量によって決められるループ展開数、Ｎｐは並列計算機に応じて決められるノードプロセッサ数、Ｂはループ展開数Ｎｕ及びノードプロセッサ数Ｎｐに基づいて求められる分割ループ長、“ＰＥ＿ｎｏ”（０以上の整数値）は各々のノードプロセッサに固有のノードプロセッサ番号、Ｌｎ及びＵｎは各々のノードプロセッサで実行される分割ループの実行プロセスごとに分割ループ長Ｂ及びノードプロセッサ番号“ＰＥ＿ｎｏ”に基づいて求められるループ変数Ｉの下限値及び上限値、Ｌｈ及びＵｈは分割ループ長Ｂ，ノードプロセッサ数Ｎｐ，原始ループ長Ｎに基づいて求められる残余の実行プロセスのループ変数Ｉの下限値及び上限値である。
【００１７】
前述のように、ループ変換部１０５は、入力した中間言語から原始ループを検出し、検出した原始ループの並列化が可能であるかどうかをループ解析部１０６に問い合わせる。そして、ループ解析部１０６は、問合せのあった原始ループを公知の解析方法にしたがって解析し、この原始ループの並列化が可能か否かを判定する。この結果、ループ解析部１０６により、原始ループの並列化が可能であると判定された場合、ループ変換部１０５は、この原始ループの原始ループ長Ｎと、この原始ループを含むプログラムを実行させる予定の並列計算機ごとに固有のノードプロセッサ数Ｎｐ及び原始ループの１回の繰り返しでの処理量によって決められるループ展開数Ｎｕに基づいて、この原始ループのループ分割を行う。ここで、図３中に示すように、
Ｂ  ＝（Ｎ／Ｎｕ）／Ｎｐ      ………（３０１）
Ｌｎ＝Ｂ＊（ＰＥ＿ｎｏ）＋１      ………（３０２）
Ｕｎ＝Ｌｎ＋Ｂ−１            ………（３０３）
Ｌｈ＝Ｂ＊Ｎｐ＋１            ………（３０４）
Ｕｈ＝Ｎ                      ………（３０５）
であり、このループ分割の結果、それぞれ上述した分割ループ長Ｂを有するノードプロセッサ数Ｎｐと同数の分割ループと、分割ループ長Ｂ及びノードプロセッサ数Ｎｐの積と原始ループ長Ｎとの差に等しいループ長が指定された残余のループとが生成される。
【００１８】
なお、分割ループ長Ｂの値は、整数値であって、かつ、残余のループのループ長より大きくなければならない。そこで、ループ分割で得られた分割ループを各々のノードプロセッサでループ展開しない場合、すなわち、ループ展開数Ｎｕ＝１とする場合、分割ループ長Ｂの値は、ノードプロセッサ数Ｎｐによって余ることなく割り切れる原始ループ長Ｎに満たない最大の整数値を被除数とし、ノードプロセッサ数Ｎｐを除数とする除算を行って算出する。これに対し、ループ分割で得られた分割ループを各々のノードプロセッサでループ展開する場合、すなわち、ループ展開数Ｎｕ＝２，３，……とする場合、分割ループ長Ｂの値は、ノードプロセッサ数Ｎｐによって余ることなく割り切れる原始ループ長Ｎに満たない整数値のうち、割り当てられた実行プロセスをノードプロセッサごとにループ展開する際のループ展開数Ｎｕによって余ることなく割り切れる最大の整数値を被除数とし、ノードプロセッサ数Ｎｐを除数とする除算を行って算出する。また、本実施形態は、分割ループと残余のループをいずれも実行時に決めるようにしたが、これらをコンパイル時に決めるようにしても、概ね同様に原始ループのループ分割を行うことができる。
【００１９】
図４は、本発明の並列計算機システムにより図２中の原始プログラムのループ分割のみを行ったときの効果を概念的に示す模式図である。ここで、図４（ａ）は、従来の並列計算機システムによって原始ループ長Ｎ＝５２の原始ループをノードプロセッサ数Ｎｐ＝５個のノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４で並列実行させるためにループ分割したとき生成される分割ループを表し、図４（ｂ）は、本発明の並列計算機システムによって上記原始ループを上記ノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４及びホストプロセッサＨＯＳＴで並列実行させるためにループ分割したとき生成される分割ループ及び残余のループを表す。なお、図４（ｂ）の例ではループ分割のみを行い、ループ分割で得られた各々の分割ループのループ展開は行わないので、図３中のプログラム構造におけるループ展開数Ｎｕ＝１とした場合に相当する。
【００２０】
すなわち図４（ａ）において、従来の並列計算機システムのホストプロセッサＨＯＳＴは、上述した原始ループを、標準的なループ長Ｌα＝１１を有する分割ループ４つと、例外的なループ長Ｌβ＝８を有する分割ループ１つとにループ分割した後、これら５つの分割ループの実行プロセスを、ノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４にそれぞれ割り当て、並列実行させる。このように実行プロセスを割り当てると、例外的なループ長Ｌβ＝８を有する分割ループ１つが割り当てられたノードプロセッサＰＥ４の実行プロセスは他のノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３にくらべて早く終了するため、他のノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３の実行プロセスを終了するまでの間、ノードプロセッサＰＥ４は必然的にアイドル状態になってしまう。
【００２１】
一方、図４（ｂ）において、本発明の並列計算機システムのホストプロセッサＨＯＳＴは、上述した原始ループを、分割ループ長Ｂ＝１０を有する分割ループ５つと、分割ループ長Ｂより短いループ長Ｍ＝２を有する残余のループ１つとにループ分割した後、分割ループ５つの実行プロセスをノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４に、残余のループの実行プロセスをホストプロセッサＨＯＳＴ自身に、それぞれ割り当て、並列実行させる。このように実行プロセスを割り当てると、すべてのノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４の実行プロセスは同時に終了するため、いずれかのノードプロセッサもアイドル状態になることはない。さらに、ホストプロセッサＨＯＳＴに割り当てられる残余のループのループ長Ｍは、同時に実行される分割ループのループ長Ｂにくらべて短いため、ホストプロセッサＨＯＳＴの実行プロセスはノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４の実行プロセスより早く終了する。
【００２２】
図５は、本発明の並列計算機システムにより図２中の原始プログラムのループ分割及びループ展開を行ったときの効果を概念的に示す模式図である。ここで、図５（ａ）は、図４（ａ）の場合と同様に従来の並列計算機システムで原始ループをループ分割したとき求められる分割ループを表し、図５（ｂ）は、本発明の並列計算機システムによって上記ノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４及びホストプロセッサＨＯＳＴで並列実行させるため上記原始ループのループ分割及びループ展開を行ったとき求められる分割ループ及び残余のループを表す。ここで、図５（ａ）及び図５（ｂ）の例は、図３中のプログラム構造におけるループ展開数Ｎｕ＝３とした場合について説明するための図であり、図５中に記述したＬ０１，Ｌ０２，Ｌ０３，Ｌ１１，Ｌ１２，Ｌ１３，Ｌ２１，Ｌ２２，Ｌ２３，Ｌ３１，Ｌ３２，Ｌ３３，Ｌ４１，Ｌ４２は原始ループをループ展開数Ｎｕ＝３に対応するループ長に展開して得られたループである展開ループの１回の繰り返しを、Ｌ０ｘ，Ｌ１ｘ，Ｌ２ｘ，Ｌ３ｘ，Ｌ４ｘは原始ループをループ展開数Ｎｕ＝３に満たないループ長に展開して得られたループである端数ループを、それぞれ表す。
【００２３】
すなわち図５（ａ）において、上述したように、従来の並列計算機システムのホストプロセッサＨＯＳＴは、原始ループ長Ｎ＝５２の原始ループを、標準的なループ長Ｌα＝１１を有する分割ループ４つと、例外的なループ長Ｌβ＝８を有する分割ループ１つとにループ分割した後、これら５つの分割ループの実行プロセスを、ノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４にそれぞれ割り当て、並列実行させる。そして、各ノードプロセッサは、割り当てられた実行プロセスを、さらにループ展開数Ｎｕ＝３に対応するループ長を有するループにループ展開して実行する。このように実行プロセスを割り当て、さらにループ展開して実行すると、標準的なループ長Ｌα＝１１を有する分割ループ４つの各々は、ループ長３を有する展開ループ１つと、ループ長２を有する端数ループ１つとになる。例えばノードプロセッサＰＥ０に割り当てられた標準的な分割ループの実行プロセスの場合、ループ展開によってループ長３を有する展開ループＬ０１，Ｌ０２，Ｌ０３及びループ長２を有する端数ループＬ０ｘが生成され、それぞれ並列実行される。また、ノードプロセッサＰＥ４に割り当てられた例外的な分割ループの実行プロセスの場合、ループ展開によってループ長３を有する展開ループＬ４１及びＬ４２とループ長２を有する端数ループＬ４ｘとが生成され、それぞれ並列実行される。このように分割ループからループ長の短い端数ループが生成されると、各ノードプロセッサは、ある時点まで展開ループとともに端数ループの実行プロセスを処理しなければならず、処理性能の劣化を招いてしまう。
【００２４】
一方、図５（ｂ）において、本発明の並列計算機システムのホストプロセッサＨＯＳＴは、上述した原始ループを、分割ループ長Ｂ＝９を有する分割ループ５つと、分割ループ長Ｂより短いループ長Ｍ＝２を有する残余のループ１つとにループ分割した後、分割ループ５つの実行プロセスをノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４に、残余のループの実行プロセスをホストプロセッサＨＯＳＴ自身に、それぞれ割り当て、並列実行させる。そして、各ノードプロセッサは、割り当てられた分割ループをさらにループ展開数Ｎｕ＝３に対応するループ長を有するループにループ展開して実行する。このように実行プロセスを割り当て、さらにループ展開して実行すると、分割ループ長Ｂ＝９を有する分割ループの各々は、３回の繰り返しを持つ展開ループ１つのみに展開される。例えば、ノードプロセッサＰＥ０に割り当てられた分割ループの実行プロセスの場合、ループ展開によって繰り返しＬ０１，Ｌ０２，Ｌ０３を持つ展開ループのみに展開される。すなわち、端数ループの生成は抑止され、並列計算機の処理性能の劣化を招くことはない。また、図４（ｂ）の場合と同様、ホストプロセッサＨＯＳＴに割り当てられる残余のループのループ長Ｍは、同時に実行される分割ループのループ長Ｂにくらべて短いため、ホストプロセッサＨＯＳＴの実行プロセスはノードプロセッサＰＥ０，ＰＥ１，ＰＥ２，ＰＥ３，ＰＥ４の実行プロセスより早く終了する。
【００２５】
以上のように本実施形態によれば、各ノードプロセッサで並列実行される分割ループの分割ループ長が常に同一の値に揃えられる結果、ノードプロセッサに割り当てられた分割ループの実行プロセスはすべて同時に終了し、いずれのノードプロセッサもアイドル状態にならないので、並列計算機システムの全体的な処理性能の劣化を防止できる。また、割り当てられた分割ループをノードプロセッサがループ展開する際に展開ループのみが生成され、端数ループの生成が抑止されるので、これによっても並列計算機システムの全体的な処理性能の劣化を防止できる。さらに、ホストプロセッサに割り当てられる残余のループのループ長が分割ループのループ長にくらべて短くなるようにして、残余のループの実行プロセスが分割ループの実行プロセスより必ず早く終了するようにしたので、ホストプロセッサによる残余のループの実行プロセスの実行が並列計算機システムの全体的な処理性能に与える影響を排除できる。
【００２６】
なお、上述した本実施形態の並列計算機システムの説明では、原始プログラムをマシン命令コードからなる目的プログラムにコンパイルするコンパイル処理と、このコンパイル処理により得られた目的プログラムの実行プロセスとを、いずれも同一の並列計算機システムで行うことを想定して説明を行ったが、前者と後者とを異なる並列計算機システムで行うようにしてもよい。また、本発明は、目的プログラムの実行プロセスの実行に際して並列計算機システムの処理性能を最大限に発揮させることを目標としていることから、前者のコンパイル処理を単一のプロセッサのみを有する計算機で行うようにしてもよい。
【００２７】
【発明の効果】
以上詳しく説明したように、本発明の並列計算機システムによれば、各ノードプロセッサで並列実行される分割ループのループ長が常に同一の値に揃えられ、ノードプロセッサに割り当てられた分割ループの実行プロセスはすべて同時に終了するようになるので、いずれのノードプロセッサもアイドル状態にならなくなり、並列計算機システムの全体的な処理性能の劣化を防止できるとともに、ホストプロセッサに割り当てられる残余のループのループ長が各ノードプロセッサに割り当てられる分割ループのループ長にくらべて短くなり、残余のループの実行プロセスが分割ループの実行プロセスより必ず早く終了するので、ホストプロセッサによる残余のループの実行プロセスの実行が並列計算機システムの全体的な処理性能に与える影響を排除できる。
【００２８】
また、前記の請求項１、２の発明によれば、上記に加えてさらに、割り当てられた分割ループをノードプロセッサがループ展開する際に展開ループのみが生成され、端数ループの生成が抑止されるので、これによっても並列計算機システムの全体的な処理性能の劣化を防止できる。
【図面の簡単な説明】
【図１】本発明の並列計算機システムによる原始プログラムのコンパイル処理の概念を示す図である。
【図２】本発明の並列計算機システムによるループ分割の対象となる原始ループを記述した原始プログラムの一例を示す図である。
【図３】図１に示したコンパイル処理で図２中の原始プログラムをループ分割することにより得られるプログラム構造の一例を示す図である。
【図４】本発明の並列計算機システムにより図２中の原始プログラムのループ分割のみを行ったときの効果を概念的に示す模式図である。
【図５】本発明の並列計算機システムにより図２中の原始プログラムのループ分割及びループ展開を行ったときの効果を概念的に示す模式図である。
【符号の説明】
１０１  原始プログラム
１０２  コンパイラ
１０３  中間言語生成部
１０４  中間言語並列化部
１０５  ループ変換部
１０６  ループ解析部
１０７  最適化部
１０８  コード生成部
１０９  目的プログラム
【図１】
0003558500.tif 000002
【図２】
0003558500.tif 000003
【図３】
0003558500.tif 000004
【図４】
0003558500.tif 000005
【図５】
0003558500.tif 000006