再構成可能コンピューティング
再構成可能コンピューティング（さいこうせいかのう-、Reconfigurable Computing）は、ソフトウェアの持つ柔軟性とFPGAなどの高度に柔軟な高速コンピューティング構造による高性能ハードウェア処理を組合わせたコンピュータ・アーキテクチャである。一般的なマイクロプロセッサを使った場合との根本的な違いは、制御フローに加えて実際のデータ経路を変更する能力があることである。一方、ASICなどの専用ハードウェアとの主な違いは、再構成可能な構造に動作中でも新たな回路構成を「ロード」することができる適応能力である。
歴史と特性
再構成可能コンピューティングの概念の発祥は1960年代ごろ、ジェラルド・エストリンの記念碑的論文で一般的なプロセッサに「再構成可能な」ハードウェアの配列を接続したコンピュータを提案したのが最初である。メインプロセッサは再構成可能ハードウェアのふるまいを制御する。再構成可能ハードウェアは画像処理やパターンマッチングなどの特定のタスクを実行するよう可及的速やかに仕立てられる。タスクが完了したら、そのハードウェアは別のタスク向けに構成し直される。これによってコンピュータはソフトウェアの汎用性とハードウェアの高速性を兼ね備えたものとなる。しかしこのアイデアは時期尚早であり、当時の電子回路技術では実現不可能だった。
1980年代から1990年代にかけて、この分野の研究は再び活気を帯びてきた。産業側でも学究側でも様々な再構成可能なアーキテクチャが開発された。たとえば、COPACOBANA, Matrix, Garp, Elixent, XPP, Silicon Hive, Montium, Pleiades, Morphosys, PiCoGA などである。これらのデザインが可能となったのは、半導体技術の進歩によって複雑なデザインをひとつのチップに実装できるようになったためである。世界初の再構成可能な商用コンピュータ Algotronix CHS2X4 は1991年に完成した。これは商業的には成功したとは言えないが、ザイリンクス社（FPGAの発明社）はこの技術と Algotronix の技術チームを買い取った。
計算のストリーミングモデルの例
問題: 長さ256のchar型配列 A[] と B[] があり、配列 C[] を C[i]=B[B[B[B[B[B[B[B[A[i]]]]]]]]] となるよう計算する。この問題は仮想的なものだが、実世界の問題にも似たような例はある。
ソフトウェアで解く場合、C言語では次のようなコードになる。
for(int i=0;i<256;i++)
{
char a=A[i];
for(int j=0;j<8;j++)
a=B[a];
C[i]=a;
}
このプログラムの実行には 256*10*CPI サイクルかかる。ここでCPIとは、1命令あたりのサイクル数である。
これを例えばFPGAなどハードウェアで実装した場合を示す。その場合、配列 'A' の各要素がマイクロプロセッサによって「ストリーム」化され、サイクル毎にFPGA上の回路に送り込まれる。配列 'B' はROM、例えばFPGAのBRAMに実装されるものとする。'B' とラベル付けされたROMに入っていく線はアドレス線であり、出てくる線はそのアドレスに格納されていた値を出力するものである。青い四角形は一時的な値を格納するレジスタである。見ての通り、これはパイプライン構造であり、8サイクルで C[i] の値を出力する。入力がストリーム化されていれば、出力もストリームとなる。
このハードウェア実装では、256+8 サイクルかかる。したがって、ソフトウェア実装に対して 10*CPI のぶんだけ高速化できると期待される。ただし、FPGAはクロック周波数が低いので、性能向上の度合いはそれよりも小さくなる。
粒度
再構成可能ロジックの粒度は最小機能ユニットのサイズで定義され、マッピングツールで扱う単位となる。粒度が細かいとアルゴリズムをハードウェアに実装する際の柔軟性が増す。しかし、細粒度では消費電力が増加し、経路変更に時間がかかるため、再構成による遅延が大きくなる。細粒度アーキテクチャはビット単位の操作が可能だが、大雑把な粒度ではより一般的なアプリケーション向きに最適化されている。粒度が大きいアーキテクチャの問題点は計算対象が小さいと使われない回路要素が出てくる点である。例えば、1ビットの加算を4ビット幅の機能ユニットで構成すると3ビット分無駄にすることになる。この問題は粒度の粗いものと粒度の細かいものを混合した構成にすることで解決できる。
粗い粒度のアーキテクチャでは、ワード幅のデータパスを必要とするアルゴリズムを実装することを想定している。このため、細かい粒度の機能ユニットで同等機能を実現した場合に比べて消費電力も性能も有利である。中には一般的な特定のアルゴリズムを実装済みで、それに限定された修正を加えるための機能ユニットが付属したタイプのデバイスも存在する。
再構成の頻度
再構成は実行中あるいは実行と実行の間に行われ、それを deployment time（配備時間）と呼ぶ。deployment timeの間に bitstream を使ってデバイスを再構成する。細粒度のシステムは前述した通り経路接続が多くなるために再構成に時間がかかり、消費電力も増える。また、再構成の頻度が少なければ、消費電力的にも遅延時間の面からも有利となる。部分的に再構成を行いつつ、同時に再構成していない部分で計算を続けるということもあり、その場合は消費電力もあまり増えないし遅延も最小に抑えられる。bitstream を圧縮することも原理的には可能であるが、データを伸長する際の計算にかかる時間と電力を考慮すると効果はそれほど大きくは無い。
ホストとの接続
再構成可能デバイスはホストとなるプロセッサに接続してアクセラレータとして使われる。どのような構成が最適かを考えるには、データ転送の種類、遅延時間、電力、性能向上の度合いを考慮する必要がある。最も直感的なデザインとしては、コプロセッサを接続するようなバスで再構成可能デバイスを接続する方法がある。しかし、中にはホストプロセッサのレジスタに再構成可能デバイスが直接アクセスできるような密な接続をした例もある。ホストプロセッサは再構成可能デバイスの機能を呼び出したり、再構成を行ったり、外部とのインターフェイスを受け持つ。
ルーティング/相互接続
再構成可能デバイスの柔軟性は、主にその相互接続のルーティングによるものである。FPGAのベンダーであるザイリンクスやアルテラの相互接続のスタイルは、アイランド（島）型のレイアウトであり、二次元の配列状に機能ユニットが並んでいる。不適切なルーティングをすると、柔軟性が損なわれ、資源が無駄となり、性能が制限される。相互接続を余分に行ってしまうと、必要以上にトランジスタを使ってしまい、シリコン上の領域を消費し、経路が伸びて電力消費が多くなる。
ツールフロー
一般に再構成可能コンピューティングのツールはふたつに分類される。再構成可能デバイスのEDAツールとCPUのコンパイルツールである。フロントエンドのコンパイラはこれらを統合したツールであり、構造化されたハードウェア表現形式を生成してハードウェア設計フローへの入力とする。ハードウェア設計フローは、テクノロジーマッピング、配置アルゴリズム、経路設定アルゴリズムの三段階に分けられる。
データフロー型プロセッサには再構成可能コンピューティングを使って実装されたものもある。