|
本帖最后由 zjxitcc 于 2024-4-3 12:42 编辑
这里面有两个问题:
(1)GNU/Intel编译器,这是指gcc/g++/gfortran与icc/icpc/ifort两类之间的选择。
(2)MPI编译器或者说MPI库,可以用诸如mpich, openmpi, Intel MPI中的任何一种,它们的可执行程序往往是mpicc, mpif90之类的MPI编译器。
这是两个不同的问题,不能混为一谈。比如我可以使用GNU编译openmpi,也可以使用Intel编译器 编译openmpi,取决于我的目的和兴趣爱好。假设我现在编译MPI并行版CP2K,我要么用GNU编译器+GNU编译的openmpi,要么用Intel编译器+Intel编译的openmpi,要么用Intel编译器+Intel MPI,但我不会去用GNU编译器+Intel编译的openmpi(这大概率会造成不少报错,即使能编译 程序可能也无法正确运行)。
了解了上述内容,现在说说你的问题。由于你没有指定Intel编译器,所以用的是GNU编译器,且“没有调用GCC而调用了英特尔编译器”、“是否必须用英特尔编译器来编译”这些说法都是不对的,存在错误指代。“MPI is detected and it appears to be Intel MPI”这个信息不是GNU/Intel编译器之争,而是openmpi没识别到,识别成了Intel MPI。
由于你写了--with-openmpi=system,你要解决的不是“找不到mpic++”,而是要确保机器上有openmpi,且openmpi是由GNU编译器 编译的,不可以是Intel编译器 编译的。如果机器上已经有openmpi,可以运行这四个命令检查路径是否正确
which mpirun
which mpif90
which mpicc
which mpicxx
如果连openmpi都没有,可以自己安装,也可以用集群上管理员安装好的(假设是在一个良好的集群上)。而要查看它们是由什么编译器编译的,需要进入上述目录,执行ldd mpirun查看其依赖库是GNU的还是Intel的。啰嗦了一堆,希望读者们能理清这里面的关系。
如果你觉得上述文字太长难以理解,直接看这两篇截然不同的编译教程,便可体会到差别
《离线安装CP2K-2022.2_Intel编译器版》
《给老爷机离线安装CP2K-2022.2的笔记》http://bbs.keinsci.com/thread-33603-1-1.html |
|