Optimización interprocedimiento


La optimización entre procedimientos ( IPO ) es una colección de técnicas de compilación utilizadas en la programación de computadoras para mejorar el rendimiento en programas que contienen muchas funciones de uso frecuente de longitud pequeña o mediana. IPO se diferencia de la optimización de otros compiladores porque analiza todo el programa; otras optimizaciones se fijan en una sola función, o incluso en un solo bloque de código.

IPO busca reducir o eliminar los cálculos duplicados, el uso ineficiente de la memoria y simplificar las secuencias iterativas como los bucles. Si hay una llamada a otra rutina que ocurre dentro de un ciclo, el análisis de IPO puede determinar que es mejor alinear eso. Además, IPO puede reordenar las rutinas para un mejor diseño de memoria y localidad .

IPO también puede incluir optimizaciones típicas del compilador en un nivel de programa completo, por ejemplo , eliminación de código muerto (DCE), que elimina el código que nunca se ejecuta. Para lograr esto, el compilador prueba las ramas que nunca se toman y elimina el código en esa rama. IPO también intenta garantizar un mejor uso de las constantes. Los compiladores modernos ofrecen IPO como una opción en tiempo de compilación. El proceso de IPO real puede ocurrir en cualquier paso entre el código fuente legible por humanos y la producción de un programa binario ejecutable terminado.

Para los idiomas que compilan archivo por archivo, una IPO efectiva en unidades de traducción (archivos de módulo) requiere el conocimiento de los "puntos de entrada" del programa para que se pueda ejecutar una optimización de programa completo ( WPO ). En muchos casos, esto se implementa como un paso de optimización del tiempo de enlace ( LTO ), porque todo el programa es visible para el enlazador.

El objetivo de cualquier optimización de la velocidad es que el programa se ejecute lo más rápido posible; el problema es que no es posible que un compilador analice correctamente un programa y determine lo que hará , y mucho menos lo que el programador pretendía que hiciera. Por el contrario, los programadores humanos comienzan en el otro extremo con un propósito e intentan producir un programa que lo logre, preferiblemente sin gastar mucho pensamiento en el proceso.

Por varias razones, incluida la legibilidad, los programas se dividen con frecuencia en una serie de procedimientos, que manejan algunos casos generales. Sin embargo, la generalidad de cada procedimiento puede resultar en un esfuerzo desperdiciado en usos específicos. La optimización interprocedimiento representa un intento de reducir este desperdicio.