当前位置: 首页 > 工具软件 > siesta > 使用案例 >

siesta在Linux运行,并行编译SIESTA

慕容星晖
2023-12-01

【原创】并行编译SIESTA最近闲的无聊,在曙光集群上并行编译了SIESTA,把其中的过程和教训跟大家分享一下.

1.获得SIESTA

SIESTA对科研人员是可以免费使用的,因此可以在主页上注册,大概两个星期后管理员会通过审核,通知您可以使用SIESTA.然后就可以从上面下载到源文件,赝势文件等。

2.编译器安装

我这里使用的FORTRAN编译器是PGI7.0,并行使用MPI-1.2.7.

PGI的安装很友好,因此不做介绍。

接着使用PGI编译MPICH,先进行配置生成MAKEFILE文件具体是:

./configure -prefix=/your/mpich/directory -fc="pgf77 -Mx,119,0x200000" \

-f90="pgf90 -Mx,119,0x200000" \

-without-romio --without-mpe -opt=-O -rsh=ssh

然后进入你的安装目录,使用make完成安装,最好是测试下例子确认安装成功。

安装完之后将MPICH的BIN加入环境变量中。

3.安装数学库

并行编译SIESTA需要以下4个数学库BLAS,LAPACK,BLACS以及SCALAPACK,这些都可以从免费获得。对于BLAS和LAPACK可以使用优化过的MKL(INTEL处理器),ACML(AMD处理器),同样后者也可以从网上免费获得。SIESTA也能使用NETCDF数学库(这里没有使用)。

在这里我使用的ACML,BLACS以及SCALAPACK数学库,ACML的安装很友好,不过要下载对应好编译器的版本。这里主要介绍下BLACS和SCALAPCK的编译。

3.1BLACS的安装

从获得mpiblacs.gz,使用tar -zxvf mpiblacs.gz解压缩后进入BLACS目录,从BMAKES目录下拷贝出你对应系统系统的Bmake.X-X文件到上一目录的Bmake.inc对于我的系统使用的是

cp Bmake.MPI-LINUX ../Bmake.inc

然后修改Bmake.inc文件中相关内容

先修改安装目录 BTOPdir =/your/BLACS/directory

接着修改MPI目录MPIdir = /your/MPICH/directory

最重要的是将   INTFACE = -DAdd_ 这里设置成-DAdd_

然后设置   TRANSCOMM = -DUseMpich

最后将系统默认编译器改成PGI编译

F77            = pgf77

F77NO_OPTFLAGS =

F77FLAGS       = $(F77NO_OPTFLAGS) -O

F77LOADER      = $(F77)

F77LOADFLAGS   =

CC             = pgcc

CCFLAGS        = -O4

CCLOADER       = $(CC)

CCLOADFLAGS    =

完成修改之后使用make mpi进行安装,安装成功后就会在LIB目录下生成三个BLACS库文件。

(这里注意的是如果不使用-DAdd_以及PGI编译器,系统会在编译到最后一部(生成可执行文件是对数学库文件报错))。

3.2SCALAPACK安装

装好BLACS后就可以进行SCALAPACK的安装了

如同安装BLACS,下载SCALAPACK后解压缩,从子目录下拷贝出相应系统的SLmake.inc然后对里面制定MPICH,BLACS,BLAS,LAPACK数学库的相应位置的地方进行修改,指定到你所安装的MPICH,BLACS,BLAS,LAPACK数学库位置,如果BLAS,LAPACK使用的是MKL或者ACML的则指定相应文件夹下的相应文件,如我的是制定到/libacml.a。

同样最重要是的设置CDEFS         = -DAdd_ -DNO_IEEE $(USEMPI)

(这里主要要指定好BLACS库函数的位置,对于BLAS和LAPACK影响不大)

编译使用MPI进行

F77           = mpif77

CC            = mpicc

NOOPT         =

F77FLAGS      =  -O3 $(NOOPT)

CCFLAGS       = -O4

SRCFLAG       =

F77LOADER     = $(F77)

CCLOADER      = $(CC)

F77LOADFLAGS  =

CCLOADFLAGS   =

4.编译SIESTA

SIESTA编译同样先解压缩,然后进入Src目录,将/Src/Sys目录下对应的X-X.make拷贝到Src,并更改名字为arch.make,然后根据你具体的数学库地址和编译器名字修改arch.make.

由于时间关系这里我直接给出我自己的arch.make.给大家做个参考

更改完成后,make即可生成SIESTA文件,然后可以去TESTS目录下进行测试。

PS:

arch.make文件

#

# This file is part of the SIESTA package.

#

# Copyright (c) Fundacion General Universidad Autonoma de Madrid:

# E.Artacho, J.Gale, A.Garcia, J.Junquera, P.Ordejon, D.Sanchez-Portal

# and J.M.Soler, 1996-2006.

#

# Use of this software constitutes agreement with the full conditions

# given in the SIESTA license, as signed by all legitimate users.

#

SIESTA_ARCH=pgf90-mpich

#

FC=mpif90

FC_ASIS=$(FC)

#

FFLAGS= -O3 -fastsse -Mx,119,0x200000 -tp k8-64e

FFLAGS_DEBUG= -g -O0

RANLIB=echo

COMP_LIBS=dc_lapack.a

#

NETCDF_LIBS=         # /public/home/liang/libs/netcdf-4.0.1/lib/libnetcdf.a

NETCDF_INTERFACE=    # libnetcdf_f90.a

DEFS_CDF=            # -DCDF

#

MPI_INTERFACE=libmpi_f90.a

MPI_INCLUDE=/your/MPICH/directory/include

DEFS_MPI=-DMPI -DFC_HAVE_FLUSH -DFC_HAVE_ABORT

#

# There are (were?) some problems with command-line processing compatibility

# that forced the extraction of "pgi.aux" and "pgiarg" as independent

# libraries (details unfortunately lost)

#

BLAS_LIBS=/your/BLAS/directory/libblas.a

LAPACK_LIBS=/your/LAPACK/diretory/liblapack.a

BLACS_LIBS=/your/BLACS/LIB/blacsF77init_MPI-LINUX-0.a /your/BLACS/LIB/blacs_MPI-LINUX-0.a /your/BLACS/LIB/blacsF77init_MPI-LINUX-0.a

SCALAPACK_LIBS=/your/scalapack-1.8.0/libscalapack.a

LIBS=$(SCALAPACK_LIBS) $(BLACS_LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(NETCDF_LIBS) $(PGI_LIBS) $(PGI_LIBS)

SYS=cpu_time

DEFS= $(DEFS_CDF) $(DEFS_MPI)

#

#

# Important (at least for V5.0-1 of the pgf90 compiler...)

# Compile atom.f and electrostatic.f without optimization.

#

atom.o:

$(FC) -c $(FFLAGS_DEBUG) atom.f

#

electrostatic.o:

$(FC) -c $(FFLAGS_DEBUG) electrostatic.f

#

.F.o:

$(FC) -c $(FFLAGS) $(INCFLAGS)  $(DEFS) $<

.f.o:

$(FC) -c $(FFLAGS) $(INCFLAGS)   $<

.F90.o:

$(FC) -c $(FFLAGS) $(INCFLAGS)  $(DEFS) $<

.f90.o:

$(FC) -c $(FFLAGS) $(INCFLAGS)   $<

#

 类似资料: