U3 Exposiciones

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 62

3.1.

1 Optimizacion Local

Equipo A

Instituto Tecnologico Superior de Tantoyuca

29 de noviembre de 2018

Integrantes:
Cortés Flores Norma Geovanna
Azuara Del Ángel Eucario
Optimización

La Optimización consiste en mejorar el código intermedio de


modo que quede un código máquina más rápido de ejecutar.
Depende del lenguaje de programación y es directamente pro-
porcional al tiempo de compilación.
Es un proceso que tiene a minimizar o máximizar alguna variable
de rendimiento, generalmente tiempo, espacio, procesador, etc.
Va a depender del lenguaje de programación y es directamen-
te proporcional al tiempo de compilación; es decir, entre más
optimización mayor tiempo de compilación.

Equipo A 3.1.1 Optimizacion Local


3.1.1 Optimizacion Local

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, a ejecutar.
Reemplazan operaciones costosas de la maquina por otras me-
nos costosas.
La Optimización Local sirve cuando un bloque de programa o
sección es crı́tico por ejemplo: E/S, la concurrencia, la rapidez
y confiabilidad de un conjunto de instrucciones.

Equipo A 3.1.1 Optimizacion Local


Optimizacion local en tiempo de compilacion

Equipo A 3.1.1 Optimizacion Local


Reutilización de expresiones comunes

Equipo A 3.1.1 Optimizacion Local


Propagación de copias

Equipo A 3.1.1 Optimizacion Local


3.1.1 Optimizacion Local

Bibliogafia:
http://ditec.um.es/ jmgarcia/papers/ensayos.pdf
http://noeliy22.blogspot.com/2013/11/tipos-de-optimizacion.html

Equipo A 3.1.1 Optimizacion Local


INSTITUTO TECNOLÓGICO SUPERIOR DE TANTOYUCA
ING. EN SISTEMAS COMPUTACIONALES.

MATERIA:
LENGUAJES Y AUTÓMATAS II
DOCENTE:
ING. MANUEL HERNÁNDEZ HERNÁNDEZ
INTEGRANTES:
DEL ANGEL DEL ANGEL OSWALDO URIEL
No.C: 143S0086
DIAZ ANTONIO CLARA CONCEPCIÓN
No. C: 143S0349
EXPOSICIÓN:
TIPOS DE OPTIMIZACIÓN: CICLOS
GRADO Y GRUPO:
7° B
FECHA:
29 DE NOVIEMBRE DE 2018
3.2 Tipos de Optimización
3.2.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.
Reducción de frecuencia de ejecución
(invarianza)

Esta optimización trata de sacar de los ciclos aquellas

expresiones que sean invariantes:

REPEAT
B := 1
A := A – B
UNTIL A = 0

En el ejemplo anterior, la asignación B := 1 se puede

sacar del bucle.


Ejemplo

● Ejemplo de una optimización de bucles: la variable i sólo se utiliza


para calcular la variable t. Modificando el código podemos actualizar
el valor de t en cada iteración, ahorrándonos una multiplicación.
Reducción de fuerza

La reducción de la fuerza de una operación consiste en

sustituir una operación fuerte por otra más débil, como la

multiplicación por la suma o la diferencia por el cambio de

signo.
LOOP (i := a; i<c; i+=b)
. . .
d=i*k;
. . .

ENDLOOP
Reducción de fuerza

Donde b y k son invariantes respecto al ciclo. Además, i

no se modifica dentro del bucle, excepto en la instrucción

de cierre, i+=b, y d no se usa ni modifica antes de la

instrucción indicada y no se modifica después. Así, su

equivalente reduciendo fuerzas es:


d=a*k;
t1=b*k;
LOOP (i=a; i<c; i+=b, d+=t1)
. . .
ENDLOOP
Limitantes

1. Si hay alguna llamada de subrutina dentro del


bucle, es difícil saber si se cambia alguna de las
variables.

2. Sólo pueden aplicarse las optimizaciones si el


compilador sabe qué variables se cambian
Conclusiones

Se debe de tener cuidado al momento de hacer los

procedimientos ya mencionados, una mala

implementación puede conllevar a que la optimización

sea ineficiente.
Bibliografías

● Compiladores principios, técnicas y herramientas, 2da


