Вы находитесь на странице: 1из 8

ARQUITECTURA DE COMPUTADORES

Gua de Resolucin de Ejercicios de ILP


Grado en Ingeniera InformticaTercer Curso

NOTA IMPORTANTE:
El objetivo de esta gua es ayudar al alumno a resolver los ejercicios de ILP.
Los ejercicios se han clasificado en tipos con el nico objetivo de facilitar la
explicacin, pero esta clasificacin no existe en los libros de Arquitectura de
Computadores.

Tipo 1: Procesador No Segmentado


La ejecucin de las instrucciones no se divide en fases y el procesador no se divide en
unidades funcionales, por tanto, slo puede haber una instruccin ejecutando en el
pipeline en un momento dado.
Qu es importante?:
1) Ciclo de Emisin al pipeline
2) Ciclo de Salida del pipeline Ciclo base + Latencia_Instruccion
El nmero de ciclos totales para la ejecucin de un programa es el nmero de ciclos
comprendido entre la emisin de la primera instruccin y la salida del pipeline de la
ltima instruccin.
Tipo 2: Procesador Segmentado
La ejecucin de las instrucciones se divide en n fases y el procesador se divide en n
unidades funcionales. Una instruccin se emite al pipeline en el siguiente ciclo de reloj
salvo que se detecte algn tipo de riesgo (estructural, control o datos). Por tanto, en un
ciclo de reloj, un procesador segmentado puede estar ejecutando n fases distintas de n
instrucciones diferentes, cada una de ellas usa una unidad funcional distinta.
El bandwith o ancho de banda se multiplica por n
Qu es importante?:
1) Ciclo de Emisin al pipeline
2) Ciclo de ejecucin de cada etapa
3) Ciclo de Salida del pipeline
Para saber cundo emitir la instruccin al pipeline se deben calcular previamente los
riesgos de datos:

RAW: Read After Write


o IMPORTANTES. SON LOS QUE TENDREMOS EN CUENTA EN LA
RESOLUCIN DE LOS CRONOGRAMAS

ADD R1, R2,R5


SUB R3, R1, R4

Riesgo RAW: Registro R1: ADD SUB


o

Nota: En la arquitectura MIPS, este riesgo deriva de que la decodificacin


del registro R1 (de la inst. SUB) se realiza en algn ciclo anterior que la
escritura del registro R1 (de la inst. ADD)

WAR: Write After Read

ADD R1, R2, R5


SUB R2, R3, R4

No se presentarn ya que los ejercicios que realizamos tienen ciclos fijos


pero se puede requerir calcularlos.

Nota: En la arquitectura MIPS, este riesgo no podr darse dado que la


escritura del registro R2 (instruccin SUB) se realizar siempre en algn
ciclo posterior a la decodificacin del mismo registro de la instruccin ADD.

WAW: Write After Write

ADD R2, R1, R5


SUB R2, R3, R4

o No se presentarn ya que los ejercicios que realizamos tienen ciclos fijos pero se
puede requerir calcularlos.
o Nota: En la arquitectura MIPS, este riesgo no podr darse dado que la escritura
del registro R2 (instruccin SUB) se realizar siempre en algn ciclo posterior
que la escritura del mismo registro de la instruccin ADD.

Tipos de procesadores segmentados segn hardware:

1.- Sin forwarding: la decodificacin de los operandos se solapa con la fase de escritura
de los registros, es decir, hay que esperar a que la fase de WriteBack escriba en los
registros:
ADD R1, R2,R5
SUB R3, R1, R4

D
F

X
-

M
-

W
D X

Hay que tener en cuenta tambin instrucciones posteriores a la siguiente. La fase de D de


la instruccin i+n tiene que esperar y ejecutarse a la vez que la fase de W de la
instruccin i si entre la instruccin i y la i+n existe dependencia RAW. Se debe a que en
la primera parte del ciclo de la fase W de la instruccin que escribe se graba en el registro
y en la 2 parte del ciclo de la fase D de la instruccin que realiza la lectura (i+n) se
puede utilizar ese valor pero no antes.

ADD r1,R2,R3
Add r3,r4,r5
Add r4,r1,r6

1
F

2
D
F

