4

Abacus编译&快速上手

 2 years ago
source link: https://cndaqiang.github.io/2021/04/20/abacus/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本文为自学笔记, 仅供参考, 正确的安装和使用方法请参考ABACUS的官方网站.

ABACUS

安装编译器

Intel® oneAPI Toolkits(Intel Parallel Studio XE的代替品)安装使用

SSLAB上加载编译参数

module load mpi/intelmpi/2017.4.239
module load compiler/intel/intel-compiler-2017.5.239

注意

ABACUS使用下面elpa的这些函数,而这些函数在elpa-2016.05.004编译的库中还有,
而在elpa-2020.11.001中这些库已经没有或者调用方式发生了变化,如图
因此我们需要使用elpa-2016.05.004
Intel® oneAPI以及intel-compiler-2019u3编译elpa-2016.05.004会报错(本文最后给出错误解决方案),intel-compiler-2017.5.239可以编译通过elpa-2016.05.004

  • elpa_cholesky_complex
  • elpa_cholesky_real
  • elpa_get_communicators
  • elpa_invert_trm_complex
  • elpa_invert_trm_real
  • elpa_solve_evp_complex_1stage
  • elpa_solve_evp_complex_2stage
  • elpa_solve_evp_real_1stage
  • elpa_solve_evp_real_2stage
  • get_elpa_communicators
mkdir -p ~/code/intel
cd ~/code/intel
ROOT=$PWD
mkdir $ROOT/source

###fftw3
cd $ROOT/source
wget https://cndaqiang.gitee.io/packages//mirrors/fftw/fftw-3.3.4.tar.gz
tar xzvf fftw-3.3.4.tar.gz
cd fftw-3.3.4
./configure --prefix=$ROOT/fftw-3.3.4 CC=icc  MPICC=mpiicc --enable-mpi
make  install -j20

###boost
cd $ROOT/source
wget https://cndaqiang.gitee.io/packages//mirrors/boost/boost_1_66_0.tar.bz2
tar --bzip2 -xf boost_1_66_0.tar.bz2
cd boost_1_66_0/
./bootstrap.sh --prefix=$ROOT/boost_1_66_0 --with-toolset=intel-linux
./b2 install -j20


###elpa
TAG=2016.05.004
ROOT=~/code/intel
cd $ROOT/source
if [ ! -f elpa-$TAG.tar.gz ]
then
wget https://elpa.mpcdf.mpg.de/software/tarball-archive/Releases/$TAG/elpa-$TAG.tar.gz
fi
rm -rf elpa-$TAG
rm -rf $ROOT/elpa-$TAG
tar xzvf elpa-$TAG.tar.gz
cd elpa-$TAG
MKL_HOME=$MKLROOT
if [ ! -f configure ]
then
./autogen.sh
fi

rm -rf build 
mkdir build
cd build

../configure --prefix=$ROOT/elpa-$TAG  CC=mpiicc CXX=mpiicpc FC=mpiifort   FCFLAGS="-mkl=cluster" 
#使用 FCFLAGS="-mkl=cluster" 或者下面的方式定义SCALAPACK都是可以的
#  SCALAPACK_LDFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -Wl,-rpath,$MKL_HOME/lib/intel64" \
#  SCALAPACK_FCFLAGS="-L$MKL_HOME/lib/intel64 -lmkl_scalapack_lp64 -lmkl_intel_lp64 -lmkl_sequential  -lmkl_core -lmkl_blacs_intelmpi_lp64 -lpthread -lm -I$MKL_HOME/include/intel64/lp64" \
#--enable-openmp
make install -j20

#cd ~/code/abacus/ABACUS_v2.1.0/source/

cd $ROOT
if [ ! -f ABACUS_v2.1.0.tar.gz ]
then
wget https://abacus.ustc.edu.cn/uploadfile/ABACUS_v2.1.0.tar.gz
fi
rm -rf ABACUS_v2.1.0
tar xzvf ABACUS_v2.1.0.tar.gz
cd ABACUS/source

