计算化学公社

 找回密码 Forget password
 注册 Register
Views: 20316|回复 Reply: 42
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] 使用intel全家桶编译cp2k8.2

[复制链接 Copy URL]

432

帖子

11

威望

3422

eV
积分
4074

Level 6 (一方通行)

本帖最后由 丁越 于 2021-10-3 13:16 编辑

使用intel全家桶编译cp2k8.2

一、前言
cp2k.8.x的toolchain安装支持intel mpi了,使用Intel mpi的cp2k要比open mpi的要快不少。同时,自2021年intel全家桶(我们通常指的“Intel Parallel Studio XE”在已经免费了,而且延续多年的集成了Icc,ifort,Mkl,intel mpi的Intel Parallel Studio XE已经升级成为了intel oneAPI HPC toolkit,里面包含了oneAPI Base Toolkit和oneAPI HPC Toolkit两块,前者包含了icc,DPC++/C++编译器和MKL数学库等却不含有MPI库,后者包含了DPC++/C++、fortran编译器等却不含有MKL库,因此要想安装完整的Intel全家桶就得把这两者都安装上,而且后者依赖前者。下面结合社长编译cp2k的博文谈谈如何安装Intel mpi的cp2k。
二、安装步骤
1.安装intel oneAPI HPC toolkit
官网网址是https://software.intel.com/content/www/us/en/develop/articles/free-intel-software-developer-tools.html#,在intel oneAPI HPC toolkit中先选择get the base kit,操作系统选linux,distribution选择默认的recommand即可,安装类型推荐使用online,前提是服务器的网络连接状况良好。在右侧还给出了wget下载方式(wget https://registrationcenter-downl ... _p_2021.3.0.3219.sh) ,这里我们在服务器上直接wget下载最为方便。接下来下载HPC toolkit,同上,我们这里直接wget下载(wget https://registrationcenter-downl ... _p_2021.3.0.3230.sh)。并且将下载好的两个.sh安装包赋予可执行权限(chmod +x xxx)。


为了方便intel oneAPI HPC toolkit的安装,强烈推荐使用服务器图形界面安装,首先安装oneAPI Base Toolkit,输入./l_BaseKit_p_2021.3.0.3219.sh,接下来就是一路确认就行(第一步在安装中会有一个小三角的警示符,不用管)。如果你是个人用户安装,默认安装目录是~/Intel/oneapi,如果是root用户,默认安装目录是/opt/intel/oneapi。安装完成后进行oneAPI HPC Toolkit的安装,输入./l_HPCKit_p_2021.3.0.3230.sh,一路确认即可。


安装完成后,在~/.bashrc中加入source /home/xxx/intel/oneapi/setvars.sh(路径更具实际情况修改)。


2、编译cp2k.8.2
关于cp2k的具体编译操作,这里就不再累述,这里只对社长编译cp2k的博文做一些修改的地方加以说明,其他操作与博文一致即可。

首先确保~/.bashrc的环境变量里把其他的MKL,MPI库的路径注释,断开终端重新进入后,若发现:: initializing oneAPI environment ...
-bash: BASH_VERSION = 4.4.20(1)-release
:: advisor -- latest
:: ccl -- latest
:: clck -- latest
:: compiler -- latest
:: dal -- latest
:: debugger -- latest
:: dev-utilities -- latest
:: dnnl -- latest
:: dpcpp-ct -- latest
:: dpl -- latest
:: inspector -- latest
:: intelpython -- latest
:: ipp -- latest
:: ippcp -- latest
:: ipp -- latest
:: itac -- latest
:: mkl -- latest
:: mpi -- latest
:: tbb -- latest
:: vpl -- latest
:: vtune -- latest
:: oneAPI environment initialized ::
这样就表示编译cp2k所需的intel MKL和intel MPI已经准备好了。进入到cp2k-8.2/tools/toolchain/目录下,然后输入./install_cp2k_toolchain.sh --with-sirius=no --with-intelmpi=system --with-plumed=install 开始编译。注意的一点是,尽管 make -j 4 ARCH=local VERSION="ssmp psmp"中写明了要编译ssmp和psmp两个版本,但是最终在exe/local目录下我们只看到了ssmp版本,这是因为cp2k.8.2版本默认只配置ssmp版本,所以用这个即可。


另外的一点改动是将export OMP_NUM_THREADS=提交任务核心数 加入到~/.bashrc(对于个人用户来说)。尽管cp2k.ssmp提交任务默认使用全部核心,简单测试了一个任务(机子36核),我发现不使用export OMP_NUM_THREADS=36时,cp2k.ssmp用36核计算每轮SCF时长平均为5.3s,而export OMP_NUM_THREADS=36后,每轮SCF平均时间缩短为了3.5s。


下面是使用intel mpi的cp2k.8.2和社长《使用Multiwfn非常便利地创建CP2K程序的输入文件》中的几个例子简单比较下每轮SCF平均时长(社长博文文件中的几个例子用的是E5-2696v3,openmpi的cp2k.8.1)。测试使用的机子是E5-2696v3,36核,128GB,cp2k.8.2,cp2k.ssmp。
intel mpi open mpi
COF-PBE 3.6s 10.9s
COF-B97M-rV 16.8s 23.9s
Cu 0.6s 2.2s

小菜鸟一个,如果有写的不对的地方还请各位老师批评指正^-^


评分 Rate

参与人数
Participants 7
eV +38 收起 理由
Reason
PoorChaos + 5 好物!
physics_xw + 5 好物!
伞阳 + 5 好物!
ccjjww25 + 5 GJ!
Aridea + 5 好物!
Penson + 3 谢谢分享
sobereva + 10

查看全部评分 View all ratings

自由发挥,野蛮生长

1632

帖子

4

威望

4088

eV
积分
5800

Level 6 (一方通行)

喵星人

2#
发表于 Post on 2021-9-11 13:38:42 | 只看该作者 Only view this author
只有ssmp版本要用intelMPI干嘛

432

帖子

11

威望

3422

eV
积分
4074

Level 6 (一方通行)

3#
 楼主 Author| 发表于 Post on 2021-9-11 15:31:00 | 只看该作者 Only view this author
本帖最后由 丁越 于 2021-9-11 16:08 编辑
喵星大佬 发表于 2021-9-11 13:38
只有ssmp版本要用intelMPI干嘛

编译完就这一个版本,虽然你写了make -j 4 ARCH=local VERSION="psmp ssmp", 简单对比了一下还是比openmpi的快好多。但刚多测了几个任务,发现ssmp有时后还没有7.1版本的popt快。请教下老师怎么修改一下toolchain,使得编译出来的含有popt版呢?
自由发挥,野蛮生长

78

帖子

0

威望

3306

eV
积分
3384

Level 5 (御坂)

4#
发表于 Post on 2021-9-11 16:18:09 | 只看该作者 Only view this author
丁越 发表于 2021-9-11 15:31
编译完就这一个版本,虽然你写了make -j 4 ARCH=local VERSION="psmp ssmp", 简单对比了一下还是比openmp ...

我也发现用intel mpi编译很难成功,即使成功有些模块也装不上,用社长的方法用toolchain和open mpi可以编译成功,速度没有用intel mpi快,而且8.2版本比8.1速度快一些

78

帖子

0

威望

3306

eV
积分
3384

Level 5 (御坂)

5#
发表于 Post on 2021-9-11 16:20:58 | 只看该作者 Only view this author
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或耗时较长的任务,内存使用量持续增加,会造成程序终止,对于小任务没啥影响

432

帖子

11

威望

3422

eV
积分
4074

Level 6 (一方通行)

6#
 楼主 Author| 发表于 Post on 2021-9-11 17:47:34 | 只看该作者 Only view this author
waitingseven 发表于 2021-9-11 16:20
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或 ...

好的,我去试试,我用toolchain编译倒是没有出任何问题(系统是centos8),顺利编译完了。但是toolchain默认编译完就只有一个ssmp版的让人很难受。。。
自由发挥,野蛮生长

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

7#
发表于 Post on 2021-9-11 18:32:10 | 只看该作者 Only view this author
这不叫用intel工具链编译。
只能是使用了intel MPI。

用intel全家桶编译,
指的是,所有的组件,均采用intel编译器来编译。
得到所有的toolchain组件后,
再去用intel工具链编译cp2k主体。

目前的源码默认无法得到psmp版本。

可以试试这个解决方案,
https://www.bilibili.com/video/BV1244y117pG/

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
丁越 + 5 谢谢

查看全部评分 View all ratings

High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

55

帖子

0

威望

2359

eV
积分
2414

Level 5 (御坂)

8#
发表于 Post on 2021-9-12 01:04:22 | 只看该作者 Only view this author
waitingseven 发表于 2021-9-11 16:20
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或 ...

内存不断增加整个问题很尴尬,用intel的mpi就是这样,但是换成openmpi,就没啥问题

25

帖子

1

威望

1310

eV
积分
1355

Level 4 (黑子)

9#
发表于 Post on 2021-9-12 09:03:39 | 只看该作者 Only view this author
abin 发表于 2021-9-11 18:32
这不叫用intel工具链编译。
只能是使用了intel MPI。

这其实就是全家桶变异的,编译器/mpi默认全是intel的,toolchain组件自然也是。粗看了你的编译视频,我猜没lz的速度快

251

帖子

4

威望

4401

eV
积分
4732

Level 6 (一方通行)

10#
发表于 Post on 2021-9-12 09:11:59 | 只看该作者 Only view this author
我用楼主的方法编译出了psmp,gcc-8.3.0,intel2018u4,速度很快,甚至比intel编译的7.1还快一点点。
对于内存不断增加,用2018u4的mpi即可解决。

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

11#
发表于 Post on 2021-9-12 10:34:22 | 只看该作者 Only view this author
本帖最后由 abin 于 2021-9-12 10:46 编辑
akakcolin 发表于 2021-9-12 09:03
这其实就是全家桶变异的,编译器/mpi默认全是intel的,toolchain组件自然也是。粗看了你的编译视频,我猜 ...

请自行确认一下toolchain组件的链接情形,
可能也看不出来啥,只能看到链接到MKL。

部分组件使用intel编译器无法通过的。

一般而言,本地编译的,如果优化参数搞对,
应该会比官方的二进制版本快。

8.2 使用intel编译器,处理libxc 5.1.4 5.1.5 5.1.6都会报错。
修改源码后,能编译,不过算例一堆错误的。

8.2使用 GNU+MKL,可以通过所有算例。

使用intel编译器和MKL,算例有645个Wrong.

其实,使用GCC10+MKL,就很快的。
不见得比intel编译器慢。

使用官方推荐的工具链,会更加稳定而已。


另,如果全局设定intel编译器,
就可以所有组件使用英特尔编译器来编译的话,
那之前刘博士的那篇讨论编译的文章,
岂不是多此一举?


补充一下: [hpc4you] toolchain > which mpicc
/opt/intel/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpicc
[hpc4you] toolchain > which mpiicc
/opt/intel/compilers_and_libraries_2018.5.274/linux/mpi/intel64/bin/mpiicc
[hpc4you] toolchain >
注意差异!!!
intelMPI, 既可以搭配自家的编译器工作, 使用mpiicc等.
也可以搭配GNU套件来工作, 使用mpicc.


另, 修改Makefile, 里面有一行, ssmp --> psmp就可以得到psmp版本.

楼上有位朋友有提到,
官方arch中, 有
Linux-x86-64-intel-minimal.psmp
Linux-x86-64-intel-regtest.psmp
如果无特殊组件需求,
使用这两个, 是采用intel编译器, intelMPI, MKL来处理, 速度挺好的.

文件前几行, 就告诉你用啥工具链了. 比如: Linux-x86-64-intel-regtest.psmp

# Tested with: Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.0.5.274 Build 20180823
#              Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.1.1.217 Build 20200306
#              Intel(R) Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.1.3.304 Build 20200925
#              Intel(R) Fortran Intel(R) 64 Compiler Classic for applications running on Intel(R) 64, Version 2021.1 Build 20201112
#              Intel MPI, MKL, LIBINT 2.6.0, LIBXC 5.1.4, LIBXSMM 1.16.1, ELPA 2020.11.001, PLUMED 2.6.2, SPGLIB 1.16.0,
#              LIBVORI 210412, SIRIUS 7.0.2
# Author: Matthias Krack (matthias.krack@psi.ch, PSI, May 2021)


当然, 需要事前使用intel编译器, 处理好,
ELPA
LIBINT
LIBVORI
LIBXC
LIBXSMM   ---> 严重影响计算速度
SIRIU
SPGLIB


以上仅代表个人言论。



High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

25

帖子

1

威望

1310

eV
积分
1355

Level 4 (黑子)

12#
发表于 Post on 2021-9-12 11:31:55 | 只看该作者 Only view this author
Quantum198907 发表于 2021-9-12 01:04
内存不断增加整个问题很尴尬,用intel的mpi就是这样,但是换成openmpi,就没啥问题

跑长时间内存增加  一般就是程序内存泄露,是intel有些版本的mpi有bug,之前曾遇到2019编译的有问题,换编译器版本搞定的

25

帖子

1

威望

1310

eV
积分
1355

Level 4 (黑子)

13#
发表于 Post on 2021-9-12 12:19:03 | 只看该作者 Only view this author
abin 发表于 2021-9-12 10:34
请自行确认一下toolchain组件的链接情形,
可能也看不出来啥,只能看到链接到MKL。

既然楼主都用oneapi构建整个编译环境,我一般默认剩下的源程序的build 都用intel的,这有个路径依赖的惯性

说benchmark出很多错,没验证过。平时只关心自己的研究体系,没出现问题。

用过intel 来编译 libxc5.1.0,印象里没怎么修改,反正调用正常, 5.1.4以上版本没试过,以后这块我关注一下

gcc10+mkl 速度和icc+mkl 差不多是可以理解的,毕竟计算耗时部分都是mkl部分承担,gcc 8以后还是很不错

另外曾经测试过openmpi /intelmpi速度,跨节点时,还是intelmpi优,时间久了不敢保证还是否正确

自己服务器上的cp2k就是用Linux-x86-64-intel-minimal.psmp +oneapi2021.01构建的,运行OK
elpa后面那一坨 自然全intel build。
还是推荐用楼主的这个2021.03版本,主要是发现用新的mkl后程序跑的又快了, 有兴趣的可以自己去比较

elpa后面那一坨 自然全intel build。

至于刘博的说的,条条大路通罗马,一开始决定采用什么方案,后面就要带着一系列的安装配置操作

也是个人体验

1236

帖子

1

威望

3495

eV
积分
4751

Level 6 (一方通行)

14#
发表于 Post on 2021-9-12 12:48:44 | 只看该作者 Only view this author
ssmp根本用不到intel mpi啊,速度差异显然和这个毫无关系

432

帖子

11

威望

3422

eV
积分
4074

Level 6 (一方通行)

15#
 楼主 Author| 发表于 Post on 2021-9-12 13:33:13 | 只看该作者 Only view this author
djjj148 发表于 2021-9-12 09:11
我用楼主的方法编译出了psmp,gcc-8.3.0,intel2018u4,速度很快,甚至比intel编译的7.1还快一点点。
对于 ...

麻烦老师可以详细说明一下编译cp2k的过程么?
自由发挥,野蛮生长

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 15:12 , Processed in 0.187945 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list