На недавно прошедшей Конференции Разработчиков Игр, в то время как по выставке ходили девушки, еще более длинноногие и менее одетые, чем на фото, я, инженер по программным решениям Intel, рассказывала «об особенностях интергированных графических решений Intel и их эффективном использовании при разработке игр».
К моему удивлению, слушателями доклада оказались не только разработчики игр и те, кто ошибся аудиторией, но и простые пользователи Intel HD Graphics.
Поэтому, то есть, по многочисленным появкам слушателей, знакомлю с этим докладом и вас.
Доклад с подобной темой я делаю ежегодно уже раз в шестой-седьмой. Но, конечно же, я не повторяю один и тот же рассказ из года в год. И даже не делаю ремейки! Время идет, Intel
постоянно представляет новые графические решения, соответственно появляются новые требующие освещения вопросы.
Но кое-что остается без перемен — вступление, сообщающее, что рынок Интегрированной Графики Intel сейчас огромен, будет сильно расти и дальше, причем, среди всех категорий пользователей, так что эти GPU необходимо учитывать при разработке игр и прочих графических приложений…
И если раньше единственное подтверждение этих слов было теоретическое — соответсвующий график или диаграмма из какого-нибудь серьезного источника типа Mercury Research, то теперь у меня появилось практическое и наглядное подтверждение. Ультрабуки. Переход на устройства этого типа столь же неизбежен для пользователей, как и завершившийся не так давно переход от ЭЛТ телевизоров и мониторов к ЖК.
Хотя спецификация ультрабука и не требует наличия встроенного GPU, но жесткие требования к его габаритам не позволяют вставить туда дискретную графическую карту, не сплюснутую предварительно танком. Поэтому во всех ультрабуках (а не только тех, что у девушек на фото) используется интегрированное с процессором решение — Intel HD Graphics.
Intel HD Graghics. Сurriculum vitae.
Впервые графическое ядро Intel переехало к CPU с северного моста материнской платы в 2010, и сразу же сменило имя — c Intel GMA (Graphics Media Accelerator) на Intel HD Graphics. Но это пока был еще «гражданский брак», GPU не был полностью интегрирован с CPU, он даже производился по другой технологии — 45nm против 32nm у CPU. Но, благодаря архитектурным улучшениям и повышению рабочей частоты, скорость обработки 3D в сравнении с прошлой версией Intel GMA выросла на 70%.
В 2011 в ядро Sandy Bridge была интегрирована Intel HD Graphics второго поколения. В мобильные устройства (модификация GT1) — версия Intel HD 2000 с 6 исполнительными устройствами (Execution Units или EU), а в десктопные (модификация GT2) — Intel HD 4000 с 12 EU. Кстати архитектура HD Graphics изначально закладывала возможность технически простейшего добавления EU.
Наконец, ровно месяц назад, в паре с Intel Ivy Bridge CPU появилась Intel HD Graphics 3. HD Graphics третьего поколения отличается не только увеличением числа EU до 16 для десктопной модификации HD Graphics 4000, но и улучшением самих EU, способных к исполнению трех инструкций за такт, а также появлением L3 cache, дополнительного текстурного семплера и полной поддержкой в железе DirectX 11. Еще одна уникальная фишка третьего поколения CPU — варьируемый размер векторных инструкций EU. Система способна диспетчеризовать логические потоки HLSL на исполнительные устройства как SIMD8, SIMD16 или SIMD32.
На слайде ниже показаны более детальные сравнительные характеристики Intel HD:
Почему слайд такой серый? А потому, что совершенно секретный! В изначальной версии на нем стоял гриф Intel Confidential, означающий строгий запрет к распространению, а также присутствовало не три колонки, а четыре. В четвертой колонке были характеристики новой, еще не выпущенной Intel GPU. Соответственно, по сравнению с той, еще не существующей новинкой, все остальное показывалось просто серым. Раскрашивать слайд я не стала — это же не «17 мгновений Весны».
Intel HD Graghics третьего поколения. Характеристика с места работы.
Какие же игры играбельны на Intel HD 4000, то есть, показывют фреймрейт больший или равный 25 кадрам? Если цитировать соответствующую страницу на сайте Intel, то — «большинство мейнстрим игр на разрешении экрана 1280х720 или лучше». На том же сайте приведен далеко не полный список из более чем ста современных игр, производительность которых на Intel HD 4000/2500 подтверждена инженерами Intel.
А теперь — независимое внешнее тестирование. Заслуживающий доверия международный сайт с говорящим названием www.notebookcheck.net, занимающийся тестированием ВСЕХ видеокарт, встречающихся в нетбуках-ноутбуках-ультрабуках, недавно опубликовал результаты тестирования Intel HD 4000. Детально проверены например, такие игры, как Unigine Heaven 2.1, Metro 2033, Call of Duty: Modern Warfare 3, Battlefield 3, Fifa 2012. Не буду пересказывать результаты, смотрите оригинал.
Напоследок, выборка из общей таблицы результатов синтетических тестов, сделанная для разных Intel GPU. Обратите внимание на изменение позиции в рейтинге прозводительности карт:
Вывод notebookcheck: «В целом, мы впечатлены новым графическим ядром Intel. Производительность по сравнению с HD 3000 улучшилась на 30%. Эта разница может быть даже больше — до 40%, если GPU спарено с мощным четырехядерным Ivy Bridge CPU, например, i7-3610QM.
Так что же делать, если ваша любимая игра на Intel HD не работает должным образом? Советы, даваемые www.intel.com/support/graphics/sb/cs-010486.htm, на первый взгляд выглядят Капитаном Очевидность: поменять настройки игры, проверить наличие новых патчей к игре, установить свежий драйвер Intel. Но на деле эти советы работают. Инженеры Intel тесно сотрудничают с разработчиками игр, в том числе и при создании патчей для совместимости с Intel GPU. Также, как заметил notebookcheck, „slowly but surely“ ( „медленно, но верно“) улучшаются драйвера Intel как по корректности, так и по производительности работы, что приводит к решению проблем с играми.
На этом месте пост для простых игроков оканчивается (спасибо за внимание, добро пожаловать в комментарии), и начинаются
Краткие советы создателям игр
1. Корректно определяйте параметры графической системы и ее возможности — поддержку шейдеров, расширений DX и доступную видеопамять (учтите, что у Intel GPU нет отдельной видеопамяти, она совместно с CPU использует память системную).
Посмотреть на пример исходного кода и бинарника приложения для корректного и полного определения параметров системы с Intel GPU — GPU Detect можно здесь.
Кроме того, Microsoft DirectX SDK (июнь 2010) включает пример Video Memory для определения размера доступной видеопамяти. Советуем также поискать в Интернете „Get Video Memory Via WMI“.
2. Учитывайте возможности Turbo Boost. Благодаря Turbo Boost частота Intel GPU может увеличиваться в два раза, давая существеный прирост производительности. Но только если это позволяет термальное состояние системы. А это происходит по понятным причинам только когда не сильно занят, то есть, не сильно нагрет CPU.
Вытекающий отсюда совет — как можно реже использовать запрос состояния CPU — GetData(). Учтите, что вызов GetData() в цикле с ожиданием результата — это 100% загрузка CPU. В случае крайней необходимости делайте запросы к CPU в начале отрисовки кадра и загружайте CPU какой-нибудь полезной работой перед получением результатов GetData. В этом случае ожидание CPU будет минимально.
3. Используйте реализуемое Intel GPU раннее отсечение по Z (Early Z rejection). Эта технология позволяет заранее отбрасывать из дальнейшей обработки, т.е. не выполняя дорогостоящие с точки пиксельные шейдеры, фрагменты, не проходящие тест глубины, — загораживаемые другими объектами.
Для результативного использования Early Z существуют два метода:
— сортировка и отрисовка объектов от ближних к дальним по глубине (front to back)
— предпроход без отрисовки с заполнением буфера глубины и маскированием заведомо невидимых на финальном изображении областей.
Понятно, что первый способ не подойдет для сцен с (полу)прозрачными объектами, а второй имеет значительные накладные расходы.
Исходный код примеров использования Early Z можно посмотреть здесь.
4. Здравый смысл и общие советы по оптимизации графических приложений. Их для Intel GPU никто не отменял. Уменьшайте количество смен графических состояний и шейдеров, группируйте вызовы отрисовки, избегайте чтения из render targets, да и вообще не используйте более трех буферов отрисовки. Также оптимизируйте геометрию (Direct3D D3DXOptimizeVertices и D3DXOptimizeFaces) для кешей вершинных пре- и пост- преобразований DirectX.
5. И, наконец, для эффективноего обнаружения проблем с производительностью DirectX приложений на Intel GPU используйте бесплатный инструмент Intel GPA
Автор: vikky13