Documentos de Académico
Documentos de Profesional
Documentos de Cultura
6 Pipeline PDF
6 Pipeline PDF
de Computadores
6. CPU Segmentada (Pipeline)
1. Conceptos Bsicos
2. Causas de Ralentizacin
Arquitectura de Computadores
Segmentacin (Pipeline) - 1
En los dos captulos siguientes vamos a tratar dos formas de optimizar substancialmente la
arquitectura convencional que hemos estudiado hasta ahora. Esta mejora se centra en la CPU y en
la memoria.
En primer lugar empezaremos por mejorar las prestaciones de la CPU, que, en cuanto a velocidad,
se pueden mejorar mediante los procesadores segmentados (o en pipeline) los cuales incorporan
una tcnica para acelerar el ritmo de ejecucin de instrucciones.
Como veremos, hay diversos factores que pueden impedir un aprovechamiento ptimo del
concepto de pipeline en la CPU. Trataremos estos factores y las tcnicas para evitarlos en la
medida de lo posible.
Arquitectura de Computadores
Segmentacin (Pipeline) - 1
Conceptos Bsicos
Segmentacin (Pipeline)
Cmo aumentar la
velocidad del
procesador
Concurrencia
Construir circuitos ms
rpidos, pero
- A qu precio?
- Estado del arte?
Arquitectura de Computadores
Segmentacin (Pipeline) - 2
La velocidad de ejecucin de los programas depende de diversos factores. Una forma de aumentar
esta velocidad es hacer ms rpidos los circuitos con los que se construyen los procesadores y la
memoria principal. No obstante, se debe considerar el coste que supone una mejora y que el lmite
a esta velocidad lo impone el estado del arte actual de la tecnologa.
Otra posibilidad es organizar el hardware para poder ejecutar ms de una instruccin
simultneamente: concurrencia. La concurrencia se puede obtener en dos niveles: al nivel del
procesador y al nivel de la instruccin. La concurrencia al nivel de la CPU se obtiene disponiendo
de mltiples procesadores ejecutando simultneamente varias instrucciones. Obtener concurrencia
a nivel de la instruccin significa poder ejecutar varias instrucciones simultneamente con una
nica CPU. Este ltimo tipo de paralelismo se denomina segmentacin o encadenamiento, aunque
suele ser ms conocido por su denominacin en ingls: pipelining.
Las arquitecturas con mltiples procesadores suelen utilizarse en mquinas de muy altas
prestaciones (y muy alto precio). Sin embargo, con arquitecturas segmentadas se consigue una
muy buena mejora del rendimiento y a un coste asequible. Por esto, es normal que todos los
microprocesadores actuales de propsito general incorporen el pipelining. Ya que es muy comn
su utilizacin en los actuales procesadores, vamos a abordar aqu esta tcnica del pipelining,
mientras que las arquitecturas multiprocesador las dejaremos para asignaturas o textos de
arquitecturas paralelas o avanzadas.
Arquitectura de Computadores
Segmentacin (Pipeline) - 2
Conceptos Bsicos
Segmentacin (Pipeline)
Tar
tas
ACM
E
Tar
tas
ACM
E
Tar
tas
ACM
E
10 s
10 s
10 s
10 s
10 s
Segmentacin (Pipeline) - 3
Arquitectura de Computadores
Segmentacin (Pipeline) - 3
Conceptos Bsicos
Segmentacin (Pipeline)
Tar
tas
ACM
E
Tar
tas
ACM
E
Tar
tas
ACM
E
Tar
tas
ACM
E
Tar
tas
ACM
E
10 s
10 s
10 s
10 s
10 s
Tar
tas
ACM
E
Tar
tas
ACM
E
Segmentacin (Pipeline) - 4
Ahora supongamos que se dispone de una cadena de empaquetado de tartas con una cinta
transportadora sobre la que trabajan cinco operarios especializados en tareas distintas. El primer
operario pone la caja-1 en la cinta transportadora, y sta avanza hasta que la caja-1 est donde el
segundo operario, que introduce una tarta dentro de la caja-1, al mismo tiempo que el primer
operario pone otra caja-2 en la cinta. La caja-1 sigue avanzando hasta el tercer operario, que la
cierra y la precinta, al mismo tiempo que el segundo operario mete otra tarta en la caja-2 y el
primer operario pone otra caja-3 en la cinta. La caja-1 sigue su camino en la cinta pasando por el
cuarto operario, que pone una etiqueta, hasta llegar al quinto operario, que la retira de la cinta.
En el momento que el quinto operario retira la caja de la cinta, hay cuatro cajas ms en la cinta. Si
cada una de estas fases de empaquetado se realiza en 10 s, a partir de ahora, cada 10 s saldr
una nueva tarta empaquetada, en lugar de hacerlo cada 50 s que se tardaba cuando no haba
cadena de empaquetado. A partir de ahora, en tener 10 tartas empaquetadas se tardar solamente
100 segundos, mientras que en el caso de cuando se tena un solo operario se tardaba 500
segundos.
Debe quedar claro que aunque ahora sale una nueva tarta empaquetada cada 10 s, la preparacin
completa de cada tarta sigue requiriendo 50 s (igual que cuando haba una sola persona
preparando las tartas).
Arquitectura de Computadores
Segmentacin (Pipeline) - 4
Conceptos Bsicos
Segmentacin (Pipeline)
I1
Ejecucin
Secuencial
F1
I2
E1
F2
I3
E2
F3
E3
...
tiempo
Nueva
organizacin
del hardware
buffer
unidad
F
Instrucciones
I1
I2
I3
Arquitectura de Computadores
unidad
E
In
t1
t2
t3
F1
E1
F2 E2
t4
tiempo
F3 E3
Segmentacin (Pipeline) - 5
En una primera aproximacin, se puede observar que para ejecutar una instruccin en la CPU se
requieren 2 pasos:
1. Alimentacin o extraccin de la instruccin desde memoria (fetching).
2. Ejecucin de la instruccin.
En 1959, el ordenador Stretch de IBM, teniendo en cuenta que durante la fase de ejecucin hay
momentos en los que no se accede a memoria principal, aprovechaba para alimentar instrucciones
por adelantado y guardarlas en un buffer de prealimentacin, todo ello en paralelo con la ejecucin
de la instruccin en curso, con lo que al terminar de ejecutar dicha instruccin poda cargar la
siguiente instruccin directamente desde el buffer sin tener que esperar a traerla de memoria.
Esta tcnica de prealimentacin o prefetching puede verse como un pipeline de dos etapas. En la
primera etapa se alimenta una instruccin de memoria y se guarda en un buffer. La segunda etapa
toma una instruccin del buffer y la ejecuta. Mientras en la segunda etapa se est ejecutando una
instruccin, la primera etapa aprovecha (los ciclos en los que la segunda etapa no accede a
memoria) para leer la siguiente instruccin y guardarla en el buffer. Cuando la segunda etapa
acabe la ejecucin y vace el buffer de prealimentacin, la primera etapa puede volver a leer una
nueva instruccin de memoria.
Con estas dos etapas de alimentacin y ejecucin de instrucciones, parece que la velocidad de
ejecucin de instrucciones por segundo (rendimiento) se duplica. Y si nos fijamos en el ejemplo de
la lnea de empaquetado de tartas, tenemos que su velocidad de tartas empaquetadas por minuto
se multiplica por cinco cuando se establece una cadena de empaquetado de cinco etapas. Esto es
as, simplemente porque el nmero de etapas dice cuntas cosas se estn haciendo
simultneamente, y claro, cuantas ms mejor.
Arquitectura de Computadores
Segmentacin (Pipeline) - 5
Conceptos Bsicos
Segmentacin (Pipeline)
N de Etapas
Etapa
F
I1
I2
I3
N de acciones en paralelo
Etapa
D
Etapa
O
t1
t2
t3 t4
F1
D1 O1
t5
Etapa
E
t6
t7
E1 W1
F2 D2 O2
Etapa
W
tiempo
E2 W2
F3 D3 O3
Arquitectura de Computadores
E3 W3
Segmentacin (Pipeline) - 6
Segn lo que acabamos de ver, parece que interesa dividir las fases de ejecucin de las
instrucciones en ms etapas, para as obtener un mayor rendimiento en la ejecucin. Poco
despus del Stretch, UNIVAC sac el LARC, con 4 etapas. Actualmente, tenemos que el PowerPC
750 tiene 6 etapas; el Pentium de Intel consta de tres unidades de proceso en pipeline, cada una
dividida a su vez en varias etapas. El Motorola 68040 tena 6 etapas para el tratamiento de los
enteros.
La ejecucin de una instruccin podra descomponerse en las siguientes 5 etapas:
1.
2.
3.
4.
5.
F:
D:
O:
E:
W:
Si ahora la ejecucin de una instruccin est descompuesta en 5 etapas, cada etapa puede durar
aproximadamente 1/5 de la duracin total de la ejecucin de la instruccin. Si suponemos que la
duracin de un ciclo de reloj es igual a la duracin de cada una de estas pequeas etapas,
podemos decir, en principio, que con la tcnica del pipelining se consigue que a cada ciclo de reloj
finalice una instruccin, o lo que es lo mismo, una velocidad de instruccin por ciclo.
Arquitectura de Computadores
Segmentacin (Pipeline) - 6
Conceptos Bsicos
Segmentacin (Pipeline)
Ms etapas
Ms rendimiento
Por lo que hemos dicho hasta ahora, esta tcnica puede reducir el nmero de ciclos/instruccin en
un factor igual a la profundidad del pipeline (nmero de etapas). Segn esto, parece que cuanto
mayor sea el nmero de etapas de un pipeline, mayor es la velocidad de ejecucin.
Sin embargo, los diseadores del S/360 de IBM (aos 60) ya se dieron cuenta de que la cantidad
de lgica de control necesaria para gestionar y optimizar los buffers intermedios y las
dependencias entre las etapas del pipeline crece enormemente con el nmero de etapas, hasta el
punto de que esta lgica de control entre etapas puede llegar a ser ms compleja y costosa (en
tiempo) que la lgica propia de cada etapa.
Dada la conveniencia de un alto nmero de etapas, a medida que se consiguen avances en la
tecnologa, los procesadores cada vez disfrutan de un mayor nmero de etapas, consiguiendo as,
la correspondiente mejora en sus pretaciones.
Arquitectura de Computadores
Segmentacin (Pipeline) - 7
Conceptos Bsicos
Segmentacin (Pipeline)
Pipelining Paralelismo
(Especializacin) (Replicacin)
t1
t2
tiempo
I1 F1 D1 O1 E1 W1
I2
F1
I3
t3
D1 O1 E1
W1
F1
D1 O1 E1
W1
Segmentacin (Pipeline) - 8
Arquitectura de Computadores
Segmentacin (Pipeline) - 8
Conceptos Bsicos
Segmentacin (Pipeline)
Pipelining Paralelismo
(Especializacin) (Replicacin)
t1
I1
F1
D1 O1
E1 W1
I2
F2 D2 O2
E2 W2
tiempo
. . . . . . . . . . .
I3
F3 D3 O3
E3 W3
Segmentacin (Pipeline) - 9
Arquitectura de Computadores
Segmentacin (Pipeline) - 9
Conceptos Bsicos
Segmentacin (Pipeline)
Pipelining Paralelismo
(Especializacin) (Replicacin)
t1
I1
F1
I2
I3
D1 O1
t2
t3
tiempo
E1 W1
F2 D2 O2
E2 W2
F3 D3 O3
E3 W3
Segmentacin (Pipeline) - 10
En el caso del pipeline, la segunda instruccin puede comenzar en cuanto la primera instruccin
haya finalizado su primera etapa. A partir del momento en que se llena el pipeline (despus de
cinco ciclos) se tienen cinco instrucciones ejecutndose en distintas fases, y se puede empezar a
obtener un resultado por ciclo, pues finalizar una instruccin despus de cada ciclo.
Obsrvese que el rendimiento de un pipeline no depende exactamente del nmero de etapas,
sino de la duracin de su etapa ms larga.
Aunque con una organizacin totalmente distinta, en cuanto al rendimiento, el paralelismo y el
pipeline se pueden considerar equivalentes.
No olvidar que la tcnica de la segmentacin o pipelining mejora el rendimiento no el tiempo de
ejecucin de cada instruccin.
Arquitectura de Computadores
Segmentacin (Pipeline) - 10
Ralentizacin
Segmentacin (Pipelining)
Mantener siempre
activas todas las etapas
Pero
No Resulta Fcil
Motivos Estructurales
Dependencias de Operandos
Instrucciones de Bifurcacin
Arquitectura de Computadores
Segmentacin (Pipeline) - 11
Una vez elegido el nmero ptimo de etapas, para que el factor de aceleracin sea igual al nmero
de etapas se requiere que todas las etapas del pipeline siempre estn llenas de instrucciones
tiles, y que nada retrase el avance de las instrucciones a travs del pipeline.
Por desgracia, no es fcil mantener siempre ocupadas todas las etapas del pipeline. Hay tres
causas que lo impiden:
Motivos estructurales.
Dependencias de operandos.
Instrucciones de bifurcacin.
En las siguientes transparencias las comentaremos con cierto detalle.
Arquitectura de Computadores
Segmentacin (Pipeline) - 11
Motivos Estructurales
El Pipeline
SE DETIENE
Arquitectura de Computadores
- Acceso a operandos
Segmentacin (Pipeline) - 12
Como ya veremos, se tiende a que la ejecucin de cada etapa se realice en un ciclo de reloj. Pues
bien, cuando una etapa no es capaz de realizar su cometido en un ciclo de reloj, el pipeline
se detiene hasta que dicha etapa finaliza su trabajo. Hay varias causas estructurales (arquitectura
del pipeline) que pueden hacer que el pipeline se detenga.
Por ejemplo, puede ocurrir que no todas las etapas sean de la misma duracin, con lo que
alguna etapa de corta duracin debera esperar a que acabe la siguiente que es ms larga. Esto
har que la duracin efectiva de cada etapa sea igual a la duracin de la etapa ms larga.
Normalmente los procesadores actuales tienden a un alto nmero de etapas, con lo que
automticamente tienden a igualarse los tiempos.
Otra cosa que tambin puede ocurrir es que desde varias etapas se quiera acceder a memoria
simultneamente (por ejemplo en la etapa de alimentacin de instruccin y en la escritura del
resultado). Y, claro, si una etapa se detiene para esperar a poder realizar el acceso a memoria, el
pipeline se para.
Tambin tenemos que considerar que no todas las instrucciones hacen las mismas cosas, por
lo que requieren tiempos distintos de CPU. Pasemos a la siguiente pgina para tratar este caso
con ms detalle.
Arquitectura de Computadores
Segmentacin (Pipeline) - 12
Motivos Estructurales
t1
t2
t3 t4
F1
D1 O1
t5
t6
t10 t11
tiempo
E3 W3
F4 F4 F4 D4 O4
I5
t9
E2 W2
F3 D3 D3 D3 O3
I4
t8
E1 W1
F2 D2 O2 O2 O2
I3
t7
E4 W4
F5 D5 O5
E5 W5
Arquitectura de Computadores
Segmentacin (Pipeline) - 13
No todas las instrucciones hacen las mismas cosas y requieren el mismo tiempo de CPU.
Unas pueden necesitar ms tiempo en la etapa de ejecucin (por ejemplo, la carga o escritura de
un registro requiere menos trabajo de ALU que una divisin en coma flotante), mientras que otras
pueden necesitar ms tiempo para obtener los operandos o escribir el resultado (si estn en
memoria principal se tarda ms que si estn en registros).
En el ejemplo de la transparencia vemos que la instruccin I2 no puede completar la fase de
alimentacin de operandos en el ciclo 4, necesitando para ello tambin los ciclos 5 y 6. Esto hace
que en el 5 ciclo no pueda alimentarse la instruccin I5 por estar ocupada la etapa de extraccin
de instruccin, debiendo esperar sta al ciclo 7 para poder continuar extrayendo instrucciones.
Obsrvese que como consecuencia del sobretiempo de O2, al trmino de los ciclos 6 y 7 no finaliza
ninguna instruccin (lo cual va en perjuicio del rendimiento).
Puede suceder incluso que alguna de las etapas ni siquiera necesite ejecutarse. Por ejemplo,
en un procesador cuya ltima etapa se dedique a escribir en memoria principal, la carga de un
registro no requerir dicha ltima etapa. En este caso, simplemente suceder que cuando una
instruccin corta va despus de una normal, ambas finalicen su ejecucin simultneamente, y en el
siguiente ciclo de reloj no termine ninguna instruccin; por lo tanto, el rendimiento no vara.
Aqu, para simplificar el problema, supondremos que todas las instrucciones pasan por todas las
etapas y que todas son de la misma duracin.
Nos permitimos realizar estas simplificaciones para poder centrarnos en las principales causas de
la ralentizacin del pipeline: las dependencias de datos y las bifurcaciones. Vemoslas a
continuacin.
Arquitectura de Computadores
Segmentacin (Pipeline) - 13
Si dos o ms
instrucciones
comparten un dato
Dependencia
de Datos
Arquitectura de Computadores
Dependencia de Datos
add R1,R2,R3
mul R3,R4,R5
...
- RAW
- WAR
- WAW
Segmentacin (Pipeline) - 14
Las dependencias de datos se producen cuando dos instrucciones comparten un dato (operando o
resultado). La situacin es la siguiente: Una instruccin Ij actualiza el valor de una variable, pero
una instruccin posterior, Ik, accede a esa variable antes de que Ij haya terminado la operacin.
Hay tres tipos de dependencias de datos, pero aqu vamos a comentar solamente el ms evidente,
el que se denomina lectura despus de escritura (Read After Write, o RAW).
Arquitectura de Computadores
Segmentacin (Pipeline) - 14
Dependencia de Datos
Dependencia
RAW I
1
I2
I3
I4
I5
...
load
add
mul
load
load
...
load R7,200
add R1,R2,R3
mul R3,R4,R5
Arquitectura de Computadores
2 SOLUCIONES
R7,200
R1,R2,R3
R3,R4,R5
R1,200
R2,300
Prevencin
Deteccin y
Resolucin
t1
t2
t3
t4
t5
t6
R7
r1,r2
R3
r3,r4
t7
R5
Segmentacin (Pipeline) - 15
En el programa del ejemplo, la dependencia que se denomina lectura despus de escritura (Read
After Write, o RAW) puede producirse entre las instrucciones I2 e I3 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) - 15
Dependencia de Datos
R7,200
R1,R2,R3
R3,R4,R5
R1,200
R2,300
Arquitectura de Computadores
I2
I1
I4
I3
I5
...
add
load
load
mul
load
...
R1,R2,R3
R7,200
R1,200
R3,R4,R5
R2,300
Segmentacin (Pipeline) - 16
Arquitectura de Computadores
Segmentacin (Pipeline) - 16
Dependencia de Datos
Arquitectura de Computadores
Insertar NOP
I1
R1,200
R1,R2,R3
R3,R4,R5
#1,R3,R3
I2
I3
I4
...
load
NOP
NOP
add
NOP
NOP
mul
add
...
R1,200
R1,R2,R3
R3,R4,R5
#1,R3,R3
Segmentacin (Pipeline) - 17
Arquitectura de Computadores
Segmentacin (Pipeline) - 17
Dependencia de Datos
Deteccin y Resolucin
load R7,200
add R1,R2,R3
mul R3,R4,R5
Detener el Pipeline
- Anticipacin
t1
t2
t3
t4
r7
r1,r2
r3
load R1,R2
load R3,R4
Arquitectura de Computadores
t5
t6
t7
t8
t9
r3,r4
r5
Segmentacin (Pipeline) - 18
Arquitectura de Computadores
Segmentacin (Pipeline) - 18
Dependencia de Datos
Regs.
Deteccin y Resolucin
op1
op2
ALU
Result.
Arquitectura de Computadores
- Detener el Pipeline
Anticipacin
r1,r2
r3
r3,r4
r5
Segmentacin (Pipeline) - 19
Arquitectura de Computadores
Segmentacin (Pipeline) - 19
Bifurcaciones
Dir.
8
10
12
14
16
18
20
22
24
26
28
30
Contenido
...
LOAD
ADD
MUL
LOAD
LOAD
JMP
SHR
OR
JNZ
ADD
...
R7,200
R1,R2,R3
R3,R4,R5
R1,R2
R3,R4
24
R2,#1
R2,R3,R2
50
#4,R6,R6
Arquitectura de Computadores
El flujo normal
de un programa
es secuencial
Instrucciones
en direcciones
consecutivas de
memoria
La siguiente instruccin no
es la siguiente en memoria
Cul es la direccin
de la siguiente instruccin
!
?
Segmentacin (Pipeline) - 20
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) - 20
Bifurcaciones
Dir. Contenido
18 LOAD R3,R4
20 JMP 24
24 OR R2,R3,R2
26 JNZ 50
t24
D O
F
E W
D O
F
t??
E W
D O
E W
t50
50 LOAD R2,R4
D O
E W
Huecos
de
retardo
Arquitectura de Computadores
Segmentacin (Pipeline) - 21
Arquitectura de Computadores
Segmentacin (Pipeline) - 21
Bifurcaciones
Bifurcacin Retardada
Si una bifurcacin
produce h huecos
de retardo
Arquitectura de Computadores
Segmentacin (Pipeline) - 22
Arquitectura de Computadores
Segmentacin (Pipeline) - 22
Bifurcaciones
Arquitectura de Computadores
Segmentacin (Pipeline) - 23
Arquitectura de Computadores
Segmentacin (Pipeline) - 23
#0,R2
#0,R7
R8,VALOR
#1,R8
R2,R3
I11
#1,R3
#2,R4
R3,R4
R4,TOTAL
#1,R5
R5,TOTAL
Arquitectura de Computadores
Bifurcaciones
Secuencia de
Ejecucin Cuando NO
se toma la Bifurcacin
...
...
I1: MOV
I2: MOV
I3: LD
I4: ADD
I5: CMP
I6: BEQ
I7: ADD
I8: ADD
I9: MUL
I10: ST
I11: ADD
I12: ST
...
...
...
#0,R2
#0,R7
R8,VALOR
#1,R8
R2,R3
I11
#1,R3
#2,R4
R3,R4
R4,TOTAL
#1,R5
R5,TOTAL
Secuencia de
Ejecucin Cuando S
se toma la Bifurcacin
...
...
I1: MOV
I2: MOV
I3: LD
I4: ADD
I5: CMP
I6: BEQ
I7: ADD
I8: ADD
I9: MUL
I11: ADD
I12: ST
...
...
...
#0,R2
#0,R7
R8,VALOR
#1,R8
R2,R3
I11
#1,R3
#2,R4
R3,R4
#1,R5
R5,TOTAL
Segmentacin (Pipeline) - 24
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 I5, en el salto condicional I6 se decide continuar la
ejecucin sin tomar el salto, con lo que se continan ejecutando las instrucciones I7, I8, I9, I10,
I11, I12,
Ahora veamos en el cuadro de la derecha el comportamiento del programa cuando, en ejecucin,
s se debe tomar la bifurcacin de la instruccin I6. Como se puede observar, despus de la
ejecucin de la instruccin de salto I6, a pesar de que se determina que se debe saltar, se
continan ejecutando las 3 instrucciones siguientes: I7, I8 e I9, y luego ya, s se salta a la
instruccin I11, como establece la sentencia de salto I6.
Arquitectura de Computadores
Segmentacin (Pipeline) - 24
Bifurcaciones
Arquitectura de Computadores
Segmentacin (Pipeline) - 25
Arquitectura de Computadores
Segmentacin (Pipeline) - 25
Bifurcaciones
Insertar
Instrucciones
NOP
I1I2I3NOPNOPNOPI11I12...
Arquitectura de Computadores
Segmentacin (Pipeline) - 26
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) - 26
Bifurcaciones
R3,R4
...
...
sub
#1,R1
bnz
loop
add
...
R1,R2
Arquitectura de Computadores
Una opcin
Suponer que siempre
se toma la bifurcacin
Cuando no se toma,
se vaca el pipeline.
Segmentacin (Pipeline) - 27
Arquitectura de Computadores
Segmentacin (Pipeline) - 27
Bifurcaciones
#1,R1
fin
R3,R4
Otra opcin
Suponer que nunca
se toma la bifurcacin
Cuando se toma,
se vaca el pipeline.
...
fin
bra
loop
add
...
R1,R2
Arquitectura de Computadores
Ejecucin Especulativa !
Ojo! Algunas instrucciones
pueden haber empezado a
ejecutarse
Segmentacin (Pipeline) - 28
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) - 28
Bifurcaciones
El compilador puede
detectarlo y reflejarlo
mediante un cdigo
especial de operacin
PREDICCIN ESTTICA
Mejor si el procesador
lleva la cuenta de cada
instruccin de salto
PREDICCIN DINMICA
Arquitectura de Computadores
Segmentacin (Pipeline) - 29
Arquitectura de Computadores
Segmentacin (Pipeline) - 29