2

我有以下代码:

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

谢谢!

4

1 回答 1

3

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

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

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

  • 将环境变量设置OMP_MAX_ACTIVE_LEVELSnum, 或
  • 打电话omp_set_max_active_levels(num);

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

于 2012-11-18T14:38:09.840 回答