Next: Les microprocesseurs SPARC Up: Les architectures POWER Previous: L'architecture POWER

L'architecture PowerPC

L'architecture PowerPC est issue de l'alliance scellée en septembre 1991 entre IBM, Apple et Motorola. Cette alliance comprend cinq axes principaux de recherche :

Ce dernier point est à l'origine de l'architecture PowerPC, qui selon le souhait des intervenants devait s'imposer mondialement et s'opposer à la suprématie d'Intel.

Issue de l'architecture POWER, le jeu d'instructions PowerPC résulte de divers choix effectués en fonction de nouvelles exigences :

Nous introduirons dans une première partie quelques caractéristiques de mise en oeuvre de cette architecture à travers l'étude du PowerPC 601. Puis nous aborderons l'étude des processeurs PowerPC 603, 604 et le 602 récemment annoncé. Enfin, nous présenterons brièvement les contrôleurs destinés aux applications enfouies avant d'aborder dans un ultime chapitre de perspectives le processeur PowerPC 620.

Le jeu d'instructions PowerPC

L'architecture PowerPC est de type load/store. Les instructions sont de taille fixe (32 bits) et alignées en mémoire sur des frontières de mot.

Le jeu d'instructions PowerPC inclut la plupart des instructions du jeu d'instructions des processeurs POWER à l'exception de celles exécutées peu fréquemment ou jugées trop complexes. À titre d'exemple, nous détaillons quelques unes de ces instructions afin que le lecteur puisse prendre conscience de la complexité de mise en oeuvre de certaines instructions sur les processeurs POWER. On peut citer :

Au total, 36 instructions ont été éliminées de l'architecture POWER afin << d'alléger >> la complexité de cette architecture. D'un autre coté, le jeu d'instructions PowerPC a été étendu pour qu'il réponde à de nouvelles fonctionnalités :

La figure schématise l'évolution des jeux d'instructions entre les architectures POWER et PowerPC.

Le PowerPC 601

