ループは、アルゴリズム コードの繰り返しを示す基本的な 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 個になることがあります。これらの値は、インプリメンテーションでの選択によって大きく異なります。この例では、必要なエリアは小さいですが、レイテンシは長くなります。