(57)【特許請求の範囲】
【請求項１】
複数の異なる演算部を具備する演算装置が、互いに複数接続しているシステムにおいて、
前記演算装置が、
各演算部に対し演算処理の割り振りを行うステップと、
前記演算処理の割り振りを決定すると、前記演算処理に関するチェックポイントを生成するステップと、
通信ネットワークによって、前記システムにおけるすべての演算装置間で、個々の前記演算装置のメモリに設けられているメモリ領域であるグローバル領域に同一の前記チェックポイントに関する情報を同期させて保存するステップと、
前記演算処理を行っている他演算装置における前記演算部の障害を検出すると、前記障害を生じていない別の演算装置が、前記グローバル領域に保存したチェックポイントに関する情報を読み出し、前記読みだしたチェックポイントに関する情報に従って前記演算処理を再開するステップと、
を実行することを特徴とする演算処理管理方法。
【請求項２】
前記同期させてグローバル領域に保存するチェックポイントに関する情報を選択可能である
ことを特徴とする請求項１に記載の演算処理管理方法。
【請求項３】
前記演算装置が、
個々の前記演算装置のメモリに設けられているメモリ領域であるローカル領域に前記演算装置自身に関するチェックポイントを保存し、
前記演算処理が終了すると、前記グローバル領域及び前記ローカル領域から、該演算処理に関するチェックポイントに関する情報を削除するステップ
を実行することを特徴とする請求項１又は請求項２に記載の演算処理管理方法。
【請求項４】
複数の異なる演算部を具備する演算装置が、互いに複数接続しているシステムを構成する演算装置であって、
各演算部に対し演算処理の割り振りを行う割振処理部と、
前記演算処理の割り振りを決定すると、前記演算処理に関するチェックポイントを生成し、通信ネットワークによって、前記システムにおけるすべての演算装置間で、個々の前記演算装置のメモリに設けられているメモリ領域であるグローバル領域に同一の前記チェックポイントに関する情報を同期させて保存するチェックポイント処理部と、
前記演算処理を行っている他演算装置における前記演算部の障害を検出すると、前記グローバル領域に保存したチェックポイントを読み出し、前記読みだしたチェックポイントに従って前記演算処理を再開するリカバリ処理部と、
を有することを特徴とする演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の異なる演算部を有する演算装置が、ネットワークによって複数接続されているシステムにおける演算処理管理方法及び演算装置に関する。
【背景技術】
【０００２】
従来画像処理に用いられてきたＧＰＵ（Graphics Processing Unit）を汎用計算に応用し、並列計算を実行するＧＰＧＰＵ（General Purpose GPU）は、近年ＨＰＣ（High Performance Computing）をはじめとする並列計算環境にも応用されている。また並行プログラミング等のトレンドと相まって、ＧＰＧＰＵの適用範囲が広がっている。
【０００３】
ここで、複数ノードを用いたクラスタシステムも並列計算のための一手法であり、ノード間でプロセス配置を最適化させるＳＳＩ（Single System Image）等といったスループット向上のための研究開発が行われている（例えば、非特許文献１参照）。
【０００４】
また、従来において、ＧＰＧＰＵ上で処理を実行させるためには、専用のプログラミング言語による記述が必要であり、ＮＶＩＤＩＡ（登録商標）社のＣＵＤＡ（Compute Unified Device Architecture：登録商標）等といったベンダ固有の実行環境が必要である。しかしながら、ハードウェアアーキテクチャの異なる場合でも一元的に動作させたいというヘテロジーニアスコンピューティングへの要求を背景に、ＯｐｅｎＣＬ（登録商標）と呼ばれる特定の計算デバイスに依存しない環境が開発され、マルチコアＣＰＵ（Central Processing Unit）や、ＧＰＵ、ＤＳＰ（Digital Signal Processor）といったデバイスの違いに関わらないプログラミングが可能となっている（例えば、非特許文献２参照）。
【０００５】
ＧＰＧＰＵを用いる場合、同時実行させたい並列処理が、ＣＰＵのメイン処理から分散タスクとしてＧＰＧＰＵへ割り振られる。その際にＣＰＵの管理するメモリからＧＰＧＰＵのメモリへのデータ転送が必要となる。その後、ＣＰＵはそれぞれの実行結果を受け取り、チェック処理等を行う。
【０００６】
ＧＰＧＰＵはＣＰＵと比較して、シンプルな計算を並列に行うことに特化しているため、スループット性に優れるという利点があるが、一方で計算結果の誤りが多くなるという欠点を有している。この計算結果の誤りは、本来の画像処理目的であれば許容される程度の誤りであるが、数値計算等の用途では誤差が伝搬もしくは拡大するといった問題があるため許容されない場合がある。このため、ＧＰＧＰＵの実行結果に何らかのエラーが含まれる場合に、予め保存しておいたチェックポイントデータを用いて、再度計算を実行するといったリカバリ技術に関する手法が提案されている（例えば、非特許文献３参照）。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Christine Morin, et al.,"Kerrighed: A Single System Image Cluster Operating System for High Performance Computing", Euro-Par 2003 Parallel Processing, Lecture Notes in Computer Science, Volume 2790, 2003, p.1291-p.1294.
【非特許文献２】John E. Stone, et al.,"OpenCL:A Parallel Programming Standard for Heterogeneous Computing Systems", Computing in Science & Engineering,2010, Volume:12 ,Issue: 3,p.66-72.
【非特許文献３】Xinhai Xu, et al.,'HiAL-Ckpt: A Hierarchical Application-Level Checkpointing for CPU-GPU Hybrid Systems', The 5th International Conference on Computer Science & Education Hefei,Chine, August 24-27,2010,p1895 - 1899.
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、非特許文献３に記載の技術によるチェックポイント及びリカバリの手法は、１つのＣＰＵに対してのみ有効であり、複数ノードをまたがるＳＳＩのようなクラスタ環境は考慮されていない。
例えば、ＳＳＩでは計算途中のプロセスが他ノードへマイグレーションするケースがあるため、チェックポイントデータに関しても、同様に他ノードへマイグレーションを行う必要がある。
【０００９】
また、比較的時間を要する計算を実行する場合には、一部のノードで障害が発生した際の復旧手段としてクラスタワイドにチェックポイントデータを保存し、他の代替ノードにて計算を引き継ぎ実行する必要がある。
【００１０】
非特許文献３には、ＧＰＧＰＵによる処理を行うサーバが複数ある場合について、上記の課題を解決していない。
【００１１】
このような背景に鑑みて本発明がなされたのであり、本発明は、異なる演算部を有する演算装置が複数ある場合におけるチェックポイントの設定及びリカバリを可能とする演算処理管理方法及び演算装置を提供することを課題とする。
【課題を解決するための手段】
【００１２】
前記した課題を解決するため、請求項１に記載の発明は、複数の異なる演算部を具備する演算装置が、互いに複数接続しているシステムにおいて、前記演算装置が、各演算部に対し演算処理の割り振りを行うステップと、前記演算処理の割り振りを決定すると、前記演算処理に関するチェックポイントを生成するステップと、通信ネットワークによって、前記システムにおけるすべての演算装置間で、個々の前記演算装置のメモリに設けられているメモリ領域であるグローバル領域に同一の前記チェックポイントに関する情報を同期させて保存するステップと、前記演算処理を行っている他演算装置における前記演算部の障害を検出すると、前記障害を生じていない別の演算装置が、前記グローバル領域に保存したチェックポイントに関する情報を読み出し、前記読みだしたチェックポイントに関する情報に従って前記演算処理を再開するステップと、を実行することを特徴とする演算処理管理方法とした。
【００１３】
また、請求項４に記載の発明は、複数の異なる演算部を具備する演算装置が、互いに複数接続しているシステムを構成する演算装置であって、各演算部に対し演算処理の割り振りを行う割振処理部と、前記演算処理の割り振りを決定すると、前記演算処理に関するチェックポイントを生成し、通信ネットワークによって、前記システムにおけるすべての演算装置間で、個々の前記演算装置のメモリに設けられているメモリ領域であるグローバル領域に同一の前記チェックポイントに関する情報を同期させて保存するチェックポイント処理部と、前記演算処理を行っている他演算装置における前記演算部の障害を検出すると、前記グローバル領域に保存したチェックポイントを読み出し、前記読みだしたチェックポイントに従って前記演算処理を再開するリカバリ処理部と、を有することを特徴とする演算装置とした。
【００１４】
このようにすることにより、演算装置は、異なる演算部を有している演算装置で構成されるシステムにおいて、すべての演算装置間で、チェックポイントに関する情報を共有して保持することで、システム内の演算装置に障害が発生しても、チェックポイントに関する情報を基に、他の演算装置で演算処理を再開することができるので、演算装置の障害に対するシステムの信頼性を向上させることができる。
【００１５】
請求項２に記載の発明は、前記同期させてグローバル領域に保存するチェックポイントに関する情報を選択可能であることを特徴とする請求項１に記載の演算処理管理方法とした。
【００１６】
このようにすることにより、演算装置は、チェックポイントに関する情報を格納するグローバル領域のリソースを節約することができる。
【００１７】
請求項３に記載の発明は、前記演算装置が、個々の前記演算装置のメモリに設けられているメモリ領域であるローカル領域に前記演算装置自身に関するチェックポイントを保存し、前記演算処理が終了すると、前記グローバル領域及び前記ローカル領域から、該演算処理に関するチェックポイントに関する情報を削除するステップを実行することを特徴とする請求項１又は請求項２に記載の演算処理管理方法とした。
【００１８】
このようにすることで、チェックポイントに関する情報を格納するグローバル領域及び前記ローカル領域のリソースを有効に使用することができる。
【発明の効果】
【００１９】
本発明によれば、異なる演算部を有する演算装置が複数ある場合におけるチェックポイントの設定及びリカバリを可能とする演算処理管理方法及び演算装置を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本実施形態に係る計算器システムの構成の概要を説明するための図である。
【図２】本実施形態に係るノードの構成図である。
【図３】計算機システムにおける各ノードのハードウェア構成を示す図である。
【図４】本実施形態に係るプロセステーブル及びグローバルプロセステーブルの例を示す図である。
【図５】本実施形態で使用される計算機システムの構成を示す図である。
【図６】本実施形態に係るプロセスの割振手順を示すシーケンス図である。
【図７】本実施形態に係るＧＰＧＰＵへのプロセス割振手順の詳細を示すフローチャートである（その１）。
【図８】本実施形態に係るＧＰＧＰＵへのプロセス割振手順の詳細を示すフローチャートである（その２）。
【図９】本実施形態に係る計算機システムにおけるリカバリの手順を示すシーケンス図である。
【図１０】本実施形態に係る障害検定・リカバリ処理の詳細な手順を示すフローチャートである。
【発明を実施するための形態】
【００２１】
＜本願発明の概要＞
まず、本実施形態に係る計算器システムの構成と特徴について説明する。
図１は、本実施形態に係る計算器システムの構成の概要を説明するための図である。
図１に示す計算機システムＺ１では、３つのノード（演算装置）１（１ａ〜１ｃ）が設置されている。各ノード１ａ〜１ｃは、例えば、ＳＳＩを構成している。各ノード１では、ＯＳ（Operation System）４０２が実行されており、複数のプロセス（演算処理）４０１が実行されている。なお、プロセス４０１は、ＣＰＵ（演算部）１１（図２参照）又はＧＰＧＰＵ（演算部）２１（図２参照）によって実行される。
また、各ノード１のＣＰＵ用メモリ１２（図２参照）において、プロセステーブル２０１が格納されているとともに、チェックポイントデータ保持領域２０２が確保されている。
ここで、プロセステーブル２０１は、実行されているプロセス４０１のＧＰＧＰＵ２１（図２参照）の割り振りに関する情報（割振情報）を保持するものである。
また、チェックポイントデータ保持領域２０２は、ＧＰＧＰＵ２１が実行するプロセス４０１のチェックポイントデータが格納される記憶領域である。チェックポイントデータは、登録された時点におけるプロセス４０１の実行状態に関するデータが格納されている。
【００２２】
各ノード１は、ネットワーク２（図３参照）で接続され、クラスタＺ２（図５参照）構成をとることで、計算機システムＺ１はＳＳＩとして動作する。すなわち、複数ノード１にまたがってリアルタイムに状態同期を行うことで、計算機システムＺ１は、仮想的に１つのノードとして動作する。
【００２３】
そして、計算機システムＺ１に共通のプロセステーブル２０１及びチェックポイントデータ保持領域２０２として、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域（記憶部）３０２を有している。
グローバルプロセステーブル３０１には、計算機システムＺ１におけるノード１間で共有すべき割振情報が格納されている。すなわち、プロセステーブル２０１が自身のノード１における割振情報のみを格納しているのに対し、グローバルプロセステーブル３０１には、計算機システムＺ１の各ノード１から登録された割振情報が格納されている。
【００２４】
また、グローバルチェックポイントデータ保持領域３０２には、計算機システムＺ１におけるノード１間で共有すべきチェックポイントデータが格納されている。すなわち、チェックポイントデータ保持領域２０２が自身のノード１におけるチェックポイントデータのみを格納しているのに対し、グローバルチェックポイントデータ保持領域３０２には、計算機システムＺ１の各ノード１から登録されたチェックポイントデータが格納されている。
【００２５】
なお、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２には、計算機システムＺ１で実行されるすべてのプロセス４０１に関する情報が格納される必要はなく、所定の設定に基づいて選択されたプロセス４０１に関する情報が格納されればよい。
【００２６】
グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２は、各ノード１が同一のデータを常時同期させながら保持している。
【００２７】
＜機能ブロック図＞
図２は、本実施形態に係るノードの構成図である。
ノード１は、ＣＰＵ１１、ＧＰＧＰＵ２１、ＣＰＵ用メモリ１２、ＧＰＧＰＵ用メモリ２２、ＨＤ（Hard Disk）等の記憶装置３１及び入力装置（入力部）３３を有するコンピュータである。なお、図２に示す例では、ノード１に対し、ＧＰＧＰＵ２１（２１ａ〜２１ｂ）が３つ搭載されているが、１つのＧＰＧＰＵ２１が備えられてもよいし、２つ又は４つ以上のＧＰＧＰＵ２１がノード１に搭載されてもよい。
ＣＰＵ１１、ＧＰＧＰＵ２１及び記憶装置３１は、バス３２によって接続されている。
そして、ノード１には、ＣＰＵ１１に対応して設置されているＣＰＵ用メモリ１２、各ＧＰＧＰＵ２１に対応して設置されているＧＰＧＰＵ用メモリ２２ａ〜２２ｃを有している。
【００２８】
また、ＣＰＵ用メモリ１２には、プロセステーブル２０１、チェックポイントデータ保持領域２０２、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２が格納されている。プロセステーブル２０１、チェックポイントデータ保持領域２０２、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２については、図１で説明済みであるので、ここでの説明を省略する。なお、プロセステーブル２０１及びチェックポイントデータ保持領域２０２をローカル領域２００、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２をグローバル領域３００と称する。
【００２９】
ここで、グローバル領域３００は、グローバルメモリ空間である。グローバルメモリ空間とは、各ノード１において共通して有されているメモリ空間である。例えば、ノード１ａのメモリにおけるアドレス「ＡＡＡ」は、「０１ＡＡＡ」となる（「０１」はノード１ａの識別番号）。そして、ノード１ｂ，１ｃは、このメモリアドレス「０１ＡＡＡ」を自身のメモリに割り振ることで、メモリ空間の共有が行われている。すなわち、グローバルメモリ空間における「０１ＡＡＡ」は、ノード１ａのメモリにおけるアドレスを指すとともに、ノード１ｂ及びノード１ｃのメモリにおけるアドレスをも指している。
なお、プロセステーブル２０１、チェックポイントデータ保持領域２０２、グローバルプロセステーブル３０１及びグローバルチェックポイントデータ保持領域３０２は、記憶装置３１に格納されてもよい。
【００３０】
また、記憶装置３１に格納されているプログラムがＣＰＵ用メモリ１２に展開され、ＣＰＵ１１によって実行されることで、処理部１００及び処理部１００を構成している割振処理部１０１、チェックポイント処理部１０２、リカバリ処理部１０３及び監視処理部１０４が具現化している。
割振処理部１０１は、プロセス４０１をＧＰＧＰＵ２１や、自身におけるＣＰＵ１１に割り振る。
チェックポイント処理部１０２は、ＧＰＧＰＵ２１に割り振ったプロセス４０１の割振情報や、チェックポイントデータを、プロセステーブル２０１や、チェックポイントデータ保持領域２０２、グローバルプロセステーブル３０１、グローバルチェックポイントデータ保持領域３０２に格納する。また、チェックポイント処理部１０２は、他のノード１に障害が生じた際において、グローバル領域３００からチェックポイントデータを取得する等の処理を行う。
【００３１】
リカバリ処理部１０３は、他のノード１において、障害が発生した際、チェックポイント処理部１０２が取得したチェックポイントデータを基に、障害が発生したノード１で実行されていたプロセス４０１を、自身のノード１で実行する。
監視処理部１０４は、障害が発生したノード１があるか否かを監視する。
なお、割振処理部１０１、チェックポイント処理部１０２、リカバリ処理部１０３及び監視処理部１０４が行う詳細な処理の流れについては後記して説明する。
【００３２】
各ＧＰＧＰＵ用メモリ２２ａ〜２２ｃには、割振処理部１０１によって割り振られたプロセス４０１（４０１ａ〜４０１ｃ）が、ＧＰＧＰＵ２１ａ〜２１ｃによって実行されている。
【００３３】
＜ハードウェア構成＞
図３は、計算機システムにおける各ノードのハードウェア構成を示す図である。
ここでは、ネットワーク２によって接続されたノード１が２つあり（ノード１ａ，１ｂ）、各ノード１において１つのＣＰＵ１１と、３つのＧＰＧＰＵ２１とが備わっている場合を示す（ＧＰＧＰＵ２１ａ〜ＧＰＧＰＵ２１ｃ）。
図２で説明しているように、ＣＰＵ１１に対応してＣＰＵ用メモリ１２が備わっており、ＧＰＧＰＵ２１に対応してＧＰＧＰＵ用メモリ２２も３つ備わっている（ＧＰＧＰＵ用メモリ２２ａ〜２２ｃ）。
【００３４】
そして、図３に示すように、ＣＰＵ１１と、各ＧＰＧＰＵ２１はバス３２によって接続され、ＣＰＵ用メモリ１２−ＧＰＧＰＵ用メモリ２２（２２ａ〜２２ｃ）間のデータ転送はＤＭＡ（Direct Memory Access）により行われる。
なお、ここでは、１つのノード１が有するＧＰＧＰＵ２１の数が、それぞれのノード１において同じであるとしているが、異なっていてもよい。また、ここでは、１つのノード１が１つのＣＰＵ１１を有するシングルコアを想定しているが、２つ以上のＣＰＵを有するマルチコアの構成を有してもよい。
【００３５】
＜プロセステーブル及びグローバルプロセステーブル＞
図４は、本実施形態に係るプロセステーブル及びグローバルプロセステーブルの例を示す図である。
プロセステーブル２０１及びグローバルプロセステーブル３０１において、「ＧＰＧＰＵ  ＩＤ」の欄には、ＧＰＧＰＵ２１デバイスの識別子が格納される。「Ｐｒｏｃｅｓｓ  ＩＤ」の欄には、「ＧＰＧＰＵ  ＩＤ」欄に登録されているＧＰＧＰＵ２１に割り振るプロセス４０１の識別子が格納される。「メソッド名」の欄には、ＧＰＧＰＵ２１に割り振るプロセス４０１のメソッド名が格納される。なお、括弧内はメソッドの引数である。「メモリ開始アドレス」には、チェックポイントデータ保持領域２０２又はグローバルチェックポイントデータ保持領域３０２の開始地点を表すアドレスが格納される。「メモリサイズ」の欄には、チェックポイントデータ保持領域２０２の大きさを示す値が格納される。
このように、プロセステーブル２０１及びグローバルプロセステーブル３０１は、同じ構成を有しているが、前記したように、プロセステーブル２０１が自身のノード１における割振情報のみを格納しているのに対し、グローバルプロセステーブル３０１には、計算機システムＺ１の各ノード１から登録された割振情報が格納されている。
【００３６】
＜計算機システムの構成＞
図５は、本実施形態で使用される計算機システムの構成を示す図である。
計算機システムＺ１（図１参照）において、複数のノード１（１ａ〜１ｃ）は高速なネットワーク２を介して接続されるクラスタＺ２構成となっている。
ＯＳ４０２（図１参照）及びプロセス４０１は各ノード１上で動作し、各プロセス４０１がリアルタイムに状態同期を行う事で、仮想的に１つのシステムとして動作する。
そして、ノード１のうちの１つにおける状態や、データに変更が生じた場合、ノード１は、即座に差分データ４０３を他のノード１へ送信することにより、クラスタＺ２全体の同期を行う。
【００３７】
＜プロセスの割り振り＞
図６は、本実施形態に係るプロセスの割振手順を示すシーケンス図である。適宜、図２を参照する。なお、図６に示すノード１では、３つのＧＰＧＰＵ２１ａ〜２１ｃが備えられており、そのうち、２つのＧＰＧＰＵ２１に対してプロセス４０１が割り振られる場合を示す。図６における各処理の詳細は後記して説明する。
まず、ＣＰＵ１１は、プロセスａをＧＰＧＰＵ２１へ割り振るべきか否かを判定し、割り振る場合、割振処理部１０１は、ＧＰＧＰＵ２１（ここでは、ＧＰＧＰＵ２１ａ）へプロセスａを割り振るプロセスａの割振処理を行う（Ｓ１０１）。
なお、ＣＰＵ１１が、どのＧＰＧＰＵ２１にプロセス４０１を割り振るかは、図示しないスケジューラの指示等に従ってＣＰＵ１１が判断する。
【００３８】
また、ＣＰＵ１１はプロセスａに関するチェックポイントを生成し、生成したチェックポイントのデータ（チェックポイントデータ）をチェックポイントデータ保持領域２０２や、グローバルチェックポイントデータ保持領域３０２に格納する。また、ＣＰＵ１１は、該ＧＰＧＰＵ２１へのプロセス４０１の割振情報をプロセステーブル２０１や、グローバルプロセステーブル３０１に格納する。このようにして、ＣＰＵ１１は、チェックポイント登録処理を行う（Ｓ１０２）。チェックポイントデータがグローバルチェックポイントデータ保持領域３０２に格納されたり、割振情報がグローバルプロセステーブル３０１に格納されたりすることによって、チェックポイントデータや、割振情報が計算機システムＺ１内の各ノード１で共有される。
プロセスａを割り振られたＧＰＧＰＵ２１ａは、プロセスａの実行を開始する（Ｓ１５１）。
【００３９】
同様に、ＣＰＵ１１は、プロセスｂをＧＰＧＰＵ２１へ割り振るべきか否かを判定し、割り振る場合、ＣＰＵ１１は、ＧＰＧＰＵ２１（ここでは、ＧＰＧＰＵ２１ｂ）へプロセスｂを割り振るプロセスｂの割振り処理を行う（Ｓ１１１）。また、ＣＰＵ１１はプロセスｂに関するチェックポイントを生成し、チェックポイント登録処理を行う（Ｓ１１２）。
プロセスｂを割り振られたＧＰＧＰＵ２１ｂは、プロセスｂの実行を開始する（Ｓ１６１）。
【００４０】
プロセスａの処理が終了すると（Ｓ１５２）、ＣＰＵ１１は、ＧＰＧＰＵ２１ａからプロセスａの返却値を受け取り、データの破損や欠落、エラー等が無いこと等を確認することで正当性を確認する（Ｓ１２１）。正当性の確認後、ＣＰＵ１１が、プロセスａのチェックポイント解除処理を行う（Ｓ１２２）。チェックポイント解除処理については後記して説明する。
【００４１】
同様に、プロセスｂの処理が終了すると（Ｓ１６２）、ＣＰＵ１１が、ＧＰＧＰＵ２１ｂからのプロセスｂの返却値を受け取り、データの破損や欠落、エラー等が無いことを確認し正当性を確認する（Ｓ１３１）。正当性の確認後、チェックポイント処理部１０２が、プロセスｂのチェックポイント解除処理を行う（Ｓ１３２）。
【００４２】
＜フローチャート＞
図７及び図８は、本実施形態に係るＧＰＧＰＵへのプロセス割振手順の詳細を示すフローチャートである。
まず、割振処理部１０１が、ＣＰＵ１１及びＧＰＧＰＵ２１でのプロセス４０１のスコアＳｉを算出する（図７のＳ２０１）。
このスコアＳｉは、例えば、以下の式（１）で算出される。
Ｓｉ＝ｔｍｉ＋ｓｉ  ・・・  （１）
ここで、ｉはＣＰＵ１１もしくはＧＰＧＰＵ２１を示す。そして、式（１）におけるｔｍｉ及びｓｉは以下の式（２）及び式（３）で定義される。
【００４３】
【数１】
0006495779.tif 000002
【００４４】
ここで、Ｃｉは、ＣＰＵ１１もしくはＧＰＧＰＵ２１でのプロセス４０１の計算試行回数であり、ｔｉは、１回のプロセス４０１の計算試行における計算時間である。
【００４５】
そして、割振処理部１０１は、算出したスコアを基に、処理対象となっているプロセス４０１をＧＰＧＰＵ２１に割り振るか否かを判定する（Ｓ２０２）。具体的には、割振処理部１０１は、ＣＰＵ１１及びＧＰＧＰＵ２１のうち、スコアの小さい方にプロセス４０１を割り振る。ちなみに、ステップＳ２０２では、処理対象となっているプロセス４０１をＣＰＵ１１に割り振るか、ＧＰＧＰＵ２１に割り振るかを決めており、どのＧＰＧＰＵ２１に割る振るかまでは決めていない。複数あるＧＰＧＰＵ２１のうち、どのＧＰＧＰＵ２１にプロセス４０１を割り振るかは、前記したように、図示しないスケジューラの指示等に基づいて行われる。
【００４６】
なお、ここでは、スコアを基にプロセス４０１の割り振りを決定しているが、スコアに限らなくてもよい。また、ステップＳ２０１，Ｓ２０２の処理は、図６のステップＳ１０１、Ｓ１１１の処理に相当する。
ステップＳ２０２の結果、ＧＰＧＰＵ２１に割り振らないと判定した場合（Ｓ２０２→Ｎｏ）、処理部１００は、自身で処理対象となっているプロセス４０１を実行し、計算を行う（Ｓ２１１）。
【００４７】
ステップＳ２０２の結果、ＧＰＧＰＵ２１に割り振ると判定した場合（Ｓ２０２→Ｙｅｓ）、チェックポイント処理部１０２はチェックポイントを生成し（Ｓ２２１）、生成したチェックポイントのデータ（チェックポイントデータ）及び割振情報をローカル領域２００に格納する（Ｓ２２２）。具体的には、チェックポイント処理部１０２は、チェックポイントデータをチェックポイントデータ保持領域２０２に格納し、割振情報をプロセステーブル２０１に格納する。
【００４８】
その後、チェックポイント処理部１０２は、当該チェックポイントデータ及び割振情報をグローバル領域３００に格納するか否かを判定する（Ｓ２２３）。どのチェックポイントデータ及び割振情報をグローバル領域３００に格納するか否かは、ユーザが任意に設定できる。例えば、実行されたすべてのプロセス４０１のチェックポイントデータ及び割振情報をグローバル領域３００に格納するようにしてもよいし、特定の種類のプロセス４０１についてチェックポイントデータ及び割振情報をグローバル領域３００に格納するようにしてもよい。このようにグローバル領域３００に格納する情報を選択可能とすることで、グローバル領域３００のリソースを節約することができる。
【００４９】
ステップＳ２２３の結果、グローバル領域３００に格納しない場合（Ｓ２２３→Ｎｏ）、処理部１００は、ステップＳ２３１へ処理を進める。
ステップＳ２２３の結果、グローバル領域３００に格納する場合（Ｓ２２３→Ｙｅｓ）、チェックポイント処理部１０２は、チェックポイントデータ及び割振情報をグローバル領域３００に格納する（Ｓ２２４）。具体的には、チェックポイント処理部１０２は、チェックポイントデータをグローバルチェックポイントデータ保持領域３０２に格納し、割振情報をグローバルプロセステーブル３０１に格納する。ステップＳ２２４の処理により、チェックポイントデータ及び割振情報が、計算機システムＺ１における各ノード１で共有される。
ステップＳ２２１〜Ｓ２２４の処理は、図６のステップＳ１０２，Ｓ１１２の処理に相当する。
【００５０】
そして、割振処理部１０１は、処理対象となるプロセス４０１をＧＰＧＰＵ２１へ割り振る（Ｓ２３１）。前記したように、プロセス４０１は図示しないスケジューラの指示に従って割り振られるが、適当な（例えば、ランダムに）ＧＰＧＰＵ２１に割り振られてもよいし、所定のルールに従って割り振られてもよい。ＧＰＧＰＵ２１は、並列処理が可能であるため、プロセス４０１を割り振られたＧＰＧＰＵ２１が別のプロセス４０１を実行中であっても構わない。
ステップＳ２３１は、図６のステップＳ１０１，Ｓ１１１に相当する処理である。このように、図６では、わかりやすくするため、プロセス４０１の割振処理の後に、チェックポイント登録処理が行われているが、実際には、図７に示すように、プロセス４０１の割振処理と、チェックポイント登録処理は、並行して行われる。
ＧＰＧＰＵ２１は、割り振られたプロセス４０１を実行し（図８のＳ２３３）、計算処理を行う（Ｓ２３４）。ステップＳ２３３，Ｓ２３４の処理は、図６のステップＳ１５１、Ｓ１６１の処理に相当する。ちなみに、図８において、破線枠の処理はＧＰＧＰＵ２１での処理を示している。同様に、実線枠の処理はＣＰＵ１１での処理を示している。
【００５１】
計算処理を終了したＧＰＧＰＵ２１は、返却値をＣＰＵ１１に返す（Ｓ２３５）。ステップＳ２３５は、図６のステップＳ１５２，Ｓ１６２に相当する処理である。
処理部１００は、返された返却値を取得し、返却値においてデータの欠損や、データの欠落、エラー等がないか否かといった正当性があるか否かを判定する（Ｓ２３６）。ステップＳ２３７の処理は、図６のステップＳ１２１、Ｓ１３１の処理に相当する。
【００５２】
ステップＳ２３６の結果、正当性がない場合（Ｓ２３６→Ｎｏ）、割振処理部１０１は、チェックポイントデータを取得し（Ｓ２３７）、割振処理部１０１は。取得したチェックポイントデータを基にＧＰＧＰＵ２１に再計算を行わせる。ＧＰＧＰＵ２１はステップＳ２３３へ処理を戻し、ＧＰＧＰＵ２１が再計算を行う。なお、ステップＳ２３７で割振処理部１０１は、チェックポイントデータを、ローカル領域２００から取得してもよいし、グローバル領域３００から取得してもよい。ＧＰＧＰＵ２１による再計算において、グローバル領域３００に格納されているチェックポイントデータを使用することで、ローカル領域２００に格納されているチェックポイントデータを使用して再計算を行う場合と同様、計算の信頼性を向上させることができる。なお、グローバル領域３００に格納されているチェックポイントデータを基にＧＰＧＰＵ２１に再計算を行わせることは、一般的なチェックポイントデータを基に再計算を行わせることと同様の処理であるため、ここでの詳細な説明を省略する。
ステップＳ２３６の結果、正当性がある場合（Ｓ２３６→Ｙｅｓ）、プロセステーブル２０１からレコードを削除し（Ｓ２４１）、チェックポイント処理部１０２が、チェックポイントデータ保持領域２０２に格納されているチェックポイントデータを削除する（Ｓ２４２）。
【００５３】
その後、チェックポイント処理部１０２は、処理対象となっているプロセス４０１に関するチェックポイントデータや、割振情報がグローバル領域３００にデータが保存されているか否かを判定する（Ｓ２４３）。処理対象となっているプロセス４０１に関するチェックポイントデータや、割振情報がグローバル領域３００にデータが保存されているか否かは、チェックポイント処理部１０２が、グローバルプロセステーブル３０１の「Ｐｒｏｃｅｓｓ  ＩＤ」の欄を参照すること判定される。
ステップＳ２４３の結果、グローバル領域３００にデータが保存されていない場合（Ｓ２４３→Ｎｏ）、処理部１００は処理を終了する。
ステップＳ２４３の結果、グローバル領域３００にデータが保存されている場合（Ｓ２４３→Ｙｅｓ）、チェックポイント処理部１０２は、グローバルプロセステーブル３０１における該当するレコードを削除し（Ｓ２４４）、グローバルチェックポイントデータ保持領域３０２に格納されているデータを削除し（Ｓ２４５）、処理を終了する。
ステップＳ２４１〜Ｓ２４５の処理は、図６のステップＳ１２２，Ｓ１３２の処理に相当する。
【００５４】
このように、プロセス４０１の終了後にローカル領域２００及びグローバル領域３００に格納されているチェックポイントデータを削除することで、ローカル領域２００及びグローバル領域３００のリソースを有効に使用することができる。
【００５５】
＜リカバリ処理の実際＞
図９は、本実施形態に係る計算機システムにおけるリカバリの手順を示すシーケンス図である。図９における各処理の詳細は後記して説明する。
ここでは、ノード１ｃが監視処理部１０４を実行している監視用ノードであり、ノード１ａが計算アプリケーションのプロセス４０１を実行している。ノード１ｂはノード１ａにノード単位の障害が発生したときに、プロセス４０１を代替実行するノード１である。なお、ここでは、１つのノード１に１つのＧＰＧＰＵ２１が備えられている例を示しているが、１つのノード１に複数のＧＰＧＰＵ２１が備えられていてもよい。
【００５６】
また、図９において、ノード１ａにおけるＣＰＵ１１をＣＰＵ１１Ａと称し、ノード１ｂにおけるＣＰＵ１１をＣＰＵ１１Ｂと称し、ノード１ｃにおけるＣＰＵ１１をＣＰＵ１１Ｃと称することとする。さらに、図９では、ノード１ａにおけるＧＰＧＰＵ２１をＧＰＧＰＵ２１Ａと称し、ノード１ｂにおけるＧＰＧＰＵ２１をＧＰＧＰＵ２１Ｂと称し、ノード１ｃにおけるＧＰＧＰＵ２１をＧＰＧＰＵ２１Ｃと称することとする。
【００５７】
まず、ノード１ａのＣＰＵ１１Ａは、プロセスａをＧＰＧＰＵ２１へ割り振るべきか否かを判定し、割り振る場合、ＣＰＵ１１Ａは、ノード１ａのＧＰＧＰＵ２１へプロセスａを割り振るプロセスａの割振処理を行う（Ｓ３０１）。また、ＣＰＵ１１Ａはプロセスａに関するチェックポイントを生成し、生成したチェックポイントデータをチェックポイントデータ保持領域２０２や、グローバルチェックポイントデータ保持領域３０２に格納する。また、ＣＰＵ１１Ａは、該ＧＰＧＰＵ２１への割振情報をプロセステーブル２０１や、グローバルプロセステーブル３０１に格納する。このようにして、ＣＰＵ１１Ａは、チェックポイント登録処理を行う（Ｓ３０２）。チェックポイント登録処理によって、チェックポイントデータ及び割振情報がノード１ｂ及びノード１ｃに共有される（Ｓ３０３）。
プロセスａを割り振られたＧＰＧＰＵ２１Ａは、プロセスａの実行を開始する（Ｓ３１１）。
なお、ステップＳ３０１，Ｓ３０２，Ｓ３０３，Ｓ３１１は、図６のステップＳ１０１、Ｓ１０２，Ｓ１１１，Ｓ１１２，Ｓ１５１，Ｓ１６１と同様の処理であるので、ここでの説明を省略する。
【００５８】
ここで、プロセスａの実行中にノード１ａに障害が発生する（Ｓ３２１）と、ノード１ｃのＣＰＵ１１Ｃで実行されている監視処理部１０４（図２参照）が、プロセス４０１を代替実行するノード１としてノード１ｂにプロセスａの起動を指示する（Ｓ３２２）。なお、プロセス４０１の代替実行を行うノード１の選定は、各ノード１で実行されている、図示しないスケジューラの指示に基づいて行われる。
ノード１ｂのＣＰＵ１１Ｂは、ＧＰＧＰＵ２１Ｂにおいてプロセスａを起動する（Ｓ３３１）。ＣＰＵ１１Ｂは、一般的に行われているコンテキストスイッチの手法でプロセスａを起動（再開）するが、この際、グローバルチェックポイントデータ保持領域３０２に格納されているチェックポイントデータを参照し、ＧＰＧＰＵ２１Ｂに該チェックポイントに基づいてプロセスａを開始させる（Ｓ３４１）。
【００５９】
その後、プロセスａが終了する（Ｓ３４２）と、ノード１ｂのＣＰＵ１１Ｂが、ＧＰＧＰＵ２１Ｂから送られた返却値を基に正当性確認処理を行い（Ｓ３３２）、ローカル領域２００及びグローバル領域３００におけるチェックポイントデータを解除するチェックポイント解除処理を行う（Ｓ３３３）。
ステップＳ３３２，Ｓ３３３，Ｓ３４２の処理は、図６のステップＳ１２１，Ｓ１２２，Ｓ１５２，Ｓ１３１，Ｓ１３２，Ｓ１６２と同様の処理であるので、ここでの説明を省略する。
その後、ノード１ｂのＣＰＵ１１Ｂは、新たなプロセス４０１をＧＰＧＰＵ２１Ｂに実行させる等する。
【００６０】
このように監視専用のノード１を設置することで、監視専用のノード１以外のノード１が監視処理部１０４を実行させる必要がなくなるので、監視専用のノード１以外のノード１の処理負担を軽減させることができる。
【００６１】
＜障害検知・リカバリ処理＞
図１０は、本実施形態に係る障害検知・リカバリ処理の詳細な手順を示すフローチャートである。なお、図１０において、一点鎖線で枠が示されている処理はノードｃで行われている処理を示し、実線で枠が示されている処理はノード１ｂのＣＰＵ１１で行われている処理を示し、破線で枠が示されている処理はノード１ｂのＧＰＧＰＵ２１で行われている処理を示す。
【００６２】
まず、ノード１ｃの監視処理部１０４がノード１ａにおける障害を検知したか否かを判定する（Ｓ４０１）。ノード１ａの障害は、各ノード１から発せられているハートビート等を基に判定される。
ステップＳ４０１の結果、障害が検知されていない場合（Ｓ４０１→Ｎｏ）、監視処理部１０４は、ステップＳ４０１へ処理を戻す。
ステップＳ４０１の結果、障害が検知されると（Ｓ４０１→Ｙｅｓ)、監視処理部１０４は、ノード１ｂにノード１ａで実行されていたプロセス４０１の起動を指示する（Ｓ４０２）。監視処理部１０４は、各ノード１で実行されている、図示しないスケジューラの指示等に基づいて、プロセスを代替実行するノードを決定する。ステップＳ４０１，Ｓ４０２の処理は、図９のステップＳ３２２に相当する処理である。
【００６３】
ノード１ｂのチェックポイント処理部１０２は、グローバル領域３００を参照し、チェックポイントデータを取得する（Ｓ４１１）。
その後、リカバリ処理部１０３は、実行するプロセス４０１の「Ｐｒｏｃｅｓｓ  ＩＤ」をキーとしてグローバルプロセステーブル３０１を参照する。そして、リカバリ処理部１０３は、処理対象となっているプロセス４０１が、障害が発生したノード１ａにおけるＧＰＧＰＵ２１で実行されていたことを確認すると、取得したチェックポイントデータを基に、ＧＰＧＰＵ２１にプロセス４０１を割り振り（Ｓ４１２）、実行させる（Ｓ４１３）。すなわち、ノード１ｂのリカバリ処理部１０３は、プロセスＩＤをキーとして、グローバルプロセスデータ３０１の「ＧＰＧＰＵ  ＩＤ」の欄を参照し、障害が発生したノード１ａにおいて、処理対象となっているプロセス４０１がＧＰＧＰＵ２１で実行されているのを確認する。そして、ノード１ｂのリカバリ処理部１０３は、障害が発生したノード１ａにおいて、処理対象となっているプロセス４０１がＧＰＧＰＵ２１で実行されていたことから、自身においてもＧＰＧＰＵ２１で処理対象となっているプロセス４０１を実行する。このようにすることで、図７のステップＳ２０１で行っていたスコアの算出を再度行う必要がなくなり、処理時間を短縮することができる。
また、このようにすることで、障害が発生したノード１におけるＧＰＧＰＵ用メモリ２２の内容を移行する必要がなくなるので、移行に要する処理コストを低減することができる。
また、リカバリ処理部１０３は、グローバルチェックポイントデータ保持領域３０２に格納されている、再開するプロセス４０１に関するチェックポイントデータを、自身のチェックポイントデータ保持領域２０２にコピーする。また、リカバリ処理部１０３は、該プロセス４０１の割振情報を、グローバルプロセステーブル３０１から、再開するプロセス４０１に関する割振情報をプロセステーブル２０１にコピーする。
【００６４】
なお、ノード１ｂがプロセス４０１を実行（再開）する手順は、前記したように、一般的なコンテキストスイッチの手法において、コンテキストの保存領域の代わりにグローバル領域３００を参照することで行われる。すなわち、一般的なコンテキストスイッチのためのデータの読み込み元をグローバルチェックポイントデータ保持領域３０２にすることで、本実施形態の効果を得ることができる。つまり、一般的なコンテキストスイッチのためのプログラムを利用することができる。
【００６５】
また、前記したように、リカバリ処理部１０３は、再開対象となっているプロセス４０１を、適当なＧＰＧＰＵ２１もしくは所定のルールに基づいてＧＰＧＰＵ２１に割り振る。
ここで、ステップＳ４１１，Ｓ４１２の処理が図９のステップＳ３３１の処理に相当し、ステップＳ４２１の処理が図９のステップＳ３４１の処理に相当する。
【００６６】
なお、本実施形態では、ノード１ｃのみが監視処理部１０４を実行しているが、ノード１ａ〜１ｃのそれぞれが監視処理部１０４を実行していてもよい。例えば、ノード１ａに障害が発生したことを、ノード１ｂ及びノード１ｃが検知すると、ノード１ｂ及びノード１ｃは図示しないスケジューラの指示に従ってプロセス４０１を実行する。すなわち、図１０におけるステップＳ４０２の処理が、スケジューラからの指示に変更されること以外は、図１０における処理を同様の処理が行われる。ここで、スケジューラは、各ノード１で実行されているものであり、各ノード１間で同期をとりつつ、プロセス４０１の実行管理を行っているものである。
このように、監視処理部１０４を分散して実行させることで、ノード１の障害検知の精度を向上させることができる。
【００６７】
本実施形態によれば、ＣＰＵ１１や、ＧＰＧＰＵ２１等の異なるプロセッサを有しているノード１で構成される計算機システムＺ１において、すべてのノード１間で、チェックポイントデータを共有して保持することで、計算機システムＺ１内のノード１に障害が発生しても、チェックポイントデータを基に、他のノード１でプロセス４０１を再開することができるので、ノード１の障害に対する計算機システムＺ１の信頼性を向上させることができる。
【００６８】
なお、本実施形態では、ローカル領域２００及びグローバル領域３００において、ＧＰＧＰＵ２１が実行しているプロセス４０１に関する情報が格納されているとしているが、ＣＰＵ１１が実行しているプロセスに関する情報が格納されてもよい。
【符号の説明】
【００６９】
１，１ａ〜１ｃ  ノード（演算装置）
２      ネットワーク
１１    ＣＰＵ（演算部）
１２    ＣＰＵ用メモリ
２１，２１ａ〜２１ｃ  ＧＰＧＰＵ（演算部）
２２，２２ａ〜２２ｃ  ＧＰＧＰＵ用メモリ
１００  処理部
１０１  割振処理部
１０２  チェックポイント処理部
１０３  リカバリ処理部
１０４  監視処理部
２００  ローカル処理部
２０１  プロセステーブル
２０２  チェックポイントデータ保持領域
３００  グローバル領域
３０１  グローバルプロセステーブル
３０２  グローバルチェックポイントデータ保持領域（記憶部）
４０１，４０１ａ〜４０１ｃ  プロセス（演算処理）
Ｚ１    計算機システム
【図１】
0006495779.tif 000003
【図２】
0006495779.tif 000004
【図３】
0006495779.tif 000005
【図４】
0006495779.tif 000006
【図５】
0006495779.tif 000007
【図６】
0006495779.tif 000008
【図７】
0006495779.tif 000009
【図８】
0006495779.tif 000010
【図９】
0006495779.tif 000011
【図１０】
0006495779.tif 000012