Você está na página 1de 12

Aprovecha

miento
del Parale
lismo
en las
RA
U
T
A
r
q
TEC
u
I
i
t
U
e
c
Q
t
R
u
E
r
A
S
a
D
s
A
R
O
D
TA
U
V
P
L
IW
M
O
C
EPIE UNSA

Fidher Quiroga Ezquerra

PROBLEMA #1
Reduccin de Dependencias entre Instrucciones
Desenrollado de bucle

PROBLEMA #1
0 Supongamos que un procesador VLIW cuyas

instrucciones pueden codificar hasta 4


operaciones con las restricciones que se
muestran en la tabla. En dicha tabla tambin
se incluye informacin de las latencias de
cada una de las unidades funcionales
disponibles que se utilizan en este ejercicio.
Las operaciones se pueden codificar de forma
similar a como se haran en un repertorio de
instrucciones RISC similar al DLX. Muestre
una forma posible de ejecutar el siguiente
cdigo C:

PROBLEMA #1
Unidad
Funcion
al

Latenc
ia

Op.
1

Op.
2

ALU

Memoria

Saltos

Op.
3

Op.
4

Operaciones
Realizadas
por la Unidad

Comparacin/Suma/Re
sta entera,
operaciones lgicas

Cargas y
Almacenamiento
X

Operacione
s1

Operaciones
2

ALU/Memori
a
ALU/Memori
a
ALU/Memori
a

ALU/Memori
a
ALU/Memori
a
ALU/Memori
a

Slot 1

Slot 2

Saltos
Condicionales e
Incondicionales

Operaciones
3

Operaciones
4

Ciclo

ALU/Saltos

ALU

ALU/Saltos

ALU

ALU/Saltos

ALU

Slot 3

Slot 4

PROBLEMA #1
void sum(int c[ ], int a[ ], int b[ ],
int n)
{ int i;
for (i=0; i<n; i++) c[i]=a[i]
+b[i];
}

int i
for(i=0; i<1000;
i++)
c[i] = a[i] + b[i];

0 R1 contiene la direccin base para el array c'


0 R2 contiene la direccin base para el array a'
0 R3 contiene la direccin base para el array b'
0 R4=1000

PROBLEMA #1
loop: lw R5, 0(R2) ; cargo elemento de a
lw R6, 0(R3) ; cargo elemento de b
add R7, R6, R5 ; Sumo a + b
sw
0(R1), R7
; Guardo a + b en c
addi R1, R1, #8 ; incrementa la direccin
addi R2, R2, #8
addi R3, R3, #8
subi R4, R4, #1 ; decrementa la variable del
; bucle
bnez R4, loop ; condicin para el bucle

PROBLEMA #1
ALU
latencia
=1
Memoria latencia
=3
Saltos
latencia
=4
ALU/Memor ALU/Memor
ia
ia
loop

lw r5, 0(r2)

lw r6, 0(r3)

loop:

lw
lw
add
sw
addi
addi
addi
subi
bnez

R5, 0(R2)
R6, 0(R3)
R7, R6, R5
0(R1), R7
R1, R1, #8
R2, R2, #8
R3, R3, #8
R4, R4,
R4, loop

ALU/Saltos

ALU

Ciclo

1
2
3

add r7, r6, r5

sw 0(r1), r7

bnez r4, loop

6
7
8

addi r1, r1, #8

addi r2, r2, #8

addi r3, r3,


#8

subi r4, r4, #1

Anlisis Cdigo VLIW sin


Desenrollar
0 La figura anterior muestra las instrucciones VLIW para

el cdigo sin desenrollar.


0 Ciclos por Iteracin = 9
0 Operaciones realizadas = 9
0 Operaciones por ciclo = 1
0 Palabras de memoria utilizadas = 36
0 Palabras de memoria necesarias = 9
0 El

porcentaje de memoria ocupado sin codificar


ninguna operacin es 27 de 36 (75%).

0 Se necesitan 9*(1000) ciclos = 9000 ciclos para

realizar todas las iteraciones.

PROBLEMA #1
BUCLE SIN
DESENROLLAR

BUCLE
DESENROLLADO
4 VECES

loop:lw r5, 0(r2) ; cargo


elemento
; de a
lw r6, 0(r3) ; cargo
elemento
; de b
add r7, r6, r5 ; sumo a + b
sw 0(r1), r7 ; Guardo a +
b
; en c
addi r1, r1, #8 ; incrementa
la
; direccin
addi r2, r2, #8
addi r3, r3, #8
subi r4, r4, #1 ; decrementa
la
; variable del
; bucle
bnez
r4, loop
;
condicin para
; el bucle

loop:

lw
r5, 0(r2)
lw r6, 0(r3)
lw r8, 8(r2)
lw r9, 8(r3)
lw r11, 16(r2)
lw r12, 16(r3)
lw r14, 24(r2)
lw r15, 24(r3)
add r07 r06, r05
add r10 r09, r08
add r13 r12, r11
add r16 r15, r14
sw 0(r1), r07
sw 8(r1), r10
sw 16(r1), r13
sw 24(r1), r16
addi
r1, r1, #8
addi
r2, r2, #8
addi
subi
bnez

r3, r3, #8
r4, r4, #4
r4, loop

PROBLEMA #1
Iteracin
1

Iteracin
2

Iteracin 3

Iteracin 4

lw r5, 0(r2)
lw r8, -8(r2)
lw r11, -16(r2)
lw r6, 0(r3)

lw r14, -24(r2)
lw r9, -8(r3)
lw r12, -16(r3)

add r7, r6,


r5
sw 0(r1),
r7

lw r15, -24(r3)
add r10, r9,
r8
sw -8(r1), r10

add r13, r12,


r11
sw -16(r1), r13

add r16, r15,


r14
sw -24(r1), r16

PROBLEMA #1
loop

ALU/Memoria

ALU/Memori
a

ALU/Salto
s

ALU

Ciclo

lw r5, 0(r2)

lw r6, 0(r3)

lw r8, 8(r2)

lw r9, 8(r3)

lw r11, 16(r2)

lw r12, 16(r3)

lw r14, 24(r2)

lw r15, 24(r3)

sw 0(r1), r07
sw 8(r1), r10

bnez r4, loop

sw 16(r1), r13
sw 24(r1), r16

Slot 1

addi r1, r1, #8

Slot 2

addi r2, r2,


#8

Slot 3

add r07 r06,


r05
add r10 r09,
r08
add r13 r12,
r11
add r16 r15,
r14

4
5
6
7

addi r3, r3, #8

subi r4, r4, #4

Slot 4

Anlisis Cdigo VLIW


Desenrollado
0 La figura anterior muestra las instrucciones VLIW para el

cdigo desenrollado.
0 Ciclos por Iteracin = 9
0 Operaciones realizadas = 22
0 Operaciones por ciclo = 2.44
0 Palabras de memoria utilizadas = 36
0 Palabras de memoria necesarias = 22
0 El porcentaje de memoria ocupado sin codificar ninguna

operacin es 14 de 36 (38.889%).
0 Se necesitan 9 ciclos por iteracin, pero se ha reducido el

numero de iteraciones en un factor igual a 4.


0 Solo se necesitan 9*(1000/4) ciclos = 2250 ciclos para

completar todas las iteraciones; frente a los 9000 ciclos del


bucle sin desarrollar; por lo tanto factor de ganancia igual a 4

Você também pode gostar