numthreads
コンピュート シェーダーのディスパッチ時に 1 つのスレッド グループで実行するスレッド数を定義します (「ID3D11DeviceContext::Dispatch」を参照してください)。
numthreads(X, Y, Z)
X、Y、Z の値はそれぞれの方向におけるスレッド グループのサイズを示し、X*Y*Z の合計によってグループのスレッド数が決まります。3 つの次元でのスレッド グループのサイズ指定が可能なことで、論理的に 2D および 3D のデータ構造体を使用して個々のスレッドにアクセスできるようになります。
たとえば、コンピュート シェーダーで 4x4 の行列の加算を実行する場合、numthreads を numthreads(4,4,1) に設定することができます。これにより、個々のスレッドのインデックスが行列のエントリに自動的に一致するようになります。コンピュート シェーダーで numthreads(16,1,1) を使用して、同じ数 (16) のスレッドのスレッド グループを宣言することもできますが、その場合、現在のスレッド番号に基づいて現在の行列のエントリを計算する必要があります。
numthreads で使用できるパラメーター値は、コンピュート シェーダーのバージョンによって異なります。
コンピュート シェーダー | Z の最大値 | 最大スレッド数 (X*Y*Z) |
---|---|---|
cs_4_x | 1 | 786 |
cs_5_0 | 64 | 1024 |
次の図は、ID3D11DeviceContext::Dispatch に渡すパラメーター値 Dispatch(5,3,2)、numthreads 属性で指定する値 numthreads(10,8,3)、およびスレッド関連のシステム値 (SV_GroupIndex,SV_DispatchThreadID,SV_GroupThreadID,SV_GroupID) としてコンピュート シェーダーに渡す値との関係を示しています。
この属性は、次の種類のシェーダーでサポートされています。
頂点 | ハル | ドメイン | ジオメトリ | ピクセル | 演算 |
---|---|---|---|---|---|
x |