Après bien des périples, AMD fait son retour sur le marché des cartes graphiques professionnelles consacrées au calcul. Comme NVIDIA, le constructeur a désormais fait le choix d'une architecture dédiée : CDNA. La Instinct MI100 (ne dites plus Radeon) en est la première représentante.
Suite au départ de Raja Koduri chez Intel, le Radeon Technology Group (RTG) a été un brin désorganisé. Et cela s'est ressenti dans les gammes de produits. Après plusieurs années à stagner sur des architectures dérivées de GCN, Vega n'a pas su convaincre et s'est focalisée sur l'offre haut de gamme. C'est seulement l'année dernière avec RDNA, puis depuis la rentrée avec RDNA2 qu'AMD est enfin capable de revenir en force sur le terrain du GPU.
Après RDNA pour les joueurs, CDNA pour les serveurs
Mais cela s'est fait au prix d'un choix radical : la conception de produits qui visent avant tout les joueurs. De l'aveu même de la société dès les débuts de la gamme Radeon RX 5000 (Navi), elles n'ont pas été pensées pour le calcul. Les utiliser pour du calcul via OpenCL n'a jamais vraiment été une partie de plaisir (avec des bugs à la clé).
Ainsi, seuls des modèles Radeon Pro visant le rendu 3D ont été mis sur le marché. Les Radeon Insctinct destinées aux serveurs et au calcul haute performance exploitaient encore des puces de génération Vega. L'objectif était à terme de faire comme NVIDIA : produire des puces conçues pour ce marché, avec des unités dédiées.

C'est ainsi que CDNA est née. Elle est aujourd'hui officialisée avec un premier modèle : la MI100. S'opposant à l'A100 de NVIDIA (Ampere), elle fait comme les Radeon sur le marché des GeForce en misant tout sur la puissance de calcul brute. Avec une subtilité néanmoins : si elle n'a aucune unité dédiée au ray tracing, elle en a pour le calcul matriciel.
Plus de 11 TFLOPS en FP64
AMD nous a présenté CDNA la semaine dernière, avec un (court) white paper arrivé pendant le week-end pour éclaircir quelques points. Structurellement, elle ne se base pas sur RDNA ou Vega, mais sur... GCN. Elle en reprend l'organisation globale avec 120 Compute Units (CU) avec 64 unités de calcul chacune, soit 7 680 ( jusqu'à 1,5 GHz).
Leur composition est décrite de la sorte par AMD :
Le but recherché est atteint : la MI100 offre une puissance de calcul brute supérieure à l'A100 de NVIDIA avec 23,1 TFLOPS (FP32) et 11,5 TFLOPS (FP64) contre 19,5 et 9,7 TFLOPS pour sa concurrente. Le tout avec une puissance consommée de 300 watts « seulement ». Elle se destine aux serveurs, Dell, HPE, Gigabyte et Supermicro l'intègreront.
Les 120 CU sont organisées en quatre Compute Engines, chacune étant contrôlée par un ACE (Asynchronous Compute Engines). Comme l'A100 de NVIDIA et le V100 avant lui, aucune unité n'est consacrée au rendu 3D ou à l'affichage. Un moteur de décompression vidéo matériel reste néanmoins en place, gérant HEVC, H.264 et VP9. Il est nécessaire pour ne pas être pénalisé lorsque des données vidéos sont à traiter au sein du GPU.
La puce est gravée en 7 nm. Elle dispose d'un cache L2 partagé de 8 Mo (16-way, set-associative) organisés en 32 portions de 256 ko. Son débit est annoncé à 6 To/s. Côté mémoire, comptez 32 Go de HBM2 (1,2 GHz, 4096 bits) avec ECC pour un débit maximal théorique de 1,23 To/s. Sous les 2 To/s de l'A100 de NVIDIA.
La carte gère le PCIe 4.0, exploitant un format classique (deux emplacements, passive). Un pont de communication peut interconnecter les GPU, comme sur la génération précédente. Il s'agit toujours d'un lien Inifinity Fabric, pouvant gérer jusqu'à 4 GPU annoncé à 23 GT/s (16 bits) pour une bande passante de 276 Go/s (via trois liens à 96 Go/s).
Enfin du calcul matriciel chez AMD
On note une autre nouveauté : la présence d'unités de calcul matriciel ou Matrix Fused MultiplyAdd (MFMA) dans le langage AMD. Elles peuvent effectuer des calculs en précision mixte sur différents formats de données en entrée : INT4/8, FM16/32 et bfloat16. Leur résultat est, selon les cas, un entier ou un flottant sur 32 bits.
Elles sont exploitables à travers ROCm qui passera sous peu en version 4.0 ou des frameworks mis à jour pour l'occasion comme TensorFlow ou PyTorch. Dans ses documents techniques, AMD évoquait uniquement les performances FP16/32 et bfloat16 en matriciel :

Suffisant pour montrer l'intérêt de ces unités dans de nombreux cas, tant elles sont rapides. Cela permet également au constructeur de se mettre en avant face à l'A100 de NVIDIA avec des chiffres qui l'arrangent.
MI100 face à l'A100 : gare aux détails
Comme par exemple dans le graphique ci-dessous où Matrix FP32 et FP32 sont opposés, à l'avantage d'AMD. Pourtant NVIDIA propose lui aussi des unités de calcul matriciel (Tensor Cores) qui ne sont pas utilisées ici.
Pourquoi ? Tout simplement parce qu'il ne gèrent pas le FP32 en entrée, ces unités étant en général utilisées pour des calculs en précision mixte, avec des formats de données moins précis. Mais si l'on compare sur le FP16 par exemple, l'A100 de NVIDIA atteint 312 TFLOPS sur ses Tensor Cores, contre 184,6 TFLOPS chez AMD. Cela peut même atteindre 624 TFLOPS avec l'optimisation des matrices creuses, que ne propose pas AMD.
Pour INT4/8, AMD ne nous a pas fourni de chiffres en amont de son annonce mais en a publié depuis sur son site. On peut ainsi constater que les performances sont de 184,6 TOPS contre 624 et 1 248 TOPS chez NVIDIA. Là aussi, hors des optimisations des matrices creuses qui permettent de doubler ces chiffres.
Ceux ayant besoin d'effectuer des calculs FP32/64 en masse devraient donc apprécier la MI100. Pour d'autres usages, si AMD rattrape peu à peu son retard sur NVIDIA, il semble qu'il y ait encore du chemin à parcourir. Cela tombe bien, CDNA2 est d'ores et déjà en préparation et devrait être dévoilée d'ici quelques mois.
Interrogée, AMD n'a pour le moment pas pu nous confirmer le prix de son Instinct MI100.