17

在 OpenMP 中,#pragma omp master指令内的任何代码都由单个线程(主线程)执行,在区域末尾没有隐含的屏障。(请参阅LLNL OpenMP 教程中有关 MASTER 指令的部分)。

这似乎等同于#pragma omp single nowait(除了“主”之外,任何线程都可以执行单个区域)。

如果有的话,在什么情况下使用它是有益的#pragma omp master

4

2 回答 2

18

尽管single nowait构造在大多数情况下等同于master构造:

  1. 如果有任何需要,该master构造可以在工作共享构造中使用。构造不是这种情况single nowait,因为两个工作共享构造不能嵌套在同一个并行区域中

  2. 一些库希望主线程执行某些操作。例如 MPI 库,当使用等于 的线程支持级别初始化时 MPI_THREAD_FUNNELED,仅允许主线程进行 MPI 调用

于 2013-09-16T05:45:08.530 回答
6

除了嵌套限制之外,single构造可以比master构造更慢地实现,因为它更复杂和灵活。您可能想要检查您的特定实现,但通常master可以更快地实现,因此与single nowait构造相比,它的多次调用可能会受益。

于 2013-09-17T09:25:20.560 回答