Sunteți pe pagina 1din 3

1 Lucrarea 4

1.1 Exercițiul 1

Conectați-vă la laboratorul virtual Raspberry Pi și realizați un pro-


gram în C sau C++ care calculează produsul matriceal al două matrici
pătratice de valori reale reprezentate în virgulă flotantă pe 32 de biți.
Implantați înmulțirea într-o funcție și salvați-o pentru mai târziu.

Indicații

Se poate utiliza algoritmul clasic, ”naiv”, folosind bucle imbricate.

1.2 Exercițiul 2

Continuați exercițiul precedent, modificând operațiile cu memoria,


pentru a beneficia cat mai mult de locacitatea memoriei cache. Implan-
tați înmulțirea într-o funcție și salvați-o pentru mai târziu. Adăugați
argumentarea ca și comentariu în prima linie din corpul funcției.

1
1 Lucrarea 4

Indicații
Matricile sunt ținute în memorie sub forma de șir. Pentru o matrice
nxm, se va aloca un șir de n*m elemente, unde primele m elemente
aparțin primei linii ș.a.m.d.
Când o zona de memorie este cerută, în memoria cache se va încărca
un bloc de date, care conține și zona de memorie cerută, acesta este
locacitatea memoriei cache.
Pentru a ne folosii de această proprietate, trebuie să schimbam mo-
dul de parcurgere a matricilor. Parcurgerea de dorit este parcurgerea
linie cu linie.

1.3 Exercițiul 3
Continuați exercițiul precedent adăugând și loop unrolling. Compa-
rații timpii de rulare între diverse dimensiuni de desfacere a buclei.
Adăugați argumentarea ca și comentariu în prima linie din corpul
funcției.

Indicații
Executarea instrucțiunilor de branching generează un hazard în pi-
peline, ceea ce duce la o reducere a performantelor. Pentru aceasta
exista loop unrolling, bucla for are un pas mai mare de 1 și în corpul
buclei se repetă de mai multe ori sarcinile din interior.

2
Acronime
GCC GNU Compiler Collection. 6

SSH Secure Shell. 6

S-ar putea să vă placă și