(57)【要約】【課題】同期処理に伴うシステム全体の処理遅延を低減することができる、分散同期処理システムおよび分散同期処理方法を提供する。【解決手段】分散同期処理システム１の処理サーバ３０は、分散処理部２０による所定の計算ステップにおける計算・送信処理の完了を検出して、完了報告を管理サーバ１０に送信するとともに、管理サーバ１０から次ステップ移行指示を受信して分散処理部２０に出力する分散処理管理部（バーテックス管理部３３）を備える。管理サーバ１０は、完了報告を受信し、次の計算ステップにおいて必要な計算結果の取得が完了しているか否かを判定し、取得が完了しているときに次ステップ移行指示を処理サーバ３０に送信する隣接同期処理部１１を備える。【選択図】図９
2018032344.tif 000002
【特許請求の範囲】
【請求項１】
並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、対象とする計算処理に必要な複数の前記分散処理部を複数の前記処理サーバに対して割り当てる管理サーバと、を有する分散同期処理システムであって、
前記処理サーバは、
前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、前記計算・送信処理の完了を示す完了報告を生成して、前記管理サーバに送信するとともに、
前記管理サーバから次の前記計算ステップへの移行の指示である次ステップ移行指示を受信し、前記計算・送信処理を完了した分散処理部に出力する分散処理管理部を備え、
前記管理サーバは、
前記完了報告を受信し、前記計算・送信処理を完了した分散処理部が、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを前記計算結果の入力元として接続された分散処理部からの完了報告を受信しているか否かに基づき判定し、前記計算結果の取得が完了しているときに、前記次ステップ移行指示を前記完了報告を送信してきた処理サーバに送信する隣接同期処理部を備えること
を特徴とする分散同期処理システム。
【請求項２】
並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、を有する分散同期処理システムであって、
前記処理サーバは、
前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、
前記計算・送信処理を完了した分散処理部が、計算結果の入力元として接続された分散処理部から、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを判定し、前記計算結果の取得が完了しているときに、次の前記計算ステップへの移行の指示である次ステップ移行指示を、前記計算・送信処理を完了した分散処理部に出力する隣接同期分散管理部を備えること
を特徴とする分散同期処理システム。
【請求項３】
並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、対象とする計算処理に必要な複数の前記分散処理部を複数の前記処理サーバに対して割り当てる管理サーバと、を有する分散同期処理システムの分散同期処理方法であって、
前記処理サーバは、
前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、前記計算・送信処理の完了を示す完了報告を生成して、前記管理サーバに送信する手順と、
前記管理サーバから次の前記計算ステップへの移行の指示である次ステップ移行指示を受信し、前記計算・送信処理を完了した分散処理部に出力する手順と、を実行し、
前記管理サーバは、
前記完了報告を受信し、前記計算・送信処理を完了した分散処理部が、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを前記計算結果の入力元として接続された分散処理部からの完了報告を受信しているか否かに基づき判定し、前記計算結果の取得が完了しているときに、前記次ステップ移行指示を前記完了報告を送信してきた処理サーバに送信する手順を実行すること
を特徴とする分散同期処理方法。
【請求項４】
並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、を有する分散同期処理システムの分散同期処理方法であって、
前記処理サーバは、
前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出する手順と、
前記計算・送信処理を完了した分散処理部が、計算結果の入力元として接続された分散処理部から、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを判定し、前記計算結果の取得が完了しているときに、次の前記計算ステップへの移行の指示である次ステップ移行指示を、前記計算・送信処理を完了した分散処理部に出力する手順と、を実行すること
を特徴とする分散同期処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散配置された複数のサーバを同期させて処理を実行する分散同期処理システムおよび分散同期処理方法に関する。
【背景技術】
【０００２】
ネットワーク上に複数のサーバを分散配置する分散処理システムのフレームワークとして、非特許文献１にはＭａｐＲｅｄｕｃｅが開示されている。但し、このＭａｐＲｅｄｕｃｅは、処理の度に、外部のデータストアからの入力データの読み込みや、結果の書き出し処理が必要であるため、ある処理の結果を次の処理で利用するようなイテレーティブな（反復する）処理には向いていない。この種の処理には、非特許文献２に開示されているＢＳＰ（Bulk Synchronous Parallel：バルク同期並列）が適している。
【０００３】
このＢＳＰは、「スーパーステップ（ＳＳ：superstep)」という処理単位を繰り返し実行することにより、分散環境でのデータ処理を実行する。図１は、ＢＳＰ計算モデルを説明するための図である。
【０００４】
１つのスーパーステップは、図１に示すように、次の３つのフェーズ（ＰＨ：phase）、「ローカル計算（ＬＣ：Local computation）」（フェーズＰＨ１）、「データ交換（Ｃｏｍ：Communication）」（フェーズＰＨ２）、「同期（Sync）」（フェーズＰＨ３）から構成される。
具体的には、複数のノード（ノード１〜ノード４）のうちのいずれかのノードがデータを受信すると、そのノード（例えば、ノード１）がフェーズＰＨ１において、そのデータについての計算処理（ローカル計算（ＬＣ））を実行する。続いて、フェーズＰＨ２において、各ノードが保持しているローカル計算の結果であるデータについて、ノード間でのデータ交換を実行する。次に、フェーズＰＨ３において、同期処理を行う、より詳細には、すべてのノード間でのデータ交換の終了を待つ。
そして、スーパーステップＳＳ１として、一連のスーパーステップの処理（ＰＨ１〜ＰＨ３）が終了すると、各ノードはその計算結果を保持した上で、次の一連の処理であるスーパーステップＳＳ２へと進む。
【０００５】
このＢＳＰを採用した分散処理フレームワークとして、非特許文献３にはＰｒｅｇｅｌが開示されている。このＰｒｅｇｅｌ等のフレームワークでは、全体の処理をグラフＧ＝（Ｖ，Ｅ）として表現し、これをＢＳＰに適用して実行する。ここで、Ｖは「バーテックス（vertex：頂点）の集合」であり、Ｅは「エッジ（edge：辺）の集合」を意味する。
【０００６】
ここで、図２を参照し、交通シミュレーションにＢＳＰを適用した例を説明する。
図２においては、各交差点（ｖ）がバーテックス（vertex）に対応付けられる（図２のｖ１〜ｖ４）。また、各交差点を結ぶ道路（ｅ）がエッジ（edge）に対応付けられる（図２のｅ１〜ｅ６）。ここで、エッジ（edge）は一方通行であり、双方向の道路は２つのエッジに対応付けられる。また、あるバーテックス（vertex）から見て、車両が出てゆく方向のエッジを、「出力エッジ（outgoing edge）」と呼び、車両が流入する方向のエッジを「入力エッジ（incoming edge）」と呼ぶ。例えば、図２において、バーテックスｖ２からみると、エッジｅ１は入力エッジであり、エッジｅ２は出力エッジになる。逆に、バーテックスｖ１からみると、エッジｅ１は出力エッジであり、エッジｅ２は入力エッジになる。
【０００７】
図１で示したスーパーステップでは、フェーズＰＨ１（ローカル計算）において、バーテックス（vertex）毎に、経過時間（Δｔ）における、各バーテックスｖ１〜ｖ４に対応付けられている交差点の状態（例えば、信号の色（青、黄、赤）や交差点内の車両の動き等）と、それに付随する出力エッジとしての道路内の状態（車両の動き（台数・平均速度等））とをシミュレートする。フェーズＰＨ２（データ交換）では、あるバーテックスは、出力エッジを介して接する他のバーテックスに対して、当該出力エッジを介して出てゆく車両の動きの情報（台数等）を送信するとともに、入力エッジを介して入ってくる車両の動きの情報（台数等）を受信する。フェーズＰＨ３（同期）では、バーテックス間で、シミュレーション時刻ｔを同期する。つまり、全てのバーテックス間でデータ交換の完了を待つ。
この交通シミュレーションにおいては、このように交差点（バーテックス）単位で、並列処理することにより、計算時間を短縮することが可能となる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】Dean, J., et al., “MapReduce: Simplified Data Processing on Large Clusters,” OSDI '04, 2004, p.137-149.
【非特許文献２】Valiant, L., et al., “A bridging model for parallel computation,” Communications of the ACM, 1990, vol.33, No.8, p.103-111.
【非特許文献３】Malewicz, G., et al., “Pregel: A System for Large-Scale Graph Processing,” Proc. of ACM SIGMOD, 2010, p.136-145.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記のような、ＢＳＰを採用した分散処理フレームワークを実現するためのアーキテクチャとして、master／worker構成が採用されている。図３に示すように、master／worker構成は、処理単位となるバーテックス２０ａを複数備えるworker（処理サーバ３０ａ）が複数台と、workerの処理について進行状況の管理等を行うmaster（管理サーバ１０ａ）１台とで、構成される。
【００１０】
ここで、master（管理サーバ１０ａ）の役割は、worker（処理サーバ３０ａ）への処理（バーテックス２０ａ）の割り振り（グラフＧのパーティショニング）、workerの処理の進行状況の管理、全workerに共通となる全体としてのスーパーステップの管理、バーテックスやエッジの追加や削除に伴うグラフトポロジの管理等である。
また、worker（処理サーバ３０ａ）の役割は、各スーパーステップにおけるフェーズＰＨ１のローカル計算、フェーズＰＨ２における、隣接するバーテックスとの間のデータの送受信、masterへの報告である。
【００１１】
既存のフレームワークにおけるアーキテクチャの多くは、このmaster／worker構成を採用しており、ＢＳＰが適用されるときには、workerは、自身が備える全てのバーテックスの処理（フェーズＰＨ１，２）が完了すると、masterに報告する。masterは、全workerからの報告を受けると、スーパーステップを「＋１」し、次のスーパーステップに移行するように、各workerに指示を出すこととなる。
【００１２】
しかしながら、上記の構成では、スーパーステップ毎に、全バーテックスを同期するため、最も処理が遅いバーテックスにあわせることとなる。よって、たった一つでも全体から著しく遅いバーテックスがあると、その影響が全体に及ぶ。つまり、最も処理が遅いバーテックスにあわせて、全体が著しく遅延してしまう。
また、大規模なグラフＧを処理対象とする場合、つまり、多数のバーテックスとエッジを備えた計算対象を扱うときには、master／worker構成では、一つのmasterでグラフ全体を管理するため、グラフＧの規模が大きいと、masterがボトルネックとなってしまう。
【００１３】
そこで、本発明では、前記した問題を解決し、同期処理に伴うシステム全体の処理遅延を低減することができる、分散同期処理システムおよび分散同期処理方法を提供することを課題とする。
【課題を解決するための手段】
【００１４】
前記した課題を解決するため、請求項１に記載の発明は、並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、対象とする計算処理に必要な複数の前記分散処理部を複数の前記処理サーバに対して割り当てる管理サーバと、を有する分散同期処理システムであって、前記処理サーバが、前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、前記計算・送信処理の完了を示す完了報告を生成して、前記管理サーバに送信するとともに、前記管理サーバから次の前記計算ステップへの移行の指示である次ステップ移行指示を受信し、前記計算・送信処理を完了した分散処理部に出力する分散処理管理部を備え、前記管理サーバが、前記完了報告を受信し、前記計算・送信処理を完了した分散処理部が、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを前記計算結果の入力元として接続された分散処理部からの完了報告を受信しているか否かに基づき判定し、前記計算結果の取得が完了しているときに、前記次ステップ移行指示を前記完了報告を送信してきた処理サーバに送信する隣接同期処理部を備えることを特徴とする分散同期処理システムとした。
【００１５】
また、請求項３に記載の発明は、並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、対象とする計算処理に必要な複数の前記分散処理部を複数の前記処理サーバに対して割り当てる管理サーバと、を有する分散同期処理システムの分散同期処理方法であって、前記処理サーバが、前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、前記計算・送信処理の完了を示す完了報告を生成して、前記管理サーバに送信する手順と、前記管理サーバから次の前記計算ステップへの移行の指示である次ステップ移行指示を受信し、前記計算・送信処理を完了した分散処理部に出力する手順と、を実行し、前記管理サーバが、前記完了報告を受信し、前記計算・送信処理を完了した分散処理部が、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを前記計算結果の入力元として接続された分散処理部からの完了報告を受信しているか否かに基づき判定し、前記計算結果の取得が完了しているときに、前記次ステップ移行指示を前記完了報告を送信してきた処理サーバに送信する手順を実行することを特徴とする分散同期処理方法とした。
【００１６】
このように、分散同期処理システムは、管理サーバが、分散処理部ごとに、次の計算ステップに移行してよいのかを判定することができる。よって、全ての分散処理部の計算・送信処理の終了まで待機する必要がないため、同期処理に伴うシステム全体の処理遅延を低減することができる。
【００１７】
請求項２に記載の発明は、並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、を有する分散同期処理システムであって、前記処理サーバが、前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出し、前記計算・送信処理を完了した分散処理部が、計算結果の入力元として接続された分散処理部から、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを判定し、前記計算結果の取得が完了しているときに、次の前記計算ステップへの移行の指示である次ステップ移行指示を、前記計算・送信処理を完了した分散処理部に出力する隣接同期分散管理部を備えることを特徴とする分散同期処理システムとした。
【００１８】
また、請求項４に記載の発明は、並列に処理を行う複数の処理サーバと、前記処理サーバ上で動作する複数の分散処理部と、を有する分散同期処理システムの分散同期処理方法であって、前記処理サーバが、前記分散処理部による所定の計算ステップにおける、計算処理および計算結果の出力先として接続された分散処理部への送信処理を示す計算・送信処理の完了を検出する手順と、前記計算・送信処理を完了した分散処理部が、計算結果の入力元として接続された分散処理部から、次の前記計算ステップにおいて必要な計算結果の取得が完了しているか否かを判定し、前記計算結果の取得が完了しているときに、次の前記計算ステップへの移行の指示である次ステップ移行指示を、前記計算・送信処理を完了した分散処理部に出力する手順と、を実行することを特徴とする分散同期処理方法とした。
【００１９】
このように、分散同期処理システムは、処理サーバが、分散処理部ごとに、次の計算ステップに移行してよいのかを判定することができる。よって、全ての分散処理部の計算・送信処理の終了まで待機する必要がないため、同期処理に伴うシステム全体の処理遅延を低減することができる。
さらに、各処理サーバが自律分散的に、次の計算ステップへの移行を判定するため、処理サーバおよび分散処理部が多数となる大規模なシステムであっても、システム全体の処理遅延を低減することが可能となる。
【発明の効果】
【００２０】
本発明によれば、同期処理に伴うシステム全体の処理遅延を低減する、分散同期処理システムおよび分散同期処理方法を提供することができる。
【図面の簡単な説明】
【００２１】
【図１】ＢＳＰ計算モデルを説明するための図である。
【図２】交通シミュレーションにＢＳＰ計算モデルを適用した例を説明するための図である。
【図３】比較例に係る分散同期処理システムのmaster／worker構成を説明するための図である。
【図４】バーテックスの構成要素の定義を説明するための図である。
【図５】１つのバーテックスの構成要素を例示する図である。
【図６】ＢＳＰ計算モデルにおける計算対象のグラフを例示する図である。
【図７】比較例の分散同期処理システムにおける処理の流れを説明するための図である。
【図８】比較例に係る分散同期処理システムの処理の流れ（図８（ａ））と、本実施形態に係る分散同期処理システムの処理の流れ（図８（ｂ））とを、説明するための図である。
【図９】本実施形態に係る分散同期処理システムの全体構成を示す図である。
【図１０】本実施形態に係る分散同期処理システムの処理の流れを示すシーケンス図である。
【図１１】本実施形態の変形例に係る分散同期処理システムの全体構成を示す図である。
【図１２】本実施形態の変形例に係る分散同期処理システムの処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２２】
＜比較例の分散処理手法の内容と課題の詳細な説明＞
初めに、本実施形態に係る分散同期処理システム１および分散同期処理方法の特徴構成を説明するため、比較例として従来技術における分散同期処理システム１ａおよび分散同期処理方法を、詳細に説明する。
【００２３】
比較例の分散同期処理システム１ａは、図３に示したような、master／worker構成を採用し、複数のworkerそれぞれが、複数のバーテックス（vertex）を備える。そして、このmaster／worker構成にＢＳＰを適用するとき、各workerは、自身が備える全てのバーテックスの処理（フェーズＰＨ１，２）が完了するとmasterに報告し、masterは、全workerからの報告を受けると、スーパーステップを次のスーパーステップに移行する。
【００２４】
ここで、バーテックスに着目すると、各バーテックスは、次に示す処理を実行する。
バーテックスは、ＢＳＰのフェーズＰＨ１において、現在のバーテックスの状態、出力エッジの状態、および、前スーパーステップ（以下、単に「ステップ」と称することがある。）の入力メッセージにより取得した情報（入力エッジの状態）をパラメータとして計算を行い、バーテックスの状態および出力エッジの状態を更新する。そして、バーテックスは、フェーズＰＨ２において、更新した出力エッジの状態を出力メッセージとして、その出力エッジに隣接するバーテックスに送信する。なお、この「出力エッジに隣接するバーテックス」は、「計算結果の出力先として接続されたバーテックス」を意味する。
【００２５】
上記の処理（計算・送信処理）は、次の式（１）として表わすことができる。
ｆ（ｖvid,n，Ｅout,n，Ｍin,n-1）＝（ｖvid,n+1，Ｅout,n+1，Ｍout,n）  ・・・式（１）
ここで、バーテックスの各構成要素の定義について、図４に示す。
【００２６】
図４に示すように、「vid」は、「vertex ID」を示す。「ｖvid,n」は、「バーテックスの状態」を示す。「ｎ」は、現在のステップ（スーパーステップ）を示す。「Ｅout,n」は、出力エッジの状態の集合を示す。「Ｍin,n」は、入力エッジの状態を示す入力メッセージのバッファに記憶される情報（現在のステップ用）を示す。「Ｍin,n-1」は、入力メッセージのバッファに記憶される情報（１つ前のステップ用）を示す。「ｓn」は、現在のステップの「状態フラグ（active／inactive）」を示す。「ｓn+1」は、次のステップの「状態フラグ（active／inactive）」を示す。ｆ（ｖvid,n，Ｅout,n，Ｍin,n-1）＝（ｖvid,n+1，Ｅout,n+1，Ｍout,n）は、式（１）において示したように、計算・送信処理を示す。ここで、以降、ステップ（スーパーステップ）ｎにおける計算・送信処理を、「計算・送信処理ｆｎ」と記載する。
なお、「ｓn」の状態フラグは、そのバーテックスがＢＳＰのフェーズ１，２の処理を実行している間は、「active」の状態とし、フェーズＰＨ３の同期処理で他のバーテックスの処理待ち状態であるときに、「inactive」の状態とする。また、「ｓn+1」は、次のステップの処理に移行する設定の場合に「active」の状態とし、シミュレーション処理の設定時間が終了したこと等により、次のステップにおいて処理を実行しない設定の場合に、「inactive」の状態とする。
【００２７】
図５は、１つのバーテックスに注目した場合の構成要素を例示する図である。
図５に示すように、現在のステップ「ｎ」における「vertex ID」が「１」のバーテックス「１」は、ステップ「ｎ」おけるバーテックスの状態「ｖ1,n」を保持する。また、バーテックス「１」は、出力エッジの状態として、「ｅ1,3,n」をバーテックス「３」に出力し、「ｅ1,4,n」をバーテックス「４」に出力する。そして、バーテックス「１」は、入力メッセージの情報（入力エッジの状態）として、バーテックス「２」から「ｍ2,1,n」を受信し、バーテックス「３」から「ｍ3,1,n」を受信する。
【００２８】
worker（図３参照）は、自身が備えるバーテックス毎に、現在のステップ（スーパーステップ）の状態フラグ（active／inactive）と次のステップ（スーパーステップ）の状態フラグ（active／inactive）を管理する。また、workerは、自身に属するバーテックスから、他のworkerに属するバーテックスに出力エッジの状態を出力メッセージとして送信するときには、同じworkerに属するバーテックスへのメッセージをバッファリングすることにより、まとめて送信するようにしてもよい。このようにすることで、通信コストを削減することができる。
【００２９】
次に、図７を参照して、比較例の分散同期処理システム１ａが実行する処理の流れについて説明する。なお、ここでは、グラフＧの計算対象が、図６に示すグラフトポロジであるものとして説明する。また、図７に示すように、１台のmasterと２台のworker（worker１，worker２）で構成され、バーテックスｖ１〜ｖ６のうち、バーテックスｖ１〜ｖ３をworker１が担当し、バーテックスｖ４〜ｖ６をworker２が担当するものとする。以下、全体の処理の流れを通して説明する。
【００３０】
まず、masterは、図６に示すグラフＧの各バーテックス（バーテックスｖ１〜ｖ６）を、処理対象として設定しworkerに割り振る（ステップＳ１０１）、つまり、グラフＧのパーティショニングを実行する。
ここでは、図６に示すように、バーテックスｖ１〜ｖ６のうち、バーテックスｖ１〜ｖ３をworker１に割り振り、バーテックスｖ４〜ｖ６をworker２に割り振るものとする。
【００３１】
続いて、各worker（worker１，worker２）は、担当するバーテックスのスーパーステップを実行する（ステップＳ１０２）。具体的には、フェーズＰＨ１のローカル計算を実行し、スーパーステップの処理を開始する。
【００３２】
次に、各workerは、自身が担当するバーテックスの処理の進行を監視し、各バーテックスが、フェーズＰＨ２のデータ交換まで完了したか否かを判定する。そして、各workerは、担当する全てのバーテックスが、フェーズＰＨ２までの処理を完了したと確認した場合に、各バーテックスの次のスーパーステップにおける状態フラグをmasterに報告（送信）する（ステップＳ１０３）。ここで、workerは、各バーテックスの次のスーパーステップにおける状態フラグとして「active」（次のスーパーステップの処理に移行する設定であること）を報告する。
【００３３】
そして、masterは、全てのworker（worker１，worker２）から、処理の完了を示す状態フラグの報告を受けたか否かを確認する。masterは、全てのworkerから報告を受けた場合に、スーパーステップを「＋１」に更新する（ステップＳ１０４）。
ここで、masterは、グラフトポロジに変更がある場合、例えば、バーテックスやエッジの追加や削除がある場合には、そのグラフトポロジの変更を、各workerに通知する。
【００３４】
続いて、masterは、全てのworker（worker１，worker２）に対して、次にスーパーステップに移行するように指示する（ステップＳ１０５）。そして、各workerは、ステップＳ１０２〜Ｓ１０５を繰り返す。
【００３５】
比較例の分散同期処理システム１ａにおいては、スーパーステップ毎に、計算対象となる全てのバーテックスを同期する、具体的には、図７に示す全体同期ポイントにおいて同期するため、最も遅いバーテックスにあわせることとなる。例えば、図７のスーパーステップＳＳ１では、バーテックスｖ１〜ｖ６のうち、最も遅いバーテックスｖ２にあわせることとなる。また、スーパーステップＳＳ２では、最も遅いバーテックスｖ６にあわせることとなる。よって、著しく遅いバーテックスがあると、そのバーテックスにあわせるために、バーテックスの処理全体が著しく遅延してしまう。
また、master／worker構成では、一つのmasterで全体を管理することになるため、グラフＧの規模が大きくなった場合、つまり、バーテックスの数やworkerの数が多くなるときに、masterがボトルネックとなる。
【００３６】
上記した全体としての処理速度の遅延や、フェーズＰＨ３において処理をせず同期待ちが多いこと（処理の効率性）の問題（以下、「処理速度／効率性」の問題と称する。）を解決するために、非同期型の分散処理フレームワークが提案されている（例えば、非特許文献４参照）。
ここで、非特許文献４は、「Low, Y., et al., “Distributed GraphLab”, Proc. of the VLDB Endowment, 2012.」である。
【００３７】
しかしながら、非特許文献４に記載の非同期型の分散処理フレームワークでは、処理速度／効率性と計算精度がトレードオフの関係になるため、処理を設計する際におけるプログラマの負担（プラグラムの複雑性）が増大してしまう。
具体的には、非同期型では、各バーテックスによって、同じスーパーステップを実行していることが保証されないため、プログラマが、バーテックス間の処理の追い越しや上書きの考慮が必要となる。追い越されたイテレーション（反復処理）は、無効になってしまうため、精度の低下をまねくこととなる。また、スーパーステップの追い越し数が無制限に増えることにより、精度の理論的保証が困難になってしまう。
【００３８】
本実施形態に係る分散同期処理システム１（図９参照）および分散同期処理方法では、これらの問題に対し、同期型で、プログラマに優しい（つまり、処理の追い越しや上書きの考慮が不要となる）シンプルなフレームワークを提供しつつ、同期型で問題であった処理速度／効率性を改善することを課題とする。
さらに、masterのボトルネック化を回避し、大規模なグラフＧでも処理速度／効率性を担保することを課題とする。
【００３９】
なお、本来masterが実行するグラフトロポジの管理のうち、「要素（バーテックスおよびエッジ）の動的な追加」については、システムとして構成の変更等が必要となるため、本発明の適用対象外とし、「要素の動的な追加」の必要がないケースを本発明の対象とする。
【００４０】
＜本実施形態の概要＞
次に、本実施形態に係る分散同期処理システム１が実行する処理の概要について説明する。
本実施形態に係る分散同期処理システム１（後記する図９）では、master（後記する「管理サーバ１０」）による全バーテックス（後記する「分散処理部２０」）での同期処理を行わず、バーテックス毎に次のスーパーステップへの移行を判断することを特徴とする。これにより、分散同期処理システム１は、著しく処理の遅いバーテックスの影響を低減する。
【００４１】
具体的には、分散同期処理システム１において、次のスーパーステップへの移行条件を「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」と設定する。なお、「入力エッジで接する全てのバーテックス」は、計算結果の入力元として接続された全てのバーテックス」を意味する。以下、この「次のスーパーステップへの移行条件」を「隣接同期」と称する。この隣接同期の詳細を、図８を参照して説明する。
【００４２】
図８は、図７において示した比較例の分散同期処理システム１ａが実行する処理（図８（ａ）参照）と、本実施形態に係る分散同期処理システム１が実行する処理（図８（ｂ）参照）とを示す図である。
本実施形態に係る分散同期処理システム１では、上記のように、「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」（「隣接同期」）により、次のスーパーステップに移行する。
【００４３】
例えば、図８（ｂ）のバーテックスｖ２に着目すると、バーテックスｖ２は、入力エッジで接するバーテックスｖ１，ｖ３，ｖ４の計算・送信処理ｆｎと自身の計算・送信処理ｆｎが終わった時点が隣接同期する隣接同期ポイントとなる。ここでバーテックスｖ２は、スーパーステップＳＳ１のとき、自身の計算・送信処理ｆ１の終了がバーテックスｖ１，ｖ３，ｖ４より遅く一番後であったので、その時点が隣接同期ポイントとなっている。
バーテックスｖ３に着目すると、バーテックスｖ３は、入力エッジで接するバーテックスｖ２，ｖ４の計算・送信処理ｆｎと自身の計算・送信処理ｆｎが終わった時点が隣接同期する隣接同期ポイントとなる。ここでバーテックスｖ３は、スーパーステップＳＳ１のとき、自身の計算・送信処理ｆ１が終わった時点では、バーテックスｖ４の計算・送信処理ｆ１は終わっているが、バーテックスｖ２の計算・送信処理ｆ１が終わっていないため、「inactive」の状態で待機し（図８（ｂ）の符号α）、バーテックスｖ２の計算・送信処理ｆ１が終わった時点が隣接同期する隣接同期ポイントとなる。
また、バーテックスｖ１に着目すると、バーテックスｖ１は、入力エッジで接するバーテックスは存在しない、よって、スーパーステップＳＳ１のとき、自バーテックスの計算・送信処理ｆ１が終了した時点が隣接同期する隣接同期ポイントとなる。
【００４４】
図８（ｂ）に示すように、処理全体のある時点でみると、各バーテックス間においてスーパーステップがずれる可能性がある。そのため、バーテックス間でメッセージを送受信するときには上書きせずに、スーパーステップ毎に管理する。つまり、スーパーステップの情報（ステップ番号）をあわせて記憶するようにする。そのため、図４において示したバーテックスの要素に加え、本実施形態における各バーテックスは、「Ｍin,n+m」を入力メッセージのバッファに記憶する。ここで、「Ｍin,n+m」は、ステップ番号ｎ＋ｍ（「ｍ」は正の整数）において、入力エッジの状態としてバッファに記憶される情報を示す。各バーテックスは、自身のスーパーステップ（例えば、ステップ番号「ｎ」（現在のステップ））よりも先に、次のスーパーステップに移行したバーテックスから、入力エッジの状態を取得した場合、ステップ番号ｎ＋１，ｎ＋２，…，ｎ＋ｍ、としたステップ番号とともに、入力メッセージの状態を記憶しておく。
【００４５】
このように、隣接同期に基づき次のスーパーステップに移行することにより、論理的には、バーテックスそれぞれに着目すると同一スーパーステップ内での同期がとれている。そのため、プログラマは、非同期型のような処理速度／効率性と計算精度のトレードオフを考慮する必要がなくすことができる。
また、図８（ａ）に示す比較例にくらべ、inactiveとして同期待ちをする時間が大幅に削減されるため（図８（ｂ）の符号β）、処理速度／効率性を改善することが可能となる。つまり、システム全体としての処理速度の遅延や、フェーズＰＨ３において処理をせず同期待ちが多いこと（処理の効率性）の問題を解決することができる。
【００４６】
≪分散同期処理システムの構成≫
次に、本実施形態に係る分散同期処理システム１の構成について具体的に説明する。
図９に示すように、分散同期処理システム１は、管理サーバ１０（master）と、管理サーバ１０にそれぞれ接続され並列に処理を行う複数の処理サーバ３０（worker）と、処理サーバ３０上で動作する複数の分散処理部２０（vertex）と、を備える。
【００４７】
管理サーバ１０および処理サーバ３０は、ＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＨＤＤ（Hard Disk Drive）等、一般的なコンピュータとしてのハードウエアを備えており、ＨＤＤには、ＯＳ（Operating System）、アプリケーションプログラム、各種データ等が格納されている。ＯＳおよびアプリケーションプログラムは、ＲＡＭに展開され、ＣＰＵによって実行される。なお、図９において、管理サーバ１０、分散処理部２０および処理サーバ３０の内部は、ＲＡＭに展開されたアプリケーションプログラム等によって実現される機能（特徴構成）を、ブロックとして示している。
【００４８】
管理サーバ１０は、システム全体を管理するmasterとして機能する。管理サーバ１０は、対象とする計算処理の全体について所定単位に細分化した複数の計算処理を、workerとして機能する処理サーバ３０にそれぞれ割り振る。個々の計算処理には、データ入力、計算、メッセージの送受信等が含まれる。並列に処理を行う複数の処理サーバ３０（worker）上では、個々の計算処理にそれぞれ対応した複数の分散処理部２０が動作する。対象とする計算処理をグラフＧ＝（Ｖ，Ｅ）として表現したときに、この計算処理に必要な個々の計算処理は、グラフＧ中の個々の頂点（バーテックス：vertex）として表現される。つまり、分散処理部２０は頂点（バーテックス：vertex）として機能する。
以下、分散同期処理システム１を構成する各装置について詳細に説明する。
【００４９】
＜管理サーバ（master）＞
管理サーバ１０は、対象とする計算処理に必要な個々の計算処理（vertex）の設定と、その個々の計算処理（vertex）の各処理サーバ３０（worker）への割り振りを行う。また、管理サーバ１０は、システム上に設定したバーテックス（vertex）毎に、ＢＳＰにおける、次のスーパーステップに移行するか否かを判断する処理を行うことにより、対象とする計算処理の全体を管理する。
図３に示した、従来の分散同期処理システム１ａのmasterとの違いは、次のスーパーステップへの移行を、全てのバーテックスの処理が終了していることにより判断するのではなく、本実施形態に係る管理サーバ１０（master）では、バーテックス毎に、上記した「隣接同期」に基づき判定することである。
【００５０】
この管理サーバ１０は、その特徴構成として、隣接同期処理部１１を備える。
隣接同期処理部１１は、各処理サーバ３０（worker）から、分散処理部２０（vertex）毎に、計算・送信処理ｆｎが完了したとき、つまり、フェーズＰＨ１（ローカル計算）およびフェーズＰＨ２（データ交換）が完了したときに、計算・送信処理ｆｎの完了報告（以下、「計算・送信処理完了報告」と称する。）を受信する。
そして、隣接同期処理部１１は、受信した計算・送信処理完了報告で示される分散処理部２０（vertex）、すなわち、計算・送信処理が完了した分散処理部２０（vertex）について、次のスーパーステップへの移行判断を上記の「隣接同期」の条件に基づき行う。つまり、隣接同期処理部１１は、「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」（隣接同期）の条件を満たすか否かを判定する。なお、この隣接同期の判定は、次のスーパーステップにおいて必要な計算結果の取得が完了しているか否かを、隣接する分散処理部２０（vertex）からの計算・送信処理完了報告を受信しているか否かに基づき判定することを意味する。
【００５１】
隣接同期処理部１１は、受信した計算・送信処理完了報告で示される分散処理部２０（vertex）が、隣接同期の条件を満たす場合には、その分散処理部２０（vertex）について、次のスーパーステップに移行する（スーパーステップを「＋１」する。）ように、その分散処理部２０（vertex）を担当する処理サーバ３０（worker）に指示を送信する。なお、隣接同期処理部１１による、次のスーパーステップへの移行指示を、以下「次ステップ移行指示」と称する。
【００５２】
また、隣接同期処理部１１は、ある分散処理部２０（vertex）の計算・送信処理完了報告を受信した場合に、その計算・送信処理完了報告で示される分散処理部２０（vertex）が出力エッジで接する分散処理部２０（vertex）のうち、当該分散処理部２０（vertex）のみからの入力メッセージ待ち（入力エッジの状態の取得待ち）」の理由により、inactive状態で待機している分散処理部２０（vertex）がある場合には、その分散処理部２０（vertex）を次のスーパーステップへ移行させるように、次ステップ移行指示を送信する。
【００５３】
具体的には、図８（ｂ）を参照して説明する。スーパーステップＳＳ１のときのバーテックスｖ３に着目すると、バーテックスｖ３は、入力エッジで接するバーテックスｖ２，ｖ４と自身の計算・送信処理ｆ１が終わった時点が隣接同期する隣接同期ポイントとなる。ここでバーテックスｖ３は、自身の計算・送信処理ｆ１が終わった時点では、バーテックスｖ４の計算・送信処理ｆ１は終わっているが、バーテックスｖ２の計算・送信処理ｆ１が終わっていないため、「inactive」の状態で待機している。この状態において、管理サーバ１０の隣接同期処理部１１が、処理サーバ３０（worker１）からバーテックスｖ２の計算・送信処理ｆ１が終わった旨の計算・送信処理完了報告を受信した場合には、バーテックスｖ２のみからの入力メッセージ待ち（入力エッジの状態の取得待ち）をしていた、バーテックスｖ３に対して、次ステップ移行指示を送信する。
このようにすることで、自身の計算・送信処理ｆｎが終了し、inactive状態で待機していた分散処理部２０（vertex）について、次にステップに移行させることができる。
【００５４】
＜分散処理部（vertex）＞
図９に戻り、分散処理部２０（vertex）は、所定単位に区分された計算処理を実行し、数値計算部２１およびメッセージ送受信部２２を含んで構成される。
【００５５】
数値計算部２１は、ＢＳＰにおけるフェーズＰＨ１（ローカル計算）の処理を実行する。この数値計算部２１は、メッセージ送受信部２２を介して受信する次ステップ移行指示に従い、次のスーパーステップへの移行を行う。なお、数値計算部２１は、自身の計算・送信処理ｆｎが完了した後、次ステップ移行指示を受信するまで、inactive状態で待機する。
【００５６】
メッセージ送受信部２２は、他の分散処理部２０や処理サーバ３０（worker）との間での情報の送受信を行う。具体的には、メッセージ送受信部２２は、ＢＳＰにおけるフェーズＰＨ２（データ交換）において、自身の出力エッジの状態を出力メッセージとして、その出力エッジで接続するバーテックスへ向けて送信する。なお、この出力メッセージには、その出力エッジの状態に対応付けてその時点でのスーパーステップのステップ番号が付される。また、メッセージ送受信部２２は、入力エッジで接続するバーテックスから入力エッジの状態を入力メッセージとして受信する。また、この入力メッセージには、その入力エッジに状態に対応付けてその時点でのスーパーステップのステップ番号が付される。なお、メッセージ送受信部２２は、この出力メッセージおよび入力メッセージを、処理サーバ（worker）３０のメッセージ処理部３２を介して送受信する。
また、このメッセージ送受信部２２は、自身が属する処理サーバ３０（worker）から、次ステップ移行指示を受信し、数値計算部２１に出力する。
【００５７】
＜処理サーバ（worker）＞
処理サーバ３０（worker）（図９参照）は、管理サーバ１０（master）や他の処理サーバ３０（worker）と接続される。この処理サーバ３０（worker）は、処理単位となる分散処理部２０（vertex）を複数備え、自身が備える分散処理部２０（vertex）の処理の進行状態等を管理するとともに、他の処理サーバ３０（worker）や管理サーバ１０（master）との間での情報の送受信を行う。また、この処理サーバ３０（worker）は、仮想化制御部３１、メッセージ処理部３２およびバーテックス管理部３３（分散処理管理部）を含んで構成される。
【００５８】
仮想化制御部３１は、仮想化技術に基づき、処理サーバ３０上に仮想化プラットホームを構築し、複数の分散処理部２０（仮想マシン）を配置する制御を行う。
【００５９】
メッセージ処理部３２は、自身に属する各分散処理部２０（vertex）から、ＢＳＰにおけるフェーズＰＨ２（データ交換）の際に、出力エッジの状態を示す出力メッセージを受け取り、計算対象のグラフＧのグラフトポロジに基づき、その出力エッジで接続するバーテックスに、受信した出力メッセージを、入力エッジの状態を示す入力メッセージとして出力する。なお、以降、出力メッセージと入力メッセージとを特に区別しない場合、単に「メッセージ」と称する場合がある。
【００６０】
メッセージ処理部３２は、出力エッジで隣接する分散処理部２０（vertex）へのメッセージを、例えば、次に示す２つのタイミングで送信することができる。
（タイミング１）
自分散処理部２０（vertex）の計算終了後に直ちに送信する。
具体的には、メッセージ処理部３２は、自分散処理部２０（vertex）から、出力メッセージを受信した場合に、出力エッジで接続する分散処理部２０（vertex）が、自身に属する分散処理部２０（vertex）であるとき、および、他の処理サーバ３０に属する分散処理部２０（vertex）であるときに、直ちに、その分散処理部２０（vertex）に送信する。
このようにすることにより、通信遅延の影響を低減させることができる。
【００６１】
（タイミング２）
出力エッジで接続する分散処理部２０（vertex）（隣接バーテックス）が、次のスーパーステップに移行する直前までバッファリングする。
具体的には、メッセージ処理部３２は、自分散処理部２０（vertex）から、出力メッセージを受信した場合に、出力エッジで接続する分散処理部２０（vertex）が、他の処理サーバ３０に属する分散処理部２０（vertex）であるときに、その分散処理部２０（vertex）が次のスーパーステップに移行する情報（次ステップ移行指示）を受ける状態になった時点で、管理サーバ１０から、その次ステップ移行指示を出す旨の情報を事前に取得する。そして、移行直前にバッファリングしたメッセージをまとめて出力エッジで接続する分散処理部２０（vertex）に送信する。
このようにすることで、他の処理サーバ３０に属する分散処理部２０（vertex）に送信する回数（通信回数）を削減することができる。
なお、メッセージ処理部３２は、自分散処理部２０（vertex）から、出力メッセージを受信した場合に、出力エッジで接続する分散処理部２０（vertex）が、自身に属する分散処理部２０（vertex）であるとき、上記のような通信回数の削減効果は得られないので、バッファリングせず、直ちに送信するようにする。
【００６２】
バーテックス管理部３３（分散処理管理部）は、自身に属する分散処理部２０（vertex）を監視し、各分散処理部２０（vertex）が、計算・送信処理ｆｎが完了したとき、つまり、フェーズＰＨ１（ローカル計算）およびフェーズＰＨ２（データ交換）が完了したときに、計算・送信処理ｆｎの完了報告（計算・送信処理完了報告）を生成し、管理サーバ１０（master）に送信する。
そして、バーテックス管理部３３は、管理サーバ１０（master）から、計算・送信処理完了報告に対する応答として、次ステップ移行指示を受信した場合に、その次ステップ移行指示を対象となる分散処理部２０（vertex）に出力する。
【００６３】
≪分散同期処理システムの動作≫
次に、分散同期処理システム１の動作について説明する。
図１０は、本実施形態に係る分散同期処理システム１の処理の流れを示すシーケンス図である。
なお、ここでは、管理サーバ１０（master）により、対象とする計算処理に必要な個々の計算処理（vertex）の設定と、その個々の計算処理（vertex）の各処理サーバ３０（worker）への割り振りがすでに終わっているものとして説明する。
【００６４】
まず、処理サーバ３０（worker）のバーテックス管理部３３（分散処理管理部）は、自身に属する分散処理部２０（vertex）を監視することにより、ある分散処理部２０（vertex）について計算・送信処理ｆｎが完了したことを検出する（ステップＳ１０）。そして、バーテックス管理部３３は、その分散処理部２０（vertex）の識別番号とその時点でのスーパーステップのステップ番号（ｎ）とを付した計算・送信処理完了報告を、管理サーバ１０に送信する（ステップＳ１１）。
【００６５】
次に、計算・送信処理完了報告を受信した管理サーバ１０（master）は、隣接同期処理部１１が、受信した計算・送信処理完了報告で示される分散処理部２０（vertex）について、隣接同期の条件を満たすか否かを判定する（ステップＳ１２）。具体的には、隣接同期処理部１１は、「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」を満たすか否かを判定する。
【００６６】
そして、管理サーバ１０（master）の隣接同期処理部１１は、隣接同期の条件を満たさない場合には（ステップＳ１２→Ｎｏ）、処理サーバ３０（worker）から次の計算・送信処理完了報告を受信するまで待つ。
【００６７】
一方、ステップＳ１２において、管理サーバ１０（master）の隣接同期処理部１１は、隣接同期の条件を満たす場合に（ステップＳ１２→Ｙｅｓ）、計算・送信処理完了報告を送信してきた処理サーバ３０（worker）に、その分散処理部２０（vertex）について、次のスーパーステップに移行するように、次ステップ移行指示を送信する（ステップＳ１３）。
【００６８】
また、管理サーバ１０（master）の隣接同期処理部１１は、ステップＳ１２において、受信した計算・送信処理完了報告で示される分散処理部２０（vertex）が出力エッジで接する分散処理部２０（vertex）のうち、当該分散処理部２０（vertex）のみからの入力メッセージ待ち（入力エッジの状態の取得待ち）」の理由により、inactive状態で待機している分散処理部２０（vertex）があるか否かを判定する。そして、隣接同期処理部１１は、該当する分散処理部２０（vertex）がある場合には、その分散処理部２０（vertex）が属する処理サーバ３０（worker）に対しても、次ステップ移行指示を送信する。
【００６９】
次ステップ移行指示を受信した処理サーバ３０（worker）のバーテックス管理部３３は、その計算・送信処理ｆｎが完了した分散処理部２０（vertex）、および、上記ステップＳ１２の際に、inactive状態で待機していたと判定された分散処理部２０（vertex）に対し、次ステップ移行指示を出力する（ステップＳ１４）。これにより、次ステップ移行指示を受信した分散処理部２０（vertex）の数値計算部２１は、次のスーパーステップ（ｎ＋１）の計算・送信処理ｆｎ＋１を実行する。
【００７０】
以上説明したように、本実施形態に係る分散同期処理システム１および分散同期処理方法によれば、比較例の分散同期処理システムにおいて問題であった、システム全体としての処理速度の遅延や、フェーズＰＨ３において処理をせず同期待ちが多いことの問題、つまり、処理速度／効率性の問題を解決し、処理が著しく遅い分散処理部２０（vertex）の影響を低減することができる。
また、プログラマは、バーテックス間の処理の追い越しや上書きを考慮する必要がなく、シンプルなフレームワークとして、本システムのプログラムを作成することが可能となる。
【００７１】
〔本実施形態の変形例〕
次に、本実施形態に係る分散同期処理システム１の変形例について説明する。
図１１は、本実施形態の変形例に係る分散同期処理システム１Ａの全体構成を示す図である。
図９で示した本実施形態に係る分散同期処理システム１では、管理サーバ１０（master）が、各分散処理部２０（vertex）について、隣接同期の条件を満たすか否かの判定を行っていた。つまり、隣接同期の判定を管理サーバ１０が行う「master集中型」であった。これに対し、図１１に示す、分散同期処理システム１Ａは、管理サーバ１０（master）を備えず、各分散処理部２０（vertex）について、隣接同期の条件を満たすか否かの判定を、各処理サーバ３０（worker）において自律分散的に実行する。つまり、分散同期処理システム１Ａは、自律分散型（master-less型）で、隣接同期を行うことを特徴とする。
具体的には、本実施形態の変形例に係る分散同期処理システム１Ａでは、図９に示す分散同期処理システム１における管理サーバ１０（master）を備えない構成とするとともに、各処理サーバ３０Ａ（worker）におけるバーテックス管理部３３を備えないものとし、その代わりに、図１１に示すように、処理サーバ３０Ａに、隣接同期バーテックス管理部３４（隣接同期分散管理部）を備えるものとした。
なお、図９で示す構成と同じ機能を備える構成については、同一の名称と符号を付し、説明を省略する。
【００７２】
隣接同期バーテックス管理部３４（隣接同期分散管理部）は、自身に属する分散処理部２０（vertex）を監視し、各分散処理部２０（vertex）が、計算・送信処理ｆｎが完了したとき、つまり、フェーズＰＨ１（ローカル計算）およびフェーズＰＨ２（データ交換）が完了したときに、入力エッジで接する全ての分散処理部２０（vertex）からの入力メッセージ（入力エッジの状態）が揃っているか否かを判定する。なお、隣接同期バーテックス管理部３４は、各分散処理部２０（vertex）の入力メッセージ（incomingメッセージ）のバッファ（図４の「Ｍin,n」（現在のステップ用））を参照して、入力メッセージ（入力エッジの状態）が揃っているか否かを判定する。
なお、本実施形態の変形例においても、本実施形態と同様に、処理全体のある時点でみると、各バーテックス間においてスーパーステップがずれる可能性がある。そのため、バーテックス間でメッセージを送受信するときには上書きせずに、スーパーステップ毎に管理する。よって、各バーテックスは、自身のスーパーステップよりも先に、次のスーパーステップに移行した入力エッジで接するバーテックスから取得した入力エッジの状態を、「Ｍin,n+m」として入力メッセージのバッファに記憶しておく。
【００７３】
そして、隣接同期バーテックス管理部３４は、入力メッセージ（入力エッジの状態）が揃っている場合、つまり、隣接する分散処理部２０（vertex）から、次の計算ステップにおいて必要な計算結果の取得が完了している場合には、本実施形態における隣接同期の条件「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」を満たすものとする。隣接同期バーテックス管理部３４は、この場合に、次のスーパーステップに移行する（スーパーステップを「＋１」する。）ように、「次ステップ移行指示」を、計算・送信処理ｆｎが完了した分散処理部２０（vertex）に出力する。
【００７４】
隣接同期バーテックス管理部３４は、inactive状態で待機している分散処理部２０（vertex）に対し入力エッジで接するいずれかの分散処理部２０（vertex）から、当該分散処理部２０（vertex）が入力メッセージ（入力エッジの状態）を受信した場合には、その受信を契機として、再度、入力メッセージ（入力エッジの状態）が揃っているか否か、つまり、隣接同期の条件を満たすか否かの判定を実行する。
【００７５】
なお、処理サーバ３０Ａ（worker）のメッセージ処理部３２は、隣接同期バーテックス管理部３４の上記した隣接同期の判定のため、入力エッジの状態としてのデータがない場合（例えば、データが「０」）であっても、フェーズＰＨ１（ローカル計算）が終わった時点で、出力エッジで接する分散処理部２０（vertex）に対して、入力メッセージを送信する。また、処理サーバ３０Ａ（worker）のメッセージ処理部３２は、隣接同期バーテックス管理部３４の隣接同期の条件による判定のため、出力メッセージをバッファリングせずに、直ちに送信する。
【００７６】
≪変形例の分散同期処理システムの動作≫
次に、変形例に係る分散同期処理システム１Ａの動作について説明する。
図１２は、本実施形態の変形例に係る分散同期処理システム１Ａの処理の流れを示すフローチャートである。
なお、ここでは、予め対象とする計算処理に必要な個々の計算処理（vertex）の設定と、その個々の計算処理（vertex）の各処理サーバ３０Ａ（worker）への割り振りが終わっているものとして説明する。この個々の計算処理（vertex）の設定と、各処理サーバ３０Ａ（worker）への割り振りとは、例えば、これらの機能を、システム全体の管理サーバを備えさせたり、処理サーバ３０Ａの中の代表サーバに備えさせたりすることにより、事前に実行しておけばよい。
【００７７】
まず、処理サーバ３０Ａ（worker）の隣接同期バーテックス管理部３４（隣接同期分散管理部）は、自身に属する分散処理部２０（vertex）を監視することにより、ある分散処理部２０（vertex）について計算・送信処理ｆｎが完了したことを検出する（ステップＳ２０）。
【００７８】
続いて、隣接同期バーテックス管理部３４は、その分散処理部２０（vertex）について、入力エッジで接する全ての分散処理部２０（vertex）からの入力メッセージ（入力エッジの状態）が揃っているか否かを判定する（ステップＳ２１）。
【００７９】
ここで、隣接同期バーテックス管理部３４は、入力メッセージ（入力エッジの状態）が揃っていると判定した場合には（ステップＳ２１→Ｙｅｓ）、隣接同期の条件「自バーテックスおよび入力エッジで接する全てのバーテックスの計算・送信処理ｆｎが完了していること」を満たすものし、後記するステップＳ２４（「次ステップ移行指示」の出力）に進む。
【００８０】
一方、隣接同期バーテックス管理部３４は、入力メッセージ（入力エッジの状態）が揃っていないと判定した場合には（ステップＳ２１→Ｎｏ）、「次ステップ移行指示」を出力しない。そのため、その計算・送信処理ｆｎが完了した分散処理部２０（vertex）は、inactive状態での待機となる（ステップＳ２２）。
【００８１】
続いて、隣接同期バーテックス管理部３４は、inactive状態で待機している分散処理部２０（vertex）に対し、入力エッジで接するいずれかの分散処理部２０（vertex）から、当該分散処理部２０（vertex）が入力メッセージ（入力エッジの状態）を受信したか否かを判定する（ステップＳ２３）。そして、隣接同期バーテックス管理部３４は、inactive状態で待機している分散処理部２０（vertex）が入力メッセージを受信していなければ（ステップＳ２３→Ｎｏ）、受信するまで待つ。一方、隣接同期バーテックス管理部３４は、inactive状態で待機している分散処理部２０（vertex）が入力メッセージを受信した場合には（ステップＳ２３→Ｙｅｓ）、そのことを契機として、ステップＳ２１に戻る。
【００８２】
一方、隣接同期バーテックス管理部３４は、隣接同期の条件を満たす場合には（ステップＳ２１→Ｙｅｓ）、ステップＳ２４において、その分散処理部２０（vertex）について、次のスーパーステップに移行するように、「次ステップ移行指示」を出力する。これにより、「次ステップ移行指示」を受信した分散処理部２０（vertex）の数値計算部２１は、次のスーパーステップ（ｎ＋１）の計算・送信処理ｆｎ＋１を実行する。
【００８３】
以上説明したように、本実施形態の変形例に係る分散同期処理システム１Ａおよび分散同期処理方法によれば、本実施形態に係る分散同期処理システム１の効果に加えて、自律分散型を採用することにより、管理サーバ１０（master）のボトルネックを回避し、大規模なグラフＧにおいても、処理速度／効率性を担保することができる。
【符号の説明】
【００８４】
１，１Ａ  分散同期処理システム
１０    管理サーバ（master）
１１    隣接同期処理部
２０    分散処理部（vertex）
２１    数値計算部
２２    メッセージ送受信部
３０，３０Ａ  処理サーバ（worker）
３１    仮想化制御部
３２    メッセージ処理部
３３    バーテックス管理部（分散処理管理部）
３４    隣接同期バーテックス管理部（隣接同期分散管理部）
【図１】
2018032344.tif 000003
【図２】
2018032344.tif 000004
【図３】
2018032344.tif 000005
【図４】
2018032344.tif 000006
【図５】
2018032344.tif 000007
【図６】
2018032344.tif 000008
【図７】
2018032344.tif 000009
【図８】
2018032344.tif 000010
【図９】
2018032344.tif 000011
【図１０】
2018032344.tif 000012
【図１１】
2018032344.tif 000013
【図１２】
2018032344.tif 000014