Estou interessado em otimizar o fluxo de dados e controlar gráficos de fluxo e, em particular, mais complexo computacionalmente. Mas também será interessante conhecer as últimas invenções no campo das otimizações de olho mágico.
Estou interessado em otimizar o fluxo de dados e controlar gráficos de fluxo e, em particular, mais complexo computacionalmente. Mas também será interessante conhecer as últimas invenções no campo das otimizações de olho mágico.
Respostas:
Não tenho certeza de quão inovador é, ou se é muito do lado aplicado para o seu interesse, mas Hoopl mostra como uma otimização de controle / fluxo de dados pode ser modularizada, com a propagação de fatos sobre os vértices do gráfico de controle independentes do linguagem e otimização específica.
Eles fazem referência a um algoritmo de 2002 de Lerner, Grove e Chambers que compõe otimizações simples em uma "super otimização".
Suponho que a técnica de Saturação da Igualdade , como uma abordagem diferente para o problema da otimização dos pedidos de aprovação, seja relevante. Que eu saiba, no entanto, ainda não foi comprovado por uma implementação concreta em um compilador completo. As seguintes Gerações de otimizações do compilador a partir de provas também podem ser interessantes.
Houve um renascimento nos compiladores de otimização verificados. Além do artigo de Lerner (mencionado em um comentário anterior), você pode ver o projeto CompCert liderado por Xavier Leroy. Eles fizeram algumas coisas legais ao especificar otimizações como provas verificáveis pela máquina (usando Coq ). Ainda não li os artigos, mas o projeto The Verified Software Toolchain em Princeton também parece estar produzindo resultados interessantes nessa área.
Reconhecer que baz [i] + = force (foo [i], foo [j]) em um loop FOR duplo tem resultados independentes para (i, j) e reordenando as chamadas em uma curva de preenchimento de espaço em (i, j) para reduzir as falhas de cache.
Não é exatamente "olho mágico", mas é bom obter um comportamento inconsciente do cache para "livre".