Ligne de la taille des caches L1 et L2
À partir d'une précédente question sur ce forum, j'ai appris que dans la plupart des systèmes de mémoire, le cache L1 est un sous-ensemble de la mémoire cache L2 désigne toute entrée retiré de L2 est également supprimé de L1.
Alors maintenant ma question est comment puis-je déterminer une entrée correspondante dans le cache L1 pour une entrée dans le cache L2. Les seules informations contenues dans la L2 entrée est la balise de l'information. Basé sur cette information sur le tag, si je re-créer l'addr il peut s'étendre sur plusieurs lignes dans le cache L1 si la ligne de la taille de la L1 et de la L2 cache ne sont pas les mêmes.
Ne l'architecture vraiment à vous soucier de rinçage à la fois les lignes ou il maintient juste en L1 et en L2 cache avec la même ligne de taille.
Je comprends que c'est une décision politique, mais je veux savoir la technique couramment utilisée.
- Est-il un processeur avec différentes tailles pour les L1 et L2?
- L'original Pentium 4 a 64 octets L1 lignes de cache et de 128 octets de la mémoire cache L2 lignes, apparemment.
- quelqu'un peut-il des commentaires sur l'architecture nehalem ??? J'ai traversé le papier, sur "Cache Organisation et Gestion de la Mémoire de l'Intel Nehalem l'Architecture de l'Ordinateur". Ici, ils ont juste oublier le cache de la ligne de taille une fois (64 octets) ??
- Le Pentium 4 a indépendant caches L1 et L2. J'imagine que les projets qui nécessitent le cache L1 être un sous-ensemble de la mémoire cache L2 serait de garder la ligne les mêmes tailles.
- Si vous êtes en cours d'exécution sur un système x86, l'instruction CPUID renvoie définitif de la ligne de mémoire cache les informations de taille. Google pour CPUID et de taille de ligne de cache pour quelques beaux exemples.
- Je ne comprends pas très bien cette question. Si les caches sont inclus, ainsi qu'une adresse est supprimée à partir de la L2, puis un invalider est envoyé à la L1 pour supprimer l'adresse de là aussi bien.
Vous devez vous connecter pour publier un commentaire.
Core i7 de la ligne de tailles en L1 , L2 et L3 sont les mêmes: c'est de 64 Octets.
Je suppose que cela simplifie le maintien de la propriété et de la cohérence.
Voir page 28 de : https://www.scss.tcd.ie/Jeremy.Jones/CS3021/5%20caches.pdf
Cache-Lignes taille est (généralement) de 64 octets.
En outre, prendre un coup d'oeil à cet article très intéressant sur les processeurs caches:
Galerie de Cache du Processeur d'Effets
Vous trouverez les chapitres suivants:
La technique la plus courante de la manipulation cache de bloc de taille strictement inclusive cache de la hiérarchie est d'utiliser la même taille de cache de blocs pour tous les niveaux de cache pour que l'inclusion de la propriété est appliquée. Il en résulte une plus grande étiquette de frais généraux que si le niveau plus élevé de cache utilisé des blocs plus importants, qui utilise non seulement la surface de la puce, mais peut également augmenter la latence depuis la hausse du niveau des caches généralement l'utilisation progressive d'accès (où les balises sont vérifiés avant la partie de données d'accès). Cependant, il simplifie également le design un peu et réduit le gaspillage de la capacité de la partie inutilisée des données. Il ne prend pas un grand faible portion de 64 octets, blocs de 128 octets cache des blocs afin de compenser pour la zone de pénalité d'un supplément de 32 bits de la balise. En outre, plus de cache de bloc d'effet de l'exploitation spatial plus vaste localité peut être fourni par un nombre relativement simple de pré-chargement, qui a les avantages qu'aucune capacité n'est pas utilisée si la proximité morceau n'est pas chargé (pour économiser la bande passante de la mémoire ou de réduire la latence sur un conflit de lecture de la mémoire) et que la contiguïté de pré-chargement ne doivent pas être limitées à une plus grande aligné morceau.
Une commune de moins divise le cache de bloc en secteurs. Avoir la taille de secteur la même que la taille de bloc pour un niveau inférieur caches permet d'éviter le problème de l'excès-l'invalidation puisque chaque secteur dans le niveau supérieur du cache a son propre bit valide. (En fournissant tous de la cohérence de l'état des métadonnées pour chaque secteur, plutôt que de simplement la validité ne peut éviter l'excès d'écriture différée utilisation de la bande passante lorsque au moins un secteur dans un bloc n'est pas sale/modifiées et de la cohérence de surcharge [par exemple, si un secteur est dans un état partagé et un autre est à l'exclusive de l'etat, une écriture dans le secteur de l'exclusive de l'etat pourrait impliquer aucune cohérence de la circulation—si snoopy plutôt que le répertoire de la cohérence est utilisé].)
Le domaine des économies d'sectoriel cache de blocs ont été particulièrement importantes lorsque les balises ont été sur la puce du processeur, mais les données ont été hors de la puce. Évidemment, si les données le stockage de surface comparable à la taille de la puce du processeur (ce qui n'est pas déraisonnable), puis 32 bits balises avec 64 octets, blocs de prendre à peu près une 16ème (~6%) du processeur de la région, tandis que des blocs de 128 octets prendrait la moitié autant. (IBM POWER6+, lancé en 2009, est peut-être le plus récent processeur à utiliser sur-processeur-puce balises et hors-processeur de données. Le stockage de données à forte densité incorporé DRAM et des balises à faible densité de SRAM, comme IBM l'a fait, exagère cet effet.)
Il convient de noter qu'Intel utilise "ligne de cache" pour désigner la plus petite unité et le "cache" du secteur de la grande unité. (C'est une des raisons pourquoi j'ai utilisé "cache de bloc" dans mon explication.) À l'aide d'Intel de terminologie, il serait très inhabituel pour les lignes de cache à la taille varie entre les niveaux de cache, indépendamment de savoir si les niveaux étaient strictement inclus, strictement exclusif, ou utilisé une autre politique d'inclusion.
(Stricte exclusion utilise généralement le niveau supérieur du cache de victime d'une cache où les expulsions dans le bas du cache de niveau sont insérés dans la mémoire cache de niveau supérieur. Évidemment, si le bloc de tailles différentes et de sectorisation n'a pas été utilisé, puis une expulsion nécessiterait le reste de l'immeuble pour être lu à partir de quelque part et invalidé si présent dans le niveau inférieur du cache. [Théoriquement, stricte exclusion pourrait être utilisé inflexibles cache en contournant où la L1 expulsion serait contournement de L2 et aller en L3 et L1/L2 cache ne serait alloué à soit L1 ou L2, en contournant L1 pour certains accès. Le plus proche de cette mise en œuvre, j'en suis conscient, c'est Itanium du contournement de L1 pour floating-point d'accès; cependant, si je me souviens bien, la L2 est inclusive de la L1.])
Généralement, dans un accès à la mémoire principale de 64 octets de données et 8 octets de parité/ECC (je ne me souviens plus exactement lequel) est accessible. Et c'est plutôt compliqué à gérer différentes tailles de ligne de cache en mémoire différents niveaux. Il est a noter que la ligne de cache taille serait plus corrélée à la parole de l'alignement de la taille que l'architecture qu'autre chose. Sur cette base, une taille de ligne de cache est très peu susceptible d'être différente de l'accès à la mémoire de la taille. Maintenant, les bits de parité sont pour l'utilisation du contrôleur de mémoire - so taille de ligne de cache généralement est de 64 octets. Le processeur vraiment contrôles de très peu au-delà des registres. Tout le reste se passe dans l'ordinateur est plus sur l'obtention de matériel pour optimiser les performances du CPU. Dans ce sens également, il ne serait vraiment pas de sens pour l'importation supplémentaire de complexité en faisant de ligne de cache de tailles différentes à différents niveaux de la mémoire.