Desenrollado de bucles con #pragma unroll
Reduzca la sobrecarga de los bucles y exponga el ILP.
Desenrollado de bucles con #pragma unroll 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 bucles tienen costes ocultos
Cada iteración del bucle dedica trabajo al contador, la comparación y el salto. Esta gestión se denomina sobrecarga del bucle y se acumula en los bucles internos críticos.
Qué hace el desenrollado
El desenrollado de bucles copia el cuerpo varias veces por iteración para que el bucle se ejecute menos veces. Realiza el mismo trabajo con menos conteos y saltos.
for (int i = 0; i < n; i += 2) {
out[i] = in[i] * 2;
out[i + 1] = in[i + 1] * 2;
}Deje que lo haga el compilador
CUDA le ofrece una indicación para que no tenga que copiar el código manualmente. Coloque #pragma unroll justo antes de un bucle y el compilador lo desenrollará por usted.
#pragma unroll
for (int i = 0; i < 4; i++)
sum += a[i];Elija un factor específico
Puede solicitar una cantidad exacta escribiendo un número después de la directiva. #pragma unroll 4 desenrolla el bucle de cuatro iteraciones en cuatro.
#pragma unroll 4
for (int i = 0; i < n; i++)
acc += w[i] * x[i];Desactivar el desenrollado
A veces, desenrollar por completo aumenta demasiado el código o consume registros. Escribir #pragma unroll 1 indica al compilador que deje el bucle sin desenrollar, exactamente como está escrito.
#pragma unroll 1
for (int i = 0; i < n; i++)
process(i);Los recuentos de iteraciones constantes ayudan
El desenrollado funciona mejor cuando el número de iteraciones se conoce en tiempo de compilación. Un recuento de iteraciones fijo permite al compilador expandir por completo el bucle en código lineal.
El desenrollado expone el ILP
Las iteraciones copiadas a menudo no tienen dependencias entre sí. Esto proporciona al planificador más instrucciones independientes que solapar y oculta la latencia sin coste adicional.
Menos saltos, ruta más rápida
Con el bucle desenrollado, el hardware comprueba la condición de salida con menor frecuencia. Menos saltos producen un flujo de instrucciones más uniforme y predecible.
La contrapartida de los registros
Más valores activos por iteración implican un mayor uso de registros. Un desenrollado agresivo puede provocar spills de registros y reducir la ocupación, por lo que no siempre resulta beneficioso.
El tamaño del código también crece
Cada copia desenrollada aumenta el tamaño del kernel. Un código más grande puede ejercer presión sobre la caché de instrucciones, por lo que desenrollar por completo bucles enormes puede ser contraproducente en el hardware real.
Mida antes de confiar
El desenrollado es una sugerencia, no magia. Deje siempre que el profiler confirme que el factor elegido realmente acelera su kernel y su GPU.
Comprobación rápida
Quiere que el compilador desenrolle por completo un bucle pequeño y fijo. ¿Qué escribe?
Recapitulación: cambie conteo por velocidad
Ha aprendido que #pragma unroll reduce la sobrecarga del bucle y expone ILP, pero debe vigilar el coste en registros y tamaño del código. Mida cada factor para asegurarse. 🧩
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 «Desenrollado de bucles con #pragma unroll» es gratis?
Sí — el texto completo de «Desenrollado de bucles con #pragma unroll» 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 «Desenrollado de bucles con #pragma unroll»?
Reduzca la sobrecarga de los bucles y exponga el ILP. 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 «Desenrollado de bucles con #pragma unroll»?
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
- Paralelismo a nivel de instrucción
- Desenrollado de bucles con #pragma unroll
- Cargas vectorizadas con float4
- Presión de registros y derrames