-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3eb645d
commit beb3cf7
Showing
4 changed files
with
107 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# IF688 - Teoria e Implementação de Linguagens Computacionais | ||
|
||
## Introdução a Otimização de Código | ||
|
||
### Objetivo | ||
|
||
O objetivo desta aula é introduzir o conceito de otimização de código, discutindo otimizações locais em particular, além de apresentar o conceito de _Static Single Assignment_ (SSA) como representação intermediária de código para expor otimizações. | ||
|
||
### Questões para Discussão | ||
|
||
- Quais tipos de otimizações podemos efetuar em código? | ||
- Em que nível de abstração devemos realizar otimizações? | ||
- Qual o principal preceito associado à aplicação de otimizações? | ||
- Quais os diferentes níveis de granularidade onde podemos aplicar otimizações? | ||
- Qual a principal vantagem de utilizar _Static Single Assignment_ como representação intermediária de código? | ||
- Como implementar otimizações locais? | ||
- Como implementar eliminação de expressões redundantes usando _Local Value Numbering_? | ||
- Quais os pormenores de _Local Value Numbering_? | ||
|
||
### Material usado em sala de aula | ||
|
||
- [Slides](https://drive.google.com/file/d/1j2rCNcLbRzEfxd5GfggizphloYTo6k7t/view) | ||
|
||
### Vídeos | ||
- [Introdução à Análise e Otimização de Código](https://www.youtube.com/watch?v=84EGVK1UlDA) | ||
- [Otimizações Locais](https://www.youtube.com/watch?v=_d3iWKx-xDI) | ||
- [Exemplo de Otimizações Locais interagindo](https://youtu.be/wXepvg3SneE) | ||
- [Local Value Numbering](https://youtu.be/9BHK3q_2BGQ) | ||
|
||
### Links Relacionados | ||
|
||
- [Optimizing Compiler](https://en.wikipedia.org/wiki/Optimizing_compiler) | ||
- [Static Single Assignment](https://en.wikipedia.org/wiki/Static_single_assignment_form) | ||
- [Common subexpression elimination](https://en.wikipedia.org/wiki/Common_subexpression_elimination) | ||
- [Constant folding](https://en.wikipedia.org/wiki/Constant_folding) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# IF688 - Teoria e Implementação de Linguagens Computacionais | ||
|
||
## Otimizações Globais e _Data-flow Analysis_ | ||
|
||
### Objetivo | ||
|
||
O objetivo desta aula é apresentar o conceito de otimizações globais, envolvendo um CFG inteiro, bem como introduzir o conceito de análise de fluxo de dados, como forma de calcular informações necessárias para aplicar otimizações. Na aula discutimos duas análises simples que diferem na forma como a informação é propagada, sendo _global constant propagation_ um exemplo onde usamos o conceito de análises de fluxo de dados _forward-flow_, enquanto _liveness_ é usada como estudo de caso para análises _backward-flow_. | ||
|
||
### Questões para Discussão | ||
|
||
- O que distingue otimização local de global? | ||
- Como definir uma análise de fluxo de dados iterativa? | ||
- Quais os desafios associados à definição de análises globais? | ||
- O que significa definir uma análise conservadora? | ||
- Como aplicar otimizações baseadas nos resultados de análises de fluxo de dados? | ||
- Como utilizar funções de transferência para calcular informação de propagação de constantes? | ||
- Qual a intuição para afirmar que uma análise de fluxo de dados interativa termina? | ||
- Como definir se uma variável está viva ou morta? | ||
- Por qual razão é necessário que a análise seja feita de maneira _backwards_? | ||
- Como seria a definição de liveness para uma variável `x` em um statement `S`? | ||
- Como computar liveness? | ||
|
||
### Material usado em sala de aula | ||
|
||
- [Slides](https://drive.google.com/file/d/11T_1OMQRNLgrZffp7KNEWHEyuNi1BLju/view) | ||
|
||
### Vídeos | ||
|
||
- [Otimizações Globais (intraprocedural)](https://www.youtube.com/watch?v=5QCPI-tLaig) | ||
- [Expressando critérios de corretude](https://www.youtube.com/watch?v=gJzEQc3pmpo) | ||
- [Global Constant Propagation](https://www.youtube.com/watch?v=WrUgJ8dedQw) | ||
- [Criando funções de transferência para Global Constant Propagation](https://www.youtube.com/watch?v=FcXLDT34WUY) | ||
- [Algoritmo de ponto fixo para calcular valores constantes em variáveis](https://www.youtube.com/watch?v=U1RGdehABYE) | ||
- [Introdução a Liveness](https://youtu.be/_7jahD1WmQI) | ||
- [Calculando Liveness entre instruções](https://youtu.be/--OoAmvAdUQ) | ||
|
||
### Links Relacionados | ||
|
||
- [Data-flow Analysis](https://en.wikipedia.org/wiki/Data-flow_analysis) | ||
- [Live variable analysis](https://en.wikipedia.org/wiki/Live_variable_analysis) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
# IF688 - Teoria e Implementação de Linguagens Computacionais | ||
|
||
## Representando funções de transferência entre blocos básicos | ||
|
||
### Objetivo | ||
|
||
O objetivo desta aula é reforças a definição de funções de transferência, representadas por meio de equações que estabelecem como informação flui entre blocos básicos, usando _liveness_ e _dominance_ como estudos de caso. | ||
|
||
### Questões para Discussão | ||
|
||
- Como definir se uma variável está viva ou morta? | ||
- Como representar análises com equações? | ||
- O que significa _dominance_ para um bloco básico? | ||
|
||
### Material usado em sala de aula | ||
|
||
- [Slides](https://drive.google.com/file/d/15IKH1C-fWdYtP57mJ-H6at7wZLvVNSuO/view) | ||
|
||
### Vídeos | ||
|
||
- [Calculando Liveness de múltiplas variáveis entre blocos básicos](https://youtu.be/JbfOmxBLWCg) | ||
- [Usando Liveness para detectar variáveis não inicializadas](https://youtu.be/cKJ_YahGqPU) | ||
- [Dominance](https://youtu.be/PPhPov2oiec) | ||
|
||
### Links Relacionados | ||
|
||
- [Data-flow Analysis](https://en.wikipedia.org/wiki/Data-flow_analysis) | ||
- [Live variable analysis](https://en.wikipedia.org/wiki/Live_variable_analysis) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters