Vous êtes sur la page 1sur 4

Mmoire-cache et optimisation

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

Read througput (MB/s) Taux de lecture(MB/s)

Taux Read throughput (MB/s) de lecture (MB/s)

1000 800 600 400 200 0

Main memory Mmoire region RAM

L2 cache Cache L2 region

L1 cache Cache L1 region

512k

s13

256 kB

s7

s9

s11

800 700 600 500 400 300 200 100 0

128k

32k

unOne access per cacheligne accs par line

1024k

512k

256k

128k

8m

4m

2m

64k

32k

16k

8k

4k

2k

1k

s1

s2

s3

s4

s5

s6

s7

s8

s9 s10 s11 s12 s13 s14 s15 s16

Cours # 9

Working Taille des blocs set size (bytes) de donnes (bytes)

Stride (words) Taille des Pas (stride)

ELE784 - Ordinateurs et programmation systme

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

ELE784 - Ordinateurs et programmation systme

30

Cours # 9

ELE784 - Ordinateurs et programmation systme

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

ELE784 - Ordinateurs et programmation systme

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

kji jki kij ikj jik ijk

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

Moins daccs Quelques de fautes

Cours # 9

ELE784 - Ordinateurs et programmation systme

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=

ELE784 - Ordinateurs et programmation systme

Cours # 9

ELE784 - Ordinateurs et programmation systme

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

Taille des blocs de cache (B) = 32 bytes


60

Beaucoup daccs Beaucoup de fautes


kji jki kij ikj jik ijk bijk (bsize = 25) bikj (bsize = 25)

50
Cycles/iteration Cycles / itration

40

30

Beaucoup daccs Peu de fautes

20

10

Moins daccs et peu de fautes


25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 400 Array matrices (N) Taille des size (n)

ELE784 - Ordinateurs et programmation systme

35

Cours # 9

ELE784 - Ordinateurs et programmation systme

18