0% encontró este documento útil (0 votos)
69 vistas3 páginas

LAII Optimización

Documento que habla acerca del tema: Optimización de Código, y algunos ejemplos de su implementación
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
69 vistas3 páginas

LAII Optimización

Documento que habla acerca del tema: Optimización de Código, y algunos ejemplos de su implementación
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 3

1

Optimización de Código
Daniel Ernesto León Herrera, 13211493, Lenguajes y Autómatas II, 4:00-5:00 p.m.

algoritmo, ya se puede entonces optimizar el código obtenido a


Resumen— En la actualidad los ordenadores están invadiendo partir de él para mejorar el rendimiento del programa.
todos los campos del conocimiento. Una gran variedad de
programas se desarrollan para diversas aplicaciones de todo tipo. II. DEFINICIÓN
Al usuario final de un programa sólo le interesan dos cosas: que el
programa sea fácil de manejar y que su ejecución sea lo más rápida La optimización de software es el proceso de modificación de
posible. Para mejorar este último aspecto cada dia se tienen mas un software para hacer que algún aspecto del mismo funcione
en cuenta las optimizaciones en el código del programa. En este de manera más eficiente y/o utilizar menos recursos
artículo se describe cuales son y en qué consisten cada una de las (mayor rendimiento). [6]
diversas técnicas de optimización.
III. OBJETIVO
Palabras Clave— Aplicaciones, Optimización, Código, Programa.
Obtener código que se ejecute más eficientemente según los
criterios
• Tiempo de ejecución (optimización temporal)
I. INTRODUCCIÓN
• Espacio de memoria utilizado (optimización espacial)
ENexigíalos utilizar
primeros tiempos de la informática, programar
lenguajes muy próximos a la plataforma de IV. CONDICIONES
ejecución. El código máquina o el lenguaje ensamblador
El código optimizado se ha de comportar igual que el código de
permiten un control muy fino del proceso de ejecución: cómo
partida excepto por ser más rápido o ocupar menos espacio.
se asignan los registros del procesador, cómo se almacenan los
Hay que buscar transformaciones que no modifiquen el
datos y se accede a la memoria, etc. Así es posible exprimir la
comportamiento del código según el comportamiento definido
máxima eficiencia de una plataforma, aunque el precio a pagar
para el lenguaje de programación. [8]
es la falta de portabilidad y el mayor coste de desarrollo y
mantenimiento del código.
Cada optimización está basada en una función de coste y en una
transformación que preserve el significado del programa. Con
Afortunadamente, hoy en día podemos utilizar lenguajes de
la primera se evalúa la mejora obtenida con la optimización,
programación de alto nivel, que abstraen estos detalles de la
considerando como criterios más comunes el ahorro en el
plataforma y nos permiten ser más productivos resolviendo
tamaño del código, la reducción del tiempo de ejecución y la
problemas más complejos en menos tiempo. Sin embargo, con
mejora de las necesidades del espacio para los datos del
esta transición hemos perdido algo de eficiencia, quizás
programa. Mientras que las transformaciones se encargan del
tampoco tanta, porque los compiladores incorporan técnicas
logro de dichas mejoras preservando el comportamiento del
que permiten mejorar el rendimiento del código generado.[1]
programa.[2]
Idealmente, los compiladores deberían producir código objeto
que fuera tan bueno como si estuviera escrito directamente por
V. TIPOS DE OPTIMIZACIÓN
un buen programador. La realidad es que esto es dificil de
conseguir y muy pocas veces se alcanza esa meta. Sin embargo, 1. Local
el código generado por el compilador puede ser mejorado por La optimización local se realiza sobre módulos del programa.
medio de unas transformaciones que se han denominado En la mayoría de las ocasiones a través de funciones, métodos,
tradicionalmente optimizaciones.[3] procedimientos, clases, etc. [7]
La característica de las optimizaciones locales es que sólo se
También es bueno recalcar que por muchas optimizaciones que ven reflejados en dichas secciones.
se puedan realizar para mejorar el rendimiento de un programa, La optimización local sirve cuando un bloque de programa o
siempre se obtendrá un mejor rendimiento si se utiliza un sección es crítico por ejemplo: la E/S, la concurrencia, la
algoritmo mejor. Por todo ello, para obtener un buen programa rapidez y confiabilidad de un conjunto de instrucciones. Las
lo primero es ver qué algoritmo utilizamos y si no es posible optimizaciones locales se realizan sobre el bloque básico. Por
desarrollar otro más eficiente. Una vez implementado el mejor lo general, los códigos fuente tienen una serie de instrucciones
que se ejecutan siempre en orden y están consideradas como los

D. E. León pertenece al Departamento de Sistemas y Computación, Instituto


Tecnológico de Tijuana, Calzada Tecnológico s/n, Fracc. Tomas Aquino C.P.
22414, Tijuana B.C (email: [email protected]).
2

