Ray Tracing på AMD RX 6000, varför fungerar det sämre?

Ett av ämnena som har kommit upp de senaste dagarna handlar om prestanda för AMD RX 6000 jämfört med NVIDIA RTX 3000 när det gäller Ray Tracing, där företaget med den gröna logotypen verkar ha en prestationsfördel när man använder spårningsstrålarna i förhållande till dess direkta rival. Men finns det en annan anledning förutom de som redan är kända?

Ray Tracing har blivit en av de tekniska innovationerna när det gäller grafik, särskilt eftersom NVIDIA i RTX 2000-familjen har lagt till hårdvara för att påskynda den så kallade realtidsstrålespårningen, en trend som den nyligen har gått med i AMD med sitt RX 6000-sortiment och igen NVIDIA med sin RTX 3000.

Ray Tracing på AMD RX 6000

Men saker och ting är inte ens mellan NVIDIA RTX 3000 och AMD Radeon RX 6000 är inte i nivå när det gäller strålespårning, delvis kan det förklaras av det större antalet ALU i FP32 som har kärnorna i NVIDIA GPU: er, men det är bara en del av historien.

Vad är Ray Tracing-problemet på AMD RX 6000?

Estructuras Datos Espacial

En av de viktigaste punkterna för att påskynda Ray Tracing är användningen av accelerationsdatastrukturer , vilket de gör är att lagra en karta över objekten i scenen.

Hur användbara är de? Enkelt, i Ray Tracing förhindrar de att strålar startar och testar mot delar av scenen där det inte finns något, så de sparar mycket tid och därför kallas de accelerationsstrukturer, av vilka det inte finns en enda typ, utan flera olika sådana.

NVIDIA BVH

När det gäller NVIDIA bestämde de sig för att i sina RT-kärnor lägga till en enhet som kan korsa en typ av datastruktur, BVH-träd, det betyder att om vi använder denna datastruktur när vi gör strålespårning i våra spel behöver vi inte åberopa en Beräkna Shader-programmet för att göra genomgången.

Men i fallet med AMD har de beslutat att inte ge företräde åt någon typ av accelerationsstruktur, vilket innebär att sökvägen måste styras av ett beräkningsskuggprogram om man använder de klassiska träddatastrukturerna som de är Octrees , BVHs, KD-Trees, etc.

En enkel förklaring av vad ett träd är

träd

I databehandling är träd inte en ordnad och listad datastruktur utan snarare hierarkiska, det betyder att processorn måste ta flera iterationer när det gäller att korsa dem.

  • Noden där trädet börjar kallas roten.
  • Varje nod som har en eller flera noder nedan kallas förälder.
  • Varje nod som har en nod ovanför den i hierarkin kallas ett barn.
  • Varje nod som är i slutet av hierarkin kallas ett blad.

Träd bör inte förväxlas med villkorliga hopp i koden som baseras på att hoppa till en eller annan rad när ett tillstånd uppstår, träd antar att när det finns flera noder är det bäst att de fokuseras av flera olika trådar för körning med varje iteration .

BVH2-BVH4

Samtida grafikprocessorer har vanligtvis Shader-enheter som består av fyra SIMD ALU: er, var och en av dem kör en tråd för körning, så att de kan köra träd med upp till 4 noder utan problem, naturligtvis, när det börjar resa en nod kommer det mer och fler undernoder så att antalet trådar som ska köras kommer att vara mycket högt.

Det är därför NVIDIA lade till hårdvara specialiserad på att korsa BVH-träd i sina RT-kärnor, för att undvika att inte behöva använda skuggningsenheter för detta, men den här enheten fungerar bara för den typen av datastruktur, men i utbyte kan den korsa nämnda datastruktur mycket snabbt.

Lista en árbol

Men det finns ett sätt på vilket en nods data kan presenteras och det är att presentera de olika vägarna på ett linjeväg, detta gör det möjligt att skicka data i en endimensionell matris som är vad en 1D-struktur är, vilket är bästa sättet att skicka data till AMD GPU: er.

Lösningen från AMDs sida är att utvecklarna glömmer att presentera accelerationsstrukturen i form av en struktur, naturligtvis kommer detta från beslutet de har fattat att inte lägga till specialiserad hårdvara för att korsa en viss typ av trädstruktur, vilket ger preferens till en större mångsidighet istället för att göra det till en högre hastighet.

Detta innebär att utvecklare just nu måste vidta specialåtgärder för varje grafikkortmärke när de implementerar Ray Tracing.

Var kommer avvikelsen ifrån?

strålspårning svart låda

Vissa av er kanske undrar varför AMD har beslutat att inte inkludera hårdvara för att korsa datastrukturen och detta är väldigt enkelt, det är inte en del av minimispecifikationen för DirectX Ray Tracing.

Dessutom kan vi i DXR utföra Ray Tracing genom att ersätta korsningsenheterna med Shader-enheter som kör en Intersection Shader, men de specialiserade korsningsenheterna som AMD och NVIDIA har inkluderat är mycket effektivare eftersom de gör jobbet flera gånger snabbare och upptar bara en del i jämförelse.

Vad vi hänvisar till är det Microsoft när man skapade sin API inte sätta det sätt på vilket hårdvaran var tvungen att arbeta under bordet och detta har gett AMD utrymme att avstå från specialiserad hårdvara för att navigera datastrukturer i träd, vilket har påverkat prestanda för dina grafikkort.

ISA RDNA2 Ray Tracing

Även om AMD Ray Tracing-patentet talade om införandet av en enhet som kan korsa träd med 4 noder, BVH-4, varnade den också att det var frivilligt och på grund av den information som kan erhållas från den nyligen publicerade ISA RDNA 2 finns det inga hänvisningar till enheten som ansvarar för att korsa träden, bara till korsningsinstruktionerna.