Otimiza - PowerPoint PPT Presentation

About This Presentation
Title:

Otimiza

Description:

... Ravi Sethi, Jeffrey D. Ulmann, Compilers: Principles, Techniques and Tools, Steven S. Muchnick, Advanced Compiler Design & Implementation J. L. Rangel, ... – PowerPoint PPT presentation

Number of Views:96
Avg rating:3.0/5.0
Slides: 37
Provided by: cinUfpeB98
Category:
Tags: otimiza | ravi | sethi

less

Transcript and Presenter's Notes

Title: Otimiza


1
Otimizações Parte 1
  • André José Diniz Barboza
  • Edmo Sérgio Ribeiro Bezerra
  • Prof. André Santos

2
Estrutura da Apresentação
  • Introdução
  • Conjunto de Otimizações
  • Otimizações Locais
  • Oportunidades de Otimização
  • Algoritmo DAG
  • Referências

3
Introdução
  • Um Otimizador é um programa que recebe como
    entrada outro programa P e gera um programa P
    equivalente que é melhor segundo um critério de
    avaliação.
  • Geralmente, é fácil fazer uma otimização em um
    programa, difícil é obter informação necessária
    para aplicar a otimização sem alterar o
    funcionamento do programa original.

4
Introdução
  • Ex. Considere o trecho de programa, e as opções
    para sua melhora sem alterar seu funcionamento
  • x a b
  • Este programa pode ser melhorado (ficar mais
    rápido e menor) se o comando for retirado!

5
Introdução
  • Mas, o comando só pode ser removido se alguma
    das seguintes condições forem satisfeitas
  • Condição 1 o comando nunca é executado.
  • if (0) x a b
  • Condição 2 o comando é inútil
  • x a b
  • x a b

6
Introdução
  • Condição 3 comando inútil porque comandos
    posteriores não usaram valor de x.
  • int funcao (int z)
  • int x
  • ....
  • x a b

7
Introdução
  • O exemplo mostra que não é pratico otimizar um
    programa eliminando apenas seus comandos.
  • As condições de cada eliminação dependem do
    comando, da posição e, de certa maneira, dos
    comandos restantes do programa.
  • Portanto, para se construir um otimizador de
    utilidade prática deve-se identificar
    oportunidades que sejam produtivas em situações
    coerentes.

8
Introdução
  • Um outro exemplo
  • for ( int i0 iltN i)
  • a j5
  • f(ai)
  • Se n 100, o comando a j5 poderia ser retirado
    do laço e 100 somas deixariam de ser executadas.
  • Porém, se n0, o programa foi pessimizado,
    porque o comando aj5 que não seria executado,
    passa a ser executado uma vez.

9
Conjunto de otimizações
  • Depende muito da finalidade do compilador o
    conjunto de otimizações que ele deve oferecer
  • Deve ser considerada a quantidade de informação
    que deve ser manipulada. Pode-se observar
  • - Otimizações Locais
  • - Otimizações Intermediárias
  • - Otimizações Globais
  • A maioria dos compiladores oferece otimizações do
    primeiro tipo combinadas com a fase de geração de
    código.

10
Conjunto de Otimizações
  • Otimizações Locais
  • trechos pequenos de programas, por exemplo,
    trechos sem desvios, basic blocks.
  • Otimizações intermediárias
  • otimizações consideradas apenas dentro de
    módulos, funções, ou classes.
  • Otimizações globais
  • consideram inter-relações entre todas as partes
    do programa.

11
Conjunto de Otimizações
  • A maneira de tratar otimizações pode ser
    extremamente pragmática.
  • Ex. em um programa grande, 90 de sua execução
    está concentrada em 10 do código.
  • Estes 10 de código correspondem, geralmente, ao
    loop mais interno do programa.
  • Uso de ferramenta profilers permite
    identificar trechos mais executados e concentrar
    a otimização neles.
  • Por esta razão, muito do trabalho no
    desenvolvimento de técnicas de otimização é
    voltado para otimizações locais.

