Ingeniería en Sistemas Computacionales
Materia: Lenguaje y Autómatas 2
Profesor: Jiménez Vázquez Mario
Alumno: Noveron Hernández Gabriel
No. De Control: 16320909
Trabajo: Ensayo: 3.2.- Costos
Aula: 7SA Horario: 09:00 - 10:00
01/06/2020
Contenido
3.2 Costos.......................................................................................................................................3
3.2.1 Costo de ejecución (Memoria, registros, pilas).....................................................................4
3.2.2 Criterios para mejorar el código............................................................................................5
3.2.3 Herramientas para el análisis del flujo de datos....................................................................6
Bibliografía.....................................................................................................................................8
3.2 Costos
Los costos son el factor más importante a tomar en cuenta a la hora de optimizar
ya que en ocasiones la mejora obtenida puede verse no reflejada en el programa
final pero si ser perjudicial para el equipo de desarrollo. La optimización de una
pequeña mejora tal vez tenga una pequeña ganancia en tiempo o en espacio pero
sale muy costosa en tiempo en generarla.
Pero en cambio si esa optimización se hace por ejemplo en un ciclo, la mejora
obtenida puede ser N veces mayor por lo cual el costo se minimiza y es benéfico
la mejora.
Por ejemplo:
for(int i=0; i < 10000; i++); si la ganancia es de 30 ms 300s
Factorización de expresiones invariantes
Expresiones invariantes de bucle: expresiones cuyo valor es constante durante
toda la ejecución del bucle
>
Incluyen constantes y/o variables no modificadas en el cuerpo del bucle
Principio: Mover expresiones invariantes desde el cuerpo hasta la cabeza del
bucle
-> al sacarlas del bucle, pueden quedar dentro de otro bucle externo)
-> repetir proceso.
Ejemplos:
while(i
>
Algunas optimizaciones son difíciles de implementar
Algunas optimizaciones son costosas en términos de tiempo de compilación
La optimización más elaborada es difícil y costosa
Meta: Mejora Máxima con costo mínimo
Los costos son el factor más importante a tomar en cuenta a la hora de optimizar
ya que en ocasiones la mejora obtenida puede verse no reflejada en el programa
final pero si ser perjudicial para el equipo de desarrollo.
La optimización de una pequeña mejora tal vez tenga una pequeña ganancia en
tiempo o en espacio pero sale muy costosa en tiempo en generarla.
Pero en cambio si esa optimización se hace por ejemplo en un ciclo, la mejora
obtenida puede ser N veces mayor por lo cual el costo se minimiza y es benéfico
la mejora.
Por ejemplo: for (int i=0; i < 10000; i++);
si la ganancia es de 30 ms 300s.
3.2.1 Costo de ejecución (Memoria, registros, pilas)
Los costos de ejecución son aquellos que vienen implícitos al ejecutar el
programa.
En algunos programas se tiene un mínimo para ejecutar el programa, por lo que el
espacio y la velocidad de los microprocesadores son elementos que se deben
optimizar para tener un mercado potencial más amplio.
Las aplicaciones multimedia como los videojuegos tienen un costo de ejecución
alto por lo cual la optimización de su desempeño es crítico, la gran mayoría de las
veces requieren de procesadores rápidos (e.g. tarjetas de video) o de mucha
memoria. Otro tipo de aplicaciones que deben optimizarse son las aplicaciones
para dispositivos móviles.
Los dispositivos móviles tienen recursos más limitados que un dispositivo de
cómputo convencional razón por la cual, el mejor uso de memoria y otros recursos
de hardware tiene mayor rendimiento. En algunos casos es preferible tener la
lógica del negocio más fuerte en otros dispositivos y hacer uso de arquitecturas
descentralizadas como cliente/servidor o P2P.
Los costos de ejecución son aquellos que vienen implícitos al ejecutar el
programa.
En algunos programas se tiene un mínimo para ejecutar el programa, por lo que el
espacio y la velocidad de microprocesadores son elementos que se deben
optimizar para tener un mercado potencial más amplio.
Las aplicaciones multimedia como los videojuegos tienen un costo de ejecución
alto por lo cual la optimización de su desempeño es crítico, la gran mayoría de las
veces requieren de procesador es rápidos (e.g. tarjetas de video) o de mucha
memoria.
Otro tipo de aplicaciones que deben optimizarse son las aplicación es para
dispositivos móviles.
Los dispositivos móviles tiene recursos más limitados que un dispositivo de
cómputo convencional razón por la cual, el mejor uso de memoria y otros recursos
de hardware tiene mayor rendimiento.
En algunos casos es preferible tener la lógica del negocio más fuerte en otros
dispositivos y hacer uso de arquitecturas descentralizadas como cliente/servidor o
P2P
3.2.2 Criterios para mejorar el código
La mejor manera de optimizar el código es hacer ver a los programadores que
optimicen su código desde el inicio, el problema radica en que el costo podría ser
muy grande ya que tendría que codificar más y/o hacer su código más legible. Los
criterios de optimización siempre están definidos por el compilador.
Muchos de estos criterios pueden modificarse con directivas del compilador desde
el código o de manera externa. Este proceso lo realizan algunas herramientas del
sistema como los ofuscadores para código móvil y código para dispositivos
móviles.
La mejor manera de optimizar el código es hacer vera los programadores que
optimicen su código desde el inicio, el problema radica en que el costo podría ser
muy grande ya que tendría que codificar más y/o hacer su código mas legible.
Los criterios de optimización siempre están definidos por el compilador
Criterios de optimización
Muchos de estos criterios pueden modificarse con directivas del compilador desde
el código o de manera externa.
Este proceso lo realizan algunas herramientas del sistema como los ofuscadores
para código móvil y código para dispositivos móviles.
3.2.3 Herramientas para el análisis del flujo de datos
Existen algunas herramientas que permiten el análisis de los flujos de datos, entre
ellas tenemos los depuradores y desambladores. La optimización al igual que la
programación es un arte y no se ha podido sistematizar del todo.
La optimización al igual que la programación es un arte y no se ha podido
sistematizar del todo.
Existen algunas herramientas que permiten el análisis de los flujos de datos, entre
ellas tenemos:
Depurador
Es una aplicación que permite correr otros programas, permitiendo al usuario
ejercer cierto control sobre los mismos a medida que los estos se ejecutan, y
examinar el estado del sistema (variables, registros, banderas, etc.) en el
momento en que se presente algún problema. El propósito final de un depurador
consiste en permitir al usuario observar y comprender lo que ocurre "dentro" de un
programa mientras el mismo es ejecutado.
En los sistemas operativos UNIX/LINUX, el depurador más comúnmente utilizado
es gdb, es decir el depurador de GNU. Éste ofrece una cantidad muy extensa y
especializada de opciones. Es muy importante entender el hecho de que un
depurador trabaja sobre archivos ejecutables. Esto quiere decir que el mismo
funciona de forma independiente al lenguaje en que se escribió el programa
original, sea éste lenguaje ensamblador o un lenguaje de medio o alto nivel como
C.
Desamblador
Es un programa de computadora que traduce el lenguaje de máquina a lenguaje
ensamblador, la operación inversa de la que hace el ensamblador. Un
desensamblador difiere de un compilador, en que éste apunta a un lenguaje de
alto nivel en vez de al lenguaje ensamblador.
Diagrama de flujo de datos
Es una herramienta de modelización que permite describir, de un sistema, la
transformación de entradas en salidas; el DFD también es conocido con el nombre
de Modelo de Procesos de Negocios (BPM, Business Process Model).
Diccionario de datos
El Diccionario de Datos es un listado organizado de todos los elementos de datos
que son pertinentes para el sistema, con definiciones precisas y rigurosas que le
permite al usuario y al proyectista del sistema tener una misma comprensión de
las entradas, de las salidas, de los componentes de los repositorios, y también de
cálculos intermedios.
Bibliografía
Aho (2006), et. al. Compiladores: Principios y Técnicas. Segunda Edición.
Compiladores: Principios, técnicas y herramientas. Segunda Edición Aho, Lam,
Sethi, Ullman Addison – Wesley, Pearson Educación, México 2008
Diseño de compiladores. A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Edita
Universidad de Alicante