Une hiérarchie de cache à 3 niveaux
La hiérarchie mémoire du Conroe était extrêmement simple et Intel avait pu se concentrer sur les performances du cache L2 partagé qui était la meilleure solution pour une architecture visant majoritairement les implémentations dual core. Mais avec Nehalem les ingénieurs sont repartis d’une feuille blanche et sont arrivés aux mêmes conclusions que leurs concurrents : un cache de deuxième niveau partagé n’était pas adapté à une architecture quad core native : les différents cores pouvaient trop fréquemment évincer des données nécessaires à un autre et il est probable que cela posait de nombreux problèmes en termes de bus interne et d’arbitrage pour alimenter les 4 cores avec une bande passante suffisante tout en conservant une latence suffisamment basse. Pour résoudre ce casse tête les ingénieurs ont donc dotés les différents cores d’une mémoire cache de deuxième niveau privée. Comme elle est dédiée à un seul core et relativement petite (256 Ko) les ingénieurs ont pu la rendre extrêmement performante, la latence en particulier aurait été nettement améliorée par rapport au Penryn passant de 15 cycles à environ 10 cycles.
On trouve ensuite une énorme mémoire cache de 3ème niveau de 8 Mo pour gérer les communications entre les cores. Si à première vue la hiérarchie de cache du Nehalem fait penser à celle du Barcelona, le fonctionnement du cache de 3ème niveau est très différent de celui de son concurrent, il est en effet inclusif de tous les niveaux de caches précédents. Cela signifie que si un core tente d’accéder à une donnée et qu’elle n’est pas présente dans le cache de niveau 3 il est inutile de vérifier dans les caches privés des autres cores : cette donnée n’y sera forcément pas présente non plus. A l’inverse si cette donnée est présente, 4 bits associés à chaque ligne de la mémoire cache (1 bit par core) indiquent si la donnée est potentiellement présente (cela reste une indication et non une certitude) dans le cache de niveau inférieur d’un autre core et lequel.
Cette technique est efficace pour assurer la cohérence des caches privés en limitant le trafic nécessaire entre les cores mais elle a l’inconvénient de gaspiller une partie de la mémoire cache avec des données déjà présentes à d’autres niveaux. Cela est toutefois limité par le fait que les caches L1 et L2 sont relativement petits par rapport au cache L3, l’ensemble des données des L1 et L2 n’occupant au maximum qu’1.25 Mo sur les 8 disponibles. Tout comme sur le Barcelona le cache de niveau 3 n’opère pas à la même fréquence que le reste de la puce et par conséquent la latence d’accès à ce niveau est variable mais devrait être de l’ordre de 40 cycles.
Finalement la seule déception au niveau de la nouvelle hiérarchie de cache du Nehalem concerne le cache de premier niveau. Ainsi la bande passante du cache d’instructions n’a pas augmenté, elle est toujours de 16 octets par cycles contre 32 pour le Barcelona. Ce point pourrait s’avérer être un goulot d’étranglement dans une architecture orienté serveur, les instructions 64 bits étant plus volumineuse que les instructions 32 bits, d’autant que le Nehalem dispose d’un décodeur de plus que le Barcelona ce qui place encore plus de pression sur ce cache. Le cache de données pour sa part voit sa latence augmenter à 4 cycles contre 3 sur le Conroe afin de permettre une meilleure montée en fréquence. Pour finir sur un point positif toutefois, les ingénieurs d’Intel ont augmenté le nombre de défauts de cache de niveau 1 que son architecture pouvait traiter en parallèle.
- Processeur,
- Intel,
- Core ,
- i7 ,
- Nehalem ,
- architecture


Et la tu prend un dolipran.
Article très complet qui rejoins bien l'article d'Hardware.fr
Je suis pressé de le voir en fonctionnement
Merci!
Après plus de dix ans à vouloir faire mieux que les autres avec une architecture "innovante", Intel revient aux conclusions des ingénieurs de Digital Equipment Corporation : plutôt amusant...
Et la tu prend un dolipran. Article très complet qui rejoins bien l'article d'Hardware.frJe suis pressé de le voir en fonctionnement Merci!
C'est rare mais personnellement, je suis pressé d'acheter
Grosso merdo, c'est le meme nombre que les bits egaux a 1, quoi
En binaire, oui !!
"tout d’abord le buffer est désormais plus important puisqu’il peut stocker 28 instructions"
Ce ne sont pas des instructions mais des µops. De plus, est-ce vraiment sûr qu'un buffer de 28 *ops soit plus gros qu'un buffer de 18 instructions ?
Je me doute que ça doit dépendre des instructions, mais en moyenne ça donnerait quoi ?
Grosso merdo, c'est le meme nombre que les bits egaux a 1, quoi
Oui dans le cas du binaire, mais disons que POPCNT est une version un peu spécifique du poids de Hamming qui recherche dans une chaîne, le nombre de symboles différents du 0 de l'alphabet utilisé. Donc j'ai gardé la définition générique
"tout d’abord le buffer est désormais plus important puisqu’il peut stocker 28 instructions"Ce ne sont pas des instructions mais des µops. De plus, est-ce vraiment sûr qu'un buffer de 28 *ops soit plus gros qu'un buffer de 18 instructions ?Je me doute que ça doit dépendre des instructions, mais en moyenne ça donnerait quoi ?
Tout à fait c'est une bonne remarque, je le précise un peu plus loin ("Le Loop Stream Detector du Nehalem ne stocke donc plus des instructions x86, mais des µop.") et je voulais souligner qu'effectivement le gain pratique était plus faible que ce qu'il semblait au premier abord mais c'était difficile à évaluer.
La grosse majorité des instructions x86 ne génèrent qu'une seule µop c'est la raison pour laquelle il y a 3 décodeurs simples qui ne peuvent traiter que ces instructions contre un seul pour les instructions générant de 2 à 4µop. Comme tu le notes le rapport instruction x86 / µop dépend fortement de l'application, la moyenne qui circule est de 1.36 µop générées par instruction x86. Dans ce cas le buffer est en fait à peine plus grand que celui du Core 2 duo (~20.6 instructions). Cependant ces chiffres sont assez anciens et datent du Pentium III, depuis il y a eu pas mal de progrès en la matière que ça soit au niveau des instructions SSE qui génèrent moins de µops, ou de la fusion (micro et macro) donc le rapport a du baisser. Je pense qu'on peut considérer que ce buffer est l'équivalent d'un buffer x86 de 22 instructions à la louche mais c'est qu'une grossière estimation.
Et vue qu'en plus on évite l'étape de décodage, c'est effectivement tout benef
Moi, ça me rappelle le P4 cette histoire ...
Plus de puissance, plus de puissance, plus de puissance ... Au détriment de la vitesse.
Désolé