Suggesting Loop Unrolling Using a Heuristic-guided Approach

Autor:     Pedro Pinto
Orientador:     João Cardoso
Realizada na:     FEUP

O desenvolvimento de aplicações embebidas encontra frequentemente limitações de memória e/ou de tempo de execução. Alguns compiladores avançados podem usar transformações de código para melhorar o desempenho. Nos casos em que estas transforamções não podem ser automatizadas é necessário que seja o programador a aplicá-las. O principal objetivo desta dissertação é propor uma abordagem que consiga ajudar os programadores a decidir quando usar loop unrolling e qual o fator a utilizar. A abordagem apresentada usa um conjunto de heurísticas para sugerir um loop para loop unrolling. Estas heurísticas são baseadas em características que tendem a conduzir a um aumento de desempenho quando o loop unrolling é aplicado, mas também em características que podem tornar um loop desadequado para esta transformação. Esta abordagem consiste na extensão de uma ferramenta source-to-source já existente para a recolha de características e numa ferramenta que implementa as heurísticas.

De forma a avaliar e validar a abordagem proposta foi desenvolvido um protótipo direcionado para o processador PowerPC 604. Usando funções de aplicações da vida real e também outros kernels como testes, foi possível determinar quão eficiente é a abordagem proposta a prever se o loop unrolling tem um impacto positivo ou negativo na performance. Também foi possível determinar se a abordagem é capaz de sugerir fatores de unroll adequados. O protótipo desenvolvido foi capaz de fazer a sugestão correta em 75% dos casos testados. A sugestão de fatores de unroll esteve próxima ou foi igual ao fator ótimo em todos os casos menos num, em que a diferença de performance não foi significativa.

Documentação

Valid XHTML 1.0 Transitional Valid CSS!