【问题标题】:OpenMP conditional parallelization - syntax for if clause in parallel sectionsOpenMP 条件并行化 - 并行部分中 if 子句的语法
【发布时间】:2019-08-28 03:12:38
【问题描述】:

平行截面模板是:

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

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

if (condition) 添加到最外层的#pragma 是否足够,或者是否还需要在每个内部#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)
    }
}

【问题讨论】:

    标签: c++ multithreading openmp


    【解决方案1】:

    根据OpenMP 4.5 docs,parallel section结构的语法如下:

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

    所以你应该只把 if 子句放在外面的#pragma。 而且(至少就我使用 OpenMP 的经验而言,是这样的)您应该将 { 放在 pragma-statement 之后的新行中,但不要放在它的末尾。因为任何#pragma 语句都是预处理器宏,而{ 不会被它解析。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多