ISSN: 2165- 7866
Jonice Oliveira
Nas últimas três décadas, foi implementado um grande número de transformações de compiladores para optimização de programas. A maioria das optimizações para uniprocessadores reduz o número de instruções executadas pelo programa utilizando transformações baseadas na análise de quantidades escalares e técnicas de fluxo de dados. Em contraste, as otimizações para processadores superescalares, vetoriais e paralelos de alto desempenho maximizam o paralelismo e a localidade da memória com transformações que dependem do rastreio das propriedades das matrizes utilizando a análise de dependência de loops. Esta investigação é uma visão abrangente das importantes técnicas de reestruturação de programas de alto nível para linguagens imperativas como o C e o Fortran. As transformações para arquiteturas sequenciais e vários tipos de arquiteturas paralelas são abordadas em profundidade. Descrevemos a finalidade de cada transformação, explicamos como determinar se é legal e damos um exemplo da sua aplicação.