CUDA Academy · Lección

Sincronizar con __syncthreads

Barreras que mantienen sincronizados los hilos.

Lección 2 de 413 pasos

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. 🎯

Gratis para empezar

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

  1. Declarar arrays __shared__
  2. Sincronizar con __syncthreads
  3. Evitar conflictos de bancos
  4. Memoria compartida dinámica
← Volver a CUDA Academy