La comprensione della CPU cache e cache line

Sto cercando di capire come cache della CPU è operativo. Supponiamo di avere questa configurazione (come esempio).

  • Dimensione della Cache 1024 byte
  • Linea di Cache di 32 byte
  • 1024/32 = 32 linee di cache tutti insieme.
  • Singel linea di cache in grado di memorizzare 32/4 = 8 int.

1) in Base a queste impostazioni di configurazione lunghezza del tag deve essere 32-5=27 bit, e la dimensione dell’indice di 5 bit (2^5 = 32 indirizzi per ogni byte in linea di cache).

Se la dimensione totale della cache è di 1024 e ci sono 32 linee di cache, dove è tag+indici vengono memorizzati? (C’è un altro 4*32 = 128 byte). Significa che la vera dimensione della cache è di 1024+128 = 1152?

2) Se la linea di cache è di 32 byte in questo esempio, questo significa che con 32 byte di ottenere copiati nella cache whenerever CPU bisogno di ottenere di nuovo byte di RAM. Ho ragione di supporre che la linea di cache posizione richiesta byte sarà determinata dal suo indirizzo?

Questo è quello che intendo: se la CPU richiesto byte a [FF FF 00 08], quindi disponibile linea di cache sarà riempita di byte da [FF FF 00 00] per [FF FF 00 1F]. E il nostro requseted singolo byte sarà in posizione [08].

3) Se la precedente affermazione è corretta, significa che 5 bit utilizzato per l’indice, sono tecnicamente non è necessaria in quanto tutte le 32 byte sono in linea di cache comunque?

Per favore fatemi sapere se ho fatto qualcosa di sbagliato.
Grazie

  • Grazie per la unswers
InformationsquelleAutor kirbo | 2011-02-15

 

3 Replies
  1. 17

    Una cache consiste in dati e tag di RAM, disposte come un compromesso di tempo di accesso al vs efficienza e del layout fisico. Ti manca una importante stat: numero di modi (imposta). Raramente si avrà 1 via nascondigli, perché eseguire patologicamente male con motivi semplici. Comunque:

    1) Sì, tag prendere più spazio. Questa è parte della struttura di compromesso – non vuole essere una grande frazione della superficie totale, e perché la dimensione della riga non è solo 1 byte o 1 parola. Inoltre, tutti i tag di un indice sono simultaneamente accessibili, e che possono influenzare l’efficienza e il layout se non c’è un gran numero di modi. La dimensione è leggermente più grande della vostra stima. C’è di solito anche un paio di bit bit extra per segno di validità e, a volte, suggerimenti. Più modi e linee più piccole esigenze di una grande frazione preso da tag, quindi in genere le linee sono di grandi dimensioni (più di 32 byte) e i modi sono di piccole dimensioni (4-16).

    2) Sì. Alcuni nascondigli anche fare una “critica prima la parola” fetch, dove si inizia con la parola che ha causato la linea di riempimento, quindi recuperare il resto. Questo riduce il numero di cicli che la CPU è in attesa per i dati che effettivamente chiesto. Alcuni cache sarà di scrittura “thru” e non allocare una riga, se si dimentica di scrivere, che evita di leggere l’intera linea di cache, prima di scrivere (questo non è sempre una vittoria).

    3) I tag non memorizzare il basso a 5 bit, in quanto non sono necessari per corrispondere a una linea di cache. Hanno appena index nelle singole righe.

    Wikipedia ha una abbastanza buona, anche se un po ‘ intenso, scrivere-up su cache: http://en.wikipedia.org/wiki/CPU_cache – vedere “Attuazione”. Esiste uno schema di come i dati e i tag sono divisi. A Me, penso che tutti dovrebbero imparare questa roba, perché è davvero in grado di migliorare le prestazioni del codice quando si sa che cosa il sottostante macchina è in realtà in grado di.

  2. 3
    1. La cache dei metadati è in genere non viene considerato come una parte della cache stessa. Potrebbe anche non essere memorizzato nella stessa parte della CPU (potrebbe essere in un altro cache, realizzata tramite appositi registri della CPU, ecc).
    2. Questo dipende dal fatto che la tua CPU a prendere disallineati gli indirizzi. Se sarà solo fetch allineati indirizzi, quindi l’esempio che hai citato sarebbe corretto. Se la CPU recupera disallineati gli indirizzi, quindi si potrebbe recuperare la gamma 0xFFFF0008 per 0xFFFF0027.
    3. L’indice byte sono ancora utili, anche quando l’accesso alla cache è allineato. Questo dà la CPU un metodo più breve per fare riferimento a un byte all’interno di una linea di cache che è possibile utilizzare nella sua contabilità interna. Si potrebbe ottenere le stesse informazioni da sapere l’indirizzo associato con la linea di cache e l’indirizzo associato con il byte, ma un sacco di informazioni in più da portare in giro.

    Diverse Cpu implementare la memorizzazione nella cache in modo molto diverso. Per la migliore risposta alla tua domanda, si prega di fornire ulteriori dettagli sul particolare della CPU (tipo, modello, ecc) che si sta parlando.

  3. 3

    Questo è basato su un mio vago ricordo, si dovrebbe leggere i libri come “Computer Architecture: A Quantitative Approach” da Hennessey e Patterson. Grande libro.

    Assumendo una CPU a 32 bit… (altrimenti le cifre non avrebbe bisogno di utilizzare >4 byte (forse <8 byte dal momento che alcune, la maggior parte della CPU a 64 bit non hanno tutti i 64 bit di indirizzo linea usato)) per l’indirizzo.

    1) credo che almeno 4*32 byte. A seconda della CPU, chip architetti per aver deciso di tenere traccia di altre info oltre l’indirizzo completo. Ma di solito non è considerato parte della cache.

    2) Sì, ma come la mappatura è fatto è diverso. Vedere Wikipedia – cache della CPU – associatività C’è il semplice direct mapped cache e più complesse associative mapped cache. Si vuole evitare il caso in cui il codice ha bisogno di due pezzi di informazioni, ma i due indirizzi esattamente la stessa linea di cache.

Lascia un commento