• No se han encontrado resultados

tipo c víaNS +1 vía RAS etiqi indL2i víaST DirNS víai+1 fallo L1-BTB Diri+1 selec. DirST L1 miVía fallo de vía cola de predicciones Dir RAS

Figura 4.22. Circuito de generación de la dirección y de la predicción de vía en L1- BTB del siguiente bloque básico. No se verifican fallos en L2-BTB.

Una importante decisión de diseño consiste en no verificar los accesos a

L2-BTB en la fase de predicción. De este modo, el circuito de predicción se

simplifica y se reduce el consumo energético. A cambio, se renuncia a detectar los fallos en L2-BTB, tanto los fallos de predicción de vía como los producidos por no encontrarse los datos. La detección de estos fallos se retrasa hasta la etapa de decodificación, con un cierto número de ciclos de penalización, pero la precisión del predictor no queda afectada, ya que la información sigue estando en L2-BTB y en la fase de actualización se

4.4.4 Fase de Predicción

La fase de predicción consiste en lecturas sucesivas a los bancos de datos y de etiquetas de L1-BTB. Los accesos al banco de datos marcan la latencia del predictor, mientras que los accesos al banco de etiquetas pueden ser más lentos. Así, el ciclo del predictor ya ha finalizado con la obtención del índice al siguiente bloque básico mientras que aún no se ha obtenido ni la dirección completa del siguiente bloque básico ni se ha comprobado el fallo en L1-BTB.

La figura siguiente muestra como la última parte de la generación de Diri+1

y tami+1, y la comprobación de fallo en L1-BTB, se realizan mientras ya se

está accediendo al supuesto bloque i+1 usando indi+1. La figura también

muestra que mientras no se detectan fallos en L1-BTB no se accede a L2- BTB. Al detectar un fallo en L1-BTB (que en la figura se ilustra con el bloque

cuya dirección inicial es Diri+1), se anula el acceso en curso en L1-BTB y se

inicia el acceso a L2-BTB usando el predictor de vía obtenido de L1-BTB en

el ciclo de predicción anterior (indL2i+1). Como en L2-BTB no se comprueban

los fallos, los datos leídos siempre se utilizarán, tanto si son correctos como si no, y con estos datos se reinician los accesos a L1-BTB, tal como muestra

el camino marcado en la figura con (1). En el esquema de la figura, el fallo de

L1-BTB provoca una penalización de 2 ciclos. La penalización en un diseño concreto dependerá de la relación entre los tiempos de acceso a L1 y L2.

L2-BTB

Diri+2

tami+1

fallo L1?

indL2i+1 indL2i+2

indi+2 Diri+1

L1 Datos

indi

L1 Etiq.

tami

etiq

acierto L1 Diri+2

L1 Datos

indi+1

L1 Etiq.

tami+1

etiq

Diri

L1 Datos

indi+2

L1 Etiq.

L1 Datos

L1 Etiq.

(1)

L2-

(2) fallo vía fallo L1 ciclo de predicción

Figura 4.23. Predictor con BTB organizada en dos niveles. En el ejemplo se ve como

El acceso a L2-BTB proporciona el contenido del campo L1, que permite

discernir correctamente entre fallos reales y fallos de predicción de vía en L1- BTB. Si se detecta que el problema ha sido un fallo de predicción de vía,

entonces es muy probable que la nueva predicción de vía para L1-BTB, leída

ahora de L2-BTB, sea correcta, y se rompa una posible cadena de fallos de

predicción de vía. En cambio, si se detecta que el problema ha sido un fallo real en L1-BTB, entonces es bastante probable que se produzca una cadena de fallos reales en L1-BTB. En este caso, se toma la decisión de diseño de

adelantar el camino paralelo marcado en la figura con el número (2), para así reducir la penalización de un posible nuevo fallo en L1-BTB a un único ciclo,

en lugar de dos.

La siguiente figura muestra de forma esquemática el mismo ejemplo de la figura anterior. Cada ciclo se obtiene un nuevo índice a L1-BTB (indi, indi+1, indi+2, …), y la comprobación de que el índice usado era correcto finaliza un

