Ce site utilise des animations réalisées avec la technologie Flash. Si vous ne possédez pas le petit programme permettant de lire ce format, les animations de cette page seront inactives et ce sera bien dommage. Vous pouvez néanmoins télécharger ce petit logiciel en vous connectant ici. La procédure est indolore, rapide et gratuite. Pourquoi s'en priver, je vous le demande ? |
Dernière mise à jour
- 29 octobre 2004 |
![]() |
||||
![]() |
Nous avons fait connaissance avec "i4", brave petite
puce laborieuse et méritante quoique un tantinet glandeuse.
En effet, archétype
du processeur séquentiel, i4 se contentait d'exécuter
ses instructions
une
par
une,
sans précipitation ni zèle empressé. Et puis un soir de solitude quelque part dans la Vallée du Silicone,
après
avoir avalé son Cheese Burger et son Prozac, un ingénieur
informaticien limace jusqu'à son canapé,
juste histoire de trouver le sommeil devant le Ciné-Club
de minuit. A l'occasion du cycle Chaplin, on repasse "Les
Temps Modernes" ! |
Dépendances |
||
|
Il était une fois la Révolution De la puce-artisane... Les premiers processeurs grand public se caractérisaient par
une méthode
de travail très
"artisanale" car basée sur une logique
séquentielle. |
|||||||||||||||||||
|
Nous
avons vu i4 en plein travail
et avons découvert à cette occasion comment un processeur
de son espèce procédait
à l'exécution d'une instruction.
Pour rappel, ce
processus
débutait par une suite d'allers-et-retours en mémoire
afin de rassembler l'instruction et son (ses) éventuel(s) opérande(s)
puis se poursuivait par l'exécution de l'instruction proprement
dite pour se terminer par la mise à jour des registres de la
puce ou d'une adresse en mémoire. |
i4 va vous faire un petit dessin... |
||||||||||||||||||
|
Ainsi, pour ces vénérables processeurs-ci, un cycle d'exécution pouvait être décomposé en trois phases successives:
Ceci dit, nous pourrions alors illustrer très schématiquement le fonctionnement d'un processeur de type séquentiel:
|
|||||||||||||||||||
|
|
Pour ce type de processeurs, chaque instruction est exécutée une à la fois, en passant successivement par tous les stades du cycle d'exécution |
||||||||||||||||||
|
Ce
cheminement obligatoire des instructions par chacun de ces
stades implique bien évidemment que chaque
instruction réclamait
plusieurs cycles d'horloge pour être exécutée. Ainsi, le processeur 8086 de Intel nécessitait en moyenne 12 cycles d'horloge pour exécuter une instruction, mais avec le 80286, cette moyenne chutait à 4,5 cycles par instruction.
|
|||||||||||||||||||
|
... A la puce-ouvrière
Frederick Winslow Taylor [1859-1915] est ce qu'on peut appeler
un obsédé du rendement, un monomaniaque de la productivité,
un fétichiste du chronomètre. Bref, un monde de larmes et de ténèbres... |
L'homme sans qui Marc et Arlette ne seraient rien... |
||||||||||||||||||
|
En
deux mots, le taylorisme, c'est "l'Organisation Scientifique du
Travail", la traque et l'élimination des gestes inutiles,
la quête éperdue du rendement.
|
Frédérick Taylor avait l'habitude d'uriner tous les jours à 7h23 et 19h07, c'est-à-dire en dehors de ses heures de travail... | ||||||||||||||||||
| Pourquoi
cette digression ? Parce que quoique
les processeurs séquentiels donnassent entière satisfaction,
n'importe quel tayloriste, même amateur, eût vite constaté que
lorsqu'une instruction se trouvait à un stade de son cycle d'exécution,
les stades situés en
amont et en aval demeuraient désespérement inactifs. |
... situation de nature à chagriner n'importe quel ingénieur, surtout de culture nord-américaine... | ||||||||||||||||||
|
Et c'est là que Charlot intervient ! En appliquant au processeur le très tayloriste concept de "travail à la chaîne", le rendement de la puce se trouve d'un coup démultiplié:
|
|||||||||||||||||||
|
|
Chaque instruction n'attend plus l'exécution de l'instruction précédente pour débuter son propre cycle d'exécution. Les différents cycles se chevauchent, avec pour conséquence que tous les stades se trouvent simultanément actifs |
||||||||||||||||||
|
Vivent les cadences infernales !
|
|||||||||||||||||||
|
Le pipeline d'exécution Entrez dans la lumière (du pipeline) Comme nous venons de la voir, un processeur à pipeline
d'exécution est tout
simplement une puce fonctionnant sur le très mécanique principe
de la chaîne de montage. |
...comme un insecte fou... | ||||||||||||||||||
|
Le
principe reste effectivement le même, à savoir diviser
le processus d'exécution des instructions en un nombre donné d'étapes
fonctionnellement indépendantes. |
|||||||||||||||||||
|
L'indépendance
des différents étages du pipeline permet au processeur
de traiter plusieurs instructions simultanément,
chacune d'entre elles se trouvant à un stade
différent du cycle d'exécution. Il est facile de comprendre qu'un processeur
à pipeline réclame une architecture bien plus complexe
qu'un processeur séquentiel, de par les contraintes
inhérentes à son mode de fonctionnement: synchronisation
entre les différents étages,
processus de contrôle,
accès partagés aux unités fonctionnelles... |
...ou "chevauchement de lecture" ou encore "préchargement d'instructions" | ||||||||||||||||||
|
Autre facteur d'efficacité: dans l'idéal, les différents étages du pipeline devront réclamer le même délai pour être traversés afin de rendre le flux des instructions le plus fluide possible. En effet, il est facile de comprendre que le "débit" d'un pipeline sera directement lié à son étage le plus "lent".
|
|||||||||||||||||||
|
Le pipeline du 80486: un tube de légende ! En +34 après Bill Gates (1989 donc), Monsieur Intel sort son
processeur 80486.
La bête est
séduisante et se trouve être la première puce "grand
public" conçue
sur le révolutionnaire principe du pipelining. |
|
||||||||||||||||||
|
Très pratiquement, le pipeline du 80486 est divisé en cinq étages successifs et fonctionnellement (quasi) indépendants:
... chacun de ces stades nécessitant un ou deux cycles d'horloge.
|
|||||||||||||||||||
|
Bien évidemment, le nombre d'étages du pipeline n'est pas limité à cinq. Comme nous allons le voir, l'augmentation de ce nombre d'étages est d'ailleurs une évolution majeure des processeurs ultérieurs, et ce pour une raison très mathématique que nous allons voir de ce pas (si, si... nous insistons) Pour exemples, le processeur Athlon XP dispose d'un pipeline à 10 étages, le Pentium 4 d'un pipeline à 20 (!) étages
|
|||||||||||||||||||
|
Le pipeline, un bon tuyau ? A vue de nez, le principe du pipeline d'exécution semble
être somme toute assez efficace. Mais dans
quelle mesure ? |
|||||||||||||||||||
|
Considérons
deux processeurs dont le point commun est d'exécuter, en moyenne,
une instruction en K cycles d'horloge. Le premier est un processeur séquentiel
classique (type i4), et le second un processeur à pipeline d'exécution
à K étages.
|
... chaque étage nécessitant un cycle d'horloge | ||||||||||||||||||
|
|
||||||||||||||||||
|
Petite
explicitation pour ceux qui viennent de se lever ou qui ne sont pas encore
couchés: Au coeur d'un processeur pipeliné, quand la première instruction
s'apprête à quitter
le pipeline (c'est-à-dire le dernier
étage), l'instruction qui lui succède est déjà à l'avant-dernier stade
du cycle d'exécution. Il ne lui faudra donc qu'un petit
cycle pour traverser le dernier étage et quitter à son tour le pipeline. |
...et ce, jusqu'au prochain crash de Windows... | ||||||||||||||||||
|
Par un habile rapport mathématique [NK / (K+N-1)], nous pouvons mesurer l'efficacité comparée des deux méthodes de fonctionnement et constater, ébahis, que lorsque N est suffisamment grand (ce qui est le cas de tout programme un tant soit peu utile), ce rapport est voisin de K. La conclusion est immédiate et ébaubiante: le gain de temps procuré par un processeur à pipeline est directement proportionnel à son nombre d'étages.
|
Remballez
le Champomy... Il y a un mais, un gros ! |
||||||||||||||||||
|
Trous, purges et dépendances Le fait est que la belle théorie du pipeline se heurte en pratique à des aléas qui grippent cette mécanique bien huilée. Ces accidents de parcours sont appelés dépendances et surviennent quand une instruction ne peut s'exécuter avant le complet achèvement de l'instruction qui la précède. Malheureusement, ces "trous d'air" dans le pipeline ont de multiples causes...
|
|||||||||||||||||||
|
Dépendances de ressource Dans notre description du processeur pipeliné idéal, nous avons précisé que les différents étages du pipeline devaient être fonctionnellement indépendants. Hélas, cette exigence était un voeu pieu. Le problème est le suivant: un pipeline aura beau disposer d'un nombre
important d'étages, les unités
fonctionnelles du processeur (UAL, registres, mémoire
cache,
décodeur-séquenceur...) seront toujours, elles, en nombre
limité.
|
|||||||||||||||||||
|
Dépendances de données Autre scénario enclin à perturber le long flux tranquille à l'intérieur du pipeline: une instruction intéragit avec un registre que l'instruction immédiatement suivante utilise également pour son propre cycle d'exécution. Vous aurez remarqué la subtile nuance entre ce type de dépendance et la dépendance de ressource. Dans ce cas-ci, le registre n'est pas nécessairement occupé par l'instruction précédente, mais il n'est pas encore rempli avec la bonne valeur, celle qui résultera de la complète exécution de la première instruction.
|
Si vous êtes fan, apprenez qu'on appelle RAW (Read After Write) ce genre de petit incident de parcours... | ||||||||||||||||||
|
Dépendances de contrôle (ou de procédure) Quiconque a taquiné un tant soit peu la programmation sait que
tout programme informatique qui se respecte comporte un nombre important
de
sauts en tous genres: appels de fonction, boucles, branchements
avec ou sans tests... |
Exemple
de branchement: IF votre_note_a_cette_page < 3 THEN GOTO ailleurs |
||||||||||||||||||
|
Comment mettre le doigt de manière intelligence sur le gros
problèmes causé par un branchement sur un processeur à pipeline ?
|
Ce jeu existe également avec des banquiers, des énarques ou des Marc Blondel à bretelles (version collector épuisée) | ||||||||||||||||||
|
Symptomatologie de la dépendance Dépendances de ressource et de données ne sont que vétilles et peccadilles dans la vie d'un pipeline, car le flux des instructions ne se trouve pas rompu. Après tout, qu'une instruction doive attendre que celle qui la précède sorte totalement du pipeline... Quoi de grave ? Le flux d'instructions stoppe une fraction d'instant. Le pipeline hoquette. Un "trou" apparait sur la ligne de montage. Et puis la puce s'en repart, tout en sifflotant...
|
Bips... | ||||||||||||||||||
|
|
En cas de dépendance, l'instruction fautive doit attendre la complète exécution de l'instruction précédente avant de son poursuivre son propre cycle d'exécution |
||||||||||||||||||
|
Les
dépendances de procédures sont un tantinet plus fâcheuses.
|
Rappelez-vous notre shoot'em up | ||||||||||||||||||
|
|
Lorsqu'une instruction de saut ("JMP") ou de branchement après test ("BEQ", "BNQ") est exécutée par la puce, le pipeline doit être purgé des instructions devenues non pertinentes puis rechargé avec les instructions situées à l'adresse du branchement.
|
||||||||||||||||||
|
Le pipeline, censé nous faire gagner du temps, nous en fait perdre lamentablement. Et, qui plus est, le contretemps est d'autant plus interminable que le pipeline est profond, de par le nombre d'étages à purger ! Dans les labos d'IBM et confrères, on organisa très
vite un séminaire
de travail sur le thème: "Traque et élimination des
sauts
de nos
puces".
|
Mettez vous ça dans la tête: alors qu'on l'y contraint depuis des siècles comme s'il s'agissait pour elle d'une seconde nature, LA PUCE DETESTE LES SAUTS ! | ||||||||||||||||||
|
En
concevant le pipeline d'exécution, les ingénieurs-architectes
avaient boosté d'un coup les performances de leurs drôles de machine. L'idée
était simple, restait pour eux à la concrétiser en circuits imprimés et
interconnexions silicées et multiplier les étages de leurs chaînes de montage
miniaturisées. Ce qu'ils firent zèlement. Deux pipelines, bien sûr ! L'ingénierie informatique est si simple !
|
||||
Cette page, comme toutes les pages de Arcana Percipio,
est destinée à aider le plus grand nombre. Tous droits réservés. © Arcana Percipio. 2004 |