Introduction à l’Informatique pour les Sciences Humaines IMM - Lettres - Université de Lausanne Notes de cours L'ordinateur.II Brigitte Zellner Keller • Architecture des processeurs • Evolution des processeurs • Programmes Documentation complémentaire recommandée http://www.scedu.umontreal.ca/sites/histoiredestec/histoire/tdmhiste.htm http://www.howstuffworks.com/pc.htm 2 1. Le Processeur ou "Central Processing Unit" (CPU) Composante essentielle de l'ordinateur qui exécute pas à pas un programme, calcule et ordonne le déplacement des données d'une partie de l'ordinateur vers une autre. CPU + mémoire centrale = Unité centrale La CPU consiste en un circuit électronique qui peut accomplir en un ou plusieurs cycles d’horloge des opérations élémentaires appelées "instructions". => chaque instruction n'accomplit qu'une petite portion d'un travail donné. => Une CPU est construite pour comprendre un lexique limité d'instructions différentes. Typiquement, une CPU comprend plusieurs unités fonctionnelles qui collaborent ensemble grâce à diverses connections électriques (BUS). Bien que variables d'une architecture à une autre, une CPU comprend au moins une unité de contrôle (ou commande) et une unité arithmétique et logique (UAL). http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Architecture/Cours/polyarch Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 3 1. Architecture d’un processeur Figure de Joelle Delacroix, Architecture des machines et systèmes informatiques Les 4 phases suivantes représentent un cycle machine. • Phase 1 Les instructions d'un programme sont stockées dans une mémoire qui se trouve généralement à l'extérieur de la CPU. La première tâche de la CPU consiste donc à aller chercher (fetch) puis lire la première instruction qui se trouve en mémoire. Pour cela, l'unité de commande envoie une adresse et une commande en code binaire vers la mémoire. Cette instruction est transférée via le Bus du processeur — système de connection électrique reliant la mémoire à la CPU. • Phase 2 L’Unité de contrôle (voir ci-après) reçoit l'instruction provenant du bus et elle commande les autres composantes selon ces instructions. Après avoir décodé une instruction (traduit), elle envoie ses ordres à l'unité arithmétique et logique pour générer les calculs nécéssaires. • Phase 3 L’Unité arithmétique et logique (Arithmetic Logic Unit, ALU) exécute l’arithmétique et les opérations logiques (négation, opérations ET, OU, OU exclusif). L'exécution d'une instruction est décomposée en une série d'étapes correspondant aux principales opérations nécessaires à l'exécution de l'instruction. Selon sa complexité, une instruction requiert 3, 4 ou 5 cycles d’horloge pour s'exécuter. • Phase 4 Le résultat est transféré en mémoire Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 4 2. Composantes activées lors d'un cycle machine • Registre CO (compteur ordinal) contenant l'adresse où est stockée la prochaine instruction à chercher en mémoire. • Registre RI (registre d'instruction) dans lequel le CPU transfert l'instruction suivante à exécuter, à partir de la mémoire. • Décodeur qui détermine quelle opération doit être effectuée. • Horloge qui émet des impulsions régulières, synchronisant toutes les actions de l'unité centrale. On parle de cycle ou fréquence d'horloge. Le standard actuel varie de 500 MHz à 3 GHz selon les appareils (Mhz: millions de cyles par seconde, GHz: milliards de Hz). Pour des raisons techniques, l’horloge n’est pas directement placée sur le processeur. Un oscillateur interne est synchronisé sur un signal d'horloge externe, souvent fourni par un oscillateur à quartz. La cadence de l’oscillateur interne est un multiple de la cadence du bus système (voir plus loin) : 2.3, 4, 10 selon les architectures. • Séquenceur qui génère les signaux de commande. Cet automate distribue des signaux de commande aux diverses unités participant à l'exécution d'une instruction. • Registres: petites mémoires internes très rapides d'accès utilisées pour stocker temporairement une donnée, une instruction ou une adresse. Chaque cellule mémoire est généralement aussi large que le bus du processeur (la taille de cette cellule ou mot est spécifique au processeur, soit typiquement 8, 16 ou 32 bits). Les registres servent de tampon à la mémoire. 3. Explications supplémentaires Mémoire cache (tampon) Le principe de la mémoire cache est un procédé qui permet de réduire les délais d'attentes car il s'appuie sur le principe de localité. Au lieu par exemple d'aller chercher une instruction après une autre en RAM (où le temps d'accès est supérieur à un cycle d'horloge), on préstocke ces informations dans des registres proches du processeur. Cette astuce permet de réduire considérablement les temps de calcul. Les processeurs actuels utilisent plusieurs niveaux de mémoire cache (voir section Mémoire) : L1 pour Level 1, L2 pour Level 2,etc. Taille du mot L'information étant codée en bit (binary digit), le processeur fonctionne par "paquets" de x bits, qui sont des multiples d'octets. L'information est donc transmise simultanément sur "x bits": la taille du mot du processeur. (Attention, la taille du mot dans le système d’exploitation peut être différente de celle du processeur. Par exemple, dans Windows, la taille du mot des deux octets. Lors de la conception des systèmes Windows, cette taille corrspodait à celle des processeurs). Plus la taille d'un mot est importante, moins le Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 5 processeur a besoin de décomposer l'information en unités plus petites, d'où un gain de temps. Le standard actuel est de 64 ou 128 bits (soit 8 ou 16 octets). Le lexique des instructions La MMI (mémoire des micro instructions), est une mémoire morte, contenant toutes les micro instructions nécessaires au processeur pour exécuter les instructions du langage machine. Liaison processeur-mémoire Les informations échangées entre la mémoire et le processeur circulent sur des bus. Un bus est un ensemble de fils conducteurs, utilisés pour transporter des signaux binaires. Le bus d'adresse est un bus unidirectionnel: seul le processeur envoie des adresses. Le bus de données est un bus bidirectionnel. Lors d'une lecture, c'est la mémoire qui envoie un mot sur le bus; lors d'une écriture, c'est le processeur qui envoie la donnée. Les interruptions Les interruptions permettent au matériel de communiquer avec le processeur. Les interruptions sont surtout utilisées pour la gestion des périphériques de l'ordinateur (ex : frappe d'un caractère au clavier). Une interruption est signalée au processeur par un signal éléctrique sur une borne spéciale. Lors de la réception de ce signal, le processeur ``traite'' l'interruption généralement dès la fin de l'instruction qu'il était en train d'exécuter. 2. Evolution des processeurs 1. Processeurs CISC - RISC Chaque type de processeur possède son jeu d'instructions. Par exemple les processeurs Motorola 68k (incorporés sur les Macinstoshs) utilisaient un jeu d'instructions complexes (processeurs CISC) différent du jeu d'instructions de la génération plus récente des processeurs PowerPC (qui utilisent un jeu d'instructions réduit, RISC). L'architecture CISC L'architecture “pure” CISC (“Complex Instruction Set Computer”) offre un jeu d'instructions complexes. L‘architecture CISC était utilisé par tous les processeurs de type 486, c'est-à-dire les processeurs fabriqués par Intel, AMD, Motorola 68k, etc. Ces processeurs pouvaient traiter directement un grand nombre d'instructions complexes mais souvent peu fréquentes. En effet, des études statistiques ont montré qu’en moyenne, 25% des instructions CISC étaient utilisées 95% du temps. Compte tenu du coût du silicium, la question se posait de l’efficience de cette architecture. Les opérations les plus courantes étant: les opérations d'échange entre l'unité centrale et la mémoire, ainsi que Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 6 les appels à des sous-programmes. Un autre problème était que la taille des instructions et leur temps de décodage était variables. Si initialement, les temps de décodage d'une instruction complexe et d'exécution du code étaient occultés derrière les temps d'accès longs à la mémoire, par la suite, ce problème s’est montré car les délais de latence au niveau des mémoires ont fondu. Le goulot d'étranglement s'est alors déplacé dans le processeur, au niveau des unités de décodage et d'exécution. L'architecture RISC Ce concept est né après s'être aperçu que seule une petite partie du jeu d'instructions était vraiment utilisée pour l'exécution des programmes. L'architecture RISC (“Reduced Instruction Set Computer“) offre donc un jeu d'instructions réduit (environ une centaine). Cette architecture n'est pas programmée pour exécuter des fonctions complexes peu fréquentes. Par contre, elle est optimisée pour exécuter rapidement plusieurs instructions simples et fréquentes. Technologiquement, cette architecture est plus simple donc moins onéreuse. Principes: 1. Une instruction (ou presque) par cycle, imposant que le jeu d'instruction soit limité. 2. Un format fixe pour les instructions (par exemple 32 bit), d'où un décodage simplifié. 3. Les seules instructions d'accès à la mémoire autorisées sont LOAD et STORE, ce qui signifie une diminution des accès plus lents en mémoire et une utilisation accrue des registres (accès plus rapides). Actuellement, les processeurs de type RISC sont plus performants que les CISC bien que ces derniers ne soient plus des CISC “purs”. On trouve plus souvent des hybrides incorporant différentes technologies: le pipeline (voir plus loin), le mariage du CISC et RISC comme dans le pentium pro (c'est un processeur RISC qui “traduit” les instructions CISC). On parle enfin d'architecture superscalaire (voir plus loin) quand un processeur RISC est capable d'exécuter plusieurs instructions simultanément en un seul cycle d'horloge. 2. Parallélisme La différence entre la cadence du processeur et l’horloge système (sur la carte) ne cesse de s'accroître. Afin d'exploiter au mieux ces nouvelles données technologiques, plusieurs formes de parallélismes d'exécution peuvent être mises en oeuvre sur le circuit intégré luimême avec un seul processeur: parallélisme pipeline, parallélisme superscalaire et parallélisme multiprocessus. Multitâches Le principe du Multitâches consiste dans la possibilité d’effectuer plusieurs opérations (ex: transferts d'instructions et de données) en parallèle. Le travail en multitâches a pu se développer grâce à un grand nombre d'innovations technologiques. qui permettent de “simuler” le traitement parallèle, particulièrement au niveau du processeur. Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 7 Pipeline Principe général Le principe du "pipeline" est une forme de parallélisme vertical qui permet d’augmenter le nombre d'opérations effectuées par unité de temps. Au lieu d'attendre qu'une tâche soit complètement achevée avant de commencer la suivante, on subdivise cette tâche en soustâches, ce qui permet d'activer une seconde tâche plus tôt. On augmente ainsi le nombre de tâches exécutées par unité de temps sans changer le temps de latence, c’est à dire le temps total requis pour l'exécution d'une tâche entière. Dans l'exemple ci-après, une solution séquentielle stricte demande 9 périodes de temps pour traiter complètement trois tâches. tâche 1 phase 1 tâche 1 phase 2 tâche 1 phase 3 tâche 2 phase 1 temps 1 temps 2 temps 3 temps 4 tâche 2 phase 2 temps 5 tâche 2 phase 3 temps 6 tâche 3 phase 1 tâche 3 phase 2 tâche 3 phase 3 temps 7 temps 8 temps 9 temps 7 temps 8 temps 9 Une solution en pipeline ne demande que 5 périodes de temps. tâche 1 phase 1 temps 1 tâche 1 phase 2 tâche 2 phase 1 temps 2 tâche 1 phase 3 tâche 2 phase 2 tâche 3 phase 1 tâche 2 phase 3 tâche 3 phase 2 tâche 3 phase 3 temps 3 temps 4 temps 5 temps 6 Au niveau du processeur, il est possible d'obtenir un certain recouvrement dans l'exécution d'instructions successives. Pour cela, chaque instruction est subdivisée en différentes étapes: chercher, décoder, exécuter, accéder à la mémoire, écrire. Ces sous-tâches impliquent différentes parties du processeur. L’application du principe du pipeline est donc possible et permet d’optimiser l’utilisation du processeur. L'exécution d'une nouvelle instruction s'amorce à chaque cycle. Les premières machines commerciales mettant en oeuvre ce type d'architecture apparurent avec l'IBM 360/91 en 1964. Les principaux problèmes rencontrés dans les architectures pipeline sont liés - aux accès à la mémoire (ex: accès au même bus) - aux conflits de dépendance entre instructions (ex: lorsque le contenu d'un même registre est requis par deux instructions successives). - aux branchements et au traitement des interruptions et exceptions (il faut finir le traitement avant d’exécuter le branchement, voire “vider” le pipeline). Il existe aussi des architectures à exécution spéculative, qui permettent, moyennant des méthodes de prédiction, d’éviter de laisser le pipeline inutilisé. Tous ces problèmes peuvent être résolus soit matériellement (techniques basées sur un marquage de registres), soit par logiciel (en modifiant par exemple l’ordre des instructions, en anticipant les branchements). Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 8 Notons que le principe du pipeline est aussi utilisé au niveau des systèmes d’exploitation (Prochain sujet, voir planification des cours). Superscalaire L’architecture superscalaire est une forme de parallélisme horizontal, c’est à dire entre instructions. Une machine (CISC ou RISC) à architecture superscalaire peut amorcer l'exécution de plusieurs instructions à chaque cycle d'horloge, si elles n’ont pas de dépendances entre elles, via l'utilisation de plusieurs unités fonctionnelles (unités pour les opérations entières, unités pour les opérations flottantes, etc.). Ainsi les instructions les plus communes (arithmétiques, chargement, rangement, branchement) peuvent être décodées et exécutés simultanément et indépendamment dans différents pipelines. Les instructions peuvent ainsi s'exécuter en parallèle et terminer leur exécution dans le désordre. Multiflots (“multithread”) Les programmes sont constitués de flux d'instructions. Ces flux d'instructions sont communément appelés des “threads”. Un “thread” est une partie d'un programme pouvant être exécutée indépendamment des autres aspects du programme. Dans une architecture multhread, le processeur fractionne son temps de calcul et le distribue à plusieurs threads. Cette technique simule à un niveau global le parallélisme. Il existe diverses architectures multithread, souvent complexes. Hyperflots (“Hyperthreading”) La technologie HyperThreading a pour principe de base de permettre à un processeur d'être considéré comme deux processeurs par le système d'exploitation, ce qui parfois optimise son efficacité lorsqu'il n'est pas utilisé dans son intégralité par un thread. Conclusion nécéssairement provisoire Sur les ordinateurs monoprocesseurs, les architectures actuelles proposent souvent des combinaisons de ces différentes optimisations pour accélérer les traitements. Par exemple, on peut trouver un parallélisme horizontal où plusieurs pipelines exécutent des flots d’instructions différents, un parallélisme vertical où chaque flot d’instructions n’est présent que dans un étage du pipeline, ou encore un même pipeline partagé à tous les étages par plusieurs flots d’instructions. Un des problèmes posés par ces optimisations d’architectures est que suite à une plus grande vitesse d’exécution des instructions, il s’ensuit une surcharge sur le bus mémoire. Ceci explique la nécessité de disposer de plusieurs niveaux de mémoire cache. Les premières stations de travail multiprocesseurs ont fait leur apparition sur le marché. L’utilisation de plusieurs processeurs augmentent les possibilités du parallélisme, souvent au prix d’une complexité accrue de l’architecture. Le cours 2002-2003 ne traitera pas cette question. Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 9 Discussion sur les performances du Pentium 4 et du biprocesseur PowerMac G4. Pas de notes de cours disponibles. Prière de prendre des notes! 3. Programmes (ou ce qui alimente le processeur...) Les programmes sont conçus et écrits le plus souvent dans un langage de programmation de haut niveau: C, C++, Java, etc. Ces programmes doivent ensuite être "traduits", c'est à dire compilés en langage machine pour pouvoir être exécuter. Une fois traduit en langage machine, un programme apparaît comme une suite d'instructions. Le processeur de l'ordinateur peut alors exécuter de manière séquentielle les instructions du programme: c’est à dire des séquences de bits. Un processeur ne comprend qu’un lexique limité d’instructions. Chaque instruction machine doit fournir au processeur toutes les informations nécéssaires pour déclencher une opération élémentaire. L’instruction machine doit donc contenir un code opération (type d’action demandée) et une ou plusieurs adresses (ces adresses peuvent être: l’adresse de l’opérande1, l’adresse où envoyer le résultat, l’adresse où chercher l’instruction suivante,...). Par conséquent, une instruction machine comportera un champ code opération et un /des champs adresse. On distingue 6 types d’instructions que l’on retrouve sur toutes les machines: Les transferts de données (load, move, store,...) Les opérations arithmétiques (+, -, /, *) Les opérations logiques (ou, and,...) Les contrôles de séquence Les entrées/sorties Les manipulations diverses (décalages, incrémentations,...) 1 Opérande: élément sur lequel on effectue une opération. Opérateur: Symbole indiquant la nature d'une opération (logique ou mathématique). Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne 10 Lexique Cherchez les définitions à partir des notes de cours et du glossaire remis en début d’année Le processeur L’UAL L’UC Les registres L'horloge La carte mère Pipeline Multithread Superscalaire Rappel : 1 Kilo = 1000, 1 Méga = 1 million, 1 Giga = 1 milliard, 1 Téra = 1000 milliards 1 micron = 1 micromètre = 1/1000 mm, Exercice Chercher sur la Toile les caractériques des processeurs actuels: Pentium 4, AMD, biprocesseurs Power PC G4: fréquence du processeur, largeur du mot, largeur et fréquence du bus interne, nombre et taille des caches, Copyright © 2002Brigitte Zellner Keller Lettres, Université de Lausanne