miércoles, 25 de marzo de 2020

3.2.1 Costo de Ejecución Optimización

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 del microprocesador son elementos que se deben optimizar para tener un mercado potencial más amplio.
Algunos lenguajes de programación utilizar la pila para almacenar datos que son locales a espacio para los datos locales se asigna a los temas de la pila cuando el procedimiento se introduce, y son borradas cuando el procedimiento termina.
Organización de la memoria en tiempo de ejecución
Las técnicas de gestión de la memoria durante la ejecución del programa difieren de unos lenguajes de programación a otros, e incluso de unos compiladores a otros.


Memoria
Resultado de imagen para espacio de 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.

La memoria es uno de los recursos más importantes de la computadora y, en consecuencia, la parte del sistema operativo responsable de tratar con este recurso, el gestor de memoria, es un componente básico del mismo. El gestor de memoria del sistema operativo debe hacer de puente entre los requisitos de las aplicaciones y los mecanismos que proporciona el hardware de gestión de memoria.

Para que una variable pueda ser almacenada en memoria estática, es necesario conocer su tamaño (número de bytes necesarios para su almacenamiento) en tiempo de compilación. Como consecuencia, aunque una variable (u objeto) sea de ámbito global, no podrán ocupar almacenamiento estático: " Los objetos que correspondan a procedimientos o funciones recursivas, ya que en tiempo de compilación no se conoce el número de variables que serán necesarias. "

Registros
Resultado de imagen para registros
Tipos De Registros

Los registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros son espacios físicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son direccionables por medio de una viñeta, que es una dirección de memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15,14,13…. 3,2,1,0), los registros están divididos en seis grupos los cuales tienen un fin especifico.

Algunos ejemplos de registros son:

•Registros de Segmento
•Registros de Apuntador de Instrucciones
•Registros Apuntadores
•Registros de Propósito General
•Registros Índices
•Registros de Banderas


La pila
Resultado de imagen para almacenar datos en pilas

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). Por ello, resulta obvio que los datos etiquetados como constantes y las variables globales de un programa tengan asignada la memoria necesaria durante toda la ejecución del programa. Sin embargo, no todas las variables pueden almacenarse estéticamente.

La aparición de lenguajes con estructura de bloque trajo consigo la necesidad de técnicas de alojamiento en memoria más flexibles, que pudieran adaptarse a las demandas de memoria durante la ejecución del programa.

En, en general los compiladores, 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.

Jose Armando Perez Cruz

Linares, P., Ramos, A., Sánchez, P., Sarabia, A., & Vitoriano, B. (2001). Modelos matemáticos de optimización. Madrid: Universidad Pontificia de Comillas.
 3.2 Costos Optimización
2 ejemplos increíbles de reducción de costes en las empresas

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. 

Dayanara Lizeth Cruz Mendez

Domínguez, J. D. (2006). Optimización simultánea para la mejora continua y reducción de costos en procesos. Ingeniería y Ciencia, 2(4), 145-162.
3.1.4 De 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. 

Instrucciones de bifurcación 
Interrumpen el flujo normal de un programa, es decir que evitan que se ejecute alguna instrucción del programa y salta a otra parte del programa. 
Por ejemplo: el “break”

         Switch (expresión que estamos evaluando)
         { 
                Case 1: 
                    cout << “Hola” ; 
                Break; 
               Case 2: 
                    cout << “amigos”; 
               Break;
        }


Investigado por Jonathan Arturo Ramos Hernández
Fuente: Brena, R. F. (2003). Autómatas y lenguajes. Tecnológico de Monterrey.
3.1.3 Globales

La optimización global se da con respecto a todo el código.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.

Funcionamiento

Revisa el código generado a varios niveles de abstracción y realiza las optimizaciones aplicables al nivel de abstracción
Representaciones de código para extraer información de grafos.

Condiciones que se deben de cumplir

El código optimizado se ha de comportar igual que el código de partida excepto por ser más rápido o ocupar menos espacio.

Hay que buscar transformaciones que no modifiquen el comportamiento del código según el comportamiento definido para el lenguaje de programación.

EJEMPLO

Si no se ha definido el orden de evaluación de los operandos la siguiente optimización es válida.
B=2*A+(A=c*d);

Pasar a

A=c*d;

B=A*3;



Objetivo


Obtener código que se ejecuta más eficientemente según los criterios
• Tiempo de ejecución (optimización temporal)
• Espacio de memoria utilizado(optimización espacial)

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.


Saúl Santiago Hernandez

Referencia: Aho(2006),et. al. Compiladores:Principios y Técnicas. Segunda Edición.
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.









El problema de la optimización en ciclos y en general radica es que muy difícil saber el uso exacto de algunas instrucciones. Así que no todo código de proceso puede ser optimizado. 



Carlos Daniel Martinez Diaz
Referencia: Compiladores: Principios, técnicas y herramientas. Segunda edición Aho, Lam,Sethi, Ullman , Addison- Wesley, Pearson Eduación, México 2008.

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.
La característica de las optimizaciones locales es que sólo se ven reflejados en dichas secciones.
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.
Como el espacio de soluciones es más pequeño la optimización local es más rápida.

ejemplos: 
Folding
- Propagación de constantes
- Reducción de potencia.
- Reducción de subexpresiones comunes.
Lenguajes y Autómatas ll: Tipos de Optimización


Investigado por Jonathan Arturo Ramos Hernández
Referencia: LOCAL, A. D. O. PROGRAMACIÓN DE OPERACIONES CON TIEMPOS DE PREPARACIÓN MEDIANTE ALGORITMOS DE OPTIMIZACIÓN LOCAL.


Unidad IIOptimización    
La optimización es un proceso que tiene a minimizar o maximizar alguna variable de rendimiento, generalmente tiempo, espacio, procesador, etc.
Desafortunamente no existe un optimizador que haga un programa más rápido y que ocupe menor espacio.La optimización se realiza reestructurando el código de tal forma que el nuevo código generado tenga mayores beneficios.