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.
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.
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.
Nur angemeldete Benutzer können kommentieren und bewerten.
Dein Kommentar wurde nicht gespeichert. Dies kann folgende Ursachen haben:
1. Der Kommentar ist länger als 4000 Zeichen.
2. Du hast versucht, einen Kommentar innerhalb der 10-Sekunden-Schreibsperre zu senden.
3. Dein Kommentar wurde als Spam identifiziert. Bitte beachte unsere Richtlinien zum Erstellen von Kommentaren.
4. Du verfügst nicht über die nötigen Schreibrechte bzw. wurdest gebannt.
Bei Fragen oder Problemen nutze bitte das Kontakt-Formular.
Nur angemeldete Benutzer können kommentieren und bewerten.
Nur angemeldete Plus-Mitglieder können Plus-Inhalte kommentieren und bewerten.