Api directx 12


DirectX 12

VRS – это новая технология рендеринга, поддерживаемая видеокартами NVIDIA Turing (серии RTX 20 и GTX 16), которая увеличивает производительность, регулируя скорость шейдинга для разных участков кадра. VRS поддерживает технологию адаптивного шейдинга NVIDIA, которая измеряет количество движений и изменения цветов в каждом кадре и интеллектуально снижает скорость шейдинга в тех участках кадра, где это возможно, например, в фрагментах неба или стен. VRS также можно использовать в играх в виртуальной реальности для фовеального рендеринга – прорисовки большого количество деталей в области центра зрительного внимания и меньшего – в области периферийного зрения.

Page 2

Видеокарты GeForce® RTX созданы на базе NVIDIA Turing™, самой современной в мире архитектуры для игр и работы с графикой. Получите по-настоящему революционную производительность благодаря специальным ядрам с поддержкой технологий искусственного интеллекта и трассировки лучей, которые обеспечивают непревзойденные возможности.

*Metro Exodus, Ultra Game Settings, 1440p, i9-7900x, 16gb ram, Win 10 x64

Аппаратное ускорение трассировки лучей, благодаря которому обрабатывается до 10 млрд лучей в секунду, что в 10 раз превосходит возможности видеокарт предыдущих поколений. Это позволяет проводить трассировку лучей в реальном времени, создавая объекты и окружения с физически точными тенями, отражениями, преломлениями и освещением.

Искусственный интеллект является движущей силой величайших технологических достижений в истории, а благодаря архитектуре Turing возможности искусственного интеллекта становятся доступны в компьютерной графике. Производительность более 100 Терафлопс в операциях с использованием ИИ для значительного повышения быстродействия в играх с NVIDIA DLSS.

Технология Variable Rate Shading оптимально распределяет ресурсы на обработку участков изображения с разной детализацией, повышая общую производительность и не влияя на воспринимаемое качество картинки. Продвинутая технология обработки геометрии Mesh Shaders поддерживает на порядок большее число объектов в сцене, что позволяет создавать более сложные и красочные миры.

Благодаря одновременной обработке данных с плавающей точкой и целыми числами графические процессоры Turing более эффективно справляются со сложными вычислительными нагрузками в современных играх.

Трассировка лучей – важная составляющая игровой графики, моделирующая физическое поведение света. Она обеспечивает рендеринг кинематографического качества для создания насыщенных визуальных эффектов в играх, которые ранее были невозможны.

Невероятно быстрые и бесшумные. Поддержка технологий искусственного интеллекта и трассировки лучей в реальном времени. А также мобильность самых тонких и легких моделей в мире. Все, чего так хочется современным геймерам.

  • РОССИЯ
  • УКРАИНА
  • КАЗАХСТАН
  • АРМЕНИЯ

  • РОССИЯ
  • УКРАИНА
  • КАЗАХСТАН
  • АРМЕНИЯ

© 2019 Компания NVIDIA. Все права защищены. NVIDIA, логотип NVIDIA, NVIDIA Turing, GeForce и RTX SUPER являются зарегистрированными торговыми марками и/или торговыми марками корпорации NVIDIA в США и других странах. Все другие названия товарных знаков и авторские права принадлежат соответствующим владельцам.

An unexpected error occurred. Please try again later.

The email address associated to this account has been already added to the GFN waitlist.

А. Если вы находитесь в Беларуси, Казахстане, или Армении, вы можете ознакомиться со списком партнеров по продажам в этих странах ниже на данной странице. Также вы можете получить справочную информацию о покупке, написав нам на [email protected]

Б. Если вы находитесь на территории Украины вы можете ознакомиться со списком партнеров по продажам ниже на данной странице. Также его можно найти здесь.

В. Если вы находитесь в другой стране, вы можете получить справочную информацию о покупке, написав нам на [email protected]

www.nvidia.com

Железный эксперимент: DirectX 12 против DirectX 11

Компьютеры2016 год станет особенным и судьбоносным для компьютерных геймеров. AMD и NVIDIA представят новейшие архитектурные разработки: Polaris и Pascal. Выйдет большое количество игр, поддерживающих DirectX 12. Первые «ласточки» уже появились в продаже. А это значит, что настало время на деле оценить возможности этого API.

