计算化学公社

标题: 使用intel全家桶编译cp2k8.2 [打印本页]

作者
Author:
丁越    时间: 2021-9-11 12:58
标题: 使用intel全家桶编译cp2k8.2
本帖最后由 丁越 于 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

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



作者
Author:
喵星大佬    时间: 2021-9-11 13:38
只有ssmp版本要用intelMPI干嘛
作者
Author:
丁越    时间: 2021-9-11 15:31
本帖最后由 丁越 于 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版呢?
作者
Author:
waitingseven    时间: 2021-9-11 16:18
丁越 发表于 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速度快一些
作者
Author:
waitingseven    时间: 2021-9-11 16:20
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或耗时较长的任务,内存使用量持续增加,会造成程序终止,对于小任务没啥影响
作者
Author:
丁越    时间: 2021-9-11 17:47
waitingseven 发表于 2021-9-11 16:20
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或 ...

好的,我去试试,我用toolchain编译倒是没有出任何问题(系统是centos8),顺利编译完了。但是toolchain默认编译完就只有一个ssmp版的让人很难受。。。
作者
Author:
abin    时间: 2021-9-11 18:32
这不叫用intel工具链编译。
只能是使用了intel MPI。

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

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

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


作者
Author:
Quantum198907    时间: 2021-9-12 01:04
waitingseven 发表于 2021-9-11 16:20
用这个Linux-x86-64-intel-minimal.psmp可以编译成功,而且速度快不少,但是有个问题,对于大一些的体系或 ...

内存不断增加整个问题很尴尬,用intel的mpi就是这样,但是换成openmpi,就没啥问题
作者
Author:
akakcolin    时间: 2021-9-12 09:03
abin 发表于 2021-9-11 18:32
这不叫用intel工具链编译。
只能是使用了intel MPI。

这其实就是全家桶变异的,编译器/mpi默认全是intel的,toolchain组件自然也是。粗看了你的编译视频,我猜没lz的速度快
作者
Author:
djjj148    时间: 2021-9-12 09:11
我用楼主的方法编译出了psmp,gcc-8.3.0,intel2018u4,速度很快,甚至比intel编译的7.1还快一点点。
对于内存不断增加,用2018u4的mpi即可解决。
作者
Author:
abin    时间: 2021-9-12 10:34
本帖最后由 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


以上仅代表个人言论。




作者
Author:
akakcolin    时间: 2021-9-12 11:31
Quantum198907 发表于 2021-9-12 01:04
内存不断增加整个问题很尴尬,用intel的mpi就是这样,但是换成openmpi,就没啥问题

跑长时间内存增加  一般就是程序内存泄露,是intel有些版本的mpi有bug,之前曾遇到2019编译的有问题,换编译器版本搞定的
作者
Author:
akakcolin    时间: 2021-9-12 12:19
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。

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

也是个人体验
作者
Author:
biogon    时间: 2021-9-12 12:48
ssmp根本用不到intel mpi啊,速度差异显然和这个毫无关系
作者
Author:
丁越    时间: 2021-9-12 13:33
djjj148 发表于 2021-9-12 09:11
我用楼主的方法编译出了psmp,gcc-8.3.0,intel2018u4,速度很快,甚至比intel编译的7.1还快一点点。
对于 ...

麻烦老师可以详细说明一下编译cp2k的过程么?
作者
Author:
Penson    时间: 2021-9-12 16:40
原来Intel编译器已经全免费了,太好了
作者
Author:
waitingseven    时间: 2021-9-13 09:55
abin 发表于 2021-9-12 10:34
请自行确认一下toolchain组件的链接情形,
可能也看不出来啥,只能看到链接到MKL。

请问 Linux-x86-64-intel-regtest.psmp 与 Linux-x86-64-intel-minimal.psmp 有什么区别吗?还有楼上说用新版oneapi会发生内存泄漏,内存一直增加,我自己测试发现cp2k8.2和8.1都是内存一直增加,但是跑vasp5.4和6.1都没出现问题,这是啥原因啊
作者
Author:
喵星大佬    时间: 2021-9-13 10:16
最稳妥的方法还是用
--math-mode=openblas   --with-openmpi=install --with-openblas=install --with-scalapack=install

所有模块正确编译,算例一个不会出错,其实速度也没慢多少
作者
Author:
abin    时间: 2021-9-13 10:47
waitingseven 发表于 2021-9-13 09:55
请问 Linux-x86-64-intel-regtest.psmp 与 Linux-x86-64-intel-minimal.psmp 有什么区别吗?还有楼上说用 ...

这两个文件是官方给的.

有何差异自己diff看一下.
如果看不懂, 那就不用捣鼓自己编译调优了.

另, 使用官方推荐的工具链进行编译哦, 否则MPI容易死掉.

