La compréhension de cache du PROCESSEUR et de la ligne de cache
J'essaie de comprendre comment le cache du PROCESSEUR est de l'exploitation. Disons que nous avons cette configuration (par exemple).
- Taille du Cache 1024 octets
- Ligne de Cache de 32 octets
- 1024/32 = 32 lignes de cache tous ensemble.
- Singel ligne de cache peut stocker 32/4 = 8 ints.
1) Selon la configuration de la longueur de la balise doit être 32-5=27 bits, et la taille de l'index de 5 bits (2^5 = 32 adresses pour chaque octet de la ligne de cache).
Si la taille totale du cache est de 1024 et il y a 32 lignes de cache, où est tags+index sont stockés? (Il y a un autre 4*32 = 128 octets.) Signifie que la taille réelle de la mémoire cache est de 1024+128 = 1152?
2) Si la ligne de cache est de 32 octets dans cet exemple, cela signifie que 32 octets obtention copié dans la mémoire cache whenerever CPU besoin pour obtenir de nouveaux octets de RAM. Suis-je en droit de supposer que la ligne de cache de la position de l'octet sera déterminé par son adresse?
C'est ce que je veux dire: si le CPU a demandé octet à [FF FF 00 08]
, puis disponibles de ligne de cache sera rempli avec des octets de [FF FF 00 00]
à [FF FF 00 1F]
. Et notre requseted seul octet sera à la position [08]
.
3) Si la déclaration est correcte, ça veut dire que 5 bits utilisés pour l'indice, sont techniquement pas nécessaire puisque tous les 32 octets sont dans la ligne de cache de toute façon?
S'il vous plaît laissez-moi savoir si j'ai eu quelque chose de mal.
Grâce
Vous devez vous connecter pour publier un commentaire.
Un cache est constitué de données et de tag de RAM, disposés comme un compromis entre le temps d'accès vs efficacité et la disposition physique. Il vous manque une statistique importante: nombre de façons (ensembles). Vous avez rarement 1-chemin des caches, parce qu'ils exécutent pathologiquement mal avec des motifs simples. De toute façon:
1) Oui, les balises de prendre de l'espace supplémentaire. C'est la partie de la conception de compromis - vous ne voulez pas qu'il soit une grande partie de la surface totale, et pourquoi la taille de la ligne n'est pas seulement 1 octet ou 1 mot. Aussi, toutes les balises d'un index sont accédées simultanément, et qui peuvent affecter l'efficacité et la mise en page s'il y a un grand nombre de façons. La taille est légèrement plus grand que votre estimation. Il y a généralement aussi un peu de bits des bits supplémentaires pour marquer la validité et parfois un soupçon. Plus de moyens et de plus petites lignes a besoin d'une plus grande fraction prises par des balises, donc généralement les lignes sont de grande taille (32+ octets) et des moyens sont de petite taille (4-16).
2) Oui. Certaines caches aussi faire une "critique mot" fetch, où elles commencent par le mot qui a causé la ligne de remplissage, puis récupérer le reste. Cela réduit le nombre de cycles du PROCESSEUR est en attente pour les données qu'elle a en fait demandé. Certains caches d'écriture "thru" et de ne pas allouer une ligne si vous manquez une écriture, ce qui évite d'avoir à lire l'ensemble de la ligne de cache d'abord, avant d'écrire pour elle (ce n'est pas toujours une victoire).
3) Les balises de ne pas stocker le bas de 5-bits comme ils ne sont pas nécessaires pour correspondre à une ligne de cache. Ils ont juste un index en ligne.
Wikipedia a une assez bonne, même si un peu intense, écriture-up sur les caches: http://en.wikipedia.org/wiki/CPU_cache - voir "mise en Œuvre". Il y a un schéma de la façon dont les données et les étiquettes et de split. Moi, je pense que tout le monde devrait apprendre ce genre de choses parce que vous ne pouvez vraiment améliorer les performances de code quand vous savez ce que le sous-jacent de la machine est réellement capable de faire.
Différents Processeurs de mettre en œuvre la mise en cache de façon très différente. Pour mieux répondre à votre question, veuillez donner quelques détails supplémentaires sur le CPU (le type, le modèle, etc) que vous êtes en train de parler.
C'est basé sur mon vague souvenir, vous devriez lire des livres comme "l'Architecture d'un Ordinateur: Une Approche Quantitative" par Hennessey et Patterson. Grand livre.
En supposant un PROCESSEUR 32 bits... (sinon, vos chiffres auraient besoin d'utiliser >4 octets (peut-être <8 octets depuis quelques/la plupart des 64-bit CPU n'ont pas tous les 64 bits de l'adresse de la ligne utilisée)) pour l'adresse.
1) je crois que c'est au moins 4*32 octets. Selon le PROCESSEUR, la puce les architectes ont décidé de garder la trace d'autres informations en plus de l'adresse complète. Mais il n'est généralement pas considéré comme faisant partie de la mémoire cache.
2) Oui, mais comment cette cartographie est fait est différent. Voir Wikipédia cache CPU - associativité Il y a le direct mappés en mémoire cache et la plus complexe associatif mappés en mémoire cache. Vous voulez éviter le cas où un code à deux morceau de l'information, mais les deux adresses de la carte à la même ligne de cache.