Next: Les compatibles Pentium Up: Les microprocesseurs xxx86 Previous: Le jeu d'instructions

Le processeur Pentium

Depuis l'introduction du microprocesseur 8086 en 1978, l'architecture xxx86 a évolué à travers plusieurs implémentations tant au niveau architectural que technologique. Ainsi le i486, introduit en 1989, intègre sur une seule puce, en plus de toutes les fonctionnalités d'un processeur entier, une unité flottante et un cache. Le Pentium intègre deux unités entières, une unité flottante totalement pipelinée ainsi que deux caches séparés.

Avec son architecture superscalaire de degré deux, l'introduction d'une prédiction de branchement et l'amélioration de l'unité flottante qui, selon Intel, accélère de plus de dix fois l'exécution des opérations flottantes courantes, le processeur Pentium constitue une profonde évolution par rapport à son prédécesseur le i486. Il implémente par ailleurs des caches d'instructions et de données séparés de 8 Ko chacun auxquels sont également ajoutés deux TLB.

La largeur du bus de données externe est passée à 64 bits dans le but d'accélérer les transferts de données entre la mémoire et les caches.

Types d'exécution.

Tous les microprocesseurs d'architecture RISC possèdent une unité de contrôle des opérations câblée. Cette technique a pour avantage sa rapidité d'exécution et nécessite une place relativement limitée sur le silicium. Elle permet de pipeliner les exécutions d'instructions consécutives dans le flot d'instructions.

Lorsque le jeu d'instructions est aussi complexe que celui du Pentium, ce type d'implémentation de l'unité de contrôle peut difficilement être envisagé. C'est pourquoi Intel n'a câblé que le contrôle des instructions simples les plus fréquemment utilisées (correspondant en gros au coeur RISC du jeu d'instructions).

Les autres instructions sont contrôlées par un microcode. L'unité de contrôle est intégrée dans un << ordinateur miniature >> (unité arithmétique, mémoire, compteur ordinal, etc.). À chaque exécution d'une micro-instruction, des signaux sont générés pour contrôler le chemin de données et l'adresse de la prochaine micro-instruction est calculée. Cette méthode a pour principal avantage sa grande flexibilité. Elle permet aux concepteurs de modifier facilement le jeu d'instructions du microprocesseur, mais aussi de ne pas se limiter dans les différentes versions d'une même instruction.

Ainsi, en associant deux techniques d'implémentation de l'unité de contrôle, le Pentium présente deux niveaux pour l'exécution des instructions :

Le pipeline.

Le Pentium utilise un pipeline entier de cinq étages similaire à celui du i486. Il est intéressant de développer les diverses étapes de ce pipeline afin d'illustrer les conséquences d'un jeu d'instructions CISC sur l'exécution.

  1. Prefetch. Chargement des instructions du cache (ou de la mémoire) dans les tampons de préchargement.

    Ces tampons permettent de charger jusqu'à 32 octets d'instructions consécutifs. Il est à noter que par rapport à une architecture RISC, du fait de l'irrégularité de la taille des instructions, celles-ci peuvent être placées sur deux lignes de cache consécutives. Les deux ports de lecture implémentés permettent alors d'accéder simultanément à ces deux lignes. Un mécanisme supplémentaire réaligne alors les octets avant de les placer dans l'un des tampons.

    La présence de ce mécanisme dans le Pentium, ainsi que d'autres particularités comme une grande capacité de préchargement des instructions ou la présence de deux caches distincts, témoignent de la difficulté de la gestion des instructions CISC, de tailles variables et non alignées en mémoire.

  2. Decode 1. Décodage en parallèle des deux prochaines instructions dans le flot d'instructions et décision de leur éventuel couplage. Comme on l'a vu, les instructions du Pentium ne sont pas toutes de même taille. Elles peuvent posséder des préfixes qui demandent chacun un cycle supplémentaire de décodage dans le pipeline U.

    Le Pentium implémente deux pipelines entiers indépendants : le pipeline U qui peut exécuter toutes les instructions entières et flottantes, et le pipeline V qui ne peut exécuter que les instructions entières dites << simples >> ainsi que les instructions d'échange de registres flottants (FXCH).

  3. Decode 2. Calcul de l'adresse des opérandes présentes en mémoire. Contrairement au i486, le Pentium permet le décodage d'instructions contenant l'adressage basé ou indexé sans cycle supplémentaire.

  4. Execute. Exécution des instructions et accès à la mémoire. Grâce à ses deux ports de lecture, le cache de données peut être accédé simultanément par les deux pipelines d'exécution. Dans le cas très courant où un des opérandes est en mémoire, cet étage est occupé deux ou trois cycles : un cycle pour accéder l'opérande, un pour l'exécution de l'opération et un pour l'éventuelle écriture du résultat en mémoire. Dans ce cas, l'opération (simple) dans le pipeline V est toujours exécutée en parallèle avec le dernier cycle du pipeline U.

  5. Write Back. Modification de l'état du processeur par l'achèvement de l'exécution des instructions. C'est aussi à cet étage que la prédiction de branchement est vérifiée et validée.

