Академический Документы
Профессиональный Документы
Культура Документы
Localit temporelle
12 00
Localit spatiale
1000
Jusqu des tailles de 16 kB, toutes les donnes se trouvent dans L1. De 16 kB 256 kB les donnes se trouvent dans L2.
1200
L1
8 00
6 00
Au fur et mesure que le Pas augmente, le nombre de fautes dans L1 augmente. Pour des Pas > 7, chaque accs cause une faute dans L1.
4 00
xe
L2
200
0 s1 s3 s5
Mem
8k 2k
8m
Pas-1
s15
2m
512k
s13
256 kB
s7
s9
s11
128k
32k
1024k
512k
256k
128k
8m
4m
2m
64k
32k
16k
8k
4k
2k
1k
s1
s2
s3
s4
s5
s6
s7
s8
Cours # 9
29
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
4.2 - Rorganiser les boucles pour amliorer la localit spatiale - Supposons un morceau de code qui effectue le produit de deux matrices : Soit c11 = a11b11 + a12b21 c12 = a11b12 + a12b22 c11 c12 a11 a12 b11 b12 c21 = a21b11 + a22b21 c21 c22 = a21 a22 b21 b22 c22 = a21b12 + a22b22 Alors, le code qui effectue ce calcul peut prendre les 6 formes suivantes : Version j-i-k Version i-j-k for (i = 0; i < N; i++) for (j = 0; j < N; j++) { sum = 0.0; for (k = 0; k < N; k++) sum += A[i][k] * B[k][j]; C[i][j] += sum; } for (j = 0; j < N; j++) for (i = 0; i < N; i++) { sum = 0.0; for (k = 0; k < N; k++) sum += A[i][k] * B[k][j]; C[i][j] += sum; }
Cours # 9
30
Cours # 9
15
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
4.2 - Rorganiser les boucles pour amliorer la localit spatiale Version k-j-i Version j-k-i for (j = 0; j < N; j++) for (k = 0; k < N; k++) { r = B[k][j]; for (i = 0; i < N; i++) C[i][j] += A[i][k] * r; } Version k-i-j for (k = 0; k < N; k++) for (i = 0; i < N; i++) { r = A[i][k]; for (j = 0; j < N; j++) C[i][j] += r * B[k][j]; }
Cours # 9
La seule diffrence entre ces versions est lordre dans lequel les boucles sont effectues
for (k = 0; k < N; k++) for (j = 0; j < N; j++) { r = B[k][j]; for (i = 0; i < N; i++) C[i][j] += A[i][k] * r; } Version i-k-j for (i = 0; i < N; i++) for (k = 0; k < N; k++) { r = A[i][k]; for (j = 0; j < N; j++) C[i][j] += r * B[k][j]; }
31
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
- La performance (en # cycles / itration) varie considrablement selon la version : - Les 2 premires versions (i-j-k et Taille des blocs de cache (B) = 32 bytes 60 Beaucoup daccs j-i-k) sont plus performantes car Beaucoup de fautes les accs A ont une meilleure 50 localit spatiale tandis que pour B, ils ont une meilleure localit 40 temporelle. Beaucoup daccs
Cycles/iteration Cycles / itration
- Les 2 dernires versions (k-i-j et i-k-j) accdent B et C en Pas1, mais puisquelles font plus daccs en mmoire, elle sont un peu moins performantes que les 2 premires.
30
Peu de fautes
20
10
- Les versions (j-k-i et k-j-i) sont 0 les moins performantes car elles 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 Array size (n) font beaucoup daccs en Taille des matrices (N) mmoire et utilisent un Le nombre daccs en mmoire est aussi important accs Pas-N aux donnes.
Cours # 9 ELE784 - Ordinateurs et programmation systme 32
Cours # 9
16
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
4.3 - Utiliser le blocage pour amliorer la localit temporelle - Dans les exemples prcdents, il est vident que la performance diminue avec laugmentation de la taille des matrices. - En fait, la localit temporelle dcroit mesure que la taille des matrices augmente car la cache ne peut plus en contenir une portion suffisamment. - La technique de "Blocage" peut corriger ce problme en divisant les donnes en bloc et en maximisant de travail fait avec chacun de ces blocs. Par exemple : Une matrice assez grosse peut tre divise en sous-matrices a11 a12 a13 a14 a11 a12 a13 a14 o A11 = A12 = a21 a22 a23 a24 a21 a22 a23 a24 A11 A12 a31 a32 a33 a34 a31 a32 a33 a44 A21 A22 A21 = A22 = a41 a24 a43 a44 a41 a42 a43 a44 Soit C11 = A11B11 + A12B21 C11 C12 A11 A12 B11 B12 C12 = A11B12 + A12B22 C21 = A21B11 + A22B21 C21 C22 = A21 A22 B21 B22 C22 = A21B12 + A22B22
Cours # 9 ELE784 - Ordinateurs et programmation systme 33
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
4.3 - Utiliser le blocage pour amliorer la localit temporelle - Dans le cas du produit matriciel, rien noblige de partitionner les matrices en en sous-matrices "carres" de mme taille. Donne le partitionnement suivant : Le code suivant : A11 A12 a a a a int en = bsize * (N/bsize); for (kk = 0; kk < en; kk += bsize) { for (jj = 0; jj < en; jj += bsize) { for (i = 0; i < N; i++) { for (j = jj; j < jj+bsize; j++) { sum = C[i][j]; for (k = kk; k < kk+bsize; k++) sum += A[i][k] * B[k][j]; C[i][j] = sum; } } } }
Cours # 9
11 12 13 14
A=
a21 a22 a23 a24 a31 a32 a33 a34 a41 a24 a43 a44 b11 b21 b31 b41 c11 c21 c31 c41 b12 b22 b32 b24 c12 c22 c32 c24 b13 b23 b33 b43 c13 c23 c33 c43 b14 b24 b34 b44 c14 c24 c34 c44
A21 A22 A11 A12 A11 A12 B11 B12 B21 B22 C11 C12 C21 C22 C11 C12 C21 C22
34
B=
C=
Cours # 9
17
Mmoire-cache et optimisation
4.0 - Concevoir du code adapt la cache
4.3 - Utiliser le blocage pour amliorer la localit temporelle - Grce la technique de "blocage", le code du produit matriciel a une performance bien meilleure, sauf pour les petites matrices. - En fait, cette version est presque insensible la taille des matrices. - Les accs A bnficies dune bonne localit spatiale et temporelle. - Les accs B ont une bonne localit temporelle, et pour C une bonne localit spatiale.
Cours # 9
50
Cycles/iteration Cycles / itration
40
30
20
10
35
Cours # 9
18