bloques básicos del código. Estos dos bloques básicos no tienen 2. Global
instrucciones de salto entre ellos, es decir, cuando la primera se La optimización global se da con respecto a todo el código,
ejecuta la instrucción, todas las instrucciones en el mismo es más lenta pero mejora el desempeño general de todo
bloque básico será ejecutado en su secuencia de aparición sin programa. [7] Antes de realizar una optimización global es
perder el control de flujo del programa. necesario crear el grafo de flujo de ejecución.
El grafo de flujo de ejecución representa todos los caminos
posibles de ejecución del programa. [8]
A. Ensamblamiento(Folding)
El ensamblamiento es remplazar las expresiones por su La optimización global a partir del análisis del grafo del flujo
resultado cuando se pueden evaluar en tiempo de compilación de ejecución permite:
(resultado constante).
Ejemplo: A=2+3+A+C -> A=5+A+C • Una propagación de constantes fuera del bloque
básico.
B. Propagación de Constantes • Eliminación del código no utilizado.
Desde que se asigna a una variable un valor constante hasta la • Una mejor asignación de los registros.
siguiente asignación, se considera a la variable equivalente a la
constante. A. Eliminación de Código Muerto
Código Muerto es uno o más de un código, que son:
Ejemplo: Propagación Ensamblamiento: PI=3.14 -> PI=3.14 -
• nunca ejecutados o inalcanzable,
> PI=3.14
• si se ejecuta, su producción nunca se utiliza.
G2R=PI/180 -> G2R=3.14/180 -> G2R=0.017
Por lo tanto, código muerto juega papel alguno en cualquier
PI y G2R se consideran constantes hasta la próxima asignación.
operación del programa y que, por lo tanto, puede eliminarse
Estas optimizaciones permiten que el programador utilice
simplemente.[10]
variables como constantes sin introducir ineficiencias.

C. Reducción de Potencia VI. CASOS DE OPTIMIZACIÓN DE CÓDIGO


Se busca sustituir operaciones costosas por otras más simples. 1. Evaluaciones Innecesarias
Ejemplo:
Sustituir productos por sumas. a=2*a // El siguiente código:
a=a+a
for (int i=0; i<size(); i++)
a = (b + c) / i ;
D. Optimizaciones dentro de bucles
La mayoría de los programas se ejecutan como un bucle en el // Puede ser optimizado de la siguiente
sistema. Se hace necesario optimizar los lazos con el fin de forma:
ahorrar ciclos de CPU y memoria. Los loops pueden ser
optimizados por las siguientes técnicas:[4] int tmp = b + c;
Código invariante: un fragmento de código que reside en el int s = size();
bucle y calcula el mismo valor en cada iteración se denomina for (int i=0; i<s; i++)
bucle de código invariante. Este código puede ser trasladado a = tmp / i;
fuera del circuito de ahorro que se calculan sólo una vez, en
lugar de en cada iteración.
Inducción análisis: una variable se denomina inducción variable 2. Subexpresiones comunes
si su valor es modificado en el bucle de un bucle de valor // El siguiente código:
invariable.
Fuerza reducción: Hay expresiones que consumen más ciclos b = Math.abs(a) * c;
de CPU, el tiempo y la memoria. Estas expresiones deben d = e / (Math.abs(a) + b);
reemplazarse con las expresiones más baratos sin comprometer
el resultado de expresión. Por ejemplo, la multiplicación (x * 2) // Puede ser optimizado de la siguiente
es costosa en términos de ciclos de CPU que (x << 1) y el mismo forma:
resultado.
int tmp = Math.abs(a);
b = tmp * c;
d = e / (tmp + b);
3

3. Variables locales REFERENCIAS


// El siguiente código:
[1] Robert (2016). “Optimización de código:un código más
for (int i=0; i<1000; i++) eficiente”. Disponible en:
a = obj.b * i; http://informatica.blogs.uoc.edu/2016/05/02/optimizacion
-de-codigo-un-codigo-mas-eficiente/
// Puede ser optimizado de la siguiente [2] A. Rendon (2015). Optimización de Código, Disponible
forma: en: https://www.ecured.cu/Optimización_de_Código
[3] M. Garcia. LA OPTIMIZACION: UNA MEJORA EN
LA EJECUCION DE PROGRAMAS. Dispoible en:
int localb = obj.b;
http://ditec.um.es/~jmgarcia/papers/ensayos.pdf
for (int i=0; i<1000; i++)
[4] Tutorials(2016). Compilador Diseño- Optimización de
a = localb * i;
código, Disponible en:
4. Expansión de los bucles https://www.tutorialspoint.com/es/compiler_design/compi
ler_design_code_optimization.htm
// El siguiente código: [5] Junta de Andalucia.Optimización de código, Disponible
en:
for (int i=0; i<1000; i++) http://www.juntadeandalucia.es/servicios/madeja/contenid
a[i] = 25; o/recurso/726
[6] Wikipedia, Optimización de Software, disponible en:
// Puede ser optimizado de la siguiente https://es.wikipedia.org/wiki/Optimización_de_software
forma: [7] J.C. Rojas. Optimización. Disponible en:
http://dsc.itmorelia.edu.mx/~jcolivares/courses/ps207a/ps
for (int i=0; i<100; i++){ 2_u7.pdf
a[i++] = 25; [8] M.Ronceros. Optimización de Código, Universidad
a[i++] = 25; Nacional del Santa, Disponible en:
a[i++] = 25; http://biblioteca.uns.edu.pe/saladocentes/archivoz/publica
a[i++] = 25; cionez/sesion_vii_3u___optimizacion_de_codigo.pdf
a[i++] = 25; [9] M.Constanza. Compiladores: Generación de Código,
a[i++] = 25; Universidad Javeriana Cali. Disponible en:
a[i++] = 25; http://cic.puj.edu.co/wiki/lib/exe/fetch.php?media=materi
a[i++] = 25; as:compi:comp_sesion26.pdf
a[i++] = 25; [10] Informatica.uv.Docencia.Generación de Código
a[i++] = 25; Intermedio. Optimización. Disponible en:
http://informatica.uv.es/docencia/iiguia/asignatu/2000/PL/
2008/tema7.pdf

También podría gustarte