Как разница между 11 директом и 12. DX11 и DX12: а есть ли между ними разница? Тестовый стенд, методика тестирования

  • 03.03.2020

Технологии принадлежит будущее, — столь много усовершенствований вобрал в себя новый интерфейс программирования. Direct3D 12 (и его кроссплатформенный коллега Vulkan) позволяет игровому движку более эффективно распоряжаться ресурсами GPU за счет прямого управления теми задачами, которые в предыдущих итерациях API выполнял драйвер или сами библиотеки Direct3D. Современные GPU в полной мере поддерживают функции рендеринга Direct3D 12 и обеспечивают эффективную интеграцию графики с вычислениями общего назначения (так называемыми асинхронными вычислениями).

Вот только на практике API нового поколения еще далеки от реализации всего заложенного в них потенциала. Не будем приукрашивать картину, которая открылась в первой части тестирования видеокарт в Direct3D 12 и Vulkan. Фактически лишь две из игр, которые мы постоянно используем в качестве бенчмарков GPU, показали, на что способно новое ПО при должном старании разработчиков, — мы говорим о Ashes of the Singularity и DOOM. В остальных тестах при смене API можно рассчитывать в лучшем случае на умеренный рост быстродействия, и то с массой оговорок.

Так, среди графических процессоров последних поколений только большие чипы AMD — Hawaii (Radeon R9 390X), Fiji (Radeon R9 Fury X) и Vega (Radeon RX Vega 64) — проявили большую симпатию по отношению к Direct3D 12. На быстродействие флагманской видеокарты NVIDIA (GeForce GTX 1080 Ti) программный интерфейс в среднем никак не влияет, а остальные «зеленые» процессоры работают под ним хуже, чем под старым. Наконец, Microsoft невольно выдала черную метку чипам с архитектурой Kepler и Maxwell, которые, по всей видимости, уже никогда не обретут полноценной поддержки в игровых движках под Direct3D 12.

Слабость API нового поколения является обратной стороной их силы: «тонкие» библиотеки Direct3D 12 отдали множество функций разработчикам игровых движков, а внедрение нужных приемов программирования в массовом ПО идет с запозданием. Неудивительно, ведь в игровых компьютерах по-прежнему стоит масса видеокарт, которые в лучшем случае лишь формально совместимы с Direct3D 12 и Vulkan, поэтому мощную оптимизацию игр под новые API пока можно наблюдать лишь в отдельных проектах на основе собственных движков.

Графические API и процессорозависимость

Однако часть функций Direct3D 12 и Vulkan не требует от разработчиков игр особенных усилий. Сама структура конвейера этих API позволяет снизить нагрузку на центральный процессор за счет сокращения времени подготовки draw call, что особенно важно, когда на экране присутствует множество отдельных моделей [прим.: Draw call - команда, требующая создать единственную полигональную сетку (mesh)] .

Впервые на эту проблему обратили внимание AMD и DICE, создатели проприетарного низкоуровневого интерфейса Mantle. Первым тайтлом с поддержкой Mantle стала Battlefield 4, но тогда, в 2014 году, игровая графика не была настолько богата геометрией, чтобы центральный процессор ограничивал частоту смены кадров в сбалансированной системе. Даже год спустя мы пришли к выводу (см. наше тестирование процессорозависимости), что любой современный процессор Intel с четырьмя ядрами раскрывает потенциал топовых GPU того времени.

Но за прошедшее время обстановка поменялась: игры стали сложнее, а GPU получили многократно возросшую вычислительную мощность. CPU, напротив, развиваются достаточно медленно с точки зрения однопоточной производительности, а пятое, шестое, седьмое и так далее ядра в играх используются редко. Многие геймеры производили апгрейд с двухъядерного процессора на четырехъядерный с расчетом не менять его еще долгие годы, поэтому сейчас вопрос процессорозависимости вновь стал актуальным.

Самый яркий, хотя и довольно экзотический пример — стратегия Ashes of the Singularity. Ее движок именно за счет быстрой отдачи draw call сильно наращивает быстродействие под Direct3D 12 и Vulkan даже при мощном центральном процессоре. Но в нашей методике есть и другие игры с богатой геометрией. В этот раз мы проведем тестирование на платформе с четырьмя ядрами и сниженной частотой CPU, а потом сравним результаты с тем, что было получено ранее при помощи высокопроизводительного процессора.

В предыдущей части тестирования процессор нашего тестового стенда, Core i7-5960X, работал на постоянной частоте 4 ГГц при восьми активных ядрах. Для имитации более слабого CPU мы отключили половину ядер и установили тактовую частоту на отметке 2,5 ГГц.

Честно говоря, это не очень реалистичная конфигурация для современных CPU Intel (даже младшие модели Core i5 поколений Caby Lake и Coffee Lake берут более высокие частоты при полной загрузке четырех ядер), но она вполне соответствует некоторым моделям предыдущих поколений. 1,5 ГГц — подходящая разница, чтобы наглядно показать связь версии графического API и процессорозависимости, а измерение кадровой частоты на всем спектре моделей современных CPU пусть останется задачей для следующей части нашей серии «Процессорозависимость».

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

По итогам первого тестирования мы дисквалифицировали из участников несколько видеокарт, в первую очередь GeForce GTX 970 и GTX 980 Ti, которые не годятся для игр под Direct3D 12 и Vulkan в силу архитектурных особенностей. Кроме того, были исключены бюджетные игровые видеокарты Radeon RX 560 и GeForce GTX 1050 Ti — у них попросту недостаточно мощные GPU, чтобы оптимизация API сыграла большую роль даже на слабой платформе.

Наконец, мы нашли несколько ошибок в тестовых результатах первой части стати и приведем все данные (как при сильном, так и при слабом CPU) в обобщающих графиках и таблицах. Для того чтобы обеспечить корректное сравнение, новые результаты получены на тех же версиях драйверов (Radeon Software Crimson Adrenalin Edition 18.1.1 и GeForce Game Ready Driver 390.65), которые мы использовали в прошлый раз. Драйверы довольно старые, но, если бы мы повторили тесты на актуальных версиях, это бы не повлияло сколь-либо существенно на результаты. В конце концов, самая свежая из выбранных игр вышла еще в сентябре прошлого года, и драйверы уже содержат оптимизации для всех них. За прошедшее время каких-либо глобальных изменений в ПО, которые поднимают общее быстродействие, производители GPU не внесли.

Тестовый стенд, методика тестирования