На словах у Microsoft все просто великолепно. DirectX 12 дает программисту полный доступ к комплектующим компьютера. «Полный доступ к ресурсам железа» способствует лучшей оптимизации игр. Если это интересно разработчику, конечно же. А «улучшенная оптимизация» — это рациональное использование системных требований. Цепочка ясная и логичная. По идее, все должны быть в плюсе. Разработчики реализуют свой творческий потенциал и обзаведутся любовью (и денежками) геймеров. Игроки получат качественный продукт без серьезных затрат на покупку очень мощного компьютерного железа.

30 сентября 2016 года DirectX исполнится 21 год. Но только в 12-й версии Microsoft решила перейти к низкоуровневому программированию.

Я уже высказывал свое мнение относительно DirectX 12. В последнее время среди компьютерных (и консольных тоже) игр присутствует слишком много низкокачественного продукта. Халтурят все, даже так называемые ААА-проекты то и дело щупают дно. Складывается впечатление, что разработчики вообще не утруждают себя тестированием и оптимизацией своей продукции. Либо бешеные дедлайны маркетологов заставляют программистов выпускать в продажу откровенно сырой продукт. В результате качество графики в компьютерных играх за последние пару лет кардинальным образом не увеличилось. Чего не скажешь о системных требованиях. Купить видеокарту за 650 долларов США, чтобы не получить 60 кадров в секунду в разрешении Full HD — это уж слишком, знаете ли! Выход видеокарт Polaris и Pascal отчасти исправит эту ситуацию, ведь откровенно устаревший 28-нанометровый техпроцесс используется вот уже целых пять лет. Переход на 16-нанометровые «рельсы» даст серьезный толчок в плане быстродействия. В сложившейся ситуации помочь должен и DirectX 12. Конвейер заработал, в марте поддержкой нового API обзавелись достаточно культовые франшизы про «Агента 47» и расхитительницу гробниц Лару Крофт.

Про основную «фишку» DirectX 12 я написал. Низкоуровневый API снижает уровень абстрагирования оборудования. Подробно про двенадцатую версию детища Microsoft мы уже писали. Не вижу смысла повторяться. Возможности DirectX 12 в «вакууме» наглядно демонстрирует специальный тестовый пакет бенчмарка 3DMark. Согласно результатам, эффективность низкоуровневых API (не забываем про Mantle и Vulkan) выше минимум на порядок. Все очень просто: DirectX 11 накладывает ограничения на количество команд отрисовки центрального процессора. Но будем честны: 3DMark — это всего лишь 3DMark. Цифры красивые, однако с реальностью никак не соотносятся.

DirectX 12 поддерживается всеми современными видеокартами, но есть один нюанс. API разделен на три уровня: DirectX 12 API, DirectX 12_0 и DirectX 12_1. Начальную версию интерфейса поддерживают все графические чипы AMD и NVIDIA, выпущенные по 28-нанометровому техпроцессу, а также линейка адапетров GeForce 400/500 поколения Fermi. А вот дальше начинаются расхождения. Список поколений 3D-ускорителей занесен в сводную таблицу. Под видеокартами Maxwell 1-го поколения подразумеваются адаптеры GeForce GTX 750/750 Ti.

Поддержка DirectX 12
 DirectX 12 APIDirectX 12_0DirectX 12_1
AMDRadeon R9 Fiji;Radeon R9 Fiji;Radeon R9 Fiji.
Radeon GCN 1.1/1.2;Radeon GCN 1.1/1.2.
Radeon HD 7000.
Radeon GCN 1.1/1.2;Radeon GCN 1.1/1.2.
Radeon HD 7000.
Radeon GCN 1.1/1.2;
Radeon HD 7000.
NVIDIAGeForce GTX Maxwell 2-го поколения;GeForce GTX Maxwell 2-го поколения.GeForce GTX Maxwell 2-го поколения.
GeForce GTX Maxwell 1-го поколения;
GeForce Kepler;
GeForce Fermi.
GeForce GTX Maxwell 1-го поколения;
GeForce Kepler;
GeForce Fermi.
GeForce GTX Maxwell 1-го поколения;
GeForce Kepler;
GeForce Fermi.

DirectX 12 работает только с Windows 10. Маркетинг чистой воды, нацелен на увеличение числа пользователей этой ОС. Можно ли этому противостоять? Можно, но только при продвижении другого API. Например, Vulkan.

DirectX 12 работает только в среде Windows 10.

