DirectX 12 im Detail - Was macht DX12 besser?

DirectX 12 soll im Vergleich zu DirectX 11 Multi-Core-CPUs und Grafikkarten viel effizienter nutzen und so mehr Leistung aus der gleichen Hardware holen. Wir erklären, wie das funktioniert und welche Grafikkarten davon profitieren.

So profitiert man von Direct X12 - Welche Vorteile bringt es wirklich, wer kann es nutzen? Video starten 3:50 So profitiert man von Direct X12 - Welche Vorteile bringt es wirklich, wer kann es nutzen?

GameStar Plus Logo
Weiter mit GameStar Plus

Wenn dir gute Spiele wichtig sind.

Besondere Reportagen, Analysen und Hintergründe für Rollenspiel-Helden, Hobbygeneräle und Singleplayer-Fans – von Experten, die wissen, was gespielt wird. Deine Vorteile:

Alle Artikel, Videos & Podcasts von GameStar
Frei von Banner- und Video-Werbung
Einfach online kündbar

Das bringt DirectX 12:
• reduziert den CPU-Overhead
• steigert die 3D-Performance
• mehr Hardware-Nähe für Spiele-Entwickler
• deutlich bessere Auslastung von Multi-Core-CPUs

Endlich Multi-Core

DirectX besteht aus zahlreichen Software-Schnittstellen (DirectDraw, Direct3D, DirectSound, etc.), die Spieleentwicklern diverse Möglichkeiten zur Verfügung stellen. Diese Schnittstellen (kurz: API – »Application Programming Interface«) ermöglichen die Kommunikation zwischen Anwendungen (wie Spielen) und den Hardware-Komponenten eines Rechners oder einer Konsole. DirectX wurde entwickelt, um Entwicklern das Programmieren für viele verschiedene Hardware-Konfigurationen zu ermöglichen. Beispielsweise soll in einem Spiel ein bestimmtes Objekt dargestellt werden; da der Entwickler nicht alle dafür nötigen Befehlssätze für die vielen verschiedenen Grafikkarten implementieren kann, nutzt er Direct3D als Schnittstelle. Dadurch muss nur eine Grafikkarte im Rechner stecken, die DirectX unterstützt – dann wird der Befehl verstanden.

Der Vorteil von DirectX liegt also in der Möglichkeit, relativ simpel für ein breites Spektrum an Hardware zu entwickeln. Allerdings ist es durch diese hohe Komplexität von DirectX auch kaum möglich, die tatsächlich mögliche Performance spezifischer Hardware-Komponenten voll auszunutzen. Außerdem verbrät das zwischengeschaltete DirectX bisher beim Übersetzen der Aufgaben für die jeweilige Hardware ziemlich viel Rechenleistung des Prozessors und sorgt dadurch für den sogenannten »Overhead« – also Leistung, die dann nicht für die Berechnung eines Spiels zur Verfügung steht.

Erschwerend hinzu kommt die Tatsache, dass DirectX 11 praktisch nicht parallel arbeitet und beim Bearbeiten der DirectX-Anfragen und Versenden der »Draw Calls« übernimmt stattdessen ein einzelner CPU-Kern fast die komplette Arbeit, während die restlichen Kerne ungenutzt bleiben. Ein »Draw Call« ist ein Zeichenbefehl, den die CPU an die Grafikkarte schickt. Er beinhaltet etwa Informationen zu Farbe, Größe und Position, die ein Objekt besitzt. Durch die fehlende Multithreaded-Optimierung von DirectX 11 kann die CPU stellenweise nur wenige Tausend Draw Calls gleichzeitig verschicken, obwohl die Grafikkarte deutlich mehr verarbeiten könnte – ein (CPU-)Flaschenhals entsteht.

Link zum YouTube-Inhalt

»Lower Level«-APIs wie DirectX 12, AMDs Mantle und das darauf basierende Vulkan (Nachfolger von OpenGL) skalieren besser mit Multithreading. Das gelingt unter anderem durch das »Multi-Threaded Command Buffer Recording«, was einen neuen Umgang mit dem so genannten »Command Buffern« beschreibt. Diese Speicherbereiche werden vom Prozessor erstellt, um anfallende Rechenaufgaben zu verwalten und nacheinander abzuarbeiten. Unter DirectX 11 regelt der Treiber, wann welcher »Command Buffer«-Inhalt berechnet wird, bei DirectX 12 legen das die Entwickler selbst fest und können den Buffer zudem auf mehrere CPU-Kerne verteilen. Diese Herangehensweise erhöht zwar den Aufwand für die Entwickler, ermöglicht aber auch deutlich mehr simultane Draw Calls.

