Intel® FPGA SDK for OpenCL™: ベスト・プラクティス・ガイド

ID 683521
日付 12/08/2017
Public
ドキュメント目次

1.1. FPGA概要

フィールド・プログラマブル・ゲート・アレイ(FPGA)は、集積回路であり、無限の数の機能を実行するために繰り返し構成できます。
FPGAはいくつかの小さなコンピューティング・ユニットで構成されています。次の図に示すように、コンピューティング・ユニットをプログラミングして接続することで、カスタムデータパスをファブリックに直接組み込むことができます。データフローはアーキテクチャに直接プログラミングされています。
図 1. FPGAアーキテクチャ

FPGAでは、ビットマスキング、シフト、加算などの低レベルの動作がすべて設定可能です。また、これらの動作を任意の順序でアセンブルできます。計算パイプラインを実装するために、FPGAはルックアップ・テーブル(LUT)、レジスター、オンチップメモリー​​、および算術ハードウェア(例えば、デジタル信号プロセッサー(DSP)ブロック)の組み合わせを再構成可能な接続のネットワークを介して統合します。その結果、FPGAは高度なプログラマビリティを実現します。 LUTは、さまざまなロジック機能を実装します。例えば、LUTをリプログラミングすることにより、ビット単位のAND論理関数からビット単位のXOR論理関数に演算を変更することができます。

アルゴリズムを高速化するためにFPGAを使用することの主な利点は、幅広く異機種でユニークなパイプライン実装をサポートすることです。この特性は、対称型マルチプロセッサー、DSP、およびグラフィックス処理ユニット(GPU)などの多くの異なるタイプの処理ユニットとは対照的です。これらのタイプのデバイスでは、同じ汎用コンピューティング・ハードウェアを複数回複製することによって並列性が実現されます。しかし、FPGAでは、アルゴリズムが実行するロジックのみを複製することで並列処理を実現できます。

プロセッサーは、各クロックサイクルで実行できる作業量を制限する命令セットを実装します。たとえば、ほとんどのプロセッサーには、次のCコードを実行できる専用命令がありません。

E = (((A + B) ^ C) & D) >> 2;

このCコード例のための専用の命令がないと、CPU、DSP、またはGPUは、動作を実行するために複数の命令を実行する必要があります。対照的に、FPGAは、ソフトウェア・アルゴリズムに必要な命令セットを実装できるハードウェア・プラットフォームと考えることができます。上記のコード例を1クロックサイクルで実行する一連の動作を実行するようにFPGAをコンフィグレーションすることができます。 FPGA実装は、特殊な追加ハードウェアとビット単位のXORおよびAND演算を実行するLUTを接続します。その後、デバイスはプログラマブルな接続を使用して、ハードウェア・リソースを消費することなく2ビット右シフトを実行します。この動作の結果は、複雑なパイプラインを形成する後続の動作の一部になります。