Perché la memoria cache della CPU è così veloce?


58

Cosa rende la memoria cache della CPU molto più veloce della memoria principale? Vedo alcuni vantaggi in un sistema cache a più livelli. Ha senso che una cache più piccola sia più veloce da cercare. Ma deve esserci di più.


2
Cosa intendi con memoria principale ?
marcocs

1
@marcocs modificato per chiarezza. Mi riferisco alla memoria cache della CPU e alla memoria di sistema principale, vale a dire i dimmer rimovibili sulla maggior parte delle schede madri.
ConditionRacer


2
@ratchetfreak Uh ... OP sta chiaramente chiedendo una causa prossima, non una causa finale.
Kyle Strand

1
Wow, non pensavo che avrei mai usato la mia laurea in ingegneria informatica. La risposta accettata non è in realtà una risposta. È perché la cache della CPU funziona a una frequenza di clock molto più elevata (la frequenza di clock della CPU, circa 4 GHz), mentre la memoria principale funziona alla frequenza di clock del bus (circa 1600 MHz). Non solo, ma la cache della CPU può leggere in 4 cicli di clock, ma la RAM di sistema potrebbe richiedere 100 cicli di clock di sistema. Inoltre, la RAM di sistema è in conflitto con altre periferiche come il disco o la rete, mentre la cache della CPU è dedicata. Più lungo è il filo, più lenta è la frequenza di clock a cui può operare. tinyurl.com/zkdsstd
Chloe,

Risposte:


115

Nel caso di una cache della CPU, è più veloce perché si trova sullo stesso die del processore. In altre parole, i dati richiesti non devono essere trasferiti al processore; è già lì.

Nel caso della cache su un disco rigido, è più veloce perché è nella memoria a stato solido e non è ancora sui piatti rotanti.

Nel caso della cache su un sito Web, è più veloce perché i dati sono già stati recuperati dal database (che, in alcuni casi, potrebbe trovarsi in qualsiasi parte del mondo).

Quindi si tratta principalmente di località . La cache elimina la fase di trasferimento dei dati .

La località è un modo stravagante di dire dati "vicini", nel tempo o nello spazio. La memorizzazione nella cache con una memoria più piccola, più veloce (ma generalmente più costosa) funziona perché in genere una quantità relativamente piccola dei dati complessivi sono i dati a cui si accede più spesso.

Ulteriore lettura della
cache (informatica) su Wikipedia


29
Penso che questa sia una buona risposta. Tuttavia, potrebbe valere la pena aggiungere che esiste anche una gerarchia dei costi da memorizzare nella cache: l'archiviazione di rete è più economica di un disco rigido locale, che è più economico della RAM, che è molto più economico della cache della CPU. Se non fosse per questo, realizzeremmo semplicemente CPU con 120 GB di memoria su chip e avremmo finito.
Charles E. Grant,

1
@ConditionRacer: stesse ragioni. L1 è più veloce, ma più costoso, quindi ti danno un po 'di L1 molto costoso e più di L2 meno costoso, ma più lento. Vedi anche stackoverflow.com/questions/3699582/…
Robert Harvey,

9
"Perché L1 è più veloce di L2" - la domanda diventa fuori tema per Programmers.SE e dovrebbe essere posta su Electronics.SE
mattnz

5
@ConditionRacer IIRC, ha a che fare con la tecnologia utilizzata per implementare la memoria. Penso che L2 sia DRAM su chip, mentre L1 è SRAM o qualcosa del genere; molto più costoso, ma molto più veloce. È passato più di un decennio da quando ho lavorato alla progettazione della CPU ...
Donal Fellows

4
@ CharlesE.Grant: mentre la gerarchia dei costi è un buon esempio, c'è un'altra ragione per cui non abbiamo 120 GB di cache su chip: indirizzare la memoria più grande richiede indirizzi più grandi, quindi istruzioni più grandi o più cicli della CPU. Quindi, per essere il più veloce, il numero di registri deve rimanere relativamente piccolo. Certo, si potrebbe avere una memoria su chip oltre ai registri, ma il livello più veloce deve rimanere piccolo, altrimenti non sarebbe più così veloce.
vsz

33

È più veloce perché sia ​​più vicino sia perché SRAM non DRAM.

SRAM è e può essere considerevolmente più veloce di DRAM i valori vengono mantenuti staticamente (la S in S RAM) in modo che non debbano essere aggiornati per eliminare i cicli. La DRAM è dinamica, come piccole batterie ricaricabili, devi ricaricare regolarmente quelle in modo che non si scarichino e diventino zeri. Ciò ruba il tempo di ciclo oltre a come è necessario accedere ai bit, ecc.