另, 我编译的cp2k 8.1 8.2都比较稳定, 7.1也很稳定.
仅仅是采用官方推荐的工具链而已.
作者
Author:
djjj148    时间: 2021-9-13 13:00
丁越 发表于 2021-9-12 13:33
麻烦老师可以详细说明一下编译cp2k的过程么?

编译出来的程序有问题。make test全通过,但是跑优化的时候无法进入下一个离子步。就不放出来了。
作者
Author:
Aridea    时间: 2021-9-13 17:09
abin 发表于 2021-9-12 10:34
请自行确认一下toolchain组件的链接情形,
可能也看不出来啥,只能看到链接到MKL。

王老师这个psmp方法可以的呀,我正好想试试
作者
Author:
Aridea    时间: 2021-9-14 08:52
大兄弟,请教一下,为啥我的centos 7.6还有wsl按照帖子炒作最后都有同样的报错呀,好奇怪,这种情况有啥办法嘛;
另外想问一下帖子里intel mpi 和openmpi程序执行代码是啥,mpirun ,,,,,OMP_NUM_THEARD 还有ssmp,popt或者psmp具体怎么执行的呀,要不然直接比较不是太明白测试条件,最主要还是上面的问题,这个ONEAPI在make报错怎么办

作者
Author:
丁越    时间: 2021-9-14 22:16
Aridea 发表于 2021-9-14 08:52
大兄弟,请教一下,为啥我的centos 7.6还有wsl按照帖子炒作最后都有同样的报错呀,好奇怪,这种情况有啥办 ...

你能换成centos8就换了,7的话看看刘博的帖子,升级gcc之类的很麻烦。这种报错我也不会解决,不行就直接gcc,gfortran编译,这样编译出来的至少有popt版的,intel编译器只有ssmp,效率看体系,有时候比openmpi的popt快,有时候慢好多。
作者
Author:
Aridea    时间: 2021-9-15 09:28
丁越 发表于 2021-9-14 22:16
你能换成centos8就换了,7的话看看刘博的帖子,升级gcc之类的很麻烦。这种报错我也不会解决,不行就直接g ...

嗯嗯,我这个centos7.6已经升级了gcc* 9(gcc,g++,gfortran),这个报错应该不是gcc gfortran的问题吧
作者
Author:
ChemG    时间: 2021-9-15 09:42
Aridea 发表于 2021-9-15 09:28
嗯嗯,我这个centos7.6已经升级了gcc* 9(gcc,g++,gfortran),这个报错应该不是gcc gfortran的问题吧

简单的升级gcc9有可能lib和include还是指向本机的gcc,用toolchain编译的时候能看到是不是指向了新的gcc。感觉还是直接用centos8靠谱点。因为我用centos7编译cp2k也总有问题,换centos8就好很多了
作者
Author:
Aridea    时间: 2021-9-15 09:55
ChemG 发表于 2021-9-15 09:42
简单的升级gcc9有可能lib和include还是指向本机的gcc,用toolchain编译的时候能看到是不是指向了新的gcc ...

这样呢,多谢分享~
作者
Author:
LittlePupil    时间: 2021-10-8 23:59
成功编译ssmp版本后,“make -j 4 ARCH=Linux-x86-64-intel-minimal VERSION="psmp"”可以编译出psmp版本,但奇怪的是,拿sob老师的算例测试,设置OMP_NUM_THREADS为1跑这个psmp版本,居然比设置OMP_NUM_THREADS为4跑ssmp版本还慢了一秒多,即使修改makefile的“O2”为“O3”也没有明显改善。
作者
Author:
ChemG    时间: 2021-10-9 09:38
djjj148 发表于 2021-9-13 13:00
编译出来的程序有问题。make test全通过,但是跑优化的时候无法进入下一个离子步。就不放出来了。

http://bbs.keinsci.com/thread-25553-1-1.html 看这篇帖子
作者
Author:
gog    时间: 2021-11-4 15:34
Penson 发表于 2021-9-12 16:40
原来Intel编译器已经全免费了,太好了

2021的版本是这样。
作者
Author:
Penson    时间: 2021-11-6 11:15
gog 发表于 2021-11-4 15:34
2021的版本是这样。

很好的福利
作者
Author:
PoorChaos    时间: 2021-11-6 23:37
本帖最后由 PoorChaos 于 2021-11-7 00:03 编辑

我想用你的方法重新编译CP2K
看您说注释,不会用注释命令,可否举例说明?谢谢
另外按照老师的办法ORCA安装了openMPI,这样就会冲突

我把source /home/xxx/intel/oneapi/setvars.sh 加进去 再运行CP2K 出现如下错误
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 1.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.



