• No results found

J. P Nettl viewed mobilization as a process which involves: (1) a commitment to action, and (2) a means of translating this

4. Environment.

En la fase de actualización se van formando las trazas utilizando las instrucciones recién retiradas y aplicando la política de selección de trazas que corresponda. Una vez identificada la traza retirada, se comprueba si corresponde con la traza predicha, cuya información se extrae de la cola de predicciones. Entonces se debe actualizar, si es conveniente, el contenido de

THT y TTB. Cabe remarcar de nuevo que la actualización de las tablas de

predicción se hace con cierto retraso.

THT se actualiza sólo para clases de trazas con más de una instancia. En

caso de predicción acertada, se pone a 1 el bit de histéresis, mientras que en caso de fallo, se lee el bit de histéresis y se pone a cero. Sólo se modifica la predicción de THT si hubo fallo previo y el bit de histéresis leído era cero.

TTB sólo se actualiza si se produjo un error de predicción de traza. Se

vuelven a leer las etiquetas de TTB para encontrar la posición donde se

almacena la información sobre la clase. En caso de fallo (pudo haberlo o no en la fase de predicción), se selecciona una entrada para emplazar la nueva clase, usando una política de reemplazamiento LRU. La nueva traza se

almacena en el primer campo de la entrada seleccionada, se le asigna el número cero como LTN, y se borran los bits de validez correspondientes al resto de trazas de la clase.

En caso de acierto en TTB, se comparan los patrones de salto para ver si

la traza ya está almacenada. Si no es así, se emplaza la nueva traza en la primera posición vacía, se le asigna el LTN que le corresponda a esa

posición, y se activa su bit de validez. Si no queda espacio en la entrada de

TTB para una nueva traza, entonces se ejecuta el algoritmo descrito a

continuación.

Algoritmo de desbordamiento de la clase de trazas.

Es necesario buscar una solución a este problema que no reduzca la precisión del predictor y que reduzca lo menos posible la anchura de las predicciones. En un estudio preliminar se analizaron soluciones simples. La más directa era descartar las nuevas trazas. Los resultados fueron muy insatisfactorios, especialmente cuando el límite era de 2 trazas por clase. Otra solución analizada fue hacer que las trazas “compitieran” por una posición dentro de TTB, utilizando contadores para “premiar” a las trazas

más frecuentes, o a las trazas que se predecían correctamente de forma más frecuente. Las pruebas en este sentido tampoco fueron satisfactorias, ya que con un límite de 2 trazas por clase la precisión se reducía más de un 15%.

La razón de que el mecanismo anterior no funcionara adecuadamente es que para ciertos programas existían clases de trazas con muchas instancias y con una alta frecuencia de ejecución. Al competir por una posición en la clase, se producía un continuo trasiego que impedía que el predictor tuviese tiempo suficiente para aprender.

Una alternativa más adecuada es reducir dinámicamente el número de saltos condicionales incluidos dentro de las trazas, de forma que se reduce el número total de trazas en una clase. De este modo, se reemplazan las trazas existentes en TTB por versiones más cortas, fundiendo dos o más trazas en

una traza más pequeña que contiene la parte común de las primeras. De este modo, algunos campos de la entrada TTB pueden ser invalidados, y algunas

rendimiento del predictor es una reducción en la anchura media de las predicciones, y un posible incremento en el número de fallos de predicción, que se ha probado experimentalmente que es muy pequeño.

La precisión se reduce muy poco porque el número de desbordamientos es pequeño. Al principio de la ejecución del programa, los desbordamientos se producen con relativa frecuencia, pero una vez que se ha acomodado el tamaño de las trazas en cada clase, prácticamente dejan de producirse, y el predictor puede “aprender” a predecir las trazas en su longitud final.

Se han analizado dos algoritmos para manejar el desbordamiento de una clase de trazas:

Recortar todas las trazas: se reduce el número máximo de saltos

