提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
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.改变进程数
进程数 | 10 | 50 | 52 | 53 | 54 | 55 | 60 |
---|---|---|---|---|---|---|---|
时间/秒 | 277.632 | 94.451 | 72.920 | 67.640 | 55.691 | 58.732 | 67.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。
不同编译选项的优化,效果不尽其然,但总体变化幅度不大。