Конфигурация тестовых стендов
CPU Intel Core i7-5960X (4 ядра @ 2,5 ГГц, постоянная частота)
Intel Core i7-5960X (8 ядер @ 4,0 ГГц, постоянная частота)
Материнская плата ASUS RAMPAGE V EXTREME
Оперативная память Corsair Vengeance LPX, 2133 МГц, 4 × 4 Гбайт
ПЗУ Intel SSD 520 240 Гбайт + Crucial M550 512 Гбайт
Блок питания Corsair AX1200i, 1200 Вт
Система охлаждения CPU Thermalright Archon
Корпус CoolerMaster Test Bench V1.0
Монитор NEC EA244UHD
Операционная система Windows 10 Pro x64
ПО для GPU AMD
Все видеокарты Radeon Software Crimson Adrenalin Edition 18.1.1
ПО для GPU NVIDIA
Все видеокарты GeForce Game Ready Driver 390.65
Бенчмарки: игры
Игра (в порядке даты выхода) API Настройки, метод тестирования Полноэкранное сглаживание
1920 × 1080 / 2560 × 1440 3840 × 2160
Rise of the Tomb Raider DirectX 11/12 Макс. качество, VXAO выкл. Встроенный бенчмарк Выкл.
Tom Clancy’s The Division DirectX 11/12 Макс. качество, HFTS выкл. Встроенный бенчмарк SMAA 1x Ultra + TAA: Supersampling TAA: Stabilization
DOOM OpenGL 4.5 / Vulkan Макс. качество. Миссия Foundry TSSAA 8TX Выкл.
Deus Ex: Mankind Divided DirectX 11/12 Макс. качество. Встроенный бенчмарк Выкл.
Battlefield 1 DirectX 11/12 Макс. качество. OCAT, начало миссии Over the Top TAA
Ashes of the Singularity: Escalation DirectX 11/12/ Vulkan Выкл.
Total War: WARHAMMER II, встроенный бенчмарк DirectX 11/12 Макс. качество. Встроенный бенчмарк (Battle Benchmark) Выкл.

В тестовую обойму вошли семь игр 2016-2017 годов выпуска, среди которых шесть поддерживают API Direct3D 12 и две — Vulkan. Доподлинно известно, что все они так или иначе задействуют функцию Multi-Engine («асинхронные вычисления»). И пара слов о DOOM. Эта игра использует так называемые Shader Intrinsitc Functions — шейдеры, непосредственно исполняемые на GPU избранной архитектуры, в обход стадии компиляции из высокоуровневого кода. Только Vulkan, в отличие от OpenGL и Direct3D любой версии, дает такую возможность, и только AMD выпустила для Vulkan соответствующее расширение. Собственные Shader Intrinsics есть и у NVIDIA, но они доступны только через проприетарый интерфейс NVAPI или библиотеки GameWorks. Именно поэтому Vulkan в DOOM принес GPU AMD такой мощный прирост быстродействия, хотя не обижены и чипы NVIDIA.

Новая версия DirectX 12, прямо скажем, подзадержалась. DirectX 11 был представлен еще в октябре 2009 года — более четырех лет назад. Для сравнения: путь от DirectX 10 к DirectX 11 занял около трех лет. Сразу отметим: DirectX 12 на Game Developers Conference в Сан-Франциско был всего лишь анонсирован — первые игры на основе DX 12 появятся не раньше конца 2015 года. К этому времени Microsoft может успеть с выпуском Windows 9, какое бы имя эта ОС ни получила в конечном счете.

В общем, на вопрос «Где я могу скачать DirectX 12?» пока нет ответа. Есть только определенные перспективы относительно того, что новая версия API принесет разработчикам и нам, геймерам. А пока что анонс DirectX 12 следует рассматривать как сигнал, что активная работа по развитию DirectX продолжается. Ранее отсутствие видимой активности со стороны Microsoft довело до того, что некоторые уже вообще поставили под сомнение выход новых версий DirectX. Речь идет о прошлогоднем интервью Роя Тейлора, вице-президента AMD по продажам в «канале» (Roy Taylor, Vice President of Global Channel Sales), ресурсу heise.de . Хотя такие заявления следует принимать, как говорится, «со щепоткой соли», особенно в свете собственной инициативы AMD — Mantle (подробнее о ней в нашем обзоре и тестировании AMD Mantle). Как бы то ни было, Microsoft решила напомнить о DirectX и действовать.

В отличие от предыдущих итераций, новый релиз сосредоточен не на графических эффектах и поддержке новых аппаратных функций GPU, а на оптимизации программного стека DirectX под уже существующее железо. AMD убедительно продемонстрировала, что в некоторых отношениях DirectX 11 является бутылочным горлышком, ограничивающим производительность системы. Конкретно: DirectX 11 неэффективен при большом количестве draw calls. Мы исследовали эту проблему в обзоре AMD Mantle, который продемонстрировал весьма впечатляющие результаты в подобных условиях.

Ожидается, что благодаря DirectX 12 эффективность использования CPU увеличится на 50% по сравнению с показателями DX11. По крайней мере такой результат получен с помощью закрытой версии 3DMark 2011, портированной на DX12. Microsoft называет несколько факторов, благодаря которым это стало возможным.

⇡ Многопоточное исполнение инструкций драйвера

Результаты профилирования того же бенчмарка демонстрируют более эффективное распределение нагрузки на CPU между несколькими потоками. На диаграмме видно, что на четыре потока теперь распределяются операции не только самой программы 3DMark, но и драйвера графической карты — речь о компоненте, исполняемом в User Mode.

Кроме того, если присмотреться к диаграмме, то можно заметить, что при использовании DirectX 12 пропадает компонент графического драйвера в Kernel Mode. Речь идет о низкоуровневой подсистеме Direct3D, которая включает менеджер видеопамяти, планировщик GPU, а также miniport driver, который производитель GPU должен предоставить для непосредственного доступа к функциям железа.

Таким образом, вся кухня Direct3D теперь полностью переместилась в User Mode. Сам по себе такой шаг негативно отразится на производительности, но, по идее, он должен быть скомпенсирован за счет более эффективной многопоточности, а также отсутствия смены контекста между User Mode и Kernel Mode.

⇡ Pipeline State Objects

Кроме того, Microsoft непосредственно поработала над проблемой draw calls, которую столь успешно решает Mantle. Для этого потребовалась основательная переделка графического конвейера Direct3D. Здесь необходим небольшой ликбез относительно того, как выполняется рендеринг в Direct3D. Существует несколько стадий (stages) конвейера, которые на абстрактном уровне олицетворяют этапы подготовки изображения. Важно то, что стадии, вопреки тому, как это может показаться, не выполняются одна за другой в реальном времени. От runtime-компонента DirectX требуется определить состояние конвейера (pipeline state), представляющее собой совокупность состояний каждой из стадий, то есть параметры операций, которые выполняет GPU в процессе рендеринга, и ресурсы — данные, над которыми будут произведены операции (текстуры, вершины и так далее). Только когда все это собрано вместе, делается draw call — вызов, запускающий рендеринг объекта. И вот тогда miniport driver графического процессора, в свою очередь, транслирует pipeline state в набор инструкций для GPU на понятном ему языке (hardware state).

