Calcolo della memoria cache

Sto imparando la logica delle memorie cache. Mi chiedo se puoi verificare che ho capito correttamente. Se una memoria cache nel campo tag contiene 16 bit, il campo impostato ha 10 bit e il byte nel campo del blocco è 6 bit, quindi posso dedurre solo da queste informazioni che la capacità è di 128 kbyte ed è associativa a 2 vie con dimensione del blocco 64 byte perché 2⁶ = 64 byte dal byte nel campo del blocco. 2¹⁰ = 1024 ma qualche altra capacità con qualche altro numero di associatività potrebbe soddisfare i requisiti?

apprendo che le formule sono

numero di blocchi = capacità / dimensione blocchi

numero di serie = numero di blocchi / #associatività

Quindi Potrei raddoppiare sia lassociatività a 4 vie ma non potrei soddisfare i requisiti con una cache a 4 vie perché wo Potrebbe richiedere un altro numero di bit nel campo set.

Ho capito bene?

Risposta

Questa immagine ti aiuta a capire come funzionano le cache associative strutturalmente?

inserisci qui la descrizione dellimmagine presa in prestito da qui

In poche parole i bit di offset del blocco determinano la dimensione del blocco (quanti byte ci sono in una riga della cache, quante colonne se lo si desidera). I bit di indice determinano il numero di righe in ogni set. La capacità della cache è quindi 2 ^ (blockoffsetbits + indexbits) * #sets. In questo caso, è 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilobyte.

Per la stessa dimensione della cache (capacità), se si dovesse passare da 4 vie a due way set associative, it two way associative, you could do so double the rows in each set or raddopping the column in each set, which is to say double the number of cache lines or double the block size.

Se scegliessi di raddoppiare il numero di righe, il tuo indirizzo a 12 bit verrebbe suddiviso in un indice a 5 bit e un offset di blocco a 4 bit, lasciando un tag a 3 bit.

Se dovessi scegliere di raddoppiare la dimensione del blocco, ti ritroveresti con il tuo indirizzo a 12 bit suddiviso in un indice a 4 bit, un offset di blocco a 5 bit, lasciando un tag a 3 bit.

Quindi, per ripetere nuovamente, penso che le formule di governo per le cache associative siano:

Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits) 

Nel tuo esempio originariamente dichiarato, non ” Non penso che tu possa dedurre la dimensione della cache in base alla dimensione dei tuoi rispettivi campi di bit di indirizzo senza fare unipotesi abo ut lassociatività. Se è associativa a 2 vie, potresti dire:

Capacità cache = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilobyte = 256 kilobyte. Non sono sicuro di come sei arrivato a 128 kilobyte. Sarebbe il caso se fosse associativa unidirezionale (mappata direttamente).

Per una capacità di cache di 128 kB (2 ^ 17 byte), potrebbe creare una cache associativa a 4 vie con una dimensione del blocco di 64 byte dicendo:

2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512 

… e quindi allocando 9 bit di indice, 4 bit di offset di blocco e gli altri (19) bit di tag.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *