# Ampere (microarchitecture)

Ampere est une microarchitecture de processeur graphique développée par Nvidia pour ses cartes graphiques. Elle succède à la microarchitecture Turing et est sortie en mai 2020.

## Caractéristiques

Les améliorations architecturales de l'architecture Ampere comprennent :
* CUDA Compute Capability 8.0 pour le A100 et 8.6 pour les cartes GeForce 30 series ;
* Procédé 7 nm FinFET de TSMC pour le A100 ;
* Version customisée du procédé 8 nm (8N) de Samsung pour les GeForce 30 series ;
* Troisième génération de coeurs Tensor supportant le FP16, le bfloat16 (en), le TensorFloat-32 (TF32) et le FP64, ainsi que l'accélération du traitement des matrices creuses. Les coeurs Tensor ont, avec 256 opérations FMA FP16 par cycle, 4 fois la puissance de calcul (seulement sur le GA100, 2 fois sur les GA10x) des générations précédentes de coeurs Tensor ; le nombre de coeurs Tensor est de quatre par SM (Streaming Multiprocessor) ;
* Les puces GA10x abritent dans chaque SM, 4 blocs SIMD16 à double voie (FP32 et/ou INT32, 4 autres SIMD16 à voie unique (INT32), 4 blocs SIMD4 pour opérations spéciales (SFU, et 1 ALU unique FP64 partagé par les 4 clusters. Pour la GA100, l'agencement reste identique à la génération précédente (Volta/Turing).
* Deuxième génération de coeurs ray tracing ; ray tracing concurrent, ombrage et compute sur les cartes GeForce 30 ;
* Mémoire HBM2 sur les A100 40 GB & A100 80 GB ;
* Mémoire GDDR6X sur les cartes GeForce RTX 3090, RTX 3080 Ti, RTX 3080, RTX 3070 Ti ;
* NVLink 3.0 avec un débit de 50 Gbit/s par paire ;
* PCI Express 4.0 avec support de SR-IOV (en) (uniquement sur le A100)
* Virtualisation Multi-instance GPU (MIG) avec possibilité de partitionnement du GPU supportant jusqu'à sept instances sur le A100 ;
* Décodage vidéo hardware PureVideo (en) comprenant l'ensemble de caractéristiques K et le décodage hardware de AV1 pour les cartes GeForce 30 series et l'ensemble de caractéristiques J pour le A100 ;
* 5 décodeurs vidéo NVDEC (en) pour le A100 ;
* Nouveau décodeur JPEG hardware à 5 coeurs (NVJPG) avec YUV420, YUV422, YUV444, YUV400, RGBA. Il ne doit pas être confondu avec le NVJPEG de Nvidia (bibliothèque accélérée par GPU pour le codage/décodage JPEG).

### Puces

* GA100
* GA102
* GA103
* GA104
* GA106
* GA107
| Puce | GA100 | GA102 | GA103 | GA104 | GA106 | GA107 | GA10B | GA10F |
| Taille de puce (mm$^2$) | 826 | 628 | 496 | 392 | 276 | 200 | ? | ? |
| Nb. transistors (milliards) | 54.2 | 28.3 | 22 | 17.4 | 12 | 8.7 | ? | ? |
| Densité de transistors (MTr/mm$^2$) | 65,6 | 45,1 | 44,4 | 44,4 | 43,5 | 43,5 | ? | ? |
| Nb. Graphics processing clusters | 8 | 7 | 6 | 6 | 3 | 2 | 2 | 1 |
| Nb. Streaming multiprocessors | 128 | 84 | 60 | 48 | 30 | 20 | 16 | 12 |
| Nb. coeurs CUDA | 12288 | 10752 | 7680 | 6144 | 3480 | 2560 | 2048 | 1536 |
| Nb. TMU | 512 | 336 | 240 | 192 | 120 | 80 | 64 | 48 |
| Nb. ROP | 192 | 112 | 96 | 96 | 48 | 32 | 32 | 16 |
| Nb. coeurs tenseur | 512 | 336 | 240 | 192 | 120 | 80 | 64 | 48 |
| coeurs RT | N/A | 84 | 60 | 48 | 30 | 20 | 8 | 12 |
| Cache L1 | 24 Mo | 10.5 Mo | 7.5 Mo | 6 Mo | 3 Mo | 2.5 Mo | 3 Mo | 1.5 Mo |
| Cache L1 | 192 ko par SM | 128 ko par SM | 128 ko par SM | 128 ko par SM | 128 ko par SM | 128 ko par SM | 192 ko par SM | 128 ko par SM |
| Cache L2 (Mo) | 40 | 6 | 4 | 4 | 3 | 2 | 4 | ? |

### Comparaison des capacités de calcul : GP100 vs GV100 vs GA100

| GPU | NVIDIA Tesla P100 | NVIDIA Tesla V100 | NVIDIA A100 |
| Code du GPU | GP100 | GV100 | GA100 |
| Architecture GPU | NVIDIA Pascal | NVIDIA Volta | NVIDIA Ampere |
| Compute capability | 6.0 | 7.0 | 8.0 |
| Threads / warp | 32 | 32 | 32 |
| Max warps / SM | 64 | 64 | 64 |
| Max threads / SM | 2048 | 2048 | 2048 |
| Max thread blocks / SM | 32 | 32 | 32 |
| Max 32-bit registers / SM | 65536 | 65536 | 65536 |
| Max registers / block | 65536 | 65536 | 65536 |
| Max registers / thread | 255 | 255 | 255 |
| Max thread block size | 1024 | 1024 | 1024 |
| FP32 cores / SM | 64 | 64 | 64 |
| Ratio of SM registers to FP32 cores | 1024 | 1024 | 1024 |
| Taille de la mémoire partagée / SM | 64 KB | Configurable jusqu'à 96 KB | Configurable jusqu'à 164 KB |

### Tableau de comparaison des formats numériques supportés$^,$

| | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs CUDA | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor | Formats supportés par les coeurs Tensor |
| | FP16 | FP32 | FP64 | INT1 | INT4 | INT8 | TF32 | BF16 | FP16 | FP32 | FP64 | INT1 | INT4 | INT8 | TF32 | BF16 |
| NVIDIA Tesla P4 | Non | Oui | Oui | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non |
| NVIDIA P100 | Oui | Oui | Oui | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non | Non |
| NVIDIA Volta | Oui | Oui | Oui | Non | Non | Oui | Non | Non | Oui | Non | Non | Non | Non | Non | Non | Non |
| NVIDIA Turing | Oui | Oui | Oui | Non | Non | Non | Non | Non | Oui | Non | Non | Oui | Oui | Oui | Non | Non |
| NVIDIA A100 | Oui | Oui | Oui | Non | Non | Oui | Non | Oui | Oui | Non | Oui | Oui | Oui | Oui | Oui | Oui |
Légende :
* FPnn : virgule flottante avec nn bits
* INTn : entier avec n bits
* INT1 : binaire
* TF32 : TensorFloat32
* BF16 : bfloat16

### Comparaison des performances en décodage vidéo

| Flux concurrents | Décodage H.264 (1080p30) | Décodage H.265 (HEVC) (1080p30) | Décodage VP9 (1080p30) |
| V100 | 16 | 22 | 22 |
| A100 | 75 | 157 | 108 |