JPWO2013145001A1 - 情報処理システムおよびグラフ処理方法 - Google Patents

情報処理システムおよびグラフ処理方法 Download PDF

Info

Publication number
JPWO2013145001A1
JPWO2013145001A1 JP2014506995A JP2014506995A JPWO2013145001A1 JP WO2013145001 A1 JPWO2013145001 A1 JP WO2013145001A1 JP 2014506995 A JP2014506995 A JP 2014506995A JP 2014506995 A JP2014506995 A JP 2014506995A JP WO2013145001 A1 JPWO2013145001 A1 JP WO2013145001A1
Authority
JP
Japan
Prior art keywords
information
vertex
graph
processing
edge
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2014506995A
Other languages
English (en)
Inventor
真生 濱本
真生 濱本
純一 宮越
純一 宮越
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2014506995A priority Critical patent/JPWO2013145001A1/ja
Publication of JPWO2013145001A1 publication Critical patent/JPWO2013145001A1/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Multi Processors (AREA)

Abstract

グラフ処理において、ハブ頂点の出力エッジ処理負荷がボトルネックとなり、優れた並列処理スケーラビリティを有する並列計算機システムを提供できないという課題がある。本発明では、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第1プロセスに割当てられている第1メモリ空間にグラフ頂点の情報を配置し、該グラフ頂点のエッジの情報を、第2プロセスに割当てられている第2メモリ空間に配置することで、前述の課題を解決する。

Description

