||
Yambo是除BerkeleyGW外,另一个常用的多体微扰理论软件包。和BerkeleyGW不同,Yambo依赖的组件比较多,并且采用autotools控制编译过程,因此编译起来稍微麻烦一点。这篇博文以最新的4.3.2版为例,讲一下如何用最简单的方法,编译一份高效稳定的Yambo。
Yambo依赖的组件虽然多,但在编译过程中可以自动下载和安装。考虑到集群一般不能联网,在编译Yambo之前我们需要把这些组件全部下载下来。
下载过程很简单:首先准备一台能联网且安装了Linux系统的计算机,将源码解压;然后cd lib/archive切换到相应目录,再make -f Makefile.loc即可下载所有的依赖组件。下载完成后,将源码重新打包。
将打包后的源码上传至集群,解压后进入源码目录,输入./configure --help即可查看所有的编译选项。除了--prefix这种基本选项,剩下的选项可分为两类:启用/关闭特性和指定依赖组件的安装路径。第一类选项一般是--enable-xxxx/--disable-xxxx,第二类选项一般是--with-xxxx-xxxx=xxxx。在第一类选项中,重要的有这么几个:
--enable-dp Double-precision build. Default is no.
指定编译出的程序使用单精度浮点数还是双精度浮点数。因为GW/BSE计算非常耗内存,选择单精度会省点资源。默认为不启用,即使用单精度。
--enable-time-profile Extended timing profile of specific sections. Default is yes.
指定是否输出各部分计算耗时。默认开启。
--enable-uspp Enable Ultrasoft PP support
指定是否支持超软赝势。GW/BSE计算需要大量波函数,用超软赝势可以减小动能截断,降低内存占用。但据师兄反映,Yambo的对超软赝势的支持还处于试验阶段。因此不建议启用该选项。
--enable-memory-profile Extended Memory profile of specific sections
指定是否输出各部分计算内存占用,在评估能否算得动时很有用,死机了也能帮助判断是否由内存占用导致。建议开启。
--enable-options-check Enable the command line options check in driver.c. Default is yes.
指定是否检查命令行参数,默认开启。
--enable-open-mp Enable OpenMP support
指定是否开启openmp并行。openmp共享内存而MPI不共享内存,在GW/BSE这种内存吞噬者面前还是很有一定优势的。但我一般不开始这个选项,因为一旦忘记修改OMP_NUM_THREADS环境变量,MPI进程数*openmp线程数就会超过物理核数,非常麻烦。如果内存吃紧,又对并行计算比较了解,可以启用此选项。否则建议关闭此选项。
--enable-mpi Enable mpi parallelization . Default is yes.
指定是否开启MPI并行,默认开启。串行版Yambo没有使用价值。如果在启用MPI并行的同时启用openmp,则会混合并行,两者不冲突。
--enable-iotk Activate the IOTK support
指定是否启用QE输入/输出支持,也就是能否读取QE生成的数据。Yambo默认只能读取abinit的数据。如果要和QE联合使用,就需要开启此选项。
在这里强调一下,虽然Yambo的configure脚本也提供了--prefix选项,但如果真的设置了这个选项,编译的时候就会提示某几个文件找不到,应该是BUG。所以不要设置此选项。
因为我们使用Yambo内置的依赖组件,所以第二类选项用的不多,一般只会用到几个指定MKL和FFTW安装路径的选项。具体在下一部分详细讲解。
此外,Yambo编译过程中还涉及很多环境变量,这里挑几个重要的:
CC C compiler command #C语言编译器
CFLAGS C compiler flags #C语言编译选项
FC Fortran compiler command #Fortran90及之后版本编译器
FCFLAGS Fortran compiler flags #Fortran90及之后版本编译选项
F77 Fortran 77 compiler command #Fortran77编译器
FFLAGS Fortran 77 compiler flags #Fortran77编译选项
MPIFC Parallel Fortran compiler command #Fortran90及之后版本并行编译器
MPIF77 Parallel Fortran 77 compiler command #Fortran77并行编译器
MPICC Parallel C compiler command #C语言并行编译器
以下三个例子中,均假设已经通过Intel编译器提供的初始化脚本,完成了编译器和MKL的环境变量设置流程。对于基于FFTW的例子,还假设已经设置好了C_INCLUDE_PATH,LIBRARY_PATH和LD_LIBRARY_PATH等环境变量。关于如何设置这些环境变量,可以参考http://blog.sciencenet.cn/blog-2909108-1152044.html,这里不再赘述。
第一份是基于Intel编译器+MKL+OpenMPI的编译设置:
export CC=icc export FC=ifort export F77=ifort export MPICC=mpicc export MPIFC=mpif90 export MPIF77=mpif77 export CFLAGS=-O3 export FCFLAGS=-O3 export FFLAGS=-O3 ./configure \ --enable-memory-profile --disable-open-mp --enable-iotk \ --with-blas-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-lapack-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-blacs-libs="-lmkl_blacs_openmpi_lp64" \ --with-scalapack-libs="-lmkl_scalapack_lp64" \ --with-fft-libs="-mkl" \ --with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk"
因为已经设置好了MKL的环境变量,所以可以直接使用动态链接。FFT库使用MKL中提供的FFTW接口。
--with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk"
指定QE安装路径下iotk子目录所在路径,这里我们的QE安装路径为$HOME/soft/qe-6.2。配置完成后,configure脚本会输出如下的总结报告:
# # [VER] 4.3.2 r.134 # # - GENERAL CONFIGURATIONS - # # [SYS] linux@x86_64 # [SRC] /home/yhli/yambo-4.3.2 # [TGT] /home/yhli/yambo-4.3.2 # [BIN] /home/yhli/yambo-4.3.2/bin # [LIB] /home/yhli/yambo-4.3.2/lib/external # # [EDITOR] vim # [ MAKE ] make # # [-] Double precision # [X] Keep object files # [X] Run-Time timing profile # [X] Run-Time memory profile # # - SCRIPTS - # # [-] YDB: Yambo DataBase # [-] YAMBOpy: Yambo Python scripts # # - PARALLEL SUPPORT - # # [X] MPI # [-] OpenMP # # - LIBRARIES [E=external library; I?=internal library (c=to be compiled / f=found already compiled); X=system default; -=not used;] - # # > I/O: (NETCDF with large files support) # # [ E ] IOTK : /home/yhli/soft/qe-6.2/S3DE/iotk/src/libiotk.a (QE no-hdf5-support) # -I/home/yhli/soft/qe-6.2/S3DE/iotk/src # [ - ] ETSF_IO : # # [ Ic] NETCDF : /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/lib/libnetcdff.a /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/lib/libnetcdf.a -lm # -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/include -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/v3/serial/include # [ - ] HDF5 : # # # > MATH: (FFTW MKL) # # [ E ] FFT : -mkl # # [ E ] BLAS : -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # [ E ] LAPACK : -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # [ E ] SCALAPACK : -lmkl_scalapack_lp64 # [ E ] BLACS : -lmkl_blacs_openmpi_lp64 # [ - ] PETSC : # # [ - ] SLEPC : # # # > OTHERs # # [ Ic] LibXC : /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/lib/libxcf90.a /home/yhli/yambo-4.3.2/lib/external/intel/mpif90/lib/libxc.a # -I/home/yhli/yambo-4.3.2/lib/external/intel/mpif90/include # [ E ] MPI : -L/home/yhli/soft/openmpi-1.10.0/lib -lmpi # -I/home/yhli/soft/openmpi-1.10.0/include # # - COMPILERS - # # FC kind = intel # MPI kind= Open MPI v1.10, package: Open MPI yhli@n74 Distribution, ident: 1.10.0, repo rev: v1.10-dev-293-gf694355, Aug 24, 2015 # # [ CPP ] icc -E -ansi -D_MPI -D_FFTW -D_FFTW_OMP -D_SCALAPACK -D_TIMING # [ FPP ] fpp -free -P -D_MPI -D_FFTW -D_FFTW_OMP -D_SCALAPACK -D_TIMING # [ CC ] mpicc -O3 -D_C_US -D_FORTRAN_US # [ FC ] mpif90 -O3 # [ FCUF] -assume bscc -O0 -g # [ F77 ] mpif77 -O3 # [ F77U] -assume bscc -O0 -g # [Cmain] -nofor_main #
其中打了[X]号的表示启用了对应的特性,[-]表示未启用。
第二份是基于Intel编译器+MKL+IntelMPI的编译设置:
export CC=icc export FC=ifort export F77=ifort export MPICC=mpiicc export MPIFC=mpiifort export MPIF77=mpiifort export CFLAGS=-O3 export FCFLAGS=-O3 export FFLAGS=-O3 ./configure \ --enable-memory-profile --disable-open-mp --enable-iotk \ --with-blas-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-lapack-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-blacs-libs="-lmkl_blacs_intelmpi_lp64" \ --with-scalapack-libs="-lmkl_scalapack_lp64" \ --with-fft-libs="-mkl" \ --with-iotk-path="/opt/qe/6.3/S3DE/iotk"
第三份是基于Intel编译器+MKL+FFTW+OpenMPI的编译设置:
export CC=icc export FC=ifort export F77=ifort export MPICC=mpicc export MPIFC=mpif90 export MPIF77=mpif77 export CFLAGS=-O3 export FCFLAGS=-O3 export FFLAGS=-O3 ./configure \ --enable-memory-profile --disable-open-mp --enable-iotk \ --with-blas-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-lapack-libs="-lmkl_intel_lp64 -lmkl_sequential -lmkl_core" \ --with-blacs-libs="-lmkl_blacs_openmpi_lp64" \ --with-scalapack-libs="-lmkl_scalapack_lp64" \ --with-iotk-path="$HOME/soft/qe-6.2/S3DE/iotk" \ --with-fft-path="$HOME/soft/fftw-3.3.4"
配置完成后,输入make即可查看所有可编译的程序。输入make core即可编译接口程序a2y/e2y/p2y,主程序yambo和后处理程序ypp。做GW/BSE计算最常用的就是这几个程序。编译后的程序在源码的bin目录下面。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 15:08
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社