Tema 3' Optimizacin de Cdigo PowerPoint PPT Presentation

presentation player overlay
1 / 55
About This Presentation
Transcript and Presenter's Notes

Title: Tema 3' Optimizacin de Cdigo


1
Tema 3. Optimizaci贸n de C贸digo
  • Lecciones 5,6,7,8 y 9

2
Generaci贸n de C贸digo y Optimizaci贸n
  • Generaci贸n de c贸digo
  • Se realiza mientras se analiza el programa
  • Libre del contexto
  • Optimizaci贸n
  • Se realiza despu茅s de la generaci贸n de c贸digo de
    todo el programa o de un elemento ejecutable del
    programa (funci贸n, procedimiento, etc).
  • Dependiente del contexto

Programa fuente
Analizador lexicogr谩fico, sint谩ctico y
sem谩ntico
Se ejecuta todo junto. Mientras se analiza se
genera c贸digo
Generador de C贸digo
Optimizador
Programa objeto
3
Optimizaci贸n
  • Objetivo
  • Obtener c贸digo que se ejecuta m谩s eficientemente
    seg煤n los criterios
  • Tiempo de ejecuci贸n (optimizaci贸n temporal)
  • Espacio de memoria utilizado (optimizaci贸n
    espacial)
  • Funcionamiento
  • Revisa el c贸digo generado a varios niveles de
    abstracci贸n y realiza las optimizaciones
    aplicables al nivel de abstracci贸n
  • Representaciones de c贸digo intermedio de m谩s a
    menos abstractas
  • 脕rbol sint谩ctico abstracto
  • Optimizar subexpresiones redundantes, reducci贸n
    de frecuencia, etc.
  • Tuplas o cuadruplas
  • Optimizar en uso de los registros o de las
    variables temporales
  • Ensamblador/C贸digo m谩quina
  • Convertir saltos a saltos cortos
  • Reordenar instrucciones

4
Optimizaci贸n
  • Funcionamiento (continuaci贸n)
  • Representaciones de c贸digo para extraer
    informaci贸n
  • Grafos.
  • Condiciones que se han de cumplir
  • El c贸digo optimizado se ha de comportar igual que
    el c贸digo de partida excepto por ser m谩s r谩pido o
    ocupar menos espacio.
  • Hay que buscar transformaciones que no modifiquen
    el comportamiento del c贸digo seg煤n el
    comportamiento definido para el lenguaje de
    programaci贸n. Ejemplo
  • Si no se ha definido el orden de evaluaci贸n de
    los operandos la siguiente optimizaci贸n es v谩lida
  • B2A(Acd)
  • Pasar a
  • Acd
  • BA3

5
Tipos de Optimizaci贸n
  • Optimizaci贸n independiente de m谩quina
  • Reducci贸n de frecuencia
  • Optimizaci贸n dependiente de m谩quina
  • Asignaci贸n de registros
  • Reordenaci贸n de las instrucciones
  • Optimizaci贸n local
  • Reducci贸n de potencia
  • Folding
  • Propagaci贸n de constantes
  • Optimizaci贸n global
  • an谩lisis del grafo del flujo de ejecuci贸n
  • Optimizaci贸n de bucles
  • Loop unrolling
  • Reducci贸n de frecuencia
  • Reducci贸n de potencia

6
Optimizaci贸n Local
  • Las optimizaciones locales se realizan sobre el
    bloque b谩sico
  • Optimizaciones locales
  • Folding
  • Propagaci贸n de constantes
  • Reducci贸n de potencia
  • Reducci贸n de subexpresiones comunes
  • Bloque B谩sico
  • Un bloque b谩sico es un fragmento de c贸digo que
    tiene una 煤nica entrada y salida, y cuyas
    instrucciones se ejecutan secuencialmente.
    Implicaciones
  • Si se ejecuta una instrucci贸n del bloque se
    ejecutan todas en un orden conocido en tiempo de
    compilaci贸n.
  • La idea del bloque b谩sico es encontrar partes del
    programa cuyo an谩lisis necesario para la
    optimizaci贸n sea lo m谩s simple posible.

