【问题标题】:OpenMP and sectionsOpenMP 和部分
【发布时间】:2012-11-18 05:34:07
【问题描述】:

我有以下代码:

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

谢谢!

【问题讨论】:

    标签: c++ multithreading parallel-processing openmp


    【解决方案1】:

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

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

    还可以通过以下方式限制嵌套并行性起作用的层数:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 2012-11-27
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多