メッシュやトーラスといったネットワークトポロジだけではなく一般のネットワークトポロジのシステムを扱う場合、「ジョブに対する資源割り当て単位」である計算ノードに対応する「頂点」と、「ジョブに対する資源割り当て単位間のネットワークリンク」に対応する「辺」とを設定することで、システムをグラフ理論の意味での「グラフ」で表すことができる。
例えば、図1に示すように、計算機システムは、計算ノード(すなわち、資源)に対応する丸と、計算ノード間を繋ぐネットワークリンクとで表される。なお、図1においては、黒丸は、ジョブに対して割り当て済み資源に対応する頂点を表しており、白丸は、空き資源に対応する頂点を表している。また、実線の辺は、割り当て済み資源間を繋ぐネットワークリンクに対応する。点線の辺は、割り当て済み資源と空き資源との間を繋ぐネットワークリンクに対応し、且つ割り当て済み資源と空き資源との境界に対応するネットワークリンクに対応する。
本実施の形態でも、グラフを表現するために一般的に用いられる隣接行列と、接続行列とを用いる。隣接行列は、グラフの点集合が{1,2,...,n}であるとき、ij成分が点iとjを結ぶ辺数を表すn×n行列である。同様に、接続行列は、辺に{1,2,...,m}とラベル付けされているときに、そのij成分が1であるのは点iが辺jに接続されている場合であり、且つ接続していないときは0であるようなn×m行列である。
本実施の形態で想定するような大規模なシステムにおけるネットワークトポロジに対するコスト的な制約により、大規模なシステムを表す「グラフ」の「隣接行列」と「接続行列」は、いずれも「疎行列(大半の成分が0の行列)」になる。
また、大規模なシステムにおけるジョブスケジューリングでは、単にプロセッサの集合をジョブに割り当てるだけでなく、そのプロセッサ集合の使用時間帯をも決めた上で割り当てる場合もある。そこで、以下ではジョブスケジューラがジョブに割り当てる「資源」とは、明示的に区別しない限り、「プロセッサの集合」と「プロセッサの集合と使用時間帯との対」とのどちらでもあり得るものとする。
「プロセッサの集合と使用時間帯との対」という意味での「資源」を扱う場合、使用時間帯を所定の単位時間により整数の時刻座標で表し、座標毎にシステムに対応するグラフのコピーを対応させる。
そして、ジョブに対する割り当て単位に対応する頂点が、直前及び直後の時刻において計算機システムの計算ノードに対応する頂点が結ばれているグラフを「資源」に対応させることとする。
以下、グラフに関する用語は、特に断らない限り「グラフ理論」における標準的な意味で使用する。
例えば、図2に示すように、使用可能時間帯1において1列に並ぶように接続された5つの頂点で表されるグラフは、使用可能時間帯2乃至4の各々についてコピーされ、各頂点について4つの使用可能時間帯を繋ぐ3つの辺(矢印)でも繋がれている。白丸と黒丸、実線と点線については、図1で説明したものと同様である。
例えば図1及び図2において黒丸と実線とで特定される資源群を、本実施の形態では、割り当て済み資源に対応する部分グラフである「割り当て済みグラフ」と呼ぶことにする。
本実施の形態では、割り当て済みグラフの連結部分集合に対して次のように定義する「近傍」及び「対岸」という概念を導入し、探索処理に先立ってこれらに関係するデータを用意することで、探索処理を高速化させる。但し、「近傍」はグラフ理論の一般的な用語というわけではない。
グラフΓ(V,E)における連結部分グラフC1、C2がC1∩C2=φを満たすとき、C1とC2が「接する」とは、C1とC2が同じ連結成分に含まれることをいう。
以下ではグラフΓ(V,E)の頂点の集合Vが共通の頂点がない2つの部分集合に分かれているとする。
(V=X∪Y)∧(X∩Y=φ)
言い換えれば、XとYは全体集合Vにおいて互いに他の補集合とする。
この前提の下で、辺の集合Eを、どの2つも共通部分が空集合になるような以下の3つの部分集合に分ける。
E1={e∈E|両端の頂点ともにXに属する}
E2={e∈E|両端の頂点ともにYに属する}
E3={e∈E|両端の頂点のうち、一方がXに属し、他方がYに属する}
すなわち、集合の記号と論理記号で書けば、以下のようになる。
E=(E1∪E2∪E3)∧(E1∩E2=φ)∧(E2∩E3=φ)∧(E3∩E1=φ)
これ以降では、表現を簡潔にするため、部分グラフΓ(X,E1)とXを同一視してXと表し、部分グラフΓ(Y,E2)とYも同一視してYと表すものとする。
以下、SP(v1,v2)という記号で、2つの頂点v1と頂点v2の最短経路(すなわち、含まれる辺の数が最小の経路)の集合を表す。
SP(v1,v2)={v1とv2の最短経路}
Xにおいて共通の頂点がない2つの連結部分グラフC1及びC2(すなわちC1⊂X,C2⊂X,C1∩C2=φ)に対し、C1とC2が互いに他の「対岸である」ことを、次の条件で定義する。ここで、Xを陸地、Yを水域に見立てて「対岸」という用語を導入している。但し、XとYは定義上は対称なので、Yの連結部分グラフについても、同様な定義は可能である。なお、∃は、直後に置かれる変数記号に対して「次の条件を満たすものが存在する」という意味を表す論理記号である。同様に∀は直後に置かれる変数記号に対し、「その全てが次の条件を満たす」という意味を表す論理記号である。以下では、表現を簡潔にするため、これらの論理記号を用いて、「対岸」の条件を表す。
∃v1∈C1 ∃v2∈C2 ∃p∈SP(v1,v2) pのv1及びv2以外の頂点が全てY(すなわちXの補集合)に含まれる
一方、v1及びv2が対岸でない場合は、「辺の数が最小のどのような経路」も、途中でXの部分集合(すなわち陸地)を通過する。
C1とC2の間の「辺の数が最小の経路」は、一般のグラフでは「単一始点最小経路問題」の解であり、ダイクストラ法やベルマン−フォード法など、グラフ理論の既知のアルゴリズムで計算される。また、「全点対最小経路問題」の解を、C1及びC2の点を始点及び終点となる場合の一部とみなせば、C1とC2の間の「辺の数が最小の経路」は、ワーシャル−フロイド法など、グラフ理論の既知のアルゴリズムで計算される。
なお、メッシュやトーラスに対応するグラフに対しては、それらに対する比較的洗練された、グラフ理論のアルゴリズムを使うまでもなく他のシンプルな手法で求めることができ、探索処理の際に計算幾何における「最近傍領域探索」用のデータ構造(例えばR木、区間木など)を利用することもできる。
次に、正の整数nに対し、共にXの部分グラフであり且つ共通部分がない2つの連結部分グラフC1及びC2が「互いに他方のn次近傍」であることを、次のように再帰的に定める。
(1)C1とC2が「対岸である」なら、C1とC2は互いに他の1次近傍である。
(2)C1とC2とのいずれの対岸でもない、X内の部分集合C3⊂Xであって、C1とC3がn1次近傍、C3とC2がn2次近傍として、n1+n2の最小値がnであるとき、C1とC2はn次近傍である。
すなわち、C1とC2がn次近傍であれば、Xにおいてn個の連結部分グラフの列D(1),D(2),...,D(n)があって、D(1)=C1,D(n)=C2,全てのi=1,...,nに対して D(i)とD(i+1)が対岸である。
なお、本実施の形態では、連結部分グラフのこのような列に対し、「C1から見てD(i)はD(i+1)の手前にある」又は「C1から見て、D(i+1)はD(i)の向こう側にある」という表現を使う場合もあるものとする。同様に「C2から見て、D(i+1)はD(i)の手前にある」又は「D(i)はD(i+1)の向こう側にある」と表現する場合があるものとする。
さらに、本実施の形態では、連結集合Cを「C自体の0次近傍」と呼ぶ場合もあるものとする。
なお、異なる2つの連結成分の共通部分はない(=空集合である)ことから、「対岸である」関係や「n次近傍」は、連結成分に対しては、自然に定義される。
また、各ジョブに対して、「どの2つのジョブに割り当てる資源に対応する部分グラフも連結」且つ「異なるジョブに対応する資源は共通部分を持たない部分グラフに対応する」ように割り当てる場合、ジョブの間に「対岸である」関係と「n次近傍」を定義することもできる。
さらに、メッシュやトーラスについては、連結部分グラフ間の経路を各次元の座標軸に平行な経路に制限することで「少なくとも1つの座標軸について対岸である」という用語も用いる場合があるものとする。「少なくとも1つの座標軸について対岸である」ならば「対岸である」が、逆は必ずしも成立しない。
すなわち、メッシュ又はトーラスの2つの連結部分グラフC1及びC2において全ての最短経路が「斜め」になる(∀ v1∈C1 ∀ v2∈C2 v1とv2の座標は全ての座標軸の成分が異なる)場合、どの座標軸を選んでも「1つの座標軸について対岸である」とは言えない。
上で述べた定義の一部を、図3に示したメッシュの場合を用いて説明する。図3において、頂点は計算ノード(すなわち、資源)に対応し、頂点間の辺はネットワークリンクに対応する。図3において、斜線で囲まれた領域101乃至114は、それぞれ1つのジョブに割り当てられた頂点の集合を表している。領域101と領域102とは接しており、領域101と領域102との間における辺の領域121にジョブは割り当てられないので、領域101及び102と領域121とで、割り当て済みグラフ内における連結成分となる。同様に、領域104と領域103とは接しており、領域103と領域104との間における辺の領域122にジョブは割り当てられないので、領域103及び104と領域122とで、割り当て済みグラフ内における連結成分となる。
さらに、領域113と領域114とは接しており、領域113と領域114との間における辺の領域128にジョブは割り当てられないので、領域113及び114と領域128とで、割り当て済みグラフ内における連結成分となる。
さらに、領域106は、領域105と領域107とに接しており、領域106と領域105との間における辺の領域123にジョブは割り当てられず、且つ領域106領域107との間における辺の領域124にジョブは割り当てられないので、領域105乃至107と領域123及び124とで、割り当て済みグラフ内における連結成分となる。
さらに、領域112は、領域109と領域108とに接しており、さらに領域111にも接している。また、領域111は、領域110に接している。領域112と領域109及び108との間、並びに領域109と領域108との間における辺の領域125にはジョブは割り当てられておらず、また領域112と領域111との間における辺の領域126にはジョブは割り当てられない。さらに、領域111と領域110との間における辺の領域127にはジョブは割り当てられない。よって、領域108乃至112と領域125乃至127とで、割り当て済みグラフ内における連結成分となる。
図3において、割り当て済みグラフ内における連結成分間の「対岸である」関係は、両方向点線矢印131乃至138で表される。具体的には、領域101及び102と領域121とを含む連結成分の対岸は、領域103及び104と領域122とを含む連結成分と、領域108乃至112と領域125乃至127とを含む連結成分と、領域113及び114と領域128とを含む連結成分である。
領域103及び104と領域122とを含む連結成分の対岸は、領域101及び102と領域121とを含む連結成分と、領域108乃至112と領域125乃至127とを含む連結成分と、領域105乃至107と領域123及び124とを含む連結成分とである。
領域105乃至107と領域123及び124とを含む連結成分の対岸は、領域103及び104と領域122とを含む連結成分と、領域108乃至112と領域125乃至127とを含む連結成分と、領域113及び114と領域128とを含む連結成分である。
領域108乃至112と領域125乃至127とを含む連結成分の対岸は、その他の連結成分全てである。
領域113及び114と領域128とを含む連結成分の対岸は、領域105乃至107と領域123及び124とを含む連結成分と、領域108乃至112と領域125乃至127とを含む連結成分と、領域101及び102と領域121とを含む連結成分である。
本実施の形態では、個々のジョブに対応する割り当て済み資源を管理して、未割り当て資源は「システムの全資源から「割り当て済み資源」を除いたもの」として間接的に管理するものとする。
また、本実施の形態では、例えば、各連結成分について、当該連結成分の対岸となる連結成分等を探索範囲の限界点として予め把握しておくことで、当該連結成分から行われ且つ新規ジョブのための資源を確保できるか否かを判断する探索処理の高速化を図る。
さらに、本実施の形態では、探索範囲によって探索処理の所要時間が大きく異なる事態を避けるために、資源割り当て状況の複雑度(すなわち、フラグメンテーション進行度)を表す新たなパラメタを導入することで、所要時間をより正確に見積もることができるようにする。
以上のような技術的事項を実現するための構成を以下具体的に説明する。
図4に示すように、並列計算機システム1は、複数の計算ノード200がネットワーク20を介して相互に通信可能に接続され、これにより相互結合網が構成されている。また、ネットワーク20には、1つのマスタスケジューラノード300と、複数のスレーブスケジューラノード310とが接続されている。
ネットワーク20は通信回線であり、例えば、LAN(Local Area Network)や光通信路である。
計算ノード200は情報処理装置であり、互いに同様の構成を有する。図4に示すように、各計算ノード200は、それぞれ、CPU(Central Processing Unit)201、メモリ202及びNIC(Network Interface Card)203を有する。
NIC203は、計算ノード200をネットワーク20に接続する通信部であり、ネットワーク20を介して、他の計算ノード200、マスタスケジューラノード300、例えばユーザが操作する他の情報処理装置等との間でデータ通信を行う。NIC203は、例えば、LANインタフェースカードである。
メモリ202は、ROM(Read Only Memory)及びRAM(Random Access Memory)を含む記憶装置である。メモリ202のROMには、各種演算に係るプログラムやこのプログラム用のデータが書き込まれている。メモリ202上のプログラムは、CPU201に適宜読み込まれて実行される。また、メモリ202のRAMは、CPU201に実行されるプログラム及び当該プログラムによって用いられるデータを格納する。
CPU201は、各種制御及び演算を行う処理装置であり、メモリ202に格納されたOS(Operating System)及びプログラムを実行することにより、各種機能を実現する。すなわち、CPU201は、NIC203及びネットワーク20を介して受信したデータに対して演算処理を行う。また、CPU201は、演算処理結果等のデータを他の計算ノード200等へ送信する場合には、そのデータをNIC203及びネットワーク20を介して出力する。
上でも述べたように、ジョブは、本並列計算機システム1において1又は複数の計算ノード200に割り当てられる。
マスタスケジューラノード300は、スレーブスケジューラノード310を制御すると共に、ジョブを割り当てるべき計算ノード200を決定する処理等を行うジョブ管理装置である。
マスタスケジューラノード300は、ジョブ管理装置としての情報処理装置であり、CPU301、メモリ302及びNIC303を有する。
NIC303は、マスタスケジューラノード300をネットワーク20に接続する通信部であり、ネットワーク20を介して計算ノード200、スレーブスケジューラノード310及びユーザが操作する他の情報処理装置等との間でデータ通信を行う。NIC303は、例えば、LANインタフェースカードである。
メモリ302は、ROM及びRAMを含む記憶装置である。メモリ302のROMには、スレーブスケジューラノード310の制御を含むジョブスケジューリングに係るプログラム及びこのプログラム用のデータが書き込まれている。メモリ302上のプログラムは、CPU301に適宜読み込まれて実行される。また、メモリ302のRAMは、CPU301に実行されるプログラム及び当該プログラムによって用いられるデータを格納する。
CPU301は、各種制御及び演算を行う処理装置であり、メモリ302に格納されたOS及びプログラムを実行することにより、ジョブスケジューラを含む各種機能を実現する。
スレーブスケジューラノード310は、マスタスケジューラノード300からの指示に応じて、ジョブを割り当てることができる計算ノード200を探索する処理等を行う。
スレーブスケジューラノード310は、情報処理装置であり、CPU311、メモリ312及びNIC313を有する。
NIC313は、スレーブスケジューラノード310をネットワーク20に接続する通信部であり、ネットワーク20を介して計算ノード200、マスタスケジューラノード300及びユーザが操作する他の情報処理装置等との間でデータ通信を行う。NIC313は、例えば、LANインタフェースカードである。
メモリ312は、ROM及びRAMを含む記憶装置である。メモリ312のROMには、ジョブに割り当てられる計算ノード200を探索する処理等を実行するためのプログラム及びこのプログラム用のデータが書き込まれている。メモリ312上のプログラムは、CPU311に適宜読み込まれて実行される。また、メモリ312のRAMは、CPU311に実行されるプログラム及び当該プログラムによって用いられるデータを格納する。
CPU311は、各種制御及び演算を行う処理装置であり、メモリ312に格納されたOS及びプログラムを実行することにより、計算ノード200の探索機能を含む各種機能を実現する。
なお、スレーブスケジューラノード310は、ジョブが割り当てられていない計算ノード200である場合もある。
次に、マスタスケジューラノード300に実現される機能構成例を、図5に示す。マスタスケジューラノード300は、データ格納部3010と、探索制御部3020と、ジョブ配置処理部3030と、データ管理部3040とを有する。
探索制御部3020は、データ格納部3010に格納されているデータに基づき、スレーブスケジューラノード310に実行させる探索処理の前処理を行い、その処理結果に基づき、スレーブスケジューラノード310に探索処理を実行させる。
ジョブ配置処理部3030は、スレーブスケジューラノード310による探索処理の処理結果に基づき、ジョブの割当先となる計算ノード200を決定する処理等を実行する。
データ管理部3040は、データ格納部3010に格納されるデータの更新処理を実行し、式推定部3041を有する。式推定部3041は、探索制御部3020に用いられる探索処理時間の推定式の推定処理を実行する。
また、スレーブスケジューラノード310に実現される機能構成例を、図6に示す。スレーブスケジューラノード310は、データ格納部3110と、探索処理部3120と、データ管理部3130とを有する。
探索処理部3120は、データ格納部3110に格納されているデータに基づき、新たなジョブに対して割り当てるべき計算ノードが、探索処理の分担範囲内に存在しているか否かを判断する処理等を実行する。
データ管理部3130は、データ格納部3110に格納されているデータを維持管理する処理を行い、追加処理部3131と、削除処理部3132と、パラメタ算出部3133とを有する。
追加処理部3131は、探索処理の分担範囲内にジョブが追加された場合の処理を実行する。削除処理部3132は、探索処理の分担範囲内におけるジョブが終了した場合の処理を実行する。パラメタ算出部3133は、式推定部3041で用いられ且つ本実施の形態で導入されるパラメタの値を算出する処理を実行する。
なお、マスタスケジューラノード300は、スレーブスケジューラノード310の機能及びデータを併せて有する場合もある。
次に、スレーブスケジューラノード310の動作について、主に図7乃至図22を用いて説明する。スレーブスケジューラノード310は、マスタスケジューラノード300からの指示に応じて、新たなジョブを割り当てられる計算ノード群を探索する探索処理を実行する。この探索処理を効率的に行うため、探索処理より前且つ探索処理を行っていない間に、データ格納部3110に格納されているデータを更新しておく。
上でも述べたように、本実施の形態では、例えば、各連結成分について、当該連結成分から探索処理が行われ、新規ジョブのための資源を確保できるか否かを判断することになる。このためには、連結成分の対岸となる連結成分等についてのデータを保持しておき、ジョブに対する計算ノードの割り当てに変更があれば、当該データを更新することで、次なる探索処理に備えることになる。
データ格納部3110には、探索処理の分担範囲に含まれるジョブのリストが格納されている。さらに、データ格納部3110は、図7に示すように、このジョブのリストに含まれる各ジョブについて、ジョブID(識別子)、ジョブ要求元のユーザID、並列計算機システム1において使用する資源についてのデータ、当該ジョブに接するジョブ(隣接ジョブと呼ぶ)のリストについてのデータ、当該ジョブの対岸であるジョブのリストである対岸リストについてのデータ、当該ジョブが属する連結成分についてのデータなどを格納している。
また、データ格納部3110は、図8に示すように、連結成分毎に、連結成分ID、当該連結成分の構成データ(連結成分に含まれるジョブのリストを含む)、当該連結成分の対岸であるジョブのリスト(連結成分についての対岸リスト)についてのデータ等を含む。
さらに、データ格納部3110は、隣接行列及び接続行列を格納している。
次に、主に図9乃至図22を用いて、スレーブスケジューラノード310の処理内容について説明する。
まず、図9を用いて、メインの処理フローを説明する。
スレーブスケジューラノード310のデータ管理部3130は、探索処理部3120が探索未実施中に所定のイベントの発生を待機して、発生すると当該イベントを検出する(ステップS1)。所定のイベントとは、自スレーブスケジューラノード310が担当する連結成分の付近においてジョブの追加割り当てが行われたという通知を受信したというイベント、又は自スレーブスケジューラノード310が担当する連結成分においてジョブが終了したことを検出するか又は付近において計算資源の解放が行われたという通知を受信したというイベントである。ジョブの追加割り当てについての通知には、割当先の計算ノードを特定するためのデータが含まれる。
ジョブの追加というイベントを検出した場合には(ステップS3:Yesルート)、データ管理部3130の追加処理部3131は、第1追加処理を実行する(ステップS5)。さらに、追加処理部3131は、第2追加処理を実行する(ステップS7)。第1及び第2追加処理については、後に詳しく述べるが、追加されたジョブに応じて隣接リスト及び対岸リストを更新する。そして処理はステップS11に移行する。
一方、ジョブの追加というイベントではない場合には(ステップS3:Noルート)、ジョブの削除ということになるので、削除処理部3132は、削除処理を実行する(ステップS9)。この削除処理については、後に詳しく述べるが、計算資源の解放に応じて隣接リスト及び対岸リストを更新する。そして処理はステップS11に移行する。
そして、パラメタ算出部3133は、複雑度算出処理を実行する(ステップS11)。後に述べる複雑度を更新するための処理を実行する。複雑度算出処理については、後に詳しく述べる。
そして、データ管理部3130は、処理終了であるか否かを判断する(ステップS13)。処理終了ではない場合には、処理はステップS1に戻る。一方、例えば処理終了が指示されると、処理を終了する。
なお、探索処理部3120は、典型的にはマスタスケジューラノード300からの指示に応じて探索処理を実行する。すなわち、図9の処理の前又は後に、探索処理は実行される。この探索処理については、後にマスタスケジューラノード300の処理との関係で説明する。
次に、第1追加処理について、図10を用いて説明する。
データ管理部3130の追加処理部3131は、追加されたジョブJが、既存ジョブJ0に接するか否かを判断する(ステップS31)。既存ジョブJ0は、自スレーブスケジューラノード310の分担範囲に含まれるジョブである。
追加されたジョブJが既存ジョブJ0に接する場合には、追加処理部3131は、追加されたジョブJを既存ジョブJ0の隣接リストに追加登録する(ステップS49)。そして処理は呼び出し元の処理に戻る。
一方、追加されたジョブJが既存ジョブJ0に接しない場合には、追加処理部3131は、空の集合Lに対して、既存ジョブJ0の更新前の対岸リストに含まれるジョブを登録する(ステップS33)。
その後、追加処理部3131は、集合Lが空であるか否かを判断する(ステップS35)。集合Lが空であれば、処理は呼び出し元の処理に戻る。
一方、集合Lが空ではない場合には、追加処理部3131は、変数J1に対して、集合Lの先頭ジョブを設定する(ステップS37)。また、追加処理部3131は、集合LからジョブJ1を除去する(ステップS39)。
そして、追加処理部3131は、既存ジョブJ0から見てジョブJがジョブJ1より手前であるか否かを判断する(ステップS41)。すなわち、既存ジョブJ0の対岸であるジョブJ1が、新規ジョブJが配置されたことによって対岸ではなくなったか否かを判断している。
既存ジョブJ0から見てジョブJがジョブJ1より手前ではない場合には、追加処理部3131は、既存ジョブJ0から見てジョブJ1がジョブJより手前であるか否かを判断する(ステップS43)。この条件を満たす場合には、対岸リストを更新しなくてもよい、ジョブJ1とジョブJとの位置関係であるから、処理は呼び出し元の処理に戻る。
一方、ステップS43の条件が満たされない場合には、ジョブJ1とジョブJとが対向するような位置関係にないので、処理はステップS35に戻る。
既存ジョブJ0から見てジョブJがジョブJ1より手前である場合には、追加処理部3131は、ジョブJを既存ジョブJ0の対岸リストに追加すると共に(ステップS45)、その対岸リストからジョブJ1を除去する(ステップS47)。そして、処理は呼び出し元の処理に戻る。
このようにして対岸リストや隣接リストが更新される。
次に、第2追加処理について図11を用いて説明する。
追加処理部3131は、空の集合C0に対して、基準連結成分の構成ジョブリストを登録する(ステップS51)。例えば自スレーブスケジューラノード310の分担範囲における連結成分を基準連結成分とする。但し、複数の連結成分が分担範囲に含まれる場合には、例えば予め定められた連結成分を基準連結成分とする。
そして、追加処理部3131は、新規ジョブJは、集合C0のいずれかのジョブに接するか否かを判断する(ステップS53)。この条件を満たさない場合には、処理はステップS57に移行する。一方、ステップS53の条件を満たす場合には、追加処理部3131は、新規ジョブJを、集合C0に追加する(ステップS55)。これによって、基準連結成分の構成ジョブリストが更新される。
そして、追加処理部3131は、空の集合Lに対して、基準連結成分の対岸リストに含まれるジョブを登録する(ステップS57)。そして、追加処理部3131は、集合Lが空であるか否かを判断する(ステップS59)。
集合Lが空ではない場合には、追加処理部3131は、変数C1に集合Lの先頭ジョブを設定する(ステップS61)。さらに、追加処理部3131は、集合LからジョブC1を除去する(ステップS63)。そして、追加処理部3131は、第3追加処理を実行する(ステップS65)。第3追加処理については、図12を用いて説明する。そして処理はステップS59に戻る。
集合Lが空である場合には、追加処理部3131は、新規ジョブJが複数の連結成分に属するか否かを判断する(ステップS67)。ここでは、新規ジョブJが複数の連結成分に接するように追加された場合を確認するものである。この条件を満たさない場合には、処理は呼び出し元の処理に戻る。
一方、新規ジョブJが複数の連結成分に属する場合には、追加処理部3131は、新規ジョブJが属する全連結成分を統合して構成ジョブリストを更新する(ステップS69)。そして処理は呼び出し元に戻る。
次に、第3追加処理について図12を用いて説明する。
追加処理部3131は、空の集合L2に、ジョブC1の連結成分の構成ジョブリストを設定する(ステップS71)。そして、追加処理部3131は、集合L2が空であるか否かを判断する(ステップS73)。集合L2が空である場合には、処理は呼び出し元の処理に戻る。
一方、集合L2が空ではない場合には、追加処理部3131は、変数J1に、集合L2の先頭ジョブを設定する(ステップS75)。また、追加処理部3131は、集合L2からジョブJ1を除去する(ステップS77)。
そして、追加処理部3131は、新規ジョブJは、ジョブJ1に接するか否かを判断する(ステップS79)。新規ジョブJがジョブJ1に接しない場合には、処理はステップS73に戻る。
一方、新規ジョブJがジョブJ1に接する場合には、追加処理部3131は、新規ジョブJをジョブC1の連結成分の構成ジョブリストに追加済みであるか否かを判断する(ステップS81)。この条件を満たさない場合には、追加処理部3131は、新規ジョブJをジョブC1の連結成分の構成ジョブリストに追加する(ステップS83)。一方、ステップS81の条件が満たされる場合には、処理はステップS85に移行する。
そして、追加処理部3131は、ジョブJ1の隣接リストに新規ジョブJが追加されていない場合には新規ジョブJを追加する(ステップS85)。そして処理はステップS73に戻る。
以上のような処理を実行することで、連結成分についてのデータが更新される。
次に、削除処理について、図13A乃至図15を用いて説明する。
削除処理部3132は、変数Jに処理が終了したジョブを設定する(図13A:ステップS91)。また、削除処理部3132は、空の集合C0に、ジョブJが属する連結成分のジョブ群を設定する(ステップS93)。
そして、削除処理部3132は、集合C0からジョブJを除去すると空集合になるか否かを判断する(ステップS94)。すなわち、ジョブJが属する連結成分がジョブJのみを含むのか否かを判断するものである。
ステップS94の条件を満たす場合には、削除処理部3132は、集合C0に対応する連結成分のデータを削除する(ステップS95)。集合C0に1つしかジョブがない場合にはこれ以上の処理は行われないため、処理は呼び出し元の処理に戻る。
一方、ステップS94の条件を満たさない場合には、削除処理部3132は、分解判定処理を実行する(ステップS96)。分解判定処理については、後に述べるが、連結成分からジョブを除いたときに、複数の連結成分への分解が発生するか否かを判断する処理である。そして、削除処理部3132は、集合C0からジョブJを除去すると複数の連結成分に分解するか否かを、分解判定処理の判定結果から判断する(ステップS97)。この条件を満たさない場合には、処理は呼び出し元の処理に戻る。
一方、ステップS97の条件を満たす場合には、削除処理部3132は、データ格納部3110において、増加分の連結成分のためのエントリを生成する(ステップS98)。また、削除処理部3132は、ジョブJ以外の集合C0に属するジョブを、各連結成分に対して配分する(ステップS99)。その後、削除処理部3132は、対岸リスト生成処理を実行する(ステップS100)。対岸リスト生成処理については、図14及び図15を用いて説明する。そして処理は呼び出し元の処理に戻る。
なお、複数の連結成分に分解する場合には、追加された連結成分に対してスレーブスケジューラノード310等の処理要素を割り当て又は追加する処理を行う場合もある。これは、マスタスケジューラノード300によって行われる場合もある。
次に、図13Bを用いて分解判定処理について説明する。まず、削除処理部3132は、集合Lに対して、集合C0内でジョブJが接するジョブを設定する(図13B:ステップS101)。そして、削除処理部3132は、変数J1に対して、集合L内の任意のジョブを設定し、集合LからジョブJ1を除外する(ステップS102)。
この分解判定処理は、「Jを取り除く前の連結成分C0からJを取り除いた残りのジョブ群が1つの連結成分に属するか否か」を判定するものである。この連結性の判定は、「Jを除去したことにより、除去する前は同じ連結成分に属していた2ジョブが、異なる連結成分に属するようになるか」を判定すればよい。もしJに接していたジョブ群Lが、Jを除去した後でも1つの連結成分に属するならば、Jの有無は全体の連結性に影響を及ぼさないことになるので、「C0に属するJ以外のジョブ全て」の連結性を調べる代わりに、「Jに接していたジョブ全て(すなわちL)」の連結性を調べることになる。すなわち、以下のステップについては、集合L内の各ジョブについて行うことになる。
また、削除処理部3132は、集合Mに対して、集合C0からジョブJを除いたジョブ集合内におけるジョブJ1の連結成分を設定する(ステップS103)。そして、削除処理部3132は、判定結果に「分解しない」を設定し(ステップS104)、集合L内に、集合Mに含まれないジョブが存在するか否かを判断する(ステップS105)。このような条件が満たされる場合には、複数の連結成分に分解するので、削除処理部3132は、判定結果を「分解する」に設定し直す(ステップS106)。そして処理は呼び出し元の処理に戻る。一方、ステップS105の条件が満たされない場合には、処理は呼び出し元の処理に戻る。
次に、対岸リスト生成処理について図14及び図15を用いて説明する。
まず、削除処理部3132は、空の集合CXに対して、分裂前の連結成分を設定する(ステップS111)。さらに、削除処理部3132は、空の集合L1に対して、分裂後の連結成分を設定する(ステップS113)。
そして、削除処理部3132は、集合L1が空であるか否かを判断する(ステップS115)。集合L1が空になれば、処理は呼び出し元の処理に戻る。
一方、集合L1が空でなければ、削除処理部3132は、変数Cに対して集合L1の先頭ジョブを設定する(ステップS117)。また、削除処理部3132は、集合L1からジョブCを除去する(ステップS119)。
そして、削除処理部3132は、空の集合L2に対して分裂後の連結成分を設定する(ステップS121)。また、削除処理部3132は、集合L2からジョブCを除去する(ステップS123)。さらに、削除処理部3132は、空の集合L3に対して集合L2を設定する(ステップS125)。また、削除処理部3132は、空の集合L5に対して、分裂前の連結成分の対岸リストを登録する(ステップS127)。そして処理は端子Xを介して図15の処理に移行する。
図15の処理の説明に移行して、削除処理部3132は、集合L5は空であるか否かを判断する(ステップS129)。集合L5が空になると、削除処理部3132は、ジョブCの対岸リストを集合L3に設定する(ステップS131)。さらに、削除処理部3132は、ジョブC1の対岸リストに対して、CXを削除し、集合L6の要素を追加する(ステップS133)。そして処理は端子Yを介して図14のステップS115に戻る。
一方、集合L5が空ではない場合には、削除処理部3132は、変数C1に対して、集合L5の先頭ジョブを設定する(ステップS135)。また、削除処理部3132は、集合L5からジョブC1を除去する(ステップS137)。さらに、削除処理部3132は、集合L6に空リストを設定する(ステップS139)。また、削除処理部3132は、集合L4に対して集合L3を設定する(ステップS141)。
そして、削除処理部3132は、集合L4が空か否かを判断する(ステップS143)。集合L4が空であれば、処理はステップS129に戻る。一方、集合L4が空でなければ、削除処理部3132は、変数C2に対して、集合L4の先頭ジョブを設定する(ステップS145)。さらに、削除処理部3132は、集合L4からジョブC2を除去する(ステップS147)。
そして、削除処理部3132は、ジョブCから見てジョブC2がジョブC1の手前にあるか否かを判断する(ステップS149)。この条件を満たす場合には、処理はステップS143に戻る。一方、ステップS149の条件が満たされない場合には、削除処理部3132は、ジョブC1を集合L3に追加する(ステップS151)。さらに、削除処理部3132は、ジョブC2を集合L2に追加する(ステップS153)。そして処理はステップS143に戻る。
このような処理を実行することで、分裂した2つの連結成分について対岸リストが生成される。
次に、データ管理部3130のパラメタ算出部3133により実行される、複雑度を算出する複雑度算出処理(ステップS11)について説明する。まず、複雑度の定義について説明する。
連結成分が多い時、及び連結成分の形状が複雑な場合、フラグメンテーテーションが進行しているため、その範囲内での空き資源の探索処理には、より多くの時間がかかると考えられる。
連結成分C⊂Xの形状の複雑度は、Cに属する頂点とXの補集合Yに属する頂点とが、どの程度多くのリンクを通して隣接しているかに基き定める。本実施の形態では、次の定義1乃至5のように定義する。
定義1:
「Cの頂点集合の要素数|C|」に対する「Cに属する頂点に隣接し、Xの補集合Yに属する頂点の数(すなわち下記の集合S1の要素数|S1|)」の割合
S1={v∈Y | ∃v1∈C vはv1と隣接する}
とすると定義1における複雑度=|S1|/|C|
定義2:
「Cの頂点集合の要素数|C|」に対する「Cに属する複数の頂点に隣接し且つXの補集合Yに属する頂点の数(すなわち下記の集合S2の要素数|S2|)」の割合
S2={v∈Y | ∃v1∈C ∃v2∈C v1≠ v2 vはv1及びv2に隣接する}
とすると定義2における複雑度=|S2|/|C|
定義3:
「Cの頂点集合の要素数|C|」に対する「Cの頂点でXの補集合Yに属する頂点と隣接するものの数(すなわち下記の集合S3の要素数|S3|)」の割合
S3={v∈C | ∃v1∈Y vはv1と隣接する}
とすると定義3における複雑度=|S3|/|C|
定義4:
「Cの頂点集合の要素数|C|」に対する「一方の頂点がCの要素であり且つ他方の頂点がYの要素である辺の数|S4|」の割合
S4={e∈E | ∃v1∈C ∃v2∈Y eはv1とv2を結ぶ辺}
とすると定義4における複雑度=|S4|/|C|
定義5:
「両端がCの頂点である辺の数|S5|」に対する「一方の頂点がCの要素であり且つ他方の頂点がYの要素であるような辺の数|S4|」の割合
S4={e∈E | ∃v1∈C ∃v2∈Y eはv1とv2を結ぶ辺}
S5={e∈E | ∃v1∈C ∃v2∈C eはv1とv2を結ぶ辺}
とすると定義5における複雑度=|S4|/|S5|
例えば、並列計算機システムのネットワークトポロジがメッシュとなっており、図16に示すように、ジョブが割り当てられた計算ノードを黒丸で表し、ジョブが割り当てられていない計算ノードを白丸で表すものとする。そうすると、上で述べた定義1乃至5の複雑度は以下のように計算される。
定義1において|S1|は、黒丸に接続された白丸の数であるから、点線で囲まれた白丸の数となる。従って、|S1|=26となる。|C|は黒丸の数であるから、|C|=38となる。従って、定義1の複雑度は、|S1|/|C|=26/38となる。
定義2において|S2|は、複数の黒丸に接続された白丸の数であるから、実線で囲まれた白丸の数となる。従って、|S2|=2となる。よって、定義2の複雑度は、|S2|/|C|=2/38となる。
定義3において|S3|は、白丸に接続された黒丸の数であるから、一点鎖線で囲まれた黒丸の数となる。従って、定義3の複雑度は、|S3|/|C|=22/38となる。
定義4において|S4|は、白丸と黒丸とを結ぶ辺の数であるから、図17の実線で囲まれた辺の数となる。従って、定義4の複雑度は、|S4|/|C|=28/38となる。
定義5において|S5|は、黒丸と黒丸とを結ぶ辺の数であるから、S4で包囲される範囲内の全辺の数となる。従って、定義5の複雑度は、|S4|/|S5|=28/62となる。
これらの複雑度及びS1乃至S5は、ジョブに対する資源の割り当て及び割り当てた資源の解放処理を契機に又は定期的に、一般にはグラフの隣接行列や接続行列に基いて次に述べるような処理にて計算する。
まず、図18を用いて、定義1の複雑度を算出するための処理について説明する。
パラメタ算出部3133は、空の集合L1に、Cに属する頂点の番号(ジョブが割り当てられている計算ノードの番号)に対応する、隣接行列の行番号リストを登録する(ステップS201)。
また、パラメタ算出部3133は、カウンタiを0に初期化する(ステップS203)。
さらに、パラメタ算出部3133は、集合L1が空であるか否かを判断する(ステップS205)。集合L1が空になると、パラメタ算出部3133は、複雑度をカウンタi/|C|によって算出する(ステップS219)。そして処理を終了する。
一方、集合L1が空でない場合には、パラメタ算出部3133は、変数mに、集合L1の先頭要素を設定し、集合L1からmを除去する(ステップS207)。
また、パラメタ算出部3133は、空の集合L2に、Yに属する頂点の番号(ジョブが割り当てられていない計算ノードの番号)に対応する、隣接行列の列番号リストを登録する(ステップS209)。
そして、パラメタ算出部3133は、集合L2が空であるか否かを判断する(ステップS211)。集合L2が空である場合には、処理はステップS205に戻る。
一方、集合L2が空ではない場合には、パラメタ算出部3133は、変数nに、集合L2の先頭要素を設定し、集合L2からnを除去する(ステップS213)。
そして、パラメタ算出部3133は、隣接行列の(m,n)成分が0であるか否かを判断する(ステップS215)。隣接行列の(m,n)成分が0である場合には、処理はステップS211に移行する。
一方、隣接行列の(m,n)成分が0ではない場合には、パラメタ算出部3133は、iを1インクリメントする(ステップS217)。そして処理はステップS211に移行する。
このような処理にて定義1の複雑度が算出される。
次に、図19を用いて定義2の複雑度を算出するための処理について説明する。
パラメタ算出部3133は、空の集合L1に、Cに属する頂点の番号(ジョブが割り当てられている計算ノードの番号)に対応する行が1である、接続行列の列番号リストを設定する(ステップS221)。
また、パラメタ算出部3133は、カウンタiを0に初期化する(ステップS223)。
さらに、パラメタ算出部3133は、集合L1が空であるか否かを判断する(ステップS225)。集合L1が空になると、パラメタ算出部3133は、複雑度をカウンタi/|C|によって算出する(ステップS233)。そして処理を終了する。
一方、集合L1が空でない場合には、パラメタ算出部3133は、変数kに、集合L1の先頭要素を設定し、集合L1からkを除去する(ステップS227)。
また、パラメタ算出部3133は、接続行列の第k列において1である要素の一方がCに属する頂点であり且つ他方がYに属する頂点に対応するか否かを判断する(ステップS229)。この条件を満たさない場合には、処理はステップS225に戻る。一方、ステップS229の条件を満たす場合には、パラメタ算出部3133は、ステップS229で検出されたYの頂点が、Cに属する複数の頂点と隣接しているか否かを判断する(ステップS231)。この条件を満たさない場合には、処理はステップS225に戻る。
一方、ステップS231の条件を満たす場合には、パラメタ算出部3133は、iを1インクリメントする(ステップS232)。そして処理はステップS225に戻る。
このような処理にて定義2の複雑度が算出される。
次に、図20を用いて定義3の複雑度を算出するための処理について説明する。
パラメタ算出部3133は、空の集合L1に、Cに属する頂点の番号に対応する行が1である、接続行列の列番号リストを設定する(ステップS251)。また、パラメタ算出部3133は、カウンタiを0に初期化する(ステップS253)。
そして、パラメタ算出部3133は、集合L1が空であるか否かを判断する(ステップS255)。集合L1が空になると、パラメタ算出部3133は、複雑度をカウンタi/|C|によって算出する(ステップS263)。そして処理を終了する。
一方、集合L1が空ではない場合には、パラメタ算出部3133は、変数kに、集合L1の先頭要素を設定し、集合L1からkを除去する(ステップS257)。
そして、パラメタ算出部3133は、接続行列の第k列で1である要素の一方が、Cの頂点に対応し且つ他方がYの頂点に対応するか否かを判断する(ステップS259)。この条件が満たされる場合には、パラメタ算出部3133は、iを1インクリメントする(ステップS261)。そして処理はステップS255に戻る。一方、ステップS259の条件が満たされない場合にも、処理はステップS255に戻る。
このような処理にて定義3の複雑度が算出される。
このように接続行列及び隣接行列を用いれば正確に複雑度を算出できる。しかしながら、一様乱数によるモンテカルロ法により、複雑度の近似計算をしてもよい。例えば、1以上|C|以下の正の整数を同じ確率でランダムに所定の回数発生させ、対応する頂点がS1、S2、S3等に属していた割合を、|S1|/|C|、|S2|/|C|、|S3|/|C|等の複雑度の近似値として用いるようにしても良い。
ここで、定義4の複雑度を、乱数を用いて算出する処理の例を図21を用いて説明する。まず、パラメタ算出部3133は、空の集合L1に、接続行列の列で頂点v(例えばCに属する頂点)に対応する要素が0でない列番号を等確率で所定個選択して設定する(ステップS271)。
また、パラメタ算出部3133は、カウンタsを0に初期化する(ステップS273)。
さらに、パラメタ算出部3133は、Cの要素数に等しい長さで、全ての要素が0である配列a[]を生成する(ステップS275)。
そして、パラメタ算出部3133は、集合L1が空であるか否かを判断する(ステップS277)。空でない場合には、パラメタ算出部3133は、eに集合L1の先頭要素を設定し、eを集合L1から除去する(ステップS279)。
さらに、パラメタ算出部3133は、接続行列において、eの0でない成分の一方がYの頂点であるか否かを判断する(ステップS281)。
この条件を満たす場合には、パラメタ算出部3133は、sを1インクリメントする(ステップS283)。また、パラメタ算出部3133は、nに、接続行列においてeの1である要素に対応する行番号を設定する(ステップS285)。そして、パラメタ算出部3133は、a[n]=1と設定する(ステップS287)。処理はステップS277に戻る。
一方、ステップS281の条件が満たされない場合には、パラメタ算出部3133は、m及びnに、接続行列においてeの1である要素に対応する行番号を設定する(ステップS289)。そして、パラメタ算出部3133は、a[n]=1及びa[m]=1を設定する(ステップS291)。そして処理はステップS277に戻る。
また、ステップS277で集合L1が空になったと判断された場合、パラメタ算出部3133は、変数kにa[]において0でない要素の数を設定する(ステップS293)。そして、パラメタ算出部3133は、s/kを|S4|/|C|の近似値として設定する(ステップS295)。
このような処理にて定義4の複雑度の近似値が得られる。
さらに、定義5の複雑度を、乱数を用いて算出する処理の例を図22を用いて説明する。
まず、パラメタ算出部3133は、空の集合L1に、接続行列の列で頂点v(例えばCに属する頂点)に対応する要素が0でない列番号を等確率で所定個選択して設定する(ステップS301)。
また、パラメタ算出部3133は、カウンタsを0に初期化する(ステップS303)。さらに、パラメタ算出部3133は、カウンタtを0に初期化する(ステップS305)。
そして、パラメタ算出部3133は、集合L1が空か否かを判断する(ステップS307)。空でない場合には、パラメタ算出部3133は、eに集合L1の先頭要素を設定し、eを集合L1から除去する(ステップS309)。
そして、パラメタ算出部3133は、接続行列において、eの0でない成分の一方がYの頂点であるか否かを判断する(ステップS311)。この条件が満たされる場合には、パラメタ算出部3133は、sを1インクリメントする(ステップS313)。そして処理はステップS307に移行する。一方、この条件が満たされない場合には、パラメタ算出部3133は、tを1インクリメントする(ステップS315)。そして処理はステップS307に戻る。
ステップS307で集合L1が空であると判断されると、パラメタ算出部3133は、t/sを、|S4|/|S5|の近似値として設定する(ステップS319)。
このような処理を行うことで、複雑度が算出される。
このような複雑度は、連結成分IDに対応付けて例えばスレーブスケジューラノード310からマスタスケジューラノード300に送信され、マスタスケジューラノード300は、連結成分IDに対応付けて複雑度を、データ格納部3010に格納する。
その後、後に述べる探索処理をスレーブスケジューラノード310が実行すると、探索の基準とした連結成分の連結成分IDと対応付けて、連結成分の数、ジョブを割り当てられる計算ノード200を検出できたか否かを表すデータ及び処理時間(負荷評価指標の一例)のデータも、スレーブスケジューラノード310からマスタスケジューラノード300に送信される。マスタスケジューラノード300は、連結成分IDに対応付けて、連結成分の数、ジョブを割り当てられる計算ノード200を検出できたか否かを表すデータ及び処理時間のデータを、データ格納部3010に格納する。探索処理を実行した処理要素の数を含めるようにしても良い。
マスタスケジューラノード300のデータ管理部3040における式推定部3041は、データ格納部3010に、スレーブスケジューラノード310から受信したデータがある程度蓄積されると、処理時間の推定式を生成する。
第1の方法としては、一定範囲内におけるジョブが割り当て済みとなっている計算ノードの連結成分の数と、それらの連結成分の複雑度(5つの定義の少なくとも1つ)を説明変数とし、処理時間を非説明変数とする推定式を、例えば重回帰分析又はカルマンフィルタによって回帰式を生成する。例えば、一定範囲内に連結成分が3つあれば、複雑度としては3つの複雑度の和などを用いる。
なお、説明変数は、連結成分の数及びそれらの連結成分の複雑度の代わりに、それらの任意の単調増加関数(指数関数、指数が正のべき乗関数、対数など)を用いても良い。さらに、連結成分の数及び複雑度に加えて、それらの少なくともいずれかの単調増加関数を採用するようにしても良い。
なお、処理時間については、適切な性能モデルを用意して、シミュレーションによって得られた値を用いるようにしても良い。
式推定部3041は、このように生成した推定式のデータについては、データ格納部3010に格納しておく。
第2の方法としては、ジョブが割り当てられる計算ノード200を検出できる確率である成功確率をも予想する。このように予測された成功確率が大きい分担範囲に対して、より多くの計算ノードを配分することが意味を有する場合があるためである。
ここでは、このような成功確率の推定に対してベイズ推定を行う。そして、ベイズ推定の方法としては、例えば各説明変数が全て独立とみなして計算する手法を採用する。説明変数は、第1の方法で述べた説明変数を用いても良いが、具体的な形については第1の方法とは異なる場合もある。なお、ベイズ推定におけるパラメタ変換については、カーネル法など、さまざまな手法が知られているので、いずれかを用いる。このような成功確率を推定するためのデータは、データ格納部3010に格納される。場合によっては、重回帰分析を行うようにしても良い。
さらに、第2の方法では、このように予測された成功確率も考慮して、カルマンフィルタに基づいて処理時間を推定するためのデータを生成し、データ格納部3010に格納しておく。
次に、マスタスケジューラノード300の主要な動作について説明する。
図23に、マスタスケジューラノード300のメインの処理フローを示す。
マスタスケジューラノード300の探索制御部3020は、ネットワーク20に接続された他の端末などからの新規ジョブを受け付ける(ステップS401)。新規ジョブのデータとしては、ジョブID、ユーザID、計算資源のサイズ(N(Nは整数)次元であれば各次元において使用する計算ノード200の個数など。時間をも含む。)等のデータを含む。なお、新規ジョブのキューなどから、今回処理すべきジョブを読み出すようにしても良い。
そうすると、探索制御部3020は、処理時間の見積もり処理を実行する(ステップS403)。この処理については、図24を用いて説明する。但し、上で述べた処理時間の推定式などの、処理時間を推定するためのデータを用いて、予め定められた分担範囲毎(例えば、連結成分毎。但し、分担範囲には複数の連結成分を含む場合もある。)に処理時間を見積もる。
その後、探索制御部3020は、見積もられた処理時間に応じて各分担範囲に対して、探索処理を行うための資源の配分を決定する(ステップS405)。例えば、見積もられた処理時間の比に応じて資源を配分する。より具体的には、4つの分担範囲があって、10:5:3:1という処理時間の比が得られた場合には、第1の分担範囲には10個の資源を割り当て、第2の分担範囲には5つの資源を割り当て、第3の分担範囲には3つの資源を割り当て、第4の分担範囲には1つの資源を割り当てる。基本的にスレーブスケジューラノード310を割り当てるが、ジョブが割り当てられていない計算ノード200を割り当てても良い。
そして、探索制御部3020は、資源配分の結果に基づきスレーブスケジューラノード310(場合によっては計算ノード200を含む)に対して探索処理を実行させる(ステップS407)。探索処理については、図25及び図26を用いて説明する。例えば、各分担範囲について、例えば連結成分の基準点から当該連結成分の対岸となる連結成分までに、新規ジョブを割り当てられる計算ノード200が存在するか否かを判断する。スレーブスケジューラノード310は、探索結果を、マスタスケジューラノード300に送信する。探索結果は、新規ジョブを割り当てられる計算ノード200が検出できた場合には、例えば、検出成功を表すデータと、処理時間と、新規ジョブを割り当てられる計算ノード200を特定するためのデータとを含む。新規ジョブを割り当てられる計算ノード200を検出できなかった場合には、探索結果は、例えば、検出失敗を表すデータと、処理時間とを含む。
そして、ジョブ配置処理部3030は、探索結果の評価処理を実行する(ステップS409)。探索結果の評価処理については、図27乃至図30を用いて説明する。例えば、新規ジョブ配置のためのポリシーに応じた探索結果の評価によって、新規ジョブを割り当てられる計算ノード200のうちいずれを採用するのかを決定するための処理が行われる。
その後、ジョブ配置処理部3030は、評価結果に基づき、新規ジョブを計算ノード200に配置するための処理を実行する(ステップS411)。具体的には、評価結果に基づき特定される計算ノード200に対して新規ジョブの実行を指示する。
なお、この後に、上で述べた複雑度の更新結果を受信すると、処理時間の推定式などの更新を行うようにしても良い。
このような処理を行うことで、システム全体として並列的な探索処理が効率的に行われ、新規ジョブが適切な計算ノード200に配置されるようになる。
次に、処理時間の見積もり処理(ステップS403)の一例について図24を用いて説明する。
探索制御部3020は、空の集合Lに対して、分担範囲のリストを設定する(ステップS421)。そして、探索制御部3020は、集合Lが空であるか否かを判断する(ステップS423)。集合Lが空であれば、呼び出し元の処理に戻る。
一方、集合Lが空でない場合には、探索制御部3020は、変数aに、集合Lにおける先頭の分担範囲を設定する(ステップS425)。また、探索制御部3020は、集合Lから変数aを除去する(ステップS427)。
そして、探索制御部3020は、分担範囲aにおける探索処理の所要時間(すなわち処理時間)を、例えばデータ格納部3010に格納されている推定式のデータ及び当該分担範囲aのデータを用いて推定する(ステップS429)。より詳しくは、データ格納部3010には、分担範囲aについての複雑度のデータ及び含まれる連結成分の数が格納されており、これらのデータを推定式に代入することで、処理時間を算出し、例えばデータ格納部3010に格納する。そして処理はステップS423に戻る。
以上のような処理を実施すれば、各分担範囲について処理時間の見積もりが行われる。
次に、スレーブスケジューラノード310によって実行される探索処理(ステップS407)の一例について図25及び図26を用いて説明する。なお、ここではN次元メッシュ又はトーラスといったグラフを想定した処理を示すが、これは対岸リストによって処理が高速化するという点を分かりやすくするためである。
まず、探索処理部3120は、新規ジョブJのデータを取得する(ステップS441)。上で述べたように、新規ジョブJのデータは、ジョブID、ユーザID、計算資源のサイズ等を含み、マスタスケジューラノード300から得られる。
そして、探索処理部3120は、新規ジョブJの各次元iのサイズを、変数s(i)(iは1以上N以下)に設定する(ステップS443)。さらに、探索処理部3120は、空の集合CLに対して、自らの分担範囲に対して予め定められた探索基準点のリストを設定する(ステップS445)。探索基準点は、例えば、分担範囲に複数の連結成分が存在する場合には、各連結成分について少なくとも1つは設定される。
そして、探索処理部3120は、集合CLが空であるか否かを判断する(ステップS447)。集合CLが空である場合には、探索処理部3120は、探索結果に対して検出失敗を設定し、探索結果をマスタスケジューラノード300に送信する(ステップS455)。そして処理は呼び出し元の処理に戻る。なお、探索結果と共に処理時間を併せて送信するようにしても良い。
一方、集合CLが空ではない場合には、探索処理部3120は、集合CLから、1つの探索基準点cを取り出し、cを集合CLから除去する(ステップS449)。そして、探索処理部3120は、空の集合J1に対して、cに隣接するジョブを設定する(ステップS451)。例えば、cを含むジョブについて設定されている隣接ジョブのリストを集合J1に設定する。隣接ジョブは複数存在する可能性がある。なお、隣接ジョブが存在しない場合には、cについてのジョブを集合J1に設定する。
そして、探索処理部3120は、集合J1が空か否かを判断する(ステップS452)。集合J1が空の場合には、処理はステップS447に戻る。一方、集合J1が空ではない場合には、探索処理部3120は、集合J1から、1つのジョブJ2を取り出し、集合J1からジョブJ2を除去する(ステップS453)。
さらに、探索処理部3120は、集合SLに対して、ジョブJ2の各次元の対岸リストを設定する(ステップS454)。そして処理は端子Aを介して図26の処理に移行する。
端子Aを介して図26の処理の説明に移行して、探索処理部3120は、集合SLが空であるか否かを判断する(ステップS456)。集合SLが空であれば、処理は端子Bを介してステップS452に戻る。
一方、集合SLが空ではない場合には、探索処理部3120は、集合SLから、対岸リストに含まれる1つのジョブSを取り出し、ジョブSを集合SLから除去する(ステップS457)。
そして、探索処理部3120は、ジョブSの対岸リストがジョブJ2を含み、且つジョブJ2はcとジョブSとで挟まれるか否かを判断する(ステップS459)。これは、探索基準点cに係るジョブを含む連結成分について対岸であるジョブSから見て、探索基準点cと隣接ジョブJ2とジョブSとの位置関係が、隣接ジョブJ2とジョブSとの間の空き資源を探索するという観点において適切であるか否かを確認するものである。この条件を満たさない場合には、処理はステップS456に戻る。
ステップS459の条件が満たされる場合には、探索処理部3120は、d(i)に、各次元i(iは1以上N以下の整数)におけるジョブJ2とジョブSとの距離を設定する(ステップS461)。距離は、例えば間に存在する計算ノード200の数である。
そして、探索処理部3120は、いずれかのiについてs(i)≦d(i)となっているかを判断する(ステップS463)。全てのiについてs(i)≦d(i)となっているかを判断するようにしても良い。この条件が満たされない場合には、処理はステップS456に移行する。
一方、ステップS463の条件が満たされた場合には、探索処理部3120は、探索結果を、例えばマスタスケジューラノード300に送信する(ステップS465)。そして、処理は端子Cを介して呼び出し元の処理に戻る。なお、探索結果には、探索基準点cが含まれる場合もあれば、例えばジョブJ2とジョブSを特定するためのデータの場合もある。
なお、この処理では、条件を満たす1つの空き資源が得られると処理を終了するが、より多くの空き資源を見つけるように処理内容を変更しても良い。例えば、ステップS465からステップS456に戻るようにして、ステップS455についても、それまでに検出された空き資源についてのデータを含む探索処理を、マスタスケジューラノード300に送信しても良い。
さらに、この探索処理では、探索基準点毎に、さらに処理を並列化させることで処理の高速化が図られる。すなわち、探索範囲に複数のスレーブスケジューラノード310(ジョブが割り当てられていない計算ノード200である場合も含む)が割り当てられた場合には、探索基準点毎に処理を分担すればよい。
次に、探索結果の評価処理(ステップS409)の一例について図27乃至図30を用いて説明する。
まず、マスタスケジューラノード300のジョブ配置処理部3030は、カウンタ変数countに0を設定する(ステップS501)。そして、ジョブ配置処理部3030は、カウンタ変数countの値が分担範囲数より小さいか否かを判断する(ステップS503)。
カウンタ変数countの値が分担範囲数より小さい場合には(ステップS503:Noルート)、ジョブ配置処理部3030は、スレーブスケジューラノード310からの探索結果を待機し、探索結果のデータを受信すると、例えばデータ格納部3010に格納する(ステップS505)。
そうすると、ジョブ配置処理部3030は、カウンタ変数countを1インクリメントし(ステップS507)、受信した探索結果が空き資源検出を示しているか否かを判断する(ステップS509)。受信した探索結果が空き資源検出を示していない場合には、処理はステップS503に戻る。
一方、受信した探索結果が空き資源検出を示している場合には、ジョブ配置処理部3030は、検出した空き資源に新規ジョブを割り当てた場合における評価値を算出し、当該空き資源に対応付けてデータ格納部3010に格納する(ステップS511)。そして処理はステップS503に戻る。
本処理フローでは、新規ジョブの要求に適合する空き資源が複数見つかった場合は、何らかの評価基準に基づき評価値を算出し、最も評価値が高い空き資源を選択する。これは、一般的にはベストフィットと呼ばれる割り当てポリシーであるが、用いられる評価基準は、必ずしもジョブを割り当てる資源の「形状」に関するもののみに限定されない。
例えば、「評価基準」として「使用可能時間帯が早いほどよい」という条件を設定すると、結果的に時間軸に関する割り当てポリシーとして「先着優先」を実現することになる。さらに、「使用可能時間帯が同じ場合は、割り当て後のフラグメンテーションの進行度が小さいほどよい」という条件や、「ジョブが有する1又は複数の属性についての一致度が高いほどよい」という基準にしてもよい。
一方、カウンタ変数countの値が分担範囲数以上となると(ステップS503:Yesルート)、ジョブ配置処理部3030は、評価値が最良である空き資源(大きい方が良い場合には評価値最大の空き資源、小さい方が良い場合には評価値最小の空き資源)を選択する(ステップS513)。なお、評価値が算出された空き資源が存在しない場合もあるので、そのような場合には、本処理を終了して、以降の処理を停止する。
そして、ジョブ配置処理部3030は、探索処理を行った処理要素(計算ノード200を含む)を、選択された空き資源が含むか否かを判断する(ステップS515)。ジョブが割り当てられていない計算ノード200をスレーブスケジューラノード310として用いている場合、その計算ノード200に新規ジョブが割り当てられるようになるのか否かを確認するものである。
探索処理を行った処理要素を、選択された空き資源が含む場合には、ジョブ配置処理部3030は、その処理要素による探索処理を停止させる(ステップS517)。そして処理は呼び出し元の処理に戻る。一方、探索処理を行った処理要素を、選択された空き資源が含まない場合にも、処理は呼び出し元の処理に戻る。
なお、探索結果の評価処理(ステップS409)については図28の処理を採用しても良い。
まず、マスタスケジューラノード300のジョブ配置処理部3030は、カウンタ変数countに0を設定する(ステップS521)。そして、ジョブ配置処理部3030は、カウンタ変数countの値が分担範囲数より小さいか否かを判断する(ステップS523)。
カウンタ変数countの値が分担範囲数より小さい場合には(ステップS523:Yesルート)、ジョブ配置処理部3030は、スレーブスケジューラノード310からの探索結果を待機し、探索結果のデータを受信すると、例えばデータ格納部3010に格納する(ステップS525)。
そうすると、ジョブ配置処理部3030は、カウンタ変数countを1インクリメントし(ステップS527)、受信した探索結果が空き資源検出を示しているか否かを判断する(ステップS529)。受信した探索結果が空き資源検出を示していない場合には、処理はステップS523に戻る。
一方、受信した探索結果が空き資源検出を示している場合には、ジョブ配置処理部3030は、検出した空き資源に新規ジョブを割り当てた場合における評価値を算出する(ステップS531)。評価基準については、上で述べた例と同様である。
ここで、本実施の形態では、ジョブ配置処理部3030は、算出された評価値が閾値以上であれば(ステップS533:Noルート)、今回の探索結果についての空き資源を選択する(ステップS535)。そして処理は呼び出し元の処理に戻る。
このように、評価値が閾値以上である空き資源を検出すれば直ぐに、その空き資源に新規ジョブを割り当てるものである。
一方、算出された評価値が閾値未満である場合には(ステップS533:Noルート)、ジョブ配置処理部3030は、評価値を当該空き資源に対応付けてデータ格納部3010に格納する(ステップS537)。そして処理はステップS523に戻る。
一方、カウンタ変数countの値が分担範囲数以上となると(ステップS523:Noルート)、ジョブ配置処理部3030は、新規ジョブを配置可能な空き資源が検出されたか否かをデータ格納部3010に格納されているデータから判断する(ステップS539)。一度もステップS531に処理が移行していない場合には、データ格納部3010に空き資源に対して評価値が格納されることがないので、空き資源に対応付けて評価値が格納されているか否かを判断する。
新規ジョブを配置可能な空き資源が存在しない場合には、ジョブ配置処理部3030は、割り当て不能を設定する(ステップS543)。そして、呼び出し元の処理に戻るが、これ以降の処理は行われない。
一方、新規ジョブを配置可能な空き資源が存在する場合には、ジョブ配置処理部3030は、評価値が最良である空き資源を選択する(ステップS541)。そして処理は呼び出し元の処理に戻る。
次に、処理時間の見積もり処理の第2の例について図29を用いて説明する。
第2の例では、最初に見つかった空き資源を他の探索結果を考慮せずに割り当てる「ファーストフィット」と呼ばれる割り当てポリシーを採用する場合を想定する。
このような割り当てポリシーでは、割り当ての成功確率も予想し、成功確率が大きい分担範囲に、より多くの処理要素を配分することが意味を有する場合がある。図28のように、評価値が閾値以上である空き資源を検出すれば直ぐにその空き資源に新規ジョブを割り当てるようなポリシーを採用する場合も同様である。
そこで、探索制御部3020は、空の集合Lに対して、分担範囲のリストを設定する(ステップS601)。そして、探索制御部3020は、集合Lが空であるか否かを判断する(ステップS603)。集合Lが空であれば、呼び出し元の処理に戻る。
一方、集合Lが空でない場合には、探索制御部3020は、変数aに、集合Lにおける先頭の分担範囲を設定する(ステップS605)。また、探索制御部3020は、集合Lから変数aを除去する(ステップS607)。
そして、探索制御部3020は、分担範囲aにおける成功確率を、例えばデータ格納部3010に格納されている、成功確率を推定するためのデータ及び分担範囲aのデータを用いて推定する(ステップS609)。ベイズ推定によって得られた、成功確率を推定するためのデータと、分担範囲aについての複雑度のデータ及び連結成分の数などとから、成功確率を推定する。
さらに、探索制御部3020は、分担範囲aにおける探索処理の所要時間(すなわち処理時間)を、例えばデータ格納部3010に格納されている推定式のデータ及び当該分担範囲aのデータに加えて、算出された成功確率を用いて推定する(ステップS611)。さらに、分担範囲aについての複雑度のデータ及び含まれる連結成分の数と、成功確率とから、例えばカルマンフィルタによって処理時間を算出し、例えばデータ格納部3010に格納する。そして処理はステップS603に戻る。
以上のような処理を実施すれば、各分担範囲について、成功確率をも加味した上で処理時間の見積もりが行われる。
そして、評価処理(ステップS409)では、図30に示すような処理が行われる。
すなわち、マスタスケジューラノード300のジョブ配置処理部3030は、カウンタ変数countに0を設定する(ステップS621)。そして、ジョブ配置処理部3030は、カウンタ変数countの値が分担範囲数より小さいか否かを判断する(ステップS623)。
カウンタ変数countの値が分担範囲数より小さい場合には(ステップS623:Yesルート)、ジョブ配置処理部3030は、スレーブスケジューラノード310からの探索結果を待機し、探索結果のデータを受信すると、例えばデータ格納部3010に格納する(ステップS625)。
そうすると、ジョブ配置処理部3030は、カウンタ変数countを1インクリメントし(ステップS627)、受信した探索結果が空き資源検出を示しているか否かを判断する(ステップS629)。受信した探索結果が空き資源検出を示していない場合には、処理はステップS623に戻る。
一方、受信した探索結果が空き資源検出を示している場合には、ジョブ配置処理部3030は、この探索結果についての空き資源を選択する(ステップS631)。そして処理は呼び出し元の処理に戻る。
一方、カウンタ変数countの値が分担範囲数以上となると(ステップS623:Noルート)、ジョブ配置処理部3030は、割り当て不能を設定する(ステップS633)。そして処理は呼び出し元の処理に戻る。但し、この場合、以降の処理は停止する。
[Appendix]
上では、ジョブを管理するための簡易的なデータ構造を示したが、以下、n次元メッシュ又はトーラスである場合の具体例について説明する。
図31に、実行待ちのジョブに関するデータを示す。図31に示すように、ジョブを特定するジョブID(識別子)に対して、利用者ID、ジョブ属性値及び各次元の大きさを関連付けている。各次元の大きさは、実行に要する計算ノードで占められる領域の各次元(第1乃至第N次元)の大きさである。
図32に、実行中のジョブに関するデータであるジョブ制御表を示す。
本実施の形態に係るジョブ制御表は、ジョブIDに対して、利用者ID、開始予定時刻、終了予定時刻、各次元の最大値、各次元の最小値、及び関連データにアクセスするためのデータを含む。各次元の最大値と各次元の最小値は、実行中の各ジョブが使用しているノード座標の各次元の最大値と最小値である。
関連データにアクセスするためのデータは、使用時間帯及び各次元についてのハッシュテーブル内次ジョブ、使用時間帯及び各次元についてのハッシュテーブル内前ジョブ、使用時間帯及び各次元についての隣接リスト内起点、使用時間帯及び各次元についての隣接リスト内終点、隣接リスト起点、隣接リスト終点、ジョブについての対岸リスト始点及び終点、及び連結成分制御表へのポインタを含む。
ハッシュテーブル内次ジョブというのは、各次元での座標の最小値又は最大値をキーとするハッシュ表(図36(a)乃至(c))の「ハッシュバケツ」内の次ジョブへのポインタである。同様に、ハッシュテーブル内前ジョブというのは、各次元での座標の最小値又は最大値をキーとするハッシュ表(図36(a)乃至(c))の「ハッシュバケツ」内の前ジョブへのポインタである。なお、最後のジョブでは空ポインタとなる。
使用時間帯及び各次元についての隣接リスト内起点は、使用時間帯及び各次元に関して、隣接リストの起点へのポインタである。使用時間帯及び各次元についての隣接リスト内終点は、使用時間帯及び各次元に関して、隣接リストにおける終点へのポインタである。
また、本具体例では、ジョブについての全体の隣接リストも設けられており、隣接リスト起点については、全体の隣接リストにおける起点へのポインタである。同様に、隣接リスト終点については、全体の隣接リストにおける終点へのポインタである。
対岸リスト起点及び終点は、ジョブについての対岸リストにおける起点及び終点へのポインタである。連結成分制御表へのポインタは、本ジョブが属する連結成分についての制御表へのポインタである。
本実施の形態では、図33に示すように連結成分についての制御表である連結成分制御表をも保持される。
連結成分制御表は、連結成分ID、連結成分内の最早開始時間及び最遅終了時間(時間帯)、連結成分内における各次元の最小値及び最大値、使用時間帯及び各次元についての隣接リストにおける起点、使用時間帯及び各次元についての隣接リストにおける終点、隣接リスト起点及び終点、並びに対岸リスト起点及び対岸リスト終点を含む。この他に、連結成分の構成要素についてのジョブ構成リストへのポインタを有する場合もある。
本具体例では、本連結成分についての全体の隣接リストも設けられており、隣接リスト起点及び終点は、全体の隣接リストにおける起点及び終点へのポインタである。
対岸リスト起点及び終点は、連結成分についての対岸リストにおける起点及び終点へのポインタである。
図34に、ジョブについての対岸リストの1ブロックの一例を示す。対岸リストは、1又は複数のブロックを含む場合があり、対岸リストに含まれる各ジョブについてのジョブ制御表へのポインタ、次のブロックへのポインタ、及び前のブロックへのポインタを含む。このようにすれば対岸リストが大きくなった場合に、複数のブロックで管理できる。
同様に、図35に、連結成分についての対岸リストの1ブロックの一例を示す。連結成分についての対岸リストは、1又は複数のブロックを含む場合があり、対岸リストに含まれる各連結成分についての連結成分制御表へのポインタ、次のブロックへのポインタ、及び前のブロックへのポインタを含む。このようにすれば連結成分制御表についても対岸リストが大きくなった場合に、複数のブロックで管理できる。
なお、ジョブ及び連結成分についての隣接リストについても、これらの構造と同様の構成を有する。
次に、ハッシュテーブルについて説明する。ハッシュテーブルは、ノード座標空間に割り当てられている実行中ジョブの位置(ノード座標位置)を管理する実行中ジョブ位置情報である。このハッシュテーブルは、探索処理の鍵となる情報である。
ハッシュテーブルは、ノード座標空間における、実行中ジョブの各次元のノード座標値をキーとする(N個の)ハッシュの情報である。
図36(a)、(b)及び(c)はハッシュテーブルを説明するための図である。図36(a)はメッシュを例示する図であり、図36(b)は図36(a)に示すメッシュの縦座標の次元に関する実行中ジョブのハッシュ表を示し、図36(c)は図36(a)に示すメッシュの横座標の次元に関する実行中ジョブのハッシュ表を示す。
ハッシュテーブルは、ノード座標空間に割り当てられている実行中ジョブの位置(ノード座標位置)を、ノード座標空間を構成する次元軸毎に対応させて管理する。
例えば、図36(a)に示すメッシュのノード座標空間は、横座標方向(横座標の次元)と縦座標方向(縦座標の次元)とを備える。このようなノード座標空間においては、ハッシュテーブルは、横座標の次元に関するハッシュテーブル(図36(c)参照)と縦座標の次元に関するハッシュテーブル(図36(b)参照)とを含む。
そして、ハッシュテーブルには、各ジョブについて、各次元でのノード座標の最小値及び最大値に対応するエントリに、ジョブ制御表内で、そのジョブに対応するエントリへのポインタを格納する。
図36(a)に示すように、9(横軸)×7(縦軸)のメッシュ座標にjob1乃至job5で示される5つのジョブが割り当てられている。例えば、この図36(a)において、job4の四隅(頂点)の座標(ノード座標)は(1,4),(4,4),(1,6),(4,6)である。従って、このjob4のノード座標の横軸側の最大値は4であり最小値は1である。
この場合に、図36(c)に示すように、横座標の次元のハッシュテーブルにおいては、座標値1に対応するエントリと座標値4に対応するエントリとのそれぞれにjob4が関連付けられる。同様に、このjob4のノード座標の縦軸側の最大値は6であり最小値は4であるので、図36(b)に示すように、縦座標の次元のハッシュテーブルにおいては、座標値4に対応するエントリと座標値6に対応するエントリとのそれぞれにjob4が関連付けられる。
これらの関連付け、すなわちハッシュテーブルへの登録は、具体的には、座標の最小値および最大値をキーにして、対応するジョブのジョブ制御表(図32)へのポインタが登録される。また、このジョブ制御表へのポインタの登録は、当該ジョブの実行開始時に登録される。
なお、ハッシュ値の衝突は、「ハッシュバケツ法」で処理する。すなわち、同一キーに対応する構造体をポインタで連結する。キーの衝突はハッシュバケツ法、すなわち、ポインタ格納領域をキューイングする方法で処理する。
また、上ではスレーブスケジューラノード310は、対岸リストを保持するようにしていたが、空き計算ノード200を探索処理の処理要素として使用している場合、2次以上の近傍との情報共有(例えば、探索が終了した事の通知)により、処理効率が向上する場合もある。例えば「最も早く見つかった割り当て可能な空き資源を割り当てる」ポリシー(すなわちファーストフィット)の場合に「見つかったので他の処理要素での処理を打ち切る」ための通信を、実際に資源を割り当てるコンポーネントへの通知と同時に開始する場合などが該当する。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で述べた機能ブロック図は、プログラムモジュール構成とは一致しない場合もある。また、処理フローについても、処理結果が変わらない限り、処理の順番を入れ替えたり、複数ステップの順番を入れ替えても良い。
また、上で述べたように、スレーブスケジューラノード310で実行される処理は、マスタスケジューラノード300で実行される場合もある。データについても、スレーブスケジューラノード310が保持するデータを、マスタスケジューラノード300においても保持する場合がある。
また、上の説明では、ジョブについての処理においては、ジョブが特定されると当該ジョブに割り当てられた計算ノードが特定されるようにしているが、ジョブが割り当てられた計算ノード200についての部分グラフに対応付けてジョブなどのデータが管理されるような場合もある。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態の第1の態様に係る情報処理方法は、(A)計算機システムにおける計算資源を表す複数の頂点及び計算資源間のリンクを表す複数の辺を含むグラフにおける、1又は複数の第1のジョブが割り当てられた第1の計算資源についての第1の部分グラフ又は上記1又は複数の第1のジョブに対して、上記グラフにおいてジョブが割り当てられていない計算資源についての頂点を介して第1の部分グラフに接続され且つ第2のジョブが割り当てられた第2の計算資源についての第2の部分グラフ又は第2のジョブについてのデータを管理し、(B)上記データを用いて、第3のジョブを割り当てるべき第3の計算資源の有無を、第1の部分グラフから判断する処理を含む。
このように前もって上記のようなデータを維持管理すれば、第3のジョブを割り当てるべき第3の計算資源の有無を判断する処理が高速化される。
また、上で述べた管理する処理が、(a1)第4のジョブが新たに割り当てられた第4の計算資源についての第4の部分グラフについてのデータを受信する場合、又は第5のジョブについて割り当てられ且つ当該第5のジョブの終了によって解放された第5の計算資源についての第5の部分グラフについてのデータを受信する場合、上記データを更新する処理を含むようにしても良い。このような場合には、第2の部分グラフが変化する可能性があるためである。
さらに、上で述べた更新する処理を、上で述べた判断する処理を行っていない時間帯に実行するようにしても良い。このようにすれば、第3のジョブを割り当てるべき第3の計算資源の有無を判断する処理に影響を与えることなく、上記データの更新を行うことができるようになる。
本実施の形態の第2の態様に係る情報処理方法は、(A)計算機システムにおける計算資源を表す複数の頂点及び計算資源間のリンクを表す複数の辺を含むグラフにおいて、(a1)あるジョブが割り当てられた計算資源についての部分グラフに属する頂点の数に対する部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、(a2)部分グラフに属する頂点の数に対する部分グラフに属する複数の頂点に隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、(a3)部分グラフに属する頂点の数に対する部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点と隣接し且つ部分グラフに属する頂点の数の割合と、(a4)部分グラフに属する頂点に対する、一方の頂点が部分グラフに属するが他方の頂点が部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合と、(a5)部分グラフに属する頂点間の辺の数に対する一方の頂点が部分グラフに属するが他方の頂点が部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合とのうち少なくともいずれかを取得し、(B)取得された割合に基づき、部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するのに要する負荷に関する指標値を算出する処理を含む。
このように、計算機システムを表すグラフに対する新たなパラメタ(例えば実施の形態における複雑度)を導入することで、計算資源の探索に要する負荷に関する指標値を適切に算出することができるようになる。
また、第2の態様に係る情報処理方法は、上記指標値に基づき、部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するための処理要素数を決定する処理をさらに含むようにしても良い。このようにすれば、並列して探索処理を行わせても、処理時間に大きな偏りが生じないようにすることができるようになる。
さらに、上で述べた算出する処理が、(b1)取得された割合から部分グラフを基準に他のジョブを割り当てるべき計算資源の探索が成功する確率を、予め設定された第1のデータに基づき算出し、(b2)取得された割合と算出された確率とに基づき、予め設定された第2のデータに基づき指標値を算出する処理を含むようにしても良い。例えば確率が高い部分グラフに対してより多くの処理要素を割り当てるようにしても良い。
また、第2の態様に係る情報処理方法は、上で述べた取得する処理と上で述べた算出する処理とを、複数の部分グラフについて実施する処理をさらに含むようにしても良い。この場合、上で述べた決定する処理が、複数の部分グラフについて算出された複数の指標値に応じて、処理要素数を複数の部分グラフの各々について決定する処理を含むようにしても良い。
なお、上で述べたような処理をプロセッサ又はコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
計算機システムを管理するジョブ管理装置に、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおける、1又は複数の第1のジョブが割り当てられた第1の計算資源についての第1の部分グラフ又は前記1又は複数の第1のジョブに対して、前記グラフにおいてジョブが割り当てられていない計算資源についての頂点を介して前記第1の部分グラフに接続され且つ第2のジョブが割り当てられた第2の計算資源についての第2の部分グラフ又は前記第2のジョブについてのデータを管理させ、
前記データを用いて、第3のジョブを割り当てるべき第3の計算資源の有無を、前記第1の部分グラフから判断させる、
ジョブ管理プログラム。
(付記2)
前記ジョブ管理プログラムにおいて、
前記管理させる処理が、
第4のジョブが新たに割り当てられた第4の計算資源についての第4の部分グラフについてのデータを受信する場合、又は第5のジョブについて割り当てられ且つ当該第5のジョブの終了によって解放された第5の計算資源についての第5の部分グラフについてのデータを受信する場合、前記データを更新させる処理
を含む付記1記載のジョブ管理プログラム。
(付記3)
前記ジョブ管理プログラムにおいて、
前記ジョブ管理装置に、
前記更新させる処理を、前記判断させる処理を行っていない時間帯に実行させる
付記2記載のジョブ管理プログラム。
(付記4)
計算機システムを管理するジョブ管理装置に、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおいて、あるジョブが割り当てられた計算資源についての部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに属する複数の頂点に隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点と隣接し且つ前記部分グラフに属する頂点の数の割合と、前記部分グラフに属する頂点に対する、一方の頂点が前記部分グラフに属するが他方の頂点が前記部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合と、前記部分グラフに属する頂点間の辺の数に対する一方の頂点が前記部分グラフに属するが他方の頂点が部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合とのうち少なくともいずれかを取得させ、
取得された前記割合に基づき、前記部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するのに要する負荷に関する指標値を算出させる
ジョブ管理プログラム。
(付記5)
前記ジョブ管理プログラムはさらに、
前記ジョブ管理装置に、
前記指標値に基づき、前記部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するための処理要素数を決定させる
付記4記載のジョブ管理プログラム。
(付記6)
前記ジョブ管理プログラムにおいて、
前記算出させる処理が、
取得された前記割合から前記部分グラフを基準に他のジョブを割り当てるべき計算資源の探索が成功する確率を、予め設定された第1のデータに基づき算出させ、
取得された前記割合と算出された前記確率とに基づき、予め設定された第2のデータに基づき前記指標値を算出させる
処理を含む付記4又は5記載のジョブ管理プログラム。
(付記7)
前記ジョブ管理プログラムはさらに、
前記ジョブ管理装置に、
前記取得させる処理と前記算出させる処理とを、複数の前記部分グラフについて実施させ、
前記決定させる処理は、
複数の前記部分グラフについて算出された複数の指標値に応じて、前記処理要素数を複数の前記部分グラフの各々について決定させる
処理を含む付記5記載のジョブ管理プログラム。
(付記8)
計算機システムを管理するジョブ管理装置が、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおける、1又は複数の第1のジョブが割り当てられた第1の計算資源についての第1の部分グラフ又は前記1又は複数の第1のジョブに対して、前記グラフにおいてジョブが割り当てられていない計算資源についての頂点を介して前記第1の部分グラフに接続され且つ第2のジョブが割り当てられた第2の計算資源についての第2の部分グラフ又は前記第2のジョブについてのデータを管理し、
前記データを用いて、第3のジョブを割り当てるべき第3の計算資源の有無を、前記第1の部分グラフから判断する
ジョブ管理方法。
(付記9)
計算機システムを管理するジョブ管理装置が、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおいて、あるジョブが割り当てられた計算資源についての部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに属する複数の頂点に隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点と隣接し且つ前記部分グラフに属する頂点の数の割合と、前記部分グラフに属する頂点に対する、一方の頂点が前記部分グラフに属するが他方の頂点が前記部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合と、前記部分グラフに属する頂点間の辺の数に対する一方の頂点が前記部分グラフに属するが他方の頂点が部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合とのうち少なくともいずれかを取得し、
取得された前記割合に基づき、前記部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するのに要する負荷に関する指標値を算出する
ジョブ管理方法。
(付記10)
計算機システムを管理するジョブ管理装置において、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおける、1又は複数の第1のジョブが割り当てられた第1の計算資源についての第1の部分グラフ又は前記1又は複数の第1のジョブに対して、前記グラフにおいてジョブが割り当てられていない計算資源についての頂点を介して前記第1の部分グラフに接続され且つ第2のジョブが割り当てられた第2の計算資源についての第2の部分グラフ又は前記第2のジョブについてのデータを管理する管理部と、
前記データを用いて、第3のジョブを割り当てるべき第3の計算資源の有無を、前記第1の部分グラフから判断する判断部と、
を有するジョブ管理装置。
(付記11)
計算機システムを管理するジョブ管理装置において、
前記計算機システムにおける計算資源を表す複数の頂点及び前記計算資源間のリンクを表す複数の辺を含むグラフにおいて、あるジョブが割り当てられた計算資源についての部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに属する複数の頂点に隣接するがジョブの割り当てがない計算資源についての頂点の数の割合と、前記部分グラフに属する頂点の数に対する前記部分グラフに隣接するがジョブの割り当てがない計算資源についての頂点と隣接し且つ前記部分グラフに属する頂点の数の割合と、前記部分グラフに属する頂点に対する、一方の頂点が前記部分グラフに属するが他方の頂点が前記部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合と、前記部分グラフに属する頂点間の辺の数に対する一方の頂点が前記部分グラフに属するが他方の頂点が部分グラフに隣接してさらにジョブの割り当てがない計算資源についての頂点である辺の数の割合とのうち少なくともいずれかを取得する取得部と、
取得された前記割合に基づき、前記部分グラフを基準に他のジョブを割り当てるべき計算資源を探索するのに要する負荷に関する指標値を算出する算出部と、
を有するジョブ管理装置。