(57)【特許請求の範囲】
【請求項１】
プログラムを実行する並列計算機と前記並列計算機を制御する制御装置を有する並列計算機システムにおいて、
前記並列計算機は、
環状に相互接続され第３の軸に沿って並ぶ複数の計算ノードを有する計算ユニットを任意の次元数を有するメッシュ状に接続し、隣接する２つの計算ユニット間をリンクで接続し、各リンクは隣接する２つの計算ユニットの対応する計算ノード間を一対一に接続した複数の経路からなり、
前記制御装置は、
前記並列計算機が有する計算ノードから故障が発生した故障ノードを検出する故障ノード検出部と、
前記プログラムの実行に必要な計算ノード数に基づき、前記並列計算機が有する計算ノードから前記検出された故障ノードを除いて前記プログラムを実行させる実行ノードを選択する実行ノード選択部と、
前記メッシュの第１の軸を故障回避軸と定め、前記第１の軸とも前記第３の軸とも異なる前記メッシュの第２の軸方向に前記故障ノードを第１の軸の計算ノードに向けて投影し、前記第１の軸と前記第３の軸で作る平面において、故障ノードが１つ以上投影された計算ノードを回避するように、前記平面の各リンクから１つずつ経路を選択する経路選択部とを有し、
前記実行ノード選択部は、
前記経路選択部が選択した各経路と前記計算ユニット内の前記相互接続を組み合わせて一筆書きパターンを作成し、この一筆書きパターンを前記並列計算機内の全ての前記第１の軸と前記第３の軸で作る平面に適用し、該一筆書きに沿った計算ノードを実行ノードとして選択する
ことを特徴とする並列計算機システム。
【請求項２】
前記並列計算機システムにおいて、
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットが含むいずれかの計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１記載の並列計算機システム。
【請求項３】
前記並列計算機システムにおいて、
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットで折り返し、前記一端に配置された計算ユニットが含む計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１記載の並列計算機システム。
【請求項４】
前記並列計算機システムにおいて、
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記複数の計算ユニットを、前記第１の軸方向に接続された同数の計算ノードを有する複数のブロックに等分割し、前記第１の軸方向に接続されたブロックであるブロック群を前記第２の軸方向に投影し、当該複数のブロック群を投影したブロック群の一端に配置されたブロックが含むいずれかの計算ノードから、他端に配置されたブロックが含むいずれかの計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１記載の並列計算機システム。
【請求項５】
前記並列計算機システムにおいて、
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記複数の計算ユニットを、前記第１の軸方向に接続された同数の計算ノードを有する複数のブロックに等分割し、前記第１の軸方向に接続されたブロックであるブロック群を前記第２の軸方向に投影し、当該複数のブロック群を投影したブロック群の一端に配置されたブロックが含むいずれかの計算ノードから、他端に配置されたブロックが含むいずれかの計算ノードでで折り返し、前記一端に配置されたブロックが含む計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１記載の並列計算機システム。
【請求項６】
環状に相互接続され第３の軸に沿って並ぶ複数の計算ノードを有する計算ユニットを任意の次元数を有するメッシュ状に接続し、隣接する２つの計算ユニット間をリンクで接続し、各リンクは隣接する２つの計算ユニットの対応する計算ノード間を一対一に接続した複数の経路からなる並列計算機を制御する制御装置において、
前記制御装置は、
前記並列計算機が有する計算ノードから故障が発生した故障ノードを検出する故障ノード検出部と、
前記プログラムの実行に必要な計算ノード数に基づき、前記並列計算機が有する計算ノードから前記検出された故障ノードを除いて前記プログラムを実行させる実行ノードを選択する実行ノード選択部と、
前記メッシュの第１の軸を故障回避軸と定め、前記第１の軸とも前記第３の軸とも異なる前記メッシュの第２の軸方向に前記故障ノードを第１の軸の計算ノードに向けて投影し、前記第１の軸と前記第３の軸で作る平面において、故障ノードが１つ以上投影された計算ノードを回避するように、前記平面の各リンクから１つずつ経路を選択する経路選択部とを有し、
前記実行ノード選択部は、
前記経路選択部が選択した各経路と前記計算ユニット内の前記相互接続を組み合わせて一筆書きパターンを作成し、この一筆書きパターンを前記並列計算機内の全ての前記第１の軸と前記第３の軸で作る平面に適用し、該一筆書きに沿った計算ノードを実行ノードとして選択する
ことを特徴とする制御装置。
【請求項７】
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットが含むいずれかの計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項６記載の制御装置。
【請求項８】
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットで折り返し、前記一端に配置された計算ユニットが含む計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項６記載の制御装置。
【請求項９】
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記複数の計算ユニットを、前記第１の軸方向に接続された同数の計算ノードを有する複数のブロックに等分割し、前記第１の軸方向に接続されたブロックであるブロック群を前記第２の軸方向に投影し、当該複数のブロック群を投影したブロック群の一端に配置されたブロックが含むいずれかの計算ノードから、他端に配置されたブロックが含むいずれかの計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項６記載の制御装置。
【請求項１０】
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記複数の計算ユニットを、前記第１の軸方向に接続された同数の計算ノードを有する複数のブロックに等分割し、前記第１の軸方向に接続されたブロックであるブロック群を前記第２の軸方向に投影し、当該複数のブロック群を投影したブロック群の一端に配置されたブロックが含むいずれかの計算ノードから、他端に配置されたブロックが含むいずれかの計算ノードで折り返し、前記一端に配置されたブロックが含む計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項６記載の制御装置。
【請求項１１】
環状に相互接続され第３の軸に沿って並ぶ複数の計算ノードを有する計算ユニットを任意の次元数を有するメッシュ状に接続し、隣接する２つの計算ユニット間をリンクで接続し、各リンクは隣接する２つの計算ユニットの対応する計算ノード間を一対一に接続した複数の経路からなる並列計算機と前記並列計算機を制御する制御装置を有する並列計算機システムにおいて、
前記制御装置が有する故障ノード検出部が、前記複数の計算ノードから故障が発生した故障ノードを検出するステップと、
前記制御装置が有する実行ノード選択部が、前記プログラムの実行に必要な計算ノード数に基づき、前記複数の計算ノードの中から、前記検出された故障ノードを除いて前記プログラムを実行させる実行ノードを選択するステップと、
前記制御装置が有する経路選択部が、前記メッシュの第１の軸を故障回避軸と定め、前記第１の軸とも前記第３の軸とも異なる前記メッシュの第２の軸方向に前記故障ノードを第１の軸の計算ノードに向けて投影し、前記第１の軸と前記第３の軸で作る平面において、故障ノードが１つ以上投影された計算ノードを回避するように、前記平面の各リンクから１つずつ経路を選択するステップと、
前記実行ノード選択部が、前記経路選択部が選択した各経路と前記計算ユニット内の前記相互接続を組み合わせて一筆書きパターンを作成し、この一筆書きパターンを前記並列計算機内の全ての前記第１の軸と前記第３の軸で作る平面に適用し、該一筆書きに沿った計算ノードを実行ノードとして選択するステップと
を含むことを特徴とする並列計算機システムの制御方法。
【請求項１２】
前記並列計算機システムの制御方法において、
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットが含むいずれかの計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１１記載の並列計算機システムの制御方法。
【請求項１３】
前記並列計算機システムの制御方法において、
前記計算ユニットは前記複数のリンクを介して前記第１の軸方向及び前記第２の軸方向に２次元のメッシュ状に接続されるとともに、
前記各計算ユニットが備える複数の計算ノードは円環状に接続され、
前記経路選択部は、前記第１の軸方向に接続された複数の計算ユニットである計算ユニット群を１つの計算ユニット群に投影し、当該複数の計算ユニット群を投影した計算ユニット群の一端に配置された計算ユニットが含むいずれかの計算ノードから、他端に配置された計算ユニットで折り返し、前記一端に配置された計算ユニットが含む計算ノードまで一筆書きを描くように、故障ノードが１つ以上投影された計算ノードに接続されていない経路を選択することを特徴とする請求項１１記載の並列計算機システムの制御方法。
【請求項１４】
環状に相互接続され第３の軸に沿って並ぶ複数の計算ノードを有する計算ユニットを任意の次元数を有するメッシュ状に接続し、隣接する２つの計算ユニット間をリンクで接続し、各リンクは隣接する２つの計算ユニットの対応する計算ノード間を一対一に接続した複数の経路からなる並列計算機を制御する制御装置を有する並列計算機システムの前記制御装置が実行する制御プログラムにおいて、
前記制御装置が有するコンピュータに、
前記複数の計算ノードから故障が発生した故障ノードを検出するステップと、
前記プログラムの実行に必要な計算ノード数に基づき、前記複数の計算ノードの中から前記検出された故障ノードを除いて前記プログラムを実行させる実行ノードを選択するステップと、
前記メッシュの第１の軸を故障回避軸と定め、前記第１の軸とも前記第３の軸とも異なる前記メッシュの第２の軸方向に前記故障ノードを第１の軸の計算ノードに向けて投影し、前記第１の軸と前記第３の軸で作る平面において、故障ノードが１つ以上投影された計算ノードを回避するように、前記平面の各リンクから１つずつ経路を選択するステップと、
前記選択した各経路と前記計算ユニット内の前記相互接続を組み合わせて一筆書きパターンを作成し、この一筆書きパターンを前記並列計算機内の全ての前記第１の軸と前記第３の軸で作る平面に適用し、該一筆書きに沿った計算ノードを実行ノードとして選択するステップと
を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機システム、制御装置、並列計算機システムの制御方法および並列計算機システムの制御プログラムに関する。
【背景技術】
【０００２】
従来、複数の計算ノードを有する並列計算機が数値計算によるシミュレーションを実行する技術が知られている。このような技術の一例として、シミュレーションの対象となる計算空間を複数の領域に分割し、分割した各領域のシミュレーションをそれぞれ異なる計算ノードに実行させる並列計算機システムが知られている。
【０００３】
並列計算機システムは、計算空間を複数の領域に分割し、分割した各領域を複数の計算ノードに対して規則的にマッピングする。つまり、並列計算機システムは、分割した各領域を、各領域の位置関係と同様の位置関係を有する計算ノードに対してマッピングする。そして、並列計算機システムは、各計算ノードにマッピングした領域のシミュレーションを各計算ノードに実行させることで、計算空間全体のシミュレーションを実行する。
【０００４】
ここで、各計算ノードは、差分法などを用いたシミュレーションを実行する場合には、自身に隣接する計算ノードと頻繁に通信する。また、各領域の距離が近いほど領域間の相関が強くなるシミュレーションが実行される場合には、通信する計算ノード間の距離が近いほど通信量が増加する。このため、並列計算機システムは、多次元直交座標のトポロジによる直接結合網で結合した複数の計算ノードを用いて、シミュレーションを効率的に実行する。
【０００５】
図４１は、メッシュ状のトポロジによる直接結合網で結合した計算ノードのネットワークを説明するための図である。図４１に示す例では、丸印で示される複数の計算ノードのうち、それぞれ隣接する計算ノード同士がリンクを介して直接結合されている。このように接続された各計算ノードは、隣接する計算ノードと高速で通信できるので、差分法などを用いたシミュレーションを実行する場合や、近接する各領域が相関を有する場合にも、効率的にシミュレーションを実行する。
【０００６】
また、図４２は、トーラス状（円環状）のトポロジによる直接結合網で結合した計算ノードのネットワークを説明するための図である。図４２に示す例では、丸印で示される複数の計算ノードのうち、それぞれ隣接する計算ノード同士がリンクを介して直接結合され、さらに、ネットワークの両端に位置する各計算ノードがリンクで直接結合される。このように接続された各計算ノードは、両端の計算ノード間でもメッシュ状のトポロジによる直接結合網よりも高速の通信を行う事ができるので、周期境界条件を用いたシミュレーションのように、計算空間の両端の間に相関が存在する場合にも、効率的にシミュレーションを実行する。また、各計算ノードは、各計算ノード間の通信経路が増えるため、バイセクションバンド幅が増える結果、各計算ノード間のトラフィックを減少させる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平０６−１６１９７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述した各計算ノードを多次元直交座標のトポロジによる直接結合網で結合する技術では、故障した計算ノードがネットワークに混在する場合には、各領域を適切な計算ノードに対してマッピングできないという問題があった。
【０００９】
つまり、並列計算機システムは、各計算ノードに対して、プログラム等により分割した各領域を規則的にマッピングするので、故障した計算ノードがネットワークに混在する場合には、各領域の位置関係と同様の位置関係を有する計算ノードに各領域をマッピングすることができない。このような場合には、各計算ノードは、自身にマッピングされた領域に隣接する領域がマッピングされた計算ノードとの間で効率良く通信することができない。この結果、並列計算機システムは、各計算ノード間の通信効率が低下してしまうので、システム全体の性能が劣化する。
【００１０】
また、トーラス状のネットワークを分割し、複数のトーラス状のネットワークを得ることは困難である。このため、トーラス状のネットワークを有する並列計算機システムがマルチジョブ運用を実行する場合には、各ジョブをトーラス状のネットワークを用いて実行するのが困難である。
【００１１】
開示の技術は、上述した問題に鑑みてなされたものであって、各領域を適切な位置関係を有する計算ノードにマッピングする。
【課題を解決するための手段】
【００１２】
一つの側面では、プログラムを実行する並列計算機と並列計算機を制御する制御装置を有する並列計算機システムである。並列計算機は、環状に相互接続され第３の軸に沿って並ぶ複数の計算ノードを有する計算ユニットを任意の次元数を有するメッシュ状に接続し、隣接する２つの計算ユニット間をリンクで接続し、各リンクは隣接する２つの計算ユニットの対応する計算ノード間を一対一に接続した複数の経路からなる。また、制御装置は、並列計算機が有する計算ノードから故障が発生した故障ノードを検出し、プログラムの実行に必要な計算ノード数に基づき、並列計算機が有する計算ノードから検出された故障ノードを除いてプログラムを実行させる実行ノードを選択し、メッシュの第１の軸を故障回避軸と定め、第１の軸とも前記第３の軸とも異なるメッシュの第２の軸方向に故障ノードを第１の軸の計算ノードに向けて投影し、第１の軸と第３の軸で作る平面において、故障ノードが１つ以上投影された計算ノードを回避するように、平面の各リンクから１つずつ経路を選択し、選択した各経路と計算ユニット内の相互接続を組み合わせて一筆書きパターンを作成し、この一筆書きパターンを並列計算機内の全ての第１の軸と第３の軸で作る平面に適用し、該一筆書きに沿った計算ノードを実行ノードとして選択する。
【発明の効果】
【００１３】
本願に開示の技術は、一つの態様によれば、並列計算機が有する複数の計算ノードから故障が発生した故障ノードが検出された場合でも、各領域を適切に計算ノードにマッピングすることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施例１に係る並列計算機システムを説明するための図である。
【図２】図２は、実施例１に係る計算ユニットを説明するための図である。
【図３】図３は、実施例１に係る計算ノードを説明するための図である。
【図４】図４は、実施例１に係る並列計算機が有するリンクを説明するための図である。
【図５Ａ】図５Ａは、隣接する計算ユニットを接続する経路の例を説明するための図（１）である。
【図５Ｂ】図５Ｂは、隣接する計算ユニットを接続する経路の例を説明するための図（２）である。
【図５Ｃ】図５Ｃは、隣接する計算ユニットを接続する経路の例を説明するための図（３）である。
【図６Ａ】図６Ａは、実施例１に係る制御装置が実行する処理の例について説明するための図（１）である。
【図６Ｂ】図６Ｂは、実施例１に係る制御装置が実行する処理の例について説明するための図（２）である。
【図６Ｃ】図６Ｃは、実施例１に係る制御装置が実行する処理の例について説明するための図（３）である。
【図６Ｄ】図６Ｄは、実施例１に係る制御装置が実行する処理の例について説明するための図（４）である。
【図６Ｅ】図６Ｅは、実施例１に係る制御装置が実行する処理の例について説明するための図（５）である。
【図６Ｆ】図６Ｆは、実施例１に係る制御装置が実行する処理の例について説明するための図（６）である。
【図６Ｇ】図６Ｇは、実施例１に係る制御装置が実行する処理の例について説明するための図（７）である。
【図７】図７は、実施例１に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。
【図８】図８は、経路のタイプを選択する処理の一例を説明するためのフローチャートである。
【図９】図９は、実施例２に係る並列計算機システムを説明するための図である。
【図１０Ａ】図１０Ａは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（１）である。
【図１０Ｂ】図１０Ｂは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（２）である。
【図１０Ｃ】図１０Ｃは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（３）である。
【図１０Ｄ】図１０Ｄは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（４）である。
【図１０Ｅ】図１０Ｅは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（５）である。
【図１０Ｆ】図１０Ｆは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（６）である。
【図１０Ｇ】図１０Ｇは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（７）である。
【図１０Ｈ】図１０Ｈは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（８）である。
【図１０Ｉ】図１０Ｉは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（９）である。
【図１１Ａ】図１１Ａは、実施例２に係る制御装置が実行する処理の例について説明するための図（１）である。
【図１１Ｂ】図１１Ｂは、実施例２に係る制御装置が実行する処理の例について説明するための図（２）である。
【図１１Ｃ】図１１Ｃは、実施例２に係る制御装置が実行する処理の例について説明するための図（３）である。
【図１１Ｄ】図１１Ｄは、実施例２に係る制御装置が実行する処理の例について説明するための図（４）である。
【図１１Ｅ】図１１Ｅは、実施例２に係る制御装置が実行する処理の例について説明するための図（５）である。
【図１１Ｆ】図１１Ｆは、実施例２に係る制御装置が実行する処理の例について説明するための図（６）である。
【図１２Ａ】図１２Ａは、経路のタイプを選択できない例を説明するための図（１）である。
【図１２Ｂ】図１２Ｂは、経路のタイプを選択できない例を説明するための図（２）である。
【図１２Ｃ】図１２Ｃは、経路のタイプを選択できない例を説明するための図（３）である。
【図１２Ｄ】図１２Ｄは、経路のタイプを選択できない例を説明するための図（４）である。
【図１３】図１３は、実施例２に係る制御装置が経路のタイプを選択する処理の一例を説明するためのフローチャート（１）である。
【図１４】図１４は、実施例２に係る制御装置が経路のタイプを選択する処理の一例を説明するためのフローチャート（２）である。
【図１５】図１５は、非故障区間を説明するための図である。
【図１６】図１６は、実施例３に係る並列計算機システムの一例を説明するための図である。
【図１７】図１７は、実施例３に係る並列計算機が有する計算ユニット群の一例を説明するための図である。
【図１８Ａ】図１８Ａは、実施例３に係る制御装置が実行する処理の流れを説明するための図（１）である。
【図１８Ｂ】図１８Ｂは、実施例３に係る制御装置が実行する処理の流れを説明するための図（２）である。
【図１８Ｃ】図１８Ｃは、実施例３に係る制御装置が実行する処理の流れを説明するための図（３）である。
【図１８Ｄ】図１８Ｄは、実施例３に係る制御装置が実行する処理の流れを説明するための図（４）である。
【図１９】図１９は、実施例４に係る並列計算機システムの一例を説明するための図である。
【図２０】図２０は、実施例４に係る計算ユニットの一例を説明するための図である。
【図２１】図２１は、実施例４に係る計算ユニットを結合するトポロジを説明するための図である。
【図２２Ａ】図２２Ａは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（１）である。
【図２２Ｂ】図２２Ｂは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（２）である。
【図２２Ｃ】図２２Ｃは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（３）である。
【図２２Ｄ】図２２Ｄは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（４）である。
【図２２Ｅ】図２２Ｅは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（５）である。
【図２２Ｆ】図２２Ｆは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（６）である。
【図２３】図２３は、９個の計算ノードを有する計算ユニットを説明するための図である。
【図２４】図２４は、９個の計算ノードを有する計算ユニットが２次元のメッシュ状に接続された例を説明するための図である。
【図２５Ａ】図２５Ａは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（１）である。
【図２５Ｂ】図２５Ｂは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（２）である。
【図２５Ｃ】図２５Ｃは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（３）である。
【図２５Ｄ】図２５Ｄは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（４）である。
【図２５Ｅ】図２５Ｅは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（５）である。
【図２５Ｆ】図２５Ｆは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（６）である。
【図２６】図２６は、実施例４に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。
【図２７】図２７は、実施例５に係る並列計算機システムの一例を説明するための図である。
【図２８】図２８は、実施例５に係る並列計算機を説明するための図である。
【図２９】図２９は、利用者が並列計算機に実行させるプログラムの一例を説明するための図である。
【図３０】図３０は、利用者がプログラムの実行を意図する複数の計算ノードを説明するための図である。
【図３１】図３１は、実施例５に係る制御装置がｘ軸方向の経路を選択する処理の一例を説明するための図である。
【図３２】図３２は、各計算ノードに付与されるｉｘ軸方向の仮想座標を説明するためのテーブルである。
【図３３】図３３は、実施例５に係る制御装置がｙ軸方向の経路を選択する処理の一例を説明するための図である。
【図３４】図３４は、各計算ノードに付与されるｉｙ軸方向の仮想座標を説明するためのテーブルである。
【図３５】図３５は、実施例５に係る制御装置が出力するマシンファイルの一例を説明するための図である。
【図３６】図３６は、実施例５に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。
【図３７】図３７は、３次元メッシュ状に接続された計算ユニットを説明するための図である。
【図３８】図３８は、３次元トーラス状に接続された計算ノードを有する計算ユニットを３次元メッシュ状に接続した例を説明するための図（１）である。
【図３９】図３９は、３次元トーラス状に接続された計算ノードを有する計算ユニットを３次元メッシュ状に接続した例を説明するための図（２）である。
【図４０】図４０は、制御プログラムを実行するコンピュータの一例を説明するための図である。
【図４１】図４１は、メッシュ状のトポロジによる直接結合網で結合した計算ノードのネットワークを説明するための図である。
【図４２】図４２は、トーラス状のトポロジによる直接結合網で結合した計算ノードのネットワークを説明するための図である。
【発明を実施するための形態】
【００１５】
以下に添付図面を参照して本願に係る並列計算機システム、制御装置、並列計算機システムの制御方法および並列計算機システムの制御プログラムについて説明する。
【実施例１】
【００１６】
以下の実施例１では、図１を用いて、１次元の直接結合網を利用者に提供する並列計算機システムの一例を説明する。図１は、実施例１に係る並列計算機システムを説明するための図である。
【００１７】
図１に示すように、並列計算機システム１は、入力装置２、出力装置３、並列計算機１０、制御装置３０を有する。また、並列計算機１０は、複数の計算ユニット１１〜２２を有する。また、制御装置３０は、受付部３１、故障ノード検出部３２、実行ノード選択部３３、経路選択部３４、出力部３５、記憶部３６を有する。
【００１８】
なお、各計算ユニット１２〜１４については、計算ユニット１１と同様の計算ユニットであるものとして説明を省略する。また、入力装置２は、利用者が制御装置３０に対して指示をするための入力装置であり、キーボードやマウス等の入力用デバイスである。また、出力装置３は、制御装置３０による処理の結果を表示するための出力装置であり、モニタやプリンタ等の出力用デバイスである。
【００１９】
並列計算機１０は、複数の計算ユニット１１〜２２と、各計算ユニット１１〜２２を相互に接続する複数のリンクを有する。ここで、各リンクは、隣接する計算ユニット同士を接続する経路であり、隣接する２つの計算ユニットが有する複数の計算ノードを一対一に接続する複数の経路を含んでいる。
【００２０】
以下、並列計算機１０が有する各計算ユニット１１〜２２と、各計算ユニット１１〜２２が有する計算ノードについて説明する。図２は、実施例１に係る計算ユニットを説明するための図である。図２に示す例では、計算ユニット１１〜２２は、３つの計算ノード４０〜４２をそれぞれ有する。また、各計算ノード４０〜４２は、環状に接続されている。つまり、各計算ノード４０〜４２は、相互に接続されている。なお、各計算ノード４１、４２は、計算ノード４０と同様の計算ノードであるものとし、説明を省略する。
【００２１】
図３は、実施例１に係る計算ノードを説明するための図である。図３に示す例では、計算ノード４０は、ＣＰＵ（Central  Processing  Unit）５０、メモリ５１、ネットワーク・インタフェース５２を有する。ここで、ＣＰＵ５０は、計算ノード４０にマッピングされたプログラムを実行する演算装置である。また、メモリ５１は、ＣＰＵ５０がプログラムを実行する際に用いるデータが格納されるメモリである。
【００２２】
ネットワーク・インタフェース５２は、他のノード間との通信を行う装置である。具体例を説明すると、ネットワーク・インタフェース５２は、リンクを介して、他の計算ノード４１、４２が有するネットワーク・インタフェースと通信する。また、ネットワーク・インタフェース５２は、リンクを介して、計算ユニット１２が有する計算ノードのうち、計算ノード４０に対応する位置の計算ノードが有するネットワーク・インタフェースと通信する。
【００２３】
つまり、各計算ユニット１１〜２２を接続するリンクは、隣接する計算ユニットが有する各計算ノードを一対一で接続する複数の経路を有する。図４は、実施例１に係るライン状のトポロジの並列計算機が有するリンクを説明するための図である。図４に示す例では、各計算ユニット１１〜２２が有する複数の計算ノードと、隣接する計算ユニットが有する複数の計算ノードとが一対一で接続されている。つまり、隣接する計算ユニット間を接続するリンクは、各計算ユニット１１〜２２が３つの計算ノードを有する場合には、隣接する計算ユニット間の通信を伝達する３つの経路を含んでいる。
【００２４】
図１に戻って、制御装置３０は、並列計算機１０を制御する制御装置である。具体例を説明すると、制御装置３０は、利用者からプログラムを実行させる計算ノードの数の指定を受け付ける。計算ノードの数の指定を受け付けた場合には、制御装置３０は、プログラムを実行させる計算ノードを判定し、判定した各計算ノードに連続する番号を仮想座標として付与する。この際、制御装置３０は、リンクで直接接合された隣接する各計算ノードに対して、連続する仮想座標を付与する。その後、制御装置３０は、プログラムを実行させる計算ノードを示す情報と各計算ノードに付与した仮想座標とを出力する。
【００２５】
以下、制御装置３０が有する各部３１〜３６について説明する。受付部３１は、入力装置２を介して入力された利用者の指示を受け付ける。具体例を説明すると、受付部３１は、利用者が入力した計算ノードの数を、入力装置２を介して受け付ける。つまり、受付部３１は、入力装置２を介して、並列計算機１０が有する複数の計算ノードのうち、プログラムを実行させる計算ノードの数を利用者から受け付ける。そして、受付部３１は、利用者から受け付けた計算ノードの数を実行ノード選択部３３に通知する。
【００２６】
故障ノード検出部３２は、並列計算機１０が有する各計算ノードから、故障が発生した故障ノードを検出する。例えば、故障ノード検出部３２は、並列計算機１０が有する各計算ノードに対して、定期的に信号を送信し、送信した信号に対する返信がない計算ノードを故障ノードとして検出する。そして、故障ノード検出部３２は、検出した故障ノードを実行ノード選択部３３と経路選択部３４に通知する。
【００２７】
なお、故障ノード検出部３２が故障ノードを検出する処理は、他の任意の方法を用いるものであってよい。例えば、各計算ユニットは、計算ユニット内の計算ノードが動作しているか否かに応じて故障ノードを検出する故障ノード検出装置を有し、故障ノード検出部３２が、各計算ユニットが有する故障ノード検出装置から故障に関する情報を収集することとしてもよい。
【００２８】
実行ノード選択部３３は、プログラムの実行に必要な計算ノード数に基づいて、並列計算機１０が有する故障ノード以外の計算ノードから、プログラムを実行させる計算ノードを選択する。具体例を説明すると、実行ノード選択部３３は、受付部３１からプログラムを実行させる計算ノードの数の通知を受け付ける。また、計算ノード選択部３３は、故障ノード検出部３２から故障ノードの通知を受け付ける。
【００２９】
そして、実行ノード選択部３３は、以下の式（１）を用いて、プログラムを実行させる計算ユニットの数を算出する。ここで、式（１）中の「Ｎ」は、プログラムを実行させる計算ノードの数であり、「ｍ」は、１つの計算ユニットが有する計算ノードの数であり、「ｋ」は、故障ノードの数である。また、式（１）中の「ｃｅｉｌｉｎｇ」とは、括弧内の数値のうち、小数点以下の数値を切り上げる操作を示す。
【００３０】
【数１】
0005750963.tif 000002
【００３１】
また、実行ノード選択部３３は、式（１）を用いて、プログラムを実行させる計算ユニットの数を算出した場合には、算出した数の隣接する計算ユニットを選択する。つまり、実行ノード選択部３３は、算出した数の計算ユニットであって、リンクを介して直列に接続された複数の計算ユニットを選択する。そして、実行ノード選択部３３は、選択した複数の計算ユニットを経路選択部３４に通知する。
【００３２】
経路選択部３４は、実行ノード選択部３３によって選択された計算ノードを有する複数の計算ユニットについて、隣接する２つの計算ユニットを接続する各リンクから故障ノードに接続された経路以外の経路を選択する。
【００３３】
具体例を説明すると、経路選択部３４は、実行ノード選択部３３によって選択された計算ユニットの通知を受け付ける。また、経路選択部３４は、故障ノード検出部３２から、検出された故障ノードの通知を受け付ける。そして、経路選択部３４は、通知された複数の計算ユニットのうち、１つの計算ユニットのみと接続された計算ユニット、すなわち、列状に接続された複数の計算ユニットの端に位置する計算ユニットから順に、隣接する計算ユニット間での通信に使用する経路を選択する。
【００３４】
ここで、経路選択部３４は、隣接する計算ユニット間での通信に使用する経路を選択する場合には、以下に説明する処理を実行する。すなわち、経路選択部３４は、隣接する計算ユニット間での通信に使用する経路を選択する。また、経路選択部３４は、同じ経路のタイプが連続しないように、例えば、選択する経路を巡回的に変化させながら、各計算ユニット間での通信に使用する経路であって、故障ノードに接続されていない経路を選択する。
【００３５】
また、経路選択部３４は、各計算ユニット間を接続する経路をすべて選択した場合には、以下の処理を実行することで、各計算ユニットが有する計算ノードの接続経路を選択する。すなわち、経路選択部３４は、両端以外の計算ユニットについて、隣接する計算ユニットとの間において選択した経路に接続された２つの計算ノードを判別する。そして、経路選択部３４は、判別した各計算ノードを両端として、計算ユニットに含まれる故障していない全ての計算ノードを一度だけ通る経路を選択する。
【００３６】
また、経路選択部３４は、実行ノード選択部３３から通知された各計算ユニット間の経路、および、各計算ユニットが有する各計算ノードの接続経路を選択した場合には、以下の処理を実行する。すなわち、経路選択部３４は、一方の端に存在する計算ユニットから、他方の端に存在する計算ユニットまで、選択した経路および選択した計算ノード間の接続経路を辿るように、各計算ノードに連続する番号を付与する。
【００３７】
つまり、経路選択部３４は、実行ノード選択部３３から通知された各計算ユニットが有する計算ノードのうち、故障ノード検出部３２から通知された故障ノード以外の計算ノードに対して、一筆書きを描くように連続する番号を仮想座標として付与する。つまり、経路選択部３４は、実行ノード選択部３３が選択した計算ユニットを１次元のライン型の直接結合とするための仮想座標を各計算ノードに付与する。なお、１次元のライン型に直接結合された計算ノードは、直列に接続された計算ノードとなる。その後、経路選択部３４は、各計算ノードと各計算ノードに付与した仮想座標との対応を示す情報を出力部３５に通知する。
【００３８】
出力部３５は、経路選択部３４から仮想座標をどの計算ノードに付与したかを通知された場合には、各計算ノードを示す情報を、各計算ノードに付与した連続する仮想座標の順番に並べた情報を作成する。そして、出力部３５は、出力装置３を介して作成した情報を出力する。また、出力部３５は、作成した情報を記憶部３６に格納する。
【００３９】
なお、記憶部３６に格納された情報は、利用者によって作成された並列計算プログラムを並列計算機１０が実行する際に使用される。例えば、制御装置３０は、ＭＰＩ（Message  Passing  Interface）実行時のライブラリが参照して仮想座標と物理座標との対応を取得するためのファイルを作成し、作成したファイルを記憶部３６に記憶させる。また、並列計算プログラムには、複数の処理の実行命令が含まれており、各処理を実行する計算ノードが仮想座標によって指定されている。このような場合には、ライブラリが記憶部３６に格納された情報を参照し、並列計算プログラムが指定する仮想座標が付与された計算ノードを判別する。そして、ライブラリは、判別した計算ノードに対して、処理を割当てる。
【００４０】
例えば、受付部３１、故障ノード検出部３２、実行ノード選択部３３、経路選択部３４、出力部３５は、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵやＭＰＵ（Micro  Processing  Unit）などの演算処理装置などを適用する。
【００４１】
また、記憶部３６とは、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
【００４２】
次に、図５Ａ〜５Ｃおよび図６Ａ〜６Ｇを用いて、制御装置３０が実行する処理の一例について説明する。なお、図５Ａ〜５Ｃおよび図６Ａ〜６Ｇ中の丸印は、１つの計算ノードを示すものとする。また、図５Ａ〜５Ｃの複数の計算ノードを囲む点線は、1つの計算ユニットを示すものとする。また、図６Ａ〜６Ｇ中の複数の計算ノードを囲む実線は、１つの計算ユニットを示すものとする。また、図６Ａ〜６Ｇ中のバツ印が付された丸印は、故障ノードを示すものとする。
【００４３】
また、以下の説明では、制御装置３０は、各計算ユニット１１〜２２が有する各計算ノードに対して、「０」、「１」、「２」の番号を付し、各計算ユニット１１〜２２に対して、番号「０」〜「１１」を付すものとする。そして、制御装置３０は、並列計算機１０が有する各計算ノードを、計算ノードに付した番号と計算ユニットに付した番号との組み合わせによって示すものとする。例えば、制御装置３０は、「０」番の計算ユニットが有する「２」番の計算ノードを物理座標「（０、２）」で示すものとする。
【００４４】
図５Ａは、隣接する計算ユニットを接続する経路の例を説明するための図（１）である。図５Ａに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「０」の計算ノード同士を接続する経路をタイプ「０」の経路とする。また、図５Ｂは、隣接する計算ユニットを接続する経路の例を説明するための図（２）である。図５Ｂに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「１」の計算ノード同士を接続する経路をタイプ「１」の経路とする。また、図５Ｃは、隣接する計算ユニットを接続する経路の例を説明するための図（３）である。図５Ｃに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「２」の計算ノード同士を接続する経路をタイプ「２」の経路とする。
【００４５】
図６Ａは、実施例１に係る制御装置が実行する処理の例について説明するための図（１）である。例えば、制御装置３０は、入力装置２を介して、利用者からプログラムを実行させる計算ノードの数「３２」を受け付けたものとする。このような場合には、制御装置３０は、並列計算機１０が有する各計算ノードから故障した計算ノードを検出する。図６Ａに示す例では、制御装置３０は、物理座標「（４、１）」、「（９、０）」、「（９、２）」が故障ノードであることを検出する。
【００４６】
また、制御装置３０は、式（１）を「Ｎ＝３２」、「ｍ＝３」、「ｋ＝３」として解き、プログラムを実行させる計算ユニットの数「ｎ＝１２」を算出する。そして、制御装置３０は、並列計算機１０が有する計算ユニット１１〜２２を、直列に接続された番号「０」〜「１１」までの１２個の計算ユニットとして選択する。
【００４７】
図６Ｂは、実施例１に係る制御装置が実行する処理の例について説明するための図（２）である。制御装置３０は、プログラムを実行させる計算ユニットを選択した場合には、図６Ｂに示すように、「０」番の計算ユニットから順に、隣接する計算ユニットとの間で通信を中継する経路のタイプを同じタイプが連続しないように巡回的に変化させながら選択する。
【００４８】
図６Ｂに示す例では、制御装置３０は、「０」番の計算ユニットと「１」番の計算ユニットとの間においてタイプ「０」の経路を選択し、「１」番の計算ユニットと「２」番の計算ユニットとの間においてタイプ「１」の経路を選択する。また、制御装置３０は、「２」番の計算ユニットと「３」番の計算ユニットとの間においてタイプ「２」の経路を選択し、「３」番の計算ユニットと「４」番の計算ユニットとの間において、タイプ「０」の経路を再度選択する。
【００４９】
ここで、図６Ｃは、実施例１に係る制御装置が実行する処理の例について説明するための図（３）である。図６Ｃに示すように、「４」番の計算ユニットが有する「１」番の計算ノード、すなわち物理座標「（１、４）」で示される計算ノードは、故障ノードである。このため、制御装置３０は、「４」番の計算ユニットと「５」番の計算ユニットとの間においてタイプ「１」の経路を選択対象から除外する。また、制御装置３０は、「３」番の計算ユニットと「４」番の計算ユニット間において、タイプ「０」の経路が選択されているので、タイプ「０」の経路を選択対象から除外する。
【００５０】
この結果、制御装置３０は、「４」番の計算ユニットと「５」番の計算ユニット間において、タイプ「２」の経路を選択する。その後、制御装置３０は、再度、経路のタイプを巡回的に変化させながら、各計算ユニット間の経路を選択する。
【００５１】
また、制御装置３０は、２つの故障ノードを有する「９」番の計算ユニットについては、隣接する「８」番および「１０」番の計算ユニットとの間に異なるタイプの経路を選択することができない。このように、複数の故障ノードを有するため、隣接する計算ユニットとの間でそれぞれ異なるタイプの経路を選択できない場合には、制御装置３０は、同じタイプの経路を選択する。
【００５２】
つまり、図６Ｄに示すように、制御装置３０は、「８」番の計算ユニットと「９」番の計算ユニットとの間、および「９」番の計算ユニットと「１０」番の計算ユニットとの間において、タイプ「１」の経路を選択する。その後、制御装置３０は、「１０」番の計算ユニットと「１１」番の計算ユニットとの間において、タイプ「２」の経路を選択する。なお、図６Ｄは、実施例１に係る制御装置が実行する処理の例について説明するための図（４）である。
【００５３】
図６Ｅは、実施例１に係る制御装置が実行する処理の例について説明するための図（５）である。図６Ｅに示すように、制御装置３０は、「０」番から「１１」番までの計算ユニット間の経路のタイプを選択した場合には、「１」番から「１０」番までの各計算ユニット内での経路を選択する。具体例を説明すると、制御装置３０は、「１」番から「１０」番までの各計算ユニット内において、隣接する計算ユニットとの間において選択された経路に接続されている各計算ノードを両端として、他の計算ノードを１回だけ通るように、計算ユニット内の経路を選択する。
【００５４】
図６Ｆは、実施例１に係る制御装置が実行する処理の例について説明するための図（６）である。図６Ｆに示すように、制御装置３０は、各計算ユニット内での経路を選択した場合には、「０」番の計算ユニットから「１１」番の計算ユニットまで、選択された経路によって直列に接続された３２個の計算ノードを識別する。
【００５５】
図６Ｇは、実施例１に係る制御装置が実行する処理の例について説明するための図（７）である。図６Ｇに示すように、制御装置３０は、識別した３２個の計算ノードに「０」から「３１」までの番号を仮想座標として付与する。つまり、制御装置３０は、選択した経路によって隣接する計算ノードと直接結合し、かつ、直列に接続している複数の計算ノードに対して、連続する仮想座標を付与する。
【００５６】
また、制御装置３０は、仮想座標を付与した物理座標を仮想座標の順番に記載したファイル（マシンファイル）を作成する。そして、制御装置３０は、作成したファイルを、出力装置３を介して出力するとともに、作成したファイルを記憶する。
【００５７】
［制御装置の処理の流れ］
次に、図７を用いて、制御装置３０が実行する処理の流れの一例について説明する。図７は、実施例１に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明では、制御装置３０は、プログラムを実行させる計算ユニットとして、ｎ個の計算ユニットを選択するものとする。また、図７に示す例では、制御装置３０は、入力装置２を介して、プログラムを実行させる計算ノードの数「Ｎ」の入力を受付けたことをトリガとして、処理を開始する。
【００５８】
まず、制御装置３０は、式（１）を用いて、プログラムを実行させる連続した「０」〜「ｎ−１」番の計算ユニットを選択する（ステップＳ１０１）。次に、制御装置３０は、各計算ユニット間の経路のタイプＣＴ（０）〜ＣＴ（ｎ−２）を決定する（ステップＳ１０２）。なお、ＣＴ（ｘ）は、「ｘ」番の計算ユニットと「ｘ＋１」番の計算ユニットとの間において、制御装置３０が選択した経路を示す記号である。
【００５９】
次に、制御装置３０は、「１」〜「ｎ−２」番の計算ユニット内における経路を選択する（ステップＳ１０３）。続いて、制御装置３０は、「０」番の計算ユニットと「ｎ−１」番の計算ユニット、すなわち両端の計算ユニット、内における経路を選択する（ステップＳ１０４）。そして、制御装置３０は、選択した経路に沿って、各計算ノードに仮想座標を付与する（ステップＳ１０５）。その後、制御装置３０は、仮想座標の順に各計算ノードの物理座標を記載したファイルを出力および記憶し（ステップＳ１０６）、処理を終了する。
【００６０】
次に、図８を用いて、制御装置３０が経路のタイプを選択する処理（図７中ステップＳ１０２）について詳しく説明する。図８は、経路のタイプを選択する処理の一例を説明するためのフローチャートである。なお、図８中の「Ｆ」は、故障ノードを示す物理座標の集合体である。
【００６１】
まず、制御装置３０は、パラメータ「ｘ」とパラメータ「ｕ」を初期化し、「ｘ＝０」、「ｕ＝０」とする（ステップＳ２０１）。次に、制御装置３０は、「ｃｏｕｎｔｅｒ」の値を１つの計算ユニットが有する計算ノードの数「ｍ」にセットする（ステップＳ２０２）。次に、制御装置３０は、「ｕ＋１」を「ｍ」で除算した剰余の値を算出し、算出した値を新たな「ｕ」とする（ステップＳ２０３）。
【００６２】
そして、制御装置３０は、計算ノードの物理座標「（ｘ、ｕ）」または「（ｘ＋１、ｕ）」が「Ｆ」に含まれているか否かを判別する（ステップＳ２０４）。その後、制御装置３０は、物理座標「（ｘ、ｕ）」または「（ｘ＋１、ｕ）」が「Ｆ」に含まれている場合には（ステップＳ２０４肯定）、以下の処理を実行する。すなわち、制御装置３０は、「ｃｏｕｎｔｅｒ」の値から１を減算し、新たな「ｃｏｕｎｔｅｒ」の値が「０」よりも大きいか否かを判別する（ステップＳ２０５）。
【００６３】
また、制御装置３０は、新たな「ｃｏｕｎｔｅｒ」の値が０よりも大きいと判別した場合には（ステップＳ２０５肯定）、再度、ステップＳ２０３の処理を行う。また、制御装置３０は、新たな「ｃｏｕｎｔｅｒ」の値が「０」に達したと判別した場合には（ステップＳ２０５否定）、経路を選択することができないと判断し、実行ノード選択部３３に制御を戻して、他の複数の計算ユニットを選択し、以降の処理を繰り返す。あるいは、経路を選択することができないと判断した場合には、出力装置３を介して、利用者にエラー終了を通知してもよい（ステップＳ２０６）。
【００６４】
一方、制御装置３０は、物理座標「（ｘ、ｕ）」または「（ｘ＋１、ｕ）」が「Ｆ」に含まれていないと判別した場合には（ステップＳ２０４否定）、「ＣＴ（ｘ）」を「ｕ」にセットする（ステップＳ２０７）。つまり、制御装置３０は、「ｘ」番目の計算ユニットと「ｘ＋１」番目の計算ユニットとの間において、タイプ「ｕ」の経路を選択する。
【００６５】
その後、制御装置３０は、「ｘ」の値に「１」を加算した値を新たな「ｘ」の値とし、新たな「ｘ」が「ｎ−２」以下であるか否かを判別する（ステップＳ２０８）。つまり、制御装置３０は、プログラムを実行させる全ての計算ユニット間における経路を選択したか否かを判別する。その後、制御装置３０は、新たな「ｘ」が「ｎ−２」以下であると判別した場合、つまり、プログラムを実行させる全ての計算ユニット間における経路を選択していない場合には（ステップＳ２０８肯定）、再度ステップＳ２０２を実行する。また、制御装置３０は、新たな「ｘ」が「ｎ−２」以下ではないと判別した場合、つまり、プログラムを実行させる全ての計算ユニット間における経路を選択した場合には、経路のタイプを選択する処理を終了する。
【００６６】
［実施例１の効果］
上述したように、制御装置３０は、並列計算機１０が有する全ての計算ノードから故障ノードを検出する。また、制御装置３０は、プログラムの実行に必要な計算ノード数に基づいて、並列計算機１０が有する計算ノードであって、検出した故障ノード以外の計算ノードからプログラムを実行させる計算ノードを選択する。
【００６７】
そして、制御装置３０は、選択した計算ノードを含む隣接する計算ユニット間において、検出された故障ノード以外の計算ノードに接続された経路を選択する。このため、制御装置３０は、シミュレーションの対象となる計算空間を分割した各領域を適切な位置関係を有する計算ノードにマッピングすることができる。
【００６８】
つまり、制御装置３０は、並列計算機１０が有する計算ノードのうち、故障ノード以外の計算ノード間において通信を中継する経路を、計算ノードが１次元の直接結合網を構成するように選択する。このため、制御装置３０は、隣接する計算ノード間における通信が効率的に行われることを保証する複数の計算ノードを有する１次元の直接結合網を提供することができる。この結果、並列計算機システム１は、計算空間を直線状の１次元領域に分割した際に、分割した各領域を各領域と同じ位置関係を有する各計算ノードにマッピングすることができるので、故障ノードが存在する場合にも、システム全体の性能を保持することができる。
【００６９】
また、並列計算機システム１は、リンクを介して直列に接続された複数の計算ユニット１１〜２２を有する。また、各計算ユニット１１〜２２は、相互に接続された複数の計算ノードを有する。そして、制御装置３０は、プログラムを実行させる計算ノードを選択し、選択した計算ノード間の経路を、一筆書きを描くように選択する。
【００７０】
すなわち、制御装置３０は、連続した計算ユニット間の経路のうち、故障ノードに接続されていない経路を選択する。また、制御装置３０は、各計算ユニットについて、選択した計算ユニット間の経路に接続されている計算ノードを両端とし、各計算ノードを一度だけ通る計算ユニット内の経路を選択する。その後、制御装置３０は、選択した計算ユニット間の経路および選択した計算ユニット内の経路に従って、直接結合された各計算ノードに連続する仮想ノード番号を付与する。このため、並列計算機システム１は、故障ノードが存在する場合にも、１次元のトポロジを有する直接結合網を利用者に提供することができる。
【００７１】
また、制御装置３０は、各計算ユニット１１〜２２の間のリンクから経路を選択する場合には、巡回的に異なるタイプの経路を選択する。このため、並列計算機システム１は、各計算ノード間の通信を効率的に行わせることができる。
【００７２】
つまり、制御装置３０が同じタイプの経路を連続して選択した場合には、１つの計算ユニットが有する複数の計算ノードの通信を１つの計算ノードがすべて中継することとなり、通信効率が悪化する。しかし、制御装置３０は、ある計算ユニット内に故障していない計算ノードが２つ以上ある場合には、この計算ユニットと隣接する計算ユニットとの間において、それぞれ異なるタイプの経路を選択する。この結果、並列計算機システム１は、１つの計算ユニットが有する複数の計算ノードの通信を１つの計算ノードが中継する状態を防止し、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障することによって、各計算ノード間の通信を効率的に行わせるとともに、各計算ノードにプログラムを効率的に実行させることができる。
【実施例２】
【００７３】
実施例２では、１次元のトーラス型のトポロジを有する直接結合網のネットワークを利用者に提供する並列計算機システム１ａについて説明する。図９は、実施例２に係る並列計算機システムを説明するための図である。図９に示す例では、並列計算機システム１ａは、入力装置２、出力装置３、並列計算機１０、制御装置３０ａを有する。また、並列計算機１０は、複数の計算ユニット１１〜２２を有する、また、制御装置３０ａは、受付部３１、故障ノード検出部３２、実行ノード選択部３３、経路選択部３４ａ、出力部３５、記憶部３６を有する。
【００７４】
すなわち、並列計算機システム１ａは、実施例１に係る経路選択部３４と対応する経路選択部３４ａによって実行される処理のみが、実施例１に係る並列計算機システム１と異なる。このため、入力装置２、出力装置３、並列計算機１０、受付部３１、故障ノード検出部３２、実行ノード選択部３３、出力部３５、記憶部３６については、実施例１において同一の符号を付した各部と同様の処理を実行するものとし、以後の説明を省略する。
【００７５】
経路選択部３４ａは、実行ノード選択部３３が選択した複数の計算ノードを有する各計算ユニット間の各リンクから、故障ノードに接続されていない２つの経路を往路と復路として選択する。そして、経路選択部３４ａは、両端以外の計算ユニットについて、往路に接続された計算ノード間の接続経路と、復路に接続された計算ノード間の接続経路とを、故障していない各計算ノードを各接続経路が一度だけ通るように選択する。
【００７６】
また、経路選択部３４ａは、両端の計算ユニットについて、往路に接続された計算ノードと復路に接続された計算ノードとを両端として、他の故障していない計算ノードを一度だけ通る接続経路を選択する。その後、経路選択部３４ａは、計算ユニット間および計算ユニット内において選択した各経路を辿るように、直接結合された各計算ノードに対して、連続する番号を仮想座標として付与する。
【００７７】
つまり、経路選択部３４ａは、実行ノード選択部３３が選択した計算ノードを１次元のトーラス型の直接結合とするための仮想座標を各計算ノードに付与する。なお、１次元のトーラス型に直接結合した各計算ノードは、リング状に接続されることとなる。このため、制御装置３０ａは、並列計算機１０に故障ノードが存在する場合にも、利用者によって指定された数の計算ノードをトーラス型に直接結合したシステムを利用者に提供することができる。
【００７８】
次に、図１０Ａ〜１０Ｉを用いて、制御装置３０ａが各計算ユニット間のリンクから選択する経路のタイプの例について説明する。図１０Ａは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（１）である。図１０Ａに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「０」の計算ノード同士、および、番号「１」の計算ノード同士を接続する経路をタイプ「０１」とする。
【００７９】
また、図１０Ｂは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（２）である。図１０Ｂに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「１」の計算ノード同士、および、番号「２」の計算ノード同士を接続する経路をタイプ「１２」とする。また、図１０Ｃは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（３）である。図１０Ｃに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「０」の計算ノード同士、および、番号「２」の計算ノード同士を接続する経路をタイプ「２０」とする。
【００８０】
なお、図１０Ａ〜１０Ｃでは、各計算ユニットが３つの計算ノードを有する例について説明したが、各計算ユニットは、４つ以上の計算ノードを有してもよい。このような場合には、各計算ユニット間のリンクから選択される経路のタイプは、以下の説明のようになる。例えば、図１０Ｄは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（４）である。図１０Ｄに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「０」の計算ノード同士、および、番号「１」の計算ノード同士を接続する経路はタイプ「０１」となる。
【００８１】
また、図１０Ｅは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（５）である。図１０Ｅに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「１」の計算ノード同士、および、番号「２」の計算ノード同士を接続する経路はタイプ「１２」となる。また、図１０Ｆは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（６）である。図１０Ｆに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「２」の計算ノード同士、および、番号「３」の計算ノード同士を接続する経路はタイプ「２３」となる。
【００８２】
また、図１０Ｇは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（７）である。図１０Ｇに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「０」の計算ノード同士、および、番号「３」の計算ノード同士を接続する経路はタイプ「３０」となる。また、図１０Ｈは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（８）である。図１０Ｈに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「０」の計算ノード同士、および、番号「２」の計算ノード同士を接続する経路はタイプ「０２」となる。
【００８３】
また、図１０Ｉは、実施例２において隣接する計算ユニットを接続する経路の例を説明するための図（９）である。図１０Ｉに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「１」の計算ノード同士、および、番号「３」の計算ノード同士を接続する経路はタイプ「１３」となる。
【００８４】
次に、図１１Ａ〜図１１Ｆを用いて、制御装置３０ａが経路を選択する処理について説明する。図１１Ａは、実施例２に係る制御装置が実行する処理の例について説明するための図（１）である。例えば、制御装置３０ａは、入力装置２を介して、利用者からプログラムを実行させる計算ノードの数「３２」を受け付けたものとする。
【００８５】
このような場合には、制御装置３０ａは、仮想座標を付与する計算ユニットとして、計算ユニット１１〜２２を選択し、各計算ユニットに「０」〜「１１」までの番号を付与する。また、制御装置３０ａは、各計算ユニット１１〜２２が有する計算ノードに「０」〜「２」までの番号を付与する。また、制御装置３０ａは、各計算ノードの動作を確認し、物理座標「（４、１）」、「（８、０）」の計算ノードが故障ノードであると検出する。
【００８６】
図１１Ｂは、実施例２に係る制御装置が実行する処理の例について説明するための図（２）である。まず、制御装置３０ａは、検出された故障ノードを含む番号「４」の計算ユニットと番号「８」の計算ユニットを識別する。そして、制御装置３０ａは、識別した「４」番の計算ユニットと、「４」番の計算ユニットに隣接する計算ユニットとの間の経路のタイプを選択する。
【００８７】
つまり、制御装置３０ａは、「４」番の計算ユニットと隣接する「３」番の計算ユニットとの間、および、「４」番の計算ユニットと隣接する「５」番の計算ユニットとの間において、タイプ「２０」の経路を選択する。また、制御装置３０ａは、「８」番の計算ユニットと隣接する「７」番の計算ユニットとの間、および、「８」番の計算ユニットと隣接する「９」番の計算ユニットとの間において、タイプ「１２」の経路を選択する。なお、図１１Ａ〜１１Ｆに示す例では、各計算ユニットが「３」個の計算ノードを有するので、１つの故障ノードを有する計算ユニットと、隣接する計算ユニットとの間において選択される経路のタイプは、図１１Ａ〜１１Ｆに示す例のように定めることができる。
【００８８】
図１１Ｃは、実施例２に係る制御装置が実行する処理の例について説明するための図（３）である。制御装置３０ａは、故障ノードを有する計算ユニットと隣接する計算ユニットとの間の経路のタイプを選択した場合には、「０」番の計算ユニットから順に、隣接する計算ユニット間で通信を中継する経路のタイプを、例えば巡回的に変化させながら選択する。
【００８９】
図１１Ｃに示す例では、制御装置３０ａは、「０」番の計算ユニットと「１」番の計算ユニットとの間においてタイプ「２０」の経路を選択し、「１」番の計算ユニットと「２」番の計算ユニットとの間においてタイプ「０１」の経路を選択する。また、制御装置３０ａは、「２」番の計算ユニットと「３」番の計算ユニットとの間においてタイプ「１２」の経路を選択する。また、制御装置３０ａは、他の計算ユニット間においても、巡回的に経路のタイプを選択し、実行ノード選択部３３によって選択された計算ノードを有する全ての計算ユニット間における経路のタイプを選択する。
【００９０】
図１１Ｄは、実施例２に係る制御装置が実行する処理の例について説明するための図（４）である。図１１Ｄに示すように、制御装置３０ａは、実行ノード選択部３３によって選択された計算ノードを有する全ての計算ユニット間における経路のタイプを選択した場合には、各計算ユニット内における経路を選択する。
【００９１】
具体例を説明すると、制御装置３０ａは、両端以外の各計算ユニットについて、選択された経路のタイプが「ｉｊ」と「ｊｋ」（「ｉ≠ｊ≠ｋ」）で表すことができる場合には、「ｉ」番の計算ノードと「ｋ」番の計算ノードとを接続する経路を選択する。また、制御装置３０ａは、各計算ユニットについて、隣接する計算ユニットとの間において選択された経路のタイプが同じタイプであった場合には、計算ユニット内の計算ノードを接続する経路が無いと判断する。
【００９２】
図１１Ｅは、実施例２に係る制御装置が実行する処理の例について説明するための図（５）である。図１１Ｅに示すように、制御装置３０ａは、両端以外の各計算ユニットについて、隣接する計算ユニット間の経路および計算ユニット内の各計算ノードを接続する経路とを選択した場合には、両端の計算ユニット内の各計算ノードを接続する経路を選択する。ここで、図１１Ｅに示す例では、制御装置３０ａは、利用者から指定された計算ノードの数が３２個であるので、「０」番の計算ユニットと「１１」番の計算ユニットとにおいて、合わせて２つの計算ノードを除外した経路を選択する。
【００９３】
図１１Ｆは、実施例２に係る制御装置が実行する処理の例について説明するための図（６）である。図１１Ｆに示すように、制御装置３０ａは、隣接する計算ユニット間の各経路、および、各計算ユニット内における計算ノードを接続する経路を選択した場合には、選択した経路を辿るように、各計算ノードに連続した番号を仮想座標として付与する。その後、制御装置３０ａは、各計算ノードの物理座標を仮想座標の順に並べたファイルを出力、および記憶する。
【００９４】
なお、制御装置３０ａは、１つの計算ユニット内に「４」個以上の相互に接続された計算ノードが存在する場合にも、上述した処理を行うことで、適切に仮想座標を付与することができる。ここで、制御装置３０ａは、両端以外の各計算ユニットについて、選択された経路のタイプが「ｉｊ」と「ｊｋ」（「ｉ≠ｊ≠ｋ」）で表すことができる場合には、「ｉ」番、「ｊ」番、「ｋ」番以外の計算ノードをすべて通って「ｉ」番の計算ノードと「ｋ」番の計算ノードとを接続する経路を選択する。また、制御装置３０ａは、選択された経路のタイプが「ｉｊ」と「ｋｌ」（「ｉ≠ｊ≠ｋ≠ｌ」）で表すことができる場合には、「ｉ」番と「ｋ」番、「ｊ」番と「ｌ」番をそれぞれ接続するか、「ｉ」番と「ｌ」番、「ｊ」番と「ｋ」番をそれぞれ接続するが、「ｉ」番、「ｊ」番、「ｋ」番、「ｌ」番以外の計算ノードもすべて通るように経路を選択する。
【００９５】
また、制御装置３０ａは、１つの計算ユニットが複数の故障ノードを有する場合、故障ノードを有する２つの計算ユニットが隣接、または、１つの計算ユニットを挟み込むように存在する場合には、経路のタイプを選択できない場合がある。以下、図１２Ａ〜１２Ｃを用いて、具体例を説明する。
【００９６】
図１２Ａは、経路のタイプを選択できない例を説明するための図（１）である。図１２Ａに示すように、制御装置３０ａは、故障ノードを有する２つの計算ユニットが隣接する場合にも、２つの故障ノードが同じ番号である場合には、適切に経路を選択することができる。
【００９７】
一方、図１２Ｂは、経路のタイプを選択できない例を説明するための図（２）である。図１２Ｂに示すように、制御装置３０ａは、異なる番号の故障ノードを有する計算ユニットが隣接する場合には、往路又は復路の一方しか選択することができない。このような場合には、制御装置３０ａは、エラーを利用者に返し、仮想座標の付与ができないことを通知する。
【００９８】
なお、制御装置３０ａは、並列計算機１０が多数の計算ユニットを有する場合には、新たに別の範囲に位置する複数の計算ユニットを選択し、選択した複数の計算ユニットについて、順次経路を選択することとしてもよい。
【００９９】
図１２Ｃは、経路のタイプを選択できない例を説明するための図（３）である。図１２Ｃに示す例では、異なる番号の故障ノードを有する計算ユニットが、１つの計算ユニットを挟んで隣接している。このような場合には、制御装置３０ａは、中央の計算ユニットにおいて、全ての計算ノードを接続する経路を選択することができる。
【０１００】
一方、図１２Ｄは、経路のタイプを選択できない例を説明するための図（４）である。図１２Ｄに示す例では、同じ番号の故障ノードを有する計算ユニットが、１つの計算ユニットを挟んで隣接している。このような場合には、制御装置３０ａは、中央の計算ユニットにおいて、全ての計算ノードを接続する経路を選択することができない。このような場合には、制御装置３０ａは、エラーを利用者に返し、仮想座標の付与ができないことを通知する。または、中央の計算ユニットの同じ位置のノードも故障ノードであるかのように扱えば、１ノードを無駄にするが仮想座標の付与ができる。
【０１０１】
なお、上述した例では、制御装置３０ａは、故障ノードを有する計算ユニットについて経路を選択した後に、他の計算ユニットについての故障ノードを選択することとした。しかし、実施例はこれに限定されるものではなく、制御装置３０ａは、制御装置３０と同様に、端に存在する計算ユニットから、他の端に存在する計算ユニットまで順番に、各計算ユニット間の経路を順次選択することとしてもよい。
【０１０２】
［制御装置３０ａの処理の流れ］
次に、図１３、図１４を用いて、制御装置３０ａが経路のタイプを選択する処理の流れについて説明する。図１３は、実施例２に係る制御装置が経路のタイプを選択する処理の一例を説明するためのフローチャート（１）である。なお、制御装置３０ａは、図７に示す制御装置３０と同様の処理を実行するものとし、図７中のステップＳ１０２に対応する処理として、図１３および図１４に示す処理を実行するものとする。
【０１０３】
まず、制御装置３０ａは、故障ノードを有する全ての計算ユニットについて、ステップＳ３０２〜Ｓ３０３に示す処理を実行したか否かを判別する（ステップＳ３０１）。そして、制御装置３０ａは、ステップＳ３０２〜Ｓ３０３の処理を実行していないと判別した場合には（ステップＳ３０１否定）、ステップＳ３０２〜Ｓ３０３の処理を実行していない計算ユニットについて、以下の処理を実行する。
【０１０４】
すなわち、制御装置３０ａは、ステップＳ３０２〜Ｓ３０３の処理を実行していない計算ユニットと、隣接する計算ユニットとの間において、経路のタイプを選択する（ステップＳ３０２）。そして、制御装置３０ａは、経路のタイプの選択が成功したか否かを判別し（ステップＳ３０３）、成功した場合には（ステップＳ３０３肯定）、次の未処理の故障ノードを有する計算ユニットについて、ステップＳ３０１からの処理を実行する。
【０１０５】
一方、制御装置３０ａは、経路のタイプの選択が失敗した場合には（ステップＳ３０３否定）、利用者にエラーを返し、処理を終了する。すなわち、制御装置３０ａは、図１２Ｂや図１２Ｄに示すように、同じ番号の故障ノードを有する計算ノードが隣接、あるいは１つの計算ノードを挟んで存在する場合には、利用者にエラーを返し、処理を終了する。
【０１０６】
また、制御装置３０ａは、故障ノードを有する全ての計算ユニットについてステップＳ３０２〜Ｓ３０３の処理を実行した場合には（ステップＳ３０１肯定）、図１４に示す処理を実行する。図１４は、実施例２に係る制御装置が経路のタイプを選択する処理の一例を説明するための図（２）である。なお、図１５は、非故障区間を説明するための図である。以下の説明では、図１５に示すように、故障ノードを有さない計算ユニットが「ｘｌ」番から「ｘｕ」番まで連続する区間を非故障区間「ｘｌ、ｘｕ」とする。
【０１０７】
図１４に戻って、制御装置３０ａは、全ての非故障区間「ｘｌ、ｘｕ」について、ステップＳ３０５〜Ｓ３０９の処理を実行したか否かを判別する（ステップＳ３０４）。そして、制御装置３０ａは、全ての非故障区間「ｘｌ、ｘｕ」についてステップＳ３０５〜Ｓ３０９の処理を実行していないと判別した場合には（ステップＳ３０４否定）、パラメータ「ｘ」の値を「ｘｌ」にセットする（ステップＳ３０５）。次に、制御装置３０ａは、パラメータ「ｘ」が「ｘ＝ｘｕ−１」を満たすか否かを判別する（ステップＳ３０６）。
【０１０８】
また、制御装置３０ａは、パラメータ「ｘ」が「ｘ＝ｘｕ−１」を満たさない場合には（ステップＳ３０６否定）、ＣＴ（ｘ）としてＣＴ（ｘ−１）とは異なる経路のタイプを選択する（ステップＳ３０７）。この際、制御装置３０ａは、「ｘ＝０」である場合には、任意のタイプの経路を選択してよい。
【０１０９】
次に、制御装置３０ａは、「ｘ」の値に「１」を加算した値を新たな「ｘ」の値とし（ステップＳ３０８）、再度、「ｘ」が「ｘ＝ｘｕ−１」を満たすか否かを判別する（ステップＳ３０６）。一方、制御装置３０ａは、「ｘ」が「ｘ＝ｘｕ−１」を満たす場合には（ステップＳ３０６肯定）、ＣＴ（ｘｕ−１）としてＣＴ（ｘｕ−２）およびＣＴ（ｘｕ）とは異なるタイプの経路を選択する（ステップＳ３０９）。その後、制御装置３０ａは、再度、全ての非故障区間「ｘｌ、ｘｕ」についてステップＳ３０５〜Ｓ３０９の処理を実行したか否かを判別する（ステップＳ３０４）。そして、制御装置３０ａは、全ての非故障区間「ｘｌ、ｘｕ」についてステップＳ３０５〜Ｓ３０９の処理を実行したと判別した場合には（ステップＳ３０４肯定）、処理を終了する。
【０１１０】
［実施例２の効果］
上述したように、制御装置３０ａは、実行ノード選択部３３によって選択された実行ノードを含む複数の計算ユニットのうち、一端に存在する計算ユニットから、故障ノードに接続されていない往路と復路とを選択する。そして、制御装置３０ａは、選択した往路と復路とを辿るように、直接結合された複数の計算ノードに対して、連続する番号を仮想座標として付与する。このため、制御装置３０ａを有する並列計算機システム１ａは、並列計算機１０に故障ノードが存在する場合にも、１次元のトーラス状のトポロジを有する直接結合網を利用者に提供することができる。この結果、並列計算機システム１ａは、計算対象となる計算空間を１次元のトーラス状に分割した際に、故障ノードが存在する場合にも、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことが保障される。
【実施例３】
【０１１１】
実施例３では、故障ノードが存在する場合にも、２次元のメッシュ状に直接結合された計算ノードのネットワークを提供する並列計算機システム１ｂについて説明する。図１６は、実施例３に係る並列計算機システムの一例を説明するための図である。なお、図１６に示す並列計算機システム１ｂが有する各部のうち、実施例１、２において説明した処理と同じ処理を実行するものについては、実施例１、２と同じ符号を付し、説明を省略する。図１６に示す例では、並列計算機システム１ｂは、入力装置２、出力装置３、制御装置３０ｂ、並列計算機１０ａを有する。
【０１１２】
図１７は、実施例３に係る並列計算機が有する計算ユニット群の一例を説明するための図である。並列計算機１０ａは、複数のリンクを介して、２次元のメッシュ状に直接結合された複数の計算ユニット１１ａ〜２２ａを有する。各計算ユニット１１ａ〜２２ａは、３本の経路を有するリンクで接続されている。また、計算ユニット１１ａ〜２２ａは、計算ユニット１１〜２２と同様に、環状、すなわち相互に接続された３個の計算ノードを有する。
【０１１３】
また、図１７に示す例では、各計算ノードに３次元の物理座標が付与されている。具体例を説明すると、各計算ユニットには、図１７中のｘ軸方向に「０」〜「４」、ｙ軸方向に「０」〜「２」の番号が付与されている。また、各計算ユニットが有する３つの計算ノードには図１７中のｕ軸方向の番号として「０」〜「２」が付与されている。つまり、各計算ユニット１１ａ〜２２ａには、「（ｘ、ｙ）」による２次元の物理座標が付与され、各計算ノードは「（ｘ、ｙ、ｕ）」の三次元の物理座標が付与されることとなる。
【０１１４】
図１６に戻って、制御装置３０ｂは、受付部３１ａ、故障ノード検出部３２、実行ノード選択部３３ａ、経路選択部３４ｂ、出力部３５、記憶部３６を有する。受付部３１ａは、利用者が入力装置２を介して入力した、２次元メッシュ状のネットワークのサイズを受け付ける。
【０１１５】
具体例を説明すると、受付部３１ａは、プログラムを実行させる２次元メッシュ状のネットワークのサイズとして、仮想座標におけるｉｘ軸方向の計算ノードの数と、仮想座標におけるｉｙ軸方向の計算ノードの数との指定を受け付ける。その後、受付部３１ａは、受け付けたサイズを実行ノード選択部３３ａに通知する。
【０１１６】
例えば、受付部３１ａは、利用者から、ｉｘ軸方向に１２個の計算ノードを有し、ｉｙ軸方向に３個の計算ノードを有する２次元メッシュ状のネットワークを示すサイズ「（１２、３）」を受け付ける。そして、受付部３１ａは、受け付けたサイズ「（１２、３）」を実行ノード選択部３３ａに通知する。
【０１１７】
実行ノード選択部３３ａは、受付部３１ａからネットワークのサイズの通知を受けた場合には、通知されたｉｘ軸方向のサイズに基づいて、並列計算機１０からプログラムを実行させる複数の計算ユニットである計算ユニット群を選択する。また、実行ノード選択部３３ａは、通知されたｉｙ軸方向のサイズに基づいて、選択した計算ユニット群の各計算ユニットとリンクで接続された複数の計算ユニットを有する複数の計算ユニット群を選択する。
【０１１８】
具体例を説明すると、実行ノード選択部３３ａは、故障ノード検出部３２から故障ノードの座標を取得する。また、実行ノード選択部３３ａは、受付部３１ａからネットワークのサイズの通知を受ける。また、実行ノード選択部３３ａは、故障回避軸を選択し、故障ノードが位置する座標のうち、故障回避軸以外の軸方向成分を除いた座標を故障回避単位として検出する。
【０１１９】
そして、実行ノード選択部３３ａは、検出した故障回避単位の数を「ｋ」とし、受付部３１ａから通知されたネットワークのサイズのうち、ｉｘ軸方向のサイズを「Ｎ」として、式（１）から計算ユニット群に含まれる計算ユニットの数を算出する。また、実行ノード選択部３３ａは、受付部３１ａから通知されたネットワークのサイズのうち、ｉｙ軸方向のサイズをプログラムを実行させる計算ユニット群の数として判別する。その後、実行ノード選択部３３ａは、判別した数の計算ユニット群を並列計算機１０ａから選択し、選択した計算ユニット群と検出した故障回避単位と故障回避軸とを経路選択部３４ｂに通知する。
【０１２０】
例えば、実行ノード選択部３３ａは、受付部３１ａからネットワークのサイズ「（１２、３）」の通知を受ける。また、実行ノード選択部３３ａは、故障ノード検出部３２から、故障ノードの物理座標「（ｘ、ｙ、ｕ）＝（１、０、１）、（３、１、２）、（３、２、２）」の通知を受ける。また、実行ノード選択部３３ａは、故障回避軸をｘ軸方向とする。
【０１２１】
このような場合には、実行ノード選択部３３ａは、故障回避単位として「（１、１）、（３、２）」を検出する。そして、実行ノード選択部３３ａは、「ｋ＝２」、「Ｎ＝１２」、「ｍ＝３」として（１）式を解き、１つの計算ユニット群が有する計算ユニットの数「５」を算出する。また、実行ノード選択部３３ａは、通知されたネットワークのサイズが「（１２、３）」であるので、プログラムを実行される計算ユニット群の数が「３」であると判別する。
【０１２２】
このため、実行ノード選択部３３ａは、ｘ軸方向に５つの計算ユニットが接続され、ｙ軸方向に３つの計算ユニットが接続された２次元のネットワークを並列計算機１０ａから選択し、選択した計算ユニット群を経路選択部３４ｂに通知する。また、実行ノード選択部３３ａは、故障回避軸がｘ軸方向であることと、故障回避単位「（１、１）、（３、２）」を経路選択部３４ｂに通知する。
【０１２３】
経路選択部３４ｂは、実行ノード選択部３３ａから通知された複数の計算ユニット群のそれぞれについて、隣接する２つの計算ユニットを接続する各リンクから故障ノードに接続された経路以外の経路を選択する。
【０１２４】
具体例を説明すると、経路選択部３４ｂは、実行ノード選択部３３ａが選択した複数の計算ユニット群と故障回避単位と故障回避軸との通知を受け付ける。このような場合には、経路選択部３４ｂは、故障回避単位の座標を含む全ての計算ノードを故障ノードとみなす。また、経路選択部３４ｂは、通知された複数の計算ユニット群のうち１つの計算ユニット群について、実施例１と同様の手法を用いて、故障ノード以外の複数の計算ノードを直列かつ直接結合させる経路を選択する。
【０１２５】
そして、経路選択部３４ｂは、経路を辿るように、各計算ノードに連続する仮想座標を付与する。その後、経路選択部３４ｂは、他の計算ユニット群についても、同じように仮想座標を付与する。つまり、経路選択部３４ｂは、１つの計算ユニット群について経路を選択した場合には、他の計算ユニット群についても同じ経路を適用し、適用した経路を辿るように各計算ノードに連続する仮想座標を付与する。また、経路選択部３４ｂは、各計算ノードに付与した仮想座標を、計算ユニット群ごとに異なる次元の仮想座標として、出力部３５に通知する。
【０１２６】
換言するならば、経路選択部３４ｂは、実行ノード選択部３３ａから通知された全ての計算ユニット群を故障回避軸を含む平面方向（例えば、ｘｕ平面方向）に多重化（投影）する。そして、経路選択部３４ｂは、各計算ユニット群を多重化した計算ユニット群について、多重化された故障ノードの位置の計算ノードを回避する経路を一筆書きを描くように選択する。そして、経路選択部３４ｂは、選択した経路を全ての計算ユニット群に対して適用することで、２次元のメッシュ状の直接結合網を構成するネットワークを容易に利用者に提供することができる。
【０１２７】
以下、図１８Ａ〜１８Ｄを用いて、制御装置３０ｂが実行する処理の具体例を説明する。なお、以下の説明では、制御装置３０ｂは、利用者から２次元メッシュ状のネットワークを示すサイズ「（１２、３）」を受けつけ、図１７に示すように、ｘ軸方向に「５」個、ｙ軸方向に「３」個の計算ユニットが接続されたネットワークを選択したものとする。また、制御装置３０ｂは、ｘ軸方向を故障回避軸として選択したものとする。
【０１２８】
このような場合には、制御装置３０ｂは、「（０、０）」〜「（０、４）」番の計算ユニット、「（１、０）」〜「（１、４）」番の計算ユニットをそれぞれ１つの計算ユニット群とみなす。また、制御装置３０ｂは、「（２、０）」〜「（２、４）」番の計算ユニットを１つの計算ユニット群とみなす。また、制御装置３０ｂは、故障ノードの座標「（ｘ、ｙ、ｕ）＝（１、０、１）、（３、１、２）、（３、２、２）」から、故障回避単位「（１、１）、（３、２）」を検出する。
【０１２９】
図１８Ａは、実施例３に係る制御装置が実行する処理の流れを説明するための図（１）である。図１８Ａは、制御装置３０ｂが選択した各計算ユニット群を１つの計算ユニット群として射影した図である。図１８Ａに示す例では、制御装置３０ｂは、故障回避単位が「（１，１）、（３、２）」であるため、「１」番の計算ユニットが有する「１」番の計算ノードと、「３」番の計算ユニットが有する「２」番の計算ユニットが故障ノードであるとみなす。
【０１３０】
図１８Ｂは、実施例３に係る制御装置が実行する処理の流れを説明するための図（２）である。図１８Ｂに示すように、制御装置３０ｂは、各計算ユニット群を射影した１つの計算ユニット群について、実施例１に係る制御装置３０と同様に、各計算ユニット間の経路を選択する。詳細には、制御装置３０ｂは、ｘ軸方向が「０」番の計算ユニットから順に、故障ノードに接続されていない経路のタイプ「０」、「２」、「１」、「０」の経路のタイプを選択する。
【０１３１】
図１８Ｃは、実施例３に係る制御装置が実行する処理の流れを説明するための図（３）である。図１８Ｃに示すように、制御装置３０ｂは、各計算ユニット群を射影した１つの計算ユニット群について、選択した経路を辿るように、各計算ノードに「０」〜「１１」までの番号をｉｘ軸方向の仮想座標として付与する。また、制御装置３０ｂは、付与したｉｘ軸方向の仮想座標を、そのままの位置関係で、全ての計算ユニット群が有する計算ユニットに対して付与する。また、制御装置３０ｂは、各計算ユニット群に含まれる計算ノードのｙ軸座標をｉｙ軸の仮想座標とする。
【０１３２】
図１８Ｄは、実施例３に係る制御装置が実行する処理の流れを説明するための図（４）である。図１８Ｄに示すように、制御装置３０ｂは、ｙ軸方向の座標が「０」である計算ユニット群について、「（ｉｘ、ｉｙ）＝（０、０）」〜「（ｉｘ、ｉｙ）＝（１１、０）」の仮想座標を付与する。また、制御装置３０ｂは、ｙ軸方向の座標が「１」である計算ユニット群について「（ｉｘ、ｉｙ）＝（０、１）」〜「（ｉｘ、ｉｙ）＝（１１、１）」の仮想座標を付与する。また、制御装置３０ｂは、ｙ軸方向の座標が「２」である計算ユニット群について「（ｉｘ、ｉｙ）＝（０、２）」〜「（ｉｘ、ｉｙ）＝（１１、２）」の仮想座標を付与する。
【０１３３】
ここで、制御装置３０ｂは、隣接する計算ノードに対して連続する番号を仮想座標として付与する。このため、仮想座標上において隣接する計算ノードは、物理座標上でもリンクによって直接結合される隣接した計算ノードとなり、各計算ノード同士の通信における仮想座標上でのマンハッタン距離と物理座標上でのマンハッタン距離との対応が保証される。つまり、制御装置３０ｂは、並列計算機１０ａに故障ノードが含まれる場合にも、各計算ノードを２次元のメッシュ状に直接結合するための仮想座標を利用者に提供することができる。
【０１３４】
［実施例３の効果］
上述したように、制御装置３０ｂは、選択した複数の計算ユニット群のそれぞれについて、一端の計算ユニットから他端に配置された計算ユニットが含むいずれかの計算ノードまで、故障ノードに接続された経路以外の経路を一筆書きを描くように選択する。このため、制御装置３０ｂを有する並列計算機システム１ｂは、故障ノードが存在する場合にも、２次元のメッシュ状に直接結合された計算ノードを有するネットワークを利用者に提供することができる。
【０１３５】
また、制御装置３０ｂは、選択した複数の計算ユニット群を１つの計算ユニット群として多重化する。そして、制御装置３０ｂは、多重化した計算ユニット群について、多重化された故障ノードの座標に位置する計算ノード以外の計算ノードを直列に直接結合する経路を選択する。その後、制御装置３０ｂは、選択した経路を選択した全ての計算ユニット群について適用し、各計算ユニット群が有する計算ノードに対して、適用した経路を辿るように連続した仮想座標を付与する。
【０１３６】
このため、制御装置３０ｂは、全ての計算ユニット群に対して、同じ経路を辿るように連続した仮想座標を付与し、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障することができる。つまり、各計算ノードは、故障回避軸以外の軸方向に存在する計算ノードとリンクで直接結合されている。このため、制御装置３０ｂは、全ての計算ユニット群に対して同じ経路を辿るように連続した仮想座標を付与し、計算ユニット群ごとに、異なる軸方向の仮想座標を付与した場合には、適切に２次元のメッシュ状に直接結合するための仮想座標を提供できる。結果として、並列計算機システム１ｂは、計算空間を２次元のメッシュ状に分割した際に、故障ノードが存在する場合にも、各領域を適切な位置関係を有する計算ノードにマッピングすることができる。
【実施例４】
【０１３７】
実施例４では、故障ノードが存在する場合にも、２次元のトーラス状に直接結合された計算ノードのネットワークを提供する並列計算機システム１ｃについて説明する。図１９は、実施例４に係る並列計算機システムの一例を説明するための図である。なお、図１９に示す並列計算機システム１ｃが有する各部のうち、実施例１〜３において説明した処理と同じ処理を実行するものについては、実施例１〜３と同じ符号を付し、説明を省略する。
【０１３８】
並列計算機１０ｂは、ｘ軸方向およびｙ軸方向にそれぞれ２次元のメッシュ状に接続された複数の計算ユニット１１ｂ〜２２ｂを有する。図２０は、実施例４に係る計算ユニットの一例を説明するための図である。図２０に示すように、計算ユニット１１ｂは、トーラス状に接続された６つの計算ノード４０〜４５を有する。なお、各計算ノード４０〜４５は、実施例１に係る計算ノード４０と同様の計算ノードであるものとし、説明を省略する。
【０１３９】
図２１は、実施例４に係る計算ユニットを結合するトポロジを説明するための図である。図２１に示すように、並列計算機１０ｂは、複数のリンクを介して、ｘ軸方向に４個、ｙ軸方向に３個のメッシュ状に接続された複数の計算ユニット１１ｂ〜２２ｂを有する。各計算ユニット１１ｂ〜２２ｂには、ｘ軸方向に「０」〜「３」、ｙ軸方向に「０」〜「２」の２次元の物理座標が付与されている。
【０１４０】
また、各計算ユニット１１ｂ〜２２ｂが有する６つの計算ノードは、それぞれ３つの計算ノードがリング状に接続された２つのブロックに分けることができる。ここで、各リングには、ｖ軸方向として「０」〜「１」の物理座標が付与され、各リングが有する３つの計算ノードには、ｕ軸方向として「０」〜「３」の座標が付与されている。
【０１４１】
図１９に戻って、制御装置３０ｃは、実行ノード選択部３３ｂ、経路選択部３４ｃを有する。実行ノード選択部３３ｂは、ｘ軸およびｕ軸の２軸を故障回避軸とし、故障ノードに付与された座標のうち、ｙ軸方向の番号とｖ軸方向の番号とを削除した番号を故障回避単位として検出する。そして、実行ノード選択部３３ｂは、検出した故障回避単位を経路選択部３４ｃに通知する。
【０１４２】
経路選択部３４ｃは、それぞれｘ軸方向に接続された複数の計算ユニットを含む複数の計算ユニット群のそれぞれについて、以下の処理を実行する。すなわち、経路選択部３４ｃは、一端に配置された計算ユニットから他端に配置された計算ユニットで折り返すように、故障ノードに接続された経路以外の経路から往路と復路の２つの経路を選択する。
【０１４３】
具体例を説明すると、経路選択部３４ｃは、ｘ軸方向に接続された複数のブロックのうち、ｖ軸方向の番号が同じ複数のブロックを１つのブロック群とみなす。つまり、経路選択部３４ｃは、故障回避軸がｘ軸とｕ軸であった場合には、各ブロック群をｘｕ平面上に多重化する。そして、経路選択部３４ｃは、多重化されたブロック群について、一端に配置されたブロックから他端に配置されたブロックが含む計算ノードまで、通知された故障回避単位に接続された経路以外の経路を一筆書きを描くように選択する。
【０１４４】
また、経路選択部３４ｃは、選択した経路を各ブロック群に対して適用し、各ブロック群が有する計算ノードに対して、選択した経路を辿るように連続した番号をｘ軸方向の仮想座標として付与する。また、経路選択部３４ｃは、各ブロック群が有する計算ノードのｙ軸方向の座標およびｖ軸方向の座標に基づいて、各ブロック群をリング状に接続する経路を選択する。そして、経路選択部３４ｃは、選択した経路を辿るように各ブロック群が有する各計算ユニットに対して、連続した番号をｙ軸方向の仮想座標として付与する。
【０１４５】
以下、図２２Ａ〜Ｆを用いて、経路選択部３４ｃを有する制御装置３０ｃが経路を選択する処理の例について説明する。なお、以下の説明では、制御装置３０ｃは、サイズが「（ｉｘ、ｉｙ）＝（１０、６）」であるトーラス状に直接結合されたネットワークの提供を利用者から要求されたものとする。
【０１４６】
例えば、制御装置３０ｃは、図２１に示す計算ノードのうち、ｙ軸方向が「０」番である２４個の計算ノードのうち、ｖ軸方向の番号が「０」である１２個の計算ノードを１つのブロック群であるとみなす。また、制御装置３０ｃは、ｙ軸方向が「０」番である２４個の計算ノードのうち、ｖ軸方向の番号が「１」である１２個の計算ノードを１つのブロック群であるとみなす。
【０１４７】
また、制御装置３０ｃは、図２１に示すように、物理座標「（０、１、１、１）」、「（０、２、１、０）」、「（２、１、２、０）」、「（２、１、２、１）」の４つの計算ノードが故障ノードであると検出する。このため、制御装置３０ｃは、故障ノードの各座標のｙ軸番号とｖ軸番号とを削除し、故障回避単位である「（０、１）」と「（２、２）」とを検出する。
【０１４８】
図２２Ａは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（１）である。なお、図２２Ａに示す図は、各ブロック群を１つのブロック群として故障回避軸であるｘ軸とｕ軸とからなるｘｕ平面上に多重化した図である。図２２Ａに示す図においては、制御装置３０ｃは、故障回避単位である「（０、１）」と「（２、２）」とが故障ノードであるとみなす。
【０１４９】
図２２Ｂは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（２）である。図２２Ｂに示すように、制御装置３０ｃは、制御装置３０ａと同様の処理を実行することによって、一端に位置するブロックから他端に位置するブロックで折り返すように、故障ノードに接続されていない往路と復路の２つの経路を選択する。詳細には、制御装置３０ｃは、ｘ軸方向が「０」である計算ユニットから順に、各計算ユニット間において故障ノードに接続されていない経路のタイプ「２０」、「０１」、「０１」を選択する。
【０１５０】
図２２Ｃは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（３）である。図２２Ｃに示すように、制御装置３０ｃは、経路を選択した場合には、各ブロック群が有する各計算ノードに対して、選択した経路を辿るように、「０」〜「９」までの連続した番号をｉｘ軸方向の仮想座標として付与する。そして、制御装置３０ｃは、付与したｉｘ軸方向の仮想座標を、そのままの位置関係で、全てのブロック群が有する計算ユニットに対して付与する。
【０１５１】
図２２Ｄは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（４）である。図２２Ｄに示す例では、並列計算機１０ｂが有する全てのブロックをｙ軸方向とｖ軸方向からなる平面に投影した図である。制御装置３０ｃは、図２２Ｄに示すように、故障回避軸ではないｙ軸とｕ軸からなるｙｕ平面上にすべてのブロックを多重化する。
【０１５２】
図２２Ｅは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（５）である。図２２Ｅに示す例では、制御装置３０ｃは、ｙｖ平面状において、リンクで直接結合された計算ノードに連続した仮想座標が付与されるように、「０」〜「５」までの連続した仮想座標をｉｙ軸方向の仮想座標として付与する。
【０１５３】
図２２Ｆは、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（６）である。図２２Ｆに示すように、制御装置３０ｃは、上述した処理を実行することによって、故障ノードが存在する場合にも、各計算ノードを２次元のトーラス状に直接結合された任意のサイズのネットワークとして動作させるための仮想座標を付与することができる。
【０１５４】
ここで、経路選択部３４ｃは、各計算ユニット１１ｂ〜２２ｂが有する計算ノードの数が異なる場合にも、任意の大きさを有する２次元のトーラス状に直接結合された計算ノードのネットワークを提供することができる。そこで、以下の説明では、並列計算機システム１ｃが並列計算機１０ｃを有し、並列計算機１０ｃがトーラス状に直接結合された９個の計算ノードを有する計算ユニット１１ｃ〜２２ｃを有する場合について説明する。
【０１５５】
図２３は、９個の計算ノードを有する計算ユニットを説明するための図である。図２３に示すように、計算ユニット１１ｃは、トーラス状に接続された９つの計算ノード４０〜４８を有する。なお、各計算ノード４０〜４８は、計算ノード４０と同様の計算ノードであるものとし、説明を省略する。なお、各計算ユニット１２ｃ〜２２ｃは、計算ユニット１１ｃと同様の計算ユニットであるものとし、以下の説明を省略する。
【０１５６】
図２４は、９個の計算ノードを有する計算ユニットが２次元のメッシュ状に接続された例を説明するための図である。これまでの実施例と同様に、各計算ユニット１１ｃ〜２２ｃには、図２４中のｘ軸方向に「０」〜「３」、ｙ軸方向に「０」〜「２」の２次元の座標が付与される。また、各計算ユニットが有する複数の計算ノードには、ｕ軸方向に「０」〜「２」の座標とｖ軸方向に「０」〜「２」の座標が付与される。つまり、各計算ユニット１１ｃ〜２２ｃは、各計算ユニット１１ｂ〜２２ｂについて、それぞれｖ軸方向に計算ノードを拡張した計算ユニットである。換言すると、各計算ユニット１１ｃ〜２２ｃは、各計算ユニット１１ｂ〜２２ｂについて、それぞれブロックを１つずつ追加した計算ユニットである。
【０１５７】
例えば、制御装置３０ｃは、利用者からサイズが「（ｘ、ｙ）＝（１０、７）」である２次元トーラス状のネットワークを要求されたものとする。また、図２４に示す例では、制御装置３０ｃは、故障ノードの座標「（０、１、１、２）」、「（０、２、１、０）」、「（２、１、２、１）」を検出したものとする。このような場合には、制御装置３０ｃは故障回避単位である「（０、１）」、「（２、２）」を検出する。
【０１５８】
また、制御装置３０ｃは、「Ｎ＝１０」、「ｍ＝３」、「ｋ＝２」として式（１）を解き、「ｎ＝４」を算出する。また、制御装置３０ｃは、「Ｎ＝６」、「ｍ＝２」として以下の式（２）を解き、「ｎ＝３」を算出する。そして、制御装置３０ｃは、「（ｘ、ｙ）＝（０、０）」の計算ユニットからｘ軸方向に「４」個、ｙ軸方向に「３」個の計算ユニットを２次元メッシュ状に結合した範囲を選択する。
【０１５９】
【数２】
0005750963.tif 000003
【０１６０】
また、制御装置３０ｃは、各計算ユニット１１ｃ〜２２ｃが有する複数の計算ユニットのうち、ｖ軸方向の座標が同じ計算ユニットを１つのブロックとみなす。つまり制御装置３０ｃは、各計算ユニット１１ｃ〜２２ｃをそれぞれ３つのブロックに分割する。また、制御装置３０ｃは、各計算ユニット群が有する複数のブロックのうち、ｖ軸方向の番号が同じ４つのブロックを１つのブロック群であるとみなす。つまり、図２４に示す例では、制御装置３０ｃは、３個の計算ユニットを９個のブロック群であるとみなす。
【０１６１】
続いて、図２５Ａ〜２５Ｆを用いて、制御装置３０ｃが各計算ユニット１１ｃ〜２２ｃが有する計算ノードに仮想座標を付与する処理について説明する。以下の説明では、制御装置３０ｃは、ｘ軸を故障回避軸として選択したものとする。図２５Ａは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（１）である。図２５Ａに示すように、制御装置３０ｃは、９個のブロック群を１つのブロック群として多重化する。また、図２５Ａに示す図においては、制御装置３０ｃは、故障回避単位である「（ｘ、ｕ）＝（０、１）、（２、２）」が故障ノードであるとみなす。
【０１６２】
図２５Ｂは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（２）である。図２５Ｂに示すように、制御装置３０ｃは、各ブロック間において、故障ノードを回避するように、経路のタイプを選択する。図２５ｂに示す例では、制御装置３０ｃは、ｘ軸方向の座標が「０」のブロックと「１」のブロックとの間において、経路のタイプ「２０」を選択し、ｘ軸方向の座標が「１」のブロックと「２」のブロックとの間において経路のタイプ「０１」を選択する。また、制御装置３０ｃは、ｘ軸方向の座標が「２」のブロックと「３」のブロックとの間において、経路のタイプ「０１」を選択する。その後、制御装置３０ｃは、各ブロック内における計算ノードを接続する経路を選択する。
【０１６３】
図２５Ｃは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（３）である。図２５Ｃに示すように、制御装置３０ｃは、各ブロック間における経路のタイプと、各ブロック内における経路を選択した場合には、選択した経路を辿るように、各計算ノードに連続した番号をｉｘ軸方向の仮想座標として付与する。
【０１６４】
次に、制御装置３０ｃは、各ブロック群について、ｙ軸方向の経路を判別する。図２５Ｄは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（４）である。図２５Ｄに示すように、制御装置３０ｃは、各ブロック群が有する計算ノードをｙｖ平面上に多重化する。そして、制御装置３０ｃは、利用者から要求されたネットワークのサイズのうちｙ軸方向のサイズが「７」であるので、ｙｖ平面上に多重化された７つの計算ノードをリング状に直接結合する複数の経路を選択する。
【０１６５】
図２５Ｅは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（５）である。図２５Ｅに示すように、制御装置３０ｃは、７つの計算ノードをリング状に直接結合する複数の経路を選択した場合には、選択した経路を辿るように、各計算ノードに「０」〜「６」までの番号をｙ軸方向の仮想座標として付与する。
【０１６６】
図２５Ｆは、計算ユニットが９個の計算ノードを有する場合に、実施例４に係る制御装置が経路を選択する処理の一例を説明するための図（６）である。図２５Ｆに示すように、制御装置３０ｃは、上述した処理を実行することによって、故障ノードが存在する場合にも、各計算ノードを２次元のトーラス状に直接結合された任意のサイズのネットワークとして動作させるための仮想座標を付与することができる。
【０１６７】
［制御装置３０ｃの処理の流れ］
次に、図２６を用いて、制御装置３０ｃが実行する処理の流れについて説明する。図２６は、実施例４に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、図２６に示すフローチャートは、制御装置３０ｃが実行する処理を一般化したものである。
【０１６８】
図２６に示す例では、各計算ユニットの結合トポロジを「Ｍ」次元とし、各計算ノードの物理座標を「（ｘ１〜ｘＭ、ｕ１〜ｕＭ）」で表記するものとする。また、各計算ノードに付与される仮想座標を「Ｘ１〜ＸＭ」で表記するものとし、仮想座標「Ｘｊ」に対応する物理座標を「（ｘｊ’、ｕｊ’’）」と表記するものとする。また、故障回避軸を仮想座標で「Ｘη」、すなわち、物理座標で「（ｘη’、ｕη’’）」で表記するものとする。
【０１６９】
ここで、「０≦Ｘη＜Ｎ」、「０≦ｘη’＜ｎ」、「０≦ｕη’’＜ｍ」を満たすものとする。また、故障ノードのリスト「Ｆ」は、「（ｘ１１〜ｘＭ１、ｕ１１〜ｕＭ１）〜（ｘ１Ｋ〜ｘＭＫ、ｕ１Ｋ〜ｕＭＫ）」で表される。なお、故障ノードの数は「Ｋ」となる。
【０１７０】
また、以下の説明において、「ｍ≧２」である場合には、以下のフローチャートは、実施例３で説明した制御装置３０ｂが実行する処理に対応し、「ｍ≧３」である場合には、実施例４で説明した制御装置３０ｃが実行する処理に対応する。
【０１７１】
まず、制御装置３０ｃは、「Ｘｊ」と「（ｘｊ’、ｕｊ’’）」とを対応させることで、仮想座標と物理座標の軸の対応を選択するとともに、故障回避軸「（ｘη’、ｕη’’）」を選択する（ステップＳ４０１）。
【０１７２】
次に制御装置３０ｃは、故障単位の数を示すパラメータ「ｋ」を「０」」にセットし、故障回避単位の集合を示すパラメータ「Ｆ」を空リスト「φ」にセットし、故障ノードを識別するパラメータ「ｊ」を「１」にセットする（ステップＳ４０２）。次に、制御装置３０ｃは、「ｊ」番目の故障ノードの座標から「ｘη’ｊ」、「ｕη’’ｊ」を取得する（ステップＳ４０３）。
【０１７３】
次に、制御装置３０ｃは、「（ｘη’ｊ、ｕη’’ｊ）」が故障ノードのリスト「Ｆ」に含まれているか否かを判別する（ステップＳ４０４）。そして、制御装置３０ｃは、「（ｘη’ｊ、ｕη’’ｊ）」が故障ノードのリスト「Ｆ」に含まれている場合には（ステップＳ４０４肯定）、パラメータ「ｋ」に「１」を加算し、故障ノードのリスト「Ｆ」に「（ｘη’ｊ、ｕη’’ｊ）」を追加する（ステップＳ４０５）。一方、制御装置３０ｃは、「（ｘη’ｊ、ｕη’’ｊ）」が故障ノードのリスト「Ｆ」に含まれていない場合には（ステップＳ４０４否定）、ステップＳ４０５の処理をスキップする。
【０１７４】
次に、制御装置３０ｃは、パラメータ「ｊ」に「１」を加算した値が故障ノードの数「Ｋ」以下であるか否かを判別する（ステップＳ４０６）。そして、制御装置３０ｃは、パラメータ「ｊ」に「１」を加算して新しい「ｊ」とする。その新しい「ｊ」の値が故障ノードの数「Ｋ」以下であると判別した場合には（ステップＳ４０６肯定）、再度ステップＳ４０３を実行する。一方、制御装置３０ｃは、新しい「ｊ」の値が故障ノードの数「Ｋ」を超えた、すなわち、すべての故障ノードについての処理を終えたと判別した場合には（ステップＳ４０６否定）、使用する計算ユニットを選択する（ステップＳ４０７）。具体例を説明すると、制御装置３０ｃは、「ｘη’」方向については「ｃｅｉｌｉｎｇ（（Ｎ＋ｋ）／ｍ）」から算出される数の連続する計算ユニットを選択し、他の軸方向については「ｃｅｉｌｉｎｇ（Ｎｊ／ｍｊ）」から算出される数の計算ユニットを選択する。
【０１７５】
次に、制御装置３０ｃは、「ｘη’」方向に接続された複数の計算ユニット、つまり、計算ユニット群について、各計算ユニット間における経路のタイプ「ＣＴ（０）〜ＣＴ（ｎ−２）」を選択する（ステップＳ４０８）。なお、経路のタイプを選択する処理については、図１３、図１４に示した処理と同様の処理を実行するものとして、詳細な説明を省略する。
【０１７６】
次に、制御装置３０ｃは、「ｘη’＝１」から「ｘη’＝（ｎ−２）」までの計算ユニットについて、ユニット内における「ｕη’’」軸方向の経路を選択する（ステップＳ４０９）。つまり、制御装置３０ｃは、各計算ユニット内における各計算ノードを一度だけ通る経路を選択する。次に、制御装置３０ｃは、物理座標「（ｘη’ｊ、ｕη’’ｊ）」と仮想座標「Ｘη」との対応を決定する。つまり、制御装置３０ｃは、選択した経路を辿るように、連続する番号を１つの軸方向の仮想座標として各計算ノードに付与する。
【０１７７】
次に、制御装置３０ｃは、「１≦ｊ≦Ｍ」を満たす「ｊ＝η」以外のパラメータ「ｊ」について以下の処理を実行する（ステップＳ４１２）。すなわち、制御装置３０ｃは、
物理座標「（ｘｊ’、ｕｊ’’）」と仮想座標「Ｘｊ」との対応を決定する（ステップＳ４１３）。つまり、制御装置３０ｃは、ステップＳ４０８〜Ｓ４１１にて経路を選択した軸方向以外の軸方向について、多重化した計算ユニット間の経路を選択し、選択した経路を辿るように、連続する番号を仮想座標として各計算ユニットが有する計算ノードに付与する。その後、制御装置３０ｃは、「１≦ｊ≦Ｍ」を満たす「ｊ＝η」以外のパラメータ「ｊ」についてステップＳ４１２の処理を実行した場合には（ステップＳ４１２完了）、処理を終了する。
【０１７８】
［実施例４の効果］
上述したように、制御装置３０ｃは、２次元のメッシュ状に接続された複数の計算ユニットについて、１つの軸方向に接続された複数の計算ユニットを含む複数の計算ユニット群のそれぞれについて、以下の処理を実行する。すなわち、制御装置３０ｃは、各計算ユニット間において、故障ノードに接続されていない経路から往路と復路の２つの経路を、一方の端に位置する計算ユニットから他端に位置する計算ユニットで折り返すように選択する。
【０１７９】
また、制御装置３０ｃは、１つの計算ユニットが有する複数の計算ノードを、それぞれリング状に直接結合された複数の計算ノードからなる複数のブロックに分割する。そして、制御装置３０ｃは、１つの軸方向に接続された複数のブロック群を１つのブロック群に投影し、複数のブロック群を投影したブロック群について故障ノードに接続されていない経路から往路と復路とを選択する。このため、制御装置３０ｃは、利用者が要求する任意の大きさを有するネットワークであって、各計算ノードを２次元のトーラス状に直接結合したネットワークを利用者に提供することができる。
【０１８０】
この結果、制御装置３０ｃは、計算空間を２次元のトーラス状に分割した際に、故障ノードが存在する場合にも、各領域を適切な位置関係を有する計算ノードにマッピングすることができる。仮想ノード座標でいずれかの軸方向に隣り合うノード間は必ず直接の経路をもつことが保障される。
【実施例５】
【０１８１】
実施例５では、利用者によって入力されたネットワークのサイズに応じて、並列計算機１０ｃが有する複数の計算ユニットから、適切な範囲の計算ユニットを選択し、選択した計算ユニットに仮想座標を付与する並列計算機システム１ｄについて説明する。図２７は、実施例５に係る並列計算機システムの一例を説明するための図である。なお、図２７に示す並列計算機システム１ｄが有する各部のうち、実施例１〜４において説明した処理と同じ処理を実行するものについては、実施例１〜４と同じ符号を付し、説明を省略する。
【０１８２】
並列計算機１０ｄは、２次元のメッシュ状に接続された複数の計算ユニット１１ｄ〜２２ｄを有する。図２８は、実施例５に係る並列計算機を説明するための図である。以下の説明では、図２８に示すように、並列計算機１０ｃは、ｘ軸方向に「６」個、ｙ軸方向に「５」個の２次元メッシュ状に接続された３０個の計算ユニットを有する。
【０１８３】
なお、各計算ユニットは、実施例４に係る各計算ユニット１１ａ〜２２ａと同様に、トーラス状に接続された６つの計算ノードを有するものとする。このため、各計算ノードには、ｘ軸方向、ｙ軸方向、ｕ軸方向、ｖ軸方向に「（０、０、０、０）」〜「（５、４、２、３）」の物理座標が付与されている。また、物理座標「（１、２、１、０）」の計算ノードは、故障ノードである。また、図２８中の斜線で覆われた範囲の計算ユニットは、既に他のプログラムを実行している範囲を示す。
【０１８４】
図２７に戻って、制御装置３０ｄは、実行ノード選択部３３ｃを有する。実行ノード選択部３３ｃは、利用者によって指定されたネットワークのサイズに応じて、並列計算機１０ｄが有する複数の計算ユニットから、適切な範囲の計算ユニットであって、プログラムを実行していない計算ユニットを選択する。
【０１８５】
具体例を説明すると、実行ノード選択部３３ｃは、受付部３１aから、利用者がプログラムを実行させる仮想座標のサイズの通知を受ける。また、実行ノード選択部３３ｃは、故障ノード検出部３２から故障ノードの物理座標の通知を受ける。また、実行ノード選択部３３ｃは、並列計算機１０ｄが有する各計算ユニットのうち、プログラムを実行している計算ユニットを除外した範囲を検出する。
【０１８６】
そして、実行ノード選択部３３ｃは、通知された仮想ネットワークのサイズに基づいて、プログラムを実行させる計算ユニットの範囲を選択する。詳細には、実行ノード選択部３３ｃは、故障回避軸と、仮想座標の各軸方向に付与する番号のサイズとの組み合わせを全て算出する。そして、実行ノード選択部３３ｃは、算出した各組み合わせによって仮想座標を付与する計算ユニットの範囲を選択する。また、実行ノード選択部３３ｃは、選択された計算ユニットの範囲と、通知された故障ノードの物理座標とから、選択した範囲の計算ユニットに対して、通知されたサイズの仮想座標を付与できるか否かを判別する。
【０１８７】
その後、実行ノード選択部３３ｃは、選択した範囲の計算ユニットに通知されたサイズの仮想座標を付与できると判別した場合には、選択した範囲の計算ユニットを経路選択部３４ｄに通知する。また、実行ノード選択部３３ｃは、選択した範囲の計算ユニットに通知されたサイズの仮想座標を付与できないと判別した場合には、新たに、プログラムを実行させる計算ユニットの範囲を選択し直し、再度、仮想座標を付与できるか否かを判別する。
【０１８８】
次に、制御装置３０ｄが実行する処理の具体例について説明する。図２９は、利用者が並列計算機に実行させるプログラムの一例を説明するための図である。なお、図２９に示すプログラムは、計算ノード間の通信を記述するＭＰＩライブラリを利用する。
【０１８９】
このようなＭＰＩライブラリは、プログラムの実行開始時に、マシンファイルと呼ばれる計算ノード名の一覧の読込を行い、プログラム中に記載された計算ノードの番号（ｒａｎｋ番号）と計算ノードの物理座標との対応を特定する。また、例えば、マシンファイルには、座標（ｘ、ｙ、ｕ、ｖ）に位置する計算ノードの名前「ｎｏｄｅｘｙｕｖ」が１行に１つずつ格納されており、先に格納されから順に、「０」から始まるｒａｎｋ番号を割当てることを示す。
【０１９０】
図３０は、利用者がプログラムの実行を意図する複数の計算ノードを説明するための図である。利用者は、図３０に示すように、ｉｘ軸方向に「０」〜「１１」、ｉｙ方向に「０」〜「５」までの計「７２」個の計算ノードによる実行を意図して図２６に示すプログラムを作成したものとする。また、利用者は、各ノード間の通信を効率化するため、サイズが「１２×６」の２次元トーラスへのプログラムの割り付けを要求したものとする。
【０１９１】
このような場合には、制御装置３０ｄは、計算ノードに付与する仮想座標のサイズが「１２×６」のトーラス状であることを判別する。また、制御装置３０ｄは、並列計算機１０ｄが有する各計算ユニットから、故障ノードの物理座標「（１、２、１、０）」を検出する。
【０１９２】
また、制御装置３０ｄは、判別した仮想座標のサイズに基づいて、プログラムを実行させる計算ユニットの範囲を選択する。詳細には、制御装置３０ｄは、故障回避軸と、仮想座標の各軸方向に付与する番号のサイズとの組み合わせを算出する。この例においては、制御装置３０ｄは、「（ｘｕ、ｙｖ）＝（１２、６）」、「（ｘｕ、ｙｖ）＝（６、１２）」、「（ｙｕ、ｘｖ）＝（１２、６）」、「（ｙｕ、ｘｖ）＝（６、１２）」の組み合わせを算出する。
【０１９３】
ここで、図２８中のＡに示す範囲は、「（ｘｕ、ｙｖ）＝（１２、６）」を選択した際に、仮想座標を付与する計算ユニットの範囲である。すなわち、図２８中のＡの原点を「（ｘ、ｙ）＝（０、２）」とした際に、原点から見た故障ノードの相対座標は「（１、０、１、０）」となり、故障回避単位は「（ｘ、ｕ）＝（１、１）」となる。このため、ｘ軸方向に使用する計算ユニットの数「ｎ１」は、「Ｎ＝１２」、「ｍ＝３」、「ｋ＝１」として式（１）を解き、「ｎ１＝５」となる。また、ｙ軸方向に使用する計算ユニットの数「ｎ２」は、「Ｎ＝６」、「ｍ＝２」として式（２）を解き、「ｎ２＝３」となる。
【０１９４】
なお、図２８中のＢに示す範囲は、「（ｘｕ、ｙｖ）＝（６、１２）」を選択した際に、仮想座標を付与する計算ユニットの範囲である。図２８中のＢに示す範囲においては、故障ノードが存在しないので、「ｎ１＝４」となる。また、図２８中のＣに示す範囲は、「（ｙｕ、ｘｖ）＝（１２、６）」を選択した際に、仮想座標を付与する計算ユニットの範囲である。また、図２８中のＤに示す範囲は、「（ｙｕ、ｘｖ）＝（６、１２）」を選択した際に、仮想座標を付与する計算ユニットの範囲である。
【０１９５】
図２８に示す例では、制御装置３０ｄは、算出した各組合せについて、仮想座標を付与することができる計算ユニットの範囲を選択可能である。このため、制御装置３０ｄは、あらかじめ定められたジョブスケジューリングの戦略に従って、図２８中のＡで示す範囲を選択する。ここで、制御装置３０ｄには、任意のジョブスケジューリングの戦略を適用することができる。
【０１９６】
次に、制御装置３０ｄは、選択した範囲について、実施例４と同様に、ｘ軸方向の経路を選択する。図３１は、実施例５に係る制御装置がｘ軸方向の経路を選択する処理の一例を説明するための図である。図３１に示すように、制御装置３０ｄは、ｘｕ平面上に多重化した各ブロック群が有する各ブロック間において、故障回避単位に接続された経路以外の経路から往路と復路とを選択し、多重化された計算ノードを一度だけ通るリング状の経路を選択する。図３１に示す例では、制御装置３０ｄは、各ブロック間において、タイプ「２０」、「２０」、「０１」、「１２」を選択し、選択した経路を辿るように、多重化された計算ノードに対して連続する「０」〜「１１」の番号を付与する。
【０１９７】
図３２は、各計算ノードに付与されるｉｘ軸方向の仮想座標を説明するためのテーブルである。図３２に示す例では、制御装置３０ｄは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「（ｘ、ｕ）＝（０、０）」である全ての計算ノードに仮想座標「ｉｘ＝０」を付与する。同様に、制御装置３０ｄは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「（ｘ、ｕ）＝（１、０）」である全ての計算ノードに仮想座標「ｉｘ＝１」を付与する。以下、制御装置３０ｄは、物理座標が「（ｘ、ｕ）＝（２、０）、（３、０）、（３、２）、（４、２）、（４、１）、（３、１）、（２、１）、（２、２）、（１、２）、（０、２）」である計算ノードに仮想座標「ｉｘ＝２〜１１」を付与する。
【０１９８】
次に、制御装置３０ｄは、実施例４と同様に、ｉｙ軸方向の経路を選択する。図３３は、実施例５に係る制御装置がｙ軸方向の経路を選択する処理の一例を説明するための図である。図３３に示すように、制御装置３０ｄは、ｙｖ平面上に多重化した各ブロック群が有する各計算ノードを一度だけ通るリング状の経路を選択し、選択した経路を辿るように各計算ノードに連続する「０」〜「５」の番号を付与する。
【０１９９】
図３４は、各計算ノードに付与されるｉｙ軸方向の仮想座標を説明するためのテーブルである。図３４に示す例では、制御装置３０ｄは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「（ｙ、ｖ）＝（２、０）」である全ての計算ノードに仮想座標「ｉｙ＝０」を付与する。同様に、制御装置３０ｄは、物理座標が「（ｙ、ｖ）＝（３、０）、（４、０）、（４、１）、（３、１）、（２、１）」である各計算ノードに、それぞれ仮想座標「ｉｙ＝１〜５」を付与する。
【０２００】
その後、制御装置３０ｄは、各計算ノードに付与した仮想座標に基づいて、各計算ノードの名前を一次元に並べたマシンファイルを出力する。図３５は、実施例５に係る制御装置が出力するマシンファイルの一例を説明するための図である。図３５に示すように、制御装置３０ｄは、各計算ノードに仮想座標を付与した場合には、図３０に示す「０」〜「７１」までの順番に従って、各仮想座標が示す計算ノードの名前を格納したマシンファイルを作成する。そして、制御装置３０ｄは、生成したマシンファイルを出力するとともに、ＭＰＩライブラリが用いるファイルとして、記憶部３６に格納する。
【０２０１】
なお、上述した例では、２次元のトーラス状に直接結合するための仮想座標を各計算ノードに付与する例を説明した。しかし、制御装置３０ｄは、上述した実施例３において説明した経路を選択する処理を実行することによって、２次元のメッシュ状に直接結合するための仮想座標を各計算ノードに付与することもできる。また、制御装置３０ｄは、上述した実施例１、２において説明した処理を実行することによって、１次元のメッシュ、又は１次元のトーラス状に直接結合するための仮想座標を各計算ノードに付与することもできる。
【０２０２】
［制御装置３０ｄの処理の流れ］
次に、図３６を用いて、制御装置３０ｄが実行する処理の流れの一例について説明する。図３６は、実施例５に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、図３６に示す例は、上述した制御装置３０ｄが実行する処理について一般化した処理の例である。図３６に示す例では、制御装置３０ｄは、利用者から仮想座標のサイズを受け付けたことをトリガとして、処理を開始する。
【０２０３】
まず、制御装置３０ｄは、利用者から仮想座標の各軸方向のサイズを受け付ける（ステップＳ５０１）。次に制御装置３０ｄは、故障ノードの物理座標を検出する（ステップＳ５０２）。次に、制御装置３０ｄは、他のプログラムを実行していない計算ユニットの範囲を選択する（ステップＳ５０３）。次に、制御装置３０ｄは、他のプログラムを実行していない計算ユニットの範囲を選択できたか否かを判別し（ステップＳ５０４）、選択できなかった場合には（ステップＳ５０４否定）、処理をキューイングする（ステップＳ５０５）。その後、制御装置３０ｄは、所定の時間が経過、あるいは、実行されているプログラムが終了した場合には、再度ステップＳ５０１から処理を開始する。
【０２０４】
また、制御装置３０ｄは、他のプログラムを実行していない計算ユニットの範囲を選択できた場合には（ステップＳ５０４肯定）、仮想座標の付与を行う（ステップＳ５０６）。なお、ステップＳ５０６の処理は、実施例４に示した処理と同様の処理である。次に、制御装置３０ｄは、隣接する計算ノードに連続する仮想座標の付与に成功したか否かを判別し（ステップＳ５０７）、付与できなかった場合には（ステップＳ５０７否定）、再度ステップＳ５０３の処理を実行する。
【０２０５】
また、制御装置３０ｄは、隣接する計算ノードに連続する仮想座標の付与に成功した場合には（ステップＳ５０７肯定）、仮想座標に基づく順番で各計算ノード名が格納されたマシンファイルを作成する（ステップＳ５０８）。その後、制御装置３０ｄは、作成したマシンファイルを出力し（ステップＳ５０９）、処理を終了する。
【０２０６】
［実施例５の効果］
上述したように、制御装置３０ｄは、利用者から受け付けた仮想座標のサイズに基づいて、他のプログラムを実行していない計算ユニットの範囲を選択する。そして、制御装置３０ｄは、選択した計算ユニット間において、故障ノードに接続されていない経路から往路と復路とを選択し、選択した経路を辿るように仮想座標を付与する。
【０２０７】
このため、制御装置３０ｄは、並列計算機が複数のプログラムを実行するマルチジョブが適用されている場合にも、トーラス状に直接結合された計算ノードを利用者に提供することができる。つまり、並列計算機１０ｄは、トーラス状に直接結合された計算ノードを用いて実行させる複数のプログラムを、同時に実行させることができる。
【０２０８】
また、制御装置３０ｄは、利用者から受け付けた仮想座標のサイズに基づいて、計算ユニットの範囲を選択するので、必要最小限のハードウェア資源を利用者に提供することができる。また、制御装置３０ｄは、選択した計算ユニットの範囲に故障ノードが含まれる場合にも、隣接する計算ノードに対して連続する仮想座標を付与することができるので、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障する。このため、制御装置３０ｄは、各計算ノード間の通信効率を劣化させることなく、プログラムを効率良く実行させることができる。また、制御装置３０ｄは、故障ノードを気にすることなく、同じ品質のサービスを利用者に提供することができる。
【実施例６】
【０２０９】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例６として本発明に含まれる他の実施例を説明する。
【０２１０】
（１）制御装置について
上述した実施例３に制御装置３０ｂは、２次元のメッシュ状に直接結合された複数の計算ユニット１１ａ〜２２ａを有する並列計算機１０ａが、故障ノードを有する場合にも、各計算ノードに仮想座標を付与した。しかし、実施例はこれに限定されるものではなく、制御装置３０ｂは、並列計算機１０ａが任意の次元のメッシュ状に直接結合された複数の計算ユニットを有する場合にも、各計算ノードに仮想座標を付与することができる。
【０２１１】
図３７は、３次元メッシュ状に接続された計算ユニットを説明するための図である。図３７に示す例では、３つの計算ノードを有する複数の計算ユニットがｘ１軸方向、ｘ２軸方向、ｘ３軸方向の３次元のメッシュ状に直接結合されている。また各計算ユニットが有する３つの計算ノードには、ｕ軸方向として番号が付与されている。
【０２１２】
このような場合にも、制御装置３０ｂは、ｘ１軸方向、ｘ２軸方向、ｘ３軸方向のいずれかの軸を故障回避軸として選択し、選択した故障回避軸方向に直列に結合された複数の計算ユニットを計算ユニット群とする。また、制御装置３０ｂは、選択した故障回避軸（例えば、ｘ２軸）とｕ軸とからなる平面上に各計算ユニット群を多重化するとともに、検出した故障ノードを故障回避軸とｕ軸とからなる平面上に多重化する。
【０２１３】
そして、制御装置３０ｂは、実施例３と同様に、多重化した計算ユニット群について、多重化した故障ノードに接続されていない経路を一筆書きを描くように選択する。その後、制御装置３０ｂは、各計算ユニット群に対して、選択した経路を辿るように連続した番号を１つの軸方向（例えば「ｉｘ２」軸方向）の仮想座標として付与する。また、制御装置３０ｂは、各計算ノードについて、故障回避軸以外の物理座標（例えば、ｘ１軸、ｘ３軸）に基づいて、他の軸方向（例えば、ｉｘ１軸方向、ｉｘ３軸方向）の仮想座標を付与する。
【０２１４】
また、制御装置３０ｂは、計算ユニットがそれぞれ４次元以上のメッシュ状に直接結合された場合にも、以下の処理によって適切に仮想座標を付与することができる。すなわち、制御装置３０ｂは、いずれか１軸を故障回避軸として、各計算ユニット群を選択し、選択した計算ユニット群を多重化し、多重化した計算ユニット群について経路を選択する。そして、制御装置３０ｂは、選択した各計算ユニット群に対して選択した経路を辿るように１軸方向の仮想座標を付与し、さらに、各計算ノードの物理座標のうち、故障回避軸方向以外の成分に基づいて、他の軸方向の仮想座標を付与する。
【０２１５】
つまり、制御装置３０ｂは、計算ユニットが多次元のメッシュ状に直接結合されている場合には、各計算ユニット群を任意の平面に多重化し、多重化した計算ユニット群について、多重化した故障ノードを避けるように、連続した仮想座標を付与する。そして、制御装置３０ｂは、付与した仮想座標を全ての計算ユニット群に適用するとともに、他の次元についても同様の処理をくりかえし行うことによって、各計算ノードに仮想座標を付与する。この結果、制御装置３０ｂは、計算ユニットがそれぞれ４次元以上のメッシュ状に直接結合され、かつ、故障ノードが含まれる場合にも、各計算ユニットを多次元のメッシュ状に直接結合するための仮想座標を各計算ノードに付与することができる。
【０２１６】
このように、制御装置３０ｂは、選択した故障回避軸方向に基づく平面上に各計算ユニット群を多重化し、多重化した計算ユニット群について、多重化された故障ノードに接続されていない経路を一筆書きを描くように選択する。そして、制御装置３０ｂは、各計算ユニット群について、多重化された計算ユニット群において選択した経路を適用し、適用した経路を辿るように各計算ユニット群が有する計算ノードに仮想座標を付与する。このため、制御装置３０ｂは、２次元以上のメッシュ状のトポロジで計算ユニットが直接結合されている場合にも、故障ノード以外の計算ノードに対して、適切な仮想座標を付与することができる。
【０２１７】
また、実施例４に係る制御装置３０ｃも同様に、並列計算機が任意の次元のメッシュ状に直接結合された複数の計算ユニットを有する場合にも、各計算ノードに仮想座標を付与することができる。図３８は、３次元トーラス状に接続された計算ノードを有する計算ユニットを３次元メッシュ状に接続した例を説明するための図（１）である。図３８に示す例では、各計算ユニットは、ｘ１軸、ｘ２軸、ｘ３軸の３次元メッシュ状に直接結合されている。また、図３８に示す例では、各計算ユニットは、ｕ１軸、ｕ２軸、ｕ３軸の３次元トーラス状に直接結合されている。
【０２１８】
このような場合には、制御装置３０ｃは、ｘ１〜ｘ３軸のいずれか１軸と、ｕ１〜ｕ３軸のいずれか１軸とを故障回避軸として選択する。そして、制御装置３０ｃは、ｕ１〜ｕ３軸の値が同じであって、ｘ１〜ｘ３軸から選択した故障回避軸方向に直接結合された複数のブロックをブロック群とする。
【０２１９】
また、制御装置３０ｃは、各ブロック群を選択した故障回避軸からなる平面上に多重化する。また、制御装置３０ｃは、故障ノードを故障回避軸からなる平面上に多重化し、多重化した故障ノードの位置を故障回避単位とする。そして、制御装置３０ｃは、多重化されたブロック群について、一端のブロックから他端のブロックで折り返すように、故障回避単位に接続されていない経路から往路と復路とを選択する。その後、制御装置３０ｃは、選択した経路をすべてのブロック群に適用し、全てのブロック群について適用した経路を辿るように連続した番号を仮想座標の１つ目の次元として各計算ノードに付与する。
【０２２０】
また、制御装置３０ｃは、ｘ１〜ｘ３軸から故障回避軸として選択しなかった軸とｕ１〜ｕ３軸から故障回避軸として選択しなかった軸とからなる平面上に各ブロック群を多重化する。そして、制御装置３０ｃは、多重化した各ブロック群をリング状に接続する経路を選択し選択した経路を辿るように連続した番号を仮想座標の２つ目の次元、および、仮想座標の３つ目の次元として各計算ノードに付与する。
【０２２１】
また、図３９は、３次元トーラス状に接続された計算ノードを有する計算ユニットを３次元メッシュ状に接続した例を説明するための図（２）である。制御装置３０ｃは、図３９に示すように、ｕ３軸方向に計算ノードが拡張された場合にも、上述した処理を行うことによって、故障ノードを回避しつつ、トーラス状に直接結合された計算ノードを提供するための仮想座標を各計算ノードに付与できる。
【０２２２】
また、制御装置３０ｃは、計算ユニットがそれぞれ４次元以上のメッシュ状に直接結合された場合にも、以下の処理によって適切に仮想座標を付与することができる。すなわち、制御装置３０ｃは、各計算ユニットの物理座標を示す軸方向のいずれか１軸および各計算ユニットが有する計算ノードを示す軸方向のいずれか１軸の２軸を故障回避軸として選択する。そして、制御装置３０ｃは、上述した処理と同様、故障回避軸として選択した２軸からなる平面にブロック群を多重化し、多重化したブロック群についてリング状の経路を選択し、選択した経路に沿って仮想座標の１つめの次元を各計算ノードに付与する。
【０２２３】
また、制御装置３０ｃは、各計算ユニットの物理座標を示す軸方向および各計算ユニットが有する計算ノードを示す軸方向のから故障回避軸として選択しなかった軸を１軸ずつ選択し、選択した２軸からなる平面に各計算ユニット群を多重化する。そして、制御装置３０ｃは、多重化した各計算ユニット群をリング状に接続する経路を選択し、選択した経路に沿って仮想座標の他の次元を各計算ノードに付与する。
【０２２４】
つまり、制御装置３０ｃは、多重化した各計算ユニット群に含まれる正常な計算ノードをリング状に接続するための経路を選択し、選択した経路を全ての計算ユニット群に適用する。また、制御装置３０ｃは、他の次元についても多重化した計算ユニット群を接続する経路を選択する処理を繰り返す。この結果、制御装置３０ｃは、任意の次元数のメッシュ状に接続された計算ユニットについて、故障ノードが含まれる場合にも、多次元のトーラス状に直接結合された計算ノードを提供するための仮想座標を各計算ノードに付与することができる。
【０２２５】
（２）各実施例の制御装置について
上述した各実施例１〜４では、それぞれ異なるトポロジによって直接結合された複数の計算ノードに対して仮想座標を付与する制御装置３０〜３０ｄについて説明した。しかし、実施例はこれに限定されるものではなく、例えば、各制御装置３０〜３０ｄに示す全ての機能を有し、利用者によって入力された仮想座標のサイズに基づいて、仮想座標を付与する処理を上記した制御装置３０〜３０ｄが行う処理から選択することとしてもよい。
【０２２６】
例えば、実施例６に係る制御装置３０ｅは、利用者によって入力された仮想座標のサイズが１次元であった場合には、並列計算機から２次元のメッシュ状に接続された複数の計算ユニットを選択する。そして、制御装置３０ｅは、選択した複数の計算ユニットに対して、制御装置３０または制御装置３０ａと同様の処理を実行する。
【０２２７】
また、例えば、実施例６に係る制御装置３０ｅは、利用者によって入力された仮想座標のサイズが２次元であった場合には、並列計算機から任意の次元のメッシュ状に接続された複数の計算ユニットを選択する。そして、制御装置３０ｅは、制御装置３０ｃと同様の処理を実行することとしてもよい。
【０２２８】
また、制御装置３０ｅは、１つの並列計算機が有する複数の計算ユニットのうち、一部の範囲の計算ユニットに２次元のトーラス状に直接結合するための仮想座標を付与する。その後、制御装置３０ｅは、他の範囲の計算ユニットに対して、２次元のメッシュ状に直接結合するための仮想座標を付与したり、１次元のリング状またはメッシュ状に直接説結合するための仮想座標を付与しても良い。
【０２２９】
（３）プログラムの実行について
上述した各制御装置３０〜３０ｅは、利用者によって入力された仮想座標のサイズに基づいて、各計算ノードに仮想座標を付与した。しかし、実施例はこれに限定されるものではない。例えば、制御装置３０〜３０ｅは、実行させるプログラムを取得した場合には、取得したプログラムを解析し、プログラムが実行されるネットワークのトポロジとサイズとを判別する。そして、制御装置３０〜３０ｅは、判別したトポロジとサイズとに応じて、並列計算機から利用する計算ユニットの範囲を選択し、選択した計算ユニットの範囲に対して仮想座標を付与する。その後、制御装置３０〜３０ｃは、各計算ノードに付与した仮想座標に基づいて、プログラムによって実行させるジョブを各計算ノードに割当てて、プログラムを実行させることとしてもよい。
【０２３０】
また、上述した実施例では、各制御装置３０〜３０ｅが仮想座標を付与した結果をＭＰＩ実行時にライブラリが利用するマシンファイルとして出力する例を説明したが、実施例はこれに限定されるものではなく、任意の形式のデータとして出力することができる。
【０２３１】
（４）計算ノードの構成について
上述した例では、各計算ノード４０〜４８は、ＣＰＵ５０、メモリ５１、ネットワーク・インタフェース５２を有するものとした。しかし、実施例はこれに限定されるものではなく、ジョブを実行することができ、かつ、他の計算ノードと直接結合することができる計算ノードであれば、任意の構成を適用することができる。
【０２３２】
（５）プログラム
ところで、実施例１〜５制御装置３０〜３０ｅは、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムを並列計算機を制御するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図４０を用いて、実施例１に示した制御装置３０と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図４０は、制御プログラムを実行するコンピュータの一例を説明するための図である。
【０２３３】
図４０に例示されたコンピュータ１００は、ＲＡＭ１２０、ＲＯＭ１３０、ＨＤＤ１５０がバス１７０で接続される。また、図４０に例示されたコンピュータ１００は、ＣＰＵ１４０がバス１７０で接続される。さらにバス１７０には、利用者から仮想座標のサイズを受信するとともに、並列計算機が有する故障ノードの検出や各計算ノードに対するジョブの割当てを行うための入出力装置であるＩ／Ｏ（Input/Output）１６０が接続される。
【０２３４】
ＲＯＭ１３０には、制御プログラム１３１があらかじめ保持される。ＣＰＵ１４０が制御プログラム１３１をＲＯＭ１３０から読み出して実行することによって、図４０に示す例では、制御プログラム１３１は、制御プロセス１４１として機能するようになる。なお、制御プロセス１４１は、図１に示した制御装置３０と同様の機能を発揮する。また、各制御プロセス１４１は、実施例２〜６に係る各部と同等の機能を発揮するようにすることも可能である。
【０２３５】
なお、本実施例で説明した制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ（Compact  Disc  Read  Only  Memory）、ＭＯ（Magneto  Optical  Disc）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０２３６】
１〜１ｄ  並列計算機システム
２  入力装置
３  出力装置
１０〜１０ｃ  並列計算機
１１〜２２、１１ａ〜２２ａ、１１ｂ〜２２ｂ、１１ｃ〜２２ｃ、１１ｄ〜２２ｄ  計算ユニット
３０〜３０ｅ  制御装置
３１、３１ａ  受付部
３２  故障ノード検出部
３３〜３３ｃ  実行ノード選択部
３４〜３４ｄ  経路選択部
３５  出力部
３６  記憶部
４０〜４８  計算ノード
５０  ＣＰＵ
５１  メモリ
５２  ネットワーク・インタフェース
【図１】
0005750963.tif 000004
【図２】
0005750963.tif 000005
【図３】
0005750963.tif 000006
【図４】
0005750963.tif 000007
【図５Ａ】
0005750963.tif 000008
【図５Ｂ】
0005750963.tif 000009
【図５Ｃ】
0005750963.tif 000010
【図６Ａ】
0005750963.tif 000011
【図６Ｂ】
0005750963.tif 000012
【図６Ｃ】
0005750963.tif 000013
【図６Ｄ】
0005750963.tif 000014
【図６Ｅ】
0005750963.tif 000015
【図６Ｆ】
0005750963.tif 000016
【図６Ｇ】
0005750963.tif 000017
【図７】
0005750963.tif 000018
【図８】
0005750963.tif 000019
【図９】
0005750963.tif 000020
【図１０Ａ】
0005750963.tif 000021
【図１０Ｂ】
0005750963.tif 000022
【図１０Ｃ】
0005750963.tif 000023
【図１０Ｄ】
0005750963.tif 000024
【図１０Ｅ】
0005750963.tif 000025
【図１０Ｆ】
0005750963.tif 000026
【図１０Ｇ】
0005750963.tif 000027
【図１０Ｈ】
0005750963.tif 000028
【図１０Ｉ】
0005750963.tif 000029
【図１１Ａ】
0005750963.tif 000030
【図１１Ｂ】
0005750963.tif 000031
【図１１Ｃ】
0005750963.tif 000032
【図１１Ｄ】
0005750963.tif 000033
【図１１Ｅ】
0005750963.tif 000034
【図１１Ｆ】
0005750963.tif 000035
【図１２Ａ】
0005750963.tif 000036
【図１２Ｂ】
0005750963.tif 000037
【図１２Ｃ】
0005750963.tif 000038
【図１２Ｄ】
0005750963.tif 000039
【図１３】
0005750963.tif 000040
【図１４】
0005750963.tif 000041
【図１５】
0005750963.tif 000042
【図１６】
0005750963.tif 000043
【図１７】
0005750963.tif 000044
【図１８Ａ】
0005750963.tif 000045
【図１８Ｂ】
0005750963.tif 000046
【図１８Ｃ】
0005750963.tif 000047
【図１８Ｄ】
0005750963.tif 000048
【図１９】
0005750963.tif 000049
【図２０】
0005750963.tif 000050
【図２１】
0005750963.tif 000051
【図２２Ａ】
0005750963.tif 000052
【図２２Ｂ】
0005750963.tif 000053
【図２２Ｃ】
0005750963.tif 000054
【図２２Ｄ】
0005750963.tif 000055
【図２２Ｅ】
0005750963.tif 000056
【図２２Ｆ】
0005750963.tif 000057
【図２３】
0005750963.tif 000058
【図２４】
0005750963.tif 000059
【図２５Ａ】
0005750963.tif 000060
【図２５Ｂ】
0005750963.tif 000061
【図２５Ｃ】
0005750963.tif 000062
【図２５Ｄ】
0005750963.tif 000063
【図２５Ｅ】
0005750963.tif 000064
【図２５Ｆ】
0005750963.tif 000065
【図２６】
0005750963.tif 000066
【図２７】
0005750963.tif 000067
【図２８】
0005750963.tif 000068
【図２９】
0005750963.tif 000069
【図３０】
0005750963.tif 000070
【図３１】
0005750963.tif 000071
【図３２】
0005750963.tif 000072
【図３３】
0005750963.tif 000073
【図３４】
0005750963.tif 000074
【図３５】
0005750963.tif 000075
【図３６】
0005750963.tif 000076
【図３７】
0005750963.tif 000077
【図３８】
0005750963.tif 000078
【図３９】
0005750963.tif 000079
【図４０】
0005750963.tif 000080
【図４１】
0005750963.tif 000081
【図４２】
0005750963.tif 000082