OMP Pragmas 嵌套是否有意义?

Does OMP Pragmas nesting have significance?

我正在查看如下代码(以 reviewer/auditor 身份)。下面显示的嵌套是在源代码中使用 TABS 创建的。

#pragma omp parallel
    #pragma omp sections
    {
        #pragma omp section
            p2 = ModularExponentiation((a % p), dp, p);
        #pragma omp section
            q2 = ModularExponentiation((a % q), dq, q);
    }

嵌套是风格问题吗?或者它是否具有重要意义,比如 Python?

您可以将前两个编译指示合并为一个,它不会改变语义,因此您可以更改

#pragma omp parallel
#pragma omp sections

进入

#pragma omp parallel sections

但是,为了指定任务并行度,section pragma 必须嵌套在 sections pragma 内部。您可能希望将它们分开的一个例子是,如果您想一个接一个地做两个平行部分,中间有一道屏障,例如:

#pragma omp parallel
{
  #pragma omp sections
  {
    #pragma omp section
    { ... }
    #pragma omp section
    { ... }
  }
  #pragma omp sections
  {
    #pragma omp section
    { ... }
    #pragma omp section
    { ... }
  }
}

这不需要为第二组部分创建新的"team"