Lorsqu’il a été annoncé qu’AMD allait faire une présentation à Hot Chips sur sa nouvelle microarchitecture Zen 3, je m’attendais au tarif habituel lorsqu’une entreprise passe par une plate-forme déjà annoncée – une série de diapositives que nous avions vues auparavant. Dans la présentation Zen 3, c’était en grande partie le cas, à l’exception d’un extrait d’information qui n’avait pas été divulgué auparavant. Cette information est assez importante pour envisager la stratégie de croissance d’AMD.

Afin d’expliquer pourquoi cette information était importante, nous devons parler des différentes manières de connecter deux éléments (comme des cœurs de processeur, ou des processeurs complets, ou même des GPU) ensemble.

Connectivité : anneau, maillage, barre transversale, tout-à-tout

Avec deux éléments de traitement, le moyen le plus simple de les connecter est par une connexion directe. Avec trois éléments, de même, chaque partie peut être directement connectée à l’autre.

Lorsque nous passons à quatre éléments, des options deviennent disponibles. Les éléments peuvent être soit disposés de manière similaire dans une configuration tout-à-tout, soit dans un anneau.

La différence entre les deux se résume à la latence, la bande passante et la puissance.

Dans la situation entièrement connectée sur la droite, chaque élément a une connexion directe les uns aux autres, permettant une bande passante de connectivité complète et la latence la plus faible. Cependant, cela vient avec un compromis de puissance, étant donné que chaque élément doit avoir trois connexions. Si nous comparons cela à l’anneau, chaque élément n’a que deux connexions, fixant la puissance, cependant parce que la distance moyenne entre eux n’est plus constante et que nous devons transmettre des données autour de l’anneau, cela peut entraîner une variabilité de la latence et bande passante en fonction de ce qui est envoyé autour de l’anneau.

Aussi avec l’anneau, nous devons considérer s’il peut envoyer des données dans un seul sens, ou dans les deux sens.

Presque toutes les conceptions d’anneaux modernes sont bidirectionnelles, ce qui permet aux données de circuler dans les deux sens. Pour le reste de cet article, nous supposons que tous les anneaux sont bidirectionnels. Certains des processeurs Intel les plus modernes ont des anneaux bidirectionnels doubles, permettant une double bande passante au détriment d’une double alimentation, mais un anneau peut être « désactivé » pour économiser de l’énergie dans des scénarios sans bande passante limitée.

La meilleure façon de considérer les deux conceptions à quatre éléments est le nombre de connexions et de sauts moyens vers d’autres éléments :

  • 4 éléments entièrement connectés : 3 connexions, 1 saut en moyenne
  • Anneau bidirectionnel à 4 éléments : 2 connexions, 1,3 saut en moyenne

La même chose peut se produire avec les configurations à six éléments :

Ici, l’équilibre entre la bande passante et la puissance est plus extrême. La conception en anneau repose toujours sur deux connexions par élément, alors qu’une topologie entièrement connectée nécessite cinq connexions par élément. La conception entièrement connectée reste cependant à un saut en moyenne pour accéder à tout autre élément, tandis que l’anneau est désormais plus complexe à 1,8 saut par accès moyen.

Nous pouvons étendre les deux un peu indéfiniment, mais dans la conception de processeurs modernes, il existe un compromis substantiel en termes de performances si vous augmentez toute votre puissance pour maintenir ces conceptions entièrement connectées. Il y a aussi un point à noter ici, nous n’avons pas considéré ce qui pourrait être dans la conception – par exemple, les processeurs de bureau Intel modernes, connus pour avoir des anneaux, placeront également les contrôleurs DRAM, les E/S et les graphiques intégrés sur l’anneau, donc une conception à 8 cœurs n’est pas simplement un anneau à 8 éléments :

Voici une maquette simple comprenant la DRAM et les graphiques intégrés. À vrai dire, Intel ne nous dit pas tout sur ce qui est connecté à l’anneau, ce qui signifie qu’il peut être difficile de déterminer où tout se trouve, mais avec des tests synthétiques, nous pouvons voir la latence moyenne d’un anneau et essayer de partir là.