Список игр, поддерживающих DirectX 12, заметно увеличился. В этом материале мы рассмотрим HITMAN, Rise of the Tomb Raider и Ashes of the Singularity. Эти игры поддерживают и DirectX 11, и DirectX 12. Две из них вышли совсем недавно. Ashes of the Singularity все еще находится на стадии beta-тестирования. Эксклюзивно для Windows 10 вышла ремастеринг-версия культовой Gears of War. Совсем скоро появятся игры ААА-класса: Deus Ex: Mankind Divided, Forza Motorsport 6 Apex и Quantum Break. На только что прошедшей выставке GDC представили движок CryEngine V. Отныне все Xbox-эксклюзивы будут выходить в том числе и на ПК. Но только исключительно под Windows 10. Спасибо новой стратегии Microsoft.

Как я уже говорил, DirectX 12 разработан для более качественной оптимизации под современное железо. Технологии Tiled Resources, Typed UAV и Bind, входящие в состав этого API, существенно (на бумаге) экономят ресурс видеопамяти и ориентируют API на использование большего числа ядер центрального процессора. Принцип консервативной растеризации ускоряет расчет теней и фильтра MSAA. Логично, что оптимизация приведет и к улучшению качества графики, но самое главное — это все же увеличение стабильности и быстродействия.

Давайте сравним графику DirectX 11 и DirectX 12 в HITMAN и Rise of the Tomb Raider. Ниже прикреплено несколько скриншотов в разрешении Ultra HD (осторожно, каждый файл весит 8-10 Мбайт!). Настройки качества — .

DirectX 12 — это не про качество.

Игра про «Агента 47» сразу же получила поддержку DirectX 12. Клиент включает встроенный бенчмарк. Он заметно облегчает процесс тестирования, но некоторые коллеги отмечают, что в игре есть локации, которые сильнее нагружают систему, нежели подготовленный разработчиком скрипт. Rise of the Tomb Raider обзавелась поддержкой нового API при помощи патча. Игра также обзавелась встроенным бенчмарком.

Видите разницу? Я — нет. Понимаю, что по скриншотам тяжело судить о качестве графики, но даже в динамике разницы между DirectX 11 и DirectX 12 я не ощутил. А раз так, то использование нового программного интерфейса должно заметно увеличить производительность системы. Ведь хоть в чем-то должна быть польза от этого API?

Rise of the Tomb Raider. DirectX 11

Rise of the Tomb Raider. DirectX 11

Rise of the Tomb Raider. DirectX 11

Тестовый стенд:

  • Процессор: Intel Core i7-5960X @3,5 ГГц
  • Кулер: Corsair h210i
  • Материнская плата: GIGABYTE GA-X99-UD7 WIFI
  • Оперативная память: DDR4-2133 4x 4 Гбайт
  • Видеокарта: AMD Radeon R9 Nano, AMD Radeon R9 290, NVIDIA GeForce GTX 970
  • Накопитель: SSD Patriot Blast 480 Гбайт
  • Операционная система: Windows 10 x64
  • Драйверы: AMD Crimson Edition 16.3 Hotfix, NVIDIA 364.51

Для сравнения DirectX 11 и DirectX 12 я взял две популярные видеокарты: GeForce GTX 970 и Radeon R9 290. Игры запускались с разными настройками качества графики:

  • Rise of the Tomb Raider — пресеты Medium, High и Very High. Сглаживание SMAA всегда включено.
  • HITMAN — пресеты Medium, High и Ultra. Сглаживание SMAA, 16-кратная анизотропная фильтрация и SSAO всегда включены.
  • Ashes of the Singularity — пресеты Standard, High и Crazy.

Скриншоты с описанием всех настроек качества графики расположены в одноименной .

Прежде, чем анализировать полученные результаты, скажу следующее: DirectX 12 привнес в HITMAN и RotTR большое количество багов. Во время тестирования я пару раз столкнулся с элементарным зависанием и отображением просто черного экрана. В DirectX 11 такого не было. Изучив гневные посты в соответствующих топиках клиента Steam, стало понятно, что с нестабильной работой игр с новым API столкнулось приличное количество геймеров. Что ж, оптимизация достойна «похвалы»! Баги и нестабильность в марте стали визитной карточкой DirectX 12, если учесть, что обновленная версия Gears of War тоже тормозит и глючит. Мог бы рассказать и про мои приключения с защитой Denuvo, но к теме DX11/12 они не имеют никакого отношения.

DirectX 12 сырой. Высохнет ли?

Начнем со среднего качества графики. Здесь наблюдается самая интересная картина. У GeForce GTX 970 прирост FPS наблюдается в… да ни в какой игре! В RotTR и HITMAN количество кадров только снизилось. А вот Radeon R9 290 показал другие результаты. Отрендеренные приключения Лары Крофт отреагировали на новый API уменьшением FPS. А вот в саге про «Агента 47» и стратегии Ashes of the Singularity прирост есть: на 5,9% и 20,7% соответственно. Еще сильнее в HITMAN увеличился минимальный FPS — на 36,7%.

