(57)【要約】  大規模なスケールフリーグラフになるほど、並列処理しても計算時間が長くなる課題が生じる。  本発明は、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、第２プロセスに割当てられている第２メモリ空間に第１グラフ頂点の情報および第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置し、第１プロセスでの第１グラフ頂点についての演算結果と、第２プロセスでの第１グラフ頂点の演算結果とを、第１プロセスと第２プロセスが共有することで、上述の課題を解決する。
2014010007.tif 000002
【特許請求の範囲】
【請求項１】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムでのグラフ処理方法であって、
第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、
第２プロセスに割当てられている第２メモリ空間に前記第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置し、
前記第１プロセスでの前記第１グラフ頂点についての演算結果と、前記第２プロセスでの前記第１グラフ頂点の演算結果とを、前記第１プロセスと前記第２プロセスが共有することを特徴とするグラフ処理方法。
【請求項２】
請求項１に記載のグラフ処理方法において、
前記第１プロセスは、前記第１グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行い、
前記第２プロセスは、前記第２グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行うことを特徴とするグラフ処理方法。
【請求項３】
請求項１に記載のグラフ処理方法において、
前記複数のプロセスの全てに、前記第１グラフ頂点の情報が配置されていることを特徴とするグラフ処理方法。
【請求項４】
請求項１に記載のグラフ処理方法において、
前記第１グラフ頂点は、ハブ頂点であることを特徴とするグラフ処理方法。
【請求項５】
請求項４に記載のグラフ処理方法において、
前記第１グラフ頂点群には、通常頂点が含まれることを特徴とするグラフ処理方法。
【請求項６】
請求項１に記載のグラフ処理方法において、
前記グラフ処理は、ランダムウォークによる主成分ベクトルの計算であることを特徴とするグラフ処理方法。
【請求項７】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムであって、
第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、第２プロセスに割当てられている第２メモリ空間に前記第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置する手段と、
前記第１プロセスでの前記第１グラフ頂点についての演算結果と、前記第２プロセスでの前記第１グラフ頂点の演算結果とを、前記第１プロセスと前記第２プロセスが共有する手段とを有することを特徴とする情報処理システム。
【請求項８】
請求項７に記載の情報処理システムにおいて、
前記第１プロセスは、前記第１グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行い、
前記第２プロセスは、前記第２グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行うことを特徴とする情報処理システム。
【請求項９】
請求項７に記載の情報処理システムにおいて、
前記第１グラフ頂点は、ハブ頂点であることを特徴とする情報処理システム。
【請求項１０】
請求項９に記載の情報処理システムにおいて、
前記第１グラフ頂点群には、通常頂点が含まれることを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフ処理を実行する情報処理システムとその処理方法に関する。
【背景技術】
【０００２】
インターネットなどの通信技術の進歩とストレージ技術向上に伴う記録密度増大により、企業や個人が扱うデータ量が大きく増加し、近年はその大規模なデータの繋がり（ネットワークとも呼ばれる）を解析することが重要になってきた。特に人間関係など自然界で生じるデータの繋がりにはスケールフリーと呼ばれる特性を有するグラフが多く、このスケールフリー特性を有する大規模グラフ解析が重要になってきた（特許文献１）。【０００３】
グラフは頂点と頂点の間の関係を表す辺で構成される。また、グラフ解析は、一般に、対象となるグラフの特徴量、例えばグラフ直径、中心性、ランダムウォークによる主成分ベクトルなどの算出が主であり、これら特徴量の算出は、頂点間の辺に沿った情報交換処理（トラバース処理）が多くを占める。【０００４】
非特許文献１には、グラフ解析を高速に行う技術として、グラフを頂点単位で分割し並列処理する技術が開示されている。特許文献２には、グラフを頂点単位で分割し並列処理する上に、さらに、頂点の計算順序を入れ換えてから、グラフを圧縮し、圧縮されたグラフをそのまま計算する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３１８８８４号公報
【特許文献２】米国特許出願公開第２０１０／０３０６１５８号明細書
【非特許文献】
【０００６】
【非特許文献１】ダグラス・グレガー（Ｄｏｕｇｌａｓ  Ｇｒｅｇｏｒ）、アンドルー・ラムスデン（Ａｎｄｒｅｗ  Ｌｕｍｓｄａｉｎｅ）、「分散メモリ並列計算のための順次グラフアルゴリズムの排除（Ｌｉｆｔｉｎｇ  ｓｅｑｕｅｎｔｉａｌ  ｇｒａｐｈ  ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｄｉｓｔｒｉｂｕｔｅｄ−ｍｅｍｏｒｙ  ｐａｒａｌｌｅｌ  ｃｏｍｐｕｔａｔｉｏｎ）」、「ＯＯＰＳＬＡ’０５第２０回オブジェクト指向プログラミング、システム、言語、アプリケーションに関するＡＣＭ  ＳＩＧＰＬＡＮ年会紀要（ＯＯＰＳＬＡ’０５  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０ｔｈ  ａｎｎｕａｌ  ＡＣＭ  ＳＩＧＰＬＡＮ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｏｂｊｅｃｔ−ｏｒｉｅｎｔｅｄ  ｐｒｏｇｒａｍｍｉｎｇ，  ｓｙｓｔｅｍｓ，  ｌａｎｇｕａｇｅｓ，  ａｎｄ  ａｐｐｌｉｃａｔｉｏｎｓ」、エイシーエムニューヨーク（ＡＣＭ  Ｎｅｗ  Ｙｏｒｋ）、（米国）、２００５年、ｐ．４２３−４３７
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１および特許文献２に開示の技術では、大規模なスケールフリーグラフになるほど、そのグラフ解析に適用すると計算時間が長くなる課題が生じる。この課題は、ハブと呼ばれる次数（頂点に接続される辺の数）の多い頂点の存在に起因する。【０００８】
図１にスケールフリーグラフの次数分布の典型的な例を示す。図１の横軸は、辺の数の対数を示す。図１の縦軸は、頂点数の対数を示す。集合１００で示したハブ頂点は、該当する頂点の数は少数であるが次数が多い頂点を指す。一方、集合１０１で示した通常頂点は、該当する頂点の数は多数であるが次数は少ない。トラバース処理は、頂点間の辺に沿った情報交換処理であるため、次数が計算時間に大きな影響を及ぼす。【０００９】
図２に次数と計算時間の関係の例を示す。図２に示すように、ハブ頂点は次数が多いので、その計算時間２００は、平均的な次数を持つ通常頂点の計算時間２０１より、数桁長い。そして、グラフ解析の全体計算時間は、最も長い計算時間を要する頂点の計算時間で決定されるため、ハブ頂点の計算時間がグラフ処理全体の計算時間を劣化させる。【００１０】
それに対し、特許文献１に開示の技術は頂点毎の分割に過ぎず、また、特許文献２に開示の技術は、頂点の計算順序を入れ換えることで高速化を図る手法のため、ハブ頂点の辺の数の問題は解決されず、ハブ頂点による計算時間の悪化を解決できない。【００１１】
そこで本発明は、優れた並列スケーラビリティを有するグラフ処理方法および情報処理システムを実現することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、第２プロセスに割当てられている第２メモリ空間に第１グラフ頂点の情報および第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置し、第１プロセスでの第１グラフ頂点についての演算結果と、第２プロセスでの第１グラフ頂点の演算結果とを、第１プロセスと第２プロセスが共有することで、上述の課題を解決する。
【発明の効果】
【００１３】
本発明により、優れた並列処理スケーラビリティの確保が可能となる。
【図面の簡単な説明】
【００１４】
【図１】スケールフリーグラフの次数分布の典型的な例を示す図である。
【図２】次数と計算時間の関係の例を示す図である。
【図３】入力グラフの例を示す図である。
【図４】頂点配置の概念を示す図である。
【図５】情報処理システムの例を示す図である。
【図６】メモリ空間の配置例を示す図である。
【図７】主成分ベクトル計算の例のフロー図である。
【図８】通常頂点処理の計算の例のフロー図である。
【図９】分割頂点処理の計算の例のフロー図である。
【図１０】通信処理の例のフロー図である。
【図１１】分割頂点同期処理の例のフロー図である。
【図１２】メモリ空間の配置例を示す図である。
【図１３】実施例１の分割頂点同期処理における通信パタンを示す図である。
【図１４】実施例４の分割頂点同期処理における通信パタンを示す図である。
【発明を実施するための形態】
【実施例１】
【００１５】
本発明のグラフ処理方法および情報処理システムの実施例について以下に説明する。図３に、本発明の入力グラフの一部の例として、グラフ３１０を示す。【００１６】
グラフ３１０は、頂点が丸印で、有向エッジが頂点間を結ぶ矢印で表現されている。また有向エッジで繋がった頂点で、矢印元の頂点から見て矢印先の頂点を「隣接する」頂点と呼ぶ。ここで、次数が他の頂点に比べて比較的多い頂点、本実施例では次数が５以上の頂点をハブ頂点とし、それ以外の頂点を通常頂点とする。図３のグラフ３１０においては、ハブ頂点はハブ頂点Ｙ（３００−Ｙ）とハブ頂点Ｚ（３００―Ｚ）となり、通常頂点は通常頂点ａ〜ｎ（３０１−ａ〜ｎ）となる。【００１７】
次に、グラフ３１０に対するグラフ解析処理の例として、ランダムウォークによる主成分ベクトルの計算を考える。ランダムウォークによる主成分ベクトルの計算は一般に、各頂点が保持する成分データを隣接する頂点に分配し、各頂点は分配された成分データを受け取り総和演算し、各頂点の成分データを更新する処理を繰り返すことで行われる。そして、複数回繰り返し更新処理を実施した後の各頂点が保持する成分データが、求める主成分ベクトルとなる。【００１８】
グラフ３１０のハブ頂点Ｙにおいては、まず、ハブ頂点Ｙ自身の持つ時刻ｔ−１の成分データを隣接する頂点である通常頂点ｊおよび通常頂点ｎに分配する。ここで、ハブ頂点Ｙ自身の持つ時刻ｔ−１の成分データは、隣接する頂点の数、ここでは２で除算され送信される。この成分データの除算の計算を数式（１）に記載する。ここで、Ｄは成分データ、ｓｅｎｄＤは分配する成分データを表し、右肩の添え字は時刻、右下の添え字は対象とする頂点の頂点識別情報（頂点ＩＤ）を示す。次に、ハブ頂点Ｙにおいては、隣接される頂点（通常頂点ｂ〜通常頂点ｉ、ハブ頂点Ｚ）から分配された成分データ（ｓｅｎｄＤ）を受け取り、総和を算出する。総和の結果が時刻ｔの成分データとなる。総和の計算式を数式（２）に示す。【００１９】
【数１】
2014010007.tif 000003
【００２０】
【数２】
2014010007.tif 000004
【００２１】
以上の処理を全ての頂点に対し複数回実施した後に各頂点が保持する成分データが、ランダムウォークによる主成分ベクトルの計算出力となる。【００２２】
このとき、ハブ頂点Ｙは他の通常頂点よりも次数が多く、送る、および受け取る成分データも多いため、必要となる処理量が大きく、通常頂点との間で処理時間が不均一となり、これが並列処理スケーラビリティを低下させる原因となる。【００２３】
そこで、本発明の情報処理システムでは、図４に示すように、グラフ３１０を複数のプロセスへ配置する。ハブ頂点については、複数のプロセスに分割して配置し、分割して配置されたハブ頂点はそれぞれ同一プロセスに配置された頂点と辺で接続される。各プロセスに分割されて配置されたハブ頂点を分割頂点と呼ぶ。ここで、プロセスとはオペレーティングシステムからメモリ空間（または記憶領域）を割り当てられた動作中のインスタンスであり、プログラムの実行単位である。【００２４】
以下、図４の頂点配置概念図を用いて分割頂点とその配置について説明する。図４に示した頂点配置概念図では、ハブ頂点Ｙおよびハブ頂点Ｚがプロセス４１１〜４１３に分割されて配置され、各配置された分割頂点は、ハブ頂点Ｙについては分割頂点Ｙ１（４００−Ｙ１）、Ｙ２（４００−Ｙ２）、Ｙ３（４００−Ｙ３）で、ハブ頂点Ｚについては分割頂点Ｚ１（４０１−Ｚ１）、Ｚ２（４０１−Ｚ２）、Ｚ３（４０１−Ｙ３）である。各分割頂点は、グラフ３１０の接続情報に従って、同一プロセス内に配置されている他の頂点と接続される。また、図４の頂点配置概念図の分割頂点間の破線（４０２など）は、分割される前の頂点が同一であることを表現している。【００２５】
このときのハブ頂点Ｙの成分データの計算式を数式（３）、（４）、（５）、（６）に記載する。【００２６】
【数３】
2014010007.tif 000005
【００２７】
【数４】
2014010007.tif 000006
【００２８】
【数５】
2014010007.tif 000007
【００２９】
【数６】
2014010007.tif 000008
【００３０】
ｓｅｎｄＤの算出は数式（１）に基づき行われる。数式（３）−（５）に基づいて、各分割頂点Ｙ１（４００−Ｙ１）、Ｙ２（４００−Ｙ２）、Ｙ３（４００−Ｙ３）は、それぞれが配置されたプロセス内に配置された隣接される頂点から各成分データ（ｓｅｎｄＤ）を受け取り、各分割頂点毎に一時成分データ（ｔｍｐＤ）が算出される。その後、数式（６）に基づいて、同一の頂点に由来する分割頂点間でそれぞれが得ている一時成分データを交換し、各分割頂点に対してハブ頂点Ｙの時刻ｔの成分データが算出される。【００３１】
通常頂点の計算は、数式（１）と数式（２）に従う。したがって、ハブ頂点および通常頂点に対するｓｅｎｄＤの計算は数式（１）に従う。通常頂点の成分データの計算は数式（２）に従い、ハブ頂点の成分データの計算は数式（３）−（６）に従う。【００３２】
以上により、ハブ頂点の成分データの計算を、複数のプロセスに分散させることができ、前述の課題を解決できる。【００３３】
本実施例の計算機上での計算手順の詳細を以下に説明する。図５に本実施例のグラフ処理を行う情報処理システム５００の例を示す。情報処理システム５００は、１つ以上の計算ノード５０１−１〜３、ストレージシステム５０２、および計算ノード５０１−１〜３とストレージシステム５０２などを接続するネットワークシステム５０３を備える。また、計算ノード５０１−１〜３のそれぞれは、１つ以上の中央処理装置（ＣＰＵ）５０５−１〜２を有するプロセッサユニット５０４、メモリユニット５０７、通信ユニット５０６、およびこれらユニット群を接続するバス５０８を備える。計算ノード５０１〜３は、例えばサーバ装置である。上述したグラフ処理の各プロセスは１以上のＣＰＵで演算され、各プロセスに対応するメモリ空間は１以上のメモリユニットに確保される。また１つのＣＰＵが複数のプロセスを処理しても良いし、１つのメモリユニットが複数のプロセスのメモリ空間を保持して良い。ＣＰＵの代わりにＦＰＧＡやＧＰＵなどの演算器が用られても良い。各プロセッサユニット５０４は、通信ユニット５０６を経由して、他の計算ノード内のメモリユニットなどのユニット群にアクセスが出来る。同様に、各プロセッサユニット５０４は、通信ユニット５０６を経由してストレージシステム５０２に格納されている情報にアクセスできる。【００３４】
図６に、図４に示した頂点配置時の各プロセスの処理、各プロセスに割り当てられたメモリ空間（プロセス４１１に対応するメモリ空間６００−１、プロセス４１２に対応するメモリ空間６００−２、およびプロセス４１３に対応するメモリ空間６００−３と、それらへの記憶内容である、頂点接続情報６０１、分割頂点リスト６０２、分割頂点接続情報６０３、成分データリスト６０４、および送信キュー６０５）を示す。図６において、頂点接続情報６０１、分割頂点リスト６０２、および分割頂点接続情報６０３のそれぞれの枠内に示されている丸印が記憶されている頂点を示し、丸内の文字が頂点ＩＤを示し、矢印は隣接関係の情報、すなわち、矢印元から矢印先へ隣接することを示す。また成分データリスト６０４の枠内に記載した四角は、各頂点ＩＤに対応する成分データ（Ｄ）を示す。【００３５】
主成分ベクトルの成分データの計算手順を図７に示す。まず、ステップ７００において、頂点配置処理を行う。頂点配置処理では、各プロセスが、ストレージシステム５０２に格納されている入力グラフにアクセスし、各プロセスに配置される頂点の頂点接続情報を取得する。各プロセスは自身のプロセス識別情報（プロセスＩＤ）と頂点ＩＤを比較することで、各プロセスに配置される頂点を知ることができる。これは、例えば、プロセスＩＤが「１」のプロセスには、数値化した頂点ＩＤを計算ノード数で除算した時の剰余が「１」の頂点が配置され、プロセスＩＤが「２」のプロセスには、剰余が「２」の頂点が配置され、プロセスＩＤが「３」のプロセスには、剰余が「３」の頂点が配置されるという手段で実現できる。例えば、プロセス数が１６ならば、プロセスＩＤ＝１に配置される頂点の頂点ＩＤは、｛１、１７、３３、．．．｝である。各プロセスは、各プロセスが取得した頂点接続情報からそれぞれの頂点の次数を算出し、予め設定したハブ次数閾値と比較し、ハブ次数閾値より次数の少ない頂点を通常頂点として各プロセスに対応するメモリ空間に頂点接続情報を配置する。一方で、ハブ次数閾値より次数が多い頂点の場合には、各プロセスは、頂点接続情報６０１に加え、ハブ頂点として、分割頂点リスト６０２、分割頂点接続情報６０３を各プロセスのメモリ空間に配置する。これにより、分割頂点については、少なくとも２つのプロセスのメモリ空間のそれぞれに、同一の分割頂点の情報および該分割頂点に接続されているひとつ以上の頂点を含む頂点群の情報が配置される。このように、情報処理システム５００は、分割頂点については、少なくとも２つのプロセスのメモリ空間のそれぞれに、同一の分割頂点の情報および該分割頂点に接続されているひとつ以上の頂点を含む頂点群の情報を配置する手段を有する。【００３６】
ステップ７００の次に、主成分ベクトル計算を複数回行うために、ステップ７０１−１からステップ７０１−２の間のステップで繰り返される時間刻みループ処理がある。ループ内には、主に４つの大きな処理があり、４つの処理は、通常頂点処理７０２、分割頂点処理７０３、通信処理７０４、分割頂点同期処理７０５である。以下、各処理の詳細を説明する。【００３７】
通常頂点処理７０２は、通常頂点を対象とした成分データを計算する。図８に通常頂点処理７０２の計算手順を示す。ここでは、図６に図示したプロセス４１１に対応するメモリ空間６００−１を例に説明する。通常頂点処理では、自プロセス内に配置された全通常頂点に対し８００−１から８００−２までのループ処理が行われる。図６に図示した例では、頂点接続情報６０１に格納されている頂点ａと頂点ｂが通常頂点なので処理対象となり，各通常頂点に対して８００−１から８００−２の間の処理が実行される。そして、ステップ８０１において、これら通常頂点の成分データを成分データリスト６０４から取得し、頂点接続情報６０１から隣接数（頂点ｂの隣接する頂点は頂点Ｙだけのため隣接数は１）を取得し、分配する成分データ（ｓｅｎｄＤ）を計算する（数式（１）に該当する）。そして、プロセス４１１は、これら通常頂点に隣接する頂点情報を頂点接続情報６０１から取得し、隣接する頂点の各々に対して８０２−１から８０２−２までのループ処理を行う。例えば、前述の頂点ｂの隣接する頂点は頂点Ｙのため、頂点Ｙに対して８０２−１から８０２−２の間の処理が実施される。【００３８】
その後、プロセス４１１は、これら各隣接する頂点が分割頂点かを分頂点リスト６０２を参照し、ステップ８０３において判定する。隣接する頂点が分割頂点か否かで、前述したとおり計算式が異なるため、ステップ８０３において、処理を分岐する。前記判定結果が分割頂点であれば、ステップ８０７において、ステップ８０１で計算した分配する成分データを、隣接する頂点の一時成分データに加算する。例えば、頂点ｂのｓｅｎｄＤを分割頂点Ｙ１の一時成分データ（ｔｍｐＤ）に加算する。なお、隣接する頂点が分割頂点の場合の処理は、数式（３）から（５）に該当する。【００３９】
一方で、判定結果が分割頂点でなければ、プロセス４１１は、隣接する頂点が他プロセス内に配置されているかをステップ８０４にて判定する。プロセス４１１では、隣接する頂点がプロセス４１１以外に配置されているか否かが判定される。前述の通り、各プロセスは自身のプロセス識別情報（プロセスＩＤ）と頂点ＩＤを比較することで、各プロセスに配置される頂点を知ることができるため、隣接する頂点の頂点ＩＤにより判定する。例えば、自プロセスＩＤが１で、隣接する頂点ＩＤが「２０」、プロセス数が１６ならば、頂点ＩＤ（＝２０）／プロセス数（＝１６）の剰余（＝４）が隣接する頂点が配置されているプロセスＩＤを示し、自プロセスＩＤが「１」のため、隣接する頂点は他プロセスに配置されていると判定できる。判定結果が、プロセス４１１以外に配置されている場合には、分配する情報である成分データは、隣接する頂点が配置されている他のプロセスに送信されるので、送信キュー６０５に保存される（ステップ８０６）。送信キュー６０５に保存される情報には、成分データの他に、送信先頂点の頂点ＩＤ、送信元頂点の頂点ＩＤがある。プロセス４１１に配置されている場合には、プロセス４１１の成分データリスト６０４に分配先の成分データ（Ｄ）があるので、分配先の成分データ（Ｄ）に、分配する成分データ（ｓｅｎｄＤ）が加算される（ステップ８０５）。なお、隣接する頂点が通常頂点の場合の処理は、数式（２）に従う。ここで、ステップ８０３において、ある頂点が分割頂点と通常頂点のどちらであるかを判定するためには、分割頂点リスト６０２の情報が用いられる。分割頂点リスト６０２は分割頂点の頂点ＩＤを持つので、各プロセスが分割頂点リスト６０２を参照することで分割頂点か通常頂点かの判定が行われる。【００４０】
次に、分割頂点処理７０３について図９のフロー図を用いて説明する。分割頂点処理７０３は、計算対象を分割頂点としているが、ステップ９００−１、ステップ９０１、ステップ９０２−１については、それぞれ通常頂点処理７０２のステップ８００−１、ステップ８０１、ステップ８０２−１と同様である。すなわち、ステップ９００−１と９００−２の間のループ処理は、プロセス４１１に配置された各分割頂点に対して行われ、ステップ９０１では、分割頂点が持つ成分データが成分データリスト６０４から読み出され、頂点接続情報６０１から読み出されたハブ頂点が隣接する頂点数で除算される。また、ステップ９０２−１〜９０２−２のループ処理では、分割頂点の隣接する各頂点に対して処理が実施される。【００４１】
その後、ステップ９０３において、配置されている分割頂点に隣接する頂点が分割頂点か否かを判定し、判定結果が分割頂点の場合には、ステップ８０７と同様に、ステップ９０１で計算した分配する成分データ（ｓｅｎｄＤ）を、隣接する頂点の一時成分データ（ｔｍｐＤ）に加算する処理が行われ（ステップ９０５）、判定結果が分割頂点でなければ、ステップ８０５と同様に、分配先の成分データ（Ｄ）に、分配する成分データ（ｓｅｎｄＤ）を加算する処理が行われる。例えば、プロセス４１１に対応するメモリ空間６００−１の例では、分割頂点Ｚ１に隣接する通常頂点ｋ、ｌ、ｍに対し、分配先の成分データ（Ｄ）に、分配する成分データ（ｓｅｎｄＤ）を加算する処理が実施される。ここで、分割頂点処理７０３には、ステップ８０６に相当する処理が無いのは、本実施例では、各分割頂点は各分割頂点が配置されているプロセスに配置されている頂点と隣接すると定義しているからである。このようにすることで、各分割頂点が、各分割頂点が配置されているプロセス以外のプロセスに配置されている頂点と隣接すると定義するよりも、プロセス間の通信量を削減できるので、グラフ処理を高速化できる。【００４２】
そして、通信処理７０４において、送信キュー６０５に保存された情報がプロセス間で通信される。図１０に、通信処理７０４のフロー図を示す。【００４３】
まず、各プロセスは、送信キュー６０５内に保存された送信先頂点の頂点ＩＤに従って、対応するプロセスに送信キュー６０５に保存された情報（送信先頂点ＩＤ、送信元頂点ＩＤ、成分データ）を送信する（ステップ１０００）。その後、各プロセスは、送信された情報を受信する（ステップ１００１）。そして、各プロセスは、受信した各データに対してループ処理（ステップ１００２−１からステップ１００２−２まで）を実施する。ループ内では、各データに対して、送信先頂点の頂点ＩＤに従って、対応する通常頂点の成分データ（Ｄ）に、受信された成分データ（ｓｅｎｄＤ）が加算される（ステップ１００３）。ステップ１００３の処理は数式（２）に従う。【００４４】
続いて、分割頂点同期処理７０５において、分割頂点の成分データが計算される。すなわち、数式（６）に相当する処理が行われる。ステップ１１００およびステップ１１０１において、各プロセスは、各プロセスにある一時成分データ（ｔｍｐＤ）を、分割頂点接続情報６０３に従って他プロセスに送信し、他のプロセスから送信された一時成分データ（ｔｍｐＤ）を受信する。これにより、それぞれのプロセスで演算された分割頂点についての演算結果を、プロセス間で共有する。このように、情報処理システム５００は、それぞれのプロセスで演算された分割頂点についての演算結果を、プロセス間で共有する手段を有する。ステップ１１００およびステップ１１０１で通信される情報は、送信先の分割頂点の頂点ＩＤおよび一時成分データである。分割頂点接続情報６０３は、頂点の分割前に同一の頂点であったことを示す情報で、図６の例では、プロセス４１１に対応するメモリ空間６００−１の分割頂点接続情報６０３は、ハブ頂点Ｙを分割した他の分割頂点Ｙ２とＹ３の情報、およびハブ頂点Ｚを分割した他の分割頂点Ｚ２とＺ３の情報を持つ。その後、各プロセスは、受信した各データのループ処理（ステップ１１０２−１からステップ１１０２−２まで）を実施する。ループ処理内のステップ１１０３では、各受信データにおいて、送信先分割頂点の頂点ＩＤに従って、受信された一時成分データが成分データリスト６０４内の該当する成分データに加算される。【００４５】
以上の４つの処理によって、通常頂点、分割頂点のそれぞれの成分データを共に計算できる。また、ハブ頂点を各プロセスに分割して並列化した処理を実現できる。これにより、優れた並列スケーラビリティを実現できる。
【実施例２】
【００４６】
実施例２では、同一ハブ頂点に対応する分割頂点を、グラフ処理を行っている全プロセスに配置した場合の処理方法の例を説明する。実施例２のグラフ処理方法は分割頂点接続情報６０３のデータ量を削減する効果を持つ。【００４７】
図１２に、実施例１の図６に相当する、実施例２における各プロセスに割り当てられたメモリ空間の概念図を示す。【００４８】
実施例２では、同一ハブ頂点に対応する分割頂点が全プロセスに配置されているため、分割頂点同期処理７０５における接続先のプロセスは必ず全プロセスのため、実施例１における分割頂点同期処理７０５の内の分割頂点の情報を該当するプロセスへ送信する処理（図１１のステップ１１００）で実施した分割頂点接続情報６０３の参照をする必要がない。これにより、図１２の分割頂点接続情報１２１のように接続先の情報を保持する必要がなく、実施例２のグラフ処理方法はデータ量を削減する効果を持つ。
【実施例３】
【００４９】
実施例３では、通常頂点と分割頂点の判定のため、頂点ＩＤに分割頂点の識別子を包含させる実施例１の変形例である。頂点ＩＤが６４ビットである場合、最上位ビットである６４ビット目に分割頂点の識別子を準備し、分割頂点ならば該識別子を「１」、それ以外ならば「０」とする。このとき、頂点ＩＤは６２−０ビットの６３ビットとなる。これにより、通常頂点と分割頂点の判定は、頂点ＩＤの最上位ビットを確認するだけで可能となる。
【実施例４】
【００５０】
実施例４では、分割頂点同期処理において、プロセス間の一時成分データの通信を、全プロセス対全プロセスでなく、デイジーチェーンによる通信で実現する処理方法の例を説明する。実施例４のグラフ処理方法は、分割頂点同期処理７０５における一時成分データのプロセス間の送信と受信（ステップ１１００と１１０１に相当する）による通信回数を削減する効果を持つ。【００５１】
図１３に、実施例１のグラフ処理方法の、分割頂点同期処理７０３における通信パタンを示す。ここで、図１３は例として、ハブ頂点Ｙを分割頂点Ｙ１からＹ４として記し、４つのプロセス（１３０１から１３０４）に配置されている場合を記載している。図１３において、分割頂点同期処理７０３の通信は、分割頂点Ｙ１から分割頂点Ｙ２と、分割頂点Ｙ２から分割頂点Ｙ１への通信（１３００−１の通信）、分割頂点Ｙ２から分割頂点Ｙ３と、分割頂点Ｙ３から分割頂点Ｙ２への通信（１３００−２の通信）、分割頂点Ｙ３から分割頂点Ｙ４と、分割頂点Ｙ４から分割頂点Ｙ３への通信（１３００−３の通信）、分割頂点Ｙ１から分割頂点Ｙ３と、分割頂点Ｙ３から分割頂点Ｙ１への通信（１３００−４の通信）、分割頂点Ｙ２から分割頂点Ｙ４と、分割頂点Ｙ４から分割頂点Ｙ２への通信（１３００−５の通信）、分割頂点Ｙ１から分割頂点Ｙ４と、分割頂点Ｙ４から分割頂点Ｙ１への通信（１３００−６の通信）の計１２回の通信が行われる。【００５２】
一方で、実施例４の分割頂点同期処理の通信パタンを図１４に示す。図１４では分割頂点Ｙ１から分割頂点Ｙ２と、分割頂点Ｙ２から分割頂点Ｙ１への通信（１４００−１の通信）、分割頂点Ｙ２から分割頂点Ｙ３と、分割頂点Ｙ３から分割頂点Ｙ２への通信（１４００−２の通信）、分割頂点Ｙ３から分割頂点Ｙ４と、分割頂点Ｙ４から分割頂点Ｙ３への通信（１４００−３の通信）の計６回の通信に削減されている。このとき、各プロセスは、各分割頂点について、一時成分データを受信した時に、既に自身の有する分割頂点の一時成分データを受信した一時成分データに加算済みか否かを判定し、加算していなければ加算して、他プロセスに加算後の一時成分データを送信し、否ならば一時成分データを、成分データとして成分データリスト６０４に保存し、該成分データを他プロセスに送信する。図１４では例えば、分割頂点Ｙ１から同Ｙ２へ一時成分データを送信して、Ｙ２は受信した一時成分データとＹ２の一時成分データを和算しＹ３へ送信する。その後、同様にＹ３からＹ４へ送信する。そして次に、Ｙ４が最後の分割頂点であるから、一時成分データを成分データとしてプロセス１３０４の成分データリスト６０４に保存する。その後、Ｙ４からＹ３へ成分データを送信し、Ｙ３はすでに一時成分データを加算済みのため、受信した成分データを自プロセス１３０３の成分データリスト６０４に保存する。同様にＹ３からＹ２へ、Ｙ２からＹ１へ行う。このように、デイジーチェーンのように各プロセスを一通り通ることで、分割頂点同期処理を実行できる。以上から、実施例４は通信回数を削減する効果を持つ。
【符号の説明】
【００５３】
４１１〜４１３：プロセス、５００：情報処理システム、５０１−１〜３：計算ノード、５０２：ストレージシステム、５０３：ネットワークシステム、５０４：プロセッサユニット、５０５−１〜２：ＣＰＵ、５０６：通信ユニット、５０７：メモリユニット、５０８：バス、６００−１〜３：メモリ空間、６０１：頂点接続情報、６０２：分割頂点リスト、６０３：分割頂点接続情報、６０４：成分データ、６０５：送信キュー。
【図１】
2014010007.tif 000009
【図２】
2014010007.tif 000010
【図３】
2014010007.tif 000011
【図４】
2014010007.tif 000012
【図５】
2014010007.tif 000013
【図６】
2014010007.tif 000014
【図７】
2014010007.tif 000015
【図８】
2014010007.tif 000016
【図９】
2014010007.tif 000017
【図１０】
2014010007.tif 000018
【図１１】
2014010007.tif 000019
【図１２】
2014010007.tif 000020
【図１３】
2014010007.tif 000021
【図１４】
2014010007.tif 000022
【手続補正書】
【提出日】平成27年11月20日(2015.11.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムでのグラフ処理方法であって、
第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、
第２プロセスに割当てられている第２メモリ空間に前記第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置し、
前記第１プロセスでの前記第１グラフ頂点についての第１演算結果と、前記第２プロセスでの前記第１グラフ頂点の第２演算結果とを、前記第１プロセスと前記第２プロセスとが共有し、
前記第１プロセスは前記第２演算結果に基づいて演算を実行し、前記第２プロセスは前記第１演算結果に基づいて演算を実行することを特徴とするグラフ処理方法。
【請求項２】
請求項１に記載のグラフ処理方法において、
前記第１プロセスは、前記第１グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行い、
前記第２プロセスは、前記第２グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行うことを特徴とするグラフ処理方法。
【請求項３】
請求項１または請求項２に記載のグラフ処理方法において、
前記複数のプロセスの全てに、前記第１グラフ頂点の情報が配置されていることを特徴とするグラフ処理方法。
【請求項４】
請求項１乃至３いずれかに記載のグラフ処理方法において、
前記第１グラフ頂点は、ハブ頂点であることを特徴とするグラフ処理方法。
【請求項５】
請求項４に記載のグラフ処理方法において、
前記第１グラフ頂点群には、通常頂点が含まれることを特徴とするグラフ処理方法。
【請求項６】
請求項１乃至５いずれかに記載のグラフ処理方法において、
前記グラフ処理は、ランダムウォークによる主成分ベクトルの計算であることを特徴とするグラフ処理方法。
【請求項７】
請求項１乃至６いずれかに記載のグラフ処理方法において、
前記第１プロセスは、前記第２演算結果を前記第１演算結果に加算し、
前記第２プロセスは、前記第１演算結果を前記第２演算結果に加算することを特徴とするグラフ処理方法。
【請求項８】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムであって、
第１プロセスに割当てられている第１メモリ空間に第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第１グラフ頂点群の情報を配置し、第２プロセスに割当てられている第２メモリ空間に前記第１グラフ頂点の情報および前記第１グラフ頂点に接続されている第２グラフ頂点群の情報を配置する手段と、
前記第１プロセスでの前記第１グラフ頂点についての第１演算結果と、前記第２プロセスでの前記第１グラフ頂点の第２演算結果とを、前記第１プロセスと前記第２プロセスとが共有する手段と、
前記第１プロセスは前記第２演算結果に基づいて演算を実行し、前記第２プロセスは前記第１演算結果に基づいて演算を実行する手段とを有することを特徴とする情報処理システム。
【請求項９】
請求項８に記載の情報処理システムにおいて、
前記第１プロセスは、前記第１グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行い、
前記第２プロセスは、前記第２グラフ頂点群の情報に基づいて前記第１グラフ頂点についての演算を行うことを特徴とする情報処理システム。
【請求項１０】
請求項８または９に記載の情報処理システムにおいて、
前記第１グラフ頂点は、ハブ頂点であることを特徴とする情報処理システム。
【請求項１１】
請求項１０に記載の情報処理システムにおいて、
前記第１グラフ頂点群には、通常頂点が含まれることを特徴とする情報処理システム。
【国際調査報告】
2014010007.tif 000023
2014010007.tif 000024
2014010007.tif 000025
2014010007.tif 000026