DirectX 12 D3D12 erhält eine neue Funktion, die mehr Kontrolle über die Speicherzuordnung zu GPU oder CPU dynamisch ermöglicht

DirectX 12 D3D12 erhält eine neue Funktion, die mehr Kontrolle über die Speicherzuordnung zu GPU oder CPU dynamisch ermöglicht

Hardware /. DirectX 12 D3D12 erhält eine neue Funktion, die mehr Kontrolle über die Speicherzuordnung zu GPU oder CPU dynamisch ermöglicht 3 Minuten gelesen

DirectX 12

In dem kommenden großen Update auf Windows 10 wird DirectX12 und insbesondere Direct3D (D3D12) verfügbar sein nicht eine, sondern neue Flaggen bekommen Dadurch wird die Art und Weise geändert, in der Speicherressourcen zugewiesen werden. Microsoft ist zu Recht besorgt darüber, wie Speicher und Verarbeitungsleistung von Anwendungen angefordert und diesen zugewiesen werden, was häufig zu einem Engpass führen kann. Diese neuen Flags wirken sich übrigens nicht direkt auf den Speicher aus, sondern auf die Art und Weise, wie er zugewiesen und verwaltet wird.



Microsoft hat aktiv die neueste Version der DirectX-Plattform entwickelt, die seit langem ein führender Standard für Desktop-Spiele ist. Die neueste Version von Microsoft DirectX 12 hat in letzter Zeit mehrere neue Funktionen erhalten. Kürzlich haben wir das behandelt Die wichtigsten und wichtigsten neuen Funktionen von DirectX 12 Dies würde Entwicklern und Endbenutzern erheblich zugute kommen. Diese Woche gab Microsoft an, dass das nächste größere Update für Windows 10 zwei neue Flags für DirectX12 Direct3D enthalten sollte. Interessanterweise müssen Entwickler, die heute dasselbe erkunden möchten, einfach den neuesten Windows 10 Insider Preview-Build und den SDK Preview Build für Windows 10 (20H1) aus dem Windows Insider-Programm herunterladen und installieren.



Windows 10 DirectX 12 Direct3D So erhalten Sie zwei neue Flags für die dynamische Speicherzuordnung zwischen CPU und GPU:

Im kommenden Update auf Windows 10 wird D3D12 der Enumeration D3D12_HEAP_FLAG zwei neue Flags hinzufügen. Diese neuen Flags sind übrigens „unbeständige“ Eigenschaften. Einfach ausgedrückt bedeutet dies, dass die neuen Flags den resultierenden Speicher selbst nicht direkt beeinflussen. Stattdessen wirken sich die neuen Flags auf die Art und Weise aus, wie der Speicher zugewiesen wird. Darüber hinaus werden diese Flags nicht von reflektiert ID3D12Heap :: GetDesc oder ID3D12Resource :: GetHeapProperties .

D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT:

Wenn ein Entwickler in seiner aktuellen Iteration D3D auffordert, einen Heap oder eine festgeschriebene Ressource zuzuweisen, geschieht als letztes, bevor er das Objekt zurückerhält, der Speicher resident. Dies ist bemerkenswert ähnlich zu ID3D12Device :: MakeResident durchgeführt werden. Unnötig hinzuzufügen, dass ein solcher Prozess sofort zwei Probleme aufwirft:



  1. Das Design blockiert einen CPU-Thread, bis der Speicher vollständig einsatzbereit ist. Dies ist keine ideale oder gewünschte Situation
  2. Der Prozess ermöglicht es Entwicklern auch, Speicher zu überbeanspruchen, der über das aktuelle Prozessbudget hinausgeht, das er verwenden sollte.

Das neu hinzugefügte ID3D12Device3 :: EnqueueMakeResident ermöglicht Apps, verschiedene Entscheidungen zu treffen. Die Apps könnten mit der GPU und nicht mit der CPU auf die Residenz warten oder den Residenzbetrieb zum Fehlschlagen auffordern, anstatt das Budget zu überschreiten. Die Zuweisung von Speicher in einem nicht residenten Zustand führt dazu, dass die erste Verwendung von Ressourcen beide Vorteile bietet.

D3D12_HEAP_FLAG_CREATE_NOT_ZEROED:

Dieses Flag versucht, auf Null gesetzte Inhalte zu adressieren, die Ressourcen und Heaps festgeschrieben haben, die von D3D neu erstellt wurden. Microsoft hat versucht, diesen Prozess zu optimieren, indem mehr Wiederverwendungsspeicher aktiviert wurde, der die Grenzen eines bestimmten Prozesses nie ohne Nullen verlassen hatte. Dies funktionierte jedoch nicht gut und zwang die Microsoft-Ingenieure, wieder nur Nullspeicher zurückzugeben. Unnötig zu erwähnen, dass dieser Weg ziemlich langwierig war, da der Speichermanager explizit Nullen in den Speicher schreiben muss, bevor er sie zur Wiederverwendung an die Entwickler zurückgibt.

Um den Prozess zu optimieren, wird Entwicklern die Möglichkeit eingeräumt, den langwierigen Prozess zu deaktivieren, indem einfach das neue Flag während der Heap- / Ressourcenzuweisung angegeben wird. Im Wesentlichen könnte die dynamische Neuzuweisung den obligatorischen Nullzeitprozess minimieren und einen freigegebenen Speicher zuweisen, den die Entwicklerprozesse verwendet haben, ohne ihn durch den Nullpunktierungsprozess zu zwingen.



Microsoft hat diese neuen Flags bereits hinzugefügt und benötigt keine neuen Treiber. Darüber hinaus gibt es keine dedizierten CheckFeatureSupport Option für diese. Im Wesentlichen sind diese neuen Flags immer dann verfügbar, wenn ID3D12Device8 verfügbar gemacht wird oder eine Prüfung auf D3D12_FEATURE_D3D12_OPTIONS7 erfolgreich ist. Alle neuen Flags verlangen, dass die Entwickler Prozesse auf einer Version von D3D12 ausführen, die sie versteht.

Stichworte Direct X12 directx Microsoft Windows