# Hopper (microarchitecture)

Hopper est une microarchitecture de processeur graphique (GPU) développée par Nvidia. Elle est conçue pour les serveurs des centres de données et est sortie parallèlement à la microarchitecture Ada Lovelace.
Nommée d'après l'informaticienne et contre-amiral de l'United States Navy Grace Hopper, l'architecture Hopper a fuité en novembre 2019 et a été officiellement révélée en mars 2022. Elle améliore les performances de ses prédécesseurs, les microarchitectures Turing et Ampere, possédant un nouveau multiprocesseur de flux et un sous-système mémoire plus rapide.

## Architecture

Le GPU Hopper H100 est fabriqué avec le procédé TSMC 4N et comporte 80 milliards de transistors. Il possède jusqu'à 144 multiprocesseurs de flux. Dans un socket SXM5 (en), le Hopper H100 offre de meilleures performances que le PCIe.

### Multiprocesseurs de flux

Les multiprocesseurs de flux (SM) d'Hopper améliorent ceux des microarchitectures Turing et Ampere, bien que nombre maximal de warps concurrents par SM reste identique entre les architectures Ampere et Hopper, 64. L'architecture Hopper fournit un Tensor Memory Accelerator (TMA), qui supporte le transfert mémoire asynchrone bidirectionnel entre la mémoire partagée et la mémoire globale. Avec le TMA, les applications peuvent transférer jusqu'à des tenseurs 5D. Lors d'écritures entre la mémoire partagée et la mémoire globale, les opérateurs de réduction par élément et par bit peuvent être utilisés, évitant les instructions sur registres et SM, tout en permettant aux utilisateurs d'écrire des codes spécialisés dans les warps. Le TMA est activé par cuda::memcpy_async.
Lorsqu'ils parallélisent des applications, les développeurs peuvent utiliser des clusters (groupes) de blocs de threads (en). Les blocs de threads peuvent effectuer des instructions « atomiques » dans la mémoire partagée d'autres blocs de threads au sein de son groupe, appelée également mémoire partagée distribuée (en). La mémoire partagée distribuée peut être utilisée par un SM simultanément avec le cache L2 ; lorsqu'elle est utilisée pour transmettre des données entre les SM, elle peut utiliser la bande passante combinée de la mémoire partagée distribuée et du cache L2. Le nombre maximal des groupes « portables » dans un cluster est de 8, bien que le Hopper H100 puisse supporter une nombre maximal de groupes de 16 en utilisant la fonction cudaFuncAttributeNonPortableClusterSizeAllowed, potentiellement au prix d'une réduction du nombre de blocs actifs. Avec le L2 multicasting et la mémoire partagée distribuée, la bande passante requise pour les lectures et écritures en mémoire vive dynamique est réduite.
Hopper améliore le throughput en format flottant simple précision (FP32), avec deux fois plus d'opérations FP32 par cycle et par SM que son prédécesseur. De plus, l'architecture Hopper possède de nouvelles instructions, dont l'algorithme de Smith-Waterman. Comme sur Ampere, l'arithmétique TensorFloat-32 (TF-32) est supportée. La grille de formats supportés par les deux architectures est identique.

### Mémoire

Le Hopper H100 supporte les mémoires HBM3 et HBM2 jusqu'à 80 GB ; le système de mémoire HBM3 supporte 3 TB/s, en augmentation par rapport à Ampere A100. Au sein de l'architecture, la capacité du cache L2 et la bande passante ont été augmentées.
Hopper permet aux noyaux de calcul (en) des CUDA d'utiliser la compression en ligne, y compris en allocation mémoire individuelle, bien que cette fonctionnalité ne réduise pas l'empreinte mémoire. Le compresseur choisira automatiquement entre plusieurs algorithmes de compression.
Un exemple complet d'allocation de mémoire compressible peut être trouvé à the CUDA samples Github's cudaCompressibleMemory example.
Le Hopper H100 accroît la capacité du cache combiné L1, du cache de texture et de la mémoire partagée à 256 kB. Comme ses prédécesseurs, il combine les caches L1 et de texture dans un cache unifié conçu comme un « buffer coalescent ». L'attribut cudaFuncAttributePreferredSharedMemoryCarveout peut être utilisé pour définir le découpage du cache L1. Hopper introduit des améliorations à NVLink par le biais d'une nouvelle génération ayant une largeur de bande de transmission globalement plus rapide.

#### Domaines de synchronisation mémoire

Les applications CUDA peuvent rencontrer des interférences lorsqu'elles réalisent des opérations fence/flush à cause de l'ordonnancement de la mémoire (en). Parce que le GPU ne peut pas savoir lors de l'exécution quelles écritures sont garanties et quelles sont celles qui sont visibles seulement par le hasard du timing, il peut attendre pour des opérations mémoire inutiles, ralentissant donc fortement les opérations fence/flush. Par exemple, lorsqu'un noyau réalise des calculs dans la mémoire GPU tandis qu'un noyau parallèle effectue des communications avec un pair, le noyau local nettoiera (flush) ses écritures, se traduisant par des écritures NVLink ou PCIe plus lentes du noyau de communication. Avec l'architecture Hopper, grâce à la mise en oeuvre des domaines de synchronisation mémoire, le GPU peut réduire le le délai inutile par une opération de fence.

### Instructions DPX

L'interface de programmation (API) mathématique de l'architecture Hopper propose des fonctions dans les SM telles que __viaddmin_s16x2_relu, qui exécute la fonction sur demi-mot $max(min(a+b,c),0)$. Dans l'algorithme de Smith-Waterman, la fonction __vimax3_s16x2_relu peut être utilisée, un max sur trois valeurs suivi d'un max avec zéro. De même, Hopper accélère l'implémentation de l'algorithme de Needleman-Wunsch.

### Moteur de transformeur

L'architecture Hopper utilise un moteur de transformeur.

### Efficacité énergétique

Le socket SXM5 du H100 a un thermal design power (TDP) de 700 watts. En regard à son asynchronisme, l'architecture Hopper pourrait atteindre un fort taux d'utilisation et donc avoir une meilleure performance par watt.

## Historique

En novembre 2019, un célèbre compte Twitter a posté un tweet révélant que l'architecture succédant à Ampere serait appelée Hopper, nommée d'après l'informaticienne et contre-amiral United States Navy Grace Hopper, une des premières programmeuses du Harvard Mark I. Le compte précisait que Hopper serait basée sur une conception à module multi-puces, qui conduirait à un meilleur rendement de production et à des rebuts plus faibles.
Lors du Nvidia GTC (en) 2022, Nvidia a officiellement annoncé Hopper.