AMD CPU安装vasp.6.4.3

新入手了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

写在最后,根据初步测试,发现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的倍数的核数进行运算等等),对我目前的模型都无效。

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值