При переходе на пресет качества графики High тенденция для видеокарты NVIDIA не изменилась. Разве что минимальный FPS в «Хитмане» увеличилась на 12,8%. Мелочь, а приятно. С Radeon R9 290 новый API работает эффективнее. Не забываем, что HITMAN — «красная» игра, движок оптимизирован под работу с видеокартами Radeon. Поэтому я не удивлен тому факту, что переход с одного DirectX на другой дается архитектуре GCN легче, а Maxwell — никак. В итоге для «двухсот девяностой» прирост составил 40,5% для минимального FPS и 8% для среднего.

Впрочем, с увеличением качества графики (читай — нагрузки на видеокарту) эффективность DirectX 12 снизилась даже для Radeon R9 290. В HITMAN минимальный FPS вырос на 35,3%, а среднее количество кадров увеличилось на 9,1%.

Подведем промежуточный итог. Во-первых, я вообще не понимаю, зачем DirectX 12 внедрили в Rise of the Tomb Raider. Качество изображения не улучшилось, FPS упал! Судя по отзывам, не у меня одного. HITMAN в DirectX 12 более-менее работает только с Radeon R9 290. Совпадение? Не думаю. Средний FPS увеличился несильно: на 8-10%. Если честно, от DirectX 12, вокруг которого было столько шума, я ожидал большего. Впрочем, мои ожидания, как сказал один любитель чипсов, — это мои проблемы. В Ashes of the Singularity видно, что с увеличением нагрузки на видеокарту разница между DirectX 11 и DirectX 12 уменьшается. Опять же я говорю о видеокарте AMD. У GeForce GTX 970 все в порядке и в DirectX 11.

DirectX 12 серьезно не увеличил производительность. В некоторых случаях только снизил быстродействие. Приплыли.

Интересно, что новый API ведет себя крайне нестабильно. Судя по отзывам коллег, на одних системах прирост есть. Например, как у меня в HITMAN с видеокартой Radeon R9 290. На других стендах он отсутствует. Какого-то определенного алгоритма не существует. Полный рандом. Конечно же, ни о какой оптимизации речи не идет. Технологии CrossFire и SLI в DX12-режиме не работают.

Технологии, используемые в DirectX 12, должны оптимизировать работу центрального процессора, а также рациональнее задействовать ресурсы оперативной и видеопамяти. В случае с RotTR и HITMAN ничего такого не наблюдается. Начну с количества ядер процессора. Для этого испытания использовалась более мощная видеокарта Radeon R9 Nano. Настройки — . Rise of the Tomb Raider в режиме DirectX 12 все равно, сколько ядер у твоего CPU. А вот и прирост в сравнении с DirectX 11. Правда, мало кто использует в современных игровых системных блоках 2-ядерные процессоры.

DirectX 12 не задействует все вычислительные мощности центрального процессора и потребляет больше памяти.

С HITMAN’ом ситуация еще интереснее. При активации DX12 для чипов AMD на архитектуре GCN 1.2 вертикальная синхронизация не отключается. То есть у Radeon R9 Nano/Fury/Fury X, а также адаптеров уровня Radeon R9 380/380X есть ограничение в 60 FPS. У Radeon R9 290/290X/390/390X такой «глюк» не наблюдается. Сама игра распараллеливает нагрузку на несколько ядер процессора, но подобная многопоточная оптимизация реализована и в DirectX 11.

А теперь просто приведу два факта: игры с DirectX 12 потребляют больше оперативной и видеопамяти. Сила низкоуровневой оптимизации в действии! Судя по «прожорливости» Rise of the Tomb Raider, 16 Гбайт ОЗУ официально становится необходимым минимумом для игрового компьютера.

Что это было? После знакомства с первыми играми, поддерживающими DirectX 12, я остался крайне недоволен увиденным. Понятно, что новый API только набирает обороты, но зачем выпускать заведомо неготовый продукт? Вопрос, впрочем, риторический. Ладно, в HITMAN на видеокартах Radeon есть хоть какое-то увеличение быстродействия. Но в Rise of the Tomb Raider производительность тупо снизилась, а качество графики, если зрение меня не подвело, не улучшилось. Попахивает откровенной халтурой и маркетингом.

