Leçon 23 : Opérations atomiques : atomicAdd et histogrammes
Quand des milliers de threads essaient de mettre à jour la même case mémoire en même temps, une condition de course apparaît. Prends un histogramme : chaque thread lit une valeur et veut incrémenter le compteur bins[v] de un. L'opération bins[v]++ semble atomique, mais en réalité ce sont trois étape
Imagine un bocal de comptage partagé. Sans atomic, deux personnes voient le nombre 5, les deux ajoutent 1 dans leur tête, et les deux écrivent 6 — mais ça aurait dû arriver à 7, donc un comptage s'est perdu. atomic, c'est comme laisser une seule personne à la fois tenir le bocal, ajouter, et le rendre — personne ne marche sur les pieds de l'autre.
- condition de course (race condition)
- Quand deux opérations parallèles accèdent à la même mémoire et qu'au moins une écrit, de sorte que le résultat dépend de l'ordre arbitraire d'exécution.
- opération atomique (atomic)
- Un read-modify-write que le matériel effectue comme une unité indivisible — aucun autre thread ne s'y insère. Par exemple atomicAdd.
- lecture-modification-écriture (read-modify-write)
- Les trois étapes de ++ : lire la valeur, modifier, écrire en retour. En parallèle, sans protection, ces étapes s'entrelacent entre threads.
- histogramme
- Compter combien de fois chaque valeur apparaît. Chaque thread incrémente bins[v] ; de nombreux threads sur le même bin nécessitent atomicAdd.