计算化学公社
标题:
Rocky9.4编译vasp6.4.2笔记(使用GCC编译器结合intel_oneAPI_MKL编译)
[打印本页]
作者Author:
825728139
时间:
2025-4-25 20:35
标题:
Rocky9.4编译vasp6.4.2笔记(使用GCC编译器结合intel_oneAPI_MKL编译)
本帖最后由 825728139 于 2025-4-25 20:33 编辑
最近在VM虚拟机上重新编译vasp,在vasp官网发现有多种编译方法,目前网上大多数教程都是采用的intel编译器,作为一名娱乐玩家想尝试使用GCC编译器编译vasp。现编译完成,在这里做个笔记
发帖前注意到论坛上两个使用GCC编译器的教程:
vasp 5.4.4在linux下使用gnu编译器编译
;
Ubuntu 安装 VASP
vasp.6.4.2安装包来源:
http://bbs.keinsci.com/thread-41742-1-1.html
vasp官网中推荐的编译环境:
https://www.vasp.at/wiki/index.php/Toolchains
vasp官网
Installing VASP.6.X.X
中指出,要编译 VASP,需要(网页翻译结果):
Fortran 编译器(至少符合 F2008)、C 和 C++。例如,以下编译器套件之一:
- GCC
- intel-oneapi-base-kit+intel-oneapi-hpc-kit
- NVIDIA HPC 开发工具包
- AOCC (适用于 AMD CPU)
介意:对于 VASP 的 OpenACC GPU 端口(要在 GPU 上运行),必须使用 NVIDIA HPC-SDK (>=21.2) 中的编译器。
数值库:FFTW、BLAS、LAPACK 和 ScaLAPACK。例如,以下之一:
- intel-oneapi-mkl
- FFTW + OpenBLAS + ScaLAPACK
- NVIDIA HPC-SDK(附带 OpenBLAS 和 ScaLAPACK)+ FFTW
- AOCL (适用于 AMD CPU)
消息传递接口 (MPI) 的实现。例如,以下之一:
- 英特尔-oneapi-mpi
- OpenMPI
- NVIDIA HPC-SDK(附带 OpenMPI)
要查找有效的编译器和库的组合,请查看我们的经过验证的工具链列表(
https://www.vasp.at/wiki/index.php/Toolchains
)
这里选择
GCC+FFTW + OpenBLAS + ScaLAPACK+OpenMPI
的组合
1. 配置环境
安装必要的包,如果有报错可以在
pkgs.org
搜索查看完整的安装命令(后续提示缺少什么库文件也可以在这里搜索,不一定非得搜索包名,可以直接搜缺少的文件,如:搜libblas.a便会帮你找到
lapack-static包
)
dnf install gcc gcc-c++ gcc-gfortran openmpi openmpi-devel fftw fftw-devel fftw-static blas blas-static lapack lapack-static
复制代码
ScaLAPACK不能直接dnf,去官网源码编译:
https://www.netlib.org/scalapack/#_scalapack_version_2_1_0
创建并进入scalapack文件夹
wget http://www.netlib.org/scalapack/scalapack-2.1.0.tgz
tar -xf scalapack-2.1.0.tgz
mkdir build
cd build
# 添加$PATH:(可以'find / -name mpicc' 'find / -name libblas.a' 'find / -name liblapack.a' 确认要添加到$PATH的内容)
PATH=/usr/lib64:/usr/lib64/openmpi/bin:$PATH
cmake -DCMAKE_Fortran_FLAGS="-fallow-argument-mismatch" ../scalapack-2.1.0
# 这里 -DCMAKE_Fortran_FLAGS="-fallow-argument-mismatch" 是为了解决gcc10和gcc11编译过程中的兼容性报错:https://github.com/Reference-ScaLAPACK/scalapack/issues/73
make all
ls lib/scalapack.a # 检查编译结果
复制代码
查看可选择的makefile.include文件:
https://www.vasp.at/wiki/index.php/Makefile.include
这里我选择了
makefile.include.gnu_ompi_mkl_omp
: Parallelized using OpenMPI + OpenMP, combined with MKL.
环境中还需要intel_oneAPI_MKL
安装intel_oneAPI_MKL:
https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-linux/2025-1/online-offline-installer-004.html#BASE-ONLINE-OFFLINE
或者
从这里下载intel_oneAPI_MKL:
https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-download.html?operatingsystem=linux&linux-install=offline
"intel_oneAPI_MKL的安装非常简单,运行.sh文件后只需要选择一下用户协议、是否发送诊断数据后就可以自动安装了"
wget https://registrationcenter-download.intel.com/akdlm/IRC_NAS/dc93af13-2b3f-40c3-a41b-2bc05a707a80/intel-onemkl-2025.1.0.803_offline.sh
sudo sh ./intel-onemkl-2025.1.0.803_offline.sh
export CPLUS_INCLUDE_PATH=/opt/intel/oneapi/mkl/2025.1/include:$CPLUS_INCLUDE_PATH # 设置环境变量(使用'find / -name mkl.h'确认路径)
复制代码
2.开始编译vasp6.4.2
准备makefile.include文件:
tar -xf vasp.6.4.2.tar
cd vasp.6.4.2
cp arch/makefile.include.gnu_ompi_mkl_omp makefile.include # 可根据https://www.vasp.at/wiki/index.php/Makefile.include 去除HDF5、fftlib等的注释
复制代码
修改makefile.include文件中的指定路径(这里使用的路径均为对应包的默认安装路径,若不确定是否和本文一致可通过find确认:'find / -name mkl.h' 'find / -name scalapack.a' 'find / -name hdf5.mod')
# 修改前:
MKLROOT ?= /path/to/your/mkl/installation
SCALAPACK_ROOT ?= /path/to/your/scalapack/installation
HDF5_ROOT ?= /path/to/your/hdf5/installation
# 修改后:
MKLROOT ?= /opt/intel/oneapi/mkl/2025.1
SCALAPACK_ROOT ?= /apps/lib/scalapack/build
HDF5_ROOT ?= /apps/miniconda3/pkgs/hdf5-1.14.3-nompi_h4f84152_100
复制代码
注意makefile.include文件中后续对该变量的引用,确认修改后的路径下有对应的下级目录
HDF5的作用在 '
VASP 6 搭配 HDF5 时,需启用 fortran 选项编译 HDF5
' 有讨论
'''
dnf install rocky-release-hpc
dnf install hdf5-devel
dnf install hdf5-mpich-devel
dnf install hdf5-openmpi-devel
export GFORTRAN_MODULE_DIR=/usr/lib64/gfortran/modules/openmpi:$GFORTRAN_MODULE_DIR
'''
dnf安装的hdf5不能用
,跟vasp/arch中提供的makefile.include的目录结构不对应。通过find发现之前装的
miniconda
里面有这个包,于是把makefile.include中的/path/to/your/hdf5/installation改为了miniconda中的路径。
PATH=/usr/lib64:/usr/lib64/openmpi/bin:$PATH
export CPLUS_INCLUDE_PATH=/opt/intel/oneapi/mkl/2025.1/include:$CPLUS_INCLUDE_PATH
make all
复制代码
make all全程大概用了1个小时
3. 测试
测试文件:
http://bbs.keinsci.com/thread-11812-1-1.html
cd vasp.Hg
cp IN-short INCAR
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/intel/oneapi/mkl/2025.1/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/apps/miniconda3/pkgs/hdf5-1.14.3-nompi_h4f84152_100/lib
export PATH=$PATH:/apps/vasp.6.4.2/bin
vasp_std
复制代码
欢迎光临 计算化学公社 (http://bbs.keinsci.com/)
Powered by Discuz! X3.3