Académique Documents
Professionnel Documents
Culture Documents
3 / 49
Définitions
Dans ce cours, on appelle scalaire un nombre réel. Ex. : a = 0, b = π.
L’ensemble des nombres réels est noté R.
Dans nos programmes, un scalaire sera soit un float, un double.
Un vecteur est un tableau unidimensionnel de scalaire.
Ex. :
−1 2
π
a = 0 , b = .
6
−4
3 / 49
Définitions
Dans ce cours, on appelle scalaire un nombre réel. Ex. : a = 0, b = π.
L’ensemble des nombres réels est noté R.
Dans nos programmes, un scalaire sera soit un float, un double.
Un vecteur est un tableau unidimensionnel de scalaire.
Ex. :
−1 2
π
a = 0 , b = .
6
−4
Une matrice est une tableau bidimensionnel de scalaires.
Ex. :
3 −3.5 5.3
0 1 1 0
A= 1 0 3 , B = .
1 1 0 0
π 4 −4.1
3 / 49
Notations et conventions
Scalaire
Un nombre, un coefficient, une seule valeur.
Convention : lettre minuscule en italique.
a ∈ R.
4 / 49
Notations et conventions
Scalaire
Un nombre, un coefficient, une seule valeur.
Convention : lettre minuscule en italique.
a ∈ R.
Vecteur
Tableau de n scalaires.
Convention : on représente les vecteurs en colonne.
Convention : lettre minuscule en gras.
a1
a2
a = . ∈ Rn .
..
an
ai est la i-ième entrée du vecteur a.
4 / 49
Scalaires, vecteurs et matrices
Matrice
Tableau de m lignes et n colonnes.
Convention : lettre majuscule en gras.
a11 a12 · · · a1n
a21 a22 · · · a2n
A= .. ∈ Rm×n .
.. .. . .
. . . .
am1 am2 · · · amn
aij est l’entrée en ligne i et colonne j.
(Truc : toujours ligne avant colonne.)
5 / 49
Opérations sur les vecteurs
Multiplication par un scalaire :
v1 av1
v2 av2
av = a =
.. ..
. .
vn avn
Addition de vecteurs :
u1 v1 u1 + v1
u2 v2 u2 + v2
u+v = + = .
.. .. ..
. . .
un vn un + vn
6 / 49
Opérations sur les vecteurs
7 / 49
Propriétés du produit scalaire
Commutatif : u · v = v · u.
8 / 49
Propriétés du produit scalaire
Commutatif : u · v = v · u.
8 / 49
Propriétés du produit scalaire
Commutatif : u · v = v · u.
8 / 49
Propriétés du produit scalaire
Commutatif : u · v = v · u.
8 / 49
Les normes
9 / 49
Les normes
Propriétés :
Pour tout vecteur a ∈ Rn , kak ≥ 0.
kak = 0 si et seulement si a = 0.
kkak = |k|kak.
ka + bk ≤ kak + kbk.
9 / 49
Les normes
Exemples :
q
La norme-2 dite “euclidienne” : kak2 = a21 + a22 + · · · + a2n
10 / 49
Les normes
Exemples :
q
La norme-2 dite “euclidienne” : kak2 = a21 + a22 + · · · + a2n
p
p
La norme-p : kakp = |a1 |p + |a2 |p + · · · + |an |p
10 / 49
Les normes
Exemples :
q
La norme-2 dite “euclidienne” : kak2 = a21 + a22 + · · · + a2n
p
p
La norme-p : kakp = |a1 |p + |a2 |p + · · · + |an |p
10 / 49
Vecteurs unitaires
11 / 49
Vecteurs unitaires
a = aâ
11 / 49
Vecteurs unitaires
a
â = kak (calcul de la direction de a)
12 / 49
Espaces vectoriels
Tout objet qui est représentable par une liste de nombres peut être vu
comme un vecteur.
13 / 49
Espaces vectoriels
Tout objet qui est représentable par une liste de nombres peut être vu
comme un vecteur.
p(x) = a0 + a1 x + a2 x2 + · · · + an xn
13 / 49
Espaces vectoriels
Les points de R2 ou de R3 .
Les vélocités.
14 / 49
Espaces vectoriels
p1
14 / 49
Espaces vectoriels
p1
14 / 49
Espaces vectoriels
v1
p1
14 / 49
1 Scalaires, vecteurs et matrices
Définitions, notations et conventions
Opérations sur les vecteurs
Les normes
Espaces vectoriels
2 Matrices
Multiplication matrice-vecteur
Multiplication matrice-matrice
Matrices remarquables
3 Stockage en mémoire
Ligne vs colonne
4 Exercices
5 Devoirs
15 / 49
Multiplication matrice-vecteur
16 / 49
Multiplication matrice-vecteur
16 / 49
Multiplication par lignes
Notation : on note Lignei (A) la i-ième ligne de la matrice A.
Algorithme :
Input : A ∈ Rm×n et u ∈ Rn
Output : v ∈ Rm
pour i de 1 à m faire
vi = Lignei (A) · u // produit scalaire
17 / 49
Multiplication par colonnes
Algorithmes :
Input : A ∈ Rm×n et u ∈ Rn
Output : v ∈ Rm
v=0 // v est un vecteur
pour i de 1 à n faire
v = v + Coli (A) ui // ui est un scalaire
18 / 49
Multiplication matrice-matrice
C = AB
signifie que :
cij = Lignei (A) · Colj (B) .
19 / 49
Multiplication matrice-matrice
C = AB
signifie que :
cij = Lignei (A) · Colj (B) .
19 / 49
Transposée d’une matrice
|
La transposée d’une matrice A ∈ Rm×n est A ∈ Rn×m , la matrice
obtenue en échangeant mes lignes et les colonnes.
a11 a21 · · · am1
a11 a12 a13 · · · a1n a12 a22 · · · am2
a21 a22 a23 · · · a2n
|
A = ..
.. .. .. .. ,
A =
a13 a23 · · · am3
. . . . . .. .. .. ..
.
. . .
am1 am2 am3 · · · amn
a1n a2n · · · amn
20 / 49
Transposée d’une matrice
|
La transposée d’une matrice A ∈ Rm×n est A ∈ Rn×m , la matrice
obtenue en échangeant mes lignes et les colonnes.
a11 a21 · · · am1
a11 a12 a13 · · · a1n a12 a22 · · · am2
a21 a22 a23 · · · a2n
|
A = ..
.. .. .. .. ,
A =
a13 a23 · · · am3
. . . . . .. .. .. ..
.
. . .
am1 am2 am3 · · · amn
a1n a2n · · · amn
Remarques :
La diagonale ne change pas.
La taille de la matrice change lorsque m 6= n.
| | |
(AB) = B A .
20 / 49
Vecteur en tant que matrice
v1
On considère parfois un vecteur ... ∈ Rn comme une matrice de Rn×1 .
vn
21 / 49
Vecteur en tant que matrice
v1
On considère parfois un vecteur ... ∈ Rn comme une matrice de Rn×1 .
vn
21 / 49
Matrice symétrique
22 / 49
Matrice diagonale
Une matrice diagonale est une matrice carrée dont tout les éléments en
dehors de la diagonale sont nuls.
a11 0 0 ··· 0
0 a22 0 · · · 0
A= 0 0 a33 0
.. .. . .
. . . 0
0 0 · · · 0 ann
23 / 49
Matrice diagonale
24 / 49
Matrice identité
La matrice identité est une matrice diagonale dont tous les éléments de la
diagonale sont 1.
Par exemple, la matrice identité 3 × 3 est :
1 0 0
I3×3 = 0 1 0
0 0 1
Propriétés :
Pour tout vecteur v ∈ Rn , on a In×n v = v.
25 / 49
Inverse d’une matrice
Une matrice A est inversible s’il existe une matrice A−1 telle que :
AA−1 = I
26 / 49
Inverse d’une matrice
Une matrice A est inversible s’il existe une matrice A−1 telle que :
AA−1 = I
Propriétés :
Seules les matrices carrées peuvent être inversibles.
Lorsqu’elle existe, la matrice inverse est unique.
(A−1 )−1 = A.
(AB)−1 = B−1 A−1 .
| |
(A )−1 = (A−1 ) .
26 / 49
Inverse d’une matrice
27 / 49
Inverse d’une matrice
27 / 49
Inverse d’une matrice
27 / 49
Inverse d’une matrice diagonale
Même pour un n très grand, inverser une matrice diagonale n × n est très
simple :
−1
a11 0 0 0
0 a22 0 0
=
0 ...
0 0
0 0 0 ann
28 / 49
Inverse d’une matrice diagonale
Même pour un n très grand, inverser une matrice diagonale n × n est très
simple :
−1 1
a11 0 0 0 a11
0 0 0
0 1
0 a22 0 0 a22
0 0
=
0 ... ...
0 0 0 0 0
1
0 0 0 ann 0 0 0 ann
28 / 49
1 Scalaires, vecteurs et matrices
Définitions, notations et conventions
Opérations sur les vecteurs
Les normes
Espaces vectoriels
2 Matrices
Multiplication matrice-vecteur
Multiplication matrice-matrice
Matrices remarquables
3 Stockage en mémoire
Ligne vs colonne
4 Exercices
5 Devoirs
29 / 49
Pourquoi deux versions pour v = Au ?
Pour une matrixe A ∈ Rm×n , quelle version est la plus rapide ?
30 / 49
Pourquoi deux versions pour v = Au ?
Pour une matrixe A ∈ Rm×n , quelle version est la plus rapide ?
30 / 49
Pourquoi deux versions pour v = Au ?
Pour une matrixe A ∈ Rm×n , quelle version est la plus rapide ?
30 / 49
Pourquoi deux versions pour v = Au ?
Pour une matrixe A ∈ Rm×n , quelle version est la plus rapide ?
Selon la configuration matérielle, Lignei (A) · u peut est plus rapide que u + Coli (A) ui .
Le contraire est aussi possible.
30 / 49
Pourquoi ?
Pourquoi est-ce qu’un version est plus rapide que l’autre si le nombre et la
nature des FLOP sont rigoureusement les mêmes ?
31 / 49
Pourquoi ?
Pourquoi est-ce qu’un version est plus rapide que l’autre si le nombre et la
nature des FLOP sont rigoureusement les mêmes ?
Les CPU sont de plus en plus performants mais pas nécessairement plus
rapides.
Voir Wikipedia : Microprocessor chronology.
31 / 49
Core i7-9xx Cache Hierarchy
Exemples de tailles :
Un thread du coeur contient 16
registres de 64 bits.
Cache L1 : 32 KB, 2 par coeur.
Cache L2 : 256 KB, 1 par coeur.
Cache L3 : 8MB, commun pour
le CPU.
(Source : http://www.aristeia.com)
32 / 49
Hiérarchie de la mémoire
Vision simplifiée :
33 / 49
Hiérarchie de la mémoire
Vision simplifiée :
33 / 49
Hiérarchie de la mémoire
Vision simplifiée :
33 / 49
Minimiser les cache miss
Comment faire ?
34 / 49
Minimiser les cache miss
Comment faire ?
34 / 49
35 / 49
Je veux le
contenu de
la case #6.
35 / 49
Cache miss !
Un instant,
je demande à
la RAM.
35 / 49
Il me faut le
contenu de
la case #6.
35 / 49
Ok mais pendant qu’on y est, je te
donne le bloc de 6 à 9 d’un seul
coup.
35 / 49
Ok mais pendant qu’on y est, je te
donne le bloc de 6 à 9 d’un seul
coup.
35 / 49
Voici la case
#6.
35 / 49
35 / 49
Je veux le
contenu de
la case #7.
35 / 49
La voici
35 / 49
Je veux le
contenu de
la case #8.
35 / 49
La voici
35 / 49
Je veux le
contenu de
la case #9.
35 / 49
La voici
35 / 49
La voici
Wow, c’est
rapide !
35 / 49
Minimiser les cache miss
Les blocs de mémoire retournés par la RAM sont toujours des cases
consécutives.
(Remarque : dans un Core i7, le cache stocke des blocs de 64 octets. Soit l’équivalent de 16 int ou 8 double.)
36 / 49
Minimiser les cache miss
Les blocs de mémoire retournés par la RAM sont toujours des cases
consécutives.
(Remarque : dans un Core i7, le cache stocke des blocs de 64 octets. Soit l’équivalent de 16 int ou 8 double.)
36 / 49
Minimiser les cache miss
Les blocs de mémoire retournés par la RAM sont toujours des cases
consécutives.
(Remarque : dans un Core i7, le cache stocke des blocs de 64 octets. Soit l’équivalent de 16 int ou 8 double.)
Pour en savoir plus sur les impacts d’une bonne utilisation de la cache, voir
le vidéo : Scott Meyers ”CPU Caches and Why You Care” (lien disponible
sur la page Moodle).
36 / 49
Stockage d’une matrice en mémoire
Un tableau 1D est une bloc de mémoire contigu.
Un tableau 2D est simulé à partir d’un tableau 1D via le calcul des indices.
Il y a deux façon de faire : lignes VS colonnes.
37 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗
v3 a31 a32 a33 a34 u3
v4 a41 a42 a43 a44 u4
38 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗ a11 u1
v3 a31 a32 a33 a34 u3 a21 u2
v4 a41 a42 a43 a44 u4 a31 u3
a41 u4
38 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗ a11 a12 u1
v3 a31 a32 a33 a34 u3 a21 a22 u2
v4 a41 a42 a43 a44 u4 a31 a32 u3
a41 a42 u4
38 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗ a13 a12 u1
v3 a31 a32 a33 a34 u3 a23 a22 u2
v4 a41 a42 a43 a44 u4 a33 a32 u3
a43 a42 u4
38 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗ a13 a14 u1
v3 a31 a32 a33 a34 u3 a23 a24 u2
v4 a41 a42 a43 a44 u4 a33 a34 u3
a43 a44 u4
38 / 49
Multiplication matrice-vecteur
On considère un processeur dont la cache stoque 3 blocks de contenant chacun
l = 4 scalaires.
v = A ∗ u pour i de 1 à 4 faire
vi = Lignei (A) · u
v1 a11 a12 a13 a14 u1 Cache
v2 a21 a22 a23 a24 u2
= ∗ a13 a14 u1
v3 a31 a32 a33 a34 u3 a23 a24 u2
v4 a41 a42 a43 a44 u4 a33 a34 u3
a43 a44 u4
1 cache miss pour u + 4 cache miss par ligne = 17 cache miss au total.
38 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
0
v4 a41 a42 a43 a44 u4 0
v=
0
0
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 u1 a11 u1 +
v4 a41 a42 a43 a44 u4 a21 u2 0
a31 u3 v=
0
a41 u4 0
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 u1 a11 u1 +
v4 a41 a42 a43 a44 u4 a21 u2 a21 u1 +
a31 u3 v=
0
a41 u4 0
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 u1 a11 u1 +
v4 a41 a42 a43 a44 u4 a21 u2 a21 u1 +
a31 u3 v=
a31 u1 +
a41 u4 0
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 u1 a11 u1 +
v4 a41 a42 a43 a44 u4 a21 u2 a21 u1 +
a31 u3 v=
a31 u1 +
a41 u4 a41 u1 +
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 a12 u1 a11 u1 + a12 u2 +
v4 a41 a42 a43 a44 u4 a21 a22 u2 a21 u1 +
a31 a32 u3 v=
a31 u1 +
a41 a42 u4 a41 u1 +
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 a12 u1 a11 u1 + a12 u2 +
v4 a41 a42 a43 a44 u4 a21 a22 u2 a21 u1 + a22 u2 +
a31 a32 u3 v=
a31 u1 +
a41 a42 u4 a41 u1 +
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 a12 u1 a11 u1 + a12 u2 +
v4 a41 a42 a43 a44 u4 a21 a22 u2 a21 u1 + a22 u2 +
a31 a32 u3 v=
a31 u1 + a32 u2 +
a41 a42 u4 a41 u1 +
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 a12 u1 a11 u1 + a12 u2 +
v4 a41 a42 a43 a44 u4 a21 a22 u2 a21 u1 + a22 u2 +
a31 a32 u3 v=
a31 u1 + a32 u2 +
a41 a42 u4 a41 u1 + a42 u2 +
cause un cache miss
39 / 49
Multiplication matrice-vecteur
On refait la même chose mais avec la version colonne.
v = A ∗ u v=0
pour i de 1 à n faire
v1 a11 a12 a13 a14 u1
v = v + Coli (A) ui
v2 a21 a22 a23 a24 u2 Cache
= ∗
v3 a31 a32 a33 a34 u3
a11 a12 u1 a11 u1 + a12 u2 +
v4 a41 a42 a43 a44 u4 a21 a22 u2 a21 u1 + a22 u2 +
a31 a32 u3 v=
a31 u1 + a32 u2 +
a41 a42 u4 a41 u1 + a42 u2 +
cause un cache miss
1 cache miss pour u et 1 cache miss par colonne = 5 cache miss au total.
39 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
40 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
40 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
40 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
40 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
40 / 49
Multiplication de matrices
On considère C = AB où A, B, C ∈ Rn×n .
Chaque coefficients cij requiert O(n) opérations. Au total O(n3 ) opérations.
Qu’on procède par ligne ou par colonne, peu importe. . .
c11 · · · c1n a11 · · · a1n b11 · · · b1n
.. . . . . . . .
. . .. = .. . . . .. .. . . . ..
cn1 · · · cnn an1 · · · ann bn1 · · · bnn
41 / 49
Stockage de matrices par blocs
Une matrice est partitionnée en sous-matrices.
1 4 1 0
2 3 2 1
A=
1 0 2 5
0 1 1 0
1 4 1 0 1 0 2 5
A11 = , A12 = , A21 = , A22 = .
2 3 2 1 0 1 1 0
A11 A12
A=
A21 A22
41 / 49
Stockage de matrices par blocs
Multiplication de sous-blocs
Exemple :
A11 A12 B11 B12
A= , B=
A21 A22 B21 B22
A11 B11 + A12 B21 A11 B12 + A12 B22
AB =
A21 B11 + A22 B22 A21 B12 + A22 B22
42 / 49
Stockage de matrices par blocs
44 / 49
Stockage de matrices par blocs
Calcul des cache miss avec le stockage par blocs.
On choisir la taille des sous-matrices b de sorte que 3 sous-matrices
puissent être entièrement stockés dans le cache.
Soit N = n/b.
C11 · · · C1N A11 · · · A1N B11 · · · B1N
.. .. .. = .. .. .. .. .. ..
. . . . . . . . .
CN 1 · · · CN N AN 1 · · · AN N BN 1 · · · BN N
44 / 49
Stockage de matrices par blocs
Calcul des cache miss avec le stockage par blocs.
On choisir la taille des sous-matrices b de sorte que 3 sous-matrices
puissent être entièrement stockés dans le cache.
Soit N = n/b.
C11 · · · C1N A11 · · · A1N B11 · · · B1N
.. .. .. = .. .. .. .. .. ..
. . . . . . . . .
CN 1 · · · CN N AN 1 · · · AN N BN 1 · · · BN N
44 / 49
Stockage de matrices par blocs
Calcul des cache miss avec le stockage par blocs.
On choisir la taille des sous-matrices b de sorte que 3 sous-matrices
puissent être entièrement stockés dans le cache.
Soit N = n/b.
C11 · · · C1N A11 · · · A1N B11 · · · B1N
.. .. .. = .. .. .. .. .. ..
. . . . . . . . .
CN 1 · · · CN N AN 1 · · · AN N BN 1 · · · BN N
5 1
1
1
a
3 1
b 4 1
5 2 |
b 3 4 5
3
c 4 c 0 0 0
5 ∞
46 / 49
Exercices
47 / 49
Exercices
On considère une machine dont le cache contient des blocs dont la taille
correspond à 8 int. Comptez le nombre de cache miss qui ont lieu
lorsqu’on exécute le code suivant. On suppose que t pointe vers un tableau
de taille 20 et qu’initialement aucune donnée pertinente n’est dans le cache.
48 / 49
Devoirs
49 / 49