SlideShare una empresa de Scribd logo
1 de 4
Optimización Global
•

Grafo del flujo de ejecución
–

Antes de realizar una optimización global es necesario crear el grafo de
flujo de ejecución.

–

El grafo de flujo de ejecución representa todos los caminos posibles de
ejecución del programa.

–

La información contenida en el grafo es útil para
•
•

•

el programador y
el optimizador

La optimización global a partir del análisis del grafo del flujo de ejecución permite
–
–

Eliminación del código no utilizado

–
•

Una propagación de constantes fuera del bloque básico.

Una mejor asignación de los registros.

Problema: la optimización global es muy costosa en tiempo de compilación

Construcción del Grafo del Flujo de Ejecución
•

Tipos de grafo
–
–

•

Orientado a procedimiento/función
Grafo de llamadas

Ejemplo

int fact(int n) {
int r;
r=1;
i=1;
while (i<=n) {
r=r*i;
++i;
}
return r;
}

Construcción del Grafo del Flujo de Ejecución
•

Pasos
–

Dividir el programa en bloques básicos
•

Se representa el programa en un código intermedio donde queden
explícitamente representados los saltos condicionales e
incondicionales.

•

Un bloque básico será cualquier trozo de código que no contenga
saltos ni etiquetas en su interior (es posible tener etiquetas al inicio
del bloque y saltos al final).
–

•

En el grafo, los vértices representan los bloques básicos y las aristas
representan los saltos de un bloque básico a otro.

Detección de código no utilizado

El código no utilizado son los bloques básicos donde no llega ninguna arista
Análisis del Grafo del Flujo de Ejecución
•

Hay que considerar como la información sobre las variables y expresiones se
propaga a través del grafo.

•

Problemas resueltos durante el análisis del grafo
–

–

Alcance de las definiciones

–

variables vivas

–
•

expresiones disponibles (al seguir la ejecución sigue siendo válido el
resultado obtenido)

expresiones muy utilizadas

Para la resolución de los problemas anteriores se utiliza la idea de punto entre
instrucciones o bloques básicos.

r=1
i=1

Puntos
while
(i<=n)
7.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 laarquitectura de la máquina.
•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
instrucciones en ensamblador.
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
Optimización de tipo Mirilla (Peephole optimization) Aplicable en código intermedio o
código objeto.
Constituye una nueva fase aislada. Idea Básica Se recorre el código buscando
combinaciones de instrucciones que puedan ser reemplazadas por otras equivalentes más
eficientes. Se utiliza una ventana de instrucciones y un conjunto de patrones de
transformación (patrón, secuencias reemplaza.) Si las instrucciones de la ventana en cajan
con algún patrón se reemplazan por lo secuencia de reemplazmiento asociada. Las
nuevas instrucciones son reconsideradas para las futuras optimizaciones Ejemplos:
Eliminación de cargas innecesarias MOVRi,X MOVX,Rj →MOVRi,Rj Reducción de potencia
Eliminación de cadenas de saltos ifCgotoL1 L1: gotoL2 → ifCgotoL2 ifCgotoL1 gotoFIN L1:
FIN: ... ... ifnotCgotoFIN → L1: FIN:

Más contenido relacionado

La actualidad más candente

fundamentos teoricos ingenieria de softwaare
fundamentos teoricos ingenieria de softwaarefundamentos teoricos ingenieria de softwaare
fundamentos teoricos ingenieria de softwaareLuz
 
Arquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositórioArquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositóriorehoscript
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedioEmanuel Gs
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwarepaoaboytes
 
Presentaciòn modelos para el desarrollo del software
Presentaciòn modelos para el desarrollo del softwarePresentaciòn modelos para el desarrollo del software
Presentaciòn modelos para el desarrollo del softwarepaoaboytes
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win winkhinkhe
 
Metodología xp
Metodología xpMetodología xp
Metodología xpPiskamen
 
