3. Planificación de código
Planificación de código
Global
• Planificación instrucciones
De bloques básicos • Planificación de bucles
• Planificador de
listas
De bucles
Desarrollo de bucles Segmentación software
4. Planificación de código -> De bucles -> Segmentación Software
• Reordenación y reorganización de las instrucciones de un bucle
• Se intercalan instrucciones de distintas iteraciones sin desarrollar el
bucle -> Cada iteración tendrá instrucciones de diferentes iteraciones
del bucle original (el objetivo es situar instrucciones dependientes lo
mas alejadas posible)
Ej:
Iteración i
ld f0,0(r1)
Bucle inicial
add f4,f0,f2
loop: ld f0,0(r1) sd f4,0(r1)
add f4,f0,f2 Iteración i +1
sd f4,0(r1)
addi r1,r1,#-8 ld f0,0(r1)
Inst.
add f4,f0,f2
Control bnez r1,loop
sd f4,0(r1)
Iteración i +2
ld f0,0(r1)
add f4,f0,f2
sd f4,0(r1)
5. Planificación de código -> De bucles -> Segmentación Software
• Reordenación y reorganización de las instrucciones de un bucle
• Se intercalan instrucciones de distintas iteraciones sin desarrollar el
bucle -> Cada iteración tendrá instrucciones de diferentes iteraciones
del bucle original (el objetivo es situar instrucciones dependientes lo
mas alejadas posible)
Ej:
Iteración i
ld f0,0(r1) Bucle final
Bucle inicial
add f4,f0,f2
loop: ld f0,0(r1) sd f4,0(r1) loop: sd f4,16(r1)
add f4,f0,f2 add f4,f0,f2
Iteración i +1
sd f4,0(r1) ld f0,0(r1)
addi r1,r1,#-8 ld f0,0(r1) addi r1,r1,#-8
Inst. Inst.
add f4,f0,f2 bnez r1,loop
Control bnez r1,loop Control
sd f4,0(r1)
Iteración i +2
ld f0,0(r1)
add f4,f0,f2
sd f4,0(r1)
6. Planificación de código -> De bucles -> Segmentación Software
• Reordenación y reorganización de las instrucciones de un bucle
• Se intercalan instrucciones de distintas iteraciones sin desarrollar el
bucle -> Cada iteración tendrá instrucciones de diferentes iteraciones
del bucle original (el objetivo es situar instrucciones dependientes lo
mas alejadas posible)
Ej:
Iteración i
ld f0,0(r1) Bucle final
Bucle inicial
add f4,f0,f2
loop: ld f0,0(r1) sd f4,0(r1) loop: sd f4,16(r1)
add f4,f0,f2 add f4,f0,f2
Iteración i +1
sd f4,0(r1) ld f0,0(r1)
addi r1,r1,#-8 ld f0,0(r1) addi r1,r1,#-8
Inst. Inst.
add f4,f0,f2 bnez r1,loop
Control bnez r1,loop Control
sd f4,0(r1)
Iteración i +2
ld f0,0(r1)
add f4,f0,f2
sd f4,0(r1)
7. Planificación de código -> De bucles -> Segmentación Software
• Reordenación y reorganización de las instrucciones de un bucle
• Se intercalan instrucciones de distintas iteraciones sin desarrollar el
bucle -> Cada iteración tendrá instrucciones de diferentes iteraciones
del bucle original (el objetivo es situar instrucciones dependientes lo
mas alejadas posible)
• La estructura del programa suele ser: Prólogo – Bucle –Epílogo
• Objetivo:
Encontrar una secuencia de instrucciones repetitiva que se
pueda ejecutar en un solo ciclo o en un número pequeño de
ciclos
Es realmente una tarea dificultosa y no siempre son iteraciones
tan favorables
8. Planificación de código -> De bucles -> Segmentación Software
Ventajas
• Consume menos espacio de código
• Se consigue una ejecución con un paralelismo mayor durante más
tiempo de ejecución
• Aprovecha mejor el paralelismo de la máquina
Obstáculos
• Presencia de anti-dependencias
• Saltos incondicionales
• Bucles con pocas instrucciones y latencias largas
• Combinar segmentación software y desarrollo de bucles
Implementación
• URPR: UnRolling, Pipeling and Rerolling
1. Planifica el bucle como un bloque básico y lo desarrolla k veces
2. Reordena las instrucciones para obtener mayor paralelismo
3. Busca el patrón repetitivo