Condiciones de carrera en la GPU
Por qué las escrituras simultáneas corrompen los datos.
Condiciones de carrera en la GPU es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CUDA Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CUDA Academy incluye 4 lecciones en total.
Muchas manos, un contador
En la GPU, miles de hilos pueden acceder a la misma memoria al mismo tiempo. Cuando varios escriben juntos en una misma posición, se produce una condición de carrera. 🏁
Qué es realmente una carrera
Una condición de carrera ocurre cuando el resultado final depende del orden impredecible en que se ejecutan los hilos. El mismo código puede producir un resultado distinto en cada lanzamiento.
Lectura-modificación-escritura
Incrementar un contador consta en realidad de tres pasos: leer el valor, sumarle uno y volver a escribirlo. Esta secuencia de lectura-modificación-escritura es el origen del problema.
counter = counter + 1;Cómo se intercalan los pasos
Dos hilos leen 5, ambos calculan 6 y ambos escriben 6. Esperaba obtener 7, pero obtuvo 6. Un incremento desapareció silenciosamente.
La actualización perdida
Ese incremento desaparecido se denomina actualización perdida. Con miles de hilos compitiendo, pueden desaparecer decenas o cientos de actualizaciones a la vez.
Un kernel que parece correcto
Este kernel parece correcto, pero todos los hilos compiten por la misma dirección. El recuento final será incorrecto y variará entre ejecuciones.
__global__ void count(int* total) {
*total = *total + 1;
}Por qué es no determinista
El hardware nunca garantiza un orden de ejecución de los hilos. Por eso, un kernel con carreras es no determinista: incluso puede funcionar con entradas pequeñas y fallar con entradas grandes.
Las lecturas por sí solas son seguras
Que muchos hilos lean el mismo valor no supone ningún problema. El conflicto comienza únicamente cuando al menos un hilo escribe mientras otros leen o escriben.
Las escrituras en posiciones distintas también son seguras
Si cada hilo escribe en su propia posición, como out[i], no hay ningún conflicto. Una carrera requiere que los hilos apunten a la misma ubicación.
out[i] = a[i] + b[i];Adelanto de la solución
La solución consiste en hacer que la lectura-modificación-escritura sea un único paso indivisible. Se trata de una operación atómica, que verá en la siguiente lección. ⚛️
Detección de carreras durante la revisión
Al revisar un kernel, pregúntese: ¿hay dos hilos que escriben en la misma dirección sin protección? Si es así, casi con toda seguridad existe una carrera de datos.
Comprobación rápida
Asegurémonos de que ha comprendido la idea de las carreras.
Resumen: carreras en la GPU
Ha aprendido que una lectura-modificación-escritura sin protección sobre datos compartidos provoca condiciones de carrera y actualizaciones perdidas. Las operaciones atómicas, que verá a continuación, hacen que esos pasos sean indivisibles. ✅
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Condiciones de carrera en la GPU» es gratis?
Sí — el texto completo de «Condiciones de carrera en la GPU» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CUDA Academy, actualiza a CoddyKit PRO. El curso de CUDA Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Condiciones de carrera en la GPU»?
Por qué las escrituras simultáneas corrompen los datos. Practicas CUDA Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar CUDA Academy?
No se requiere experiencia previa. CUDA Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Condiciones de carrera en la GPU»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de CUDA Academy?
Sí. Cada lección de CUDA Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Condiciones de carrera en la GPU
- atomicAdd y funciones similares
- Construir un histograma
- Atómicos personalizados con atomicCAS