|
前帖提到,在某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,有两种类型:
- /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':
- /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()'
复制代码- /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)':
- /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。那么如何解决呢?
|
|