Desenrollamiento de Bucles.
• Técnica de planificación software, realizada por el compilador
• Su objetivo es reducir las detenciones por riesgos de control ( Producidas por saltos ).
• Consiste en replicar el código base del bucle varias veces
disminuye el número total de iteraciones (número de saltos)
aumenta el tamaño del bloque básico
aumenta la flexibilidad para separar instrucciones con dependencias
• Mejora el rendimiento incrementando el código máquina.
• Se realiza, normalmente, en las primeras etapas de la compilación.
Límites
• Reducción de la sobrecarga
Con un mayor número de iteraciones consideradas en el proceso de desenrollamiento se amortiza la sobrecarga, pero hay un límite en el número de iteraciones.
• Tamaño del código
• Limitaciones del compilador:
Si la planificación es muy agresiva, se pueden generar problemas debidos a la escasez de registros.
Segmentación software
• Técnica de planificación software, realizada por el compilador
• Su objetivo es reducir las detenciones por riesgos de datos y el CPIideal
• Consiste en transformar un bucle con instrucciones dependientes e iteraciones independientes en un bucle con instrucciones independientes e iteraciones dependientes.
Ejemplo:
loop:
LD F2, 0(R1)
ADDD F4, F0, F2
SD 0(R1), F4
SUBI R1, R1, #8
BNEZ R1, loop
Iteración 1:
F2, 0(R1)
ADDD F4, F0, F2
SD 0(R1), F4
Iteración 2:
LD F2, -8(R1)
ADDD F4, F0, F2
SD -8(R1), F4
Iteración 3:
LD F2, -16(R1)
ADDD F4, F0, F2
SD -16(R1), F4
Codigo Final:
LD F2, 0(R1)
ADDD F4, F0, F2 Start-up
LD F2, -8(R1)
loop: SD 0(R1), F4 ; almacena en x[i]
ADDD F4, F0, F2 ; suma el escalar k a x[i-1]
LD F2, -16(R1) ; carga x[i-2]
SUBI R1, R1, #8 ; decrementa el puntero en 8
BNEZ R1, loop ; salta si R1 no es cero
SD 0(R1), F4
ADDD F4, F0, F2 Finish-up
SD -8(R1),F4
0 comentarios:
Publicar un comentario