Последний этап вносит свой вклад в общее время отрисовки объекта (напомним, эта и все вышеупомянутые процедуры все еще выполняются на CPU). А если объектов на экране много, то возникает пресловутая проблема draw calls, когда производительность CPU становится бутылочным горлышком. AMD Mantle, будучи низкоуровневым API, уменьшает время подготовки конвейера к отдаче draw call просто за счет отсутствия этапа трансляции pipeline state в hardware state . Хотя кто знает, какие еще оптимизации в Mantle включила AMD. Mantle SDK вместе с подробной документацией пока не распространяется публично.

Direct3D 12 по-прежнему является высокоуровневым API, относительно безразличным к железу, на котором выполняется рендеринг (GPU только сообщает о поддерживаемых им функциях). В нем проблема решается по-другому. Вместо того чтобы передавать драйверу pipeline state целиком в момент draw call, состояния множества отдельных стадий конвейера объединены в несколько более крупных объектов — PSO (Pipeline State Objects), которые формируются незавимисо и отдаются драйверу немедленно. Таким образом, не дожидаясь draw call, драйвер может сразу конвертировать PSO в аппаратные инструкции и чуть ли не отправить последние в регистры GPU (в источнике на MSDN этот момент не совсем понятен). Кроме того, укрупнение объектов, олицетворяющих состояния стадий конвейера, позволяет драйверу быстрее разрешать зависимости между последними. Если в процессе подготовки к draw call какой-либо из PSO поменялся, также требуется пересчитать только соответствующие инструкции, а не hardware state целиком.

Также не совсем ясно, почему именно раздельная репрезентация pipeline state должна привести к драматическому уменьшению времени подготовки к draw call. Так или иначе, на трансляцию pipeline state в hardware state все равно расходуется процессорное время. Возможно, ранняя подготовка отдельных PSO как-то поможет быстрее разрешать зависимости при подготовке hardware state, о чем пишут на MSDN. Может быть, преимущество будет получено за счет исполнения runtime-компонента Direct3D и драйвера GPU на разных потоках.

⇡ Command lists, bundles

DirectX 12 также представляет новую модель управления нагрузкой GPU с помощью списков команд (command lists). В модели DirectX 11 уже существует этот термин. API предоставляет два типа контекста устройства (device context): immediate context и deferred context. В первом случае команды непосредственно отправляются на драйвер GPU, во втором — записываются списки команд, которые затем могут воспроизводиться в immediate context. Нововведение DX12 состоит в том, что драйвер GPU в модели Direct3D 11 может заранее просчитывать низкоуровневые инструкции на основе различных списков команд.

В дополнение к спискам команд в Direct3D 12 появилась еще одна сущность — bundles. Bundle представляет собой набор команд, которые могут быть исполнены неоднократно в сочетании с различными ресурсами — к примеру, для рендеринга идентичных объектов с разной текстурой. В этом случае от драйвера требуется только один раз подготовить инструкции для GPU.

⇡ Совместимость, выводы

В отличие от предшествующих версий, DirectX 12 не потеряет совместимости с уже существующими GPU, поддерживающими DirectX 11. NVIDIA уже заявила, что DX12 будет принят процессорами на архитектуре Fermi, Kepler и Maxwell. AMD гарантирует совместимость для GPU на архитектуре GCN, Intel — для графики Iris и Iris Pro в чипах Haswell. DirectX 12 также ожидает портирование на Xbox One.

Впрочем, появилась информация о некоторых дополнительных функциях DirectX 12, которые все-таки потребуют аппаратных модификаций GPU. В целом эту неопределенность, вместе с долгим временем ожидания первых игр с поддержкой DirectX 12, можно рассматривать как знак того, что разработка API пока находится на весьма ранней стадии. В пользу данного предположения говорит и тематика оптимизации использования CPU, которая объединяет DX12 и AMD Mantle, представленный относительно недавно — осенью прошлого года.

Естественно, что DirectX 12 бросает тень на будущее инициативы AMD, которая довольно успешно стартовала и набирает обороты, получая поддержку в популярных игровых движках (Frostbite 3, следующая версия CryEngine). Возможно, именно AMD мотивировала Microsoft тем, что привлекла внимание к недостаткам DirectX 11, но Mantle через полтора-два года уже перестанет быть единственным API, который дает возможность их избежать. При этом совместимость DirectX 12 не ограничивается видеоадаптерами на базе архитектуры GCN. И все же хоронить Mantle рано, ведь у AMD есть много времени, чтобы завоевать лояльность разработчиков. Кроме того, нет никаких гарантий, что DirectX 12 в конце концов будет столь же эффективным, как и Mantle. Как ни крути, DX12 по-прежнему не является низкоуровневым API, в отличие от Mantle, что автоматически дает последнему преимущество в производительности. В этом вопросе рано делать предположения, пока не появились первые результаты публично доступных бенчмарков.

Интерфейсы прикладного программирования (API) долгое время оставались самым консервативным компонентом 3D-графики. Стандарт Direct3D 11 был представлен еще в 2008 году, и до сих пор основная масса новых игр на ПК использует его в качестве основного и в подавляющем большинстве случаев единственного API. Этот островок стабильности в чрезвычайно быстро развивающейся индустрии, какой являются компьютерные игры, образовался отнюдь не из-за традиционализма разработчиков ПО или производителей железа. Напротив, единый стандарт Microsoft, который вытеснил из большой игры некогда могущественного соперника (OpenGL), дал возможность всем участникам рынка сконцентрировать усилия на своих прямых задачах без необходимости оптимизировать драйверы, архитектуру GPU и игровые движки под несколько API одновременно (как в былинные времена под Glide и популярный OpenGL).

Недавние потрясения в этой сфере, связанные с названиями DirectX 12 и Vulkan, вызваны, по сути, усилиями единственной компании - AMD, которая в 2013 году выпустила собственный интерфейс программирования в сотрудничестве с DICE, автором игровой серии Battlefield. В данный момент работа над Mantle прекращена, но оба универсальных API нового поколения заимствовали идеи AMD и преследуют ту же цель - более эффективно использовать вычислительные ресурсы, которые имеются в распоряжении современных GPU.

