Je lis What every programmer should know about memory et je suis aux prises avec les notions de étiquettes de cache CPU (page 15.). Si je comprends bien, chaque ligne de cache de l'UC a une étiquette, qui spécifie à quelles données dans la mémoire principale correspond la ligne donnée. C'est-à-dire, si vous écrivez à une ligne particulière, vous utilisez la balise pour savoir où dans la RAM devriez-vous écrire le contenu de cette ligne. Inversement, si vous lisez des données de la RAM dans une ligne de cache L1, vous calculez une balise à partir de l'adresse RAM et la stockez quelque part, de sorte que vous sachiez d'où proviennent les données de la ligne de cache L1. Un tag est quelque chose comme un pointeur.Où est stockée l'étiquette de cache de l'UC L1d?
Je voudrais demander si cette balise elle-même est écrite quelque part dans la ligne de cache, ou y at-il une mémoire spéciale à côté du cache L1 pour stocker la balise?
Dans mon système, la taille de la ligne L1 est de 64 octets et un ponter est de 8 octets. Devrais-je viser à faire des objets fréquemment itérés dans mon programme pour ne pas dépasser 64 octets? Ou, étant donné que la taille de l'étiquette ne doit pas être supérieure à la taille d'un pointeur, devrais-je viser 56 octets?
Merci! Donc, vous voulez dire que la taille matérielle réelle de ma ligne de cache est de 64 + la taille d'un tag? –
Et un peu plus pour d'autres choses comme un bit valide, un bit sale, etc –
Encore un peu plus pour les bits de correction d'erreur et d'autres choses pour divers réglages de performance (par exemple - données de récence pour politique de remplacement). Il n'a même pas à résider dans la même structure matérielle, les tags et les données sont souvent partagés car vous n'avez même pas besoin d'accéder aux données sauf si vous frappez – Leeor