Resumo: Otimizações de compiladores são transformações, geralmente à nível de representação intermediaria, que buscam melhorar a performance do executável gerado. Selecionar uma seqüência dessas transformações, que deixe o código em seu melhor estado possível, é uma tarefa complexa, e muitas vezes inviável. Desse modo, tenta-se mitigar o problema de selecionar tal seqüência. No contexto do problema de seleção de otimizações para os programas são aplicadas duas abordagens mais conhecidas: a compilação iterativa e a aprendizagem de maquina. Este trabalho apresenta uma abordagem que mistura as duas, aplicando compilação iterativa nos resultados selecionados pela aprendizagem de maquina. Os resultados obtidos por essa abordagem, utilizando support vector machine para a seleção das seqüências com um algoritmo genético, se mostraram superiores a uma compilação iterativa pura feita com um algoritmo genético, alcançando um speedup médio de 2,115x sobre o programa sem nenhuma otimização, enquanto a compilação iterativa pura alcançou 2,074x.
Abstract: Compiler optimizations are transformations, usually in intermediate representation of the code, that tries to improve the performance of the executable program. Choosing one sequence of these transformations, that change the code to its best possible state, is a complex task, and generally inviable. So, it is usually tried to mitigate the problem. In the context of Optimization Selection Problem, are applied two known approaches: iterative compilation and machine learning. This work shows an approach that mixes those two, applying iterative compilation in machine learning results. The obtained results with this approach, using support vector machine with genetic algorithm, show better results than a pure iterative compilation using a genetic algorithm, reaching speedups of 2,115x over program without optimizations, while a pure iterative compilation reached 2,074x. |