UE5 Heterogeneous Multi-GPU: Unterschied zwischen den Versionen
Elaina (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Elaina (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 81: | Zeile 81: | ||
Erst danach folgen persistente Ressourcenpools, Double- oder Triple-Buffering, belastbare Benchmarks und ein erster echter UE-Szenen-Workload. | Erst danach folgen persistente Ressourcenpools, Double- oder Triple-Buffering, belastbare Benchmarks und ein erster echter UE-Szenen-Workload. | ||
== Historische Vorläufer == | |||
Die Grundidee heterogener Multi-GPU-Nutzung ist nicht neu. Bereits mit der Einführung von Direct3D 12 entstanden mehrere Versuche, integrierte und dedizierte GPUs gemeinsam zu verwenden. Eine allgemein einsetzbare Lösung für moderne UE5-Spiele hat sich daraus jedoch nicht entwickelt. | |||
=== Microsoft und Epic: UE4 Elemental Demo (2015) === | |||
Microsoft zeigte eine angepasste Unreal-Engine-4-Version der Elemental-Demo, bei der eine NVIDIA-GPU und eine Intel-iGPU gemeinsam arbeiteten. Das erklärte Ziel war, ansonsten ungenutzte Grafikleistung in Hybrid-Systemen zu verwenden. Dieser Versuch ist der Grundidee des Projekts besonders ähnlich, blieb aber eine technische Demonstration. | |||
=== Intel: D3D12 Multi-Adapter Sample (2015) === | |||
Intels Beispiel kombinierte eine GeForce 840M mit Intel HD Graphics 5500. Beide GPUs berechneten getrennte Teile einer einfach parallelisierbaren Raytracing-Szene. Cross-Adapter-Ressourcen und Shared Fences führten die Ergebnisse anschließend zusammen. Intel berichtete in diesem Test von nahezu halbierter Framezeit, warnte jedoch ausdrücklich davor, das Ergebnis unmittelbar auf reale Spiele zu übertragen. | |||
=== Ashes of the Singularity === | |||
Die Nitrous Engine von ''Ashes of the Singularity'' setzte Direct3D-12-Explicit-Multiadapter in einem veröffentlichten Spiel ein. Dabei konnten auch unterschiedliche GPU-Modelle und Hersteller zusammenarbeiten. Das war ein wichtiger Praxisnachweis, blieb in der Spielebranche aber eine seltene Ausnahme. | |||
=== Weitere verwandte Ansätze === | |||
* ''Rise of the Tomb Raider'' erhielt explizite Direct3D-12-Multi-GPU-Unterstützung, vor allem für klassische Kombinationen ähnlicher GPUs. | |||
* NVIDIA VR SLI wies bei Virtual Reality jeder GPU ein Auge zu. Das verteilt unabhängige Ansichten, bleibt jedoch NVIDIA-spezifisch. | |||
* Unreal nDisplay kann Viewports oder Frustums auf weitere GPUs beziehungsweise Prozesse auslagern und das fertige Bild zur Ausgabe-GPU zurückführen. Der Einsatzbereich ist hauptsächlich Virtual Production. | |||
* Forschung und High-Performance Computing verwenden seit Jahren Scheduler für heterogene GPUs, allerdings überwiegend für Compute- und Datenverarbeitungsaufgaben statt für einen allgemeinen UE5-Echtzeitrenderer. | |||
=== Abgrenzung dieses Projekts === | |||
Das Projekt erfindet Direct3D-12-Explicit-Multiadapter nicht neu. Sein eigener Ansatz liegt in der Kombination aus tiefer UE5.8-RHI-Integration, UE-kompilierten Shadern auf unabhängigen Worker-Devices, frei wählbaren Spiel- und Compute-Workloads, Capability- und Performance-Scheduler, mehreren Fallback-Pfaden sowie dem langfristigen Ziel beliebiger Hersteller und mehrerer Worker. | |||
== Vergleich mit anderen Multi-GPU-Verfahren == | == Vergleich mit anderen Multi-GPU-Verfahren == | ||
| Zeile 168: | Zeile 195: | ||
* [https://learn.microsoft.com/en-us/windows/win32/direct3d12/shared-heaps Microsoft: Shared heaps] | * [https://learn.microsoft.com/en-us/windows/win32/direct3d12/shared-heaps Microsoft: Shared heaps] | ||
* [https://learn.microsoft.com/en-us/samples/microsoft/directx-graphics-samples/d3d12-heterogeneous-multiadapter-sample-win32/ Microsoft: D3D12 Heterogeneous Multiadapter Sample] | * [https://learn.microsoft.com/en-us/samples/microsoft/directx-graphics-samples/d3d12-heterogeneous-multiadapter-sample-win32/ Microsoft: D3D12 Heterogeneous Multiadapter Sample] | ||
* [https://devblogs.microsoft.com/directx/directx-12-multiadapter-lighting-up-dormant-silicon-and-making-it-work-for-you/ Microsoft: UE4 Elemental Demo mit heterogenem Multiadapter] | |||
* [https://www.intel.com/content/dam/develop/external/us/en/documents/multi-adapter-support-in-directx-12-594015.pdf Intel: Multi-Adapter Support in DirectX 12] | |||
* [https://devblogs.microsoft.com/directx/ashes-of-the-singularity-makes-gaming-history-with-directx-12/ Microsoft: Ashes of the Singularity und heterogene Adapter] | |||
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/nvidia-sli-alternative-frame-rendering-in-unreal-engine Epic: NVIDIA SLI Alternate Frame Rendering] | * [https://dev.epicgames.com/documentation/en-us/unreal-engine/nvidia-sli-alternative-frame-rendering-in-unreal-engine Epic: NVIDIA SLI Alternate Frame Rendering] | ||
* [https://dev.epicgames.com/documentation/en-us/unreal-engine/multi-process-rendering-with-unreal-engine Epic: Multi-Process Rendering] | * [https://dev.epicgames.com/documentation/en-us/unreal-engine/multi-process-rendering-with-unreal-engine Epic: Multi-Process Rendering] | ||
Version vom 4. September 2026, 00:47 Uhr
Hinweis: Projektstand: 4. September 2026. Die beschriebenen Ergebnisse sind ein experimenteller Proof of Concept für Unreal Engine 5.8 unter Windows und Direct3D 12.
UE5 Heterogeneous Multi-GPU ist ein experimentelles Projekt zur gemeinsamen Nutzung unterschiedlicher Grafikkarten in Unreal Engine 5. Eine leistungsfähige GPU übernimmt das normale Rendering. Weitere NVIDIA-, AMD- oder Intel-GPUs sollen als unabhängige Worker klar abgegrenzte Aufgaben bearbeiten.
Das Ziel ist ausdrücklich kein klassisches SLI oder CrossFire. Die Anwendung verteilt Arbeit selbst und tauscht nur benötigte Ergebnisse zwischen den GPUs aus.
| Engine / Plattform | Unreal Engine 5.8 Source Build / Windows / Direct3D 12 |
|---|---|
| Testsystem | Lenovo LOQ 17IRX10 |
| Primary | NVIDIA GeForce RTX 5060 Laptop GPU |
| Worker | Intel UHD Graphics |
| Windows/D3D12-Proof-of-Concept | etwa 75–80 % (grobe Projekteinschätzung) |
| Gesamtvision | etwa 30–35 % (Scheduler, echte Workloads, N-GPU und Vulkan noch offen) |
Grundprinzip
Intel Worker GPU -> eigener UE-Compute-Shader / später eigenständiger Workload -> lokale Worker-Ressource -> Shared Cross-Adapter Buffer -> Shared Fence -> lokale RTX-Ressource RTX Primary GPU -> normales UE5-Rendering -> übernimmt und verwendet das Worker-Ergebnis
Jeder Worker besitzt ein eigenes ID3D12Device, eigene Queues, Command Lists und Ressourcen. Ein späterer Scheduler soll Rechenleistung, Fähigkeiten, Transferkosten und gewünschte Aktualisierungsrate bewerten. Vorgesehene Aufgaben sind beispielsweise SceneCapture2D, Spiegel, CCTV, Minimap, Compute oder Niagara.
Verifizierter Entwicklungsstand
Worker-Compute
Ein echter, von Unreal kompilierter Global Compute Shader läuft auf der Intel UHD, während Unreal regulär über die RTX rendert. Der Test verdoppelt 64 Ganzzahlen auf dem Worker; 64 von 64 Ergebnissen wurden korrekt verifiziert. Damit ist echte GPU-Arbeit auf einem zweiten, herstellerfremden Device nachgewiesen.
Cross-Adapter-Speicher und Synchronisation
- RTX und Intel öffnen denselben D3D12 Cross-Adapter Heap.
- Ein gemeinsamer Buffer wurde mit 64 Testwerten erfolgreich geprüft.
- Ein Shared Fence synchronisiert die Queues direkt von GPU zu GPU.
- Die CPU wartet im Test nur noch für die abschließende Ergebnisprüfung, nicht als Vermittler der GPU-Abhängigkeit.
Texturtransport
Direkte Cross-Adapter-Texturen sind auf dem Testsystem nicht beidseitig verfügbar: Die Intel UHD meldet Unterstützung für Row-Major Cross-Adapter Textures, die RTX 5060 Laptop GPU nicht. Deshalb verwendet das Projekt einen allgemeineren Buffer-Fallback.
Intel-Textur -> CopyTextureRegion -> Shared Cross-Adapter Buffer -> Shared Fence / RTX Queue Wait -> lokale RTX-Textur -> Readback und Prüfung
Eine 64 × 64 Pixel große RGBA8-Testtextur wurde auf diesem Weg vollständig übertragen und auf der RTX als echte lokale Textur rekonstruiert. 4096 von 4096 Pixeln waren korrekt.
Aktueller nächster Schritt
Der zweite Global Shader MainTextureCS ist registriert und wird bereits als RHI-Shader erzeugt. Als Nächstes soll er die Testtextur direkt auf der Intel-GPU erzeugen. Danach folgt der bereits verifizierte Transportweg zur RTX:
MainTextureCS -> Intel-Textur -> Shared Buffer -> Shared Fence -> RTX-Textur
Erst danach folgen persistente Ressourcenpools, Double- oder Triple-Buffering, belastbare Benchmarks und ein erster echter UE-Szenen-Workload.
Historische Vorläufer
Die Grundidee heterogener Multi-GPU-Nutzung ist nicht neu. Bereits mit der Einführung von Direct3D 12 entstanden mehrere Versuche, integrierte und dedizierte GPUs gemeinsam zu verwenden. Eine allgemein einsetzbare Lösung für moderne UE5-Spiele hat sich daraus jedoch nicht entwickelt.
Microsoft und Epic: UE4 Elemental Demo (2015)
Microsoft zeigte eine angepasste Unreal-Engine-4-Version der Elemental-Demo, bei der eine NVIDIA-GPU und eine Intel-iGPU gemeinsam arbeiteten. Das erklärte Ziel war, ansonsten ungenutzte Grafikleistung in Hybrid-Systemen zu verwenden. Dieser Versuch ist der Grundidee des Projekts besonders ähnlich, blieb aber eine technische Demonstration.
Intel: D3D12 Multi-Adapter Sample (2015)
Intels Beispiel kombinierte eine GeForce 840M mit Intel HD Graphics 5500. Beide GPUs berechneten getrennte Teile einer einfach parallelisierbaren Raytracing-Szene. Cross-Adapter-Ressourcen und Shared Fences führten die Ergebnisse anschließend zusammen. Intel berichtete in diesem Test von nahezu halbierter Framezeit, warnte jedoch ausdrücklich davor, das Ergebnis unmittelbar auf reale Spiele zu übertragen.
Ashes of the Singularity
Die Nitrous Engine von Ashes of the Singularity setzte Direct3D-12-Explicit-Multiadapter in einem veröffentlichten Spiel ein. Dabei konnten auch unterschiedliche GPU-Modelle und Hersteller zusammenarbeiten. Das war ein wichtiger Praxisnachweis, blieb in der Spielebranche aber eine seltene Ausnahme.
Weitere verwandte Ansätze
- Rise of the Tomb Raider erhielt explizite Direct3D-12-Multi-GPU-Unterstützung, vor allem für klassische Kombinationen ähnlicher GPUs.
- NVIDIA VR SLI wies bei Virtual Reality jeder GPU ein Auge zu. Das verteilt unabhängige Ansichten, bleibt jedoch NVIDIA-spezifisch.
- Unreal nDisplay kann Viewports oder Frustums auf weitere GPUs beziehungsweise Prozesse auslagern und das fertige Bild zur Ausgabe-GPU zurückführen. Der Einsatzbereich ist hauptsächlich Virtual Production.
- Forschung und High-Performance Computing verwenden seit Jahren Scheduler für heterogene GPUs, allerdings überwiegend für Compute- und Datenverarbeitungsaufgaben statt für einen allgemeinen UE5-Echtzeitrenderer.
Abgrenzung dieses Projekts
Das Projekt erfindet Direct3D-12-Explicit-Multiadapter nicht neu. Sein eigener Ansatz liegt in der Kombination aus tiefer UE5.8-RHI-Integration, UE-kompilierten Shadern auf unabhängigen Worker-Devices, frei wählbaren Spiel- und Compute-Workloads, Capability- und Performance-Scheduler, mehreren Fallback-Pfaden sowie dem langfristigen Ziel beliebiger Hersteller und mehrerer Worker.
Vergleich mit anderen Multi-GPU-Verfahren
| Verfahren | Arbeitsweise | Verhältnis zu diesem Projekt |
|---|---|---|
| SLI / CrossFire | Treiber- beziehungsweise Verbundlösung für meist ähnliche GPUs; häufig wird die Bildarbeit verteilt. | Dieses Projekt benötigt keinen herstellerspezifischen GPU-Verbund und weist Aufgaben ausdrücklich selbst zu. |
| AFR (Alternate Frame Rendering) | GPU 1 rendert einen Frame, GPU 2 den nächsten. | Das Projekt verteilt unabhängige Aufgaben statt aufeinanderfolgender Frames. Dadurch werden Frame-Abhängigkeiten und typisches AFR-Pacing vermieden. |
| SFR (Split Frame Rendering) | Mehrere GPUs bearbeiten Bereiche desselben Frames. | Erfordert enge Lastverteilung und viel Datenaustausch. Das Projekt bevorzugt vollständig abgrenzbare Workloads und überträgt deren Ergebnis. |
| Direct3D 12 Linked Multiadapter | Mehrere vom Treiber verbundene GPUs erscheinen als Knoten eines logischen Adapters. | Eignet sich eher für eng kompatible GPUs. Das Projekt verwendet unabhängige Devices (Unlinked/Explicit Multiadapter) und unterstützt dadurch heterogene Herstellerkombinationen. |
| Direct3D 12 Unlinked / Explicit Multiadapter | Die Anwendung verwaltet getrennte Adapter, Ressourcen und Synchronisation selbst. | Das ist die technische Familie des Projekts. Hinzu kommen die eigene UE5-RHI-Integration, Workload-Ziele, Fallbacks und der geplante Scheduler. |
| UE nDisplay mGPU / Multi-Process | Separate GPUs rendern bestimmte Viewports oder Frustums, vor allem für Virtual Production; Ergebnisse werden zur Ausgabe-GPU kopiert. | Ähnliche Idee der aufgabenweisen Trennung, aber für einen anderen Einsatzbereich. Dieses Projekt zielt auf allgemeine Spiel- und Compute-Workloads innerhalb der Engine. |
| Vulkan Device Groups | Ähnliche physische GPUs können ein gemeinsames logisches Device bilden. | Für beliebige heterogene GPUs meist ungeeignet, da Geräte einer Gruppe nahezu gleiche Eigenschaften besitzen müssen. Eine spätere Vulkan-Portierung benötigt daher wahrscheinlich getrennte Devices und External Memory/Semaphores. |
SLI und CrossFire bezeichnen den Verbund; AFR und SFR beschreiben mögliche Verteilungsmethoden innerhalb solcher Systeme. Sie sind deshalb nicht vollständig getrennte Kategorien.
Vorteile der geplanten Variante
- Herstellerunabhängig: NVIDIA, AMD und Intel können grundsätzlich kombiniert werden.
- Vorhandene Hardware nutzen: Auch eine sonst wenig genutzte integrierte GPU kann geeignete Nebenaufgaben übernehmen.
- Aufgaben statt Frames verteilen: Spiegel, Minimap oder Compute können mit eigener Auflösung und Aktualisierungsrate laufen.
- Keine identischen GPUs erforderlich: Unterschiedliche Fähigkeiten können gezielt genutzt werden.
- Kontrollierter Datenaustausch: Nur das benötigte Ergebnis muss zurück zur Primary-GPU.
- Robuste Fallback-Idee: Wenn direkte Texturen nicht gemeinsam nutzbar sind, bleibt der Shared-Buffer-Pfad.
- Erweiterbar: Scheduler, manuelles Mapping und mehrere Worker sind als spätere Stufen vorgesehen.
Nachteile und technische Risiken
- Hoher Entwicklungsaufwand: Geräte, Ressourcen, Zustände, Fences, Fehlerfälle und UE-Lebenszyklen müssen selbst verwaltet werden.
- Transfer kann den Gewinn aufzehren: Cross-Adapter Heaps liegen laut D3D12 nicht automatisch im schnellen lokalen VRAM. Bandbreite und Latenz müssen für jeden Workload gemessen werden.
- VRAM wird nicht einfach addiert: Benötigte Ressourcen können auf mehreren GPUs vorliegen und zusätzlichen Speicher verbrauchen.
- Langsame Worker können bremsen: Eine Aufgabe lohnt sich nur, wenn Rechengewinn größer als Übergabe-, Warte- und Kopierkosten ist.
- Nicht jeder Workload ist unabhängig: Hauptansicht, Lumen, Nanite und stark gekoppelte Renderpässe besitzen viele Abhängigkeiten und sind schwieriger auszulagern.
- Hardwareunterschiede: Formate, Shader-Funktionen, Queue-Fähigkeiten und Cross-Adapter-Support müssen pro GPU geprüft werden.
- Wartungsrisiko: Eingriffe in private D3D12RHI-Dateien können bei Engine-Updates angepasst werden müssen.
- Produktionsreife fehlt noch: Ressourcenpools, Timeouts, Device-Lost-Wiederherstellung, Scheduler und echte Szenentests sind offen.
Wann die Variante sinnvoll ist
Am aussichtsreichsten sind Aufgaben mit viel eigener Rechenarbeit, einem relativ kleinen Endergebnis und wenigen Abhängigkeiten zur Hauptszene. Gute frühe Kandidaten sind unabhängige Compute-Aufgaben sowie Scene Captures, die nicht in jedem Frame aktualisiert werden müssen. Weniger geeignet sind winzige Aufgaben mit großem Transfer oder Renderpässe, die ständig auf Ressourcen der Primary-GPU zugreifen.
Die entscheidende Regel für den späteren Scheduler lautet daher:
Worker-Gewinn > Vorbereitung + Datentransfer + Synchronisation + Rückintegration
Roadmap
MainTextureCSauf der Worker-GPU ausführen und Ergebnis übertragen.- Shared Heaps, Buffer und Fences persistent halten; Ring- beziehungsweise Mehrfachpuffer einführen.
- Latenz und Bandbreite für verschiedene Größen und Update-Raten messen.
- Ersten echten UE-Offload integrieren und als Primary-RHI-Textur bereitstellen.
- Capability-Matrix, Benchmark-Wizard, Scheduler und manuelle Overrides entwickeln.
- Mehrere Worker-GPUs unterstützen.
- Fallback über System-RAM ergänzen.
- Linux/Vulkan mit getrennten Devices, External Memory und externer Synchronisation untersuchen.
Quellen
- Interner Entwicklungsstand und verifizierte Testprotokolle vom 4. September 2026
- Microsoft: Direct3D 12 Multi-adapter systems
- Microsoft: Shared heaps
- Microsoft: D3D12 Heterogeneous Multiadapter Sample
- Microsoft: UE4 Elemental Demo mit heterogenem Multiadapter
- Intel: Multi-Adapter Support in DirectX 12
- Microsoft: Ashes of the Singularity und heterogene Adapter
- Epic: NVIDIA SLI Alternate Frame Rendering
- Epic: Multi-Process Rendering
- Khronos: Vulkan Specification – Device Groups
