Compilando LAPACK e BLAS com ifort

Este tutorial é muito simples e mostra como compilar as bibliotecas de Álgebra Linear BLAS e LAPACK do netlib (http://www.netlib.org) utilizando os compiladores C e fortran da Intel (icc e ifort).

Tanto para Linux (Ubuntu 11.04) quanto no OS X (Mountain Lion), os procedimentos são os mesmos:

$ wget -c http://www.netlib.org/lapack/lapack-3.4.2.tgz
$ tar -zxvf lapack-3.4.2.tgz
$ cd lapack-3.4.2
$ cp INSTALL/make.inc.ifort ./make.inc
$ make lapacklib
$ make blaslib

Como resultado da compilação, duas bibliotecas (libs) deverão ser criadas:

  • liblapack.a
  • librefblas.a

Dependendo da sua aplicação, pode ser necessário atribuir algum valor para a variável “LAPACK_PATH” indicando o caminho das libs que foram geradas. Se a compilação das libs foi feita em /home/user/lapack-3.4.2, então, pode-se fazer:

$ export LAPACK_PATH=/home/user/lapack-3.4.2

Este comando pode ser incluído no seu ~/.bashrc ou mesmo em /etc/bash.bashrc.

Referência:

Catastrophic error: could not set locale “” to allow processing of multibyte characters

As mensagem de erro de compilação dos compiladores da Intel são bastante interessantes: “Catastrophic error…”, ou “Erro catastrófico…” 🙂

Esse erro apareceu quando executei o comando “make” para compilar um código fonte em uma máquina Linux (Ubuntu 11.04) utilizando os compiladores da Intel (ifort/icc). Esse erro apareceu porque o Makefile não conseguiu determinar qual é o “idioma” do terminal, muito embora a variável “LANG” estivesse ajustada para “en_US.UTF-8” (LANG=en_US.UTF-8).

A solução foi ajustar mais uma variável de localização, a “LC_ALL” com o mesmo valor de “LANG”, ou seja:

$ export LC_ALL=en_US.UTF-8

Você pode colocar no seu .bashrc ou ainda em /etc/bash.bashrc, e problema resolvido!

Referência:

 

Instalando o MPICH2 pelo HomeBrew compilado com o Ifort

Uma das vantagens dos gerenciadores de pacotes disponíveis para o Mac OS X (e.g., Fink, HomeBrew, MacPorts) está na compilação de todos os pacotes, gerando executáveis rápidos e 100% compatíveis com as instruções do processador e com o ambiente de execução. Por outro lado, esta vantagem é contrabalançada pelas diversas opções disponíveis para o ambiente de compilação (flags de compilação). O HomeBrew é um desses gerenciadores e você pode especificar algumas opções de compilação, por exemplo, o compilador fortran a ser utilizado na compilação de um pacote. Um caso interessante é a compilação do pacote MPICH2. Se você compilar com o gfortran, então todos os executáveis gerados na compilação do MPICH2 serão lincados com as bibliotecas do gcc e com os headers do gfortran. Isso seria um padrão para o caso de haver apenas o gfortran como compilador fortran na máquina. Mas você pode querer compilar o MPICH2 com o ifort, o compilador fortan da Intel ou mesmo com o g95 ou pgi.

No linux, esse tipo de instalação seria mais ou menos assim, considerando-se o bash como shell e o ifort como compilador fortran:

$ export FC=ifort ICC=icc
$ make
$ make check
$ sudo make install

No caso da instalação do MPICH2 pelo HomeBrew, utilizando-se o ifort como compilador padrão, as instruções são semelhantes:

$ export FC=ifort ICC=icc CPP=icc
$ brew install mpich2 --default-fortran-flags

Só isso. O modificador “–default-fortran-flags” ajusta as variáveis FCFLAGS e FFLAGS (que são variáveis que otimizam a compilação de um código fortran) com valores compatíveis com um compilador nos padrões do gcc, como é o caso do ifort e o icc.

Erro: cannot open source file “asm/param.h”

Quando fui compilar o MPICH2 no meu notebook, ao rodar o comando make, me deparei com a seguinte mensagem de erro:

/usr/include/linux/param.h(4): catastrophic error: cannot open source file "asm/param.h"
  #include <asm/param.h>
                        ^

Isso aconteceu porque a versão da asm* instalada no meu Ubuntu 11.04 não era a mesma que o MPICH2 estava procurando. Para resolver este problema, basta criar um link simbólico do asm-generic para o asm:

sudo ln -s /usr/include/asm-generic /usr/include/asm

Depois, basta rodar o cmando make novamente para recompilar o MPICH2.

*ASM:

Procurando sobre o ASM, decobri que ele é um conjunto de funções geralmente escrito em linguagem Assembly (no linux utilizado em linguagem C) para facilitar a portabilidade do kernel para outros tipos de sistemas/plataformas.

Referências:

Erro: cannot open source file “asm/errno.h”

Se você está tentando compilar algum programa em linguagem C ou que precisa ler algum reader do sistema escrito em linguagem C e o compilador fortran da Intel (ifort) não consegue encontrar o header correto (no caso errno.h) e recebe o seguinte erro:

catastrophic error: cannot open source file "asm/errno.h"

Pode ser que você não tenha as bibliotecas extras do GCC instaladas por completo no seu sistema. Para resolver, basta instalar o pacote gcc-multilib:

$ sudo apt-get install gcc-multilib

Referência: http://secure-software.intel.com/en-us/forums/showpost.php?p=149314