7
Bloque B谩sico (ejemplos)
  • Ejemplos (separaci贸n err贸nea)
  • for (i1ilt10i)
  • bbai
  • cbi
  • a3
  • b4
  • goto l1
  • c10
  • l1 d3
  • e4
  • Separaci贸n correcta
  • for (i1ilt10i)
  • bbai
  • cbi
  • a3
  • b4
  • goto l1

BB1 i1 BB2 ilt10 BB3 bbai cbi i BB4
a3 b4 goto l1 BB5 c10 BB6 l1 d3 e4
8
Ensamblamiento (Folding)
  • El ensamblamiento es remplazar las expresiones
    por su resultado cuando se pueden evaluar en
    tiempo de compilaci贸n (resultado constante).
  • Ejemplo A23AC -gt A5AC
  • Propagaci贸n de constantes
  • Desde que se asigna a una variable un valor
    constante hasta la siguiente asignaci贸n, se
    considera a la variable equivalente a la
    constante.
  • Ejemplo Propagaci贸n Ensamblamiento
  • PI3.14 -gt PI3.14 -gt PI3.14
  • G2RPI/180 -gt G2R3.14/180 -gt G2R0.017
  • PI y G2R se consideran constantes hasta la
    pr贸xima asignaci贸n.
  • Estas optimizaciones permiten que el programador
    utilice nombres para las constantes sin
    introducir ineficiencias.

9
Extensiones
  • Variables indexadas
  • Se asocian constantes a expresiones de acceso a
    variables indexadas. Ejemplo
  • Ai10
  • Se asocia 10 a Ai aun no sabiendo el valor de
    i.
  • En el caso de hacer una asignaci贸n a cualquier
    elemento de A se deshace la asociaci贸n.
  • Usar las propiedades conmutativa y asociativa.
  • Ejemplo aplicando la propiedad conmutativa se
    reduce
  • AB2C3
  • ABC5

10
Extensiones
  • Extender la aplicaci贸n fuera del bloques b谩sicos
  • Hay que realizar un an谩lisis del flujo de
    ejecuci贸n y es complejo. Ejemplo
  • i0
  • loop
  • ii1
  • if (ilt10) goto loop
  • Se transforma err贸neamente en
  • i0
  • loop
  • i1
  • if (1lt10) goto loop

11
Implementaci贸n del Folding
  • Implementaci贸n durante el an谩lisis
    sint谩ctico/sem谩ntico o creaci贸n del 谩rbol
    sint谩ctico.
  • Se a帽ade el atributo de constante temporal a los
    s铆mbolos no terminales y a las variables de la
    tabla de s铆mbolos.
  • Se a帽ade el procesamiento de las constantes a las
    reglas de an谩lisis de expresiones.
  • Implementaci贸n posterior
  • Buscar partes del 谩rbol donde se puede aplicar la
    propiedad conmutativa
  • Buscar las constantes y operarlas
  • Reconstruir el 谩rbol

12
Ejemplo de Folding
  • Expresi贸n 3-(56)4-A10
  • 脕rbol
  • -
  • -
  • - -
  • - 3
  • -
  • - 5
  • - 6
  • - 4
  • -
  • - A
  • - 10
  • T茅rminos
  • 3
  • -5
  • -6
  • 4
  • -(A10)

13
Implementaci贸n de la Propagaci贸n de Constantes
  • Implementaci贸n posterior
  • Separar el 谩rbol en bloques b谩sicos
  • Cada bloque b谩sico ser谩 una lista de expresiones
    y asignaciones
  • Para cada bloque b谩sico
  • Inicializar el conjunto de definiciones a
    conjunto vac铆o.
  • Definici贸n (variable,constante)
  • Procesar secuencialmente la lista de expresiones
    y asignaciones
  • Para expresi贸n y asignaci贸n
  • Sustituir las apariciones de las variables que se
    encuentran en el conjunto de definiciones por sus
    constantes asociadas.
  • Para asignaciones
  • Eliminar del conjunto de definiciones la
    definici贸n de la variable asignada
  • A帽adir la definici贸n de la variable asignada si
    se le asigna una constante

14
Ejemplo de Separaci贸n en Bloques B谩sicos
  • Fun
  • -
  • - gt
  • - f
  • - x
  • - y
  • - InstrComp
  • -
  • -
  • - i
  • - 0
  • -
  • -
  • - b
  • - 5
  • -
  • - while
  • - lt
  • - i

Fun f(x,y)gt i0 b5
while (iltx) print(ib)
ii1 xb
i0 b5
iltx
print(ib) ii1
15
Eliminaci贸n de subexpresiones redundantes.
  • Las subexpresiones que aparecen m谩s de una vez se
    calculan una sola vez y se reutiliza el
    resultado.
  • Idea Detectar las subexpresiones iguales y que
    las compartan diversas ramas del 谩rbol. Problema
    Hay que trabajar con un grafo ac铆clico.
  • Dos expresiones pueden ser equivalentes y no
    escribirse de la misma forma AB es equivalente a
    BA. Para comparar dos expresiones se utiliza la
    forma normal
  • Se ordenan los operandos Primero las constantes,
    despu茅s variables ordenadas alfab茅ticamente, las
    variables indexadas y las subexpresiones. Ejemplo
  • XC3A5 -gt X 35AC
  • Y2A4C -gt Y24AC
  • divisiones y restas se ponen como sumas y
    productos para poder conmutar
  • A-B -gt A (-B)
  • A/B -gt A (1/B)

16
Implementaci贸n
  • Primero se aplica el ensamblamiento y la
    propagaci贸n de constantes.
  • Despu茅s se reordena el 谩rbol sint谩ctico hasta
    obtener la forma normal.
  • Se inicia la eliminaci贸n de las subexpresiones
    redundantes.
  • Hay que considerar las asignaciones que pueden
    convertir una subexpresion redundante en no
    redundante. Ejemplo
  • QAB
  • AQ22
  • C1ABP
  • Ejemplo de eliminaci贸n de subexpresiones
  • J2D3
  • DD2
  • JJD

AB no es redundante por la asignaci贸n
17
Optimizaciones Dentro de Bucles
  • La optimizaci贸n de bucles es muy importante por
    las mejoras en tiempo de ejecuci贸n que se
    obtienen
  • Estrategias de optimizaci贸n dentro de bucles
  • Expansi贸n de bucles (loop unrolling)
  • Reducci贸n de frecuencia (frequency reduction)
  • Reducci贸n de potencia (strength reduction)

18
Expansi贸n de bucles(loop unrolling)
  • La expansi贸n de bucles solo se puede aplicar a
    los bucles cuyo n煤mero de iteraciones se conoce
    en tiempo de compilaci贸n. Ejemplo
  • Se puede aplicar a los bucles
  • for i1 to 10 do
  • No se puede aplicar a los bucles
  • for ia to b do
  • La expansi贸n de un bucle puede ser muy costosa en
    espacio. Hay que poner un criterio heur铆stico
    para decidir si se aplica la expansi贸n.
  • Se puede aplicar una expansi贸n parcial en la que
    sigue existiendo el bucle, pero cada iteraci贸n
    del nuevo bucle corresponde a varias iteraciones
    del bucle original.
  • En un bucle expandido se ha de sustituir el
    铆ndice del bucle por el valor constante
    correspondiente

19
Reducci贸n de frecuencia. (frequency reduction)
  • La reducci贸n de frecuencia detecta las
    operaciones invariantes de bucle y las calcula
    una 煤nica vez delante del bucle. Ejemplo
  • for i1 to n do cisin(a)
  • sin(a) es una operaci贸n invariante del bucle que
    puede pasar de calcularse n veces a una con la
    siguiente transformaci贸n
  • tmpsin(a)
  • for i1 to n do citmp
  • S贸lo las operaciones que cumplen
  • Su 煤nico efecto es el c谩lculo del resultado
  • El resultado solo depende de los operandos.
  • se pueden considerar como operaciones
    invariantes de bucle.
  • Ejemplo
  • Invariantes . -, , / , sin, ln
  • No invariantes printf, getchar, , random

