TAREA_8_FERNANDEZ
OPTMIZACION
La optimización busca
mejorar la forma en que un programa utiliza los recursos. Las optimizaciones se
realizan en base al alcance ofrecido por el compilador. La optimización va a
depender del lenguaje de programación y es directamente proporcional al tiempo
de compilación; es decir, entre más optimización mayor tiempo de compilación.
Existen diversas
técnicas de optimización se pueden clasificar o dividir de diversas formas:
1)
Dependientes de la maquina: técnicas que
solo se pueden aplicar a una determinada maquina objeto.
2) Independientes
de la maquina: técnicas que son aplicables a cualquier maquina objeto.
3)
Locales: analizaran solo pequeñas
porciones de código y en ellas realizaran mejoras.
4) Globales:
será necesario el análisis de todo el código.
TIPOS DE OPTIMIZACION
Técnicas de optimización
que se aplican al código generado para un programa sencillo (aquel que se
reduce a un solo procedimiento o subrutina).
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 características de
las optimizaciones locales es que solo se ven reflejados en dichas secciones.
La optimización local sirve cuando un bloque de programa o sección es crítico
por ejemplo: la E/S, la concurrencia, la rapidez y confiabilidad de un conjunto
de instrucciones.
EJEMPLOS:
1-
Ejecución
en tiempo de compilación
Precalcular expresiones constantes (con constantes o
variables cuyo valor no cambia).
3 ! i = 5
j = 4
f = j + 2.5
!
j = 4
f = 6.5
2-
Reutilización de expresiones comunes
a = b + c
d = a - d
e = b + c
f = a - d
!
a = b + c
d = a - d
e = a
f = a – d
3-
Propagación de copias
Ante instrucciones f=a, sustituir todos los usos de f por a.
a = 3 + i
f = a
b = f + c
d = a + m
m = f + d
!
a = 3 + i
b = a + c
d = a + m
m = a + d
4-
Eliminación redundancias en acceso matrices
Localizar expresiones comunes en cálculo direcciones de matrices.
5-
Transformaciones algebraicas:
Aplicar propiedades matemáticas para simplificar expresiones
o
Eliminación secuencias nulas
o
Reducción de potencia
o
Reacondicionamiento de operandos
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.
El problema de la
optimización en ciclos y en general radica en que es muy difícil saber el uso
exacto de algunas instrucciones. Así que no todo código de proceso puede ser optimizado.
Otro uso de la optimización puede ser el mejoramiento de consultas en SQL o en
aplicaciones remotas (sockets, E/S, etc.).
3-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.
Ideas básicas:
- Se recorre el código buscando combinaciones de instrucciones que pueden ser reemplazadas por otras equivalentes más eficientes.
- Se utiliza una ventana de n instrucciones y un conjunto de patrones de transformación (patrón, secuencias, remplazan).
- Las nuevas instrucciones son reconsideradas para las futuras optimizaciones.
Ejemplos:
- Eliminación de cargas innecesarias
- Reducción de potencia
- Eliminación de cadenas de saltos
CONCLUSION
El objetivo de las
técnicas de optimización es mejorar el programa objeto para que nos dé un
rendimiento mayor. La mayoría de estas técnicas vienen a compensar ciertas
ineficiencias que son inherentes al concepto de lenguaje de alto nivel, el cual
suprime detalles de la maquina objeto para facilitar la tarea de implementar un
algoritmo.
No hay comentarios:
Publicar un comentario