在 OpenMP 中,#pragma omp master
指令内的任何代码都由单个线程(主线程)执行,在区域末尾没有隐含的屏障。(请参阅LLNL OpenMP 教程中有关 MASTER 指令的部分)。
这似乎等同于#pragma omp single nowait
(除了“主”之外,任何线程都可以执行单个区域)。
如果有的话,在什么情况下使用它是有益的#pragma omp master
?
在 OpenMP 中,#pragma omp master
指令内的任何代码都由单个线程(主线程)执行,在区域末尾没有隐含的屏障。(请参阅LLNL OpenMP 教程中有关 MASTER 指令的部分)。
这似乎等同于#pragma omp single nowait
(除了“主”之外,任何线程都可以执行单个区域)。
如果有的话,在什么情况下使用它是有益的#pragma omp master
?
尽管single nowait
构造在大多数情况下等同于master
构造:
如果有任何需要,该master
构造可以在工作共享构造中使用。构造不是这种情况single nowait
,因为两个工作共享构造不能嵌套在同一个并行区域中
一些库希望主线程执行某些操作。例如 MPI 库,当使用等于 的线程支持级别初始化时 MPI_THREAD_FUNNELED
,仅允许主线程进行 MPI 调用
除了嵌套限制之外,single
构造可以比master
构造更慢地实现,因为它更复杂和灵活。您可能想要检查您的特定实现,但通常master
可以更快地实现,因此与single nowait
构造相比,它的多次调用可能会受益。