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

1

Estoy estudiando cómo funcionan las sucursales retrasadas y estoy tratando de distinguir las predicciones de las sucursales retrasadas. ¿Cuál es la diferencia? ¿Es la ramificación con retraso un medio para facilitar un peligro de control?

    

1 respuesta

5

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

La ramificación demorada simplemente significa que un cierto número de instrucciones que aparecen después de la rama en el flujo de instrucciones se ejecutará independientemente de de la forma en que la rama finalmente va. En muchos casos, un compilador puede poner instrucciones en esas ranuras que realmente no dependen de la rama en sí, pero si no puede, debe llenarlas 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 rama es un enfoque más orientado al hardware, en el que el buscador de instrucciones simplemente "adivina" cómo irá la rama, ejecuta las instrucciones por ese camino y, si luego resulta que se ha equivocado, los resultados las instrucciones son desechadas. Varios sistemas tienen diferentes maneras 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 forma en que cada rama ha ido en el pasado.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas