predictor de rama


En la arquitectura de computadoras , un predictor de rama [1] [2] [3] [4] [5] es un circuito digital que trata de adivinar en qué dirección irá una rama (por ejemplo, una estructura if-then-else ) antes de que esto sea conocido definitivamente. El propósito del predictor de bifurcación es mejorar el flujo en la canalización de instrucciones . Los predictores de bifurcación desempeñan un papel fundamental en el logro de un alto rendimiento efectivo en muchas arquitecturas modernas de microprocesadores segmentados , como x86 .

La bifurcación bidireccional generalmente se implementa con una instrucción de salto condicional . Un salto condicional puede "no tomarse" y continuar la ejecución con la primera rama de código que sigue inmediatamente después del salto condicional, o puede "tomarse" y saltar a un lugar diferente en la memoria del programa donde está la segunda rama de código. almacenado. No se sabe con certeza si se realizará o no un salto condicional hasta que se haya calculado la condición y el salto condicional haya pasado la etapa de ejecución en la tubería de instrucciones (ver fig. 1).

Sin predicción de bifurcación, el procesador tendría que esperar hasta que la instrucción de salto condicional haya pasado la etapa de ejecución antes de que la siguiente instrucción pueda ingresar a la etapa de búsqueda en la canalización. El predictor de bifurcación intenta evitar esta pérdida de tiempo tratando de adivinar si es más probable que se realice o no el salto condicional. La rama que se supone que es la más probable se busca y se ejecuta especulativamente . Si luego se detecta que la suposición fue incorrecta, las instrucciones ejecutadas especulativamente o ejecutadas parcialmente se descartan y la canalización comienza de nuevo con la rama correcta, lo que genera un retraso.

El tiempo que se desperdicia en caso de una predicción errónea de la bifurcación es igual al número de etapas en la canalización desde la etapa de obtención hasta la etapa de ejecución. Los microprocesadores modernos tienden a tener tuberías bastante largas, por lo que el retraso en la predicción errónea es de entre 10 y 20 ciclos de reloj . Como resultado, hacer una canalización más larga aumenta la necesidad de un predictor de bifurcación más avanzado. [6]

La primera vez que se encuentra una instrucción de salto condicional, no hay mucha información en la que basar una predicción. Pero el predictor de rama mantiene registros de si se toman o no las ramas. Cuando encuentra un salto condicional que se ha visto varias veces antes, puede basar la predicción en el historial. El predictor de bifurcación puede, por ejemplo, reconocer que el salto condicional se realiza la mayoría de las veces, o que se realiza cada dos veces.

La predicción de rama no es lo mismo que la predicción de destino de rama . La predicción de bifurcación intenta adivinar si se realizará o no un salto condicional. La predicción de objetivos de bifurcación intenta adivinar el objetivo de un salto condicional o incondicional realizado antes de que se calcule descodificando y ejecutando la instrucción en sí. La predicción de bifurcación y la predicción de objetivo de bifurcación a menudo se combinan en el mismo circuito.


Ejemplo de tubería de 4 etapas. Los cuadros de colores representan instrucciones independientes entre sí.
Figura 2: diagrama de estado del contador de saturación de 2 bits
Figura 3: Predictor de rama adaptable de dos niveles. Cada entrada en la tabla de historial de patrones representa un contador de saturación de 2 bits del tipo que se muestra en la figura 2. [13]