5. PREDICCIÓN DINÁMICA DE SALTOS 1 PREDICCIÓN DINÁMICA DE SALTOS 1. Introducción 2. Buffer de Predicción de Saltos (BPB) 3. Buffer de Destinos de Saltos (BTB) 4. Predictores Globales 5. Predictores Adaptativos 2 PREDICCIÓN DINÁMICA DE SALTOS 1. Introducción 3 Introducción Los riesgos de control se dan más a menudo que los de datos Mucha influencia en el tiempo de ejecución Vamos a estudiar técnicas que permitan determinar si se va a saltar o no La predicción se hará en la etapa IF Predicción dinámica de saltos 4 PREDICCIÓN DINÁMICA DE SALTOS 2. Buffer de Predicción de Saltos (BPB) 5 Buffer de Predicción de Saltos (BPB) Predice el salto atendiendo a la historia. BPB .. .. .. .. .. ETQ2 . . . . . .. .. .. .. .. ETQ1 Bcc ETQ2 20156 Bcc ETQ1 34056 .. .. .. .. .. Bcc ETQ3 .. .. .. .. .. 1 56 0 .... .. .. .. .. .. 32 .... 20032 Salto No Salto ¡OJO! ¡Puede haber colisiones! Predicción dinámica de saltos 6 Buffer de Predicción de Saltos (BPB) SI ¿Se predice saltar? Ejecutar la instrucción del salto SI NO Ejecutar la instrucción siguiente ¿Predicción fallada? NO Buscar la instrucción adecuada Invertir la predicción del buffer Continuar la ejecución Predicción dinámica de saltos 7 Buffer de Predicción de Saltos (BPB) A veces, un solo bit de predicción no da buen resultado. ETQ1 ETQ2 .. .. .. .. .. .. .. .. .. .. ..... Bcc ETQ2 Bcc ETQ1 .. .. .. .. .. El bucle interior salta en 99 ocasiones (y no lo hace en 1) de cada 100. x 99 x 1000 Sin embargo, la predicción no sólo fallará la vez que no salta sino también la siguiente vez que se vuelva a ejecutar la instrucción de salto. ¡Habrá 2000 fallos en vez de los 1000 que cabría esperar! Predicción dinámica de saltos 8 Buffer de Predicción de Saltos (BPB) Solución: aumentar la “memoria histórica”. Se aumenta a dos el número de bits de predicción del BPB y se actúa según el siguiente diagrama de estados: Acierto Predicción de 11 SALTO Fallo Acierto Fallo Fallo Predicción de 01 NO SALTO Predicción de 10 SALTO Acierto Fallo Predicción de 00 NO SALTO Acierto Pueden implementarse predictores de más de 2 bits aunque la práctica ha demostrado que no merecen la pena. Predicción dinámica de saltos 9 Buffer de Predicción de Saltos (BPB) • No Saltar. Se continúa con la siguiente instrucción y no hay retardo. Predicción en MIPS • Saltar. Hasta la fase ID no se conoce la dirección de salto (cuando éste ya se ha resuelto). No se puede evitar el retardo. Para este tipo de procesadores el BPB no tiene utilidad. Solución: Predecir también la dirección a la que saltar. Predicción dinámica de saltos 10 PREDICCIÓN DINÁMICA DE SALTOS 3. Buffer de Destinos de Saltos (BTB) 11 Buffer de Destinos de Saltos (BTB) Predice el salto y la dirección destino. .. .. .. .. .. ETQ2 . . . . . .. .. .. .. .. BTB ETQ1 34056 ETQ3 20156 19800 ETQ2 .. .. .. .. .. Bcc ETQ1 .. .. .. .. .. Bcc 19850 .... 20156 Bcc 20032 .... 20032 Dirección de la última vez que saltó ETQ3 .. .. .. .. .. ..... Predictor de 1 bit No está à Predicción de NO salto Predicción dinámica de saltos 12 Buffer de Destinos de Saltos (BTB) IF Enviar PC a memoria y BTB NO ID SI Enviar el PC predicho NO ¿Es un salto y se toma? SI Ejecución normal EX ¿Entrada en el BTB? • Abortar la ejecución errónea y reiniciar lectura de instrucción. • Introducir en BTB la dirección del salto y de la instrucción. Predicción dinámica de saltos NO ¿Se realiza el salto? • Abortar la ejecución errónea y reiniciar lectura de instrucción. • Eliminar entrada en BTB SI Ejecución normal 13 Buffer de Destinos de Saltos (BTB) Usando el BTB con MIPS, si se acierta no hay retardo. Si se predice NO SALTO y se ACIERTA: BNE ETQ XOR R1,R2,R3 IF .. .. .. ETQ AND ID IF EX ID MEM WB EX MEM WB ID EX MEM WB IF ID EX R1,R2,R3 Si se predice SALTO y se ACIERTA: BNE ETQ XOR R1,R2,R3 IF .. .. .. ETQ AND R1,R2,R3 Predicción dinámica de saltos MEM WB 14 Buffer de Destinos de Saltos (BTB) Si se falla la predicción habrá 2 ciclos de retardo. Si se predice NO SALTO y se FALLA: Se conoce el error de predicción Se predice “no salto” BNE ETQ XOR R1,R2,R3 IF .. .. .. ETQ AND R1,R2,R3 Se aborta la ejecución Predicción dinámica de saltos ID IF EX MEM WB IF ID EX MEM WB No se puede extraer la siguiente instrucción porque hay que actualizar el BTB 15 Buffer de Destinos de Saltos (BTB) Si la predicción es de SALTO y se FALLA, el proceso es similar. Se puede ahorrar un ciclo de retardo si se consigue consultar el BTB y modificarlo en un solo ciclo. Dos posibles formas son: • Dotar al BTB de un puerto de lectura y otro de escritura para poder superponer ambas operaciones. • Dividir la etapa IF en 2 subciclos de forma que en uno se consulte la dirección en el BTB (Lectura) y en otro se actualice (escritura). Predicción dinámica de saltos 16 Buffer de Destinos de Saltos (BTB) Se puede añadir un bit de predicción. BTB 20156 0 19800 Permite utilizarlo como si fuera un predictor de 2 bits. .... 19850 .... 1 .... 20032 Bit de predicción Predicción dinámica de saltos 17 Buffer de Destinos de Saltos (BTB) Para los saltos incondicionales se puede utilizar la técnica denominada Branch Folding. En este caso el BTB contiene la instrucción destino del salto en vez de su dirección. BTB 20032 AND ... ETQ .. .. .. ETQ AND R1,R2,R3 IF ID EX MEM WB .... .... 20156 ADD ... J Se ahorra la etapa IF Predicción dinámica de saltos 18 PREDICCIÓN DINÁMICA DE SALTOS 4. Predictores Globales 19 Predictores Globales BNE ETQ1 BEQ ETQ3 BNE ETQ1 .. .. .. BEQ ETQ2 .. .. .. .. .. .. BEQ ETQ2 .. .. .. BEQ Los predictores vistos hasta ahora son locales ya que sólo tienen en cuenta información referente a la instrucción de salto objeto de la predicción. Los predictores globales, además tienen en cuenta la información sobre otras instrucciones de salto del programa. ETQ3 Predicción dinámica de saltos 20 Predictores Globales Se describen mediante el par (G, L) Donde G indica el número saltos globales a evaluar y L el número de bits del predictor local. Los predictores locales que hemos visto hasta ahora se pueden considerar: (0, 1) à predictor de 1 bit (0, 2) à predictor de 2 bits Predicción dinámica de saltos 21 Predictores Globales Predictor (1, 1) .. .. .. .. .. ETQ2 . . . . . .. .. .. .. .. ¿El último salto global se tomo? SI NO ETQ1 ETQ3 .. .. .. .. .. Bcc ETQ1 .. .. .. .. .. Bcc 20156 1 1 ETQ2 ETQ3 .. .. .. .. .. ..... Predicción dinámica de saltos 34088 .... 34088 0 .... 20156 Bcc 1 .... 20032 20032 0 1 Predicción de 1 bit 22 Predictores Globales Predictor (1, 2) .. .. .. .. .. ETQ2 . . . . . .. .. .. .. .. ¿El último salto global se tomo? SI NO ETQ1 ETQ3 .. .. .. .. .. Bcc ETQ1 .. .. .. .. .. Bcc 20156 11 01 ETQ2 ETQ3 .. .. .. .. .. ..... Predicción dinámica de saltos 34088 .... 34088 00 .... 20156 Bcc 10 .... 20032 20032 01 10 Predicción de 2 bits 23 Predictores Globales Predictor (2, 2) ¿Se tomaron los 2 últimos saltos globales? .. .. .. .. .. ETQ2 . . . . . .. .. .. .. .. NO NO NO SI SI NO SI SI 20156 10 00 11 10 .... ETQ3 00 00 10 01 10 ETQ2 .. .. .. .. .. Bcc ETQ1 .. .. .. .. .. Bcc 00 .... 34088 01 .... 20156 Bcc 11 ETQ3 .. .. .. .. .. ..... Predicción dinámica de saltos .... 20032 20032 .... ETQ1 34088 24 PREDICCIÓN DINÁMICA DE SALTOS 5. Predictores Adaptativos 25 Predictores Adaptativos Dependiendo de los programas a ejecutar, habrá veces en las que funcionará mejor un predictor que otro. Los predictores adaptativos tienen la capacidad de “adaptarse” a la situación eligiendo el tipo de predictor más adecuado a cada situación, por ejemplo, local o global. Se hace implementando un diagrama de estados como el del ejemplo que se muestra a continuación. Las transiciones se muestran con pares con el siguiente significado: ( X, Y ) Evento del predictor A Predicción dinámica de saltos A à Acierto Evento del predictor B F à Fallo 26 Predictores Adaptativos ( F, F ) ( A, F ) ( A, A ) ( F, F ) ( F, A ) ( A, A ) Utilizar Predictor A Utilizar Predictor B ( A, F ) ( F, A ) Utilizar Predictor A ( F, F ) ( A, A ) Predicción dinámica de saltos ( A, F ) ( F, A ) ( A, F ) ( F, A ) Utilizar Predictor B ( F, F ) ( A, A ) 27