Essere sullo stesso die o vicino al processore riduce il round trip, sia L1 che L2 sono più veloci della DRAM dal punto di vista dell'accesso.

L'accesso alla SRAM è più rapido rispetto alle DRAM che hanno portato le mele alle mele e le cache sono di solito su chip o più vicine o su autobus più veloci rispetto alla DRAM, rendendo anche il tempo di accesso più veloce.


1
SRAM è anche più assetato di energia per bit, quindi dovresti aggiungere radiatori ad esso e qualsiasi cosa alimentata a batteria ne risentirebbe.
9000

1
Per non parlare del fatto che rendere SRAM più grande lo rende molto più lento.
Darkhogg

concordato, più potere e più lento rispetto ad altri sram. Penso che siano 4 transistor per bit per sram e 1 per bit per dram. il dramma si basa sulla capacità nel feto, dove sram si basa su una buona logica vecchio stile. quindi devi alimentare tutti quei transistor in ogni momento e non solo pompare periodicamente la carica.
old_timer

4
SRAM nella cache generalmente è 6T, non 4T. Inoltre, SRAM (sicuramente la variante 6T) è più efficiente dal punto di vista energetico. Il vero assorbimento di potenza in DRAM è il ciclo di aggiornamento e SRAM non ne ha proprio bisogno. I transistor SRAM assorbono energia durante la commutazione, il condensatore DRAM perde continuamente. Se sostituisci il cappuccio che perde di DRAM, finisci con EEPROM ma non è veloce: se è difficile che la carica fuoriesca, è anche difficile farla uscire nel modo normale.
MSalters

I FET CMOS di @dwelch non consumano energia se sono in stato aperto o chiuso, quindi l'argomento sul consumo di energia non è valido. Inoltre, è la commutazione logica CMOS, che consente alle CPU di consumare la maggior parte della loro potenza - i picchi attuali nello stato intermedio (non-1 e non-0), quindi la situazione è inversa rispetto a ciò che dici :)
Ruslan

21

Una cosa che dovrebbe essere menzionata esplicitamente è l'impatto della velocità della luce. In questo video Grace Hopper mostra un pezzo di filo lungo circa un piede, ovvero la distanza che un segnale elettrico può percorrere in un nanosecondo *. Se una CPU funziona a 3GHz, ciò implica una distanza di 4 "per ciclo di clock. Questo è un limite fisico duro alla velocità di accesso alla memoria. Questa è una grande parte del perché essere vicini alla CPU (come è la cache L1), consente memoria per essere più veloce.

EDIT * in realtà fino a che punto la luce può viaggiare nel vuoto, la distanza tra rame / silicio è inferiore.


2
Limite rigido per il rame. Questo è un buon punto, però, non ho considerato quanto i processori moderni siano incredibilmente veloci.
Condizioni del

@ConditionRacer Ho appena aggiunto una correzione, 11,8 pollici è la luce nel vuoto.
Matthew Finlay,

2
È necessario dimezzare quel numero poiché è necessario un round trip per recuperare memoria. Quindi sono solo 5 cm non 10 cm per ciclo di latenza nel vuoto .
Codici

2
La velocità della luce è il motivo principale clock del bus di memoria smesso di ottenere più velocemente qualche anno fa (2000ish?) Non è un effetto diretto - ha a che fare con segnali logici CMOS non essere più perfetti onde quadre a frequenze di bus - ma c spettacoli in primo piano in matematica.
zwol

5

Altre risposte coprivano già tutti i bit rilevanti: località (e il costo di trasferimento dati associato, larghezza bus e clock, e così via); velocità della luce (di nuovo, associata ai costi di trasferimento, larghezza e capacità del bus); diversa tecnologia di memoria (SRAM vs.DRAM). Tutto ciò visto alla luce del rapporto costi / prestazioni .

Un po 'che è stato lasciato fuori ed è appena menzionato nel commento di Darkhogg: cache più grandi hanno tassi di hit migliori ma latenza più lunga. Più livelli di cache sono stati introdotti anche per risolvere questo compromesso.

C'è un'eccellente domanda e risposta su questo punto sull'elettronica SE

Dalle risposte, mi sembra che un punto da evidenziare sia: la logica che esegue tutte le operazioni richieste per una lettura della cache non è così semplice (specialmente se la cache è set-associativa, come la maggior parte delle cache oggi). Richiede porte e logica. Quindi, anche se escludiamo i costi e moriamo nello spazio