12
Otimizações Locais
  • Então, o que seria um bloco básico?
  • Primeiro comando inicia um bloco básico
  • Qualquer comando com label, ou que de alguma
    forma seja alvo de um comando de desvio inicia um
    novo bloco básico
  • Qualquer comando de desvio termina um bloco
    básico
  • Ou seja, blocos básicos são trechos de programas
    cujas instruções são executadas sempre
    sequencialmente.

13
Otimizações Locais
1
2
Bloco básico
3
IF
5
7
6
8
14
Otimizações Locais
  • Várias técnicas de otimização se aplicam para
    blocos básicos, podendo ser realizada em três
    ocasiões
  • 1. Na representação intermediária
  • 2. Durante o processo de geração de código
  • 3. Após a geração de código diretamente no
    objeto

15
Otimizações Locais
  • Otimização não faz milagres!!!
  • Em particular, a otimização não altera a
    complexidade dos algoritmos, ela altera apenas as
    constantes multiplicativas.
  • Se existe para um problemas um algoritmo
    ?(nlogn), não espere que em um programa no qual
    foi usado um algoritmo ?(n2) se transforme
    durante sua otimização no algoritmo ?(nlogn).

16
Oportunidades de Otimização
  • Eliminação de sub-expressões comuns
  • Eliminação de código morto
  • Renomeação de variáveis temporárias
  • Transformações algébricas
  • Dobramento de constantes
  • Redução de força
  • Otimização de loops

17
Oportunidades de Otimização
  • Eliminação de sub-expressões comuns
  • Ocorre quando a mesma expressão (possivelmente
    uma sub-expressão de outra expressão maior)
    aparece mais de uma vez em um trecho de programa.
  • Se as variáveis que ocorrem na expressão não tem
    seus valores alterados entre as duas ocorrências,
    é possível calcular seu valor apenas uma vez.

18
Oportunidades de Otimização
  • Eliminação de sub-expressões comuns
  • ... xab
  • ... yab ...
  • Se os valores de a e de b não são alterados, é
    possível guardar o valor da expressão ab em uma
    variável temporária.
  • ... t1ab
  • xt1
  • ... yt1 ...

19
Oportunidades de Otimização
  • ou, se a variável x ainda está disponível com o
    mesmo valor da segunda vez que a expressão é
    calculada,
  • ... xab
  • ... yx ...
  • dispensando o uso da variável temporária t1.
  • Obs. Note que, para garantir que os valores de
    a, b não se alteram, é preciso examinar todos os
    comandos que podem ocorrer entre as duas
    avaliações da expressão.

20
Oportunidades de Otimização
  • Eliminação de código morto
  • Ocorre quando um programa contém código que não
    pode ser alcançado durante a sua execução, logo
    este trecho inatingível pode ser eliminado.

21
Oportunidades de Otimização
  • Eliminação de código morto
  • Ocorre após uma instrução de encerramento de um
    programa ou de uma função.
  • int f(int x)
  • return x
  • Ocorre após um teste com uma condição impossível
    de ser satisfeita.
  • if (0) x

22
Oportunidades de Otimização
  • Eliminação de código morto
  • Ocorre após um comando de desvio que e não é alvo
    de nenhum outro desvio.
  • goto x
  • i3
  • ...
  • x ...

23
Oportunidades de Otimização
  • Renomeação de variáveis temporárias
  • Ocorre quando as variáveis temporárias
    introduzidas durante a geração de código
    intermediário não são estritamente necessárias.
  • Normalmente, este controle é feito dando outros
    nomes para as variáveis que vão guardar os
    valores temporários.

24
Oportunidades de Otimização
Renomeação de variáveis temporárias
  • Código-fonte
  • xab
  • xt1
  • y(ab)c
  • zd(ab)

