计算化学公社

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

[CP2K] 计算集群Intel编译CP2K 2024.1,make时报错undefined reference

[复制链接 Copy URL]

76

帖子

0

威望

506

eV
积分
582

Level 4 (黑子)

傻傻的木瓜

跳转到指定楼层 Go to specific reply
楼主
前帖提到,在某Slurm集群上安装成功的较新CP2K 2024.1跑分子动力学时,速度相比实验室提供的预编译9.1版明显偏慢。鉴于新装的CP2K 2024.1采用gcc编译器和自行随工具链配置的OpenMPI,而旧的9.1版采用Intel编译器和Intel MPI,现欲复原当时的编译环境重新安装一遍。

虽然没有旧9.1版的安装过程记录,但查看arch/local.psmp文件以及运行cp2k.psmp -v的输出,可知其采用Intel OneAPI 2022.3的编译器和MPI。集群上加载相应模块后,icc, icpc, ifort以及mpirun的版本均显示为2021.7,应当是CP2K支持的编译器版本。cmake版本是3.26.5,与以前安装成功的所用一致。另外,集群还可加载fftw/3.3.10_intel-2022.3-impi模块。

在./install_cp2k_toolchain.sh安装工具链时,指定采用intel编译器而不采用gcc编译器,libvori-220621、cosma-2.6.6及其他库基本可以正常安装完毕。然而复制arch文件、source setup后make -j 64 ARCH=local VERSION="ssmp psmp",一段时间后集中报错undefined reference,有两种类型:

  1. /home/xxxxxx/cp2k-2024.1_intel-2022.3-impi/tools/toolchain/install/libvori-220621/lib/libvori.a(bqb_parmset.cpp.o): In function `CBQBParameterSet_Compressor::ToString[abi:cxx11](int) const':
  2. /home/xxxxxx/cp2k-2024.1_intel-2022.3-impi/tools/toolchain/build/libvori-220621/src/bqb_parmset.cpp:132: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()'
复制代码
  1. /home/xxxxxx/cp2k-2024.1_intel-2022.3-impi/tools/toolchain/install/libvori-220621/lib/libvori.a(v_unitcell.cpp.o): In function `std::deque<int, std::allocator<int> >::_M_reserve_map_at_back(unsigned long)':
  2. /opt/rh/gcc-toolset-13/root/usr/lib/gcc/x86_64-redhat-linux/13/../../../../include/c++/13/bits/new_allocator.h:135: undefined reference to `std::__throw_bad_array_new_length()'
复制代码


有说法是这两种故障均与C++编译器没有正确连接库、指定标准有关,但检查local.psmp可以确认编译选项中有-lstdc++和-std=c++14。那么如何解决呢?
√546=23.36664289109

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

2#
发表于 Post on 2024-10-20 09:10:13 | 只看该作者 Only view this author
本帖最后由 abin 于 2024-10-20 12:14 编辑

slurm仅仅是调度器,
和编译没啥关系?

单机多核心并行还是多机器多核心并行?

多机器通讯采用何种硬件? 你的MPI有无支持特定的硬件?

所在机器操作系统版本?
High-Performance Computing for You
为您专属定制的高性能计算解决方案

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

76

帖子

0

威望

506

eV
积分
582

Level 4 (黑子)

傻傻的木瓜

3#
 楼主 Author| 发表于 Post on 2024-10-20 12:22:23 | 只看该作者 Only view this author
本帖最后由 Uus/pMeC6H4-/キ 于 2024-10-21 20:21 编辑
abin 发表于 2024-10-20 09:10
slurm仅仅是调度器,
和编译没啥关系?

单机多核心并行还是多机器多核心并行?

多机器通讯采用何种硬件? 你的MPI有无支持特定的硬件?

所在机器操作系统版本?

这个计算集群用了root权限不开放的Red Hat Enterprise Linux 8.9系统,提交任务时资源限制为单一节点的2个Intel CPU共112核500GB内存,应为单机多核心并行。

从local.psmp前五行定义的编译器flags看,Intel MPI似乎也参与编译。
  1. CC          = /opt/system/app/intel/2022.3.1/mpi/2021.7.1/bin/mpiicc -cc=icx
  2. CXX         = /opt/system/app/intel/2022.3.1/mpi/2021.7.1/bin/mpiicpc -cxx=icpx
  3. AR          = ar -r
  4. FC          = /opt/system/app/intel/2022.3.1/mpi/2021.7.1/bin/mpiifort -fc=ifort
  5. LD          = /opt/system/app/intel/2022.3.1/mpi/2021.7.1/bin/mpiifort -fc=ifort
复制代码


第二天编辑:原来关键就在CC和CXX这里。在工具链安装的时候只写--with-intel=system会采用比较新的Intel编译指令icx和icpx,这两项配置像上面那样写到local.psmp后make时也会沿用。除--with-intel=system外还添加--with-intel-classic=yes,可以切换为经典编译器的icc和icpc指令,此时工具链和make均正常结束,编译出的cp2k.psmp也能跑。(划掉)感觉这不是此版本Intel编译器的通病,更像是这个特定集群Intel编译器模块的问题,或许切换编译器的解决方法不太有普遍性,仅作记录。(划掉)CP2K的官网也写了,Intel oneAPI 2021.3版的编译器不能支持。
√546=23.36664289109

本版积分规则 Credits rule

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

GMT+8, 2024-11-23 09:41 , Processed in 0.194318 second(s), 21 queries , Gzip On.

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