universidade federal da paraíba departamento de informática construção de compiladores análise...

34
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Upload: internet

Post on 17-Apr-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Construção de Compiladores

Análise e Otimização

Page 2: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Módulos

Lista de tokens

Árvore sintática

Árvore sintática anotada

Código intermediário

Código intermediário otimizado

Linguagem de máquina

Page 3: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Consiste em reconhecer instruções que formam um específico padrão que pode ser: Substituído por um menor Substituído por um padrão mais eficiente

• Tipos de otimização Peephole: análise é feita sobre um pequeno conjunto de

instruções Baseados em análise: alguma técnica de análise de código deve

ser empregada para detectar relações Análise de tempo de vida (Liveness Analysis)

Page 4: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• “Todo programa é melhorado se uma instrução é retirada” O programa deve apresentar o mesmo comportamento

x = a + b;

Pra tirar uma instrução (x = a + b;), devemos provar que o programa não foi alterado

Page 5: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Propriedades que podem ser demonstradas

O comando x = a+b nunca é executado

O comando é inútil porque todas as vezes x recebe o mesmo valor que tinha antes

Page 6: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Não é prático otimizar um programa tentando eliminar sucessivamente os seus comandos Condições de eliminação variadas

Depende do comando Da posição do comando De todos os outros comandos do programa

Page 7: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Outro exemplo clássico Retirada de comandos de um loop

Se N é 100, 100 somas a menos são executadas

Mas se o valor de N é 0??

E se “a” é usada após o loop???

Page 8: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• A otimização deve definir a quantidade de informação que se deseja manipular Podemos examinar otimizações locais

Trechos pequenos de programas Trechos sem desvios

Otimizações em um nível intermediário Considera apenas funções, módulos, ou classes

Otimizações globais Consideram inter-relações de todas as partes de um programa

• A maioria dos compiladores oferece otimizações do primeiro tipo, e quando muito algumas otimizações de nível intermediário.

Page 9: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Um programa em representação intermediária pode ser dividido em blocos básicos da seguinte maneira: Primeiro comando inicia um bloco

básico

Qualquer comando rotulado, ou que de alguma forma seja alvo de um comando de desvio inicia um novo bloco básico

Qualquer comando de desvio, condicional ou incondicional termina um bloco básico

Page 10: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Em um programa de grande porte, temos: Execução gasta 90% em 10% do código, e 10% do tempo nos

90% do código restantes. Regra dos (90%-10%) Em algumas referências temos (70%-30%)

• Principal vilão: loops aninhados Muito do trabalho no desenvolvimento de técnicas de otimização

é dedicado aos loops

Page 11: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Ferramentas Code Profiler Registram o perfil de execução do programa, permitindo a

identificação dos trechos mais executados

• AQtime

Page 12: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Oportunidades de otimização 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ções de loop Eliminação de variáveis de indução Eliminação de sub-expressões comuns

Page 13: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de código morto Código que não pode ser alcançado durante a execução de um

programa

Page 14: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de código morto

- Tema de algumas patentes

Page 15: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Renomeação de variáveis temporárias Variáveis temporárias introduzidas durante a geração de código

intermediário podem não ser estritamente necessárias

Considere a seguinte situação:

Page 16: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Renomeação de variáveis temporárias Como variáveis temporárias são temporárias, podemos reusá-la

t4 t1

t5 t2

Del(t3)

Del(t6)

Page 17: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Transformações algébricas Algumas transformações baseadas em propriedades algébricas

Comutatividade Associatividade Identidade

Exemplo: como a soma é comutativa, temos:

x=a+b*c; x=b*c+a;

O primeiro operador sempre deve estar no acumulador

Page 18: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Transformações algébricas Um exemplo baseado na associatividade

x=(a+b)+(c+d); x=(((a+b)+c)+d);

Page 19: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Dobramento de constantes Expressões compostas por constantes podem ser avaliadas em

tempo de compilação Isso evita sua avaliação repetida em tempo de execução

(i < 99)

Page 20: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Redução de força Situação onde operações mais caras podem ser substituídas por

operações mais baratas

Exemplo: calcule o comprimento da concatenação dos strings s1 e s2

Exemplo: calcule o quadrado de um número x

strlen(strcat(s1, s2)) strlen(s1) + strlen(s2)

