¿Cuál es la diferencia entre la bifurcación retrasada y la predicción de bifurcación?

Estoy estudiando cómo funciona la bifurcación retrasada y estoy tratando de distinguir la bifurcación retrasada de la predicción de bifurcación. ¿Cuál es la diferencia? ¿Es la ramificación retrasada un medio para facilitar un peligro de control?

Respuestas (2)

La bifurcación retrasada y la predicción de bifurcación son dos formas diferentes de mitigar los efectos de una canalización de ejecución larga. Sin ellos, la tubería debe detenerse cada vez que se toma una bifurcación condicional, porque el mecanismo de obtención de instrucciones no puede saber qué instrucción debe ejecutarse después de la instrucción de bifurcación hasta que se completen los cálculos de los que depende.

La bifurcación retrasada simplemente significa que una cierta cantidad de instrucciones que aparecen después de la bifurcación en el flujo de instrucciones se ejecutarán independientemente de la dirección final de la bifurcación. En muchos casos, un compilador puede colocar instrucciones en esos espacios que en realidad no dependen de la rama en sí, pero si no puede, debe llenarlos con NOP, lo que mata el rendimiento de todos modos. Este enfoque mantiene el hardware simple, pero supone una carga para la tecnología del compilador.

La predicción de bifurcación es un enfoque más orientado al hardware, en el que el buscador de instrucciones simplemente "adivina" en qué dirección irá la bifurcación, ejecuta las instrucciones en ese camino y, si más tarde resulta que se equivocó, se arrojan los resultados de esas instrucciones. lejos. Varios sistemas tienen diferentes formas de mejorar la precisión de la conjetura. A veces, el compilador pone una pista en el flujo de instrucciones y, a veces, el hardware realiza un seguimiento de la dirección de cada rama en el pasado.

Algunas ISA admiten la anulación de intervalos de retardo de bifurcación donde la instrucción se convierte dinámicamente en un nop, generalmente si no se toma la bifurcación (es decir, la instrucción de intervalo de retardo proviene de la ruta tomada). También es posible llenar una ranura de retraso con una instrucción que es inútil pero no dañina en una ruta, lo que generalmente requiere un registro libre para contener el resultado (posiblemente no utilizado) de la instrucción. Una instrucción de pista como prefetch también es "segura".

La bifurcación retrasada ejecuta instrucciones sin bifurcación y dependencia tras bifurcación para evitar desperdiciar ciclos durante el cálculo de la bifurcación y la dirección de destino. La predicción de bifurcación es asumir que una bifurcación no se toma (predicción de bifurcación estática) o predecir basada en el historial (predicción de bifurcación dinámica) para ejecutar instrucciones después de la bifurcación de acuerdo con la predicción. Hay una diferencia entre ejecutar una parte irrelevante para una rama y predecir que una rama se ejecute de acuerdo con la predicción.