I La place du processeur dans l'ordinateur

 Fernandez Jordan

 

  1/ Le fonctionnement des processeurs.

 

  Le processeur noté CPU (central processing unit) est le cerveau de l'ordinateur. Au début ils étaient conçus spécifiquement pour un ordinateur d’un type donné, mais par la suite cela changea.

Il est situé sur la carte mère (circuit imprimé qui porte les principaux composants électroniques soit : le processeur, la mémoire, le chipset et l'horloge, ...)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Le processeur permet de manipuler des informations numériques et d'exécuter les instructions stockées en mémoire.

Aujourd’hui, les processeurs sont basés sur des architectures et des techniques de parallélisassions des traitements différents qui ne permettent plus de déterminer leur puissance.

De plus, c’est le processeur qui apporte aux ordinateurs leur capacité à être programmé. Ce composant est nécessaire à tous les ordinateurs.

 

    a)  Les composants du processeur et leur rôle.

 

          Les éléments essentiels d'un processeur sont :

 

·        l'horloge, qui synchronise toutes les actions de l'unité centrale. Elle a une fréquence (ou cycle) qui correspond au nombre d'impulsions par seconde exprimé en hertz (Hz). Elle exécute une action à chaque "top", cette action correspond à une instruction. L'indicateur CPI (cycle par instructions) permet de représenter le nombre d'instructions nécessaire à l'exécution d'une instruction.

·        l'Unité Arithmétique (UAL), qui prend en charge les calculs élémentaires tels que les additions, soustractions, multiplications ou division. Et les opérations logiques ; ET, OU, Ou exclusif, ...

·        les registres, ce sont des mémoires de petites tailles et rapides pour que l'UAL puisse manipuler leur contenu à chaque cycle d'horloge. Leur nombre varie selon les processeurs et il existe différents registres :

        - registre accumulateur : il stocke les données en cours de

           traitement par l'UAL (soit opérations arithmétiques et 

           logiques

        - registre d'état : permet de stocker les informations

           concernant le résultat de la dernière instruction exécutée.

        - registre d'instruction : (RI) contient l'instruction en cours

           de traitement.

        - registre tampon : il stocke temporairement une donnée

           provenant de la mémoire

        - registre généraux : ces registres sont disponibles pour les

           calculs

        - registre d'adresses : il contient l'adresse de la prochaine

            information à lire par l'UAL, soit la prochaine instruction.

 

       

        - compteur ordinal : (CO) contient l'adresse de la prochaine

            instruction à traiter.

        - le pointeur de pile : ce registre dont le nombre varie en

            fonction du type de processeur contient l'adresse du

            sommet de la pile.

 

·            L’unité d’entré-sortie, il prend en charge la communication avec la mémoire de l’ordinateur ou la transmission des ordres destinés à piloter ses processeurs spécialisés qui permettent à l’ordinateur d’accéder aux périphériques de l’ordinateur.

 

 

De nos jours, les processeurs intègrent des éléments plus complexes comme :

 

·        L’architecture surperscalaire, elle consiste à disposer plusieurs unités de traitements en parallèle afin de pouvoir traiter plusieurs instructions par cycle.

·        L’architecture superpiline, elle permet de découper temporellement les traitements à effectuer.

·        L’unité de calcul de virgule flottante, elle permet d’accélérer les calculs sur des nombres réels codés en virgule flottante

·        La mémoire cache, elle permet d’accélérer les traitements tout en diminuant le temps d’accès à la mémoire. Ces mémoires tampons sont en effet bien plus rapides que la RAM et ralentissent moins le CPU. Le cache d’instruction reçoit les prochaines instructions à exécuter, le cache donné manipule les données. Parfois un seul cache unifié est utilisé pour le code et les données. Plusieurs niveaux de caches peuvent coexister, on les désigne souvent sous les noms de  L1, L2 ou L3 :

-La mémoire cache de premier niveau (appelée L1 Cache, pour Level 1 Cache) est      directement intégrée dans le processeur. Elle se subdivise en 2 parties :

  >La première est le cache d'instructions, qui contient les instructions issues de la mémoire vive décodées lors de passage dans les pipelines.

  >La seconde est le cache de données, qui contient des données issues de la mémoire vive et les données récemment utilisées lors des opérations du processeur.


Les caches du premier niveau sont très rapides d'accès. Leur délai d'accès tend à s'approcher de celui des registres internes aux processeurs.

 

