以下に添付図面を参照して本願に係る並列計算機システム、管理装置の制御プログラムおよび並列計算機システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により開示技術が限定されるものではない。また、各実施例は、矛盾しない範囲で適宜組みあわせてもよい。
以下の実施例1では、図1を用いて、本願に係る並列計算機システムの一例を説明する。図1は、実施例1に係る並列計算機システムを説明する図である。図1に示す例では、並列計算機システム1は、入力装置2、並列計算機3、出力装置4、管理装置10を有する。
入力装置2は、並列計算機システム1に対して実行させるジョブの入力を行うための入力装置である。例えば、入力装置2は、並列計算機システム1の利用者が入力したジョブの内容を管理装置10に出力する。また、入力装置2は、ジョブの割当対象となる計算ノードの数やトポロジの入力を受け付けると、受け付けた計算ノードの数やトポロジを管理装置10に通知する。例えば、入力装置2は、ジョブの割当対象となる計算ノードのトポロジとして、X軸方向に2つ、Y軸方向に3つの2次元メッシュ状に接続された計6つの計算ノードを示す情報「(2、3)」を受け付ける。かかる場合は、入力装置2は、受け付けた情報「(2、3)」を割り当てるジョブとともに管理装置10に通知する。
並列計算機3は、複数の計算ノード3a〜3fを有する。なお、並列計算機3は、図1に示す計算ノード3a〜3f以外にも、複数の計算ノードを有するものとする。また、以下の説明では、計算ノード3b〜3fは、計算ノード3aと同様の機能を発揮するものとして、説明を省略する。
計算ノード3aは、各種の情報処理を実行する情報処理装置である。かかる計算ノード3aの一例としては、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、GPU(Graphic Processing Unit)、ASIC(Application Specific Integrated Circuit)等が適用される。なお、計算ノード3aは、複数のCPU等とメモリとI/O(Input/Output)を備える情報処理装置であってもよい。
ここで、各計算ノード3a〜3fは、2次元のメッシュ状に接続されており、接続された計算ノード同士で通信を行う。例えば、各計算ノード3a〜3fは、各X軸方向に4つ、各Y軸方向に3つの計算ノードを配置し、隣接する計算ノード同士を接続した2次元メッシュ状のネットワークを形成する。そして、例えば、計算ノード3aは、直接接続されていない計算ノード3cとデータ通信を行う場合は、計算ノード3bや他の計算ノードを介して、通信を実行する。
なお、以下の説明では、2次元メッシュ状に接続された計算ノードのうち、端点に配置された計算ノードを原点とし、原点から見た各軸方向の計算ノード数を用いて、各計算ノード3a〜3fが配置された座標を表現する。すなわち、並列計算機システム1は、原点となる計算ノードから、各軸方向にいくつの計算ノードが接続されているかを示す接続距離を、各計算ノードが配置された座標とする。例えば、原点となる計算ノードからX軸方向にd個、Y軸方向にe個離れた計算ノードを座標(d,e)に配置された計算ノードとする。また、以下の説明では、並列計算機3は、X軸方向に3つ、Y軸方向に4つの計12個の計算ノードを2次元メッシュ状に接続したネットワークを有するものとする。
一方、管理装置10は、記憶部11、生成部13、受付部14、探索部15、特定部16、割当部17を有する。また、記憶部11は、ノードテーブル12を記憶する。
ノードテーブル12は、各計算ノード3a〜3fにジョブが割り当てられているか否かを示す情報が格納されたテーブルである。以下、図2を用いて、ノードテーブル12の一例について説明する。図2は、実施例1に係る管理装置が生成するノードテーブルの一例を説明する図である。
例えば、図2に示すように、ノードテーブル12は、各計算ノードの座標と、各計算ノードにジョブが割当てられているか否かを示すバリッドビットとが格納されている。例えば、ノードテーブル12には、原点である計算ノードにジョブが割当てられていない旨を示す「(0,0)=0」を記憶する。また、ノードテーブル12には、各計算ノードの座標とバリッドビット、「(0,1)=0」、「(0,2)=0」、「(1,0)=0」、「(1,1)=0」、「(1,2)=0」が格納されている。また、ノードテーブル12には「(2,0)=0」、「(2,1)=0」、「(2,2)=0」、「(3,0)=0」、「(3,1)=0」、「(3,2)=0」、が格納されている。
ここで、ノードテーブル12には、図2中点線で示すように、各計算ノード3a〜3fが形成するネットワークの終端に配置される仮想的な計算ノードの座標と常時ジョブが割当てられた旨を示すバリッドビットが格納される。詳細には、ノードテーブル12には、「(0,3)=1」、「(1,3)=1」、「(2,3)=1」、「(3,3)=1」、「(4,0)=1」、「(4,1)=1」、「(4,2)=1」、「(4,3)=1」が格納される。なお、以下の説明では、ネットワークの終端に配置される仮想的な計算ノードであって、常時ジョブが割当てられた計算ノードを仮想計算ノードと記載する。
図1に戻り、説明を続ける。生成部13は、ノードテーブル12を生成する。詳細には、生成部13は、各計算ノード3a〜3fの座標と、計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けた情報を生成する。また、生成部13は、各計算ノード3a〜3fが形成するネットワークの終端に配置される仮想的な計算ノードの座標を生成し、生成した座標にジョブが割当てられた旨を示すバリッドビットとを対応付けた情報を生成する。そして、生成部13は、生成した各情報をノードテーブル12として記憶部11に格納する。
受付部14は、入力装置2から、割当対象となるジョブと、ジョブの割当対象となる計算ノードの数またはトポロジを受け付ける。かかる場合は、受付部14は、探索部15に対し、ジョブが割当てられていない計算ノードである空きノードが連続する領域の探索を要求し、特定部16に対し、受け付けた計算ノードの数またはトポロジを通知する。また、受付部14は、割当部17に対し、受け付けたジョブを出力する。
探索部15は、生成部13が生成したノードテーブル12を用いて、空きノードが連続して配置された領域を全て探索する。具体的には、探索部15は、並列計算機3が有する各計算ノードを順次選択し、選択した計算ノードを起点としてX軸方向の接続距離を変更しながらY軸方向に空きノードが連続する数を計数するX軸固定探索処理を実行する。また、探索部15は、選択した計算ノードを起点としてY軸方向の接続距離を変更しながらX軸方向に空きノードが連続する数を計数するY軸固定探索処理を実行する。
そして、探索部15は、X軸固定探索処理とY軸固定探索処理との結果、選択した計算ノードを起点とし、空きノードが連続する領域のX軸方向とY軸方向との大きさとを探索データとして出力する。以下、探索部15が実行するY軸固定探索処理およびX軸固定探索処理について説明する。なお、以下の説明では、探索部15は、ジョブの割当てを容易にするため、長方形型の領域を探索するものとする。
まず、図3を用いて、探索部15が実行するY軸固定探索処理を説明する。図3は、実施例1に係る管理装置が実行するY軸固定探索処理を説明する図である。なお、図3には、座標(0,0)に配置された計算ノードを起点とした際に探索部15が実行するY軸固定探索処理の内容について記載した。なお、図3に示す例では、座標(3,1)に配置された計算ノードにジョブが割当てられているものとする。
まず探索部15は、図3中(A)に示すように、探索する領域に含まれるX軸方向の計算ノードの数の最大値となるXMaxを初期化する。例えば、探索部15は、XMaxをX軸方向の終端となる仮想計算ノードまでの計算ノードの数「4」に設定する。そして、探索部15は、図3中(B)に示すように、座標(0,0)に配置された計算ノードから、X軸方向の接続距離がXmaxと同数の計算ノード、すなわち座標(4,0)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
ここで、従来の並列計算機システムでは、判定対象となる計算ノードが空きノードか否かを判定する度に、X軸方向に連続する全ての計算ノードについて空きノードか否かを判定する処理を実行したか判定した。しかし、かかる処理を実行した場合は、並列計算機3が有する計算ノードの数が増加するに従って、判定処理の回数が多くなってしまう。
一方、並列計算機システム1では、ノードデータ12に、常時ジョブが割当てられた仮想計算ノードのデータが含まれる。このため、探索部15は、X軸方向に連続する全ての計算ノードについて空きノードか否かを判定する処理を実行したか判定せずとも、各計算ノードが空きノードか否かを判定するだけで、空きノードが連続する領域を適切に探索できる。
例えば、図3に示す例では、探索部15は、座標(0,0)の計算ノードから座標(3,0)の計算ノードまで順に空きノードか否かを判定する。そして、探索部15は、座標(3、0)の計算ノードが空きノードか否かを判定した後、図3中(C)に示すように、座標(4,0)の計算ノード、すなわち仮想計算ノードにジョブが割当てられているか否かを判定する。この結果、探索部15は、座標(4,0)の計算ノードにジョブが割当てられていると判定し、座標(0,0)に配置された計算ノードから座標(3,0)に配置された計算ノードまでの「4」つの計算ノードが空きノードであると判定する。
この結果、探索部15は、Y軸方向の接続距離を「1」とした際のX軸方向の探索処理が完了したと判定する。そして、探索部15は、座標(0,0)を起点とするY軸固定探索の第1の領域の探索データとして、X軸方向の空きノード数が「4」、Y軸方向の開きノード数が「1」となる領域を示すT[0][0]、yx[0]=(4,1)を出力する。このように、探索部15は、X軸方向の終端まで判定処理を行ったか否かを判定を行わずとも、X軸方向の探索処理が完了したか判定できる。
また、探索部15は、図3中(D)に示すように、XMaxの値を、空きノードが連続した数「4」に更新する。また、探索部15は、図3中(E)に示すように、起点となる計算ノードとY軸方向に接続された計算ノード、すなわち座標(0,1)に配置された計算ノードを選択する。そして、探索部15は、座標(0,1)に配置された計算ノードからXMaxと同じ数の計算ノード、すなわち座標(3,1)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
ここで、図3中(F)に示すように、座標(3,1)に配置された計算ノードにジョブが割当てられている。このため、探索部15は、座標(0,0)を起点とし、Y軸方向の大きさを「2」とした際に、空きノードが連続した数が「3」であると判定する。この結果、探索部15は、座標(0,0)を起点とする第2の領域の探索データとして、T[0][0]、yx[1]=(3,2)を出力する。
次に、探索部15は、図3中(G)に示すように、空きノードが連続した数「3」にXMaxの値を更新する。また、探索部15は、前回選択した計算ノードからY軸方向に接続された計算ノード、すなわち座標(0,2)に配置された計算ノードを選択する。そして、探索部15は、座標(0,2)に配置された計算ノードからX軸方向にXmaxと同じ数の計算ノード、すなわち座標(2,2)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
ここで、図3に示す例では、座標(0,2)に配置された計算ノードから座標(2,2)に配置された計算ノードまでには、ジョブが割当てられていない。かかる場合は、探索部15は、座標(0,0)を起点とし、Y軸方向の大きさを「3」とした際に空きノードが連続した数が「3」であると判定する。この結果、探索部15は、座標(0,0)を起点とする第3の領域の探索データとして、T[0][0]、yx[2]=(3,3)を出力する。
ここで、図3に示すように、座標(1,4)の計算ノードにジョブが割当てられている場合は、起点となる計算ノードから接続距離が(3,3)となる領域が、ジョブが割当てられていない計算ノードが連続する最大の長方形領域となる。このため、座標(1,4)の計算ノードにジョブが割当てられている場合は、座標(2,4)の計算ノードにジョブが割当てられているか否かを判定する処理は無駄な処理となる。
そこで、探索部15は、Y軸固定探索処理において、各X軸方向に連続する空きノードの数のうち、最小の数をXMaxとして記憶する。そして、探索部15は、Y軸の大きさを変更した際に、記憶したXMaxと同数の計算ノードについてのみ、ジョブが割当てられているか否かを判定する。例えば、探索部15は、図3中(H)に示すように、座標(3,2)に配置された計算ノードにジョブが割当てられているか否かを判定する処理を実行しない。このため、探索部15は、長方形の領域を探索する場合に、Y軸固定探索処理における無駄な判定を削減できる。
次に、図4を用いて、探索部15が実行するX軸固定探索処理を説明する。図4は、実施例1に係る管理装置が実行するX軸固定探索処理を説明する図である。なお、図4には、座標(0,0)に配置された計算ノードを起点とした際に探索部15が実行するX軸固定探索処理の内容について記載した。なお、図4に示す例では、座標(1,2)に配置された計算ノードにジョブが割当てられているものとする。
まず探索部15は、探索する領域に含まれるY軸方向の計算ノードの数の最大値となるYMaxを初期化する。例えば、探索部15は、XMaxをX軸方向の終端となる仮想計算ノードまでの計算ノードの数「3」に設定する。そして、探索部15は、図4中(I)に示すように、座標(0,0)に配置された計算ノードから、Y軸方向の接続距離がYmaxと同数の計算ノード、すなわち座標(0,3)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
また、図4に示す例では、探索部15は、座標(0,0)の計算ノードから座標(0,2)の計算ノードまで順に空きノードか否かを判定する。そして、探索部15は、座標(0、2)の計算ノードが空きノードか否かを判定した後、図4中(J)に示すように、座標(0,3)の計算ノード、すなわち仮想計算ノードにジョブが割当てられているか否かを判定する。
この結果、探索部15は、座標(0,3)の計算ノードにジョブが割当てられていると判定し、座標(0,0)に配置された計算ノードから座標(0,2)に配置された計算ノードまでの「3」つの計算ノードが空きノードであると判定する。そして、探索部15は、座標(0,0)を起点とするX軸固定探索の第1の領域の探索データとして、Y軸方向の接続距離が「3」、X軸方向の接続距離が「1」となる領域を示すT[0][0]、xy[0]=(1,3)を出力する。
また、探索部15は、YMaxの値を、空きノードが連続した数「3」に更新する。また、探索部15は、起点となる計算ノードとX軸方向に接続された計算ノード、すなわち座標(1,0)に配置された計算ノードを選択する。そして、探索部15は、座標(1,0)に配置された計算ノードからYmaxと同数の計算ノード、すなわち座標(1,3)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
ここで、図4中(K)に示すように、座標(1,2)に配置された計算ノードにジョブが割当てられている。このため、探索部15は、座標(0,0)を起点とし、X軸方向の大きさを「2」とした際に空きノードが連続した数が「2」であると判定する。この結果、探索部15は、座標(0,0)を起点とする第2の領域の探索データとして、T[0][0]、xy[1]=(2,2)を出力する。
次に、探索部15は、図4中(L)に示すように、YMaxの値を空きノードが連続した数「2」に更新する。また、探索部15は、前回選択した計算ノードからX軸方向に接続された計算ノード、すなわち座標(2,0)に配置された計算ノードを選択する。そして、探索部15は、、図4中(M)に示すように、座標(2,0)に配置された計算ノードからY軸方向に接続されたYmaxと同数の計算ノード、すなわち座標(2,1)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
また、図4に示す例では、座標(2,0)に配置された計算ノードから座標(2,1)に配置された計算ノードまでには、ジョブが割当てられていない。かかる場合は、探索部15は、座標(0,0)を起点とし、X軸方向の大きさを「3」とした際に空きノードが連続した数が「2」であると判定する。この結果、探索部15は、座標(0,0)を起点とする第3の領域の探索データとして、T[0][0]、xy[2]=(3,2)を出力する。
次に、探索部15は、YMaxの値を空きノードが連続した数「2」に更新する。また、探索部15は、前回選択した計算ノードからX軸方向に接続された計算ノード、すなわち座標(3,0)に配置された計算ノードを選択する。そして、探索部15は、図4中(M)に示すように、座標(3,0)に配置された計算ノードからY軸方向に接続されたYmaxと同数の計算ノード、すなわち座標(3,1)に配置された計算ノードまでジョブが割当てられているか否かを順次判定する。
この結果、探索部15は、座標(0,0)を起点とし、X軸方向の大きさを「4」とした際に空きノードが連続した数が「2」であると判定する。この結果、探索部15は、座標(0,0)を起点とする第3の領域の探索データとして、T[0][0]、xy[2]=(3,2)を出力する。
このように探索部15は、各計算ノード3a〜3fが形成するネットワークの終端に常時ジョブが割当てられた仮想計算ノードが配置された旨を示すノードデータ12を用いて、空きノードが連続する領域を探索する。このため、探索部15は、起点となる計算ノードから各軸方向の終端となる計算ノードまで空きノードか否かの判定を行ったか否か判別する処理を不要にできる。この結果、探索部15は、空きノードが連続する領域を探索する処理の判定回数を削減できる。
また、探索部15は、起点となる計算ノードから所定の軸方向に連続する空きノードの数を計数する。そして、探索部15は、所定の軸方向以外に連続する計算ノードの数を変更して所定の軸方向に連続する空きノードの数を計数する場合は、それまでに計数した所定の軸方向に連続する空きノードの数値と同数の計算ノードについて、空きノードか否かを判定する。このため、探索部15は、空きノードが連続する領域を探索する処理の判定回数をさらに削減できる。
図1に戻って説明を続ける。特定部16は、探索部が探索した領域のうち、ジョブの割り当てに適した領域を特定する。例えば、特定部16は、受付部14から、ジョブの割当対象となる領域に含まれる計算ノードの数またはトポロジを受信する。また、特定部16は、探索部15が探索した全ての領域を示す探索データを受信する。
かかる場合、特定部16は、受信した探索データを、領域に含まれる計算ノードの数でソートする。そして、特定部16は、ソートした探索データのうち、領域に含まれる計算ノードの数が少ない探索データから順に、受付部14から受信した計算ノードの数またはトポロジを満たす探索データであるか否かを判定する。その後、特定部16は、受付部14から受信した計算ノードの数またはトポロジを満たす探索データであると判定した場合は、かかる探索データを割当部17に出力する。
例えば、図5は、実施例1に係る管理装置が空き領域を特定する処理の一例を説明する図である。なお、図5には、並列計算機3が有する全ての計算ノード3a〜3fが空きノードである場合に、探索部15から取得する探索データを、起点となる計算ノードごとにまとめて記載した。また、図5に示す探索データのうち、他の探索データが示す領域と同一の領域を示す探索データについては、無効データとして網掛けで記載した。
例えば、特定部16は、図5中(N)に示す探索データを取得する。かかる場合、特定部16は、図5中(O)に示すように、各領域に含まれる計算ノードの数に応じて、探索データをソートする。そして、特定部16は、ソートした探索データのうち、下位のデータから順に、受付部14から受信したノードの数またはトポロジと一致する領域の探索データか判定する。例えば、特定部16は、受付部14からトポロジ(3,2)を受信した場合は、下位のデータから順に、領域の大きさが(3,2)となる探索データを探索する。その後、特定部16は、特定した探索データを割当部17に出力する。
なお、特定部16が実行する処理は、上述した処理に限定されるものではない。例えば、特定部16は、受付部14から受信したノードの数またはトポロジと一致する領域の探索データが複数存在する場合は、ジョブ割当て後の空きノードが連続する空間が最大となるように、ジョブの割当対象となる領域の探索データを選択してもよい。
例えば、図6は、空きノードが連続する空間が最大となるように、リストから探索データを選択する処理を説明する図である。なお、図6には、X軸方向に6つの計算ノードが配置され、Y軸方向に5つの計算ノードが配置されたネットワークに対し、3つのノードを用いる3ノードジョブを複数割当てる例について記載した。
管理装置10は、図6中(P−1)に示すように、4つの3ノードジョブをランダムに配置した場合は、例えば、空きノードが連続する最大の領域である最大空き空間を8ノードに限定してしまう。一方、管理装置10は、図6中(P−2)に示すように、4つの3ノードジョブをネットワークの端から連続して割当てた場合は、最大空き空間ノードを18ノードにまで拡張することができる。
そこで、特定部16は、受付部14から受信したノードの数またはトポロジと一致する領域の探索データが複数存在する場合は、以下の処理を実行する。なお、以下の説明では、受付部14から受信したノードの数またはトポロジと一致する領域の探索データの一致データを記載する。まず、特定部16は、一致データが複数存在する場合は、一致データに対してジョブを割当てた際に、ソートした探索データのうち一致データよりも上位の探索データであって、使用できなくなる領域の探索データを一致データごとに特定する。
そして、特定部16は、特定した探索データが示す領域の大きさが最も少ない一致データを特定し、特定した一致データを割当部17に通知する。かかる処理を実行することで、特定部16は、ジョブの割当対象となる領域のフラグメンテーションを解消し、効率良くジョブの割当を行うことができる。
図1に戻って、説明を続ける。割当部17は、特定部16が特定した領域に対して、ジョブの割当てを行う。例えば、割当部17は、受付部14からジョブを受信する。また、割当部17は、特定部16からジョブの割当対象となる領域を示す探索データを受信する。かかる場合は、割当部17は、探索データが示す領域に含まれる計算ノードに対し、受付部14から受信したジョブを割当てる。また、割当部17は、ノードテーブル12に格納された各計算ノードのバリッドビットのうち、ジョブの割当てを行った計算ノードのバリッドビットを「1」に更新する。
また、割当部17は、ジョブの実行が完了した場合は、ジョブを実行した計算ノードからジョブの実行結果を受信し、受信したジョブの実行結果を出力装置4に出力する。また、割当部17は、ノードテーブル12に格納された各計算ノードのバリッドビットのうち、ジョブの実行が完了した計算ノードと対応付けられたバリッドビットを「0」に更新する。
なお、計算ノード3a〜3fが2次元トーラス状のネットワークを構成する場合は、以下の処理を実行することで、ジョブの割当対象となる領域を特定することができる。例えば、生成部13は、計算ノード3a〜3fがX軸方向に回り込んだ2次元トーラス状のネットワークを構成する場合は、Y軸方向の座標が「0」となる各計算ノードを順次選択する。そして、生成部13は、選択した計算ノードを仮想原点とする2次元メッシュ状のネットワークを各計算ノード3a〜3fが形成している旨のノードテーブル12を、選択した計算ノードごとに生成する。すなわち、生成部13は、Y軸方向の座標が「0」となる各計算ノードを仮想原点としたノードテーブル12を生成する。
また、探索部15は、Y軸方向の座標が「0」となる各計算ノードを仮想原点として順次選択し、選択した仮想原点と対応するノードテーブル12を用いて、上述した探索処理を実行する。この結果、探索部15は、図5中(N)に示した探索データを仮想原点の数だけ生成する。その後、特定部16は、探索部15が生成した全ての探索データを用いて、ジョブの割当てに最も適した領域を特定する。
例えば、特定部16は、各計算ノード3a〜3fがX軸方向に回り込んだ2次元トーラス状のネットワークを形成する場合、図6中(P−3)に示すように、X軸方向に回り込んだ最大空き空間ノードを考慮する。この結果、特定部16は、4つの3ノードジョブをY軸方向に並べるように配置してもよい。
次に、管理装置10が実行する処理の流れについて説明する。なお、管理装置10は、領域の起点となる計算ノードを選択するメイン処理と、X軸固定探索処理と、Y軸固定探索処理とを実行する。ここで、管理装置10が実行するメイン処理については、図29に示した従来の並列計算機システムと同様の処理を実行するものとして、説明を省略する。
まず、図7を用いて、管理装置20が実行するY軸固定探索処理の流れを説明する。図7は、実施例1に係る管理装置が実行するY軸固定探索処理の流れを説明するフローチャートである。例えば、管理装置20は、変数XMax、i、c、d、eの値を初期化してXMax=4−X、i=X、c=Y、d=0、e=1とし(ステップS101)、cの値が3より小さいか否かを判定する(ステップS102)。そして、並列計算機システムは、cの値が3より小さい場合は(ステップS102:Yes)、iの値がXMaxより小さいか否かを判定する(ステップS103)。
また、並列計算機システムは、iの値がXMaxより小さい場合は(ステップS103:Yes)、座標(i、c)に配置された計算ノードT[i][c]が空きノードであるか否かを判定する(ステップS104)。そして、並列計算機システムは、計算ノードT[i][c]が空きノードである場合は(ステップS104:Yes)、dとiの値にそれぞれ1を加算し(ステップS105)、ステップS103を実行する。
一方、並列計算機システムは、iの値がXMax以上である場合(ステップS103:No)、または、T[i][c]が空きノードではない場合(ステップS104:No)は、以下の処理を実行する。すなわち、並列計算機システムは、探索データT[X][Y]yx[c]として(d、e)を出力し、XMax=dとした後に、i、dの値を初期化してi=X、d=0に設定し、cとeの値にそれぞれ1を加算する(ステップS106)。そして、並列計算機システムは、ステップS102を実行し、cの値が3以上である場合は(ステップS102:No)、Y軸固定探索処理を終了する。
次に、図8を用いて、X軸固定探索処理の一例について説明する。図8は、実施例1に係る管理装置が実行するX軸固定探索処理の流れを説明するフローチャートである。例えば、並列計算機システムは、変数YMax、i、c、d、eの値を初期化してYMax=3−Y、i=Y、c=X、d=1、e=0とし(ステップS201)、cの値が4より小さいか否かを判定する(ステップS202)。そして、並列計算機システムは、cの値が4より小さい場合は(ステップS202:Yes)、iの値がYMaxよりも小さいか否かを判定する(ステップS203)。そして、並列計算機システムは、iの値がYMaxよりも小さい場合は(ステップS203:Yes)、座標(c、i)に配置された計算ノードT[c][i]が空きノードであるか否かを判定する(ステップS204)。そして、並列計算機システムは、計算ノードT[c][i]が空きノードである場合は(ステップS204:Yes)、eとiの値にそれぞれ1を加算し(ステップS205)、ステップS203を実行する。
一方、並列計算機システムは、iの値がYMax以上である場合(ステップS203:No)、または、T[c][i]が空きノードではない場合は(ステップS204:No)、以下の処理を実行する。すなわち、並列計算機システムは、探索データT[X][Y]xy[c]として(d、e)を出力し、YMax=eとした後に、i、eの値を初期化してi=Y、e=0に設定し、cとdの値にそれぞれ1を加算する(ステップS206)。そして、並列計算機システムは、ステップS202を実行し、cの値が4以上である場合は(ステップS202:No)、Y軸固定探索処理を終了する。
[並列計算機システム1の効果]
上述したように、並列計算機システム1は、複数の計算ノード3a〜3fを有する並列計算機3と、並列計算機3の管理を行う管理装置10とを有する。また、計算ノード3a〜3fは、計算ノード3a〜3fと接続される。また、管理装置10は、各計算ノード3a〜3fにジョブが割当てられているか否かを示す第1の情報と、各計算ノード3a〜3fの接続関係の終端に配置される仮想計算ノードに常時ジョブが割当てられている旨を示す第2の情報とを含むノードテーブル12を記憶する。
そして、管理装置10は、ノードテーブル12を用いて、空きノードが連続する領域を全て探索する。その後、管理装置10は、探索した領域から割当て対象のジョブの割当てに適した領域を特定し、特定した領域に対して割当て対象のジョブの割当てを行う。このため、並列計算機システム1は、空きノードが連続する領域を探索する際の終端判定処理を不要とする。この結果、並列計算機システム1は、空きノードが連続する領域を探索する際の処理コストを軽減し、探索時にかかる時間を短縮することができる。
また、管理装置10は、領域の起点となる計算ノードを選択し、選択した計算ノードから所定の軸方向(例えばX軸方向)空きノードが連続する数を、所定の軸方向以外の軸方向(例えばY軸方向)に連続する計算ノードの数を変更しながら計数する。そして、管理装置10は、計数結果を用いて、選択した計算ノードを起点とする全ての領域を探索する。このため、管理装置10は、空きノードが連続する領域を全て探索することができる。
また、管理装置10は、所定の軸方向以外の軸方向に連続する計算ノードの数を変更し、所定の軸方向に連続する空きノードの数を計数する場合は、それまでに計数した連続する空きノードの数の最小値を、新たに計数する空きノードの数の最大値とする。このため、管理装置10は、領域に含まれることのない計算ノードが空きノードか否かを判定する処理を削減することができるので、探索時にかかる時間を短縮することができる。
以下の実施例2では、空きノードが連続して含まれる領域を探索する際の処理コストを更に削減する並列計算機システム1aについて説明する。なお、以下の説明では、上述した実施例1に記載した機能と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
図9は、実施例2に係る並列計算機システムを説明する図である。図9に示すように、並列計算機システム1aは、入力装置2、出力装置4、並列計算機3、管理装置10aを有する。また、管理装置10aは、ノードテーブル12を記憶する記憶部11、生成部13、受付部14、探索部15a、特定部16、割当部17を有する。
探索部15aは、探索部15と同様に、空きノードが連続する領域を探索する。ここで、探索部15aは、かかる探索処理を実行する際の処理コストを軽減するため、各軸方向ごとに、計算ノードを選択する選択処理と、選択処理により選択された計算ノードを起点とする領域を算出する算出処理とを実行する。
まず、探索部15aが実行する選択処理について説明する。探索部15aは、原点となる計算ノードからの接続距離が最大となる計算ノード、すなわち、配置された座標の各軸方向の接続距離が最大となる計算ノードを特定する。そして、探索部15aは、特定した計算ノードから、所定の軸方向における負の方向、すなわち原点となる計算ノードの方向に接続された計算ノードを順次選択する。
また、探索部15aは、特定した計算ノードから所定の軸方向の負の方向に接続された全ての計算ノードを選択した場合は、特定した計算ノードと所定の軸方向以外の軸方向の負の方向に接続された計算ノードを特定する。そして、探索部15aは、特定した計算ノードから所定の軸方向の負の方向に接続された全ての計算ノードを選択する。また、探索部15aは、各軸方向に上述した選択処理を繰り返えすことで、探索部15aは、座標の各軸方向の接続距離が最大となる計算ノードから原点に配置された計算ノードまで全てのノードを1つずつ選択する。
例えば、探索部15aは、X軸方向について選択処理を実行する場合は、座標(3,2)に配置された計算ノードから、座標(0,2)に配置された計算ノードを順次選択する。また、探索部15aは、座標(3,2)に配置された計算ノードから、座標(0,2)に配置された計算ノードを順次選択した場合は、座標(3,1)に配置された計算ノードから座標(0,1)に配置された計算ノードまで順次選択する。また、探索部15aは、座標(3,1)に配置された計算ノードから、座標(0,1)に配置された計算ノードを順次選択した場合は、座標(3,0)に配置された計算ノードから座標(0,0)に配置された計算ノードまで順次選択する。
また、探索部15aは、Y軸方向について選択処理を実行する場合は、座標(3,2)に配置された計算ノードから、座標(3,0)に配置された計算ノードを順次選択する。続いて、探索部15aは、座標(2,2)に配置された計算ノードから座標(2,0)に配置された計算ノードまで順次選択し、その後、座標(1,2)に配置された計算ノードから座標(1,0)に配置された計算ノードまで順次選択する。そして、探索部15aは、座標(0,2)に配置された計算ノードから座標(0,0)に配置された計算ノードまで順次選択する。
次に、探索部15aが各軸方向ごとに実行する算出処理について説明する。まず、探索部15aは、ノードテーブル12を用いて、選択処理によって選択された計算ノードにジョブが割当てられているか否かを判定する。また、探索部15aは、選択された計算ノードにジョブが割当てられていない場合は、選択された計算ノードと接続された他の計算ノードであって、選択された計算ノードよりもいずれかの軸方向における接続距離が大きい計算ノードを特定する。
そして、探索部15aは、特定した計算ノードを起点とする領域を示す探索データから、選択された計算ノードを起点とする領域を示す探索データを算出する。一方、探索部15aは、選択された計算ノードにジョブが割当てられている場合は、かかる計算ノードからの連続した空きノードの数を「0」に設定することで、無効化した探索データを算出する。
例えば、管理装置10aが起点となる計算ノードから各軸の正の方向に空きノードを探索する場合、座標(2,1)に配置された計算ノードを起点とする領域には、座標(3,1)を起点とする領域と、座標(2,2)を起点とする領域とが含まれる。このため、探索部15aは、上述した選択処理によって、原点からの接続距離が大きい計算ノードから順に計算ノードを選択し、選択した計算ノードを起点とする領域を、それまでの探索結果から算出することで、探索処理の処理コストを削減する。
以下、探索部15aが特定した計算ノードを起点とする領域を示す探索データから、選択された計算ノードを起点とする領域を示す探索データを算出する処理について説明する。まず、探索部15aが、探索データを算出する処理の1つであるY軸固定探索処理について説明する。
例えば、探索部15aは、座標(3、2)に配置された計算ノードからX軸の負の方向に順次計算ノードを選択する。そして、探索部15aは、選択した計算ノードにジョブが割当てられていない場合は、選択した計算ノードを起点として、領域のY軸方向のサイズを変更しながら、X軸方向のサイズを探索する。ここで、ある計算ノードについて、Y軸方向のサイズが1となる領域のX軸方向のサイズは、かかる計算ノードからX軸の正の方向に接続された計算ノードを起点とする領域のうち、Y軸方向のサイズが1となる領域のX軸方向のサイズに1を加算した値となる。
このため、探索部15aは、選択した計算ノードについてY軸方向のサイズが1となる領域の探索データを算出する場合は、以下の処理を実行する。まず、探索部15aは、選択した計算ノードからX軸の正の方向に接続された計算ノードを起点とする領域の探索データのうち、Y軸方向のサイズが1となる領域の探索データを特定する。そして、探索部15aは、特定した探索データのX軸方向のサイズに1を加算した値を、選択した計算ノードを起点とする領域の探索データであって、Y軸方向のサイズが1となる領域の探索データとして出力する。
また、ある計算ノードについて、Y軸方向のサイズが2以上の整数nとなる領域のX軸方向のサイズは、以下の条件を満たす。まず、かかる領域のX軸方向のサイズは、起点となる計算ノードとX軸の正の方向に接続された計算ノードを起点とする領域のうち、Y軸方向のサイズがnとなる領域のX軸方向のサイズに1を加算した値(以下、第1の値と記載する)以下となる。また、かかる領域のX軸方向のサイズは、起点となる計算ノードとY軸の正の方向に接続された計算ノードを起点とする領域のうち、Y軸方向のサイズがn−1となる領域のX軸方向のサイズの値(以下、第2の値と記載する)以下となる。このため、探索部15aは、第1の値および第2の値のうち、より小さい値を選択する。そして、探索部15aは、Y軸方向のサイズをnとし、X軸方向のサイズを選択した値とした探索データを出力する。
続いて、探索部15aが探索データを算出する処理の1つであるX軸固定探索処理について説明する。例えば、探索部15aは、座標(3、2)に配置された計算ノードからY軸の負の方向に順次計算ノードを選択する。そして、探索部15aは、選択した計算ノードにジョブが割当てられていない場合は、選択した計算ノードを起点として、領域のX軸方向のサイズを変更しながら、Y軸方向のサイズを探索する。
ここで、ある計算ノードについて、X軸方向のサイズが1となる領域のY軸方向のサイズは、かかる計算ノードからY軸の正の方向に接続された計算ノードを起点とする領域のうち、X軸方向のサイズが1となる領域のY軸方向のサイズに1を加算した値となる。このため、探索部15aは、選択した計算ノードからY軸の正の方向に接続された計算ノードを起点とする領域の探索データのうち、X軸方向のサイズが1となる領域の探索データを特定する。そして、探索部15aは、特定した探索データのY軸方向のサイズに1を加算した値を、選択した計算ノードを起点とする領域の探索データであって、X軸方向のサイズが1となる領域の探索データとして出力する。
また、ある計算ノードについて、X軸方向のサイズが2以上の整数nとなる領域のY軸方向のサイズは、以下の条件を満たす。まず、かかる領域のY軸方向のサイズは、起点となる計算ノードとX軸の正の方向に接続された計算ノードを起点とする領域のうち、X軸方向のサイズがn−1となる領域のY軸方向のサイズの値(以下、第3の値と記載する)以下となる。また、かかる領域のY軸方向のサイズは、起点となる計算ノードとY軸の正の方向に接続された計算ノードを起点とする領域のうち、X軸方向のサイズがnとなる領域のY軸方向のサイズに1を加算した値(以下、第4の値と記載する)以下となる。このため、探索部15aは、第3の値および第4の値のうち、より小さい値を選択する。そして、探索部15aは、X軸方向のサイズをnとし、Y軸方向のサイズを選択した値とした探索データを出力する。
以下、図10、図11を用いて、探索部15aが実行する処理の一例について説明する。まず、図10を用いて、探索部15aがX軸方向について実行する算出処理の一例について説明する。図10は、実施例2に係る管理装置がX軸方向について実行する処理の流れを説明する図である。なお図10に示す例では、探索部15aが座標(0,0)に配置された計算ノードを起点とする領域の探索データを算出する例について記載した。
例えば、探索部15aは、座標(0,0)に配置された計算ノードを起点とする領域のうち、Y軸方向のサイズが「1」となる領域の探索データT[0][0]、yx[0]を探索する場合は、以下の処理を実行する。まず、探索部15aは、座標(1,0)に配置された計算ノードを起点とする領域の探索データのうち、Y軸方向のサイズが「1」となる領域の探索データT[1][0]、yx[0]の値を参照する。そして、探索部15aは、図10中(Q)に示すように、探索データT[1][0]、yx[0]が示す領域のX軸方向のサイズに1を加算した値を探索データT[0][0]、yx[0]が示す領域のX軸方向のサイズとする。
また、例えば、探索部15aは、座標(0,0)に配置された計算ノードを起点とする領域のうち、Y軸方向のサイズが「3」となる領域の探索データT[0][0]、yx[2]を算出する場合は、以下の処理を実行する。まず、探索部15aは、図10中(R)に示すように、座標(1,0)に配置された計算ノードを起点とする領域の探索データのうち、Y軸方向のサイズが「3」となる領域の探索データT[1][0]、yx[2]を参照する。そして、探索部15aは、探索データT[1][0]、yx[2]が示す領域のX軸方向のサイズに1を加算した値を第1の値として取得する。
また、探索部15aは、図10中(S)に示すように、座標(0,1)に配置された計算ノードを起点とする領域の探索データのうち、Y軸方向のサイズが「2」となる領域の探索データT[1][0]、yx[2]を参照する。そして、探索部15aは、探索データT[1][0]、yx[2]が示す領域のX軸方向のサイズを第2の値として取得する。そして、探索部15aは、取得した第1の値および第2の値のうち、より小さい値を選択し、選択した値を探索データT[0][0]、yx[2]が示す領域のX軸方向のサイズとする。
次に、図11を用いて、探索部15aがY軸方向について実行する算出処理の一例について説明する。図11は、実施例2に係る管理装置がY軸方向について実行する処理の流れを説明する図である。なお図11に示す例では、探索部15aが座標(0,0)に配置された計算ノードを起点とする領域の探索データを算出する例について記載した。
例えば、探索部15aは、座標(0,0)に配置された計算ノードを起点とする領域のうち、X軸方向のサイズが「1」となる領域の探索データT[0][0]、xy[0]を探索する場合は、以下の処理を実行する。まず、探索部15aは、座標(1,0)に配置された計算ノードを起点とする領域の探索データのうち、X軸方向のサイズが「1」となる領域の探索データT[0][1]、xy[0]の値を参照する。そして、探索部15aは、図11中(T)に示すように、探索データT[0][1]、xy[0]が示す領域のY軸方向のサイズに1を加算した値を探索データT[0][0]、xy[0]が示す領域のY軸方向のサイズとする。
また、例えば、探索部15aは、座標(0,0)に配置された計算ノードを起点とする領域のうち、X軸方向のサイズが「4」となる領域の探索データT[0][0]、xy[3]を算出する場合は、以下の処理を実行する。まず、探索部15aは、図11中(U)に示すように、座標(1,0)に配置された計算ノードを起点とする領域の探索データのうち、X軸方向のサイズが「3」となる領域の探索データT[1][0]、xy[3]を参照する。そして、探索部15aは、探索データT[1][0]、xy[3]が示す領域のY軸方向のサイズを第3の値として取得する。
また、探索部15aは、図11中(V)に示すように、座標(0,1)に配置された計算ノードを起点とする領域の探索データのうち、X軸方向のサイズが「4」となる領域の探索データT[0][1]、xy[3]を参照する。そして、探索部15aは、探索データT[0][1]、xy[3]が示す領域のY軸方向のサイズに1を加算した値を第4の値として取得する。そして、探索部15aは、取得した第3の値および第4の値のうち、より小さい値を選択し、選択した値を探索データT[0][0]、xy[3]が示す領域のY軸方向のサイズとする。
上述したように、探索部15aは、探索処理の対象となる計算ノードを選択し、選択した計算ノードといずれかの軸方向に接続された計算ノードを起点する領域を示す探索データから、選択した計算ノードを起点とする領域を示す探索データを生成する。このため、探索部15aは、各計算ノードを起点として各軸方向に空きノードが連続する数を計数せずとも、各計算ノードが空きノードであるか否かを判定するだけで、各計算ノードを起点とする領域を示す探索データを生成できる。この結果、探索部15aは、探索処理の処理コストを削減するので、探索処理にかかる時間を短縮できる。
次に、図12、図13を用いて、管理装置10aの効果について説明する。まず、図12を用いて、従来の並列計算機が空きノードが連続する領域を探索する処理に実行する判定回数の一例について説明する。図12は、従来の並列計算機システムが実行する条件判定回数の一例を説明する図である。
なお、図12には、図29〜図30に示す各処理における条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。また、図12には、計算ノードの数ごとに、図29に示したメイン処理における条件判定回数を点線で示し、図30に示したY軸固定判定処理における条件判定回数を一点破線で示し、図31に示したX軸固定判定処理における条件判定回数を点線で示した。また、図12には、各条件判定処理の合計を実線で示した。
例えば、図12に示すように、従来の並列計算機システムは、計算ノードの数が「24」個の際は、約「2500」回の条件判定処理を実行する。また、並列計算機システムは、計算ノード数が「432」個の際は、約「330000」回の条件判定処理を実行する。このように、従来の並列計算機では、計算ノードの数が18倍になると、条件判定処理の実行回数が約130倍となってしまう。
一方、図13は、実施例2に係る管理装置が実行する条件判定回数の一例を説明する図である。なお、図13には、図12と同様に、管理装置10aが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。また、図13には、起点となる計算ノードを選択するメイン処理における条件判定回数を点線で示し、Y軸固定判定処理における条件判定回数を一点破線で示し、X軸固定判定処理における条件判定回数を点線で示し、各条件判定処理の合計を実線で示した。
例えば、図13に示すように、管理装置10aは、計算ノードの数が「24」個の際は、約「950」回の条件判定処理を実行する。また、管理装置10aは、計算ノード数が「432」個の際は、約「30000」回の条件判定処理を実行する。このように、管理装置10aは、従来の並列計算機システムと比較して、約12分の1の処理で、空きノードが連続する領域を探索できる。
次に、図14〜16を用いて、管理装置10aが実行する処理の流れについて説明する。まず、図14を用いて、管理装置10aが実行するメイン処理の流れを説明する。図14は、実施例2に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。例えば、管理装置10aは、Yの値を「2」に初期化し(ステップS301)、Yの値が0以上となるか否かを判定する(ステップS302)。そして、管理装置10aは、Yの値が0以上となる場合は(ステップS302:Yes)、Xの値を「3」に初期化し(ステップS303)、Xの値が0以上となるか否かを判定する(ステップS304)。
ここで、管理装置10aは、Xの値が0以上となる場合は(ステップS304:Yes)、XおよびYの値を引数としてY軸固定探索処理を実行し(ステップS305)、次に、XおよびYの値を引数としてX軸固定探索処理を実行する(ステップS306)。そして、管理装置10aは、Xの値から1を減算し(ステップS307)、ステップS304を実行する。一方、管理装置10aは、Xの値が0よりも小さい場合は(ステップS304:No)、Yの値から1を減算し(ステップS308)、ステップS302を実行する。そして、管理装置10aは、Yの値が0よりも小さい値となった場合は(ステップS302:No)、処理を終了する。
次に、図15を用いて、管理装置10aが実行するY軸固定探索処理の流れについて説明する。図15は、実施例2に係る管理装置が実行するY軸固定探索処理の流れを説明するフローチャートである。なお、図15に示す処理は、図14中ステップS305に示す処理に対応する。なお、以下の説明では、座標(X,Y)に配置された計算ノードを起点とする領域のうち、Y軸方向のサイズを「c−1」に設定してY軸固定探索処理を実行した結果探索される領域の、X軸方向のサイズをT[X][Y].yx[c].dと記載する。
まず、管理装置10aは、変数c、e、dの値を初期化して、c=2、e=3−Y、d=0とし(ステップS401)、cの値がYの値よりも大きいか否かを判定する(ステップS402)。また、管理装置10aは、cの値がYの値よりも大きいと判定した場合は(ステップS402:Yes)、座標(X、Y)に配置された計算ノードT[X][Y]が空きノードであるか否かを判定する(ステップS403)。
また、管理装置10aは、座標(X、Y)に配置された計算ノードT[X][Y]が空きノードであると判定した場合は(ステップS403:Yes)、以下の処理を実行する。すなわち、管理装置10aは、T[X][Y+1].yx[c].dの値(第2の値)がT[X+1][Y].yx[c].d+1の値(第1の値)よりも小さいか否かを判定する(ステップS404)。
ここで、管理装置10aは、第2の値が第1の値以上であると判定した場合は(ステップS404:No)、dの値を第1の値に設定する(ステップS405)。一方、管理装置10aは、第2の値が第1の値より小さいと判定した場合は(ステップS404:Yes)、dの値を第2の値に設定する(ステップS406)。
そして、管理装置10aは、座標(X,Y)に配置された計算ノードを起点とする領域を示すデータとして、T[X][Y].yx[c]=(d、e)を出力し、cの値とeの値から1を減算するとともに、dの値を0に初期化する(ステップS407)。そして、管理装置10aは、ステップS402を再度実行する。また、管理装置10aは、計算ノードT[X][Y]が空きノードではないと判定した場合は(ステップS403:No)、dの値を0に初期化し(ステップS408)、ステップS407を実行する。
また、管理装置10aは、cの値がYの値以下であると判定した場合は(ステップS402:No)、計算ノードT[X][Y]が空きノードであるか否かを判定する(ステップS409)。そして、管理装置10aは、計算ノードT[X][Y]が空きノードであると判定した場合は(ステップS409:Yes)dの値をT[X+1][Y].yx[c].d+1に設定する(ステップS410)。一方、管理装置10aは、計算ノードT[X][Y]が空きノードではないと判定した場合は(ステップS409:No)、ステップS410をスキップする。その後、管理装置10aは、T[X][Y].yx[c]=(d、e)を出力し(ステップS411)、処理を終了する。
次に、図16を用いて、管理装置10aが実行するX軸固定探索処理の流れについて説明する。図16は、実施例2に係る管理装置が実行するX軸固定探索処理の流れを説明するフローチャートである。なお、図16に示す処理は、図14中ステップS306に示す処理に対応する。なお、以下の説明では、座標(X,Y)に配置された計算ノードを起点とする領域のうち、X軸方向のサイズを「c−1」に設定してX軸固定探索処理を実行した結果探索される領域の、Y軸方向のサイズをT[X][Y].xy[c].eと記載する。
まず、管理装置10aは、変数c、d、eの値を初期化して、c=3、d=4−X、e=0とし(ステップS501)、cの値がXの値よりも大きいか否かを判定する(ステップS502)。また、管理装置10aは、cの値がXの値よりも大きいと判定した場合は(ステップS502:Yes)、座標(X、Y)に配置された計算ノードT[X][Y]が空きノードであるか否かを判定する(ステップS503)。
また、管理装置10aは、座標(X、Y)に配置された計算ノードT[X][Y]が空きノードであると判定した場合は(ステップS503:Yes)、以下の処理を実行する。すなわち、管理装置10aは、T[X+1][Y].xy[c].eの値(第3の値)がT[X][Y+1].xy[c].e+1の値(第4の値)よりも小さいか否かを判定する(ステップS504)。
ここで、管理装置10aは、第3の値が第4の値以上であると判定した場合は(ステップS504:No)、dの値を第4の値に設定する(ステップS505)。一方、管理装置10aは、第3の値が第4の値より小さいと判定した場合は(ステップS504:Yes)、dの値を第3の値に設定する(ステップS506)。
そして、管理装置10aは、座標(X,Y)に配置された計算ノードを起点とする領域を示すデータとして、T[X][Y].xy[c]=(d、e)を出力し、cの値とeの値から1を減算するとともに、eの値を0に初期化する(ステップS507)。そして、管理装置10aは、ステップS502を再度実行する。また、管理装置10aは、計算ノードT[X][Y]が空きノードではないと判定した場合は(ステップS503:No)、eの値を0に初期化し(ステップS508)、ステップS507を実行する。
また、管理装置10aは、cの値がXの値以下であると判定した場合は(ステップS502:No)、計算ノードT[X][Y]が空きノードであるか否かを判定する(ステップS509)。そして、管理装置10aは、計算ノードT[X][Y]が空きノードであると判定した場合は(ステップS509:Yes)、eの値をT[X][Y+1].xy[c].e+1に設定する(ステップS510)。一方、管理装置10aは、計算ノードT[X][Y]が空きノードではないと判定した場合は(ステップS509:No)、ステップS510をスキップする。その後、管理装置10aは、T[X][Y].xy[c]=(d、e)を出力し(ステップS511)、処理を終了する。
[並列計算機システム1aの効果]
上述したように、管理装置10aは、原点となる計算ノードからの接続距離が最大となる計算ノードから、所定の軸方向以外の軸方向の接続距離を変更しながら、所定の軸における負の方向に計算ノードを順に選択する選択処理を実行する。また、管理装置10aは、選択された計算ノードにジョブが割当てられているか否かを判定する。
そして、管理装置10aは、選択された計算ノードにジョブが割当てられていないと判定した場合は、以下の処理を実行する。すなわち、管理装置10aは、選択された計算ノードと接続された他の計算ノードであって、いずれかの軸方向における原点からの接続距離が選択された計算ノードよりも大きい計算ノードを起点とする領域の探索結果を参照する。そして、管理装置10aは、参照した探索結果を用いて、選択された計算ノードを起点とする領域を探索する。
このため、管理装置10aは、選択された計算ノードを起点とし、各軸方向に連続する空きノードの数を計数せずとも、選択された計算ノードを起点とする領域を示す全ての探索データを算出できる。このため、管理装置10aは、探索処理における処理コストを削減し、探索処理にかかる時間を短縮できる。
なお、管理装置10aは、各計算ノードにジョブが割当てられているか否かを示す第1の情報と、仮想ノードにジョブが割当てられている旨を示す第2の情報とを含むノードテーブル12を記憶する必要はない。すなわち、管理装置10aは、仮想ノードにジョブが割当てられている旨を示す第2の情報をノードテーブル12に含めず、従来と同様に選択したノードが終端のノードであるか否かを判定してもよい。かかる処理を実行した場合でも、管理装置10aは、空きノードが連続する範囲を探索する探索処理の処理コストを削減できるので、管理装置10aは、探索処理にかかる時間を短縮できる。
また、管理装置10aは、ノードテーブル12に、仮想ノードにジョブが割当てられている旨を示す第2の情報が含まれる場合は、選択したノードが終端のノードであるか判定する処理を不要にできる。この結果、管理装置10aは、探索処理にかかる時間をさらに短縮できる。
また、管理装置10aは、選択された計算ノードを起点とする領域のうち第1の軸方向のサイズが1である領域を探索する場合は、選択された計算ノードと第2の軸方向に接続された計算ノードを特定する。また、探索部15aは、特定した計算ノードを起点とする領域の探索データのうち、第1の軸方向のサイズが1である領域を示す探索データが示す第2の軸方向のサイズに1を加算した値を算出する。
そして、探索部15aは、算出した値を、選択された計算ノードを起点とする領域のうち、第1の軸方向のサイズが1である領域の第2の軸方向のサイズとする探索データを出力する。このため、探索部15aは、第1の軸方向のサイズが1である領域を探索する場合は、他の計算ノードが空きノードか否かを判定する処理を実行せずとも、加算処理を行うだけで探索データを算出することができる。
また、探索部15aは、選択された計算ノードを起点とする領域のうち第1の軸方向の接続距離が2以上である領域を探索する場合は、以下の処理を実行する。まず、探索部15aは、選択された計算ノードと第2の軸方向に接続された計算ノードを起点とする領域のうち、第1の軸方向における接続距離が、探索対象となる領域の第1の軸方向における接続距離と同一である領域を特定する。そして、探索部15aは、特定した領域の第2の軸方向における接続距離、例えば第2の値を取得する。
また、探索部15aは、選択された計算ノードと第1の軸方向に接続された計算ノードを起点とする領域のうち、第1の軸方向における接続距離が、探索対象となる領域の第1の軸方向における接続距離から1を減算した値となる領域を特定する。そして、探索部15aは、特定した領域の第2の軸方向における接続距離、例えば第1の値を取得する。そして、探索部15aは、第1の値と第2の値とのうち、いずれか小さい方の値を探索対象となる領域における第2の軸方向の接続距離とする。このため、探索部15aは、第1の軸方向のサイズが2である領域を探索する場合は、第1の値と第2の値とを比較する処理を行うだけで、探索データを算出することができる。
上述した実施例1、2では、並列計算機3が2次元メッシュ状のネットワークを形成する計算ノード3a〜3fを有する例について説明した。しかしながら、実施例は、これに限定されるものではない。
例えば、管理装置10、10aは、計算ノード3a〜3fが、X軸方向が円環状に接続されたトーラス状のネットワークを有する場合がある。かかる場合、管理装置10、10aは、上述した処理を実行しただけでは、円環方向に回り込んで存在する領域を適切に探索することができない。
そこで、管理装置10、10aは、座標(0,0)〜座標(3,0)に配置された計算ノードまでの各計算ノードを仮想原点とする。そして、管理装置10、10aは、仮想原点ごとに、上述したメイン処理、X軸固定探索処理、Y軸固定探索処理を実行する。この結果、管理装置10、10aは、トーラスを跨ぐ領域を考慮した探索データを算出できる。
しかしながら、かかる処理を実行した場合は、管理装置10、10aは、上述したメイン処理、X軸固定探索処理、Y軸固定探索処理を仮想原点ごとに実行するので、探索処理にかかる時間が増大してしまう。そこで、実施例3に係る並列計算機システム1bは、仮想原点ごとにノードテーブルを生成する。そして、並列計算機システム1bは、仮想原点ごとに生成されたノードテーブルを用いた探索処理を、並列に実行することで、トーラスを跨ぐ領域を考慮した探索データを算出する際の時間を短縮する。
以下、図17を用いて、実施例3に係る並列計算機システム1bについて説明する。図17は、実施例3に係る並列計算機システムを説明する図である。なお、以下の説明では、上述した実施例1、2に記載した機能と同様の機能を発揮するものについては、同一の符号を付し、以下の説明を省略する。
図17に示すように、並列計算機システム1bは、入力装置2、並列計算機3、出力装置4、管理装置10bを有する。また、管理装置10bは、複数のノードテーブル12a、12bを記憶する記憶部11a、生成部13a、受付部14、複数の探索部15b〜15d、特定部16a、割当部17を有する。なお、記憶部11aは、他にも複数のノードテーブルを記憶しているものとする。
並列計算機3は、並列計算機3と同様に、複数の計算ノード3a〜3fを有する。ここで、並列計算機3が有する計算ノード3a〜3fは、X軸方向またはY軸方向の少なくとも一方を円環状に接続したトーラス状のネットワークを形成する。
ノードテーブル12a、12bは、それぞれ異なる計算ノードを仮想原点とした際の、各計算ノードの仮想的な座標と各計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けて格納したノードテーブルである。例えば、ノードテーブル12aは、計算ノード3aを仮想原点とした際のノードテーブルであり、ノードテーブル12bは、仮想ノード3bを仮想原点とした際のノードテーブルである。
生成部13aは、生成部13と同様に、各計算ノードの座標と、各計算ノードにジョブが割当てられているか否かを示すバリッドビットとを対応付けて格納したノードテーブルを生成する。
また、生成部13aは、各計算ノード3a〜3fが、X軸またはY軸のいずれか1軸が円環状に接続された2次元トーラス状のネットワークを形成する場合は、円環状に接続された各計算ノードをそれぞれ仮想原点とした複数のノードテーブルを生成する。以下、図18を用いて、生成部13aが複数のノードテーブルを生成する処理について説明する。
図18は、仮想原点の一例を説明する図である。例えば、生成部13aは、各計算ノード3a〜3fがX軸方向に円環状に接続される場合は、図18中(W)に示すように、座標(0,0)〜座標(3,0)に配置された各計算ノードを仮想原点としたノードテーブルを生成する。かかる場合、生成部13aは、X軸方向の回り込みを考慮したノードテーブルを生成する。
詳細に説明すると、生成部13aは、座標(1,0)に配置された計算ノードを仮想原点とする場合は、座標(0,0)に配置された計算ノードを仮想的な座標(3,0)に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部13aは、座標(2,0)に配置された計算ノードを仮想原点とする場合は、座標(0,0)、座標(1,0)に配置された計算ノードを仮想的な座標(2,0)、(3,0)に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部13aは、座標(3,0)に配置された計算ノードを仮想原点とする場合は、座標(0,0)〜(2,0)に配置された計算ノードを仮想的な座標(1,0)〜(3,0)に配置された計算ノードとみなしてノードテーブルを生成する。
また、例えば、生成部13aは、各計算ノード3a〜3fがY軸方向に円環状に接続される場合は、図18中(X)に示すように、座標(0,0)〜座標(0,2)に配置された各計算ノードを仮想原点としたノードテーブルを生成する。かかる場合、生成部13aは、Y軸方向の回り込みを考慮したノードテーブルを生成する。
詳細に説明すると、生成部13aは、座標(0,1)に配置された計算ノードを仮想原点とする場合は、座標(0,0)に配置された計算ノードを仮想的な座標(0,2)に配置された計算ノードとみなしてノードテーブルを生成する。また、生成部13aは、座標(0,2)に配置された計算ノードを仮想原点とする場合は、座標(0,0)、座標(0,1)に配置された計算ノードを仮想的な座標(0,1)、(0,2)に配置された計算ノードとみなしてノードテーブルを生成する。
なお、生成部13aは、並列計算機3が有する各計算ノード3a〜3fが、X軸およびY軸が円環状に接続された3次元トーラス状のネットワークを形成する場合は、全ての計算ノード3a〜3fをそれぞれ仮想原点とした複数のノードテーブルを生成する。かかる場合においても、生成部13aは、各軸方向の回りこみを考慮して、仮想原点とした計算ノード以外の計算ノードの座標を設定したノードテーブルを生成する。
図17に戻り、各探索部15b〜15dは、それぞれ異なるノードテーブルを用いて、探索処理を並行して実行する。そして、各探索部15b〜15dは、それぞれ異なる計算ノードを仮想原点とした探索データを生成し、生成した探索データを特定部16に出力する。
例えば、図19は、実施例3に係る管理装置が実行する処理を説明する図である。なお、図19に示す例では、各計算ノード3a〜3fがX軸を円環状に接続した2次元トーラス状のネットワークを形成する際に、管理装置10bが実行する処理の一例について記載した。なお、図19中に記載した探索部15eは、図17において図示を省略した探索部であり、他の探索部15b〜15dと同様の機能を発揮する。
例えば、生成部13aは、図19中(Y)に示すように、座標(0,0)に配置された計算ノードを仮想原点としたノードテーブルを生成する。そして、探索部15bは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。また、生成部13aは、図19中(Z)に示すように、座標(3,0)に配置された計算ノードを仮想原点とし、他の計算ノード座標をX軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部15cは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
また、生成部13aは、図19中(a)に示すように、座標(2,0)に配置された計算ノードを仮想原点とし、他の計算ノード座標をX軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部15dは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
また、生成部13aは、図19中(b)に示すように、座標(1,0)に配置された計算ノードを仮想原点とし、他の計算ノード座標をX軸方向の周り込みを考慮した座標に修正したノードテーブルを生成する。そして、探索部15eは、かかるノードテーブルを用いて、空きノードが連続する領域を探索する処理を実行する。
このように、管理装置10bは、複数の探索部15b〜15eを有する。また、管理装置10bは、各計算ノード3a〜3fが、X軸方向を円環状に接続したトーラス状のネットワークを形成する場合は、Y軸方向の座標が「0」となる各計算ノードを仮想原点としたノードテーブル12a、12bを生成する。そして、管理装置10bは、各探索部15b〜15eに、それぞれ異なるノードテーブル12a、12bを用いて、空きノードが連続した配置された領域を探索する処理を並列に実行させる。
この結果、管理装置10bは、各計算ノード3a〜3fが、X軸方向を円環状に接続したトーラス状のネットワークを形成する際にも、各仮想原点ごとに、探索処理を並行して実行するので、探索処理にかかる時間を短縮することができる。
なお、かかる処理を実行した場合、各探索部15b〜15eは、例えば、図5中(N)に示す形式のデータを仮想原点と同数だけ出力するので、探索データのソートにかかる時間が増大してしまう。そこで、特定部16aは、以下の処理を実行する。
例えば、各計算ノード3a〜3fが2次元トーラス状のネットワークを形成している場合、各探索部15b〜15eが出力する探索データには、他の探索データが示す領域を内包するデータが存在する場合がある。詳細な例を説明すると、Y軸固定探索処理を実行した際に取得される複数の探索データは、Y軸方向のサイズが1つずつ減少した領域を示す探索データとなる。また、逆に、X軸固定探索処理を実行した際に取得される複数の探索データには、X軸方向のサイズが1つずつ減少した領域を示す探索データとなる。
このため、特定部16aは、第1の探索データが示す領域と、第1の探索データが示す領域よりも所定軸方向以外の軸方向のサイズが大きい領域を示す探索データ、すなわち、第1の探索データの上位の探索データが示す領域とを比較する。そして、特定部16aは、第2の探索データが示す領域の所定軸方向のサイズが第1の探索データが示す領域の所定軸方向のサイズより大きい場合は、第1の探索データを探索結果から除外する。
詳細には、特定部16aは、各探索部15b〜15eが算出した探索データをまとめ、探索データが示す領域の各軸方向のサイズがより大きい順にソートする。そして、特定部16aは、上位の探索データから順に、各探索データが示す領域に下位の探索データが示す領域を含むか否かを判定し、探索データが示す領域に下位の探索データが示す領域が含まれる場合は、下位の探索データを削除する。
ここで、図20は、実施例3に係る管理装置が探索データを削減する処理の流れを説明する図である。なお、図20に示す例では、図5に示す探索データから不要な探索データを削除する処理の一例について記載した。例えば、特定部16aは、図20に示す全ての探索データを上位の探索データからソートし、上位の探索データが示す領域に下位の探索データが示す領域が含まれるか否かを判定する。
ここで、図20中(c)に示すように、T[0][0],yx[0]、および、T[0][0],yx[1]が示す領域のX軸方向におけるサイズは、T[0][0],yx[2]が示す領域のX軸方向におけるサイズ以下となる。このため、特定部16aは、T[0][0],yx[0]、および、T[0][0],yx[1]が示す領域がT[0][0],yx[2]が示す領域に含まれると判断し、T[0][0],yx[0]、および、T[0][0],yx[1]を削除する。
また、特定部16aは、同様の処理を行うことで、図20中(d)に示すように、T[3][0],yx[0]〜T[3][0],yx[2]までの探索データのうち、T[3][0],yx[2]以外の探索データを除外する。また、特定部16aは、X軸方向固定処理によって取得された探索データ、すなわち、図20中(e)に示す探索データについても、Y軸方向固定処理によって取得された探索データと比較する。この結果、特定部16aは、図20中(e)に示す探索データを全て削除する。
この結果、特定部16aは、図20中(f)に示すように、無駄のない探索データを取得することができる。その後、特定部16aは、図20中(f)に示す探索データから、ジョブの割当てに最も適した領域を示す探索データを特定する。
次に、図21〜図22を用いて、上位の探索データが示す領域に含まれる領域を示す下位の探索データを削除することで、探索データの数の削減量の一例について説明する。図21は、従来の並列計算機システムが出力する探索データの数の一例を説明する図である。なお、図21には、図12と同様に、従来の並列計算機システムが出力する探索データの数を、横軸を計算ノードの数とし、縦軸を探索データ数としてプロットした。
例えば、図21に示すように、従来の並列計算機システムは、計算ノードの数が「24」個の際は、「324」個の探索データを出力する。また、並列計算機システムは、計算ノード数が「432」個の際は、「9504」個の探索データを出力する。このように、従来の並列計算機では、計算ノードの数が18倍になると、出力する探索データの数が条29倍となってしまう。
一方、図22は、実施例3に係る管理装置が出力する探索データの数の一例を説明する図である。なお、図22には、図21と同様に、管理装置10bが出力する探索データの数を、横軸を計算ノードの数とし、縦軸を探索データの数としてプロットした。例えば、図22に示すように、管理装置10bは、計算ノードの数が「24」個の際は、「24」個の探索データを出力する。また、管理装置10bは、計算ノード数が「432」個の際は、「432」個の探索データを出力する。この結果、管理装置10bは、計算ノードの数が「432」個の場合は、従来の並列計算機システムと比較して、約22分の1の探索データから、ジョブの割当てに最適な領域を示す探索データを探索すればよい。この結果、管理装置10bは、ジョブの割当てにかかる時間を短縮できる。
次に、図23、図24を用いて、管理装置10bが実行する条件判定処理の回数について説明する。まず、図23を用いて、従来の並列計算機がX軸方向のトーラスを考慮した際に実行する条件判定回数の一例について説明する。図23は、従来の並列計算機システムがX軸方向のトーラスを考慮した際に実行する条件判定回数の一例を説明する図である。
なお、図23には、図12と同様に、従来の並列計算機システムが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数として、実線でプロットした。また、図23には、比較のため、トーラスを考慮しない際に従来の並列計算機システムが実行する条件判定回数を点線でプロットした。
例えば、図23に示すように、従来の並列計算機システムは、図12に示した条件判定回数と、X軸方向に連続する計算ノードとを積算した回数の条件判定処理を実行する。この結果、例えば、従来の並列計算機システムは、計算ノードの数が「24」個の際は、「60552」回の条件判定処理を実行する。また、並列計算機システムは、計算ノード数が「432」個の際は、「7875384」回の条件判定処理を実行する。このように、従来の並列計算機では、計算ノードの数が18倍になると、条件判定処理の実行回数が3121倍となってしまう。
一方、図24は、実施例3に係る管理装置が実行する条件判定回数の一例を説明する図である。なお、図24には、図12と同様に、管理装置10bが実行する条件判定回数を、横軸を計算ノードの数とし、縦軸を条件判定回数としてプロットした。例えば、図24に示すように、管理装置10aは、計算ノードの数が「24」個の際は、「75」回の条件判定処理を実行する。また、管理装置10aは、計算ノード数が「432」個の際は、「12349」回の条件判定処理を実行する。このように、管理装置10aは、従来の並列計算機システムと比較して、638分の1の処理で、空きノードが連続する領域を探索できる。
次に、図25、図26を用いて、管理装置10bが実行する処理の流れについて説明する。まず、図25を用いて、管理装置10bが実行する処理の基本的な流れについて説明する。図25は、実施例3に係る管理装置が実行するメイン処理の流れを説明するフローチャートである。なお、以下の説明では、管理装置10bが生成したテーブルのセルのうち、計算ノードT[X][Y]に対応するセルをTT[X][Y]と記載する。また、以下の説明では、並列処理の結果取得される探索データが示す領域のサイズをSZと記載する。
まず、管理装置10bは、初期設定を実行する(ステップS601)。詳細な例を説明すると、管理装置10bは、X軸方向に5個、Y軸方向に4個の計算ノードが配置された旨を示すテーブルを生成し、全ての計算ノードを空きノードに設定する。また、管理装置10bは、生成したテーブルのうち、仮想計算ノードを示すTT[4][0]〜TT[4][3]、TT[0][3]〜TT[4][3]に使用中である旨の情報を格納する。また、管理装置10bは、並列処理用の獲得領域返却ポインタ配列P[4]を獲得する。
次に、管理装置10bは、生成したテーブルのうち、ジョブが割当てられた使用中の計算ノードと対応する領域に、計算ノードが使用中である旨の情報を格納する(ステップS602)。そして、管理装置10bは、4並列処理を実行する(ステップS603)。次に、管理装置10bは、X、XX、SZの値を0に初期化する(ステップS604)。そして、管理装置10bは、配列P[X]のSZの値が現在の変数値SZよりも大きいか否かを判定する(ステップS605)。
そして、管理装置10bは、配列P[X]のSZの値が現在の変数値SZよりも大きいと判断した場合は(ステップS605:Yes)、XXの値をXの値とし、SZの値を配列P[XX]のSZの値に変更する(ステップS606)。一方、管理装置10bは、配列P[X]のSZの値が現在の変数値SZ以下であると判断した場合は(ステップS605:No)、ステップS606の処理をスキップする。
次に、管理装置10bは、Xの値が3より小さいか否かを判定し(ステップS607)、Xの値が3以上であると判定した場合は(ステップS607:No)、配列P[XX]のTの値を出力して処理を終了する。一方、管理装置10bは、Xの値が3より小さいと判断した場合は(ステップS607:Yes)、Xの値に1を加算し(ステップS608)、ステップS605を実行する。
次に、図26を用いて、実施例3に係る管理装置10bが実行する4並列処理の流れについて説明する。図26は、実施例3に係る管理装置が実行する4並列処理の流れを説明するフローチャートである。なお、図26に示す処理は、図25中ステップS603に示す処理に対応する。また、以下の説明では、I、X、Yを変数とする。
まず、管理装置10bは、初期設定を実行する(ステップS701)。詳細には、管理装置10bは、X軸方向に5つ、Y軸方向に4つのデータを配列可能なPP.T[5][4]領域を獲得する。また、管理装置10bは、獲得した領域のうち、仮想計算ノードに対応する領域であるPP.T[4][0]〜PP.T[4][3]、PP.T[0][3]〜PP.T[4][3]に、計算ノードにジョブが割当てられた旨の情報を格納する。また、管理装置10bは、PP.SZ領域を獲得し、P[X]の値をPPの値が格納されたアドレスの番地に初期化する。
次に、管理装置10bは、変数Iの値を0に初期化し(ステップS702)、変数Yの値を0に初期化し(ステップS703)、PP.T[I][Y]の値をTT[X][Y]に設定する(ステップS704)。そして、管理装置10bは、Yの値が2より小さいか否かを判定し(ステップS705)、Yの値が2以上となる場合は(ステップS705:No)、Iの値が3と等しいか否かを判定する(ステップS706)。
また、管理装置10bは、Iの値が3と異なると判定した場合は(ステップS706:No)、IおよびXの値に1を加算し(ステップS707)、Xの値が4と等しいか否かを判定する(ステップS708)。そして、管理装置10bは、Xの値が4と等しいと判定した場合は(ステップS708:Yes)、Xの値を0に設定し(ステップS709)、ステップS703を実行する。
また、管理装置10bは、Iの値が3と等しいと判定した場合は(ステップS706:Yes)、探索処理を実行し、配列PP.Tの値、すなわち探索データを取得する(ステップS710)。そして、管理装置10bは、探索処理の結果取得される探索データのリストを、領域に含まれる計算ノードの数でソートし、PP.SZの値を最大のノード数に設定して(ステップS711)、処理を終了する。
一方、管理装置10bは、Yの値が2よりも小さいと判定した場合は(ステップS705:Yes)、Yの値に1を加算し(ステップS712)、ステップS704の処理を実行する。また、管理装置10bは、Xの値が4と異なると判定した場合は(ステップS708:No)、ステップS703を実行する。
[情報処理システム1bの効果]
上述したように、並列計算機3の各計算ノード3a〜3fは、所定の軸方向を円環状に接続したトーラス型のネットワークを形成する。また、管理装置10bは、所定の軸方向に連続する各情報処理装置をそれぞれ仮想原点とし、仮想原点ごとに、各計算ノード3a〜3fを起点とする全ての領域を探索する。
また、管理装置10bは、探索データのうち、第1の探索データが示す領域における所定の軸方向のサイズと、第1の探索データよりも上位の探索データである第2の探索データが示す領域における所定の軸方向のサイズとを比較する。そして、管理装置10bは、第1の探索データが示す領域の所定の軸方向におけるサイズが、第2の探索データが示す領域の所定の軸方向におけるサイズ以下となる場合は、第1の領域を示す探索データを削除する。このため、管理装置10bは、ジョブの割当てに最適な領域を探索する処理にかかる時間を短縮することができる。
また、管理装置10bは、複数の探索部15b〜15eを有する。また、管理装置10bは、所定の軸方向に連続する計算ノードをそれぞれ仮想原点として他の計算ノードが配置された座標を表現した複数のノードテーブル12a、12bを記憶する。また、各探索部15b〜15eは、所定の軸方向に連続する計算ノードからそれぞれ異なる計算ノードを仮想原点として選択する。そして、各探索部15b〜15eは、選択した計算ノードを仮想原点としたノードテーブルを用いて、空きノードが連続して配置された領域を探索する処理を並列に実行する。このため、管理装置10bは、並列計算機3の各計算ノード3a〜3fが所定の軸方向を円環状に接続したトーラス型のネットワークを形成する場合にも、ジョブの割当てにかかる時間を短縮することができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)管理装置について
上述した各実施例1〜3に係る管理装置10〜10bが発揮する機能は、任意に組み合わせて実行することができる。例えば、管理装置10bは、管理装置10のように、ネットワークの端に配置された仮想計算ノードに常時ジョブが割当てられた旨を示すノードテーブルを用いずともよい。
(2)計算ノードについて
上述した実施例1〜3では、計算ノード3a〜3fが2次元のメッシュ状のネットワーク、2次元のトーラス状ネットワーク、または、3次元のトーラス状のネットワークを形成する例について記載した。しかしながら、実施例はこれに限定されるものではない。例えば、各計算ノード3a〜3fは、任意の次元のメッシュ状のネットワークや任意の次元のトーラス状ネットワークを形成してもよい。
なお、管理装置10、10aは、計算ノード3a〜3fが任意の次元のメッシュ状のネットワークを形成する場合は、各軸方向に空きノードが連続する数を、他の軸に連続する計算ノードの数を変更しながら計数することで、全ての探索データを算出できる。また、管理装置10bは、計算ノード3a〜3fが任意の次元のトーラス状ネットワークを形成する場合は、ノードテーブルを、各軸方向の周り込みを考慮した仮想原点ごとに生成する。そして、管理装置10bは、生成したノードテーブルを用いて、探索処理を並列実行することで、全ての探索データを算出できる。
(3)並列処理について
上述した実施例3では、管理装置10bは、複数の探索部15b〜15eを用いて、探索処理を並列実行した。例えば、管理装置10bは、計算ノード3a〜3fが形成するネットワークのトポロジに応じた数のノードテーブルを生成する。このため、管理装置10bは、生成するノードテーブルと同数の探索部を有するのが望ましい。しかしながら、管理装置10bは、例えば、生成するノードテーブルの半数の探索部を有し、各探索部が2回ずつ探索処理を実行することで、全ての探索データを算出してもよい。
(4)プログラム
上記の実施例で説明した管理装置10〜10bが発揮する機能は、予め用意された制御プログラムをコンピュータが実行することで実現してもよい。そこで、以下では、図27を用いて、上記の管理装置10〜10bと同様の機能を有する制御プログラムを実行するコンピュータの一例について説明する。図27は、制御プログラムを実行するコンピュータの一例を説明する図である。
図27に例示されたコンピュータ100は、ROM(Read Only Memory)110、HDD(Hard Disk Drive)120、RAM(Random Access Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、図27に例示されたコンピュータ100は、並列計算機3と通信するためのI/O(Input Output)150が、バス160で、CPU140等と接続される。
ここで、HDD120には、制御プログラム121があらかじめ保持される。CPU140が制御プログラム121をHDD120から読み出して実行することによって、図27に示す例では、制御プログラム121は、制御プロセス141として機能するようになる。なお、制御プロセス141は、図1に示した生成部13、受付部14、探索部15、特定部16、割当部17と同様の機能を発揮する。
なお、本実施例で説明した制御プログラムは、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。
なお、コンピュータ100は、CPUではなく、例えばMPUやFPGA等の演算装置を用いて制御プログラム121を実行してもよい。また、上記の制御プログラム121については、例えば、RAM130や、ROM110記憶させてもよいし、他の方法でCPU140に実行させてもよい。例えば、フレキシブルディスク、いわゆるFD(Flexible Disk)、CD(Compact Disk)−ROM、DVD(Digital Versatile Disk)、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。
そして、コンピュータ100がこれらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、LAN、WAN(Wide Area Network)などを介して他のコンピュータまたはサーバ装置などに記憶させた各プログラムを取得して実行するようにしてもよい。