¡Recomienda este blog!

sábado, 23 de octubre de 2010

Planificacion de Instrucciones

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