Intel a en effet développé un moyen de connecter 8 éléments entre eux dans le non-anneau mais aussi pas-entièrement connecté en donnant à chaque élément la possibilité d’avoir trois connexions. Encore une fois, l’idée ici est d’échanger de la puissance contre une latence et une bande passante améliorées :

Cela revient à prendre les huit coins d’un cube, à créer des anneaux des deux côtés, puis à mettre en œuvre des stratégies de connexion alternatives sur les faces orthogonales. Cela signifie que chaque élément est directement connecté à trois autres éléments, et tout le reste est à deux sauts :

  • Hypercube torsadé, 8 éléments : 3 connexions, 1,57 saut moyen

Dans les Sapphire Rapids de nouvelle génération, Intel attribue à chaque processeur 4 connexions, pour 1,43 saut moyen.

Aller au-dessus de 10 éléments dans un anneau, du moins dans les architectures centrales modernes, semble être un peu un problème en raison de la latence accrue. Vous finissez par mettre une pression croissante sur l’anneau, car plus de cœurs signifie généralement qu’une plus grande bande passante est nécessaire pour les alimenter tous en données. Intel et d’autres grandes sociétés d’IA à puce unique ont résolu ce problème en mettant en œuvre un maillage bidimensionnel.

La conception du maillage permet d’échanger des connexions par élément supplémentaires pour une meilleure latence et une meilleure connectivité. La latence moyenne varie toujours et, en cas de flux de données important, les données peuvent emprunter plusieurs itinéraires pour se rendre là où elles doivent aller.

Un maillage 2D est la disposition la plus simple – chaque élément à côté est à une unité x/y. Il tourne autour de chaque élément étant dans un plan sans chevauchement de connectivité. De nombreux travaux ont été réalisés sur les topologies qui tirent parti d’un peu de 3D, ce qui est l’endroit où nous pourrions aller lorsque la technologie d’empilement puce sur puce est largement mise en œuvre. Voici un exemple de document expliquant pourquoi un ButterDonut pourrait être une bonne idée si les réseaux maillés étaient implémentés au niveau de l’interposeur, car il minimise les liens de saut.

L’autre alternative est une barre transversale. La vue la plus basique d’un Crossbar est qu’il implémente une topologie tout-à-tout efficace et entièrement connectée pour une seule connexion. Il existe plusieurs types de crossbar, encore une fois en fonction des besoins en bande passante, latence et alimentation. Une barre transversale n’est pas magique, ce qu’elle fait vraiment, c’est résoudre le problème de connectivité un pas plus loin.

À ce stade de l’article, nous n’avons pas expliqué comment les éléments sont connectés entre eux. À l’intérieur d’une puce qui signifie généralement en silicium, cependant, lorsque nous parlons de connecter des puces ensemble, cela peut se faire via un interposeur, ou le PCB, ce qui est plus limitatif en termes de nombre de connexions haut débit qu’il peut contenir et de combien peut traverser un point donné. Une barre transversale externe physique est souvent nécessaire pour simplifier les connexions intégrées, par exemple, NVIDIA permet à huit GPU Tesla de se connecter de manière globale en passant par un NVSwitch, qui est en fait une barre transversale.

Dans ce cas, voici un schéma d’une Switching Crossbar, qui agit comme une matrice ou un maillage interne qui gère l’endroit où les données doivent aller.

Dans ce genre d’environnements, même s’il n’y a « qu’une » connexion à la barre transversale par rapport à d’autres configurations qui pourraient avoir deux ou trois connexions par élément, considérez que la bande passante peut être double/triple à la barre transversale que dans une connexion directe. Cela signifie toujours que chaque élément a plus d’une connexion efficace et bénéficie de multiples de bande passante si nécessaire.

Alors pourquoi AMD est-il limité ?

La raison de passer en revue toutes ces explications sur la connectivité est que lorsque AMD est passé de Zen 2 à Zen 3, il a augmenté le nombre de cœurs à l’intérieur d’un CCX (core complex). Dans Zen 2, un chiplet de huit cœurs avait deux CCX à quatre cœurs, et chacun d’eux était connecté à la matrice d’E/S principale, mais avec Zen 3, un seul CCX est passé à huit cœurs et est resté huit cœurs par chiplet.

