Differences

This shows you the differences between two versions of the page.

Link to this comparison view

asc:laboratoare:09 [2024/04/30 05:03]
alexandru.bala [Accesul la vectori]
asc:laboratoare:09 [2024/04/30 06:57] (current)
alexandru.bala [Solutia: “Blocked Matrix Multiplication”]
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>​/b / 2N<​sup>​3</​sup>​ -> 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).
asc/laboratoare/09.1714442591.txt.gz · Last modified: 2024/04/30 05:03 by alexandru.bala
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0