Ce processeur est le premier à mettre en oeuvre l'architecture PowerPC (consulter [3] pour plus de détails). Fortement inspiré des processeurs POWER, ce processeur constitue une passerelle entre ces deux architectures. Sur les 36 instructions devant être éliminées, 29 sont toujours supportées par matériel, cinq sont émulées par logiciel et deux ne sont plus supportées du tout. Les applications existantes sur le POWER peuvent s'exécuter directement sur le PowerPC 601 sans être recompilées. Ce processeur assure ainsi une période de transition aux utilisateurs avant que les futures générations (pour lesquelles la recompilation des applications sera nécessaire pour éviter l'émulation des instructions éliminées) soient disponibles.

Ce processeur n'implémente pas la totalité des instructions définies par la norme PowerPC. On peut citer à titre d'exemple les instructions manipulant des données sur 64 bits destinées à être implémentées sur le PowerPC 620, quelques instructions manipulant des opérandes sur 32 bits telles que la racine carrée flottante, jugée coûteuse en silicium sur un processeur destiné à un marché d'entrée de gamme (voir la figure qui illustre l'évolution du jeu d'instructions PowerPC).

Architecture générale

On a privilégié le traitement simultané de plusieurs instructions. Le PowerPC 601 est donc un processeur superscalaire de degré trois. Il supporte par ailleurs des mécanismes de séquencement des instructions partiellement dans le désordre.

La structure superscalaire de ce processeur s'organise autour de l'unité de lancement des instructions. Cette unité contrôle trois unités fonctionnelles indépendantes :

Les instructions sont distribuées simultanément au sein de ces unités et peuvent être exécutées en parallèle. Les unités d'exécution disposent de leurs propres ressources et sont synchronisées de façon transparente pour le logiciel.

L'unité de lancement des instructions contient une file d'instructions, une unité de dispatch et une unité de branchement. Elle gère le flot des instructions et répartit les instructions dans les trois unités d'exécution. Il est à noter la possibilité d'émettre les instructions dans un ordre différent de celui du flot d'instructions. Cependant, l'ordre de chacun des trois flots d'instructions séquentiels sur les trois unités fonctionnelles est respecté.

La file d'instructions.

Comme dans les processeurs POWER, l'unité de lancement des instructions précharge les instructions à partir du cache dans la file d'instructions. Ce préchargement est fait par blocs d'au maximum huit mots, ce qui correspond à la granularité minimale de stockage du cache (une ligne). Les instructions vont du haut de la file (Q7) vers le fond (Q0) par décalages successifs. Alors que la partie amont de la file d'instructions (Q4-Q7) est une simple FIFO (First In First Out), les instructions peuvent être retirées des quatre éléments de la partie aval de la file (Q0-Q3).

Unité de branchement (BPU).

Contrairement aux autres unités fonctionnelles du PowerPC 601 qui sont relativement semblables à celles de l'IBM POWER, l'unité de branchement possède une architecture totalement nouvelle. Son rôle est de chercher dans la partie avale de la file d'instructions (Q0-Q3) les instructions de branchement et de les traiter le plus tôt possible dans le but de ne pas retarder le séquencement des instructions de calcul.

La BPU contient un additionneur qui lui permet de calculer l'adresse cible d'un branchement et les valeurs de trois registres, LR (Link register) utilisé lors des appels de procédures, CTR (Count Target Register) qui contient l'adresse cible et CR (Count Register). La présence de cet additionneur supplémentaire comble une lacune du POWER et permet au PowerPC 601 d'exécuter simultanément un calcul d'adresse de branchement et une opération entière ; sur le POWER, l'absence de cet additionneur retardait le séquencement de certaines instructions de branchement.

Le PowerPC 601 met en oeuvre la technique dite de Branch Folding qui consiste à retirer physiquement l'instruction de branchement de la file d'instructions au moment de son émission vers son unité d'exécution. Si le branchement est pris, les instructions en séquence sont évacuées de la file tandis que de nouvelles instructions du groupe cible sont chargées. Si le branchement n'est pas pris, le flot d'instructions continue son exécution en ignorant l'instruction de branchement.

Lors d'un branchement conditionnel, si la condition de branchement ne peut être résolue, une prédiction statique est utilisée afin de permettre le préchargement des instructions à partir de l'adresse cible.

Les instructions issues de la prédiction sont émises vers les unités fonctionnelles mais ne sont achevées qu'après la résolution du branchement. Une instruction devant être exécutée dans l'unité de branchement ne sera exécutée qu'après la résolution du branchement prédit. Par contre, une instruction devant être exécutée par l'unité entière ou par l'unité flottante peut progresser dans le pipeline jusqu'à l'étage d'écriture du registre résultat et ne modifie ainsi pas de façon erronée l'état de la machine.

La prédiction statique de branchement permet, en cas de réussite, de ne pas interrompre le flot d'instructions à chaque branchement. En cas de prédiction erronée, la file d'instructions est vidée et les instructions amorcées annulées, puis le flot d'instructions reprend à la bonne adresse.

La prédiction statique mise en oeuvre sur le PowerPC 601 est faite uniquement sur la direction du branchement : le branchement est prédit pris si son adresse cible est située en arrière dans le programme par rapport à l'adresse du branchement. Afin d'améliorer les performances, l'utilisateur a la possibilité d'inverser cette stratégie au niveau d'une application. Cette prédiction est à un niveau (c'est à dire qu'un branchement ne peut être prédit que si le précédent est résolu). Par ailleurs si l'adresse cible doit être calculée juste avant le branchement, aucune prédiction n'est possible.

Il est à noter qu'en découplant l'exécution des branchements du reste du flot d'instructions, le PowerPC 601 dépend moins de la pertinence de la prédiction de branchement que les microprocesseurs exécutant leurs instructions dans l'ordre ; dans de nombreux cas, le branchement peut être résolu très en avant dans le pipeline (codes conditions connus, boucles, etc...).

Unités d'exécution

Les trois unités d'exécution sont quasi-indépendantes, ce qui permet au processeur de lancer les exécutions dans le désordre et d'effectuer en parallèle plusieurs opérations comme le calcul de l'adresse cible d'un branchement en même temps qu'une instruction entière et une instruction flottante. Il est à noter que les instructions sont exécutées dans l'ordre sur chacune des unités.

Unité entière.

Son rôle est d'exécuter toutes les instructions entières ainsi que tous les accès à la mémoire. Toutes les instructions entières sont pipelinées et une instruction peut être émise tous les cycles (exceptions : multiplications et divisions entières, lectures et écritures multiples). Cette unité contient un banc de 32 registres entiers à usage général.

L'unité entière fait appel à l'unité de gestion de la mémoire (MMU) pour traduire l'adresse virtuelle en adresse physique lors des accès à la mémoire.

Unité flottante.

Le PowerPC 601 est destiné aux systèmes de bas ou de milieu de gamme, son unité flottante est plus simple et moins efficace que celle de l'IBM POWER.

Elle supporte les formats flottants IEEE 754 en simple et double précision. Le banc de registres est constitué de 32 entrées de 64 bits.

Comme dans les processeurs POWER, l'unité flottante du PowerPC 601 intègre la primitive de multiplication-addition .

Les pipelines d'exécution des instructions entières et flottantes ont une profondeur respective de cinq et six étages. Le pipeline entier est identique à celui du POWER à ceci près que l'étage de prédécodage des instructions a disparu. Le pipeline flottant a un étage commun avec le pipeline entier (préchargement des instructions). Par ailleurs un étage tampon par lequel transitent toutes les instructions flottantes ajoute un cycle de latence mais permet lorsque l'opération prend plus d'un cycle de ne pas interrompre le flot d'émission des instructions.

De la même façon que l'unité de branchement, l'unité flottante peut accéder aux instructions dans la partie basse de la file d'instructions ; ceci permet d'exécuter des instructions flottantes en avance par rapport à leur place dans le flot d'instructions séquentiel si elles ne dépendent pas d'instructions en cours.

Il est à noter que le PowerPC 601 n'intègre pas de mécanisme de renommage de registres.

Hiérarchie mémoire

Le PowerPC 601 tranche avec la plupart des autres processeurs étudiés jusqu'à maintenant en intégrant un cache de premier niveau unifié d'une capacité de 32 Ko et associatif par ensemble de huit. Ce degré d'associativité est particulièrement élevé pour un processeur. La stratégie de remplacement des lignes d'un ensemble est de type LRU. Ce cache ne permet qu'un seul accès par cycle. Du fait des conflits d'accès entre les instructions et les données un système de priorité fixe a été instauré. Ainsi, quand l'unité de branchement génère le chargement de nouvelles instructions, ce dernier n'est réalisé que si aucun accès à une donnée par l'unité entière et aucun accès à la mémoire par le cache n'est suspendu ou en cours.

De même, lorsqu'une ligne d'un secteur est chargée à partir de la mémoire, le cache essaye de charger, avec une priorité faible, la seconde ligne du secteur.

Cependant, deux ports sur les étiquettes permettent d'effectuer un cycle de recherche en même temps qu'un accès à un élément du cache.

La politique d'écriture mise en oeuvre sur ce cache est configurable (simultanée ou différée) au niveau de chaque page. Afin d'améliorer les performances du système, deux files (lecture et écriture) servent de tampon avec la mémoire.

Il est à noter que le PowerPC 601 n'intègre pas le contrôle nécessaire à l'ajout d'un cache secondaire externe. Celui-ci est donc effectué par un contrôleur externe au processeur. Afin de diminuer au mieux la latence des transferts, le PowerPC 601 possède un mode de transferts groupés (Burst) qui permet d'effectuer le transfert d'une seule adresse pour tous les transferts de données d'une ligne de cache primaire ou de le pipeliner (adresse + donnée).

Bien que la définition de l'architecture PowerPC soit de type 64 bits, le PowerPC 601 est une implémentation 32 bits. Il a un bus externe de données de 64 bits et des bus internes de largeur variant de 32 à 256 bits.

Support des systèmes d'exploitation

L'architecture PowerPC conserve le même format mémoire que celui mis en oeuvre sur les processeurs POWER.

Le PowerPC 601 utilise donc un espace d'adressage segmenté paginé. L'espace d'adressage virtuel est de quatre peta-octets () et la taille des pages est de 4 Ko. Cependant, l'architecture PowerPC introduit un concept de blocs. Ces blocs peuvent être utilisés comme entité de base et permettent d'accéder à de plus grands espaces mémoires. Leur taille varie de 128 Ko à 8 Mo.

Le mécanisme de traduction d'adresse utilisé sur le PowerPC 601 est globalement identique à celui mis en oeuvre sur l'architecture POWER (sélection d'un registre de segment, adresse logique sur 52 bits, recherche dans la table des pages à partir de deux fonctions de hachage, obtention d'un numéro de page physique sur 32 bits). Cependant, l'introduction du concept de bloc qui permet de disposer d'un large espace mémoire contigu nécessite un mécanisme de traduction d'adresse particulier (voir [3]). En effet, les descripteurs de blocs sont dans des registres au lieu d'être dans une table en mémoire. Ces registres BAT (Block Address Translation registers) sont regroupés en paires, la partie haute contenant l'adresse virtuelle du bloc et la partie basse son adresse physique. Ce mécanisme est prioritaire sur la pagination classique. Si l'adresse logique correspond au contenu d'une des quatre paires de registres BAT, le mécanisme de traduction d'adresse de bloc est enclenché . De ce fait, la segmentation est alors inactive.

Chaque paire de registres BAT contient les adresses virtuelle et physique du début de bloc ainsi que sa taille. Ils sont accessibles uniquement en mode superviseur et ne sont pas vidés lors de l'exécution d'instructions d'invalidation de TLBs. Leur manipulation est à la charge du système d'exploitation. Ces mécanismes sont hérités des processeurs Motorola 88110.

Caches de traduction d'adresses.

Le PowerPC 601 possède trois caches de descripteurs de pages ou de blocs :

Sécurité.

Les concepts de sécurité sont identiques à ceux définis sur l'architecture POWER (contrôle des accès au niveau des segments et des pages). La séparation superviseur / utilisateur se fait au niveau des segments ou des blocs. Chaque processus utilisateur dispose de 16 segments dont deux sont réservés au noyau (accessible en mode superviseur). À noter cependant qu'il est possible d'effectuer des accès à la mémoire qui ne supportent aucun contrôle. Il suffit pour cela de désactiver tous les mécanismes de traduction d'adresses.

Support multiprocesseur

L'une des différences essentielles avec l'architecture POWER est l'introduction d'un support aux systèmes multiprocesseurs à mémoire partagée. Nous développons quelques uns des concepts implémentés dans la mesure où ils constituent un apport important de cette architecture.

Dans un système multiprocesseur à mémoire partagée, il est nécessaire de disposer de protocoles de cohérence de caches qui assurent l'exclusion mutuelle en écriture et la mise à jour des différents caches (primaires et secondaires), afin que chaque processeur puisse lire des données cohérentes.

Le PowerPC 601 dispose d'un support matériel pour l'implémentation de protocoles de cohérences de caches ainsi que de primitives de synchronisation qui permettent l'exécution, de façon atomique, d'accès à la mémoire. Le protocole de cohérence de cache employé est le protocole à invalidation sur écriture nommé MESI.

Accès à la mémoire partagée.

Le PowerPC 601 dispose d'instructions spécifiques pour accéder à des variables partagées. L'instruction LWARX accède à la donnée et verrouille la ligne de cache qui ne sera à nouveau accessible qu'après son écriture par l'instruction STWCX. La combinaison des deux instructions permet ainsi d'effectuer une lecture/écriture atomique.

Ordre des lectures/écritures.

La mise en oeuvre de multiprocesseurs à mémoire partagée pose le problème de l'ordre des accès à la mémoire par des processeurs distincts.

Il n'est pas donné de modèle pour ordonner les accès à la mémoire pour le PowerPC 601. Cependant, ce processeur offre la possibilité d'implémenter un modèle d'accès à forte rigidité, grâce au mode Write Through d'écriture en mémoire, ainsi que les trois modes proposés dans la norme Sparc version 8 (voir chapitre page ).

Quand le modèle d'ordre partiel des écritures est choisi, le PowerPC 601 peut spécifier, à l'aide des deux instructions SYNC et EIEIO quand l'ordre des accès mémoire doit être maintenu. L'instruction SYNC attend que toutes les instructions qui la précèdent soient achevées avant de commencer son exécution alors que l'instruction EIEIO n'assure une forte rigidité que sur les instructions d'accès à la mémoire.

Caractéristiques technologiques

Commercialisé dans un premier temps aux fréquences de 50 et 66 MHz, ce processeur atteint désormais 80 MHz. Les dernières annonces concernent un PowerPC 601+. Ce processeur, identique au PowerPC 601, résulte d'un passage à une technologie CMOS à 0.5 ~m (au lieu de 0.6 ~m) qui devrait lui permettre d'atteindre une fréquence de 100 MHz. Les performances s'accroissent de 25%et la surface de silicium est réduite du tiers pour une consommation divisée par deux (elle passe de 8 Watt à 4 Watt).

Les processeurs PowerPC 603, 602 et 604

Après avoir survolé les caractéristiques de l'architecture PowerPC à travers l'étude du PowerPC 601, nous présentons maintenant diverses implémentations de cette architecture.

Le PowerPC 603

Annoncé en 1993, il est destiné au marché des systèmes portables (note-books, palmtops). L'effort a essentiellement porté sur la faible consommation de ce processeur, et la mise en veille de certains de ses organes (processeur, disque, unités d'exécution). Ce processeur a cinq unités d'exécution (entière, flottante, branchement, lecture/écriture et système). Il peut séquencer trois instructions par cycle (deux instructions plus un branchement). Les pipelines d'exécution (entier, flottant, branchement, accès à la mémoire) sont identiques à ceux du 601. Il est à noter cependant que ce processeur inclut un mécanisme de renommage de registres pour les instructions entières et flottantes et qu'il implémente trois nouvelles instructions flottantes destinées à améliorer les performances graphiques.

À la différence du PowerPC 601, le 603 implémente des caches d'instructions et de données séparés de taille 8 Ko. Ces deux caches sont associatifs par ensemble à deux voies, physiquement adressés et testés. L'algorithme de remplacement des lignes est de type LRU.

Bien que le PowerPC 603 implémente un protocole de cohérence à trois états, sous-ensemble du protocole MESI, il ne peut pas être utilisé dans des systèmes multiprocesseurs symétriques. Le protocole à trois états permet de maintenir la cohérence lors de transfert de type DMA.

Le PowerPC 603 implémente le schéma de gestion de la mémoire virtuelle précédemment détaillé. Ce schéma de traduction fait appel à deux caches de traduction d'adresses de 64 entrées, associatifs à deux voies pour les instructions et les données et à un TLB de quatre entrées totalement associatif destiné à la traduction des adresses de blocs.

La largeur des bus sur ce processeur est de 32 ou 64 bits et sa consommation typique est de 2.5 W. En plus de l'inhibition de certaines unités, ce processeur dispose de trois modes de fonctionnement configurables par logiciel et qui permettent de mieux gérer sa consommation.

Réalisé en technologie CMOS à 0.65 m avec quatre couches de métal, ce processeur est séquencé à la fréquence de 80 MHz. Une évolution de ce composant a été récemment annoncée : le PowerPC 603e. Ce dernier conserve la même architecture avec cependant un cache de taille double (16 Ko), associatif par ensemble à quatre voies. Séquencé à la fréquence de 100 MHz, il contient 2.6 millions de transistors (1.6 millions pour le 603). Les performances attendues sont de 120 SPECint92 et 105 SPECfp92 (75 SPECint92 et 85 SPECfp92 pour le PowerPC 603 à 80 MHz).

