omp_set_max_active_levels()和函数调用

时间:2013-08-26 01:25:49

标签: c++ c multithreading openmp

任何人都知道omp_set_max_active_levels()的范围,假设函数A有一个omp并行区域,并且在该区域内,A的每个线程都调用库函数B,而在库函数B中有2个级别的omp并行性。

然后,如果我们将函数A中的活动omp级别设置为3(A中为1,B中为2),是否可以确保库函数B的并行区域正常工作?

2 个答案:

答案 0 :(得分:0)

如果在活动的并行区域内调用omp_set_max_active_levels(),则调用将被(应该)忽略。

答案 1 :(得分:0)

根据OpenMP 4.0标准(第3.2.15节):

  

从程序的连续部分调用时,绑定   omp_set_max_active_levels区域的线程集是遇到的   线。从任何显式并行区域内调用时,   绑定线程集(和绑定区域,如果需要)的   omp_set_max_active_levels区域是实现定义的。

以及后来:

  

此例程仅在从a调用时具有描述的效果   程序的连续部分。从内部调用时   并行区域,此例程的效果是实现定义。

因此,如果在程序的顺序部分中设置嵌套并行区域的最大数量,那么应该确保在OpenMP的任何兼容实现上一切都能按预期工作。