Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1...

9
Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica. La predicción de saltos pretende reducir la penalización producida por los saltos, haciendo prebúsqueda (“prefetching”), emitiendo y ejecutando instrucciones del camino destino del salto antes que el salto sea resulto. Esta circunstancia es conocida como ejecución especulativa, ya que se ejecutan instrucciones sin saber si son las correctas en el orden del programa. Para ello necesitamos saber si el salto será efectivo o no, y además, conocer la dirección del salto en el caso de que sea efectivo. Se pretende con esta técnica no introducir burbujas en la ejecución segmentada de las instrucciones. Las técnicas de predicción de saltos se pueden dividir básicamente en dos tipos: Las que realizan predicción estática. (tiempo de compilación). Las que realizan predicción dinámica. (tiempo de ejecución). Ambas tienen sus ventajas e inconvenientes. La dinámica nos da mejores resultados a cambio de complicar mucho el diseño del procesador. La predicción estática tiene menos precisión, pero requiere mucho menos hardware; pero, muchas predicciones estáticas pueden llegar a incrementar en un 30% el código resultante. Existen técnicas no basadas en la predicción para mejorar el rendimiento en los saltos y son conocidas como: Salto retardado. (YA VISTA). Ejecución concurrente de los dos posibles caminos en un salto. En este apartado haremos un breve resumen de las técnicas estáticas, para pasar después a estudiar las técnicas dinámicas. Estrategias de predicción estáticas. Las técnicas más sencillas de predicción estática a de saltos se basan en observar el código de operación o su dirección de destino. Las más complicadas se basan en un proceso llamado “profiling” que consiste en realizar el compilador ejecuciones previas con el fin de poder deducir estáticamente y en tiempo de compilación el comportamiento del salto. Las técnicas más relevantes son: Predecir todos los saltos como tomados. Es la técnica más sencilla, pero la más pobre en porcentaje de aciertos. Predicciones basadas en el código de la operación . Se basa en estudios que indican que según el tipo de salto que se realiza, la posibilidad de que sea tomado o no es diferente. Esta técnica se basa en hacer un estudio previo de cada tipo de salto (es decir, instrucción de salto) para ver que probabilidad ofrece de saltar o no. Se aplicó en el IBM 370 y se obtuvo unos muy buenos resultados del orden del 80%-90%. Predecir los saltos en función de su dirección . Se basa en suposiciones del tipo “… la mayoría de los saltos hacia atrás son evaluados afirmativamente y los saltos hacia delante negativamente…”. Esto tiene su sentido, pues los saltos hacia atrás suelen ser bucles y los saltos hacia delante estructuras if-then-else. Esta técnica funciona bien para programas con muchos bucles, pero baja mucho su eficiencia cuando estamos trabajando con programas con un comportamiento irregular en los bucles.

Transcript of Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1...

Page 1: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 1 12/11/2009

Predicción dinámica.

La predicción de saltos pretende reducir la penalización producida por los saltos, haciendo prebúsqueda (“prefetching”), emitiendo y ejecutando instrucciones del camino destino del salto antes que el salto sea resulto. Esta circunstancia es conocida como ejecución especulativa, ya que se ejecutan instrucciones sin saber si son las correctas en el orden del programa. Para ello necesitamos saber si el salto será efectivo o no, y además, conocer la dirección del salto en el caso de que sea efectivo. Se pretende con esta técnica no introducir burbujas en la ejecución segmentada de las instrucciones. Las técnicas de predicción de saltos se pueden dividir básicamente en dos tipos:

• Las que realizan predicción estática. (tiempo de compilación). • Las que realizan predicción dinámica. (tiempo de ejecución).

Ambas tienen sus ventajas e inconvenientes. La dinámica nos da mejores resultados a cambio de complicar mucho el diseño del procesador. La predicción estática tiene menos precisión, pero requiere mucho menos hardware; pero, muchas predicciones estáticas pueden llegar a incrementar en un 30% el código resultante. Existen técnicas no basadas en la predicción para mejorar el rendimiento en los saltos y son conocidas como:

