计算化学公社
标题: CP2K第一性原理程序在Linux中的安装方法 [打印本页]
作者Author: sobereva 时间: 2021-2-17 06:47
标题: CP2K第一性原理程序在Linux中的安装方法
CP2K第一性原理程序在Linux中的安装方法
Installation method of CP2K first principle program in Linux
First release: 2021-Feb-16 Last update: 2026-Jan-9
1 前言
CP2K(https://www.cp2k.org)是非常优秀、功能十分强大、流行度相当高的第一性原理程序,开源免费,跑中、大周期性体系的速度甩基于平面波的程序如Quantum ESPRESSO和VA$P一条街以上。笔者开发的Multiwfn(http://sobereva.com/multiwfn)的创建CP2K输入文件的功能使得CP2K创建常见任务的输入文件十分方便(见《使用Multiwfn非常便利地创建CP2K程序的输入文件》http://sobereva.com/587),尤其是笔者从2023年起开设了真正全面、系统、深入浅出讲解CP2K正确使用的“北京科音CP2K第一性原理计算培训班”(http://www.keinsci.com/KFP),从而有了极好的从零开始系统学习CP2K并达到精通的机会,使得CP2K在国内已变得相当流行。本文就详细介绍一下CP2K怎么在Linux系统中进行安装。本文讲的是最标准的自行编译的安装方式。也有一些安装预编译版本的方法,流程虽然更为简单,但预编译版本为了兼容性考虑,无法充分利用你的CPU指令集并针对CPU架构进行优化,因此原理上性能不如自己编译的好。
由于CP2K从2026.1版本开始编译方式有了极大的变化,因此本文分为两部分,第2节讲CP2K >=2026.1版本的安装和运行方法(2026-Jan-8最初写的,之后会不断更新),第3节讲<=2025.2版本的安装和运行方法(2021-Feb-16最初写的,最后一次更新于2025-Sep-12,之后不再更新)。这两部分内容有很多是重复的。
提醒零基础初学者:看清楚本文里每一个空格!并且为了免得照抄都抄不对,建议直接从本文里复制命令!
2 CP2K >=2026.1版本的安装和运行
2.1 前言
下面的安装方法在Rocky Linux 9.1和10.1亲测都顺利通过,不建议用更老版本系统(更老的系统可能需要自己升级gcc,需要折腾)。Rocky Linux是我目前最推荐的用于科学计算目的计算机的Linux操作系统,没有之一,作为服务器和个人计算机的系统都很适合。CentOS Stream和Redhat与Rocky Linux没实质区别,其用户也可以直接用下文的方法。对于Ubuntu(我不喜欢)等其它Linux操作系统的用户我不提供帮助,可参考本文根据实际遇到的情况随机应变。
PS:常有人问我装Rocky Linux的时候应该选什么,建议Base Environment选Workstation,组件选GNOME Applications、Legacy UNIX Compatibility、Development Tools、Scientific Support(不同版本系统能选的选项或选项名有所差异,随机应变)。
CP2K是基于Fortran的程序,但它依赖的一堆库很多都是C/C++写的,所以Fortran和C/C++编译器都得有。CP2K的编译对于编译器有明确的要求,兼容情况见https://www.cp2k.org/dev:compiler_support。本文基于Linux系统自带的gcc/gfortran进行编译,运行gcc -v命令可以看到当前系统里的gcc版本。用合适版本的Intel的icc和ifort编译器来编译CP2K及相关的库也可以,但本文不涉及。
如果你的机子里还没装gcc/gfortran,也即运行gcc命令、gfortran命令时提示command not found,应当在联网的情况下运行dnf install gcc以及dnf install gcc-gfortran安装上。
CP2K会利用到BLAS和LAPACK标准库中的子程序。默认情况下会用OpenBLAS库提供的这部分子程序,但据说OpenBLAS的LAPACK子程序的效率不如Intel的MKL数学库好,因此改用MKL可能计算速度更快,不过笔者的一些简单的对比测试并未发现用MKL时速度有显著优势,因此本文不用MKL,省得读者还要额外安装MKL。
CP2K的少部分计算也支持GPU加速,但对于广大草根阶层的用户,相对于纯CPU计算来说并没有什么性价比,因此本文不涉及编译GPU加速版。
下面就开始安装过程的说明。这里以安装2026.1版为例,对于之后的版本也都适用。如果情况发生了变化,我大概率会更新本文,请注意本文开头写的更新日期。笔者使用的是root用户(PS:对于个人独占的计算机,用root用户最方便,笔者从未翻过车,并且极度反感坊间妖魔化root的说法)。
2.2 安装CP2K依赖的库
去https://github.com/cp2k/cp2k/releases/下载CP2K源代码包cp2k-2026.1.tar.bz2,运行tar -xf cp2k-2026.1.tar.bz2命令解压之。下文假设解压后的目录是/sob/cp2k-2026.1/。
CP2K依赖于一大堆库,最方便的方法是用自带的toolchain脚本一次性安装。运行以下命令
cd /sob/cp2k-2026.1/tools/toolchain/
./install_cp2k_toolchain.sh --with-openmpi=install --with-plumed=install --with-tblite=install --with-dftd4=install -j [你机子的CPU物理核心数]
之后这个toolchain脚本就会依次下载各个库的压缩包到toolchain/build目录下并解压和自动编译,编译产生的可执行文件、库文件、头文件等都自动装到了toolchain/install目录下。其中其中最耗时的是编译libint那一步。
一些重要细节:
• 运行./install_cp2k_toolchain.sh --help可以查看toolchain的帮助。可见有的库默认是安装的,有的默认不装,通过选项来决定,可以按需调整。以上命令已经把CP2K最重要的库都装上了。toolchain脚本的使用细节见https://github.com/cp2k/cp2k/blo ... toolchain/README.md。
• --with-openmpi=install代表安装OpenMPI库,这使得编译出来的CP2K可以通过MPI方式并行计算。CP2K也支持其它MPI库如Intel MPI和MPICH。我个人比较习惯用OpenMPI,这也是目前最主流的。重要提示:如果你的机子里已经有了OpenMPI,应当用--with-openmpi=system,这使得CP2K直接用机子里现成的OpenMPI,否则额外再自动装一个OpenMPI可能造成一些冲突。
• --with-plumed=install代表安装默认不自动装的PLUMED库,这使得CP2K可以结合PLUMED做增强采样的动力学。如果你不需要此功能的话可以不加这个选项,可以节约少量编译时间。
• --with-tblite=install明确要求编译tblite,这使得CP2K可以利用tblite做GFN2-xTB计算。你若不需要这个可以写--with-tblite=no避免安装。
• --with-dftd4=install明确要求编译dftd4,这使得CP2K支持DFT-D4色散校正,此方法参见《DFT-D4色散校正的简介与使用》(http://sobereva.com/464)。你若不需要这个可以写--with-dftd4=no避免安装。
• toolchain默认用所有CPU逻辑核心并行编译,可以自行加上-j [并行核数]来明确指定用多少核,建议设成物理核心数。编译的耗时和CPU核数关系很大。
• toolchain默认自动下载和编译cmake。如果你通过yum或dnf已经装过cmake而且其版本较新,可以再加上--with-cmake=system用当前系统里的cmake,能节约编译时间。
• 对于CP2K 2026.1,在上述命令执行完毕后,toolchain/build目录约占8 GB,里面的文件之后用不着,因此toolchain运行成功后可以把这个build目录删掉节约硬盘。
• 如果toolchain运行过程中某个库编译失败,可以去toolchain/build目录下的那个库的目录中去找编译过程输出的log文件,在里面搜error根据报错试图分析原因。toolchain运行失败后可以重新运行,它会根据根据toolchain/build目录的内容做判断,之前已经下载和编译成功的库会自动跳过,而从失败的库继续编译。如果把build和install目录都删了,则toolchain会从头执行。
• 如果在安装某个库的过程中一直卡着,通过top命令发现CPU也没在编译库,那么几乎一定是因为网速太慢导致那些库的压缩包老也下载不完(在大陆区域不可描述的访问国际互联网的条件下尤为常见)。可以去tools/toochain/build目录下看看正在装的这个库的压缩包,如果尺寸特别小,而且尺寸增加得特别缓慢,说明就是这个问题所致。解决方法是开微*N加速访问国际互联网。还一个办法是找个访问国际互联网通畅的机子或者拜托朋友,在那里安装一次当前版本的CP2K,然后把build目录下的.tgz、.tar.gz、.tar.bz2那些库的压缩包拷到之前那个机子的build目录下,这样那个机子在安装CP2K过程中就会直接用这些包而不会试图下载了,对于没法访问Internet的机子也可以这样离线安装CP2K。还有一种方法是直接自己去https://www.cp2k.org/static/downloads/下载CP2K编译过程中要用到的各种包放到build目录下。但要注意,tblite安装过程中还会(讨厌地)联网下载额外的东西,因此没有网的话应当加上--with-tblite=no。
2.3 编译CP2K
接着上一节,运行以下命令
source /sob/cp2k-2026.1/tools/toolchain/install/setup
cd /sob/cp2k-2026.1
mkdir build
cd build
cmake -S .. -DCP2K_USE_EVERYTHING=ON -DCP2K_USE_DLAF=OFF -DCP2K_USE_PEXSI=OFF -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF -DCMAKE_INSTALL_PREFIX=/sob/cp2k-2026.1/exe/ -DCP2K_DATA_DIR=/sob/cp2k-2026.1/data
make install -j96 (96是并行编译用的物理核心数,你的机子实际是多少就写多少)
我在双路7R32 96核机子上5分多钟编译完毕。
注:cmake这一步的更多的信息可以参考https://manual.cp2k.org/trunk/ge ... ld-from-source.html和https://manual.cp2k.org/trunk/technologies/libraries.html。
编译出的可执行程序现在都产生在了/sob/cp2k-2026.1/exe/bin目录下,里面的cp2k.psmp就是CP2K的可执行文件了。
把以下内容加入到~/.bashrc文件里(这是你的用户主目录下的隐藏文件.bashrc,要求文件管理器显示隐藏文件时才能看到。也可以运行vi ~/.bashrc命令利用vi文本编辑器编辑):
source /sob/cp2k-2026.1/tools/toolchain/install/setup
export PATH=$PATH:/sob/cp2k-2026.1/exe/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/sob/cp2k-2026.1/exe/lib64
重新进入终端后,就可以通过cp2k.psmp命令运行cp2k了。运行cp2k.psmp -v可以查看CP2K的版本、编译时用的库和参数信息。
2.4 运行和测试CP2K
这里提供一个简单的输入文件用于测试:http://sobereva.com/attach/586/test.inp。这是Multiwfn生成的2*2*2金刚石超胞做PBE/DZVP-MOLOPT-SR-GTH单点计算的输入文件。
cp2k.psmp同时支持MPI并行和OpenMP并行,并且可以二者结合,即每一个MPI并行进程下属多个OpenMP线程。例如16个物理核心的机子,有几种跑法:
(1)MPI进程数=16,OpenMP线程数=1。此时完全靠MPI方式并行
(2)MPI进程数=4,OpenMP线程数=4。此时靠MPI与OpenMP结合并行(也可以用其它组合,比如8*2、2*8等,乘积等于物理核心数即可)
(3)MPI进程数=1,OpenMP线程数=16。此时完全靠OpenMP方式并行
靠MPI并行速度一般比靠OpenMP并行更快,因为CP2K很多代码只支持MPI并行而不支持OpenMP并行,而且OpenMP并行当线程数多的时候存在内存访问争抢问题,因此速度是(1)>(2)>(3)。但OpenMP方式并行可以在不同核心之间充分共用内存中的数据而避免很多重复储存,因此内存消耗量也是(1)>(2)>(3)。
MPI并行进程数由mpirun -np后面的数值决定。OpenMP线程由OMP_NUM_THREADS环境变量决定,如果你运行export OMP_NUM_THREADS=4命令将这个环境变量定义为4,就代表每个MPI进程下属4个OpenMP线程。注意哪怕你完全不想用OpenMP方式并行,也不能不设OMP_NUM_THREADS环境变量,而必须设为1,否则OpenMP线程数会自动设为所有逻辑核心数(如果此时还利用了MPI并行,则相当于要求的并行核数远超实际物理核心数,将会因为资源争抢而算得超极慢)。
这里给出运行例子,输入文件是test.inp,输出信息既存到test.out里也显示在屏幕上:
(1)MPI进程数=16,OpenMP线程数=1:在已运行过export OMP_NUM_THREADS=1的前提下运行mpirun -np 16 cp2k.psmp test.inp |tee test.out
(1)MPI进程数=4,OpenMP线程数=4:在已运行过export OMP_NUM_THREADS=4的前提下运行mpirun -np 4 cp2k.psmp test.inp |tee test.out
(3)MPI进程数=1,OpenMP线程数=16:在已运行过export OMP_NUM_THREADS=16的前提下运行cp2k.psmp test.inp |tee test.out
一些技巧和细节:
如果不希望输出信息同时显示在屏幕上,把|tee改成>
为了避免每次进入终端都需要重新定义OMP_NUM_THREADS环境变量,建议把定义它的语句写入到~/.bashrc文件里,每次进入终端后会自动生效。
可以在mpirun后面直接指定运行当前任务用的临时的OMP_NUM_THREADS设置,例如下面的例子用6个MPI进程、4个OpenMP线程,总共24核并行:
mpirun -np 6 -x OMP_NUM_THREADS=4 cp2k.psmp test.inp > test.out
为了运行时省事,可以在~/.bashrc里加入alias cp2k='mpirun -np 16 -x OMP_NUM_THREADS=1 cp2k.psmp'。重新进入终端后,只要输入
cp2k test.inp |tee test.out就等于用16核完全靠MPI并行了,即等价于输入了mpirun -np 16 -x OMP_NUM_THREADS=1 cp2k.psmp test.inp |tee test.out。
如果没特殊情况,强烈建议完全通过MPI方式并行,效率最高。但对于一些任务恰当利用一些OpenMP并行是必须的,否则往往会遇到内存不足而崩溃。典型的就是振动分析和跑NEB任务,需要跑一大堆副本。北京科音CP2K第一性原理计算培训班(http://www.keinsci.com/KFP)里讲相应类型计算的时候很细致地介绍了在并行方式上需要做的重要考虑。杂化泛函计算对周期性大体系、大基组来说要算的双电子积分量巨大,这一点我在《CP2K做杂化泛函计算的关键要点和简单例子》(http://sobereva.com/690)中说了。为了能让内存中尽可能多地储存双电子积分避免SCF迭代过程中重复计算,往往也需要MPI与OpenMP相结合来节约内存。
3 CP2K <=2025.2版本的安装和运行
3.1 前言
最初写本文的时候我用的是CentOS,后来我改用Rocky Linux 9后实测也可以用与本文完全相同的方式安装。Rocky Linux是我目前最推荐用于科学计算目的计算机的Linux操作系统,没有之一。对于Ubuntu等其它Linux操作系统的用户我无法提供帮助,请参考本文随机应变。
最初写本文的时候CP2K最新的是8.1版。后来以同样的方法,经测试也可以顺利编译从8.2一直到2025.2的全部版本。安装其它版本的情况请随机应变。
CP2K有sopt、ssmp、popt、psmp四种版本,如果你不了解的话,先看一下本文文末附录中的介绍。
CP2K有三种安装方式:
(1)先依次手动编译CP2K所需要的各个库,然后再编译CP2K,具体过程见官方说明https://github.com/cp2k/cp2k/blob/master/INSTALL.md。我不推荐这种做法,因为CP2K涉及的库特别多,一个一个手动编译颇为麻烦。如果你有经验和耐心可以这么鼓捣。
(2)使用CP2K自带的toolchain脚本。toolchain可以自动把CP2K依赖的各种库都一一下载并且自动编译,最后输入几行命令再把CP2K编译出来就OK了。整个过程非常简单省事,下文第2节就介绍这种做法。
(3)直接用官方预编译的ssmp版,下载后直接就能用,极为方便,下文第3节会说具体做法。
3.2 基于toolchain安装CP2K
3.2.1 相关知识
CP2K是基于Fortran的程序,但它依赖的一堆库很多都是C/C++写的,所以Fortran和C/C++编译器都得有。CP2K的编译对于编译器有明确的要求,兼容情况见https://www.cp2k.org/dev:compiler_support。可见如果用gcc+gfortran来编译的话,gcc必须>=5.5版。CentOS 7.x自带的gcc是4.8.5版,因此没法直接编译,要么升级gcc编译器(具体做法自行google,有把系统弄出毛病的风险),要么用CentOS >=8.0版。CentOS 8.0自带的gcc是8.3.1,可以非常顺利地结合toolchain编译CP2K(PS:常有人问我装CentOS或Rocky Linux的时候应该选什么,建议Base Environment选Workstation,组件选GNOME Applications、Legacy UNIX Compatibility、Development Tools、Scientific Support。不同版本能选的选项或选项名可能有所差异,随机应变)。
用合适版本的Intel的icc和ifort编译器来编译CP2K及相关的库也可以,这样CentOS 7.x的用户也省得升级gcc或者换系统了。但19.0.1版结合toolchain用的时候笔者发现有的库编译不过去,笔者不打算深究,本文就不说这种做法了。
toolchain运行过程中会自动下载很多库的压缩包,所以必须联网,而且网速还不能太慢,否则有的库半天也下不下来,甚至最终失败。如果你在大陆,强烈建议通过科学的方式加速对外部网络的访问。
关于MKL数学库
CP2K会利用到BLAS和LAPACK标准库中的子程序。默认情况下会用OpenBLAS库提供的这部分子程序,但据说OpenBLAS的LAPACK子程序的效率不如Intel的MKL数学库好,因此改用MKL可能计算速度更快,不过笔者的一些简单的对比测试并未发现用MKL时速度有显著优势。如果你想用MKL的话,那么运行下一节的toolchain前先把MKL装到系统里,即运行下列命令:
dnf config-manager --add-repo https://yum.repos.intel.com/mkl/setup/intel-mkl.repo
rpm --import https://yum.repos.intel.com/inte ... W-PRODUCTS-2019.PUB
dnf install intel-mkl
此时MKL会被装到/opt/intel/目录下,被装到笔者机子里的是MKL 2018版,占2.2GB硬盘。把下面的语句加入到~/.bashrc文件中,然后重新进入终端使之生效
source /opt/intel/parallel_studio_xe_2018.0.033/bin/psxevars.sh
上面这行语句会使得MKLROOT环境变量指向MKL库的目录。当运行toolchain的时候发现MKLROOT环境变量被指定了,就会自动利用MKL数学库(无需额外写--with-mkl选项)。
如果你想离线安装MKL,可以去Intel官网免费注册并下载Intel OneAPI base toolkit离线安装包。安装的时候只选择安装其中的MKL就够了。装好后把下面这句加入~/.bashrc文件里,然后重新进入终端使之生效
source /opt/intel/oneapi/mkl/[实际版本号]/env/vars.sh
但这样装MKL的情况下,笔者遇到过CP2K 8.1的toolchain在装COSMA库的时候编译不过去的问题。如果你也遇到了此问题,把toolchain的命令后头加上--with-cosma=no避免装COSMA库即可,这对性能影响甚微。
3.2.2 通过toolchain安装CP2K依赖的库
去https://github.com/cp2k/cp2k/releases/下载CP2K压缩包cp2k-8.1.tar.bz2,运行tar -xf cp2k-8.1.tar.bz2命令解压之。下文假设解压后的目录是/sob/cp2k-8.1/。
运行以下命令
cd /sob/cp2k-8.1/tools/toolchain/
./install_cp2k_toolchain.sh --with-sirius=no --with-openmpi=install --with-plumed=install
之后这个toolchain脚本就会依次下载各个库的压缩包到toolchain/build目录下并解压和自动编译,编译产生的可执行文件、库文件、头文件等都自动装到了toolchain/install目录下。在笔者的普通四核机子结合非常畅通的网络下,整个过程耗时约两个小时。其中最耗时的是编译libint那一步,花了一个小时有余,一定要耐心。
以下信息应了解一下
• 如果运行上述脚本后提示ERROR: (./scripts/install_gcc.sh) cannot find gfortran,应当运行dnf install gcc-gfortran先把gfortran编译器装上,然后重新运行脚本。
• 运行./install_cp2k_toolchain.sh --help可以查看toolchain的帮助。可见有的库默认是安装的,有的默认不装,通过选项来决定,可以按需调整。toolchain脚本的使用细节见https://github.com/cp2k/cp2k/blo ... toolchain/README.md
• --with-sirius=no选项代表不装本来自动会装的SIRIUS库。这个库使得CP2K可以像Quantum ESPRESSO那样完全基于平面波+赝势做计算,但一般这用不上,想做这种计算的人一般直接就用Quantum ESPRESSO了,其安装见《Quantum ESPRESSO在Linux中的安装方法》(http://sobereva.com/562)。
• --with-openmpi=install代表安装OpenMPI库,这使得编译出来的CP2K可以通过MPI方式并行计算。CP2K也支持其它MPI库如Intel MPI和MPICH。我个人比较习惯用OpenMPI,这也是目前最主流的。重要提示:如果你的机子里已经有了OpenMPI,应当用--with-openmpi=system,这使得CP2K直接用机子里现成的OpenMPI,否则额外再自动装一个OpenMPI可能造成一些冲突。
• --with-plumed=install代表安装默认不自动装的PLUMED库,这使得CP2K可以结合PLUMED做增强采样的动力学。如果你不需要此功能的话可以不加这个选项,可以节约少量编译时间。
• 从CP2K 2024.2开始支持了DFT-D4色散校正,这种校正的常识见《DFT-D4色散校正的简介与使用》(http://sobereva.com/464)。想用DFT-D4的话必须再额外带上--with-ninja --with-dftd4。
• toolchain默认用所有CPU核心并行编译,可以自行加上-j [并行核数]来明确指定用多少核。编译的耗时和CPU核数关系很大。笔者在36核机子上也就花了不到20分钟就把toolchain过程全都完成了。
• toolchain默认自动下载和编译cmake。如果你通过yum或dnf已经装过cmake而且其版本较新,可以再加上--with-cmake=system用当前系统里的cmake,能节约编译时间。
• 注意硬盘的空余空间应当足够。对于CP2K 8.1在上述命令执行完毕后,toolchain/build目录约占9GB,toolchain/install目录占约2GB。如果硬盘吃紧,建议toolchain运行成功后把这个build目录删掉,里面的文件之后用不着。
• 如果toolchain运行过程中某个库编译失败,可以去toolchain/build目录下的那个库的目录中去找编译过程输出的log文件,在里面搜error根据报错试图分析原因。toolchain运行失败后可以重新运行,它会根据根据toolchain/build目录的内容做判断,之前已经下载和编译成功的库会自动跳过,而从失败的库继续编译。如果把build和install目录都删了,则toolchain会从头执行。
• 如果在安装某个库的过程中一直卡着,通过top命令发现CPU也没在编译库,那么几乎一定是因为网速太慢导致那些库的压缩包老也下载不完(在大陆区域不可描述的访问国际互联网的条件下尤为常见)。可以去tools/toochain/build目录下看看正在装的这个库的压缩包,如果尺寸特别小,而且尺寸增加得特别缓慢,说明就是这个问题所致。解决方法是开微屁恩加速访问国际互联网。还一个办法是找个访问国际互联网通畅的机子或者拜托朋友,在那里安装一次当前版本的CP2K,然后把build目录下的.tgz、.tar.gz、.tar.bz2那些库的压缩包拷到之前那个机子的build目录下,这样那个机子在安装CP2K过程中就会直接用这些包而不会试图下载了,对于没法访问Internet的机子也可以这样离线安装CP2K。还有一种方法是直接自己去https://www.cp2k.org/static/downloads/下载CP2K编译过程中要用到的各种包放到build目录下。
3.2.3 编译CP2K
接着上一节,现在把/sob/cp2k-8.1/tools/toolchain/install/arch/下所有文件拷到/sob/cp2k-8.1/arch目录下。这些文件定义了编译不同版本的CP2K所需的参数,其内容是toolchain脚本根据装的库和当前环境自动产生的。
然后运行以下命令
source /sob/cp2k-8.1/tools/toolchain/install/setup
cd /sob/cp2k-8.1
make -j 4 ARCH=local VERSION="ssmp psmp"
-j后面的数字是并行编译用的核数,机子有多少物理核心建议就设多少。在笔者的普通4核机子上花了40分钟编译完。
注:如果编译中途报错,并且从后往前找error的时候看到cannot find -lz的报错提示,则运行dnf install zlib-devel命令装上zlib库,再重新运行上面的make那行命令即可。
编译出的可执行程序现在都产生在了/sob/cp2k-8.1/exe/local目录下,共1.1GB。这里面cp2k.popt、cp2k.psmp、cp2k.sopt、cp2k.ssmp就是我们所需要的CP2K的可执行文件了(popt和sopt其实分别是psmp和ssmp的符号链接)。
把以下内容加入到~/.bashrc文件里:
source /sob/cp2k-8.1/tools/toolchain/install/setup
export PATH=$PATH:/sob/cp2k-8.1/exe/local
重新进入终端后,就可以通过cp2k.ssmp等命令运行cp2k了。运行诸如cp2k.ssmp -v可以查看CP2K的版本、编译时用的库和参数信息。
注1:上面source这行必须有,因为有的库提供的.so文件是CP2K启动时所需的,source这个脚本使得相应的库的目录被加入到动态库的搜索路径中。而且用了这个之后toolchain过程中装的OpenMPI的可执行文件mpirun等才能直接用。
注2:cp2k-8.1目录下的lib和obj目录分别存的是CP2K编译过程产生的静态库文件和.o文件,总体积不小。由于之后用不着,因此如果想省硬盘可以把这俩目录删掉。
3.2.4 直接用官方的预编译版CP2K
对于CP2K 8.1,官方预编译版只提供了ssmp的,并且为了兼容性考虑,编译选项比较保守,没有根据CPU内核进行优化、没有利用SIMD指令集、用的是-O2而非更激进优化的-O3选项,也没用MKL。不过这并不代表官方预编译版的就很慢,笔者对简单任务测试过发现在速度上和自己编译的ssmp版差异不太大。不过,如果对某些类型任务发现ssmp版的CPU占用率普遍较低,吐血建议自己编译popt版,此时有可能二者速度差异超大、用ssmp完全发挥不出CP2K本来的代码效率,甚至可能ssmp版几乎算不动。
使用官方的预编译的ssmp版CP2K的做法如下:
和2.2节所述相同,先下载cp2k-8.1.tar.bz2压缩包并解压到比如/sob/cp2k-8.1目录。
去https://github.com/cp2k/cp2k/releases/下载CP2K的预编译版可执行文件cp2k-8.1-Linux-x86_64.ssmp,改名为cp2k.ssmp并随便放到一个位置,假设放到了/sob/cp2k-8.1目录下。
将下面两行加入到~/.bashrc文件中:
export PATH=$PATH:/sob/cp2k-8.1
export CP2K_DATA_DIR=/sob/cp2k-8.1/data
保存后重新进入终端,CP2K就可以通过cp2k.ssmp命令使用了(ssmp版CP2K不是必须叫cp2k.ssmp,也可以改名为cp2k,这样运行更方便)。
为什么设CP2K_DATA_DIR环境变量这里说一下。在CP2K输入文件中,如果诸如BASIS_SET_FILE_NAME、POTENTIAL_FILE_NAME等关键词只定义了文件名而没有给路径,程序默认先在当前目录下搜索相应文件,找不到的话去CP2K_DATA_DIR搜索。CP2K_DATA_DIR对应的是编译的时候CP2K目录下的data目录的路径,但开发者在编译的时候其对应的路径显然跟我们当前情况不符,因此这里通过export来将CP2K_DATA_DIR环境变量改成自己机子里实际的data目录的路径。
3.2.5 运行和测试CP2K
这里提供一个简单的输入文件用于测试:http://sobereva.com/attach/586/test.inp。这是Multiwfn生成的2*2*2金刚石超胞做PBE/DZVP-MOLOPT-SR-GTH单点计算的输入文件。
先测试ssmp版。将test.inp放到当前目录下,运行:cp2k.ssmp test.inp |tee test.out。输出信息会在屏幕上显示,也同时写入到了test.out里。默认情况下所有CPU核心都会被用于OpenMP并行计算,如果比如想只用4核,就先运行export OMP_NUM_THREADS=4命令然后再运行CP2K,此时运行过程中CP2K进程的CPU占用率应当在300~400%。
再测试popt版。假设用4核通过MPI方式并行,就执行:mpirun -np 4 cp2k.popt test.inp |tee test.out。在top中看到会有4个cp2k.popt在运行,占用率皆接近100%。
如果你是自己编译的CP2K,建议默认用popt版而不要用ssmp版,因为在某些情况下后者运行效率远不及popt版(但也有些任务二者速度差异不大,看具体情况)。为了运行popt版省事,建议在~/.bashrc里面加入一行alias cp2k='mpirun -np 4 cp2k.popt'。重新进入终端后,只要输入cp2k test.inp |tee test.out就等价于输入mpirun -np 4 cp2k.popt test.inp |tee test.out了,用起来省事多了。
注:跑sopt、popt版时,不管设不设OMP_NUM_THREADS、设多少,OMP_NUM_THREADS都会被强行视为1。
3.3 附:CP2K的并行以及四种版本
CP2K支持MPI方式并行也支持OpenMP方式并行。最初CP2K是完全基于MPI并行的,但每个核心对应一个MPI进程来并行跑CP2K的话,对某些任务、较大体系消耗内存较高。CP2K如今很多代码也利用OpenMP方式实现了并行化,OpenMP并行的好处是很多数据可以在不同线程之间共享而不用保存副本,从而比MPI并行明显更节约内存。但由于有些CP2K代码仍只能通过MPI方式并行,因此单纯靠OpenMP并行的话某些任务的速度可能明显不及MPI并行,而且并行核数很多时纯OpenMP的并行效率比纯MPI并行的略低是很多科学计算程序中常见的现象。CP2K也支持MPI和OpenMP混合并行,比如CPU有36核,那么可以比如用9个MPI进程,每个MPI进程下属4个OpenMP线程,这样9*4把36个核都利用上,比直接用36个OpenMP线程并行效率可能明显更高,而比用36个MPI进程则明显更省内存(这对于杂化泛函计算比较重要。杂化泛函耗内存远高于纯泛函,如果借助OpenMP节约内存,使得有足够内存储存所有双电子积分,即in-core方式做SCF,就可以避免每次迭代过程中重算这些积分,令SCF迭代过程耗时低得多)。
MPI或MPI+OpenMP可以跨节点并行(OpenMP限于节点内),而纯OpenMP只能单机并行,因为OpenMP是基于共享内存的并行技术。
根据支持的并行方式的不同,CP2K分为四个版本:
sopt:只能单机单核计算,无法并行。s意为single
ssmp:OpenMP并行,可以单机多核运行。smp意为Symmetric multiprocessing
popt:MPI并行,可以单机并行也可以跨节点并行。p意为parallel
psmp:MPI+OpenMP混合并行,可以单机并行也可以跨节点并行
sopt版严格等价于ssmp版结合OMP_NUM_THREADS=1,popt版严格等价于psmp版结合OMP_NUM_THREADS=1。
实际上还有sdbg和pdbg版,前者相当于ssmp结合debug设置,后者相当于psmp结合debug设置,但这对于开发者调试程序才有意义,所以本文2.3节我们没有编译这俩版本。
作者Author: qinzhong605 时间: 2021-2-17 10:43
谢谢分享,社长怎么可以这么多才多艺啊!



作者Author: ChemG 时间: 2021-2-17 11:49
社长太强了,这就试试!已经跟着社长学了太多了
继续学习!
作者Author: gog 时间: 2021-2-17 12:01
本帖最后由 gog 于 2021-2-17 12:02 编辑
“openblas 和mkl性能相差不大”相信很多读者看了这结论,都会有点怀疑——毕竟很多数学库没安装完整,也没有平行测试结果。
作者Author: 啦啦黑还黑 时间: 2021-2-18 14:22
8.1的toolchain安装支持intel mpi了,就别用openmpi了。
cp2k用intel可以比openmpi快30%
之前7.1版本toolchain不支持intelmpi要自己修改很多地方比较麻烦,8.1现在都自带支持intel mpi还有intel mkl的toolchain编译脚本了。肯定要用呀。
作者Author: gog 时间: 2021-2-18 18:50
本帖最后由 gog 于 2021-2-19 09:10 编辑
倒腾8.1好几天,发现好多问题。gcc和openmpi编译psmp后 make test。计算速度真的好些慢。
gcc+openmpi+mkl组合,优势是组件可以全部安装上,缺点是很难改脚本。这个安装方法,在7.1中,已经成功实践。因此,还是很期望这种方法。目前cp2k8.1,还没能成功。
作者Author: Penson 时间: 2021-2-18 19:15
请问各位大佬,8.1比7.1有很明显的功能改进不?
作者Author: 喵星大佬 时间: 2021-2-18 21:07
但是pexsi,quip,plumed和sirius编译会出问题,有的能解决有的解决不了(貌似是全家桶20.4的问题)
作者Author: wth1219 时间: 2021-2-18 22:36
我们课题组也遇到了类似的问题,同样的设置和配置跑64H2O的体系,磕磕绊绊编译的CP2K-8.1.psmp计算用时是顺顺利利编译的CP2K-6.1.popt计算用时的将近1.5倍……当然还是比“官方编译”的CP2K-8.1.ssmp要快很多的(CP2K-8.1.psmp计算用时约为CP2K-8.1.ssmp的2/3。)。
作者Author: 喵星大佬 时间: 2021-2-18 23:25
同样用toolchain编译的8.1速度大概只有7.1的一半(用openmpi),intelmpi还没测试。
作者Author: wuzhiyi 时间: 2021-2-19 00:49
而且笔者写的Multiwfn(http://sobereva.com/multiwfn)的创建CP2K输入文件的功能使得CP2K做常见任务用起来比较简单
想问一下有没有详细说明multiwfn生成cp2k输入文件的指南?
我刚翻了一下手册,只看到3.100.2有一小段话,但没有详细的说明。
作者Author: sobereva 时间: 2021-2-19 07:26
最近几天我会写专门的帖子。
简单来说,载入任意Multiwfn支持的含有结构信息的文件(最好也含有晶胞信息的文件,比如cif、带CRYST1字段的pdb文件、Gaussian的PBC任务的输入文件、CP2K输入文件、GROMACS的gro文件等),在主菜单里输入cp2k即可进入创建输入文件的界面,按提示操作即可。这个功能至少对我自己而言,感觉设计得老方便了,用户只需要选想干什么即可,基本不需要费劲巴拉地查手册查例子一个输入文件写半天了。
作者Author: sobereva 时间: 2021-2-19 07:29
文中说了,用没用MKL我只是做了简单的对比测试(纯泛函GPW做单点),发现结果是如此,差异没超过10%。如果谁有精力做各项任务各种体系的全面对比测试,欢迎贴出来。
文中也说了,OpenBLAS的LAPACK的性能据一些说法不如MKL,文中没有在没有前提的情况下说“openblas和mkl性能相差不大”,而且这句话也不是文中原话。
MKL和OpenBLAS对于CP2K都是提供BLAS和LAPACK标准子程序,用OpenBLAS明显不算“数学库没装完整”。数学库真没装完整的话CP2K根本都编译不过去,更别提计算了。
作者Author: sobereva 时间: 2021-2-19 07:35
https://www.cp2k.org/version_history
我觉得算不上很明显的改进
作者Author: sobereva 时间: 2021-2-19 08:40
直接写--with-intelmpi=install会导致报错__INSTALL__ is not supported; please manually install Intel MPI。从toolchain/scripts/install_intelmpi.sh中可见toolchain脚本还没法直接装Intel MPI,只能利用已装好的Intel MPI。CentOS 8我没发现能直接yum/dnf装Intel MPI的方法
作者Author: gog 时间: 2021-2-19 08:53
本帖最后由 gog 于 2021-2-19 09:02 编辑
pexsi需要两个依赖库,其中的superlu默认版本更新到6.1。superlu对omp支持不好,不管是intelmpi还是openmpi都不编译成功,toolchain中的默认值是不安装该组件。估计得手动关闭omp独立编译该组件。quip是计算原子相互作用的,只支持gcc版本。无法通过的的话, 就选择No,只是少些功能吧。
我编译最成功的的版本,是7.1版本gcc+mkl+opempi编译,用toolchain方法。
作者Author: gog 时间: 2021-2-19 09:01
被整迷糊了,还以为你用的openblas编译。
其实您用的mkl 2018
作者Author: gog 时间: 2021-2-19 09:21
博主用的是 mkl 2018编译的。使用的安装组合 gcc+openmpi+mkl。
作者Author: wth1219 时间: 2021-2-19 09:50
我们尝试用Intel mpi编译popt版本结果失败了,可能是因为集群配置的Intel mpi 2019有问题。祝您好运。
作者Author: wth1219 时间: 2021-2-19 09:52
主要想用其中新加的meta-GGA的stress tensor,结果一通操作下来发现那个可能是有问题的,目前正在测试中。
作者Author: wth1219 时间: 2021-2-19 09:55
卢老师您编译的CP2K 8.1照比先前的版本(6.1、7.1)有变慢吗?
作者Author: 喵星大佬 时间: 2021-2-19 10:18
只能写--with-intelmpi=system用已经装好的,但是编译的时候还是会有很多幺蛾子
作者Author: 乐平 时间: 2021-2-19 12:14
本帖最后由 乐平 于 2021-2-19 09:23 编辑
是的,我用的是 gcc9.3.1 + Intel MPI (2018 版) + Intel MKL (2018 版),- scl enable devtoolset-9 bash
复制代码
设置 ./install_cp2k_toolchain.sh --with-mkl=system --with-intelmpi=system ,运行后可以看到如下信息:
- ==================== Finding Intel MPI from system paths ====================
- path to mpirun is /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin/mpirun
- path to mpiicc is /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin/mpiicc
- path to mpiifort is /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin/mpiifort
- path to mpiicpc is /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin/mpiicpc
- Found include directory /usr/local/include
- Found lib directory /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mpi/intel64/lib/release_mt
- libmpi is found in ld search path
- libmpicxx is found in ld search path
- Step intelmpi took 0.00 seconds.
- Step valgrind took 0.00 seconds.
- Step reflapack took 0.00 seconds.
- ==================== Finding MKL from system paths ====================
- MKLROOT is found to be /public1/apps/intel/compilers_and_libraries_2018.1.163/linux/mkl
- libm is found in ld search path
- libdl is found in ld search path
- Step mkl took 0.00 seconds.
复制代码
但是 toolchain 中的 install_elpa.sh 报错。
查看报错信息
- vi build/elpa-2020.05.001/build/configure.log
复制代码 显示的是:
checking whether Fortran compiler infers interfaces ... no
checking for fc option to support OpenMP... -fopenmp
checking for mpiexec.hydra... mpiexec.hydra
checking whether stdout/stderr file redirect should be enabled... no
checking whether ELPA library should contain also single precision functions... no
checking whether Fortran module iso_fortran_env is available... yes
checking whether we can compile a Fortran program using MKL... no
checking for library containing dgemm... none required
checking whether we can link a program with a blas lib... yes
checking for library containing dlarrv... none required
checking whether we can link a program with a lapack lib... yes
checking whether -lmpiscalapack already contains a BLACS implementation... no
checking whether -lscalapack already contains a BLACS implementation... yes
checking for library containing pdtran... none required
checking whether we can link a Fortran program with all blacs/scalapack... yes
checking whether we can use the intrinsic Fortran function "get_environment_variable"... yes
checking whether BAND_TO_FLULL_BLOCKING is requested... yes
checking whether a GPU compute capability is specified... no
checking whether Fortran mpi module can be used... no
configure: error: Could not compile a Fortran program with an 'use mpi' statement. You can try again with --disable-mpi-module
按照提示,在 scripts/install_elpa.sh 的第 100 行里加上 --disable-mpi-module \ 之后,编译继续。然后又遇到 libvdwxc 的报错。
报错信息如下:
checking how MPI parameters have been set... yon
checking whether the MPI C compiler is set... yes
checking whether the MPI C compiler is wrapped... no
checking whether the MPI Fortran compiler is set... yes
checking whether the MPI Fortran compiler is wrapped... no
checking mpi.h usability... yes
checking mpi.h presence... yes
checking for mpi.h... yes
checking for MPI_Init... yes
checking whether the MPI C compiler works... yes
checking for a Fortran MPI module... no
checking whether the MPI Fortran compiler works... no
checking whether we have a full MPI support... no
configure: error: in `/public1/apps/cp2k-8.1/tools/toolchain/build/libvdwxc-0.4.0':
configure: error: MPI support is broken - please check your configuration
See `config.log' for more details
作者Author: 喵星大佬 时间: 2021-2-19 13:05
本帖最后由 喵星大佬 于 2021-2-19 13:07 编辑
乐平 发表于 2021-2-19 12:14
是的,我用的是 gcc9.3.1 + Intel MPI (2018 版) + Intel MKL (2018 版),
设置 ./install_cp2k_toolch ...
写了 --with-intelmpi=system 的情况下默认用的编译器已经是mpiicc,mpiifort,mpiicpc了,所以也不关gcc什么事了。
elpa的问题用http://bbs.keinsci.com/thread-19009-1-1.html这个帖子1楼的方法可解。
作者Author: 乐平 时间: 2021-2-19 15:03
谢谢回复,但是您给的链接和我的问题不一样。
报错信息显示与 mpi 有关,不是帖子里的 SCALAPACK_LDFLAGS 问题。
作者Author: 喵星大佬 时间: 2021-2-19 15:10
已经找到了mpi不应该出mpi的问题,可能是mpi装的有点问题?
不过不知道是啥设置原因咋的,7.1到8.1同样的输入文件速度慢了不少
作者Author: 乐平 时间: 2021-2-19 15:24
谢谢回复。
也许是 Intel MPI 的问题吧……
我再试试用 CP2K 默认的 openmpi 吧。
作者Author: gog 时间: 2021-2-19 17:59
核心的组件,就四五个吧。其他的,是用来加速计算用的。实在安装不上,可以不安装。
作者Author: 乐平 时间: 2021-2-19 18:35
本帖最后由 乐平 于 2021-2-19 12:49 编辑
用了 --with-openmpi=install 参数,过程中没有什么报错,但是……
- ==================== generating arch files ====================
- arch files can be found in the /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch subdirectory
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local.ssmp
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local.sdbg
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local.psmp
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local.pdbg
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local_warn.psmp
- Wrote /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/local_coverage.pdbg
- ========================== usage =========================
- Done!
- Now copy:
- cp /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/* to the cp2k/arch/ directory
- To use the installed tools and libraries and cp2k version
- compiled with it you will first need to execute at the prompt:
- source /public2/wanghuan/cp2k-8.1/tools/toolchain/install/setup
- To build CP2K you should change directory:
- cd cp2k/
- make -j 16 ARCH=local VERSION="ssmp sdbg psmp pdbg"
复制代码
发现居然没有 popt 版……
按上述步骤,
cp /public2/wanghuan/cp2k-8.1/tools/toolchain/install/arch/* ../../arch/
source /public2/wanghuan/cp2k-8.1/tools/toolchain/install/setup
然后在编译的时候加上 popt,感觉应该是不可能的……,因为上面 Wrote 那几行里没有 popt 版
make -j 16 ARCH=local VERSION="ssmp popt psmp"
编译过程中会有报错信息:
- 13 | USE dbcsr_types, ONLY: dbcsr_data_obj, &
- | 1
- Fatal Error: Cannot open module file ‘dbcsr_types.mod’ for reading at (1): No such file or directory
- compilation terminated.
- make[4]: *** [dbcsr_blas_operations.o] Error 1
- make[4]: *** Waiting for unfinished jobs....
- /public2/wanghuan/cp2k-8.1/exts/dbcsr/src/tas/dbcsr_tas_types.F:16:7:
- 16 | USE dbcsr_types, ONLY: &
- | 1
- Fatal Error: Cannot open module file ‘dbcsr_types.mod’ for reading at (1): No such file or directory
- compilation terminated.
- make[4]: *** [dbcsr_tas_types.o] Error 1
复制代码
果然,在 exe/local 目录中的结果如下:
cp2k_shell.ssmp cp2k.sopt
cp2k.ssmp
dumpdcd.ssmp
graph.ssmp
grid_miniapp.ssmp
grid_unittest.ssmp
libcp2k_unittest.ssmp
memory_utilities_unittest.ssmp
parallel_rng_types_unittest.ssmp
xyz2dcd.ssmp
没有 popt 版……
作者Author: gog 时间: 2021-2-19 18:47
openmpi 用root权限先编译好啊。
作者Author: wuzhiyi 时间: 2021-2-19 18:48
非常感谢sob老师!
作者Author: 乐平 时间: 2021-2-19 20:18
自己编译 openmpi 和最后没有 popt 有必然联系?
作者Author: 乐平 时间: 2021-2-19 21:12
重新编译了一次
- ./install_cp2k_toolchain.sh --with-mkl=system --with-openmpi=install --with-libsmm=install --with-ptscotch=install --with-superlu=install --with-pexsi=install --with-plumed=install
复制代码
直接用 CP2K 提供的 VERSION,没有自作主张加上 popt
- make -j 40 ARCH=local VERSION="ssmp psmp"
复制代码
得到 exe/local 目录下的结果:
- memory_utilities_unittest.ssmp
- parallel_rng_types_unittest.ssmp
- graph.ssmp
- memory_utilities_unittest.psmp
- parallel_rng_types_unittest.psmp
- graph.psmp
- grid_miniapp.ssmp
- grid_unittest.ssmp
- grid_miniapp.psmp
- grid_unittest.psmp
- dumpdcd.ssmp
- xyz2dcd.ssmp
- xyz2dcd.psmp
- dumpdcd.psmp
- libcp2k_unittest.ssmp
- cp2k.ssmp
- cp2k.sopt -> cp2k.ssmp # 软链接
- cp2k_shell.ssmp -> cp2k.ssmp # 软链接
- cp2k.psmp
- libcp2k_unittest.psmp
- cp2k_shell.psmp -> cp2k.psmp # 软链接
- cp2k.popt -> cp2k.psmp # 软链接
复制代码
可以发现,8.1 版默认用软链接把 psmp 版作为 popt 版了。
作者Author: gog 时间: 2021-2-19 21:39
软件迭代更新、去掉了吧。刘博士的帖子回复,intelmpi编译的,也没有popt。
作者Author: Penson 时间: 2021-2-19 22:59
了解,谢谢社长
作者Author: 乐平 时间: 2021-2-19 23:13
本帖最后由 乐平 于 2021-2-19 17:14 编辑
想请教一下 sob 老师,跨节点并行应该怎么设置?用的是 openmpi 4.0.1
比如,我的服务器单个节点 16-core
mpirun -np 16 cp2k.popt -i H2O-128.inp -o H2O-128.out
可以正常运行。
如果我希望用跨两个节点,调用 32-core 应该怎么设置呢?
我尝试了用
mpirun -np 32 cp2k.popt -i H2O-128.inp -o H2O-128.out
或者
mpirun -np 32 cp2k.psmp -i H2O-128.inp -o H2O-128.out
但是任务都没法运行。
作者Author: sobereva 时间: 2021-2-20 15:22
https://www.open-mpi.org/faq/?ca ... pirun-specify-hosts
作者Author: 乐平 时间: 2021-2-20 16:35
谢谢,不过似乎没看太明白。这个链接里(9)说的是在某些指定的 hosts 运行 mpi,一下小节(10)说的是在多个 hosts 上运行 mpi
openmpi 官网的帖子里说得好复杂,对于新手太不友好……
我把我的 PBS 文件修改了一下,可以跨两个节点运行了,如下。
- #!/bin/bash
- #PBS -N cp2k_H2O-512
- #PBS -l nodes=2:ppn=16
- #PBS -j n
- #PBS -e ${PBS_JOBNAME}.e
- #PBS -o ${PBS_JOBNAME}.o
- #PBS -q v3
- module load gcc/9.3.1
- module load openmpi/4.0.1
- source /public1/apps/cp2k-8.1/tools/toolchain/install/setup
- cd $PBS_O_WORKDIR
- EXEC=/public1/apps/cp2k-8.1/exe/local/cp2k.popt
- mpirun -np 32 $EXEC -i H2O-512.inp -o H2O-512.out
复制代码
修改的地方如下:
【1】 #PBS -l nodes=2:ppn=16
修改之前是 nodes=1 ,所以只能在一个节点上运行。
【2】mpirun -np 32
32 = 2 * 16,也就是节点数乘以每个节点上的 CPU 核心数,之前只改了这里,没有改 【1】的项目,故导致任务无法运行。
作者Author: ball2006 时间: 2021-3-24 16:22
编译QUIP模块,编译不过去
==================== Installing QUIP ====================
QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705.tar.gz is found
Installing from scratch into /share/apps/soft/cp2k81/tools/toolchain/install/quip-1ff93b3400b83e804f0f2e857e70c5e4133d9705
ERROR: (./scripts/install_quip.sh, line 100) Non-zero exit code detected.
make.log有如下报错
Making Programs
********************************************
rm -f /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/build/linux_x86_64_gfortran/Makefile
cp /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/Programs/Makefile /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/build/linux_x86_64_gfortran/Makefile
make -C /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/build/linux_x86_64_gfortran QUIP_ROOT=/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705 VPATH=/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/Programs -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705 -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/arch
make[1]: Entering directory `/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/build/linux_x86_64_gfortran'
gfortran -x f95-cpp-input -ffree-line-length-none -ffree-form -fno-second-underscore -fPIC -g -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/libAtoms -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/fox/objs.linux_x86_64_gfortran/finclude -O3 -DGETARG_F2003 -DGETENV_F2003 -DGFORTRAN -DFORTRAN_UNDERSCORE -D'GIT_VERSION="NOT_A_GIT_REPOSITORY"' -D'QUIP_ARCH="linux_x86_64_gfortran"' -D'SIZEOF_FORTRAN_T=2' -DHAVE_PRECON -DHAVE_QR -c /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/Programs/vacancy_map_mod.f95 -o vacancy_map_mod.o
gfortran -x f95-cpp-input -ffree-line-length-none -ffree-form -fno-second-underscore -fPIC -g -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/libAtoms -I/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/fox/objs.linux_x86_64_gfortran/finclude -O3 -DGETARG_F2003 -DGETENV_F2003 -DGFORTRAN -DFORTRAN_UNDERSCORE -D'GIT_VERSION="NOT_A_GIT_REPOSITORY"' -D'QUIP_ARCH="linux_x86_64_gfortran"' -D'SIZEOF_FORTRAN_T=2' -DHAVE_PRECON -DHAVE_QR -c /share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/Programs/quip.f95 -o quip.o
gfortran -o quip quip.o vacancy_map_mod.o -L. -lquiputils -lquip_core -latoms -O3 -L/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/src/fox/objs.linux_x86_64_gfortran/lib -lFoX_sax -lFoX_wxml -lFoX_utils -lFoX_common -lFoX_fsys /opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_scalapack_lp64.so -Wl,--start-group /opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_gf_lp64.so /opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_sequential.so /opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_core.so /opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so -Wl,--end-group -lpthread -lm -ldl
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Waitall'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_comm_null'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Abort'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Waitany'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_f2c'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Wtime'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_dup'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_double'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Op_free'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_create'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Group_incl'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_get_attr'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_dblcplex'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Init'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_create_struct'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Bcast'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Alltoallv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Cart_create'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Scatterv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Initialized'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_free'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Iprobe'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Testall'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Allgatherv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_group'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Cart_sub'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_split'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Send'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Allreduce'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_packed'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_op_max'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_op_maxloc'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_op_min'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Rsend'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_byte'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Irecv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_contiguous'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Recv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_free'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_comm_world'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_compare'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_float'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Reduce'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Pack'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_request_null'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_cplex'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_unsigned_short'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_c2f'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Gatherv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Get_address'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Wait'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Allgather'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_create_resized'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_double_int'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Op_create'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_int'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Pack_size'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_long_long_int'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Unpack'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_integer'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Test'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_dblprec'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Isend'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_f2c'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Op_f2c'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_vector'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Alltoall'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Finalize'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Sendrecv'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_op_sum'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Op_c2f'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_size'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `ompi_mpi_real'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Group_free'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_indexed'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Barrier'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_commit'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Type_c2f'
/opt/intel/compilers_and_libraries_2020.4.304/linux/mkl/lib/intel64/libmkl_blacs_openmpi_lp64.so: undefined reference to `MPI_Comm_rank'
collect2: error: ld returned 1 exit status
make[1]: *** [quip] Error 1
make[1]: Leaving directory `/share/apps/soft/cp2k81/tools/toolchain/build/QUIP-1ff93b3400b83e804f0f2e857e70c5e4133d9705/build/linux_x86_64_gfortran'
make: *** [Programs] Error 2
麻烦老师们看看是啥原因
作者Author: sobereva 时间: 2021-3-25 07:02
跟MPI库链接有问题。检查MPI方面的安装和设置
如果只有这一个过不去并且你并不使用经验势做计算,QUIP也可以不装
作者Author: ball2006 时间: 2021-3-25 11:11
好的,sob老师。
我再查查,多谢。
作者Author: yiranfengbai 时间: 2021-3-26 15:33
老师,编译make -j 4 时出现了这个问题,该怎么解决呢
Traceback (most recent call last):
File "/calc/msi/cp2k-8.1/tools/build_utils/check_archives.py", line 69, in <module>
main()
File "/calc/msi/cp2k-8.1/tools/build_utils/check_archives.py", line 49, in main
output = check_output([ar_exe, "t", archive_fn], encoding="utf8")
File "/usr/local/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/usr/local/lib/python3.5/subprocess.py", line 693, in run
with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'encoding'
make[2]: *** [makedep] 错误 1
make[2]: *** 正在等待未完成的任务....
Traceback (most recent call last):
File "/calc/msi/cp2k-8.1/tools/build_utils/check_archives.py", line 69, in <module>
main()
File "/calc/msi/cp2k-8.1/tools/build_utils/check_archives.py", line 49, in main
output = check_output([ar_exe, "t", archive_fn], encoding="utf8")
File "/usr/local/lib/python3.5/subprocess.py", line 626, in check_output
**kwargs).stdout
File "/usr/local/lib/python3.5/subprocess.py", line 693, in run
with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'encoding'
make[2]: *** [makedep] 错误 1
make[2]: *** 正在等待未完成的任务....
Resolving dependencies ...
Resolving dependencies ...
make[1]: *** [ssmp] 错误 2
make[1]: *** 正在等待未完成的任务....
make[1]: *** [psmp] 错误 2
make: *** [all] 错误 2
作者Author: sobereva 时间: 2021-3-26 19:32
信息不足,无法判断。什么系统什么编译器具体怎么编译的都得交代非常清楚
系统不要装成中文语言
作者Author: yiranfengbai 时间: 2021-3-26 22:44
抱歉老师,系统是centos7.6, gcc9.3.1。我通把这个关键词删掉之后,这个问题暂时没出来了,不知道是否正确
作者Author: abin 时间: 2021-3-30 20:06
本帖最后由 abin 于 2021-4-17 21:37 编辑
我记得,
使用intel2020u2没有问题。修正一下,
intel2020u2, 运行某些计算会遇到内存爆浆的问题. 请谨慎使用.
intel2020u4, u3都有很多坑。
另,
我有编译好的
cp2k v7.1 v8.1, 分别针对E5 v3/v4 或者新的AVX2/AVX512优化的编译版本。
可以有偿提供。
需要目标机器有root授权才能完成部署。
作者Author: abin 时间: 2021-3-30 20:10
能提供算例我试试吗?
可以发送到 hpc4you@163.com
我仅仅简单测试了算例, make test那个。
所有算例都通过, 时间没有明显区别。
有人提及是cosma模块导致的问题。
不过我用Mar-20-2021克隆的开发版,编译后,是否开启cosma模块,
速度没有差异。 也许修正了。
作者Author: abin 时间: 2021-3-30 20:14
回复需要审核,
所以再写一份给你,以免一会就忘记了。
我的记忆中, 使用intel2020u2可以搞定。
使用intel2020u4需要修正源码。
不要迷信intel编译器的威力。
也许使用gcc10+MKL最新版+MPICH,就很棒了。
作者Author: waitingseven 时间: 2021-4-1 14:53
安装之后只有psmp版本成功,直接cp2k.psmp xxx.inp | tee xxx.out运行之后发现明明有36个核心,cpu利用率一直浮动,有时候用1个,有时候7个,最多用20多个,没有用满,如果加上mpirun -np 36的话要么运行停止不动,要么运行过程输出跟测试文件结果不一样,用vasp可以36个核直接用满,不知道是不是编译出问题了还是这个软件本身就这样
作者Author: sobereva 时间: 2021-4-1 15:02
用popt版
有些代码没有用OpenMP并行化,所以psmp有可能对某些情况的计算占用率显著低于popt
popt版本质上等价于OpenMP线程数为1的psmp版,不可能只有psmp版能用
作者Author: waitingseven 时间: 2021-4-1 15:06
多谢社长回复,我按照社长的方法用的with-openmpi=install安装出来的popt版不知道是否是其他版友提到的是psmp的软链接版,psmp的计算效率确实愁人,明明这么多核却不用
作者Author: abin 时间: 2021-4-1 15:30
cp2k.popt -> cp2k.psmp
8.x版本就是如此。
对应关系如下:
popt --> MPI + OpenMP + OMP_NUM_THREADS=1
psmp --> MPI + OpenMP
作者Author: haisenburg 时间: 2021-4-11 22:53
psmp 是 MPI+OpenMP 混编的,模式情况下 psmp 使用的 线程等于计算机的核算,如果用mpirun -np xx 的话,会导致top 查看 cpu 超过100% 且不断浮动,计算速度巨慢! 这是时候强制 OpenMP 超线程等于1 即可,即 使用 mpirun -np xx -x OMP_NUM_THREADS=1 cp2k.psmp 这是时候 等价于 mpirun -np xx cp2k.popt 这个时候,速度就很快了,大家可以对比下这个时候8.1是不是还比7.1 慢很多???
作者Author: waitingseven 时间: 2021-4-12 09:07
多谢回复,请问mpirun -np xx -x OMP_NUM_THREADS=1 cp2k.psmp 这条命令中 xx 和 -x 分别是多少核和多少线程的意思吗?
作者Author: haisenburg 时间: 2021-4-12 20:11
mpirun -np 20 -machinefile $PBS_NODEFILE -x OMP_NUM_THREADS=1 /opt/cp2k-8.1/exe/local/cp2k.psmp -i geo-opt.inp > geo-opt.out
这是我的一个命令
作者Author: elpa 时间: 2021-4-13 13:50
官网下的cp2k 缺少DSCBR 还得另装
https://cp2k.github.io/dbcsr/dev ... allation/index.html
作者Author: sobereva 时间: 2021-4-14 07:09
-x是让后面的环境变量设置在运行命令时生效。每个cp2k.psmp MPI进程的下属OpenMP并行线程数由OMP_NUM_THREADS决定。
-np后面的值(CP2K的MPI进程数)与OMP_NUM_THREADS的乘积不应超过CPU物理核心数
作者Author: elpa 时间: 2021-4-14 09:56
Installing cosma ====================
cosma-2.2.0.tar.gz: OK
Checksum of cosma-2.2.0.tar.gz Ok
Installing from scratch into /home/xxx/cp2k8/cp2k-8.1/tools/toolchain/install/cosma-2.2.0
ERROR: (./scripts/install_cosma.sh, line 48) Non-zero exit code detected.
请问intelmpi+mkl 编不了cosma有办法解决吗?
作者Author: sobereva 时间: 2021-4-14 12:47
不编译COSMA就完了,影响不大
作者Author: waitingseven 时间: 2021-4-15 15:13
本帖最后由 waitingseven 于 2021-4-15 15:16 编辑
多谢社长回复,我重新装了一下系统,从centos 7.6升级到 Centos 8,按照社长的方法装发现到fftw就停了,没办法就按照make ARCH=Linux-x86-64-intel-minimal VERSION=psmp -j 36这个命令装,出现了cp2k.psmp和popt版,目前测试了社长发出来的几个输入文件没发现啥问题,也不知道这种方法装的会不会有什么缺陷,比如会不会有些东西算不了。
先运行export OMP_NUM_THREADS=1, 然后运行mpiexec -np 36 cp2k.popt xxx.inp |tee xxx.out发现所有核的占用率都是100%,比之前psmp版本效率高不少,用的是intel的oneapi.
作者Author: sobereva 时间: 2021-4-16 09:24
没什么事
fftw的问题得看具体报错判断。你也可以自己手动编译fftw,让toolchain直接链接机子里已有的fftw
作者Author: ball2006 时间: 2021-4-22 16:20
感谢大佬的提醒,已经找别的方法越过去了。
作者Author: Penson 时间: 2021-5-12 23:17
我想在超算上自己尝试编译gcc版本的cp2k 8.1,重新安装并修改了默认的gcc,g++和gfortran版本都为8.3,但是用toolchain安装cmake的时候还是出现非零值错误,估计是和系统原来的cmake冲突了,查了一下是2.8版本的,远低于要求的版本。请问有什么合适的解决办法呢?
作者Author: sobereva 时间: 2021-5-13 07:19
toolchain安装cmake的时候出错和系统里的cmake冲突应该没关系,看看log文件里具体报错提示
作者Author: Penson 时间: 2021-5-13 08:52
本帖最后由 Penson 于 2021-5-13 14:01 编辑
好的,社长。我看了log,是写着bootstrapping CMake时,运行初始的CMAKE的出错了
(, 下载次数 Times of downloads: 172)
作者Author: sobereva 时间: 2021-5-13 19:06
系统太老,找不到相应的GLIBCXX库
尝试自行编译cmake,然后把cmake可执行文件的目录加到PATH环境变量最前面使其优先级高于超算的cmake,然后让toolchain使用自己机子上的cmake。
作者Author: Penson 时间: 2021-5-13 19:18
好的,我尝试过自己编译cmake,好像也得经历./bootstrap这一步,然后也是在这一步出错
作者Author: abin 时间: 2021-5-13 19:32
什么系统?
作者Author: Penson 时间: 2021-5-14 00:03
Red Hat Enterprise Linux Server release 6.2 (Santiago)
作者Author: abin 时间: 2021-5-14 07:44
系统太老了……
作者Author: Penson 时间: 2021-5-14 11:49
没办法,学校的超算,这个没法改
作者Author: taopan 时间: 2021-5-14 12:57
本帖最后由 taopan 于 2021-5-14 13:00 编辑
虚拟机中centos7 intel i7 cp2k8.1编译libint有问题
- make: *** [src/CR_DerivGaussP0InBra_aB_d001__0__m__1___TwoPRep_s__0__s__1___Ab__up_0.lo] Error 1
复制代码- ./install_cp2k_toolchain.sh --with-sirius=no --with-openmpi=install --with-plumed=install --with-cmake=system
- MPI is detected and it appears to be Intel MPI
- nvcc not found, disabling CUDA by default
- Compiling with 8 processes.
- Step gcc took 0.00 seconds.
- ==================== Getting proc arch info using OpenBLAS tools ====================
- OpenBLAS detected LIBCORE = haswell
- OpenBLAS detected ARCH = x86_64
- ==================== Finding CMake from system paths ====================
- path to cmake is /usr/local/bin/cmake
- Step cmake took 0.00 seconds.
- ==================== Installing OpenMPI ====================
- openmpi-4.0.5 is already installed, skipping it.
- Step openmpi took 0.00 seconds.
- Step valgrind took 0.00 seconds.
- Step reflapack took 0.00 seconds.
- ==================== Finding MKL from system paths ====================
- MKLROOT is found to be /opt/intel/compilers_and_libraries_2018.0.128/linux/mkl
- libm is found in ld search path
- libdl is found in ld search path
- Using MKL provided ScaLAPACK and BLACS
- Step mkl took 0.00 seconds.
- ==================== Installing FFTW ====================
- fftw-3.3.8 is already installed, skipping it.
- Step fftw took 0.00 seconds.
- ==================== Installing LIBINT ====================
- libint-v2.6.0-cp2k-lmax-6.tgz is found
- Installing from scratch into /taopan/cp2k-8.1/tools/toolchain/install/libint-v2.6.0-cp2k-lmax-6
- ERROR: (./scripts/install_libint.sh, line 82) Non-zero exit code detected.
复制代码
(, 下载次数 Times of downloads: 1)
(, 下载次数 Times of downloads: 0)
作者Author: 喵星大佬 时间: 2021-5-15 21:50
但是toolchian完了之后local.psmp那几个脚本还是要手改
作者Author: abin 时间: 2021-5-15 21:54
是吗?
不是直接可用吗?还改啥呀?
用intel工具套装,那是要修改的。
作者Author: 喵星大佬 时间: 2021-5-15 22:59
我就是说toolchian设置了intelmpi的情况
作者Author: yoghurt117 时间: 2021-6-22 14:31
My OS is Mint20. But according to your method ,it shows errors like this:
mint@i5:~/sci_soft/cp2k/code/8.2/cp2k-8.2.0$ make -j 4 ARCH=local VERSION="ssmp sdbg psmp pdbg"
Discovering programs ...
/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/exts/Makefile.inc:2: *** "No DBCSR submodule available, please run 'git submodule update --init --recursive'". Stop.
/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/exts/Makefile.inc:2: *** "No DBCSR submodule available, please run 'git submodule update --init --recursive'". Stop.
make[1]: *** [/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/Makefile:126: psmp] Error 2
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/Makefile:126: ssmp] Error 2
/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/exts/Makefile.inc:2: *** "No DBCSR submodule available, please run 'git submodule update --init --recursive'". Stop.
make[1]: *** [/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/Makefile:126: sdbg] Error 2
/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/exts/Makefile.inc:2: *** "No DBCSR submodule available, please run 'git submodule update --init --recursive'". Stop.
make[1]: *** [/home/mint/sci_soft/cp2k/code/8.2/cp2k-8.2.0/Makefile:126: pdbg] Error 2
make: *** [Makefile:121: all] Error 2
Sorry , My linux Chinese input is not ok, so i have to use English.
作者Author: Akaiconan 时间: 2021-7-9 15:20
社长好,我按照您的方法编译完成以后,跑一些输入文件时(popt版本),用命令“mpirun -np 4 cp2k.popt test.inp |tee test.out ”时,总是出程序停止的问题。改成不加‘mpirun -np 4’,只写'cp2k.popt test.inp |tee test.out',就能运行的很顺利,想请问一下这两者的区别在哪。
如果因为上述操作没有造成计算效率的严重下降,我也就不细究出问题的原因了,如果会造成,还得请教一下改善的方法。
非常感谢!
作者Author: sobereva 时间: 2021-7-10 09:41
不写mpirun -np x相当于串行运行CP2K
mpirun -np 4老出现问题而且和不写的时候速度差不多,大概率是根本没有正常并行运行,四个进程没有协同工作而是相当于单独算了四个串行进程。仔细检查MPI库,确保当前激活的MPI和编译时用的MPI是同一个
作者Author: alonewolfyang 时间: 2021-7-30 16:13
本帖最后由 alonewolfyang 于 2021-7-31 09:34 编辑
请教老师,我在CentOS 7 上编译了CP2K 7.1,也产生了四个版本的CP2K,在使用您给的例子test.inp的时候提示root权限下mpi不能用,这和ORCA的编译那好像一样,我用root权限做的,怎么能改改呀,没看懂系统给的解决办法,是直接把这两行玩意加到bashrc里面还是咋回事,后来改了也不行
作者Author: alonewolfyang 时间: 2021-7-31 16:34
结合本帖子和其他资源,问题已解决
作者Author: 丁越 时间: 2021-9-29 22:28
请问刘博用Intel编译器编译的CP2K-8.2/1有popt版本么,还是只有一个ssmp版本的?如果有的话还请老师指点下编译过程
作者Author: 陪锂到天边 时间: 2021-10-11 13:57
社长您好,我是非管理员用户,能否用toolchain脚本进行cp2k的安装呢? 我等了好久 他都安不起
作者Author: sobereva 时间: 2021-10-11 19:54
可以
作者Author: yzy1995123 时间: 2021-12-15 13:38
求助,我根据您的方法安装的,用openmpi和mkl,到了编译elpa库的时候一直错误,toolchain/build目录下库中也没有编译过程输出的log文件,想知道该怎么解决
作者Author: sobereva 时间: 2021-12-16 07:34
把patch装上再试
yum install patch
作者Author: yzy1995123 时间: 2021-12-16 12:26
还是不太行,同样的错误,line 67变成了line 100
作者Author: sobereva 时间: 2021-12-16 14:48
看报错随机应变
不可能同样的错误,只可能是依然有错误。patch命令都能用了怎么还可能提示没有。交代问题时候注意语言表达准确
作者Author: yzy1995123 时间: 2021-12-16 16:24
不好意思老师,可能我表述的不够准确,现在报错是这样的
作者Author: sobereva 时间: 2021-12-16 16:57
仔细看ELPA部分安装过程的日志
要么干脆别装ELPA,对绝大多数情况没什么用处
作者Author: yzy1995123 时间: 2021-12-16 18:58
好的,感谢老师
作者Author: annaqz 时间: 2022-1-1 11:36
社长,想请教一下,我按照帖子方法编译的CP2K 8.2,Centos系统是8.5。安装完后进行简单例子测试的时候没有问题。后续在计算实际例子以及CP2K官网的算例时,发现总会卡住。提交命令是nohup mpirun -np 4 cp2k.popt xxx.inp |tee xxx.out &。卡壳的地方如下图所示,不知道这个是什么原因造成的。查看的时候,发现cp2k一直在运行。运行一段时间后会自行终止。
作者Author: sobereva 时间: 2022-1-1 23:59
我没遇见过
尝试对角化能否正常运行
作者Author: 丁越 时间: 2022-1-2 17:44
编译的时候写--with-elpa=no,OT卡住是elpa库的bug导致
作者Author: annaqz 时间: 2022-1-3 10:34
好的,那我试试,谢谢社长!
作者Author: annaqz 时间: 2022-1-3 10:35
好的,感谢回复!我运行过几次算例,差不多5次有3次会出现这种情况。那这样的话我是需要重新编译安装cp2k是吗?
作者Author: sobereva 时间: 2022-1-3 21:27
现在有CP2K 9.1了,你可以先编译个新版本试试
作者Author: 丁越 时间: 2022-1-4 09:16
可以参考一下这个:
http://bbs.keinsci.com/forum.php ... 3&fromuid=21263
作者Author: annaqz 时间: 2022-1-4 12:39
对,我昨天也是发现了。我试试去。
作者Author: annaqz 时间: 2022-1-4 12:40
好的,收到。谢谢
作者Author: annaqz 时间: 2022-1-4 12:42
对了社长,我要编译这个最新版的,那我之前编译的那个8.2版本的CP2K,需要先卸载一下吗?
作者Author: sobereva 时间: 2022-1-5 00:50
不用
环境变量指向新安装的CP2K的目录就完了
| 欢迎光临 计算化学公社 (http://bbs.keinsci.com/) |
Powered by Discuz! X3.3 |