Notícia publicada por brain em setembro 7, 2004 12:14 AM
| TrackBack
Mandark (mandark@rockpesado.com.br) enviou este link para o anúncio em PDF e acrescentou: "Hoje fui baixar a última versão estável do MySQL 4. Reparei que está disponível uma compilação dos binários usando o compilador da Intel, que, de acordo com o anúncio na página de download e os benchmarks apresentados, deixa o MySQL 20% mais rápido, um ganho considerável. Vale a pena conferir." O Intel C++ Compiler é realmente um termo de comparação interessante para o gcc, mas ele não é um software livre. Desenvolvedores interessados em realizar seus próprios testes de desempenho são bem-vindos para comentar.
Não sei, mas não troco meu gcc por nada... :)
Cadu, apesar do GCC ser um bom compilador e ser portado para mais de 30 plataformas (e aliás, este é o ponto forte do GCC) quando se trata de otimização do código, ele conhecidamente, não é dos melhores.
O ICC (Intel C/C++ compiler) compila um código (segundo a Intel) 30% (a velha teoria do 30%, vide a teoria do pessoal do d00dz -http://www.d00dz.org/) melhor que o GCC.
Um outro *excelente* compilador é o da SGI. O SGI além de conhecida capacidade de otimização é capaz também de paralelizar as instruções assembly para a (bastante comum) arquitetura multiprocessada dos servidores da SGI.
E agora um segredinho: tem um pessoal que trabalha no compilador do SGI que ajuda no desenvolvimento do GCC. E, por sua vez, o pessoal do GCC "namora" o pessoal da SGI rezando para que um dia (com essa "onda OpenSource da SGI) eles acabem liberando o SGI C Compiler como GPL, o que *com certeza* daria um pulo-do-gato no GCC, pois este acabaria assimilando toda a tecnologia de otimização deste maravilhoso compilador.
Já no mundo Windows, eu não sei da qualidade dos compiladores da Microsoft, mas sempre ouvi falar bem dos compiladores da Borland (o BCC/Delphi e afins).
O ICC gera um código mais otimizado, mas o GCC gera um código mais estável.
Sou chato... Mas não é GPL (ou parecido)? Então... não serve.
Sobre o bcc, pelos últimos benchmarks que vi, ele é leeerdo para computação com números de ponto flutuante. E sobre o gcc, o negócio já foi bem pior. A série 2.x (que ainda é usada no debian stable) é várias vezes mais lenta do que a 3.x. Parece que finalmente o pessoal do gcc está valorizando mais o desempenho, tomara que as melhorias continuem!
Vejam o anuncio do GCC 3.4.0: 7.5 a 11% maius rapido.
http://developers.slashdot.org/article.pl?sid=04/04/21/0020221&tid=117&tid=185&tid=8
Uso o gcc 3.4.1 com todas as flags de otimização possieis ( -O3 -march=athlon-tbird -mtune=athlon-tbird ) e é o bixo! Muito bom mesmo. Não tenho nada a reclamar...
> O ICC gera um código mais otimizado, mas o GCC
> gera um código mais estável.
Hahaha.
Da onde você tirou isso?
Aliás, o que seria um código mais estável? Os programas compilados com o ICC travam em determinada situação? Qual?
Como seria o desempenho (melhora) do quérnel compilado sob o ICC? Uma máquina GNU/Linux poderia ficar uns 20% mais rápida se compilada inteiramente com o ICC?
> Hahaha.
> Da onde você tirou isso?
> Aliás, o que seria um código mais estável? Os
> programas compilados com o ICC travam em
> determinada situação? Qual?
Tirei isso daqui:
http://www.gnu.org/software/gcc/faq.html#open-development
Um trecho para você:
"With the help of developers working together with this bazaar style development, the resulting stability and quality levels will be better than we've had before."
Alguma vantagem (além de ser livre), o GCC tem que ter sobre o ICC. Em certas aplicações, quando se usa a Flag de otimização máxima (no gcc), dá uns bugs meio doidos.
Porque você não compila seu Kernel com o ICC? Já vi tutorial na NET pra fazer isso. Tem até essa pesquisa do Kerneltrap:
http://kerneltrap.org/node/view/2964/10682/
Você vai ganhar 20% de velocidade! Hehehe!
Não sei qual gera o código mais estável, mais otimizado ou qual tem maior portabilidade, mas sugiro que os interessados montem seus próprios benchmarks e publiquem os resultados.
> Tirei isso daqui:
> http://www.gnu.org/...
Ah tá, você tá dizendo que o código gerado pelo GCC é mais estável por que foi isso que foi dito pelos desenvolvedores do... GCC! Ah tá. Isso é exatamente o que eu chamo de uma "análise independente", ou "neutra". Assim como as pesquisas patrocinadas pela Microsoft.
> With the help of developers working together
> with this bazaar style development, the
> resulting stability and quality levels will be
> better than we've had before.
Bom, ele diz que a estabilidade e a qualidade é melhor do que eles já tiveram nas versões antigas do próprio GCC. (better than WE've before) Não está sendo feita nenhuma comparação com outros compiladores.
Além do mais, a estabilidade que está sendo falada é a estabilidde do compilador, e não do código gerado. (um cursinho de inglês ia bem, hein)
> Porque você não compila seu Kernel com o ICC?
Porque os problemas de perfomance do GCC são sabidamente referentes à compilação de C++. A compilação de código em C, linguagem em qual o kernel do Linux é escrito, gera executáveis com boa perfomance. O problema é com C++. Todo mundo sabe disso. (Por isso que eu falei pra procurar por G++ no Google, e não por GCC)
cuidado com a empolgação: muitas das otimizações do icc provêm da "correção" de código que não foi escrito pensando em otimização (eliminação de avaliações redundantes em ifs, por exemplo) para muitos códigos, o ganho será bastante pequeno. Em especial, para aplicações cliente/servidor (como o BD em questão), o gargalo em geral é a velocidade da rede. A maioria dessas otimizações nem sequer será notada na maioria dos casos. De qq maneira, concordo com o Augusto que seria bom fazermos benchmarks independentes.
Mas eu mantenho meu pedido.
Você diz que o compilador da Intel é menos estável que o GCC/G++, então você deve conhecer PELO MENOS uma instabilidade do ICC. Talvez algum código que quando compilado trave o compilador, ou algo assim.
Será que você poderia ilustrar a discussão apresentando PELO MENOS uma instabilidade do ICC.
Não estou pedindo várias, só estou pedindo UMA.
o código linux (kernel) 2.4.21 compilado pelo compilador da intel "Intel C++" obteve um ganho de performance muito superior ao GCC e ao Turbo da Borland. medidas feitas por mim, utilizando para isso duas máquinas p3 800 256ram.
em torno de 20 à 25% superiores em tempo de execução creio que pela otimizaçào dos códigos.
o GCC é meu preferido mais falta bastante até ser um Intel.
Isso é assim em qualquer processador? Para quem não usa intel é supérfluo.
Ops!
Isso é assim em qualquer processador? Para quem não usa intel é supérfluo ?
Eu já usei muito o compilador Intel C++ para meus programas de pesquisa e posso dizer que a diferença de desempenho em relação ao gcc caiu MUITO e, na maioria dos casos nem creio que valha tanto à pena.
Realmente a maior diferença de desempenho é na compilação C++ e talvez programas escritos nessa linguagem se beneficiem disso, como o KDE por exemplo. Para o kernel do linux eu tenho minhas dúvidas, já que ele é escrito em C e algumas pequenas partes em assembly.
Aqui
http://www.pyrillion.org/index.html?showframe=linuxkernelpatch.html
há um patch para compilar o kernel com o icc. Nunca testei mas...
Quanto ao uso de processadores não-Intel eu posso assegurar que ele pode sim ser usado com processadores Athlon, Duron ou Athlon XP sem nenhum problema e o desempenho é muito bom sim, podendo inclusive usar as extensões multimídia (MMX, SSE, etc) que o processador suportar. Cansei de usar o icc em processadores Athlon.
Tenho um véio P3 700, e no Windows (sim, eu uso além do Linux, Windows XP), o Mame32 compilado com o GCC fica MUITO lento (mesmo com as otimizações). Com o ICC fica maravilhoso.
Ark,
Não vale comparar o icc com o gcc no windows caso vc esteja usando o cygwin por causa da emulação posix. O mingw é um pouco melhor mas eu diria que o gcc no windows é como um pato fora d'água.
Algumas coisas tem que ficar claras nesta discursão, e a primeira delas é que muito mais importante que a otimização do seu compilador é a qualidade do codigo que foi escrito, segundo o gcc é um compilador de proposito geral enquando ICC é um compilador especifico para a plataforma intel e terceiro uma parte consideravel do codigo do seu aplicativo já esta previamentente criado no seu sistema com as bibliotecas de ligação dinâmica e as APIs.
Levando os fatores acima em consideração eu digo que na maioria dos casos os compiladores tem um papel pequeno na otimazção dos codigos gerados.
Discurssão é um discurso interminável.
Não se esqueçam:
Da discussão nasce a luz!
Discursão é um discurso interminável.
Não se esqueçam:
Da discussão nasce a luz!
"Como seria o desempenho (melhora) do quérnel compilado sob o ICC? Uma máquina GNU/Linux poderia ficar uns 20% mais rápida se compilada inteiramente com o ICC?"
Quando alguém compilar o kernel com outro compilador diferente do GCC, me avisa... É impossível ( ou no mínimo muito difícil ) compilar o kernel do Linux com outro compilador se não o GCC, já que o kernel usa instruções, sintaxes e comandos específicos que só o GCC aceita.
Ah! Como sou tanso...
Agora que eu percebi que esse tal de icc é para C++... O kernel do Linux nunca vai compilar com ele, já que é todo em C e assembly (que são melhores que C++, diga-se de passagem)!
Será que tem algum compilador de C que seja melhor que o gcc? Dizem que tem melhores que o g++, mas será que existe algum melhor que o gcc?
Num criditu...será que Eu = Klassik ???
Vade retro cramulhão!
> Quando alguém compilar o kernel com outro
> compilador diferente do GCC, me avisa... É
> impossível ( ou no mínimo muito difícil ) compilar
> o kernel do Linux com outro compilador se não o
> GCC, já que o kernel usa instruções, sintaxes e
> comandos específicos que só o GCC aceita.
Bom, o Manoel Pinho mandou um link para um patch para o kernel que permite compila-lo com o ICC, uns 5 comentários antes de você.
> Agora que eu percebi que esse tal de icc é para
> C++... O kernel do Linux nunca vai compilar com
> ele, já que é todo em C e assembly (que são
> melhores que C++, diga-se de passagem)!
Hmmm, talvez você não saiba, mas o C++ é um superconjunto do C, ou seja, C está contido em C++. Qualquer código em C válido também é código em C++ válido.
E dizer que C++ é melhor que C é a mesma coisa que dizer que um helicóptero é melhor que um carro, ou que um sapato é melhor que um tênis. São ferramentas diferentas, com propósitos diferentes, portanto não faz sentido compará-las.
Cadu,
Não qual sua profissão, mas no caso de assuntos relacionados à informática, temos de conviver e desenvolver pra software proprietário também. Nem sempre podemos dizer aos nossos clientes o que eles devem fazer, e seguir uma linha única neste mercado nem sempre é a melhor opção.
Se o software é livre ou não, depende da forma em que podemos usá-lo. Se o compilador da Intel não tiver nenhuma restrição, por que não usá-lo se ele traz vantagens? Pode-se voltar ao GCC se necessário. É um exemplo simplista, mas só usei pra expressar minha opinião que é a de não rotular software proprietário como a praga do mundo. Empresas como a Microsoft são, mas softwares proprietários em geral podem não ser.
Eu usaria o compilador da Intel sem problemas, se não houver nenhuma cláusula que me prejudique ou aos meus clientes.
Pro linux ou para os softwares livres, acho até bom que façamos alguns testes com este compilador. Se ele se tornar popular, quem sabe a Intel não entra na onde e o libera? Quem sabe a SGI?
Cada vez mais as grandes empresas estão entendendo que através do software livre poderão ganhar mais clientes, liberando seus códigos e usando a "onda" open-source pra inserir seus produtos e sua cultura em um público maior. Discriminar softwares proprietários e impedir o seu uso é, na minha opinião, uma forma de não trazê-los pra a comunidade.
Testemos o ICC, quem sabe ele não nos serve pra algo...
Abraço.
Manoel Pinho: é, no caso era o MingW. Concordo que não é a melhor comparação :)
> Ah! Como sou tanso...
> Agora que eu percebi que esse tal de icc é para
> C++... O kernel do Linux nunca vai compilar com
> ele, > já que é todo em C e assembly (que são
> melhores que C++, diga-se de passagem)!
Cadu, acabei de compilar o Kernel 2.4.26 com o ICC. Todo compilador de C++ compila C.
Tive que alterar pequenas coisas no código. Ele não suporta essa expressão por exemplo, então você vai ter que arrumar:
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,1,66)
Vai dar um pau na hora de linkar, você tem que alterar um arquivo que chama "include/linux/brlock.h" e não deixar ele chamar a função "__br_lock_usage_bug()"
Foi só isso. Bootou mas ainda não vi nenhum speedup. Vi que o sistema de arquivos ReiserFS se comporta estranho. Quando voltei para o Kernel do GCC ele se limpou lixo no sistema de arquivos.
Fora isso parece funcionar bem. Meio arriscado pra ficar em produção, hehehe.
Fiquei /c uma dúvida agora, existe código especifico no kernel /p o GCC, então o kernel não segue o padrão ANSI C? ou seria o ICC que não segue ANSI C?
JCarlos: com certeza seguir apenas o padrão ansi, não segue, já que o Linux segue o padrão POSIX, que é um pouco mais extendido.
Este ganho de velocidade é apenas para os processadores Intel ou vale também para outros processadores da mesma arquitetura como o AMD?
Temos tbm o Visual C++ 2003 Toolkit da MS. Utilização free.
http://msdn.microsoft.com/visualc/vctoolkit2003/
Comentários desativados: Esta discussão é antiga e foi arquivada, não é mais possível enviar comentários adicionais.