Отладка производительности металла

У меня есть приложение Metal на iOS, в котором я беру видеокадры и передаю каждый кадр через несколько шейдеров, некоторые из них являются вычислительными шейдерами, применяемыми за несколько проходов, а 4 из них являются независимыми MTKView, которые отображают вычисленные текстуры (например, гистограмму) вместе с предварительным просмотром видео. . Иногда (но не всегда) на более старом оборудовании, таком как iPhone 6s, я замечаю, что приложение стало слишком медленным, частота кадров упала до 1 или 2 кадров в секунду. Пожалуйста, дайте мне знать, как отлаживать, какие шейдеры Metal забивают GPU / GPU и как оптимизировать производительность кода, связанного с Metal.


person Deepak Sharma    schedule 18.05.2018    source источник
comment
Телефон становится особенно горячим при падении частоты кадров до 1 или 2 кадров в секунду?   -  person Matthijs Hollemans    schedule 18.05.2018
comment
Нет, ничего подобного. Иногда частота кадров возвращается к норме примерно через 20 секунд.   -  person Deepak Sharma    schedule 18.05.2018
comment
Можете ли вы указать мне список инструментов отладки и профилирования для Metal и любые статьи / видео, в которых показано, как их использовать?   -  person Deepak Sharma    schedule 18.05.2018
comment
Посмотрите видео о металле с прошлогодней WWDC. Они есть на сайте Apple.   -  person Matthijs Hollemans    schedule 18.05.2018
comment
Я проверил их, но похоже, вам нужно посмотреть другие видео, прежде чем вы сможете полностью их понять. Я не могу найти другие видео.   -  person Deepak Sharma    schedule 19.05.2018
comment
Небольшое примечание: вы не сможете запускать вычислительные шейдеры на A7 и обрабатывать видео достаточно быстро, чтобы не отставать от полноэкранного видео со скоростью 30 кадров в секунду. Даже фрагментные шейдеры могут быть слишком медленными на A7, хотя A8 и более новые графические процессоры достаточно быстры для выполнения рабочих нагрузок вычислений видео.   -  person MoDJ    schedule 10.09.2018


Ответы (1)


  1. Запустите ваше приложение в Xcode.
  2. Выберите Debug -> Capture GPU frame.
  3. Выберите "Навигатор проблем" на левой панели инструментов.
  4. Выберите время выполнения
  5. Устраните перечисленные проблемы, как минимум, с «высоким» приоритетом.
  6. Вы также можете увидеть, на что расходуется производительность, посмотрев drawPrimitives и т.д. раз в навигаторе отладки слева.

Чтобы просмотреть сведения о производительности шейдера, выберите вызов отрисовки или отправки из списка событий слева. Есть раздел «производительность».

person SurvivalMachine    schedule 27.05.2018
comment
@DeepakSharma Я обновил свой ответ, чтобы отобразить дополнительную информацию о производительности. - person SurvivalMachine; 27.05.2018
comment
Где именно я нахожу раздел производительности? Я не вижу кодировщика команд вычислений на левой панели. Только команды рендеринга! - person Deepak Sharma; 27.05.2018
comment
Я вижу это на устройствах iOS 11, но не на iOS 10 :( - person Deepak Sharma; 27.05.2018
comment
Я думаю, это связано с выполнением вычислительного шейдера во время захвата кадра графическим процессором! - person Deepak Sharma; 27.05.2018