condicionales por traza para todas las trazas de la clase, hasta que se consigue acomodar la nueva traza.

Recortar la traza de mayor coincidencia: entre las trazas de la clase se busca aquella que coincida con la nueva traza en un número mayor de instrucciones, y se substituye por la traza que corresponde con el trozo coincidente. Si el número de saltos condicionales de la traza final resultara ser menor que K, entonces se anula la operación, y en su lugar

ser utiliza la estrategia de recortar todas las trazas.

El primer algoritmo es más sencillo de implementar, pero requiere guardar en cada entrada de TTB el límite actual de saltos condicionales. El segundo

algoritmo es más complejo de implementar, pero no requiere de información adicional en TTB. Hay que notar que este algoritmo se lleva a cabo en una fase cuyo retardo no es crítico y que además se ejecuta de forma muy poco frecuente. Por tanto, el algoritmo puede alargarse múltiples ciclos sin que tenga efectos significativos en el rendimiento.

La siguiente figura muestra un ejemplo en el que se tienen 4 trazas en una misma clase y aparece una quinta traza. Inicialmente se admiten trazas con hasta 5 saltos condicionales. El algoritmo de recortar todas las trazas daría

lugar a trazas con sólo 4 saltos condicionales. Afectaría a las trazas nº 2 y nº 3, que se verían recortadas. La nueva traza correspondería con la traza nº 3, y sobraría un trozo de la traza que se está retirando, que se uniría a las siguientes instrucciones retiradas del procesador para forma una nueva traza.

?

(1) (2) Máximo 4 trazas (K=2) Máximo 5 saltos (B=5) (B=4) (B=5) LTN=0 LTN=1 LTN=2 LTN=3 LTN=0 LTN=1 LTN=2 LTN=3 LTN=0 LTN=1 LTN=2 LTN=3

Figura 5.16. Ejemplo que ilustra los dos algoritmos para tratar un desbordamiento de

clase de trazas. (1) recortar todas las trazas (2) recortar la traza de mayor coincidencia.

El algoritmo de recortar la traza de mayor coincidencia sólo afectaría a la

traza nº 3, que sería recortada para acomodar a la nueva traza. En este ejemplo, el segundo algoritmo reduce la longitud media de las trazas menos que el primer algoritmo, y por tanto reduciría menos la anchura de las predicciones. Las simulaciones han mostrado que este caso se produce a menudo, y que la anchura de las predicciones es un 5% mayor para la estrategia de recortar la traza de mayor coincidencia, y que es la que se

considerará a partir de ahora.

5.4. Resultados

En primer lugar se analiza la anchura y la precisión de las predicciones para las diferentes configuraciones de predictores. Para medir la precisión del predictor NTP(N,B) se usa la configuración LTP(N,B,K=B). De este modo, se

simula el mismo algoritmo de indexación en todos los predictores, y al igualar los parámetros K y B se asegura que no hay ningún límite en el número de

trazas que puede haber en una clase. Para simplificar la discusión, se sobreentenderá que al nombrar las tablas THT y TTB mientras se considera

el predictor BBP, se está refiriendo a las tablas BHT y BTB, respectivamente.

Estos datos se cruzan con el tamaño de cada predictor para encontrar la configuración más adecuada de cada tipo de predictor y para poderlos comparar de forma justa. Estos resultados se han obtenido con un modelo de procesador simplificado, que utiliza un modelo ideal de la memoria, y que no considera las dependencias entre las instrucciones ni sus latencias. El número de ciclos entre la predicción y la actualización de las tablas se ha fijado en 16 ciclos. El predictor sí que se ha modelado con todo detalle.

A continuación se analiza el efecto en el rendimiento del procesador del aumento de anchura proporcionado por LTP. Para obtener estos resultados se utiliza un modelo de procesador realista, con tres niveles de memoria y una organización desacoplada de la unidad de búsqueda, y con prebúsqueda de instrucciones dirigida por el predictor.