13. BLAS
BLAS (Basic Linear Algebra) - Álgebra Linear Básica. É uma biblioteca e um conjunto de sub-rotinas de baixo nível do kernel, que executam operações de álgebra linear comuns, tais como cópia, dimensionamento do vetor, produtos, combinações lineares e multiplicação de matrizes.
No servidor e nós:
# cd /opt
# wget http://netlib.org/blas/blas.tgz
# tar -xzf blas.tgz
# cd BLAS
Entre no arquivo:
# vim make.inc
E altere/acrescente os seguintes parâmetros:
FORTRAN = /opt/mpich/bin/mpif90
OPTS = -O3
DRVOPTS = $(OPTS)
NOOPT =
LOADER = /opt/mpich/bin/mpif90
LOADOPTS =
Salvar e sair.
# make # Essa compilação é rápida
# ls
E verifique se foi criado o arquivo
blas_LINUX.a, esse é o arquivo a ser utilizado. Vamos criar uma pasta chamada BLAS em
/otp/mpich/lib e copiar o arquivo para ela:
# cd /opt/mpich/lib
# mkdir BLAS
# cd BLAS
# cp -r /opt/BLAS/blas_LINUX.a . # O ponto separado ao final indica que o arquivo será copiado para o local no qual estamos
# ls
E verifique se o arquivo foi copiado.
Em caso de erro na compilação do BLAS, execute
make clean e refaça o procedimento. Ou apague a pasta, descompacte-a de novo e refaça do zero.
14. LAPACK
É uma biblioteca em Fortran 77 para álgebra linear, constituída de rotinas para resolução de sistemas de equações lineares, problemas de mínimos quadrados, de autovalores e autovetores.
Volte ao diretório
/opt e vamos instalar a biblioteca LAPACK. No servidor e nós:
# cd /opt
# wget http://netlib.org/lapack/lapack.tgz
# tar -xzf lapack.tgz
# ls
Deverá ter sido criada a pasta descompactada
lapack-3.4.2.
# cd lapack-3.4.2
Vamos copiar e editar o arquivo necessário:
# cp make.inc.example make.inc
Entre no arquivo:
# vim make.inc
E altere/acrescente os seguintes parâmetros:
FORTRAN = /opt/mpich/bin/mpif90
OPTS = -O2
DRVOPTS = $(OPTS)
NOOPT = -O0
LOADER = /opt/mpich/bin/mpif90
...
TIMER = EXT_ETIME
...
BLASLIB = /opt/mpich/lib/BLAS/blas_LINUX.a
Salve e saia do arquivo.
# make # Essa compilação irá demorar um pouco
# ls
Deverá ter criado arquivo
liblapack.a. Para apagar, em caso de erro na compilação, apague a pasta, descompacte-a de novo e refaça do zero.
15. BLACS
O projeto
BLACS (Basic Linear Algebra Communication Subprograms), tem o propósito de criar uma interface de passagem de mensagens orientada à álgebra linear, que pode ser implementada eficientemente e uniformemente através de uma ampla gama de plataformas de memória distribuída.
No servidor e nós. Volte ao diretório
/opt:
# cd /opt
# wget http://www.netlib.org/blacs/mpiblacs.tgz
# wget http://www.netlib.org/blacs/mpiblacs-patch03.tgz
# tar -xzf mpiblacs.tgz
# tar -xzf mpiblacs-patch03.tgz # Ao descompactar o pacth será copiado automaticamente para a pasta BLACS
# cd BLACS
# cp BMAKES/Bmake.MPI-LINUX ./Bmake.inc
# ls
Entre no arquivo criado:
# vim Bmake.inc
E altere/acrescente os seguintes parâmetros:
BTOPdir = /opt/BLACS
MPIdir = /opt/mpich
...
SYSINC =
...
INTFACE = -DAdd_
...
TRANSCOMM = -DUseMpich
...
F77 = /opt/mpich/bin/mpif90
...
CC = /opt/mpich/bin/mpicc
CCFLAGS = -O3
Salve e saia do arquivo.
# make mpi # Não irá demorar
16. ScaLAPACK
É uma biblioteca de rotinas de alto desempenho, para álgebra linear baseada no LAPACK e utilizada em computadores com arquitetura MIMD de memória distribuída por passagem de mensagens e estações de trabalho, que suportam as APIs MPI e/ou PVM.
No servidor e nos nós. Volte ao diretório
/opt.
# wget http://www.netlib.org/scalapack/scalapack.tgz
# tar -xzf scalapack.tgz
# cd scalapack-2.0.2
# ls
# cp SLmake.inc.example SLmake.inc
Entre no arquivo:
# vim SLmake.inc
E altere/acrescente os seguintes parâmetros:
home = /opt/scalapack-2.0.2
CDEFS = -DAdd_ -DNO_IEEE $(USEMPI)
...
FC = /opt/mpich/bin/mpif90
CC = /opt/mpich/bin/mpicc
...
BLASLIB = /opt/mpich/lib/BLAS/blas_LINUX.a
LAPACKLIB = /opt/lapack-3.4.2/liblapack.a
BLACSLIB = /opt/BLACS/LIB/blacsF77init_MPI-LINUX-0.a
LIBS = $(LAPACKLIB) $(BLASLIB) $(BLACSLIB)
Salve e saia do arquivo.
# make # Irá demorar um pouco
Será criado arquivo
libscalapack.a.
# ls
Para apagar, faça:
# make clean
# rm libscalapack.a
Ou, remova a pasta
scalapack-2.0.2, descompacte-a e refaça do zero.
17. HPL
O
HPL é um pacote de software que resolve um sistema aritmético (aleatório) de densidade linear de precisão dupla (64 bits) em computadores de memória distribuída. É uma implementação livremente disponível do projeto
High Performance Computing Benchmark Linpack.
No servidor e nós. Volte ao diretório
/opt.
# wget http://www.netlib.org/benchmark/hpl/hpl-2.1.tar.gz
# tar -vzxf hpl-2.1.tar.gz
# mv hpl-2.1 hpl
# cd hpl
Copiando o arquivo de configuração. Dependendo da sua arquitetura, você copiar/alterar o arquivo
Make.Linux_PII_CBLAS ou
Make.Linux_PII_FBLAS.
Nessa configuração aqui apresentada, foi utilizado o arquivo
Make.Linux_PII_FBLAS, pois o arquivo
Make.Linux_PII_CBLAS apresentou problemas.
# cp /opt/hpl/setup/Make.Linux_PII_FBLAS Make.Linux_PII
Entre no arquivo:
# vim Make.Linux_PII
E altere/acrescente os seguintes parâmetros:
ARCH = Linux_PII
...
TOPdir = /opt/hpl
...
MPdir = /opt/mpich
...
#LAdir = $(HOME)/netlib/ARCHIVES/Linux_PII
LAinc =
LAlib = /opt/mpich/lib/BLAS/blas_LINUX.a
...
HPL_OPTS = -DHPL_COPY_L -DHPL_DETAILED_TIMING
...
CC = /opt/mpich/bin/mpicc
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall
...
LINKER = /opt/mpich/bin/mpif90
Salve e saia do arquivo.
Compilando:
# make arch=Linux_PII
Testando:
# cd /opt/hpl/bin/Linux_PII
# mpirun -np 7 -hostfile /opt/hostfile ./xhpl
Veja imagem com a saída do comando acima nas conclusões, ao final do artigo.
18. SIESTA
O
SIESTA (Spanish Initiative for Electronic Simulations with Thousands of Atoms), é um método, uma implementação de programa de computador para realizar cálculos eficientes de estrutura eletrônica
ab initio e simulações de dinâmica molecular de moléculas e sólidos.
A eficiência do SIESTA deriva do uso de conjuntos de bases estritamente localizadas e da aplicação de algoritmos de escalonamento linear, que podem ser aplicados a sistemas adequados.
Uma característica muito importante do código, é que sua precisão e seu custo podem ser sintonizados em uma ampla gama, a partir de cálculos rápidos preliminares para simulações de alta precisão combinando a qualidade de outras abordagens, como plane-wave e métodos de elétrons.
O SIESTA possui as bibliotecas BLAS e LAPACK nativamente, porém, vamos utilizar as bibliotecas que instalamos anteriormente.
Como o SIESTA é um programa que utilizará o MPI, podemos instalá-lo somente no servidor, mas, para isso, devemos ter o NFS ou o PVFS2 bem configurados, pois serão eles que compartilharão os arquivos utilizados na execução.
Pode-se não utilizar NFS e nem PVFS2, mas, para tanto, deve-se instalar o SIESTA (ou qualquer outro programa a ser utilizado) no servidor e nos nós.
Volte ao diretório
/opt.
# wget http://departments.icmab.es/leem/siesta/CodeAccess/Code/siesta-3.2-pl3.tgz
# tar -xzf siesta-3.2-pl3.tgz
# cd siesta-3.2-pl3/Obj
# sh ../Src/obj_setup.sh
# ../Src/configure --enable-mpi --enable-debug --enable-fast --with-blas=/opt/mpich/lib/BLAS/blas_LINUX.a --with-lapack=/opt/lapack-3.4.2/liblapack.a --with-blacs="/opt/BLACS/LIB/blacsF77init_MPI-LINUX-0.a /opt/BLACS/LIB/blacsCinit_MPI-LINUX-0.a /opt/BLACS/LIB/blacs_MPI-LINUX-0.a" --with-scalapack=/opt/scalapack-2.0.2/libscalapack.a
Configurando o arquivo
arch.make:
# vim arch.make
FPP_OUTPUT=
FC=/opt/mpich/bin/mpif90 # Editar essa linha deixando-a assim
RANLIB=ranlib
# make
Será criado, entre outros, o arquivo executável
siesta. Vamos copiá-lo para o diretório
/opt para facilitar a execução:
# cp siesta /opt/siesta
Agora, para chamar o SIESTA (estando na mesma pasta onde está o arquivo
.fdf e o
.psf), basta digitar:
# /opt/siesta < arquivo.fdf | tee arquivo.out
Para executar no cluster:
# mpirun -hostfile /opt/hostfile -n 7 /opt/siesta < /home/kluster/arquivo.fdf | tee arquivo.out