Nessuno sa esattamente come funziona la cache dinamica dell’M3, ma ho una teoria
Durante l'evento "Scary Fast" di Apple , una caratteristica ha attirato la mia attenzione a differenza di qualsiasi altra cosa: il caching dinamico. Probabilmente, come la maggior parte delle persone che guardavano la presentazione, ho avuto una reazione: "In che modo l'allocazione della memoria aumenta le prestazioni?"
Apple ha basato il debutto del nuovo chip M3 su una funzionalità "fondamentale" chiamata Dynamic Caching per la GPU. La spiegazione semplificata di Apple non chiarisce esattamente cosa fa la cache dinamica, tanto meno come migliora le prestazioni della GPU sull'M3.
Ho approfondito le tipiche architetture GPU e ho inviato alcune domande dirette per scoprire cos'è esattamente il caching dinamico. Ecco la mia migliore comprensione di quella che è senza dubbio la caratteristica tecnicamente più densa su cui Apple abbia mai schiaffeggiato un marchio.
Cos'è esattamente la memorizzazione nella cache dinamica?
Il caching dinamico è una funzionalità che consente ai chip M3 di utilizzare solo la quantità precisa di memoria necessaria per una particolare attività. Ecco come Apple lo descrive nel comunicato stampa ufficiale: “Il Dynamic Caching, a differenza delle GPU tradizionali, alloca l'utilizzo della memoria locale nell'hardware in tempo reale. Con la memorizzazione nella cache dinamica, per ciascuna attività viene utilizzata solo la quantità esatta di memoria necessaria. Si tratta di una novità assoluta nel settore, trasparente per gli sviluppatori e la pietra angolare della nuova architettura GPU. Aumenta notevolmente l’utilizzo medio della GPU, il che aumenta significativamente le prestazioni per le app e i giochi professionali più esigenti”.
Nel tipico stile Apple, molti aspetti tecnici vengono intenzionalmente oscurati per concentrarsi sul risultato. Ce n'è abbastanza per capire il succo senza rivelare la salsa segreta o confondere il pubblico con il gergo tecnico. Ma il punto generale sembra essere che il caching dinamico consente alla GPU di avere un'allocazione della memoria più efficiente. Abbastanza semplice, vero? Ebbene, non è ancora del tutto chiaro come l'allocazione della memoria "aumenti l'utilizzo medio" o "incrementi significativamente le prestazioni".
Anche solo per tentare di comprendere la memorizzazione nella cache dinamica, dobbiamo fare un passo indietro ed esaminare come funzionano le GPU. A differenza delle CPU, le GPU eccellono nella gestione di enormi carichi di lavoro in parallelo. Questi carichi di lavoro sono chiamati shader, che sono i programmi eseguiti dalla GPU. Per utilizzare in modo efficace una GPU, i programmi devono eseguire moltissimi shader contemporaneamente. Vuoi utilizzare il maggior numero possibile di core disponibili.
Ciò porta a un effetto che Nvidia chiama “coda”. Un carico di shader viene eseguito contemporaneamente, quindi si verifica un calo nell'utilizzo mentre più shader vengono inviati per essere eseguiti sui thread (o, più precisamente, sui blocchi di thread su una GPU). Questo effetto è stato rispecchiato nella presentazione di Apple quando ha spiegato il caching dinamico, poiché l'utilizzo della GPU ha avuto un picco prima di toccare il fondo.
Come gioca questo nella memoria? Le funzioni sulla tua GPU leggono le istruzioni dalla memoria e scrivono l'output della funzione nella memoria. Molte funzioni dovranno inoltre accedere alla memoria più volte durante l'esecuzione. A differenza di una CPU in cui la latenza della memoria tramite RAM e cache è estremamente importante a causa del basso livello di funzioni parallele, la latenza della memoria su una GPU è più facile da nascondere. Si tratta di processori altamente paralleli, quindi se alcune funzioni stanno scavando nella memoria, altre possono essere eseguite.
Funziona quando tutti gli shader sono facili da eseguire, ma i carichi di lavoro impegnativi avranno shader molto complessi. Quando si pianifica l'esecuzione di questi shader, verrà allocata la memoria necessaria per eseguirli, anche se non è necessaria. La GPU sta suddividendo molte delle sue risorse in un compito complesso, anche se tali risorse andranno sprecate. Sembra che il Dynamic Caching sia il tentativo di Apple di utilizzare in modo più efficace le risorse disponibili per la GPU, garantendo che queste attività complesse prendano solo ciò di cui hanno bisogno.
Ciò dovrebbe, in teoria, aumentare l'utilizzo medio della GPU consentendo l'esecuzione di più attività contemporaneamente, anziché avere un insieme più piccolo di attività impegnative che divorano tutte le risorse disponibili per la GPU. La spiegazione di Apple si concentra innanzitutto sulla memoria, facendo sembrare che l'allocazione della memoria da sola aumenti le prestazioni. Da quanto ho capito, sembra che un'allocazione efficiente consenta l'esecuzione di più shader contemporaneamente, il che porterebbe quindi a un aumento dell'utilizzo e delle prestazioni.
Usato vs. assegnato
Un aspetto importante che è fondamentale per comprendere il mio tentativo di spiegare il caching dinamico è il modo in cui gli shader si ramificano. I programmi eseguiti dalla tua GPU non sono sempre statici. Possono cambiare a seconda delle diverse condizioni, il che è particolarmente vero negli shader grandi e complessi come quelli richiesti per il ray tracing. Questi shader condizionali devono allocare risorse per lo scenario peggiore possibile, il che significa che alcune risorse potrebbero andare sprecate.
Ecco come Unity spiega gli shader di ramificazione dinamica nella sua documentazione: “Per qualsiasi tipo di ramificazione dinamica, la GPU deve allocare spazio di registro per il caso peggiore. Se un ramo è molto più costoso dell'altro, significa che la GPU spreca spazio di registro. Ciò può portare a un minor numero di invocazioni del programma shader in parallelo, il che riduce le prestazioni."
Sembra che Apple stia prendendo di mira questo tipo di ramificazione con il caching dinamico, consentendo alla GPU di utilizzare solo le risorse di cui ha bisogno anziché sprecarle. È possibile che la funzionalità abbia implicazioni altrove, ma non è chiaro dove e quando entra in azione la cache dinamica mentre una GPU sta eseguendo i suoi compiti.
Ancora una scatola nera
Naturalmente, devo notare che tutto questo è solo la mia comprensione, messa insieme da come funzionano tradizionalmente le GPU e da ciò che Apple ha dichiarato ufficialmente. Apple potrebbe rilasciare maggiori informazioni su come funziona alla fine, ma alla fine, le minuzie tecniche della cache dinamica non contano se Apple è effettivamente in grado di migliorare l'utilizzo e le prestazioni della GPU.
Alla fine, Dynamic Caching è un termine commerciabile per una funzionalità che rientra nell'architettura di una GPU. Cercare di capirlo senza essere qualcuno che progetta GPU porterà inevitabilmente a malintesi e spiegazioni riduttive. In teoria, Apple avrebbe potuto semplicemente annullare il marchio e lasciare che l’architettura parlasse da sola.
Se stavi cercando uno sguardo più approfondito su cosa potrebbe fare la cache dinamica nella GPU dell'M3, ora hai una possibile spiegazione. Ciò che è importante è il modo in cui si comporta il prodotto finale, e non dovremo aspettare molto prima che i primi dispositivi M3 di Apple siano disponibili al pubblico per poterlo scoprire tutti. Ma in base alle dichiarazioni sulle prestazioni e alle demo che abbiamo visto finora, sembra sicuramente promettente.