Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de altas prestaciones
TEMA 3
ILP, Panificación dinámica,
Predicción de saltos, Especulación
Abril 2008
2 Contenidos
Introducción: ILP
Técnicas SW: Compilador
Planificación dinámica. Algoritmo de Tomasulo.
Tratamiento de dependencias de control: Predicción de saltos
Tratamiento de saltos
Técnicas de predicción: Estáticas y dinámicas
Especulación
Bibliografía
o Cap 2 [HePa07]
o Capítulos 4 , 7 y 8 de [SiFK97]
o Simulador DLXview
3 Introducción
OBJETIVO: Ejecutar el mayor numero de instrucciones por ciclo
Técnica Reduce
Planificación Dinámica Paradas por riesgos de datos
Predicción dinámica de saltos Paradas por riesgos de control
Lanzamiento múltiple CPI Ideal
Dinámicas Varias instrucciones por ciclo
Especulación Riesgos de datos y control
Dynamic memory disambiguation Paradas por riesgos de datos
en memoria
Desenrollado de bucles Paradas por riesgos de control
Planificación por el compilador Paradas por riesgos de datos
Software pipelining CPI Ideal y Paradas por
Estáticas riesgos de datos
Predicción estática y Especulación CPI Ideal, paradas por riesgos
por el Compilador de datos y control
6 Dependencias
Tipos de Dependencias
Dependencias de datos
Dependencia verdadera (LDE)
Dependencias de nombre
- Antidependencia (EDL)
- Dependencia de salida (EDE)
Dependencias de control
o La instrucción i depende de j
i produce un resultado que usa j
j depende de k y k depende de i
LD F0,0(R1)
ADDD F4,F0,F2
8 Dependencias
Dependencias de control
If P1 (
S1;
);
if P2 (
S2;
)
S1 depende de P1 ; S2 depende de P2
Dependencias de datos
Dependencias de control
En general:
• Una instrucción dependiente de un salto no puede moverse antes del salto
• Una instrucción no dependiente de un salto no puede moverse después del salto
Efecto de las dependencias de control sobre el orden de las excepciones
y el flujo de datos
LOAD FP STORE FP 0
Entera Entera 0
13 Técnicas SW explotar ILP
Ejecución en el procesador
Loop LD F0,0(R1)
ADDD F4,F0,F2 Expone más paralelismo y elimina saltos
SD 0(R1),F4
LD F6,-8(R1)
ADDD F8,F6,F2 Se elimina 3 saltos y 3 decrementos
SD -8(R1),F8
LD F10,-16(R1)
ADDD F12,F10,F2 Permanecen dependencias y paradas
SD -16(R1), F12
LD F14,-24(R1)
ADDD F16,F14,F2
SD -24(R1),F16 MÁS REGITROS = Renombrado por el Compilador
SUBI R1,R1,#32 (Imprescindible ??)
BNEZ R1,Loop
15 Técnicas SW de explotar ILP
Desenrollado + Planificación
Loop LD F0,0(R1)
LD F6,-8(R1)
LD F10,-16(R1)
LD F14,-24(R1)
ADDD F4,F0,F2
ADDD F8,F6,F2
ADDD F12,F10,F2
ADDD F16,F14,F2
SD 0(R1),F4
SD -8(R1),F4
SD -16(R1),F12
SUBI R1,R1,#32
BNEZ R1,Loop
SD 8(R1),F16; 8-32=24
Software “pipelining”
• Idea:
Iteración 5
Iteración SW
Pipelened
17
Técnicas SW de explotar ILP
Software “pipelining”
Antes: Unrolled 3 veces Después: Software Pipelined
1 LD F0,0(R1) 1 SD 0(R1),F4 ; Stores M[i]
2 ADDD F4,F0,F2 2 ADDD F4,F0,F2 ; Adds to M[i-1]
3 SD 0(R1),F4 3 LD F0,-16(R1); Loads M[i-2]
4 LD F6,-8(R1) 4 SUBI R1,R1,#8
5 ADDD F8,F6,F2 5 BNEZ R1,LOOP
6 SD -8(R1),F8
7 LD F10,-16(R1)
8 ADDD F12,F10,F2 SW Pipeline
9 SD -16(R1),F12
10 SUBI R1,R1,#24
overlapped ops
11 BNEZ R1,LOOP
Time
Loop Unrolled
Loop unrolling simbólico
•Maximiza la distancia resultado-uso
•Menor tamaño del código
•Llenado y vaciado del pipe solo una vez
Time
18
Técnicas SW de explotar ILP
Ejecución SW pipelined (suposición R1=1000)
F0 M(1000)
F4 F0 + F2 ; M(1000)+F2 Cabecera
F0 M(992)
--------------------------------------
M(1000) F4 ; M(1000)+F2 SD 0(R1),F4 ; Stores M[i]
F4 F0 + F2 ; M(992)+F2 ADDD F4,F0,F2 ; Adds to M[i-1]
Iteración 1
F0 M(984) LD F0,-16(R1); Loads M[i-2]
R1 992
----------------------------------------
M(992) F4 ; M(992)+F2
F4 F0 + F2 ; M(984)+F2 Iteración 2
F0 M(976)
R1 984
---------------------------------------
…
…
F0 M(0) ; Ahora R1=16 Iteración n
R1 8
---------------------------------------
M(8) F4 ; M(8)+F2
F4 F0 + F2 ; M(0)+F2 Cola
M(0) F4 ; M(0)+F2
19 Técnicas SW de explotar ILP
Comparación
Motivación:
Arquitectura 360, 4 registros FP( Pocos registros, muchas dependencias )
Arquitectura RM
UF segmentadas Add(3), Mul(2), Load (6), Stores (3)
De Memoria Registros FP
Cola Qi Vi
de Ope FP
Dir Valor Busy
TAGs
Load1
Load2 Load
Load3 Buffers
Load4
Load5 Qi Dir Vi Busy
Load6 Store
Buffers
TAGs Add1
Add2 Mult1
Add3 Mult2
Excepciones imprecisas
Issue en orden–- Ejecución fuera de orden—Finalización fuera de orden
23 Planificación Dinámica : Tomasulo
Tres estados para una instrucción en el algoritmo
1 Issue
Toma la instrucción de la cola de instrucciones. Envía la instrucción a la ER
correspondiente si hay entradas disponibles. Envía los operandos si están disponibles o
UF que los generara. En load/store si hay buffer libre.
(Copiar “Tag+Valor” de registros fuente sobre campos “Tag+Valor” de ER)
Marca registro destino (tag) con ID de la ER que ejecutará la instrucción
2 Ejecución
Monitoriza CDB para disponibilidad de operandos. Cuando lista manda ejecutar.
3 Escritura de resultados
Vía CDB en registros y estaciones de reserva (ER) y marca ER como libre.
Bus normal: dato + destino, “ va a “
CDB: dato + fuente, “ viene de”
No chequea riesgo EDE ni EDL (renombrado dinámico)
Componentes de las ER
Op: Operación a realizar
Vj, Vk: Valores de los operandos fuente
Store buffers tienen un campo V para el resultado que debe ser almacenado.
Qj, Qk: ER produciendo los operandos fuente Notar: Qj,Qk=0 => ready
Store buffers tienen Qi para ER produciendo el resultado
Busy: Indica ER ocupada
Estado de registro resultado—Indica la FU que producira el resultado para el Registro. En
blanco ninguna intrucción esta pendiente de escribir en el registro.
24 Planificación Dinámica : Tomasulo
Estado de registros
TAG VALOR
Estación de reserva
F0 X ??
Busy OP TAGj Valorj TAGk Valork
X yes + Y ?? Z ?? F2 Y ??
F4 Z ??
26 Planificación Dinámica : Tomasulo
Estado de registros
UF TAG VALOR
F0 0 25.77
(X,25.77)
F2 0 22.57
F4 0 3.2
CDB
Ciclo 1
Instuc J K Issue Ejecución escritura
Ocupada Dirección
LD F6 34+ R2 1 Load1 SI 34+R2
Load2 NO
LD F2 45+ R3
Load3 NO
MULT F0 F2 F4
SUBD F8 F6 F2
DIVD F10 F0 F6
ADDD F6 F8 F2
Tiempo FU Ocupada Operación S1 S2 ER.P.J ER.P:K
Vj Vk Qj Qk
Add1 NO
Add2 NO
Estado de ER Add3 NO
Mul1 NO
Mul2 NO
No hay bloqueo
Vj Vk Qj Qk
Add1 NO
Add2 NO
Estado de ER Add3 NO
Mul1 NO
Mul2 NO
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Load2 Load1
31
Planificación Dinámica:TOMASULO
Ciclo 3
Instuc J K Issue Ejecución escritura
Ocupada Dirección
LD F6 34+ R2 1 2-3 Load1 SI 34+R2
Load2 SI 45+R3
LD F2 45+ R3 2
Load3 NO
MULT F0 F2 F4 3
SUBD F8 F6 F2
DIVD F10 F0 F6
ADDD F6 F8 F2
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Mult1 Load2 Load1
32
Planificación Dinámica:TOMASULO
Ciclo 4
Instuc J K Issue Ejecución escritura
Ocupada Dirección
LD F6 34+ R2 1 2-3 4 Load1 NO
Load2 SI 45+R3
LD F2 45+ R3 2 3-4
Load3 NO
MULT F0 F2 F4 3
SUBD F8 F6 F2 4
DIVD F10 F0 F6
ADDD F6 F8 F2
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Mult1 Load2 M(34+R2) Add1
33
Planificación Dinámica:TOMASULO
Ciclo 6
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Mul1 M(45+R3) Add2 Add1 Mul2
F6 reasignado
34
Planificación Dinámica:TOMASULO
Ciclo 8
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Mul1 M(45+R3) Add2 M()-M() Mul2
35
Planificación Dinámica:TOMASULO
Ciclo 13
Instuc J K Issue Ejecución escritura
Ocupada Dirección
LD F6 34+ R2 1 2-3 4 Load1 NO
Load2 NO
LD F2 45+ R3 2 3-4 5
Load3 NO
MULT F0 F2 F4 3
SUBD F8 F6 F2 4 6-7 8
DIVD F10 F0 F6 5
ADDD F6 F8 F2 6 9-10 11
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU Mul1 M(45+R3) F8+M() M()-M() Mul2
36
Planificación Dinámica:TOMASULO
Ciclo 16
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU M*F4 M(45+R3) F8+M() M()-M() Mul2
37 Planificación Dinámica:TOMASULO
Estado de REG
F0 F2 F4 F6 F8 F10 F12
FU M*F4 M(45+R3) F8+M() M()-M() Mul2
38 Planificación Dinámica:TOMASULO
Suposiciones:
MULT 4 ciclos
En 1ª iter. Load 8 ciclos ( fallo ), en 2ª 1 ciclo (acierto)
Mostraremos dos iteraciones
39
Planificación Dinámica:TOMASULO
Bucle
F0 F2 F4 F6 F8 F10 F12
Estado de REG
FU
40
Planificación Dinámica:TOMASULO
Ciclo 1
Instuc J K Issue ejecución escritura Ocupada Dirección
Load1 SI 80
LD F0 0 R1 1 load2 NO
MULT F4 F0 F2 load3 NO Qi
SD F4 0 R1 store1 NO
LD F0 0 R1 store2 NO
MULT F4 F0 F2 store3 NO
SD F4 0 R1
Tiempo FU Ocupada Operación S1 S2 ER.P.J ER.P:K
Estado de ER Vj Vk Qj Qk
Add1
Loop LD F0,0(R1) Add2
MULTD F4,F0,F2
Add3
SD 0(R1),F4
Mul1
SUBI R1,R1,#8
Mul2
BNEZ R1,Loop
Ciclo 2
Instuc J K Issue Ejecución escritura Ocupada Dirección
Load1 SI 80
LD F0 0 R1 1 load2 NO
MULT F4 F0 F2 2 load3 NO Qi
SD F4 0 R1 store1 NO
LD F0 0 R1 store2 NO
MULT F4 F0 F2 store3 NO
SD F4 0 R1
Tiempo FU Ocupada Operación S1 S2 ER.P.J ER.P:K
Estado de ER Vj Vk Qj Qk
Add1
Loop LD F0,0(R1) Add2
MULTD F4,F0,F2
Add3
SD 0(R1),F4
Mul1 SI MULT R(F2) Load1
SUBI R1,R1,#8
Mul2
BNEZ R1,Loop
Ciclo 3
Ciclo 6
Cierre del bucle
Ciclo 7
Ciclo 10
Ciclo 11
Ciclo 15
Instuc J K Issue Ejecución escritura Ocupada Dirección
Load1 NO
LD F0 0 R1 1 2- 9 10 load2 NO
MULT F4 F0 F2 2 11-14 15 load3 SI 64 Qi
SD F4 0 R1 3 store1 SI 80 M()*F2
LD F0 0 R1 6 7-10 11 store2 SI 72 Mult2
MULT F4 F0 F2 7 12-15 store3 NO
SD F4 0 R1 8
Tiempo FU Ocupada Operación S1 S2 ER.P.J ER.P:K
Estado de ER Vj Vk Qj Qk
Add1
Loop LD F0,0(R1) Add2
MULTD F4,F0,F2
Add3
SD 0(R1),F4
Mul1
SUBI R1,R1,#8
Mul2 SI MULT M(72) R(F2)
BNEZ R1,Loop
Ciclo 16
Ciclo 17
Nomenclatura:
Fase Issue
Tipo de instrucción Esperar hasta que … Hacer …
Reg(D).Qi ← x
Reg(D).Qi ← x
Fase Ejecución
Tipo de instrucción Esperar hasta que … Hacer …
Fase Write
Tipo de Esperar hasta Hacer …
instrucción que …
Aritmética: (Ejecución Escribir sobre CDB: (x, RESUL)
D ← OP (S1, S2) completa en z (Si Reg(z).Qi) = x ) (Reg(z).Qi = 0) Y (Reg(z).Vi = RESUL)
ER(x)) Y z (Si ER(z).Qj) = x ) (ER(z).Qj = 0) Y (ER(z).Vj = RESUL)
(CDB z (Si ER(z).Qk) = x ) (ER(z).Qk = 0) Y (ER(z).Vk = RESUL)
disponible) z (Si SB(z).Qi) = x ) (SB(z).Qi = 0) Y (SB(z).Vi = RESUL)
ER(x).Busy = No
Load: (Acceso a Escribir sobre CDB: (x, RESUL)
D← memoria z (Si Reg(z).Qi) = x ) (Reg(z).Qi = 0) Y (Reg(z).Vi = RESUL)
Mem[Dirección] completo en z (Si ER(z).Qj) = x ) (ER(z).Qj = 0) Y (ER(z).Vj = RESUL)
LB(x)) Y (CDB z (Si ER(z).Qk) = x ) (ER(z).Qk = 0) Y (ER(z).Vk = RESUL)
disponible) z (Si SB(z).Qi) = x ) (SB(z).Qi = 0) Y (SB(z).Vi = RESUL)
LB(x).Busy = No
Store:
Mem[Dirección] Nada Nada
←S
54
Planificación Dinámica:TOMASULO
Permite el unrolling en HW
Complejidad
Excepciones imprecisas
55 Reduciendo la penalización de los saltos
Programas enteros una de cada 4-5 instrucciones. Flotantes 1 de cada 10-20 instrucciones
56 Reduciendo la penalización de los saltos
lloops fft
35 10 0
greep 90
gdi ff
30
gaw k
80
gcpp gaw k TeX
greep gccl
25 70 compress
espresso
compress gcpp
spi ce3 gccl
60
spi ce3
20
TeX gdi ff espresso
% 50
%
15
40
10 30
20
fft
5 lloops
10
0 0
Predicción
Idea Básica
Cuando se detecta una instrucción de salto condicional sin resolver
• Se supone o predice el camino del salto: tomado o no tomado (Taken - Untaken)
• Si el salto se predice como tomado se predice la dirección destino del salto
• La ejecución continúa de forma especulativa a lo largo del camino supuesto
Consideraciones generales
t1 t2 t3 t4 t5 t6 t7 t1 t2 t 3 t4 t5 t6 t7
Programa
I1 F D E M W Programa
I1 F D E M W
I1
I2 F D E M W I1
I2 I2 F D E M W
BR F D E I2
BR Target BR F D E
I4 F TA BR Target
I4 I4 F D TA
It F D E M W I4
• I5 F
• It+1 •
F D E M W • It F D E M W
Target: Itarget F D E M W
Target: Itarget It+1
Itarget+1 Retardo Itarget+1 Retardo
(1 ciclo) (2 ciclos)
Ojo retardo
mínimo
59
Tratamiento de Saltos: Predicción
Consideraciones generales
2) Predecir la dirección de la instrucción destino del salto
con un retardo mínimo (para saltos tomados)
t1 t2 t3 t4 t5 t6 t7
Programa
I1 F D E M W
I1
I2 F D E M W
I2
BR F D E
BR Target
It F D E M W
I4 TA
It+1
• F D E M W
• It+2
Target: Itarget
Itarget+1 Retardo
(0 ciclo)
Actualización de la BTAC +1
Dirección
L a BTAC se actualiza cuando se ejecuta Dirección
destino
de la Tag
la instrucción de salto y se conoce: Instrucción
del salto Taken / Not Taken
MUX
Sí el salto fue tomado
Sí el salto no fue tomado Dirección
de la
Si no estaba Si ya estaba Si estaba siguiente
en la BTAC en la BTAC en la BTAC instrucción
Predicción de saltos
Estática Dinámica
Fundamento: La probabilidad de que un salto sea tomado depende del tipo de salto
El salto es tomado para ciertos códigos de operación y no tomado para otros
Evolución
Predictores correlacionados
Predictores híbridos
66
Tratamiento de Saltos: Predicción
Predictores Dinámicos
Predictor de un BIT
• Utilizan un bit de predicción por cada instrucción de salto
• El bit de predicción refleja el comportamiento de la última ejecución de la instrucción
de salto
Indica si en la anterior ejecución el salto fue tomado o no
Predicción
• El salto se predice como Taken si en la última ejecución fue tomado
• El salto se predice como Not Taken si en la última ejecución no fue tomado
NT Inicio
FUNCIONAMIENTO
• Máquina de dos estados:
– Not taken (1)
– Taken (0) Taken Not taken NT
T
(1) (0)
• Registro de historia
– Contador saturado de 1 bit T
• Predicción
– Valor del registro de historia
Predicción
• Un salto que se toma repetidamente se predice como Taken
• Un salto que no se toma repetidamente se predice como Not taken
• Si un salto toma una dirección inusual una sola vez, el predictor mantiene la predicción usual
Funcionamiento
Máquina de cuatro estados: • Registro de historia
– Strongly not taken (00) – Contador saturado de 2 bits
– Weakly not taken (01) • Predicción
– Weakly taken (10) – bit más significativo del registro de historia
– Strongly taken (11)
Inicio T T
T
NT Weakly
Strongly Weakly Strongly
not taken not taken taken T Cambios de estado:
taken
(0 0) (0 1) (1 0) (1 1) T: el salto ha sido tomado
NT NT NT NT: el salto no ha sido tomado
EJEMPLOS
EJEMPLOS
• Gmicro 100 256 x 1 bit
• MC 68060 256 x 2 bit
• PowerPC 604 512 x 2 bit
• Pentium 256 x 2 bit
• R10000 512 x 2 bit
• R8000 1K x 1 bit
• PowerPC 620 2K x 2 bit
• PM1 1K x 2 bit
• PA 8000 256 x 3 bit
• Pentium II 512x2 bit
• Alpha 21164A 2K x 2 bit
• Pentium 4 4kx2bits
• AMD64 16Kx2bits
69
Tratamiento de Saltos: Predicción
Predictores Dinámicos: Implementación
1) Branch Target Buffer (BTB): bits acoplados
La BTB almacena
• La dirección destino de los últimos saltos tomados
• Los bits de predicción de ese salto
Dirección Dirección Bits de
de la Tag destino
Actualización de la BTB
predicción
instrucción del salto
de salto
Los campos de la BTB se actualizan después
de ejecutar el salto y se conoce:
• Si el salto fue tomado o no
MUX
Actualizar bits de predicción
Lógica de
• La dirección destino del salto BTA
Predicción
Actualizar BTA
Taken /
Predicción Implícita (sin bits de predicción) Not Taken
MUX
de la
El salto se predice como no tomado siguiente
+1 instrucción
DESVENTAJA: Sólo se pueden predecir aquellas instrucciones de salto que están en la BTB
70 Tratamiento de Saltos: Predicción
Predictores Dinámicos: Implementación
2) Tabla de historia de saltos (BHT): bits desacoplados
Existen dos tablas distintas:
• La BTAC, que almacena la dirección destino de los últimos saltos tomados
• La BHT, que almacena los bits de predicción de todos las instrucciones de salto condicional
Ventaja
Puede predecir instruc.que no están en la Dirección de la
BTAC (más entradas en BHT que en BTAC) instrucción de salto Bits de
Tag predicción
Desventaja Dirección
Aumenta el hardware necesario Tag destino
Taken /
del salto
2 tablas asociativas Not Taken
Acceso a la BHT
MUX
Lógica de
Predicción
• Usando los bits menos significativos de la dirección
– Sin TAGs Menor coste (opción + habitual)
BTA
– Compartición de entradas +1 BTA
Se degrada el rendimiento
• Asociativa por conjuntos MUX
– Mayor coste Tablas pequeñas
– Para un mismo coste hardware
Dirección de
Peor comportamiento la siguiente
BTAC BHT instrucción
71 Tratamiento de Saltos: Predicción
Predictores Dinámicos
Comportamiento
18% 18%18%
16%
14%
12% 12%
11%
10% 10%10%
9%9% 9%9%
8%
6%
5%5% 5%5%
4%
2%
1% 1%
0% 0% 0%0% 0%
nasa7 matrix300 tomcatv doducd spice fpppp gcc espresso eqntott li
4096 entrdas. 2bits por entrdada Entrdas ilimitadas. 2bits por entrada
1 = Taken
For (i=1; i<=4; i++) { } Patrón: {1110}
0 = Not Taken
Ejemplo:
BNEZ R1, L1 ; salto b1 (Salto si d ≠ 0)
ADDI R1, R0, #1 ; Como d=0, hacer d=1
b1: if (d = 0) then L1: SUBI R3, R1, #1 ; R3=d(R1)-1
d=1 BNEZ R3, L2 ; salto b2 (Salto si d≠ 1)
b2: if (d =1) then ..........
L2:
R3=0 d=1
R3≠0 d≠1
Predictores Dinámicos
Ejemplo ( continua )
Comportamiento del predictor de un bit. ( estado inicial “not taken” NT)
BNEZ R1, L1 ; salto b1 (Salto si d ≠ 0)
ADDI R1, R0, #1 ; Como d=0, hacer d=1
L1: SUBI R3, R1, #1 ; R3=d(R1)-1 Caso 1: d=0,1,2,…
BNEZ R3, L2 ; salto b2 (Salto si d≠ 1)
..........
L2:
0 no NT 1 no NT
1 si T 1 no NT
2 si T 2 si T
2 NT T T NT T T
0 T NT NT T NT NT
2 NT T T NT T T
0 T NT NT T NT NT
Muchos fallos de predicción
76 Tratamiento de Saltos: Predicción
Predictores Dinámicos
Solución
• Predictor de dos niveles (1,1):
Para cada salto existen 21 predictores de 1 bit. El comportamiento último salto
(1) determina el predictor que se usa.
• Predictor de dos niveles (m,n)
Para cada salto existen 2m predictores de n bits. El comportamiento de los últimos
m saltos determinan el predictor que se usa
Significado de los bit de predicción en un predictor (1,1)
Bits de Predicción si el Predicción si
predicción ultimo salto no el ultimo salto
tomado tomado
NT/NT NT NT
NT/T NT T
Dos predictores
de un bit T/NT T NT
T/T T T
Predictores Dinámicos
Dirección(4 bits)
4 predictores de 2-bits
Implementación para por salto (predictor
local)
Predictor de dos niveles (2,2)
con 16 entradas
11 11 Predicción
00 01 10 11
0 1
2-bits de historia Global de saltos (2 Saltos anteriores)
(Ejemplo: 01 = “not taken” Y “taken”)
79 Tratamiento de Saltos: Predicción
Predictores Dinámicos
Comportamiento
20,00%
18,00%
16,00%
14,00%
Frequency of Mispredictions
12,00%
11,00%
10,00%
8,00%
2,00%
1,00% 1,00%
0,00%
0,00%
nasa7 matrix300 tomcatv doducd spice fpppp gcc espresso eqntott li
4,096 entries: 2-bits per entry Unlimited entries: 2-bits/entry 1,024 entries (2,2)
80 Tratamiento de Saltos: Predicción
Predictores híbridos
Idea básica
• Cada uno de los predictores estudiados tiene sus ventajas y sus inconvenientes
• Combinando el uso de distintos predictores y aplicando uno o otro según convenga,
se pueden obtener predicciones mucho más correctas
Predictor híbrido Instrucción captada
Mezcla varios predictores y añade un Tabla de
mecanismo de selección del predictor Selección
Predictor 2
Predictor 1
Dirección
Mecanismo de selección
Elige, en cada caso, el predictor que haya
dado mejores resultados hasta el momento
MUX
Implementación del mecanismo de selección
Predicción
Para combinar dos predictores, P1 y P2, se utiliza una tabla de contadores saturados (Taken/Not taken)
de dos bits indexada por la dirección de la instrucción de salto
P1 P2 Actualiz. del contador • Si P2 acierta más que P1 Bit más signif. Predictor
seleccionado
Cont aumenta del contador
Fallo Fallo Cont no varía
• Si P1 acierta más que P2
Fallo Acierto Cont = Cont +1
Cont disminuye 0 P1
Acierto Fallo Cont = Cont -1
Acierto Acierto Cont no varía 1 P2
81 Ejemplo: Alpha 21264
Tabla de Predicción
10 Predicción
Historia Local
Global
Local
(1024x10) (1024x3)
(4096x2)
MSB 12
MSB
10
PC 12
0 1 Juez
(4096x2)
MSB
Si (a=0)
TNTN ...
(se toma alternativamente)
Si (b=0)
NNNN ... (nunca se toma)
“Si(a=0)” se ha tomado:
TH Local Pred Local
0000000000
PC de “Si (b=0)”
000
PC de “Si (a=0)”
0101010101
000
84 Ejemplos de funcionamiento (2)
Si (a=0)
TNTN ...
(se toma alternativamente)
Si (b=0)
NNNN ... (nunca se toma)
“Si(a=0)” no se ha tomado:
TH Local Pred Local
0000000000 111
PC de “Si (b=0)”
000
PC de “Si (a=0)”
1010101010
000
85 Ejemplos de funcionamiento (3)
Si (b=0)
T
Comportamiento
0
últimos 12 saltos
Si (a=b)
Predecir T
99%
tomcatv 99%
100%
95%
doduc 84%
97%
86%
fpppp 82% Profile-based
98%
Bimodal
88% Híbrido
li 77%
98%
86%
espresso 82%
96%
88%
gcc 70%
94%
8%
% de fallos de predicción
7%
Local
6%
5%
Dos niveles
4%
3%
2%
Híbrido
1%
0%
0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128
11
11
10
9 9
8
7
7
6
5
5
1 1
0 0 0
0 lu
r
id
c
e
y
p
im
a
cf
vp
gc
ft
is
es
i
gr
p
gz
sw
a
ap
5.
6.
SPECint2000 SPECfp2000 m
1.
cr
m
4.
up
1.
17
17
7.
3.
18
6.
2.
16
17
17
17
18
17
8.
16
89 Tratamiento de Saltos: Predicción
EJEMPLOS
• UltraSparc I, II 4 entradas
• Pemtium Pro 16 entradas
• R10000 1 entrada
90
Tratamiento de Saltos: Predicción
Detección de la instrucción de salto
Retardos en la detección del salto
• Para poder aplicar el mecanismo de predicción es necesario
saber que se trata de una instrucción de salto F D
• Problema: el tipo de instrucción no se conoce hasta Tipo de instrucción
que no finaliza la etapa de DECODIFICACIÓN Si es salto Aplicar predicción
Varios ciclos de retardo en cada salto
F D F D
F D
Detección de saltos
Detección de saltos Detección de saltos
Tareas básicas
1) Descartar los resultados de las instrucciones ejecutadas especulativamente
2) Reanudar la ejecución por el camino correcto con un retardo mínimo
Ejemplo
BNEZ R1, L
MOV R2, R3 CMOVZ R2, R3, R1
L
Ejemplo
Blt a,10,L1
T pred_lt p1(U),p2(U),a,10
F
If ( a< 10)
c = c+1 add c,c,1 add c,c,1 (p2)
p2 jump L3 L1: Bgt b,20, L2 p1
else
if ( b>20) F pred_gt p3(U), p4(U),b,20 (p1)
T
d = d+1 p4 Add d,d,1 L2: Add e,e,1 p3
else jump L3 add d,d,1 (p4)
e = e+1
add e,e,1 (p3)
L3:
95 Predicción de saltos
Resumen
Algoritmo de TOMASULO
Load1
Load2 Load
Load3 Buffers
Load4
Load5
Load6 Store
Buffers
Add1
Add2 Mult1
Add3 Mult2
Estaciones A Memoria
De Reserva
SumadorFP MultiplicadorFP
Load1 Reg
Load A Memoria
Load2
Load3 Buffers Dato
Load4
Load5
Load6
Add1
Add2 Mult1
Add3 Mult2
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se lanza: LD F0,10(R2) Dest Valor Tipo Listo Nº de ROB
7
6
5
4
De Memoria
3
Cola
2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 10
Reg 8
6
Load A Memoria Dato 4
Buffers 2
1 0
Dest Valor
Dest
Nº de ROB
que producirá
el valor
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se lanza: ADDD F10,F4,F0 Dest Valor Tipo Listo Nº de ROB
7
6
5
4
De Memoria
3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
Reg 8
6
Load A Memoria Dato 4
Buffers 2
1 0
Dest
2 ADDD R(F4), ROB1 Dest
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se lanza: DIVD F2,F10,F6 Dest Valor Tipo Listo Nº de ROB
7
6
5
4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
Reg 8
6
Load A Memoria Dato 4
Buffers 3 2
1 0
Dest
2 ADDD R(F4), ROB1 Dest
3 DIVD ROB2,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se lanza: BNE F2, --- Dest Valor Tipo Listo Nº de ROB
LD F4, 0(R3) 7
ADDD F0,F4,F6 F0 ADDD F0,F4,F6 N 6
F4 LD F4,0(R3) N 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
5 0+R3 Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
2 ADDD R(F4), ROB1 Dest
6 ADDD ROB5, R(F6) 3 DIVD ROB2,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se lanza: ST 0(R3), F4 Dest Valor Tipo Listo Nº de ROB
(sup R3=10) 10 ROB5 ST 0(R3),F4 N 7
F0 ADDD F0,F4,F6 N 6
F4 LD F4,0(R3) N 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
5 0+R3 Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
2 ADDD R(F4), ROB1 Dest
6 ADDD ROB5, R(F6) 3 DIVD ROB2,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se ejecuta: LD F4,0(R3) Dest Valor Tipo Listo Nº de ROB
10 M[10] ST 0(R3),F4 Y 7
F0 ADDD F0,F4,F6 N 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
2 ADDD R(F4), ROB1 Dest
6 ADDD M[10], R(F6) 3 DIVD ROB2,R(F6)
Resultado a
ROB5 y todo Estaciones
ROB o ER con De Reserva
“marca” ROB5 SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se ejecuta: ADDD F0,F4,F6 Dest Valor Tipo Listo Nº de ROB
10 M[10] ST 0(R3),F4 Y 7
F0 F4+F6 ADDD F0,F4,F6 Y 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 LD F0,10(R2) N 1 Registros
1 10+R2 2 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
2 ADDD R(F4), ROB1 Dest
3 DIVD ROB2,R(F6)
Resultado a Estaciones
ROB6 y todo
ROB o ER con
De Reserva
“marca” ROB6 SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se ejecuta: LD F0,10(R2) Dest Valor Tipo Listo Nº de ROB
sup R2=10 10 M[10] ST 0(R3),F4 Y 7
F0 F4+F6 ADDD F0,F4,F6 Y 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 ADDD F10,F4,F0 N 2
de Ope
Dest FP
F0 M[20] LD F0,10(R2) Y 1 Registros
2 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
2 ADDD R(F4),M[20] Dest
3 DIVD ROB2,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
Buffer de Reordenamiento
Se ejecuta: ADDD F10,F4,F0 Dest Valor Tipo Listo Nº de ROB
10 M[10] ST 0(R3),F4 Y 7
F0 F4+F6 ADDD F0,F4,F6 Y 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 * ADDD F10,F4,F0 Y 2
de Ope
Dest FP
F0 M[20] LD F0,10(R2) Y 1 Registros
2 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 0
Dest
Dest
3 DIVD * ,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
* = R(F4)+M[20]
111 Especulación: Ejemplo
Buffer de Reordenamiento
Finaliza (Commit): LD F0,10(R2) Dest Valor Tipo Listo Nº de ROB
10 M[10] ST 0(R3),F4 Y 7
F0 F4+F6 ADDD F0,F4,F6 Y 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola F10 * ADDD F10,F4,F0 Y 2
de Ope
Dest FP 1 Registros
2 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 M[20] 0
Dest
Dest
3 DIVD * ,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
* = R(F4)+M[20]
112 Especulación: Ejemplo
Buffer de Reordenamiento
Finaliza (Commit): Dest Valor Tipo Listo Nº de ROB
ADDD F10,F4,F0 10 M[10] ST 0(R3),F4 Y 7
F0 F4+F6 ADDD F0,F4,F6 Y 6
F4 M[10] LD F4,0(R3) Y 5
--- BNE F2,--- N 4
De Memoria DIVD F2,F10,F6 N
F2 3
Cola
2
de Ope
Dest FP 1 Registros
* 10
Reg 8
6
Load A Memoria Dato
5 4
Buffers 3 2
6 M[20] 0
Dest
Dest
3 DIVD * ,R(F6)
Estaciones
De Reserva
SumadorFP MultiplicadorFP
* = R(F4)+M[20]
113 Especulación: Riesgos a través de memoria
F0 F2 F4 F6 F8 F10 F12 …
Estado de los registros FP Buffer Nº 3 6 4 5
Ocupado si no no si si si no
116 Especulación: más ejemplos
Un ejemplo
MUL1 Libre MULT M(0+(R1)) F2 #2
MUL2 Libre MULT M(0+(R1)) F2 #7
F0 F2 F4 F6 F8 F10 F12 …