Resumo: Compiladores modernos oferecem diversas otimizações para serem aplicadas ao código-fonte de um programa com o objetivo de aumentar o seu desempenho. Devido ao relacionamento complexo que as transformações possuem para cada diferente programa, descobrir qual o melhor conjunto de otimizações e qual a melhor ordem de aplicá-las sem intervenção humana são dois. dos principais problemas enfrentados pelos projetistas de compiladores. Técnicas de compilação iterativa tentam mitigar estes dois problemas avaliando o desempenho do programa compilado com diversas seqüência e escolhendo a melhor versão gerada. Bons resultados são obtidos, no entanto, na maioria dos casos a necessidade de um número extremamente grande de execuções da aplicação é um fator limitante. Abordagens que fazem uso de aprendizagem de máquina restringem a quantidade de avaliações, porém usualmente não superam estratégias iterativas. Além disso, é escassa a pesquisa de estratégias que tentam integrar duas ou mais destas técnicas para mitigar o problema de selecionar e de ordenar otimizações ao mesmo tempo. Neste contexto, este trabalho apresenta uma estratégia para mitigação do problema da seleção de fase e outra para o problema de ordenação de fase, as quais fazem uso de uma estrutura de conhecimento prévio para selecionar e ordenar seqüência. As duas abordagens foram implementadas em um framework de otimização de programas e, apesar de empregarem estratégias muito diferentes, são integradas para fornecer uma seqüência de alto desempenho bem ordenada. Os resultados de experimentos conduzidos com os programas do SPEC2006 e cBench demonstraram que a abordagem integrada é capaz de otimizar estas aplicações consistemente.
Abstract: Modern compilers ofIer several optimizations to be applied to the source code of a program to order to increase its performance. Due to the complex relationship which transformations have for each difIerent program, to find out the best optimizations set and the best order to apply them with no human interference are two hard problems which it is faced by compilers designers. Iterative compilation techniques try to mitigate these two problems evaluating compiled program performance with several sequences and choosing the best generated version. Good results are obtained, but in most cases requirement of a extremely big number of application executions is a limitative factor. Approaches use machine learning restrict quantity of evaluations, but usually they do not overcome iterative strategies. Besides, it is scarse research of strategies to try to integrate two or more from these techniques to mitigate problem of optimizations selecting and ordering at the same time. In this context, this work presents a strategy to mitigate phase selection problem and another one to phase ordering problem, which uses a prior knowledge structure to select and order sequences. Two approaches were implemented in a programs optimization framework and, despite they employ very difIerent strategies, they are integrated to provide a well-ordered high performance sequence. Experiments results lead to programs from SPEC2006 and cBench demonstrated integrated approach can optimize that applications consistently. |