Le PowerPC 602

Annoncé tout récemment, ce processeur est un dérivé du PowerPC 603 et devrait être disponible d'ici la fin de l'année 1995. Il vise le marché des processeurs embarqués haut de gamme tels que les consoles de jeux, les set-top boxes et les Personal Digital Assistant. Il constitue un compromis entre performances et coût de fabrication (divisé par trois par rapport au PowerPC 603 avec une consommation réduite de moitié). Pour atteindre un tel résultat, les changements par rapport au 603 concernent la réduction de la taille des caches, la suppression du séquencement superscalaire et la simplification des bus systèmes. Cependant, bien que beaucoup de ces changements aient des conséquences sur les performances, les caches ont été modifiés pour gérer plus rapidement les écritures et la latence des multiplications entières a également été améliorée. Ces changements devraient permettre a ce processeur de s'imposer dans un environnement de calcul graphique intensif (le concepteur de jeux 3DO a déjà choisi ce processeur pour équiper sa prochaine génération d'accélérateur graphique).

Comme on l'a dit précédemment, le PowerPC 602 est limité à une exécution scalaire des instructions. Ceci simplifie énormément les mécanismes associés au séquencement des instructions, à la prédiction des branchements et à l'exécution des instructions (réduction de moitié du nombre de ces composants). Cependant, sous certaines conditions, ce processeur peut exécuter deux instructions grâce à la technique du Branch folding conservée du 603 et du 601.

