ループの並列処理 - 2019.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2020-02-28
Version
2019.2 Japanese

ループは、アルゴリズム コードの繰り返しを示す基本的な C/C++/OpenCL API 手法です。次の例に、ループ構造のさまざまな側面を示します。

  for(int i = 0; i<255; i++) {
    out[i] = in[i]+in[i+1];
  }
  out[255] = in[255];

このコードは、最後の値を除き、配列のすべての値に対して実行され、2 つの連続する値を加算します。このループが記述どおりにインプリメントされると、ループの各反復に 2 サイクルかかるので、合計 510 サイクルかかります。この詳細は、HLS プロジェクトのスケジュール ビューアーで確認できます。

図 1. スケジュール ビューアーに表示されたインプリメント済みループ構造

Vivado 合成結果では、これは合計とレイテンシで示されます。

図 2. パフォーマンス見積もりの合成結果

ここで重要なのは、レイテンシ値と LUT の使用数です。たとえば、コンフィギュレーションによって、レイテンシが 511、LUT の使用数が 47 個になることがあります。これらの値は、インプリメンテーションでの選択によって大きく異なります。この例では、必要なエリアは小さいですが、レイテンシは長くなります。