Lorsqu’il y avait quatre cœurs par CCX, il était très facile d’imaginer (et de tester) une topologie à quatre cœurs entièrement connectée. Ce n’est pas beaucoup plus que de s’attendre à ce que chaque cœur soit connecté à l’autre. Maintenant avec huit cœurs par CCX, depuis son lancement, AMD a été extrêmement timide de dire publiquement à quiconque comment ces noyaux sont connectés entre eux. Lorsqu’on lui a demandé au lancement si les cœurs d’un Zen 3 CCX à huit cœurs étaient entièrement connectés, l’attitude générale d’AMD était « Pas tout à fait, mais assez proche ». Cela signifierait quelque chose entre un anneau et quelque chose entre un design tout-à-tout, mais plus proche de ce dernier.

Lors de nos tests, nous avons vu un profil de latence CCX similaire avec huit cœurs comme nous l’avions vu avec quatre cœurs. Cela confirmerait essentiellement les commentaires d’AMD – nous n’avons vu aucune indication qu’AMD utilisait un anneau. Cependant, à Hot Chips, Mark Evers (architecte en chef, Zen 3) d’AMD a présenté cette diapositive :

Ce fut un peu un choc de le voir énoncé si clairement, compte tenu de l’appréhension d’AMD lors des discussions précédentes sur la topologie. Ce fut également un choc d’avoir quelque chose de nouveau dans cette présentation, car à peu près tout le reste avait été présenté lors d’événements précédents. Cependant, il y a des répercussions à cela.

Aller au-delà de 8 cœurs par CCX

Comme AMD a lentement augmenté le nombre de cœurs sur ses processeurs, il a eu deux façons de le faire : plus de puces ou plus de cœurs par puce. Avec les futures générations de processeurs AMD qui devraient avoir plus de cœurs, cela doit provenir de l’une de ces deux options. Les deux sont viables, mais c’est l’option de plus de cœurs par puce à considérer.

Nous avons expliqué dans cet article comment les anneaux compromettent la puissance et les connexions par élément pour la latence et la bande passante, et comment il peut y avoir une limite appréciable au nombre d’éléments ou de cœurs pouvant être placés dans un anneau avant que l’anneau ne soit le facteur limitant. . Intel, par exemple, a des processeurs à 10 cœurs qui utilisent des anneaux à double bande passante, et le plus grand nombre de cœurs qu’il a jamais mis dans un anneau est de 12, avec la gamme de processeurs Broadwell Server qui a fini par utiliser deux anneaux à 12 cœurs.

Chaque anneau ici a 12 arrêts d’anneau pour les cœurs, deux pour la connectivité anneau à anneau, un pour la DRAM, et l’anneau de gauche a deux arrêts supplémentaires pour puce à puce et PCIe. Cet anneau de droite a effectivement 17 éléments qui lui sont attachés. Après cela, Intel est passé aux maillages.

Appliquez ce scénario à AMD : si AMD augmentait le nombre de cœurs par CCX de huit dans Zen 3, les réponses les plus évidentes seraient soit 12 cœurs, soit 16 cœurs. Sur une sonnerie, aucun de ces deux ne sonne aussi appétissant.

L’alternative d’AMD à l’augmentation du nombre de cœurs sur une puce consiste simplement à doubler le nombre de CCX. Comme avec Zen 2, qui avait deux lots de quatre cœurs, un futur produit pourrait à la place avoir deux lots de huit cœurs, ce qui constituerait un saut facile vers une puce à seize cœurs.

Il convient de noter que la plate-forme de serveur de nouvelle génération d’AMD, Genoa, devrait avoir plus que les 64 cœurs de la génération actuelle d’AMD. Ces 64 cœurs sont huit chiplets de huit cœurs chacun, avec un CCX à huit cœurs par chiplet. Des fuites ont suggéré que Gênes ajoute simplement plus de chips, mais cette stratégie n’est pas infiniment évolutive.

