3

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

那么,如果我们将函数 A 中的 active omp level 设置为 3(A 中为 1,B 中为 2),是否可以确保库函数 B 的并行区域正常工作?

4

2 回答 2

0

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

于 2013-08-27T20:39:20.510 回答
0

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

当从程序的顺序部分调用时,为omp_set_max_active_levels区域设置的绑定线程是遇到线程。当从任何显式并行区域中调用时,该区域的绑定线程集(和绑定区域,如果需要) omp_set_max_active_levels是实现定义的。

后来:

该例程仅在从程序的顺序部分调用时才具有所描述的效果。当从显式并行区域中调用时,此例程的效果由实现定义。

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

于 2013-08-31T13:31:22.550 回答