Ray Tracing auf AMD Radeon RX 6000-Grafikkarten, wie funktioniert das?

Ray Tracing auf AMD Radeon RX 6000-Grafikkarten

Mit der Präsentation der RX 6000 von AMD it ist klar, dass Ray Tracing mehr als eine Laune zu sein NVIDIA hat sich als Standard für Grafikhardware etabliert, und es ist auch klar, dass dies in Zukunft die Standardmethode für das Rendern sein wird. Trotzdem erwartet uns vorerst eine Übergangszeit, in der beide führenden Unternehmen diesbezüglich Vorschläge machen werden. Wie ist AMDs Ansatz präsentiert mit seinem RX 6000?

Als AMD seine neue vorstellte RDNA Grafikarchitektur pro Jahr vor wir nahmen einen von Kalk und einen von Sand; Die guten Nachrichten kamen in Form einer neuen Grafikarchitektur nach mehr als fünf Jahren mit der GCN-Architektur, aber die schlechten Nachrichten kamen in Form des Mangels an dedizierter Hardware für das sogenannte Echtzeit-Raytracing oder Echtzeit-Raytracing . . Vor einigen Monaten bestätigte AMD jedoch, dass die RDNA 2-Architektur mit dieser Art von Einheiten ausgestattet sein wird, damit sie in dieser Hinsicht mit NVIDIA konkurrieren können, obwohl ihre Funktionsweise etwas anders ist als der Vorschlag von NVIDIA.

Die Schnittmenge im RX 6000: der Schlüssel zur Strahlverfolgung

RX 6000 Raytracing

Wenn wir uns die Raytracing-Pipeline ansehen, werden wir feststellen, dass es sich unabhängig von der Hardware immer um dieselbe handelt. Es handelt sich um einen Vorgang, der wiederholt wird, wobei der Schnittpunkt zwischen Strahl und Objekt enorm oft berechnet wird. Diese sich wiederholende Berechnung ist in spezialisierten Einheiten teurer als in den Shadern selbst.

Da die AMD- und NVIDIA-Einheiten sehr ähnlich sind, empfehlen wir Ihnen, das Tutorial auf dieser Website mit dem Titel „Was sind RT-Kerne für Ray Tracing und wie funktionieren sie?“ Zu lesen. Hier wird die NVIDIA-Lösung als Ergänzung zu diesem Lernprogramm verwendet, damit Sie eine vollständige Vorstellung von den Unterschieden zwischen den beiden Ansätzen erhalten.

Jede der Schnittmengeneinheiten befindet sich in jeder Recheneinheit. Die Gründe dafür sind folgende:

  • Sie müssen Zugriff auf den BVH-Baum im Speicher haben, damit sie das GPU-Cache-System durchlaufen können, und genau wie die SIMD-Einheiten, die Shader-Programme ausführen, benötigen sie Zugriff auf die gesamte Cache-Hierarchie.
  • Sie müssen sich in der Nähe der SIMD-Einheiten befinden, da diese vom Ergebnis der Schnittmenge abhängen, um zu wissen, welche Art von Shader sie auf die Objekte in der Raytracing-Funktion anwenden.

AMD hat sich für eine andere Lösung entschieden: Integrieren Sie die Schnittmenge in die Texturfiltereinheit oder lassen Sie sie zumindest gemeinsam auf den Datencache zugreifen. Wir kennen diese Informationen aus zwei verschiedenen Quellen, die erste ist die Präsentation in den 2020 Hot Chips von Microsoft über den SoC seiner Xbox Serie X, da es eine integrierte hat GPU mit RDNA 2-Architektur, genau wie die RX 6000-Grafikkarten. von AMD.

Xbox RX 6000 PS5-CU

Vergessen wir nicht, dass AMD selbst bestätigt hat, dass die Lösung für Ray Tracing in Konsolen der nächsten Generation mit ihren GPUs und auf dem PC genau dieselbe ist.

RX 6000 Raytracing

Die zweite Quelle ist ein Patent von AMD selbst, bei dem gesagt wird, dass sich die Schnittmenge für Ray Tracing in der Textureinheit befindet, und dies hat zu der Verwirrung geführt, dass die Textureinheit den Schnittpunkt der Strahlen und die Texturierung nicht gleichzeitig berechnen kann In der Realität wird die Texturierung jedoch nur in einer Stufe der grafischen Pipeline angewendet, dh in der Texturierung der Szene, in der die Pixel-Shader agieren. Außerhalb dieser Stufe sind diese Einheiten daher selten erforderlich.

Patente intersección AMD

Die Textureinheit wendet einfach das bilineare Filter an. Dies bedeutet, dass 4 benachbarte Abtastwerte pro Pixel genommen und zwischen diesen interpoliert werden. Jede moderne GPU verfügt normalerweise über 4 Textureinheiten, die von 16 Lade- / Speichereinheiten begleitet werden, mit denen sie auf den Datencache der Compute Unit oder des SM zugreifen.

Der einzige Unterschied zur NVIDIA-Lösung zur Berechnung der Schnittmenge in Ray Tracing besteht darin, dass beim RX 6000 AMD der Zugriff auf den Datencache über die L / S-Einheiten zwischen den Texturfiltereinheiten und der Schnittmenge umgeschaltet wird.

Warum ist die Schnittmenge für Ray Tracing in der CU?

Caches CPU-GPU

