Perché la dimensione della cache L1 non è aumentata molto negli ultimi 20 anni?


35

L'i486 Intel ha 8 KB di cache L1. L'Intel Nehalem ha 32 KB di cache istruzioni L1 e 32 cache di dati KB L1 per core.

La quantità di cache L1 non è aumentata quasi alla velocità con cui è aumentata la frequenza.

Perchè no?


Stai confrontando le mele con le arance. Le frequenze di clock sono aumentate, ma non c'è correlazione con la necessità di più cache. Solo perché puoi fare qualcosa più velocemente, non significa che tu possa beneficiare di un secchio più grande.
Keltari

La cache in eccesso e l'overhead di gestione possono rallentare un sistema. Hanno trovato il punto debole e lì rimarrà.
Fiasco Labs,

Risposte:


17

30K di testo di Wikipedia non sono utili quanto una spiegazione del perché una cache troppo grande è meno ottimale. Quando la cache diventa troppo grande, la latenza per trovare un elemento nella cache (factoring in cache misses) inizia ad avvicinarsi alla latenza di cercare l'elemento nella memoria principale. Non so a che proporzioni mirino i progettisti di CPU, ma penso che sia qualcosa di analogo alla linea guida 80-20: Vorresti trovare i tuoi dati più comuni nella cache l'80% delle volte e gli altri 20 % delle volte dovrai andare nella memoria principale per trovarla. (o qualunque siano le proporzioni previste dai progettisti della CPU.)

EDIT: Sono sicuro che non è vicino all'80% / 20%, quindi sostituisci X e 1-X. :)


6
"Quando la cache diventa troppo grande, la latenza per trovare un elemento nella cache (factoring in cache misses) inizia ad avvicinarsi alla latenza di cercare l'elemento nella memoria principale." Sei sicuro di questo? Ad esempio, il raddoppio della quantità di RAM installata non aumenterà certamente la sua latenza, perché sarebbe vero per la cache? Inoltre, perché la cache L2 dovrebbe diventare più grande con le nuove CPU, se questo è un problema? Non sono un esperto in questo, voglio davvero saperlo :)
Anno

2
Avevo preparato una grande e lunga descrizione della memorizzazione nella cache del software e misurando quando la cache si era superata e doveva essere scaricata / ricostruita, ma poi ho deciso che sarebbe meglio ammettere che non sono un progettista di hardware. :) In entrambi i casi, sospetto che la risposta possa essere riassunta dalla legge dei rendimenti decrescenti. Vale a dire di più non è sempre meglio.
JMD,

3
Dalla mia lunga storia di armeggiare con hardware a livelli bassi, ma in realtà non essere un designer, direi che la latenza sembra essere correlata a quanti modi la cache è associativa, non alle dimensioni. La mia ipotesi è che i transistor extra che andrebbero nella cache si sono dimostrati più efficaci altrove per le prestazioni complessive.
Brian Knoblauch,

1
@JMD Sarei comunque interessato a quella descrizione;) Anche se i commenti non sono probabilmente il posto migliore per questo, vero. @Brian Quindi, se ho capito bene, hanno deciso di mettere meno transistor nella cache L1 e allo stesso tempo di aggiungere molto di più in L2, che è significativamente più lento? Per favore, non offenderti, sono solo curioso :)
sYnfo

10

Un fattore è che i recuperi L1 iniziano prima che le traduzioni TLB siano complete in modo da ridurre la latenza. Con una cache abbastanza piccola e sufficientemente alta, i bit di indice per la cache saranno gli stessi tra indirizzi virtuali e fisici. Ciò probabilmente riduce il costo di mantenimento della coerenza della memoria con una cache praticamente indicizzata e con tag fisici.


1
risposta più interessante :)
GameDeveloper

1
Credo che questo sia il motivo, ma lasciami dare il numero. La dimensione della pagina sull'architettura x86 è 4096 byte. La cache vuole scegliere il bucket della cache in cui cercare la voce della riga della cache (64 byte) prima che la traduzione della pagina sia completa. Sarebbe costoso dover decidere tra troppe voci in un bucket, quindi ogni bucket ha solo 8 voci al suo interno. Di conseguenza, negli ultimi dieci anni, tutti i costosi cpus x86 hanno esattamente 32768 byte (512 linee di cache) nella loro cache di dati L1.
b_jonas,