D'autres simplifications ont été effectuées au niveau de certaines unités d'exécution :

Il est à noter cependant que l'unité entière a été améliorée par rapport à celle du 603. Cette amélioration vise directement les applications multimédia où de nombreuses multiplications sont effectuées.

La hiérarchie mémoire a elle aussi été considérablement simplifiée à travers la suppression des tampons de lecture/écriture entre les caches et le sous-système mémoire, ainsi que la réduction de la capacité des caches (4 Ko pour les instructions et les données). Dans le domaine d'application visé, cette réduction de capacité devrait avoir des effets limités. Du fait de la suppression des tampons de lecture/écriture, il est déterminant que les caches mis en oeuvre soient non bloquants.

Le protocole de cohérence sur les caches est semblable à celui du PowerPC 603. Ce processeur ne peut donc pas être utilisé dans des systèmes multiprocesseurs.

Les caches de traduction d'adresses d'instructions et de données (TLB) ont chacun une taille de 32 entrées. Chacun de ces TLB inclut quatre entrées de blocs capables de mapper un espace mémoire contigu de 128 Ko à 256 Mo.

Le PowerPC 602 implémente un bus multiplexé de 32 bits pour les adresses et de 64 bits pour les données, ceci afin de réduire la connectivité et la taille de la puce.

La dernière caractéristique héritée du PowerPC 603, concerne la gestion de l'alimentation de certaines unités qui peuvent être inhibées quand elles ne sont pas utilisées. Trois modes de fonctionnement économiques sont également disponibles.