20
Implementaci贸n de la Reducci贸n de Frecuencia
  • Pasos
  • Detectar todas las variables que se modifican en
    el bucle.
  • Marcar todas las operaciones no invariantes
  • Aplicar la siguiente regla recursiva para
    detectar las operaciones invariantes
  • Una operaci贸n es invariante si sus operandos son
    invariantes.
  • Asociar a cada expresi贸n invariante una variable
    temporal.
  • Sustituir en el bucle las operaciones invariantes
    por las correspondientes variables.
  • A帽adir delante del bucle la asignaci贸n de la
    expresi贸n invariante a su variable temporal.
  • Problema del m茅todo anterior
  • Cuando no se entra en el bucle se calculan sus
    operaciones invariantes. La soluci贸n es evaluar
    antes la condici贸n de salida del bucle.

21
Reducci贸n de potencia(strength reduction)
  • Se busca sustituir operaciones costosas por otras
    mas simples. Ejemplo
  • sustituir productos por sumas.
  • a2a
  • aaa
  • Evitar la operaci贸n append ()
  • Alength(s1 s2)
  • convertirlo en
  • Alength(s1)length(s2)
  • Sustituir productos entre variables inductivas e
    invariantes de bucle por sumas
  • for(i1 ilt10i) ai3i
  • convertir en
  • for(i1,j3ilt10i,j3) aij
  • Problemas ha resolver
  • Detectar las invariantes de bucle
  • Ya esta solucionado
  • Detectar las variables inductivas

22
Variables Inductivas
  • Una variable V es inductiva cuando la 煤nica forma
    en que se modifica su c贸digo es VVK, donde K es
    una invariante de bucle.
  • Se considerar谩 la necesidad de generar una
    variable inductiva temporal T a partir de
    encontrar expresiones de la forma VC, donde C es
    una invariante de bucle.
  • Se sustituir谩 VC por T
  • Se inicializa T despu茅s de la inicializaci贸n de V
    como TVC (solo se ejecuta al entrar en el
    bucle)
  • Al final de cada iteraci贸n se a帽ade TTCK

23
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
  • Una propagaci贸n de constantes fuera del bloque
    b谩sico.
  • Eliminaci贸n del c贸digo no utilizado
  • Una mejor asignaci贸n de los registros.
  • Problema la optimizaci贸n global es muy costosa
    en tiempo de compilaci贸n

24
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
  • r1
  • i1
  • while (iltn)
  • rri
  • i
  • return r

bloque b谩sico
r1 i1
bloque b谩sico
while (iltn)
bloque b谩sico
rri i
return r
bloque b谩sico
25
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.

26
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
  • expresiones disponibles (al seguir la ejecuci贸n
    sigue siendo v谩lido el resultado obtenido)
  • Alcance de las definiciones
  • variables vivas
  • expresiones muy utilizadas
  • Para la resoluci贸n de los problemas anteriores se
    utiliza la idea de punto entre instrucciones o
    bloques b谩sicos.

r1 i1
Puntos
while (iltn)
27
Expresiones Disponibles(Available expresions)
  • El problema de las expresiones disponibles
    consiste en determinar que expresiones est谩n
    disponibles al inicio de cada bloque
  • Algoritmo
  • Para cada bloque b谩sico se definen 4 conjuntos
  • AE_TOP(BB) la expresi贸n est谩 disponible en el
    punto que precede a BB
  • AE_KILL(BB) la expresi贸n ya no ser谩 v谩lida
    despu茅s de la ejecuci贸n de BB por que se ha
    modificado alg煤n operando.
  • AE_GEN(BB) Se ha evaluado la expresi贸n en BB sin
    que se modifiquen sus oper谩ndos.
  • AE_BOT(BB) La expresi贸n est谩 disponible justo
    despu茅s de la ejecuci贸n de BB
  • Ecuaci贸n para las expresiones disponibles
  • AE_BOT(BB)(AE_TOP(BB)-AE_KILL(BB)) 脠 AE_GEN(BB)
  • AE_TOP(BB) 脟p precedente de BB AE_BOT(P)

