Você está na página 1de 8

CAPTULO 5

Problema 1:
Supongamos un procesador VLIW cuyas instrucciones pueden decodificar hasta cuatro 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
decodificar 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. Suponga que el procesador dispone de 32 registros para
enteros R0 R31 de 64 bits, la direccin de inicio del cdigo es conocida y se encuentra en el registro R31, y
la direccin que indica que se ha acabado la matriz c[] esta en R30. Se sugiere desenrollar el bucle (hasta
cuatro iteraciones) para tener un mayor nmero de instrucciones entre saltos.

void sum(int c[], int a[], int b[], int n)


{
int i;
for (i=0; i<n; i++)
c[i]=a[i]+b[i];
}

Unidad Funcional Latencia Op1 Op2 Op3 Op4 Operaciones realizadas por la unidad
ALU 1 X X X X Comparacin/suma/resta entera, operaciones lgicas
Memoria 3 X X Cargas y almacenamientos
Saltos 4 X Saltos condicionales e incondicionales

Solucin:

Asumiendo n=1000

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

R1 contiene la direccin base para el array 'a'


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

Loop: LW R5, 0(R2) ; elementos de b


LW R6, 0(R3) ; elementos de c
ADD R7, R6, R5
SW 0(R1), R7
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
:

1/8
ALU/MEN ALU/MEN ALU/SALT ALU Ciclo
Loop LW R5, 0(R2) LW R6, 0(R3) 1
ADD R7, R6, R5 2
SW 0(R1), R7 3
ADDI R1, R1, #8 ADDI R2, R2, #8 ADDI R3, R3, #8 SUBI R4, R4, #1 4
BNEZ R4, Loop 5

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 R3, R3, #8
SUBI R4, R4, #2
BNEZ R4, Loop

ALU/MEN ALU/MEN ALU/SALT ALU Ciclo


Loop: LW R5, 0(R2) LW R6, 0(R3) 1
LW R8, 8(R2) LW R9, 8(R3) ADD R07 R06, R05 2
LW R11, 16(R2) LW R12, 16(R3)SW 0(R1), R07 ADD R10 R09, R08 3
LW R14, 24(R2) LW R15, 24(R3)SW 8(R1), R10 ADD R13 R12, R11 4
SW 16(R1), R13 ADD R16 R15, R14 5
SW 24(R1), R16 6
ADDI R1, R1, #8 ADDI R2, R2, #8 ADDI R3, R3, #8 SUBI R4, R4, #2 7
BNEZ R4, Loop 8

Para el Primer Caso:


5*1000 = 5000
Para el Segundo Caso:
8*(1000/4) = 2000
Se ha conseguido un factor de ganancia igual a 3

2/8
Problema 2:
Suponga que en la sentencia if-then-else siguiente,

if (a==0) a=b; else a=a+4;

la parte del then se ejecuta casi siempre. Ilustra como el compilador puede mejorar el tiempo de ejecucin
utilizando procesamiento especulativo. Realiza una estimacin de la ganancia que se obtiene con la
especulacin en las condiciones establecidas para el procesador descrito en el problema anterior.

Solucin:

loop: lw r1,0(r3) ; r1a[i] (r3 apunta a a[i])