Tambin es aplicable a los bucles:


1
2
ADD r1,R2,R3
F
D
Bnez r1, bucle
F

3
E
D
F

4
M
E
-

5
W
M
D

3
E
-

4
M
-

5
W
D

W
E

Nota: La escritura de registros por el segmento W se produce al comienzo del ciclo y la


lectura por parte de D se hace al final del MISMO CICLO.
2.- Con forwarding: la decodificacin de los operandos se realiza en el primer ciclo posible
(aunque no se decodifique el resultado correcto) y la ejecucin de la instruccin se realiza en el
ciclo siguiente al ciclo donde se ha calculado el resultado del registro de la cual depende. Pero
en qu fase se cuenta con el resultado de la operacin?
o Instrucciones de Salto como primera instruccin: En el siguiente ciclo de la
decodificacin.
o Instrucciones de ALU: En el siguiente ciclo de la fase de ejecucin.
ADD R1, R2,R5
SUB R3, R1, R4

D
F

X
D

M
X

W
M W

Nota: No se puede hacer en el mismo ciclo ya que en este caso se usan los registros
intermedios del Pipeline
o Instrucciones de Memoria: En el siguiente ciclo de la fase de memoria.
LD R1, Dir
SUB R3, R1, R4

D
F

X
D

M
-

W
X M

Nota: No se puede hacer en el mismo ciclo ya que en este caso se usan los registros
intermedios del Pipeline
o Instrucciones de salto como segunda instruccin: No se decodifica
ADD R1, R2,R5
BNZ R1, SALTO

D
F

X
-

M
D

W
X M

Nota: No se puede hacer en el mismo ciclo ya que en este caso se usan los registros
intermedios del Pipeline
Nota: NO se realiza la decodificacin ya que el resultado del salto se calcula en la fase de
ejecucin y estar disponible al final de esta fase.

Tipos de prediccin de saltos estticos para resolucin de ejercicios.


Tanto si se usa forwarding como si no se pueden usar las tcnicas de prediccin de salto vistas en
clase (Vaciado del pipeline, salto tomado, salto no tomado). Se supone un escenario en el que se
especifica que se realizar el bucle m veces y se pide el cronograma de una iteracin.
Vaciado del pipeline:
SALTO: (1) XXXX

(n-1) BNZ R1, SALTO


(n) YYYYY

N
F

N+1 N+2 N+3


D
X
F(n)

M
W
F(1) D X

Despus de la instruccin de salto se inicia la captacin (F) de la siguiente instruccin.


Despus de la etapa de decodificacin, al identificarse que se trata de una instruccin
de salto, se vaca el pipeline. Si bien la direccin de salto se conoce al final de la etapa
de decodificacin (D), el sentido del salto se conoce al final de la etapa de ejecucin (E).
Por tanto, la captacin de la instruccin se repite en el ciclo siguiente (ciclo N+3).
Congelacin del Pipeline (equivalente a vaciado en rendimiento):
SALTO: (1) XXXX

(n-1) BNZ R1, SALTO


(n) YYYYY

M
W
F(1) D X

Cuando hay saltos y se utiliza la tcnica de vaciado del pipe (o congelacin del pipe que
se considera equivalente) la direccin de salto efectiva se calcula en la fase de ejecucin
(al final), por tanto no puedes realizar el fetch de la siguiente instruccin hasta que no
termine la fase de ejecucin. Ten en cuenta que el registro contador de programa no est
en el banco de registro y por tanto no se actualiza en la etapa de W. Con o sin forwarding
se actualiza en la etapa E, una vez que se ha usado la ALU para determinar la direccin
efectiva
Salto Tomado: (en este caso acierta)
SALTO: (1) XXXX

(n-1) BNZ R1, SALTO


(n) YYYYY

D
X
F(1) D

M
X

W
M W

Nota: Cuando hay prediccin de salto lo que se hace es colocar en la etapa de


decodificacin un circuito comparador para saber si va a ser efectivo el salto y por tanto
cuando termina la fase de decodificacin se sabe qu instruccin hay que ejecutar a
continuacin.
Salto NO Tomado: (en este caso se equivoca)
SALTO: (1) XXXX

(n-1) BNZ R1, SALTO


