(57)【特許請求の範囲】
【請求項１】
情報処理サブシステムと、該情報処理サブシステムとデータ通信を行うメモリサブシステムとを備えた情報処理装置であって、
前記情報処理サブシステムは、グラフ処理命令に従ってグラフの処理を行う情報処理回路を有し、
前記メモリサブシステムは、第一のメモリと、第二のメモリと、該第一及び第二のメモリよりも読み出し及び書き込みレイテンシが長い第三のメモリと、前記第一のメモリと前記第二のメモリと前記第三のメモリ間でデータ転送を制御するメモリコントローラとを有し、
前記グラフの処理の対象となるグラフデータは、グラフの各頂点に該各頂点を一意に特定するIDが割り当てられており、前記頂点の１つに割り当てられたIDが分かれば、該頂点と関係性を持つ他の頂点のIDがアドレス空間でどの場所にあるのか特定できるデータであり、複数のデータブロックから構成され、
前記データブロックは、前記1つの頂点のIDを前記メモリコントローラによって解析することで判明するアドレスに対応する全データもしくはデータの一部であり、その中に少なくとも前記１つの頂点のIDが記録されており、
前記メモリコントローラは、
前記第三のメモリに、処理の対象となる前記グラフデータを格納する機能と、
複数の前記データブロックを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送するプレロード機能とを有し、
前記メモリコントローラは該プレロード機能により、
１つの前記データブロックAに含まれる少なくとも１つの前記頂点のIDを自律的に解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックBのアドレスを計算し、当該データブロックBを前記第三のメモリから前記第一のメモリもしくは前記第二のメモリへ転送し、
続けて、以前に前記第三のメモリから前記第一もしくは前記第二のメモリへ転送した前記データブロックAもしくはBもしくはA及びBとは異なる前記データブロックCに含まれる少なくとも１つの前記頂点のIDを解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックDのアドレスを計算し、当該データブロックDを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送し、
以下同様に複数のデータブロックを前記第三のメモリから第一もしくは第二のメモリへ転送し、
前記情報処理回路において、前記プレロード機能が実行されている前記データブロックの転送先とは異なる前記第一もしくは第二のメモリから、前記グラフデータを読み出し、前記処理命令に従って該グラフデータの処理を実行することを特徴とする情報処理装置。
【請求項２】
請求項１において、
前記メモリコントローラは、前記プレロード機能により、
前記データブロックと共に、該データブロックに対応するアドレスも前記第一もしくは第二のメモリへ転送する
ことを特徴とする情報処理装置。
【請求項３】
請求項２において、
前記メモリコントローラは、
前記情報処理回路が要求した処理の対象となる前記グラフデータのアドレスと、前記情報処理回路のグラフデータ参照先の第一もしくは第二のメモリへ転送された前記データブロックに対応する前記アドレスを比較し、両者が一致するか否かを判定する機能を有する
ことを特徴とする情報処理装置。
【請求項４】
請求項３において、
前記メモリコントローラは、
前記第三のメモリに格納された前記グラフデータのうち、前記第一もしくは第二のメモリに転送されたデータブロックと転送されていないデータブロックを区別する機能を有する
ことを特徴とする情報処理装置。
【請求項５】
請求項３において、
前記メモリコントローラは、
前記第三のメモリから転送される前記データブロックの保存先を、前記第一のメモリから前記第二のメモリへ切り替える機能、及び前記第二のメモリから前記第一のメモリへ切り替える機能を有する
ことを特徴とする情報処理装置。
【請求項６】
請求項３において、
前記メモリコントローラは、
前記情報処理回路によるグラフデータの参照先のメモリを前記第一のメモリから前記第二のメモリに切り替える機能、及び前記第二のメモリから前記第一のメモリに切り替える機能を有する
ことを特徴とする情報処理装置。
【請求項７】
請求項３において、
前記情報処理回路から前記メモリコントローラに、該メモリコントローラが前記グラフデータの自律的な解析を行うために必要なデータやアルゴリズムを伝達する
ことを特徴とする情報処理装置。
【請求項８】
請求項３において、
前記情報処理回路若しくは前記メモリコントローラは、
前記グラフデータのデータ形式が当該情報処理装置で取り扱うデータ形式と異なる場合は、当該情報処理装置で取り扱うデータ形式に変更する
ことを特徴とする情報処理装置。
【請求項９】
請求項３において、
前記メモリコントローラは、
前記第三のメモリから読み出した前記グラフデータのうち、前記情報処理回路が前記処理の実行に必要とする部分を抽出し、抽出されたデータを前記第一のメモリ若しくは前記第二のメモリへ転送する機能を有する
ことを特徴とする情報処理装置。
【請求項１０】
請求項３において、
前記メモリコントローラは、
前記第三のメモリから読み出した前記グラフデータを、前記情報処理回路が前記メモリコントローラに要求するデータサイズ単位で、前記第一のメモリ若しくは前記第二のメモリへ転送する機能を有する
ことを特徴とする情報処理装置。
【請求項１１】
請求項３において、
前記メモリコントローラは、
前記情報処理回路から前記第三のメモリへのデータ書き込み要求があった場合、前記第一のメモリ若しくは前記第二のメモリに、書き込み要求のあったデータを、当該データのアドレスと共に書き込み、書き込まれたデータが一定のデータサイズに達したのち、当該データを当該データのアドレスと共にまとめて前記第三のメモリへ書き込む
ことを特徴とする情報処理装置。
【請求項１２】
請求項３において、
前記メモリコントローラは、前記情報処理回路による前記処理の実行前に行われる、前記第三のメモリから前記第一のメモリ若しくは前記第二のメモリへの前記グラフデータ転送終了を前記情報処理回路に通知する
ことを特徴とする情報処理装置。
【請求項１３】
請求項３において、
前記メモリコントローラは、
前記第一もしくは第二のメモリと前記第三のメモリの間で転送される単位時間当たりの前記グラフデータの転送量を計測し、
前記情報処理回路が処理する単位時間当たりの前記グラフデータの処理量を計測し、
前記メモリコントローラは、前記情報処理回路が処理する単位時間当たりの前記グラフデータの処理量と、前記第一もしくは第二のメモリと前記第三のメモリの間で転送される単位時間当たりの前記グラフデータの転送量の比較をし、該比較結果に基づき、前記第一もしくは第二のメモリと前記第三のメモリの間の前記グラフデータの転送量を変化させる
ことを特徴とする情報処理装置。
【請求項１４】
請求項１３おいて、
前記メモリコントローラは、前記比較結果に基づき、前記情報処理回路が過去実行したものと同じ処理命令を再度実行した場合に、前記第一もしくは第二のメモリと前記第三のメモリの間で転送する単位時間当たりの前記グラフデータの転送量を最適化する
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に係り、特に、大規模なグラフデータの処理に適した情報処理装置に関する。
【背景技術】
【０００２】
情報処理装置では、コンピュータのCPU（ホストシステム）がデータの処理を行う前に、予め必要なデータを応答速度の速いメモリに読み出すことで、データ処理におけるデータ要求に対する応答時間を大幅に短縮することができる。従来、データ処理におけるデータの応答時間の短縮の際には、ホストシステムがデータ処理を行っている間に、記憶装置のコントローラが、次にホストシステムが要求するデータのみを、予め記憶装置内の不揮発性メモリから記憶装置内のキャッシュメモリに転送する方法が採られていた（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００９−５３９１６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
大規模なデータの処理、例えば大規模なグラフ処理を行う際、グラフ処理を行うホストが大規模なメモリ空間を管理し、そのメモリ空間上に大規模なグラフデータを保存する必要がある。従って、大規模なグラフを高速に処理するためには、大規模で高速に動作するメインメモリが必要であった。
【０００５】
そこで本願の発明者等は本願に先立って、メインメモリに全てDRAMを用いた従来技術及び、特許文献１に示されたような記憶装置をメインメモリとして用いる方法に関して検討を行った。
【０００６】
メインメモリに全てDRAMを用いた従来技術では、先ずグラフ処理を行うホストのCPUが、処理対象となるグラフデータを外部記憶装置からダウンロードするか、もしくはグラフを作成し、メモリ空間に配置したDRAMへ保存する。このため、大きなデータサイズのグラフデータを処理する場合、メインメモリであるDRAMをグラフデータが収まる分だけ搭載する必要がある。
但し、DRAMを大規模に搭載したグラフ処理システムは、高価になる。
【０００７】
したがってグラフ処理システムを安価に構築するために、DRAMより安価なメモリを用いる方法が考えられる。
【０００８】
特許文献１に示されたような記憶装置をメモリ空間に配置することで、大規模で安価なメモリ空間を提供することは可能であるが、高速なグラフ処理を行う上で、以下の課題が生じる。
【０００９】
特許文献１に示されたような記憶装置をメモリ空間に配置してグラフ処理を行う場合、先ずグラフ処理を行うホストのCPUは、処理対象となるグラフデータを外部記憶装置からダウンロードするか、もしくはグラフデータを作成し、メモリ空間に配置された記憶装置へ保存する。
【００１０】
その後CPUは記憶装置内に保存されたグラフデータを利用し、グラフ処理を行う。記憶装置のコントローラはホストへデータをロードした後、ホストシステムがグラフ処理を行う間に、次に必要となるグラフデータのみを記憶装置内の不揮発性メモリから記憶装置内のキャッシュメモリに転送する。
【００１１】
ただし、記憶装置はメモリ空間に配置されるため、ホストはグラフ処理において次に必要とするグラフデータをホストのCPUのキャッシュメモリから取得する場合がある。この場合は、記憶装置が記憶装置内のキャッシュメモリに予め転送したグラフデータは、ホストから記憶装置には要求されない。したがって、次にホストから記憶装置にデータが要求された際は、要求されたデータは記憶装置内のキャッシュメモリに無いため、データを記憶装置内の不揮発性メモリから読み出して、ホストへ返す必要がある。
【００１２】
また、ホストから記憶装置に要求されるデータがホストCPUのキャッシュメモリにヒットせず、記憶装置内の不揮発性メモリから記憶装置内のキャッシュメモリに予め転送されたデータと一致していた場合においても、グラフ処理は一般にホストによるデータ処理の時間が短いため、次にホストが必要とするグラフデータを記憶装置内の不揮発性メモリから記憶装置内のキャッシュメモリに転送し終える前に、ホストがデータを記憶装置に要求してしまうことが考えられる。したがってこの場合も、データを記憶装置内の不揮発性メモリから読み出してホストへ返す必要がある。
【００１３】
不揮発性メモリからデータを読み出す時間はDRAMからデータを読み出す時間よりも長いため、特許文献１に示されたような技術を用いた場合、データをグラフ処理に要する時間が非常に長くなってしまうという課題が生じる。
【００１４】
このように、従来技術を採用した情報処理装置では、大規模グラフを処理する際に、安価で大容量なメモリ空間を提供できない、もしくは、グラフデータへのアクセスの高速化を実現できないという課題があった。
【００１５】
本発明の目的は、上記従来技術の課題を解決し、大規模なデータの処理に適した安価で大容量かつ高速に動作するメインメモリを有する情報処理装置を提供することにある。
【課題を解決するための手段】
【００１６】
本願において開示される発明のうち、代表的なものを示すと次の通りである。
情報処理サブシステムと、該情報処理サブシステムとデータ通信を行うメモリサブシステムとを備えた情報処理装置であって、前記情報処理サブシステムは、グラフ処理命令に従ってグラフの処理を行う情報処理回路を有し、前記メモリサブシステムは、第一のメモリと、第二のメモリと、該第一及び第二のメモリよりも読み出し及び書き込みレイテンシが長い第三のメモリと、前記第一のメモリと前記第二のメモリと前記第三のメモリ間でデータ転送を制御するメモリコントローラとを有し、前記グラフの処理の対象となるグラフデータは、グラフの各頂点に該各頂点を一意に特定するIDが割り当てられており、前記頂点の１つに割り当てられたIDが分かれば、該頂点と関係性を持つ他の頂点のIDがアドレス空間でどの場所にあるのか特定できるデータであり、複数のデータブロックから構成され、前記データブロックは、前記１つの頂点のIDを前記メモリコントローラによって解析することで判明するアドレスに対応する全データもしくはデータの一部であり、その中に少なくとも前記１つの頂点のIDが記録されており、前記メモリコントローラは、前記第三のメモリに、処理の対象となる前記グラフデータを格納する機能と、複数の前記データブロックを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送するプレロード機能とを有し、前記メモリコントローラは該プレロード機能により、１つの前記データブロックAに含まれる少なくとも１つの前記頂点のIDを自律的に解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックBのアドレスを計算し、当該データブロックBを前記第三のメモリから前記第一のメモリもしくは前記第二のメモリへ転送し、続けて、以前に前記第三のメモリから前記第一もしくは前記第二のメモリへ転送した前記データブロックAもしくはBもしくはA及びBとは異なる前記データブロックCに含まれる少なくとも１つの前記頂点のIDを解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックDのアドレスを計算し、当該データブロックDを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送し、以下同様に複数のデータブロックを前記第三のメモリから第一もしくは第二のメモリへ転送し、前記情報処理回路において、前記プレロード機能が実行されている前記データブロックの転送先とは異なる前記第一もしくは第二のメモリから、前記グラフデータを読み出し、前記処理命令に従って該グラフデータの処理を実行することを特徴とする情報処理装置。
【発明の効果】
【００１７】
本発明によれば、大規模グラフを処理する際に必要な、グラフデータへのアクセスの高速化を可能にする大規模なメモリ空間を安価に提供でき、かつ、その場合でもグラフデータが読み出し及び書き込みレイテンシが短いメモリに搭載されていた場合と同様の速度でグラフ処理を行うことができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の第一の実施例を適用した実施の形態であるサーバーの全体構成の一例を示す構成図である。
【図２】図１のサーバー内の、メモリサブシステムの構成の一例を示す構成図である。
【図３】本発明の実施例を適用した実施の形態である情報処理システムの全体構成の一例を示す構成図である。
【図４】本発明の実施例を適用した実施の形態である情報処理システムの全体構成の他の例を示す構成図である。
【図５】第一の実施例のサーバーにおいて取り扱う、グラフの一例を示す説明図である。
【図６】第一の実施例のサーバーにおいて取り扱う、グラフの他の一例を示す説明図である。
【図７】第一の実施例のサーバーにおいて取り扱う、グラフのデータ形式の一例であるCSR形式を示す説明図である。
【図８】第一の実施例のサーバーにおいて取り扱う、グラフ処理アルゴリズムの一例である幅優先探索における、グラフデータ参照の順番を示す説明図である。
【図９】グラフデータをダウンロードする際の、サーバー全体における各情報処理装置間のデータの流れの一例を示す図である。
【図１０】図１のサーバーにおける、グラフ処理における構成要素別の動作の概要を示す模式図である。
【図１１】図５で示されたグラフデータにおける、グラフデータブロックの区分けを示す模式図である。
【図１２】ダウンロードされたグラフデータを処理する際の、サーバーの各構成要素の動作の概要を示す図である。
【図１３】図１のサーバーにおける、グラフデータをダウンロードする際の情報処理回路CPUの動作の一例を示すフローチャートである。
【図１４】図１のサーバーにおける、各情報処理回路CPU(0) 〜CPU(m)とメモリサブシステムの、動作の一例を示す模式図である。
【図１５】図１のサーバーにおける、メモリサブシステムにおいて行われるグラフデータのプレロード処理の１サイクル分の動作の一例を示す模式図である。
【図１６】第一の実施例における、不揮発性メモリからDRAMへのグラフデータの転送における、データ抽出、アドレス付加動作の一例を示す模式図である。
【図１７】グラフ処理において、必要となるデータのアドレスの導出の様子と、予め必要なアドレス順が決まっているデータ処理の様子を対比する模式図である。
【図１８】図１のサーバーにおける、グラフデータが複数のメモリサブシステムにまたがった際の動作の一例を示す模式図である。
【図１９】図１のサーバーにおける、グラフデータが複数のメモリサブシステムにまたがった際の動作の他の例を示す模式図である。
【図２０】図１のサーバーにおける、グラフデータが複数のメモリサブシステムにまたがった際に、他のメモリサブシステムに送付されるデータの一例を示す模式図である。
【図２１】第一の実施例における、情報処理回路のプレロードデータの読み出しの際の、メモリサブシステムの動作の一例を示すフローチャートである。
【図２２】第一の実施例における、各情報処理回路のグラフ処理の間に行われる、不揮発性メモリからDRAMへのグラフデータの転送動作における、書き込み先DRAMの切り替え動作の一例を示す模式図である。
【図２３】第一の実施例における、グラフ処理の結果の書き込み動作の一例を示すフローチャートである。
【図２４】図１のサーバーにおける、不揮発性メモリからDRAMへのデータ転送量を動的変化にさせるメモリサブシステムの動作の一例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
本発明の代表的な実施の形態によれば、情報処理装置は情報処理サブシステムと、該情報処理サブシステムとデータ通信を行うメモリサブシステムから構成され、前記情報処理サブシステムは、グラフ処理命令に従ってグラフの処理を行う情報処理回路を有し、前記メモリサブシステムは、第一のメモリと、第二のメモリと、該第一及び第二のメモリよりも読み出し及び書き込みレイテンシが長い第三のメモリと、前記第一のメモリと前記第二のメモリと前記第三のメモリ間でデータ転送を制御するメモリコントローラとを有し、前記グラフの処理の対象となるグラフデータは、グラフの各頂点に該各頂点を一意に特定するIDが割り当てられており、前記頂点の１つに割り当てられたIDが分かれば、該頂点と関係性を持つ他の頂点のIDがアドレス空間でどの場所にあるのか特定できるデータであり、複数のデータブロックから構成され、前記データブロックは、前記１つの頂点のIDを前記メモリコントローラによって解析することで判明するアドレスに対応する全データもしくはデータの一部であり、その中に少なくとも前記１つの頂点のIDが記録されており、前記メモリコントローラは、前記第三のメモリに、処理の対象となる前記グラフデータを格納する機能と、複数の前記データブロックを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送するプレロード機能とを有し、前記メモリコントローラは該プレロード機能により、１つの前記データブロックAに含まれる少なくとも１つの前記頂点のIDを自律的に解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックBのアドレスを計算し、当該データブロックBを前記第三のメモリから前記第一のメモリもしくは前記第二のメモリへ転送し、続けて、以前に前記第三のメモリから前記第一もしくは前記第二のメモリへ転送した前記データブロックAもしくはBもしくはA及びBとは異なる前記データブロックCに含まれる少なくとも１つの前記頂点のIDを解析し、当該情報処理回路が次に必要とする少なくとも１つの前記データブロックDのアドレスを計算し、当該データブロックDを前記第三のメモリから前記第一もしくは前記第二のメモリへ転送し、以下同様に複数のデータブロックを前記第三のメモリから第一もしくは第二のメモリへ転送し、前記情報処理回路において、前記プレロード機能が実行されている前記データブロックの転送先とは異なる前記第一もしくは第二のメモリから、前記グラフデータを読み出し、前記処理命令に従って該グラフデータの処理を実行することを特徴とする。
【００２０】
以下、本発明の第一の実施例を、図面を参照しながら、詳細に説明する。  
本実施例の情報処理装置は、情報処理サブシステムと、メモリサブシステムと、これらを接続するネットワークスイッチとから構成されている。情報処理サブシステムは、複数の情報処理回路(CPU)と、各情報処理回路(CPU)に接続されたDRAMから構成されている。各情報処理回路(CPU)に接続されたメモリサブシステムは、第一のメモリと、第二のメモリと、第三のメモリと、第一のメモリと第二のメモリと第三のメモリ間でグラフデータの転送を制御するメモリコントローラから構成されている。第三のメモリは、第一のメモリ及び第二のメモリよりも、読み出し及び書き込みレイテンシが長い。
【００２１】
前記第三のメモリはグラフデータを格納し、前記メモリコントローラは、前記第三のメモリから読み出した前記グラフデータの一部分である１つのデータブロックAを解析し、該解析結果に基づいて、前記グラフ処理の実行に必要なグラフデータの一部分である次の１つのデータブロックBを、前記第三のメモリから第一のメモリへ転送し、続けて、以前プレロードされたデータブロックAもしくはBもしくはA及びBとは異なるデータブロックCを解析し、該解析結果に基づいて、前記グラフ処理の実行に必要なグラフデータの次のデータブロックDを、前記第三のメモリから第一のメモリへ転送し、続けて同様に複数のデータブロックを前記第三のメモリから第一のメモリへ転送する。前記各情報処理回路(CPU)はプログラムを実行し、前記第二のメモリへ転送されたグラフデータを、前記ネットワークスイッチを介して読み出す。
【００２２】
本実施例では、本発明の第一のメモリ及び第二のメモリとしてDRAM、第三のメモリとして不揮発性メモリを用いており、複数のCPUがグラフ処理プログラムを実行するサーバーSVRの例、及び１つのCPUにおいてグラフ処理プログラムを実行する情報処理システムIPSの例を挙げて説明する。
【００２３】
＜Ａ．サーバーの構成＞
まず、本発明の情報処理装置を適用した第一の実施例に係るサーバー(SVR) 100の構成について、図１〜図２を用いて説明する。  
図１に、本発明を適用した第一の実施の形態であるサーバー(SVR)100の構成例を示す。サーバー(SVR)100は、複数の情報処理サブシステムIPSS (IPSS(0)〜IPSS(m)) 110と、それら全てに接続されたネットワークスイッチ(Switch) 120と、複数のメモリサブシステムMSS (MSS(0)〜MSS(n)) 130とから構成される。サーバー(SVR)100は、通信ネットワークを介して外部記憶装置(Storage)150と接続されている。m、nは自然数である。なお、サーバー(SVR)100は、ユーザーインターフェースとして、キーボードやディスプレイ等の入出力手段（図示略）を保有している。
【００２４】
以下、第一の実施例に係るサーバー100の構成要素の各々について説明する。  
夫々の情報処理サブシステムIPSS 110は、情報処理回路(CPU) 111と、この情報処理回路(CP)に接続されたDRAM 112から構成される。情報処理サブシステムIPSS(0)〜IPSS(m)を構成する各情報処理回路(CPU)を、それぞれ情報処理回路CPU(0)〜CPU(m)と表す。各情報処理回路CPU(0)〜CPU(m)は、それぞれに1個以上のDRAMチップ112が接続されており、それぞれの情報処理回路と接続されたDRAMの間で互いにデータ通信を行う。
【００２５】
各情報処理回路CPU(0)〜CPU(m)は、お互い直接もしくはネットワークスイッチ120を介して接続されており、互いにデータ通信を行う。全ての情報処理回路111 (CPU(0)〜CPU(m))は、ネットワークスイッチ120を介して全てのメモリサブシステムMSS (MSS(0)〜MSS(n)) 130に接続されており、互いにデータ通信が可能である。
【００２６】
情報処理回路CPU(0)は、他の情報処理回路CPU(1)〜CPU(m)と同様に、グラフ処理プログラム（グラフ演算処理機能）を有する。また、情報処理回路CPU(0)は、各情報処理回路CPU(0)〜CPU(m)の情報処理を統括する。この情報処理回路CPU(0)は、外部記憶装置150と接続されており、互いにデータ通信を行う。 
すなわち、情報処理回路CPU(0)は、固有の機能（プログラム）として、ユーザーインターフェースを介してグラフ処理に関する仕様を受け付ける機能、受け付けた仕様のグラフ演算処理を実行するために必要なデータを外部記憶装置150からサーバーに取り込む機能、各情報処理回路CPU(0)〜CPU(m)にグラフ演算処理のタスクを分散して処理させる機能、各情報処理回路CPU(0)〜CPU(m)にグラフ演算処理のために必要なデータを供給する機能、及び、分散処理されたグラフ処理の結果を取り纏め外部記憶装置150に記録しユーザーインターフェースを介して出力する機能等を備えている。
【００２７】
メモリサブシステムMSS(0)〜MSS(n)は、ネットワークスイッチ120を介してお互い接続されており、互いにデータ通信が可能である。また、メモリサブシステムMSS(0)〜MSS(n)は、それぞれ、メモリコントローラHyMC 131と1個以上の不揮発性メモリNVMチップ 132と1個以上のDRAMチップ 133から構成される。メモリコントローラHyMC 131は、このメモリコントローラHyMC と不揮発性メモリNVM 132及びDRAM 133の間でデータ通信を行う。
【００２８】
図２は、図１に示したサーバーSVR 100を構成する各メモリサブシステムMSS 130の詳細を示したものである。  
メモリサブシステムMSS 130は、メモリコントローラHyMC 131と、不揮発性メモリNVM (NVM(0)〜NVM(ｊ)) 132と、DRAM (DRAM (0)〜DRAM(i)) 133とから構成される。i、jは自然数である。  
メモリコントローラHyMC 131は、コマンドデータバッファCMDBF 1311と、メモリアクセス制御回路DMAC 1312と、データバッファDBF 1313と、アドレス変換テーブルATT 1314と、プレロード制御ブロックPCB 1315と、不揮発性メモリ制御回路NVMC (NVMC(0)〜NVMC(j)) 1316と、DRAM制御回路DRAMC (DRAMC(0)〜DRAMC(i)) 1317とから構成される。以下に各々について説明する。
【００２９】
コマンドデータバッファCMDBF 1311は、ネットワークスイッチ120を介して、図１における情報処理回路CPU(0)〜CPU(m)及び他のメモリサブシステムと接続されており、それらの間で互いにデータのやり取りを行う。コマンドデータバッファCMDBF 1311は、メモリアクセス制御回路DMAC 1312とデータバッファDBF 1313に接続されており、それらの間で互いにデータ通信を行う。
【００３０】
データバッファDBF 1313は、ネットワークスイッチ120を介して、図１における情報処理回路CPU(0)〜CPU(m) 及び他のメモリサブシステムと接続されており、それらの間で互いにデータのやり取りを行う。データバッファDBF 1313は、コマンドデータバッファCMDBF 1311及びプレロード制御ブロックPCB 1315と接続されており、それらの間で互いにデータ通信を行う。
【００３１】
メモリアクセス制御回路DMAC 1312は、コマンドデータバッファCMDBF 1311、アドレス変換テーブルATT 1314、不揮発性メモリ制御回路NVMC(0)〜NVMC(j) 1316、及び、DRAM制御回路DRAMC(0)〜DRAMC(i) 1317と接続されており、それらの間で互いにデータ通信を行う。
【００３２】
アドレス変換テーブルATT 1314は、メモリアクセス制御回路DMAC 1312と、プレロード制御ブロックPCB 1315と接続されており、それらの間で互いにデータ通信を行う。  
プレロード制御ブロックPCB 1315は、データバッファDBF 1313、アドレス変換テーブルATT 1314、不揮発性メモリ制御回路NVMC(0)〜NVMC(j) 1316、及び、DRAM制御回路DRAMC(0)〜DRAMC(i) 1317と接続されており、それらの間で互いにデータ通信を行う。
【００３３】
不揮発性メモリ制御回路NVMC(0)〜NVMC(j) 1316は、それぞれ不揮発性メモリNVM(0)〜NVM(j) 132に接続されており、不揮発性メモリからのデータ読み出し及び不揮発性メモリへのデータの書き込みを行う。また、不揮発性メモリ制御回路NVMC(0)〜NVMC(j) 1316は、メモリアクセス制御回路DMAC 1312と、プレロード制御ブロックPCB 1315に接続されており、それらの間でデータ通信を行う。
【００３４】
DRAM制御回路DRAMC(0)〜DRAMC(i) 1317は、それぞれDRAM(0)〜DRAM(i) 133に接続されており、DRAM 133からのデータ読み出し及びDRAMへのデータの書き込みを行う。DRAM制御回路DRAMC(0)〜DRAMC(i) 1317は、メモリアクセス制御回路DMAC 1312と、プレロード制御ブロックPCB 1315に接続されており、それらの間でデータ通信を行う。
【００３５】
＜Ｂ．情報処理システムの構成＞
次に、本発明の情報処理装置を適用した実施例に係る情報処理システムIPS について、図３〜図４を用いて説明する。  
図３は、情報処理システムの一例として、情報処理サブシステムIPSS 110とそれに接続された１つのメモリサブシステムMSS 130とから構成される情報処理システムIPS(0) 200と、外部記憶装置150とを示したものである。以下に各々について説明する。
【００３６】
情報処理サブシステムIPSS(0) 110の内部の構成は、サーバーの構成における情報処理サブシステムの内部の構成と同じである。情報処理サブシステムIPSS (0) 110は、メモリサブシステムMSS(0) 130に接続されており、互いにデータ通信が可能である。情報処理回路CPU(0) 111は外部記憶装置150と接続されており、互いにデータ通信を行う。メモリサブシステムMSS (0) 130の内部の構成は、サーバーの構成におけるメモリサブシステムの内部の構成と同じである。
【００３７】
図４は、情報処理システムの他の例として、情報処理サブシステムIPSS (0) 110と、それらに接続された複数のメモリサブシステムMSS(0)〜MSS(n) 130と、から構成される情報処理システムIPS (0) 210と、外部記憶装置150を示したものである。以下に各々について説明する。
【００３８】
情報処理サブシステムIPSS(0) 110の内部の構成は、サーバーの構成における情報処理サブシステムの内部の構成と同じである。情報処理サブシステムIPSS(0) 110は、ネットワークスイッチを介してメモリサブシステムMSS(0)〜MSS(n) 130に接続されており、互いにデータ通信が可能である。情報処理回路CPU (0) 111は外部記憶装置150と接続されており、互いにデータ通信を行う。各メモリサブシステムMSS(0)〜MSS(n) 130の内部の構成は、サーバーの構成におけるメモリサブシステムの内部の構成と同じである。
【００３９】
以下は、本発明を適用した第一の実施形態であるサーバーの機能や動作について、を例に挙げて説明する。  
まず、図５〜図７を用いて、本発明のサーバーで取り扱うグラフの例とそのグラフデータのデータ形式の例を説明する。
【００４０】
＜Ｃ．グラフとグラフデータのデータ形式＞
図５は、本サーバーで取り扱うグラフの一例を示す図である。  
ここで例として挙げるグラフは、グラフの頂点（Vertex）に各頂点を一意に特定する番号が割り当てられており、各頂点同士が一本のグラフの辺（Edge）によって直接繋がれている、もしくは繋がれていない、という2種類の関係性を持つこととする。
【００４１】
図６に示されているように、より一般的には、本サーバーが取り扱うことが可能なグラフは、グラフの各頂点に頂点を一意に特定する情報が付加されているものであればよく、また関係性の種類の数も2種類に限定されない。
【００４２】
図６の例では、各頂点はソーシャルネットワークの各ユーザーを表し、頂点を一意に特定する情報は、ユーザーのIDや名前や趣味等であり、関係性の種類は高校の友人や、大学の友人や、兄弟等である。
【００４３】
次に、本サーバーで取り扱うグラフデータのデータ形式の一例を示す。  
図７は、図５に示されたグラフにおける、頂点同士のつながりが表現可能なデータ形式の一つである、CSR(Compressed Sparse Row)形式を示す。CSR形式においては、グラフデータは、配列Aと配列Bによって表される。配列Aは、頂点番号の順に、それぞれの頂点が繋がっている頂点の番号を並べたものであり、配列Bは、配列Aの頂点番号の切り替わりの位置を表現するものである。
【００４４】
以下では、図５に示されたグラフを例として説明する。  
まず、図５におけるグラフにおいて、頂点番号１と繋がる頂点の番号は４、５、７、９であるため、図７に示される配列Aの初めに４、５、７、９が格納される。それらの数字に続いて、頂点２と繋がる頂点の番号５が配列Aに格納される。また、頂点の番号４、５、７、９、５が書かれた配列Aのみでは、頂点１と繋がる頂点の番号と頂点２と繋がる頂点の番号が切り替わる場所が分からない。そこで、配列Bには、配列Aにおいて頂点１と繋がる頂点の番号が開始する位置１と、頂点２と繋がる頂点の番号が開始する位置５とが格納される。
【００４５】
以上のような規則に基づき、配列A及び配列Bを作成すると、図７のようになる。ここで、配列Aの上に書かれたa、b、c、…で示される配列Aの部分領域は、それぞれ順に頂点１、２、３、…と繋がる頂点の番号を示した領域であることを示す。
【００４６】
なお、本サーバーで取り扱うグラフデータのデータ形式はCSR形式に限定されない。他のデータ形式としては、例えば隣接行列形式、連結リスト形式や、頂点に関する情報に加えて繋がりの種類や強度に関する情報が格納されるデータ形式等が挙げられる。
【００４７】
本サーバーで取り扱うグラフデータのデータ形式は、一般的には以下の（１）〜（５）で定義されるが、少なくとも（１）を満たすデータ形式で書かれていれば、本発明は適用可能である。
【００４８】
（１）各頂点に各頂点を一意に特定するIDが割り当てられており、頂点に割り当てられたIDが分かれば、その頂点と関係性を持つ他の頂点のIDがアドレス空間でどの場所にあるのか特定できる。
【００４９】
（２）各頂点を一意に特定するIDが分かれば、その頂点に付随する情報がアドレス空間でどの場所にあるのか特定できる。
【００５０】
（３）各頂点の間をつなぐ関係性の種類を一意に表現できるIDを割り当てることが可能であり、関係性の強度を数値化して表現することが可能である。
【００５１】
（４）頂点に割り当てられたIDが分かれば、その頂点が共有する関係性の種類や強度に関する情報がアドレス空間でどの場所にあるのか特定できる。
【００５２】
（５）関係性の種類を一意に表現するIDが分かれば、その関係性に付随する情報がアドレス空間でどの場所にあるのか特定できる。
【００５３】
次に、本サーバーで取り扱うグラフ処理アルゴリズムの例を、図８を用いて説明する。図８は、グラフ処理アルゴリズムの一例である幅優先探索における、グラフデータ参照の順番を示す説明図である。
【００５４】
＜Ｄ．グラフ処理アルゴリズムの流れ＞ 
グラフ処理アルゴリズムの一例として、グラフ上のあるグラフ頂点から別のグラフ頂点までの、グラフ上での最短経路を求める問題を、幅優先探索アルゴリズムで処理した場合を挙げる。  
ここでは、図５に示されているグラフが図７に示されるCSR形式で保存されている場合を考える。
【００５５】
グラフ処理を行いたいサーバーのユーザーが、キーボード等のユーザーインターフェースを通じて、最短経路を求めたい２頂点、すなわち、始点（Start）と終点（Goal）、を特定する情報を、図１の情報処理回路CPU(0)に与える。すると、情報処理回路CPU(0)は幅優先探索アルゴリズムにしたがって、次のような順番でグラフデータを参照し、グラフ処理を進める。なお、以下のグラフ処理において、情報処理回路 CPU(0)は、必要に応じて、そのグラフ処理の計算量等に基づき、その処理を各情報処理装置CPU(1)〜CPU(m)に、適切に分担させて割り振るものとする。すなわち、CPU(0)が、グラフ処理の全体を統括し、このCPU(0)を含む各CPU（情報処理回路CPU(0)〜CPU(m)）により、グラフ処理が進められる。
【００５６】
ここで、図８に示されたように経路の始点（Start）は５番の頂点であり、終点（Goal）は１７番の頂点であるとする。まず、情報処理回路CPU(0)は、各情報処理回路CPU(0)〜CPU(m)のいずれかに、配列Bの5番目の要素と6番目の要素を参照するように指示する。指示された情報処理回路をCPU(1)とする。CPU(1)は、配列Bの5番目の要素と6番目の要素を参照し、図７の配列Aの12番目の要素から14番目の要素まで（eの領域）に、５番の頂点に繋がる頂点の番号が書かれていることを知る。このeの領域を１つのデータブロックと呼ぶ。データブロックとは、一般には１つの頂点のIDを解析することで判明するアドレスに対応する全データもしくはデータの一部であるが、CSR形式で書かれたグラフデータの場合は、１つの頂点に繋がる頂点の番号を格納した情報である。その結果から、CPU(1)は配列Aのeの領域を参照するように、必要に応じて情報処理回路CPU(0)を介して、各情報処理回路CPU(0)〜CPU(m)のいずれかに、指示する。指示された情報処理回路をCPU(2)とする。CPU(2)は配列Aのeの領域を参照し、５番の頂点に繋がる頂点の番号が１、２、８であることを知る。
【００５７】
次にCPU(2)は、５番の頂点が参照済みであることと、次に参照すべき頂点の番号が１、２、８であることと、１、２、８の頂点より１つ始点に近い側の頂点が５番であることを、必要に応じてCPU(0)に通知し、またCPU(0)もしくはCPU(2)に接続された情報記憶装置（図１におけるDRAMやメモリサブシステム）に格納する。
【００５８】
CPU(0)、もしくはCPU(2)は、次に参照すべき頂点の番号を参照し、１番、２番、８番の各頂点に対応する配列Bの要素を参照するように、幾つかのCPUに指示する。以下の動作は、幾つかのCPUに分散されて処理が行われるが、開始頂点５番からの動作と同様の処理が行われる。
【００５９】
図８の破線の丸で囲まれた番号は、CPUによってデータ処理される頂点の順番を表している。  
以下、同様に配列A及び配列Bを次々と参照し、終点の１７番の頂点（Goal）の一つ手前の頂点が参照された時点で、最短経路が判明し、このアルゴリズムは終了する。
【００６０】
以上、最短経路探索問題を幅優先探索法で解析する例を挙げたが、本サーバーで取り扱うグラフ処理アルゴリズムは以上の例に限定されるものではなく、最短経路探索における深さ優先探索やダイクストラ法、ページランク計算における冪乗法、大規模データベースの検索及びデータ抽出等も含まれる。
【００６１】
例えば、深さ優先探索では、データ処理される頂点の順番が、図８の頂点５、１、４、１６、７、１３、１２、９、２、８、１０、−のようになる。
【００６２】
以下に、本サーバーがグラフ処理を行う際のサーバーの動作を、図９〜図２４を用いて説明する。  
＜Ｅ．グラフ処理における本サーバーの動作＞
（１）サーバーの動作の全体概要
まず、本サーバーがグラフ処理を行う際のサーバーの動作の概要を、図９〜図１３を用いて説明する。なお、それぞれの動作の詳細は以下の（２）〜（６）において説明する。
【００６３】
本サーバーの動作は、グラフデータのダウンロード動作、メモリコントローラHyMCによるグラフデータのプレロード動作、情報処理回路CPUによるグラフデータの読み出し動作、グラフ処理結果の書き込み動作、プレロードの最適化動作から構成される。以下簡単に各動作の概要を述べる。
【００６４】
まず、サーバーにおけるグラフデータのダウンロード動作について説明する。まず情報処理回路CPU(0) は、サーバー100の外部に存在する情報記憶装置150から、各情報処理回路(CPU (0) 〜CPU(m))及びメモリコントローラHyMC 131経由でグラフ処理の対象となる全グラフデータ(図１０：All data)をダウンロードし、メモリサブシステムMSS(0) 〜MSS(n)の不揮発性メモリNVM 132に書き込む(図１０のdata Aとdata B)。
【００６５】
ダウンロード時のデータフローは図９の黒矢印によって示されている。図９に示したように、各CPUの管理するメモリ空間300には、当該CPUに直接接続されたIPSS110内のDRAMと、各MSS130内に配置された不揮発性メモリNVM及びDRAMとが存在する。グラフ処理の対象となる全グラフデータ(All data)が、情報記憶装置１５０から１つのメモリ空間300内にダウンロードされる。
【００６６】
次に、メモリコントローラHyMCによるグラフデータのプレロード動作について、図１０、１１を用いて説明する。
【００６７】
ダウンロード動作の後、まず各情報処理回路CPUは、グラフ処理において次に必要となるデータのアドレスをメモリコントローラHyMC 131が自律的に計算するために必要なデータ（図１０：Data 0）及び必要に応じてアルゴリズム等を各々対応するメモリコントローラHyMCに伝える。
【００６８】
次に、開始頂点を含むグラフデータを格納する不揮発性メモリNVMを管理するメモリコントローラHyMC 131は、対応するCPUから受け取ったデータを処理し（図１０：Cal 1）、グラフ処理においてCPUが次に必要とする頂点の情報を含むデータブロック（図１０：Data 1）のアドレスを求める。ここで、データブロックとは、１つの頂点番号をメモリコントローラによって解析することで判明するアドレスに対応する全データもしくはデータの一部であり、その中には少なくとも１つの頂点番号の情報が含まれている。すなわち、データブロックの区分のされ方は、グラフデータのデータ形式に依存する。次にメモリコントローラは、Data 1を不揮発性メモリNVM 130から読み出し、対応するメモリサブシステム内のDRAM 133もしくは対応する情報処理回路CPUに接続されたDRAM 112へ転送する(図１０：To M1とTo D1)。このようなグラフデータの転送動作をプレロード動作と呼ぶ。
【００６９】
図７のようなCSR形式で記述されたグラフデータにおいては、データブロック（Data 0, Data 1など）をグラフ上で表現すると、図１１に示されたような区分になる。これらのデータブロックをどのような順番でプレロード動作によって不揮発性メモリNVM130からDRAM133へ転送するかは、グラフ処理のアルゴリズムに依存するが、この順番は必要に応じてメモリコントローラによるプレロード動作の開始前に情報処理回路CPUからメモリコントローラHyMCに伝えられる。
【００７０】
例えば幅優先探索アルゴリズムによってグラフ処理を行う場合は、メモリコントローラHyMC 131は、対応するCPUから受け取ったデータを処理したのち（図１０：Cal 1）、不揮発性メモリNVM 130の１つのデータブロック（Data 1）に含まれる１つの頂点(番号1)の番号を自律的に解析し、情報処理回路CPUが次に必要とする１つのデータブロック（Data 2）のアドレスを計算し、このデータブロック（Data 2）をNVM 130からDRAMの１つへ転送し、続けて、以前にNVM 130からDRAM 133へ転送したデータブロック（Data 1）に含まれる他の頂点(番号2、8)の番号を解析し、情報処理回路が次に必要とする１つのデータブロック（Data 3）のアドレスを計算し、このデータブロック（Data 3）をNVM 130からDRAMの１つへ転送する。以下同様にして、複数のデータブロックをNVM 130からDRAMの１つへプレロードする。
【００７１】
一方、深さ優先探索アルゴリズムによってグラフ処理を行う場合は、メモリコントローラHyMC 131は、対応するCPUから受け取ったデータを処理したのち（図１０：Cal 1）、不揮発性メモリNVM 130の１つのデータブロック（Data 1）に含まれる１つの頂点(番号1)の番号を自律的に解析し、情報処理回路CPUが次に必要とする１つのデータブロック（Data 2）のアドレスを計算し、このデータブロック（Data 2）をNVM 130からDRAMの１つへ転送し、続けてデータブロック（Data 2）に含まれる頂点(番号4)の番号を解析し、情報処理回路が次に必要とする１つのデータブロック（Data 4）のアドレスを計算し、このデータブロック（Data 4）をNVM 130からDRAMの１つへ転送する。以下同様にして、複数のデータブロックをNVM 130からDRAMの１つへプレロードする。
【００７２】
また、グラフ処理において情報処理回路CPU がData 1の次に必要とするデータブロックData 2が他のメモリコントローラHyMC131の管理する不揮発性メモリNVMに存在する場合は、後述するグラフデータが複数のメモリサブシステムに跨った場合の動作を行い、Data 2を不揮発性メモリNVM 132から読み出し、Data 2に対応するメモリサブシステム内のDRAM 133もしくは情報処理回路CPUに接続されたDRAM 112へ転送する(図１０：To M 2とTo D 2)。
【００７３】
以下同様に、各情報処理回路CPU がグラフ処理の際に必要とするグラフデータブロックを、各々対応するメモリコントローラHyMCは順番に不揮発性メモリNVMから、メモリサブシステム内のDRAMもしくは対応する情報処理回路CPUに接続されたDRAMへ転送する。
【００７４】
不揮発性メモリNVM132からDRAM (133, 112) へ転送したデータ量が一定量に達する（Data nまでのデータ転送が終わる）と、メモリコントローラHyMCは、プレロードされたデータ量が一定量に達したことを情報処理回路CPU(0)へ伝える（図１０：Fin 1）。
【００７５】
このFin 1を受け、情報処理回路CPUはグラフ処理を開始するが、DRAM切り替え動作の後、このグラフ処理の間も並行して、メモリコントローラHyMCによるプレロード動作は行われる。グラフ処理において必要となるデータブロックが全てプレロードし終わると、メモリコントローラはプレロード終了を情報処理回路CPUに伝える（Fin 2）。
【００７６】
図１２の、Graph pre−loading として示した区間は、以上のプレロード動作を表す。メモリコントローラHyMCは、自律的に計算したグラフデータのアドレスに基づいて、NVM 132からグラフ処理に必要なグラフデータを読み出し（READ）、DRAM 133, 112へ書き込む(WRITE)処理を繰り返し、Fin signal を情報処理回路CPUに通達する。その後、情報処理回路CPUによるグラフ処理と並行して、メモリコントローラHyMCによるプレロード動作は続けられる(graph pre−loading during graph analysis）。
【００７７】
次に、情報処理回路CPUによるグラフ処理における、グラフデータの読み出し動作について説明する。  
メモリコントローラHyMCからのFin 1を受け、情報処理回路CPU(0)はグラフ処理(Graph analysis)を開始する（Start）。
【００７８】
まず、情報処理回路CPU(0)は、グラフ処理の初めのステップ（Step 1）を処理するように、情報処理回路CPU(0)〜CPU(m)のいずれかに指示を送る。指示された情報処理回路CPUがCPU(1)であるとする。情報処理回路CPU(1)は、グラフ処理の初めのステップ(Step 1)に必要なデータブロック(Data 1)がCPU(1)直下のDRAM 112に存在する場合、CPU(1)はData 1を直下のDRAM 112から直接読み出し、Data 1がメモリサブシステム内のDRAM 133に存在する場合、CPU(1)は対応するメモリコントローラHyMCにデータ要求を送り（Req 1）、要求を受けてメモリコントローラHyMCはメモリサブシステム内のDRAM 133からData 1をCPU(1)に転送する(To H1)。
【００７９】
情報処理回路CPU(0)もしくはCPU(1)は、Data 1を用いてグラフ処理のStep 1を処理後、グラフ処理の次のステップ(Step 2)に必要となるData 2を処理する指示をData 1の際と同様に情報処理回路CPU(0)〜CPU(m)のいずれかに指示を送る。指示されたCPUは、Data 1の際と同様に直下のDRAM 112もしくは、対応するData 2を格納したメモリサブシステム内のDRAM 133から読み出す。
【００８０】
情報処理回路CPU がData 1, Data 2を順番に読み出す間、メモリコントローラHyMCは、情報処理回路CPU が必要とするデータData (n+1), Data (n+2),… を不揮発性メモリ 132からDRAM 133へ転送する。
【００８１】
このようにして、１つのメモリ空間300内において、大規模なグラフデータをメモリサブシステム内の不揮発性メモリNVM 132に格納しながら、情報処理回路CPU はグラフ処理において必要なデータを常にDRAM (112, 133)から読み出すことが可能となる。
【００８２】
図１２のGraph analysisの区間の処理は、図１０の（Start）以降のグラフ処理(Graph analysis)に相当する。この区間において、メモリコントローラHyMCによってプレロードされたグラフデータがDRAM133, 112から読み出され（READ）、CPU に転送される。そして、CPUにおいてグラフ処理(Graph analysis)が(Step 1)、（Step 2）と順次実行される。また、CPUでグラフ処理が実行されている間も、並行してメモリコントローラHyMCは、CPUが将来必要とするグラフデータをNVM 132からDRAM 133, 112へプレロードする(graph pre−loading during graph analysis）。
【００８３】
最後に、グラフ処理結果の書き込み動作及びプレロードの最適化動作について説明する。  
情報処理回路CPUによるグラフ処理の間、グラフ処理の結果が必要に応じてメモリサブシステムに格納される。その際、グラフ処理の結果は一旦メモリサブシステム内のDRAM内にアドレスを付加して一定量保存され、まとめて不揮発性メモリに書き込みが行われる。
【００８４】
また、情報処理回路CPUによるグラフ処理中、メモリサブシステムは情報処理回路CPUによるグラフ処理の速度とプレロード速度を計測及び比較し、プレロード速度を動的に変化させる。また、グラフ処理後、再び同じアプリケーションによるグラフ処理が行われた際に、グラフ処理が高速に行われるように、プレロード速度やグラフ処理前のプレロードデータ量を最適化する。
【００８５】
このようにして、１つのメモリ空間内に、読み出し及び書き込みレイテンシが異なる２種類のメモリ、換言すると価格の異なる２種類のメモリを組み合わせて配置することで、大規模グラフを処理する際に必要な大規模なメモリ空間を安価に提供することができる。この場合でも、グラフデータが読み出し及び書き込みレイテンシが短いメモリに搭載されていた場合と同様の速度で、CPUはグラフ処理を行うことができる。
【００８６】
次に、図９〜図１２で説明したサーバーの動作の、それぞれの詳細を以下（２）〜（６）において説明する。  
（２）グラフデータのダウンロード時の動作
グラフデータのダウンロード時における動作を、図９及び図１３を用いて説明する。
【００８７】
図１３は、図９で説明した、グラフデータをダウンロードする際の情報処理回路CPU(0) 〜CPU(m)の動作の一例を示すフローチャートである。サーバー100のユーザーからのグラフ処理命令に従って、情報処理回路CPU(0) 〜CPU(m)は、外部記憶装置150からグラフデータを全てメモリサブシステムMSS(0) 〜MSS(n)にダウンロードする（Step 1）。
【００８８】
その際、情報処理回路CPU(0) 〜CPU(m)もしくは各メモリサブシステムに存在するメモリコントローラHyMCがグラフのデータ形式を読み（Step 2）、データ形式が前述の本サーバーで取り扱うグラフデータのデータ形式（（1）〜（5））ではなかった場合、情報処理回路CPU(0) 〜CPU(m)もしくは各メモリサブシステムに存在するメモリコントローラHyMCがグラフデータを改変する（Step 3）。
【００８９】
ダウンロードされたグラフデータがメモリサブシステムMSS(0)〜MSS(n)に保存される際、各メモリサブシステムに存在するメモリコントローラHyMCは、自身のメモリサブシステムに割り当てられたグラフデータを不揮発性メモリNVM(0) 〜NVM(j)に保存する（Step 4）。
【００９０】
（３）メモリコントローラHyMCによるグラフデータのプレロード動作
（３−１）動作の全体概要
図１４は、メモリコントローラHyMCによるグラフデータのプレロード動作の全体概要の一例を示す模式図である。  
メモリコントローラHyMCによるグラフデータのプレロード動作は、情報処理回路CPUによるグラフ処理の前及びグラフ処理中行われ、(One cycle of preload)の繰り返しから構成される。
【００９１】
まず、プレロード動作の開始前、情報処理回路CPU（0）〜CPU（m）は、メモリコントローラHyMCが不揮発性メモリ内のグラフデータを参照することで、グラフ処理において次に必要なデータのアドレスを自律的に計算するために必要な情報及びアルゴリズムを、ネットワークスイッチSwitchを通じてメモリサブシステムへ送る。グラフ処理において次に必要なデータのアドレスを計算するために必要な情報及びアルゴリズムはデータバッファDBFへ保存される（Data to DBF）。
【００９２】
メモリコントローラHyMCが不揮発性メモリ内のグラフデータを参照し、グラフ処理において次に必要なデータのアドレスを自律的に計算するために必要な情報及びアルゴリズムとしては、具体的には、最短経路探索問題であれば経路の始点と終点、データ参照の順番と、データ値と論理アドレスとの対応関係、グラフ処理を行うアプリを特定する情報等が挙げられる。
【００９３】
メモリコントローラHyMCがデータ参照の順番など、CPU側で行うグラフ処理アルゴリズムの一部をあらかじめ知っていた場合は、メモリサブシステムに送られる前記情報及びアルゴリズムは上記の例より少なくてもよい。
【００９４】
また、前記情報及びアルゴリズムがデータバッファDBFへ保存された後、プレロード制御ブロックPCBは、グラフデータのプレロード処理を開始する（Preload）。
【００９５】
プレロード制御ブロックPCBは、プレロードデータが一定量DRAMへ転送された後、その旨を情報処理回路CPU(0)〜CPU(m)に送信する（Preload fin 1）。必要に応じて、プレロード開始の際、プレロード制御ブロックPCBは、Preload fin 1の通知があるまでグラフ処理を待機する要求を、情報処理回路CPU(0)〜CPU(m)に送る。
【００９６】
情報処理回路CPU(0)〜CPU(m)は、Preload fin 1をプレロード制御ブロックPCBから受けてから初めて、グラフ処理を開始する（Graph analysis）。
【００９７】
また、プレロード制御ブロックPCBは、Data to DBFと不揮発性メモリNVMに保存されたデータを基にして、グラフ処理において最後に必要となるデータブロックがプレロードされた後、プレロード終了通知を情報処理回路CPU(0)〜CPU(m)に通知する(Preload fin 2)。
（３−２）プレロード処理の１サイクル分の動作の詳細
以下、図１５を用いて、メモリコントローラによるグラフデータのプレロード動作の詳細を示す。図１５は、図１４のpreloadで示したプレロード処理の１サイクル分の動作（One cycle of preload）を示す模式図である。  
グラフデータのプレロード処理の開始時、まずプレロード制御ブロックPCBは、データバッファDBFに保存されたデータを参照する（Ref 1）。  
この参照によって、プレロード制御ブロックPCBは初めに必要となるグラフデータの一部分であるグラフデータブロック０の論理アドレスを特定する。  
次に、プレロード制御ブロックPCBは、アドレス変換テーブルATTを参照する（Ref 2）。  
この参照によって、プレロード制御ブロックPCBは初めに必要となるグラフデータブロック０の物理アドレスを特定する。  
プレロード制御ブロックPCBは、初めに必要となるグラフデータブロック０の読み出し要求を不揮発性メモリ制御回路NVMCに送る（Req 1）。
【００９８】
不揮発性メモリ制御回路NVMCは、要求されたグラフデータブロック０を含むページを不揮発性メモリNVMから読み出して、プレロード制御ブロックPCBに送る（Data 1）。  
プレロード制御ブロックPCBは、送られたデータの書き込み要求を、DRAM制御回路DRAMC(0)に送り（Req 2）、DRAM制御回路DRAMC(0)は送られた要求を基にDRAM(0)にグラフデータを保存する（Data 2）。  
また、不揮発性メモリNVMはデータ転送サイズがページ単位もしくはセクター単位と決められているため、NVMから読み出したグラフデータが全て次に必要なグラフデータブロックであるとは限らない。このため図１６に示されているように、プレロード制御ブロックPCBは、NVMからデータをページ単位もしくはセクター単位で読み出した後（Step 1）、必要に応じて読み出したデータを、CPUがメモリサブシステムへ要求するデータサイズ単位に分割する（Step 2）。分割されたデータのうち、CPUが必要としないものは削除する(del)。また、分割されたデータはそれぞれのデータに対応した論理アドレスが付加され（Step 3）、DRAMへ転送される（Step 4, 図１５(Data 2)に対応）。
【００９９】
その後、プレロード制御ブロックPCBは、アドレス変換テーブルATTを更新する（Update 1）。またプレロード制御ブロックPCBは、データ転送量をカウントする。
【０１００】
プレロード制御ブロックPCBは、必要に応じて、データバッファDBFに保存されたグラフデータのプレロード処理を進めるために必要な情報を更新する（Update 2）。グラフデータのプレロード処理を進めるために必要な情報とは、幅優先探索におけるグラフの最短経路探索問題の例では、次にプレロードする頂点番号のリストや、プレロード済みの頂点番号のリストである。特に、幅優先探索におけるグラフの最短経路探索問題の例では、現在探索している深さの頂点番号を格納する配列1と、次に探索する深さの頂点番号を格納する配列2をデータバッファDBF上で管理する必要がある。
【０１０１】
現在探索している深さの頂点番号を全てプレロードし終えた後、配列1と配列2の役割を入れ替える。  
また、グラフデータをプレロードする際は、プレロード済み頂点番号リストを参照し、プレロード済みの頂点番号は、次に探索する深さの頂点番号を格納する配列に格納をしない。
【０１０２】
以上をまとめると、プレロード処理の１サイクル分の動作（One cycle of preload）は以下のようになり、プレロード処理時においては、One cycle of preloadの動作が繰り返される。
【０１０３】
（a）  プレロード制御ブロックPCBはNVMから読み出されたデータとデータバッファDBFに保存されたデータを参照（Ref 1）し、次に必要となるデータの論理アドレスを特定する。  
（b）  プレロード制御ブロックPCBはアドレス変換テーブルATTを参照（Ref 2）し、次に必要となるデータの物理アドレスを特定する。  
（c）  プレロード制御ブロックPCBは、次に必要となるグラフデータの読み出し要求を不揮発性メモリ制御回路NVMCに送る（Req 1）。  
（d）  不揮発性メモリ制御回路NVMCは要求されたデータを不揮発性メモリNVMから読み出して、プレロード制御ブロックPCBに送る（Data 1）。  
（e）  プレロード制御ブロックPCBは送られたデータの書き込み要求をDRAM制御回路DRAMC 0に送る（Req 2）。  
（f）  DRAM制御回路DRAMCは送られた要求を基にDRAM 0にグラフデータを保存する（Data 2）。  
（g）  必要に応じてDRAM に保存されたグラフデータを、各CPUによるデータ要求単位に分割し、次に必要なデータブロックを含む部分のみを抽出し、分割されたデータに論理アドレスを付加して、各CPUによるデータの参照順にDRAMに保存する（Data 2）。  
（h）  プレロード制御ブロックPCBはアドレス変換テーブルATTを更新する（Update 1）。  
（i）  プレロード制御ブロックPCBはデータ転送量をカウントする。  
（j）  プレロード制御ブロックPCBは、必要に応じて、データバッファDBFに保存されたグラフデータのプレロード処理を進めるために必要な情報を更新する（Update 2）。
【０１０４】
以上（a）〜（j）までの処理を、図１４に示されているように、DRAM へ書き込まれるデータが一定量になるまで繰り返したのち、プレロード制御ブロックPCBは情報処理回路CPU(0)〜(m)へDRAMのプレロードデータが一定量に達したことを伝える（Preload fin 1）。
【０１０５】
このデータ量は、各CPUからグラフ処理前に通知されてデータバッファDBFに保存されているか、もしくは予め決められており、そのデータ量を各CPU、各プレロード制御ブロックPCBは知っているものとする。
【０１０６】
または、プレロード制御ブロックPCBがデータバッファDBFを参照した際、現在グラフ処理を行っているアプリと同じアプリが過去に実行された際に算出された、適切なデータのプレロード量が保存されていた場合、その読み出された適切なプレロード量を上記一定量とする。
【０１０７】
プレロード制御ブロックPCBはPreload fin 1を通知後、情報処理回路CPU(0)〜(m)によるグラフ処理と並行して、One cycle of preloadの繰り返しから構成されるプレロード動作を続ける。その際、プレロード動作におけるグラフデータブロックの転送先となるDRAMと、情報処理回路CPU(0)〜(m)によるグラフデータの読み出し先となるDRAMは別のDRAM（同じchipの異なる物理領域、異なるchip、異なるDIMM等）を用いる。
【０１０８】
また、プレロード制御ブロックPCBは、Data to DBFと不揮発性メモリNVMに保存されたデータを基にして、グラフ処理において最後に必要となるデータブロックがプレロードされた後、プレロード終了通知を情報処理回路CPU(0)〜CPU(m)に通知する(Preload fin 2)。
【０１０９】
以上、グラフデータが有する大きな特徴は、データダウンロード時には、情報処理回路CPUによるグラフデータブロックのアクセス順が決まらないということである。全体のグラフデータが同じでも、データブロックのアクセス順は初期条件（上記例では開始頂点）等によって変わりうる。したがって、図１７のCase Aに示されているように、初期条件及びデータブロックの値を総合しなければ、次に必要なデータブロックのアドレスが特定できない。したがって、グラフデータは動画のストリーミングなどにみられるような、初めからデータのアクセス順が決まっている場合（図１７：Case B）とは本質的に異なり、そのようなデータを対象としたデータアクセス高速化技術では、本グラフデータ処理の高速化は実現できない。
【０１１０】
（３−３）複数のメモリサブシステムにグラフデータがまたがって存在していた場合のプレロード動作
図１８及び図１９は、グラフデータが複数のメモリサブシステムにまたがった際の動作の例を示す模式図である。
【０１１１】
上記プレロード動作（３−１）、（３−２）において、複数のメモリサブシステムにグラフデータがまたがって存在していた際の動作は、図１８に示した動作a, 図１９に示した動作b,のいずれかをとるものとする。
【０１１２】
（動作a）  図１８に示されているように、メモリコントローラHyMC 0が上記プレロード動作（３−１）、（３−２）を行っている際（Preload 1）、次に必要となるグラフデータブロックが同じメモリサブシステムに存在する不揮発性メモリ NVMに存在しない場合、メモリコントローラHyMC 0におけるプレロード制御ブロックPCBは、グラフデータがまたがった際に必要なデータを、メモリコントローラHyMC 0に繋がれたネットワークスイッチSwitchを介して、他のメモリサブシステムのメモリコントローラHyMC 1に転送する（Send data）。
【０１１３】
すなわち、図１８のSend dataは、図９に示したように、グラフデータがメモリ空間300の複数のメモリサブシステムMSSにまたがった際に、今までプレロード動作を行っていたメモリコントローラHyMC(0)が、別のメモリサブシステムMSSに属するメモリコントローラHyMC(1)においてプレロード動作を進めるために必要なデータを、必要に応じて不揮発性メモリ NVMもしくはMSS内のDRAMから読み出し、ネットワークスイッチSwitchを介して、他のメモリサブシステムのメモリコントローラHyMC(1) に転送する動作を意味する。
【０１１４】
グラフデータがまたがった際に必要なデータとは、幅優先探索における最短経路探索問題の例においては、図２０に示されているようなプレロード済み頂点番号リスト（Data A）、及び次にプレロードする頂点の番号もしくはデータの論理アドレス（Data B）である。Data Aのプレロード済み頂点番号リストは、各頂点番号(VTX 1, VTX 2, VTX 3)に対して、それがプレロードされたか否かを１ビットで表現するものである。図２０では、プレロードされていない頂点は”0”,プレロードされた頂点は”1”で表現されており、プレロードされている頂点番号は、２，３，４，７，９…である。
【０１１５】
グラフデータがまたがった際に必要なデータを他のメモリサブシステムのメモリコントローラHyMC(1)に送付した後、メモリコントローラHyMC(0)におけるプレロード制御ブロックPCBは、グラフデータがまたがった際に必要なデータを削除する（Delete）。この後、メモリコントローラHyMC(0)のプレロード制御ブロックPCBは、プレロード動作（３−１）、（３−２）を続ける（Preload 3）。
【０１１６】
グラフデータがまたがった際に必要なデータを受け取った他のメモリサブシステムのメモリコントローラHyMC(1)は、受け取ったグラフデータがまたがった際に必要なデータを基に、グラフデータのプレロードを開始する（Preload 2）。
【０１１７】
幅優先探索における最短経路探索問題における例を挙げると、Data AとData Bを受け取った他のメモリサブシステムのメモリコントローラHyMC(1)は、受け取った頂点番号からグラフデータのプレロードを開始する。
【０１１８】
（動作b）図１９に示されているように、メモリコントローラHyMC(0)がプレロード動作（３−１）、（３−２）を行っている際、次に必要となるグラフデータブロックが同じメモリサブシステム内の不揮発性メモリに存在しない場合、メモリコントローラHyMC(0) におけるプレロード制御ブロックPCBは、グラフデータがまたがった際に必要なデータを、データバッファDBFに保存する（Data）。
【０１１９】
また情報処理回路CPU(0)〜CPU(m)は、定期的に全てのメモリサブシステムのデータバッファDBFを参照する（Ref）。この場合、またがった際に必要なデータがHyMC(0)の管理するデータバッファDBFに存在しているため、情報処理回路CPU(0)〜CPU(m)は次に必要となるグラフデータブロックが存在するメモリサブシステムのメモリコントローラHyMC(1)に、データのプレロード開始を指示する（Command of preload）。
【０１２０】
その後、情報処理回路CPU(0)〜CPU(m)は、データバッファDBFの中に存在する、グラフデータがまたがった際に必要なデータを削除する（Delete 2）。  
もしくは、情報処理回路CPU(0)〜CPU(m)は、グラフデータがまたがった際に必要なデータを削除するように、プレロード制御ブロックPCBに指示する（CMD 1）。指示を受けたプレロード制御ブロックPCBは、グラフデータがまたがった際に必要なデータを削除する（Delete 1）。
【０１２１】
（４）情報処理回路CPUによるグラフ処理における、グラフデータの読み出し動作
（４−１）グラフデータ読み出し動作の全体フロー
まず、情報処理回路CPUによるグラフデータの読み出し動作を説明する。  
図２１は、グラフデータの読み出し時におけるメモリコントローラHyMCの動作のフローチャートである。
【０１２２】
情報処理回路（CPU（0）〜CPU（m））は、プレロード制御ブロックPCBから図１４におけるPreload fin 1の通達を受け取った後、グラフ処理を開始する。  
まず、情報処理回路CPU（0）〜CPU（m）はグラフ処理において、グラフ処理において必要なグラフデータが格納されている不揮発性メモリを搭載するメモリサブシステムに対して、データ読み出し要求を行う（Step 1）。
【０１２３】
データ要求のあったメモリサブシステムのプレロード制御ブロックPCBは、情報処理回路CPUからの読み出し要求アドレスとプレロードデータが格納されたDRAM上の先頭のプレロードデータの論理アドレスを比較し、両者のアドレスが一致するか判定する（Step 2）。
【０１２４】
両者のアドレスが一致した場合（Step 2のY）、プレロード制御ブロックPCBは先頭のプレロードデータを情報処理回路CPUに送る（Step 3）。その後、プレロード制御ブロックPCBは、同じDRAM上に次のプレロードデータが存在するか判定する（Step 4）。
【０１２５】
同じDRAM上に次のプレロードデータが存在した場合（Step 4のY）、プレロード制御ブロックPCBは次のプレロードデータを先頭プレロードデータとし（Step 5）、フローを終了する（End）。フローの終了後は、情報処理回路CPUからの読み出し要求待ち状態となる。
【０１２６】
同じDRAM上に次のプレロードデータが存在しない場合（Step 4のN）、プレロード制御ブロックPCBはDRAMの切り替え動作を実行する（Step 6）。DRAMの切り替え動作に関しては（４−２）において後述する。
【０１２７】
DRAMの切り替え動作の後、プレロード制御ブロックPCBは次のプレロードデータが存在するか判定する（Step 7）。次のプレロードデータが存在する場合は、次のプレロードデータを先頭プレロードデータとし（Step 5）、フローを終了する（End）。存在しない場合は何もせず終了する（End）。いずれの場合もフローの終了後は、情報処理回路CPUからの読み出し要求待ち状態となる。
【０１２８】
（Step 2）において、両者のアドレスが一致しない場合（Step 2のN）、プレロード制御ブロックPCBは同じDRAM上に次のプレロードデータが存在するか判定する（Step 8）。
【０１２９】
同じDRAM上に次のプレロードデータが存在した場合（Step 8のY）、プレロード制御ブロックPCBは次のプレロードデータを先頭プレロードデータとし（Step 9）、再び（Step 2）に戻る。
【０１３０】
同じDRAM上に次のプレロードデータが存在しない場合（Step 8のN）、プレロード制御ブロックPCBはDRAMの切り替え動作を実行し（Step 10）、その後次のプレロードデータが存在するか判定する（Step 11）。
【０１３１】
次のプレロードデータが存在する場合は、プレロード制御ブロックPCBは次のプレロードデータを先頭プレロードデータとし（Step 9）、再び（Step 2）に戻る。
【０１３２】
次のプレロードデータが存在しない場合、プレロード制御ブロックPCBは不揮発性メモリNVMからデータを読み出す（Step 12）。情報処理回路CPUへデータを送り、終了する（End）。終了後は、情報処理回路CPUからの読み出し要求待ち状態となる。
【０１３３】
（４−２）DRAMの切り替え動作
DRAMの切り替え動作を、図２２を用いて説明する。  
グラフデータ読み出し動作（４−１）の間も、（３）のプレロード処理は並行して行われる。並行して行われるプレロード処理では、不揮発性メモリNVMから読み出したデータの格納先となるDRAM（左のDRAM 0）は、グラフデータ読み出し動作（４−１）において、情報処理回路CPUが読み出すグラフデータが格納されているDRAM（左のDRAM 1）とは異なる。異なるとは、同じDRAM chipの異なる物理領域でもよいし、異なるDRAM chip、異なるDIMMでもよい。
【０１３４】
（４−１）で述べたDRAMの切り替えのタイミングで、プレロード制御ブロックPCBはこれまで不揮発性メモリNVMからのグラフデータの転送先であったDRAM 0を、情報処理回路CPUが読み出すグラフデータが格納されているDRAM（右のDRAM 0）へ割り当て、新たに不揮発性メモリNVMからのグラフデータの転送先のDRAMとしてDRAM 0とは異なるDRAMを割り当てる。
【０１３５】
また、DRAMの切り替え動作が実行される前に、不揮発性メモリNVMからのグラフデータの転送先のDRAMに一定のデータ量のグラフデータが溜まったら、DRAMが切り替わるまでデータのプレロード動作（３）は一時停止され、DRAMの切り替え後に再開される。
【０１３６】
このデータ量は、各CPUからグラフ処理前に通知されてデータバッファDBFに保存されているか、もしくは予め決められており、そのデータ量を各CPU、プレロード制御ブロックPCBは知っているものとする。
【０１３７】
または、プレロード制御ブロックPCBがデータバッファDBFを参照した際、現在グラフ処理を行っているアプリと同じアプリが過去に実行された際に算出された、適切なデータのプレロード量が保存されていた場合、その読み出された適切なプレロード量をデータ量と定める。
【０１３８】
（５）情報処理回路CPUによるグラフ処理における、グラフ処理結果の書き込み動作
図２３に、各情報処理回路における、グラフ処理の結果の書き込み動作のフローチャートの一例を示す。
【０１３９】
情報処理回路CPU(0)〜CPU(m)が得たグラフ処理の結果の書き込み要求がメモリサブシステムに送られた場合、書き込み命令、書き込みデータ及び論理アドレスはコマンドバッファCMDBFへ一次的に保存される（Step 1）。  
プレロード制御ブロックPCBはコマンドバッファCMDBFを参照して、書き込みデータに論理アドレスを付加して（Step 2）、DRAM制御回路DRAMCへ書き込み要求を送る。  
DRAM制御回路DRAMCはDRAMへ、論理アドレスが付加された書き込みデータを書き込む（Step 3）。  
以上のようにして、DRAMに書き込まれたデータのサイズが不揮発性メモリの書き込み単位に達した時（Step 4のYes）、プレロード制御ブロックPCBはDRAM制御回路DRAMCへデータの読み出し要求を送る。DRAM制御回路DRAMCは、DRAMから要求されたデータをプレロード制御ブロックPCBへ転送する。
【０１４０】
プレロード制御ブロックPCBは、転送されたデータを不揮発性メモリNVMに書き込むために、不揮発性メモリ制御回路NVMCに書き込み要求を送る。不揮発性メモリ制御回路NVMCは、要求に従って不揮発性メモリNVMにデータを書き込む（Step 5）。
【０１４１】
（６）グラフ処理中及びグラフ処理後におけるプレロードの最適化動作
図２４に、プレロード制御ブロックPCBが、不揮発性メモリからDRAMへのグラフデータ転送量を動的変化にさせるフローチャートの一例を示す。グラフ処理中にグラフデータ転送量を動的変化させる動作は、図２４のStep 1からStep 3に示されている。
【０１４２】
まず、情報処理回路CPUがグラフ処理を行う間、プレロード制御ブロックPCBは、単位時間当たりの情報処理回路CPUからのデータアクセス要求量と、同じく単位時間当たりの不揮発性メモリNVMからメモリコントローラHyMCによる先読みグラフデータの保存先のDRAMへのデータ転送量を、定期的にモニターする（Step 1）。
【０１４３】
モニターした結果により、単位時間当たりの情報処理回路CPUからのデータアクセス要求量と、単位時間当たりの不揮発性メモリNVMからメモリコントローラHyMCによる先読みグラフデータの保存先のDRAMへのデータ転送量の比もしくは差がある閾値より大きい場合、プレロード制御ブロックPCBはメモリコントローラHyMCによる先読みグラフデータの保存先のDRAMへのデータ転送量を制御する（Step 2）。
【０１４４】
例えば、単位時間当たりの情報処理回路CPUからのデータアクセス要求量が、単位時間当たりの不揮発性メモリNVMからメモリコントローラHyMCによる先読みグラフデータの保存先のDRAMへのデータ転送量より大幅に小さい場合、プレロード制御ブロックPCBはNVMからDRAMへのデータ転送量を減らす。両者のデータ量の関係が逆の場合、プレロード制御ブロックPCBはNVMからDRAMへのデータ転送量を増やす。
【０１４５】
プレロード制御ブロックPCBは情報処理回路CPUによるグラフ処理が終了したかを判定し（Step 3）、終了していない場合は定期的にStep 1及びStep 2を繰り返す。またグラフ処理が終了した場合、Step 1及びStep 2における制御の結果を基にして、情報処理回路CPUのグラフ処理前に行うグラフデータのプレロード量として適切なデータ量を算出する（Step 4）。
【０１４６】
その結果は、アプリを特定する情報と共にデータバッファDBFもしくは不揮発性メモリNVMに保存される。
【０１４７】
以上の説明においては、第一のメモリ及び第二のメモリとしてDRAM、第三のメモリとして不揮発性メモリを用いており、情報処理回路CPUがグラフ処理プログラムを実行するサーバーの例を挙げたが、第三のメモリは、第二のメモリ及び第一のメモリよりも読み出し及び書き込みレイテンシが長ければよく、本発明はDRAM と不揮発性メモリを用いた組み合わせ限定されるものではない。
＜Ｆ．実施の形態１に示される発明の効果のまとめ＞（※請求項１に合わせて変更要）
以上説明したように実施の形態１の発明によって得られる主な効果は以下の通りである。
【０１４８】
大規模グラフを処理する際に必要な、グラフデータへのランダムアクセスの高速化を可能にする大規模なメモリ空間を安価に提供でき、かつ、その場合でもグラフデータが読み出し及び書き込みレイテンシが短いメモリに搭載されていた場合と同様の速度でグラフ処理を行うことができる。
【０１４９】
すなわち、グラフ処理を行う際、第一のメモリ及び第二のメモリと、これらのメモリよりも読み出し及び書き込みレイテンシが長い第三のメモリを用いて大規模グラフを処理する際に必要な大規模なメモリ空間を安価に提供し、かつ、その場合でもグラフデータが第一のメモリ及び第二のメモリに搭載されていた場合と同様の速度でグラフ処理を行うことが可能になる。  
また、複数のメモリコントローラによって管理される複数の第三のメモリのチップにグラフデータが分散して存在していた場合においても、上記の高速なグラフ処理が可能となる。
【０１５０】
さらに、上記の高速なグラフ処理の間、各CPUのデータ処理量と第三のメモリから第一のメモリ及び第二のメモリへのデータ転送量を計測することによって、各CPU及びメモリコントローラの計算リソースの無駄を省くことができる。
【０１５１】
以上述べた本発明の第一の実施例では、サーバー (SVR)１つで情報処理装置を構成していたが、ネットワークで接続される複数のサーバーで情報処理装置を構成し、各サーバーのメモリ空間に第一、第二、第三のメモリを配置し、１つのサーバーの１つのCPUが全体の処理を統括するようにしても良い。あるいはまた、複数のコンピュータの上で協調的に動作する並列プログラムを備えたＰＣクラスタで情報処理装置を構成し、ＰＣクラスタのスレーブコンピュータが共有するメモリ空間に第一、第二、第三のメモリを配置するようにしても良い。
【０１５２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０１５３】
100…サーバー (SVR)
110…情報処理サブシステム (IPSS(0) 〜IPSS(m))
111…情報処理回路 (CPU(0)〜CPU(m))
112…DRAM
120…ネットワークスイッチ (Switch)
130…メモリサブシステム MSS(0) 〜MSS(n)
131…メモリコントローラ (HyMC)
1311…コマンドデータバッファ (CMDBF)
1312…メモリアクセス制御回路 (DMAC)
1313…データバッファ (DBF)
1314…アドレス変換テーブル (ATT)
1315…プレロード制御ブロック (PCB)
1316…不揮発性メモリ制御回路 (NVMC(0) 〜NVMC(j))
1317…DRAM制御回路 (DRAMC(0) 〜DRAMC(i))
132…不揮発性メモリ (NVM(0)からNVM(j))
133…DRAM (DRAM (0)〜DRAM(i))
150…外部記憶装置 (Storage)
200…情報処理システム (IPS (0)) 
210…情報処理システム (IPS (0)) 
Edge…グラフのつながり（辺）
Vertex…グラフの頂点
Adr 0, Adr 1, Adr 2…グラフデータのアドレス
VTX 1, VTX 2, VTX 3…（それぞれ）頂点番号１、頂点番号２、頂点番号３。
【図１】
0005931595.tif 000002
【図２】
0005931595.tif 000003
【図３】
0005931595.tif 000004
【図４】
0005931595.tif 000005
【図５】
0005931595.tif 000006
【図６】
0005931595.tif 000007
【図７】
0005931595.tif 000008
【図８】
0005931595.tif 000009
【図９】
0005931595.tif 000010
【図１０】
0005931595.tif 000011
【図１１】
0005931595.tif 000012
【図１２】
0005931595.tif 000013
【図１３】
0005931595.tif 000014
【図１４】
0005931595.tif 000015
【図１５】
0005931595.tif 000016
【図１６】
0005931595.tif 000017
【図１７】
0005931595.tif 000018
【図１８】
0005931595.tif 000019
【図１９】
0005931595.tif 000020
【図２０】
0005931595.tif 000021
【図２１】
0005931595.tif 000022
【図２２】
0005931595.tif 000023
【図２３】
0005931595.tif 000024
【図２４】
0005931595.tif 000025