AMD9754 AOCC OpenMPI5最简编译VASP6.4.2
最初的量子空间
编辑于 2023年12月12日 20:18

最近入了台双路9754服务器,通过编译运行VASP642简单看下与intel平台的对比与提升。

**VASP软件吃内存通道!一定要把24通道插满!实测相对于8通道提升约3倍!

机器:AMD EPYC 9754*2(256核),主板技嘉MZ73-LM0(rev 2.0支持9754满载运行),内存32G*24条=768G,ubuntu 22.04,intel oneapi basekit + hpckit 2023, AOCC 4.1.0 + AOCL 4.1.0, openmpi 5.0.0

一、安装intel oneapi +编译(略,安装根据官网走,全装上最保险;编译直接copy需要的makefile编译即可,注意VASP_TARGET_CPU不可设置-xHOST,可改为VASP_TARGET_CPU ?= -axCORE-AVX512。环境变量单独设置,用AMD全家桶就不要用intel oneapi。)

二、安装AOCC

下载:https://www.amd.com/zh-cn/developer/aocc.html

下面的aocc-compiler-4.1.0_1_amd64.deb,点进去点击accept,即可下载

安装:sudo dpkg -i aocc-compiler-4.1.0_1_amd64.deb

如果说缺什么libxxx,接着运行 sudo apt install -f -y即可

设置环境变量:source /opt/AMD/aocc-compiler-4.1.0/setenv_AOCC.sh

测试:

$ which clang clang++ flang

/opt/AMD/aocc-compiler-4.1.0/bin/clang

/opt/AMD/aocc-compiler-4.1.0/bin/clang++

/opt/AMD/aocc-compiler-4.1.0/bin/flang

这三个记下来,后面编译openmpi用

$ clang

clang-16: error: no input files

三、安装AOCL

下载:https://www.amd.com/zh-cn/developer/aocl.html

下面的aocl-linux-aocc-4.1.0_1_amd64.deb,点进去点击accept,即可下载

安装:sudo dpkg -i aocl-linux-aocc-4.1.0_1_amd64.deb

设置环境变量:source /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/amd-libs.cfg

四、安装OpenMPI

下载:https://www.open-mpi.org/software/ompi/v5.0/

下载openmpi-5.0.0.tar.gz

安装:

$ tar xzf openmpi-5.0.0.tar.gz

$ cd openmpi-5.0.0

$ ./configure CC=/opt/AMD/aocc-compiler-4.1.0/bin/clang CXX=/opt/AMD/aocc-compiler-4.1.0/bin/clang++ FC=/opt/AMD/aocc-compiler-4.1.0/bin/flang --prefix=/opt/openmpi-5.0.0-aocc

等待几分钟(注意,必须写全目录才不报错

$ make -j 256

等待5分钟

$ sudo make install

设置环境变量:export PATH=$PATH:/opt/openmpi-5.0.0-aocc/bin

测试:

$ which mpif90 mpicc mpirun

/opt/openmpi-5.0.0-aocc/bin/mpif90

/opt/openmpi-5.0.0-aocc/bin/mpicc

/opt/openmpi-5.0.0-aocc/bin/mpirun

以上,编译VASP的准备工作已OK。

五、编译VASP

打个广告:VASP.6.4.2需要版权,本人已购,若有钙钛矿材料物理性质(晶体、缺陷、输运等)、金属或化合物表面催化计算(已做过OER、HER、CO2RR)等等需求可以跟我讨论,合适的话可以开展合作。

编译:首先解压VASP文件,并进入文件夹

$ cp arch/makefile.include.aocc_ompi_aocl makefile.include

修改makefile.include文件,主要是以下四处:

AMDBLIS_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc

AMDLIBFLAME_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc

AMDSCALAPACK_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc

AMDFFTW_ROOT ?= /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc

VASP_TARGET_CPU可以不改,也可以改成

VASP_TARGET_CPU ?= -march=znver4

$ make DEPS=1 -j256

等待5分钟,编译结束后在bin目录下生成std gam ncl三个文件,为了方便使用,可以进入bin目录,把std文件复制一份vasp文件。

自己设置环境变量:export PATH=$PATH:当前vasp目录/bin/

测试(在vasp目录bin文件夹下):

$ ./vasp_std -v

vasp.6.4.2 20Jul23 (build Dec 3 2023 08:17:10) complex             

Warning: ieee_inexact is signaling

FORTRAN STOP

$ ldd ./vasp_std

linux-vdso.so.1 (0x00007fffcd0b1000)

libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x0000152f77a00000)

