Intel Graphics Performance Analyzers (Intel GPA) 2.0

В этой статье мы расскажем о недавно анонсированном новом продукте для профилирования и отладки графических приложений – Intel® Graphics Performance Analyzers (Intel® GPA) 2.0.

Введение
Интегрированная графика Intel
Intel® Graphics Performance Analyzers
  Концепция удаленной отладки
  Intel® GPA System Analyzer
     Основная функциональность Intel® GPA System Analyzer
  Intel® GPA Frame Analyzer
Стратегия оптимизации
  Основные факторы, влияющие на производительность
Заключение

Введение

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

В этой статье мы расскажем о недавно анонсированном новом продукте для профилирования и отладки графических приложений – Intel® Graphics Performance Analyzers (Intel® GPA) 2.0. Первая версия продукта прошла мимо широкой публики, но использовалась внутри Intel как внутреннее средство разработки.

Интегрированная графика Intel

Intel® GPA предназначен для работы в паре с интегрированными графическими ускорителями Intel® Graphics Media Accelerator X4500 (Intel® GMA X4500), являющимися графическим ядром чипсетов серий G4x и Q4x. Данная серия интегрированной графики Intel, присутствующая на рынке с лета 2008 года, характеризуется полнотой функциональной реализации DirectX 9* и DirectX 10*, а также производительностью, позволяющей конкурировать с бюджетными вариантами дискретных графических карт (краткий справочник по интегрированным графическим ускорителям Intel GMA *4500). Удачное сочетание производительности, надежности, цены и низкого энергопотребления позволяет Intel® GPA занимать значительную долю не только рынка настольных компьютеров начального и среднего уровня, но и постоянно растущего рынка ноутбуков.

В свою очередь, комбинация хороших показателей проникновения на рынок с неплохими техническими характеристиками делает интегрированные графические ускорители Intel® GMA X4500 привлекательными для разработчиков компьютерных игр и мультимедийных приложений.

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

Intel® Graphics Performance Analyzers

Intel® GPA состоит из набора программных средств, предназначенных для мониторинга производительности и отладки графических программ и компьютерных игр. Текущая 2.0 версия продукта разработана для операционных систем Microsoft Windows XP* и Microsoft Windows Vista* и рассчитана на поддержку программ, написанных с использованием DirectX 9. Данная версия состоит из Инструментального драйвера, программы мониторинга реального времени – Intel® System Analyzer, и программы анализа и отладки перехваченных графических фреймов – Intel® Frame Analyzer. Важно, что Intel® GPA не требует перекомпиляции или какого-либо предварительного инструментирования графического приложения, все необходимые вмешательства делаются на лету в момент запуска.

Концепция удаленной отладки

Все компоненты Intel® GPA построены на основе сетевой удаленной отладки. Это означает, что на целевой машине, где мы планируем запускать наше приложение, также должно присутствовать специальное приложение-агент (Intel® GPA Server). Клиентские приложения Intel® System Analyzer и Intel® Frame Analyzer запускаются на удаленной машине и связываются с сервером по сетевому протоколу TCP/IP (возможна локальная работа на одной машине в режиме TCP/IP loopback).

Преимущества удаленной отладки:

  1. Точность измерений.
    Клиентское GUI приложение, как правило, довольно требовательно к ресурсам CPU и памяти, что в некоторых случаях может приводить к вытеснению и замедлению профилируемого приложения и даже компонент графического стека, работающих в пользовательском режиме (UMD). Удаленная отладка решает эту проблему, профайлер, физически находясь на удаленном хосте, не может внести искажений в работу приложения.
  2. Улучшенная эргономика и графический интерфейс профайлера.
    Совмещение полноэкранного графического приложения и GUI профайлера накладывают серьезнейшие ограничения на компоновку и эргономику пользовательского интерфейса. В результате часто страдает разработчик, вынужденный изучать детали картины сквозь набор графиков, нарисованных поверх приложения (Head Up Display). При разработке Intel® GPA разработчики сознательно выносят профайлер на удаленный терминал для удобства визуализации и управления.
  3. Возможность совместного использования оборудования несколькими разработчиками.