Réalisé dans la même technologie que le PowerPC 603, ce processeur est séquencé à 66 MHz. Il devrait fournir des performances de l'ordre de 65 Dhrystone.

Le PowerPC 604

Annoncé au premier trimestre 1994, les premiers systèmes à base de PowerPC 604 ont vu le jour en juin 1995 (système Power Macintosh 9500). De nombreux aspects du 603 et du 601 auxquels il succède ont été améliorés afin d'augmenter les performances de ce processeur. Ils concernent :

Ce processeur vise le marché des stations de travail (IBM) ainsi que les PC. Il équipe également la seconde génération de Power Macs d'Apple et s'inscrit comme un concurrent direct du Pentium avec des performances attendues de 160 SPECint92 et 165 SPECfp92 (à 100 MHz).

Du point de vue du séquencement des instructions, le 603 et le 604 ont des caractéristiques similaires dans la mesure où ils ont été développés en parallèle. Le PowerPC 604 inclut une unité arithmétique entière supplémentaire et combine le multiplieur et le diviseur dans une même unité entière complexe. Ceci permet de disposer de deux unités pour les opérations classiques (en un cycle) et d'une unité pour des calculs à latence plus longue (multiplication/division).

Les instructions sont chargées à partir du cache, au rythme de quatre instructions par cycle, dans un tampon de prédécodage de quatre entrées. Puis elles transitent dans un tampon de séquencement où elles subissent un renommage des registres. Cette étape supplémentaire particulièrement importante pour la suppression des conflits (de type WAR et WAW), ajoute un étage au pipeline classique. Le mécanisme de renommage inclut 12 registres entiers et 8 registres flottants supplémentaires. À la suite de cette étape, jusqu'à quatre instructions peuvent être envoyées vers chacune des unités fonctionnelles. Les instructions non émises le sont au cycle suivant si les conflits le permettent. Chacune des unités fonctionnelles est équipée d'une station de réservation de deux entrées. Les stations des unités relatives aux branchements, aux opérations de lecture/écriture de la mémoire ou aux opérations flottantes sont de type FIFO. En ce qui concerne les unités entières, ces stations supportent l'émission dans le désordre des instructions.

Le PowerPC 604 est le premier de cette famille à mettre en oeuvre une prédiction de branchement dynamique. Cette prédiction s'appuie sur deux structures :

Par ailleurs, l'architecture du PowerPC 604 supporte l'exécution spéculative des instructions. Leurs résultats sont soit stockés dans les registres de renommage soit dans la file d'écriture vers le cache. Les données seront réellement mises à jour dans le cache au moment où le résultat de la prédiction sera déterminé.

Le PowerPC 604 met également en oeuvre une unité flottante double-précision. Cette unité joue un rôle capital dans l'obtention de performances sur des applications manipulant ce type de données. Cependant, dans la mesure où ces données sont stockées sous forme double précision en mémoire, un cycle d'accès supplémentaire est nécessaire en lecture pour tester le type et si besoin convertir la donnée au format approprié au moment de son écriture dans le cache.

L'organisation des caches a été adaptée au niveau de performances de cette architecture. Les caches d'instructions et de données ont chacun une taille de 16 Ko et sont associatifs par ensemble à quatre voies et physiquement adressés. Ils implémentent une politique de remplacement des lignes de type LRU et une protection par parité.

Un mécanisme de files permet de découpler les accès vers la mémoire en lecture (le cache reste ainsi accessible) et en écriture (exécution spéculative et mise à jour du cache différée). À la différence du 603 (ou du 602), ce processeur peut être intégré dans des systèmes multiprocesseurs. Il implémente pour cela un protocole de cohérence de cache de type MESI et un double-port d'accès aux étiquettes de manière à résoudre le problème des conflits lors des cycles d'espionnage.

Le 604 inclut deux tables de traduction d'adresses séparées pour les instructions et les données, associatives à deux voies et chacune de 128 entrées.

Réalisé en technologie 0.65 ~m à cinq couches de métal, ce processeur contient 3.6 millions de transistors. Il est annoncé en trois versions 100, 120 et 133 MHz.

Les microcontrôleurs d'architecture PowerPC

C'est au printemps 1994 que Motorola a introduit sa première famille de microcontrôleur RISC, sur 32 bits, appelée RMCU 505 (RISC Microcontroler Central Unit). Cette famille est fondée sur l'architecture PowerPC, et, en raison de ses performances élevées, est destinée aux applications enfouies haut de gamme.

Le premier élément de cette famille est le MPC 505 dont la performance est de 25 Mips pour un circuit séquencé à 25 MHz (et de 46.4 Dhrystone). Elle devrait être portée à 40 Mips fin 95 avec un circuit à 40 MHz (à titre comparatif, le 68300, le plus puissant des microcontrôleur de Motorola atteint 5 Mips.)

