Anslut till Senaste Tekniska Nyheter, Bloggar, Recensioner

NVIDIA DLSS, GPU Performance Solution eller bara en myt?

Om vi ​​måste prata om de två spjutspetsarna för NVIDIA för dess GeForce RTX är det tydligt att de är Ray Tracing och DLSS, den första är inte längre en fördel på grund av implementeringen i AMD:s RDNA 2, men den andra är fortfarande ett differentialelement det ger det en stor fördel, men allt är inte som det verkar vid första anblicken.

NVIDIA DLSS

DLSS på RTX beror på Tensor Cores

Det första vi måste ta hänsyn till är hur de olika algoritmerna, vanligtvis kallade DLSS, drar fördel av konsolens hårdvara och inget bättre än att göra en analys av GPU:ns funktion medan den renderar en ram med DLSS aktiv och utan det.

De två skärmdumparna som du har ovanför dessa bilder motsvarar användningen av NVIDIA NSight-verktyget, som mäter användningen av var och en av delarna av GPU:n över tiden. För att tolka graferna måste vi ta hänsyn till att den vertikala axeln motsvarar användningsnivån för den delen av GPU:n och den horisontella axeln tiden då ramen renderas.

Som du kan se är skillnaden mellan de båda skärmdumparna av NSight att du i en av dem kan se användningsnivån för varje del av GPU:n när du använder DLSS och i den andra inte. Vad är skillnaden? Om vi ​​inte tittar noga kommer vi att se att i den som motsvarar användningen av DLSS är grafen som motsvarar Tensor Cores platt utom i slutet av grafen, vilket är när dessa enheter aktiveras.

DLSS är inget annat än en superupplösningsalgoritm, som tar en bild med en given ingångsupplösning och matar ut en version med högre upplösning av samma bild i processen. Det är därför Tensor Cores när de tillämpas aktiveras sist, eftersom de kräver att GPU:n renderar bilden först.

DLSS-drift på NVIDIA RTX

RTX 3070 3080 Ti

DLSS tar upp till 3 millisekunder av tiden att rendera en bildruta, oavsett bildhastigheten som spelet körs med. Om vi ​​till exempel vill använda DLSS i spel med en frekvens på 60 Hz, måste GPU:n lösa varje bildruta i:

(1000 ms / 60 Hz) -3 ms.

Med andra ord, på 13,6 ms kommer vi i gengäld att erhålla en högre bildhastighet i utgångsupplösningen än vi skulle få om vi skulle återge utgångsupplösningen till GPU:n.

DLSS Funcionamiento

Anta att vi har en scen som vi vill rendera i 4K. För detta har vi en obestämd GeForce RTX som vid nämnda upplösning når 25 bilder per sekund, så den renderar var och en av dessa vid 40 ms, vi vet att samma GPU kan nå en bildhastighet på 5o, 20 ms vid 1080p. Vår hypotetiska GeForce RTX tar cirka 2,5 ms att skala från 1080p till 4K, så om vi aktiverar DLSS för att få en 4K-bild från en på 1080p så tar varje bildruta med DLSS 22,5 ms. Med detta har vi kunnat rendera scenen med 44 bildrutor per sekund, vilket är större än de 25 bildrutor som skulle erhållas vid rendering med naturlig upplösning.

Å andra sidan, om grafikprocessorn kommer att ta mer än 3 millisekunder för att få upplösningen att hoppa, kommer DLSS inte att aktiveras, eftersom det är den tidsgräns som NVIDIA ställer in i sina RTX GPU:er för dem att tillämpa DLSS-algoritmerna. Detta gör lägre GPU:er begränsade i upplösningen som de kan köra DLSS med.

DLSS drar nytta av höghastighets Tensor Cores

De Tensorkärnor är viktiga för exekvering av DLSS , utan dem skulle det inte vara möjligt att utföra med den hastighet som körs i NVIDIA RTX, eftersom algoritmen som används för att utföra ökningen av upplösningen är vad vi kallar ett konvolutionellt neuralt nätverk, i vilket Composition, vi inte kommer att gå in på den här artikeln, säg bara att de använder ett stort antal matrismultiplikationer och tensorenheter är idealiska för att beräkna med numeriska matriser, eftersom de är den typ av enhet som exekverar dem snabbare.

När det gäller en film idag, kommer avkodare att generera den initiala bilden i bildbufferten flera gånger snabbare än den hastighet med vilken den visas på skärmen, så det finns mer tid att skala och därför kommer du att behöva mycket mindre datoranvändning kraft. I ett videospel, å andra sidan, har vi det inte lagrat på ett stöd som kommer att vara följande bild, utan det måste genereras av GPU:n, detta minskar tiden som skalaren måste fungera.

Ampere SM Subcore

