Leçon 29 : Bande passante et intensité arithmétique
Chaque kernel effectue deux types de travail : du calcul (opérations en virgule flottante, FLOPs) et du mouvement de données (octets vers et depuis la mémoire). Deux métriques simples nous permettent de comprendre ce qui compte. La première est la bande passante : combien d'octets la mémoire déplace
Imagine un camion qui livre des briques à un maçon : la bande passante, c'est combien de briques le camion livre par minute, et l'intensité, c'est combien de travail le maçon consacre à chaque brique. Quand l'intensité est faible, le maçon attend toujours le camion — la mémoire est le goulot d'étranglement. Quand l'intensité est élevée, le camion attend le maçon — le calcul est le goulot d'étranglement.
- bande passante (Go/s)
- Les octets que la mémoire déplace par seconde. Ça se calcule comme octets divisé par temps, converti en Go/s en divisant par 1e9.
- intensité arithmétique (FLOP/octet)
- Les FLOPs effectués divisés par les octets déplacés depuis la mémoire. Faible = limité par la mémoire ; élevée = limité par le calcul.
- limité par la mémoire (memory-bound)
- Un kernel à faible intensité dont le temps d'exécution est gouverné par la bande passante. Pour l'accélérer, tu réduis les octets, tu n'ajoutes pas de FLOPs.
- limité par le calcul (compute-bound)
- Un kernel à haute intensité dont le temps d'exécution est gouverné par les unités mathématiques, donc la mémoire n'est pas le goulot d'étranglement.