Este documento describe varias actividades relacionadas con la optimización de código realizadas por un estudiante. Incluye preguntas sobre conceptos clave como la garantía de código efectivo al aplicar optimizaciones, la importancia de la optimización de código, y los tipos de optimización. También resume un proyecto sobre la optimización del rendimiento de códigos científicos para el cálculo de altas prestaciones que describe metodologías para mejorar la eficiencia de los códigos.
1. ESCUELA DE INGENIERÍA
SEMESTRE MAYO – AGOSTO
2020 COMPILADORES
ACTIVIDAD EN CLASES N° 20
Nombre: Josseline Andrade Fecha: 09-07-2020
Realizar las siguientes actividades:
Contestar las siguientes preguntas relacionadas a la optimización de memoria.
✓ ¿Se garantiza un código efectivo al aplicar una optimización de código o puede
afirmar lo contrario, explique con su criterio esta particularidad?
Si se garantiza un código efectivo ya que la optimización de código aumenta la
velocidad del programa y si es posible, el programa debe exigir menos cantidad de recursos.
Por lo tanto, el código sería más eficaz.
✓ ¿Por qué es importante la optimización de código?
Porque trata de mejorar el código por lo que consumen menos recursos (es decir CPU,
memoria) y ofrecer una alta velocidad.
✓ ¿Qué se garantiza cuando se aplica la optimización de alto nivel?
1. El código de salida no debe, de ninguna manera, cambiar el sentido del programa.
2. Optimización debe aumentar la velocidad del programa y si es posible, posible, el
programa debe exigir menos cantidad de recursos.
3. Optimización debe ser rápido y no debe retrasar el proceso de compilación
general.
✓ ¿A nivel de proceso en qué aspectos puede ser utilizado un códigooptimizado?
➢ Al principio, los usuarios pueden cambiar o reorganizar el código o utilizar los
mejores algoritmos para escribir el código.
➢ Después de generar código intermedio, el compilador puede modificar el código
intermedio por dirección los cálculos y mejorar los lazos.
➢ Al tiempo que se produce la máquina de destino código, el compilado compilador
puede hacer uso de jerarquía de memoria y registros de la CPU.
2. ✓ ¿Qué implica la optimización independiente de la máquina?
En esta optimización, el compilador toma en el código intermedio y transforma una parte
del código que no implique un registro de la CPU y/o ubicaciones de memoria absoluta.
✓ ¿Qué implica la optimización dependiente de la máquina?
Se realiza después de que el código de destino se ha generado y cuando el código se
transforma de acuerdo a la arquitectura del equipo de destino. Registros de la CPU se
trata y puede tener referencias de memoria absoluta en lugar de referencias relativas.
Optimizadores dependientes de la máquina que los esfuerzos para aprovechar al
máximo de jerarquía de memoria.
✓ ¿Dentro del análisis de bloques básicos, que aspectos se consideraninternamente?
Se consideran dos bloques básicos que no tienen instrucciones de salto entre ellos, es
decir, cuando la primera se ejecuta la instrucción, todas las instrucciones en el mismo
bloque básico será ejecutado en su secuencia de aparición sin perder el control de flujo
del programa.
✓ ¿A qué se refiere el flujo de control gráfico?
Un flujo de control gráfico se muestra cómo el control del programa se pasa entre los
bloques. Es una herramienta útil que ayuda en la optimización por ayudar a localizar
cualquier bucle no deseado en el programa.
✓ ¿Dentro de la optimización de bucle, qué aspectos son consideradosimportantes,
comente cada uno de ellos?
Código invariante: un fragmento de código que reside en el bucle y calcula el mismo
valor en cada iteración se denomina bucle de código invariante. Este código puede ser
trasladado 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 si su valor es
modificado en el bucle de un bucle de valor invariable.
Fuerza reducción: Hay expresiones que consumen más ciclos de CPU, el tiempo y la
memoria. Estas expresiones deben reemplazarse con las expresiones más baratos sin
comprometer el resultado de expresión. Por ejemplo, la multiplicación (x * 2) es costosa
en términos de ciclos de CPU que (x << 1) y el mismo resultado.
3. ✓ ¿A qué se refiere la denominación de código parcialmente muerto, como lo
interpreta la optimización de código?
Hay algunas instrucciones de código cuyos valores calculados se utilizan sólo en
determinadas circunstancias, es decir, a veces se utilizan los valores y a veces no lo son.
Estos códigos son conocidos como parte de código.
✓ ¿Qué significa una redundancia parcial?
Las expresiones redundantes se calculan más de una vez en ruta paralela, sin ningún
cambio de operandos. mientras que parcial de las expresiones redundantes se calculan
más de una vez en el camino, sin ningún cambio de operandos.
✓ Investigue sobre un proyecto de software que se haya planteado como
optimización de código, detalle sus características, componentes y alcances
(resumen corto)
PROCESO DE OPTIMIZACIÓN DEL RENDIMIENTO DE CÓDIGOS CIENTÍFICOS PARA
CÁLCULO DE ALTAS PRESTACIONES
Desde la aparición de los sistemas métricos en la antigüedad, los pensadores y científicos
han tratado de automatizar los cálculos. En todos estos avances que se han ido
produciendo a lo largo de la historia, el objetivo final era el mismo: tratar de mejorar las
prestaciones de los cálculos que se realizaban sobre ellos, bien mejorando el número de
operaciones que se podían realizar o bien reduciendo el tiempo que se tardaba en
realizar dichos cálculos. Por ello, el empleo de técnicas de optimización de cálculo ha sido
siempre un reto para los científicos. En la actualidad, la computación es uno de los
campos en los cuales se invierte más dinero y recursos dentro del sector de las
tecnologías de la información.
Es por ello que este proyecto fin de carrera tiene como objeto implantar una metodología
que permita a los programadores actuales mejorar la eficiencia y el rendimiento de los
códigos para aumentar la productividad de sus sistemas. Durante la primera parte de
este trabajo fin de carrera se verán las diferentes arquitecturas y lenguajes de
programación que han existido y que existen en la actualidad, puesto que son la base
4. para diseñar metodologías de programación que permitan la mejora del rendimiento de
códigos.
Durante la segunda parte de este trabajo fin de carrera, se diseñará una metodología que
permita al lector mejorar con técnicas sencillas y complejas el rendimiento de sus
códigos. Para ello, se va a mostrar diferentes técnicas de optimización de códigos
recogidas de la experiencia propia trabajando en este campo, así como de diferentes
cursos que he dado sobre esta materia en los últimos diez años en diversas
Universidades y Centros de Investigación [De Bustos, 2000-2006], como otras fuentes:
[Cortesi and Fier, 1998], [Gerber, Bik, Smith and Tian, 2006], [Koren, 2006],
[Snyder,2000], [Trill, 2000], [Vogelsang, 2005] y [Zacharov, 2001].
Este trabajo fin de carrera es de lectura obligada para aquellos científicos, usuarios y
administradores que quieran aprovechar las técnicas descritas en él para mejorar el
rendimiento y la eficiencia en los centros de cálculo y demostrar que implantar un código
eficiente no tiene que ser una tarea compleja y que todas estas técnicas descritas pueden
ser aplicadas en la realidad. (De Bustos, 2009)
5. ✓ Realice un collage con las palabras más importantes sobre el tema optimización
de código. (similar al ejemplo propuesto)
Realizar un comentario personal sobre el funcionamiento que tiene la optimización
de código en el proceso de la de la compilación.
La optimización de código en la compilación es muy importante ya que aumenta la velocidad
del programa y exige menos recursos, y después de generar código intermedio el compilador puede
modificar el código intermedio por dirección los cálculos y mejorar los lazos por lo que ofrece una alta
velocidad. Así podemos decir que nos ofrece código de alta calidad.
6. Referencias
De Bustos, O. (2009). UPM. Obtenido de
http://oa.upm.es/40000/1/TFG_BUSTOS_MARTIN_OSCAR.pdf