cat > Makefile.vars << EOF
CPLUSPLUS      = icpc
# C++ compiler
CPLUSPLUS_MPI  = mpiicpc
# intel mpi or mpich
FORTRAN       = ifort
# Fortran compiler
LAPACK_DIR = $MKLROOT
# intel mkl
FFTW_DIR       = $ROOT/fftw-3.3.4
# lib fftw
BOOST_DIR      = $ROOT/boost_1_66_0
# lib boost
ELPA_DIR = $ROOT/elpa-$TAG
# lib elpa
EOF
make

#注意在上面的内容中,FFTW_DIR = $ROOT/fftw-3.3.4等后面不能有任何空格,如错误的FFTW_DIR = $ROOT/fftw-3.3.4[空格]

(python37) cndaqiang@mommint:~/work/abacus/learn-20210421$ cp -r ~/code/abacus/ABACUS_v2.1.0/examples/01a_Si_diamond_pw_scf .
(python37) cndaqiang@mommint:~/work/abacus/learn-20210421$ cd 01a_Si_diamond_pw_scf
(python37) cndaqiang@mommint:~/work/abacus/learn-20210421/01a_Si_diamond_pw_scf$ mpirun -np 10 ABACUS.mpi.2.1.0 | tee result
 *********************************************************
 *                                                       *
 *                  WELCOME TO ABACUS                    *
 *                                                       *
 *            'Atomic-orbital Based Ab-initio            *
 *                  Computation at UStc'                 *
 *                                                       *
 *          Website: http://abacus.ustc.edu.cn/          *
 *                                                       *
 *********************************************************
 Wed Apr 21 20:49:47 2021
 MAKE THE DIR         : OUT.ABACUS/
 DONE(0.0328901  SEC) : SETUP UNITCELL
 DONE(0.0689782  SEC) : SYMMETRY
 DONE(0.069421   SEC) : INIT K-POINTS
 ---------------------------------------------------------
 This calculation is self-consistent
 ---------------------------------------------------------
 SPIN    KPOINTS         PROCESSORS
 1       8               10
 ---------------------------------------------------------
 Use plane wave basis
 ---------------------------------------------------------
 ELEMENT NATOM       XC
 Si      2           PZ-LDA
 ---------------------------------------------------------
 Initial plane wave basis and FFT box
 ---------------------------------------------------------
 DONE(0.161176   SEC) : INIT PLANEWAVE
 UNIFORM GRID DIM     : 36 * 36 * 36
 UNIFORM GRID DIM(BIG): 36 * 36 * 36
 MEMORY FOR PSI (MB)  : 0.0820312
 DONE(0.162648   SEC) : LOCAL POTENTIAL
 DONE(0.172807   SEC) : NON-LOCAL POTENTIAL
 START POTENTIAL      : atomic
 DONE(0.1748     SEC) : INIT POTENTIAL
 DONE(0.22581    SEC) : INIT BASIS
 -------------------------------------------
 SELF-CONSISTENT :
 -------------------------------------------
 ITER   ETOT(eV)       EDIFF(eV)      DRHO2      CG_ITER    TIME(S)
 CG1    -2.192279e+02  0.000000e+00   6.928e-02  3.000e+00  3.369e-02
 CG2    -2.154958e+02  3.732172e+00   5.745e-03  2.750e+00  3.172e-02
 CG3    -2.155043e+02  -8.536782e-03  2.622e-05  2.406e+00  2.994e-02
 CG4    -2.155047e+02  -3.698259e-04  5.403e-07  3.875e+00  3.880e-02
 CG5    -2.155047e+02  -1.855886e-06  1.931e-08  2.875e+00  3.231e-02
 CG6    -2.155047e+02  -7.198559e-08  1.776e-10  2.969e+00  3.263e-02

  |CLASS_NAME---------|NAME---------------|TIME(Sec)-----|CALLS----|AVG------|PER%-------
 A DC_Driv             solve_eachf         0.28           1         0.28      63        %
 B Run_Frag            frag_pw_line        0.28           1         0.28      63        %
 X FFT                 FFT3D               0.15           1876      8.2e-05   35        %
 H Hamilt_PW           h_psi               0.15           828       0.00018   34        %
 C Ions                opt_ions_pw         0.21           1         0.21      49        %
 D electrons           self_consistent     0.21           1         0.21      49        %
 E electrons           c_bands             0.15           6         0.025     35        %
 F Hamilt              diago               0.15           48        0.0031    34        %
 G Diago_CG            diag                0.11           48        0.0023    25        %
 ----------------------------------------------------------------------------------------

 START  Time  : Wed Apr 21 20:49:47 2021
 FINISH Time  : Wed Apr 21 20:49:47 2021
 TOTAL  Time  : 0
 SEE INFORMATION IN : OUT.ABACUS/

