OneAPI 编译cp2k 9.1和cp2k 2023.1

news2024/9/28 23:28:03

环境信息:

Rocky Linux 8.6 Linux server 4.18.0-425.19.2.el8_7.x86_64

gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC)

OneAPI 2023

        Intel(R) oneAPI DPC++/C++ Compiler 2023.0.0 (2023.0.0.20221201)

        ifort version 2021.8.0

一、编译cp2k 9.1

这里用的是gcc编译器编译串行的依赖和cp2k,然后并行版本依赖和cp2k还是用到Intel的工具mpiifort,mpiicc。且用了Intel的MKL。

首先要载入Intel OneAPI的module或者用source的方法载入环境变量。

module load compiler mkl mpi 

然后解压cp2k,并进入toolchain目录

# wget https://github.com/cp2k/cp2k/releases/download/v9.1.0/cp2k-9.1.tar.bz2
tar -xvjf cp2k-9.1.tar.bz2
cd cp2k-9.1/tools/toolchain

然后运行toolchain自动编译工具

./install_cp2k_toolchain.sh \
--with-gcc=system \
--math-mode=mkl \
--with-mkl=system \
--with-intelmpi=system \
--with-scalapack=no \
--with-sirius=no \
--with-plumed=install

一切正常会提示成功

Done!

Now copy:

  cp /home/xxx/cp2k/cp2k-9.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 /home/xxx/cp2k/cp2k-9.1/tools/toolchain/install/setup

To build CP2K you should change directory:

  cd cp2k/

  make -j 48 ARCH=local VERSION="ssmp sdbg psmp pdbg"

按照上边的操作,拷贝相关文件,添加环境变量,然后编译。这里先编译ssmp 和 psmp。