• Salto retardado. (YA VISTA). • Ejecución concurrente de los dos posibles caminos en un salto.

En este apartado haremos un breve resumen de las técnicas estáticas, para pasar después a estudiar las técnicas dinámicas. Estrategias de predicción estáticas. Las técnicas más sencillas de predicción estática a de saltos se basan en observar el código de operación o su dirección de destino. Las más complicadas se basan en un proceso llamado “profiling” que consiste en realizar el compilador ejecuciones previas con el fin de poder deducir estáticamente y en tiempo de compilación el comportamiento del salto. Las técnicas más relevantes son:

• Predecir todos los saltos como tomados. Es la técnica más sencilla, pero la más pobre en porcentaje de aciertos. • Predicciones basadas en el código de la operación. Se basa en estudios que indican que según el tipo de salto que se realiza, la posibilidad de que

sea tomado o no es diferente. Esta técnica se basa en hacer un estudio previo de cada tipo de salto (es decir, instrucción de salto) para ver que probabilidad ofrece de saltar o no. Se aplicó en el IBM 370 y se obtuvo unos muy buenos resultados del orden del 80%-90%.

• Predecir los saltos en función de su dirección. Se basa en suposiciones del tipo “… la mayoría de los saltos hacia atrás son evaluados

afirmativamente y los saltos hacia delante negativamente…”. Esto tiene su sentido, pues los saltos hacia atrás suelen ser bucles y los saltos hacia delante estructuras if-then-else. Esta técnica funciona bien para programas con muchos bucles, pero baja mucho su eficiencia cuando estamos trabajando con programas con un comportamiento irregular en los bucles.

Page 2: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 2 12/11/2009

Estrategias de predicción dinámicas.

Las técnicas que vamos a ver ahora para predicción de saltos se basan en información conocida sólo en tiempo de ejecución. Dos estructuras son necesarias para realizar una predicción estática:

• “Branch History Table” (BHT) o Tabla de Historia de los Saltos. Tabla que contiene información de lo sucedido en cada salto las últimas veces que fue tomado. A partir de esta información se predice si el salto será tomado o no.

• “Branch Target Address Cache” (BTAC) o Tabla de Direcciones de Salto. Como su nombre indica es una tabla donde se almacena las direcciones de salto destino de los últimos saltos evaluados. De esta forma, si un salto es predicho como tomada, se mira si está en la tabla, y si es así, se obtiene la dirección destino.

La base de la mayoría de los predictores dinámicos es el llamado “Branch Target Buffer”, que no es más que una tabla que combina los dos anteriores. Cada entrada posee bits para realizar la predicción y la posible dirección de salto.

A partir de esta estructura básica se han diseñado muchos predictores, desde los más sencillos que veremos aquí, hasta muy sofisticados que utilizan dos niveles de predicción. Últimamente se están utilizando los predictores híbridos que combinan tanto técnicas estáticas como dinámicas, eligiendo en cada momento la que de un mejor resultado.

Otro aspecto muy importante son las penalizaciones que puede sufrir un procesador por el hecho de equivocarse en una predicción. Se pueden presentar dos tipos de Penalizaciones:

1. “Misfetch penalty” o penalización por búsqueda errónea: los procesadores leen una instrucción de la cache realizando un búsqueda de instrucción, a continuación, si la instrucción es de salto, la evaluación del salto se realizará en el segmento de decodificación. Por ello, si nos equivocamos en la predicción, deberemos anular la instrucción e introducir una o más burbujas para vaciar los cauces de segmentación e iniciar la ejecución de una nueva instrucción en la dirección real de salto.

