Sincronizar con __syncthreads
Barreras que mantienen sincronizados los hilos.
Sincronizar con __syncthreads es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 2 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.
Los hilos se desincronizan
Los hilos de un bloque no avanzan al unísono. Uno puede terminar de escribir mientras otro todavía está cargando, así que no puede suponer que los datos están listos.
Conozca la barrera
Una barrera es un punto del código en el que todos los hilos deben esperar hasta que lleguen todos. Solo entonces el bloque continúa conjuntamente.
La llamada __syncthreads
CUDA le proporciona __syncthreads() como barrera para todo el bloque. Llámela y todos los hilos del bloque se detendrán hasta que llegue el último. 🛑
__syncthreads();El orden cargar-sincronizar-usar
El patrón fundamental es sencillo: cada hilo carga su parte en la memoria compartida, se sincronizan y después todos leen de forma segura lo que han escrito los demás.
tile[threadIdx.x] = input[i];
__syncthreads();
float left = tile[threadIdx.x - 1];Si la omite, obtendrá basura
Si olvida la barrera, un hilo puede leer una posición antes de que su vecino haya escrito en ella. Es una condición de carrera y produce datos erróneos de forma silenciosa.
También es una valla de memoria
La barrera también hace que las escrituras compartidas sean visibles para todos los hilos después de ella. Por tanto, una vez superado __syncthreads, todos ven los valores recién escritos.
Todos deben alcanzarla o ninguno
La regla estricta es que todos los hilos del bloque deben llegar al mismo __syncthreads. Si algunos lo omiten, el bloque puede quedar bloqueado para siempre.
La trampa de las ramas divergentes
Nunca coloque una barrera dentro de un if al que solo entren algunos hilos. Los hilos que sigan la otra ruta nunca llegarán y el bloque quedará bloqueado. ⚠️
if (threadIdx.x < 64) {
__syncthreads();
}Ámbito de bloque, no de grid
Un límite importante: __syncthreads solo sincroniza un bloque. No puede coordinar hilos de bloques distintos del grid.
Sincronización dentro de bucles
En los algoritmos con tiles, a menudo se sincroniza dos veces por fase: una después de cargar un tile y otra después de calcular, antes de cargar el siguiente.
Barata, pero no gratuita
Una barrera cuesta algo de tiempo mientras los hilos esperan. Úsela cuando la corrección lo exija, pero evite llamadas adicionales que solo detengan a los hilos rápidos.
Comprobación rápida
Compruebe si entiende bien la barrera.
Resumen
Ha aprendido que __syncthreads() es una barrera para todo el bloque que mantiene sincronizados los hilos, y que colocarla dentro de ramas divergentes puede provocar un bloqueo. A continuación: conflictos de bancos. 🎯
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 «Sincronizar con __syncthreads» es gratis?
Sí — el texto completo de «Sincronizar con __syncthreads» 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 «Sincronizar con __syncthreads»?
Barreras que mantienen sincronizados los hilos. 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 2 de 4.
¿Cuánto tiempo toma la lección «Sincronizar con __syncthreads»?
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
- Declarar arrays __shared__
- Sincronizar con __syncthreads
- Evitar conflictos de bancos
- Memoria compartida dinámica