OpenMP and sections

OpenMP and sections

本文关键字:sections and OpenMP      更新时间:2023-10-16

我有以下代码:

#pragma omp parallel sections num_threads(2) {
  #pragma omp section
   Function_1;
   #pragma omp section
   Function_2;
}

但是在Function_1和Function_2中,我有一个并行,但只有一个线程运行它。那么,如何并行运行Function_1和Function_2并在这些函数中运行多个线程呢?

感谢!

将一个parallel区域放在另一个区域中称为嵌套。默认情况下,嵌套区域处于非活动状态,这意味着它们以串行方式执行。为了使它们处于活动状态,您可以:

  • 将环境变量OMP_NESTED设置为 true
  • 在封闭parallel区域之前插入以下调用:omp_set_nested(1);

还可以通过以下方式限制嵌套并行工作的级别数:

  • 将环境变量OMP_MAX_ACTIVE_LEVELS设置为 num ,或
  • 呼叫omp_set_max_active_levels(num);

其中num是所需的最大活动级别,例如,值 3 将使嵌套超过 3 层的所有parallel区域处于非活动状态。