Lecture & décodage des instructions
Contrairement à ce que nous avions observé lors du passage du Core au Core 2 Intel n’a cette fois pas modifié en profondeur son front-end. On retrouve donc les 4 décodeurs apparus avec le Conroe, 3 simples et un complexe, toujours capable d’effectuer une macro-op fusion offrant donc un débit maximal théorique de 4+1 instructions x86 par cycle.
Pas de bouleversement à première vue mais comme on le dit « le diable se cache dans les détails ». Comme nous l’avions fait remarquer dans notre article sur l’architecture Barcelona, augmenter le nombre d’unités est une façon extrêmement peu efficace d’accroître les performances : le coût est important et le gain procuré diminue de plus en plus à chaque ajout, c’est ce qu’on appelle la loi des rendements décroissants. Plutôt qu’ajouter un nouveau décodeur les ingénieurs se sont donc attelés à les rendre plus efficaces.
En premier lieu ils ont ajouté le support de la macro-op fusion en mode 64-bit, ce qui est justifié pour une architecture comme le Nehalem qui ne cache pas ses ambitions dans le monde serveur. Mais les ingénieurs ne se sont pas arrêtés là : alors que l’architecture Conroe ne pouvait fusionner qu’un nombre restreint d’instructions, l’architecture Nehalem supporte un plus grand nombre de variations permettant d’utiliser la macro-op fusion plus fréquemment.
Une autre nouveauté introduite par le Conroe a également été améliorée, il s’agit du Loop Stream Detector. Derrière ce nom se cache en fait un buffer de données de quelques instructions (18 instructions x86 sur les Core 2). Lorsque le processeur détecte une boucle, il désactive certaines parties du pipeline : vu qu’une boucle consiste à exécuter les mêmes instructions un certain nombre de fois, il est inutile d’effectuer la prédiction de branchements ou de récupérer l’instruction depuis le cache L1 à chaque passage dans la boucle, le Loop Stream Detector agit donc comme une petite mémoire cache permettant de court-circuiter les premières étapes du pipeline dans ce genre de cas. Le gain de cette technique est double : elle permet de baisser la consommation en évitant d’effectuer des tâches inutiles et en termes de performance elle diminue la pression sur le cache L1 d’instructions.
Avec l’architecture Nehalem Intel a amélioré cette technique : tout d’abord le buffer est désormais plus important puisqu’il peut stocker 28 instructions mais en plus sa position dans le pipeline a changé. Alors que sur le Conroe il se situait juste après la phase de récupération (fetch) d’instructions, il est désormais situé après les décodeurs. Cette nouvelle position permet de désactiver une partie plus importante du pipeline. Le Loop Stream Detector du Nehalem ne stocke donc plus des instructions x86, mais des µop. En ce sens il se rapproche dans le concept de la trace cache du Pentium 4. Ce n’est pas une surprise de retrouver certaines innovations de cette architecture dans le Nehalem : l’équipe de Hillsboro qui se charge aujourd’hui du Nehalem était autrefois responsable du projet Pentium 4. Toutefois là où le Pentium 4 reposait exclusivement sur la trace cache, ne pouvant compter que sur un seul décodeur en cas de défaut de cache, le Nehalem dispose cette fois ci de la puissance de ses 4 décodeurs, le Loop Stream Detector ne constituant qu’une optimisation supplémentaire dans certains cas : le meilleur des deux mondes en quelque sorte.
- 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é