Shader Cache: definizione e come influisce sulle prestazioni di gioco

Molte volte avrai visto tra i file temporanei da cui eliminare Windows o per guadagnare spazio la cosiddetta Shader Cache di DirectX o Shader Cache. Se ti sei mai chiesto di cosa si tratta e perché le prestazioni dei giochi quando lo elimini precipitano, devi solo leggere questo articolo.

Le GPU sono processori proprio come le CPU, ma sono diverse in quanto il loro parallelismo è orientato al thread. Per questo si dice che un processore grafico è di tipo TLP mentre uno centrale è di tipo ILP. A questo bisogna aggiungere che mentre i thread di esecuzione nel grafico non sono orientati ai processi ma alle primitive grafiche o ai dati.

Shader cache

In altre parole, ogni triangolo, pixel o frammento ha il proprio programma shader per ogni fase della pipeline 3D. Che è scritto in un linguaggio di alto livello, ad esempio HLSL se parliamo di DirectX o GLSL se parliamo di OpenGL o Vulkan. Sebbene ce ne siano anche alcuni esclusivi di determinati sistemi, come il PSGL di SONY PlayStation console. Bene, questi programmi devono essere compilati e, quindi, passati dal codice sorgente al binario.

Cos'è Shader Cache?

Shader Cache COD

Il problema arriva quando, contrariamente a quanto accade con le CPU dove sono tutte x86, nel caso delle GPU il set di registri e istruzioni non è comune, non tra brand, ma anche tra architetture della stessa marca. Ciò significa che il codice degli shader deve essere compilato mentre giochiamo, causando problemi di balbuzie e prestazioni. Pertanto, il binario generato viene archiviato in un file che, al nuovo caricamento del gioco, verrà ricaricato nella memoria video della scheda grafica, che conosciamo come shader cache o shader cache.

Quindi, se aggiorniamo la nostra scheda grafica, queste dovranno essere generate nuovamente per ciascuno dei nostri giochi, se la cancelliamo dal disco rigido o dal SSD anche. Inoltre, questo è uno dei motivi per cui non è bene giudicare una scheda grafica quando giochiamo per la prima volta. Soprattutto se vogliamo misurare le loro prestazioni regolari.

Anche la VRAM occupa spazio

Pannello di controllo di Cache Shader NVIDIA

I GPU della scheda grafica accede solo al sistema RAM tramite l'interfaccia PCI Express e utilizzando la sua unità DMA, quindi la cache dello shader verrà caricata insieme alle informazioni visive necessarie per comporre la scena dall'unità di archiviazione alla RAM e dalla RAM alla memoria video. Anche se con DirectStorage è previsto che l'hardware grafico possa accedere direttamente all'SSD, riducendo la latenza di accesso e il problema di dover dipendere dal CPU.

Molti giochi sono ben sviluppati e la cache dello shader occupa poco spazio, ma altri non tanto e finisce per occupare una grande quantità di memoria grafica. Ciò significa che se il driver ha un limite associato o il gioco stesso, scopriamo improvvisamente che le nuove compilation sostituiscono quelle vecchie e si ripresentano i problemi di prestazioni iniziali.

In ogni caso, dobbiamo tenere presente che se il gioco a cui stiamo giocando richiede spazio nella RAM video, si darà la preferenza al rendering del frame corrente. Quindi cercherà di recuperare temporaneamente la cache dello shader memorizzata nella memoria di sistema. Ricordiamo inoltre che i dump sull'unità di archiviazione vengono effettuati continuamente, poiché una volta generato lo shader di una primitiva grafica, non sarà più necessario rifarlo.

Ray-tracing e la cache dello shader

Nel ray tracing la domanda più frequente della GPU è di tipo booleano. Questo raggio interseca questa primitiva del grafico? La risposta non è sempre sì e, quindi, c'è una condizione che si verificherà o meno a seconda delle circostanze. Pertanto, quando si esegue questo shader per la prima volta, sarà necessario compilare e generare lo shader della cache per tutti i possibili risultati.

Shader Cache su console

Console XSX, XSS, PS5

Una console per videogiochi avrà sempre gli stessi componenti, dal primo modello che lascia la fabbrica all'ultimo. Nonostante siano trascorsi diversi anni, le sue specifiche non cambieranno. Ad esempio, oggi puoi trovare modelli più vecchi rispetto alla scheda grafica più vecchia. Un modo per sfruttare la sua immutabilità hardware è utilizzare i cosiddetti shader già compilati nell'installazione del gioco. Ciò rende superfluo generare una cache dello shader per ogni gioco, ma è anche un'arma a doppio taglio.

Ad esempio, se vuoi creare una console più potente e compatibile con le versioni precedenti, hai le seguenti opzioni:

  • Esporta l'ISA sulla GPU del nuovo sistema, facendolo funzionare come un superset di quello vecchio. Questo è ciò che AMD ha fatto su PlayStation 5 e Xbox Series con architettura RDNA 2 per eseguire senza problemi i giochi di generazione precedente progettati per GCN.
  • Integrare tutta la circuiteria grafica del sistema precedente nel nuovo sistema. Questo è qualcosa che Nintendo ha fatto sulle sue console fino a 3DS e SONY con la sua seconda PlayStation e alcuni modelli della terza.

A livello di emulatore, ciò che si fa in molti casi è prendere gli shader già compilati ed eseguire il processo inverso, generando un codice intermedio in grado di generare una Shader Cache generata per funzionare con la propria scheda grafica. Tuttavia, non è una scienza esatta e potresti riscontrare alcuni problemi grafici durante l'esecuzione dei giochi.

Ottimizzazioni per i produttori di GPU

Lovelace Hopper Organizzazione

Entrambi NVIDIA ed AMD di solito includono ottimizzazioni nei driver più recenti per il massimobordo Giochi. Questi non solo includono le impostazioni ottimali per prestazioni più elevate, ma anche la cache dello shader già ottimizzata per ogni gioco e specifiche migliori rispetto al gioco base. Ed è che entrambi i produttori sono interessati alla loro scheda grafica più avanzata con le massime prestazioni possibili nel gioco più potente di tutto ciò che esiste oggi.

Quindi questi lasciano i soldi ai diversi studi di sviluppo, che ottimizzano i programmi shader per determinate architetture grafiche e generano una cache shader che funziona meglio di quella fornita con il gioco base. Questo viene fatto per incoraggiare l'acquisto di nuovi modelli e creare un programma di obsolescenza, necessario affinché ci sia un flusso di consumi che sostenga l'industria. Questo è il motivo per cui molti giochi con pochissime modifiche visive rispetto alle puntate precedenti finiscono per avere prestazioni peggiori.