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 |