【无标题】

首先将项目克隆到home目录

解压所有软件包

tar -zxvf lapack-3.11.tar.gz
tar -zxvf parmetis-4.0.3.tar.gz
tar -zxvf hypre-2.28.0.tar.gz
tar -zxvf petsc-3.19.3.tar.gz
tar -zxvf petsc_solver.tar.gz
tar -zxvf OpenCAEPoro.tar.gz

 安装lapack

cd lapack-3.11
make blaslib
make cblaslib
make lapacklib
make lapackelib

 安装Parmetis

使用vim编译器修改build-parmetis.sh脚本文件中预先设置的路径,修改结果如下

vim build-parmetis.sh

 开始安装

sh build-parmetis.sh

 出现报错

 这个错误提示是因为CMake在尝试使用指定的C编译器(mpiicc)和C++编译器(mpicxx)时,发现这些编译器的名称(而不是完整路径)既不在环境变量PATH中,也没有被直接指定为CMake的缓存条目CMAKE_C_COMPILERCMAKE_CXX_COMPILER的完整路径。

source /opt/intel/oneapi/setvars.sh

设置一些环境变量,以便系统能够找到这些工具的正确路径

 设置环境变量

再次安装

 这个错误表明CMake在尝试使用/opt/intel/oneapi/mpi/2021.11/bin/mpiicc编译器编译一个简单的测试程序时失败了。错误的具体原因是mpiicc脚本(可能是一个封装器脚本)在尝试调用底层的icc(Intel C编译器)时失败了,因为icc命令没有被找到。

激活icc

source /opt/intel/oneapi/compiler/2023.0.0/env/vars.sh

 再次安装

 进入hypre-2.28.0目录

同样先用vim编辑器修改build-hypre.sh中的路径(这里不知道为什么用绝对路径才可以)

安装

sh build-hypre.sh

进入petsc-3.19.3目录

修改build-petsc.sh脚本中的路径

sh build-petsc.sh

 进入petsc_solver中

继续像之前一样修改build-petscsolver.sh和CMakeLists.txt文件中的路径

sh build-petscsolver.sh

 进入OpenCAEPoro,修改路径

 测试安装(以5个进程为例)

#mpirun -n p ./testOpenCAEPoro ./data/test/test.data
mpirun -n 5 ./testOpenCAEPoro ./data/test/test.data

 正常运行,总耗时为0.369

优化

1.增大进程数

当进程数量为5的时候

mpirun -np 5 ./testOpenCAEPoro ./data/case1/case1.data verbose=1

在readme文件中发现最大进程数量为10

直接将将进程数量增加到最大进程数量

mpirun -np 10 ./testOpenCAEPoro ./data/case1/case1.data verbose=1

对比之下可以看出增加进程数时耗时明显减少

2.尝试多机跑

在OpenCAEPoro_ASC2024目录中创建hostfile文件

mpirun -np 10 -machinefile ~/OpenCAEPoro_ASC2024/hostfile ./testOpenCAEPoro ./data/case1/case1.data verbose=1

运行结果

发现并没有优化,可能是由于多机跑存在了通信瓶颈

上述所说的最大进程数量为10可能是只一台机器

尝试在多机跑时将进程数量设置的超过十(以16为例)

发现可以运行成功,且耗时明显减少

继续增大进程数(设置为32)

耗时明显减少

将进程数增加到48

耗时依旧减少了,但是减少幅度变小。

将进程数加到64

可以看出时间减少了但减小幅度很少,说明增大进程数的方法差不多已经到达极限了。

3.更改编译选项:

之前的代码中已经使用了 make -j 20 来并行编译。不过,这个值应该系统资源(特别是CPU核心数)进行调整。如果更多的CPU核心,可以尝试增加这个值;如果资源紧张,则可能需要减少。

将原代码的最后两行更改为

make -j $(nproc) PETSC_DIR=/home/liushubin/OpenCAEPoro_ASC2024/petsc-3.19.3 PETSC_ARCH=arch-linux-c-opt all
make -j $(nproc) PETSC_DIR=/home/liushubin/OpenCAEPoro_ASC2024/petsc-3.19.3 PETSC_ARCH=arch-linux-c-opt check

-j $(nproc):这个选项告诉make同时运行多少个作业(即编译任务)。$(nproc)是一个命令替换,它会被替换成当前系统可用的处理器核心数

COPTFLAGS="-O3" \

    CXXOPTFLAGS="-O3 " \

都增加一个优化编译选项-march=native

 -march=native:这个选项指示编译器生成针对运行编译命令的机器的本地架构优化的代码。编译器会尝试生成针对当前CPU指令集(如SSE、AVX等)优化的代码,从而可能提高程序的运行效率。

以五个进程为例,对比之前的运行结果有了一点优化

4.vtune性能分析

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

vtune -report summary -r result1

结果发现看不懂,对于这一部分也就跳过了。

5.修改源代码(代码能力实在有限)

找了半天只修改了Partition.cpp文件中的SetDistribution函数,在这个函数中将多次调用size的方式改为使用push_back的方法来尾插新元素。

由于临近ddl,大家都在测试,就没有继续测试了,而且就改了这个小地方,优化的效果应该微乎其微。所以忙活的半天还是增大进程数最有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值