libscalapack.so => /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/lib/libscalapack.so (0x0000152f77200000)

libflame.so.4 => /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/lib/libflame.so.4 (0x0000152f76200000)

libblis.so.4 => /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/lib/libblis.so.4 (0x0000152f75800000)

libfftw3.so.3 => /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/lib/libfftw3.so.3 (0x0000152f75000000)

libmpi_usempif08.so.40 => /opt/openmpi-5.0.0-aocc/lib/libmpi_usempif08.so.40 (0x0000152f81836000)

libmpi_usempi_ignore_tkr.so.40 => /opt/openmpi-5.0.0-aocc/lib/libmpi_usempi_ignore_tkr.so.40 (0x0000152f8182d000)

libmpi_mpifh.so.40 => /opt/openmpi-5.0.0-aocc/lib/libmpi_mpifh.so.40 (0x0000152f817bc000)

libmpi.so.40 => /opt/openmpi-5.0.0-aocc/lib/libmpi.so.40 (0x0000152f74c00000)

libflang.so => /opt/AMD/aocc-compiler-4.1.0/lib/libflang.so (0x0000152f74600000)

libflangrti.so => /opt/AMD/aocc-compiler-4.1.0/lib/libflangrti.so (0x0000152f817ad000)

libpgmath.so => /opt/AMD/aocc-compiler-4.1.0/lib/libpgmath.so (0x0000152f74200000)

libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x0000152f81765000)

libompstub.so => /opt/AMD/aocc-compiler-4.1.0/lib/libompstub.so (0x0000152f8175e000)

libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x0000152f77d19000)

libgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x0000152f8173e000)

libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x0000152f73e00000)

/lib64/ld-linux-x86-64.so.2 (0x0000152f8186d000)

libblis-mt.so.4 => /opt/AMD/aocl/aocl-linux-aocc-4.1.0/aocc/lib/libblis-mt.so.4 (0x0000152f73400000)

libomp.so => /opt/AMD/aocc-compiler-4.1.0/lib/libomp.so (0x0000152f73000000)

librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x0000152f81737000)

libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x0000152f81732000)

libopen-pal.so.80 => /opt/openmpi-5.0.0-aocc/lib/libopen-pal.so.80 (0x0000152f77c3c000)

libpmix.so.2 => /opt/openmpi-5.0.0-aocc/lib/libpmix.so.2 (0x0000152f72e0e000)

libevent_core-2.1.so.7 => /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.7 (0x0000152f779cb000)

libevent_pthreads-2.1.so.7 => /opt/openmpi-5.0.0-aocc/lib/libevent_pthreads-2.1.so.7 (0x0000152f8172b000)

libhwloc.so.15 => /opt/openmpi-5.0.0-aocc/lib/libhwloc.so.15 (0x0000152f77970000)

libdl.so.2 => /usr/lib/x86_64-linux-gnu/libdl.so.2 (0x0000152f81724000)

链接都OK,下面开始运行测试,算例是我自己在跑的270原子(2322个电子)反铁磁绝缘体分子动力学,设置nsw=0(只跑第一个离子步),仅在INCAR中设置NCORE并行参数。下面是测试时间结果:

amd 9754*2 aocc 使用192核ncore=16运行最快:208 s

amd 9754*2 intel oneapi 使用96核ncore=8运行最快:275 s

intel 8375c*2 使用64核ncore=8运行最快:424 s

intel 8360y(es)*2 使用72核ncore=9运行最快:471 s

感受(仅针对vasp):

对比amd与intel平台,AMD核心多确实占优势,相同功耗下相比8375双路平台可以提升一倍,但感觉还没有完全释放潜力,编译软件还有待提升,比如不管哪种编译器,都不是全核运行效率最佳(intel这点做的很好),甚至intel oneapi下仅使用96核就有巨量提升(但核心更多反而变慢了)。