Страница 2: Multi-GPU: смешанный режим на видеокартах AMD и NVIDIA

До сих пор информация о DirectX 12 больше касалась низкоуровневой природы API, снижения избыточной вычислительной нагрузки и освобождающегося по этой причине потенциала производительности. Конечно, мы провели несколько тестов – сначала известный тест Draw Call пакета 3DMark от Futuremark, затем мы добавили тест DirectX 12 в нашу методику оценки производительности видеокарт. Мы уже сообщали о возможности совместного использования видеокарт AMD и NVIDIA под новым API, но кроме теоретической возможности здесь пока можно добавить немного.

К этому придется привыкать: по одной видеокарте AMD и NVIDIA в тестовой станции
К этому придется привыкать: по одной видеокарте AMD и NVIDIA в тестовой станции

DirectX 12 Multi-GPU Explicit Multi-Adapter или Multi Display Adapter – такими терминами сегодня описывается взаимодействие разных GPU. Технология стала возможной благодаря доступу через API на более глубоком уровне. Теперь разработчики получают более эффективные средства управления памятью и многими другими компонентами «железа». Работа систем multi-GPU под DirectX 11 была полностью в руках разработчиков драйверов. Под DirectX 12 «власть» перешла к разработчикам игр.

Технология Multi-GPU

Но сначала позвольте сказать пару слов о технологии multi-GPU: появление интерфейса PCI Express для взаимодействия видеокарты и остальной системы привел к тому, что AMD и NVIDIA смогли использовать технологию AFR (Alternate Frame Rendering) для сравнительно простой поддержки multi-GPU. AFR подразумевает поочередное вычисление кадров на каждом GPU. Вносить какие-либо изменения в игру или игровой движок при этом не требуется. Разработчикам AMD и NVIDIA достаточно внести в драйверы соответствующую поддержку, чтобы отличия по времени вывода отдельных кадров не приводили к появлению артефактов. AMD представила технологию сглаживания частоты кадров Frame Pacing, NVIDIA тоже ответила собственной аппаратно-программной технологией. Кроме того, синхронизация частоты кадров между GPU и панелью дисплея в виде FreeSync и G-Sync позволяет минимизировать появление артефактов.

Но выбор аппаратной платформы оставался ограниченным. NVIDIA позволяла взаимодействие только идентичных моделей видеокарт, AMD предоставила большую гибкость, по крайней мере, использование видеокарт на одном GPU (например, Radeon R9 290 и Radeon R9 290X). Конечно, тому есть причина – видеокарты разного уровня производительности не могут в AFR рассчитывать кадры за сравнимое время. Решение может заключаться в технологии SFR (Spit Frame Rendering), но она так и не стала популярной. О SFR мы поговорим чуть позже.

Впрочем, уже совершались попытки объединить видеокарты разных производителей без использования официальных режимов SLI и Crossfire. В 2010 году LucidLogix представила технологию Hydra. С помощью дополнительного чипа и программного обеспечения технология распределяла вызовы DirectX и OpenGL между совместимыми видеокартами. Но при этом имелись весьма серьезные ограничения по аппаратной базе и по программной поддержке. Все это привело к тому, что технология Hydra так и не смогла набрать популярность, уйдя в небытие.

DirectX 12 и Multi-Adapter

С появлением DirectX 12 Microsoft представила три режима multi-adapter. В самом простом случае используется упомянутая выше технология AFR с видеокартами одного производителя AMD или NVIDIA. Данный режим ограничивает возможности игровых разработчиков, но вместе с тем уменьшает вероятность потенциального возникновения ошибки из-за глубокого доступа к «железу». Большая часть работы для поддержки выполняется в драйвере, а не под DirectX 12.

Презентация EMAПрезентация EMA

Презентация EMA под DirectX 12

DirectX 12 обеспечивает более глубокий доступ к «железу» даже в системах multi-GPU. Для этого Microsoft представила режим Explicit Multi-Adapter (EMA). В нем игровые разработчики явно задают параметры поддержки multi-GPU. Для каждого одиночного GPU определяется доступ к памяти, описывается взаимодействие GPU между собой – все это должно быть запрограммировано предварительно. Ответственность за работу связки видеокарт теперь полностью лежит в руках разработчиков, что привносит определенные риски. Дополнительные усилия разработчиков не стоит недооценивать, а ошибки должен будет исправлять разработчик, а не Microsoft, AMD или NVIDIA.

Презентация EMA под DirectX 12
Презентация EMA под DirectX 12

