News Neue d3D Programmierung mit Graphen in DX12

User-News

Von E555user

Hinweis: Diese "User-News" wurde nicht von der Planet 3DNow! Redaktion veröffentlicht, sondern vom oben genannten Leser, der persönlich für den hier veröffentlichten Inhalt haftet.
Microsoft erweitert DX12 mit einem Programmieransatz für Direct3D basierend auf Graphen, dies lässt einen eher Objektorientierten Ansatz für die Strukturierung der Workloads zur Auslastung der GPUs zu. Dafür gibt es auf den Developer-Blogs von Microsoft einen Vorschaubeitrag von Amar Patel und Tex Riddell: D3D12 Work Graphs Preview
Graph Sample Github d3d WorkGraph
Dabei geht es um Arbeitsgraphen für die gegeseitigen Abhängikeiten von Workloads. Der Graph wird gebildet von Knoten, bei dem Shader-Code an jedem Knoten Aufrufe von anderen Knoten anfordern kann, ohne darauf zu warten, dass diese gestartet werden. Die Arbeitsgraphen bilden den beabsichtigten Algorithmus ab, ohne dass der Programmier Details über die spezifische Hardware kennen muss, auf der die Anwendung ausgeführt werden soll. Der dadurch abgebildete asynchrone Ansatz maximiert die Möglichkeiten auf der Treiber- und Hardware-Ebene, die Last optimal zu verteilen.

Der Wechsel zwischen unterschiedlichem Code in Knoten bleibt innerhalb des Shader Codes eine Interpretation des Treibers, die Game-Engine selbst muss weniger Schritte bzw. Verzweigungen über die API verwalten.

Im Blog zitiert Micosoft Brian Karis von Epic Games, die für die UE5 Engine entsprechende Methoden für eine bessere Auslastung moderner asynchronier GPUs gesucht hatten.
Epic Games has been searching and advocating for a better solution to the GPU generated work problem for a while now. UE5 rendering features such as Nanite and Lumen are hitting the limits of the current compute shader paradigm of chains of separate dispatches issued by the CPU.

Work graphs directly address that problem in a way that not only allows us to do things we previously could not but also enables us to do them in ways that should be far easier to write. We have already started exploring how we can optimize our current features with work graphs and are excited about what possibilities they could unlock in the future.
— Brian Karis, Epic Games

Ungewöhnlich früh bringt seinerseits AMD den notwendigen Treibersupport zunächst für Navi3x GPUs,
gpu-work-graphs-html-_images-MaxOutputsSharedWithExample.jpg

AMD: A preview AMD Software: Adrenalin Edition™ driver showcasing the AMD implementation of the current Work Graphs API for AMD Radeon™ RX 7000 Series graphics cards can be downloaded here. See how AMD worked with Microsoft and the developer community to bring Work Graphs to life here and when you’re ready to try this for yourself you can read the corresponding AMD GPUOpen Programmer’s Guide to Work Graphs here.
einen zugehörigen Blog Artikel von Matthaeus Chajdas auf AMD.com und obendrein
eine Serie von Beiträgen auf GPUopen.com zur Einfühung in die Programmierung mit Graphen.

Graphen für Direct3D sind noch im Status eines Previews aka Beta-Status. Man darf allerdings davon ausgehen, dass involvierte Entwickler bereits Projekte damit umsetzen und damit die notwendigen Härtung für einen offiziellen Release unterstützen.

Microsoft selbst verweist im eigenen Blog auf die intensive Unterstüzung seitens AMD bei der Entwicklung der Technik. Sofern man die direkte Einbindung von Epic Games in die Entwicklung unterstellen darf erninnert das im ganzen Setting an das gemeinsame Engagement von AMD und DICE für die Mantle-API Entwicklung von 2013, nur dass heuer auch Microsoft selbst mit an Board ist.

