D3D12_FEATURE_DATA_ARCHITECTURE-Struktur (d3d12.h)

Enthält Details zur Adapterarchitektur, damit Ihre Anwendung für bestimmte Adaptereigenschaften besser optimieren kann.

Hinweis Diese Struktur wurde durch die D3D12_FEATURE_DATA_ARCHITECTURE1-Struktur ersetzt. Wenn Ihre Anwendung auf Windows 10, Version 1703 (Creators' Update) oder höher abzielt, verwenden Sie stattdessen D3D12_FEATURE_DATA_ARCHITECTURE1 (und D3D12_FEATURE_ARCHITECTURE1).
 

Syntax

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE;

Member

NodeIndex

Beim Betrieb mit mehreren Adaptern gibt dies an, welcher physische Adapter des Geräts relevant ist. Weitere Informationen finden Sie unter Systeme mit mehreren Adaptern. NodeIndex wird von der Anwendung ausgefüllt, bevor CheckFeatureSupport aufgerufen wird, da die Anwendung Details zur Architektur der einzelnen Adapter abrufen kann.

TileBasedRenderer

Gibt an, ob die Hardware und der Treiber einen kachelbasierten Renderer unterstützen. Die Runtime legt diesen Member auf TRUE fest, wenn die Hardware und der Treiber einen kachelbasierten Renderer unterstützen.

UMA

Gibt an, ob die Hardware und der Treiber UMA unterstützen. Die Runtime legt diesen Member auf TRUE fest, wenn die Hardware und der Treiber UMA unterstützen.

CacheCoherentUMA

Gibt an, ob die Hardware und der Treiber cachekonshärente UMA unterstützen. Die Runtime legt diesen Member auf TRUE fest, wenn die Hardware und der Treiber cachekonshärente UMA unterstützen.

Hinweise

Verwenden von UMA und CacheCoherentUMA

D3D12-Apps sollten sich um die Verwaltung der Speicherresidenz und die Bereitstellung der optimalen Heapeigenschaften kümmern. D3D12-Apps können vereinfacht bleiben und in vielen GPU-Architekturen einigermaßen gut ausgeführt werden, indem sie nur die Residenz für Ressourcen in D3D12_HEAP_TYPE_DEFAULT Heaps verwalten. Diese Apps müssen nur IDXGIAdapter3::QueryVideoMemoryInfo für DXGI_MEMORY_SEGMENT_GROUP_LOCAL aufrufen, und sie müssen tolerant sein, dass D3D12_HEAP_TYPE_UPLOAD und D3D12_HEAP_TYPE_READBACK aus derselben Speichersegmentgruppe stammen.

Ein so einfaches Design ist jedoch zu einschränkend für Anwendungen, die die Grenzen überschreiten. Daher hilft D3D12_FEATURE_DATA_ARCHITECTURE Anwendungen dabei, die zugrunde liegenden Adaptereigenschaften besser zu optimieren.

Einige Anwendungen möchten möglicherweise besser für diskrete Adapter optimieren und die zusätzliche Komplexität der Verwaltung von Systemspeicher- und Videospeicherbudgets übernehmen. Wenn die Größe der Upload-Heaps mit der Größe der Standardtexturen mithalten kann, ist eine Nahezu-Verdoppelung der Speicherauslastung verfügbar. Bei der Unterstützung solcher Optimierungen kann eine Anwendung entweder zwei Residency-Budgets erkennen oder erkennen, dass UMAfalse ist.

Einige Anwendungen möchten möglicherweise besser für integrierte/UMA-Adapter optimieren, insbesondere diejenigen, die an der Verlängerung der Akkulaufzeit auf mobilen Geräten interessiert sind. Einfache D3D12-Anwendungen werden gezwungen, Daten zwischen Heaps mit unterschiedlichen Zuschreibungen zu kopieren, wenn dies für UMA nicht immer erforderlich ist. Die UMA-Eigenschaft an sich umfasst jedoch eine einigermaßen vage Grauzone von GPU-Designs. Gehen Sie nicht davon aus, dass UMA bedeutet, dass der gesamte GPU-zugängliche Arbeitsspeicher frei cpu-zugänglich gemacht werden kann, da dies nicht der Fall ist. Es gibt eine Eigenschaft, die enger an dieser Art von Denken ausgerichtet ist: CacheCoherentUMA.

Wenn CacheCoherentUMAfalse ist, ist ein einzelnes Residenzbudget verfügbar, aber das UMA-Design profitiert in der Regel von den drei Heapzuordnungen. Es gibt Möglichkeiten, das Kopieren von Ressourcen durch eine sinnvolle Verwendung von Upload- und Readback-Ressourcen und Heaps zu entfernen, die CPU-Zugriff auf den Arbeitsspeicher ermöglichen. Solche Möglichkeiten sind jedoch nicht eindeutig. Daher sollten Anwendungen vorsichtig sein; und Experimentieren mit einer Vielzahl von "UMA"-Systemen ist ratsam, da das Aktivieren oder Ausschließen bestimmter Geräte-IDs gerechtfertigt sein kann. Es wird empfohlen, die GPU-Speicherarchitektur zu verstehen und zu verstehen, wie Heaptypen in Cacheeigenschaften übersetzt werden. Die Durchführbarkeit des Erfolgs hängt wahrscheinlich davon ab, wie oft jeder Prozessor die Daten liest oder schreibt, wie groß und lokal die Datenzugriffe usw. sind. Für fortgeschrittene Entwickler: Wenn UMA true ist und CacheCoherentUMAfalse ist, ist das eindeutigste Merkmal dieser Adapter, dass Uploadheaps weiterhin kombiniert werden. Einige UMA-Adapter profitieren jedoch von den Eigenschaften ohne CPU-Zugriff und Write-Combine von Standard- und Upload-Heaps. Weitere Informationen finden Sie unter GetCustomHeapProperties .

Wenn CacheCoherentUMA wahr ist, können Anwendungen die Zuordnung von Heaps aufzugeben und überall das benutzerdefinierte Heap-Äquivalent von Upload heaps verwenden. Zero-Copy-UMA-Optimierungen werden allgemeiner empfohlen, da mehr Szenarien nur von der gemeinsamen Nutzung profitieren. Das Speichermodell ist sehr förderlich für mehr Szenarien und eine breitere Einführung. Einige Eckfälle können noch vorhanden sein, in denen Vorteile nicht leicht zu erzielen sind, aber sie sollten viel seltener und weniger nachteilig sein als andere Optionen. Für fortgeschrittene Entwickler: CacheCoherentUMA bedeutet, dass ein erheblicher Teil der Caches in der Speicherhierarchie auch vereinheitlicht oder zwischen CPU und GPU integriert ist. Das einzigartigste zu beobachtende Merkmal ist, dass Upload heaps tatsächlich auf CacheCoherentUMA zurückgeschrieben werden. Für diese Architektur ist die Verwendung von Write-Combine bei Uploadheaps häufig ein Nachteil.

Die Details auf niedriger Ebene sollten von einer großen Mehrheit der Einzeladapteranwendungen ignoriert werden. Wie üblich können Einzeladapteranwendungen die Landschaft vereinfachen und sicherstellen, dass die CPU-Schreibvorgänge zum Hochladen von Heaps Muster verwenden, die schreibfreundlicher sind. Die Details auf niedrigerer Ebene tragen dazu bei, die Konzepte für Anwendungen mit mehreren Adaptern zu verstärken. Anwendungen mit mehreren Adaptern müssen die Eigenschaften der Adapterarchitektur wahrscheinlich gut genug verstehen, um die optimalen benutzerdefinierten Heapeigenschaften zum effizienten Verschieben von Daten zwischen Adaptern auszuwählen.

Anforderungen

Anforderung Wert
Header d3d12.h

Weitere Informationen

Kernstrukturen

D3D12_FEATURE