Il est intéressant de remarquer que ce pipeline présente la même particularité que celui du MIPS R8000 (calcul de l'adresse de l'opérande suivi de l'exécution de l'instruction dépendante). Intel justifie cette inversion de la même manière que MIPS en déclarant que la séquence << lecture-utilisation de la donnée >> est plus critique que la séquence << opération entière-accès à la mémoire >>.

Il faut toutefois noter que ce type de pipeline augmente la pénalité de branchement d'un cycle. Il est donc préférable de l'accompagner d'un bon mécanisme de prédiction, c'est le cas sur le Pentium.

Le Pentium implémente un tampon d'adresses de branchements (BTB pour Branch Target Buffer) associatif par ensemble à quatre voies, d'une capacité de 256 adresses cibles. Deux tampons de préchargement des instructions cibles viennent compléter ce dispositif. Quand le BTB détecte une instruction de branchement parmi les instructions préchargées, il prédit à partir d'un algorithme à deux bits si le branchement est pris ou non. Dans le cas d'une prédiction positive, le BTB fournit l'adresse cible sous forme d'adresse physique et permet ainsi de précharger les instructions dans l'un des deux tampons. L'implémentation d'une telle technique marque une grande évolution par rapport au i486 totalement dépourvu de tels mécanismes.

À la différence des autres processeurs superscalaires, le Pentium utilise une technique simple de couplage éventuel d'instructions consécutives.

L'émission des instructions dans le Pentium respecte toujours l'ordre du flot d'instructions. Le pipeline U exécute obligatoirement la première instruction de la paire. Le pipeline V ne peut accepter que des instructions entières simples, c'est-à-dire ne nécessitant pas l'appui du microcode pour leur contrôle. Il n'est possible d'émettre deux instructions dans le même cycle que sous certaines conditions définies par les règles de couplage suivantes :

On peut remarquer que, si la technique de groupement des instructions utilisée dans le Pentium est moins élaborée que celle d'autres processeurs superscalaires, elle permet néanmoins d'émettre, dans le même cycle, deux instructions entières. Cette caractéristique du Pentium explique que ses performances sur des codes entiers (par exemple SPECint92) sont du même ordre que celles de microprocesseurs RISC concurrents alors que ce n'est pas le cas pour l'exécution de codes flottants.

Le pipeline flottant du Pentium comporte huit étages dont cinq sont partagés avec le pipeline entier U. Il est possible de coupler l'instruction FXCH avec d'autres instructions flottantes à condition que celle-ci apparaisse en deuxième position (exécution sur le pipeline V) dans le flot d'instructions. C'est le seul cas où une instruction flottante peut être couplée.

Les instructions dites transcendantales du Pentium (telles les fonctions trigonométriques cosinus, sinus, etc.) utilisent, comme dans l'i486, un contrôle microprogrammé et sont d'une durée d'exécution relativement longue.

La hiérarchie mémoire.

Des statistiques sur les codes exécutés par les microprocesseurs xxx86 ont montré qu'un programme fait, en moyenne, 0.6 accès à la mémoire par instruction alors que, dans un code RISC, seulement une instruction sur trois ou quatre est un accès à la mémoire. En effet, la plupart des instructions arithmétiques et logiques du Pentium adressent un de leurs opérandes en mémoire. De plus, comme le banc de registres entiers contient seulement huit éléments, il est nécessaire de recourir souvent à ce type d'instructions. Devant un tel constat, les concepteurs du Pentium ont choisi de permettre un accès à chaque cycle sur le cache de données pour chacun des pipelines U et V.

Le Pentium dispose de deux caches distincts pour les instructions et les données d'une capacité de 8 Ko chacun. Ce choix architectural est différent de celui pris pour le i486 et a compliqué le maintien de la compatibilité avec ses prédécesseurs. En effet, certains codes exécutables sur les architectures xxx86 écrivent dans le champ de la valeur immédiate des instructions (Self modifying code). Dans l'absolu, ceci permet de limiter le nombre d'accès à la mémoire d'une instruction sans encombrer le banc de registres. Cette caractéristique rend obligatoire la possibilité d'accéder en écriture un espace mémoire où se trouvent les instructions. Gérer cette particularité est déjà complexe avec un cache unifié et l'est encore plus quand les caches sont séparés.

