(57)【特許請求の範囲】
【請求項１】
複数のユーザのいずれかのユーザが有するジョブに計算資源が割り当てられたことに応じて、前記いずれかのユーザへの前記計算資源の配分の目標とする前記ユーザ間での相対的な比率で、前記いずれかのユーザに割り当てられた前記計算資源の量を除算した値を、前記いずれかのユーザが有するジョブに前記計算資源を割り当てる際の前記いずれかのユーザの優先度を低下させる度合いに決定し、前記いずれかのユーザの優先度から、決定した前記いずれかのユーザの優先度を低下させる度合いを減算する、
制御部を有することを特徴とする並列演算装置。
【請求項２】
前記計算資源が、複数のプロセッサのうちのいずれかのプロセッサであって、
前記制御部は、
前記いずれかのユーザが有するジョブに前記プロセッサが割り当てられたことに応じて、前記プロセッサの数と前記比率とに基づいて、前記いずれかのユーザの優先度を低下させる度合いを決定することを特徴とする請求項１に記載の並列演算装置。
【請求項３】
前記計算資源が、プロセッサを利用する時間であって、
前記制御部は、
前記いずれかのユーザが有するジョブに前記時間が割り当てられたことに応じて、前記時間と前記比率とに基づいて、前記いずれかのユーザの優先度を低下させる度合いを決定することを特徴とする請求項１または２に記載の並列演算装置。
【請求項４】
前記制御部は、
前記いずれかのユーザが有するジョブに前記時間が割り当てられた後、前記時間が経過する前に前記いずれかのユーザが有するジョブが終了したことに応じて、前記いずれかのユーザが有するジョブが終了した時刻から前記時間が経過する時刻までの時間と、前記比率とに基づいて、前記いずれかのユーザの優先度を前記いずれかのユーザが有するジョブが終了することにより上昇させる度合いを決定することを特徴とする請求項３に記載の並列演算装置。
【請求項５】
複数のプロセッサを有する並列演算システムであって、
前記複数のプロセッサのいずれかのプロセッサは、
複数のユーザのいずれかのユーザが有するジョブに計算資源が割り当てられたことに応じて、前記いずれかのユーザへの前記計算資源の配分の目標とする前記ユーザ間での相対的な比率で、前記いずれかのユーザに割り当てられた前記計算資源の量を除算した値を、前記いずれかのユーザが有するジョブに前記計算資源を割り当てる際の前記いずれかのユーザの優先度を低下させる度合いに決定し、前記いずれかのユーザの優先度から、決定した前記いずれかのユーザの優先度を低下させる度合いを減算する、
ことを特徴とする並列演算システム。
【請求項６】
コンピュータに、
複数のユーザのいずれかのユーザが有するジョブに計算資源が割り当てられたことに応じて、前記複数のユーザのそれぞれのユーザへの前記計算資源の配分の目標とする前記ユーザ間での相対的な比率を記憶する記憶部から、前記いずれかのユーザへの前記計算資源の配分の目標とする前記ユーザ間での相対的な比率を読み出し、
読み出した前記比率で、前記いずれかのユーザに割り当てられた前記計算資源の量を除算した値を、前記いずれかのユーザが有するジョブに前記計算資源を割り当てる際の前記いずれかのユーザの優先度を低下させる度合いに決定し、前記いずれかのユーザの優先度から、決定した前記いずれかのユーザの優先度を低下させる度合いを減算する、
処理を実行させることを特徴とするジョブ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列演算装置、並列演算システム、およびジョブ制御プログラムに関する。
【背景技術】
【０００２】
従来、複数のジョブの各々のジョブにプロセッサの計算資源を割り当てたことに応じて、各々のジョブに計算資源を割り当てる際の優先度を所定値分低下させる技術がある。関連する先行技術として、例えば、ジョブの計算資源への割り当てに応じ、ユーザごとの単位時間あたりの計算資源の利用可能量に応じた回復率に基づいて、時間経過に応じて優先度を上昇させるものがある。また、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）資源配分実績が、ジョブグループに対して予め指定されたＣＰＵ資源の配分比率以上になった場合、該当するジョブグループに属するジョブをスケジューリング不可能状態にする技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２７７０４１号公報
【特許文献２】特開昭６２−２１０５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、各々のユーザの計算配分の比率で各々のユーザが有するジョブに計算資源を割り当てることができない場合がある。例えば、決められた比率に経過時間を乗じた値を各々のユーザの優先度に加えると、加える値の差が、時刻によって、各々のユーザが有するジョブに計算資源を割り当てる際に優先度を低下させる所定値分、または所定値の２倍分というように異なるものになる。従って、決められた比率に経過時間を乗じた値を各々のユーザの優先度に加えると、決められた比率で各々のユーザが有するジョブに計算資源を割り当てることができなくなる。
【０００５】
１つの側面では、本発明は、各々のユーザの計算資源の配分の比率で各々のユーザが有するジョブに計算資源を割り当てることができる並列演算装置、並列演算システム、およびジョブ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、複数のユーザの各々のユーザの計算資源の配分の比率に基づいて、各々のユーザが有するジョブに計算資源を割り当てる際の各々のユーザの優先度を各々のユーザが有するジョブに計算資源が割り当てられることにより低下させる度合いを決定する並列演算装置、並列演算システム、およびジョブ制御プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、各々のユーザの計算資源の配分の比率で各々のユーザが有するジョブに計算資源を割り当てることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施の形態にかかる並列演算装置１０１の動作例を示す説明図である。
【図２】図２は、並列演算システム２００の構成例を示すブロック図である。
【図３】図３は、管理ノード２０１のハードウェアの一例を示すブロック図である。
【図４】図４は、管理ノード２０１の機能構成例を示すブロック図である。
【図５】図５は、フェアシェア配分率の差による資源配分の一例を示す説明図である。
【図６】図６は、回復倍率による資源配分の一例を示す説明図である。
【図７】図７は、フェアシェア配分率の差により資源配分を行った一例を示す説明図である。
【図８】図８は、フェアシェア配分率の差により資源配分を行った他の例を示す説明図である。
【図９】図９は、資源配分処理手順の一例を示すフローチャートである。
【図１０】図１０は、フェアシェア値更新処理手順の一例を示すフローチャートである。
【図１１】図１１は、割り当て候補ジョブ決定処理手順の一例を示すフローチャートである。
【図１２】図１２は、計算資源割り当て処理手順の一例を示すフローチャートである。
【図１３】図１３は、イベント待ち処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示の並列演算装置、並列演算システム、およびジョブ制御プログラムの実施の形態を詳細に説明する。
【００１０】
図１は、本実施の形態にかかる並列演算装置１０１の動作例を示す説明図である。並列演算装置１０１は、複数のユーザの各々のユーザが有するジョブに計算資源を割り当てるコンピュータである。例えば、並列演算装置１０１は、単一のプロセッサを有する計算機に対して、計算資源としてプロセッサを専有する時間をユーザが有するジョブに割り当てる。また、並列演算装置１０１は、複数のプロセッサを有する計算機に対して、計算資源として、プロセッサを専有する時間＊プロセッサの数をユーザが有するジョブに割り当てる。複数のプロセッサを有する計算機は、コアが複数搭載されたプロセッサを含む計算機でもよいし、シングルコアのプロセッサが並列されたプロセッサ群を含む計算機でもよいし、シングルコアのプロセッサを含む計算機が複数あってもよい。
【００１１】
また、単一または複数の演算装置を有する計算機は、並列演算装置１０１であってもよいし、他の装置であってもよい。他の装置としては、例えば、クラスタ化したパーソナル・コンピュータであってもよい。図１の記載では、説明を単純化するため、並列演算装置１０１が、シングルコアのプロセッサであるＣＰＵが２つ並列されたプロセッサ群である場合を例にあげて説明する。
【００１２】
また、ジョブとは、ユーザから見た処理の単位を示す。ジョブと似たような概念として、プログラムの実行単位であって、固有のメモリ空間を有するプロセスや、プログラムの実行単位であって、同一プロセスに属するもの同士でメモリ空間を共有するスレッド等がある。従って、並列演算装置１０１は、複数のジョブとして、複数のスレッドや複数のプロセスに計算資源を割り当ててもよい。
【００１３】
次に、ジョブに計算資源を割り当てる処理について説明する。ジョブを割り当てるジョブスケジューラは、ユーザの操作等によって投入されたジョブを、投入順序や予め決められた静的優先度によって並び変える。ここで、静的優先度は、ユーザの間の優先度である。そして、ジョブスケジューラは、ユーザの静的優先度に基づいて並び替えたジョブ順に、ジョブの要求する計算資源の空きを探して割り当てる。
【００１４】
ここで、静的優先度だけに従ってジョブを割り当てると、静的優先度の高いユーザが有するジョブや、あるユーザによって先に投入されたジョブによって計算資源が専有されてしまうことがある。そこで、ジョブスケジューラは、運用中に随時更新されるユーザの動的優先度を用いてジョブを割り当てる。具体的には、ジョブスケジューラは、ユーザが現在利用中の計算資源の量が多い場合や、現在実行中のジョブの実行時間が長い場合には、該当のユーザの動的優先度を低下させ、他のユーザの動的優先度を相対的に高くするように設定する。
【００１５】
動的優先度は、値が大きいほどユーザが有するジョブの割り当てを優先することを示してもよいし、値が小さいほど優先することを示してもよい。動的優先度は、具体的な数値でもよいし、「高」、「中」、「低」、のような階級であってもよい。
【００１６】
しかしながら、各々のユーザの計算配分の比率で各々のユーザが有するジョブに計算資源を割り当てることができない場合がある。例えば、決められた比率に経過時間を乗じた値を各々のユーザの優先度に加えると、加える値の差が、時刻によって、各々のユーザが有するジョブに計算資源を割り当てる際に優先度を低下させる所定値分、または所定値の２倍分というように異なるものになる。従って、あるタイミングでは加える値の差が所定値分となり、別のタイミングでは加える値の差が所定値の２倍分となったりする。この場合、あるタイミングでは、あるユーザが他のユーザより１回多く計算資源を割り当てられる分差がつき、別のタイミングでは、あるユーザが他のユーザより２回多く計算資源が割り当てられる分差がついたりすることになる。このように、決められた比率に経過時間を乗じた値を各々のユーザの動的優先度に加えると、決められた比率で各々のジョブに計算資源を割り当てることができなくなる。
【００１７】
また、各々のユーザに対して予め指定された計算資源を使いきった場合に各々のユーザが有するジョブをスケジューリング不可能状態にして、決められた比率を担保することが考えられる。しかしながら、この場合、ジョブに割り当てられない計算資源が発生し、プロセッサの処理性能が低下することになる。また、各々のジョブに割り当てられた計算資源の量を監視することは、ジョブやプロセッサの個数が増加するにつれて困難なものになる。ここで、計算資源の配分の比率で各々のユーザが有するジョブに計算資源を割り当てたい理由としては、例えば、ユーザＡが計算機を利用するために支払った金額と、ユーザＢが計算機を利用するために支払った金額との比率にしたいことがあげられる。
【００１８】
そこで、本実施の形態にかかる並列演算装置１０１は、各々のユーザの計算資源の配分の比率に基づいて、各々のユーザが有するジョブに計算資源が割り当てられることにより各々のユーザの動的優先度を低下させる度合いを決定する。これにより、どのタイミングでも、各々のユーザの動的優先度の差が各々のユーザの計算資源の配分の比率に従うため、並列演算装置１０１は、計算資源を各々のユーザの計算資源の配分の比率に従って割り当てることができる。
【００１９】
図１を用いて、並列演算装置１０１の処理を説明する。図１に示す並列演算装置１０１は、ＣＰＵ＃１とＣＰＵ＃２とを有する。また、並列演算装置１０１は、ユーザＡが有するジョブとユーザＢが有するジョブとを実行するものとする。また、ユーザＡとユーザＢとの計算資源の配分の比率を２：１とする。
【００２０】
例えば、動的優先度が、「高」、「中」、「低」、のような階級であるとする。このとき、並列演算装置１０１は、各々のユーザが有するジョブに計算資源が割り当てられることによりユーザＡ、Ｂの動的優先度を低下させる階級を、計算資源の配分の比率の逆数の比１：２から、それぞれ、１階級、２階級に決定する。
【００２１】
以下の説明では、動的優先度として、「フェアシェア値」と呼ばれる値を用いる場合について説明する。フェアシェア値は、フェアシェア初期値を上限としており、フェアシェア初期値よりも大きくなることはない値である。また、フェアシェア値は負の値となってもよい。フェアシェア値は、値が大きいほど優先してユーザが有するジョブを割り当てることを示す値である。また、計算資源の配分の比率を、以下、「フェアシェア配分率」と呼称する場合がある。図１の例では、ユーザＡのフェアシェア配分率：ユーザＢのフェアシェア配分率が、２：１となる。また、各々のユーザが有するジョブに計算資源が割り当てられることにより各々のユーザのフェアシェア値を低下させる度合いを、「フェアシェア使用量」と呼称する場合がある。また、単位時間当たりのフェアシェア値を上昇させる度合いを、「単位時間当たりの回復値」と呼称する場合がある。
【００２２】
また、図１の例では、ユーザＡが有するジョブは、複数あってもよいし、単一のジョブを何度も実行するものでよいし、単一のジョブを同時に実行するものでもよい。ユーザＢが有するジョブも同様であるとする。そして、ジョブの１回の実行の際には、ジョブは、１００秒×１ＣＰＵ＝１００の計算資源を要求するものとする。また、ユーザＡとユーザＢとのフェアシェア初期値を３００とする。また、単位時間当たりの回復値として、１秒当たりの回復値をユーザＡ、ユーザＢともに０．５とする。また、説明の簡略化のため、ユーザＡのフェアシェア値とユーザＢのフェアシェア値とが同値である場合、並列演算装置１０１は、ユーザＡが有するジョブに優先して計算資源を割り当てるものとする。
【００２３】
並列演算装置１０１は、各々のユーザに割り当てられるフェアシェア配分率に基づいて、各々のユーザのフェアシェア使用量を決定する。ここで、ユーザＡが有するジョブとユーザＢが有するジョブとが要求する計算資源が常に固定値であれば、フェアシェア配分率は予め決められるものであるから、並列演算装置１０１は、各々のユーザのフェアシェア使用量をどのタイミングで決定してもよい。例えば、並列演算装置１０１は、運用開始前に、各々のユーザのフェアシェア使用量を決定する。
【００２４】
図１の例では、符号１０２で示すように、並列演算装置１０１は、各々のユーザが有するジョブが要求する計算資源の量と、各々のユーザに割り当てられるフェアシェア配分率の逆数とを乗じた値を、各々のジョブのフェアシェア使用量として決定する。図１の例では、並列演算装置１０１は、ユーザＡのフェアシェア使用量：ユーザＢのフェアシェア使用量＝１００／２：１００／１＝５０：１００とする。
【００２５】
図１に示すグラフ１０３は、決定したフェアシェア使用量に従って各々のユーザが有するジョブに計算資源を割り当てた際のフェアシェア値の時系列変化を示す。また、枠１０４は、計算資源を模式したものである。
【００２６】
グラフ１０３の横軸は、時刻を示す。グラフ１０３の縦軸は、フェアシェア値を示す。また、グラフ１０３は、ユーザＡのフェアシェア値の時系列変化を実線で示すと共に、ユーザＢのフェアシェア値の時系列変化を破線で示す。時刻０［秒］において、並列演算装置１０１は、ユーザＡ、Ｂのフェアシェア値とが共に３００であるため、ユーザＡが有するジョブにＣＰＵ＃１の０〜１００［秒］を割り当てると共に、ユーザＢが有するジョブにＣＰＵ＃２の０〜１００［秒］を割り当てる。そして、並列演算装置１０１は、ユーザＡのフェアシェア値を、３００−５０＝２５０とし、ユーザＢのフェアシェア値を、３００−１００＝２００とする。
【００２７】
次に、時刻１００［秒］において、並列演算装置１０１は、ユーザＡのフェアシェア値とユーザＢのフェアシェア値とを、１秒当たりの回復値×経過時間＝０．５×１００＝５０回復させる。そして、並列演算装置１０１は、ユーザＡのフェアシェア値が３００であり、ユーザＢのフェアシェア値が２５０であるから、ユーザＡが有するジョブにＣＰＵ＃１の１００［秒］から２００［秒］までを割り当てる。そして、並列演算装置１０１は、ユーザＡのフェアシェア値を、３００−５０＝２５０とする。続けて、並列演算装置１０１は、ユーザＡのフェアシェア値が２５０であり、ユーザＢのフェアシェア値が２５０であるから、ユーザＡが有するジョブにＣＰＵ＃２の１００［秒］から２００［秒］までを割り当てる。そして、並列演算装置１０１は、ユーザＡのフェアシェア値を、２５０−５０＝２００とする。
【００２８】
そして、時刻２００［秒］において、並列演算装置１０１は、ユーザＡのフェアシェア値とユーザＢのフェアシェア値とを、０．５×１００＝５０回復させる。並列演算装置１０１は、ユーザＡのフェアシェア値が２５０であり、ユーザＢのフェアシェア値が３００であるから、ユーザＢが有するジョブにＣＰＵ＃１の２００［秒］から３００［秒］までを割り当てる。そして、並列演算装置１０１は、ユーザＢのフェアシェア値を、３００−１００＝２００とする。続けて、並列演算装置１０１は、ユーザＡのフェアシェア値が２５０であり、ユーザＢのフェアシェア値が２００であるから、ユーザＡが有するジョブにＣＰＵ＃２の２００［秒］から３００［秒］までを割り当てる。そして、並列演算装置１０１は、ユーザＡのフェアシェア値を、２５０−５０＝２００とする。
【００２９】
以上により、割り当てられた計算資源を確認すると、ＣＰＵ＃１、２の計算資源が全てユーザＡ、Ｂのいずれかが有するジョブに割り当てられており、かつ、ユーザＡ：ユーザＢ＝４：２＝２：１となる。このように、並列演算装置１０１は、ジョブに割り当てられない計算資源を発生させることを抑制して、各々のユーザのフェアシェア配分率に従って各々のユーザが有するジョブに計算資源を割り当てることができる。また、０［秒］から１００［秒］の間では、ユーザＡとユーザＢとのフェアシェア値の差が常に５０となっており、フェアシェア配分率２：１に従うものとなる。さらに、２００［秒］以降では、ユーザＡとユーザＢのフェアシェア値が同一となるが、これは、２００［秒］の段階で、ユーザＡとユーザＢとに割り当てられた計算資源が２：１となったためである。そして、並列演算装置１０１は、２００［秒］以降も、２：１を維持するようにユーザＡとユーザＢとに計算資源を割り当てる。
【００３０】
なお、上述した説明では、並列演算装置１０１は、各々のユーザのフェアシェア配分率に基づいて計算資源を割り当てたが、一人以上のユーザを有する各々のユーザグループのフェアシェア配分率に基づいて計算資源を割り当ててもよい。次に、並列演算装置１０１を、並列演算システム２００に適用した例を図２に示す。
【００３１】
図２は、並列演算システム２００の構成例を示すブロック図である。並列演算システム２００は、管理ノード２０１と、複数のノードとして、ノード＃１〜＃ｎを有する。ｎは、２以上の整数である。ここで、管理ノード２０１は、図１で示した並列演算装置１０１に相当する。ノード＃１〜＃ｎは、図１における、ＣＰＵ＃１、２に相当する。管理ノード２０１とノード＃１〜＃ｎとは、インターコネクト２０２により接続される。並列演算システム２００は、例えば、スーパーコンピュータである。
【００３２】
管理ノード２０１は、管理ノード２０１とノード＃１〜＃ｎとのうち少なくともノード＃１〜＃ｎをジョブに割り当てる装置である。ノード＃１〜＃ｎは、割り当てられたノードを実行する装置である。以降の説明では、管理ノード２０１は、ノード単位でユーザが有するジョブを割り当てるものとする。
【００３３】
図３は、管理ノード２０１のハードウェアの一例を示すブロック図である。図３において、管理ノード２０１は、ＣＰＵ３０１と、ＲＯＭ３０２と、ＲＡＭ３０３と、を含む。また、管理ノード２０１は、ディスクドライブ３０４およびディスク３０５と、通信インターフェース３０６と、を含む。また、ＣＰＵ３０１〜ディスクドライブ３０４、通信インターフェース３０６はバス３０７によってそれぞれ接続される。
【００３４】
ＣＰＵ３０１は、管理ノード２０１の全体の制御を司る演算処理装置である。また、管理ノードは、複数のＣＰＵを有してもよい。ＲＯＭ３０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ３０３は、ＣＰＵ３０１のワークエリアとして使用される揮発性メモリである。
【００３５】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ３０４には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ３０４が磁気ディスクドライブである場合、ディスク３０５には、磁気ディスクを採用することができる。また、ディスクドライブ３０４が光ディスクドライブである場合、ディスク３０５には、光ディスクを採用することができる。また、ディスクドライブ３０４がソリッドステートドライブである場合、ディスク３０５には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
【００３６】
通信インターフェース３０６は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース３０６は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース３０６には、例えば、モデムやＬＡＮアダプタなどを採用することができる。
【００３７】
また、並列演算システム２００の管理者が、管理ノード２０１を直接操作する場合、管理ノード２０１は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。また、図示していないが、ノード＃１〜ｎも、管理ノード２０１と同様のハードウェアを有する。
【００３８】
（管理ノード２０１の機能構成例）
図４は、管理ノード２０１の機能構成例を示すブロック図である。管理ノード２０１は、制御部４００を有する。制御部４００は、割当部４０１と、決定部４０２とを含む。制御部４００は、記憶装置に記憶されたジョブ制御プログラムをＣＰＵ３０１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図３に示したＲＯＭ３０２、ＲＡＭ３０３、ディスク３０５などである。また、各部の処理結果は、ＣＰＵ３０１のレジスタや、ＣＰＵ３０１のキャッシュメモリ等に格納される。
【００３９】
また、管理ノード２０１は、記憶部４１０にアクセス可能である。記憶部４１０は、ＲＡＭ３０３、ディスク３０５といった記憶装置である。記憶部４１０は、各々のユーザのフェアシェア初期値と、単位時間当たりの回復値と、各々のユーザの回復倍率と、各々のユーザのフェアシェア値と、各々のユーザのフェアシェア配分率とを有する。
【００４０】
割当部４０１は、各々のユーザのフェアシェア値に基づいて、各々のユーザが有するジョブに計算資源を割り当てる。具体的には、例えば、割当部４０１は、計算資源として、ノードを利用する一定時間を各々のユーザが有するジョブに割り当てる。
【００４１】
決定部４０２は、記憶部４１０から読み出した各々のユーザのフェアシェア配分率に基づいて、各々のユーザのフェアシェア使用量を決定する。例えば、各々のユーザが有するジョブが要求する計算資源が常に固定値であれば、決定部４０２は、所定値を各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。所定値は、どのような値でもよい。また、各々のユーザが有するジョブが要求する計算資源の量が変化するならば、決定部４０２は、各々のユーザが有するジョブが要求する計算資源を各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定してもよい。
【００４２】
また、各々のユーザが有するジョブの要求する計算資源が、複数のノードのうちのいずれかのノードであるとする。このとき、各々のユーザが有するジョブにノードを割り当てる時間の長さが常に固定であるとする。この場合、決定部４０２は、各々のユーザが有するジョブにいずれかのノードを割り当てたことに応じて、割り当てたノードの数と各々のジョブのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。例えば、決定部４０２は、ノードの数と、各々のユーザが有するジョブが要求する計算資源とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。
【００４３】
また、各々のユーザが有するジョブの要求する計算資源が、ノードを利用する時間であるとする。このとき、各々のユーザが有するジョブに割り当てるノードの数が常に固定であるとする。このとき、決定部４０２は、割当部４０１が各々のユーザが有するジョブにノードを利用する時間を割り当てたことに応じて、前述の時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。例えば、決定部４０２は、前述の時間と、各々のユーザが有するジョブが要求する計算資源とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。
【００４４】
また、割当部４０１が各々のユーザが有するジョブに前述の時間を割り当てた後、前述の時間が経過する前に各々のユーザが有するジョブが終了したとする。各々のユーザが有するジョブが終了する契機としては、各々のユーザが有するジョブが完了した時や、中断した場合である。この際、決定部４０２は、各々のユーザが有するジョブが終了した時刻から前述の時間が経過する時刻までの時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザが有するジョブが終了することによりフェアシェア値を上昇させる度合いを決定する。各々のユーザが有するジョブが終了することによりフェアシェア値を上昇させる度合いを、以下、「フェアシェア返却量」と呼称する場合がある。
【００４５】
例えば、決定部４０２は、ジョブが要求する計算資源と、ジョブが終了した時刻から前述の時間が経過する時刻までの時間とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア返却量として決定する。
【００４６】
次に、図５と図６とを用いて、本実施の形態にかかるフェアシェア配分率の差による資源配分の例と、比較として、回復倍率による資源配分の例を示す。図５、図６において、フェアシェア初期値は、ユーザＡ、Ｂ共に同じ値とする。また、図５、図６において、フェアシェア配分率は、ユーザＡ＝１、ユーザＢ＝３として、ユーザＢはユーザＡの３倍の設定とする。
【００４７】
図５は、フェアシェア配分率の差による資源配分の一例を示す説明図である。図５に示すグラフ５０１は、フェアシェア配分率の差により資源配分した場合における、フェアシェア値の時系列変化を示すグラフである。グラフ５０１の横軸は、時刻を示す。グラフ５０１の縦軸は、フェアシェア値を示す。また、グラフ５０１内の実線および点線は、ユーザＡのフェアシェア値を示す。また、グラフ５０１内の一点鎖線および二点鎖線は、ユーザＢのフェアシェア値を示す。また、グラフ５０１内の点線および二点鎖線は、図５の時刻ｔ１において、ジョブを割り当てていない場合におけるフェアシェア値を示す。
【００４８】
図５の時刻ｔ０において、管理ノード２０１は、ユーザＡのジョブとユーザＢのジョブとに計算資源としてノードを割り当てる。割り当てられたノードは、ジョブを実行する。そして、図５の時刻ｔ０において、ユーザＡのフェアシェア値は、以下の通りになる。
【００４９】
ユーザＡのフェアシェア値＝時刻ｔ０におけるユーザＡのフェアシェア値−ユーザＡのフェアシェア使用量
【００５０】
また、ユーザＡのフェアシェア使用量は、以下の通りになる。
【００５１】
ユーザＡのフェアシェア使用量＝ノード数×専有使用時間／１
【００５２】
同様に、図５の時刻ｔ０において、ユーザＢのフェアシェア値は、以下の通りになる。
【００５３】
ユーザＢのフェアシェア値＝時刻ｔ０におけるユーザＢのフェアシェア値−ユーザＢのフェアシェア使用量
【００５４】
また、ユーザＢのフェアシェア使用量は、以下の通りになる。
【００５５】
ユーザＢのフェアシェア使用量＝ノード数×専有使用時間／３
【００５６】
従って、ユーザＡとユーザＢで同一の計算資源を要求するジョブが実行開始した場合、ユーザＢのフェアシェア値の減少量はユーザＡの１／３になる。これは、運用中のどのタイミングでジョブ実行開始、ジョブ選択が行われても同じように制御される。例えば、グラフ５０１における時刻ｔ１の時点でも時刻ｔ２の時点でも、ユーザＢのジョブはユーザＡのジョブに比べて３倍のジョブ実行が可能になることを示す。
【００５７】
図６は、回復倍率による資源配分の一例を示す説明図である。図６に示すグラフ６０１は、回復倍率により資源配分した場合における、フェアシェア値の時系列変化を示すグラフである。グラフ６０１の横軸は、時刻を示す。グラフ６０１の縦軸は、フェアシェア値を示す。また、グラフ６０１内の実線および点線は、ユーザＡのフェアシェア値を示す。また、グラフ６０１内の一点鎖線および二点鎖線は、ユーザＢのフェアシェア値を示す。また、グラフ６０１内の点線および二点鎖線は、図６の時刻ｔ１において、ジョブを割り当てない場合におけるフェアシェア値を示す。
【００５８】
グラフ図６の時刻ｔ０において、ユーザＡとユーザＢで同一の計算資源を要求するジョブが実行開始したとすると、ユーザＡ、Ｂのフェアシェア値は同一の量分減少する。ここで、回復倍率により資源配分した場合、ユーザＢのフェアシェア値は、ユーザＡのフェアシェア値より３倍の回復量となる。従って、時刻によって、ユーザＡ、ユーザＢのフェアシェア値の差が変わることになる。
【００５９】
例えば、図６における、時刻ｔ１にジョブを実行しない場合の時刻ｔ２においては、ユーザＢのフェアシェア値は、ユーザＡのフェアシェア値と比較してジョブ３つ分の実行を優先して行える値となっており、３倍の配分率に従うことができる。しかしながら、図６の時刻ｔ１においては、ユーザＢのフェアシェア値は、ユーザＡのフェアシェア値と比較してジョブ１つ分の実行しか優先して行えない値となっており、回復倍率による資源配分の方法は、３倍の配分率に従えないものとなる。
【００６０】
次に、図７と図８とを用いて、フェアシェア配分率の差により資源配分を行った２つの例を示す。図７と図８とで共通する設定として、実行待ちのジョブは「ジョブ番号」の昇順に投入されるものとし、ハッチを付与したジョブがユーザＡが有するジョブであり、ハッチを付与していないジョブがユーザＢが有するジョブであるとする。また、図７と図８とにおいて、ジョブは、「ｊｘ」で記載する。ｘは１以上の整数である。
【００６１】
また、フェアシェア初期値は、ユーザＡ、ユーザＢ共に４００００とする。また、単位時間当たりの回復値をユーザＡ、ユーザＢ共に４０とする。回復倍率は、ユーザＡ、ユーザＢ共に１とする。また、並列演算システム２００が有するノードの個数ｎを２００とする。また、全てのジョブが要求する計算資源は、１００ノード×１００［秒］とする。
【００６２】
図７は、フェアシェア配分率の差により資源配分を行った一例を示す説明図である。図７の例では、ジョブ番号ｊ１、ｊ３、ｊ５、ｊ７、ｊ９のジョブはユーザＡが投入し、ジョブ番号ｊ２、ｊ４、ｊ６、ｊ８、ｊ１０のジョブはユーザＢが投入したジョブである。そして、フェアシェア配分率は１：２の比とするために、ユーザＡ＝１、ユーザＢ＝２とする。この比率で計算資源が配分されることが目標となる。
【００６３】
図７の時刻ｔ０において、ユーザＡ、Ｂのフェアシェア値は、ユーザＡのフェアシェア値＝４００００、ユーザＢのフェアシェア値＝４００００というように、フェアシェア初期値と同じであり、動的優先度は同じとなる。このため、管理ノード２０１は、ジョブ選択として投入順を採用し、図７の（１）で示すように、ジョブ番号ｊ１のジョブを割り当てたノードに実行開始させる。
【００６４】
そして、ジョブ番号ｊ１のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ１のジョブのオーナであるユーザＡのフェアシェア値を、フェアシェア配分率を使用して求められる下記（１）式と（２）式とを用いて算出する。
【００６５】
フェアシェア使用量＝ノード数×専有使用時間／フェアシェア配分率  …（１）
フェアシェア値＝フェアシェア値−フェアシェア使用量  …（２）
【００６６】
ユーザＡのフェアシェア使用量は、「１００×１００／１＝１００００」となるので、管理ノード２０１は、ユーザＡのフェアシェア値を３００００とする。また、ジョブ番号１のジョブ選択時には、ユーザＡのフェアシェア値＝３００００であり、ユーザＢのフェアシェア値＝４００００であるから、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ１の実行時点からの経過した時間は１秒未満であるから、ユーザＡのフェアシェア値の回復量は考慮せず「０」とする。このため、管理ノード２０１は、図７の（２）で示すように、ジョブ番号ｊ２のユーザＢのジョブを選択し、ジョブ番号ｊ２のジョブを割り当てたノードに実行開始させる。
【００６７】
ジョブ番号ｊ２のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ２のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出する。
【００６８】
ユーザＢのフェアシェア使用量は、１００×１００／２＝５０００となるので、管理ノード２０１は、ユーザＢのフェアシェア値を３５０００とする。また、この時点で全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ１、およびジョブ番号ｊ２のジョブが実行終了する時刻ｔ１となる。
【００６９】
時刻ｔ１のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、共にフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝３４０００、ユーザＢのフェアシェア値＝３９０００となり、ユーザＢの動的優先度が高い状態が続く。このため、管理ノード２０１は、図７の（３）で示すように、投入順番が遅い、ユーザＢがオーナであるジョブ番号ｊ４のジョブを連続して選択し、ジョブ番号ｊ４のジョブを割り当てたノードに実行開始させる。
【００７０】
ジョブ番号ｊ４のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ４のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、３４０００とする。
【００７１】
ジョブ番号ｊ４のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝３４０００、ユーザＢのフェアシェア値＝３４０００となっており、動的優先度は同じになる。なお、ジョブ番号ｊ４のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず「０」とする。このため、管理ノード２０１は、ジョブ選択では投入順を採用して、図７の（４）で示すように、ユーザＡがオーナであるジョブ番号ｊ３のジョブを選択し、ジョブ番号ｊ３のジョブを割り当てたノードに実行開始させる。
【００７２】
ジョブ番号ｊ３のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ３のジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、２４０００とする。また、この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ４、およびジョブ番号ｊ３のジョブが実行終了する時刻ｔ２となる。
【００７３】
時刻ｔ２のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、共にフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝２８０００、ユーザＢのフェアシェア値＝３８０００となり、ユーザＢの動的優先度が高くなる。このため、管理ノード２０１は、図７の（５）で示すように、投入順番が遅い、ジョブ番号ｊ６のユーザＢのジョブを選択し、ジョブ番号ｊ６のジョブを割り当てたノードに実行開始させる。
【００７４】
ジョブ番号ｊ６のジョブを実行開始させると、管理ノード２０１は、ジョブ番号ｊ６のジョブのオーナであるユーザＢのフェアシェア値を、（１）式、（２）式に従って算出し、３３０００とする。
【００７５】
ジョブ番号ｊ６のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝２８０００、ユーザＢのフェアシェア値＝３３０００となっており、ユーザＢの動的優先度が高い状態が続く。なお、ジョブ番号ｊ６のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず「０」とする。このため、管理ノード２０１は、図７の（６）で示すように、投入順番が遅い、ユーザＢがオーナであるジョブ番号ｊ８のジョブを連続して選択し、ジョブ番号ｊ８のジョブを割り当てたノードに実行開始させる。
【００７６】
ジョブ番号ｊ８のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ８のジョブのオーナであるユーザＢのフェアシェア値を（１）式と（２）式とを用いて算出し、２８０００とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ６、およびジョブ番号ｊ８のジョブが実行終了する時刻ｔ３となる。
【００７７】
時刻ｔ３のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、共にフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝３２０００、ユーザＢのフェアシェア値＝３２０００となり、動的優先度は同じになる。このため、管理ノード２０１は、ジョブ選択では投入順を採用して、図７の（７）で示すように、ユーザＡがオーナであるジョブ番号ｊ５のジョブを選択し、ジョブ番号ｊ５のジョブを割り当てたノードに実行開始させる。
【００７８】
ジョブ番号ｊ５のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ５のジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、２２０００とする。
【００７９】
ジョブ番号ｊ５のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝２２０００、ユーザＢのフェアシェア値＝３２０００となり、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ５のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず「０」とする。このため、管理ノード２０１は、図７の（８）で示すように、投入順番が遅い、ユーザＢがオーナであるジョブ番号ｊ１０のジョブを選択し、ジョブ番号ｊ１０のジョブを割り当てたノードに実行開始させる。
【００８０】
ジョブ番号ｊ１０のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ１０のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、２７０００とする。この時点で再度全てのノードが使用中になり、管理ノード２０１は、この後も同様の制御を行う。
【００８１】
ここまでのジョブ実行による計算資源の配分比は、ユーザＡの実行ジョブ数＝３、ユーザＢの実行ジョブ数＝５となるので、１：１．６７となり、目標配分比の１：２には届かない。しかしながら、これは、図７で示した例のジョブ数が少ないためであり、ジョブの実行順序を見ると、ユーザＡの１つのジョブ実行後にユーザＢの２つのジョブを実行することが繰り返されている。従って、計算資源の配分比は１：２になっており、目標通りの資源配分制御が可能になることがわかる。
【００８２】
図８は、フェアシェア配分率の差により資源配分を行った他の例を示す説明図である。図８の例では、ジョブ番号ｊ１〜ｊ６のジョブはユーザＡが投入し、ジョブ番号ｊ７〜ｊ１０のジョブはユーザＢが投入したジョブである。そして、フェアシェア配分率は１：１の比とするために、ユーザＡ＝１、ユーザＢ＝１とする。この比率で計算資源が配分されることが目標となる。
【００８３】
図８の時刻ｔ０において、ユーザＡ、Ｂのフェアシェア値は、ユーザＡのフェアシェア値＝４００００、ユーザＢのフェアシェア値＝４００００というように、フェアシェア初期値と同じであり、動的優先度は同じとなる。このため、管理ノード２０１は、ジョブ選択として投入順を採用し、図８の（１）で示すように、ジョブ番号ｊ１のジョブを割り当てたノードに実行開始させる。
【００８４】
そして、ジョブ番号ｊ１のジョブを実行開始させると、管理ノード２０１は、ジョブ番号ｊ１のジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、３００００とする。ジョブ番号ｊ１のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝３００００、ユーザＢのフェアシェア値＝４００００となり、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ１のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず０とする。このため、管理ノード２０１は、図８の（２）で示すように、投入順番の遅い、ユーザＢがオーナであるジョブ番号ｊ７のジョブを選択して、ジョブ番号ｊ７を割り当てたノードに実行開始させる。
【００８５】
ジョブ番号ｊ７のジョブが実行開始されると、管理ノード２０１は、ジョブ番号ｊ７のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、３００００とする。このように、ユーザＢのフェアシェア配分率はユーザＡと同じなので、ユーザＢのフェアシェア使用量もユーザＡのフェアシェア使用量と同じになる。この時点で全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ１、およびジョブ番号ｊ７のジョブが実行終了する時刻ｔ１となる。
【００８６】
時刻ｔ１のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、同じフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝３４０００、ユーザＢのフェアシェア値＝３４０００となっており、動的優先度は同じになる。このため、管理ノード２０１は、図８の（３）で示すように、ジョブ選択では投入順を採用し、ユーザＡがオーナであるジョブ番号ｊ２のジョブを選択し、ジョブ番号ｊ２のジョブを割り当てたノードに実行開始させる。
【００８７】
ジョブ番号ｊ２のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ２のジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、２４０００とする。
【００８８】
ジョブ番号ｊ２のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝２４０００、ユーザＢのフェアシェア値＝３４０００となっており、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ２のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず０とする。このため、管理ノード２０１は、図８の（４）で示すように、投入順番の遅い、ユーザＢがオーナであるジョブ番号ｊ８のジョブを選択して、ジョブ番号ｊ８のジョブを割り当てたノードに実行開始させる。
【００８９】
ジョブ番号ｊ８のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ８のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、２４０００とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ２、およびジョブ番号ｊ８のジョブが実行終了する時刻ｔ２となる。
【００９０】
ｔ２時刻のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、同じフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝２８０００、ユーザＢのフェアシェア値＝２８０００となっており、動的優先度は同じになる。このため、管理ノード２０１は、図８の（５）で示すように、ジョブ選択では投入順を採用し、ユーザＡがオーナであるジョブ番号ｊ３のジョブを選択して、ジョブ番号ｊ３のジョブを割り当てたノードに実行開始させる。
【００９１】
ジョブ番号ｊ３のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ３のジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、１８０００とする。
【００９２】
ジョブ番号ｊ３のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝１８０００、ユーザＢのフェアシェア値＝２８０００となっており、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ３のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず０とする。このため、管理ノード２０１は、図８の（６）で示すように、投入順番の遅い、ユーザＢがオーナであるジョブ番号ｊ９のジョブを選択し、ジョブ番号ｊ９のジョブを割り当てたノードに実行開始させる。
【００９３】
ジョブ番号ｊ９のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ９のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、１８０００とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号ｊ３、およびジョブ番号ｊ９のジョブが実行終了する時刻ｔ３となる。
【００９４】
時刻ｔ３のジョブ選択時において、管理ノード２０１は、ユーザＡ、Ｂのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザＡ、Ｂ共に同じ回復倍率＝１の設定のため、同じフェアシェア回復量＝４０００となる。この結果、ユーザＡのフェアシェア値＝２２０００、ユーザＢのフェアシェア値＝２２０００となっており、動的優先度は同じになる。このため、管理ノード２０１は、図８の（７）で示すように、ジョブ選択では投入順を採用して、ユーザＡがオーナであるジョブ番号ｊ４のジョブを選択し、ジョブ番号ｊ４のジョブを割り当てたノードを実行開始させる。
【００９５】
ジョブ番号ｊ４のジョブを実行開始させると、管理ノード２０１は、ジョブのオーナであるユーザＡのフェアシェア値を、（１）式と（２）式とを用いて算出し、１２０００とする。
【００９６】
ジョブ番号ｊ４のジョブ実行後のジョブ選択時にはユーザＡのフェアシェア値＝１２０００、ユーザＢのフェアシェア値＝２２０００となっており、ユーザＢの動的優先度が高くなる。なお、ジョブ番号ｊ４のジョブ実行時点からの経過した時間は１秒未満であり回復量は考慮せず０とする。このため、管理ノード２０１は、図８の（８）で示すように、投入順番の遅い、ユーザＢがオーナであるジョブ番号ｊ１０のジョブを選択し、ジョブ番号ｊ１０を割り当てたノードに実行開始させる。
【００９７】
ジョブ番号ｊ１０のジョブを割り当てたノードに実行開始させると、管理ノード２０１は、ジョブ番号ｊ１０のジョブのオーナであるユーザＢのフェアシェア値を、（１）式と（２）式とを用いて算出し、１２０００とする。この時点で再度全てのノードが使用中になり、管理ノード２０１は、この後も同様の制御を行う。
【００９８】
ここまでのジョブ実行による計算資源の配分比を見ると、ユーザＡの実行ジョブ数＝４、ユーザＢの実行ジョブ数＝４となるので、１：１となり、目標通り公平な資源配分制御が可能となることがわかる。
【００９９】
次に、図９〜図１３を用いて、管理ノード２０１が実行する資源配分処理のフローチャートを示す。また、図９〜図１３で示すフローチャートは、図７で示した動作を行う設定となる。
【０１００】
図９は、資源配分処理手順の一例を示すフローチャートである。資源配分処理は、ジョブに計算資源を割り当てる処理である。管理ノード２０１は、初期値を設定する（ステップＳ９０１）。
【０１０１】
ステップＳ９０１の処理として、具体的には、管理ノード２０１は、初期値として、ユーザＡ、Ｂのフェアシェア初期値を、共に４００００に設定する。また、管理ノード２０１は、初期値として、単位時間当たりの回復値をユーザＡ、ユーザＢ共に４０に設定する。また、管理ノード２０１は、初期値として、回復倍率を、ユーザＡ、ユーザＢ共に１に設定する。また、管理ノード２０１は、初期値として、ユーザＡのフェアシェア配分率を１に設定する。また、管理ノード２０１は、初期値として、ユーザＢのフェアシェア配分率を２に設定する。また、管理ノード２０１は、初期値として、空きノード数を、全てのノードの数に設定する。また、管理ノード２０１は、初期値として、フェアシェア値更新時刻を現在時刻に設定する。
【０１０２】
次に、管理ノード２０１は、空きノードがあるか否かを判断する（ステップＳ９０２）。空きノードがある場合（ステップＳ９０２：Ｙｅｓ）、管理ノード２０１は、フェアシェア値更新処理を実行する（ステップＳ９０３）。フェアシェア値更新処理は、図１０で説明する。そして、管理ノード２０１は、割り当て候補ジョブ決定処理を実行する（ステップＳ９０４）。割り当て候補ジョブ決定処理は、図１１で説明する。また、管理ノード２０１は、割り当て候補ジョブ決定処理により得た割り当て候補ジョブのＩＤをｊｉｄに設定する。
【０１０３】
次に、管理ノード２０１は、割り当て候補ジョブ決定処理の処理結果として、ｊｉｄが０より大きいかを判断する（ステップＳ９０５）。ここで、ｊｉｄが０より大きい場合とは、割り当て候補ジョブがあることを示す。
【０１０４】
ｊｉｄが０より大きい場合（ステップＳ９０５：Ｙｅｓ）、管理ノード２０１は、計算資源割り当て処理を実行する（ステップＳ９０６）。計算資源割り当て処理は、図１２で説明する。そして、管理ノード２０１は、ステップＳ９０２の処理に移行する。
【０１０５】
一方、空きノードがない場合（ステップＳ９０２：Ｎｏ）、または、ｊｉｄが０以下の場合（ステップＳ９０５：Ｎｏ）、管理ノード２０１は、イベント待ち処理を実行する（ステップＳ９０７）。イベント待ち処理は、図１３で説明する。また、管理ノード２０１は、イベント待ち処理で得たイベントのＩＤを、ｅｅに設定する。
【０１０６】
そして、管理ノード２０１は、イベント待ち処理で得たイベントｅｅが、スケジューラ停止イベントか否かを判断する（ステップＳ９０８）。イベントｅｅがスケジューラ停止イベントでない場合（ステップＳ９０８：Ｎｏ）、管理ノード２０１は、ステップＳ９０２の処理に移行する。一方、イベントｅｅがスケジューラ停止イベントである場合（ステップＳ９０８：Ｙｅｓ）、管理ノード２０１は、資源配分処理を終了する。資源配分処理を実行することにより、管理ノード２０１は、ジョブに計算資源を無駄なくフェアシェア配分率に従って割り当てることができる。
【０１０７】
図１０は、フェアシェア値更新処理手順の一例を示すフローチャートである。フェアシェア値更新処理は、フェアシェア値を更新する処理である。
【０１０８】
管理ノード２０１は、ｔｔを現在時刻−フェアシェア値更新時刻に設定する（ステップＳ１００１）。次に、管理ノード２０１は、ユーザＡフェアシェア回復量を単位時間当たりの回復値＊ユーザＡ回復倍率＊ｔｔに設定する（ステップＳ１００２）。また、管理ノード２０１は、ユーザＢフェアシェア回復量を単位時間当たりの回復値＊ユーザＢ回復倍率＊ｔｔに設定する（ステップＳ１００３）。次に、管理ノード２０１は、ユーザＡフェアシェア値をユーザＡフェアシェア値＋ユーザＡフェアシェア回復量に設定する（ステップＳ１００４）。また、管理ノード２０１は、ユーザＢフェアシェア値をユーザＢフェアシェア値＋ユーザＢフェアシェア回復量に設定する（ステップＳ１００５）。そして、管理ノード２０１は、フェアシェア値更新時刻を現在時刻に設定する（ステップＳ１００６）。
【０１０９】
ステップＳ１００６の処理終了後、管理ノード２０１は、フェアシェア値更新処理を終了する。フェアシェア値更新処理を実行することにより、管理ノード２０１は、時間経過によるフェアシェア値の回復を行うことができる。
【０１１０】
図１１は、割り当て候補ジョブ決定処理手順の一例を示すフローチャートである。割り当て候補ジョブ決定処理は、割り当て候補となるジョブを決定する処理である。
【０１１１】
管理ノード２０１は、ｊｉｄ＿ｍｉｎを実行待ち最小ジョブ番号に設定する（ステップＳ１１０１）。また、管理ノード２０１は、ｊｉｄ＿ｍａｘを実行待ち最大ジョブ番号に設定する（ステップＳ１１０２）。また、管理ノード２０１は、ｊｉｄを０に設定する（ステップＳ１１０３）。
【０１１２】
次に、管理ノード２０１は、ユーザＡフェアシェア値がユーザＢフェアシェア値より大きいか否かを判断する（ステップＳ１１０４）。ユーザＡフェアシェア値がユーザＢフェアシェア値より大きい場合（ステップＳ１１０４：Ｙｅｓ）、管理ノード２０１は、ｊｉｄ＿ｍｉｎからｊｉｄ＿ｍａｘの順番でユーザＡのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してｊｉｄに設定する（ステップＳ１１０５）。そして、管理ノード２０１は、ｊｉｄが０より大きいか否かを判断する（ステップＳ１１０６）。ｊｉｄが０以下である場合（ステップＳ１１０６：Ｎｏ）、管理ノード２０１は、ｊｉｄ＿ｍｉｎからｊｉｄ＿ｍａｘの順番でユーザＢのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してｊｉｄに設定する（ステップＳ１１０７）。ステップＳ１１０７の処理終了後、または、ｊｉｄが０より大きい場合（ステップＳ１１０６：Ｙｅｓ）、管理ノード２０１は、割り当て候補ジョブ決定処理を終了する。
【０１１３】
一方、ユーザＡフェアシェア値がユーザＢフェアシェア値以下である場合（ステップＳ１１０４：Ｎｏ）、管理ノード２０１は、ユーザＡフェアシェア値がユーザＢフェアシェア値より小さいか否かを判断する（ステップＳ１１０８）。ユーザＡフェアシェア値がユーザＢフェアシェア値より小さい場合（ステップＳ１１０８：Ｙｅｓ）、管理ノード２０１は、ｊｉｄ＿ｍｉｎからｊｉｄ＿ｍａｘの順番でユーザＢのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してｊｉｄに設定する（ステップＳ１１０９）。そして、管理ノード２０１は、ｊｉｄが０より大きいか否かを判断する（ステップＳ１１１０）。ｊｉｄが０以下である場合（ステップＳ１１１０：Ｎｏ）、管理ノード２０１は、ｊｉｄ＿ｍｉｎからｊｉｄ＿ｍａｘの順番でユーザＡのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してｊｉｄに設定する（ステップＳ１１１１）。ステップＳ１１１１の処理終了後、または、ｊｉｄが０より大きい場合（ステップＳ１１１０：Ｙｅｓ）、管理ノード２０１は、割り当て候補ジョブ決定処理を終了する。
【０１１４】
ユーザＡフェアシェア値がユーザＢフェアシェア値以上である場合（ステップＳ１１０８：Ｎｏ）、管理ノード２０１は、ｊｉｄ＿ｍｉｎからｊｉｄ＿ｍａｘの順番で要求ノード数が空きノード数以下のジョブを検索してｊｉｄに設定する（ステップＳ１１１２）。ステップＳ１１１２の処理終了後、管理ノード２０１は、割り当て候補ジョブ決定処理を終了する。割り当て候補ジョブ決定処理を実行することにより、管理ノード２０１は、割り当て候補となるジョブを決定することができる。
【０１１５】
図１２は、計算資源割り当て処理手順の一例を示すフローチャートである。計算資源割り当て処理は、ジョブに計算資源を割り当てる処理である。また、計算資源割り当て処理は、ステップＳ９０４で設定されたｊｉｄを引数として受け付ける。
【０１１６】
管理ノード２０１は、ｎｏｄｅをｊｉｄ番号のジョブの要求ノード数に設定する（ステップＳ１２０１）。次に、管理ノード２０１は、ｅｌａｐｓｅをｊｉｄ番号のジョブの専有使用時間に設定する（ステップＳ１２０２）。そして、管理ノード２０１は、ｎｏｄｅ数、ｅｌａｐｓｅ時間のノードを割り当てる（ステップＳ１２０３）。次に、管理ノード２０１は、ｕｕをｊｉｄ番号のジョブのユーザＩＤに設定する（ステップＳ１２０４）。そして、管理ノード２０１は、フェアシェア使用量をｎｏｄｅ＊ｅｌａｐｓｅ／ユーザｕｕフェアシェア配分率に決定する（ステップＳ１２０５）。次に、管理ノード２０１は、ユーザｕｕフェアシェア値をユーザｕｕフェアシェア値−フェアシェア使用量に設定する（ステップＳ１２０６）。そして、管理ノード２０１は、割り当てたノードに、ｊｉｄ番号のジョブを実行開始させる（ステップＳ１２０７）。
【０１１７】
ステップＳ１２０７の処理終了後、管理ノード２０１は、計算資源割り当て処理を終了する。計算資源割り当て処理を実行することにより、管理ノード２０１は、ジョブに計算資源を割り当てることができる。
【０１１８】
図１３は、イベント待ち処理手順の一例を示すフローチャートである。イベント待ち処理は、受け付けイベントに応じた処理を行う処理である。
【０１１９】
管理ノード２０１は、ｅｅを受け付けイベントに設定する（ステップＳ１３０１）。ここで、受け付けイベントは、新規ジョブ投入イベント、ジョブ実行終了イベント、スケジューラ停止イベントのいずれかである。
【０１２０】
次に、管理ノード２０１は、ｅｅがジョブ実行終了イベントか否かを判断する（ステップＳ１３０２）。ｅｅがジョブ実行終了イベントである場合（ステップＳ１３０２：Ｙｅｓ）、管理ノード２０１は、ｊｉｄを実行終了したジョブ番号に設定する（ステップＳ１３０３）。次に、管理ノード２０１は、ｎｏｄｅをｊｉｄ番号のジョブの要求ノード数に設定する（ステップＳ１３０４）。そして、管理ノード２０１は、ｅｌａｐｓｅをｊｉｄ番号のジョブの専有使用時間に設定する（ステップＳ１３０５）。次に、管理ノード２０１は、ｓｓをｊｉｄ番号のジョブの実行開始時刻に設定する（ステップＳ１３０６）。そして、管理ノード２０１は、ｕｕをｊｉｄ番号のジョブのユーザＩＤに設定する（ステップＳ１３０７）。
【０１２１】
次に、管理ノード２０１は、フェアシェア返却量をｎｏｄｅ＊（ｅｌａｐｓｅ−（現在時刻−ｓｓ））／ユーザｕｕフェアシェア配分率に決定する（ステップＳ１３０８）。そして、管理ノード２０１は、ユーザｕｕフェアシェア値をユーザｕｕフェアシェア値＋フェアシェア返却量に設定する（ステップＳ１３０９）。ステップＳ１３０９の処理終了後、または、ｅｅがジョブ実行終了イベントでない場合（ステップＳ１３０２：Ｎｏ）、管理ノード２０１は、イベント待ち処理を終了する。イベント待ち処理を実行することにより、管理ノード２０１は、受け付けイベントに応じた処理を行うことができる。
【０１２２】
以上説明したように、管理ノード２０１は、各々のユーザのフェアシェア配分率に基づいて各々のユーザのフェアシェア値から減算する各々のユーザのフェアシェア使用量を決める。これにより、どのタイミングでも各々のユーザのフェアシェア値の差が各々のユーザのフェアシェア配分率に従うため、計算資源を各々のユーザが有するジョブに無駄なく割り当てることができる。
【０１２３】
また、管理ノード２０１によれば、各々のユーザが有するジョブにいずれかのノードを割り当てたことに応じて、割り当てたノードの数と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。各々のユーザが有するジョブが要求するプロセッサを利用する時間が常に固定値であり、全て同一である場合、各々のフェアシェア使用量は、割り当てたノードの数と各々のユーザのフェアシェア配分率とに依存する。この場合、管理ノード２０１は、ノード＃１〜＃ｎの計算資源を無駄にすることなく、各々のユーザのフェアシェア配分率で各々のユーザが有するジョブに計算資源を割り当てることができる。そして、この場合、各々のユーザが有するジョブが要求するプロセッサを利用する時間を考慮しなくてよい分、管理ノード２０１は、ジョブ制御にかかる負荷を抑えることができる。
【０１２４】
また、管理ノード２０１によれば、各々のユーザが有するジョブにノードを利用する時間を割り当てたことに応じて、前述の時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。ジョブが要求するプロセッサの数が常に固定値であり、全て同一である場合、各々のフェアシェア使用量は、各々のユーザが有するジョブにノードを利用する時間と各々のユーザのフェアシェア配分率とに依存する。この場合、管理ノード２０１は、ノード＃１〜＃ｎの計算資源を無駄にすることなく、各々のジョブのフェアシェア配分率で各々のユーザが有するジョブに計算資源を割り当てることができる。そして、この場合、ジョブが要求するプロセッサの数を考慮しなくてよい分、管理ノード２０１は、ジョブ制御にかかる負荷を抑えることができる。
【０１２５】
また、各々のユーザが有するジョブに前述の時間を割り当てた後、前述の時間が経過する前に各々のユーザが有するジョブが終了したとする。このとき、管理ノード２０１によれば、各々のユーザが有するジョブが終了した時刻から前述の時間が経過する時刻までの時間と、各々のユーザのフェアシェア配分率とに基づいて、フェアシェア返却量を決定してもよい。これにより、管理ノード２０１は、前述の時間が経過する前に各々のユーザが有するジョブが終了した場合にも、各々のユーザのフェアシェア配分率を維持して各々のユーザが有するジョブに計算資源を割り当てることができる。
【０１２６】
なお、本実施の形態で説明したジョブ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ジョブ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ジョブ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２８】
（付記１）複数のユーザの各々のユーザの計算資源の配分の比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
制御部を有することを特徴とする並列演算装置。
【０１２９】
（付記２）前記計算資源が、複数のプロセッサのうちのいずれかのプロセッサであって、
前記制御部は、
前記各々のユーザが有するジョブに前記プロセッサを割り当てたことに応じて、前記プロセッサの数と前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブに前記プロセッサが割り当てられることにより低下させる度合いを決定することを特徴とする付記１に記載の並列演算装置。
【０１３０】
（付記３）前記計算資源が、プロセッサを利用する時間であって、
前記制御部は、
前記各々のユーザが有するジョブに前記時間を割り当てたことに応じて、前記時間と前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブに前記時間が割り当てられることにより低下させる度合いを決定することを特徴とする付記１または２に記載の並列演算装置。
【０１３１】
（付記４）前記制御部は、
前記各々のユーザが有するジョブに前記時間を割り当てた後、前記時間が経過する前に前記各々のユーザが有するジョブが終了したことに応じて、前記各々のユーザが有するジョブが終了した時刻から前記時間が経過する時刻までの時間と、前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブが終了することにより上昇させる度合いを決定することを特徴とする付記３に記載の並列演算装置。
【０１３２】
（付記５）複数のプロセッサを有する並列演算システムであって、
前記複数のプロセッサのいずれかのプロセッサは、
複数のユーザの各々のユーザの計算資源の配分の比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
ことを特徴とする並列演算システム。
【０１３３】
（付記６）コンピュータに、
複数のユーザの各々のユーザの計算資源の配分の比率を記憶する記憶部から前記比率を読み出し、
読み出した前記比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
処理を実行させることを特徴とするジョブ制御プログラム。
【０１３４】
（付記７）コンピュータが、
複数のユーザの各々のユーザの計算資源の配分の比率を記憶する記憶部から前記比率を読み出し、
読み出した前記比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
処理を実行することを特徴とするジョブ制御方法。
【符号の説明】
【０１３５】
１０１  並列演算装置
２００  並列演算システム
４００  制御部
４０１  割当部
４０２  決定部
４１０  記憶部
【図１】
0006524733.tif 000002
【図２】
0006524733.tif 000003
【図３】
0006524733.tif 000004
【図４】
0006524733.tif 000005
【図５】
0006524733.tif 000006
【図６】
0006524733.tif 000007
【図７】
0006524733.tif 000008
【図８】
0006524733.tif 000009
【図９】
0006524733.tif 000010
【図１０】
0006524733.tif 000011
【図１１】
0006524733.tif 000012
【図１２】
0006524733.tif 000013
【図１３】
0006524733.tif 000014