Shader Cache: definiție și modul în care afectează performanța jocurilor

De multe ori veți fi văzut printre fișierele temporare din care să le ștergeți ferestre din sau pentru a câștiga spațiu așa-numitul DirectX shader cache sau Shader Cache. Dacă v-ați întrebat vreodată ce este și de ce performanța jocurilor când îl ștergeți scade, nu trebuie decât să citiți acest articol.

GPU-urile sunt procesoare la fel ca procesoarele, dar sunt diferite prin aceea că paralelismul lor este orientat spre fire. De aceea se spune ca un procesor grafic este de tip TLP in timp ce unul central este de tip ILP. La aceasta trebuie să adăugăm că în timp ce firele de execuție din grafic nu sunt orientate către procese, ci către primitivele grafice sau date.

Shader Cache

Cu alte cuvinte, fiecare triunghi, pixel sau fragment are propriul program de shader pentru fiecare etapă a conductei 3D. Care este scris într-un limbaj de nivel înalt, de exemplu HLSL dacă vorbim despre DirectX sau GLSL dacă vorbim despre OpenGL sau Vulkan. Deși există și unele care sunt exclusive pentru anumite sisteme, cum ar fi PSGL-ul SONY PlayStation console. Ei bine, aceste programe trebuie să fie compilate și, prin urmare, trecute din codul sursă în binar.

Ce este Shader Cache?

Shader Cache CoD

Problema vine atunci când, spre deosebire de ceea ce se întâmplă cu procesoarele unde toate sunt x86, în cazul GPU-urilor, setul de registre și instrucțiuni nu este comun, nu între mărci, ci și între arhitecturi de aceeași marcă. Aceasta înseamnă că codul shader-urilor trebuie compilat în timp ce ne jucăm, provocând bâlbâială și probleme de performanță. Prin urmare, binarul generat este stocat într-un fișier care, atunci când jocul este încărcat din nou, va fi reîncărcat pe memoria video a plăcii grafice, pe care o cunoaștem ca shader cache sau shader cache.

Deci, dacă ne actualizăm placa grafică, acestea vor trebui generate din nou pentru fiecare dintre jocurile noastre, dacă o ștergem de pe hard disk sau de pe SSD de asemenea. Mai mult, acesta este unul dintre motivele pentru care nu este bine să judecăm o placă grafică atunci când jucăm pentru prima dată un joc. Mai ales dacă vrem să le măsurăm performanța obișnuită.

VRAM ocupă, de asemenea, spațiu

Cache Shader Panoul de control NVIDIA

GPU a plăcii grafice accesează doar sistemul RAM prin interfața PCI Express și folosind unitatea sa DMA, astfel cache-ul shader va fi încărcat împreună cu informațiile vizuale necesare compunerii scenei de la unitatea de stocare la RAM și de la RAM la memoria video. Deși cu DirectStorage este de așteptat ca hardware-ul grafic să poată accesa direct SSD-ul, reducând latența accesului și problema de a depinde de Procesor.

Multe jocuri sunt bine dezvoltate și shader cache-ul ocupă puțin spațiu, dar altele nu atât de mult și ajunge să ocupe o cantitate mare de memorie grafică. Ce înseamnă că dacă driverul are o limită asociată sau jocul în sine, constatăm brusc că noile compilații le înlocuiesc pe cele vechi și revin problemele inițiale de performanță.

În orice caz, trebuie să avem în vedere că, dacă jocul pe care îl jucăm necesită spațiu în memoria RAM video, acesta va da preferință redării cadrului curent. Deci, va căuta să recupereze temporar memoria cache a shaderului stocată în memoria sistemului. De asemenea, amintiți-vă că dump-urile către unitatea de stocare se fac continuu, deoarece odată ce shader-ul unei primitive grafice a fost generat, nu va fi necesar să o faceți din nou.

Tracingul de raze și cache-ul shader

În ray tracing, cea mai des întrebarea adresată GPU-ului este de tip boolean. Această rază intersectează această primitivă de grafic? Răspunsul nu este întotdeauna da și, prin urmare, există o condiție care se va întâmpla sau nu în funcție de circumstanțe. Prin urmare, atunci când executați acest shader pentru prima dată, va fi necesar să compilați și să generați shaderul cache pentru toate rezultatele posibile.

Shader Cache pe console

Console XSX, XSS, PS5

O consolă de jocuri video va avea mereu aceleași componente, de la primul model care iese din fabrică până la ultimul. Deși au trecut câțiva ani, specificațiile sale nu se vor schimba. De exemplu, astăzi puteți găsi modele mai vechi decât cea mai veche placă grafică. O modalitate de a profita de imuabilitatea hardware a acestuia este să utilizați așa-numitele shadere deja compilate în instalarea jocului. Acest lucru face inutilă generarea unui shader cache pentru fiecare joc, dar este și o sabie cu două tăișuri.

De exemplu, dacă doriți să faceți o consolă mai puternică și mai compatibilă cu versiunea inversă, aveți următoarele opțiuni:

  • Exportați ISA pe GPU-ul noului sistem, făcându-l să funcționeze ca un superset al celui vechi. Aceasta este ceea ce AMD a făcut în PlayStation 5 și Xbox Series cu arhitectură RDNA 2 pentru a rula fără probleme jocurile din generația anterioară concepute pentru GCN.
  • Integrați toate circuitele grafice ale sistemului anterior în noul sistem. Este ceva ce Nintendo a făcut pe consolele sale până la 3DS și SONY cu a doua PlayStation și unele modele ale celei de-a treia.

La nivel de emulator, ceea ce se face în multe cazuri este să luați shaders-urile deja compilate și să faceți procesul invers, generând un cod intermediar care poate genera un Shader Cache generat pentru a funcționa cu placa dvs. grafică. Cu toate acestea, nu este o știință exactă și este posibil să întâmpinați anumite erori grafice atunci când rulați jocurile.

Optimizări pentru producătorii de GPU

Organizație Lovelace Hopper

Ambele NVIDIA și AMD de obicei includ optimizări în cele mai recente drivere pentru cele mai tari-margine jocuri. Acestea nu includ doar setările optime pentru performanțe mai mari, ci și cache-ul shader deja optimizat pentru fiecare joc și specificații mai bune decât jocul de bază. Și este că ambii producători sunt interesați ca placa lor grafică cea mai avansată să aibă performanța maximă posibilă în cel mai puternic joc dintre toate cele existente în prezent.

Așa că acestea lasă bani diferitelor studiouri de dezvoltare, care optimizează programele shader pentru anumite arhitecturi grafice și generează un shader cache care funcționează mai bine decât cel care vine cu jocul de bază. Acest lucru se face pentru a încuraja achiziția de noi modele și pentru a crea o uzură a programului, ceea ce este necesar pentru a exista un flux de consum care să susțină industria. De aceea, multe jocuri fără modificări vizuale ale versiunilor anterioare ajung să aibă performanțe mai slabe.