Professional Documents
Culture Documents
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.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