28
Alcance de las Definiciones(reaching definitions)
  • El valor de una variable se define cuando se le
    asigna un valor.
  • Este valor definido se pierde cuando se realiza
    una nueva asignaci贸n.
  • El problema del alcance de las definiciones es el
    mismo que el problema de las expresiones
    disponibles, pero en el caso de las variables.
  • Ecuaciones
  • RD_BOT(BB)(RD_TOP(BB)-RD_KILL(BB)) 脠
  • RD_GEN(BB)
  • RD_TOP(BB) 脟p precedente de BB RD_BOT(P)

29
Variables Vivas(live variables)
  • Una variable esta viva en un punto p cuando su
    valor es requerido para un camino de ejecuci贸n
    que pasa por p.
  • Un camino requiere el valor de una variable
    cuando hay una asignaci贸n de la variable al
    principio y una lectura al final.
  • Uso delimitar exactamente en que partes del
    c贸digo es necesaria una variable.
  • Ecuaciones
  • LV_TOP(BB)(LV_BOT(BB)-LV_DEF(BB)) 脠
  • LV_USE(BB)
  • LV_BOT(BB) 脠s sucesor de BB LV_TOP(S)

30
Expresiones muy Utilizadas(Very Busy Expression)
  • Una expresi贸n es muy utiliza en un punto p cuando
    el valor de la expresi贸n se requiere antes que el
    valor de cualquiera de sus t茅rminos a lo largo de
    cualquier camino que empieza en p.
  • Ecuaciones
  • VBE_TOP(BB)(VBE_BOT(BB)-BVE_DEF(BB)) 脠
    BVE_USE(BB)
  • VBE_BOT(BB) 脟s sucesor de BB VBE_TOP(S)

31
Algoritmos de An谩lisis del Flujo de Ejecuci贸n
  • Tipos
  • Algoritmos basados en la estructura de los bucles
  • Son r谩pidos
  • Hay que reducir el grafo a bucles sin saltos que
    entren en medio del bucle. Los programas
    estructurados son reducibles.
  • Algoritmos iterativos
  • Son lentos pero gen茅ricos
  • Tipos
  • lista de trabajos
  • round robin

32
Aplicaciones a la Optimizaci贸n de Programas
  • expresiones disponibles (al seguir la ejecuci贸n
    sigue siendo v谩lido el resultado obtenido)
  • Eliminar expresiones redundantes
  • Alcance de las definiciones
  • Reutilizar las copias en registro de los valores
    de las variables.
  • Propagaci贸n de constantes
  • Reducci贸n de frecuencia
  • variables vivas
  • Reutilizar el espacio de variables.
  • Eliminar variables innecesarias
  • expresiones muy utilizadas
  • optimizar la asignaci贸n de registros

33
Ejemplo Optimizaci贸n Global
  • IF A(1)lt0 Jgt0 THEN L1 ELSE L2
  • J2
  • FOR K1 STEP 2 UNTIL J DO
  • BEGIN
  • A(K1)A(K)A(K1)
  • IJ
  • LKI
  • END

A(1)lt0
Jgt0
L2
L1
J2 K1
KltJ
A(K1)A(K)A(K1) IJ LKI KK2
34
Ejemplo de Optimizaci贸n GlobalVariables Vivas
A(1),J
A(1)lt0
J

Jgt0

L2
L1


J2 K1
J,K
KltJ
J,K
A(K1)A(K)A(K1) IJ LKI KK2
J,K
35
Ejemplo de Optimizaci贸n GlobalEliminaci贸n de
Variables Innecesarias
A(1),J
A(1)lt0
J

Jgt0

L2
L1