输入和输出

(python37) cndaqiang@mommint:~/work/abacus/learn-20210421/01a_Si_diamond_pw_scf$ tree
.
├── INPUT
├── KPT
├── OUT.ABACUS
│   ├── INPUT
│   ├── istate.info
│   ├── running_scf.log
│   ├── Si
│   │   ├── Si.NONLOCAL
│   │   ├── Si-P.ORBITAL
│   │   ├── Si-S.ORBITAL
│   │   └── v_loc_g.dat
│   ├── STRU_READIN_ADJUST.cif
│   └── warning.log
├── README
├── result
├── Si.pz-vbc.UPF
└── STRU

Intel® oneAPI以及intel-compiler-2019u3编译elpa-2016.05.004报错解决

这里是以--enable-openmp版本的报错解决,普通版本的解决方式一致. 这里记录解决问题的过程

TAG=2016.05.004
ROOT=~/code/intel
cd $ROOT/source
if [ ! -f elpa-$TAG.tar.gz ]
then
wget https://elpa.mpcdf.mpg.de/software/tarball-archive/Releases/$TAG/elpa-$TAG.tar.gz
fi
rm -rf elpa-$TAG
rm -rf $ROOT/elpa-$TAG
tar xzvf elpa-$TAG.tar.gz
cd elpa-$TAG
MKL_HOME=$MKLROOT
if [ ! -f configure ]
then
./autogen.sh
fi

rm -rf build 
mkdir build
cd build

../configure --prefix=$ROOT/elpa-$TAG  CC=mpiicc CXX=mpiicpc FC=mpiifort  FCFLAGS="-mkl=cluster" --enable-openmp

make install -j20

出现报错,使用make V=1查看具体的报错地点

可以发现是Makefile的1869行报错

通过修改Makefile文件,输出各个变量,找到报错在elpa2_print_kernels_openmp_LINK变量中

同样的方式输出组成elpa2_print_kernels_openmp_LINK的各个变量(如下)

 468 elpa2_print_kernels_openmp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC \
 469         $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(FCLD) \
 470         $(elpa2_print_kernels_openmp_FCFLAGS) $(FCFLAGS) \
 471         $(AM_LDFLAGS) $(LDFLAGS) -o $@
1330 elpa2_print_kernels_openmp_FCFLAGS = $(AM_FCFLAGS) -module ${ac_empty}private_modules -Iprivate_modules

找到源头了,是因为libtool把标签-module给忽略了,编译器不知道后面的private_modules是什么东西,因此报错
一种曲线的解决问题方式修改${ac_empty}private_modules, 修改

1065 ac_empty =-I
make install -j20

看起来是libtool吃掉了连接module所在文件夹连接标志-module,根据configure

for ac_flag in -J '-J ' -fmod= -moddir= +moddir= -qmoddir= '-mod ' \
              '-module ' -M '-Am -M' '-e m -J '; do
  FCFLAGS="$ac_fc_module_output_flag_FCFLAGS_save ${ac_flag}sub"
  cat > conftest.$ac_ext <<_ACEOF

连接标志有-mod,-module,因为intel 17识别的ac_flag-mod,且支持,gnu识别的是-J,而intel 19-module,libtool不知道为什么没能处理好-module


本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK