Seite 2: Multi-GPU: Mixed-Mode mit AMD und NVIDIA

Bisher konzentrierte sich vieles bei der Berichterstattung über DirectX 12 auf die Low-Level-Natur der API sowie den geringeren Overhead und damit das freiwerdende Leistungspotenzial. Auch wir haben bereits einige Tests durchgeführt – einmal zum entsprechenden Draw-Call-Test des 3DMark von Futuremark und inzwischen gehört ein DirectX-12-Benchmark zum Grafikkarten-Testparcours. Über die gemeinsame Nutzung der Grafik-API von AMD- und NVIDIA-Grafikkarten haben wir bereits berichtet, aber bis auf die theoretische Möglichkeit war davon bisher wenig zu sehen.

Ein gewöhnungsbedürftiger Anblick: Je eine AMD- und NVIDIA-Grafikkarte im Test
Ein gewöhnungsbedürftiger Anblick: Je eine AMD- und NVIDIA-Grafikkarte im Test

DirectX 12 Multi-GPU Explicit Multi-Adapter oder Multi Display Adapter – so die meistgenannten Namen der Methode der gemeinsamen Zusammenarbeit unterschiedlicher GPUs – wird durch die tiefere Kontrolle der API durch die Entwickler möglich. Sie haben eine weitergehende Kontrolle über den Zugriff auf den Speicher und viele andere Elemente der Hardware. Der Betrieb eines Multi-GPU-Systems lag unter DirectX 11 in den Händen der Treiber-Entwickler. Mit DirectX 12 geht die Kontrolle auf die Spiele-Entwickler über.

Die Multi-GPU-Technik

Doch zunächst noch ein paar Worte zur Historie der Multi-GPU-Technik: Die Entwicklung von PCI-Express als Interface zur Kommunikation der Grafikkarten mit dem restlichen System hat dazu geführt, dass sowohl AMD als auch NVIDIA mithilfe des AFR (Alternate Frame Rendering) eine relativ einfache Implementation der Multi-GPU-Technik einführen konnten. Beim AFR wird jeweils ein Frame von einer GPU berechnet. Anpassungen des Spiels oder der Game-Engine sind nicht notwendig. Einzig AMD und NVIDIA müssen ihre Treiber entsprechend anpassen, damit Unterschiede im Rendering einzelner Frames nicht zu störenden Effekten führen. AMD führte dazu das Frame Pacing ein, bei NVIDIA sind entsprechende Techniken ebenfalls bereits in Hard- und Software gegossen. Die Synchronisation zwischen GPU und Display-Panel in Form von FreeSync und G-Sync hat dazu geführt, das weitere störende Effekte zumindest minimiert werden konnten.

Allerdings sind die Hardwaremöglichkeiten relativ eingeschränkt. NVIDIA erlaubt nur die Zusammenarbeit zwischen identischen Grafikkarten, während AMD etwas flexibler zumindest die Möglichkeit bietet unterschiedliche Grafikkarten einzusetzen, die auf der gleichen GPU basieren (z.B: Radeon R9 290 und Radeon R9 290X). Der wichtigste Grund für diese Einschränkung ist natürlich die Tatsache, dass so die Frames im AFR immer ähnlich schnell berechnet werden können. Anläufe mit dem SFR (Spit Frame Rendering) wurden zwar gemacht, setzten sich aber nicht durch. Zum SFR aber später mehr.

Doch abgesehen von den offiziellen Modi SLI und CrossFire gab es auch Anläufe Grafikkarten verschiedener Hersteller und unterschiedlicher Leistungsklassen zu kombinieren. 2010 führte LucidLogix die Hydra-Technologie ein. Mit einem Zusatzchip und dazugehöriger Software setzte sich die Technologie zwischen die Calls von DirectX und OpenGL und führte diese den kompatiblen Grafikkarten zu. Allerdings gab es auch große Einschränkungen, sowohl auf Seiten der Hardware, als auch auf Seiten der Software. Letztendlich führte dies dazu, dass sich die Hydra-Technologie nicht durchsetzen konnte und wieder in der Versenkung verschwand.

