インテルのみ表示可能 — GUID: mwh1391807501175
Ixiasoft
6. NDRangeカーネルのデータ処理効率を向上させるための戦略
次のカーネルコードを検討してください。
__kernel void sum (__global const float * restrict a, __global const float * restrict b, __global float * restrict answer) { size_t gid = get_global_id(0); answer[gid] = a[gid] + b[gid]; }
このカーネルは、配列aとbを一度に1つずつ追加します。各Work-Itemは、2つの要素(各配列から1つずつ)を追加し、和を配列の回答に格納する役割を担います 。最適化がなければ、カーネルはWork-Itemごとに1回の追加を実行します。
OpenCL™カーネルのパフォーマンスを最大にするには、適用可能な最適化手法を実装して、データ処理効率を向上させることを検討してください。
- 最大ワーク・グループ・サイズまたは必要なワーク・グループ・サイズの指定
可能であれば 、カーネルのmax_work_group_size属性またはreqd_work_group_size属性を指定します。これらの属性により、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーは余分なロジックなしでカーネルをハードウェア・リソースに一致させるための積極的な最適化を実行します。 - カーネルのベクトル化
カーネルのベクトル化により、Multiple Work-Itemを単一命令複数データ(SIMD)形式で実行することができます。 - 複数のコンピューティング・ユニット
より高いスループットを達成するために、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーはカーネルごとに複数のコンピューティング・ユニットを生成できます。 - コンピューティング・ユニット複製とカーネルSIMDベクトル化の組み合わせ
複製またはベクトル化されたOpenCLカーネルがFPGAに収まらない場合、コンピューティング・ユニットを複製してカーネルをベクトル化することによって、カーネルを変更できます。 - リソース駆動型最適化
Intel® FPGA SDK for OpenCL™オフライン・コンパイラーは、様々な値のカーネル属性を組み合わせる効果を自動的に分析し、リソース駆動型の最適化を実行します。 - HTMLレポートのカーネルプロパティとループアンロールステータスの確認
NDRangeカーネルをコンパイルすると、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーは <your_kernel_filename>/reports/report.htmlファイルを生成して、選択されたカーネル・プロパティーとループアンロール・ステータスに関する情報を提供します。