Alguém aqui tem um compilador de C++ e GCC?
Não tenho a certeza se devo publicar esta pergunta aqui, porque este parece ser um site orientado para a programação.
De qualquer forma, acho que deve haver algum gurus aqui que saiba disto. Agora tenho um servidor de Opteron AMD a executar CentOS 5. Eu quero ter um compilador para um programa bastante grande baseado em C++ Boost. Que compilador devo escolher?9 answers
- GCC 4. 2 (maçã)
- Intel 10
- GCC 4. 2 (maçã) + LLVM
Tempos de Compilação: o compilador Intel era de longe o compilador mais lento - mais de '2x vezes mais lento' como outro postado Citado.
GCC manipulado profundamente modelos muito bem em comparação com a Intel.
O compilador Intel gerou ficheiros de objectos enormes.
O GCC+LLVM rendeu o binário mais pequeno.
O código gerado pode ter variância significativa devido à construção do programa, e onde o SIMD pode ser usado.
Pela forma como escrevo, descobri que o GCC + LLVM gerou o melhor código. Para programas que eu tinha escrito antes de levar a otimização a sério (como eu escrevi), a Intel era geralmente melhor. Os resultados da Intel variaram; lidou com alguns programas muito melhor, e alguns programas muito pior. Ele lidou com o processamento bruto muito bem, mas eu dou GCC+LLVM o bolo porque quando colocado no contexto de um programa maior (normal)... foi melhor. A Intel ganhou por fora da caixa, a analisar números em grandes conjuntos de dados.O GCC sozinho gerou o código mais lento, embora possa ser tão rápido com a medição e nanotimizações. Eu prefiro evitar isso porque o vento pode mudar de direção com a próxima versão do compilador, por assim dizer.
Nunca medi programas mal escritos neste teste (ou seja, resultados de distribuições superadas de bibliotecas de desempenho populares).
Finalmente, os programas foram escritos ao longo de vários anos, usando o GCC como o compilador primário na época.
Actualização: também estava a permitir optimizações / extensões para o Core2Duo. Os programas foram limpos o suficiente para permitir uma aliasing estrita.
Existe um interessante PDF aqui que compara um número de compiladores.
Edit: eu estava um pouco fora. Os ganhos típicos foram 20-30% e não 10%. Alguns casos de borda estreita tiveram uma duplicação de desempenho. http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2004-Intel.pdf
Eu suponho que varia dependendo do código, mas com a base de código que eu estou trabalhando agora, ICC 11.035 dá uma melhoria quase 2x sobre gcc 4.4.0 em um Xeon 5504.
Opções do TPI: -O2 -fno-alias
opções do gcc: -O3 -msse3 -mfpmath=sse -fargument-noalias-global
As opções são específicas apenas para o arquivo que contém o código de computação intensiva, onde eu sei que não há aliasing. Código único com um ciclo aninhado de 5 níveis.
Embora a autovectorização esteja activa, nenhum dos compiladores gera código vectorizado (não uma falha dos compiladores)
Actualização (2015/02/27): Enquanto otimizava alguns códigos de Geofísica (Q2, 2013) para correr em Sandy Bridge-e Xeons, eu tive a oportunidade de comparar o desempenho do ICC 11.1 com o GCC 4.8.0, e o GCC estava agora gerando código mais rápido do que o ICC. O código Feito usado de AVX intrinsics e fez uso de instruções vectorizadas de 8-way (nieither compiler autovectorizou o código corretamente devido a certos requisitos de layout de dados). Além disso, a implementação do LTO do CCG (com o IR núcleo embutido no .o Arquivos) foi muito mais fácil de gerenciar do que isso no ICC. O GCC com LTO estava rodando cerca de 3 vezes mais rápido que o ICC sem LTO. Não consigo encontrar os números do GCC sem o LTO, mas lembro-me que ainda era mais rápido do que o TPI. Não é de forma alguma uma declaração geral sobre o desempenho do TPI, mas os resultados foram suficientes para avançarmos com o GCC 4.8.*.
Ansioso pelo GCC 5.0 (http://www.phoronix.com/scan.php?page=article&item=gcc-50-broadwell)!
Usamos o compilador Intel no nosso produto (DB2), no Linux e no Windows IA32/AMD64, e no OS X (ou seja, todas as nossas portas de plataforma Intel excepto o SunAMD).
Não sei os números,mas o desempenho é bom o suficiente para nós:- Paga o compilador que me dizem ser muito caro.
- viver com os 2x vezes mais lentos tempos de construção (principalmente devido ao tempo que gasta a adquirir licenças antes de se permitir executar).
PHP - Compilação a partir da fonte, com ICC em vez de GCC, deve resultar em uma melhoria de velocidade de 10% a 20% - http://www.papelipe.no/tags/ez_publish/benchmark_of_intel_compiled_icc_apache_php_and_apc
MySQL - Compilação a partir do código, com ICC em vez de GCC, deve resultar em uma melhoria de velocidade de 25% a 50% - http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2005-Intel.pdf
Eu usei UnixBench (v. 5.1.3) num openSUSE 12.2 (kernel 3.4.33-2.24-default x86_64), e compilou-o primeiro com o GCC, e depois com o compilador da Intel.
Com 1 cópia paralela, o UnixBench compilado com o Intel é cerca de 20% mais rápido do que a versão compilada com o GCC. No entanto, isto esconde grandes diferenças. Dhrystone é cerca de 25% mais lento com o compilador Intel, enquanto Whetstone corre 2x mais rápido.
Com 4 cópias de UnixBench a correr em paralelo, a melhoria da Intel compilador sobre GCC é apenas 7%. Mais uma vez Intel é muito melhor em Whetstone (> 200%), e mais lento em Dhrystone (cerca de 20%).Muitas optimizações que o compilador Intel executa normalmente requerem uma sintaxe de fonte específica e o uso de-O3-ffast-math para o gcc. Infelizmente, o componente-funsafe-math-optimizations de-ffast-math-O3-march=native acabou por ser incompatível com-fopenmp, então eu devo dividir meus arquivos fonte em grupos nomeados com as diferentes opções no Makefile. Hoje eu encontrei uma falha onde uma compilação g++ usando-O3-ffast-math-fopenmp-march = native foi capaz de escrever para a tela, mas não redirecciona para um ficheiro. Uma das diferenças mais flagrantes na minha opinião é a otimização por icpc apenas de std::: max e min onde gcc / g++ querem que o fmax / min[F] com-ffast-math altere o seu significado longe do padrão.