IBM a développé également de son coté un microcontrôleur d'architecture PowerPC, le PPC 403 GA, séquencé à 33 MHz et destiné au même marché (performance de l'ordre de 39 Dhrystone).

Ces deux composants marquent l'introduction de l'architecture PowerPC dans le domaine des systèmes embarqués et illustrent la politique commerciale de ce consortium décidé à être présent sur tous les secteurs de marché.

Les deux composants ont des caractéristiques communes et correspondent à une simplification de l'architecture PowerPC afin de diminuer les coûts de production. À titre comparatif, le PowerPC 601 contient 2.8 millions de transistors, le 603, 1.6 millions, le RMCU 505 en contient 585 000. Bien que ces deux processeurs puissent exécuter une instruction entière et un branchement par cycle, ils ne peuvent en fait émettre qu'une instruction à chaque cycle. Tous deux disposent d'une unité arithmétique entière et d'une unité de branchement, le 505 inclut par ailleurs une unité flottante par opposition au 403 qui émule ces instructions.

Le RMCU 505 dispose d'un cache d'instructions et de données de 4 Ko. Le 403 implémente quant à lui un cache d'instructions de 2 Ko et un cache de données de 1 Ko. La faible capacité de ces caches est compensée par un degré d'associativité de deux.

Par souci de simplification de l'architecture, aucun de ces deux composants n'intègrent d'unité de gestion de la mémoire. Par contre, ils incluent des caractéristiques spécifiques au domaine des processeurs embarqués : gestion dynamique de la consommation, modes de faible consommation, intégration de contrôleurs d'entrées/sorties de type DMA, interruption, etc..., de manière à simplifier au maximum leur intégration dans les systèmes.

