Icon Crear Crear

Loop unrolling

Presentación

El Desenroscado de bucles (conocido en inglés como loop unrolling o Loop unwinding) es una técnica de optimización de bucles que intenta mejorar la velocidad de ejecución de un programa a costa de aumentar su tamaño binario (Situación de compromiso espacio-tiempo). Esta transformación puede hacerla manualmente el programador o un Compilador optimizador.

Descarga la versión para jugar en papel

Edad recomendada: 15 años
3 veces realizada

Creada por

España

Top 10 resultados

  1. 1
    00:02
    tiempo
    100
    puntuacion
¿Quieres aparecer en el Top 10 de este juego? para identificarte.
Crea tu propio juego gratis desde nuestro creador de juegos
Compite contra tus amigos para ver quien consigue la mejor puntuación en esta actividad

Top juegos

  1. tiempo
    puntuacion
  1. tiempo
    puntuacion
tiempo
puntuacion
tiempo
puntuacion
 
game-icon

Loop unrollingVersión en línea

El Desenroscado de bucles (conocido en inglés como loop unrolling o Loop unwinding) es una técnica de optimización de bucles que intenta mejorar la velocidad de ejecución de un programa a costa de aumentar su tamaño binario (Situación de compromiso espacio-tiempo). Esta transformación puede hacerla manualmente el programador o un Compilador optimizador.

por Christian Ferrer
1

Loop unrolling

2

Ventajas y desventajas

Ventajas

El mayor peso en los bucles pequeños se localiza en las instrucciones que incrementan el puntero o índice al siguiente elemento del array y en los test de “¿ha finalizado el bucle?”. Si un compilador optimizador puede pre-calcular los desplazamientos de cada variable individualmente referenciada en el array, estas pueden ser expresadas instrucciones en lenguaje máquinadirectamente, por lo que no se requieren cálculos en tiempo de ejecución.

  • Puede conseguirse una mejora significativa si la reducción de instrucciones a ejecutar compensa por cualquier pérdida de rendimiento causada por el incremento en el tamaño del programa.
  • La predicción de saltos se minimiza.
  • Si las instrucciones del bucle son independientes entre sí (es decir: si las instrucciones de un ciclo del bucle no afectan a las instrucciones del ciclo siguiente), éstas pueden ser ejecutadas en paralelo.
  • El desenroscado puede realizarse dinámicamente si el número de elementos del array no se conoce en tiempo de compilación (como en el Dispositivo de Duff).

Los compiladores optimizadores pueden desenroscar bucles automáticamente o bajo demanda.

Desventajas

  • El tamaño del programa aumenta, este efecto puede no ser deseado, particularmente en aplicaciones embebidas.
    • Puede que también cause un incremento en los fallos de caché de instrucción, que afectan negativamente al rendimiento.
  • A menos que la transformación sea aplicada de manera transparente por un compilador optimizador, el código resultante es menos legible.
  • Si en el cuerpo del bucle se realizan llamadas a función, puede que no sea posible combinar el desenroscado con inlining, ya que el incremento del tamaño el código podría ser excesivo. Por lo tanto, puede que se deba escoger entre ambas optimizaciones.
  • Posible aumento del uso de los registros en una sola iteración para almacenar variables temporales[cita requerida], lo que puede reducir el rendimiento, aunque dependerá mucho de posibles optimizaciones.
  • Con la excepción de códigos muy pequeños y simples, los bucles desenroscados que contienen ramificaciones son más lentos que usar recursión.
educaplay suscripción