Predictores de salto
3:37 | Author: Ricardo Silva Asenjo
INTRODUCCION

Una memoria caché es una memoria en la que se almacenas una serie de datos para su rápido acceso. Existen muchas memorias caché (de disco, de sistema, incluso de datos, como es el caso de la caché de Google), pero en este tutorial nos vamos a centrar en la caché de los procesadores.

Básicamente, la memoria caché de un procesador es un tipo de memoria volátil (del tipo RAM), pero de una gran velocidad.

En la actualidad esta memoria está integrada en el procesador, y su cometido es almacenar una serie de instrucciones y datos a los que el procesador accede continuamente, con la finalidad de que estos accesos sean instantáneos. Estas instrucciones y datos son aquellas a las que el procesador necesita estar accediendo de forma continua, por lo que para el rendimiento del procesador es imprescindible que este acceso sea lo más rápido y fluido posible.

Los riesgos de control son todavía más frecuentes que los de datos, así que es necesario desarrollar también técnicas dinámicas que los solucionen. Además este tipo de riesgos limita el rendimiento de las soluciones posibles para los riesgos de datos: las instrucciones no se planifican hasta que no se han resuelto todos los saltos previos.

A continuacion se van a exponer diferentes tecnicas para predecir si los saltos se realizan o no.

BUFFER DE PREDICCION DE SALTOS

Esta tecnica es la mas sencilla de todas. Su funcionamiento consiste en una memoria pequeña que se indexa con la parte baja de la direccion de las instrucciones de salto. Como solo se usa la parte mas baja de las direcciones cabe la posibilidad de que varios saltos se indexan en el buffer con la misma etiqueta, de manera que se van sobreescribiendo sus predicciones. Este tipo de memoria contiene una serie de bits que lo que hacen es resumir el comportamiento del salto en las ejecuciones anteriores y que nos ayuda a predecir el comportamiento.

Al codificar una instruccion, si esta resulta ser un salto, se usan los bits de prediccion para realizar la prediccion del salto.

-Se predice como no tomado, se continua con la búsqueda secuencial de instrucciones.
-Si se predice como tomado, en cuanto se conoce la direccion destino de salto se pasa a buscar esa instruccion.

Cuando se acierta la prediccion, se reduce la penalizacion por fallos. En cambio si se falla, se busca la instruccion adecuada y se corrige el predictor en el buffer. La mejora global se obtiene gracias a la tasa de fallos, a la frecuencia de las instrucciones de salto y a la penalizacion que supone un fallo de predicción.

La manera para mejorar el rendimiento de un buffer de prediccion es disminuir todo lo posible la tasa de fallos. Existen varias soluciones:

-Aumentar el predictor si es de un unico bit a uno de 2 bits.
-Aumentar el tamaño del predictor si su numero de entradas es menor de 4096.
-Utilizacion de predictores multinivel o correlados.

MULTINIVEL

Los predictores multinivel tienen en cuenta información local (del salto para el que se realiza la predicción) y global (del resto de saltos del programa).

En general, un predictor (m,n) utiliza el comportamiento de los m últimos saltos tomados para escoger un predictor de n bits para el salto actual. Los predictores locales serían (0,1) el de 1 bit y (0,2) el de 2 bits

Tener en cuenta información global (de todas las instrucciones de salto) puede mejorar la tasa de acierto de un predictor local (que sólo tiene en cuenta información relacionada con el salto
para el que se va a hacer la predicción). Pero esta mejora no necesariamente tiene que compensar la utilización de un hardware más complejo, puede incluso que no exista mejora alguna.


ADAPTATIVOS

Tener en cuenta información global (de todas las instrucciones de salto) puede mejorar la tasa de acierto de un predictor local (que sólo tiene en cuenta información relacionada con el salto para el que se va a hacer la predicción). Pero puede que esta mejora no sea suficiente para compensar la utilización de un hardware más complejo o incluso que no exista mejora alguna.

Los predictores adaptativos tienen la capacidad de escoger un predictor local o un predictor global según cuál se vaya a comportar mejor para un determinado salto

Si el buffer de predicción predice que el salto no se toma, no hay ningún retraso puesto que al ciclo siguiente se busca la instrucciónsiguiente. Pero si el buffer de predicción predice que el salto se va a tomar, no se puede buscar la instrucción destino de salto hasta que no se haya
calculado la dirección de esta instrucción. Y una vez que se conozca esta instrucción ya se conoce si el salto se toma realmente o no, así que no tiene sentido continuar utilizando la predicción.

La solución está en implementar algún mecanismo que permita predecir también la dirección destino de salto.
Este mecanismo es el buffer de predicción de destino de salto, que introducimos a continuación.

BUFFER DE PREDICCION DE DESTINO DE SALTO

Branch Target Buffer (BTB).Esta técnica intenta resolver el problema de la predicción de saltos para cauces como el del MIPS, en los que se conoce al mismo tiempo la dirección destino de salto que la evaluación de la condición.

El BTB es una caché que almacena la dirección destino que tuvo cada salto la última vez que se tomó. El acceso al BTB se hace durante la etapa IF de las instrucciones: al mismo tiempo que se busca la instrucción en la memoria de instrucciones, con su dirección se accede al BTB para saber si se trata de una instrucción de salto.

PILA DE DIRECCIONES

Es la mejor manera para realizar predicciones en el caso de saltos indirectos, es decir, saltos que se resuelven en tiempo de ejecución.

La mayor parte de estos saltos son retornos de procedimiento y aunque se puede utilizar el BTB para estos saltos, no es la técnica más adecuada puesto que se puede llamar al mismo procedimiento desde distintas partes del programa y entonces las direcciones de retorno (los destinos del salto) irán variando en cada ejecución de la instrucción de retorno.

La solucion será implementar una pila en la que se almacenan las direcciones desde las que se llama a los procedimientos. Si esta pila es lo suficientemente profunda, cuando se realicen los retornos se irán desapilando las direcciones adecuadas y se acertarán todas las predicciones.
This entry was posted on 3:37 and is filed under . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.