Dapper em um AMD64-X2 - Compiladores Intel
Hoje vou instalar os compiladores C e FORTRAN da Intel. Até o lançamento do gfortran, o ifc da Intel era o único compilador de FORTRAN 90 disponível para Linux. Para aqueles que acham que FORTRAN é linguagem morta, eu sugiro que vejam as comparações em Computer Language Shootout. FORTRAN só perde para C. Vejam FORTRAN contra Perl, por exemplo. É praticamente imbatível em cálculo numérico (nossos programas aqui rodam por dias e até meses).
Vamos ao que interessa: vá à pagina da Intel de compiladores linux e preencha os formulários para uso não comercial. Você vai receber uma licença por email e instruções para baixar os pacotes. Descompacte o arquivo tar.gz (l_cc_c_9.0.030.tar.gz, no meu caso). Vá para o diretório criado e rode o alien (apt-get install alien) para converter os rpms (i386 ou em64t, dependendo da sua arquitetura). Rode o comando abaixo, em apenas uma linha:
$ fakeroot alien -d intel-icce9-9.0-030.em64t.rpm intel-isubhe9-9.0-030.em64t.rpm intel-iidbe9-9.0-035.em64t.rpm intel-icce9-9.0-030.em64t.rpm
O processo demora um pouco.. Infelizmente o alien não faz todo o trabalho. Vamos ajeitar os pacotes:
$ mkdir tmp
$ dpkg-deb -e intel-icce9_9.0-31_amd64.deb tmp/DEBIAN
$ dpkg-deb -x intel-icce9_9.0-31_amd64.deb tmp
O -e extrai os arquivos de controle e o -x extrai os arquivos do pacote. O DINSTALL é para mudar o diretório de instalação (vai ficar no /opt/intel) . Procurando o INSTALLDIR que está erradamente setado nos scripts:
$ grep \<INSTALLDIR\> tmp/opt/intel/cce/9.0/bin/*
Vemos que a expressão aparece nos arquivos, icc, icpc, iccvars.sh e iccvars.csh. Vamos ao sed (pode usar o vi, se preferir)
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icc
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icc*sh
$ sed -i 's/<INSTALLDIR>/\/opt\/intel\/cce\/9.0/g' tmp/opt/intel/cce/9.0/bin/icpc
Quase lá. Agora você tem duas opções: ou faz um pacote para distribuir ou um só para você. A diferença é se você quer incluir a licença que recebeu no email no pacote, ou não. Se preferir distribuir basta
$ dpkg -b tmp icc_9.0.30_1.amd64.deb
ou outro nome que queira dar ao pacote -- eu mudei para icc, pois foi o nome que dei na versão anterior: poderia mudar o Provides no DEBIAN/control. Se preferir copie o arquivo de licença para tmp/opt/intel/cce/9.0/licenses, antes de reconstruir o pacote. O pacote com os headers também tem um bugzinho: tem o uninstall que existe no pacote do icc. Assim, vamos fazer
$ dpkg -e intel-isubhe9_9.0-31_amd64.deb tmp/DEBIAN
$ dpkg -x intel-isubhe9_9.0-31_amd64.deb tmp
$ rm tmp/opt/intel/cce/9.0/bin/uninstall.sh
$ dpkg -b tmp intel-isubhe9_9.0-31_amd64.deb
Instalando os pacotes
$ sudo dpkg -i icc_9.0.30_1.amd64.deb
$ sudo dpkg -i intel-iidbe9_9.0-36_amd64.deb
$ sudo dpkg -i intel-isubhe9_9.0-31_amd64.deb
O procedimento para a criação do pacote FORTRAN é idêntico e fica como exercício para o leitor ;)
Para executar o compilador é necessário atualizar as variáveis de ambiente, rodando
$ source /opt/intel/cce/9.0/bin/iccvars.sh
Esta linha pode ser adicionada ao seu .bashrc.
Problemas:
icc: error: could not find linux directory based on g++
Solução: export LC_ALL=C
Como o Renato apontou nos comentários, o g++ é dependência dos pacotes, embora não relatado pelo alien. Se quiser fazer o serviço bem limpo, inclua build-essential e g++ no Depends: do arquivo tmp/DEBIAN/control antes de reconstruir o pacote.
19 Comentários:
Na verdade há outro compilador fortran 90 pra linux, ainda em desenvolvimento mas plenamente funcional:
http://www.g95.org
Já compilei várias aplicações com ele, inclusive o MPICH 1.2.7, e funciona muito bem.
Sim, já instalei este nos 32 bits e em um Ubuntu Hoary. O que me deixou meio desencantado é que vi uma comparação de performance dele com o gfortran,e o g95 ficou significativamente atrás:
http://www.polyhedron.com/pb05/linux/f90bench_p4.html
Entao eu tenho que refazer os meus benchmarks. Na ultima vez que eu comparei o gfortran com o g95, usando programas meus, o g95 ganhou com boa margem.
Olá Thadeu. Segui as intruções para instalar o ifort mas algo não funcionou, pois obtenho isto quando tento executar o ifort:
renato@snoopy:~$ ifort -what
bash: ifort: comando não encontrado
Você poderia me dar uma idéia do que posso fazer para deixá-lo funcionando?
Oi Renato
você rodou o
"source opt/intel/ifc/9.0/bin/ifcvars.sh "
?
Este script atualiza as variáveis de ambiente para o ifort.
Rodei e coloquei no .bashrc. Ocorreu-me o seguinte: ao mandar executar diretamente o ifort ele traz como resultado que INSTALLDIR está errado, ou coisa que o valha (não estou no computador agora). Talvez eu tenha cometido algum erro ao digitar os comandos com o sed. A propósito, qual a função daquele 'g', no final da linha de comando?
Como devo proceder para fazer a troca manual? É apenas colocar o caminho da instalação no lugar da variável INSTALLDIR?
Desculpe-me pelo número de perguntas, mas apesar de ser usuério linux a bom tempo, sou novato no debian/ubuntu.
O mais provável é que tenha um erro de digitação: o ideal seria o copy-and-paste do sed. Talvez o blog tenh quebrado as linhas.
O g no final do sed é para trocar todas as ocorrências, se você esqueceu dele, o sed só trocará a primeira ocorrência. Edite os arquivos e veja se algum INSTALLDIR permaneceu no arquivo.
QQ. coisa é só comentar, não se acanhe. Para isto que fizemos o blog: servir para a posteridade :)
[]s
Refiz todo o processo. A variável INSTALLDIR foi modificada, criei o .deb e instalei. Executei o source e obtenho a mesma resposta: ifort comando não encontrado.
Não funciona o man também.
Alguma sugestão?
Oi Renato,
acho que tem um bug aí :)
Me manda a saída dos comandos
echo $PATH
echo $LD_LIBRARY_PATH
echo $MAN_PATH
depois que você roda o
source /opt/intel/fce/9.0/bin/ifortvars.sh
Se aparecerem < ou > na saída dos comandos então tem que consertar o ifc, ifort e ifortvars.sh.
Vamos apenas confirmar se é isto.
[]s
Só para conferir
$ source /opt/intel/cce/9.0/bin/iccvars.sh
(substitua pelo fortran)
$ echo $PATH
$ echo $LD_LIBRARY_PATH
$ echo $MANPATH
renato@snoopy:~$ echo $PATH
=/opt/intel/fc/9.0=/bin:=/opt/intel/fc/9.0=/bin:=INSTALLDIR=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
renato@snoopy:~$ echo $LD_LIBRARY_PATH
=/opt/intel/fc/9.0=/lib:=/opt/intel/fc/9.0=/lib:=INSTALLDIR=/lib
renato@snoopy:~$ echo $MANPATH
=/opt/intel/fc/9.0=/man:=/opt/intel/fc/9.0=/man:=INSTALLDIR=/man:/usr/local/man:/usr/local/share/man:/usr/share/man
renato@snoopy:~$
substitui o < e o > por =, senão não passa no blog. Acho que taí o problema.
Sim é isto aí. Edite então os arquivos ifc, ifort e ifortvars.sh no /opt/intel/fce/9.0/bin/ e tudo deve funcionar. Obrigado por achar o bug :)
Vou acertar no blog...
Thadeu, estes arquivos não tem nenhuma ocorrência do INSTALLDIR. Devem ser outros, ou um dos executáveis, o que seria pior.
Não é o INSTALLDIR, são as sinais < e > . Por exemplo, no /opt/intel/fce/9.0/bin/ifort você deve ter
#!/bin/sh
if [ -z "$INTEL_LICENSE_FILE" ]
then
INTEL_LICENSE_FILE="< /opt/intel/fce/9.0 >/licenses
certo ?
Remova todos os < e > que encontrar naqueles arquivos que citei ;)
[]s
Bingo! Caramba, e eu não vi que era justamente o < e >!
Agora está ok! Muito obrigado, Thadeu.
Deu zebra. Testei o help e estava ok. Mas ao compilar um programa obtive:
renato@snoopy:~/programas$ ifort -o teste.out int_sin.f90
ifort: error: could not find directory in which g++ resides
este é fácil:
sudo aptitude install g++
O alien não capturou as dependências corretamente. Vou corrigir no post.
Agora sim! Eu fui pelo sinaptic e ele não encontrou o g++. O gcc estava instalado e quando dei um apt-cache search g++ apareceu uns 200 arquivos!
O g++ não seria uma dependência do gcc?
Parabéns, o site ficou com um aspecto melhor.
Abraços,
Renato
Obrigado por ter apontado os erros. O g++ é o compilador C++. O gcc é uma das dependências dele, mas não o contrário.
Continue visitando o site e colaborando. O Toninho é que o especialista em FORTRAN, aqui do grupo...
Postar um comentário
Assinar Postar comentários [Atom]
<< Página inicial