説明
重要: これはコンパイラ ヒントであり、コンパイラにより無視される可能性があります。
OpenCL API 規格のワーク グループ サイズは、カーネル計算ユニットの 1 回の起動で処理可能な ND 範囲のサイズを定義します。OpenCL カーネルが OpenCL デバイスでの実行用に投稿されると、ND 範囲 (1、2、または 3 次元) と呼ばれるインデックス空間内で実行されます。
OpenCL カーネル関数は、ND 範囲インデックス空間の各点に対して 1 回のみ実行されます。ND 範囲の各点に対するこの処理ユニットは、ワーク アイテムと呼ばれます。ループ反復が順番どおりに順次実行される C の for
ループとは異なり、OpenCL ランタイムおよびデバイスではワーク アイテムを並列に任意の順序で実行できます。
ワーク アイテムは、計算ユニットにスケジューリングされるワーク ユニットであるワーク グループにまとめられます。オプションの WORK_GROUP_SIZE_HINT 属性は OpenCL 言語仕様の一部であり、ほとんどの場合に clEnqueueNDRangeKernel
への local_work_size
引数により指定されるワーク グループ サイズ値を示す OpenCL コンパイラへのヒントです。これにより、生成されたコードが指定した値に従って最適化されます。
ヒント: FPGA インプリメンテーションの場合、REQD_WORK_GROUP_SIZE の、代わりに WORK_GROUP_SIZE_HINT 属性をカーネルのカスタム ロジックの生成中にパフォーマンスを最適化するために使用できるので、この属性を指定することをお勧めします。
構文
カーネル定義の前、またはそのカーネル用に指定されたプライマリ関数の前に配置します。
__attribute__((work_group_size_hint(<X>, <Y>, <Z>)))
説明:
- <X>、<Y>、<Z>: カーネルの ND 範囲を指定します。カーネルのワーク グループのサイズを指定する 3 次元行列の各次元を表します。
例
次の例では、カーネルがほとんどの場合にワーク グループ サイズ 1 で実行されることをコンパイラにヒントとして指定しています。
__attribute__((work_group_size_hint(1, 1, 1)))
__kernel void
...