numthreads
Определяет количество потоков, выполняемых в одной группе потоков при отправке вычислительного шейдера (см. ID3D11DeviceContext::D ispatch).
numthreads(X, Y, Z)
Значения X, Y и Z указывают размер группы потоков в определенном направлении, а общее значение X*Y*Z — количество потоков в группе. Возможность указать размер группы потоков по трем измерениям позволяет получить доступ к отдельным потокам таким образом, чтобы логически 2D и трехмерные структуры данных.
Например, если вычислительный шейдер выполняет сложение матрицы 4x4, то для numthreads можно задать значение numthreads(4,4;1), а индексирование в отдельных потоках будет автоматически соответствовать записям матрицы. Шейдер вычислений также может объявить группу потоков с таким же количеством потоков (16) с помощью numthreads(16;1;1), однако затем ему придется вычислить текущую запись матрицы на основе номера текущего потока.
Допустимые значения параметров для numthreads зависят от версии вычислительного шейдера.
Вычислительный шейдер | Максимальное число 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).
Этот атрибут поддерживается в следующих типах шейдеров:
Вершина | Корпуса | Домен | Geometry | Пиксель | Вычисления |
---|---|---|---|---|---|
x |
Связанные темы