"複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行う情報処理システムであって、前記三次元トーラス構造における各ノードの位置座標を保持している記憶部と、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードを並列プログラム実行の基準とし、MPIランクを0とする計算ノードと決定する処理を実行する演算部と、を備えることを特徴とするプロセス割当システム。前記三次元トーラス構造によるネットワークトポロジーは、x、y、z軸方向の各々に環状の構造を有し、2つのノード間通信において1以上のネットワークスイッチを経由した通信が実行されるものであり、前記記憶部における各ノードの位置座標の情報は、所定ネットワークスイッチを三次元の原点座標にした場合の、各ネットワークスイッチにおける前記原点座標との相対位置座標によって三次元座標が規定されており、前記演算部は、ノード間で通信を行う場合の経路上のネットワークスイッチ数を、該当各ノードの三次元座標間におけるx、y、z座標のそれぞれの差分の合計を算定して求めることを特徴とする請求項1に記載のプロセス割当システム。前記演算部は、前記MPIランクが0のノードとの経路上のネットワークスイッチ数を各計算ノードについて算定し、MPIプログラムのジョブ投入時に指定されたプロセス数に応じた数の計算ノードを、前記算定したネットワークスイッチ数が少ない順に選択することを特徴とする請求項1または2に記載のプロセス割当システム。前記演算部は、MPI集団通信関数の実行に際し、前記プロセス数に応じて選択された計算ノード群を、基準となる前記MPIランク0のノードとの経路上のネットワークスイッチ数の多少により、前記ネットワークスイッチ数が少ない方のグループであり、MPIランク0のノードをベースノードとするグループA、前記ネットワークスイッチ数が多い方のグループのグループB、の2分割するグループ分けの処理と、前記グループBに含まれる計算ノードのうち、前記ネットワークスイッチ数が最少のものを、当該グループBにおいて、MPI集団通信関数実行時に前記MPIランク0のノードから最初にデータ転送を受けるベースノードとして特定する処理と、前記グループA、Bのそれぞれに関し、ベースノード以外の計算ノードが残っている限り、前記グループ分けの処理および前記ベースノードの特定の処理を再帰的に繰り返し実行する処理とを実行するものである、ことを特徴とする請求項3に記載のプロセス割当システム。前記演算部は、MPI実装に際し、前記プロセス数に応じて選択された計算ノード群について、少なくとも該計算ノード群が含む前記MPIランク0の計算ノードおよび前記各グループのベースノードの情報をMPIランク情報としてファイル出力することを特徴とする請求項4に記載のプロセス割当システム。複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行うべく、記憶部において、前記三次元トーラス構造における各ノードの位置座標を保持したコンピュータが、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードのMPIランクを決定する処理を実行することを特徴とするプロセス割当方法。複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行うべく、記憶部において、前記三次元トーラス構造における各ノードの位置座標を保持したコンピュータに、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードのMPIランクを決定する処理を実行させる、ことを特徴とするプロセス割当プログラム。上述のように、大規模PCクラスタシステムで実行される並列プログラムは、複数のプロセス間でメッセージデータを送受信しながら全体の計算を進めていく。プロセスを実行する複数の計算ノードは、上記の従来技術などによりジョブ管理プログラムにより決定される。一方、並列プログラムの実行に要する時間は、計算時間と通信時間の和で求めることができる。このうち前記計算時間は、各プロセス間でほぼ同じ計算時間となるように最適化が実施されている。ここで、前記通信時間は、メッセージ送受信のプロセスを実行する計算ノード間の距離によって変化する。このため、並列プログラムの実行に要する全体時間の短縮を目指す場合、通信時間をもできるだけ短縮するために、計算ノードの割り当てに加えてプロセスの最適配置を行う技術が必要になる。しかしながら従来技術では、並列プログラムを実行する上で通信時間の短縮は考慮されておらず、利用者は手動で通信ログを採取し、プロセスを割り当てる計算ノードの配置を試みていた。そこで本発明の目的は、三次元トーラス構造の大規模PCクラスタシステム上で、MPIライブラリを用いた並列プログラムの実行時間短縮を図る、プロセスの自動最適配置を可能とする技術を提供することにある。上記課題を解決する本発明のプロセス割当システムは、複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行う情報処理システムであって、前記三次元トーラス構造における各ノードの位置座標を保持している記憶部と、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードのMPIランクを決定する処理を実行する演算部と、を備えることを特徴とする。また、本発明のプロセス割当方法は、複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行うべく、記憶部において、前記三次元トーラス構造における各ノードの位置座標を保持したコンピュータが、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードのMPIランクを決定する処理を実行することを特徴とする。また、本発明のプロセス割当プログラムは、複数ノードと結ばれたネットワークスイッチが三次元トーラス構造で相互に接続された大規模PCクラスタシステムにおいて、MPIプログラムを対象とする並列プログラム実行のためのプロセス割り当てを行うべく、記憶部において、前記三次元トーラス構造における各ノードの位置座標を保持したコンピュータに、記憶部における前記三次元トーラス構造における各ノードの位置座標に基づいて、各ネットワークスイッチに結ばれた、並列プログラム実行に当たってプロセス割り当てを受け計算を行う各計算ノードと、該計算ノードによるファイル入出力時のアクセス対象である各I/Oノードとの間の、三次元トーラス構造での経路におけるネットワークスイッチ数を算定し、該算定値が最小となるI/Oノードと計算ノードの組を特定し、該特定した組の計算ノードのMPIランクを決定する処理を実行させる、ことを特徴とする。本発明によれば、三次元トーラス構造の大規模PCクラスタシステム上で、MPIライブラリを用いた並列プログラムの実行時間短縮を図る、プロセスの自動最適配置が可能となる。以下に本発明の実施形態について図面を用いて詳細に説明する。図1は、本実施形態のプロセス割当システムたるジョブ管理ノード11を含むネットワーク構成図である。図1に示すジョブ管理ノード11は、三次元トーラス構造の大規模PCクラスタシステム上で、MPIライブラリを用いた並列プログラムの実行時間短縮を図る、プロセスの自動最適配置を可能とするコンピュータである。多数の計算ノード12等が接続された大規模なPCクラスタシステム1は、ログインノード10、前記ジョブ管理ノード11、計算ノード12、およびI/Oノード13がネットワーク14に接続された構成となっている。各ノードは1台の計算機であり、他のノードとはネットワーク14を通じて通信を行う。PCクラスタシステム1の利用者は、ログインノード10に端末エミュレータソフトウェアなどを使用して接続し、プログラム編集、コンパイル、データ編集などを行うことになる。また、こうしたPCクラスタシステム1において、MPIプログラムに対応して、複数の計算ノード12を同時に使用する並列プログラムを実行する場合、利用者が、ログインノード10での操作によりジョブ投入を指示する。図2は本実施形態の計算ノードの構成例を示す図であり、図3は本実施形態のジョブ管理ノードの構成例を示す図である。上記のジョブ投入時には、ログインノード10から、ジョブ管理ノード11で動作中のジョブ管理プログラム304に対し、通知が行われる。ジョブ管理プログラム304の一つの機能であるスケジューリング機能306は、並列プログラムを実行する複数の計算ノード候補を決定し、その情報をジョブキュー307に保存する。また、ジョブ管理プログラム304のもう一つの機能であるジョブ制御機能305は、実行状態のジョブの計算ノード12の状態を常に管理し、スケジューリング機能306によって決定された複数の計算ノード候補が使用可能と確認した時点で、その計算ノード候補に並列プログラムのプロセスを生成し、一斉に実行を開始する。計算ノード12で実行する並列プログラムのプロセスは、ネットワーク14を通じ、I/Oノード13を対象としたファイルアクセスや、別の計算ノード12で動作する並列プログラムのプロセスとのメッセージ送受信を行いながら並列プログラム全体の実行を進めていく。実行中の並列プログラムの全プロセスの終了をジョブ管理プログラム304のジョブ制御機能305が検知した時点で、並列プログラムを実行していた全ての計算ノード12はプログラム実行中の状態からプログラム未実行の状態となる。プログラム未実行である状態の計算ノード12は、ジョブ制御機能305により、新たなプログラム実行のための計算資源として使用することができる。プログラム実行が終了したジョブの情報は、ジョブ管理プログラム304のジョブ制御機能305によって、前記ログインノード10で操作を行った前記利用者のユーザ端末等に対し、電子メール等を介して通知される。こうして電子メール等によって通知を受けた利用者は、ログインノード10での操作により、ジョブ投入を行ったプログラムの出力や実行ステータス、エラー情報などを確認することができる。ここで前記ジョブ管理ノード11およびジョブ管理ノード11のハードウェア構成について、図2,3を用いてあらためて説明する。前記計算ノード12は、メモリーやハードディスクドライブなどで構成される記憶部201、前記記憶部201に格納された並列プログラム204等の各種プログラムを実行し計算機自体の統括制御や各種演算等を行なうCPU部202、他装置とネットワーク14を介してデータ授受を行うネットワークインタフェース部203とを備えている。また、前記記憶部201、CPU部202、ネットワークインタフェース部203は、BUSにより結ばれている。こうした計算ノード12において、並列プログラム204の実行時には、前記記憶部201に該当プログラムがローディングされ、所定のオペレーティングシステム特に図示せずがその実行制御を行うこととなる。並列プログラム204は、計算機能205、ファイル入出力機能206、データ入出力機能207などにより構成され、計算ノード12のCPU部202と記憶部201を使用する。並列プログラム204のファイル入出力機能206およびデータ入出力機能207は、計算ノード外との通信を必要とし、ネットワークインタフェース部203を使用して通信を行うこととなる。また、前記ジョブ管理ノード11は、メモリーやハードディスクドライブなどで構成される記憶部301、前記記憶部301に保持されるジョブ管理プログラム304等を実行し計算機自体の統括制御や各種判定、演算及び制御処理を行なうCPU部302、ネットワーク14を介して他装置と接続してデータ授受を行うネットワークインタフェース部303を備える。こうしたジョブ管理ノード11では、記憶部301にジョブ管理プログラム304がローディングされ、このジョブ管理プログラム304がCPU部302と記憶部301を使用して常に動作している。ログインノード10からのジョブ投入の情報は、ネットワークインタフェース部303を通じてジョブ管理プログラム304が取得することになる。このジョブ管理プログラム304は、ジョブのスケジューリング機能306により、並列プログラムを実行する計算ノード候補を決定する。ジョブ管理プログラム304のジョブ制御機能305は、ネットワークインタフェース部303を通じて、計算ノード12で実行すべき並列プログラムのプロセス生成や、計算ノード12で実行するプログラムの状態取得を行う。また、ジョブのスケジューリング機能306は、前記ジョブ制御機能305より取得した最新の全ての計算ノード12の実行情報を参照し、並列プログラムを実行する計算ノード候補を決定する。スケジューリング機能306は、ジョブスケジューリングを行った情報をジョブキュー307に登録する。また、スケジューリング機能306は、前記ジョブ制御機能305により実行対象の計算ノード候補が利用可能であることが検出された時点で、その計算ノード12を対象に、並列プログラムのプロセスを生成し実行を開始させる。図4は、一次元のトーラス構造を示す図である。トーラス構造は、基準点から一方向に進んでいく場合に元の基準点に戻る特性をもつ構造である。図4における構造では、オブジェクト401を基準点とし、右回りに順に進んでいく場合にオブジェクト401に戻る。同様に左回りに順に進んでいく場合も元のオブジェクト401に戻るため、図4の構造はトーラス構造である。図4のトーラス構造が計算機システムを構成するネットワーク構造となる場合は、オブジェクト401はネットワークスイッチをその内部に含み、オブジェクト間は、ネットワークケーブルによりネットワークスイッチ同士を接続する構成となる。このような構造を有するネットワークは、一台のネットワークスイッチの障害やネットワークケーブルの断線が発生した場合に、逆方向のネットワークスイッチとネットワークケーブルを使用し通信を行うことでオブジェクト401の通信が可能となり、冗長性を有する構造となっている。図5は、トーラス構造によるネットワークトポロジーにより計算機システムを構築する場合のオブジェクトネットワーク構成要素の内部構造を示す図である。オブジェクト401は、ネットワークスイッチ501と複数のノード502で構成する。また、ネットワークスイッチ501は、当該ネットワークスイッチ501を中心に、x軸方向、y軸方向、z軸方向の全6方向に対してネットワークケーブルを接続し、隣のオブジェクトネットワーク構成要素のネットワークスイッチ501との間で通信を行う。ネットワークスイッチ501には、x軸方向同士を接続するネットワークケーブル503、y軸方向同士を接続するネットワークケーブル504、z軸方向同士を接続するネットワークケーブル505、オブジェクト401に含まれるノード502と接続するネットワークケーブル506を接続のために使用する。ネットワークスイッチ501は、これらの経路から取得したパケットに対するスイッチングを行い、オブジェクト内部のノード方向あるいは外部のオブジェクトネットワーク構成要素方向にパケットを送出する。同じネットワークスイッチ501に接続されるノード502の間で通信を行う場合は、1台のネットワークスイッチ501のみのスイッチングでノード502間のデータ転送を完結することができる。異なるネットワークスイッチ501に接続されるノード502と通信を行う場合には、送信元のノード502から当該ノード502が属するネットワークスイッチ501にデータを送り、そこから別のオブジェクト401に含まれるネットワークスイッチ501にデータが送られる。これを受信先のノード502を含んでいるオブジェクト401に至るまで隣のネットワークスイッチ501を対象とした通信を繰り返し、最後に受信先のノード502を含んでいるネットワークスイッチ501から受信先のノード502にデータを送ることで、2つのノード間でのデータ転送を完了する。図6は、二次元トーラス構造を示す図である。二次元トーラス構造は、基準点から一方向に進んでいく場合に元の基準点に戻る特性を2つの軸に対して同時に満たす構造である。図6の構造において、オブジェクト401を基準点とし、右方向に進んでいく場合も左方向に進んでいく場合も元のオブジェクト401に戻る。同様に、オブジェクト401を基準点とし、上方向に進んでいく場合も下方向に進んでいく場合も元のオブジェクト401に戻る。これらの特徴を兼ね備えていることから、図6の構造は二次元トーラス構造としての要件を満たしている。オブジェクト401はネットワークスイッチ501とノード502で構成しており、ネットワークスイッチ501のx軸方向およびy軸方向にネットワークケーブルを接続することで、二次元トーラス構造のネットワークを構成することができる。図7は、三次元トーラス構造を示す図である。三次元トーラス構造は、基準点から一方向に進んでいく場合に元の基準点に戻る特性を3つの軸に対して同時に満たす構造である。図7の構造において、オブジェクト401を基準点とし、x軸方向に進んでいく場合、y軸方向に進んでいく場合、そしてz軸方向に進んでいく場合のそれぞれで元のオブジェクト401に戻る。これらの特徴を全て満たしていることから、図7の構造は三次元トーラス構造としての要件を満たしている。オブジェクト401はネットワークスイッチ501とノード502で構成しており、ネットワークスイッチ501のx軸方向、y軸方向およびz軸方向にネットワークケーブルを接続することで、三次元トーラス構造のネットワークを構成することができる。図8は、三次元トーラス構造による大規模PCクラスタシステムの構成例を示す図である。大規模PCクラスタシステム1は、三次元トーラス構造のネットワークトポロジーによりオブジェクトネットワーク構成要素間を接続する。オブジェクト401は2種類に分類され、1台のネットワークスイッチ501と複数の計算ノード12によって構成されるオブジェクト803と、1台のネットワークスイッチ501と複数の計算ノード12のほかに1台または複数のI/Oノード13、ログインノード10、ジョブ管理ノード11を含むオブジェクト804とする。大規模PCクラスタシステム1で並列プログラムをジョブとして実行する場合、利用者はいずれかのオブジェクト804に含まれるログインノード10に端末エミュレータソフトウェアなどを使用して接続し、所定操作によってジョブ投入を行う。並列プログラムを実行する計算ノード候補の決定は、いずれかのオブジェクト804に含まれるジョブ管理ノード11で常に動作するジョブ管理プログラム304のスケジューリング機能306によって行い、計算ノード候補ができるだけ密となる三次元空間で並列プログラムを実行する計算ノード候補を集約するよう、スケジューリングを行う。このようなスケジューリングを実施した結果、三次元トーラス構造の三次元空間の一部分であるジョブ実行空間802の中の複数のオブジェクト401に含まれる各計算ノード12が並列プログラムをそれぞれ実行する。計算ノード12で実行するプログラムがファイル入出力を行う場合において、同一のネットワークスイッチ501にI/Oノード13が接続され、その中のファイルが入出力の対象である場合は、ネットワークスイッチ間の通信を必要とせずにファイル入出力が可能である。そうでない場合は、別のオブジェクト804に接続されるI/Oノードを対象にファイル入出力を行うこととなり、ネットワークスイッチ間の通信を何回か繰り返す通信を行って、ファイル入出力を行う。図9は、MPIプログラムにおいてMPI_BCAST関数などの集団通信関数を実行した場合のデータの流れの例を示す図である。MPI_BCAST関数は1つのプロセスのみが所有しているデータを他の全てのプロセスに与える機能を提供する。MPI_BCAST関数は、同期型の関数であり、全プロセスでMPI_BCAST関数を実行すると、内部で同期を行った後、データ転送のための通信を並列に行い、1つのプロセスが所有するデータを残りの全てのプロセスに与えることができる。MPIプログラムがNプロセスで実行され、MPI_BCAST関数が全プロセスから呼び出される場合は、データを所有する1プロセスからデータを所有しない残りのN-1プロセスに対してN-1回のデータ転送を行う方式を行わない。図9に示す方式によって、MPIプログラムのプロセスあたり最大log2N回小数点以下は切り上げの通信を行い全てのプロセスへのデータを転送する。図9は、MPIプログラムが8プロセスの並列で実行される場合の、MPI_BCAST関数実行時のデータの流れを示している。この図の場合、N=8であるために、プロセスあたり最大log2N回すなわち最大3回の転送回数で全てのプロセスへのデータ転送が完了する。図9は並列数が8であるために8プロセスのそれぞれにMPIランクとして0から7までが与えられる。データははじめにMPIランク0のプロセスが保持しており、これをMPIランク1から7までの7プロセスにMPI_BCAST関数によって与える。1回目の転送ではMPIランク0のプロセスとMPIランク4のプロセスとの間でデータを送受信する。次に2回目の転送処理ではMPIランク0のプロセスはMPIランク2のプロセスとの間でデータを送受信する。MPIランク4のプロセスは既にデータを受信済みであり、この時に並行してMPIランク0から受信したデータを直ちにMPIランク4のプロセスとMPIランク6のプロセスとの間で送受信する。2回目までの転送処理が完了した時点でデータを所有するMPIランクは0,2,4,6の4つとなる。次に3回目の転送処理を行う時点ではMPIランク0のプロセスはMPIランク1のプロセスとの間で送受信を行う。同じく既にデータを受信しているプロセスはまだ未受信のプロセスとの間で送受信を行い、MPIランク2のプロセスはMPIランク3のプロセスと、MPIランク4のプロセスはMPIランク5のプロセスと、MPIランク6のプロセスはMPIランク7のプロセスとの間で送受信を行う。その結果、ここまでの全ての送受信が完了した時点でデータは全てのプロセスが持つこととなる。MPIランク0のプロセスが3回のデータ送受信を行う間に、他のMPIランクのプロセスがデータ未受信のプロセスを対象に適切にデータ送受信を繰り返すことで短い時間で全プロセスへのデータ転送を完了することができる。本方式は、log2N回数で全プロセスへの転送が完了するため、例えば65536プロセスのMPIプログラムの中でMPI_BCAST関数を実行した場合は16回log265536=16の転送回数に要する時間で全65536プロセスで同一データを持つことができる。図10は三次元トーラス構造によるPCクラスタシステム1における計算ノード12とI/Oノード13の距離について示した図である。三次元トーラス構造によるPCクラスタシステム1は計算ノード12のみを含むオブジェクト以下、計算オブジェクトとI/Oノード13を含むオブジェクト以下、I/Oオブジェクトで構成し、いくつかの計算オブジェクトおよびI/Oオブジェクトによってジョブ実行空間802を構成している。ジョブ実行空間802は計算オブジェクト1001および計算オブジェクト1002を含んでいる。ここでオブジェクト間の距離は2つのオブジェクトの物理空間上の距離ではなく、2つのオブジェクト401を接続しているネットワークスイッチ501の三次元空間座標上の差分と定義する。このような定義を行った上で、I/Oオブジェクト1003と計算オブジェクト1001の距離とI/Oオブジェクト1003と計算オブジェクト1002の距離を比較する。計算オブジェクト1001と計算オブジェクト1002の座標のxおよびyが同じであり、zのみが異なる場合を考えることとする。PCクラスタシステム1の全体は三次元トーラス構造であるため、図10においてI/Oオブジェクト1003が存在するPCクラスタシステム1の一番下のxy平面は一番上のxy平面とz方向に隣の関係にある。このため、ジョブ実行空間802でI/Oオブジェクト1003により近い計算オブジェクトはz方向に隣となる計算オブジェクト1001である。ジョブ実行空間802はI/Oオブジェクト1004も含んでいる。I/Oオブジェクト1004も計算ノードを含んでおり、ジョブ実行空間802に含む計算オブジェクト1001、計算オブジェクト1002、I/Oオブジェクト1004で一番I/Oノードに近い計算ノードを含むオブジェクトはI/Oオブジェクト1004でその距離を0とする。図11は三次元トーラス構造によるPCクラスタシステム1の大きさを示した図である。トーラス構造は基準点から一方向に進んでいく場合に同じ基準点に戻る性質があるため、同一方向に無限に進むことも可能となる。ここでx方向に進み、再び基準点に到達するまでのオブジェクト401の個数をMx個とする。同様にy方向およびz方向に進み、基準点に到達するまでのオブジェクト401の個数をMy個およびMz個とする。x、y、z方向に共通の基準となる三次元空間の原点を設け000の座標位置にあるオブジェクト401を定義する。x方向にMx個、y方向にMy個、z方向にMz個のオブジェクトが存在しているため、三次元トーラス構造によるPCクラスタシステム1を構成するオブジェクト401は、全て三次元座標で表すことができる。全てのオブジェクト401は000からまでのいずれかの座標に存在し、オブジェクト総数はMx×My×Mz個である。図12は計算オブジェクトの三次元座標位置とオブジェクトの内部構造との関連を示した図である。計算オブジェクトはネットワークスイッチ501と複数の計算ノード12で構成する。計算オブジェクトの座標位置はネットワークスイッチ501の座標位置と同一とし、隣接のネットワークスイッチ501のx、y、z方向に対して1をプラスまたはマイナスした位置となる。三次元トーラス構造であるために、x座標がとりうる座標位置としては0からMx-1までである。y座標も同様に0からMy-1まで、z座標も同様に0からMz-1までである。あるネットワークスイッチ501のx座標が0またはMx-1である場合、隣のネットワークスイッチ501の座標は、-1またはMxが座標値とならず、x座標が0の場合に1をマイナスした座標位置としてMx-1、x座標がMx-1の場合に1をプラスした座標位置として0となる。y座標の値が0またはMy-1の場合やz座標の値が0またはMz-1の場合にも同様となる。また、計算オブジェクト内部の計算ノード12に関してもノード番号を設定する。図12では計算オブジェクトは計算ノード12を6ノード有し、ノード番号01から06までとしている。このノード番号は、オブジェクトの中で一意の値となるように設定する。三次元トーラス構造のPCクラスタシステム1からノードを特定する場合、オブジェクト401の三次元座標とノード番号との組合せにより求めることができる。図13はI/Oオブジェクトの三次元座標位置とオブジェクトの内部構造との関連を示した図である。I/Oオブジェクトは計算オブジェクトとほぼ同じであるが、複数の計算ノード12に加えてI/Oノード13を含むことが異なる。I/Oオブジェクトの座標位置については計算オブジェクトと同じ考え方であり、ノード番号についても同じ考え方である。I/Oオブジェクト内部の計算ノード12およびI/Oノード13に関して、図13の例では計算ノード12を6ノード、I/Oノード13を1ノード有している。これらのノード番号がI/Oオブジェクトで一意の値となるように、計算ノード12のノード番号は01から06までとし、I/Oノード13のノード番号はこれに続く07とする。図14はオブジェクトを構成するネットワークスイッチ501およびノード502の名称と三次元空間座標やノード番号との対応関係を示した表である。三次元トーラス構造によるPCクラスタシステム1を構成するオブジェクト401は、三次元座標を持ち、計算ノード12およびI/Oノード13には同一オブジェクト内で一意となるノード番号をもつ。オブジェクトには1台のネットワークスイッチ501があり、ネットワークスイッチ名にはオブジェクトの三次元座標を与えることで、三次元トーラス空間内での一意のネットワークスイッチ名称をもつことができる。この例におけるネットワークスイッチ名称はS座標位置とし、先頭文字たるSでスイッチであることを、それ以外の文字でネットワークスイッチ501の座標位置を表す。座標位置を示す情報はx、y、zそれぞれの座標値を1文字で表し、合計で3文字とする。座標値が10未満である場合は10進数の値として0から9までの1文字で表現できる。座標値が16未満の場合は16進数の値として、0からFまでの1文字で表現する。座標値が16以上の場合はn進数としてFより後のアルファベット文字を使用することにより解決する16=G,17=H,18=I,以下同様。また、ノード名はオブジェクト401の座標位置に加えてノード番号を使用する。ノード名称はN座標位置_ノード番号とし、先頭文字のNでノードであることを、それ以外の文字によりオブジェクト座標とノード番号を表す。ノード名称には座標位置が含まれ、これはノード502が接続されるネットワークスイッチ501の座標と同じであるため、ノード502が接続するネットワークスイッチ501はノード名から自明となる。ノード名の座標位置の部分の名称が同一である場合は同一のネットワークスイッチ501に接続されていることを表し、ノード間の距離は0となる。一方、ノード名の中の座標位置の部分が異なる場合には異なるネットワークスイッチ501に接続されていることを表している。図15はオブジェクト間の距離について示した図である。上述してきたとおり、トーラス構造は基準点から同一方向に進む場合に元の基準点に戻る特性がある。図15に例示する一次元トーラス構造は、Mx個のオブジェクト401で構成されており、オブジェクト1501を基準点としている。この基準点から右回りにn個進んだオブジェクト1502までの距離を考える場合、右回りに進んだ距離と左回りに進んだ距離の2通りが存在する。オブジェクト1501とオブジェクト1502の間の距離は、右回りに進んだ場合はn、左回りに進んだ場合はMx-nである。ここでnがMx/2より小さい場合には右回りに進む距離が小さく、Mx/2より大きい場合には左回りに進む距離が小さくなる。オブジェクト間の距離は、このように進む経路により2通りの値をとるが、Mx/2以下の、より小さい値をオブジェクト間の距離と定義する。オブジェクト401はネットワークスイッチ501と複数のノード502で構成しており、オブジェクトの距離は2つのネットワークスイッチ間の距離、2つのノード間の距離と等しい。ここでいう距離は三次元トーラス構造のPCクラスタシステム1において、ネットワークスイッチ501を経由する個数という意味となる。図16は三次元トーラス構造によるPCクラスタシステム1のノード間の距離の計算方法を示した図である。三次元トーラスによるPCクラスタシステム1は、オブジェクト401によりx方向、y方向、z方向のそれぞれにトーラス構造をもつ。図16のPCクラスタシステム例においては、x方向に10個のオブジェクト、y方向に10個のオブジェクト、z方向に10個のオブジェクトで構成しているものとする。座標位置にあるオブジェクト401にノード1601があり、このノード番号が07である場合、図14で例示した定義によりノード名はN000_07と定義できる。また、座標位置にあるオブジェクト401にノード1602があり、このノード番号が01である場合、同様にノード名はN111_01と定義される。また、座標位置にあるオブジェクト401にノード1603があり、ノード番号が06である場合、ノード名はN901_06と定義される。ここでノード1601とノード1602との間の距離を考える。ノード1601の座標位置は、そのノード名にも表されているように0,0,0であり、ノード1602の座標位置はである。x方向の距離を考える場合、右方向には1-0=1となる。左方向にはMx=10であるために10-1=9となる。小さい値が距離となるためにノード1601とノード1602のx方向の距離は1である。同様にy方向の距離も1、z方向の距離も1である。ここで、ノード間の距離はx方向、y方向、z方向の距離を全て足した値となり、ノード1601とノード1602の間の距離は、前記距離を足した3となる。同様に、オブジェクト1601とオブジェクト1603の間の距離を求める。ノード1601の座標位置は、ノード1603の座標位置はである。x方向の距離を考える場合、右方向には9-0=9となる。左方向にはMx=10であるために10-9=1となる。小さい値を採用するためにノード1601とノード1603のx方向の距離は1となる。同様にy方向の距離は0、z方向の距離は1である。以上によりノード1601とノード1603の距離は2である。最後にノード1602とノード1603の距離を求める。ノード1602の座標位置は、ノード1603の座標位置はである。x方向の距離を考える場合、右方向には9-1=8となる。左方向にはMx=10であるために10―91=2となる。小さい値を採用するためにノード1602とノード1603のx方向の距離は2となる。同様にy方向の距離は1、z方向の距離は0である。以上によりノード1602とノード1603の距離は3である。以下、本実施形態におけるプロセス割当方法の実際手順について図に基づき説明する。以下で説明するプロセス割当方法に対応する各種動作は、主として前記ジョブ管理ノード11が実行するジョブ管理プログラム304によって実現される。そして、こうしたプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。図17は並列プログラムを実行する際の、利用者の操作手順と合わせて、ジョブ管理ノード11におけるジョブ管理プログラム304のスケジューリング機能306、およびジョブ制御機能305の処理フロー例を示す図である。利用者はログインノード10に大規模PCクラスタシステム1の外部のネットワークを通じて端末エミュレータソフトウェアなどを使用してログインS1701し、対話的な操作をログインノード10で行う。また、利用者はログインノード10上で並列プログラムの入力データをファイルシステム上に作成S1702し、その後にジョブ投入のための操作を行うことで並列プログラムの実行指示S1703を行う。ログインノード10上の実行指示S1703はジョブ管理ノード11で常に動作するジョブ管理プログラム304にネットワーク14を通じ、直ちに通知される。一方、ジョブ管理ノード11で動作するジョブ管理プログラム304のスケジューリング機能306では、ジョブ実行対象の計算ノード構成を定義するキューの情報をファイルやデータベースなどを通じて取得S1707し、利用者が指定したプログラム実行のための要件とキューの構成を比較する。その結果とジョブ制御機能305が提供する計算ノード12の使用状況の情報とを用いてジョブスケジューリングS1708を行い、並列プログラム実行のための情報をジョブという単位で管理する。一つ一つのジョブにはジョブIDと呼ぶ一意の識別番号をジョブ管理プログラム304が設定する。前記ジョブ管理ノード11のスケジューリング機能306は、前記ジョブスケジューリングS1708によって生成するジョブを、FIFOFirstInFirstOutを基本とするジョブキューを対象にジョブ登録S1709する。登録したジョブはジョブIDをキーとしてジョブキュー307から取得することができる。また、前記スケジューリング機能306は、該当ジョブのジョブIDを、ログインノード10にて対話的操作を行ってジョブ投入を行った前記利用者の操作端末に対し、応答メッセージとして返却する。実行要件に合致する全計算ノード候補のうち、他のジョブのプログラムが実行されておらずプログラム実行が可能であるものについて検知したジョブ制御機能305は、プログラムを実行する計算ノード候補に関して、実行環境初期化S1710を行い、前記ジョブ登録S1709によってジョブキュー307に登録された情報について実行待ちから実行開始にジョブのステータスを変更する。その後、前記ジョブ制御機能305は、計算ノード候補に対しジョブの実行プログラムのプロセスを生成し、ジョブ実行S1711によってプログラムの実行を開始する。この時に、ジョブキュー307で実行開始から実行中に該当ジョブのステータスを変更する。ログインノード10の利用者は、ジョブIDによってジョブの実行状況を確認することが可能であり、この場合、例えばジョブ制御機能305が前記ジョブキュー307から、該当するジョブIDを有するジョブのステータスの情報を読み出して表示する。また、計算ノード12での実行中プログラムの終了について検知したジョブ制御機能305は、ジョブ実行終了S1712の処理を行う。ジョブ実行終了S1712の処理では、プログラム実行結果の情報を電子メール等により、ログインノード10の利用者のアカウントに対して送信するとともに、前記ジョブキュー307にて実行中から実行終了に該当ジョブのステータスを変更する。ログインノード10の利用者は所定の端末において、ジョブ管理プログラム304より送信された電子メールを受信し、その内容やプログラムが出力した結果ファイルの参照などをログインノード10上で閲覧する、実行結果確認S1705を行う。図18は、MPIプログラムでの通信時間最小化を目的として、前記スケジューリング機能306にMPIランク決定機能を追加する処理の流れを示した図である。ジョブ管理ノード11にて実行するジョブ管理プログラム304のスケジューリング機能306は、ジョブ実行対象の計算ノード構成の定義情報としてファイルやデータベースなどからジョブキュー307の情報取得S1801を行う。次にスケジューリング機能306は、ジョブ制御機能305が具備する計算ノード12の実行状態取得機能を用いて、ジョブキュー307を構成する計算ノード12の実行状況の取得S1802を行う。スケジューリング機能306は、その後に計算ノード12の実行状況とジョブキュー307の制限条件、既にスケジューリングが完了しているジョブの優先度や並列プログラム実行のために指定された要件などの情報などからジョブスケジューリングS1803を行い、ジョブキュー307に登録する情報ジョブを生成する。いままでのスケジューリング機能306では、ジョブ登録S1804でジョブ管理プログラム304のスケジューリング機能306が完了するが、本方式ではジョブ登録S1804の前にジョブスケジューリングS1803により決定した計算ノードに対して一般的なMPIプログラムが通信時間を短縮するためのMPIランクの決定S1805を行うこととなる。スケジューリング機能306に追加をするMPIランクの決定を行う処理S1805は4つの処理で成り立っており、初めにMPIランクが0となる計算ノード12を決定する処理S1806を行って、一般的なMPIプログラムにおいて他のノードとは異なる特別な役割を行うことが多いMPIランクが0となるプロセスを配置する計算ノード12を決定する。MPIランクの決定を行う処理S1805の次処理では、MPI集団通信関数の実行で通信経路が最小となるための情報を保持するテーブルの初期化S1807を行い、その後にMPIランクが0以外となる計算ノードを決定する処理S1808を行う。これらの処理は、MPI集団通信関数の通信時間を短縮するためのMPIプロセス配置を決定する。ここまでの処理の追加でMPIプログラム全体の通信時間を短縮するためのMPIランクは決定している。MPIランクの決定を行う処理S1805に追加する最後の処理では、決定したMPIランクをファイルなど外部に出力する処理S1809を行う。また、ジョブ登録の処理S1804では、ジョブキュー307に登録する情報と、MPIランクが出力されるファイルの情報とを関連付けした後に、これら情報をジョブキュー307に登録する。ジョブキュー307に登録しているジョブに関しては、計算ノード12の状態の変更ノードの故障、ノードの追加などやジョブの実行状況の変化強制終了やジョブの凍結、優先順位の変更などによって、一度決定した計算ノード12を変更する再スケジューリングを行うことがある。本方式によって追加を行うこれらの処理は計算ノード12が変更となる再スケジューリングが発生した場合には、新たにスケジューリングが行われた計算ノード候補を対象として前記S1806から前記S1809までの処理を再度行い、ジョブキュー307に登録しているジョブと一致したMPIランク情報を生成する。図19はMPIランクが0となる計算ノード12を決定する処理の考え方を導くための、三次元トーラス構造によるPCクラスタシステム1の構成図である。MPIランクが0のプロセスは、その他のプロセスと比較して特別な処理を行うケースが多い。例えば、入出力ファイルをアクセスする処理を、MPIランクが0のプロセスが全プロセスを代表して行うことや、MPIランクが0のプロセスが読み込んだ入力データを、MPI_BCAST関数などのMPI集団通信関数を使用して全プロセスに配布するといった例を挙げることができる。ファイル入出力を実行する計算ノード12はI/Oノード13との距離が小さいことは入出力時間の短縮とネットワーク資源の効率的な利用の点で優位となる。図19の三次元トーラスによるPCクラスタシステム1において、I/Oノード1902は座標位置のノード番号07にあるとする。一方、並列プログラムの実行はジョブ実行空間802のいずれかのオブジェクト内の計算ノード12を使用するものとする。ジョブ実行空間802の中の計算ノード12のどれをMPIランク0とすべきかはオブジェクト間の距離を算出し、その距離が一番小さいノードを特定することで行う。こうして特定したノードは最も効率よく最小の通信量でファイル入出力を行うことが可能である。ここで、オブジェクト間の距離を算出するための式は式1903であり、図14で例示したノード名の規則に従う場合のI/Oノード名に含まれる座標位置をとし、計算ノード名に含まれる座標位置をとする。ジョブ管理ノード11は、この2つの座標を式1903に当てはめてオブジェクト間の距離を算出する。全ての計算ノード12とI/Oノード13との組み合わせで距離を求め、一番距離の小さい計算ノード12をMPIランク0のプロセスを実行する計算ノードと決定する。図19のジョブ実行空間802は全て計算オブジェクトのみで構成しているが、I/Oオブジェクトを含む場合は、I/Oオブジェクトに含まれる計算ノード12が一番距離の小さい計算ノードとなりI/Oノードと計算ノードが同一ネットワークスイッチ501に接続されるため、その場合にはMPIランク0をI/Oオブジェクトに含む計算ノード12となる。I/Oオブジェクトは複数の計算ノード12を含み、MPIランク0とする計算ノード12のノード番号はオブジェクト内の計算ノード12の最小のノード番号を有する計算ノード12とする。図20は、本実施形態のMPI集団通信関数実行における最小の距離算出を示すフローであって、ジョブ管理ノード11による、MPIランク0とするプロセスを実行する計算ノード12を求めるフローチャートとなる。このフローは図18のMPIランク0のノードの決定S1806の詳細な処理内容を示している。ここで、ジョブ管理ノード11は、ノード間の最小距離、計算ノード12およびI/Oノード13に関するノード番号や三次元座標位置を初期化するS2002。続いて、ジョブ管理ノード11は、PCクラスタシステム1を構成するI/Oノード13の座標情報を、例えば記憶部301の定義ファイルやデータベースなどから取得S2003する。同様に、ジョブ管理ノード11は計算ノード12の座標情報を前記定義ファイルやデータベースなどから取得するS2004。これらの処理によりジョブ管理ノード11は、全てのI/Oノード名が格納されるリストと全ての計算ノード名が格納されるリストを用意している。次にジョブ管理ノード11は、I/Oノード名のリストと計算ノード名のリストを用いた2重ループ構造の処理によって、MPIランク0とする計算ノード12を求める。繰り返し処理S2005はI/Oノード名のリストによる繰り返しであり、ジョブ管理ノード11は、そのループ内でI/Oノード名を分解しI/Oノード13の座標とノード番号を取得するS2006。次にジョブ管理ノード11は、繰り返し処理S2007にて、計算ノード名のリストによる繰り返しを実行し、そのループ内で計算ノード名を分解し、計算ノード12の座標とノード番号を取得するS2008。続いてジョブ管理ノード11は、前記S2006およびS2008の処理で取得したI/Oノード座標と計算ノード座標からノード間の距離を算出するS2009。ジョブ管理ノード11はこのS2009で算出した距離と、これまで得ているノード間の最小距離とを判定処理S2010によって比較し、前記S2009で算出した距離が既存の最小距離より小さい場合にはS2010:yes、ノード間の最小距離、計算ノード座標とノード番号、I/Oノード座標とノード番号を該当ノードの情報で更新するS2011。ジョブ管理ノード11は、計算ノード12に対する繰り返し終了S2012とI/Oノード13に対する繰り返し終了S2013を行い、全てのI/Oノード13と計算ノード12の組み合わせに対して上記の処理を行うことで、最終的に一番距離の小さいI/Oノード座標とノード番号、計算ノード座標とノード番号を決定し、ここで求めた計算ノード12をMPIランクが0の計算ノードとする。図21はMPIランクを決定する処理で扱う計算ノード一覧のテーブル情報を示す図である。計算ノード一覧テーブル2101は、並列プログラムを実行するプロセス数だけ要素数すなわちレコードがある。一つのプロセスについては3つの情報をもつ。一つはプロセスを実行する計算ノード名nodenameである。計算ノード名のカラムには計算ノードが含まれるオブジェクトすなわちネットワークスイッチ501の三次元座標位置とノード番号の2つの情報を含んでいる。グループIDgroupidのカラムはMPIランクの決定処理を実行していく上で作業用に使用し、初期値は全て0である。MPIランクのカラムmpirankは、決定したMPIランクを設定し、初期値は全て-1である。MPIランクが負の値であることはMPIランクが未決定であることを表し、0以上の値はMPIランクが決定していることを表す。この図21の上段における計算ノード一覧テーブル2101は、初期状態のテーブルであり、全てのグループIDは0、全てのMPIランクは-1に設定されている。一方、図20で述べた処理を行い、MPIランクが0となるノード名が決定した場合、ジョブ管理ノード11は、前記決定した計算ノード12について、MPIランクのカラムの値を0に設定する。図22は計算ノード一覧テーブル2101を初期化するフローチャートであり、図18のランクテーブルの初期化S1807の詳細な処理内容を示している。はじめに、ジョブ管理ノード11は、前記スケジューリング機能306によって決定した計算ノード候補のリストを取得し、所定記憶領域でのNodelistに設定するS2201。次にジョブ管理ノード11は、計算ノード一覧テーブル2101をメモリー上に確保し、所定記憶領域に設定したカウンタiをゼロに初期化するS2202。次にジョブ管理ノード11は、繰り返し処理S2203の内部で計算ノード一覧テーブル2101のノード名nodenameに、計算ノード一覧のリストからインデックスiで取得した計算ノード名を設定し、計算ノード一覧テーブル2101のグループIDをゼロに初期化するS2204。次にジョブ管理ノード11は、比較処理S2205において、計算ノード一覧からインデックスiで取得した計算ノード名と、前記MPIランク0のノードの決定S1806で決定しているMPIランクが0の計算ノード名とを比較する。これらノード名が一致しない場合S2205:no、ジョブ管理ノード11は計算ノード一覧テーブル2101のMPIランクに、MPIランク未決定を表す-1を設定するS2206。他方、前記ノード名が一致する場合S2205:yes、ジョブ管理ノード11は計算ノード一覧テーブル2101のMPIランクに、前記MPIランクの値である0を設定するS2207。その後、ジョブ管理ノード11は、前記カウンタiを更新しS2208、繰り返し処理S2203の終了判定により、計算ノード一覧のリストにインデックスiでアクセスできる限り、繰り返し処理を行うS2209。全ての処理を終了した時点では、計算ノード一覧テーブル2101の全ての要素の計算ノード名には、スケジューリング機能306により決定した計算ノード名が、グループIDgroupidには0が設定される。MPIランクが0である計算ノード12のMPIランクmpirankのみに0を設定し、その他の計算ノードのMPIランクには-1を設定する。図23はジョブ管理ノード11がMPIランクが0以外のMPIランクを決定する処理の関数仕様を示した図である。ここで、図18のランク0以外のMPIランク決定S1808を行うための処理を一つの関数とし、この関数は図21のテーブルに格納された情報を更新しながらMPIランクが0以外のプロセスを実行する計算ノードを決定していく。関数名はRankDecisionとし、5つの引数を必要とする。この関数は再帰呼出しを行い、再帰呼び出しの深さは第5引数のdepthに設定する初期の深さは0である。RankDecision関数の第1引数には、図21に示した計算ノード一覧テーブルを指定する。第2引数には図21に示した計算ノード一覧テーブルの要素数プロセス数を指定する。第3引数には基準ランクを指定し、初回の呼び出し時にはMPIランク0のノードのみが決定済みであり、0を指定する。第4引数は対象のグループIDであり、初回の呼び出し時には図22の処理により、初期化を行った値である0を指定する。第5引数は関数の再帰呼出し数を指定し、初回の呼び出し時には0を指定する。RankDecision関数は、指定されたグループIDの範囲で深さdepthの集団通信実行時に、基準ランクベースノードと通信を行う相手のMPIランクを求める。この時、グループIDを2分割し、一方は次の深さで基準ランクと通信を行うグループIDでRankDecision関数を呼び出す。もう一方は新たなグループIDを更新し、今回決定した相手先のMPIランクを新たな基準ランクとし、次の深さにて新たな基準ランクと通信を行う新たなグループIDでRankDecision関数を呼び出す。図24および図25はMPIランク0以外のMPIランクを決定する処理のフローチャートであり、図18のランク0ノード以外の決定S1808の詳細な処理内容を示している。この場合、ジョブ管理ノード11が、MPIランク0以外の計算ノードを決定する処理に際し、前記RankDecision関数2301を利用する。RankDecision関数2301は図23に示す関数仕様に従って処理を行う。引数で与えられたbasenodeには既にMPIランクが決定している計算ノード12のMPIランクが設定され、初回のRankDecision関数呼出し時には図20の処理で決定するMPIランク0が設定される。この場合、RankDecision関数は、はじめにbasenodeで指定されたMPIランクのプロセスが実行される計算ノード12の名称を取得するS2401。次にRankDecision関数は、先に取得した計算ノード名と、グループIDが一致する各計算ノードとのそれぞれの距離を求め、各ノード間の距離一覧を作成する。RankDecision関数は、ここで求めた距離が最大のノード名を保存するS2402。距離が最大のノード名は、basenodeの計算ノード12から最も多くネットワークスイッチ501を経由したデータ転送が必要となる計算ノード12である。次にRankDecision関数は、最も距離の遠いノードとグループが一致する全てのノードとでそれぞれの距離を求め保存するS2403。このことによりRankDecision関数は、グループIDが一致するノードについてbasenodeからの距離と、basenodeから最も距離の遠いノードからの距離との2つの距離を算出する。次にRankDecision関数は、処理S2403までに求めた2つの距離をもとにグループを2分するS2404。これまでは同一のグループに所属していたものを2分割するのである。basenodeから距離が近いものを、例えばAグループ、basenodeから最も遠いノードから距離が近いものをBグループとする。ノード数nが偶数である場合は、AグループおよびBグループに所属するノードは各々n/2である。ノード数nが奇数である場合は、最後に残るノードはbasenodeからの距離とbasenodeから一番遠いノードからの距離とを比較し、小さいほうのグループに所属する。次にRankDecision関数は、新しいグループIDを設定するS2405。basenodeに近いグループはグループIDを2倍した値を新しいグループIDとしてグループIDを更新する。最初の呼び出しではグループIDは0であるため、2倍し更新されたグループIDも0である。basenodeから最も遠いノードに所属するグループはグループIDを2倍して1を加えた値を新しいグループIDとして設定する。最初の呼び出しではグループIDは0であるため、更新されたグループIDは1となり、新しいグループIDとして1を設定する。処理S2405をグループIDが0の場合に行うことで、新しいグループIDとして0のグループと1のグループとにノード群を分割し、グループ設定することになる。続いてRankDecision関数は、basenodeから最も遠いノードに所属するグループの中で、basenodeに最も距離が近いノードを検索するS2406。S2406の処理で検索したノードには、MPIランクをテーブル2102に設定する。ここで設定するMPIランクは引数で渡されたbasenode、tablecnt、depthによって一意となる値である。RankDecision関数は、MPIランクを設定した後、判定処理S2407により、2分割したグループBの個数が0より大きい場合S2407:yes、グループBを対象にRankDecision関数を呼出すS2408。再帰呼出しが行われたRankDecision関数は、これまでのS2401からS2406までの処理を行い、グループの分割と1つのMPIランクの決定を行い、必要に応じて更にRankDecision関数を呼び出す。判定処理S2407の後に判定処理S2409により、2分割したグループAの個数が0より大きい場合S2409:yes、グループAを対象にRankDecision関数を呼出すS2410。再帰呼出しが行われたRankDecision関数は、これまでのS2401からS2406までの処理を行い、グループの分割と1つのMPIランクの決定を行い、必要に応じて更にRankDecision関数を呼び出す。再帰呼出しでは、MPIランク決定に伴って更新したテーブルとサイズ、決定したMPIランク、basenodeから近いノードに所属するグループのグループID、depthに1を加えた値をRankDecision関数の引数として渡すことになる。以上、本発明を実施するための最良の形態などについて具体的に説明したが、本発明はこれに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。こうした本実施形態によれば、三次元トーラス構造の大規模PCクラスタシステム上で、MPIライブラリを用いた並列プログラムの実行時間短縮を図る、プロセスの自動最適配置が可能となる。本明細書の記載により、少なくとも次のことが明らかにされる。すなわち、前記プロセス割当システムにおいて、前記三次元トーラス構造によるネットワークトポロジーは、x、y、z軸方向の各々に環状の構造を有し、2つのノード間通信において1以上のネットワークスイッチを経由した通信が実行されるものであり、前記記憶部における各ノードの位置座標の情報は、所定ネットワークスイッチを三次元の原点座標にした場合の、各ネットワークスイッチにおける前記原点座標との相対位置座標によって三次元座標が規定されており、前記演算部は、ノード間で通信を行う場合の経路上のネットワークスイッチ数を、該当各ノードの三次元座標間におけるx、y、z座標のそれぞれの差分の合計を算定して求めるとしてもよい。また、前記プロセス割当システムにおいて、前記演算部は、前記MPIランク0のノードとの経路上のネットワークスイッチ数を各計算ノードについて算定し、MPIプログラムのジョブ投入時に指定されたプロセス数に応じた数の計算ノードを、前記算定したネットワークスイッチ数が少ない順に選択するとしてもよい。また、前記プロセス割当システムにおいて、前記演算部は、MPI集団通信関数の実行に際し、前記プロセス数に応じて選択された計算ノード群を、前記MPIランク0のノードとの経路上のネットワークスイッチ数の多少により、前記ネットワークスイッチ数が少ない方のグループであり、MPIランク0のノードをベースノードとするグループA、前記ネットワークスイッチ数が多い方のグループのグループB、の2分割するグループ分けの処理と、前記グループBに含まれる計算ノードのうち、前記ネットワークスイッチ数が最少のものを、当該グループBにおいて、MPI集団通信関数実行時に前記MPIランク0のノードから最初にデータ転送を受けるベースノードとして特定する処理と、前記グループA、Bのそれぞれに関し、ベースノード以外の計算ノードが残っている限り、前記グループ分けの処理および前記ベースノードの特定の処理を繰り返し実行する処理とを実行するとしてもよい。また、前記プロセス割当システムにおいて、前記演算部は、MPI実装に際し、前記プロセス数に応じて選択された計算ノード群について、少なくとも該計算ノード群が含む計算ノードおよび前記各グループのベースノードの情報をMPIランク情報としてファイル出力するとしてもよい。"