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
indiL1 Etiq.
tamietiq
acierto L1 Diri+2L1 Datos
indi+1L1 Etiq.
tami+1etiq
DiriL1 Datos
indi+2L1 Etiq.
L1 Datos
L1 Etiq.
(1)L2-
(2) fallo vía fallo L1 ciclo de predicciónFigura 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.