Die Ausführungseinheiten innerhalb der GPU arbeiten normalerweise mit Anweisungen, im Allgemeinen vom Register-Register-Typ, so dass ihnen ein komplexer Mechanismus für den Zugriff auf die Speicherhierarchie fehlt, und dies ermöglicht es ihnen, einfachere Kerne als die von a zu sein CPU und mehr von ihnen in jeden Chip legen. Die Art und Weise, wie die SIMD-Einheiten in der Recheneinheit auf die Speicherhierarchie zugreifen, die aus den internen Caches der GPU und des VRAM besteht, besteht darin, die Lade- / Speichereinheiten dafür zu verwenden.

Fast alle Arten von Shader-Programmen arbeiten in der Regel mit Registern, aber es gibt einen Typ, nämlich Pixel oder Shader, die Zugriff auf die Speicherhierarchie benötigen, da sie mit den riesigen Datenmengen aus den Texturen und damit den Textureinheiten arbeiten haben zusammen mit den SIMD-Einheiten Zugriff auf die Speicherhierarchie.

Im speziellen Fall von Ray Tracing müssen wir die Position der Objekte in der Szene in einer räumlichen Datenstruktur speichern, die wir BVH nennen. Diese Datenstruktur passt nicht in den internen Speicher der GPU, daher muss die Schnittmenge die Speicherhierarchie verwenden, was bedeutet, dass diese Einheiten auch mit dem Cache und dem VRAM verbunden sind.

Der RX 6000 ist stärker auf die Anforderungen von DirectX 12 Ultimate ausgerichtet

DX12 Ultimatives Logo

Es ist noch ein langer Weg für die Raytracing-Methode, um die Rasterisierung zu ersetzen, und es ist noch ein langer Weg, bis die optimistischsten Vorhersagen von mindestens drei Jahren sprechen. Der Grund dafür ist, dass Ray Tracing eine sehr hohe Rechenleistung erfordert und es Szenen gibt, in denen selbst die leistungsstärkste GPU beim Versuch, eine angemessene Leistung zu erzielen, völlig erstickt.

Beim herkömmlichen Ray Tracing wird ein Strahl von verschiedenen Objekten reflektiert, bis ihm die Energie ausgeht oder er einfach die Szene verlässt. Um Energie zu verstehen, muss man bedenken, dass jedes Objekt einen Brechungsquotienten von 0 bis 1 hat und dass dies die Lichtmenge ist, die es absorbiert und reflektiert. Ein Objekt mit einem Brechungsquotienten von 0 absorbiert das gesamte Licht vollständig und emittiert es nicht, während ein Objekt mit einem Brechungsquotienten von 1 das gesamte Licht emittiert, das es erreicht.

Jedes Mal, wenn ein Strahl auf ein Objekt trifft, erzeugt er neue indirekte Strahlen usw., solange der Brechungsquotient nicht niedrig genug ist. Es ist offensichtlich, dass dies eine große Anzahl von zu berechnenden Kreuzungen ist, die die Kapazität der Kreuzungseinheiten überschreiten.

DX12-Raytracing

Um dies zu vermeiden, wurde in APIs wie Microsoft DX12 Ultimate oder Vulkan eine neue Art von Shader-Programm hinzugefügt: der Ray Generation Shader, der darin besteht, dass die Erzeugung neuer Strahlen nicht automatisch erfolgt, sondern explizit aufgerufen werden muss. durch den Code, was bedeutet, dass wir in den ersten Jahren Objekte in Spielen sehen werden, die keine Strahlen brechen, um die Anzahl der Strahlen in der Szene zu reduzieren und stabile Bildraten zu erzielen.

Dies bedeutet, dass, wenn ein Strahl auf ein Objekt trifft und seine Flugbahn fortsetzen muss, um neue Strahlen zu erzeugen, die Schnitteinheit das für die Koordination des Pfades zuständige Shader-Programm fragen muss, was zu tun ist.

Ist die Ray Tracing-Lösung RX 6000 besser als die RTX 3000?

AMD gegen NVIDIA

Nun, wir wissen es nicht genau, da sich im Moment sowohl ein Unternehmen als auch das andere für die Angabe unterschiedlicher Metriken entschieden haben. Im Fall von AMD haben wir indirekt über Microsoft die Information, dass die Kreuzungseinheiten 4 Strahlen ausführen können. Ops pro Zyklus, aber wir wissen nicht genau, was diese Ray Op sind. Das einzige, was wir auch von Microsoft wissen, ist, dass die Schnittmengeneinheiten der GPU ihrer Konsole 25 TFLOPS entsprechen, aber wir kennen den Kontext nicht Zahl.

Im Fall von NVIDIA behaupten sie, dass die RT-Kerne des RTX 3080 eine kombinierte Leistung von 58 RT-TFLOPS haben, aber wir wissen nicht, ob dies die Rechenleistung der RT-Kerne selbst ist oder die Rechenleistung, die die CUDA-Laufwerke sein sollten genug, um die gleiche Leistung zu haben.

NVIDIA Ampere 6

Wie dem auch sei, die Realität ist, dass wir nur dem vertrauen können, was beide Architekturen uns sagen und welche Informationen wir haben, und es scheint, dass die Einheiten des RX 6000 denen des RTX 2000 mit 4 blitzschnellen Berechnungseinheiten ähnlicher sind. Box-Schnittpunkt und 1 Blitz-Dreieck-Einheit, aber NVIDIA im RTX 3000 hat letzteres verdoppelt, sodass die Kapazität bei der Berechnung der Schnittpunkte etwas größer ist.

Wie sich dies in jedem Spiel niederschlägt, hängt von einer Reihe von Faktoren ab, aber auf jeden Fall scheint AMDs Lösung für Ray Tracing auf dem RX 6000 gut und effizient genug zu sein, um auch auf Konsolen der nächsten Generation zuzugreifen.