OpenMP 条件并行化 - 并行部分中 if 子句的语法

OpenMP conditional parallelization - syntax for if clause in parallel sections

本文关键字:if 子句 语法 条件 并行化 并行部 OpenMP      更新时间:2023-10-16

并行部分模板为:

#pragma omp parallel sections{
#pragma omp section{
//parallelized
}
#pragma omp section{
//parallelized
}
}

使用if clause有条件地并行化它的正确方法是什么?

在最外层#pragma中添加if (condition)是否足够,还是还需要在每个内部#pragma中指定?

#pragma omp parallel sections if(condition){
#pragma omp section{ //is if(condition) needed here also?
//parallelized or serialized depending on if(condition)
}
#pragma omp section{ //is if(condition) needed here also?
//parallelized or serialized depending on if(condition)
}
}

根据 OpenMP 4.5 文档,并行部分构造的语法如下:

#pragma omp parallel sections [clause[[,] clause...]
{
# pragma omp section
{
}
# pragma omp section
{
}
}

所以你应该只把if子句放在外面#pragma。 而且(至少根据我对 OpenMP 的经验是这样(您应该{放在编译指示语句之后的新行中,而不是放在它的末尾。因为任何#pragma语句都是预处理器宏,并且它不会分析{