Poiché questo è così difficile da aumentare, il cpus aggiunge un livello medio di cache, quindi ora abbiamo cache L2 e L3 separate. Inoltre, la cache del codice L1 e la cache dei dati L1 sono separate, poiché la CPU sa se sta accedendo al codice o ai dati.
b_jonas,

8

La dimensione della cache è influenzata da molti fattori:

  1. Velocità dei segnali elettrici (dovrebbe essere se non la velocità della luce, qualcosa dello stesso ordine di grandezza):

    • 300 metri in un microsecondo.
    • 30 centimetri in un nanosecondo.
  2. Costo economico (i circuiti con livelli di cache diversi potrebbero essere diversi e alcune dimensioni della cache potrebbero non essere degne)

    • Il raddoppio della dimensione della cache non raddoppia le prestazioni (anche se la fisica ha permesso a quella dimensione di funzionare) per il raddoppio di piccole dimensioni offre molto più della doppia prestazione, per le grandi dimensioni il raddoppio della dimensione della cache non fornisce quasi alcuna prestazione aggiuntiva.
    • Su wikipedia puoi trovare un grafico che mostra, ad esempio, come indegno sta rendendo le cache più grandi di 1 MB (in realtà esistono cache più grandi ma devi tenere conto del fatto che si tratta di core multiprocessore).
    • Per le cache L1 ci dovrebbero essere alcuni altri grafici (che i fornitori non mostrano) che rendono comodi 64 Kb come dimensioni.

Se la dimensione della cache L1 non è cambiata dopo 64kb è perché non valeva più la pena. Si noti inoltre che ora esiste una "cultura" maggiore sulla cache e molti programmatori scrivono codice "cache-friendly" e / o usano le istruzioni prefetech per ridurre la latenza.

Ho provato una volta a creare un semplice programma che accedesse a posizioni casuali in un array (di diversi MegaByte): quel programma ha quasi congelato il computer perché per ogni lettura casuale un'intera pagina è stata spostata dalla RAM alla cache e da allora è stata eseguita molto spesso il programma stava esaurendo tutta la banda lasciando davvero poche risorse per il sistema operativo.


6

Credo che si possa riassumere semplicemente affermando che più grande è la cache, più lento sarà l'accesso. Quindi una cache più grande non aiuta semplicemente poiché una cache è progettata per ridurre la comunicazione del bus lento verso la RAM.

Poiché la velocità del processore è aumentata rapidamente, la cache della stessa dimensione deve funzionare sempre più velocemente per stare al passo. Quindi le cache possono essere significativamente migliori (in termini di velocità) ma non in termini di archiviazione.

(Sono un ragazzo del software, quindi spero che questo non sia terribilmente sbagliato)


3

Dalla cache L1 :

La cache di livello 1, o cache primaria, si trova sulla CPU e viene utilizzata per l'archiviazione temporanea di istruzioni e dati organizzati in blocchi di 32 byte. La cache primaria è la forma di archiviazione più veloce. Poiché è integrato nel chip con un'interfaccia zero-state (delay) per l'unità di esecuzione del processore, ha dimensioni limitate .

SRAM utilizza due transistor per bit e può contenere dati senza assistenza esterna, purché l'alimentazione sia fornita al circuito. Questo è in contrasto con la RAM dinamica (DRAM), che deve essere aggiornata più volte al secondo per conservare il contenuto dei suoi dati.

Il processore Intel P55 MMX, lanciato all'inizio del 1997, era degno di nota per l'aumento delle dimensioni della sua cache di livello 1 a 32 KB. I chip AMD K6 e Cyrix M2 lanciati più tardi quell'anno hanno aumentato ulteriormente l'ante fornendo cache di livello 1 di 64 KB. 64 KB è rimasta la dimensione della cache L1 standard, sebbene vari processori multi-core possano utilizzarla in modo diverso.

EDIT: Si noti che questa risposta è del 2009 e le CPU si sono evolute enormemente negli ultimi 10 anni. Se sei arrivato a questo post, non prendere tutte le nostre risposte qui troppo sul serio.


Una tipica cella SRAM è composta da sei MOSFET. Ogni bit in una SRAM è memorizzato su quattro transistor (M1, M2, M3, M4) che formano due inverter accoppiati. Fonte seconda fonte
lukecampbell,

