AMD и Imagination о том, что изменят Vulkan и SPIR-V

OSzone.net » Новости » IT » AMD и Imagination о том, что изменят Vulkan и SPIR-V
Автор: Анжел Божинов
Иcточник: www.oszone.net
Опубликована: 07.03.2015

Мы уже писали о том, что консорциум Khronos Group представил графический API Vulkan и язык SPIR-V, которые призваны заменить OpenGL и составить конкуренцию Direct3D 12, AMD Mantle и Apple Metal. Компании AMD и Imagination Technologies рассказали о том, чем хороши SPIR-V и Vulkan, и что они изменят в индустрии графических технологий.

*
Текущая архитектура трансляции шейдеров в Unity 5

Один из руководителей разработки OpenGL-драйверов в AMD, Грэм Селлерс, отвечая на вопрос, какие возможности даёт язык SPIR-V, сослался на статью разработчика-партнёра Кристофа Риккио, который объяснил многие непонятные моменты. Согласно его статье, в данный момент в мире существуют два основных языка программирования шейдеров — GLSL, связанный с OpenGL, и HLSL, относящийся к Microsoft Direct3D. Обладая разной структурой и своими специфическими особенностями, разработчики различных графических движков и фреймворков должны создавать особый мета-язык, который бы транслировал вызовы GLSL и HLSL между собой. Из-за этого сам процесс кросскомпиляции кода превращался в бардак, где некоторые возможности языков аннулировались из-за недостатка поддержки функций, низкого качества компиляторов, специфических оптимизаций, ведущих к непредсказуемым последствиям, недостаточной документации и других проблем. Как итог, процесс компиляции шейдера, скажем, в движке Unity 5 выглядит монструозно (на картинке выше). SPIR-V, наоборот, спроектирован таким образом, чтобы обойти подводные камни — к языку прилагается подробная документация, и SPIR-V позволяет использовать неизвестные компилятору инструкции, не превращая итоговый двоичный код в мусор. Поддержка SPIR-V позволит разработчикам безболезненно компилировать шейдеры для OpenGL, OpenGL ES, Microsoft Direct3D, Apple Metal и других API. Впрочем, чтобы решить эту головную боль разработчиков графических приложений и игр, понадобятся усилия не только Khronos Group и производителей видеокарт, но также и проектировщиков API, включая Microsoft с Direct3D, Apple с Metal, создателей консолей и других. Кроме того, господин Риккио указал на то, что ежедневно на рынок поставляются сотни тысяч смартфонов и планшетов, которые скорее всего никогда не получат обновления своих драйверов, поэтому безболезненное программирование шейдеров с помощью SPIR-V — дело отдалённой перспективы. Но главные преимущества SPIR-V — переносимость, высокая производительность, хорошая документированность, подробная спецификация и гибкая расширяемость стоят того, чтобы началась работа по его реализации.

*
Упрощение трансляции GLSL<->HLSL с помощью SPIR-V

Что касается более громкого анонса — API Vulkan, то о его возможностях рассказала компания Imagination Technologies, разрабатывающая графические ускорители PowerVR. По мнению инженеров компании стремление Khronos заменить OpenGL, которому уже исполнилось 22 года, на более современный API с лучшей эффективностью и предсказуемостью достойно похвалы. Для демонстрации возможностей интерфейса программирования в Imagination переписали свою демо-сцену Library с OpenGL ES 3.0 на Vulkan API. Несмотря на то, что сам API только в начале своего развития, а качество тестового драйвера оставляет желать лучшего, первые положительные тенденции были заметны сразу. Так, например, анализ загрузки ресурсов центрального процессора показал, что Vulkan менее требователен к CPU, чем OpenGL ES. Так, например, вызов glUniform*() в старом API требовал работу с буфером драйвера, из-за чего происходил так называемый оверхед, из-за чего нагружался процессор. В Vulkan такой сложный вызов не нужен, и разработчик просто может указать адрес в графической памяти записать туда нужную графическую информацию. Благодаря этому нагрузка на процессор упала с 5% до 1.3%. При проектировании Vulkan разработчики следовали цели по уменьшению самостоятельности драйвера, который мог приводить к непредсказуемым для разработчика игр последствиям. Несмотря на то, что теперь порог вхождения для разработчиков значительно повысился, и при создании шейдеров, например, нужна большая квалификация, исчезает необходимость создавать различные патчи, специфичные для драйвера каждого производителя. Теперь драйвера делает ровно то, что ему скажет разработчик, и требования к качеству драйвера значительно понизились просто потому, что создателю видеокарты просто негде допустить ошибку. Это особенно важно для мобильных устройств, где обновление драйвера GPU редчайшее событие, сравнимое с большим праздником. Обновить игру с исправлением ошибок, естественно, намного проще для владельца смартфона, чем обновить драйвер.

