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

时间:2013-09-16 04:34:36

标签: openmp

在OpenMP中,#pragma omp master指令中的任何代码都由单个线程(主控)执行,区域末尾没有隐含的屏障。 (见section on MASTER directive in the LLNL OpenMP tutorial)。

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

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

2 个答案:

答案 0 :(得分:15)

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

  1. 如果需要,master构造可以在工作共享构造中使用。对于single nowait构造,情况并非如此,因为两个工作共享构造不能嵌套在同一个并行区域中

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

答案 1 :(得分:6)

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