计算化学公社

标题: 求助:cp2k安装出错Could not compile a Fortran program with an 'use mpi' state... [打印本页]

作者
Author:
qmlearner    时间: 2023-3-21 15:33
标题: 求助:cp2k安装出错Could not compile a Fortran program with an 'use mpi' state...
本帖最后由 qmlearner 于 2023-4-6 17:22 编辑

大家好,请教一一个问题:在Centos系统通过toolchain离线安装cp2k-2023,
./install_cp2k_toolchain.sh --with-sirius=no --with-openmpi=system --with-plumed=install --with-gcc=system --with-cmake=system

其中gcc/9.3.0,openmpi/4.1.1

在安装到ELPA依赖库时出现下面的错误:Configure: error: Could not compile a Fortran program with an 'use mpi' statement.

在网上找了很久也没什么头绪,请问这是怎么回事呢,非常感谢!


作者
Author:
beyond    时间: 2023-3-21 17:01
可以考虑不装elpa的
作者
Author:
sobereva    时间: 2023-3-21 23:29
如果不编译ELPA就完全正常,甭编译ELPA就完了,一般情况下结合ELPA也没什么明显益处
作者
Author:
qmlearner    时间: 2023-3-22 15:43
本帖最后由 qmlearner 于 2023-3-22 15:46 编辑
beyond 发表于 2023-3-21 17:01
可以考虑不装elpa的

谢谢您,我试了一下不安装elpa,在编译cp2k的时候又出现了以下错误:

make –j 16 ARCH=local VERSION=”ssmp psmp”

Fetal Error: mkl_version.h: No such file or directory
Compliation terminated
Make[3]:*** [fftw3_lib.o] Error 1
Make[3]:*** Waiting for unfinished jobs….

但是安装依赖库的时候,出现了以下内容,说明系统里有MKL

=============Finding MKL from system paths====================
MKLROOT is found to be /zbs/intel2015/composer_xe_2015.0.090/mkl
libm is found in ld search path
libdl is found in ld search path
Step mkl took 0.00 seconds
Step fftw took 0.00 seconds.

我又重新安装了一遍依赖库(没有删除原来的build文件夹),这次加上--with-openblas=install --with-scalapack=install,如下:

./install_cp2k_toochain.sh --with-sirius=no --with-openmpi=system --with-plumed=install --with-gcc=system --with-cmake=system --with-elpa=no --with-openblas=install --with-scalapack=install

在编译的时候又出现下面的错误,也没有找到更具体的错误提示
Make[2]:*** [all] Error 2
Make[1]:*** [ssmp] Error 2
Make: *** [all] Error 2

请问这还可以怎么尝试呢?

作者
Author:
qmlearner    时间: 2023-3-22 15:46
sobereva 发表于 2023-3-21 23:29
如果不编译ELPA就完全正常,甭编译ELPA就完了,一般情况下结合ELPA也没什么明显益处

谢谢卢老师,我试了一下不安装elpa,在编译cp2k的时候又出现了以下错误:

make –j 16 ARCH=local VERSION=”ssmp psmp”

Fetal Error: mkl_version.h: No such file or directory
Compliation terminated
Make[3]:*** [fftw3_lib.o] Error 1
Make[3]:*** Waiting for unfinished jobs….

但是安装依赖库的时候,出现了以下内容,说明系统里有MKL

=============Finding MKL from system paths====================
MKLROOT is found to be /zbs/intel2015/composer_xe_2015.0.090/mkl
libm is found in ld search path
libdl is found in ld search path
Step mkl took 0.00 seconds
Step fftw took 0.00 seconds.

我又重新安装了一遍依赖库(没有删除原来的build文件夹),这次加上了--with-openblas=install --with-scalapack=install,如下:

./install_cp2k_toochain.sh --with-sirius=no --with-openmpi=system --with-plumed=install --with-gcc=system --with-cmake=system --with-elpa=no --with-openblas=install --with-scalapack=install

在编译的时候又出现下面的错误,也没有找到更具体的错误提示
Make[2]:*** [all] Error 2
Make[1]:*** [ssmp] Error 2
Make: *** [all] Error 2

请问这还可以怎么尝试呢?

作者
Author:
beyond    时间: 2023-3-22 17:27
qmlearner 发表于 2023-3-22 15:43
谢谢您,我试了一下不安装elpa,在编译cp2k的时候又出现了以下错误:

make –j 16 ARCH=local VERSION ...

那就把环境变量中的MKL去掉,编译的时候加上--with -fftw=install 试试
作者
Author:
qmlearner    时间: 2023-3-23 10:16
beyond 发表于 2023-3-22 17:27
那就把环境变量中的MKL去掉,编译的时候加上--with -fftw=install 试试

我是在服务器上安装,我看了下MKL的环境变量写在/etc/profile里,是管理员设的,改不了。。
作者
Author:
beyond    时间: 2023-3-30 15:55
qmlearner 发表于 2023-3-23 10:16
我是在服务器上安装,我看了下MKL的环境变量写在/etc/profile里,是管理员设的,改不了。。

