Tableau du matériel¶
Les caractéristiques comparées des GPU cités dans ce document, plus les chiffres dérivés qui servent partout.
1 · NVIDIA, centre de données¶
| A100 SXM | H100 SXM | H200 | B200 | |
|---|---|---|---|---|
| Architecture | Ampere | Hopper | Hopper | Blackwell |
| Cible | sm_80 |
sm_90a |
sm_90a |
sm_100a |
| Année | 2020 | 2022 | 2024 | 2024-2025 |
| Dies | 1 | 1 | 1 | 2 |
| SM | 108 | 132 | 132 | 148 |
| Mém. partagée + L1 / SM | 192 Ko | 228 Ko | 228 Ko | 228 Ko |
| Adressable / bloc | 163 Ko | 227 Ko | 227 Ko | 227 Ko |
| Tensor Memory / SM | — | — | — | 256 Ko |
| Registres / SM | 256 Ko | 256 Ko | 256 Ko | 256 Ko |
| L2 | 40 Mo | 50 Mo | 50 Mo | 126 Mo |
| Partitions L2 | 2 | 2 | 2 | 4 |
| Mémoire | 80 Go HBM2e | 80 Go HBM3 | 141 Go HBM3e | 192 Go HBM3e |
| Bande passante | 2,0 To/s | 3,35 To/s | 4,8 To/s | 8,0 To/s |
| FP64 (tensor) | 19,5 TFLOPS | 67 TFLOPS | 67 TFLOPS | ~44,8 TFLOPS |
| FP32 vectoriel | 19,5 TFLOPS | 67 TFLOPS | 67 TFLOPS | ~80 TFLOPS |
| TF32 tensor | 156 TFLOPS | 495 TFLOPS | 495 TFLOPS | ~481 TFLOPS |
| BF16/FP16 tensor | 312 TFLOPS | 990 TFLOPS | 990 TFLOPS | ~1 929 TFLOPS |
| FP8 tensor | — | 1 979 TFLOPS | 1 979 TFLOPS | ~3 851 TFLOPS |
| FP4 tensor | — | — | — | ~7 702 TFLOPS |
| NVLink (bidir.) | 600 Go/s | 900 Go/s | 900 Go/s | ~1 800 Go/s |
| TMA | non | oui | oui | oui |
| Clusters / DSMEM | non | oui | oui | oui |
| Instruction MMA | mma |
wgmma |
wgmma |
tcgen05 |
Sur les chiffres Blackwell
Les valeurs FP64/FP32/BF16/FP8/FP4 de la colonne B200 sont les débits mesurés rapportés par arXiv:2512.02189 sur une tuile m64n8k16, et non les chiffres marketing. Les valeurs annoncées par NVIDIA (9 PFLOPS FP4 dense, 18 avec sparsité) portent sur des configurations différentes.
Le nombre de 148 SM correspond à la configuration utilisée par Mirage MPK (144 workers + 16 schedulers = 160 ; la répartition exacte dépend de la carte).
2 · NVIDIA, grand public et station de travail¶
| RTX 4090 | RTX 5090 | L4 | L40S | RTX PRO 6000 | |
|---|---|---|---|---|---|
| Architecture | Ada | Blackwell | Ada | Ada | Blackwell |
| Mémoire | 24 Go GDDR6X | 32 Go GDDR7 | 24 Go | 48 Go | 96 Go |
| Bande passante | ~1,0 To/s | ~1,8 To/s | 300 Go/s | 864 Go/s | ~1,8 To/s |
| Mém. partagée / SM | 100 Ko | ~100 Ko | 100 Ko | 100 Ko | ~228 Ko |
| FP64 | 1,3 TFLOPS | ~1,6 TFLOPS | faible | faible | variable |
| Rapport FP64/FP32 | 1/64 | 1/64 | 1/64 | 1/64 | variable |
| TMA / clusters | non | partiel | non | non | partiel |
| NVLink | non | non | non | non | variable |
Le piège du FP64
Une RTX 5090 est plus rapide qu'un A100 en BF16 et ~25 fois plus lente qu'un H100 en FP64. Le bridage 1/64 est délibéré.
Vérifiez toujours le débit FP64 avant de dimensionner un projet de calcul scientifique.
3 · AMD¶
| MI250X | MI300X | MI355X | |
|---|---|---|---|
| Architecture | CDNA 2 | CDNA 3 | CDNA 4 |
| Cible | gfx90a |
gfx942 |
gfx950 |
| Dies (XCD) | 2 | 8 | 8 |
| CU | 220 | 304 | 256 |
| LDS / CU | 64 Ko | 64 Ko | 160 Ko |
| Mémoire | 128 Go HBM2e | 192 Go HBM3 | 288 Go HBM3E |
| Bande passante | 3,2 To/s | 5,3 To/s | 8,0 To/s |
| FP64 | 47,9 TFLOPS | 81,7 TFLOPS | élevé |
| BF16 | 383 TFLOPS | 1 307 TFLOPS | ~2× MI300X |
| FP8 | — | 2 615 TFLOPS | ~2× MI300X |
| MXFP8/6/4 natifs | non | non | oui |
| Wavefront | 64 | 64 | 64 |
| Instruction MMA | MFMA | MFMA | MFMA + block scaling |
Les deux arguments d'AMD
Capacité : 288 Go sur MI355X contre 192 sur B200.
FP64 : 81,7 TFLOPS sur MI300X contre ~34-44 sur H100/B200, soit un rapport de 2 à 2,4×. C'est ce qui explique le choix d'AMD pour Frontier et El Capitan.
4 · Les chiffres dérivés¶
Intensité critique \(I_{\text{crit}} = P/B\)¶
C'est le seuil au-delà duquel un noyau est limité par le calcul.
| Machine | Précision | \(P\) | \(B\) | \(I_{\text{crit}}\) |
|---|---|---|---|---|
| A100 | FP32 | 19,5 T | 2,0 T | ~10 |
| A100 | BF16 tensor | 312 T | 2,0 T | ~156 |
| H100 | FP32 | 67 T | 3,35 T | ~20 |
| H100 | BF16 tensor | 990 T | 3,35 T | ~296 |
| H100 | FP8 tensor | 1 979 T | 3,35 T | ~591 |
| B200 | BF16 tensor | 1 929 T | 8,0 T | ~241 |
| B200 | FP4 tensor | 7 702 T | 8,0 T | ~963 |
| MI300X | BF16 | 1 307 T | 5,3 T | ~247 |
Interprétation : il faut effectuer \(I_{\text{crit}}\) opérations par octet lu pour saturer les unités de calcul. En dessous, on est limité par la mémoire.
Pour référence : une addition élémentaire a \(I = 1/12\), une GEMM bien pavée \(I \approx 1\,365\), et le décodage LLM à lot 1 \(I \approx 1\).
Temps minimal par jeton en décodage¶
\(t_{\min} = \text{octets des poids} / B\), pour un lot de 1.
| Modèle | BF16 | FP8 | FP4 |
|---|---|---|---|
| 1 B sur H100 | 0,60 ms | 0,30 ms | 0,15 ms |
| 8 B sur H100 | 4,78 ms | 2,39 ms | 1,19 ms |
| 8 B sur B200 | 2,00 ms | 1,00 ms | 0,50 ms |
| 70 B sur 2×H100 | 20,9 ms | 10,4 ms | 5,2 ms |
| 405 B sur 8×H100 | 30,2 ms | 15,1 ms | 7,6 ms |
Ces valeurs ignorent le cache KV, qui s'y ajoute. Ce sont des bornes supérieures physiques.
Taille du cache KV¶
Pour un modèle de 8 milliards de paramètres (\(L = 32\), \(d_{kv} = 1024\), GQA à 8 groupes), en BF16, par séquence :
| Contexte | Cache | Comparé aux poids (16 Go) |
|---|---|---|
| 4 096 | 0,54 Go | 3 % |
| 32 768 | 4,3 Go | 27 % |
| 131 072 | 17,2 Go | 107 % |
| 1 048 576 | 137 Go | 858 % |
Au-delà de ~128 k jetons, le cache dépasse les poids.
5 · Les latences et bandes passantes internes¶
Ordres de grandeur pour Hopper. Les valeurs exactes varient selon la carte et la source ; celles marquées d'une astérisque proviennent des papiers de microbenchmarking cités.
| Niveau | Latence | Bande passante (agrégée) |
|---|---|---|
| Registre | ~1 cycle | ~100 To/s |
| Mémoire partagée | ~25-30 cycles | ~30 To/s |
| L1 | ~30 cycles | — |
| DSMEM (SM voisin) | ~50-70 cycles | élevée |
| L2 | ~200 cycles | ~7 To/s |
| HBM | ~400-800 cycles | 3,35 To/s |
| NVLink | ~2-3 µs | 900 Go/s |
| PCIe 5.0 ×16 | ~2-10 µs | 64 Go/s |
| InfiniBand NDR | ~2-5 µs | 50 Go/s |
| Mémoire hôte (paginable) | ~10 µs | 6 Go/s |
Blackwell : TMEM et tensor cores*¶
| Grandeur | Valeur |
|---|---|
| TMEM par SM | 256 Ko (512 colonnes × 128 lignes × 32 bits) |
| Lecture TMEM | 16 To/s par SM |
| Écriture TMEM | 8 To/s par SM |
| Accès TMEM avec défaut de cache | 420 cycles (contre ~1 000 sur Hopper) |
Débit global via ld.global |
3,8 To/s |
Latences des instructions MMA*¶
| Instruction | Tuile | Cycles |
|---|---|---|
wgmma (Hopper) |
m64n64k16 | 32,0 |
wgmma (Hopper) |
m64n128k16 | 64,0 |
wgmma (Hopper) |
m64n256k16 | 128,0 |
tcgen05.mma (Blackwell) |
m64n64k16 | 11,0 |
tcgen05.mma (Blackwell) |
m128n128k16 | 11,3 |
tcgen05.mma (Blackwell) |
m256n256k16 | 11,4 |
* Source : arXiv:2512.02189 et arXiv:2501.12084.
6 · Les coûts de lancement et de synchronisation¶
| Opération | Coût |
|---|---|
| Lancement de noyau, standard | 5 – 10 µs |
| Lancement dans un CUDA Graph | ~1,3 µs |
| Lancement HIP sur MI300X | ~4,5 µs |
__syncthreads() |
~10-50 cycles |
Barrière asynchrone (mbarrier) |
~60 ns |
cluster.sync() |
~100 cycles |
grid.sync() (cooperative groups) |
µs |
| Barrière de grille naïve sur MI300X | 7,59 – 7,88 µs |
| Sentinelle NaN sur MI300X | 0,80 – 0,93 µs |
Sources : Hazy Research, Kog. Voir Megakernels 1.
7 · Les formats numériques¶
| Format | Bits | S/E/M | Étendue max | Précision relative |
|---|---|---|---|---|
| FP64 | 64 | 1/11/52 | 1,8 × 10³⁰⁸ | 2,2 × 10⁻¹⁶ |
| FP32 | 32 | 1/8/23 | 3,4 × 10³⁸ | 1,2 × 10⁻⁷ |
| TF32 | 19 | 1/8/10 | 3,4 × 10³⁸ | 4,9 × 10⁻⁴ |
| BF16 | 16 | 1/8/7 | 3,4 × 10³⁸ | 3,9 × 10⁻³ |
| FP16 | 16 | 1/5/10 | 65 504 | 4,9 × 10⁻⁴ |
| FP8 E4M3 | 8 | 1/4/3 | 448 | 6,3 × 10⁻² |
| FP8 E5M2 | 8 | 1/5/2 | 57 344 | 1,3 × 10⁻¹ |
| FP6 E3M2 | 6 | 1/3/2 | ~28 | — |
| FP4 E2M1 | 4 | 1/2/1 | 6 | 0,5 |
Tolérances de test recommandées : FP32 → rtol=1e-5 ; TF32 → 1e-3 ;
BF16/FP16 → 1e-2 ; FP8 → 5e-2.
8 · Comment utiliser ce tableau¶
Les trois calculs à faire avec ces chiffres
1. Le régime d'un noyau. \(I = W/Q\) contre \(I_{\text{crit}}\) de la ligne 4. Cela vous dit s'il faut optimiser le calcul ou la mémoire.
2. Le plancher de temps. \(t_{\min} = Q/B\) si limité par la mémoire, \(W/P\) si limité par le calcul. Comparé au temps mesuré, cela donne votre marge de progression.
3. La faisabilité mémoire. Poids + cache KV + activations contre la capacité de la carte. Le tableau du §4 donne les ordres de grandeur.
Ces trois calculs prennent dix minutes et décident de tout ce qui suit.
Sources de ce tableau¶
- CUDA C++ Programming Guide — Compute Capabilities
- Hopper Tuning Guide et Blackwell Tuning Guide
- Microbenchmarking NVIDIA's Blackwell Architecture, arXiv:2512.02189
- Dissecting the NVIDIA Hopper Architecture, arXiv:2501.12084
- Mirage Persistent Kernel, arXiv:2512.22219 — configurations SM.
- Matrix Core Programming on AMD CDNA3 and CDNA4 et ROCm compatibility matrix
- Hazy Research et Kog — coûts de lancement et de synchronisation.
Retour : Annexes · Index du cours