Lección 23: Operaciones atómicas: atomicAdd e histogramas
Cuando miles de hilos intentan actualizar la misma celda de memoria a la vez, surge una condición de carrera. Toma un histograma: cada hilo lee un valor y quiere incrementar el contador bins[v] en uno. La operación bins[v]++ parece atómica, pero en realidad son tres pasos separados: leer el valor ac
Imagina un frasco de conteo compartido. Sin atomic, dos personas ven el número 5, ambas suman 1 en su cabeza, y ambas escriben 6 — pero debería haber llegado a 7, así que un conteo se perdió. atomic es como dejar que solo una persona a la vez sostenga el frasco, sume, y lo devuelva — nadie pisa a nadie.
- condición de carrera (race condition)
- Cuando dos operaciones paralelas acceden a la misma memoria y al menos una escribe, de modo que el resultado depende del orden arbitrario en que se ejecutan.
- operación atómica (atomic)
- Un read-modify-write que el hardware realiza como una unidad indivisible — ningún otro hilo se cuela en el medio. Por ejemplo atomicAdd.
- lectura-modificación-escritura (read-modify-write)
- Los tres pasos de ++: leer el valor, modificar, escribir de vuelta. En paralelo, sin protección, estos pasos se entrelazan entre hilos.
- histograma
- Contar cuántas veces aparece cada valor. Cada hilo incrementa bins[v]; muchos hilos sobre el mismo bin requieren atomicAdd.