Unidad 3

3.1 Tipos de optimización

3.1.1 Locales

La optimización local se realiza sobre módulos del programa. En la mayoría de las ocasiones a través de funciones, métodos, procedimientos, clases, etc. Las optimizaciones locales se realizan sobre el bloque básico

3.1.2 Ciclos


Los ciclos son una de las partes más esenciales en el rendimiento de un programa dado que realizan acciones repetitivas, y si dichas acciones están mal realizadas, el problema se hace N veces más grandes.

La mayoría de las optimizaciones sobre ciclos tratan de encontrar elementos que no deben repetirse en un ciclo. Sea el ejemplo: while(a == b) { int c = a; c = 5; …; }


3.1.3 Globales

La optimización global consiste en encontrar los mejores conjuntos de parámetros que optimizan una función objetivo dada. sólo se pueden dar condiciones de optimalidad global bajo ciertas restricciones (función objetivo convexa y región factible también convexa). Esto hace muy difícil resolver exactamente los problemas de optimización global.

  • Este tipo de optimización es más lenta, pero mejora el desempeño general de todo programa.
  • Las optimizaciones globales pueden depender de la arquitectura de la máquina.
  • En algunos casos es mejor mantener variables globales para agilizar los procesos (el proceso de declarar variables y eliminarlas toma su tiempo) pero consume más memoria.
  • Algunas optimizaciones incluyen utilizar como variables registros del CPU, utilizar instrucción es en ensamblador.

  • Obtener código que se ejecuta más eficientemente según los criterios
  • En algunos casos es mejor mantener variables globales para agilizar los procesos (el proceso de declarar variables y eliminarlas toma su tiempo) pero consume más memoria.


3.1.4 Mirilla

La optimización de mirilla trata de estructurar de manera eficiente el flujo del programa, sobre todo en instrucciones de bifurcación como son las decisiones, ciclos y saltos de rutinas.

La idea es tener los saltos lo más cerca de las llamadas, siendo el salto lo más pequeño posible

3.2 Costos (Memoria, registros, pilas)

3.2.1 Costos de ejecución


Los registros del procesador se emplean para controlar instrucciones en ejecucion, manejar direccionamiento de memoria y proporcionar capacidad aitmetica. Los registros son espacios fisicos dentro del micropocesador con capacida de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee.

La asignación de memoria de variables locales se hace de una forma flexible, atendiendo al hecho de que solamente necesitan memoria asignada desde el momento que comienza la ejecución de la función hasta el momento en que ésta finaliza.

La forma más sencilla de almacenar el contenido de una variable en memoria, en tiempo de ejecución, es hacerlo en la memoria estática. Así, el almacenamiento de dichas variables será permanente (durante la ejecución del programa).

3.2.2 Criterios para mejorar el codigo

3.2.3 Herramientas para el analisis del flujo de datos