-La mémoire cache de second niveau (appelée L2 Cache, pour Level 2 Cache) est située au niveau du boîtier contenant le processeur (dans la puce). Le cache de second niveau vient s'intercaler entre le processeur avec son cache interne et la mémoire vive. Il est plus rapide d'accès que cette dernière mais moins rapide que le cache de premier niveau.

 

-La mémoire cache de troisième niveau (appelée L3 Cache, pour Level 3 Cache) est située au niveau de la carte mère.

 

Les processeurs sont donc définis par :


• la largeur de ses registres internes de manipulation de données (8, 16, 32, 64, 128) bits ;
• la cadence de son horloge exprimée en MHz (mega hertz) ou GHz (giga hertz) ;
• le nombre de noyaux de calcul (core) ;
• son jeu d'instructions (ISA en anglais, Instructions Set Architecture) dépendant de la famille (CISC, RISC, etc.) ;
• Sa finesse de gravure exprimée en nm (nanomètres) et sa microarchitecture.
Mais ce qui caractérise principalement le processeur est la famille à laquelle il appartient.

 

En effet il existe plusieurs familles :

·            CISC (Complex Instruction Set Computer : choix d'instructions aussi proches que possible d'un langage de haut niveau) est une technologie basée sur un jeu de plus de

200 instructions. La complexité de ces instructions fait que l’une d’entre elles peut prendre plusieurs cycles pour être exécutée.

·            RISC ( Reduced Instruction Set Computer : choix d'instructions plus simples et d'une structure permettant une exécution très rapide) n’offre que 128 instructions, dites de base. Mais

Une instruction peut être exécutée en un seul cycle. L’avenir des processeurs PC passera

Forcément au RISC (cela implique la création de compilateurs complexes).

Un processeur RISC peut atteindre une vitesse d’exécution jusqu’à 70% plus rapide qu’un CISC de même fréquence.

·            VLIW (Very Long Instruction Word) ce concept fait repose rune partie de la gestion du pipeline sur le compilateur : le processeur reçoit des instructions longues qui regroupent plusieurs instructions simples 

·            DSP (Digital Signal Processor). Même si cette dernière famille (DSP) est relativement spécifique. En effet un processeur est un composant programmable et est donc a priori capable de réaliser tout type de programme. Toutefois, dans un souci d'optimisation, des processeurs spécialisés sont conçus et adaptés à certains types de calculs (3D, son, etc.). Les DSP sont des processeurs spécialisés pour les calculs liés au traitement de signaux.

 

Un processeur possède trois types de bus :
• un bus de données, définit la taille des données manipulables (indépendamment de la taille des registres internes) ;
• un bus d'adresse définit le nombre de cases mémoire accessibles ;
• un bus de contrôle définit la gestion du processeur IRQ, RESET etc.

b) le fonctionnement du processeur.

1 les transistors

Pour effectuer le traitement de l'information, le microprocesseur possède un ensemble d'instructions, appelé « jeu d'instructions », réalisées grâce à des circuits électroniques. Plus exactement, le jeu d'instructions est réalisé à l'aide de semi-conducteurs, « petits interrupteurs » utilisant l'effet transistor, découvert en 1947 par John BardenWalter H. Brattain et William Shockley qui reçurent le prix Nobel en 1956 pour cette découverte.

Un transistor (contraction de  résistance de transfert) est un composant électronique semi-conducteur, possédant trois électrodes, capable de modifier le courant qui le traverse à l'aide d'une de ses électrodes (appelée électrode de commande). On parle ainsi de «composant actif», par opposition aux « composants passifs », tels que la résistance ou le condensateur, ne possédant que deux électrodes (on parle de « bipolaire »).

Le transistor MOS (métal, oxyde, silicium) est le type de transistor utilisé pour la conception de circuits intégrés.  Il est composé de deux zones chargées négativement, appelées respectivement source (possédant un potentiel quasi-nul) et drain (possédant un potentiel de 5V), séparées par une région chargée positivement, appelée. Le substrat est surmonté d'une électrode de commande, appelée porte permettant d'appliquer une tension sur le substrat.

Transistor MOS



Lorsqu'aucune tension n'est appliquée à l'électrode de commande, le substrat chargé positivement agit comme une barrière et empêche les électrons d'aller de la source vers le drain. En revanche, lorsqu'une tension est appliquée à la porte, les charges positives du substrat sont repoussées et il s'établit un canal de communication, chargé négativement, reliant la source au drain

Transistor MOS

 

 

Le transistor agit donc globalement comme un interrupteur programmable grâce à l'électrode de commande. Lorsqu'une tension est appliquée à l'électrode de commande, il agit comme un interrupteur fermé, dans le cas contraire comme un interrupteur ouvert

 2 les opérations du processeur.


