• No se han encontrado resultados

Predicción Anticipada (Ahead) en BTB

L1-BTB ind

4.6. Predicción Anticipada (Ahead) en BTB

La técnica de la predicción anticipada, propuesta para BHT en la sección 3.6,

consiste en comenzar el acceso a la tabla antes de tener toda la información que en principio sería necesaria para generar el índice. Así que se construye un índice inicial con la información disponible en ese momento, y a medida que se obtiene el resto de información, se incluye en el mecanismo de selección del resultado final. Se mostró en la sección 3.6 que la aplicación de la predicción anticipada a BHT era muy efectiva, al menos anticipando hasta

4 ciclos, y que sólo se reducía la precisión alrededor de un 1%.

4.6.1 Diseño simple

Aplicar la misma técnica a BTB comporta más problemas. En el diseño sin

anticipación, la dirección de un bloque básico i se utiliza para indexar BTB y

encontrar la información del bloque básico i. Anticipar el acceso un ciclo

supone usar la dirección del bloque básico i-1 para acceder a BTB y, a mitad

del acceso, utilizar la dirección del bloque básico i, recién obtenida, para

seleccionar la información final. Es decir, para cada dirección de bloque básico se ha de almacenar en BTB los datos de sus bloques básicos

sucesores. Si un bloque básico finaliza en un salto condicional tiene como máximo dos sucesores, pero si finaliza en un salto indirecto pueden tener múltiples sucesores (hasta 170 en algún caso puntual).

La forma más simple de tratar el problema de los saltos indirectos es detectarlos y anular el acceso anticipado, con el consiguiente retardo de

penalización. En realidad, sólo es necesario anular el acceso anticipado para saltos indirectos polimórficos.

El esquema más sencillo de anticipación consiste entonces en el que se muestra en la siguiente figura. Se inicia el acceso usando la dirección del bloque básico i-1, y si este bloque finaliza en un salto condicional se utiliza su

predicción, pi-1, para seleccionar la información del bloque básico i (BBi). Para

acelerar la recuperación del predictor en caso de error, se podría almacenar la predicción alternativa en la cola, pero el tamaño de los datos almacenados es demasiado grande (al menos 4 bytes por predicción) y no resulta eficiente hacerlo. Por tanto, cada vez que se produce un fallo de predicción de un salto condicional hay que añadir un ciclo extra para recuperar el predictor.

BTB

Diri-1 pi-1 BBi

BB’i

Figura 4.32. El acceso al bloque básico i se inicia usando la dirección del bloque básico i-1. La predicción del salto condicional del bloque básico i-1 (pi-1) se usa para

seleccionar la información del bloque básico i.

Este diseño se puede generalizar para anticipar 2 o más ciclos. Sin embargo, hay que tener en cuenta que los requerimientos de memoria crecen exponencialmente. Anticiparse 1 ciclo requiere, para mantener la misma razón de fallos, una BTB con el doble de entradas que en el caso original.

Anticiparse 2 ciclos requeriría el cuádruplo de entradas. Lo mismo se podría decir del consumo energético. Anticiparse 1 ciclo requiere leer el doble de información de la tabla en cada acceso, para finalmente quedarse con la mitad. Anticiparse 2 ciclos requeriría leer el cuádruplo de entradas.

4.6.2 Diseño complejo

Se ha comprobado experimentalmente que cada bloque básico tiene una media de 1,43 sucesores, o lo que es lo mismo, que alrededor del 57% de los

bloques básicos tienen un único sucesor. Es decir, no sería estrictamente necesario duplicar el tamaño de BTB, sino que habría que multiplicarlo por

1,43 para poder anticipar un ciclo los accesos y mantener la tasa de fallos. En ese caso se debe usar un esquema de indexación diferente, utilizando la predicción del salto condicional pi-1 como parte de la comparación de

etiquetas en BTB. Se han realizado simulaciones de este último diseño, con

anticipación de un ciclo, con pi-1 formando parte de la etiqueta, y una BTB de

organización asociativa de 4 y 8 vías. Los resultados se muestran a continuación. 50% 60% 70% 80% 90% 100% 1K 2K 4K 8K 16K Nº de Entradas en BTB P reci si ó n r esp ect o BT B ili m it a d a BTB-4 vías BTB-8 vías BTBahead-4 vías BTBahead-8 vías

Figura 4.33. Porcentaje de la precisión para saltos condicionales comparada con el uso de una BTB ilimitada, para diversas capacidades de la tabla BTB, con 4 y 8 vías,

y con anticipación (BTBahead) o sin ella.

Un resultado importante es que la asociatividad de 4 vías resulta insuficiente comparada con la asociatividad de 8 vías. La razón es que hay más conflictos debidos a usar pi-1 en la parte de la comparación de etiquetas.

Para organizaciones de 8 vías, se puede corroborar que la anticipación de un ciclo supone aproximadamente unas prestaciones que corresponderían a una

BTB sin anticipación de alrededor de un 70% del tamaño.

4.6.3 Conclusiones

La técnica de anticipación aplicada a BTB consigue aumentar la velocidad del

predictor pero a costa de aumentar los requerimientos de memoria, el consumo energético y la complejidad del diseño. Además, se alarga el tiempo

de recuperación en caso de fallo de predicción y no se puede aplicar de forma eficiente a la predicción de saltos indirectos polimórficos.

La predicción de vía y de índice, en cambio, aumenta moderadamente los requerimientos de memoria, pero disminuye notablemente el consumo. La complejidad del diseño es también alta, pero no se penaliza la latencia de recuperación de los fallos de predicción.

Se han hecho pruebas preliminares mezclando anticipación y predicción de vía y se ha constatado la dificultad del diseño. Entre otras dificultades, las actualizaciones de predicción de vía se han de hacer con un ciclo (o varios) de retraso y se han de tener en cuenta los saltos indirectos que no utilizan predicción anticipada. En todo caso, la combinación de ambas ideas se puede tratar en una futura línea de estudio.