
最近入了台双路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核就有巨量提升(但核心更多反而变慢了)。