(n) YYYYY

D
X
M W
F(n) F(1) D X M W

Nota: Cuando hay prediccin de salto lo que se hace es colocar en la etapa de


decodificacin un circuito comparador para saber si va a ser efectivo el salto y por tanto
cuando termina la fase de decodificacin se sabe qu instruccin hay que ejecutar a

continuacin.
Ms de un ciclo en fase de memoria:
Cuando la fase de Memoria utilice ms de un ciclo slo se considerar la extensin de
esos ciclos para las instrucciones de acceso a memoria (LD ,ST). Ejemplo con 2 ciclos
para acceso a memoria.
1 2 3 4 5
6
7
Ld R1, 0(R2) F D E M M
W
ADD
F D E M W
R3,R4,1
ADD
F D E
M W
R5,R6,2
ST R7,R8,1
F D
E
M
M W

Clculo de ciclos por iteracin con dependencias entre iteraciones:


Si en la 2 y sucesivas iteraciones de un bucle hay dependencias con la 1 iteracin (o
anteriores), el esquema de clculo del nmero de ciclos no puede realizarse basndose
slo en 1 iteracin, habra que realizar, al menos 2.
Ejemplo sin Fordwarding, con prediccin salto tomada y suponiendo que repites el bucle
varias veces:
I1
I2

Bucle:ADD R1, R1,R2


BNEZ R3,bucle
Bucle:ADD R1, R1,R2
BNEZ R3,bucle
Bucle:ADD R1, R1,R2
BNEZ R3,bucle

1 2
F D
F

3
E
D
F(I1)

4
M
E
-

5
W
M
D
F

10

W
E
D
F(i1)

M
E
-

W
M
D
F

W
E
D

M
W

Hay dependencia RAW entre la primera ejecucin de la instruccin 1 y la 2 ejecucin de


la instruccin 1. Luego la fase D de la 2 ejecucin de la instruccin 1 tiene que esperar a
la fase W de la primera ejecucin de la inst. 1.
Por tanto en este caso no podemos suponer que, si hay 100 iteraciones el nmero de
ciclos ser de (2*100+4) (el 2 porque el 2 fetch de la instruccin 1 se produce en el ciclo
3 y el 4 porque desde el ciclo 3 hasta el final de BNEZ quedan 4 ciclos).
En este caso diremos que si se ejecuta el bucle 100 veces, la primera iteracin consume 2
ciclos, la iteracin 100 consume 7 ciclos y las iteraciones de la 2 a la 98 consumen 3
ciclos.
Diferenciar entre dos fases y fase con dos ciclos:
Hay que tener en cuenta que no es lo mismo que una fase ocupe dos ciclos (no puede
haber dos instrucciones en la misma fase), que una fase est dividida en dos segmentos
diferentes (F1 y F2 por ejemplo).
Ejemplo con dos ciclos para la fase de fetch:
ADD R2, R2,R5
SUB R3, R1, R4

D
F

X
F

M
D

W
X M

Ejemplo con el fetch dividido en dos fases diferentes:


ADD R2, R2,R5
SUB R3, R1, R4

F1 F2 D X
F1 F2 D

M
X

W
M W

Tipo 3: Arquitectura superescalar


Las arquitecturas superescalares pretenden ejecutar ms de una instruccin por ciclo, o lo
que es lo mismo, obtener un CPI < 1.0. Para ello utilizan p pipelines donde la emisin de
las instrucciones se puede realizar simultneamente en cualquiera de ellos siempre y
cuando no existan dependencias de datos.
-

3.1 con emisin en orden una instrucciones posterior en el flujo de


instrucciones no puede adelantar a una instruccin anterior.
3.2 emisin fuera de orden una instruccin posterior en el flujo de
instrucciones puede adelantar a una instruccin anterior, siempre y cuando no
existan riesgos de datos entre ellas. Se aprovechan los stall para reordenar las
instrucciones que no tienen dependencias de datos con las instrucciones que estn
ya en el pipeline. El reordenamiento de instrucciones lo realiza el compilador.

Tipo 4: Desenrollar bucles:


