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).