Dado que la CPU adopta la tubería para ejecutar instrucciones, lo que significa que cuando una instrucción previa se está ejecutando en algún momento (por ejemplo, leyendo valores de registros), la siguiente instrucción se ejecutará al mismo tiempo, pero en otra etapa (por ejemplo, etapa de decodificación). Está bien para las instrucciones que no son de control, pero hace que las cosas sean complejas cuando se ejecutan las instrucciones de control como jmp
o call
.
Desde la CPU no sabe cuál será la siguiente instrucción al ejecutar una instrucción jmp
, utiliza branch prediction técnicas para predecir si se tomará o no la instrucción de salto (Por ejemplo, una instrucción de salto en un fragmento de bucle probable que tome la flujo de instrucción de vuelta a la cabeza del bucle).
Sin embargo, cuando dicha predicción falla, que se llama branch misprediction, tendrá un impacto en el rendimiento de la ejecución. Dado que la tubería después de la derivación debe descartarse, y volver a empezar desde la instrucción correcta.
+1: También es importante para este problema: las CPU modernas generalmente tienen [predictores de clasificación] (http://en.wikipedia.org/wiki/Branch_predictor) para minimizar este factor pérdida de rendimiento. – amit
Pero existen técnicas que aceleran este proceso llamado "predicción de bifurcación" (http://en.wikipedia.org/wiki/Branch_prediction). Eso no siempre funciona, pero en general funciona mejor. editar: soy demasiado lento. xD – alfa
Solo para aclararlo: detener la tubería significa que todas las instrucciones que se han precargado deben descargarse. Además, se deben revertir los posibles efectos secundarios (generalmente datos que han cambiado debido a una rama mal predicha). Todas estas operaciones cuestan tiempo y energía. – NeXuS