Игры с DirectX 12 оказались нестабильными. Я не могу назвать их оптимизированными, так как в сравнении с DirectX 11 рассмотренные HITMAN и Rise of the Tomb Raider не стали использовать (во благо) больше потоков процессора, не стали потреблять меньше памяти. Даже наоборот!

Выключаю эмоции. Нельзя предъявлять серьезные претензии к DirectX 12, рассмотрев всего три игры. Однако не могу не признать, что на данный момент новый API не выглядит средством, облегчающим жизнь геймерам. Пока от DirectX 12 несет маркетингом, вынуждающим пользователя менять свою старую видеокарту на новую, а заодно переходить на операционную систему Windows 10. Подождем первых игр, разработанных специально под новый API. Надеюсь, что идеи, заложенные в DirectX 12, все же дадут свои плоды.

www.ferra.ru

Direct3D 12 programming guide - Windows applications

  • 04/19/2019
  • 2 minutes to read

Direct3D 12 provides an API and platform that allows apps to take advantage of the graphics and computing capabilities of PCs equipped with one or more Direct3D 12-compatible GPUs.

In this section

Topic Description
What is Direct3D 12? DirectX 12 introduces the next version of Direct3D, the 3D graphics API at the heart of DirectX. This version of Direct3D is faster and more efficient than any previous version. Direct3D 12 enables richer scenes, more objects, more complex effects, and full utilization of modern GPU hardware.
New releases Describes the most significant new documentation available with the latest SDK release.
Understanding Direct3D 12 To write 3D games and apps for Windows 10 and Windows 10 Mobile, you must understand the basics of the Direct3D 12 technology, and how to prepare to use it in your games and apps.
Work submission in Direct3D 12 To improve the CPU efficiency of Direct3D apps, Direct3D 12 no longer supports an immediate context associated with a device. Instead, apps record and then submit command lists, which contain drawing and resource management calls. These command lists can be submitted from multiple threads to one or more command queues, which manage the execution of the commands. This fundamental change increases single-threaded efficiency by allowing apps to pre-compute rendering work for later re-use, and it takes advantage of multi-core systems by spreading rendering work across multiple threads.
Resource binding in Direct3D 12 Binding is the process of linking resource objects to the shaders of the graphics pipeline.
Memory management in Direct3D 12 Moving to D3D12 involves doing proper synchronization and management of memory residency. Managing memory residency means even more synchronization must be done. This section covers memory management strategies, and suballocation within heaps and buffers.
Multi-adapter systems Describes support in Direct3D 12 for systems that have multiple adapters installed, covering scenarios where your application explicitly targets multiple GPU adapters, and scenarios where drivers implicitly use multiple GPU adapters on behalf of your application.
Multi-engine synchronization This topic discusses synchronizing access to the multiple independent engines found in most modern GPUs.
Rendering This section contains information about rendering features new to Direct3D 12 (and Direct3D 11.3).
Counters, queries and performance measurement The following sections describe features for use in performance testing and improvement, such as queries, counters, timing, and predication.
Working with Direct3D 11, Direct3D 10 and Direct2D This section covers interop techniques with earlier versions of Direct3D and Direct2D, the Direct3D 11on12 API, and porting guidelines from Direct3D 11 to Direct3D 12.
Working samples Working samples are available for download, showing the usage of a number of features of Direct3D 12.
D3D12 code walk-throughs This section provides code for sample scenarios. Many of the walk-throughs provide details on what coding is required to be added to a basic sample, to avoid repeating the basic component code for each scenario.
Debugging and diagnostics with Direct3D 12 Includes topics that describes how to make best use of the Direct3D 12 Debug Layer with GPU-based validation (GBV), and how to use Device Removed Extended Data (DRED).

docs.microsoft.com

DirectX 12

Stay up to date with latest software releases, news, software discounts, deals and more.

Subscribe December, 29th 2018  -  100% Safe  -  Freeware Free Download

(256 KB) Safe & Secure

  • Latest Version:

    DirectX 12 LATEST

  • Requirements:

    Windows XP / Vista / Windows 7 / Windows 8 / Windows 10

  • User Rating:

  • Author / Product:

    Microsoft Corporation / DirectX 12

  • Old Versions:

    Select Version DirectX 12
  • Filename:

    dxwebsetup.exe

  • Details:

    DirectX 12 2019 full offline installer setup for PC

