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

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

1.2. パイプライン

パイプライン・アーキテクチャでは、入力データは一連のステージを通過します。各ステージは、メモリー動作や計算な​​どの最終結果に貢献する動作を実行します。

マイクロプロセッサー、デジタル信号プロセッサー(DSP)、ハードウェア・アクセラレーター、およびデジタル・ハードウェアの他の高性能実装のデザインは、パイプライン・アーキテクチャを含むことが多いです。

たとえば、以下の図は、多段パイプラインとしての次のコード例を表しています。 

for (i = 0; i < 1024; i++) { y[i] = (a[i] + b[i] + c[i] + d[i] + e[i] + f[i] + g[i] + h[i]) >> 3; }
図 2. 多段パイプライン図の例 


パイプライン・アーキテクチャでは、各算術演算はパイプラインに一度に1つずつ渡されます。したがって、上の図に示すように、飽和パイプラインは、算術演算を同時に並列に計算する8つのステージから構成されています。さらに、多数のループ反復のために、パイプライン・ステージは、後続の各ループ反復に対してこれらの算術命令を同時に実行し続けます。

インテル® FPGA SDK for OpenCL™ のパイプライン・アプローチ

新しいパイプラインがデザインに基づいて構築されます。その結果、高度に構成可能なFPGAの性質に対応することができます。

次のOpenCLコードの断片を検討してください。

C = (A >> 5) + B; F = (D – E) << 3; G = C + F;

FPGA全体を同時に実行する複雑なパイプライン構造をインスタンス化するようにFPGAを設定することができます。この場合、SDKは、下の図に示すように、コードをパイプライン型加算器に入力する2つの独立したパイプライン・エンティティとして実装しています。

図 3.  SDKのパイプライン・アプローチの例


Intel® FPGA SDK for OpenCL™オフライン・コンパイラー多数のWork-Item内の動作を並行して実行できるようにすることで、計算を高速化するカスタム・パイプライン構造を提供します。オフライン・コンパイラーは、以下に示すように、クロックサイクルごとに変数CF 、およびGの値を計算するカスタム・パイプラインを作成できます。ランプアップの後、パイプラインは1サイクルあたりSingle Work-Itemのスループットを維持します。

図 4. クロックサイクル当たり3つの動作を持つFPGAパイプライン


従来のプロセッサーは、共有レジスターのセットが限られています。最終的に、プロセッサーは、記憶されたデータをメモリーに書き出して、より多くのデータがレジスターを占めるようにしなければなりません。オフライン・コンパイラーは、パイプライン内のすべてのアクティブなWork-Itemsのデータを格納するのに十分なレジスターを生成することによって、データをライブ」に保ちます。次のコード例および図は、OpenCLパイプラインのライブ変数Cを示しています。

size_t index = get_global_id(0); C = A[index] + B[index]; E[index] = C – D[index];
図 5. ライブ変数Cを持つFPGAパイプライン