インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

5.2.8. SIMDワークアイテム数の指定

手動でカーネルコードをベクトル化することなく、複数のワークアイテムをSIMD (シングル・インストラクション・マルチプル・ワークアイテム) で実行し、OpenCL™カーネルのデータ処理効率を向上させることもできます。 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーに、SIMDまたはベクトル化された状態で実行するワークグループのワークアイテム数を指定してください。
重要: reqd_work_group_size属性とともに、num_simd_work_items属性を導入します。指定するnum_simd_work_items属性は、reqd_work_group_size属性に指定するワークグループ・サイズを均等に分割する必要があります。
ワークグループのSIMDワークアイテム数を指定するには、num_simd_work_item(N) 属性をカーネル・ソースコードに挿入します。
次のコード例は、64ワークアイテムの固定ワークグループ・サイズをカーネルに割り当てています。その後、各ワークグループのワークアイテムを4つのSIMDベクトルレーンに統合します。
__attribute__((num_simd_work_items(4)))
__attribute__((reqd_work_group_size(64,1,1)))
__kernel void test(__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];
}
オフライン・コンパイラーは可能な限り、num_simd_work_itemsに指定された値に従いカーネルのデータパスをベクトル化します。