Microsoft DirectX 12 is a group of technologies designed to make Windows-based computers an ideal platform for running and displaying applications rich in multimedia elements such as full-color graphics, video, 3D animation, and rich audio. DirectX 11 includes security and performance updates, along with many new features across all technologies, which can be accessed by applications using the DirectX APIs.All versions of Windows do not support all versions of DirectX. Here's more on how each version of DirectX works across the Windows family. Take note especially on differences in Windows 10 and Windows 8 or Windows 7 verses previous versions of Windows.

The tool is a set of components in Windows that allows software, primarily and especially games, to work directly with your video and audio hardware.  Games that use DirectX can use multimedia accelerator features built-in to your hardware more efficiently which improves your overall multimedia experience. The DxDiag tool reports detailed information about the DirectX components and drivers installed on your system and can be used.

How to install the latest version of DirectX 12 Latest? Updates will be available through Windows Update. There is no stand-alone package for these versions of DirectX.

This app is only available on PC and is developed exclusively by Microsoft. It's a free download that is required by some games with advanced graphics. Essentially, it makes it easier for developers to unleash the full power of video cards (and virtual video cards) for the best gaming quality. It enhances picture as well as rendering time.

Microsoft DirectX 12 is licensed as Freeware for Windows PC (32-bit and 64-bit) operating system/platform from components without restrictions. DirectX12 is available to all software users as a free download!

Stay up to date with latest software releases, news, software discounts, deals and more.

Subscribe

www.filehorse.com

What’s the Difference Between DirectX 11 and DirectX 12?

DirectX is a collection of APIs, or application programming interfaces, used by software to render multimedia content and communicate with graphical hardware. DirectX’s major component API, Direct3D, handles communications between software and graphics hardware. Because all hardware is different, using a standardized library of functions and calls to communicate with your graphics card speeds up game development. This is called hardware abstraction, and it’s the chief job of the API.

Think about cars: If you can drive one car, you can pretty much drive all of them. The gas and brake pedals are in the same place, and the steering wheel rotates in the same direction and doors open outward. There might be some minor differences in non-critical features like the radio, but overall you know what to expect. DirectX and Direct3D are like that, allowing developers to interface with a wide range of hardware using the same tools. And since most game developers use Direct3D’s standard library, any changes to the API can impact gamers and coders alike.

What’s New in DirectX 12?

Every major update to DirectX and Direct3D brings new features and developments. Direct3D 12, however, brought some especially significant changes. In fact, it could be ushering in a new area of low-level graphics APIs that will change the way games are developed.

Lower-level hardware abstraction

DirectX 12 now lets developers get closer to the “metal” of their users’ graphics hardware, providing access to features previously unavailable for developers. Exposing lower level hardware means that skilled developers can write more efficient code that executes faster. Specifically, developers can improve optimization with faster multi-threaded performance and more efficient CPU utilization. This could potentially allow for low-level optimizations similar to those we see in console gaming where games are tuned for extremely specific mid-range hardware, eeking out performance that would be impossible without such hyper-specific optimizations.

Previously, DirectX 11 only offered a fairly high level of hardware abstraction, which vastly simplifies the process of coding. In fact, that’s the whole idea behind what makes hardware APIs so powerful. But it also meant that opportunities for fine-tuning code against specific hardware features were less frequent. Microsoft’s Developer Blog provides some great insights into how, exactly, DirectX 12 accomplishes this.

Improved Multicore Performance

In the past few years gamers have come to accept that multicore CPUs aren’t as useful for gaming. Games instead rely on fast single-threaded performance. This happens in part because DirectX 11 doesn’t allow for that much parallelization. Multiple CPU threads can submit draw commands simultaneously. However, they’ll still all be processesed in a queue, one at a time. DirectX 12 lifts that limitation, allowing multicore CPUs to send simultaneous instructions to the GPU, opening the door for greater performance on multicore processors.

Draw Call Overhead Reduction

Under DirectX 11 a significant portion of the CPU’s power is spent interpreting API instructions rather than executing game code. DirectX 12 reduces the API overhead, freeing up computation resources for running game code. This means that CPU-limited games could see greater performance, as their CPU power is freed up to handle game code. Most games aren’t CPU-limited today, but its possible that newer games will push this envelope further.

Explicit Multiadapter

DirectX 12 has the power to combine multiple GPUs (AKA “display adapters”) into a single logical unit. This feature, called Explicit Multiadapter, allows multiple GPUs to be instructed by software like a single GPU. For example, with DirectX 12 the integrated GPU on your machine can now tag team with your discrete GPU, lending its own processing power. Greater API support can also mean greater reliability and efficiency in multi-GPU SLI/CrossFire setups. In Microsoft’s testing using integrated graphics in tandem with discrete graphics provided a small but noticeable edge in benchmarks.

