高並列の専用ハードを実現できるFPGA

Intelは2015年の12月にFPGAメーカーのAlteraを買収した。FPGA(Field Programmable Gate Array)は、その名の通り、ユーザのところで機能を決めるプログラムを行うことができるゲートアレイである。

そして、現在では、論理ゲートだけでなく、各種の高速I/O、SRAMブロック、DSPなどのブロックも備えられており、かなり複雑で高機能のLSIを作れるようになってきている。

FPGAの1つの使い方は、アクセラレータとして使うというものである。処理に必要な機能に特化したハードウェアロジックを作ることにより、プロセサを使ってソフトウェアで処理するのと比べて非常に高速の処理が可能になる。パターンマッチングや機械学習、コンピュータビジョンや音声認識、ネットワークのディープパケット検査などの分野で使われている。

第2の使われ方は、ユーザが必要とするハードウェアを短期間で作るというものである。カスタムLSIを作ろうとすれば、論理回路の完成からでも少なくとも半年程度はかかるが、FPGAを使えば、問題が無ければCAD処理で1日で出来てしまう。FPGAの値段は安くはないが、億円単位といわれるカスタムLSIの開発費は不要であるので、少量生産の製品の場合はFPGAを使うほうが安上がりである。また、大量生産の製品の場合も、まず、FPGAで作ってバグを修正してからカスタムLSIの開発に取り掛かるというやり方が一般的になっている。

第3の使い方は、制限時間に遅れることが許されないハードなリアルタイム制御を行うシステムを作る場合である。割り込みを受けてソフトウェアで処理するという方法ではキャッシュミスなどが発生すると処理時間が延びてしまい間に合わないということが起こる。確実に制限時間に間に合わせる必要がある用途では、FPGAなどを使って専用のロジックを作らざるを得ない。

FPGAの使われ方は、高並列の専用ロジックを作ってアクセラレータとして使う。開発時間が短いことから、試作や少量生産の装置を作る。ハードなリアルタイム性を要求される装置を作るなどがある

AlteraのFPGA

次の図はAlteraのStratix V FPGAのチップ写真にオーバレイで説明を加えたものであるが、黄色の枠で囲まれている部分が、高速シリアルI/Oなどに使えるFlexible I/O、空色の枠の部分には汎用のロジックゲートと配線、赤枠の部分はメモリブロック、緑色の枠の部分はDSPのブロックである。なお、I/Oはチップの左右の端だけに存在するが、その他の部分は大部分がロジックエレメントで、メモリやDSPのブロックはある程度の数が埋め込まれている。

チップの左右にFlexible I/Oのブロックがあり、内部は論理ゲートを作るロジックエレメントで埋められている。また、組み込みのメモリブロックやDSPのブロックが埋め込まれている

FPGAを使って所望の機能のLSIを作るには、まず、必要な機能をVerilogやVHDLなどで記述する必要がある。そして、CADを使って合成を行い、FPGAにマップできる論理回路を作る。さらに、Placement & Routingで、それぞれのゲートやその他の部品をどの位置に配置し、その間の配線をどう接続するかを決める。これもCADが行ってくれる。

ユーザは、この結果を使ってシミュレーションで動作を確認し、バグがあればVerilogやVHDLを修正する。

また、配置配線が決まると、回路の動作速度や消費電力の見積もりが出来るようになる。これで問題が無ければ設計は終わりで、アセンブラでFPGAに書き込むデータを作ればよい。しかし、配線が多すぎて接続しきれない、動作速度や消費電力が要求する値を満たさないなどの場合は、設計者が介入して問題を解決することが必要になる。

実現する機能をHDLやOpenCLで記述すれば、FPGA設計CADがFPGAへのマッピングから配置配線を行ってくれる。問題が無ければ、これで設計が終わる

次の図は2つの入力をLoadして、加算した結果をStoreするという機能をFPGAで実現する例で、ここではVerilogなどのHDLではなく、OpenCLでロジックを記述している。作られるロジックはパイプラインでLoad、Add、Storeを順に処理するもので、それを必要な数だけ複製して並列処理を行えるようにしている。

OpenCLの記述からパイプラインを合成し、それを繰り返して並列処理ができるFPGAを作る例

また、このカーネルパイプラインにプロセサインタフェースやメモリインタフェースを付け加えたFPGA全体のブロック図は、次のようになる。

前述の処理カーネルにプロセサインタフェースやメモリインタフェースを付け加えたFPGA全体のブロック図

ハードウェアロジックで上手く処理ができれば、同じ処理をマイクロプロセサを使ってソフトウェアで処理するのと比べて、圧倒的に高性能となるだけでなく、消費電力も小さくて済む。ハードウェアロジックをFPGAで作るというのはコンピューティングの新しいフロンティアとなってきている。

Intelは、2016年3月のOpen Compute Summitでの講演の中でXeon CPUとAlteraのArria 10 GX FPGAを同一パッケージの入れたものを見せた。まだ、これは正式の製品にはなっていないが、このような製品はIntelの視野に入っていると思われる。