J2 K1
J,K
KltJ
J,K
A(K1)A(K)A(K1) IJ LKI KK2
J,K
Se puede eliminar L e I Las A(K),A(K1) no se
eliminan pues no se han podido considerar en el
c谩lculo de variables vivas
36
Ejemplo de Optimizaci贸n GlobalPropagaci贸n de
Constantes
A(1),J
A(1)lt0
Eliminar Jgt0 por no utilizarse y saltar al
mismo bloque b谩sico Eliminar A(1)lt0 despu茅s de
eliminar Jgt0
Jgt0
J2 K1
J2
Klt2
A(K1)A(K)A(K1) KK2
Se puede expandir el bucle
37
Ejemplo de Optimizaci贸n GlobalExpandir el Bucle
J2 K1
A(11)A(1)A(11) A(21)A(2)A(21)
Eliminar J y k por que no se utilizan y realizar
los c谩lculos entre constantes
A(2)A(1)A(2) A(3)A(2)A(3)
38
Optimizaci贸n Dependiente de M谩quina
  • La optimizaci贸n dependiente de m谩quina pretende
    aprovechar las caracter铆sticas espec铆ficas de la
    m谩quina para acelerar la ejecuci贸n del programa
  • Considerar los ciclos de reloj que gasta cada
    instrucci贸n de c贸digo m谩quina.
  • Utilizar desplazamientos de bits para multiplicar
    y dividir.
  • Para poner un registro a cero utilizar la
    instrucci贸n XOR reg,reg que accede menos a
    memoria
  • Utilizar saltos relativos de 8 o 16 bits para
    acceder menos a memoria.
  • Alinear instrucciones/Datos para que se acceda en
    un 煤nico ciclo de memoria.
  • Combinar operaciones en una misma instrucci贸n.
  • Utilizar el direccionamiento con pre- y
    post-incremento.

39
Optimizaciones Dependientes de M谩quina
  • Sacar provecho de todas las formas de
    direccionamiento del procesador.
  • Utilizar acceso indexado para los arrays.
  • Reordenar las instrucciones para paralelizar su
    ejecuci贸n.
  • Un Pentium es capaz de ejecutar en paralelo un
    c谩lculo con enteros con otro de flotantes.
  • Evitar que la siguiente instrucci贸n dependa del
    resultado de la anterior para que no se produzca
    un fallo en la pipe-line. Incluso puede ser
    interesante a帽adir NOPs para evitar los fallos de
    pipe-line.
  • Optimizar el uso de los registros del procesador.
  • Es especialmente importante en los procesadores
    RISC.
  • Considerar el tama帽o de la cache del procesador.

40
Asignaci贸n de Registros
  • M谩quinas con un solo registro (acumulador)
  • C贸digo m谩quina t铆pico. Todas las operaciones
    trabajan sobre el acumulador
  • Cargar X
  • Guardar X
  • Operar X
  • Ejemplo TXY
  • Cargar X
  • Sumar Y
  • Guardar T
  • La optimizaci贸n ser谩 reducir el n煤mero de
    operaciones del carga y descarga del acumulador.

41
Generar C贸digo para Maquina con un Acumulador a
partir de Notaci贸n Polaca
  • Ideas
  • Utilizar una pila de variables temporales donde
    se guardan los operandos.
  • Mirar de eliminar las operaciones de
    carga/descarga innecesarias.
  • Ejemplo XA(BCD)
  • Notaci贸n polaca inversa
  • X A B C D
  • C贸digo generado sin optimizar
  • Cargar B
  • Mult C
  • Guardar T1 BC
  • Cargar T1
  • Sumar D
  • Guardar T2 BCD
  • Cargar A
  • Sumar T2
  • Guardar T3 A(BCD)
  • Cargar T3
  • Guardar X

42
Optimizaci贸n
  • Ideas
  • Retrasar en todo lo posible las instrucci贸n
    Guardar
  • Reutilizar el contenido del acumulador
  • Sacar provecho de la conmutatividad de las
    operaciones
  • Ejemplo