cp install/arch/* ../../arch/
source install/setup
cd ../../
make -j 48 ARCH=local VERSION="ssmp psmp"

小编自己测试ssmp 和 psmp通过。pdbg 没有编译通过,而sdbg有一个依赖库liblsan需要安装

sudo yum install -y liblsan 
make -j 48 ARCH=local VERSION="sdbg"

成功之后可以看到在exe/local目录里边有这么一些文件

lrwxrwxrwx 1 sam sam     9 May  5 23:32 cp2k.popt -> cp2k.psmp
-rwxrwxr-x 1 sam sam  509M May  5 23:32 cp2k.psmp
-rwxrwxr-x 1 sam sam  339M May  6 00:16 cp2k.sdbg
lrwxrwxrwx 1 sam sam     9 May  5 23:32 cp2k_shell.psmp -> cp2k.psmp
lrwxrwxrwx 1 sam sam     9 May  6 00:16 cp2k_shell.sdbg -> cp2k.sdbg
lrwxrwxrwx 1 sam sam     9 May  6 06:57 cp2k_shell.ssmp -> cp2k.ssmp
lrwxrwxrwx 1 sam sam     9 May  6 06:57 cp2k.sopt -> cp2k.ssmp
-rwxrwxr-x 1 sam sam  292M May  6 06:57 cp2k.ssmp

 可以看到popt是连接到psmp的,这是我们常用的版本。

如果要测试编译的文件是否正常运行,可以

make test

不得不提的问题是:libint的问题,在编译依赖库(运行toolchain)时,libint编译会报错使得libint的mod(fortran模块)文件没有被正确安装(脚本里边的make install没有执行)。

报错信息如下:

/home/sam/cp2k/cp2k-9.1-oneapi2023/cp2k-2023.1/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5/lib/.libs/libint2.a(libint2_static_init.o): In function `__st                                                                                                                          i__$E':

libint2_static_init.cc:(.text+0xc): undefined reference to `std::ios_base::Init::Init()'

libint2_static_init.cc:(.text+0x21): undefined reference to `std::ios_base::Init::~Init()'

/home/sam/cp2k/cp2k-9.1-oneapi2023/cp2k-9.1/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5/lib/.libs/libint2.a(libint2_static_init.o):(.gnu.linkonce.d.D                                                                                                                          W.ref.__gxx_personality_v0+0x0): undefined reference to `__gxx_personality_v0'

………………………….

………………………………….

OSVRRP0InBra_aB_p__0__pp__1___TwoPRep_unit__0__s__1___Ab__up_0.cc:(.text+0x23ec): undefined reference to `std::ios_base::Init::Init()'

OSVRRP0InBra_aB_p__0__pp__1___TwoPRep_unit__0__s__1___Ab__up_0.cc:(.text+0x2401): undefined reference to `std::ios_base::Init::~Init()'

make[1]: *** [Makefile:35: fortran_example] Error 1

make[1]: Leaving directory '/home/sam/cp2k/cp2k-9.1/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5/fortran'

make: *** [Makefile:38: fortran] Error 1

解决方法如下:

先进入目录(根据实际情况)

cd /home/sam/cp2k/cp2k-9.1/tools/toolchain/build/libint-v2.6.0-cp2k-lmax-5/fortran

将fortran/Makefile.in 改成如下

fortran_example: fortran_example.o libint_f.o

        $(LTLINK) $(CXX) $(CXXFLAGS) $(LDFLAGS) $(COMPUTE_LIB) $(SYSLIBS) $(FCLIBS) -o $@ $^

变成

fortran_example: fortran_example.o libint_f.o

        $(LTLINK) $(CXX) $(CXXFLAGS) $(LDFLAGS) $(COMPUTE_LIB) $(SYSLIBS) $(FCLIBS) -lstdc++ -o $@ $^

然后

make
make install

然后再去编译cp2k。

二、编译cp2k 2023.1

这里串行和并行用的都是OneAPI的编译器以及MKL。基本步骤一致,toolchain的参数要稍微变化一下。

module load compiler mkl mpi 
cd tools/toolchain
./install_cp2k_toolchain.sh \
--math-mode=mkl \
--with-intelmpi=system \
--with-scalapack=no \
--with-sirius=no \
--with-plumed=install

成功后进行编译

cp install/arch/* to the ../../arch/
source install/setup
cd ../../
make -j 48 ARCH=local VERSION="ssmp sdbg psmp pdbg"

这里也有一个不得不提到的错误

在最终make ARCH=local VERSION="ssmp sdbg psmp pdbg" 时,

/home/sam/cp2k/cp2k-2023.1/src/fm/cp_fm_types.F(2261): error #6780: A dummy argument with the INTENT(IN) attribute shall not be defined nor become undefined.   [FM]

         READ (unit) fm%local_data(:, j)

---------------------^

使得  ssmp和sdbg 没产生。这个应该是代码里边的一个问题,串行代码对一个INTENT(IN) 的变量进行了赋值,暂时的办法就是把INTENT(IN) 改成INTENT(INOUT) ,这实际上不会改变程序的运行,INTENT实际上应该在代码编译时能让编译器检查代码的错误(告诉编译器,在向一个函数里传入一个“地址”,但是这个地址对应的值不应该在这个函数里边被改变)。具体修改:

 vi src/fm/cp_fm_types.F

把cp_fm_types.F里边的函数cp_fm_read_unformatted里边的声明

YPE(cp_fm_type), INTENT(IN)          :: fm

改成

YPE(cp_fm_type), INTENT(INOUT)          :: fm

三、一些Tips

首先, tools/toolchain里边的scripts目录,是install_cp2k_toolchain.sh要调用的脚本,这些脚本里边包含下载的依赖代码的版本和下载地址。在运行install_cp2k_toolchain.sh时,代码压缩包被下载到build目录,并在里边进行编译。且,下载前会检测build里边是否有这个包,如果已经有了,就会跳过下载进行解压。对于下载未完成的包会提示解压报错,这时需要删除这个未完成的包重新来过。如果下载太慢,可以自己手动下载然后拷贝到build里边,但是要注意版本和文件名要严格对应。另外一种方法是给wget添加代理参数:

cd ./tools/toolchain
vi scripts/tool_kit.sh

将(两处)

local __wget_flags='--quiet'

改成

local __wget_flags='--quiet -e use_proxy=yes -e http_proxy=http://192.168.1.99:8090'

另外,install文件夹是依赖软件包的安装目录,如果要重新编译这个依赖包,需要将install里边相应的文件夹删除。

最后,可以将下载好的依赖,修改掉“bug”连同cp2k的源码一起打包,以便下次使用。如有需要小编打好的包,请mail我(Email:  fangjzh#foxmail.com , 将#改成@)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux系统下常用软件的安装与操作实现

本文来介绍下如何在 Linux 上安装 Windows 上常用的软件,桌面更多的用的是 Ubuntu ,下面就以 Ubuntu 为例。 目录 一、安装环境 二、安装步骤 三、总结 一、安装环境 本文使用的安装环境,如下所示: linuxylinuxy:~$ cat /proc…

【Python】【进阶篇】25、Django for标签详解

目录 25、Django for标签详解1. for标签的使用2. for标签嵌套使用3. forloop变量详解 25、Django for标签详解 通过上一节的《Django if标签详解》的讲解,我相信大家对于模板标签已经不再陌生,在本节我们再给大家隆重介绍一位最熟悉的陌生人&#xff0c…

如何熟练的使用trtexec

目录 如何熟练的使用trtexec前言1. 参数解释1.1 Model Options1.2 Build Options1.3 Inference Options1.4 Reporting Options1.5 System Options1.6 完整的参数 如何熟练的使用trtexec 前言 杜老师推出的 trtexec 工具的使用课程,链接。记录下个人学习笔记&#x…

禁止Windows更新自动安装驱动程序

禁止Windows更新自动安装驱动程序 问题解决方案方案1:修改系统设置方案2:修改组策略方案3:修改注册表方案4:回退驱动 问题 Windows更新时,会自动更新驱动程序,甚至有时会将驱动程序反向更新,替…

使用 webdriver API 编写自动化脚本的基本语法

文章目录 1. 打开和关闭浏览器1)打开浏览器并访问 URL2)关闭浏览器窗口 2. 元素的定位1)以 id 定位元素2)以 name 定位元素3)以 tag name 定位元素4)以 class name 定位元素5)以 xpath 定位元素…

第九章 控制单元的功能课后习题

指令周期有四个阶段:取值 间址 执行 中断 ,控制单元为了完成不同指令会发出不同的操作命令,这些操作信号控制着计算机所有部件有次序的完成不同的操作,以达到执行程序的目的。 控制单元的外特性 9.2控制单元的功能是什么?其输入…

【Java+GS】GeoServer——使用Java发布图层(SHP文件和DB数据库),附自用工具类

文章目录 SHP文件发布逻辑 1、获取到geoserver的manager对象2、调用createWorkArea方法,参入manager,创建空间空间 workArea3、调用createShpDataPool方法,创建数据存储4、发布样式Style.5、发布图层 调用业务层库发布shp文件图层业务逻辑如下…

【致敬未来的攻城狮计划】— 连续打卡第二十五天:RA2E1的 DTC传输模式

系列文章目录 由于一些特殊原因: 系列文章链接:(其他系列文章,请点击链接,可以跳转到其他系列文章) 24.RA2E1的 DMAC——数据传输 文章目录 系列文章目录 前言 一、DTC是什么? 二、DTC内部寄存…

Springboot——集成Elastic Job实现任务调度

目录 1.任务调度 2.Elastic Job 3.springboot集成Elastic Job 1.任务调度 什么是任务调度? 任务调度就是指系统为了自动地完成特定任务,在指定的时刻去执行任务的过程,其目的是为了让系统自动且精确地完成任务从而解放人力资源。 如&am…

WX小程序 - 1

视图层:WXML,WXSS 逻辑层:JS 响应数据绑定,事件绑定 勾选这个其实就是解决跨域问题(仅限本地开发阶段)。 上线需要去合法域名添加。 app.json 文件创建和删除,保持一致,否则报错…

二叉树的层序遍历思想模板

分为两种&#xff1a; 1.第一种是直接将遍历的数据保存到列表里&#xff1b; 2.第二种是将每一层的数据以列表形式保存在列表&#xff1b;&#xff08;今天要讲述的内容&#xff09; 代码如下&#xff0c;思想在后 class Solution {public List<List<Integer>> …

全新 – Amazon EC2 R6a 实例由第三代 AMD EPYC 处理器提供支持,适用于内存密集型工作负载

我们在 Amazon re:Invent 2021 上推出了通用型 Amazon EC2 M6a 实例&#xff0c;并于今年 2 月推出了计算密集型 C6a 实例。这些实例由运行频率高达 3.6 GHz 的第三代 AMD EPYC 处理器提供支持&#xff0c;与上一代实例相比&#xff0c;性价比提高多达 35%。 如今&#xff0c;…

不断联的从Google Drive下载超大文件

不断联的从Google Drive下载超大文件 最近在研究OWOD代码&#xff0c;需要从google drive 下载超大文件&#xff0c;普通方式下载&#xff0c;首先得有个上外网的工具&#xff0c;其次下载过程中总是会断开&#xff0c;所以看了一些博客&#xff0c;总结如下&#xff1a; 安…

基于TINY4412的Andorid开发-------简单的LED灯控制【转】

基于TINY4412的Andorid开发-------简单的LED灯控制 阅读目录(Content) 一、编写驱动程序二、编写代码测试驱动程序三、编写HAL代码四、编写Framework代码五、编写JNI代码六、编写App 参考资料&#xff1a; 《Andriod系统源代码情景分析》 《嵌入式Linux系统开发完全手册_基…

实时语义分割PIDNet算法TensorRT转换

[PIDNet](GitHub - XuJiacong/PIDNet: This is the official repository for our recent work: PIDNet) 是22年新开源的实时语义分割算法&#xff0c;和DDRNet一样具有不错的性能 网络结构如下&#xff1a; 网络分为三个分支&#xff0c;如上图&#xff0c;整体结构和DDRNet比…

shell 脚本中的函数

目录 一. shell 函数作用&#xff1a;二. shell 函数的定义格式&#xff1a;三.函数返回值&#xff1a;四.函数传参&#xff1a;扩展&#xff1a; 六. 函数变量的作用范围:七 . 递归7.1阶乘 八. 函数库 一. shell 函数作用&#xff1a; 使用函数可以避免代码的重复 使用函数可以…

OJ刷题 第十五篇(递推较多,奥赛篇)

31005 - 昆虫繁殖&#xff08;难度非常大&#xff0c;信息奥赛题&#xff09; 时间限制 : 1 秒 内存限制 : 128 MB 科学家在热带森林中发现了一种特殊的昆虫&#xff0c;这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵&#xff0c;每对卵要过两个月长成成虫。假设每个成虫…

从零开始 Spring Boot 27:IoC

从零开始 Spring Boot 27&#xff1a;IoC 自从开始学习和从事Spring Boot开发以来&#xff0c;一个一直让我很迷惑的问题是IoC和Bean到底是什么东西。这个问题一直到我翻阅完Spring开发文档Core Technologies (spring.io)后才真正得到解惑。 虽然中文互联网上关于IoC的文章很多…

基于AT89C51单片机的电子琴设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87765092?spm1001.2014.3001.5503 源码获取 运用单片机&#xff0c;将音乐的大部分音符与相应按键相匹配&#xff0c;让音乐爱好者利用单片机也可以进行演奏。 基…

SAP EWM /SCWM/CHM_LOG - 显示及分析检查日志

很多公司上了EWM系统后会在运行一段时间之后出现一些系统数据异常情况&#xff0c;问题大致分为以下一些情况&#xff1a; 序号异常情况1 库存调整过账后可用数量的数据不正确2 错误地传输原产国 (2)3 HU 在可用库存中&#xff0c;即使不允许 HU4 非 AQUA 级别创建仓库任务后可…