de von neumann aux super-microprocesseurs

publicité
Texte de la 248e conférence de l'Université de tous les savoirs donnée le 4 septembre
2000.
DE VON NEUMANN AUX SUPER-MICROPROCESSEURS
Par François Anceau
Histoire des machines informatiques
L'histoire des machines à traiter l'information est une saga qui trouve ses racines loin dans
l'histoire et qui se poursuit actuellement avec un rythme très rapide. Pour remonter aux
origines, nous diviserons cette histoire en trois grandes périodes.
La préhistoire
Ce qui va donner l'informatique peut être vu comme la convergence de trois courants :
- La notion d'algorithme. Celle-ci prend ses racines dans l'Antiquité. Elle a été formulée en
Perse dès le IXe siècle par Al Khowarizmi. Elle consiste à décrire précisément les
processus nécessaires à la réalisation des calculs complexes. Cette notion ne sera
réellement formalisée que onze siècles plus tard par Alan Turing en 1936 et
Alonzo Church en 1944.
- La mécanisation des opérations de calcul qui a débuté au XVIIe siècle avec les travaux de
Wilhelm Schickard en 1623, la série des Pascalines de Blaise Pascal en 1642 puis la
machine à effectuer les multiplications de Gottfried Wilhelm Leibniz en 1694.
- La programmation. Celle-ci est vraisemblablement apparue au Moyen Âge pour les
carillons automatiques dans lesquels un tambour muni de picots déclenchait une séquence
de frappes sur les cloches. Cette technologie s'est ensuite développée pour l'animation des
automates et la commande des métiers à tisser automatiques (Basile Bouchon 1725,
Jacques de Vaucanson 1745 puis Joseph Marie Jacquard 1810 qui eut l'idée de remplacer
les tambours par des cartes perforées, inventées par Falcon).
La synthèse de ces trois courants fut réalisée par Charles Babbage qui proposa en 1840 les
plans de sa machine analytique. Celle-ci est la première description d'une machine à calculer
programmable. La comtesse Ada de Lovelace a écrit des programmes mathématiques pour
cette machine. Elle fut donc la première programmeuse de l'histoire.
L'Antiquité
Les machines à calculer programmables étaient utilisées pour calculer les tables numériques
civiles et militaires, ainsi que pour effectuer des statistiques. Il s'agissait de réaliser de
manière répétitive des séquences de calculs assez simples sur de grands volumes de données.
La croissance de ces besoins fit passer ces machines de la technologie mécanique à l'électromécanique puis à l'électronique en utilisant des tubes électroniques. Les premières machines à
calculer programmables électroniques furent la machine ABC de John Vincent Atanasoff en
1939 et le calculateur ENIAC réalisé par John Pesper Eckert et John Mauchy en 1947. La
mise en forme de l'algèbre binaire par George Boole en 1847 allait ouvrir la voie à son
utilisation comme base de numération pour les machines. George R. Stibitz bricola le premier
additionneur binaire en 1937 et Konrad Zuse réalisa le premier calculateur binaire
électromécanique programmable en 1938. Pendant ce temps, Alan Turing formalisa la notion
de calcul en 1936 en montrant qu'une telle machine peut être universelle, c'est-à-dire capable
de réaliser n'importe quel calcul (pourvu que l'on lui en laisse le temps et qu'elle dispose de
suffisamment de mémoire).
Cette période s'achève par la proposition de John von Neumann de ranger les programmes
dans la même mémoire que les données. Cette idée sera matérialisée par Eckert et Mauchy
1
(machine BINAC en 1949) puis par Turing (Automatic Computing Engine en 1950) qui
ajoutera la possibilité aux programmes de s'auto-modifier.
Les Temps Modernes
Les premières machines des années 1950 contenaient déjà tous les ingrédients nécessaires à
un ordinateur. Une formidable évolution technologique va leur donner la puissance, la
fiabilité et la miniaturisation que nous leur connaissons. La première de ces mutations va se
produire vers 1960 avec le développement des premiers ordinateurs à transistors au silicium.
Ces composants vont donner à l'ordinateur une fiabilité qui va lui permettre d'être
effectivement utilisé. Le développement des circuits intégrés, dont le premier exemplaire est
dû à Jack Kilby (Texas Instruments) en 1958, va permettre, dès 1965, un nouveau pas dans
l'augmentation de la complexité et de la fiabilité des ordinateurs.
Pendant les années 1960 le statut des ordinateurs va progressivement passer de celui de
machines à effectuer des calculs, jusqu'à celui de traiter de l'information de toute nature. Des
applications comme le traitement de texte et les bases de données vont apparaître. En 1971
Marcian Hoff de chez Intel conçoit le premier processeur monolithique (microprocesseur)
commercial (Intel 4004), c'est-à-dire réalisé sous la forme d'un seul circuit intégré. C'est cette
technologie qui va progressivement se développer pour s'imposer à partir des années 90.
La fantastique évolution des microprocesseurs
À la suite de l'Intel 4004, de nombreux autres modèles de microprocesseurs sont apparus, de
plus en plus puissants et de plus en plus complexes. À partir de cette date, un rythme très
rapide d'évolution s'est installé. Il s'est maintenu sans fléchir jusqu'à aujourd'hui. La
complexité de ces machines monolithiques est passée de 2 800 transistors pour l'Intel 4004 à
plusieurs dizaines de millions pour les microprocesseurs modernes. Pendant la même durée,
leur puissance de traitement est passée de 60 000 instructions exécutées par seconde par
l'Intel 4004 à plus d'un milliard par les machines actuelles les plus puissantes. L'histoire des
microprocesseurs sur les trente dernières années est certainement la plus formidable évolution
technologique de l'histoire humaine, tant en durée qu'en ampleur.
nombre de transistors
100 000 000
Celeron
K6
PPC620
Pentium II
Pentium-Pro
PPC601
Pentium
MC68040
I486
10 000 000
1 000 000
MC68020
100 000
I386
I286
MC68000
I8086
10 000
MC6800
I8008
I4004
1 000
1970
1975
1980
1985
1990
1995
2000
2005
Figure 1 – Évolution de la complexité des microprocesseurs
2
Millions d'instructions exécutées par seconde
1 000
PPC750/350
ALPHA/300
PPC604/133
ALPHA/150
100
PPC601/66
Pentium
Pentium-Pro/133
Pentium/133
Pentium/66
I486/50
I486/25
10
I386/16
1
1984
1986
1988
1990
1992
1994
1996
1998
2000
Figure 2 – Évolution de la performance des microprocesseurs
Ce rythme d'évolution effréné est appelé loi de Moore (du nom du directeur de la compagnie
Intel qui l'a formulée dans les années 1970). Il provient pour moitié de l'évolution
technologique des circuits intégrés et pour l'autre moitié de l'évolution de l'architecture de ces
machines. Les microprocesseurs actuels sont dessinés avec des motifs de 0,18 µm de largeur.
Cette dimension diminue régulièrement depuis plus de trente ans et ce rythme tend même
actuellement à s'accélérer. Si cette évolution se poursuit, nous devrions atteindre, avant la fin
de la décennie, des dimensions pour lesquelles des phénomènes quantiques devraient se
manifester et dégrader le fonctionnement des transistors.
Taille des motifs minimaux (microns)
100
10
1
apparition des
pénomènes
quantiques
0,1
0,01
1960
1970
1980
1990
2000
2010
2020
Figure 3 – Évolution de la technologie des circuits intégrés
Types d'ordinateurs
Les ordinateurs peuvent être classés en deux grandes familles suivant que nous connaissons,
ou ignorons, leur existence.
- Les ordinateurs « visibles » qui constituent tout ce que nous appelons ordinateur et surtout
ceux qui se présentent comme des machines universelles, bien qu'ils soient souvent utilisés
de manière spécifique. Ceux-ci peuvent être des ordinateurs personnels ou des stations de
travail, portables ou fixes, des ordinateurs serveurs qui fournissent de l'information sur un
réseau, des ordinateurs de contrôle de processus chargés de piloter des processus
3
industriels (raffinerie, usine automatisée, gros appareils, navires,…), des super-ordinateurs
chargés de résoudre de gros problèmes numériques (prévisions météorologiques,
simulations, ….).
- Des ordinateurs « cachés » qui se présentent comme des composants électroniques évolués
et dont nous ignorons généralement l'existence : surveillance et pilotage de véhicules
(automobiles, trains, avions, fusées), dispositifs de communication et de localisation
(terminaux GSM, répondeurs, GPS), électroménager (chaîne Hi-Fi, magnétoscope,
machine à laver), horlogerie (montres numériques, séquenceurs).
La demande en puissance de calcul des ordinateurs « visibles » semble insatiable. On ne
distingue pas de limite à court terme. Toute application (par exemple un traitement de texte),
peut utiliser des puissances de calcul de plus en plus élevées pour offrir des fonctions dont
nous n'osions même pas rêver il y a seulement quelques années (correction orthographique et
grammaticale en ligne, extraction de sens, génération automatique de texte, entrée vocale, …).
Notre imagination pour ce genre de fonctions semble être sans limite.
Les ordinateurs « cachés » sont de loin les plus nombreux. Ils apportent de l'intelligence aux
objets qui nous entourent et permettent l'occurrence de nouveaux objets inconcevables sans
leur présence (GSM, GPS, …). Ils transforment la nature de beaucoup de métiers en capturant
les connaissances et le savoir-faire qui leur sont associés (par exemple, avec un GPS un
capitaine de navire n'a plus besoin de savoir faire le point astronomique avec un sextant). De
ce fait, ces objets nous deviennent de plus en plus indispensables.
L'ensemble de ces machines influe sur l'évolution de la société. Ils permettent l'interconnexion
des individus et nous donnent accès, via les réseaux, à des informations que nous n'aurions
pas eues autrement. Ceux qui sont cachés transforment subrepticement la nature des objets qui
nous entourent (automobile, électroménager, ….) mais aussi nous écartent de plus en plus de
la connaissance de leur fonctionnement détaillé.
Absorption des gammes d'ordinateur par les microprocesseurs
L'évolution des microprocesseurs se traduit par la mise sur le marché de machines de plus en
plus puissantes, appelées micro-ordinateurs, dont le coût reste au voisinage de 1 000 à
2 000 euros. Lorsque la puissance de ces micro-ordinateurs dépasse celle d'une gamme
traditionnelle d'ordinateurs (généralement de coût plus élevé), celle-ci disparaît et sa fonction
vient s'ajouter à la liste, déjà longue, des applications des micro-ordinateurs. Ce phénomène
s'est d'abord produit pour la gamme des mini-ordinateurs, nés dans la seconde moitié des
années 1960 et absorbés au début des années 1980. De même, les ordinateurs de centre de
calcul, nés avec l'informatique, se sont fait absorber vers le milieu des années 1990. L'histoire
ne s'arrête pas là, car la puissance de calcul des micro-ordinateurs va devenir comparable à
celle des super-ordinateurs avant la fin de la décennie ce qui va provoquer l'absorption de
cette gamme.
Il faut remarquer que ces phénomènes d'absorption ne sont pas recherchés par les concepteurs
des micro-ordinateurs. En effet, ceux-ci visent le marché des applications personnelles et
surtout celui des jeux. Il se trouve que l'amélioration de ceux-ci passe par la capacité de
réaliser des simulations complexes en temps réel et par l'affichage associé de points de vues
mobiles dans un espace tri-dimensionnel. Ces caractéristiques sont très voisines de celles
demandées aux super-ordinateurs.
Structure d'un micro-ordinateur
La technologie micro-électronique fournit des dispositifs pour le traitement de l'information
extrêmement rapides (une transition en quelques centaines de pico-secondes) mais qui sont
aussi beaucoup plus complexes que ceux utilisés pour sa mémorisation (par un facteur de 5 à
50), il est donc naturel de réaliser une unité de traitement sous la forme d'une structure
4
bouclée dans laquelle les informations sont puisées dans des organes de mémorisation pour
être fournies à un organe de transformation, appelé opérateur. Les résultats de l'opération
(très simple) sont ensuite réécrits dans les organes de mémorisation. Cette organisation
bouclée permet de minimiser le matériel nécessaire par une forte réutilisation des opérateurs
dans un fonctionnement séquentiel. Le même matériel est donc utilisé répétitivement pour
toutes les opérations. Le nombre de cycles nécessaires à un traitement « visible » devient très
important. Il transforme la rapidité de la machine en sa puissance de traitement.
données lues
éléments de
mémorisation:
- registres
- mémoire
- disp. périph.
denses, peu
intelligents,
(adressables)
éléments
de calcul
données écrites
très rapides, relativement
volumineux
=> peu nombreux
=> utilisés de manière
sérielle
instructions
Figure 4 – La boucle fondamentale d'exécution
La nature de l'opération à réaliser, ainsi que l'emplacement des opérandes et du résultat sont
décrit par une chaîne de bits appelée une instruction. L'ensemble des instructions nécessaire à
un traitement constitue un programme. Depuis von Neumann, ceux-ci sont rangés dans les
organes de mémorisation.
Hiérarchie mémoire
Les caractéristiques des technologies utilisées pour réaliser les dispositifs de mémorisation
font que leur taille et leur vitesse varient de manière opposée. Plus un élément de
mémorisation est rapide, plus sa taille est réduite. Par exemple, les registres utilisés dans le
processeur ne permettent le stockage que de quelques dizaines ou centaines d'octets mais ils
peuvent être accédés à la vitesse des cycles élémentaires de la boucle de traitement. À
l'opposé, les disques magnétiques peuvent contenir des dizaines de milliards d'octets mais leur
fonctionnement séquentiel limite leur temps d'accès à la dizaine de millisecondes.
vitesse taille
registres
antémémoires
mémoire centrale
disques
unités de stockage
Figure 5 – Hiérarchie des organes de mémorisation
5
Comme l'idéal serait de disposer d'organes de mémorisation à la fois rapides et de capacité
importante, on les simule par l'utilisation de hiérarchies de mémoires dans lesquelles une
mémoire rapide de taille réduite est utilisée pour contenir les informations, utiles à un instant
donné, extraites d'une grande mémoire plus lente. Cette technique exploite la propriété de
localité de l'information qui fait que la probabilité de réutiliser de l'information est supérieure
à celle d'en accéder de nouvelles. La mise en œuvre d'une hiérarchie de mémoire demande
l'utilisation de dispositifs complexes pour faire migrer l'information utile de la mémoire de
grande capacité vers la mémoire rapide ainsi que la réinscription de l'information modifiée
dans la mémoire de grande capacité.
Familles de processeurs
On peut classer les processeurs en deux grandes familles suivant la complexité de leur jeu
d'instruction :
- Les machines CISC (pour Complex Instruction Set Computers)
Ces machines sont directement issues de la longue histoire des ordinateurs. Leurs
instructions peuvent commander des opérations complexes comme par exemple la
recherche d'un caractère dans une table. Ces instructions lisent souvent leurs opérandes
dans la mémoire centrale et doivent donc en préciser le mode d'accès. Ce fut le type de jeu
d'instruction de tous les processeurs conçus jusqu'au début des années 1980. À titre
d'exemples citons : la gamme des machines IBM 360-370-390, la gamme des
microprocesseurs Motorola 680x0, la gamme des microprocesseurs Intel x86.
- Les machines RISC (pour Reduced Instruction Set Computers)
Ces machines sont nées des travaux de John Cocke des laboratoire IBM. Celui-ci remarqua
dès 1975 que certaines instructions des machines CISC avaient un taux d'utilisation très
faible qui ne justifiait pas le matériel mis en œuvre pour les exécuter. L'idée de réaliser des
machines simplifiées vit le jour. Dans les machines RISC, les instructions sont très simples
et très rapides. La majorité d'entre elles n'accèdent qu'aux registres (qui sont plus
nombreux). Les accès à la mémoire centrale sont traités comme des accès aux organes
périphériques. Cette approche permet de tirer un meilleur parti du matériel mais provoque
un allongement sensible des programmes. Toutes les machines conçues pendant les années
1980 furent de ce type. Nous pouvons citer : la gamme des microprocesseurs PowerPC de
IBM/Motorola, la gamme SPARC de SUN, celle des processeurs ALPHA de
Digital Equipment/Compacq.
En plus de cette classification, il est intéressant de distinguer deux sous-classes importantes
des machines CISC qui ont été développées avec l'idée de faire migrer des fonctions
logicielles vers le matériel pour en améliorer les performances.
- Les machines-langage qui possèdent un jeu d'instructions adapté à l'exécution des langages
informatiques évolués. De telles machines ont eu leur heure de gloire à la fin des années
1960 et au début des années 1970. Depuis cette époque, des résurgences périodiques font
apparaître des machines de ce type pour des applications plus ou moins spécifiques. À titre
d'exemple, nous pouvons citer la Pascaline de Western Digital apparue vers 1980 pour
exécuter le langage Pascal et récemment, la série des machines SUN Pico-Java et
MAJC 5200 adaptées à l'exécution du langage Java.
- Les machines-système qui possèdent un jeu d'instructions adapté à l'exécution des
fonctions de base d'un système d'exploitation. Ce type de machine découle directement du
projet Multics développé au MIT à la fin des années 1960. De nombreuses machines de ce
type ont été conçues au début des années 1970. Certaines continuent d'exister comme la
gamme BULL DPS 7000. Une gamme célèbre de machines de ce type a été lancée par
6
Intel en 1982 sous la dénomination 80286 dont les successeurs : 80386, i486, Pentium®,
équipent toujours les PC.
L'héritage des ordinateurs
Tout au long de leur histoire, les microprocesseurs ont réutilisé toutes les innovations
techniques qui ont été développées pour accroître la puissance des gammes précédentes
d'ordinateurs. Tous ces dispositifs sont maintenant utilisés dans les microprocesseurs
modernes qui sont actuellement les processeurs les plus avancés disponibles sur le marché.
Ceux-ci sont ainsi devenu les descendants de l'histoire technique des ordinateurs. Pour
maintenir le rythme de cette évolution, il est nécessaire de découvrir de nouvelles techniques
pour accroître encore la performance de ces machines. Les dernières en date sont spécifiques
aux microprocesseurs car aucun ordinateur des gammes précédentes ne les avait jamais utilisé
auparavant.
Les microprocesseurs sont devenus les composants principaux des ordinateurs. Réaliser un
processeur d'une manière non monolithique, par exemple par l'assemblage de circuits à faible
taux d'intégration, est maintenant complètement dépassé et loin de l'optimum économique.
Actuellement, tous les nouveaux ordinateurs sont basés sur l'utilisation de microprocesseurs
(par exemple le super-ordinateur CRAY T3E utilise des microprocesseurs ALPHA).
Les microprocesseurs vus comme des circuits intégrés complexes
Les microprocesseurs sont des circuits intégrés complexes. Dans de tels composants, le circuit
lui-même définit un monde interne qui est beaucoup plus petit et plus rapide que le monde
extérieur. Les fonctions internes de ces circuits intégrés fonctionnent beaucoup plus vite que
celles des circuits à moindre taux d'intégration (des cartes électroniques par exemple). C'est
cet effet qui est responsable de la très grande rapidité des circuits intégrés complexes. Cette
différence ne fait que s'accroître lorsque la dimension des motifs technologiques diminue.
Pour un signal électronique, le coût de passage du monde interne d'un circuit intégré au
monde externe est très élevé. Des amplificateurs multi-étages et un adaptateur géométrique,
constitué par le boîtier lui-même, sont nécessaires. La différence géométrique et électrique
entre ces deux mondes est si importante qu'elle est comparable au fait de piloter des organes
électromécaniques à partir d'une carte électronique. La différence de vitesse et de coût
d'interface entre l'intérieur et l'extérieur d'un circuit conduit les concepteurs de circuits
intégrés à mettre le maximum de blocs fonctionnels dans un seul circuit au lieu d'utiliser des
architectures multi-boitiers qui multiplient les (coûteuses) interfaces. Cet effet constitue le
principal moteur de l'accroissement du niveau d'intégration et donc de la complexité des
circuits.
Un autre paramètre important est la notion de distance sur le circuit intégré lui-même. À son
échelle, un circuit complexe est un monde très grand ! Nous pouvons le comparer avec un
pays carré de 1000 km de côté parcouru par des routes de 10 m de large. L'organisation d'une
telle surface demande que les différents blocs qui l'occupent s'imbriquent et s'interconnectent
le mieux possible. Le coût de transfert de l'information d'une extrémité à l'autre d'un même
circuit est très élevé. Les interconnexions entre les différents blocs doivent donc être
minutieusement étudiées pour accroître les échanges locaux et diminuer les communications à
longue distance.
Techniques d'accélération de l'exécution
L'histoire des microprocesseurs est celle d'une course effrénée à la vitesse. La pression
économique qui pousse à l'augmentation continuelle de leurs performances conduit les
concepteurs à trouver de nouvelles approches pour concevoir des machines de plus en plus
rapides. Nous avons vu que cette accélération provient d'une part de la réduction de la
7
dimension des motifs technologiques qui permet d'accroître la fréquence d'horloge et d'autre
part de l'utilisation d'architectures plus rapides basées sur l'utilisation de superpositions dans
l'exécution des instructions. Dans ces machines, l'exécution d'une nouvelle instruction
démarre avant que celles qui la précèdent ne soit terminées. Le prix à payer pour l'utilisation
de ces architectures est une importante augmentation de la complexité de la machine qui peut
aller jusqu'à une multiplication par plusieurs unités de la taille du circuit.
Exécution pipeline
L'idée directrice de cette technique d'exécution est de découper le traitement d'une instruction
en plusieurs sous-tâches exécutées par autant de modules matériels qui travaillent
successivement comme dans une chaîne de montage industrielle. Chacun de ces modules
reçoit ses données (une instruction en cours d'exécution) des modules qui le précèdent.
Avec cette technique, une nouvelle instruction entre dans la chaîne d'exécution à chaque cycle
d'horloge, ce qui augmente fortement la puissance le la machine.
op1
reg1
reg2
op2
op3
reg3
reg4
Figure 6 – Principe de l'exécution pipeline
exécution d'une instruction
(profondeur du pipe-line)
decod Mem decod ex
écrit
decod Mem decod ex
écrit
decod Mem decod ex
decod Mem decod
instruction i
instruction i+1
instruction i+2
écrit
ex
écrit
instruction i+3
1 cycle
Figure 7 – Progression des instructions dans une exécution pipeline
Le problème des architectures pipelines est celui des dépendances. Le parallélisme introduit
dans l'exécution des instructions peut faire que certaines informations nécessaires à
l'exécution d'une instruction particulière ne soient pas encore élaborées par celles situées en
amont et dont l'exécution n'est pas encore terminée (elles sont encore dans la chaîne
d'exécution). Des études statistiques montrent que la probabilité de rencontrer une telle
dépendance est assez élevée.
Plusieurs techniques sont utilisées pour contourner les dépendances. Certaines consistent à
établir des voies directes pour raccourcir le chemin entre la génération d'un résultat (par un
opérateur) et son utilisation comme opérande d'une instruction suivante. D'autres mécanismes,
plus avancés, consistent à faire des hypothèses (prédictions) sur la valeur de l'information
manquante et à continuer l'exécution en espérant qu'elles soient confirmées. Il faut
évidemment pouvoir revenir en arrière si elles se trouvent infirmées. Ce mécanisme
intervient, entre autre, lorsque l'information manquante concerne l'enchaînement même des
instructions. Lorsque l'hypothèse s'avère fausse, toutes les instructions qu'elle a permis de
charger dans la chaîne d'exécution doivent être éliminées. La dégradation de performance qui
8
en découle sera d'autant plus faible que l'hypothèse sera bonne. Des dispositifs de prédiction
particulièrement efficaces (95 %) ont été développés pour les derniers microprocesseurs.
Super-pipeline et super-scalaire
L'efficacité des techniques pour réduire les inconvénients des dépendances conduit les
concepteurs de microprocesseurs à augmenter la longueur des chaînes d'exécution des
machines pipeline pour diminuer la quantité de travail réalisée par chaque étage. Cette
évolution architecturale, appelée super-pipeline permet d'augmenter le débit des instructions
entrant dans la chaîne d'exécution. Le processeur démarre plus d'instructions par seconde et sa
performance est donc augmentée. À titre d'exemple le microprocesseur MIPS R4000 utilise
une chaîne d'exécution à huit étages.
LI1
LI2
DI
EX LD1 LD2
T
LI1
LI2
DI
EX LD1 LD2
LI1
LI2
DI
8 étapes
RR
T
EX LD1 LD2
RR
T
RR
Figure 8 – Exécution super-pipeline
LI
LI
SP
SP
LI
LI
DI
DI
SP
SP
LO EX1 EX2 RR
LO EX1 EX2 RR
DI LO EX1 EX2 RR
DI LO EX1 EX2 RR
2 voies d'exécution identiques
Figure 9 – Exécution super-scalaire
Une autre technique d'accélération, appelée super-scalaire consiste à disposer plusieurs
chaînes d'exécution pipeline en parallèle de manière à augmenter le débit de traitement des
instructions. Ces chaînes d'exécution peuvent être identiques ou spécialisés. Dans ce cas,
chaque chaîne s'alimente avec les instructions qu'elle sait exécuter. Ainsi, le microprocesseur
ALPHA utilise deux pipelines identiques tandis que le Pentium en utilise deux différents.
Exécution dans le désordre
La technique d'accélération actuellement la plus puissante est l'exécution dans le désordre qui
consiste à utiliser pour organiser la machine le modèle dual de la chaîne de montage, c'est-àdire le « hall d'assemblage ». Ce mécanisme d'exécution est organisé autour d'un tampon
particulier (appelé ROB pour ReOrdering Buffer) dans lequel les instructions sont
progressivement exécutées (« construites ») par des opérateurs spécialisés qui travaillent
indépendamment. Ceux-ci scrutent ce tampon pour y trouver les instructions qu'ils peuvent
faire progresser (indépendamment de leur position dans le programme). Par exemple,
l'opérateur chargé de la lecture des opérandes en mémoire cherche des instructions qui ont
besoin de lire des données en mémoire. Il lit ces données et les charge dans des zones
correspondantes du tampon. Les machines de ce type comportent plusieurs opérateurs
spécialisés pour l'exécution (entiers, flottants, chaînes de caractères, calcul d'adresses,..).
Cette technique revient à exécuter, indépendamment et dès que possible, les différentes
fonctions nécessaires au traitement d'une instruction, sans attendre la terminaison des
précédentes.
L'exécution dans le désordre soulève évidement des problèmes de dépendance dont la
résolution est particulièrement complexe.
9
code op
op1
op2
op3
Décodage
Lecture mémoire
Ecriture mémoire
Calcul entier et adresses
Calcul entier et logique
Calcul flottant
tampon de réordonancement (ROB)
Figure 9 – Principe de l'exécution dans le désordre
Cette technique d'exécution très puissante, mais aussi très coûteuse, est utilisée dans les
microprocesseurs Pentium Pro, II, III, 4.
Regroupement des instructions en mots très longs
Dans ce type de machines appelées VLIW (pour Very Long Instruction Words), plusieurs
instructions élémentaires (supposées sans dépendance) sont groupées dans des mots très longs
par les outils logiciels de préparation des programmes (compilateurs) ou dynamiquement en
cours d'exécution. Ces instructions groupées sont extraites en parallèle de la mémoire
exécutées ensemble par plusieurs voies matérielles d'exécution. Cette organisation
architecturale semble très prometteuse car plusieurs constructeurs s'orientent dans cette
direction pour leurs futurs produits, c'est le cas, par exemple, des machines Intel Itanium ®,
Transmeta Crusoe®, TEXAS TMS320C62xx et SUN MAJC 5200.
Multiprocesseurs monolithiques
Puisque les microprocesseurs ont déjà utilisé toutes les techniques connues d'accélération de
l'exécution, plusieurs auteurs suggèrent périodiquement le regroupement de plusieurs
processeurs sur un même circuit monolithique. Cette idée n'est pas nouvelle et plusieurs
projets de tels multi-microprocesseurs ont déjà été envisagés (par exemple un projet de
double MC 6800 a été envisagé à la fin des années 1970). Malheureusement, les nouvelles
générations de monoprocesseurs monolithiques se sont montrées plus attractives et beaucoup
de projets de multi-microprocesseurs furent abandonnés. Maintenant, la situation a peut-être
un peu changé puisque pratiquement toutes les techniques d'accélération des monoprocesseurs
ont été exploitées. En fait, tous les processeurs modernes peuvent être vus comme des
structures multiprocesseurs (pipeline, exécution dans le désordre, VLIW) travaillant sur le
même programme.
Conclusions
L'évolution des ordinateurs est l'une des plus excitantes histoires techniques de la fin du XXe
siècle et probablement du début du XXIe. La puissance de traitement de ces machines a été
multipliée par plus de vingt millions depuis leur apparition au début des années 1950. Aucun
autre domaine technique n'a connu un tel rythme d'évolution sur une durée aussi longue.
Les microprocesseurs constituent maintenant le cœur des machines informatiques. Ils sont en
train de se substituer à toutes les autres technologies de construction d'ordinateur.
Avec l'occurrence des microprocesseurs, l'humanité est en train de réaliser le composant
« intelligent » qui permet de changer profondément la nature des objets de notre
environnement et d'en créer de nouveaux.
Nous pouvons aussi nous poser la question de savoir où une telle évolution nous mène. Les
puissances de calcul qui se profilent à l'horizon sont impressionnantes. Il y a pourtant fort à
parier qu'elles resteront encore longtemps en deçà de la demande car celle-ci semble
10
insatiable. Cette puissance de calcul, déjà impressionnante, ouvre à un large public
l'utilisation de technologies réservées jusqu'alors à des spécialistes, faisant de l'ordinateur
individuel le plus puissant des outils que l'homme ait jamais créé.
Bibliographie
Amblard (P.), Fernandez (J. C.), Lagnier (F.), Maraninchi (F.), Sicard (P.) et Waille (P.),
Architectures logicielles et matérielles, Dunod, 2000
Anceau (F.), The Architecture of Microprocessors, Addison-Wesley, 1986
Anceau (F.), Architecture matérielle des PC Windows-Intel, dans : Techniques de l'Ingénieur,
H 1 008, 1998
Anceau (F.), La saga des microprocesseurs, la course à la puissance, dans : Cerveau et
machines, V. Bloch (éd), Hermes Science, 1999
Anceau (F.), La saga des PC Wintel, dans : Technique et science informatique, Vol 19 n°6,
juin 2000
Chevance (R. J.), Serveurs multiprocesseurs, clusters et architectures parallèles, Eyrolles,
2000
Etiemble (D.), Architecture des processeurs RISC, Armand Colin, 1991
Hennessy (J. L.) et David A. Patterson (D. A.), Architecture des ordinateurs, une approche
quantitative, traduction : International Thomson Publishing France, 1996
Messer (H. P.), Pentium et compagnie, traduction : Addison-Wesley, 1994
von Neumann (J.), L'Ordinateur et le cerveau, traduction : Champs, Flammarion, 1996
Qui a inventé l'ordinateur ?, Les cahiers de Science & Vie, Grands ingénieurs, hors série
n°36, décembre 1996
Tanenbaun (A.), Architecture de l'ordinateur, Dunod 2000
Teifreto (D.), Cours d'architecture des ordinateurs, 2000
http://lifc.univ-fcomte.fr/PEOPLE/teifreto/Teifreto.html
Zanella (P.) et Ligier (Y.), Architecture et technologie des ordinateurs, Dunod, 1998
11
Téléchargement