Questa è solo una descrizione della situazione e non spiega nulla del perché.
Eonil,

@Eonil - Non potremmo fornire la risposta "perché" se volessimo. Tuttavia, i rendimenti decrescenti sulla performance sono una spiegazione ragionevole fattibile. Quando la domanda è stata scritta quasi un decennio fa, era molto più costoso aumentare le dimensioni senza includere un impatto sulle prestazioni. Questa risposta ha tentato di rispondere almeno alla domanda prevista che è stata posta.
Ramhound,

-4

In realtà la dimensione della cache L1 è il maggiore collo di bottiglia per la velocità nei computer moderni. Le dimensioni della cache L1 pateticamente minuscole possono essere lo sweetspot per il prezzo, ma non le prestazioni. È possibile accedere alla cache L1 alle frequenze GHz, lo stesso delle operazioni del processore, a differenza dell'accesso alla RAM 400 volte più lento. È costoso e difficile da implementare nell'attuale design bidimensionale, tuttavia è tecnicamente fattibile e la prima azienda che lo fa con successo avrà computer 100 volte più veloce e funzionerà ancora alla grande, cosa che produrrebbe importanti innovazioni in molti campi e sono attualmente accessibili solo attraverso configurazioni ASIC / FPGA costose e difficili da programmare. Alcuni di questi problemi hanno a che fare con problemi di proprietà / proprietà intellettuale e avidità aziendale che si estende ormai da decenni, dove un gruppo di ingegneri scettici e inefficaci sono gli unici ad avere accesso ai meccanismi interni, e ai quali viene dato per lo più ordini di marcia per spremere sciocchezze protezionistiche offuscate e convenienti. La ricerca eccessivamente privatizzata porta sempre a tale stagnazione tecnologica o limitazione (come abbiamo visto in aerospazio e auto dai grandi produttori e presto diventerà farmaceutica). Una regolamentazione open source e più sensata in materia di brevetti e segreti commerciali a vantaggio degli inventori e del pubblico (piuttosto che dei capi e degli azionisti della società) aiuterebbe molto qui. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. e ai quali viene dato per lo più ordini di marcia per spremere sciocchezze protezionistiche offuscate e convenienti. La ricerca eccessivamente privatizzata porta sempre a tale stagnazione tecnologica o limitazione (come abbiamo visto in aerospazio e auto dai grandi produttori e presto diventerà farmaceutica). Una regolamentazione open source e più sensata in materia di brevetti e segreti commerciali a vantaggio degli inventori e del pubblico (piuttosto che dei capi e degli azionisti della società) aiuterebbe molto qui. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. e ai quali viene dato per lo più ordini di marcia per spremere sciocchezze protezionistiche offuscate e convenienti. La ricerca eccessivamente privatizzata porta sempre a tale stagnazione tecnologica o limitazione (come abbiamo visto in aerospazio e auto dai grandi produttori e presto diventerà farmaceutica). Una regolamentazione open source e più sensata in materia di brevetti e segreti commerciali a beneficio degli inventori e del pubblico (piuttosto che dei capi e degli azionisti dell'azienda) aiuterebbe molto qui. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. La ricerca eccessivamente privatizzata porta sempre a tale stagnazione tecnologica o limitazione (come abbiamo visto in aerospazio e auto dai grandi produttori e presto diventerà farmaceutica). Una regolamentazione open source e più sensata in materia di brevetti e segreti commerciali a beneficio degli inventori e del pubblico (piuttosto che dei capi e degli azionisti dell'azienda) aiuterebbe molto qui. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. La ricerca eccessivamente privatizzata porta sempre a tale stagnazione tecnologica o limitazione (come abbiamo visto in aerospaziale e auto dai grandi produttori e presto diventerà farmaceutica). Una regolamentazione open source e più sensata in materia di brevetti e segreti commerciali a vantaggio degli inventori e del pubblico (piuttosto che dei capi e degli azionisti della società) aiuterebbe molto qui. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo. Dovrebbe essere un gioco da ragazzi per lo sviluppo creare cache L1 molto più grandi e questo dovrebbe e avrebbe potuto essere sviluppato decenni fa. Saremmo molto più avanti nei computer e in molti campi scientifici utilizzandoli se avessimo.

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.