En plus de tout cela, considérez la matrice IO d’AMD dans EPYC. C’est effectivement une barre transversale, non? Toutes les puces sont réunies pour être connectées, mais la puce IO d’AMD est elle-même une conception Ring Crossbar.

Ce que nous avons obtenu d’AMD est un anneau d’anneaux. En réalité, l’anneau est un peu plus complexe :

La matrice IO d’AMD est un grand anneau extérieur avec huit arrêts dessus, et certains des arrêts ont des connexions à travers l’anneau. Cela pourrait être considéré comme un maillage ou un anneau coupé en deux, et cela ressemble à ceci :

Avec un anneau coupé en deux, il existe désormais un équilibre non uniforme entre le nombre de connexions par élément et la latence moyenne – certains éléments ont deux connexions, d’autres en ont trois. Cependant, cela est similaire au maillage dans le sens où tous les éléments n’ont pas un profil de bande passante ou de latence identique. Il est également important de noter qu’un anneau coupé en deux peut avoir une, deux ou plusieurs connexions internes.

Alors, le Zen 3 8-Core CCX d’AMD est-il vraiment un anneau ?

AMD nous dit que sa structure CCX à huit cœurs est un anneau bidirectionnel. Si tel est le cas, alors AMD aura du mal à dépasser huit cœurs par CCX. Il pourrait facilement doubler les cœurs par puce en doublant simplement le nombre de CCX, mais au-delà, l’anneau doit changer.

Lors de nos tests, nos résultats montrent que bien que le complexe de base d’AMD ne soit pas une connexion tout-à-tout, il ne correspond pas non plus à ce que nous attendions des latences en anneau. En termes simples, ce doit être plus qu’une bague. AMD a été très timide sur les détails exacts de leur interconnexion CCX – en fournissant une diapositive indiquant qu’il s’agit d’un anneau, cela renforce le fait qu’il ne s’agit pas d’une interconnexion globale, mais nous sommes à peu près sûrs qu’il s’agit d’une forme d’anneau coupé en deux, un détail qu’AMD a décidé de laisser de côté dans la présentation.

Réflexions finales : aller au-delà des anneaux

Alors que j’écrivais cet article, je me suis rendu compte de ce qui pourrait être à l’avenir pour ce type de conception. Dans le monde x86, AMD a été le pionnier du « CPU Chiplet » 2D sans beaucoup d’E/S, et AMD va de l’avant avec sa technologie V-Cache à empilement vertical 3D comme annoncé l’année dernière. Dans le cadre de cet article, j’ai parlé de différentes sortes d’interconnexions de maillage et du fait que pour faire quelque chose d’innovant, il faut un interposeur. Eh bien, considérez chaque puce CPU avec une autre puce ci-dessous, comme un interposeur efficace à un seul silicium, uniquement pour l’interconnexion cœur à cœur.

L’interposeur peut se trouver sur un nœud de processus plus grand, par ex. 65 nm, à très haut rendement, et éloigne une partie de la logique de la puce principale, réduisant sa taille ou laissant plus de place à plus d’innovation. La clé ici serait les vias requis pour les données et l’alimentation du package, mais AMD a une vaste expérience avec ses GPU qui nécessitent des interposeurs.

Vous pouvez également aller plus loin : les interposeurs sont conçus pour plusieurs chiplets. Si un interposeur à haut rendement de 65 nm est assez facile à fabriquer pour contenir deux ou trois puces, placez-y simplement plusieurs puces pour qu’elles puissent agir comme une seule grande puce avec un cache unifié entre elles. AMD a également déclaré que sa latence V-Cache n’augmente qu’avec la longueur du fil, et donc un interposeur entre deux/trois/quatre puces de chaque côté de la puce IO n’ajouterait pas de latence significative au cache.

L’avènement des puces et des tuiles signifie qu’à mesure que les entreprises de semi-conducteurs commencent à désagréger leur propriété intellectuelle en morceaux de silicium distincts et que les technologies d’emballage deviennent moins chères et plus rentables, nous allons voir plus d’innovation dans des domaines qui commencent à devenir des goulots d’étranglement, tels que interconnexions en anneau.