El optimizador tiene muchas heurísticas que guían la optimización. Estas heurísticas son impulsadas por varias métricas de costos, pesos, umbrales y pedidos de prioridad. Por ejemplo:
- Costos relativos de las instrucciones.
- Umbrales en línea
- Umbrales de desenrollamiento de bucle
- Registrar asignación y orden de derrame
- El orden en que los bloques básicos en un gráfico de flujo de control se linealizan al ensamblaje (generalmente guiados por probabilidades de ramificación)
- Programación de instrucciones heurísticas
Todas estas heurísticas necesitan ajuste. Muchas de estas heurísticas pueden prestarse a técnicas de aprendizaje automático si tiene acceso a una base de código fuente lo suficientemente grande y a una amplia gama de máquinas.
Si realiza una búsqueda en la web de “heurística del compilador de aprendizaje automático”, puede encontrar una serie de documentos, como esta tesis doctoral. Vale la pena leerlo si realmente te interesa este espacio.
- ¿Cómo ha cambiado la IA la industria del juego?
- ¿Cuál es el mejor equilibrador de carga de software de código abierto para llamadas RPC?
- ¿Dónde puedo encontrar datos de rendimiento y puntos de referencia para Apache Cassandra?
- Redes informáticas: quiero instalar Wireshark, ¿es seguro? ¿Qué hay de Winpcap?
- Si tengo n computadoras que ejecutan un programa Python, ¿cómo sincronizo los relojes de esas computadoras para que todas acepten menos de 0.1 milisegundos?
Relacionado con el aprendizaje automático está la idea de incorporar comentarios en el proceso de compilación. Por ejemplo, en circunstancias normales, un conjunto de configuraciones de optimización se aplica a un programa en su conjunto. En la práctica, diferentes funciones (o diferentes bloques en la misma función) se beneficiarían de un enfoque de optimización diferente. Por ejemplo, una ruta de error poco utilizada podría estar mejor compilada para el tamaño, mientras que un bucle de núcleo que se ejecuta a menudo se beneficiaría de la inserción y desenrollado agresivos.
La optimización dirigida por retroalimentación / optimización guiada por perfil puede informar al compilador qué elecciones tomar sobre una base específica. Esto no es aprendizaje automático en el mismo sentido, pero sigue siendo un ciclo de retroalimentación basado en datos que mejora la efectividad del compilador.
Las técnicas FDO / PGO están disponibles en múltiples compiladores en estos días. Primero jugué con ellos usando los compiladores de Texas Instruments hace muchos años.