インテルのみ表示可能 — GUID: mwh1391807505108
Ixiasoft
6.3.1. コンピューティング・ユニット複製対カーネルSIMDベクトル化
num_compute_units属性とnum_simd_work_items属性の両方は、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーがカーネルを実装するために使用するハードウェアの量を増やすことによってスループットを向上させます。num_compute_units属性は、ワークグループのスケジュールを設定できるコンピューティング・ユニットの数を変更し、カーネルがグローバルメモリーにアクセスする回数も変更します。対照的に、 num_simd_work_items属性は、コンピューティング・ユニットが単一のワークグループで並列に実行できる作業量を変更します。 num_simd_work_items属性は、各SIMD ベクタレーンでコントロールロジックを共有することによって、コンピューティング・ユニットのデータパスのみを複製します。
通常、num_simd_work_items属性を使用すると、num_compute_units属性を使用して同じ目標を達成するより効率的なハードウェアにつながります。num_simd_work_items属性を使用すると、オフライン・コンパイラーでメモリーアクセスを結合することもできます。
大域メモリーと競合する複数のコンピューティング・ユニッは、望ましくないメモリー・アクセス・パターンにつながる可能性があります。num_simd_work_itemsが num_compute_units属性の代わりに属性を導入することにより、望ましくないメモリー・アクセス・パターンを変更することができます。また、num_simd_work_itemsは、潜在的に属性num_compute_unitsがオファーを属性同等のカーネル演算ユニットの重複と同じ演算スループットを提供しています。
次のような状況では、 num_simd_work_items属性をカーネルに実装することはできません。
- num_simd_work_itemsに指定する値は、 2,4,8または16ではありません。
- reqd_work_group_sizeの値はnum_simd_work_itemsで割り切れません。
たとえば、50が4で割り切れないため、次の宣言は正しくありません。
__attribute__((num_simd_work_items(4))) __attribute__((reqd_work_group_size(50,0,0)))
- 複雑な制御フローを持つカーネル。別のWork-Itemは、(例えば、制御パスがget_global_IDまたはget_local_IDに依存)異なる制御経路をたどるするカーネルをベクトル化することはできません。
カーネルコンパイル時に、オフライン・コンパイラーは、ベクトル化最適化の実装が成功したかどうかを通知するメッセージを発行します。報告されたベクトル化係数がnum_simd_work_items属性に指定した値と一致すると、カーネルのベクトル化は成功します。