Le rôle des unités centrales de traitement est d'exécuter une série d'instructions stockées appelées "programme".
Les instructions et les données transmises au processeur sont exprimées en mots binaires. Elles sont stockées dans la mémoire. Le séquenceur ordonne la lecture du contenu de la mémoire et la constitution des mots présentés à l'ALU qui les interprète.
L’ensemble des instructions et des données constitue un programme.
Le langage le plus proche du code machine tout en restant lisible par des humains est le langage d’assemblage, aussi appelé langage assembleur. Toutefois, l’informatique a développé toute une série de langages, dits de haut niveau (comme le BASIC, Pascal, C, C++, etc.), destinés à simplifier l’écriture des programmes.
Les opérations décrites ci dessous sont conformes à l'architecture de Von Neumann. Le programme est représenté par une série d'instructions qui réalisent des opérations en liaison avec la mémoire vive de l'ordinateur. Il y a quatre étapes que presque toutes les architectures Von Neumann utilisent :
• FETCH (Recherche de l'instruction) ;
• DECODE (Décodage de l'instruction : opérations et opérandes) ;
• EXECUTE (Exécution des opérations) ;
• WRITEBACK (Ecriture du résultat).


Le diagramme mon
tre comment une instruction de MIPS32 est décodée


La première étape, FETCH (recherche), consiste à rechercher une instruction dans la mémoire vive de l'ordinateur. L'emplacement dans la mémoire est déterminé par le compteur de programme (PC), qui stocke l'adresse de la prochaine instruction dans la mémoire de programme. Après qu'une instruction a été recherchée, le PC est incrémenté par la longueur du mot d'instruction. Dans le cas de mot de longueur constante simple, c'est toujours le même nombre. Par exemple, un mot de 32 bits de longueur constante qui emploie des mots de 8 bits de mémoire incrémenterait toujours le PC par 4 (excepté dans le cas des sauts). Le jeu d'instructions qui emploie des instructions de longueurs variables comme l'x86, incrémentent le PC par le nombre de mots de mémoire correspondant à la dernière longueur d'instruction. En outre, dans des unités centrales de traitement plus complexes, l'incrémentation du PC ne se produit pas nécessairement à la fin de l'exécution d'instruction. C'est particulièrement le cas dans des architectures fortement parallélisées et superscalaires. Souvent, la recherche de l'instruction doit être opérée dans des mémoires lentes, ralentissant l'unité centrale de traitement qui attend l'instruction. Cette question est en grande partie résolue dans les processeurs modernes par l'utilisation de caches et d'architectures pipelines.
L'instruction que le processeur recherche en mémoire est utilisée pour déterminer ce que le CPU doit faire. Dans l'étape DECODE (décodage), l'instruction est découpée en plusieurs parties telles qu'elles puissent être utilisées par d'autres parties du processeur. La façon dont la valeur de l'instruction est interprétée est définie par le jeu d'instructions (ISA) du processeur 2. Souvent, une partie d'une instruction, appelée opcode (code d'opération), indique quelle opération est à faire, par exemple une addition. Les parties restantes de l'instruction comportent habituellement les autres informations nécessaires à l'exécution de l'instruction comme par exemples les opérandes de l'addition. Ces opérandes peuvent prendre une valeur constante, appelée valeur immédiate, ou bien contenir l'emplacement où retrouver (dans un registre ou une adresse mémoire) la valeur de l'opérande, suivant le mode d'adressage utilisé. Dans les conceptions anciennes, les parties du processeur responsables du décodage étaient fixes et non modifiables car elles étaient codées dans les circuits. Dans les processeurs plus récents, un microprogramme est souvent utilisé pour traduire les instructions en différents ordres. Ce microprogramme est parfois modifiable pour changer la façon dont le CPU décode les instructions, même après sa fabrication.


Diagramme fonctionnel d'un processeur simple

 

 Après les étapes de recherche et de décodage arrive l'étape EXECUTE (exécution) de l'instruction. Au cours de cette étape, différentes parties du processeur sont mises en relation pour réaliser l'opération souhaitée. Par exemple, pour une addition, l'unité arithmétique et logique (ALU) sera connectée à des entrées et des sorties. Les entrées présentent les nombres à additionner et les sorties contiennent la somme finale. L'ALU contient la circuiterie pour réaliser des opérations d'arithmétique et de logique simples sur les entrées (addition, opération sur les bits). Si le résultat d'une addition est trop grand pour être codé par le processeur, un signal de débordement est positionné dans un registre d'état.
La dernière étape WRITEBACK (écriture du résultat), écrit tout simplement les résultats de l'étape d'exécution en mémoire. Très souvent, les résultats sont écrits dans un registre interne au processeur pour bénéficier de temps d'accès très courts pour les instructions suivantes. Dans d'autres cas, les résultats sont écrits plus lentement dans des mémoires RAM, donc à moindre coût et acceptant des codages de nombres plus grands.
Certains types d'instructions manipulent le compteur de programme plutôt que de produire directement des données de résultat.
Ces instructions sont appelées des sauts (jumps) et permettent de réaliser des boucles (loops), des programmes à exécution conditionnelle ou des fonctions (sous-programmes) dans des programmes 3. Beaucoup d'instructions servent aussi à changer l'état de drapeaux (qui est une valeur binaire indiquant le résultat d’une opération ou le statut d’un objet) (flags) dans un registre d'état. Ces états peuvent être utilisés pour conditionner le comportement d'un programme, puisqu'ils indiquent souvent la fin d'exécution de différentes opérations. Par exemple, une instruction de comparaison entre deux nombres va positionner un drapeau dans un registre d'état suivant le résultat de la comparaison. Ce drapeau peut alors être réutilisé par une instruction de saut pour poursuivre le déroulement du programme.
Après l'exécution de l'instruction et l'écriture des résultats, tout le processus se répète, le prochain cycle d'instruction recherche la séquence d'instruction suivante puisque le compteur de programme avait été incrémenté. Si l'instruction précédente était un saut, c'est l'adresse de destination du saut qui est enregistrée dans le compteur de programme. Dans des processeurs plus complexes, plusieurs instructions peuvent être recherchées, décodées et exécutées simultanément, on parle alors d'architecture pipeline.

 2/ Conception et implémentation.

 

a)  Sa conception.

Les processeurs sont tous gravés sur des plaques appelées Wafers. Les différentes séries de processeurs n’ont pas forcément la même finesse de gravure, les processeurs actuels sont gravés en 0,09µ et 0,065µ (soit 90 et 65 nanomètres). Le fait de diminuer la finesse de gravure permet d’abaisser leur coût de fabrication. Cette technique permet donc de produire plus de processeur à la fois sur un Wafer et de diminuer la consommation du processeur et donc de la quantité de chaleur produite ce qui permet d’abaisser la consommation d’énergie et d’augmenter en fréquence. Une finesse de gravure accrue permet également de loger plus de transistors dans le core du processeur et donc d’ajouter des fonctionnalités supplémentaires tout en gardant une surface aussi compacte que les générations précédentes.

Wafer

b)  Le signal d’horloge.

Les processeurs ont un fonctionnement synchrone par nature. Cela veut dire qu'ils fonctionnent au rythme d'un signal de synchronisation qui est le signal d'horloge. Il prend souvent la forme d'une onde carrée périodique.

 En calculant le temps maximum que prend le signal électrique pour se propager dans les différentes branches des circuits du processeur, le concepteur peut sélectionner la période appropriée du signal d'horloge.

Cette période doit être supérieure au temps que prend le signal pour se propager dans le pire des cas. En fixant la période de l'horloge à une valeur bien au-dessus du pire des cas de temps de propagation, il est possible de concevoir entièrement le processeur et la façon dont il déplace les données autour des "fronts" montants ou descendants du signal d'horloge. Ceci a pour avantage de simplifier significativement le processeur tant du point de vue de sa conception que de celui du nombre de ses composants. Par contre, ceci a pour inconvénient de ralentir processeur. En effet sa vitesse doit s'adapter à celle de son élément le plus lent, même si d'autres parties sont beaucoup plus rapides. Ces limitations sont largement compensées par différentes méthodes d'accroissement du parallélisme des processeurs.

Les améliorations d'architecture ne peuvent pas, à elles seules, résoudre tous les inconvénients des processeurs globalement synchrones. Par exemple, un signal d'horloge est sujet à des retards comme tous les autres signaux électriques. Les fréquences d'horloge plus élevées que l'on trouve dans les processeurs à la complexité croissante engendrent des difficultés pour conserver le signal d'horloge en phase synchronisé à travers toute l'unité centrale de traitement. En conséquence, beaucoup des processeurs d'aujourd'hui nécessitent la fourniture de plusieurs signaux d'horloge identiques de façon à éviter que le retard d'un seul signal ne puisse être la cause d'un dysfonctionnement du processeur. La forte quantité de chaleur qui doit être dissipée par le processeur constitue un autre problème majeur dû à l'accroissement des fréquences d'horloge. Les changements d'état fréquents de l'horloge font commuter un grand nombre de composants, qu'ils soient ou non utilisés à cet instant. En général, les composants qui commutent utilisent plus d'énergie que ceux qui restent dans un état statique. Ainsi, plus les fréquences d’horloge augmentent et plus la dissipation de chaleur en fait autant, ce qui fait que les processeurs requièrent des solutions de refroidissement plus efficaces.

 

 

 

c)    Le parallélisme.

 


