El generador de código
objeto como lo menciona (Urbina, 2011) transforma el código Intermedio
optimizado en código objeto de bajo nivel. Toma código intermedio y genera
Código objeto para la máquina considerada Es la parte más próxima a la arquitectura
de la Máquina. Habitualmente, se escriben ``a mano´´ desarrollo a medida´ para
cada máquina Específica.
lunes, 21 de octubre de 2019
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.
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 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.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 del microprocesadores son elementos que se deben optimizar para tener
un mercado potencial más amplio. Costos de ejecución
• Las aplicaciones multimedias
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 aplicacione spara dispositivos
móviles. Costos de ejecución
• 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 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.
Costos
Costos
• 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 7.2.1 Costo de
ejecución.
3.1.4 De mirilla.
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
3.1.3 Globales.
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.
Optimización global
• 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 enensamblador.
Suscribirse a:
Entradas (Atom)