OpenFOAM with OpenMP

using OpenMP in OpenFOAM

有时候在 OpenFOAM 编写一些算法,用不到自带的 mpi 库。
此时可以使用 OpenMP 来对基于 OpenFOAM 编写的代码进行加速。
用法很简单,首先加入头文件:

#include <omp.h>

验证 OpenMP 并行是否生效,我们输出一下所使用的的核数:

#pragma omp single
{
Info << "Hello, omp_get_max_threads = " << omp_get_max_threads() << endl;
}

然后就可以加入 OpenMP 的魔法了,例如对 for 循环进行加速:

#pragma omp parallel for
for (label i=0; i<100; i++) // 也支持 OpenFOAM 里的 forAll
{
do something
}

最后在 Make/options 中,EXE_INC = \ 的下面一行,插入:

-fopenmp \

使用前可以指定核数(否则使用机器的所有核):

export OMP_NUM_THREADS=20

或者在超算 slurm 脚本中指定:

export OMP_NUM_THREADS=$SLURM_NTASKS

看完应该能够打造你自己的 OpenMP 并行应用了吧。

文章作者: Yan Zhang
文章链接: https://openfoam.top/openmp/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 OpenFOAM 成长之路
您的肯定会给我更大动力~