Настройка приложения OpenGL

После Вас разработка и реализация Ваше приложение важно, чтобы Вы провели некоторое время, анализируя его производительность. Ключ к производительности, настраивающей Ваше приложение OpenGL, должен последовательно совершенствовать разработку и реализацию Вашего приложения. Вы делаете это путем чередования между измерением приложения, идентификацией, где узкое место, и удаление узкого места.

Если Вы будете незнакомы с общими проблемами производительности о платформе Macintosh, то Вы захотите к Обзору производительности чтения. Обзор производительности содержит общие подсказки по производительности, которые полезны для всех приложений. Это также описывает большинство инструментов производительности, предоставленных OS X.

Затем, внимательно изучите Инструменты. Инструменты консолидируют много измерительных инструментов в единственное всестороннее настраивающее производительность приложение.

Существует два инструмента кроме Профилировщика OpenGL, которые являются определенными для разработки OpenGL — Монитор Драйвера OpenGL и Разработчик Программы построения теней OpenGL. Монитор Драйвера OpenGL собирает данные реального времени из аппаратных средств. Разработчик Программы построения теней OpenGL обеспечивает непосредственную обратную связь на вершине и программах фрагмента, которые Вы пишете.

Для получения дополнительной информации об этих инструментах см.:

Следующие книги содержат много методов для получения большей части производительности от GPU:

Сбор и анализ базовых данных о производительности

Анализ производительности является систематическим процессом, запускающимся со сбора базовых данных. OS X обеспечивает несколько приложений, которые можно использовать для оценки базовой производительности для приложения OpenGL:

Этот раздел показывает, как использовать top вместе с Профилировщиком OpenGL для анализа, где потратить усилия по оптимизации — в коде OpenGL, другом коде приложения, или в обоих. Вы будете видеть, как собрать базовые данные и как определить отношение производительности OpenGL к полной производительности приложения.

  1. Запустите свое приложение OpenGL.

  2. Откройте Окно терминала и поместите его бок о бок с Вашим окном приложения.

  3. В Окне терминала ввести top и нажмите Return. Вы будете видеть вывод, подобный показанному на рисунке 15-1.

    top программа указывает сумму процессорного времени, которое использует приложение. Процессорное время служит хорошим базовым значением для измерения, в каком количестве нужна настройка Вашего кода. Рисунок 15-1 показывает процент процессорного времени для (выделенного) приложения GLCarbon1C OpenGL. Обратите внимание на то, что это приложение использует 31,5% ресурсов CPU.

      Вывод рисунка 15-1, произведенный top приложение
    Output produced by the top  application
  4. Откройте приложение Профилировщика OpenGL, расположенное в /Developer/Applications/Graphics Tools/. В окне, появляющемся, выберите опции собрать трассировку и включать следы, как показано на рисунке 15-2.

      Окно Figure 15-2 The OpenGL Profiler
    The OpenGL Profiler window
  5. Выберите опцию «Attach to application», затем выберите свое приложение из Списка приложений.

    Когда Профилировщик OpenGL собирает функциональную трассировку, можно видеть маленькие паузы или задержки в приложении, особенно. Это нормально и не значительно влияет на статистику производительности. Незначительные сбои вследствие большого объема данных, который выписывает Профилировщик OpenGL.

  6. Нажмите Suspend для остановки сбора данных.

  7. Откройте окна Statistics и Trace путем выбора их из меню Views.

    Рисунок 15-3 обеспечивает пример того, на что похоже окно Statistics. Рисунок 15-4 показывает окно Trace.

    Предполагаемый процент времени, проведенного в OpenGL, показан у основания рисунка 15-3. Обратите внимание на то, что для этого примера, это - 28,91%. Чем выше это число, тем больше времени приложение тратит в OpenGL и большей возможности, там может быть должно улучшить производительность приложения путем оптимизации кода OpenGL.

    Можно использовать количество времени, проведенное в OpenGL вместе с процессорным временем для вычисления отношения времени приложения по сравнению со временем OpenGL. Это отношение указывает, где потратить большинство Ваших усилий по оптимизации.

    Рисунок 15-3  окно статистики
    A statistics window
  8. В окне Trace ищите двойные вызовы функции и избыточные или ненужные изменения состояния.

    Ищите идущие подряд вызовы функции с теми же или подобными данными. Это области, которые могут обычно оптимизироваться. Функции, вызванные более, чем необходимые, включают glTexParameter, glPixelStore, glEnable, и glDisable. Для большинства приложений эти функции можно вызвать один раз от установки или подпрограммы модификации состояния и вызвать только при необходимости.

    Это - обычно хорошая практика для хранения изменений состояния из рендеринга циклов (который может быть замечен в функциональной трассировке как та же последовательность изменений состояния и рисующий много раз), так же столь же возможный и использование отдельные подпрограммы для корректировки состояния по мере необходимости.

    Посмотрите в это время значение налево от каждого вызова функции определить стоимость вызова.

      Окно Figure 15-4 A Trace
    A Trace window
  9. Определите то, чем было бы увеличение производительности то, если бы было возможно сократить время для выполнения всех вызовов OpenGL для обнуления.

    Например, возьмите данные о производительности из приложения GLCarbon1C, используемого в этом разделе для определения производительности, относящейся к вызовам OpenGL.

    Общее время приложения (от top) = 31,5%

    Общее время в OpenGL (от профилировщика OpenGL) = 28,91%

    На первый взгляд Вы могли бы думать, что оптимизация кода OpenGL могла улучшить производительность приложения почти на 29%, таким образом сократив общее время приложения на 29%. Это не имеет место. Вычислите теоретическое увеличение производительности путем умножения общего процессорного времени на процент времени, проведенного в OpenGL. Теоретическое повышение производительности для этого примера:

    31.5 X .2891 = 9.11%

    Если бы OpenGL занял время вообще для выполнения, то приложение видело бы увеличение на 9,11% производительности. Так, если бы выполнение приложения в 60 кадрах в секунду (FPS), это выполнило бы следующим образом:

    New FPS = previous FPS * (1 +(% performance increase)) = 60 fps *(1.0911) = 65.47 fps

    Приложение получает почти 5,5 кадров в секунду путем сокращения OpenGL с 28,91% до 0%. Это показывает, что отношение производительности OpenGL к производительности приложения не линейно. Просто сокращение количества времени, проведенного в OpenGL, может или может не предложить значимое преимущество в производительности приложения.

Используя монитор драйвера OpenGL для измерения остановов

Можно использовать Монитор Драйвера OpenGL для измерения, сколько времени CPU ожидает GPU, как показано на рисунке 15-5. Монитор Драйвера OpenGL полезен для анализа других параметров также. Можно выбрать который параметры контролировать просто путем щелчка по названию параметра от секции, показанной в числе.

Рисунок 15-5  представление графика в Мониторе Драйвера OpenGL
The graph view in OpenGL Driver MonitorThe graph view in OpenGL Driver Monitor