Le parallélisme consiste à exécuter simultanément, sur des processeurs différents, des instructions relatives à un même programme. Cela se traduit par le découpage d'un programme en plusieurs processus traités en parallèle afin de gagner en temps d'exécution.

Ce type de technologie nécessite toutefois une synchronisation et une communication entre les différents processus.

Le fonctionnement de celle ci peut être très perturbé lorsque la communication entre les processus ne fonctionne pas correctement. 

 

Fichier:Nopipeline.png 

 

 

 

 

d)  Le pipeline

 

Le pipeline  est une technologie visant à permettre une plus grande vitesse d'exécution des instructions en parallélisant des étapes.

Pour comprendre le mécanisme du pipeline, il est nécessaire de comprendre les phases d'exécution d'une instruction que nous avons expliquée auparavant.

Pour rappel, les phases d'exécution d'une instruction pour un processeur contenant un pipeline à 5 étages sont les suivantes :

·        LI : Lecture de l'Instruction (en anglais FETCH instruction) depuis le cache ;

·        DI : Décodage de l'Instruction (DECODE instruction) et recherche des opérandes (Registre ou valeurs immédiate);

·        EX : Exécution de l'Instruction (EXECUTE instruction) (si ADD, on fait la somme, si SUB, on fait la soustraction, etc.);

