安装环境简介:
IntelMPI 18.0.3
GCC:5.4.0
python 3.6 (python 版本必须 > 3)
gcc 的版本只需要支持 c++11 都是可以的
几乎需要从零开始安装,安装方法与 gcc + openmpi 方法有一些差别,之前编译的依赖库不能直接使用,都需要重新编译
下载 CP2K 7.1.0 源代码,并查看需要的依赖库
源代码在github 上,这里需要注意的点是你需要用 git 命令下载源代码
$ git clone --recursive https://github.com/cp2k/cp2k.git cp2k
如果你是在 github 页面右侧的 Releases 里面直接下载 .gz 压缩包,再开始编译的时候会提示你缺少一些文件。而根据提示,你需要使用 git 命令下载,这就导致了如果你原来不是使用 git 命令下载的话,压缩包解压之后的文件夹并不是一个 git 仓库,所以无法下载。
解决办法:从 git 仓库中把 .github 文件夹下下来放在你解压后的文件夹内(没有实验过,理论可行)
在 cp2k/arch 文件夹中修改配置文件 Linux-x86-64-intel-regtest.psmp。
打开后可以在最上方看到这次安装所需要的其他包的信息,例如:
- Intel MPI, MKL
- Libint 2.6.0
- Libxc 4.3.4
- libxsmm 1.16.1
- ELPA 2020.05.001
- PLUMED 2.6.1
- GSL 2.6
- SPGLIB 1.16.0
由于软件更新比较频繁,上述的软件版本可能会有变化,一切以官方为准
下面所有的下载和解压过程我都会忽略(特殊情况文中会说明),所有的压缩包解压后我都统一放在同一个目录,安装步骤略多且繁琐,需要一定的耐心和细心。
安装 lapack-3.8.0
$ cd lapack-3.8.0/
$ vim make.inc
# 修改下面几处
CC = mpiicc
CFLAGS = -O3 -fPIC
FORTRAN = mpiifort
OPTS = -O2 -fPIC
NOOPT = -O0 -fPIC
LOADER = mpiifort
LOADOPTS = -fPIC
TIMER = INT_ETIME
# 最下方还有一处需要更改
BLASLIB = ../../libblas.a
这里需要注意的是所有编译选项后面需要添加 -fPIC ,否则后面也是会提醒你重新编译,以及最后一处需要修改的地方,这里原来是 librefblas.a。后面其他软件编译需要 lapack库时使用的大多使用的是 -lblas ,不修改就会出现 usr/bin/ld: cannot find -lblas 错误。
$ make -j 32
编译完成后可以看到 libblas.a,liblapack.a,libtmglib.a 三个库文件。
安装 libxc-4.3.4
这里我提供了一份 shell 脚本,直接执行即可
#!/bin/bash
###############################################################################
# Copyright (c) Intel Corporation - All rights reserved. #
# This file is part of the XCONFIGURE project. #
# #
# For information on the license, see the LICENSE file. #
# Further information: https://github.com/hfp/xconfigure/ #
# SPDX-License-Identifier: BSD-3-Clause #
###############################################################################
# Hans Pabst (Intel Corp.)
###############################################################################
if [ "" = "$1" ]; then PRFX=gnu-; else PRFX=$1-; shift; fi
HERE=$(cd $(dirname $0); pwd -P)
DEST=${HERE}/../libxc/${PRFX}skx
if [ ! -e ${HERE}/configure.ac ] || [ "${HERE}" != "$(pwd -P)" ]; then
echo "Error: XCONFIGURE scripts must be located and executed in the application folder!"
exit 1
fi
if [ "${HERE}" = "${DEST}" ]; then
echo "Warning: LIBXC source directory equals installation folder!"
read -p "Are you sure? Y/N" -n 1 -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
CONFOPTS=""
TARGET="-mavx512f -mavx512cd -mavx512dq -mavx512bw -mavx512vl -mfma -L$MKLROOT/lib/intel64 -mkl=cluster"
export FLAGS="-O3 ${TARGET}"
export LDFLAGS="-llapack -lblas"
export CFLAGS="${FLAGS}"
export CXXFLAGS="${FLAGS}"
export FCFLAGS="${FLAGS}"
export LIBS=""
export AR="ar"
export FC="mpiifort"
export CC="mpiicc"
export CXX="mpiicpc"
libtoolize
aclocal
autoheader
automake -a
autoconf
./configure \
--prefix=./install \
CC=mpiicc CXX=mpiicpc FC=mpiifort \
$*
这里需要注意的地方
- 修改编译器为 mpi 编译器
- 需要加上 mkl 库
这份脚本的源代码是在 https://github.com/hfp/xconfigure/raw/master/config 上,但是原脚本在编译 4.3.4 版本时会报错。
复制到 libxc-4.3.4 文件夹中并保存为 make.sh
$ chmod +x make.sh
$ ./make.sh
$ make -j 32
$ make install
安装 spglib-1.16.0
这里没有什么需要注意的。
$ cd spglib-1.16.0
$ mkdir _build
$ cd _build
$ cmake -DCMAKE_INSTALL_PREFIX="../install" ..
$ make -j 32
$ make install
安装 elpa-2020.05.001
这里也提供一份可以使用的脚本,用法参考 安装 libxc-4.3.4。
#!/bin/bash
###############################################################################
# Copyright (c) Intel Corporation - All rights reserved. #
# This file is part of the XCONFIGURE project. #
# #
# For information on the license, see the LICENSE file. #
# Further information: https://github.com/hfp/xconfigure/ #
# SPDX-License-Identifier: BSD-3-Clause #
###############################################################################
# Hans Pabst (Intel Corp.)
###############################################################################
if [ "" = "$1" ]; then PRFX=gnu-; else PRFX=$1-; shift; fi
HERE=$(cd $(dirname $0); pwd -P)
DEST=${HERE}/../elpa/${PRFX}skx-omp
if [ ! -e ${HERE}/configure ] || [ "${HERE}" != "$(pwd -P)" ]; then
echo "Error: XCONFIGURE scripts must be located and executed in the application folder!"
exit 1
fi
if [ "${HERE}" = "${DEST}" ]; then
echo "Warning: ELPA source directory equals installation folder!"
read -p "Are you sure? Y/N" -n 1 -r
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
CONFOPTS="--enable-avx512 --enable-openmp"
TARGET="-mavx512f -mavx512cd -mavx512dq -mavx512bw -mavx512vl -mfma"
FLAGS="-O3 ${TARGET} "
export LDFLAGS="-fPIC "
export CFLAGS="-march=core-avx2 -fPIC "
export CXXFLAGS="-march=core-avx2 -fPIC ${CFLAGS} "
export FCFLAGS="-march=core-avx2 -fPIC ${FLAGS} "
export LIBS="-L../lapack-3.8.0 -L$MKLROOT/lib/intel64 -llapack -lblas -mkl=cluster"
export SCALAPACK_LDFLAGS=""
export AR="ar"
export FC="mpiifort"
export CC="mpiicc"
export CXX="mpiicpc"
# Development versions may require autotools mechanics
if [ -e ${HERE}/autogen.sh ]; then
./autogen.sh
fi
if [ ! -e ${HERE}/remove_xcompiler ]; then
echo "#!/bin/bash" > ${HERE}/remove_xcompiler
echo "remove=(-Xcompiler)" >> ${HERE}/remove_xcompiler
echo "\${@/\${remove}}" >> ${HERE}/remove_xcompiler
chmod +x ${HERE}/remove_xcompiler
fi
./configure --disable-option-checking \
--disable-dependency-tracking \
--disable-mpi-module \
--disable-shared \
--enable-openmp \
--prefix=./elpa-2019.05.001/install
sed -i \
-e "s/-openmp/-qopenmp -qoverride_limits/" \
-e "s/all-am:\(.*\) \$(PROGRAMS)/all-am:\1/" \
Makefile
这里需要修改的有 编译器,安装路径,以及 LDFLAGS等编译选项
执行完该脚本后执行 make -j 32,make install 即可
安装 gsl-2.6
这里没有什么需要注意的。
$ cd gsl-2.6
$ ./configure --prefix=./install CC=mpiicc CXX=mpiicpc FC=mpiifort
$ make -j 32
$ make install
安装 plumed-2.6.1
这里只需要注意加上一些库的路径即可。
$ cd plumed-2.6.1
$ ./configure --prefix=./install CXX=mpiicpc CC=mpiicc LDFLAGS="-L../lapack-3.8.0 -L$MKLROOT/lib/intel64 -mkl=cluster -L../gsl-2.6/install/lib" LIBS="-llapack -lblas " --enable-gsl
$ make -j 32
$ make install
安装 libxsmm-1.16.1
$ cd libxsmm-1.16.1
$ make INTRINSICS=1 SSE=2 AVX=2 ROW_MAJOR=0 INDICES_M="$(echo $(seq 1 24))" INDICES_N="$(echo $(seq 1 24))" INDICES_K="$(echo $(seq 1 24))"
这里特别需要注意的是INTRINSICS=1这个选项,因为这里使用的是高版本的 gcc ,具体说明在 libxsmm 官网上有说明。
如果你使用的是低版本的 gcc ,添加该选项可能会报错,删除该选项即可。
安装 boost-1_74_0
如果你的系统中有 boost ,且版本 >= 1.30 则不需要安装 boost。
boost 的安装过程与其他软件不太一样,但是没有什么特别需要注意的地方。
$ cd boost_1_74_0/
$ ./bootstrap.sh --with-libraries=all --with-toolset=gcc
# 这时候会出现一个新的文件 b2
$ ./b2 install --prefix=./install
安装 gmp-6.1.0
为什么要安装 gmp ?
原因:系统中 gcc 是管理员编译好的,gmp 也已经安装好,但是在安装过程中并不支持 c++ 语法,导致我们在使用 mpicxx 编译程序时会报错。如果你的系统中 gmp/lib 中已经包含了 libgmpxx.so ,那么在这里就不需要再重新安装 gmp。
安装 gmp 的过程并不复杂。
$ cd gmp-6.1.0
$ ./configure --prefix=./install --enable-cxx
$ make -j 32
$ make install
一定要加上 –enable-cxx 选项否则还是会出现上述的错误。
安装 libint-v2.6.0
这里是我踩坑最多的地方,请务必按照下面的步骤安装。
-
下载
没想到在下载就开始翻车了,libint 在 github 上的官方版本并不适用于 cp2k-7.1.0 的安装,我们必须使用 cp2k 提供的特定的安装包来编译 https://github.com/cp2k/libint-cp2k/releases/tag/v2.6.0 。而据网友描述,官方提供的版本也会出现编译失败的情况,可能是我运气好,一次就编译通过了。
我下载的版本是 libint-v2.6.0-cp2k-lmax-4.tgz ,在配置文件里写的有。
在这里也不要下错成最下面的 Source Code,那里面只是 3 个无关的文件(我已经不想吐槽了)
-
编译
走到这里就可以恭喜你了,后面基本上没有什么其他的问题,让我们继续吧!
$ cd libint-v2.6.0-cp2k-lmax-6
$ ./configure --prefix=./install --enable-fortran CC=mpiicc CXX=mpiicpc FC=mpiifort CXXFLAGS="-O3 -I../gmp-6.1.0/install/include -L../gmp-6.1.0/install/lib -L../zlib/lib" CFLAGS="-O3 -I../gmp-6.1.0/install/include -L../gmp-6.1.0/install/lib -L../zlib/lib" --with-boost=../boost_1_74_0/install FCFLAGS="-O3 -I../gmp-6.1.0/install/include -L../gmp-6.1.0/install/lib -L../zlib/lib"
$ make -j 32
$ make install
这里使用的 zlib 是自己安装的 ,自行下载安装即可,步骤十分简单。
安装 CP2K
首先我们修改所需要的配置文件 ,我这里使用的是 arch/Linux-x86-64-gfortran.psmp
include /path/to/plumed2/lib/plumed/src/lib/Plumed.inc.static
ELPA_VER = 2020.05.001
ELPA_INC = /path/to/elpa/include/elpa_openmp-$(ELPA_VER)
ELPA_LIB = /path/to/elpa/lib
LIBINT_INC = /path/to/libint/include
LIBINT_LIB = /path/to/libint/lib
LIBXC_INC = /path/to/libxc/include
LIBXC_LIB = /path/to/libxc/lib
LIBXSMM_INC = /path/to/libxsmm/include
LIBXSMM_LIB = /path/to/libxsmm/lib
SPGLIB_INC = /path/to/spglib/include
SPGLIB_LIB = /path/to/lib/lib64
LAPACK_LIB = /path/to/lapack/3.8.0_intel2017_gcc540
GSL_LIB = /path/to/gsl-2.6/lib
GSL_INC = /path/to/gsl-2.6/include
ZLIB = /path/to/zlib
PLUMED = /path/to/plumed2
FCFLAGS += -I$(LIBINT_INC) -I$(LIBXC_INC) -I$(LIBXSMM_INC) -I$(GSL_INC) -I$(PLUMED)/include -I$(SPGLIB_INC)
LIBS = $(PLUMED_DEPENDENCIES) $(GSL_LIB)/libgsl.a $(GSL_LIB)/libgslcblas.a $(ZLIB)/lib/libz.a
LIBS += /path/to/gcc/5.4.0/lib64/libstdc++.a
LIBS += $(LAPACK_LIB)/liblapack.a
LIBS += $(LAPACK_LIB)/libblas.a
上面我只写了需要修改或添加的部分
$ make ARCH=Linux-x86-64-intel-regtest VERSION=psmp -j 24
可能会提示你执行一条 git 命令,直接执行下载即可。如果机器不能联网,在有网的环境中执行完成后重新上传即可。
接下来你只需要等待安装完成即可。
安装完成后,在 exe/Linux-x86-64-intel-regtest 文件夹下可以看到可执行文件 cp2k.psmp
至此,安装全部结束
下面是技术总结
intel 版本的安装比 openmpi 的安装其实是要简单不少的,因为有些数学库 例如 scalapck 、 fftw 是不需要安装的,直接使用 -L$MKLROOT/lib/intel64 -mkl=cluster 就可以了