(57)【要約】【課題】ジョブを実行していない計算機の消費電力量を削減する。【解決手段】情報処理装置１０は、第１計算機２，３が実行中の第１ジョブ終了後に第１計算機２，３と共に第２ジョブを実行する第２計算機１の起動処理に要する起動時間中に、第１計算機２，３が起動済みでかつジョブ非実行状態となっていた場合に、第１計算機２，３が消費する第１消費電力量４を算出する。また情報処理装置１０は、第１ジョブの終了予定時刻と現在時刻との時間差から第２計算機１の起動時間を差し引いた待ち時間中に、第２計算機１が起動済みでかつジョブ非実行状態となっていた場合に、第２計算機１が消費する第２消費電力量５を算出する。そして情報処理装置１０は、第２計算機１が停止状態であり、かつ第２消費電力量５が、第１消費電力量４に基づいて決定された閾値以下になった場合、第２計算機１の起動制御を行う。【選択図】図１
2019109600.tif 000002
【特許請求の範囲】
【請求項１】
第１計算機が実行中の第１ジョブの終了予定時刻を記憶する記憶部と、
前記第１ジョブ終了後に前記第１計算機と共に第２ジョブを実行する第２計算機の起動処理に要する起動時間中に、前記第１計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第１計算機が消費する第１消費電力量を算出し、前記第１ジョブの前記終了予定時刻と現在時刻との時間差から前記第２計算機の前記起動時間を差し引いた待ち時間中に、前記第２計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第２計算機が消費する第２消費電力量を算出し、前記第２計算機が停止状態であり、かつ前記第２消費電力量が前記第１消費電力量に基づいて決定された閾値以下になった場合、前記第２計算機の起動制御を行う処理部と、
を有する情報処理装置。
【請求項２】
前記処理部は、前記第２計算機の前記起動制御以前に、前記第２計算機が起動済みでかつジョブ未実行の状態にあるとき、前記第１ジョブの前記終了予定時刻と現在時刻の時間差が、前記第２計算機の停止処理に要する停止時間と前記第２計算機の前記起動時間との合計よりも大きいかどうかを判断し、前記時間差の方が大きい場合に前記第２計算機の停止制御を行う、
請求項１記載の情報処理装置。
【請求項３】
前記処理部は、前記第１ジョブを実行している計算機が複数ある場合、前記第１ジョブを実行している計算機のうち、前記第２ジョブの実行に利用する計算機を前記第１計算機に決定する、
請求項１または２記載の情報処理装置。
【請求項４】
前記処理部は、前記第１消費電力量に０以上の係数を乗算した値を、前記閾値とする、
請求項１ないし３のいずれかに記載の情報処理装置。
【請求項５】
前記処理部は、前記第１ジョブの終了時刻から前記第１ジョブの前記終了予定時刻までの時間だけ、前記第２計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第２計算機が消費する第３消費電力量を算出し、前記第３消費電力量を前記第１消費電力量で除算した値に基づいて、前記係数の値を更新する、
請求項４記載の情報処理装置。
【請求項６】
コンピュータが、
第１計算機が実行中の第１ジョブ終了後に前記第１計算機と共に第２ジョブを実行する第２計算機の起動処理に要する起動時間中に、前記第１計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第１計算機が消費する第１消費電力量を算出し、
前記第１ジョブの終了予定時刻と現在時刻との時間差から前記第２計算機の前記起動時間を差し引いた待ち時間中に、前記第２計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第２計算機が消費する第２消費電力量を算出し、
前記第２計算機が停止状態であり、かつ前記第２消費電力量が前記第１消費電力量に基づいて決定された閾値以下になった場合、前記第２計算機の起動制御を行う、
計算機制御方法。
【請求項７】
コンピュータに、
第１計算機が実行中の第１ジョブ終了後に前記第１計算機と共に第２ジョブを実行する第２計算機の起動処理に要する起動時間中に、前記第１計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第１計算機が消費する第１消費電力量を算出し、
前記第１ジョブの終了予定時刻と現在時刻との時間差から前記第２計算機の前記起動時間を差し引いた待ち時間中に、前記第２計算機が起動済みでかつジョブ非実行状態となっていた場合に、前記第２計算機が消費する第２消費電力量を算出し、
前記第２計算機が停止状態であり、かつ前記第２消費電力量が前記第１消費電力量に基づいて決定された閾値以下になった場合、前記第２計算機の起動制御を行う、
処理を実行させる計算機制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、計算機制御方法、および計算機制御プログラムに関する。
【背景技術】
【０００２】
スーパーコンピュータや大規模なＰＣ（Personal Computer）クラスタシステムのような高性能なコンピュータシステムは、ＨＰＣ（High Performance Computing）システムと呼ばれる。
【０００３】
今日のＨＰＣシステムは複数のコンピュータ（計算機）が高速な通信ネットワークで接続されている。そして複数の計算機により計算処理が並列で実行される。計算処理を実行する各計算機は、計算ノードと呼ばれる。ＨＰＣシステムの利用者は、ＨＰＣシステムで実行させるジョブの実行依頼を、ＨＰＣシステム内に設けられたジョブスケジューラに入力する。ジョブは、ＨＰＣシステムに実行させる計算処理単位である。ジョブの実行依頼を入力する際、利用者はジョブの実行に利用する計算資源として、利用する計算ノード数、利用予定時間を指定する。
【０００４】
ジョブスケジューラによって受け付けられた複数のジョブは、ＦＣＦＳ（First Come First Served）などのポリシーに従い、実行順序および実行する計算ノードが決定され、決定された計算ノードで順次ジョブが実行される。なお、各ジョブの利用する計算資源の量は利用者によって任意に指定できるため、ジョブの実行に利用する計算ノード数と利用予定時間は共に不均一である。そのため、次に実行するジョブの実行に利用する数分の計算ノードが利用可能となるまで、先に利用可能となった計算ノードは、ジョブを実行しない状態で待機することになる。その結果、ＨＰＣシステム内には、ジョブの実行に利用されていない状態の計算ノードが発生する。以下、ジョブの実行に利用されていない状態の計算ノードを、空き計算ノードと呼ぶ。
【０００５】
空き計算ノードであっても、電源が投入されている限り、電力を消費している。これは、空き計算ノードが長い期間存在すると、ジョブの実行に利用されていない無駄な電力消費（ロス電力）が生じることを意味する。
【０００６】
無駄に消費される電力量（ロス電力量）を削減する技術としては、空き計算ノードの電力を停止させる技術がある。例えば、次に実行予定のジョブの実行に利用する台数の空き計算ノードが用意できるまで、既に用意できている空き計算ノードの電力を停止させる。停止された計算ノードは、利用ノード数分の空き計算ノードが用意できた時点で起動される。この場合、最後に空き計算ノードとなった計算ノードは、他の空き計算ノードの起動処理が完了するまで待機することとなる。この起動待ちの時間において、最後に空き計算ノードとなった計算ノードは、ジョブを実行せずに無駄な電力を消費し、ロス電力が発生する。すなわち、この例では、空き計算ノードへの電力供給を停止させることで、他のジョブの終了待ちによるロス電力の発生を抑止したとしても、起動待ちによるロス電力が発生してしまう。
【０００７】
そこで、電源を停止していた計算ノードを、前倒しで起動することが考えられる。例えば利用者が指定した利用予定時間ちょうどで各ジョブの実行が終了するのであれば、各ジョブの終了時刻を正確に予測できる。この場合、ジョブの終了時刻に合わせて、停止していた空き計算ノードを起動しておくことで、起動待ちによるロス電力の発生をなくすことができる。
【０００８】
なお、ロス電力量を削減する技術には、次のような技術がある。例えば、ホスト計算機を停止状態へ移行させることで計算機システム全体の消費電力を抑制しながらも、停止状態となったホスト計算機が利用可能になるまでの待ち時間を抑制して計算機システム全体の性能向上を図る計算機システムが考えられている。また複数のノードを一つのクラスタとして動作させ、アイドル状態のノードについて節電することによりクラスタ全体の省電力化を図ることができるクラスタシステムも考えられている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００８−２２５６３９号公報
【特許文献２】特開２００３−１６２５１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ジョブの終了時刻に合わせて停止していた空き計算ノードを起動することによるロス電力量の削減は、各ジョブの終了時刻を正確に予測できる場合には有効である。しかし、実際には、利用者は、利用予定時間内にジョブを確実に完了させるために、利用予定時間を長めに見積もっており、ジョブの実際の実行時間は、利用予定時間よりも短くなる。そして、実際にジョブの実行にどの程度の時間がかかるのかを正確に予測することは難しい。そのため、従来は、電源停止中の計算ノードの適切な起動タイミングを判断することができず、ジョブを実行していない計算ノードの消費電力量が、十分に削減できていない。
【００１１】
なお、このような問題は、ＨＰＣシステムに限らず、複数の計算機を用いてジョブを実行するシステム全般に共通の問題である。
１つの側面では、本件は、ジョブを実行していない計算機の消費電力量を削減することを目的とする。
【課題を解決するための手段】
【００１２】
１つの案では、以下に示す記憶部と処理部とを有する情報処理装置が提供される。
記憶部は、第１計算機が実行中の第１ジョブの終了予定時刻を記憶する。処理部は、第１ジョブ終了後に第１計算機と共に第２ジョブを実行する第２計算機の起動処理に要する起動時間中に、第１計算機が起動済みでかつジョブ非実行状態となっていた場合に、第１計算機が消費する第１消費電力量を算出する。また処理部は、第１ジョブの終了予定時刻と現在時刻との時間差から第２計算機の起動時間を差し引いた待ち時間中に、第２計算機が起動済みでかつジョブ非実行状態となっていた場合に、第２計算機が消費する第２消費電力量を算出する。そして処理部は、第２計算機が停止状態であり、かつ第２消費電力量が第１消費電力量に基づいて決定された閾値以下になった場合、第２計算機の起動制御を行う。
【発明の効果】
【００１３】
１態様によれば、ジョブを実行していない計算機の消費電力量が削減される。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係るシステムの構成の一例を示す図である。
【図２】第２の実施の形態のＨＰＣシステムの構成の一例を示す図である。
【図３】制御ノードのハードウェアの一構成例を示す図である。
【図４】制御ノードの機能の一例を示す図である。
【図５】ジョブスケジュールの一例を示す図である。
【図６】ジョブスケジュール通りにジョブが実行された場合の消費電力削減例を示す図である。
【図７】起動待ちのロス電力発生例を示す図である。
【図８】終了待ちのロス電力発生例（第１の例）を示す図である。
【図９】終了待ちのロス電力発生例（第２の例）を示す図である。
【図１０】電源停止状態の計算ノードの起動開始時刻の判断例を示す図である。
【図１１】ジョブＣの終了時刻とロス電力量との関係を示す図である。
【図１２】ジョブスケジューリングテーブルの一例を示す図である。
【図１３】ノード利用予定テーブルの一例を示す図である。
【図１４】更新後のノード利用予定テーブルの一例を示す図である。
【図１５】電源制御処理の手順の一例を示すフローチャートである。
【図１６】シャットダウン制御処理の手順の一例を示すフローチャートである。
【図１７】ブート制御処理の手順の一例を示すフローチャートである。
【図１８】実行中ジョブリスト作成処理の手順の一例を示すフローチャートである。
【図１９】起動待ちのロス電力量算出処理の手順の一例を示すフローチャートである。
【図２０】終了待ちのロス電力量算出処理の手順の一例を示すフローチャートである。
【図２１】係数αの値が異なるときのロス電力量発生状況の違いの例を示す図である。
【図２２】ロス電力量の実績記録用に拡張されたノード利用予定テーブルの一例を示す図である。
【図２３】起動待ちのロス電力量の評価値と実起動時刻とが設定されたノード利用予定テーブルの一例を示す図である。
【図２４】終了待ちのロス電力量の仮定値の算出例を示す図である。
【図２５】係数αの更新処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず、第１の実施の形態について説明する。第１の実施の形態は、ジョブ非実行状態の計算機の電源を停止した場合における、停止した計算機起動に伴う計算機間の待ち合わせのために生じる消費電力量を削減することで、システム全体の消費電力量を低減させるものである。
【００１６】
図１は、第１の実施の形態に係るシステムの構成の一例を示す図である。情報処理装置１０は、複数の計算機１，２，３に接続されている。複数の計算機１，２，３は、例えばプロセッサおよびメモリを有するコンピュータである。複数の計算機１，２，３それぞれには、識別番号が付与されている。計算機１の識別番号は「１」、計算機２の識別番号は「２」、計算機３の識別番号は「３」である。情報処理装置１０は、計算機１，２，３に対してジョブを実行させると共に、計算機１，２，３の停止と起動とを制御する。
【００１７】
情報処理装置１０は、計算機１，２，３を制御するために、記憶部１１と処理部１２とを有する。記憶部１１は、例えば情報処理装置１０が有するメモリ、またはストレージ装置である。処理部１２は、例えば情報処理装置１０が有するプロセッサ、または演算回路である。
【００１８】
記憶部１１は、ジョブスケジュール情報１１ａを記憶する。ジョブスケジュール情報１１ａには、計算機１，２，３に実行させるジョブの実行スケジュールが設定されている。例えばジョブスケジュール情報１１ａには、既に実行が開始されているジョブに関しては、そのジョブの実行に利用されている計算機の識別番号、ジョブの実行を開始した時刻（開始時刻）、ジョブの実行が終了する予定の時刻（終了予定時刻）が設定されている。またジョブスケジュール情報１１ａには、まだ実行が開始されていないジョブに関しては、そのジョブの実行に利用する計算機の識別番号、ジョブの実行を開始する予定の時刻（開始予定時刻）、および終了予定時刻が設定されている。図１の例では、第１ジョブが実行中であり、第１ジョブの実行終了後に、第１ジョブに利用していた計算機を用いて第２ジョブを実行することが、ジョブスケジュール情報１１ａに設定されている。
【００１９】
処理部１２は、記憶部１１に格納されたジョブスケジュール情報１１ａに示されたスケジュールに従って、計算機１，２，３に対してジョブの実行を依頼する。また処理部１２は、以下の手順で、計算機１，２，３の電源制御を行う。電源制御としては、電源の停止制御と起動制御とがある。以下、第１ジョブを実行中の計算機２，３を第１計算機、第１ジョブ終了後に第１計算機と共に第２ジョブを実行する計算機１を、第２計算機と呼ぶこととする。
【００２０】
まず、停止制御について説明する。処理部１２は、第２計算機（計算機１）が起動済みでかつジョブ未実行状態にあるときに、停止制御を行うか否かを判断する。例えば処理部１２は、第１ジョブの終了予定時刻と現在時刻の時間差が、第２計算機（計算機１）の停止処理に要する停止時間と第２計算機（計算機１）の起動時間との合計よりも大きいかどうかを判断する。そして処理部１２は、時間差の方が大きい場合に第２計算機（計算機１）の停止制御を行う。例えば処理部１２は、第２計算機（計算機１）に停止指示を送信する。停止指示を受信した第２計算機（計算機１）は、システムの停止処理（シャットダウン処理）を行い、停止処理完了後に、第２計算機（計算機１）の電源を停止する。電源を停止するとは、例えば電源スイッチを電子的にオフにする処理である。なお、第２計算機（計算機１）が停止するのは主電源であり、主電源を停止しても、情報処理装置１０からの起動指示を受信し、起動指示に応じて電源投入処理を行う回路には、電力が継続して供給される。
【００２１】
このようにして、ジョブを実行していない計算機を停止させることで、消費電力を低減させることができる。なお、処理部１２による第２計算機（計算機１）に対する電源の停止制御を行うのは、第２計算機（計算機１）が電源の起動制御によって起動される以前に限られる。すなわち、起動制御によって起動された後は、電源停止の条件が満たされていたとしても、処理部１２は、第２計算機（計算機１）に対する電源の停止制御を行わない。
【００２２】
次に、起動制御について説明する。処理部１２は、第２計算機（計算機１）の起動処理に要する起動時間中に、第１計算機（計算機２，３）が消費する第１消費電力量４を算出する。なお、第１消費電力量４は、第１計算機（計算機２，３）が起動済みでかつジョブ非実行状態となっていた場合における第１計算機（計算機２，３）の消費電力に基づいて算出される。
【００２３】
また処理部１２は、第１ジョブの終了予定時刻と現在時刻の時間差から第２計算機（計算機１）の起動時間を差し引いた待ち時間中に、第２計算機（計算機１）が消費する第２消費電力量５を算出する。なお、第２消費電力量５は、第２計算機（計算機１）が起動済みでかつジョブ非実行状態となっていた場合における第２計算機（計算機１）の消費電力に基づいて算出される。
【００２４】
そして処理部１２は、第２計算機（計算機１）が停止状態であり、かつ第２消費電力量５が第１消費電力量４に基づいて決定された閾値以下になった場合、第２計算機（計算機１）を起動させる起動制御を行う。閾値は、例えば第１消費電力量４に０以上の係数を乗算した値である。係数の値を「１」とし、第１消費電力量４を閾値として用いてもよい。
【００２５】
起動制御では、例えば処理部１２は、第２計算機（計算機１）に起動指示を送信する。起動指示を受信した第２計算機（計算機１）は、電源を投入する。電源を投入するとは、例えば電源スイッチを電子的にオンにする処理である。電源が投入された第２計算機（計算機１）は、システムの起動処理（ブート処理）を行う。
【００２６】
また処理部１２は、第２計算機（計算機１）に対する起動指示を送信する前に、第１ジョブの実行が終了した場合にも、第２計算機（計算機１）に対して起動指示を送信する。
第２計算機（計算機１）の起動処理が完了した後、処理部１２は、第１計算機（計算機２，３）と第２計算機（計算機１）とに第２ジョブの実行を指示する。例えば処理部１２は、第２計算機（計算機１）の起動処理が完了した時点で、既に第１ジョブの実行が終了していれば、すぐに第２ジョブの実行を指示する。また処理部１２は、第２計算機（計算機１）の起動処理が完了した時点で、まだ第１ジョブの実行が終了していない場合、第１ジョブの実行が終了するのを待つ。そして処理部１２は、第１ジョブの実行が終了すると、第２ジョブの実行を指示する。
【００２７】
このように、第１の実施の形態では、第１ジョブの終了予定時刻を待たずに、第２計算機（計算機１）を起動する。これにより、第１計算機（計算機２，３）において、第２計算機（計算機１）の起動待ちが発生することが抑止される。すなわち、第２計算機（計算機１）の起動待ちによる電力の消費が抑止される。
【００２８】
ここで第２計算機（計算機１）の起動が早いほど、第２計算機（計算機１）における、第１ジョブの終了待ちの時間が長くなる。そこで、処理部１２は、例えば第２消費電力量が第１消費電力量以下になるのを待って第２計算機（計算機１）を起動させる。この場合、第１ジョブの終了待ちによる無駄な消費電力量は、最大でも第１消費電力量となる。第１ジョブの終了待ちによる無駄な消費電力量が最大となるのは、第１ジョブが終了予定時刻まで実行されている場合である。第２計算機（計算機１）への起動完了後、かつ終了予定時刻より前に第１ジョブが終了すれば、第１ジョブの終了待ちによる無駄な消費電力量は、第１消費電力量より少なくなる。一般的に、ジョブの実行予定時間は、実際にジョブの実行に要する時間よりも長く設定されるため、ほとんどの場合において、第１ジョブの終了待ちによる無駄な消費電力量は、第１消費電力量より少なくなる。すなわち、消費電力量が削減される。
【００２９】
なお処理部１２は、係数を用いて閾値を決定するとき、第１ジョブの終了時刻に基づいて、係数の値の最適化を行うこともできる。例えば処理部１２は、第１ジョブの終了時刻から第１ジョブの終了予定時刻までの時間だけ、第２計算機（計算機１）が起動済みでかつジョブ非実行状態となっていた場合に、第２計算機（計算機１）が消費する第３消費電力量を算出する。そして処理部１２は、第３消費電力量を第１消費電力量４で除算した値（係数の適性値）に基づいて、係数の値を更新する。例えば処理部１２は、多数のジョブの実行時に、各ジョブの実行時における係数の適性値を算出する。そして処理部１２は、複数の適性値の代表値（例えば平均値）に、係数の値を更新する。このように係数の値の最適化を行うことで、消費電力をさらに削減することが可能となる。
【００３０】
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、ＨＰＣシステムにおける消費電力を削減するものである。
【００３１】
ＨＰＣシステムは、科学技術や産業利用として幅広く使われており、ＨＰＣシステムの性能が高いほど複雑な計算を短時間で行うことが可能となる。そのため、より高性能なＨＰＣシステムが求められ、そのシステム規模は拡大し続けている。システム規模が拡大することで、システムの消費電力も増大する。このように増大傾向にあるＨＰＣシステムの消費電力を削減することは、ＨＰＣシステムを運用する上で重要となる。
【００３２】
そこで、第２の実施の形態では、ジョブ実行に利用されていない空き計算ノードの電源の起動・停止を適切に制御して、空き計算ノードで消費される電力量（ロス電力量）を削減することで、ＨＰＣシステム全体の消費電力を削減する。
【００３３】
図２は、第２の実施の形態のＨＰＣシステムの構成の一例を示す図である。ＨＰＣシステムでは、計算ノード群３０に、制御用ネットワーク２０を介して制御ノード１００が接続されている。
【００３４】
計算ノード群３０には、複数の計算ノードが含まれる。計算ノードは、ＨＰＣシステムにおいて計算を担うコンピュータである。計算ノード群３０に含まれる計算ノード間は、多次元のメッシュ、トーラス、またはファットツリーなどのネットワークで接続されている。
【００３５】
制御ノード１００は、制御用ネットワーク２０経由で、計算ノード群３０内の計算ノードにジョブの実行を依頼するコンピュータである。各計算ノードは、ジョブの実行要求に応じて、その実行要求に示されたジョブを実行する。
【００３６】
また制御ノード１００は、ＨＰＣシステム全体の消費電力を削減するために、各計算ノードの電源を制御する。ここで、ジョブを実行している計算ノードの消費電力はジョブの実行のために有効に利用されており、消費電力削減のための電源制御の対象とはならない。それに対して、ジョブを実行していない空き計算ノードの消費電力はジョブの実行に有効利用されておらず、消費電力削減のための電源制御の対象となる。
【００３７】
なお、図２に示したように、複数の計算ノードがメッシュ接続またはトーラス接続されている場合、計算ノード間で通信されるデータは、隣接する計算ノード間で受け渡され、宛先の計算ノードへと転送される。すなわち、計算ノードは、データの中継装置も兼ねている。このような場合、各計算ノードは、シャットダウンの指示を受けたとき、データの中継機能に関係しない機能のみを停止させる。これにより、一部の計算ノードのシャットダウンを行っても、ＨＰＣシステム内でのデータ伝送を、支障なく継続させることができる。
【００３８】
図３は、制御ノードのハードウェアの一構成例を示す図である。制御ノード１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３９】
メモリ１０２は、制御ノード１００の主記憶装置として利用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に利用する各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００４０】
バス１０９に接続されている周辺機器としては、ストレージ装置１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００４１】
ストレージ装置１０３は、内蔵した記録媒体に対して、電気的または磁気的にデータの書き込みおよび読み出しを行う。ストレージ装置１０３は、コンピュータの補助記憶装置として使用される。ストレージ装置１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、ストレージ装置１０３としては、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）を使用することができる。
【００４２】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、有機ＥＬ（Electro Luminescence）を用いた表示装置や液晶表示装置などがある。
【００４３】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４４】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４５】
機器接続インタフェース１０７は、制御ノード１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４６】
ネットワークインタフェース１０８は、制御用ネットワーク２０に接続されている。ネットワークインタフェース１０８は、制御用ネットワーク２０を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４７】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した情報処理装置１０も、図３に示した制御ノード１００と同様のハードウェアにより実現することができる。
【００４８】
制御ノード１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。制御ノード１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、制御ノード１００に実行させるプログラムをストレージ装置１０３に格納しておくことができる。プロセッサ１０１は、ストレージ装置１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。また制御ノード１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ストレージ装置１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４９】
次に、制御ノード１００が有する機能について説明する。
図４は、制御ノードの機能の一例を示す図である。制御ノード１００は、ジョブスケジュール記憶部１１０とジョブスケジューラ１２０とを有する。ジョブスケジュール記憶部１１０とジョブスケジューラ１２０とは、例えば、それぞれに対応するプログラムモジュールを制御ノード１００に実行させることで実現することができる。
【００５０】
ジョブスケジュール記憶部１１０は、ジョブの実行スケジュールに関する情報を記憶する。例えばジョブスケジュール記憶部１１０は、ジョブスケジューリングテーブル１１１とノード利用予定テーブル１１２とを記憶する。ジョブスケジューリングテーブル１１１には、ジョブの実行スケジュールが設定される。ノード利用予定テーブル１１２には、計算ノードの状態やロス電力の評価結果などが設定される。
【００５１】
ジョブスケジューラ１２０は、実行するジョブのスケジューリングを行う。例えばジョブスケジューラ１２０は、利用者からのジョブの実行指示を受け付ける。ジョブの実行指示には、例えばジョブの実行に利用する計算資源の情報が含まれる。計算資源の情報には、利用する計算ノード数とジョブの利用予定時間が含まれる。ジョブスケジューラ１２０は、複数の利用者それぞれからジョブの実行指示を受け付けると、それぞれのジョブの実行順と、各ジョブの実行に割り当てる計算資源を決定する。決定される計算資源の情報には、ジョブの実行に利用する１以上の計算ノード、ジョブの実行開始予定時刻、およびジョブの実行終了予定時刻が含まれる。ジョブスケジューラ１２０は、決定した計算資源の情報に基づいて、ジョブスケジューリングテーブル１１１に情報を設定する。そして、ジョブスケジューラ１２０は、ジョブスケジューリングテーブル１１１に示されるジョブの実行スケジュールに従って、計算ノード３１，３２，・・・にジョブの実行要求を送信する。
【００５２】
さらにジョブスケジューラ１２０は、ジョブスケジューリングテーブル１１１を参照して、ＨＰＣシステムの消費電力の省電力化を図るための計算ノード３１，３２，・・・の電源制御を行う。例えばジョブスケジューラ１２０は、ジョブを実行していない計算ノードの動作を停止させ、電源を停止させる。そしてジョブスケジューラ１２０は、消費電力の省電力化が図れるように、ジョブスケジューリングテーブル１１１に示されているジョブの実行予定に基づいて、停止している計算ノードの起動時刻を決定する。この際、ジョブスケジューラ１２０は、ノード利用予定テーブル１１２を利用して、ロス電力量が最小となるように、計算ノードの起動時刻を決定する。
【００５３】
図５は、ジョブスケジュールの一例を示す図である。横軸は時刻を示し、縦軸は計算ノードを示す。図５の例では、現在時刻ｔ0において、３つのジョブＡ，Ｂ，Ｃが実行されている。ジョブＡの実行には、ノード番号「１〜５」の５台の計算ノードが利用されている。ジョブＢの実行には、ノード番号「６〜１０」の５台の計算ノードが利用されている。ジョブＣの実行には、ノード番号「１１〜５０」の４０台の計算ノードが利用されている。これらのジョブＡ，Ｂ，Ｃの後に、さらに、大規模なジョブＤを実行する予定となっている。ジョブＤでは、ノード番号「１〜５０」の５０台の計算ノードを利用する。そのため、ジョブＤは、先行する３つのジョブＡ，Ｂ，Ｃの終了後に実行される。
【００５４】
ジョブＡの終了予定時刻は、時刻ｔ1である。ジョブＢの終了予定時刻は、時刻ｔ1よりも遅い時刻ｔ2である、ジョブＣの終了予定時刻は、時刻ｔ2よりも遅い時刻ｔ3である。この場合、ジョブＤの開始予定時刻は、時刻ｔ3となる。この結果、ノード番号「１〜５」の計算ノードは、時刻ｔ1からｔ3までの期間、ジョブ未実行状態となる。ノード番号「６〜１０」の計算ノードは、時刻ｔ2からｔ3までの期間、ジョブ未実行状態となる。
【００５５】
ジョブ未実行状態の計算ノードについても、ＯＳなどのシステムが動作している状態では、電力を消費し続ける。そこで、ジョブスケジューラ１２０は、ジョブ未実行状態の計算ノードの電源を停止することで消費電力を削減する。すなわちジョブスケジューラ１２０は、ジョブ未実行状態の計算ノードをシャットダウンすると共に電源をオフし、適切なタイミングでその計算ノード電源をオンして、起動処理（ブート）を実行させることでロス電力を削減する。
【００５６】
なお、計算ノードのブートやシャットダウンには一定の時間を要する。そのため無計画にジョブ未実行状態の計算ノードの電源制御を行うと、その計算ノードでのジョブ実行機会を逃し、計算ノードの稼働率の低下を招いてしまう。そこでジョブスケジューラ１２０は、ジョブスケジュール情報に基づいて電源制御を行うことで、ジョブＡ，Ｂ，Ｃがスケジュールより遅れて実行が開始されることを抑止する。すなわちジョブスケジューラ１２０は、ジョブＡ，Ｂの実行終了後にノード番号「１〜１０」の計算ノードの電源を停止した場合、少なくともジョブＣの終了予定時刻（時刻ｔ3）には、停止した計算ノードのブート処理が完了するように制御する。これにより、ＨＰＣシステムの稼働率が低下することが抑止される。すなわち、第２の実施の形態では、ＨＰＣシステムの稼働率に大きな影響を与えずに、ジョブ未実行状態の計算ノードの消費電力を最小限に抑えることができる。
【００５７】
図６は、ジョブスケジュール通りにジョブが実行された場合の消費電力削減例を示す図である。ノード番号「１〜５」の計算ノードは、時刻ｔ1にジョブＡの実行を終了すると、シャットダウンを開始し、時刻ｔ4にシャットダウンが完了している。ノード番号「１〜５」の計算ノードは、シャットダウン完了と同時に電源が停止される。ノード番号「６〜１０」の計算ノードは、時刻ｔ2にジョブＢの実行を終了すると、シャットダウンを開始し、時刻ｔ5にシャットダウンが完了している。ノード番号「６〜１０」の計算ノードは、シャットダウン完了と同時に電源が停止される。
【００５８】
そして、ジョブＣの終了予定時刻である時刻ｔ3から、計算ノードの起動処理（ブート）に要する時間だけ前の時刻ｔ6に、ノード番号「１〜１０」の計算ノードに電源が投入され、これらの計算ノードのブートが開始される。そして、ノード番号「１〜１０」の計算ノードは、時刻ｔ3にはジョブを実行可能な状態となる。時刻ｔ3にジョブＣの実行が終了すると、すぐにノード番号「１〜５０」の計算ノードにより、ジョブＤの実行が開始される。
【００５９】
この場合、ノード番号「１〜５」の計算ノードは、時刻ｔ4から時刻ｔ6までの期間は、電源停止状態となり、ほとんど電力を消費しない。ノード番号「６〜１０」の計算ノードは、時刻ｔ5から時刻ｔ6までの期間は、電源停止状態となり、ほとんど電力を消費しない。なお、電源停止状態であっても計算ノードにおいて若干の待機電力が消費されるが、ジョブ未実行状態の計算ノードを動作させておいた場合の消費電力に比べれば、待機電力は無視できるレベルである。
【００６０】
図６に示したようにジョブスケジュール通りにジョブが実行された場合には、ジョブ未実行状態の計算ノードの電源を停止させることで、消費電力を十分に削減できる。しかも、ジョブスケジューラ１２０は、ジョブＣの終了後にジョブＤを実行することをジョブスケジューリングテーブルとして持っている。そのため、ジョブスケジューラ１２０は、ジョブＣの終了時刻から一定時間（ブートの所要時間）前の時刻ｔ6に、停止させていた計算ノードをブート開始させることができる。これにより、電源の停止制御を行ったことが原因でジョブＤの実行開始が開始予定時刻より遅れることを抑止できる。
【００６１】
なおジョブスケジューラ１２０によって管理されるジョブの終了予定時刻は、利用者によって指定された利用予定時間に基づいて決められたものである。利用者は所望の計算処理を確実に終了させるために、利用予定時間として、想定される最大のジョブ実行時間に、さらに余裕を持たせた時間を指定する。その結果、大多数のジョブは利用予定時間よりも短い時間で終了する。すると次に実行するジョブが大規模なジョブの場合に、電源停止中の計算ノードのブート処理が完了するまで、既に動作している計算ノードは、ジョブ未実行状態で待機することとなる。この起動待ちの間、無駄な電力消費（起動待ちのロス電力）が発生する。
【００６２】
図７は、起動待ちのロス電力発生例を示す図である。図７の例では、ジョブＤに先行して実行されているジョブＡ，Ｂ，Ｃの実行が、終了予定時刻よりも早い時刻に終了している。ジョブＡは時刻ｔ1’（ｔ1’＜ｔ1）に終了している。ジョブＡを実行していたノード番号「１〜５」の計算ノードは、時刻ｔ1’にシャットダウンが開始され、時刻ｔ4’に電源が停止されている。ジョブＢは時刻ｔ2’（ｔ2’＜ｔ2）に終了している。ジョブＢを実行していたノード番号「６〜１０」の計算ノードは、時刻ｔ2’にシャットダウンが開始され、時刻ｔ5’に電源が停止されている。ジョブＣは時刻ｔ3’（ｔ3’＜ｔ3）に終了している。
【００６３】
ジョブＣの実行が終了したとき、ノード番号「１〜１０」の計算ノードの電源が停止していなければ、時刻ｔ3’からジョブＤの実行を開始できる。しかし図７に示すように、消費電力削減のためにジョブ未実行状態のノード番号「１〜１０」の計算ノードの電源を停止している場合には、時刻ｔ3’にノード番号「１〜１０」の計算ノードのブート処理が開始される。すると、ジョブＣを実行していたノード番号「１１〜５０」の計算ノードは、ノード番号「１〜１０」の計算ノードのブート処理が完了する時刻ｔ7まで、ジョブ未実行状態で待機する。このように、他の計算ノードが起動するのをジョブ未実行状態で待機している計算ノードの状態を、起動待ち状態と呼ぶ。
【００６４】
起動待ち状態の計算ノードでは、他の計算ノードのブート処理が完了するのを待っている間も電力が消費される。このとき消費された電力が、起動待ちのロス電力となる。起動待ちのロス電力を時間で積分した値が、起動待ちのロス電力量４１である。起動待ちのロス電力量４１は、ジョブ未実行状態における計算ノード１台当たりの消費電力に、起動待ち状態の計算ノード数とブート時間とを乗算した値となる。
【００６５】
ここで、起動待ちのロス電力の発生を抑止するため、例えば次に実行予定のジョブが利用する計算ノードで実行されているジョブが１つになった時点で、実行予定のジョブが利用する計算ノードのうちの電源停止状態の計算ノードをブートすることが考えられる。この場合、一部の計算ノードについては、ジョブ未実行状態で、次に実行予定のジョブが利用する計算ノードで実行されているジョブが終了するのを待つこととなり、この終了待ちの間、無駄な電力消費（終了待ちのロス電力）が発生する。
【００６６】
図８は、終了待ちのロス電力発生例（第１の例）を示す図である。図８の例では、ジョブＢの実行が終了することで、ジョブＤが利用する計算ノードで実行されているジョブが、ジョブＣのみとなる。そこで、ジョブＢの実行が終了した時刻ｔ2’に、既に電源停止状態となっているノード番号「１〜５」の計算ノードのブートを開始するものとする。これにより、図７に示したような起動待ち状態の計算ノードが生じることが抑止され、起動待ちのロス電力が発生することも抑止できる。例えばノード番号「１〜５」の計算ノードのブート処理が終了する時刻ｔ8以降にジョブＣの実行が終了すれば、起動待ちのロス電力は発生しない。なお、図８の例では、ジョブ未実行の計算ノードの電源を停止させることによって削減される消費電力は、ノード番号「１〜５」の計算ノードにおける、時刻ｔ4’から時刻ｔ2’までの期間の消費電力である。
【００６７】
他方、図８に示した例では、ノード番号「１〜１０」の計算ノードは、ジョブＣの実行が終了する時刻ｔ3’まで、ジョブ未実行状態で待機する。このように、他の計算ノードにおけるジョブの実行が終了するのをジョブ未実行状態で待機している計算ノードの状態を、終了待ち状態とする。
【００６８】
終了待ち状態の計算ノードでは、他の計算ノードにおけるジョブの実行が終了するのを待っている間も電力が消費される。このとき消費された電力が、終了待ちのロス電力となる。終了待ちのロス電力を時間で積分した値が、終了待ちのロス電力量４２である。終了待ちのロス電力量４２は、終了待ち状態にあった計算ノードごとの消費電力量の合計となる。終了待ち状態にあった計算ノードのロス電力量は、ジョブ未実行状態における計算ノード１台当たりの消費電力に、その計算ノードが終了待ち状態となっていた時間を乗算した値である。
【００６９】
このような終了待ちのロス電力量４２は、特に、ジョブＣが早期に終了されずに、予定時刻通りに終了した場合には大きな電力量となる。そこで、実行予定のジョブが利用する計算ノードのうちの電源停止状態の計算ノードをブートする時刻を、ジョブＢの実行が終了した時刻ｔ2’よりも遅らせることで、終了待ちのロス電力量４２を削減することが考えられる。
【００７０】
図９は、終了待ちのロス電力発生例（第２の例）を示す図である。図９の例では、ジョブＡ，Ｂを実行していたノード番号「１〜１０」の計算ノードは、ジョブＡ，Ｂの実行が終了すると、シャットダウンされ、その後、電源停止状態となる。そして、ジョブＢの実行が終了した時刻ｔ2’よりも後、ジョブＣの終了予定時刻（時刻ｔ3）よりもブート時間以上前の時刻ｔ9に、ノード番号「１〜１０」の計算ノードのブート処理を開始している。ブート処理は、時刻ｔ10に完了している。この場合、ノード番号「１〜１０」の計算ノードについて終了待ちのロス電力が発生するのは、時刻ｔ10からジョブＣの実行が終了するまでの期間である。終了待ちのロス電力量４３が最大となるのは、図９に示すように、ジョブＣの実行が終了予定時刻（時刻ｔ3）までかかった場合である。
【００７１】
ここで、ノード番号「１〜１０」の計算ノードのブート処理を開始する時刻を遅らせるほど、終了待ちのロス電力量４３は少なくなるが、図７に示したような起動待ちのロス電力が発生する可能性が高まる。起動待ちのロス電力量４１（図７参照）と終了待ちのロス電力量４３（図９参照）との大小関係は、ジョブＡ，Ｂを実行している計算ノード数と、ジョブＣの実行に利用する計算ノード数との大小関係によって変化する。
【００７２】
そこでジョブスケジューラ１２０は、ロス電力量が最小化されるように、ジョブＣの実行が終了する前に電源停止状態の計算ノードのブートを開始する時刻を決定する。具体的には以下の通りである。
【００７３】
図９においてジョブＣが、時刻ｔ10から時刻ｔ3の間に終了した場合には、ジョブＤはジョブＣの完了と同時に実行開始することができる。ジョブＤの実行開始以降は、ロス電力は発生しない。
【００７４】
一方、図９においてジョブＣの終了時刻が時刻ｔ9から時刻ｔ10の間の場合、ジョブＤの実行開始時刻は時刻ｔ10となる。この場合、終了待ちのロス電力は発生しない。ただし、ジョブＤの実行を開始するために、ジョブＣの終了時刻（時刻ｔ9）から、ノード番号「１〜１０」の計算ノードの起動が完了する時刻ｔ10まで、ノード番号「１１〜５０」の計算ノードには起動待ちのロス電力が発生する。
【００７５】
ここで、ジョブの実際の終了時刻は利用者の指定した終了予定時刻よりも早まるが、ジョブの実際の終了時間を事前に知ることや予測することは困難である。このことを考慮すると、省電力化のためにジョブ未実行状態の計算ノードの電源を停止する制御を行う以上、起動待ちのロス電力が発生する場合があることは受け入れざるを得ないものである。
【００７６】
そこでジョブスケジューラ１２０は、ロス電力量が起動待ちのロス電力量よりも低くなる可能性が高くなるように、ジョブ未実行状態の計算ノードの電源制御を行う。具体的には、ジョブスケジューラ１２０は、電源停止状態の計算ノードの起動開始時刻を現在時刻とした場合について、起動待ちのロス電力量と終了待ちのロス電力量との関係を評価する。そしてジョブスケジューラ１２０は、両者の関係から、電源停止状態の計算ノードに対してブート指示を行うか否かを判断する。例えばジョブスケジューラ１２０は、「終了待ちのロス電力量≦起動待ちのロス電力量」となったときに、電源停止状態の計算ノードに対してブート指示を行うと判断する。
【００７７】
図１０は、電源停止状態の計算ノードの起動開始時刻の判断例を示す図である。例えばジョブスケジューラ１２０は、ジョブＤの実行に利用する計算ノードで実行中のジョブが１つ（ジョブＣ）になると、現在時刻が、電源停止状態の計算ノードのブートを開始するのに適切な時刻か否かを判断する。
【００７８】
具体的にはジョブスケジューラ１２０は、ジョブＣを実行している計算ノード数に基づいて、起動待ちのロス電力量４１を計算する。またジョブスケジューラ１２０は、今すぐに、電源停止状態の計算ノードのブートを開始した場合における、終了待ちのロス電力量を計算する。
・起動待ちのロス電力量＝実行中のジョブ（ジョブＣ）の利用計算ノード数×計算ノード１台当たりのロス電力×起動待ち時間（ブート時間）・・・（１）
・終了待ちのロス電力量＝次に実行するジョブ（ジョブＤ）の利用計算ノードのうち電源停止状態のノード数×計算ノード１台当たりのロス電力×最大終了待ち時間・・・（２）
最大終了待ち時間は、ジョブＣの終了予定時刻（時刻ｔ3）から、電源停止状態の計算ノードのブート処理の終了時刻（時刻ｔ12）を減算した値である。ブート処理の終了時刻（時刻ｔ12）は、現在の時刻ｔ11から、ブート時間経過後の時刻である。
【００７９】
このようにして、起動待ちのロス電力量４１（破線内の網掛けをした矩形領域の面積）と終了待ちのロス電力量４４（破線内の網掛けをした矩形領域の面積）とが算出できる。ジョブスケジューラ１２０は、起動待ちのロス電力量４１と終了待ちのロス電力量４４との算出と、それらの値の比較による評価を定期的に繰り返す。
【００８０】
ジョブＣの終了予定時刻（時刻ｔ3）までの時間が長いほど、終了待ちのロス電力量４４は大きくなる。すなわち、終了待ちのロス電力量は時間経過と共に減少する。すると、ジョブＢの電源が停止した時刻ｔ5’において、終了待ちのロス電力量４４が起動待ちのロス電力量４１よりも大きくても、時間経過に伴い終了待ちのロス電力量４４は起動待ちのロス電力量４１に近づいていく。やがて、図１０に示すように、終了待ちのロス電力量４４と起動待ちのロス電力量４１とが一致する時刻ｔ11となる。
【００８１】
この時刻ｔ11に、ノード番号「１〜１０」の計算ノードのブートを開始することによって、ロス電力量を、最大でも起動待ちのロス電力量以下となるように制御することができる。
【００８２】
なお、算出した起動待ちのロス電力量と終了待ちのロス電力量とは、評価時点において発生する可能性があるロス電力量の最大値である。実際に発生するロス電力量は、ジョブＣの実行の終了時刻に応じて決まる。
【００８３】
図１１は、ジョブＣの終了時刻とロス電力量との関係を示す図である。図１１では、横軸がジョブＣの終了時刻を表し、縦軸がロス電力量を表す。
ジョブＢの電源を停止させた時刻ｔ5’からノード番号「１〜１０」の計算ノードのブートが完了する時刻ｔ12までの期間内にジョブＣの実行が終了した場合、発生するロス電力は、起動待ちのロス電力である。ジョブＢの電源を停止させた時刻ｔ5’以後、ノード番号「１〜１０」の計算ノードのブートを開始する時刻ｔ11以前にジョブＣの実行が終了した場合のロス電力量は、式（１）で計算した起動待ちのロス電力量となる。時刻ｔ11より後にジョブＣの実行が終了した場合、起動待ち時間が少なくて済むことにより、起動待ちのロス電力量も減少する。そして、ノード番号「１〜１０」の計算ノードのブートが完了する時刻ｔ12にジョブＣの実行が終了した場合、ジョブＤを即座に実行開始することができ、ロス電力は発生せず、ロス電力量は「０」となる。
【００８４】
時刻ｔ12からジョブＣの終了予定時刻（時刻ｔ3）までの期間内にジョブＣの実行が終了した場合、発生するロス電力は、終了待ちのロス電力である。なお終了待ちのロス電力が発生する期間の起動待ち時間は「０」である。ジョブＣの実行の終了時刻が遅くなるほど、終了待ち時間が長期化し、終了待ちのロス電力量が増加する。そして、ジョブＣの終了予定時刻（時刻ｔ3）にジョブＣの実行が終了した場合、終了待ちのロス電力量は最大値となる。
【００８５】
図１０に示すように、発生するロス電力量は、最大でも式（１）で計算した起動待ちのロス電力量となる。そして、ジョブＣの実行終了時刻が、時刻ｔ11と時刻ｔ3との間の期間内であれば、発生するロス電力量は、式（１）で計算した起動待ちのロス電力量よりも少なくなる。その結果、ロス電力量の削減による省電力化が図られる。
【００８６】
しかも図７に示した例に比べて、ノード番号「１〜１０」の計算ノードのブート開始時刻を前倒ししていることで、ジョブＣの実行の終了時刻が時刻ｔ12以降であれば、起動待ち時間が「０」となる。その結果、ＨＰＣシステムの利用効率が向上する。
【００８７】
以下、このような省電力制御の方法について、詳細に説明する。ロス電力量の評価は、ジョブスケジューリングテーブル１１１とノード利用予定テーブル１１２を用いて行われる。
【００８８】
図１２は、ジョブスケジューリングテーブルの一例を示す図である。ジョブスケジューリングテーブル１１１には、ジョブごとのレコードが登録されており、各レコードにはジョブ情報、要求資源情報、スケジュール情報、および実行実績情報が含まれている。このうち、ジョブ情報と要求資源情報とは、利用者によって指定される情報である。スケジュール情報は、ジョブスケジューラ１２０が決定する情報である。実行実績記録は、ジョブの実行実績として、ジョブスケジューラ１２０が記録する情報である。
【００８９】
ジョブ情報は、実行するジョブに関する情報である。例えばジョブ情報には、ジョブＩＤ、ユーザ名、およびジョブ名が含まれる。ジョブＩＤは、ジョブの識別番号である。ユーザ名は、ジョブの実行を依頼したユーザの名称である。ジョブ名は、ジョブの名称である。
【００９０】
要求資源情報は、ジョブの実行に利用する計算資源に関する情報である。例えば要求資源情報には、ノード数と利用予定時間とが含まれる。ノード数は、ジョブの実行に利用する計算ノードの数である。利用予定時間は、ジョブの実行時に計算ノードを利用する予定の時間（計算ノードを占有する予定の時間）である。
【００９１】
スケジュール情報は、ジョブの実行スケジュールに関する情報である。例えばスケジュール情報には、開始時刻、終了時刻、および利用計算ノードリストが含まれる。開始時刻は、ジョブの実行を開始する予定の時刻である。終了時刻は、ジョブの実行が終了する予定の時刻である。利用計算ノードリストは、ジョブの実行に利用する計算ノードのリストである。
【００９２】
実行実績情報は、ジョブの実行実績に関する情報である。例えば実行実績情報には、開始時刻、終了時刻、および利用計算ノードリストが含まれる。開始時刻は、ジョブの実行を開始した時刻である。終了時刻は、ジョブの実行が終了した時刻である。利用計算ノードリストは、ジョブの実行に利用した計算ノードのリストである。
【００９３】
図１３は、ノード利用予定テーブルの一例を示す図である。ノード利用予定テーブル１１２には計算ノードごとのレコードが登録されており、各レコードには、ノード情報とジョブ実行情報とが含まれている。
【００９４】
ノード情報は、ＨＰＣシステムに含まれる計算ノードの電源の状態に関する情報である。ノード情報には、ノード番号と電源状態が含まれる。ノード番号は、計算ノードに一意に設定された番号である。電源状態は、計算ノードの電源の入力状態である。計算ノードの電源が入っていれば電源状態に「ＯＮ」が設定され、計算ノードの電源が入っていなければ電源状態に「ＯＦＦ」が設定される。
【００９５】
ジョブ実行情報は、計算ノードで現在実行しているジョブ（実行中ジョブ）、および計算ノードで次に実行予定のジョブ（次ジョブ）に関する情報である。ジョブ実行情報には、実行中ジョブのジョブ名と終了予定時刻、および次ジョブのジョブ名と開始予定時刻が含まれる。
【００９６】
図１３に示したノード利用予定テーブル１１２には、ジョブＡの実行は終了しているが、ジョブＢ，Ｃは実行中の状態における情報が設定されている。その後、ジョブＢの実行が終了するとジョブ実行情報が更新される。さらに、ジョブＣの実行が終了する前に、電源停止状態の計算ノードに電源が投入されると、ノード情報の電源状態が更新される。
【００９７】
図１４は、更新後のノード利用予定テーブルの一例を示す図である。ジョブＢの実行が終了すると、ジョブ実行情報における実行中ジョブのジョブ名から、ジョブＢの名前が削除される。そして、ノード番号「１〜１０」の計算ノードに電源投入されると、該当ノードの電源状態が「ＯＮ」となる。
【００９８】
次に、ジョブスケジューラ１２０による電源制御処理についてフローチャートを参照して説明する。
図１５は、電源制御処理の手順の一例を示すフローチャートである。なお、電源制御処理は、ジョブスケジューラ１２０により、例えば定期的に実行される。またジョブスケジューラ１２０は、ジョブスケジューリングテーブル１１１内の情報を更新したタイミングで電源制御処理を行ってもよい。以下、図１５に示す処理をステップ番号に沿って説明する。
【００９９】
［ステップＳ１０１］ジョブスケジューラ１２０は、計算ノードを１つ選択する。
［ステップＳ１０２］ジョブスケジューラ１２０は、選択した計算ノードの利用状態を確認する。例えばジョブスケジューラ１２０は、ノード利用予定テーブル１１２を参照し、選択した計算ノードのノード情報の電源状態により、その計算ノードに電源が投入されているか、電源が停止されているかを確認する。またジョブスケジューラ１２０は、ノード利用予定テーブル１１２を参照し、選択した計算ノードのジョブ実行情報において、実行中ジョブのジョブ名が設定されているか否かにより、その計算ノードがジョブを実行中か否かを確認する。
【０１００】
その結果、計算ノードのジョブの利用状態は、以下の３つの状態に分類される。
１．ジョブ実行に利用されている状態
２．ジョブ実行に利用されておらず、かつ電源が投入されている状態
３．ジョブ実行に利用されておらず、かつ電源が停止されている状態
［ステップＳ１０３］ジョブスケジューラ１２０は、選択した計算ノードがジョブ実行に利用されているか否かを判定する。ジョブスケジューラ１２０は、ジョブ実行に利用されていれば、ＨＰＣシステムの計算ノードとして有効に利用されているため、処理をステップＳ１０７に進め、選択した計算ノードについての処理は終了する。またジョブスケジューラ１２０は、ジョブ実行に利用されていなければ、処理をステップＳ１０４に進める。
【０１０１】
［ステップＳ１０４］ジョブスケジューラ１２０は、電源が投入されているか否かを判断する。ジョブスケジューラ１２０は、電源が投入されている場合、処理をステップＳ１０５に進める。またジョブスケジューラ１２０は、電源が投入されていない場合、処理をステップＳ１０６に進める。
【０１０２】
［ステップＳ１０５］ジョブスケジューラ１２０は、ジョブ実行に利用されておらず、かつ電源が投入されている計算ノードについて、シャットダウン制御処理を行う。シャットダウン制御処理では、一定の条件が満たされた場合に、選択した計算ノードに対してシャットダウン指示が出力される。シャットダウン制御処理の詳細は後述する（図１６参照）。その後、ジョブスケジューラ１２０は、処理をステップＳ１０７に進める。
【０１０３】
［ステップＳ１０６］ジョブスケジューラ１２０は、ジョブ実行に利用されておらず、かつ電源が停止されている計算ノードについて、ブート制御処理を行う。ブート制御処理では、一定の条件を満たした場合に、選択した計算ノードに対してブートの指示が出力される。ブート制御処理の詳細は後述する（図１７参照）。
【０１０４】
［ステップＳ１０７］ジョブスケジューラ１２０は、未選択の計算ノードがあるか否かを判断する。ジョブスケジューラ１２０は、未選択の計算ノードがある場合、処理をステップＳ１０１に進める。またジョブスケジューラ１２０は、すべての計算ノードが選択済みの場合、電源制御処理を終了する。
【０１０５】
次に、シャットダウン制御処理について詳細に説明する。
図１６は、シャットダウン制御処理の手順の一例を示すフローチャートである。以下、図１６に示す処理をステップ番号に沿って説明する。
【０１０６】
［ステップＳ１１１］ジョブスケジューラ１２０は、ノード利用予定テーブル１１２に基づいて、次に実行する予定のジョブ（次ジョブ）を特定し、連続予定空き時間を算出する。連続予定空き時間は、選択した計算ノードにおける次ジョブの開始予定時刻と現在の時刻との差分である。
【０１０７】
［ステップＳ１１２］ジョブスケジューラ１２０は、連続予定空き時間が、「ブート時間＋シャットダウン時間」よりも長いか否かを判断する。ジョブスケジューラ１２０は、連続予定空き時間の方が長い場合、処理をステップＳ１１３に進める。またジョブスケジューラ１２０は、連続予定空き時間が「ブート時間＋シャットダウン時間」以下の場合、選択した計算ノードをシャットダウンさせずに、シャットダウン制御処理を終了する。
【０１０８】
［ステップＳ１１３］ジョブスケジューラ１２０は、選択した計算ノードに対して、シャットダウンの指示を送信する。シャットダウンの指示を受信した計算ノードは、ＯＳなどのシステムのシャットダウン処理を行い、その後、電源を停止する。
【０１０９】
このように、連続予定空き時間が計算ノードのシャットダウン時間とブート時間の合計時間より長い場合に、計算ノードをシャットダウンすることで、消費電力の削減を図ることができる。
【０１１０】
図１７は、ブート制御処理の手順の一例を示すフローチャートである。以下、図１７に示す処理をステップ番号に沿って説明する。
［ステップＳ１２１］ジョブスケジューラ１２０は、選択した計算ノードの実行中ジョブリスト作成処理を行う。実行中ジョブリスト作成処理では、選択した計算ノードの次ジョブが利用する計算ノードが次ジョブを実行する際に利用する計算ノード（利用計算ノード）で実行中のジョブのリストである実行中ジョブリストが作成される。実行中ジョブリスト作成処理の詳細は後述する（図１８参照）。
【０１１１】
［ステップＳ１２２］ジョブスケジューラ１２０は、作成した実行中ジョブリストに基づいて、利用計算ノードの範囲内の実行中ジョブ数が「１」か否かを判断する。利用計算ノードの範囲内の実行中ジョブ数とは、利用計算ノードのいずれかで、現在実行中のジョブの数である。例えばジョブスケジューラ１２０は、ノード利用予定テーブル１１２における利用計算ノードのレコード内のジョブ実行情報に、実行中ジョブのジョブ名が設定されている場合、その利用計算ノードはジョブを実行中であると判断する。ジョブスケジューラ１２０は、実行中ジョブ数が「１」であれば、処理をステップＳ１２３に進める。またジョブスケジューラ１２０は、実行中ジョブ数が「１」でなければ、ブート制御処理を終了する。
【０１１２】
なお選択した計算ノードの次ジョブがない場合、ステップＳ１２１において実行中ジョブリストが作成されない。実行中ジョブリストが作成されていない場合、ジョブスケジューラ１２０は、実行中ジョブ数は「０」であるとみなし、ブート制御処理を終了する。
【０１１３】
［ステップＳ１２３］ジョブスケジューラ１２０は、現在の時刻における起動待ちのロス電力量算出処理を行う。起動待ちのロス電力量算出処理の詳細は後述する（図１９参照）。
【０１１４】
［ステップＳ１２４］ジョブスケジューラ１２０は、現在の時刻における終了待ちのロス電力量算出処理を行う。終了待ちのロス電力量算出処理の詳細は後述する（図２０参照）。
【０１１５】
［ステップＳ１２５］ジョブスケジューラ１２０は、終了待ちのロス電力量が、起動待ちのロス電力量以下か否かを判断する。ジョブスケジューラ１２０は、終了待ちのロス電力量が、起動待ちのロス電力量以下であれば、処理をステップＳ１２６に進める。またジョブスケジューラ１２０は、終了待ちのロス電力量が、起動待ちのロス電力量より大きければ、選択した計算ノードをブートさせずに、ブート制御処理を終了する。
【０１１６】
［ステップＳ１２６］ジョブスケジューラ１２０は、選択した計算ノードに対して、ブートアップの指示を送信する。ブートアップ指示を受信した計算ノードには電源が投入され、計算ノードがブート処理を開始する。
【０１１７】
このようにして、選択した計算ノードの次ジョブに関して、終了待ちのロス電力量が起動待ちのロス電力量以下となった時点で、選択した計算ノードのブート処理が開始される。
【０１１８】
図１８は、実行中ジョブリスト作成処理の手順の一例を示すフローチャートである。以下、図１８に示す処理をステップ番号に沿って説明する。
［ステップＳ１３１］ジョブスケジューラ１２０は、選択した計算ノードが実行する予定の次ジョブがあるか否かを判断する。例えばジョブスケジューラ１２０は、ノード利用予定テーブル１１２における、選択した計算ノードのレコードのジョブ実行情報に、次ジョブのジョブ名が設定されている場合、次ジョブがあると判断する。ジョブスケジューラ１２０は、次ジョブがある場合、処理をステップＳ１３２に進める。またジョブスケジューラ１２０は、次ジョブがなければ、実行中ジョブリストを作成せずに、実行中ジョブリスト作成処理を終了する。
【０１１９】
［ステップＳ１３２］ジョブスケジューラ１２０は、次ジョブの実行に利用する計算ノードを示す利用計算ノードリストを取得する。例えばジョブスケジューラ１２０は、ジョブスケジューリングテーブル１１１における、次ジョブのレコード内のスケジュール情報から、利用計算ノードリストを取得する。
【０１２０】
［ステップＳ１３３］ジョブスケジューラ１２０は、実行中ジョブリストを初期化する。
［ステップＳ１３４］ジョブスケジューラ１２０は、利用計算ノードリスト内の計算ノードごとに、ステップＳ１３５〜Ｓ１３７の処理を実行する。
【０１２１】
［ステップＳ１３５］ジョブスケジューラ１２０は、処理対象の計算ノードにおいて実行中のジョブ（実行中ジョブ）があるか否かを判断する。例えばジョブスケジューラ１２０は、ノード利用予定テーブル１１２における処理対象の計算ノードのレコード内に、実行中ジョブのジョブ名が設定されている場合、実行中ジョブがあると判断する。ジョブスケジューラ１２０は、実行中ジョブがある場合、処理をステップＳ１３６に進める。またジョブスケジューラ１２０は、実行中ジョブがない場合、処理をステップＳ１３８に進める。
【０１２２】
［ステップＳ１３６］ジョブスケジューラ１２０は、ステップＳ１３５で検出した実行中ジョブが、既に実行中ジョブリストに登録済みか否かを判断する。ジョブスケジューラ１２０は、実行中ジョブが登録済みであれば、処理をステップＳ１３８に進める。またジョブスケジューラ１２０は、実行中ジョブが未登録であれば、処理をステップＳ１３７に進める。
【０１２３】
［ステップＳ１３７］ジョブスケジューラ１２０は、ステップＳ１３５で検出した実行中ジョブを実行中ジョブリストに追加登録する。
［ステップＳ１３８］ジョブスケジューラ１２０は、利用計算ノードリスト内のすべての計算ノードについての処理が完了した場合、実行中ジョブリスト作成処理を終了する。
【０１２４】
このようにして作成された実行中ジョブリストに登録されたジョブの数が、ブート制御処理（図１７参照）におけるステップＳ１２２における実行中ジョブ数となる。そして、実行中ジョブ数が「１」であれば、起動待ちのロス電力量と終了待ちのロス電力量とが算出される。
【０１２５】
図１９は、起動待ちのロス電力量算出処理の手順の一例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。
［ステップＳ１４１］ジョブスケジューラ１２０は、実行中ジョブリストに基づいて、実行中ジョブの実行に利用されている計算ノードを示す利用計算ノードリストを取得する。例えばジョブスケジューラ１２０は、ジョブスケジューリングテーブル１１１における、実行中ジョブのレコード内のスケジュール情報から、利用計算ノードリストを取得する。
【０１２６】
［ステップＳ１４２］ジョブスケジューラ１２０は、次ジョブの利用計算ノードリストと実行中ジョブの利用計算ノードリストとに重複して登録されている計算ノード（重複計算ノード）を示す重複計算ノードリストを作成する。
【０１２７】
［ステップＳ１４３］ジョブスケジューラ１２０は、起動待ちのロス電力量を初期化する。例えばジョブスケジューラ１２０は、起動待ちのロス電力量を示す変数に「０」を設定する。
【０１２８】
［ステップＳ１４４］ジョブスケジューラ１２０は、重複計算ノードリストに登録されている重複計算ノードごとに、ステップＳ１４５〜Ｓ１４６の処理を実行する。
［ステップＳ１４５］ジョブスケジューラ１２０は、重複計算ノード１台による起動待ちのロス電力量を計算する。例えばジョブスケジューラ１２０は、計算ノード１台当たりのロス電力（ジョブ未実行状態での消費電力）×起動待ち時間（ブート時間）を、重複計算ノードの起動待ちによるロス電力量とする。
【０１２９】
［ステップＳ１４６］ジョブスケジューラ１２０は、ステップＳ１４５で算出した起動待ちのロス電力量を、起動待ちのロス電力量を示す変数の値に加算する。これにより、重複計算ノードごとに計算した起動待ちのロス電力量の総和が計算される。
【０１３０】
［ステップＳ１４７］ジョブスケジューラ１２０は、すべての重複計算ノードについて処理が完了した場合、起動待ちのロス電力量算出処理を終了する。
このようにして起動待ちのロス電力量を示す変数に設定された値が、次ジョブの実行開始までに発生する可能性のある起動待ちのロス電力量となる。次に、終了待ちのロス電力量算出処理の手順について説明する。
【０１３１】
図２０は、終了待ちのロス電力量算出処理の手順の一例を示すフローチャートである。以下、図２０に示す処理をステップ番号に沿って説明する。
［ステップＳ１５１］ジョブスケジューラ１２０は、実行中ジョブリストに基づいて、実行中ジョブの実行に利用されている計算ノードを示す利用計算ノードリストを作成する。
【０１３２】
［ステップＳ１５２］ジョブスケジューラ１２０は、次ジョブの利用計算ノードリストに登録されている計算ノードのうち、実行中ジョブの利用計算ノードリストに登録されていない計算ノード（非重複計算ノード）を示す非重複計算ノードリストを作成する。
【０１３３】
［ステップＳ１５３］ジョブスケジューラ１２０は、終了待ちのロス電力量を初期化する。例えばジョブスケジューラ１２０は、終了待ちのロス電力量を示す変数に「０」を設定する。
【０１３４】
［ステップＳ１５４］ジョブスケジューラ１２０は、非重複計算ノードリストに登録されている非重複計算ノードごとに、ステップＳ１５５〜Ｓ１５６の処理を実行する。
［ステップＳ１５５］ジョブスケジューラ１２０は、非重複計算ノード１台による終了待ちのロス電力量を計算する。例えばジョブスケジューラ１２０は、計算ノード１台当たりのロス電力（ジョブ未実行状態での消費電力）×終了待ち時間を、重複計算ノードの起動待ちによるロス電力量とする。終了待ち時間は、現在時刻からブート時間経過後の時刻から、実行中ジョブの終了予定時刻までの時間である。
【０１３５】
［ステップＳ１５６］ジョブスケジューラ１２０は、ステップＳ１５５で算出した終了待ちのロス電力量を、終了待ちのロス電力量を示す変数の値に加算する。これにより、非重複計算ノードごとに計算した終了待ちのロス電力量の総和が計算される。
【０１３６】
［ステップＳ１５７］ジョブスケジューラ１２０は、すべての重複計算ノードについて処理が完了した場合、終了待ちのロス電力量算出処理を終了する。
このようにして終了待ちのロス電力量を示す変数に設定された値が、次ジョブの実行開始までに発生する終了待ちのロス電力量となる。そして、終了待ちのロス電力量が起動待ちのロス電力量以下なったときに、電源停止状態の利用計算ノードのブート処理が開始される。これにより、図１１に示したように、ロス電力量は、最大でも起動待ちのロス電力量となり、図１１に示す時刻ｔ11から時刻ｔ3の間に実行中のジョブＣの実行が終了すれば、ロス電力量は削減される。ジョブの実行予定時間は、余裕を持たせて長めに指定されていることが多く、ほとんどのジョブは終了予定時刻より前に終了する。その結果、ロス電力量が削減される。
【０１３７】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、ロス電力量の評価において、起動待ちのロス電力量に係数α（αは、１以上の実数）を乗じて、終了待ちのロス電力量と比較するものである。すなわち、ジョブスケジューラ１２０は、終了待ちのロス電力量と起動待ちのロス電力量とを比較し、所定の評価条件を満たす場合には、電源停止状態の計算ノードを起動し、満たさない場合にはその計算ノードを電源停止状態のまま保持する。この際、ジョブスケジューラ１２０は、ロス電力量の評価条件として、「終了待ちのロス電力量≦係数α×起動待ちのロス電力量」という条件を用いる。
【０１３８】
係数αの値は、例えばシステムの管理者が予め指定しておくことができる。例えば、管理者は、利用者の指定するジョブ実行予定時間と実際の予定時間が大きく異なる（より早く終了する）傾向が大きい程、係数αを大きな値とする。これは、実際に発生するロス電力量が起動待ちのみになることが懸念されるためである。
【０１３９】
図２１は、係数αの値が異なるときのロス電力量発生状況の違いの例を示す図である。図２１の例では、ジョブＡ，Ｂ，Ｃそれぞれが１台の計算ノードを利用している場合を想定している。すなわち、起動待ちのロス電力量算出時の重複計算ノード数が１台であり、終了待ちのロス電力量算出時の非重複計算ノード数が２台となる。このように、起動待ちをする計算ノード（ノード番号「３」の計算ノード）の数が終了待ちをする計算ノード（ノード番号「１，２」の計算ノード）の数に比べて少ない場合、係数αの値を「１」とすると、ノード番号「１，２」の計算ノードのブートを開始する時刻ｔ21があまり前倒しされない。その結果、起動待ちのロス電力が発生する期間（時刻ｔ5’〜時刻ｔ22）が、終了待ちのロス電力が発生する期間（時刻ｔ22〜時刻ｔ3）に比べて非常に長くなる。
【０１４０】
このような場合に係数αの値を例えば「２」とすると、ノード番号「１，２」の計算ノードのブートを開始する時刻ｔ31が、係数αの値が「１」のときに比べて前倒しされる。その結果、起動待ちのロス電力が発生する期間（時刻ｔ5’〜時刻ｔ32）が短縮され、終了待ちのロス電力が発生する期間（時刻ｔ22〜時刻ｔ3）が長くなる。
【０１４１】
これにより、ジョブＣが、終了予定時刻よりも大きく前倒しして終了した場合にも、実際に発生したロス電力量を、計算上の起動待ちのロス電力量より少なくすることができる。
【０１４２】
このように、係数αに適切な値を設定することによって、一定期間内に実際に生じる起動待ちのロス電力量（実績値）と終了待ちのロス電力量（実績値）とのバランスを取り、ＨＰＣシステム全体のロス電力量を低減できる。そのため省電力化のためには、起動待ちのロス電力量（実績値）と終了待ちのロス電力量（実績値）とが同程度になるように、係数αを設定することが望ましい。
【０１４３】
そこで第３の実施の形態では、ジョブスケジューラ１２０は、ロス電力量（実績値）と終了待ちのロス電力量（実績値）とが同程度になるように、係数αの値を自動調整する。例えばジョブスケジューラ１２０は、事前に設定した係数αを以下の方法で自動的に評価・収集し、定期的に最適化する。
【０１４４】
ジョブスケジューラ１２０は、係数αの最適化のために、ロス電力量の実績値を、例えばノード利用予定テーブルに記録する。
図２２は、ロス電力量の実績記録用に拡張されたノード利用予定テーブルの一例を示す図である。第３の実施の形態におけるノード利用予定テーブル１１２ａには、ロス電力量の評価値・実績値が追加されている。ロス電力量の評価値・実績値は、計算ノードで発生するロス電力に関する情報である。ロス電力量の評価値・実績値には、計算ノードのブートを開始した時刻（実起動時刻）と、起動待ちのロス電力量の評価値と、終了待ちのロス電力量の仮定値が含まれる。
【０１４５】
計算ノードごとの起動待ちのロス電力量の評価値は、例えば「実行中のジョブの利用計算ノード数×計算ノード１台当たりのロス電力×ブート時間」である。終了待ちのロス電力量の仮定値は、実行中ジョブの実際の終了時刻に電源停止状態にあった計算ノードのブートが完了するように係数αが設定されていたと仮定した場合の、終了待ちのロス電力量である。終了待ちのロス電力量の仮定値は、「次に実行するジョブの利用計算ノードのうち電源停止状態のノード数×計算ノード１台当たりのロス電力×実行中ジョブの実行終了時刻とそのジョブの終了予定時刻との差」で求められる。
【０１４６】
図２２には、ジョブＡの実行は終了しているが、ジョブＢ，Ｃは実行中の状態におけるノード利用予定テーブル１１２ａが示されている。その後、ジョブＢの実行が終了したものとする。すると最後の１つの実行中ジョブはジョブＣとなることが判明し、起動待ちのロス電力量の評価値が算出できる。そこでジョブスケジューラ１２０は、ジョブＢの実行が終了すると、各ノードの起動待ちのロス電力量の評価値を計算し、ノード利用予定テーブル１１２ａに設定する。
【０１４７】
ここで、ジョブＣの実行が終了する前に、電源停止状態の計算ノードに電源が投入されたものとする。するとジョブスケジューラ１２０は、ノード利用予定テーブル１１２ａに、起動された計算ノードの実起動時刻を設定する。
【０１４８】
図２３は、起動待ちのロス電力量の評価値と実起動時刻とが設定されたノード利用予定テーブルの一例を示す図である。ノード番号「１〜１０」の計算ノードに電源が投入されたことで、その投入時刻が、実起動時刻として、ノード利用予定テーブル１１２ａに設定されている。また起動待ちが生じた場合の各計算ノードの起動待ちのロス電力量が、その計算ノードのロス電力量の評価値として設定されている。
【０１４９】
その後、ジョブＣの実行が終了し、ジョブＤの実行が開始されると、終了待ちのロス電力量の仮定値が確定する。そして終了待ちのロス電力量の仮定値が、ノード利用予定テーブル１１２ａに設定される。
【０１５０】
図２４は、終了待ちのロス電力量の仮定値の算出例を示す図である。終了待ちのロス電力量の仮定値は、最後の１つとなった実行中ジョブの実行が終了した時刻に基づいて算出される。図２４には、起動待ちのロス電力が発生した場合の例と、終了待ちのロス電力が発生した場合の例とが示されている。
【０１５１】
例えば電源停止状態にあるノード番号「１〜１０」の計算ノードのブートが開始される前の時刻ｔ41に、ジョブＣの実行が終了したものとする。この場合、起動待ちのロス電力が発生する。この例では、実際には、終了待ちのロス電力は発生していないが、ノード番号「１〜１０」の計算ノードのブート処理が完了した時刻ｔ42から、ジョブＣの終了予定時刻（時刻ｔ3）までの期間を、終了待ちのロス電力発生期間４５と仮定して、計算ノードごとの終了待ちのロス電力量の仮定値を算出する。
【０１５２】
また、電源停止状態にあるノード番号「１〜１０」の計算ノードのブートが開始され、ブート処理が完了後の時刻ｔ43に、ジョブＣの実行が終了したものとする。この場合、終了待ちのロス電力が発生する。この例においても、ジョブＣの実行が終了した時刻ｔ43から、ジョブＣの終了予定時刻（時刻ｔ3）までの期間を、終了待ちのロス電力発生期間４６と仮定して、計算ノードごとの終了待ちのロス電力量の仮定値を算出する。
【０１５３】
終了待ちのロス電力量の仮定値と起動待ちのロス電力量とが求まると、ジョブスケジューラ１２０は、これらの値を用いて係数αの適正値を算出する。例えばジョブスケジューラ１２０は、「終了待ちのロス電力量の仮定値＝係数αの適性値×起動待ちのロス電力量」を満たす係数αの適性値を求める。すなわち、係数αの適性値は、終了待ちのロス電力量の仮定値を起動待ちのロス電力量で除算した値である。
【０１５４】
係数αの適性値は、その値に係数αが設定されていたならば、ロス電力を「０」とすることができた値である。実際に発生したロス電力が起動待ちのロス電力の場合、係数αの適性値は、現在の係数αの値よりも大きな値となる。また実際に発生したロス電力が終了待ちのロス電力の場合、係数αの適性値は、現在の係数αの値よりも小さな値となる。そのため、係数αの適性値に近づくように、現在の係数αを更新すれば、一定期間内に発生した起動待ちのロス電力量（実績値）と終了待ちのロス電力量（実績値）とが同程度となるように、係数αが更新されることとなる。
【０１５５】
ジョブスケジューラ１２０は、計算ノードそれぞれについて算出した係数αの適性値を蓄積しておく。そしてジョブスケジューラ１２０は、一定期間蓄積しておいた係数αの適性値に基づいて、修正後の係数αの値を算出する。例えばジョブスケジューラ１２０は、一定期間蓄積しておいた係数αの平均値を、修正後の係数αの値に決定する。その後、ジョブスケジューラ１２０は、決定した値に、係数αの値を変更する。
【０１５６】
図２５は、係数αの更新処理の手順の一例を示すフローチャートである。以下、図２５に示す処理をステップ番号に沿って説明する。
［ステップＳ２０１］ジョブスケジューラ１２０は、係数αの初期値を設定する。例えばジョブスケジューラ１２０は、管理者からの予め入力されている値を、係数αの初期値に設定する。
【０１５７】
［ステップＳ２０２］ジョブスケジューラ１２０は、一定期間内に実行開始されたジョブごとに、ステップＳ２０３〜Ｓ２０６の処理を繰り返す。
［ステップＳ２０３］ジョブスケジューラ１２０は、処理対象の計算ノードについて、終了待ちのロス電力量の仮定値を計算する。
【０１５８】
［ステップＳ２０４］ジョブスケジューラ１２０は、係数αの適性値を計算する。例えばジョブスケジューラ１２０は、ステップＳ２０３で算出した終了待ちのロス電力量の仮定値を、処理対象の計算ノードの起動待ちのロス電力量で除算した結果を、係数αの適性値とする。ジョブスケジューラ１２０は、算出した係数αの適性値を、メモリ１０２またはストレージ装置１０３に格納する。
【０１５９】
［ステップＳ２０５］ジョブスケジューラ１２０は、係数αの更新制御の終了指示の入力があったか否かを判断する。ジョブスケジューラ１２０は、終了指示があった場合、係数αの更新処理を終了する。
【０１６０】
［ステップＳ２０６］ジョブスケジューラ１２０は、ステップＳ２０３〜Ｓ２０６の繰り返し処理を開始してから一定時間が経過した場合、処理をステップＳ２０７に進める。
［ステップＳ２０７］ジョブスケジューラ１２０は、蓄積していた係数αの適性値に基づいて、係数αを更新する。例えばジョブスケジューラ１２０は、係数αの適性値の平均を、新たな係数αの値とする。その後、ジョブスケジューラ１２０は、蓄積していた係数αの適性値を削除し、処理をステップＳ２０２に進める。
【０１６１】
このように、定期的に係数αを更新することで、係数αの値の最適化が図られ、ロス電力を削減することができる。このような係数αの更新方法は、ＨＰＣシステムで実行されるジョブの大小関係、利用者が指定する供給時間と実際の実行時間の関係がある程度保たれる場合に有効である。
【０１６２】
なお、ＨＰＣシステムの運用ポリシーとして、節電よりも計算ノードの稼働率を優先する場合には、起動待ちのロス電力量（実績値）と終了待ちのロス電力量（実績値）とが同程度となる場合よりも、係数αの値を大きく設定してもよい。すなわち、係数αの値を大きくすることで、次ジョブ起動待ち時間「０」で実行開始できる可能性が高くなり、計算ノードの稼働率が向上する。
【０１６３】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１６４】
１，２，３  計算機
４  第１消費電力量
５  第２消費電力量
１０  情報処理装置
１１  記憶部
１１ａ  ジョブスケジュール情報
１２  処理部
【図１】
2019109600.tif 000003
【図２】
2019109600.tif 000004
【図３】
2019109600.tif 000005
【図４】
2019109600.tif 000006
【図５】
2019109600.tif 000007
【図６】
2019109600.tif 000008
【図７】
2019109600.tif 000009
【図８】
2019109600.tif 000010
【図９】
2019109600.tif 000011
【図１０】
2019109600.tif 000012
【図１１】
2019109600.tif 000013
【図１２】
2019109600.tif 000014
【図１３】
2019109600.tif 000015
【図１４】
2019109600.tif 000016
【図１５】
2019109600.tif 000017
【図１６】
2019109600.tif 000018
【図１７】
2019109600.tif 000019
【図１８】
2019109600.tif 000020
【図１９】
2019109600.tif 000021
【図２０】
2019109600.tif 000022
【図２１】
2019109600.tif 000023
【図２２】
2019109600.tif 000024
【図２３】
2019109600.tif 000025
【図２４】
2019109600.tif 000026
【図２５】
2019109600.tif 000027