В режиме EMA возможны два разных режима: Linked Mode и Unlinked Mode. В режиме Unlinked Mode обеспечивается базовая функциональность EMA, в режиме Linked Mode функциональность расширяется, но ограничения по используемому в комбинации «железу» становятся более строгими. Например, можно использовать только системы SLI и CrossFire под DirectX 12. В режиме Unlinked Mode вы можете комбинировать разные видеокарты, в том числе и от разных производителей. Возможна комбинация дискретного и интегрированного GPU.

Презентация EMA под DirectX 12
Презентация EMA под DirectX 12

В режиме Unlinked Mode каждый графический процессор считается самостоятельной аппаратной единицей, со своей памятью, командным процессором и т.д. EMA под DirectX 12 позволяет обмениваться данными между аппаратными единицами, причем на глубоком уровне, а не просто готовыми кадрами. Можно обмениваться частично просчитанными кадрами или данными в буферах, что позволяет выйти на новые уровни совместного рендеринга на нескольких GPU.

На первый взгляд все звучит просто, стал возможен обмен данными, что открывает доступ к алгоритмам, ранее недоступным. Но на практике все сложнее. Данные придется передавать по интерфейсу PCI Express, что намного медленнее связи между GPU и локальной видеопамятью, да и задержки довольно большие. Так что разработчикам следует определить, какие данные имеет смысл передавать между GPU, чтобы интерфейс PCI Express не стал «узким местом». Также следует определиться, в каком виде передавать данные. У разных производителей и даже разных поколений GPU зачастую используются разные форматы данных, которые не всегда просто перевести из одного в другой. Придется прилагать дополнительные усилия, необходимые для реализации EMA в Unlinked Mode. Впрочем, фокусом Unlinked Mode в EMA является все же совместная работа дискретных и интегрированных GPU, но и здесь могут использоваться GPU разных производителей.

Презентация EMA под DirectX 12
Презентация EMA под DirectX 12

Режим Linked Mode можно рассматривать как форму SLI или Crossfire под DirectX 12, аппаратные ресурсы в Linked Mode комбинируются в своего рода «видеокарту». Пользователь и игровой движок «видят» только один GPU и память. Аппаратные ресурсы здесь будут использоваться более тесно и глубоко, что открывает больше возможностей, но при этом накладываются дополнительные ограничения на «железо». Самый большой потенциал производительности можно будет раскрыть через Linked Mode, а самый большой уровень гибкости – через Unlinked Mode. Если разработчики хотят приложить минимальные усилия, и им достаточно базовой функциональности системы multi-GPU, то достаточно поддержать простой вариант EMA, доверившись квалификации разработчиков драйверов AMD и NVIDIA. Но поскольку только разработчики игры в полной мере владеют всеми нюансами своего продукта, то поддержка Linked и Unlinked Mode тоже весьма желательна.

EMA в Ashes of the Singularity

Oxides Games и Ashes of the Singularity в октябре 2015 открыли ранний доступ Steam к своей игре. Стратегия реального времени должна выйти совсем скоро, 22 марта 2016 года. Она станет первой игрой данного жанра с поддержкой DirectX 12, разработчики Oxides Games первыми постарались полностью задействовать возможности DirectX 12. AMD и Microsoft в сотрудничестве со студией разработчиков смогли построить на основе игры технологическую демонстрацию. Для демонстрации EMA разработчики Oxides Games использовали технологию AFR. Они управляли распределением кадров по отдельным GPU – ранее эту работу выполнял драйвер. Также разработчикам пришлось самостоятельно решать вопрос передачи кадров от дополнительных GPU на основной, а также реализовывать сглаживание частоты кадров (Frame Pacing).

Технология AFR лучше всего работает при использовании идентичных видеокарт, поскольку они справляются с расчетом кадров за близкое время. В любом случае, данная реализация идет дальше, чем привычные варианты AMD и NVIDIA. Вы можете комбинировать разные GPU от разных производителей, что позволяет одновременно работать, например, GeForce GTX Titan X с GeForce GTX 980 Ti. Но для работы все видеокарты должны поддерживать DirectX 12. Кроме того, комбинация высокопроизводительны видеокарт со слабыми не имеет особого смысла. Лучшие результаты будут достигаться при работе двух GPU со сравнимой производительностью.

Игра Ashes of Singularity по-прежнему находится в альфа-состоянии. И поддержка Unlinked Mode EMA является экспериментальной. Можно использовать только определенную комбинацию драйверов AMD и NVIDIA, но результаты оказались намного лучше, чем можно было ожидать. Oxides Games сначала будет улучшать Unlinked Mode, после чего перейдет к поддержке Linked Mode. Здесь ожидается прирост производительности в диапазоне 5-10%.