Test de l'Hyper-Threading du P4-3Ghz
La technique du pipeline pour traiter les instructions
Dans un logiciel, n'importe quelle opération se décompose en
un très grand nombre d'instructions. Par exemple, le transfert d'une
donnée de la mémoire au processeur, l'addition de deux nombres,
ou la comparaison de deux bits, etc. Chacune de ces instructions subit cinq
étapes successives : lecture, décodage (en deux temps), exécution,
puis écriture du résultat. La phase d'exécution s'effectue
dans l'une ou l'autre des unités de calcul suivant que le type de l'instruction
est entier ou flottant.
Dans un 486, la plupart des instructions s'exécutent en un seul cycle,
c'est-à-dire en un seul battement de l'horloge. Comme les quatre étapes
(voir la dernière figure) ne requièrent qu'un cycle chacune, il
faut donc, en théorie, cinq cycles pour traiter complètement une
instruction. En fait, le processeur utilise une technique de pipeline. C'est
une file d'attente qui est organisée de manière à conduire
indépendamment les différentes étapes du traitement d'une
instruction. Autrement dit, dès qu'une instruction passe à la
seconde phase, l'instruction suivante entre dans la première, et ainsi
de suite... Le processeur fait donc plusieurs choses à la fois !
Si ces caractéristiques sont communes à tous les processeurs 486,
la nouveauté apportée par le 486 DX2 tient à la double
fréquence de fonctionnement. C'est-à-dire une fréquence
propre au coeur du processeur, et une autre qui pilote le reste de l'ordinateur,
notamment les échanges entre le processeur et l'extérieur. Cette
technique permet de faire fonctionner le processeur à haute fréquence
sans pour autant augmenter le prix de revient de l'ordinateur. Par exemple,
un 486 DX2-50 calcule à 50 Mhz et communique à 25 Mhz avec l'ordinateur,
tandis qu'un 486 DX-50 connaît seulement la fréquence de 50 Mhz.
Comme ses échanges avec l'ordinateur se font à 50 Mhz, il est
plus rapide que le DX2-50, mais il entraîne un surcoût de fabrication
et demeure donc très peu utilisé. Toutefois, si le 486 DX2 apparaît
plus économique, il ne va pourtant pas sans poser des problèmes.
Des calculs interne ou externe réduisent les états d'attente
En effet, même à simple fréquence, les processeurs travaillent
plus vite que la mémoire vive : ainsi, pour une fréquence de 33
Mhz, un cycle de processeur ne dure que 30 nano-secondes (ns), tandis que les
composants de mémoire qui équipent les ordinateurs ont un temps
d'accès, eux, de 70 ns. Du coup, le processeur doit patienter avant de
recevoir une donnée dont il a besoin. Pour réduire ces états
d'attente, les processeurs tels que les 486DX et DX2 intègrent une mémoire
de 8 Ko, appelée cache interne. Elle fonctionne à la vitesse du
processeur. Dès lors, quand un accès à la mémoire
vive est nécessaire, on lit non plus une seule information à la
fois, mais en fait un groupe de plusieurs, partant du principe que des instructions
à exécuter successivement sont adjacentes en mémoire. Comme
ce principe est vérifié dans plus de 80 % des cas, une instruction
donnée a, en fait, toutes les chances d'avoir déjà été
transférée dans le cache : elle s'exécutera donc plus rapidement.
Mais la présence d'une mémoire cache interne ne suffit pas toujours.
En effet, sa taille restreinte empêche d'y placer autant de données
que nécessaire pour assurer un fonctionnement optimal du processeur.
C'est pour cela qu'aujourd'hui les constructeurs équipent souvent leurs
ordinateurs d'un cache externe. Plus lent que le cache interne, mais plus rapide
que la mémoire vive, ce cache, dit "de niveau 2", permet de
gagner près de 10 % de puissance, et même plus encore avec un processeur
à double fréquence. Comme le coeur y est plus rapide que le bus,
il se produit le même effet qu'au péage d'une autoroute : on perd
du temps. Le cache externe est donc indispensable pour utiliser au mieux les
performances du processeur DX2.
On peut également multiplier la fréquence par un facteur supérieur
: c'est ce qu'a fait Intel avec le DX4, qui est équipé d'un cache
interne de 16 Ko. Cette fois-ci, la fréquence interne est égale
au triple de celle du reste de l'ordinateur ! Mais pas question pour le fabricant
de pousser plus avant cette technique car un processeur 486 à 33-132
Mhz viendrait alors marcher sur les plates-bandes de ses Pentium. Or, son fer
de lance dans la bataille des processeurs ne souffre pas qu'on lui fasse de
l'ombre !
Structure du processeur Intel486
L'unité de bus du processeur Pentium doit pouvoir satisfaire les
demandes des trois pipelines de l'unité d'exécution. Son bus externe
a une largeur de 64 bits, permettant de transférer deux fois plus de
données par cycle d'horloge que dans le processeur Intel486. L'unité
de bus peut effectuer des opérations à 66 Mhz au cours de lectures
et d'écritures en mode rafale et au cours de cycles d'adresse dans les
pipelines. Le bus adresse est toujours de 32 bits ce qui permet d'atteindre
4 Go de mémoire. Dans certaines versions du processeur Pentium, l'horloge
interne peut fonctionner à des vitesses allant jusqu'à 166 Mhz.
L'unité d'anticipation de branchement (BPU) surveille le flot
des instructions par un petit cache de 1 Ko, appelé cache BTB (Branch
Target Buffer), qui garde trace des instructions déjà exécutées
ayant déclenché une rupture dans le flot séquentiel des
instructions. L'information est utilisée pour prévoir le résultat
des prochains branchements avant qu'ils ne se produisent. Si la prévision
est correcte, le flot d'instructions comprenant le branchement s'exécute
immédiatement. Si elle est erronée, le pipeline est purgé
et une nouvelle séquence d'instructions est amenée au décodeur.
Les prévisions du BPU sont exactes 90 fois sur 100, ce qui amène
une amélioration des performances de 25 % en moyenne.
L'une des caractéristiques les plus importantes du processeur
Pentium tient à ses trois pipelines d'exécution : l'un pour les
instructions flottantes et deux autres, indépendants, dits U et V, pour
les instructions entières. Cette architecture, permettant d'exécuter
plus d'une instruction à la fois, est dite superscalaire. Chacun des
pipelines U et V à cinq étapes est semblable à celui du
processeur Intel486, à ceci près que des modifications ont été
apportées pour permettre à deux instructions de s'exécuter
simultanément, une par pipeline. Le bilan total des cycles d'horloge
par instruction est ainsi réduit, ce qui améliore encore les performances.
Troisième pipeline d'exécution, le FPU traite les instructions flottantes en huit étapes. Les quatre premiers étages du pipeline U servent à préparer une instruction flottante. Les quatre derniers sont spécifiquent des instructions flottantes et enregistrent les erreurs. Trois des opérations flottantes les plus fréquentes, l'addition, la multiplication et la division, sont câblées pour réduire encore le temps d'exécution.
Le processeur Pentium possède deux caches internes de 8 Ko, l'un pour les données, l'autre pour le code (instructions). Données et code étant traités différemment dans le microprocesseur, chaque cache est optimisé pour sa fonction. Le cache code permet des transferts plus efficaces vers l'unité de préextraction, au travers d'un bus interne de 256 bits de large. Le cache données est relié à chacun des pipelines d'exécution et peut opérer en écriture différée (write-back), ce qui aide à réduire l'activité du bus externe : ce point est très important dans les applications en multitraitement où plusieurs processeurs partagent un bus commun. Bien que la séparation des caches entraîne un surcroît de complexité, elle augmente considérablement les performances du processeur.
' Certaines des instructions les plus fréquemment utilisées ont été câblées, c'est-à-dire qu'elles sont désormais traitées par un circuit spécialisé, et non par microcodage. Appelées instructions simples, elles s'exécutent en un seul cycle d'horloge. Elles comprennent les opérations entre registres de l'ALU ; MOV, INC, DEC, PUSH, POP et LEA ; JMP(near), CALL et LCC ; ADD, LOAD et MUL.