How Much Does DirectX 12 Matter for Gamers?

Like a lot of incremental improvements, gamers aren’t going to see night-and-day differences between DirectX 11 and DirectX 12. The new features don’t bring new rendering options that wow users. Nor will you see a 100 FPS jump between the two standards. But these gains in efficiency will eventually lead to greater performance on less powerful hardware, improving your PC’s power without upgrading its hardware.

Is this article useful?

www.maketecheasier.com

Explicit Multi-GPU with DirectX 12 – Control, Freedom, New Possibilities

This blog post is about explicit multi-GPU programming that became possible with the introduction of the DirectX 12 API. In previous versions of DirectX, the driver had to manage multiple SLI GPUs. Now, DirectX 12 gives that control to the application. There are two parts in this blog post. In this first part, I’ll explain how multiple GPUs are exposed in the DirectX API, giving some pointers to the API documentation. Please look for further details in the documentation itself. In the second part, I’ll describe a technique called frame pipelining - a new way for utilizing multiple GPUs that was not possible before DirectX 12.

Background

Since the launch of SLI, a long time ago, utilization of multiple GPUs was handled automatically by the display driver. The application always saw one graphics device object no matter how many physical GPUs were behind it. With DirectX 12, this is not the case anymore. But why start doing something manually that has been working automatically? Because, actually, for a good while before DirectX 12 arrived, the utilization of multiple GPUs has not been that automatic anymore.

As rendering engines have grown more sophisticated, the distribution of rendering workload automatically to multiple GPUs has become problematic. Namely, temporal techniques that create data dependencies between consecutive frames make it challenging to execute alternate frame rendering (AFR), which still is the method of choice for distribution of work to multiple GPUs. In practice, the display driver needs hints from the application to understand which resources it must copy from one GPU to another and which it should not. Data transfer bandwidth between GPUs is very limited and copying too much stuff can make the transfers the bottleneck in the rendering process. Giving hints to the driver can be implemented with NVAPI or by making additional Clear() or Discard() calls for selected resources.

Consequently, even when you didn’t have explicit control over multiple GPUs, you had to understand what happened implicitly and give the driver hints for doing it efficiently in order to get the desired performance out of multi-GPU setups. Now with DirectX 12, you can take full and explicit control of what is happening. And you are no longer limited to AFR. You are free to invent new ways of making use of multiple GPUs that better suit your application.

Adapters - Multiple or Linked Together

DirectX 12 exposes two alternate ways of controlling multiple physical GPUs. They can be controlled as multiple independent adapters where each adapter represents one physical GPU. Alternatively, they can be configured as one “linked node adapter” where each node represents one physical GPU. However, it’s important to note that application cannot control how it sees multiple GPUs. It cannot link or unlink adapters. The selection is done by end user through display driver settings.

Image 1. Multiple physical GPUs seen as multiple adapters Image 2. Multiple physical GPUs seen as a linked node adapter Image 3. Enabling SLI in NVIDIA control panel enables linked node mode in DirectX 12 API

In practice, the linked node mode is meant for multiple equal, discrete GPUs, i.e. classic SLI setups. It offers a couple of important benefits. Within a linked node adapter, resources can be copied directly from memory of one discrete GPU to memory of another. The copy doesn’t have to pass through system memory. Additionally, when presenting frames from secondary GPUs in AFR, there’s a special API for supporting connections other than PCIe. (See IDXGISwapChain3::ResizeBuffers1() in DirectX documentation.)

Image 4. In linked node adapter, connections other than PCIe can be utilized for presenting frames from secondary GPUs in alternate frame rendering

Today, all available linked node implementations link only equivalent GPUs. In practice, applications can build their load balancing between the nodes on this assumption. However, the linked node API doesn’t actually guarantee that nodes have equal performance. Someday, heterogeneous linked node adapters may be available making the load balancing less trivial.

Image 5. Today, linked node adapters are homogeneous in practice.

In this blog post, I’ll focus on linked node adapter due to its suitability for classic multi GPU setups.

Engine requirements

To explicitly utilize multiple GPUs, the renderer needs to be aware of their existence. This requires some new code infrastructure. Building the infrastructure can actually be the task that requires most effort. Once the infrastructure exists, it’s easier to experiment with different ways of utilizing all the GPUs in the system.

