DirectX 12 D3D12 получает новую функцию, которая дает больший контроль над распределением памяти для GPU или CPU динамически

Оборудование / DirectX 12 D3D12 получает новую функцию, которая дает больший контроль над распределением памяти для GPU или CPU динамически 3 минуты на чтение

DirectX 12



В предстоящем крупном обновлении ОС Windows 10 DirectX12, а точнее Direct3D (D3D12), будет получить не один, а новые флаги это изменит способ распределения ресурсов памяти. Похоже, Microsoft справедливо обеспокоена тем, как память и вычислительная мощность запрашиваются и выделяются приложениям, что часто может создавать узкие места. Между прочим, эти новые флаги не будут напрямую влиять на память, а скорее повлияют на способ ее распределения и управления.

Microsoft активно разрабатывает последнюю версию платформы DirectX, которая долгое время была ведущим стандартом для настольных игр. Последняя версия Microsoft DirectX 12 в последнее время получила несколько новых функций. Недавно мы освещали наиболее заметные и важные новые функции DirectX 12 что принесет значительную пользу разработчикам и конечным пользователям. На этой неделе Microsoft сообщила, что следующее крупное обновление Windows 10 должно включать два новых флага для DirectX12 Direct3D. Интересно, что разработчикам, которые хотят изучить то же самое сегодня, нужно просто загрузить и установить последнюю сборку Windows 10 Insider Preview и SDK Preview Build для Windows 10 (20H1) из программы Windows Insider.



Windows 10 DirectX 12 Direct3D получит два новых флага для распределения динамической памяти между ЦП и ГП:

В предстоящем обновлении до Windows 10 D3D12 добавит два новых флага в перечисление D3D12_HEAP_FLAG. Между прочим, эти новые флаги являются «непостоянными» свойствами. Проще говоря, это означает, что новые флаги не повлияют напрямую на саму результирующую память. Вместо этого новые флаги повлияют на способ распределения памяти. Более того, эти флаги не отражаются от ID3D12Heap :: GetDesc или же ID3D12Resource :: GetHeapProperties .



D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

В текущей итерации, когда разработчик запрашивает у D3D выделение кучи или зафиксированного ресурса, последнее, что происходит до того, как он вернет объект, - это резидентная память. Это очень похоже на ID3D12Device :: MakeResident выполняется. Излишне добавлять, что такой процесс сразу вызывает две проблемы:



  1. Дизайн блокирует поток ЦП до тех пор, пока память не будет полностью готова к использованию. Это не идеальная или желаемая ситуация
  2. Этот процесс также позволит разработчикам чрезмерно использовать память, сверх того, что указано в текущем бюджете процесса.

Недавно добавленный ID3D12Device3 :: EnqueueMakeResident позволяет приложениям делать различный выбор. Приложения могут ожидать резидентности, используя графический процессор, а не ЦП, или запрашивать сбой операции резидентности вместо превышения бюджета. Выделение памяти в нерезидентном состоянии приводит к получению обоих преимуществ при первом использовании ресурсов.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Этот флаг пытается адресовать обнуленное содержимое, в котором выделены ресурсы и кучи, вновь созданные D3D. Microsoft попыталась оптимизировать этот процесс, включив больше повторно используемой памяти, которая никогда не выходила за пределы данного процесса без обнуления. Однако это не сработало и заставило инженеров Microsoft вернуться к возврату только обнуленной памяти. Излишне упоминать, что этот способ был довольно утомительным, поскольку диспетчеру памяти необходимо явно записывать нули в память, прежде чем он вернет их разработчикам для повторного использования.

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



Microsoft уже добавила эти новые флаги, и они не требуют новых драйверов. Тем более, что нет выделенного ПроверитьФункцияПоддержка вариант для этих. По сути, эти новые флаги доступны в любое время, когда ID3D12Device8 раскрывается или когда проверка на D3D12_FEATURE_D3D12_OPTIONS7 завершается успешно. Все новые флаги требуют, чтобы разработчики запускали процессы в версии D3D12, которая их понимает.

Теги Прямой X12 directx Microsoft Windows