Shader Cache: definisjon og hvordan den påvirker spillytelsen

Mange ganger vil du ha sett blant de midlertidige filene du kan slette fra Windows eller for å få plass den såkalte DirectX shader cache eller Shader Cache. Hvis du noen gang har lurt på hva det er og hvorfor ytelsen til spillene synker når du sletter dem, må du bare lese denne artikkelen.

GPUer er prosessorer akkurat som CPUer, men de er forskjellige ved at parallelliteten deres er trådorientert. Det er derfor det sies at en grafisk prosessor er av TLP-typen mens en sentral er av ILP-typen. Til dette må vi legge til at mens utførelsestrådene i grafen ikke er orientert mot prosessene, men til de grafiske primitivene eller dataene.

shader cache

Med andre ord har hver trekant, piksel eller fragment sitt eget skyggeprogram for hvert trinn i 3D-rørledningen. Som er skrevet på et høyt nivå språk, for eksempel HLSL hvis vi snakker om DirectX eller GLSL hvis vi snakker om OpenGL eller Vulkan. Selv om det også er noen som er eksklusive for visse systemer, for eksempel PSGL til SONY's PlayStation konsoller. Vel, disse programmene må kompileres og overføres derfor fra kildekode til binær.

Hva er Shader Cache?

Shader Cache CoD

Problemet kommer når, i motsetning til hva som skjer med CPUer der de alle er x86, i tilfellet med GPUer, er settet med registre og instruksjoner ikke vanlig, ikke mellom merker, men også mellom arkitekturer av samme merke. Dette betyr at koden til shaderne må kompileres mens vi spiller, noe som forårsaker stamming og ytelsesproblemer. Derfor blir den genererte binære filen lagret i en fil som, når spillet lastes inn igjen, vil bli lastet inn på nytt på videominnet til grafikkortet, som vi kjenner som shader-cache eller shader-cache.

Så hvis vi oppdaterer grafikkortet vårt, må disse genereres for hvert av spillene våre på nytt, hvis vi sletter det fra harddisken eller SSD også. Dessuten er dette en av grunnene til at det ikke er bra å bedømme et grafikkort når vi spiller et spill for første gang. Spesielt hvis vi ønsker å måle deres vanlige ytelse.

VRAM tar også plass

Cache Shader kontrollpanel NVIDIA

De GPU av grafikkortet ditt har kun tilgang til systemet RAM gjennom PCI Express-grensesnittet og ved å bruke dens DMA-enhet, slik at shader-cachen lastes sammen med den visuelle informasjonen som er nødvendig for å komponere scenen fra lagringsenheten til RAM og fra RAM til videominne. Selv om det med DirectStorage forventes at grafikkmaskinvaren vil kunne få direkte tilgang til SSD-en, reduserer tilgangsforsinkelsen og problemet med å måtte være avhengig av prosessor.

Mange spill er godt utviklet og shader-cachen tar liten plass, men andre ikke så mye og det ender opp med å ta opp en stor mengde grafikkminne. Hva betyr at hvis driveren har en tilhørende grense eller selve spillet, finner vi plutselig ut at de nye kompilasjonene erstatter de gamle og de første ytelsesproblemene kommer tilbake.

I alle fall må vi huske på at hvis spillet vi spiller krever plass i video-RAM, vil det gi preferanse til gjengivelsen av gjeldende ramme. Så den vil søke å hente shader-cachen som er lagret i systemminnet midlertidig. Husk også at dumpene til lagringsenheten gjøres kontinuerlig, siden når skyggeleggingen til en grafisk primitiv er generert, vil det ikke være nødvendig å gjøre det igjen.

Strålesporing og shader-cachen

I ray tracing er det oftest stilte spørsmålet til GPUen av den boolske typen. Skjærer denne strålen denne primitive grafen? Svaret er ikke alltid ja, og derfor er det en tilstand som vil skje eller ikke, avhengig av omstendighetene. Derfor, når du kjører denne shaderen for første gang, vil det være nødvendig å kompilere og generere cache shader for alle mulige resultater.

Shader Cache på konsoller

XSX, XSS, PS5-konsoller

En videospillkonsoll vil alltid ha de samme komponentene, fra den første modellen som forlater fabrikken til den siste. Selv om det har gått flere år, vil ikke spesifikasjonene endres. For eksempel kan du i dag finne eldre modeller enn det eldste grafikkortet. En måte å dra nytte av maskinvarens uforanderlighet er å bruke såkalte shaders som allerede er kompilert inn i spillinstallasjonen. Dette gjør det unødvendig å generere en shader-cache for hvert spill, men det er også et tveegget sverd.

Hvis du for eksempel vil lage en kraftigere og bakoverkompatibel konsoll, har du følgende alternativer:

  • Eksporter ISA til det nye systemets GPU, slik at det fungerer som et supersett av det gamle. Dette er hva AMD har gjort i PlayStation 5 og Xbox Series med RDNA 2-arkitektur for å jevnt kjøre forrige generasjons spill designet for GCN.
  • Integrer alle de grafiske kretsene til det forrige systemet i det nye systemet. Dette er noe Nintendo gjorde på sine konsoller opp til 3DS og SONY med sin andre PlayStation og noen modeller av den tredje.

På emulatornivå er det som gjøres i mange tilfeller å ta de allerede kompilerte shadere og gjøre den omvendte prosessen, og generere en mellomkode som kan generere en Shader Cache generert for å fungere med grafikkortet ditt. Det er imidlertid ikke en eksakt vitenskap, og du kan støte på visse grafiske feil når du kjører spillene.

Optimaliseringer for GPU-produsenter

Lovelace Hopper Organización

Begge NVIDIA og AMD inkluderer vanligvis optimaliseringer i de nyeste driverne for mest mulig kutte-kant spill. Disse inkluderer ikke bare de optimale innstillingene for høyere ytelse, men også den allerede optimaliserte shader-cachen for hvert spill og bedre spesifikasjoner enn basisspillet. Og det er at begge produsentene er interessert i at deres mest avanserte grafikkort skal ha maksimal ytelse i det kraftigste spillet av alt som finnes i dag.

Så disse overlater penger til de forskjellige utviklingsstudioene, som optimerer shader-programmene for visse grafikkarkitekturer og genererer en shader-cache som fungerer bedre enn den som følger med basisspillet. Dette gjøres for å oppmuntre til kjøp av nye modeller og skape en programforeldelse, som er nødvendig for at det skal være en strøm av forbruk som opprettholder bransjen. Det er grunnen til at mange spill med knapt noen visuelle endringer i tidligere avdrag ender opp med dårligere ytelse.