Intel® GPA System Analyzer

Intel® GPA System Analyzer предназначен для мониторинга в реальном времени параметров приложения, использующего DirectX (напомним, что в данный момент поддерживается версия 9).

Основная функциональность Intel® GPA System Analyzer

Метрики и графики

Intel® GPA System Analyzer предоставляет разработчику возможность следить за FPS приложения и визуально коррелировать падение FPS c показаниями графиков, отражающих различные параметры DirectX, CPU или GPU. Поддерживаются три уровня детализации (зумирования) графиков. Разработчик может оценить степень зависимости приложения от CPU или GPU, эффективность распараллеливания (баланс загрузки различных CPU ядер), посмотреть, что происходит в вызовах DirectX.

Основные метрики DirectX включают:

  • Количество вызовов рисования (Draw Calls).
  • Оценку количества блокировок индексных и вертексных буферов.
  • Количество изменений состояний DirectX.

DirectX эксперименты реального времени (State Overrides)

Intel® GPA System Analyzer позволяет проводить эксперименты на живом, работающем приложении. В качестве наиболее популярных и показательных экспериментов следует отметить:

  • включение WireFrame – позволяет визуально оценить сложность сцены и моделей.
  • подмена шейдеров на простейший Simple Pixel Shader – позволяет оценить прирост FPS и роль шейдеров в финальной производительности.
  • визуализация перерисовки пикселов (Overdraw Visualization) – позволяет градациями серого показать степень перерисовки пикселя для визуальной оценки эффективности Z-отсечения.
  • отключение драйвера (Null Driver) – позволяет оценить вклад драйвера в общее падение производительности.
  • упрощение текстур (2x2 Texture) – позволяет оценить сложность и ресурсоемкости текстур.

Режим паузы

Intel® GPA System Analyzer позволяет останавливать приложение на лету. Используя остановку разработчик может “поймать” нужную сцену или эффект для последующего перехвата интересующего графического фрейма.

Перехват фрейма (Capture)

Intel® GPA System Analyzer позволяет перехватить и записать текущий фрейм для последующего детального анализа в программе Intel® GPA Frame Analyzer. Перехват предусматривает сохранение всех вызовов DirectX и всех используемых приложением графических ресурсов.

В качестве иллюстрации работы Intel® GPA System Analyzer хотелось бы привести несколько скриншотов из игры Demigod* от Stardock Entertainment / Gas Powered Games*

Оригинальная Игра

Режим Wireframe

Режим 2x2 Textures

Intel® GPA Frame Analyzer

Intel® GPA Frame Analyzer является важнейшим инструментом для детального изучения структуры перехваченного фрейма (работа производится с одним кадром).

В основе представления информации о фрейме лежит концепция DirectX команд, выполняющих работу на GPU. В Intel® GPA такие команды названы термином Эрг (Erg). Большинство Эргов представляют собой функции рисования (Draw Calls) библиотеки DirectX.

Intel® GPA Frame Analyzer позволяет воспроизвести (проиграть) все Эрги с целью определения их стоимости (длительности) и их вклада в суммарное время фрейма (Frame Time). Эрги отображаются в виде гистограммы, наглядно представляющей продолжительность Эргов, и в виде дерева, в котором элементы фрейма сгруппированы по поверхностям вывода (Render Targets).
Intel® GPA Frame Analyzer делает несколько попыток проиграть фрейм и показывает усредненную длительность Эргов и степень разброса (девиацию) измерений относительно среднего значения.

Разработчик может выделять индивидуальные элементы фрейма. Intel® GPA Frame Analyzer при этом выполняет подсветку выбранных элементов в режимах закраски цветом или подсвеченной геометрии (highlighted wireframe). Таким образом, довольно легко определить какие Эрги отвечают за тот или иной компонент финальной картины.

Для любого выбранного Эрга Intel® GPA Frame Analyzer позволяет инспектировать текстуры и поверхности вывода с указанием частоты использования текстуры.

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