When using a linked node adapter, you create one ID3D12Device as you would with a single physical GPU. But various objects that you create through the ID3D12Device use node affinity masks to identify the nodes with which the object is associated. The affinity mask is a bitmask where each bit represents one node (physical GPU). Some objects are exclusive to one physical GPU meaning that exactly one bit in the node mask must be set. Others can be associated with (or created on) arbitrary GPUs.

Image 6. Node affinity bitmasks are used to reference nodes (GPUs)

For example, when you create a ID3D12CommandQueue for submitting work to the GPU, you specify a node mask to identify the physical GPU to which the command queue feeds work. The ID3D12CommandQueue is one of the APIs that are exclusive to one node. Likewise, the ID3D12CommandList objects are exclusive to one node. As a result, you have to replicate your command list pooling system for each node. ID3D12PipelineState, on the other hand, is an example of an object that can be associated with arbitrary nodes. You don’t have to create separate object for each node. The same pipeline state object can be set to command lists associated with any node.

When sharing resources, the application is responsible for synchronizing the command queues to avoid access conflicts. Also, the application must ensure that the queues see resources in the same state, i.e. the resource barriers set by different command queues must match. ID3D12Fence is the synchronization tool that is used for these purposes.

Image 7. Fences are used to synchronize resource access by different queues (GPUs)

DirectX 12 exposes “copy engines”, i.e. command queues that accept only command lists containing copy operations such as ID3D12GraphicsCommandList::CopyResource(). Copy engines are special hardware that can perform copy operations at the same time as graphics and compute engines are doing other work. They are additional parallel processing power available for copy operations. The number of copy engines available at hardware level varies on each GPU model, but a safe assumption is that there is at least one hardware copy engine available per each physical GPU. The copy engines are very useful in multi-GPU programming. Copying resources over PCIe bus is slow and the copy engines allow other processing on the GPU to go on while they are doing the slow copy operations. (However, copy engines are not good for copies within a physical GPU because they are not designed to operate faster than the PCIe bus allows. Graphics and compute engines are much faster for this purpose. Copy engines do have their place on single-GPU systems - for copying from system memory to video memory over the PCIe bus.)

Image 8. A copy engine can do the slow copies between GPUs while other engines continue working.

In a linked node adapter, there is a tier system for cross node sharing functionality. Tier 1 supports only copy operations on resources residing on other nodes. Tier 2 supports using resources through SRVs, CBVs and UAVs in draw and dispatch calls. The tier 2 functionality may seem convenient, but the parallel copy engines cannot do draw or dispatch calls and slowing down the other engines with cross node resource access is usually not wise.

When creating resources, you specify two separate node affinity masks: CreationNodeMask and VisibleNodeMask. The CreationNodeMask determines the node where the resource physically resides. VisibleNodeMask determines the nodes on which the resource is mapped for access. In the CreationNodeMask, exactly one bit must be set but in the VisibleNodeMask, arbitrary bits can be set. When a resource is accessed from other than creation node, data is transferred between nodes. The transferred data may be cached to avoid retransfer when it’s accessed again but the application should not rely on this. There are no guarantees about the caching behavior. I.e. the application cannot ensure that a given resource stays in cache and it cannot see whether or not a given resource is still in cache. For achieving reliable performance, manually replicating art assets (vertex buffers, textures etc) for each node that uses them is recommended. I.e. don’t just create resources on one node and make them visible to others. Using them through SRVs from other nodes is possible, but there’s no guarantees about the performance.

ID3D12DescriptorHeap objects are exclusive to one node. This means that regardless of whether you replicate the resource objects for each node that uses them or not, the resource views must be replicated in any case. Though when cross node access happens with copy engine, resource views are not used. Copy engine access just needs properly set bits in VisibleNodeMask.

If you implement classic AFR, you should manually duplicate all your resources to all nodes. This includes art assets, render targets and constant buffers and other dynamic resources. On each frame, you use the resources that reside on the node doing the rendering for that frame. You upload dynamic data from CPU to resources on that node and render to target resources on that node using asset resources residing on that node. The transfer of the rendered frame to the primary node (the node to which the monitor is attached) for presentation on screen is best done using the special API provided for it. (See again IDXGISwapChain3::ResizeBuffers1()). Possible data dependencies between the frames should be handled with additional resource copy operations using the copy engine.

This concludes part 1. The second part of the blog post examines frame pipelining, one new alternative to classic AFR that’s now possible with the exposed functionality.

To read part 2, click here: Explicit Multi-GPU with DirectX 12 – Frame Pipelining, a New Alternative

developer.nvidia.com


Смотрите также