'#pragma omp master'与'#pragma omp single'相比有什么好处?

Jos*_*rpe 12 openmp

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

这似乎相当于#pragma omp single nowait(除了'master'之外,任何线程都可以执行单个区域).

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

Mas*_*ano 15

虽然single nowait构造大部分时间等同于master构造:

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

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


小智 6

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