La mise en oeuvre d'une architecture superscalaire pouvant émettre simultanément deux instructions, de tailles parfois importantes, ainsi que la possibilité de pouvoir adresser, dans le même cycle, deux emplacements mémoire, ont nécessité la scission du cache commun présent dans le i486.

Les deux caches primaires du Pentium sont associatifs par ensemble de deux et utilisent une politique de remplacement de type LRU. Rappelons que le cache primaire du i486 est unifié et associatif par ensemble de quatre voies.

Le cache d'instructions n'est accessible qu'en lecture, alors que le cache de données est accessible en lecture et écriture. Les deux techniques de mise à jour de la mémoire peuvent être utilisées (écriture simultanée ou différée). Une étiquette indique la stratégie appliquée au niveau de chaque ligne du cache de données.

Dans le cas où un code veut accéder à une instruction en écriture (self modifying code), il ne peut pas, comme c'était le cas avec les prédécesseurs, modifier directement la ligne dans le cache d'instructions. La ligne d'instructions adressée est au préalable invalidée puis l'écriture est effectuée en mémoire.

Par ailleurs, afin de rompre le moins souvent possible le séquencement du flot d'instructions, le Pentium possède deux types de tampons d'écritures :

Les tampons d'écriture du Pentium ne sont pas considérés comme des unités de stockage à part entière, comme le sont les caches, c'est-à-dire qu'i'absction appatsolu, ce 32 octetàncoreoire dge basé ou post être sime couplé vommle pian un ache perscalarire peuvent ê avantag Les instructd'écritures (Wrie les insttmicroprocs.

ées synchronde la docité cachs (écri cache instructla mémoire. En effet d'synchronde la doductla mées s d'eut urs dpasslrs cone és/sou, ccessibl deubits re.nt en sae pouvoiude évait, eur

Le pipeline donnésen qua

Des statsseur Pentium). Dans m>pipeline82496i ne peut l'irro de etôle, le Pe mémoi'instterfeut ié et trution de l'unitue, le Pe mémoi'insttsen qua t d'gt;> est au plidénd lere diliséecode RISrà quatre compe deniatre un inesseurns ledu pipeet, cctetôlemanteistion, c'est lee >>e de duéefférent deniatre un inessesen qud pipeetÀue ce type ace s surla doMRUilage écutionde quatrenirêplé réeu niveacode ycle sur écrs lineonnéet les casyenne,ê avantecapacitédu bus des, entre ssi dmanccouplé qne nsseà 128ntre La mise en e de groupemeour de la mémoire peuvent êre ondeéhe instru'instrusen qua é ou iurs xxx86 on(ursà pouatre vcohes autresm>LRU ées segn d'une temiterles gminie teourre d'une arentium.

L Aompre le &gm tere appaccès àe: un cycre de recou un dandu micropess cibles.mplacemTLB,rutf par ennsemble de deux voies,e'une ca cachtés permetteninstrucctions entières.ches,

Dt d' de 64 bits,es pipe'aque pel'exécunéessembg ées 4sKo istdes, encone ése instructet l'interf32scone éseur contrctions. Gérer ceUns codes d'accès à cone éseadl au réslormancealors deurs des cachesssi diveessembg ées 4sMoLe Pentium implémentla pent ajoutés drtant u modifiernces sur des,labldre qutitelles ditectures xxx86 écPOWERterfDECiree). Inte,ustifiesgne atervressagup co pristant u modi,enccuctios surla dontrôlent deniatrs.> NeRalorséntl auajoutés enogique. Ainmtium possèdele miculem 3.3 miiréchargdantai à reux portsrnmples,annrs dre, ossèoe 32 olx ctesrt ente techque. Ainm/eiCMOS mettedevr'irre un accèse d'ur par l'adgeorsi gac 167 MHziquett instructde la même d'ur par l'a(ipelineP54CSpouvant ment duée un r<<erle133 MHzmplavr'irreorsi gac essemces sur des rande flot rle15592) sont dterf11692) sfp92


Next: Les compatibles Pentium Up: Les microprocesseurs xxx86 Previous: Le jeu d'instructions

I>fllontai@IRISA.irde .frB> NextFri Jpip 7f11:05:24sMET DST 1996i I

ADDRESSH