JP2018092328A - ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 - Google Patents
ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 Download PDFInfo
- Publication number
- JP2018092328A JP2018092328A JP2016234405A JP2016234405A JP2018092328A JP 2018092328 A JP2018092328 A JP 2018092328A JP 2016234405 A JP2016234405 A JP 2016234405A JP 2016234405 A JP2016234405 A JP 2016234405A JP 2018092328 A JP2018092328 A JP 2018092328A
- Authority
- JP
- Japan
- Prior art keywords
- job
- node
- axis
- node information
- execution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/503—Resource availability
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Multi Processors (AREA)
Abstract
【課題】ジョブ実行時のノード選択を高速化すること。【解決手段】記憶部11は、複数のノードの接続関係を表すn(nは2以上の整数)次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数の冪である領域ごとに、当該領域に対応するノード群の空きノード情報4を記憶する。処理部12は、ジョブの実行開始時および実行終了時に、空きノード情報4を生成し、空きノード情報4を記憶部11に格納する。処理部12は、各軸の指定サイズを含むジョブの実行要求を受け付けると、指定サイズに応じた空きノード情報4を選択し、選択した空きノード情報4に基づいて、要求されたジョブの割り当て先のノードを抽出する。【選択図】図1
Description
本発明はジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法に関する。
現在、大規模な計算を行う並列処理装置が利用されている。例えば、並列処理装置では、計算を実行するノードを相互に複数接続して、複数のノードにより並列に計算を行い得る。並列処理装置のノード間のインタコネクトのトポロジの1つに格子状のネットワークが挙げられる。格子状のネットワークでは、あるノード対で通信してジョブを実行しつつ、別のノード対で通信して別のジョブを並列に実行できる。このとき、両方の通信が同じノード間リンクを使用すると演算性能が低下し得る。このため、実行中のジョブが別のジョブの実行に影響を及ぼすこともある。
そこで、全体の格子の一部のサブ格子を1つのジョブに専有させる提案がある。この提案では、ジョブ管理装置が、各ノードを1ビットに対応させたビット列を用意し、ビットの値を該当ノードに対するジョブの割り当て済/未割り当てに対応させることで、ノードへのジョブの割り当て状態を管理する。
並列処理装置では、ジョブを割り当てるノードの選択に伴う遅延が問題になる。当該遅延は、投入されたジョブが実行されるまでの待ち時間の増大や、並列計算機におけるノード全体の稼働率の低下の要因になる。
1つの側面では、本発明は、ジョブ実行時のノード選択の高速化を目的とする。
1つの態様では、複数のノードがメッシュ結合またはトーラス結合で接続された並列処理システムで、複数のノードへのジョブの割り当てに用いられるジョブ割り当てプログラムが提供される。ジョブ割り当てプログラムは、ジョブの実行開始時および実行終了時に、複数のノードの接続関係を表すn(nは2以上の整数)次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数の冪である領域ごとに、領域に対応するノード群の空きノード情報を生成し、各軸の指定サイズを含むジョブの実行要求を受け付けると、指定サイズに応じた空きノード情報を選択し、選択した空きノード情報に基づいて、要求されたジョブの割り当て先のノードを抽出する、処理をコンピュータに実行させる。
1つの側面では、ジョブ実行時のノード選択を高速化できる。
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の並列処理装置を示す図である。並列処理装置1は、制御ノード10および計算ノード群20を有する。制御ノード10は、並列処理装置1の所定のネットワークを介して計算ノード群20の各計算ノードと接続されている。制御ノード10は、ジョブの入力を受け付ける。制御ノード10は、計算ノード群20に属する複数の計算ノードのうち、当該ジョブを割り当てる計算ノードを選択する。制御ノード10は、選択された計算ノードに当該ジョブを実行させる。ジョブの実行に用いる計算ノードのサイズ(割り当てる計算ノードの数や形状)は、例えば、ジョブの受け付け時にユーザにより指定される。
[第1の実施の形態]
図1は、第1の実施の形態の並列処理装置を示す図である。並列処理装置1は、制御ノード10および計算ノード群20を有する。制御ノード10は、並列処理装置1の所定のネットワークを介して計算ノード群20の各計算ノードと接続されている。制御ノード10は、ジョブの入力を受け付ける。制御ノード10は、計算ノード群20に属する複数の計算ノードのうち、当該ジョブを割り当てる計算ノードを選択する。制御ノード10は、選択された計算ノードに当該ジョブを実行させる。ジョブの実行に用いる計算ノードのサイズ(割り当てる計算ノードの数や形状)は、例えば、ジョブの受け付け時にユーザにより指定される。
計算ノード群20は、計算ノード21,22,23,24,・・・を含む。計算ノード21,22,23,24,・・・は、それぞれがメモリおよびプロセッサを有する。計算ノード21,22,23,24,・・・は、制御ノード10により割り当てられたジョブを実行する。計算ノード21,22,23,24,・・・は、相互に接続されてネットワーク2を形成する。計算ノード21,22,23,24,・・・は、ネットワーク2を介して相互に通信することで、ジョブを並列に実行する。
ネットワーク2は、n(nは2以上の整数)次元の格子状のネットワークである。具体的には、ネットワーク2は、メッシュ結合またはトーラス結合と呼ばれる接続形態のネットワークである。図1におけるネットワーク2は、3次元(n=3)のメッシュ結合の接続形態を例示する。1つの格子点は1つの計算ノードに対応する。1つの格子点は空間における座標(0以上の整数の組)により表される。制御ノード10は、全体の格子の一部分であるサブ格子(格子点のサブセット)を、ジョブに割り当てる。1つのジョブはサブ格子に属する計算ノードを専有する。制御ノード10は、ある計算ノードに対してあるジョブを割り当て済のとき、他のジョブの割り当て先候補から当該計算ノードを除外する。
制御ノード10は、1つの計算ノードを1つのビットに対応付け、ビットの値により、該当の計算ノードの空き状況(ジョブが割り当てられているか否か)を管理する。例えば、ビット値“1”はジョブ割り当て不可能(ジョブを割り当て済、または、故障中など)を示す。また、ビット値“0”はジョブ割り当て可能(ジョブを未割り当てである)を示す。制御ノード10は、このような情報により表される計算ノードの空き状況に対して、ジョブを割り当てる計算ノードの選択を高速化する機能を提供する。
制御ノード10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合(マルチプロセッサ)も含み得る。
記憶部11は、計算ノード21,22,23,24,・・・の接続関係を表すn次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数Mの冪である領域ごとに、当該領域に対応する計算ノード群の空きノード情報を記憶する。当該「領域」は線状の領域を含む。また、当該「領域」を「範囲」と称してもよい。また、整数Mの冪(累乗、あるいは、べき乗(冪乗)ということもある)は、底をM、指数をk(k=0,1,2,・・・)として、Mkで表される各値である。各軸方向のサイズは、各軸方向の計算ノードの数を示す。kの上限は、並列処理装置1が有する各軸方向の計算ノードの数に応じて定められる。
処理部12は、ジョブの実行開始時および実行終了時に、空きノード情報4を生成し、生成した空きノード情報4を記憶部11に格納する。
ここで、空きノード情報4は、該当の計算ノードまたは計算ノード群に対してジョブを割り当て済か否かを示すビット列である。
ここで、空きノード情報4は、該当の計算ノードまたは計算ノード群に対してジョブを割り当て済か否かを示すビット列である。
例えば、ネットワーク2が3次元メッシュ(n=3)のとき、互いに直交するx軸,y軸,z軸を考えることができる。並列処理装置1において、3次元メッシュのx軸方向の計算ノード数をX個、y軸方向の計算ノード数をY個、z軸方向の計算ノード数をZ個とする。X,Y,Zは、何れも正の整数であり、X≧Y≧Zである。上記所定軸は、例えば、計算ノード数が最大の軸とする(下記に示すノード選択の演算を効率的に行うため)。この場合、上記所定軸はx軸である。また、x軸以外の他軸はy軸およびz軸である。なお、1つ目の計算ノードの座標を(0,0,0)とする(当該座標に対する3次元メッシュの対角の座標は(X−1,Y−1,Z−1)となる)。
ジョブの割り当てについて、x座標がx0以上x0+x未満、y座標がy0以上y0+y未満、z座標がz0以上z0+z未満の計算ノード群にジョブが割り当てられるとき、(x0,y0,z0)を基点と呼ぶ。ジョブの割り当て先の計算ノードを選ぶ段階では、(x0,y0,z0)を基点候補と呼べる。
ここで、一例として、M=2の場合を考える。2の冪は、20,21,22,23,・・・である。
処理部12は、ジョブの割り当てに備えて、ジョブの割り当ての際に使用する情報(空きノード情報)を事前に計算しておく。具体的には、処理部12は、基点候補の全座標に対し、x軸以外の全ての軸方向のサイズが2の冪(1,2,4,8,・・・)となる全ての領域を特定し、各x座標について、当該領域内の計算ノードが全て空きなら0、そうでなければ1であるビット列を生成する。
処理部12は、ジョブの割り当てに備えて、ジョブの割り当ての際に使用する情報(空きノード情報)を事前に計算しておく。具体的には、処理部12は、基点候補の全座標に対し、x軸以外の全ての軸方向のサイズが2の冪(1,2,4,8,・・・)となる全ての領域を特定し、各x座標について、当該領域内の計算ノードが全て空きなら0、そうでなければ1であるビット列を生成する。
一例として(y0,z0)=(0,0)であるX個の基点候補の座標を考える。処理部12は、このX個の基点候補の座標に対して、複数のビット列(空きノード情報)を生成する。すなわち、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=2p×2qとなる領域に対して、X個のビットを含むビット列を生成する。ここで、pは、2p≦Yを満たす0以上の全ての整数をとる。また、qは、2q≦Zを満たす0以上の全ての整数をとる。また、ビット列のうち、最上位のビットがx=0に、最下位のビットがx=X−1に対応するものとする(以下の説明でも同様とする)。y軸方向のサイズは、y軸方向の計算ノード数を示す。z軸方向のサイズは、z軸方向の計算ノード数を示す。
より具体的には、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=20×20=1となる領域に対して、X個のビットを含むビット列“000・・・0”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=20×21=2となる領域に対して、X個のビットを含むビット列“010・・・0”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=21×20=2となる領域に対して、X個のビットを含むビット列“110・・・1”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=21×20=2となる領域に対して、X個のビットを含むビット列“110・・・1”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=21×21=4となる領域に対して、X個のビットを含むビット列“110・・・1”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=22×22=16となる領域に対して、X個のビットを含むビット列“110・・・1”を生成する。
また、処理部12は、(y軸方向のサイズ)×(z軸方向のサイズ)=22×22=16となる領域に対して、X個のビットを含むビット列“110・・・1”を生成する。
処理部12は、他のp,qの組み合わせに対応する領域に対しても同様にして空きノード情報を生成する。
こうして、処理部12は、(y0,z0)=(i,j)(iは0以上Y未満の整数、jは0以上Z未満の整数)および(p,q)の各組み合わせに対して、空きノード情報4を生成し、生成した空きノード情報4を記憶部11に格納する。
こうして、処理部12は、(y0,z0)=(i,j)(iは0以上Y未満の整数、jは0以上Z未満の整数)および(p,q)の各組み合わせに対して、空きノード情報4を生成し、生成した空きノード情報4を記憶部11に格納する。
処理部12は、各軸の指定サイズを含むジョブ3の実行要求を受け付けると、記憶部11を参照して指定サイズに応じた空きノード情報を選択する。処理部12は、選択した空きノード情報に基づいて、要求されたジョブの割り当て先のノードを抽出する。
例えば、処理部12は、x軸,y軸,z軸に対する指定サイズx×y×zのジョブ3の実行要求を受け付けると、空きノード情報4から、y×zに応じたサイズに対応する空きノード情報を選択する。すなわち、処理部12は、2p≦yとなる最大のp、および、2q≦zとなる最大のqを計算し、計算した(p,q)の組み合わせに対応する空きノード情報を用いて、要求されたジョブの割り当て先のノードを抽出する。まず、処理部12は、該当の空きノード情報に基づいて、y×zのサイズ分だけ計算ノードが空いている箇所を抽出し、次に、当該座標からx軸方向に、xのサイズ分だけ連続して、y×zのサイズの計算ノードが空いている領域を抽出する。処理部12は、空きノード情報として取得したビット列を用いることで、当該抽出処理を高速に行える。そして、処理部12は、当該領域に対応する計算ノード群に、要求されたジョブを割り当てる。
このように、処理部12は、ジョブの実行開始時および実行終了時に、空きノード情報4を生成する。ジョブを割り当てるノードの選択時、処理部12は、空きノード情報4によりMの冪のサイズだけを判断すればよい。例えば、M=2、Y=100の場合、処理部12は、y軸については7通り(1,2,4,8,16,32,64)のサイズに対する空きノード情報を判断すればよい。こうして、所定の軸以外の各軸について、任意の直方体形状(あるいは超直方体形状)の領域に対する空きノード情報4を用意しておくことで、ジョブ実行時のノード選択を高速化することができる。
また、ジョブ実行時のノード選択を高速化することで、ジョブの実行待ちの時間を減らし、並列処理装置1における各計算ノードの稼働率を向上できる。
なお、処理部12は、ジョブの実行開始時や実行終了時に、空きノード情報4の全体を更新してもよいし、空きノード情報4のうち、使用状態が変化した計算ノードに対応する部分のみを更新してもよい。更新部分を限定することで、空きノード情報4の生成を一層高速化できる。また、処理部12は、計算ノードの使用状態が変化しない限り、空きノード情報4を使い回して、計算ノードに対するジョブの割り当てを行える。
なお、処理部12は、ジョブの実行開始時や実行終了時に、空きノード情報4の全体を更新してもよいし、空きノード情報4のうち、使用状態が変化した計算ノードに対応する部分のみを更新してもよい。更新部分を限定することで、空きノード情報4の生成を一層高速化できる。また、処理部12は、計算ノードの使用状態が変化しない限り、空きノード情報4を使い回して、計算ノードに対するジョブの割り当てを行える。
更に、上記の説明では、主に3次元メッシュネットワークを例示したが、ネットワーク2は、2次元または4次元以上のメッシュネットワークでもよいし、少なくとも1つの軸がトーラス軸である格子状ネットワークでもよい。
[第2の実施の形態]
図2は、第2の実施の形態の並列処理システムの例を示す図である。並列処理システム50は、制御ノード100および計算ノード200,200a,200b,200c,・・・を有する。制御ノード100および計算ノード200,200a,200b,200c,・・・は、並列処理システム50における管理用のネットワーク51に接続されている。また、計算ノード200,200a,200b,200c,・・・は、格子状のネットワークにより相互に接続されている。
図2は、第2の実施の形態の並列処理システムの例を示す図である。並列処理システム50は、制御ノード100および計算ノード200,200a,200b,200c,・・・を有する。制御ノード100および計算ノード200,200a,200b,200c,・・・は、並列処理システム50における管理用のネットワーク51に接続されている。また、計算ノード200,200a,200b,200c,・・・は、格子状のネットワークにより相互に接続されている。
制御ノード100は、ユーザによるジョブの入力を受け付け、計算ノード200,200a,200b,200c,・・・に対するジョブの割り当てを行う。また、制御ノード100は、割り当て先の計算ノードに対するジョブの実行を指示する。
計算ノード200,200a,200b,200c,・・・それぞれは、プロセッサおよびメモリを有し、制御ノード100により割り当てられたジョブを並列に実行する。
図3は、制御ノードのハードウェア例を示す図である。制御ノード100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。各ハードウェアは制御ノード100のバスに接続されている。
図3は、制御ノードのハードウェア例を示す図である。制御ノード100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。各ハードウェアは制御ノード100のバスに接続されている。
プロセッサ101は、制御ノード100の情報処理を制御するハードウェアである。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、制御ノード100の主記憶装置である。RAM102は、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、制御ノード100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、OSのプログラム、アプリケーションプログラム、および各種データを記憶する。制御ノード100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、制御ノード100に接続されたディスプレイ31に画像を出力する。ディスプレイ31として、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部105は、制御ノード100に接続された入力デバイス32から入力信号を取得し、プロセッサ101に出力する。入力デバイス32として、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
媒体リーダ106は、記録媒体33に記録されたプログラムやデータを読み取る装置である。記録媒体33として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体33として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ106は、例えば、プロセッサ101からの命令に従って、記録媒体33から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、ネットワーク51に接続され、各計算ノードとの通信に用いられるインタフェースである。
図4は、計算ノードのハードウェア例を示す図である。計算ノード200は、プロセッサ201、RAM202および通信インタフェース203,204を有する。各ハードウェアは計算ノード200のバスに接続されている。計算ノード200a,200b,・・・も計算ノード200と同様のハードウェアを用いて実現できる。
図4は、計算ノードのハードウェア例を示す図である。計算ノード200は、プロセッサ201、RAM202および通信インタフェース203,204を有する。各ハードウェアは計算ノード200のバスに接続されている。計算ノード200a,200b,・・・も計算ノード200と同様のハードウェアを用いて実現できる。
プロセッサ201は、計算ノード200の情報処理を制御するハードウェアである。プロセッサ201は、マルチプロセッサであってもよい。プロセッサ201は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ201は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM202は、計算ノード200の主記憶装置である。RAM202は、プロセッサ201に実行させるプログラムの少なくとも一部を一時的に記憶する。RAM202は、プロセッサ201による処理に用いられる各種データを記憶する。
通信インタフェース203は、計算ノード200a,200b,・・・それぞれと接続され、他の計算ノードとの通信に用いられるインタフェースである。
通信インタフェース204は、ネットワーク51に接続され、制御ノード100との通信に用いられるインタフェースである。
通信インタフェース204は、ネットワーク51に接続され、制御ノード100との通信に用いられるインタフェースである。
図5は、3次元メッシュネットワークで接続された計算ノードの例を示す図である。図5の例では、x軸、y軸およびz軸の各軸方向の計算ノード数(サイズ)は4である。1つの格子点が1つの計算ノードに相当する。3次元メッシュネットワークに対して、ジョブ形状は、直方体で表される。
図6は、トーラスネットワークで接続された計算ノードの例を示す図である。図6(A)は、2次元トーラスネットワークで接続された計算ノードの例を示している。図6(B)は、3次元トーラスネットワークで接続された計算ノードの例を示している。図6(A)の例では、x軸およびy軸の2軸がトーラス軸である。また、図6(B)の例では、x軸、y軸およびz軸の3軸がトーラス軸である。ただし、空間を表す全ての軸のうちの一部の軸のみがトーラス軸であってもよい。
ここで、並列処理システム50では、1つのジョブが格子全体に対する部分格子を専有する。このため、あるジョブを割り当て済である部分格子は、他のジョブの割り当て候補から除外される。
以下の説明では、主に、3次元の格子状ネットワーク(3次元メッシュネットワークや3次元トーラスネットワーク)を想定して、制御ノード100の機能を説明する。ただし、3次元に限らず、他の次元でも制御ノード100の機能を適用できる。
図7は、制御ノードの機能例を示す図である。制御ノード100は、記憶部110、受付部120、出力部130、実行ノード選択部140、ノード情報管理部150および空きノード情報生成部160を有する。記憶部110は、RAM102やHDD103の記憶領域を用いて実現される。受付部120、出力部130、実行ノード選択部140、ノード情報管理部150および空きノード情報生成部160は、RAM102に記憶されたプログラムをプロセッサ101が実行することで実現される。
記憶部110は、計算ノードの空き状況を示すテーブルを記憶する。1つのテーブルは、1つのビット列に相当する。テーブルの具体的な内容は後述される。
受付部120は、ユーザによるジョブの実行要求を受け付ける。ジョブの実行要求は、ジョブの実行に要求される計算ノードの数およびジョブ形状(指定サイズ)の情報を含む。ジョブ形状は、3次元の場合、直方体となる(例えば、2次元では長方形である)。
受付部120は、ユーザによるジョブの実行要求を受け付ける。ジョブの実行要求は、ジョブの実行に要求される計算ノードの数およびジョブ形状(指定サイズ)の情報を含む。ジョブ形状は、3次元の場合、直方体となる(例えば、2次元では長方形である)。
出力部130は、ジョブの割り当て結果や、ジョブの実行結果を、ディスプレイ31に表示させる。
実行ノード選択部140は、記憶部110に記憶されたテーブルに基づいて、ジョブを実行する計算ノード(実行ノード)を選択する(計算ノードに対するジョブの割り当てを行う)。実行ノード選択部140は、ノード情報管理部150を介して、割り当て先の計算ノードに、ジョブの実行を指示する。また、実行ノード選択部140は、計算ノードに対するジョブの割り当て結果やジョブの実行結果を出力部130に提供する。
実行ノード選択部140は、記憶部110に記憶されたテーブルに基づいて、ジョブを実行する計算ノード(実行ノード)を選択する(計算ノードに対するジョブの割り当てを行う)。実行ノード選択部140は、ノード情報管理部150を介して、割り当て先の計算ノードに、ジョブの実行を指示する。また、実行ノード選択部140は、計算ノードに対するジョブの割り当て結果やジョブの実行結果を出力部130に提供する。
ここで、x座標がx0以上x0+x未満、y座標がy0以上y0+y未満、z座標がz0以上z0+z未満の計算ノード群にジョブが割り当てられるとき、(x0,y0,z0)を基点と呼ぶ。ジョブの割り当て先の計算ノードを決定する段階では、(x0,y0,z0)を基点候補と呼べる。ただし、以下の説明では、基点候補についても基点と呼ぶことがある。
ノード情報管理部150は、計算ノード200,200a,・・・それぞれの使用状態を管理する。具体的には、ノード情報管理部150は、ジョブの実行に用いられていない未使用の計算ノード、ジョブの実行に使用中の計算ノード、および、未使用ではあるがジョブを割り当てられない故障中の計算ノードを示す割り当て情報を生成し、記憶部110に格納する。割り当て情報は、1つの計算ノードを1つのビットに対応付けたビットマップである。一例として、当該ビットマップでは、0は未使用(ジョブ割り当て可能)を示す。また、1は使用中または故障中(ジョブ割り当て不可能)を示す。ノード情報管理部150は、ジョブが計算ノードに割り当てられたタイミング(ジョブの実行が開始されたタイミング)やジョブが終了したタイミングを、空きノード情報生成部160に通知する。
空きノード情報生成部160は、記憶部110に記憶されたビットマップに基づいて、空きノード情報(上記のテーブル)を生成し、記憶部110に格納する。空きノード情報生成部160は、ジョブが計算ノードに割り当てられたタイミング、および、ジョブが終了したタイミング(すなわち、計算ノードの使用状態が変化したタイミング)で、テーブルの生成を行う。
図8は、計算ノードの空き状況を表すテーブルの例を示す図である。ここで、並列処理システム50が有するx軸方向の計算ノードの数をX、y軸方向の計算ノードの数をY、z軸方向の計算ノードの数をZとする(前述のように、X≧Y≧Zである)。テーブルは、ビット列の情報であり、ビット列の各ビットはx座標に相当する。例えば、各軸方向のうち、計算ノードの数が最大となる軸をx軸とする。
1つのテーブルは、(p,q,y0,z0)の組によって識別される。図8(A)は、table[p][q][y0][z0]に対応する領域の例を示す。pは、2p≦Yを満たす0以上の整数である。また、qは、2q≦Zを満たす0以上の整数である。図8(A)の例では、3次元の格子状ネットワークを表す直方体が、原点(0,0,0)を含む各軸が正である空間に配置されている。この場合、座標(0,y0,z0)は、table[p][q][y0][z0]に対応する領域に属する全計算ノードにジョブを割り当てたと仮定した場合の基点の座標である。table[p][q][y0][z0]に対応する領域の頂点の一例を示せば、同基点の対角に位置する座標は、(X−1,y0+2p−1,z0+2q−1)となる。同基点のyz平面状の対角に位置する座標は、(0,y0+2p−1,z0+2q−1)となる。同基点からx軸の正方向に進んだ時の終端の座標は、(X−1,y0,z0)となる。
図8(B)は、table[p][q][y0][z0]のビット列に含まれる各ビットの概念を示す。図8(B)は、X=12の場合の例である。例えば、table[p][q][y0][z0]=010010000000である。各x座標について1ビットが対応している。この場合、最上位の桁のビットは、x=0に対応する。最下位の桁のビットは、x=X−1に対応する。ある1つのx座標について、y座標がy0以上y0+2p未満、かつ、z座標がz0以上z0+2q未満である全ての座標に対応する全ての計算ノードがジョブ割り当て可能であれば、当該x座標に対応するビットは0である。そうでなければ(該当の各計算ノードのうちの1つでもジョブ割り当て不可能であれば)、当該x座標に対応するビットは1である。なお、各テーブルに対応する領域のy軸方向のサイズおよびz軸方向のサイズは、2の冪に限らず、3以上の何れかの整数の冪でもよい。
このように、空きノード情報は、所定軸(例えば、x軸)の座標値に対応するビットを複数含むビット列(テーブル)で表される。空きノード情報生成部160は、当該ビット列に対応する領域のうち所定軸の第1の座標値に対応する部分に属する全計算ノードにジョブを割り当て可能な場合に、第1の座標値に対応する第1のビットを、ジョブ割り当て可能を示す第1の値(例えば0)に設定する。また、空きノード情報生成部160は、当該部分に属する少なくとも1つの計算ノードにジョブを割り当て不可能な場合に、第1のビットを、ジョブ割り当て不可能を示す第2の値(例えば1)に設定する。
そして、実行ノード選択部140は、ジョブの割り当て先のノードを抽出する際、空きノード情報に相当するビット列のうち、所定軸方向の指定サイズの数分、第1の値が連続するビット列部分があるか否かを判定する。実行ノード選択部140は、当該ビット列部分がある場合、該当のビット列に相当する領域に対応する計算ノード群のうち、当該ビット列部分の座標値(座標値範囲)に対応する計算ノードを、ジョブの割り当て先のノードと決定する。
次に、制御ノード100による処理の手順を説明する。まず、空きノード情報生成部160による処理の手順を説明する。
図9は、空きノード情報生成の例を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。空きノード情報生成部160は、ジョブが計算ノードに割り当てられたことやジョブの実行が終了したことの通知をノード情報管理部150から受け付けると、下記の手順を開始する。
図9は、空きノード情報生成の例を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。空きノード情報生成部160は、ジョブが計算ノードに割り当てられたことやジョブの実行が終了したことの通知をノード情報管理部150から受け付けると、下記の手順を開始する。
(S1)空きノード情報生成部160は、pに0を代入する。
(S2)空きノード情報生成部160は、qに0を代入する
(S3)空きノード情報生成部160は、p=0であるか否かを判定する。p=0である場合、処理をステップS4に進める。p=0でない場合、処理をステップS11に進める。
(S2)空きノード情報生成部160は、qに0を代入する
(S3)空きノード情報生成部160は、p=0であるか否かを判定する。p=0である場合、処理をステップS4に進める。p=0でない場合、処理をステップS11に進める。
(S4)空きノード情報生成部160は、q=0であるか否かを判定する。q=0である場合、処理をステップS5に進める。q=0でない場合、処理をステップS8に進める。
(S5)空きノード情報生成部160は、全ての整数y0,z0(0≦y0<Y、0≦z0<Z)について、y座標と座標が(y0,z0)のノード群の割り当て情報を、記憶部110に格納されたtable[0][0][y0][z0]に格納する。
(S6)空きノード情報生成部160は、q+1をqに代入する。
(S7)空きノード情報生成部160は、2q≦Zであるか否かを判定する。2q≦Zである場合、処理をステップS3に進める。2q≦Zでない場合、処理をステップS9に進める。
(S7)空きノード情報生成部160は、2q≦Zであるか否かを判定する。2q≦Zである場合、処理をステップS3に進める。2q≦Zでない場合、処理をステップS9に進める。
(S8)空きノード情報生成部160は、全ての整数y0,z0(0≦y0<Y、0≦z0<Z)について、table[0][q][y0][z0]にtable[0][q−1][y0][z0]とtable[0][q−1][y0][(z0+2q-1)%Z]のOR(OR演算の結果)を代入する。ここで、%記号は、剰余演算を表す。そして、処理をステップS6に進める。
(S9)空きノード情報生成部160は、p+1をpに代入する。
(S10)空きノード情報生成部160は、2p≦Yであるか否かを判定する。2p≦Yである場合、処理をステップS2に進める。2p≦Yでない場合、処理を終了する。
(S10)空きノード情報生成部160は、2p≦Yであるか否かを判定する。2p≦Yである場合、処理をステップS2に進める。2p≦Yでない場合、処理を終了する。
(S11)空きノード情報生成部160は、全ての整数y0,z0(0≦y0<Y、0≦z0<Z)について、table[p][q][y0][z0]にtable[p−1][q][y0][z0]とtable[p−1][q][(y0+2p-1)%Y][z0]のORを代入する。そして、処理をステップS6に進める。
こうして、空きノード情報生成部160は、計算ノードの使用状態の変化を契機として、(p,q,y0,z0)の全ての組み合わせに対し、table[p][q][y0][z0]を予め生成する。空きノード情報生成部160は、既存のテーブルを新たに生成されたテーブルに置き換える。なお、空きノード情報生成部160は、各テーブルのうち、使用状態が変化した計算ノードに関係するテーブルに限定して、生成し直してもよい。
次に、実行ノード選択部140による処理の手順を説明する。
図10は、ジョブ割り当ての例を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。実行ノード選択部140は、ジョブの実行要求を受け付けると、下記の手順を開始する。
図10は、ジョブ割り当ての例を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。実行ノード選択部140は、ジョブの実行要求を受け付けると、下記の手順を開始する。
(S21)実行ノード選択部140は、要求されたジョブの各軸方向のサイズ(x,y,z)を取得する。
(S22)実行ノード選択部140は、2p≦yとなる最大の自然数をpに代入する。また、実行ノード選択部140は、2q≦zとなる最大の自然数をqに代入する。
(S22)実行ノード選択部140は、2p≦yとなる最大の自然数をpに代入する。また、実行ノード選択部140は、2q≦zとなる最大の自然数をqに代入する。
(S23)実行ノード選択部140は、y0に0を代入する。
(S24)実行ノード選択部140は、z0に0を代入する。
(S25)実行ノード選択部140は、ビット列E(y0,(z0+z−2q)%Z,y,2q)を求める。E(y0,(z0+z−2q)%Z,y,2q)は、table[p][q][y0][(z0+z−2q)%Z]とtable[p][q][(y0+y−2p)%Y][(z0+z−2q)%Z]のOR(OR演算の結果)である。ここで、(a,b)を起点とした各軸長さ(c,d)の空き状況をビット列E(a,b,c,d)と表している。
(S24)実行ノード選択部140は、z0に0を代入する。
(S25)実行ノード選択部140は、ビット列E(y0,(z0+z−2q)%Z,y,2q)を求める。E(y0,(z0+z−2q)%Z,y,2q)は、table[p][q][y0][(z0+z−2q)%Z]とtable[p][q][(y0+y−2p)%Y][(z0+z−2q)%Z]のOR(OR演算の結果)である。ここで、(a,b)を起点とした各軸長さ(c,d)の空き状況をビット列E(a,b,c,d)と表している。
(S26)実行ノード選択部140は、E(y0,(z0+z−2q)%Z,y,2q)にxビット連続する0があるか否かを判定する。xビット連続する0がある場合、処理をステップS27に進める。xビット連続する0がない場合、処理をステップS30に進める。
(S27)実行ノード選択部140は、ビット列E(y0,z0,y,z)を求める。E(y0,z0,y,z)は、E(y0,(z0+z−2q)%Z,y,2q)とtable[p][q][y0][z0]とtable[p][q][(y0+y−2p)%Y][z0]の三者のORである。
(S28)実行ノード選択部140は、E(y0,z0,y,z)にxビット連続する0があるか否かを判定する。xビット連続する0がある場合、処理をステップS29に進める。xビット連続する0がない場合、処理をステップS31に進める。
(S29)実行ノード選択部140は、ジョブの割り当て結果を出力部130に出力する。このとき、基点のx座標は、ステップS28で判定されたxビット連続する0の開始点の座標である。また、基点のy,z座標は、(y0,z0)である。実行ノード選択部140は、ジョブの割り当て先の計算ノードに対して、ジョブの実行を指示してもよい。そして、実行ノード選択部140は、処理を終了する。
(S30)実行ノード選択部140は、z0+z−2qをz0に代入する。
(S31)実行ノード選択部140は、z0+1をz0に代入する。
(S32)実行ノード選択部140は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(S31)実行ノード選択部140は、z0+1をz0に代入する。
(S32)実行ノード選択部140は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)z軸がトーラス軸である場合、実行ノード選択部140は、z0<Zであるか否かを判定する。z0<Zである場合、処理をステップS25に進める。z0<Zでない場合、処理をステップS33に進める。
(2)z軸がトーラス軸でない場合、実行ノード選択部140は、z0<Z−z+1であるか否かを判定する。z0<Z−z+1である場合、処理をステップS25に進める。z0<Z−z+1でない場合、処理をステップS33に進める。
(S33)実行ノード選択部140は、y0+1をy0に代入する。
(S34)実行ノード選択部140は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(S34)実行ノード選択部140は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)y軸がトーラス軸である場合、実行ノード選択部140は、y0<Yであるか否かを判定する。y0<Yである場合、処理をステップS24に進める。y0<Yでない場合、処理をステップS35に進める。
(2)y軸がトーラス軸でない場合、実行ノード選択部140は、y0<Y−y+1であるか否かを判定する。y0<Y−y+1である場合、処理をステップS24に進める。y0<Y−y+1でない場合、処理をステップS35に進める。
(S35)実行ノード選択部140は、ジョブの割り当て不可を出力部130に出力する。
図11は、空きノードの探索例を示す図である。図11(A)では、(y0,z0)=(1,1)を基点として、y方向の長さ6、z方向の長さ7の直方体内での割り当て可否を判定する例を示している。この場合、2p≦6となる最大のpは、2である。また、2q≦7となる最大のqは、2である。したがって、実行ノード選択部140は、(p,q)=(2,2)である次のテーブル(22×22=4×4領域のテーブル)を用いて、該当領域に対応する計算ノードの空き状況を判断する。
図11は、空きノードの探索例を示す図である。図11(A)では、(y0,z0)=(1,1)を基点として、y方向の長さ6、z方向の長さ7の直方体内での割り当て可否を判定する例を示している。この場合、2p≦6となる最大のpは、2である。また、2q≦7となる最大のqは、2である。したがって、実行ノード選択部140は、(p,q)=(2,2)である次のテーブル(22×22=4×4領域のテーブル)を用いて、該当領域に対応する計算ノードの空き状況を判断する。
第1のテーブルは、table[2][2][1][1]である。第2のテーブルは、table[2][2][3][1]である。第3のテーブルは、table[2][2][1][4]である。第4のテーブルは、table[2][2][3][4]である。これら4つのテーブルのOR演算結果は、(y0,z0)=(1,1)を基点とした6×7領域の空きノード情報(ビット列)E(1,1,6,7)に相当する。
このように、実行ノード選択部140は、指定サイズに合致した領域に対応する空きノード情報がない場合、y,z軸方向のサイズがy,z軸方向の指定サイズよりも小さい領域に対応する第1の空きノード情報を複数選択する。そして、実行ノード選択部140は、複数の第1の空きノード情報を組み合わせることで、y,z軸方向のサイズが指定サイズである領域に対応する第2の空きノード情報を生成し、第2の空きノード情報に基づいて、ジョブの割り当て先の計算ノードを抽出する。
図11(B)は、図10のステップS26の判定により、探索の省略が可能となる理由を説明する図である。上記の4つのテーブルのうち、table[2][2][1][4]とtable[2][2][3][4]のOR演算結果が割り当て不可を示せば、当該OR演算結果に対応する領域を包含する領域へのジョブ割り当ては不可である。したがって、この時点で、E(1,1,6,7)を計算しなくても、E(1,1,6,7)に対応する領域へのジョブの割り当ては不可であることが分かる。このとき、実行ノード選択部140は、(y0,z0)=(1,4)に対して、z方向の1つ先の基点(y0,z0)=(1,5)から、空きの計算ノード群の探索を始めればよい(探索方向はz軸方向となる)。
このように、実行ノード選択部140は、割り当て先の計算ノードを抽出する際、複数の第1の空きノード情報のうちの一部の第1の空きノード情報を用いて、第2の空きノード情報に対応する領域にジョブを割り当て可能であるか否かを判定する。そして、割り当て可能でない場合、実行ノード選択部140は、第2の空きノード情報の生成を省略し、次の領域について計算ノード群の空き状況を確認する。こうして、判定における一部の試行を省略することで、計算ノードの選択を一層高速化できる。
なお、ステップS26,S28では、実行ノード選択部140は、ビット列にxビット連続する0があるか否かを次の手順によって高速に行える。
図12は、ビット列判定の例を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。以下に示す手順は、図10のステップS26またはステップS28に相当する。
図12は、ビット列判定の例を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。以下に示す手順は、図10のステップS26またはステップS28に相当する。
(S41)実行ノード選択部140は、2X<(x+1)log2xであるか否かを判定する。2X<(x+1)log2xである場合、処理をステップS50に進める。2X<(x+1)log2xでない場合、処理をステップS42に進める。
(S42)実行ノード選択部140は、入力ビット列をtに代入する。ここで、入力ビット列は、ステップS26の場合、ビット列E(y0,(z0+z−2q)%Z,y,2q)である。入力ビット列は、ステップS28の場合、ビット列E(y0,z0,y,z)である。また、実行ノード選択部140は、sに1を代入する。
(S43)実行ノード選択部140は、s+s<xであるか否かを判定する。s+s<xである場合、処理をステップS44に進める。s+s<xでない場合、処理をステップS46に進める。
(S44)実行ノード選択部140は、tORtL1の演算結果をtに代入する。ここで、tL1は、tをsビット左ローテートしたビット列である。
(S45)実行ノード選択部140は、s+sをsに代入する。そして、実行ノード選択部140は、処理をステップS43に進める。
(S45)実行ノード選択部140は、s+sをsに代入する。そして、実行ノード選択部140は、処理をステップS43に進める。
(S46)実行ノード選択部140は、tORtL2の演算結果をtに代入する。ここで、tL2は、tをx−sビット左ローテートしたビット列である。
(S47)実行ノード選択部140は、x軸がトーラス軸であるか否かに応じて次の判定を行う。
(S47)実行ノード選択部140は、x軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)x軸がトーラス軸である場合、実行ノード選択部140は、tの全ビットの中に0があるか否かを判定する。0がある場合、処理をステップS48に進める。0がない場合、処理をステップS49に進める。
(2)x軸がトーラス軸でない場合、実行ノード選択部140は、tの右(最下位ビット)からx−1ビットを除いたビットの中に0があるか否かを判定する。当該ビットに0がある場合、処理をステップS48に進める。当該ビットに0がない場合、処理をステップS49に進める。
(S48)実行ノード選択部140は、判定結果として、Yesを返す。実行ノード選択部140は、0が見つかったビット位置を割り当て先のx座標(割り当てx座標)の基点とする。そして、処理を終了する。
(S49)実行ノード選択部140は、判定結果として、Noを返す。そして、処理を終了する。
(S50)実行ノード選択部140は、検索用マスクを初期化する。検索用マスクとは、Xビットのビット列からxビットの連続する0を検索するための検索情報である。検索用マスクは、初期化された直後では、最上位ビット以下のxビット分を1、それ以外のビットを0としたビット列である。
(S50)実行ノード選択部140は、検索用マスクを初期化する。検索用マスクとは、Xビットのビット列からxビットの連続する0を検索するための検索情報である。検索用マスクは、初期化された直後では、最上位ビット以下のxビット分を1、それ以外のビットを0としたビット列である。
(S51)実行ノード選択部140は、入力ビット列と、検索用マスクとのAND結果が全ビット0であるか否かを判定する。全ビット0である場合、処理をステップS53に進める。全ビット0でない場合、処理をステップS52に進める。
(S52)実行ノード選択部140は、検索用マスクをシフト(右シフト)可能であるか否かを判定する。シフト可能である場合、実行ノード選択部140は、検索用マスクをまとめて右シフトして、処理をステップS51に進める。右シフトする量は、ステップS51のAND結果を最下位ビットからみて最初に1が出現する桁から、検索用マスクの連続する1の最上位の桁までカウントした数である。シフト可能でない場合、処理をステップS49に進める。ここで、x軸がトーラス軸のとき、検索用マスクの連続する1のうちの最も左の1が、検索用マスクの一番右の桁(最下位ビット)からあふれる場合にシフト不可であり、そうでない場合にシフト可能である。また、x軸がトーラス軸でないとき、検索用マスクの連続する1のうちの一番右の1が、検索用マスクの一番右の桁からあふれる場合にシフト不可であり、そうでない場合にシフト可能である。
(S53)実行ノード選択部140は、判定結果として、Yesを返す。実行ノード選択部140は、検索用マスクの1が連続して並ぶ位置を、割り当てx座標とする。そして、処理を終了する。
ここで、ステップS41の判定について、2X<(x+1)log2xである場合、ステップS42以降を実行するより、ステップS50以降を実行した方がステップ数が少なくて済む。一方、2X<(x+1)log2xでない場合、ステップS50以降を実行するより、ステップS42以降を実行した方がステップ数が少なくて済む。なぜなら、ステップS50へ進む場合、演算のステップ数は、高々、2X/(x+1)程度であり、ステップS42へ進む場合、演算のステップ数は、高々、log2x程度だからである。こうして、演算のステップ数の少ない手順を選択するために、実行ノード選択部140は、ステップS41の判定を行う。
次に、ステップS41でNoの場合(ステップS42へ進む場合)の処理の具体例を説明する。
図13は、ビット列判定の具体例を示す図である。ここでの例は、[log2x]回のOR演算でxビットの連続する0の有無と、その開始位置を求める具体例である。特に、x=5、X=12の場合を例示する。図13では、入力ビット列60の各ビットを、akと表す。kは、入力ビット列60における桁に対応する0以上の整数である。k=0が入力ビット列60の最上位桁である。k=1,2,3,・・・と順番に入力ビット列60における桁が下がる。k=11が入力ビット列60の最下位桁である。また、ak-lは、akからalまでの全てのビットをORした結果を示す。このとき、ビット列の両端は回り込んで考える。例えば、a0-3は、a0,a1,a2,a3のORである。a9-1は、a9,a10,a11,a0,a1のORである。
図13は、ビット列判定の具体例を示す図である。ここでの例は、[log2x]回のOR演算でxビットの連続する0の有無と、その開始位置を求める具体例である。特に、x=5、X=12の場合を例示する。図13では、入力ビット列60の各ビットを、akと表す。kは、入力ビット列60における桁に対応する0以上の整数である。k=0が入力ビット列60の最上位桁である。k=1,2,3,・・・と順番に入力ビット列60における桁が下がる。k=11が入力ビット列60の最下位桁である。また、ak-lは、akからalまでの全てのビットをORした結果を示す。このとき、ビット列の両端は回り込んで考える。例えば、a0-3は、a0,a1,a2,a3のORである。a9-1は、a9,a10,a11,a0,a1のORである。
最初にステップS44を実行する直前の段階では、tは入力ビット列60であり、s=1である。このとき、tL1はビット列61である。s=1なので、ビット列61は、入力ビット列60を1ビット左ローテートした結果である。実行ノード選択部140は、入力ビット列60とビット列61のOR演算の結果であるビット列62をtに代入する(ステップS44)。
実行ノード選択部140は、s+s=1+1=2を、sに代入する(ステップS45)。s+s=2+2=4<5なので(ステップS43 Yes)、実行ノード選択部140は、再びステップS44を実行する。この段階では、tL1は、ビット列63である。s=2なので、ビット列63は、ビット列62を2ビット左ローテートした結果である。実行ノード選択部140は、ビット列62とビット列63のOR演算の結果であるビット列63をtに代入する(ステップS44)。
実行ノード選択部140は、s+s=2+2=4を、sに代入する(ステップS45)。s+s=4+4=8>5なので(ステップS43 No)、実行ノード選択部140は、ステップS46に進む。この段階では、tL2はビット列65である。x−s=5−4=1なので、ビット列65は、ビット列64を1ビット左ローテートした結果である。実行ノード選択部140は、ビット列64とビット列65のOR演算の結果であるビット列66をtに代入する(ステップS46)。こうして得られたビット列66のうち、0であるビットが存在すれば、入力ビット列60において5ビット連続する0が存在することになる。また、0である桁に対応するx座標を基点として選択できることになる。
なお、ビット列66のうち、a8-0,a9-1,a10-2,a11-3のビットはx軸がトーラス軸の場合に有効であり、x軸がトーラス軸でない場合には無効である。すなわち、x軸がトーラス軸である場合には、a8-0,a9-1,a10-2,a11-3のビットに対応する座標は、基点の候補になり得る。一方、x軸がトーラス軸でない場合には、a8-0,a9-1,a10-2,a11-3のビットに対応する座標は、基点の候補とはなり得ない。
図14は、計算ノード数に対する所要ステップ数の例を示す図である。図14では、X,Y,Zおよび全体の計算ノード数N(=XYZ)に対して、前処理および割り当て可否判定の所要ステップ数と、両者の合計値とを示している。ここで、前処理の所要ステップ数は、図9のステップS5,S8,S11を実行する回数に相当する。また、割り当て可否判定の所要ステップ数は、図12のステップS44,S46,S51を実行する回数に相当する。所要ステップ数は、以下に説明されるジョブ割り当ての比較例による所要ステップ数と比較される。
次に、制御ノード100とは異なる方法でジョブ割り当てを行う場合を例示し、制御ノード100のジョブ割り当て方法と比較する。比較例の説明では、制御ノード100に代えて、制御ノード500を用いる。
図15は、制御ノードの機能の比較例を示す図である。制御ノード500は、記憶部510、受付部520、出力部530、実行ノード選択部540およびノード情報管理部550を有する。
受付部520は、受付部120と同様の機能を実現する。出力部530は、出力部130と同様の機能を実現する。ノード情報管理部550は、ノード情報管理部150と同様の機能を実現する。
ただし、制御ノード500は、空きノード情報生成部160に相当する機能を有していない。また、実行ノード選択部540は、実行ノード選択部140とは異なる方法により、ジョブ割り当てを行う。1つ目の比較例では、実行ノード選択部540は、1つのビットを1つの計算ノードの空き状況に対応付けたビットマップ(前述の割り当て情報)を参照して、ジョブ割り当てを行う。当該割り当て情報は、ノード情報管理部550により生成され、記憶部510に格納されている。1つ目の比較例の具体的な手順は、次の通りである。
図16は、ジョブ割り当ての比較例(その1)を示すフローチャートである。以下、図16に示す処理をステップ番号に沿って説明する。
(S101)実行ノード選択部540は、ジョブの各軸方向のサイズ(x,y,z)を取得する。
(S101)実行ノード選択部540は、ジョブの各軸方向のサイズ(x,y,z)を取得する。
(S102)実行ノード選択部540は、割り当て先の基点となる座標(x0,y0,z0)を(0,0,0)に初期化する。
(S103)実行ノード選択部540は、基点座標から割り当て可能であるか否かを判定する。割り当て可能である場合、処理をステップS104に進める。割り当て不可である場合、処理をステップS105に進める。ここで、ステップS103の判定方法の詳細は後述される。
(S103)実行ノード選択部540は、基点座標から割り当て可能であるか否かを判定する。割り当て可能である場合、処理をステップS104に進める。割り当て不可である場合、処理をステップS105に進める。ここで、ステップS103の判定方法の詳細は後述される。
(S104)実行ノード選択部540は、割り当て結果を出力部530に出力する。そして、処理を終了する。
(S105)実行ノード選択部540は、基点座標を更新可能であるか否かを判定する。更新可能である場合、実行ノード選択部540は、基点座標を更新して、処理をステップS103に進める。更新可能でない場合、処理をステップS106に進める。ここで、ステップS105の判定方法の詳細は後述される。
(S105)実行ノード選択部540は、基点座標を更新可能であるか否かを判定する。更新可能である場合、実行ノード選択部540は、基点座標を更新して、処理をステップS103に進める。更新可能でない場合、処理をステップS106に進める。ここで、ステップS105の判定方法の詳細は後述される。
(S106)実行ノード選択部540は、割り当て不可を出力部530に出力する。そして、処理を終了する。
図17は、比較例(その1)の割り当て判定を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。以下に示す手順は、図16のステップS103の判定処理に相当する。
図17は、比較例(その1)の割り当て判定を示すフローチャートである。以下、図17に示す処理をステップ番号に沿って説明する。以下に示す手順は、図16のステップS103の判定処理に相当する。
(S111)実行ノード選択部540は、kに0を代入する。
(S112)実行ノード選択部540は、jに0を代入する。
(S113)実行ノード選択部540は、iに0を代入する。
(S112)実行ノード選択部540は、jに0を代入する。
(S113)実行ノード選択部540は、iに0を代入する。
(S114)実行ノード選択部540は、(x0+i,y0+j,z0+k)の座標に対応する計算ノードを使用可能であるか否かを判定する。使用可能である場合、処理をステップS116に進める。使用可能でない場合、処理をステップS115に進める。
(S115)実行ノード選択部540は、判定結果として、Noを返す。そして、処理を終了する。
(S116)実行ノード選択部540は、i+1をiに代入する。
(S116)実行ノード選択部540は、i+1をiに代入する。
(S117)実行ノード選択部540は、i<xであるか否かを判定する。i<xである場合、処理をステップS114に進める。i<xでない場合、処理をステップS118に進める。
(S118)実行ノード選択部540は、j+1をjに代入する。
(S119)実行ノード選択部540は、j<yであるか否かを判定する。j<yである場合、処理をステップS113に進める。j<yでない場合、処理をステップS120に進める。
(S119)実行ノード選択部540は、j<yであるか否かを判定する。j<yである場合、処理をステップS113に進める。j<yでない場合、処理をステップS120に進める。
(S120)実行ノード選択部540は、k+1をkに代入する。
(S121)実行ノード選択部540は、k<zであるか否かを判定する。k<zである場合、処理をステップS112に進める。k<zでない場合、処理をステップS122に進める。
(S121)実行ノード選択部540は、k<zであるか否かを判定する。k<zである場合、処理をステップS112に進める。k<zでない場合、処理をステップS122に進める。
(S122)実行ノード選択部540は、判定結果として、Yesを返す。そして、処理を終了する。
なお、ステップS114では、トーラス軸を考慮する場合、((x0+i)%X,(y0+j)%Y,(z0+k)%Z)に対応する計算ノードが使用可であるか否かを判定することが考えられる。
なお、ステップS114では、トーラス軸を考慮する場合、((x0+i)%X,(y0+j)%Y,(z0+k)%Z)に対応する計算ノードが使用可であるか否かを判定することが考えられる。
図18は、比較例(その1)の基点座標更新判定を示すフローチャートである。以下、図18に示す処理をステップ番号に沿って説明する。以下に示す手順は、図16のステップS105に相当する。
(S131)実行ノード選択部540は、x0+1をx0に代入する。
(S132)実行ノード選択部540は、x軸がトーラス軸であるか否かに応じて次の判定を行う。
(S132)実行ノード選択部540は、x軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)x軸がトーラス軸である場合、実行ノード選択部540は、x0<Xであるか否かを判定する。x0<Xである場合、処理をステップS138に進める。x0<Xでない場合、処理をステップS133に進める。
(2)x軸がトーラス軸でない場合、実行ノード選択部540は、x0<X−x+1であるか否かを判定する。x0<X−x+1である場合、処理をステップS138に進める。x0<X−x+1でない場合、処理をステップS133に進める。
(S133)実行ノード選択部540は、y0+1をy0に代入する。実行ノード選択部540は、x0に0を代入する。
(S134)実行ノード選択部540は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(S134)実行ノード選択部540は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)y軸がトーラス軸である場合、実行ノード選択部540は、y0<Yであるか否かを判定する。y0<Yである場合、処理をステップS138に進める。y0<Yでない場合、処理をステップS135に進める。
(2)y軸がトーラス軸でない場合、実行ノード選択部540は、y0<Y−y+1であるか否かを判定する。y0<Y−y+1である場合、処理をステップS138に進める。y0<Y−y+1でない場合、処理をステップS135に進める。
(S135)実行ノード選択部540は、z0+1をz0に代入する。実行ノード選択部540は、y0に0を代入する。
(S136)実行ノード選択部540は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(S136)実行ノード選択部540は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)z軸がトーラス軸である場合、実行ノード選択部540は、z0<Zであるか否かを判定する。z0<Zである場合、処理をステップS138に進める。z0<Zでない場合、処理をステップS137に進める。
(2)z軸がトーラス軸でない場合、実行ノード選択部540は、z0<Z−z+1であるか否かを判定する。z0<Z−z+1である場合、処理をステップS138に進める。z0<Z−z+1でない場合、処理をステップS137に進める。
(S137)実行ノード選択部540は、判定結果として、Noを返す。そして、処理を終了する。
(S138)実行ノード選択部540は、判定結果として、Yesを返す。なお、新たな基点は、この時点での(x0,y0,z0)である。そして、処理を終了する。
(S138)実行ノード選択部540は、判定結果として、Yesを返す。なお、新たな基点は、この時点での(x0,y0,z0)である。そして、処理を終了する。
このように、ジョブ割り当ての1つの例として、実行ノード選択部540は、1つの計算ノードに対して、1つの計算ノードに対応するビットを、1つずつ確認しながら、ジョブを割り当て可能な部分格子を探索することが考えられる。
この探索において、実行ノード選択部540は、前述の検索用マスクを用いてもよい。そこで、2つ目の比較例では、実行ノード選択部540が、1つのビットを1つの計算ノードの空き状況に対応付けたビットマップに対し、検索用マスクを用いてジョブ割り当てを行う例を説明する。
図19は、ジョブ割り当ての比較例(その2)を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。
(S141)実行ノード選択部540は、ジョブの各軸方向のサイズ(x,y,z)を取得する。
(S141)実行ノード選択部540は、ジョブの各軸方向のサイズ(x,y,z)を取得する。
(S142)実行ノード選択部540は、割り当て先の基点となる座標(y0,z0)を(0,0)に初期化する。
(S143)実行ノード選択部540は、基点座標から割り当て可能であるか否かを判定する。割り当て可能である場合、処理をステップS144に進める。割り当て不可である場合、処理をステップS145に進める。ここで、ステップS143の判定方法の詳細は後述される。
(S143)実行ノード選択部540は、基点座標から割り当て可能であるか否かを判定する。割り当て可能である場合、処理をステップS144に進める。割り当て不可である場合、処理をステップS145に進める。ここで、ステップS143の判定方法の詳細は後述される。
(S144)実行ノード選択部540は、割り当て結果を出力部530に出力する。そして、処理を終了する。
(S145)実行ノード選択部540は、基点座標を更新可能であるか否かを判定する。更新可能である場合、実行ノード選択部540は、基点座標を更新して、処理をステップS143に進める。更新可能でない場合、処理をステップS146に進める。ここで、ステップS145の判定方法の詳細は後述される。
(S145)実行ノード選択部540は、基点座標を更新可能であるか否かを判定する。更新可能である場合、実行ノード選択部540は、基点座標を更新して、処理をステップS143に進める。更新可能でない場合、処理をステップS146に進める。ここで、ステップS145の判定方法の詳細は後述される。
(S146)実行ノード選択部540は、割り当て不可を出力部530に出力する。そして、処理を終了する。
図20は、比較例(その2)の割り当て判定を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。以下に示す手順は、図19のステップS143の判定処理に相当する。
図20は、比較例(その2)の割り当て判定を示すフローチャートである。以下、図20に示す処理をステップ番号に沿って説明する。以下に示す手順は、図19のステップS143の判定処理に相当する。
(S151)実行ノード選択部540は、検索用マスクを初期化する。初期化の方法は、図12のステップS50と同様である。
(S152)実行ノード選択部540は、kに0を代入する。
(S152)実行ノード選択部540は、kに0を代入する。
(S153)実行ノード選択部540は、jに0を代入する。
(S154)実行ノード選択部540は、y座標とz座標が(y0+j,z0+k)のノード群(計算ノード群)の割り当て情報(ビット列)を取得する。
(S154)実行ノード選択部540は、y座標とz座標が(y0+j,z0+k)のノード群(計算ノード群)の割り当て情報(ビット列)を取得する。
(S155)実行ノード選択部540は、ステップS154で取得したビット列と検索用マスクとのAND結果が全ビット0であるか否かを判定する。全ビット0である場合、処理をステップS156に進める。全ビット0でない場合、処理をステップS161に進める。
(S156)実行ノード選択部540は、j+1をjに代入する。
(S157)実行ノード選択部540は、j<yであるか否かを判定する。j<yである場合、処理をステップS154に進める。j<yでない場合、処理をステップS158に進める。
(S157)実行ノード選択部540は、j<yであるか否かを判定する。j<yである場合、処理をステップS154に進める。j<yでない場合、処理をステップS158に進める。
(S158)実行ノード選択部540は、k+1をkに代入する。
(S159)実行ノード選択部540は、k<zであるか否かを判定する。k<zである場合、処理をステップS153に進める。k<zでない場合、処理をステップS160に進める。
(S159)実行ノード選択部540は、k<zであるか否かを判定する。k<zである場合、処理をステップS153に進める。k<zでない場合、処理をステップS160に進める。
(S160)実行ノード選択部540は、判定結果として、Yesを返す。実行ノード選択部540は、検索用マスクの位置を割り当てx座標とする。そして、処理を終了する。
(S161)実行ノード選択部540は、検索用マスクをシフト(右シフト)可能であるか否かを判定する。シフト可能である場合、実行ノード選択部540は、検索用マスクをまとめて右シフトして、処理をステップS152に進める。右シフトする量は、ステップS155のAND結果を最下位ビットからみて最初に1が出現する桁から、検索用マスクの連続する1の最上位の桁までカウントした数である。シフト不可能である場合、処理をステップS162に進める。
(S162)実行ノード選択部540は、判定結果として、Noを返す。そして、処理を終了する。
なお、ステップS154では、トーラス軸を考慮する場合、y座標とz座標が((y0+j)%Y,(z0+k)%Z)に対応する計算ノード群の割り当て情報を取得することが考えられる。
なお、ステップS154では、トーラス軸を考慮する場合、y座標とz座標が((y0+j)%Y,(z0+k)%Z)に対応する計算ノード群の割り当て情報を取得することが考えられる。
図21は、検索用マスクを用いた割り当て判定の例を示す図である。ここでは、x=4、X=12の場合を例示する。検索用マスクは、初期化直後では、111100000000である。また、(y0+j,z0+k)に対する割り当て情報に相当するビット列が、111011001000であるとする。ここで、当該ビット列の最上位ビットがx=0に対応し、最下位ビットがx=X−1に対応する。また、ノードの使用状態について、1が使用中であることを示し、0が使用中でないことを示す。
検索用マスクと割り当て情報とをAND処理した結果(AND結果)は、111000000000となる(同じ桁のビットが両方1のときAND結果の該当桁も1、それ以外ではAND結果の該当桁は0)。この場合、AND結果のビット列111000000000の下から見て最初に1が出現する位置まで割り当て不可なので、実行ノード選択部540は、検索用マスクを、まとめて(この場合、3ビット分)右シフトする。その結果、検索用マスクは、000111100000となる。そして、実行ノード選択部540は、上記の手順を繰り返す。
ここで、検索用マスクのシフトに関して、x軸がトーラス軸のとき、一番左の1が検索用マスクの一番右の桁からあふれる場合にシフト不可であり、それ以外の場合にシフト可能である(トーラス軸の場合は右ローテートとなる)。また、x軸がトーラス軸でないとき、一番右の1が検索用マスクの一番右の桁からあふれる場合にシフト不可であり、それ以外の場合にシフト可能である。
なお、図21の例は、図12のステップS50〜S52の手順の例として捉えることもできる。図12のステップS50〜S52の手順の例として捉える場合、上記の「割り当て情報」を、図12の手順における「入力ビット列」と読み替えればよい。
図22は、比較例(その2)の基点座標更新判定を示すフローチャートである。以下、図22に示す処理をステップ番号に沿って説明する。以下に示す手順は、図19のステップS145に相当する。
(S171)実行ノード選択部540は、y0+1をy0に代入する。
(S172)実行ノード選択部540は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(S172)実行ノード選択部540は、y軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)y軸がトーラス軸である場合、実行ノード選択部540は、y0<Yであるか否かを判定する。y0<Yである場合、処理をステップS176に進める。y0<Yでない場合、処理をステップS173に進める。
(2)y軸がトーラス軸でない場合、実行ノード選択部540は、y0<Y−y+1であるか否かを判定する。y0<Y−y+1である場合、処理をステップS176に進める。y0<Y−y+1でない場合、処理をステップS173に進める。
(S173)実行ノード選択部540は、z0+1をz0に代入する。実行ノード選択部540は、y0に0を代入する。
(S174)実行ノード選択部540は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(S174)実行ノード選択部540は、z軸がトーラス軸であるか否かに応じて次の判定を行う。
(1)z軸がトーラス軸である場合、実行ノード選択部540は、z0<Zであるか否かを判定する。z0<Zである場合、処理をステップS176に進める。z0<Zでない場合、処理をステップS175に進める。
(2)z軸がトーラス軸でない場合、実行ノード選択部540は、z0<Z−z+1であるか否かを判定する。z0<Z−z+1である場合、処理をステップS176に進める。z0<Z−z+1でない場合、処理をステップS175に進める。
(S175)実行ノード選択部540は、判定結果として、Noを返す。そして、処理を終了する。
(S176)実行ノード選択部540は、判定結果として、Yesを返す。なお、新たな基点のy座標およびz座標は、この時点での(y0,z0)である。そして、処理を終了する。
(S176)実行ノード選択部540は、判定結果として、Yesを返す。なお、新たな基点のy座標およびz座標は、この時点での(y0,z0)である。そして、処理を終了する。
このように、実行ノード選択部540は、検索用マスクを用いることで、1つ目の比較例よりも演算のステップ数を削減し得る。しかし、2つの比較例の何れを用いても、並列処理システム50の規模が大きくなるほど、計算ノード数の増加度合い以上に、計算ノードの選択にかかる時間が長くなってしまう。具体的には次の通りである。
図23は、計算ノード数に対する所要ステップ数の比較例を示す図である。図23では、X,Y,Zおよび全体の計算ノード数N(=XYZ)に対して、比較例(その1)、比較例(その2)および第2の実施の形態によるジョブ割り当てに伴う所要ステップ数を示している。
ここで、比較例(その1)の所要ステップ数は、比較例(その1)の手順のうち、図17のステップS114が実行される回数に相当する。また、比較例(その2)の所要ステップ数は、比較例(その2)の手順のうち、図20のステップS155が実行される回数に相当する。また、第2の実施の形態における所要ステップ数は、図14で示した前処理と割り当て可否判定との所要ステップ数の合計である。
図23によれば、比較例(その1)および比較例(その2)の方法では、計算ノード数が増えるほど、所要ステップ数が著しく増えることが分かる。一方、第2の実施の形態の制御ノード100によるジョブ割り当て方法によれば、計算ノード数の増加に対する所要ステップ数の増加は、2つの比較例に比べて緩やかである。また、制御ノード100によるジョブ割り当て方法によれば、2つの比較例に比べて、所要ステップ数が少なくて済み、ジョブを割り当てる計算ノードの選択を高速に行える。特に、計算ノード数が多いほど、制御ノード100によるジョブ割り当て方法は有用である。
また、ジョブ実行時のノード選択を高速化することで、ジョブの実行待ちの時間を減らし、並列処理システム50における各計算ノードの稼働率を向上できる。
なお、上記の例では、制御ノード100は、主に、y軸およびz軸方向のサイズが2の冪である領域ごとに、当該領域に対応する計算ノード群の空きノード情報を取得するものとした。一方、当該領域のy軸およびz軸方向のサイズは、3以上の整数の冪であってもよい。制御ノード100は、計算ノードの数に応じて、当該サイズを2以上の何れの整数の冪とするかを決定してもよい。例えば、計算ノードの数が多いほど、大きな整数の冪とすることで、計算ノードの選択を高速化することも考えられる。
なお、上記の例では、制御ノード100は、主に、y軸およびz軸方向のサイズが2の冪である領域ごとに、当該領域に対応する計算ノード群の空きノード情報を取得するものとした。一方、当該領域のy軸およびz軸方向のサイズは、3以上の整数の冪であってもよい。制御ノード100は、計算ノードの数に応じて、当該サイズを2以上の何れの整数の冪とするかを決定してもよい。例えば、計算ノードの数が多いほど、大きな整数の冪とすることで、計算ノードの選択を高速化することも考えられる。
また、上記の例では、主に、3次元の格子状のネットワークを例示して説明したが、前述のように、各計算ノードは2次元または4次元以上の格子状のネットワークにより接続されてもよい。
更に、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体33に記録できる。
例えば、プログラムを記録した記録媒体33を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体33に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
1 並列処理装置
2 ネットワーク
3 ジョブ
4 空きノード情報
10 制御ノード
11 記憶部
12 処理部
20 計算ノード群
21,22,23,24 計算ノード
2 ネットワーク
3 ジョブ
4 空きノード情報
10 制御ノード
11 記憶部
12 処理部
20 計算ノード群
21,22,23,24 計算ノード
Claims (7)
- 複数のノードがメッシュ結合またはトーラス結合で接続された並列処理システムで、前記複数のノードへのジョブの割り当てに用いられるジョブ割り当てプログラムであって、
前記ジョブの実行開始時および実行終了時に、前記複数のノードの接続関係を表すn(nは2以上の整数)次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数の冪である領域ごとに、前記領域に対応するノード群の空きノード情報を生成し、
各軸の指定サイズを含む前記ジョブの実行要求を受け付けると、前記指定サイズに応じた前記空きノード情報を選択し、選択した前記空きノード情報に基づいて、要求された前記ジョブの割り当て先のノードを抽出する、
処理をコンピュータに実行させることを特徴とするジョブ割り当てプログラム。 - 前記空きノード情報は、前記所定軸の座標値に対応するビットを複数含むビット列であり、
前記空きノード情報の生成では、前記領域のうち前記所定軸の第1の座標値に対応する部分に属する全ノードに前記ジョブを割り当て可能な場合に、前記第1の座標値に対応する第1のビットを第1の値に設定し、前記部分に属する少なくとも1つのノードに前記ジョブを割り当て不可能な場合に、前記第1のビットを第2の値に設定する、
ことを特徴とする請求項1記載のジョブ割り当てプログラム。 - 前記割り当て先のノードの抽出では、前記ビット列のうち、前記所定軸に対する前記指定サイズの数分、前記第1の値が連続するビット列部分があるか否かを判定し、前記ビット列部分がある場合、前記領域に対応する前記ノード群のうち、前記ビット列部分の前記座標値に対応するノードを、前記ジョブの前記割り当て先のノードと決定する、
ことを特徴とする請求項2記載のジョブ割り当てプログラム。 - 前記空きノード情報の選択では、前記他軸方向のサイズが前記他軸方向の前記指定サイズよりも小さい前記領域に対応する第1の空きノード情報を複数選択し、
前記割り当て先のノードの抽出では、複数の前記第1の空きノード情報を組み合わせることで、前記他軸方向のサイズが前記指定サイズである前記領域に対応する第2の空きノード情報を生成し、前記第2の空きノード情報に基づいて、前記ジョブの前記割り当て先のノードを抽出する、
ことを特徴とする請求項1乃至3の何れか1項に記載のジョブ割り当てプログラム。 - 前記割り当て先のノードの抽出では、複数の前記第1の空きノード情報のうちの一部の前記第1の空きノード情報を用いて、前記第2の空きノード情報に対応する前記領域に前記ジョブを割り当て可能であるか否かを判定し、割り当て可能でない場合、前記第2の空きノード情報の生成を省略する、
ことを特徴とする請求項4記載のジョブ割り当てプログラム。 - メッシュ結合またはトーラス結合で接続された複数のノードと、
前記複数のノードの接続関係を表すn(nは2以上の整数)次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数の冪である領域ごとに、前記領域に対応するノード群の空きノード情報を記憶する記憶部と、
ジョブの実行開始時および実行終了時に、前記空きノード情報を生成し、前記空きノード情報を前記記憶部に格納し、各軸の指定サイズを含む前記ジョブの実行要求を受け付けると、前記指定サイズに応じた前記空きノード情報を選択し、選択した前記空きノード情報に基づいて、要求された前記ジョブの割り当て先のノードを抽出する処理部と、
を有することを特徴とする並列処理装置。 - 複数のノードがメッシュ結合またはトーラス結合で接続された並列処理システムで、前記複数のノードにジョブを割り当てるジョブ割り当て方法であって、コンピュータが、
前記ジョブの実行開始時および実行終了時に、前記複数のノードの接続関係を表すn(nは2以上の整数)次元の空間のうち、所定軸以外の他軸方向のサイズが2以上の所定の整数の冪である領域ごとに、前記領域に対応するノード群の空きノード情報を生成し、
各軸の指定サイズを含む前記ジョブの実行要求を受け付けると、前記指定サイズに応じた前記空きノード情報を選択し、選択した前記空きノード情報に基づいて、要求された前記ジョブの割り当て先のノードを抽出する、
ことを特徴とするジョブ割り当て方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016234405A JP2018092328A (ja) | 2016-12-01 | 2016-12-01 | ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 |
US15/817,957 US20180157533A1 (en) | 2016-12-01 | 2017-11-20 | Apparatus and method to allocate a job to plural nodes coupled to each other via a mesh or torus connection |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2016234405A JP2018092328A (ja) | 2016-12-01 | 2016-12-01 | ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2018092328A true JP2018092328A (ja) | 2018-06-14 |
Family
ID=62243813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016234405A Withdrawn JP2018092328A (ja) | 2016-12-01 | 2016-12-01 | ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20180157533A1 (ja) |
JP (1) | JP2018092328A (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144357B2 (en) * | 2018-05-25 | 2021-10-12 | International Business Machines Corporation | Selecting hardware accelerators based on score |
US10892944B2 (en) | 2018-11-29 | 2021-01-12 | International Business Machines Corporation | Selecting and using a cloud-based hardware accelerator |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012020474A1 (ja) * | 2010-08-10 | 2012-02-16 | 富士通株式会社 | ジョブ管理装置及びジョブ管理方法 |
-
2016
- 2016-12-01 JP JP2016234405A patent/JP2018092328A/ja not_active Withdrawn
-
2017
- 2017-11-20 US US15/817,957 patent/US20180157533A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20180157533A1 (en) | 2018-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733314B (zh) | 用于独立冗余阵列(raid)重建的方法、设备和计算机可读存储介质 | |
US10209908B2 (en) | Optimization of in-memory data grid placement | |
US11074000B2 (en) | Non-transitory computer-readable storage medium, and information processing device and method | |
US10747460B2 (en) | Method, device and computer program product for changing type of storage system | |
US10761761B2 (en) | Method and device for managing storage system | |
US20200117689A1 (en) | Multi-Source Breadth-First Search (Ms-Bfs) Technique And Graph Processing System That Applies It | |
CN105302536A (zh) | MapReduce应用的相关参数的配置方法和装置 | |
US11703839B2 (en) | Material processing path selection method and device | |
CN112764661A (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
US20190173781A1 (en) | Constructing staging trees in hierarchical circuit designs | |
JP2018092328A (ja) | ジョブ割り当てプログラム、並列処理装置およびジョブ割り当て方法 | |
CN112748864B (zh) | 分配存储盘的方法、电子设备和计算机程序产品 | |
CN109961516B (zh) | 表面获取方法、装置及非暂态电脑可读取记录媒体 | |
CN108390914A (zh) | 一种服务更新方法及装置、系统 | |
US10394615B2 (en) | Information processing apparatus and job management method | |
CN110413207B (zh) | 降低存储系统的数据恢复时间的方法、设备和程序产品 | |
CN112925471A (zh) | 在存储系统中选择重建目的地的方法、设备和程序产品 | |
JP2009266113A (ja) | メモリ管理方法およびシステム | |
JP2010205208A (ja) | ホストコンピュータ、マルチパスシステム、パス割当方法およびプログラム | |
CN112748862A (zh) | 用于管理盘的方法、电子设备和计算机程序产品 | |
CN111857560A (zh) | 用于管理数据的方法、设备和计算机程序产品 | |
JP6191401B2 (ja) | 並列計算機システム、制御装置、並列計算機システムの制御方法及び制御装置の制御プログラム | |
JP2021086178A (ja) | 情報処理装置および並列演算プログラム | |
JP6930381B2 (ja) | 情報処理システム、演算処理装置及び情報処理システムの制御方法 | |
JP2016071725A (ja) | ワークフロー制御プログラム、ワークフロー制御方法及び情報処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190807 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20190815 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20190815 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20200124 |