我有以下代码:
#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!
答案 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
级别,不活动。