Выбрав указанные Эрги, разработчик может провести над ними эксперименты. Например, можно переключить пиксельный шейдер на простой (Simple Pixel Shader), применить отсечение (1x1 Scissor Rect), выполнить замену текстур (2x2 Textures). Применяя эксперименты вместе или по отдельности, разработчик наблюдает, как изменяется высота Эргов на гистограмме и видит в списке Эргов численную разницу (Duration Delta) в длительности выполнения.

Набор отладочных средств Intel® GPA Frame Analyzer включает просмотр состояний DirectX (Render States), просмотр шейдеров и шейдерных констант, просмотр текстур, лог вызовов DirectX (API Log).

Стратегия оптимизации

Предполагается, что оптимизация приложения должна начаться с рассмотрения общей производительности приложения при помощи Intel® GPA System Analyzer. Первичный анализ сцены с низким FPS должен выявить, чем ограничена производительность приложения – CPU или GPU.
Основными средствами в этом должны стать графики загрузки CPU (CPU Utilization). Очень полезной является метрика высокого уровня “DX Lock Percent Of Frame Time”, которая показывает, какой процент времени фрейма система проводит в блокировках индексных и вершинных буферов (Index Buffer Lock, Vertex Buffer Locks). Большое количество блокировок такого типа часто приводит к недозагрузке GPU.

Далее важнейшим инструментом разработчика являются эксперименты с DirectX конвейером (pipeline). Предполагается следующая тактика применения экспериментов:

  1. Null Hardware – разработчик может оценить, как изменится FPS если отключить GPU на уровне драйвера (DirectX и приложение остаются работать).
  2. Null Driver – отключает все вызовы рисования DirectX. Позволяет оценить потенциальные возможности нашей программы при работе с “бесконечно быстрым” GPU и “бесконечно быстрым” драйвером.
  3. 2x2 Texture и Disable Texture Filtering – позволяют оценить нагрузку на текстурный блок GPU. Если применение данного эксперимента дает значительный эффект – можно задуматься об упрощении текстур.
  4. Simple Pixel Shader – упрощение пиксельного шейдера позволяет понять, является ли вычислительная сложность шейдера проблемой. Данный эксперимент необходимо сочетать с 2x2 Texture и 1x1 Scissor Rect для определения вклада текстурного блока в производительность шейдера.
  5. 1x1 Scissor Rect позволяет отсечь все пиксели после обработки пиксельным шейдером. Если наблюдается заметный прирост FPS, мы можем сказать, что проблема кроется в скорости заполнения (Fill Rate). Необходим анализ Stencil и Alpha Blending операций (эксперименты Disable Alpha Blending, Disable Alpha Test).

Дальнейшая детальная оптимизация графического фрейма включает в себя перехват фрейма (Frame Capture) и анализ с использованием Intel® GPA Frame Analyzer.

Основные факторы, влияющие на производительность

Скорость заполнения и пиксельные шейдеры (Fill Rate & Pixel Shaders)
Для увеличения скорости заполнения следует сосредоточиться на уменьшении числа обрабатываемых пикселей. Для оптимизации работы следует попытаться:

  • Сконфигурировать игру под меньшее разрешение.
  • Уменьшить сложность пиксельных шейдеров.
  • Использовать Z-Only проход для уменьшения пикселей, для которых исполняется шейдер.
  • Перенести линейные вычисления в вершинные шейдеры.
  • Ограничить использование эффектов требующих двухпроходной отрисовки.
  • Использовать аппаратный тест буфера глубины (Z-test) для эффективного уменьшения числа пикселей, обсчитываемых шейдерами. Упорядочить список отрисовки так, чтобы объекты располагались от камеры в глубину сцены.
  • Использовать проверку на загораживание (Occlusion Query). Такая проверка используется для определения числа потенциально видимых пикселей объекта при помощи рисования не самого объекта, а его ограничивающего объема. Если Occlusion Query возвращает ноль, это значит, что ни один пиксель ограничивающего объема, а значит, и самого объекта, не был виден, следовательно, объект можно не рисовать. Такая проверка максимально эффективна для сложных объектов с большим количеством вершин.

Вершинные шейдеры (Vertex Shaders)
Для оптимизации работы с геометрией следует попытаться:

  • Уменьшить сложность вершинных шейдеров.
  • По возможности, использовать triangle strips вместо списка треугольников и triangle fan.
  • Использовать встроенные DXUT функции по оптимизации геометрии для увеличения эффективности кеша вершин.
  • Использовать LOD для высокополигональных моделей.

