03 Architecture d`un ordinateur

Transcription

03 Architecture d`un ordinateur
CAHIER
03
Architecture d'un ordinateur
L'UNITE CENTRALE
GENERALITES
Les traitements automatisés de l'information sont réalisés par un ensemble de circuits
électroniques qui composent le "cœur" de l'ordinateur.
Ces circuits assurent les grandes fonctions suivantes :
•
le stockage temporaire, par la mémoire centrale, des programmes et des données, le
temps du déroulement du traitement ;
•
l'exécution, par le processeur, des instructions du programme et qui entraîne la
transformation des données (création, modification, suppression, ...) ;
•
l'échange, par le sous-système d'entrée/sortie, des données avec les unités
périphériques.
L'unité centrale est donc composée de la mémoire centrale, du processeur et du sous-système
dispositif d'entrée/sortie.
La mémoire centrale stocke les instructions et les données traitées par le processeur et de ce fait,
le processeur et la mémoire centrale sont intimement associés.
Le processeur (Central Processing Unit ou CPU) est l'élément de l'unité centrale qui interprète et
exécute les instructions du programme. Ses circuits génèrent les signaux nécessaires à l'exécution
de chaque instruction.
Le processeur se compose de l'unité de commande et de contrôle (control unit) et de l'unité
arithmétique et logique (UAL).
1 Schéma de principe de l’unité centrale
L'unité centrale communique avec les unités périphériques par l'intermédiaire du sous-système
d'entrée/sortie.
Une opération d'entrée/sortie est réalisée en exécutant une instruction d'entrée/sortie.
Cette instruction était à l'origine traitée par l'organe de commande, mais les évolutions des
architectures des processeurs ont conduit à déléguer la gestion de l'échange au sous-système
d'entrée/sortie capable de travailler de façon autonome.
Les différentes composantes de l'unité centrale sont interconnectées par des systèmes de câblage
transportant des signaux électriques.
Afin d'éviter une multiplication des interconnexions entre les divers éléments de l'unité centrale
un système de câblage appelé "bus" est mis en commun.
Les bus sont un ensemble de lignes de connexions capables de transmettre des signaux
correspondant à trois types d'informations: adresses, données et commandes. Pour ce faire,
chaque câble est affecté aux tâches spécifiques de transport d'adresses, de données ou de
commandes.
Un bus peut être utilisé par toutes les unités qui y sont connectées, mais jamais par plus de deux
unités en même temps.
Plusieurs bus spécialisés peuvent coexister au sein d'une même unité centrale tels le busmémoire, le bus d'entrée/sortie, etc. Les micro-ordinateurs utilisent des architectures à bus unique
auquel sont connectés tous les organes de l'ordinateur.
DEROULEMENT D'UNE INSTRUCTION DANS L'UNITE CENTRALE
L'exécution d'un programme se déroule de la façon suivante :
•
le programme et les données sont chargés en mémoire centrale (d'où le nom de
machine à programme interne) ;
•
les instructions du programme sont amenées séquentiellement (une par une) à l'unité
de commande et de contrôle qui les analyse et déclenche le traitement approprié en
envoyant des signaux à l'unité arithmétique et logique. Le passage à l'instruction
suivante est automatique ;
•
le traitement peut nécessiter de faire appel à l'unité d'entrée/sortie.
LA MEMOIRE CENTRALE (CF. § INFRA)
La mémoire centrale stocke principalement deux types d'informations :
•
les instructions de différents programmes ;
•
les données nécessaires à l'exécution des programmes.
Les données et les programme résident temporairement en mémoire centrale, le temps nécessaire
au déroulement du traitement.
Le programme est chargé avant son exécution.
Les données sont implantées en mémoire bloc par bloc, puis après traitement, mémorisées sur
support externe.
Au niveau élémentaire et physique, la mémoire centrale ne contient que des bits, qui constituent
l'unité de stockage élémentaire de l'information. Un bit peut prendre soit la valeur "0", soit la
valeur "1".
Registre de
sélection
0
1
2
Adressage
Cellule
Mémoire
Lecture
Dispositif de
Sélection
Ecriture
Registre Mot
Figure 2 Principe de lecture écriture en mémoire
Les instructions et les données sont stockées sous une forme binaire et représentée selon une
codification standardisée telle les codifications internationales ASCII (sur 7 bits) ou EBCDIC
(sur 8 bits).
La codification sur 8 bits tend à se généraliser. Un groupe de 8 bits, appelé octet (byte), constitue
un caractère.
L'UNITE DE CONTROLE ET DE COMMANDE (CF. §3.1)
L'unité de contrôle et de commande coordonne le fonctionnement de l'unité centrale afin de lui
faire exécuter les suites des instructions spécifiées dans chaque programme.
Dans le traitement d'une instruction (cycle de recherche) l'unité de contrôle et de commande met
en œuvre différents dispositifs qui sont :
•
le compteur ordinal qui est un registre contenant l'adresse en mémoire où est stockée
l'instruction à chercher ;
•
le registre instruction qui reçoit l'instruction à exécuter ;
•
le décodeur de code opération qui détermine la nature de l'opération à exécuter ;
•
le séquenceur qui génère les signaux de commande ;
•
l'horloge, qui émet des impulsions électroniques régulières, indispensables à la
synchronisation de toutes les actions de l'unité centrale.
Bus de données interne
Bus d ’adresses
Registre d ’instruction
Compteur
Ordinal
Horloge
Code Opération
Décodeur
d ’instruction
Mémoire de
microprogramme
Séquenceur:
câblé
micro_programmé
Demandes
d ’interruption
Générateur de
phase
Mot
d ’état
Adresse
Micro commandes
Commandes de contrôle
Figure 3 Schéma de principe de l’unité de commande
Les cycles de recherche d'une instruction se décompose selon les étapes suivantes :
•
transfert de l'adresse de la nouvelle instruction du compteur ordinal vers registre
adresse de la mémoire ;
•
une impulsion de lecture, générée par l'unité de commande, provoque le transfert de
l'instruction cherchée vers le "registre mot" qui fonctionne comme un registre tampon
pour toutes les informations lues ou écrites en mémoire ;
•
transfert de l'instruction dans le registre instruction (une instruction étant composée du
code opération et de l'adresse de (ou des) l'opérande(s) ) ;
•
pendant que l'adresse de l'opérande est envoyée vers le registre adresse, le code
opération est transmis au décodeur qui détermine le type d'opération demandée et le
transmet au séquenceur en envoyant un signal sur la ligne de sortie correspondante ;
•
le compteur ordinal est incrémenté en vue du cycle de recherche suivant.
L'UNITE ARITHMETIQUE ET LOGIQUE (UAL)
Tout traitement de données a lieu dans l'UAL.
U A L
2 è m e O p é ra n d e
1 è re O p é ra n d e
Figure 4 L’U.A.L.
Cette partie du CPU, où se trouvent tous les circuits capables d'effectuer les opérations
élémentaires qui sont à la base de tout algorithme, est totalement asservie à l'unité de commande.
C'est précisément cette dernière qui déclenche, contrôle et synchronise toute activité de l'UAL.
Le cycle de recherche de l'unité de commande est suivi par le cycle d'exécution durant lequel
l'opération spécifiée dans l'instruction est effectuée par l'unité arithmétique et logique.
L'unité de calcul ou arithmétique et logique (UAL) contient tous les circuits électroniques qui
réalisent effectivement les opérations désirées.
Ces opérations sont principalement l'addition, la soustraction, la multiplication, la division, la
négation (inversion des bits), les opérations logiques (ET, OU, OU exclusif). Les opérandes
nécessaires pour ces opérations se trouvent dans des registres contenus dans cette unité. Ces
registres sont accessibles aux programmeurs.
Les registres de l'UAL se divisent en différents groupes :
•
les registres arithmétiques : ils servent aux opérations arithmétiques ;
•
les registres de base et d'index: ils permettent le calcul d'adresses par rapport à une
valeur de base ou un index ;
•
les registres banalisés : registres généraux pouvant servir à diverses opérations telles
que stockage des résultats intermédiaires ;
•
le registre d'état (PSW : Program Status Word): il indique l'état du système (si il y a
une retenue lors d'opérations arithmétiques, un dépassement de capacité ...).
La plupart des ordinateurs modernes ont des UAL capables de réaliser une grande variété
d'opérations.
Certaines opérations ne concernent qu'un seul registre et qu'un seul opérande, par exemple, la
remise à zéro, la complémentation logique, le décalage, l'incrémentation, etc.
D'autres concernent deux opérandes, par exemple, l'addition, la soustraction, les opérations
logiques ET, OU, XOR, etc.
Les machines à vocation scientifique offrent toute une gamme d'opérations en virgule flottante et
en double précision.
Par contre certains ordinateurs, par exemple, les micro-ordinateurs, n'ont qu'un nombre limité
d'instructions permettant les opérations les plus simples et laissant à l'utilisateur le soin de
programmer les opérations plus complexes, telle la division, la multiplication, la racine carrée et
les opérations en virgule flottante.
LE DISPOSITIF D'ENTREE/SORTIE
Une opération d'entrée/sortie est réalisée en exécutant une instruction d'entrée/sortie. Cette
instruction est traitée dans l'organe de commande qui prend l'initiative de toute entrée ou sortie. Il
décide de l'instant et de la nature de l'échange, mais il peut prendre une part plus ou moins
importante à l'exécution selon qu'il établit une liaison directe "organe de commandepériphérique" ou qu'il délègue la gestion de l'échange à un organe subordonné mais capable de
travailler de façon autonome, comme le dispositif d'entrée/sortie.
La liaison directe entre l'unité centrale et le périphérique pose le problème du différentiel de
vitesse de traitement externe et interne. Dans ce cas, le processeur est monopolisé pendant toute
la durée de l'échange et est asservie à la vitesse de fonctionnement du périphérique.
En fonction des types d'ordinateur et du volume des échanges avec les périphériques, il existe une
grande variété de configuration possibles.
Dans l'optique d'une utilisation plus optimisée de l'ordinateur, diverses techniques ont été
développées qui déchargent le processeur de la gestion propre à l'échange des données
notamment par la mise en place d'un dispositif d'entrée/sortie.
LA MEMOIRE CENTRALE
GENERALITES
La mémoire centrale d'un ordinateur est un dispositif capable d'enregistrer, de conserver et de
restituer des informations (codées en binaire) pour les besoins d'un traitement.
LES INFORMATIONS CONTENUES EN MEMOIRE CENTRALE
La mémoire centrale contient principalement deux types d'informations :
•
les instructions des différents programmes ;
•
les données nécessaires à l'exécution des programmes.
Tout programme pour être exécuter doit d'abord être chargé en mémoire centrale. Ensuite, le
processeur va y chercher les instructions les unes après les autres accompagnées des données
manipulées pour les exécuter séquentiellement (principe de fonctionnement de la plupart des
ordinateur: architecture "Von Neumann").
LE BIT: L'UNITE ELEMENTAIRE DE STOCKAGE DE L'INFORMATION
Au niveau physique, la mémoire centrale ne contient que des bits, chaque bit constituant l'unité
élémentaire de stockage de l'information.
Le fonctionnement des circuits constitutifs de cette unité élémentaire de mémoire ne permet de
stocker que deux valeurs possibles, soit la valeur "0", soit la valeur "1". D'où l'utilisation du
système de numération binaire pour représenter les valeurs des bits stockés dans la mémoire
centrale de l'ordinateur.
Les instructions comme les données sont stockées sous forme de code machine binaire.
LES SYSTEMES DE CODIFICATION
Parallèlement aux progrès de la technologie qui ont conditionnés les capacités de stockage des
différentes générations d'ordinateurs, les bits ont été regroupés en un certain nombre pour
constituer un caractère.
Des systèmes de codification normalisés ont vu le jour qui ont attribué à chaque caractère une
séquence particulière de valeurs binaires.
Les deux plus connus sont :
•
le code ASCII (American Standard Code for Information Interchange) qui permet une
codification du caractère sur 7 bits ;
•
le code EBCDIC (Extended Binary Coded Decimal Interchange Code) qui permet une
codification du caractère sur 8 bits.
Dans ce dernier cas, chaque caractère occupe en mémoire centrale qu'on appelle octet (byte).
Avec 8 bits il est possible de coder 28 = 256 informations différentes (chaque bit peut prendre 2
valeurs, donc les 8 bits peuvent prendre 28 valeurs), ce qui est suffisant pour coder tous les
caractères alphanumériques et tous les caractères spéciaux (-, ~, !, @, etc ... ).
L'ADRESSAGE MEMOIRE
Parallèlement aux caractères, qui constituent une unité logique d'information, la mémoire centrale
est divisée physiquement en cellules, appelées mots-mémoire (word).
Car les opérations réalisées dans la mémoire centrale qui sont la lecture et l'écriture (cf. figure 19)
ne s'effectuent, non pas au niveau du bits ou du caractère (octet), mais par mots-mémoire.
La longueur d'un mot-mémoire varie d'une machine à l'autre.
Les valeurs 32 et 64 tendent à se généraliser dans la plupart des ordinateurs. La longueur du motmémoire est une caractéristique importante de l'architecture d'un ordinateur et reflète la structure
des différents composants fonctionnels (principalement de l'unité centrale).
Ainsi le mot-mémoire est l'unité d'information adressable et chaque mot possède une adresse qui
lui est propre et peut être adressés séparément pour une opération de lecture ou d'écriture.
A chaque mot-mémoire est donc associé ;
•
une adresse (unique), indiquant la position en mémoire ;
•
un contenu (instruction ou donnée).
Le temps nécessaire à l'écriture ou à la lecture d'un mot-mémoire est appelé le temps d'accès. Il
varie entre quelques nanosecondes et quelques microsecondes.
Les unités utilisées dans la mesure des temps d'accès et de traitement des mémoires centrales
sont :
•
la nanoseconde (ns) = 10-9 = 0,000.000.001 s ;
•
la picoseconde (ps) = 10-12 = 0,000.000.000.001 s.
Les unités plus particulièrement utilisées dans la mesure des temps d'accès des mémoires
externes sont :
•
la milliseconde (ms) = 10-3 = 0,001s ;
•
la microseconde (µs) = 10-6 = 0,000.001 s.
Remarque: il y a autant de nanosecondes dans une seconde que de secondes dans une trentaine
d'années.
Le temps minimal s'écoulant entre deux accès successifs à la mémoire est appelé "cycle
mémoire". Il est plus long que le temps d'accès, car le bon fonctionnement de la mémoire
nécessite quelques opérations de maintien, de stabilisation et de synchronisation des signaux dans
les circuits.
LA CAPACITE DE STOCKAGE DE LA MEMOIRE CENTRALE
La capacité de stockage d'une mémoire s'exprime en fonction du nombre de mots-mémoire ainsi
que du nombre de bits par mot. On dira, par exemple, qu'un ordinateur "X" possède 256 mots de
mémoire centrale avec des mots de 64 bits.
Les unités utilisées dans la mesure des capacités de stockage des mémoires centrales sont :
•
le Kilo (K) = 103 = 210 = 1.024 bits ;
•
le Méga (M) = 106 = 220 = 1.048.576 bits.
Les unités plus particulièrement utilisées dans la mesure des capacités de stockage des mémoires
externes sont :
♦ le Giga (G) = 109 = 230 = 1.073.741.824 bits ;
♦ le Tera (T) = 1012 = 240 = 1.099.511.627.776 bits.
LES REGISTRES DE LA MEMOIRE CENTRALE
Un registre est une cellule de la mémoire centrale ayant une fonction particulière.
On trouve deux types de registres, le registre d'adresse qui contient l'adresse d'un mot-mémoire et
le registre mot qui contient le contenu d'un mot-mémoire. Un registre mot a la même taille qu'un
mot-mémoire, alors qu'un registre d'adresse doit permettre d'adresser tous les mots de la
mémoire.
Par exemple, si la mémoire comporte 256 mots, le registre d'adresse doit avoir log2(256) =
log2(28) = 8 bits. Un registre d'adresse de 32 bits permet d'adresser 232 = 4.294.967.296 mots
différents (4 Gmots).
Pour ce qui concerne une opération de lecture, le registre d'adresse contient l'adresse du mot à
lire, le dispositif de sélection et d'accès permet de transférer une copie du contenu de ce mot dans
le registre mot.
Dans le cas d'une opération d'écriture, le registre d'adresse contient l'adresse d'un mot dans lequel
on va écrire le contenu du registre mot. L'écriture implique l'effacement du précédent contenu du
mot.
LA TYPOLOGIE DES MEMOIRES CENTRALES
Les éléments de mémoire d'un ordinateur sont ordonnés en fonction des critères de capacité, de
temps d'accès et de coût.
Quand on s'éloigne du processeur vers les mémoires auxiliaires, on constate que le temps d'accès
et la capacité des mémoires augmentent, mais que coût par bit diminue :
•
la mémoire centrale est l'organe principal de rangement des informations utilisées par
le processeur. Pour exécuter un programme, il faut le charger (instructions + données)
en mémoire centrale. Cette mémoire est une mémoire à semi-conducteurs.
•
l'antémémoire ou mémoire cache est une mémoire rapide de faible capacité (par
rapport à la mémoire centrale) utilisée comme mémoire tampon entre le processeur et
la mémoire centrale. Cette mémoire permet à ce dernier de faire moins d'accès à la
mémoire centrale et ainsi de gagner du temps. En effet, le cycle d'un processeur étant
beaucoup plus court que le cycle mémoire, cette situation génère des problèmes
d'attente du processeur sur la mémoire, ce qui diminue le rendement de l'ordinateur.
•
la mémoire d'appui (ou "cache de données") sert de mémoire intermédiaire entre la
mémoire centrale et les mémoires externes. Elle est principalement présente sur les
gros ordinateurs (main frame) et permet de réduire le nombre d'échange des
informations (entrée/sortie: I/O) et d'augmenter ainsi la vitesse de leur traitement.
Mémoire virtuelle
Figure 5 La mémoire virtuelle
Au regard de la mémoire centrale, on distingue les mémoires externes, appelées aussi mémoires
auxiliaires ou mémoires de masse.
Ces mémoires sont des éléments de stockage périphériques permanent de grande capacité et de
coût relativement faible.
Elles utilisent pour cela des supports magnétiques (disques, cartouches, bandes) et des supports
optiques (disques optiques).
CARACTERISTIQUES DES PRINCIPAUX TYPES DES MEMOIRES CENTRALES
ACTUELLES A SEMI-CONDUCTEURS
LES MEMOIRES RAM
Une mémoire RAM (Random Access Memory), appelée également mémoire vive, est une
mémoire à accès aléatoire; le temps d'accès est indépendant du numéro de la cellule adressée.
La mémoire RAM présente la caractéristique d'être volatile, c'est-à-dire de perdre son contenu
lorsque l'on coupe le courant. Celle-ci a donc besoin d'un apport constant d'énergie électrique
pour conserver ses informations.
La mémoire centrale à semi-conducteurs est volatile alors que les mémoires auxiliaires
magnétiques ne le sont pas. On peut réaliser des mémoires non volatiles à semi-conducteurs,
moyennant une petite batterie.
On distingue deux types de mémoires RAM, les SRAM et les DRAM
•
la mémoire vive statique SRAM (Static RAM): ces mémoires sont réalisées en
technologie unipolaire et en technologie bipolaire, cette dernière étant la plus rapide.
Chaque point mémoire nécessite en principe quatre transistors, car un bistable est
constitué de deux portes NOR, et chaque porte NOR est constituée de deux transistors;
•
la mémoire vive dynamique DRAM (Dynamic RAM) dont l'information doit être
rafraîchie périodiquement (par exemple toutes quelques millisecondes). Ces mémoires
sont réalisées uniquement en technologie MOS. Un point mémoire est constitué d'un
transistor couplé à un condensateur. Le condensateur se décharge progressivement,
entraînant la perte de l'information. Il faut périodiquement lire le signal (la charge du
condensateur), l'amplifier et le réécrire. Elles présentent les avantages d'une
fabrication plus simple, d'une densité d'intégration plus grande (d'un facteur 4
environ), et d'un coût par bit moins élevé. L'inconvénient majeur est d'avoir à
supporter la logique de rafraîchissement.
LES MEMOIRES ROM
Une mémoire ROM (Read Only Memory) est une mémoire morte, c'est-à-dire une mémoire où
l'on peut lire uniquement, l'écriture étant impossible. Ce sont des mémoires non volatiles,
programmées par le fabricant. Le coût élevé pour la réalisation des masques impose de grandes
séries. Elles sont réalisées en technologie MOS et bipolaire. Ces mémoires trouvent leurs
applications dans la conversion de code, la génération de caractères pour l'affichage sous forme
de matrice de points, le stockage de certains programmes système, la microprogrammation, le
codage du clavier, etc.
LES MEMOIRES PROM
Une mémoire PROM (Programmable ROM) est une mémoire morte programmable une seule fois
par l'utilisateur, et de manière irréversible. Ces mémoires sont connues pour la mise au point ou
la réalisation de programmes identiques en faible nombre d'exemplaires. Elles sont réalisées en
technologie MOS ou bipolaire. L'inscription peut se faire selon plusieurs techniques, la plus
courante est le stockage de charges. Chaque point mémoire est constitué d'un transistor unipolaire
(MOS) dont la grille est isolée. Celle-ci, appelée grille flottante, peut garder sa charge électrique
pendant plusieurs dizaines d'années. Le fait que la grille ait une charge électrique ou non,
commande le comportement du transistor puisque la tension appliquée à la grille décide s'il y a un
canal ou pas. L'écriture se fait par application d'une forte tension entre source et drain. La lecture
est simple, elle suit le même principe qu'un transistor normal. Dans le cas d'un transistor à
enrichissement, si la grille flottante est chargée, elle induit un canal, il y a conduction entre
source et drain, alors que si la grille n'est pas chargée, il n'y a pas de canal et pas de conduction
entre source et drain.
Une autre technique ne comportant pas de transistors mérite d'être citée: le claquage de jonctions.
La mémoire est organisée sous forme matricielle en réseaux de diodes. Tous les points de
croisement entre lignes et colonnes sont isolés au départ. L'inscription d'une valeur consiste à
établir ou non la connexion au point de croisement considéré, en claquant ou non la diode.
Lorsque l'on sélectionne une ligne d'adresse, toutes les lignes de données dont les jonctions (avec
cette ligne d'adresse) n'ont pas été claquées, retournent un certain courant. Alors que pour toutes
les lignes dont la jonction est claquée, il n'y a aucun courant. Cette technique ne permet pas une
grande intégration, car il faut laisser une certaine place autour de chaque diode pour la claquer
correctement.
LES MEMOIRES EPROM
Les mémoires EPROM (Erasable Programmable ROM) sont aussi appelées REPROM
(REProgrammable ROM). Le principe est le même que celui des PROM, mais elles offrent en
plus la possibilité de pouvoir être effacées un certain nombre de fois. L'effacement se fait par
exposition aux rayons ultraviolet. Le temps d'exposition est de l'ordre de trente minutes. Ces
mémoires sont utilisées lors de la mise au point de programme destinés à être stockés en ROM.
Les mémoires EAROM (Electrically Alterable ROM) suivent le même principe que celui des
EPROM, elles sont reprogrammables par l'utilisateur mais elles sont à effacement électrique. De
plus l'effacement est sélectif et l'effacement total ne demande pas plus d'une minute. On trouve
aussi les appellations EEROM (Electrically Erasable ROM) et EEPROM.
Dans la pratique, un élément de mémoire est une puce.
Pour réaliser une mémoire centrale, il faut un grand nombre de puces que l'on répartit sur des
cartes. Un mot-mémoire peut être composé de différentes manières, qui sont :
•
1 bit/carte: un mot mémoire est composé par les bits ayant la même adresse sur les
cartes, l'adresse se compose du numéro de la puce et de l'adresse à l'intérieur de cette
puce ;
•
1 bit/puce: un mot mémoire est compose par les bits ayant la même adresse dans les
différentes puces ;
•
plusieurs bits/puce: un mot mémoire est composé par plusieurs bits d'une même puce.
Ces différentes structures n'influent pas sur la capacité de la mémoire ni sur la longueur des
adresses, mais elles influent sur la répartition des bits d'adresse, puisque les bits d'adresse servent
à adresser les cartes, les puces et les bits à l'intérieur des puces.
Ces différentes structures montrent bien, en tous cas, que la mémoire centrale a une capacité
limitée et que cette limitation est due à la longueur des adresses (c'est-à-dire le nombre de bits
utilisés pour adresser la mémoire).
La plupart des micro-ordinateurs actuels offrent la possibilité d'étendre facilement leur mémoire
centrale RAM. Pour cela ils ont un certain nombre d'emplacements réservés pour accueillir des
modules de mémoire, appelés SIMM (Single In-line Memory Module). Une SIMM est un groupe
de chips RAM généralement monté sur un petit circuit imprimé de forme rectangulaire, appelé
barrette, que l'on installe sur la carte principale d'un micro-ordinateur.
LE PROCESSEUR (CENTRAL PROCESSING UNIT OU CPU)
Le processeur (Central Processing Unit ou CPU) est l'élément de l'unité centrale qui interprète et
exécute les instructions du programme. Ses circuits génèrent les signaux nécessaires à l'exécution
de chaque instruction.
Le processeur se compose de l'unité de commande et de contrôle (control unit) et de l'unité
arithmétique et logique (UAL). L'unité de commande dirige le fonctionnement de toutes les
éléments de l'unité centrale (UAL, mémoire, entrée/sorties) en leur fournissant les signaux de
cadence et de commande. L'UAL est la zone du processeur où les instructions arithmétiques et
logiques sont exécutées.
Unité Centrale
Unité de Traitement
Mémoire
Centrale
U.A.L
Unité de
Commande
Figure 6 Le processeur ou C.P.U.
L'UNITE DE CONTROLE ET DE COMMANDE
L'unité de contrôle et de commande gère l'exécution des instruction d'un programme.
Elle contient deux registres importants :
•
le registre d'instruction (RI) qui contient l'instruction en cours d'exécution (une
instruction comporte plusieurs champs: un champ code-opération et entre 0 et 3
champs-opérandes) ;
•
le compteur ordinal (CO) qui contient l'adresse de la prochaine instruction à exécuter
(qu'il faut aller chercher en mémoire). Généralement, les instructions se suivent de
manière séquentielle, il suffit alors d'incrémenter le CO de +1 à chaque cycle du CPU,
pour obtenir l'adresse de l'instruction suivante. Quelquefois on est obligé de forcer sa
valeur, lors de branchements par exemple.
Les registres de l'unité de commande ne sont pas accessibles aux programmeurs. L'unité de
commande contient aussi un dispositif de décodage des instructions (décodeur) et un séquenceur
de commandes qui active les circuits nécessaires à l'exécution de l'instruction en cours. Cette
unité a besoin des signaux d'une horloge pour enchaîner les commandes.
LA SYNCHRONISATION DES OPERATIONS
Les circuits de l'unité de commande synchronisent et contrôlent toutes les opérations de l'unité
centrale (cf. figure 20).
Les signaux périodiques générés par l'horloge définissent le cycle de base ou cycle machine
(clock cycle), durée de base régissant le fonctionnement de la machine au niveau le plus
élémentaire.
Le temps d'exécution d'une instruction dépend du type d'opération à effectuer; un cycle
instruction peut s'étendre sur plusieurs cycles machine.
On trouve parfois le terme "cycle CPU" pour indiquer le temps d'exécution de l'instruction la plus
courte ou la durée d'une action élémentaire provoquant un changement d'état.
Le cycle mémoire est beaucoup plus long que le cycle CPU et limite la performance de
l'ordinateur. Pour pallier à cette lenteur relative de la mémoire centrale, on a introduit des
mémoires entrelacées permettant le recouvrement des cycles, ainsi que des antémémoires
permettant d'anticiper les transferts de données et d'instructions vers le CPU.
La vitesse de fonctionnement d'un ordinateur ne dépend donc pas seulement de sa fréquence
d'horloge mais aussi du cycle et de la structure de la mémoire, du temps d'accès de l'éventuelle
antémémoire.
LE SEQUENCEUR
Le séquenceur est un automate générant les signaux de commande nécessaires pour actionner et
contrôler les unités participant à l'exécution d'une instruction donnée. Ces signaux sont distribués
aux différents points de commande des organes concernés selon un chronogramme tenant compte
des temps de réponse des circuits sollicités.
Cet automate peut être réalisé de deux façons: séquenceur câblé ou séquenceur microprogrammé.
Sous sa forme câblée, le séquenceur est un circuit séquentiel complexe qui fait correspondre à
chaque instruction exécutable un sous-circuit capable de commander son déroulement. Le souscircuit approprié est activé par un signal provenant du décodeur.
Avec le séquenceur microprogrammé le même résultat est obtenu à l'aide d'une suite de microinstructions stockées dans une mémoire de microprogrammation. Ce microprogramme est
capable de générer une suite de signaux de commande équivalente à celle produite par un
séquenceur câblé.
Il suffit de stocker les microprogrammes (firmware) correspondant aux différents codes opération
dans une mémoire très rapide et d'ajouter un mécanisme pour l'exécution séquentielle des microinstructions permettant les branchements conditionnels. La mémoire n'étant utilisée qu'en lecture,
elle peut être du type ROM ou EEPROM, non volatile et bien protégée.
L'avantage d'un tel séquenceur réside dans sa souplesse et dans sa simplicité. Le prix à payer: une
vitesse légèrement inférieure.
La microprogrammation permet de réaliser le séquencement des commandes électroniques par
une technique plus flexible que la logique câblée. On peut montrer qu'il est toujours possible de
remplacer un circuit logique par un microprogramme.
La séquence exacte des actions coordonnées par le séquenceur dépend de l'opération durant un
cycle d'exécution.
Le cycle d'exécution comprend généralement les étapes suivantes :
•
le séquenceur envoie les signaux de commande vers la mémoire pour lire l'opérande à
l'adresse déjà stockée dans le registre adresse et le fait parvenir dans le registre mot ;
•
le contenu du registre mot est transféré vers l'accumulateur ou tout autre registre
affecté à l'opération spécifiée de l'UAL. Dans le cas de la mémorisation d'un résultat
par exemple, le contenu de l'accumulateur sera transféré vers le registre mot ;
•
Dans le cas d'une instruction de branchement, le champ adresse de l'instruction est
alors transféré dans le compteur ordinal.
•
le cycle d'exécution est réalisée sous le contrôle du séquenceur.
Une fois le cycle d'exécution terminé, l'unité de commande passe immédiatement au cycle de
recherche suivant et prend en compte la nouvelle instruction indiquée par l'adresse contenue dans
le compteur ordinal.
LES REGISTRES DU CPU
Le nombre et le type des registres que possède le CPU sont une partie déterminante de son
architecture et ont une influence importante sur la programmation. La structure des registres du
CPU varie considérablement d'un constructeur à l'autre. Cependant les fonctions de base réalisées
par les différents registres sont essentiellement les mêmes. Nous allons décrire les registres les
plus importants, leur fonction et la façon dont ils peuvent être modifiés par programme.
LE COMPTEUR ORDINAL (CO)
Le registre CO (Program Counter: PC) contient toujours l'adresse en mémoire de la prochaine
instruction à exécuter. Le CO est automatiquement incrémenté après chaque utilisation. Le
programme est ainsi exécuté en séquence à moins qu'il ne contienne une instruction modifiant la
séquence, par exemple, une instruction de saut ou un branchement. Dans ce cas, la nouvelle
adresse remplacera le contenu du CO. Ce changement sera effectué pendant le cycle d'exécution,
après le décodage du code opération, mais avant le transfert du contenu du CO vers le RA.
La taille du CO dépend du nombre de positions de mémoire adressables. Par exemple avec un CO
de 16 bits on peut adresser une mémoire de 216 mots.
Le programmeur n'a pas accès au CO directement.
Fonctionnement du compteur ordinal
Compteur Ordinal
Code opération
Adresse de l ’opérande
Séquenceur
Figure 7 Fonctionnement du compteur ordinal
LE REGISTRE INSTRUCTION (RI)
Le registre instruction contient l'adresse mémoire de l'instruction à exécuter.
Pour recherchée en mémoire centrale une instruction, l'unité de commande lui envoie une adresse
et une commande.
L'instruction est transférée vers l'unité de commande et placée dans le RI où son décodage permet
de déterminer l'opération demandée.
La taille du RI correspond à la taille du mot-mémoire. Le programmeur n'a pas d'accès au RI. Les
bits correspondant à la zone code opération sont envoyés soit au décodeur afin déterminer
l'opération à exécuter.
Cette information est utilisée pour générer les signaux nécessaires à l'UAL pour l'exécution de
l'instruction. Dans ce cas les données à traiter seront aussi cherchées en mémoire par l'unité de
contrôle et transférées directement à l'UAL.
L'ACCUMULATEUR (ACC)
L'accumulateur est un registre très important de l'UAL. Dans la plupart des opérations
arithmétiques et logiques l'ACC contient un des opérandes avant l'exécution et le résultat après. Il
peut aussi servir de registre tampon dans les opérations d'entrée/sortie. Généralement l'ACC a la
même taille que le mot-mémoire mais, dans la plupart des machines, il possède une extension qui
permet de doubler sa taille. Cette extension, souvent appelée registre Q, est utilisée conjointement
avec l'ACC, pour contenir le résultat d'une multiplication ou le dividende et le quotient d'une
division. L'extension Q est aussi utilisée dans les opérations en double précision pour contenir les
bits les moins significatifs.
Naturellement le programmeur à accès à l'ACC, qui est toujours très sollicité pendant le
traitement des données. Certains processeurs ont plusieurs accumulateurs; dans ces cas-là, les
codes opération précisent l'accumulateur utilisé.
LES REGISTRES GENERAUX
Les registres généraux ou banalisés (general purpose registers), appelés aussi parfois bloc-notes
(scratchpad), permettent de sauvegarder des informations fréquemment utilisées pendant le
programme, ou des résultats intermédiaires; cela évite des accès à la mémoire, accélérant ainsi
l'exécution du programme.
Les registres généraux sont à la disposition du programmeur qui a normalement un choix
d'instructions permettant de les manipuler. Les plus répandues sont :
•
chargement d'un registre à partir de la mémoire ou d'un autre registre ;
•
enregistrement en mémoire du contenu d'un registre ;
•
transfert du contenu d'un registre dans l'ACC et vice versa ;
•
incrémentation ou décrémentation d'un registre.
LES REGISTRES D'INDICE (XR)
Les registres d'indice ou d'index (index registers) peuvent être utilisés comme les registres
généraux pour sauvegarder et pour compter. Mais, en plus, ils ont une fonction spéciale qui est de
grande utilité dans la manipulation des tableaux de données. Ils peuvent, en effet, être utilisés
pour manipuler des adresses, suivant une forme particulière d'adressage, appelée dressage indexé.
Le principe de l'adressage indexé est que l'adresse effective d'un opérande est obtenue en
sommant la partie adresse de l'instruction avec le contenu du registre d'index spécifié. On peut
facilement parcourir des tableaux en modifiant le contenu d'un registre d'index. Des instructions
sont disponibles qui permettent l'incrémentation ou la décrémentation; dans certains cas, ces
registres sont automatiquement incrémentés ou décrémentés après chaque utilisation.
LES REGISTRES DE BASE
Utilisés comme les registres d'indice pour calculer des adresses effectives (adressage basé), les
registres de base (base registers) sont conçus pour contenir une adresse de référence; pour obtenir
l'adresse effective, il faut y ajouter le contenu du champ adresse de l'instruction.
Les registres de base sont fort utiles dans la relocation dynamique et pour adresser des mémoires
dont le nombre de mots excède la capacité du champ adresse de l'instruction-type.
LE REGISTRE D'ETAT (PSW = PROGRAM STATUS WORD)
Appelé aussi registre condition, le registre d'état contient différents bits appelés drapeaux (flags)
indiquant l'état d'une condition particulière dans le CPU.
Par exemple, le bit indicateur Z indique si le résultat de l'opération effectuée est égal à zéro; le bit
indicateur C indique un dépassement de capacité dans l'ACC, etc. Ces bits peuvent être testés par
programme et ainsi déterminer la séquence d'instructions à suivre. Ils sont aussi utilisés par le
CPU pour tester, par exemple, l'indicateur d'interruption ou l'indicateur Z pour l'exécution d'un
branchement conditionnel "saut si zéro" (jump on zero).
LE REGISTRE POINTEUR DE PILE (SP = STACK POINTER)
Ce registre est utilisé pour simuler une pile dans la mémoire centrale, dans laquelle on réserve
une zone de mémoire. Le registre SP fonctionne comme un registre d'adresse mémoire (RA)
utilisé uniquement pour la partie pile de la mémoire RAM. Lorsqu'un mot est chargé dans la pile,
son adresse est inscrite dans le SP; lorsqu'un mot est lu, la lecture se fait à partir de l'adresse
indiquée par le pointeur SP. Le pointeur indique à tout instant l'adresse correspondant au sommet
de la pile.
Le fonctionnement d'une pile (LIFO) simulée en mémoire est comparable à celui d'une pile
câblée, et il peut être ainsi résumé :
•
chaque fois qu'un mot doit être enregistré dans la zone mémoire réservée pour la pile,
il est placé à l'adresse qui suit celle du mot enregistré précédemment ;
•
les informations enregistrées dans la pile sont lues dans l'ordre inverse de celui dans
lequel elles ont été enregistrées ;
•
une fois qu'un mot est lu, son emplacement dans la pile devient disponible pour une
nouvelle information.
Pour pouvoir simuler plusieurs piles LIFO, certaines machines sont dotées de plusieurs registres
SP.
LES REGISTRES SPECIALISES
Dans certains ordinateurs on peut trouver des registres spécialisés pour les opérations
particulières, par exemple, registres à décalage (shift register), registres pour opérations
arithmétiques en virgule flottante (floating point registers), etc.
ADRESSAGE DES OPERANDES
Le champ adresse d'une instruction ne contient pas toujours l'adresse effective d'un opérande.
Cependant, si c'est le cas, on dit qu'il s'agit d'un adressage direct.
Pour faciliter la programmation, les fabriquants offrent toute une gamme de méthodes pour
adresser les opérandes. Le format des instructions prévoit un champ dont les bits indiquent le
mode choisi.
Parmi les différents modes d'adressage, les plus importants sont :
•
immédiat: le champ adresse contient l'opérande ;
•
direct: le champ adresse contient l'adresse effective ;
•
indirect: le champ adresse contient l'adresse où se trouve l'adresse effective; on peut
parfois avoir plusieurs niveaux d'indirection ;
•
implicite: le code opération indique où se trouve l'opérande; par exemple, machines à
zéro adresse ;
•
indexé: adresse effective = contenu du champ adresse + contenu du registre d'index ;
•
basé: adresse effective = contenu du registre de base + contenu du champ adresse ;
•
relatif: comme l'adressage basé, mais utilise le contenu du CO comme adresse de base.
On peut parfois combiner les modes d'adressage, par exemple l'adressage indexé avec l'adressage
indirect. Dans ce cas, il faudra bien comprendre l'ordre d'application des méthodes car le résultat
en dépend.
AMELIORATION DES PERFORMANCES DES PROCESSEURS
LE TEMPS D'ACCES
Le temps d'accès aux registres est beaucoup plus court (≅ 10 fois) que le temps d'accès aux motsmémoires (qui se trouvent en mémoire centrale). Les ordinateurs essayent de compenser cette
lenteur (relative) de la mémoire centrale par différents mécanismes, généralement en augmentant
le nombre de registres du CPU et en ajoutant une mémoire très rapide, la mémoire cache ou
antémémoire, près du CPU. Elle sert de zone tampon entre le CPU et la mémoire.
On utilise aussi une mémoire cache (appelée mémoire d'appui) entre la mémoire centrale et les
unités périphériques afin de réduire le nombre d'accès externes.
LE MULTI-PROCESSEUR
Dans les gros ordinateurs, les performances sont augmentées en multipliant le nombre de
processeur. Des machines multiprocesseurs sont ainsi fabriquées c'est-à-dire possédant plusieurs
CPU. Dans un multiprocesseur, chaque processeur possède sa propre antémémoire.
LE CO-PROCESSEUR
On peut aussi ajouter des co-processeurs mathématiques, des processeurs vectoriels, dédiés à des
traitements spécifiques.
EVOLUTION ET TYPOLOGIE
L'architecture d'un ordinateur est la description de ses unités fonctionnelles et de leurs
interconnexions.
L'architecture peut être vue à plusieurs niveaux, par exemple, on peut la considérer au niveau des
entrées/sorties, du processeur central (CPU: Central Processing Unit), ou même d'un réseau
d'ordinateurs.
L'architecture définit avec précision la fonctionnalité de chaque niveau. La technologie
correspond aux techniques de réalisation des différents éléments.
La configuration d'un ordinateur correspond à l'organisation adoptée pour mettre ensemble et
faire fonctionner les divers éléments matériels (processeurs, mémoire, terminaux, imprimantes,
unités de disque, etc ...) de l'ordinateur.
Les configurations possibles sont fonction de l'importance et de la finalité du système mis en
œuvre.
LES PROGRES TECHNOLOGIQUES ET L’EVOLUTION DES ARCHITECTURES
DES ORDINATEURS
LA MINIATURISATION DES COMPOSANTS
La miniaturisation des composants électroniques et donc des circuits réduit le temps de
propagation des signaux électriques dans les conducteurs, voyageant à une vitesse proche de celle
de la lumière (une distance de 20 cm est parcourue en une nanoseconde).
L'idée a été de fabriquer un processeur sur une seule puce (microprocesseur). Le premier
microprocesseur a intégré sur une microplaquette (chips) au milieu des années 70. Depuis, les
travaux de recherches se sont toujours orientés vers le développement de ces microplaquettes
contenant un nombre toujours plus grand de circuits logiques.
En plus du processeur les microplaquettes peuvent contenir les coprocesseurs arithmétiques, les
mémoires cache, et les autres fonctions de communication et d'entrées/sorties. Fabriqués en
grandes quantités, ces microprocesseurs offrent des performances étonnantes à des prix
relativement bas. L'accent est mis sur le rapport prix/performance.
De ce fait, les processeurs deviennent de plus en plus rapides, à des prix toujours de plus en plus
bas.
Les progrès de la miniaturisation ont par ailleurs un effet directement perceptible notamment au
travers de la réduction des dimensions physiques des ordinateurs.
EVOLUTION DES ARCHITECTURES DES ORDINATEURS
L'AUGMENTATION DE LA VITESSE D'EXECUTION DE L'UNITE CENTRALE
L'accroissement des performances est obtenu de différentes manières.
La vitesse d'exécution de l'unité centrale est augmentée sous l'effet de la miniaturisation constante
des composants électroniques et notamment des mémoires internes et des processeurs.
Des modifications sont également apportées à l'architecture en introduisant des unités
fonctionnelles spécifiquement adaptées notamment au calcul rapide de la transformée de Fourrier
ou réalisant l'arithmétique en virgule flottante.
Ces unités sont souvent appelées accélérateurs à cause de leur effet sur le temps d'exécution de
certains programmes.
Les processeurs peuvent être également dotés de registres spécialisés ou d'unités capables
d'organiser le traitement des données à la chaîne selon la technique dite
du pipelining (cf. IV.1).
ARCHITECTURES EXPLOITANT LA SIMULTANEITE DES OPERATIONS
Le progrès technologique permet d'envisager des architectures exploitant la simultanéité
(parallélisme) des opérations à tous les niveaux.
La simultanéité peut être réalisée en équipant l'UAL de plusieurs additionneurs ou multiplicateurs
pouvant travailler ainsi en même temps.
Mais de façon plus générale, elle est organisée en mettant plusieurs processeurs en parallèle, ce
qui permet d'exécuter plusieurs travaux en même temps ou de distribuer un calcul donné sur
plusieurs processeurs.
Les ordinateurs sont alors appelés multiprocesseurs: plusieurs processeurs fonctionnent en
parallèle en partageant la même mémoire centrale, ou chacun étant doté de sa propre mémoire et
capable de communiquer avec les autres grâce à des connexions très performantes.
EVALUATION DE LA PERFORMANCE
Du point de vue de l'utilisateur, la performance d'un ordinateur est fonction du temps d'exécution
de ses programmes.
Les ordinateurs sont classés en fonction de leurs capacités et performances.
Si l'évaluation de la capacité d'une mémoire est aisée (on compte le nombre de mots mémoire en
Mbytes ou Gbytes), l'évaluation de la performance de traitement d'un ordinateur est beaucoup
plus complexe.
Elle fait intervenir plusieurs facteurs qui sont la vitesse de traitement proprement dite (spécifique
du processeur), du temps de réponse de la mémoire centrale, et la vitesse des entrées/sorties qui
dépend des différents types de mémoires externes utilisés.
Des programmes de test, appelés benchmarks, permettent d'évaluer les performances des
ordinateurs, mais peu d'entre eux sont réellement utilisés de façon standard.
Un certain nombre d’unités de mesure des performances des processeurs ont été développé, les
plus standards étant le Mips, le Flop et le Spec.
Le Mips (Million of Instructions Per Second) est l'unité la plus simple. Elle mesure le nombre
d'instruction machine exécutée par seconde. Elle sert de référence et peut s'appliquer à tous les
processeurs.
Le Mflops (Million of FLoating point Operations Per Second) est une mesure spécifique du
nombre d'opérations arithmétiques en virgule flottante que peut exécuter un processeur par
seconde.
On parle maintenant de Gflops (Gigaflops) et de Tflops (Teraflops).
Ces deux unités sont des indicateurs souvent trompeurs et leur calcul varie selon le fabricant. Les
jeux d'instructions variant d'une machine à l'autre faussent l'utilisation du Mips. Notamment, les
performances fournies par des machines RISC et CISC ne peuvent pas être mesurées avec la
même unité.
Le Mflops pose également d'autres problèmes. Le temps d'exécution d'une addition est différent
de celui d'une division, pourtant ils sont généralement considérés de façon identique dans le
calcul de la performance.
Il existe d'autres unités plus ou moins utilisées telles que le dhrystone, par exemple.
Un certain nombre de constructeurs se sont groupés pour former un groupe appelé SPEC (System
Performance Evaluation Cooperative) qui a pour objet de définir des mesures standards
communes. Ils ont défini une dizaine de programmes de test (principalement des programmes
scientifiques écrits en langage C et en Fortran). Ils exécutent ces programmes sur leurs machines
et ils comparent le temps d’exécution avec un temps de référence (temps d'exécution sur un Vax
11/780). On calcule un "SPECratio" (temps de référence divisé par temps d'exécution sur la
machine testée) pour chaque programme et on fait la moyenne de tous les programmes pour
obtenir la valeur finale exprimée en SPECmark.
Toutes ces mesures sont des indicateurs plutôt théoriques de la performance d'un ordinateur.
Dans le choix d'un ordinateur, rien ne remplace les benchmarks effectués avec un échantillon
représentatif de programmes d'applications, représentant le travail qui sera réellement exigé du
futur système.
LES ARCHITECTURES RISC ET CISC
GENERALITES
L'évolution des processeurs classiques a conduit à développer des processeurs ayant des jeux
d'instructions de plus en plus complexes.
Ces instructions complexes sont des programmes micro-codés dont le décodage est effectué à
l'intérieur du processeur et dont l'exécution peut prendre plusieurs cycles d'horloge.
Pour ces raisons, ces processeurs classiques ont été appelés CISC (Complex Instruction Set
Computer).
Il est à noter néanmoins que le temps passé au décodage n'est pas pénalisant comparé au temps
d'accès de la mémoire.
Cependant, dans le milieu des années 70, on remarqua que seule une petite partie du jeu
d'instructions des microprocesseurs était réellement utilisée pendant l'exécution des programmes:
dans 80% des cas, un processeur n'utilise que 20% de son jeu d'instructions.
Les instructions les plus utilisées sont celles de transfert entre unité centrale et mémoire et les
branchements aux sous-programmes.
A partir de cette constatation est né le concept d'un microprocesseur avec un jeu limité
d'instructions, les microprocesseurs RISC (Reduced Instruction Set Computer).
Les nombreux développements liés à l'architecture RISC sont le résultat d’une synthèse entre les
progrès accomplis dans la technologie des semi-conducteurs et la meilleure compréhension du
rôle des compilateurs et des systèmes d'exploitation, visant ainsi à optimiser la conception d’un
système dans sa totalité. En effet, les compilateurs se développent en même temps que
l'architecture d'une nouvelle machine.
Avec l'avènement des architectures RISC, les instructions complexes des processeurs CISC sont
remplacées par des séquences d'instructions simples.
Ces microprocesseurs RISC sont donc principalement caractérisés par un jeu restreint
d'instructions simples effectuées rapidement en un cycle d'horloge.
CARACTERISTIQUES FONDAMENTALES D'UNE ARCHITECTURE RISC
Un processeur RISC possède les caractéristiques fondamentales suivantes :
•
exécution des instructions en un seul cycle d'horloge ;
•
simplification du format des instructions (généralement 32 bits) ;
•
réduction et simplification du jeu d'instructions (modes d’adressage limités) ;
•
utilisation intensive des registres ;
•
séquenceur câblé.
En pratique, les instructions sont câblées, ont une longueur fixe et sont uniformes pour faciliter
leur décodage. Le code opération et les zones d'adressage des registres occupent toujours les
mêmes positions dans ce format. Ces processeurs utilisent les techniques de parallélisme vues
précédemment (pipeline et superscalaire).
Un programme génère donc beaucoup plus d'instructions pour un processeur RISC que pour un
CISC. Les temps d'accès à la mémoire jouent un rôle plus important d'où l'utilisation intensive de
mémoires caches et d'un grand nombre de registres (pour limiter les opérations d'accès à la
mémoire). Pour optimiser le passage des paramètres lors d'appel de procédures, une nouvelle
technique fût adoptée par un certain nombre de constructeurs: celle des fenêtres de registres.
Le principe est de diviser les registres en un certain nombre de blocs délimitant le nombre
d'imbrications de procédures. Chaque bloc est associé à une procédure (d'un certain niveau
d'imbrication) et utilisé pour ses paramètres d'entrée et de sortie et pour ses variables locales.
Donc pour chaque niveau d'imbrication donné, une procédure peut accéder aux registres qui lui
sont propres ainsi qu'aux registres dédiés aux paramètres du bloc suivant. On préfère maintenant
revenir aux registres conventionnels pour éviter de passer trop de temps à la sauvegarde du
contexte lors d'interruptions.
L'utilisation de mémoire cache est fondamentale dans les processeurs RISC.
Les processeurs CISC en faisaient déjà usage, mais leurs tailles étaient plus limitées. On trouve
des caches pour les instructions (les statistiques ont montré que 80 à 90 % des programmes se
trouvent dans des boucles) et des caches pour les données (très utiles lors de la manipulation de
tableaux de données).
Un des principaux problèmes rencontrés lors du développement des processeurs RISC est lié à la
compilation des programmes et plus particulièrement à la génération de code. En effet, dans les
systèmes CICS, les instructions complexes facilitent le travail de génération de code. Avec les
machines RISC, les instructions de base sont plus simples, donc il y a une plus grande différence
de niveau entre les instructions des programmes sources et les instructions offertes par le
processeur. Un effort particulier a du être apporté à la génération de code et à son optimisation.
Parmi les critères d'optimisation, on trouve :
•
l’allocation optimale des registres (pour éviter des accès à la mémoire) ;
•
l’élimination des redondances ;
•
l’optimisation des boucles (les expressions qui ne sont pas modifiées dans une boucle
sont sorties de la boucle) ;
•
le remplacement d'opérations lentes par des opérations rapides (par exemple certaines
multiplications et divisions peuvent être remplacées avantageusement par des
opérations de décalage) ;
•
l’optimisation des pipelines.
Les processeurs RISC sont plus simples que les CISC ce qui entraîne un temps de conception
plus court, des circuits plus petits laissant de la place pour des registres, des co-processeurs
permettant d'augmenter les performances. De plus la simplicité de l'architecture est aussi un
avantage pour l'utilisateur car le jeu d'instructions est plus facile à utiliser. Il y a une meilleure
corrélation entre instructions et cycles machine ce qui facilite l’optimisation du code.
L'avènement des processeurs RISC pose un problème au niveau des bus. En effet les bus actuels
ne sont pas adaptés à une telle vitesse de traitement. Il est donc nécessaire de développer de
nouveaux bus plus performants.
DIFFERENCES ENTRE RISC ET CISC
L'évolution des architectures CISC vise à simplifier la tâche du compilateur tandis que le concept
RISC simplifie le matériel pour augmenter les performances en utilisant une nouvelle génération
de compilateurs.
L'opposition entre les architectures CISC et RISC en fait n'a pas réellement eu lieu. Les
approches RISC et CISC, au départ très différentes l'une de l'autre, migrent maintenant vers les
mêmes objectifs qui sont principalement l’exécution d'une ou plusieurs instructions en un seul
cycle d'horloge avec des fréquences de plus en plus rapides.
Pour cela, les deux familles utilisent les mêmes principes de mémoire cache, de gestionnaire de
mémoire, de pipeline et d'architectures parallèles avec différentes unités travaillant en parallèle
avec le processeur central comme les unités de traitement des nombres flottants.
ARCHITECTURE DES MICROPROCESSEURS
MICROPROCESSEUR ET MICRO-ORDINATEUR
Les progrès dans la miniaturisation des circuits électroniques sont à la base du développement
accéléré du microprocesseur pendant les dernières décennies.
Par ailleurs, elle est à l’origine de l'accroissement de la taille des mémoires centrales et de
l'augmentation du nombre et de la puissance des unités de traitement dont ont profité les
ordinateurs haut-de-gamme, les machines parallèles et les super computers.
De plus, elle a donné naissance à toute une série de composants d’un niveau élevé, permettant
ainsi de construire facilement et avec un nombre relativement petit de boîtiers des machines bon
marché.
La gamme des ordinateurs s'est trouvée considérablement élargie et, pendant que vers le haut on
s'organise pour partager des ressources coûteuses, au bas de la gamme on découvre l'ordinateur
personnel.
La réalisation, par le constructeur Intel du premier microprocesseur "Intel 4004" date de 1971. Il
s'agissait d'un CPU entièrement intégré sur une microplaquette de quelques mm2, qui pouvait
traiter 4 bits à la fois.
Le succès à l'époque fût retentissant et il trouva très rapidement des applications dans les
voitures, les avions, les fusées, les instruments de mesure, les jeux TV et les appareils
électroménagers.
Le microprocesseur peut être défini comme un circuit intégré composé d'une unité de traitement
complète (unité de commande + UAL).
Il est à l'origine de la naissance du micro-ordinateur que l'on peut définir comme une unité
centrale composée d'un microprocesseur doté d'une mémoire centrale et reliée à un certain
nombre d'unités périphériques.
EVOLUTION DES MICROPROCESSEURS
Dès 1975, le progrès technologique s'accélère et permet d'intégrer de plus en plus de circuits dans
une puce.
Les transistors occupent toujours moins de place ce qui permet d’en intégrer un nombre toujours
plus croissant sur la même petite surface disponible.
En 1976, la société Intel réussit à intégrer sur une puce un microprocesseur, le i-8048, composé
d’une unité de commande, d'une UAL 8 bits, d'une ROM (1 Kbyte) pour les instructions, d'une
RAM (64 bytes) pour les données et de dispositifs d'entrée/sortie (27 lignes).
Figure 8 Fabrication d'un Microprocesseur
Avec le i-8048 on dépasse les 20.000 transistors sur une seule microplaquette.
Figure 9 La Taille du Microprocesseur lui permet de passer dans la chas d'une aiguille
Un microprocesseur 64 bits indique que le bus de données a une largeur de 64 bits. La taille des
données influence de nombreux composants tels que les registres et la précision des opérations
arithmétique. La taille du bus d'adresse influence directement le nombre de mots mémoire
accessibles. Le bus d'adresses permet de référencer une position mémoire et le contenu de celle-ci
(données ou instruction) est transféré au processeur central par le bus de données.
D'autres constructeurs se lancent dans la fabrication des microprocesseurs, tels Texas
Instruments, Zilog, NAS, Hewlett-Packard et plus tard DEC (Digital Equipment Corporation),
IBM et les Japonais. A la fin des années 70, on avait produit plus de 100 millions de
microprocesseurs 8 bits !
C'est alors qu'apparaissent les microprocesseurs 16 bits. Par exemple, le MC 68000, qui
s'approche du Mips, peut adresser 16 Mbytes de mémoire, possède 15 registres (16 bits) et un
séquenceur micro et nano-programmé.
L'arrivée des microprocesseurs 16 bits permet d'envisager de nouvelles applications.
Jusque là on avait surtout utilisé les microprocesseurs pour remplacer la logique câblée à
l'intérieur d'instruments et d'appareils de toutes sortes. Mais leur fonctionnement était transparent
pour l'utilisateur.
Les nouveaux microprocesseurs sont beaucoup plus puissants et flexibles et permettent
d'envisager leur programmation par l'utilisateur. C'est ainsi que ces microprocesseurs intelligents
ouvrent la voie à la robotique, la bureautique, l'ordinateur personnel qu'on appelle aussi microordinateur, et aux stations de travail professionnelles, qui sont en train de bouleverser les
méthodes de travail des ingénieurs, des architectes, des techniciens, etc ...
Les années 80 voient l'apparition des architectures 32 bits, typiques des ordinateurs de moyennes
puissance.
Avec l'entrée en scène des microprocesseurs Motorola M 68020, M 68030, Intel 80286 et 80386
et de la famille des microprocesseurs RISC M 88000, on peut disposer de microprocesseurs assez
puissants (plusieurs dizaines ou centaines de Mips) pour concurrencer les applications des miniordinateurs et capables de provoquer un nouveau saut de qualité dans les applications des
ordinateurs personnels et professionnels.
A l'heure actuelle, les limites des architectures 32 bits sont atteintes et dépassées par les
architectures 64 bits qui deviennent le standard actuel tel que le processeur Alpha de DEC.
Certains processeurs adoptent déjà une architecture 128 bits soit pour le bus des données soit
pour le bus des instructions.
Quant à la poursuite de cette évolution dans les années futures, rien n'empêche de croire que le
progrès technologique continuera pas au même rythme, ou presque, jusqu'à la fin du siècle.
Ce qui devrait permettre d'augmenter la densité des composants, d'améliorer encore les
performances et de baisser ultérieurement les prix.
Mais la complexité des circuits disponibles sur une puce augmente aussi et demande un effort
considérable pour la maîtriser.
LES EXEMPLES DES MICROPROCESSEURS INTEL ET MOTOROLA
Les microprocesseurs classiques ont été dominés par deux grands constructeurs: Intel et
Motorola, dont l'évolution des processeurs s’est réalisée de manière parallèle, les noms de code
de leurs produits ayant un certain nombre de similitudes.
Depuis ces deux familles de microprocesseurs se sont développées pour donner naissance à des
microprocesseurs intégrant de plus en plus de transistors et avec des lignes de données et
d'adresses de plus en plus larges (8, 16, 32 bits).
L'augmentation de la densité d'intégration a permis d’intégrer d'autres unités comme une unité de
gestion de mémoire paginée ou un coprocesseur arithmétique.
Le processeur Intel 80586 est sorti sous le nom de Pentium. Il intègre plus de trois millions de
transistors et il a une performance de l'ordre de 100 Mips.
Alors que celui-ci est juste terminé, les deux ou trois prochaines générations sont déjà à l'étude.
Ces microprocesseurs ont principalement été adoptés par les PC compatibles IBM, alors que les
microprocesseurs Motorola ont été adoptés par Apple pour sa famille de machine Macintosh.
Pour ces deux familles de microprocesseurs, la fréquence d'horloge peut varier entre 16 et 50
MHz.
Klamath est le nom de code attribué au successeur du Pentium Pro, une version plus performante
du Pentium. Ce que l'on sait déjà de lui, c'est que les ingénieurs d'Intel lui ont adjoint une unité
spécialisée notamment dans le traitement des données multimédias et nommé MMX.
Les procédés de gravure des puces devraient permettre de positionner un transistor tous les 0,28
micron pour le fabricant Intel contre 0,35 pour ses concurrents Cyrix et AMD.
LES PERSPECTIVES D'EVOLUTION
Andy Grove, le P.D.G. de la société Intel, a affirmé à l'occasion du Comdex, que dans 15 ans, les
microprocesseurs compteront 1 milliard de transistors, tourneront à la fréquence de 10 Ghz
(10.000 Mhz) et délivreront une puissance de 100.000 Mips !
Ces estimations tiennent compte des performances passées, des technologies existantes et des lois
de la physique.
La très fameuse "loi" de Gordon Moore (un des co-fondateurs de la société Intel) qui veut que la
puissance des puces double tous les dix-huit mois, aurait donc encore de très nombreux jours
devant elle.
En 1989, Intel avait prédit que ses processeurs compteraient, en 1996, quelques 8 millions de
transistors, fonctionneraient à la fréquence de 150 Mhz, développeraient une puissance de 100
Mips, et seraient gravés dans une finesse de 0,35 micron.
Force est de constater qu'il ne s'est pas beaucoup trompé, puisque les principales caractéristiques
de ses actuelles puces sont les suivantes (Pentium IV) : 42 millions de transistors, fréquences de 3
Ghz, 60.000 Mips, gravure en 0,13 micron.
Si la course à la puissance devait s'arrêter un jour, ce serait la faute à quelques lois physiques
jugées incontournables. Lorsque les "rivières" gravées au cœur des microprocesseurs seront d'une
largeur inférieure au 1/500e de micron, les électrons y circulant auront toutes les chances de se
perdre en effets quantiques...
Ce pourrait alors en être fini de la loi de Moore.
Mais nous n'en sommes pas là: à l'horizon 2006, l'épaisseur de la gravure ne devrait être "que" de
0,06 micron. Pas de problème donc.
Cependant une question reste en suspend: 100.000 Mips pour quoi faire ?
Il est vrai que la capacité de l'industrie informatique à digérer ses propres progrès n'est plus à
démontrer. Depuis que les micros sont devenus multimédia, les développeurs sont condamnés
aux plus incroyables gymnastiques (techniques hyper sophistiquées de compression, trompe-l'œil
en tous genres ...) pour nous faire oublier la faiblesse des processeurs actuels.
Et ce n'est que pour "après-demain" que l'on verra de gigantesques écrans muraux de trois mètres
de diagonale affichant cent images par seconde, dans des définitions telles que l'on pourra
compter les cils des cyber-héroïnes des séries télé-interactives.
ARCHITECTURE DES SUPERORDINATEURS
GENERALITES
On construit des ordinateurs aux performances extrêmes, répondant aux exigences des
applications scientifiques et techniques les plus avancées.
Depuis l'arrivée du Cray-l (1976) on a pris l'habitude de les appeler "super-ordinateurs"
(supercomputers) pour les distinguer des modèles plus communs et plus répandus, généralement
affectés aux applications ne demandant pas des calculs numériques très poussés.
Les scientifiques et les ingénieurs ont toujours dû affronter des problèmes dépassant la capacité
de calcul des machines les plus puissantes.
De nombreuses disciplines ont des problèmes nécessitant d’énormes quantités d'opérations
arithmétiques, par exemple la météorologie, la dynamique des fluides, l'aérodynamique, l'analyse
de structures, la micro-électronique, la physique des particules, la chimie moléculaire, les
mathématiques appliquées, la simulation numérique de systèmes, le traitement d'images, etc.
Cependant l'étiquette de "super-ordinateur" est à la fois vague et éphémère.
Les "supercomputers" d'hier n'ont plus grand chose à offrir et ceux de demain sont encore sous
forme de prototypes et d'idées.
A l'évidence, l'existence de ces supercomputers est très courte.
Et pourtant le marché est littéralement envahi par de soi-disant "supercomputers" et autres
"super-minis".
On pourrait laisser les superlatifs aux constructeurs et essayer de classer les ordinateurs selon
leurs caractéristiques essentielles.
Par exemple, la plupart des machines à haute performance sont des mono ou multiprocesseurs
vectoriels à pipelines multiples. Pour avoir une idée de leur niveau de performance, on doit tenir
compte du nombre d’unité de traitement, du cycle machine, de la capacité de la mémoire centrale
ainsi que des registres affectés aux calculs vectoriels dans les processeurs, des débits des bus
reliant la mémoire aux processeurs centraux et des connexions entre la mémoire centrale et les
mémoires auxiliaires, sans parler de l'indispensable logiciel qui permet d'exploiter toutes ces
ressources.
Nous avons vu précédemment que les Mips et les Mflops sont des indicateurs souvent trompeurs
et leur calcul varie selon le constructeur.
En ce qui concerne les Mflops, il faut tenir compte du fait que dans le cas d'une application
pratique, même si elle est très gourmande en calculs numériques, en réalité 10 % à 20% de la
capacité maximale est effectivement utilisé. Ceci est largement suffisant pour obtenir des
augmentations de vitesse (speedup) parfois très importantes par rapport aux machines purement
scalaires.
Des facteurs entre 10 et 100 ont été gagnés en vectorisant certaines applications, ce qui permet
d'effectuer en quelques heures des calculs qui auraient demandé des semaines ou des mois.
La présence d'une unité scalaire est de nature à augmenter également les performances du
système.
Si la plupart des supercomputers peuvent être décrits comme étant des machines dotées de
processeurs vectoriels à pipelines, il faut encore distinguer entre les différents niveaux
d'intégration de ces processeurs vectoriels. En effet, plusieurs constructeurs offrent en option des
processeurs pour les calculs vectoriels que l'on peut brancher sur des ordinateurs scalaires. La
tendance est à la généralisation et à la diffusion des facilités vectorielles. La gamme des solutions
s'étend continuellement et le choix de la machine la mieux adaptée à un problème donné est loin
d’être évident.
EXEMPLES DE SUPER-ORDINATEURS
On distingue plusieurs catégories de super-ordinateurs dont les super-ordinateurs vectoriels (le
processeur est capable de travailler sur des vecteurs de données) et les super-ordinateurs
multiprocesseurs.
Il n'y a que quelques fabriquants de super-ordinateurs vectoriels: Cray aux Etats-Unis, Fujitsu,
Hitachi et Nec au Japon.
La première machine de ce type était le Cray-1 réalisée en 1976 par Seymour Cray
(monoprocesseur de 10 Mips et 160 Mflops, avec une unité de traitement vectoriel composée de
sept unités spécialisées).
Dans les années 80, Cray a commercialisé des machines telles le Cray-XMP et le Cray-2 ayant
jusqu'à quatre processeurs, chaque processeur étant capable de quelques 25 Mips et 450 Mflops.
Avec l'arrivée de la série YMP et du Cray-3, ce constructeur confirme la tendance vers les
multiprocesseurs, les mémoires centrales de très grande capacité et des cycles machine
s'approchant de la nanoseconde (CRAY-2 = 4,1 ns; CRAY-3 = 2 ns).
D'ailleurs, la concurrence ne cesse de repousser les limites atteintes.
Le constructeur Nec produit le SX-3, qui avec ses quatre processeurs dépasse les 25 Gflops. Pour
certaines recherches à la pointe du progrès technique et scientifique, ces machines sont devenues
des outils indispensables, mais elles subissent désormais la concurrence des machines parallèles.
Pour ce qui concerne les machines parallèles, on peut mentionner les constructeurs américains
TMC (Thinking Machine Corporation), Intel, Cray, Ncube, IBM, et les japonais tels que Fujitsu.
L'Europe a relevé le défi des machines parallèles avec les constructeurs suivants Kendall Square
Research, Meiko, Parsytech, et en particulier les constructeurs français avec Telmat, ACRI et
Archipel.
LES PROCESSEURS A ARCHITECTURES PARALLELES
LE PARALLELISME
Les progrès considérables de la technologique ont autorisé la réalisation des architectures d'un
très haut niveau de parallélisme, avec des centaines, voire des milliers, de processeurs.
L’idée à la base du traitement parallèle est de distribuer le travail nécessaire à la solution d'un
problème sur plusieurs processeurs faisant partie de la même machine. En effet, on observe que,
dans la plupart des programmes que l'on exécute normalement en séquence, il existe des blocs
d'instructions totalement indépendants, qui pourraient être exécutées en même temps. Cela
implique un nouveau style de programmation et une complexité accrue au niveau du logiciel.
Il est évident que certains problèmes tels ceux rencontrés dans les mathématiques appliquées,
dans le traitement d'images ou en physique, possèdent un bon niveau de parallélisme naturel et
peuvent être adapté sans trop de difficultés à un traitement parallèle.
Par contre, il y a des programmes (notamment dans le domaine de l'informatique de gestion) qui
ne se prêtent pas facilement à une telle décomposition.
Le parallélisme peut être considéré comme un type d'architecture des processeurs qui permet à
plusieurs actions de se dérouler en même temps, de manière concurrente.
En augmentant le parallélisme d'un processeur on augmente sa capacité de traitement.
On distingue entre différents niveaux de parallélisme.
Le parallélisme interne est organisé à l'intérieur même d'un processeur classique, alors que le
parallélisme externe se réfère à plusieurs processeurs travaillant en liaison plus ou moins étroite.
LE PARALLELISME INTERNE
Il existe trois formes de parallélisme interne :
•
le parallélisme par duplication: ce parallélisme réalise une simultanéité réelle de
certaines opérations ou actions, en multipliant les dispositifs affectés à ces tâches,
comme par exemple :
1. les additionneurs parallèles,
2. les bus multi-lignes pour transferts parallèles,
3. les mémoires à blocs indépendants entrelacés,
4. ou les additionneurs ou multiplicateurs supplémentaires,
5. etc ... ;
♦ le parallélisme par anticipation: l'accroissement des performances est obtenu en
effectuant certaines actions susceptibles de réduire le temps d'attente d'une unité critique,
comme par exemple :
6. en recouvrant le temps d'exécution d'une instruction avec la recherche de
l'instruction suivante. Le recouvrement des actions dans un pipeline, peut aussi
être cité comme un exemple de ce type de parallélisme;
7. en dotant le processeur d'une antémémoire,
8. en organisant les transferts de données entre une unité périphérique et la mémoire
en vue de les traiter ultérieurement en simultanéité avec le travail du processeur,
9. etc.
♦ le parallélisme par multiplexage: lorsque plusieurs unités lentes sont servies par une
unité rapide, on réalise une simultanéité apparente. C’est le cas, par exemple, des
systèmes utilisés en temps partagé (time-sharing).
LE PARALLELISME EXTERNE
Le parallélisme externe se réfère à plusieurs processeurs travaillant en liaison plus ou moins
étroite. Il peut être classifié selon trois types d'architectures :
•
SIMD (Single Instruction Multiple Data streams): il s'agit de machines ayant une unité
de commande unique, mais plusieurs unités d’exécution. Tous les processeurs
exécutent la même instruction simultanément. On peut classer dans cette catégorie les
processeurs vectoriels qui exécutent la même instruction sur des tableaux d'éléments :
•
MIMD (Multiple Instructions Multiple Data streams): on peut classer dans cette
catégorie les multiprocesseurs, où chaque processeur exécute un programme différent,
et aussi les machines parallèles où tous les processeurs travaillent au même
programme ;
•
A titre complémentaire, on pourrait également citer l'architecture du type MISD
(Multiple Instructions Single Data streams), bien qu'aucun processeur n'ai encore été
construit sous cette architecture.
N.B. L'architecture de Von Neumann est à classer dans la catégorie SISD (Single
Instruction Single Data stream) qui concerne les processeurs strictement séquentiels
et dépourvus de parallélisme externe. Elle est, en effet, caractérisée par une seule
unité de commande traitant une seule séquence d'instructions (Single Instruction
stream) et par une seule unité d'exécution (UAL) traitant une unique séquence de
données (Single Data stream).
PARALLELISMES TRANSPARENT - PARALLELISME VISIBLE
La plupart de ces techniques, visant l'accroissement des performances, ne concernent pas
directement l'utilisateur. On parle alors de parallélisme transparent.
C'est le cas, par exemple, du pipeling ou de l'antémémoire.
Mais il y a aussi un parallélisme visible, nécessitant la collaboration de l'utilisateur pour être
réalisé efficacement. C’est le cas notamment des machines vectorielles et parallèles, où la
programmation joue un rôle fondamental dans la recherche d'une performance maximale.
Il est cependant opportun de noter que certains problèmes ne peuvent pas profiter de l'apport du
parallélisme.
Les traitements réalisés dans le cadre d'une application ne sont pas tous transposables selon un
mode parallèle. Notamment, la plupart des applications de gestion ne peuvent profiter des
possibilités offertes par cette architecture.
De ce fait, les systèmes hautement parallèles ne peuvent être que rarement exploités à 100% .
LES PROCESSEURS "SUPERSCALAIRES"
Ce qualificatif est attribué à des processeurs capables d'exécuter en parallèle un petit nombre
d'instructions (de 2 à 5). La simultanéité est réelle. On peut, par exemple, exécuter une instruction
en virgule flottante pendant qu’une autre unité fait une opération avec des nombres entiers et
qu'une troisième s'occupe d'un transfert mémoire-registre. C'est le processeur qui gère ses unités
de traitement et qui s'organise pour optimiser le parallélisme.
La performance des machines superscalaires dépend beaucoup du compilateur qui doit être
capable de trouver suffisamment d’instructions pouvant être exécutées en parallèle, c'est-à-dire
n'ayant pas de dépendances entre les variables.
L'APPROCHE VLIW
L'approche VLIW (Very Long Instruction Word) consiste à placer, dans un mot de taille assez
grande (plus de 100 bits), plusieurs instructions prêtes à être exécutées en parallèle par des unités
fonctionnelles multiples indépendantes.
L'approche VLIW est similaire à l'approche superscalaire mais la gestion du parallélisme n'est
plus effectuée par le processeur. Le concept VLIW fait entièrement confiance au compilateur qui
arrange les instructions dans ces grands mots structurés. Un processeur superscalaire livre aux
différentes unités fonctionnelles des instructions individuelles issues du compilateur, tout en
laissant au hardware la responsabilité de décider du nombre d’instructions à exécuter à chaque
instant. L'affectation des opérations aux unités de traitement est codée dans l'instruction ellemême.
Un des premiers microprocesseurs à utiliser cette technique est le i860 conçu par la société Intel
qui a des instructions d'une longueur de 128 bits.
CONCLUSIONS SUR LES ORDINATEURS PARALLELES
Ces différents types d'architectures ont donné naissance à des ordinateurs différents et assez
complémentaires adaptés à la résolution de problèmes dans des domaines très divers :
•
d'abord, on dispose de puissantes machines scalaires, exécutant leurs instructions en
séquence selon les principes de Von Neumann, et dont on a appris à se servir depuis
une quarantaine d'années;
•
ensuite, on a depuis une quinzaine d'années, des processeurs vectoriels très puissants,
capables de résoudre des problèmes qui étaient réputés infaisables, à cause du temps
d'exécution sur les machines scalaires;
•
enfin, on peut désormais compter sur toute une gamme de machines parallèles avec
d'énormes capacités de calcul, distribuées sur de grandes quantités de processeurs,
mais qui demandent au programmeur une approche différente. Mais pour arriver à une
utilisation aisée de ces machines, il faudra un long apprentissage.
Les ordinateurs parallèles représentent la seule direction de recherche envisageable pour atteindre
le Tflops (mille milliards d'opérations en virgule flottante par seconde) avant la fin du siècle.
LES PROCESSEURS A ARCHITECTURES SCALAIRES ET VECTORIELLES
LA TECHNIQUE DU PIPELINING
Cette technique exploitée par les super-ordinateurs, est souvent adoptée pour accroître les
performances des unités de traitement des ordinateurs de n'importe quel niveau de puissance.
Le principe du pipelining s'inspire de l'organisation du travail à la chaîne.
Le pipelining est une technique permettant d'effectuer davantage de travail par unité de temps
quand il faut répéter une opération donnée sur un grand nombre d'opérandes. Elle consiste à
segmenter une opération complexe en une séquence d'actions plus simples. Chaque action simple
est réalisée par un dispositif particulier. Plusieurs instructions complexes peuvent ainsi être
traitées en même temps tout en étant à des stades différents d'exécution.
Au lieu de concevoir une unité S capable d'effectuer l'opération P dans le temps T, on divisera le
travail en segments P1, P2, P3, P4 ... exécutés par des sous-unités S1 ,S2, S3, S4 ... dans des
temps T1 ,T2, T3, T4 ... fraction du temps T. Dés que la chaîne (pipeline) est pleine, c'est-à-dire
dès que toutes les sous-unités sont occupées, on commence à sortir les résultats à un rythme
beaucoup plus élevé que dans le cas de l’unité non segmentée.
Il ne s'agit donc pas d'augmenter la vitesse d'exécution d'une opération, mais de produire
davantage de résultats par seconde, en fournissant continuellement des opérandes à l'entrée du
pipeline.
Cette méthode est utilisée notamment pour accroître la capacité en Mflops. Les différentes
opérations en virgule flottante sont segmentées et le hardware concerné est restructuré de manière
analogue aux stations d'une chaîne de montage.
Dans le cas de l'addition, l'opération est segmentée en cinq parties correspondant chacune à cinq
stations, affectées aux fonctions suivantes :
•
comparaison des exposants ;
•
interversion des mantisses, si nécessaire ;
•
décalage les mantisses ;
•
addition les mantisses ;
•
normalisation du résultat.
Les performances peuvent être augmentées en organisant des pipelines en parallèle (pipelines
multiples). Avec trois additionneurs segmentés en cinq stations et travaillant en même temps, la
productivité exprimée en Mflops est améliorée d'un facteur de 15.
La technique du pipelining peut aussi s'appliquer à des dispositifs autres que ceux faisant partie
de l'UAL. Par exemple, la section de l’unité de commande qui traite les instructions peut être
organisée en pipeline. En effet, on peut segmenter le cycle instruction en une séquence d'actions,
comme suit :
•
recherche en mémoire centrale l'instruction suivante,
•
décodage du code opération,
•
recherche de l'opérande,
•
activation du séquenceur ou du micro-code,
•
réalisation de l’opération,
•
incrémentation du code opération d'une unité.
Les actions ainsi définies peuvent se suivre et se recouvrir dans le temps, le débit est
nécessairement augmenté.
LES PROCESSEURS A ARCHITECTURES SCALAIRES ET VECTORIELLES
La technique du pipelining ouvre la voie au traitement systématique de blocs de données, qu'on
appelle aussi vecteurs (vectors).
Un vecteur est une variable ayant plusieurs valeurs.
Un pipeline, pour être efficace, doit fonctionner automatiquement une fois l'opération lancée,
sans intervention ultérieure de la part du programme. Le programme doit se limiter à spécifier le
type d'opération désirée et les vecteurs concernés; ce qui peut se faire en une seule instruction.
Un processeur vectoriel (vector processor) est une unité d’exécution (UAL) organisée pour
effectuer des opérations sur des vecteurs. Une telle opération est déclenchée par une instruction
vectorielle faisant partie du jeu d'instructions de la machine. Avec une seule instruction, on peut
donc provoquer la somme de deux vecteurs, c'est-à-dire des éléments correspondant aux deux
vecteurs.
On dit d'un processeur qu'il est scalaire, s'il ne possède pas cette faculté d'opérer sur des vecteurs
et s'il ne peut qu'exécuter des instructions dont l'effet se limite à des variables scalaires, c'est-àdire des variables ayant une seule valeur.
Pour être efficace, un processeur vectoriel doit pouvoir disposer de blocs de registres ultrarapides, capables de stocker les vecteurs provenant de la mémoire centrale et prêts à être traités
par l'un des pipelines. Egalement, il doit posséder suffisamment de registres pour y déposer les
résultats produits, avant de les envoyer vers la mémoire.
Souvent, les résultats issus d'un pipeline doivent être soumis à d’autres pipelines pour des
traitements ultérieurs. Dans ces cas, un stockage temporaire en mémoire centrale devient inutile,
et ce qui encombre davantage les bus.
Des vecteurs peuvent subir des traitements successifs, programmés à l'avance, sans quitter le
CPU, limitant les accès à la mémoire. On réalise ainsi un autre niveau de pipelining.
Pour cette raison, certains systèmes offrent la possibilité d'enchaîner les opérations vectorielles
(chaining).