Tennessee
Se connecter avec
S'enregistrer | Connectez-vous

Le PPE : le maître d’œuvre

Le processeur Cell
Par
Alors que les SPE constituent la partie exotique du Cell, le PPE est pour sa part beaucoup plus traditionnel. On se retrouve ainsi devant une nouvelle implémentation 64 bits de l’ISA PowerPC qui trouve ses racines dans un projet d’IBM datant de 1997 et qui visait à créer un processeur simple mais capable d’atteindre la fréquence d’horloge de 1 GHz. Huit ans plus tard ce projet a bien changé mais le PPE hérite de la simplicité de son ancêtre.

Le design du PPE rappelle donc celui des premières implémentations de l’ISA PowerPC : exécutant les instructions dans l’ordre (pas de réordonnancement dynamique des instructions) et offrant une forme limitée d’exécution superscalaire. On est donc très loin ici d’un PowerPC 970.

Le PPE dispose d’une hiérarchie mémoire classique avec deux mémoires cache de niveau 1 distinctes pour les instructions et les données de 32 Ko chacune, et une mémoire cache de niveau 2 unifiée de 512 Ko.

A chaque cycle le PPE est capable de lancer l’exécution de deux instructions par cycle pourvu qu’elles ne présentent pas de dépendances entre elles et qu’elles occupent des unités différentes. En effet le PPE ne dispose que d’une FPU, d’une unité vectorielle et d’une ALU. L’absence de réordonnancement dynamique des instructions limite encore plus l’IPC de ce processeur.


Le PPE doit en effet reposer sur l’ordonnancement statique effectué par le compilateur là où les processeurs modernes (à quelques exceptions comme l’Itanium) utilisent l’ordonnancement dynamique afin de réduire les suspensions dans le cas où les dépendances ne sont pas connues à la compilation.

Prenons par exemple la suite d’instructions suivante :

R0 = R1 * 2
R2 = R0 + 2

Ces deux instructions utilisent l’unité de calcul entière du PPE. Toutefois la deuxième instruction ne peut être exécutée tant que le résultat de la première ne sera pas connu. Et plus le pipeline est long plus ce résultat prendra de cycles à être déterminé. Pour contourner le problème, les processeurs à ordonnancement dynamique disposent d’une fenêtre d’instructions à lancer et sélectionnent dans cette fenêtre des instructions ne présentant pas de dépendances avec la première.

Ainsi en attendant que le résultat de la première instruction soit disponible ces CPU peuvent effectuer du travail utile pour la suite. Un CPU à ordonnancement statique pour sa part devra suspendre le pipeline diminuant largement son efficacité. Un autre avantage des processeurs à réordonnancement dynamique est qu’ils peuvent masquer les défauts du cache de niveau 1 en exécutant encore une fois d’autres instructions indépendantes lorsqu’une donnée doit être récupérée depuis la mémoire cache de niveau 2. Evidemment l’exécution dans le désordre à un coût, vu qu’il faut une fenêtre d’instructions et sauvegarder l’ordre des instructions dans une table afin de garantir une exécution ordonnée du programme au final. Des registres de renommage sont également nécessaires pour éliminer les fausses dépendances qui peuvent être introduites.