インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
カーネルのループの入れ子の反復を並列に実行するスレッドは、内部的にスレッドグループとグループ内のスレッドで構成されます。ソフトウェア・スタックでは、スレッドグループは 2 次元です。このスレッドグループの形状を指定する方法があります。形状は固定で、ランタイムはすべてのカーネルにおいて同じ形状のスレッドを生成します。しかし、カーネルのパフォーマンスは、スレッドグループの形状に大きく依存することがあります。例えば、2x8 のスレッドグループは、1x4 のスレッドグループよりも高速に処理します。
各スレッドには、次のいずれかの関数により取得可能な 2 次元のハードウェア座標があります。
_gfx_gpgpu_group_count
_gfx_gpgpu_local_size
_gfx_gpgpu_group_id
_gfx_gpgpu_local_id
スレッドグループは、スレッド空間と呼ばれる 2 次元配列にまとめられます。_GFX_set_thread_space_config 関数により、必要に応じてスレッド空間の形状を指定できます。この関数は、次の 4 つの環境変数によってオーバーライドされます。
GFX_THREAD_GROUP_WIDTH はスレッドグループの幅を設定します。
GFX_THREAD_GROUP_HEIGHT はスレッドグループの高さを設定します。
GFX_THREAD_SPACE_WIDTH はスレッド空間の幅 (スレッド数) を設定します。
GFX_THREAD_SPACE_HEIGHT はスレッド空間の高さ (スレッド数) を設定します。
次に例を示します。
set GFX_THREAD_GROUP_WIDTH=2 set GFX_THREAD_GROUP_HEIGHT=8
デフォルトの形状をオーバーライドするには、幅と高さの両方を指定します。width と height の積は、ハードウェア固有のスレッドグループのサイズの上限を超えてはなりません。 上限を超えると、ランタイムはエラーメッセージを出力し、実行をアボートします。
第 4 世代インテル® Core™ プロセッサーとインテル® Xeon® プロセッサー v3 製品ファミリーでは、上限は 64 です。
ここで説明した関数と環境変数は、GFX_MAX_THREAD_COUNT 環境変数よりも優先されます。