2.9. PREDICCIÓN DINÁMICA DE SALTOS ÍNDICE

Anuncio
2.9. PREDICCIÓN DINÁMICA DE SALTOS
ÍNDICE
1.
2.
3.
4.
5.
6.
INTRODUCCIÓN: PREDICCIÓN ESTÁTICA VS. DINÁMICA.
CACHÉS DE PREDICCIÓN DINÁMICA DE SALTOS
TIPOS DE MÁQUINAS PREDICTIVAS.
IMPLEMENTACIÓN DE BTB EN DLX.
PRESTACIONES: CPICONTROL.
OTRAS MEJORAS EN LA PREDICCIÓN DE SALTOS.
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
1
1. PREDICCIÓN ESTÁTICA VS. DINÁMICA
• Predicción Estática.
¾ Predicción global: Caso Tomado es el más común. Pero saltos muy polarizados.
¾ Predicción estática del compilador con ejecuciones previas: Efectividad entre el
75 y 94%. Pero esto se puede hacer también dinámicamente (en tiempo de ejec.):
• Predicción Dinámica:
o Guardar la información de cada salto en la CPU.
o Generalmente la historia de un salto (lo que hizo las últimas veces) asegura una
efectividad en la predicción muy alta (en general, más del 90%).
o A cada salto se le asocia una máquina de estado predictiva (hay varios tipos).
• Implementación en Proc. encadenados
¾ El encadenamiento normal se comportaría como un sistema de predicción
dinámica, el cual siempre predice NO TOMADO.
¾ Implementar predicho TOMADO ⇒ Calcular cuanto antes la dirección destino.
¾ Implementación mixta: en opcode de la instrucción se especifica predicho T/NT
(doble número de tipos de saltos).
¾ Saltos retardados: evitar ciclos de bloqueo inherentes a la resolución de un salto
(código más complejo y complicaciones en la implementación).
¾ Implementación basada en caché predictivo especial: BTB
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
2
2. CACHÉS DE PREDICCIÓN DE SALTOS
• Por cada salto, se guarda su historia de una forma condensada en una máquina de estado
predictiva.
• Almacenar la historia completa de cada salto no es viable en hardware (muchos bits, mucho
tacc, etc.). Tampoco almacenar todos los saltos.
• Para un número fijo de saltos en implem. hardware simple que aprovecha ppio. de localidad
temporal (el espacial, aquí no) ⇒ caché.
• Por tanto se almacena:
o Una máquina de M bits para cada salto (llamados de historia, aunque no guardan
exactamente la historia): caché o Tabla de predicción de saltos (BPB, Branch
Prediction Buffer). El estado de cada máquina lleva asociado una predicción (T/NT)
o Las direcciones de destino, indexadas junto a lo anterior: Tabla de destino de saltos
(BTB, Branch Target Buffer). Así se conoce cuanto antes la dirección de destino.
• El conjunto anterior se suele llamar simplemente BTB (Branch Target Buffer)
• Dicha caché es accedida por medio de la dirección de la instrucción. En la línea de datos del
caché estará la información del salto (máq estados y dir destino). Se obtiene así una
predicción para dicho salto.
• Las líneas se asignan según los mapeados normales de cachés: mapeado directo, asociativo
por conjuntos o completamente asociativo. Tam_línea = 1 salto
• Luego estamos saltando a una instr predicha en IF (¡sin haber decodificado aún el salto!)
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
3
NOTA: Recordar (funcionamiento de un caché): la parte menos significativa de la dirección
de la instrucción (salto) que está haciendo IF, sirve de índice para seleccionar una línea de la
caché. La parte más significativa de la dirección, sirve para distinguir si la línea almacenada en
la caché contiene la dirección buscada o no. Una coincidencia de los MSB implica acierto en el
acceso a caché, Hit (si no, fallo Miss).
PC (dirección de la instrucción
2
de salto)
LSB (mod)
MSB
Etiqueta de esta
línea (MSB)
BPB
BTB
Predicción
(máq. estados
de un salto)
PC destino
Miss: La instrucción no es salto o es un
salto pero no almacenado. Sólo se
puede buscar la instrucción de la
rama NT. Si tras la decodificación
se descubre que es un salto, se ha
de ocupar una línea (vacía o
ocupada por otro salto) con la dir
dest. y la máq inicializada.
NO
=
SI
Hit: La instrucción es un salto y se tiene una predicción. En el
siguiente ciclo se busca (IF) la instrucción predicha. Si tras
la ejecución del salto, se descubre que la predicción fue
incorrecta, se ha de cambiar la máq de estados de la BPB.
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
4
3. TIPOS DE MÁQUINAS PREDICTIVAS (en la BPB).
Máquinas de predicción de n bits (de historia).
Son máquinas de estados que memorizan de alguna forma la historia de los últimos
comportamientos de un salto concreto (en forma de cambios de estado) y generan una salida
(la predicción) según esa historia.
Pueden ser de un único bit (evidentemente sólo almacenaría el último comportamiento, que
daría la predicción), o de varios, en cuyo caso la predicción ha de elegirse en función de
programas reales para que el % acierto sea máximo.
Implementación: Estado/Predicción(salida de la máq) . Transición en azul
NT
T
T
NT
NT
A/T
T
Máquina de 1 bit.
T
T
NT
NT
C/NT
D/NT
T
0
NT
Máquina de 2 bits (A, D estados polarizados).
2.9. Predicción de Saltos.
B/NT
A/T
B/T
T:decrem
Valores peq./T
2n-1
Valoresgrand/NT
gr/NT
Valores
2n-1-1
NT:increm
Sol. genérica: Contador n bits con saturación
Arquitectura de Sistemas Paralelos 1.
5
T
NT
A/T
B/T
T
NT
T
C/NT
NT
T
D/NT
NT
Variante de máquina de 2 bits (al segundo error de predicción, se salta al estado de
predicción contraria, pero menos polarizado). En rojo las nuevas transiciones.
Ej: Evolución del salto de un bucle. Evolución de los saltos de dos bucles anidados.
Ej: Número de bits que ocupa una caché BTB con n bits de predicción. Datos: PC de
32 bits, 512=29 líneas. (VER DIBUJO)
Tamaño de campo LSB: 9. Tamaño de etiqueta (MSB): 32-9-2=21 (2 por que
PC se incrementa de 4 en 4 siempre; la dirección de un salto es múltiplo de 4)
Tamaño de línea: etiq + bits historia + dir destino: 21+n+32
Tamaño de caché: 512 líneas * (21+n+32) (faltaría bit Válido/Inv por cada línea)
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
6
Predicción usando Bits de correlación.
Correlación estadística: una variable aleatoria depende de otra.
Correlación de saltos: el comportamiento de un salto depende del de otros (los
últimos generalmente): típico en variables tipo “flag” y en cond de salida de bucles.
Por tanto, también se suele almacenar esta dependencia en una BTB. ¿Cómo?
Se guarda en un registro de desplazamiento, (llamado registro de correlación, no
incluido en la BTB sino genérico de la máquina) el comportamiento de los últimos m
saltos ejecutados del programa. P. ej, entra por la derecha 1 si el salto se tomó y 0 si
no se tomó y se expulsa el bit de la izquierda. El valor de estos m bits debe influir en
la predicción.
En cada salto, hay una máquina de n bits de historia para cada valor del registro de
correlación (en total 2m máq por salto). Sólo una de ellas va a usarse para predecir. La
selección de la máquina viene dada por el valor del registro de correlación.
• Se suelen denotar como BTB(m,n)
m = número de bits de correlación.
n = nº bits predicción o historia.
• La BTB (0,1) se dejó pronto de usar porque su porcentaje de error es bastante mayor
que la BTB(0,2). Esto se nota claramente en bucles anidados (la BTB(0,1) falla dos
veces porcada iteración del bucle interno).
• Las más usuales son las BTB(0,2), (2,2) y hoy ya las (2,3) y algunas otras variantes
(se ven al final de este apartado).
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
7
Esquema con 1 bit de correlación
0
1
BTB(2,1): 2 bits correlación, 1 bit historia.
Reg de Penúlt. Último
salto salto
Corr.
Línea 0
Línea 1
0 si NT
1 si T
0=NT,NT
3=T,T
1=NT,T
Reg de
Corr.
K
Línea 2 1
MUX
Último
salto
T
K
2
líneas
T
2=T,NT
T
T
A/T
A/T
A/T
A/T
T NT
T NT
T NT
T NT
B/NT
B/NT
B/NT
B/NT
Predicción
NT
...
NT
...
NT
...
NT
...
NOTA: el registro de desplazamiento puede estar cargado con el comportamiento de un
mismo salto (ejecutado en dos ocasiones distintas)
NOTA: Para una BTB (0,1) basta con sólo con almacenar las direcciones de destino de los
saltos predichos T, y no almacenar nada si el salto es pred NT. Así son la mayoría de ejemplos
del libro de Hennessy-Patterson
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
8
Esquema de BTB(m, n)
Reg. Corr.
(m bits)
PC (dirección instrucción)
LSB
2K
líneas
Etiquetas
PCdest
Predicciones (máq de n bits)
M0
M1
M2
V/I
M2m-1
Total de bits:
2k líneas × (bits etiq + n bits por máq × 2m columnas + bits PCdest + bit vál/inv)
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
9
Ejerc: Para una BTB(2,2) inicializadas todas las máq al estado no polarizado T, y el reg.
correlación inicializado a 01(2, observar la evolución de:
o Un bucle.
o Dos bucles anidados.
o Un bucle con una sentencias if {…} dentro.
o Un bucle con 2 sentencias if {…} dentro sin correlación entre ellos.
o Un bucle con 2 sentencias if {…} dentro con correlación entre ellos, etc.
Porcentaje medio de Fallos de predicción
• Se suele dar porcentaje fallos porque veremos que CPIcontrol es proporcional al mismo
• BTB(0,2) con 4096 líneas:
o SPEC89 INT: 11% (del 5 al 18%)
o SPEC89 FP: 4% (del 0.1 al 9%).
Media: 6.8%
o IMPORTANTE: El número de fallos prácticamente no decrece con más líneas:
gran localidad de los saltos.
• BTB(2,2) con 1024 líneas:
o SPEC89 INT: 6% (del 4 al 11%).
Media: 3.7%
o SPEC89 FP: 3% (del 0.1 al 5%).
o Se reduce más en INT porque son más algorítmicos y menos vectoriales. Es
evidente que hay correlación entre los saltos de tales programas.
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
10
Pequeños cronogramas de salto con acceso a BTB. (Miss/Hit)
// si salto predicho correctamente: (flecha azul: predicción BTB)
BEQZ R2,etiq
IF ID EX ME WB
Instr predicha
IF ID EX ME WB
Instr post a predicha
IF ID EX ME WB
// si salto predicho incorrectamente:
// flecha azul: predicción BTB; roja: rectificación BTB
BEQZ R2,etiq
IF ID EX ME WB
Instr predicha
IF ABORT
Buscar instr rama contraria y quizás cambiar
predicción de la BTB. @
// si salto no estaba cacheado (se busca la instr sig): 2 casos
// flecha roja: rectificación BTB
1. Salto no se tomará
BEQZ R2,etiq
IF ID EX ME WB
Instr siguiente
IF ID EX ME WB
Insertar en la BTB una nueva línea,
inicializando el estado y predicción.
2. Salto se tomará
BEQZ R2,etiq
IF ID EX ME WB
Instr siguiente
IF ABORT
Buscar instr rama contraria e
insertar en la BTB una nueva línea,
inicializando el estado y predicción.
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
11
4. IMPLEMENTACIÓN DE BTB EN DLX: Casos de acceso
BTB almacena TODOS los saltos (Pred. T o Pred. NT) con máq estados compleja
@Suponemos que en IF se accede a BTB (solo direcc predicha) y en ID a BPB
1. Falla acceso BTB en IF (Miss)
En ID se descubre que:
1.a) No es salto .
.
.
.
.
.
.
1.b) Es salto: añadirlo a la maq de estados
o 1.b1) NT. .
.
.
.
.
.
o 1.b2) T
.
.
.. .
.
.
.0 c.b.q.
.0 ó 1 c.b.q.
.1 ó 2 c.b.q. acceso a BTB@
2. Acierto acceso BTB en IF (Hit): es salto seguro
En ID se resuelve salto, se modifica su maq estado (en BPB) y se descubre que:
2.a) Acierta en la predicción .
.
.
2.b) Falla en la predicción
o 2.b1) BTB no cambia su predicción
o 2.b2) BTB cambia su predicción
.0 c.b.q.
1 c.bq. @
1 ó 2 c.bq. acceso a BTB@
Si la BTB tiene dos puertos de acceso los c.bq. se reducen a dos casos : 0 ó 1 .El ciclo
de bloqueo adicional es para puerto único: este será el “modelo de DLX” que usemos
• En el peor de los casos hay 2 c.bq. en DLX, pero esto ocurre en un porcentaje reducido de
ocasiones si la máq de predicción es suficientemente compleja.
• Ejemplos: dibujar cronogramas de estos casos para DLX con máq compleja (más de 1 bit).
NOTA: En práctica 4 hay diagrama flujo por cada fase en DLX con BTB que almacena todos los saltos.@
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
12
5. PRESTACIONES: CPICONTROL.
CPIcontrol = Fsaltos* Psaltos = Fsaltos* (%Fallos_pred * Pfallo + %Aciertos_pred * Pacierto)
⇒ (típicamente)
CPIcontrol = Fsaltos * %Fallos_pred * Pfallo
⇒ CPIcontrol es proporcional a %Fallos_pred y a Pfallo
Para el DLX (con una BTB de varios puertos de acceso) la Pfallo es 1 c bq (muy baja):
• BTB(2,2) DLX Prog INT: CPIcontrol = 0.2 * 0.06 * 1 = 0.012 c bq / instr
• BTB(2,2) DLX Prog FP: CPIcontrol = 0.1 * 0.03 * 1 = 0.003 c bq / instr
Para el DLX con una BTB de un único puerto de acceso, habría que distinguir entre
penalidades de 1 o 2 c bq:
@Psaltos = Pfallo = %Fallos_pred * ( 2 * %Cambio_pred + 1 * %No_cambio_pred )
• Notar que tan importante es reducir el %Fallos_pred como la Pfallo . Aunque en el
DLX la Pfallo sea sólo de 1 ó 2 ciclos, los procesadores reales (y actuales) tienen de
11 a 22 fases (supersegmentados) y su Pfallo está entre 4 y 8 ciclos (y eso que usan
técnicas de reducción de la misma).
• P ej: BTB(2,2) Proc real Prog INT: CPIcontrol = 0.16 * 0.06 * 7 = 0.0448 c bq / instr
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
13
6. OTRAS MEJORAS EN LA PREDICCIÓN DE SALTOS.
• BTB con Plegado (Folding): consiste en almacenar en la BTB, además del PCdest,
el código de la instrucción destino para, tras predecir T, lanzar directamente la etapa
ID de la instrucción destino (que debería ejecutarse en paralelo con la ID del salto).
• Buffer de instrucciones no predichas. Se guarda en un buffer especial de la CPU,
las primeras instrucciones de la rama no predicha, de forma que si la predicción falla,
la penalidad es mucho menor (empezaría a ejecutar las fases ID de la otra rama,
ahorrando la fase IF). Ej: UltraSPARC III guarda instrucciones de la rama NT, para
un salto predicho T (puesto que suele estar en la misma línea de caché que el salto)
• Predictor por concurso (tournament predictor). Como Bits de historia guardan
información local de un salto, mientras que la correlación guarda la información
global o de correlación del programa ⇒ se dispone de dos máquinas opuestas (en el
caso extremo sería una BTB(0,n) y otra BTB(m,0)) y en cualquier predicción
podríamos optar por elegir una u otra (ambas “concursan” por la pred.). La decisión
se toma con otra máquina de estados por cada salto, que suele ser similar a las
BTB(0,2) (pero donde la máq se polariza hacia uno u otro predictor en vez de T/NT).
El %error_pred es algo menor que en otras máquinas (Media 2.6%). Ej Alpha 21264:
o Inform local en 1 K líneas tipo BTB(0,10), BTB cuyo valor sirve para indexar
otra tabla de 1K contadores de saturación de 3 bits:
1K*10 bits+1K*3 bits
o Inform global en una sola línea de BTB(12,2): 212=4096 *2 bits
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
14
o Selector de 4K contadores de 2 bits (indexados tb por la propia dir del salto):
4K*2 bits...¡total 29Kbits!
Máq con inform.
Local
Ej. BPB(0,n)
Pred.
Máq con inform.
Global.
Ej. BPB(m,0)
Máq de selección
entre información
global o local
• Caché de direcciones de retorno (return address prediction): se guarda en un
buffer tipo pila, las últimas direcciones de retorno, así no hay que obtenerlas en ID
(normalmente de un registro, JR R31), sino que su fase IF las irá sacando de la
pequeña pila (la BTB redirecciona a tal pila). Con una pila de 6 direcciones de
retorno almacenadas se acierta en el 81% de return. Útil en C++, Java, recursividad.
• Caché de trazas (trace cache). Es una caché de instrucciones, que en lugar de
mapear las instrucciones como es normal en los cachés, guarda la traza de ejecución
(con instrucciones decodificadas si es posible), incluso con lo hecho por los saltos T.
Mapeo muy complejo. Gran ventaja si decodificación es compleja y las instrucciones
de pequeño tamaño como en CISC (evita desperdicio de caché). Ej Pentium 4
2.9. Predicción de Saltos.
Arquitectura de Sistemas Paralelos 1.
15
Descargar