(57)【要約】      （修正有）【課題】サイズが大きく明示的なグラフに関する並列計算を容易にした顧客の購買行動を表すグラフを分割して並列計算を容易にするシステムを提供する。【解決手段】最初に、グラフの頂点および辺を示すグラフデータを受信し、頂点は顧客および製品を表し、辺は購買行動を表す。次に、グラフの各辺が各区画の節となるように、グラフの辺を分割して分割グラフを生成する。さらに、１つ以上の区画内のグラフデータ上で並列計算を行って、推薦する製品を決定する。【選択図】図１
2015011709.tif 000002
【特許請求の範囲】
【請求項１】
顧客の購買行動を表すグラフを分割して並列計算を容易にする、コンピュータで実行可能な方法であって、
前記グラフの頂点および辺を示すグラフデータであって、前記頂点が顧客と製品を表し、前記辺が購買行動を表すグラフデータを受信するステップと、
前記グラフの各辺が各区画の節となるように、前記グラフの辺を分割して分割グラフを生成するステップと、
１つ以上の区画内の前記グラフデータ上で並列計算を行って、推薦する製品を決定するステップと、を含む方法。
【請求項２】
前記分割するステップが、前記辺に関連する終点に基づいて前記グラフの前記辺を分割することを含む、請求項１に記載の方法。
【請求項３】
前記分割するステップが、前記辺に関連する源点に基づいて、前記グラフの前記辺を分割することを含む、請求項１に記載の方法。
【請求項４】
前記分割するステップが、
源点に基づいて、前記グラフの前記辺を分割して前方分割グラフ生成することと、
終点に基づいて、前記グラフの辺を分割して後方分割グラフを生成することと、
推薦する製品を決定する際、前記前方分割グラフと後方分割グラフを組み合わせて、両方向のグラフ探査を容易にすることと、をさらに含む、請求項１に記載の方法。
【請求項５】
前記並列計算が、顧客の購買行動を分析する際、前記グラフの各区画を並列に探索して辺の源点および／または終点を決定することを含む、請求項１に記載の方法。
【請求項６】
前記並列計算が、ｎビットの並列幅優先探索を実行することを含み、隔たりの次数および／または頂点がｎビットで表され、ｎ＜８である、請求項１に記載の方法。
【請求項７】
顧客の購買行動を表すグラフを分割して並列計算を容易にするコンピュータシステムであって
１つ以上のプロセッサと、
前記１つ以上のプロセッサに接続し、その中に命令を格納するコンピュータ可読媒体であって、前記命令が前記１つ以上のプロセッサにより実行されると、前記１つ以上のプロセッサが、
グラフの頂点および辺を示すグラフデータであって、前記頂点が顧客および製品を表し、前記辺が購買行動を表す、グラフデータを受信し、
前記グラフの各辺が各区画の節となるように、グラフの辺を分割して分割グラフ生成し、
１つ以上の区画内の前記グラフデータ上で並列計算を行って推薦する製品を決定する動作を行う、コンピュータ可読媒体と、を含むコンピュータシステム。
【請求項８】
前記分割することが、前記辺に関連する前記終点に基づいて、グラフの辺を分割することを含む、請求項７に記載のコンピュータシステム。
【請求項９】
前記分割することには、前記辺に関連する前記源点に基づいて、グラフの辺を分割することが含まれる、請求項７に記載のコンピュータシステム。
【請求項１０】
前記分割することには、前記源点に基づいて前記グラフの前記辺を分割して前方分割グラフを生成することが含まれ、前記コンピュータ可読媒体が追加の命令を格納し、前記追加の命令が実行されると、前記コンピュータが、
前記終点に基づいて、前記グラフの前記辺を分割して後方分割グラフを生成し、
前記前方分割グラフと後方分割グラフを組み合わせて、推薦する製品を決定する際の両方向のグラフ探査を容易にする追加の動作を行う、請求項７に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフ検索に関し、より具体的には、明示的に表されたグラフで並列処理を行う方法およびシステムに関する。
【発明の概要】
【課題を解決するための手段】
【０００２】
本発明の一実施形態では、顧客の購買行動を表して並列計算を容易にするグラフを分割するシステムが提供される。動作中、このシステムは最初に、グラフの頂点および辺を示すグラフデータを受信する。このデータでは、頂点が顧客および製品を表し、辺が購買行動を表す。次に、このシステムは、グラフの辺を分割して、グラフの各辺が各区画の節となるように分割グラフ生成する。次いで、このシステムは、１つ以上の区画内のグラフデータ上で並列計算を行って推薦する製品を決定することができる。
【０００３】
本実施形態の一変更例では、分割することには、辺に関連する終点に基づいてグラフの辺を分割することが含まれる。
【０００４】
本実施形態の一変更例では、分割することには、辺に関連する源点に基づいてグラフの辺を分割することが含まれる。
【０００５】
本実施形態の一変更例では、分割することには、源点に基づいてグラフの辺を分割して、前方分割グラフを生成することが含まれる。このシステムはまた、終点に基づいて、グラフの辺を分割して後方分割グラフも生成する。次いで、このシステムは、前方分割グラフと後方分割グラフを組み合わせて、推薦する製品を決定する際の両方向のグラフ探査を容易にする。
【０００６】
本実施形態の一変更例では、並列計算には、顧客の購買行動を分析する際にグラフの各区画を探査して辺の源点および／または終点を決定することが含まれる。
【０００７】
本実施形態の一変更例では、並列計算とはｎビットの並列の幅優先探索を実行することであり、このｎビットの並列の幅優先探索では、隔たりの次数および／または頂点がｎビットで表され、ｎ＜８である。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施形態による、グラフ分割技術を用いたグラフ計算システムの例示的なアーキテクチャを示すブロック図である。
【図２】図２は、実施形態による、グラフ分割技術を示すブロック図である。
【図３】図３は、実施形態による、異なる分岐因子の値に関してグラフの区画の数が増えてしまった、最悪の場合の分割グラフの相対サイズを示すグラフである。
【図４】図４は、追加の空間オーバヘッドがないグラフの区画の最良の例を示すブロック図である。
【図５】図５は、実施形態による、グラフを分割して並列計算を容易にするための例示的な処理を示すフローチャートである。
【図６】図６は、実施形態による、並列計算のためにグラフの分割を容易にする例示的な装置を示すブロック図である。
【図７】図７は、本発明の一実施形態による、並列計算ためにグラフの分割を容易にする例示的なコンピュータシステムを示すブロック図である。  図中では、同様の参照符号は同じ番号の要素を示す。
【発明を実施するための形態】
【０００９】
本発明の実施形態により、各辺の終点または源点に基づいて、グラフの辺を分割しグラフの辺の重ならない集合を示す分散データを格納することにより、サイズが大きく明示的なグラフに関する並列計算を容易にするという課題を解決する。このようなグラフはサイズが大きいため、１台のマシンのメモリまたは記憶装置では、そのグラフを示すデータが収まらない可能性があり、グラフ計算システムでは、このようなグラフを示すデータを分割し、多くの記憶装置および／またはマシンに分散させることができる。そして、１つのサーバ（または記憶装置）だけが、各辺およびそれに関連する終点を書き込むことができるため、グラフ探査には同期するためのオーバヘッドがなく効率が向上する。
【００１０】
明示的なグラフでは、源点から終点までの各辺の点と頂点は、ある辺に関する源点になると同時に、別の辺に関する終点にもなり得ることに留意されたい。明示的なグラフの辺または頂点を推測する必要はない。さらに、方向を持たない辺は、一対の頂点の間の両方向を示す２つの方向を持つ辺として表すことが可能である。
【００１１】
終点（例えば、後方頂点）に基づいて分割されたグラフは、後方分割グラフと呼ぶことができ、源点に基づいて分割されたグラフは、前方分割グラフと呼ぶことができる。システムの中には、後方分割グラフおよび前方分割グラフの両方を用いるために、グラフを分割することができるものもある。
【００１２】
このシステムは、開示されたグラフ分割技術を用いて、各区画の終点の集合が他の区画の終点の集合と重ならないように辺を分割する。すなわち、２つの区画が同じ終点を共有することはない。これにより、２つのスレッド（または、処理／コア／コンピュータ）が同じ終点で動作していることで互いに通信・同期して時間を無駄してしまう状況を避けることができる。さらに、この技術では潜在的な辺が全てグラフに現れてしまう最悪の場合でも、辺で分割することにより分割性が保証される。
【００１３】
方向を有する明示的なグラフで計算を行うために、グラフ計算システムは、最初にグラフが記述されたデータを受信する。ある実施形態では、このシステムは、辺の終点に基づいてグラフの辺を分割して、グラフの辺を別々に格納できるようにする（例えば、別々の記憶装置またはマシンに）。グラフの中の方向を有する辺が、２つの異なる区画に同時に存在することはない。但し、２つの頂点をつなぐ両方向の方向持った２つの辺が存在する可能性はある。次いで、このシステムはグラフ上で並列計算を行うことができる。例えば、このシステムは、協調フィルタリングの並列計算を行って、ユーザに製品に薦めることができる。協調フィルタリングは、多くのユーザから嗜好情報を集めることにより、ユーザの興味を予測する技術である。この協調フィルタリングの計算では、システムは別々の記憶装置に格納されたグラフデータに対して並列で処理を実行する。分割されたグラフデータ上で同時に動作する、プロセッサどうし、および／または処理どうし、および／またはスレッドどうしが、グラフデータを探査するとき、互いに通信する必要はない。これにより、時間および記憶空間に関する計算コストを著しく削減し、並列グラフ処理に関する、広く応用可能で非常に効率の良い技術の分類を容易にする。
【００１４】
本明細書で開示された新規なグラフ分割技術では、グラフ固有の構造の有無にかかわらずそのグラフの分割を保証する。グラフが完全につながっている最悪の場合でも分割性が保証される。さらに、区間固有の情報を格納するために必要な空間オーバヘッドを、最小限にすることもでき、それでも並列処理に基づいた処理速度を著しく向上させることが可能である。このことは実験結果から確認できる。
【００１５】
なお、終点から源点までグラフを探査する、この分割技術の双対形式により、終点の代わりに源点に基づいて辺を分割することもできる。前述の通り、源点（すなわち、前方頂点）に基づいて分割されたグラフを前方分割グラフと呼ぶことができる。辺の源点と終点の両方を検査しなければならない従来の分割技術とは異なり、本明細書に開示された技術では、源点または終点のどちらか一方に基づいて分割を行うことができる。
【００１６】
図１は、実施形態によるグラフ分割技術を用いたグラフ計算システム１００の例示的なアーキテクチャを示すブロック図である。グラフ計算システム１００は、グラフを分割し分割されたグラフを別々の記憶装置など複数のロケーションに格納することができる。これらの記憶装置を１つ以上のマシンの中に設けることができる。記憶装置を複数のマシンの中に設ける場合、グラフの分割部分の書き込み、および読み出しを管理するために、ローカルのグラフ管理モジュールを個々のマシンに取り付けることができる。グラフを分割した後、グラフ計算システム１００は、分割されたグラフを探査して協調フィルタリングなど種々のアプリケーションの実行を容易にすることができる。なお、図１には、分散メモリでの並列グラフ探索を用いる実施形態が示されているが、共有メモリでの並列グラフ探索など用いるその他の実施形態も実施可能である。
【００１７】
グラフ計算システム１００は、グラフ管理モジュール１０２Ａを含むことができ、このグラフ管理モジュール１０２Ａは、サーバ１０６Ａに接続する記憶装置１０４Ａ内にインストールされている。サーバ１０６Ａは、サーバ１０６Ｂ、１０６Ｃ、１０６Ｄと通信可能である。なお、本発明の種々の実装形態では、あらゆる数のサーバおよび記憶装置を含むことができる。グラフの書き込み、および探査に関連するグラフの動作、およびその他のグラフの動作を行うために、システム１００は、種々のグラフ管理モジュール１０２Ａ、１０２Ｂ、１０２Ｃ、１０２Ｄを含むことができる。システム１００は、グラフを複数の区画に分割し、これらのグラフの区画を、区画１０８Ａ、１０８Ｂ、１０８Ｃ、１０８Ｄとして、それぞれ記憶装置１０４Ａ、１０４Ｂ、１０４Ｃ、１０４Ｄに格納することができる。ある実施形態では、区画の数がネットワーククラスタ内のノードの数と等しくなるように、システム１００がグラフを分割することができる。システムは、ユーザにより規定された区画の数に応じて、グラフを分割することができる。
【００１８】
いくつかの実施形態では、効率的なグラフ探査を容易にするために、システムが効率的な索引を付けて辺を格納することができる。このシステムは、辺に索引を付けるための索引の表を生成し用いることができ、このような索引の表を記憶装置内に格納することができる。
【００１９】
図２は、実施形態に従った、グラフ分割技術を示すブロック図である。図２には、システム１００がグラフ２０２の辺の区画を、終点に基づいて、２つのグラフの区画２０４、２０６に分割する様子が示されている。
【００２０】
グラフ２０２には、源点２０８、２１０、２１２と、終点２１４、２１６と、および辺２１８、２２０、２２２、２２４、２２６、２２８とが含まれる。辺２１８、２２０、２２２は、源点２０８、２１０、２１２と終点２１４を接続する。辺２２４、２２６、２２８は、源点２０８、２１０、２１２と終点２１６を接続する。
【００２１】
例示的な実装形態では、源点は人を表すことができ、終点は製品を表すことができる。例えば、源点２０８で表した人が、終点２１４で表された製品を購入する。また、源点２１０で表した人は、終点２１４で表された製品、および終点２１６で表された製品を購入する。グラフを探査することにより、特定な製品（例えば、終点２１４で表された製品）を購入した人が同時に購入した別の製品を、システム１００は、協調フィルタリングを通して、特定することができる。したがって、このシステムは、頂点２１０で表した人が頂点２１４で表された製品、および頂点２１６で表された製品を購入したことを、グラフから、特定することができる。頂点２０８および２１０で表した人達は二人とも頂点２１４で示された製品を購入する。
【００２２】
このシステムは、終点２１４、２１６に基づいて、グラフ２０２の辺を２つのグラフの区画２０４、２０６に分割してグラフの並列探査を容易にすることができる。グラフの区画２０４には、頂点２１４への方向を有する、３つの辺２１８、２２０、２２２を含む全ての辺が含まれる。辺２１８、２２０、２２２は、源点２０８、２１０、２１２から終点２１４への方向付を有する。グラフの区画２０６には、頂点２１６への方向を有する、３つの辺２２４、２２６、２２８を含む全ての辺が含まれる。
【００２３】
このシステムは、別々の記憶装置および／または別々のマシンにグラフの区画２０４および２０６を格納し、そこで処理を実行することができる。例えば、サーバ１０６Ｂはグラフの区画２０４を探索することができ、サーバ１０６Ｃはグラフの区画２０６を探索することができる。なお、サーバ１０６Ｂおよびサーバ１０６Ｃは、別々の頂点に向かって探査するため、同期する必要はない。あるアプリケーションの例では、このシステムは、プロセッサ間および／またはコンピュータ間で干渉することなく、異なる区画の隔たりの次数の情報を、それぞれ別々に並列で伝えることができる。この隔たりの次数とは、他の誰かと出会うために必要となる、連鎖的な紹介の数を示す数字でよい。例えば、このシステムが頂点の間の隔たりの次数をカウントするならば、グラフの区画２０４内の頂点２０８、２１０、２１２に関する隔たりの次数は１となり、したがってサーバ１０６Ｂは、頂点２１４に関する隔たりの次数を２と書き込むことができる。同時に、グラフの区画２０６内の頂点２０８、２１０、２１２に関する隔たりの次数が２ならば、サーバ１０６Ｃは、頂点２１６に関する隔たりの次数を３と書き込むことができる。同じ頂点に書き込むことによるサーバ１０６Ｂとサーバ１０６Ｃの間に干渉は発生しない。なお、いくつかの例では、終点２１６が終点２１４への方向を有する源点となることもあり得る。
【００２４】
図３は、実施形態に従った、異なる分岐因子の値に関してグラフの区画の数が増えてしまった、最悪な場合の後方分割グラフの相対的なサイズを示すグラフである。図３に示す通り、分岐因子「ｂ」が増加すると、同じ数の区画に対する分割グラフの相対サイズは小さくなってしまう。例えば、ｂ＝１０の場合、Ｐ＝８のとき分割グラフのサイズは元のグラフのサイズより６４％大きくなるが、ｂ＝４０の場合は、たった１７％しか大きくならない。ソーシャルネットワークなどの大規模なグラフの場合、頂点（例えば、人）は約４０のリンク（例えば、友達）を有し得る。したがって、ソーシャルネットワークに関する後方分割グラフの相対的な空間オーバヘッドは、かなり小さくなる。さらに、区画の数を少なくなると、追加の空間オーバヘッドも小さくなる。例えば、Ｐ＝４のとき、ｂ＝４０に関して分割グラフは分割されていないものよりもたった７％しか大きくならない。なお、最良の場合の空間の複雑度は、分割グラフと非分割グラフの両方に関して同じであり、したがって分割グラフの実際の空間オーバヘッド図３に示される最悪の場合の結果より小さい。
【００２５】
図４は、付加的な空間オーバヘッドのないグラフの区画の最良の例を示すブロック図である。図４には、追加の空間オーバヘッド、およびその非分割の同等物を必要としない２つの区画４０２、４０４を有するグラフの例が示されている。実在のグラフは、図４に示したもの全く同じとは言えないが、地理的な近さや社会地域などの制約により、これらの実在のグラフが、図４の２つに分割された（またはｎ個分割された）グラフと非常に似ているネットワーク構造に近づく可能性がある。したがって、分割グラフの空間オーバヘッドは、非分割グラフの空間オーバヘッドに近づく可能性がある。
【００２６】
図５は、実施形態に従った、グラフを分割して並列計算を容易にする例示的な処理のフローチャートである。動作中、このシステムはまず、グラフの辺と頂点を規定する入力を受信する（動作５０２）。このシステムは、ユーザの入力を通して、または前もって格納されているグラフデータであるグラフデータを取得することができる。次に、このシステムは区画の数を決定する（動作５０４）。例えば、このシステムは５０個の区画に対してＰ＝５０と決定することができる。このシステムはまた、区画の数を規定するユーザの入力を受信することもできる。
【００２７】
次いで、このシステムは、グラフの辺を異なる区画に分割する（動作５０６）。このシステムは、最初にどの頂点がグラフの辺の源点および終点になるかを決定する。次いで、このシステムは、終点ノードの範囲を決定し（グラフの頂点を１からｎの範囲で表示することができる）、Ｐ個の区画で終点の範囲を分割することができる。例えば、第１の区画には範囲［１，（ｎ／Ｐ）］の頂点が含まれ得、第２の区画には範囲［（ｎ／Ｐ）＋１，２ｎ／Ｐ］の頂点が含まれ得る。なお、区画の平均サイズは「ｎ／Ｐ」であり、最悪の場合の終点の範囲は１からｎである。
【００２８】
このシステムは、各区画に関連する辺を格納することができる。例えば、このシステムは、種々の記憶装置、種々のファイル、または種々のディレクトリ、あるいは別々のマシンに辺を格納することができる（動作５０８）。グラフの分割後、このシステムはグラフの区画を用いて並列計算を行うことができる。例えば、グラフを探索することができる（動作５１０）。
【００２９】
図６は、実施形態に従った、並列計算のためにグラフの分割を容易にする例示的な装置６００を示すブロック図である。装置６００は複数のモジュールを含むことができ、これらのモジュールは有線または無線の通信チャネルを介して互いに通信可能である。装置６００は、１つ以上の集積回路用いて実現可能であり、図６で示されているものよりも多いモジュール、または少ないモジュールを含むことができる。さらに、装置６００をコンピュータシステムの中に組み込むことも、あるいは他のコンピュータシステムおよび／または装置と通信可能な独立の装置として実現することも可能である。具体的には、装置６００は、グラフデータ受信モジュール６０２、グラフ分割モジュール６０４、区画記憶・読出しモジュール６０６、グラフ探査モジュール６０８を含むことができる。
【００３０】
いくつかの実施形態では、グラフデータ受信モジュール６０２は、グラフの頂点と辺を記述したデータを受信することができる。グラフ分割モジュール６０４は、本明細書に記載される技術を用いて、グラフを分割することができる。区画記憶・読出しモジュール６０６は、記憶装置への書き込みおよび読み出し、グラフの分割および探査に関連する全ての機能、およびグラフ検索に関連するその他の全てのグラフデータの操作機能を行う。グラフ探査モジュール６０８は、メモリまたは記憶装置内のグラフの探査を容易にする。なお、図１に示すグラフ管理モジュール１０２Ａ〜１０２Ｄは、図６で説明した種々のモジュールのありとあらゆる機能を実行可能である。
【００３１】
このセクションでは、本明細書に記載された技術の複雑度について分析する。まず、いくつか正式な定義を行い、記法の紹介から始め、分析、追加の例および説明と続く。
【００３２】
グラフＧが、頂点の集合（すなわち頂点ｖ∈Ｖ）、および辺の集合（すなわちｅ∈Ｅ）から成り、頂点「ｕ」から頂点「ｖ」まで方向を有する辺がグラフＧに存在する場合、およびその場合に限って辺「ｅ」は（ｕ，ｖ）の形態をとる。この場合、頂点「ｕ」は頂点「ｖ」の前方頂点となり、頂点「ｖ」は頂点「ｕ」の後方頂点となる。グラフＧが方向を持たない場合は、「∀（ｕ，ｖ）∈Ｅ→（ｖ，ｕ）∈Ｅ」となる。
【００３３】
ある実装形態では、頂点は、その頂点に割り当てられた［０，｜Ｖ｜］の範囲の一意の整数識別子を有し得る。符号「ｕ」および「ｖ」は、それぞれ辺に関連する源点および終点の整数識別子を示す。「ｖｍｉｎ−ｄｅｓｔ」および「ｖｍａｘ−ｄｅｓｔ」を、それぞれ、終点（すなわち、少なくとも１つの（１）前方頂点を有する頂点）の最小整数識別子および最大整数識別子とする。システムがグラフＧから作成するグラフの区画の数を「Ｐ」とし、「Ｖｍｉｎ−ｄｅｓｔ」を（Ｐ＋１）個の要素の整数のアレイとし、下記の関係が成り立つようにする。
【数１】
2015011709.tif 000003
【００３４】
システム１００は、辺の集合「Ｅ」をＰ個の区画に分割して下記の関係が成り立つようにすることができる。
【数２】
2015011709.tif 000004
【００３５】
これらの辺の区画「Ｅｐ」は、以下の特性を有することが分かる。
【数３】
2015011709.tif 000005
【００３６】
これに応じて、システム１００はまた、頂点の集合「Ｖ」もＰ個の区画に分割して下記の関係が成り立つようにすることもできる。
【数４】
2015011709.tif 000006
【００３７】
グラフに独立した頂点が無い場合、∪ｐ∈［０，Ｐ］Ｖｐ＝Ｖとなることが分かる。ＤＶｐ＝  ｛ｖ｜∃（ｕ，ｖ）∈Ｅｐ｝を区画「ｐ」内の終点の集合（但し、ｐ＝０、１、…、Ｐ−１）とする。
【００３８】
これらの終点の集合「ＤＶｐ」は下記の特性を有することが分かる。
【数５】
2015011709.tif 000007
【００３９】
すなわち、区画内の終点の集合が、他の区画内の終点の集合と干渉しないことが保証される。別々の区画で動作する別々のスレッド（またはコンピュータ）が、同じ終点には到達しないことが保証されるため、このことが、これらの区画を作成する主な理由である。これにより、異なる区画からの並列の書き込みが同じ頂点で起こらないことが保証される。単一の区画が、単一のスレッドだけにより処理されている場合、並列の書き込みが同じ頂点に起こらないことをさらに保証することができる。並列の書き込みがされない場合、グラフ探査のステージでデータ破壊を防ぐための異なるスレッドどうし同期は必要ない。
【００４０】
探索ステージは、最も時間がかかるステージであり得るが、普通は、これがグラフ検索処理の唯一のステージではない。グラフ検索処理には、検索状態を精査し余分なものを切り詰め、その先を拡張するための頂点を先端に配置するなどのステージも含まれ得る。各探索ステージの終了時（すなわち、次の探索ステージの開始時）に、更新された検索状態が、影響を受ける得るスレッドに伝わるならば、本発明の実施形態では、グラフ検索処理で行われる探査以外の動作のタイプについて限定はしない。良好に構成されたグラフでは、スレッドの一部分だけしか、この更新情報を受信する必要がない可能性がある。一方、ありとあらゆるスレッド（またはコンピュータ）が、その更新された検索状態を、残りのスレッド（またはコンピュータ）伝えなければならない可能性もある。更新があった場合に、次の動作に進むことができるように、全ての更新が行われ、その処理が通知されれば、本発明の実施形態では、検索状態の更新を伝えるために用いる、通信プロトコル（複数可）またはメモリのアーキテクチャ（例えば、共有メモリ対分散メモリ）のタイプを限定はしない。共有メモリを有するコンピュータの場合、情報伝達ステージがない可能性がある、というのも、全ての局所的な更新はすぐに全体から見られ得るからである。このような場合、処理が延滞することなくすぐに次の動作に移る。
【００４１】
元のグラフＧが複数の区画に分割される場合、もとのグラフＧの符号化された情報には含まれていない、その区間固有の情報を格納する追加の空間が必要となる。１つの区画にだけ辺がマッピングするため、元のグラフの全ての辺は分割されたグラフＧの符号化された情報内に正確にたった１度だけ示される。
【数６】
2015011709.tif 000008
【００４２】
したがって、分割グラフは、元のグラフの辺の集合を示すための付加的な空間を必要としないが、システム１００は、付加的な空間を用いて、これらの区画の辺のために効率的な検索用索引を作成することができる。
【００４３】
辺を符号化するための空間と同じサイズの空間を索引項目として使用すると仮定すると、｜Ｖ｜個の索引項目、つまりグラフの頂点ごとに１つの索引項目が存在し得る。元のグラフに関して必要とされる全空間は、「Ｏ（｜Ｅ｜＋｜Ｖ｜）」となり、これは辺のサイズと検索索引のサイズの合計となる。分割グラフに関して、次の不等式の関係が保たれている。
【数７】
2015011709.tif 000009
【００４４】
【数８】
2015011709.tif 000010
の場合、およびその場合に限って、｜Ｖ｜＝Σｐ∈［０，Ｐ）｜Ｖｐ｜ということが分かる。その一方で、Ｖｐ＝Ｖの場合、およびその場合に限って、Σｐ∈［０，Ｐ）｜Ｖｐ｜＝Ｐ｜Ｖ｜である。両方とも起こり得るが、その可能性は高くない。明確な構造を持たないグラフでは、Σｐ∈［０，Ｐ）｜Ｖｐ｜は｜Ｖ｜よりもＰ｜Ｖ｜に近い。いずれの場合でも、Σｐ∈［０，Ｐ）｜Ｖｐ｜は、Ｏ（Ｐ｜Ｖ｜）よりも小さい。
【００４５】
Σｐ∈［０，Ｐ］｜Ｅｐ｜＝｜Ｅ｜および｜Ｖ｜≦Σｐ∈［０，Ｐ］｜Ｖｐ｜≦Ｐ｜Ｖ｜に基づいて、Ｐ個の区画を有する後方分割グラフに関する空間の複雑度を次の通り表すことができる。
【数９】
2015011709.tif 000011
【００４６】
したがって、Ｏ（｜Ｅ｜＋Ｐ｜Ｖ｜）は、Ｐ個の区画を有する後方分割グラフの最悪の場合の空間複雑度である。前の分析Σｐ∈［０，Ｐ）｜Ｖｐ｜≧｜Ｖ｜から、最良の空間の複雑度はＯ（｜Ｅ｜＋｜Ｖ｜）であり、これは元の非分割グラフの空間複雑度と同じである。
【００４７】
後方分割グラフに関する追加の空間オーバヘッドが重要かどうかは、｜Ｖ｜に対する｜Ｅ｜の割合に依存する。ｂ＝｜Ｅ｜／｜Ｖ｜（平均の分岐因子）とすると、非分割のグラフと比較した、最悪の場合の後方分割グラフの相対サイズは下記のように表すことができる。
【数１０】
2015011709.tif 000012
【００４８】
後方分割グラフのコンセプトは、頂点からその後方頂点までの並列グラフ探査に対して有効であるということである。しかし、システム１００では、所与の処理またはアプリケーションに関して両方の前方および逆方向に探査する必要があり得る。頂点から、その後方頂点までの非同期の並列グラフ探査を可能にするために、システム１００は、前方分割グラフを生成することができ、この前方分割グラフは、以下に規定する通り、後方分割グラフと双対である。
【００４９】
「ｖｍｉｎ−ｓｒｃ」および「ｖｍａｘ−ｓｒｃ」を、それぞれ源点（すなわち、少なくとも１つの（１）後方頂点を有する頂点）の最小整数識別子および最大整数識別子とする。下記の関係が成り立つように、「Ｖｍｉｎ−ｓｒｃ」を（Ｐ＋１）個の要素の整数のアレイとする（「Ｐ」はグラフの区画の数）。
【数１１】
2015011709.tif 000013
【００５０】
下記の関係が成り立つように、辺の集合ＥをＰ個の区画に分割することができる。
【数１２】
2015011709.tif 000014
【００５１】
これらの辺の区画「Ｅ’ｐ」が以下の特性を有することが分かる。
【数１３】
2015011709.tif 000015
【００５２】
これに応じて、システム１００はまた、下記の式のように、頂点の集合「Ｖ」もＰ個の区画に分割することができる。
【数１４】
2015011709.tif 000016
【００５３】
グラフに独立した頂点が無い場合、∪ｐ∈［０，Ｐ］Ｖ’ｐ＝Ｖとなることが分かる。「ＳＶｐ＝｛ｖ｜∃（ｕ，ｖ）∈Ｅ’ｐ｝」を区画「ｐ」内の源点の集合とする（但し、ｐ＝０、１、…、Ｐ−１）。これらの源点の集合「ＳＶｐ」は下記の特性を有することが分かる。
【数１５】
2015011709.tif 000017
【００５４】
すなわち、ある区画内の源点の集合が別の区画内の源点の集合と重ならないことが保証される。ある頂点からその後方頂点までの並列グラフ探査を行う際、別々の前方グラフの区画で動作する別々のスレッド（またはコンピュータ）が、同じ源点に書き込むことができないことが保証される。単一の前方グラフの区画が、単一のスレッドだけで処理される場合、同じ源点への並列書き込みが無いことをさらに保証することができる。並列書き込みがされない場合は、データ破壊を防ぐために異なるスレッド（またはコンピュータ）どうしを、前方分割グラフの探査中に、同期（または通信）させる必要はない。終点は、このような探査では、読み出されるだけなので、この終点も影響を受けることはない。
【００５５】
グラフ計算システムは、前方分割グラフと後方分割グラフと組み合わせることにより、両方向（すなわち、ある頂点からその前方頂点および後方頂点まで）のグラフ探査を行うことが可能である。さらに、これらのどちらの方向の探索を行っている間にも同期する必要ないことが保証される。
【００５６】
（Ｐ＋１）個の要素の整数アレイであるＶｍｉｎを必要とする分割グラフの両方のタイプを呼び出すと、下記の関係が成り立つ。
【数１６】
2015011709.tif 000018
「ｖｍｉｎ」および「ｖｍａｘ」は、それぞれ前方分割グラフおよび後方分割グラフに関する、源点および終点の最小整数識別子および最大整数識別子である。「ｖｍｉｎ」と「ｖｍａｘ」の間の範囲を包括的に、Ｐ個の部分範囲に分割するための最も簡単な方法は、Ｐ個の（ほぼ）等しいサイズの区画に分割することである。最初の（Ｐ−１）個の区画は、全く同じサイズ└（ｖｍａｘ−ｖｍｉｎ＋１）／Ｐ┘を有し、最後の区画が残った頂点を含む。つまり下記のようになる。
【数１７】
2015011709.tif 000019
【００５７】
なお、└（ｖｍａｘ−ｖｍｉｎ＋１）／Ｐ┘は、これらの各区画の頂点の数だけを合計しているため、最初の（Ｐ−１）個の区画の頂点のサイズだけを有する。そして、区画内の辺の数を合計する辺のサイズは、その頂点のサイズとはかなり異なる。したがって、全く同じ数の頂点を有する区画どうしであっても、お互いの区画のサイズはかなり異なる。というのも、区画のサイズは頂点のサイズと辺のサイズの合計であるからである。
【００５８】
非均一な頂点サイズの区画を含む「ｖｍｉｎ」と「ｖｍａｘ」の間の範囲を分割するやり方は他にもある。例えば、その一つとして、区画サイズを全ての区画で（大まかに）同じにするために、非均一な頂点のサイズでも可能にすることが挙げられる。辺から区画へのマッピングが一意的（すなわち、必ず単一の辺がきっちりと１つの区画にマッピングされる）であるならば、その他の変形例も可能である。
【００５９】
前述した通り、本開示の一様態では、全てのグラフの探査ステージ中、前方頂点ベースまたは後方頂点ベースであれば、そのスレッド（またはコンピュータ）が別のスレッド（またはコンピュータ）と同期する（または通信する）必要がないことを保証している。本開示では、グラフ検索の最もコストのかかる部分、すなわち探索ステージで、同期または通信を必要と減らす。さらに、スレッド（またはコンピュータ）が、探索ステージ後、検索情報を他のスレッド（またはコンピュータ）に送信する際、ストリーミング方式で送信している、というのも複数の頂点に関する更新された検索情報を一緒にまとめることで通信オーバヘッドを減らすことができるからである。
【００６０】
共有メモリの実施形態、および分散メモリの実施形態に関して、
・共有メモリの並列グラフ探索の場合、下記に記載する分散メモリとは異なり、同期または通信する必要なしに、更新された全ての検索状態を全てのスレッドですぐに見ることができるので、同期の数をグラフ探査のステージごとにＯ（｜Ｅ｜）からＯ（１）に削減することができる。
・分散メモリの並列グラフ探索の場合、本開示により、辺がカウントされている全ての探索ステージで通信する必要がないため、本発明の実施形態では、通信の数をＯ（｜Ｅ｜）からＯ（｜Ｖ｜）に減らすことができる。辺の数｜Ｅ｜は通常、頂点の数｜Ｖ｜より（非常に）多いため、削減される数は多くなり得る。
【００６１】
但し、より正確に分析するためには、分散メモリ環境での辺の格納のやり方、および検索のやり方、ならびにコンピュータ間で通信するときの辺のグループ化のやり方などの要因が必要となるため、上記の通信の複雑度の分析は概算の値となることに留意されたい。同様に、頂点の検索状態のグループ化のやり方も、本発明の種々の実施形態の通信の複雑度に影響する。より具体的には、Ｏ（｜Ｅ｜／ｂｅ）が、辺に関する通信の複雑度であり、Ｏ（｜Ｖ｜／ｂｖ）が、頂点に関する通信の複雑度である（「ｂｅ」および「ｂｖ」は、それぞれグラフ探査のステージで用いられる辺および頂点の通信のブロックサイズ）。一般には、「ｂｅ＜＜ｂｖ」であり、したがって、本開示での相対的な通信の複雑度の利点としては、「ｂｅ」と「ｂｖ」の間の差を考慮した場合、「ｂｅ」が「Ｏ（｜Ｅ｜）／Ｏ（｜Ｖ｜）＝Ｏ（｜Ｅ｜／｜Ｖ｜）＝Ｏ（ｂ）」よりも著しく大きくなり得ることである。すなわち、「Ｏ（ｂ・ｂｖ／ｂｅ）」を用いて、開示されている実施形態の複雑度の利点をより良く推定することが可能である。
【００６２】
実証的な調査を行わないと、「ｂｖ」と「ｂｅ」の間の正確な割合を算出するのは困難であるが、実際には「ｂｖ」＞「ｂｅ」と仮定しておけば、通常は間違いない。というのも、「ｂｖ」はその通信プロトコルで可能な最大値となり、一方「ｂｅ」は平均の分岐因子「ｂ」およびグラフの局所性の影響を受け得るためである。例えば、「ｂ」が小さい場合、またはある頂点の後方頂点（または前方頂点）を生成するコンピュータがローカルメモリ内の辺を全て含まなければ、「ｂｅ」の値は小さくなる傾向がある。その一方で、本開示の技術を適用するシステムは、線形走査を用いて単一のメッセージ内のできるだけ多くの頂点をグループ化することができるため、「ｂ」またはグラフの局所性の影響を受けにくい。
【００６３】
上記の複雑度の分析は単一のグラフ探査ステージに対するものであり、複数の（探査または非探査）ステージが存在する場合、その結果をその都度調整しなければならない。例えば、共有メモリでは、このシステムが「ｄ」回の探査ステップを行わなければならない場合、同期の複雑度は、本開示の技術を用いた「Ｏ（１）」ではなく「Ｏ（ｄ）」となり得る。
【００６４】
本明細書で開示される実施形態のその他の利点として、グラフの区画の数に制限されることなく、特別な事例のアプローチ（カテゴリ＃２で）を行うことができる。このことは重要である。というのも、これによりグラフの区画より多い数のスレッド（またはコンピュータ）を用いて、特別な事例のアプローチを実行できるためである。Ｐ個のグラフの区画の事例を考察するが、幅優先探索を行うために、「ｍ×Ｐ」個のコアが利用可能である。各区画でもｍ個のコアの同時に使用することができ、したがって、これらのＰ個の区画内で同期することなく「ｍ×Ｐ」個のコアを使用可能である。この考えを少し変えてみると、不統一の数のコアを用いて、各区画を処理することも可能である。例えば、単一の区画を処理するために割り当てられるコアの数は、区画内の辺の数に比例し得る。単一の区画を処理するために用いるコアの数を制限することなしに、これらの変形例がカテゴリ＃２内の特別な事例のアプローチと完全に用いることができることは大きな魅力である。
【００６５】
さらに別の利点は、ｎビットの幅優先探索（ｎ＜８）などの特定な特別な事例のアプローチの空間効率および時間効率を向上させることができるということである。ソーシャルネットワークで周知の六次の隔たりの規則を考慮すると、スモールワールドグラフに関する隔たりの次数を符号化するために数ビットの容量しか必要としないことが分かる。例えば、７次の隔たりまでを符号化するためには３ビットで十分であり得る。しかし、並列の幅優先探索のアプローチでは、最大の隔たりの次数がどの程度になるかにかかわらず、この隔たりの次数を符号化するために、少なくとも１バイト（８ビット）を用いなければならない。その理由は、複数のスレッドが同じ値をメモリセルに書き込む際、１バイトが一貫性を保証できる最小のメモリ単位であるためである。本開示の実施形態では、１つのスレッドで各区画が検索されている限り、このような最小１バイトの符号化の制限を取り除くことができる。
【００６６】
これにより、並列の２ビットの幅優先探索などの幅優先探索の高度な変更例をその固有の形態で適用して、メモリおよび実行時間を著しく節約することが可能となる。なお、４次より小さい隔たりの次数しか計算できないものとは対照的に、高度な２ビットの幅優先探索では、任意のグラフに関する隔たりの次数を計算することができる。２ビットの幅優先探索の詳細な説明は文献で見ることができ、最良の並列の２ビットの幅優先探索は、２ビットよりむしろ８ビットを要して頂点を格納する。本開示では、最初に、隔たりの次数および／または頂点を符号化するために２ビットしか用いない、本当の２ビットの並列幅優先探索を実行可能にする。さらに広く言えば、本開示では、隔たりの次数および／または頂点を符号化するためにｎビット（ｎ＜８）用いる、ｎビットの並列幅優先探索を実行可能にする。
【実施例】
【００６７】
開示された技術の効果を調査するために実験が行われた。使用されたグラフは以下の形の顧客の購買行動データに基づく。＜顧客＿ｉｄ＞、＜製品＿ｉｄ＞、＜顧客＿ｉｄ＞を有する顧客が、＜製品＿ｉｄ＞を有する製品購入する。この顧客−製品グラフは、２部グラフであり、辺は顧客の頂点と製品の頂点の間にだけ存在し得る。この辺により、顧客が製品を購入したことが示される。ベンチマークのクエリーは以下のステージを有する。
１．顧客の頂点からスタートし、顧客により購入された製品の集合を検索する。
２．これらの製品のうちの少なくとも１つを購入した別の顧客を検索する。
３．これらの顧客に購入された製品の中で最も人気のある製品を検索する。
【００６８】
上記のクエリーは、ステップ１で特定された顧客に製品を推薦することができる協調フィルタである。以下の理由から、本開示の実施形態の並列効率に対してベンチマークを行うことを選択した。
【００６９】
第１に、後方分割グラフおよび前方分割グラフの両方が必要である。ステップ１では、探査方向が顧客から製品になるため（すなわち、ある頂点からその後方頂点）後方分割グラフが必要となる。ステップ２では、その反対の探査方向（すなわち、ある頂点から前方頂点）のため、前方分割グラフが必要となる。第２に、このクエリーには、非グラフベースのステップ、すなわち、仕分けを必要とするステップ３、が含まれる。多くの実在のアプリケーションには、グラフベースの計算、および非グラフベースの計算の両方が含まれるため、ベンチマークのクエリーで仕分けステップを有することにより、この実験におけるアプリケーションの現実感を増加させることができる。
【００７０】
この実験で使用された顧客−製品グラフでは、１探査方向に約２４，４００，０００個の辺を有する。したがって、格納される辺の総数は、両方向の探査に対して約２４，４００，０００×２＝４８，８００，０００個の辺となる。約３，０００，０００人の一意の顧客および４００，０００個を超える一意の製品が存在する。１００人の顧客の集合をステップ１で使用するクエリーの異なる「種」としてランダムに選び、壁時計の平均秒数を記録する。基準値として、キャッシュに優しいグラフ探査の実装形態を用い、この実装形態により頂点の集合を、数多くの重ならない範囲に分割し、これらの頂点の値を後方の頂点から並列にて戻す。基準値の実装形態では、各スレッドをその他のスレッドと重ならない「書き込み」領域に割り当てることによりスレッド間の干渉が避けられる。基準値の実装形態内の全てのスレッドは、源点へ戻す必要のある値を求めて終点の全範囲を走査しなければならない。使用されたテストマシンは、インテルのＸｅｏｎ  Ｅ３−１２２５、および４つコア有する３．１ＧＨｚのプロセッサと、８ＧＢのＲＡＭとを備える。本開示で使用可能な新しい並列技術、および基準値に対して、最良の構成が使用された。
【００７１】
壁時計の平均時間は、基準値に関しては１７２，０００，０００秒であり、新しい技術に関しては２４，０００，０００秒であり、こちらの方が基準値よりも７．２倍速い。なお、ベンチマークのクエリーの、メモリの初期化および製品のフィルタリングを含む複数のステップは、基準値と新しい技術の両方で共通であるが、これらはグラフ検索には関係ない。したがって、グラフ探査に関する新しい技術の相対速度の利点は、ここで見られたものよりも大きい。
【００７２】
さらに、基準値の実装形態では、最も多く購入された製品を検索するだけでよいため、ステップ３での仕分けを行わないが、新しい技術では、普通のシーケンスソートのアルゴリズム（ｑｓｏｒｔ）を用いて、ステップ２で特定された顧客の中の少なくとも１人により購入された全ての製品を順位付けする。新しい技術の２４，０００，０００秒には、（上位からｋ番目までの、最も人気のある製品を検索するために必要な）仕分けステップを含む全ての計算結果が含まれる。この２４，０００，０００秒に含まれないものは、前方分割グラフおよび後方分割グラフを作成するための１度きりの計算結果の投資であり、これには３，０００，０００件の全ての顧客に関して４３０，０００，０００秒かかる。したがって、分割グラフの償却原価は非常に小さい。
【００７３】
（例示的なシステム）
図７には、本発明の一実施形態に従った、並列計算を行うための分割グラフを容易にする例示的なコンピュータシステム７００が示されている。ある実施形態では、コンピュータシステム７００は、プロセッサ７０２、メモリ７０４、記憶装置７０６を含む。記憶装置７０６は、アプリケーション７１０および７１２、ならびにオペレーティングシステム７１６などの複数のアプリケーションを格納する。記憶装置７０６はまた、グラフ計算システム１００を格納し、このグラフ計算システム１００には、グラフデータ受信モジュール６０２、グラフ分割モジュール６０４、区画記憶・読出しモジュール６０６、グラフ探査モジュール６０８が含まれ得る。動作中、グラフ計算システム１００など、１つ以上のアプリケーションが、記憶装置７０６からメモリ７０４に読み出され、プロセッサ７０２が、読み出されたアプリケーションを実行する。プロセッサ７０２は、プログラムを実行すると同時に、上述した機能も実行する。コンピュータおよび通信システム７００は、随意的に、ディスプレイ７１７、キーボード７１８、ポインティングディバイス７２０に接続可能である。
【図１】
2015011709.tif 000020
【図２】
2015011709.tif 000021
【図３】
2015011709.tif 000022
【図４】
2015011709.tif 000023
【図５】
2015011709.tif 000024
【図６】
2015011709.tif 000025
【図７】
2015011709.tif 000026