Proceso Unificado De Rational
Proceso Unificado De RationalProceso Unificado De Rational
Proceso Unificado De RationalJulio Delgadillo
 
Ciclo de vida del software
Ciclo de vida del softwareCiclo de vida del software
Ciclo de vida del softwarearealisherrera
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedioGuillermo
 
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARE
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARECUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARE
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWAREFreddy Aguilar
 
Herramientas de Desarrollo de Software
Herramientas de Desarrollo de SoftwareHerramientas de Desarrollo de Software
Herramientas de Desarrollo de SoftwareTe Amo Gabriel
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de softwareGuillermo Lemus
 

La actualidad más candente (20)

Ejemplo rup
Ejemplo rupEjemplo rup
Ejemplo rup
 
fundamentos teoricos ingenieria de softwaare
fundamentos teoricos ingenieria de softwaarefundamentos teoricos ingenieria de softwaare
fundamentos teoricos ingenieria de softwaare
 
Arquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositórioArquitecturas de pizarra o repositório
Arquitecturas de pizarra o repositório
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedio
 
Reingeniería
ReingenieríaReingeniería
Reingeniería
 
Programación Extrema (XP)
Programación Extrema (XP)Programación Extrema (XP)
Programación Extrema (XP)
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de software
 
Tópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUITópicos Avanzados de Programación - Unidad 1 GUI
Tópicos Avanzados de Programación - Unidad 1 GUI
 
2 modelos de la ingenieria de software
2  modelos de la ingenieria de software2  modelos de la ingenieria de software
2 modelos de la ingenieria de software
 
Presentaciòn modelos para el desarrollo del software
Presentaciòn modelos para el desarrollo del softwarePresentaciòn modelos para el desarrollo del software
Presentaciòn modelos para el desarrollo del software
 
Metodología RUP
Metodología RUPMetodología RUP
Metodología RUP
 
Modelo espiral win win
Modelo espiral win winModelo espiral win win
Modelo espiral win win
 
Metodología xp
Metodología xpMetodología xp
Metodología xp
 
Proceso Unificado De Rational
Proceso Unificado De RationalProceso Unificado De Rational
Proceso Unificado De Rational
 
Ciclo de vida del software
Ciclo de vida del softwareCiclo de vida del software
Ciclo de vida del software
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARE
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARECUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARE
CUADRO COMPARATIVO DE LOS MODELOS DE CICLO DE VIDA DE SOFTWARE
 
Herramientas de Desarrollo de Software
Herramientas de Desarrollo de SoftwareHerramientas de Desarrollo de Software
Herramientas de Desarrollo de Software
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 

Similar a Optimización global

Similar a Optimización global (20)

Unidad 3.pptx
Unidad 3.pptxUnidad 3.pptx
Unidad 3.pptx
 
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertidoTaller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
 
Optimizacioncodigo
OptimizacioncodigoOptimizacioncodigo
Optimizacioncodigo
 
OPTIMIZACION DE CODIGO
OPTIMIZACION DE CODIGOOPTIMIZACION DE CODIGO
OPTIMIZACION DE CODIGO
 
Optimizacion de codigo
Optimizacion de codigoOptimizacion de codigo
Optimizacion de codigo
 
Niveles de optimizacion de algoritmos
Niveles de optimizacion de algoritmosNiveles de optimizacion de algoritmos
Niveles de optimizacion de algoritmos
 
Apun9algol
Apun9algolApun9algol
Apun9algol
 
mapa conceptual prototipos.docx
mapa conceptual prototipos.docxmapa conceptual prototipos.docx
mapa conceptual prototipos.docx
 
Presentación1.pptx
Presentación1.pptxPresentación1.pptx
Presentación1.pptx
 
Concepto y representaciones de un Algoritmo
Concepto y representaciones de un AlgoritmoConcepto y representaciones de un Algoritmo
Concepto y representaciones de un Algoritmo
 
