Predicción de rendimiento


En informática , la predicción del rendimiento significa estimar el tiempo de ejecución u otros factores de rendimiento (como errores de caché ) de un programa en una computadora determinada. Está siendo ampliamente utilizado por los arquitectos de computadoras para evaluar nuevos diseños de computadoras, por los escritores de compiladores para explorar nuevas optimizaciones y también por los desarrolladores avanzados para ajustar sus programas.

Hay muchos enfoques para predecir el rendimiento del programa en las computadoras. Se pueden dividir aproximadamente en tres categorías principales:

Los datos de rendimiento se pueden obtener directamente de los simuladores de computadora , dentro de los cuales cada instrucción del programa de destino se ejecuta dinámicamente dado un conjunto de datos de entrada particular. Los simuladores pueden predecir el rendimiento del programa con mucha precisión, pero se necesita un tiempo considerable para manejar programas grandes. Los ejemplos incluyen los simuladores PACE y Wisconsin Wind Tunnel , así como el conjunto de herramientas de simulación WARPP más reciente que intenta reducir significativamente el tiempo requerido para la simulación de sistemas paralelos.

Otro enfoque, basado en la simulación basada en seguimiento , no ejecuta todas las instrucciones, sino que ejecuta un archivo de seguimiento que almacena solo los eventos importantes del programa. Este enfoque pierde algo de flexibilidad y precisión en comparación con la simulación precisa del ciclo mencionada anteriormente, pero puede ser mucho más rápido. La generación de seguimientos suele consumir cantidades considerables de espacio de almacenamiento y puede afectar gravemente al tiempo de ejecución de las aplicaciones si se registra una gran cantidad de datos durante la ejecución.

El enfoque clásico de la predicción del rendimiento trata un programa como un conjunto de bloques básicos conectados por una ruta de ejecución. Así, el tiempo de ejecución de todo el programa es la suma del tiempo de ejecución de cada bloque básico multiplicado por su frecuencia de ejecución, como se muestra en la siguiente fórmula: