(57)【特許請求の範囲】
【請求項１】
行列を形成する要素データを格納する第１記憶部及び第２記憶部と、
異なる属性を有する複数の要素データを含む行データを順次取得し、取得した各前記行データの前記要素データが連続するように並べて前記第１記憶部に順次格納し、前記第１記憶部における前記行データの格納状態が所定条件を満たした場合、前記第１記憶部に格納された複数の行データを読み出し、読み出した複数の行データの前記要素データを属性毎にまとめた列データに含まれる要素データが連続するように並べて前記第２記憶部に格納する格納管理部と、
前記第１記憶部に格納された各前記行データに含まれる所定属性の要素データを前記行データ毎に読み出し、各前記行データに含まれる前記所定属性の要素データを用いて前記行データに含まれる前記所定属性の要素データに関する情報を算出する行形式演算を行う第１演算部と、
前記第２記憶部に格納された前記所定属性に対応する前記列データに含まれる要素データを読み出し、前記列データに含まれる前記所定属性の要素データを用いて前記列データに含まれる前記所定属性の要素データに関する情報を算出する列形式演算を行う第２演算部と、
前記行形式演算の結果及び前記列形式演算の結果を用いて、前記第１記憶部及び前記第２記憶部に格納された前記要素データに基づく演算処理を行う統括演算部と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記格納管理部は、前記第１記憶部から読み出した前記行データを前記第２記憶部に格納する場合、前記第２記憶部に既に存在する前記行データと前記第１記憶部から読み出した前記行データとを統合して前記第２記憶部に格納することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１記憶部は、前記第２記憶部の特定の領域であることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
演算処理装置及び記憶装置を有する情報処理システムであって、
前記記憶装置は、
行列を形成する要素データを格納する第１記憶部及び第２記憶部と、
前記第１記憶部に格納された異なる属性を有する複数の要素データを含む各行データに含まれる所定属性の要素データを前記行データ毎に読み出し、各前記行データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する行形式演算を行う第１演算部と、
前記第２記憶部に格納された前記要素データを属性毎にまとめた列データのうち、前記所定属性に対応する前記列データに含まれる要素データを読み出し、前記列データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する列形式演算を行う第２演算部とを備え、
前記演算処理装置は、
前記行データを順次取得し、取得した各前記行データの前記要素データが連続するように並べて前記第１記憶部に順次格納し、前記第１記憶部における前記行データの格納状態が所定条件を満たした場合、前記第１記憶部に格納された複数の行データを読み出し、読み出した複数の行データの前記要素データを属性毎にまとめた列データに含まれる要素データが連続するように並べて前記第２記憶部に格納する格納管理部と、
前記行形式演算の結果及び前記列形式演算の結果を用いて、前記第１記憶部及び前記第２記憶部に格納された前記要素データに基づく演算処理を行う統括演算部とを備えた
ことを特徴とする情報処理システム。
【請求項５】
異なる属性を有する複数の要素データを含む行データを順次取得し、取得した各前記行データの前記要素データが連続して読み出せるように並べて第１記憶部に順次格納し、
前記第１記憶部に格納された前記行データの数が所定数を超えた場合、前記第１記憶部に格納された複数の行データを読み出し、
読み出した複数の行データの前記要素データを属性毎にまとめた列データに含まれる要素データが連続するように並べて第２記憶部に格納し、
前記第１記憶部に格納された各前記行データに含まれる所定属性の要素データを前記行データ毎に読み出し、各前記行データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する行形式演算を行い、
前記第２記憶部に格納された前記所定属性に対応する前記列データに含まれる要素データを読み出し、前記列データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する列形式演算を行い、
前記行形式演算の結果及び前記列形式演算の結果を用いて、前記第１記憶部及び前記第２記憶部に格納された前記要素データに基づく演算処理を行う
処理をコンピュータに実行させることを特徴とする情報処理方法。
【請求項６】
異なる属性を有する複数の要素データを含む行データを順次取得し、取得した各前記行データの前記要素データが連続して読み出せるように並べて第１記憶部に順次格納し、
前記第１記憶部に格納された前記行データの数が所定数を超えた場合、前記第１記憶部に格納された複数の行データを読み出し、
読み出した複数の行データの前記要素データを属性毎にまとめた列データに含まれる要素データが連続するように並べて第２記憶部に格納し、
前記第１記憶部に格納された各前記行データに含まれる所定属性の要素データを前記行データ毎に読み出し、各前記行データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する行形式演算を行い、
前記第２記憶部に格納された前記所定属性に対応する前記列データに含まれる要素データを読み出し、前記列データに含まれる前記所定属性の読み出した要素データを用いて前記所定属性の要素データに関する情報を算出する列形式演算を行い、
前記行形式演算の結果及び前記列形式演算の結果を用いて、前記第１記憶部及び前記第２記憶部に格納された前記要素データに基づく演算処理を行う
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムに関する。
【背景技術】
【０００２】
近年、データをＣＰＵ（Central  Processing  Unit）に移動して計算するのではなく、データの近傍で計算し、その計算結果をＣＰＵに渡すデータ近傍演算（Near  data  processing）と呼ばれる演算手法が注目されている。データ近傍演算を導入することで、データ移動コストを削減してシステムを高速化することが可能となる。
【０００３】
ここで、データを格納する記憶装置としてＳＳＤ（Solid  State  Drive）を用いる場合で説明する。ＳＳＤは、記憶媒体としてフラッシュメモリを有し、そのフラッシュメモリに対する読み書きを行う制御機構としてフラッシュメモリコントローラを有する。
【０００４】
さらに、ＳＳＤには、ウェアレベリング及びガベージコレクションを実行するハードウェアを有する従来型ＳＳＤと、ソフトウェアによりウェアレベリング及びガベージコレクションを実行するソフト定義型ＳＳＤが存在する。従来型ＳＳＤは、フラッシュメモリコントローラの中に、ウェアレベリング及びガベージコレクションの実行を制御するプロセッサ及びＤＲＡＭ（Dynamic  Random  Access  Memory）を備える。これに対して、ソフト定義型ＳＳＤは、例えば、ＣＰＵにより実行されたアプリケーションが物理情報を管理し、ウェアレベリング及びガベージコレクションの実行を制御する。
【０００５】
従来型ＳＳＤは、独立したプロセッサ及びＤＲＡＭをフラッシュメモリコントローラが有し、そのプロセッサがデータの格納を管理する。そのため、アプリケーションによるデータの読み出し及び書き込みの効率を考慮したデータのフラッシュメモリへの格納は困難である。これに対して、ソフト定義型ＳＳＤでは、ＣＰＵがデータの格納場所の管理などを行うため、データのフラッシュメモリへの分散配置などによる効率的なデータ格納が可能であり、高スループット及び低レイテンシを実現する高速処理が可能となる。
【０００６】
上述したデータ近傍演算をＳＳＤに導入する場合、従来型ＳＳＤでは、フラッシュメモリコントローラが有する既存のプロセッサ及びＤＲＡＭを用いて演算を行うことができる。これに対して、ソフト定義型ＳＳＤでは、フラッシュメモリコントローラ内のフラッシュメモリＩＦ（Interface）とホストＩＦとの間に、データ近傍演算用の演算回路が配置される。この場合、データの読み込み時及び書き込み時には、従来通りフラッシュメモリＩＦとホストＩＦとの間でデータ転送が行われる。一方、演算時には、フラッシュメモリから読み出されたデータは演算回路に送られ、演算回路が演算を行い、ホストＩＦ経由で演算結果をＣＰＵへ転送する。
【０００７】
なお、フラッシュメモリを用いた技術として、書き込み時及び読み込み時にローカルメモリに一時的にデータを格納し、書き込みデータに対し縦方向と横方向のＥＣＣコードを付加してフラッシュメモリに格納する従来技術がある。また、追加のエラー訂正コードを一時的に揮発性メモリに格納し、書き込みデータはフラッシュメモリに格納し、条件を満たした場合に追加のエラー訂正コードを削除する従来技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１３−２０５８５３号公報
【特許文献２】特開２０１４−１８２８３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ソフト定義型ＳＳＤにおいて、データベースなどの行列を構成するデータの集約処理を行う場合、効率的なデータ格納を考慮して列毎にまとめて保存することが多い。より具体的には、フラッシュメモリのページ毎に１列のデータが格納される。これは、行列を構成するデータの場合は列方向にデータの属性が与えられ、列毎のデータに対する統計処理などを行うことが多く行われるためである。
【００１０】
これに対して、行列を構成するデータの場合は行方向に各属性を有するデータの集まりを統合する情報が与えられるため、データの追加は行単位で行われることが多い。すなわち、データを追加する場合、全ての列のデータが追加されることになる。
【００１１】
そのため、行列を構成するデータを列毎にまとめて保存した場合、データの追加を行うには、各ページで書き換えが発生する。例えば、遺伝子変異データベースでは、およそ２０００万列のデータが取り扱われるので、データの追加には２０００万箇所の書き換えが行われる。その上、フラッシュメモリは上書きを許さないため、各ページにおいて、データを消去後書き込む処理が行われる。これには、上書き対象のデータを有するページのデータを無効にして、他のページに新たにデータを書き込む処理も含まれる。ここで、フラッシュメモリでは消去単位は数ＭＢである。そのため、行列を構成するデータを保存するＳＳＤにおいて、１回のデータ追加につき、例えば数ＭＢを列数で乗算したサイズのデータの書き換えが行われる。例えば、２０００万列を有する遺伝子変異データベースであれば、１回のデータの追加につき、１９ＴＢ程度のデータの書き換えが行われる。このように、ソフト定義型ＳＳＤでは、行列を構成するデータを格納した場合、多数の列を有するデータの場合、データの追加に膨大な時間がかかってしまうおそれがある。
【００１２】
さらに、フラッシュメモリには書き換え回数の制限が存在する。例えば、ＴＬＣ（Triple  Level  Cell）  ＮＡＮＤ（Not  AND）型フラッシュメモリの場合、書き換え回数の制限は数百回である。そのため、行列を構成するデータを保存するＳＳＤにおいて、各行を格納するページそれぞれを、データの追加のたびに消去及び書き込みを行うとすぐに書き換え回数の制限に達してしまいフラッシュメモリの寿命が来るため、データの追加をできる回数が少なくなってしまう。
【００１３】
書き込み時及び読み込み時にローカルメモリに一時的にデータを格納する従来技術を用いても、行列を構成するデータを列毎にまとめて保存した場合、データ追加時の各ページに対する消去及び書き込みは発生する。また、追加のエラー訂正コードを一時的に揮発性メモリに格納する従来技術を用いても、行列を構成するデータを列毎にまとめて保存した場合、データ追加時に各ページに対する消去及び書き込みが発生する。そのため、いずれの従来技術を用いても、フラッシュメモリなどの記憶素子に対するデータの追加の時間短縮及び書き込み回数の削減といった効率的な記憶素子の使用は困難である。
【００１４】
開示の技術は、上記に鑑みてなされたものであって、記憶素子を効率的に使用する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムの一つの態様において、第１記憶部及び第２記憶部は、行列を形成する要素データを格納する。格納管理部は、異なる属性を有する複数の要素データを含む行データを順次取得し、取得した各前記行データの前記要素データが連続するように並べて前記第１記憶部に順次格納する。さらに、格納管理部は、前記第１記憶部における前記行データの格納状態が所定条件を満たした場合、前記第１記憶部に格納された複数の行データを読み出す。そして、格納管理部は、読み出した複数の行データの前記要素データを属性毎にまとめた列データに含まれる要素データが連続するように並べて前記第２記憶部に格納する。第１演算部は、前記第１記憶部に格納された各前記行データに含まれる所定属性の要素データを前記行データ毎に読み出し、各前記行データに含まれる前記所定属性の要素データを用いて前記所定属性の要素データに関する情報を算出する行形式演算を行う。第２演算部は、前記第２記憶部に格納された前記所定属性に対応する前記列データに含まれる要素データを読み出し、前記列データに含まれる前記所定属性の読み出した要素データを用いて前記所定属性の要素データに関する情報を算出する列形式演算を行う。統括演算部は、前記行形式演算の結果及び前記列形式演算の結果を用いて、前記第１記憶部及び前記第２記憶部に格納された前記要素データに基づく演算処理を行う。
【発明の効果】
【００１６】
１つの側面では、本発明は、記憶素子を効率的に使用することができる。
【図面の簡単な説明】
【００１７】
【図１】図１は、実施例１に係る情報処理装置の構成図である。
【図２】図２は、遺伝子変異を説明するための図である。
【図３】図３は、遺伝子変異データベースを説明するための図である。
【図４】図４は、疾患表の一例を表す図である。
【図５】図５は、遺伝子変異と病気との関係に関する統計処理を説明するための図である。
【図６】図６は、サーバのブロック図である。
【図７】図７は、フラッシュメモリに格納されたデータを用いる演算コマンドが発行された場合のシーケンス図である。
【図８】図８は、ＤＲＡＭに格納されたデータを用いる演算コマンドが発行された場合のシーケンス図である。
【図９】図９は、ホストインタフェースによるコマンド処理のフローチャートである。
【図１０】図１０は、データの移動処理のフローチャートである。
【図１１】図１１は、実施例２に係る情報処理装置の構成図である。
【発明を実施するための形態】
【００１８】
以下に、本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理システム、情報処理方法及び情報処理プログラムが限定されるものではない。
【実施例１】
【００１９】
図１は、実施例１に係る情報処理装置の構成図である。図１に示すように、本実施例に係る情報処理装置３は、ＳＳＤ１及びサーバ２を有する。ここでは、取り扱うデータとして、行列を形成するデータを例に説明する。また、ここでは、行列を形成するデータの１行のデータをまとめたものを「行データ」という。また、１列のデータをまとめたものを「列データ」という。この行列を形成する個々のデータが、「要素データ」の一例にあたる。さらに、本実施例で取り扱う行列を形成するデータは、列方向に同じ属性を有するデータが配置される。そして、行方向は、各属性のデータを有する対象を表す。
【００２０】
ＳＳＤ１は、フラッシュメモリコントローラ１０、フラッシュメモリ１３０及びＤＲＡＭ１４０を有する。
【００２１】
フラッシュメモリ１３０は、不揮発性記憶素子であるＮＡＮＤ型フラッシュメモリである。フラッシュメモリ１３０は、図１では４つ記載したが、実際には数に特に制限は無い。また、フラッシュメモリ１３０の数に応じて、フラッシュメモリインタフェース１１２及び列形式演算回路１１１が配置される。フラッシュメモリ１３０は、ＮＡＮＤ型フラッシュメモリである。フラッシュメモリ１３０は、上書き動作は行えず、上書きの場合、既存のデータを無効にして、他の領域に新たなデータが書き込まれる。また、フラッシュメモリ１３０では、データの読み出し及び書き込みは複数のビット単位であるページ単位で行われる。また、フラッシュメモリ１３０では、データの消去は複数のページをまとめたブロック単位で行われる。このフラッシュメモリ１３０が、「第２記憶部」の一例にあたる。
【００２２】
ＤＲＡＭ１４０は、揮発性記憶素子である。ＤＲＡＭ１４０は、図１では１つ記載したが、要求されるデータの格納量に応じて複数配置されてもよい。また、ＤＲＡＭ１４０の数に応じて、ＤＲＡＭインタフェース１２２及び行形式演算回路１２１が配置される。このＤＲＡＭ１４０が、「第１記憶部」の一例にあたる。
【００２３】
フラッシュメモリコントローラ１０は、ホストインタフェース１０１、列形式演算回路１１１、フラッシュメモリインタフェース１１２、行形式演算回路１２１及びＤＲＡＭインタフェース１２２を有する。
【００２４】
ホストインタフェース１０１は、サーバ２との間の通信おにける入出力を制御するインタフェースである。ホストインタフェース１０１は、サーバ２のＣＰＵ２２からコマンドの入力を受ける。そして、ホストインタフェース１０１は、入力されたコマンドの処理対象が、フラッシュメモリ１３０に格納されたデータかＤＲＡＭ１４０に格納されたデータかを判定する。次に、ホストインタフェース１０１は、入力されたコマンドが演算の実行を指示する演算コマンドか、又はデータの読み出しを指示する読出コマンドもしくはデータの書き込みを指示する書込コマンドかを判定する。
【００２５】
そして、入力されたコマンドがフラッシュメモリ１３０に格納されたデータを処理対象とし且つ演算コマンドの場合、ホストインタフェース１０１は、データの転送先を列形式演算回路１１１に設定する。これに対して、入力されたコマンドがフラッシュメモリ１３０に格納されたデータを処理対象とし且つ読出コマンドの場合、ホストインタフェース１０１は、データの転送先をホストインタフェース１０１に設定する。また、書込コマンドの場合の応答は書き込みの完了通知であるので、特に転送先の設定は行わなくても応答の通知先はホストインタフェース１０１となる。以下では、演算コマンド、読出コマンド及び書込コマンドのそれぞれを区別しない場合は、まとめて単に「コマンド」という。次に、ホストインタフェース１０１は、コマンドが処理対象として指定したデータを格納するフラッシュメモリ１３０を管理するフラッシュメモリインタフェース１１２にコマンドを発行する。
【００２６】
その後、入力されたコマンドが読出コマンドの場合、ホストインタフェース１０１は、フラッシュメモリ１３０から読み出されたデータの入力をフラッシュメモリインタフェース１１２から受ける。これに対して、入力されたコマンドが演算コマンド又は書込コマンドの場合、ホストインタフェース１０１は、この時点では応答の入力は受けない。次に、いずれのコマンドの場合にも、ホストインタフェース１０１は、完了通知をフラッシュメモリインタフェース１１２から受ける。入力されたコマンドが読出コマンド又は書込コマンドの場合、ホストインタフェース１０１は、データ転送処理を終了する。
【００２７】
これに対して、入力されたコマンドが演算コマンドであれば、ホストインタフェース１０１は、コマンドにより指定されたデータを用いて実行された列形式演算の演算結果の入力を列形式演算回路１１１から受ける。そして、ホストインタフェース１０１は、取得した演算結果をサーバ２のＣＰＵ２２へ送信する。
【００２８】
一方、入力されたコマンドがＤＲＡＭ１４０に格納されたデータを処理対象とし且つ演算コマンドの場合、ホストインタフェース１０１は、データの転送先を行形式演算回路１２１に設定する。これに対して、入力されたコマンドがＤＲＡＭ１４０に格納されたデータを処理対象とし且つ読出コマンドの場合、ホストインタフェース１０１は、データの転送先をホストインタフェース１０１に設定する。次に、ホストインタフェース１０１は、ＤＲＡＭインタフェース１２２にコマンドを発行する。
【００２９】
その後、入力されたコマンドが読出コマンドの場合、ホストインタフェース１０１は、ＤＲＡＭ１４０から読み出されたデータの入力をＤＲＡＭインタフェース１２２から受ける。これに対して、入力されたコマンドが演算コマンド又は書込コマンドの場合、ホストインタフェース１０１は、この時点では応答の入力は受けない。次に、いずれのコマンドの場合にも、ホストインタフェース１０１は、完了通知をフラッシュメモリインタフェース１１２から受ける。入力されたコマンドが読出コマンド又は書込コマンドの場合、ホストインタフェース１０１は、データ転送処理を終了する。
【００３０】
これに対して、入力されたコマンドが演算コマンドであれば、ホストインタフェース１０１は、コマンドにより指定されたデータを用いて実行された行形式演算の演算結果の入力を行形式演算回路１２１から受ける。そして、ホストインタフェース１０１は、取得した演算結果をサーバ２のＣＰＵ２２へ送信する。
【００３１】
なお、コマンドによっては処理対象のデータの格納先がフラッシュメモリ１３０及びＤＲＡＭ１４０の双方に亘ることがある。その場合、ホストインタフェース１０１は、上述した処理対象のデータの格納先がフラッシュメモリ１３０及びＤＲＡＭ１４０の場合の処理を並行して行う。
【００３２】
列形式演算回路１１１は、ＣＰＵ２２が発行したコマンドがフラッシュメモリ１３０に格納されたデータを処理対象とし且つ演算コマンドの場合、コマンドで指定されたデータの入力をフラッシュメモリインタフェース１１２から受ける。この場合、列形式演算回路１１１は、列形式でフラッシュメモリ１３０に格納されたデータを取得する。すなわち、列形式演算回路１１１は、１列分のデータをまとめて取得する。そして、列形式演算回路１１１は、取得したデータを用いて列形式演算を行う。その後、列形式演算回路１１１は、列形式演算の演算結果をホストインタフェース１０１へ出力する。この列形式演算回路１１１が、「第２演算部」の一例にあたる。
【００３３】
ここで、列形式演算について説明する。ここでは、遺伝子変異を表すデータがフラッシュメモリ１３０及びＤＲＡＭ１４０に格納される場合を例に説明する。図２は、遺伝子変異を説明するための図である。図３は、遺伝子変異データベースを説明するための図である。図４は、疾患表の一例を表す図である。図５は、遺伝子変異と病気との関係に関する統計処理を説明するための図である。
【００３４】
図２では、対象Ｐ１の遺伝子配列２１１及び対象Ｐ２の遺伝子配列２１２を含むサンプルの情報が示される。遺伝子配列２１１及び２１２は、Ａ，Ｃ，Ｇ及びＴで表される塩基の組を有する。そして、遺伝子配列２１１及び２１２には、例えば、変異箇所ＧＶ＃１及びＧＶ＃２を含む遺伝子変異が発生する箇所が２０００万個所含まれる。この遺伝子変異と病気との関連性を特定することで、その情報が病気の治療に役立てられる。以下では、２０００万の変異箇所ＧＶ＃１〜ＧＶ＃Ｎ（Ｎ＝２０００万）及び対象Ｐ１〜ＰＭ（Ｍ＝１０万）を用いて説明する。
【００３５】
この場合、各対象Ｐ１〜ＰＭの変異箇所ＧＶ＃１〜ＧＶ＃Ｎのデータをまとめたデータベースは、図３に示す遺伝子変異データベース２２０として表される。そして、遺伝子変異と病気との関係に着目する場合、どの遺伝子変異がどのような病気に関連するかを特定することが好ましい。そこで、遺伝子変異毎に存在する塩基の組の個数を求め、病気との関連性を特定することになる。例えば、図４に示す疾患表２２１のように、各対象Ｐ１〜ＰＭが、病気Ｘ又はＹに罹患しているか否かの情報が存在する。その場合、図５に示した統計テーブル２２２に示すように、変異箇所ＧＶ＃１に含まれる各塩基の組の出現回数と、病気Ｘに罹患していて且つその塩基の組を有する数とを比較することで、変異箇所Ｇ１＃１における塩基の組と病気Ｘとの関係が特定される。
【００３６】
そこで、このような遺伝子変異と病気との関連性の特定処理を行うために、列形式演算回路１１１は、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組の出現回数を数える集約処理を行う。その場合、列形式演算回路１１１は、フラッシュメモリ１３０に格納された遺伝子変異データベース２２０を構成するデータを用いる。ここで、フラッシュメモリ１３０には、列形式で遺伝子変異データベース２２０を構成するデータが格納される。すなわち、変異箇所ＧＶ＃１〜ＧＶ＃Ｎ毎、言い換えれば遺伝子変異データベース２２０の列毎に、それらのデータを格納するフラッシュメモリ１３０の複数のページが割り当てられる。例えば、フラッシュメモリ１３０の中の所定の複数のページに、遺伝子変異データベース２２０の１列目の列データである変異箇所ＧＶ＃１の情報が格納される。そして、フラッシュメモリ１３０からのデータの読み出しはページ単位で行われるので、列形式演算回路１１１は、遺伝子変異データベース２２０の列データ、すなわち変異箇所ＧＶ＃１〜＃Ｎ毎にまとめてデータをフラッシュメモリインタフェース１１２から取得する。そのため、列形式演算回路１１１は、取得した各列データにおける各塩基の組をカウントすることで、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎの各塩基の組の出現回数を求めることができる。
【００３７】
このように、列データを取得して、その列データに含まれるデータを用いてその列データに関する情報を算出する演算が、列形式演算である。列形式演算回路１１１は、列形式演算を行う場合、他のタイミングで取得される他の列データを用いることなく、取得した列データで演算を完了できるので迅速に演算処理を行うことができる。この列形式演算が、「第２演算」の一例にあたる。
【００３８】
図１に戻って説明を続ける。フラッシュメモリインタフェース１１２は、フラッシュメモリ１３０に格納されたデータを処理対象とするコマンドの入力をホストインタフェース１０１から受ける。そして、フラッシュメモリインタフェース１１２は、書込コマンドの場合、フラッシュメモリ１３０にコマンドで指定されたデータを書き込む。その後、フラッシュメモリインタフェース１１２は、データ書き込みの完了通知をホストインタフェース１０１へ出力する。
【００３９】
一方、読出コマンドの場合、フラッシュメモリインタフェース１１２は、コマンドで指定されたデータをフラッシュメモリ１３０から読み出す。次に、フラッシュメモリインタフェース１１２は、コマンドに設定されたデータの転送先がホストインタフェース１０１であることを確認する。そして、フラッシュメモリインタフェース１１２は、読み出したデータをホストインタフェース１０１へ送信する。その後、フラッシュメモリインタフェース１１２は、指定されたデータの全ての読み出しが完了すると、データ読み出しの完了通知をホストインタフェース１０１へ出力する。
【００４０】
これに対して、演算コマンドの場合、フラッシュメモリインタフェース１１２は、コマンドで指定されたデータをフラッシュメモリ１３０から読み出す。フラッシュメモリインタフェース１１２は、フラッシュメモリ１３０からページ単位でデータを読み出す。例えば、上述した遺伝子変異データベース２２０を使用した病気との関連性の特定処理の場合、フラッシュメモリインタフェース１１２は、遺伝子変異データベース２２０の複数の列データの読み出しを指示される。そこで、フラッシュメモリインタフェース１１２は、各列データを格納するページからデータを読み出すことで、列データをまとめて読み出すことができる。
【００４１】
次に、フラッシュメモリインタフェース１１２は、コマンドに設定されたデータの転送先が列形式演算回路１１１であることを確認する。そして、フラッシュメモリインタフェース１１２は、読み出したデータを列形式演算回路１１１へ送信する。その後、フラッシュメモリインタフェース１１２は、指定されたデータの全ての読み出しが完了すると、データ読み出しの完了通知をホストインタフェース１０１へ出力する。
【００４２】
行形式演算回路１２１は、ＣＰＵ２２が発行したコマンドがＤＲＡＭ１４０に格納されたデータを処理対象とし且つ演算コマンドの場合、コマンドで指定されたデータの入力をＤＲＡＭインタフェース１２２から受ける。この場合、行形式演算回路１２１は、行形式でＤＲＡＭ１４０に格納されたデータを取得する。すなわち、行形式演算回路１２１は、各行に含まれるコマンドで指定された属性のデータを順次取得する。そして、行形式演算回路１２１は、取得したデータを用いて行形式演算を行う。その後、行形式演算回路１２１は、行形式演算の演算結果をホストインタフェース１０１へ出力する。この行形式演算回路１２１が、「第１演算部」の一例にあたる。
【００４３】
ここで、図２〜５で表される遺伝子変異と病気との関連性の特定処理を例に、行形式演算について説明する。図２〜５で表される遺伝子変異と病気との関連性の特定処理を行うために、行形式演算回路１２１は、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組の出現回数を数える集約処理を行う。その場合、行形式演算回路１２１は、ＤＲＡＭ１４０に格納された遺伝子変異データベース２２０を構成するデータを用いる。ここで、ＤＲＡＭ１４０には、行形式で遺伝子変異データベース２２０を構成するデータが格納される。すなわち、対象Ｐ１〜ＰＭ毎に並んだ状態、言い換えれば遺伝子変異データベース２２０の行毎に並んだ状態でＤＲＡＭ１４０にデータが格納される。例えば、ＤＲＡＭ１４０の特定アドレスから連続するアドレス領域に、遺伝子変異データベース２２０の１行目の行データである対象Ｐ１の情報が格納される。そして、ＤＲＡＭ１４０からのデータの読み出しは指定されたアドレスから読み出しが行われるので、行形式演算回路１２１は、遺伝子変異データベース２２０の行データ、すなわち対象Ｐ１〜ＰＭのそれぞれにおける変異箇所ＧＶ＃１〜ＧＶ＃Ｎのデータを順次取得する。そのため、行形式演算回路１２１は、各列データに含まれる変異箇所ＧＶ＃１〜ＧＶ＃Ｎを取得する毎に、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組をカウントすることになる。このカウントを繰り返すことで、行形式演算回路１２１は、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎの各塩基の組の出現回数を求めることができる。
【００４４】
このように、行データに含まれる情報を順次取得して、各列データに関する情報を算出する演算が、行形式演算である。行形式演算回路１２１は、行形式演算を行う場合、他のタイミングで取得される他の行データに含まれるデータを用いる。そのため、行形式演算回路１２１は、ＤＲＡＭ１４０に格納される全ての行データに含まれるデータの取得を待って演算を完了させるため、演算処理が列形式演算に比べて煩雑になる。この行形式演算が、「第１演算」の一例にあたる。
【００４５】
図１に戻って説明を続ける。ＤＲＡＭインタフェース１２２は、ＤＲＡＭ１４０に格納されたデータを処理対象とするコマンドの入力をホストインタフェース１０１から受ける。そして、ＤＲＡＭインタフェース１２２は、書込コマンドの場合、ＤＲＡＭ１４０にコマンドで指定されたデータを書き込む。その後、ＤＲＡＭインタフェース１２２は、データ書き込みの完了通知をホストインタフェース１０１へ出力する。
【００４６】
一方、読出コマンドの場合、ＤＲＡＭインタフェース１２２は、コマンドで指定されたデータをＤＲＡＭ１４０から読み出す。次に、ＤＲＡＭインタフェース１２２は、コマンドに設定されたデータの転送先がホストインタフェース１０１であることを確認する。そして、ＤＲＡＭインタフェース１２２は、読み出したデータをホストインタフェース１０１へ送信する。その後、ＤＲＡＭインタフェース１２２は、指定されたデータの全ての読み出しが完了すると、データ読み出しの完了通知をホストインタフェース１０１へ出力する。
【００４７】
これに対して、演算コマンドの場合、ＤＲＡＭインタフェース１２２は、コマンドで指定されたデータをＤＲＡＭ１４０から読み出す。ＤＲＡＭインタフェース１２２は、ＤＲＡＭ１４０に格納されたデータを先頭から順に検索し、指定されたアドレスからデータを読み出す。例えば、上述した遺伝子変異データベース２２０を使用した病気との関連性の特定処理の場合、ＤＲＡＭインタフェース１２２は、遺伝子変異データベース２２０の複数の列データの読み出しを指示される。そこで、ＤＲＡＭインタフェース１２２は、列データ毎に並んで格納されたデータから指定されたデータを特定して読み出す。ＤＲＡＭインタフェース１２２は、ＤＲＡＭ１４０に格納された全ての行データに含まれるデータを読み出すことで、指定された全ての列データの読み出しを完了する。
【００４８】
次に、ＤＲＡＭインタフェース１２２は、コマンドに設定されたデータの転送先が行形式演算回路１２１であることを確認する。そして、ＤＲＡＭインタフェース１２２は、データの読み出し毎に、読み出したデータを行形式演算回路１２１へ送信する。その後、ＤＲＡＭインタフェース１２２は、指定されたデータの全ての読み出しが完了すると、データ読み出しの完了通知をホストインタフェース１０１へ出力する。
【００４９】
サーバ２は、図１に示すように、メモリ２１、ＣＰＵ２２及びハードディスク２３を有する。ハードディスク２３は、アプリケーションのプログラムやライブラリなどを保持する。ＣＰＵ２２は、ハードディスク２３に格納されたプログラムをメモリ２１上に展開して実行することでアプリケーションを動作させる。
【００５０】
図６は、サーバのブロック図である。サーバ２は、格納場所記憶部２０１、演算処理部２０２及び格納場所変更部２０３を有する。格納場所記憶部２０１の機能は、例えば、メモリ２１により実現される。また、ハードディスク２３は、演算処理部２０２及び格納場所変更部２０３の機能を実現するためのプログラムを含む各種プログラムを格納する。そして、ＣＰＵ２２は、ハードディスク２３に格納された各種プログラムを読み出して実行することで、演算処理部２０２及び格納場所変更部２０３の機能を実現する。演算処理部２０２は、例えば、ＣＰＵ２２により実行されるアプリケーションの動作により実現される。
【００５１】
演算処理部２０２は、データの読み出しの場合、読み出すデータの格納場所を格納場所記憶部２０１から取得する。そして、演算処理部２０２は、取得した格納場所からのデータの読み出しを指示する読出コマンドを生成する。次に、演算処理部２０２は、生成した読出コマンドをＳＳＤ１に発行する。その後、演算処理部２０２は、取得したデータを用いて演算処理を行う。
【００５２】
データ近傍演算を実行させる場合、演算処理部２０２は、読み出すデータの格納場所を格納場所記憶部２０１から取得する。そして、演算処理部２０２は、取得した格納場所から読み出したデータを用いた演算を指示する演算コマンドを生成する。次に、演算処理部２０２は、生成した演算コマンドをＳＳＤ１に発行する。その後、演算処理部２０２は、列形式演算の演算結果又は行形式演算の演算結果のいずれか一方もしくは双方をＳＳＤ１から受信する。そして、演算処理部２０２は、取得した演算結果を用いて演算処理を行う。
【００５３】
例えば、図２〜５で表される遺伝子変異と病気との関連性の特定処理を例に、演算処理部２０２による演算処理について説明する。ここでは、フラッシュメモリ１３０及びＤＲＡＭ１４０に分かれて遺伝子変異データベース２２０が格納されていた場合で説明する。演算処理部２０２は、列形式演算回路１１１により算出された変異箇所ＧＶ＃１〜ＧＶ＃Ｎ毎の塩基の組の出現回数及び行形式演算回路１２１により算出された変異箇所ＧＶ＃１〜ＧＶ＃Ｎ毎の塩基の組の出現回数を取得する。
【００５４】
次に、演算処理部２０２は、列形式演算回路１１１及び行形式演算回路１２１によるそれぞれの演算結果を足し合わせて、変異箇所ＧＶ＃１〜ＧＶ＃Ｎ毎の塩基の組の全体の出現回数を算出する。これにより、演算処理部２０２は、遺伝子変異データベース２２０の各データの集約処理を完了させる。
【００５５】
ここで、演算処理部２０２は、図４に示す疾患表２２１を予め有する。疾患表２２１には、対象Ｐ１〜ＰＭのそれぞれが病気Ｘ又はＹに罹患しているか否かを表す。演算処理部２０２は、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける塩基の組毎に、対象Ｐ１〜ＰＭのうちその塩基の組を有する対象の数を求める。次に、演算処理部２０２は、各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組の出現回数の全体の数と、その塩基の組を有する対象の数とを対応させて、図５に示す統計テーブル２２２を作成する。そして、演算処理部２０２は、病気毎に各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組の分布に有意差があるかどうかを統計処理により判定する。この統計処理は、「Ｘ２検定」と呼ばれる場合がある。演算処理部２０２は、病気毎に各変異箇所ＧＶ＃１〜ＧＶ＃Ｎにおける各塩基の組の分布に有意差があるかどうかの判定結果をモニタに表示するなどして情報処理装置３の操作者に通知してもよい。
【００５６】
図６に戻って説明を続ける。  データの書き込みの場合、演算処理部２０２は、書き込むデータの格納場所を決定する。そして、演算処理部２０２は、決定した格納場所に対するデータの書き込みを指示する書込コマンドを生成する。次に、演算処理部２０２は、生成した書込コマンドをＳＳＤ１へ発行する。その後、演算処理部２０２は、取得したデータを用いて演算処理を行う。また、演算処理部２０２は、データの格納場所を格納場所記憶部２０１に登録する。この演算処理部２０２が、「統括演算部」の一例にあたる。
【００５７】
格納場所変更部２０３は、格納場所記憶部２０１に登録されたデータの格納状態を監視する。そして、格納場所変更部２０３は、各データの格納場所から、ＤＲＡＭ１４０に格納された行データの数が閾値を超えたか否かを判定する。この閾値は、例えば、さらにデータを追加した場合にＤＲＡＭ１４０の容量を超えると考えられる値が設定される。
【００５８】
ＤＲＡＭ１４０に格納された行データの数が閾値を超えた場合、格納場所変更部２０３は、ＤＲＡＭ１４０に格納された全てのデータの読み出しを指示する読み出しコマンドをＳＳＤ１に対して発行する。その後、格納場所変更部２０３は、ＤＲＡＭ１４０に行形式で格納されたデータを取得する。具体的には、格納場所変更部２０３は、行列を形成する各行データに含まれるデータが行データ毎に連続して並んだ状態の行形式のデータを取得する。
【００５９】
次に、格納場所変更部２０３は、取得した行形式のデータを列形式のデータに変換する。例えば、格納場所変更部２０３は、属性毎に各行に含まれるデータを連続して並べることで列形式のデータを生成する。そして、格納場所変更部２０３は、フラッシュメモリ１３０の既存の行列を形成するデータにデータを追加させる書込コマンド、すなわち、追加する行列を形成するデータの各列データをまとめて所定のページに格納させる書込コマンドを生成する。その後、格納場所変更部２０３は、生成した書込コマンド及び列形式に変換したデータをＳＳＤ１へ発行する。
【００６０】
そして、格納場所変更部２０３は、列形式に変換したデータの格納場所を格納場所記憶部２０１に登録する。さらに、格納場所変更部２０３は、移動が完了したデータの消去をＤＲＡＭ１４０に指示する。この格納場所変更部２０３が、「格納管理部」の一例にあたる。
【００６１】
ここで、本実施例では、格納場所変更部２０３は、ＤＲＡＭ１４０に格納された行データの数が閾値を超えた場合にフラッシュメモリ１３０へのデータの移動を行った。ただし、データをＤＲＡＭ１４０からフラッシュメモリ１３０へ移行するタイミングは、他の条件を用いてもよい。例えば、格納場所変更部２０３は、ＤＲＡＭ１４０に格納されたデータの容量が所定の値を超えた場合にフラッシュメモリ１３０へのデータの移動を行ってもよい。
【００６２】
また、例えば、格納場所変更部２０３は、列形式演算回路１１１及び行形式演算回路１２１の演算時間を計測し、行形式演算回路１２１の演算時間が列形式演算回路１１１の演算時間よりも長くなった場合に、データの移動を実行してもよい。また、ＤＲＡＭ１４０に格納されデータの容量がフラッシュメモリ１３０の１ページを超えた場合に、格納場所変更部２０３は、データの移動を実行してもよい。例えば、遺伝子変異データベース２２０では対象Ｐ１〜ＰＭ毎のデータは２ビットであり、フラッシュメモリ１３０のページサイズが１６ＫｉＢの場合、格納場所変更部２０３は、６５５３６個の行データがＤＲＡＭ１４０に溜まった場合に、データの移動を行う。さらに、格納場所変更部２０３は、これらの移動実行の条件を複数組み合わせた条件をデータの移動実行の条件として用いてもよい。
【００６３】
次に、図７を参照して、フラッシュメモリ１３０に格納されたデータを用いる演算コマンドが発行された場合の処理の流れについて説明する。図７は、フラッシュメモリに格納されたデータを用いる演算コマンドが発行された場合のシーケンス図である。
【００６４】
ホストインタフェース１０１は、演算コマンドをサーバ２から受信する。そして、ホストインタフェース１０１は、演算コマンドで指定された処理対象のデータの格納場所がフラッシュメモリ１３０であることを確認する。そして、ホストインタフェース１０１は、演算コマンドをフラッシュメモリインタフェース１１２へ出力する（ステップＳ１０１）。
【００６５】
フラッシュメモリインタフェース１１２は、演算コマンドの入力をホストインタフェース１０１から受ける。そして、フラッシュメモリインタフェース１１２は、演算コマンドをフラッシュメモリ１３０に対するデータの読み出しの命令形式に変更して読出コマンドを生成し、フラッシュメモリ１３０へ出力する（ステップＳ１０２）。
【００６６】
フラッシュメモリ１３０は、読出コマンドの入力をフラッシュメモリインタフェース１１２から受ける。そして、フラッシュメモリ１３０は、読出コマンドで指定されたデータをフラッシュメモリインタフェース１１２へ出力する（ステップＳ１０３）。この場合、フラッシュメモリ１３０は、ページ単位で列データをまとめて読み出し、読み出した列データをまとめてフラッシュメモリインタフェース１１２へ出力する。その後、フラッシュメモリ１３０は、指定されたデータの出力を順次行っていく。
【００６７】
フラッシュメモリインタフェース１１２は、データの入力をフラッシュメモリ１３０から受ける。そして、フラッシュメモリインタフェース１１２は、取得した列形式のデータを列形式演算回路１１１へ出力する（ステップＳ１０４）。その後、フラッシュメモリインタフェース１１２は、フラッシュメモリ１３０から入力されるデータを列形式演算回路１１１へ順次出力していく。
【００６８】
列形式演算回路１１１は、列形式のデータの入力をフラッシュメモリインタフェース１１２から受ける。そして、列形式演算回路１１１は、列形式のデータを用いて列形式演算を実行する。列形式演算回路１１１は、入力された列形式のデータを用いて、列形式演算を順次実行していく（ステップＳ１０５）。この場合、列形式演算回路１１１は、行列を構成するデータベースの列データを取得するので、その中に含まれるデータを種類毎にカウントするなどして列形式演算を完了させることができる。
【００６９】
フラッシュメモリ１３０は、指定されたデータの最後のデータをフラッシュメモリインタフェース１１２へ出力する（ステップＳ１０６）。
【００７０】
フラッシュメモリインタフェース１１２は、読出コマンドで指定したデータのうちの最後のデータの入力をフラッシュメモリ１３０から受ける。そして、フラッシュメモリインタフェース１１２は、最後のデータを列形式演算回路１１１へ出力する（ステップＳ１０７）。
【００７１】
列形式演算回路１１１は、最後のデータの入力をフラッシュメモリインタフェース１１２から受ける。そして、列形式演算回路１１１は、最後のデータを用いて列形式演算を実行し、ステップＳ１０５の列形式演算を完了する。その後、列形式演算回路１１１は、演算結果をホストインタフェース１０１へ出力する（ステップＳ１０８）。
【００７２】
次に、図８を参照して、ＤＲＡＭ１４０に格納されたデータを用いる演算コマンドが発行された場合の処理の流れについて説明する。図８は、ＤＲＡＭに格納されたデータを用いる演算コマンドが発行された場合のシーケンス図である。
【００７３】
ホストインタフェース１０１は、演算コマンドをサーバ２から受信する。そして、ホストインタフェース１０１は、演算コマンドで指定された処理対象のデータの格納場所がＤＲＡＭ１４０であることを確認する。そして、ホストインタフェース１０１は、演算コマンドをＤＲＡＭインタフェース１２２へ出力する（ステップＳ２０１）。
【００７４】
ＤＲＡＭインタフェース１２２は、演算コマンドの入力をホストインタフェース１０１から受ける。そして、ＤＲＡＭインタフェース１２２は、演算コマンドをＤＲＡＭ１４０に対するデータの読み出しの命令形式に変更して読出コマンドを生成し、ＤＲＡＭ１４０へ出力する（ステップＳ２０２）。
【００７５】
ＤＲＡＭ１４０は、読出コマンドの入力をＤＲＡＭインタフェース１２２から受ける。そして、ＤＲＡＭ１４０は、読出コマンドで指定されたデータをＤＲＡＭインタフェース１２２へ出力する（ステップＳ２０３）。この場合、ＤＲＡＭ１４０は、行形式のデータの中から指定されたアドレスのデータを取得して読み出し、読み出したデータをＤＲＡＭインタフェース１２２へ出力することを繰り返す。
【００７６】
ＤＲＡＭインタフェース１２２は、データの入力をＤＲＡＭ１４０から受ける。そして、ＤＲＡＭインタフェース１２２は、取得したデータを行形式演算回路１２１へ出力する（ステップＳ２０４）。その後、ＤＲＡＭインタフェース１２２は、ＤＲＡＭ１４０から入力されるデータを行形式演算回路１２１へ順次出力していく。
【００７７】
行形式演算回路１２１は、データの入力をＤＲＡＭインタフェース１２２から受ける。そして、行形式演算回路１２１は、取得したデータを用いて行形式演算を実行していく（ステップＳ２０５）。この場合、行形式演算回路１２１は、行列を構成するデータベースの行データを順に取得するので、順次入力されるデータを用いて行形式演算を行っていく。
【００７８】
ＤＲＡＭ１４０は、指定されたデータの最後のデータをＤＲＡＭインタフェース１２２へ出力する（ステップＳ２０６）。
【００７９】
ＤＲＡＭインタフェース１２２は、読出コマンドで指定したデータのうちの最後のデータの入力をＤＲＡＭ１４０から受ける。そして、ＤＲＡＭインタフェース１２２は、最後のデータを行形式演算回路１２１へ出力する（ステップＳ２０７）。
【００８０】
行形式演算回路１２１は、最後のデータの入力をＤＲＡＭインタフェース１２２から受ける。そして、行形式演算回路１２１は、最後のデータを用いて行形式演算を実行し、ステップＳ２０５の行形式演算を完了する。その後、行形式演算回路１２１は、演算結果をホストインタフェース１０１へ出力する（ステップＳ２０８）。
【００８１】
次に、図９を参照して、ホストインタフェース１０１によるコマンド処理の流れについて説明する。図９は、ホストインタフェースによるコマンド処理のフローチャートである。ここでは、演算コマンド又は読出コマンドが発行された場合で説明する。
【００８２】
ホストインタフェース１０１は、コマンドをサーバ２から受信する（ステップＳ３０１）。
【００８３】
次に、ホストインタフェース１０１は、データの格納場所がＤＲＡＭ１４０か否かを判定する（ステップＳ３０２）。
【００８４】
データの格納場所がＤＲＡＭ１４０の場合（ステップＳ３０２：肯定）、ホストインタフェース１０１は、コマンドが演算コマンドか否かを判定する（ステップＳ３０３）。
【００８５】
コマンドが演算コマンドの場合（ステップＳ３０３：肯定）、ホストインタフェース１０１は、データの転送先を行形式演算回路１２１に設定する（ステップＳ３０４）。
【００８６】
次に、ホストインタフェース１０１は、演算コマンドをＤＲＡＭインタフェース１２２へ発行する（ステップＳ３０５）。
【００８７】
次に、ホストインタフェース１０１は、コマンド実行の完了通知をＤＲＡＭインタフェース１２２から取得する（ステップＳ３０６）。
【００８８】
その後、ホストインタフェース１０１は、行形式演算の演算結果を行形式演算回路１２１から取得する(ステップＳ３０７)。
【００８９】
そして、ホストインタフェース１０１は、取得した演算結果をサーバ２に送信する（ステップＳ３０８）。
【００９０】
これに対して、コマンドが演算コマンドでない、すなわち、読出コマンドの場合（ステップＳ３０３：否定）、ホストインタフェース１０１は、データの転送先をホストインタフェース１０１に設定する（ステップＳ３０９）。
【００９１】
次に、ホストインタフェース１０１は、読出コマンドをＤＲＡＭインタフェース１２２へ発行する（ステップＳ３１０）。
【００９２】
次に、ホストインタフェース１０１は、読出コマンドで指定されたデータをＤＲＡＭインタフェース１２２から取得する(ステップＳ３１１)。
【００９３】
次に、ホストインタフェース１０１は、コマンド実行の完了通知をＤＲＡＭインタフェース１２２から取得する（ステップＳ３１２）。
【００９４】
そして、ホストインタフェース１０１は、取得したデータをサーバ２に送信する（ステップＳ３１３）。
【００９５】
一方、データの格納場所がＤＲＡＭ１４０でない、すなわち、フラッシュメモリ１３０の場合（ステップＳ３０２：否定）、ホストインタフェース１０１は、コマンドが演算コマンドか否かを判定する（ステップＳ３１４）。
【００９６】
コマンドが演算コマンドの場合（ステップＳ３１４：肯定）、ホストインタフェース１０１は、データの転送先を列形式演算回路１１１に設定する（ステップＳ３１５）。
【００９７】
次に、ホストインタフェース１０１は、演算コマンドをフラッシュメモリインタフェース１１２へ発行する（ステップＳ３１６）。
【００９８】
次に、ホストインタフェース１０１は、コマンド実行の完了通知をフラッシュメモリインタフェース１１２から取得する（ステップＳ３１７）。
【００９９】
その後、ホストインタフェース１０１は、列形式演算の演算結果を列形式演算回路１１１から取得する(ステップＳ３１８)。
【０１００】
そして、ホストインタフェース１０１は、取得した演算結果をサーバ２に送信する（ステップＳ３１９）。
【０１０１】
これに対して、コマンドが演算コマンドでない、すなわち、読出コマンドの場合（ステップＳ３１４：否定）、ホストインタフェース１０１は、データの転送先をホストインタフェース１０１に設定する（ステップＳ３２０）。
【０１０２】
次に、ホストインタフェース１０１は、読出コマンドをフラッシュメモリインタフェース１１２へ発行する（ステップＳ３２１）。
【０１０３】
次に、ホストインタフェース１０１は、読出コマンドで指定されたデータをフラッシュメモリインタフェース１１２から取得する(ステップＳ３２２)。
【０１０４】
次に、ホストインタフェース１０１は、コマンド実行の完了通知をフラッシュメモリインタフェース１１２から取得する（ステップＳ３２３）。
【０１０５】
そして、ホストインタフェース１０１は、取得したデータをサーバ２に送信する（ステップＳ３２４）。
【０１０６】
次に、図１０を参照して、データの移動処理の流れについて説明する。図１０は、データの移動処理のフローチャートである。
【０１０７】
サーバ２の演算処理部２０２は、ＳＳＤ１のホストインタフェース１０１に書込コマンドを発行する（ステップＳ４０１）。この時、演算処理部２０２は、格納場所記憶部２０１に書込コマンドで指定したデータの格納場所の情報を登録する。
【０１０８】
格納場所変更部２０３は、格納場所記憶部２０１に登録された各データの格納場所の情報を用いて、ＤＲＡＭ１４０内の行数が閾値を超えたか否かを判定する（ステップＳ４０２）。ＤＲＡＭ１４０内の行数が閾値を超えていない場合（ステップＳ４０２：否定）、格納場所変更部２０３は、データの移動処理を終了する。
【０１０９】
これに対して、ＤＲＡＭ１４０内の行数が閾値を超えた場合（ステップＳ４０２：肯定）、格納場所変更部２０３は、ＤＲＡＭ１４０に格納された全データの読出コマンドをＳＳＤ１のホストインタフェース１０１に発行する（ステップＳ４０３）。
【０１１０】
その後、格納場所変更部２０３は、ＤＲＡＭ１４０に格納されていた行形式のデータを全て取得する。そして、格納場所変更部２０３は、取得した行形式のデータを列形式のデータに変換する（ステップＳ４０４）。
【０１１１】
次に、格納場所変更部２０３は、列形式のデータのフラッシュメモリ１３０への書き込みコマンドをＳＳＤ１のホストインタフェース１０１に発行する（ステップＳ４０５）。
【０１１２】
その後、格納場所変更部２０３は、データのフラッシュメモリ１３０の格納場所を格納場所記憶部２０１に登録する（ステップＳ４０６）。その後、格納場所変更部２０３は、移動が完了したデータの消去をＤＲＡＭ１４０に指示する。
【０１１３】
ここで、本実施例では、行形式のデータを格納する記憶素子としてＤＲＡＭ１４０を用いたが、他の種類の記憶素子も用いてもよい。例えば、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）やＰＣＭ（Phase  Change  Memory）といった不揮発性メモリをＤＲＡＭ１４０の代わりに用いることもできる。
【０１１４】
以上に説明したように、本実施例に係る情報処理装置は、追加される行データを行形式でＤＲＡＭに書き込んでいき、ＤＲＡＭのデータ量が所定条件を満たした場合にＤＲＡＭのデータを列形式に変換してフラッシュメモリに移動する。そして、本実施例に係る情報処理装置は、データ近傍演算を行う場合、ＤＲＡＭに格納されたデータについては行形式演算を行い、フラッシュメモリに格納されたデータについては列形式演算を行う。これにより、データの追加ごとに各列データを保持するフラッシュメモリの書き換えを行うことを回避でき、データの追加によるデータの書き込み処理を高速にすることができる。また、追加直後のデータは行形式で演算されるため、列形式で演算を行う場合よりも遅くなる可能性はあるが、データの数が少ないため、全体的な性能の低下は抑えることができる。また、フラッシュメモリの書き換え回数を削減できるので、フラッシュメモリの寿命を延ばすことができる。したがって、フラッシュメモリの効率的な使用を実現することができる。
【実施例２】
【０１１５】
図１１は、実施例２に係る情報処理装置の構成図である。本実施例に係る情報処理装置３は、フラッシュメモリ１３０の一部に行形式のデータを格納することが実施例１と異なる。本実施例に係るＳＳＤ１は、図１に示したＤＲＡＭインタフェース１２２及びＤＲＡＭ１４０を除いた構成を有する。以下の説明では、実施例１と同様の各部の動作については説明を省略する。
【０１１６】
図１１では、列形式演算回路１１１及び行形式演算回路１２１を１つずつ記載したが、これらの数に特に制限は無い。また、列形式演算回路１１１と行形式演算回路１２１とはそれぞれ経路が分離していてもよい。
【０１１７】
一部のフラッシュメモリ１３０は、一部の特定領域が予め行形式のデータの格納領域として割り当てられる。
【０１１８】
ホストインタフェース１０１は、フラッシュメモリ１３０の予め決められた所定領域に格納されたデータを用いた演算コマンドの入力を受けた場合、データの転送先を行形式演算回路１２１に設定する。そして、ホストインタフェース１０１は、演算コマンドをフラッシュメモリインタフェース１１２へ出力する。
【０１１９】
フラッシュメモリインタフェース１１２は、データを追加する場合、フラッシュメモリ１３０の予め決められた所定領域に行形式でデータを格納する。また、フラッシュメモリ１３０の予め決められた所定領域に格納されたデータを用いた演算コマンドの入力を受けた場合、フラッシュメモリインタフェース１１２は、所定領域からデータを読み出し、読み出したデータを行形式演算回路１２１へ出力する。
【０１２０】
行形式演算回路１２１は、サーバ２が演算コマンドを発行した場合、行形式でフラッシュメモリ１３０の所定領域に格納されていたデータの入力をフラッシュメモリインタフェース１１２から受ける。そして、行形式演算回路１２１は、取得した行形式のデータを用いて行形式演算を行い、演算結果をホストインタフェース１０１へ出力する。
【０１２１】
格納場所変更部２０３は、フラッシュメモリ１３０の所定領域に格納された行データの数が閾値を超えた場合、フラッシュメモリ１３０の所定領域に格納された全てのデータの読み出しを指示する読み出しコマンドをＳＳＤ１に対して発行する。その後、格納場所変更部２０３は、フラッシュメモリ１３０の所定領域に行形式で格納されていたデータを取得する。
【０１２２】
次に、格納場所変更部２０３は、取得した行形式のデータを列形式のデータに変換する。そして、格納場所変更部２０３は、フラッシュメモリ１３０に既に存在する行列を形成する列データに列形式のデータを追加させる書込コマンド、すなわち、追加する行列を形成するデータの各列データをまとめて所定のページに格納させる書込コマンドを生成する。その後、格納場所変更部２０３は、生成した書込コマンド及び列形式に変換したデータをＳＳＤ１へ発行する。
【０１２３】
そして、格納場所変更部２０３は、列形式に変換したデータの格納場所を格納場所記憶部２０１に登録する。さらに、格納場所変更部２０３は、移動が完了したデータの消去をＤＲＡＭ１４０に指示する。
【０１２４】
以上に説明したように、本実施例に係る情報処理装置は、フラッシュメモリの一部を行形式のデータの格納領域として使用する。このように、新たにＤＲＡＭを追加しなくても、フラッシュメモリの一部を使用することで、フラッシュメモリ全体の書き換え回数を削減してデータの追加処理を高速にすることができ、また、フラッシュメモリ全体の寿命を延ばすことができる。
【符号の説明】
【０１２５】
１  ＳＳＤ
２  サーバ
３  情報処理装置
１０  フラッシュメモリコントローラ
２１  メモリ
２２  ＣＰＵ
２３  ハードディスク
１０１  ホストインタフェース
１１１  列形式演算回路
１１２  フラッシュメモリインタフェース
１２１  行形式演算回路
１２２  ＤＲＡＭインタフェース
１３０  フラッシュメモリ
１４０  ＤＲＡＭ
２０１  格納場所記憶部
２０２  演算処理部
２０３  格納場所変更部
２２０  遺伝子変異データベース
２２１  疾患表
２２２  統計テーブル
【図１】
0006988231.tif 000002
【図２】
0006988231.tif 000003
【図３】
0006988231.tif 000004
【図４】
0006988231.tif 000005
【図５】
0006988231.tif 000006
【図６】
0006988231.tif 000007
【図７】
0006988231.tif 000008
【図８】
0006988231.tif 000009
【図９】
0006988231.tif 000010
【図１０】
0006988231.tif 000011
【図１１】
0006988231.tif 000012