Edición - Alfred V. Aho-FREELIBROS.ORG
● https://archive.cnx.org/contents/373e59e9-389a-4675-a1b4-
800b7ca59a36@2/optimizaci-n-de-ciclos-desenrollado-b-sico
-de-ciclos
● https://prezi.com/9merq1qkxr8_/optimizacion-de-ciclos
Instituto Tecnológico Superior de
Tantoyuca
DOCENTE:
M.C.C Manuel Hernández Hernández

INTEGRANTES:
Ismael Herbert Hernández
Ricardo Gonzales López

EXPOSICIÓN:
Optimización Global

GRADO Y GRUPO:
7° “B”
Contenido.


1. Tipos de optimización.

2. ¿Qué es la optimización?

3. Optimización Global

4. Ejemplo de la Optimización Global.

Referencias.

18.12.18 Lenguajes y Autómatas II 2


3.1 Tipos de optimización.


Locales

Ciclos

Globales

De mirilla

18.12.18 Lenguajes y Autómatas II 3


¿Qué es la optimización?


El objetivo de la optimización es mejorar código final,
preservando significado del programa.


Aquí aplica que entre menos código necesario se tenga mas
rápido funciona nuestro programa.

18.12.18 Lenguajes y Autómatas II 4


Optimización Global.


Corresponde a todo el grafo de flujo de ejecución, con respecto
a todo el código. Esta optimización es muy lenta pero mejora el
desempeño general de todo el programa.


Es necesario crear el grafo de flujo de ejecución de todo el
código, este representa todos los caminos posibles de
ejecución del programa.

18.12.18 Lenguajes y Autómatas II 5


Ejemplo de la Optimización Global.

a1 = 5 a1 = 5

a2 = 3 a2 = 3 b=c*d

b=c*d b=c*d x = 15 + b

x = (a1 * a2) + b X = (5 * 3) + b

Ya que a1 = 5 y a2 = 3 corresponde a fuera del bloque básico o


nodo del grafo simplemente aplicando teoría de las optimizaciones
locales para esta que es global.

18.12.18 Lenguajes y Autómatas II 6


Ejemplo.

18.12.18 Lenguajes y Autómatas II 7


Referencias.


https://es.scribd.com/document/248014105/Lenguajes-y-Autom
atas-2-Optimizacion


http://www.academia.edu/29416690/lenguajes_y_automatas_ii_
optimizacion


https://www.google.com.mx/search?q=optimizacion+de+codigo
&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiI5an7wfjeAhUJ
Sq0KHZhED1AQ_AUIDigB&biw=657&bih=547#imgrc=1lkDCO
VIvr6PpM

18.12.18 Lenguajes y Autómatas II 8


OPTIMIZACIÓN DE
CODIGO

FERNANDO JIMENEZ MARTINEZ


OPTIMIZACIÓN DE MIRILLA

La optimización de mirilla (peephole), se lleva a cabo mediante
el análisis de una ventana deslizable de instrucciones de destino
(conocida como la mirilla), y sustituyendo las secuencias de
instrucciones dentro de la mirilla por una secuencia más corta o
rápida, cada vez que sea posible.
La mirilla es una pequeña ventana deslizable en un
programa. Una característica de la optimización de
mirilla es que cada mejora puede generar
oportunidades para mejoras adicionales.
Eliminación de instrucciones redundantes

MOV Ri, x MOV x, Rj = MOV Ri , Rj

en un programa destino, podemos eliminar la


instrucción de almacenamiento, ya que cada vez
que se ejecute, la primera instrucción se asegurará
de que el valor de a se haya cargado en el registro
R0.
Simplificación algebraica y reducción por fuerza
x=x+0
o
x=x*1

podemos aplicar identidades aritméticas, como:

x+0=0+x=x
x×1=1×x=x
x−0=x
x/1 = x
Uso de características específicas de máquina

La máquina destino puede tener instrucciones de


hardware para implementar ciertas operaciones
específicas con eficiencia.
Estos modos pueden usarse también en el código
para instrucciones de incremento o decremento
como x = x + 1
x++;
Eliminación de código inalcanzable

Otra oportunidad para la optimización de mirilla es la


eliminación de instrucciones inalcanzables.

int foo( int X, int Y )


{return X+Y;
int Z=X*Y;
}
3.2.1 Costo de ejecución (Memoria, Registros,
Pilas)

Instituto Tecnologico Superior de Tantoyuca

M.C.C Manuel Hernández Hernández

28 de Noviembre de 2018

Integrantes EQ-E
1 Pérez Celestino Alfonso
2 Pérez González Santos
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 pro-
grama, por lo que el espacio y la velocidad del microprocesador
son elementos que se deben optimizar para tener un mercado
potencial más amplio.
Otro tipo de aplicaciones que deben optimizarse son las aplica-
ciones para dispositivos móviles.
Memoria

La memoria es uno de los recursos más importantes de la compu-


tadora y, en consecuencia, la parte del sistema operativo responsable
de tratar con el recurso, gestor de memoria es un componente básico
del mismo.
Para datos, básicamente la memoria se divide en:
Memoria Estática
La Pila
(Heap El Montón)
Registros

Son espacios físicos dentro del microprocesador con capacidad de 4


bits hasta 64 bits dependiendo de microprocesador que se emplee.
Registros
Los registros del procesador se emplean para controlar instrucciones
en ejecución, manejar direccionamiento de memoria y proporcionar
capacidad aritmética.
Memoria estática

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)
La Pila

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

Así, cada vez que comienza la ejecución de un procedimiento (o


función) se crea un registro de activación para contener los objetos
necesarios para su ejecución, eliminándola una vez terminando esta.
Servicios genéricos de memoria

Servicios genéricos de memoria


Las labores que lleva a cabo el sistema de gestión de memoria son
más bien de carácter interno. Debido a ello, este módulo apenas
ofrece directamente servicios a las aplicaciones

Los principales servicios están relacionados con la proyección de ar-


chivos. Típicamente existirán 2 servicios.
Proyectar un archivo: Permite incluir en el mapa de memoria
un proceso, un archivo o parte del mismo
Desproyectar un archivo: Eliminar una proyección previa o
parte de la misma
Bibliografías

http://alfredosilverio.blogspot.com/2016/11/costos.html
https://padlet.com/carlos_sotero/pt6wkuc52rgc
INSTITUTO TECNOLÓGICO SUPERIOR DE TANTOYUCA.
Ingeniería En Sistemas Computacionales.
Tema: Criterios para mejorar el código.
Materia: Lenguajes y Autómatas II.
Docente: M.C.C. Manuel Hernández Hernández.
Semestre: 7mo.
Grupo: “B”.
Equipo: “F”.
Integrantes: Rivera López Ángel Alberto
Santiago Antonio Jesús
Fecha de presentación: 30 de Noviembre de 2018g
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.
OPTIMIZACIÓN DE CICLOS

Es muy importante en ciclos ya que se realizan acciones


repetitivas y si están mal realizadas, el problema se hacen N
veces mas grande.

Ejemplo:
OPTIMIZACIONES GLOBALES

Este tipo de optimización es mas lenta para mejorar el desempeño


general de todo programa.
En algunos casos es mejor mantener variable globales para
agilizar los procesos (declarar y eliminar variables).

Objetivo: Obtener el código que se ejecuta más eficiente con


relación a tiempo de ejecución y espacio de memoria.
OPTIMIZACIONES GLOBALES
OPTIMIZACIÓN DE MIRILLA
La optimización de mirilla trata de estructurar de manera eficiente el flujo
del programa sobre todo las decisiones, ciclos y saltos de rutina.
Transformaciones usuales mediante la optimización de mirilla:

Eliminación de instrucciones redundantes.

Optimización del flujo de control.

Simplificaciones algebraicas.

Uso de instrucciones especiales de la maquina.
OPTIMIZACIÓN DE MIRILLA

Ejemplo: switch(opcion){
Case 1: count << “Hola”;
Break;
Case 2: count << “Amigos”;
Break;
}
REFERENCIAS
https://ingarely.files.wordpress.com/2012/11/unidad-vii.pdf
https://prezi.com/ro4f1jr6ah7m/lenguajes-y-automatas-3/
http://carlossotero.blogspot.com/2016/11/optimizacion-global.html
http://carlossotero.blogspot.com/2016/11/optimizacion-de-mirilla.ht
ml
https://prezi.com/iu8b3klzevha/tipos-de-optimizacion-global/
Instituto Tecnológico Superior de Tantoyuca
INGENIERÍA EN SISTEMAS COMPUTACIONALES

Docente:
Ing. Manuel Hernández Hernández

Integrantes:

Trinidad Baltazar Luis Gerardo


Santiago del Ángel Adriana
Villanueva Santiago Ángel Alberto

Grado y Grupo: 7º semestre ”B”

30/11/2018
Herramientas para el Análisis del Flujo
de Datos

