You are on page 1of 4

5.1.

În acest exercițiu ne uităm la proprietățile localizării memoriei


calculului matricei. Următorul cod este scris în C, unde elementele din același
rând sunt stocate contiguu. Să presupunem că fiecare cuvânt este un întreg pe 64
de biți.
pentru (I=0; I<8; I++)
pentru (J=0; J<8000; J++)
A[I][J]=B[I][0]+A[J][I];
5.1.1 Câte numere întregi pe 64 de biți pot fi stocate într-un bloc cache
de 16 octeți?
Răspunde:
1 octet = 8 biți = > 16 octeți = 128 biți = > Într-un bloc cache de 16 octeți, pot
fi stocate 2 numere întregi pe 64 de biți

.
5.1.2 Ce referințe variabile prezintă localizare temporală?
Răspunde:
Variabila localității temporale: I, J, B[I][0]

5.1.3 Ce referințe variabile prezintă localitatea spațială? Localitatea este afectată


atât de ordinea de referință, cât și de aspectul datelor. Același calcul poate fi
scris și mai jos în Matlab, care diferă de C prin faptul că stochează elemente
matriceale în aceeași coloană contiguu în memorie.
pentru I=1:8
pentru J=1:8000
A(I,J)=B(I,0)+A(J,I);
sfârșitul sfârșitului

Răspunde: A[I][J]
5.1.4 Ce referințe variabile prezintă localizare temporală?
Răspunde: I, J, B(I,0)

5.1.5 Ce referințe variabile prezintă localitatea spațială?


Răspunde: A(J,I) și B(I,0)
5.1.6 Câte blocuri cache de 16 octeți sunt necesare pentru a stoca toate
elementele matricei pe 64 de biți
la care se face referire folosind stocarea matricei Matlab? Câți folosesc stocarea
matricei C? (Să presupunem că fiecare rând conține mai multe elemente.)
Răspunde:
Cu matricea A, codul face referire la 8 * 8000 = 64 000 de numere întregi.
Deoarece 2 numere întregi pe bloc de 16 octeți, avem nevoie de 64 000/2 = 32
000 blocuri.
Folosind stocarea matricei C (că stochează elemente matriceale în aceeași
coloană contiguu în memorie), cu matricea B au 8 blocuri
=> 32000 + 8 = 32 008 (blocuri)
Folosind stocarea matricei Matlab (că stochează elemente matrice în același
rând contiguu în memorie), cu matricea B au 4 blocuri (2 numere întregi pe
bloc)
=> 32000 + 4 = 32 004 (blocuri)

5.2 Cache-urile sunt importante pentru a oferi procesoarelor o ierarhie


a memoriei de înaltă performanță. Mai jos este o listă de referințe la adresele de
memorie pe 64 de biți, date ca adrese Word.
0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba, 0xfd
5.2.1 Pentru fiecare dintre aceste referințe, identificați adresa cuvântului binar,
eticheta și indexul dat de o memorie cache mapată direct cu 16 blocuri de un
cuvânt. De asemenea, listați dacă fiecare referință este o accesare sau o ratare,
presupunând că memoria cache este inițial goală.
Răspunde:
16 blocuri = 2 4 = > Index pe4 biți
Adresa Word Adresa binară Etichetă Index Lovitură/
Domnișo
ară
0x03 0000 0011 0x0 0011 M
0xb4 1011 0100 0xb 0100 M
0x2b 0010 1011 0x2 1011 M
0x02 0000 0010 0x0 0010 M
0xbf 1011 1111 0xb 1111 M
0x58 0101 1000 0x5 1000 M
0xbe 1011 1110 0xb 1110 M
0x0e 0000 1110 0x0 1110 M
0xb5 1011 0101 0xb 0101 M
0x2c 0010 1100 0x2 1100 M
0xba 1011 1010 0xb 1010 M
0xfd 1111 1101 0xf 1101 M

5.2.2 Pentru fiecare dintre aceste referințe, identificați adresa cuvântului binar,
eticheta, indexul și decalajul dat de o memorie cache mapată direct cu blocuri
de două cuvinte și o dimensiune totală de opt blocuri. De asemenea, listați dacă
fiecare referință este un hit sau o ratare, presupunând că
memoria cache este inițial goală.
Răspunde:
8 blocuri = 2 3 = > Index
pe3 biți 2 cuvinte/bloc = 2 1 => decalaj pe1 bit
Adresa Word Adresa binară Etichet Index Comp Lovitură
ă ensa /
Domnișo
ară
0x03 0000 0011 0x0 001 1 M
0xb4 1011 0100 0xb 010 0 M
0x2b 0010 1011 0x2 101 1 M
0x02 0000 0010 0x0 001 0 M
0xbf 1011 1111 0xb 111 1 M
0x58 0101 1000 0x5 100 0 M
0xbe 1011 1110 0xb 111 0 M
0x0e 0000 1110 0x0 111 0 M
0xb5 1011 0101 0xb 010 1 M
0x2c 0010 1100 0x2 110 0 M
0xba 1011 1010 0xb 101 0 M
0xfd 1111 1101 0xf 110 1 M

5.2.3 Vi se cere să optimizați un design cache pentru referințele date. Există trei
modele de cache mapate direct, toate cu un total de opt cuvinte de date:
■ C1 are blocuri de 1 cuvânt■ C2 are blocuri de 2 cuvinte ■ C3 are blocuri

de 4 cuvinte.
Răspunde:
C1 are blocuri de 1 cuvânt = > 8 blocuri = > Index pe 3 biți, fără decalaj de biți
C2 are blocuri de 2 cuvinte = > 4 blocuri = > Index pe 2 biți + decalaj pe 1 bit
C3 are blocuri de 4 cuvinte => 2 blocuri => Index 1-bit + decalaj pe 2 biți

Adresa Adresa binară Etich Memoria cache Memoria cache Memoria cache
Word etă 1 2 3
Index Lovitură Index Lovitură Index Lovitură
/Ratare /Ratare /Ratare
0x03 0000 0011 0x00 011 M 01 M 0 M
0xb4 1011 0100 0x16 100 M 10 M 1 M
0x2b 0010 1011 0x05 011 M 01 M 0 M
0x02 0000 0010 0x00 010 M 01 M 0 M
0xbf 1011 1111 0x17 111 M 11 M 1 M
0x58 0101 1000 0x0b 000 M 00 M 0 M
0xbe 1011 1110 0x17 110 M 11 H 1 H
0x0e 0000 1110 0x01 110 M 11 M 1 M
0xb5 1011 0101 0x16 101 M 10 H 1 M
0x2c 0010 1100 0x02 100 M 10 M 1 M
0xba 1011 1010 0x17 010 M 01 M 0 M
0xfd 1111 1101 0x1f 101 M 10 M 1 M

Cache 1 rata de ratare = 100%Cache 2 rata de ratare = 10/12 = 83%

Rata de ratare a memoriei cache 3 = 11/12 = 92%


= > Memoria cache 2 oferă cea mai bună performanță.

You might also like