Lección 22: Condiciones de carrera en memoria global — Por qué se necesitan los atomics
Hasta ahora, casi todos los kernels que escribiste le daban a cada hilo su PROPIA celda de salida: c[i] = a[i] + b[i], donde el hilo i es el único que jamás toca c[i]. Como ningún par de hilos comparte un destino, el orden en que corren no importa — el resultado siempre es correcto. Pero algunos pro
Imagina a 30 niños compartiendo una sola hoja de conteo que dice 5. Dos la miran juntos, ambos ven 5, ambos escriben 6 — y un conteo desapareció. Una operación atómica es una regla en la que solo un niño sostiene el lápiz a la vez (leer, sumar, escribir), así ningún conteo se pierde.
- condición de carrera (race condition)
- Un bug en el que el resultado depende del tiempo y el orden impredecibles en que los hilos tocan los mismos datos — puede funcionar en una corrida y fallar en la siguiente.
- lectura-modificación-escritura (read-modify-write)
- x++ en realidad son tres pasos — leer x, sumar 1, y escribir x. Otro hilo puede colarse entre esos pasos.
- actualización perdida (lost update)
- Dos hilos leen el mismo valor viejo y ambos escriben de vuelta, así que uno de los incrementos simplemente desaparece y el conteo sale demasiado bajo.
- operación atómica (atomic operation)
- Un read-modify-write indivisible que ningún otro hilo puede interrumpir — la solución para una carrera, por ejemplo atomicAdd.