In OpenMP any code inside a #pragma omp master
directive is executed by a single thread (the master), without an implied barrier at end of the region. (See section
Though a single nowait
construct is most of the time equivalent to a master
construct:
The master
construct can be used inside a work-sharing construct, should any need arise. This is not the case for a single nowait
construct, as two work-sharing constructs can't be nested within the same parallel region
Some libraries want the main thread to perform certain operations. For instance the MPI library, when initialized with a level of thread support equal to MPI_THREAD_FUNNELED, allows only the main threads to make MPI calls
In addition to nesting limitations single
construct can be implemented slower than master
construct because it is more complicated and flexible. You may want to check your particular implementation, but in general master
can be implemented faster, so multiple invocations of it may benefit comparing to single nowait
construct.