Se qualcuno tentasse di implementare una cache L1 ridicolmente grande, anche la logica che esegue tutte le operazioni richieste per una lettura della cache diventerebbe grande. Ad un certo punto, il ritardo di propagazione attraverso tutta questa logica sarebbe troppo lungo e le operazioni che avevano precedentemente effettuato un solo ciclo di clock avrebbero dovuto essere suddivise in diversi cicli di clock. Ciò aumenterà la latenza.


5

Ci sono molti punti positivi sollevati nelle altre risposte, ma sembra mancare un fattore: indirizzare la latenza di decodifica.

Quella che segue è una grande semplificazione eccessiva del funzionamento della decodifica degli indirizzi di memoria, ma dà una buona idea del perché i chip DRAM di grandi dimensioni sono generalmente piuttosto lenti.

Quando il processore deve accedere alla memoria, invia un comando al chip di memoria per selezionare la parola specifica che desidera utilizzare. Questo comando si chiama Selezione indirizzo colonna (per ora ignoreremo gli indirizzi di riga). Il chip di memoria ora deve attivare la colonna richiesta, cosa che fa inviando l'indirizzo in una cascata di porte logiche per fare una sola scrittura che si collega a tutte le celle nella colonna. A seconda di come viene implementato, ci sarà un certo ritardo per ogni bit di indirizzo fino a quando il risultato non verrà fuori dall'altra parte. Questa è chiamata latenza CAS della memoria. Poiché questi bit devono essere esaminati in sequenza, questo processo richiede molto più tempo di un ciclo del processore (che di solito ha solo pochi transistor in sequenza da attendere). Inoltre, richiede molto più tempo di un ciclo del bus (che di solito è un po 'più lento di un ciclo del processore). È probabile che un comando CAS su un tipico chip di memoria assuma l'ordine di 5 ns (IIRC - è passato un po 'di tempo da quando ho guardato i tempi), che è più di un ordine di grandezza più lento di un ciclo di processore.

Fortunatamente, suddividiamo gli indirizzi in tre parti (colonna, riga e banco) che consentono a ciascuna parte di essere più piccola ed elaborare quelle parti contemporaneamente, altrimenti la latenza sarebbe ancora più lunga.

La cache del processore, tuttavia, non presenta questo problema. Non solo è molto più piccolo, quindi la traduzione dell'indirizzo è un lavoro più semplice, in realtà non ha bisogno di tradurre più di un piccolo frammento dell'indirizzo (in alcune varianti, nessuno di essi) perché è associativo. Ciò significa che lungo ogni riga di memoria memorizzata nella cache, ci sono celle di memoria extra che memorizzano parte (o tutto) dell'indirizzo. Ovviamente questo rende la cache ancora più costosa, ma significa che è possibile interrogare tutte le celle per vedere se hanno la particolare linea di memoria che vogliamo contemporaneamente, e quindi l'unica (si spera) che abbia i dati giusti la scaricherà su un bus che collega l'intera memoria al core del processore principale. Questo accade in meno di un ciclo, perché è molto più semplice.


-2

Una delle filosofie che ho studiato è stata il movimento di ottenere il massimo della velocità effettiva nel minimo dell'hardware quando parliamo di qualsiasi memoria basata su cache, che si tratti di cache CPU, cache buffer o cache di memoria a tale scopo. Il motivo di base si ottiene quando vi è il minimo o nessun movimento dell'hardware per il recupero / lettura / scrittura dei dati e l'operazione viene completata più rapidamente.

I dati vengono trasferiti dal disco -> memoria principale (RAM) (memoria temporanea) -> cache della CPU (memoria temporanea più piccola vicino alla CPU per dati a cui si accede frequentemente) -> CPU (elaborazione).

La cache della CPU è uno spazio di memoria più piccolo e più veloce che memorizza copie dei dati dalle posizioni di memoria principale utilizzate più di recente.

La cache del buffer è un'area di memoria principale che archivia copie dei dati dalle posizioni del disco utilizzate più di recente.

La cache del browser è una directory o uno spazio simile in cui vengono archiviate copie dei dati dai siti Web visitati più di recente dagli utenti.

Riferimento: come funziona la memoria del computer


"la filosofia dei sistemi operativi è ..." - questa è solo la tua opinione o puoi sostenerla in qualche modo?
moscerino del

Mi è stato insegnato questo mentre studiava Unix da Maurice Bach. Purtroppo nessuna documentazione di supporto. Modificato ..
roshan4074

5
howstuffworks è notoriamente inaffidabile per ottenere informazioni tecniche affidabili. Sono carini per le semplificazioni grossolane che il medio Joe e Jane possono capire, ma questo è tutto.
jwenting
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.