pow(x, 2) x*x

e 2.0 * ln x, utiliza séries para calcular o logaritmo natural e a exponencial

Page 21: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Otimizações de loop A mais comum é a transferência de computações invariantes do

loop para fora dele Dado o comando x=exp, A expressão exp é composta apenas de

constantes, ou de variáveis cujos valores não são alterados dentro do loop

Page 22: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de variáveis de indução Variáveis de indução assumem valores em progressão

aritmética, a cada vez que o código do loop é executado

Qual a outra otimização feita no código resultante?

Qual outra otimização poderia ter sido feita no código resultante?

Page 23: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns

Suponha que a mesma expressão ocorre mais de uma vez em um trecho de programa

Se a e b não são alterados, é possível guardar o valor da expressão a+b em uma temporária

Se a variável x ainda está disponível com o mesmo valor, podemos usar o próprio x

Page 24: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns É necessário garantir que os valores de a, b (e, se for o caso, x)

não se alteram Preciso examinar todos os comandos que podem ocorrer entre as

duas avaliações da expressão

E se estes dois comandos não estão no mesmo bloco básico? Devemos verificar quais outros blocos básicos podem ter seus

comandos executados

Page 25: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns Podemos ter problemas mesmo quando os comandos estão no

mesmo bloco

Exemplo: array Exemplo: ponteiros

É o endereço de memória de “a” ou “b”.

j = i

Page 26: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG Determinar a possibilidade de eliminação de subexpressões

comuns em um bloco básico Baseado na construção de um grafo acíclico dirigido (dag)

Vértices representam valores distintos assumidos pelas diversas variáveis do programa no bloco considerado

Valor de alguma variável do programa

Page 27: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG Em princípio, vértices distintos correspondem a valores que

podem ser distintos durante a execução Cenário A - Int a, b, x, y, ... Cenário B - após execução de x=a+b; e y=a+b;

Cenário A Cenário B

Page 28: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG Podemos distinguir dois tipos de variáveis:

Variáveis definidas pelo programador

Variáveis temporárias, que são usadas apenas durante a execução do trecho em questão

– Possuem valores irrelevantes no início e no fim do trecho considerado

– São normalmente criadas durante a geração de código intermediário

Page 29: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG Inicialmente, cada variável definida pelo programador rotula um vértice separado Cada vez que um comando x=y op z; for considerado, procuraremos um vértice n

com o operador op, que tenha como filhos vértices rotulados por y e z. Se este vértice existir, passará a ser o vértice rotulado com x, além de outros rótulos que

já existam para n. Se não existir, um vértice será criado com essas características, e um único rótulo, x.

Este processo vale para todos os operadores binários op da linguagem intermediária. Operadores unários, ternários, etc. são tratados de forma semelhante.

Page 30: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG

c a b d e x y z

+

t1*

t2

x

x

x

x

*

t3y

y

t4

a

a +t5

+

t6

y

y+t7

z

z

Page 31: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG O último passo é retirar dos nós os rótulos desnecessários:

Se um nó está rotulado por alguma variável declarada pelo programador, todas as variáveis temporárias são removidas

Caso contrário apenas uma variável temporária será deixada.

Page 32: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Eliminação de sub-expressões comuns: o algoritmo DAG Gerando o código otimizado

Podemos usar uma ordem qualquer dos nós desde que um valor só seja usado após a instrução que gerou o mesmo valor

No caso de mais de uma variável rotulando um nó (z e x) apenas para uma delas o comando é gerado, sendo o valor copiado para as demais

Page 33: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Benchmark Conjunto de testes http://www.netlib.org/benchmark/ Livermorec benchmark

Page 34: Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Análise e Otimização

Universidade Federal da ParaíbaDepartamento de Informática

Análise e Otimização

• Observação final: “Embora a otimização possa melhorar as características de um

programa, ela não faz milagres”

Não se pode justificar um programa mal escrito, porque “vai ser otimizado”.

Em particular, normalmente a otimização não altera a ordem dos algoritmos, alterando apenas as constantes multiplicativas

Se existe para um problema um algoritmo O(n log n), não espere que um programa em que você usou um algoritmo O(n2) se transforme durante a otimização no algoritmo O(n log n).