*
Демо-сцена Library

Как следствие упрощённых драйверов, предполагаемая производительность стала куда более предсказуемой. Инженеры Imagination приводят в пример функцию glBlendFunc(), которая крайне зависима от архитектуры GPU и обслуживающего драйвера. Например, некоторые видеокарты могут отложить конфигурацию операции смешивания до тех пор, пока не выполнится определённый шейдер, другие могут сработать иначе, из-за чего производительность одного и того же кода на разных платформах была разной даже если GPU с точки зрения производительности были идентичны. С использованием Vulkan разработчик, заполняя программную структуру, описывающую какую-либо функцию, теперь точно знает, что драйвер не вмешается в работу программного кода, благодаря чему сохраняется консистенция в показателях производительности. Кроме того, огромный прирост к производительности даёт тот факт, что Vulkan изначально спроектирован для комфортной параллелизации. Командные буферы могут разделяться по разным потокам, давая большие преимущества процессорам с большим количеством ядер. Ранее в OpenGL ES для достижения такого результата требовалась нетривиальная работа, так как во время создания этого API многоядерных мобильных систем не существовало, а дальнейшие обновления спецификации не могли решить фундаментальных проблем. Теперь же эти операции фактически автоматизированы.

*
Потребление ресурсов CPU у Vulkan и OpenGL ES

На видео ниже можно увидеть демо-сцену на одном из GPU PowerVR Rogue, на котором, конечно, видно, что предстоит очень много работы впереди. Тем не менее, Эшли Смит, один из разработчиков этой «демки», заявил о том, что несмотря на очевидные притормаживания, драйвера в аналогичной альфа-версии для OpenGL ES выглядели куда хуже, и у Vulkan куда больший потенциал.

С нашей стороны отметим, что для Vulkan API верна та же проблема, что и для SPIR-V — сейчас на рынке огромное количество мобильных устройств, которые никогда не получат обновления драйверов, и следовательно повсеместное применение Vulkan API будет отложено на несколько лет после официальной публикации спецификации. Несмотря на то, что API проектировался с учётом того, что должны поддерживаться GPU, совместимые с OpenGL ES 3.1, крайне маловероятно, что даже самые лучшие мобильные графические ускорители современности получат необходимые обновления. На данный момент под указанные условия подпадают мобильные видеокарты серий Qualcomm Adreno 4xx, Imagination PowerVR 6xxx, ARM Mali-T6xx, NVIDIA GeForce 5 ULP (Tegra K1) и новее. Наибольшие шансы на получение обновленных драйверов у Tegra K1, которая совместима с куда более функциональным API OpenGL 4.5. Для видеокарт от AMD, Intel и NVIDIA шансы на обновленные драйвера всё же значительно выше, чем у мобильных. Публикация предварительной версии спецификаций Vulkan API ожидается к концу года на конференции SIGGRAPH в августе, а её окончательная стандартизация, вероятно, состоится на конференции GDC в следующем году, и тогда же появятся первые публичные драйвера для различных видеокарт и систем.

По материалам ресурсов g-truc.net и imgtec.com.


Ссылка: http://www.oszone.net/26682/AMD_i_Imagination_o_tom_chto_izmenyat_Vulkan_i_SPIR-V