I processori hanno fatto segnare una vorticosa evoluzione negli ultimi anni. Sebbene i produttori, complici le evidenti problematiche fisiche dovute all’estrema miniaturizzazione verso la quale ci si è spinti, si siano progressivamente allontanati dal postulato della ben nota legge di Moore, il valore IPC (istruzioni per ciclo di clock) è uno dei “campi di battaglia” sui quali si sono registrati i passi in avanti più evidenti. Tanto che l’ormai ex-Intel Jim Keller (La legge di Moore non è morta. Jim Keller: balzo in avanti in termini di IPC per le CPU Intel) fece proprio riferimento alla possibilità di “resuscitare” la legge di Moore proprio facendo le considerazioni legate alle performance dei processori in ragione dei valori IPC.
Con l’utilizzo di architetture sempre più “non planari” per la realizzazione dei nuovi chip, i principali produttori stanno guardando a una miniaturizzazione sempre più portata al limite. Con la tecnologia GAAFET, ad esempio, TSMC conta di portare i suoi processi litografici oltre il muro dei 2 nm, qualcosa di impensabile fino a qualche tempo fa: TSMC, processo litografico ridotto a 2 nm con la tecnologia GAAFET.
Quando si parla di processori non sono soltanto frequenze di clock, IPC, dimensioni e numero di transistor che contano. La cache del processore è uno degli attributi più importanti.
Semplificando di molto, la cache del processore è una tipologia di memoria molto veloce integrata direttamente nella CPU e ad essa vicinissima, diversamente ad esempio a quanto accade con la RAM.
Paragonata con i moduli RAM (DRAM, Dynamic RAM) che tutti conosciamo, la cache è un esempio di SRAM (Static RAM): non necessita di essere costantemente aggiornata.
Ogni programma è formato da un insieme di istruzioni (vedere Codice binario, bit e byte: cosa c’è da sapere) che durante l’esecuzione fluiscono dallo storage primario alla CPU. I dati vengono dapprima caricati nella memoria RAM quindi inviati alla CPU che si occupa di elaborare un numero gigantesco di istruzioni ogni secondo.
Affinché non si ingenerino colli di bottiglia, la CPU deve poter accedere velocemente alle informazioni conservate in memoria. Ed è proprio qui che la cache entra in gioco.
Il controller di memoria si occupa del trasferimento dei dati utili tra RAM e cache. A seconda della CPU installata, tale controller può risiedere nel cosiddetto North Bridge della scheda madre oppure all’interno della CPU stessa.
I dati fluiranno quindi tra CPU e vari livelli di cache secondo una gerarchia ben definita.
La cache L1 è la memoria più veloce presente sul sistema. In termini di priorità di accesso, la cache L1 conserva i dati dei quali la CPU ha verosimilmente bisogno per completare una certa attività.
Questo livello di cache ha dimensioni tipicamente fino a 256 KB anche se CPU particolarmente potenti possono spingersi fino a 1 MB. Certi sistemi server (ad esempio basati su processori Intel Xeon) possono arrivare a 2 MB di cache L1.
La cache L1 è solitamente divisa in due parti: instruction cache e data cache. La prima gestisce le informazioni sulle operazioni che la CPU deve eseguire mentre la seconda i dati utilizzati per elaborare tali operazioni.
Fonte: Intel
La cache L2 è più lenta rispetto alla L1 ma è di dimensioni più grandi, tra 256 KB e 8 MB anche se le CPU più recenti si spingono ancora più avanti.
Nelle CPU più recenti la cache L1 e L2 è presenti sui singoli core con ciascuno di essi che è dotato della sua propria cache.
La cache L3 è quella di dimensioni più generose ma anche la più lenta delle tre: le sue dimensioni vanno tipicamente da 4 a 50 MB e sulle moderne CPU la cache di livello 3 consta di uno spazio dedicato sul die occupando una buona porzione sullo stesso.
Il flusso dei dati procede dalla RAM alla cache L3 per poi passare a L2 e L1. Quando la CPU è alla ricerca dei dati necessari per eseguire un’operazione, dapprima viene controllato il contenuto della cache L1. Se il dato cercato viene effettivamente trovato si ha un cache hit (condizione più favorevole): l’esecuzione prosegue velocemente senza passare agli altri livelli ed eventualmente alla RAM.
Diversamente la CPU controlla la presenza del dato nella cache L2 e L3. Nel caso in cui quanto cercato non venisse trovato, si verifica un cache miss costringendo all’utilizzo della RAM.
Il tempo richiesto per accedere ai dati contenuti in memoria è chiamato latenza.
La cache L1 offre il valore più basso, ovviamente, in termini di latenza che cresce significativamente allorquando si verificasse un cache miss. Ciò perché il processore è costretto a recuperare il dato che serve dalla memoria principale del sistema.
In caso di cache miss riveste una grandissima importanza la tipologia di RAM utilizzata (vedere Memoria RAM, come sceglierla e quando estenderla) e l’eventuale utilizzo di uno storage primario veloce come può essere un’unità SSD PCIe NVMe allorquando il dato non fosse neppure in RAM: Come verificare se il PC è compatibile PCIe NVMe.
In passato i processori usavano cache L2 e L3 al di fuori della CPU, una scelta di design che aveva evidenti effetti negativi in termini di latenza. I progressi nella litografia hanno reso possibile l’inserimento di miliardi di transistor in uno spazio più piccolo rispetto a prima. Di conseguenza è stato lasciato più spazio per la cache che permette di avere i vari livelli molto più vicini al core rispetto a quanto accadeva in precedenza.
Il design della cache è sempre in evoluzione, soprattutto perché la memoria diventa più economica, più veloce e più densa.
Si sta infatti facendo molto per ridurre i colli di bottiglia i sistemi di oggi continuano comunque ad avere: la riduzione della latenza della memoria è uno degli aspetti più importanti sui quali ci si sta concentrando. Intel ha proposto, da parte sua, la tecnologia Optane che può essere usata come una sorta di cache ibrida esterna alla CPU: Che cos’è Intel Optane e come funziona: inizia l’era post SSD.