任何人都知道omp_set_max_active_levels()
的范围,假设函数A有一个omp并行区域,并且在该区域内,A的每个线程都调用库函数B,而在库函数B中有2个级别的omp并行性。
然后,如果我们将函数A中的活动omp级别设置为3(A中为1,B中为2),是否可以确保库函数B的并行区域正常工作?
答案 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的任何兼容实现上一切都能按预期工作。