インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

スレッドグループとスレッド空間の形状の制御

カーネルのループの入れ子の反復を並列に実行するスレッドは、内部的にスレッドグループとグループ内のスレッドで構成されます。ソフトウェア・スタックでは、スレッドグループは 2 次元です。このスレッドグループの形状を指定する方法があります。形状は固定で、ランタイムはすべてのカーネルにおいて同じ形状のスレッドを生成します。しかし、カーネルのパフォーマンスは、スレッドグループの形状に大きく依存することがあります。例えば、2x8 のスレッドグループは、1x4 のスレッドグループよりも高速に処理します。

各スレッドには、次のいずれかの関数により取得可能な 2 次元のハードウェア座標があります。

スレッドグループは、スレッド空間と呼ばれる 2 次元配列にまとめられます。_GFX_set_thread_space_config 関数により、必要に応じてスレッド空間の形状を指定できます。この関数は、次の 4 つの環境変数によってオーバーライドされます。

次に例を示します。

set GFX_THREAD_GROUP_WIDTH=2
set GFX_THREAD_GROUP_HEIGHT=8

デフォルトの形状をオーバーライドするには、幅と高さの両方を指定します。widthheight の積は、ハードウェア固有のスレッドグループのサイズの上限を超えてはなりません。 上限を超えると、ランタイムはエラーメッセージを出力し、実行をアボートします。

第 4 世代インテル® Core™ プロセッサーとインテル® Xeon® プロセッサー v3 製品ファミリーでは、上限は 64 です。

ここで説明した関数と環境変数は、GFX_MAX_THREAD_COUNT 環境変数よりも優先されます。