La programación de seguimiento es una técnica de optimización desarrollada por Josh Fisher que se utiliza en compiladores de programas informáticos . [1]
Un compilador a menudo puede, reorganizando sus instrucciones de máquina generadas para una ejecución más rápida, mejorar el rendimiento del programa. Aumenta el ILP ( paralelismo de nivel de instrucción ) a lo largo de la ruta de ejecución importante al predecir estáticamente la ruta de ejecución frecuente. La programación de seguimiento es una de las muchas técnicas conocidas para hacerlo.
Un rastreo es una secuencia de instrucciones, que incluye ramas pero sin bucles, que se ejecuta para algunos datos de entrada. La programación de trazas utiliza un método de programación de bloques básico para programar las instrucciones en cada traza completa, comenzando con la traza con la frecuencia más alta. Luego agrega un código de compensación a la entrada y salida de cada traza para compensar cualquier efecto que pueda haber tenido la ejecución fuera de orden .
Esto puede resultar en grandes aumentos en el tamaño del código y un rendimiento deficiente o errático si el comportamiento del programa varía significativamente con la entrada.
La programación de seguimiento se desarrolló originalmente para máquinas de Word de instrucciones muy largas, o VLIW , y es una forma de movimiento de código global. Funciona convirtiendo un bucle en una secuencia de código de línea recta larga mediante el desenrollado de bucle y la predicción de rama estática . Este proceso separa el código "improbable" y agrega controladores para las salidas del seguimiento. El objetivo es ejecutar el caso más común como un conjunto secuencial de instrucciones sin ramificaciones.
Ver también
Referencias
- ^ Steven Muchnick; Muchnick y Asociados (15 de agosto de 1997). Implementación avanzada del diseño del compilador . Morgan Kaufmann. ISBN 978-1-55860-320-2.
Programación de seguimiento.
- Fisher, Joseph A. (1981). "Programación de seguimiento: una técnica para la compactación de microcódigo global". Transacciones IEEE en computadoras . 30 (7): 478–490. doi : 10.1109 / TC.1981.1675827 .