p
pp
p
 
Pattern template
Pattern templatePattern template
Pattern template
 
optimizacion de sistemas
optimizacion de sistemasoptimizacion de sistemas
optimizacion de sistemas
 
Modelo de cascada, analisis de sistemas.pptx
Modelo de cascada, analisis de sistemas.pptxModelo de cascada, analisis de sistemas.pptx
Modelo de cascada, analisis de sistemas.pptx
 
Trabajo de romero
Trabajo de romeroTrabajo de romero
Trabajo de romero
 
Presentacion info
Presentacion infoPresentacion info
Presentacion info
 
Optimizacion de software
Optimizacion de softwareOptimizacion de software
Optimizacion de software
 
Fundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: ModularidadFundamentos de Programación - Unidad V: Modularidad
Fundamentos de Programación - Unidad V: Modularidad
 
Software sao
Software saoSoftware sao
Software sao
 
Software
SoftwareSoftware
Software
 

Optimización global

  • 1. Optimización Global • Grafo del flujo de ejecución – Antes de realizar una optimización global es necesario crear el grafo de flujo de ejecución. – El grafo de flujo de ejecución representa todos los caminos posibles de ejecución del programa. – La información contenida en el grafo es útil para • • • el programador y el optimizador La optimización global a partir del análisis del grafo del flujo de ejecución permite – – Eliminación del código no utilizado – • Una propagación de constantes fuera del bloque básico. Una mejor asignación de los registros. Problema: la optimización global es muy costosa en tiempo de compilación Construcción del Grafo del Flujo de Ejecución • Tipos de grafo – – • Orientado a procedimiento/función Grafo de llamadas Ejemplo int fact(int n) { int r; r=1; i=1; while (i<=n) { r=r*i;
  • 2. ++i; } return r; } Construcción del Grafo del Flujo de Ejecución • Pasos – Dividir el programa en bloques básicos • Se representa el programa en un código intermedio donde queden explícitamente representados los saltos condicionales e incondicionales. • Un bloque básico será cualquier trozo de código que no contenga saltos ni etiquetas en su interior (es posible tener etiquetas al inicio del bloque y saltos al final).
  • 3. – • En el grafo, los vértices representan los bloques básicos y las aristas representan los saltos de un bloque básico a otro. Detección de código no utilizado El código no utilizado son los bloques básicos donde no llega ninguna arista Análisis del Grafo del Flujo de Ejecución • Hay que considerar como la información sobre las variables y expresiones se propaga a través del grafo. • Problemas resueltos durante el análisis del grafo – – Alcance de las definiciones – variables vivas – • expresiones disponibles (al seguir la ejecución sigue siendo válido el resultado obtenido) expresiones muy utilizadas Para la resolución de los problemas anteriores se utiliza la idea de punto entre instrucciones o bloques básicos. r=1 i=1 Puntos while (i<=n)
  • 4. 7.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 laarquitectura de la máquina. •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 instrucciones en ensamblador. 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 Optimización de tipo Mirilla (Peephole optimization) Aplicable en código intermedio o código objeto. Constituye una nueva fase aislada. Idea Básica Se recorre el código buscando combinaciones de instrucciones que puedan ser reemplazadas por otras equivalentes más eficientes. Se utiliza una ventana de instrucciones y un conjunto de patrones de transformación (patrón, secuencias reemplaza.) Si las instrucciones de la ventana en cajan con algún patrón se reemplazan por lo secuencia de reemplazmiento asociada. Las nuevas instrucciones son reconsideradas para las futuras optimizaciones Ejemplos: Eliminación de cargas innecesarias MOVRi,X MOVX,Rj →MOVRi,Rj Reducción de potencia Eliminación de cadenas de saltos ifCgotoL1 L1: gotoL2 → ifCgotoL2 ifCgotoL1 gotoFIN L1: FIN: ... ... ifnotCgotoFIN → L1: FIN: