| |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
Esercizio CACHE IV Compitino Clicca QUI per vedere il messaggio nel forum |
lSical |
Ciao, qualcuno potrebbe gentilmente aiutarmi ad interpretare questo esercizio :? prensente nel compitino dell'anno scorso:
Disegnate una cache per un’architettura MIPS, a 4 vie di 1KByte per banco, e linee di 4 parole (per ciascun banco). Supponiamo
che l’indirizzamento della memoria principale sia su 32 bit. Disegnare il circuito di scrittura della cache. Definire cosa rappresenta il
campo TAG e dimensionarlo. Supponiamo che all’inizio i bit di validità siano tutti a 0. Definire cosa succede in corrsipondenza di
questo frammento di codice (se si verifica una miss, una hit e dove vengono scritti / letti i dati della cache, quale indirizzo e quale tag
vengono associati ad ogni istruzione):
sw $t0, 20($zero)
lw $t0, 64($zero)
lw $t0, 60($zero)
sw $t0, 56($zero)
sw $t0, 0($zero)
lw $t0, 20($zero)
lw $t0, 64($zero)
lw $t0, 128($zero)
vorrei sapere cosa si intende con l’indirizzamento della memoria principale sia su 32 bit, e che la cache è a 4 vie di 1KByte per banco (cioè 4 blocchi a 1kByte per via?)
Per ora credo di aver capito che:
-Se è una cache a 4 vie allora è in grado di memorizzare 4 blocchi diversi per ogni indice.
- 1kByte/4 word = 256 word all'interno della cache ?
quindi 256 word/ 4 vie = 64 =2^6 pari a 6 bit per l'indice?
perciò il tag sarebbe 32-2-6=24
poi come faccio a determinare il numero di linee?
Grazie dell'aiuto :-D, Ciao!!! |
marcodili |
no guarda.. secondo me stai sbagliando..
praticamente 4 vie 1k byte per banco vuol dire in totale una cache da 4 kbyte.
ci sono quattro banchi da 1k byte ciascuno... ogni banco ha linee che contengono 4 parole (quindi vuol dire che ogni banco ha quattro blocchi)
quindi:
K = 32 - log2 (2^10) = 32-10= 22 bit di tag
poi sono quattro blocchi per banco quindi avra bisogno di 2 bit per rappresentare i blocchi
quindi n bit di indice = 32 - 22 -2 -2(bit unused) = 6
quindi hai in totale 2^6 = 64 linee
per riassumere = 22 bit di tag, 6 di indice, 2 di blocco, 2 di unused
io lo ho svolto così. Cmq fare un disegno della cache può sempre aiutare. |
lSical |
Ciao, Innanzitutto grazie mille della risposta :razz::razz:
adesso ho capito :D , quindi quando dice "Supponiamo
che l’indirizzamento della memoria principale sia su 32 bit" vuol dire che l'indirizzo è su 32 bit? e poi ma i due bit unused ci sono sempre???:?
o come faccio a stabilire se ci sono o no?(perchè su alcuni esercizi ho visto che per ottenere l'indice fanno: dimensione banco/ numero vie= 2^n dove n è l'indice)?
poi le seguenti istruzioni sono giuste: :? ho scritto gli ultimi 10 bit, 6 bit per l'indice, 2 per i blocchi e 2 unused
sw $t0, 20($zero)= (|00 0001| 01|00) quindi ho una hit visto che è una store word, suppongo di scrivere sul banco 0, indice = 1 quindi linea 1, blocco 1 e tag 0, bit v=1
lw $t0, 64($zero)= (|00 0100| 00|00) quindi miss perchè il dato non c'è,(confronto il tag di tutte le linee di posizione 4 nei vari banchi) scrivo ancora sul banco 0(posso scrivere sul banco che voglio vero? visto che la corrispondenza è associativa?), indice =4 = linea 4, blocco 0 e tag 0, bit v=1
lw $t0, 60($zero) (|00 0011| 11|00) miss perchè dato non presente
(confronto il tag di tutte le linee di posizione 3 nei vari banchi), scrivo ancora sul banco 0, indice = 3=linea 3, blocco 3 tag 0, bit v =1
sw $t0, 56($zero) (|00 0011| 10|00) HIT perchè dato presente al banco 0, indice= linea 3 e bit di validate = 1 e il tag è uguale, quindi non lo riscrivo?
blocco 2, tag=0
sw $t0, 0($zero) Hit come la sw precedente ?
lw $t0, 20($zero) (|00 0001| 01|00) HIT perchè dato presente al banco 0, linea=1 e tag =0 quindi ricarico il dato
.... e cosi via ....:D
Grazie ancora delle risposte!! :-D :-D |
LG2100 |
Tra l'altro l'esercizio chiede di disegnare il circuito di scrittura della cache, ma io non l'ho trovato da nessuna parte. Qualcuno sa dirmi dov'è spiegato? Oppure bisogna improvvisarne uno? :D |
lSical |
ciao!, guarda che c'è nella slide della lezione 28, :) (26/36)
scusa hai provato se le istruzioni sono giuste? |
LG2100 |
Ho svolto l'esercizio e mi vengono le HIT/MISS come a te. Credo sia giusto. L'unico dubbio che ho è sulle sw che accedono a blocchi non in cache se anche per loro si hanno hit o miss. Pensandoci, se si cerca di scrivere una word su un blocco in cui il bit di validate è a 0 bisogna per forza recuperare dalla ram il resto del blocco con conseguente ritardo di tempo e poi mettere il bit di validate a 1.... peccato che sulle slide non ci siano esempi con le sw...
La slide 26 della lezione 28 mi sembra un circuito di lettura, non di scrittura. In input prende l'indirizzo e fornisce un dato in output... |
lSical |
è vero, quello è il circuito di lettura xD:D, ...comunque se la cache è la copia della memoria principale allora quando faccio una sw vedo se il dato è presente in essa quindi alla fine lo seleziono dalla cache e quindi forse il grafico è lo stesso(almeno credo :D), poi per la sw, credo di aver sentito a lezione che si ha sempre hit perchè scrivo direttamente sulla memoria,
quindi tipo per l'istruzione
sw $t0, 56($zero) visto che il dato è presente sulla cache allora non faccio altro che prenderlo, di conseguenza ho una HIT :? |
LG2100 |
Se il dato è già in cache non ci sono dubbi. Il problema è se il dato non c'è. Però probabilmente si verifica hit o miss solo se l'operazione è di lettura :) |
lSical |
Si infatti, se non c'è, cerchi una linea libera in qualunque blocco e scrivi direttamente :), per il grafico al massimo disegno quello che c'è sperando mi dia qualche punto :D:D |
Shaper |
Ma quindi, quando si tratta di sw, non avrebbe nemmeno senso parlare di hit o miss? E quindi che ci scrivo? La cosa mi lascia perplesso...:? |
marcodili |
ragazzi cmq il fatto della sw è spiegata in teoria.. il tempo della sw dipende se avviene in writethrough o in write back... guardate bene sulle dispense cosa c'è scritto. Writethrough scrive sia in cache che in memoria (quindi probabilmente il tempo sarà paragonabile a quello di una miss), writeback scrive in cache e rimanda la scrittura in memoria solo quando viene sovrascritta la linea di cache(quindi il tempo sarà paragonabile a una hit).
Cmq nel caso in cui ci sia da calcolare qualche tempo o dice il professore quale delle 2 viene utilizzata oppure scegliamo noi credo! Cmq nei compitini non ha mai chiesto di calcolare il tempo totale di un tot di istruzioni!
Questa mi sembra la soluzione migliore. |
Shaper |
Originally posted by marcodili
ragazzi cmq il fatto della sw è spiegata in teoria.. il tempo della sw dipende se avviene in writethrough o in write back... guardate bene sulle dispense cosa c'è scritto. Writethrough scrive sia in cache che in memoria (quindi probabilmente il tempo sarà paragonabile a quello di una miss), writeback scrive in cache e rimanda la scrittura in memoria solo quando viene sovrascritta la linea di cache(quindi il tempo sarà paragonabile a una hit).
Cmq nel caso in cui ci sia da calcolare qualche tempo o dice il professore quale delle 2 viene utilizzata oppure scegliamo noi credo! Cmq nei compitini non ha mai chiesto di calcolare il tempo totale di un tot di istruzioni!
Questa mi sembra la soluzione migliore.
Sì, il discorso del writeback fila, ma siccome ci chiede di scrivere se si verifica una hit o una miss, noi che gli scriviamo nel caso della sw? |
marcodili |
guarda.. secondo me basta che gli scrivi solo scrittura... e poi al max se vuoi far vedere che hai studiato scrivi :ipotizzando writethrough, tempo paragonabile ad una miss. |
Shaper |
Originally posted by marcodili
guarda.. secondo me basta che gli scrivi solo scrittura... e poi al max se vuoi far vedere che hai studiato scrivi :ipotizzando writethrough, tempo paragonabile ad una miss.
Sì, penso sia la cosa migliore... |
ste182 |
Originally posted by marcodili
no guarda.. secondo me stai sbagliando..
praticamente 4 vie 1k byte per banco vuol dire in totale una cache da 4 kbyte.
ci sono quattro banchi da 1k byte ciascuno... ogni banco ha linee che contengono 4 parole (quindi vuol dire che ogni banco ha quattro blocchi)
quindi:
K = 32 - log2 (2^10) = 32-10= 22 bit di tag
poi sono quattro blocchi per banco quindi avra bisogno di 2 bit per rappresentare i blocchi
quindi n bit di indice = 32 - 22 -2 -2(bit unused) = 6
quindi hai in totale 2^6 = 64 linee
per riassumere = 22 bit di tag, 6 di indice, 2 di blocco, 2 di unused
io lo ho svolto così. Cmq fare un disegno della cache può sempre aiutare.
so che è una discussione un pò vecchia ma sto studiando per l'appello di domani e mi servirebbe capire.
io l'ho fatto diversamente:
- una linea= 4(blocchi) * 32bit (suppongo che una word sia di 4byte dato che il bus è a 32bit) = 128 bit di linea
- numero di linee = 1024(1KB) / 128bit = 8
- indice = log2(8) = 3 bit
- 2 bit di offset
- tag = 32 -2 -2 -3 = 25 bit
ricapitolando:
25bit di tag | 3bit di indice | 2bit di offset | 2 bit unused
no?? |
|
|
|
|