(57)【要約】【課題】ＳＳＤにおいて、データの読み出しと同程度の速度でデータに対する演算を行う。【解決手段】メモリ４１４は、データを記憶し、メモリＩＦ４１３は、メモリ４１４からデータを読み出し、演算部４１２は、データに対する所定の演算を行う。ホストＩＦ４１１は、ホスト装置から演算命令を受信したとき、演算部４１２へ演算要求を出力するとともに、メモリＩＦ４１３を介してメモリ４１４へ読み出し命令を出力する。そして、ホストＩＦ４１１は、メモリＩＦ４１３を介してメモリ４１４から読み出されるデータに対する所定の演算の演算結果を、演算部４１２から受信し、演算結果をホスト装置へ出力する。【選択図】図４
2018005686.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するメモリと、
前記メモリから前記データを読み出すメモリインタフェースと、
前記データに対する所定の演算を行う演算部と、
ホスト装置から演算命令を受信したとき、前記演算部へ演算要求を出力するとともに前記メモリインタフェースを介して前記メモリへ読み出し命令を出力し、前記メモリインタフェースを介して前記メモリから読み出される前記データに対する前記所定の演算の演算結果を、前記演算部から受信し、前記演算結果を前記ホスト装置へ出力するホストインタフェースと、
を備えることを特徴とするソリッドステートドライブ。
【請求項２】
前記読み出し命令は、前記演算部を、前記メモリから読み出される前記データの転送先に指定する命令であり、前記メモリインタフェースは、前記メモリから読み出した前記データを前記演算部へ転送することを特徴とする請求項１記載のソリッドステートドライブ。
【請求項３】
前記演算部は、複数の異なる演算をそれぞれ行う複数の演算回路を含み、前記ホストインタフェースは、前記複数の演算回路のうち前記演算命令に対応する前記所定の演算を行う特定の演算回路に対して、前記演算要求を出力し、前記特定の演算回路から前記演算結果を受信することを特徴とする請求項１又は２記載のソリッドステートドライブ。
【請求項４】
前記演算命令は、検索対象を含む検索命令であり、前記所定の演算は、前記メモリから読み出される前記データと前記検索対象とを比較する演算であり、前記演算結果は、前記メモリから読み出される前記データに前記検索対象が含まれるか否かを示すことを特徴とする請求項１乃至３のいずれか１項に記載のソリッドステートドライブ。
【請求項５】
前記演算命令は、統計値を要求する演算命令であり、前記所定の演算は、前記メモリから読み出される前記データの前記統計値を求める演算であり、前記演算結果は、前記演算部が求めた前記統計値を含むことを特徴とする請求項１乃至３のいずれか１項に記載のソリッドステートドライブ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソリッドステートドライブ（ＳＳＤ）に関する。
【背景技術】
【０００２】
近年、情報処理装置において、ストレージからCentral Processing Unit（ＣＰＵ）へデータを移動して演算を行う代わりに、データの近くに演算回路を設けて演算を行う、データ近傍演算（Near Data Processing）が提案されている。
【０００３】
図１は、ＣＰＵにおける演算とデータ近傍演算の例を示している。ＣＰＵ１０１が演算を行う場合、図１（ａ）に示すように、ＣＰＵ１０１は、ストレージ１０２からデータを読み出し、読み出したデータを用いて演算を行う。ストレージ１０２としては、ハードディスクドライブ（ＨＤＤ）、ＳＳＤ等の記憶装置が用いられる。ＳＳＤは、半導体メモリを用いた記憶装置である。
【０００４】
一方、データ近傍演算では、図１（ｂ）に示すように、演算機能がＣＰＵ１０１からストレージ１０２へ移動する。この場合、ＣＰＵ１０１は、ストレージ１０２に対して演算命令を出力し、ストレージ１０２内に設けられた演算回路が、データに対する演算を行う。
【０００５】
このようなデータ近傍演算では、データ移動コストが削減されるため、高性能かつ省電力の演算処理を期待することができる。このため、データ近傍演算専門のワークショップが開催される等、研究が活発化している。
【０００６】
図２は、データ近傍演算を行う従来のＳＳＤの構成例を示している（例えば、非特許文献１を参照）。図２のＳＳＤ２０１は、フラッシュメモリコントローラ２１１及びフラッシュメモリ２１２−１〜フラッシュメモリ２１２−４を含む。フラッシュメモリ２１２−１〜フラッシュメモリ２１２−４としては、例えば、不揮発性メモリであるＮＡＮＤフラッシュメモリが用いられる。
【０００７】
フラッシュメモリコントローラ２１１は、ホストインタフェース（ホストＩＦ）２２１、Dynamic Random Access Memory（ＤＲＡＭ）２２２、及びプロセッサ２２３を含む。さらに、フラッシュメモリコントローラ２１１は、フラッシュメモリインタフェース（フラッシュメモリＩＦ）２２４−１及びフラッシュメモリＩＦ２２４−２を含む。フラッシュメモリＩＦ２２４−１は、フラッシュメモリ２１２−１及びフラッシュメモリ２１２−２に接続され、フラッシュメモリＩＦ２２４−２は、フラッシュメモリ２１２−３及びフラッシュメモリ２１２−４に接続されている。
【０００８】
以下では、フラッシュメモリ２１２−１〜フラッシュメモリ２１２−４のいずれかを指して、フラッシュメモリ２１２と記載することがある。また、フラッシュメモリＩＦ２２４−１又はフラッシュメモリＩＦ２２４−２のいずれかを指して、フラッシュメモリＩＦ２２４と記載することがある。各フラッシュメモリ２１２は、チップと呼ばれ、フラッシュメモリＩＦ２２４とフラッシュメモリ２１２との間の伝送路は、チャネルと呼ばれる。したがって、ＳＳＤ２０１のチップ数は、フラッシュメモリ２１２の個数を表し、チャネル数は、フラッシュメモリＩＦ２２４の個数を表す。
【０００９】
各フラッシュメモリ２１２におけるデータの消去単位はブロックと呼ばれ、データの読み書き単位はページと呼ばれる。１ブロックのサイズは、例えば、数Ｍバイトであり、１ページのサイズは、例えば、数Ｋバイトから十数Ｋバイトである。
【００１０】
フラッシュメモリＩＦ２２４−１は、フラッシュメモリ２１２−１及びフラッシュメモリ２１２−２から読み出されるデータの誤り訂正を行う。一方、フラッシュメモリＩＦ２２４−２は、フラッシュメモリ２１２−３及びフラッシュメモリ２１２−４から読み出されるデータの誤り訂正を行う。
【００１１】
プロセッサ２２３は、書き換え回数が多いブロックと少ないブロックとを交換するウェアレベリングを行うことで、書き換え回数を平準化する。また、プロセッサ２２３は、ＤＲＡＭ２２２を用いて、ブロック中の不要ページを解放するガーベージコレクションを行う。
【００１２】
一般に、ＳＳＤ２０１のチップ数、チャネル数、ブロックサイズ、ページサイズ等の物理情報は、ＣＰＵ等のホスト装置から隠蔽されている。
【００１３】
ホストＩＦ２２１は、ホスト装置（不図示）から演算命令を受信すると、受信した演算命令をプロセッサ２２３へ出力する。プロセッサ２２３は、フラッシュメモリ２１２からデータを読み出してＤＲＡＭ２２２に格納し、そのデータを用いて演算を行う。そして、プロセッサ２２３は、ホストＩＦ２２１を介して演算結果を主記憶装置（不図示）に格納する。
【００１４】
フラッシュメモリ装置内でデータの検索を実行する構成も知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２００３−２０３４８６号公報
【非特許文献】
【００１６】
【非特許文献１】Jaeyoung Do et al.,“Query Processing on Smart SSDs: Opportunities and Challenges,”SIGMOD’13, pages 1221-1230, 2013.
【発明の概要】
【発明が解決しようとする課題】
【００１７】
図２のＳＳＤ２０１を用いた場合、ホスト装置は、フラッシュメモリ２１２を直接制御する代わりに、プロセッサ２２３を介して間接的にフラッシュメモリ２１２を制御する。このため、ＳＳＤ２０１の物理情報がホスト装置から隠蔽され、ホスト装置は、フラッシュメモリ２１２−１〜フラッシュメモリ２１２−４のデータ配置を最適化することが困難である。さらに、フラッシュメモリコントローラ２１１は、データ近傍演算を行う際に、フラッシュメモリ２１２から読み出したデータを一旦ＤＲＡＭ２２２に格納してから、演算を行う。したがって、データ近傍演算が低速になる。
【００１８】
なお、かかる問題は、フラッシュメモリを用いたＳＳＤに限らず、他の半導体メモリを用いたＳＳＤにおいても生ずるものである。
【００１９】
１つの側面において、本発明は、ＳＳＤにおいて、データの読み出しと同程度の速度でデータに対する演算を行うことを目的とする。
【課題を解決するための手段】
【００２０】
１つの案では、ソリッドステートドライブは、データを記憶するメモリと、メモリからデータを読み出すメモリインタフェースと、データに対する所定の演算を行う演算部と、ホストインタフェースとを含む。
【００２１】
ホストインタフェースは、ホスト装置から演算命令を受信したとき、演算部へ演算要求を出力するとともに、メモリインタフェースを介してメモリへ読み出し命令を出力する。そして、ホストインタフェースは、メモリインタフェースを介してメモリから読み出されるデータに対する所定の演算の演算結果を、演算部から受信し、演算結果をホスト装置へ出力する。
【発明の効果】
【００２２】
実施形態によれば、ＳＳＤにおいて、データの読み出しと同程度の速度でデータに対する演算を行うことができる。
【図面の簡単な説明】
【００２３】
【図１】ＣＰＵにおける演算とデータ近傍演算を示す図である。
【図２】従来のＳＳＤの構成図である。
【図３】ソフトウェア定義型ＳＳＤの構成図である。
【図４】実施形態のＳＳＤの構成図である。
【図５】情報処理装置の構成図である。
【図６】ホストＩＦの動作のフローチャートである。
【図７】演算命令を受信した場合の動作シーケンスを示す図である。
【図８】データの検索を行う演算部の構成図である。
【図９】データに対する統計演算を行う演算部の構成図である。
【図１０】複数の異なる演算を行う演算部の構成図である。
【図１１】複数のフラッシュメモリＩＦを含む情報処理装置の構成図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照しながら、実施形態を詳細に説明する。
図３は、ソフトウェアによってフラッシュメモリを直接制御することができるソフトウェア定義型ＳＳＤの構成例を示している。図３のホスト装置３０１は、アプリケーション３１１又はライブラリ３１２を実行し、ＳＳＤ３０２は、フラッシュメモリコントローラ３２１及びフラッシュメモリ３２２−１〜フラッシュメモリ３２２−４を含む。フラッシュメモリコントローラ３２１は、ホストＩＦ３３１、フラッシュメモリＩＦ３３２−１、及びフラッシュメモリＩＦ３３２−２を含む。
【００２５】
この場合、ホスト装置３０１のアプリケーション３１１又はライブラリ３１２がＳＳＤ３０２の物理情報を管理し、ウェアレベリング及びガーベージコレクションを制御する。これにより、ホスト装置３０１がデータをフラッシュメモリ３２２−１〜フラッシュメモリ３２２−４に分散して配置することが可能になり、高スループットかつ低レイテンシの高速な読み出し処理等が実現される。また、フラッシュメモリコントローラ３２１内にＤＲＡＭを設ける必要がないため、フラッシュメモリコントローラ３２１の回路規模を削減することができる。
【００２６】
しかし、図３のＳＳＤ３０２では、ウェアレベリング及びガーベージコレクションのためのプロセッサ及びＤＲＡＭが存在しないため、別の技術によってデータ近傍演算を行うことが望まれる。
【００２７】
図４は、実施形態のＳＳＤの構成例を示している。図４のＳＳＤ４０１は、ホストＩＦ４１１、演算部４１２、メモリＩＦ４１３、及びメモリ４１４を含む。メモリ４１４は、データを記憶し、メモリＩＦ４１３は、メモリ４１４からデータを読み出し、演算部４１２は、データに対する所定の演算を行う。
【００２８】
ホストＩＦ４１１は、ホスト装置から演算命令を受信したとき、演算部４１２へ演算要求を出力するとともに、メモリＩＦ４１３を介してメモリ４１４へ読み出し命令を出力する。そして、ホストＩＦ４１１は、メモリＩＦ４１３を介してメモリ４１４から読み出されるデータに対する所定の演算の演算結果を、演算部４１２から受信し、演算結果をホスト装置へ出力する。
【００２９】
図４のＳＳＤ４０１によれば、データの読み出しと同程度の速度でデータに対する演算を行うことができる。
【００３０】
図５は、図４のＳＳＤ４０１を用いた情報処理装置の構成例を示している。図５の情報処理装置５０１は、ホスト装置５１１及びＳＳＤ５１２を含み、ビッグデータ処理、データベースアプライアンス、ストレージシステム等の様々な技術に適用することができる。ホスト装置５１１は、アプリケーション、ライブラリ等のプログラムを実行する制御部５２１を含む。ＳＳＤ５１２は、ソフトウェア定義型ＳＳＤであり、フラッシュメモリコントローラ５３１、フラッシュメモリ５３２−１、及びフラッシュメモリ５３２−２を含む。フラッシュメモリコントローラ５３１は、ホストＩＦ５４１、演算部５４２、及びフラッシュメモリＩＦ５４３を含む。
【００３１】
ホストＩＦ５４１は、制御部５２１、演算部５４２、及びフラッシュメモリＩＦ５４３に接続されており、フラッシュメモリＩＦ５４３は、ホストＩＦ５４１、演算部５４２、フラッシュメモリ５３２−１、及びフラッシュメモリ５３２−２に接続されている。
【００３２】
以下では、フラッシュメモリ５３２−１又はフラッシュメモリ５３２−２のいずれかを指して、フラッシュメモリ５３２と記載することがある。ホストＩＦ５４１、演算部５４２、フラッシュメモリＩＦ５４３、及びフラッシュメモリ５３２は、図４のホストＩＦ４１１、演算部４１２、メモリＩＦ４１３、及びメモリ４１４にそれぞれ対応する。
【００３３】
ホスト装置５１１の制御部５２１は、ＳＳＤ５１２にデータを登録する場合、フラッシュメモリ５３２−１及びフラッシュメモリ５３２−２に分散してデータを書き込み、書き込みアドレスを記録する。一方、ＳＳＤ５１２に登録されたデータを使用する場合、制御部５２１は、読み出し命令又は演算命令をＳＳＤ５１２に発行する。
【００３４】
フラッシュメモリコントローラ５３１のホストＩＦ５４１は、ホスト装置５１１から読み出し命令を受信した場合、ホストＩＦ５４１をデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ５４３へ出力する。次に、フラッシュメモリＩＦ５４３は、読み出し命令をフラッシュメモリ５３２へ出力し、フラッシュメモリ５３２は、データをフラッシュメモリＩＦ５４３へ出力する。そして、フラッシュメモリＩＦ５４３は、フラッシュメモリ５３２から受信したデータをホストＩＦ５４１へ出力し、ホストＩＦ５４１は、フラッシュメモリＩＦ５４３から受信したデータをホスト装置５１１へ転送する。
【００３５】
また、ホストＩＦ５４１は、ホスト装置５１１から演算命令を受信した場合、演算部５４２へ演算要求を出力し、演算部５４２をデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ５４３へ出力する。次に、フラッシュメモリＩＦ５４３は、読み出し命令をフラッシュメモリ５３２へ出力し、フラッシュメモリ５３２は、データをフラッシュメモリＩＦ５４３へ出力する。
【００３６】
次に、フラッシュメモリＩＦ５４３は、フラッシュメモリ５３２から受信したデータを演算部５４２へ出力し、演算部５４２は、フラッシュメモリＩＦ５４３から受信したデータを用いて演算を行って、演算結果をホストＩＦ５４１へ出力する。そして、ホストＩＦ５４１は、演算部５４２から受信した演算結果をホスト装置５１１へ転送する。演算部５４２が行う演算としては、例えば、フラッシュメモリ５３２が記憶するデータの検索、データに対する統計演算等が挙げられる。
【００３７】
図６は、図５のホストＩＦ５４１が読み出し命令又は演算命令を受信した場合に行う動作の例を示すフローチャートである。ホストＩＦ５４１は、ホスト装置５１１から命令を受信すると（ステップ６０１）、受信した命令が読み出し命令又は演算命令のいずれであるかをチェックする（ステップ６０２）。
【００３８】
受信した命令が演算命令である場合（ステップ６０２，ＹＥＳ）、ホストＩＦ５４１は、演算部５４２へ演算要求を出力する（ステップ６０３）。そして、ホストＩＦ５４１は、演算部５４２をデータの転送先に指定した読み出し命令を生成し（ステップ６０４）、生成した読み出し命令をフラッシュメモリＩＦ５４３へ出力する（ステップ６０５）。
【００３９】
一方、受信した命令が読み出し命令である場合（ステップ６０２，ＮＯ）、ホストＩＦ５４１は、ホストＩＦ５４１をデータの転送先に指定した読み出し命令を生成する（ステップ６１０）。そして、ホストＩＦ５４１は、生成した読み出し命令をフラッシュメモリＩＦ５４３へ出力する（ステップ６０５）。
【００４０】
次に、ホストＩＦ５４１は、フラッシュメモリＩＦ５４３からデータを受信したか否かをチェックする（ステップ６０６）。フラッシュメモリＩＦ５４３からデータを受信しない場合（ステップ６０６，ＮＯ）、ホストＩＦ５４１は、フラッシュメモリＩＦ５４３から完了通知を受信する（ステップ６０７）。一方、フラッシュメモリＩＦ５４３からデータを受信した場合（ステップ６０６，ＹＥＳ）、ホストＩＦ５４１は、受信したデータをホスト装置５１１へ転送し（ステップ６１１）、フラッシュメモリＩＦ５４３から完了通知を受信する（ステップ６０７）。
【００４１】
次に、ホストＩＦ５４１は、演算部５４２から演算結果を受信したか否かをチェックする（ステップ６０８）。演算部５４２から演算結果を受信した場合（ステップ６０８，ＹＥＳ）、ホストＩＦ５４１は、受信した演算結果を、演算命令に対する応答としてホスト装置５１１へ出力する（ステップ６０９）。ホストＩＦ５４１は、ステップ６０７の完了通知よりも前に、演算結果を演算部５４２から受信することもある。
【００４２】
一方、演算部５４２から演算結果を受信しない場合（ステップ６０８，ＮＯ）、ホストＩＦ５４１は、読み出し命令に対する応答をホスト装置５１１へ出力する（ステップ６１２）。読み出し命令に対する応答には、例えば、正常終了、エラー発生数等が含まれる。
【００４３】
図７は、図５のホストＩＦ５４１が演算命令を受信した場合の動作シーケンスの例を示している。まず、ホストＩＦ５４１は、演算部５４２へ演算要求を出力し（手順７０１）、演算部５４２をデータの転送先に指定した読み出し命令を、フラッシュメモリＩＦ５４３へ出力する（手順７０２）。そして、フラッシュメモリＩＦ５４３は、読み出し命令をフラッシュメモリ５３２へ出力する（手順７０３）。
【００４４】
次に、フラッシュメモリ５３２は、受信した読み出し命令に従って、所定単位毎にデータをフラッシュメモリＩＦ５４３へ転送するデータ転送を開始する（手順７０４）。そして、フラッシュメモリＩＦ５４３は、フラッシュメモリ５３２から受信したデータを所定単位毎に演算部５４２へ転送するデータ転送を開始する（手順７０５）。所定単位は、例えば、数十バイトであってもよい。
【００４５】
演算部５４２は、フラッシュメモリＩＦ５４３からデータを受信しながら、受信したデータを用いて演算を行い、フラッシュメモリＩＦ５４３からのデータ転送が終了すると、演算結果をホストＩＦ５４１へ出力する（手順７０６）。
【００４６】
フラッシュメモリ５３２は、フラッシュメモリＩＦ５４３に対するデータ転送が終了すると、完了通知をフラッシュメモリＩＦ５４３へ出力する。フラッシュメモリＩＦ５４３は、フラッシュメモリ５３２から完了通知を受信すると、完了通知をホストＩＦ５４１へ出力する。フラッシュメモリＩＦ５４３からホストＩＦ５４１への完了通知は、手順７０６よりも前に出力されることもあり、手順７０６よりも後に出力されることもある。
【００４７】
図５の情報処理装置５０１によれば、演算部５４２をデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ５４３へ出力することで、演算部５４２がフラッシュメモリＩＦ５４３からデータを直接受信しながら演算を行うことが可能になる。このため、演算命令に対するスループットは、読み出し速度と同程度になる。
【００４８】
また、演算命令に対するレイテンシは演算処理の追加により増加するが、読み出しレイテンシが十分大きいため、実際には読み出しレイテンシとほぼ同程度になる。例えば、演算処理が検索処理である場合、読み出しレイテンシが数百μｓ程度であるのに対して、演算処理による増加分は数百ｎｓ程度である。
【００４９】
したがって、フラッシュメモリコントローラ５３１は、演算命令に対する演算処理を、データの読み出しと同程度の速度で行うことができる。
【００５０】
また、図５のＳＳＤ５１２はソフトウェア定義型ＳＳＤであるため、ソフトウェアによってフラッシュメモリを直接制御することができ、フラッシュメモリコントローラ５３１内にＤＲＡＭを設ける必要はない。
【００５１】
図８は、データの検索を行う演算部５４２の構成例を示している。図８の演算部５４２は、キーワードレジスタ８０１、比較回路８０２、及びバッファ８０３を含む。ホスト装置５１１の制御部５２１は、検索対象を含む検索命令をＳＳＤ５１２に発行する。検索対象としては、例えば、キーワード８１１が用いられる。
【００５２】
フラッシュメモリコントローラ５３１のホストＩＦ５４１は、キーワード８１１を含む検索命令を受信した場合、キーワード８１１を含む検索要求を演算部５４２へ出力する。演算部５４２は、受信した検索要求に含まれるキーワード８１１をキーワードレジスタ８０１に格納し、フラッシュメモリＩＦ５４３から受信した所定単位のデータ８１２をバッファ８０３に格納する。
【００５３】
比較回路８０２は、キーワードレジスタ８０１に格納されたキーワード８１１と、バッファ８０３に格納されたデータ８１２とを比較して、キーワード８１１と一致するデータがデータ８１２に含まれているか否かをチェックする。したがって、フラッシュメモリＩＦ５４３から所定単位のデータ８１２を受信する度に、検索処理が行われる。データ８１２にキーワード８１１が含まれている場合、比較回路８０２は、キーワード８１１と一致するデータが格納されているフラッシュメモリ５３２内の位置を記録する。
【００５４】
そして、フラッシュメモリＩＦ５４３からのデータ転送が終了すると、比較回路８０２は、ＨＩＴ又はＭＩＳＳを含む検索結果８１３をホストＩＦ５４１へ出力する。ＨＩＴは、フラッシュメモリ５３２内のデータにキーワード８１１が含まれていることを示し、ＭＩＳＳは、フラッシュメモリ５３２内のデータにキーワード８１１が含まれていないことを示す。データにキーワード８１１が含まれている場合、検索結果８１３は、ＨＩＴとともに、フラッシュメモリ５３２内のデータの位置を示す情報を含む。
【００５５】
図８の演算部５４２によれば、検索命令に対する検索処理を、データの読み出しと同程度の速度で行うことができる。
【００５６】
図９は、データに対する統計演算を行う演算部５４２の構成例を示している。図９の演算部５４２は、統計演算回路９０１、バッファ９０２、及び結果レジスタ９０３を含む。ホスト装置５１１の制御部５２１は、統計値を要求する統計演算命令をＳＳＤ５１２に発行する。統計値としては、データの合計値、平均値、中央値、最大値、最小値等が用いられる。統計値は、所定条件を満たすデータの個数（カウント値）であってもよい。
【００５７】
例えば、統計演算命令がデータの合計値を要求する集計命令である場合、フラッシュメモリコントローラ５３１のホストＩＦ５４１は、集計要求を演算部５４２へ出力する。演算部５４２は、フラッシュメモリＩＦ５４３から受信した所定単位のデータ９１１をバッファ９０２に格納する。結果レジスタ９０３は、データの合計値を記憶し、その合計値の初期値は０に設定される。
【００５８】
統計演算回路９０１は、バッファ９０２に格納されたデータ９１１の合計値を計算し、計算した合計値を結果レジスタ９０３内の合計値に加算する。したがって、フラッシュメモリＩＦ５４３から所定単位のデータ８１２を受信する度に集計処理が行われ、結果レジスタ９０３内の合計値が更新される。そして、フラッシュメモリＩＦ５４３からのデータ転送が終了すると、結果レジスタ９０３は、合計値を含む統計演算結果９１２をホストＩＦ５４１へ出力する。
【００５９】
統計演算命令がデータの平均値等の他の統計値を要求する命令である場合も、集計命令の場合と同様に、結果レジスタ９０３は、データの統計値を記憶する。そして、フラッシュメモリＩＦ５４３から所定単位のデータ８１２を受信する度に統計処理が行われ、結果レジスタ９０３内の統計値が更新される。
【００６０】
図９の演算部５４２によれば、統計演算命令に対する統計処理を、データの読み出しと同程度の速度で行うことができる。
【００６１】
図１０は、複数の異なる演算を行う演算部５４２の構成例を示している。図１０の演算部５４２は、演算回路１００１−１及び演算回路１００１−２を含む。演算回路１００１−１及び演算回路１００１−２は、それぞれ異なる種類の演算を行う。例えば、演算回路１００１−１は、データの検索を行ってもよく、演算回路１００１−２は、データに対する統計演算を行ってもよい。
【００６２】
ホストＩＦ５４１は、ホスト装置５１１から演算命令を受信した場合、受信した演算命令に対応する演算を行う演算回路１００１−ｉ（ｉ＝１，２）へ演算要求を出力する。そして、ホストＩＦ５４１は、演算回路１００１−ｉをデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ５４３へ出力する。
【００６３】
フラッシュメモリＩＦ５４３は、フラッシュメモリ５３２から受信したデータを演算回路１００１−ｉへ出力し、演算回路１００１−ｉは、フラッシュメモリＩＦ５４３から受信したデータを用いて演算を行って、演算結果をホストＩＦ５４１へ出力する。そして、ホストＩＦ５４１は、演算回路１００１−ｉから受信した演算結果をホスト装置５１１へ転送する。
【００６４】
この場合、図６のステップ６０３において、ホストＩＦ５４１は、演算回路１００１−１及び演算回路１００１−２のうち、演算命令に対応する演算を行う演算回路１００１−ｉへ演算要求を出力する。そして、ステップ６０４において、ホストＩＦ５４１は、演算要求の出力先の演算回路１００１−ｉをデータの転送先に指定した読み出し命令を生成する。また、ステップ６０８において、ホストＩＦ５４１は、演算要求の出力先の演算回路１００１−ｉから演算結果を受信したか否かをチェックする。
【００６５】
図１０の演算部５４２によれば、演算命令に応じて演算回路１００１−ｉを選択することができ、選択した演算回路１００１−ｉに対応する演算を、データの読み出しと同程度の速度で行うことができる。
【００６６】
図１１は、複数のフラッシュメモリＩＦを含む情報処理装置の構成例を示している。図１１の情報処理装置１１０１は、ホスト装置５１１及びＳＳＤ１１１１を含み、ホスト装置５１１は、制御部５２１を含む。ＳＳＤ１１１１は、ソフトウェア定義型ＳＳＤであり、フラッシュメモリコントローラ１１２１及びフラッシュメモリ１１２２−１〜フラッシュメモリ１１２２−４を含む。フラッシュメモリコントローラ１１２１は、ホストＩＦ１１３１、演算部１１３２−１、演算部１１３２−２、フラッシュメモリＩＦ１１３３−１、及びフラッシュメモリＩＦ１１３３−２を含む。
【００６７】
ホストＩＦ１１３１は、制御部５２１、演算部１１３２−１、演算部１１３２−２、フラッシュメモリＩＦ１１３３−１、及びフラッシュメモリＩＦ１１３３−２に接続されている。フラッシュメモリＩＦ１１３３−１は、ホストＩＦ１１３１、演算部１１３２−１、演算部１１３２−２、フラッシュメモリ１１２２−１、及びフラッシュメモリ１１２２−２に接続されている。フラッシュメモリＩＦ１１３３−２は、ホストＩＦ１１３１、演算部１１３２−１、演算部１１３２−２、フラッシュメモリ１１２２−３、及びフラッシュメモリ１１２２−４に接続されている。
【００６８】
以下では、フラッシュメモリ１１２２−１〜フラッシュメモリ１１２２−４のいずれかを指して、フラッシュメモリ１１２２と記載することがある。また、フラッシュメモリＩＦ１１３３−１又はフラッシュメモリＩＦ１１３３−２のいずれかを指して、フラッシュメモリＩＦ１１３３と記載することがある。さらに、演算部１１３２−１又は演算部１１３２−２のいずれかを指して、演算部１１３２と記載することがある。
【００６９】
ホストＩＦ１１３１、演算部１１３２、フラッシュメモリＩＦ１１３３、及びフラッシュメモリ１１２２は、図４のホストＩＦ４１１、演算部４１２、メモリＩＦ４１３、及びメモリ４１４にそれぞれ対応する。
【００７０】
ホスト装置５１１の制御部５２１の動作は、図５の場合と同様である。フラッシュメモリコントローラ１１２１のホストＩＦ１１３１は、ホスト装置５１１から読み出し命令を受信した場合、ホストＩＦ１１３１をデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ１１３３へ出力する。
【００７１】
次に、フラッシュメモリＩＦ１１３３は、読み出し命令をフラッシュメモリ１１２２へ出力し、フラッシュメモリ１１２２は、データをフラッシュメモリＩＦ１１３３へ出力する。そして、フラッシュメモリＩＦ１１３３は、フラッシュメモリ１１２２から受信したデータをホストＩＦ１１３１へ出力し、ホストＩＦ１１３１は、フラッシュメモリＩＦ１１３３から受信したデータをホスト装置５１１へ転送する。
【００７２】
また、ホストＩＦ１１３１は、ホスト装置５１１から演算命令を受信した場合、演算部１１３２−ｉ（ｉ＝１，２）へ演算要求を出力し、演算部１１３２−ｉをデータの転送先に指定した読み出し命令をフラッシュメモリＩＦ１１３３−ｉへ出力する。次に、フラッシュメモリＩＦ１１３３−ｉは、読み出し命令をフラッシュメモリ１１２２へ出力し、フラッシュメモリ１１２２は、データをフラッシュメモリＩＦ１１３３−ｉへ出力する。
【００７３】
次に、フラッシュメモリＩＦ１１３３−ｉは、フラッシュメモリ１１２２から受信したデータを演算部１１３２−ｉへ出力し、演算部１１３２−ｉは、フラッシュメモリＩＦ１１３３−ｉから受信したデータを用いて演算を行って、演算結果をホストＩＦ１１３１へ出力する。そして、ホストＩＦ１１３１は、演算部１１３２−ｉから受信した演算結果をホスト装置５１１へ転送する。
【００７４】
図１１の情報処理装置１１０１によれば、フラッシュメモリＩＦ１１３３毎に演算部１１３２を設けることで、各フラッシュメモリＩＦ１１３３に接続されたフラッシュメモリ１１２２のグループを対象として、演算処理を行うことができる。
【００７５】
図３のＳＳＤ３０２、図４のＳＳＤ４０１、図５の情報処理装置５０１、及び図１１の情報処理装置１１０１の構成は一例に過ぎず、ＳＳＤ又は情報処理装置の用途又は条件に応じて一部の構成要素を省略又は変更してもよい。例えば、ＳＳＤ３０２、情報処理装置５０１、又は情報処理装置１１０１において、フラッシュメモリの代わりにRandom Access Memory（ＲＡＭ）等の別の半導体メモリを用いて、データを記憶してもよい。
【００７６】
ＳＳＤ３０２、情報処理装置５０１、又は情報処理装置１１０１において、各フラッシュメモリＩＦに接続されるフラッシュメモリの個数は、２個に限定されるものではない。情報処理装置５０１は、単一のフラッシュメモリ５３２を含んでいてもよく、３個以上のフラッシュメモリ５３２を含んでいてもよい。情報処理装置１１０１は、３個以上の演算部１１３２と３個以上のフラッシュメモリＩＦ１１３３とを含んでいてもよい。また、情報処理装置１１０１は、５個以上のフラッシュメモリ１１２２を含んでいてもよい。
【００７７】
図８及び図９の演算部５４２の構成は一例に過ぎず、演算部５４２の構成は、演算の種類に応じて変化する。演算部５４２が行う演算は、所定のパターンで指定されたデータを抽出する処理であってもよい。
【００７８】
図１０の演算部５４２の構成は一例に過ぎず、演算回路の個数は、ＳＳＤ又は情報処理装置の用途又は条件に応じて変化する。演算部５４２は、３個以上の異なる演算をそれぞれ行う３個以上の演算回路を含んでいてもよい。
【００７９】
図６のフローチャートは一例に過ぎず、ＳＳＤ又は情報処理装置の構成又は条件に応じて一部の処理を省略又は変更してもよい。図７の動作シーケンスは一例に過ぎず、ＳＳＤ又は情報処理装置の構成又は条件に応じて別の動作が行われることもある。
【００８０】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【符号の説明】
【００８１】
１０１  ＣＰＵ
１０２  ストレージ
２０１、４０１、５１２、１１１１  ＳＳＤ
２１１、３２１、５３１、１１２１  フラッシュメモリコントローラ
２１２−１〜２１２−４、３２２−１〜３２２−４、５３２−１、５３２−２、１１２２−１〜１１２２−４  フラッシュメモリ
２２１、３３１、４１１、５４１、１１３１  ホストＩＦ
２２２  ＤＲＡＭ
２２３  プロセッサ
２２４−１、２２４−２、３３２−１、３３２−２、５４３、１１３３−１、１１３３−２  フラッシュメモリＩＦ
３０１、５１１  ホスト装置
３１１  アプリケーション
３１２  ライブラリ
４１２、５４２、１１３２−１、１１３２−２  演算部
４１３  メモリＩＦ
４１４  メモリ
５０１、１１０１  情報処理装置
５１２  制御部
８０１  キーワードレジスタ
８０２  比較回路
８０３、９０２  バッファ
８１１  キーワード
８１２、９１１  データ
８１３  検索結果
９０１  統計演算回路
９０３  結果レジスタ
９１２  統計演算結果
１００１−１、１００１−２  演算回路
【図１】
2018005686.tif 000003
【図２】
2018005686.tif 000004
【図３】
2018005686.tif 000005
【図４】
2018005686.tif 000006
【図５】
2018005686.tif 000007
【図６】
2018005686.tif 000008
【図７】
2018005686.tif 000009
【図８】
2018005686.tif 000010
【図９】
2018005686.tif 000011
【図１０】
2018005686.tif 000012
【図１１】
2018005686.tif 000013