(57)【要約】【課題】進化的アルゴリズムを用いた設計最適化などのように1度の計算に長時間を要する環境において、並列計算機を用いた計算の際に生じるトラブルを自動的に検知し、それらのトラブルに自動的に対処することが可能な並列計算機を提供する。【解決手段】本発明は、計算プログラムを実行する複数の計算ノードと、計算ノードにネットワークを介して接続されるマスターノードとを含み、進化的アルゴリズムを用いた設計最適化などのように1度の計算に長時間を要する環境において並列計算処理を行なうための並列計算機システムを提供する。このシステムは、計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう異常処理手段を有する。【選択図】図３
2008123357.tif 000002
【特許請求の範囲】
【請求項１】
計算プログラムを実行する複数の計算ノードと、前記計算ノードにネットワークを介して接続されるマスターノードとを含み、進化的アルゴリズムを用いた設計最適化のように1度の計算に長時間を要する環境において並列計算処理を行なう、並列計算機システムであって、
前記計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう異常処理手段を有する、システム。
【請求項２】
前記異常処理手段が、さらに、前記マスターノードと前記計算ノードとの通信状態、前記計算ノードの稼働状況、または前記計算ノードのハードディスクの空き容量を定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう、請求項１に記載のシステム。
【請求項３】
前記異常処理手段が、さらに、前記計算プログラムの実行前に、計算に必要な入出力ファイルの値またはフォーマットの異常検知および前記計算ノードに含まれる並列計算用ソフトウェアの異常検知を行い、前記計算プログラムの実行後に、計算結果が記録された出力ファイルの値またはフォーマットの異常検知を行い、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう、請求項１に記載のシステム。
【請求項４】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記異常処理手段が、定期的または処理単位ごとに前記ファイルの内容を解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知する、
請求項１に記載のシステム。
【請求項５】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記異常処理手段が、定期的または処理単位ごとに前記ファイルのタイムスタンプを解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知する、
請求項１に記載のシステム。
【請求項６】
計算プログラムを実行する複数の計算ノードと、前記計算ノードにネットワークを介して接続されるマスターノードとを含む並列計算機を用いて、進化的アルゴリズムを用いた設計最適化のように1度の計算に長時間を要する環境において並列計算処理を行なう方法であって、
前記計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうステップ、
を含む方法。
【請求項７】
前記一連の処理を自動的におこなうステップが、さらに、前記マスターノードと前記計算ノードとの通信状態、前記計算ノードの稼働状況、または前記計算ノードのハードディスクの空き容量を定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうことを含む、請求項６に記載の方法。
【請求項８】
前記一連の処理を自動的におこなうステップが、さらに、前記計算プログラムの実行前に、計算に必要な入出力ファイルの値またはフォーマットの異常検知および前記計算ノードに含まれる並列計算用ソフトウェアの異常検知を行い、前記計算プログラムの実行後に、計算結果が記録された出力ファイルの値またはフォーマットの異常検知を行い、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうことを含む、請求項６に記載の方法。
【請求項９】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記一連の処理を自動的におこなうステップが、定期的または処理単位ごとに前記ファイルの内容を解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知することをさらに含む、
請求項６に記載の方法。
【請求項１０】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記一連の処理を自動的におこなうステップが、定期的または処理単位ごとに前記ファイルのタイムスタンプを解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知することをさらに含む、
請求項６に記載の方法。
【請求項１１】
計算プログラムを実行する複数の計算ノードと、前記計算ノードにネットワークを介して接続されるマスターノードとを含む並列計算機に、進化的アルゴリズムを用いた設計最適化などのように1度の計算に長時間を要する環境において並列計算処理を実行させるためのプログラムであって、
前記計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう機能、
を含むプログラム。
【請求項１２】
前記一連の処理を自動的におこなう機能が、さらに、前記マスターノードと前記計算ノードとの通信状態、前記計算ノードの稼働状況、または前記計算ノードのハードディスクの空き容量を定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうことを含む、請求項１１に記載のプログラム。
【請求項１３】
前記一連の処理を自動的におこなう機能が、さらに、前記計算プログラムの実行前に、計算に必要な入出力ファイルの値またはフォーマットの異常検知および前記計算ノードに含まれる並列計算用ソフトウェアの異常検知を行い、前記計算プログラムの実行後に、計算結果が記録された出力ファイルの値またはフォーマットの異常検知を行い、異常が検知された計算ノードにおける前記計算プログラムの実行を中止し、該計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうことを含む、請求項１１に記載のプログラム。
【請求項１４】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記一連の処理を自動的におこなう機能が、定期的または処理単位ごとに前記ファイルの内容を解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知することをさらに含む、
請求項１１に記載のプログラム。
【請求項１５】
前記計算ノードが、前記計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、
前記一連の処理を自動的におこなう機能が、定期的または処理単位ごとに前記ファイルのタイムスタンプを解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知することをさらに含む、
請求項１１に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機、並列計算機用プログラムおよび並列計算方法に関し、特に、並列計算機を用いた計算の際に生じる様々なトラブルを自動的に検知し、それらのトラブルを自動的に回避することで、並列計算処理を途中で停止させることなく安定的に継続・完了させる並列計算機、並列計算機用プログラムおよび並列計算方法に関する。
【背景技術】
【０００２】
近年、コンピュータの性能が劇的に向上してきているが、実際の設計現場ではその性能を遥かに上回る計算性能が必要となる場合が多い。自動車や航空機などの設計最適化を行う場合、部品の単純化を行った上に最新のマシン（例えば、Xeon（商標）3.6GHz搭載マシン）を使っても、数年から数百年の計算時間を要することがある。たとえば、進化的アルゴリズムを使った設計最適化において、当業分野で一般的な値である１００個体、５００世代で進化的最適化を行い、数値流体力学を用いて１個体の評価時間に１日を要するケースでは、１（日）×１００（個体）×５００（世代）＝５００００（日）、すなわち約１３７年もの計算時間がかかってしまう。
【０００３】
このような計算時間の問題を解決するために、並列計算機（ＰＣクラスター等）が用いられることが多くなってきた。並列計算機は、複数のコンピュータをネットワークで接続して構成されており、大規模な計算を複数の小さな計算ブロックに分割し、これらの計算ブロックを別々のコンピュータに計算させることにより、計算結果を得るまでの時間を短縮化することができる。
【０００４】
並列計算機の性能や安定性は飛躍的に向上してきているが、並列計算機には「故障率」の問題が常に付きまとう。「故障率」は、システムのいずれかの箇所に故障が生じている可能性のことを意味するものであり、記号Pbrokenを用いて次式のように表される。
Pbroken＝１−（１−ｐ）ｎ 
ここで、ｐはシステムを構成する各部品の故障率を表し、ｎはシステムを構成する部品点数を表す。
【０００５】
並列計算機は、複数のコンピュータ（マスターノード、スレーブノード）をネットワークで接続して構成されており、コンピュータやネットワーク用ケーブル等の部品点数が多くなるので、単体のコンピュータに比して故障率が高くなってしまう。また、計算機の規模が大きくなり接続されるコンピュータの台数が増えるほど、計算機全体の部品点数も増えるので、並列計算機全体の故障率は１、すなわちいつも何処かが必ず故障している状態に近くなってしまう。故障率の問題は、並列計算機による計算処理を不安定にする要因となる。
【０００６】
このような問題に対して従来は、並列計算機の修理後に人が手動で計算を再開させる、所謂チェックポイントリスタート機能によって解決する方法（例えば、特許文献1、特許文献２、特許文献３を参照）や異常を検知した場合には、異常が生じた計算ノードには計算を実行させない方法（例えば、特許文献４、特許文献５、特許文献６を参照）が採用されてきた。
【特許文献１】特開２００２−２８８１４９号
【特許文献２】特開平１０−１１６２６１号
【特許文献３】特開２００２―３６６５３５号
【特許文献４】特開２００３−２０３０６１号
【特許文献５】特開２００４−３８６５４号
【特許文献６】特開平６−１６１９７６号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、チェックポイントリスタート機能を採用する場合、トラブルの監視や、トラブルからの復旧作業は計算機が自動的に行なうものではなく、管理者が行なう必要がある。また、トラブル発生時には計算機の処理を一旦停止するので、進化的最適化を用いた設計最適化のように並列計算機を用いても1度の計算に数ヶ月から数年程度の長時間を要する環境では特に非効率的である。
【０００８】
また、異常が生じた計算ノードには計算を実行させない方法では、計算ノードに通信できない等のハードウェア面に関する特定のトラブルについては、その計算ノードを切り離すことである程度は回避することができる。しかし、計算ノード・ネットワーク系のソフトウェア面に関する異常、計算プログラムのクラッシュやハングアップ、ハードディスク（ＨＤＤ）のパンク、入出力系の異常、並列計算機用ソフトウェアである並列仮想マシン（parallel virtual machine：ＰＶＭ）またはメッセージ・パッシング・インタフェース（message passing interface：ＭＰＩ）の異常などのように、並列計算処理において発生する可能性の高いその他のトラブルの対応策については、特許文献４〜６では開示されていない。
【０００９】
本発明は、上記の点に鑑みてなされたものであり、進化的アルゴリズムを用いた設計最適化などのように1度の計算に長時間を要する環境において、並列計算機を用いた計算の際に生じる、ハードウェアおよびソフトウェアに関する様々なトラブルを自動的に検知し、それらのトラブルに自動的に対処することにより、並列計算処理を途中で停止させることなく安定的に継続・完了させる並列計算機、並列計算機用プログラムおよび並列計算方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、計算プログラムを実行する複数の計算ノードと、計算ノードにネットワークを介して接続されるマスターノードとを含み、進化的アルゴリズムを用いた設計最適化などのように1度の計算に長時間を要する環境において並列計算処理を行なうための並列計算機システムを提供する。このシステムは、計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう異常処理手段を有する。
【００１１】
この発明により、並列計算機を用いた計算処理の際に生じる、ハードウェアおよびソフトウェアに関する様々なトラブルを自動的に検知し、それらのトラブルに自動的に対処することで、並列計算処理を途中で停止させることなく安定的に継続・完了させることができる。
【００１２】
本発明の一実施形態によると、異常処理手段が、さらに、マスターノードと計算ノードとの通信状態、計算ノードの稼働状況、または計算ノードのハードディスクの空き容量を定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう。
【００１３】
本発明の一実施形態によると、異常処理手段が、さらに、計算プログラムの実行前に、計算に必要な入出力ファイルの値またはフォーマットの異常検知および計算ノードに含まれる並列計算用ソフトウェアの異常検知を行い、計算プログラムの実行後に、計算結果が記録された出力ファイルの値またはフォーマットの異常検知を行い、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう。
【００１４】
本発明の一実施形態によると、計算ノードが、計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、異常処理手段が、定期的または処理単位ごとに前記ファイルの内容を解析して計算プログラムのクラッシュまたはハングアップを自動的に検知する。
【００１５】
本発明の一実施形態によると、計算ノードが、計算プログラムの実行中に定期的または処理単位ごとに所定の内容をファイルに書き出す手段をさらに含み、異常処理手段が、定期的または処理単位ごとに前記ファイルのタイムスタンプを解析して前記計算プログラムのクラッシュまたはハングアップを自動的に検知する。
【００１６】
また、本発明は、計算プログラムを実行する複数の計算ノードと、計算ノードにネットワークを介して接続されるマスターノードとを含む並列計算機を用いて、進化的アルゴリズムを用いた設計最適化のように1度の計算に長時間を要する環境において並列計算処理を行なう方法を提供する。この方法は、計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなうステップを含む。
【００１７】
さらに本発明は、計算プログラムを実行する複数の計算ノードと、計算ノードにネットワークを介して接続されるマスターノードとを含む並列計算機に、進化的アルゴリズムを用いた設計最適化のように1度の計算に長時間を要する環境において並列計算処理を実施させるためのプログラムを提供する。このプログラムは、計算プログラムのクラッシュまたはハングアップを定期的または処理単位ごとに監視し、異常が検知された計算ノードにおける計算プログラムの実行を中止し、この計算プログラムを他の計算ノードに実行させる一連の処理を自動的におこなう機能を含む。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して本発明の実施形態について説明する。
【００１９】
図１は、本発明が適用された並列計算機１０のシステム構成図である。
【００２０】
図１に示すように、並列計算機１０は、マスターノード１２、複数の計算（スレーブ）ノード１４−１〜１４−ｎ、およびマスタ−ノード１２と各計算ノード１４とを接続するネットワーク１６−１〜１６−ｎを備える。
【００２１】
マスターノード１２は、ネットワーク１６−１〜１６−ｎを介して全ての計算ノード１４―１〜１４−ｎと接続されており、システム全体で実行される計算処理の一部である計算プログラムが各計算ノード１４−１〜１４−ｎで実行されるように、ネットワーク１６−１〜１６−ｎを介して計算ノード１４−１〜１４―ｎを管理する。
【００２２】
計算ノード１４−１〜１４−ｎは、所与の計算プログラムを実行して、計算結果をネットワーク１６−１〜１６−ｎを介してマスターノード１２に送る。
【００２３】
マスターノード１２および計算ノード１４−１〜１４−ｎは、それぞれ汎用の中央処理装置（CPU）を備えるコンピュータで実現可能である。マスターノード１２および計算ノード１４−１〜１４−ｎに適用されるコンピュータのCPUの処理速度は同一でなくとも良い。
【００２４】
計算ノード１４―１〜１４−ｎは、例えば１８０台程度の規模であるが、並列計算機の処理能力を高めるために、さらに大規模な構成をとっても良い。
【００２５】
マスターノード１２と計算ノード１４−１〜１４−ｎとの接続は、マスターノード１２が全ての計算ノードと通信できる状態であれば良く、例えば各計算ノードのCPU性能に応じて計算ノードをグループ化して、グループ単位でマスターノード１２に接続するなど、任意の接続手法を用いて良い。
【００２６】
図２を参照して、並列計算機１０による並列計算の概略について説明する。
【００２７】
並列計算機１０は、大規模な計算を複数の小さな計算ブロックに分割し、それらを別々の計算ノード１４−１〜１４−ｎに計算させる。ここで、本発明の処理を説明するにあたり、説明の便宜上、並列計算機１０に計算させる計算全体およびその計算自体を「全体計算Ａ」と称し、分割された個々の計算ブロックおよびそれらの計算自体を「計算ブロックa(1)」、「計算ブロックa(2)」、・・・、「計算ブロックa(m)」と称する。図２は、全体計算Ａと計算ブロックa(1)、a(2)、・・・、a(m)の関係を模式的に示す図である。
【００２８】
進化的アルゴリズムによる設計最適化問題の場合、計算ブロックの数mは計算ノードの数nよりもはるかに多くなる。その為に、n個の計算ノードで計算ブロックa(1)からa(n)までを計算した後に、次に計算ブロックa(n+1)からa(2n)を計算するように順に処理していくこととなる。また、計算ブロックに依存関係がある場合、例えばa(1)からa(n)の計算結果がないとa(n+1)からa(2n)が計算できないような場合は、計算のタイミング（同期）を取ることが必要となったり、依存関係の無い計算ブロックを先に計算させるなどの処理が必要となることもある。
【００２９】
ここで、設計最適化問題の具体例として、航空機のエンジンを構成する部品であるガスタービンファン（ＧＴファン）を環境に最適な形状に設計する場合を考える。１個体は、ＧＴファンの設計用パラメータから構成される。１世代は、複数の異なるパラメータをもつ個体群から形成される。個体群の全ての個体について、各個体のもつ設計用パラメータを用いて、数値流体力学や有限要素法などの手法によりＧＴファンの動作シミュレーションを行ない、設定された環境への適合度を評価して、最も適合度の高いＧＴファンを提供した個体が次世代の親となる。この親個体を交叉および突然変異させて子個体を生成し、再度上述の評価計算を行なう。このような処理ループを一般的に1世代当たり１００個体で、５００世代だけ繰り返して、最後に生き残った個体の設計用パラメータが、設定された環境に最適なＧＴファンを提供する。
【００３０】
ここで、上述のＧＴファンの評価時間は１個体につき3日程度かかるので、計算ノードが１８０台程度の規模の並列計算機では、数ヶ月から数年程度の計算時間が必要である。また、同規模の並列計算機では、1日当たり１台強に障害が生じることが知られている。
【００３１】
このような環境において、計算ノードの一部に異常が発生する毎に当該異常箇所を修復するためにシステム全体を停止することは、修復作業後に改めて最初から全体計算をやり直さなければならず、著しく非効率的であり、回避すべきである。そこで、本発明による並列計算機は、計算ノードにおける異常を自動的に検出して、トラブルに自動的に対処する機能を備えることにより、計算ノードの一部に異常が発生しても全体計算を継続して実行することを可能にする。
【００３２】
図３は、本発明の一実施形態による並列計算機の機能ブロック図である。本実施形態では、マスターノード１２は、計算プログラムを含むソフトウェア及びハードウェアなど複数箇所の異常を自動検知し、トラブルに自動的に対処する。
【００３３】
図３に示すように、マスターノード１２は、指令部２１、計算ノード決定部２２、ハードウェア・ソフトウェアチェック部２３、入力ファイルチェック部２４、計算開始指示部２５、ハングアップ・クラッシュチェック部２６、出力ファイルチェック部２７および異常処理部２８を備える。マスターノード１２には複数の計算ノード１４−１〜１４−ｎが接続されているが、１つの計算ノード１４のみを代表させて図示している。
【００３４】
本実施形態において、ハードウェア・ソフトウェアチェック部２３、入力ファイルチェック部２４、ハングアップ・クラッシュチェック部２６、および出力ファイルチェック部２７が異常検知を行ない、異常処理部２８が検知された異常への対処を行なう。
【００３５】
以下、異常検知および対処に関する各機能ブロックの詳細を説明する。
【００３６】
ハードウェア・ソフトウェアチェック部２３は、１）ネットワーク１６−１〜１６−ｎおよび計算ノード１４―１〜１４―ｎの異常検知、２）並列計算機用ソフトウェアの異常検知、３）ハードディスクの異常検知を行なう。
【００３７】
ネットワーク１６−１〜１６−ｎおよび計算ノード１４―１〜１４―ｎの異常検知については、例えば、計算ジョブをマスターノードから計算ノードに渡して実行する前に、通常の計算機から使うことができるpingなどのコマンドを使って、マスターノード１２から計算ノード１４にアクセスし、そのレスポンスをチェックして異常の有無を判定する。また、マスターノードから計算ノードにアクセスすることができれば、ping以外のコマンドを使っても良い。
【００３８】
並列計算機１０を使う際に使われる並列計算機用ソフト（例えば、ＰＶＭやＭＰＩなど）のソフトウェアの異常検知に関しては、例えば、計算プログラム投入の前に、並列計算が出来るかどうかの条件を調べておくことで可能である。並列計算機用ソフトは、ソフトウェア起動時に異常があったり、起動は出来たが並列計算プログラムを実行できなかったり、計算中に異常を示したりすることが良くある。特に長時間の計算を行う場合は、この異常の為に計算が止まってしまうことが良くある。そこで、計算プログラム投入の際に事前に並列計算が出来るかどうかの条件を調べておくことは非常に効果的である。並列計算が可能な条件として、並列計算ソフトウェア毎に若干異なるが、例えば、並列計算ソフトウェアのデーモンが走っている、ある特定のファイルが存在しないまたは存在しているなどがある。そこで、それらをチェックするプログラムを作成し、それを実行し、計算ノード１４からのレスポンスを解析することで、計算ノード１４の異常を判定できる。
【００３９】
ハードディスク（ＨＤＤ）の異常検知に関しては、ファイルの書き込み前にHDDの容量と書き出す予定のファイルの容量を比較するなどで可能である。数値流体力学などを計算ノードで計算するような場合、入力ファイル、中間ファイル、結果ファイルが大きくなることは一般的である。HDDの容量が入力ファイル、中間ファイル、結果ファイルに対して足りない場合、プログラムが書き出せるまで計算ノード１４が待機してしまい、非常に効率が悪い。しかも見かけ上は、計算プログラムがまだ計算しているかのように振舞ってしまい、その状態を検知するのが難しく、計算結果を待っても得られないという状態に陥る。このような状況を自動検知する仕組みとして、ファイルの書き込み前にHDDの状況をチェックするプログラムまたはコマンドを実行し、計算ノード１４からのレスポンスを解析することで、マスターノード１２や計算ノード１４が入力ファイル、中間ファイル、結果ファイルが書き出せるかどうか検知可能である。
【００４０】
ハードディスクに異常があった場合の対処として、三つの方法が考えられる。一つはユーザにメールを送るなどしてHDDの容量をキープするように促す処理を入れる方法、もう一つはHDDの容量をキープするようにプログラム中に「不要ファイル削除」の処理を入れる方法、もう一つは出力する中間ファイルや結果ファイルのデータ量を削減する方法（出力しないも含む）が考えられる。これらは、ユーザの意思で事前に決定しておく。
【００４１】
入力ファイルチェック部２４は、ファイルアクセス前に必ずファイルの有無や内容を調べてファイルの異常を検知する。ファイルアクセスの前に必ずファイルの有無などの状態を調べて、その状態を解析し、異常がなければ、ファイルの内容をチェックし、内容を解析する。ファイル内容のチェックは、計算ノード１４に投入するプログラムと非常に密接な関係にある。計算プログラムの入出力系に適合したファイルフォーマットであることはもちろんのこと、データ内容もチェックする方が好ましい。
【００４２】
また、プログラム上は書き込みが終わったように見えても、キャッシュに入ってファイルにはきっちりと書き込みが出来ていないようなケースが有り得る。そこで、入出力ファイルの最後に特定の書き込み（例えば、「##### End of File」）をさせるようにし、それをマスターノード１２からチェックすることで、キャッシュに入ってプログラム上は書き込みが終わっていてもファイルには書き込みが終わっていないような特殊な状態も自動検知可能である。異常があれば、異常処理部２８でファイルの修理や再計算による出力ファイルの作り直しなどをするのが良い。
【００４３】
出力ファイルチェック部２７は、各計算ブロックの計算終了後、入力ファイルチェック部２４と同様の処理を行なう。
【００４４】
ハングアップ・クラッシュチェック部２６は、計算ブロックの計算を実行中に定期的または処理単位ごとに計算ノードのクラッシュ（異常終了）およびハングアップ（計算ノード１４に異常がなく、JobのIDからもプログラムが動いているように見えるが実際は計算が止まっている状態）を検知する。
【００４５】
クラッシュの検知については、計算プログラムがクラッシュすれば、計算機上からJobのIDがなくなることを利用することができる。例えば、psコマンドを使うことで計算ノード１４上の全てのJobのリストを出し、そのリストの中から、計算プログラムのIDの有無をチェックすることにより、計算プログラムがクラッシュしているかどうかを検出する。もし、計算プログラムがクラッシュしてしまった場合は、異常処理部２８で再度計算プログラムを計算ノード１４に投入することで問題が解決する。検出の方法としては、それ以外にもCPU使用率などのCPU状態からも検出可能である。
【００４６】
ハングアップの検知については、計算ノードで実行される計算プログラムに定期的にプログラム情報をファイルなどに書き出す処理部分を加える。それをマスターノード１２で定期的にチェックすることで、計算プログラムのハングアップを自動検知し、異常があれば計算プログラムを再実行するなどで自動回避することで問題が解決する。
【００４７】
図４は、このハングアップを自動検知する仕組みの具体的な手法の一つを示している。計算ノード１４で実行されるプログラムに定期的に「異常なし」とファイル２２に書き出す部分を足し、一方それをチェックする側のマスターノード１２には、そのファイル２２をチェックし、その後に「異常あり」とファイル２２に書き出す部分を足す。計算プログラムに異常がなければ、マスターノード１２で「異常あり」と書き直されたファイル２２は、マスターノード１２が次にチェックするまでに「異常なし」と書き直される。その為、マスターノード１２からのチェックを無事通過できる。逆に計算プログラムに異常があれば、マスターノード１２で異常ありと書き直されたファイル２２を計算ノード１４が書き直せないために、マスターノード１２の次のチェックの時に「異常あり」となったままなので、マスターノード１２のチェックを通過することが出来ず、プログラムがハングアップしたと判定される。
【００４８】
他の方法として、計算ノード１４で実行されるプログラムが定期的に状況を時間と共に書き出し、マスターノード１２が、その書き出された状況および時間をチェックすることが考えられる。これ以外にも、計算ノード１４のプログラムが書き出すファイルのタイムスタンプ等をチェックする方法なども考えられる。
【００４９】
異常処理部２８は、上述のハードウェア・ソフトウェアチェック部２３、入力ファイルチェック部２４、ハングアップ・クラッシュチェック部２６、および出力ファイルチェック部２７によって計算ノードに異常を検知したとき、当該計算ノードにおける計算プログラムの処理を中止させる。そして、その計算対象である計算ブロックａを計算させる計算ノード１４を所定のルールに従って変更して他の計算ノード１４を選択し、中止させた処理を再開させる。例えば、計算ブロックa(1)を計算させる計算ノード１４を計算ノード１４−１から計算ノード１４−２に変更し、計算ノード１４−２に計算ブロックa(1)を処理させるようにする。
【００５０】
計算ノード１４の変更は、ランダムに行ってもよいし、計算ノード１４の使用状況、計算ノード１４が備えるＣＰＵの使用率等に基づいたリストに従って行ってもよい。
【００５１】
なお、異常が生じた計算ノード１４については処理を中止させるのみならず、その後、マスターノード１２から計算ノード１４をリブートして計算に復帰できるようにしたり、異常が生じた計算ノード１４の電源を落としたり、ユーザや管理者にメール送信等で異常発生した旨を通知するようにすれば、非常に効率がよい（このような処理をされる計算ノードは今後も問題を生ずる可能性があるので、その計算ノードの特性を知っておくことで、計算ノードを選択する手法に反映させたり出来る。その為、並列計算機の利用の観点で効率が良いと考えられる）。異常が生じた計算ノード１４がリブートによって計算に復帰できるようになった場合、本発明の並列計算機は、並列計算の環境を整えた上で、直処理を中止させていた計算ノード１４を直ちに復帰させる。「並列計算の環境を整える」とは、例えば、並列計算用ソフトウェアの起動や異常入出力ファイルの整理などを行うことである。一方、処理を中止させていた計算ノード１４が復帰できない場合には、マスターノード１２は、その計算ノード１４を並列計算機から切り離す。
【００５２】
なお、本実施形態において並列計算機の異常を検出するハードウェア・ソフトウェアチェック部２３、入力ファイルチェック部２４、ハングアップ・クラッシュチェック部２６、および出力ファイルチェック部２７は、計算環境やその他の条件に応じて、これらのうちから選択的に使用しても良い。
【００５３】
図５Ａ〜Ｄは、本実施形態におけるマスターノード１２による異常の検出および対処の流れを示すフローチャートである。
【００５４】
まず、ステップＳ１０１において、計算ノード決定部２２によって、計算ブロックが割り当てられる計算ノードが決定される。ここでは、便宜上、計算ブロックa(1)が計算ノード１４−１に割り当てられたものとして、以下の説明を続ける。
【００５５】
続いて、ステップＳ１０２〜Ｓ１０９において、ハードウェア・ソフトウェアチェック部２３がハードウェアおよびソフトウェアの異常判定を行う。
【００５６】
ハードウェア・ソフトウェアチェック部２３は、先ずマスターノード１２から計算ノード１４−１までのネットワーク１６−１の状態を、pingなどのコマンドを利応してチェックする（ステップＳ１０２、Ｓ１０３）。このチェックでは、「通信が問題無く行える」、「応答に遅れが無い」等の項目が確認される。
【００５７】
ステップＳ１０３において異常が発見されない場合、ハードウェア・ソフトウェアチェック部２３は、計算ノード１４−１自体のチェックを行う（ステップＳ１０４、Ｓ１０５）。このチェックでは、計算ノード１４−１のシステム自体、例えばＣＰＵ温度、計算負荷、他者のログイン状況（CPU利用率や仕様から計算が最も早く終了すると予測されても、他の使用者によってジョブが投入されると計算スピードが極度に遅くなるので、そのような恐れがある計算ノードを避ける方が良い）等が確認される。
【００５８】
そして、ステップＳ１０５において異常が発見されない場合、ハードウェア・ソフトウェアチェック部２３は、並列計算機用のソフトウェア（例えば、周知のPVMやMPI等）をチェックする（ステップＳ１０６、Ｓ１０７）。この並列計算機用のソフトウェアは、図１のマスターノード１２及び計算ノード１４に格納されている。
【００５９】
通常、並列計算を実行させるためには市販、フリーウェアまたは専用の並列計算機用ソフトウェアが必要となるが、そのデーモン（並列計算機が使える環境を整える為に使用者から見えない形で常駐しているプログラム）やシステムファイルの条件（例えば、PVMの場合だとpvmlファイルやtemporaryファイル等）が整っていないと計算ノード１４−１に対する計算ブロックa(1)の投入ができない。ステップＳ１０６、Ｓ１０７は、計算ブロックの投入ができるようなソフトウェアであるか否かを確認する処理である。
【００６０】
ステップＳ１０７の処理において異常が発見されない場合、ハードウェア・ソフトウェアチェック部２３は、計算ノード１４−１が使用するハードディスク（ＨＤＤ）の容量をチェックする（ステップＳ１０８、Ｓ１０９）。更に、ハードウェア・ソフトウェアチェック部２３は、HDDに入出力ファイルを出力することが可能かどうかのチェック（例えば、書き込みのパーミションなど）を行う（ステップＳ１１０、Ｓ１１１）。
【００６１】
ここで、ＨＤＤの容量不足が生じていると、計算ノード１４−１における計算用の入力ファイル、中間ファイルおよび結果ファイルが書き出せないこととなり、計算ノード１４−１での計算プログラムが停止してしまったり、ＨＤＤの容量が十分になるまで計算プログラムを待機させなければならなくなる。そこで、事前にＨＤＤの容量チェックや入出力ファイルの出力チェックを行う。
【００６２】
ステップＳ１１１の処理において異常が発見されない場合、入力ファイルチェック部２４は、計算ノード１４−１が計算ブロックa(1)の計算を実行するのに必要な入力ファイルを計算ノード１４−１に配り（ステップＳ１１２）、再び計算ノード１４−１上の入力ファイルに異常が無いか否かをチェックする（ステップＳ１１３、Ｓ１１４）。ここで、配布前にファイルチェックをすることも考えられるが（チェックをしても良い）、配布前に異常がなくともファイル転送途中にファイル内容を失う等の異常が起こることも考えられるので、配布後にチェックするのが好ましい。仮に、入力ファイルの値やフォーマットに異常があった場合、計算プログラムが暴走を始め、得られた計算結果が全く無駄になってしまう。このような事態を回避するために、ステップＳ１１３、Ｓ１１４では入力ファイルの値やフォーマットのチェックを行う。
【００６３】
ステップＳ１１４の処理において異常が発見されない場合、計算開始指示部２５は、計算ノード１４−１に対して計算開始指示を出す（ステップＳ１１５）。これにより、計算ノード１４−１における計算ブロックa(1)の投入（実行）が開始される（ステップＳ１１６）。
【００６４】
計算ブロックa(1)の実行中、ハングアップ・クラッシュチェック部２６は、計算ブロックa(1)および計算ノード１４−１に対して定期的または処理単位ごとにチェックを行う。これは、計算ブロックa(1)がクラッシュ（異常終了）していないか否かのチェック（ステップＳ１１７、Ｓ１１８）と、計算ブロックa(1)がハングアップ（見かけ上計算処理が動いているように見えるが、実際は計算がストップしてしまっている、又は、無限ループなどに入ってしまっている状態）していないか否かのチェックである（ステップＳ１１９、Ｓ１２０）。
【００６５】
ステップＳ１１７〜Ｓ１２０は、計算ブロックの計算が終了するまで定期的または処理単位ごとに実行される。
【００６６】
なお、計算ブロックa(1)の処理中、上述のネットワーク１６のチェック（ステップＳ１０２）、計算ノード１４のチェック（ステップＳ１０４）、並列計算機用ソフトウェアのチェック（ステップＳ１０６）、ＨＤＤ容量のチェック（ステップＳ１０８）も定期的に行うようにしても良い。
【００６７】
ステップＳ１２１において、計算ブロックa(1)の処理が終了したことが検知されると、出力ファイルチェック部２７は、出力ファイル（結果ファイル）が正常に出力されているか否か、出力ファイルのフォーマットや値に異常が無いか否かをチェックし（ステップＳ１２２、Ｓ１２３）、異常が無い場合には計算ノード１４−１から計算結果（出力ファイルまたは計算した数値）を回収することで１つの計算が終了する（ステップＳ１２４）。すなわち、計算ノード１４−１における計算ブロックa(1)の計算が終了する。そして、次は、図２に示す計算ブロックのうち、まだ処理されていない計算ブロックに対して、ステップＳ１０１の処理が実行されていく（ステップＳ１２５）。また、全ての計算ブロックについてのステップＳ１２４の処理が終了した場合、全体計算Ａについての並列計算が終了することとなる。
【００６８】
ここで、上述のステップＳ１０３（ネットワーク）、Ｓ１０５（計算ノード）、Ｓ１０７（並列計算機ソフトウェア）、Ｓ１０９（ＨＤＤ容量）、Ｓ１１１（入出力ファイル）、Ｓ１１４（入力ファイル）、Ｓ１１８（クラッシュ）、Ｓ１２０（ハングアップ）およびＳ１２３（出力ファイル）のいずれかにおいて異常が検出された場合、マスターノード１２内の異常処理部２８は異常が検出された処理を中止させる（ステップＳ１２６）。そして、その計算対象である計算ブロックａを計算させる計算ノード１４を所定のルールに従って変更して他の計算ノード１４を選択し（ステップS １２７）、中止させた処理を再開させる（ステップS１２８）。
【００６９】
なお、ネットワークチェック（Ｓ１０２）、計算ノードのチェック（Ｓ１０４）、並列計算機用ソフトウェアのチェック（Ｓ１０６）、ＨＤＤ容量チェック（Ｓ１０８）、入出力ファイルチェック（Ｓ１１０）、入力ファイルチェック（Ｓ１１３）、クラッシュチェック（Ｓ１１７）、ハングアップチェック（Ｓ１１９）、および出力ファイルチェック（Ｓ１２２）の各処理ステップは、全て使用しても良いし、一部を選択して使用しても良い。また、各処理ステップの順序を入れ替えても良い。
【００７０】
本発明では、並列計算機上での計算プログラムの停止を招くトラブルに対して、前述のような手法で自動検知し、問題がある場合は自動的に対処する機能を付加することで、並列計算機での計算を安定的に実行させることを可能とした。これは、進化的アルゴリズムによる設計最適化のような長時間の計算が必要な場合に特に効果を表すことは自明であろう。
【００７１】
本発明は、前述のチェック機能を計算システムやプログラム中に入れることで実施可能である。また、プログラムの中に入れなくとも、静的または動的なライブラリーとしてチェック機能を提供し、それを実行するプログラムからリンク等をすることでも容易に実施可能である。また、ハードウェア上にプログラムを焼き付けてしまうなどの方法でも、本発明を実施することが可能である。
【００７２】
本発明は、並列計算機１０で計算を行う時に、並列計算機１０の故障やソフトウェアの異常により生じるプログラムの異常停止を自動検知、自動回避できる。それにより既存の手法ではプログラムの停止を招き、計算リソースを無駄にしてしまうような計算でも、システム、プログラムが自動的に検出し、自動的に回避を行うことで、全く人が介さずとも計算を走らせ続けることが可能となる。長時間の計算が必要となるような実設計問題の解析やその最適化計算でも、プログラムを停止させることなく安定的に長時間計算ができるようになり、並列計算機１０の信頼性や安定性を向上させることが出来るばかりか、ひいては異常停止による計算リソースの無駄を省け、結果を早く得るということが可能となる。
【００７３】
以上、本発明の実施の形態について説明したが、本発明はこのような実施形態に限定されることはなく、本発明の趣旨を逸脱しない範囲において改変して用いることができる。
【図面の簡単な説明】
【００７４】
【図１】本発明が適用された並列計算機のシステム構成図である。
【図２】並列計算機による並列計算の概略図である。
【図３】本発明の一実施形態による並列計算機の機能ブロック図である。
【図４】ハングアップを検知する手法を示す図である。
【図５Ａ】異常検出および対処の流れを示すフローチャートである。
【図５Ｂ】異常検出および対処の流れを示すフローチャートである。
【図５Ｃ】異常検出および対処の流れを示すフローチャートである。
【図５Ｄ】異常検出および対処の流れを示すフローチャートである。
【符号の説明】
【００７５】
１０  並列計算機
１２  マスターノード
１４  計算（スレーブ）ノード
１６  ネットワーク
２３  ハードウェア・ソフトウェアチェック部
２４  入力ファイルチェック部
２６  ハングアップ・クラッシュチェック部
２７  出力ファイルチェック部
２８  異常処理部
【図１】
2008123357.tif 000003
【図２】
2008123357.tif 000004
【図３】
2008123357.tif 000005
【図４】
2008123357.tif 000006
【図５Ａ】
2008123357.tif 000007
【図５Ｂ】
2008123357.tif 000008
【図５Ｃ】
2008123357.tif 000009
【図５Ｄ】
2008123357.tif 000010