OpenCAEPoro:进程数与编译选项优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

OpenCAEPoro是一个开源的数值模拟器,专门设计用于模拟多孔介质中的多相流和多组分流。多孔介质在自然界和工业应用中都非常普遍。


一、优化目标

本文目标是尽可能减少OpenCAEPoro模拟的OBJECT TIME。OBJECT TIME是模拟过程中CPU实际花费的时间,与WALL TIME不同,后者还包括了IO等待和并行计算中的通信时间。

二、前期准备

1.OpenCAEPoro目录下创建hostfile

gpu01:64
gpu02:64
gpu03:64
gpu04:64

2.激活相关环境

export PATH=/opt/intel/oneapi/compiler/2023.0.0/linux/bin/intel64:$PATH
source /opt/intel/oneapi/setvars.sh
which icc
which mpicc

三、优化过程

运行(单机)

mpirun -n 4 ./testOpenCAEPoro ./data/case1/case1.data verbose=1

1.改变进程数

进程数10505253545560
时间/秒277.63294.45172.92067.64055.69158.73267.640

对比数据

多次运行发现,进程数为53的情况下时间最短,时间大概为55秒多。
在这里插入图片描述

当进程数从10增加到53时,我们观察到OBJECT TIME显著减少。然而,当进程数超过53时,OBJECT TIME开始增加。这可能是由于随着进程数的增加,进程间的通信开销也增加,这可能会抵消并行计算带来的性能提升,或者由于过多的进程可能导致内存和其他系统资源的争用,从而降低效率。

2.改变编译选项

使用 -O2 作为起点

由-O3改为使用 -O2时,object time 略微下降,为54秒左右。
在这里插入图片描述

特定架构优化

使用 -xHost后,object time无明显变化。

内联函数和链接时优化

使用 -finline-functions以及使用 -flto后,object time无明显变化。

循环优化

使用 -funroll-loops 来展开循环后,object time 略微下降,53.6秒左右(虽然也不清楚是不是误差)。
在这里插入图片描述

总结

进程数调整优化,可以能够显著减少OBJECT TIME。
不同编译选项的优化,效果不尽其然,但总体变化幅度不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值