При работе с металлическими шейдерами / вычислительными ядрами на iOS или MacOS ...
MTLComputePipelineState
имеет предел maxTotalThreadsPerThreadgroup
.
Этот лимит можно запросить после создания состояния конвейера. Это ограничение зависит как от характеристик оборудования графического процессора, версии ОС, так и от кода ядра Metal.
- Какие аспекты кода ядра Metal влияют на MTT-ComputePipelineState maxTotalThreadsPerThreadgroup?
- Что можно сделать, чтобы увеличить значение при фиксированной комбинации аппаратного обеспечения / ОС?
Например:
- Зарегистрировать использование?
- длина кода?
- Принудительное встраивание?
(Вопрос не в том, как рассчитать оптимальные размеры, а в том, как изменить код для достижения наибольшей группы потоков.)
Ссылка на документы Apple для MTLComputePipelineState
:
https://developer.apple.com/documentation/metal/mtlcomputepipelinestate/1414927-maxtotalthreadsperthreadgroup
Ссылка на документы Apple для "Расчет размеров группы потоков и сетки":
https://developer.apple.com/documentation/metal/calculating_threadgroup_and_grid_sizes?language=objc