Schémas interactifs accompagnant la conversation entre Reiner Pope (CEO MatX) et Dwarkesh Patel. Du gate logique jusqu'à l'organisation des SMs et MXUs, en passant par les multiplieurs de Dadda, les systolic arrays et le pipeline registers.
Les deux briques primitives à partir desquelles tout est construit.
Toute l'arithmétique d'une puce IA est faite de deux portes logiques : AND (la plus petite) et full adder (la plus grande couramment utilisée). Le full adder additionne trois bits de la même colonne et produit deux bits — somme et retenue. On l'appelle aussi 3→2 compressor.
| x | y | cin | cout | sum |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
16 produits partiels générés par 16 AND gates.
L'objectif : calculer A × B + C avec A, B sur 4 bits et C sur 8 bits — c'est exactement le
multiply-accumulate qui apparaît à chaque itération d'un produit matriciel.
Chaque produit partiel Ai · Bj est une simple AND.
Standard "area-efficient" : exactement p×q full adders.
Au lieu de retenir mentalement les retenues comme un humain, le multiplieur de Dadda écrit chaque retenue. À chaque pas, un triplet de bits dans une colonne est remplacé par une somme (même colonne) et une retenue (colonne suivante à gauche). On élimine un bit par full adder.
p·q full adders exactement. Combiné aux p·q ANDs des produits partiels, ce scaling quadratique en bit-width est la raison fondamentale pour laquelle FP4 explose en performance.
Pourquoi NVIDIA devrait annoncer 4× et pas 3× pour FP4.
Faites varier la précision et observez l'aire occupée par le multiplieur. Une cellule = un gate (AND ou full adder). Diviser la précision par 2 divise l'aire par 4, pas par 2.
Avant les Tensor Cores : 7/8 du silicium servait juste à déplacer des bits.
Un CUDA core classique lit 3 registres, fait un MAC, écrit le résultat. La sélection « registre n° i » est réalisée par un multiplexeur (mux). Choisissez le registre source ci-dessous — le chemin doré illustre la masse de portes logiques utilisées juste pour acheminer la donnée.
p × q pour le calcul.
Avec n=8, ça représente ~87% du silicium gaspillé en routage. C'est ce problème que les Tensor Cores et systolic arrays résolvent.
Quadratique en compute, linéaire en communication.
Les poids restent fixés dans les cellules. Le vecteur entre par le haut et descend cycle par cycle. Les sommes partielles s'accumulent verticalement. Pour une matrice n×n, n² MACs s'exécutent en parallèle, mais seulement n entrées traversent la frontière du tableau.
Doubler la fréquence en coupant le nuage de logique en deux.
Un registre = une bascule qui capture l'état présent sur son fil à chaque coup d'horloge. Entre deux registres, un nuage de portes calcule. Le délai à travers ce nuage fixe la fréquence maximale. Insérer un registre au milieu coupe le délai en deux → 2× fréquence.
Limite : dans une boucle de feedback (accumulateur), insérer un registre change la sémantique du calcul (on obtient deux sommes entrelacées sur bits pairs/impairs). C'est ce qui fixe la fréquence d'horloge réelle des chips.
16 entrées de table de vérité = n'importe quelle fonction 4→1.
Un LUT à 4 entrées est un mux 16:1 où les 16 valeurs sont stockées en SRAM de configuration. Modifiez la table de vérité pour reproduire un AND, un XOR, un majoritaire, etc.
Hardware decides vs software decides.
Un GPU = un grand nombre de petits TPUs.
Chaque bit qui flip = un condensateur qui se charge puis se vide.
L'énergie totale d'une puce est dominée par les transitions. Ralentir l'horloge 1000× baisse la consommation 1000×, mais l'énergie par opération reste identique — pas un gain d'efficacité.