You essentially asked the same question under your profiling query. In any case, single by default has an implicit barrier while master doesn't. If you don't care which thread executes a region of code, then use single (possibly with a nowait). When OpenMP was originally designed, I believe this had more reason for existence. Now I can't really give a good example for needing it. However, the master thread is different than the others, in that it is the one that forms the team and lives on beyond the region, so there may be times a user might want to be able to distinguish it from the rest.