Cargar B Mult C BC Sumar D BCD Guardar T2
BCD Cargar A Sumar T2 A(BCD) Guardar X
Eliminar por reutilizaci贸n del acumulador
Cargar B Mult C Guardar T1 BC Cargar T1 Sumar
D Guardar T2 BCD Cargar A Sumar T2 Guardar T3
A(BCD) Cargar T3 Guardar X
Aplicar la propiedad conmutativa de la suma
Cargar B Mult C BC Sumar D BCD Sumar A
BCDA Guardar X
Eliminar por reutilizaci贸n del acumulador
43
Asignaci贸n de Registro en M谩quinas Multi Registro
  • La asignaci贸n de registros tiene dos pasos
  • Register Allocation
  • Es cuando se decide que una variable se ha de
    guardar en un registro
  • Register Assignment
  • Es cuando se selecciona el registro para guardar
    una variable
  • Como optimizar la asignaci贸n de registros
  • Minimizar el n煤mero de variables temporales
    necesarias para evaluar una expresi贸n
  • Asignar las variables temporales a registros
  • Si hay suficientes registros ya se ha acabado
  • Si no hay que decidir que variables se han de
    transferir a memoria y como minimizar el n煤mero
    de transferencias

44
Minimizar el N煤mero de Variables Temporales
  • Idea
  • Minimizar el n煤mero de registros necesarios para
    los operandos de una operaci贸n y luego considerar
    en que orden se han de calcular los operandos
    para minimizar el n煤mero de registros del c谩lculo
    completo

Operaci贸n binaria
Operando 2 m registros
Operando 1 n registros
Maxn,m1 registros RCalcular Op1 Calcular
Op2 Operaci贸n R,Op2
Maxn1,m registros RCalcular Op2 Calcular
Op1 Operaci贸n Op1,R
45
Carga/Descarga de Registros
  • Minimizar el n煤mero de operaciones de carga y
    descarga
  • Que registro se ha de descargar a memoria?
  • No guardar en memoria los operandos izquierdos de
    operaciones no conmutativas (ej. / -) siempre que
    haya otra posibilidad. S贸lo tiene sentido si el
    procesador no permite divisiones o restas con los
    operandos invertidos ( -AB, A\B).
  • Guardar en memoria el valor que m谩s se tardar谩 en
    utilizar en el programa
  • Seleccionar el registro para una variable V
  • Si hay alg煤n registro libre asignarlo a V
  • sino si hay un registro cuyo valor no se
    necesitara
  • asignarlo a V
  • sino seleccionar el registro que m谩s tardar谩 en
  • utilizarse
  • guardar el valor del registro si ha
    sido modificado
  • asignarlo a V

46
Cuando se utilizar谩 una Variable
  • Para saber cuando se utilizar谩 una variable se ha
    de aplicar el c谩lculo de las variables vivas.
  • Ejemplo
  • ccb
  • aab
  • ddc
  • bd
  • ec

Uso de los registros R0 R1 R2 b c - b
c a d c a d c b e
c b
a b c d e
47
Optimizar Cargas y Descargas
  • Descargar una variable modificada es m谩s costoso
    que una no modificada. Para considerar esta
    diferencia de coste se utiliza el siguiente grafo
  • Los v茅rtices representan los estados de
    utilizaci贸n de los registros y
  • Las aristas representan las cargas y descargar
    necesarias para pasar de un estado a otro.
  • Se busca el camino de menor coste que vaya del
    estado de los registros al inicio del bloque
    b谩sico hasta el estado de estos al final del
    bloque b谩sico

48
Arquitectura M谩quina y Generaci贸n de C贸digo Real.
  • Generar c贸digo por tabla
  • A cada instrucci贸n de c贸digo intermedio le
    corresponde una o m谩s instrucciones de c贸digo
    m谩quina que se han guardado en una tabla.
  • Los registros no siempre son gen茅ricos
  • 68K registros de datos y direcciones separados
  • Pentium registros separados para enteros y
    flotantes
  • Una instrucci贸n de c贸digo m谩quina puede ser
    varias instrucciones de c贸digo intermedio
  • En la misma instrucci贸n se realiza el c谩lculo de
    la direcci贸n de memoria del elemento de un array

