Predicción de saltos
Stall pipeline

Es el esquema mas simple para manejar
los saltos. Hacer Freeze o flush del
pipeline, detener o borrar cualquier
instruccion despues del branch hasta que
el destino del branch sea determinado.
Ventaja: simple en Hardware y Software.
Predict Not Taken
Una mejor performance, y solo un poco mas
compleja. La idea es predecir siempre el
salto como NO TOMADO. El hardware
continua cargando las intrucciones como si
el branch no fuera tomado.
 Se debe tener cuidad de no cambiar la
maquina de estados (UC – PC) hasta que el
salto sea determinado feacientemente
 La complejidad se basa en:
se debe poder implementar un “vuelta atras”
por si el salto se toma.

Predict Not Taken
Predict Taken
Un esquema alternativo es predecir el
branch como siempre tomado.
 Tan pronto como el branch es
decodificado se calcula la dirección de la
nueva instrucción y continuando, desde
ese nuevo punto.

Delayed Branch

En un salto demorado, el ciclo de ejecución con
un salto de longitud n
Branch instr
sequential successor 1
sequential successor 2
.....
sequential successor n
Los sucesores secuenciales estan en los branchdelay slots. Estas instrucciones son ejecutadas sin
importar si se toma o no el salto.
Delayed Branch
Delayed Branch (compilador)

EL trabajo del compilador es hacer que la
sucesión de instrucciones sea valida y útil.
Existen 3 esquemas para predecir:
From before branch
From target
From fall through
Delayed
Branch
En Intel
asymmetric design in the Pentium:
The state follows the +arrows when the
branch instruction jumps, and the -arrows
when not jumping. The branch instruction is
predicted to jump next time if in state 2 or 3,
and to not jump when in state 0 or 1.
En Intel II
symmetric design:
This is how the branch prediction should work.
The state is incremented when jumping
(+arrows) and decremented when not jumping
(-arrows).
Descargar

Predicción de saltos