2. “Mispredict penalty” o penalización por predicado erróneo: sabemos que los procesadores para mantener alto el rendimiento realizan cargas especulativas de instrucciones en la memoria cache de instrucciones, correspondientes al posible bloque destino del salto. Si se comprueba que ha habido un fallo en la predicción, el procesador además de realizar un vaciado del cauce segmentado y restaurar los valores de los registros, deberá leer un nuevo predicado, es decir, deberá cargar la cache de Instrucciones o en su defecto, el buffer de lectura de instrucciones con nuevas instrucciones procedentes de la dirección de salto ya evaluada.

Para comparar diversas arquitecturas de predicción dinámica de saltos, nos fijaremos en un parámetro conocido como la predicción de aciertos, es decir, el porcentaje de saltos que han sido bien predichos. Para las técnicas de predicción también será útil almacenar información general de los programas, del estilo “…tengo pocas instrucciones de saltos que se ejecutan muchas veces …” o “ tengo muchos saltos que se ejecutan pocas veces…”, pues esto influirá mucho en el rendimiento de las predicciones.

A continuación se enumeran las 5 técnicas más importantes utilizadas en la predicción dinámica de los saltos:

Page 3: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 3 12/11/2009

1. “Branch Target Buffer”. Buffer de salto. Con información de la historia de cada salto.

2. Predictores basados en dos niveles de historia.

3. Predicción de la siguiente línea de cache a leer.

4. Predictores basados en el camino recorrido por el programa.

5. Predictores híbridos. Que combinan varias técnicas, incluso las estáticas.

Buffer de predicción de saltos.

Vamos a ver una versión muy sencilla, en la cual el buffer está formado por una pequeña memoria indexada con los bits menos significativos de la dirección de la instrucción de salto. Además contiene un bit para indicar si el salto fue tomado o no en su última evaluación.

Puede suceder que una nueva instrucción de salto tenga sus bits de menor peso de su dirección coincidentes con otra instrucción de salto ya evaluada. No importa, se procede como si nada pasara y la predicción de la anterior instrucción y su dirección de salto son tomadas como buenas. En caso de que se produzca un fallo, se invertirá no solo el bit de predicción sino también se corregirá la dirección de salto del buffer de predicción.

Con un solo bit, cada vez que estemos analizando una instrucción condicional de final de bucle, al cometer un error en su predicción, este será doble: al suponer que salto y no salta (última iteración del bucle) y la siguiente vez que lo evaluemos que lo hacemos a no salta y nos equivocaremos también pues si que saltará.

Pero es fácil mejorar la predicción para estos casos, basta con utilizar cuatro posibles estados de predicción, es decir 2 bits en vez de uno.

11: efectivo con alta probabilidad.

10: efectivo probable.

01: no efectivo probable.

00: no efectivo con alta probabilidad.

Ejemplo: Sea el siguiente fragmento de programa en ensamblador. ADDI R8,R0,10 bubu: ADD R4, R5, R6 XOR R12, R4, R0 . . . ADDI R8,R0,-1 bnez R8, bubu ; salta si no es igual a cero . . . Este bucle se repite 10 veces, y si se ejecuta muchas veces, ocurrirá que la primera y la última vez será evaluado erróneamente.

Page 4: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 4 12/11/2009

Tendremos un autómata finito con cuatro estados, de forma que para pasar de una predicción de salto a una de no salto, al menos se han de producir dos errores consecutivos. Veamos la forma que tendrá este autómata en la figura siguiente:

Otra forma de realizar este esquema de predicción es utilizar como dirección de entrada al buffer toda la dirección de la instrucción de salto, en vez de solo sus bits menos significativos. Esto aumenta el rendimiento.

Page 5: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 5 12/11/2009

Page 6: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 6 12/11/2009

Page 7: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 7 12/11/2009

Page 8: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 8 12/11/2009

Page 9: Predicción dinámica. - UV dinamicos.pdf · Predictores Dinámicos Vicente Arnau Llombart 1 12/11/2009 Predicción dinámica.

Predictores Dinámicos

Vicente Arnau Llombart 9 12/11/2009