This shows you the differences between two versions of the page.
|
asc:laboratoare:03 [2026/02/23 18:46] giorgiana.vlasceanu |
asc:laboratoare:03 [2026/03/18 17:09] (current) andrei.ouatu [Resurse] |
||
|---|---|---|---|
| Line 72: | Line 72: | ||
| ==== Accesul la vectori ==== | ==== Accesul la vectori ==== | ||
| - | Un alt aspect care necesita resurse din plin, este utilizarea si accesul variabilelor de tip vectorial. De fiecare data cand programul face o referinta la un obiect de tipul X[i][j][k] compilatorul trebuie sa genereze expresii aritmetice complexe, pentru a calcula aceasta adresa, in cadrul vectorului muldimensional X. De exemplu, iata cum arata un vector bidimensional in limbajul C (salvat row-major): | + | Un alt aspect care necesita resurse din plin, este utilizarea si accesul variabilelor de tip vectorial. De fiecare data cand programul face o referinta la un obiect de tipul X[i][j][k] compilatorul trebuie sa genereze expresii aritmetice complexe, pentru a calcula aceasta adresa, in cadrul vectorului multidimensional X. De exemplu, iata cum arata un vector bidimensional in limbajul C (salvat row-major): |
| {{:asc:lab5:aij.jpg|}} | {{:asc:lab5:aij.jpg|}} | ||
| Line 279: | Line 279: | ||
| </code> | </code> | ||
| - | Pentru (Wc) avem acum (N/b)*(N/b)*b*b Cache-miss-uri, in vreme ce pentru (Ra) si (Rb) avem (N/b)*(N/b)*(N/b)*b*b, astfel ducand la N<sup>2</sup> + 2N<sup>3</sup>/b -> 2N<sup>3</sup>/b Cache-miss-uri pentru intregul algoritm. Combinand acest calcul cu faptul ca avem 2N<sup>3</sup> operatii aritmetice, rezulta un raport r = 2N<sup>3</sup> / 2N<sup>3</sup>/b -> b. Dupa cum am stabilit, r trebuie sa fie maxim (mai mare oricum decat 2-ul obtinut in varianta anterioara). Daca mergem pana la cazul extrem, il vom face pe b = N, dar asta nu este viabil, pentru ca atunci suntem din nou la cazul fara blocuri, de la care tocmai venim... | + | Pentru (Wc) avem acum (N/b)*(N/b)*b*b Cache-miss-uri, in vreme ce pentru (Ra) si (Rb) avem (N/b)*(N/b)*(N/b)*b*b, astfel ducand la N<sup>2</sup> + 2N<sup>3</sup>/b -> 2N<sup>3</sup>/b Cache-miss-uri pentru intregul algoritm. Combinand acest calcul cu faptul ca avem 2N<sup>3</sup> operatii aritmetice, rezulta un raport r = 2N<sup>3</sup> / (2N<sup>3</sup>/b) -> b. Dupa cum am stabilit, r trebuie sa fie maxim (mai mare oricum decat 2-ul obtinut in varianta anterioara). Daca mergem pana la cazul extrem, il vom face pe b = N, dar asta nu este viabil, pentru ca atunci suntem din nou la cazul fara blocuri, de la care tocmai venim... |
| Astfel, acest algoritm functioneaza doar daca blocurile intra in Cache. Acest lucru inseamna ca trei blocuri diferite, de dimensiune b*b, trebuie sa intre in Cache, pentru toate cele trei matrice (a, b si c). Daca C este dimensiunea Cache-ului in elemente de matrice, atunci trebuie sa fie 3b<sup>2</sup> ≤ C sau b ≤ √(C / 3) . Astfel, in cel mai bun caz, r-ul trebuie sa fie si el √(C / 3). | Astfel, acest algoritm functioneaza doar daca blocurile intra in Cache. Acest lucru inseamna ca trei blocuri diferite, de dimensiune b*b, trebuie sa intre in Cache, pentru toate cele trei matrice (a, b si c). Daca C este dimensiunea Cache-ului in elemente de matrice, atunci trebuie sa fie 3b<sup>2</sup> ≤ C sau b ≤ √(C / 3) . Astfel, in cel mai bun caz, r-ul trebuie sa fie si el √(C / 3). | ||
| Line 420: | Line 420: | ||
| ===== Resurse ===== | ===== Resurse ===== | ||
| * Responsabilul acestui laborator: [[emil.slusanschi@cs.pub.ro|Emil Slușanschi]] | * Responsabilul acestui laborator: [[emil.slusanschi@cs.pub.ro|Emil Slușanschi]] | ||
| - | * {{:asc:laboratoare:lab09.zip|Schelet Laborator 9}} | + | * {{:asc:laboratoare:lab09-2.zip|Schelet Laborator 3}} |
| <hidden> * {{:asc:lab5:sol:lab5_sol.tar.gz|Soluție Laborator 9}} </hidden> | <hidden> * {{:asc:lab5:sol:lab5_sol.tar.gz|Soluție Laborator 9}} </hidden> | ||