Inside : AMD Ryzen Summit Ridge

1
1420

Aujourd’hui, nous vous parlerons de l’architecture Ryzen d’AMD. Quelles sont les grands principes de cette nouvelle architecture ?

Zen est une architecture, c’est à dire un design de coeur, associé à un set de jeux d’instructions. Il est possible de mettre en place des coeurs Zen de différentes manières. Les processeurs Ryzen série 1000 sont tous des Summit Ridge, nous allons donc détailler quelle est cette organisation.

Pour une bonne lecture de cet Inside, nous vous invitons à lire ce Quicky parlant de l’organisation des CPU.

AMD a radicalement changé son architecture Zen par rapport à l’architecture Bulldozer (et ses dérivés) précédente. Le but était de pallier la très faible IPC (nombre d’instructions par cycle) sur les FX Bulldozer. D’après AMD, le gain en termes d’IPC atteint ici 52 % ! Ce n’est pas rien. Nous n’avions pas vu de tels gap depuis le passage Pentium D → Core 2 Duo il y a plus de 10 ans.

Zen Core :

Voici le diagramme d’un coeur Zen :

Dans le diagramme, on voit bien la distinction front-end (bleu) / back-end (orange et rouge). Un coeur est cette fois-ci une entité à part entière, qui ne partage pas certaines parties avec le coeurs voisin. Pour rappel, les unité d’execution FMA (virgule flottante) sur Bulldozer, qui correspondent ici à la partie orange, étaient partagées d’un coeur à l’autre.

Dans tous les cas ici, contrairement à Intel, la partie Int et la partie Float sont bien distinctes, avec un scheduler pour chaque. Chez Intel nous retrouvons un scheduler global.

On retrouve la grande nouveauté de Ryzen : le SMT (Simultaneous MultiThreading) qu’Intel avait mis en place sous le nom de Hyperthreading. Le principe est de doubler les files de traitement des micro-ops au niveau du back-end en amont du scheduler. Le tout sera vu par l’OS comme deux coeurs distinct. Le but est de mieux approvisionner les unités d’exécutions en micro ops à effectuer, dans le but de maximiser la quantité de calcul effectué chaque seconde.

Front End :

Au niveau du Front End, AMD a beaucoup communiqué sur son prefetch, sous forme de réseau neuronal, qui permet de réduire les taux d’erreur lors des branchements. Plus de détails sur la prédiction dans notre Quicky sur le fonctionnement des processeurs.

La partie décodage permet de décoder les instructions assembleur en micro opérations (les fameuses micro-ops). Le décodeur d’un coeur Zen permet de décoder 4 instructions par cycle maximum et générer 6 micro-ops par cycle maximum.

A savoir qu’une instruction peut donner lieu à plusieurs micro-ops (si c’est une instruction complexe avec de nombreux arguments, typiquement) et que deux instructions peuvent donner lieu à une seule micro-op, typiquement dans le cas des branchements.

A titre de comparaison, on se retrouve avec un décodeur en théorie similaire à celui que l’on peut retrouver sur un coeur Skylake.

Les décodeurs stockent les instructions les plus utilisées dans un Operation Cache avec sa/ses micro Ops correspondante(s). Ceci a pour but d’éviter de devoir les décoder à chaque fois. Ce cache est ici largement plus gros que celui de Bulldozer, ce qui a fait gagner en efficience au niveau du decodeur.

On se retrouve donc avec le décodeur qui peut sortir 6 micro-ops au maximum + certaines qui sortent directement du Opération Cache. Le dispatcher pourra lui affecter au back-end Integer 6 Micro-Ops par cycle et au back-end Floating Point 4 micro-Ops par cycle. Avec la séparation Interger/FP, AMD gagne ici en débit par rapport à Intel mais perd en adaptabilité.

Back End :

Au niveau du back-end et plus particulièrement des unités d’exécution, on retrouve côté Integer 4 ALU (Arithmetical & Logical Units) pour les calculs et 2 AGU (Adress Generating Units) pour les opérations de Load/Store, et de manipulation d’adresse. Chaque unité permet possède une file de 14 Micro-Ops et permet d’en exécuter une par seconde.

Parmi ces 4 ALU, cependant deux seulement sont capables d’effectuer des branchements (condition if et boucle while).

Du côté des unités FP, nous retrouvons 4 pipes d’exécution 128 bits (contre 3 sur un module Excavator, partagé sur deux coeurs). Un net gain. Parmi ces 4 pipes, deux sont dédiés aux opérations de multiplication et deux aux opérations d’addition. C’est légèrement moins bon donc que les 4 pipes 256 bits présents sur Skylake.

