Intel oneAPI 编译 ABACUS 教程
作者:韩昊知,邮箱:haozhi.han@stu.pku.edu.cn
审核:陈默涵,邮箱:mohanchen@pku.edu.cn
最后更新时间:2023/09/21
一、前言
非特殊情况,linux 系统会默认安装 GCC(GNU Compiler Collection)编译器套件。因此如果你的机器默认没有 Intel® oneAPI Toolkits,那么建议,你可以直接看上一篇文章:GCC 编译 ABACUS 教程 。
如果您的机器恰好有 Intel® oneAPI Toolkits,那么您也可以使用它来编译 ABACUS。
二、关于 Intel® oneAPI Toolkits
Intel® oneAPI Toolkits 分为很多个版本的 Toolkit,这里解释下 Intel® oneAPI Base Toolkit 和 Intel® oneAPI HPC Toolkit 的区别。
简单来说:Intel® oneAPI HPC Toolkit 包含 Intel® oneAPI Base Toolkit。
Intel® oneAPI Base Toolkit 中包含:Intel® oneAPI Math Kernel Library(简称为 MKL),这个软件库里面包含了大量常用的数学库,包括 ABACUS 依赖的 BLAS
、LAPACK
、FFTW3
和 ScaLAPACK
4 个软件库。
因此使用 Intel oneAPI 来编译 ABACUS,可以省去逐个去安装数学库的过程!
Intel® oneAPI HPC Toolkit 相比于 Intel® oneAPI Base Toolkit 多了一些必要的 Intel 的编译器以及 Intel® MPI Library(ABACUS 想要编译并行版本必须的关键库)。
总结一下,使用 Intel oneAPI 编译 ABACUS,必须确保你的机器中包含 Intel® oneAPI HPC Toolkit。
关于 Intel® oneAPI Toolkits 更详细的信息:https://www.intel.com/content/www/us/en/developer/tools/oneapi/toolkits.html#hpc-kit
三、编译 安装
开启 Intel® oneAPI Toolkits:
source /opt/intel/oneapi/setvars.sh
ELPA仅用于 LCAO基组求解特征值与特征矩阵的过程,如果由于机器等原因导致 ELPA 难以安装,可以暂不安装ELPA,在编译 abacus 的时候添加-DUSE_ELPA=0即可绕过ELPA安装困难的问题。 在ABACUS中,LCAO基组求解特征值与特征矩阵提供了两种方法,一种是调用ELPA进行求解(默认选项),一种是调用ScaLAPACK进行求解。 如果使用-DUSE_ELPA=0编译选项,请参考使用文档配置ks_solver为scalapack_gvx,调用ScaLAPACK进行求解。(http://abacus.deepmodeling.com/en/stable/advanced/input_files/input-main.html#ks-solver)
1. 安装 仅支持 PW 基组的 ABACUS
对于仅支持 PW 基组的 ABACUS,我们同时支持两种版本的编译:串行版本和并行版本。
ABACUS 的 PW 基组只依赖:BLAS
、LAPACK
、FFTW3
三个数学库,而这三个数学库都已经被 Intel® oneAPI Base Toolkit 中包含:Intel® oneAPI Math Kernel Library(简称为 MKL)所包含,因此我们不需要再安装其他的软件库!
1.1 编译串行版本
CXX=icpx cmake -B build -DENABLE_MPI=OFF
cd build && make -j`nproc`
注意,这里必须指定CXX=icpx,不然系统会使用默认的
CXX
编译器。同时这里的CXX
也不要指定icpc
,icpc 是 Intel® C++ Compiler Classic,会带来一些报错。
可以看到在当前目录下,已经编译成功了 abacus_pw_serial
可执行文件。
abacus_pw_serial
就是串行版本的支持平面波基组的 ABACUS。
1.2 编译并行版本
CXX=icpx cmake -B build -DENABLE_LCAO=OFF
cd build && make -j`nproc`
可以看到在当前目录下,已经编译成功了 abacus_pw
可执行文件。
abacus_pw
就是并行版本的支持平面波基组的 ABACUS。
2. 安装 支持两种基组的 ABACUS
对于同时支持两种基组的 ABACUS,仅可以编译并行版本。并无串行版本。
完整版的 ABACUS 需要依赖更多的软件库:BLAS
、LAPACK
、FFTW3
、ScaLAPACK、CEREAL、ELPA共 6 个。
而前四个数学库(BLAS
、LAPACK
、FFTW3
、ScaLAPACK
)都已经被 Intel MKL 所包含,因此我们只需再额外安装CEREAL、ELPA即可。
2.1 安装 CEREAL
sudo apt install -y libcereal-dev
2.2 安装 ELPA
如果你的系统是 Ubuntu 22.04,那么你可以以很简单的方式成功安装 ELPA。
sudo apt install -y libelpa-dev
如果你的系统不是 Ubuntu 22.04,很可惜,你需要稍微辛苦一点来安装 ELPA。但别急,这也并不难!
注意;这里手动编译安装 ELPA 的方法与在 GCC 下编译不太一样,因为要保证 ELPA 和 ABACUS 都是基于 Intel oneAPI 来编译的!
手动编译安装 ELPA 可以分为以下几步:
- 下载并进入 ELPA 目录:
wget https://elpa.mpcdf.mpg.de/software/tarball-archive/Releases/2021.05.002/elpa-2021.05.002.tar.gz
tar xzf elpa-2021.05.002.tar.gz
cd elpa-2021.05.002
mkdir build && cd build
configure
CC=mpiicc CXX=mpiicpc FC=mpiifort ../configure --enable-openmp FCFLAGS="-qmkl=cluster"
- 编译安装
make -j`nproc`
make install
ln -s /usr/local/include/elpa_openmp-2021.05.002/elpa /usr/local/include/
注意:
ln -s /usr/local/include/elpa_openmp-2021.05.002/elpa /usr/local/include/
是非常重要的!(很多用户是这里出的问题!)
2.3 编译安装 ABACUS
CXX=icpx cmake -B build
cd build && make -j`nproc`
可以看到在当前目录下,已经编译成功了 abacus
可执行文件。
abacus
就是完整版的 ABACUS,它同时支持两种基矢量,而且还是并行版本!