Acovea

Tela Software:
Acovea
Detalhes de Software:
Versão: 1.0.1
Data de upload: 3 Jun 15
Revelador: Scott Robert Ladd
Licença: Livre
Popularidade: 76

Rating: 3.0/5 (Total Votes: 2)

acovea implementa um algoritmo genético para encontrar as "melhores" opções para compilar programas com o GCC C e C ++ compiladores.
Acovea (Análise de Opções do compilador via Evolutionary Algorithm) implementa um algoritmo genético para encontrar as "melhores" opções para compilar programas com o GNU Compiler Collection (GCC) C e C ++ compiladores.
"Melhor", no presente contexto, é definido como aqueles que produzem as opções do programa executável mais rápido a partir de uma dada fonte de código. Acovea é um framework C ++ que pode ser estendido para testar outras linguagens de programação e compiladores não-GCC.
Eu pressinto acovea como uma ferramenta de otimização, para efeitos semelhantes em perfis. Tradicional perfis de nível de função identifica os algoritmos mais influentes no desempenho de um programa; Acovea é então aplicada a esses algoritmos para encontrar as bandeiras do compilador e opções que geram o código mais rápido.
Acovea também é útil para testar combinações de bandeiras para interacções pessimistas, e para testar a fiabilidade do compilador.
O software moderno é difícil de entender e verificar por meios tradicionais. Milhões de linhas de código produzir aplicações contendo interações complexas, desafiando descrição simples ou investigação de força bruta.
Um guiada, abordagem determinística para testes depende de testadores humanos para imaginar cada combinação possível de ações - uma proposta irrealista dada a complexidade do software. No entanto, apesar de que a complexidade, precisamos de respostas para questões importantes sobre, software em grande escala moderna.
Que tipo de questões importantes? Considere o GNU Compiler Collection. Eu escrevo artigos que de geração de código de referência, uma tarefa cheia de dificuldades, devido às inúmeras opções fornecidas por diferentes compiladores. Para os meus pontos de referência para ter qualquer significado, eu preciso saber qual combinação de opções produz o código mais rápido para uma determinada aplicação.
Encontrar o "melhor" conjunto de opções soa como uma tarefa simples, dada a extensão da documentação do GCC e da sabedoria convencional da comunidade de desenvolvedores do GCC. Ah, se fosse apenas tão fácil! A documentação do GCC, enquanto extensa, também é honestamente imprecisa.
Eu aprecio este estilo de documentação; ao contrário de muitos fornecedores comerciais, que fazem afirmações absolutas sobre a "qualidade" de seus produtos, documenters do GCC admitir incertezas em várias opções como alterar a geração de código. De fato, a geração de código é inteiramente dependente do tipo de aplicativo que está sendo compilado e plataforma de destino. Uma opção que produz código executável rápido para um código-fonte pode ser prejudicial para o desempenho de outro programa.
"A sabedoria convencional" chega na minha caixa de entrada sempre que eu publicar um novo artigo. Que vão desde o educado com o insistente ao rude, estes e-mails contêm sugestões contraditórias para a produção de código rápido.
Na grande maioria dos casos, tais afirmações anedóticas falta qualquer prova formal de sua validade, e, mais frequentemente do que não, a "melhoria" sugerido é ineficaz ou prejudicial. Tornou-se cada vez mais óbvio que ninguém --myself incluído - sabe precisamente como todas essas opções GCC trabalhar em conjunto na geração de código do programa.
Eu procuro o Santo Graal da Optimization - mas exatamente o que é otimização? Entender o problema é o primeiro passo para encontrar uma solução.
Otimização tenta produzir o "melhor" código de máquina a partir do código fonte. "Melhor" significa coisas diferentes para diferentes aplicações; um banco de dados pás pedaços de informações, enquanto uma aplicação científica está em causa com resultados rápidos e precisos; a primeira preocupação de um sistema embarcado pode ser o tamanho do código.
E é bem possível que o código pequeno é rápido, ou código rápido precisas. Optimization está longe de ser uma ciência exata, dada a diversidade de configurações de hardware e software.
Um algoritmo de otimização pode ser tão simples como a remoção de um loop invariante, ou tão complexo como análise de um programa inteiro para eliminar sub-expressões comuns globais. Muitas otimizações mudar o que o programador escreveu em uma forma mais eficiente, produzindo o mesmo resultado, enquanto alterando detalhes subjacentes à eficiência; outro "otimizações" código de produto que utiliza características específicas do hardware subjacente, como conjuntos de instruções especiais.
Arquiteturas de memória, oleodutos, caches dentro e fora-chip - tudo isso afeta o desempenho do código de maneiras que não são óbvias para programadores que usam uma linguagem de alto nível. Uma otimização que pode parecer para produzir código mais rápido pode, na verdade, criar um código grande que faz com que mais erros de cache, o desempenho assim degradante.
Mesmo o melhor código de mão-tuned C contém áreas de interpretação; não há absoluto, um-para-um entre as declarações C e instruções de máquina. Quase qualquer seqüência de código-fonte pode ser compilado em diferente - mas funcionalmente equivalente - instrução de máquina riachos com diferentes tamanhos e características de desempenho.
Funções inlining é um exemplo clássico desse fenômeno: a substituição de uma chamada para uma função com o código de função em si pode produzir um programa mais rápido, mas também pode aumentar o tamanho do programa. Tamanho aumentado programa, pode, por sua vez, impedir que um algoritmo de encaixe dentro da memória cache de alta velocidade, diminuindo, assim, um programa devido a erros de cache.
Note meu uso da palavra doninha "pode" - inlining funções pequenas, por vezes, permite que outros algoritmos de otimização a chance de melhorar ainda mais o código para as condições locais, produzindo mais rápido e código menor.
Optimização não é simples nem óbvio, e combinações de algoritmos podem levar a resultados inesperados. O que me traz de volta à questão: Para qualquer aplicação, quais são as opções de otimização mais eficazes?
O que há de novo nesta versão:
· Pequenas mudanças na licença não-livre.
· Foi adicionado suporte para as últimas versões do libcoyotl e libevocosm.

Programas semelhantes

robotframework
robotframework

17 Feb 15

nosy
nosy

11 May 15

TextTest
TextTest

18 Jul 15

UPPAAL
UPPAAL

2 Jun 15

Outro software de desenvolvedor Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Comentário para Acovea

Comentários não encontrado
Adicionar comentário
Ligue imagens!