NVIDIA DLSS, soluția de performanță GPU sau doar un mit?

DLSS este unul dintre vârfurile de lance ale NVIDIA contra AMD, jocurile care îl susțin pot obține rate mai mari de cadre la rezoluții de ieșire, unde fără utilizarea acestei tehnici nu ar fi posibil. Acest fapt a fost ceea ce a făcut ca GPU-urile NVIDIA RTX să fie liderii actuali în GPU piață, dar NVIDIA DLSS are o capcană și vă vom spune ce este.

Dacă trebuie să vorbim despre cele două vârfuri de lance ale NVIDIA pentru GeForce RTX, este clar că sunt Ray Tracing și DLSS, primul nu mai este un avantaj datorită implementării în RDNA 2 a AMD, dar al doilea este încă un element diferențial asta îi oferă un mare avantaj, dar nu totul este ceea ce pare la prima vedere.

NVIDIA DLSS

DLSS pe RTX depinde de Tensor Cores

Primul lucru pe care trebuie să îl luăm în considerare este modul în care diferiții algoritmi, denumiți în mod obișnuit DLSS, profită de hardware-ul consolei și nimic mai bun decât să facem o analiză a funcționării GPU în timp ce redă un cadru cu DLSS activ și fără.

Cele două capturi de ecran pe care le aveți deasupra acestor imagini corespund utilizării instrumentului NVIDIA NSight, care măsoară utilizarea fiecărei părți a GPU-ului în timp. Pentru a interpreta graficele trebuie să luăm în considerare faptul că axa verticală corespunde nivelului de utilizare a acelei părți a GPU-ului și axa orizontală timpul în care este redat cadrul.

După cum puteți vedea, diferența dintre ambele capturi de ecran ale NSight este că într-una dintre ele puteți vedea nivelul de utilizare al fiecărei părți a GPU atunci când utilizați DLSS și în cealaltă nu. Care este diferența? Dacă nu privim cu atenție, vom vedea că în cel corespunzător utilizării DLSS, graficul corespunzător nucleelor ​​tensorului este plat, cu excepția sfârșitului graficului, care este atunci când aceste unități sunt activate.

DLSS nu este altceva decât un algoritm de super-rezoluție, care ia o imagine la o rezoluție de intrare dată și scoate o versiune cu rezoluție mai mare a aceleiași imagini în proces. De aceea, Tensor Cores atunci când sunt aplicate sunt activate ultima dată, deoarece necesită GPU pentru a reda imaginea mai întâi.

Operațiunea DLSS pe NVIDIA RTX

RTX 3070 3080 Ti

DLSS durează până la 3 milisecunde din timp pentru a reda un cadru, indiferent de rata de cadre la care rulează jocul. Dacă, de exemplu, dorim să aplicăm DLSS în jocuri la o frecvență de 60 Hz, atunci GPU va trebui să rezolve fiecare cadru în:

(1000ms/60Hz) -3ms.

Cu alte cuvinte, în 13.6 ms, în schimb, vom obține o rată de cadru mai mare în rezoluția de ieșire decât am obține dacă am reda în mod nativ rezoluția de ieșire către GPU.

DLSS Exemplu de funcționare

Să presupunem că avem o scenă pe care vrem să o redăm la 4K. Pentru aceasta avem un GeForce RTX nedeterminat care la rezoluția respectivă atinge 25 de cadre pe secundă, deci redă fiecare dintre acestea la 40 ms, știm că același GPU poate atinge o rată de cadre de 5o, 20 ms la 1080p. Ipoteticul nostru GeForce RTX durează aproximativ 2.5 ms pentru a scala de la 1080p la 4K, deci dacă activăm DLSS pentru a obține o imagine 4K de la una la 1080p, atunci fiecare cadru cu DLSS va dura 22.5 ms. Cu aceasta am reușit să redăm scena la 44 de cadre pe secundă, care este mai mare decât cele 25 de cadre care ar fi obținute redând la rezoluție nativă.

Pe de altă parte, dacă GPU va dura mai mult de 3 milisecunde pentru a face ca rezoluția să sară, DLSS nu va fi activat, deoarece este limita de timp stabilită de NVIDIA în GPU-urile sale RTX pentru ca aceștia să aplice algoritmii DLSS. Acest lucru face ca GPU-urile inferioare să fie limitate la rezoluția la care pot rula DLSS.

DLSS beneficiază de nuclee tensoriale de mare viteză

Tensor Cores sunt esențiale pentru executarea DLSS , fără ele nu ar fi posibil să se efectueze la viteza care rulează în NVIDIA RTX, deoarece algoritmul utilizat pentru a realiza creșterea rezoluției este ceea ce numim o rețea neuronală convoluțională, în care nu vom intra în Compoziție acest articol, spune doar că utilizează un număr mare de înmulțiri matriciale și că unitățile tensoriale sunt ideale pentru calcularea cu matrici numerice, deoarece acestea sunt tipul de unitate care le execută mai repede.

În cazul unui film de astăzi, decodoarele ajung să genereze imaginea inițială în bufferul de imagine de câteva ori mai rapid decât rata la care este afișat pe ecran, deci există mai mult timp pentru a scala și, prin urmare, ajungeți să necesitați mult mai puțin calcul putere. Pe de altă parte, într-un joc video, nu îl avem stocat pe un suport, așa cum va fi următoarea imagine, dar trebuie să fie generat de GPU, aceasta reduce timpul pe care scalerul trebuie să-l funcționeze.