Tcnica de explotacin de ILP que obtiene su ventaja de los bucles que se ejecutan
dentro de nuestros programas.
Se replica el cuerpo del bucle n veces. Al replicar el cuerpo del bucle, reducimos el
nmero de instrucciones necesarias para actualizar los ndices y acceder a distintas
posiciones de memoria.
Se debe tener especial cuidado en renombrar los registros utilizados en las replicaciones
y en corregir las condiciones de salida del bucle as como los ndices de memoria que
usa.
El nuevo nmero de iteraciones se calcula como: i=nmero de iteraciones/n.
Si i no es un nmero exacto (nmero de iteraciones mod n) se podran realizar fuera
del bucle. Para incrementar el ILP adems se puede usar:
4.1 emisin en orden
4.2 emisin fuera de orden
Ejemplo transpa 5 (semana 3).
Procesador Segmentado en 5 etapas: F,D,X,M,WB
Ejercicio 1.a) Dependencia de datos
-Read After Write
1)
2)
3)
4)
5)

R1: LD R1 0(R2)/DADDI R1,R1,#1


R1: LD R1 0(R2)/ SD R1 0(R2) dependencia
R1: DADDI R1,R1,#1/SD R1 0(R2)
R2: DADDI R2,R2,#4/DSUB R4,R3,R2
R4: DSUB R4,R3,R2/ BNEZ R4 Loop

-Write After Write


1) R1: LD R1 0(R2)/DADDI R1,R1,#1
-Write After Read
1) R2: LD R1 0(R2)/DADDI R2,R2,#4
2) R2: SD R1 0(R2)/DADDI R2, R2, #4

Ejercicio 1.b) segmentacin 5 etapas/NO forwarding/congelacin del pipeline, M=1 ciclo


Instruccin
LD R1 0(R2)
DADDI R1 R1 #1
SD R1 0(R2)
DADDI R2 R2 #4
DSUB R4 R3 R2
BNEZ R4 Loop
I_next

1
F

2
D
F

3
X
-

4
M
-

5
W
D
F

X
-

M
-

W
D
F

10

11

X
D
F

M
X
-

W
M
-

12

13

14

15

16

17

18

W
D
F

X
-

M
-

W
D
-

X
-

M
F

W
D

Nmero de ciclos bucle= Numero de iteraciones * ciclos por iteracin + ciclos extra
Suponiendo nmero de iteraciones=396/4=99
Nmero de ciclos por iteracin = ciclo 1-ciclo16=16
Ciclos extra = ciclos para que la ltima instruccin salga del pipeline (en amarillo)=2
Nmero de ciclos del bucle = 99*16+2=1586
Ejercicio 1.a) segmentacin 5 etapas/forwarding/No tomado, M=1 ciclo
Instruccin
LD R1 0(R2)
DADDI R1 R1 #1
SD R1 0(R2)
DADDI R2 R2 #4
DSUB R4 R3 R2
BNEZ R4 Loop
I_next

1
F

2
D
F

3
X
D
F

4
M
-

5
W
X
D
F

M
X
D
F

W
M
X
D
F

W
M
X
-

10

11

12

13

14

W
M
D
F

W
X
F

M
D

W
X

15

Nmero de iteraciones=396/4=99
Nmero de ciclos por iteracin = ciclo 1-ciclo9=9
Ciclos extra = ciclos para que la ltima instruccin salga del pipeline (en amarillo)=3
Nmero de ciclos del bucle = 99*9+3=894
Ejercicio 1.b) segmentacin 5 etapas/forwarding/tomado, M=1 ciclo
Instruccin
LD R1 0(R2)
DADDI R1 R1 #1
SD R1 0(R2)
DADDI R2 R2 #4
DSUB R4 R3 R2
BNEZ R4 Loop
I_next

1
F

2
D
F

3
X
D
F

4
M
-

5
W
X
D
F

M
X
D
F

W
M
X
D
F

W
M
X
-

10

11

12

13

W
M
D
F

W
X
D

M
X

W
M

14

15

Nmero de iteraciones=396/4=99
Nmero de ciclos por iteracin = ciclo 1-ciclo8=8
Ciclos extra = ciclos para que la ltima instruccin salga del pipeline (en amarillo)=4
Nmero de ciclos del bucle = 99*8+4=796