那也可以改的

echo $PATH
然后export PATH= ......
echo $LD_LIBRARY_PATH
export LD_LIBRARY=......
把有MKL的部分去掉就可以了
作者
Author:
qmlearner    时间: 2023-4-3 14:36
beyond 发表于 2023-3-30 15:55
那也可以改的

echo $PATH

echo $PATH看到的环境变量应该都是本用户自己添加的环境变量,只对本用户有效(echo $PATH看了一下,我的环境变量里确实是没有MKL)。但我们服务器上是在/ect/profile里添加了一个对所有用户有效的MKL环境变量,所以我觉得作为普通用户应该没权限修改这个。多谢啦
作者
Author:
乐平    时间: 2023-4-3 19:29
本帖最后由 乐平 于 2023-4-3 19:43 编辑
qmlearner 发表于 2023-4-3 14:36
echo $PATH看到的环境变量应该都是本用户自己添加的环境变量,只对本用户有效(echo $PATH看了一下,我的 ...

你可以找一下服务器里 Intel 编译器里的 MKL 的位置在哪里,然后自己 source 它就能调用了

比如,如果你的服务器里 Intel 编译器安装在 /share/intel2020,那么你可以

  1. source /share/intel2020/parallel_studio_xe_2020/compilers_and_libraries_2020/linux/mkl/bin/mklvars.sh intel64
复制代码



如果你的服务器上安装的是 Intel OneAPI,类似地

  1. source /share/oneapi2022/mkl/latest/env/vars.sh intel64
复制代码

确认是否已经调用了 MKL,可以输入
  1. echo $MKLROOT
复制代码




作者
Author:
abin    时间: 2023-4-3 19:40
还真有不专业的运维技术,
在生产环境,
使用全局设定呀!

这是多么白痴呀!
作者
Author:
qmlearner    时间: 2023-4-4 09:52
乐平 发表于 2023-4-3 19:29
你可以找一下服务器里 Intel 编译器里的 MKL 的位置在哪里,然后自己 source 它就能调用了

比如,如果 ...

好滴,我去试一下,多谢老师指点
作者
Author:
qmlearner    时间: 2023-4-4 09:52
abin 发表于 2023-4-3 19:40
还真有不专业的运维技术,
在生产环境,
使用全局设定呀!


作者
Author:
qmlearner    时间: 2023-4-4 11:28
abin 发表于 2023-4-3 19:40
还真有不专业的运维技术,
在生产环境,
使用全局设定呀!

请问下大佬,如果我自己离线安装一个MKL的话,/etc/profile中的变量会把我自己的覆盖吗?就是编译cp2k的时候它会直接找/etc/profile中的MKL还是找我自己装的MKL呢?
作者
Author:
乐平    时间: 2023-4-4 11:46
qmlearner 发表于 2023-4-4 11:28
请问下大佬,如果我自己离线安装一个MKL的话,/etc/profile中的变量会把我自己的覆盖吗?就是编译cp2k的 ...

我在 10 楼的帖子里告诉你了呀,你可以用
  1. echo $MKLROOT
复制代码

命令查看你调用的是哪个 MKL
作者
Author:
qmlearner    时间: 2023-4-4 13:06
乐平 发表于 2023-4-4 11:46
我在 10 楼的帖子里告诉你了呀,你可以用

命令查看你调用的是哪个 MKL

我的情况是管理员安装了一个MKL,并且设置成了全局变量,但是我用这个MKL编译时总是报错。所以想自己普通用户安装一个MKL,在自己本地的~/.bashrc中设置好自己安装的MKL的位置。我的问题是我本地~/.bashrc中source的优先级是否会低于/ect/profile中的优先级?
作者
Author:
乐平    时间: 2023-4-4 15:08
本帖最后由 乐平 于 2023-4-4 15:10 编辑
qmlearner 发表于 2023-4-4 13:06
我的情况是管理员安装了一个MKL,并且设置成了全局变量,但是我用这个MKL编译时总是报错。所以想自己普通 ...

你可以先安装试试
调用之后用 echo $MKLROOT 看看就知道调用的是哪个
或者,你现在就可以用 echo $MKLROOT 查看是否一登录就自动调用了 MKL。如果不是一登录就调用了管理员安装的 MKL,那就不存在什么优先级。

作者
Author:
qmlearner    时间: 2023-4-4 15:46
乐平 发表于 2023-4-4 15:08
你可以先安装试试
调用之后用 echo $MKLROOT 看看就知道调用的是哪个
或者,你现在就可以用 echo $MKLR ...

对的,现在一登录就是调用的管理员安装的那个
作者
Author:
abin    时间: 2023-4-4 16:26
qmlearner 发表于 2023-4-4 11:28
请问下大佬,如果我自己离线安装一个MKL的话,/etc/profile中的变量会把我自己的覆盖吗?就是编译cp2k的 ...

自己开个虚拟机试试不就得了……

我记不住……
作者
Author:
乐平    时间: 2023-4-4 16:33
本帖最后由 乐平 于 2023-4-4 16:38 编辑
qmlearner 发表于 2023-4-4 15:46
对的,现在一登录就是调用的管理员安装的那个

emmmmmm

你联系你们集群的管理员,让他安装 environment modules,并设置好各个编译器,软件的 modulefile

官网:https://modules.sourceforge.net/
手册:https://modules.readthedocs.io/en/latest/INSTALL.html

以后调用的时候直接 module load xxx (其中 xxx 代表要调用的任何环境),不用的时候 module unload xxx

集群不设置 modules 太容易各种环境冲突,出现了问题就很麻烦。



作者
Author:
qmlearner    时间: 2023-4-4 16:46
abin 发表于 2023-4-4 16:26
自己开个虚拟机试试不就得了……

我记不住……

刚才装了一个Intel OneAPI base,export 了一下MKL,echo $MKLROOT显示是我自己装的MKL
作者
Author:
qmlearner    时间: 2023-4-4 16:47
乐平 发表于 2023-4-4 16:33
emmmmmm

你联系你们集群的管理员,让他安装 environment modules,并设置好各个编译器,软件的 module ...

嗯嗯,刚才装了一个Intel OneAPI base,export 了一下MKL,echo $MKLROOT显示是我自己装的MKL。等我再编译一把试试看。多谢啦
作者
Author:
qmlearner    时间: 2023-4-4 17:07
qmlearner 发表于 2023-4-4 16:47
嗯嗯,刚才装了一个Intel OneAPI base,export 了一下MKL,echo $MKLROOT显示是我自己装的MKL。等我再编 ...

刚才从头开始重新编译了一下,没有看到关于mkl的问题了,但是出现了xx/cp2k-2-23.1/exts/dbcsr/src/mpi/dbcsr_mpiwrap.F:23:7: Fatal Error: Cannot read module 'mpi.mod' opened at (1), because it was created by a different version of GNU Fortran的错误。

疯了啊,这是啥原因啊?
作者
Author:
乐平    时间: 2023-4-4 17:18
qmlearner 发表于 2023-4-4 17:07
刚才从头开始重新编译了一下,没有看到关于mkl的问题了,但是出现了xx/cp2k-2-23.1/exts/dbcsr/src/mpi/d ...

确认一下 mpi 的版本
  1. which mpirun
复制代码



再确认一下 gcc 的版本
  1. gcc -v
复制代码


或者 gcc 和 openmpi 都重新用 toolchain 安装,不要用系统自带的。

  1. ./install_cp2k_toolchain.sh --math-mode=mkl --with-gcc=install --with-openmpi=install --with-ptscotch=install --with-superlu=install  --with-pexsi=install  --with-quip=install --with-plumed=install  --with-libtorch=install
复制代码

作者
Author:
qmlearner    时间: 2023-4-4 17:27
乐平 发表于 2023-4-4 17:18
确认一下 mpi 的版本

mpi 是openmpi411,gcc是9.3.0。我看卢老师的帖子里说系统里装了openmpi,再用toolchain安装的话可能会造成冲突。怕以前装的软件也不能用了,一直没尝试用toolchain安装openmpi。
作者
Author:
乐平    时间: 2023-4-4 18:07
qmlearner 发表于 2023-4-4 17:27
mpi 是openmpi411,gcc是9.3.0。我看卢老师的帖子里说系统里装了openmpi,再用toolchain安装的话可能会造 ...

不会冲突
作者
Author:
qmlearner    时间: 2023-4-6 17:49
乐平 发表于 2023-4-4 18:07
不会冲突

我用toolchain安装了openmpi4.1.4,gcc还是用9.3.0,刚才测试了一下,编译成功了。多谢老师指导!
作者
Author:
乐平    时间: 2023-4-9 21:52
qmlearner 发表于 2023-4-6 17:49
我用toolchain安装了openmpi4.1.4,gcc还是用9.3.0,刚才测试了一下,编译成功了。多谢老师指导!

祝贺!

由于每次运行 CP2K 的时候都需要 source 你自己安装的环境,也就是安装的时候程序提示你的
  1. source cp2k/tools/toolchain/install/setup
复制代码


所以你编译时候安装的 openmpi 和你之前系统里的 openmpi 不会冲突。同理,你如果安装 gcc 也不会与你系统的 gcc 冲突。
作者
Author:
qmlearner    时间: 2023-4-10 09:53
乐平 发表于 2023-4-9 21:52
祝贺!

由于每次运行 CP2K 的时候都需要 source 你自己安装的环境,也就是安装的时候程序提示你的

嗯嗯,CP2K的运行环境相当于一个自治区(只有=system的时候会用一下外援),理解了,谢谢老师!




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