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

Im kommenden Hauptupdate für Windows 10 wird DirectX12 und insbesondere Direct3D (D3D12) nicht nur ein neues, sondern auch neue Flags erhalten, die die Art und Weise ändern, wie 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. Im Übrigen wirken sich diese neuen Flags 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 große 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. Übrigens sind diese neuen Flags „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, können Entwickler den langwierigen Prozess deaktivieren, indem sie einfach das neue Flag während der Heap- / Ressourcenzuweisung angeben. Im Wesentlichen könnte die dynamische Neuzuweisung den obligatorischen Nullzeitprozess minimieren und einen bestimmten 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.

Facebook Twitter Google Plus Pinterest