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

La actualidad más candente (20)

Traductor y su estructura
Traductor y su estructuraTraductor y su estructura
Traductor y su estructura
 
TABLA DE SÍMBOLOS
TABLA DE SÍMBOLOSTABLA DE SÍMBOLOS
TABLA DE SÍMBOLOS
 
Estructura de Datos: Recursividad
Estructura de Datos: RecursividadEstructura de Datos: Recursividad
Estructura de Datos: Recursividad
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensamblador
 
Frame Relay & X25
Frame Relay & X25Frame Relay & X25
Frame Relay & X25
 
Programación lógica y funcional
Programación lógica y funcionalProgramación lógica y funcional
Programación lógica y funcional
 
Ensambladores
EnsambladoresEnsambladores
Ensambladores
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Analisis Semantico
Analisis Semantico Analisis Semantico
Analisis Semantico
 
1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 
Procesamiento segmentado
Procesamiento segmentado   Procesamiento segmentado
Procesamiento segmentado
 
Modelo TSP
Modelo TSPModelo TSP
Modelo TSP
 
Unidad 3 administracion de la memoria
Unidad 3 administracion de la memoriaUnidad 3 administracion de la memoria
Unidad 3 administracion de la memoria
 
Control de flujo en Telecomunicaciones
Control de flujo en TelecomunicacionesControl de flujo en Telecomunicaciones
Control de flujo en Telecomunicaciones
 
Ventajas y desventajas de moprosoft
Ventajas y desventajas de moprosoftVentajas y desventajas de moprosoft
Ventajas y desventajas de moprosoft
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
Algoritmos intercalación
Algoritmos intercalaciónAlgoritmos intercalación
Algoritmos intercalación
 
Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoria
 
Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++Archivos secuenciales-indexados C++
Archivos secuenciales-indexados C++
 

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: