Memoria cache

Il processore per molti è un pezzo silicio che fa andare il computer, ma all'interno nasconde tante cose. In questo primo articolo affrontiamo il tema della frequenza e delle cache.

Avatar di Tom's Hardware

a cura di Tom's Hardware

Memoria cache

Aumentando la frequenza di un processore, la velocità della memoria non tiene il passo. Come può un processore funzionare più rapidamente rispetto alla memoria dalla quale si alimenta senza soffrire di un terribile collo di bottiglia? La risposta è stata introdurre la cache. In termini semplicistici, la memoria cache è un buffer di memoria ad alta velocità che immagazzina temporaneamente i dati di cui ha bisogno il processore, e gli permette di recuperare quel dato più rapidamente rispetto a quanto non sia possibile fare dalla memoria principale. C'è però una caratteristica aggiuntiva di una cache rispetto all'essere un semplice buffer, ed è l'intelligenza. Una cache è un buffer con un cervello.

Un buffer immagizzina il dato casuale, solitamente su basi first-in, first-out o first-in, last-out. Una cache, d'altra parte, mantiene il dato di cui il processore probabilmente ha più bisogno in anticipo rispetto a quando è effettivamente necessario. Questo permette al processore di continuare a lavorare sia alla massima velocità oppure molto vicino senza dover aspettare che il dato sia recuperato dalla lenta memoria di sistema. La memoria cache è solitamente fatta di static RAM (SRAM) integrata all'interno del die del processore, anche se nei sistemi più vecchi la cache era installata sotto forma di chip sulla motherboard.

I progetti dei recenti processori includono una cache di due livelli: Level 1 (L1) e Level 2 (L2). Le soluzioni di fascia media e alta hanno anche una cache Level 3 (L3). Queste cache e il loro funzionamento saranno al centro delle prossime pagine.

Cache Level 1

Tutti i processori moderni iniziando dalla famiglia 486 includono una cache L1 integrata e un controller. La dimensione della cache L1 integrata varia da processore a processore, partendo dagli 8 KB per l'originale 486DX e ai 128 KB o più degli ultimi processori.

Nota: i processori multi-core includono cache L1 separate per ogni core. Inoltre, la cache L1 è stata divisa in quantitativi uguali per istruzioni e dati.

Per capire l'importanza della cache bisogna conoscere le velocità relative dei processori e della memoria. Il problema è che la velocità del processore è solitamente espressa in MHz o GHz (milioni o miliardi di cicli al secondo), laddove la frequenza della memoria è espressa in nanosecondi - miliardesimi di un secondo per ciclo. La maggior parte dei più recenti tipi di memoria esprime la velocità sia in MHz che in megabyte al secondo (MB/s) di bandwidth (throughput).

Entrambe sono misure basate su tempo o frequenza. Noterete che un processore a 233 MHz equivale a un ciclo di 4,3 nanosecondi, il che significa che avete bisono di una memoria da 4 ns per tenere il passo di una CPU a 200 MHz. Inoltre, bisogna aggiungere che la motherboard di un sistema a 233 MHz solitamente opera a 66 MHz, che corrispondono a una velocità di 15 ns per ciclo e richiedono una memoria di 15 ns per tenere il passo. Infine, una memoria di sistema da 60 ns - comune su molti sistemi Pentium di diverso tempo fa - equivale a una frequenza di circa 16 MHz. Quindi un tipico sistema Pentium 233 ha un processore che opera a 233 MHz (4.3 ns per ciclo), una motherboard che lavora a 66 MHz (15 ns per ciclo), e una memoria principale che opera a 16 MHz (60 ns per ciclo). Questo potrebbe sembrare un esempio piuttosto datato, ma sarà utile per spiegare come funziona la memoria cache.

La cache L1 è integrata nel die del processore, quindi opera alla frequenza del processore stesso. Questa cache è fondamentalmente un'area di memoria veloce integrata nel processore che ospita codice e dati su cui si sta lavorando.

Usare la memoria cache riduce il collo di bottiglia dovuto all'accesso alla RAM, che è quasi sempre troppo lenta rispetto alla CPU; la differenza prestazionale tra velocità della memoria e della CPU è diventata molto ampia nei sistemi recenti. Usare la memoria cache evita al processore l'attesa di codice e dati dalla più lenta memoria principale, migliorando così le prestazioni. Senza la cache L1 un processore sarebbe frequentemente forzato ad attendere che la memoria di sistema riesca a mettersi in pari.

La cache è persino più importante nei processori moderni perché è spesso l'unica memoria nell'intero sistema che può davvero tenere il passo del chip. I processori più moderni sono "clock multiplied", il che significa che operano a una velocità che è davvero un multiplo della motherboard alla quale sono collegati. Gli unici tipi di memoria che pareggiano la velocità del processore sono le cache L1, L2 e L3 integrate nel processore.

Se il dato che il processore vuole è già nella cache L1, la CPU non deve aspettare. Se il dato non è nella cache, la CPU deve recuperarlo dalla cache L2 o L3 o dal bus di sistema - ovvero direttamente dalla memoria principale.