(57)【要約】  不揮発メモリシステムは、不揮発メモリと第１領域とを有し、ホストシステムは、ｋｅｙグループに関連付いたｋｅｙ範囲に属するｋｅｙをそれぞれが含んだ２以上のｋｅｙ−ｖａｌｕｅの書込みリクエストを不揮発メモリシステムに送信する。不揮発メモリシステムが、同一ｋｅｙに対応する複数のｖａｌｕｅを集約する演算である縮退演算をｋｅｙグループ単位で行う。１つのｋｅｙグループの縮退演算において、第１領域に、そのｋｅｙグループに属するｋｅｙと、そのｋｅｙに対応する演算結果とが記憶される。１つのｋｅｙグループのｋｅｙ範囲に属するｋｅｙの数であるグループｋｅｙ数が、第１領域のサイズである第１領域サイズを基に決定された数である。
2015136612.tif 000002
【特許請求の範囲】
【請求項１】
不揮発メモリと第１領域とを有する不揮発メモリシステムと、
前記不揮発メモリシステムに接続され、異なる複数のｋｅｙ範囲にそれぞれ関連付いた複数のｋｅｙグループの各々について、ｋｅｙグループに関連付いたｋｅｙ範囲に属するｋｅｙをそれぞれが含んだ２以上のｋｅｙ−ｖａｌｕｅの書込みリクエストを前記不揮発メモリシステムに送信するホストシステムと
を有し、
前記不揮発メモリシステムが、同一ｋｅｙに対応する複数のｖａｌｕｅを集約する演算である縮退演算をｋｅｙグループ単位で行い、
１つのｋｅｙグループについての縮退演算において、前記第１領域に、その１つのｋｅｙグループに属するｋｅｙと、そのｋｅｙに対応する演算結果とが記憶され、
１つのｋｅｙグループのｋｅｙ範囲に属するｋｅｙの数であるグループｋｅｙ数が、前記第１領域のサイズである第１領域サイズを基に決定された数である、
計算機システム。
【請求項２】
前記ホストシステムが、前記第１領域サイズを取得し、前記取得した第１領域サイズを基に前記グループｋｅｙ数を決定する、
請求項１記載の計算機システム。
【請求項３】
前記不揮発メモリシステムが、第１領域サイズを記憶するサイズ領域を有しており、
前記ホストシステムが、サイズ読出しリクエストを前記不揮発メモリシステムに送信し、前記不揮発メモリシステムが、前記サイズ読出しリクエストに応答して、前記サイズ領域から第１領域サイズを読み出し、読み出した第１領域サイズを前記ホストシステムに送信し、
前記取得した第１領域サイズは、前記不揮発メモリシステムから受信した第１領域サイズである、
請求項２記載の計算機システム。
【請求項４】
前記不揮発メモリは、ページ単位でデータを入出力するメモリであり、
前記書込みリクエストに従う２以上のｋｅｙ−ｖａｌｕｅのサイズは、ページサイズであり、
前記不揮発メモリにおける１つのページには、同一ｋｅｙグループのｋｅｙ範囲に属するｋｅｙを含んだｋｅｙ−ｖａｌｕｅが書き込まれる、
請求項１記載の計算機システム。
【請求項５】
前記ホストシステムは、ｋｅｙグループ毎に、２以上のｋｅｙ−ｖａｌｕｅが格納されるバッファであるホストバッファを有し、
前記ホストシステムは、ｋｅｙ−ｖａｌｕｅを、そのｋｅｙ−ｖａｌｕｅ中のｋｅｙが属するｋｅｙ範囲に関連付いたｋｅｙグループに対応するホストバッファに格納し、そのホストバッファにページサイズ分のｋｅｙ−ｖａｌｕｅが蓄積された場合に、前記書込みリクエストを送信する、
請求項４記載の計算機システム。
【請求項６】
前記不揮発メモリシステムは、第２領域を有し、前記オフロード処理リクエストに応答して、前記不揮発メモリからページ単位で２以上のキューｖａｌｕｅを前記第２領域に読み出し、前記第２領域に読み出された各ｋｅｙ−ｖａｌｕｅを用いて、縮退演算を行う、
請求項４記載の計算機システム。
【請求項７】
前記第１領域は、前記第２領域よりもランダムアクセスが高速なメモリ上の領域であり、
前記第２領域は、前記第１領域よりもシーケンシャルアクセスが高速なメモリ上の領域である、
請求項６記載の計算機システム。
【請求項８】
前記第２領域は、前記不揮発メモリより高速なメモリ上の領域であり、
前記第１領域は、前記第２領域よりも高速なメモリ上の領域である、
請求項６記載の計算機システム。
【請求項９】
前記ホストシステムは、ｋｅｙグループ毎に、前記不揮発メモリのアドレスであり２以上のｋｅｙ−ｖａｌｕｅの書込み先アドレスを管理し、
前記オフロード処理リクエストが、ｋｅｙグループに対応した書込み先アドレスを含み、
前記不揮発メモリシステムが、前記オフロード処理リクエスト中の書込み先アドレスリストからｋｅｙ−ｖａｌｕｅを読み出す、
請求項４記載の計算機システム。
【請求項１０】
各ｋｅｙ−ｖａｌｕｅ中のｋｅｙは、グラフ処理におけるグラフの頂点番号であり、
各ｋｅｙ−ｖａｌｕｅ中のｖａｌｕｅは、頂点間でやり取りされるメッセージである、
請求項１記載の計算機システム。
【請求項１１】
前記第１領域は、ワーキングバッファである、
請求項１記載の計算機システム。
【請求項１２】
異なる複数のｋｅｙ範囲にそれぞれ関連付いた複数のｋｅｙグループの各々について、ｋｅｙグループに関連付いたｋｅｙ範囲に属するｋｅｙをそれぞれが含んだ２以上のｋｅｙ−ｖａｌｕｅの書込みリクエストを送信するホストシステム、に接続されるインターフェイス部と、
不揮発メモリと
第１領域と
前記不揮発メモリ及び前記第１領域に接続された制御部と
を有し、
前記制御部が、前記書込みリクエストを前記ホストシステムから受信し、前記受信した書込みリクエストに応答して前記２以上のｋｅｙ−ｖａｌｕｅを前記不揮発メモリに書き込み、
前記制御部が、同一ｋｅｙに対応する複数のｖａｌｕｅを集約する演算である縮退演算をｋｅｙグループ単位で行い、
１つのｋｅｙグループについての縮退演算において、前記第１領域に、その１つのｋｅｙグループに属するｋｅｙと、そのｋｅｙに対応する演算結果とが記憶され、
１つのｋｅｙグループのｋｅｙ範囲に属するｋｅｙの数であるグループｋｅｙ数が、前記第１領域のサイズである第１領域サイズを基に決定された数である、
不揮発メモリシステム。
【請求項１３】
不揮発メモリと第１領域とを有する不揮発メモリシステムに接続されるインターフェイス部と、
前記インターフェイス部に接続された制御部と
を有し、
前記制御部が、異なる複数のｋｅｙ範囲にそれぞれ関連付いた複数のｋｅｙグループの各々について、ｋｅｙグループに関連付いたｋｅｙ範囲に属するｋｅｙをそれぞれが含んだ２以上のｋｅｙ−ｖａｌｕｅの書込みリクエストを前記不揮発メモリシステムに送信し、
前記不揮発メモリシステムが、同一ｋｅｙに対応する複数のｖａｌｕｅを集約する演算である縮退演算をｋｅｙグループ単位で行い、
１つのｋｅｙグループについての縮退演算において、前記第１領域に、その１つのｋｅｙグループに属するｋｅｙと、そのｋｅｙに対応する演算結果とが記憶され、
１つのｋｅｙグループのｋｅｙ範囲に属するｋｅｙの数であるグループｋｅｙ数が、前記第１領域のサイズである第１領域サイズを基に決定された数である、
ホストシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データ演算、例えば、ｋｅｙ−ｖａｌｕｅ形式のデータの演算に関する。
【背景技術】
【０００２】
ｋｅｙ−ｖａｌｕｅ形式のデータ（以下、ｋｅｙ−ｖａｌｕｅデータ）は、一般に、複数のｋｅｙ−ｖａｌｕｅで構成され、１つのｋｅｙ−ｖａｌｕｅは、１つのｋｅｙと１つのバリューの組である。ｋｅｙ−ｖａｌｕｅデータの演算として、例えば、同一ｋｅｙに対応する複数のvalueを集約する演算がある（「集約」は、「縮退」と呼ばれてもよい）。同一ｋｅｙに対応する複数のvalueを集約するとは、複数のvalueの又は平均を算出をすること、複数のvalueから所定条件に該当する１つのvalue（例えば最小又は最大のvalue）を選択すること、等がある。ｋｅｙ−ｖａｌｕｅデータを処理するシステムとして、例えば、グラフ処理を行うシステム（例えば特許文献１）や、マップリデュース処理を行うシステムが知られている。【０００３】
ｋｅｙ−ｖａｌｕｅデータを演算する計算機システムは、一般に、ホストシステム（以下、ホスト）と、ホストに接続された記憶システムとを含む。ホストが、ｋｅｙ−ｖａｌｕｅデータを演算し、演算結果を記憶システムに書き込む。また、ホストが、記憶システムから演算結果を読み出し、その演算結果を、新たなｋｅｙ−ｖａｌｕｅデータを用いて演算し、その演算結果を記憶システムに書き込む。【０００４】
記憶システムが、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）の場合、ＨＤＤの入出力性能がボトルネックとなることがある。そのため、記憶システムとして、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）のような不揮発メモリシステムを採用することが考えられる（例えば特許文献２）。また、不揮発メモリシステムが、不揮発メモリ以外のメモリを有し、アクセス頻度の高いデータを高速のメモリに配置し、アクセス頻度の低いデータを低速のメモリに配置してもよい（例えば特許文献３）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３１８８８４号公報
【特許文献２】特開２０１３−０３７５１７号公報
【特許文献３】ＵＳ２０１０／０２２８９１２
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献２又は３を適用した不揮発メモリシステムでは、不揮発メモリシステムの入出力性能がホストの演算性能より高く、故に、ホストがボトルネックになることがある。
【課題を解決するための手段】
【０００７】
不揮発メモリシステムは、不揮発メモリと第１領域とを有し、ホストシステムは、異なる複数のｋｅｙ範囲にそれぞれ関連付いた複数のｋｅｙグループの各々について、ｋｅｙグループに関連付いたｋｅｙ範囲に属するｋｅｙをそれぞれが含んだ２以上のｋｅｙ−ｖａｌｕｅの書込みリクエストを不揮発メモリシステムに送信する。不揮発メモリシステムが、同一ｋｅｙに対応する複数のｖａｌｕｅを集約する演算である縮退演算をｋｅｙグループ単位で行う。１つのｋｅｙグループの縮退演算において、第１領域に、そのｋｅｙグループに属するｋｅｙと、そのｋｅｙに対応する演算結果とが記憶される。第１領域は、例えば後述のワーキングバッファである。１つのｋｅｙグループのｋｅｙ範囲に属するｋｅｙの数であるグループｋｅｙ数が、第１領域のサイズである第１領域サイズを基に決定された数である。
【発明の効果】
【０００８】
縮退演算が不揮発メモリシステムにオフロードされるので、ホストがボトルネックになることを回避することができる。また、ｋｅｙグループについて縮退演算が行われ、グループｋｅｙ数が第１領域サイズを基に決定されるので、第１領域サイズが、取り得る全てのｋｅｙを格納できる程に大きくなくても、不揮発メモリシステムに縮退演算をオフロードすることができる。
【図面の簡単な説明】
【０００９】
【図１】実施例に係る計算機システムの概要を示す。
【図２】実施例に係る計算機システムの構成を示す。
【図３】ホストで実行されるプログラムを示す。
【図４】ホストのＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に記憶される情報とそのＤＲＡＭに確保される領域とを示す。
【図５】ｋｅｙ−ｖａｌｕｅの不揮発メモリへの書込みの説明図である。
【図６Ａ】書込み処理の流れを示すブロック図である。
【図６Ｂ】書込み処理においてホスト１０２が行う処理の流れを示すフローチャートである。
【図７】読出し処理の流れを示すブロック図である。
【図８Ａ】準備処理の流れを示すブロック図である。
【図８Ｂ】準備処理においてホスト１０２が行う処理の流れを示すフローチャートである。
【図９Ａ】ｋｅｙグループの縮退演算オフロード処理の流れの一部を示すブロック図である。
【図９Ｂ】ｋｅｙグループの縮退演算オフロード処理の流れの残りを示すブロック図である。
【図９Ｃ】ｋｅｙグループの縮退演算オフロード処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下、ｋｅｙ−ｖａｌｕｅデータを演算する計算機システムとしてグラフ処理を行う計算機システムを例に取り、一実施例を説明する。グラフ処理では、一般に、ｋｅｙは、頂点であり、ｖａｌｕｅは、頂点間でやり取りされるメッセージである。以下の説明では、ｋｅｙを「頂点」と言い、ｋｅｙが表す番号を「頂点番号」と言い、ｖａｌｕｅを「メッセージ」と言うことがある。
【００１１】
また、以下、そのグラフ処理においてｋｅｙ毎に１以上のｖａｌｕｅを集約することを「縮退演算」と呼ぶ。縮退演算の一例は、例えば以下の通りである。例えば、(key, value)＝(0, 1)、(1, 3)、(3, 2)、(1, 3)、(0, 2)、(2, 1)、(0, 1)、(3, 3)とあった場合、ｋｅｙ毎に合計、すなわち、(key, value)＝(0, 4)、(1, 6)、(2, 1)、(3, 5)を算出することである。
【００１２】
また、以下の説明では「プログラム」を主語として処理の説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリを用いながら行うため、その処理の説明ではプロセッサが主語とされてもよい。また、プログラムを主語として開示された処理はそのプログラムを実行するプロセッサを有する装置が行う処理としてもよい。また、プロセッサは、典型的にはプログラムを実行するマイクロプロセッサ又はそのコアであるが、処理の一部を実行する専用ハードウェアを含んでもよい。また、各種プログラムは、プログラム配布サーバや、計算機が読み取り可能な記憶メディアによって計算機にインストールされてもよい。
【００１３】
図１は、実施例に係る計算機システムの概要を示す。
【００１４】
ホストシステム（以下、ホスト）１０２が、不揮発メモリシステム１０１の不揮発メモリ１１１に、複数のｋｅｙ−ｖａｌｕｅを格納し、グラフ処理のうちの縮退演算を不揮発メモリシステム１０１にオフロードする。不揮発メモリシステム１０１は、不揮発メモリ１１１からｋｅｙ−ｖａｌｕｅを読み出し、読み出したｋｅｙ−ｖａｌｕｅを縮退演算し、演算結果をワーキングバッファ１１６に格納する。これにより、ホストがボトルネックになることを避けることができる。
【００１５】
ただし、一般に、取り得る全てのｋｅｙをワーキングバッファ１１６に格納できる程にワーキングバッファ１１６のサイズ（以下、ＷＢサイズ）は大きくない。
【００１６】
そこで、複数のｋｅｙグループが用意され、１グループ頂点数が、ＷＢサイズを基に決定される。１グループ頂点数とは、各ｋｅｙグループに関連付けられるｋｅｙ範囲のサイズ（ｋｅｙ範囲に属するｋｅｙの数）である（図では、番号ｘのｋｅｙグループが「Ｇｒ：ｘ」と表記されている）。例えば、いずれのｋｅｙ範囲のサイズも、ＷＢサイズに従う格納ｋｅｙ最大数（例えば、ワーキングバッファ１１６に格納可能なｋｅｙと縮退演算後のｖａｌｕｅとの組の最大数）以下である。
【００１７】
そして、ｋｅｙグループ毎に、縮退演算が行われる。すなわち、不揮発メモリシステム１０１は、ｋｅｙグループ毎に、不揮発メモリ１１１からのｋｅｙ−ｖａｌｕｅの読み出し、読み出したｋｅｙ−ｖａｌｕｅの縮退演算、及び、縮退演算の結果のワーキングバッファ１１６への格納を行う。このため、ワーキングバッファ１１６に格納されるｋｅｙの数は、処理対象のｋｅｙグループに関連付いたｋｅｙ範囲のサイズ以下、すなわち、ＷＢサイズを基に決定されたｋｅｙ数以下である。
【００１８】
ｋｅｙグループ毎に不揮発メモリ１１１からｋｅｙ−ｖａｌｕｅを読み出すことは、ホスト１０２と不揮発メモリシステム１０１との協調により行われる。以下、本実施例を詳細に説明する。
【００１９】
図２は、本実施例に係る計算機システムの構成を示す。
【００２０】
計算機システムは、不揮発メモリシステム１０１とホスト１０２が１つの筐体に収納されたコンバージドシステムであってもよいし、不揮発メモリシステム１０１とホスト１０２が通信ネットワークを介して接続されたシステムであってもよい。不揮発メモリシステム１０１及びホスト１０２は、不揮発メモリシステム１０１内での通信プロトコルとホスト１０２内での通信プロトコルと同じ通信プロトコル（例えばＰＣＩ  Ｅｘｐｒｅｓｓ（登録商標））で通信されてもよいし異なる通信プロトコル（例えばＦｉｂｒｅ  Ｃｈａｎｎｅｌ）で通信されてもよい。
【００２１】
不揮発メモリシステム１０１は、不揮発メモリ１１１を有する記憶メディアドライブ（例えばＳＳＤ）であってもよいし、複数の不揮発メモリ１１１を有する大規模メモリシステムであってもよい。不揮発メモリシステム１０１は、不揮発メモリ１１１、コントローラ１１２、ＤＭＡモジュール１１３、縮退演算モジュール１１４、ストリームバッファ１１５、ワーキングバッファ１１６、バッファサイズレジスタ１１７及びホストＩ／Ｆ１１８を有する。これらの要素は、例えばバス（例えばＰＣＩ  Ｅｘｐｒｅｓｓバス）１３１に接続されていてよい。また、例えば、不揮発メモリ１１１は、バス１３１に代えてＤＭＡモジュール１１３に接続されていてよい。
【００２２】
不揮発メモリ１１１は、本実施例では、ＮＡＮＤ型のフラッシュメモリである。従って、不揮発メモリ１１１は、複数のブロックで構成されており、各ブロックは、複数のページで構成されており、ページ単位でデータが読み書きされ、ブロック単位でデータが消去される。不揮発メモリ１１１は、ＮＡＮＤ型のフラッシュメモリに代えて、他種の不揮発メモリ（例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ））でもよい。
【００２３】
コントローラ１１２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含んだモジュール（例えば、ＣＰＵそれ自体、又は、ＣＰＵとＡＳＩＣとを含んだモジュール）である。コントローラ１１２は、ホスト１０２からのリクエストに応答して処理を行う。
【００２４】
ＤＭＡモジュール１１３は、ＤＭＡによりデータを転送するモジュール（例えばハードウェア回路）である。ＤＭＡモジュール１１３は、コントローラ１１２に含まれていてもよい。また、ＤＭＡモジュール１１３は無くてもよく、その場合には、コントローラ１１２が不揮発メモリシステム１０１内でのデータ転送を制御してもよい。
【００２５】
縮退演算モジュール１１４は、縮退演算を行うモジュール（例えばハードウェア回路）である。縮退演算モジュール１１４は、コントローラ１１２に含まれていてもよい。また、縮退演算モジュール１１４は無くてもよく、その場合には、コントローラ１１２が縮退演算を行ってもよい。
【００２６】
ストリームバッファ１１５は、第１メモリ上に設けられたバッファ（領域）であり、不揮発メモリ１１１から読み出されたデータが書き込まれる。第１メモリは、揮発メモリでも不揮発メモリでもよい。第１メモリは、シーケンシャルアクセスを高速に（例えばランダムアクセス又はワーキングバッファ１１６よりも高速に）行うことができるメモリであることが好ましい。第１メモリは、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。第１メモリは、不揮発メモリ１１１よりも高速である。
【００２７】
ワーキングバッファ１１６は、第１メモリ又は第２メモリ上に設けられたバッファ（領域）であり、縮退演算の結果である縮退結果が書き込まれる。第２メモリは、揮発メモリでも不揮発メモリでもよい。第２メモリは、ランダムアクセスを高速に（例えばシーケンシャルアクセス又はストリームバッファ１１５よりも高速に）行うことができるメモリ（例えばアクセス粒度が第１メモリよりも細かいメモリ）であることが好ましい。第２メモリは、不揮発メモリ１１１及び第１メモリよりも高速のメモリ、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２８】
バッファサイズレジスタ１１７は、ワーキングバッファ１１６のサイズを格納しているレジスタである。
【００２９】
ホストＩ／Ｆ１１８は、ホスト１０２に接続されるインターフェイスデバイスである。
【００３０】
ホスト１０２は、ＣＰＵ１２１、ＤＲＡＭ１２２及び不揮発メモリＩ／Ｆ１２３を有する。ＣＰＵ１２１は、ホスト１０２の動作を制御する。ＤＲＡＭ１２２は、ホスト１０２が有するメモリの一例であり、ＤＲＡＭ１２２に代えて他種のメモリが採用されてもよい。不揮発メモリＩ／Ｆ１２３は、不揮発メモリシステム１０１（ホストＩ／Ｆ１１８）に接続されるインターフェイスデバイスである。ホスト１０２は、ＣＰＵ１２１で実行されるプログラムを記憶した不揮発メモリ（以下、プログラムメモリ）を有していてもよい。プログラムメモリからプログラムがＤＲＡＭ１２２にロードされ、ＤＲＡＭ１２２にロードされたプログラムがＣＰＵ１２１により実行されてよい。プログラムメモリが無く、ＣＰＵ１２１で実行されるプログラムが、不揮発メモリシステム１０１の不揮発メモリ１１１からＤＲＡＭ１２２にロードされてもよい。ホスト１０２内でも、例えばＰＣＩ  Ｅｘｐｒｅｓｓで通信が行われてよい。
【００３１】
図３は、ＣＰＵ１２１で実行されるプログラムを示す。
【００３２】
ＣＰＵ１２１で実行されるプログラムとして、準備プログラム３０１、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）制御プログラム３０２及びオフロード制御プログラム３０３がある。準備プログラム３０１は、準備処理、例えば、ＷＢサイズの読出し、ＷＢサイズに基づくｋｅｙ範囲サイズの算出等を行う。Ｉ／Ｏ制御プログラム３０２は、不揮発メモリ１１１に対するデータ（ｋｅｙ−ｖａｌｕｅ）の入出力を制御する。オフロード制御プログラム３０３は、縮退演算のオフロードを制御する。
【００３３】
図４は、ＤＲＡＭ１２２に記憶される情報とＤＲＡＭ１２２に確保される領域とを示す。
【００３４】
ＤＲＡＭ１２２は、ｋｅｙグループ毎に、ホストバッファ４０１を有し、且つ、ｋｅｙグループ毎に、アドレスリスト４０２及び縮退結果４０３を記憶する。ホストバッファ４０１には、ｋｅｙグループに関連付けたｋｅｙ範囲に属するｋｅｙを含んだｋｅｙ−ｖａｌｕｅが一時格納される。アドレスリスト４０２は、ｋｅｙグループに関連付けたｋｅｙ範囲に属するｋｅｙを含んだｋｅｙ−ｖａｌｕｅの、不揮発メモリ１１１における書込み先アドレス、を有する。縮退結果４０３は、ｋｅｙグループに関連付けたｋｅｙ範囲に属するｋｅｙ毎の縮退演算結果を含む。
【００３５】
また、ＤＲＡＭ１２２は、ホストバッファサイズ４０４と１グループ頂点数４０５を記憶する。ホストバッファサイズ４０４は、ホストバッファ４０１のサイズを表す情報である。１グループ頂点数４０５は、ｋｅｙグループに関連付くｋｅｙ範囲のサイズ、すなわち、ｋｅｙ範囲に属するｋｅｙ（頂点）の数を表す情報である。以下、１つのｋｅｙグループのｋｅｙ範囲のサイズを「１グループ頂点数」と言うことがある。本実施例では、全てのｋｅｙグループの１グループ頂点数は同じである。しかし、少なくとも１つのｋｅｙグループの１グループ頂点数が他のｋｅｙグループのそれと異なっていてもよい。いずれのｋｅｙグループの１グループ頂点数は、ＷＢサイズに従う格納ｋｅｙ最大数（例えば、ワーキングバッファ１１６に格納可能なｋｅｙと縮退演算後のｖａｌｕｅとの組の最大数）以下である。
【００３６】
図５は、ｋｅｙ−ｖａｌｕｅの不揮発メモリ１１１への書込みの説明図である。
【００３７】
上述したように、ＤＲＡＭ１２２が、ｋｅｙグループ毎にホストバッファ４０１を有する。各バッファ４０１のサイズは、不揮発メモリ１１１の書込み単位サイズ（本実施例ではページサイズ）と同じである。１つのバッファ４０１が満杯になった場合に、そのバッファ４０１に格納されている全てのｋｅｙ−ｖａｌｕｅが不揮発メモリ１１１に書き込まれるようになっている。そして、それらのｋｅｙ−ｖａｌｕｅの書込み先アドレスが、アドレスリスト４０２に書き込まれるようになっている。
【００３８】
例えば、Ｉ／Ｏ制御プログラム３０２は、Ｇｒ：２（ｋｅｙ範囲（頂点番号範囲）：２００−２９９）に属するｋｅｙを含んだｋｅｙ−ｖａｌｕｅをＤＲＡＭ１２２に格納する場合、そのｋｅｙ−ｖａｌｕｅを、Ｇｒ：２のバッファ４０１に格納する。それにより、Ｇｒ：２のバッファ４０１が満杯になったので、Ｉ／Ｏ制御プログラム３０２は、Ｇｒ：２のバッファ４０１に格納されている全てのｋｅｙ−ｖａｌｕｅを不揮発メモリ１１１に書き込み、且つ、書込み先アドレスを、Ｇｒ：２のアドレスリスト４０２に書き込む。これにより、Ｇｒ：２のバッファ４０１が空になり、且つ、Ｇｒ：２について、書込み先アドレスが追加される。Ｉ／Ｏ制御プログラム３０２は、Ｇｒ：２についてのみ縮退演算を不揮発メモリシステム１０１にオフロードする場合には、Ｇｒ：２のアドレスリスト４０２に記録されている書込み先アドレスからデータを不揮発メモリシステム１０１に読み出させればよい。データはページ単位に読み出されるが、ページ単位に読み出されたデータ中の全てのｋｅｙは、Ｇｒ：２に属するｋｅｙである。つまり、ｋｅｙグループ単位でのｋｅｙ−ｖａｌｕｅの読み出しが実現され、それにより、ｋｅｙグループ単位での縮退演算が可能である。
【００３９】
以下、本実施例における書込み処理と読出し処理を説明する。
【００４０】
図６Ａは、書込み処理の流れを示すブロック図であり、図６Ｂは、書込み処理においてホスト１０２が行う処理の流れを示すフローチャートである。以下、説明を分かり易くするために、図５と同様、Ｇｒ：２を例に取る。また、以下、説明を省略するが、ホスト１０２と不揮発メモリシステム１０１間の通信は、不揮発メモリＩ／Ｆ１２３及びホストＩ／Ｆ１１８を経由する。また、以下、説明の混同を避けるために、不揮発メモリシステム１０１がホスト１０２から受ける指示を「リクエスト」と言い、不揮発メモリシステム１０１内部でやり取りされる指示を「コマンド」と言う。
【００４１】
Ｉ／Ｏ制御プログラム３０２は、Ｇｒ：２に属するｋｅｙを含んだｋｅｙ−ｖａｌｕｅを、ＤＲＡＭ１２２におけるＧｒ：２のバッファ４０１に格納する（図６ＢのＳ６０１）。Ｇｒ：２のバッファ４０１が満杯になった場合（図６ＢのＳ６０２：Ｙｅｓ）、Ｉ／Ｏ制御プログラム３０２は、書込みリクエストを不揮発メモリシステム１０１に送信し（図６ＢのＳ６０３）、不揮発メモリシステム１０１において、コントローラ１１２が、書込みリクエストを受信する（図６ＡのＳ６−１）。その書込みリクエストによる書込み対象データは、Ｇｒ：２のバッファ４０１に格納されている全てのｋｅｙ−ｖａｌｕｅを含んだデータである。また、書込みリクエストは、書込み元アドレス、書込み先アドレス、及び、データサイズ（データ長）を含む。書込み元アドレスは、ＤＲＡＭ１２２における、Ｇｒ：２のバッファ４０１のアドレス（例えばＧｒ：２のバッファ４０１の先頭アドレス）である。書込み先アドレスは、不揮発メモリ１１１におけるアドレス（典型的には論理アドレス）である。データサイズは、Ｇｒ：２のバッファ４０１のサイズ、つまりページサイズである。なお、書込み対象のデータがバッファ４０１内のデータと異なるデータの場合、データサイズは任意のサイズでよい。
【００４２】
コントローラ１１２は、受信した書込みリクエストに基づく書込みコマンドを、ＤＭＡモジュール１１３に送信する（図６ＡのＳ６−２）。その書込みコマンドは、書込み元アドレス、書込み先アドレス、及び、データサイズを含む。書込み元アドレスは、書込みリクエストに含まれていた書込み元アドレスと同じである。書込み先アドレスは、書込みリクエストに含まれていた書込み先アドレスと同じアドレス、又は、書込みリクエストに含まれていた書込み先アドレス（論理アドレス）に対応したアドレス（物理アドレス）である。データサイズは、書込みリクエストに含まれていたデータサイズと同じである。
【００４３】
ＤＭＡモジュール１１３は、書込みコマンドをコントローラ１１２から受信し、その書込みコマンドに従い、書込み元アドレス（ＤＲＡＭ１２２）からデータサイズ分のデータ（Ｇｒ：２に対応した複数のｋｅｙ−ｖａｌｕｅ）を書込み先アドレス（不揮発メモリ１１１）にＤＭＡ転送する（図６ＡのＳ６−３）。
【００４４】
ＤＭＡモジュール１１３は、ＤＭＡ転送が完了した場合、完了通知をコントローラ１１２に送信する（図６ＡのＳ６−４）。コントローラ１１２は、完了通知を受けて、Ｓ６−１で受信した書込みリクエストの応答として、完了通知をホスト１０２に送信し、ホスト１０２において、Ｉ／Ｏ制御プログラム３０２が、その完了通知を受信する（図６ＡのＳ６−５、図６ＢのＳ６０４）。
【００４５】
図７は、読出し処理の流れを示すブロック図である。
【００４６】
Ｉ／Ｏ制御プログラム３０２は、読出しリクエストを不揮発メモリシステム１０１に送信し、不揮発メモリシステム１０１において、コントローラ１１２が、読出しリクエストを受信する（Ｓ７−１）。読出しリクエストは、読出し元アドレス、読出し先アドレス、及び、データサイズ（データ長）を含む。読出し元アドレスは、不揮発メモリ１１１におけるアドレス（典型的には論理アドレス）である。読出し先アドレスは、ＤＲＡＭ１２２における読出し先のアドレスである。データサイズは、読出し対象データのサイズである。
【００４７】
コントローラ１１２は、受信した読出しリクエストに基づく読出しコマンドを、ＤＭＡモジュール１１３に送信する（Ｓ７−２）。その読出しコマンドは、読出し元アドレス、読出し先アドレス、及び、データサイズを含む。読出し元アドレスは、読出しリクエストに含まれていた読出し元アドレスと同じアドレス、又は、読出しリクエストに含まれていた読出し元アドレス（論理アドレス）に対応したアドレス（物理アドレス）である。読出し先アドレスは、読出しリクエストに含まれていた読出し先アドレスと同じアドレスである。データサイズは、読出しリクエストに含まれていたデータサイズと同じである。
【００４８】
ＤＭＡモジュール１１３は、読出しコマンドをコントローラ１１２から受信し、その読出しコマンドに従い、読出し元アドレス（不揮発メモリ１１１）からデータサイズ分のデータを読出し先アドレス（ＤＲＡＭ１２２）にＤＭＡ転送する（Ｓ７−３）。
【００４９】
ＤＭＡモジュール１１３は、ＤＭＡ転送が完了した場合、完了通知をコントローラ１１２に送信する（Ｓ７−４）。コントローラ１１２は、完了通知を受けて、Ｓ７−１で受信した読出しリクエストの応答として、完了通知をホスト１０２に送信し、ホスト１０２において、Ｉ／Ｏ制御プログラム３０２が、その完了通知を受信する（Ｓ７−５）。
【００５０】
このような書込み処理及び読出し処理は、図８を参照して説明する準備処理が完了した後に、可能となる。
【００５１】
図８Ａは、準備処理の流れを示すブロック図であり、図８Ｂは、準備処理においてホスト１０２が行う処理の流れを示すフローチャートである。
【００５２】
準備処理は、例えば、ホスト１０２の電源投入時、又は、ＷＢサイズの変更をホスト１０２が検出した時に行われる。例えば、ＷＢサイズが変更された場合（ワーキングバッファ１１６が拡大又は縮小した場合）、コントローラ１１２が、変更後のＷＢサイズをバッファサイズレジスタ１１７に格納し、且つ、ＷＢサイズ変更をホスト１０２に通知してよい。
【００５３】
準備プログラム３０１が、ＷＢサイズをバッファサイズレジスタ１１７から読み出す（図８ＢのＳ８０１）。具体的には、準備プログラム３０１が、レジスタ読出しリクエストを不揮発メモリシステム１０１に送信し、そのリクエストを、ホストＩ／Ｆ１１８が受信する（図８ＡのＳ８−１）。ホストＩ／Ｆ１１８が、そのリクエストに応答して、ＷＢサイズをバッファサイズレジスタ１１７から読み出し、読み出したＷＢサイズをホスト１０２（準備プログラム３０１）に通知する（図８ＡのＳ８−２）。
【００５４】
準備プログラム３０１が、受信したＷＢサイズを基に１グループ頂点数を決定する（図８ＡのＳ８−３、図８ＢのＳ８０２）。１グループ頂点数の決定では、更に、グラフ処理において取り得るｋｅｙの数（ｋｅｙ全体数）が基にされてもよい。準備プログラム３０１は、ｋｅｙ全体数と１グループ頂点数とに基づく数のｋｅｙグループ毎に、ページサイズ分のホストバッファ４０１をＤＲＡＭ１２２に確保し、且つ、アドレスリスト４０２をＤＲＡＭ１２２上に用意する（図８ＡのＳ８−４、図８ＢのＳ８０３）。
【００５５】
この準備処理の後、図６及び図７に示したような書込み処理及び読出し処理が可能になる。なお、準備処理において、ＷＢサイズは、不揮発メモリシステム１０１（バッファサイズレジスタ１１７）から取得されることに代えて、他のデバイス（例えば、ホスト１０２のユーザが操作する入力デバイス（図示せず）、又は、ホスト１０２に接続された管理計算機（図示せず））から取得（入力）されてもよい。従って、バッファサイズレジスタ１１７は無くてもよい。
【００５６】
図９Ａ及び図９Ｂは、ｋｅｙグループの縮退演算オフロード処理の流れを示すブロック図であり、図９Ｃは、ｋｅｙグループの縮退演算オフロード処理の流れを示すフローチャートである。図９Ａ〜図９Ｃは、各ｋｅｙグループについて実行可能な処理である。以下、１つのｋｅｙグループを例に取り、図９Ａ〜図９Ｃの説明では、その１つのｋｅｙグループを「対象グループ」と言う。なお、縮退演算オフロード処理は、１つのホストバッファ４０１からデータ（複数のｋｅｙ−ｖａｌｕｅ）が不揮発メモリ１１１に書き込まれた場合に、そのホストバッファ４０１に対応するｋｅｙグループについてのみ行われてもよいし、定期的にｋｅｙグループ毎に行われてもよい。各アドレスリスト４０２では、処理済のアドレス（縮退演算オフロード処理が行われたアドレス）と未処理アドレス（縮退演算オフロード処理が行われていないアドレス）とが区別されていてもよいし、未処理アドレスのみがリスト４０２に登録されていてもよい。
【００５７】
オフロード制御プログラム３０３は、対象グループのアドレスリスト４０２を参照する（図９ＣのＳ９０１）。対象グループに対応した未処理アドレス毎に、図９Ａの処理（図９ＣのＳ９１１〜Ｓ９１４）が行われる。
【００５８】
すなわち、オフロード制御プログラム３０３は、対象グループに対応した未処理アドレスを、対象グループのアドレスリスト４０２から特定し、特定した未処理アドレス（典型的には論理アドレス）を含んだオフロード処理リクエストを不揮発メモリシステム１０１に送信し、コントローラ１１２が、そのリクエストを受信する（図９ＡのＳ９−１、図９ＣのＳ９１１）。
【００５９】
次に、そのリクエスト中のアドレスから１ページ分のデータがストリームバッファ１１５に読み出される（図９ＣのＳ９１２）。具体的には、コントローラ１１２が、読出しコマンドをＤＭＡモジュール１１３に送信する。その読出しコマンドは、読出し元アドレスとして、オフロード処理リクエスト中の未処理アドレス（又はそれに対応するアドレス（物理アドレス））を含み、読出し先アドレスとして、ストリームバッファ１１５のアドレスを含む。ＤＭＡモジュール１１３が、その読出しコマンドに応答して、読出し元アドレス（未処理アドレス）から１ページ分のデータを読出し先アドレス（ストリームバッファ１１５）に読み出す（図９ＡのＳ９−３）。これにより、ストリームバッファ１１５には、複数のｋｅｙ−ｖａｌｕｅが格納される。それら複数のｋｅｙ−ｖａｌｕｅ中の全てのｋｅｙは、対象グループに属するｋｅｙである。ＤＭＡモジュール１１３は、読み出しを完了した場合、読出しコマンドの応答としての完了通知をコントローラ１１２に送信する（図９ＡのＳ９−４）。
【００６０】
次に、コントローラ１１２が、縮退演算モジュール１１４に、縮退演算コマンドを送信する（図９ＡのＳ９−５、図９ＣのＳ９１３）。
【００６１】
それにより、縮退演算モジュール１１４により、ストリームバッファ１１５中のｋｅｙ−ｖａｌｕｅと、ワーキングバッファ１１６中の途中結果とを基に縮退演算が行われ、ワーキングバッファ１１６中の途中結果が更新され、コントローラ１１２からホスト１０２に完了通知が送信される（図９ＣのＳ９１４）。具体的には、次の通りである。すなわち、縮退演算モジュール１１４が、縮退演算コマンドを受信し、縮退演算を開始する。縮退演算では、縮退演算モジュール１１４が、ストリームバッファ１１５から１つのｋｅｙ−ｖａｌｕｅを読み出し（図９ＡのＳ９−６）、且つ、そのｋｅｙ−ｖａｌｕｅ中のｋｅｙに対応した途中結果をワーキングバッファ１１６から読み出し、読み出したｋｅｙ−ｖａｌｕｅ中のｖａｌｕｅを用いてその途中結果を更新し、更新後の途中結果をワーキングバッファ１１６に格納する（図９ＡのＳ９−７）。このＳ９−６及びＳ９−７が、１つの未処理アドレスに対応した全てのｋｅｙ−ｖａｌｕｅ（図９ＡのＳ９−３で読み出された全てのｋｅｙ−ｖａｌｕｅ）について行われる（例えば、ストリームバッファ１１５が空になるまで行われる）。１つの未処理アドレスに対応した全てのｋｅｙ−ｖａｌｕｅについてＳ９−６及びＳ９−７が完了した場合、縮退演算モジュール１１４は、縮退演算コマンドの応答としての完了通知をコントローラ１１２に送信する（図９ＡのＳ９−８）。コントローラ１１２は、その完了通知を受信し、オフロード処理リクエストの応答としての完了通知をホスト１０２に送信し、オフロード制御プログラム３０３が、その完了通知を受信する（図９ＡのＳ９−９）。
【００６２】
以上の図９Ａの処理（図９ＣのＳ９１１〜Ｓ９１４）が、対象グループに対応した全ての未処理アドレスについて行われると、対象グループについての縮退演算の完了となる。この場合、図９Ｂの処理（図９ＣのＳ９２１〜Ｓ９２２）により、対象グループの縮退演算結果が不揮発メモリシステム１０１からホスト１０２のＤＲＡＭ１２２にロードされる。
【００６３】
すなわち、オフロード制御プログラム３０３が、オフロード結果リクエストを送信し、コントローラ１１２が、そのリクエストを受信する（図９ＢのＳ９−１１、図９ＣのＳ９２１）。オフロード結果リクエストは、読出し先アドレスとして、ＤＲＡＭ１２２における、対象グループに対応した縮退結果４０３が格納されるアドレスを含む。
【００６４】
そのオフロード結果リクエストに応答して、ワーキングバッファ１１６内の結果（対象グループについての縮退演算の結果）が、ＤＲＡＭ１２２にロードされる（図９ＣのＳ９２２）。具体的には、コントローラ１１２が、読出しコマンドをＤＭＡモジュール１１３に送信する（図９ＡのＳ９−１２）。その読出しコマンドは、読出し先アドレスとして、オフロード結果リクエストに含まれていた読出し先アドレスを含み、読出し元アドレスとして、ワーキングバッファ１１６のアドレスを含む。ＤＭＡモジュール１１３は、読出しコマンドに応答して、読出し元アドレス（ワーキングバッファ１１６）から結果を読出し先アドレス（ＤＲＡＭ１２２における、対象グループに対応した縮退結果４０３が格納されるアドレス）に読み出す（図９ＡのＳ９−１３）。その後、ＤＭＡモジュール１１３は、読出しコマンドの応答としての完了通知をコントローラ１１２に送信する（図９ＡのＳ９−１４）。コントローラ１１２は、その完了通知を受けて、オフロード結果リクエストの応答としての完了通知を、ホスト１０２に送信し、オフロード制御プログラム３０３が、その完了通知を受信する（図９ＡのＳ９−１５）。
【００６５】
以上、本実施例によれば、ホスト１０２と不揮発メモリシステム１０１が協調することにより、縮退演算が不揮発メモリシステム１０１にオフロードされる。これにより、ホスト１０２がボトルネックになることを回避することができる。
【００６６】
また、本実施例によれば、縮退演算がｋｅｙグループ毎に行われ、且つ、１グループ頂点数がＷＢサイズを基に決定される。不揮発メモリ１１１の１つのページに、同一のｋｅｙグループに属するｋｅｙ−ｖａｌｕｅが書き込まれ、異なるｋｅｙグループに属するｋｅｙ−ｖａｌｕｅが書き込まれることが無い。このため、ＷＢサイズがｋｅｙ全体数分のｋｅｙと結果を格納できる程に大きくなくても、縮退演算を不揮発メモリシステム１０１にオフロードすることができる。
【００６７】
また、本実施例によれば、ワーキングバッファ１１６程高速でないが不揮発メモリ１１１よりは高速のストリームバッファ１１５を介して縮退演算が行われる。ストリームバッファ１１５は無くてもよいが、ストリームバッファ１１５があることで、ワーキングバッファ１１６と不揮発メモリ１１１の速度差（Ｉ／Ｏ性能の差）を吸収することができる。
【００６８】
以上、一実施例を説明したが、本発明は、その実施例に限定されない。
【００６９】
例えば、グラフ処理以外の処理、例えば、マップリデュース処理にも、上述した実施例を適用することができる。
【００７０】
また、ホスト１０２は、未処理アドレスを含んだオフロード処理リクエストを不揮発メモリシステム１０１に送信することに代えて、対象グループのアドレスリスト４０２それ自体を不揮発メモリシステム１０１に送信してもよい。また、ホスト１０２がアドレスリスト４０２を有することに代えて、ホスト１０２が、バッファ４０１中のデータの書込みリクエストを送信する都度に、送信対象の書込みリクエストに、そのバッファ４０１に対応したｋｅｙグループの番号を含め、不揮発メモリシステム１０１のコントローラ１１２が、ｋｅｙグループ毎に、ｋｅｙグループの番号とアドレスリストとを有してもよい。この場合、ホスト１０２は、対象グループの番号を含んだオフロード処理リクエストを不揮発メモリシステム１０１に送信し、コントローラ１１２が、そのリクエスト中のグループ番号に対応した未処理アドレスについて縮退演算を行ってもよい。
【００７１】
また、実施例において、不揮発メモリシステム１０１は、計算機システムにおいて、ホスト１０２以外のシステムでよい。不揮発メモリシステム１０１において、不揮発メモリ１１１を含んだサブシステムと、縮退演算を行うサブシステムとに分離していてもよい。
【００７２】
また、例えば、ホストバッファ４０１は、ページサイズより多くてもよく、ホスト１０２は、ページサイズ分のｋｅｙ−ｖａｌｕｅが貯まった場合に、書込みリクエストを送信してもよい。また、書込みリクエストは、Ｎページ毎に送信されてもよい（Ｎ＝２以上の整数）。
【００７３】
また、例えば、不揮発メモリシステム１０１は、オフロード処理リクエストを受けること無しに、縮退演算を行ってもよい。具体的には、例えば、不揮発メモリシステム１０１（例えばオフロード制御プログラム３０３）は、ｋｅｙグループ毎のアドレスリストを定期的にホスト１０２から受信してよい。また、不揮発メモリシステム１０１は、ｋｅｙグループ単位の縮退演算を定期的に行い、ワーキングバッファ１１６における、ｋｅｙグループに属するｋｅｙとそのｋｅｙの演算結果とを、不揮発メモリ１１１の空きページに書き込み、その空ページのアドレスと、ｋｅｙグループの番号との対応関係を、不揮発メモリ１１１とは別のメモリ（図示せず）に記憶し、その対応関係を、ホスト１０２に通知してよい。ホスト１０２は、縮退演算の結果を取得したい場合、不揮発メモリシステム１０１から通知されたアドレスを読出し元アドレスとして含んだ読出しリクエストを不揮発メモリシステム１０１に送信することで、所望のｋｅｙグループについての縮退演算の結果を取得し、縮退演算結果をＤＲＡＭ１２２に格納してもよい。
【００７４】
また、例えば、１グループ頂点数は、ホスト１０２の管理計算機によって算出されホスト１０２に通知されてもよい。
【符号の説明】
【００７５】
１０１：不揮発メモリシステム
【図１】
2015136612.tif 000003
【図２】
2015136612.tif 000004
【図３】
2015136612.tif 000005
【図４】
2015136612.tif 000006
【図５】
2015136612.tif 000007
【図６Ａ】
2015136612.tif 000008
【図６Ｂ】
2015136612.tif 000009
【図７】
2015136612.tif 000010
【図８Ａ】
2015136612.tif 000011
【図８Ｂ】
2015136612.tif 000012
【図９Ａ】
2015136612.tif 000013
【図９Ｂ】
2015136612.tif 000014
【図９Ｃ】
2015136612.tif 000015
【国際調査報告】
2015136612.tif 000016
2015136612.tif 000017