DirectX 12 und Multi-Adapter

Mit DirectX 12 führt Microsoft drei Multi-Adapter-Modi ein. Der einfachste beschreibt dabei die bereits bekannte Funktionalität im AFR mit gleichen Grafikkarten wie bisher bei AMD und NVIDIA. Dieser Modus limitiert allerdings die Möglichkeiten der Entwickler, reduziert aber auch das Fehlerpotenzial bei tiefergehenden Zugriffen auf die Hardware. Weiterhin wird ein Großteil der Arbeit vom Treiber übernommen und nicht von DirectX 12.

Präsentation zu EMAPräsentation zu EMA

Präsentation zu EMA in DirectX 12

DirectX 12 ermöglicht einen tiefergehenden Zugriff auf die Hardware, auch in einem Multi-GPU-System. Dazu hat Microsoft auch den Explicit-Multi-Adapter-(EMA)-Modus eingeführt. Dazu müssen die Spieleentwickler explizit auf eine Multi-GPU-Unterstützung hinarbeiten. Jede einzelne GPU, die Speicherzugriffe und wie die GPUs untereinander kommunizieren – all dies muss zuvor festgelegt werden. Die Verantwortung der Funktionalität liegt vollständig in Händen der Spieleentwickler, was auch gewisse Gefahren birgt. Der Aufwand dieser expliziten Anpassungen darf nicht unterschätzt werden und Fehler müssen von den Entwicklern und nicht durch Microsoft, AMD oder NVIDIA korrigiert werden.

Präsentation zu EMA in DirectX 12
Präsentation zu EMA in DirectX 12

Der EMA-Modus bietet aber auch noch zwei unterschiedliche Wege der Implementierung: Linked Mode und Unlinked Mode. Der Unlinked Mode stellt die Basis der Funktionalität von EMA dar. Der Linked Mode auf der anderen Seite bietet eine höhere Funktionalität, schränkt dann aber auch die kombinierbare Hardware deutlich stärker ein – das ist wie ein festgelegtes SLI und CrossFire für DirectX 12 zu verstehen. Der Unlinked Mode hingegen kann dazu verwendet werden, unterschiedliche Grafikkarten, auch von unterschiedlichen Herstellern, miteinander zu kombinieren. Auch die Kombination zwischen diskreten und integrierten GPUs ist möglich.

Präsentation zu EMA in DirectX 12
Präsentation zu EMA in DirectX 12

Im Unlinked Mode wird jede Grafikkarte als eigenständige Hardware, mit eigenem Speicher, eigenem Commandprozessor etc. angesehen. Das EMA in DirectX 12 ermöglicht aber nun den Datenaustausch zwischen diesen Instanzen und dies tiefergehend als nur der Austausch fertig gerenderter Frames. Teilweise gerenderte Frames oder Daten in den Buffern können nun ausgetauscht werden, was völlig neue Wege des Renderings auf mehreren GPUs ermöglicht.

Was sich auf den ersten Blick aber wie eine einfache Möglichkeit des Datenaustausches darstellt und damit weiter als alles geht, was bisher möglich war, wird auf den zweiten Blick doch etwas komplizierter. So werden die Daten über das PCI-Express-Interface ausgetauscht, was im Vergleich zur Kommunikation zwischen GPU und dem Grafikspeicher deutlicher langsamer ist und zudem über eine recht hohe Latenz verfügt. Die Entwickler müssen sich also überlegen, welche Daten sie wann austauschen wollen, damit das PCI-Express-Interface nicht zum Flaschenhals wird. Ebenfalls darauf geachtet werden muss, in welcher Form diese Daten ausgetauscht werden. Die verschiedenen Hersteller und GPU-Generationen und Varianten legen oftmals unterschiedliche Datenformate an, die dann nicht so einfach untereinander verwendet werden können. Hier wird dann die Arbeit ersichtlich, die bei der Implementation von EMA im Unlinked Mode notwendig ist. Der Fokus des Unlinked Mode innerhalb des EMA liegt auf der bereits besagten Unterstützung von dGPUs und iGPUs, aber natürlich lassen sich hier auch unterschiedliche GPUs unterschiedlicher Hersteller kombinieren.

