OpenCAEPoro:数学库、VTune分析优化以及多机运行

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


前言

在高性能计算(HPC)中,优化数值模拟器的性能对于提高计算效率至关重要。OpenCAEPoro作为一个专为多孔介质设计的数值模拟器,其性能优化不仅可以减少计算时间,还可以提高资源利用率。本文将探讨通过更换数学库和使用VTune性能分析工具来优化OpenCAEPoro的实践。


一、数学库优化

数学库是科学计算中的核心组件,对性能有着直接的影响。我们测试了两种流行的数学库:Intel MKL和OpenBLAS。

Intel MKL

在CMakeLists.txt 中设置:

find_package(MKL REQUIRED)
if(MKL_FOUND)
    target_link_libraries(${LIBNAME} PUBLIC ${MKL_LIBRARIES})
    target_include_directories(${LIBNAME} PUBLIC ${MKL_INCLUDE_DIRS})
endif()

替换后的object time 有所下降,不过下降幅度偏小,大致为53.2秒多。
在这里插入图片描述

OpenBLAS

解压下载的文件:

tar -xvf OpenBLAS-0.3.6.tar.gz
cd OpenBLAS-0.3.6
make
make PREFIX=/path/to/OPENBLAS install

替换 /path/to/OPENBLAS 为自己安装 OpenBLAS 的路径。

export LD_LIBRARY_PATH=/path/to/OPENBLAS/lib:$LD_LIBRARY_PATH

在 CMakeLists.txt 文件中链接 OpenBLAS(注意替换路径):

find_library(OPENBLAS_LIB NAMES openblas libopenblas PATHS /path/to/OPENBLAS/lib)
if(OPENBLAS_LIB)
    target_link_libraries(${LIBNAME} PUBLIC ${OPENBLAS_LIB})
endif()

检查安装:

 ldconfig -p | grep openblas 

不过替换该数学库后的效果仍然不明显。

分析

其实还可以试试Eigen等其他数学库,不过我也没来得及试试。
不过testcase1所计算的矩阵式比较小,也可以考虑搜集资料改进一下这部分运算。

二、VTune性能分析

1.分析

vtune -collect hotspots -result-dir result1 mpirun -np 9 ./testOpenCAEPoro ./data/test/test.data verbose=1

2.查看

vtune -report summary -r result1

3.分析(部分截图)

在这里插入图片描述
因为对vtune不太熟悉,所以得到结果也不知道从哪方面改进(抱歉)。

三、多机运行

4*50时大致时间为:
在这里插入图片描述

4*55时大致时间为:
在这里插入图片描述
(其实应该先多机跑的,浪费了好多时间)

四、改进函数

pestis_solve:

改进了循环部分(代码能力有限)。

Partition.cpp文件中的SetDistribution函数

1.可以使用 unordered_map(哈希表),减少查找发送缓冲区的时间复杂度。
2.预先检查哈希表中是否存在键值,进而减少循环中的条件分支。
3.使用 vector 的 push_back 方法来添加新元素,而不是在循环中多次调用 vector 的 size 。

四、其他小改进

给vector提前分配空间

有部分可以被计算出来的,可以提前reserve分配好合适的空间。

提高I/O性能

可以通过使用缓冲区来收集数据,一次性写入或者读取,减少I/O操作的次数,也可以通过异步I/O操作或者非阻塞I/O,发起一个I/O请求后立即返回,程序继续执行其他任务,直到I/O操作准备好再回来处理。

总结

尝试的优化方法并不尽人意,并且代码修改这部分有待加强,能力还有待加强。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值