На недавно прошедшей Конференции Разработчиков Игр, в то время как по выставке ходили девушки, еще более длинноногие и менее одетые, чем на фото, я, инженер по программным решениям Intel, рассказывала «об особенностях интергированных графических решений Intel и их эффективном использовании при разработке игр».
К моему удивлению, слушателями доклада оказались не только разработчики игр
Поэтому, то есть, по многочисленным появкам слушателей, знакомлю с этим докладом и вас.
Доклад с подобной темой я делаю ежегодно уже раз в шестой-седьмой. Но, конечно же, я не повторяю один и тот же рассказ из года в год. И даже не делаю ремейки! Время идет, 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 3000 с 12 EU. (Кстати архитектура HD Graphics изначально закладывала возможность технически простейшего добавления EU.)
Но, в итоге, в мобильные устройства попала Intel HD 3000, а в подавляющую часть десктопных — Intel HD 2000.
И, наконец, ровно месяц назад, в паре с 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. Детально проверены например, такие игры, как Metro 2033, Call of Duty: Modern Warfare 3, Battlefield 3, Fifa 2012 и бенчмарк Unigine Heaven 2.1. Не буду пересказывать результаты, смотрите оригинал.
Напоследок, выборка из общей таблицы результатов синтетических тестов, сделанная для разных 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