Настройка приложения OpenGL
После Вас разработка и реализация Ваше приложение важно, чтобы Вы провели некоторое время, анализируя его производительность. Ключ к производительности, настраивающей Ваше приложение OpenGL, должен последовательно совершенствовать разработку и реализацию Вашего приложения. Вы делаете это путем чередования между измерением приложения, идентификацией, где узкое место, и удаление узкого места.
Если Вы будете незнакомы с общими проблемами производительности о платформе Macintosh, то Вы захотите к Обзору производительности чтения. Обзор производительности содержит общие подсказки по производительности, которые полезны для всех приложений. Это также описывает большинство инструментов производительности, предоставленных OS X.
Затем, внимательно изучите Инструменты. Инструменты консолидируют много измерительных инструментов в единственное всестороннее настраивающее производительность приложение.
Существует два инструмента кроме Профилировщика OpenGL, которые являются определенными для разработки OpenGL — Монитор Драйвера OpenGL и Разработчик Программы построения теней OpenGL. Монитор Драйвера OpenGL собирает данные реального времени из аппаратных средств. Разработчик Программы построения теней OpenGL обеспечивает непосредственную обратную связь на вершине и программах фрагмента, которые Вы пишете.
Для получения дополнительной информации об этих инструментах см.:
Следующие книги содержат много методов для получения большей части производительности от GPU:
Драгоценные камни GPU: Программируя Методы, Подсказки и Приемы для Оперативной Графики, Рандимы Фернандо. В частности Графическая Конвейерная Производительность является критической статьей для понимания, как найти узкие места в Вашем приложении OpenGL.
Драгоценные камни GPU 2: программирование методов для высокоэффективного графического и вычисления общего назначения, матового Фарра и Рандимы Фернандо.
Сбор и анализ базовых данных о производительности
Анализ производительности является систематическим процессом, запускающимся со сбора базовых данных. OS X обеспечивает несколько приложений, которые можно использовать для оценки базовой производительности для приложения OpenGL:
top
утилита командной строки, которую Вы выполняете в Окне терминала. Можно использоватьtop
оценить, сколько использует процессорное время Ваше приложение.Профилировщик OpenGL является приложением, определяющим, сколько времени приложение проводит в OpenGL. Это также обеспечивает функциональные трассировки, которые можно использовать для поиска избыточных вызовов.
Монитор Драйвера OpenGL позволяет Вам собрать данные реального времени на работе GPU и позволяет Вам смотреть на информацию (поддерживаемые расширения OpenGL, буферизовать режимы, демонстрационные режимы, и т.д) для доступных средств рендеринга.
Этот раздел показывает, как использовать top
вместе с Профилировщиком OpenGL для анализа, где потратить усилия по оптимизации — в коде OpenGL, другом коде приложения, или в обоих. Вы будете видеть, как собрать базовые данные и как определить отношение производительности OpenGL к полной производительности приложения.
Запустите свое приложение OpenGL.
Откройте Окно терминала и поместите его бок о бок с Вашим окном приложения.
В Окне терминала ввести
top
и нажмите Return. Вы будете видеть вывод, подобный показанному на рисунке 15-1.top
программа указывает сумму процессорного времени, которое использует приложение. Процессорное время служит хорошим базовым значением для измерения, в каком количестве нужна настройка Вашего кода. Рисунок 15-1 показывает процент процессорного времени для (выделенного) приложения GLCarbon1C OpenGL. Обратите внимание на то, что это приложение использует 31,5% ресурсов CPU.Откройте приложение Профилировщика OpenGL, расположенное в
/Developer/Applications/Graphics Tools/
. В окне, появляющемся, выберите опции собрать трассировку и включать следы, как показано на рисунке 15-2.Выберите опцию «Attach to application», затем выберите свое приложение из Списка приложений.
Когда Профилировщик OpenGL собирает функциональную трассировку, можно видеть маленькие паузы или задержки в приложении, особенно. Это нормально и не значительно влияет на статистику производительности. Незначительные сбои вследствие большого объема данных, который выписывает Профилировщик OpenGL.
Нажмите Suspend для остановки сбора данных.
Откройте окна Statistics и Trace путем выбора их из меню Views.
Рисунок 15-3 обеспечивает пример того, на что похоже окно Statistics. Рисунок 15-4 показывает окно Trace.
Предполагаемый процент времени, проведенного в OpenGL, показан у основания рисунка 15-3. Обратите внимание на то, что для этого примера, это - 28,91%. Чем выше это число, тем больше времени приложение тратит в OpenGL и большей возможности, там может быть должно улучшить производительность приложения путем оптимизации кода OpenGL.
Можно использовать количество времени, проведенное в OpenGL вместе с процессорным временем для вычисления отношения времени приложения по сравнению со временем OpenGL. Это отношение указывает, где потратить большинство Ваших усилий по оптимизации.
В окне Trace ищите двойные вызовы функции и избыточные или ненужные изменения состояния.
Ищите идущие подряд вызовы функции с теми же или подобными данными. Это области, которые могут обычно оптимизироваться. Функции, вызванные более, чем необходимые, включают
glTexParameter
,glPixelStore
,glEnable
, иglDisable
. Для большинства приложений эти функции можно вызвать один раз от установки или подпрограммы модификации состояния и вызвать только при необходимости.Это - обычно хорошая практика для хранения изменений состояния из рендеринга циклов (который может быть замечен в функциональной трассировке как та же последовательность изменений состояния и рисующий много раз), так же столь же возможный и использование отдельные подпрограммы для корректировки состояния по мере необходимости.
Посмотрите в это время значение налево от каждого вызова функции определить стоимость вызова.
Определите то, чем было бы увеличение производительности то, если бы было возможно сократить время для выполнения всех вызовов 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 полезен для анализа других параметров также. Можно выбрать который параметры контролировать просто путем щелчка по названию параметра от секции, показанной в числе.