Несмотря на столь привлекательную идею Direct3D 12 (здесь и далее мы будем говорить именно о графической библиотеке в составе DirectX) и Vulkan, темп внедрения новых API оставляет желать лучшего даже по сравнению с Direct3D 11, которому потребовался чрезвычайно долгий срок, чтобы целиком переманить разработчиков с Direct3D 9. И все же создатели значительного числа громких и высокобюджетных проектов последних двух лет внедрили поддержку Direct3D 12 или Vulkan по крайней мере в виде экспериментальной или побочной функции. В конце концов, методика тестирования GPU на 3DNews уже по большей части состоит из игр с поддержкой этих API. Подходящее время для того, чтобы провести исследование и сделать промежуточные выводы о том, насколько в действительности полезны DirectX 12 и Vulkan для производительности современного железа.

Новые функции Direct3D 12 и Vulkan

О принципах, лежащих в основе Direct3D 12, и его отличиях от предыдущей версии API Microsoft, мы в 2014 году, когда стандарт находился на ранней стадии разработки и многие из его особенностей еще не были финализированы. Главное, что изменилось в облике Direct3D 12 с тех пор, - это набор дополнительных функций рендеринга, открытых для графических процессоров с теми или иными аппаратными возможностями.

Оставим за кадром строение конвейера рендеринга и некоторые особенности программирования под Direct3D 12, которые описаны в нашей давнишней статье. Есть лишь несколько отличительных черт нового API, которые должны волновать широкую публику. Начнем обзор с универсально значимых пунктов и закончим той самой функцией Direct3D 12 (и Vulkan), которая породила много споров, непонимания и завышенных ожиданий на страницах публикаций и форумов, - асинхронными вычислениями.

Самой привлекательной чертой Direct3D 12 и Vulkan является быстрая подготовка т. н. draw call. В то время, когда AMD стремилась популяризировать Mantle, множество людей, ранее далеких от программирования компьютерной графики, были вынуждены познакомиться с этим термином. В 3D-рендеринге так называется команда, требующая создать единственную полигональную сетку (mesh). В играх каждая модель персонажа, юнита и практически любого независимого объекта представляет собой mesh. Следовательно, чем больше таких объектов присутствует на экране, тем больше draw calls должен отдать центральный процессор. Короткая подготовка draw call в Direct3D 12 при прочих равных условиях снижает нагрузку на CPU, сокращает время бездействия графического процессора и в результате дает возможность выводить больше объектов на экран. Помогает и распределение нагрузки в многоядерной системе, которое в Direct3D 12 происходит более эффективно.

Многоядерные CPU в Direct3D 12

В целом прослойка API в стеке ПО, управляющем графическим процессором, стала тоньше по сравнению с Direct3D 11 за счет того, что многие функции, которые в Direct3D 11 выполняются в той или иной степени автоматически (такие как управление памятью, синхронизация между очередями инструкций, поддержание параллелизма нагрузки на GPU и пр.), теперь полностью принадлежат игровому движку. С одной стороны, открываются широкие возможности для оптимизации быстродействия, но с другой - программист должен иметь в виду особенности архитектуры различных GPU, чтобы избежать падения производительности.

Direct3D 12 принес массу функций рендеринга, описанных в рамках feature levels 12_0 и 12_1. Но в отличие от предыдущих итераций Direct3D, 12-я версия предназначена не для того, чтобы явить миру нечто ранее невиданное (как это было с шейдерами в Direct3D 8 и тесселяцией полигонов в Direct3D 11). Действительно, некоторые возможности feature levels 12_0 и 12_1 повышают качество определенных эффектов (к примеру, связанных с прозрачными текстурами), а иные используются в перспективных алгоритмах рендеринга (см. описание VXGI в нашем ). И все же большинство пунктов feature levels 12_0 и 12_1 служит для того, чтобы графический процессор выполнял быстрее ряд уже известных задач, которые в противном случае создают большую нагрузку на пропускную способность блоков наложения текстур, шину памяти и пр.

В принципе, дополнительная вычислительная мощность, которую высвобождает новая версия API, сама по себе позволяет обогатить игровую графику более детализированными текстурами и объектами. Более того, в некоторых играх под Direct3D 12 и Vulkan геймплей тесно связан с выбором API (как в Ashes of the Singularity, которая за счет множества юнитов на экране создает огромное количество draw calls). Но если поставить вопрос в формулировке «Станет ли игра выглядеть лучше, если включить в ней Direct3D 12 или Vulkan?», то на данный момент ответ будет в подавляющем большинстве случаев отрицательным. Масштаб внедрения новых API все еще слишком мал, а железо на руках пользователей слишком разнообразно, чтобы разработчики игр открыли для видеокарт, хорошо работающих под Ditect3D 12 и Vulkan, эксклюзивный доступ к заметной части визуального контента.

При этом от графического процессора не требуется совместимость с feature level 12_0 и 12_1 для работы под Direct3D 12. В действительности GPU с возможностями на уровне feature level 11_0 и 11_1, созданные в ту пору, когда Direct3D 12 не было и в помине (архитектуры Femi и Kepler от NVIDIA и GCN первого поколения от AMD), могут воспользоваться всеми преимуществами runtime-библиотеки Direct3D 12 и, потенциально, получить выигрыш в быстродействии. У AMD и NVIDIA поддержка Direct3D 12 в драйвере начинается с серий Radeon HD 7000 и GeForce GTX 400 соответственно.

Асинхронные вычисления в Direct3D 11 и Direct3D 12

Современные GPU лишь в силу привычки называются графическими процессорами. Архитектура, состоящая из большого количества исполнительных блоков (ALU, потоковых процессоров или CUDA-ядер, в терминологии различных производителей), подходит для исполнения любых программ, легко разделяющихся на независимые друг от друга цепочки операций (GP-GPU, General Purpose GPU) - будь то промышленные задачи, майнинг криптовалюты, машинное обучение и т. д.

Методы GP-GPU применяются и в играх (по меньшей мере с того времени, когда NVIDIA купила компанию - создателя «физического ускорителя» Ageia и адаптировала ее API PhysX для работы на графических процессорах), но ни одна из коммерческих игр еще не может похвастаться тем, что раскрыла потенциал неграфических расчетов в такой степени, как «демки» PhysX, которые периодически демонстрирует NVIDIA. Причина лежит на поверхности: даже лучшие GPU не обладают избытком ресурсов для того, чтобы действительно масштабные вычисления игровой физики не уничтожили частоту смены кадров. Тем более в то время, как перед разработчиками ПО и железа открылись более заманчивые перспективы - разрешение сверхвысокой четкости и VR.

