以下に添付図面を参照して本願に係る並列計算機システム、制御装置、並列計算機システムの制御方法および並列計算機システムの制御プログラムについて説明する。
以下の実施例1では、図1を用いて、1次元の直接結合網を利用者に提供する並列計算機システムの一例を説明する。図1は、実施例1に係る並列計算機システムを説明するための図である。
図1に示すように、並列計算機システム1は、入力装置2、出力装置3、並列計算機10、制御装置30を有する。また、並列計算機10は、複数の計算ユニット11〜22を有する。また、制御装置30は、受付部31、故障ノード検出部32、実行ノード選択部33、経路選択部34、出力部35、記憶部36を有する。
なお、各計算ユニット12〜14については、計算ユニット11と同様の計算ユニットであるものとして説明を省略する。また、入力装置2は、利用者が制御装置30に対して指示をするための入力装置であり、キーボードやマウス等の入力用デバイスである。また、出力装置3は、制御装置30による処理の結果を表示するための出力装置であり、モニタやプリンタ等の出力用デバイスである。
並列計算機10は、複数の計算ユニット11〜22と、各計算ユニット11〜22を相互に接続する複数のリンクを有する。ここで、各リンクは、隣接する計算ユニット同士を接続する経路であり、隣接する2つの計算ユニットが有する複数の計算ノードを一対一に接続する複数の経路を含んでいる。
以下、並列計算機10が有する各計算ユニット11〜22と、各計算ユニット11〜22が有する計算ノードについて説明する。図2は、実施例1に係る計算ユニットを説明するための図である。図2に示す例では、計算ユニット11〜22は、3つの計算ノード40〜42をそれぞれ有する。また、各計算ノード40〜42は、環状に接続されている。つまり、各計算ノード40〜42は、相互に接続されている。なお、各計算ノード41、42は、計算ノード40と同様の計算ノードであるものとし、説明を省略する。
図3は、実施例1に係る計算ノードを説明するための図である。図3に示す例では、計算ノード40は、CPU(Central Processing Unit)50、メモリ51、ネットワーク・インタフェース52を有する。ここで、CPU50は、計算ノード40にマッピングされたプログラムを実行する演算装置である。また、メモリ51は、CPU50がプログラムを実行する際に用いるデータが格納されるメモリである。
ネットワーク・インタフェース52は、他のノード間との通信を行う装置である。具体例を説明すると、ネットワーク・インタフェース52は、リンクを介して、他の計算ノード41、42が有するネットワーク・インタフェースと通信する。また、ネットワーク・インタフェース52は、リンクを介して、計算ユニット12が有する計算ノードのうち、計算ノード40に対応する位置の計算ノードが有するネットワーク・インタフェースと通信する。
つまり、各計算ユニット11〜22を接続するリンクは、隣接する計算ユニットが有する各計算ノードを一対一で接続する複数の経路を有する。図4は、実施例1に係るライン状のトポロジの並列計算機が有するリンクを説明するための図である。図4に示す例では、各計算ユニット11〜22が有する複数の計算ノードと、隣接する計算ユニットが有する複数の計算ノードとが一対一で接続されている。つまり、隣接する計算ユニット間を接続するリンクは、各計算ユニット11〜22が3つの計算ノードを有する場合には、隣接する計算ユニット間の通信を伝達する3つの経路を含んでいる。
図1に戻って、制御装置30は、並列計算機10を制御する制御装置である。具体例を説明すると、制御装置30は、利用者からプログラムを実行させる計算ノードの数の指定を受け付ける。計算ノードの数の指定を受け付けた場合には、制御装置30は、プログラムを実行させる計算ノードを判定し、判定した各計算ノードに連続する番号を仮想座標として付与する。この際、制御装置30は、リンクで直接接合された隣接する各計算ノードに対して、連続する仮想座標を付与する。その後、制御装置30は、プログラムを実行させる計算ノードを示す情報と各計算ノードに付与した仮想座標とを出力する。
以下、制御装置30が有する各部31〜36について説明する。受付部31は、入力装置2を介して入力された利用者の指示を受け付ける。具体例を説明すると、受付部31は、利用者が入力した計算ノードの数を、入力装置2を介して受け付ける。つまり、受付部31は、入力装置2を介して、並列計算機10が有する複数の計算ノードのうち、プログラムを実行させる計算ノードの数を利用者から受け付ける。そして、受付部31は、利用者から受け付けた計算ノードの数を実行ノード選択部33に通知する。
故障ノード検出部32は、並列計算機10が有する各計算ノードから、故障が発生した故障ノードを検出する。例えば、故障ノード検出部32は、並列計算機10が有する各計算ノードに対して、定期的に信号を送信し、送信した信号に対する返信がない計算ノードを故障ノードとして検出する。そして、故障ノード検出部32は、検出した故障ノードを実行ノード選択部33と経路選択部34に通知する。
なお、故障ノード検出部32が故障ノードを検出する処理は、他の任意の方法を用いるものであってよい。例えば、各計算ユニットは、計算ユニット内の計算ノードが動作しているか否かに応じて故障ノードを検出する故障ノード検出装置を有し、故障ノード検出部32が、各計算ユニットが有する故障ノード検出装置から故障に関する情報を収集することとしてもよい。
実行ノード選択部33は、プログラムの実行に必要な計算ノード数に基づいて、並列計算機10が有する故障ノード以外の計算ノードから、プログラムを実行させる計算ノードを選択する。具体例を説明すると、実行ノード選択部33は、受付部31からプログラムを実行させる計算ノードの数の通知を受け付ける。また、計算ノード選択部33は、故障ノード検出部32から故障ノードの通知を受け付ける。
そして、実行ノード選択部33は、以下の式(1)を用いて、プログラムを実行させる計算ユニットの数を算出する。ここで、式(1)中の「N」は、プログラムを実行させる計算ノードの数であり、「m」は、1つの計算ユニットが有する計算ノードの数であり、「k」は、故障ノードの数である。また、式(1)中の「ceiling」とは、括弧内の数値のうち、小数点以下の数値を切り上げる操作を示す。
また、実行ノード選択部33は、式(1)を用いて、プログラムを実行させる計算ユニットの数を算出した場合には、算出した数の隣接する計算ユニットを選択する。つまり、実行ノード選択部33は、算出した数の計算ユニットであって、リンクを介して直列に接続された複数の計算ユニットを選択する。そして、実行ノード選択部33は、選択した複数の計算ユニットを経路選択部34に通知する。
経路選択部34は、実行ノード選択部33によって選択された計算ノードを有する複数の計算ユニットについて、隣接する2つの計算ユニットを接続する各リンクから故障ノードに接続された経路以外の経路を選択する。
具体例を説明すると、経路選択部34は、実行ノード選択部33によって選択された計算ユニットの通知を受け付ける。また、経路選択部34は、故障ノード検出部32から、検出された故障ノードの通知を受け付ける。そして、経路選択部34は、通知された複数の計算ユニットのうち、1つの計算ユニットのみと接続された計算ユニット、すなわち、列状に接続された複数の計算ユニットの端に位置する計算ユニットから順に、隣接する計算ユニット間での通信に使用する経路を選択する。
ここで、経路選択部34は、隣接する計算ユニット間での通信に使用する経路を選択する場合には、以下に説明する処理を実行する。すなわち、経路選択部34は、隣接する計算ユニット間での通信に使用する経路を選択する。また、経路選択部34は、同じ経路のタイプが連続しないように、例えば、選択する経路を巡回的に変化させながら、各計算ユニット間での通信に使用する経路であって、故障ノードに接続されていない経路を選択する。
また、経路選択部34は、各計算ユニット間を接続する経路をすべて選択した場合には、以下の処理を実行することで、各計算ユニットが有する計算ノードの接続経路を選択する。すなわち、経路選択部34は、両端以外の計算ユニットについて、隣接する計算ユニットとの間において選択した経路に接続された2つの計算ノードを判別する。そして、経路選択部34は、判別した各計算ノードを両端として、計算ユニットに含まれる故障していない全ての計算ノードを一度だけ通る経路を選択する。
また、経路選択部34は、実行ノード選択部33から通知された各計算ユニット間の経路、および、各計算ユニットが有する各計算ノードの接続経路を選択した場合には、以下の処理を実行する。すなわち、経路選択部34は、一方の端に存在する計算ユニットから、他方の端に存在する計算ユニットまで、選択した経路および選択した計算ノード間の接続経路を辿るように、各計算ノードに連続する番号を付与する。
つまり、経路選択部34は、実行ノード選択部33から通知された各計算ユニットが有する計算ノードのうち、故障ノード検出部32から通知された故障ノード以外の計算ノードに対して、一筆書きを描くように連続する番号を仮想座標として付与する。つまり、経路選択部34は、実行ノード選択部33が選択した計算ユニットを1次元のライン型の直接結合とするための仮想座標を各計算ノードに付与する。なお、1次元のライン型に直接結合された計算ノードは、直列に接続された計算ノードとなる。その後、経路選択部34は、各計算ノードと各計算ノードに付与した仮想座標との対応を示す情報を出力部35に通知する。
出力部35は、経路選択部34から仮想座標をどの計算ノードに付与したかを通知された場合には、各計算ノードを示す情報を、各計算ノードに付与した連続する仮想座標の順番に並べた情報を作成する。そして、出力部35は、出力装置3を介して作成した情報を出力する。また、出力部35は、作成した情報を記憶部36に格納する。
なお、記憶部36に格納された情報は、利用者によって作成された並列計算プログラムを並列計算機10が実行する際に使用される。例えば、制御装置30は、MPI(Message Passing Interface)実行時のライブラリが参照して仮想座標と物理座標との対応を取得するためのファイルを作成し、作成したファイルを記憶部36に記憶させる。また、並列計算プログラムには、複数の処理の実行命令が含まれており、各処理を実行する計算ノードが仮想座標によって指定されている。このような場合には、ライブラリが記憶部36に格納された情報を参照し、並列計算プログラムが指定する仮想座標が付与された計算ノードを判別する。そして、ライブラリは、判別した計算ノードに対して、処理を割当てる。
例えば、受付部31、故障ノード検出部32、実行ノード選択部33、経路選択部34、出力部35は、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPUやMPU(Micro Processing Unit)などの演算処理装置などを適用する。
また、記憶部36とは、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
次に、図5A〜5Cおよび図6A〜6Gを用いて、制御装置30が実行する処理の一例について説明する。なお、図5A〜5Cおよび図6A〜6G中の丸印は、1つの計算ノードを示すものとする。また、図5A〜5Cの複数の計算ノードを囲む点線は、1つの計算ユニットを示すものとする。また、図6A〜6G中の複数の計算ノードを囲む実線は、1つの計算ユニットを示すものとする。また、図6A〜6G中のバツ印が付された丸印は、故障ノードを示すものとする。
また、以下の説明では、制御装置30は、各計算ユニット11〜22が有する各計算ノードに対して、「0」、「1」、「2」の番号を付し、各計算ユニット11〜22に対して、番号「0」〜「11」を付すものとする。そして、制御装置30は、並列計算機10が有する各計算ノードを、計算ノードに付した番号と計算ユニットに付した番号との組み合わせによって示すものとする。例えば、制御装置30は、「0」番の計算ユニットが有する「2」番の計算ノードを物理座標「(0、2)」で示すものとする。
図5Aは、隣接する計算ユニットを接続する経路の例を説明するための図(1)である。図5Aに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「0」の計算ノード同士を接続する経路をタイプ「0」の経路とする。また、図5Bは、隣接する計算ユニットを接続する経路の例を説明するための図(2)である。図5Bに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「1」の計算ノード同士を接続する経路をタイプ「1」の経路とする。また、図5Cは、隣接する計算ユニットを接続する経路の例を説明するための図(3)である。図5Cに示すように、隣接する計算ユニットが有する各計算ノードのうち、番号「2」の計算ノード同士を接続する経路をタイプ「2」の経路とする。
図6Aは、実施例1に係る制御装置が実行する処理の例について説明するための図(1)である。例えば、制御装置30は、入力装置2を介して、利用者からプログラムを実行させる計算ノードの数「32」を受け付けたものとする。このような場合には、制御装置30は、並列計算機10が有する各計算ノードから故障した計算ノードを検出する。図6Aに示す例では、制御装置30は、物理座標「(4、1)」、「(9、0)」、「(9、2)」が故障ノードであることを検出する。
また、制御装置30は、式(1)を「N=32」、「m=3」、「k=3」として解き、プログラムを実行させる計算ユニットの数「n=12」を算出する。そして、制御装置30は、並列計算機10が有する計算ユニット11〜22を、直列に接続された番号「0」〜「11」までの12個の計算ユニットとして選択する。
図6Bは、実施例1に係る制御装置が実行する処理の例について説明するための図(2)である。制御装置30は、プログラムを実行させる計算ユニットを選択した場合には、図6Bに示すように、「0」番の計算ユニットから順に、隣接する計算ユニットとの間で通信を中継する経路のタイプを同じタイプが連続しないように巡回的に変化させながら選択する。
図6Bに示す例では、制御装置30は、「0」番の計算ユニットと「1」番の計算ユニットとの間においてタイプ「0」の経路を選択し、「1」番の計算ユニットと「2」番の計算ユニットとの間においてタイプ「1」の経路を選択する。また、制御装置30は、「2」番の計算ユニットと「3」番の計算ユニットとの間においてタイプ「2」の経路を選択し、「3」番の計算ユニットと「4」番の計算ユニットとの間において、タイプ「0」の経路を再度選択する。
ここで、図6Cは、実施例1に係る制御装置が実行する処理の例について説明するための図(3)である。図6Cに示すように、「4」番の計算ユニットが有する「1」番の計算ノード、すなわち物理座標「(1、4)」で示される計算ノードは、故障ノードである。このため、制御装置30は、「4」番の計算ユニットと「5」番の計算ユニットとの間においてタイプ「1」の経路を選択対象から除外する。また、制御装置30は、「3」番の計算ユニットと「4」番の計算ユニット間において、タイプ「0」の経路が選択されているので、タイプ「0」の経路を選択対象から除外する。
この結果、制御装置30は、「4」番の計算ユニットと「5」番の計算ユニット間において、タイプ「2」の経路を選択する。その後、制御装置30は、再度、経路のタイプを巡回的に変化させながら、各計算ユニット間の経路を選択する。
また、制御装置30は、2つの故障ノードを有する「9」番の計算ユニットについては、隣接する「8」番および「10」番の計算ユニットとの間に異なるタイプの経路を選択することができない。このように、複数の故障ノードを有するため、隣接する計算ユニットとの間でそれぞれ異なるタイプの経路を選択できない場合には、制御装置30は、同じタイプの経路を選択する。
つまり、図6Dに示すように、制御装置30は、「8」番の計算ユニットと「9」番の計算ユニットとの間、および「9」番の計算ユニットと「10」番の計算ユニットとの間において、タイプ「1」の経路を選択する。その後、制御装置30は、「10」番の計算ユニットと「11」番の計算ユニットとの間において、タイプ「2」の経路を選択する。なお、図6Dは、実施例1に係る制御装置が実行する処理の例について説明するための図(4)である。
図6Eは、実施例1に係る制御装置が実行する処理の例について説明するための図(5)である。図6Eに示すように、制御装置30は、「0」番から「11」番までの計算ユニット間の経路のタイプを選択した場合には、「1」番から「10」番までの各計算ユニット内での経路を選択する。具体例を説明すると、制御装置30は、「1」番から「10」番までの各計算ユニット内において、隣接する計算ユニットとの間において選択された経路に接続されている各計算ノードを両端として、他の計算ノードを1回だけ通るように、計算ユニット内の経路を選択する。
図6Fは、実施例1に係る制御装置が実行する処理の例について説明するための図(6)である。図6Fに示すように、制御装置30は、各計算ユニット内での経路を選択した場合には、「0」番の計算ユニットから「11」番の計算ユニットまで、選択された経路によって直列に接続された32個の計算ノードを識別する。
図6Gは、実施例1に係る制御装置が実行する処理の例について説明するための図(7)である。図6Gに示すように、制御装置30は、識別した32個の計算ノードに「0」から「31」までの番号を仮想座標として付与する。つまり、制御装置30は、選択した経路によって隣接する計算ノードと直接結合し、かつ、直列に接続している複数の計算ノードに対して、連続する仮想座標を付与する。
また、制御装置30は、仮想座標を付与した物理座標を仮想座標の順番に記載したファイル(マシンファイル)を作成する。そして、制御装置30は、作成したファイルを、出力装置3を介して出力するとともに、作成したファイルを記憶する。
[制御装置の処理の流れ]
次に、図7を用いて、制御装置30が実行する処理の流れの一例について説明する。図7は、実施例1に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、以下の説明では、制御装置30は、プログラムを実行させる計算ユニットとして、n個の計算ユニットを選択するものとする。また、図7に示す例では、制御装置30は、入力装置2を介して、プログラムを実行させる計算ノードの数「N」の入力を受付けたことをトリガとして、処理を開始する。
まず、制御装置30は、式(1)を用いて、プログラムを実行させる連続した「0」〜「n−1」番の計算ユニットを選択する(ステップS101)。次に、制御装置30は、各計算ユニット間の経路のタイプCT(0)〜CT(n−2)を決定する(ステップS102)。なお、CT(x)は、「x」番の計算ユニットと「x+1」番の計算ユニットとの間において、制御装置30が選択した経路を示す記号である。
次に、制御装置30は、「1」〜「n−2」番の計算ユニット内における経路を選択する(ステップS103)。続いて、制御装置30は、「0」番の計算ユニットと「n−1」番の計算ユニット、すなわち両端の計算ユニット、内における経路を選択する(ステップS104)。そして、制御装置30は、選択した経路に沿って、各計算ノードに仮想座標を付与する(ステップS105)。その後、制御装置30は、仮想座標の順に各計算ノードの物理座標を記載したファイルを出力および記憶し(ステップS106)、処理を終了する。
次に、図8を用いて、制御装置30が経路のタイプを選択する処理(図7中ステップS102)について詳しく説明する。図8は、経路のタイプを選択する処理の一例を説明するためのフローチャートである。なお、図8中の「F」は、故障ノードを示す物理座標の集合体である。
まず、制御装置30は、パラメータ「x」とパラメータ「u」を初期化し、「x=0」、「u=0」とする(ステップS201)。次に、制御装置30は、「counter」の値を1つの計算ユニットが有する計算ノードの数「m」にセットする(ステップS202)。次に、制御装置30は、「u+1」を「m」で除算した剰余の値を算出し、算出した値を新たな「u」とする(ステップS203)。
そして、制御装置30は、計算ノードの物理座標「(x、u)」または「(x+1、u)」が「F」に含まれているか否かを判別する(ステップS204)。その後、制御装置30は、物理座標「(x、u)」または「(x+1、u)」が「F」に含まれている場合には(ステップS204肯定)、以下の処理を実行する。すなわち、制御装置30は、「counter」の値から1を減算し、新たな「counter」の値が「0」よりも大きいか否かを判別する(ステップS205)。
また、制御装置30は、新たな「counter」の値が0よりも大きいと判別した場合には(ステップS205肯定)、再度、ステップS203の処理を行う。また、制御装置30は、新たな「counter」の値が「0」に達したと判別した場合には(ステップS205否定)、経路を選択することができないと判断し、実行ノード選択部33に制御を戻して、他の複数の計算ユニットを選択し、以降の処理を繰り返す。あるいは、経路を選択することができないと判断した場合には、出力装置3を介して、利用者にエラー終了を通知してもよい(ステップS206)。
一方、制御装置30は、物理座標「(x、u)」または「(x+1、u)」が「F」に含まれていないと判別した場合には(ステップS204否定)、「CT(x)」を「u」にセットする(ステップS207)。つまり、制御装置30は、「x」番目の計算ユニットと「x+1」番目の計算ユニットとの間において、タイプ「u」の経路を選択する。
その後、制御装置30は、「x」の値に「1」を加算した値を新たな「x」の値とし、新たな「x」が「n−2」以下であるか否かを判別する(ステップS208)。つまり、制御装置30は、プログラムを実行させる全ての計算ユニット間における経路を選択したか否かを判別する。その後、制御装置30は、新たな「x」が「n−2」以下であると判別した場合、つまり、プログラムを実行させる全ての計算ユニット間における経路を選択していない場合には(ステップS208肯定)、再度ステップS202を実行する。また、制御装置30は、新たな「x」が「n−2」以下ではないと判別した場合、つまり、プログラムを実行させる全ての計算ユニット間における経路を選択した場合には、経路のタイプを選択する処理を終了する。
[実施例1の効果]
上述したように、制御装置30は、並列計算機10が有する全ての計算ノードから故障ノードを検出する。また、制御装置30は、プログラムの実行に必要な計算ノード数に基づいて、並列計算機10が有する計算ノードであって、検出した故障ノード以外の計算ノードからプログラムを実行させる計算ノードを選択する。
そして、制御装置30は、選択した計算ノードを含む隣接する計算ユニット間において、検出された故障ノード以外の計算ノードに接続された経路を選択する。このため、制御装置30は、シミュレーションの対象となる計算空間を分割した各領域を適切な位置関係を有する計算ノードにマッピングすることができる。
つまり、制御装置30は、並列計算機10が有する計算ノードのうち、故障ノード以外の計算ノード間において通信を中継する経路を、計算ノードが1次元の直接結合網を構成するように選択する。このため、制御装置30は、隣接する計算ノード間における通信が効率的に行われることを保証する複数の計算ノードを有する1次元の直接結合網を提供することができる。この結果、並列計算機システム1は、計算空間を直線状の1次元領域に分割した際に、分割した各領域を各領域と同じ位置関係を有する各計算ノードにマッピングすることができるので、故障ノードが存在する場合にも、システム全体の性能を保持することができる。
また、並列計算機システム1は、リンクを介して直列に接続された複数の計算ユニット11〜22を有する。また、各計算ユニット11〜22は、相互に接続された複数の計算ノードを有する。そして、制御装置30は、プログラムを実行させる計算ノードを選択し、選択した計算ノード間の経路を、一筆書きを描くように選択する。
すなわち、制御装置30は、連続した計算ユニット間の経路のうち、故障ノードに接続されていない経路を選択する。また、制御装置30は、各計算ユニットについて、選択した計算ユニット間の経路に接続されている計算ノードを両端とし、各計算ノードを一度だけ通る計算ユニット内の経路を選択する。その後、制御装置30は、選択した計算ユニット間の経路および選択した計算ユニット内の経路に従って、直接結合された各計算ノードに連続する仮想ノード番号を付与する。このため、並列計算機システム1は、故障ノードが存在する場合にも、1次元のトポロジを有する直接結合網を利用者に提供することができる。
また、制御装置30は、各計算ユニット11〜22の間のリンクから経路を選択する場合には、巡回的に異なるタイプの経路を選択する。このため、並列計算機システム1は、各計算ノード間の通信を効率的に行わせることができる。
つまり、制御装置30が同じタイプの経路を連続して選択した場合には、1つの計算ユニットが有する複数の計算ノードの通信を1つの計算ノードがすべて中継することとなり、通信効率が悪化する。しかし、制御装置30は、ある計算ユニット内に故障していない計算ノードが2つ以上ある場合には、この計算ユニットと隣接する計算ユニットとの間において、それぞれ異なるタイプの経路を選択する。この結果、並列計算機システム1は、1つの計算ユニットが有する複数の計算ノードの通信を1つの計算ノードが中継する状態を防止し、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障することによって、各計算ノード間の通信を効率的に行わせるとともに、各計算ノードにプログラムを効率的に実行させることができる。
実施例2では、1次元のトーラス型のトポロジを有する直接結合網のネットワークを利用者に提供する並列計算機システム1aについて説明する。図9は、実施例2に係る並列計算機システムを説明するための図である。図9に示す例では、並列計算機システム1aは、入力装置2、出力装置3、並列計算機10、制御装置30aを有する。また、並列計算機10は、複数の計算ユニット11〜22を有する、また、制御装置30aは、受付部31、故障ノード検出部32、実行ノード選択部33、経路選択部34a、出力部35、記憶部36を有する。
すなわち、並列計算機システム1aは、実施例1に係る経路選択部34と対応する経路選択部34aによって実行される処理のみが、実施例1に係る並列計算機システム1と異なる。このため、入力装置2、出力装置3、並列計算機10、受付部31、故障ノード検出部32、実行ノード選択部33、出力部35、記憶部36については、実施例1において同一の符号を付した各部と同様の処理を実行するものとし、以後の説明を省略する。
経路選択部34aは、実行ノード選択部33が選択した複数の計算ノードを有する各計算ユニット間の各リンクから、故障ノードに接続されていない2つの経路を往路と復路として選択する。そして、経路選択部34aは、両端以外の計算ユニットについて、往路に接続された計算ノード間の接続経路と、復路に接続された計算ノード間の接続経路とを、故障していない各計算ノードを各接続経路が一度だけ通るように選択する。
また、経路選択部34aは、両端の計算ユニットについて、往路に接続された計算ノードと復路に接続された計算ノードとを両端として、他の故障していない計算ノードを一度だけ通る接続経路を選択する。その後、経路選択部34aは、計算ユニット間および計算ユニット内において選択した各経路を辿るように、直接結合された各計算ノードに対して、連続する番号を仮想座標として付与する。
つまり、経路選択部34aは、実行ノード選択部33が選択した計算ノードを1次元のトーラス型の直接結合とするための仮想座標を各計算ノードに付与する。なお、1次元のトーラス型に直接結合した各計算ノードは、リング状に接続されることとなる。このため、制御装置30aは、並列計算機10に故障ノードが存在する場合にも、利用者によって指定された数の計算ノードをトーラス型に直接結合したシステムを利用者に提供することができる。
次に、図10A〜10Iを用いて、制御装置30aが各計算ユニット間のリンクから選択する経路のタイプの例について説明する。図10Aは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(1)である。図10Aに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「0」の計算ノード同士、および、番号「1」の計算ノード同士を接続する経路をタイプ「01」とする。
また、図10Bは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(2)である。図10Bに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「1」の計算ノード同士、および、番号「2」の計算ノード同士を接続する経路をタイプ「12」とする。また、図10Cは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(3)である。図10Cに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「0」の計算ノード同士、および、番号「2」の計算ノード同士を接続する経路をタイプ「20」とする。
なお、図10A〜10Cでは、各計算ユニットが3つの計算ノードを有する例について説明したが、各計算ユニットは、4つ以上の計算ノードを有してもよい。このような場合には、各計算ユニット間のリンクから選択される経路のタイプは、以下の説明のようになる。例えば、図10Dは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(4)である。図10Dに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「0」の計算ノード同士、および、番号「1」の計算ノード同士を接続する経路はタイプ「01」となる。
また、図10Eは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(5)である。図10Eに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「1」の計算ノード同士、および、番号「2」の計算ノード同士を接続する経路はタイプ「12」となる。また、図10Fは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(6)である。図10Fに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「2」の計算ノード同士、および、番号「3」の計算ノード同士を接続する経路はタイプ「23」となる。
また、図10Gは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(7)である。図10Gに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「0」の計算ノード同士、および、番号「3」の計算ノード同士を接続する経路はタイプ「30」となる。また、図10Hは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(8)である。図10Hに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「0」の計算ノード同士、および、番号「2」の計算ノード同士を接続する経路はタイプ「02」となる。
また、図10Iは、実施例2において隣接する計算ユニットを接続する経路の例を説明するための図(9)である。図10Iに示すように、隣接する計算ユニットが有する各計算ノードのうち番号「1」の計算ノード同士、および、番号「3」の計算ノード同士を接続する経路はタイプ「13」となる。
次に、図11A〜図11Fを用いて、制御装置30aが経路を選択する処理について説明する。図11Aは、実施例2に係る制御装置が実行する処理の例について説明するための図(1)である。例えば、制御装置30aは、入力装置2を介して、利用者からプログラムを実行させる計算ノードの数「32」を受け付けたものとする。
このような場合には、制御装置30aは、仮想座標を付与する計算ユニットとして、計算ユニット11〜22を選択し、各計算ユニットに「0」〜「11」までの番号を付与する。また、制御装置30aは、各計算ユニット11〜22が有する計算ノードに「0」〜「2」までの番号を付与する。また、制御装置30aは、各計算ノードの動作を確認し、物理座標「(4、1)」、「(8、0)」の計算ノードが故障ノードであると検出する。
図11Bは、実施例2に係る制御装置が実行する処理の例について説明するための図(2)である。まず、制御装置30aは、検出された故障ノードを含む番号「4」の計算ユニットと番号「8」の計算ユニットを識別する。そして、制御装置30aは、識別した「4」番の計算ユニットと、「4」番の計算ユニットに隣接する計算ユニットとの間の経路のタイプを選択する。
つまり、制御装置30aは、「4」番の計算ユニットと隣接する「3」番の計算ユニットとの間、および、「4」番の計算ユニットと隣接する「5」番の計算ユニットとの間において、タイプ「20」の経路を選択する。また、制御装置30aは、「8」番の計算ユニットと隣接する「7」番の計算ユニットとの間、および、「8」番の計算ユニットと隣接する「9」番の計算ユニットとの間において、タイプ「12」の経路を選択する。なお、図11A〜11Fに示す例では、各計算ユニットが「3」個の計算ノードを有するので、1つの故障ノードを有する計算ユニットと、隣接する計算ユニットとの間において選択される経路のタイプは、図11A〜11Fに示す例のように定めることができる。
図11Cは、実施例2に係る制御装置が実行する処理の例について説明するための図(3)である。制御装置30aは、故障ノードを有する計算ユニットと隣接する計算ユニットとの間の経路のタイプを選択した場合には、「0」番の計算ユニットから順に、隣接する計算ユニット間で通信を中継する経路のタイプを、例えば巡回的に変化させながら選択する。
図11Cに示す例では、制御装置30aは、「0」番の計算ユニットと「1」番の計算ユニットとの間においてタイプ「20」の経路を選択し、「1」番の計算ユニットと「2」番の計算ユニットとの間においてタイプ「01」の経路を選択する。また、制御装置30aは、「2」番の計算ユニットと「3」番の計算ユニットとの間においてタイプ「12」の経路を選択する。また、制御装置30aは、他の計算ユニット間においても、巡回的に経路のタイプを選択し、実行ノード選択部33によって選択された計算ノードを有する全ての計算ユニット間における経路のタイプを選択する。
図11Dは、実施例2に係る制御装置が実行する処理の例について説明するための図(4)である。図11Dに示すように、制御装置30aは、実行ノード選択部33によって選択された計算ノードを有する全ての計算ユニット間における経路のタイプを選択した場合には、各計算ユニット内における経路を選択する。
具体例を説明すると、制御装置30aは、両端以外の各計算ユニットについて、選択された経路のタイプが「ij」と「jk」(「i≠j≠k」)で表すことができる場合には、「i」番の計算ノードと「k」番の計算ノードとを接続する経路を選択する。また、制御装置30aは、各計算ユニットについて、隣接する計算ユニットとの間において選択された経路のタイプが同じタイプであった場合には、計算ユニット内の計算ノードを接続する経路が無いと判断する。
図11Eは、実施例2に係る制御装置が実行する処理の例について説明するための図(5)である。図11Eに示すように、制御装置30aは、両端以外の各計算ユニットについて、隣接する計算ユニット間の経路および計算ユニット内の各計算ノードを接続する経路とを選択した場合には、両端の計算ユニット内の各計算ノードを接続する経路を選択する。ここで、図11Eに示す例では、制御装置30aは、利用者から指定された計算ノードの数が32個であるので、「0」番の計算ユニットと「11」番の計算ユニットとにおいて、合わせて2つの計算ノードを除外した経路を選択する。
図11Fは、実施例2に係る制御装置が実行する処理の例について説明するための図(6)である。図11Fに示すように、制御装置30aは、隣接する計算ユニット間の各経路、および、各計算ユニット内における計算ノードを接続する経路を選択した場合には、選択した経路を辿るように、各計算ノードに連続した番号を仮想座標として付与する。その後、制御装置30aは、各計算ノードの物理座標を仮想座標の順に並べたファイルを出力、および記憶する。
なお、制御装置30aは、1つの計算ユニット内に「4」個以上の相互に接続された計算ノードが存在する場合にも、上述した処理を行うことで、適切に仮想座標を付与することができる。ここで、制御装置30aは、両端以外の各計算ユニットについて、選択された経路のタイプが「ij」と「jk」(「i≠j≠k」)で表すことができる場合には、「i」番、「j」番、「k」番以外の計算ノードをすべて通って「i」番の計算ノードと「k」番の計算ノードとを接続する経路を選択する。また、制御装置30aは、選択された経路のタイプが「ij」と「kl」(「i≠j≠k≠l」)で表すことができる場合には、「i」番と「k」番、「j」番と「l」番をそれぞれ接続するか、「i」番と「l」番、「j」番と「k」番をそれぞれ接続するが、「i」番、「j」番、「k」番、「l」番以外の計算ノードもすべて通るように経路を選択する。
また、制御装置30aは、1つの計算ユニットが複数の故障ノードを有する場合、故障ノードを有する2つの計算ユニットが隣接、または、1つの計算ユニットを挟み込むように存在する場合には、経路のタイプを選択できない場合がある。以下、図12A〜12Cを用いて、具体例を説明する。
図12Aは、経路のタイプを選択できない例を説明するための図(1)である。図12Aに示すように、制御装置30aは、故障ノードを有する2つの計算ユニットが隣接する場合にも、2つの故障ノードが同じ番号である場合には、適切に経路を選択することができる。
一方、図12Bは、経路のタイプを選択できない例を説明するための図(2)である。図12Bに示すように、制御装置30aは、異なる番号の故障ノードを有する計算ユニットが隣接する場合には、往路又は復路の一方しか選択することができない。このような場合には、制御装置30aは、エラーを利用者に返し、仮想座標の付与ができないことを通知する。
なお、制御装置30aは、並列計算機10が多数の計算ユニットを有する場合には、新たに別の範囲に位置する複数の計算ユニットを選択し、選択した複数の計算ユニットについて、順次経路を選択することとしてもよい。
図12Cは、経路のタイプを選択できない例を説明するための図(3)である。図12Cに示す例では、異なる番号の故障ノードを有する計算ユニットが、1つの計算ユニットを挟んで隣接している。このような場合には、制御装置30aは、中央の計算ユニットにおいて、全ての計算ノードを接続する経路を選択することができる。
一方、図12Dは、経路のタイプを選択できない例を説明するための図(4)である。図12Dに示す例では、同じ番号の故障ノードを有する計算ユニットが、1つの計算ユニットを挟んで隣接している。このような場合には、制御装置30aは、中央の計算ユニットにおいて、全ての計算ノードを接続する経路を選択することができない。このような場合には、制御装置30aは、エラーを利用者に返し、仮想座標の付与ができないことを通知する。または、中央の計算ユニットの同じ位置のノードも故障ノードであるかのように扱えば、1ノードを無駄にするが仮想座標の付与ができる。
なお、上述した例では、制御装置30aは、故障ノードを有する計算ユニットについて経路を選択した後に、他の計算ユニットについての故障ノードを選択することとした。しかし、実施例はこれに限定されるものではなく、制御装置30aは、制御装置30と同様に、端に存在する計算ユニットから、他の端に存在する計算ユニットまで順番に、各計算ユニット間の経路を順次選択することとしてもよい。
[制御装置30aの処理の流れ]
次に、図13、図14を用いて、制御装置30aが経路のタイプを選択する処理の流れについて説明する。図13は、実施例2に係る制御装置が経路のタイプを選択する処理の一例を説明するためのフローチャート(1)である。なお、制御装置30aは、図7に示す制御装置30と同様の処理を実行するものとし、図7中のステップS102に対応する処理として、図13および図14に示す処理を実行するものとする。
まず、制御装置30aは、故障ノードを有する全ての計算ユニットについて、ステップS302〜S303に示す処理を実行したか否かを判別する(ステップS301)。そして、制御装置30aは、ステップS302〜S303の処理を実行していないと判別した場合には(ステップS301否定)、ステップS302〜S303の処理を実行していない計算ユニットについて、以下の処理を実行する。
すなわち、制御装置30aは、ステップS302〜S303の処理を実行していない計算ユニットと、隣接する計算ユニットとの間において、経路のタイプを選択する(ステップS302)。そして、制御装置30aは、経路のタイプの選択が成功したか否かを判別し(ステップS303)、成功した場合には(ステップS303肯定)、次の未処理の故障ノードを有する計算ユニットについて、ステップS301からの処理を実行する。
一方、制御装置30aは、経路のタイプの選択が失敗した場合には(ステップS303否定)、利用者にエラーを返し、処理を終了する。すなわち、制御装置30aは、図12Bや図12Dに示すように、同じ番号の故障ノードを有する計算ノードが隣接、あるいは1つの計算ノードを挟んで存在する場合には、利用者にエラーを返し、処理を終了する。
また、制御装置30aは、故障ノードを有する全ての計算ユニットについてステップS302〜S303の処理を実行した場合には(ステップS301肯定)、図14に示す処理を実行する。図14は、実施例2に係る制御装置が経路のタイプを選択する処理の一例を説明するための図(2)である。なお、図15は、非故障区間を説明するための図である。以下の説明では、図15に示すように、故障ノードを有さない計算ユニットが「xl」番から「xu」番まで連続する区間を非故障区間「xl、xu」とする。
図14に戻って、制御装置30aは、全ての非故障区間「xl、xu」について、ステップS305〜S309の処理を実行したか否かを判別する(ステップS304)。そして、制御装置30aは、全ての非故障区間「xl、xu」についてステップS305〜S309の処理を実行していないと判別した場合には(ステップS304否定)、パラメータ「x」の値を「xl」にセットする(ステップS305)。次に、制御装置30aは、パラメータ「x」が「x=xu−1」を満たすか否かを判別する(ステップS306)。
また、制御装置30aは、パラメータ「x」が「x=xu−1」を満たさない場合には(ステップS306否定)、CT(x)としてCT(x−1)とは異なる経路のタイプを選択する(ステップS307)。この際、制御装置30aは、「x=0」である場合には、任意のタイプの経路を選択してよい。
次に、制御装置30aは、「x」の値に「1」を加算した値を新たな「x」の値とし(ステップS308)、再度、「x」が「x=xu−1」を満たすか否かを判別する(ステップS306)。一方、制御装置30aは、「x」が「x=xu−1」を満たす場合には(ステップS306肯定)、CT(xu−1)としてCT(xu−2)およびCT(xu)とは異なるタイプの経路を選択する(ステップS309)。その後、制御装置30aは、再度、全ての非故障区間「xl、xu」についてステップS305〜S309の処理を実行したか否かを判別する(ステップS304)。そして、制御装置30aは、全ての非故障区間「xl、xu」についてステップS305〜S309の処理を実行したと判別した場合には(ステップS304肯定)、処理を終了する。
[実施例2の効果]
上述したように、制御装置30aは、実行ノード選択部33によって選択された実行ノードを含む複数の計算ユニットのうち、一端に存在する計算ユニットから、故障ノードに接続されていない往路と復路とを選択する。そして、制御装置30aは、選択した往路と復路とを辿るように、直接結合された複数の計算ノードに対して、連続する番号を仮想座標として付与する。このため、制御装置30aを有する並列計算機システム1aは、並列計算機10に故障ノードが存在する場合にも、1次元のトーラス状のトポロジを有する直接結合網を利用者に提供することができる。この結果、並列計算機システム1aは、計算対象となる計算空間を1次元のトーラス状に分割した際に、故障ノードが存在する場合にも、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことが保障される。
実施例3では、故障ノードが存在する場合にも、2次元のメッシュ状に直接結合された計算ノードのネットワークを提供する並列計算機システム1bについて説明する。図16は、実施例3に係る並列計算機システムの一例を説明するための図である。なお、図16に示す並列計算機システム1bが有する各部のうち、実施例1、2において説明した処理と同じ処理を実行するものについては、実施例1、2と同じ符号を付し、説明を省略する。図16に示す例では、並列計算機システム1bは、入力装置2、出力装置3、制御装置30b、並列計算機10aを有する。
図17は、実施例3に係る並列計算機が有する計算ユニット群の一例を説明するための図である。並列計算機10aは、複数のリンクを介して、2次元のメッシュ状に直接結合された複数の計算ユニット11a〜22aを有する。各計算ユニット11a〜22aは、3本の経路を有するリンクで接続されている。また、計算ユニット11a〜22aは、計算ユニット11〜22と同様に、環状、すなわち相互に接続された3個の計算ノードを有する。
また、図17に示す例では、各計算ノードに3次元の物理座標が付与されている。具体例を説明すると、各計算ユニットには、図17中のx軸方向に「0」〜「4」、y軸方向に「0」〜「2」の番号が付与されている。また、各計算ユニットが有する3つの計算ノードには図17中のu軸方向の番号として「0」〜「2」が付与されている。つまり、各計算ユニット11a〜22aには、「(x、y)」による2次元の物理座標が付与され、各計算ノードは「(x、y、u)」の三次元の物理座標が付与されることとなる。
図16に戻って、制御装置30bは、受付部31a、故障ノード検出部32、実行ノード選択部33a、経路選択部34b、出力部35、記憶部36を有する。受付部31aは、利用者が入力装置2を介して入力した、2次元メッシュ状のネットワークのサイズを受け付ける。
具体例を説明すると、受付部31aは、プログラムを実行させる2次元メッシュ状のネットワークのサイズとして、仮想座標におけるix軸方向の計算ノードの数と、仮想座標におけるiy軸方向の計算ノードの数との指定を受け付ける。その後、受付部31aは、受け付けたサイズを実行ノード選択部33aに通知する。
例えば、受付部31aは、利用者から、ix軸方向に12個の計算ノードを有し、iy軸方向に3個の計算ノードを有する2次元メッシュ状のネットワークを示すサイズ「(12、3)」を受け付ける。そして、受付部31aは、受け付けたサイズ「(12、3)」を実行ノード選択部33aに通知する。
実行ノード選択部33aは、受付部31aからネットワークのサイズの通知を受けた場合には、通知されたix軸方向のサイズに基づいて、並列計算機10からプログラムを実行させる複数の計算ユニットである計算ユニット群を選択する。また、実行ノード選択部33aは、通知されたiy軸方向のサイズに基づいて、選択した計算ユニット群の各計算ユニットとリンクで接続された複数の計算ユニットを有する複数の計算ユニット群を選択する。
具体例を説明すると、実行ノード選択部33aは、故障ノード検出部32から故障ノードの座標を取得する。また、実行ノード選択部33aは、受付部31aからネットワークのサイズの通知を受ける。また、実行ノード選択部33aは、故障回避軸を選択し、故障ノードが位置する座標のうち、故障回避軸以外の軸方向成分を除いた座標を故障回避単位として検出する。
そして、実行ノード選択部33aは、検出した故障回避単位の数を「k」とし、受付部31aから通知されたネットワークのサイズのうち、ix軸方向のサイズを「N」として、式(1)から計算ユニット群に含まれる計算ユニットの数を算出する。また、実行ノード選択部33aは、受付部31aから通知されたネットワークのサイズのうち、iy軸方向のサイズをプログラムを実行させる計算ユニット群の数として判別する。その後、実行ノード選択部33aは、判別した数の計算ユニット群を並列計算機10aから選択し、選択した計算ユニット群と検出した故障回避単位と故障回避軸とを経路選択部34bに通知する。
例えば、実行ノード選択部33aは、受付部31aからネットワークのサイズ「(12、3)」の通知を受ける。また、実行ノード選択部33aは、故障ノード検出部32から、故障ノードの物理座標「(x、y、u)=(1、0、1)、(3、1、2)、(3、2、2)」の通知を受ける。また、実行ノード選択部33aは、故障回避軸をx軸方向とする。
このような場合には、実行ノード選択部33aは、故障回避単位として「(1、1)、(3、2)」を検出する。そして、実行ノード選択部33aは、「k=2」、「N=12」、「m=3」として(1)式を解き、1つの計算ユニット群が有する計算ユニットの数「5」を算出する。また、実行ノード選択部33aは、通知されたネットワークのサイズが「(12、3)」であるので、プログラムを実行される計算ユニット群の数が「3」であると判別する。
このため、実行ノード選択部33aは、x軸方向に5つの計算ユニットが接続され、y軸方向に3つの計算ユニットが接続された2次元のネットワークを並列計算機10aから選択し、選択した計算ユニット群を経路選択部34bに通知する。また、実行ノード選択部33aは、故障回避軸がx軸方向であることと、故障回避単位「(1、1)、(3、2)」を経路選択部34bに通知する。
経路選択部34bは、実行ノード選択部33aから通知された複数の計算ユニット群のそれぞれについて、隣接する2つの計算ユニットを接続する各リンクから故障ノードに接続された経路以外の経路を選択する。
具体例を説明すると、経路選択部34bは、実行ノード選択部33aが選択した複数の計算ユニット群と故障回避単位と故障回避軸との通知を受け付ける。このような場合には、経路選択部34bは、故障回避単位の座標を含む全ての計算ノードを故障ノードとみなす。また、経路選択部34bは、通知された複数の計算ユニット群のうち1つの計算ユニット群について、実施例1と同様の手法を用いて、故障ノード以外の複数の計算ノードを直列かつ直接結合させる経路を選択する。
そして、経路選択部34bは、経路を辿るように、各計算ノードに連続する仮想座標を付与する。その後、経路選択部34bは、他の計算ユニット群についても、同じように仮想座標を付与する。つまり、経路選択部34bは、1つの計算ユニット群について経路を選択した場合には、他の計算ユニット群についても同じ経路を適用し、適用した経路を辿るように各計算ノードに連続する仮想座標を付与する。また、経路選択部34bは、各計算ノードに付与した仮想座標を、計算ユニット群ごとに異なる次元の仮想座標として、出力部35に通知する。
換言するならば、経路選択部34bは、実行ノード選択部33aから通知された全ての計算ユニット群を故障回避軸を含む平面方向(例えば、xu平面方向)に多重化(投影)する。そして、経路選択部34bは、各計算ユニット群を多重化した計算ユニット群について、多重化された故障ノードの位置の計算ノードを回避する経路を一筆書きを描くように選択する。そして、経路選択部34bは、選択した経路を全ての計算ユニット群に対して適用することで、2次元のメッシュ状の直接結合網を構成するネットワークを容易に利用者に提供することができる。
以下、図18A〜18Dを用いて、制御装置30bが実行する処理の具体例を説明する。なお、以下の説明では、制御装置30bは、利用者から2次元メッシュ状のネットワークを示すサイズ「(12、3)」を受けつけ、図17に示すように、x軸方向に「5」個、y軸方向に「3」個の計算ユニットが接続されたネットワークを選択したものとする。また、制御装置30bは、x軸方向を故障回避軸として選択したものとする。
このような場合には、制御装置30bは、「(0、0)」〜「(0、4)」番の計算ユニット、「(1、0)」〜「(1、4)」番の計算ユニットをそれぞれ1つの計算ユニット群とみなす。また、制御装置30bは、「(2、0)」〜「(2、4)」番の計算ユニットを1つの計算ユニット群とみなす。また、制御装置30bは、故障ノードの座標「(x、y、u)=(1、0、1)、(3、1、2)、(3、2、2)」から、故障回避単位「(1、1)、(3、2)」を検出する。
図18Aは、実施例3に係る制御装置が実行する処理の流れを説明するための図(1)である。図18Aは、制御装置30bが選択した各計算ユニット群を1つの計算ユニット群として射影した図である。図18Aに示す例では、制御装置30bは、故障回避単位が「(1,1)、(3、2)」であるため、「1」番の計算ユニットが有する「1」番の計算ノードと、「3」番の計算ユニットが有する「2」番の計算ユニットが故障ノードであるとみなす。
図18Bは、実施例3に係る制御装置が実行する処理の流れを説明するための図(2)である。図18Bに示すように、制御装置30bは、各計算ユニット群を射影した1つの計算ユニット群について、実施例1に係る制御装置30と同様に、各計算ユニット間の経路を選択する。詳細には、制御装置30bは、x軸方向が「0」番の計算ユニットから順に、故障ノードに接続されていない経路のタイプ「0」、「2」、「1」、「0」の経路のタイプを選択する。
図18Cは、実施例3に係る制御装置が実行する処理の流れを説明するための図(3)である。図18Cに示すように、制御装置30bは、各計算ユニット群を射影した1つの計算ユニット群について、選択した経路を辿るように、各計算ノードに「0」〜「11」までの番号をix軸方向の仮想座標として付与する。また、制御装置30bは、付与したix軸方向の仮想座標を、そのままの位置関係で、全ての計算ユニット群が有する計算ユニットに対して付与する。また、制御装置30bは、各計算ユニット群に含まれる計算ノードのy軸座標をiy軸の仮想座標とする。
図18Dは、実施例3に係る制御装置が実行する処理の流れを説明するための図(4)である。図18Dに示すように、制御装置30bは、y軸方向の座標が「0」である計算ユニット群について、「(ix、iy)=(0、0)」〜「(ix、iy)=(11、0)」の仮想座標を付与する。また、制御装置30bは、y軸方向の座標が「1」である計算ユニット群について「(ix、iy)=(0、1)」〜「(ix、iy)=(11、1)」の仮想座標を付与する。また、制御装置30bは、y軸方向の座標が「2」である計算ユニット群について「(ix、iy)=(0、2)」〜「(ix、iy)=(11、2)」の仮想座標を付与する。
ここで、制御装置30bは、隣接する計算ノードに対して連続する番号を仮想座標として付与する。このため、仮想座標上において隣接する計算ノードは、物理座標上でもリンクによって直接結合される隣接した計算ノードとなり、各計算ノード同士の通信における仮想座標上でのマンハッタン距離と物理座標上でのマンハッタン距離との対応が保証される。つまり、制御装置30bは、並列計算機10aに故障ノードが含まれる場合にも、各計算ノードを2次元のメッシュ状に直接結合するための仮想座標を利用者に提供することができる。
[実施例3の効果]
上述したように、制御装置30bは、選択した複数の計算ユニット群のそれぞれについて、一端の計算ユニットから他端に配置された計算ユニットが含むいずれかの計算ノードまで、故障ノードに接続された経路以外の経路を一筆書きを描くように選択する。このため、制御装置30bを有する並列計算機システム1bは、故障ノードが存在する場合にも、2次元のメッシュ状に直接結合された計算ノードを有するネットワークを利用者に提供することができる。
また、制御装置30bは、選択した複数の計算ユニット群を1つの計算ユニット群として多重化する。そして、制御装置30bは、多重化した計算ユニット群について、多重化された故障ノードの座標に位置する計算ノード以外の計算ノードを直列に直接結合する経路を選択する。その後、制御装置30bは、選択した経路を選択した全ての計算ユニット群について適用し、各計算ユニット群が有する計算ノードに対して、適用した経路を辿るように連続した仮想座標を付与する。
このため、制御装置30bは、全ての計算ユニット群に対して、同じ経路を辿るように連続した仮想座標を付与し、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障することができる。つまり、各計算ノードは、故障回避軸以外の軸方向に存在する計算ノードとリンクで直接結合されている。このため、制御装置30bは、全ての計算ユニット群に対して同じ経路を辿るように連続した仮想座標を付与し、計算ユニット群ごとに、異なる軸方向の仮想座標を付与した場合には、適切に2次元のメッシュ状に直接結合するための仮想座標を提供できる。結果として、並列計算機システム1bは、計算空間を2次元のメッシュ状に分割した際に、故障ノードが存在する場合にも、各領域を適切な位置関係を有する計算ノードにマッピングすることができる。
実施例4では、故障ノードが存在する場合にも、2次元のトーラス状に直接結合された計算ノードのネットワークを提供する並列計算機システム1cについて説明する。図19は、実施例4に係る並列計算機システムの一例を説明するための図である。なお、図19に示す並列計算機システム1cが有する各部のうち、実施例1〜3において説明した処理と同じ処理を実行するものについては、実施例1〜3と同じ符号を付し、説明を省略する。
並列計算機10bは、x軸方向およびy軸方向にそれぞれ2次元のメッシュ状に接続された複数の計算ユニット11b〜22bを有する。図20は、実施例4に係る計算ユニットの一例を説明するための図である。図20に示すように、計算ユニット11bは、トーラス状に接続された6つの計算ノード40〜45を有する。なお、各計算ノード40〜45は、実施例1に係る計算ノード40と同様の計算ノードであるものとし、説明を省略する。
図21は、実施例4に係る計算ユニットを結合するトポロジを説明するための図である。図21に示すように、並列計算機10bは、複数のリンクを介して、x軸方向に4個、y軸方向に3個のメッシュ状に接続された複数の計算ユニット11b〜22bを有する。各計算ユニット11b〜22bには、x軸方向に「0」〜「3」、y軸方向に「0」〜「2」の2次元の物理座標が付与されている。
また、各計算ユニット11b〜22bが有する6つの計算ノードは、それぞれ3つの計算ノードがリング状に接続された2つのブロックに分けることができる。ここで、各リングには、v軸方向として「0」〜「1」の物理座標が付与され、各リングが有する3つの計算ノードには、u軸方向として「0」〜「3」の座標が付与されている。
図19に戻って、制御装置30cは、実行ノード選択部33b、経路選択部34cを有する。実行ノード選択部33bは、x軸およびu軸の2軸を故障回避軸とし、故障ノードに付与された座標のうち、y軸方向の番号とv軸方向の番号とを削除した番号を故障回避単位として検出する。そして、実行ノード選択部33bは、検出した故障回避単位を経路選択部34cに通知する。
経路選択部34cは、それぞれx軸方向に接続された複数の計算ユニットを含む複数の計算ユニット群のそれぞれについて、以下の処理を実行する。すなわち、経路選択部34cは、一端に配置された計算ユニットから他端に配置された計算ユニットで折り返すように、故障ノードに接続された経路以外の経路から往路と復路の2つの経路を選択する。
具体例を説明すると、経路選択部34cは、x軸方向に接続された複数のブロックのうち、v軸方向の番号が同じ複数のブロックを1つのブロック群とみなす。つまり、経路選択部34cは、故障回避軸がx軸とu軸であった場合には、各ブロック群をxu平面上に多重化する。そして、経路選択部34cは、多重化されたブロック群について、一端に配置されたブロックから他端に配置されたブロックが含む計算ノードまで、通知された故障回避単位に接続された経路以外の経路を一筆書きを描くように選択する。
また、経路選択部34cは、選択した経路を各ブロック群に対して適用し、各ブロック群が有する計算ノードに対して、選択した経路を辿るように連続した番号をx軸方向の仮想座標として付与する。また、経路選択部34cは、各ブロック群が有する計算ノードのy軸方向の座標およびv軸方向の座標に基づいて、各ブロック群をリング状に接続する経路を選択する。そして、経路選択部34cは、選択した経路を辿るように各ブロック群が有する各計算ユニットに対して、連続した番号をy軸方向の仮想座標として付与する。
以下、図22A〜Fを用いて、経路選択部34cを有する制御装置30cが経路を選択する処理の例について説明する。なお、以下の説明では、制御装置30cは、サイズが「(ix、iy)=(10、6)」であるトーラス状に直接結合されたネットワークの提供を利用者から要求されたものとする。
例えば、制御装置30cは、図21に示す計算ノードのうち、y軸方向が「0」番である24個の計算ノードのうち、v軸方向の番号が「0」である12個の計算ノードを1つのブロック群であるとみなす。また、制御装置30cは、y軸方向が「0」番である24個の計算ノードのうち、v軸方向の番号が「1」である12個の計算ノードを1つのブロック群であるとみなす。
また、制御装置30cは、図21に示すように、物理座標「(0、1、1、1)」、「(0、2、1、0)」、「(2、1、2、0)」、「(2、1、2、1)」の4つの計算ノードが故障ノードであると検出する。このため、制御装置30cは、故障ノードの各座標のy軸番号とv軸番号とを削除し、故障回避単位である「(0、1)」と「(2、2)」とを検出する。
図22Aは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(1)である。なお、図22Aに示す図は、各ブロック群を1つのブロック群として故障回避軸であるx軸とu軸とからなるxu平面上に多重化した図である。図22Aに示す図においては、制御装置30cは、故障回避単位である「(0、1)」と「(2、2)」とが故障ノードであるとみなす。
図22Bは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(2)である。図22Bに示すように、制御装置30cは、制御装置30aと同様の処理を実行することによって、一端に位置するブロックから他端に位置するブロックで折り返すように、故障ノードに接続されていない往路と復路の2つの経路を選択する。詳細には、制御装置30cは、x軸方向が「0」である計算ユニットから順に、各計算ユニット間において故障ノードに接続されていない経路のタイプ「20」、「01」、「01」を選択する。
図22Cは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(3)である。図22Cに示すように、制御装置30cは、経路を選択した場合には、各ブロック群が有する各計算ノードに対して、選択した経路を辿るように、「0」〜「9」までの連続した番号をix軸方向の仮想座標として付与する。そして、制御装置30cは、付与したix軸方向の仮想座標を、そのままの位置関係で、全てのブロック群が有する計算ユニットに対して付与する。
図22Dは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(4)である。図22Dに示す例では、並列計算機10bが有する全てのブロックをy軸方向とv軸方向からなる平面に投影した図である。制御装置30cは、図22Dに示すように、故障回避軸ではないy軸とu軸からなるyu平面上にすべてのブロックを多重化する。
図22Eは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(5)である。図22Eに示す例では、制御装置30cは、yv平面状において、リンクで直接結合された計算ノードに連続した仮想座標が付与されるように、「0」〜「5」までの連続した仮想座標をiy軸方向の仮想座標として付与する。
図22Fは、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(6)である。図22Fに示すように、制御装置30cは、上述した処理を実行することによって、故障ノードが存在する場合にも、各計算ノードを2次元のトーラス状に直接結合された任意のサイズのネットワークとして動作させるための仮想座標を付与することができる。
ここで、経路選択部34cは、各計算ユニット11b〜22bが有する計算ノードの数が異なる場合にも、任意の大きさを有する2次元のトーラス状に直接結合された計算ノードのネットワークを提供することができる。そこで、以下の説明では、並列計算機システム1cが並列計算機10cを有し、並列計算機10cがトーラス状に直接結合された9個の計算ノードを有する計算ユニット11c〜22cを有する場合について説明する。
図23は、9個の計算ノードを有する計算ユニットを説明するための図である。図23に示すように、計算ユニット11cは、トーラス状に接続された9つの計算ノード40〜48を有する。なお、各計算ノード40〜48は、計算ノード40と同様の計算ノードであるものとし、説明を省略する。なお、各計算ユニット12c〜22cは、計算ユニット11cと同様の計算ユニットであるものとし、以下の説明を省略する。
図24は、9個の計算ノードを有する計算ユニットが2次元のメッシュ状に接続された例を説明するための図である。これまでの実施例と同様に、各計算ユニット11c〜22cには、図24中のx軸方向に「0」〜「3」、y軸方向に「0」〜「2」の2次元の座標が付与される。また、各計算ユニットが有する複数の計算ノードには、u軸方向に「0」〜「2」の座標とv軸方向に「0」〜「2」の座標が付与される。つまり、各計算ユニット11c〜22cは、各計算ユニット11b〜22bについて、それぞれv軸方向に計算ノードを拡張した計算ユニットである。換言すると、各計算ユニット11c〜22cは、各計算ユニット11b〜22bについて、それぞれブロックを1つずつ追加した計算ユニットである。
例えば、制御装置30cは、利用者からサイズが「(x、y)=(10、7)」である2次元トーラス状のネットワークを要求されたものとする。また、図24に示す例では、制御装置30cは、故障ノードの座標「(0、1、1、2)」、「(0、2、1、0)」、「(2、1、2、1)」を検出したものとする。このような場合には、制御装置30cは故障回避単位である「(0、1)」、「(2、2)」を検出する。
また、制御装置30cは、「N=10」、「m=3」、「k=2」として式(1)を解き、「n=4」を算出する。また、制御装置30cは、「N=6」、「m=2」として以下の式(2)を解き、「n=3」を算出する。そして、制御装置30cは、「(x、y)=(0、0)」の計算ユニットからx軸方向に「4」個、y軸方向に「3」個の計算ユニットを2次元メッシュ状に結合した範囲を選択する。
また、制御装置30cは、各計算ユニット11c〜22cが有する複数の計算ユニットのうち、v軸方向の座標が同じ計算ユニットを1つのブロックとみなす。つまり制御装置30cは、各計算ユニット11c〜22cをそれぞれ3つのブロックに分割する。また、制御装置30cは、各計算ユニット群が有する複数のブロックのうち、v軸方向の番号が同じ4つのブロックを1つのブロック群であるとみなす。つまり、図24に示す例では、制御装置30cは、3個の計算ユニットを9個のブロック群であるとみなす。
続いて、図25A〜25Fを用いて、制御装置30cが各計算ユニット11c〜22cが有する計算ノードに仮想座標を付与する処理について説明する。以下の説明では、制御装置30cは、x軸を故障回避軸として選択したものとする。図25Aは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(1)である。図25Aに示すように、制御装置30cは、9個のブロック群を1つのブロック群として多重化する。また、図25Aに示す図においては、制御装置30cは、故障回避単位である「(x、u)=(0、1)、(2、2)」が故障ノードであるとみなす。
図25Bは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(2)である。図25Bに示すように、制御装置30cは、各ブロック間において、故障ノードを回避するように、経路のタイプを選択する。図25bに示す例では、制御装置30cは、x軸方向の座標が「0」のブロックと「1」のブロックとの間において、経路のタイプ「20」を選択し、x軸方向の座標が「1」のブロックと「2」のブロックとの間において経路のタイプ「01」を選択する。また、制御装置30cは、x軸方向の座標が「2」のブロックと「3」のブロックとの間において、経路のタイプ「01」を選択する。その後、制御装置30cは、各ブロック内における計算ノードを接続する経路を選択する。
図25Cは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(3)である。図25Cに示すように、制御装置30cは、各ブロック間における経路のタイプと、各ブロック内における経路を選択した場合には、選択した経路を辿るように、各計算ノードに連続した番号をix軸方向の仮想座標として付与する。
次に、制御装置30cは、各ブロック群について、y軸方向の経路を判別する。図25Dは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(4)である。図25Dに示すように、制御装置30cは、各ブロック群が有する計算ノードをyv平面上に多重化する。そして、制御装置30cは、利用者から要求されたネットワークのサイズのうちy軸方向のサイズが「7」であるので、yv平面上に多重化された7つの計算ノードをリング状に直接結合する複数の経路を選択する。
図25Eは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(5)である。図25Eに示すように、制御装置30cは、7つの計算ノードをリング状に直接結合する複数の経路を選択した場合には、選択した経路を辿るように、各計算ノードに「0」〜「6」までの番号をy軸方向の仮想座標として付与する。
図25Fは、計算ユニットが9個の計算ノードを有する場合に、実施例4に係る制御装置が経路を選択する処理の一例を説明するための図(6)である。図25Fに示すように、制御装置30cは、上述した処理を実行することによって、故障ノードが存在する場合にも、各計算ノードを2次元のトーラス状に直接結合された任意のサイズのネットワークとして動作させるための仮想座標を付与することができる。
[制御装置30cの処理の流れ]
次に、図26を用いて、制御装置30cが実行する処理の流れについて説明する。図26は、実施例4に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、図26に示すフローチャートは、制御装置30cが実行する処理を一般化したものである。
図26に示す例では、各計算ユニットの結合トポロジを「M」次元とし、各計算ノードの物理座標を「(x1〜xM、u1〜uM)」で表記するものとする。また、各計算ノードに付与される仮想座標を「X1〜XM」で表記するものとし、仮想座標「Xj」に対応する物理座標を「(xj’、uj’’)」と表記するものとする。また、故障回避軸を仮想座標で「Xη」、すなわち、物理座標で「(xη’、uη’’)」で表記するものとする。
ここで、「0≦Xη<N」、「0≦xη’<n」、「0≦uη’’<m」を満たすものとする。また、故障ノードのリスト「F」は、「(x1 1〜xM 1、u1 1〜uM 1)〜(x1 K〜xM K、u1 K〜uM K)」で表される。なお、故障ノードの数は「K」となる。
また、以下の説明において、「m≧2」である場合には、以下のフローチャートは、実施例3で説明した制御装置30bが実行する処理に対応し、「m≧3」である場合には、実施例4で説明した制御装置30cが実行する処理に対応する。
まず、制御装置30cは、「Xj」と「(xj’、uj’’)」とを対応させることで、仮想座標と物理座標の軸の対応を選択するとともに、故障回避軸「(xη’、uη’’)」を選択する(ステップS401)。
次に制御装置30cは、故障単位の数を示すパラメータ「k」を「0」」にセットし、故障回避単位の集合を示すパラメータ「F」を空リスト「φ」にセットし、故障ノードを識別するパラメータ「j」を「1」にセットする(ステップS402)。次に、制御装置30cは、「j」番目の故障ノードの座標から「xη’ j」、「uη’’ j」を取得する(ステップS403)。
次に、制御装置30cは、「(xη’ j、uη’’ j)」が故障ノードのリスト「F」に含まれているか否かを判別する(ステップS404)。そして、制御装置30cは、「(xη’ j、uη’’ j)」が故障ノードのリスト「F」に含まれている場合には(ステップS404肯定)、パラメータ「k」に「1」を加算し、故障ノードのリスト「F」に「(xη’ j、uη’’ j)」を追加する(ステップS405)。一方、制御装置30cは、「(xη’ j、uη’’ j)」が故障ノードのリスト「F」に含まれていない場合には(ステップS404否定)、ステップS405の処理をスキップする。
次に、制御装置30cは、パラメータ「j」に「1」を加算した値が故障ノードの数「K」以下であるか否かを判別する(ステップS406)。そして、制御装置30cは、パラメータ「j」に「1」を加算して新しい「j」とする。その新しい「j」の値が故障ノードの数「K」以下であると判別した場合には(ステップS406肯定)、再度ステップS403を実行する。一方、制御装置30cは、新しい「j」の値が故障ノードの数「K」を超えた、すなわち、すべての故障ノードについての処理を終えたと判別した場合には(ステップS406否定)、使用する計算ユニットを選択する(ステップS407)。具体例を説明すると、制御装置30cは、「xη’」方向については「ceiling((N+k)/m)」から算出される数の連続する計算ユニットを選択し、他の軸方向については「ceiling(Nj/mj)」から算出される数の計算ユニットを選択する。
次に、制御装置30cは、「xη’」方向に接続された複数の計算ユニット、つまり、計算ユニット群について、各計算ユニット間における経路のタイプ「CT(0)〜CT(n−2)」を選択する(ステップS408)。なお、経路のタイプを選択する処理については、図13、図14に示した処理と同様の処理を実行するものとして、詳細な説明を省略する。
次に、制御装置30cは、「xη’=1」から「xη’=(n−2)」までの計算ユニットについて、ユニット内における「uη’’」軸方向の経路を選択する(ステップS409)。つまり、制御装置30cは、各計算ユニット内における各計算ノードを一度だけ通る経路を選択する。次に、制御装置30cは、物理座標「(xη’ j、uη’’ j)」と仮想座標「Xη」との対応を決定する。つまり、制御装置30cは、選択した経路を辿るように、連続する番号を1つの軸方向の仮想座標として各計算ノードに付与する。
次に、制御装置30cは、「1≦j≦M」を満たす「j=η」以外のパラメータ「j」について以下の処理を実行する(ステップS412)。すなわち、制御装置30cは、
物理座標「(xj’、uj’’)」と仮想座標「Xj」との対応を決定する(ステップS413)。つまり、制御装置30cは、ステップS408〜S411にて経路を選択した軸方向以外の軸方向について、多重化した計算ユニット間の経路を選択し、選択した経路を辿るように、連続する番号を仮想座標として各計算ユニットが有する計算ノードに付与する。その後、制御装置30cは、「1≦j≦M」を満たす「j=η」以外のパラメータ「j」についてステップS412の処理を実行した場合には(ステップS412完了)、処理を終了する。
[実施例4の効果]
上述したように、制御装置30cは、2次元のメッシュ状に接続された複数の計算ユニットについて、1つの軸方向に接続された複数の計算ユニットを含む複数の計算ユニット群のそれぞれについて、以下の処理を実行する。すなわち、制御装置30cは、各計算ユニット間において、故障ノードに接続されていない経路から往路と復路の2つの経路を、一方の端に位置する計算ユニットから他端に位置する計算ユニットで折り返すように選択する。
また、制御装置30cは、1つの計算ユニットが有する複数の計算ノードを、それぞれリング状に直接結合された複数の計算ノードからなる複数のブロックに分割する。そして、制御装置30cは、1つの軸方向に接続された複数のブロック群を1つのブロック群に投影し、複数のブロック群を投影したブロック群について故障ノードに接続されていない経路から往路と復路とを選択する。このため、制御装置30cは、利用者が要求する任意の大きさを有するネットワークであって、各計算ノードを2次元のトーラス状に直接結合したネットワークを利用者に提供することができる。
この結果、制御装置30cは、計算空間を2次元のトーラス状に分割した際に、故障ノードが存在する場合にも、各領域を適切な位置関係を有する計算ノードにマッピングすることができる。仮想ノード座標でいずれかの軸方向に隣り合うノード間は必ず直接の経路をもつことが保障される。
実施例5では、利用者によって入力されたネットワークのサイズに応じて、並列計算機10cが有する複数の計算ユニットから、適切な範囲の計算ユニットを選択し、選択した計算ユニットに仮想座標を付与する並列計算機システム1dについて説明する。図27は、実施例5に係る並列計算機システムの一例を説明するための図である。なお、図27に示す並列計算機システム1dが有する各部のうち、実施例1〜4において説明した処理と同じ処理を実行するものについては、実施例1〜4と同じ符号を付し、説明を省略する。
並列計算機10dは、2次元のメッシュ状に接続された複数の計算ユニット11d〜22dを有する。図28は、実施例5に係る並列計算機を説明するための図である。以下の説明では、図28に示すように、並列計算機10cは、x軸方向に「6」個、y軸方向に「5」個の2次元メッシュ状に接続された30個の計算ユニットを有する。
なお、各計算ユニットは、実施例4に係る各計算ユニット11a〜22aと同様に、トーラス状に接続された6つの計算ノードを有するものとする。このため、各計算ノードには、x軸方向、y軸方向、u軸方向、v軸方向に「(0、0、0、0)」〜「(5、4、2、3)」の物理座標が付与されている。また、物理座標「(1、2、1、0)」の計算ノードは、故障ノードである。また、図28中の斜線で覆われた範囲の計算ユニットは、既に他のプログラムを実行している範囲を示す。
図27に戻って、制御装置30dは、実行ノード選択部33cを有する。実行ノード選択部33cは、利用者によって指定されたネットワークのサイズに応じて、並列計算機10dが有する複数の計算ユニットから、適切な範囲の計算ユニットであって、プログラムを実行していない計算ユニットを選択する。
具体例を説明すると、実行ノード選択部33cは、受付部31aから、利用者がプログラムを実行させる仮想座標のサイズの通知を受ける。また、実行ノード選択部33cは、故障ノード検出部32から故障ノードの物理座標の通知を受ける。また、実行ノード選択部33cは、並列計算機10dが有する各計算ユニットのうち、プログラムを実行している計算ユニットを除外した範囲を検出する。
そして、実行ノード選択部33cは、通知された仮想ネットワークのサイズに基づいて、プログラムを実行させる計算ユニットの範囲を選択する。詳細には、実行ノード選択部33cは、故障回避軸と、仮想座標の各軸方向に付与する番号のサイズとの組み合わせを全て算出する。そして、実行ノード選択部33cは、算出した各組み合わせによって仮想座標を付与する計算ユニットの範囲を選択する。また、実行ノード選択部33cは、選択された計算ユニットの範囲と、通知された故障ノードの物理座標とから、選択した範囲の計算ユニットに対して、通知されたサイズの仮想座標を付与できるか否かを判別する。
その後、実行ノード選択部33cは、選択した範囲の計算ユニットに通知されたサイズの仮想座標を付与できると判別した場合には、選択した範囲の計算ユニットを経路選択部34dに通知する。また、実行ノード選択部33cは、選択した範囲の計算ユニットに通知されたサイズの仮想座標を付与できないと判別した場合には、新たに、プログラムを実行させる計算ユニットの範囲を選択し直し、再度、仮想座標を付与できるか否かを判別する。
次に、制御装置30dが実行する処理の具体例について説明する。図29は、利用者が並列計算機に実行させるプログラムの一例を説明するための図である。なお、図29に示すプログラムは、計算ノード間の通信を記述するMPIライブラリを利用する。
このようなMPIライブラリは、プログラムの実行開始時に、マシンファイルと呼ばれる計算ノード名の一覧の読込を行い、プログラム中に記載された計算ノードの番号(rank番号)と計算ノードの物理座標との対応を特定する。また、例えば、マシンファイルには、座標(x、y、u、v)に位置する計算ノードの名前「nodexyuv」が1行に1つずつ格納されており、先に格納されから順に、「0」から始まるrank番号を割当てることを示す。
図30は、利用者がプログラムの実行を意図する複数の計算ノードを説明するための図である。利用者は、図30に示すように、ix軸方向に「0」〜「11」、iy方向に「0」〜「5」までの計「72」個の計算ノードによる実行を意図して図26に示すプログラムを作成したものとする。また、利用者は、各ノード間の通信を効率化するため、サイズが「12×6」の2次元トーラスへのプログラムの割り付けを要求したものとする。
このような場合には、制御装置30dは、計算ノードに付与する仮想座標のサイズが「12×6」のトーラス状であることを判別する。また、制御装置30dは、並列計算機10dが有する各計算ユニットから、故障ノードの物理座標「(1、2、1、0)」を検出する。
また、制御装置30dは、判別した仮想座標のサイズに基づいて、プログラムを実行させる計算ユニットの範囲を選択する。詳細には、制御装置30dは、故障回避軸と、仮想座標の各軸方向に付与する番号のサイズとの組み合わせを算出する。この例においては、制御装置30dは、「(xu、yv)=(12、6)」、「(xu、yv)=(6、12)」、「(yu、xv)=(12、6)」、「(yu、xv)=(6、12)」の組み合わせを算出する。
ここで、図28中のAに示す範囲は、「(xu、yv)=(12、6)」を選択した際に、仮想座標を付与する計算ユニットの範囲である。すなわち、図28中のAの原点を「(x、y)=(0、2)」とした際に、原点から見た故障ノードの相対座標は「(1、0、1、0)」となり、故障回避単位は「(x、u)=(1、1)」となる。このため、x軸方向に使用する計算ユニットの数「n1」は、「N=12」、「m=3」、「k=1」として式(1)を解き、「n1=5」となる。また、y軸方向に使用する計算ユニットの数「n2」は、「N=6」、「m=2」として式(2)を解き、「n2=3」となる。
なお、図28中のBに示す範囲は、「(xu、yv)=(6、12)」を選択した際に、仮想座標を付与する計算ユニットの範囲である。図28中のBに示す範囲においては、故障ノードが存在しないので、「n1=4」となる。また、図28中のCに示す範囲は、「(yu、xv)=(12、6)」を選択した際に、仮想座標を付与する計算ユニットの範囲である。また、図28中のDに示す範囲は、「(yu、xv)=(6、12)」を選択した際に、仮想座標を付与する計算ユニットの範囲である。
図28に示す例では、制御装置30dは、算出した各組合せについて、仮想座標を付与することができる計算ユニットの範囲を選択可能である。このため、制御装置30dは、あらかじめ定められたジョブスケジューリングの戦略に従って、図28中のAで示す範囲を選択する。ここで、制御装置30dには、任意のジョブスケジューリングの戦略を適用することができる。
次に、制御装置30dは、選択した範囲について、実施例4と同様に、x軸方向の経路を選択する。図31は、実施例5に係る制御装置がx軸方向の経路を選択する処理の一例を説明するための図である。図31に示すように、制御装置30dは、xu平面上に多重化した各ブロック群が有する各ブロック間において、故障回避単位に接続された経路以外の経路から往路と復路とを選択し、多重化された計算ノードを一度だけ通るリング状の経路を選択する。図31に示す例では、制御装置30dは、各ブロック間において、タイプ「20」、「20」、「01」、「12」を選択し、選択した経路を辿るように、多重化された計算ノードに対して連続する「0」〜「11」の番号を付与する。
図32は、各計算ノードに付与されるix軸方向の仮想座標を説明するためのテーブルである。図32に示す例では、制御装置30dは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「(x、u)=(0、0)」である全ての計算ノードに仮想座標「ix=0」を付与する。同様に、制御装置30dは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「(x、u)=(1、0)」である全ての計算ノードに仮想座標「ix=1」を付与する。以下、制御装置30dは、物理座標が「(x、u)=(2、0)、(3、0)、(3、2)、(4、2)、(4、1)、(3、1)、(2、1)、(2、2)、(1、2)、(0、2)」である計算ノードに仮想座標「ix=2〜11」を付与する。
次に、制御装置30dは、実施例4と同様に、iy軸方向の経路を選択する。図33は、実施例5に係る制御装置がy軸方向の経路を選択する処理の一例を説明するための図である。図33に示すように、制御装置30dは、yv平面上に多重化した各ブロック群が有する各計算ノードを一度だけ通るリング状の経路を選択し、選択した経路を辿るように各計算ノードに連続する「0」〜「5」の番号を付与する。
図34は、各計算ノードに付与されるiy軸方向の仮想座標を説明するためのテーブルである。図34に示す例では、制御装置30dは、選択した計算ユニットの範囲に含まれる各計算ノードのうち、物理座標が「(y、v)=(2、0)」である全ての計算ノードに仮想座標「iy=0」を付与する。同様に、制御装置30dは、物理座標が「(y、v)=(3、0)、(4、0)、(4、1)、(3、1)、(2、1)」である各計算ノードに、それぞれ仮想座標「iy=1〜5」を付与する。
その後、制御装置30dは、各計算ノードに付与した仮想座標に基づいて、各計算ノードの名前を一次元に並べたマシンファイルを出力する。図35は、実施例5に係る制御装置が出力するマシンファイルの一例を説明するための図である。図35に示すように、制御装置30dは、各計算ノードに仮想座標を付与した場合には、図30に示す「0」〜「71」までの順番に従って、各仮想座標が示す計算ノードの名前を格納したマシンファイルを作成する。そして、制御装置30dは、生成したマシンファイルを出力するとともに、MPIライブラリが用いるファイルとして、記憶部36に格納する。
なお、上述した例では、2次元のトーラス状に直接結合するための仮想座標を各計算ノードに付与する例を説明した。しかし、制御装置30dは、上述した実施例3において説明した経路を選択する処理を実行することによって、2次元のメッシュ状に直接結合するための仮想座標を各計算ノードに付与することもできる。また、制御装置30dは、上述した実施例1、2において説明した処理を実行することによって、1次元のメッシュ、又は1次元のトーラス状に直接結合するための仮想座標を各計算ノードに付与することもできる。
[制御装置30dの処理の流れ]
次に、図36を用いて、制御装置30dが実行する処理の流れの一例について説明する。図36は、実施例5に係る制御装置が実行する処理の流れの一例を説明するためのフローチャートである。なお、図36に示す例は、上述した制御装置30dが実行する処理について一般化した処理の例である。図36に示す例では、制御装置30dは、利用者から仮想座標のサイズを受け付けたことをトリガとして、処理を開始する。
まず、制御装置30dは、利用者から仮想座標の各軸方向のサイズを受け付ける(ステップS501)。次に制御装置30dは、故障ノードの物理座標を検出する(ステップS502)。次に、制御装置30dは、他のプログラムを実行していない計算ユニットの範囲を選択する(ステップS503)。次に、制御装置30dは、他のプログラムを実行していない計算ユニットの範囲を選択できたか否かを判別し(ステップS504)、選択できなかった場合には(ステップS504否定)、処理をキューイングする(ステップS505)。その後、制御装置30dは、所定の時間が経過、あるいは、実行されているプログラムが終了した場合には、再度ステップS501から処理を開始する。
また、制御装置30dは、他のプログラムを実行していない計算ユニットの範囲を選択できた場合には(ステップS504肯定)、仮想座標の付与を行う(ステップS506)。なお、ステップS506の処理は、実施例4に示した処理と同様の処理である。次に、制御装置30dは、隣接する計算ノードに連続する仮想座標の付与に成功したか否かを判別し(ステップS507)、付与できなかった場合には(ステップS507否定)、再度ステップS503の処理を実行する。
また、制御装置30dは、隣接する計算ノードに連続する仮想座標の付与に成功した場合には(ステップS507肯定)、仮想座標に基づく順番で各計算ノード名が格納されたマシンファイルを作成する(ステップS508)。その後、制御装置30dは、作成したマシンファイルを出力し(ステップS509)、処理を終了する。
[実施例5の効果]
上述したように、制御装置30dは、利用者から受け付けた仮想座標のサイズに基づいて、他のプログラムを実行していない計算ユニットの範囲を選択する。そして、制御装置30dは、選択した計算ユニット間において、故障ノードに接続されていない経路から往路と復路とを選択し、選択した経路を辿るように仮想座標を付与する。
このため、制御装置30dは、並列計算機が複数のプログラムを実行するマルチジョブが適用されている場合にも、トーラス状に直接結合された計算ノードを利用者に提供することができる。つまり、並列計算機10dは、トーラス状に直接結合された計算ノードを用いて実行させる複数のプログラムを、同時に実行させることができる。
また、制御装置30dは、利用者から受け付けた仮想座標のサイズに基づいて、計算ユニットの範囲を選択するので、必要最小限のハードウェア資源を利用者に提供することができる。また、制御装置30dは、選択した計算ユニットの範囲に故障ノードが含まれる場合にも、隣接する計算ノードに対して連続する仮想座標を付与することができるので、仮想ノード番号で隣り合うノード間は必ず直接の経路をもつことを保障する。このため、制御装置30dは、各計算ノード間の通信効率を劣化させることなく、プログラムを効率良く実行させることができる。また、制御装置30dは、故障ノードを気にすることなく、同じ品質のサービスを利用者に提供することができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例6として本発明に含まれる他の実施例を説明する。
(1)制御装置について
上述した実施例3に制御装置30bは、2次元のメッシュ状に直接結合された複数の計算ユニット11a〜22aを有する並列計算機10aが、故障ノードを有する場合にも、各計算ノードに仮想座標を付与した。しかし、実施例はこれに限定されるものではなく、制御装置30bは、並列計算機10aが任意の次元のメッシュ状に直接結合された複数の計算ユニットを有する場合にも、各計算ノードに仮想座標を付与することができる。
図37は、3次元メッシュ状に接続された計算ユニットを説明するための図である。図37に示す例では、3つの計算ノードを有する複数の計算ユニットがx1軸方向、x2軸方向、x3軸方向の3次元のメッシュ状に直接結合されている。また各計算ユニットが有する3つの計算ノードには、u軸方向として番号が付与されている。
このような場合にも、制御装置30bは、x1軸方向、x2軸方向、x3軸方向のいずれかの軸を故障回避軸として選択し、選択した故障回避軸方向に直列に結合された複数の計算ユニットを計算ユニット群とする。また、制御装置30bは、選択した故障回避軸(例えば、x2軸)とu軸とからなる平面上に各計算ユニット群を多重化するとともに、検出した故障ノードを故障回避軸とu軸とからなる平面上に多重化する。
そして、制御装置30bは、実施例3と同様に、多重化した計算ユニット群について、多重化した故障ノードに接続されていない経路を一筆書きを描くように選択する。その後、制御装置30bは、各計算ユニット群に対して、選択した経路を辿るように連続した番号を1つの軸方向(例えば「ix2」軸方向)の仮想座標として付与する。また、制御装置30bは、各計算ノードについて、故障回避軸以外の物理座標(例えば、x1軸、x3軸)に基づいて、他の軸方向(例えば、ix1軸方向、ix3軸方向)の仮想座標を付与する。
また、制御装置30bは、計算ユニットがそれぞれ4次元以上のメッシュ状に直接結合された場合にも、以下の処理によって適切に仮想座標を付与することができる。すなわち、制御装置30bは、いずれか1軸を故障回避軸として、各計算ユニット群を選択し、選択した計算ユニット群を多重化し、多重化した計算ユニット群について経路を選択する。そして、制御装置30bは、選択した各計算ユニット群に対して選択した経路を辿るように1軸方向の仮想座標を付与し、さらに、各計算ノードの物理座標のうち、故障回避軸方向以外の成分に基づいて、他の軸方向の仮想座標を付与する。
つまり、制御装置30bは、計算ユニットが多次元のメッシュ状に直接結合されている場合には、各計算ユニット群を任意の平面に多重化し、多重化した計算ユニット群について、多重化した故障ノードを避けるように、連続した仮想座標を付与する。そして、制御装置30bは、付与した仮想座標を全ての計算ユニット群に適用するとともに、他の次元についても同様の処理をくりかえし行うことによって、各計算ノードに仮想座標を付与する。この結果、制御装置30bは、計算ユニットがそれぞれ4次元以上のメッシュ状に直接結合され、かつ、故障ノードが含まれる場合にも、各計算ユニットを多次元のメッシュ状に直接結合するための仮想座標を各計算ノードに付与することができる。
このように、制御装置30bは、選択した故障回避軸方向に基づく平面上に各計算ユニット群を多重化し、多重化した計算ユニット群について、多重化された故障ノードに接続されていない経路を一筆書きを描くように選択する。そして、制御装置30bは、各計算ユニット群について、多重化された計算ユニット群において選択した経路を適用し、適用した経路を辿るように各計算ユニット群が有する計算ノードに仮想座標を付与する。このため、制御装置30bは、2次元以上のメッシュ状のトポロジで計算ユニットが直接結合されている場合にも、故障ノード以外の計算ノードに対して、適切な仮想座標を付与することができる。
また、実施例4に係る制御装置30cも同様に、並列計算機が任意の次元のメッシュ状に直接結合された複数の計算ユニットを有する場合にも、各計算ノードに仮想座標を付与することができる。図38は、3次元トーラス状に接続された計算ノードを有する計算ユニットを3次元メッシュ状に接続した例を説明するための図(1)である。図38に示す例では、各計算ユニットは、x1軸、x2軸、x3軸の3次元メッシュ状に直接結合されている。また、図38に示す例では、各計算ユニットは、u1軸、u2軸、u3軸の3次元トーラス状に直接結合されている。
このような場合には、制御装置30cは、x1〜x3軸のいずれか1軸と、u1〜u3軸のいずれか1軸とを故障回避軸として選択する。そして、制御装置30cは、u1〜u3軸の値が同じであって、x1〜x3軸から選択した故障回避軸方向に直接結合された複数のブロックをブロック群とする。
また、制御装置30cは、各ブロック群を選択した故障回避軸からなる平面上に多重化する。また、制御装置30cは、故障ノードを故障回避軸からなる平面上に多重化し、多重化した故障ノードの位置を故障回避単位とする。そして、制御装置30cは、多重化されたブロック群について、一端のブロックから他端のブロックで折り返すように、故障回避単位に接続されていない経路から往路と復路とを選択する。その後、制御装置30cは、選択した経路をすべてのブロック群に適用し、全てのブロック群について適用した経路を辿るように連続した番号を仮想座標の1つ目の次元として各計算ノードに付与する。
また、制御装置30cは、x1〜x3軸から故障回避軸として選択しなかった軸とu1〜u3軸から故障回避軸として選択しなかった軸とからなる平面上に各ブロック群を多重化する。そして、制御装置30cは、多重化した各ブロック群をリング状に接続する経路を選択し選択した経路を辿るように連続した番号を仮想座標の2つ目の次元、および、仮想座標の3つ目の次元として各計算ノードに付与する。
また、図39は、3次元トーラス状に接続された計算ノードを有する計算ユニットを3次元メッシュ状に接続した例を説明するための図(2)である。制御装置30cは、図39に示すように、u3軸方向に計算ノードが拡張された場合にも、上述した処理を行うことによって、故障ノードを回避しつつ、トーラス状に直接結合された計算ノードを提供するための仮想座標を各計算ノードに付与できる。
また、制御装置30cは、計算ユニットがそれぞれ4次元以上のメッシュ状に直接結合された場合にも、以下の処理によって適切に仮想座標を付与することができる。すなわち、制御装置30cは、各計算ユニットの物理座標を示す軸方向のいずれか1軸および各計算ユニットが有する計算ノードを示す軸方向のいずれか1軸の2軸を故障回避軸として選択する。そして、制御装置30cは、上述した処理と同様、故障回避軸として選択した2軸からなる平面にブロック群を多重化し、多重化したブロック群についてリング状の経路を選択し、選択した経路に沿って仮想座標の1つめの次元を各計算ノードに付与する。
また、制御装置30cは、各計算ユニットの物理座標を示す軸方向および各計算ユニットが有する計算ノードを示す軸方向のから故障回避軸として選択しなかった軸を1軸ずつ選択し、選択した2軸からなる平面に各計算ユニット群を多重化する。そして、制御装置30cは、多重化した各計算ユニット群をリング状に接続する経路を選択し、選択した経路に沿って仮想座標の他の次元を各計算ノードに付与する。
つまり、制御装置30cは、多重化した各計算ユニット群に含まれる正常な計算ノードをリング状に接続するための経路を選択し、選択した経路を全ての計算ユニット群に適用する。また、制御装置30cは、他の次元についても多重化した計算ユニット群を接続する経路を選択する処理を繰り返す。この結果、制御装置30cは、任意の次元数のメッシュ状に接続された計算ユニットについて、故障ノードが含まれる場合にも、多次元のトーラス状に直接結合された計算ノードを提供するための仮想座標を各計算ノードに付与することができる。
(2)各実施例の制御装置について
上述した各実施例1〜4では、それぞれ異なるトポロジによって直接結合された複数の計算ノードに対して仮想座標を付与する制御装置30〜30dについて説明した。しかし、実施例はこれに限定されるものではなく、例えば、各制御装置30〜30dに示す全ての機能を有し、利用者によって入力された仮想座標のサイズに基づいて、仮想座標を付与する処理を上記した制御装置30〜30dが行う処理から選択することとしてもよい。
例えば、実施例6に係る制御装置30eは、利用者によって入力された仮想座標のサイズが1次元であった場合には、並列計算機から2次元のメッシュ状に接続された複数の計算ユニットを選択する。そして、制御装置30eは、選択した複数の計算ユニットに対して、制御装置30または制御装置30aと同様の処理を実行する。
また、例えば、実施例6に係る制御装置30eは、利用者によって入力された仮想座標のサイズが2次元であった場合には、並列計算機から任意の次元のメッシュ状に接続された複数の計算ユニットを選択する。そして、制御装置30eは、制御装置30cと同様の処理を実行することとしてもよい。
また、制御装置30eは、1つの並列計算機が有する複数の計算ユニットのうち、一部の範囲の計算ユニットに2次元のトーラス状に直接結合するための仮想座標を付与する。その後、制御装置30eは、他の範囲の計算ユニットに対して、2次元のメッシュ状に直接結合するための仮想座標を付与したり、1次元のリング状またはメッシュ状に直接説結合するための仮想座標を付与しても良い。
(3)プログラムの実行について
上述した各制御装置30〜30eは、利用者によって入力された仮想座標のサイズに基づいて、各計算ノードに仮想座標を付与した。しかし、実施例はこれに限定されるものではない。例えば、制御装置30〜30eは、実行させるプログラムを取得した場合には、取得したプログラムを解析し、プログラムが実行されるネットワークのトポロジとサイズとを判別する。そして、制御装置30〜30eは、判別したトポロジとサイズとに応じて、並列計算機から利用する計算ユニットの範囲を選択し、選択した計算ユニットの範囲に対して仮想座標を付与する。その後、制御装置30〜30cは、各計算ノードに付与した仮想座標に基づいて、プログラムによって実行させるジョブを各計算ノードに割当てて、プログラムを実行させることとしてもよい。
また、上述した実施例では、各制御装置30〜30eが仮想座標を付与した結果をMPI実行時にライブラリが利用するマシンファイルとして出力する例を説明したが、実施例はこれに限定されるものではなく、任意の形式のデータとして出力することができる。
(4)計算ノードの構成について
上述した例では、各計算ノード40〜48は、CPU50、メモリ51、ネットワーク・インタフェース52を有するものとした。しかし、実施例はこれに限定されるものではなく、ジョブを実行することができ、かつ、他の計算ノードと直接結合することができる計算ノードであれば、任意の構成を適用することができる。
(5)プログラム
ところで、実施例1〜5制御装置30〜30eは、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムを並列計算機を制御するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図40を用いて、実施例1に示した制御装置30と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図40は、制御プログラムを実行するコンピュータの一例を説明するための図である。
図40に例示されたコンピュータ100は、RAM120、ROM130、HDD150がバス170で接続される。また、図40に例示されたコンピュータ100は、CPU140がバス170で接続される。さらにバス170には、利用者から仮想座標のサイズを受信するとともに、並列計算機が有する故障ノードの検出や各計算ノードに対するジョブの割当てを行うための入出力装置であるI/O(Input/Output)160が接続される。
ROM130には、制御プログラム131があらかじめ保持される。CPU140が制御プログラム131をROM130から読み出して実行することによって、図40に示す例では、制御プログラム131は、制御プロセス141として機能するようになる。なお、制御プロセス141は、図1に示した制御装置30と同様の機能を発揮する。また、各制御プロセス141は、実施例2〜6に係る各部と同等の機能を発揮するようにすることも可能である。
なお、本実施例で説明した制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。