2012-04-09 4 views
1

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'adresse 0, dst commence à l'adresse 64

  • la taille de la mémoire cache est 32 octets, au début de la mémoire cache est vide

  • il 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

Répondre

5

Parce que le cache est généralement organisé en lignes, chacune de la taille n octets. Lorsque vous accédez à une adresse mémoire particulière, cette adresse ainsi que les n-1 octets qui l'entourent sont lues dans le cache.

+0

Je ne vois toujours pas pourquoi les quatre HITS appartiennent bien à leurs index, pouvez-vous expliquer? – ron

+0

@ron: Qu'attendez-vous? –

+0

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