work_group_size_hint - 2020.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2021-03-22
Version
2020.2 Japanese

説明

重要: これはコンパイラ ヒントであり、コンパイラにより無視される可能性があります。

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
...