numthreads

コンピューティング シェーダーがディスパッチされるときに 1 つのスレッド グループで実行されるスレッドの数を定義します ( ID3D11DeviceContext::D ispatch を参照)。

numthreads(X, Y, Z)    

X、Y、Z の値は特定の方向のスレッド グループのサイズを示し、X*Y*Z の合計はグループ内のスレッド数を示します。 3 次元にわたってスレッド グループのサイズを指定する機能を使用すると、論理的に 2D および 3D データ構造の方法で個々のスレッドにアクセスできます。

たとえば、計算シェーダーが 4x4 マトリックス加算を実行している場合、numthreads を numthreads(4,4,1) に設定すると、個々のスレッドのインデックス作成は自動的にマトリックス エントリと一致します。 計算シェーダーでは、numthreads(16,1,1) を使用して同じスレッド数 (16) を持つスレッド グループを宣言することもできますが、現在のスレッド番号に基づいて現在のマトリックス エントリを計算する必要があります。

numthread に許容されるパラメーター値は、コンピューティング シェーダーのバージョンによって異なります。

計算シェーダー 最大 Z 最大スレッド数 (X*Y*Z)
cs_4_x 1 768
cs_5_0 64 1024

 

次の図は、ID3D11DeviceContext::D ispatch、Dispatch(5,3,2)、numthreads 属性で指定された値、numthreads(10,8,3)、スレッド関連のシステム値 (SV_GroupIndex,SV_DispatchThreadID,SV_GroupThreadID,SV_GroupID) の計算シェーダーに渡される値の関係を示しています。

illustration of the relationship between dispatch, thread groups, and threads

この属性は、次の種類のシェーダーでサポートされています。

Vertex Hull Domain ジオメトリ ピクセル Compute
x

 

シェーダー モデル 5 の属性

シェーダー モデル 5