Mehr Grafikpower

Um neben Prozessoren künftig auch Grafikkarten von DirectX 12 profitieren zu lassen, führt AMD in einem Blog-Eintrag auch die Vorteile der »Asynchronous Shader«-Technologie auf. Unter DirectX 11 reihen sich zum Beispiel Grafik-, Compute- und Speicher-Befehle in der Render-Pipeline hintereinander ein. Mit DirectX 12 können alle drei Aufgaben parallel berechnet werden – das spart Zeit und erhöht die Effizienz. Allerdings steigt mit der Aufteilung in mehrere Threads auch die Komplexität und das Einspeisen von Befehlen wird schwieriger.

DirectX 11 Unter DirectX 11 reihen sich zum Beispiel Grafik-, Compute und Speicher-Befehle in der Render-Pipeline hintereinander ein.

DirectX 12 Mit DirectX 12 können alle drei Aufgaben parallel berechnet werden – das spart Zeit und erhöht die Effizienz.

AMD nutzt dabei das Beispiel einer stark befahrenen Straße; unter DirectX 11 gibt es nur eine Zufahrt auf diese Straße und Fahrzeuge (z.B. Reflexionen) müssen warten, bis andere Fahrzeuge (z.B. Physik-Berechnungen) vorbeigefahren sind. Erst dann können sie sich dahinter einreihen – es kommt also zum Stau. Die Multithreading-Fähigkeit von DirectX 12 erweitert das Bild der Straße um zusätzliche Auffahrten (Grafik, Compute, Speicher) und regelt die Zufahrt traditionell wie eine Ampel. Einer Fahrzeug-Kolonne wird signalisiert anzuhalten, während die andere auf die Straße fährt.

Dadurch lässt sich das Einspeisen von Befehlen in die Pipeline zwar besser regeln, allerdings kommt es weiterhin zum Stau an der Ampel und es fehlt auch die Unterscheidung zwischen wichtigen und weniger relevanten Befehlen. Auch Ansätze wie »PreEmption«, also der Priorisierung von bestimmten Befehlen vor anderen, bringt Leerlauf mit sich, da der Strom in der Pipeline weiterhin anhalten muss. Außerdem ensteht durch den Rechenaufwand von unterschiedlichen Priorisierungen Overhead und die Performance sinkt.

Multi-Threaded Graphics Mit der Aufteilung in mehrere Threads steigt auch die Komplexität und das Einspeisen von Befehlen wird schwieriger.

Pre-Emption »PreEmption« bezeichnet die Priorisierung von bestimmten Befehlen vor anderen.

Asynchronous Shaders Dank der Asynchronous Shader können Befehle aus mehreren Queues unabhängig und mit hoher Effizienz eingespeist werden.

Hier kommen Asynchronous Shader ins Spiel: Im Beispiel mit der Fahrbahn gleichen sie Taktgebern, die erkennen, wann eine Lücke im Verkehr frei ist und (Compute-)Befehle auf die Straße schicken – durch dieses Reißverschluss-Prinzip kommt es auf der Straße nicht zum Stau. Diese Taktgeber heißen bei AMD »ACE« (Asynchronous Compute Engine) und sind bereits seit 2011 (Radeon HD 7970) ein Teil von der »GCN-Architektur« (Graphics Core Next). Allerdings konnten sie durch die strikten und nicht auf Multithreading ausgelegten Arbeitsabläufe von DirectX 11 bislang kaum genutzt werden. Mantle untersützt Multi-Threading schon länger und kann somit auch von den ACEs profitieren – bislang kommen sie auf dem PC jedoch nur in Thief zum Einsatz.

1 von 3

nächste Seite


zu den Kommentaren (55)

Kommentare(52)
Kommentar-Regeln von GameStar
Bitte lies unsere Kommentar-Regeln, bevor Du einen Kommentar verfasst.

Nur angemeldete Benutzer können kommentieren und bewerten.