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_GroupIndexSV_DispatchThreadIDSV_GroupThreadIDSV_GroupID) の計算シェーダーに渡される値の関係を示しています。

ディスパッチ、スレッド グループ、スレッド間の関係の図

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

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

 

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

シェーダー モデル 5