Mantle и DirectX 12 vs DirectX 11: результаты тестирования на бенчмарке Star Swarm

Наши коллеги из AnandTech опубликовали результаты сравнительного испытания двух новейших API — Mantle и DirectX 12, которыми мы бы хотели с вами поделиться. Напомним, что речь идет об интерфейсах программирования приложений, анонсированных соответственно AMD (сентябрь 2013), a вслед за ней Microsoft (март 2014). Оба интерфейса совместимы только с Windows, но если DirectX 12 является преемником кросс-платформенного (т.е. работающего с любыми графическими ускорителями, включая Nvidia и AMD) DirectX 11, то Mantle стал первым API, выпущенным компанией AMD исключительно для собственных графических ускорителей. Особенностью обоих API стал прямой доступ к аппаратным ресурсам. До сих пор он был возможен только в игровых приставках — отсюда их способность тянуть игры с графикой, для которой на ПК требуются более производительные видеокарты.

Для чего же нужен прямой (низкоуровневый) доступ к аппаратным ресурсам? Все дело в т.н. «бутылочном горлышке» (узком месте), которое возникает на уровне ЦПУ. Какой бы производительностью не обладала дискретная видеокарта (ГПУ), обменивающийся с ней данными процессор (ЦПУ) будет тормозить всю работу, если недостаточно его собственного быстродействия. Заядлые геймеры знают, как важно правильно подобрать пару «процессор — дискретная видеокарта». Чтобы ЦПУ с одной стороны не слишком тормозило работу ГПУ, а с другой не имело избыточных, невостребованных в работе, ядер (за которые придется напрасно переплачивать при покупке процессора). Проблему этих избыточных ядер фактически и решает низкоуровневый API — он позволяет распределить нагрузку между несколькими ядрами ЦПУ, в то время как в высокоуровневых API это бывает невозможным, и вся нагрузка в ЦПУ ложится на одно ядро. Особенно это актуально в сценах с большим количеством draw calls (генерируемых в сцене объектов). В условиях бурного роста производительности дискретных видеоускорителей и наращивания количества ядер в ЦПУ, решение проблемы «бутылочного горлышка» в играх на ПК стало весьма актуальной задачей. В этом отношение выпустившая Mantle компания AMD сделал «ход конем», на который не могли не ответить другие участники рынка. Правда, в официальной информации от AMD про Mantle упор делается не столько на «масштабировании производительности при увеличении количества ядер CPU«, как у DirectX 12, сколько на возможности разработчиков ««общаться» с видеокартой напрямую без «переводчика»» (т.е. ЦПУ) и его «освобождении от лишней работы«.

Помимо Microsoft с ее DirectX 12, брошенный компанией AMD вызов приняли Khronos, которая в августе 2014 анонсировала кросс-платформенную OpenGL Next, и даже Apple с первым API собственной разработки для мобильной iOS, Metal. Подобно Mantle и DirectX 12, оба этих API поддерживают низкоуровневое взаимодействие с ГПУ и ЦПУ. Причем Khronos и AMD объявили о совместном сотрудничестве, в рамках которого все разработки AMD в области Mantle были переданы Khronos. Поэтому не исключено, что со временем Mantle будет поглощена кросс-платформенной OpenGL Next.

Такова краткая предыстория вопроса. Теперь давайте посмотрим на результаты, полученные AnandTech при запуске двух версий Star Swarm — DirectX 12 и Mantle. Сразу подчеркнем, что этот синтетический бенчарк содержит огромное количество draw calls, поэтому полученные в нем результаты характеризуют только один из аспектов графической производительности. Для сравнения в игре Battlefield 4, которую с DirectX 12 тестировали в лаборатории AnandTech, даже в сценах с большим количеством объектов (например, разлетающихся от взрыва осколков), прирост производительности оказался значительно скромнее (см. ниже).

Эксперты AnandTech погоняли на DirectX 11, DirectX 12 и Mantle несколько видеокарт от Nvidia и AMD с 6-ядерным процессором Intel Core i7-4960X, масштабируя как настройки видеокарты, так и, что важнее, количество задействованных ядер ЦПУ. Именно эти результаты мы и предлагаем вашему вниманию. Информация приводится в разрезе как API, так и количества ядер. Начнем с API ( 4-ядерный режим):

Как видим, DirectX 12 и Mantle по сравнению с DirectX 11 показывают весьма внушительный прирост производительности, особенно в случае с видеокартой Radeon R9 290X — от 8.3 к/с до 45.6 к/с (в 5.5 раз). Исключением стала видеокарта GeForce 750 Ti — прирост составил всего 23%. В целом такой результат можно было бы признать невероятным, но напоминаем, что в реальных играх рассчитывать на него не приходится. Посольку в DirectX 11 нагрузка в основном ложится только на одно ядро ЦПУ, взлет производительности в новых API обусловлен, очевидно, задействованием дополнительного количества ядер ЦПУ. Но какого именно количества? На этот вопрос поможет ответить тест, в котором попеременно задействованы шесть, четыре и два ядра. Для начала возьмем два самых топовых графических ускорителя, в которых высокая производительность ГПУ скорее обнаружит «бутылочное горлышко» ЦПУ:

Задействование дополнительных ядер в старом DirectX 11 дает весьма умеренный прирост — максимум на треть. Выигрыш у DirectX 12 и Mantle еще скромнее — около 20%. Таким образом, вне зависимости от того, чему обязан рост производительности («общению» с видеокартой минуя процессор или распределению нагрузки между ядрами ЦПУ), использование более чем двух ядер ЦПУ дает незначительный выигрыш (разумеется, по меркам приведенных выше данных). Между прочим, схожим образом дела обстоят и у мобильных приложений — по статистике в них используется в основном не более двух ядер.

Что касается поведения непосредственно в играх, то с учетом примерно одинакового результата Mantle и DirectX 12 в бенчмарке Star Swarm, можно предположить, что и там у обоих API рост производительности окажется на одном уровне. Благодаря проведенному AnandTech год назад тестированию, мы располагаем данными по быстродействию Battlefield 4, оптимизированному с помощью Mantle. По оценкам создателей игрового движка Frostbite 3, на котором разрабатывался этот шутер от первого лица, рост производительности составил до 58%. В тесте были задействованы две видеокарты AMD Radeon R9 290X 4 Гб и 6-ядерный процессор Intel Core i7-3970X Extreme с частотой 3.5 ГГц. Игра (уровень «Южно-китайское море», эпизод на разрушенной палубе авианосца) была запущена с настройками 1080р, «ультра», 4×MSAA.

В своем испытании эксперты AnandTech использовали тот же эпизод игры, ту же видеокарту (но только одну) в связке с разными процессорами. Максимальный прирост производительности у них составил 41%.

Согласитесь, что 1.5-кратное увеличение числа кадров в секунду за счет одной только программной оптимизации — результат очень неплохой.

Поддержка DirectX 12 будет встроена в Windows 10, обновление на которую владельцам Windows 7 и Windows 8 будет доступно бесплатно. Новые подробности о DirectX 12, Mantle и OpenGL Next мы рассчитываем узнать по итогам конференции разработчиков игр GDC 2015, которая менее чем через месяц состоится в Сан-Франциско.

С использованием данных AnandTech