Текстуры (Textures)
Для оптимизации работы с текстурами следует попытаться:

  • Уменьшить использование текстур высокого разрешения.
  • Использовать анизотропную фильтрацию только там, где она действительно нужна.
  • Максимально использовать сжатые форматы текстур.
  • Использовать FP (floating-point) текстуры только там, где это необходимо.
  • Использовать FP текстуры с минимально возможной точностью и числом каналов.

Количество вызовов функций отрисовки и смены состояний (DP Сalls & State Changes)
Большое количество вызовов отрисовки, смены состояний конвейера могут существенно замедлить работу приложения, поэтому следует:

  • Использовать более оптимальный алгоритм проверки на видимость объектов в игровом движке.
  • По возможности объединять геометрические объекты в один.
  • Использовать инстансинг.
  • Сортировать объекты по материалам, шейдерам для уменьшения числа смен стейтов графического конвейера.

Контроль задержек между графическими функциями (Inter Erg Stalls)
Важным аспектом оптимизации может стать уменьшение времени, которое программа проводит непосредственно между графическими вызовами. Следует контролировать количество изменений состояний DirectX (DirectX State Changes) и время изменения ресурсов (Index/Vertex Buffer Locks). В некоторых случаях GPU может оказаться недозагруженным.
Рассмотрите возможность использования CPU-ориентированных средств оптимизации (Intel® VTune™ Performance Analyzer, Intel® Parallel Studio) для уменьшения времени проводимого игрой на CPU.

Особенности GMA X4500

  • Использование uber шейдеров предпочтительнее многопроходного рисования.
  • Уменьшение fill-rate является одной из основных стратегий оптимизации.
  • Наиболее оптимальное количество примитивов в вызове рисования: 200-1K.
  • Используйте максимально возможную версию шейдера (нет преимуществ по исполнению шейдеров ниже 2.0)
  • Используйте шейдеры, а не FF конвейер.
  • При использовании тумана используйте шейдерный туман (SM3.0).
  • Шейдер компилируется при первом использовании, поэтому предпочтительнее загружать и использовать все шейдеры во время загрузки в невидимом буфере.
  • Старайтесь использовать не более 32 констант в шейдере.
  • Старайтесь минимизировать использование индексированных шейдерных констант.
  • Минимизируйте число вызовов Clear(). Очищайте Z и Color в одно и тоже время (если очистка обоих буферов необходима).
  • Теневые карты (Shadow Maps) более предпочтительны, чем теневые объемы (Stencil Shadows).

Заключение

Выпуск Intel® GPA является знаковым событием для Intel, показывающим серьезность и долгосрочность планов по развитию и совершенствованию своей линейки графических продуктов. В течение достаточно короткого времени компания выпустила продукт, способный конкурировать с аналогичными наборами утилит конкурентов, многие из которых разрабатывались в течении многих лет. И, безусловно, выпуск Intel® GPA – это очень хороший шаг навстречу разработчикам, который даст возможность оптимизировать их графические программы для большого и перспективного сегмента рынка, а также поможет по-новому взглянуть на графические продукты Intel.

Продукт анонсирован на только что закончившейся конференции разработчиков игр GDC 2009 и любой желающий попробовать его в действии может сделать это, бесплатно зарегистрировавшись в программе Intel® Visual Adrenaline на сайте продукта http://www.intel.com/software/gpa/.

Компания Intel надеется, что Intel® GPA поможет вам в создании и оптимизации ваших продуктов и ждет ваших комментариев и отзывов.

Также вы можете получить дополнительную информацию по графическим технологиям Intel или задать свои вопросы напрямую инженерам на страницах Сообщества разработчиков графических приложений или в блогах Intel® Developer Zone.




*Данная статья опубликована с согласия http://www.gamedev.ru.
Оригинал статьи расположен по адресу http://http://www.gamedev.ru/code/articles/Intel_GPA

For more complete information about compiler optimizations, see our Optimization Notice.