En informática , la predicción del rendimiento significa estimar el tiempo de ejecución u otros factores de rendimiento (como fallas de caché ) de un programa en una computadora determinada. Se está utilizando ampliamente para que los arquitectos de computadoras evalúen nuevos diseños de computadoras, para que los escritores de compiladores exploren nuevas optimizaciones y también para que los desarrolladores avanzados ajusten sus programas.
Existen muchos enfoques para predecir el rendimiento del programa en las computadoras. Se pueden dividir aproximadamente en tres categorías principales:
- predicción basada en simulación
- predicción basada en perfiles
- modelado analítico
Predicción basada en simulación
Los datos de rendimiento se pueden obtener directamente de simuladores de computadora , dentro de los cuales cada instrucción del programa de destino se ejecuta realmente de forma dinámica 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 rastreo , no ejecuta todas las instrucciones, sino que ejecuta un archivo de rastreo que almacena únicamente los eventos importantes del programa. Este enfoque pierde algo de flexibilidad y precisión en comparación con la simulación con precisión de ciclo mencionada anteriormente, pero puede ser mucho más rápido. La generación de rastreos 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.
Predicción basada en perfiles
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:
Las frecuencias de ejecución de los bloques básicos se generan a partir de un generador de perfiles , por lo que este método se denomina predicción basada en perfiles. El tiempo de ejecución de un bloque básico generalmente se obtiene de un programador de instrucciones simple.
La predicción clásica basada en perfiles funcionó bien para los primeros procesadores de ejecución en orden de un solo problema, pero no puede predecir con precisión el rendimiento de los procesadores modernos. La razón principal es que los procesadores modernos pueden emitir y ejecutar varias instrucciones al mismo tiempo, a veces fuera del orden original y cruzan el límite de los bloques básicos.