(57)【要約】  グラフ処理において、ハブ頂点の出力エッジ処理負荷がボトルネックとなり、優れた並列処理スケーラビリティを有する並列計算機システムを提供できないという課題がある。  本発明では、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第１プロセスに割当てられている第１メモリ空間にグラフ頂点の情報を配置し、該グラフ頂点のエッジの情報を、第２プロセスに割当てられている第２メモリ空間に配置することで、前述の課題を解決する。
2013145001.tif 000002
【特許請求の範囲】
【請求項１】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムでのグラフ処理方法であって、
第１プロセスに割当てられている第１メモリ空間にグラフ頂点の情報を配置し、
前記グラフ頂点のエッジの情報を、第２プロセスに割当てられている第２メモリ空間に配置することを特徴とするグラフ処理方法。
【請求項２】
請求項１に記載のグラフ処理方法において、
前記第１プロセスは、前記グラフ頂点が出力エッジ処理対象である場合に、
前記グラフ頂点が出力エッジ処理対象であることを通知するパケットを、前記第２プロセスに送信することを特徴とするグラフ処理方法。
【請求項３】
請求項２に記載のグラフ処理方法において、
前記第２プロセスは、前記パケットを受信した場合、
前記エッジの情報に基づいてエッジ処理を実行し、
前記エッジ処理の完了を前記第１プロセスに通知することを特徴とするグラフ処理方法。
【請求項４】
請求項１に記載のグラフ処理方法において、
前記エッジの情報の配置の際に、
前記グラフ頂点の次数の情報に基づいて、前記エッジの情報の配置を行うことを特徴とするグラフ処理方法。
【請求項５】
請求項１に記載のグラフ処理方法において、
前記エッジの情報の配置の際に、
前記グラフ頂点の次数が所定の値よりも大きい場合に、
前記グラフ頂点のエッジの情報を前記第２メモリ空間に配置することを特徴とするグラフ処理方法。
【請求項６】
請求項１に記載のグラフ処理方法において、
前記第１メモリ空間に、前記エッジの情報の配置に関する情報を記憶することを特徴とするグラフ処理方法。
【請求項７】
請求項１に記載のグラフ処理方法において、
前記グラフ頂点はハブ頂点であることを特徴とするグラフ処理方法。
【請求項８】
それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムであって、
ストレージに記憶されているグラフ構造データを読み出し、
第１プロセスに割当てられている第１メモリ空間に前記グラフ構造データの内のグラフ頂点の情報を配置し、
前記グラフ頂点のエッジの情報を、第２プロセスに割当てられている第２メモリ空間に配置し、
前記グラフ構造データについてグラフ処理を実行することを特徴とする情報処理システム。
【請求項９】
請求項８に記載の情報処理システムにおいて、
前記第１プロセスは、前記グラフ頂点が出力エッジ処理対象である場合に、
前記グラフ頂点が出力エッジ処理対象であることを通知するパケットを、前記第２プロセスに送信することを特徴とする情報処理システム。
【請求項１０】
請求項９に記載の情報処理システムにおいて、
前記第２プロセスは、前記パケットを受信した場合、
前記エッジの情報に基づいてエッジ処理を実行し、
前記エッジ処理の完了を前記第１プロセスに通知することを特徴とする情報処理システム。
【請求項１１】
請求項８に記載の情報処理システムにおいて、
前記エッジの情報の配置の際に、
前記グラフ頂点の次数の情報に基づいて、前記エッジの情報の配置を行うことを特徴とする情報処理システム。
【請求項１２】
請求項８に記載の情報処理システムにおいて、
前記エッジの情報の配置の際に、
前記グラフ頂点の次数が所定の値よりも大きい場合に、
前記グラフ頂点のエッジの情報を前記第２メモリ空間に配置することを特徴とする情報処理システム。
【請求項１３】
請求項８に記載の情報処理システムにおいて、
前記第１メモリ空間に、前記エッジの情報の配置に関する情報を記憶することを特徴とする情報処理システム。
【請求項１４】
請求項８に記載の情報処理システムにおいて、
第１計算ノードと、
第２計算ノードと、
前記第１計算ノードと前記第２計算ノードを接続するネットワーク装置と、を有し、
前記第１プロセスが前記第１計算ノードで実行され、
前記第２プロセスが前記第２計算ノードで実行されることを特徴とする情報処理システム。
【請求項１５】
請求項８に記載の情報処理システムにおいて、
第１ＣＰＵと第２ＣＰＵとを備える情報処理装置を有し、
前記第１プロセスが前記第１ＣＰＵで実行され、
前記第２プロセスが前記第２ＣＰＵで実行されることを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフ処理を実行する情報処理システムとその処理方法に関する。
【背景技術】
【０００２】
インターネットなどの通信技術の進歩とストレージ技術向上に伴う記録密度増大により、企業や個人が扱うデータ量が大きく増加し、近年はその大規模なデータの繋がり（ネットワークとも呼ばれる）を解析することが重要になってきた。特に、人間関係などの自然界で生じるデータの繋がりには、スケールフリーと呼ばれる特性を有するグラフが多く、このスケールフリー特性を有する大規模グラフの解析が重要になってきた（特許文献１）。【０００３】
グラフ解析を高速に行う従来技術として、グラフの各頂点を、各頂点から出ていくエッジの全てを含めて、それぞれ単一のプロセスに配置し、並列処理する技術が、非特許文献１に開示されている。また、グラフ処理は一つの頂点あたりの処理の規模が小さく、一つの頂点の処理に着目するとメモリアクセス時間が処理時間の大部分を占めることを課題と捉え、メモリアクセスの度に処理対象頂点を切り替えることでメモリアクセス時間を隠蔽するマルチスレッド処理方式が、非特許文献２に開示されている。その他、大規模な並列処理のプログラミングはプログラマ（並列計算機システムのユーザとも表現できる）に大きな負担を課すことから、プログラマが容易にグラフ解析のプログラムコードを記述し、実行可能とするために、ＢＳＰ（ＢＳＰ：Ｂｕｌｋ  Ｓｙｎｃｈｒｏｎｏｕｓ  Ｐａｒｒａｌｌｅｌ）モデルをベースとしたプログラミングモデルが一般的に用いられており、例えばＢＳＰモデルを用いたグラフ解析フレームワークが非特許文献３に開示されている。ＢＳＰモデルの処理方式は主に頂点ごとに行う、「入力エッジ処理」、「頂点情報更新処理」、「出力エッジ処理」の３つの処理と、全ての頂点に対して前記３つの処理が完了するまで待つ「全体同期処理」からなり、これらを繰り返すことで幅優先探索による最短経路問題やページランク問題を解くことが可能である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３１８８８４号公報
【非特許文献】
【０００５】
【非特許文献１】ダグラス・グレガー（Ｄｏｕｇｌａｓ  Ｇｒｅｇｏｒ）、アンドルー・ラムスデン（Ａｎｄｒｅｗ  Ｌｕｍｓｄａｉｎｅ）、「分散メモリ並列計算のための順次グラフアルゴリズムの排除（Ｌｉｆｔｉｎｇ  ｓｅｑｕｅｎｔｉａｌ  ｇｒａｐｈ  ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｄｉｓｔｒｉｂｕｔｅｄ−ｍｅｍｏｒｙ  ｐａｒａｌｌｅｌ  ｃｏｍｐｕｔａｔｉｏｎ）」、「ＯＯＰＳＬＡ’０５第２０回オブジェクト指向プログラミング、システム、言語、アプリケーションに関するＡＣＭ  ＳＩＧＰＬＡＮ年会紀要（ＯＯＰＳＬＡ  ’０５  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０ｔｈ  ａｎｎｕａｌ  ＡＣＭ  ＳＩＧＰＬＡＮ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｏｂｊｅｃｔ−ｏｒｉｅｎｔｅｄ  ｐｒｏｇｒａｍｍｉｎｇ，  ｓｙｓｔｅｍｓ，  ｌａｎｇｕａｇｅｓ，  ａｎｄ  ａｐｐｌｉｃａｔｉｏｎｓ」、エイシーエムニューヨーク（ＡＣＭ  Ｎｅｗ  Ｙｏｒｋ）、（米国）、２００５年、ｐ．４２３−４３７
【非特許文献２】アンドルー・ラムスデン（Ａｎｄｒｅｗ  Ｌｕｍｓｄａｉｎｅ）、他３名、「並列グラフ処理の挑戦（Ｃｈａｌｌｅｎｇｅｓ  ｉｎ  Ｐａｒａｌｌｅｌ  Ｇｒａｐｈ  Ｐｒｏｃｅｓｓｉｎｇ）」、パラレル  プロセッシング  レターズ（Ｐａｒａｌｌｅｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｌｅｔｔｅｒｓ）、２００７年３月、第１７巻、第１号、ｐ．５−２０
【非特許文献３】グジェゴジ・マレビチ（Ｇｒｚｅｇｏｒｚ  Ｍａｌｅｗｉｃｚ）、他６名、「プレーゲル：大規模グラフ処理用システム（Ｐｒｅｇｅｌ：  ａ  ｓｙｓｔｅｍ  ｆｏｒ  ｌａｒｇｅ−ｓｃａｌｅ  ｇｒａｐｈ  ｐｒｏｃｅｓｓｉｎｇ）」、ＳＩＧＭＯＤ’１０データマネジメント国際会議２０１０紀要（ＳＩＧＭＯＤ’１０  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ２０１０  ｉｎｔｅｒｎａｔｉｏｎａｌ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｍａｎａｇｅｍｅｎｔ  ｏｆ  ｄａｔａ）、エイシーエムニューヨーク（ＡＣＭ  Ｎｅｗ  Ｙｏｒｋ）、（米国）、２０１０年、ｐ．１３５−１４６
【発明の概要】
【発明が解決しようとする課題】
【０００６】
スケールフリー特性を有するグラフとは次数分布がべき乗に従うグラフであり、少数のエッジを有する多数の頂点と多数のエッジ（大きな次数とも表現する）を有する少数の頂点（これをハブ頂点と称する）で構成される。スケールフリー特性を有するグラフでは、平均次数はグラフ規模に依存せず小さいが、グラフにおける最大次数を有するハブ頂点の次数はグラフ規模が大きくなるほど大きくなる特徴がある。最大次数を有するハブ頂点の次数の大きさは、グラフ内全頂点数の数％に上ることがある。ここで、前述したＢＳＰモデルの特に出力エッジ処理に着目すると、その処理量は処理対象頂点が有する次数に比例する。そのため、スケールフリー特性を有するグラフをより高速に処理するために計算ノードの並列数を増加させていくと、１つのハブ頂点の出力エッジ処理時間が計算ノード単位での平均出力エッジ処理時間を超えてしまい、そのハブ頂点の出力エッジ処理時間が原因で並列処理による高速化効果を得られなくなる課題がある。【０００７】
例えば、４兆個の頂点からなるグラフにおいて、頂点の平均次数は２７本であり、グラフ全体の５％の頂点に繋がるハブ頂点があり、出力エッジ処理におけるエッジあたりの処理時間が２０ナノ秒であり、全ての頂点が出力エッジ処理対象であるとする。この処理対象を１万計算ノード並列で解く場合、期待する１計算ノードあたりの平均出力エッジ処理時間は（４兆）×（２７本）×（２０ナノ秒）／（１００００ノード）≒２１６秒であるのに対し、ハブ頂点単体の出力エッジ処理時間は（４兆）×（５％）×（２０ナノ秒）＝４０００秒であり、並列処理の高速化効果が頭打ちとなってしまうことが分かる。なお、上記の条件では５００並列程度がシステムの並列処理スケーラビリティ限界であり、それ以上並列数を増やしても処理を高速化することは望めない。【０００８】
以上のように、大規模なスケールフリーの特性を有するグラフ処理になるほど、従来技術に係る頂点レベルの並列処理方式では、ハブ頂点の出力エッジ処理負荷がボトルネックとなり、優れた並列処理スケーラビリティを有する情報処理システムを提供できないという課題がある。
【課題を解決するための手段】
【０００９】
本発明では、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第１プロセスに割当てられている第１メモリ空間にグラフ頂点の情報を配置し、該グラフ頂点のエッジの情報を、第２プロセスに割当てられている第２メモリ空間に配置することで、前述の課題を解決する。
【発明の効果】
【００１０】
本発明により、優れた並列処理スケーラビリティの確保が可能となる。
【図面の簡単な説明】
【００１１】
【図１（ａ）】解析対象となる入力グラフの例を示す図である。
【図１（ｂ）】本発明にかかるグラフデータ配置の例を示す図である。
【図２】本発明の実施例である並列計算機システムの論理的なシステム構成を示す図である。
【図３（ａ）】ハブ部分エッジ割当て先情報の例を示す図である。
【図３（ｂ）】ワーカプロセス仮想頂点保有状況情報の例を示す図である。
【図４】通常頂点情報とハブ頂点情報の構成とその管理方法の例を示す図である。
【図５】仮想頂点情報の構成とその管理方法の例を示す図である。
【図６】保有ハブ頂点リスト情報の例を示す図である。
【図７】仮想頂点ＩＤ変換テーブルの例を示す図である。
【図８】グラフ解析処理における入力エッジ処理と頂点情報更新処理と出力エッジ処理の位置づけを示す図である。
【図９】入力グラフ情報の構成とその管理方法の例を示す図である。
【図１０】本発明の実施例である並列計算機システムの物理的なシステム構成の例を示す図である。
【図１１】全体処理フローチャートの例を示す図である。
【図１２】入力データの配置方式の例を示す図である。
【図１３】グローバル頂点ＩＤの構成例を示す図である。
【図１４】入力データ配置処理における通常頂点を読出す場合の動作例を示す図である。
【図１５】入力データ配置処理におけるハブ頂点を読出す場合の動作例を示す図である。
【図１６】入力データ配置処理におけるマスタプロセスの動作例を示すフローチャートである。
【図１７（ａ）】入力データ配置処理におけるワーカプロセスの動作例を示すフローチャートである。
【図１７（ｂ）】入力データ配置処理におけるワーカプロセスの動作例を示すフローチャートである。
【図１８】グラフ計算処理における通常頂点を処理する場合の動作例を示す図である。
【図１９】グラフ計算処理におけるハブ頂点を処理する場合の動作例を示す図である。
【図２０】グラフ計算処理におけるマスタプロセスの動作例を示すフローチャートである。
【図２１（ａ）】グラフ計算処理におけるワーカプロセスの動作例を示すフローチャートである。
【図２１（ｂ）】グラフ計算処理におけるワーカプロセスの動作例を示すフローチャートである。
【図２２（ａ）】部分エッジ処理要求のパケット構造の第１の例を示す図である。
【図２２（ｂ）】部分エッジ処理要求のパケット構造の第２の例を示す図である。
【発明を実施するための形態】
【実施例１】
【００１２】
本発明のグラフ処理方法および情報処理システムについて図１（ａ）および図１（ｂ）を用いて説明する。図１（ａ）は、本発明での解析対象となる入力グラフの例を示す図である。図１（ｂ）は、本発明での、入力グラフの複数プロセスへの配置の例を示す図である。【００１３】
図１（ａ）には、頂点が丸印で、有向エッジが頂点を結ぶ矢印で表現されている。ここで、次数が５以上の頂点をハブ頂点であると定義し、次数が４以下の頂点を通常頂点であると定義すると、グラフ１の頂点Ｈは５つ以上のエッジを有するのでハブ頂点に該当する。ここでは、頂点Ｓをソースとし、頂点Ｔをターゲットとする幅優先探索による最短経路探索を行うと仮定する。このとき、第１の探索レベルでは頂点Ｓのみがアクティブであり、頂点Ｓは頂点Ａと頂点Ｂと頂点Ｈの３個の頂点に経路情報を送信する。第２の探索レベルでは頂点Ａと頂点Ｂと頂点Ｈがアクティブであり、頂点Ａは１個の頂点に、頂点Ｂは１個の頂点に、頂点Ｈは１２個の頂点にそれぞれ経路情報を送信する。このとき、頂点Ｈの出力エッジ処理は頂点Ａと頂点Ｂに対し、１２倍の処理量を必要とし、負荷が不均一となり、これが並列処理スケーラビリティを低下させる原因となる。【００１４】
そこで、本発明に係る情報処理システムでは、図１（ｂ）のグラフ分割イメージのようにハブ頂点である頂点Ｈを始点とするエッジを分割し、分割したエッジを仮想的な頂点である仮想頂点Ｈ１、Ｈ２、Ｈ３へそれぞれ割当て、さらにこれら仮想頂点をプロセス１０１、プロセス１０２、プロセス１０３へそれぞれ割当てる。ここで、プロセスとはオペレーティングシステム（ＯＳ）からメモリ空間（記憶領域とも表現できる）を割当てられた動作中のインスタンスであり、プログラムの実行単位である。【００１５】
このときの処理負荷分散状況を図１（ｂ）の接続先頂点情報を用いて説明する。メモリ空間１１１にはプロセス１０１が有する頂点の接続先頂点情報が格納されており、例えば、頂点Ｓが頂点Ａ、頂点Ｂ、頂点Ｈへリンクしている情報１２１が格納されている。情報１２１は、頂点Ｓがアクティブになった場合には、頂点Ａ、頂点Ｂ、および頂点Ｈへの出力エッジ処理を行う必要があることを示している。図１（ｂ）では、プロセス１０１のメモリ空間１１１には仮想頂点Ｈ１が、プロセス１０２のメモリ空間１１２には仮想頂点Ｈ２が、プロセス１０３のメモリ空間１１３には仮想頂点Ｈ３が、接続先頂点の仮想的な親として接続先頂点情報にそれぞれ配置されており、頂点Ｈの出力エッジ処理負荷が分散されている。【００１６】
ここで、それぞれ破線で示した仮想頂点および仮想頂点への仮想的なエッジの処理については後述の特殊な処理が行われる。すなわち、プロセス１０２にある頂点Ｈについては入力エッジ処理と頂点情報更新処理は通常頂点と同様に行われるが、仮想頂点Ｈ１、仮想頂点Ｈ２、および仮想頂点Ｈ３それぞれへの出力エッジ処理は後述の特殊な処理となる。また、仮想頂点Ｈ１、仮想頂点Ｈ２、および仮想頂点Ｈ３それぞれの入力エッジ処理及び頂点情報更新処理も後述の特殊な処理となる。【００１７】
以上に説明した手法により、本発明にかかる情報処理システムはスケールフリー特性を有するグラフの解析処理においても優れた並列処理スケーラビリティを達成することができる。すなわち、エッジについてグラフを分割し、分割したエッジ（以下、部分エッジと称する）を各プロセスに割り当てることによって、プロセス毎の処理負荷の均等化を図ることができる。【００１８】
以下、本発明の情報処理システムの実施例として、並列計算機システム１０を詳細に説明する。なお、以降の説明中に本発明の情報処理システムの処理対象のグラフ処理の例として最短経路探索の例をしばしば示すが、説明の簡単化のために、特に断らない限り全てエッジの重みがない（またはエッジ重みが均一とも表現できる）グラフによる幅優先探索を用いた最短経路探索であるとする。【００１９】
図２は、並列計算機システム１０の論理的なシステム構成の例である。並列計算機システム１０は、マスタプロセス２１０と、１つ以上のワーカプロセス２２０と、ネットワーク２５０と、グラフ情報格納部２４０とを有する。図２では、ワーカプロセス２２０は、ワーカプロセス２２０−１、ワーカプロセス２２０−２、およびワーカプロセス２２０−３の３つしか示されていないが、これは説明を簡単にするためであり、グラフ処理の量などに応じてワーカプロセスの数の増減が可能である。以下の説明においても、説明の簡単化のために、同様に少ないワーカプロセス数で説明する。また、複数のワーカプロセスを一つの群として扱う場合、又は個々のワーカプロセスを区別する必要がない場合は、ワーカプロセス２２０と表現する。一方、ワーカプロセスを区別する場合は、ワーカプロセス２２０−１をワーカプロセス１、ワーカプロセス２２０−２をワーカプロセス２、ワーカプロセス２２０−３をワーカプロセス３という形に省略して表現することとする。【００２０】
マスタプロセス２１０は、ワーカプロセス２２０に対して初期データ読出しの指示や処理開始の指示などを行うプロセスであり、ハブ頂点閾値情報２１１と、ハブ部分エッジ割当て先情報２１２と、ワーカプロセス仮想頂点保有状況情報２１３と、ハブ部分エッジ割当て先決定手段２１４と、をマスタプロセス２１０に与えられているメモリ空間上に有する。ハブ頂点閾値情報２１１は、エッジ分割の対象となる頂点かどうか、すなわち本実施例ではハブ頂点かどうかを判定するための閾値情報であり、頂点が有する次数に比例する量についての閾値の情報であることが好ましい。ハブ頂点閾値情報２１１の例としては、頂点が有する次数についての閾値の情報や、エッジ情報のデータ量の大きさについての情報などがある。本実施例では、頂点が有する次数についての閾値の情報をハブ頂点閾値情報２１１とする例で説明する。【００２１】
ハブ部分エッジ割当て先情報２１２は、ハブ頂点の部分エッジのワーカプロセス２２０への割当て先を管理するための情報である。図３（ａ）に、ハブ頂点とその部分エッジを割当てたワーカプロセス２２０の情報をテーブル化したハブ部分エッジ割当て先情報２１２の例を示す。図３（ａ）の例では、頂点１と頂点３がハブ頂点であり、頂点１の部分エッジ情報はワーカプロセス１とワーカプロセス２へ割当てられ、頂点３の部分エッジ情報はワーカプロセス１とワーカプロセス３へ割当てられていることを示している。【００２２】
ワーカプロセス仮想頂点保有状況情報２１３は、ワーカプロセス２２０の各プロセスが保有する仮想頂点情報を管理するための情報である。図３（ｂ）に、ワーカプロセス情報（以下、ワーカプロセスＩＤと称する）とハブ頂点の頂点識別情報（以下、頂点ＩＤと称する）をテーブル化したワーカプロセス仮想頂点保有状況情報２１３の例を示す。図３（ｂ）の例は、ワーカプロセス１は頂点１と頂点３の仮想頂点の情報を保有し、ワーカプロセス２は頂点１の仮想頂点の情報を保有し、ワーカプロセス３は頂点３の仮想頂点の情報を保有していることを示している。ワーカプロセスＩＤおよび頂点ＩＤは、それぞれをワーカプロセス識別番号および頂点識別番号とし、１から始まる自然数の連続番号とすることができる。なお、ハブ部分エッジ割当て先情報２１２とワーカプロセス仮想頂点保有状況情報２１３は情報量の点では同一であり、どちらか一方のみを有する実施の形態もとりえる。【００２３】
ハブ部分エッジ割当て先決定手段２１４は、ワーカプロセス２２０の中から、ハブ頂点の部分エッジの割当て先のワーカプロセスを決定する手段である。ハブ部分エッジ割当て先決定手段２１４は、一つの実施の形態としては例えば、ワーカプロセス仮想頂点保有状況情報２１３を参照して、ワーカプロセス２２０の内で最も保有する仮想頂点数が少ないワーカプロセスに優先的に割当てを行う。【００２４】
ワーカプロセス２２０は、グラフ計算処理を実施するプロセスであり、ハブ頂点閾値情報２１１と、通常頂点情報２２１と、ハブ頂点情報２２２と、仮想頂点情報２２３と、保有ハブ頂点リスト情報２２４と、仮想頂点ＩＤ変換テーブル２２５と、ハブ頂点識別手段２２６と、入力エッジ処理手段２２７と、頂点情報更新手段２２８と、出力エッジ処理手段２２９と、部分エッジ処理手段２３０と、をワーカプロセス２２０のそれぞれに与えられているメモリ空間上に有する。なお、ハブ頂点閾値情報２１１はマスタプロセス２１０のハブ頂点閾値情報２１１と同一の情報である。【００２５】
通常頂点情報２２１は、解析対象グラフにおけるハブ頂点ではない頂点（これを通常頂点と称する）の頂点情報であり、図４に示すように、接続頂点数情報４１０と、頂点状態情報４２０と、接続先頂点情報４３０とを含む。接続頂点数情報４１０は、各頂点を始点として他の頂点へ向かうエッジ（以下、これを出力エッジと称する）の数、すなわち次数の情報である。頂点状態情報４２０は、グラフ解析における頂点の状態を示す情報であり、例えば頂点Ｓを始点とし、頂点Ｔへ至る最短経路探索問題では、頂点Ｓからある頂点までの最短経路情報と、既に当該頂点が訪問済みであるか否かを示す訪問状態情報などが該当する。接続先頂点情報４３０は、各頂点がリンクする先の頂点の頂点ＩＤが含まれる情報である。例えば、ある頂点がｎｉ個の頂点にリンクするならば、当該頂点については、接続先頂点情報４３０にｎｉ個の頂点ＩＤが含まれる。図４では、接続先頂点情報４３０は、接続先頂点ＩＤ配列４３１を含み、接続先頂点ＩＤ配列４３１の先頭アドレスを指す形態の実装例を示している。【００２６】
ハブ頂点情報２２２は、解析対象グラフにおけるハブ頂点の頂点情報であり、図４に示すように、接続頂点数情報４１０と、頂点状態情報４２０と、エッジ分割数情報４５０と、エッジ割当て先情報４６０とを含む。接続頂点数情報４１０と頂点状態情報４２０は、通常頂点情報２２１で説明したものと同一であるため、説明は省略する。エッジ分割数情報４５０は、ハブ頂点が有する出力エッジ群をいくつに分割したかを示す情報であり、あるハブ頂点がいくつの仮想頂点とリンクしているかという情報に対応する。エッジ割当て先情報４６０は、各ハブ頂点の出力エッジが割当てられている先のワーカプロセスＩＤを含み、あるハブ頂点の出力エッジをｎｈ個のワーカプロセス２２０に分割して割当てたならば、当該ハブ頂点についてｎｈ個のワーカプロセスＩＤを含むことになる。図４では、エッジ割当て先情報４６０は、部分割当て先情報配列４６１を含み、部分割当て先情報配列４６１の先頭アドレスを指す形態の実装例を示している。また、エッジ割当て先情報４６０は、図１（ｂ）に破線で示した仮想頂点へ向かう仮想的な出力エッジの情報に対応する情報といえる。【００２７】
ここで、通常頂点情報２２１とハブ頂点情報２２２は様々な形態で管理可能であるが、一例を示すならば、ワーカプロセス２２０が保有する頂点情報を保有頂点情報４０１のように頂点ＩＤを要素とする配列構造で管理し、ｊ番目の要素には頂点ｊの頂点情報の構造体の先頭アドレスが格納されるとし、通常頂点である頂点ｉについては、通常頂点ｉの通常頂点情報２２１の先頭アドレスが格納され、ハブ頂点である頂点ｈについては、ハブ頂点ｈのハブ頂点情報２２２の先頭アドレスが格納されるといった形態の実装が可能である。【００２８】
仮想頂点情報２２３は、ワーカプロセス２２０が保有する仮想頂点の頂点情報であり、図５に示すように、部分接続頂点数情報５１０、部分接続先頂点情報５２０とを含む。部分接続頂点数情報５１０は、仮想頂点の出力エッジ数の情報である。部分接続先頂点情報５２０は、仮想頂点がリンクしている先の頂点ＩＤであり、仮想頂点がｎｉ個の頂点にリンクしているならば、ｎｉ個の頂点ＩＤを含む。図５では、部分接続先頂点情報５２０は、接続先頂点ＩＤ配列５２１を含み、接続先頂点ＩＤ配列５２１の先頭アドレスを指す形態の実装例を示している。【００２９】
ここで、仮想頂点情報２２３は、様々な形態で管理可能であるが、一例を示すならば、ワーカプロセス２２０が保有する仮想頂点の情報を保有仮想頂点情報５０１のように仮想頂点ＩＤを要素とする配列構造で管理し、ｉ番目の要素には仮想頂点ｉの仮想頂点情報２２３の構造体の先頭アドレスが格納される形態の実装が可能である。【００３０】
保有ハブ頂点リスト情報２２４は、ワーカプロセス２２０が保有するハブ頂点の頂点ＩＤであり、図６に示すように、各ワーカプロセス２２０が保有するハブ頂点ＩＤが格納されている。図６は、ワーカプロセス２２０の内の一つが、ハブ頂点として頂点１と頂点３を保有している例を示している。【００３１】
仮想頂点ＩＤ変換テーブル２２５は、ワーカプロセス２２０に割当てられた部分エッジの親となるハブ頂点の頂点ＩＤと、当該ワーカプロセス２２０上での仮想頂点としてのＩＤとを対応づけるテーブルであり、図７に示すようなテーブルである。例えば、頂点１と頂点３がハブ頂点であり、その部分エッジがワーカプロセス２２０の内の一つへ割当てられており、該ワーカプロセスは図５の保有仮想頂点情報５０１のように仮想頂点を管理するとする。このとき、保有仮想頂点情報５０１の配列要素は図５のように連続な値を設定して管理し易いのに対し、ハブ頂点の頂点ＩＤは、ハブ頂点が全頂点の内の一部の頂点であるために連続した値で管理しづらい。ここで、不連続な値を配列要素番号として用いると、メモリ空間の利用効率が非常に悪くなる。これに対し、ハブ頂点の頂点ＩＤを、ワーカプロセス２２０上で連続の値で管理し易い仮想頂点ＩＤに変換することで、メモリ空間の利用効率を劇的に高めることが可能となる。このように、メモリ空間の利用効率を高めるために、ワーカプロセス２２０は、仮想頂点ＩＤ変換テーブル２２５を保有する。図７は、頂点１の部分エッジを仮想頂点１の出力エッジとし、頂点３の部分エッジを仮想頂点２の出力エッジとする変換テーブルの例を示している。【００３２】
ハブ頂点識別手段２２６は、識別対象の頂点が通常頂点であるかハブ頂点であるかを識別する手段であり、基本的には保有ハブ頂点リスト情報２２４と識別対象の頂点の頂点ＩＤを比較して識別するが、次数情報をハブ頂点閾値情報２１１とする場合には、識別対象の頂点の接続頂点数情報４１０とハブ頂点閾値情報２１１を比較して識別することも可能である。本実施例では、保有ハブ頂点リスト情報２２４を参照して識別するとして説明する。【００３３】
入力エッジ処理手段２２７は、図８に丸印で示した頂点へ向かう複数の矢印で示すように、他の頂点から入力される情報の処理を行う手段であり、エッジ重み無しの最短経路探索問題の例では、複数のエッジからのアクセスを１つに纏める処理などを処理対象にする。その他、エッジ重み有りの最短経路探索問題の例では、経路長の最小値を算出する処理などが処理対象に該当する。【００３４】
頂点情報更新手段２２８は、頂点状態情報４２０を更新する手段であり、最短経路探索問題の例では、入力エッジ処理手段２２７で受け取った最短経路情報に、入力エッジ処理手段２２７の処理対象の頂点の頂点ＩＤを追加する更新処理や、入力エッジ処理手段２２７の処理対象の頂点の訪問状態情報の更新処理などを処理対象にする。【００３５】
出力エッジ処理手段２２９は、図８に丸で示した頂点間を結ぶ矢印で示すように、他の頂点への情報出力処理を行う手段であり、最短経路探索問題の例では、頂点情報更新手段２２８によって更新した最短経路情報を出力エッジ先の全ての頂点へ送信する処理などを処理対象とする。【００３６】
部分エッジ処理手段２３０は、仮想頂点情報２２３に対する出力エッジ処理を行う。部分エッジ処理手段２３０は、基本的には出力エッジ処理手段２２９と同一の処理を行うが、違いとしては、出力エッジ先の頂点へ送信するデータの基となる情報が他のワーカプロセス２２０から送られてくる点などがある。【００３７】
ネットワーク２５０は、マスタプロセス２１０と、ワーカプロセス２２０の各プロセスと、グラフ情報格納部２４０とを繋ぐ要素であり、ＰＣＩ  ＥｘｐｒｅｓｓやＩｎｆｉｎｉＢａｎｄなどの様々な通信プロトコルを適用可能である。【００３８】
グラフ情報格納部２４０は、記憶空間（ストレージ空間とも称する）であり、解析対象となる入力グラフ情報２４１が格納される。図９に、入力グラフ情報２４１の格納の形式の例を示す。ここでは、頂点ＩＤを要素とする配列である入力グラフ頂点情報９０１でグラフに含まれる頂点を管理し、各頂点には接続頂点数情報４１０と接続先頂点情報４３０を頂点情報として割当てる形式で入力グラフ情報２４１を格納する例を示している。また、入力グラフ頂点情報９０１のｉ番目の要素（頂点ｉ）には、頂点ｉの頂点情報の構造体の先頭アドレスが格納されている。なお、重み有りエッジなどの場合には、頂点情報の構造体に接続先頂点情報４３０に対応するエッジ重み情報（図示せず）が追加されるが、本実施例では説明を簡単化するため、重み無しエッジであるとして接続先頂点情報４３０のみを扱う。【００３９】
次に、並列計算機システム１０の物理的なシステム構成の例を、図１０を用いて説明する。並列計算機システム１０は、１つ以上の計算ノード１０１０と、ストレージシステム１０２０と、ネットワーク１０３０とを有する。図１０では、並列計算機システム１０が、計算ノード１０１０として、計算ノード１０１０−１、１０１０−２、および１０１０−３の３つの計算ノードを含む例を示した。【００４０】
計算ノード１０１０は、ユーザが記述したプログラムコードを実行する部分であり、プロセッサユニット１０１１と、メモリユニット１０１２と、通信ユニット１０１３と、バス１０１４とを含む。計算ノード１０１０は、例えば、サーバ装置である。プロセッサユニット１０１１は、１つ以上の中央処理装置ＣＰＵ１０１８を有する。図１０の並列計算機システム１０では、プロセッサユニット１０１１が、ＣＰＵ１０１８−１と、ＣＰＵ１０１８−２を有する例を示した。ＣＰＵ１０１８のそれぞれには、図２に示したマスタプロセス２１０又はワーカプロセス２２０が割り当てられる。【００４１】
メモリユニット１０１２は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）などで構成される記憶部である。ＣＰＵ１０１８に割り当てられた各プロセスは、メモリユニット１０１２内に固有のメモリ領域（メモリ空間とも呼ばれる）を割り当てられる。プロセス間でデータを交換する場合は、プロセス間通信が行われる。【００４２】
通信ユニット１０１３は、ネットワーク１０３０を介して他の計算ノード１０１０やストレージシステム１０２０と通信するためのユニットであり、各プロセスのメモリ空間内にある送信バッファの情報を宛先プロセスを有する計算ノード１０１０へ送信する処理や、外部から受信した情報を宛先プロセスの受信バッファへ書き込む処理を行う。但し、宛先プロセスが自計算ノード１０１０内にある場合は、ネットワーク１０３０を介さずにプロセス間通信を行うことができる。バス１０１４は、プロセッサユニット１０１１と、メモリユニット１０１２と、通信ユニット１０１３とをつなぐ計算ノード１０１０内のネットワークである。【００４３】
ストレージシステム１０２０は、図２の入力グラフ情報２４１が格納されているグラフ情報格納部２４０に対応する物理的な装置であり、並列計算機システム１０の内部にあってもよいし、外部にあってもよい。ネットワーク１０３０は、計算ノード１０１０間や計算ノード１０１０とストレージシステム１０２０の間をつなぐ通信路である。ネットワーク１０３０には、ネットワーク装置として、ルータ装置やスイッチなどが含まれ得る。異なる計算ノードに配置されているプロセス間の通信の場合には、ネットワーク１０３０は、図２のネットワーク２５０の物理構成の一部に含まれる。【００４４】
次に、並列計算機システム１０が行うグラフ解析処理の全体動作を、図１１の全体処理フローチャートを用いて説明する。図１１に示すように、並列計算機システム１０が行う処理は、入力データ配置処理Ｓ１１０１、グラフ計算処理Ｓ１１０２、および結果出力処理Ｓ１１０３の３つのステップを有する。【００４５】
入力データ配置処理Ｓ１１０１では、並列計算機システム１０は、グラフ情報格納部２４０から入力グラフ情報２４１を読出し、読み出した情報を各ワーカプロセス２２０に配置する。本実施例では、ハブ頂点閾値情報２１１を次数としているため、ステップＳ１１０１において、所定の次数閾値より大きな次数を有する頂点はハブ頂点として扱われ、ハブ頂点が有するエッジ情報（接続先頂点情報４３０）は分割されて、異なるワーカプロセス２２０に配置される。【００４６】
グラフ計算処理Ｓ１１０２は、グラフ解析のカーネル処理を行う処理ステップである。グラフ計算処理Ｓ１１０２では、並列計算機システム１０は、頂点ごとに入力エッジ処理、頂点情報更新処理、および出力エッジ処理を行い、さらに全体同期処理を行い、これらを繰り返すことで解析結果を得る。【００４７】
結果出力処理Ｓ１１０３は、解析結果を出力する処理ステップである。結果出力処理Ｓ１１０３では、並列計算機システム１０は、表示装置への結果出力や、ファイルとしての結果出力などを行う。【００４８】
以下、本実施の形態の入力データ配置処理Ｓ１１０１とグラフ計算処理Ｓ１１０２について、詳細に説明する。【００４９】
まず、入力データ配置処理Ｓ１１０１を説明する。入力データ配置処理Ｓ１１０１では、並列計算機システム１０は、グラフ情報格納部２４０のストレージ空間にある入力グラフ情報２４１を分割してワーカプロセス２２０へ配置する処理を行う。本実施例に係る入力データ配置処理Ｓ１１０１では、次数が所定値より大きい頂点のエッジ情報が分割され、図１２のように異なるワーカプロセス２２０へ配置される。図１２では、頂点１がハブ頂点であり、頂点１の頂点情報１２００が分割され、ワーカプロセス１には接続頂点数情報１２０１を含むハブ頂点情報１２１１が割当てられ、ワーカプロセス２とワーカプロセス３には分割された接続先頂点情報１２０２、１２０３がそれぞれ割当てられ、ワーカプロセス２とワーカプロセス３が、割り当てられた接続先頂点情報に基づいて仮想頂点情報１２２１、１２３１をそれぞれメモリ空間に保有する例を示している。【００５０】
ここで、グラフ情報格納部２４０の頂点１の頂点ＩＤは入力グラフ情報２４１において唯一の頂点ＩＤ（グローバル頂点ＩＤ）である必要があるのに対し、ワーカプロセス２２０上の頂点１の頂点ＩＤは当該ワーカプロセス２２０上で唯一の頂点ＩＤ（ローカル頂点ＩＤ）であればよい。但し、他のワーカプロセスと通信する際にはグローバル頂点ＩＤで通信する必要がある。そこで、本実施例では、図１３に示すように、グローバル頂点ＩＤ１３０１の下位ビット情報１３０２を当該頂点の頂点情報が配置されるワーカプロセスのワーカプロセスＩＤとし、上位ビット情報１３０３を当該頂点の頂点情報が配置されたワーカプロセス２２０上でのローカル頂点ＩＤとする。このようにすることで、頂点ＩＤを保有頂点情報４０１内で連続した値で管理し易くなり、保有頂点情報４０１を少ないメモリ空間内に格納することができ、さらに、各ワーカプロセスが他のワーカプロセスへ通信する際に自身のワーカプロセスＩＤを下位ビットに追加することでグローバル頂点ＩＤに正しく復元することができ、処理の効率が良くなる。【００５１】
以下、入力データ配置処理Ｓ１１０１のマスタプロセス２１０とワーカプロセス２２０の動作例を、図１４と図１５を用いて説明する。説明を簡単化するために、ワーカプロセス２２０はワーカプロセス１とワーカプロセス２の２つのみを用いて説明をする。また、図１４と図１５の図中にあるマスタプロセスはマスタプロセス２１０に対応し、ストレージはグラフ頂点格納部２４０に対応する。【００５２】
まず、入力データ配置処理Ｓ１１０１の内、通常頂点に関する処理の基本動作を説明するために、ワーカプロセス１へ１つの頂点が割り当てられ、それが通常頂点であった場合の動作例を図１４に示す。まず、マスタプロセスは、ワーカプロセス１へグラフ情報の読出し要求１４０１を送信する。要求を受けたワーカプロセス１は、頂点１の読出し状態１４０２となり、ストレージへ頂点１の接続頂点数情報データ要求１４０３を送信し、ストレージから頂点１の接続頂点数情報１４０４を取得し、頂点１が通常頂点であるかハブ頂点であるかの判定を行い、頂点１が通常頂点であるとの判定結果を得る。その後、ワーカプロセス１は、ストレージへ接続先頂点情報データ要求１４０５を送信し、接続先頂点情報１４０６を取得する。ワーカプロセス１は読出し完了状態１４０７となり、マスタプロセスへ処理完了通知１４０８を送信し、配置処理を完了する。【００５３】
次に、入力データ配置処理Ｓ１１０１の内、ハブ頂点に関する処理の基本動作を説明するために、ワーカプロセス１へ１つの頂点が割り当てられ、それがハブ頂点であった場合の動作例を図１５に示す。まず、マスタプロセスは、ワーカプロセス１へグラフ情報の読出し要求１４０１を送信する。要求を受けたワーカプロセス１は、頂点１の読出し状態１４０２となり、ストレージへ頂点１の接続頂点数情報データ要求１４０３を送信し、ストレージから頂点１の接続頂点数情報１４０４を取得する。ワーカプロセス１は、頂点１が通常頂点であるかハブ頂点であるかの判定を行い、頂点１の接続頂点数が所定閾値より大きいことから頂点１がハブ頂点であるとの判定結果を得る。ワーカプロセス１は、頂点１がハブ頂点であることをマスタプロセスへ通知するハブ頂点通知１５０５を送信する。【００５４】
ハブ頂点通知１５０５を受信したマスタプロセスは、ハブ頂点である頂点１の部分エッジ情報の割当て先を決定する割当て先決定１５０６を行う。ここで、割当て先決定１５０６で決定された割当て先がワーカプロセス１およびワーカプロセス２であったとする。マスタプロセスは、ワーカプロセス１に対して頂点１の部分エッジ１の情報の、ワーカプロセス２に対して頂点１の部分エッジ２の情報の読出し要求１５０７をそれぞれ送信する。ワーカプロセス１およびワーカプロセス２は、それぞれ部分エッジ１読出し状態１５０８−１、部分エッジ２読出し状態１５０８−２となり、ストレージへデータ要求１５０９を送信し、ワーカプロセス１は部分エッジ１の、ワーカプロセス２は部分エッジ２の情報をそれぞれ取得する。ワーカプロセス１およびワーカプロセス２はそれぞれ部分エッジ１読出し完了状態１５１１−１、部分エッジ２読出し完了状態１５１１−２となり、マスタプロセスへ部分エッジ読出し完了通知１５１２を送信し、通知を受けたマスタプロセスは頂点１の頂点情報を保有するワーカプロセス１へ部分エッジ割当て先情報１５１３を送信する。部分エッジ割当て先情報１５１３を受信したワーカプロセス１は、読出し完了状態１４０７となり、マスタプロセスへ処理完了通知１４０８を送信し、配置処理を完了する。【００５５】
以下、図１６、図１７（ａ）、および図１７（ｂ）を用いて、入力データ配置処理Ｓ１１０１におけるマスタプロセス２１０とワーカプロセス２２０の動作をより詳細に説明する。【００５６】
図１６は、入力データ配置処理Ｓ１１０１におけるマスタプロセス２１０の動作を示すフローチャートである。以下、本フローチャートにおける各処理ステップについて詳細に説明する。【００５７】
まず、ステップＳ１６０１にて、マスタプロセス２１０は、各ワーカプロセス２２０へグラフ情報読出し要求１４０１を送信する。グラフ情報読出し要求１４０１には、ハブ頂点閾値情報２１１と、ワーカプロセス２２０がグラフ情報格納部２４０から読出す頂点情報を特定可能とするための情報とが含まれている。本実施例では、グローバル頂点ＩＤ１３０１によって、ワーカプロセス２２０はグラフ情報格納部２４０から読出す頂点情報を特定可能である。【００５８】
ステップＳ１６０２では、マスタプロセス２１０は、何らかの情報を受信するまで受信バッファを確認し、受信したならばステップＳ１６０３にて受信した情報がハブ頂点通知１５０５であるかを判定する。受信した情報がハブ頂点通知１５０５であればステップＳ１６１０へ移行し、そうでなければ、ステップＳ１６２０へ移行する。ステップＳ１６１０では、マスタプロセス２１０は、ハブ部分エッジ割当て先決定手段２１４によって、通知されたハブ頂点の部分エッジの割当て先を決定し、ハブ部分エッジ割当て先情報２１２とワーカプロセス仮想頂点保有状況情報２１３を更新し、ステップＳ１６１１移行する。【００５９】
ここで、ハブ部分エッジ割当て先決定手段２１４は、例えば、ワーカプロセス仮想頂点保有状況情報２１３を参照して、最も保有する仮想頂点数が少ないワーカプロセス２２０に優先的に割当てる。また、１つのワーカプロセスへ割当てる部分エッジ数を、例えば、ハブ頂点閾値情報２１１の値（ここでは所定次数値Ｄｈ）を上限とするなど、ハブ頂点閾値情報２１１の値に基づき決定する方法も取られ得る。ここで、ハブ頂点通知１５０５には通知される頂点の次数情報（接続頂点数情報４１０）が含まれるため、マスタプロセス２１０は、部分エッジを割当てるワーカプロセス数Ｎｗを式（１）などで計算することができる。なお、Ｎｗは小数点以下を切り上げた正の整数である。
Ｎｗ＝（通知された頂点の次数情報）／（所定次数値Ｄｈ）・・（１）
ステップＳ１６１１では、マスタプロセス２１０は、ステップＳ１６１０で決定した割当て先ワーカプロセスへ部分エッジ読出し要求１５０７を送信し、ステップＳ１６０２へ戻る。【００６０】
ステップＳ１６２０では、マスタプロセス２１０は、受信した情報が部分エッジ読出し完了通知１５１２であるかを判定する。受信した情報が部分エッジ読出し完了通知１５１２であればステップＳ１６３０へ移行し、そうでなければステップＳ１６４０へ移行する。ステップＳ１６３０では、マスタプロセス２１０は、ステップＳ１６２０で判定した部分エッジ読出し完了通知１５１２が、あるハブ頂点に関する最後の部分エッジ読出し完了通知１５１２であった場合、例えば、あるハブ頂点の部分エッジを３つのワーカプロセス２２０に割当てていた場合、３回目の部分エッジ読出し完了通知を受け取った場合、ステップＳ１６３１へ移行して当該ハブ頂点の頂点情報を有するワーカプロセス２２０へ部分エッジ割当て先情報１５１３を送信し、ステップＳ１６０２へ戻る。最後の部分エッジ読出し完了通知１５１２ではなかった場合には、マスタプロセス２１０は、直接ステップＳ１６０２へ戻る。【００６１】
ステップＳ１６４０では、マスタプロセス２１０は、受信した情報が処理完了通知１４０８であるかを判定し、もし処理完了通知１４０８であればステップＳ１６４１へ移行し、そうでなければ受信した情報に対して適切な処理を行ってステップＳ１６０２へ戻る。ステップ１６４１では、マスタプロセス２１０は、ステップＳ１６４０で判定した処理完了通知１４０８が入力データ配置処理Ｓ１１０１における最後の処理完了通知１４０８であるかを判定し、最後の処理完了通知であればステップＳ１６４２へ移行し、そうでなければステップＳ１６０２へ戻る。なお、ステップＳ１６４１での判定処理は、マスタプロセス２１０に与えられているメモリ空間に並列計算機システム１０におけるワーカプロセス２２０の数の情報を記憶させておき、マスタプロセス２１０にワーカプロセス２２０から受信した処理完了通知１４０８の数をカウントさせることで可能となる。ステップＳ１６４２では、マスタプロセス２１０は、入力データ配置処理Ｓ１１０１が完了したことを通知する配置処理完了通知を全てのワーカプロセス２２０へ送信する。【００６２】
以上が、本実施例にかかる並列計算機システム１０の入力データ配置処理Ｓ１１０１におけるマスタプロセス２１０の動作である。【００６３】
次に、本実施例にかかる並列計算機システム１０の入力データ配置処理Ｓ１１０１におけるワーカプロセス２２０の動作を図１７（ａ）、および図１７（ｂ）のフローチャートを用いて詳細に説明する。なお、図１７（ａ）の結合子Ａ１７−１は、図１７（ｂ）に示す結合子Ａ１７−２と繋がっていることを示している。【００６４】
ワーカプロセス２２０は、マスタプロセス２１０からのグラフ情報読出し要求１４０１を得た後、ステップＳ１７０１へ移行する。ステップＳ１７０１では、グラフ情報読出し要求１４０１を得たワーカプロセス２２０は、読出し対象とする頂点の設定を行い、ステップＳ１７０２へ移行する。ステップＳ１７０２では、ワーカプロセス２２０は、読出し対象頂点の次数情報（接続頂点数情報４１０）をグラフ情報格納部２４０から読出す処理を行い、ステップＳ１７０３へ移行する。ステップＳ１７０３では、ワーカプロセス２２０は、読出した次数情報とグラフ情報読出し要求１４０１で得たハブ頂点閾値情報２１１を用いて対象頂点がハブ頂点であるか否かを判定し、ハブ頂点であればステップＳ１７２０へ移行し、そうでなければステップＳ１７１０へ移行する。【００６５】
ステップＳ１７１０では、ワーカプロセス２２０は、読出し対象頂点の接続先頂点情報４３０をグラフ情報格納部２４０より読出す処理を行い、ステップＳ１７３０へ移行する。ステップＳ１７２０では、ワーカプロセス２２０は、ステップＳ１７０３で判定したハブ頂点の頂点ＩＤを保有ハブ頂点リスト情報２２４へ追加する処理を行い、ステップＳ１７２１へ移行する。ステップＳ１７２１では、ワーカプロセス２２０は、マスタプロセス２１０へ、判定したハブ頂点のグローバル頂点ＩＤ１３０１とその接続頂点数情報４１０を含むハブ頂点通知１５０５を送信する処理を行い、ステップＳ１７３０へ移行する。【００６６】
ステップＳ１７３０では、ワーカプロセス２２０は、グラフ情報読出し要求１４０１にて割当てられた全ての読出し対象頂点に対し、ステップＳ１７３０までの処理が完了したかを判定し、完了しているならばステップＳ１７３１へ移行し、そうでなければＳ１７０１へ戻る。ステップＳ１７３１では、ワーカプロセス２２０は、本入力データ配置処理Ｓ１１０１においてハブ頂点通知１５０５が一度でも送信されたかを判定し、送信されていればステップＳ１７３３へ移行し、そうでなければ図１７（ａ）に示すステップＳ１７３２へ移行する。ステップＳ１７３２では、ワーカプロセス２２０は、マスタプロセス２１０へ処理完了通知１４０８を送信し、ステップＳ１７３３へ移行する。【００６７】
ステップＳ１７３３では、ワーカプロセス２２０は、何らかの情報を受信するまで受信バッファを確認し、受信したならばステップＳ１７３４へ移行する。ステップＳ１７３４では、ワーカプロセス２２０は、ステップＳ１７３３で受信した情報が部分エッジ読出し要求１５０７であるか否かを判定し、部分エッジ読出し要求１５０７であればステップＳ１７４０へ移行し、そうでなければＳ１７５０へ移行する。ステップＳ１７４０では、ワーカプロセス２２０は、部分エッジ読出し要求１５０７で指定された頂点の接続先頂点情報４３０の一部（これを部分エッジ情報と称する）をグラフ情報格納部２４０から読出す処理を行い、ステップＳ１７４１へ移行する。ここで、部分エッジ情報の読出し区間を示す情報は、例えば、接続先頂点ＩＤ情報配列４３１の読出し対象区間（始点と終点）を示す要素番号であり、部分エッジ読出し要求１５０７に含まれている。ステップＳ１７４１では、ワーカプロセス２２０は、ステップＳ１７４０で読出した部分エッジ情報を部分接続先頂点情報５２０として管理するための仮想頂点情報２２３を生成し、仮想頂点ＩＤ変換テーブル２２５を更新する。ステップＳ１７４２では、ワーカプロセス２２０は、ステップＳ１７３４で判定した部分エッジ読出し要求１５０７に対応する部分エッジ情報の読出しが完了したことをマスタプロセス２１０へ通知するために、部分エッジ読出し完了通知１５１２を送信し、ステップＳ１７３３へ戻る。【００６８】
ステップＳ１７５０では、ワーカプロセス２２０は、ステップＳ１７３３で受信した情報が部分エッジ割当て先情報１５１３であるか否かを判定し、部分エッジ割当て先情報１５１３であればステップＳ１７６０へ移行し、そうでなければステップＳ１７７０へ移行する。ステップＳ１７６０では、ワーカプロセス２２０は、本入力データ配置処理Ｓ１１０１において、マスタプロセス２１０へ通知した全てのハブ頂点に対応する部分エッジ割当て先情報１５１３を受信したか否かを判定し、受信していればステップＳ１７６１へ移行し、そうでなければステップＳ１７３３へ戻る。ここで、マスタプロセス２１０へ通知した全てのハブ頂点に対応する部分エッジ割当て先情報１５１３をワーカプロセス２２０が受信したか否かの判定は、ワーカプロセス２２０がマスタプロセス２１０へ送信したハブ頂点通知１５０５の送信回数とワーカプロセス２２０がマスタプロセス２１０から部分エッジ割当て先情報１５１３を受信した回数を比較することで判定可能である。ステップＳ１７６１では、ワーカプロセス２２０は、マスタプロセス２１０へ処理完了通知１４０８を送信する。【００６９】
ステップＳ１７７０では、ワーカプロセス２２０は、ステップＳ１７３３で受信した情報が配置処理完了通知であるか否かを判定し、配置処理完了通知であれば入力データ配置処理Ｓ１１０１を完了し、そうでなければ受信した情報を適切に処理し、ステップＳ１７３３へ戻る。【００７０】
以上が、本実施例にかかる並列計算機システム１０の入力データ配置処理Ｓ１１０１におけるワーカプロセス２２０の動作である。以上に説明した入力データ配置処理Ｓ１１０１におけるマスタプロセス２１０およびワーカプロセス２２０の動作により、図１２に示した並列計算機システム１０の入力データ配置処理が可能となる。【００７１】
次に、並列計算機システム１０のグラフ計算処理Ｓ１１０２におけるマスタプロセス２１０とワーカプロセス２２０の簡単な動作例を図１８と図１９を用いて説明する。説明を簡単化するため、ワーカプロセス２２０として、ワーカプロセス１とワーカプロセス２の２つのみを用いて説明する。また、図１８と図１９の図中にあるマスタプロセスは、マスタプロセス２１０に対応する。【００７２】
グラフ計算処理Ｓ１１０２の内、通常頂点に関する処理の基本動作を説明するために、ワーカプロセス１へ通常頂点のみが割当てられた場合の動作例を図１８に示す。まず、マスタプロセスは、ワーカプロセス１へ計算処理開始要求１８０１を送信する。計算処理開始要求１８０１を受信したワーカプロセス１は、頂点処理状態１８０２となり、自身が保有する全ての頂点に対し、入力エッジ処理手段２２７により入力エッジ処理１８０３を行い、頂点情報更新手段２２８により頂点情報更新１８０４を行う。ここでは、処理対象頂点が通常頂点であるため、出力エッジ処理手段２２９により出力エッジ処理１８０５が行われる。その後、ワーカプロセス１は、処理完了状態１８０６となり処理完了通知１８０７をマスタプロセスへ送信する。【００７３】
次に、グラフ計算処理Ｓ１１０２の内、ハブ頂点に関する処理の基本動作を説明するために、ワーカプロセス１へハブ頂点のみが割当てられた場合の動作例を図１９に示す。まず、マスタプロセスはワーカプロセス１へ計算処理開始要求１８０１を送信する。計算処理開始要求１８０１を受信したワーカプロセス１は、頂点処理状態１８０２となり、自身が保有する全ての頂点に対し、入力エッジ処理手段２２７により入力エッジ処理１８０３を行い、頂点情報更新手段２２８により頂点情報更新１８０４を行う。ここでは、処理対象頂点がハブ頂点であるため、ワーカプロセス１は、エッジ割当て先情報４６０を参照し、部分出力エッジ処理要求１９０５をワーカプロセス１およびワーカプロセス２へ送信する。ここで、ワーカプロセス１に与えられているメモリ空間にエッジ割当て先情報４６０が配置されているため、他のワーカプロセスのメモリ空間に配置されている場合に比べて、参照時にネットワークへの負荷が生じることが無くなる分、グラフ処理を高速化できる。【００７４】
部分エッジ処理要求１９０５を受信したワーカプロセス１およびワーカプロセス２は、部分エッジ処理手段２３０により、ハブ頂点の部分エッジに対する出力エッジ処理である部分エッジ処理１９０６−１、部分エッジ処理１９０６−２をそれぞれ行い、部分エッジ処理完了通知１９０７をワーカプロセス１へ送信する。部分エッジ処理完了通知１９０７を受信したワーカプロセス１は、処理完了状態１８０６となり、処理完了通知１８０７をマスタプロセスへ送信する。【００７５】
以下、図２０、図２１（ａ）、および図２１（ｂ）を用いて、グラフ計算処理Ｓ１１０２におけるマスタプロセス２１０とワーカプロセス２２０の動作をより詳細に説明する。【００７６】
図２０は、グラフ計算処理Ｓ１１０２におけるマスタプロセス２１０の動作例を示すフローチャートである。以下、本フローチャートにおける各処理ステップについて詳細に説明する。まず、ステップＳ２００１にてマスタプロセス２１０は、各ワーカプロセス２２０へ、入力エッジ処理手段２２７、頂点情報更新手段２２８、出力エッジ処理手段２２９などを含む頂点毎に行う処理内容の情報（プログラム）、および頂点状態情報４２０を各ワーカプロセス２２０のメモリ空間に作成させる要求などのグラフ計算処理に必要な準備を整えるための情報を、初期化情報として送信する。なお、初期化情報には、例えば、頂点Ｓ（始点）から頂点Ｔ（終点）へ至る最短経路探索問題では、始点である頂点Ｓをアクティブ化させるための情報も含まれる。【００７７】
ステップＳ２００２では、マスタプロセス２１０は、各ワーカプロセス２２０へ処理開始要求１８０１を送信し、ステップＳ２００３へ移行する。ステップＳ２００３では、マスタプロセス２１０は、全てのワーカプロセス２２０から処理完了通知１８０７を受信するまで待機する。ステップＳ２００４では、マスタプロセス２１０は、グラフ計算処理が完了したか否かを判定し、完了していればステップＳ２００５へ移行し、そうでなければＳ２００２へ戻る。ここで、グラフ計算処理が完了したか否かの判定方法としては、例えば、マスタプロセス２１０が全てのワーカプロセス２２０が直前の出力エッジ処理１８０５において処理したエッジ数を集計し、その値がゼロであればグラフ計算処理が完了したと判定する方法があり、この判定方法はワーカプロセス２２０が直前の出力エッジ処理１８０５において処理したエッジ数の情報を処理完了通知１８０７に含めて送信することで、実現可能である。  【００７８】
ステップＳ２００５では、マスタプロセス２１０は、各ワーカプロセス２２０へ、グラフ計算処理Ｓ１１０２が完了したことを通知するグラフ処理完了通知を送信する。【００７９】
以上が、並列計算機システム１０のグラフ計算処理Ｓ１１０２におけるマスタプロセス２１０の動作例である。【００８０】
次に、並列計算機システム１０のグラフ計算処理Ｓ１１０２におけるワーカプロセス２２０の動作を図２１（ａ）、および図２１（ｂ）のフローチャートを用いて詳細に説明する。なお、図２１（ａ）の結合子Ｂ２１−１、結合子Ｃ２１−４は、それぞれ図２１（ｂ）に示す結合子Ｂ２１−２、結合子Ｃ２１−３と繋がっていることを示している。【００８１】
ワーカプロセス２２０は、マスタプロセス２１０から初期化情報を受信して、頂点状態情報４２０を自身のメモリ空間に作成するなどのグラフ計算処理に必要な準備を整えた後に、ステップＳ２１０１へ移行する。ステップＳ２１０１では、ワーカプロセス２２０は、マスタプロセス２１０から処理開始要求１８０１を受信するまで待機する。【００８２】
ステップＳ２１０２では、ワーカプロセス２２０は、自身のメモリ空間の受信バッファを確認し、アクティブになった頂点（他の頂点からアクセスされた頂点とも、訪問された頂点とも表現できる）に対して、入力エッジ処理手段２２７を用いて入力エッジ処理を行う。ステップＳ２１０３では、ワーカプロセス２２０は、ステップＳ２１０２にて入力エッジ処理を行った頂点に対して頂点状態情報４２０を更新するか否かを判定し、更新する場合にはステップＳ２１１０へ移行し、そうでなければステップ２１２０へ移行する。ここで、入力エッジ処理がされた頂点の頂点状態情報４２０が更新されない例としては、例えば重み無しエッジにおける最短経路探索問題において当該頂点が既に訪問済みの頂点であった場合などが挙げられる。【００８３】
ステップＳ２１１０では、ワーカプロセス２２０は、頂点状態情報４２０を更新し、ステップＳ２１１１へ移行する。ここで、ステップＳ２１０３およびステップＳ２１１０は頂点情報更新手段２２８によって行われる。ステップＳ２１１１では、ワーカプロセス２２０は、ハブ頂点閾値情報２１１とハブ頂点識別手段２２６によって処理対象頂点がハブ頂点であるか否かを判定し、ハブ頂点であればステップＳ２１１２へ移行し、そうでなければステップＳ２１１３へ移行する。ステップＳ２１１２では、ワーカプロセス２２０は、処理対象頂点のエッジ割当て先情報４６０を参照し、部分エッジ処理要求１９０５を処理対象頂点の部分エッジを保有する全てのワーカプロセス２２０へ送信する。【００８４】
ここで、部分エッジ処理要求１９０５のパケット構造の例として、パケット構造２２０１を図２２（ａ）に示す。パケット構造２２０１には、パケットヘッダ情報２２１０、特殊パケット識別子２２１１、送信元ワーカプロセスＩＤ２２１２、アクティブハブ頂点ＩＤ２２１３、および出力データ２２１４が含まれる。【００８５】
パケットヘッダ情報２２１０は、ネットワーク２５０上で通信するための通信プロトコルを満たすパケットヘッダ情報であり、宛先アドレス情報などが含まれる。特殊パケット識別子２２１１は、当該パケットデータが部分エッジ処理要求１９０５であることを受信側ワーカプロセス２２０が認識するための情報であり、本情報はパケットヘッダ情報２２１０に含まれていてもよい。送信元ワーカプロセスＩＤ２２１２は、送信元ワーカプロセス２２０を判別可能とするための情報である。アクティブハブ頂点ＩＤ２２１３は、受信側ワーカプロセス２２０が部分エッジ処理対象となるハブ頂点（仮想頂点とも表現できる）を識別可能とするための情報である。出力データ２２１４は、部分エッジの出力エッジ処理（部分エッジ処理）において、接続先頂点へ送る情報の元となるデータであり、例えば最短経路探索問題では最短経路情報がこれに該当する。なお、本実施例のように当該頂点の頂点情報の配置先となるワーカプロセスのワーカプロセスＩＤが頂点ＩＤ情報（グローバル頂点ＩＤ情報）から判別可能である場合、送信元ワーカプロセスＩＤ２２１２は不要である。【００８６】
パケット構造２２０１の変形例を、図２２（ｂ）にパケット構造２２０２として示す。パケット構造２２０２は、パケット構造２２０１に対し、制御パケット識別子２２２０が追加されたものである。本実施例のグラフ処理方式では、ステップＳ２１１３の出力エッジ処理、またはステップＳ２１３０の部分エッジ処理によって接続先頂点へ出力される次の入力エッジ処理のための情報と、部分エッジ処理要求１９０５などの直ちに実行されるべき制御情報とがステップＳ２１０２からステップＳ２１７０までの間で混在する形式で通信され、また、前者の次の入力エッジ処理のための情報のために生じる通信数（単に通信量とも表現できる）は、後者の直ちに実行されるべき制御情報のために生じる通信数よりも圧倒的に多くなる。そのため、大規模なグラフ処理になるほど膨大な受信データの中から少数の制御情報を探し出して実行することが必要となるため、制御情報の探索時間が全体の処理速度に悪影響を与えうる。【００８７】
そこで、部分エッジ処理要求１９０５のパケット構造としてパケット構造２２０２を用いる変形例の場合には、ワーカプロセス２２０は、自身が管理するメモリ空間内に２つ以上の受信バッファを有し、次の入力エッジ処理のための情報と直ちに実行されるべき制御情報とを別々の受信バッファに分けて格納する。これにより、直ちに実行されるべき制御情報の探索の際に次の入力エッジ処理のための情報が影響することを防ぐことができ、処理時間の短縮が可能となる。制御パケット識別子２２２０は、受信したパケットが直ちに実行されるべき制御情報を含むか否かを判定するための情報であり、２つ以上用意された受信バッファへの振り分け先の決定に使用される。２つ以上用意された受信バッファへの振り分け先を決定する処理は、例えば、受信側の計算ノード１０１０の通信ユニット１０１３で行うことが可能である。【００８８】
ステップＳ２１１３では、ワーカプロセス２２０は、処理対象頂点に対し、出力エッジ処理手段２２９によって出力エッジ処理を行う。ステップＳ２１２０では、ワーカプロセス２２０は、全てのアクティブ頂点（最新の入力エッジ処理Ｓ２１０２で処理対象となった全ての頂点）についてＳ２１２０までの処理が完了したか否かを判定し、完了していればステップＳ２１２１へ移行し、そうでなければＳ２１０３へ戻る。【００８９】
Ｓ２１２１では、ワーカプロセス２２０は、本探索レベルの処理（最新の処理開始要求１８０１受信からステップＳ２１２１へ至るまでの処理）において、部分エッジ処理要求１９０５を一度でも送信したか否か（ステップＳ２１１２を通過したか否か）を判定し、送信していればステップＳ２１２３へ移行し、そうでなければＳ２１２２へ移行する。ステップＳ２１２２では、ワーカプロセス２２０は、マスタプロセス２１０へ処理完了通知１８０７を送信する。ステップＳ２１２３では、ワーカプロセス２２０は、受信バッファ内の受信している情報を取得する。【００９０】
ステップＳ２１２４では、ワーカプロセス２２０は、ステップＳ２１２３にて取得した情報が部分エッジ処理要求１９０５であるか否かを判定し、部分エッジ処理要求１９０５である場合にはステップＳ２１３０へ移行し、そうでなければステップＳ２１４０へ移行する。ここで、取得した情報が部分エッジ処理要求１９０５であるか否かは特殊パケット識別子２２１１を参照することで判定可能である。【００９１】
ステップＳ２１３０では、ワーカプロセス２２０は、部分エッジ処理手段２３０によって部分エッジ処理要求１９０５のアクティブハブ頂点ＩＤ２２１３で指定されたハブ頂点の部分エッジ（当該ワーカプロセスが保有している仮想頂点のエッジとも表現できる）に関する出力エッジ処理を行う。なお、本出力エッジ処理で接続先頂点へ送信されるデータは出力データ２２１４を元に生成される。Ｓ２１３１では、ワーカプロセス２２０は、部分エッジ処理完了通知１９０７を送信元ワーカプロセスＩＤ２２１２が示すワーカプロセス２２０へ送信することで、要求された部分エッジ処理が完了したことを通知し、ステップＳ２１２３へ戻る。【００９２】
ステップＳ２１４０では、ワーカプロセス２２０は、ステップＳ２１２３にて取得した情報が部分エッジ処理完了通知１９０７であるか否かを判定し、部分エッジ処理完了通知１９０７である場合にはステップＳ２１５０へ移行し、そうでなければステップＳ２１６０へ移行する。ステップＳ２１５０では、ワーカプロセス２２０は、全ての部分エッジ処理完了通知１９０７を受信したか否かを判定し、受信していればステップＳ２１５１へ移行し、そうでなければステップＳ２１２３へ移行する。ここで、全ての部分エッジ処理完了通知１９０７を受信したか否かは、例えば、当該ワーカプロセス２２０が部分エッジ処理要求１９０５を送信した回数と部分エッジ処理完了通知１９０７を受信した回数が等しいか否かを確認することで、判定可能である。ステップＳ２１５１では、ワーカプロセス２２０は、マスタプロセス２１０へ処理完了通知１８０７を送信し、ステップＳ２１２３へ戻る。【００９３】
ステップＳ２１６０では、ワーカプロセス２２０は、ステップＳ２１２３にて取得した情報が処理開始要求１８０１であるか否かを判定し、処理開始要求１８０１である場合にはステップＳ２１０２へ移行して次の探索レベルの入力エッジ処理を開始し、そうでなければステップＳ２１７０へ移行する。ステップＳ２１７０では、ワーカプロセス２２０は、ステップＳ２１２３にて取得した情報がグラフ処理完了通知であるか否かを判定し、グラフ処理完了通知である場合にはグラフ計算処理Ｓ１１０２を終了し、そうでなければステップＳ２１２３へ移行する。以上が、グラフ計算処理Ｓ１１０２におけるワーカプロセス２２０の動作例である。【００９４】
以上に説明したとおり、並列計算機システム１０は、ハブ頂点のエッジの情報を、ハブ頂点の情報が配置されているプロセス以外のプロセスのメモリ空間に配置することで、スケールフリー特性を有するグラフ解析処理であっても、優れた並列処理スケーラビリティを実現可能となる。また、本発明に係る解決手段はＢＳＰモデルなどに基づく既存のプログラミングモデルにも適用可能であるため、本システムのユーザとなるプログラマは並列計算機システム１０の複雑な内部動作を意識せずにグラフ解析のプログラムコードを容易に記述できる。
【符号の説明】
【００９５】
１０：並列計算機システム、１０１〜１０３：プロセス、１１１〜１１３：メモリ空間、２１０：マスタプロセス、２２０−１〜３：ワーカプロセス、２４０：グラフ情報格納部、２５０：ネットワーク、１０１０−１〜３：計算ノード、１０１１：プロセッサユニット、１０１２：メモリユニット、１０１３：通信ユニット、１０１４：バス、１０１８−１〜２：ＣＰＵ、１０２０：ストレージシステム、１０３０：ネットワーク。
【図１（ａ）】
2013145001.tif 000003
【図１（ｂ）】
2013145001.tif 000004
【図２】
2013145001.tif 000005
【図３（ａ）】
2013145001.tif 000006
【図３（ｂ）】
2013145001.tif 000007
【図４】
2013145001.tif 000008
【図５】
2013145001.tif 000009
【図６】
2013145001.tif 000010
【図７】
2013145001.tif 000011
【図８】
2013145001.tif 000012
【図９】
2013145001.tif 000013
【図１０】
2013145001.tif 000014
【図１１】
2013145001.tif 000015
【図１２】
2013145001.tif 000016
【図１３】
2013145001.tif 000017
【図１４】
2013145001.tif 000018
【図１５】
2013145001.tif 000019
【図１６】
2013145001.tif 000020
【図１７（ａ）】
2013145001.tif 000021
【図１７（ｂ）】
2013145001.tif 000022
【図１８】
2013145001.tif 000023
【図１９】
2013145001.tif 000024
【図２０】
2013145001.tif 000025
【図２１（ａ）】
2013145001.tif 000026
【図２１（ｂ）】
2013145001.tif 000027
【図２２（ａ）】
2013145001.tif 000028
【図２２（ｂ）】
2013145001.tif 000029
【国際調査報告】
2013145001.tif 000030
2013145001.tif 000031
2013145001.tif 000032
2013145001.tif 000033