·        MEM : Accès mémoire (MEMORY access), écriture dans la mémoire si nécessaire ou chargement depuis la mémoire ;

·        ER : Ecriture (WRITE(BACK) instruction) de la valeur calculée dans les registres.




Les instructions sont organisées en file d'attente dans la mémoire, et sont chargées les unes après les autres. 

Grâce au pipeline, le traitement des instructions nécessite au maximum les cinq étapes précédentes. Dans la mesure où l'ordre de ces étapes est invariable (LI, DI, EX, MEM et ER), il est possible de créer dans le processeur un certain nombre de circuits spécialisés pour chacune de ces phases. 

L'objectif du pipeline est d'être capable de réaliser chaque étape en parallèle avec les étapes amont et aval, c'est-à-dire de pouvoir lire une instruction (LI) lorsque la précédente est en cours de décodage (DI), que celle d'avant est en cours d'exécution (EX), que celle située encore précédemment accède à la mémoire (MEM) et enfin que la première de la série est déjà en cours d'écriture dans les registres (ER). 

pipeline à 5 étages




Il faut compter en général 1 à 2 cycles d'horloge pour chaque phase du pipeline, soit 10 cycles d'horloge maximum par instruction. Pour deux instructions, 12 cycles d'horloge maximum seront nécessaires (10+2=12 au lieu de 10*2=20), car la précédente instruction était déjà dans le pipeline. Les deux instructions sont donc en traitement dans le processeur, avec un décalage d'un ou deux cycles d'horloge). Pour 3 instructions, 14 cycles d'horloge seront ainsi nécessaires et etc. 

Il existe différents types de pipelines, de 2 à 40 étages, mais le principe reste toujours  le même. 

 

 e)  Pipeline superscalaire

La technologie superscalaire consiste à disposer plusieurs unités de traitement en parallèle afin de pouvoir traiter plusieurs instructions par cycle. 

 

 Les conceptions de pipelining simple et superscalaire augmentent donc le parallélisme des CPU en permettant à un processeur unique d'exécuter des instructions à un rythme de plus d'une instruction par cycle. La plupart des processeurs d'aujourd'hui ont au moins une partie superscalaire.

 

  

Conclusion :

 

Le processeur est donc le cerveau de l’ordinateur bien qu’il ne cesse d’évoluer constamment. Cependant, une date clé marque la création d’un nouveau type de processeur qui a permit d’améliorer l’ordinateur, de le rendre plus fiable, d’augmenter sa vitesse d’exécution, de le minimiser et donc le rendre moins cher. Cette nouvelle création est le microprocesseur qui fut inventé en 1971 par Marcian Hof.

 

C’est de cette évolution dont nous parlerons dans notre deuxième partie.