Découpage d’adresse d’un cache et temps d’accès mémoire moyen
Saisissez la taille du cache, la taille de ligne et l’associativité pour voir comment une adresse se découpe en étiquette, index et offset, sous forme de nombres de bits et d’une barre. Le calculateur donne aussi le temps d’accès mémoire moyen (AMAT) à partir du temps de succès, du taux de défauts et de la pénalité de défaut, pour voir l’effet de l’organisation du cache sur les performances.
Résultats
Découpage de l’adresse (bits de poids fort à gauche)
Saisissez des puissances de deux pour la taille du cache, la taille de ligne et l’associativité, avec une taille divisible par taille de ligne × voies. Le découpage ne peut pas non plus être calculé lorsque les bits d’offset et d’index dépassent ensemble la largeur d’adresse.
Lignes
–
Ensembles
–
Étiquette
–
Index
–
Offset
–
Temps d’accès mémoire moyen (AMAT)
–
Voir sous forme de graphique
Les autres entrées gardent leur valeur actuelle tandis que l'entrée choisie varie de 1/4 à 4 fois sa valeur actuelle. Le point rouge est la valeur actuelle.
Découper une adresse en trois champs
Un cache conserve les données de la mémoire principale par unités appelées lignes (blocs). Le nombre de lignes vaut taille ÷ taille de ligne, et le nombre d’ensembles vaut lignes ÷ associativité. En partant des bits de poids faible de l’adresse, l’offset sélectionne un octet dans la ligne et occupe log₂(taille de ligne) bits, l’index sélectionne un ensemble et occupe log₂(ensembles) bits, et les bits de poids fort restants forment l’étiquette (tag). Avec les valeurs par défaut de 32 bits, 32 KB, 64 B et 8 voies, on obtient 512 lignes et 64 ensembles, soit un offset de 6 bits, un index de 6 bits et une étiquette de 32 − 6 − 6 = 20 bits.
Ce que change l’associativité
Doubler l’associativité à taille et taille de ligne égales divise par deux le nombre d’ensembles : l’index perd un bit et l’étiquette en gagne un. Une seule voie correspond à un cache à correspondance directe (direct-mapped), et un nombre de voies égal au nombre de lignes (512 avec les valeurs par défaut) donne un cache entièrement associatif, avec un seul ensemble et un index de 0 bit. Une associativité plus élevée réduit les défauts de conflit, dus à des adresses qui se concentrent dans le même ensemble, mais davantage d’étiquettes doivent être comparées en parallèle, ce qui coûte en surface de comparateurs, en consommation et en temps de succès.
Temps d’accès mémoire moyen (AMAT)
Les caches doivent se comparer sur le temps d’accès mémoire moyen, et non sur le seul taux de défauts. AMAT = temps de succès + taux de défauts × pénalité de défaut, soit 4 + 0,05 × 100 = 9 cycles avec les valeurs par défaut. Même un taux de défauts de 5 % fait plus que doubler la moyenne, car la pénalité est importante. Abaisser le taux de défauts avec un cache plus grand ou plus associatif ne sert à rien si le temps de succès augmente, puisque chaque accès le paie. Pour des caches à plusieurs niveaux, remplacez la pénalité de défaut de L1 par temps de succès L2 + taux de défauts L2 × pénalité de défaut L2.
Usage en conception et pièges
Des lignes plus longues exploitent la localité spatiale et réduisent le taux de défauts, mais chaque défaut transfère davantage de données, ce qui augmente la pénalité de défaut, et un nombre de lignes plus faible accroît les conflits ; la plupart des CPU actuels utilisent 64 B. Les caches L1 adoptent souvent une organisation à index virtuel et étiquette physique (VIPT), qui lit l’ensemble pendant que le TLB traduit l’adresse. Maintenir l’index et l’offset à l’intérieur de l’offset de page limite la taille à taille de page × associativité, par exemple 4 KB × 8 voies = 32 KB. La largeur de l’étiquette détermine aussi la taille de la mémoire des étiquettes.
Une ligne de 64 octets = 2⁶ donne un déplacement de 6 bits. Le nombre de lignes est 32 KB ÷ 64 B = 32768 ÷ 64 = 512 = 2⁹ ; en correspondance directe, le nombre de lignes est égal au nombre d’ensembles, d’où un index de 9 bits. Le reste constitue l’étiquette : 32 − 9 − 6 = 17 bits. La valeur de 19 bits correspond à un cache associatif à 4 voies dont l’index perd 2 bits ; elle ne s’applique pas à la correspondance directe.
Le nombre de lignes est 32 KB ÷ 64 B = 512. Avec 4 voies, chaque ensemble contient 4 lignes ; le nombre d’ensembles est donc 512 ÷ 4 = 128 = 2⁷, d’où un index de 7 bits et une étiquette de 32 − 7 − 6 = 19 bits. 512 est le nombre de lignes lui-même, c’est-à-dire le nombre d’ensembles en correspondance directe. Augmenter l’associativité réduit le nombre d’ensembles, ce qui accroît d’autant la taille de l’étiquette et le nombre de comparateurs. 32 résulte de la division erronée de la taille de ligne 64 par le nombre de voies.
Temps moyen d’accès mémoire = temps de succès + taux de défauts × pénalité de défaut = 2 + 0.04 × 150 = 2 + 6 = 8 cycles. Le temps de succès s’applique à tous les accès, et la pénalité de défaut ne s’ajoute qu’en cas de défaut. 6 cycles ne compte que la part des défauts et oublie le temps de succès. 152 cycles est la durée d’un accès en défaut, et non la moyenne. Même avec un taux de défauts de seulement 4%, la moyenne est multipliée par 4.
Le déplacement occupe les 6 bits de poids faible (64 = 2⁶) et l’index les 6 bits suivants (64 ensembles = 2⁶). 0x1234 = 4660 divisé par 64 donne 4660 ÷ 64 = 72, reste 52 ; le numéro de ligne est donc 72. Le numéro d’ensemble est le reste de la division du numéro de ligne par le nombre d’ensembles : 72 mod 64 = 8. 52 est le reste de la division par 64, c’est-à-dire la position dans la ligne (déplacement). 4 n’est que le dernier chiffre hexadécimal de l’adresse et n’a aucun rapport avec l’ensemble.
Questions fréquentes
Combien de bits d’étiquette compte un cache à correspondance directe de 32 KB avec des lignes de 64 B et des adresses de 32 bits ?
L’offset fait log₂64 = 6 bits, et 32 KB ÷ 64 B = 512 lignes donnent un index de 9 bits ; l’étiquette fait donc 32 − 9 − 6 = 17 bits. En passant à 8 voies, le nombre d’ensembles tombe à 64, ce qui donne un index de 6 bits et une étiquette de 20 bits.
Combien de bits d’index compte un cache entièrement associatif ?
Zéro. Il n’y a qu’un seul ensemble : tous les bits sauf l’offset forment l’étiquette, qui est comparée à celle de chaque ligne. Vous pouvez le vérifier ici en réglant l’associativité sur le nombre de lignes.
Qu’est-ce qui aide le plus : diviser le taux de défauts par deux ou réduire le temps de succès d’un cycle ?
Avec les valeurs par défaut (temps de succès de 4 cycles, taux de défauts de 5 %, pénalité de défaut de 100 cycles), un taux de défauts de 2,5 % abaisse l’AMAT de 9 à 6,5 cycles, tandis qu’un temps de succès de 3 cycles donne 8 cycles : ici, le taux de défauts compte davantage. Avec une faible pénalité de défaut, la réponse peut s’inverser ; comparez donc à l’aide de la formule de l’AMAT.