vasp.6.4.3安装包:
链接:https://pan.baidu.com/s/1PZLpbNUmg3DeCAxZejPOuw
提取码:vasp
新入手了AMD EPYC 9654的机器,尝试了两种方法来安装vasp,均遇到不少问题,折腾好久才搞好。
方法一:使用intel全家桶oneapi进行安装。一开始便直接按之前在intel cpu上的安装方法进行安装,见https://blog.csdn.net/liouver/article/details/138821421?spm=1001.2014.3001.5502
在编译vasp时出现了错误。最后发现是makefile.include文件没写对。
修改配置文件:
cd ~/DFT/vasp.6.4.3
cp arch/makefile.include.oneapi makefile.include
编辑复制出来的makefile.include文件,intel cpu只需要修改如下:
CC_LIB = icx
CXX_PARS = icpx
MKLROOT ?=
AMD EPYC 9xx4系列的CPU还需要修改FFLAGS的参数(将-xHOST更改为-axCORE-AVX512,后面会讲到如果是用AOCC编译vasp,则需将xHOST更改为-march=znver4。 ),见说明https://www.amd.com/content/dam/amd/en/documents/developer/compiler-options-quick-ref-guide-amd-epyc-9xx4-series-processors.pdf
VASP_TARGET_CPU ?= -axCORE-AVX512
FFLAGS += $(VASP_TARGET_CPU)
修改完成后,直接编译即可。由于我们基本只用vasp_std,为节约时间,我们只编译std即可。
make std
编译完成,添加PATH即可使用。
方法二:使用AMD全家桶(AOCC+AOCL)和openmpi。(比较一下AMD的CPU用aocc编译出来的vasp是不是更快???)
首先安装AOCC,见AMD CPU安装AOCC-CSDN博客
然后安装AOCL,下载地址:AMD Optimizing CPU Libraries (AOCL)
tar -zxvf aocl-linux-aocc-4.2.0.tar.gz
cd aocl-linux-aocc-4.2.0
./install.sh -t /home/wliu/software/AMD/aocl
/home/wliu/software/AMD/aocl为aocl的安装地址,可以直接./install.sh安装在默认地址。
然后编写如下bash文件(build_vasp_aocc_ompi_aocl.sh),根据自己的aocc和aocl安装目录,以及拟安装openmpi的目录,修改COMPILEROOT、OPENMPIROOT和AOCLROOT的地址。根据需要修改openmpi的版本或下载地址,修改vasp压缩包的名字。
#!/bin/bash
echo "Starting VASP Build script"
echo "setting the paths"
###################################################
################## USER SECTIONS ###################
export SOURCES=$PWD
######## Set the Paths for AOCC ###############
export COMPILEROOT=/home/wliu/software/AMD/aocc-compiler-4.2.0
export OPENMPIROOT=/home/wliu/software/openmpi
export LD_LIBRARY_PATH=$COMPILEROOT/lib:$LD_LIBRARY_PATH
export PATH=$COMPILEROOT/bin:$PATH
export INCLUDE=$COMPILEROOT/include:$INCLUDE
which clang
export AOCLROOT=/home/wliu/software/AMD/aocl/4.2.0/aocc
export BLISROOT=${AOCLROOT}
export LIBFLAMEROOT=${AOCLROOT}
export SCALAPACKROOT=${AOCLROOT}
export FFTWROOT=${AOCLROOT}
### path to vasp source file ###
export VASPROOT=$SOURCES/vasp.6.4.3
### Seting the env before starting the build ###
export CC=clang
export CXX=clang++
export FC=flang
export F90=flang
export F77=flang
export ARCH=znver4
# Setting up the compiler flags
export CFLAGS="-O2 -march=$ARCH -mtune=$ARCH -fopenmp -fPIC "
export CXXFLAGS="-O2 -march=$ARCH -mtune=$ARCH -fopenmp -fPIC "
export FCFLAGS="-O2 -march=$ARCH -mtune=$ARCH -fopenmp -fPIC "
export FFLAGS="-O2 -march=$ARCH -mtune=$ARCH -fopenmp -fPIC "
################# END OF USER SECTIONS ###################
##########################################################
echo "###################################################################################"
echo "# OpenMPI #"
echo "###################################################################################"
if [ -e $OPENMPIROOT/bin/mpicc ];
then
echo "OpenMPI File Exists"
echo "OpenMPIROOT=$OPENMPIROOT"
else
rm -rf openmpi-5.0.3 openmpi
if [ -e "openmpi-5.0.3.tar.bz2" ]
then
break
else
echo "Downloading openMPI"
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.3.tar.bz2
fi
tar -xvf openmpi-5.0.3.tar.bz2
cd openmpi-5.0.3
./configure --prefix=$OPENMPIROOT CC=${CC} CXX=${CXX} FC=${FC} CFLAGS="-O3 -march=$ARCH" CXXFLAGS="-O3 -march=$ARCH" FCFLAGS="-O3 -march=$ARCH" LDFLAGS=" -march=$ARCH" --enable-mpi-fortran --enable-shared=yes --enable-static=yes --enable-mpi1-compatibility --disable-hwloc-pci
make -j 32 2>&1|tee make.log
make install -j 8 2>&1| tee make_install.log
cd $OPENMPIROOT/bin
if [ -e "mpicc" ]
then
echo "OPENMPI BUILD SUCCESSFUL"
else
echo "OPENMPI BUILD FAILED"
exit 1
fi
fi
###### Set the Compilation FLAGS ######
export CFLAGS="-O2 -march=$ARCH"
export CXXFLAGS="-O2 -march=$ARCH"
export FCFLAGS="-O2 -march=$ARCH"
export FFLAGS=$FCFLAGS
export PATH=$OPENMPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$OPENMPIROOT/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$OPENMPIROOT/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$OPENMPIROOT/include:$CPLUS_INCLUDE_PATH
echo "################### Building VASP ######################"
if [ -d $VASPROOT ];
then
echo "VASP - File Exists "
else
cd $SOURCES
if [ ! -e "vasp.6.4.3.tgz" ]
then
echo "Please Download VASP"
fi
tar -xzvf vasp.6.4.3.tgz
cd $VASPROOT
cd $VASPROOT/src/fftlib
clang++ -fopenmp -std=c++11 -I./include -I$AOCLROOT/include_LP64 -DFFTLIB_THREADSAFE -c src/fftlib.cpp
cd $VASPROOT
echo "createing the Makefile for VASP"
# $*$(FUFFIX) $*$(SUFFIX) $(CPP_OPTIONS)
echo "########################################################################
CPP_OPTIONS= -DHOST=\\\"LinuxAMD\\\" -DMPI -DMPI_BLOCK=8000 -Duse_collective -DscaLAPACK -DCACHE_SIZE=4000 -Davoidalloc -Duse_bse_te -Dtbdyn -Dfock_dblbuf -Dvasp6 -D_OPENMP -Dshmem_bcast_buffer -Duse_shmem -Dsysv -Dfftw_cache_plans -Duse_fftw_plan_effort
# -DPROFILING
CPP = flang -E -P -C -w -Mfree \$*\$(FUFFIX) >\$*\$(SUFFIX) \$(CPP_OPTIONS)
FC = mpif90 -fopenmp
FCL = mpif90 ${VASPROOT}/src/fftlib/fftlib.o -fopenmp
FoREE = -ffree-form -ffree-line-length-none
FFLAGS = -w -march=$ARCH -fno-fortran-main \$(CPP_OPTIONS) -Mbackslash #-fallow-argument-mismatch
OFLAG = -O2
DEBUG = -O0
AOCLROOT = ${AOCLROOT}
LIBDIR = ${AOCLROOT}
BLAS = ${AOCLROOT}/lib/libblis-mt.a
LAPACK = ${AOCLROOT}/lib/libflame.so
BLACS =
SCALAPACK = ${AOCLROOT}/lib/libscalapack.a
LLIBS = \$(SCALAPACK) \$(LAPACK) \$(BLAS) -lstdc++
FFTW ?= ${AOCLROOT}
LLIBS += -L\$(FFTW)/lib/ -lfftw3 -lfftw3_omp
INCS = -I\$(FFTW)/include_LP64/ -I\$(FFTW)/include_LP64/
OBJECTS = fftmpiw.o fftmpi_map.o fftw3d.o fft3dlib.o
OBJECTS_O1 += fftw3d.o fftmpi.o fftmpiw.o
OBJECTS_O2 += fft3dlib.o
CPP_LIB = \$(CPP)
FC_LIB = \$(FC)
CC_LIB = clang
CFLAGS_LIB = -O
FFLAGS_LIB = -O1
FREE_LIB = \$(FREE)
OBJECTS_LIB= linpack_double.o getshmem.o
CXX_PARS = clang++ -lstdc++
CXX_FFTLIB = clang++ -fopenmp -std=c++11 -DFFTLIB_THREADSAFE #-Duse_fftw_plan_effort
LLIBS += -ldl -lstdc++
# ----------------------------------------------------------------------" > makefile.include
cat makefile.include
echo "starting make for vasp"
cd ${VASPROOT}
make std 2>&1|tee make.log
cd build/std
cd ..
cd $VASPROOT/bin/
if [ -e "vasp_std" ]
then
echo "VASP Buil d SUCCESSFUL"
else
echo "VASP Build FAILED"
fi
fi
将此文件放在vasp.6.4.3.tgz所在文件夹,直接运行可自动安装openmpi,并编译vasp。
build_vasp_aocc_ompi_aocl.sh
设置环境变量:
export LD_LIBRARY_PATH=/home/wliu/software/AMD/aocl/4.2.0/aocc/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/wliu/software/AMD/aocc-compiler-4.2.0/lib:$LD_LIBRARY_PATH
export PATH=/home/wliu/software/openmpi/bin:$PATH
source ~/Applications/AMD/setenv_AOCC.sh
export PATH=$PATH:/home/wliu/DFT/vasp.6.4.3_AMD/bin
写在最后,根据初步测试,发现intel oneapi编译的vasp还是比aocc编译的vasp跑起来更快。而且aocc编译出来的vasp,出现了如下错误(同样的模型和参数在oneapi编译出的vasp下跑未出现过此错误):
BRMIX: very serious problems the old and the new charge density differ old charge density:
网上找了一些解决方案(如降低编译等级从-O3降成-O2,在作业脚本中添加export I_MPI_ADJUST_REDUCE=3或者INCAR中设置LSCALAPACK=.FALSE.,将ISYM设为0,提高 PREC的精度,提高SYMPREC的精度,使用10的倍数的核数进行运算等等),对我目前的模型都无效。