我有以下代码:
#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 并在这些函数中运行多个线程呢?
谢谢!
我有以下代码:
#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
将呈现所有parallel
区域,嵌套超过3
级别深度,处于非活动状态。