Dove si trovano esattamente le cache L1, L2 e L3 nel computer?

Iniziamo con questo:

Penso che gli ultimi processori SMP utilizzino cache di livello 3, quindi voglio capire la gerarchia del livello di cache e la loro architettura .

Per comprendere le cache è necessario conoscere alcune cose:

Una CPU ha registri. I valori in che possono essere utilizzati direttamente. Niente è più veloce.

Tuttavia non possiamo aggiungere registri infiniti a un chip. Queste cose occupano spazio. Se facciamo il chip più grande diventa più costoso. Parte di questo è perché abbiamo bisogno di un chip più grande (più silicio), ma anche perché il numero di chip con problemi aumenta.

(Immagine un wafer immaginario con 500 cm2. Ho tagliato 10 chip da esso, ogni chip 50cm2 di dimensioni. Uno di loro è rotto. Lo scarto e lo lascio 9 chip funzionanti. Ora prendete lo stesso wafer e ho tagliato un chip 100 da esso, ogni dieci volte più piccolo. Uno di loro se rotto. Scarto il chip rotto e mi rimane 99 chip di lavoro. Questa è una frazione della perdita che altrimenti avrei avuto. Per compensare i chip più grandi avrei bisogno di chiedere prezzi più elevati. Più che il prezzo per il silicio extra)

Questo è uno dei motivi per cui vogliamo chip piccoli e convenienti.

Tuttavia più la cache è vicina alla CPU, più velocemente è possibile accedervi.

Anche questo è facile da spiegare; I segnali elettrici viaggiano vicino alla velocità della luce. Che è veloce, ma ancora una velocità finita. La CPU moderna funziona con gli orologi GHz. Anche questo è veloce. Se prendo una CPU a 4 GHz, un segnale elettrico può viaggiare su 7.5 cm per orologio. Cioè 7,5 cm in linea retta. (I chip sono tutt’altro che connessioni diritte). In pratica avrete bisogno di molto meno di quei 7.5 cm in quanto ciò non consente alcun tempo per i chip di presentare i dati richiesti e per il segnale di viaggiare indietro.

Linea di fondo, vogliamo che la cache fisicamente il più vicino possibile. Il che significa grandi chip.

Questi due devono essere bilanciati (prestazioni rispetto ai costi).

Dove si trovano esattamente le cache L1, L2 e L3 in un computer?

Supponendo che lo stile del PC sia solo hardware (i mainframe sono molto diversi, anche nelle prestazioni rispetto a saldo dei costi);

IBM Quello originale a 4,77 Mhz: nessuna cache. CPU accede direttamente alla memoria. Una lettura dalla memoria seguirebbe questo schema:

  • La CPU inserisce l’indirizzo che desidera leggere sul bus di memoria e afferma il flag di lettura
  • La memoria inserisce i dati sul bus dati.
  • La CPU copia i dati dal bus dati ai suoi registri interni.

80286 (1982)
Ancora nessuna cache. L’accesso alla memoria non era un grosso problema per le versioni a velocità inferiore (6 MHz), ma il modello più veloce correva fino a 20 MHz e spesso doveva ritardare l’accesso alla memoria.

Ottieni quindi uno scenario come questo:

  • La CPU inserisce l’indirizzo che desidera leggere sul bus di memoria e afferma il flag di lettura
  • La memoria inizia a inserire i dati sul bus dati. La CPU attende.
  • La memoria ha finito di ottenere i dati ed è ora stabile sul bus dati.
  • La CPU copia i dati dal bus dati ai suoi registri interni.

Questo è un passo in più speso in attesa della memoria. Su un sistema moderno che può essere facilmente 12 passi, motivo per cui abbiamo cache.

80386: (1985)
Le CPU diventano più veloci. Sia per orologio, sia eseguendo a velocità di clock più elevate.
La RAM diventa più veloce, ma non tanto più veloce delle CPU.
Di conseguenza sono necessari più stati di attesa.Alcune schede madri aggirano questo aggiungendo cache (che sarebbe la cache di 1 ° livello) sulla scheda madre.

Una lettura dalla memoria inizia ora con un controllo se i dati sono già nella cache. Se lo è, viene letto dalla cache molto più veloce. Se non la stessa procedura descritta con il 80286

80486: (1989)
Questa è la prima CPU di questa generazione che ha una cache sulla CPU.
Si tratta di una cache unificata 8KB che significa che viene utilizzato per i dati e le istruzioni.

In questo periodo diventa comune mettere 256KB di memoria statica veloce sulla scheda madre come cache di 2 ° livello. Quindi cache di 1 ° livello sulla CPU, cache di 2 ° livello sulla scheda madre.

486 scheda madre con posizione CPU e cache di 2 ° livello contrassegnato

80586 (1993)
Il 586 o Pentium-1 utilizza una cache di livello 1 diviso. 8 KB ciascuno per dati e istruzioni. La cache è stata divisa in modo che le cache di dati e istruzioni potessero essere sintonizzate individualmente per il loro uso specifico. Hai ancora una cache 1st piccola ma molto veloce vicino alla CPU e una cache 2nd più grande ma più lenta sulla scheda madre. (Ad una distanza fisica maggiore).

