Calcul de la mémoire cache

Japprends la logique des mémoires cache. Je me demande si vous pouvez vérifier que jai bien compris. Si une mémoire cache dans le champ tag contient 16 bits, le champ défini contient 10 bits et loctet dans le champ de bloc est 6 bits, alors je peux déduire uniquement de ces informations que la capacité est de 128 ko et quelle est associative à 2 voies avec une taille de bloc de 64 octets car 2⁶ = 64 octets de loctet dans le champ de bloc.2¹⁰ = 1024 mais une autre capacité avec un autre nombre dassociativité pourrait-elle satisfaire les exigences?

Japprends que les formules sont

nombre de blocs = capacité / taille des blocs

nombre densembles = nombre de blocs / #associativité

Par conséquent Je pourrais doubler à la fois lassociativité à 4 voies mais je ne pouvais pas satisfaire les exigences avec un cache à 4 voies car il wo uld nécessite un autre nombre de bits dans le champ set.

Ai-je bien compris?

Réponse

Cette image vous aide-t-elle à comprendre le fonctionnement des caches associatifs structurellement?

entrez la description de limage ici empruntée à ici

En un mot, les bits de décalage de bloc déterminent la taille de votre bloc (combien doctets sont dans une ligne de cache, combien de colonnes si vous voulez). Les bits dindex déterminent le nombre de lignes dans chaque ensemble. La capacité du cache est donc de 2 ^ (blockoffsetbits + indexbits) * #sets. Dans ce cas, cest 2 ^ (4 + 4) * 4 = 256 * 4 = 1 kilo-octet.

Pour la même taille de cache (capacité), si vous deviez passer de 4 voies à deux – way set associatif, cest bidirectionnel associatif, vous pouvez le faire soit en doublant les lignes de chaque ensemble, soit en doublant les colonnes de chaque ensemble, cest-à-dire en doublant le nombre de lignes de cache ou en doublant la taille du bloc.

Si vous décidiez de doubler le nombre de lignes, vous finiriez par diviser votre adresse 12 bits en un index de 5 bits et un décalage de bloc de 4 bits, laissant une balise de 3 bits.

Si vous décidiez de doubler la taille du bloc, vous finiriez par diviser votre adresse 12 bits en un index 4 bits, un décalage de bloc de 5 bits, laissant une balise 3 bits.

Donc, pour réitérer, je pense que les formules gouvernantes pour les caches associatifs sont:

Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits) 

Dans votre exemple initialement indiqué, je ne  » Je pense que vous pouvez déduire la taille du cache en fonction de la taille de vos champs de bits dadresse respectifs sans faire dhypothèse sur ut lassociativité. Si il sagit dune association bidirectionnelle, alors vous pouvez dire:

Cache Capacity = (2 ^ 6) * (2 ^ 10) * (2) = 2 ^ 18 = 2 ^ 8 kilo-octets = 256 kilo-octets. Je ne sais pas comment vous êtes arrivé à 128 kilo-octets. Ce serait le cas s’il était associatif unidirectionnel (mappé direct).

Pour une capacité de cache de 128 Ko (2 ^ 17 octets), vous pourrait faire un cache associatif à 4 voies avec une taille de bloc de 64 octets en disant:

2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512 

… et donc en allouant 9 bits dindex, 4 bits de décalage de bloc , et les autres (19) bits de balise.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *