Ray Tracing pe plăcile grafice AMD Radeon RX 6000, cum funcționează?

Ray Tracing pe plăci grafice AMD Radeon RX 6000

Odată cu prezentarea RX 6000 din AMD it este clar că Trasarea razelor mai mult decât a fi un capriciu al NVIDIA a ajuns să rămână ca standard în cadrul hardware-ului grafic și este, de asemenea, clar că va fi modul standard de redare în viitor. Chiar și așa, deocamdată ne așteaptă un timp de tranziție în care ambele companii de vârf vor face propuneri în acest sens. Cum este Abordarea AMD prezentat cu RX 6000?

Când AMD și-a prezentat noul ADNr arhitectură grafică pe an în urmă, am luat unul de var și unul de nisip; Vestea bună a venit sub forma unei noi arhitecturi grafice după mai bine de cinci ani cu arhitectura GCN, dar vestea proastă a venit sub forma lipsei de hardware dedicat pentru ceea ce se numește Real Time Ray Tracing sau ray-tracing în timp real . . Dar acum câteva luni AMD a confirmat că arhitectura RDNA 2 va fi echipată cu acest tip de unități, astfel încât vor putea concura cu NVIDIA în acest sens, deși funcționarea sa este oarecum diferită de propunerea NVIDIA.

Unitatea de intersecție din RX 6000: cheia trasării razelor

RX 6000 Ray Tracing

Dacă ne uităm la conducta de urmărire a razelor, vom vedea că, indiferent de hardware, este întotdeauna același, este un proces care se repetă în mod repetat în care se calculează un număr enorm de ori de intersecție între rază și obiect. Acest calcul repetitiv este mai costisitor de realizat în unități specializate, mai degrabă decât în ​​umbrele în sine.

Deoarece unitățile AMD și NVIDIA sunt foarte asemănătoare, vă recomandăm să citiți tutorialul de pe acest site web intitulat „Ce sunt nucleele RT pentru Ray Tracing și cum funcționează?” unde soluția NVIDIA funcționează ca o completare a acestui tutorial, astfel încât să puteți avea o idee completă a diferențelor dintre cele două abordări.

Fiecare dintre unitățile de intersecție se găsește în cadrul fiecărei Unități de calcul, motivele pentru acestea sunt următoarele:

  • Ei trebuie să aibă acces la arborele BVH din memorie, deci trebuie să poată traversa sistemul cache GPU și, la fel ca unitățile SIMD care rulează programe shader, au nevoie de acces la întreaga ierarhie cache.
  • Trebuie să fie aproape de unitățile SIMD, deoarece acestea sunt cele care depind de rezultatul unității de intersecție pentru a ști ce tip de umbră aplică obiectelor din Ray Tracing.

AMD a optat pentru o altă soluție: să integreze unitatea de intersecție în unitatea de filtrare a texturii sau cel puțin să le permită accesul la cache-ul de date. Știm aceste informații din două surse diferite, prima este prezentarea în Hot Chips-urile din 2020 realizată de Microsoft despre SoC-ul său Xbox Seria X, deoarece are un sistem integrat GPU cu arhitectura RDNA 2, la fel ca plăcile grafice RX 6000. de la AMD.

Xbox RX 6000 PS5 CU

Să nu uităm că AMD în sine a confirmat că soluția pentru Ray Tracing în consolele de nouă generație cu GPU-urile lor și pe PC este exact aceeași.

RX 6000 Ray Tracing

A doua sursă este un brevet de la AMD în sine, unde se spune că unitatea de intersecție pentru Ray Tracing se află în unitatea de textură, iar acest lucru a dus la confuzia că unitatea de textură nu poate calcula intersecția razelor și texturarea în același timp. , dar în realitate texturarea se aplică doar într-o etapă a conductei grafice, care este texturarea scenei în care acționează umbrele de pixeli, deci în afara acelei etape aceste unități sunt rareori necesare.

Patente intersecție AMD

Unitatea de textură aplică pur și simplu filtrul biliniar, iar acest lucru înseamnă că ia 4 eșantioane vecine pe pixel și interpolează între ele. Fiecare GPU contemporan are de obicei 4 unități de textură însoțite de 16 unități de încărcare / stocare cu care accesează memoria cache a unității de calcul sau a SM.

Singura diferență cu soluția NVIDIA pentru calcularea intersecției în Ray Tracing este că în RX 6000 AMD accesul la memoria cache prin unitățile L / S este comutat între unitățile de filtrare a texturii și unitatea de intersecție.

De ce este unitatea de intersecție pentru Ray Tracing în CU?

GPU CPU Cachés

