【解決手段】本願に係る演算システムは、異なる種類の論理回路の組み合わせを変更可能な演算装置であって、追加可能な演算装置と、当該演算装置がアクセス可能な記憶装置との組を複数含む演算システムであって、前記演算装置は、前記論理回路を組み合わせることで、処理対象となる情報を示す指示情報に基づいて、自装置がアクセス可能な記憶装置が有する記憶領域のうち当該情報を格納する記憶領域のアドレスを特定する処理と、特定されたアドレスを用いて、前記記憶装置にアクセスする処理とを実行することを特徴とする。
異なる種類の論理回路の組み合わせを変更可能な演算装置であって、追加可能な演算装置と、当該演算装置がアクセス可能な記憶装置との組を複数含む演算システムであって、
前記演算装置は、前記論理回路を組み合わせることで、
処理対象となる情報を示す指示情報に基づいて、自装置がアクセス可能な記憶装置が有する記憶領域のうち当該情報を格納する記憶領域のアドレスを特定する処理と、
特定されたアドレスを用いて、前記記憶装置にアクセスする処理と
を実行することを特徴とする演算システム。
異なる種類の論理回路の組み合わせを変更可能な演算装置であって、追加可能な演算装置と、当該演算装置がアクセス可能な記憶装置との組を複数含む演算システムが実行する演算方法であって、
前記演算装置が前記論理回路を組み合わせることで、
処理対象となる情報を示す指示情報に基づいて、自装置がアクセス可能な記憶装置が有する記憶領域のうち当該情報を格納する記憶領域のアドレスを特定する処理と、
特定されたアドレスを用いて、前記記憶装置にアクセスする処理と
を実行することを特徴とする演算方法。
【発明を実施するための形態】
【0010】
以下に、本願に係る演算システムおよび演算方法を実施するための形態(以下、「実施形態」と記載する。)について図面を参照しつつ詳細に説明する。なお、この実施形態により本願に係る演算システムおよび演算方法が限定されるものではない。また、以下の各実施形態において同一の部位には同一の符号を付し、重複する説明は省略される。
【0011】
[実施形態]
〔1−1.演算システムの一例〕
まず、
図1を用いて、演算システム1が実行する演算処理の一例について説明する。なお、以下の説明では、演算システム1が複数の演算装置100a〜100e(以下、「演算装置100」と総称する場合がある。)を用いて所定の処理を実行する処理の一例について説明する。
【0012】
図1は、実施形態に係る演算システムの一例を示す図である。
図1では、演算システム1は、情報処理装置10と、複数の演算装置100を有する。
【0013】
情報処理装置10は、例えば、PC(Personal Computer)やサーバ装置等により実現される情報処理装置である。また、情報処理装置10は、各種のネットワークを介して、各演算装置100と通信可能に接続されており、各演算装置100との間で情報の送受信を行う。
【0014】
演算装置100は、以下に説明する演算処理を実行する演算装置である。ここで、演算装置100は、製造後に利用者が内部の論理回路を定義あるいは変更することができる集積回路であり、所謂PLD(Programmable Logic Device)である。より具体的には、演算装置100は、FPGA(Field-Programmable Gate Array)により実現される。また、演算装置100は、所定の記憶装置を有し、情報処理装置10から提供される情報を記憶することができる。
【0015】
〔1−2.演算処理の一例〕
図1に示す演算システム1において、各演算装置100は、所定のファイルを分割したデータを冗長性を保持した状態で管理する。そして、各演算装置100は、各演算装置ごとに保持する情報を用いた演算処理を実行し、実行結果を集約することで、所定のファイルに対する演算処理を実現する。また、各演算装置100は、このようなデータの管理および演算を、内部の論理回路を定義することにより実現する。
【0016】
例えば、情報処理装置10は、処理対象となるファイルを複数のデータA〜データCに分割する(ステップS1)。そして、情報処理装置10は、各演算装置の記憶領域に分割したデータA〜データCを冗長化した状態で分散登録する(ステップS2)。例えば、情報処理装置10は、演算装置100a、100c、100eにデータAを保持させ、演算装置100b、100c、100dにデータBを保持させ、演算装置100b、100d、100eにデータCを提供する。また、情報処理装置10は、どの演算装置100a〜100eに対してどのデータを保持させたかを示すメタデータを演算装置100fに提供する。
【0017】
このような場合、各演算装置100a〜eは、演算装置内の記憶領域にデータを保持し、キーバリュー方式によりデータの管理を実行する(ステップS3)。そして、演算装置100fは、演算装置100a〜100eが故障したか否かを判定し、いずれかの演算装置100a〜100eが故障した場合は、故障した演算装置と同じデータを他の演算装置から参照して処理を実行するように、故障していない演算装置を制御する(ステップS4)。
【0018】
例えば、データA〜データCを用いた演算処理を実行する処理の一例について説明する。例えば、マスタとなる演算装置100fは、ファイルに対する処理をデータA〜データCに対する複数のタスクA〜タスクCに分割する。また、演算装置100fは、メタデータを参照し、各演算装置100a〜100eが保持するデータを特定する。そして、演算装置100fは、特定したデータに対する処理のタスクを、各演算装置100a〜100cに対して割り当てる。このような場合、演算装置100a〜100eは、自装置の記憶装置に保持されたデータを用いて、演算装置100fから受付けたタスクを実行する。
【0019】
ここで、演算装置100fは、各演算装置100a〜100eからハートビートと呼ばれる信号を定期的に受信している。そして、演算装置100fは、例えば、演算装置100aから所定の期間の間ハードビートを受信しなくなった場合は、演算装置aが故障したと判定する。このような場合、演算装置100fは、演算装置aに実行させていたタスクを特定するとともに、演算装置aが保持していたデータAと同じデータを保持する演算装置100c、100eを特定する。そして、演算装置100fは、演算装置aに実行させていたタスクを、演算装置100cもしくは演算装置100eに実行させる。
【0020】
また、演算装置100fは、各演算装置100a〜100eによるタスクの実行結果を集約する。例えば、演算装置100fは、キーバリュー方式で実行結果を取得する。このような場合、演算装置100fは、同じキーが付与されたバリューの値を集約することで、全体としての処理結果、すなわち、データA〜データCの元となるファイルに対する所定の処理の結果を取得する。
【0021】
すなわち、演算システム1においては、各演算装置100が、内部の演算回路を定義することにより、所謂HADOOP的に処理を実行する。例えば、各演算装置100は、HDFS(Hadoop Distributed File System)やHadoop MapReduceに従って、データの保持および管理を実行する。また、各演算装置はCPU、GPU、FPGAなどの異なる複数種類を組み合わせることができ、後から追加も可能になるため、スケーラビリティの向上につながる。なお、演算システム1においては、演算装置の追加を行う際、その演算装置がアクセス可能なメモリ等の主記憶装置の追加を行ってもよく、行わずともよい。すなわち、演算システム1においては、演算装置と主記憶装置との組単位で、演算装置の追加を行ってもよく、演算装置のみの追加を行ってもよい。また、各演算装置が主記憶装置にアクセスする手法については、イリノイプロトコル等任意のプロトコルが採用可能である。
【0022】
〔2.演算装置の構成〕
以下、上記した演算処理を実現する演算装置100が有する機能構成の一例について説明する。
図2は、実施形態に係る演算装置の構成例を示す図である。
図2に示す例では、マスタとして動作する演算装置の一例について記載した。
【0023】
例えば、演算装置100は、プロセッサ110、入出力装置120、メモリコントローラ130、記憶部140およびFPGA150を有する。プロセッサ110は、演算装置100が有するプロセッサであり、例えば、ARMアーキテクチャやPOWERアーキテクチャを採用したプロセッサ若しくはマイクロプロセッサである。そして、プロセッサ110は、FPGA150と連携することで、各種の演算処理を実行する。
【0024】
例えば、プロセッサ110は、プロセッサコア111とキャッシュメモリ112とを有する。プロセッサコア111は、論理演算や四則演算を実現する所謂コアであり、ALU(Arithmetic Logic Unit)から構成される算術論理演算装置により実現される。キャッシュメモリ112は、プロセッサ110が有する補助記憶装置である。より具体的には、キャッシュメモリ112は、主記憶装置200よりもプロセッサコア111が高速にアクセスすることができる記憶装置であり、所謂キャッシュメモリである。
【0025】
入出力装置120は、演算装置100と情報処理装置10や他の演算装置100との間の通信を中継する装置であり、所謂I/O(Input Output)装置である。例えば、入出力装置120は、USB(Universal Serial Bus)、イーサーネット、SD(Secure Digital)、UART(Universal Asynchronous Receiver/Transmitter)、SPI(Serial Peripheral Interface)、I2C、GPIO(General-purpose input/output)等、各種の通信規格に沿って外部装置OAとの間の通信を制御する各種の入出力装置により実現される。
【0026】
メモリコントローラ130は、演算装置100による記憶部140へのメモリアクセスを制御する。より具体的には、メモリコントローラ130は、ページング方式により主記憶装置200に格納されたデータの読み出しや書込みを行う。
【0027】
記憶部140は、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)等の半導体メモリ素子等の記憶装置によって実現される。記憶部140は、ファイルデータベース141および演算装置データベース142が登録されている。なお、演算装置100がマスタとして動作する場合は、ファイルデータベース141は、登録されていなくともよい。また、演算装置100がスレーブとして動作する場合は、演算装置データベース142は、登録されていなくともよい。
【0028】
ファイルデータベース141は、処理対象となるファイルを分割したデータが登録される。例えば、
図3は、実施形態に係るファイルデータベースに登録される情報の一例を示す図である。なお、
図3には、記憶部140が有する記憶領域を示すアドレスと、そのアドレスが示す記憶領域に登録されるデータの一例について記載した。
【0029】
例えば、
図3に示す例では、アドレスが「アドレス#1」である記憶領域に「データ#1」が登録されている。ここで、演算装置100は、キーバリュー方式でデータの管理を行う。このため、例えば、データ#1に対応するキーの値が「キー値#1」である場合、「キー値#1」に対して所定の関数f(例えば、ハッシュ関数等)を適用した値がアドレス#1となっている。
【0030】
なお、
図3に示す例では、「アドレス#1」や、「キー値#1」といった概念的な値を記載したが、実際には、記憶領域を示す各種の数値や文字列、キー値を構成する数値や文字列等が採用されることとなる。また、
図3に示す例では、「データ#1」といった概念的な値を記載したが、実際には、処理対象となるファイルを分割したデータが登録されることとなる。
【0031】
図2に戻り、説明を続ける。演算装置データベース142は、所謂メタデータであり、各演算装置100に関する情報が登録される。例えば、
図4は、実施形態に係る演算装置データベースに登録される情報の一例を示す図である。
図4に示すように、演算装置データベース142には、「演算装置ID(Identifier)」、「マスタ情報」、「演算装置情報」、「振り分けタスク」、および「振り分けデータ」が対応付けて登録されている。
【0032】
ここで、「演算装置ID」とは、演算装置100の識別子である。「マスタ情報」とは、どの演算装置がマスタであるかを示す情報である。また、「演算装置情報」とは、対応付けられた演算装置IDが示す演算装置に関する各種の情報である。また、「振り分けタスク」とは、対応付けられた演算装置IDが示す演算装置に対して割り当てられたタスクを示す情報である。また、「振り分けデータ」とは、対応付けられた演算装置IDが示す演算装置に対して振り分けられたデータの識別子である。
【0033】
図4に示す例では、演算装置データベース142には、演算装置ID「100a」、マスタ情報「0」、演算装置情報「情報#1」、振り分けタスク「タスクA」、および振り分けデータ「データA」が対応付けて登録されている。このような情報は、例えば、演算装置ID「100a」が示す演算装置(例えば、演算装置100a)が、スレーブであり、演算装置情報が「情報#1」である旨を示す。また、このような情報は、演算装置100aに対して、「タスクA」の実行が振り分けられており、「データA」が示すデータが振り分けられている旨を示す。
【0034】
図2に戻り、説明を続ける。FPGA150は、外部装置OAから受付けたHDL(Hardware Description Language)に従って回路を構成することで、以下の機能を実現する。そして、FPGA150は、以下の機能を発揮することで、HADOOP的に、データの管理および処理を実現する。例えば、FPGA150は、取得部161、通信部162、判定部163、特定部164、および演算制御部165として動作する。
【0035】
例えば、演算装置100がスレーブとして動作する場合、取得部161は、処理対象となるデータを取得する。例えば、取得部161は、情報処理装置10から分割されたデータを取得する。より具体的には、取得部161は、キーバリュー形式で、分割されたデータを取得する。このような場合、取得部161は、キー値を所定の関数fでアドレスに変換し、記憶部140が有する記憶領域のうち変換後のアドレスが示す記憶領域にデータを格納する。
【0036】
また、例えば、演算装置100がマスタとして動作する場合、取得部161は、どの演算装置にどのデータを振り分けたかを示すメタデータを取得する。例えば、取得部161は、情報処理装置10からメタデータを取得する。このような場合、取得部161は、演算装置データベース142を記憶部140内に生成し、メタデータが示す演算装置100とその演算装置100に振り分けられたデータを示す識別子との組を、演算装置データベース142に登録する。
【0037】
通信部162は、演算装置100間の通信を制御する。例えば、演算装置100がマスタとして動作する場合、通信部162は、他の演算装置100から送信されるハートビートを受信する。また、演算装置100がスレーブとして動作する場合、通信部162は、マスタとなる演算装置100に対して所定の時間間隔でハートビートを送信する。
【0038】
判定部163は、他の演算装置に故障が生じたか否かを判定する。例えば、演算装置100がマスタとして動作する場合、判定部163は、他の演算装置100からハートビートが所定の時間間隔で受信されているか否かを判定する。そして、判定部163は、いずれかの演算装置100からハートビートが受信されなくなってから所定の時間が経過した場合は、その演算装置100が故障したと判定する。なお、演算装置100がスレーブとして動作する場合、FPGA150は、判定部163を構成せずともよい。
【0039】
特定部164は、他の演算装置に故障が生じたと判定された場合は、その演算装置100がアクセス可能な記憶装置に格納された分散情報を特定する。また、特定部164は、特定された分散情報と同じ分散情報が格納された記憶装置にアクセス可能な演算装置100を特定する。
【0040】
例えば、特定部164は、判定部163により演算装置100aが故障したと判定された場合は、演算装置データベース142を参照し、演算装置100aに対して割り当てられていたタスクと振り分けデータとを特定する。続いて、演算装置データベース142は、特定した振り分けデータと同じデータが振り分けられている演算装置であって、故障していない演算装置(例えば、演算装置100c)を特定する。なお、演算装置100がスレーブとして動作する場合、FPGA150は、特定部164を構成せずともよい。
【0041】
演算制御部165は、各演算装置100に対して振り分けられたデータを用いて、各種の演算処理を実行する。例えば、演算制御部165は、演算装置100がスレーブとして動作する場合、以下の処理を実行する。まず、演算制御部165は、処理対象となる情報を示す指示情報に基づいて、自装置がアクセス可能な記憶装置が有する記憶領域のうち当該情報を格納する記憶領域のアドレスを特定する。そして、演算制御部165は、特定されたアドレスを用いて、記憶装置にアクセスし、記憶装置に格納された分割情報を用いて、所定の演算を行う。
【0042】
例えば、演算制御部165は、演算装置100に割り当てられたタスクが処理対象とするデータのキー値を特定する。続いて、演算制御部165は、キー値を所定の関数fによりアドレスに変換し、記憶部140に登録されているデータのうち、変換後のアドレスが示す記憶領域に登録されていたデータを読み出す。そして、演算制御部165は、読み出したデータとタスクとをプロセッサ110に提供し、タスクが示す処理をプロセッサ110に実行させる。その後、演算制御部165は、プロセッサ110による演算結果をマスタとなる演算装置100へと送信する。
【0043】
一方、演算制御部165は、演算装置100がマスタとして動作する場合、以下の処理を実行する。まず、演算制御部165は、他の演算装置100による演算の結果を収集する。そして、演算制御部165は、各演算装置100による演算の結果を集約する。例えば、
図5は、実施形態に係る演算装置が演算処理の結果を集約する処理の一例を示す図である。
図5に示すように、演算制御部165は、MapReduceジョブにより、演算処理の結果を集約する。
【0044】
例えば、演算制御部165は、スレーブとなる演算装置100から受信した演算結果に対し、所定の処理を実行することで、キーバリュー形式のデータに変換するMap処理を実行する。続いて、演算制御部165は、変換後のデータを同一のキーごとに集約したデータを生成し、生成したデータに対して所定の処理を実行するReduce処理を実行する。そして、演算制御部165は、Reduce処理の結果を、分割前のファイルに対する処理の結果として出力する。
【0045】
図2に戻り、説明を続ける。また、演算制御部165は、演算装置100がマスタとして動作する場合、特定部164により特定された演算装置100に対し、故障が生じたと判定された他の演算装置100が実行していた演算を実行させる。例えば、演算制御部165は、演算装置100aが故障したと判定され、特定部164が演算装置100cを特定した場合、演算装置100cに対してタスクAを実行させる。そして、演算制御部165は、演算装置100cからタスクAの実行結果を収集し、収集したタスクAの実行結果を他のタスクの実行結果と共に集約する。
【0046】
なお、上述した例では、情報処理装置10によりファイルの分割が行われる例について記載したが、実施形態は、これに限定されるものではない。例えば、マスタとして動作する演算装置100が有するFPGA150が、ファイルの分割および割り当てを実現してもよい。
【0047】
例えば、
図6は、実施形態に係る判定処理の流れの一例を説明するシーケンス図である。なお、
図6に示す例では、演算装置100aがマスタとして動作する例について記載した。例えば、演算装置100aは、割り当て対象となる処理を複数のデータA〜Dに分割し(ステップS10)、分割した各データ、すなわち、各配列の部分を各演算装置100b〜100cに割り当てる(ステップS11)。ここで、演算装置100aは、スレーブとなる演算装置100b〜100cのみならず、マスタである演算装置100aにも、配列の割り当てを行ってもよい。
【0048】
このような場合、各演算装置100a〜100dは、それぞれ割り当てられた配列の処理を実行する。例えば、演算装置100aは、データAの合計を求める計算を実行し(ステップS12)、演算装置100bは、データBの合計を求める計算を実行し(ステップS13)、演算装置100cは、データCの合計を求める計算を実行し(ステップS14)、演算装置100dは、データDの合計を求める計算を実行する(ステップS15)。
【0049】
また、演算装置100aは、演算装置100b〜100cによる計算結果を収集する。そして、演算装置100aは、演算装置100a〜100dによる計算の結果を集約する。例えば、演算装置100aは、ステップS12〜S15による部分合計の合計を算出し(ステップS16)、処理を終了する。
【0050】
〔3.演算装置が実行するメモリアクセスの一例〕
次に、
図7を用いて、演算装置100が実行するメモリアクセスの一例について説明する。
図7は、実施形態に係る演算装置が実行するメモリアクセスの一例を示す図である。例えば、演算装置100は、
図7中(A)に示すように、キー値から算出されたアドレス「0x1000」、「0x4000」、「0x8000」、「0x1800」を記憶領域「V0」に格納する。このような場合、演算装置100は、アドレス「0x1000」が示す記憶領域に登録されたデータ「X」、「0x4000」が示す記憶領域に登録されたデータ「Z」、「0x8000」が示す記憶領域に登録されたデータ「W」、「0x1800」が示す記憶領域に登録されたデータ「Y」を読み出す。そして、演算装置100は、読み出したデータ「X」、「Z」、「W」、「Y」を記憶領域「V1」に格納する。
【0051】
また、例えば、演算装置100は、
図7中(B)に示すように、キー値から算出されたアドレス「0x1000」、「0x4000」、「0x8000」、「0x1800」を記憶領域「V2」に格納するとともに、記憶領域「V3」に、書込み対象となるデータ「X」、「Z」、「W」、「Y」を登録する。このような場合、演算装置100は、アドレス「0x1000」が示す記憶領域にデータ「X」を格納し、「0x4000」が示す記憶領域にデータ「Z」を格納し、「0x8000」が示す記憶領域にデータ「W」を格納し、「0x1800」が示す記憶領域にデータ「Y」を格納する。
【0052】
〔4.演算装置が実行する処理の流れの一例〕
次に、
図8を用いて、演算システム1が実行する処理の一例について説明する。
図8は、実施形態に係る演算システムが実行する処理の流れの一例を示すフローチャートである。例えば、演算システム1は、処理対象となるファイルを分割し(ステップS101)、分割データの保存先となる演算装置100を決定する(ステップS102)。そして、演算システム1は、分割データを冗長化して分割保存し(ステップS103)、各演算装置100が有するFPGAを用いて、分割データの分散管理を実行する(ステップS104)。
【0053】
〔5.その他〕
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、各図に示した各種情報は、図示した情報に限られない。
【0054】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0055】
例えば、
図2に示す例では、演算装置100が記憶部140を有する例について記載したが、実施形態は、これに限定されるものではない。例えば、演算装置100は、演算装置100とは個別のメモリと接続され、メモリコントローラ130を介して、メモリに対する各種のメモリアクセスを行ってもよい。
【0056】
また、上記してきた各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【0057】
〔6.効果〕
上述したように、演算システム1は、異なる種類の論理回路の組み合わせを変更可能な演算装置であって、追加可能な演算装置100と、演算装置100がアクセス可能な記憶装置(例えば、記憶部140)との組を複数含む演算システムであって、演算装置100は、論理回路を組み合わせることで、処理対象となる情報を示す指示情報に基づいて、自装置がアクセス可能な記憶装置が有する記憶領域のうち情報を格納する記憶領域のアドレスを特定する。そして、演算装置100は、特定されたアドレスを用いて、記憶装置にアクセスする。
【0058】
また、各記憶装置は、所定のファイルを分割した分割情報をそれぞれ記憶し、各演算装置100は、論理回路を組み合わせることで、自装置がアクセス可能な記憶装置に格納された分割情報を用いて、所定の演算を行い、各演算処理による所定の演算の結果を収集する。
【0059】
また、各記憶装置は、所定のファイルを分割した分割情報を冗長性を担保するように記憶する。また、マスタとして動作する演算装置100は、論理回路を組み合わせることで、他の演算装置100に故障が生じたか否かを判定し、他の演算装置100に故障が生じたと判定された場合は、その演算装置100がアクセス可能な記憶装置に格納された分散情報を特定する。また、マスタとして動作する演算装置100は、特定された分散情報と同じ分散情報が格納された記憶装置にアクセス可能な演算装置100を特定する。そして、マスタとして動作する演算装置100は、特定された演算装置100に対し、故障が生じたと判定された他の演算装置100が実行していた演算を実行させる。
【0060】
このように、演算システム1は、各演算装置100に論理回路を組み合わせることで、HADOOP的なデータの管理を実行させる。すなわち、演算システム1は、FPGAを用いてHADOOPの処理を実行させる。この、結果、演算システム1は、複数の演算装置100による処理の効率を改善することができる。
【0061】
以上、本願の実施形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の欄に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。
【0062】
また、上記してきた「部(section、module、unit)」は、「手段」や「回路」などに読み替えることができる。例えば、生成部は、生成手段や生成回路に読み替えることができる。