Поделиться через


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

 

Атрибуты модели шейдера 5

Модель шейдера 5