CP2K 7.1.0 使用 Intel 编译器安装

安装环境简介:

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.aliblapack.alibtmglib.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 \
  $*

这里需要注意的地方

  1. 修改编译器为 mpi 编译器
  2. 需要加上 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 32make 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

这里是我踩坑最多的地方,请务必按照下面的步骤安装。

  1. 下载
    没想到在下载就开始翻车了,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 个无关的文件(我已经不想吐槽了)

  2. 编译
    走到这里就可以恭喜你了,后面基本上没有什么其他的问题,让我们继续吧!

	$ 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 就可以了

猜你喜欢

转载自blog.csdn.net/qq_32115939/article/details/111225328
今日推荐