但是加进去以后 测试CP2K变成77秒,删除source /home/xxx/intel/oneapi/setvars.sh 测试时间就恢复到7秒了





作者
Author:
PoorChaos    时间: 2021-11-7 16:27
PoorChaos 发表于 2021-11-6 23:37
我想用你的方法重新编译CP2K
看您说注释,不会用注释命令,可否举例说明?谢谢
另外按照老师的办法ORCA安 ...

请教了sob老师,还是建议用openmpi编译CP2K
作者
Author:
丁越    时间: 2021-11-8 09:29
本帖最后由 丁越 于 2021-11-8 09:32 编辑
PoorChaos 发表于 2021-11-6 23:37
我想用你的方法重新编译CP2K
看您说注释,不会用注释命令,可否举例说明?谢谢
另外按照老师的办法ORCA安 ...

运行cp2k时,.bashrc下intelmpi和openmpi只能存在一个,即你要么是用基于intelmpi的cp2k,就把基于openmpi的cp2k的路径给注释了。目前来说我个人觉得还是用openmpi好,intel全家桶编译出来的没有psmp版本(popt),ssmp运行好多时候不如popt的
作者
Author:
PoorChaos    时间: 2021-11-8 09:36
丁越 发表于 2021-11-8 09:29
运行cp2k时,.bashrc下intelmpi和openmpi只能存在一个,即你要么是用基于intelmpi的cp2k,就把基于openmp ...

是的,我又重新用openmpi了,
但是请问一下,注释是怎么注释的,
在开头行加#就可以了吗?
比如
#
source /home/feng/cp2k-8.2/tools/toolchain/install/setup

还是#source /home/feng/cp2k-8.2/tools/toolchain/install/setup


作者
Author:
丁越    时间: 2021-11-8 09:51
PoorChaos 发表于 2021-11-8 09:36
是的,我又重新用openmpi了,
但是请问一下,注释是怎么注释的,
在开头行加#就可以了吗?

#source /home/feng/cp2k-8.2/tools/toolchain/install/setup是正确的,#哪一行就代表注释哪一行,抽空多看看《鸟哥的linux私房菜》,linux的基本运行常识必须得掌握。
作者
Author:
PoorChaos    时间: 2021-11-8 09:58
丁越 发表于 2021-11-8 09:51
#source /home/feng/cp2k-8.2/tools/toolchain/install/setup是正确的,#哪一行就代表注释哪一行,抽空多 ...

谢谢 正在看,打算买纸质
看到隔壁说是动态管理 哪个环境加载哪个环境
http://bbs.keinsci.com/thread-24999-1-1.html
作者
Author:
丁越    时间: 2021-11-8 10:01
PoorChaos 发表于 2021-11-8 09:58
谢谢 正在看,打算买纸质
看到隔壁说是动态管理 哪个环境加载哪个环境
http://bbs.keinsci.com/threa ...

个人服务器就没必要使用module模块化管理了,但是集群得用。easybuild比较好用。
作者
Author:
PoorChaos    时间: 2021-11-8 10:12
丁越 发表于 2021-11-8 10:01
个人服务器就没必要使用module模块化管理了,但是集群得用。easybuild比较好用。

好 我摸索一下怎么用easybuild
作者
Author:
丁越    时间: 2021-11-8 10:33
PoorChaos 发表于 2021-11-8 10:12
好 我摸索一下怎么用easybuild

如果懒得自己编译easybuild的话,yum直接下载module这个软件也行,也可以实现module模块化管理。
作者
Author:
PoorChaos    时间: 2021-11-8 10:42
丁越 发表于 2021-11-8 10:33
如果懒得自己编译easybuild的话,yum直接下载module这个软件也行,也可以实现module模块化管理。

完全不会啊,新手
我慢慢摸索
作者
Author:
planet5460    时间: 2022-3-8 03:11
djjj148 发表于 2021-9-12 09:11
我用楼主的方法编译出了psmp,gcc-8.3.0,intel2018u4,速度很快,甚至比intel编译的7.1还快一点点。
对于 ...

楼主,2018u4,能不能共享一份呢,谢谢
作者
Author:
planet5460    时间: 2022-3-8 03:13
akakcolin 发表于 2021-9-12 12:19
既然楼主都用oneapi构建整个编译环境,我一般默认剩下的源程序的build 都用intel的,这有个路径依赖的惯 ...

楼主,能不能共享下你用one编译的全过程,非常感谢
作者
Author:
zhukangg    时间: 2022-5-9 17:08
akakcolin 发表于 2021-9-12 11:31
跑长时间内存增加  一般就是程序内存泄露,是intel有些版本的mpi有bug,之前曾遇到2019编译的有问题,换 ...

那请问哪个版本的Intelmpi解决了这个问题呢?2019.updat1或者2020,2021可以吗




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3