Par ailleurs, le consortium PowerPC met l'accent sur l'environnement de développement de logiciels autour de ces processeurs. Ils intègrent des capacités étendues de traçage de code en temps réel, des broches supplémentaires permettent de suivre les changements d'adresses, d'autres options incluent le contrôle du processeur (point d'arrêt, démarrage, etc...), des accès aux registres et à la mémoire ainsi qu'un outil de mise au point.

IBM a prévu au moins deux autres processeurs de ce type : le 401 destiné aux systèmes à très bas coûts et le 405 avec des unités d'exécution supplémentaires et des performances supérieures au 403.

Le PowerPC 620

Annoncé à la fin de l'année 1994, le PowerPC 620 est destiné à un marché nécessitant des performances élevées telles que les stations de travail haut de gamme et le domaine des serveurs. Aussi, ce processeur est le premier à mettre en oeuvre une architecture PowerPC 64 bits, qui reste cependant compatible avec l'ensemble de l'offre 32 bits PowerPC. On retrouve au sein de ce processeur des caractéristiques déjà mises en oeuvre sur le PowerPC 604. Cependant, l'accroissement de certaines fonctionnalités telles que unités fonctionnelles, hiérarchie mémoire, largeur des bus et autres contribuent à l'augmentation des performances.

Le PowerPC 620 a une architecture superscalaire. Le chargement des instructions se fait au rythme de quatre instructions par cycle. Jusqu'à quatre instructions peuvent être émises vers les six unités fonctionnelles implémentées. L'émission des instructions est faite dans l'ordre, leur exécution pouvant être effectuée dans le désordre grâce aux files d'instructions précédant chacune des unités (structure identique au PowerPC 604). Ces files d'instructions permettent d'émettre les instructions avant que leurs opérandes soient disponibles. Elles contribuent ainsi à réduire le taux de rupture du pipeline. Les trois unités d'exécution entière (deux pour les opérations simples et une pour les opérations complexes) ont chacune une file d'instructions à deux entrées. L'unité de lecture/écriture dispose d'une file de trois entrées, l'unité de branchement et l'unité flottante sont respectivement précédées par des files de quatre et deux entrées. Par souci de simplification de l'architecture, les instructions au sein des files des unités de branchement et arithmétiques flottantes sont exécutées dans l'ordre.

Le PowerPC 620 utilise un pipeline classique de cinq étages. Pour prédire les branchements, il s'appuie sur quatre techniques :

Une possibilité existe d'invalider la prédiction dynamique, une prédiction statique est alors utilisée pour maintenir le cache d'adresse cible selon la direction du branchement.

Par ailleurs, le PowerPC 620 permet l'exécution spéculative des instructions en supportant jusqu'à quatre niveaux de branchements non résolus. Les résultats temporaires issus de ces exécutions sont conservés dans les registres de renommage ou dans les tampons de réordonnancement en attendant la confirmation de la prédiction.

Au niveau de l'exécution des instructions, le PowerPC 620 dispose de deux unités entières arithmétiques responsables des instructions courantes (exécution en un cycle). Pour les opérations plus longues (multiplication et division), une unité arithmétique complexe à trois étages est implémentée.

L'unité flottante a également un pipeline d'exécution de trois étages et est conforme à la norme IEEE 754. Il est à noter qu'un mode non IEEE a également été implémenté dans le cadre d'un support aux opérations graphiques.

Au niveau de l'étage de mise à jour des registres, un tampon de réordonnancement de 16 entrées permet de conserver l'ordre et l'état des instructions. Par ailleurs, comme on peut s'y attendre sur ce type de processeur, une structure de files permet de découpler les accès vers le cache de données à partir de l'unité de lecture/écriture.

Le PowerPC 620 met en oeuvre deux caches d'instructions et de données séparés, de 32 Ko, associatifs par ensemble à huit voies. Ces caches sont tous deux physiquement adressés. La politique de mise à jour des données de la mémoire est configurable (simultanée ou différée).

La sélection d'un ensemble parmi huit pose un problème de vitesse et de consommation. Aussi, une partie de l'adresse virtuelle est utilisée pour pré-sélectionner une ligne de l'ensemble.

Les caches sont protégés par parité au niveau de l'octet pour les données et les instructions. Pour le cache d'instructions, sept bits de prédécodage sont associés à chaque instruction.

Par ailleurs, le PowerPC 620 inclut un contrôleur de cache interne qui lui permet de rajouter un second niveau de cache de 1 à 128 Mo. Le bus de données vers ce cache a une largeur de 128 bits. Un mécanisme de correction d'erreur simple et de détection d'erreur double est utilisé. Comme le premier niveau de cache, il implémente un protocole de cohérence de type MESI en vue de son implémentation dans un système multiprocesseur.
L'une des innovations de ce processeur est son architecture 64 bits. Le 620 implémente une unité de gestion de la mémoire à deux niveaux. Le premier niveau s'appuie sur une table de traduction d'adresse virtuelle vers des adresses physique de 64 entrées, totalement associative pour les instructions et les données (ERAT pour Effective to Real Address Translation). Le second niveau utilise une table de traduction de 128 entrées associative à deux voies (TLB). Une table de 20 entrées, totalement associative, est également implémentée et est dédiée à la traduction des segments (SLB). Les seize premières entrées servent également à implémenter les registres de segments pour l'exécution de codes compilés pour des microprocesseurs PowerPC d'architecture 32 bits.

La gestion de l'ensemble des tables est entièrement faite par matériel et respecte le système de mémoire virtuelle paginée segmentée définie par l'architecture PowerPC. L'unité de gestion de la mémoire du PowerPC 620 supporte jusqu'à octets de mémoire virtuelle et octets de mémoire physique.

Par ailleurs, le PowerPC 620 implémente les registres de traduction d'adresse de blocs pour les instructions et les données qui facilitent la traduction des adresses pour de vastes espaces de mémoire contigus (de 128 Ko à 256 Mo).
L'unité d'interface système implémente une nouvelle architecture de bus spécifiquement adaptée aux besoins de systèmes multiprocesseurs (jusqu'à huit PowerPC 620). Ce bus est constitué d'un bus d'adresse physique de 40 bits (au format big-endian) et d'un bus de données configurable lors de l'initialisation en mot double ou quadruple. Ses performances devraient permettre d'atteindre des transactions de 33 millions d'adresses par seconde pour un débit en données de 1 Go/sec.
Ce processeur dispose par ailleurs de fonctionnalités de test des éléments mémoire. Un contrôleur de performances est également implémenté par l'intermédiaire de deux compteurs de 32 bits. Ces compteurs permettent de suivre deux évènements sélectionnables sur un ensemble de 68.
Séquencé à la fréquence de 133 MHz, le PowerPC 620 implémente un contrôle dynamique de sa consommation (idem que le PowerPC 604 qui dispose d'un mode de veille). Il inclut par ailleurs un Phase Looked Loop qui facilite son intégration dans les systèmes. Réalisé en technologie CMOS à 0.5 ~m et quatre couches de métal, il comporte environ 7 millions de transistors. Ses performances attendues sont respectivement de 222 SPECint92 et 300 SPECfp92.



Next: Les microprocesseurs SPARC Up: Les architectures POWER Previous: L'architecture POWER


flloansi@IRISA.irisa.fr
Fri Jun 7 11:05:24 MET DST 1996