Beruflich Dokumente
Kultur Dokumente
r3,r4
t
6
R3
t
7
R5
2 SOLUCIONES
Prevencin
Deteccin y
Resolucin
En el programa del ejemplo, la dependencia que se denomina lectura despus de escritura (Read
After Write, o RAW) puede producirse entre las instrucciones I
2
e I
3
si la instruccin MUL lee el
contenido de R3 (en el ciclo 5) antes de que el resultado de la suma anterior (al final del ciclo 6) se
cargue en l. Obviamente, la operacin MUL no se ejecutar con los operandos esperados por el
programador, por lo que el resultado del programa ser incorrecto.
Hay dos opciones bsicas para resolver este problema de dependencia de datos; uno es mediante
la prevencin: evitando que pueda llegarse a esta situacin de dependencia; el otro es mediante
la deteccin y resolucin, es decir, no preocupndose de evitarlo, pero s de detectarlo en caso
de que se produzca y solucionarlo de alguna manera. Vemoslas en detalle.
Arquitectura de Computadores Segmentacin (Pipeline) - 16
Arquitectura de Computadores Segmentacin (Pipeline) - 16
Ralentizacin del Pipeline Dependencia de Datos
Prevencin de la Dependencia de Datos
El compilador debe retrasar la etapa de
ejecucin de la instruccin dependiente
reordenando las instrucciones
...
I
2
add R1,R2,R3
I
1
load R7,200
I
4
load R1,200
I
3
mul R3,R4,R5
I
5
load R2,300
...
...
I
1
load R7,200
I
2
add R1,R2,R3
I
3
mul R3,R4,R5
I
4
load R1,200
I
5
load R2,300
...
Ejemplo 1
La dependencia de datos: Prevencin.
El problema de la dependencia de datos entre una instruccin I
1
y otra instruccin I
2
que le sigue
puede prevenirse retrasando la ejecucin de I
2
un nmero K de etapas hasta que desaparezca el
problema de que I
2
lea un operando que I
1
no ha escrito todava. Este retraso puede conseguirse
insertando un nmero K de instrucciones entre I
1
e I
2
. Esto significa que el compilador tiene que
reordenar el programa para encontrar K instrucciones que puedan ejecutarse despus de I
1
y antes
de I
2
sin que por ello vare la estructura lgica del programa.
Ejemplo 1: En la transparencia tenemos el ejemplo de un programa en el que hay una
dependencia entre las instrucciones I
2
e I
3
a causa del registro R3. Como vemos, en este
programa el compilador puede detectar la dependencia de datos y reorganizar las instrucciones
para retardar el acceso al registro R3 hasta que est actualizado. Debe quedar claro que esta
reorganizacin solamente puede hacerse si se mantiene la semntica original del programa.
Por lo que hemos visto en el ejemplo de la pgina anterior, para evitar la dependencia de I
3
respecto a I
2
, se requiere que I
3
comience su ejecucin tres ciclos despus de que lo haga I
2
.
Como se puede apreciar, esto se ha conseguido con la reorganizacin que ha realizado el
compilador, intercambiando I
2
por I
1
e I
3
por I
4
.
Arquitectura de Computadores Segmentacin (Pipeline) - 17
Arquitectura de Computadores Segmentacin (Pipeline) - 17
Ralentizacin del Pipeline Dependencia de Datos
...Prevencin de la Dependencia de Datos
Ejemplo 2
...
I
1
load R1,200
I
2
add R1,R2,R3
I
3
mul R3,R4,R5
I
4
add #1,R3,R3
...
...
I
1
load R1,200
NOP
NOP
I
2
add R1,R2,R3
NOP
NOP
I
3
mul R3,R4,R5
I
4
add #1,R3,R3
...
Insertar NOP
...Y si no se pueden reordenar
las instrucciones sin alterar
la lgica del programa
!
Si el compilador no puede reorganizar el cdigo para encontrar estas K instrucciones que
decamos arriba, sin modificar la lgica del programa, debe insertar operaciones NOP (No
Operacin) entre I
1
e I
2
.
Ejemplo 2: En el ejemplo inferior tenemos el fragmento de un programa en el que tambin hay
dependencias entre las instrucciones I
1
, I
2
e I
3
. En este caso vemos que las instrucciones de
este fragmento no se pueden reordenar sin alterar la lgica del programa, por lo que el
compilador inserta las instrucciones NOP necesarias para evitar la ejecucin errnea de
instrucciones por las dependencias de datos.
La ventaja de la solucin basada en la prevencin es que no se requiere hardware adicional, pero
a expensas de un compilador ms complejo y una prdida de tiempo si es necesario insertar
instrucciones NOP (cuando no se puede reordenar el programa para insertar instrucciones tiles).
Arquitectura de Computadores Segmentacin (Pipeline) - 18
Arquitectura de Computadores Segmentacin (Pipeline) - 18
Ralentizacin del Pipeline Dependencia de Datos
Deteccin y Resolucin
Detener el Pipeline
- Anticipacin
load R7,200
t
1
F
add R1,R2,R3
t
2
D
F
mul R3,R4,R5
t
3
O
D
F
load R1,R2
load R3,R4
t
4
E
r1,r2
D
F
r3,r4
t
7
D
F
r7
t
5
D
F
t
6
r3
D
F
O
D
t
8
r5
E
O
t
9
La dependencia de datos: Deteccin y resolucin.
Este mtodo requiere un hardware adicional en la CPU, pues se deben detectar las dependencias
de datos durante la ejecucin y resolver estas dependencias. Detectarlas significa que debe darse
cuenta de que en un momento dado hay dos instrucciones arrancadas I
1
e I
2
, tal que I
2
depende de
un resultado establecido por I
1
. El dispositivo hardware que detecta estas dependencias se
denomina interlock. Resolver las dependencias significa hacer algo para retrasar la ejecucin de I
2
o para acelerar, en la medida de lo posible, la entrega a I
2
del resultado que produce I
1
.
Veamos dos posibilidades de resolucin (no excluyentes) para cuando se detecta una dependencia
de datos entre dos etapas del pipeline.
Detener el pipeline. La aproximacin ms sencilla para evitar los problemas de dependencias
de datos con ayuda del hardware es detener la actividad en las etapas necesarias del pipeline
hasta que desaparezca la dependencia, es decir, hasta que se pueda ejecutar correctamente
la instruccin dependiente. En el ejemplo de la transparencia, esto significa detener las
instrucciones que siguen a la instruccin add desde el ciclo 5 hasta que el registro R3 pueda
leerse debidamente actualizado en el ciclo 7.
Con esta estrategia, primero se detecta la dependencia y despus se detiene el pipeline a
partir de la instruccin dependiente hasta que desaparece la dependencia.
Arquitectura de Computadores Segmentacin (Pipeline) - 19
Arquitectura de Computadores Segmentacin (Pipeline) - 19
Ralentizacin del Pipeline Dependencia de Datos
op1 op2
Result.
ALU
R
e
g
s
.
F D
F
r1,r2
D
F
D
F
O
D
r5
E
O
r3
r3,r4
D
F
Deteccin y Resolucin
- Detener el Pipeline
Anticipacin
El otro modo de resolver las dependencias de datos mediante Deteccin y Resolucin es
acelerando, en la medida de lo posible, la entrega a una instruccin I
2
del resultado que produce
una instruccin previa I
1
. Vemoslo en detalle:
Anticipacin (data forwarding). En una dependencia de datos RAW, puede suceder que una
instruccin I
2
necesite un operando en la etapa O (obtencin de operandos) que debe
producirlo en el mismo ciclo la instruccin I
1
en su etapa E (ejecucin). Esto obligara a detener
la instruccin I
2
hasta que I
1
escriba el resultado y entonces pueda continuar I
2
en su etapa O y
leer el resultado que produjo I
1
.
Este retraso puede evitarse redirigiendo (forwarding) el resultado de la etapa E de la
instruccin I
1
directamente a la entrada de la etapa E o a la etapa O de la instruccin I
2
,
obteniendo el mismo efecto que se obtendra en la ejecucin de la etapa O de I
2
.
En la diapositiva se muestra el esquema de una CPU con hardware de anticipacin. Una vez
que en la etapa de ejecucin se tiene el resultado para escribir en R3, se dirige dicho resultado
directamente a la etapa de obtencin de operandos de la siguiente instruccin, sin esperar a
que finalice la etapa de escritura del resultado de la instruccin de suma.
En este caso no se consigue evitar totalmente la detencin del pipeline, pero s se evita un
ciclo de espera sobre la situacin en la que no hay anticipacin. La medida en que se
consigue evitar que se detenga el pipeline depende del nmero de etapas y de sus funciones.
Arquitectura de Computadores Segmentacin (Pipeline) - 20
Arquitectura de Computadores Segmentacin (Pipeline) - 20
Ralentizacin del Pipeline Bifurcaciones
8 ...
10 LOAD R7,200
12 ADD R1,R2,R3
14 MUL R3,R4,R5
16 LOAD R1,R2
18 LOAD R3,R4
20 JMP 24
22 SHR R2,#1
24 OR R2,R3,R2
26 JNZ 50
28 ADD #4,R6,R6
30 ...
Instrucciones
en direcciones
consecutivas de
memoria
Cul es la direccin
de la siguiente instruccin
?
La siguiente instruccin no
es la siguiente en memoria
!
Dir. Contenido
El flujo normal
de un programa
es secuencial
Ya hemos comentado que uno de los principales problemas en el diseo de un pipeline consiste en
asegurar el mantenimiento de un flujo constante de instrucciones alimentando sus diversas etapas
para as poder mantener tambin constante el ritmo de ejecucin de instrucciones (idealmente, una
por ciclo).
El flujo normal de ejecucin de un programa es secuencial, por lo que las instrucciones que se van
alimentando y ejecutando estn en direcciones consecutivas de memoria. Por desgracia, las
instrucciones de bifurcacin (que suelen representar alrededor del 20% de las instrucciones
ejecutadas) pueden romper el flujo constante de instrucciones alimentadas.
Cuando se alimenta una instruccin en la CPU, lo primero que se hace es incrementar el registro
Contador de Programa para conocer la direccin de la siguiente instruccin a ejecutar y extraerla.
Pero si se trata de una instruccin de salto, hasta que no llega a la etapa de ejecucin no se
establece en el Contador de Programa la direccin de la siguiente instruccin a ejecutar, por lo que
la etapa de alimentacin de instruccin no sabe por dnde seguir alimentando instrucciones.
Tenemos un problema con los saltos!
Arquitectura de Computadores Segmentacin (Pipeline) - 21
Arquitectura de Computadores Segmentacin (Pipeline) - 21
Ralentizacin del Pipeline Bifurcaciones
Dir. Contenido
tiempo
t
9
D
t
10
O
t
11
E
18 LOAD R3,R4
F
t
1
W
t
12
t
6
W
E
O
t
7
W
E
50
F
24
D
t
2
20 JMP 24
D
O
F
t
3
24 OR R2,R3,R2
t
4
O
E
D
F
??
26 JNZ 50
t
5
E
W
O
D
Huecos
de
retardo
t
8
W
F
50 LOAD R2,R4
Una instruccin de bifurcacin hace que la direccin de la siguiente instruccin a ejecutar no se
conozca hasta el momento justo de la ejecucin de la instruccin de bifurcacin (en la etapa de
ejecucin), por lo que la etapa de alimentacin no puede extraer la siguiente instruccin a una
bifurcacin hasta que esta ltima no finalice su etapa de ejecucin, y por lo tanto al terminar la
etapa de ejecucin, sta tendra que esperar hasta que se alimente la siguiente instruccin y vaya
avanzando por todas las etapas anteriores, que se habrn quedado vacas. A estas etapas vacas
que aparecen se las denomina huecos de retardo (delay slots).
En algunos sistemas, las bifurcaciones incondicionales pueden detectarse en la fase de
alimentacin o extraccin (fetch) si se le aade un poco hardware a esta primera etapa. Este
hardware de ayuda tambin extrae la direccin de salto, con lo que se puede proseguir la
extraccin de instrucciones de la direccin del salto.
Sin embargo, en el caso de las bifurcaciones condicionales no se puede hacer esto, pues puede
ocurrir que la condicin del salto se establezca precisamente en la etapa de ejecucin de la
instruccin anterior, con lo que no hay ms remedio que esperar a que la bifurcacin llegue a la
etapa de ejecucin para conocer la direccin de la siguiente instruccin. Esto quiere decir que se
debe detener la alimentacin de instrucciones al pipeline hasta que en la etapa de ejecucin se
averige la direccin de la siguiente instruccin
Afortunadamente, hay diversas tcnicas que pueden evitar o minimizar el impacto de las
instrucciones de bifurcacin, tales como la bifurcacin retardada, la prediccin del salto y
algunas ms. Veamos estas dos primeras tcnicas.
Arquitectura de Computadores Segmentacin (Pipeline) - 22
Arquitectura de Computadores Segmentacin (Pipeline) - 22
Ralentizacin del Pipeline Bifurcaciones
Bifurcacin Retardada
Estara bien aprovechar
los huecos de retardo
con instrucciones tiles
Deben ser instrucciones
que se ejecuten
SIEMPRE
Si una bifurcacin
produce h huecos
de retardo
El compilador debe insertar
h instrucciones despus de
la bifurcacin.
El efecto de la bifurcacin
se debe retardar h ciclos.
El problema de los saltos: Bifurcacin retardada.
Ya hemos visto que cuando entra una instruccin de salto en el pipeline, se producen h huecos de
retardo por lo que hay que esperar h ciclos hasta que llega la siguiente instruccin de la secuencia
a ejecutar. Estara bien que estos huecos se pudieran rellenar con instrucciones que siempre se
deban ejecutar, independientemente de si se toma la bifurcacin o no. Pero claro, si estas
instrucciones estn en memoria inmediatamente despus de la instruccin de bifurcacin, segn lo
que sabemos hasta ahora, no se ejecutaran si la instruccin de bifurcacin decide saltar. Para
conseguir que se ejecuten siempre las h instrucciones que siguen a una bifurcacin, en los
procesadores que tienen bifurcaciones retardadas, las instrucciones de salto no tienen efecto hasta
h instrucciones despus de su ejecucin, por lo que independientemente del resultado de la
ejecucin de la bifurcacin, siempre se ejecutan las h instrucciones siguientes. De esta manera no
se producen los huecos de retardo.
Arquitectura de Computadores Segmentacin (Pipeline) - 23
Arquitectura de Computadores Segmentacin (Pipeline) - 23
Ralentizacin del Pipeline Bifurcaciones
CPU SIN bifurcaciones retardadas
CPU CON bifurcaciones retardadas (h = 3)
- Cuando NO se toma la bifurcacin:
- Cuando S se toma la bifurcacin:
- Cuando S se toma la bifurcacin:
- Cuando NO se toma la bifurcacin:
I
1
I
2
I
3
I
4
I
5
I
6
I
7
I
8
I
9
I
10
I
11
I
12
...
I
1
I
2
I
3
I
4
I
5
I
6
I
11
I
12
...
I
1
I
2
I
3
I
4
I
5
I
6
I
7
I
8
I
9
I
10
I
11
I
12
...
I
1
I
2
I
3
I
4
I
5
I
6
I
7
I
8
I
9
I
11
I
12
...
Supongamos la serie de instrucciones de la transparencia, en la que I
6
es la instruccin de salto
condicional a la instruccin I
11
. En una CPU sin saltos retardados, la secuencia de instrucciones
ejecutadas cuando la bifurcacin no tiene lugar es: I
1
, I
2
, I
3
, I
4
, I
5
, I
6
, I
7
, I
8
, I
9
, I
10
, I
11
, I
12
, ... Mientras
que cuando s se produce la bifurcacin, la secuencia es: I
1
, I
2
, I
3
, I
4
, I
5
, I
6
, I
11
, I
12
, ...
Si a este mismo procesador se le ponen bifurcaciones retardadas (con tres huecos de retardo), la
secuencia de instrucciones ejecutadas cuando se produce la bifurcacin es: I
1
, I
2
, I
3
, I
4
, I
5
, I
6
, I
7
, I
8
,
I
9
, I
11
, I
12
, ... Es decir I
7
, I
8
e I
9
se ejecutan siempre, haya o no bifurcacin.
Esto es as porque el efecto de la bifurcacin se retarda 3 ciclos de reloj, es decir, despus de
alimentar una instruccin de salto, se siguen extrayendo y ejecutando las instrucciones siguientes,
segn su orden en la memoria, durante 3 ciclos de reloj. Despus, se establece en el contador de
programa la direccin indicada en la instruccin de salto, con lo que la 4 instruccin despus de la
de salto, ser ya la correspondiente a la de la direccin indicada en dicha instruccin de salto.
Arquitectura de Computadores Segmentacin (Pipeline) - 24
Arquitectura de Computadores Segmentacin (Pipeline) - 24
Ralentizacin del Pipeline Bifurcaciones
...
...
I1: MOV #0,R2
I2: MOV #0,R7
I3: LD R8,VALOR
I4: ADD #1,R8
I5: CMP R2,R3
I6: BEQ I11
I7: ADD #1,R3
I8: ADD #2,R4
I9: MUL R3,R4
I10: ST R4,TOTAL
I11: ADD #1,R5
I12: ST R5,TOTAL
...
...
...
Programa
...
...
I1: MOV #0,R2
I2: MOV #0,R7
I3: LD R8,VALOR
I4: ADD #1,R8
I5: CMP R2,R3
I6: BEQ I11
I7: ADD #1,R3
I8: ADD #2,R4
I9: MUL R3,R4
I10: ST R4,TOTAL
I11: ADD #1,R5
I12: ST R5,TOTAL
...
...
...
Secuencia de
Ejecucin Cuando NO
se toma la Bifurcacin
Secuencia de
Ejecucin Cuando S
se toma la Bifurcacin
EJEMPLO
Ejecucin en procesador con 3 huecos de retardo en los saltos
...
...
I1: MOV #0,R2
I2: MOV #0,R7
I3: LD R8,VALOR
I4: ADD #1,R8
I5: CMP R2,R3
I6: BEQ I11
I7: ADD #1,R3
I8: ADD #2,R4
I9: MUL R3,R4
I11: ADD #1,R5
I12: ST R5,TOTAL
...
...
...
Veamos con un ejemplo el efecto de las bifurcaciones retardadas en un procesador con 3 huecos
de retardo en los saltos.
Supongamos que tenemos el fragmento de un programa como el de arriba a la izquierda. Ahora lo
ejecutaremos y veremos su comportamiento.
En el cuadro del medio tenemos la secuencia de ejecucin del programa en el caso en que, de
acuerdo a la instruccin de comparacin I
5
, en el salto condicional I
6
se decide continuar la
ejecucin sin tomar el salto, con lo que se continan ejecutando las instrucciones I
7
, I
8
, I
9
, I
10
,
I
11
, I
12
,
Ahora veamos en el cuadro de la derecha el comportamiento del programa cuando, en ejecucin,
s se debe tomar la bifurcacin de la instruccin I
6
. Como se puede observar, despus de la
ejecucin de la instruccin de salto I
6
, a pesar de que se determina que se debe saltar, se
continan ejecutando las 3 instrucciones siguientes: I
7
, I
8
e I
9
, y luego ya, s se salta a la
instruccin I
11
, como establece la sentencia de salto I
6
.
Arquitectura de Computadores Segmentacin (Pipeline) - 25
Arquitectura de Computadores Segmentacin (Pipeline) - 25
Ralentizacin del Pipeline Bifurcaciones
CPU con bifurcaciones retardadas (h = 3)
- Cuando S se toma la bifurcacin:
- Cuando NO se toma la bifurcacin:
I
1
I
5
I
6
I
2
I
3
I
4
I
7
I
8
I
9
I
10
I
11
I
12
...
I
1
I
5
I
6
I
2
I
3
I
4
I
11
I
12
...
Conocido el retardo en las bifurcaciones, si es preciso,
reordenamos el cdigo para mantener la semntica del programa:
I
1
I
5
I
6
I
2
I
3
I
4
I
7
I
8
I
9
I
10
I
11
I
12
...
Ahora, la ejecucin ser as:
A partir de un fragmento de cdigo escrito para un procesador sin saltos retardados, si se va a
ejecutar en una CPU con saltos con 3 huecos de retardo, sabiendo lo que sucede en los
procesadores con bifurcaciones retardadas (tarda 3 ciclos en bifurcar realmente), vamos a intentar
reordenar nuestro fragmento de cdigo para que su ejecucin se produzca con la misma semntica
que la esperada en un procesador sin saltos retardados.
As, despus de la instruccin de salto vamos a poner 3 de las instrucciones que hay antes de la
de salto, es decir, 3 instrucciones que queremos que se ejecuten siempre (se produzca el salto o
no).
As, suponiendo que no se altera la semntica del programa, podramos mover las instrucciones I
2
,
I
3
e I
4
y ponerlas justo a continuacin de I
6
(la bifurcacin condicional), quedando entonces la
secuencia de instrucciones en memoria as:
I
1
, I
5
, I
6
, I
2
, I
3
, I
4
, I
7
, I
8
, I
9
, I
10
, I
11
, I
12
, ...
Ahora vamos a ejecutar este programa en nuestro procesador con bifurcaciones retardadas de 3
ciclos.
Cuando se no se produce la bifurcacin, la secuencia de instrucciones que se ejecuta es:
I
1
, I
5
, I
6
, I
2
, I
3
, I
4
, I
7
, I
8
, I
9
, I
10
, I
11
, I
12
, ...
Si la bifurcacin tiene lugar, las instrucciones se ejecutarn en este orden:
I
1
, I
5
, I
6
, I
2
, I
3
, I
4
, I
11
, I
12
, ...
Si no hubiese bifurcacin retardada, al alimentar una instruccin de salto condicional habra que
detener la alimentacin de instrucciones hasta que la instruccin de salto pasase por la etapa de
ejecucin (hasta saber cul es la siguiente instruccin a ejecutar). Con bifurcacin retardada se
aprovechan esos ciclos en alimentar y ejecutar instrucciones que se desea ejecutar
incondicionalmente antes de que la instruccin de bifurcacin tenga lugar (se salte o no).
Arquitectura de Computadores Segmentacin (Pipeline) - 26
Arquitectura de Computadores Segmentacin (Pipeline) - 26
Ralentizacin del Pipeline Bifurcaciones
... y si no se pueden reordenar
las instrucciones
sin alterar la lgica del programa
!
Insertar
Instrucciones
NOP
I
1
I
2
I
3
NOPNOPNOPI
11
I
12
...
Esta tcnica de los saltos retardados requiere la colaboracin del compilador, que debe saber
cmo reorganizar el cdigo para rellenar los huecos de retardo con instrucciones tiles (de la
misma manera que se haca con las dependencias de datos).
Si el compilador no encuentra una manera de reordenar el cdigo sin afectar a su semntica, debe
insertar operaciones NOP en los huecos de retardo.
Arquitectura de Computadores Segmentacin (Pipeline) - 27
Arquitectura de Computadores Segmentacin (Pipeline) - 27
Ralentizacin del Pipeline Bifurcaciones
Prediccin del Salto
load #50,R1
loop or R3,R4
...
...
sub #1,R1
bnz loop
add R1,R2
...
Ante un salto ... Una opcin
Suponer que siempre
se toma la bifurcacin
Cuando no se toma,
se vaca el pipeline.
El problema de los saltos: Prediccin del salto.
Otra tcnica para reducir el problema de las bifurcaciones consiste en intentar predecir si una
instruccin de bifurcacin saltar o no. Por ejemplo, una bifurcacin al final de un bucle salta al
comienzo de ste todas las veces excepto la ltima. Segn esto, sera ventajoso que cuando el
procesador se encuentra una instruccin de salto suponga que el salto s se va a efectuar
realmente, y cuando la etapa de alimentacin detecte una bifurcacin, empiece a extraer
instrucciones de la direccin de destino del salto. Si una vez que se ejecuta la instruccin de
bifurcacin, resulta que efectivamente se salta, la ejecucin contina normalmente, pues las
instrucciones de la direccin del salto son las que ya se estn alimentando. Si por el contrario
resulta que no se realiza el salto, se debe vaciar el pipeline (desechar todas las instrucciones
alimentadas) y empezar a alimentar las instrucciones que siguen en secuencia.
Arquitectura de Computadores Segmentacin (Pipeline) - 28
Arquitectura de Computadores Segmentacin (Pipeline) - 28
Ralentizacin del Pipeline Bifurcaciones
... Prediccin del Salto
Ante un salto ... Otra opcin
Suponer que nunca
se toma la bifurcacin
Cuando se toma,
se vaca el pipeline.
load #51,R1
loop sub #1,R1
bz fin
or R3,R4
...
bra loop
fin add R1,R2
...
Ejecucin Especulativa !
Ojo! Algunas instrucciones
pueden haber empezado a
ejecutarse
Si ahora suponemos que el control del bucle se realiza mediante una instruccin al comienzo del
mismo, ahora lo normal ser suponer que la bifurcacin no se tomar hasta la ltima pasada del
bucle. Es decir, hay veces que conviene suponer una cosa y otras veces otra.
Esto que hemos visto se denomina ejecucin especulativa, pues las instrucciones pueden
empezar a ejecutarse antes de que el procesador sepa que las instrucciones alimentadas son las
realmente correctas. Supongamos que se predice que el salto tendr lugar, por lo que se empiezan
a alimentar instrucciones y a pasarlas a las siguientes etapas del pipeline antes de que la
instruccin de bifurcacin finalice su etapa de ejecucin. Y si al ejecutar la bifurcacin no se
realiza el salto! Nos encontramos que algunas instrucciones ya se han empezado a ejecutar en las
etapas anteriores!
Con ejecucin especulativa se debe tener cuidado de que en las etapas anteriores a la de
ejecucin no se modifiquen registros o posiciones de memoria hasta que no se confirme que la
prediccin realizada ha sido la acertada.
Arquitectura de Computadores Segmentacin (Pipeline) - 29
Arquitectura de Computadores Segmentacin (Pipeline) - 29
Ralentizacin del Pipeline Bifurcaciones
El compilador puede
detectarlo y reflejarlo
mediante un cdigo
especial de operacin
... Prediccin del Salto
Hay situaciones en
las que casi siempre
se salta
Otras veces, casi
nunca
Mejor si el procesador
lleva la cuenta de cada
instruccin de salto
PREDICCIN DINMICA
PREDICCIN ESTTICA
La repeticin de la bifurcacin que se toma en el bucle la puede detectar el compilador y establecer
la prediccin mediante un cierto cdigo de operacin en la bifurcacin, lo que quiere decir que, en
ejecucin, siempre que se alimente esa instruccin de bifurcacin se har la misma prediccin. Por
esto, se la conoce como prediccin esttica. El PowerPC, por ejemplo, dispone de cdigos de
operacin para prediccin esttica.
La prediccin se puede mejorar si se realiza dinmicamente, para lo cual el hardware del
procesador debe establecer la posibilidad de que haya o no salto cada vez que se encuentre una
cierta instruccin de bifurcacin. Para ello, en la CPU se debe llevar la cuenta de los resultados de
las ltimas ejecuciones de cada bifurcacin. Ciertos estudios estadsticos dicen que conservando
solamente el resultado de la ltima ejecucin (con un bit) ya se obtiene una gran probabilidad de
acierto (del orden del 90%) y con la historia de las cuatro ltimas ejecuciones (dos bits) se mejora
ligeramente; manteniendo una historia mayor, la mejora es despreciable.