Restrictification of function arguments

Autor: Victor Hugo Sperle Campos
Přispěvatelé: Fernando Magno Quintao Pereira, Kecia Aline Marques Ferreira, Sandro Rigo
Rok vydání: 2016
Předmět:
Zdroj: Repositório Institucional da UFMG
Universidade Federal de Minas Gerais (UFMG)
instacron:UFMG
Popis: Aliasing de ponteiros ainda prejudica as otimizações de compiladores apesar de anos de pesquisa em desambiguação de ponteiros. Por causa da dificuldade em realizar a desambiguação, diversas linguagens de programação oferecem aos programadores mecanismos para distinguir referências à memória, como a palavra-chave restrict nalinguagem C. Entretanto, o uso de tais mecanismos é sujeito a erros humanos. Nesta dissertação, apresentamos um conjunto de técnicas automáticas para mitigar o problema. Nós desenvolvemos e testamos três diferentes formas de desambiguar ponteiros passadoscomo argumentos de funções. Nossas técnicas combinam análises estáticas para inferir limites simbólicos de regiões de memória e versionamento de código. Geramos um clone para cada função cujos argumentos podem ser desambiguados e o otimizamosassumindo que os parâmetros formais da função não são alias. Em tempo de execução, usamos os resultados de comparações simbólicas para decidir qual versão da função será executada: a original, não otimizada, ou o clone restritificado. A implementação dos nossos métodos, feita sobre o LLVM, mostra que podemos vetorizar até 63% mais operações do que o nível mais alto de otimização do compilador, -O3. A aplicação da técnica sobre uma biblioteca de uso bastante difundido, a OpenCV, resultou em melhorias no tempo de execução de até 40%. Pointer aliasing still hinders compiler optimizations, despite years of research on pointer disambiguation. Several programming languages offer to coders mechanisms to distinguish memory references, such as the 'restrict' keyword in C. However, the use of such mechanisms is prone to human mistakes. This work presents a suite of automatic techniques that mitigate this problem: three different ways to disambiguate pointers passed as arguments of functions. These techniques combine static analyses to infer symbolic bounds of memory regions and code versioning. Functions whose pointers are distinct can be aggressively optimized whereas they wouldn't otherwise. An implementation of the restrictification methods in the LLVM compiler shows that we can vectorize up to 63% more operations than what could be accomplished using the highest optimization level of said compiler. When applying the optimization on OpenCV benchmarks, a widely used library, we have observed speedups as great as 40%.
Databáze: OpenAIRE