Vu le code suivant:Cache miss & Cache Hit
typedef int array[4][4];
void transpose2(array dst, array src)
{
int i, j;
for (i=0; i<4; i++) {
for (j=0; j<4; j++) {
dst[i][j] = src[j][i];
}
}
}
Hypothèses:
int est 4 octets
tableau
src
commence à l'adresse0
,dst
commence à l'adresse64
la taille de la mémoire cache est
32
octets, au début de la mémoire cache est videil est une mémoire cache L1 travaillant sous la cartographie directe en utilisant écriture immédiate, écriture allouer
la taille du bloc est de 16 octets
J'essaie de comprendre le succès de cache miss & cache de dst
et src
.
La question - pour remplir les tables de src et dst tableaux, où ils sont vides au début: Before the run
D'abord, je vais vous présenter la solution de mon professeur: After the run
Voici ma solution, mais quelque part, je fais une erreur:
en supposant que je lance i
de 1 to 4
et non de 0 to 3
Première itération:
src dst
1,1-> 1,1
2,1-> 1,2
3,1-> 1,3
4,1-> 1,4
Deuxième itération:
src dst
1,2 ->2,1
2,2 ->2,2
3,2 ->2,3
4,2 ->2,4
Troisième itération:
src dst
1,3 -> 3,1
2,3 -> 3,2
3,3 -> 3,3
4,3 -> 3,4
Quatrième itération:
src dst
1,4 -> 4,1
2,4 -> 4,2
3,4 -> 4,3
4,4 -> 4,4
Je ne comprends pas pourquoi il ya des HITS du tout aux tables de dst
, Je sais que je me trompe, quelqu'un peut-il s'il vous plaît expliquer pourquoi y a-t-il en effet des HITS dans la solution ci-dessus?
Cordialement Ron
Je ne vois toujours pas pourquoi les quatre HITS appartiennent bien à leurs index, pouvez-vous expliquer? – ron
@ron: Qu'attendez-vous? –
Très simple, commencez par le début: 11 vers 11: c'est un manque puisque le cache est vide. Maintenant, le cache a 11,12,13,14. Ensuite, 21 à 12: le cache a déjà 12 alors c'est un HIT (compris!). Le cache n'a encore que 11,12,13,14. Ensuite, 31 à 13: le cache a déjà 13, alors c'est un HIT de ma compréhension, mais la réponse dit MISS. Pourquoi ? – ron