You are on page 1of 5

Hoja 3. Solución al problema 5.

program ordenar;
const n= ...; { talla del vector }
var A: array [0..n-1] of word;
i,j,temp:word;
begin
for i:=0 to n-2 do { bucle fori }
for j:= i+1 to n-1 do { bucle for2 }
if A[i]>A[j] then begin
temp:=A[i];
A[i]:=A[j];
A[j]:=temp;
end;
end.
Salto retardado con cancelación. Incluye cuatro instrucciones nuevas:

- beqz*T y bnez*T cancelan la instrucción que ocupa el slot si no se cumple la


condición de salto. Son apropiadas cuando el programador (o compilador)
supone que probablemente se cumplirá la condición. O sea:

"Ejecutan completamente la instrucción del delay slot si el salto SE toma"

- beqz*F y bnez*F cancelan la instrucción que ocupa el slot si se cumple la


condición de salto. Son apropiadas cuando el programador (o compilador)
supone que probablemente no se cumplirá la condición. O sea:

"Ejecutan completamente la instrucción del delay slot si el salto NO SE toma"


Dirección Instrucción Comentario cancel. ejec. stalls
(aprox) (aprox) LDE
ADDI R1,R0,R0 variable i ubicada en R1 1
fori: SGTI R5,R1,4*(n-2) condición de FIN de bucle fori 1
for1 +4: BNEZ*F R5,endfori n x 1(1)
ADDI R2,R1,4*1 variable j ubicada en R2 (d. slot) 1 n
for2: SGTI R5,R2,4*(n-1) condición de FIN de bucle for2 n
for2 +4: BNEZ*F R5,endfor2 ½ n2 x 1(1)
LW R3,A(R1) delay slot n ½ n2
LW R4,A(R2) ½ n2
if: SGT R5,R3,R4 ½ n2 x1
BEQZ*F R5,endif ½ n2 x 1(1)
SW A(R2),R3 la optimización ha eliminado (d.s) 1/4n2 1/4 n2
SW A(R1),R4 la variable temp 1/4n2
endif: ADDI R2,R2,4*1 j++ ½ n2
BEQZ*T R0,for2+4 salto incondicional a for2+4 ½ n2
SGTI R5,R2,4*(n-1) delay slot 0 ½ n2
endfor2: ADDI R1,R1,4*1 i++ n
BEQZ*T R0,for1+4 salto incondicional a for1+4 n
SGTI R5,R1,4*(n-2) delay slot 0 n
endfori: …
(1) Si existe forwarding combinacional, no existen estas penalizaciones
Resultados:

a) Ciclos de parada por cancelaciones: ¼ n2 + n + 1 ---> Aprox: 1/4 n2

b) Ciclos de parada por dependencias LDE n + 3/2 n2 ---> Aprox: 3/2 n2

c) Instrucciones ejecutadas (sin contar las que se cancelan)

2 + 6n + 8/2 n2 + 2/4 n2 ---> Aprox: 9/2 n2

d) CPI

CPI = 1 + Penal_ media


Penal_ media = (Ciclos de parada totales) / (Instrucciones ejecutadas) =
= (1/4 + 3/2) n2 / (9/2 ) n2 = 7/18
CPI = 1 + 7/18 = 1.39

e) Tiempo de ejecución para n = 1000

T = N*CPI*Tciclo = 9/2 10002 * 1.39 * 5*10-9 s = 31.27 ms

You might also like