Однако актуальные и потенциальные функции вычислений общего назначения в современных играх не ограничиваются физикой. SSAO (Screen-Space Ambient Occlusion), локальные отражения в экранном пространстве (Screen-Space Reflections), генерация карт теней, различные модели глобального освещения и пр. могут быть реализованы в качестве методов GP-GPU. Нетрудно заметить, что в данном случае отсутствует принципиальная граница между задачами двух типов. Она существует лишь на уровне архитектуры приложения и API, когда графика и вычисления представляют собой отдельные очереди инструкций. Именно одновременное исполнение множественных очередей инструкций лежит в основе того, что называют (не вполне корректно, но об этом позже) асинхронными вычислениями .

В рамках Direct3D 11 существует единственная очередь инструкций для рендеринга графики. И как бы тщательно ни была оптимизирована архитектура GPU, в процессе рендеринга неизбежно возникают «пузыри», когда шейдерные ALU простаивают, в то время как свою работу выполняют другие компоненты процессора - блоки наложения текстур, ROP, шина памяти и т. д.

В свою очередь, Direct3D 12 и Vulkan позволяют создать две отдельные очереди - для графики и вычислений соответственно (не считая очереди для передачи данных по шине PCI Express), а задача распределения ресурсов GPU между ними ложится на сам процессор и его драйвер, которые следят за возникновением «пузырей» в той или иной очереди и эффективно их закрывают за счет инструкций из соседней очереди. В общих чертах подход аналогичен функции Hyper-Threading центральных процессоров.

Прим.: н а самом деле в Direct3D 12 и Vulkan можно создавать множественные очереди всех трех типов - в зависимости от того, сколько поддерживает GPU.

Осталось пояснить, почему термин «асинхронность» не лучшим образом описывает то, что происходит в процессе рендеринга с двумя очередями инструкций, которые мы осторожно назвали отдельными, но не независимыми. Корректный (и официальный для Direct3D 12) термин - Multi-Engine. Дело в том, что те процедуры, которые исполняются в «графической» и «вычислительных» очередях Direct3D 12 или Vulkan, как правило, содержат взаимные зависимости данных: исполнение инструкций в одной очереди должно быть остановлено, пока не будет получен результат определенной инструкции из другой очереди.

В таком случае можно говорить лишь об одновременном (concurrent), но не асинхронном (независимом по времени завершения) исполнении. Примером истинной асинхронности является фоновый процесс с низким приоритетом, протекающий одновременно с рендерингом кадра, - такой, как декомпрессия ресурсов, обновление карт теней в моделях глобального освещения и пр. (см. слайд AMD выше). Таким образом, термин «асинхронные вычисления» применим к узкому кругу задач, в то время как понятие Multi-Engine описывает одновременное исполнение нескольких очередей вычислительных инструкций безотносительно к структуре зависимостей между ними.

Multi-Engine на GPU различной архитектуры: AMD GCN

Рассмотрим животрепещущий вопрос практической реализации Multi-Engine. Популярное мнение гласит, что а) графические процессоры AMD выигрывают от применения Multi-Engine, в то время как чипы NVIDIA (включая Pascal) не могут столь же эффективно использовать его в силу архитектурных ограничений, б) среди архитектур NVIDIA только Pascal поддерживает Multi-Engine. Как нам предстоит убедиться, оба утверждения в целом верны, но полная картина далеко не столь однозначна.

Самый простой для анализа случай - это архитектура GCN (Graphics Core Next), на которой основаны все графические процессоры AMD последних лет, начиная с Tahiti ( /) и заканчивая Vega 10 ( /). Как достоинства, так и недостатки чипов AMD в действительности располагают к применению Multi-Engine. GCN в своей основе ориентирована на вычисления GP-GPU в не меньшей степени, чем на рендеринг графики, и устроена таким образом, что добрая часть задачи насыщения GPU параллелизмом решается на уровне «железа», а не драйвера или приложения. Даже самые ранние чипы GCN обеспечивают одновременное исполнение нескольких очередей «вычислительных» команд одновременно с очередью рендеринга графики за счет командных процессоров двух типов - GCP (Graphics Command Processor) и ACE (Advanced Compute Engine). А начиная с третьего поколения архитектуры (чипы и ), GCN также включает раздельные планировщики для шейдерных и «вычислительных» инструкций. В результате процессор может динамически передавать вычислительные ресурсы отдельных CU (Compute Unit - блок, содержащий 64 ALU) между несколькими очередями инструкций.

Кроме того, GCN допускает сравнительно безболезненную смену контекста CU. Смена контекста в данном случае означает, что CU, находящийся в ожидании данных от длительной операции, которой занимаются другие блоки GPU, получает от командного процессора другую работу, сохранив содержимое своих регистров в каком-либо внешнем хранилище. В GCN этим хранилищем является высокоскоростной интегрированный кеш, и процессор может пользоваться сменой контекста весьма свободно.

Таким образом, управляющая логика GCN способна эффективно загружать исполнительные блоки GPU за счет инструкций из отдельных очередей, заполняя даже сравнительно небольшие «пузыри» конвейера. Итоговый прирост быстродействия зависит от того, насколько часто «пузыри» возникают в режиме одной очереди. Но ведь правда, графические процессоры AMD существенно недогружены в большинстве игр по сравнению с чипами NVIDIA, и с каждым новым поколением ситуация усугубляется. Достаточно взглянуть на Radeon RX Vega 64, которая в задачах GP-GPU по меньшей мере не уступает , но в играх едва справляется с . GCN - «широкая» архитектура, требующая высокого параллелизма для полной нагрузки. Поэтому да, возможности Multi-Engine, которые открывают современные API, могут стать большим подспорьем для AMD - с большой оговоркой о том, что разработчики игр начнут их активно использовать.

Multi-Engine на GPU различной архитектуры: NVIDIA Kepler, Maxwell и Pascal

Ситуация с поддержкой Multi-Engine в графических процессорах NVIDIA далеко не столь прозрачна, как в случае с AMD. Материалы NVIDIA, находящиеся в широком доступе, не дают ясного ответа на все вопросы. С полной уверенностью можно говорить лишь о том, каким именно из GPU архитектур Kepler, Maxwell и Pascal вообще разрешено иметь дело со смешанной нагрузкой (графика/вычисления) под управлением Direct3D 12 и Vulkan. А наше представление о том, почему это так, а не иначе, основано по большей части на сторонних источниках и не претендует на истину в последней инстанции. Что поделать, такова политика этой компании, особенно когда речь идет о недостатках их продуктов.