Präsentation zu EMA in DirectX 12
Präsentation zu EMA in DirectX 12

Der Linked Mode stellt wie gesagt in einfachster Form ein SLI oder CrossFire unter DirectX 12 dar, allerdings wird im Linked Mode die Hardware zu einer "Grafikkarte" zusammengefasst. Für das Spiel und den Nutzer sind nur noch eine GPU und ein Speicher sichtbar. Die Hardware muss dazu deutlich enger miteinander verknüpft werden, was mehr Möglichkeiten zulässt, allerdings auch für die Einschränkungen bei der Hardware sorgt. Das größte Leistungspotenzial liegt durch die Freiheiten sicherlich im Linked Mode, die größte Flexibilität bietet der Unlinked Mode. Entwickler, die möglichst wenig Arbeit haben möchten und dennoch eine Basisfunktionalität für ein Multi-GPU-System bieten wollen, unterstützen einfach nur das EMA und überlassen die Arbeit den Treiberentwicklern von AMD und NVIDIA. Da aber nur die Entwickler selbst den besten Einblick in die eigene Arbeit haben, ist sicherlich ein Angebot aus Linked und Unlinked Mode zu bevorzugen.

EMA in Ashes of the Singularity

Oxide Games hat Ashes of the Singularity vor einigen Monaten in den Early Access von Steam gebracht. 2016 soll das Echtzeit-Strategiespiel dann fertig sein. Als erstes seiner Art setzt es auf DirectX 12 und als erster Entwickler hat Oxide Games die Möglichkeiten von DirectX 12 vollständig ausgenutzt. AMD und Microsoft nutzen das Entwicklerstudio bzw. das Spiel als Technologiedemo. Zur Demonstration von EMA hat Oxide Games das Spiel auf eine AFR-Implementierung hin angepasst. Die Entwickler können jeden Frame einer bestimmten GPU zuteilen – eine Arbeit die zuvor vom Treiber übernommen wurde. Außerdem übernehmen sie die Übertragung der Frames von der sekundären zur primären GPU und auch das Frame Pacing wird nun vom Entwickler übernommen.

Das AFR funktioniert am besten, wenn ähnlich starke Grafikkarten eingesetzt werden, da die Frames hier in ähnlicher Zeit berechnet werden. Dennoch geht die Implementierung weiter als das, was AMD und NVIDIA derzeit bieten. Nicht nur lassen sich unterschiedliche GPUs unterschiedlicher Hersteller kombinieren, auch ist der Betrieb einer GeForce GTX Titan X mit einer GeForce GTX 980 Ti beispielsweise möglich. Funktionieren sollten alle Grafikkarten, die DirectX 12 unterstützen. Allerdings ist eine Kombination einer leistungsstarken mit einer eher leistungsschwachen Grafikkarte weniger sinnvoll. Wenn überhaupt, dann dürfte in der Praxis der Betrieb zweier fast gleichwertiger GPUs zu finden sein, womit auch die besten Resultate zu erwarten sind.

Ashes of the Singularity befindet sich in der Gesamtheit noch in einem Alpha-Status. Der Unlinked Mode von EMA ist noch weitaus experimenteller. Nur eine bestimmte Kombination aus AMD- und NVIDIA-Treibern funktioniert, aber das Ergebnis ist weitaus besser, als man dies zum aktuellen Zeitpunkt erwarten könnte. Laut Oxide Games soll der Unlinked Mode weiter verbessert werden, bevor man sich an die Arbeit mit dem Linked Mode macht. Von ihm erwartet man sich eine Leistungssteigerung im Bereich von 5 bis 10 Prozent.