Dos estrategias
Estática: Suponer que los saltos hacia atrás se efectúan y los saltos hacia adelante no
Dinámica: Predicción basada en perfiles: se guarda el comportamiento del salto, y se hace una predicción basada en ejecuciones previas
Las instrucciones entre saltos mal predichos constituyen una buena métrica de los errores de predicción
1. REVISIÓN: EVALUACIÓN DE LA PREDICCIÓN DE SALTO
1
Los riesgos limitan las prestaciones
Estructural: requieren más recursos HW
Datos: necesitan forwarding, planificación de código (compilador)
Control: evaluación temprana & PC, saltos retardados, predicción
El incremento de la longitud del cauce aumenta el impacto de los riesgos; la segmentación ayuda con el ancho de banda de instrucciones, pero no con la latencia
Interrupciones, juegos de instrucciones, operaciones FP complican la segmentación
Compiladores reducen el coste de los riesgos de datos y de control
Load delay slots
Branch delay slots
Predicción de saltos
Hoy: Cauces más largos => mejor predicción de saltos, mayor paralelismo de instrucción?
REVISIÓN: SUMARIO DE CONCEPTOS PREVIOS
2
REVISIÓN DE CONCEPTOS
La ejecución de instrucciones está segmentada
Múltiples instrucciones son ejecutadas en paralelo
Los riesgos en el cauce afectan a las prestaciones de la CPU
Riesgos estructurales: la CPU no puede ejecutar la secuencia específica
Riesgos de datos: las dependencias de datos entre instrucciones en el cauce.
Riesgos de control: las instrucciones branch pueden cambiar el PC
Soluciones para los riesgos de datos
Crear secuencias no-dependientes
Esperar hasta que instrucciones previas se completen (se crean burbujas)
Anticipar los nuevos valores de registros a las próximas instrucciones
Partir el banco de registros: escribir primero, leer después
Optimizar el código (scheduling)
3
RIESGO PROVOCADO POR UN BRANCH
4
RIESGOS DE CONTROL
Cuando una instrucción branch es buscada, no se sabe dónde continuará
Dirección de salto (puede efectuarse o no) nos es desconocido
Objetivo del salto (en caso de que se salte) la dirección efectiva de salto nos resulta desconocida
Solución más simple
Detener el cauce hasta que se ejecute la instrucción branch
5
SALTOS Y PRESTACIONES
MPI: miss-per-instruction
MPI expresa bien las prestaciones. Por ejemplo:
MPI=1% => (1 de cada 100 instr , aprox 1 de cada 20 saltos)
IPC=2 (IPC número promedio de instr ejecutadas por ciclo de reloj)
Penalización por vaciado del cauce de 10 ciclos
Obtenemos que:
MPI=1% => 1 vaciado cada 100 instr
Un vaciado cada 50 ciclos (dado que IPC=2)
10 ciclos de penalización por vaciado cada 50 ciclos
20% en las prestaciones
(Gp:) número de predicciones incorrectas
(Gp:) número total de instrucciones
(Gp:) MPI =
6
TIPOS DE SALTOS
Condicionales / incondicionales
Condicional:
Se necesita predecir dirección y objetivo del salto
La dirección real sólo se conoce después de ejecutar la instrucción.
Una predicción incorrecta origina un vaciado total del cauce
Incondicional:
Sólo se necesita predecir el objetivo del salto
Directos / indirectos
Directos:
El objetivo del salto está especificado dentro de la instrucción (como un valor inmediato)
La dirección objetivo real se conoce después de descodificar
Una predicción incorrecta origina un vaciado parcial del cauce
Indirectos:
La dirección objetivo tiene que ser calculada
La dirección objetivo real se conoce después de la etapa de ejecución
Una predicción incorrecta origina un vaciado total del cauce
7
TIPOS DE SALTOS: ALGUNOS DATOS
Condicionales directos: 70% de todos los saltos
Son muy frecuentes
La penalización por predicción incorrecta de la dirección es alta (vaciado completo)
Es muy importante predecir correctamente la dirección del salto condicional
Depende del flag de estado: overflow, signo, cero, paridad, acarreo, auxiliar
Dirección: el objetivo se conoce en la etapa de descodificación
Relativo al puntero de instrucción de la instrucción de salto
Incondicionales directos
Se efectúan siempre
La dirección objetivo se conoce en la etapa de descodificación
Es menos frecuente y la penalización por redirección errónea es baja (vaciado parcial)
Tiene menor importancia una predicción incorrecta
8
TIPOS DE SALTOS: ALGUNOS DATOS
Condicionales indirectos:
Muchas máquinas no los tienen
Incondicionales indirectos
La dirección objetivo es el valor de un registro => se conoce en la de ejecución
Los returns son saltos incondicionales indirectos
Las calls pueden ser también incondicionales indirectos
Son poco frecuentes y la penalización por predicción errónea es alta (vaciado completo)
A veces es importante el predecirlos correctamente
9
MEJORA DE LA GESTIÓN DE LOS SALTOS
Determinar si el branch es tomado o no lo antes posible
Calcular la dirección del salto anticipadamente
10
Página siguiente |