Nella stessa area pentium 1 Intel ha prodotto il Pentium Pro (‘80686’). A seconda del modello questo chip aveva una cache di bordo da 256Kb, 512KB o 1MB. Era anche molto più costoso, il che è facile da spiegare con la seguente immagine.

Immagine di una CPU pentium Pro, modello di cache da 256KB

Si noti che metà dello spazio nel chip viene utilizzato dalla cache. E questo è per il modello 256KB. Più cache era tecnicamente possibile e alcuni modelli erano prodotti con cache da 512KB e 1MB. Il prezzo di mercato per questi era alto.

Si noti inoltre che questo chip contiene due stampi. Uno con la CPU effettiva e la cache 1st e un secondo die con 256KB 2nd cache.

Pentium-2

Il pentium 2 è un pentium pro core. Per motivi di economia non c’è 2nd cache nella CPU. Invece ciò che viene venduto a una CPU noi un PCB con chip separati per CPU (e 1 ° cache) e 2 ° cache.

Man mano che la tecnologia progredisce e iniziamo a creare chip con componenti più piccoli, è finanziariamente possibile rimettere la 2nd cache nel die effettivo della CPU. Tuttavia c’è ancora una divisione. Molto veloce 1st cache rannicchiata fino alla CPU. Con una cache 1st per core della CPU e una cache 2nd più grande ma meno veloce accanto al core.

 Immagine di un pentium 2 'CPU' (sia con e senza coperchio)

Pentium-3
Pentium-4
Questo non cambia per il pentium-3 o il pentium-4.

In questo periodo abbiamo raggiunto un limite pratico su quanto velocemente possiamo clock CPU. Un 8086 o un 80286 non hanno bisogno di raffreddamento. Un pentium-4 in esecuzione a 3.0 GHz produce così tanto calore e utilizza così tanta potenza che diventa più pratico mettere due CPU separate sulla scheda madre piuttosto che una veloce.

(Due CPU 2.0 GHz userebbero meno energia di una singola CPU identica a 3.0 GHz, ma potrebbero fare più lavoro).

Questo potrebbe essere risolto in tre modi:

  1. Rendere le CPU più efficienti, in modo da fare più lavoro alla stessa velocità.
  2. Usa più CPU
  3. Usa più CPU nello stesso ‘chip’.

1) È un processo in corso. Non è nuovo e non si fermerà.

2) È stato fatto in anticipo (ad esempio con le schede madri dual Pentium-1 e il chipset NX). Fino ad ora che era l’unica opzione per la costruzione di un PC più veloce.

3) Richiede CPU in cui più “core cpu” sono costruiti in un singolo chip. (Abbiamo poi chiamato quella CPU una CPU dual core per aumentare la confusione. Grazie marketing:))

In questi giorni ci riferiamo solo alla CPU come un ‘core’ per evitare confusione.

Ora ottieni chip come il pentium-D (duo), che è fondamentalmente due core pentium-4 sullo stesso chip.

 Precoce pentium-D (2 P4 core)

Ricorda l’immagine del vecchio pentium-Pro? Con l’enorme dimensione della cache?
Vedi le due grandi aree in questa immagine?

Si scopre che possiamo condividere quella 2a cache tra entrambi i core della CPU. La velocità diminuirebbe leggermente, ma una cache 2nd condivisa da 512KiB è spesso più veloce dell’aggiunta di due cache di 2nd livello indipendenti della metà delle dimensioni.

Questo è importante per la tua domanda.

Significa che se leggi qualcosa da un core della CPU e in seguito provi a leggerlo da un altro core che condivide la stessa cache, otterrai un hit nella cache. Non sarà necessario accedere alla memoria.

Poiché i programmi migrano tra CPU, a seconda del carico, del numero di core e dello scheduler, è possibile ottenere prestazioni aggiuntive bloccando i programmi che utilizzano gli stessi dati sulla stessa CPU (hit della cache su L1 e inferiore) o sulle stesse CPU che condividono la cache L2 (e quindi ottengono miss su L1, ma hit su L2

Quindi nei modelli successivi vedrai cache di livello 2 condivise.

 Immagine di una CPU Core2 aperta

Se stai programmando per le CPU moderne, hai due opzioni:

  1. Non preoccuparti. Il sistema operativo dovrebbe essere in grado di pianificare le cose. Lo scheduler ha un grande impatto sulle prestazioni del computer e le persone hanno speso un sacco di sforzi per ottimizzare questo. A meno che tu non faccia qualcosa di strano o stia ottimizzando per un modello specifico di PC, stai meglio con lo scheduler predefinito.
  2. Se hai bisogno di prestazioni fino all’ultimo bit e l’hardware più veloce non è un’opzione, prova a lasciare i gradini che accedono agli stessi dati sullo stesso core o su un core con accesso a una cache condivisa.

Mi rendo conto che non ho ancora menzionato la cache L3, ma non sono diversi. Una cache L3 funziona allo stesso modo. Più grande di L2, più lento di L2. Ed è spesso condiviso tra core. Se è presente è molto più grande della cache L2 (altrimenti averlo non avrebbe senso) ed è spesso condiviso con tutti i core.

MODERNOCPUWITHL3.png

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.