Está en la página 1de 3

Problema

Considere los dos bucles anidados que hay en el siguiente fragmento de seudocódigo:

x:=1;
S1: y:=1;
S2: Operación;
y:=y+1;
if (y<=100) goto S2
x:=x+1;
if (x<=1000) goto S1

a) Si la predicción dinámica de los saltos se realiza mediante un predictor de Smith de 1 bit de historial
global como el que se presenta en la figura situada a continuación:

- ¿Cuál es la secuencia de predicciones de los saltos existentes en el código para todas las
iteraciones de éste?
- ¿Qué porcentaje de éxito obtiene el predictor para el código del enunciado?
- Genere una expresión genérica que proporcione el porcentaje de éxito del predictor en función
de las iteraciones de los dos bucles.

Fallo
Predicción de saltar Predicción de no saltar
T (1) NT (0)
Acierto
Acierto Fallo

Suponga que el estado inicial del predictor es que el próximo salto no será efectivo. Razone todas las
respuestas.

b) Diseñe un predictor de Smith para que la predicción del salto solo cambie ante dos fallos consecutivos
en la misma. Razone la respuesta.

c) Utilizando el predictor que ha diseñado en el apartado anterior:

- ¿Cuál es la secuencia de predicciones de los saltos existentes en el código para todas las
iteraciones de éste?
- ¿Qué porcentaje de éxito obtiene el nuevo predictor para el código?
- Genere una expresión genérica que proporcione el porcentaje de éxito del nuevo predictor en
función de las iteraciones de los dos bucles.

Suponga que el estado inicial del predictor es aquel que permite que tras el segundo fallo consecutivo la
previsión cambie a que el salto siguiente será no efectivo. Razone todas las respuestas.
Solución

a) En la siguiente tabla se presenta un resumen de la diferencia entre la predicción que se realiza de la


efectividad de los saltos S1 y S2 y la situación real que se produce. El historial de salto es global y el
estado inicial del predictor es NT.

y=2 y=3 … y=100 y=101 x=2 y=2 .… y=100 y=101 x=3 … y=101 x=1001

Estado NT T T T T NT T T T T NT T T NT
Salto T T T T NT T T T T NT T T NT NT

El bucle S2 de cada 100 iteraciones, ejecuta el salto en 99 ocasiones. Sin embargo, al tener un historial de
salto de 1 bit la predicción no sólo falla la vez que no se produce el salto S2 (y=101) sino también la
siguiente vez que se ejecuta la instrucción correspondiente al salto S1. Es decir, se producen 2 fallos en
cada iteración del bucle principal.

En este caso los fallos de predicción son 2000 de los 100.000 saltos realizados por el código del
enunciado. El porcentaje de acierto del predictor es 98%. Generalizando se tiene:

2 ∗ 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1
% acierto predictor = 100 ∗ 01 − ?
𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1 ∗ 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2
2
= 100 ∗ 01 − ?
𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2

Obsérvese que si en un nuevo supuesto el total de saltos fuese 16 (S1 y S2 iteran 4 veces cada uno), los
fallos del predictor serían 8, y el porcentaje de acierto del predictor subiría al 50%.

Lo anterior es una simplificación en la que no se considera el único acierto del bucle S1. La expresión
completa si se considera se obtiene contabilizando los saltos y los aciertos totales es:

2 ∗ 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2*𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1 + 1


% acierto predictor = 100 ∗ 0 ?
𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1 ∗ 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2 + 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1

Se obtiene un porcentaje exacto de acierto del predictor para S1 =1000 y S2 =100 del 97,03%. Y en caso
de que S1 y S2 iterasen 4 veces cada uno, el porcentaje de acierto exacto sería 45%. Nótese como la
influencia de no considerar el único éxito en S1 ya no queda tan diluida.
b) El problema se resuelve aumentando la memoria histórica del predictor a 2 bits de tal forma que para
modificar una predicción será necesario tener dos fallos consecutivos. A continuación, se presenta la
máquina de estados del predictor de Smith de 2 bits diseñado para tal fin.

Fallo
Predicción de saltar Predicción de saltar
ST (11) WT (10)
Acierto
Acierto Fallo
Fallo

Acierto
Predicción de no saltar
Predicción de no saltar SN (00)
WN (01)
Fallo
Acierto

c) El estado inicial debe ser 11 (ST) de forma que, tras el segundo fallo consecutivo, la predicción
cambiará a que el siguiente salto ya no será efectivo. Con este supuesto la tabla quedaría de la siguiente
forma:

y=2 y=3 … y=100 y=101 x=2 y=2 .… y=100 y=101 x=3 … y=101 x=1001

Estado 11 11 11 11 11 10 11 11 11 11 10 11 11 10
Salto E E E E N E E E E N E E N N

En este caso los fallos de predicción son 1001 de los 100.000 saltos realizados. El porcentaje de acierto
del predictor es aproximadamente del 99%:

1
% acierto del predictor = 100 ∗ 01 − ?
𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2

No se ha tenido en cuenta el fallo de predicción que se produce siempre a la salida del bucle S1. Si se
considera, la expresión exacta del predictor pasa a ser:

1 1
100 ∗ 01 − + ?
𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆1 ∗ 𝑁º 𝑖𝑡𝑒𝑟𝑎𝑐𝑖𝑜𝑛𝑒𝑠 𝑆2

En el nuevo supuesto el total de saltos fuese 16 (S1 y S2 iteran 4 veces cada uno), los fallos del predictor
serían 5 (4 fallos del S2 más el fallo de la salida del S1), y el porcentaje de acierto aumentaría
aproximadamente al 75%.

También podría gustarte