Lenguajes y Automatas II
HERRAMIENTAS QUE PERMITEN EL ANÁLISIS Y LA CORRECTA
OPTIMIZACIÓN DEL FLUJO DE DATOS:

 DEPURADOR
 DESAMBLADOR
 DIAGRAMA DE FLUJO
 DICCIONARIO DE DATOS
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 depurador permite detener el programa en: Durante esa interrupción, el usuario puede:

 Un punto determinado mediante un punto de ruptura. • Examinar y modificar la memoria y las variables
del programa.
 Un punto determinado bajo ciertas condiciones
• Examinar el contenido de los registros del
mediante un punto de ruptura condicional.
procesador.
 Un momento determinado cuando se cumplan ciertas • Cambiar el punto de ejecución, de manera que el
condiciones. programa continúe su ejecución en un punto
diferente al punto en el que fue detenido.
 Un momento determinado a petición del usuario.
• Ejecutar instrucción a instrucción.
• Ejecutar partes determinadas del código, como el
interior de una función, o el resto de código antes
de salir de una función.
DESAMBLADOR O DESENSAMBLADOR

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 se diferencia de un
decompilador, en que está dirigido a un lenguaje
de alto nivel en vez de al lenguaje ensamblador.
¿QUÉ HACE UN DESENSAMBLADOR?

Transforma el código binario en instrucciones básicas del


PC en la que se ejecuta,
el programa no es capaz de distinguir si dichas
instrucciones provienen de un "if", de un "for" o de un
"while".

Tampoco conoce los nombres de las variables, así que


suele inventar nombres como VAR_0001,VAR_0002, etc.
USOS DEL DESENSAMBLADOR

• Interactive Disassembler es el más comúnmente


Son ampliamente utilizados para crackear
programas y para realizar ingeniería utilizado.
inversa. También son utilizados por • ILDASM es una herramienta contenida en el SDK del
desarrolladores de software,
investigadores o estudiantes. .NET Framework.
• OllyDbg es un desensamblador integrado para Lenguaje
Ensamblador y COBOL.
• Texe es un desensamblador que corre a 32 bits y además
un analizador de archivos PE (Portable Executable )de
Windows libre.
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  Lucidchart
nombre de Modelo de Procesos de Negocios.
 Creately

 Draw.io
DICCIONARIO DE DATOS

Un diccionario de datos, o repositorio de, metadatos, un repositorio


centralizado de información sobre datos tales como significado, relación con
otros datos, origen, uso y formato.
 Se encuentra la lista de todos los elementos que forman parte del flujo de
datos en todo el sistema. Los elementos más importantes son flujos de datos,
almacenes de datos y procesos. El diccionario guarda los detalles y
descripciones de todos estos elementos.
 Si los analistas desean conocer cuántos caracteres abarca un determinado
dato o qué otros nombres recibe en distintas partes del sistema, o dónde se
utiliza, encontrarán las respuestas en un diccionario de datos desarrollado en
forma apropiada.
 El diccionario se desarrolla durante el análisis de flujo de datos y auxilia a los
analistas que participan en la determinación de los requerimientos de
sistemas.
.
CONTENIDO DE UN DICCIONARIO DE DATOS

El diccionario tiene dos tipos de descripciones para el flujo de datos del sistema, son los elementos datos y
estructura de datos.

Elemento dato:
son los bloques básicos para todos los demás datos del sistema, por si mismos no le dan un significado suficiente al
usuario. Se agrupan para formar una estructura de datos.
Estructura de datos:
es un grupo de datos que están relacionados con otros y que en conjunto describen un componente del sistema.
Un nombre:
para distinguir un dato de otro.
Descripción:
indica lo que representa en el sistema.
Alias:
porque un dato puede recibir varios nombres, dependiendo de quien uso este dato.
Longitud:
porque es de importancia de saber la cantidad de espacio necesario para cada dato.
Valores de los datos:
porque en algunos procesos solo son permitidos valores muy específicos para los datos. Si los valores de los datos
están restringidos a un intervalo especifico, esto debe estar en la entrada del diccionario.
EJEMPLO
REFERENCIAS

http://nochesdecode.com.ar/2012/01/desensambladores-para-ingenieria-inversa/
http://katyygaby.blogspot.com/p/diccionario-de-datos.html
https://prezi.com/4dtcp9qnkjbk/323-herramientas-para-el-analisis-del-flujo-de-datos/

También podría gustarte