В отличие от AMD, NVIDIA решила разделить свои GPU на преимущественно потребительские либо профессиональные модели, начиная с архитектуры Kepler. Первые изначально лишены массы вычислительных функций, бесполезных в игровых задачах (таких как быстрое исполнение расчетов двойной точности). Кроме того, на пути от архитектуры Fermi (GeForce 400/500) к Kepler, а затем Maxwell разработчики последовательно сокращали управляющую логику GPU, переложив часть функций на драйвер.

Тем не менее поддержка смешанной нагрузки даже в массовых чипах NVIDIA значительно расширилась со времен Kepler. «Мелкие» чипы архитектуры Kepler (GK10X, GeForce GTX 680 и ниже, а также GeForce GTX 770) способны работать с единственной очередью команд, будь то графика или чисто вычислительная задача (ни о каком Multi-Engine речи не идет). В «большом» Кеплере (GK110/210, / и ) и чипах Maxwell первого поколения (GK107, GeForce GTX 750/) внедрили отдельный блок для приема «вычислительных» очередей Hyper-Q, но отдельная «вычислительная» нагрузка одновременно с графикой возможна только под проприетарным API CUDA. Кроме того, «вычислительная» очередь может задействовать один и только один из 32 слотов блока CWD (CUDA Work Distributor), распределяющего цепочки операций между отдельными SM.

Динамическое распределение мощностей между графической и «вычислительной» очередями появилось только в Maxwell второго поколения (серия GeForce 900), но существует критически важное ограничение: перераспределение происходит лишь на границе draw call, а значит, драйверу нужно выделить необходимую для той или иной задачи группу SM (Streaming Multiprocessor, блок, в который организованы CUDA-ядра) заранее. Отсюда возникают ошибки планирования, которые невозможно устранить на лету, и даже при идеальном предсказании эвристики драйвера Maxwell будет пропускать мелкие «пузыри» конвейера. Кроме того, Maxwell несет тяжелые потери от смены контекста, т. к. промежуточные результаты вычислений сохраняются в (обладающей сравнительно высокой латентностью) оперативной памяти, при этом происходит полная очистка кеша L1 и разделяемой памяти GPU. В таких условиях быстродействию не настолько сильно вредит достаточно короткий простой отдельных SM, как смена контекста.

Похоже, именно эти архитектурные ограничения побудили NVIDIA заблокировать Multi-Engine в драйвере для Kepler и Maxwell. Приложение может создать сколько угодно «вычислительных» очередей, но драйвер все равно объединит их с графической очередью. По-прежнему единственная лазейка для разработчиков - это использовать CUDA, хотя на ситуацию с распределением ресурсов и смену контекста API никак не влияет.

Среди «зеленых» GPU только семейство Pascal допущено к функции Multi-Engine в Direct3D 12 и Vulkan, ибо Pascal, в отличие от Maxwell, умеет передавать ресурсы SM между очередями графики и «вычислений» динамически, не дожидаясь завершения draw call. При этом цена смены контекста осталась высокой (вплоть до 0,1 мс или 170 тыс. циклов GPU в случае /1080!), а значит, Pascal по-прежнему ограничен в гибкости при работе с несколькими очередями команд по сравнению с GCN.

В итоге NVIDIA довольно сильно усложнила жизнь разработчикам приложений, желающим использовать Multi-Engine. GCN неприхотлива и предсказуема в плане смешанной нагрузки, но ускорители Radeon на рынке в меньшинстве. С другой стороны, видеокарты с графическими процессорами NVIDIA стоят во множестве игровых ПК и вдобавок принадлежат к нескольким поколениям с различным уровнем поддержки Multi-Engine и методами его использования. Но, к счастью для NVIDIA, ее продукты и без того не испытывают недостатка в быстродействии. Чипы Maxwell и Pascal в сравнении с процессорами GCN соответствующего класса имеют более «узкую» архитектуру с меньшим числом шейдерных ALU, а значит - не требуют столь же высокого параллелизма для полной загрузки.

Графика + вычисления, макс. N очередей Вычисления, макс. N очередей Распределение CU/SM в смешанном режиме
AMD GCN 1.4 (Vega) 1 + Динамическое
AMD GCN 1.3 (Polaris) 1 + Динамическое
AMD GCN 1.2 (Tonga, Fiji) 1 + Динамическое
AMD GCN 1.1 (Hawaii) 1 + 64 64 Динамическое
AMD GCN 1.1 (Bonaire) 1 + 16 16 Динамическое
AMD GCN 1.0 (Cape Verde, Bonaire, Pitcair, Tahiti) 1 + 8 2 Динамическое
NVIDIA Pascal (GP10X) 1 + 31 32 Динамическое
NVIDIA Maxwell 2 (GM20X) 1 + 31 (CUDA) 32 Статическое
NVIDIA Maxwell 1 (GM107) 1 + 31 (CUDA) 32 Статическое
NVIDIA Kepler (GK110) 1 + 31 (CUDA) 32 Статическое
NVIDIA Kepler (GK10X) 1 1 -

В 2015 году компания Microsoft представила новый графический API (средство интеграции приложений) - DirectX 12 для Windows 10. Как отметили многи пользователи, новый «директ икс» намного лучше и шустрее предыдущего. Однако и в его работе есть определённые огрехи. Благо, устранить их не так сложно.

Что такое DirectX 12

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

Зачем DirectX 12 в Windows 10

Как и любой другой графический API, DirectX 12 нужен в основном для корректной работы компьютерных игр с качественной графикой. Он позволяет использовать все ресурсы компьютера, чтобы добиться лучшей производительности и получить «красивую картинку».


Вы можете увидеть, что второе изображение лучше прорисовано: нет размытости деревьев и дальних объектов

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

Чем DirectX 12 отличается от предыдущих версий