Ampere SM Subcore

Fiecare dintre acestea Tensor Cores se găsește în interiorul fiecărei unități SM și în funcție de placa grafică pe care o folosim, capacitatea sa de calcul va varia, variind numărul de SM-uri pe GPU și, prin urmare, va genera imaginea scalată în mai puțin timp. Deoarece DLSS începe la sfârșitul redării , este necesară o viteză mare pentru a aplica DLSS , motiv pentru care este diferit de alți algoritmi de super-rezoluție, cum ar fi cei utilizați pentru scalarea filmului și a imaginilor.

Nu toate NVIDIA RTX funcționează la fel pe DLSS

Tabla Rendimiento DLSS

Acest tabel pe care îl vedeți este preluat din documentația proprie a NVIDIA, unde rezoluția de intrare în toate cazurile este de 4 ori mai mică decât rezoluția de ieșire, deci suntem în modul Performanță. Trebuie clarificat faptul că există două moduri suplimentare, modul Calitate oferă o calitate mai bună a imaginii, dar necesită o rezoluție de intrare de jumătate din pixeli, în timp ce modul Ultra Performance efectuează o scalare de 9 ori, dar are cea mai proastă calitate a imaginii. dintre toate.

După cum puteți vedea în tabel, performanța variază nu numai în funcție de GPU, ci și dacă luăm în considerare GPU-ul pe care îl folosim. Ceea ce nu ar trebui să fie o surpriză după ce am explicat mai devreme. Faptul că în modul Performanță un RTX 3090 ajunge să poată scala de la 1080p la 4K în mai puțin de 1 ms este cel mai puțin impresionant, totuși aceasta are un omolog care derivă dintr-o concluzie logică și că DLSS din plăcile grafice mai modeste va funcționa întotdeauna mai prost.

Cauza din spatele acestui lucru este clară, un GPU cu mai puțină putere nu va avea nevoie doar de mai mult timp pentru a reda cadrul, ci chiar pentru a aplica DLSS. Soluția este modul Ultra Performance care crește numărul de pixeli de 9 ori? Nu, deoarece DLSS necesită ca imaginea de ieșire să aibă o rezoluție de intrare suficientă, deoarece cu cât sunt mai mulți pixeli pe ecran, atunci vor exista mai multe informații și scalarea va fi mai precisă.

Geometrie, calitate a imaginii și DLSS

Fragmente DLSS

GPU-urile sunt proiectate astfel încât în ​​etapa Pixel / Fragment Shader, în care pixelii fiecărui fragment sunt colorați și texturile sunt aplicate, fac acest lucru cu fragmente de 2 × 2 pixeli. Majoritatea GPU-urilor, atunci când au rasterizat un triunghi, îl convertesc într-un bloc de pixeli care este apoi împărțit în blocuri de 2 × 2 pixeli, unde fiecare bloc este trimis către o unitate de calcul.

Consecințele asupra DLSS? Unitatea raster tinde să arunce toate bucățile de 2 × 2 din cutie ca fiind prea mici, uneori corespunzând detaliilor care sunt departe. Aceasta înseamnă că detaliile care la o rezoluție nativă ar fi văzute fără probleme nu sunt văzute în rezoluția obținută prin DLSS datorită faptului că nu erau în imaginea de scalat.

Deoarece DLSS necesită o imagine cu cât mai multe informații posibil ca o referință de intrare, nu este un algoritm conceput pentru a genera imagini la rezoluție foarte mare din cele foarte scăzute, deoarece detaliul este pierdut în proces.

Și ce zici de AMD, poate emula DLSS?

FidelityFX Super Rezoluție

Zvonurile despre super rezoluția din FidelityFX au fost în rețea de luni de zile, dar de la AMD nu ne-au dat încă niciun exemplu real despre funcționarea omologului său la DLSS. Ce face viața AMD atât de dificilă? Ei bine, faptul că nucleele tensorului sunt cruciale pentru DLSS și în AMD RX 600 nu există unități echivalente, ci mai degrabă faptul că SIMD over register sau SWAR este utilizat în ALU-urile unităților de calcul pentru a obține o performanță mai mare în formatele FP16 de mai puțină precizie. , dar o unitate SIMD nu este o unitate sistolică sau un dispozitiv de tensionare.

Încă de la început, vorbim despre un diferențial de 4 ori în favoarea NVIDIA, ceea ce înseamnă că atunci când generăm o soluție similară pleacă de la un dezavantaj considerabil de viteză, optimizări pentru calcularea matricilor în afară. Nu discutăm dacă NVIDIA este mai bun decât AMD în acest sens, dar faptul că AMD atunci când și-a proiectat RDNA 2 nu a acordat importanță unităților tensorale.

Unitatea de calcul CDNA

Se datorează dizabilității? Ei bine, nu, deoarece paradoxal AMD le-a adăugat la CDNA sub numele de Matrix Core. În acest moment este devreme să vorbim despre RDNA 3, dar să sperăm că AMD nu va mai face aceeași greșeală de a nu include una dintre aceste unități. Nu are sens să te descurci fără ele atunci când costul pe unitate de calcul sau SM este de numai 1 mm 2 .

Deci, sperăm că atunci când AMD își adaugă algoritmul din cauza lipsei unităților Tensor, acesta nu va atinge precizia și nici viteza NVIDIA, dar că AMD va prezenta o soluție mai simplă, cum ar fi un mod de performanță care dublează pixelii de pe ecran.