Código Intermediário(1) t1ab xt1 t2a
b t3t2c yt3 t4ab t5dt4 zt5
Código Intermediário(2) t1ab xt1 t2t1
t3t2c yt3 t4t1 t5dt4 zt5
Código Intermediário(3) xab yxc z
dx
25
Oportunidades de Otimização
  • Renomeação de variáveis temporárias
  • Pode acontecer que uma variável temporária possa
    ser re-usada após uma ocorrência anterior. Isto é
    feito mudando os nomes de algumas ocorrências
    dessas variáveis.

26
Oportunidades de Otimização
Renomeação de variáveis temporárias
  • Código-fonte
  • x(ab)(cd)
  • y(ef)(gh)

Código Intermediário t1ab t2cd t3t1
t2 xt3 t4ef t5gh t6t4t5 yt5

Código Intermediário t1ab t2cd xt1t
2 t1ef t2gh yt1t2
27
Oportunidades de Otimização
  • Transformações algébricas
  • Podemos aplicar algumas transformações baseadas
    em propriedades algébricas, como comutatividade,
    associatividade, identidade, etc.

28
Oportunidades de Otimização
  • Transformações algébricas
  • exemplo, como a soma é comutativa, podemos
    transformar xabc em xbca o que
    corresponde a trocar código como
  • Load b
  • Mult c
  • Store t1
  • Load a
  • Add t1
  • Store x
  • que dispensa a temporária t1, e as instruções
    que a manipulam.

Load b Mult c Add a Store x
29
Oportunidades de Otimização
  • Transformações algébricas
  • Só devem ser utilizadas com autorização
    explícita do usuário uma vez que algumas destas
    transformações podem criar problemas para a
    convergência ou a estabilidade em relação a erros
    de arredondamento dos programas.

30
Oportunidades de Otimização
  • Dobramento de constantes
  • Expressões ou sub-expressões compostas de
    valores constantes podem ser avaliadas em tempo
    de compilação (dobradas), evitando sua avaliação
    repetida em tempo de execução.

31
Oportunidades de Otimização
  • Dobramento de constantes
  • exemplo
  • define N 100
  • ...
  • while (iltN-1) ...
  • não há necessidade de se fazer repetidamente o
    cálculo para o valor de N-1. Este valor pode ser
    pré-calculado,e substituído por 99.

32
Oportunidades de Otimização
  • Dobramento de constantes
  • Podem existir problemas de portabilidade.
  • Máquina alvo é diferente da máquina de
    compilação.
  • Neste caso, avaliação é realizada uma única vez
    logo no início da execução do programa.

33
Oportunidades de Otimização
  • Redução de Força
  • Há vários casos em que operações mais caras
    podem ser substituídas por operações mais baratas.

34
Oportunidades de Otimização
  • Redução de Força
  • Cálculo de comprimento da concatenação de duas
    cadeias.
  • strlen(strcat(s1, s2)) strlen(s1)
    strlen(s2)
  • Cálculo do quadrado de um número.
  • pow(x, 2) e 2.0ln x

xx
35
Oportunidades de Otimização
  • Otimização de loop
  • Há várias otimizações que se aplicam a loops. a
    mais comum é a transferência de invariantes do
    loop para fora dele. Pórem é necessário
    verificar
  • Se a expressão é composta apenas de constantes,
    ou de variáveis cujos valores não são alterados
    dentro do loop.
  • Nenhum uso da expressão, dentro ou fora do loop
    deve ter acesso a um valor de x diferente do
    valor a que tinha acesso antes do original.

36
Referências
  • Alfred V. Aho, Ravi Sethi, Jeffrey D. Ulmann,
    Compilers Principles, Techniques and Tools,
  • Steven S. Muchnick, Advanced Compiler Design
    Implementation
  • J. L. Rangel, Otimização de Código
  • Compiler Switches Optimization http//www.astro.uu
    .se/bf/cobold/node9.html
  • http//citeseer.nj.nec.com/Programming/CompilerOpt
    imization/
Write a Comment
User Comments (0)
About PowerShow.com