poco después de haber comenzado el acceso con el siguiente índice. Por ejemplo el acceso a L1-BTB para el bloque i+1 se inicia en el ciclo 1 con indi+1, y el error se detecta ya iniciado el ciclo 2. Al detectar un error, se inicia

inmediatamente el acceso a L2-BTB, en el ejemplo usando indL2i+1. Al

comenzar el ciclo 4 ya se dispone de los índices para el bloque i+2, tanto en L1 como en L2. Además, ya se sabe si el error en L1 fue provocado por un

fallo real o por un fallo de predicción de vía. En el primer caso, tal como se ha comentado, se adelanta el acceso a L2-BTB para prevenir un posible nuevo

fallo en L1-BTB (camino (2) en la figura).

prueba i

ind i ind i+1 ind i+2

prueba i+1!

ind i+2 ind i+3 prueba i+1

ciclo 0 ciclo 1 ciclo 2 ciclo 3 ciclo 4 ciclo 5

L1-BTB datos L1-BTB etiq.

L2-BTB datos indL2 i+1 indL2 i+2

(1) (2)

Figura 4.24. Al final del ciclo 2 se detecta el fallo en L1-BTB al acceder al bloque i+1

mientras ya se accedía al bloque i+2. Tras el acceso a L2 se conoce la causa del fallo

4.4.5 Fase de Recuperación

Al recuperarse del fallo de predicción de un salto condicional, la cola de predicciones o la pila RAS proporcionan la predicción de la vía alternativa para los dos niveles de BTB. La otra diferencia respecto a la organización con

un único nivel es la gestión de los fallos detectados en la etapa de decodificación o debidos a un salto indirecto.

Tras un fallo detectado en la etapa de decodificación o tras un fallo de predicción de saltos indirectos, no se dispone de una predicción de vía adecuada, y es fácil que se produzca un nuevo fallo de predicción de vía tanto en L1-BTB como en L2-BTB. El nuevo fallo de predicción de vía en L2- BTB puede volver a generar un fallo de decodificación, y producir una cadena de fallos que no finaliza hasta que, por azar, se realice una predicción de vía correcta. Para evitar estas cadenas de fallos, se tratan los dos casos anteriores de forma especial.

Tras la recuperación del fallo, a la vez que se inicia el acceso a L1-BTB,

también se accede al banco de etiquetas de L2-BTB, para leer en paralelo

todas las etiquetas del conjunto y encontrar la vía en L2 correspondiente al

bloque que se comienza a predecir. Si se detecta fallo en L1-BTB, se puede

entonces acceder a la vía adecuada de L2-BTB, rompiendo el círculo de fallos de predicción de vía.

4.4.6 Fase de Actualización

La penalización de los fallos en L1-BTB y la no detección de los fallos en L2- BTB, hacen que la organización de 2 niveles sea más eficiente si, al revés que en los dos esquemas previos, también se guardan los bloques básicos que tienen longitud máxima y no finalizan en ninguna instrucción de salto.

Cuando en la etapa de predicción se produce un acierto en L1-BTB, no es

necesario actualizar ningún campo de L2-BTB. Los cambios en los campos

básico. Igualmente, al registrar por primera vez un bloque básico en L1-BTB,

sólo se conoce con certeza la predicción de vía de uno de los dos bloques básicos siguientes, y el otro campo de predicción de vía se inicializa con el valor 0. La actualización correcta se hará cuando se detecte posteriormente un error de predicción de vía.

Al retirar un bloque de salto a subrutina, se deben almacenar los índices a los dos niveles de BTB en la pila especial de actualización. Al retirar el bloque siguiente a un bloque de retorno de subrutina, se extraen de la pila estos dos índices al bloque de llamada a subrutina y, si es necesario, se actualizan sus campos de predicción de vía.

La Figura 4.25 muestra las operaciones de actualización que pueden ser necesarias. Para reducir el número de accesos a las tablas, sólo se realiza la actualización correspondiente al bloque básico i, una vez que se ha analizado

el resultado del bloque básico siguiente, i+1.

L1-BTB