(57)【要約】【課題】アクセラレータ利用効率の向上とプログラミング手法の維持を可能とする演算システム、演算システムの制御方法およびプログラムを提供する。【解決手段】演算システム１００は、コマンドを受付ける入力装置１６０と、入力されたコマンドを、ＦＰＧＡアクセラレータ１４０の部分再構成領域にマッピングし、かつ、部分再構成領域間をデータパスでつなぐように制御する支援装置１７０と、を備える。支援装置１７０は、パイプ命令が発行された場合、前のコマンドを前の部分再構成領域にマッピングするとともに、後のコマンドを後の部分再構成領域にマッピングし、かつ、前後の部分再構成領域を１本ずつのデータパスによって１次元の連結となるよう接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力をＣＰＵ１１０から導入し、終端となるコマンドの出力をＣＰＵ１１０に戻す設定を行う。【選択図】図１
2018206195.tif 000002
【特許請求の範囲】
【請求項１】
ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、これらを接続するバスと、を備える演算システムであって、
コマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける入力装置と、
入力されたコマンドを、前記アクセラレータ装置の部分的な再構成可能領域である部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を備え、
前記支援装置は、
前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行い、
前記アクセラレータ装置は、
前記支援装置が設定した前記部分再構成領域のマッピングと、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続したＦＩＦＯ型のデータ構造において、全ての対象コマンドを並列に起動して処理を実行する
ことを特徴とする演算システム。
【請求項２】
前記外部記憶装置は、
前記ＣＰＵ上のコマンドまたはプログラム群を予め、前記部分再構成領域の任意の位置に導入できる形式でコンパイルして格納する
ことを特徴とする請求項１に記載の演算システム。
【請求項３】
前記支援装置は、
入力されたコマンドのコマンド名に対応する外部プログラムを呼び出すことによって、前記アクセラレータ装置に演算を指示する
ことを特徴とする請求項１に記載の演算システム。
【請求項４】
前記アクセラレータ装置は、ＦＰＧＡ（Field Programmable Gate Array）を備え、
前記支援装置が、前記ＦＰＧＡ上に予め構成しておく再構成領域マップの形状を、前記部分再構成領域ごとに入力１本および出力１本ずつのＦＩＦＯ型のデータ構造とし、前記出力と前記入力とが順に１列になるように相互接続された動的再構成領域チェインとする
ことを特徴とする請求項１に記載の演算システム。
【請求項５】
前記支援装置は、
前記パイプ命令で接続されたコマンドの数が前記ＦＰＧＡ上に準備された前記動的再構成チェインの数より小さい場合、最終段コマンド以降にbypassコマンドを入れてパイプ接続して前記動的再構成チェインの数がパイプ接続されたコマンド数と同じにする
ことを特徴とする請求項４に記載の演算システム。
【請求項６】
ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、これらを接続するバスと、を備える演算システムの制御方法であって、
コマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける入力装置と、
入力されたコマンドを、前記アクセラレータ装置の部分的な再構成可能領域である部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を有し、
前記支援装置は、
前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行うステップを実行し、
前記アクセラレータ装置は、
前記支援装置が設定した前記部分再構成領域のマッピングと、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続したＦＩＦＯ型のデータ構造において、全ての対象コマンドを並列に起動して処理を実行する
ことを特徴とする演算システムの制御方法。
【請求項７】
ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、入力されたコマンドを、前記アクセラレータ装置の部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を備える演算システムのコンピュータを、
前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行う制御手段、として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算システム、演算システムの制御方法およびプログラムに関する。
【背景技術】
【０００２】
まず、コンピュータ内部の演算装置の特性概要について述べる。コンピュータとして、電子集積回路による演算装置、主記憶装置（メモリ）、補助記憶装置等を備えた既知の汎用的なコンピュータを想定する。
コンピュータは、入力として数値や演算の種類を定義した命令群（プログラム）を受け取り、それを演算装置が解釈して実行し、結果を出力することによって動作する。
演算装置の代表格であるＣＰＵ（Central Processing Unit）は、特定の処理に限らず性能を発揮するために、複雑な演算命令（例えば、除算や浮動小数点演算など）に対応する専用処理回路を多数内蔵し、命令の種類によってそれらを切り替えて用いる構造が取られている。また、ＣＰＵには、分岐命令（次に行う命令を条件によって変更する）を実行した前後に性能低下が起こらないよう、分岐先を予測する機構（分岐予測機構）や、分岐が起こった場合と起こらなかった場合の両方の処理を先んじて実行しておき、分岐の判定結果が出た後に演算済みの結果のうち片方を選択して使用する機構（積極的実行機構）などが含まれることも多い。
【０００３】
ＣＰＵにある処理をさせるとき、その処理に使用されない専用処理回路は待機状態となる。また、上記分岐予測機構は、本質的に演算そのものには寄与しない回路である。その他、上記積極的実行機構においては、分岐の結果使用されなかった演算結果は破棄されるので、それを処理した回路は演算そのものには寄与しなかったことになる。すなわち、掛けられるコストや大規模集積回路製作の困難性から、回路規模が制限されているときには、その処理性能は相対的に低いものに留まらざるを得ない。
演算装置の中でも、特定の処理に特化した構造と命令セットを持つものは、例えば画像処理に特化したものを指してＧＰＵ（Graphics Processing Unit）と呼称したり、ネットワークにおけるパケット処理に特化したものを指してＮＰＵ（Network Processing Unit）と呼称したりすることがある。
これらは例えば、その用途に関連する特定の処理回路を内部に多数内蔵しており、対応する処理を行わせたときには、それらを並列に動作させて高速に処理を行う機能を持っていることが多い。
【０００４】
また、画像処理やパケット処理を行うプログラムには条件分岐の処理が比較的少ないことを利用して、分岐予測機構や積極的実行機構等を省略し、できるだけ主たる演算処理に資源を振り向けた設計が行われていることもある。
これら特定の処理に特化した集積回路は、一般に同じ回路規模のＣＰＵに比して非常に高い性能を発揮することができる。一方、対応しない処理を行わせた場合、処理が不可能となるか、できたとしても非常に性能が低いものとなる。
そのような事態を避けるため、ＣＰＵを装備する汎用コンピュータに対し、ＣＰＵの拡張バス等を通じてＧＰＵ、ＮＰＵがアクセラレータとして接続された図５のような形態がよく用いられる。
【０００５】
図５は、汎用的なコンピュータに特定の処理に特化した演算装置を追加した演算システムの概略構成図である。
図５に示すように、演算システム１０は、ＣＰＵ１１と、メモリ１２と、補助記憶装置１３と、アクセラレータ１４と、これらを接続する拡張バス１５と、を備える。アクセラレータ１４は、ＧＰＵ／(以下、本明細書において「／」は、「および／または」、を表記する)ＮＰＵ／ＦＰＧＡ（Field Programmable Gate Array）からなる演算装置を備える。
演算システム１０は、ＣＰＵ１１からアクセラレータ１４の使用が指示され、演算対象のデータが拡張バス１５を通してアクセラレータ１４に送信されたのち、アクセラレータ１４上の演算装置にて演算を行い、最後に結果をＣＰＵ１１に返す構成となっている。
【０００６】
前述の集積回路によって実現された演算装置群は、その通常、生産時に構造が決定され、実行可能な命令や動作速度などが後から変更されることはない。
よって、特定の処理に特化した演算装置を用いる場合、コンピュータの使用目的に合わせて適切な演算装置が選択されて装備されることが通常である。
【０００７】
次に、再構成可能な（Reconfigurable）集積回路デバイスについて説明する。
ＦＰＧＡ（Field Programmable Gate Array）に代表される再構成可能な集積回路は、書き換え可能なメモリ（SRAM、Static Random Access Memory）を応用したＬＵＴ（Look Up Table）構造を持っており、電子回路の構造を表すビット列（回路コンフィグ）を内蔵されたＬＵＴ上に書き込むことで、一時的に任意の電子回路を構成することができるデバイスである。ＳＲＡＭ方式のＦＰＧＡ（SRAM-based FPGA）は、ＬＵＴと配線スイッチがＳＲＡＭで構成され、これらがＳＲＡＭで構成されているため、電源投入時に、ＳＲＡＭ に情報を書き込む作業（コンフィグレーション）が必要になる。
なお、本明細書では、以降代表的な実現例であるＳＲＡＭ方式のＦＰＧＡを用いて説明するが、他の方式によって電子回路を構成できるデバイスを使用した場合も同様である。
【０００８】
従来、ＦＰＧＡは、ＡＳＩＣ（Application Specific Integrated Circuit）の設計段階において、ＡＳＩＣ用に設計した回路をその中に構成させることで、高コストなＡＳＩＣの生産を行う前に動作の検証をし、設計の修正に役立てるためのデバイスとして使用される。
また、機器の生産が少数に留まる場合、機器の起動時に外部の記憶素子などから予め固定された回路コンフィグを導入するように機器を構成することで、装置が駆動している間、あたかも当該用途のＡＳＩＣが装備されているのと同様の状態を実現するために用いられる。
【０００９】
再構成可能コンピューティング（Reconfigurable Computing）について述べる。
近年、“再構成可能コンピューティング”と呼ばれる汎用コンピューティングへのＦＰＧＡの利用法が注目されている（例えば、非特許文献１参照）。再構成可能コンピューティングは、ソフトウェアの持つ柔軟性とＦＰＧＡなどの高度に柔軟な高速コンピューティング構造による高性能ハードウェア処理を組合わせる。その一形態は、ＦＰＧＡの再構成可能な構造を積極的に活用し、コンピュータごとに適切な演算装置を選択して製作する代わりに、ＦＰＧＡをアクセラレータとして装備したコンピュータを準備しておき、演算装置の回路設計を表す回路コンフィグをＦＰＧＡに導入してその場限りの演算回路を構成することによって処理を行う。
この時、色々な処理に特化した回路コンフィグを予め準備しておき、行う処理に合わせて導入する回路を変更すれば、多様な処理に対して、常に当該処理に特化した構造と命令セットを持つ演算装置を利用し続けることが可能と考えられる。ただし、ＦＰＧＡには電子回路上に電子回路をエミュレーションする構成に由来するオーバーヘッドがあり、同じ回路規模のＧＰＵ、ＮＰＵなどに比べると動作速度や電力効率などの点において劣る場合があることに留意する必要がある。
【００１０】
プログラムの記述とコンパイルについて述べる。
従来のＣＰＵ／ＧＰＵ／ＮＰＵ用の実行可能なプログラムは、その演算装置毎に定義されたバイナリ形式の機械語であることが多い。機械語を直接記述する代わりに、Ｃ言語などに代表されるプログラミング言語でのプログラム記述を行い、コンパイラを用いてバイナリに変換する方法が広く用いられている。
このコンパイル作業は、典型的には数秒から数分のオーダで実行できるため、プログラマは例えば、機能単位などの区切りまでプログラムを記述したらコンパイルを行い、実際に動作させて処理結果が正しいか確認し、次の機能の記述に移る、などの作業を繰り返して開発を行う。プログラムの規模が非常に膨大になったとき、コンパイルの時間が数分を超えて長くなる場合もあるが、多くのコンパイラはプログラムを記述したファイル単位などで分割してコンパイルを行う。また、変更がなかったファイルのコンパイルをスキップできる機能を持つ場合が多く、プログラマが機能ごとなどにファイルを分割して記述していくことで、コンパイル時間の増大を抑えることが可能である。
【００１１】
また、インタプリタと呼ばれる特殊なプログラムを用いてプログラムをコンパイルすることなく直接実行することもできる。多くの場合はコンパイラを用いたバイナリの作成に比べて実行速度が低下するが、プログラムの記述後すぐに実行できる利点がある。この利点から、例えばコンピュータ上における一連の操作などを繰り返し実行したいとき、それを簡易なプログラム（スクリプトなどとも呼ばれる）として記述して呼び出すといった使用法にも適している。本明細書では、このような用法をアドホックなプログラミングと呼ぶ。
【００１２】
一方、ＦＰＧＡによって演算装置を構成する場合は、その上に構成された演算回路に対する動作を指示するプログラムに加えて、演算回路そのものの構造も設計しなければならない。
演算回路の構造は、前述の回路コンフィグで定義され、典型的にはバイナリ形式である。バイナリ形式の回路コンフィグを直接記述する代わりに、Verilog HDL、VHDLなどのハードウェア記述言語（HDL、hardware description language）、もしくはＣ言語などで記述した後に、コンパイラを用いて回路コンフィグに変換することが普通である。
しかし、回路コンフィグを作成するＦＰＧＡ合成ツールチェインの動作は、通常のプログラムのコンパイラに比べて非常に低速であり、典型的には数１０分から数時間を要することが多い。
これは例えば、ＦＰＧＡ合成ツールチェインのうち“配置配線”の工程が、「ＦＰＧＡの上に２次元的に多数配置されたＬＵＴ群のうち、どの位置にどの回路機能を割り当て、その間をどのように接続した時にもっとも効率良く動作するか」を求める問題を含み、これが数学的に多項式時間で解けることが保証されていないＮＰ困難問題に属することが原因の一つと考えられる。
【００１３】
この動作時間の長さは従来のプログラミングにおける記述とテストのサイクルを大きく妨げる。大規模な回路コンフィグの開発においては、これを避けるため、実際のＦＰＧＡコンフィグ作成を記述のたびに行うのではなく、ＦＰＧＡ上に回路コンフィグを導入したときの動作をＣＰＵ上で模擬する回路シミュレータが用いられることが多い。回路シミュレータの動作速度は限定されるものの、動作開始までの時間はプログラムのコンパイルと同程度である。
【００１４】
一方、前述のアドホックなプログラミングによって再構成可能コンピューティングを行うためには、実際の動作を得ることが目的である以上、回路コンフィグの作成工程が不可避である。
コンピュータの操作や運用を助けるスクリプトの作成に非常に時間が掛かることはユーザの利用の障害となりうる。例えば、ＯＳ（Operating System）上で複数のコマンドを手作業で発行するなどして行う一連の処理を記録したプログラムの作成に数分程度を要したとしたとする。この場合、実行まで数時間のツールチェイン（tool chain）動作時間を待つよりも、プログラム実行の性能低下を許容してでもＣＰＵ上での動作を行うプログラムとした方が総合の処理時間が早くなるケースが多く存在しうるだろう。
【００１５】
次に、部分的な動的再構成技術を用いた再構成可能コンピューティングについて述べる。
現在主流となっているＦＰＧＡでは、部分的な動的再構成機構が実装されている場合がある。これはＦＰＧＡ上に書き込まれている一部の回路の動作中に、別の部分の回路コンフィグを書き換えることができる機構である。実装においては、ＦＰＧＡ上に予め動的再構成を行うための部分再構成領域を１個ないし複数個定義しておき、その部分領域の中への部分回路コンフィグの導入は他の部分と独立に行えるという形式が用いられていることがある（例えば、非特許文献２，３参照）。
上記方式を活用することで、前述の「再構成可能コンピューティングにおいては、回路コンフィグを作成するまでのツールチェインの動作時間が長く、アドホックなプログラミングに適さない」課題を一部解決できると考えられる。
【００１６】
そのためにはまず、プログラム中で利用される関数、ＯＳのシステムコール、ＯＳのコマンドなどを、引数のみを変更して実行できる部分回路コンフィグとして予め作成しておき、記憶領域上に保存しておく。次に、プログラムをインタプリタなどによって直接実行（これはメインのＣＰＵ上で行う）し、プログラム中で部分回路コンフィグが用意されている関数などが呼び出されたとき、予め準備しておいた部分回路コンフィグをＦＰＧＡ上で空き状態となっている部分再構成領域に書き込んで動作させる。
処理対象のデータは、上記ＣＰＵの拡張バスなどを通じてＦＰＧＡに書き込まれ、結果も同様に拡張バスを通じて取り出される。上記動作について具体的に説明する。
【００１７】
図６は、図５の演算システム１０に上記動作を追記して示す図である。図６は、汎用的なコンピュータにＦＰＧＡアクセラレータなどを装着し、予め用意した部分回路コンフィグ群によって回路コンフィグ生成時間なしにＦＰＧＡ上に構築された演算回路を利用する例を示す。
図６に示すように、演算システム１０のアクセラレータ１４Ａは、ＦＰＧＡを搭載したＦＰＧＡアクセラレータであり、このＦＰＧＡアクセラレータ１４Ａは、部分再構成領域(1)〜(9)を備える。演算システム１０の補助記憶装置１３は、予め作成された部分回路コンフィグ群１３Ａを記憶する。部分回路コンフィグ群１３Ａは、ここでは部分回路コンフィグＡ〜Ｄである。また、演算システム１０のメモリ１２は、演算対象のデータ１２Ａを一時的に記憶する。
【００１８】
演算システム１０のＣＰＵ１１は、プログラムを実行し、プログラム中で部分回路コンフィグが用意されている関数などが呼び出されたとき、予め準備しておいた部分回路コンフィグ群１３ＡをＦＰＧＡアクセラレータ１４Ａ上で空き状態となっている部分再構成領域(1)〜(9)に書き込んで動作させる。図６の符号ａに示すように、ＣＰＵ１１は、プログラム実行時に、ＦＰＧＡアクセラレータ１４Ａの部分再構成領域(1)，(2)に部分回路コンフィグＡを、部分再構成領域(5)に部分回路コンフィグＢを、部分再構成領域(9)に部分回路コンフィグＣをそれぞれ書き込む。図６の符号ｂに示すように、メモリ１２に一時記憶された演算対象のデータ１２Ａは、拡張バス１５を通じてＦＰＧＡアクセラレータ１４Ａに書き込まれ、結果も同様に拡張バス１５を通じて取り出される。
演算システム１０は、演算対象のデータが拡張バス１５を通してＦＰＧＡアクセラレータ１４Ａに送信されたのち、ＦＰＧＡアクセラレータ１４Ａ上の演算回路にて演算を行い、最後に結果をＣＰＵ１１に返す。
【００１９】
このようにすることによって、演算システム１０は、アドホックなプログラミングの用途においても、その場でＦＰＧＡ合成ツールチェインによる回路コンフィグの生成を行うことなく、ＦＰＧＡを活かして演算の種類に最も適した演算装置を常に使用し続ける効果を得ることができる（このような使用法は、非特許文献４参照）。
【００２０】
しかし、図５および図６の演算システム１０の構造においては、プログラム中の１関数、コマンドなどの単位で、拡張バス１５を通じてメモリ１２からＦＰＧＡアクセラレータ１４Ａにデータを転送し、その結果を拡張バス１５経由でメモリ１２に再度書き込む操作が繰り返される。そのため、拡張バス１５を通したデータやり取りに掛かる時間が実行の速度を律速してしまう。
【００２１】
次に、前述したバスボトルネックの回避について述べる。
前述の拡張バスのボトルネックを回避し、再構成可能コンピューティングの性能を最大限発揮するために、ＦＰＧＡ内の部分再構成領域の間をＦＩＦＯ（First In First Out）状のデータ構造を複数本用いて直結した構造（再構成領域マップ）とすることを考える。
まず、ユーザが入力したプログラムの構造から、部分回路コンフィグが用意された関数、コマンドなどへの入力データと出力データの接続関係を洗い出し、データの接続部分が前述のＦＩＦＯ状データ構造によって接続されるように配置位置を決めて部分回路コンフィグ群をロードし、その全てを並列に実行する。
【００２２】
このようにすることで、最終的な演算結果に現れない中間処理結果を一旦メモリに退避することなく演算が次々と実行される（パイプライン処理）されるので、拡張バスを通したデータのやり取りが最小限に抑えられ、ＦＰＧＡによる「演算の種類に最も適した演算装置を常に使用し続ける効果」による高速化の恩恵を得ることができる。
非特許文献５には、ＦＰＧＡ内部の機能モジュールの間に直結のＦＩＦＯ構造を用いて接続することで近傍のＤＲＡＭ（Dynamic Random Access Memory）へのアクセスに用いるバスのボトルネックを回避する構成が示されている。ただし、機能モジュールの動的な再構成を行うことは、非特許文献５では触れられていないが、非特許文献２，３などを参照すればこれらを組み合わせて用いることは可能と考えられる。
【００２３】
図７は、図６の演算システム１０に上記動作を加えて変更した例を示す図である。図７は、ＦＰＧＡ内の部分回路コンフィグ間に直結のＦＩＦＯ型データ構造を配備して拡張バスボトルネックを回避した例を示す。
図７に示すように、演算システム１０Ａは、部分回路コンフィグ群１３Ａの配置位置（導入位置）と、各部分回路コンフィグＡ〜Ｄを有効にするデータパスを指示するプログラム２０を有する。プログラム２０は、ここでは部分回路コンフィグＡ〜Ｄの配置位置（図７の部分回路コンフィグＡ〜Ｄを配置した再構成領域マップ参照）と、これら部分回路コンフィグＡ〜Ｄの配置位置をＦＩＦＯ状の経路で繋ぐデータパス２１（図７のプログラム２０内の矢印参照）とを有する。
【００２４】
図７の符号ｃに示すように、演算システム１０Ａは、ユーザが入力したプログラム２０の構造から、部分回路コンフィグ群の配置位置とデータパス２１とを指示する。ＣＰＵ１１は、補助記憶装置１３からプログラム２０の指示に従って部分回路コンフィグ群１３Ａを読み出し、この部分回路コンフィグ群１３ＡをＦＰＧＡアクセラレータ１４Ａの部分再構成領域(1)〜(9)に対し、位置を指定した書き込みを行う（図７の符号ｄ参照）。すなわち、プログラム２０が指示したＦＩＦＯ状データ構造と同じ、部分回路コンフィグＡ〜Ｄの配置位置に、部分回路コンフィグＡ〜Ｄを書き込むとともに、プログラム２０が指示したＦＩＦＯ状データ構造と同じ、データパス２１の経路でデータを入出力する。
【００２５】
図７の場合、ＣＰＵ１１は、プログラム実行時に、ＦＰＧＡアクセラレータ１４Ａの部分再構成領域(1)に部分回路コンフィグＡを、部分再構成領域(3) (5) (7)に部分回路コンフィグＢを、部分再構成領域(6) (8)に部分回路コンフィグＣを、部分再構成領域(9)に部分回路コンフィグＤをそれぞれ書き込む。
図７の符号ｅに示すように、メモリ１２に一時記憶された演算対象のデータ１２Ａは、拡張バス１５を通じてＦＰＧＡアクセラレータ１４Ａに書き込まれる。図７の場合、ＦＰＧＡアクセラレータ１４Ａは、プログラム２０が指示したＦＩＦＯ状データ構造と同じ、データパス２１の経路でデータを入出力する（図７の符号ｆの太矢印参照）。図７の符号ｇに示すように、ＦＰＧＡアクセラレータ１４Ａ上の演算装置による演算結果は、拡張バス１５を通じて取り出される。
【先行技術文献】
【非特許文献】
【００２６】
【非特許文献１】“再構成可能コンピューティング - Wikipedia”,［online］,［平成２９年３月２４日検索］,インターネット  〈 URL :https://ja.wikipedia.org/wiki /%E5%86%8D%E6%A7%8B%E6%88%90%E5%8F%AF%E8%83%BD%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0〉
【非特許文献２】Zhenzhong Xiao, et al., “A Partial Reconfiguration Controller for Altera Stratix V FPGAs,” FPL2016.29 Aug.-2 Sept. 2016, Lausanne, Switzerland
【非特許文献３】Xie Di, “A Design Flow for FPGA Partial Dynamic Reconfiguration,” IMCCC2012. 8-10 Dec. 2012, 10.1109/IMCCC.2012.35
【非特許文献４】大和 一洋, “IoT機器に適したFPGAを用いた文字列分割の高速化”, ミラクル・リナックス株式会社, 2016/12/1
【非特許文献５】Z. Wang, “Multikernel Data Partitioning With Channel on OpenCL-Based FPGAs.”
【発明の概要】
【発明が解決しようとする課題】
【００２７】
しかしながら、ＦＩＦＯ直結された再構成領域マップへのプログラミングに際しては、当該再構成領域マップの構造が予め固定されている。このことから、ＣＰＵ上で動作するプログラムとは異なり、プログラマやコンピュータの使用者がマップの構造を予め入手し、関数やコマンド間のデータの流れがその再構成領域マップ上で実現できるようにプログラミングしなければならない。そのためのプログラムは、回路コンフィグの導入位置と、マップ上で有効にするデータパスを指示するために、既存のプログラムには無い拡張などを加えた独自の言語となることが想定される。
【００２８】
例えば、前記図７では、部分回路コンフィグＢが部分再構成領域(3) (5) (7)に対して導入され、３並列で用いられているが、これを４並列としたプログラムは収容すべき部分再構成領域が存在しないので、動作不可となる。このように、再構成可能コンピューティングの適用に当たっては、ユーザはマップの構造を意識したプログラミング方法を新規に学習することが必要となる。しかも使用するコンピュータやマップの状況が変わるたびにプログラミングしなおさなければならない課題がある。
【００２９】
また、プログラムの特徴によっては、再構成領域マップを使いきれずに無駄となる部分が生じる課題がある。例えば、ＦＩＦＯ状のデータ構造は、通常、ＦＰＧＡ上に構成された電子回路として実現される。このため、プログラムの都合で使用されなかったＦＩＦＯ構造に相当するＦＰＧＡ上の領域は、全て使われないままとなる。
【００３０】
さらに、部分再構成領域は、自由なプログラミングを許すためには任意の領域に任意の部分回路コンフィグを導入できるよう設定されなければならない一方、関数やコマンドなどの内容によっては部分回路コンフィグの規模が大きく異なることが想定される。任意の領域に対する任意の部分回路コンフィグの導入を許すためには、導入される候補となる部分回路コンフィグの全てを収容可能なように部分再構成領域を設計しなければならず、典型的には一番回路規模の大きい部分回路コンフィグに合わせた大きさとなる。この部分再構成領域に回路規模の小さいコマンドを導入したときは、その余剰となる部分は使用できない領域となってしまう。
【００３１】
図８は、部分回路コンフィグ間で回路規模が大きく異なる場合のＦＰＧＡ利用効率低下を示す図である。
図８（ａ）に示す回路規模の大きいコマンド３１と回路規模の小さいコマンド３２は、図８（ｂ）に示す部分再構成領域(1) (2) (3)に導入される。上述したように、部分回路コンフィグの全てを収容可能なように部分再構成領域(1) (2) (3)が設計される。図８（ｂ）に示すように、部分再構成領域 (2) (3)に回路規模の小さいコマンド３２を導入したときは、その余剰となる部分（図８（ｂ）のハッチング部参照）は使用できない領域となってしまう。
これらを総合して、従来の技術では、ＦＰＧＡの利用効率が低い課題がある。
【００３２】
このような背景を鑑みて本発明がなされたのであり、本発明は、アクセラレータ利用効率の向上とプログラミング手法の維持を可能とする演算システム、演算システムの制御方法およびプログラムを提供することを課題とする。
【課題を解決するための手段】
【００３３】
前記した課題を解決するため、請求項１に記載の発明は、ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、これらを接続するバスと、を備える演算システムであって、コマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける入力装置と、入力されたコマンドを、前記アクセラレータ装置の部分的な再構成可能領域である部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を備え、前記支援装置は、前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行い、前記アクセラレータ装置は、前記支援装置が設定した前記部分再構成領域のマッピングと、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続したＦＩＦＯ型のデータ構造において、全ての対象コマンドを並列に起動して処理を実行することを特徴とする演算システムとした。
【００３４】
また、請求項６に記載の発明は、ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、これらを接続するバスと、を備える演算システムの制御方法であって、コマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける入力装置と、入力されたコマンドを、前記アクセラレータ装置の部分的な再構成可能領域である部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を有し、前記支援装置は、前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行うステップを実行し、前記アクセラレータ装置は、前記支援装置が設定した前記部分再構成領域のマッピングと、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続したＦＩＦＯ型のデータ構造において、全ての対象コマンドを並列に起動して処理を実行することを特徴とする演算システムの制御方法とした。
【００３５】
また、請求項７に記載の発明は、ホストとなるＣＰＵと、部分回路コンフィグ群を記憶する外部記憶装置と、前記部分回路コンフィグ群をロードして演算回路を動的に再構成可能なアクセラレータ装置と、入力されたコマンドを、前記アクセラレータ装置の部分再構成領域にマッピングし、かつ、前記部分再構成領域間をデータパスでつなぐように制御する支援装置と、を備える演算システムのコンピュータを、前記コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の前記部分再構成領域にマッピングするとともに、後のコマンドを後の前記部分再構成領域にマッピングし、かつ、前後の前記部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力を前記ＣＰＵから導入し、終端となるコマンドの出力を前記ＣＰＵに戻す設定を行う制御手段、として機能させるためのプログラムとした。
【００３６】
このようにすることで、拡張バスを入出力データが通る回数は、高々一回までに抑えることができ、ＣＰＵとアクセラレータ間のデータのやり取りに由来する実行速度低下を抑えることができる。また、ユーザに対してシェルと同じインタフェースを提示しながら、専用の演算回路を用いた高速演算と、演算群の並列実行と、メモリアクセス回数の低減による実行速度向上の効果を得ることができる。
【００３７】
また、請求項２に記載の発明は、前記外部記憶装置が、前記ＣＰＵ上のコマンドまたはプログラム群を予め、前記部分再構成領域の任意の位置に導入できる形式でコンパイルして格納することを特徴とする。
【００３８】
このようにすることで、指示された任意の部分再構成領域の位置に対して回路コンフィグを導入することができ、ユーザに対してシェルと同じインタフェースを提示することができる。
【００３９】
また、請求項３に記載の発明は、前記支援装置が、入力されたコマンドのコマンド名に対応する外部プログラムを呼び出すことによって、前記アクセラレータ装置に演算を指示することを特徴とする。
【００４０】
このようにすることで、ユーザは使用する機材の部分再構成領域群の接続関係の情報を意識することなく、ホスト上でのワンライナーの実行と同様にプログラミングができる。従来と同じ利用方法が実現でき、プログラミング手法の維持が可能となる。
【００４１】
また、請求項４に記載の発明は、前記アクセラレータ装置が、ＦＰＧＡを備え、前記支援装置が、前記ＦＰＧＡ上に予め構成しておく再構成領域マップの形状を、前記部分再構成領域ごとに入力１本および出力１本ずつのＦＩＦＯ型のデータ構造とし、前記出力と前記入力とが順に１列になるように相互接続された動的再構成領域チェインとすることを特徴とする。
【００４２】
このようにすることで、処理のデータパスが一直線であるため、動的再構成領域チェインに含まれるハードウェアパイプのうち、実際に利用される割合が高く、ＦＰＧＡアクセラレータの利用効率が向上する。コマンド間の部分回路コンフィグの規模差が小さく比較的均一な大きさである場合、それらの最大サイズに合わせた部分再構成領域に導入したとき、余剰となる割合を小さく抑えることができる。その結果、同じ規模のＦＰＧＡアクセラレータ上により多くの部分再構成領域の数を取ることができる可能性が高まる。
【００４３】
また、請求項５に記載の発明は、前記支援装置が、前記パイプ命令で接続されたコマンドの数が前記ＦＰＧＡ上に準備された前記動的再構成チェインの数より小さい場合、最終段コマンド以降にbypassコマンドを入れてパイプ接続して前記動的再構成チェインの数がパイプ接続されたコマンド数と同じにすることを特徴とする請求項１に記載の演算システム。
【００４４】
このようにすることで、bypassコマンドが、使用されていない部分再構成領域に書き込まれることで、データを終端までバイパスしていき、最終的に終端のハードウェアパイプを通ってホストに返す役割がある。パイプ命令で接続されたコマンドの数がＦＰＧＡ上に準備された動的再構成チェインの数より小さい場合であっても、部分再構成領域ごとに入力１本、出力１本ずつのＦＩＦＯ型データ構造（動的再構成領域チェイン）を構成することができる。なお、最終段コマンド以降の処理を行わない（バイパス）態様であれば、例えばショートカットなどどのような方法でもよい。
【発明の効果】
【００４５】
本発明によれば、アクセラレータ利用効率の向上とプログラミング手法の維持を可能とする演算システム、演算システムの制御方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００４６】
【図１】本発明の実施形態に係る演算システムを示す構成図である。
【図２】本発明の実施形態に係る演算システムの動作を説明する図であり、（ａ）はシェルへの入力を示すコマンドライン、（ｂ）はシェルを提供するソフトウェアである支援装置のブロック、（ｃ）はＦＰＧＡアクセラレータ上の部分再構成領域の接続を示す図である。
【図３】本発明の実施形態に係る演算システムの支援装置（シェルソフトウェア）の動作を示すフローチャートである
【図４】本発明の実施形態に係る演算システムのコマンド間の部分回路コンフィグの規模が均一であるとき、領域の余剰なくＦＰＧＡアクセラレータを使用できることを説明する図であり、（ａ）は均一な回路規模のコマンドを示す図、コマンドの部分再構成領域への導入を示す図である。
【図５】汎用的なコンピュータに特定の処理に特化した演算装置を追加した演算システムの概略構成図である。
【図６】図５の演算システムに動作を追記して示す図である。
【図７】図６の演算システムに動作を加えて変更した例を示す図である。
【図８】部分回路コンフィグ間で回路規模が大きく異なる場合のＦＰＧＡ利用効率低下を示す図であり、（ａ）は回路規模の大きいコマンドと回路規模の小さいコマンドを示す図、コマンドの部分再構成領域への導入を示す図である。
【発明を実施するための形態】
【００４７】
以下、図面を参照して本発明を実施するための形態（以下、「本実施形態」という）における演算システム等について説明する。
（背景説明）
［既存構成１］
汎用コンピュータ上における、シェル（shell）を用いたコマンド群の実行について説明する。
シェルは、ユーザがコマンド行に打ち込んだコマンド等を解釈し、コンピュータに実行させる役割をもつプログラムである。シェルが動作することで、ユーザがコマンド行にコマンドをタイプして実行できる。また、あるコマンドの標準出力をファイルではなく、別のコマンドの標準入力に直接接続することが可能であり、その操作をパイプと呼ぶ。パイプは、コマンド行において、一連のコマンドをパイプ記号”|”で区切って記述する。パイプによって連結された一連のコマンドをパイプライン(pipeline)という。
【００４８】
ユーザは、例えば汎用コンピュータ上にあるファイルの一覧を取得するため、キーボード等を介してコマンドラインシェルに対し、
$ ls / 
（行頭の$は、プロンプト記号で最初から表示されており、ユーザ入力待ちであることを示す。）
（ls は、Unix系ＯＳ システムにおいて「ファイルやディレクトリの情報を表示する」コマンド）
（ / は、ファイルシステムの中での位置を示す文字列のうち、最上位の階層を示す）
などと入力する。
【００４９】
その結果として
bin     etc         initrd.img  lib64  media  proc  sbin  tmp  vmlinuz    
boot    lib         libx32      mnt    root   srv   usr   dev  home       
lib32   lost+found  opt         run    sys    var                         
などのファイルリストの表示を受け取ることができる。ここでの表示はLinux（登録商標） ＯＳにおける一例を示している。
【００５０】
また、ユーザは、Unix系オペレーティングシステムにおけるパイプ（あるコマンドの標準出力を次のコマンドの標準入力に接続する機能）をシェル上で用いることによって、例えば、
$ jot -r 1000000 0 65535 | paste -d ' ' - - \
| awk '{print $1,"^2+",$2,"^2<65535^2"}' \
| bc | grep 1 | wc -l | awk '{print $1,"/125000"}'  | bc ?l 
【００５１】
（シェル上では、”|”の記号を用いてコマンドを順に接続することでパイプの使用を指示することができ、パイプの前に置かれたコマンドの出力がそのままパイプの後のコマンドの入力となる。）
（行末の \ 記号は、改行を無視し、次の行をこの後に直接続けて１行で扱うことを示す。）
（jot は、ある法則に従った数値群を出力する。この引数の時、0〜65535の間の数値を1000000個、改行区切りで連続して出力する。）
（paste は、１つ以上のファイルを行単位で水平方向に連結する。この場合はスペース区切りの数値列の入力に対して数値を２つずつ、スペース区切りで取り出し、取り出すたびに改行を挿入するように働く。）
【００５２】
（awk は、命令文に従ってテキスト処理を行うコマンドであり、１つ目のawkは行単位で入力された2つの数値x , y を元に “x^2 + y^2 < 65536^2” の数式を表す文字列を作成する。）
（bc は、入力された文字列を数式として解釈し、その結果を表示する。１つ目の bc は、“x^2 + y^2 < 65536^2” の不等式を解釈し、不等式が成立するとき１、それ以外は０を出力する。）
（grep は、入力された文字列に引数で指定された部分文字列が含まれるか検査し、含まれる場合のみその行全体を出力する。この場合は1が含まれる行だけを表示する。）
（wc は、入力された文字列の行数などをカウントする。この場合は前段からの入力の行数が数値として表示される。）
（２つ目のawkは、入力された行数の値 z を元に “z / 125000” の文字列を作成する。）
（２つ目のbcは、”z / 125000” を数式として演算した結果を表示する。）
（この一連のコマンドはモンテカルロ法による円周率の近似値を導出する意図がある。）
などと入力する。
【００５３】
その結果として
3.14116000000000000000
などの表示を受け取ることができる。この場合、円周率3.14159... の上位４桁程度の近似値を得ることができた。
【００５４】
既存構成１によれば、既存のコマンド1つでは達成できない演算や操作を、コマンドの接続関係の記述と引数の調整によって達成できる。すなわち、ユーザが汎用コンピュータに任意の演算をプログラミングできる構成である。
【００５５】
<既存構成１における性能低下>
上述したような、パイプで接続されたコマンド列をシェル（ここでは親シェルと呼び、ユーザが入力する）が受け取って実行するとき、通常は各単体コマンドのみを実行する子シェルがコマンドの数だけ親シェルから並列にプロセスとして起動される。
次に、それらの入力と出力がパイプ記号”|”によって指示された接続関係に基づいて接続され、最終コマンドの出力結果のみが親シェルの出力として表示される。
現在一般的に用いられるＣＰＵは、複数の実行コアを備えている。各子シェルのプロセスは、ＣＰＵの異なるコアに割り当てられて並列に実行されることがある。実装されているＣＰＵコアの数を超えたコマンド数をパイプで接続した場合、その結果起動された複数の子シェルプロセスの間では、プロセスごとにＣＰＵコアを占有する時間を細かく区切って時分割的に利用することで、仮想的に並列実行されるケースが多い。
ここで、ＣＰＵコアを占有するプロセスの相互切り替え作業は、コンテキストスイッチなどと呼ばれ、この作業の間は切り替え前のプロセス、切り替え後のプロセスとも演算が停止している。このコンテキストスイッチが多数発生する環境、すなわち実装コア数に対して非常に多くのコマンドをパイプ接続したコマンドを発行した場合、実行の速度は非常に遅くなることが予想される。
【００５６】
また、典型的にはパイプは、ＦＩＦＯ（First In First Out）型のデータ構造などとしてパイプの数だけ複製されてメモリ上に置かれる。各子シェルのプロセスは、入力側に接続されたパイプに相当するメモリ上のＦＩＦＯ構造からデータを読み出し、出力側に接続されたパイプに相当するメモリ上のＦＩＦＯ構造にデータを書き出す。各プロセスの間でＣＰＵとメモリの間を繋ぐバスは共有されており、時間を区切ったアクセス許可（時分割的なアクセス）を各プロセスに割り当てることによって見かけ上並列に動作させているように見せかける。
コマンドをパイプ接続した場合、１接続ごとに前段コマンドのメモリ書き込みと後段コマンドのメモリ読み込み１組の処理が発生し、それらは一つのバスの容量を分割して用いる。
よって、パイプ接続されたコマンド数に対して十分な数のＣＰＵコア数が装備されている時においても、１つ当たりのパイプの転送能力が制限され、実行速度は遅くなることが予想される。
【００５７】
［既存構成２］
既存構成２は、再構成可能な演算回路を搭載したアクセラレータを追加した構成である。
既存構成２は、上記既存構成１に加えて、下記のアクセラレータと、下記のアクセラレータカードとを備える。
アクセラレータは、ＦＰＧＡ等に代表される、その上に専用の演算回路を複数、仮想的に構成することができ、かつ動作中に部分的に演算回路を再構成できる既知の装置（例えば、ＦＰＧＡ）である。
アクセラレータカードは、汎用コンピュータに装備された汎用バスなどを通してデータのやり取りを行うための周辺回路が共に搭載された既知のアクセラレータカードである。
【００５８】
既存構成２においては、単体のコマンドはＦＰＧＡ上に一時的に構成された演算回路によって実現される。コマンドを定義するファイルには、直接当該コマンドの処理をＣＰＵ上で実行する命令群に代わり、同処理を実現する演算回路の構成情報（回路コンフィグと呼称する）と、演算回路の設置処理、消去処理などが含まれている。
【００５９】
以上の構成において、コマンドを起動すると回路コンフィグが拡張バスを通してＦＰＧＡの空き領域に書き込まれ、演算回路がＦＰＧＡ上に一時的に設置される。同時にコマンドへの入力は、拡張バスを通して演算回路に入力され、コマンドからの出力は拡張バスを通して取り出されるよう設定される。コマンドが終了したのちは、演算回路の構成情報はＦＰＧＡから消去される。
既存構成２は、パイプをＦＩＦＯ構造としてメモリ上にマッピングする。コマンドとコマンドの間を繋ぐ処理については、前記既存構成１と同様である。
【００６０】
<既存構成２における効果>
既存構成２は、専用の演算回路を用いた演算を、データに最適化されたパイプライン処理で行うことができる。このため、演算速度は、同じ電力や同じ回路面積等の適当なコスト基準を固定して比較したとき、ＣＰＵによる処理に比べて大幅に高速化できる場合が多い。
また、既存構成２は、パイプで連結されたコマンド群を実行したとき、ＦＰＧＡ内の空き領域が十分にある限りは、コマンド群は全て並列に実行される。このため、コンテキストスイッチなどによる実行速度低下を抑えることができる。すなわち、既存構成２は、ＣＰＵのみの構成に比べ、単体のコマンドの処理性能が向上でき、かつ並列実行による性能低下を防ぐ効果が得られる。
【００６１】
一方、既存構成２は、パイプの実装については既存構成１と同様であるため、コマンドをパイプ連結するたびに大量のメモリアクセスと、拡張バスを通したＣＰＵとＦＰＧＡ間のデータのやり取りが多数発生する。これは、既存構成１と同様に、ＣＰＵとメモリの間のバスの容量に起因した実行速度低下を引き起こす。
さらに、既存構成２は、通常のＣＰＵとメモリの間の転送容量に比べて、ＣＰＵ拡張バスの転送容量が小さいケースが多い。このため、ＣＰＵとＦＰＧＡ間のデータのやり取りがボトルネックとなり、既存構成１に比べてさらに実行速度が低下するおそれがある。
（実施形態）
【００６２】
図１は、本発明の実施形態に係る演算システムを示す構成図である。
図１に示すように、演算システム１００は、ホストとなるＣＰＵ１１０と、データを記憶するメモリ１２０と、部分回路コンフィグ群を記憶する補助記憶装置１３０（外部記憶装置）と、部分回路コンフィグ群をロードして演算回路を動的に再構成可能なＦＰＧＡアクセラレータ１４０（アクセラレータ装置）と、これらを接続する拡張バス１５０と、入力装置１６０と、支援装置１７０と、を備える。
【００６３】
<ＣＰＵ１１０>
ＣＰＵ１１０は、プログラムを実行し、プログラム中で部分回路コンフィグが用意されている関数などが呼び出されたとき、支援装置１７０を起動し、補助記憶装置１３０に予め準備しておいた部分回路コンフィグ群１３０Ａを支援装置１７０に送る。また、ＣＰＵ１１０は、支援装置１７０の制御方法を実現するシェルソフトウェアを実行する。
【００６４】
<メモリ１２０>
メモリ１２０は、演算対象のデータ１２０Ａを一時的に記憶する。
メモリ１２０に一時記憶された演算対象のデータ１２０Ａは、拡張バス１５０を通じてＦＰＧＡアクセラレータ１４０に書き込まれ、結果も同様に拡張バス１５０を通じて取り出される。ただし、図１に示すように、演算対象のデータ１２０Ａの入力１本が、拡張バス１５０を通してＦＰＧＡアクセラレータ１４０に送信され（図１の符号ｈ参照）、ＦＰＧＡアクセラレータ１４０上の演算回路にて演算結果の出力１本がＣＰＵ１１０に返される（図１の符号ｊ参照）。
【００６５】
<補助記憶装置１３０>
補助記憶装置１３０は、ＣＰＵ１１０上のコマンドまたはプログラム群を予め、部分再構成領域の任意の位置に導入できる形式でコンパイルして格納する。図１に示すように、補助記憶装置１３０は、予め作成された部分回路コンフィグ群１３０Ａを記憶する。部分回路コンフィグ群１３０Ａは、ここでは部分回路コンフィグＡ〜Ｄである。
【００６６】
<ＦＰＧＡアクセラレータ１４０>
ＦＰＧＡアクセラレータ１４０は、拡張バス１５０経由でＣＰＵ１１０に接続される。
ＦＰＧＡアクセラレータ１４０は、支援装置１７０が設定した部分回路コンフィグ群１３０Ａを接続したネット１７０Ａをロードして演算回路を動的に再構成可能なＦＰＧＡである。図１の場合、ＦＰＧＡアクセラレータ１４０は、部分再構成領域(1)〜(9)を備える。
【００６７】
ＦＰＧＡアクセラレータ１４０は、支援装置１７０が設定した部分再構成領域(1)〜(9)のマッピングと、前後の部分再構成領域を１本ずつのデータパス１４１（図１の符号ｉ）によって１次元に連結したＦＩＦＯ型のデータ構造（以下、適宜ハードウェアパイプという）において、全ての対象コマンドを並列に起動して処理を実行する。
ＦＰＧＡアクセラレータ１４０は、支援装置１７０が、ＦＰＧＡ上に予め構成しておく再構成領域マップの形状を、部分再構成領域ごとに入力１本および出力１本ずつのＦＩＦＯ型のデータ構造とし、出力と入力とが順に１列になるように相互接続された“動的再構成領域チェイン”とする。
【００６８】
すなわち、ＦＰＧＡアクセラレータ１４０は、支援装置１７０によって、再構成領域マップの形状をＦＰＧＡ上に予め構成しておく。ＦＰＧＡ上に予め構成しておく再構成領域マップは、部分再構成領域ごとに入力１本、出力１本ずつのＦＩＦＯ型データ構造を持ち、それらが順に１列になるように相互接続された“動的再構成領域チェイン”である。図１の符号ｈに示すように、この動的再構成領域チェインは、拡張バス１５０経由で入力１本が部分再構成領域(1)に入力し、部分再構成領域(1)の出力１本が入力１本の部分再構成領域(2)に入力し（図１の符号ｉ参照）、部分再構成領域(2)の出力１本が入力１本の部分再構成領域(3)に入力し、以下順にＦＩＦＯ型データ構造を繰り返し、部分再構成領域(9)の出力１本が拡張バス１５０経由でＣＰＵ１１０に出力される（図１の符号ｊ参照）。
【００６９】
<拡張バス１５０>
拡張バス１５０は、ＣＰＵ１１０と、メモリ１２０と、補助記憶装置１３０と、ＦＰＧＡアクセラレータ１４０（アクセラレータ装置）とを相互に接続する接続バスである。
ただし、拡張バス１５０で入出力されるデータの本数の点で、図６の演算システム１０とは異なる。すなわち、演算システム１００は、演算対象のデータの入力１本が、拡張バス１５０を通してＦＰＧＡアクセラレータ１４０に送信されたのち（図１の符号ｈ参照）、動的再構成領域チェインで接続されたＦＰＧＡアクセラレータ１４０上の演算回路にて演算を行い、最後に結果の出力１本がＣＰＵ１１０に返される（図１の符号ｊ参照）。
【００７０】
<入力装置１６０>
入力装置１６０は、表示部にコマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける。
入力装置１６０は、本来のシェルと同様のインタフェースをユーザに提供する。入力装置１６０は、ユーザからシェルのワンライナー形式でプログラム入力を受け付ける。ワンライナーは、コマンドをパイプ記号”|”で結合して１行に表現した組み合わせコマンドである。
ここで、汎用コンピュータを用いた演算をプログラムできるプログラミング言語・環境は、数多く存在する。本実施形態では、Ｕｎｉｘ系ＯＳにおいてユーザへの対話的なインタフェースを提供するソフトウェアである、シェルに対するワンライナーを用いる。
【００７１】
なお、シェルへのワンライナーに限らず、関数などの出力を１方向的に次の関数に接続する記述法を特徴とする言語を使用してもよい。例えば、プログラミング言語の一つであるElixirを用いてもよい。Elixirは、記述にパイプライン演算子を用いることができ、関数呼び出しの結果を次の関数呼び出しの第１引数として接続することが可能である。Elixirは、シェルへのワンライナーと同様に用いることが可能である。
【００７２】
シェルへのワンライナーによってプログラミングを行う場合、ＦＰＧＡ用の部分回路コンフィグは、Unix系ＯＳでシェル上などから呼び出して用いられるコマンドの単位で準備する。コマンドは、ＯＳが備える種類のものだけを使用してもよいし、ユーザが自身で設計を行ったコマンドを登録してもよい。その場合の登録方法はシェルに依存する。コマンド登録は、代表的には、シェルの環境変数に対してコマンドの所在位置を追加する操作によって行う。
【００７３】
<支援装置１７０>
支援装置１７０は、入力されたコマンドを、ＦＰＧＡアクセラレータ１４０の部分的な再構成可能領域である部分再構成領域にマッピングし、かつ、部分再構成領域間をデータパスでつなぐように制御するシェルソフトウェアである。本実施形態では、このシェルソフトウェアは、ＣＰＵ１１０により実行される。
支援装置１７０は、ワンライナー形式（ワンライナー型）におけるパイプ記号をハードウェアパイプに置き換える。具体的には、支援装置１７０は、ＣＰＵ１１０上では本来のシェルと同様のインタフェースをユーザに提供しながらも、入力装置１６０でワンライナー形式のコマンドが入力されたとき、そのパイプ前後のコマンドがＦＰＧＡ内のハードウェアパイプで結合された２つの領域にマッピングされるように制御する。
【００７４】
支援装置１７０は、コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の部分再構成領域にマッピングするとともに、後のコマンドを後の部分再構成領域にマッピングし、かつ、前後の部分再構成領域をデータパスによって分岐することなく一列になるように（例えば１本ずつのデータパスによって１次元の連結となるように）接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力をＣＰＵ１１０から導入し、終端となるコマンドの出力をＣＰＵ１１０に戻す設定を行う。
【００７５】
支援装置１７０は、入力されたコマンドのコマンド名に対応する外部プログラムを呼び出すことによって、ＦＰＧＡアクセラレータ１４０に演算を指示する。
支援装置１７０は、パイプ命令で接続されたコマンドの数がＦＰＧＡ上に準備された動的再構成チェインの数より小さい場合、最終段コマンド以降にbypassコマンドを入れてパイプ接続して動的再構成チェインの数がパイプ接続されたコマンド数と同じにする。
【００７６】
以下、上述のように構成された演算システム１００の動作を説明する。
<準備>
Ｕｎｉｘ系ＯＳ上で利用されるコマンドは、上述した既存構成２と同様に、回路コンフィグと、コンフィグの設置処理、消去処理などからなるファイルの形にプレコンパイルされているものを用いる。
ただし、コマンドへの入出力はＣＰＵ１１０とＦＰＧＡアクセラレータ１４０を繋ぐ拡張バス１５０に直結するのではなく、ＦＩＦＯ型のデータ構造（ハードウェアパイプ）１つからの入力と、ハードウェアパイプ１つへの出力を行う形に設定する。
これと平行して、前段の入力を後段の出力へ渡すのみであり、他に何も行わないコマンドを１つ定義する。これはユーザから明示的に呼び出されないため、名称等は不要であるが、例えばbypassコマンドと呼ぶ。
【００７７】
図１に示すように、ＦＰＧＡアクセラレータ１４０上の演算回路を導入する領域は、予めそれらを動的再構成可能な部分再構成領域群（部分再構成領域(1)〜(9)）に区切られ、部分再構成領域(1)〜(9)の間を繋ぐハードウェアパイプによって接続された再構成チェイン構造として準備する。
動的再構成領域チェイン構造の中の部分再構成領域(1)〜(9)は、任意の部分再構成領域に対して、前述した任意のプレコンパイルされた回路コンフィグ１つを収容可能なように領域を設定する。
この条件を達成するためには、例えばプレコンパイルされた回路群は、それぞれ固有の回路の形状を持つと考えられるが、その全ての回路群の共通部分を取った形状を用いて部分再構成領域(1)〜(9)を構成するなどすればよい。
これに伴い、指示された任意の部分再構成領域の位置に対して回路コンフィグを導入する形式とする。
【００７８】
動的再構成領域チェイン構造の、その始端の部分再構成領域(1)へ入力を行うハードウェアパイプは、拡張バス１５０を通したＣＰＵ１１０からＦＰＧＡアクセラレータ１４０への入力を接続する（図１の符号ｈ参照）。同様に、終端の部分再構成領域(9)からの出力を行うハードウェアパイプは拡張バスを通したＦＰＧＡアクセラレータ１４０からＣＰＵ１１０への出力として接続する（図１の符号ｊ参照）。
ここで、上記ハードウェアパイプの配置自体もＦＰＧＡアクセラレータ１４０への回路コンフィグの一部として実現され、例えばＯＳの起動時などに当該回路コンフィグを導入するプログラムが自動的に起動するように設定することなどにより、ユーザからの指示を待たずに準備を完了することができる。
【００７９】
<動作説明>
図２は、演算システム１００の動作を説明する図であり、（ａ）はシェルへの入力を示すコマンドライン、（ｂ）はシェルを提供するソフトウェアである支援装置１７０のブロック、（ｃ）はＦＰＧＡアクセラレータ１４０上の部分再構成領域の接続を示す。なお、図１と同一構成部分には、同一符号を付している。
入力装置１６０（図１参照）は、ユーザからシェルのワンライナー形式でプログラム入力を受け付ける。
ユーザは、コマンドプロンプト（Command prompt）「>」に続けて、図２（ａ）の枠囲みに示すコマンド行のシェルへの入力を行い、コマンド入力後に、エンター（Enter）を押してコマンドを実行する。本実施形態では、ユーザからシェルのワンライナー形式でプログラム入力を受け付ける。ユーザは、一連のコマンドをパイプ記号”|”で区切って記述する。
【００８０】
図２の例では、コマンド「$ jot -r 1000000 0 65535」（図２の符号ａ１参照）入力後、パイプ記号”|”で区切ってコマンド「paste -d ' ' - -」（図２の符号ａ２参照）を入力する。以下同様に、”|”で区切ってコマンド「awk '{print $1,"^2+",$2,"^2<65535^2"}'」（図２の符号ａ３参照）を入力し、”|”で区切ってコマンド「bc」（図２の符号ａ４参照）を入力し、”|”で区切ってコマンド「grep 1」（図２の符号ａ５参照）を入力する。さらに、”|”で区切ってコマンド「wc -l」（図２の符号ａ６参照）を入力し、”|”で区切ってコマンド「awk '{print $1,"^2+",$2,"^2<65535^2"}'」（図２の符号ａ７参照）を入力し、最後に”|”で区切ってコマンド「bc ?」（図２の符号ａ８参照）を入力し、エンターを押してコマンドを実行する。図２（ａ）に示すように、８つのコマンド（図２の符号ａ１−ａ８参照）が、”|”の記号を用いて順に接続され、パイプの前に置かれたコマンドの出力がそのままパイプの後のコマンドの入力となる。
【００８１】
図２（ｂ）の符号ｋに示すように、支援装置１７０は、図２（ａ）に示す入力コマンドのパイプ記号”|”をハードウェアパイプに置き換え、コンフィグ群を接続したネット１７０Ａ（図１参照）としてＦＰＧＡアクセラレータ１４０に書き込む（ロードする）。ここでは、図２（ｂ）の符号ｌに示すように、支援装置１７０は、入力コマンドを、ＦＰＧＡアクセラレータ１４０の部分再構成領域(1)〜(9)にマッピングし、かつ、部分再構成領域間(1)〜(9)をデータパス１４１でつなぐように制御する。すなわち、入力コマンドのパイプ前後のコマンドがＦＰＧＡアクセラレータ１４０内のハードウェアパイプで結合された前後の部分再構成領域にマッピングされるように制御する。具体的には、下記の通りである。
【００８２】
図２（ａ）に示すコマンド「$ jot -r 1000000 0 65535」（図２の符号ａ１参照）は、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(1)に導入され、図２（ａ）に示すコマンド「paste -d ' ' - -」（図２の符号ａ２参照）は、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(2)に導入される。続いて、図２（ａ）に示すコマンド「awk '{print $1,"^2+",$2,"^2<65535^2"}'」（図２の符号ａ３参照）は、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(3)に導入され、図２（ａ）に示すコマンド「bc」（図２の符号ａ４参照）は、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(4)に導入される。以下同様に、図２（ａ）に示すコマンドのすべてがＦＰＧＡアクセラレータ１４０の部分再構成領域に導入される。図２（ａ）に示すように、コマンド数は、８個であるので、図２（ａ）に示すコマンド「bc ?」（図２の符号ａ８参照）が最終段となり、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(8)に導入される。
【００８３】
本実施形態では、ＦＰＧＡアクセラレータ１４０は、９個の部分再構成領域(1)〜(9)を有するので、９個の部分再構成領域(1)〜(9)に対してコマンド数が８個となり、部分再構成領域(9)が１つ余る。しかしながら、パイプ接続は動的再構成領域チェイン構成を取る必要があるので、最終段コマンド以降の部分再構成領域（ここでは、部分再構成領域(9)）にbypassコマンドを導入し、動的再構成領域チェインの数がパイプで接続されたコマンド数と同じになるようにする。
【００８４】
上記部分再構成領域(1)〜(9)にマッピングに加え、部分再構成領域間(1)〜(9)の前後の部分再構成領域を１本ずつのデータパス１４１によって１次元に連結する（動的再構成領域チェイン）構成を採る。図２（ｃ）の符号ｈに示すように、入力１本がＦＰＧＡアクセラレータ１４０上の部分再構成領域(1)に入力し、部分再構成領域(1)の出力１本が部分再構成領域(2)に入力し（図２の符号ｉ参照）、部分再構成領域(2)の出力１本が部分再構成領域(3)に入力し、以下順にＦＩＦＯ型データ構造を繰り返し、部分再構成領域(9)の出力１本がＦＰＧＡアクセラレータ１４０から出力される（図２の符号ｊ参照）。
【００８５】
単体のコマンドは、ＦＰＧＡアクセラレータ１４０上に一時的に構成された演算回路によって実現される。コマンドが終了した後は、演算回路の構成情報はＦＰＧＡアクセラレータ１４０から消去される。
演算システム１００は、パイプの実装はＦＰＧＡアクセラレータ１４０上のハードウェアパイプによってなされ、全てのハードウェアパイプは並列に動作する。このようにすることで、拡張バス１５０を入出力データが通る回数は高々一回までに抑えられる。このため、ＣＰＵ１１０とＦＰＧＡアクセラレータ１４０間のデータのやり取りに由来する実行速度低下を抑えることができる。
【００８６】
<動作のフローチャート>
図３は、支援装置１７０（シェルソフトウェア）の動作を示すフローチャートである。本シェルソフトウェアは、図１のＣＰＵ１１０で実行される。
コマンド文字列受信により処理を開始する。
ステップＳ１１で、ＣＰＵ１１０は最大コマンド受付数Ｎと現在の受付数ｎを設定する。例えば、最大コマンド受付数Ｎ＝９、現在の受付数ｎ＝０を設定する。
ステップＳ１２でコマンド文字列が終端に達したか否かを判別する。
コマンド文字列が終端に達していない場合（ステップＳ１２：Ｎｏ）、ステップＳ１３で、ＣＰＵ１１０は現在の受付数ｎが最大コマンド受付数Ｎと等しいか（ｎ＝Ｎか）否かを判別する。
現在の受付数ｎが最大コマンド受付数Ｎと等しくない場合（ステップＳ１３：Ｎｏ）、ステップＳ１４で、ＣＰＵ１１０は入力コマンドにパイプ記号”|”が現れるか、または文字列の終端が現れるまでコマンド文字列を読み込む。
【００８７】
ステップＳ１５では、現在の受付数ｎを１増加（インクリメント）した後、部分構成領域ｎに読み込んだコマンドを導入して上記ステップＳ１２に戻る。
上記ステップＳ１１〜ステップＳ１５の処理を、図２を参照して説明する。
図２（ｃ）に示すように、ＦＰＧＡアクセラレータ１４０上には部分再構成領域(1)−(9)が構成される。このため、最大コマンド受付数Ｎ＝９が設定される。上記ステップＳ１３でｎ＝Ｎでない場合は、下記処理が、上記ステップＳ１２でコマンド文字列が終端に達するまで繰り返される。
【００８８】
例えば、まず、図２（ａ）に示すコマンド「$ jot -r 1000000 0 65535」（図２の符号ａ１参照）が、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(1)に導入され、図２（ａ）に示すコマンド「paste -d ' ' - -」（図２の符号ａ２参照）が、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(2)に導入される。そして、図２（ｃ）の符号ｈに示すように、入力１本がＦＰＧＡアクセラレータ１４０上の部分再構成領域(1)に入力され、部分再構成領域(1)の出力１本が部分再構成領域(2)に入力される（図２の符号ｉ参照）。以下同様の処理が繰り返され、上記ステップＳ１２でコマンド文字列が終端に達すると、本ループを抜けてステップＳ１７に移行する。図２の例では、コマンド数は、８個であるので、図２（ａ）に示すコマンド「bc ?」（図２の符号ａ８参照）が最終段となり、図２（ｃ）に示すＦＰＧＡアクセラレータ１４０の部分再構成領域(8)に導入され、部分再構成領域(8)の出力１本が部分再構成領域(9)に入力されてステップＳ１７に移行する。
【００８９】
図３のフローに戻って、上記ステップＳ１３で、ＣＰＵ１１０は現在の受付数ｎが最大コマンド受付数Ｎと等しい場合（ステップＳ１３：Ｙｅｓ）、ステップＳ１６で、ＣＰＵ１１０はコマンドの連結個数が限度を超えていることを表示して処理を終了する（次のコマンドを待つ）。コマンドの連結個数が限度を超えている場合とは、パイプで接続されたコマンドの数がＦＰＧＡ上に準備された動的再構成チェインの数より多いときである。この場合、動作は不可能である旨をエラーメッセージなどでユーザに通知して本フローの処理を終了する。
【００９０】
一方、上記ステップＳ１２でコマンド文字列が終端に達した場合（ステップＳ１２：Ｙｅｓ）、ステップＳ１７に移行する。ステップＳ１７で、ＣＰＵ１１０は現在の受付数ｎが最大コマンド受付数Ｎと等しいか（ｎ＝Ｎか）否かを判別する。
現在の受付数ｎが最大コマンド受付数Ｎと等しくない場合（ステップＳ１７：Ｎｏ）、ステップＳ１８で、ＣＰＵ１１０は現在の受付数ｎを１増加（インクリメント）した後、部分構成領域ｎにbypassコマンドを導入（挿入）して上記ステップＳ１７に戻る。例えば、図２の場合、ＦＰＧＡアクセラレータ１４０上の部分再構成領域(1)〜(9)に対してコマンド数が８個であるので、最終段コマンド以降の部分再構成領域（部分再構成領域(9)）にbypassコマンドを導入し、動的再構成領域チェインの数がパイプで接続されたコマンド数と同じになるようにする。
【００９１】
現在の受付数ｎが最大コマンド受付数Ｎと等しい場合（ステップＳ１７：Ｙｅｓ）、ステップＳ１９に進む。
ステップＳ１９で、ＣＰＵ１１０は全ての部分再構成領域に導入したコマンド群を並列動作させる。
図２の場合、動的再構成領域チェインの中の部分再構成領域(1)〜(9)に導入されたコマンド群を並列動作させ、演算結果である部分再構成領域(9)の出力１本がＦＰＧＡアクセラレータ１４０から出力される（図２の符号ｊ参照）。
ステップＳ２０では、全てのコマンドが動作終了するまで一時停止する。全てのコマンドが動作終了すると、本フローの処理を終了する（次のコマンドを待つ）。
【００９２】
このように、上記フローでは、シェルのソフトウェアが入力コマンドを受け取ったとき、まずパイプで接続されたコマンドの数がＦＰＧＡアクセラレータ１４０上に準備された動的再構成領域チェインの数より大きいか、小さいか、同じかを判定する。動的再構成領域チェインの数よりコマンド数が多い場合、動作は不可能である旨をエラーメッセージなどでユーザに通知して終了する。
【００９３】
上記判定結果が、再構成チェインの数よりパイプで接続されたコマンド数が小さい場合、最終段コマンド以降に適当な数のbypassコマンドを導入（挿入）してパイプ接続し、動的再構成チェインの数がパイプで接続されたコマンド数と同じになるようにする。
挿入したbypassコマンドは、入力されたコマンド列のうち最後尾のコマンドが書き込まれた部分再構成領域が動的再構成領域チェインの終端の部分再構成領域とは異なる場合、使用されていない部分再構成領域に書き込まれることで、データを終端までバイパスしていき、最終的に終端のハードウェアパイプを通ってＣＰＵに返す役割がある。
【００９４】
次に、親シェルはパイプで区切られた各単独コマンドのみを実行する子シェルを起動する。ただし、接続されたコマンドの順序に沿って、動的再構成領域チェインの始点から順に回路コンフィグを導入するよう指示する。
最後に、親シェルからの入力を動的再構成領域チェインの始端のハードウェアパイプにつなぎ、終端のハードウェアパイプから出力される結果を標準出力としてユーザに提示する。
【００９５】
以上説明したように、本実施形態に係る演算システム１００（図１参照）は、コマンドラインプロンプトを表示して、コマンド行に入力されるコマンドを受付ける入力装置１６０と、入力されたコマンドを、ＦＰＧＡアクセラレータ１４０の部分再構成領域にマッピングし、かつ、部分再構成領域間をデータパスでつなぐように制御する支援装置１７０と、を備える。
【００９６】
支援装置１７０は、コマンドの出力データを次のコマンドの入力データとして接続する命令であるパイプ命令が発行された場合、前のコマンドを前の部分再構成領域にマッピングするとともに、後のコマンドを後の部分再構成領域にマッピングし、かつ、前後の部分再構成領域をデータパスによって分岐することなく一列になるように接続し、当該マッピングおよび当該接続を全てのパイプ命令に対して繰り返したのち、先頭となるコマンドの入力をＣＰＵ１１０から導入し、終端となるコマンドの出力をＣＰＵ１１０に戻す設定を行う。
ＦＰＧＡアクセラレータ１４０は、支援装置１７０が設定した部分再構成領域のマッピングと、前後の部分再構成領域を１本ずつのデータパス１４１（図１参照）によって１次元に連結したＦＩＦＯ型のデータ構造において、全ての対象コマンドを並列に起動して処理を実行する。
【００９７】
本実施形態では、パイプの実装はＦＰＧＡ上のハードウェアパイプによってなされ、全てのハードウェアパイプは並列に動作する。本実施形態では、上述した既存構成２と同様に、専用の演算回路を用いた高速演算とコマンド群の完全な並列実行とが得られる。
【００９８】
また、図１の符号ｈ，ｊに示すように、拡張バス１５０を入出力データが通る回数は、高々一回までに抑えられるため、上述した既存構成２の課題であったＣＰＵとＦＰＧＡ間のデータのやり取りに由来する実行速度低下を抑えることができる。
すなわち、本実施形態によれば、上述した既存構成１が抱えていた課題を解決し、ユーザに対してシェルと同じインタフェースを提示しながら、上述した既存構成２と同様に、専用の演算回路を用いた高速演算と、演算群の並列実行と、メモリアクセス回数の低減による実行速度低下抑止の効果を得ることができる。
【００９９】
上記効果に加えて、本実施形態は下記の効果を有する。
<プログラミング手法の維持>
演算システム１００（図１参照）に対して、ユーザはワンライナー型のコマンド群としてプログラムを入力する。パイプを用いたシェルのワンライナーは、元来パイプによる一方向性のデータの流れのみを用いてプログラミングする環境といえるので、その結果を再構成チェインにマッピングすることが容易である。
このとき、ユーザは使用する機材の部分再構成領域群の接続関係の情報を意識することなく、ＣＰＵ１１０（図１参照）上でのワンライナーの実行と同様にプログラミングができる。
なお、予めＦＰＧＡアクセラレータ１４０内に構成された動的再構成領域チェインのサイズを超えたコマンドは接続できないため、支援装置１７０は、機材によって異なるコマンド接続最大数のみに留意しておけばよい。
【０１００】
<ＦＰＧＡ利用効率の向上>
演算システム１００（図１参照）は、図１および図２の符号ｈ，ｉ，ｊに示すように、処理のデータパス１４１（図１および図２参照）が一直線であるため、動的再構成領域チェインに含まれるハードウェアパイプのうち、実際に利用される割合が高く、ＦＰＧＡアクセラレータ１４０の利用効率が向上する。
特に、Ｕｎｉｘ系ＯＳにおいては、多く用いられるコマンドの設計思想として「単機能で高効率に製作すること」が挙げられる。全てのコマンドがこの思想によって作成されているわけではないが、この指針で作成されたコマンド群の内部処理の複雑性は同程度となりやすく、それらを部分回路コンフィグに変換した際も、回路規模がある一定値に近づく傾向を持つことが多いと考えられる。
【０１０１】
コマンド間の部分回路コンフィグの規模差が小さく比較的均一な大きさである場合、それらの最大サイズに合わせた部分再構成領域に導入したとき、余剰となる割合を小さく抑えることができる。その結果、同じ規模のＦＰＧＡアクセラレータ１４０上により多くの部分再構成領域の数を取ることができる可能性が高まる。これは「予めＦＰＧＡ内に構成された動的再構成領域チェインのサイズを超えたコマンドは接続できない」という条件を、動的再構成領域チェインの数が増えることによって緩和できることを意味し、よりＣＰＵ１１０上での実行時に近い使用感をユーザに提供することができる。
【０１０２】
図４は、コマンド間の部分回路コンフィグの規模が均一であるとき、領域の余剰なくＦＰＧＡアクセラレータ１４０を使用できることを説明する図である。
図４（ａ）に示すように、均一な回路規模のコマンド群４１は、図４（ｂ）に示す部分再構成領域(1)−(6)に導入される。部分再構成領域(1)−(6)は、均一な回路規模のコマンド群４１を収容可能なように設計される。図４（ｂ）に示すように、均一な回路規模のコマンド群４１は、部分再構成領域(1)−(6)に、領域の余剰なく導入される。余剰となる部分は少ないので、ＦＰＧＡアクセラレータ１４０の利用効率を高めることができる。
【０１０３】
なお、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【０１０４】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、又は、ＩＣ（Integrated Circuit）カード、ＳＤ（Secure Digital）カード、光ディスク等の記録媒体に保持することができる。
【符号の説明】
【０１０５】
１００  演算システム
１１０  ＣＰＵ（ホスト）
１２０  メモリ
１３０  補助記憶装置（外部記憶装置）
１３０Ａ  部分回路コンフィグ群
１４０  ＦＰＧＡアクセラレータ（アクセラレータ装置）
１４１  データパス
１５０  拡張バス
１６０  入力装置
１７０  支援装置
【図１】
2018206195.tif 000003
【図２】
2018206195.tif 000004
【図３】
2018206195.tif 000005
【図４】
2018206195.tif 000006
【図５】
2018206195.tif 000007
【図６】
2018206195.tif 000008
【図７】
2018206195.tif 000009
【図８】
2018206195.tif 000010