At AMD we are incredibly excited to see the Work Graph API finally in the hands of developers. After multiple years of effort and collaboration, it’s great to see this release realized and we can’t wait to hear about what you’ll will accomplish with these new capabilities. We strongly encourage you to give it a try today and look forward to hearing your feedback!
Mike Mantor, Chief GPU architect and Corporate Fellow
Und aus dem AMD Blog:
“AMD contributed significantly to the design of work graphs from early on. They offered a critical eye to targeting GPUs well, in ways that make sense for the ecosystem overall, with a path to expanded hardware and software capability over time. Other GPU vendors made similarly great contributions as well - a productive industry collaboration all around. Now that you can give work graphs a try, we're all excited to hear your feedback!”
Amar Patel, Engineer, Microsoft DirectX team.
“We have worked closely with industry partners on the design of Microsoft DirectX Work Graphs, and we are excited about its release. Pioneering new GPU-driven graphics techniques empowers our game developers to push creative boundaries and inspire the world to play with extraordinary new experiences for players.”
Colin Barré-Brisebois, Head of Technology at SEED, Electronic Arts.

Im Weiteren hat Microsoft auch einen Blog-Beigtrag zum PIX Support für Work Graphs veröffentlicht.
Diese Neuerungen sind Teil des aktuellen Update für das Agility SDK für Spieleentwickler. Dieses beinhalten zudem den Support für die durch RDNA3 bekannten Wave Matrix Instruktionen und die Einführung von AV1 Encoding.
 
Zuletzt bearbeitet:
rps-1-0-html-_images-rps_purpose.svg
In Ergänzung sollte noch eine zuvor erfolgte Entwicklung genannt werden:
Im Dezember letzten Jahres hatte AMD auf GPUopen das Konzept der Render Pipeline Shaders (RPS) vorgestellt, das Tutorial folgte im Mai. Dabei geht es gleichermassen darum mit Hilfe von Graphen den Code einer dynamischen Renderpipeline abzubilden.

Im Gegensatz zum DX12 Work Graph ist der Ansatz eine Stufe höher in der Game-Engine im Shader Code vor der Abstraktionlayer des Render Hardware Interface angesiedelt.

Durch die direkte Unterstützung von Graphen-Konstrukten in der API ermöglicht Microsoft mehr Flexibilität über den Compute bzw. Shader-Codes hinaus, der durch RPS abgedeckt werden kann. Die Abbildung von RPS in der DX12-API kann für den Treiber transparenter erfolgen verglichen mit HLSL-Code allein.

Eine kurze Erläuterung zu Render Graphs in einer Präsentation gibt es hier vom Dev. Studio Supercell.

Diese Präsentation von Zhen Chou, GPU Dev. Technology Engineer AMD zu RPS findet man auf GPUopen momentan nicht:



Weitere Grundlagen im Anwendungsbeispiel von Pavlo Muratov und Frame Graph Konzept präsentiert von Yuriy O'Donnell zu seiner Zeit bei DICE Frostbite / EA, der heute wiederum bei EPIC an der Unreal Engine arbeitet. Ein entsprechender Artikel zu Render Graphs von Riccardo Loggini mit vielen weiteren Quellen.
 
Zuletzt bearbeitet:
Auf GPUopen.com hat AMD auch Work-Graphs für Vulkan angekündigt. Wie bei Khronos üblich werden diese Funktionalitäten zunächst als AMD Vendor Extensions in Vulkan einzug finden, bevor diese womöglcih überarbeitet einmal in den Standard-Funktionsumfang selbst integriert werden.
 
