Использование `stage_in` в вычислительной функции в металле - PullRequest
1 голос
/ 30 октября 2019

Я читал Metal Shading Language спецификацию Apple, и меня интересует параметр stage_in. В документе сказано, что этот идентификатор можно использовать для реализации ввода для каждого потока.

Атрибут stage_in в функции ядра позволяет отделить тип данных, используемый для объявления входных данных для потока в функции, от фактического типа данных, используемого для хранения входных данных для потока.

Теперь, это очень типичная ситуация для шейдера ядра, который выполняет тяжелые вычисления в аргументах больших контейнеров данных. Например, если вы реализуете умножение матриц с помощью шейдера Metal, вам придется передавать эти данные в графический процессор и извлекать необходимые фрагменты в каждом потоке графического процессора для выполнения умножения. И я заметил, что одним из самых больших узких мест в шейдере Metal является динамическая индексация таких массивов, и иногда очень трудно этого избежать.

Итак, что я понял из спецификации Metal Shading Language, что это *Параметр 1014 * решает эту проблему. Это позволяет каким-то образом (ну, не как-то, но с использованием механики attributes) связывать только необходимый фрагмент данных с каждым потоком графического процессора, и мне не нужно извлекать данные из массива с динамическими индексами, потому что функция будет связана с необходимымчасть данных с самого начала.

Я нахожусь в процессе выяснения того, как использовать stage_in с kernel шейдерами, но теперь у меня возникают вторые мысли - верны ли мои предположения относительно stage_in? Решает ли это проблему с динамическим индексированием?

...