Predicción de rama es una Técnica de microarquitectura para mejorar el rendimiento de procesadores optimizados .
Conozco 3 formas en que una persona puede diseñar un procesador con predicción de bifurcación para manejar la predicción errónea: cancelación de instrucciones, cambio de nombre de registro o ranuras de retardo.
(¿Hay alguna otra forma?)
ranuras de retardo
El MIPS y el DSP de SHARC y varios otros procesadores utilizan ranuras de retardo .
Las ranuras de retardo se pueden ver como un tipo muy simple de predicción de rama: una que siempre predice que nunca se tomará una rama.
Si hay una predicción errónea de la rama, si la rama se toma realmente, las instrucciones en la ranura de retardo se ejecutan incondicionalmente de todos modos.
Este es un problema inherente con las ranuras de retardo.
Sin embargo, no es un problema inherente con la predicción de rama.
compatibilidad del conjunto de instrucciones
La mayoría de las CPU están diseñadas para ser binarias compatibles con algunas CPU anteriores.
Dado que muchas CPU tempranas terminaron completamente de ejecutar una instrucción antes de pasar a la siguiente, muchas CPU modernas intentan mantener la ilusión.
La mayoría de los procesadores actúan "como si" ejecutaran una instrucción completamente antes de pasar a la siguiente, actuando de manera efectiva "como si" no ejecutaran ninguna de esas instrucciones erróneas en el lado incorrecto de la rama.
(Algunas personas consideran que las ranuras de retardo son "ilógicas" porque las ranuras de retardo rompen la ilusión de ejecutar una instrucción completamente antes de pasar a la siguiente).
En un procesador canalizado, los resultados no se escriben (confirman) en el archivo de registro o en la memoria hasta que última etapa de la tubería: la etapa de reescritura.
cancelación de instrucciones
Con la cancelación de instrucciones, cuando hay una predicción errónea de bifurcación, un cable de retroalimentación desde la etapa de resolución de bifurcación a todas las etapas previas indica que hubo una predicción errónea.
En la siguiente marca de reloj, cuando cada instrucción en la tubería avanza a la siguiente etapa, todas las instrucciones en la tubería "detrás" de la rama se transforman simultáneamente en una "burbuja", el equivalente a una instrucción NOP.
Mientras tanto, el buscador de instrucciones comienza a cargar la tubería con instrucciones de la "rama de la derecha".
Una a la vez, cada instrucción llega a la etapa de reescritura.
Las instrucciones que han sido canceladas (transformadas en una burbuja) no escriben nada en el archivo de registro o en la memoria.
Eso evita que se muestren valores erróneos en el archivo de registro o en la memoria.
Una vez que las burbujas se han agotado, las instrucciones de la rama de la derecha comienzan a llegar a la fase de escritura y escriben los valores correctos en el archivo de registro o en la memoria.
registrar cambio de nombre
Escucho rumores de que algunos procesadores superscalar con ejecución fuera de orden use cambio de nombre de registro
para habilitar ejecución ansiosa - para obtener instrucciones de ambos lados de la rama.
A medida que las instrucciones se cargan en la tubería, el decodificador de instrucciones expande / renombra nombres de registros lógicos cortos en las instrucciones a nombres físicos más largos.
El mismo nombre de registro en dos instrucciones diferentes en dos lados de la rama se expande a dos nombres de registro físico diferentes.
Cuando la instrucción de bifurcación llega a la etapa de resolución que finalmente resuelve en qué dirección realmente irá,
Todas las instrucciones de almacenamiento de memoria en la rama incorrecta se cancelan.
Mientras tanto, el buscador de instrucciones deja de extraer instrucciones de la rama incorrecta y se enfoca solo en la rama correcta.
A medida que cada instrucción llega a la etapa de reescritura,
los que eran de la rama incorrecta pueden (en algunos diseños) escribir en un registro físico, pero los datos de manera incorrecta en esos registros físicos nunca influyen en las instrucciones de TIENDA que se ejecutan realmente - cualquier instrucción de TIENDA con una dependencia directa o indirecta en esa forma incorrecta, los datos se convertirán en una burbuja que no hace nada en el momento en que llega a la fase de reescritura.
Todas las TIENDAS en la rama de la derecha se ejecutarán correctamente, porque solo usan registros físicos influenciados por las instrucciones de la rama de la derecha.
Esos registros físicos nunca son sobrescritos por ninguna instrucción en la rama incorrecta.