Ещё при разработке DirectX 12 производители сообщили, что он разрабатывается для более качественного взаимодействия с современной аппаратной частью. Если сравнивать его с предыдущими версиями, то можно отметить следующие отличия:

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

    Видео: сравнение DirectX версий 11 и 12

    Можно ли использовать DirectX 11.2 вместо DirectX 12

    DirectX 12 идёт в комплекте с Windows 10: все необходимые библиотеки уже имеются на компьютере после установки операционной системы или её обновления до 10 версии. Другими словами, если вы поставили Windows 10, то DirectX 12 уже тоже установлен. Однако не все видеокарты его поддерживают, поэтому иногда, даже с последней Windows, используется DirectX 11.2. Сегодня это не оказывает значительного влияния на работу компьютера, так как DirectX 12 ещё довольно «сырой» продукт. Вы можете использовать DirectX 11.2 вместо версии 12.

    Почему в Windows 10 установлен DirectX 11.2, а не DirectX 12

    Вы установили Windows 10, но вместо DirectX 12 используется версия 11.2. Почему так происходит? Есть две причины:

  • DirectX 12 не поддерживается видеоадаптером (временно, пока производители не выпустили новые драйверы);
  • драйверы графической карты устарели (их можно обновить на официальных сайтах NVIDIA, AMD или Intel).
  • Учитывайте, что производители не будут выпускать драйверы под старые модели видеокарт, поэтому вам, возможно, придётся либо менять графический адаптер, либо использовать предыдущие версии DirectX.

    Как узнать версию установленного DirectX

  • Нажмите одновременно клавиши Win + R. Откроется окно «Выполнить».
    Заметьте, что для диагностики системы нужны права администратора
  • Введите dxdiag в строке для текста. Нажмите «ОК».
    Команда dxdiag открывает «Средство диагностики DirectX»
  • Найдите во вкладке «Система» пункт «Версия DirectX».
    Если у вас стоит Windows 10, то версия DirectX либо 11.2, либо 12
  • Видео: как узнать версию DirectX

    Как установить DirectX 12 на Windows 10

    Если вы хотите установить DirectX 12 на Windows 10 с нуля, то вам понадобится установщик. Его можно скачать с официального сайта компании Microsoft:

  • Перейдите на страницу загрузки библиотек DirectX 12 на сайте Microsoft.
    Файл скачается автоматически, а вы увидите сообщение о начале загрузки
  • Дождитесь начала автоматической загрузки установщика.
    Вы скачаете файл-установщик DirectX 12
  • Запустите скачанный файл.
    Запустите скачанный файл, чтобы начать установку
  • Подтвердите, что принимаете условия пользовательского соглашения. Нажмите «Далее».
    Вы сможете выбрать кнопку «Далее» после принятия условий соглашения
  • Откажитесь от «Установки Панели Bing» (она не нужна для DirectX 12), убрав флажок.
    По желанию можно установить «Панель Bing»
  • Нажмите «Далее», чтобы начать установку.
    Подождите, пока DirectX установится на ваш компьютер
  • Нажмите «Готово», чтобы завершить установку.
    Нажмите на кнопку «Готово», чтобы завершить установку
  • Как обновить установленный DirectX до версии 12

    Если у вас на компьютере уже установлен DirectX, то вы можете просто обновить его до версии 12:

  • Выберите значок Windows в левом нижнем углу экрана. Прокрутите колёсико мыши, чтобы найти «Параметры»
  • Найдите и выберите пункт «Параметры».
    Выберите «Обновление и безопасность»
  • Выберите пункт «Обновление и безопасность». Вы перейдёте в «Центр обновления Windows». Система начнёт автоматическую загрузку обновлений, которые подходят для компьютера, в том числе и DirectX 12, если этот компонент поддерживается видеокартой.
    Windows сама скачает доступные обновления
  • Подождите, пока все обновления скачаются. Они вступят в силу после перезагрузки Windows.
    Завершите установку, выбрав «Перезагрузить сейчас»
  • Обратите внимание, что обновление до DirectX 12 возможно только в том случае, если ваша видеокарта поддерживает эту версию.

    Нужно ли настраивать DirectX 12

    DirectX 12 не является пользовательской программой в привычном смысле: её не нужно запускать (она работает постоянно) или настраивать.

    Когда вы устанавливаете или обновляете DirectX 12, то все настройки, которые нужны для её работы, задаются по умолчанию. Фактически DirectX - средство связи между «железом» и компьютерными программами, к которому у вас нет доступа.

    Все ваши действия по настройке DirectX ограничиваются установкой или обновлением программы.

    Проблемы установки DirectX 12 и способы их решения

    При работе с DirectX 12 могут возникнуть проблемы двух видов:

  • внутренняя системная ошибка (во время процесса установки);
  • постоянные сбои в работе уже установленной программы.
  • Что делать, если возникает внутренняя системная ошибка

    Самой очевидной причиной сбоя установки является повреждение файла установщика. Чтобы избежать этого, скачивайте обновления только с официального сайта Microsoft.

    Внутренняя системная ошибка во время процесса установки DirectX 12

    Если вы скачали DirectX с Microsoft, а ошибка возникла, то нужно проверить жёсткий диск:

  • Нажмите Win + R для открытия «Командной строки».
    Комбинация клавиш Win + R всегда используется для работы с командами
  • Напишите в текстовом поле chkdsk и нажмите «ОК».
    Команда chkdsk запустит утилиту, проверяющую жёсткий диск на ошибки файловой системы
  • Дождитесь окончания проверки жёсткого диска, не закрывая окно. Нас интересует наличие повреждённых файлов.
    Посмотрите на строку «Обработка повреждённых файлов», чтобы определить их наличие
  • Если повреждённых файлов нет, то перейдите к следующей инструкции. Если есть, то нужно использовать утилиту повторно. Откройте «Командную строку» нажатием Win + R и напишите команду chkdsk /F. Эта утилита исправит ошибки файловой системы.
    Команда chkdsk /F запустит утилиту, которая исправит повреждённые файлы
  • Дождитесь автоматического закрытия окна «Командной строки». Исправление ошибок может занять некоторое время.
  • Откройте «Командную строку» комбинацией клавиш Win + R. Введите команду sfc /scannow и нажмите «ОК».
    Утилита просканирует и восстановит системные файлы
  • Дождитесь окончания работы утилиты.
    Утилита нашла и восстановила повреждённые файлы
  • Перезагрузите компьютер.
  • Может быть и такое, что проверка жёсткого диска не помогла решить проблему. В этом случае нужно проверить совместимость DirectX 12 с вашей системой:

  • Откройте на компьютере папку, куда скачан установщик DirectX 12. Щёлкните правой кнопкой мыши по названию файла и выберите «Исправление проблем с совместимостью».
    Кнопка «Исправление проблем с совместимостью» открывает нужный нам режим диагностики
  • Выберите пункт «Использовать рекомендованные параметры» в окне «Устранение проблем с совместимостью».
    Выберите первый пункт, чтобы параметры DirectX соответствовали возможностям вашего компьютера
  • Дождитесь, пока завершится поиск параметров. Нажмите «Проверить программу», чтобы запустить установку DirectX. После установки нажмите «Далее».
    С помощью кнопки «Проверить программу» вы установите DirectX 12 на компьютер
  • Выберите «Да, сохранить эти параметры для программы».
    Сохраните подобранные параметры, чтобы DirectX стабильно работал в будущем
  • Видео: устранение системной ошибки в процессе установки DirectX 12

    Что делать, если DirectX 12 работает некорректно

    DirectX установился на компьютер, но постоянно возникают сбои в его работе. Если окно с предупреждением об ошибке DirectX выпадает довольно часто, то можно:

  • обновить DirectX 12 в «Центре обновления Windows» (последовательность действий описана в пункте «Как обновить установленный DirectX до версии 12»). Обновление настроено таким образом, что недостающие файлы просто подгружаются в уже существующий пакет библиотек на вашем компьютере. Система выдаёт ошибки, потому что ей не хватает каких-то файлов для стабильной работы, а обновление DirectX это исправит;
  • удалить DirectX 12 и установить с нуля (пошаговые инструкции описаны в «Как полностью удалить DirectX 12» и «Как установить DirectX 12 на Windows 10»). Этот вариант следует использовать только в том случае, если обновление DirectX не помогло, так как вам придётся работать с системными файлами.
  • Как откатить DirectX 12 до предыдущей версии

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

    Даже полное удаление DirectX 12 и установка одной из предыдущих версий не помогут, так как в Windows 10 нельзя отключить обновление системы. Даже если вы вручную установите, к примеру, DirectX 11, то он автоматически обновится до версии 12.

    Если вам кажется, что с DirectX 12 компьютер стал работать хуже, то нужно исправить проблемы с совместимостью (последовательность описана в третьей инструкции пункта «Что делать, если возникает внутренняя системная ошибка»). Не беспокойтесь о том, что для некоторых игр нужны предыдущие версии DirectX: библиотеки предыдущих версий обновляются во время установки всех обновлений для Windows 10.

    Как полностью удалить DirectX 12

    DirectX 12 является встроенным в Windows 10 приложением, то есть его нельзя удалить обычными способами. Для корректной работы вам нужно, чтобы эта программа присутствовала на компьютере, поэтому разработчики Windows убрали возможность её удаления. Однако бывают случаи, когда необходимо переустановить DirectX из-за постоянных сбоев в его работе. Для этого придётся использовать сторонние программы. Если есть возможность избежать удаления DirectX (например, проблема решается простым обновлением системы), то лучше ею воспользоваться. Перед удалением DirectX обязательно создайте точку восстановления системы, чтобы в случае некорректного удаления иметь возможность восстановить все данные.

    Восстановление системы

    Функция восстановления системы нужна для того, чтобы вернуть Windows 10 в рабочее состояние и исправить ошибки, которые возникли при удалении или установке новых программ.

    Как создать точку восстановления в Windows 10

  • Щёлкните по значку поиска в левом нижнем углу экрана.
    Щёлкните по полю поиска, чтобы ввести текст
  • Напишите «Панель управления». Откройте её. «Панель управления» позволяет выполнять основные действия по настройке системы
  • Выберите раздел «Система и безопасность».
    Раздел «Система и безопасность» позволяет отслеживать состояние компьютера и восстанавливать систему
  • Выберите подраздел «Система».
    Раздел «Система» позволяет совершать администрирование ПК
  • Выберите пункт «Защита системы».
    Пункт «Защита системы» откроет окно «Свойства системы»
  • Нажмите «Настроить», чтобы включить защиту диска С. Нажмите «Настроить», чтобы открыть окно настройки защиты диска
  • Выберите «Включить защиту системы», объем дискового пространства и кликните «Применить». Нажмите «Применить», чтобы вернуться к окну «Свойства системы»
  • Нажмите «Создать» для создания точки восстановления системы. Кнопка «Создать» стала активна, так как вы включили защиту диска С
  • Укажите дату. Нажмите «Создать».
    Точка восстановления сохранит все программы и состояние вашего компьютера на эту конкретную дату
  • Дождитесь сообщения о завершении процесса и нажмите «Закрыть».
  • Теперь вы сможете восстановить систему, если удаление DirectX пройдёт некорректно, или компьютер станет хуже работать.

    Видео: как создать точку восстановления системы

    Как восстановить систему

  • Выполните пункты 1–5 инструкции «Как создать точку восстановления в Windows 10», чтобы открыть окно «Свойства системы». Кликните «Восстановить». Вы можете восстановить предыдущее состояние компьютера в любой момент
  • Нажмите «Далее» в окне восстановления системы.
    Обратите внимание, что восстанавливаются только системные файлы и параметры
  • Выберите точку восстановления системы с нужной датой, которую вы указали во время создания. Нажмите «Далее».
    Тип точки восстановления будет «Вручную», так как её создали вы, а не Windows
  • Подтвердите выбор точки восстановления.
    Нажмите «Готово», чтобы запустить восстановление системы
  • Согласитесь с запуском процесса восстановления.
    Учитывайте, что вы не сможете работать за компьютером до тех пор, пока не закончится восстановление системы
  • Дождитесь окончания восстановления системы.
  • Видео: как восстановить Windows 10

    Удаление DirectX 12

    Так как удаление DirectX в Windows 10 не предусмотрено, то придётся использовать стороннее ПО. Программа DirectX Happy Uninstall - довольно распространённая утилита, которая поможет полностью удалить все библиотеки DirectX с компьютера.

    DirectX Happy Uninstall не является официальным ПО. Скачивайте её только с проверенных сайтов.

    Чтобы удаление DirectX произошло корректно, воспользуйтесь следующими советами:

  • Создайте точку восстановления.
  • Скачайте установщик DirectX с сайта Microsoft.
  • Скачайте и установите программу DirectX Happy Uninstall.
  • Отключите интернет, чтобы система не смогла автоматически скачать и установить DirectX.
  • Отключите защиту системных файлов:
  • Теперь можно приступать к удалению DirectX 12:

  • Запустите DirectX Happy Uninstall. Создайте точку восстановления системы во вкладке «Backup». При необходимости вы сможете вернуть удалённый DirectX с её помощью.
    Нажмите «Start Backup», чтобы создать точку восстановления
  • Выберите вкладку «Uninstall», чтобы удалить программу.
    Нажмите «Uninstall», чтобы запустить удаление DirectX
  • Дождитесь завершения удаления и закройте программу.
  • Видео: как удалить DirectX

    Windows 10 сама скачивает и устанавливает необходимые обновления, в том числе и для DirectX. Большинство проблем, возникающих во время работы этой программы, можно решить запуском обновления системы вручную. Постарайтесь не прибегать к полному удалению DirectX, если это возможно, так как тогда придётся использовать сторонние программные продукты.

    Список игр, поддерживающих 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 Мбайт!). Настройки качества - .