Auf Github wurden (am 22 Februar) in Versionssprung 0.53 der API in Vorbereitung für den offiziellen Release einige Kommentare zum Preview gelöscht.
Seit dem Ursprung dieser News im Juni 23 gab es zuvor in 9 Versionsschritten einige Anpassungen, besonders um für die Treiberentwicklung und Work-Graph-Programmierer mehr Klarheit bzw. Eindeutigkeit zu schaffen.
Die Funktionalität Meshes in Nodes berechnen zu lassen ist in einen experimentellen Zweig als Tier-1.1 gewandert.
Nach meinem Verständnis geht es dabei um Code mit Scheduling durch die GPU. Etwas worin AMD mit Hardware-Scheduler einen Vorteil haben könnte, wo Nvidia noch immer auf Treiber-basiertes Scheduling setzt.
Auch heute gibt es nur von AMD für Radeon 7000-Serie eine Treiberunterstützung, von Nvidia und Intel gibt es noch keinen offiziellen Treibersupport, man wird von Microsoft an deren Entwicklungsabteilungen verwiesen.
 
Die Version 1.0 ist raus.

Vor lauter Überschwang hat man sich bei den Releasenotes von heute im Kalenderjahr vertan.
v1.0003/11/2023
  • Bumping version to 1.000 for official release.
Zuvor gab es noch kleine Fixes und Erweiterungen. Die aktuellen AMD-Treiber sollten dennoch kompatibel sein. Der Support im allgemeinen Adrenalin Treiber ist für das 2. Quartal geplant, bislang wird RDNA3 vorausgesetzt.
Doppelposting wurde automatisch zusammengeführt:

Es gibt einen aktuellen Blog-Beitrag des DirectX-Teams zum offiziellen Release.
Amar Patel und Tex Riddell beschreiben den aktuellen Stand im Vergleich zur Vorschau vom Juni letzten Jahres. Sie beschreiben mögliche künftige Entwicklungen zu erweiterter Synchronisation von Threads. In diesem Status wird für umfangreiche Datensynchronisation die Möglichkeit über UAVs gegeben, die der Programmierer dann individuell händeln muss (Unordered Access Views im VRAM).

Der offizielle Release wird von AMD auf GPU-Open entsprechend begleitet.

Auch Nvidia hat zum heutigen Tag einen Blog und kompatible Treiber
 
Zuletzt bearbeitet:
Völlig missverstanen wird in den WCCFtech News von Behebung von CPU-Bottlenecks schwadroniert.
Dabei geht es vielmehr darum GPU intern komplexere Algorithmen abzubilden, die dann ohne Round-Trip via CPU abgearbeitet werden und somit möglichst jegliche Bubbles bzw. Stalls verhindern. Der Code muss aufwändiger im Treiber on-the-fly für die GPU optimiert compiliert werden. Es geht danach darum nicht die CPU zu entlasten sondern den Umweg bei den Bildberechnungen über CPU möglichst zu vermeiden. Gleichzeitig entsteht damit das Potential den Shadercode wesentlich dynamischer zu gestalten, wo es sonst mit den Verzögerungen durch GPU-CPU Kommunikation via PCIe erst gar nicht performant umsetzbar wäre. Genau das was man in UE5 benötigt, welches auf die klassische Renderpipeline verzichtet.
 
Eine Veranschaulichung, dass Work Graphs sehr viel mehr als die CPU zu entlasten vermögen, sieht man in einer Demo zur GDC2024 von Matthäus Chajdas AMD zu Workgraphs und den Möglichkeiten für Pipeline State Objects mit Mesh-Shading.
 
Zuletzt bearbeitet:
Nachtrag eines Blog-Beitrages von Mitte Juli '24:

In diesem Agility-SDK-Preview wird die Erweiterung von bisher "compute only" Work-Graph Nodes um Ansteuerung der Rasterizer-Pipeline eingeführt.

Dieses Innovationsfeld, bei dem AMD eng mit MS zusammenarbeitet, hat zunehmend das Potential die Echtzeit-3D Programmierung für dynamischere Welten völlig umzukrempeln. Mit Rasterizer-Integration weitet man die Nutzbarkeit erheblich aus.
 
Zuletzt bearbeitet:
Zurück
Oben Unten