push
MOV (SP),R1
pop
MOV R1,-(SP)
49
Ejemplo de Optimizaci贸n dependiente de M谩quina
Pentium y Pentium II (I)
  • Ayudar al compilador para que pueda optimizar el
    c贸digo
  • Tener en cuenta los algoritmos de predicci贸n de
    saltos
  • Evitar paradas por uso parcial de registros
    (Avoid partial register stalls).
  • Alinear los datos
  • Ordenar el c贸digo para evitar fallos de la cache
    de prelectura de instrucciones
  • Reordenar las instrucciones para maximizar la
    ejecuci贸n paralela de instrucciones.

50
Ejemplo de Optimizaci贸n dependiente de M谩quina
Pentium y Pentium II (II)
  • Evitar los prefijos de instrucci贸n
  • Evitar leer y escribir sobre la misma memoria con
    diferentes tipos de datos.
  • Emparejar CALL y RET
  • Evitar c贸digo automodificable
  • No poner datos en el segmento de c贸digo
  • Calcular las direcciones de destino cuanto antes

51
Como Escribir los Programas C
  • Ayudar al compilador para que pueda optimizar el
    c贸digo
  • Minimizar el uso de variables globales
  • Minimizar el uso de punteros
  • Minimizar el uso de estructuras de control
    complejas
  • No usar register
  • Usar const
  • No contradecir al sistema de tipos
  • Tener en cuenta los algoritmos de predicci贸n de
    saltos. Suposiciones del predictor
  • No saltar en caso de un salto condicional hacia
    delante
  • Saltar en caso de salto condicional hacia atr谩s

52
Reducir el N煤mero de Saltos
  • Reduce la posibilidad de predicciones err贸neas
  • Reduce el n煤mero de entradas en la BTB (Branch
    Target Buffer)
  • Ejemplo ebx (AltB) ? C1 C2
  • cmp A, B condition
  • jge L30 conditional branch
  • mov ebx, CONST1
  • jmp L31 unconditional branch
  • L30
  • mov ebx, CONST2
  • L31
  • Pentium
  • xor ebx, ebx clear ebx
  • cmp A, B
  • setge bl When ebx 0 or 1
  • OR the complement condition dec ebx
    ebx00...00 or 11...11
  • and ebx, (CONST2-CONST1) ebx0
  • or (CONST2-CONST1)
  • add ebx, min(CONST1,CONST2)
  • Pentium II

53
Evitar paradas por uso parcial de registros
(Avoid partial register stalls).
  • Register Stall al acceder a EAX
  • MOV AX, 8
  • ADD ECX, EAX
  • En el caso de Pentium II se puede producir para
    instrucciones no contiguas
  • MOV AL, 8
  • MOV EDX, 0x40
  • MOV EDI, new_value
  • ADD EDX, EAX Partial stall

54
Alinear
  • Alinear datos
  • Align 8-bit data on any boundary.
  • Align 16-bit data to be contained within an
    aligned 4-byte word.
  • Align 32-bit data on any boundary which is a
    multiple of four.
  • Align 64-bit data on any boundary which is a
    multiple of eight.
  • Align 80-bit data on a 128-bit boundary (that is,
    any boundary which is a multiple of 16 bytes).
  • Alinear c贸digo
  • Loop entry labels should be 16-byte aligned when
    less than eight bytes away from a 16-byte
    boundary.
  • Labels that follow a conditional branch should
    not be aligned.
  • Labels that follow an unconditional branch or
    function call should be 16-byte aligned when less
    than eight bytes away from a 16-byte boundary.

55
Reordenar las instrucciones para maximizar la
ejecuci贸n paralela
  • Pairing cannot be performed when the following
    conditions occur
  • The next two instructions are not pairable
    instructions (see Appendix A for pairing
    characteristics of individual instructions). In
    general, most simple ALU instructions are
    pairable.
  • The next two instructions have some type of
    register contention (implicit or explicit). There
    are some special exceptions to this rule where
    register contention can occur with pairing. These
    are described later.
  • The instructions are not both in the instruction
    cache. An exception to this which permits pairing
    is if the first instruction is a one-byte
    instruction.
Write a Comment
User Comments (0)
About PowerShow.com