Unitățile de execuție din cadrul GPU funcționează de obicei cu instrucțiuni, în general de tip registru-registru, deci le lipsește un mecanism complex pentru a accesa ierarhia memoriei, iar acest lucru le permite să fie nuclee mai simple decât cele ale unui Procesor și așezați mai multe dintre ele în fiecare cip. Modul în care unitățile SIMD din Unitatea de calcul accesează ierarhia de memorie, alcătuită din cache-urile interne ale GPU și VRAM, este de a utiliza unitățile Load / Store pentru aceasta.

Aproape toate tipurile de programe shader tind să funcționeze pe registre, dar există un tip care este pixelii sau umbrele care necesită acces la ierarhia memoriei, deoarece funcționează cu cantitățile uriașe de date din texturi și, prin urmare, unitățile de textură au acces la ierarhia memoriei împreună cu unitățile SIMD.

În cazul specific al Ray Tracing, trebuie să stocăm poziția obiectelor în scenă într-o structură de date spațiale pe care o numim BVH. Această structură de date nu se încadrează în memoria internă a GPU-ului, deci unitatea de intersecție trebuie să utilizeze ierarhia memoriei, ceea ce înseamnă că aceste unități sunt conectate și la cache și la VRAM.

RX 6000 este mai orientat către cerințele DirectX 12 Ultimate

Logo DX12 Ultimate

Există încă un drum lung de parcurs pentru urmărirea razelor pentru a înlocui rasterizarea și există un drum lung de parcurs în cazul în care predicțiile cele mai optimiste vorbesc despre un minim de trei ani înainte. Motivul este că Ray Tracing necesită o putere de calcul foarte mare și există scene în care chiar și cel mai puternic GPU s-ar sufoca complet încercând să obțină performanțe adecvate.

În Ray Tracing tradițional, o rază sări de pe diferite obiecte până când rămâne fără energie sau pur și simplu părăsește scena; Pentru a înțelege energia, trebuie să avem în vedere că fiecare obiect are un coeficient de refracție care merge de la 0 la 1 și că este cantitatea de lumină pe care o absorb și o reflectă. Un obiect cu un coeficient de refracție 0 absoarbe complet toată lumina și nu o va emite, în timp ce un obiect cu un coeficient de refracție 1 va emite toată lumina care ajunge la ea.

De fiecare dată când o rază lovește un obiect creează noi raze indirecte și așa mai departe atâta timp cât coeficientul de refracție nu este suficient de scăzut. Evident, se poate înțelege că acesta este un număr mare de intersecții de calculat care depășesc capacitatea unităților de intersecție.

DX12 Ray Tracing

Pentru a evita acest lucru, în API-uri precum Microsoft DX12 Ultimate sau Vulkan, a fost adăugat un nou tip de program de shader: Ray Generation Shader, care constă în faptul că generarea de noi raze nu este automată, ci trebuie invocată în mod explicit. prin cod, ceea ce înseamnă că în primii ani vom vedea obiecte în jocuri care nu refractează razele pentru a reduce cantitatea de raze din scenă și pentru a atinge rate de cadre stabile.

Aceasta înseamnă că, atunci când o rază lovește un obiect și trebuie să-și continue traiectoria generând noi raze, atunci unitatea de intersecție trebuie să întrebe programul de umbră însărcinat cu coordonarea căii ce să facă.

Este soluția RX 6000 Ray Tracing mai bună decât RTX 3000?

AMD vs. NVIDIA

Ei bine, nu știm sigur, deoarece în acest moment atât o companie, cât și cealaltă au ales să ofere valori diferite, iar în cazul AMD, informațiile pe care le avem indirect prin intermediul Microsoft sunt că unitățile de intersecție pot efectua 4 raze. Ops pe ciclu, dar nu știm care sunt exact acele Ray Op, singurul lucru pe care îl știm și de la Microsoft este că unitățile de intersecție ale GPU-ului consolei sale sunt echivalente cu 25 TFLOPS, dar nu cunoaștem contextul acestui figura.

În cazul NVIDIA, ei susțin că RT Cores RTX 3080 au o putere combinată de 58 RT-TFLOPS, dar nu știm dacă aceasta este puterea de calcul a RT Cores de la sine sau este puterea de calcul pe care ar trebui să o aibă unitățile CUDA. suficient pentru a avea aceeași performanță.

NVIDIA Ampere 6

Oricum ar fi, realitatea este că nu putem avea încredere decât în ​​ceea ce ne spun ambele arhitecturi și în informațiile pe care le avem și se pare că unitățile RX 6000 sunt mai asemănătoare cu cele ale RTX 2000 cu 4 unități de calcul fulger- intersecție cutie și 1 unitate triunghi fulger, dar NVIDIA din RTX 3000 a dublat-o pe cea din urmă, astfel încât capacitatea la calcularea intersecțiilor este ceva mai mare.

Modul în care acest lucru se traduce în fiecare joc depinde de o serie de factori, dar în orice caz se pare că soluția AMD pentru Ray Tracing pe RX 6000 este suficient de bună și eficientă pentru a merge și la consolele de ultimă generație.