bnez r1,else ; saltar si a[i] 0
then: lw r1,0(r2) ; r1b[i] (r2 apunta a b[i])
j end
else: addi r1,r1, #4 ; a[i] = a[i] + 4
end: sw r1,0(r3) ; a[i] r1 (guarda a[I]

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop subi r4,r4,#1 lw r1,0(r3) 1
bnez r1,else 2
then J end lw r1,0(r2) 3
else addi r1,r1, #4 4
end adduir 3,r3,#4 addui r2,r2,#4 bnez r4,loop sw r1,0(r3) 5
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

a[i] = 0 (no salta)

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop subi r4,r4,#1 lw r1,0(r3) 1
2
3
bnez r1,else 4
then J end lw r1,0(r2) 5
6
7
8
end adduir 3,r3,#4 addui r2,r2,#4 bnez r4,loop sw r1,0(r3) 9
10
11
12
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

3/8
a[i] 0 (no salta)

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop lw r1,0(r3) 1
2
3
bnez r1,else 4
5
6
7
else addi r1,r1, #4 8
end adduir 3,r3,#4 addui r2,r2,#4 subi r4,r4,#1 bnez r4,loop sw r1,0(r3) 9
10
11
12
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

Ganancia que se puede obtener teniendo en cuente que la parte then se ejecuta casi siempre.

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop adduir 3,r3,#4 addui r2,r2,#4 subi r4,r4,#1 lw r1,0(r3) lw r5,0(r2) 1
bnez r1,else 2
then bnez r4,loop sw r5,0(r3) 3
else addi r1,r1, #4 bnez r4,loop sw r1,0(r3) 4
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

a[i] = 0 (no salta)

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop adduir 3,r3,#4 addui r2,r2,#4 subi r4,r4,#1 lw r1,0(r3) lw r5,0(r2) 1
2
3
bnez r1,else 4
then bnez r4,loop sw r5,0(r3) 5
6
7
8
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

4/8
a[i] 0 (no salta)

Etiqueta ALU1 ALU2 ALU3 ALU4 Salto Mem1 Mem2 Inst


loop lw r1,0(r3) lw r5,0(r2) 1
2
3
bnez r1,else 4
5
6
7
else addi r1,r1, #4 bnez r4,loop sw r1,0(r3) 8
9
10
11
Slot 1 Slot 2 Slot 3 Slot 4 Slot 5 Slot 6 Slot 7

Problema 3:
Dada la secuencia de instrucciones VLIW siguiente:

Instruccin VLIW Operacin 1 Operacin 2


1 lw r1, 10(r2) add r3, r4, r5
2 add r6, r3, r7
3 beqz r8, direc
4 lw r9, 0(r8)
5 lw r10, 0(r9)

Indicar como puede mejorarse el comportamiento de este cdigo utilizando una forma con predicado de la
instruccin lw. El procesador puede emitir, cada ciclo, una combinacin de operacin de referencia a
memoria y operacin a ALU, o una nica operacin de salto condicional.

Solucin:

La operacin de carga del registro r9, con el contenido de la direccin de memoria en r8 ( Lw r9, 0(r8)) podra
moverse para ocupar el hueco que hay delante del salto condicional (beqz), sobre todo si se sabe que lo ms
probable es que r8 sea distinto de cero y por lo tanto no se producir el salto. Por esta razn se utiliza la
instruccin (Lwc r9, 0(r8), r8), que se trata de una instruccin de carga condicional que da lugar a que r9 se
cargue con el contenido de la direccin r8, si r8 es distinto de cero.

Instruccin VLIW Operacin 1 Operacin 2


1 lw r1, 10(r2) add r3, r4, r5
2 lwc r9, 0(r8), r8 add r6, r3, r7
3 beqz r8, direc
4 lw r10, 0(r9)

5/8
Ahora implementamos la instruccin Lwc r9, 0(r8), r8 con predicados p1 y p2 y colocamos las instrucciones a
las unidades funcionales disponibles.

Instruccin VLIW Operacin 1 Operacin 2


1 lw r1, 10(r2) add r3, r4, r5
2 p1, p2 cmp.eq r8,0
3 <p2> lw r9, 0(r8) add r6, r3, r7
4 beqz r8, direc
5 lw r10, 0(r9)

Problema 4:
Indicar como se podran utilizar instrucciones con predicado para mejorar el paralelismo entre instrucciones
(ILP) de la sentencia:

if (C=0) then C=C-1; else C=C+1;

Podemos utilizar las instrucciones con predicado que consideremos oportunas para obtener el
comportamiento ms eficiente para este trozo de cdigo.

Solucin:

p1, p2 cmp. eq c, 0
<p1> add c, c, 1
<p2> sub c, c, 1

6/8
Problema 5:
En un procesador todas las instrucciones pueden predicarse. Para establecer valores de los predicados se
utilizan instrucciones de comparacin (cmp) con el formato (p) p1, p2 cmp.cnd x, y dende cnd es la condicin
que se comprueba entre x e y (lt, ge, eq, ne). Si la condicin es verdadera p1=1 y p2=0, y si es falsa, p1=0 y
p2=1. La instruccin solo se ejecuta si el predicado p=1 (habr sido establecido por otra instruccin de
comparacin).

En estas condiciones, utilizar instrucciones con predicado para escribir sin ninguna instruccin de salto el
siguiente cdigo:

if (A>B) then (X=1;)


else
{
if (C<D) then (X=2;)
else (X=3;)
}

Solucin:

lw r1, A // r1=A
lw r2, B // r2=B
lw r3, C // r3=C
lw r4, D // r4=D
add r5, r0, r0 // r5=0
p1, p2 cmp.gt r1, r2 // A>B?
(p2) p2, p3 cmp.lt r3, r4 // C<D?
(p1) addi r5, r0, #1 // r5=1
(p2) addi r5, r0, #2 // r5=2
(p3) addi r5, r0, #3 // r5=3
sw r5, X // X=r5

7/8
Problema 6:
Indicar como se transformara la siguiente secuencia de instrucciones de forma que solo se utilicen
instrucciones de transferencia condicional de datos (no debe haber ninguna instruccin de salto condicional).
Asegrese de que se mantenga el comportamiento del procesador frente a las posibles excepciones.

Instruccin VLIW Operacin 1 Operacin 2


1 lw r1, 10(r2) add r3, r4, r5
2 add r6, r3, r7
3 beqz r8, direc
4 lw r9, 0(r8)
5 lw r10, 0(r9)

Solucin:

Instruccin VLIW Operacin 1 Operacin 2


1 Lw r1, 10(r2) Add r3, r4, r5
2 Cmovz r8, r3, r6
3 Lw r9, 0(r8)
4 Lw r10, 0(r9)

8/8

Você também pode gostar