OpenMP和部分

时间:2012-11-18 05:34:07

标签: c++ multithreading parallel-processing openmp

我有以下代码:

#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并在这些函数中运行多个线程?

THX!

1 个答案:

答案 0 :(得分:3)

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

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

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

  • 将环境变量OMP_MAX_ACTIVE_LEVELS设置为num
  • 致电omp_set_max_active_levels(num);

其中num是所需的最大有效等级,例如值3将呈现所有parallel个区域,嵌套超过3级别,不活动。