Понимание iPhone OpenGL Профилирование - PullRequest
8 голосов
/ 22 апреля 2011

Мое приложение запущено и работает, и теперь я стремлюсь улучшить производительность рендеринга. Используя «Инструменты», я собрал некоторые данные. Я работаю со старым iPhone 3G как наихудший вариант сенарио.

Time Profiler:

-30%    CopyVertexElementsMultipleSequential
-11%    mach_msg_trap
-4%     _semwait_signal
-2%     ValidateState

Однако, используя Open GL ES Driver, сэмплер читает:

-70%    _semwait_signal
-24%    CopyVertexElementsMultipleSequential
-0.7%   mach_msg_trap

Просматривая документы, я не смог понять, в чем разница между OpenGL ES Sampler и Timer Profiler. Может ли кто-нибудь просветить меня?

1 Ответ

11 голосов
/ 22 апреля 2011

Во-первых, это просто инструмент Sampler, на который вы смотрите. Шаблон драйвера OpenGL ES просто включает в себя инструмент сэмплера и драйвер OpenGL ES. Он не имеет ничего общего с OpenGL ES.

Инструмент Sampler и Time Profiler различаются по способу сбора данных. Из Инструкции пользователя :

Инструмент Time Profiler и Сэмплерные приборы похожи, но Есть некоторые различия:

  • Time Profiler собирает данные обратной трассировки так же, как Shark, из пространство ядра. Сэмплер, с другой рука, собирает данные из пространства пользователя. Следовательно, Time Profiler является более эффективнее, чем Sampler при сборе данные.

  • Примечание: Time Profiler (и Shark) могут выдавать неточные данные обратного следа, если целевой процесс оптимизирован, чтобы пропустить указатели кадра.

  • Time Profiler может собирать данные из одного или всех процессов. Сэмплер может только образец одного процесса.

  • Time Profiler может выполнять выборку всех состояний потоков или только работающих потоков. Сэмплер всегда пробует всю нить состояния. Как правило, вы заинтересованы в бегущих темах. Когда ваш приложение зависло, вы хотите проверить все состояния потока.

Я предпочитаю использовать Time Profiler самостоятельно, с подходящим интеллектуальным анализом данных, таким как загрузка библиотек или методов для вызывающих абонентов.

Что касается профилирования приложения OpenGL ES, вам сначала нужно взглянуть на различные статистические данные, которые можно включить в инструменте драйвера OpenGL ES. Нажмите i справа от названия инструмента, чтобы открыть всплывающее окно, затем нажмите Configure, чтобы показать список возможных статистических данных, которые вы можете регистрировать. В частности, посмотрите статистику использования Tiler Utilization и Renderer. Включите те, которые вы хотите, вернитесь к предыдущему экрану и установите флажки, чтобы убедиться, что они зарегистрированы.

Если ваше приложение максимально увеличивает статистику использования тайлера , вы ограничены размером вашей геометрии. Сделайте все возможное, чтобы уменьшить это (используя некоторые из советов, которые я упоминаю здесь ), и вы увидите значительное повышение производительности. С другой стороны, если вы достигли максимального значения Renderer Utilization, у вас ограниченная скорость заполнения, и вам может потребоваться отключить MSAA, настроить фрагментные шейдеры (если используется OpenGL ES 2.0) или уменьшить размер области. Вы рендерите, между прочим.

Кроме того, запустите ваше приложение на устройстве с iOS 4.0 и используйте новый инструмент OpenGL ES Analyzer, который поставляется с Xcode 4. Этот инструмент отлично подходит для предложения горячих точек в коде рендеринга или потери производительности из-за избыточных вызовов состояния, и т.д.

Глядя на ваши конкретные данные трассировки, кажется, что вы тратите очень много времени на копирование геометрии в графический процессор. Я бы посмотрел на использование объекта буфера вершин (VBO), чтобы значительно уменьшить это.

...