You are on page 1of 4

5.1.

Dans cet exercice, nous examinons les propriétés de localité de la


mémoire pour le calcul matriciel. Le code suivant est écrit en C, où les éléments
d'une même ligne sont stockés de manière contiguë. Supposons que chaque mot
soit un entier de 64 bits.
for (I=0 ; I<8 ; I++)for (J=0 ; J<8000 ; J++)
A
[I][J]=B[I][0]+A[J][I] ;
5.1.1 Combien d'entiers de 64 bits peuvent être stockés dans un bloc de cache
de 16 octets
?
Réponse :
1 octet = 8 bits
=> 16 octets = 128bits
=> Dans un bloc de cache de 16 octets, 2 entiers de 64 bits peuvent être stockés.
5.1.2 Quelles références de variables présentent une localité temporelle ?
Réponse :
Variable de localité temporelle : I, J, B[I][0]

5.1.3 Quelles sont les références de variables qui présentent une localité spatiale
? La localité est affectée à la fois par l'ordre de référence et par la disposition
des données. Le même calcul peut également être écrit ci-dessous dans Matlab,
qui diffère de C en ce que il stocke les éléments de la matrice dans la même
colonne de manière contiguë en mémoire.
for I=1:8for J=1:8000
A
(I,J)=B(I,0)+A(J,I) ;
end
end
Réponse : A[I][J]
5.1.4 Quelles références de variables présentent une localité temporelle ?
Réponse : I, J, B(I,0)

5.1.5 Quelles sont les références de variables qui présentent une localité spatiale
?
Réponse : A(J,I) et B(I,0)
5.1.6 Combien de blocs de cache de 16 octets sont nécessaires pour stocker tous
les éléments de la matrice
de 64 bits référencés à l'aide du stockage matriciel de Matlab ? Combien en
utilisant le stockage matriciel de C ? (Supposons que chaque ligne contienne
plus d'un élément).
Réponse :
Avec la matrice A, le code fait référence à 8*8000=64 000 entiers. Comme il y
a 2 entiers par bloc de 16 octets, nous avons besoin de 64 000/2 = 32 000 blocs.
En utilisant le stockage matriciel de C (qui stocke les éléments de la matrice
dans la même colonne de manière contiguë en mémoire), la matrice B a 8 blocs.
=> 32000 + 8 = 32 008 (blocs)
En utilisant le stockage matriciel de Matlab (qui stocke les éléments d'une
matrice dans la même ligne de manière contiguë en mémoire), la matrice B
comporte 4 blocs (2 entiers par bloc).
=> 32000 + 4 = 32 004 (blocs)

5.2 Les caches sont importants pour fournir une hiérarchie de mémoire
performante
aux processeurs. Voici une liste de références d'adresses mémoire de 64 bits,
données sous forme d'adresses de mots.
0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba, 0xfd
5.2.1 Pour chacune de ces références, identifiez l'adresse binaire de mot,
l'étiquette et l'index dans le cas d'une mémoire cache à mappage direct avec 16
blocs d'un mot. Indiquez également si chaque référence est un succès ou un
échec, en supposant que le cache est initialement vide.
Réponse :
16 blocs =24 => Index 4 bits
Adresse du Adresse binaire Étiquette Index Succès/
mot manque
0x03 0000 0011 0x0 0011 M
0xb4 1011 0100 0xb 0100 M
0x2b 0010 1011 0x2 1011 M
0x02 0000 0010 0x0 0010 M
0xbf 1011 1111 0xb 1111 M
0x58 0101 1000 0x5 1000 M
0xbe 1011 1110 0xb 1110 M
0x0e 0000 1110 0x0 1110 M
0xb5 1011 0101 0xb 0101 M
0x2c 0010 1100 0x2 1100 M
0xba 1011 1010 0xb 1010 M
0xfd 1111 1101 0xf 1101 M

5.2.2 Pour chacune de ces références, identifiez l'adresse binaire du mot,


l'étiquette, l'index et le décalage dans le cas d'un cache direct avec des blocs de
deux mots et une taille totale de huit blocs. Indiquez également si chaque
référence est un succès ou un échec, en supposant que
le cache est initialement vide.
Réponse :
8 blocs =23 => index de 3 bits
2 mots/bloc =21 => décalage de 1 bit
Adresse du Adresse binaire Étiquet Index Décal Succès/
mot te age manque
0x03 0000 0011 0x0 001 1 M
0xb4 1011 0100 0xb 010 0 M
0x2b 0010 1011 0x2 101 1 M
0x02 0000 0010 0x0 001 0 M
0xbf 1011 1111 0xb 111 1 M
0x58 0101 1000 0x5 100 0 M
0xbe 1011 1110 0xb 111 0 M
0x0e 0000 1110 0x0 111 0 M
0xb5 1011 0101 0xb 010 1 M
0x2c 0010 1100 0x2 110 0 M
0xba 1011 1010 0xb 101 0 M
0xfd 1111 1101 0xf 110 1 M

5.2.3 On vous demande d'optimiser la conception d'un cache pour les références
données. Il existe trois modèles de cache à mappage direct, tous avec un total de
huit mots de données :
■ C1 a des blocs de 1 mot
■ C2 a des blocs de 2 mots
■ C3 a des blocs de 4 mots.
Réponse :
C1 a des blocs de 1 mot => 8 blocs => index de 3 bits, pas de décalage de bits
C2 a des blocs de 2 mots => 4 blocs => Index de 2 bits + décalage de 1 bit
C3 a des blocs de 4 mots => 2 blocs => 1-bit Index + 2-bit offset

Adresse Adresse Étiqu Cache 1 Cache 2 Cache 3


du mot binaire ette Index Réussite/ Index Réussite/ Index Réussite/
Réussite Réussite Réussite
0x03 0000 0011 0x00 011 M 01 M 0 M
0xb4 1011 0100 0x16 100 M 10 M 1 M
0x2b 0010 1011 0x05 011 M 01 M 0 M
0x02 0000 0010 0x00 010 M 01 M 0 M
0xbf 1011 1111 0x17 111 M 11 M 1 M
0x58 0101 1000 0x0b 000 M 00 M 0 M
0xbe 1011 1110 0x17 110 M 11 H 1 H
0x0e 0000 1110 0x01 110 M 11 M 1 M
0xb5 1011 0101 0x16 101 M 10 H 1 M
0x2c 0010 1100 0x02 100 M 10 M 1 M
0xba 1011 1010 0x17 010 M 01 M 0 M
0xfd 1111 1101 0x1f 101 M 10 M 1 M

Taux d'échec de la mémoire cache 1 = 100 %


Taux d'échec de la mémoire cache 2 = 10/12 = 83 %.
Taux d'échec de la mémoire cache 3 = 11/12 = 92%
=> La mémoire cache 2 offre les meilleures performances.

You might also like