Au niveau des files d’entrées du Scheduler sur Zen, au final on en trouve 84 côté Integer (les fameux 14×6) + 96 côté FP, donc 160 au total. A titre de comparaison, chez Skylake c’est 97 pour Integer + FP.

Côté register file, c’est Skylake qui reste le meilleur. Côté Integer, Skylake a en effet 180 Register File pour 168 chez Ryzen. Et côté FP, Skylake gagne toujours avec 168 RF contre 160 chez Ryzen.

De la cache :

Au niveau de la mémoire cache, on retrouve :

  • Une L1 Instruction Cache de 64 Ko par coeur en 4 Way
  • Une L1 Data cache de 32 Ko par coeur en 8 Way
  • Une L2 de 512 Ko par coeur en 8 Way
  • Une L3 de 8 Mo par CCX (bloc de 4 coeurs) en 16 Way

D’après AMD, les caches L1 et L2 de Zen sont deux fois plus rapides que leurs homologues Bulldozer. La L3 serait carrément 5 fois plus rapide.

On peut noter ici une forte quantité de cache L2, deux fois plus élevée par coeur que sur Skylake par exemple (elle est en 256 Ko 4 Way). La cache L3 est de type victime, c’est à dire qu’elle se charge de stocker les données qui n’ont pas eu la place d’être stockées au niveau inférieur.

Cette topologie victime est moins efficace, mais AMD a compensé par une L2 bien plus grande.

Une histoire de CCX :

AMD a organisé ses coeurs Zen en blocs de 4. On appelle ce bloc « Core CompleX » ou plus simplement « CCX » :

Et le CPU Summit Ridge dont on parle aujourd’hui est composé de deux CCX sur le même die. Les deux communiquent par un bus nommé « Infinity Fabric ».

Gérer sa disposition de cette manière rend l’architecture Zen assez malléable, mais apporte une contrepartie. La latence intercoeur dépend clairement de la disposition géographique du coeur : accéder à un coeur (et ses données) appartenant au même CCX que soi sera bien plus rapide qu’accéder à un coeur appartenant à l’autre CCX. D’après nos mesures, il y a un rapport approximativement de 1 pour 3.

Et la rapidité de l’Infinity Fabric est liée à la fréquence de la RAM. Ainsi sur Ryzen, plus vous avez une RAM hautement cadencée, plus la latence inter-CCX sera faible. Ce fait augmente les performances en plus de « l’augmentation naturelle » de performances issue d’une RAM plus rapide. Les Ryzen aiment la RAM à haute vitesse, du moins sur le papier. Nous regarderons cela d’un peu plus près dans un prochain dossier consacré à ce sujet.

La gamme Ryzen 1000:

La gamme correspondant au die Summit Ridge est assez cohérente :

Tout ce petit monde est gravé en 14 nm. Les trois références Ryzen 7 disposent d’un CPU complet. Ce qui les distingue est la fréquence d’origine (ainsi que le TDP dans le cas du R7 1700, moins énergivore).

Les Ryzen 5 sont hexacore (1 coeur coupé par CCX) dans le cas des R5 1600 et 1600X. Ce qui les distingue encore une fois c’est leur fréquence et leur TDP. Les R5 1400 et 1500X sont des Quad Core (2 coeurs coupés par CCX). Ils ont le même TDP de 65 W mais ont une fréquence différente. A noter que les Ryzen 5 1500X 1600 et 1600X possèdent l’intégralité des 16 Mo de cache L3 malgré les coeurs désactivés. Le Ryzen 5 1400 se contente quant à lui de 8 Mo de L3.

Les Ryzen 3 sont des Ryzen 5 1400 à ceci près qu’ils perdent le SMT et ont des fréquences différentes.

AMD ne propose pas de CPU Summit Ridge équipés de moins de 4 coeurs. On peut les comprendre : proposer des Dual Core à bas prix qui coûtent autant à fabriquer que des 8 coeurs serait du gachis.

Vous en savez maintenant plus sur les coeurs Zen, le die Summit Ridge et la gamme Ryzen 1000 de manière générale. Alors, conquis par les Ryzen ?

Poster un Commentaire

  Subscribe  
plus récents plus anciens
Me notifier des
fildefer
fildefer

Yaura une version mise à jour pour les Ryzen 2000 ?