Var och en av de här Tensorkärnor finns inuti varje SM-enhet och beroende på vilket grafikkort vi använder, kommer dess beräkningskapacitet att variera genom att variera antalet SM:s per GPU, och kommer därför att generera den skalade bilden på kortare tid. Eftersom DLSS slår in i slutet av renderingen , krävs en hög hastighet för att tillämpa DLSS , vilket är anledningen till att den skiljer sig från andra superupplösningsalgoritmer som de som används för att skala film och bilder.

Inte alla NVIDIA RTX fungerar på samma sätt på DLSS

Tabla Rendimiento DLSS

Den här tabellen som du ser är hämtad från NVIDIAs egen dokumentation, där ingångsupplösningen i alla fall är 4 gånger mindre än utdataupplösningen, så vi är i Performance Mode. Det bör förtydligas att det finns ytterligare två lägen, Quality Mode ger bättre bildkvalitet, men kräver en ingångsupplösning på halva pixlarna, medan Ultra Performance Mode gör en skalning på 9 gånger, men har sämst bildkvalitet. av allt.

Som du kan se i tabellen varierar prestandan inte bara beroende på GPU, utan även om vi tar hänsyn till GPU som vi använder. Vilket inte borde komma som någon överraskning efter det vi har förklarat tidigare. Minst imponerande är det faktum att en RTX 3090 i Performance Mode slutar med att kunna skala från 1080p till 4K på mindre än 1 ms. detta har en motsvarighet som härrör från en logisk slutsats och det är att DLSS i de mer blygsamma grafikkorten alltid kommer att fungera sämre.

Orsaken bakom detta är tydlig, en GPU med mindre kraft kommer inte bara att behöva mer tid för att rendera ramen, utan även för att tillämpa DLSS. Är lösningen Ultra Performance-läget som ökar antalet pixlar med 9 gånger? Nej, eftersom DLSS kräver att den utgående bilden har tillräcklig ingångsupplösning, eftersom ju fler pixlar det finns på skärmen så blir det mer information och skalningen blir mer exakt.

Geometri, bildkvalitet och DLSS

Fragmentos DLSS

GPU:erna är utformade så att i Pixel / Fragment Shader-stadiet, där pixlarna i varje fragment är färgade och texturerna appliceras, gör de det med 2 × 2 pixelfragment. De flesta GPU:er, när de har rastrerat en triangel, omvandlar den till ett block med pixlar som sedan delas upp i 2 × 2 pixelblock, där varje block skickas till en beräkningsenhet.

Konsekvenserna på DLSS? Rasterenheten tenderar att kassera alla 2 × 2 bitar ur lådan eftersom de är för små, ibland motsvarande detaljer som är långt borta. Detta innebär att detaljer som vid en inbyggd upplösning skulle synas utan problem inte syns i upplösningen som erhålls genom DLSS på grund av att de inte fanns i bilden som skulle skalas.

Eftersom DLSS kräver en bild med så mycket information som möjligt som ingångsreferens är det inte en algoritm som är utformad för att generera bilder med mycket hög upplösning från mycket låga, eftersom detaljer går förlorade i processen.

Och hur är det med AMD, kan den emulera DLSS?

FidelityFX superupplösning

Rykten om superupplösningen i FidelityFX har funnits i nätverket i flera månader men från AMD har de ännu inte gett oss något riktigt exempel på hur dess motsvarighet till DLSS fungerar. Vad är det som gör AMD:s liv så svårt? Jo, det faktum att Tensor Cores är avgörande för DLSS och i AMD RX 600 finns det inga likvärdiga enheter, utan snarare att SIMD over register eller SWAR används i ALU:erna för Compute Units för att få högre prestanda i FP16-format med mindre precision. , men en SIMD-enhet är inte en systolisk array- eller spännare.

Från början talar vi om en 4 gånger differential till förmån för NVIDIA, detta betyder att när man genererar en liknande lösning utgår den från en betydande hastighetsnackdel, optimeringar för beräkning av matriser isär. Vi diskuterar inte om NVIDIA är bättre än AMD i detta, men det faktum att AMD vid designen av sin RDNA 2 inte gav vikt åt tensorenheterna.

CDNA Compute Unit

Beror det på funktionsnedsättning? Ja nej, eftersom AMD paradoxalt nog har lagt till dem till CDNA under namnet Matrix Core. För tillfället är det tidigt att prata om RDNA 3, men låt oss hoppas att AMD inte gör samma misstag igen och inte inkluderar en av dessa enheter. Det är ingen mening att göra utan dem när kostnaden per beräkningsenhet eller SM bara är 1 mm 2 .

Så vi hoppas att när AMD lägger till sin algoritm på grund av bristen på Tensor-enheter kommer den inte att nå precisionen och inte heller hastigheten för NVIDIAs, utan att AMD kommer att presentera en enklare lösning som ett Performance Mode som dubblar pixlarna på skärmen.