numthreads

Definiert die Anzahl der Threads, die in einer einzelnen Threadgruppe ausgeführt werden sollen, wenn ein Compute-Shader verteilt wird (siehe ID3D11DeviceContext::D ispatch).

numthreads(X, Y, Z)    

Die Werte X, Y und Z geben die Größe der Threadgruppe in einer bestimmten Richtung an, und die Summe von X*Y*Z gibt die Anzahl der Threads in der Gruppe an. Die Möglichkeit, die Größe der Threadgruppe über drei Dimensionen hinweg anzugeben, ermöglicht den Zugriff auf einzelne Threads auf eine Weise, die logisch 2D- und 3D-Datenstrukturen aufweist.

Wenn ein Compute-Shader beispielsweise eine 4x4-Matrixzufügung durchführt, können Numthreads auf numthreads(4,4,1) festgelegt werden, und die Indizierung in den einzelnen Threads würde automatisch mit den Matrixeinträgen übereinstimmen. Der Compute-Shader könnte auch mithilfe von numthreads(16,1,1) eine Threadgruppe mit der gleichen Anzahl von Threads (16, 1) deklarieren, aber dann müsste er den aktuellen Matrixeintrag basierend auf der aktuellen Threadnummer berechnen.

Die zulässigen Parameterwerte für Numthreads hängen von der Compute-Shaderversion ab.

Compute-Shader Maximum Z Maximale Anzahl von Threads (X*Y*Z)
cs_4_x 1 768
cs_5_0 64 1024

 

Die folgende Abbildung zeigt die Beziehung zwischen den parametern, die an ID3D11DeviceContext::D ispatch, Dispatch(5,3,2), den im numthreads-Attribut angegebenen Werten, numthreads(10,8,3) und Werten, die für die threadbezogenen Systemwerte (SV_GroupIndex,SV_DispatchThreadID,SV_GroupThreadID,SV_GroupID) an den Compute-Shader übergeben werden.

Abbildung der Beziehung zwischen Dispatch, Threadgruppen und Threads

Dieses Attribut wird in den folgenden Shadertypen unterstützt:

Scheitelpunkt Hull Domain Geometrie Pixel Compute
x

 

Attribute des Shadermodells 5

Shadermodell 5