Bien que la puce Cell puisse avoir un certain nombre de configurations différentes, la configuration de base est une puce multicœur composée d’un « Power Processor Element » (« PPE ») (parfois appelé « Processing Element », ou « PE »), et de multiples « Synergistic Processing Elements » (« SPE »). Les PPE et les SPE sont reliés entre eux par un bus interne à haut débit surnommé « Element Interconnect Bus » (« EIB »).
Élément de traitement de puissance (PPE)Édition
Le PPE est le cœur du processeur basé sur PowerPC, à double émission dans l’ordre et à deux voies simultanées-multithreadées, avec un pipeline à 23 étages agissant comme contrôleur pour les huit SPE, qui gèrent la majeure partie de la charge de calcul. Le PPE a des capacités limitées d’exécution hors ordre ; il peut effectuer des charges hors ordre et dispose de pipelines d’exécution retardés. Le PPE fonctionnera avec des systèmes d’exploitation conventionnels en raison de sa similitude avec d’autres processeurs PowerPC 64 bits, tandis que les SPE sont conçus pour l’exécution de code vectoriel en virgule flottante. Le PPE contient un cache de niveau 1 de 64 KiB (32 KiB d’instructions et 32 KiB de données) et un cache de niveau 2 de 512 KiB. La taille d’une ligne de cache est de 128 octets. En outre, IBM a inclus une unité AltiVec (VMX) qui est entièrement pipelinée pour la virgule flottante de simple précision (Altivec 1 ne prend pas en charge les vecteurs de virgule flottante de double précision), une unité de virgule fixe de 32 bits (FXU) avec un fichier de registre de 64 bits par thread, une unité de chargement et de stockage (LSU), une unité de virgule flottante de 64 bits (FPU), une unité de branchement (BRU) et une unité d’exécution de branchement (BXU) : PPE se compose de trois unités principales : l’unité d’instruction (IU), l’unité d’exécution (XU) et l’unité d’exécution vectorielle/scalaire (VSU). L’IU contient le cache d’instructions L1, le matériel de prédiction de branchement, les tampons d’instructions et la connexion de vérification de dépendance. XU contient les unités d’exécution d’entiers (FXU) et l’unité de stockage de charge (LSU). VSU contient toutes les ressources d’exécution pour FPU et VMX. Chaque PPE peut effectuer deux opérations en double précision par cycle d’horloge à l’aide d’une instruction scalaire de fusion-multiplication-addition, ce qui correspond à 6,4 GFLOPS à 3,2 GHz ; ou huit opérations en simple précision par cycle d’horloge à l’aide d’une instruction vectorielle de fusion-multiplication-addition, ce qui correspond à 25.6 GFLOPS à 3,2 GHz.
Xenon dans la Xbox 360Edit
Le PPE a été conçu spécifiquement pour le processeur Cell, mais au cours du développement, Microsoft a approché IBM qui voulait un cœur de processeur haute performance pour sa Xbox 360. IBM a obtempéré et a fabriqué le processeur tri-core Xenon, basé sur une version légèrement modifiée du PPE avec des extensions VMX128 ajoutées.
Synergistic Processing Elements (SPE)Edit
Chaque SPE est un processeur à double émission dans l’ordre composé d’une « Synergistic Processing Unit », SPU, et d’un « Memory Flow Controller », MFC (DMA, MMU, et interface de bus). Les SPE ne disposent d’aucun matériel de prédiction de branchement (d’où une lourde charge pour le compilateur). Chaque SPE dispose de 6 unités d’exécution réparties entre les pipelines pairs et impairs sur chaque SPE : Le SPU exécute un jeu d’instructions (ISA) spécialement développé avec une organisation SIMD de 128 bits pour les instructions en simple et double précision. Avec la génération actuelle du Cell, chaque SPE contient une SRAM intégrée de 256 KiB pour les instructions et les données, appelée « Local Storage » (à ne pas confondre avec « Local Memory » dans les documents de Sony qui font référence à la VRAM) qui est visible par le PPE et peut être adressée directement par le logiciel. Chaque SPE peut prendre en charge jusqu’à 4 Go de mémoire de stockage local. La mémoire locale ne fonctionne pas comme un cache conventionnel de CPU, car elle n’est pas transparente pour le logiciel et ne contient pas de structures matérielles qui prédisent les données à charger. Les SPE contiennent un fichier de registre de 128 bits et 128 entrées et mesurent 14,5 mm2 sur un processus de 90 nm. Un SPE peut opérer sur seize entiers de 8 bits, huit entiers de 16 bits, quatre entiers de 32 bits ou quatre nombres à virgule flottante de simple précision dans un seul cycle d’horloge, ainsi qu’une opération de mémoire. Notez que le SPU ne peut pas accéder directement à la mémoire du système ; les adresses de mémoire virtuelle de 64 bits formées par le SPU doivent être transmises par le SPU au contrôleur de flux de mémoire (MFC) du SPE pour mettre en place une opération DMA dans l’espace d’adressage du système.
Dans un scénario d’utilisation typique, le système chargera les SPE avec de petits programmes (similaires aux threads), enchaînant les SPE ensemble pour gérer chaque étape d’une opération complexe. Par exemple, un boîtier décodeur pourrait charger des programmes pour la lecture d’un DVD, le décodage vidéo et audio, et l’affichage, et les données seraient transmises de SPE en SPE jusqu’à ce qu’elles aboutissent finalement sur le téléviseur. Une autre possibilité est de partitionner l’ensemble des données d’entrée et d’avoir plusieurs SPE qui effectuent le même type d’opération en parallèle. A 3,2 GHz, chaque SPE donne une performance théorique de 25,6 GFLOPS en simple précision.
Par rapport à ses contemporains ordinateurs personnels, la performance globale relativement élevée en virgule flottante d’un processeur Cell semble éclipser les capacités de l’unité SIMD dans des CPU comme le Pentium 4 et l’Athlon 64. Cependant, la comparaison des seules capacités en virgule flottante d’un système est une mesure unidimensionnelle et spécifique à une application. Contrairement à un processeur Cell, ces unités centrales de bureau sont plus adaptées aux logiciels polyvalents généralement exécutés sur les ordinateurs personnels. Outre l’exécution de plusieurs instructions par horloge, les processeurs d’Intel et d’AMD disposent de prédicteurs de branchement. Le Cell est conçu pour compenser cela avec l’aide du compilateur, qui crée des instructions de préparation au branchement. Pour les opérations à virgule flottante en double précision, telles qu’elles sont parfois utilisées dans les ordinateurs personnels et souvent dans le calcul scientifique, les performances du Cell diminuent d’un ordre de grandeur, mais atteignent tout de même 20,8 GFLOPS (1,8 GFLOPS par SPE, 6,4 GFLOPS par PPE). La variante PowerXCell 8i, qui a été spécifiquement conçue pour la double précision, atteint 102,4 GFLOPS dans les calculs en double précision.
Les tests effectués par IBM montrent que les SPE peuvent atteindre 98 % de leur performance maximale théorique en exécutant une multiplication matricielle parallèle optimisée.
Toshiba a développé un coprocesseur alimenté par quatre SPE, mais pas de PPE, appelé SpursEngine conçu pour accélérer les effets 3D et cinématographiques dans l’électronique grand public.
Chaque SPE dispose d’une mémoire locale de 256 Ko. Au total, les SPE disposent de 2 Mo de mémoire locale.
Bus d’interconnexion d’éléments (EIB)
L’EIB est un bus de communication interne au processeur Cell qui relie les différents éléments du système sur puce : le processeur PPE, le contrôleur de mémoire (MIC), les huit coprocesseurs SPE et deux interfaces E/S hors puce, soit un total de 12 participants au PS3 (le nombre de SPU peut varier dans les applications industrielles). L’EIB comprend également une unité d’arbitrage qui fonctionne comme un ensemble de feux de signalisation. Dans certains documents, IBM désigne les participants à l’EIB par le terme « unités ».
L’EIB est actuellement mis en œuvre sous la forme d’un anneau circulaire constitué de quatre canaux unidirectionnels de 16 octets de large qui effectuent une contre-rotation par paires. Lorsque le trafic le permet, chaque canal peut transporter jusqu’à trois transactions simultanément. Comme l’EIB fonctionne à la moitié de la fréquence d’horloge du système, la fréquence effective des canaux est de 16 octets toutes les deux horloges du système. À la concurrence maximale, avec trois transactions actives sur chacun des quatre anneaux, la largeur de bande instantanée maximale de l’EIB est de 96 octets par horloge (12 transactions simultanées × 16 octets de largeur / 2 horloges système par transfert). Bien que ce chiffre soit souvent cité dans la littérature d’IBM, il n’est pas réaliste de le mettre simplement à l’échelle de la vitesse d’horloge du processeur. L’unité d’arbitrage impose des contraintes supplémentaires.
L’ingénieur principal d’IBM David Krolak, concepteur principal de l’EIB, explique le modèle de concurrence :
Un anneau peut commencer une nouvelle op tous les trois cycles. Chaque transfert prend toujours huit temps. C’est une des simplifications que nous avons faites, c’est optimisé pour le streaming de beaucoup de données. Si vous faites de petites opérations, cela ne fonctionne pas aussi bien. Si vous pensez à des trains de huit wagons circulant sur cette voie, tant que les trains ne se croisent pas, ils peuvent coexister sur la voie.
Chaque participant au BEI dispose d’un port de lecture de 16 octets et d’un port d’écriture de 16 octets. La limite pour un seul participant est de lire et d’écrire à un taux de 16 octets par horloge EIB (pour la simplicité souvent considéré 8 octets par horloge système). Chaque processeur SPU contient une file d’attente de gestion DMA dédiée capable de programmer de longues séquences de transactions vers divers points d’extrémité sans interférer avec les calculs en cours du SPU ; ces files d’attente DMA peuvent également être gérées localement ou à distance, ce qui offre une flexibilité supplémentaire dans le modèle de contrôle.
Les données circulent sur un canal EIB par étapes autour de l’anneau. Comme il y a douze participants, le nombre total d’étapes autour du canal jusqu’au point d’origine est de douze. Six étapes sont la distance la plus longue entre n’importe quelle paire de participants. Un canal EIB n’est pas autorisé à transmettre des données nécessitant plus de six étapes ; ces données doivent emprunter le chemin le plus court autour du cercle dans l’autre direction. Le nombre d’étapes nécessaires à l’envoi du paquet a très peu d’impact sur la latence du transfert : la vitesse d’horloge qui pilote les étapes est très rapide par rapport aux autres considérations. Cependant, les distances de communication plus longues sont préjudiciables aux performances globales du BEI car elles réduisent la concurrence disponible.
Malgré le désir initial d’IBM d’implémenter l’EIB sous la forme d’une barre transversale plus puissante, la configuration circulaire qu’ils ont adoptée pour économiser les ressources représente rarement un facteur limitant les performances de la puce Cell dans son ensemble. Dans le pire des cas, le programmeur doit faire très attention à programmer des modèles de communication où l’EIB est capable de fonctionner à des niveaux de concurrence élevés.
David Krolak a expliqué :
Bien, au début, au début du processus de développement, plusieurs personnes poussaient pour un commutateur crossbar, et la façon dont le bus est conçu, vous pourriez en fait retirer l’EIB et mettre un commutateur crossbar si vous étiez prêt à consacrer plus d’espace de silicium sur la puce pour le câblage. Nous devions trouver un équilibre entre la connectivité et la surface, et il n’y avait tout simplement pas assez de place pour intégrer un commutateur crossbar complet. Nous avons donc mis au point cette structure en anneau qui nous semble très intéressante. Elle s’inscrit dans les contraintes de surface tout en offrant une bande passante très impressionnante.
Évaluation de la bande passanteÉditer
À 3,2 GHz, chaque canal circule à un débit de 25,6 Go/s. Si l’on considère l’EIB de manière isolée par rapport aux éléments du système qu’il connecte, la réalisation de douze transactions simultanées à ce débit revient à une bande passante abstraite de l’EIB de 307,2 Go/s. Sur la base de cette vision, de nombreuses publications d’IBM décrivent la bande passante EIB disponible comme « supérieure à 300 Go/s ». Ce chiffre reflète la largeur de bande EIB instantanée de pointe mise à l’échelle par la fréquence du processeur.
Cependant, d’autres restrictions techniques interviennent dans le mécanisme d’arbitrage des paquets acceptés sur le bus. Le groupe IBM Systems Performance a expliqué :
Chaque unité sur l’EIB peut simultanément envoyer et recevoir 16 octets de données à chaque cycle de bus. La bande passante maximale de données de l’ensemble de l’EIB est limitée par le taux maximal auquel les adresses sont fouinées sur toutes les unités du système, soit une par cycle de bus. Comme chaque demande d’adresse snoopée peut potentiellement transférer jusqu’à 128 octets, la bande passante de données maximale théorique sur l’EIB à 3,2 GHz est de 128Bx1,6 GHz = 204,8 Go/s.
Cette citation représente apparemment toute l’étendue de la divulgation publique d’IBM sur ce mécanisme et son impact. L’unité d’arbitrage EIB, le mécanisme de snooping et la génération d’interruptions sur les défauts de traduction de segment ou de page ne sont pas bien décrits dans l’ensemble de la documentation encore rendue publique par IBM.
En pratique, la bande passante EIB effective peut également être limitée par les participants à l’anneau concernés. Alors que chacun des neuf cœurs de traitement peut soutenir une lecture et une écriture simultanées de 25,6 Go/s, le contrôleur d’interface mémoire (MIC) est lié à une paire de canaux de mémoire XDR permettant un flux maximal de 25,6 Go/s pour les lectures et les écritures combinées et les deux contrôleurs d’entrée-sortie sont documentés comme supportant une vitesse d’entrée combinée de pointe de 25,6 Go/s et une vitesse de sortie combinée de pointe de 35 Go/s.
Pour ajouter à la confusion, certaines publications plus anciennes citent la largeur de bande EIB en supposant une horloge système de 4 GHz. Ce cadre de référence donne un chiffre de largeur de bande EIB instantanée de 384 Go/s et un chiffre de largeur de bande limitée par l’arbitrage de 256 Go/s.
Tout bien considéré, le chiffre théorique de 204,8 Go/s le plus souvent cité est le meilleur à garder à l’esprit. Le groupe IBM Systems Performance a démontré que les flux de données centrés sur le SPU atteignaient 197 Go/s sur un processeur Cell fonctionnant à 3,2 GHz, ce chiffre est donc également un reflet fidèle de la pratique.
Contrôleurs de mémoire et d’E/SÉdit
Cell contient une macro Rambus XIO à double canal qui s’interface avec la mémoire Rambus XDR. Le contrôleur d’interface mémoire (MIC) est distinct de la macro XIO et est conçu par IBM. La liaison XIO-XDR fonctionne à 3,2 Gbit/s par broche. Deux canaux 32 bits peuvent fournir un maximum théorique de 25,6 Go/s.
L’interface E/S, également une conception Rambus, est connue sous le nom de FlexIO. L’interface FlexIO est organisée en 12 voies, chaque voie étant un chemin point à point unidirectionnel de 8 bits de large. Cinq voies point à point de 8 bits de large sont des voies d’entrée vers Cell, tandis que les sept autres sont des voies de sortie. On obtient ainsi une bande passante de pointe théorique de 62,4 Go/s (36,4 Go/s en sortie, 26 Go/s en entrée) à 2,6 GHz. L’interface FlexIO peut être cadencée indépendamment, typiquement à 3,2 GHz. 4 voies entrantes + 4 voies sortantes supportent la cohérence de la mémoire.