本発明は、グラフ処理を実行する情報処理システムとその処理方法に関する。
インターネットなどの通信技術の進歩とストレージ技術向上に伴う記録密度増大により、企業や個人が扱うデータ量が大きく増加し、近年はその大規模なデータの繋がり(ネットワークとも呼ばれる)を解析することが重要になってきた。特に、人間関係などの自然界で生じるデータの繋がりには、スケールフリーと呼ばれる特性を有するグラフが多く、このスケールフリー特性を有する大規模グラフの解析が重要になってきた(特許文献1)。
グラフ解析を高速に行う従来技術として、グラフの各頂点を、各頂点から出ていくエッジの全てを含めて、それぞれ単一のプロセスに配置し、並列処理する技術が、非特許文献1に開示されている。また、グラフ処理は一つの頂点あたりの処理の規模が小さく、一つの頂点の処理に着目するとメモリアクセス時間が処理時間の大部分を占めることを課題と捉え、メモリアクセスの度に処理対象頂点を切り替えることでメモリアクセス時間を隠蔽するマルチスレッド処理方式が、非特許文献2に開示されている。その他、大規模な並列処理のプログラミングはプログラマ(並列計算機システムのユーザとも表現できる)に大きな負担を課すことから、プログラマが容易にグラフ解析のプログラムコードを記述し、実行可能とするために、BSP(BSP:Bulk Synchronous Parrallel)モデルをベースとしたプログラミングモデルが一般的に用いられており、例えばBSPモデルを用いたグラフ解析フレームワークが非特許文献3に開示されている。BSPモデルの処理方式は主に頂点ごとに行う、「入力エッジ処理」、「頂点情報更新処理」、「出力エッジ処理」の3つの処理と、全ての頂点に対して前記3つの処理が完了するまで待つ「全体同期処理」からなり、これらを繰り返すことで幅優先探索による最短経路問題やページランク問題を解くことが可能である。
特開2004−318884号公報
ダグラス・グレガー(Douglas Gregor)、アンドルー・ラムスデン(Andrew Lumsdaine)、「分散メモリ並列計算のための順次グラフアルゴリズムの排除(Lifting sequential graph algorithms for distributed−memory parallel computation)」、「OOPSLA’05第20回オブジェクト指向プログラミング、システム、言語、アプリケーションに関するACM SIGPLAN年会紀要(OOPSLA ’05 Proceedings of the 20th annual ACM SIGPLAN conference on Object−oriented programming, systems, languages, and applications」、エイシーエムニューヨーク(ACM New York)、(米国)、2005年、p.423−437 アンドルー・ラムスデン(Andrew Lumsdaine)、他3名、「並列グラフ処理の挑戦(Challenges in Parallel Graph Processing)」、パラレル プロセッシング レターズ(Parallel Processing Letters)、2007年3月、第17巻、第1号、p.5−20 グジェゴジ・マレビチ(Grzegorz Malewicz)、他6名、「プレーゲル:大規模グラフ処理用システム(Pregel: a system for large−scale graph processing)」、SIGMOD’10データマネジメント国際会議2010紀要(SIGMOD’10 Proceedings of the 2010 international conference on Management of data)、エイシーエムニューヨーク(ACM New York)、(米国)、2010年、p.135−146
スケールフリー特性を有するグラフとは次数分布がべき乗に従うグラフであり、少数のエッジを有する多数の頂点と多数のエッジ(大きな次数とも表現する)を有する少数の頂点(これをハブ頂点と称する)で構成される。スケールフリー特性を有するグラフでは、平均次数はグラフ規模に依存せず小さいが、グラフにおける最大次数を有するハブ頂点の次数はグラフ規模が大きくなるほど大きくなる特徴がある。最大次数を有するハブ頂点の次数の大きさは、グラフ内全頂点数の数%に上ることがある。ここで、前述したBSPモデルの特に出力エッジ処理に着目すると、その処理量は処理対象頂点が有する次数に比例する。そのため、スケールフリー特性を有するグラフをより高速に処理するために計算ノードの並列数を増加させていくと、1つのハブ頂点の出力エッジ処理時間が計算ノード単位での平均出力エッジ処理時間を超えてしまい、そのハブ頂点の出力エッジ処理時間が原因で並列処理による高速化効果を得られなくなる課題がある。
例えば、4兆個の頂点からなるグラフにおいて、頂点の平均次数は27本であり、グラフ全体の5%の頂点に繋がるハブ頂点があり、出力エッジ処理におけるエッジあたりの処理時間が20ナノ秒であり、全ての頂点が出力エッジ処理対象であるとする。この処理対象を1万計算ノード並列で解く場合、期待する1計算ノードあたりの平均出力エッジ処理時間は(4兆)×(27本)×(20ナノ秒)/(10000ノード)≒216秒であるのに対し、ハブ頂点単体の出力エッジ処理時間は(4兆)×(5%)×(20ナノ秒)=4000秒であり、並列処理の高速化効果が頭打ちとなってしまうことが分かる。なお、上記の条件では500並列程度がシステムの並列処理スケーラビリティ限界であり、それ以上並列数を増やしても処理を高速化することは望めない。
以上のように、大規模なスケールフリーの特性を有するグラフ処理になるほど、従来技術に係る頂点レベルの並列処理方式では、ハブ頂点の出力エッジ処理負荷がボトルネックとなり、優れた並列処理スケーラビリティを有する情報処理システムを提供できないという課題がある。
本発明では、それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムで、第1プロセスに割当てられている第1メモリ空間にグラフ頂点の情報を配置し、該グラフ頂点のエッジの情報を、第2プロセスに割当てられている第2メモリ空間に配置することで、前述の課題を解決する。
本発明により、優れた並列処理スケーラビリティの確保が可能となる。
解析対象となる入力グラフの例を示す図である。 本発明にかかるグラフデータ配置の例を示す図である。 本発明の実施例である並列計算機システムの論理的なシステム構成を示す図である。 ハブ部分エッジ割当て先情報の例を示す図である。 ワーカプロセス仮想頂点保有状況情報の例を示す図である。 通常頂点情報とハブ頂点情報の構成とその管理方法の例を示す図である。 仮想頂点情報の構成とその管理方法の例を示す図である。 保有ハブ頂点リスト情報の例を示す図である。 仮想頂点ID変換テーブルの例を示す図である。 グラフ解析処理における入力エッジ処理と頂点情報更新処理と出力エッジ処理の位置づけを示す図である。 入力グラフ情報の構成とその管理方法の例を示す図である。 本発明の実施例である並列計算機システムの物理的なシステム構成の例を示す図である。 全体処理フローチャートの例を示す図である。 入力データの配置方式の例を示す図である。 グローバル頂点IDの構成例を示す図である。 入力データ配置処理における通常頂点を読出す場合の動作例を示す図である。 入力データ配置処理におけるハブ頂点を読出す場合の動作例を示す図である。 入力データ配置処理におけるマスタプロセスの動作例を示すフローチャートである。 入力データ配置処理におけるワーカプロセスの動作例を示すフローチャートである。 入力データ配置処理におけるワーカプロセスの動作例を示すフローチャートである。 グラフ計算処理における通常頂点を処理する場合の動作例を示す図である。 グラフ計算処理におけるハブ頂点を処理する場合の動作例を示す図である。 グラフ計算処理におけるマスタプロセスの動作例を示すフローチャートである。 グラフ計算処理におけるワーカプロセスの動作例を示すフローチャートである。 グラフ計算処理におけるワーカプロセスの動作例を示すフローチャートである。 部分エッジ処理要求のパケット構造の第1の例を示す図である。 部分エッジ処理要求のパケット構造の第2の例を示す図である。
本発明のグラフ処理方法および情報処理システムについて図1(a)および図1(b)を用いて説明する。図1(a)は、本発明での解析対象となる入力グラフの例を示す図である。図1(b)は、本発明での、入力グラフの複数プロセスへの配置の例を示す図である。
図1(a)には、頂点が丸印で、有向エッジが頂点を結ぶ矢印で表現されている。ここで、次数が5以上の頂点をハブ頂点であると定義し、次数が4以下の頂点を通常頂点であると定義すると、グラフ1の頂点Hは5つ以上のエッジを有するのでハブ頂点に該当する。ここでは、頂点Sをソースとし、頂点Tをターゲットとする幅優先探索による最短経路探索を行うと仮定する。このとき、第1の探索レベルでは頂点Sのみがアクティブであり、頂点Sは頂点Aと頂点Bと頂点Hの3個の頂点に経路情報を送信する。第2の探索レベルでは頂点Aと頂点Bと頂点Hがアクティブであり、頂点Aは1個の頂点に、頂点Bは1個の頂点に、頂点Hは12個の頂点にそれぞれ経路情報を送信する。このとき、頂点Hの出力エッジ処理は頂点Aと頂点Bに対し、12倍の処理量を必要とし、負荷が不均一となり、これが並列処理スケーラビリティを低下させる原因となる。
そこで、本発明に係る情報処理システムでは、図1(b)のグラフ分割イメージのようにハブ頂点である頂点Hを始点とするエッジを分割し、分割したエッジを仮想的な頂点である仮想頂点H1、H2、H3へそれぞれ割当て、さらにこれら仮想頂点をプロセス101、プロセス102、プロセス103へそれぞれ割当てる。ここで、プロセスとはオペレーティングシステム(OS)からメモリ空間(記憶領域とも表現できる)を割当てられた動作中のインスタンスであり、プログラムの実行単位である。
このときの処理負荷分散状況を図1(b)の接続先頂点情報を用いて説明する。メモリ空間111にはプロセス101が有する頂点の接続先頂点情報が格納されており、例えば、頂点Sが頂点A、頂点B、頂点Hへリンクしている情報121が格納されている。情報121は、頂点Sがアクティブになった場合には、頂点A、頂点B、および頂点Hへの出力エッジ処理を行う必要があることを示している。図1(b)では、プロセス101のメモリ空間111には仮想頂点H1が、プロセス102のメモリ空間112には仮想頂点H2が、プロセス103のメモリ空間113には仮想頂点H3が、接続先頂点の仮想的な親として接続先頂点情報にそれぞれ配置されており、頂点Hの出力エッジ処理負荷が分散されている。
ここで、それぞれ破線で示した仮想頂点および仮想頂点への仮想的なエッジの処理については後述の特殊な処理が行われる。すなわち、プロセス102にある頂点Hについては入力エッジ処理と頂点情報更新処理は通常頂点と同様に行われるが、仮想頂点H1、仮想頂点H2、および仮想頂点H3それぞれへの出力エッジ処理は後述の特殊な処理となる。また、仮想頂点H1、仮想頂点H2、および仮想頂点H3それぞれの入力エッジ処理及び頂点情報更新処理も後述の特殊な処理となる。
以上に説明した手法により、本発明にかかる情報処理システムはスケールフリー特性を有するグラフの解析処理においても優れた並列処理スケーラビリティを達成することができる。すなわち、エッジについてグラフを分割し、分割したエッジ(以下、部分エッジと称する)を各プロセスに割り当てることによって、プロセス毎の処理負荷の均等化を図ることができる。
以下、本発明の情報処理システムの実施例として、並列計算機システム10を詳細に説明する。なお、以降の説明中に本発明の情報処理システムの処理対象のグラフ処理の例として最短経路探索の例をしばしば示すが、説明の簡単化のために、特に断らない限り全てエッジの重みがない(またはエッジ重みが均一とも表現できる)グラフによる幅優先探索を用いた最短経路探索であるとする。
図2は、並列計算機システム10の論理的なシステム構成の例である。並列計算機システム10は、マスタプロセス210と、1つ以上のワーカプロセス220と、ネットワーク250と、グラフ情報格納部240とを有する。図2では、ワーカプロセス220は、ワーカプロセス220−1、ワーカプロセス220−2、およびワーカプロセス220−3の3つしか示されていないが、これは説明を簡単にするためであり、グラフ処理の量などに応じてワーカプロセスの数の増減が可能である。以下の説明においても、説明の簡単化のために、同様に少ないワーカプロセス数で説明する。また、複数のワーカプロセスを一つの群として扱う場合、又は個々のワーカプロセスを区別する必要がない場合は、ワーカプロセス220と表現する。一方、ワーカプロセスを区別する場合は、ワーカプロセス220−1をワーカプロセス1、ワーカプロセス220−2をワーカプロセス2、ワーカプロセス220−3をワーカプロセス3という形に省略して表現することとする。
マスタプロセス210は、ワーカプロセス220に対して初期データ読出しの指示や処理開始の指示などを行うプロセスであり、ハブ頂点閾値情報211と、ハブ部分エッジ割当て先情報212と、ワーカプロセス仮想頂点保有状況情報213と、ハブ部分エッジ割当て先決定手段214と、をマスタプロセス210に与えられているメモリ空間上に有する。ハブ頂点閾値情報211は、エッジ分割の対象となる頂点かどうか、すなわち本実施例ではハブ頂点かどうかを判定するための閾値情報であり、頂点が有する次数に比例する量についての閾値の情報であることが好ましい。ハブ頂点閾値情報211の例としては、頂点が有する次数についての閾値の情報や、エッジ情報のデータ量の大きさについての情報などがある。本実施例では、頂点が有する次数についての閾値の情報をハブ頂点閾値情報211とする例で説明する。
ハブ部分エッジ割当て先情報212は、ハブ頂点の部分エッジのワーカプロセス220への割当て先を管理するための情報である。図3(a)に、ハブ頂点とその部分エッジを割当てたワーカプロセス220の情報をテーブル化したハブ部分エッジ割当て先情報212の例を示す。図3(a)の例では、頂点1と頂点3がハブ頂点であり、頂点1の部分エッジ情報はワーカプロセス1とワーカプロセス2へ割当てられ、頂点3の部分エッジ情報はワーカプロセス1とワーカプロセス3へ割当てられていることを示している。
ワーカプロセス仮想頂点保有状況情報213は、ワーカプロセス220の各プロセスが保有する仮想頂点情報を管理するための情報である。図3(b)に、ワーカプロセス情報(以下、ワーカプロセスIDと称する)とハブ頂点の頂点識別情報(以下、頂点IDと称する)をテーブル化したワーカプロセス仮想頂点保有状況情報213の例を示す。図3(b)の例は、ワーカプロセス1は頂点1と頂点3の仮想頂点の情報を保有し、ワーカプロセス2は頂点1の仮想頂点の情報を保有し、ワーカプロセス3は頂点3の仮想頂点の情報を保有していることを示している。ワーカプロセスIDおよび頂点IDは、それぞれをワーカプロセス識別番号および頂点識別番号とし、1から始まる自然数の連続番号とすることができる。なお、ハブ部分エッジ割当て先情報212とワーカプロセス仮想頂点保有状況情報213は情報量の点では同一であり、どちらか一方のみを有する実施の形態もとりえる。
ハブ部分エッジ割当て先決定手段214は、ワーカプロセス220の中から、ハブ頂点の部分エッジの割当て先のワーカプロセスを決定する手段である。ハブ部分エッジ割当て先決定手段214は、一つの実施の形態としては例えば、ワーカプロセス仮想頂点保有状況情報213を参照して、ワーカプロセス220の内で最も保有する仮想頂点数が少ないワーカプロセスに優先的に割当てを行う。
ワーカプロセス220は、グラフ計算処理を実施するプロセスであり、ハブ頂点閾値情報211と、通常頂点情報221と、ハブ頂点情報222と、仮想頂点情報223と、保有ハブ頂点リスト情報224と、仮想頂点ID変換テーブル225と、ハブ頂点識別手段226と、入力エッジ処理手段227と、頂点情報更新手段228と、出力エッジ処理手段229と、部分エッジ処理手段230と、をワーカプロセス220のそれぞれに与えられているメモリ空間上に有する。なお、ハブ頂点閾値情報211はマスタプロセス210のハブ頂点閾値情報211と同一の情報である。
通常頂点情報221は、解析対象グラフにおけるハブ頂点ではない頂点(これを通常頂点と称する)の頂点情報であり、図4に示すように、接続頂点数情報410と、頂点状態情報420と、接続先頂点情報430とを含む。接続頂点数情報410は、各頂点を始点として他の頂点へ向かうエッジ(以下、これを出力エッジと称する)の数、すなわち次数の情報である。頂点状態情報420は、グラフ解析における頂点の状態を示す情報であり、例えば頂点Sを始点とし、頂点Tへ至る最短経路探索問題では、頂点Sからある頂点までの最短経路情報と、既に当該頂点が訪問済みであるか否かを示す訪問状態情報などが該当する。接続先頂点情報430は、各頂点がリンクする先の頂点の頂点IDが含まれる情報である。例えば、ある頂点がn個の頂点にリンクするならば、当該頂点については、接続先頂点情報430にn個の頂点IDが含まれる。図4では、接続先頂点情報430は、接続先頂点ID配列431を含み、接続先頂点ID配列431の先頭アドレスを指す形態の実装例を示している。
ハブ頂点情報222は、解析対象グラフにおけるハブ頂点の頂点情報であり、図4に示すように、接続頂点数情報410と、頂点状態情報420と、エッジ分割数情報450と、エッジ割当て先情報460とを含む。接続頂点数情報410と頂点状態情報420は、通常頂点情報221で説明したものと同一であるため、説明は省略する。エッジ分割数情報450は、ハブ頂点が有する出力エッジ群をいくつに分割したかを示す情報であり、あるハブ頂点がいくつの仮想頂点とリンクしているかという情報に対応する。エッジ割当て先情報460は、各ハブ頂点の出力エッジが割当てられている先のワーカプロセスIDを含み、あるハブ頂点の出力エッジをn個のワーカプロセス220に分割して割当てたならば、当該ハブ頂点についてn個のワーカプロセスIDを含むことになる。図4では、エッジ割当て先情報460は、部分割当て先情報配列461を含み、部分割当て先情報配列461の先頭アドレスを指す形態の実装例を示している。また、エッジ割当て先情報460は、図1(b)に破線で示した仮想頂点へ向かう仮想的な出力エッジの情報に対応する情報といえる。
ここで、通常頂点情報221とハブ頂点情報222は様々な形態で管理可能であるが、一例を示すならば、ワーカプロセス220が保有する頂点情報を保有頂点情報401のように頂点IDを要素とする配列構造で管理し、j番目の要素には頂点jの頂点情報の構造体の先頭アドレスが格納されるとし、通常頂点である頂点iについては、通常頂点iの通常頂点情報221の先頭アドレスが格納され、ハブ頂点である頂点hについては、ハブ頂点hのハブ頂点情報222の先頭アドレスが格納されるといった形態の実装が可能である。
仮想頂点情報223は、ワーカプロセス220が保有する仮想頂点の頂点情報であり、図5に示すように、部分接続頂点数情報510、部分接続先頂点情報520とを含む。部分接続頂点数情報510は、仮想頂点の出力エッジ数の情報である。部分接続先頂点情報520は、仮想頂点がリンクしている先の頂点IDであり、仮想頂点がn個の頂点にリンクしているならば、n個の頂点IDを含む。図5では、部分接続先頂点情報520は、接続先頂点ID配列521を含み、接続先頂点ID配列521の先頭アドレスを指す形態の実装例を示している。
ここで、仮想頂点情報223は、様々な形態で管理可能であるが、一例を示すならば、ワーカプロセス220が保有する仮想頂点の情報を保有仮想頂点情報501のように仮想頂点IDを要素とする配列構造で管理し、i番目の要素には仮想頂点iの仮想頂点情報223の構造体の先頭アドレスが格納される形態の実装が可能である。
保有ハブ頂点リスト情報224は、ワーカプロセス220が保有するハブ頂点の頂点IDであり、図6に示すように、各ワーカプロセス220が保有するハブ頂点IDが格納されている。図6は、ワーカプロセス220の内の一つが、ハブ頂点として頂点1と頂点3を保有している例を示している。
仮想頂点ID変換テーブル225は、ワーカプロセス220に割当てられた部分エッジの親となるハブ頂点の頂点IDと、当該ワーカプロセス220上での仮想頂点としてのIDとを対応づけるテーブルであり、図7に示すようなテーブルである。例えば、頂点1と頂点3がハブ頂点であり、その部分エッジがワーカプロセス220の内の一つへ割当てられており、該ワーカプロセスは図5の保有仮想頂点情報501のように仮想頂点を管理するとする。このとき、保有仮想頂点情報501の配列要素は図5のように連続な値を設定して管理し易いのに対し、ハブ頂点の頂点IDは、ハブ頂点が全頂点の内の一部の頂点であるために連続した値で管理しづらい。ここで、不連続な値を配列要素番号として用いると、メモリ空間の利用効率が非常に悪くなる。これに対し、ハブ頂点の頂点IDを、ワーカプロセス220上で連続の値で管理し易い仮想頂点IDに変換することで、メモリ空間の利用効率を劇的に高めることが可能となる。このように、メモリ空間の利用効率を高めるために、ワーカプロセス220は、仮想頂点ID変換テーブル225を保有する。図7は、頂点1の部分エッジを仮想頂点1の出力エッジとし、頂点3の部分エッジを仮想頂点2の出力エッジとする変換テーブルの例を示している。
ハブ頂点識別手段226は、識別対象の頂点が通常頂点であるかハブ頂点であるかを識別する手段であり、基本的には保有ハブ頂点リスト情報224と識別対象の頂点の頂点IDを比較して識別するが、次数情報をハブ頂点閾値情報211とする場合には、識別対象の頂点の接続頂点数情報410とハブ頂点閾値情報211を比較して識別することも可能である。本実施例では、保有ハブ頂点リスト情報224を参照して識別するとして説明する。
入力エッジ処理手段227は、図8に丸印で示した頂点へ向かう複数の矢印で示すように、他の頂点から入力される情報の処理を行う手段であり、エッジ重み無しの最短経路探索問題の例では、複数のエッジからのアクセスを1つに纏める処理などを処理対象にする。その他、エッジ重み有りの最短経路探索問題の例では、経路長の最小値を算出する処理などが処理対象に該当する。
頂点情報更新手段228は、頂点状態情報420を更新する手段であり、最短経路探索問題の例では、入力エッジ処理手段227で受け取った最短経路情報に、入力エッジ処理手段227の処理対象の頂点の頂点IDを追加する更新処理や、入力エッジ処理手段227の処理対象の頂点の訪問状態情報の更新処理などを処理対象にする。
出力エッジ処理手段229は、図8に丸で示した頂点間を結ぶ矢印で示すように、他の頂点への情報出力処理を行う手段であり、最短経路探索問題の例では、頂点情報更新手段228によって更新した最短経路情報を出力エッジ先の全ての頂点へ送信する処理などを処理対象とする。
部分エッジ処理手段230は、仮想頂点情報223に対する出力エッジ処理を行う。部分エッジ処理手段230は、基本的には出力エッジ処理手段229と同一の処理を行うが、違いとしては、出力エッジ先の頂点へ送信するデータの基となる情報が他のワーカプロセス220から送られてくる点などがある。
ネットワーク250は、マスタプロセス210と、ワーカプロセス220の各プロセスと、グラフ情報格納部240とを繋ぐ要素であり、PCI ExpressやInfiniBandなどの様々な通信プロトコルを適用可能である。
グラフ情報格納部240は、記憶空間(ストレージ空間とも称する)であり、解析対象となる入力グラフ情報241が格納される。図9に、入力グラフ情報241の格納の形式の例を示す。ここでは、頂点IDを要素とする配列である入力グラフ頂点情報901でグラフに含まれる頂点を管理し、各頂点には接続頂点数情報410と接続先頂点情報430を頂点情報として割当てる形式で入力グラフ情報241を格納する例を示している。また、入力グラフ頂点情報901のi番目の要素(頂点i)には、頂点iの頂点情報の構造体の先頭アドレスが格納されている。なお、重み有りエッジなどの場合には、頂点情報の構造体に接続先頂点情報430に対応するエッジ重み情報(図示せず)が追加されるが、本実施例では説明を簡単化するため、重み無しエッジであるとして接続先頂点情報430のみを扱う。
次に、並列計算機システム10の物理的なシステム構成の例を、図10を用いて説明する。並列計算機システム10は、1つ以上の計算ノード1010と、ストレージシステム1020と、ネットワーク1030とを有する。図10では、並列計算機システム10が、計算ノード1010として、計算ノード1010−1、1010−2、および1010−3の3つの計算ノードを含む例を示した。
計算ノード1010は、ユーザが記述したプログラムコードを実行する部分であり、プロセッサユニット1011と、メモリユニット1012と、通信ユニット1013と、バス1014とを含む。計算ノード1010は、例えば、サーバ装置である。プロセッサユニット1011は、1つ以上の中央処理装置CPU1018を有する。図10の並列計算機システム10では、プロセッサユニット1011が、CPU1018−1と、CPU1018−2を有する例を示した。CPU1018のそれぞれには、図2に示したマスタプロセス210又はワーカプロセス220が割り当てられる。
メモリユニット1012は、ダイナミックランダムアクセスメモリ(DRAM)などで構成される記憶部である。CPU1018に割り当てられた各プロセスは、メモリユニット1012内に固有のメモリ領域(メモリ空間とも呼ばれる)を割り当てられる。プロセス間でデータを交換する場合は、プロセス間通信が行われる。
通信ユニット1013は、ネットワーク1030を介して他の計算ノード1010やストレージシステム1020と通信するためのユニットであり、各プロセスのメモリ空間内にある送信バッファの情報を宛先プロセスを有する計算ノード1010へ送信する処理や、外部から受信した情報を宛先プロセスの受信バッファへ書き込む処理を行う。但し、宛先プロセスが自計算ノード1010内にある場合は、ネットワーク1030を介さずにプロセス間通信を行うことができる。バス1014は、プロセッサユニット1011と、メモリユニット1012と、通信ユニット1013とをつなぐ計算ノード1010内のネットワークである。
ストレージシステム1020は、図2の入力グラフ情報241が格納されているグラフ情報格納部240に対応する物理的な装置であり、並列計算機システム10の内部にあってもよいし、外部にあってもよい。ネットワーク1030は、計算ノード1010間や計算ノード1010とストレージシステム1020の間をつなぐ通信路である。ネットワーク1030には、ネットワーク装置として、ルータ装置やスイッチなどが含まれ得る。異なる計算ノードに配置されているプロセス間の通信の場合には、ネットワーク1030は、図2のネットワーク250の物理構成の一部に含まれる。
次に、並列計算機システム10が行うグラフ解析処理の全体動作を、図11の全体処理フローチャートを用いて説明する。図11に示すように、並列計算機システム10が行う処理は、入力データ配置処理S1101、グラフ計算処理S1102、および結果出力処理S1103の3つのステップを有する。
入力データ配置処理S1101では、並列計算機システム10は、グラフ情報格納部240から入力グラフ情報241を読出し、読み出した情報を各ワーカプロセス220に配置する。本実施例では、ハブ頂点閾値情報211を次数としているため、ステップS1101において、所定の次数閾値より大きな次数を有する頂点はハブ頂点として扱われ、ハブ頂点が有するエッジ情報(接続先頂点情報430)は分割されて、異なるワーカプロセス220に配置される。
グラフ計算処理S1102は、グラフ解析のカーネル処理を行う処理ステップである。グラフ計算処理S1102では、並列計算機システム10は、頂点ごとに入力エッジ処理、頂点情報更新処理、および出力エッジ処理を行い、さらに全体同期処理を行い、これらを繰り返すことで解析結果を得る。
結果出力処理S1103は、解析結果を出力する処理ステップである。結果出力処理S1103では、並列計算機システム10は、表示装置への結果出力や、ファイルとしての結果出力などを行う。
以下、本実施の形態の入力データ配置処理S1101とグラフ計算処理S1102について、詳細に説明する。
まず、入力データ配置処理S1101を説明する。入力データ配置処理S1101では、並列計算機システム10は、グラフ情報格納部240のストレージ空間にある入力グラフ情報241を分割してワーカプロセス220へ配置する処理を行う。本実施例に係る入力データ配置処理S1101では、次数が所定値より大きい頂点のエッジ情報が分割され、図12のように異なるワーカプロセス220へ配置される。図12では、頂点1がハブ頂点であり、頂点1の頂点情報1200が分割され、ワーカプロセス1には接続頂点数情報1201を含むハブ頂点情報1211が割当てられ、ワーカプロセス2とワーカプロセス3には分割された接続先頂点情報1202、1203がそれぞれ割当てられ、ワーカプロセス2とワーカプロセス3が、割り当てられた接続先頂点情報に基づいて仮想頂点情報1221、1231をそれぞれメモリ空間に保有する例を示している。
ここで、グラフ情報格納部240の頂点1の頂点IDは入力グラフ情報241において唯一の頂点ID(グローバル頂点ID)である必要があるのに対し、ワーカプロセス220上の頂点1の頂点IDは当該ワーカプロセス220上で唯一の頂点ID(ローカル頂点ID)であればよい。但し、他のワーカプロセスと通信する際にはグローバル頂点IDで通信する必要がある。そこで、本実施例では、図13に示すように、グローバル頂点ID1301の下位ビット情報1302を当該頂点の頂点情報が配置されるワーカプロセスのワーカプロセスIDとし、上位ビット情報1303を当該頂点の頂点情報が配置されたワーカプロセス220上でのローカル頂点IDとする。このようにすることで、頂点IDを保有頂点情報401内で連続した値で管理し易くなり、保有頂点情報401を少ないメモリ空間内に格納することができ、さらに、各ワーカプロセスが他のワーカプロセスへ通信する際に自身のワーカプロセスIDを下位ビットに追加することでグローバル頂点IDに正しく復元することができ、処理の効率が良くなる。
以下、入力データ配置処理S1101のマスタプロセス210とワーカプロセス220の動作例を、図14と図15を用いて説明する。説明を簡単化するために、ワーカプロセス220はワーカプロセス1とワーカプロセス2の2つのみを用いて説明をする。また、図14と図15の図中にあるマスタプロセスはマスタプロセス210に対応し、ストレージはグラフ頂点格納部240に対応する。
まず、入力データ配置処理S1101の内、通常頂点に関する処理の基本動作を説明するために、ワーカプロセス1へ1つの頂点が割り当てられ、それが通常頂点であった場合の動作例を図14に示す。まず、マスタプロセスは、ワーカプロセス1へグラフ情報の読出し要求1401を送信する。要求を受けたワーカプロセス1は、頂点1の読出し状態1402となり、ストレージへ頂点1の接続頂点数情報データ要求1403を送信し、ストレージから頂点1の接続頂点数情報1404を取得し、頂点1が通常頂点であるかハブ頂点であるかの判定を行い、頂点1が通常頂点であるとの判定結果を得る。その後、ワーカプロセス1は、ストレージへ接続先頂点情報データ要求1405を送信し、接続先頂点情報1406を取得する。ワーカプロセス1は読出し完了状態1407となり、マスタプロセスへ処理完了通知1408を送信し、配置処理を完了する。
次に、入力データ配置処理S1101の内、ハブ頂点に関する処理の基本動作を説明するために、ワーカプロセス1へ1つの頂点が割り当てられ、それがハブ頂点であった場合の動作例を図15に示す。まず、マスタプロセスは、ワーカプロセス1へグラフ情報の読出し要求1401を送信する。要求を受けたワーカプロセス1は、頂点1の読出し状態1402となり、ストレージへ頂点1の接続頂点数情報データ要求1403を送信し、ストレージから頂点1の接続頂点数情報1404を取得する。ワーカプロセス1は、頂点1が通常頂点であるかハブ頂点であるかの判定を行い、頂点1の接続頂点数が所定閾値より大きいことから頂点1がハブ頂点であるとの判定結果を得る。ワーカプロセス1は、頂点1がハブ頂点であることをマスタプロセスへ通知するハブ頂点通知1505を送信する。
ハブ頂点通知1505を受信したマスタプロセスは、ハブ頂点である頂点1の部分エッジ情報の割当て先を決定する割当て先決定1506を行う。ここで、割当て先決定1506で決定された割当て先がワーカプロセス1およびワーカプロセス2であったとする。マスタプロセスは、ワーカプロセス1に対して頂点1の部分エッジ1の情報の、ワーカプロセス2に対して頂点1の部分エッジ2の情報の読出し要求1507をそれぞれ送信する。ワーカプロセス1およびワーカプロセス2は、それぞれ部分エッジ1読出し状態1508−1、部分エッジ2読出し状態1508−2となり、ストレージへデータ要求1509を送信し、ワーカプロセス1は部分エッジ1の、ワーカプロセス2は部分エッジ2の情報をそれぞれ取得する。ワーカプロセス1およびワーカプロセス2はそれぞれ部分エッジ1読出し完了状態1511−1、部分エッジ2読出し完了状態1511−2となり、マスタプロセスへ部分エッジ読出し完了通知1512を送信し、通知を受けたマスタプロセスは頂点1の頂点情報を保有するワーカプロセス1へ部分エッジ割当て先情報1513を送信する。部分エッジ割当て先情報1513を受信したワーカプロセス1は、読出し完了状態1407となり、マスタプロセスへ処理完了通知1408を送信し、配置処理を完了する。
以下、図16、図17(a)、および図17(b)を用いて、入力データ配置処理S1101におけるマスタプロセス210とワーカプロセス220の動作をより詳細に説明する。
図16は、入力データ配置処理S1101におけるマスタプロセス210の動作を示すフローチャートである。以下、本フローチャートにおける各処理ステップについて詳細に説明する。
まず、ステップS1601にて、マスタプロセス210は、各ワーカプロセス220へグラフ情報読出し要求1401を送信する。グラフ情報読出し要求1401には、ハブ頂点閾値情報211と、ワーカプロセス220がグラフ情報格納部240から読出す頂点情報を特定可能とするための情報とが含まれている。本実施例では、グローバル頂点ID1301によって、ワーカプロセス220はグラフ情報格納部240から読出す頂点情報を特定可能である。
ステップS1602では、マスタプロセス210は、何らかの情報を受信するまで受信バッファを確認し、受信したならばステップS1603にて受信した情報がハブ頂点通知1505であるかを判定する。受信した情報がハブ頂点通知1505であればステップS1610へ移行し、そうでなければ、ステップS1620へ移行する。ステップS1610では、マスタプロセス210は、ハブ部分エッジ割当て先決定手段214によって、通知されたハブ頂点の部分エッジの割当て先を決定し、ハブ部分エッジ割当て先情報212とワーカプロセス仮想頂点保有状況情報213を更新し、ステップS1611移行する。
ここで、ハブ部分エッジ割当て先決定手段214は、例えば、ワーカプロセス仮想頂点保有状況情報213を参照して、最も保有する仮想頂点数が少ないワーカプロセス220に優先的に割当てる。また、1つのワーカプロセスへ割当てる部分エッジ数を、例えば、ハブ頂点閾値情報211の値(ここでは所定次数値D)を上限とするなど、ハブ頂点閾値情報211の値に基づき決定する方法も取られ得る。ここで、ハブ頂点通知1505には通知される頂点の次数情報(接続頂点数情報410)が含まれるため、マスタプロセス210は、部分エッジを割当てるワーカプロセス数Nを式(1)などで計算することができる。なお、Nは小数点以下を切り上げた正の整数である。

=(通知された頂点の次数情報)/(所定次数値D)・・(1)

ステップS1611では、マスタプロセス210は、ステップS1610で決定した割当て先ワーカプロセスへ部分エッジ読出し要求1507を送信し、ステップS1602へ戻る。
ステップS1620では、マスタプロセス210は、受信した情報が部分エッジ読出し完了通知1512であるかを判定する。受信した情報が部分エッジ読出し完了通知1512であればステップS1630へ移行し、そうでなければステップS1640へ移行する。ステップS1630では、マスタプロセス210は、ステップS1620で判定した部分エッジ読出し完了通知1512が、あるハブ頂点に関する最後の部分エッジ読出し完了通知1512であった場合、例えば、あるハブ頂点の部分エッジを3つのワーカプロセス220に割当てていた場合、3回目の部分エッジ読出し完了通知を受け取った場合、ステップS1631へ移行して当該ハブ頂点の頂点情報を有するワーカプロセス220へ部分エッジ割当て先情報1513を送信し、ステップS1602へ戻る。最後の部分エッジ読出し完了通知1512ではなかった場合には、マスタプロセス210は、直接ステップS1602へ戻る。
ステップS1640では、マスタプロセス210は、受信した情報が処理完了通知1408であるかを判定し、もし処理完了通知1408であればステップS1641へ移行し、そうでなければ受信した情報に対して適切な処理を行ってステップS1602へ戻る。ステップ1641では、マスタプロセス210は、ステップS1640で判定した処理完了通知1408が入力データ配置処理S1101における最後の処理完了通知1408であるかを判定し、最後の処理完了通知であればステップS1642へ移行し、そうでなければステップS1602へ戻る。なお、ステップS1641での判定処理は、マスタプロセス210に与えられているメモリ空間に並列計算機システム10におけるワーカプロセス220の数の情報を記憶させておき、マスタプロセス210にワーカプロセス220から受信した処理完了通知1408の数をカウントさせることで可能となる。ステップS1642では、マスタプロセス210は、入力データ配置処理S1101が完了したことを通知する配置処理完了通知を全てのワーカプロセス220へ送信する。
以上が、本実施例にかかる並列計算機システム10の入力データ配置処理S1101におけるマスタプロセス210の動作である。
次に、本実施例にかかる並列計算機システム10の入力データ配置処理S1101におけるワーカプロセス220の動作を図17(a)、および図17(b)のフローチャートを用いて詳細に説明する。なお、図17(a)の結合子A17−1は、図17(b)に示す結合子A17−2と繋がっていることを示している。
ワーカプロセス220は、マスタプロセス210からのグラフ情報読出し要求1401を得た後、ステップS1701へ移行する。ステップS1701では、グラフ情報読出し要求1401を得たワーカプロセス220は、読出し対象とする頂点の設定を行い、ステップS1702へ移行する。ステップS1702では、ワーカプロセス220は、読出し対象頂点の次数情報(接続頂点数情報410)をグラフ情報格納部240から読出す処理を行い、ステップS1703へ移行する。ステップS1703では、ワーカプロセス220は、読出した次数情報とグラフ情報読出し要求1401で得たハブ頂点閾値情報211を用いて対象頂点がハブ頂点であるか否かを判定し、ハブ頂点であればステップS1720へ移行し、そうでなければステップS1710へ移行する。
ステップS1710では、ワーカプロセス220は、読出し対象頂点の接続先頂点情報430をグラフ情報格納部240より読出す処理を行い、ステップS1730へ移行する。ステップS1720では、ワーカプロセス220は、ステップS1703で判定したハブ頂点の頂点IDを保有ハブ頂点リスト情報224へ追加する処理を行い、ステップS1721へ移行する。ステップS1721では、ワーカプロセス220は、マスタプロセス210へ、判定したハブ頂点のグローバル頂点ID1301とその接続頂点数情報410を含むハブ頂点通知1505を送信する処理を行い、ステップS1730へ移行する。
ステップS1730では、ワーカプロセス220は、グラフ情報読出し要求1401にて割当てられた全ての読出し対象頂点に対し、ステップS1730までの処理が完了したかを判定し、完了しているならばステップS1731へ移行し、そうでなければS1701へ戻る。ステップS1731では、ワーカプロセス220は、本入力データ配置処理S1101においてハブ頂点通知1505が一度でも送信されたかを判定し、送信されていればステップS1733へ移行し、そうでなければ図17(a)に示すステップS1732へ移行する。ステップS1732では、ワーカプロセス220は、マスタプロセス210へ処理完了通知1408を送信し、ステップS1733へ移行する。
ステップS1733では、ワーカプロセス220は、何らかの情報を受信するまで受信バッファを確認し、受信したならばステップS1734へ移行する。ステップS1734では、ワーカプロセス220は、ステップS1733で受信した情報が部分エッジ読出し要求1507であるか否かを判定し、部分エッジ読出し要求1507であればステップS1740へ移行し、そうでなければS1750へ移行する。ステップS1740では、ワーカプロセス220は、部分エッジ読出し要求1507で指定された頂点の接続先頂点情報430の一部(これを部分エッジ情報と称する)をグラフ情報格納部240から読出す処理を行い、ステップS1741へ移行する。ここで、部分エッジ情報の読出し区間を示す情報は、例えば、接続先頂点ID情報配列431の読出し対象区間(始点と終点)を示す要素番号であり、部分エッジ読出し要求1507に含まれている。ステップS1741では、ワーカプロセス220は、ステップS1740で読出した部分エッジ情報を部分接続先頂点情報520として管理するための仮想頂点情報223を生成し、仮想頂点ID変換テーブル225を更新する。ステップS1742では、ワーカプロセス220は、ステップS1734で判定した部分エッジ読出し要求1507に対応する部分エッジ情報の読出しが完了したことをマスタプロセス210へ通知するために、部分エッジ読出し完了通知1512を送信し、ステップS1733へ戻る。
ステップS1750では、ワーカプロセス220は、ステップS1733で受信した情報が部分エッジ割当て先情報1513であるか否かを判定し、部分エッジ割当て先情報1513であればステップS1760へ移行し、そうでなければステップS1770へ移行する。ステップS1760では、ワーカプロセス220は、本入力データ配置処理S1101において、マスタプロセス210へ通知した全てのハブ頂点に対応する部分エッジ割当て先情報1513を受信したか否かを判定し、受信していればステップS1761へ移行し、そうでなければステップS1733へ戻る。ここで、マスタプロセス210へ通知した全てのハブ頂点に対応する部分エッジ割当て先情報1513をワーカプロセス220が受信したか否かの判定は、ワーカプロセス220がマスタプロセス210へ送信したハブ頂点通知1505の送信回数とワーカプロセス220がマスタプロセス210から部分エッジ割当て先情報1513を受信した回数を比較することで判定可能である。ステップS1761では、ワーカプロセス220は、マスタプロセス210へ処理完了通知1408を送信する。
ステップS1770では、ワーカプロセス220は、ステップS1733で受信した情報が配置処理完了通知であるか否かを判定し、配置処理完了通知であれば入力データ配置処理S1101を完了し、そうでなければ受信した情報を適切に処理し、ステップS1733へ戻る。
以上が、本実施例にかかる並列計算機システム10の入力データ配置処理S1101におけるワーカプロセス220の動作である。以上に説明した入力データ配置処理S1101におけるマスタプロセス210およびワーカプロセス220の動作により、図12に示した並列計算機システム10の入力データ配置処理が可能となる。
次に、並列計算機システム10のグラフ計算処理S1102におけるマスタプロセス210とワーカプロセス220の簡単な動作例を図18と図19を用いて説明する。説明を簡単化するため、ワーカプロセス220として、ワーカプロセス1とワーカプロセス2の2つのみを用いて説明する。また、図18と図19の図中にあるマスタプロセスは、マスタプロセス210に対応する。
グラフ計算処理S1102の内、通常頂点に関する処理の基本動作を説明するために、ワーカプロセス1へ通常頂点のみが割当てられた場合の動作例を図18に示す。まず、マスタプロセスは、ワーカプロセス1へ計算処理開始要求1801を送信する。計算処理開始要求1801を受信したワーカプロセス1は、頂点処理状態1802となり、自身が保有する全ての頂点に対し、入力エッジ処理手段227により入力エッジ処理1803を行い、頂点情報更新手段228により頂点情報更新1804を行う。ここでは、処理対象頂点が通常頂点であるため、出力エッジ処理手段229により出力エッジ処理1805が行われる。その後、ワーカプロセス1は、処理完了状態1806となり処理完了通知1807をマスタプロセスへ送信する。
次に、グラフ計算処理S1102の内、ハブ頂点に関する処理の基本動作を説明するために、ワーカプロセス1へハブ頂点のみが割当てられた場合の動作例を図19に示す。まず、マスタプロセスはワーカプロセス1へ計算処理開始要求1801を送信する。計算処理開始要求1801を受信したワーカプロセス1は、頂点処理状態1802となり、自身が保有する全ての頂点に対し、入力エッジ処理手段227により入力エッジ処理1803を行い、頂点情報更新手段228により頂点情報更新1804を行う。ここでは、処理対象頂点がハブ頂点であるため、ワーカプロセス1は、エッジ割当て先情報460を参照し、部分出力エッジ処理要求1905をワーカプロセス1およびワーカプロセス2へ送信する。ここで、ワーカプロセス1に与えられているメモリ空間にエッジ割当て先情報460が配置されているため、他のワーカプロセスのメモリ空間に配置されている場合に比べて、参照時にネットワークへの負荷が生じることが無くなる分、グラフ処理を高速化できる。
部分エッジ処理要求1905を受信したワーカプロセス1およびワーカプロセス2は、部分エッジ処理手段230により、ハブ頂点の部分エッジに対する出力エッジ処理である部分エッジ処理1906−1、部分エッジ処理1906−2をそれぞれ行い、部分エッジ処理完了通知1907をワーカプロセス1へ送信する。部分エッジ処理完了通知1907を受信したワーカプロセス1は、処理完了状態1806となり、処理完了通知1807をマスタプロセスへ送信する。
以下、図20、図21(a)、および図21(b)を用いて、グラフ計算処理S1102におけるマスタプロセス210とワーカプロセス220の動作をより詳細に説明する。
図20は、グラフ計算処理S1102におけるマスタプロセス210の動作例を示すフローチャートである。以下、本フローチャートにおける各処理ステップについて詳細に説明する。まず、ステップS2001にてマスタプロセス210は、各ワーカプロセス220へ、入力エッジ処理手段227、頂点情報更新手段228、出力エッジ処理手段229などを含む頂点毎に行う処理内容の情報(プログラム)、および頂点状態情報420を各ワーカプロセス220のメモリ空間に作成させる要求などのグラフ計算処理に必要な準備を整えるための情報を、初期化情報として送信する。なお、初期化情報には、例えば、頂点S(始点)から頂点T(終点)へ至る最短経路探索問題では、始点である頂点Sをアクティブ化させるための情報も含まれる。
ステップS2002では、マスタプロセス210は、各ワーカプロセス220へ処理開始要求1801を送信し、ステップS2003へ移行する。ステップS2003では、マスタプロセス210は、全てのワーカプロセス220から処理完了通知1807を受信するまで待機する。ステップS2004では、マスタプロセス210は、グラフ計算処理が完了したか否かを判定し、完了していればステップS2005へ移行し、そうでなければS2002へ戻る。ここで、グラフ計算処理が完了したか否かの判定方法としては、例えば、マスタプロセス210が全てのワーカプロセス220が直前の出力エッジ処理1805において処理したエッジ数を集計し、その値がゼロであればグラフ計算処理が完了したと判定する方法があり、この判定方法はワーカプロセス220が直前の出力エッジ処理1805において処理したエッジ数の情報を処理完了通知1807に含めて送信することで、実現可能である。
ステップS2005では、マスタプロセス210は、各ワーカプロセス220へ、グラフ計算処理S1102が完了したことを通知するグラフ処理完了通知を送信する。
以上が、並列計算機システム10のグラフ計算処理S1102におけるマスタプロセス210の動作例である。
次に、並列計算機システム10のグラフ計算処理S1102におけるワーカプロセス220の動作を図21(a)、および図21(b)のフローチャートを用いて詳細に説明する。なお、図21(a)の結合子B21−1、結合子C21−4は、それぞれ図21(b)に示す結合子B21−2、結合子C21−3と繋がっていることを示している。
ワーカプロセス220は、マスタプロセス210から初期化情報を受信して、頂点状態情報420を自身のメモリ空間に作成するなどのグラフ計算処理に必要な準備を整えた後に、ステップS2101へ移行する。ステップS2101では、ワーカプロセス220は、マスタプロセス210から処理開始要求1801を受信するまで待機する。
ステップS2102では、ワーカプロセス220は、自身のメモリ空間の受信バッファを確認し、アクティブになった頂点(他の頂点からアクセスされた頂点とも、訪問された頂点とも表現できる)に対して、入力エッジ処理手段227を用いて入力エッジ処理を行う。ステップS2103では、ワーカプロセス220は、ステップS2102にて入力エッジ処理を行った頂点に対して頂点状態情報420を更新するか否かを判定し、更新する場合にはステップS2110へ移行し、そうでなければステップ2120へ移行する。ここで、入力エッジ処理がされた頂点の頂点状態情報420が更新されない例としては、例えば重み無しエッジにおける最短経路探索問題において当該頂点が既に訪問済みの頂点であった場合などが挙げられる。
ステップS2110では、ワーカプロセス220は、頂点状態情報420を更新し、ステップS2111へ移行する。ここで、ステップS2103およびステップS2110は頂点情報更新手段228によって行われる。ステップS2111では、ワーカプロセス220は、ハブ頂点閾値情報211とハブ頂点識別手段226によって処理対象頂点がハブ頂点であるか否かを判定し、ハブ頂点であればステップS2112へ移行し、そうでなければステップS2113へ移行する。ステップS2112では、ワーカプロセス220は、処理対象頂点のエッジ割当て先情報460を参照し、部分エッジ処理要求1905を処理対象頂点の部分エッジを保有する全てのワーカプロセス220へ送信する。
ここで、部分エッジ処理要求1905のパケット構造の例として、パケット構造2201を図22(a)に示す。パケット構造2201には、パケットヘッダ情報2210、特殊パケット識別子2211、送信元ワーカプロセスID2212、アクティブハブ頂点ID2213、および出力データ2214が含まれる。
パケットヘッダ情報2210は、ネットワーク250上で通信するための通信プロトコルを満たすパケットヘッダ情報であり、宛先アドレス情報などが含まれる。特殊パケット識別子2211は、当該パケットデータが部分エッジ処理要求1905であることを受信側ワーカプロセス220が認識するための情報であり、本情報はパケットヘッダ情報2210に含まれていてもよい。送信元ワーカプロセスID2212は、送信元ワーカプロセス220を判別可能とするための情報である。アクティブハブ頂点ID2213は、受信側ワーカプロセス220が部分エッジ処理対象となるハブ頂点(仮想頂点とも表現できる)を識別可能とするための情報である。出力データ2214は、部分エッジの出力エッジ処理(部分エッジ処理)において、接続先頂点へ送る情報の元となるデータであり、例えば最短経路探索問題では最短経路情報がこれに該当する。なお、本実施例のように当該頂点の頂点情報の配置先となるワーカプロセスのワーカプロセスIDが頂点ID情報(グローバル頂点ID情報)から判別可能である場合、送信元ワーカプロセスID2212は不要である。
パケット構造2201の変形例を、図22(b)にパケット構造2202として示す。パケット構造2202は、パケット構造2201に対し、制御パケット識別子2220が追加されたものである。本実施例のグラフ処理方式では、ステップS2113の出力エッジ処理、またはステップS2130の部分エッジ処理によって接続先頂点へ出力される次の入力エッジ処理のための情報と、部分エッジ処理要求1905などの直ちに実行されるべき制御情報とがステップS2102からステップS2170までの間で混在する形式で通信され、また、前者の次の入力エッジ処理のための情報のために生じる通信数(単に通信量とも表現できる)は、後者の直ちに実行されるべき制御情報のために生じる通信数よりも圧倒的に多くなる。そのため、大規模なグラフ処理になるほど膨大な受信データの中から少数の制御情報を探し出して実行することが必要となるため、制御情報の探索時間が全体の処理速度に悪影響を与えうる。
そこで、部分エッジ処理要求1905のパケット構造としてパケット構造2202を用いる変形例の場合には、ワーカプロセス220は、自身が管理するメモリ空間内に2つ以上の受信バッファを有し、次の入力エッジ処理のための情報と直ちに実行されるべき制御情報とを別々の受信バッファに分けて格納する。これにより、直ちに実行されるべき制御情報の探索の際に次の入力エッジ処理のための情報が影響することを防ぐことができ、処理時間の短縮が可能となる。制御パケット識別子2220は、受信したパケットが直ちに実行されるべき制御情報を含むか否かを判定するための情報であり、2つ以上用意された受信バッファへの振り分け先の決定に使用される。2つ以上用意された受信バッファへの振り分け先を決定する処理は、例えば、受信側の計算ノード1010の通信ユニット1013で行うことが可能である。
ステップS2113では、ワーカプロセス220は、処理対象頂点に対し、出力エッジ処理手段229によって出力エッジ処理を行う。ステップS2120では、ワーカプロセス220は、全てのアクティブ頂点(最新の入力エッジ処理S2102で処理対象となった全ての頂点)についてS2120までの処理が完了したか否かを判定し、完了していればステップS2121へ移行し、そうでなければS2103へ戻る。
S2121では、ワーカプロセス220は、本探索レベルの処理(最新の処理開始要求1801受信からステップS2121へ至るまでの処理)において、部分エッジ処理要求1905を一度でも送信したか否か(ステップS2112を通過したか否か)を判定し、送信していればステップS2123へ移行し、そうでなければS2122へ移行する。ステップS2122では、ワーカプロセス220は、マスタプロセス210へ処理完了通知1807を送信する。ステップS2123では、ワーカプロセス220は、受信バッファ内の受信している情報を取得する。
ステップS2124では、ワーカプロセス220は、ステップS2123にて取得した情報が部分エッジ処理要求1905であるか否かを判定し、部分エッジ処理要求1905である場合にはステップS2130へ移行し、そうでなければステップS2140へ移行する。ここで、取得した情報が部分エッジ処理要求1905であるか否かは特殊パケット識別子2211を参照することで判定可能である。
ステップS2130では、ワーカプロセス220は、部分エッジ処理手段230によって部分エッジ処理要求1905のアクティブハブ頂点ID2213で指定されたハブ頂点の部分エッジ(当該ワーカプロセスが保有している仮想頂点のエッジとも表現できる)に関する出力エッジ処理を行う。なお、本出力エッジ処理で接続先頂点へ送信されるデータは出力データ2214を元に生成される。S2131では、ワーカプロセス220は、部分エッジ処理完了通知1907を送信元ワーカプロセスID2212が示すワーカプロセス220へ送信することで、要求された部分エッジ処理が完了したことを通知し、ステップS2123へ戻る。
ステップS2140では、ワーカプロセス220は、ステップS2123にて取得した情報が部分エッジ処理完了通知1907であるか否かを判定し、部分エッジ処理完了通知1907である場合にはステップS2150へ移行し、そうでなければステップS2160へ移行する。ステップS2150では、ワーカプロセス220は、全ての部分エッジ処理完了通知1907を受信したか否かを判定し、受信していればステップS2151へ移行し、そうでなければステップS2123へ移行する。ここで、全ての部分エッジ処理完了通知1907を受信したか否かは、例えば、当該ワーカプロセス220が部分エッジ処理要求1905を送信した回数と部分エッジ処理完了通知1907を受信した回数が等しいか否かを確認することで、判定可能である。ステップS2151では、ワーカプロセス220は、マスタプロセス210へ処理完了通知1807を送信し、ステップS2123へ戻る。
ステップS2160では、ワーカプロセス220は、ステップS2123にて取得した情報が処理開始要求1801であるか否かを判定し、処理開始要求1801である場合にはステップS2102へ移行して次の探索レベルの入力エッジ処理を開始し、そうでなければステップS2170へ移行する。ステップS2170では、ワーカプロセス220は、ステップS2123にて取得した情報がグラフ処理完了通知であるか否かを判定し、グラフ処理完了通知である場合にはグラフ計算処理S1102を終了し、そうでなければステップS2123へ移行する。以上が、グラフ計算処理S1102におけるワーカプロセス220の動作例である。
以上に説明したとおり、並列計算機システム10は、ハブ頂点のエッジの情報を、ハブ頂点の情報が配置されているプロセス以外のプロセスのメモリ空間に配置することで、スケールフリー特性を有するグラフ解析処理であっても、優れた並列処理スケーラビリティを実現可能となる。また、本発明に係る解決手段はBSPモデルなどに基づく既存のプログラミングモデルにも適用可能であるため、本システムのユーザとなるプログラマは並列計算機システム10の複雑な内部動作を意識せずにグラフ解析のプログラムコードを容易に記述できる。
10:並列計算機システム、101〜103:プロセス、111〜113:メモリ空間、210:マスタプロセス、220−1〜3:ワーカプロセス、240:グラフ情報格納部、250:ネットワーク、1010−1〜3:計算ノード、1011:プロセッサユニット、1012:メモリユニット、1013:通信ユニット、1014:バス、1018−1〜2:CPU、1020:ストレージシステム、1030:ネットワーク。

Claims (15)

  1. それぞれにメモリ空間が割当てられている複数のプロセスを実行する並列計算機システムでのグラフ処理方法であって、
    第1プロセスに割当てられている第1メモリ空間にグラフ頂点の情報を配置し、
    前記グラフ頂点のエッジの情報を、第2プロセスに割当てられている第2メモリ空間に配置することを特徴とするグラフ処理方法。
  2. 請求項1に記載のグラフ処理方法において、
    前記第1プロセスは、前記グラフ頂点が出力エッジ処理対象である場合に、
    前記グラフ頂点が出力エッジ処理対象であることを通知するパケットを、前記第2プロセスに送信することを特徴とするグラフ処理方法。
  3. 請求項2に記載のグラフ処理方法において、
    前記第2プロセスは、前記パケットを受信した場合、
    前記エッジの情報に基づいてエッジ処理を実行し、
    前記エッジ処理の完了を前記第1プロセスに通知することを特徴とするグラフ処理方法。
  4. 請求項1に記載のグラフ処理方法において、
    前記エッジの情報の配置の際に、
    前記グラフ頂点の次数の情報に基づいて、前記エッジの情報の配置を行うことを特徴とするグラフ処理方法。
  5. 請求項1に記載のグラフ処理方法において、
    前記エッジの情報の配置の際に、
    前記グラフ頂点の次数が所定の値よりも大きい場合に、
    前記グラフ頂点のエッジの情報を前記第2メモリ空間に配置することを特徴とするグラフ処理方法。
  6. 請求項1に記載のグラフ処理方法において、
    前記第1メモリ空間に、前記エッジの情報の配置に関する情報を記憶することを特徴とするグラフ処理方法。
  7. 請求項1に記載のグラフ処理方法において、
    前記グラフ頂点はハブ頂点であることを特徴とするグラフ処理方法。
  8. それぞれにメモリ空間が割当てられている複数のプロセスを実行する情報処理システムであって、
    ストレージに記憶されているグラフ構造データを読み出し、
    第1プロセスに割当てられている第1メモリ空間に前記グラフ構造データの内のグラフ頂点の情報を配置し、
    前記グラフ頂点のエッジの情報を、第2プロセスに割当てられている第2メモリ空間に配置し、
    前記グラフ構造データについてグラフ処理を実行することを特徴とする情報処理システム。
  9. 請求項8に記載の情報処理システムにおいて、
    前記第1プロセスは、前記グラフ頂点が出力エッジ処理対象である場合に、
    前記グラフ頂点が出力エッジ処理対象であることを通知するパケットを、前記第2プロセスに送信することを特徴とする情報処理システム。
  10. 請求項9に記載の情報処理システムにおいて、
    前記第2プロセスは、前記パケットを受信した場合、
    前記エッジの情報に基づいてエッジ処理を実行し、
    前記エッジ処理の完了を前記第1プロセスに通知することを特徴とする情報処理システム。
  11. 請求項8に記載の情報処理システムにおいて、
    前記エッジの情報の配置の際に、
    前記グラフ頂点の次数の情報に基づいて、前記エッジの情報の配置を行うことを特徴とする情報処理システム。
  12. 請求項8に記載の情報処理システムにおいて、
    前記エッジの情報の配置の際に、
    前記グラフ頂点の次数が所定の値よりも大きい場合に、
    前記グラフ頂点のエッジの情報を前記第2メモリ空間に配置することを特徴とする情報処理システム。
  13. 請求項8に記載の情報処理システムにおいて、
    前記第1メモリ空間に、前記エッジの情報の配置に関する情報を記憶することを特徴とする情報処理システム。
  14. 請求項8に記載の情報処理システムにおいて、
    第1計算ノードと、
    第2計算ノードと、
    前記第1計算ノードと前記第2計算ノードを接続するネットワーク装置と、を有し、
    前記第1プロセスが前記第1計算ノードで実行され、
    前記第2プロセスが前記第2計算ノードで実行されることを特徴とする情報処理システム。
  15. 請求項8に記載の情報処理システムにおいて、
    第1CPUと第2CPUとを備える情報処理装置を有し、
    前記第1プロセスが前記第1CPUで実行され、
    前記第2プロセスが前記第2CPUで実行されることを特徴とする情報処理システム。
JP2014506995A 2012-03-28 2012-03-28 情報処理システムおよびグラフ処理方法 Pending JPWO2013145001A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014506995A JPWO2013145001A1 (ja) 2012-03-28 2012-03-28 情報処理システムおよびグラフ処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014506995A JPWO2013145001A1 (ja) 2012-03-28 2012-03-28 情報処理システムおよびグラフ処理方法

Publications (1)

Publication Number Publication Date
JPWO2013145001A1 true JPWO2013145001A1 (ja) 2015-08-03

Family

ID=53772707

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014506995A Pending JPWO2013145001A1 (ja) 2012-03-28 2012-03-28 情報処理システムおよびグラフ処理方法

Country Status (1)

Country Link
JP (1) JPWO2013145001A1 (ja)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63118877A (ja) * 1986-11-06 1988-05-23 Hitachi Ltd ル−ト探索方法および装置
JP2009258794A (ja) * 2008-04-11 2009-11-05 Fujitsu Ltd 情報検索プログラム、情報検索装置、および情報検索方法
JP2011090352A (ja) * 2009-10-20 2011-05-06 Yahoo Japan Corp 検索データ管理装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63118877A (ja) * 1986-11-06 1988-05-23 Hitachi Ltd ル−ト探索方法および装置
JP2009258794A (ja) * 2008-04-11 2009-11-05 Fujitsu Ltd 情報検索プログラム、情報検索装置、および情報検索方法
JP2011090352A (ja) * 2009-10-20 2011-05-06 Yahoo Japan Corp 検索データ管理装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
酒井 理江 他: "「Linked Dataから潜在的な関係を探すためのクエリグラフパターン最適化」", 情報処理学会論文誌 論文誌ジャーナル VOL.51 NO.12, JPN6015013413, 15 December 2010 (2010-12-15), JP, pages 2298 - 2309, ISSN: 0003044884 *

Similar Documents

Publication Publication Date Title
WO2013145001A1 (ja) 情報処理システムおよびグラフ処理方法
US10572290B2 (en) Method and apparatus for allocating a physical resource to a virtual machine
US20180026912A1 (en) Methods and apparatus for composite node malleability for disaggregated architectures
US9864759B2 (en) System and method for providing scatter/gather data processing in a middleware environment
JP5756271B2 (ja) 並列計算の親和性駆動分散スケジューリングのための装置、方法、およびコンピュータ・プログラム(並列計算の親和性駆動分散スケジューリングのためのシステムおよび方法)
US9251156B2 (en) Information processing devices, method, and recording medium with regard to a distributed file system
US20150234674A1 (en) Method, System and Apparatus for Creating Virtual Machine
US20160203024A1 (en) Apparatus and method for allocating resources of distributed data processing system in consideration of virtualization platform
WO2016090946A1 (zh) 一种虚拟数据中心资源映射方法和设备
US11175948B2 (en) Grouping of tasks for distribution among processing entities
US9807152B2 (en) Distributed processing device and distributed processing system as well as distributed processing method
CN111182037B (zh) 一种虚拟网络的映射方法和装置
US10733025B2 (en) Balancing categorized task queues in a plurality of processing entities of a computational device
US9841919B2 (en) Information processing apparatus, communication method and information processing system for communication of global data shared by information processing apparatuses
US11269687B2 (en) Map reduce using coordination namespace hardware acceleration
CN113835823A (zh) 资源调度方法和装置、电子设备、计算机可读存储介质
US20210117235A1 (en) Storage system with efficient release of address lock waiters during synchronous replication
WO2014066605A1 (en) Traffic engineering system for preventing demand deadlock and achieving uniform link utilization
Emeakaroha et al. Analysis of data interchange formats for interoperable and efficient data communication in clouds
CN112486468A (zh) 基于spark内核的任务执行方法、系统和计算机设备
Yang et al. High-performance docker integration scheme based on OpenStack
CN115361332A (zh) 容错路由的处理方法及装置、处理器和电子设备
JPWO2013145001A1 (ja) 情報処理システムおよびグラフ処理方法
US11263130B2 (en) Data processing for allocating memory to application containers
US20210117234A1 (en) Storage system with efficient release of failed component resources during synchronous replication

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150603

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160119